Function at 0x1400598c0
Capabilities:
Authenticate hmac
Encrypt data using speck
Inspect section memory permissions
Resolve function by parsing pe exports

Disassembly:
push r15
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0x158
mov rax, qword [0x140121320]
xor r10d, r10d
mov word [rax], r10w
mov dword [rsp + 0x1a0], ecx
mov ebx, edx
mov edi, r8d
call fcn.1400455b0
lea rcx, [rsp + 0x1a0]
call fcn.140045860
mov eax, dword [rsp + 0x1a0]
cmp eax, 0x7e
jg 0x14004d758
cmp eax, 9
jle case.0x14004d756.11
sub eax, 0xa
cmp eax, 0x74
ja case.0x14004d756.11
lea rdx, [0x1400eb718]
movsxd rax, dword [rdx + rax*4]
add rax, rdx
jmp rax
cmp eax, 0xf702
je case.0x14004d756.52
jle 0x14004d796
cmp eax, 0xf703
mov ecx, 3
je 0x14004d7a9
mov rsi, qword [0x140121580]
cmp byte [rsi + 0x1c], 0
jne 0x14004d7f1
mov byte [rsi + 0xf], 0
add rsp, 0x158
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
pop r15
ret
cmp eax, 0xf700
je case.0x14004d756.56
cmp eax, 0xf701
jne case.0x14004d756.11
mov ecx, 1
mov rsi, qword [0x140121580]
mov eax, 0x14
or dil, bl
mov word [rsi + 0x17cc], ax
mov eax, dword [0x1400ebcb8]
mov byte [rsi + 0x17ce], 0
mov dword [rsi + 0xbe], eax
jne 0x14004d7fc
call fcn.140005170
xor r8d, r8d
mov edx, 0xffffffff
mov ecx, 0xffffffff
call fcn.140049520
cmp byte [rsi + 0x1c], 0
je 0x14004d77e
call fcn.140041fd0
jmp 0x14004d77e
xor ecx, ecx
jmp 0x14004d7a9
call fcn.1400066d0
jmp 0x14004d7d9
mov ecx, 2
jmp 0x14004d7a9
mov rsi, qword [0x140121580]
xor r8d, r8d
xor edx, edx
mov ecx, 0x7a
mov byte [rsi + 0xd], 1
call fcn.140056f30
call fcn.1400627d0
jmp 0x14004d778
mov rsi, qword [0x140121580]
cmp byte [rsi], 0
jne 0x14004e251
call fcn.14004c540
jmp 0x14004d778
movsx ecx, bl
call fcn.14004c2b0
mov rsi, qword [0x140121580]
jmp 0x14004d778
call fcn.14002af40
mov rsi, qword [0x140121580]
jmp 0x14004d778
xor edx, edx
xor ecx, ecx
call fcn.14002f610
mov rsi, qword [0x140121580]
jmp 0x14004d778
test bl, bl
je 0x14004e240
mov rsi, qword [0x140121580]
mov rbx, qword [0x140121450]
mov byte [rsi + 6], 0
mov byte [rsi + 0xc], 1
jmp 0x14004d8a8
cmp byte [rsi + 6], 0
jne 0x14004d8cb
call fcn.140064890
xor edx, edx
mov ecx, 0x50
call fcn.140043660
test al, al
je 0x14004d8c1
mov byte [rsi + 6], 1
cmp word [rbx + 0x1a4], 4
jle 0x14004d8a2
mov byte [rsi + 0xc], 0
jmp 0x14004d778
xor ecx, ecx
call fcn.1400310c0
jmp case.0x14004d756.11
mov dword [rsp + 0x20], 1
mov r9d, 1
xor r8d, r8d
xor edx, edx
mov ecx, 0x1fff
call fcn.14002e6d0
mov rsi, qword [0x140121580]
jmp 0x14004d778
xor ecx, ecx
call fcn.14002fd00
mov rsi, qword [0x140121580]
jmp 0x14004d778
xor ecx, ecx
call fcn.140031290
mov rsi, qword [0x140121580]
jmp 0x14004d778
xor ecx, ecx
call fcn.14002f970
mov rsi, qword [0x140121580]
jmp 0x14004d778
xor ecx, ecx
call fcn.14002d8d0
mov rsi, qword [0x140121580]
jmp 0x14004d778
mov rsi, qword [0x140121580]
lea rdi, [rsp + 0x88]
lea rbx, [rsp + 0x80]
cmp byte [rsi + 0x1d], 0
sete byte [rsi + 0x1d]
call fcn.140041fd0
xor r8d, r8d
mov edx, 0xffffffff
mov ecx, 0xffffffff
call fcn.140049520
cmp byte [rsi + 0x1d], 0
mov ecx, 0x18
mov eax, 0
mov r8, qword [0x140121630]
mov edx, 0
mov qword [rsp + 0x80], 0
rep stosq qword [rdi], rax
mov rcx, rbx
je 0x14004dfe2
call fcn.140044e70
mov r8d, 0x2e
movabs rdi, 0x2068746c61657453
movsx rax, ax
add rax, rbx
mov qword [rax], rdi
movabs rdi, 0x69642065676e6172
mov qword [rax + 8], rdi
movabs rdi, 0x2e646579616c7073
mov qword [rax + 0x10], rdi
movabs rdi, 0x2720737365725020
mov qword [rax + 0x18], rdi
movabs rdi, 0x6e6961676120275d
mov qword [rax + 0x20], rdi
movabs rdi, 0x65646968206f7420
mov qword [rax + 0x28], rdi
mov word [rax + 0x30], r8w
cmp byte [rsp + 0x80], 0
je 0x14004d778
xor edx, edx
mov rcx, rbx
call fcn.14004a6d0
jmp 0x14004d778
mov rsi, qword [0x140121580]
lea rdi, [rsp + 0x88]
lea rbx, [rsp + 0x80]
cmp byte [rsi + 0x1c], 0
sete byte [rsi + 0x1c]
call fcn.140041fd0
xor r8d, r8d
mov edx, 0xffffffff
mov ecx, 0xffffffff
call fcn.140049520
cmp byte [rsi + 0x1c], 0
mov ecx, 0x18
mov eax, 0
mov r8, qword [0x140121630]
mov edx, 0
mov qword [rsp + 0x80], 0
rep stosq qword [rdi], rax
mov rcx, rbx
je 0x14004df29
call fcn.140044e70
movabs rdi, 0x666520726f6c6f43
movsx rax, ax
add rax, rbx
mov qword [rax], rdi
movabs rdi, 0x6964207374636566
mov qword [rax + 8], rdi
movabs rdi, 0x202e64656c626173
mov qword [rax + 0x10], rdi
movabs rdi, 0x5c27207373657250
mov qword [rax + 0x18], rdi
movabs rdi, 0x206e696167612027
mov qword [rax + 0x20], rdi
movabs rdi, 0x6c62616e65206f74
mov qword [rax + 0x28], rdi
mov dword [rax + 0x2f], 0x2e656c
cmp byte [rsp + 0x80], 0
jne 0x14004da35
jmp 0x14004d778
call fcn.1400674a0
mov rsi, qword [0x140121580]
test al, al
je 0x14004d778
lea rbx, str._Screenshot_saved_in_save_directory
mov rcx, rbx
call fcn.140051bc0
cmp byte [rsi + 0x223], 0
jne 0x14004d778
cwde
mov ecx, 0x64
mov r9d, 0x7d0
sub ecx, eax
mov rax, qword [0x140120db0]
mov r8d, 0x11
mov edx, ecx
shr edx, 0x1f
add edx, ecx
mov rcx, rbx
mov qword [rsp + 0x28], rax
mov rax, qword [0x140121630]
sar edx, 1
mov qword [rsp + 0x20], rax
call fcn.1400430c0
jmp 0x14004d778
mov rsi, qword [0x140121580]
mov rcx, qword [rsi + 0xd0]
test rcx, rcx
je 0x14004d778
call fcn.14001e400
test al, al
je 0x14004d778
mov rcx, qword [rsi + 0xd0]
mov edx, 1
call fcn.14002f610
jmp 0x14004d778
mov rsi, qword [0x140121580]
mov rdx, qword [0x1401215d0]
movzx eax, byte [rsi + 0x201]
or al, byte [rdx]
jne 0x14004d782
lea rcx, str.Save_this_game_and_exit_
xor edx, edx
call fcn.14004d530
test al, al
je 0x14004d778
call fcn.140058990
jmp 0x14004d778
mov rsi, qword [0x140121580]
mov byte [rsi + 0xd], 1
call fcn.140064670
jmp 0x14004d778
mov rsi, qword [0x140121580]
cmp byte [rsi], 0
je 0x14004e05d
xor r8d, r8d
xor edx, edx
mov ecx, 0x3c
call fcn.140056f30
mov ecx, 0xffffffff
call fcn.140004fb0
jmp 0x14004d778
mov ecx, 6
jmp 0x14004d7a9
mov ecx, 4
jmp 0x14004d7a9
mov rsi, qword [0x140121580]
cmp byte [rsi], 0
je 0x14004d778
call fcn.1400186b0
jmp 0x14004d778
lea rcx, str.Turn_on_autopilot_
xor edx, edx
call fcn.14004d530
mov rsi, qword [0x140121580]
test al, al
je 0x14004d778
movsx ecx, bl
call fcn.140007490
jmp 0x14004d778
call fcn.14004ae70
mov rsi, qword [0x140121580]
jmp 0x14004d778
mov rsi, qword [0x140121580]
cmp byte [rsi], 0
je 0x14004dfa2
xor r8d, r8d
xor edx, edx
mov ecx, 0x3e
call fcn.140056f30
mov ecx, 1
call fcn.140004fb0
jmp 0x14004d778
call fcn.14005cf70
mov rsi, qword [0x140121580]
jmp 0x14004d778
mov rax, qword [0x1401210e0]
mov rsi, qword [0x140121580]
cmp byte [rax], 0
je 0x14004d778
mov rbx, qword [0x1401210b0]
mov ecx, 0xaaaaaaab
mov eax, dword [rbx]
lea edx, [rax + 1]
mov rax, rdx
imul rdx, rcx
shr rdx, 0x21
lea edx, [rdx + rdx*2]
sub eax, edx
mov ecx, eax
call fcn.1400674c0
cmp eax, 1
mov dword [rbx], eax
je 0x14004e171
cmp eax, 2
je 0x14004e0b8
test eax, eax
jne 0x14004d778
xor eax, eax
mov ecx, 0x18
mov r8, qword [0x140121630]
xor edx, edx
lea rdi, [rsp + 0x88]
mov qword [rsp + 0x80], 0
rep stosq qword [rdi], rax
lea rbx, [rsp + 0x80]
movabs rdi, 0x6465686374697753
mov rcx, rbx
call fcn.140044e70
movsx rax, ax
add rax, rbx
mov qword [rax], rdi
movabs rdi, 0x74786574206f7420
mov qword [rax + 8], rdi
movabs rdi, 0x50202e65646f6d20
mov qword [rax + 0x10], rdi
movabs rdi, 0x2747272073736572
mov qword [rax + 0x18], rdi
movabs rdi, 0x74206e6961676120
mov qword [rax + 0x20], rdi
movabs rdi, 0x656c62616e65206f
mov qword [rax + 0x28], rdi
movabs rdi, 0x2e73656c697420
mov qword [rax + 0x30], rdi
cmp byte [rsp + 0x80], 0
jne 0x14004da35
jmp 0x14004d778
call fcn.14004bd90
mov rsi, qword [0x140121580]
jmp 0x14004d778
mov ecx, 7
jmp 0x14004d7a9
mov ecx, 5
jmp 0x14004d7a9
mov rsi, qword [0x140121580]
cmp word [rsi + 0xbe], 0x4e
ja 0x14004de50
cmp word [rsi + 0xc0], 0x1c
jbe 0x14004de63
mov rax, qword [0x140121450]
mov eax, dword [rax + 0xf8]
mov dword [rsi + 0xbe], eax
mov r9d, 0x32
mov byte [rsi + 0x17ce], 1
mov word [rsi + 0x17cc], r9w
jmp 0x14004d778
xor ecx, ecx
call fcn.14002ff10
mov rsi, qword [0x140121580]
jmp 0x14004d778
lea rcx, str.Quit_and_abandon_this_game___The_save_will_be_deleted._
xor edx, edx
call fcn.14004d530
mov rsi, qword [0x140121580]
test al, al
je 0x14004d778
xor edx, edx
xor r8d, r8d
mov ecx, 0x51
call fcn.140056f30
mov edx, 1
mov byte [rsi + 0x1e], 1
lea rcx, [0x1400eb6c8]
call fcn.14005bca0
jmp 0x14004d778
mov rsi, qword [0x140121580]
cmp dword [rsi + 0xa4], 0x31
ja 0x14004e09d
mov dword [rsi + 0x17d0], 6
mov byte [rsi + 8], 1
jmp 0x14004d778
call fcn.14004b530
mov rsi, qword [0x140121580]
jmp 0x14004d778
mov ecx, 3
jmp 0x14004d7a9
call fcn.14004b8c0
mov rsi, qword [0x140121580]
jmp 0x14004d778
call fcn.140044e70
movabs rdi, 0x666520726f6c6f43
movsx rax, ax
add rax, rbx
mov qword [rax], rdi
movabs rdi, 0x6e65207374636566
mov qword [rax + 8], rdi
movabs rdi, 0x50202e64656c6261
mov qword [rax + 0x10], rdi
movabs rdi, 0x275c272073736572
mov qword [rax + 0x18], rdi
movabs rdi, 0x74206e6961676120
mov qword [rax + 0x20], rdi
movabs rdi, 0x6c6261736964206f
mov qword [rax + 0x28], rdi
mov dword [rax + 0x2f], 0x2e656c
cmp byte [rsp + 0x80], 0
jne 0x14004da35
jmp 0x14004d778
movsx edx, word [rsi + 0xbc]
lea r8, str.I_see_no_way_down.
movsx ecx, word [rsi + 0xba]
call fcn.140004ef0
test al, al
je 0x14004d778
movsx edx, word [rsi + 0xbc]
mov r8d, 1
movsx ecx, word [rsi + 0xba]
call fcn.140006c30
jmp 0x14004d778
call fcn.140044e70
mov ecx, 0x2e
movabs rdi, 0x2068746c61657453
movsx rax, ax
add rax, rbx
mov qword [rax], rdi
movabs rdi, 0x69682065676e6172
mov qword [rax + 8], rdi
movabs rdi, 0x7250202e6e656464
mov qword [rax + 0x10], rdi
movabs rdi, 0x20275d2720737365
mov qword [rax + 0x18], rdi
movabs rdi, 0x6f74206e69616761
mov qword [rax + 0x20], rdi
movabs rdi, 0x79616c7073696420
mov qword [rax + 0x28], rdi
mov word [rax + 0x30], cx
cmp byte [rsp + 0x80], 0
jne 0x14004da35
jmp 0x14004d778
movsx edx, word [rsi + 0xb8]
lea r8, str.I_see_no_way_up.
movsx ecx, word [rsi + 0xb6]
call fcn.140004ef0
test al, al
je 0x14004d778
movsx edx, word [rsi + 0xb8]
mov r8d, 1
movsx ecx, word [rsi + 0xb6]
call fcn.140006c30
jmp 0x14004d778
lea rcx, str.End_this_game_and_begin_a_new_game_
xor edx, edx
call fcn.14004d530
test al, al
jne 0x14004deea
jmp 0x14004d778
xor eax, eax
mov ecx, 0x18
mov r8, qword [0x140121630]
xor edx, edx
lea rdi, [rsp + 0x88]
mov qword [rsp + 0x80], 0
rep stosq qword [rdi], rax
lea rbx, [rsp + 0x80]
movabs rdi, 0x6465686374697753
mov rcx, rbx
call fcn.140044e70
movsx rax, ax
add rax, rbx
mov qword [rax], rdi
movabs rdi, 0x72627968206f7420
mov qword [rax + 8], rdi
movabs rdi, 0x2e65646f6d206469
mov qword [rax + 0x10], rdi
movabs rdi, 0x2720737365725020
mov qword [rax + 0x18], rdi
movabs rdi, 0x6e69616761202747
mov qword [rax + 0x20], rdi
movabs rdi, 0x61736964206f7420
mov qword [rax + 0x28], rdi
movabs rdi, 0x656c697420656c62
mov qword [rax + 0x30], rdi
mov dword [rax + 0x37], 0x2e7365
cmp byte [rsp + 0x80], 0
jne 0x14004da35
jmp 0x14004d778
xor eax, eax
mov ecx, 0x18
mov r8, qword [0x140121630]
xor edx, edx
lea rdi, [rsp + 0x88]
mov qword [rsp + 0x80], 0
rep stosq qword [rdi], rax
lea rbx, [rsp + 0x80]
movabs rdi, 0x6465686374697753
mov rcx, rbx
call fcn.140044e70
movsx rax, ax
add rax, rbx
mov qword [rax], rdi
movabs rdi, 0x70617267206f7420
mov qword [rax + 8], rdi
movabs rdi, 0x6974206c61636968
mov qword [rax + 0x10], rdi
movabs rdi, 0x657250202e73656c
mov qword [rax + 0x18], rdi
movabs rdi, 0x6120274727207373
mov qword [rax + 0x20], rdi
movabs rdi, 0x206f74206e696167
mov qword [rax + 0x28], rdi
movabs rdi, 0x6820656c62616e65
mov qword [rax + 0x30], rdi
movabs rdi, 0x6f6d206469726279
mov qword [rax + 0x38], rdi
mov dword [rax + 0x40], 0x2e6564
cmp byte [rsp + 0x80], 0
jne 0x14004da35
jmp 0x14004d778
call fcn.140064890
mov rsi, qword [0x140121580]
jmp 0x14004d778
mov rax, qword [0x1401214a0]
mov ebp, 0x15
mov qword [rsp + 0x48], rsi
mov r12, qword [0x140121730]
lea r13, [rax + 0x10]
mov rbx, r13
mov qword [rsp + 0x40], r13
mov r13d, ebp
lea r15d, [r13 - 0x15]
mov ebp, 3
mov qword [rsp + 0x38], rbx
lea rdi, [rsp + 0x80]
movzx r15d, r15w
mov r14d, ebp
jmp 0x14004e2ba
test eax, 0x400000
jne 0x14004e31b
add r14d, 1
add rbx, 0x44
cmp r14w, 0x20
je 0x14004e375
lea eax, [r14 - 3]
shl eax, 0x10
or eax, r15d
mov ebp, eax
mov eax, dword [rbx]
test eax, 0x200000
je 0x14004e2a0
lea rsi, [rsp + 0x70]
mov r9, rdi
mov ecx, ebp
lea rdx, [rsp + 0x6c]
mov r8, rsi
call fcn.140040040
mov r8d, 0x32
mov rdx, r12
mov rcx, rdi
call fcn.14003f950
mov ecx, r14d
movzx edx, r13w
mov r9, rdi
shl ecx, 0x10
mov r8, rsi
or edx, ecx
mov ecx, dword [rsp + 0x6c]
call fcn.140041be0
mov eax, dword [rbx]
test eax, 0x400000
je 0x14004e2a7
lea rsi, [rsp + 0x70]
mov r9, rdi
mov ecx, ebp
lea rdx, [rsp + 0x6c]
mov r8, rsi
add rbx, 0x44
call fcn.140040040
mov rdx, qword [0x140121630]
mov r8d, 0x32
mov rcx, rdi
call fcn.14003f950
mov ecx, r14d
movzx edx, r13w
mov r9, rdi
shl ecx, 0x10
mov r8, rsi
add r14d, 1
or edx, ecx
mov ecx, dword [rsp + 0x6c]
call fcn.140041be0
cmp r14w, 0x20
jne 0x14004e2ba
mov rbx, qword [rsp + 0x38]
add r13d, 1
add rbx, 0x7b4
cmp r13w, 0x64
jne 0x14004e278
mov rsi, qword [rsp + 0x48]
mov edx, 1
lea rcx, str.Loops:
mov r13, qword [rsp + 0x40]
call fcn.14004c620
call fcn.140041fd0
cmp byte [rsi], 0
je 0x14004d83e
mov r14, qword [0x140120e60]
mov edx, 0x15
xor ebp, ebp
mov qword [rsp + 0x58], rsi
mov word [rsp + 0x38], dx
mov r15, rbp
mov rsi, r13
movzx eax, r15w
xor ebx, ebx
mov qword [rsp + 0x48], rsi
mov r13, rsi
lea r12, [r15*8]
mov dword [rsp + 0x40], eax
mov qword [rsp + 0x50], r15
jmp 0x14004e445
call fcn.140040040
mov rdx, qword [0x140121630]
mov r8d, 0x32
mov rcx, rbp
shl esi, 0x10
call fcn.14003f950
movzx edx, word [rsp + 0x38]
mov r9, rbp
mov r8, rdi
mov ecx, dword [rsp + 0x6c]
or edx, esi
call fcn.140041be0
add rbx, 1
add r13, 0x44
cmp rbx, 0x1d
je 0x14004e4c7
mov rdx, qword [r14]
lea r15, [rbx + rbx]
mov rdx, qword [rdx + r12]
cmp word [rdx + rbx*2], 0x9f
jg 0x14004e433
mov ecx, dword [rsp + 0x40]
lea rbp, [rsp + 0x80]
mov edx, ebx
lea rdi, [rsp + 0x70]
shl edx, 0x10
mov r9, rbp
lea esi, [rbx + 3]
mov r8, rdi
or ecx, edx
test dword [r13], 0x800000
lea rdx, [rsp + 0x6c]
jne 0x14004e400
call fcn.140040040
mov rdx, qword [r14]
mov rdx, qword [rdx + r12]
movsx edx, word [rdx + r15]
imul edx, edx, 0x64
movsxd rcx, edx
sar edx, 0x1f
imul rcx, rcx, 0x66666667
sar rcx, 0x26
sub edx, ecx
lea r8d, [rdx + 0x64]
mov rdx, qword [0x140121550]
movsx r8d, r8w
jmp 0x14004e412
mov r15, qword [rsp + 0x50]
mov rsi, qword [rsp + 0x48]
add word [rsp + 0x38], 1
add r15, 1
add rsi, 0x7b4
cmp r15, 0x4f
jne 0x14004e3d7
mov rsi, qword [rsp + 0x58]
mov edx, 1
lea rcx, str.Choke_map:
call fcn.14004c620
call fcn.140041fd0
cmp byte [rsi], 0
je 0x14004d83e
call fcn.14004c7a0
cmp byte [rsi], 0
je 0x14004d83e
mov rbp, qword [0x140121700]
xor r12d, r12d
lea rbx, [r12*8]
xor r13d, r13d
mov edi, r12d
nop word cs:[rax + rax]
movsx rax, word [rsi + 0x1728]
test ax, ax
jle 0x14004e5c1
lea rdx, [rsi + 0x15e8]
lea r8, [rdx + rax*8]
mov eax, 0x7530
lea r9, [r13 + r13]
nop word [rax + rax]
mov rcx, qword [rdx]
mov rcx, qword [rcx + rbx]
movsx ecx, word [rcx + r9]
cmp ax, cx
cmovg eax, ecx
add rdx, 8
cmp rdx, r8
jne 0x14004e568
cmp ax, 9
jg 0x14004e5c1
test ax, ax
mov r9d, 0x64
js 0x14004e5ac
mov edx, eax
shl edx, 4
sub eax, edx
mov edx, 0xffffff9c
cmp eax, edx
cmovl eax, edx
add eax, 0x64
movzx r9d, ax
mov dword [rsp + 0x20], 1
mov r8, rbp
mov edx, r13d
mov ecx, edi
call fcn.140041f00
add r13, 1
cmp r13, 0x1d
jne 0x14004e540
add r12, 1
cmp r12, 0x4f
jne 0x14004e528
lea rcx, str.Waypoints:
mov edx, 1
call fcn.14004c620
call fcn.140041fd0
jmp 0x14004d83e
mov rax, qword [0x140121580]
mov byte [rax + 0x226], 0
mov eax, dword [rcx]
test eax, eax
je 0x1400598e8
cmp eax, 1
je 0x1400598e0
cmp eax, 4
je 0x1400598e0
ret
jmp fcn.140050730
mov eax, dword [rcx + 4]
movsx edx, byte [rcx + 0xc]
movsx r8d, byte [rcx + 0xd]
mov ecx, eax
jmp 0x14004d6f0