Function at 0x80a3b0
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x74
mov esi, dword [0xbcbae0]
mov ebp, ecx
mov ecx, dword [esp + 0x8c]
movzx eax, word [esp + 0x94]
xor esi, esp
test ecx, ecx
mov dword [esp + 0x70], esi
mov edi, dword [ebp]
mov esi, dword [ebp + 8]
mov dword [esp + 0x6c], 0
mov dword [esp + 0x68], 0
mov dword [esp + 0x64], 0
mov dword [esp + 0x60], 0
mov dword [esp + 0x5c], 0
mov dword [esp + 0x58], 0
mov dword [esp + 0x54], 0
mov dword [esp + 0x30], esi
jne 0x80a41e
xor esi, esi
jmp 0x80a426
xor esi, esi
cmp dword [ecx], 0x3f
cmovle esi, ecx
mov ecx, eax
mov dword [esp + 0x5c], esi
and ecx, 0xfffffeff
test byte [edi + 0x4c], 0x10
mov ebx, dword [edx]
cmove ecx, eax
cmp ebx, 0x41
jl 0x80a651
mov edx, 0x98b254
xor eax, eax
movzx esi, byte [0xbb2323]
imul edx, edx
and edx, 3
cmp edx, 3
sete al
mov ecx, eax
not ecx
lea eax, [eax + ecx*2 + 4]
and al, 7
movzx eax, al
bt esi, eax
jb 0x80a63c
mov al, byte [0xbb2323]
xor ecx, ecx
cmp edx, 3
mov ah, 1
sete cl
mov ebx, ecx
not ebx
lea ecx, [ecx + ebx*2 + 4]
and cl, 7
xor cl, 7
shl ah, cl
or ah, al
lock cmpxchg byte [0xbb2323], ah
jne 0x80a479
mov ecx, 0x98b254
xor edx, edx
movzx eax, al
imul ecx, ecx
and ecx, 3
cmp ecx, 3
sete dl
mov ebx, edx
not ebx
lea edx, [edx + ebx*2 + 4]
and dl, 7
xor dl, 7
movzx edx, dl
bt eax, edx
jae 0x80a4f1
xor eax, eax
cmp ecx, 3
movzx esi, byte [0xbb2323]
sete al
mov edx, eax
not edx
lea eax, [eax + edx*2 + 4]
and al, 7
movzx eax, al
bt esi, eax
jae 0x80a4cb
jmp 0x80a63c
xor eax, eax
cmp ecx, 3
movzx edx, byte [0xbb2323]
sete al
mov ecx, eax
not ecx
lea eax, [eax + ecx*2 + 4]
and al, 7
movzx eax, al
bt edx, eax
jb 0x80a611
mov ecx, 0x98b254
xor eax, eax
imul ecx, ecx
and ecx, 3
cmp ecx, 3
sete al
mov ecx, eax
not ecx
and ecx, 0x883
lea ecx, [eax + ecx*2 - 0x606cac84]
mov eax, dword [0xbb2300]
mov edx, ecx
shr edx, 0x1f
or edx, ecx
xor eax, ecx
and cl, 7
mov dword [0xbb2300], eax
not eax
imul edx, eax
mov eax, dword [0xbb2304]
lea esi, [edx + edx]
xor eax, edx
shr edx, 0x1e
mov dword [0xbb2304], eax
or esi, edx
not eax
mov edx, dword [0xbb2308]
imul eax, esi
lea esi, [eax*4]
xor edx, eax
shr eax, 0x1d
mov dword [0xbb2308], edx
or esi, eax
not edx
mov eax, dword [0xbb230c]
imul edx, esi
lea esi, [edx*8]
xor eax, edx
shr edx, 0x1c
mov dword [0xbb230c], eax
or esi, edx
not eax
mov edx, dword [0xbb2310]
imul eax, esi
mov esi, eax
shl esi, 4
xor edx, eax
shr eax, 0x1b
mov dword [0xbb2310], edx
or eax, esi
not edx
mov edi, dword [0xbb2314]
imul edx, eax
mov esi, edx
shl esi, 5
xor edi, edx
shr edx, 0x1a
mov dword [0xbb2314], edi
or edx, esi
not edi
imul edi, edx
mov edx, dword [0xbb2318]
mov esi, edi
shl esi, 6
xor edx, edi
shr edi, 0x19
mov dword [0xbb2318], edx
or edi, esi
not edx
imul edx, edi
xor dword [0xbb231c], edx
mov dl, 1
shl dl, cl
or byte [0xbb2323], dl
mov eax, 0x98b254
xor ecx, ecx
imul eax, eax
and eax, 3
cmp eax, 3
sete cl
mov eax, ecx
not eax
lea ecx, [ecx + eax*2 + 4]
mov al, 0xfe
and cl, 7
xor cl, 7
rol al, cl
and byte [0xbb2323], al
push 0x40
push 0xbb2300
push ebp
call fcn.00782570
add esp, 0xc
jmp 0x80b1e6
mov dword [esp + 0xc], ebp
movzx ebp, cx
mov eax, 1
mov dword [esp + 8], esi
mov dword [esp + 4], edx
mov dword [esp + 0x1c], ecx
mov ecx, edi
mov dword [esp + 0x10], ebp
and ebp, 0x20
cmovne ebx, eax
imul eax, ebx, 0x58
lea esi, [eax + 0x2f7]
mov dword [esp + 0x34], eax
and esi, 0xfffffff8
lea edx, [esi + 0x48]
push 0
call fcn.0078dcd0
add esp, 4
cmp byte [edi + 0x51], 0
mov edx, ebx
mov ebx, eax
je 0x80a6aa
mov ecx, edi
mov edx, ebx
call fcn.00774f10
jmp 0x80b1e6
mov dword [esp + 0x50], ebp
mov ebp, dword [esp + 0xc]
mov eax, dword [esp + 4]
mov ecx, dword [esp + 0x88]
mov dword [esp + 0x18], edi
mov edi, dword [esp + 0x90]
mov dword [esp + 0x2c], edx
mov dword [ebx], ebp
mov dword [ebx + 4], eax
mov eax, dword [esp + 8]
mov dword [ebx + 8], eax
mov dword [ebx + 0x10], ecx
mov ecx, ebp
mov dword [ebx + 0xc], edi
mov dword [ebx + 0x18], 0xffffffff
mov dword [ebx + 0x14], 0xffffffff
mov byte [ebx + 0x2c], dl
call fcn.007efdc0
mov dword [ebx + 0x1c], eax
mov dword [ebx + 0x20], eax
mov eax, dword [esp + 0x1c]
lea edi, [ebx + 0x2f0]
mov word [ebx + 0x28], ax
mov eax, dword [esp + 0x98]
mov word [ebx + 0x2a], ax
mov eax, dword [ebp + 0x84]
mov dword [ebx + 0x24], eax
mov eax, dword [esp + 0x34]
mov dword [ebx + 0x4c], 0
mov dword [ebx + 0x49], 0
mov dword [ebx + 0x45], 0
mov dword [ebx + 0x41], 0
mov dword [ebx + 0x3d], 0
mov dword [ebx + 0x39], 0
mov dword [ebx + 0x35], 0
mov dword [ebx + 0x31], 0
mov dword [ebx + 0x2d], 0
add eax, 0x48
push eax
push 0
push edi
call fcn.00980a60
add esp, 0xc
add esi, ebx
lea eax, [ebx + 0x1e8]
lea ebp, [ebx + 0x50]
mov dword [esp + 0x54], ebx
mov ecx, esi
mov dword [esp + 0x58], ebp
mov dword [esp + 0x14], eax
mov dword [esp + 0x60], esi
call fcn.00810fb0
mov ecx, ebp
mov edx, ebx
mov dword [ebx + 0x1ec], 0
mov dword [esp], ebx
call fcn.00810fd0
mov edx, dword [esp + 0x88]
mov ecx, ebp
push 0x2c
call fcn.00811000
add esp, 4
cmp dword [esp + 0x2c], 0
mov dword [esp + 0x3c], edi
mov dword [esp + 0x34], ebp
je 0x80a802
mov ebx, dword [esp + 4]
mov ebp, dword [esp + 0x14]
xor edi, edi
lea eax, [edi + edi*8]
mov ecx, ebp
mov edx, dword [ebx + eax*8 + 0x34]
lea esi, [ebx + eax*8 + 8]
call fcn.00811060
mov ecx, dword [esp + 0xc]
mov edx, esi
push dword [esp + 0x34]
call fcn.00811070
add esp, 4
inc edi
cmp edi, dword [ebx]
jl 0x80a7d4
jmp 0x80a9f2
mov ecx, dword [esp + 8]
test ecx, ecx
je 0x80a814
mov eax, dword [esp]
mov cl, byte [ecx]
lea eax, [eax + 0x2d]
mov byte [eax], cl
test dword [esp + 0x10], 0x100
je 0x80a825
mov eax, dword [esp]
mov byte [eax + 0x2f], 1
mov edx, 0x78fd90
mov esi, 0x78fd90
xor eax, eax
movzx edi, byte [0xbb2347]
or edx, 2
xor esi, 2
mov ecx, edx
add ecx, esi
sete al
mov ecx, eax
not ecx
lea eax, [eax + ecx*2 + 4]
and al, 7
movzx eax, al
bt edi, eax
jb 0x80a9db
mov al, byte [0xbb2347]
mov edi, edx
xor ecx, ecx
mov ah, 1
add edi, esi
sete cl
mov ebx, ecx
not ebx
lea ecx, [ecx + ebx*2 + 4]
and cl, 7
xor cl, 7
shl ah, cl
or ah, al
lock cmpxchg byte [0xbb2347], ah
jne 0x80a860
mov ecx, 0x78fd90
mov edx, 0x78fd90
xor ebx, ebx
movzx eax, al
or ecx, 2
xor edx, 2
mov esi, ecx
add esi, edx
sete bl
mov esi, ebx
not ebx
lea ebx, [esi + ebx*2 + 4]
and bl, 7
xor bl, 7
movzx esi, bl
bt eax, esi
jae 0x80a8e0
mov esi, ecx
xor eax, eax
add esi, edx
movzx esi, byte [0xbb2347]
sete al
mov ebx, eax
not ebx
lea eax, [eax + ebx*2 + 4]
and al, 7
movzx eax, al
bt esi, eax
jae 0x80a8b9
jmp 0x80a9db
xor eax, eax
add ecx, edx
movzx edx, byte [0xbb2347]
sete al
mov ecx, eax
not ecx
lea eax, [eax + ecx*2 + 4]
and al, 7
movzx eax, al
bt edx, eax
jb 0x80a9ac
mov ecx, 0x78fd90
mov edx, 0x78fd90
xor eax, eax
xor edx, 2
or ecx, 2
add ecx, edx
sete al
mov ecx, eax
not ecx
and ecx, 0x823
lea ecx, [eax + ecx*2 - 0x5f049c64]
mov eax, dword [0xbb2330]
mov edx, ecx
shr edx, 0x1f
or edx, ecx
xor eax, ecx
and cl, 7
mov dword [0xbb2330], eax
not eax
imul edx, eax
mov eax, dword [0xbb2334]
lea esi, [edx + edx]
xor eax, edx
shr edx, 0x1e
mov dword [0xbb2334], eax
or esi, edx
not eax
mov edx, dword [0xbb2338]
imul eax, esi
lea esi, [eax*4]
xor edx, eax
shr eax, 0x1d
mov dword [0xbb2338], edx
or esi, eax
not edx
mov eax, dword [0xbb233c]
imul edx, esi
lea esi, [edx*8]
xor eax, edx
shr edx, 0x1c
mov dword [0xbb233c], eax
or esi, edx
not eax
mov dl, 1
imul eax, esi
shl dl, cl
xor dword [0xbb2340], eax
or byte [0xbb2347], dl
mov eax, 0x78fd90
mov ecx, 0x78fd90
xor edx, edx
xor ecx, 2
or eax, 2
add eax, ecx
sete dl
mov eax, edx
not eax
lea ecx, [edx + eax*2 + 4]
mov al, 0xfe
and cl, 7
xor cl, 7
rol al, cl
and byte [0xbb2347], al
push 0xbb2330
push 0
push dword [esp + 0x14]
call fcn.007f2440
add esp, 0xc
mov ebx, dword [esp + 4]
mov edx, dword [esp + 0x34]
mov ecx, ebx
call fcn.008113c0
mov edi, dword [esp + 0x18]
mov esi, dword [esp]
cmp byte [edi + 0x51], 0
jne 0x80b1c9
cmp dword [esi + 0x5c], 0
mov ecx, dword [esp + 0x10]
jle 0x80aa85
mov ebp, dword [esp + 0x34]
xor esi, esi
mov edi, dword [ebp + 0x14]
lea ebx, [esi + esi*2]
shl ebx, 4
test byte [edi + ebx + 0xa], 2
jne 0x80aa7f
mov eax, dword [edi + ebx + 0x28]
or eax, dword [edi + ebx + 0x2c]
jne 0x80aa7f
cmp dword [esp + 0x2c], 0
lea edx, [edi + ebx]
je 0x80aa59
mov ecx, dword [edx]
mov dword [esp + 0x28], edx
call fcn.008113f0
mov edx, dword [esp + 0x28]
mov ecx, dword [esp + 0x10]
test eax, eax
je 0x80aa7f
lea edi, [edi + ebx + 0xa]
push 0x10
mov eax, dword [esp + 4]
push dword [eax + 0x20]
push dword [edx]
push dword [esp + 0x18]
call fcn.007f0850
mov ecx, dword [esp + 0x20]
add esp, 0x10
or byte [edi], 4
mov ebp, dword [esp + 0x58]
inc esi
cmp esi, dword [ebp + 0xc]
jl 0x80aa1e
test ecx, 0x100
je 0x80aacd
mov ecx, dword [esp + 0xc]
mov edx, dword [esp + 4]
push dword [esp + 0x90]
push dword [esp + 0x38]
call fcn.00811460
add esp, 8
test eax, eax
je 0x80aab5
mov eax, dword [esp]
mov byte [eax + 0x2f], 1
jmp 0x80aacd
cmp dword [esp + 8], 0
jne 0x80aacd
mov eax, dword [esp]
mov ecx, dword [esp + 0x90]
or byte [eax + 0x28], 0x80
mov dword [eax + 8], ecx
cmp dword [esp + 0x2c], 1
jne 0x80aae1
lea ecx, [esp + 0x54]
call fcn.00811540
test eax, eax
jne 0x80ab2e
lea ecx, [esp + 0x54]
call fcn.00811710
mov esi, dword [esp]
mov edi, dword [esp + 0x18]
test eax, eax
jne 0x80b1c9
mov ecx, esi
xor edx, edx
call fcn.00811b20
cmp byte [edi + 0x51], 0
jne 0x80b1c9
cmp dword [esi + 8], 0
je 0x80ab37
mov eax, dword [esi + 0x34]
mov ecx, esi
inc eax
movsx edx, ax
call fcn.00811b20
mov eax, dword [esp + 0x18]
cmp byte [eax + 0x51], 0
jne 0x80b1cd
mov esi, dword [esp]
cmp dword [esi + 8], 0
jne 0x80ab4f
mov eax, dword [esp + 0x18]
test byte [eax + 0x21], 0x10
je 0x80ab4f
mov dword [esi + 0x4c], 0xffffffff
mov dword [esi + 0x48], 0xffffffff
mov eax, dword [esp + 0xc]
cmp dword [eax + 0x24], 0
jne 0x80b1cd
mov eax, dword [esp + 0x18]
cmp byte [eax + 0x51], 0
jne 0x80b1cd
cmp dword [esp + 0x90], 0
mov dword [esp + 0x38], 0xffffffff
jne 0x80ab95
mov edi, dword [esp + 4]
mov ebp, dword [esp]
mov edx, dword [esp + 0x10]
mov dword [esp + 0x14], 0xffffffff
jmp 0x80ad93
mov ebp, dword [esp]
mov edi, dword [esp + 4]
mov edx, dword [esp + 0x10]
cmp byte [ebp + 0x2c], 2
jae 0x80abb3
mov dword [esp + 0x14], 0xffffffff
jmp 0x80ad93
mov eax, dword [esp + 0x18]
mov dword [esp + 0x38], 0xffffffff
test byte [eax + 0x4d], 1
je 0x80abd2
mov dword [esp + 0x14], 0xffffffff
jmp 0x80ad93
mov esi, dword [esp + 0x14]
mov edx, dword [esp + 0x90]
mov ecx, esi
call fcn.008124a0
mov ecx, edx
mov edx, dword [esp + 0x5c]
mov dword [esp + 0x4c], eax
test edx, edx
je 0x80ac07
mov dword [esp + 0x40], ecx
mov ecx, esi
call fcn.008124a0
mov ecx, dword [esp + 0x40]
or dword [esp + 0x4c], eax
or ecx, edx
mov al, byte [ebp + 0x2c]
mov edx, dword [esp + 0x10]
mov dword [esp + 0x38], 0xffffffff
movzx ebx, al
mov byte [esp + 0x23], al
mov eax, ebx
dec eax
jg 0x80ac2f
mov dword [esp + 0x14], 0xffffffff
jmp 0x80ad93
mov dword [esp + 0x14], 0xffffffff
mov dword [esp + 0x40], ecx
mov dword [esp + 0x48], ebx
imul ecx, eax, 0x58
mov ebx, eax
mov eax, dword [esp + 0x3c]
mov edi, dword [ebp + 4]
mov dword [esp + 0x28], ecx
mov eax, dword [eax + ecx + 0x48]
movzx ecx, byte [eax + 0x10]
lea ebp, [ecx + ecx*8]
test byte [edi + ebp*8 + 0x2c], 8
jne 0x80ac6d
mov edi, dword [esp + 4]
mov ebp, dword [esp]
jmp 0x80ad8a
test edx, 0x100
jne 0x80ac7b
test byte [eax + 0x25], 0x10
je 0x80ac61
mov dword [esp + 0x24], ebx
mov esi, dword [eax + 8]
mov ebx, dword [eax + 0xc]
mov ecx, ebx
mov edx, esi
and ecx, dword [esp + 0x40]
and edx, dword [esp + 0x4c]
or edx, ecx
je 0x80aca9
mov edi, dword [esp + 4]
mov ebp, dword [esp]
mov edx, dword [esp + 0x10]
mov ebx, dword [esp + 0x24]
jmp 0x80ad8a
mov ecx, dword [esp + 0x58]
mov dword [esp + 8], ebx
mov ebx, dword [ecx + 0xc]
test ebx, ebx
jg 0x80acc1
mov ebp, dword [esp]
mov cl, byte [esp + 0x23]
jmp 0x80ad2b
mov edx, dword [ecx + 0x14]
lea ecx, [ebx + ebx*2]
lea edi, [edi + ebp*8 + 0x34]
shl ecx, 4
mov dword [esp + 0x44], edi
add ecx, edx
mov ebx, edx
mov edi, dword [ebx + 0x2c]
mov ebp, dword [ebx + 0x28]
and edi, dword [esp + 8]
and ebp, esi
or edi, ebp
je 0x80acfb
mov ebp, dword [ebx]
test byte [ebp + 4], 1
je 0x80ac95
movsx edi, word [ebp + 0x24]
mov ebp, dword [esp + 0x44]
cmp dword [ebp], edi
jne 0x80ac95
add ebx, 0x30
cmp ebx, ecx
jb 0x80acd6
mov ebx, dword [esp + 8]
mov ebp, dword [esp]
mov edi, esi
and edi, dword [edx + 0x28]
and ebx, dword [edx + 0x2c]
or ebx, edi
je 0x80ad19
or byte [edx + 0xa], 4
add edx, 0x30
cmp edx, ecx
jae 0x80ad28
mov edi, dword [eax + 8]
mov ebx, dword [eax + 0xc]
jmp 0x80ad0b
mov cl, byte [ebp + 0x2c]
mov edx, dword [esp + 8]
mov ebx, dword [esp + 0x24]
mov edi, dword [esp + 4]
movzx eax, cl
not esi
dec eax
not edx
sub eax, ebx
je 0x80ad71
mov dword [esp + 8], edx
mov edx, dword [esp + 0x3c]
mov ebx, dword [esp + 0x28]
imul ecx, dword [esp + 0x48], 0x58
imul eax, eax, 0x58
add ebx, edx
add ecx, edx
push eax
push ecx
push ebx
mov ebx, dword [esp + 0x30]
call fcn.00981230
mov edx, dword [esp + 0x14]
add esp, 0xc
mov cl, byte [ebp + 0x2c]
and dword [esp + 0x14], edx
mov edx, dword [esp + 0x10]
and dword [esp + 0x38], esi
dec dword [esp + 0x2c]
dec cl
mov byte [esp + 0x23], cl
mov byte [ebp + 0x2c], cl
mov eax, ebx
dec eax
jg 0x80ac3b
movsx eax, word [ebp + 0x34]
mov ecx, dword [ebp]
add dword [ecx + 0x84], eax
test dl, 4
jne 0x80ada9
xor edx, edx
jmp 0x80ae12
mov eax, dword [ebp + 0x338]
mov ecx, dword [eax + 0x24]
test ecx, 0x1000
jne 0x80ade5
test dl, 8
jne 0x80adc3
xor edx, edx
jmp 0x80ae12
mov edx, dword [edi + 0x18]
cmp dword [edx + 0x38], 0
je 0x80add0
xor edx, edx
jmp 0x80ae12
test byte [esp + 0x10], 0x10
jne 0x80ade5
mov edx, ecx
and edx, 0x2000
je 0x80ade5
xor edx, edx
jmp 0x80ae12
mov edx, ecx
mov bl, 2
shr edx, 0xc
and edx, 1
sub bl, dl
xor edx, edx
test cl, 0x40
mov byte [ebp + 0x2e], bl
je 0x80ae12
mov esi, dword [edi + 0x18]
mov bl, byte [esi + 0x24]
test bl, bl
js 0x80ae12
mov edx, dword [esp + 0x1c]
and ecx, 0xffffffbf
mov dword [eax + 0x24], ecx
and edx, 8
cmp dword [esp + 0x2c], 0
jle 0x80b0e4
cmp dword [esp + 0x50], 0
mov ebp, dword [esp + 0x3c]
sete al
cmp dword [esp + 0x98], 0
mov byte [esp + 0x48], al
sete cl
xor esi, esi
or cl, al
movzx eax, dx
mov byte [esp + 0x44], cl
mov dword [esp + 0x40], eax
movzx eax, byte [ebp + 0x34]
mov ebx, edi
mov ecx, dword [esp + 0x18]
lea eax, [eax + eax*8]
mov edi, dword [edi + eax*8 + 0x18]
mov dword [esp + 0x28], eax
mov edx, dword [edi + 0x48]
call fcn.007825f0
mov ecx, dword [ebp + 0x48]
test byte [edi + 0x24], 2
mov edx, eax
mov dword [esp + 0x1c], edi
mov dword [esp + 8], ecx
mov ecx, dword [esp + 0x50]
jne 0x80afc3
mov eax, dword [esp + 0x1c]
cmp dword [eax + 0xc], 0
jne 0x80afc3
mov eax, dword [esp + 8]
mov eax, dword [eax + 0x24]
test eax, 0x400
je 0x80aed1
mov edi, edx
mov ecx, dword [esp + 0x18]
mov edx, dword [esp + 0x1c]
call fcn.007c5030
mov ecx, dword [esp + 0x30]
mov edx, 0xa5
push 0xfffffffffffffff4
push eax
push 0
push 0
mov eax, dword [esp + 0x38]
push dword [ebx + eax*8 + 0x34]
call fcn.007ebd50
mov edx, edi
add esp, 0x14
jmp 0x80afc3
mov edi, dword [esp + 0x1c]
cmp dword [edi + 0x38], 0
jne 0x80afc3
and eax, 0x40
mov dword [esp + 0x24], edx
or eax, ecx
jne 0x80afa4
mov edi, dword [esp]
cmp byte [edi + 0x2e], 0
jne 0x80af02
mov ecx, dword [esp + 0x28]
mov eax, 0x60
jmp 0x80af12
mov ecx, dword [esp + 0x28]
mov eax, dword [ebx + ecx*8 + 0x34]
mov dword [edi + 0x14], eax
mov eax, 0x61
mov edx, dword [ebx + ecx*8 + 0x34]
mov ecx, dword [esp + 0xc]
push eax
push dword [esp + 0x20]
push dword [esp + 0x2c]
call fcn.007ebf70
add esp, 0xc
cmp byte [edi + 0x2e], 0
jne 0x80af91
mov eax, dword [esp + 0x1c]
cmp word [eax + 0x2a], 0x3f
jg 0x80af91
mov eax, dword [esp + 0x1c]
test byte [eax + 0x24], 0xe0
jne 0x80af91
mov ecx, dword [esp + 0x28]
mov eax, dword [ebx + ecx*8 + 0x40]
mov ecx, dword [ebx + ecx*8 + 0x44]
mov ebx, dword [esp + 4]
bsr edi, eax
bsr edx, ecx
xor edi, 0x1f
xor edx, 0x1f
add edi, 0x20
test ecx, ecx
cmovne edi, edx
mov edx, 0x40
sub edx, edi
or eax, ecx
mov ecx, dword [esp + 0x30]
mov eax, 0
cmove edx, eax
mov eax, edx
mov edx, 0xffffffff
push 0xfffffffffffffffd
push eax
call fcn.00782820
add esp, 8
mov ecx, dword [esp + 0x30]
mov edx, dword [esp + 0x40]
call fcn.00782720
mov edx, dword [esp + 0x24]
jmp 0x80afc3
mov edx, dword [esp + 0x24]
mov eax, dword [esp + 0x1c]
mov ecx, dword [esp + 0xc]
push dword [eax]
push 0
push dword [eax + 0x1c]
call fcn.007ec020
mov edx, dword [esp + 0x30]
add esp, 0xc
mov ecx, dword [esp + 8]
mov edi, ebx
test byte [ecx + 0x25], 2
je 0x80b0c9
mov eax, dword [esp + 0x1c]
mov edi, dword [ecx + 0x20]
cmp byte [eax + 0x24], 0
jns 0x80affb
mov eax, dword [edi + 0x38]
mov cl, byte [esp + 0x48]
and eax, 3
cmp eax, 2
sete al
xor cl, 1
test al, cl
jne 0x80b1fd
mov eax, dword [esp]
cmp byte [eax + 0x2e], 0
je 0x80b046
mov eax, dword [esp + 4]
mov ecx, dword [esp + 0x28]
lea eax, [eax + ecx*8 + 0x18]
mov eax, dword [eax]
mov ecx, dword [eax + 8]
mov eax, dword [esp + 0x98]
test ecx, ecx
je 0x80b037
mov eax, dword [esp + 0x98]
cmp ecx, edi
je 0x80b037
mov ecx, dword [ecx + 0x14]
inc eax
test ecx, ecx
je 0x80b037
cmp ecx, edi
jne 0x80b02b
mov ecx, dword [esp]
mov ebx, edx
mov edx, 0x61
mov dword [ecx + 0x18], eax
jmp 0x80b06d
cmp byte [esp + 0x44], 0
mov eax, dword [esp + 0x98]
mov ebx, edx
mov edx, 0x5f
je 0x80b06d
mov edx, dword [esp + 0xc]
mov eax, dword [edx + 0x28]
lea ecx, [eax + 1]
mov dword [edx + 0x28], ecx
mov edx, 0x60
mov ecx, dword [esp + 0x30]
mov dword [ebp + 8], eax
push ebx
push dword [edi + 0x2c]
push eax
call fcn.007c5800
add esp, 0xc
mov ecx, dword [esp + 0xc]
mov edx, edi
call fcn.007ec100
mov eax, dword [esp + 8]
mov edi, dword [esp + 4]
mov edx, ebx
mov eax, dword [eax + 0x24]
test eax, 0x88002
jne 0x80b0c9
and eax, 0xf
je 0x80b0c9
mov eax, dword [esp]
test byte [eax + 0x28], 1
jne 0x80b0c9
mov eax, dword [esp]
cmp byte [eax + 0x2f], 2
je 0x80b0c9
mov ecx, dword [esp + 0x30]
mov ebx, edx
mov edx, 2
call fcn.00782720
mov edx, ebx
test edx, edx
js 0x80b0d6
mov ecx, dword [esp + 0xc]
call fcn.007f31f0
inc esi
add ebp, 0x58
cmp esi, dword [esp + 0x2c]
jne 0x80ae47
mov ecx, dword [esp + 0x30]
call fcn.007f2430
mov ecx, dword [esp]
mov dword [ecx + 0x38], eax
mov ecx, dword [esp + 0x18]
cmp byte [ecx + 0x51], 0
jne 0x80b1cd
cmp dword [esp + 0x2c], 0
jg 0x80b110
mov ebx, dword [esp]
jmp 0x80b1e8
mov ebp, dword [esp + 0x3c]
xor esi, esi
imul edi, esi, 0x58
mov eax, ebp
mov eax, dword [eax + edi + 0x48]
lea ebp, [ebp + edi]
test byte [eax + 0x25], 0x40
je 0x80b161
mov eax, dword [esp + 0x3c]
mov ecx, dword [esp + 4]
mov edx, dword [esp + 0x34]
movzx eax, byte [eax + edi + 0x34]
lea eax, [eax + eax*8]
lea eax, [ecx + eax*8 + 8]
mov ecx, dword [esp + 0xc]
push ebp
push dword [esp + 0x18]
push dword [esp + 0x40]
push eax
call fcn.008124f0
add esp, 0x10
mov eax, dword [esp + 0x18]
cmp byte [eax + 0x51], 0
jne 0x80b1cd
mov ebx, dword [esp + 0xc]
mov edx, dword [esp + 4]
mov ecx, ebx
push dword [esp + 0x10]
push ebp
call fcn.00813000
add esp, 8
mov ecx, dword [esp + 0x30]
call fcn.007f2430
mov dword [esp + 8], ebp
mov ebp, dword [esp + 0x3c]
mov edx, dword [esp + 0x30]
mov ecx, ebx
mov dword [ebp + edi + 0x20], eax
push dword [esp + 0x14]
push dword [esp + 0x3c]
push dword [esp + 0x10]
push esi
mov ebx, dword [esp + 0x10]
push ebx
call fcn.00814560
add esp, 0x14
inc esi
mov ecx, dword [ebp + edi + 0x18]
mov dword [esp + 0x38], eax
mov dword [esp + 0x14], edx
cmp esi, dword [esp + 0x2c]
mov dword [ebx + 0x1c], ecx
jl 0x80b116
jmp 0x80b1e8
test esi, esi
je 0x80b1e6
mov edx, dword [esp]
mov ecx, dword [esp + 0xc]
mov eax, dword [edx + 0x24]
mov dword [ecx + 0x84], eax
mov ecx, dword [esp + 0x18]
call fcn.00816120
xor ebx, ebx
mov ecx, dword [esp + 0x70]
xor ecx, esp
call fcn.00980459
mov eax, ebx
add esp, 0x74
pop esi
pop edi
pop ebx
pop ebp
ret
mov eax, dword [ebp + 4]
mov edi, dword [esp + 4]
mov dword [ebp + 8], eax
jmp 0x80b0c9