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

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff0
push ebx
mov eax, 0x1409c
call fcn.00401cec
call sym.___main
mov dword [esp + 0x14070], 0
mov dword [esp + 0x1408c], 0
lea eax, [esp + 0x1406c]
mov dword [esp + 4], eax
mov dword [esp], 0x403024
call sym._scanf
jmp 0x4016b8
mov dword [esp + 0x14088], 0
lea eax, [esp + 0x9c56]
lea edx, [eax + 0x3e9]
lea eax, [esp + 0x9c56]
mov dword [esp + 8], edx
mov dword [esp + 4], eax
mov dword [esp], str._s__s
call sym._scanf
mov eax, dword [esp + 0x14070]
mov dword [esp + 4], eax
mov dword [esp], str.Case__d:_n
call sym._printf
lea eax, [esp + 0x9c56]
lea edx, [eax + 0x3e9]
lea eax, [esp + 0x9c56]
mov dword [esp + 8], edx
mov dword [esp + 4], eax
mov dword [esp], str._s___s_
call sym._printf
lea eax, [esp + 0x9c56]
mov dword [esp], eax
call sym._end
mov dword [esp + 0x14074], eax
lea eax, [esp + 0x9c56]
add eax, 0x3e9
mov dword [esp], eax
call sym._end
mov dword [esp + 0x14078], eax
mov eax, dword [esp + 0x14078]
mov dword [esp + 8], eax
mov eax, dword [esp + 0x14074]
mov dword [esp + 4], eax
mov dword [esp], str._d__d_n
call sym._printf
mov eax, dword [esp + 0x14074]
mov dword [esp + 0x1407c], eax
mov eax, dword [esp + 0x14078]
mov dword [esp + 0x14080], eax
jmp 0x40151c
mov eax, dword [esp + 0x1407c]
mov al, byte [esp + eax + 0x9c56]
movsx eax, al
lea edx, [eax - 0x30]
mov eax, dword [esp + 0x14080]
mov al, byte [esp + eax + 0xa03f]
movsx eax, al
lea eax, [edx + eax]
sub eax, 0x30
add eax, dword [esp + 0x1408c]
mov dword [esp + 0x14084], eax
cmp dword [esp + 0x14084], 9
jg 0x4014db
mov eax, dword [esp + 0x14088]
mov edx, dword [esp + 0x14084]
mov dword [esp + eax*4 + 0xa428], edx
inc dword [esp + 0x14088]
mov dword [esp + 0x1408c], 0
jmp 0x40150e
mov ecx, dword [esp + 0x14088]
mov eax, dword [esp + 0x14084]
mov edx, 0xa
mov ebx, edx
cdq
idiv ebx
mov eax, edx
mov dword [esp + ecx*4 + 0xa428], eax
inc dword [esp + 0x14088]
mov dword [esp + 0x1408c], 1
dec dword [esp + 0x1407c]
dec dword [esp + 0x14080]
cmp dword [esp + 0x1407c], 0
js 0x401534
cmp dword [esp + 0x14080], 0
jns 0x40146f
cmp dword [esp + 0x1407c], 0
js 0x40158c
jmp 0x401582
mov eax, dword [esp + 0x14088]
mov edx, dword [esp + 0x1407c]
mov dl, byte [esp + edx + 0x9c56]
movsx edx, dl
sub edx, 0x30
add edx, dword [esp + 0x1408c]
mov dword [esp + eax*4 + 0xa428], edx
inc dword [esp + 0x14088]
mov dword [esp + 0x1408c], 0
dec dword [esp + 0x1407c]
cmp dword [esp + 0x1407c], 0
jns 0x401540
cmp dword [esp + 0x14080], 0
js 0x4015e4
jmp 0x4015da
mov eax, dword [esp + 0x14088]
mov edx, dword [esp + 0x14080]
mov dl, byte [esp + edx + 0xa03f]
movsx edx, dl
sub edx, 0x30
add edx, dword [esp + 0x1408c]
mov dword [esp + eax*4 + 0xa428], edx
inc dword [esp + 0x14088]
mov dword [esp + 0x1408c], 0
dec dword [esp + 0x14080]
cmp dword [esp + 0x14080], 0
jns 0x401598
cmp dword [esp + 0x1408c], 1
jne 0x401607
mov eax, dword [esp + 0x14088]
mov dword [esp + eax*4 + 0xa428], 1
inc dword [esp + 0x14088]
mov eax, dword [esp + 0x14088]
mov dword [esp + eax*4 + 0xa428], 0xffffffff
mov dword [esp + 0x1407c], 0
mov eax, dword [esp + 0x1407c]
mov eax, dword [esp + eax*4 + 0xa428]
cmp eax, 0xffffffff
setne al
inc dword [esp + 0x1407c]
test al, al
jne 0x401624
dec dword [esp + 0x1407c]
dec dword [esp + 0x1407c]
jmp 0x401678
mov eax, dword [esp + 0x1407c]
mov eax, dword [esp + eax*4 + 0xa428]
dec dword [esp + 0x1407c]
mov dword [esp + 4], eax
mov dword [esp], 0x403024
call sym._printf
cmp dword [esp + 0x1407c], 0
jns 0x401653
mov eax, dword [esp + 0x1406c]
cmp dword [esp + 0x14070], eax
jge 0x40169e
mov dword [esp], 0xa
call sym._putchar
mov dword [esp + 0x1407c], 0
lea eax, [esp + 0xa428]
mov dword [esp], eax
call sym._free
mov eax, dword [esp + 0x1406c]
cmp dword [esp + 0x14070], eax
setl al
inc dword [esp + 0x14070]
test al, al
jne 0x401389
mov eax, 0
add esp, 0x1409c
pop ebx
leave
ret