@l = qw(
-1 43 -2 1 -84 33 45 1 5
-12 -3 13 -82 48 21 13
-6 -76 40 25 2 8 -6 13 -104);
####
74 117 115 116 32
65 110 111 116 104 101 114 32
80 101 114 108 32
72 97 99 107 101 114 10
##
##
if(my@t=unpack"C*",do{local($/);}) {
my$t=0;
{
$t[0]==126 ?
((t *STDERR,chr$t),last):
($t+=shift@t)and redo
}
c $0;
$d=$t[$#t];
$c+=$l[$_]for 0..$d
} else {
$c+=$l[0];
$d=0
}
##
##
if($d<@l){
open M,">>$0";
my@p=$c;
my$r;
do{
$r=int(rand
&P($c,int(rand($c-($c/3))+1)+int(2*$c/3))
)+1
} while $r==1;
@p=i@pwhile$r--;
(@p<1<<3) ?
(@p=p(@p)and t(*M,(map{chr}@{$p[int(rand(0+@p))+1]}),'~',chr($d+1))):
(t(*M,(map{chr}@p),'~',chr($d+1);
exec"perl $0"
}