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

Disassembly:
push 0x3c
mov eax, 0xa73c648
call fcn.0a706900
mov edx, ecx
mov dword [ebp - 0x2c], edx
mov eax, dword [ebp + 8]
lea edi, [ebp - 0x48]
mov esi, eax
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
mov dword [ebp - 0x3c], eax
mov eax, dword [ebp - 0x48]
xorps xmm1, xmm1
and dword [ebp - 4], 0
mov ecx, eax
sub ecx, dword [ebp - 0x40]
mov dword [ebp - 0x30], ecx
cmp byte [eax], 0x2d
jne 0xa68fec4
inc eax
mov byte [ebp - 0xf], 1
mov dword [ebp - 0x48], eax
jmp 0xa68fec8
mov byte [ebp - 0xf], 0
mov cl, byte [eax]
xorps xmm0, xmm0
and dword [ebp - 0x1c], 0
movlpd qword [ebp - 0x38], xmm0
mov byte [ebp - 0xd], 0
cmp cl, 0x30
jne 0xa68feee
and dword [ebp - 0x28], 0
lea esi, [eax + 1]
mov dword [ebp - 0x48], esi
jmp 0xa68ff98
cmp cl, 0x31
jl 0xa6903d3
cmp cl, 0x39
jg 0xa6903d3
movsx ecx, cl
lea esi, [eax + 1]
mov al, byte [esi]
sub ecx, 0x30
cmp byte [ebp - 0xf], 0
mov dword [ebp - 0x48], esi
mov dword [ebp - 0x28], ecx
je 0xa68ff8c
cmp al, 0x30
jl 0xa68ff98
mov edi, esi
mov edx, esi
cmp al, 0x39
ja 0xa68ff98
cmp ecx, 0xccccccc
jb 0xa68ff33
jne 0xa68ff5a
mov edx, edi
cmp al, 0x38
ja 0xa68ff5a
movsx eax, byte [edx]
lea esi, [edx + 1]
imul ecx, ecx, 0xa
mov dword [ebp - 0x48], esi
add ecx, 0xffffffd0
add ecx, eax
mov al, byte [esi]
inc dword [ebp - 0x1c]
mov dword [ebp - 0x28], ecx
cmp al, 0x30
jl 0xa68ff98
mov edi, esi
mov edx, esi
cmp al, 0x39
jle 0xa68ff23
jmp 0xa68ff98
mov dl, 1
xor eax, eax
mov byte [ebp - 0xd], dl
jmp 0xa68ffa1
cmp ecx, 0x19999999
jb 0xa68ff73
jne 0xa68ff5a
mov edx, edi
cmp al, 0x35
jg 0xa68ff5a
movsx eax, byte [edx]
lea esi, [edx + 1]
imul ecx, ecx, 0xa
mov dword [ebp - 0x48], esi
add ecx, 0xffffffd0
add ecx, eax
inc dword [ebp - 0x1c]
mov al, byte [esi]
mov dword [ebp - 0x28], ecx
cmp al, 0x30
jl 0xa68ff98
mov edx, esi
mov edi, esi
cmp al, 0x39
jle 0xa68ff63
mov ecx, dword [ebp - 0x38]
mov eax, dword [ebp - 0x34]
mov dl, byte [ebp - 0xd]
xor dh, dh
mov dword [ebp - 0x18], ecx
mov dword [ebp - 0x20], eax
mov byte [ebp - 0xe], dh
test dl, dl
je 0xa6900e6
mov dl, byte [esi]
cmp byte [ebp - 0xf], dh
je 0xa690062
cmp dl, 0x30
jl 0xa6900e3
mov edi, esi
cmp dl, 0x39
jg 0xa6900e3
mov dword [ebp - 0x24], edi
cmp eax, 0xccccccc
jb 0xa68fffe
ja 0xa68ffe7
cmp ecx, 0xcccccccc
jb 0xa68fffe
cmp ecx, 0xcccccccc
jne 0xa69004e
cmp eax, 0xccccccc
jne 0xa69004e
mov dword [ebp - 0x24], edi
cmp dl, 0x38
ja 0xa69004e
mov edx, dword [ebp - 0x24]
xor esi, esi
push 0xa
movsx edi, byte [edx]
lea ecx, [edx + 1]
mov dword [ebp - 0x48], ecx
sub edi, 0x30
pop ecx
mul ecx
push 0xa
mov ecx, eax
mov eax, dword [ebp - 0x18]
pop edx
mul edx
add ecx, edx
add edi, eax
adc esi, ecx
inc dword [ebp - 0x1c]
mov eax, esi
mov ecx, edi
mov esi, dword [ebp - 0x48]
mov dword [ebp - 0x18], ecx
mov dword [ebp - 0x20], eax
mov dl, byte [esi]
cmp dl, 0x30
jl 0xa6900e0
mov dword [ebp - 0x24], esi
mov edi, esi
cmp dl, 0x39
jle 0xa68ffd6
jmp 0xa6900e0
mov edx, eax
call fcn.0a707140
mov dh, 1
movaps xmm1, xmm0
mov byte [ebp - 0xe], dh
jmp 0xa6900e3
cmp dl, 0x30
jl 0xa6900e3
mov edi, esi
cmp dl, 0x39
jg 0xa6900e3
mov dword [ebp - 0x24], edi
cmp eax, 0x19999999
jb 0xa690099
ja 0xa690082
cmp ecx, 0x99999999
jb 0xa690099
cmp ecx, 0x99999999
jne 0xa69004e
cmp eax, 0x19999999
jne 0xa69004e
mov dword [ebp - 0x24], edi
cmp dl, 0x35
ja 0xa69004e
mov edx, dword [ebp - 0x24]
xor esi, esi
push 0xa
movsx edi, byte [edx]
lea ecx, [edx + 1]
mov dword [ebp - 0x48], ecx
sub edi, 0x30
pop ecx
mul ecx
push 0xa
mov ecx, eax
mov eax, dword [ebp - 0x18]
pop edx
mul edx
add ecx, edx
add edi, eax
adc esi, ecx
inc dword [ebp - 0x1c]
mov eax, esi
mov ecx, edi
mov esi, dword [ebp - 0x48]
mov dword [ebp - 0x18], ecx
mov dword [ebp - 0x20], eax
mov dl, byte [esi]
cmp dl, 0x30
jl 0xa6900e0
mov dword [ebp - 0x24], esi
mov edi, esi
cmp dl, 0x39
jle 0xa690071
mov dh, byte [ebp - 0xe]
mov dl, byte [ebp - 0xd]
test dh, dh
je 0xa69011e
mov al, byte [esi]
cmp al, 0x30
jl 0xa69011e
mov ecx, esi
cmp al, 0x39
ja 0xa69011b
movsx eax, byte [ecx]
lea esi, [ecx + 1]
mulsd xmm1, qword [0xa597b88]
sub eax, 0x30
mov ecx, esi
movd xmm0, eax
mov al, byte [esi]
cvtdq2pd xmm0, xmm0
addsd xmm1, xmm0
cmp al, 0x30
jge 0xa6900f2
mov dword [ebp - 0x48], esi
mov al, byte [esi]
and dword [ebp - 0x24], 0
cmp al, 0x2e
jne 0xa69012c
inc esi
mov dword [ebp - 0x48], esi
mov edi, esi
cmp al, 0x2e
jne 0xa6901d5
mov al, byte [edi]
cmp al, 0x30
jl 0xa6901fc
cmp al, 0x39
jg 0xa6901fc
test dh, dh
jne 0xa69016b
test dl, dl
je 0xa690158
mov ecx, dword [ebp - 0x18]
mov edx, dword [ebp - 0x20]
jmp 0xa69015d
mov ecx, dword [ebp - 0x28]
xor edx, edx
call fcn.0a707140
movaps xmm1, xmm0
mov byte [ebp - 0xe], 1
jmp 0xa69016e
mov byte [ebp - 0xe], dh
mov cl, byte [esi]
mov eax, edi
mov dword [ebp - 0x34], edi
mov edx, edi
mov esi, edi
mov edi, edx
cmp cl, 0x39
jg 0xa6901d2
mov edx, dword [ebp - 0x1c]
cmp edx, 0x11
jge 0xa6901bd
mulsd xmm1, qword [0xa597b88]
lea edi, [eax + 1]
movsx eax, byte [eax]
mov ecx, edi
sub eax, 0x30
mov dword [ebp - 0x48], ecx
dec dword [ebp - 0x24]
movd xmm0, eax
cvtdq2pd xmm0, xmm0
addsd xmm1, xmm0
comisd xmm1, xmmword [0xa594078]
jbe 0xa6901c5
inc edx
mov dword [ebp - 0x1c], edx
jmp 0xa6901c5
lea edi, [esi + 1]
mov ecx, edi
mov dword [ebp - 0x48], ecx
mov cl, byte [ecx]
mov eax, edi
mov esi, eax
mov edx, eax
cmp cl, 0x30
jge 0xa690179
mov dh, byte [ebp - 0xe]
xor ecx, ecx
cmp byte [edi], 0x65
je 0xa6901e5
cmp byte [edi], 0x45
jne 0xa69030b
lea esi, [edi + 1]
mov dword [ebp - 0x48], esi
test dh, dh
jne 0xa690222
cmp byte [ebp - 0xd], cl
je 0xa690211
mov ecx, dword [ebp - 0x18]
mov edx, dword [ebp - 0x20]
jmp 0xa690216
mov eax, dword [ebp - 0x2c]
sub edi, dword [ebp - 0x40]
mov dword [eax + 0x18], 0xe
mov dword [eax + 0x1c], edi
jmp 0xa6903e0
mov ecx, dword [ebp - 0x28]
xor edx, edx
call fcn.0a707140
movaps xmm1, xmm0
mov byte [ebp - 0xe], 1
xor dl, dl
cmp byte [esi], 0x2b
mov byte [ebp - 0x10], dl
je 0xa690236
cmp byte [esi], 0x2d
jne 0xa69023a
inc dl
mov byte [ebp - 0x10], dl
inc esi
mov dword [ebp - 0x48], esi
mov cl, byte [esi]
mov al, cl
sub al, 0x30
cmp al, 9
ja 0xa6902f6
inc esi
movsx ecx, cl
sub ecx, 0x30
mov dword [ebp - 0x48], esi
mov al, byte [esi]
mov byte [ebp - 0x11], al
test dl, dl
je 0xa6902ba
mov eax, dword [ebp - 0x24]
add eax, 0x7ffffff7
push 0xa
pop edi
cdq
idiv edi
cmp byte [ebp - 0x11], 0x30
mov edi, eax
mov dword [ebp - 0x34], edi
jl 0xa6902e9
mov dl, byte [esi]
cmp dl, 0x39
jg 0xa6902e9
movsx eax, byte [esi]
lea edx, [esi + 1]
imul ecx, ecx, 0xa
mov esi, edx
mov dword [ebp - 0x48], edx
add ecx, 0xffffffd0
add ecx, eax
cmp ecx, edi
jle 0xa6902b1
mov al, byte [edx]
cmp al, 0x30
jl 0xa6902b1
mov edi, edx
cmp al, 0x39
ja 0xa6902ab
lea esi, [edi + 1]
mov edx, esi
mov edi, esi
mov al, byte [edx]
cmp al, 0x30
jge 0xa69029a
mov edi, dword [ebp - 0x34]
mov dword [ebp - 0x48], edx
mov dl, byte [edx]
cmp dl, 0x30
jge 0xa690276
jmp 0xa6902e9
mov edx, dword [ebp - 0x24]
mov edi, 0x134
sub edi, edx
cmp al, 0x30
jl 0xa69030e
cmp al, 0x39
jg 0xa69030b
movsx eax, byte [esi]
lea edx, [esi + 1]
imul ecx, ecx, 0xa
mov dword [ebp - 0x48], edx
add ecx, 0xffffffd0
add ecx, eax
cmp ecx, edi
jg 0xa69033a
mov al, byte [edx]
mov esi, edx
cmp al, 0x30
jge 0xa6902c8
cmp byte [ebp - 0x10], 0
mov edx, dword [ebp - 0x24]
je 0xa69030e
neg ecx
jmp 0xa69030e
mov eax, dword [ebp - 0x2c]
sub esi, dword [ebp - 0x40]
mov dword [eax + 0x18], 0xf
mov dword [eax + 0x1c], esi
jmp 0xa6903e0
mov edx, dword [ebp - 0x24]
mov al, byte [ebp - 0xe]
test al, al
je 0xa69036d
lea eax, [ecx + edx]
push eax
push ecx
push ecx
movsd qword [esp], xmm1
call fcn.0a691210
fstp qword [ebp - 0x38]
movsd xmm0, qword [ebp - 0x38]
add esp, 0xc
comisd xmm0, xmmword [0xa597b98]
jbe 0xa69034f
mov eax, dword [ebp - 0x2c]
mov dword [eax + 0x18], 0xd
mov ecx, dword [ebp - 0x30]
mov dword [eax + 0x1c], ecx
jmp 0xa6903e0
cmp byte [ebp - 0xf], 0
je 0xa69035c
xorps xmm0, xmmword [0xa597bb0]
push ecx
push ecx
mov ecx, dword [ebp + 0xc]
movsd qword [esp], xmm0
call fcn.0a690b42
jmp 0xa6903c0
cmp byte [ebp - 0xd], 0
je 0xa6903a2
cmp byte [ebp - 0xf], 0
je 0xa690392
mov ecx, dword [ebp - 0x18]
mov eax, dword [ebp - 0x20]
neg ecx
adc eax, 0
neg eax
push eax
push ecx
mov ecx, dword [ebp + 0xc]
call fcn.0a690c08
jmp 0xa6903c0
push dword [ebp - 0x20]
mov ecx, dword [ebp + 0xc]
push dword [ebp - 0x18]
call fcn.0a691247
jmp 0xa6903c0
cmp byte [ebp - 0xf], 0
mov ecx, dword [ebp + 0xc]
je 0xa6903b8
mov eax, dword [ebp - 0x28]
neg eax
push eax
call fcn.0a690c3e
jmp 0xa6903c0
push dword [ebp - 0x28]
call fcn.0a69127d
test al, al
jne 0xa6903e0
mov eax, dword [ebp - 0x2c]
mov dword [eax + 0x18], 0x10
jmp 0xa690344
sub eax, dword [ebp - 0x40]
mov dword [edx + 0x18], 3
mov dword [edx + 0x1c], eax
mov edi, dword [ebp + 8]
lea esi, [ebp - 0x48]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
call fcn.0a7068ce
ret 8