Function at 0x14003bd80
Capabilities:
Get keyboard layout

Disassembly:
mov qword [rsp + 8], rcx
push rbp
push rbx
push rsi
push rdi
push r12
push r13
push r14
push r15
mov eax, 0x8568
call fcn.1400bc4c0
sub rsp, rax
lea rbp, [rsp + 0x40]
mov rax, rcx
mov rcx, qword [0x1401030e0]
mov qword [rbp + 0x18], rcx
test rcx, rcx
jne 0x14003bdda
cmp dword [0x1401032f0], 1
mov rcx, rax
sete dl
xor r12d, r12d
xor dl, 1
mov dword [0x1401032f0], r12d
call fcn.140035530
jmp 0x14003c900
mov rdi, qword [0x140103198]
lea r15, [0x140000000]
mov r13, qword [0x1401031a0]
xor r12d, r12d
mov r14, qword [0x1401031a8]
mov eax, r12d
mov dword [rbp + 0x8588], eax
mov byte [rbp + 0x8578], al
mov dword [0x1401032f0], r12d
mov dword [0x140103334], 1
mov word [0x140103338], r12w
mov dword [0x14010334c], 0x3fff
movzx eax, word [rdi]
mov qword [rbp + 8], r13
mov qword [rbp + 0x10], r14
test ax, ax
je 0x14003bf18
lea rsi, [rdi + 2]
movzx ebx, ax
test ebx, 0xffffff80
jne 0x14003be61
mov edx, 2
mov ecx, ebx
call fcn.1400a9dc4
test eax, eax
je 0x14003be61
and ebx, 0xffffffdf
movzx eax, bx
add eax, 0xffffffd6
cmp eax, 0x2c
ja case.0x14003be86.51
cdqe
movzx eax, byte [r15 + rax + 0x3c93c]
mov ecx, dword [r15 + rax*4 + 0x3c914]
add rcx, r15
jmp rcx
mov byte [0x140103334], r12b
jmp case.0x14003be86.51
mov byte [0x140103335], 1
jmp case.0x14003be86.51
mov byte [0x140103336], 1
jmp case.0x14003be86.51
mov byte [0x140103337], 1
jmp case.0x14003be86.51
mov rcx, rsi
call fcn.1400aadfc
mov dword [0x14010334c], eax
cmp eax, 0x3fff
jle case.0x14003be86.51
mov dword [0x14010334c], 0x3fff
jmp case.0x14003be86.51
mov rcx, rsi
call fcn.140015590
mulsd xmm0, qword [0x1400e92a8]
cvttsd2si eax, xmm0
mov dword [rbp + 0x8588], eax
jmp case.0x14003be86.51
mov byte [0x140103338], 1
jmp case.0x14003be86.51
mov byte [0x140103339], 1
jmp case.0x14003be86.51
mov al, 1
mov byte [rbp + 0x8578], al
movzx eax, word [rdi + 2]
add rdi, 2
add rsi, 2
test ax, ax
jne 0x14003be43
xor edx, edx
lea rcx, [rbp + 0x120]
mov r8d, 0x100
call fcn.1400a61b0
xor edx, edx
lea rcx, [rbp + 0x320]
mov r8d, 0x200
call fcn.1400a61b0
mov rbx, r12
mov word [rbp + 0x8582], r12w
mov r15, r13
mov qword [rbp], rbx
mov edx, 0x7d
cmp word [r13], r12w
je 0x14003c099
movzx r13d, byte [rbp + 0x8578]
lea rsi, [0x1400fb210]
mov word [rbp + 0x8580], r12w
movzx eax, word [r15]
cmp eax, 0x7b
je 0x14003c127
cmp eax, 0x7d
je 0x14003c07c
test r13b, r13b
je 0x14003bfa0
inc rbx
mov qword [rbp], rbx
jmp 0x14003c07c
xor ecx, ecx
mov word [rbp + 0x8580], ax
mov byte [rbp + 0x8578], r12b
call qword [sym.imp.USER32.dll_GetKeyboardLayout]
movzx ecx, word [rbp + 0x8580]
test cx, cx
je 0x14003c077
cmp word [rbp + 0x8582], r12w
jne 0x14003bfec
mov r8, rax
lea rdx, [rbp + 0x8578]
call fcn.140014660
movzx ebx, al
mov edx, 0x7d
jmp 0x14003c276
movzx ebx, cx
test ebx, 0xffffff80
jne 0x14003c00a
mov edx, 2
mov ecx, ebx
call fcn.1400a9dc4
test eax, eax
je 0x14003c00a
and ebx, 0xffffffdf
cmp bx, 0x56
jne 0x14003c040
movzx ecx, word [rbp + 0x8582]
call fcn.14000ad40
cmp ax, 0x4b
jne 0x14003c040
xor edx, edx
lea rcx, [rbp + 0x8584]
lea r8d, [rdx + 0x10]
call fcn.1400ab260
mov ebx, eax
mov edx, 0x7d
jmp 0x14003c276
lea r14, str.Numpad0
mov rdi, r12
mov rbx, r14
nop dword [rax]
mov rcx, qword [rbx]
lea rdx, [rbp + 0x8580]
call fcn.1400a7220
test eax, eax
je 0x14003c114
inc rdi
add rbx, 0x10
cmp rbx, rsi
jl 0x14003c050
mov rbx, qword [rbp]
mov edx, 0x7d
add r15, 2
lea rsi, [0x1400fb210]
cmp word [r15], r12w
jne 0x14003bf71
mov r13, qword [rbp + 8]
mov r14, qword [rbp + 0x10]
lea r15, [0x1400e70b8]
mov qword [0x140103308], r15
test rbx, rbx
je 0x14003c321
lea rax, [rbx*2 + 2]
lea rcx, [rax + 0xf]
cmp rcx, rax
ja 0x14003c0cb
movabs rcx, 0xffffffffffffff0
and rcx, 0xfffffffffffffff0
mov rax, rcx
call fcn.1400bc4c0
sub rsp, rcx
lea rbx, [rsp + 0x40]
mov qword [0x140103308], rbx
cmp word [r13], r12w
je 0x14003c31d
movzx eax, word [r13]
cmp eax, 0x7b
je 0x14003c2cd
cmp eax, 0x7d
je 0x14003c309
mov word [rbx], ax
add rbx, 2
jmp 0x14003c309
add rdi, rdi
mov edx, 0x7d
movzx ebx, byte [r14 + rdi*8 + 8]
jmp 0x14003c276
lea rsi, [r15 + 2]
mov rcx, rsi
call fcn.1400a5798
mov r14, rax
test rax, rax
je 0x14003c077
mov rcx, rax
sub rcx, r15
sar rcx, 1
sub rcx, 1
jne 0x14003c15f
add r14, 2
cmp word [r14], 0x7d
jne 0x14003c077
jmp 0x14003c165
cmp rcx, 1
jne 0x14003c180
test r13b, r13b
je 0x14003c176
inc rbx
mov qword [rbp], rbx
jmp 0x14003c077
movzx eax, word [rsi]
mov word [rbp + 0x8580], ax
xor ecx, ecx
mov word [r14], r12w
mov byte [rbp + 0x8578], r12b
call qword [sym.imp.USER32.dll_GetKeyboardLayout]
movzx ecx, word [rsi]
test cx, cx
jne 0x14003c1a2
xor bl, bl
jmp 0x14003c252
cmp word [rsi + 2], r12w
jne 0x14003c1c0
mov r8, rax
lea rdx, [rbp + 0x8578]
call fcn.140014660
movzx ebx, al
jmp 0x14003c24e
movzx ebx, cx
test ebx, 0xffffff80
jne 0x14003c1de
mov edx, 2
mov ecx, ebx
call fcn.1400a9dc4
test eax, eax
je 0x14003c1de
and ebx, 0xffffffdf
cmp bx, 0x56
jne 0x14003c207
movzx ecx, word [rsi + 2]
call fcn.14000ad40
cmp ax, 0x4b
jne 0x14003c207
xor edx, edx
lea rcx, [rsi + 4]
lea r8d, [rdx + 0x10]
call fcn.1400ab260
movzx ebx, al
jmp 0x14003c24e
mov rdi, r12
lea rbx, str.Numpad0
lea r15, [0x1400fb210]
nop dword [rax + rax]
mov rcx, qword [rbx]
mov rdx, rsi
call fcn.1400a7220
test eax, eax
je 0x14003c23f
inc rdi
add rbx, 0x10
cmp rbx, r15
jl 0x14003c220
xor bl, bl
jmp 0x14003c252
add rdi, rdi
lea rax, str.Numpad0
movzx ebx, byte [rax + rdi*8 + 8]
test bl, bl
jne 0x14003c26a
mov rcx, rsi
call fcn.140014440
test ax, ax
je 0x14003c26a
movzx eax, ax
mov byte [rbp + rax + 0x320], 1
mov edx, 0x7d
mov r15, r14
mov word [r14], dx
test bl, bl
je 0x14003c2b3
movzx ecx, word [rbp + 0x8580]
movzx ebx, bl
or byte [rbp + rbx + 0x120], 1
test cx, cx
je 0x14003c2b3
call qword [sym.imp.USER32.dll_IsCharAlphaW]
test eax, eax
jne 0x14003c073
test byte [rbp + 0x8578], 0x30
lea edx, [rax + 0x7d]
je 0x14003c2bc
or byte [rbp + rbx + 0x120], 2
mov rbx, qword [rbp]
jmp 0x14003c07c
or byte [rbp + rbx + 0x120], 4
mov rbx, qword [rbp]
jmp 0x14003c07c
lea rdi, [r13 + 2]
mov rcx, rdi
call fcn.1400a5798
mov rdx, rax
test rax, rax
je 0x14003c309
cmp rax, rdi
jne 0x14003c2f3
cmp word [rax + 2], 0x7d
lea rcx, [rax + 2]
cmove rdx, rcx
lea rax, [r13 + 4]
cmp rdx, rax
jne 0x14003c306
movzx eax, word [rdi]
mov word [rbx], ax
add rbx, 2
mov r13, rdx
add r13, 2
mov edx, 0x7d
cmp word [r13], r12w
jne 0x14003c0f1
mov word [rbx], r12w
mov dword [0x140103320], r12d
cmp word [r14], r12w
je 0x14003c505
cmp qword [0x140103318], r12
jne 0x14003c379
mov ecx, 0x2000
call fcn.1400a7398
mov qword [0x140103318], rax
test rax, rax
jne 0x14003c36f
mov rcx, qword [rbp + 0x8570]
lea rdx, str.Out_of_memory.
mov r9, r15
xor r8d, r8d
call fcn.1400356f0
jmp 0x14003c900
mov dword [0x140103324], 0x400
mov rdi, qword [rbp + 0x8570]
mov edx, 3
mov rcx, rdi
call fcn.1400253a0
mov ecx, dword [0x140103330]
inc rax
cmp rax, rcx
jbe 0x14003c3fb
mov rcx, qword [0x140103328]
mov edx, 0x1000
cmp rax, rdx
cmova edx, eax
mov dword [0x140103330], edx
test rcx, rcx
je 0x14003c3c3
call fcn.1400ab2c0
mov edx, dword [0x140103330]
lea ecx, [rdx + rdx]
call fcn.1400a7398
mov qword [0x140103328], rax
mov rdx, rax
test rax, rax
jne 0x14003c402
mov dword [0x140103330], r12d
mov r9, r15
lea rdx, str.Out_of_memory.
xor r8d, r8d
mov rcx, rdi
call fcn.1400356f0
jmp 0x14003c900
mov rdx, qword [0x140103328]
mov ecx, dword [0x140103320]
mov rax, qword [0x140103318]
mov qword [rax + rcx*8], rdx
mov rbx, qword [0x140103328]
cmp word [r14], r12w
je 0x14003c4e2
mov esi, 0x2c
nop dword [rax]
movzx eax, word [r14]
cmp ax, si
je 0x14003c445
mov word [rbx], ax
add rbx, 2
jmp 0x14003c4d4
cmp word [r14 + 2], si
jne 0x14003c459
mov word [rbx], si
add rbx, 2
add r14, 2
jmp 0x14003c4d4
mov word [rbx], r12w
mov ecx, dword [0x140103320]
mov r8, qword [0x140103318]
mov rax, qword [r8 + rcx*8]
cmp word [rax], r12w
je 0x14003c497
inc ecx
mov dword [0x140103320], ecx
add rbx, 2
mov eax, ecx
mov qword [r8 + rcx*8], rbx
mov word [rbx], r12w
mov ecx, dword [0x140103320]
mov r8, qword [0x140103318]
cmp word [r14 + 2], r12w
je 0x14003c4d4
mov eax, dword [0x140103324]
cmp ecx, eax
jb 0x14003c4d4
lea edx, [rax + 0x400]
mov rcx, r8
shl rdx, 3
call fcn.1400ab108
test rax, rax
je 0x14003c3e1
add dword [0x140103324], 0x400
mov qword [0x140103318], rax
add r14, 2
cmp word [r14], r12w
jne 0x14003c430
mov word [rbx], r12w
mov edx, dword [0x140103320]
mov rax, qword [0x140103318]
mov rcx, qword [rax + rdx*8]
cmp word [rcx], r12w
je 0x14003c505
inc edx
mov dword [0x140103320], edx
cmp byte [0x1400feb00], r12b
je 0x14003c552
mov rcx, qword [0x1400feeb0]
mov edx, reloc.OLEAUT32.dll_VariantTimeToDosDateTime
call qword [sym.imp.USER32.dll_KillTimer]
movzx ecx, byte [0x1400feb00]
test eax, eax
cmovne ecx, r12d
mov byte [0x1400feb00], cl
mov ecx, reloc.OLEAUT32.dll_SafeArrayGetDim
call qword [sym.imp.USER32.dll_GetQueueStatus]
shr eax, 0x10
test al, 0x10
je 0x14003c552
mov edx, 1
or ecx, 0xffffffff
call fcn.1400016e0
xor edx, edx
lea rcx, [rbp + 0x520]
mov r8d, 0x8000
call fcn.1400a61b0
or byte [0x1400ffc76], 1
lea rax, [rbp + 0x520]
cmp qword [0x1400feed8], r12
mov qword [0x140103340], rax
lea rax, [rbp + 0x120]
mov qword [0x1401032f8], rax
lea rax, [rbp + 0x320]
mov qword [0x140103300], rax
mov dword [0x140103348], r12d
mov dword [0x1401032f0], 1
mov byte [0x1400feec4], 1
jne 0x14003c5c4
movzx edx, word [0x140101d40]
call fcn.140009610
mov eax, dword [rbp + 0x8588]
test eax, eax
jle 0x14003c610
cmp byte [0x1400feb00], r12b
jne 0x14003c610
mov ecx, 0xa
lea r9, [0x140004260]
cmp eax, ecx
cmovl eax, ecx
lea edx, [rcx + 2]
mov r8d, eax
mov rcx, qword [0x1400feeb0]
call qword [sym.imp.USER32.dll_SetTimer]
test rax, rax
setne byte [0x1400feb00]
nop word [rax + rax]
mov edx, 1
mov ecx, 0x8000012f
call fcn.1400016e0
mov ecx, dword [0x1401032f0]
cmp ecx, 1
je 0x14003c610
sub ecx, 2
je 0x14003c86f
sub ecx, 1
je 0x14003c866
sub ecx, 1
je 0x14003c671
xor r9d, r9d
mov byte [rsp + 0x20], 1
or r8, 0xffffffffffffffff
cmp ecx, 1
mov rcx, qword [0x1400fee90]
je 0x14003c665
lea rdx, str.NewInput
jmp 0x14003c889
lea rdx, [0x1400e5f10]
jmp 0x14003c889
movups xmm0, xmmword [str.EndKey:]
xor edx, edx
lea rcx, [rbp + 0x30]
mov r8d, 0xf0
movaps xmmword [rbp + 0x20], xmm0
call fcn.1400a61b0
movzx eax, word [0x140103314]
test ax, ax
je 0x14003c6ab
mov word [rbp + 0x2e], ax
lea rdx, [rbp + 0x20]
mov word [rbp + 0x30], r12w
jmp 0x14003c876
cmp byte [0x140103317], r12b
je 0x14003c753
xor edx, edx
lea rcx, [rbp + 0x220]
mov r8d, 0x100
call fcn.1400a61b0
or byte [rbp + 0x230], 0x80
call qword [sym.imp.USER32.dll_GetForegroundWindow]
test rax, rax
je 0x14003c6eb
xor edx, edx
mov rcx, rax
call qword [sym.imp.USER32.dll_GetWindowThreadProcessId]
jmp 0x14003c6ee
mov eax, r12d
mov ecx, eax
call qword [sym.imp.USER32.dll_GetKeyboardLayout]
cmp dword [0x1400feb04], r12d
mov edi, r12d
movzx ecx, byte [0x140103310]
mov rbx, rax
setne dil
xor edx, edx
call fcn.140014a40
movzx ecx, byte [0x140103310]
lea r9, [rbp + 0x2e]
mov qword [rsp + 0x30], rbx
lea r8, [rbp + 0x220]
movzx edx, ax
mov dword [rsp + 0x28], edi
mov dword [rsp + 0x20], 2
call qword [sym.imp.USER32.dll_ToUnicodeEx]
movsxd rcx, eax
lea rdx, [rbp + 0x20]
mov word [rbp + rcx*2 + 0x2e], r12w
jmp 0x14003c876
cmp byte [0x140103316], r12b
mov ecx, r12d
je 0x14003c7b9
movzx edx, word [0x140103312]
lea rax, [0x1400faa78]
lea r8, [0x1400fab48]
cmp word [rax], dx
je 0x14003c7a2
inc ecx
add rax, 0x10
cmp rax, r8
jl 0x14003c774
movzx r9d, dx
lea r8, str.sc_03X
mov edx, 0x79
lea rcx, [rbp + 0x2e]
call fcn.140087360
jmp 0x14003c849
movsxd rdx, ecx
lea rax, [0x140000000]
add rdx, rdx
mov rdx, qword [rax + rdx*8 + 0xfaa70]
jmp 0x14003c832
movzx ebx, byte [0x140103310]
lea rax, [0x1400fab48]
lea rdx, [0x1400fb218]
nop
cmp byte [rax], bl
je 0x14003c821
inc ecx
add rax, 0x10
cmp rax, rdx
jl 0x14003c7d0
movzx ecx, bl
call fcn.1400142b0
mov word [rbp + 0x2e], ax
test ax, ax
je 0x14003c7f7
mov word [rbp + 0x30], r12w
jmp 0x14003c849
test bl, bl
je 0x14003c816
movzx r9d, bl
lea r8, str.vk_02X
mov edx, 0x79
lea rcx, [rbp + 0x2e]
call fcn.140087360
jmp 0x14003c849
mov word [rbp + 0x2e], r12w
lea rdx, [rbp + 0x20]
jmp 0x14003c876
movsxd rdx, ecx
lea rax, str.Numpad0
add rdx, rdx
mov rdx, qword [rax + rdx*8]
mov r8d, 0x78
lea rcx, [rbp + 0x2e]
call fcn.1400b02e4
mov word [rbp + 0x11e], r12w
movzx eax, word [rbp + 0x2e]
sub ax, 0x61
cmp ax, 0x19
ja 0x14003c860
mov eax, 0xffe0
add word [rbp + 0x2e], ax
lea rdx, [rbp + 0x20]
jmp 0x14003c876
lea rdx, str.Match
jmp 0x14003c876
lea rdx, str.Timeout
mov rcx, qword [0x1400fee90]
xor r9d, r9d
or r8, 0xffffffffffffffff
mov byte [rsp + 0x20], 1
call fcn.14008a870
cmp byte [0x1400feb00], r12b
mov dword [0x1401032f0], r12d
je 0x14003c8e4
mov rcx, qword [0x1400feeb0]
mov edx, reloc.OLEAUT32.dll_VariantTimeToDosDateTime
call qword [sym.imp.USER32.dll_KillTimer]
movzx r8d, byte [0x1400feb00]
mov ecx, reloc.OLEAUT32.dll_SafeArrayGetDim
test eax, eax
cmovne r8d, r12d
mov byte [0x1400feb00], r8b
call qword [sym.imp.USER32.dll_GetQueueStatus]
shr eax, 0x10
test al, 0x10
je 0x14003c8e4
mov edx, 1
or ecx, 0xffffffff
call fcn.1400016e0
mov rcx, qword [rbp + 0x18]
lea rdx, [rbp + 0x520]
xor r9d, r9d
mov byte [rsp + 0x20], 1
or r8, 0xffffffffffffffff
call fcn.14008a870
lea rsp, [rbp + 0x8528]
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbx
pop rbp
ret