Function at 0x4154b0
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x30
imul esi, ecx, 0x9e3779b9
mov dword [esp + 4], ecx
jmp 0x4154d5
call fcn.00416c00
mov edx, 1
nop word [eax + eax]
mov ebp, dword [0x4529b8]
test ebp, ebp
je 0x415530
mov eax, dword [ebp + 4]
xor ecx, ecx
mov ebx, esi
sub cl, byte [ebp + 8]
shr ebx, cl
cmp ebx, eax
jae 0x415801
mov edi, dword [ebp]
shl ebx, 6
xor eax, eax
lock cmpxchg dword [edi + ebx + 0x20], edx
lea ecx, [edi + ebx + 0x20]
jne 0x41553e
mov eax, dword [0x4529b8]
cmp ebp, eax
je 0x41555a
mov eax, 0xffffffff
lock xadd dword [ecx], eax
cmp eax, 4
jb 0x4154e0
and eax, 2
jne 0x4154e0
jmp 0x4154d0
call fcn.00416810
mov edx, 1
mov ebp, eax
jmp 0x4154ea
mov dword [esp], ecx
mov ecx, dword [esp]
call fcn.00416a80
mov ecx, dword [esp]
mov edx, 1
mov eax, dword [0x4529b8]
cmp ebp, eax
jne 0x41551b
mov eax, dword [edi + ebx + 0x24]
mov dword [esp], ecx
lea esi, [edi + ebx + 0x24]
xor ecx, ecx
mov dword [esp + 0xc], edi
nop dword [eax + eax]
test eax, eax
je 0x4155ba
mov ebp, eax
mov eax, dword [eax + 8]
mov edx, esi
mov edi, ecx
lea esi, [ebp + 0xc]
mov ecx, ebp
cmp eax, dword [esp + 4]
mov eax, dword [ebp + 0xc]
jne 0x415570
mov ecx, dword [esp + 0xc]
mov dword [edx], eax
mov dword [esp + 0x10], ebp
cmp dword [ecx + ebx + 0x28], ebp
je 0x4155eb
nop dword [eax + eax]
test eax, eax
je 0x4155f1
mov ecx, dword [eax + 8]
cmp ecx, dword [esp + 4]
je 0x4157f6
mov eax, dword [eax + 0xc]
test eax, eax
jne 0x4155a4
jmp 0x4155f1
mov eax, dword [esp + 4]
mov byte [eax], 0
mov eax, 0xffffffff
mov ecx, dword [esp]
lock xadd dword [ecx], eax
cmp eax, 4
jb 0x4157ee
and eax, 2
jne 0x4157ee
add esp, 0x30
pop esi
pop edi
pop ebx
pop ebp
jmp fcn.00416c00
lea eax, [ecx + ebx + 0x28]
mov dword [eax], edi
mov dword [esp + 8], 0
call fcn.0042d780
mov dword [esp + 0x24], ecx
mov ebp, eax
mov esi, edx
xor ecx, ecx
mov eax, dword [esp + 0xc]
mov edi, dword [eax + ebx]
mov eax, dword [esp + 0xc]
mov eax, dword [eax + ebx + 4]
mov dword [esp + 0x14], eax
xor esi, eax
mov eax, ebp
xor ebp, edi
or ebp, esi
mov esi, edx
mov ebp, eax
setne cl
cmp eax, edi
mov edi, dword [esp + 0xc]
mov dword [esp + 0x20], edx
mov edx, 0xff
sbb esi, dword [esp + 0x14]
cmovae edx, ecx
test dl, dl
jne 0x415655
mov eax, dword [esp + 0x24]
cmp eax, dword [edi + ebx + 8]
setne dl
jb 0x415731
cmp dl, 1
jne 0x415731
lea eax, [edi + ebx]
lea ecx, [edi + ebx + 8]
mov dword [esp + 0x1c], ebp
mov edx, dword [edi + ebx + 0x1c]
mov ebp, dword [edi + ebx + 0x10]
mov dword [esp + 0x18], eax
mov dword [esp + 0x28], ecx
mov ecx, dword [edi + ebx + 0x18]
mov ebx, dword [edi + ebx + 0x14]
mov dword [esp + 0x14], edx
mov dword [esp + 0x2c], ecx
nop dword [eax]
mov eax, ebp
mov ecx, 0x4c957f2d
mov esi, ebx
mov edi, ebp
imul ebx, ebx, 0x4c957f2d
mul ecx
imul ecx, ebp, 0x5851f42d
add ecx, edx
mov ebp, eax
mov eax, esi
add ebx, ecx
add ebp, dword [esp + 0x2c]
mov ecx, esi
adc ebx, dword [esp + 0x14]
shr eax, 0x12
shr ecx, 0x1b
xor eax, esi
shl esi, 0xe
xor esi, edi
shrd esi, eax, 0x1b
ror esi, cl
mov ecx, 0xf4240
mov eax, esi
mul ecx
cmp eax, 0xf423ffff
ja 0x415690
mov eax, edx
mov ecx, edx
mov edx, 0x44b83
mov edi, dword [esp + 0x28]
shr eax, 9
mul edx
shr edx, 7
imul eax, edx, 0x3b9aca00
mov dword [edi + 8], ebp
mov dword [edi + 0xc], ebx
sub ecx, eax
add ecx, dword [esp + 0x24]
cmp ecx, 0x3b9aca00
jb 0x415794
mov eax, dword [esp + 0x1c]
mov edx, dword [esp + 0x20]
mov ebx, dword [esp + 0x10]
add eax, 1
adc edx, 0
jb 0x415813
add ecx, 0xc4653600
jmp 0x4157a0
cmp byte [esp + 8], 0
mov ecx, dword [esp]
mov ebx, dword [esp + 0x10]
je 0x415748
mov eax, dword [esp + 4]
mov byte [eax], 2
jmp 0x41574f
mov eax, dword [esp + 4]
mov byte [eax], 0
xor eax, eax
mov dword [ebx + 0x10], eax
mov edi, dword [ebx + 4]
cmp dword [edi], 1
jne 0x4157cc
mov esi, 1
mov dword [ebx], 0
mov eax, 0xffffffff
lock xadd dword [ecx], eax
cmp eax, 4
jb 0x4157e6
and eax, 2
jne 0x4157e6
call fcn.00416c00
test esi, esi
jne 0x4157ea
test ebx, ebx
je 0x4157ee
push 0
push 0
push ebx
push dword [edi + 4]
call dword [edi + 8]
jmp 0x4157ee
mov ebx, dword [esp + 0x10]
mov eax, dword [esp + 0x1c]
mov edx, dword [esp + 0x20]
mov esi, dword [esp + 0x18]
cmp byte [esp + 8], 0
mov dword [esi], eax
mov eax, 1
mov dword [esi + 4], edx
mov dword [edi], ecx
jne 0x4157be
mov ecx, dword [esp + 4]
mov byte [ecx], 1
mov ecx, dword [esp]
mov dword [ebx + 0x10], eax
mov edi, dword [ebx + 4]
cmp dword [edi], 1
je 0x41575c
xor eax, eax
xor esi, esi
xchg dword [ebx], eax
cmp eax, 1
cmovne ebx, esi
mov eax, 0xffffffff
lock xadd dword [ecx], eax
cmp eax, 4
jae 0x415775
test esi, esi
je 0x415783
push ebx
call dword [edi + 8]
add esp, 0x30
pop esi
pop edi
pop ebx
pop ebp
ret
mov al, 1
mov dword [esp + 8], eax
jmp 0x4155f9
mov ecx, 0x447604
mov edx, ebx
push eax
call fcn.0040ff60
add esp, 4
ud2
mov ecx, 0x4490a8
mov edx, 0x28
call fcn.004119b0
ud2