Function at 0x4029f0
Capabilities:
Encode data using xor
Generate random numbers using a mersenne twister

Disassembly:
push ebp
mov eax, 0x13fc
mov ebp, esp
push edi
push esi
push ebx
call fcn.0040cc00
sub esp, eax
lea eax, [ebp - 0x13e0]
mov edi, dword [ebp + 8]
mov dword [ebp - 0x13e4], 0
mov dword [ebp - 0x13e8], eax
mov eax, dword [ebp + 8]
mov byte [edi + 8], 0
mov ebx, dword [0x50c05c]
add eax, 8
mov byte [ebp - 0x13e0], 0
mov dword [ebp - 0x13f4], eax
mov dword [edi], eax
lea eax, [ebp - 0x13e0]
mov dword [edi + 4], 0
mov dword [ebp - 0x13f0], eax
test ebx, ebx
je 0x402d6d
mov esi, dword [ebp - 0x13e4]
mov edi, 0x50c058
mov dword [ebp - 0x13ec], esi
lea esi, [esi]
lea esi, [esi]
mov esi, dword [ebx + 0x14]
mov eax, dword [ebp - 0x13ec]
cmp esi, eax
cmovbe eax, esi
test eax, eax
je 0x402a9f
mov dword [esp + 8], eax
mov eax, dword [ebp - 0x13f0]
mov dword [esp + 4], eax
mov eax, dword [ebx + 0x10]
mov dword [esp], eax
call sym._memcmp
test eax, eax
jne 0x402aa7
mov eax, esi
sub eax, dword [ebp - 0x13ec]
mov ecx, dword [ebx + 8]
mov esi, dword [ebx + 0xc]
test eax, eax
js 0x402ac0
test ecx, ecx
je 0x402ace
mov edi, ebx
mov ebx, ecx
jmp 0x402a70
test esi, esi
je 0x402e6c
mov ecx, esi
mov ebx, ecx
jmp 0x402a70
mov esi, dword [ebp - 0x13ec]
cmp ebx, 0x50c058
je 0x402d6d
mov edi, dword [ebx + 0x14]
cmp esi, edi
mov eax, edi
cmovbe eax, esi
test eax, eax
je 0x402b0b
mov dword [esp + 8], eax
mov eax, dword [ebx + 0x10]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x13f0]
mov dword [esp], eax
call sym._memcmp
test eax, eax
jne 0x402b0f
mov eax, esi
sub eax, edi
test eax, eax
js 0x402d6d
mov eax, dword [ebx + 0x2c]
cmp dword [ebx + 0x28], eax
je 0x402d6d
lea eax, [ebp - 0x9dc]
mov ecx, 0x6c75
lea esi, [ebp - 0x9d4]
mov dword [ebp - 0x9d4], 0x61666564
mov dword [esp], eax
mov word [ebp - 0x9d0], cx
lea ecx, [ebp - 0x13a0]
mov dword [ebp - 0x9dc], esi
mov byte [ebp - 0x9ce], 0x74
mov dword [ebp - 0x9d8], 7
mov byte [ebp - 0x9cd], 0
call method.std::random_device._M_init_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char____const_
mov eax, dword [ebp - 0x9dc]
sub esp, 4
cmp eax, esi
je 0x402b93
mov edi, dword [ebp - 0x9d4]
mov dword [esp], eax
lea edx, [edi + 1]
mov dword [esp + 4], edx
call sym.operator_delete_void__unsigned_int_
lea ecx, [ebp - 0x13a0]
call method.std::random_device._M_getval__
mov dword [ebp - 0x9dc], eax
mov ecx, 1
mov edx, eax
lea esi, [esi]
nop
mov eax, edx
shr eax, 0x1e
xor eax, edx
imul eax, eax, 0x6c078965
lea edx, [eax + ecx]
mov dword [ebp + ecx*4 - 0x9dc], edx
add ecx, 1
cmp ecx, 0x270
jne 0x402bb0
mov edi, dword [ebx + 0x2c]
sub edi, dword [ebx + 0x28]
mov dword [ebp - 0x1c], 0x270
sar edi, 3
imul edi, edi, 0xaaaaaaab
test edi, edi
je 0x402eda
mov eax, 0xffffffff
xor edx, edx
div edi
imul edi, eax
mov esi, eax
cmp ecx, 0x26f
ja 0x402c53
lea esi, [esi]
lea esi, [esi]
mov eax, dword [ebp + ecx*4 - 0x9dc]
lea edx, [ecx + 1]
mov dword [ebp - 0x1c], edx
mov ecx, eax
shr ecx, 0xb
xor eax, ecx
mov ecx, eax
shl ecx, 7
and ecx, 0x9d2c5680
xor eax, ecx
mov ecx, eax
shl ecx, 0xf
and ecx, 0xefc60000
xor eax, ecx
mov ecx, eax
shr ecx, 0x12
xor eax, ecx
cmp edi, eax
ja 0x402c99
mov ecx, edx
cmp ecx, 0x26f
jbe 0x402c10
lea ecx, [ebp - 0x9dc]
call sym.__ZNSt23mersenne_twister_engineIjLj32ELj624ELj397ELj31ELj2567483615ELj11ELj4294967295ELj7ELj2636928640ELj15ELj4022730752ELj18E
mov eax, dword [ebp - 0x1c]
lea edx, [eax + 1]
mov eax, dword [ebp + eax*4 - 0x9dc]
mov dword [ebp - 0x1c], edx
mov ecx, eax
shr ecx, 0xb
xor eax, ecx
mov ecx, eax
shl ecx, 7
and ecx, 0x9d2c5680
xor ecx, eax
mov eax, ecx
shl eax, 0xf
and eax, 0xefc60000
xor ecx, eax
mov eax, ecx
shr eax, 0x12
xor eax, ecx
cmp edi, eax
jbe 0x402c49
xor edx, edx
div esi
lea edx, [eax + eax*2]
mov eax, dword [ebx + 0x28]
lea esi, [ebp - 0x13c8]
mov dword [ebp - 0x13d0], esi
lea eax, [eax + edx*8]
mov edi, dword [eax]
mov ebx, dword [eax + 4]
mov eax, edi
add eax, ebx
je 0x402cc5
test edi, edi
je 0x402f22
mov dword [ebp - 0x13b8], ebx
cmp ebx, 0xf
ja 0x402e88
cmp ebx, 1
jne 0x402e79
movzx eax, byte [edi]
mov byte [ebp - 0x13c8], al
mov eax, esi
mov dword [ebp - 0x13cc], ebx
mov byte [eax + ebx], 0
mov eax, dword [ebp + 8]
mov edx, dword [eax + 4]
test edx, edx
jne 0x402da1
mov ecx, eax
mov eax, dword [ebp - 0x13cc]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x13d0]
mov dword [esp], eax
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___._M_append_char_const__unsigned_int_
sub esp, 8
lea eax, [ebp - 0x13d0]
lea ecx, [ebp - 0x13e8]
mov dword [esp], eax
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___._M_assign_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char____const_
mov eax, dword [ebp - 0x13d0]
sub esp, 4
cmp eax, esi
je 0x402d53
mov edi, dword [ebp - 0x13c8]
mov dword [esp], eax
lea edx, [edi + 1]
mov dword [esp + 4], edx
call sym.operator_delete_void__unsigned_int_
mov eax, dword [ebp - 0x13e8]
mov ebx, dword [0x50c05c]
mov dword [ebp - 0x13f0], eax
test ebx, ebx
jne 0x402a55
lea edi, [ebp - 0x13e0]
cmp dword [ebp - 0x13f0], edi
je 0x402d96
mov eax, dword [ebp - 0x13e0]
add eax, 1
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x13f0]
mov dword [esp], eax
call sym.operator_delete_void__unsigned_int_
mov eax, dword [ebp + 8]
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret
mov eax, dword [ebp - 0x13cc]
lea edi, [ebp - 0x13b0]
lea ecx, [ebp - 0x13b8]
mov dword [ebp - 0x13b4], 0
mov dword [ebp - 0x13b8], edi
add eax, 1
mov byte [ebp - 0x13b0], 0
mov dword [esp], eax
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___.reserve_unsigned_int_
sub esp, 4
cmp dword [ebp - 0x13b4], 0x3fffffff
je 0x402f2e
mov dword [esp + 4], 1
lea ecx, [ebp - 0x13b8]
mov dword [esp], 0x4c10aa
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___._M_append_char_const__unsigned_int_
mov eax, dword [ebp - 0x13cc]
sub esp, 8
lea ecx, [ebp - 0x13b8]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x13d0]
mov dword [esp], eax
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___._M_append_char_const__unsigned_int_
mov eax, dword [ebp - 0x13b4]
sub esp, 8
mov ecx, dword [ebp + 8]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x13b8]
mov dword [esp], eax
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___._M_append_char_const__unsigned_int_
mov eax, dword [ebp - 0x13b8]
sub esp, 8
cmp eax, edi
je 0x402d1d
mov edi, dword [ebp - 0x13b0]
mov dword [esp], eax
lea edx, [edi + 1]
mov dword [esp + 4], edx
call sym.operator_delete_void__unsigned_int_
jmp 0x402d1d
mov esi, dword [ebp - 0x13ec]
mov ebx, edi
jmp 0x402ad4
mov eax, esi
test ebx, ebx
je 0x402ce8
jmp 0x402eb9
lea eax, [ebp - 0x13b8]
mov dword [esp + 4], 0
lea ecx, [ebp - 0x13d0]
mov dword [esp], eax
call method.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___._M_create_unsigned_int__unsigned_int_
mov edx, dword [ebp - 0x13b8]
mov dword [ebp - 0x13d0], eax
sub esp, 8
mov dword [ebp - 0x13c8], edx
mov dword [esp + 8], ebx
mov dword [esp + 4], edi
mov dword [esp], eax
call sym._memcpy
mov ebx, dword [ebp - 0x13b8]
mov eax, dword [ebp - 0x13d0]
jmp 0x402ce8
lea ecx, [ebp - 0x9dc]
call sym.__ZNSt23mersenne_twister_engineIjLj32ELj624ELj397ELj31ELj2567483615ELj11ELj4294967295ELj7ELj2636928640ELj15ELj4022730752ELj18E
mov eax, dword [ebp - 0x1c]
lea edx, [eax + 1]
mov eax, dword [ebp + eax*4 - 0x9dc]
mov dword [ebp - 0x1c], edx
mov edx, eax
shr edx, 0xb
xor eax, edx
mov edx, eax
shl edx, 7
and edx, 0x9d2c5680
xor eax, edx
mov edx, eax
shl edx, 0xf
and edx, 0xefc60000
xor eax, edx
mov ecx, eax
shr ecx, 0x12
xor eax, ecx
jmp 0x402c9d
mov dword [esp], 0x4c1060
call method.std.__throw_logic_error_char_const_
mov dword [esp], 0x4c1095
call method.std.__throw_length_error_char_const_
mov ebx, eax
jmp sym.generate_abi:cxx11_____clone_.cold_