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

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x5c3bbd
mov eax, dword fs:[0]
push eax
sub esp, 0x50
mov eax, dword [0x67c3c0]
xor eax, ebp
mov dword [ebp - 0x10], eax
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov edx, ecx
mov dword [ebp - 0x50], edx
mov ecx, dword [ebp + 8]
mov eax, dword [ebp + 0xc]
mov dword [ebp - 0x54], eax
mov dword [ebp - 0x14], ecx
mov eax, dword [ecx + 4]
mov edi, dword [ecx]
mov dword [ebp - 0x2c], eax
mov dword [ebp - 0x18], eax
mov ecx, edi
mov dword [ebp - 4], 0
sub ecx, eax
xorps xmm0, xmm0
mov dword [ebp - 0x4c], ecx
xorps xmm2, xmm2
mov cl, byte [edi]
movsd qword [ebp - 0x5c], xmm0
cmp cl, 0x2d
jne 0x44177e
mov cl, byte [edi + 1]
inc edi
mov ch, 1
jmp 0x441780
xor ch, ch
mov byte [ebp - 0x1f], ch
mov eax, edi
movlpd qword [ebp - 0x48], xmm0
mov byte [ebp - 0x1d], 0
mov dword [ebp - 0x34], 0
cmp cl, 0x30
jne 0x4417ac
lea edi, [eax + 1]
mov dword [ebp - 0x38], 0
mov dword [ebp - 0x1c], edi
jmp 0x44187b
cmp cl, 0x31
jl 0x441ea2
cmp cl, 0x39
jg 0x441ea2
lea edi, [eax + 1]
movsx eax, cl
mov cl, byte [edi]
sub eax, 0x30
mov dword [ebp - 0x1c], edi
mov dword [ebp - 0x38], eax
test ch, ch
je 0x441833
cmp cl, 0x30
jl 0x44187b
mov esi, edi
mov edx, edi
cmp cl, 0x39
ja 0x44187b
nop dword [eax]
cmp eax, 0xccccccc
jb 0x441800
jne 0x44182a
mov edx, esi
cmp cl, 0x38
ja 0x44182a
inc dword [ebp - 0x34]
lea ecx, [eax + eax*4]
movsx eax, byte [edx]
lea edi, [edx + 1]
mov dword [ebp - 0x1c], edi
lea eax, [eax + ecx*2]
mov cl, byte [edi]
add eax, 0xffffffd0
mov dword [ebp - 0x38], eax
cmp cl, 0x30
jl 0x44187b
mov esi, edi
mov edx, edi
cmp cl, 0x39
jle 0x4417f0
jmp 0x44187b
mov dl, 1
xor ecx, ecx
mov byte [ebp - 0x1d], dl
jmp 0x441884
cmp cl, 0x30
jl 0x44187b
mov cl, byte [edi]
mov esi, edi
mov edx, edi
cmp cl, 0x39
jg 0x44187b
cmp eax, 0x19999999
jb 0x441853
jne 0x44182a
mov edx, esi
cmp cl, 0x35
jg 0x44182a
inc dword [ebp - 0x34]
lea ecx, [eax + eax*4]
movsx eax, byte [edx]
lea edi, [edx + 1]
mov dword [ebp - 0x1c], edi
lea eax, [eax + ecx*2]
mov cl, byte [edi]
add eax, 0xffffffd0
mov dword [ebp - 0x38], eax
cmp cl, 0x30
jl 0x44187b
mov esi, edi
mov edx, edi
cmp cl, 0x39
jle 0x441843
mov eax, dword [ebp - 0x48]
mov ecx, dword [ebp - 0x44]
mov dl, byte [ebp - 0x1d]
xor dh, dh
mov dword [ebp - 0x24], eax
mov dword [ebp - 0x28], ecx
mov byte [ebp - 0x1e], dh
test dl, dl
je 0x4419c1
mov dl, byte [edi]
cmp byte [ebp - 0x1f], dh
je 0x441940
cmp dl, 0x30
jl 0x4419be
mov esi, edi
cmp dl, 0x39
jg 0x4419be
cmp ecx, 0xccccccc
jb 0x4418dd
ja 0x4418c7
cmp eax, 0xcccccccc
jb 0x4418dd
cmp eax, 0xcccccccc
jne 0x44192a
cmp ecx, 0xccccccc
jne 0x44192a
mov esi, edi
cmp dl, 0x38
ja 0x44192a
shld ecx, eax, 2
lea edi, [esi + 1]
xor edx, edx
movsx esi, byte [esi]
shl eax, 2
sub esi, 0x30
add dword [ebp - 0x24], eax
mov eax, dword [ebp - 0x24]
adc dword [ebp - 0x28], ecx
mov ecx, dword [ebp - 0x28]
shld ecx, eax, 1
mov dword [ebp - 0x1c], edi
add eax, eax
add eax, esi
mov dword [ebp - 0x24], eax
adc edx, ecx
inc dword [ebp - 0x34]
mov ecx, edx
mov dl, byte [edi]
mov dword [ebp - 0x28], ecx
cmp dl, 0x30
jl 0x4419bb
mov esi, edi
cmp dl, 0x39
jle 0x4418b6
jmp 0x4419bb
mov edx, ecx
mov ecx, eax
call fcn.0059a880
mov dh, 1
movaps xmm2, xmm0
mov byte [ebp - 0x1e], dh
jmp 0x4419be
cmp dl, 0x30
jl 0x4419be
mov esi, edi
cmp dl, 0x39
jg 0x4419be
nop dword [eax]
cmp ecx, 0x19999999
jb 0x441977
ja 0x441961
cmp eax, 0x99999999
jb 0x441977
cmp eax, 0x99999999
jne 0x44192a
cmp ecx, 0x19999999
jne 0x44192a
mov esi, edi
cmp dl, 0x35
ja 0x44192a
shld ecx, eax, 2
lea edi, [esi + 1]
xor edx, edx
movsx esi, byte [esi]
shl eax, 2
sub esi, 0x30
add dword [ebp - 0x24], eax
mov eax, dword [ebp - 0x24]
adc dword [ebp - 0x28], ecx
mov ecx, dword [ebp - 0x28]
shld ecx, eax, 1
mov dword [ebp - 0x1c], edi
add eax, eax
add eax, esi
mov dword [ebp - 0x24], eax
adc edx, ecx
inc dword [ebp - 0x34]
mov ecx, edx
mov dl, byte [edi]
mov dword [ebp - 0x28], ecx
cmp dl, 0x30
jl 0x4419bb
mov esi, edi
cmp dl, 0x39
jle 0x441950
mov dh, byte [ebp - 0x1e]
mov dl, byte [ebp - 0x1d]
movsd xmm1, qword [0x5d05f8]
test dh, dh
je 0x4419fd
mov al, byte [edi]
cmp al, 0x30
jl 0x4419fd
mov ecx, edi
cmp al, 0x39
ja 0x4419fd
movsx eax, byte [ecx]
lea edi, [ecx + 1]
sub eax, 0x30
mulsd xmm2, xmm1
mov dword [ebp - 0x1c], edi
mov ecx, edi
movd xmm0, eax
mov al, byte [edi]
cvtdq2pd xmm0, xmm0
addsd xmm2, xmm0
cmp al, 0x30
jge 0x4419d5
mov cl, byte [edi]
mov dword [ebp - 0x3c], 0
cmp cl, 0x2e
jne 0x441a16
inc edi
mov eax, edi
mov dword [ebp - 0x1c], edi
mov dword [ebp - 0x30], eax
jmp 0x441a1b
mov eax, edi
mov dword [ebp - 0x30], edi
cmp cl, 0x2e
jne 0x441af0
mov cl, byte [eax]
cmp cl, 0x30
jl 0x441ad9
cmp cl, 0x39
jg 0x441ad9
mov cl, byte [ebp - 0x1e]
mov esi, dword [ebp - 0x38]
test cl, cl
jne 0x441a75
test dl, dl
je 0x441a4e
mov ecx, dword [ebp - 0x24]
mov edx, dword [ebp - 0x28]
jmp 0x441a52
mov ecx, esi
xor edx, edx
call fcn.0059a880
mov eax, dword [ebp - 0x30]
movaps xmm2, xmm0
movsd xmm1, qword [0x5d05f8]
mov ecx, eax
mov dl, byte [edi]
xorps xmm3, xmm3
mov byte [ebp - 0x1e], 1
mov dword [ebp - 0x30], eax
jmp 0x441a87
mov dl, byte [edi]
xorps xmm3, xmm3
mov byte [ebp - 0x1e], cl
mov ecx, eax
mov dword [ebp - 0x30], eax
jmp 0x441a87
mov eax, dword [ebp - 0x44]
cmp dl, 0x39
jg 0x441af6
mov edx, dword [ebp - 0x34]
cmp edx, 0x11
jge 0x441abf
movsx eax, byte [ecx]
lea edi, [ecx + 1]
dec dword [ebp - 0x3c]
sub eax, 0x30
mulsd xmm2, xmm1
mov dword [ebp - 0x1c], edi
movd xmm0, eax
cvtdq2pd xmm0, xmm0
addsd xmm2, xmm0
comisd xmm2, xmm3
jbe 0x441ac6
inc edx
mov dword [ebp - 0x34], edx
jmp 0x441ac6
mov edi, dword [ebp - 0x30]
inc edi
mov dword [ebp - 0x1c], edi
mov dl, byte [edi]
mov eax, edi
mov ecx, eax
mov dword [ebp - 0x30], ecx
mov dword [ebp - 0x44], ecx
cmp dl, 0x30
jge 0x441a84
jmp 0x441af6
mov edx, dword [ebp - 0x50]
mov esi, dword [ebp - 0x2c]
sub eax, esi
mov dword [edx + 0x18], 0xe
mov dword [edx + 0x1c], eax
jmp 0x441d2a
mov esi, dword [ebp - 0x38]
mov eax, dword [ebp - 0x30]
cmp byte [eax], 0x65
jne 0x441b05
lea edi, [eax + 1]
mov eax, edi
mov dword [ebp - 0x30], eax
jmp 0x441b16
cmp byte [eax], 0x45
jne 0x441c61
lea edi, [eax + 1]
mov eax, edi
mov dword [ebp - 0x30], edi
cmp byte [ebp - 0x1e], 0
jne 0x441b3a
cmp byte [ebp - 0x1d], 0
je 0x441b2a
mov esi, dword [ebp - 0x24]
mov edx, dword [ebp - 0x28]
jmp 0x441b2c
xor edx, edx
mov ecx, esi
call fcn.0059a880
movaps xmm2, xmm0
mov byte [ebp - 0x1e], 1
mov ecx, dword [ebp - 0x30]
xor ah, ah
mov dl, byte [ecx]
cmp dl, 0x2b
je 0x441b4d
cmp dl, 0x2d
jne 0x441b55
mov ah, 1
mov dl, byte [ecx + 1]
lea edi, [ecx + 1]
mov ecx, edi
mov al, dl
sub al, 0x30
cmp al, 9
ja 0x441c4a
lea edi, [ecx + 1]
movsx esi, dl
mov cl, byte [edi]
sub esi, 0x30
mov dword [ebp - 0x1c], edi
mov byte [ebp - 0x3d], cl
test ah, ah
je 0x441bf6
mov ecx, dword [ebp - 0x3c]
mov eax, 0x66666667
add ecx, 0x7ffffff7
imul ecx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add eax, edx
cmp byte [ebp - 0x3d], 0x30
mov dword [ebp - 0x44], eax
jl 0x441bf2
mov al, byte [edi]
mov edx, edi
cmp al, 0x39
jg 0x441bf2
movsx eax, byte [edx]
lea esi, [esi + esi*4]
lea esi, [esi - 0x18]
lea edi, [edx + 1]
mov dword [ebp - 0x1c], edi
mov edx, edi
lea esi, [eax + esi*2]
mov dword [ebp - 0x30], esi
cmp esi, dword [ebp - 0x44]
jle 0x441bec
mov al, byte [edi]
cmp al, 0x30
jl 0x441bec
mov ecx, edi
mov esi, edi
nop dword [eax + eax]
mov edx, ecx
cmp al, 0x39
ja 0x441be9
mov al, byte [esi + 1]
lea edi, [esi + 1]
mov dword [ebp - 0x1c], edi
mov ecx, edi
mov edx, edi
mov esi, edi
cmp al, 0x30
jge 0x441bd0
mov esi, dword [ebp - 0x30]
mov al, byte [edi]
cmp al, 0x30
jge 0x441ba1
neg esi
jmp 0x441c63
mov edx, dword [ebp - 0x3c]
mov eax, 0x134
sub eax, edx
mov dword [ebp - 0x44], eax
cmp cl, 0x30
jl 0x441c66
mov edx, edi
mov al, cl
nop dword [eax]
cmp al, 0x39
jg 0x441c63
movsx eax, byte [edx]
lea esi, [esi + esi*4]
lea esi, [esi - 0x18]
lea edi, [edx + 1]
mov dword [ebp - 0x1c], edi
lea esi, [eax + esi*2]
cmp esi, dword [ebp - 0x44]
jg 0x441c35
mov al, byte [edi]
mov edx, edi
cmp al, 0x30
jge 0x441c10
jmp 0x441c63
mov edx, dword [ebp - 0x50]
mov eax, dword [ebp - 0x4c]
mov dword [edx + 0x18], 0xd
mov dword [edx + 0x1c], eax
jmp 0x441d27
mov edx, dword [ebp - 0x50]
mov esi, dword [ebp - 0x2c]
sub ecx, esi
mov dword [edx + 0x18], 0xf
mov dword [edx + 0x1c], ecx
jmp 0x441d2a
xor esi, esi
mov edx, dword [ebp - 0x3c]
cmp byte [ebp - 0x1e], 0
je 0x441d4f
lea eax, [esi + edx]
cmp eax, 0xfffffecc
jge 0x441ca1
divsd xmm2, qword [0x5d24d8]
add eax, 0x134
cmp eax, 0xfffffecc
jl 0x441cc9
shl eax, 3
mov ecx, 0x5d1698
sub ecx, eax
movaps xmm0, xmm2
divsd xmm0, qword [ecx]
jmp 0x441cc4
lea ecx, [eax*8]
movaps xmm0, xmm2
test eax, eax
js 0x441cb9
mulsd xmm0, qword [ecx + 0x5d1698]
jmp 0x441cc4
mov eax, 0x5d1698
sub eax, ecx
divsd xmm0, qword [eax]
movsd qword [ebp - 0x5c], xmm0
movsd xmm0, qword [ebp - 0x5c]
comisd xmm0, xmmword [0x5d0630]
ja 0x441c35
cmp byte [ebp - 0x1f], 0
je 0x441ce9
xorps xmm0, xmmword [0x5d0670]
mov esi, dword [ebp - 0x54]
movsd qword [ebp - 0x5c], xmm0
mov eax, dword [esi + 0x24]
add eax, 0x10
cmp eax, dword [esi + 0x28]
jbe 0x441d06
push 1
lea ecx, [esi + 0x18]
call fcn.00441380
mov ecx, dword [esi + 0x24]
xorps xmm0, xmm0
movsd xmm3, qword [ebp - 0x5c]
lea eax, [ecx + 0x10]
mov dword [esi + 0x24], eax
mov eax, 0x216
movups xmmword [ecx], xmm0
movsd qword [ecx], xmm3
mov word [ecx + 0xe], ax
mov esi, dword [ebp - 0x2c]
mov eax, dword [ebp + 8]
mov dword [eax], edi
mov dword [eax + 4], esi
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.0059a5ad
mov esp, ebp
pop ebp
ret 8
mov edx, dword [ebp - 0x54]
mov eax, dword [edx + 0x24]
lea esi, [edx + 0x18]
mov ecx, dword [esi + 0x10]
add eax, 0x10
cmp byte [ebp - 0x1d], 0
je 0x441e21
cmp byte [ebp - 0x1f], 0
je 0x441d9a
cmp eax, ecx
jbe 0x441d7b
push 1
mov ecx, esi
call fcn.00441380
mov ecx, dword [esi + 0xc]
mov edx, dword [ebp - 0x28]
lea eax, [ecx + 0x10]
mov dword [esi + 0xc], eax
mov eax, dword [ebp - 0x24]
neg eax
adc edx, 0
neg edx
push edx
push eax
call fcn.00442e20
jmp 0x441d27
cmp eax, ecx
jbe 0x441da7
push 1
mov ecx, esi
call fcn.00441380
mov eax, dword [esi + 0xc]
xorps xmm0, xmm0
mov edx, dword [ebp - 0x28]
mov ecx, dword [ebp - 0x24]
mov dword [ebp - 0x44], eax
add eax, 0x10
mov dword [esi + 0xc], eax
mov eax, 0x116
mov esi, dword [ebp - 0x44]
mov dword [ebp - 0x4c], eax
movups xmmword [esi], xmm0
mov dword [esi], ecx
mov dword [esi + 4], edx
mov word [esi + 0xe], ax
test edx, edx
jl 0x441de9
jg 0x441ddd
test ecx, ecx
jb 0x441de9
mov eax, 0x196
mov word [esi + 0xe], ax
mov dword [ebp - 0x4c], eax
movzx eax, ax
mov dword [ebp - 0x44], eax
xor eax, eax
or eax, edx
jne 0x441e04
mov eax, dword [ebp - 0x4c]
or eax, 0x40
mov word [esi + 0xe], ax
movzx eax, ax
jmp 0x441e07
mov eax, dword [ebp - 0x44]
and ecx, 0x80000000
or ecx, edx
jne 0x441d27
or eax, 0x20
mov word [esi + 0xe], ax
jmp 0x441d27
cmp byte [ebp - 0x1f], 0
je 0x441e68
mov esi, dword [ebp - 0x38]
neg esi
cmp eax, ecx
jbe 0x441e3a
push 1
lea ecx, [edx + 0x18]
call fcn.00441380
mov edx, dword [ebp - 0x54]
xorps xmm0, xmm0
test esi, esi
mov ecx, dword [edx + 0x24]
lea eax, [ecx + 0x10]
mov dword [edx + 0x24], eax
mov eax, esi
cdq
movups xmmword [ecx], xmm0
mov dword [ecx], eax
mov eax, 0xb6
mov dword [ecx + 4], edx
mov edx, 0x1f6
cmovns eax, edx
jmp 0x441d23
cmp eax, ecx
jbe 0x441e75
push 1
mov ecx, esi
call fcn.00441380
mov ecx, dword [esi + 0xc]
xorps xmm0, xmm0
lea eax, [ecx + 0x10]
mov dword [esi + 0xc], eax
mov eax, dword [ebp - 0x38]
movups xmmword [ecx], xmm0
mov dword [ecx], eax
shr eax, 0x1a
not eax
mov dword [ecx + 4], 0
and eax, 0x20
or eax, 0x1d6
jmp 0x441d23
mov esi, dword [ebp - 0x2c]
sub eax, esi
mov dword [edx + 0x18], 3
mov dword [edx + 0x1c], eax
jmp 0x441d2a