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

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x1017c790
mov eax, dword fs:[0]
push eax
sub esp, 0x150
mov eax, dword [0x101e6040]
xor eax, ebp
mov dword [ebp - 0x14], eax
push ebx
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov dword [ebp - 0x140], ecx
mov edi, dword [ebp + 8]
mov esi, edi
mov dword [ebp - 0x13c], edi
lea edx, [esi + 2]
mov ax, word [esi]
add esi, 2
test ax, ax
jne 0x10018ea2
sub esi, edx
mov dword [ebp - 0x144], 0
mov ecx, edi
sar esi, 1
mov dword [ebp - 0x134], esi
mov dword [ebp - 0x154], 0
lea edx, [ecx + 2]
mov ax, word [ecx]
add ecx, 2
test ax, ax
jne 0x10018ed0
sub ecx, edx
sar ecx, 1
lea eax, [ecx + 0x65]
cmp eax, 0x208
jae 0x10018ef0
mov eax, 0x208
jmp 0x10018f07
mov ecx, edi
lea edx, [ecx + 2]
mov ax, word [ecx]
add ecx, 2
test ax, ax
jne 0x10018ef5
sub ecx, edx
sar ecx, 1
lea eax, [ecx + 0x65]
xorps xmm0, xmm0
mov dword [ebp - 0x124], 0
xor ebx, ebx
movq qword [ebp - 0x12c], xmm0
mov dword [ebp - 0x14c], eax
mov dword [ebp - 0x128], ebx
mov dword [ebp - 0x124], ebx
mov dword [ebp - method.CArkAutoPtr_unsigned_char_.virtual_0], vtable.CArkAutoByte.0
add eax, eax
mov dword [ebp - 4], ebx
cmp eax, 0x7fffffff
jae 0x10018f68
push 1
push eax
call fcn.1015c282
mov ecx, dword [ebp - 0x14c]
mov ebx, eax
add esp, 8
mov dword [ebp - 0x128], ebx
lea eax, [ecx + ecx]
mov dword [ebp - 0x124], eax
test ebx, ebx
je case.default.0x10019255
push edi
push ebx
call dword [sym.imp.KERNEL32.dll_lstrcpyW]
cmp esi, 5
jb case.default.0x10019255
mov edx, dword [ebp - 0x140]
lea eax, [esi - 3]
movzx edi, word [ebx + eax*2]
lea eax, [ebx + eax*2]
mov dword [ebp - 0x138], eax
mov dword [ebp - 0x130], edi
mov edx, dword [edx + 0x5c]
movzx ecx, di
cmp edx, 7
jne 0x10018fd4
cmp edi, 0x65
jne 0x10018fbc
mov dword [ebp - 0x130], 0x72
jmp 0x100191e9
cmp edi, 0x45
jne 0x100191e9
mov dword [ebp - 0x130], 0x52
jmp 0x100191e9
mov esi, ecx
cmp edx, 2
jne 0x1001903d
cmp ecx, 0x6a
jne 0x10018fef
mov dword [ebp - 0x130], 0x7a
jmp 0x100191e3
cmp ecx, 0x4a
jne 0x10019003
mov dword [ebp - 0x130], 0x5a
jmp 0x100191e3
cmp ecx, 0x6c
jne 0x10019017
mov dword [ebp - 0x130], 0x7a
jmp 0x100191e3
mov esi, dword [ebp - 0x134]
mov edi, ecx
mov dword [ebp - 0x130], edi
cmp ecx, 0x4c
jne 0x100191e9
mov dword [ebp - 0x130], 0x5a
jmp 0x100191e9
mov ecx, esi
cmp edx, 3
jne 0x1001907e
cmp esi, 0x69
jne 0x10019058
mov dword [ebp - 0x130], 0x78
jmp 0x100191e3
mov edi, esi
cmp esi, 0x49
mov esi, dword [ebp - 0x134]
mov dword [ebp - 0x130], edi
jne 0x100191e9
mov dword [ebp - 0x130], 0x58
jmp 0x100191e9
mov eax, ecx
mov esi, ecx
mov dword [ebp - 0x120], eax
mov dword [ebp - 0x130], esi
movzx ecx, si
cmp edx, 6
je 0x100190ad
mov eax, ecx
mov dword [ebp - 0x120], eax
mov dword [ebp - 0x130], eax
cmp edx, 8
jne 0x100191e3
push ebx
call dword [sym.imp.KERNEL32.dll_lstrlenW]
mov edi, ebx
lea ecx, [eax - 1]
lea ecx, [ebx + ecx*2]
cmp ecx, edi
jb 0x100190db
movzx eax, word [ecx]
mov edx, eax
cmp eax, 0x5c
je 0x100190d8
cmp edx, 0x2f
je 0x100190d8
sub ecx, 2
cmp ecx, ebx
jae 0x100190c0
jmp 0x100190db
lea edi, [ecx + 2]
mov ecx, edi
lea edx, [ecx + 2]
mov ax, word [ecx]
add ecx, 2
test ax, ax
jne 0x100190e0
sub ecx, edx
sar ecx, 1
lea ebx, [ecx - 1]
lea ebx, [edi + ebx*2]
movzx eax, word [ebx]
mov edx, ebx
mov ecx, eax
mov dword [ebp - 0x144], edx
add eax, 0xffffffd0
cmp eax, 9
jbe 0x10019113
cmp ebx, edi
jbe 0x10019113
sub ebx, 2
jmp 0x100190f5
mov esi, ebx
mov eax, ecx
movzx eax, ax
add eax, 0xffffffd0
cmp eax, 9
ja 0x1001912f
cmp esi, edi
jbe 0x1001919d
movzx eax, word [esi - 2]
sub esi, 2
jmp 0x10019117
cmp esi, edi
jbe 0x1001919d
movzx eax, word [esi]
mov ecx, eax
cmp eax, 0x2e
je 0x1001919d
lea eax, [ecx - 0x30]
cmp eax, 9
jbe 0x1001914e
sub esi, 2
cmp esi, edi
ja 0x10019133
jmp 0x100191a5
test edi, edi
je 0x1001917e
push edi
call dword [sym.imp.KERNEL32.dll_lstrlenW]
lea ecx, [eax - 1]
lea ecx, [edi + ecx*2]
cmp ecx, edi
jb 0x1001917e
movzx eax, word [ecx]
mov edx, eax
cmp eax, 0x5c
je 0x1001917b
cmp edx, 0x2f
je 0x1001917b
sub ecx, 2
cmp ecx, edi
jae 0x10019163
jmp 0x1001917e
lea edi, [ecx + 2]
push 0x2e
push edi
call fcn.1015385e
add esp, 8
test eax, eax
je 0x1001919d
cmp eax, esi
jae 0x1001919d
mov ebx, esi
mov edx, ebx
mov dword [ebp - 0x144], edx
jmp 0x100191a5
mov edx, ebx
mov dword [ebp - 0x144], ebx
add ebx, 0xfffffffe
mov ecx, 1
mov dword [ebp - 0x154], ecx
cmp word [ebx], 0x30
jne 0x100191dd
mov eax, dword [ebp - 0x128]
nop
cmp ebx, eax
jb 0x100191d1
sub ebx, 2
inc ecx
sub edx, 2
cmp word [ebx], 0x30
je 0x100191c0
mov dword [ebp - 0x154], ecx
mov dword [ebp - 0x144], edx
mov ebx, dword [ebp - 0x128]
mov esi, dword [ebp - 0x134]
push 0x2e
push dword [ebp - 0x13c]
call fcn.101532cb
add esp, 8
mov dword [ebp - 0x148], eax
test eax, eax
je 0x10019221
mov edx, eax
lea ecx, [edx + 2]
nop dword [eax + eax]
mov ax, word [edx]
add edx, 2
test ax, ax
jne 0x10019210
sub edx, ecx
sar edx, 1
jmp 0x10019223
xor edx, edx
mov eax, dword [ebp + 0x10]
mov edi, dword [ebp + 0xc]
mov dword [ebp - 0x120], edx
mov dword [ebp - 0x150], 0
cmp edi, dword [eax + 4]
jge 0x10019706
mov ecx, dword [ebp - 0x140]
mov eax, dword [ecx + 0x5c]
dec eax
cmp eax, 0x12
ja case.default.0x10019255
jmp dword [eax*4 + 0x10019764]
push edi
push str._03d
push 0x64
push dword [ebp - 0x138]
call fcn.10019f50
add esp, 0x10
jmp 0x100195c8
mov eax, dword [ebp - 0x130]
push edi
movzx eax, ax
push eax
push str._c_02d
push 0x64
push dword [ebp - 0x138]
jmp 0x100195c0
mov eax, 0x51eb851f
mov ecx, edi
imul edi
sar edx, 5
mov esi, edx
shr esi, 0x1f
add esi, edx
imul eax, esi, 0x64
sub ecx, eax
mov eax, dword [ebp - 0x130]
push ecx
movzx eax, ax
add eax, esi
push eax
push str._c_02d
push 0x64
push dword [ebp - 0x138]
jmp 0x100195c0
mov eax, esi
sub eax, edx
dec eax
push edi
push str._d.egg
push 0x10
lea esi, [ebx + eax*2]
push esi
call fcn.10019f50
add esp, 0x10
mov ecx, ebx
call fcn.1000caf0
test eax, eax
jne 0x100195c8
push dword [ebp - 0x13c]
push ebx
call dword [sym.imp.KERNEL32.dll_lstrcpyW]
push dword [ebp - 0x148]
push edi
push str._d_ls
push 0xc
push esi
jmp 0x100195c0
mov ecx, dword [ebp - 0x154]
mov esi, edi
mov ebx, ecx
test ecx, ecx
je 0x10019359
mov eax, dword [ebp - 0x144]
lea edi, [ecx - 1]
lea edi, [eax + edi*2]
nop
mov eax, 0x66666667
lea edi, [edi - 2]
imul esi
sar edx, 2
mov ecx, edx
shr ecx, 0x1f
add ecx, edx
lea eax, [ecx + ecx*4]
add eax, eax
sub esi, eax
add esi, 0x30
mov word [edi + 2], si
mov esi, ecx
sub ebx, 1
jne 0x10019330
mov ebx, dword [ebp - 0x128]
mov ecx, ebx
lea edx, [ecx + 2]
mov ax, word [ecx]
add ecx, 2
test ax, ax
jne 0x10019364
sub ecx, edx
sar ecx, 1
cmp ecx, 5
jb 0x100195c8
lea esi, [ebx + ecx*2]
mov ecx, 0x101c7678
lea eax, [esi - 8]
mov dx, word [eax]
cmp dx, word [ecx]
jne 0x100193ad
test dx, dx
je 0x100193a9
mov dx, word [eax + 2]
cmp dx, word [ecx + 2]
jne 0x100193ad
add eax, 4
add ecx, 4
test dx, dx
jne 0x10019387
xor eax, eax
jmp 0x100193b2
sbb eax, eax
or eax, 1
test eax, eax
jne 0x100193d1
movq xmm0, qword [0x101c7684]
movq qword [esi - 8], xmm0
mov ax, word [0x101c768c]
mov word [esi], ax
jmp 0x100195c8
mov ecx, 0x101c7690
lea eax, [esi - 8]
nop dword [eax]
mov dx, word [eax]
cmp dx, word [ecx]
jne 0x10019406
test dx, dx
je 0x10019402
mov dx, word [eax + 2]
cmp dx, word [ecx + 2]
jne 0x10019406
add eax, 4
add ecx, 4
test dx, dx
jne 0x100193e0
xor eax, eax
jmp 0x1001940b
sbb eax, eax
or eax, 1
test eax, eax
jne 0x100195c8
movq xmm0, qword [0x101c769c]
movq qword [esi - 8], xmm0
mov ax, word [0x101c76a4]
mov word [esi], ax
jmp 0x100195c8
lea eax, [edi + 1]
push eax
jmp 0x1001925d
push edi
push str._02d
lea eax, [esi - 2]
lea eax, [ebx + eax*2]
push 0x64
push eax
call fcn.10019f50
add esp, 0x10
jmp 0x100195c8
cmp dword [ebp - 0x150], 0x190
jg case.default.0x10019255
lea eax, [ebp - 0x11c]
push eax
call fcn.10019cd0
test eax, eax
je 0x1001950d
cmp word [ebx], 0
mov esi, ebx
je 0x100194ab
nop
add esi, 2
cmp word [esi], 0
jne 0x10019480
cmp esi, ebx
jbe 0x100194ab
nop dword [eax]
movzx eax, word [esi]
mov ecx, eax
cmp eax, 0x5c
je 0x100194a8
cmp ecx, 0x2f
je 0x100194a8
sub esi, 2
cmp esi, ebx
ja 0x10019490
jmp 0x100194ab
add esi, 2
mov edx, dword [ebp - 0x140]
lea ecx, [ebp - 0x11c]
mov eax, esi
sub eax, ebx
mov ebx, dword [ebp - 0x14c]
sar eax, 1
mov edx, dword [edx + 0x58]
sub ebx, eax
push 0
call fcn.10001d40
mov edi, eax
add esp, 4
test edi, edi
je 0x10019507
push ebx
push edi
push esi
call fcn.10160e29
mov ecx, dword [ebp - 0x14c]
add esp, 0xc
mov ebx, dword [ebp - 0x128]
xor edx, edx
lea eax, [ecx + ecx]
push edi
mov word [eax + ebx - 2], dx
call fcn.10154f5a
add esp, 4
jmp 0x100195c8
mov ebx, dword [ebp - 0x128]
xor eax, eax
mov word [ebx], ax
jmp 0x100195c8
push dword [ebp - 0x148]
lea eax, [edi + 1]
push eax
mov eax, esi
push str._02d_ls
sub eax, edx
push 0xc
add eax, 0xfffffffe
jmp 0x100195bc
push dword [ebp - 0x148]
lea eax, [edi + 1]
push eax
mov eax, esi
push str._03d_ls
sub eax, edx
push 0xc
add eax, 0xfffffffd
jmp 0x100195bc
push edi
push str._02d
lea eax, [esi - 2]
lea eax, [ebx + eax*2]
push 0xc
push eax
call fcn.10019f50
add esp, 0x10
jmp 0x100195c8
cmp edi, 0x64
mov ecx, str.c_02d
push edi
mov eax, str._03d
cmovl eax, ecx
push eax
lea eax, [esi - 3]
lea eax, [ebx + eax*2]
push 0x64
push eax
call fcn.10019f50
add esp, 0x10
jmp 0x100195c8
push dword [ebp - 0x148]
lea eax, [edi + 2]
push eax
mov eax, esi
sub eax, edx
push str._02d_ls
add eax, 0xfffffffe
jmp 0x100195ba
push dword [ebp - 0x148]
lea eax, [edi + 2]
push eax
mov eax, esi
sub eax, edx
push str._06d_ls
add eax, 0xfffffffa
push 0x64
lea eax, [ebx + eax*2]
push eax
call fcn.10019f50
add esp, 0x14
mov esi, dword [ebp - 0x13c]
push esi
push ebx
call fcn.1015fdf3
add esp, 8
test eax, eax
je 0x1001970c
mov ecx, ebx
call fcn.1000caf0
test eax, eax
je 0x1001970c
mov edi, dword [ebp - 0x140]
mov ecx, dword [edi + 0x54]
test ecx, ecx
je 0x10019617
mov eax, dword [ecx]
lea esi, [edi + 0x6c]
push esi
push dword [ebp - 0x150]
push ebx
push 0
push ecx
call dword [eax]
cmp dword [esi], 0
jne case.default.0x10019255
push 0x58
call fcn.1015144f
add esp, 4
mov esi, eax
mov dword [ebp - 0x158], esi
push 0x58
push 0
push esi
call fcn.10152e30
add esp, 8
mov ecx, esi
push dword [edi + 0x68]
call fcn.1000d770
mov esi, eax
push 1
push ebx
mov ecx, esi
mov edx, dword [esi]
call dword [edx + 0x14]
mov edx, dword [esi]
test eax, eax
je 0x10019688
push esi
call dword [edx + 4]
push esi
mov ecx, edi
call fcn.10018150
mov edi, dword [ebp + 0xc]
mov eax, dword [ebp + 0x10]
inc edi
inc dword [ebp - 0x150]
mov dword [ebp + 0xc], edi
cmp edi, dword [eax + 4]
jge 0x10019706
mov edx, dword [ebp - 0x120]
mov esi, dword [ebp - 0x134]
jmp 0x10019242
mov ecx, esi
call dword [edx + 0x4c]
mov edx, dword [esi]
mov ecx, esi
push 1
mov edi, eax
call dword [edx + 0xc]
mov esi, dword [ebp - 0x140]
lea edx, [ebp - 0x120]
mov dword [ebp - 0x120], 0
push edx
mov ecx, dword [esi + 0x54]
mov eax, dword [ecx]
cmp edi, 4
jne 0x100196f4
push 0
push 0
push edi
push ecx
call dword [eax + 0x14]
mov dword [esi + 0x70], edi
xor esi, esi
test ebx, ebx
je 0x100196d4
push ebx
call fcn.10154f5a
add esp, 4
mov eax, esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 0x14]
xor ecx, ebp
call fcn.10151433
mov esp, ebp
pop ebp
ret 0xc
push 1
push 0
push edi
push ecx
call dword [eax + 0x14]
cmp dword [ebp - 0x120], 0
jne case.default.0x10019255
mov esi, dword [ebp - 0x13c]
mov edi, dword [ebp - 0x140]
mov ecx, dword [edi + 0x20]
test ecx, ecx
je case.default.0x10019255
mov eax, dword [edi + 0x5c]
cmp eax, 4
je 0x10019726
cmp eax, 0xa
jne 0x1001974c
mov eax, dword [edi + 0xc]
lea edx, [eax + ecx*4]
mov ecx, dword [edx - 4]
mov eax, dword [ecx + 0x18]
add dword [edi + 0x38], eax
mov eax, dword [ecx + 0x1c]
adc dword [edi + 0x3c], eax
mov eax, dword [edx - 4]
mov dword [eax + 0x18], 0
mov dword [eax + 0x1c], 0
push esi
call fcn.101565d5
add esp, 4
mov dword [edi + 0x48], eax
mov esi, 1
jmp 0x100196c7