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

Disassembly:
mov rax, rsp
mov qword [rax + 8], rbx
mov qword [rax + 0x18], r8
push rbp
push rsi
push rdi
push r12
push r13
push r14
push r15
sub rsp, 0x60
movaps xmmword [rax - 0x48], xmm6
mov rbx, rdx
mov rdx, qword [rdx + 0x28]
mov r13, rcx
movaps xmmword [rax - 0x58], xmm7
xorps xmm6, xmm6
xorps xmm7, xmm7
mov ebp, 1
mov rax, qword [rbx + 0x38]
sub rax, qword [rbx + 0x10]
mov sil, byte [rdx]
add rax, rdx
mov qword [rsp + 0x30], rax
cmp sil, 0x2d
jne 0x14002b5f8
mov rcx, rbx
call fcn.14002cbc4
mov rdx, qword [rbx + 0x28]
mov r15b, bpl
mov sil, byte [rdx]
jmp 0x14002b5fb
xor r15b, r15b
xor edi, edi
mov byte [rsp + 0x20], r15b
xor r12d, r12d
mov byte [rsp + 0xb8], dil
mov dword [rsp + 0x24], r12d
cmp sil, 0x30
jne 0x14002b636
mov rcx, rbx
xor esi, esi
call fcn.14002cbc4
mov r8, qword [rbx + 0x28]
xor r15b, r15b
mov byte [rsp + 0xa8], r15b
jmp 0x14002b866
lea eax, [rsi - 0x31]
cmp al, 8
ja 0x14002bd1f
mov rcx, rbx
call fcn.14002cbc4
mov rax, qword [rbx + 0x28]
movsx esi, sil
sub esi, 0x30
mov r14b, byte [rax]
test r15b, r15b
je 0x14002b6af
cmp r14b, 0x30
jl 0x14002b704
mov r15d, 0xccccccc
cmp r14b, 0x39
jg 0x14002b704
cmp esi, r15d
jb 0x14002b683
jne 0x14002b6fa
cmp r14b, 0x38
jg 0x14002b6fa
mov rcx, rbx
call fcn.14002cbc4
movsx eax, r14b
lea esi, [rsi + rsi*4]
add r12d, ebp
lea esi, [rsi - 0x18]
mov dword [rsp + 0x24], r12d
lea esi, [rax + rsi*2]
mov rax, qword [rbx + 0x28]
mov r14b, byte [rax]
cmp r14b, 0x30
jl 0x14002b704
jmp 0x14002b66c
cmp r14b, 0x30
jl 0x14002b704
mov r15d, 0x19999999
cmp r14b, 0x39
jg 0x14002b704
cmp esi, r15d
jb 0x14002b6ce
jne 0x14002b6fa
cmp r14b, 0x35
jg 0x14002b6fa
mov rcx, rbx
call fcn.14002cbc4
movsx eax, r14b
lea esi, [rsi + rsi*4]
add r12d, ebp
lea esi, [rsi - 0x18]
mov dword [rsp + 0x24], r12d
lea esi, [rax + rsi*2]
mov rax, qword [rbx + 0x28]
mov r14b, byte [rax]
cmp r14b, 0x30
jl 0x14002b704
jmp 0x14002b6bb
mov byte [rsp + 0xb8], bpl
mov edi, esi
xor r15b, r15b
mov rdx, rax
mov byte [rsp + 0xa8], r15b
cmp byte [rsp + 0xb8], r15b
je 0x14002b817
cmp byte [rsp + 0x20], r15b
je 0x14002b78e
cmp byte [rax], 0x30
jl 0x14002b817
mov r14b, byte [rax]
movabs rax, 0xccccccccccccccc
cmp r14b, 0x39
jg 0x14002b817
cmp rdi, rax
jb 0x14002b75c
jne 0x14002b7e5
cmp r14b, 0x38
jg 0x14002b7e5
mov rcx, rbx
call fcn.14002cbc4
mov rdx, qword [rbx + 0x28]
lea rax, [rdi + rdi*4]
movsx ecx, r14b
add r12d, ebp
sub ecx, 0x30
mov dword [rsp + 0x24], r12d
mov r14b, byte [rdx]
lea rdi, [rcx + rax*2]
cmp r14b, 0x30
jl 0x14002b817
jmp 0x14002b733
cmp byte [rax], 0x30
jl 0x14002b817
mov r14b, byte [rax]
movabs rax, 0x1999999999999999
cmp r14b, 0x39
jg 0x14002b817
cmp rdi, rax
jb 0x14002b7b7
jne 0x14002b7e5
cmp r14b, 0x35
jg 0x14002b7e5
mov rcx, rbx
call fcn.14002cbc4
mov rdx, qword [rbx + 0x28]
lea rax, [rdi + rdi*4]
movsx ecx, r14b
add r12d, ebp
sub ecx, 0x30
mov dword [rsp + 0x24], r12d
mov r14b, byte [rdx]
lea rdi, [rcx + rax*2]
cmp r14b, 0x30
jl 0x14002b817
jmp 0x14002b79a
xorps xmm6, xmm6
test rdi, rdi
js 0x14002b7f4
cvtsi2sd xmm6, rdi
jmp 0x14002b80c
mov rax, rdi
mov rcx, rdi
and rax, rbp
shr rcx, 1
or rcx, rax
cvtsi2sd xmm6, rcx
addsd xmm6, xmm6
mov byte [rsp + 0xa8], bpl
mov r15b, bpl
mov r8, rdx
test r15b, r15b
je 0x14002b866
cmp byte [rdx], 0x30
jl 0x14002b866
mov r14b, byte [rdx]
mov r8, rdx
cmp r14b, 0x39
jg 0x14002b866
mov rcx, rbx
call fcn.14002cbc4
mulsd xmm6, qword [0x1400aa0e8]
mov r8, qword [rbx + 0x28]
movsx eax, r14b
mov rdx, r8
sub eax, 0x30
mov r14b, byte [r8]
movd xmm0, eax
cvtdq2pd xmm0, xmm0
addsd xmm0, xmm6
movaps xmm6, xmm0
cmp r14b, 0x30
jge 0x14002b827
xor r12d, r12d
cmp byte [r8], 0x2e
mov dword [rsp + 0x28], r12d
jne 0x14002b9c4
mov rcx, rbx
call fcn.14002cbc4
mov rcx, qword [rbx + 0x28]
mov r14b, byte [rcx]
lea eax, [r14 - 0x30]
cmp al, 9
jbe 0x14002b8ab
mov rax, qword [rbx + 0x38]
sub rax, qword [rbx + 0x10]
add rax, rcx
mov dword [r13 + 0x30], select
mov qword [r13 + 0x38], rax
jmp 0x14002bd33
test r15b, r15b
jne 0x14002b967
cmp byte [rsp + 0xb8], r12b
mov rdx, rcx
mov r15d, dword [rsp + 0x24]
mov eax, esi
cmovne rax, rdi
mov rdi, rax
mov r9, rcx
mov r8, rdx
cmp r14b, 0x39
jg 0x14002b926
movabs rax, 0x1fffffffffffff
cmp rdi, rax
ja 0x14002b926
mov rcx, rbx
call fcn.14002cbc4
movsx ecx, r14b
lea rax, [rdi + rdi*4]
sub ecx, 0x30
sub r12d, ebp
lea rdi, [rcx + rax*2]
mov rcx, qword [rbx + 0x28]
test rdi, rdi
lea eax, [r15 + 1]
mov rdx, rcx
mov r9, rcx
cmove eax, r15d
mov r8, rcx
mov r14b, byte [rcx]
mov r15d, eax
cmp r14b, 0x30
jge 0x14002b8cd
mov dword [rsp + 0x24], r15d
xorps xmm6, xmm6
mov dword [rsp + 0x28], r12d
test rdi, rdi
js 0x14002b93f
cvtsi2sd xmm6, rdi
jmp 0x14002b957
mov rcx, rdi
mov rax, rdi
shr rcx, 1
and rax, rbp
or rcx, rax
cvtsi2sd xmm6, rcx
addsd xmm6, xmm6
mov r14b, byte [r9]
mov r15b, bpl
mov byte [rsp + 0xa8], bpl
jmp 0x14002b9be
mov r8, rcx
jmp 0x14002b9be
cmp r14b, 0x39
jg 0x14002b9c4
mov ecx, dword [rsp + 0x24]
cmp ecx, 0x11
jge 0x14002b9af
mulsd xmm6, qword [0x1400aa0e8]
sub r12d, ebp
movsx eax, r14b
sub eax, 0x30
mov dword [rsp + 0x28], r12d
movd xmm0, eax
lea eax, [rcx + 1]
cvtdq2pd xmm0, xmm0
addsd xmm0, xmm6
comisd xmm0, xmm7
movaps xmm6, xmm0
cmovbe eax, ecx
mov dword [rsp + 0x24], eax
mov rcx, rbx
call fcn.14002cbc4
mov r8, qword [rbx + 0x28]
mov r14b, byte [r8]
cmp r14b, 0x30
jge 0x14002b96c
mov al, byte [r8]
xor r14d, r14d
sub al, 0x45
test al, 0xdf
jne 0x14002baee
mov rcx, rbx
call fcn.14002cbc4
test r15b, r15b
jne 0x14002ba1b
cmp byte [rsp + 0xb8], r14b
xorps xmm6, xmm6
mov ecx, esi
cmovne rcx, rdi
test rcx, rcx
js 0x14002b9fe
cvtsi2sd xmm6, rcx
jmp 0x14002ba13
mov rax, rcx
and rcx, rbp
shr rax, 1
or rax, rcx
cvtsi2sd xmm6, rax
addsd xmm6, xmm6
mov byte [rsp + 0xa8], bpl
mov rcx, qword [rbx + 0x28]
xor r12b, r12b
mov r14b, byte [rcx]
cmp r14b, 0x2b
jne 0x14002ba35
mov rcx, rbx
call fcn.14002cbc4
jmp 0x14002ba46
cmp r14b, 0x2d
jne 0x14002ba4d
mov rcx, rbx
call fcn.14002cbc4
mov r12b, bpl
mov rcx, qword [rbx + 0x28]
mov r14b, byte [rcx]
lea eax, [r14 - 0x30]
cmp al, 9
ja 0x14002bba7
mov rcx, rbx
call fcn.14002cbc4
mov rax, qword [rbx + 0x28]
movsx r14d, r14b
sub r14d, 0x30
mov r15b, byte [rax]
test r12b, r12b
je 0x14002bb62
mov ecx, dword [rsp + 0x28]
mov eax, 0x66666667
add ecx, 0x7ffffff7
imul ecx
mov r12d, edx
sar r12d, 2
mov eax, r12d
shr eax, 0x1f
add r12d, eax
jmp 0x14002bae0
cmp r15b, 0x39
jg 0x14002bae6
mov rcx, rbx
call fcn.14002cbc4
lea r14d, [r14 + r14*4]
movsx eax, r15b
lea r14d, [r14 - 0x18]
lea r14d, [rax + r14*2]
cmp r14d, r12d
jle 0x14002bad9
jmp 0x14002bace
cmp cl, 0x39
jg 0x14002bad9
mov rcx, rbx
call fcn.14002cbc4
mov rax, qword [rbx + 0x28]
mov cl, byte [rax]
cmp cl, 0x30
jge 0x14002bac1
mov rax, qword [rbx + 0x28]
mov r15b, byte [rax]
cmp r15b, 0x30
jge 0x14002ba9c
neg r14d
mov r12d, dword [rsp + 0x28]
xor r15d, r15d
cmp byte [rsp + 0xa8], r15b
je 0x14002bc3a
lea ecx, [r14 + r12]
mov edx, 0xfffffecc
cmp ecx, edx
jge 0x14002bbc0
divsd xmm6, qword [0x14009d840]
lea eax, [rcx + 0x134]
cmp eax, edx
jl 0x14002bbe3
movsxd rax, ecx
lea rax, [rax*8 + 0x9a0]
lea rcx, [0x14009cc90]
movaps xmm7, xmm6
sub rcx, rax
divsd xmm7, qword [rcx]
comisd xmm7, xmmword [0x14009d848]
jbe 0x14002bbe3
mov dword [r13 + 0x30], select
mov rax, qword [rsp + 0x30]
jmp 0x14002b8a2
mov r12d, 0x134
sub r12d, dword [rsp + 0x28]
cmp r15b, 0x30
jl 0x14002bae9
cmp r15b, 0x39
jg 0x14002bae9
mov rcx, rbx
call fcn.14002cbc4
lea r14d, [r14 + r14*4]
movsx eax, r15b
lea r14d, [r14 - 0x18]
lea r14d, [rax + r14*2]
cmp r14d, r12d
jg 0x14002bb50
mov rax, qword [rbx + 0x28]
mov r15b, byte [rax]
jmp 0x14002bb6d
sub rcx, qword [rbx + 0x10]
add rcx, qword [rbx + 0x38]
mov qword [r13 + 0x38], rcx
mov dword [r13 + 0x30], select
jmp 0x14002bd33
movsxd rax, ecx
shl rax, 3
test ecx, ecx
js 0x14002bb31
lea rcx, [0x14009cc90]
movaps xmm7, xmm6
mulsd xmm7, qword [rax + rcx]
jmp 0x14002bb42
cmp byte [rsp + 0x20], r15b
je 0x14002bbf1
xorps xmm7, xmmword [0x14009d860]
mov rbx, qword [rsp + 0xb0]
mov rcx, qword [rbx + 0x38]
mov rax, qword [rbx + 0x40]
sub rax, rcx
cmp rax, 0x10
jge 0x14002bc1a
mov rdx, rbp
lea rcx, [rbx + 0x20]
call fcn.140010cb4
mov rcx, qword [rbx + 0x38]
lea rax, [rcx + 0x10]
xorps xmm0, xmm0
mov qword [rbx + 0x38], rax
mov eax, 0x216
movups xmmword [rcx], xmm0
movsd qword [rcx], xmm7
mov word [rcx + 0xe], ax
jmp 0x14002bd33
cmp byte [rsp + 0xb8], r15b
je 0x14002bc71
mov rcx, qword [rsp + 0xb0]
cmp byte [rsp + 0x20], r15b
je 0x14002bc61
not rdi
lea rdx, [rdi + rbp]
call fcn.140012784
jmp 0x14002bc69
mov rdx, rdi
call fcn.140012dcc
mov bpl, al
jmp 0x14002bd0d
mov rbx, qword [rsp + 0xb0]
mov rcx, qword [rbx + 0x38]
mov rax, qword [rbx + 0x40]
sub rax, rcx
cmp byte [rsp + 0x20], r15b
je 0x14002bcce
not esi
add esi, ebp
cmp rax, 0x10
jge 0x14002bca5
mov rdx, rbp
lea rcx, [rbx + 0x20]
call fcn.140010cb4
mov rcx, qword [rbx + 0x38]
lea rax, [rcx + 0x10]
xorps xmm0, xmm0
mov qword [rbx + 0x38], rax
test esi, esi
movsxd rax, esi
mov edx, 0x1f6
movups xmmword [rcx], xmm0
mov qword [rcx], rax
mov eax, 0xb6
cmovns ax, dx
jmp 0x14002bc31
cmp rax, 0x10
jge 0x14002bce4
mov rdx, rbp
lea rcx, [rbx + 0x20]
call fcn.140010cb4
mov rcx, qword [rbx + 0x38]
lea rax, [rcx + 0x10]
xorps xmm0, xmm0
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
test bpl, bpl
jne 0x14002bd33
mov dword [r13 + 0x30], select
jmp 0x14002bb58
sub rdx, qword [rbx + 0x10]
add rdx, qword [rbx + 0x38]
mov qword [r13 + 0x38], rdx
mov dword [r13 + 0x30], 3
mov rbx, qword [rsp + 0xa0]
movaps xmm6, xmmword [rsp + 0x50]
movaps xmm7, xmmword [rsp + 0x40]
add rsp, 0x60
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbp
ret