Function at 0x18003c668
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 0x18003c6bd
inc r9
mov qword [rbp - 0x38], r9
mov r11b, 1
jmp 0x18003c6c0
xor r11b, r11b
mov byte [rbp + 0x58], r11b
xor r10d, r10d
xor r14b, r14b
mov byte [rbp + 0x48], r14b
xor edi, edi
movsx ecx, byte [r9]
cmp cl, 0x30
jne 0x18003c6e8
xor esi, esi
lea rdx, [r9 + 1]
mov qword [rbp - 0x38], rdx
jmp 0x18003c7a7
lea eax, [rcx - 0x31]
cmp al, 8
ja 0x18003cc88
lea rdx, [r9 + 1]
mov qword [rbp - 0x38], rdx
lea esi, [rcx - 0x30]
test r11b, r11b
je 0x18003c754
cmp byte [rdx], 0x30
jl 0x18003c7a7
mov rcx, rdx
mov r8, rdx
mov al, byte [rdx]
mov r9d, 0xccccccc
cmp al, 0x39
ja 0x18003c7a7
cmp esi, r9d
jb 0x18003c730
jne 0x18003c79d
mov rcx, r8
cmp al, 0x38
ja 0x18003c79d
movsx eax, byte [rcx]
lea rdx, [rcx + 1]
mov qword [rbp - 0x38], rdx
lea ecx, [rsi - 6]
lea ecx, [rsi + rcx*4]
lea esi, [rax + rcx*2]
inc edi
mov al, byte [rdx]
mov rcx, rdx
mov r8, rdx
cmp al, 0x30
jge 0x18003c71a
jmp 0x18003c7a7
cmp byte [rdx], 0x30
jl 0x18003c7a7
mov rcx, rdx
mov r8, rdx
mov al, byte [rdx]
mov r9d, 0x19999999
cmp al, 0x39
jg 0x18003c7a7
cmp esi, r9d
jb 0x18003c779
jne 0x18003c79d
mov rcx, r8
cmp al, 0x35
jg 0x18003c79d
movsx eax, byte [rcx]
lea rdx, [rcx + 1]
mov qword [rbp - 0x38], rdx
lea ecx, [rsi - 6]
lea ecx, [rsi + rcx*4]
lea esi, [rax + rcx*2]
inc edi
mov al, byte [rdx]
mov rcx, rdx
mov r8, rdx
cmp al, 0x30
jge 0x18003c767
jmp 0x18003c7a7
mov r14b, 1
mov byte [rbp + 0x48], r14b
mov r10d, esi
xor r15b, r15b
movsd xmm2, qword [0x18016bf78]
test r14b, r14b
je 0x18003c8cb
mov al, byte [rdx]
test r11b, r11b
je 0x18003c82e
cmp al, 0x30
jl 0x18003c8cb
mov rcx, rdx
mov r8, rdx
movabs r9, 0xccccccccccccccc
cmp al, 0x39
ja 0x18003c8cb
cmp r10, r9
jb 0x18003c7f0
jne 0x18003c819
mov rcx, r8
cmp al, 0x38
ja 0x18003c819
movsx eax, byte [rcx]
lea rdx, [rcx + 1]
mov qword [rbp - 0x38], rdx
lea ecx, [rax - 0x30]
lea rax, [r10 + r10*4]
lea r10, [rcx + rax*2]
inc edi
mov rcx, rdx
mov r8, rdx
mov al, byte [rdx]
cmp al, 0x30
jge 0x18003c7da
jmp 0x18003c8cb
mov rcx, r10
mov r15b, 1
xorps xmm1, xmm1
test rcx, rcx
js 0x18003c882
cvtsi2sd xmm1, rcx
jmp 0x18003c897
cmp al, 0x30
jl 0x18003c8cb
mov r8, rdx
mov r9, rdx
movabs r11, 0x1999999999999999
mov rcx, r10
cmp al, 0x39
ja 0x18003c8cb
cmp r10, r11
jb 0x18003c85b
jne 0x18003c81c
mov r8, r9
cmp al, 0x35
ja 0x18003c81c
movsx ecx, byte [r8]
lea rdx, [r8 + 1]
mov qword [rbp - 0x38], rdx
sub ecx, 0x30
lea rax, [r10 + r10*4]
lea r10, [rcx + rax*2]
inc edi
mov r8, rdx
mov r9, rdx
mov al, byte [rdx]
cmp al, 0x30
jge 0x18003c846
jmp 0x18003c8cb
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 0x18003c8cb
mov rcx, rdx
cmp al, 0x39
ja 0x18003c8cb
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 rcx, rdx
mov al, byte [rdx]
cmp al, 0x30
jge 0x18003c8a0
xor r14d, r14d
mov al, byte [rdx]
cmp al, 0x2e
jne 0x18003c8db
inc rdx
mov qword [rbp - 0x38], rdx
mov rcx, rdx
cmp al, 0x2e
jne 0x18003c9ee
mov r9b, byte [rdx]
lea eax, [r9 - 0x30]
cmp al, 9
ja 0x18003ca26
mov r8, rdx
test r15b, r15b
jne 0x18003c981
cmp byte [rbp + 0x48], r14b
jne 0x18003c90a
mov r10d, esi
mov r9, rcx
mov al, byte [rdx]
cmp al, 0x39
jg 0x18003c954
mov r8, r9
movabs rax, 0x1fffffffffffff
cmp r10, rax
ja 0x18003c954
movsx eax, byte [rcx]
lea rdx, [rcx + 1]
mov r8, rdx
mov qword [rbp - 0x38], rdx
lea ecx, [rax - 0x30]
lea rax, [r10 + r10*4]
lea r10, [rcx + rax*2]
dec r14d
test r10, r10
je 0x18003c948
inc edi
mov al, byte [rdx]
mov rcx, rdx
mov r9, rdx
cmp al, 0x30
jge 0x18003c90f
xorps xmm1, xmm1
test r10, r10
js 0x18003c963
cvtsi2sd xmm1, r10
jmp 0x18003c97b
mov rcx, r10
shr rcx, 1
mov rax, r10
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 0x18003c9ee
mov r11, r8
mov r9, r8
mov al, byte [rdx]
mov rcx, r9
cmp al, 0x39
jg 0x18003c9ee
cmp edi, 0x11
jge 0x18003c9d4
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 [0x18016bf20]
jbe 0x18003c9df
inc edi
jmp 0x18003c9df
lea rcx, [r11 + 1]
mov rdx, rcx
mov qword [rbp - 0x38], rcx
mov r8, rcx
mov al, byte [rdx]
mov r11, rcx
mov r9, rcx
cmp al, 0x30
jge 0x18003c992
xor edi, edi
mov r9d, edi
cmp byte [rcx], 0x65
je 0x18003ca01
cmp byte [rcx], 0x45
jne 0x18003cb40
inc rcx
mov qword [rbp - 0x38], rcx
test r15b, r15b
jne 0x18003ca78
mov edx, esi
cmp byte [rbp + 0x48], dil
cmovne rdx, r10
xorps xmm1, xmm1
test rdx, rdx
js 0x18003ca60
cvtsi2sd xmm1, rdx
jmp 0x18003ca75
cmp dword [rbx + 0x30], r14d
jne 0x18003ccec
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 r11b, dil
cmp byte [rcx], 0x2b
je 0x18003ca88
cmp byte [rcx], 0x2d
jne 0x18003ca8f
mov r11b, 1
inc rcx
mov qword [rbp - 0x38], rcx
movsx edx, byte [rcx]
lea eax, [rdx - 0x30]
cmp al, 9
ja 0x18003cc00
lea r8, [rcx + 1]
mov qword [rbp - 0x38], r8
mov r9d, edx
mov r13d, gethostbyname
sub r9d, r13d
test r11b, r11b
je 0x18003cba6
test r14d, r14d
jg 0x18003cd0d
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 0x18003cb3d
mov rcx, r8
cmp byte [r8], 0x39
jg 0x18003cb3b
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 0x18003cb36
mov al, byte [r8]
cmp al, r13b
jl 0x18003cb36
mov r11, r8
mov rdi, r8
mov rcx, r11
cmp al, 0x39
ja 0x18003cb36
lea r8, [rdi + 1]
mov qword [rbp - 0x38], r8
mov al, byte [r8]
mov r11, r8
mov rcx, r8
mov rdi, r8
cmp al, r13b
jge 0x18003cb16
cmp byte [r8], r13b
jge 0x18003cae3
xor edi, edi
neg r9d
test r15b, r15b
je 0x18003cc30
lea eax, [r9 + r14]
mov ecx, 0xfffffecc
cmp eax, ecx
jge 0x18003cb5e
divsd xmm1, qword [0x18016bfd0]
lea edx, [rax + 0x134]
cmovge edx, eax
movaps xmm0, xmm1
call fcn.18003e6f4
comisd xmm0, xmmword [0x18016bfd8]
jbe 0x18003cc15
cmp dword [rbx + 0x30], edi
jne 0x18003cd70
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 0x18003ca48
mov edx, 0x134
sub edx, r14d
cmp byte [r8], r13b
jl 0x18003cb40
mov al, byte [r8]
cmp al, 0x39
jg 0x18003cb40
movsx eax, byte [r8]
inc r8
mov qword [rbp - 0x38], r8
lea r9d, [r9 + r9*4]
lea r9d, [r9 - 0x18]
lea r9d, [rax + r9*2]
cmp r9d, edx
jg 0x18003cbe3
mov al, byte [r8]
cmp al, r13b
jge 0x18003cbb6
jmp 0x18003cb40
cmp dword [rbx + 0x30], edi
jne 0x18003cd2e
mov dword [rbx + 0x30], send
mov rax, qword [rbp - 0x40]
mov qword [rbx + 0x38], rax
jmp 0x18003ca3e
cmp dword [rbx + 0x30], edi
jne 0x18003cd4f
mov dword [rbx + 0x30], send
jmp 0x18003ca37
cmp byte [rbp + 0x58], dil
je 0x18003cc22
xorps xmm0, xmmword [0x18016c1d0]
movaps xmm1, xmm0
mov rcx, qword [rbp + 0x50]
call fcn.18003d3b4
jmp 0x18003cc6f
mov rcx, qword [rbp + 0x50]
cmp byte [rbp + 0x48], dil
je 0x18003cc57
cmp byte [rbp + 0x58], dil
je 0x18003cc4d
neg r10
mov rdx, r10
call fcn.18003d638
jmp 0x18003cc6f
mov rdx, r10
call fcn.18003d4d8
jmp 0x18003cc6f
cmp byte [rbp + 0x58], dil
je 0x18003cc68
neg esi
mov edx, esi
call fcn.18003d8e4
jmp 0x18003cc6f
mov edx, esi
call fcn.18003d7b0
test al, al
jne 0x18003cb95
cmp dword [rbx + 0x30], edi
jne 0x18003ccaa
mov dword [rbx + 0x30], reloc.WS2_32.dll_recv
jmp 0x18003cb8d
cmp dword [rbx + 0x30], edi
jne 0x18003cccb
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 0x18003ca48
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.18001ac3c
lea rdx, [0x180180478]
lea rcx, [rbp - 0x20]
call fcn.1800bf520
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.18001ac3c
lea rdx, [0x180180478]
lea rcx, [rbp - 0x20]
call fcn.1800bf520
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.18001ac3c
lea rdx, [0x180180478]
lea rcx, [rbp - 0x20]
call fcn.1800bf520
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.18001ac3c
lea rdx, [0x180180478]
lea rcx, [rbp - 0x20]
call fcn.1800bf520
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.18001ac3c
lea rdx, [0x180180478]
lea rcx, [rbp - 0x20]
call fcn.1800bf520
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.18001ac3c
lea rdx, [0x180180478]
lea rcx, [rbp - 0x20]
call fcn.1800bf520
int3
lea rdx, str.rapidjson_assert_fail
lea rcx, [rbp - 0x20]
call fcn.18001ac3c
lea rdx, [0x180180478]
lea rcx, [rbp - 0x20]
call fcn.1800bf520
int3