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

Disassembly:
push rbp
push rbx
push rsi
push rdi
push r13
push r14
push r15
mov rbp, rsp
sub rsp, 0x80
movaps xmmword [rsp + 0x70], xmm6
mov rax, qword [0x140451040]
xor rax, rsp
mov qword [rbp - 0x20], rax
mov qword [rbp - 0x58], r8
mov qword [rbp - 0x48], rdx
mov rdi, rcx
movups xmm0, xmmword [rdx]
movups xmmword [rbp - 0x40], xmm0
movsd xmm6, qword [rdx + 0x10]
movsd qword [rbp - 0x30], xmm6
mov qword [rbp - 0x28], rdx
movq rcx, xmm0
mov rax, rcx
sub rax, qword [rbp - 0x30]
mov qword [rbp - 0x50], rax
xorps xmm2, xmm2
xorps xmm1, xmm1
cmp byte [rcx], 0x2d
jne 0x14001012f
inc rcx
mov qword [rbp - 0x40], rcx
mov r13b, 1
jmp 0x140010132
xor r13b, r13b
xor r11d, r11d
xor r10b, r10b
mov byte [rbp - 0x60], r10b
xor ebx, ebx
mov r15b, 0x39
lea r14d, [r11 + 0x30]
cmp byte [rcx], r14b
jne 0x140010159
xor esi, esi
lea rdx, [rcx + 1]
mov qword [rbp - 0x40], rdx
jmp 0x140010230
mov al, byte [rcx]
sub al, 0x31
cmp al, 8
ja 0x1400106ce
lea rdx, [rcx + 1]
mov qword [rbp - 0x40], rdx
movsx esi, byte [rcx]
sub esi, r14d
test r13b, r13b
je 0x1400101d5
cmp byte [rdx], r14b
jl 0x140010230
mov rcx, rdx
mov r8, rdx
mov al, byte [rdx]
cmp al, r15b
ja 0x140010230
mov r9d, 0xccccccc
cmp esi, r9d
jb 0x1400101aa
jne 0x140010226
mov r8, rcx
cmp al, 0x38
ja 0x140010226
lea rdx, [r8 + 1]
mov qword [rbp - 0x40], rdx
lea esi, [rsi + rsi*4]
movsx eax, byte [r8]
lea esi, [rsi - 0x18]
lea esi, [rax + rsi*2]
inc ebx
mov al, byte [rdx]
cmp al, r14b
jl 0x140010230
mov rcx, rdx
mov r8, rdx
cmp al, r15b
jle 0x140010198
jmp 0x140010230
cmp byte [rdx], r14b
jl 0x140010230
mov rcx, rdx
mov r8, rdx
mov al, byte [rdx]
cmp al, r15b
jg 0x140010230
mov r9d, 0x19999999
cmp esi, r9d
jb 0x1400101fb
jne 0x140010226
mov r8, rcx
cmp al, 0x35
jg 0x140010226
lea rdx, [r8 + 1]
mov qword [rbp - 0x40], rdx
lea esi, [rsi + rsi*4]
movsx eax, byte [r8]
lea esi, [rsi - 0x18]
lea esi, [rax + rsi*2]
inc ebx
mov al, byte [rdx]
cmp al, r14b
jl 0x140010230
mov rcx, rdx
mov r8, rdx
cmp al, r15b
jle 0x1400101ed
jmp 0x140010230
mov r10b, 1
mov byte [rbp - 0x60], r10b
mov r11d, esi
xor r15b, r15b
movsd xmm3, qword [0x1404474a8]
test r10b, r10b
je 0x140010371
mov al, byte [rdx]
test r13b, r13b
je 0x1400102b1
cmp al, r14b
jl 0x140010371
mov r8, rdx
cmp al, 0x39
jg 0x140010371
mov rcx, rdx
movabs r9, 0xccccccccccccccc
cmp r11, r9
jb 0x14001027a
jne 0x1400102ac
mov rcx, r8
cmp al, 0x38
ja 0x1400102ac
lea rdx, [rcx + 1]
mov qword [rbp - 0x40], rdx
movsx ecx, byte [rcx]
sub ecx, r14d
lea rax, [r11 + r11*4]
lea r11, [rcx + rax*2]
inc ebx
mov al, byte [rdx]
cmp al, r14b
jl 0x140010371
mov r8, rdx
mov rcx, rdx
cmp al, 0x39
jle 0x14001026c
jmp 0x140010371
mov rcx, r11
jmp 0x140010314
cmp al, r14b
jl 0x140010371
mov r9, rdx
cmp al, 0x39
jg 0x140010371
mov r8, rdx
movabs r14, 0x1999999999999999
mov rcx, r11
cmp r11, r14
jb 0x1400102e3
jne 0x14001030e
mov r8, r9
cmp al, 0x35
ja 0x14001030e
lea rdx, [r8 + 1]
mov qword [rbp - 0x40], rdx
movsx ecx, byte [r8]
sub ecx, 0x30
lea rax, [r11 + r11*4]
lea r11, [rcx + rax*2]
inc ebx
mov al, byte [rdx]
cmp al, 0x30
jl 0x140010371
mov r9, rdx
mov r8, rdx
cmp al, 0x39
jle 0x1400102d2
jmp 0x140010371
mov r14d, 0x30
mov r15b, 1
xorps xmm1, xmm1
test rcx, rcx
js 0x140010326
cvtsi2sd xmm1, rcx
jmp 0x14001033b
mov rax, rcx
shr rax, 1
and ecx, 1
or rax, rcx
cvtsi2sd xmm1, rax
addsd xmm1, xmm1
mov al, byte [rdx]
cmp al, r14b
jl 0x140010371
mov rcx, rdx
cmp al, 0x39
ja 0x140010371
lea rdx, [rcx + 1]
mov qword [rbp - 0x40], rdx
movsx eax, byte [rcx]
sub eax, r14d
movd xmm0, eax
cvtdq2pd xmm0, xmm0
mulsd xmm1, xmm3
addsd xmm1, xmm0
mov al, byte [rdx]
mov rcx, rdx
cmp al, r14b
jge 0x140010345
xor r14d, r14d
mov al, byte [rdx]
cmp al, 0x2e
jne 0x140010381
inc rdx
mov qword [rbp - 0x40], rdx
mov rcx, rdx
cmp al, 0x2e
jne 0x14001048f
mov r9b, byte [rdx]
lea eax, [r9 - 0x30]
cmp al, 9
ja 0x1400104c4
mov r8, rdx
test r15b, r15b
jne 0x140010422
test r10b, r10b
jne 0x1400103ab
mov r11d, esi
mov r9, rcx
mov al, byte [rdx]
cmp al, 0x39
jg 0x1400103f5
mov r8, r9
movabs rax, 0x1fffffffffffff
cmp r11, rax
ja 0x1400103f5
lea rdx, [rcx + 1]
mov r8, rdx
mov qword [rbp - 0x40], rdx
movsx ecx, byte [rcx]
sub ecx, 0x30
lea rax, [r11 + r11*4]
lea r11, [rcx + rax*2]
dec r14d
test r11, r11
je 0x1400103e9
inc ebx
mov al, byte [rdx]
mov rcx, rdx
mov r9, rdx
cmp al, 0x30
jge 0x1400103b0
xorps xmm1, xmm1
test r11, r11
js 0x140010404
cvtsi2sd xmm1, r11
jmp 0x14001041c
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 0x14001048f
mov r10, r8
mov r9, r8
mov al, byte [rdx]
mov rcx, r9
cmp al, 0x39
jg 0x14001048b
cmp ebx, 0x11
jge 0x140010471
lea rcx, [r8 + 1]
mov rdx, rcx
mov qword [rbp - 0x40], rcx
movsx eax, byte [r8]
sub eax, 0x30
movd xmm0, eax
cvtdq2pd xmm0, xmm0
mulsd xmm1, xmm3
addsd xmm0, xmm1
movaps xmm1, xmm0
dec r14d
comisd xmm0, xmm2
jbe 0x14001047c
inc ebx
jmp 0x14001047c
lea rcx, [r10 + 1]
mov rdx, rcx
mov qword [rbp - 0x40], rcx
mov r8, rcx
mov al, byte [rdx]
mov r10, rcx
mov r9, rcx
cmp al, 0x30
jge 0x140010433
mov r10b, byte [rbp - 0x60]
xor r9d, r9d
cmp byte [rcx], 0x65
je 0x1400104a0
cmp byte [rcx], 0x45
jne 0x1400105dd
inc rcx
mov qword [rbp - 0x40], rcx
test r15b, r15b
jne 0x1400104e8
mov edx, esi
test r10b, r10b
cmovne rdx, r11
xorps xmm1, xmm1
test rdx, rdx
js 0x1400104d0
cvtsi2sd xmm1, rdx
jmp 0x1400104e5
mov dword [rdi + 0x30], 0xe
jmp 0x1400106d5
mov rax, rdx
shr rax, 1
and edx, 1
or rax, rdx
cvtsi2sd xmm1, rax
addsd xmm1, xmm1
mov r15b, 1
xor bl, bl
cmp byte [rcx], 0x2b
je 0x1400104f6
cmp byte [rcx], 0x2d
jne 0x1400104fd
mov bl, 1
inc rcx
mov qword [rbp - 0x40], rcx
mov al, byte [rcx]
sub al, 0x30
cmp al, 9
ja 0x14001063f
lea r8, [rcx + 1]
mov qword [rbp - 0x40], r8
movsx r9d, byte [rcx]
sub r9d, 0x30
test bl, bl
je 0x14001059a
lea ecx, [r14 + 0x7ffffff7]
mov eax, 0x66666667
imul ecx
mov r10d, edx
sar r10d, 2
mov eax, r10d
shr eax, 0x1f
add r10d, eax
cmp byte [r8], 0x30
jl 0x1400105d6
mov al, byte [r8]
cmp al, 0x39
jg 0x1400105d6
lea rdx, [r8 + 1]
mov qword [rbp - 0x40], rdx
lea r9d, [r9 + r9*4]
movsx eax, byte [r8]
lea r9d, [r9 - 0x18]
lea r9d, [rax + r9*2]
mov r8, rdx
cmp r9d, r10d
jle 0x140010592
mov al, byte [rdx]
cmp al, 0x30
jl 0x140010592
mov rcx, rdx
cmp al, 0x39
ja 0x14001058e
lea r8, [rcx + 1]
mov rdx, r8
mov al, byte [r8]
mov rcx, r8
cmp al, 0x30
jge 0x140010579
mov qword [rbp - 0x40], rdx
mov al, byte [rdx]
cmp al, 0x30
jge 0x140010548
jmp 0x1400105d6
mov r10d, 0x134
sub r10d, r14d
cmp byte [r8], 0x30
jl 0x1400105dd
mov al, byte [r8]
cmp al, 0x39
jg 0x1400105dd
lea rdx, [r8 + 1]
mov qword [rbp - 0x40], rdx
lea r9d, [r9 + r9*4]
movsx eax, byte [r8]
lea r9d, [r9 - 0x18]
lea r9d, [rax + r9*2]
cmp r9d, r10d
jg 0x14001062b
mov al, byte [rdx]
mov r8, rdx
cmp al, 0x30
jge 0x1400105ac
test bl, bl
je 0x1400105dd
neg r9d
test r15b, r15b
je 0x140010681
lea ecx, [r9 + r14]
mov edx, 0xfffffecc
cmp ecx, edx
jge 0x14001064b
divsd xmm1, qword [0x1404476f0]
lea eax, [rcx + 0x134]
cmp eax, edx
jl 0x140010621
movsxd rax, ecx
lea rax, [rax*8 + 0x9a0]
lea rcx, [0x14043eeb0]
sub rcx, rax
movaps xmm2, xmm1
divsd xmm2, qword [rcx]
comisd xmm2, xmmword [0x1404476f8]
jbe 0x140010667
mov dword [rdi + 0x30], 0xd
mov rax, qword [rbp - 0x50]
mov qword [rdi + 0x38], rax
jmp 0x1400106dd
mov dword [rdi + 0x30], 0xf
jmp 0x1400106d5
movsxd rax, ecx
shl rax, 3
test ecx, ecx
js 0x140010610
lea rcx, [0x14043eeb0]
movaps xmm2, xmm1
mulsd xmm2, qword [rax + rcx]
jmp 0x140010621
test r13b, r13b
je 0x140010673
xorps xmm2, xmmword [0x140447d80]
movaps xmm1, xmm2
mov rcx, qword [rbp - 0x58]
call fcn.140010b54
jmp 0x1400106be
mov rcx, qword [rbp - 0x58]
cmp byte [rbp - 0x60], 0
je 0x1400106a7
test r13b, r13b
je 0x14001069d
neg r11
mov rdx, r11
call fcn.140010d90
jmp 0x1400106be
mov rdx, r11
call fcn.140010c5c
jmp 0x1400106be
test r13b, r13b
je 0x1400106b7
neg esi
mov edx, esi
call fcn.140010fe8
jmp 0x1400106be
mov edx, esi
call fcn.140010ed4
test al, al
jne 0x1400106dd
mov dword [rdi + 0x30], 0x10
jmp 0x140010632
mov dword [rdi + 0x30], 3
sub rcx, qword [rbp - 0x30]
mov qword [rdi + 0x38], rcx
movups xmm0, xmmword [rbp - 0x40]
mov rax, qword [rbp - 0x48]
movups xmmword [rax], xmm0
movsd qword [rax + 0x10], xmm6
mov rcx, qword [rbp - 0x20]
xor rcx, rsp
call fcn.140380350
movaps xmm6, xmmword [rsp + 0x70]
add rsp, 0x80
pop r15
pop r14
pop r13
pop rdi
pop rsi
pop rbx
pop rbp
ret