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

Disassembly:
mov qword [rsp + 0x10], rbx
push rsi
sub rsp, 0x20
mov r8d, dword [rcx + 0x80]
mov rbx, rcx
bt r8d, 0xe
jae 0x18001b1b2
cmp byte [rcx + 0x78], 0x5c
jne 0x18001b1b2
mov rax, qword [rbx + 0x10]
mov dword [rcx + 0x74], 0x5c
mov rcx, qword [rcx]
cmp rcx, rax
je 0x18001b19a
cmp byte [rcx], 0x5c
jne 0x18001b193
lea rdx, [rcx + 1]
cmp rdx, rax
je 0x18001b193
test r8b, 8
jne 0x18001b181
movzx eax, byte [rdx]
sub al, 0x28
cmp al, 1
jbe 0x18001b190
test r8b, 0x10
jne 0x18001b193
movzx eax, byte [rdx]
sub al, 0x7b
test al, 0xfd
jne 0x18001b193
mov rcx, rdx
lea rax, [rcx + 1]
mov qword [rbx], rax
mov rcx, rbx
call fcn.18001cce0
mov eax, 1
mov rbx, qword [rsp + 0x38]
add rsp, 0x20
pop rsi
ret
bt r8d, 0x11
jae 0x18001b1d4
xor edx, edx
call fcn.18001a880
test al, al
je 0x18001b1d4
mov eax, 2
mov rbx, qword [rsp + 0x38]
add rsp, 0x20
pop rsi
ret
mov qword [rsp + 0x30], rdi
mov edi, 0x7fffffff
mov dword [rbx + 0x74], 0
nop word [rax + rax]
movsx ecx, byte [rbx + 0x78]
lea eax, [rcx - 0x30]
cmp al, 9
ja 0x18001b29b
lea r8d, [rcx - 0x30]
cmp r8d, 0xffffffff
je 0x18001b29b
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 0x18001b2d9
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 0x18001b289
cmp byte [rcx], 0x5c
jne 0x18001b282
lea rdx, [rcx + 1]
cmp rdx, rax
je 0x18001b282
mov r8d, dword [rbx + 0x80]
test r8b, 8
jne 0x18001b270
movzx eax, byte [rdx]
sub al, 0x28
cmp al, 1
jbe 0x18001b27f
test r8b, 0x10
jne 0x18001b282
movzx eax, byte [rdx]
sub al, 0x7b
test al, 0xfd
jne 0x18001b282
mov rcx, rdx
lea rax, [rcx + 1]
mov qword [rbx], rax
mov rcx, rbx
call fcn.18001cce0
test edi, edi
jne 0x18001b1f0
jmp 0x18001b2a3
cmp edi, 0x7fffffff
je 0x18001b2be
cmp dword [rbx + 0x74], 0
jne 0x18001b2e4
mov rdi, qword [rsp + 0x30]
mov eax, 1
mov rbx, qword [rsp + 0x38]
add rsp, 0x20
pop rsi
ret
mov rcx, rbx
call fcn.18001aa10
mov rdi, qword [rsp + 0x30]
mov rbx, qword [rsp + 0x38]
movzx eax, al
add rsp, 0x20
pop rsi
ret
mov edx, 2
call fcn.18001e380
int3
mov edx, 2
call fcn.18001e380
int3
push rbx
sub rsp, 0x20
mov eax, dword [rcx + 0x7c]
mov rbx, rcx
cmp eax, 0x5c
jne 0x18001bd3f
mov rcx, qword [rcx]
mov rax, qword [rbx + 0x10]
cmp rcx, rax
je 0x18001bc5e
cmp byte [rcx], 0x5c
jne 0x18001bc57
lea rdx, [rcx + 1]
cmp rdx, rax
je 0x18001bc57
mov r8d, dword [rbx + 0x80]
test r8b, 8
jne 0x18001bc45
movzx eax, byte [rdx]
sub al, 0x28
cmp al, 1
jbe 0x18001bc54
test r8b, 0x10
jne 0x18001bc57
movzx eax, byte [rdx]
sub al, 0x7b
test al, 0xfd
jne 0x18001bc57
mov rcx, rdx
lea rax, [rcx + 1]
mov qword [rbx], rax
mov rcx, rbx
call fcn.18001cce0
mov r8d, dword [rbx + 0x80]
bt r8d, 0x15
jae 0x18001bc81
mov rcx, rbx
add rsp, 0x20
pop rbx
jmp 0x18001b130
bt r8d, 0x10
jae 0x18001bcc3
movzx eax, byte [rbx + 0x78]
cmp al, 0x66
jne 0x18001bc97
mov eax, 0xc
jmp 0x18001bce2
cmp al, 0x6e
jne 0x18001bca2
mov eax, 0xa
jmp 0x18001bce2
cmp al, 0x72
jne 0x18001bcad
mov eax, 0xd
jmp 0x18001bce2
cmp al, 0x74
jne 0x18001bcb8
mov eax, 9
jmp 0x18001bce2
cmp al, 0x76
jne 0x18001bcc3
mov eax, 0xb
jmp 0x18001bce2
bt r8d, 0xf
jae 0x18001bd2d
movzx eax, byte [rbx + 0x78]
cmp al, 0x61
jne 0x18001bcd9
mov eax, 7
jmp 0x18001bce2
cmp al, 0x62
jne 0x18001bd2d
mov eax, 8
mov dword [rbx + 0x74], eax
mov rcx, qword [rbx]
mov rax, qword [rbx + 0x10]
cmp rcx, rax
je 0x18001be96
cmp byte [rcx], 0x5c
jne 0x18001bd24
lea rdx, [rcx + 1]
cmp rdx, rax
je 0x18001bd24
test r8b, 8
jne 0x18001bd12
movzx eax, byte [rdx]
sub al, 0x28
cmp al, 1
jbe 0x18001bd21
test r8b, 0x10
jne 0x18001bd24
movzx eax, byte [rdx]
sub al, 0x7b
test al, 0xfd
jne 0x18001bd24
mov rcx, rdx
lea rax, [rcx + 1]
jmp 0x18001be93
mov dword [rbx + 0x74], 0x5c
mov eax, 1
add rsp, 0x20
pop rbx
ret
cmp eax, 0x5b
jne 0x18001be39
mov rcx, qword [rcx]
mov rax, qword [rbx + 0x10]
mov qword [rsp + 0x30], rdi
cmp rcx, rax
je 0x18001bd96
cmp byte [rcx], 0x5c
jne 0x18001bd8f
lea rdx, [rcx + 1]
cmp rdx, rax
je 0x18001bd8f
mov r8d, dword [rbx + 0x80]
test r8b, 8
jne 0x18001bd7d
movzx eax, byte [rdx]
sub al, 0x28
cmp al, 1
jbe 0x18001bd8c
test r8b, 0x10
jne 0x18001bd8f
movzx eax, byte [rdx]
sub al, 0x7b
test al, 0xfd
jne 0x18001bd8f
mov rcx, rdx
lea rax, [rcx + 1]
mov qword [rbx], rax
mov rcx, rbx
call fcn.18001cce0
movsxd rdi, dword [rbx + 0x7c]
cmp edi, 0x3d
ja 0x18001be22
movabs rcx, 0x2400400000000000
bt rcx, rdi
jae 0x18001be22
mov rcx, qword [rbx]
mov rax, qword [rbx + 0x10]
cmp rcx, rax
je 0x18001be00
cmp byte [rcx], 0x5c
jne 0x18001bdf9
lea rdx, [rcx + 1]
cmp rdx, rax
je 0x18001bdf9
mov r8d, dword [rbx + 0x80]
test r8b, 8
jne 0x18001bde7
movzx eax, byte [rdx]
sub al, 0x28
cmp al, 1
jbe 0x18001bdf6
test r8b, 0x10
jne 0x18001bdf9
movzx eax, byte [rdx]
sub al, 0x7b
test al, 0xfd
jne 0x18001bdf9
mov rcx, rdx
lea rax, [rcx + 1]
mov qword [rbx], rax
mov rcx, rbx
call fcn.18001cce0
mov edx, edi
mov rcx, rbx
call fcn.18001b9c0
mov rdi, qword [rsp + 0x30]
mov eax, 2
add rsp, 0x20
pop rbx
ret
mov rdi, qword [rsp + 0x30]
mov eax, 1
mov dword [rbx + 0x74], 0x5b
add rsp, 0x20
pop rbx
ret
cmp eax, 0x5d
je 0x18001bea9
cmp eax, 0xffffffff
je 0x18001bea9
movsx eax, byte [rcx + 0x78]
mov rdx, qword [rcx + 0x10]
mov dword [rcx + 0x74], eax
mov rax, qword [rcx]
cmp rax, rdx
je 0x18001be96
cmp byte [rax], 0x5c
jne 0x18001be90
lea rcx, [rax + 1]
cmp rcx, rdx
je 0x18001be90
mov edx, dword [rbx + 0x80]
test dl, 8
jne 0x18001be7b
movzx eax, byte [rcx]
sub al, 0x28
cmp al, 1
jbe 0x18001be8d
mov rax, qword [rbx]
test dl, 0x10
jne 0x18001be90
movzx edx, byte [rcx]
cmp dl, 0x7b
je 0x18001be8d
cmp dl, 0x7d
jne 0x18001be90
mov rax, rcx
inc rax
mov qword [rbx], rax
mov rcx, rbx
call fcn.18001cce0
mov eax, 1
add rsp, 0x20
pop rbx
ret
xor eax, eax
add rsp, 0x20
pop rbx
ret