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

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0x134
push ebx
xor ebx, ebx
push esi
push edi
mov dword [esp + 0x4c], ebx
mov dword [esp + 0x44], ebx
cmp dword [ebp + 8], ebx
je 0x1e098149
cmp dword [ebp + 0xc], ebx
je 0x1e098149
push dword [ebp + 8]
call fcn.1e020c1f
pop ecx
mov dword [esp + 0x48], eax
cmp eax, ebx
je 0x1e09815a
mov esi, dword [eax + 0xc]
mov eax, dword [eax + 8]
lea edi, [eax + 0x64]
mov dword [esp + 0x10], eax
mov dword [esp + 0x24], edi
mov dword [esp + 0x2c], edi
call fcn.1e00a519
mov dword [esp + 0x34], eax
cmp eax, ebx
je 0x1e0980f6
mov ebx, dword [eax + 0xc]
mov eax, dword [ebp + 0xc]
mov eax, dword [eax + 4]
test dword [eax + 0x54], 0x4000000
mov dword [esp + 0x28], ebx
je 0x1e09770b
push dword [ebp + 0xc]
call fcn.1e01e7d5
and dword [esp + 0x3c], 0
pop ecx
mov dword [esp + 0x3c], eax
jmp 0x1e097718
or dword [esp + 0x3c], 0xffffffff
mov dword [esp + 0x38], 0xfffffffe
mov eax, dword [ebp + 0xc]
mov eax, dword [eax + 4]
cmp dword [eax + 0x38], 0
je 0x1e097f9b
test dword [eax + 0x54], 0x4000000
jne 0x1e097f9b
mov ecx, 0x1e1ec0f8
cmp eax, ecx
je 0x1e097f9b
push ecx
push eax
call fcn.1e009bad
pop ecx
pop ecx
test eax, eax
jne 0x1e097f9b
mov eax, dword [ebp + 0xc]
mov dword [esp + 0x44], eax
jmp 0x1e097f9b
cmp word [esi], 0x25
je 0x1e0977b5
dec edi
mov dword [esp + 0x24], edi
jns 0x1e0977a2
mov edi, dword [esp + 0x10]
add edi, 0x64
add dword [esp + 0x2c], edi
push dword [esp + 0x2c]
lea ebx, [esp + 0x38]
call fcn.1e01bfa8
pop ecx
test eax, eax
jl 0x1e0980e2
mov eax, dword [esp + 0x2c]
mov ecx, dword [esp + 0x34]
mov ecx, dword [ecx + 0xc]
sub eax, edi
dec edi
lea ebx, [ecx + eax*2]
mov dword [esp + 0x24], edi
mov ax, word [esi]
mov word [ebx], ax
inc ebx
inc ebx
inc esi
mov dword [esp + 0x28], ebx
inc esi
jmp 0x1e097f9b
or dword [esp + 0x18], 0xffffffff
or dword [esp + 0x30], 0xffffffff
xor eax, eax
inc esi
inc esi
cmp word [esi], 0x28
mov dword [esp + 0x1c], eax
mov dword [esp + 0xc], eax
mov dword [esp + 0x20], eax
jne 0x1e097880
xor ecx, ecx
inc ecx
cmp dword [esp + 0x44], eax
je 0x1e097ff9
inc esi
inc esi
dec dword [esp + 0x10]
mov edx, esi
dec dword [esp + 0x10]
js 0x1e098010
movzx eax, word [esi]
cmp ax, 0x29
jne 0x1e097804
dec ecx
jmp 0x1e09780b
cmp ax, 0x28
jne 0x1e09780b
inc ecx
inc esi
inc esi
test ecx, ecx
jg 0x1e0977ee
mov eax, esi
sub eax, edx
sar eax, 1
dec eax
push eax
push edx
call fcn.1e081056
mov edi, eax
pop ecx
pop ecx
test edi, edi
je 0x1e0980e2
cmp dword [esp + 0x4c], 0
je 0x1e097846
mov eax, dword [ebp + 0xc]
dec dword [eax]
jne 0x1e097841
mov ecx, dword [eax + 4]
push eax
call dword [ecx + 0x18]
pop ecx
and dword [esp + 0x4c], 0
push edi
push dword [esp + 0x48]
call fcn.1e02c0b7
dec dword [edi]
pop ecx
pop ecx
mov dword [ebp + 0xc], eax
jne 0x1e097861
mov eax, dword [edi + 4]
push edi
call dword [eax + 0x18]
pop ecx
cmp dword [ebp + 0xc], 0
je 0x1e0980e2
or dword [esp + 0x3c], 0xffffffff
mov dword [esp + 0x4c], 1
mov dword [esp + 0x38], 0xfffffffe
dec dword [esp + 0x10]
js 0x1e098032
movzx ecx, word [esi]
movzx eax, cx
inc esi
inc esi
sub eax, 0x20
mov dword [esp + 0x14], ecx
mov dword [esp + 0x40], esi
je 0x1e0978ce
sub eax, 3
je 0x1e0978c7
sub eax, 8
je 0x1e0978c0
dec eax
dec eax
je 0x1e0978b9
sub eax, 3
jne 0x1e0978d9
or dword [esp + 0x1c], 0x10
jmp 0x1e0978d3
or dword [esp + 0x1c], 1
jmp 0x1e0978d3
or dword [esp + 0x1c], 2
jmp 0x1e0978d3
or dword [esp + 0x1c], 8
jmp 0x1e0978d3
or dword [esp + 0x1c], 4
dec dword [esp + 0x10]
jns 0x1e09788a
cmp cx, 0x2a
jne 0x1e097940
lea eax, [esp + 0x38]
push eax
push dword [esp + 0x40]
push dword [ebp + 0xc]
call fcn.1e06859a
add esp, 0xc
mov dword [esp + 0xc], eax
test eax, eax
je 0x1e0980e2
mov ecx, dword [eax + 4]
test dword [ecx + 0x54], 0x800000
je 0x1e09801d
push eax
call fcn.1e00739f
pop ecx
mov dword [esp + 0x18], eax
test eax, eax
jge 0x1e097927
or dword [esp + 0x1c], 1
neg dword [esp + 0x18]
dec dword [esp + 0x10]
js 0x1e098032
movzx eax, word [esi]
inc esi
inc esi
mov dword [esp + 0x14], eax
mov dword [esp + 0x40], esi
jmp 0x1e097993
lea eax, [ecx - 0x30]
cmp ax, 9
ja 0x1e097993
movzx ecx, cx
sub ecx, 0x30
jmp 0x1e097989
movzx eax, word [esi]
inc esi
mov dword [esp + 0x14], eax
inc esi
add eax, 0xffffffd0
mov dword [esp + 0x40], esi
cmp ax, 9
ja 0x1e097993
mov edi, ecx
imul edi, edi, 0xa
mov eax, edi
push 0xa
cdq
pop ebx
idiv ebx
cmp eax, ecx
jne 0x1e098024
movzx eax, word [esp + 0x14]
mov ebx, dword [esp + 0x28]
lea ecx, [eax + edi - 0x30]
dec dword [esp + 0x10]
mov dword [esp + 0x18], ecx
jns 0x1e097951
cmp word [esp + 0x14], 0x2e
jne 0x1e097a7f
and dword [esp + 0x30], 0
dec dword [esp + 0x10]
js 0x1e098032
movzx eax, word [esi]
inc esi
inc esi
mov dword [esp + 0x14], eax
mov dword [esp + 0x40], esi
cmp ax, 0x2a
jne 0x1e097a1e
lea eax, [esp + 0x38]
push eax
push dword [esp + 0x40]
push dword [ebp + 0xc]
call fcn.1e06859a
add esp, 0xc
mov dword [esp + 0xc], eax
test eax, eax
je 0x1e0980e2
mov ecx, dword [eax + 4]
test dword [ecx + 0x54], 0x800000
je 0x1e09801d
push eax
call fcn.1e00739f
pop ecx
mov dword [esp + 0x30], eax
test eax, eax
jge 0x1e097a05
and dword [esp + 0x30], 0
dec dword [esp + 0x10]
js 0x1e098032
movzx eax, word [esi]
inc esi
inc esi
mov dword [esp + 0x14], eax
mov dword [esp + 0x40], esi
jmp 0x1e097a7f
add eax, 0xffffffd0
cmp ax, 9
ja 0x1e097a7f
movzx eax, word [esp + 0x14]
sub eax, 0x30
dec dword [esp + 0x10]
mov dword [esp + 0x30], eax
js 0x1e098032
movzx eax, word [esi]
inc esi
mov dword [esp + 0x14], eax
inc esi
add eax, 0xffffffd0
mov dword [esp + 0x40], esi
cmp ax, 9
ja 0x1e097a7f
mov ecx, dword [esp + 0x30]
imul ecx, ecx, 0xa
mov eax, ecx
push 0xa
cdq
pop edi
idiv edi
cmp eax, dword [esp + 0x30]
jne 0x1e09802b
dec dword [esp + 0x10]
movzx eax, word [esp + 0x14]
lea eax, [eax + ecx - 0x30]
mov dword [esp + 0x30], eax
jns 0x1e097a3d
cmp dword [esp + 0x10], 0
jl 0x1e098032
cmp word [esp + 0x14], 0x68
je 0x1e097aa2
cmp word [esp + 0x14], 0x6c
je 0x1e097aa2
cmp word [esp + 0x14], 0x4c
jne 0x1e097ab9
dec dword [esp + 0x10]
js 0x1e098032
movzx eax, word [esi]
inc esi
inc esi
mov dword [esp + 0x14], eax
mov dword [esp + 0x40], esi
cmp word [esp + 0x14], 0x25
je 0x1e097ae1
lea eax, [esp + 0x38]
push eax
push dword [esp + 0x40]
push dword [ebp + 0xc]
call fcn.1e06859a
add esp, 0xc
mov dword [esp + 0xc], eax
test eax, eax
je 0x1e0980e2
mov ecx, dword [esp + 0x14]
movzx eax, cx
xor edi, edi
cmp eax, 0x67
mov dword [esp + 0x28], 0x20
jg 0x1e097be7
cmp eax, 0x65
jge 0x1e097bc7
cmp eax, 0x25
je 0x1e097bae
cmp eax, 0x44
jle 0x1e09804c
cmp eax, 0x47
jle 0x1e097bc7
cmp eax, 0x58
je 0x1e097b32
cmp eax, 0x63
je 0x1e097b8d
cmp eax, 0x64
jne 0x1e09804c
cmp cx, 0x69
jne 0x1e097b40
mov dword [esp + 0x14], 0x64
push dword [esp + 0xc]
call fcn.1e02975f
add esp, 4
test eax, eax
je 0x1e097fd1
mov eax, dword [esp + 0xc]
mov eax, dword [eax + 4]
test dword [eax + 0x54], 0x1800000
jne 0x1e097cd7
push dword [esp + 0xc]
call fcn.1e01b933
mov edi, eax
pop ecx
test edi, edi
jne 0x1e097ce5
push dword [esp + 0xc]
call fcn.1e01f255
pop ecx
mov edi, eax
jmp 0x1e097cdd
push dword [esp + 0xc]
lea esi, [esp + 0x54]
push esi
call fcn.1e096038
pop ecx
pop ecx
mov dword [esp + 0xc], eax
test eax, eax
jl 0x1e0980e2
jmp 0x1e097db3
push 0x25
pop eax
lea esi, [esp + 0x50]
mov word [esp + 0x50], ax
mov dword [esp + 0xc], 1
jmp 0x1e097db3
push eax
push dword [esp + 0x34]
push dword [esp + 0x24]
push dword [esp + 0x18]
call fcn.1e0960f4
add esp, 0x10
mov dword [esp + 0x20], eax
test eax, eax
jmp 0x1e097d62
cmp eax, 0x69
je 0x1e097b32
cmp eax, 0x6f
je 0x1e097b32
cmp eax, 0x71
jle 0x1e09804c
cmp eax, 0x73
jle 0x1e097c18
cmp eax, 0x75
je 0x1e097b32
cmp eax, 0x78
jmp 0x1e097b2c
mov eax, dword [esp + 0xc]
cmp dword [eax + 4], 0x1e1e0198
jne 0x1e097c33
cmp cx, 0x73
jne 0x1e097c47
inc dword [eax]
mov dword [esp + 0x20], eax
jmp 0x1e097caa
cmp cx, 0x73
jne 0x1e097c47
push eax
call fcn.1e020b2e
mov esi, eax
mov dword [esp + 0x24], esi
jmp 0x1e097c53
push eax
call fcn.1e02f4bc
mov esi, eax
mov dword [esp + 0x24], eax
pop ecx
test esi, esi
je 0x1e0980e2
mov eax, dword [esi + 4]
mov eax, dword [eax + 0x54]
test eax, 0x10000000
jne 0x1e097caa
test eax, 0x8000000
je 0x1e098039
push 0x1e0fc10c
push 0
push dword [esi + 8]
lea eax, [esi + 0x14]
push eax
call fcn.1e020e9c
add esp, 0x10
dec dword [esi]
mov dword [esp + 0xc], eax
jne 0x1e097c9a
mov eax, dword [esi + 4]
push esi
call dword [eax + 0x18]
pop ecx
mov eax, dword [esp + 0xc]
mov dword [esp + 0x20], eax
test eax, eax
je 0x1e0980e2
mov eax, dword [esp + 0x20]
mov esi, dword [eax + 0xc]
mov eax, dword [eax + 8]
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0x30]
test eax, eax
jl 0x1e097db3
cmp dword [esp + 0xc], eax
jle 0x1e097db3
mov dword [esp + 0xc], eax
jmp 0x1e097db3
mov edi, dword [esp + 0xc]
inc dword [edi]
test edi, edi
je 0x1e097fd1
mov eax, dword [edi + 4]
mov eax, dword [eax + 0x54]
test eax, 0x800000
je 0x1e097d2b
movzx eax, word [esp + 0x14]
push edi
push eax
push dword [esp + 0x38]
lea esi, [esp + 0x5c]
push dword [esp + 0x28]
push esi
call fcn.1e082ca7
add esp, 0x14
dec dword [edi]
mov dword [esp + 0xc], eax
jne 0x1e097d1e
mov eax, dword [edi + 4]
push edi
call dword [eax + 0x18]
pop ecx
cmp dword [esp + 0xc], 0
jl 0x1e0980e2
jmp 0x1e097d76
test eax, 0x1000000
je 0x1e097fc5
movzx eax, word [esp + 0x14]
push eax
push dword [esp + 0x34]
push dword [esp + 0x24]
push edi
call fcn.1e080f9c
add esp, 0x10
dec dword [edi]
mov dword [esp + 0x20], eax
jne 0x1e097d5d
mov eax, dword [edi + 4]
push edi
call dword [eax + 0x18]
pop ecx
cmp dword [esp + 0x20], 0
je 0x1e0980e2
mov eax, dword [esp + 0x20]
mov esi, dword [eax + 0xc]
mov eax, dword [eax + 8]
mov dword [esp + 0xc], eax
test byte [esp + 0x1c], 0x10
je 0x1e097d85
mov dword [esp + 0x28], 0x30
movzx eax, word [esi]
cmp ax, 0x2d
je 0x1e097daa
push 0x2b
pop edi
cmp ax, di
je 0x1e097daa
test byte [esp + 0x1c], 2
jne 0x1e097db3
movsx edi, byte [esp + 0x1c]
and edi, 4
shl edi, 3
jmp 0x1e097db3
inc esi
inc esi
dec dword [esp + 0xc]
movzx edi, ax
mov eax, dword [esp + 0xc]
cmp dword [esp + 0x18], eax
jge 0x1e097dc1
mov dword [esp + 0x18], eax
mov ecx, dword [esp + 0x24]
xor eax, eax
test di, di
setne al
mov edx, ecx
sub edx, eax
cmp edx, dword [esp + 0x18]
jge 0x1e097e1d
sub dword [esp + 0x2c], ecx
mov eax, dword [esp + 0x10]
mov ecx, dword [esp + 0x18]
lea eax, [ecx + eax + 0x64]
add dword [esp + 0x2c], eax
mov dword [esp + 0x24], eax
js 0x1e098083
push dword [esp + 0x2c]
lea ebx, [esp + 0x38]
call fcn.1e01bfa8
pop ecx
test eax, eax
jl 0x1e09809e
mov eax, dword [esp + 0x2c]
mov ecx, dword [esp + 0x34]
sub eax, dword [esp + 0x24]
mov ecx, dword [ecx + 0xc]
lea ebx, [ecx + eax*2]
push 2
pop ecx
test di, di
je 0x1e097e44
cmp word [esp + 0x28], 0x20
je 0x1e097e32
mov word [ebx], di
add ebx, ecx
mov eax, dword [esp + 0x18]
dec dword [esp + 0x24]
cmp eax, dword [esp + 0xc]
jle 0x1e097e44
dec dword [esp + 0x18]
mov eax, dword [esp + 0x1c]
and eax, 8
je 0x1e097e8c
cmp word [esp + 0x14], 0x78
je 0x1e097e5d
cmp word [esp + 0x14], 0x58
jne 0x1e097e8c
cmp word [esp + 0x28], 0x20
je 0x1e097e79
mov dx, word [esi]
mov word [ebx], dx
add esi, ecx
mov dx, word [esi]
add ebx, ecx
mov word [ebx], dx
add ebx, ecx
add esi, ecx
sub dword [esp + 0x24], ecx
sub dword [esp + 0x18], ecx
jns 0x1e097e88
and dword [esp + 0x18], 0
sub dword [esp + 0xc], ecx
mov ecx, dword [esp + 0xc]
cmp dword [esp + 0x18], ecx
jle 0x1e097eb5
test byte [esp + 0x1c], 1
jne 0x1e097eb5
dec dword [esp + 0x24]
mov dx, word [esp + 0x28]
mov word [ebx], dx
inc ebx
inc ebx
dec dword [esp + 0x18]
cmp dword [esp + 0x18], ecx
jg 0x1e097e9d
cmp word [esp + 0x28], 0x20
jne 0x1e097ef2
test di, di
je 0x1e097ec7
mov word [ebx], di
inc ebx
inc ebx
test eax, eax
je 0x1e097ef2
cmp word [esp + 0x14], 0x78
je 0x1e097edb
cmp word [esp + 0x14], 0x58
jne 0x1e097ef2
mov ax, word [esi]
mov word [ebx], ax
push 2
pop eax
add esi, eax
mov dx, word [esi]
add ebx, eax
mov word [ebx], dx
add ebx, eax
add esi, eax
lea edi, [ecx + ecx]
cmp edi, 0x10
jb 0x1e097f07
push edi
push esi
push ebx
call fcn.1e036720
add esp, 0xc
jmp 0x1e097f1a
test edi, edi
jbe 0x1e097f1a
mov eax, ebx
sub esi, ebx
mov ecx, edi
mov dl, byte [esi + eax]
mov byte [eax], dl
inc eax
dec ecx
jne 0x1e097f11
mov eax, dword [esp + 0xc]
sub dword [esp + 0x24], eax
add ebx, edi
dec dword [esp + 0x18]
cmp dword [esp + 0x18], eax
mov dword [esp + 0x28], ebx
jl 0x1e097f62
mov eax, dword [esp + 0x18]
sub eax, dword [esp + 0xc]
push 0x20
inc eax
mov edx, eax
pop eax
movzx esi, ax
mov eax, esi
shl esi, 0x10
or eax, esi
mov ecx, edx
shr ecx, 1
mov edi, ebx
rep stosd dword es:[edi], eax
adc ecx, ecx
sub dword [esp + 0x24], edx
lea ebx, [ebx + edx*2]
rep stosw word es:[edi], ax
mov dword [esp + 0x28], ebx
cmp dword [esp + 0x44], 0
je 0x1e097f7f
mov eax, dword [esp + 0x3c]
cmp dword [esp + 0x38], eax
jge 0x1e097f7f
cmp word [esp + 0x14], 0x25
jne 0x1e0980b9
mov eax, dword [esp + 0x20]
test eax, eax
je 0x1e097f93
dec dword [eax]
jne 0x1e097f93
mov ecx, dword [eax + 4]
push eax
call dword [ecx + 0x18]
pop ecx
mov esi, dword [esp + 0x40]
mov edi, dword [esp + 0x24]
dec dword [esp + 0x10]
jns 0x1e09775f
mov eax, dword [esp + 0x3c]
cmp dword [esp + 0x38], eax
jge 0x1e0980cd
cmp dword [esp + 0x44], 0
jne 0x1e0980cd
push 0x1e1b5dd4
jmp 0x1e097ffe
dec dword [edi]
jne 0x1e097fd1
mov eax, dword [edi + 4]
push edi
call dword [eax + 0x18]
pop ecx
mov eax, dword [esp + 0xc]
mov eax, dword [eax + 4]
push dword [eax + 0xc]
movsx eax, byte [esp + 0x18]
push eax
push 0x1e1b5d6c
push dword [0x1e1ed23c]
call fcn.1e007611
add esp, 0x10
jmp 0x1e0980e2
push 0x1e1b5cd4
push dword [0x1e1ed23c]
call fcn.1e0023ee
pop ecx
pop ecx
jmp 0x1e0980e2
push 0x1e1b5cf0
push dword [0x1e1ef5d4]
jmp 0x1e098004
push 0x1e1b5d08
jmp 0x1e097ffe
push 0x1e1b5d14
jmp 0x1e098015
push 0x1e1b5d24
jmp 0x1e098015
push 0x1e1b5d34
jmp 0x1e098015
dec dword [esi]
jne 0x1e098045
mov eax, dword [esi + 4]
push esi
call dword [eax + 0x18]
pop ecx
push 0x1e1b5d48
jmp 0x1e097ffe
lea eax, [ecx - 0x1f]
cmp ax, 0x5f
ja 0x1e09805a
movsx eax, cl
jmp 0x1e09805d
push 0x3f
pop eax
mov edx, dword [esp + 0x48]
sub esi, dword [edx + 0xc]
movzx ecx, cx
dec esi
dec esi
sar esi, 1
push esi
push ecx
push eax
push 0x1e1b5d9c
push dword [0x1e1ef5d4]
call fcn.1e007611
add esp, 0x14
jmp 0x1e0980e2
mov eax, dword [esp + 0x20]
test eax, eax
je 0x1e098097
dec dword [eax]
jne 0x1e098097
mov ecx, dword [eax + 4]
push eax
call dword [ecx + 0x18]
pop ecx
call fcn.1e0862a1
jmp 0x1e0980e2
cmp dword [esp + 0x20], 0
je 0x1e0980e2
mov eax, dword [esp + 0x20]
dec dword [eax]
jne 0x1e0980e2
mov ecx, dword [eax + 4]
push eax
call dword [ecx + 0x18]
jmp 0x1e09800a
push 0x1e1b5dd4
push dword [0x1e1ed23c]
call fcn.1e0023ee
pop ecx
pop ecx
jmp 0x1e09809e
mov eax, dword [esp + 0x2c]
sub eax, edi
push eax
lea ebx, [esp + 0x38]
call fcn.1e01bfa8
pop ecx
test eax, eax
jge 0x1e09811d
mov eax, dword [esp + 0x34]
test eax, eax
je 0x1e0980f6
dec dword [eax]
jne 0x1e0980f6
mov ecx, dword [eax + 4]
push eax
call dword [ecx + 0x18]
pop ecx
mov eax, dword [esp + 0x48]
dec dword [eax]
mov esi, dword [ebp + 0xc]
jne 0x1e098109
mov ecx, dword [eax + 4]
push eax
call dword [ecx + 0x18]
pop ecx
cmp dword [esp + 0x4c], 0
je 0x1e09815a
dec dword [esi]
jne 0x1e09815a
mov eax, dword [esi + 4]
push esi
call dword [eax + 0x18]
jmp 0x1e098159
cmp dword [esp + 0x4c], 0
je 0x1e098133
mov eax, dword [ebp + 0xc]
dec dword [eax]
jne 0x1e098133
mov ecx, dword [eax + 4]
push eax
call dword [ecx + 0x18]
pop ecx
mov eax, dword [esp + 0x48]
dec dword [eax]
jne 0x1e098143
mov ecx, dword [eax + 4]
push eax
call dword [ecx + 0x18]
pop ecx
mov eax, dword [esp + 0x34]
jmp 0x1e09815c
push 0x2037
push 0x1e1b7c98
call fcn.1e089088
pop ecx
pop ecx
xor eax, eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret