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

Disassembly:
mov qword [rsp + 8], rbx
mov qword [rsp + 0x10], rbp
mov qword [rsp + 0x18], rsi
push rdi
sub rsp, 0x20
mov eax, dword [rcx + 0x7c]
xor esi, esi
mov rbx, rcx
lea ebp, [rsi - 1]
cmp eax, 0x2a
je 0x18001d530
cmp eax, 0x2b
jne 0x18001d5f9
lea esi, [rbp + 2]
mov rax, qword [rbx + 0x48]
or dword [rax + 0xc], 4
mov rcx, qword [rbx]
mov rax, qword [rbx + 0x10]
cmp rcx, rax
je 0x18001d581
cmp byte [rcx], 0x5c
jne 0x18001d57a
lea rdx, [rcx + 1]
cmp rdx, rax
je 0x18001d57a
mov r8d, dword [rbx + 0x80]
test r8b, 8
jne 0x18001d568
movzx eax, byte [rdx]
sub al, 0x28
cmp al, 1
jbe 0x18001d577
test r8b, 0x10
jne 0x18001d57a
movzx eax, byte [rdx]
sub al, 0x7b
test al, 0xfd
jne 0x18001d57a
mov rcx, rdx
lea rax, [rcx + 1]
mov qword [rbx], rax
mov rcx, rbx
call fcn.18001cce0
mov edx, dword [rbx + 0x80]
bt edx, 0xa
jae 0x18001d86d
cmp dword [rbx + 0x7c], 0x3f
jne 0x18001d86d
mov rax, qword [rbx]
xor dil, dil
mov r8, qword [rbx + 0x10]
cmp rax, r8
je 0x18001d5ec
cmp byte [rax], 0x5c
jne 0x18001d5e6
lea rcx, [rax + 1]
cmp rcx, r8
je 0x18001d5e6
test dl, 8
jne 0x18001d5d1
movzx eax, byte [rcx]
sub al, 0x28
cmp al, 1
jbe 0x18001d5e3
mov rax, qword [rbx]
test dl, 0x10
jne 0x18001d5e6
movzx edx, byte [rcx]
cmp dl, 0x7b
je 0x18001d5e3
cmp dl, 0x7d
jne 0x18001d5e6
mov rax, rcx
inc rax
mov qword [rbx], rax
mov rcx, rbx
call fcn.18001cce0
jmp 0x18001d870
cmp eax, 0x3f
jne 0x18001d606
lea ebp, [rax - 0x3e]
jmp 0x18001d530
cmp eax, 0x7b
jne 0x18001d882
mov rcx, qword [rcx]
mov rax, qword [rbx + 0x10]
cmp rcx, rax
je 0x18001d658
cmp byte [rcx], 0x5c
jne 0x18001d651
lea rdx, [rcx + 1]
cmp rdx, rax
je 0x18001d651
mov r8d, dword [rbx + 0x80]
test r8b, 8
jne 0x18001d63f
movzx eax, byte [rdx]
sub al, 0x28
cmp al, 1
jbe 0x18001d64e
test r8b, 0x10
jne 0x18001d651
movzx eax, byte [rdx]
sub al, 0x7b
test al, 0xfd
jne 0x18001d651
mov rcx, rdx
lea rax, [rcx + 1]
mov qword [rbx], rax
mov rcx, rbx
call fcn.18001cce0
mov edi, 0x7fffffff
mov dword [rbx + 0x74], esi
nop dword [rax + rax]
movsx ecx, byte [rbx + 0x78]
lea eax, [rcx - 0x30]
cmp al, 9
ja 0x18001d728
lea r8d, [rcx - 0x30]
cmp r8d, ebp
je 0x18001d728
mov r9d, dword [rbx + 0x74]
mov ecx, 0x7fffffff
sub ecx, r8d
mov eax, 0x66666667
imul ecx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add edx, eax
cmp r9d, edx
jg 0x18001d8c3
lea eax, [r9 + r9*4]
dec edi
lea ecx, [r8 + rax*2]
mov rax, qword [rbx + 0x10]
mov dword [rbx + 0x74], ecx
mov rcx, qword [rbx]
cmp rcx, rax
je 0x18001d708
cmp byte [rcx], 0x5c
jne 0x18001d701
lea rdx, [rcx + 1]
cmp rdx, rax
je 0x18001d701
mov r8d, dword [rbx + 0x80]
test r8b, 8
jne 0x18001d6ef
movzx eax, byte [rdx]
sub al, 0x28
cmp al, 1
jbe 0x18001d6fe
test r8b, 0x10
jne 0x18001d701
movzx eax, byte [rdx]
sub al, 0x7b
test al, 0xfd
jne 0x18001d701
mov rcx, rdx
lea rax, [rcx + 1]
mov qword [rbx], rax
mov rcx, rbx
call fcn.18001cce0
test edi, edi
jne 0x18001d670
cmp dword [rbx + 0x7c], 0x2c
mov esi, dword [rbx + 0x74]
je 0x18001d736
mov ebp, esi
jmp 0x18001d84b
cmp edi, 0x7fffffff
je 0x18001d8a2
jmp 0x18001d718
mov rcx, qword [rbx]
mov rax, qword [rbx + 0x10]
cmp rcx, rax
je 0x18001d77f
cmp byte [rcx], 0x5c
jne 0x18001d778
lea rdx, [rcx + 1]
cmp rdx, rax
je 0x18001d778
mov r8d, dword [rbx + 0x80]
test r8b, 8
jne 0x18001d766
movzx eax, byte [rdx]
sub al, 0x28
cmp al, 1
jbe 0x18001d775
test r8b, 0x10
jne 0x18001d778
movzx eax, byte [rdx]
sub al, 0x7b
test al, 0xfd
jne 0x18001d778
mov rcx, rdx
lea rax, [rcx + 1]
mov qword [rbx], rax
mov rcx, rbx
call fcn.18001cce0
cmp dword [rbx + 0x7c], 0x7d
je 0x18001d851
mov edi, 0x7fffffff
mov dword [rbx + 0x74], 0
nop dword [rax]
movsx ecx, byte [rbx + 0x78]
lea eax, [rcx - 0x30]
cmp al, 9
ja 0x18001d863
lea r8d, [rcx - 0x30]
cmp r8d, ebp
je 0x18001d863
mov r9d, dword [rbx + 0x74]
mov ecx, 0x7fffffff
sub ecx, r8d
mov eax, 0x66666667
imul ecx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add edx, eax
cmp r9d, edx
jg 0x18001d897
lea eax, [r9 + r9*4]
dec edi
lea ecx, [r8 + rax*2]
mov rax, qword [rbx + 0x10]
mov dword [rbx + 0x74], ecx
mov rcx, qword [rbx]
cmp rcx, rax
je 0x18001d838
cmp byte [rcx], 0x5c
jne 0x18001d831
lea rdx, [rcx + 1]
cmp rdx, rax
je 0x18001d831
mov r8d, dword [rbx + 0x80]
test r8b, 8
jne 0x18001d81f
movzx eax, byte [rdx]
sub al, 0x28
cmp al, 1
jbe 0x18001d82e
test r8b, 0x10
jne 0x18001d831
movzx eax, byte [rdx]
sub al, 0x7b
test al, 0xfd
jne 0x18001d831
mov rcx, rdx
lea rax, [rcx + 1]
mov qword [rbx], rax
mov rcx, rbx
call fcn.18001cce0
test edi, edi
jne 0x18001d7a0
mov ebp, dword [rbx + 0x74]
cmp dword [rbx + 0x7c], 0x7d
jne 0x18001d8ad
cmp ebp, 0xffffffff
je 0x18001d530
cmp ebp, esi
jl 0x18001d8ad
jmp 0x18001d530
cmp edi, 0x7fffffff
je 0x18001d8b8
jmp 0x18001d848
mov dil, 1
lea rcx, [rbx + 0x40]
movzx r9d, dil
mov r8d, ebp
mov edx, esi
call fcn.18001d1d0
mov rbx, qword [rsp + 0x30]
mov rbp, qword [rsp + 0x38]
mov rsi, qword [rsp + 0x40]
add rsp, 0x20
pop rdi
ret
mov edx, 7
call fcn.18001e380
int3
mov edx, 7
call fcn.18001e380
int3
mov edx, 7
call fcn.18001e380
int3
mov edx, 7
call fcn.18001e380
int3
mov edx, 7
call fcn.18001e380
int3