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

Disassembly:
mov rax, rsp
mov qword [rax + 0x18], r8
mov qword [rax + 8], rcx
push rbx
push rbp
push rsi
push rdi
push r12
push r13
push r14
push r15
sub rsp, 0x58
movaps xmmword [rax - 0x58], xmm6
mov r15, rcx
movaps xmmword [rax - 0x68], xmm7
mov rbx, rdx
mov rax, qword [rdx + 0x28]
xorps xmm7, xmm7
mov rcx, rax
xorps xmm6, xmm6
sub rcx, qword [rdx + 0x10]
add rcx, qword [rdx + 0x38]
cmp byte [rax], 0x2d
mov qword [rsp + 0x28], rcx
jne 0x14006d365
mov rcx, rdx
call fcn.14006ebdc
mov r13b, 1
jmp 0x14006d368
xor r13b, r13b
mov rcx, qword [rbx + 0x28]
xor bpl, bpl
xor r14d, r14d
mov byte [rsp + 0xb8], r13b
xor r12d, r12d
mov byte [rsp + 0xa8], bpl
movsx edi, byte [rcx]
cmp dil, 0x30
jne 0x14006d3a4
mov rcx, rbx
xor esi, esi
call fcn.14006ebdc
mov rdx, qword [rbx + 0x28]
xor r13b, r13b
jmp 0x14006d5c0
lea eax, [rdi - 0x31]
cmp al, 8
ja 0x14006da66
mov rcx, rbx
call fcn.14006ebdc
mov rax, qword [rbx + 0x28]
sub edi, 0x30
mov rdx, rax
mov sil, byte [rax]
test r13b, r13b
je 0x14006d417
cmp sil, 0x30
jl 0x14006d463
mov r13d, 0xccccccc
cmp sil, 0x39
ja 0x14006d463
cmp edi, r13d
jb 0x14006d3f0
jne 0x14006d45d
cmp sil, 0x38
ja 0x14006d45d
mov rcx, rbx
call fcn.14006ebdc
mov rdx, qword [rbx + 0x28]
lea edi, [rdi + rdi*4]
movzx eax, sil
lea edi, [rdi - 0x18]
inc r12d
mov sil, byte [rdx]
lea edi, [rax + rdi*2]
cmp sil, 0x30
jge 0x14006d3d9
jmp 0x14006d463
cmp sil, 0x30
jl 0x14006d463
mov r13d, 0x19999999
cmp sil, 0x39
ja 0x14006d463
cmp edi, r13d
jb 0x14006d436
jne 0x14006d45d
cmp sil, 0x35
ja 0x14006d45d
mov rcx, rbx
call fcn.14006ebdc
mov rdx, qword [rbx + 0x28]
lea edi, [rdi + rdi*4]
movzx eax, sil
lea edi, [rdi - 0x18]
inc r12d
mov sil, byte [rdx]
lea edi, [rax + rdi*2]
cmp sil, 0x30
jge 0x14006d423
jmp 0x14006d463
mov bpl, 1
mov r14d, edi
xor r13b, r13b
mov cl, bpl
mov byte [rsp + 0xa8], cl
mov esi, edi
test bpl, bpl
je 0x14006d5c0
mov rax, qword [rbx + 0x28]
mov rdx, rax
mov byte [rsp + 0xa8], cl
mov bpl, byte [rax]
cmp byte [rsp + 0xb8], r13b
je 0x14006d50c
cmp bpl, 0x30
jl 0x14006d5c0
mov byte [rsp + 0xa8], cl
movabs rdi, 0xccccccccccccccc
xor r13b, r13b
cmp bpl, 0x39
ja 0x14006d5c0
cmp r14, rdi
jb 0x14006d4cb
jne 0x14006d4f7
cmp bpl, 0x38
ja 0x14006d4f7
mov rcx, rbx
call fcn.14006ebdc
mov rdx, qword [rbx + 0x28]
lea rax, [r14 + r14*4]
movzx ecx, bpl
inc r12d
sub ecx, 0x30
mov bpl, byte [rdx]
lea r14, [rcx + rax*2]
cmp bpl, 0x30
jge 0x14006d4b1
jmp 0x14006d5c0
mov rcx, r14
mov r13b, 1
xorps xmm6, xmm6
test rcx, rcx
js 0x14006d56d
cvtsi2sd xmm6, rcx
jmp 0x14006d582
cmp bpl, 0x30
jl 0x14006d5c0
mov byte [rsp + 0xa8], cl
movabs rdi, 0x1999999999999999
xor r13b, r13b
mov rcx, r14
cmp bpl, 0x39
ja 0x14006d5c0
cmp r14, rdi
jb 0x14006d544
jne 0x14006d4fa
cmp bpl, 0x35
ja 0x14006d4fa
mov rcx, rbx
call fcn.14006ebdc
mov rdx, qword [rbx + 0x28]
lea rax, [r14 + r14*4]
movzx ecx, bpl
inc r12d
sub ecx, 0x30
mov bpl, byte [rdx]
lea r14, [rcx + rax*2]
cmp bpl, 0x30
jge 0x14006d527
jmp 0x14006d5c0
mov rax, rcx
and ecx, 1
shr rax, 1
or rax, rcx
cvtsi2sd xmm6, rax
addsd xmm6, xmm6
cmp byte [rdx], 0x30
jl 0x14006d5c0
mov dil, byte [rdx]
cmp dil, 0x39
ja 0x14006d5c0
mov rcx, rbx
call fcn.14006ebdc
mov rdx, qword [rbx + 0x28]
mulsd xmm6, qword [0x140124000]
movzx eax, dil
sub eax, 0x30
mov dil, byte [rdx]
movd xmm0, eax
cvtdq2pd xmm0, xmm0
addsd xmm6, xmm0
cmp dil, 0x30
jge 0x14006d58a
xor ebp, ebp
cmp byte [rdx], 0x2e
mov dword [rsp + 0x20], ebp
jne 0x14006d68b
mov rcx, rbx
call fcn.14006ebdc
mov rcx, qword [rbx + 0x28]
mov dil, byte [rcx]
lea eax, [rdi - 0x30]
cmp al, 9
ja 0x14006d727
test r13b, r13b
jne 0x14006d6d1
cmp byte [rsp + 0xa8], bpl
jne 0x14006d5ff
mov r14d, esi
mov rax, rcx
mov r8, rcx
mov rdx, rax
cmp dil, 0x39
ja 0x14006d654
movabs rax, 0x1fffffffffffff
cmp r14, rax
ja 0x14006d654
mov rcx, rbx
call fcn.14006ebdc
movzx ecx, dil
lea rax, [r14 + r14*4]
sub ecx, 0x30
dec ebp
lea r14, [rcx + rax*2]
test r14, r14
je 0x14006d63e
inc r12d
mov rcx, qword [rbx + 0x28]
mov rax, rcx
mov r8, rcx
mov rdx, rcx
mov dil, byte [rcx]
cmp dil, 0x30
jge 0x14006d602
mov dword [rsp + 0x20], ebp
xorps xmm6, xmm6
test r14, r14
js 0x14006d667
cvtsi2sd xmm6, r14
jmp 0x14006d67f
mov rax, r14
mov rcx, r14
shr rcx, 1
and eax, 1
or rcx, rax
cvtsi2sd xmm6, rcx
addsd xmm6, xmm6
mov dil, byte [r8]
mov r13b, 1
cmp dil, 0x30
jge 0x14006d6d4
mov al, byte [rsp + 0xa8]
xor edi, edi
cmp byte [rdx], 0x65
mov bpl, al
je 0x14006d6a5
cmp byte [rdx], 0x45
jne 0x14006d8ac
mov rcx, rbx
call fcn.14006ebdc
test r13b, r13b
jne 0x14006d754
cmp bpl, r13b
mov ecx, esi
xorps xmm6, xmm6
cmovne rcx, r14
test rcx, rcx
js 0x14006d73c
cvtsi2sd xmm6, rcx
jmp 0x14006d751
mov rdx, rcx
cmp dil, 0x39
ja 0x14006d68b
mov rcx, rbx
call fcn.14006ebdc
cmp r12d, 0x11
jge 0x14006d715
mulsd xmm6, qword [0x140124000]
dec ebp
movzx eax, dil
sub eax, 0x30
mov dword [rsp + 0x20], ebp
movd xmm0, eax
cvtdq2pd xmm0, xmm0
addsd xmm0, xmm6
comisd xmm0, xmm7
movaps xmm6, xmm0
jbe 0x14006d715
inc r12d
mov rdx, qword [rbx + 0x28]
mov dil, byte [rdx]
cmp dil, 0x30
jge 0x14006d6d4
jmp 0x14006d68b
mov rax, qword [rbx + 0x38]
sub rax, qword [rbx + 0x10]
mov dword [r15 + 0x30], select
jmp 0x14006da76
mov rax, rcx
and ecx, 1
shr rax, 1
or rax, rcx
cvtsi2sd xmm6, rax
addsd xmm6, xmm6
mov r13b, 1
mov rcx, qword [rbx + 0x28]
xor r15b, r15b
cmp byte [rcx], 0x2b
jne 0x14006d76e
mov rcx, rbx
call fcn.14006ebdc
mov rcx, qword [rbx + 0x28]
jmp 0x14006d794
cmp byte [rcx], 0x2d
mov byte [rsp + 0xa8], bpl
jne 0x14006d78c
mov rcx, rbx
call fcn.14006ebdc
mov rcx, qword [rbx + 0x28]
mov r15b, 1
jmp 0x14006d794
mov byte [rsp + 0xa8], bpl
movsx edi, byte [rcx]
lea eax, [rdi - 0x30]
cmp al, 9
ja 0x14006d889
mov rcx, rbx
call fcn.14006ebdc
mov rax, qword [rbx + 0x28]
sub edi, 0x30
mov r12d, dword [rsp + 0x20]
mov bpl, byte [rax]
test r15b, r15b
je 0x14006d839
lea ecx, [r12 + 0x7ffffff7]
mov eax, 0x66666667
imul ecx
mov r15d, edx
sar r15d, 2
mov eax, r15d
shr eax, 0x1f
add r15d, eax
jmp 0x14006d820
cmp bpl, 0x39
ja 0x14006d826
mov rcx, rbx
call fcn.14006ebdc
lea edi, [rdi + rdi*4]
movzx eax, bpl
lea edi, [rdi - 0x18]
lea edi, [rax + rdi*2]
cmp edi, r15d
jle 0x14006d819
jmp 0x14006d80e
cmp cl, 0x39
ja 0x14006d819
mov rcx, rbx
call fcn.14006ebdc
mov rax, qword [rbx + 0x28]
mov cl, byte [rax]
cmp cl, 0x30
jge 0x14006d801
mov rax, qword [rbx + 0x28]
mov bpl, byte [rax]
cmp bpl, 0x30
jge 0x14006d7df
neg edi
mov r15, qword [rsp + 0xa0]
mov al, byte [rsp + 0xa8]
jmp 0x14006d8b1
mov r15d, 0x134
sub r15d, r12d
jmp 0x14006d86b
cmp bpl, 0x39
ja 0x14006d828
mov rcx, rbx
call fcn.14006ebdc
lea edi, [rdi + rdi*4]
movzx eax, bpl
lea edi, [rdi - 0x18]
lea edi, [rax + rdi*2]
cmp edi, r15d
jg 0x14006d873
mov rax, qword [rbx + 0x28]
mov bpl, byte [rax]
cmp bpl, 0x30
jge 0x14006d844
jmp 0x14006d828
mov rcx, qword [rsp + 0xa0]
mov rax, qword [rsp + 0x28]
mov dword [rcx + 0x30], reloc.WS2_32.dll_listen
jmp 0x14006d8a3
mov rax, qword [rbx + 0x38]
sub rax, qword [rbx + 0x10]
add rax, rcx
mov rcx, qword [rsp + 0xa0]
mov dword [rcx + 0x30], reloc.WS2_32.dll_ntohs
mov qword [rcx + 0x38], rax
jmp 0x14006da7d
mov r12d, dword [rsp + 0x20]
xor ebp, ebp
test r13b, r13b
je 0x14006d985
lea ecx, [rdi + r12]
mov edx, 0xfffffecc
cmp ecx, edx
jge 0x14006d913
divsd xmm6, qword [0x140124008]
lea eax, [rcx + 0x134]
cmp eax, edx
jl 0x14006d8f7
movsxd rax, ecx
lea rax, [rax*8 + 0x9a0]
lea rcx, [0x140123130]
movaps xmm7, xmm6
sub rcx, rax
divsd xmm7, qword [rcx]
comisd xmm7, xmmword [0x140124010]
jbe 0x14006d92f
mov dword [r15 + 0x30], reloc.WS2_32.dll_listen
mov rax, qword [rsp + 0x28]
jmp 0x14006da79
movsxd rax, ecx
shl rax, 3
test ecx, ecx
js 0x14006d8e6
lea rcx, [0x140123130]
movaps xmm7, xmm6
mulsd xmm7, qword [rax + rcx]
jmp 0x14006d8f7
cmp byte [rsp + 0xb8], bpl
je 0x14006d940
xorps xmm7, xmmword [0x140122260]
mov rbx, qword [rsp + 0xb0]
mov rax, qword [rbx + 0x40]
sub rax, qword [rbx + 0x38]
cmp rax, 0x10
jge 0x14006d964
mov edx, 1
lea rcx, [rbx + 0x20]
call fcn.14001b03c
mov rcx, qword [rbx + 0x38]
xorps xmm0, xmm0
lea rax, [rcx + 0x10]
mov qword [rbx + 0x38], rax
movups xmmword [rcx], xmm0
mov word [rcx + 0xe], 0x216
movsd qword [rcx], xmm7
jmp 0x14006da7d
test al, al
je 0x14006d9c5
mov rcx, qword [rsp + 0xb0]
cmp byte [rsp + 0xb8], bpl
je 0x14006d9a8
neg r14
mov rdx, r14
call fcn.14001cebc
jmp 0x14006d9b0
mov rdx, r14
call fcn.14001d3dc
test al, al
jne 0x14006da7d
mov dword [r15 + 0x30], shutdown
jmp 0x14006d909
mov rbx, qword [rsp + 0xb0]
mov rax, qword [rbx + 0x40]
sub rax, qword [rbx + 0x38]
cmp byte [rsp + 0xb8], bpl
je 0x14006da23
neg esi
cmp rax, 0x10
jge 0x14006d9f5
mov edx, 1
lea rcx, [rbx + 0x20]
call fcn.14001b03c
mov rcx, qword [rbx + 0x38]
xorps xmm0, xmm0
test esi, esi
mov edx, 0x1f6
lea rax, [rcx + 0x10]
mov qword [rbx + 0x38], rax
movsxd rax, esi
movups xmmword [rcx], xmm0
mov qword [rcx], rax
mov eax, 0xb6
cmovns ax, dx
mov word [rcx + 0xe], ax
jmp 0x14006da7d
cmp rax, 0x10
jge 0x14006da37
mov edx, 1
lea rcx, [rbx + 0x20]
call fcn.14001b03c
mov rcx, qword [rbx + 0x38]
xorps xmm0, xmm0
lea rax, [rcx + 0x10]
mov qword [rbx + 0x38], rax
mov eax, esi
shr esi, 0x1a
not si
movups xmmword [rcx], xmm0
mov qword [rcx], rax
and si, 0x20
mov eax, 0x1d6
or si, ax
mov word [rcx + 0xe], si
jmp 0x14006da7d
mov rax, qword [rbx + 0x38]
sub rax, qword [rbx + 0x10]
mov dword [r15 + 0x30], 3
add rax, rcx
mov qword [r15 + 0x38], rax
movaps xmm6, xmmword [rsp + 0x40]
movaps xmm7, xmmword [rsp + 0x30]
add rsp, 0x58
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbp
pop rbx
ret