Function at 0x7ff7ed4318f0
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, 0x50
movaps xmmword [rax - 0x48], xmm6
mov r13, rcx
mov rcx, qword [rdx + 0x38]
mov rbx, rdx
sub rcx, qword [rdx + 0x10]
xorps xmm6, xmm6
movaps xmmword [rax - 0x58], xmm7
xorps xmm7, xmm7
mov rax, qword [rdx + 0x28]
add rcx, rax
mov qword [rsp + 0x28], rcx
cmp byte [rax], 0x2d
jne 0x7ff7ed431944
mov rcx, rdx
call fcn.7ff7ed433044
mov r12b, 1
jmp 0x7ff7ed431947
xor r12b, r12b
mov rcx, qword [rbx + 0x28]
xor bpl, bpl
xor edi, edi
mov byte [rsp + 0xa8], r12b
xor r15d, r15d
mov byte [rsp + 0x98], bpl
movsx esi, byte [rcx]
cmp sil, 0x30
jne 0x7ff7ed431985
mov rcx, rbx
xor esi, esi
call fcn.7ff7ed433044
mov rdx, qword [rbx + 0x28]
xor r12b, r12b
xor r14d, r14d
jmp 0x7ff7ed431b2a
lea eax, [rsi - 0x31]
cmp al, 8
ja 0x7ff7ed4320ba
mov rcx, rbx
call fcn.7ff7ed433044
mov rdx, qword [rbx + 0x28]
lea r14d, [rsi - 0x30]
mov sil, byte [rdx]
test r12b, r12b
je 0x7ff7ed4319f9
cmp sil, 0x30
jl 0x7ff7ed431a48
mov r12d, 0xccccccc
cmp sil, 0x39
ja 0x7ff7ed431a48
cmp r14d, r12d
jb 0x7ff7ed4319cf
jne 0x7ff7ed431a42
cmp sil, 0x38
ja 0x7ff7ed431a42
mov rcx, rbx
call fcn.7ff7ed433044
mov rdx, qword [rbx + 0x28]
lea r14d, [r14 + r14*4]
movzx eax, sil
lea r14d, [r14 - 0x18]
inc r15d
mov sil, byte [rdx]
lea r14d, [rax + r14*2]
cmp sil, 0x30
jl 0x7ff7ed431a48
jmp 0x7ff7ed4319b8
cmp sil, 0x30
jl 0x7ff7ed431a48
mov r12d, 0x19999999
cmp sil, 0x39
ja 0x7ff7ed431a48
cmp r14d, r12d
jb 0x7ff7ed431a18
jne 0x7ff7ed431a42
cmp sil, 0x35
ja 0x7ff7ed431a42
mov rcx, rbx
call fcn.7ff7ed433044
mov rdx, qword [rbx + 0x28]
lea r14d, [r14 + r14*4]
movzx eax, sil
lea r14d, [r14 - 0x18]
inc r15d
mov sil, byte [rdx]
lea r14d, [rax + r14*2]
cmp sil, 0x30
jl 0x7ff7ed431a48
jmp 0x7ff7ed431a05
mov bpl, 1
mov edi, r14d
xor r12b, r12b
mov cl, bpl
mov byte [rsp + 0x98], cl
mov esi, r14d
test bpl, bpl
je 0x7ff7ed431ad8
mov rax, qword [rbx + 0x28]
mov rdx, rax
mov byte [rsp + 0x98], cl
mov bpl, byte [rax]
cmp byte [rsp + 0xa8], r12b
je 0x7ff7ed431c0b
cmp bpl, 0x30
jl 0x7ff7ed431ad8
mov byte [rsp + 0x98], cl
movabs r14, 0xccccccccccccccc
xor r12b, r12b
cmp bpl, 0x39
ja 0x7ff7ed431ad8
cmp rdi, r14
jb 0x7ff7ed431ab1
jne 0x7ff7ed431bdc
cmp bpl, 0x38
ja 0x7ff7ed431bdc
mov rcx, rbx
call fcn.7ff7ed433044
mov rdx, qword [rbx + 0x28]
lea rax, [rdi + rdi*4]
movzx ecx, bpl
inc r15d
sub ecx, 0x30
mov bpl, byte [rdx]
lea rdi, [rcx + rax*2]
cmp bpl, 0x30
jge 0x7ff7ed431a93
mov rax, rdx
mov r14, rdi
test r12b, r12b
je 0x7ff7ed431b2a
cmp byte [rax], 0x30
mov rdx, rax
jl 0x7ff7ed431b2a
mov bpl, byte [rax]
mov rdx, rax
cmp bpl, 0x39
ja 0x7ff7ed431b2a
mov rcx, rbx
call fcn.7ff7ed433044
mov rdx, qword [rbx + 0x28]
mulsd xmm6, qword [0x7ff7ed6f2f70]
movzx eax, bpl
sub eax, 0x30
mov bpl, byte [rdx]
movd xmm0, eax
mov rax, rdx
cvtdq2pd xmm0, xmm0
addsd xmm6, xmm0
cmp bpl, 0x30
jge 0x7ff7ed431aee
and dword [rsp + 0x20], 0
cmp byte [rdx], 0x2e
jne 0x7ff7ed431cc9
mov rcx, rbx
call fcn.7ff7ed433044
mov rcx, qword [rbx + 0x28]
mov bpl, byte [rcx]
lea eax, [rbp - 0x30]
cmp al, 9
ja 0x7ff7ed431d6b
test r12b, r12b
jne 0x7ff7ed431d11
cmp byte [rsp + 0x98], r12b
mov r8, rcx
mov edi, esi
cmovne rdi, r14
mov r9, rcx
mov rdx, r8
cmp bpl, 0x39
ja 0x7ff7ed431bc6
movabs rax, 0x1fffffffffffff
cmp rdi, rax
ja 0x7ff7ed431bc6
mov rcx, rbx
call fcn.7ff7ed433044
dec dword [rsp + 0x20]
lea rax, [rdi + rdi*4]
movzx ecx, bpl
sub ecx, 0x30
lea rdi, [rcx + rax*2]
mov rcx, qword [rbx + 0x28]
test rdi, rdi
lea eax, [r15 + 1]
mov r8, rcx
mov r9, rcx
cmove eax, r15d
mov rdx, rcx
mov bpl, byte [rcx]
mov r15d, eax
cmp bpl, 0x30
jge 0x7ff7ed431b6c
xorps xmm6, xmm6
test rdi, rdi
js 0x7ff7ed431ca5
cvtsi2sd xmm6, rdi
jmp 0x7ff7ed431cbd
xorps xmm6, xmm6
test rdi, rdi
js 0x7ff7ed431beb
cvtsi2sd xmm6, rdi
jmp 0x7ff7ed431c03
mov rax, rdi
mov rcx, rdi
shr rcx, 1
and eax, 1
or rcx, rax
cvtsi2sd xmm6, rcx
addsd xmm6, xmm6
mov r12b, 1
jmp 0x7ff7ed431ad8
cmp bpl, 0x30
jl 0x7ff7ed431ad8
mov byte [rsp + 0x98], cl
xor r12b, r12b
movabs rax, 0x1999999999999999
mov r14, rdi
cmp bpl, 0x39
ja 0x7ff7ed431ad8
cmp rdi, rax
jb 0x7ff7ed431c43
jne 0x7ff7ed431c73
cmp bpl, 0x35
ja 0x7ff7ed431c73
mov rcx, rbx
call fcn.7ff7ed433044
mov rdx, qword [rbx + 0x28]
lea rax, [rdi + rdi*4]
movzx ecx, bpl
inc r15d
sub ecx, 0x30
mov bpl, byte [rdx]
lea rdi, [rcx + rax*2]
mov r14, rdi
cmp bpl, 0x30
jl 0x7ff7ed431b2a
jmp 0x7ff7ed431c1c
xorps xmm6, xmm6
test rdi, rdi
js 0x7ff7ed431c82
cvtsi2sd xmm6, rdi
jmp 0x7ff7ed431c9a
mov rax, rdi
mov rcx, rdi
shr rcx, 1
and eax, 1
or rcx, rax
cvtsi2sd xmm6, rcx
addsd xmm6, xmm6
mov r12b, 1
mov rax, rdx
jmp 0x7ff7ed431ae3
mov rax, rdi
mov rcx, rdi
shr rcx, 1
and eax, 1
or rcx, rax
cvtsi2sd xmm6, rcx
addsd xmm6, xmm6
mov bpl, byte [r9]
mov r12b, 1
cmp bpl, 0x30
jge 0x7ff7ed431d14
mov r15b, byte [rsp + 0x98]
xor r14d, r14d
cmp byte [rdx], 0x65
mov bpl, r15b
je 0x7ff7ed431ce5
cmp byte [rdx], 0x45
jne 0x7ff7ed431f5a
mov rcx, rbx
call fcn.7ff7ed433044
test r12b, r12b
jne 0x7ff7ed431d98
test r15b, r15b
mov ecx, esi
xorps xmm6, xmm6
cmovne rcx, rdi
test rcx, rcx
js 0x7ff7ed431d80
cvtsi2sd xmm6, rcx
jmp 0x7ff7ed431d95
mov rdx, rcx
cmp bpl, 0x39
ja 0x7ff7ed431cc9
mov rcx, rbx
cmp r15d, 0x11
jge 0x7ff7ed431d54
mulsd xmm6, qword [0x7ff7ed6f2f70]
dec dword [rsp + 0x20]
movzx eax, bpl
sub eax, 0x30
movd xmm0, eax
lea eax, [r15 + 1]
cvtdq2pd xmm0, xmm0
addsd xmm0, xmm6
comisd xmm0, xmm7
movaps xmm6, xmm0
cmovbe eax, r15d
mov r15d, eax
call fcn.7ff7ed433044
mov rdx, qword [rbx + 0x28]
mov bpl, byte [rdx]
cmp bpl, 0x30
jge 0x7ff7ed431d14
jmp 0x7ff7ed431cc9
sub rcx, qword [rbx + 0x10]
add rcx, qword [rbx + 0x38]
mov dword [r13 + 0x30], 0xe
jmp 0x7ff7ed4320ca
mov rax, rcx
and ecx, 1
shr rax, 1
or rax, rcx
cvtsi2sd xmm6, rax
addsd xmm6, xmm6
mov r12b, 1
mov rax, qword [rbx + 0x28]
xor r15b, r15b
cmp byte [rax], 0x2b
jne 0x7ff7ed431db2
mov rcx, rbx
call fcn.7ff7ed433044
mov rax, qword [rbx + 0x28]
jmp 0x7ff7ed431dda
cmp byte [rax], 0x2d
mov ecx, esi
mov byte [rsp + 0x98], bpl
jne 0x7ff7ed431dd2
mov rcx, rbx
call fcn.7ff7ed433044
mov rax, qword [rbx + 0x28]
mov r15b, 1
jmp 0x7ff7ed431dda
mov byte [rsp + 0x98], bpl
movsx ebp, byte [rax]
cmp bpl, 0x30
jl 0x7ff7ed431f41
cmp bpl, 0x39
jg 0x7ff7ed431f41
mov rcx, rbx
call fcn.7ff7ed433044
mov rax, qword [rbx + 0x28]
lea r14d, [rbp - 0x30]
mov bpl, byte [rax]
test r15b, r15b
je 0x7ff7ed431ef0
mov ecx, dword [rsp + 0x20]
mov eax, 0x66666667
add ecx, 0x7ffffff7
imul ecx
mov r15d, edx
sar r15d, 2
mov eax, r15d
shr eax, 0x1f
add r15d, eax
jmp 0x7ff7ed431e74
cmp bpl, 0x39
ja 0x7ff7ed431e7a
mov rcx, rbx
call fcn.7ff7ed433044
lea r14d, [r14 + r14*4]
movzx eax, bpl
lea r14d, [r14 - 0x18]
lea r14d, [rax + r14*2]
cmp r14d, r15d
jle 0x7ff7ed431e6d
jmp 0x7ff7ed431e62
cmp cl, 0x39
ja 0x7ff7ed431e6d
mov rcx, rbx
call fcn.7ff7ed433044
mov rax, qword [rbx + 0x28]
mov cl, byte [rax]
cmp cl, 0x30
jge 0x7ff7ed431e55
mov rax, qword [rbx + 0x28]
mov bpl, byte [rax]
cmp bpl, 0x30
jge 0x7ff7ed431e30
neg r14d
mov eax, dword [rsp + 0x20]
mov r15b, byte [rsp + 0x98]
xor ebp, ebp
test r12b, r12b
je 0x7ff7ed431fdc
lea ecx, [r14 + rax]
mov edx, 0xfffffecc
cmp ecx, edx
jge 0x7ff7ed431f63
divsd xmm6, qword [0x7ff7ed6f2f78]
lea eax, [rcx + 0x134]
cmp eax, edx
jl 0x7ff7ed431ed3
movsxd rax, ecx
lea rax, [rax*8 + 0x9a0]
lea rcx, [0x7ff7ed6f23c0]
movaps xmm7, xmm6
sub rcx, rax
divsd xmm7, qword [rcx]
comisd xmm7, xmmword [0x7ff7ed6f2f80]
jbe 0x7ff7ed431f86
mov dword [r13 + 0x30], 0xd
mov rax, qword [rsp + 0x28]
jmp 0x7ff7ed431f51
mov eax, dword [rsp + 0x20]
mov r15d, 0x134
sub r15d, eax
cmp bpl, 0x30
jl 0x7ff7ed431e81
cmp bpl, 0x39
ja 0x7ff7ed431e7d
mov rcx, rbx
call fcn.7ff7ed433044
lea r14d, [r14 + r14*4]
movzx eax, bpl
lea r14d, [r14 - 0x18]
lea r14d, [rax + r14*2]
cmp r14d, r15d
jg 0x7ff7ed431ee1
mov rax, qword [rbx + 0x28]
mov bpl, byte [rax]
cmp bpl, 0x30
jl 0x7ff7ed431e7d
jmp 0x7ff7ed431f07
sub rax, qword [rbx + 0x10]
add rax, qword [rbx + 0x38]
mov dword [r13 + 0x30], 0xf
mov qword [r13 + 0x38], rax
jmp 0x7ff7ed4320ce
mov eax, dword [rsp + 0x20]
jmp 0x7ff7ed431e89
movsxd rax, ecx
shl rax, 3
test ecx, ecx
js 0x7ff7ed431ec2
lea rcx, [0x7ff7ed6f23c0]
movaps xmm7, xmm6
mulsd xmm7, qword [rax + rcx]
jmp 0x7ff7ed431ed3
cmp byte [rsp + 0xa8], bpl
je 0x7ff7ed431f97
xorps xmm7, xmmword [0x7ff7ed6f1010]
mov rbx, qword [rsp + 0xa0]
mov rax, qword [rbx + 0x40]
sub rax, qword [rbx + 0x38]
cmp rax, 0x10
jge 0x7ff7ed431fbb
mov edx, 1
lea rcx, [rbx + 0x20]
call fcn.7ff7ed39d014
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 0x7ff7ed4320ce
test r15b, r15b
je 0x7ff7ed43201d
mov rcx, qword [rsp + 0xa0]
cmp byte [rsp + 0xa8], bpl
je 0x7ff7ed432000
neg rdi
mov rdx, rdi
call fcn.7ff7ed39edc0
jmp 0x7ff7ed432008
mov rdx, rdi
call fcn.7ff7ed39f3b0
test al, al
jne 0x7ff7ed4320ce
mov dword [r13 + 0x30], 0x10
jmp 0x7ff7ed431ee9
mov rbx, qword [rsp + 0xa0]
mov rax, qword [rbx + 0x40]
lea rcx, [rbx + 0x20]
sub rax, qword [rbx + 0x38]
cmp byte [rsp + 0xa8], bpl
je 0x7ff7ed43207b
neg esi
cmp rax, 0x10
jge 0x7ff7ed43204d
mov edx, 1
call fcn.7ff7ed39d014
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 0x7ff7ed4320ce
cmp rax, 0x10
jge 0x7ff7ed43208b
mov edx, 1
call fcn.7ff7ed39d014
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 0x7ff7ed4320ce
sub rcx, qword [rbx + 0x10]
add rcx, qword [rbx + 0x38]
mov dword [r13 + 0x30], 3
mov qword [r13 + 0x38], rcx
mov rbx, qword [rsp + 0x90]
movaps xmm6, xmmword [rsp + 0x40]
movaps xmm7, xmmword [rsp + 0x30]
add rsp, 0x50
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbp
ret