Function at 0x18003f53c
Capabilities:
Validate payment card number using luhn algorithm

Disassembly:
mov qword [rsp + 8], rbx
mov qword [rsp + 0x18], r8
push rbp
push rsi
push rdi
push r12
push r13
push r14
push r15
mov rbp, rsp
sub rsp, 0x60
mov r12, rdx
mov rbx, rcx
movups xmm0, xmmword [rdx]
movups xmmword [rbp - 0x38], xmm0
mov qword [rbp - 0x28], rdx
movq r9, xmm0
mov rax, r9
mov r13, qword [rdx + 8]
sub rax, r13
mov qword [rbp - 0x40], rax
xorps xmm1, xmm1
cmp byte [r9], 0x2d
jne 0x18003f591
inc r9
mov qword [rbp - 0x38], r9
mov r10b, 1
jmp 0x18003f594
xor r10b, r10b
mov byte [rbp + 0x58], r10b
xor r11d, r11d
xor r14b, r14b
mov byte [rbp + 0x48], r14b
xor edi, edi
movsx ecx, byte [r9]
lea r15d, [r11 + 0x30]
cmp cl, r15b
jne 0x18003f5c0
xor esi, esi
lea rdx, [r9 + 1]
mov qword [rbp - 0x38], rdx
jmp 0x18003f68b
lea eax, [rcx - 0x31]
cmp al, 8
ja 0x18003fb94
lea rdx, [r9 + 1]
mov qword [rbp - 0x38], rdx
mov esi, ecx
sub esi, r15d
test r10b, r10b
je 0x18003f633
cmp byte [rdx], r15b
jl 0x18003f68b
mov r8, rdx
mov rcx, rdx
mov al, byte [rdx]
cmp al, 0x39
ja 0x18003f68b
mov r9d, 0xccccccc
cmp esi, r9d
jb 0x18003f60a
jne 0x18003f681
mov rcx, r8
cmp al, 0x38
ja 0x18003f681
movsx eax, byte [rcx]
lea rdx, [rcx + 1]
mov qword [rbp - 0x38], rdx
lea esi, [rsi + rsi*4]
lea esi, [rsi - 0x18]
lea esi, [rax + rsi*2]
inc edi
mov al, byte [rdx]
cmp al, r15b
jl 0x18003f68b
mov r8, rdx
mov rcx, rdx
cmp al, 0x39
jle 0x18003f5fc
jmp 0x18003f68b
cmp byte [rdx], r15b
jl 0x18003f68b
mov r8, rdx
mov rcx, rdx
mov al, byte [rdx]
cmp al, 0x39
jg 0x18003f68b
mov r9d, 0x19999999
cmp esi, r9d
jb 0x18003f658
jne 0x18003f681
mov rcx, r8
cmp al, 0x35
jg 0x18003f681
movsx eax, byte [rcx]
lea rdx, [rcx + 1]
mov qword [rbp - 0x38], rdx
lea esi, [rsi + rsi*4]
lea esi, [rsi - 0x18]
lea esi, [rax + rsi*2]
inc edi
mov al, byte [rdx]
cmp al, r15b
jl 0x18003f68b
mov r8, rdx
mov rcx, rdx
cmp al, 0x39
jle 0x18003f64a
jmp 0x18003f68b
mov r14b, 1
mov byte [rbp + 0x48], r14b
mov r11d, esi
xor r15b, r15b
movsd xmm2, qword [0x18016faa0]
test r14b, r14b
je 0x18003f7ca
mov al, byte [rdx]
test r10b, r10b
je 0x18003f71f
cmp al, 0x30
jl 0x18003f7ca
mov r8, rdx
mov r14b, 0x39
cmp al, r14b
jg 0x18003f7ca
mov rcx, rdx
movabs r9, 0xccccccccccccccc
cmp r11, r9
jb 0x18003f6d8
jne 0x18003f70a
mov rcx, r8
cmp al, 0x38
ja 0x18003f70a
movsx eax, byte [rcx]
lea rdx, [rcx + 1]
mov qword [rbp - 0x38], rdx
lea ecx, [rax - 0x30]
lea rax, [r11 + r11*4]
lea r11, [rcx + rax*2]
inc edi
mov al, byte [rdx]
cmp al, 0x30
jl 0x18003f7ca
mov r8, rdx
mov rcx, rdx
cmp al, r14b
jle 0x18003f6ca
jmp 0x18003f7ca
mov rcx, r11
mov r15b, 1
xorps xmm1, xmm1
test rcx, rcx
js 0x18003f780
cvtsi2sd xmm1, rcx
jmp 0x18003f795
cmp al, 0x30
jl 0x18003f7ca
mov r9, rdx
mov r14b, 0x39
cmp al, r14b
jg 0x18003f7ca
mov r8, rdx
movabs r10, 0x1999999999999999
mov rcx, r11
cmp r11, r10
jb 0x18003f754
jne 0x18003f70d
mov r8, r9
cmp al, 0x35
ja 0x18003f70d
movsx ecx, byte [r8]
lea rdx, [r8 + 1]
mov qword [rbp - 0x38], rdx
sub ecx, 0x30
lea rax, [r11 + r11*4]
lea r11, [rcx + rax*2]
inc edi
mov al, byte [rdx]
cmp al, 0x30
jl 0x18003f7ca
mov r9, rdx
mov r8, rdx
cmp al, r14b
jle 0x18003f743
jmp 0x18003f7ca
mov rax, rcx
shr rax, 1
and ecx, 1
or rax, rcx
cvtsi2sd xmm1, rax
addsd xmm1, xmm1
mov al, byte [rdx]
cmp al, 0x30
jl 0x18003f7ca
mov rcx, rdx
cmp al, r14b
ja 0x18003f7ca
movsx eax, byte [rcx]
lea rdx, [rcx + 1]
mov qword [rbp - 0x38], rdx
sub eax, 0x30
movd xmm0, eax
cvtdq2pd xmm0, xmm0
mulsd xmm1, xmm2
addsd xmm1, xmm0
mov al, byte [rdx]
mov rcx, rdx
cmp al, 0x30
jge 0x18003f79e
xor r14d, r14d
mov al, byte [rdx]
cmp al, 0x2e
jne 0x18003f7da
inc rdx
mov qword [rbp - 0x38], rdx
mov rcx, rdx
cmp al, 0x2e
jne 0x18003f8ed
mov r9b, byte [rdx]
lea eax, [r9 - 0x30]
cmp al, 9
ja 0x18003f925
mov r8, rdx
test r15b, r15b
jne 0x18003f880
cmp byte [rbp + 0x48], r14b
jne 0x18003f809
mov r11d, esi
mov r9, rcx
mov al, byte [rdx]
cmp al, 0x39
jg 0x18003f853
mov r8, r9
movabs rax, 0x1fffffffffffff
cmp r11, rax
ja 0x18003f853
movsx eax, byte [rcx]
lea rdx, [rcx + 1]
mov r8, rdx
mov qword [rbp - 0x38], rdx
lea ecx, [rax - 0x30]
lea rax, [r11 + r11*4]
lea r11, [rcx + rax*2]
dec r14d
test r11, r11
je 0x18003f847
inc edi
mov al, byte [rdx]
mov rcx, rdx
mov r9, rdx
cmp al, 0x30
jge 0x18003f80e
xorps xmm1, xmm1
test r11, r11
js 0x18003f862
cvtsi2sd xmm1, r11
jmp 0x18003f87a
mov rcx, r11
shr rcx, 1
mov rax, r11
and eax, 1
or rcx, rax
cvtsi2sd xmm1, rcx
addsd xmm1, xmm1
mov r15b, 1
mov r9b, byte [r8]
mov rcx, r8
cmp r9b, 0x30
jl 0x18003f8ed
mov r10, r8
mov r9, r8
mov al, byte [rdx]
mov rcx, r9
cmp al, 0x39
jg 0x18003f8ed
cmp edi, 0x11
jge 0x18003f8d3
movsx eax, byte [r8]
lea rcx, [r8 + 1]
mov rdx, rcx
mov qword [rbp - 0x38], rcx
sub eax, 0x30
movd xmm0, eax
cvtdq2pd xmm0, xmm0
mulsd xmm1, xmm2
addsd xmm0, xmm1
movaps xmm1, xmm0
dec r14d
comisd xmm0, xmmword [0x18016fa40]
jbe 0x18003f8de
inc edi
jmp 0x18003f8de
lea rcx, [r10 + 1]
mov rdx, rcx
mov qword [rbp - 0x38], rcx
mov r8, rcx
mov al, byte [rdx]
mov r10, rcx
mov r9, rcx
cmp al, 0x30
jge 0x18003f891
xor edi, edi
mov r9d, edi
cmp byte [rcx], 0x65
je 0x18003f900
cmp byte [rcx], 0x45
jne 0x18003fa3f
inc rcx
mov qword [rbp - 0x38], rcx
test r15b, r15b
jne 0x18003f977
mov edx, esi
cmp byte [rbp + 0x48], dil
cmovne rdx, r11
xorps xmm1, xmm1
test rdx, rdx
js 0x18003f95f
cvtsi2sd xmm1, rdx
jmp 0x18003f974
cmp dword [rbx + 0x30], r14d
jne 0x18003fbf8
mov dword [rbx + 0x30], send
sub rcx, r13
mov qword [rbx + 0x38], rcx
movups xmm0, xmmword [rbp - 0x38]
movdqu xmmword [r12], xmm0
mov rbx, qword [rsp + 0xa0]
add rsp, 0x60
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbp
ret
mov rax, rdx
shr rax, 1
and edx, 1
or rax, rdx
cvtsi2sd xmm1, rax
addsd xmm1, xmm1
mov r15b, 1
mov r10b, dil
cmp byte [rcx], 0x2b
je 0x18003f987
cmp byte [rcx], 0x2d
jne 0x18003f98e
mov r10b, 1
inc rcx
mov qword [rbp - 0x38], rcx
movsx edx, byte [rcx]
lea eax, [rdx - 0x30]
cmp al, 9
ja 0x18003fb0c
lea r8, [rcx + 1]
mov qword [rbp - 0x38], r8
mov r9d, edx
mov r13d, gethostbyname
sub r9d, r13d
test r10b, r10b
je 0x18003faa5
test r14d, r14d
jg 0x18003fc19
lea ecx, [r14 + 0x7ffffff7]
mov eax, 0x66666667
imul ecx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add edx, eax
cmp byte [r8], r13b
jl 0x18003fa3c
mov rcx, r8
cmp byte [r8], 0x39
jg 0x18003fa3a
movsx eax, byte [rcx]
lea r8, [rcx + 1]
mov qword [rbp - 0x38], r8
lea ecx, [r9 - 6]
lea ecx, [r9 + rcx*4]
lea r9d, [rax + rcx*2]
mov rcx, r8
cmp r9d, edx
jle 0x18003fa35
mov al, byte [r8]
cmp al, r13b
jl 0x18003fa35
mov r10, r8
mov rdi, r8
mov rcx, r10
cmp al, 0x39
ja 0x18003fa35
lea r8, [rdi + 1]
mov qword [rbp - 0x38], r8
mov al, byte [r8]
mov r10, r8
mov rcx, r8
mov rdi, r8
cmp al, r13b
jge 0x18003fa15
cmp byte [r8], r13b
jge 0x18003f9e2
xor edi, edi
neg r9d
test r15b, r15b
je 0x18003fb3c
lea eax, [r9 + r14]
mov ecx, 0xfffffecc
cmp eax, ecx
jge 0x18003fa5d
divsd xmm1, qword [0x18016fb00]
lea edx, [rax + 0x134]
cmovge edx, eax
movaps xmm0, xmm1
call fcn.1800415f8
comisd xmm0, xmmword [0x18016fb08]
jbe 0x18003fb21
cmp dword [rbx + 0x30], edi
jne 0x18003fc7c
mov dword [rbx + 0x30], send
mov rax, qword [rbp - 0x40]
mov qword [rbx + 0x38], rax
movups xmm0, xmmword [rbp - 0x38]
mov rax, qword [rbp - 0x28]
movdqu xmmword [rax], xmm0
jmp 0x18003f947
mov r10d, 0x134
sub r10d, r14d
mov al, byte [r8]
cmp al, r13b
jl 0x18003fa3f
cmp al, 0x39
ja 0x18003fa3f
lea rdx, [r8 + 1]
mov qword [rbp - 0x38], rdx
lea r9d, [r9 + r9*4]
movzx eax, al
lea r9d, [r9 - 0x18]
lea r9d, [rax + r9*2]
cmp r9d, r10d
jg 0x18003faef
cmp byte [rdx], r13b
jl 0x18003fa3f
mov r8, rdx
cmp byte [rdx], 0x39
jg 0x18003fa3f
mov al, byte [rdx]
jmp 0x18003faba
cmp dword [rbx + 0x30], edi
jne 0x18003fc3a
mov dword [rbx + 0x30], send
mov rax, qword [rbp - 0x40]
mov qword [rbx + 0x38], rax
jmp 0x18003f93d
cmp dword [rbx + 0x30], edi
jne 0x18003fc5b
mov dword [rbx + 0x30], send
jmp 0x18003f936
cmp byte [rbp + 0x58], dil
je 0x18003fb2e
xorps xmm0, xmmword [0x18016fd30]
movaps xmm1, xmm0
mov rcx, qword [rbp + 0x50]
call fcn.1800402b8
jmp 0x18003fb7b
mov rcx, qword [rbp + 0x50]
cmp byte [rbp + 0x48], dil
je 0x18003fb63
cmp byte [rbp + 0x58], dil
je 0x18003fb59
neg r11
mov rdx, r11
call fcn.18004053c
jmp 0x18003fb7b
mov rdx, r11
call fcn.1800403dc
jmp 0x18003fb7b
cmp byte [rbp + 0x58], dil
je 0x18003fb74
neg esi
mov edx, esi
call fcn.1800407e8
jmp 0x18003fb7b
mov edx, esi
call fcn.1800406b4
test al, al
jne 0x18003fa94
cmp dword [rbx + 0x30], edi
jne 0x18003fbb6
mov dword [rbx + 0x30], reloc.WS2_32.dll_recv
jmp 0x18003fa8c
cmp dword [rbx + 0x30], edi
jne 0x18003fbd7
mov rax, r9
sub rax, r13
mov dword [rbx + 0x30], 3
mov qword [rbx + 0x38], rax
mov qword [rdx], r9
mov qword [rdx + 8], r13
jmp 0x18003f947
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.18001b500
lea rdx, [0x180185658]
lea rcx, [rbp - 0x20]
call fcn.1800c2cd0
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.18001b500
lea rdx, [0x180185658]
lea rcx, [rbp - 0x20]
call fcn.1800c2cd0
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.18001b500
lea rdx, [0x180185658]
lea rcx, [rbp - 0x20]
call fcn.1800c2cd0
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.18001b500
lea rdx, [0x180185658]
lea rcx, [rbp - 0x20]
call fcn.1800c2cd0
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.18001b500
lea rdx, [0x180185658]
lea rcx, [rbp - 0x20]
call fcn.1800c2cd0
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.18001b500
lea rdx, [0x180185658]
lea rcx, [rbp - 0x20]
call fcn.1800c2cd0
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.18001b500
lea rdx, [0x180185658]
lea rcx, [rbp - 0x20]
call fcn.1800c2cd0
int3