Readers: 22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!/usr/bin/perl
use MIME::Base64 qw(encode_base64);
$mailprog ='/usr/sbin/sendmail';
open(MAIL, "|$mailprog -t") || die "Can't open $mailprog!\n)";
print MAIL "To: $ARGV[0] <$ARGV[0]\@yxz.de>\n";
print MAIL "From: $ARGV[1] <noreplay\@xyz.de>\n";
print MAIL "Reply-to: muster\@xyz\n";
print MAIL "Subject: $ARGV[2] $ARGV[3] $ARGV[4]\n";
print MAIL "MIME-Version: 1.0\n";
# Trennerspezifikation für Attachements
print MAIL "Content-Type: multipart/mixed;\n";
print MAIL "\tboundary=mail_attachement===============\n";
# Hinweis, wenn kein MIME-Standard unterstützt wird.
print MAIL "This is a multi-part message in MIME format.\n";
print MAIL "\n";
print MAIL "\n";
# Abgrenzung der Email vom Header
print MAIL "--mail_attachement===============\n";
# Trennerspezifikation Plaint Text mit HTML als Alternative
print MAIL "Content-Type: multipart/alternative;\n";
print MAIL "\tboundary=plain_html===============\n";
# Abgrenzung der PLAIN von HTML
#print MAIL "--plain_html===============\n";
#print MAIL "Content-Type: text/plain; charset=us-ascii\n";
#print MAIL "Content-Transfer-Encoding: quoted-printable\n";
#print MAIL "Alternative als Plain Text\n";
# neuer Content-Type sobald sich ein Bild im HTMLTEIL befindet
print MAIL "--plain_html===============\n";
print MAIL "Content-Type: multipart/related;\n";
print MAIL "\tboundary=html_images===============\n";
# Abgrenzung der HTMLQUELLCODE vom Bild
print MAIL "--html_images===============\n";
print MAIL "Content-Type: text/html; charset=us-ascii\n";
#print MAIL "Content-Transfer-Encoding: 7bit\n";
open(FILE, "$ARGV[7]/tmp/body.html");
read (FILE, $htmlfile, 60*57);
print MAIL $htmlfile;
close (FILE);
# Einbinden des Bilds
print MAIL "--html_images===============\n";
print MAIL "Content-Type: image/gif\n";
print MAIL "Content-ID: <image001.gif>\n";
print MAIL "Content-Transfer-Encoding: base64\n";
print MAIL "Content-Disposition: inline; filename=\"image001.gif\"\n";
### Kodierung auf base64 Basis
open(FILE, "$ARGV[7]/image001.gif");
while (read(FILE, $buf, 60*57))
{
print MAIL encode_base64($buf);
}
close(FILE);
print MAIL "$ARGV[5]\n";
# Einbinden des Bilds
print MAIL "--html_images===============\n";
print MAIL "Content-Type: image/gif\n";
print MAIL "Content-ID: <image002.de.gif>\n";
print MAIL "Content-Transfer-Encoding: base64\n";
print MAIL "Content-Disposition: inline; filename=\"image002.gif\"\n";
### Kodierung auf base64 Basis
open(FILE, "$ARGV[7]/image002.gif");
while (read(FILE, $buf1, 60*57))
{
print MAIL encode_base64($buf1);
}
close(FILE);
print MAIL "\n";
# Abgrenzung der HTMLQUELLCODE vom Bild schließen
print MAIL "--html_images===============--\n";
# Abgrenzung der PLAINTEXT vom HTMLTEIL schließen
print MAIL "--plain_html===============--\n";
# Abgrenzung des TEXTTEIL vom ATTACHMENT
print MAIL "--mail_attachement===============\n";
print MAIL "Content-Type: application/octet-stream; name=\"$ARGV[6]\"\n";
print MAIL "Content-ID: <$ARGV[6]>\n";
print MAIL "Content-Transfer-Encoding: 7bit\n";
print MAIL "Content-Disposition: attachement; filename=\"$ARGV[6]\"\n";
open(FILE, "$ARGV[7]/tmp/$ARGV[6]") or die "Can't open data: '$ARGV[6]'!\n$!";
read(FILE, $buf2, 60*57);
print MAIL $buf2;
close(FILE);
print MAIL "\n";
# Abgrenzung des TEXTTEIL vom ATTACHMENT schließen
print MAIL "--mail_attachement===============--\n";
close (MAIL);
Guest MichaelNun haben wir die Server auf SLES 11 umgestellt, welches Perl 5.10 mitbringt. Zwar funktioniert der Versand der HTML-Email noch, aber leider werden die Bilder nicht mehr angezeigt und die Textdatei ist ohne Inhalt.
QuoteEin Gefühl sagt mir, dass die Interpretation der MIME-Typen anscheinend nicht funktioniert.
QuoteCode: (dl )1
2
3
4open(FILE, "$ARGV[7]/tmp/body.html");
read (FILE, $htmlfile, 60*57);
print MAIL $htmlfile;
close (FILE);
QuoteWie sieht das denn aus, wenn du dir den source code der generierten Mail anzeigen laesst?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<img width=199 height=35 src="cid:image001.gif">
<div class=abstand>
<h3>Ein neuer Vorgang steht für Sie bereit</h3>
<table border=0 cellpadding=0>
<tr>
<td colspan=2 class="message">
<p><img width=23 height=15 src="cid:image002.gif">
</p>
</td>
</tr>
<tr>
<td class="message">
<p>Lfd. Nr.:</p>
</td>
<td class="message">
<p>1</p>
</td>
</tr>
<tr>
<td class="message">
<p>Aktenbetreff:</p>
</td>
<td class="message">
<p>RZ-Schnellinfo</p>
</td>
</tr>
<tr>
<td class="message">
<p>Vorgangsbetreff:</p>
</td>
<td class="message">
<p>RZ-Schnellinfo Nr. 001</p>
</td>
</tr>
<tr>
<td class="message">
<p>Aktenzeichen:</p>
</td>
<td class="message">
<p><a href="cid:B32-0003_0012.cwf">B32-0003#0012</a></p>
</td>
</tr>
<tr>
<td class="message">
<p>Datum:</p>
</td>
<td class="message">
<p>16.12.2010, 10:40:30 Uhr</p>
</td>
</tr>
<tr>
<td class="message">
<p> </p>
</td>
<td class="message">
<p> </p>
</td>
</tr>
</table>
<p>brabbel ...</p>
</div>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Microsoft Mail Internet Headers Version 2.0
Received: from XYZ ([127.0.0.1]) by XYZ with Microsoft SMTPSVC(6.0.3790.3959);
Thu, 16 Dec 2010 10:41:57 +0100
Received: from XYZ by XYZ with Microsoft SMTP Server id xxx; Thu, 16 Dec 2010
10:41:57 +0100
Received: from XYZ by XYZ (SPONTS v8.6.0.1288) with ESMTP id
112CEE8EE034-0 for <XYZ@muster.de>; Thu, 16 Dec 2010 04:42:09
-0500
Received: by XYZ (Postfix, from userid 102) id
A2D652F82A7; Thu, 16 Dec 2010 10:41:59 +0100 (CET)
To: Nummer1 <XYZ@muster.de>
From: Nummer2 <XYZ@muster.de>
Reply-To: <XYZ@muster.de>
Subject: Betreff
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="mail_attachement==============="
Message-ID: <XYZ>
Date: Thu, 16 Dec 2010 10:41:59 +0100
X-SPONTS-Version: 8.6.0.1288
Return-Path: XYZ@muster.de
X-OriginalArrivalTime: 16 Dec 2010 09:41:57.0734 (UTC) FILETIME=[7B302060:01CB9D05]
--mail_attachement===============
Content-Type: multipart/alternative; boundary="plain_html==============="
--plain_html===============
Content-Type: multipart/related; boundary="html_images==============="
--html_images===============
Content-Type: text/html; charset="us-ascii"
--html_images===============
Content-Type: image/gif
Content-ID: <image001.gif>
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="image001.gif"
--html_images===============
Content-Type: image/gif
Content-ID: <image002.de.gif>
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="image002.gif"
--html_images===============--
--plain_html===============--
--mail_attachement===============
Content-Type: application/octet-stream; name="2131-0101_0023.cwf"
Content-ID: <2131-0101_0023.cwf>
Content-Transfer-Encoding: 7bit
Content-Disposition: attachement; filename="2131-0101_0023.cwf"
--mail_attachement===============--
QuoteSchon mal ueberlegt was passiert, wenn es diese Datei nicht gibt, oder du keine Leserechte hast?
QuoteGefuehle sollten beim Debugging nur als Anhaltspunkte dienen, verifizieren musst du es schon noch.
Guest MichaelCode: (dl )<p>brabbel ...</p>
QuoteCode: (dl )1
2
3
4
5
6
7--html_images===============
Content-Type: image/gif
Content-ID: <image001.gif>
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="image001.gif"
--html_images===============
QuoteQuoteSchon mal ueberlegt was passiert, wenn es diese Datei nicht gibt, oder du keine Leserechte hast?
Ein Rechteproblem ist für mich nicht ersichtlich. Zu Testzwecken habe ich die betroffenen Datein auf 777 gesetzt. Die Datei wird erstellt und auch als HTML-Mail versandt. Lediglich die Einbettung der Grafiken als auch der Dateianhang funktionieren nicht.
QuoteQuoteGefuehle sollten beim Debugging nur als Anhaltspunkte dienen, verifizieren musst du es schon noch.
Gerne, wenn Du noch einen Vorschlag für mich hast? :-)
open(FILE, "$ARGV[7]/tmp/$ARGV[6]")
1 2 3
$ARGV[7]='<'; $ARGV[6]='../etc/passwd'; open(FILE, "$ARGV[7]/tmp/$ARGV[6]")
1 2 3
$ARGV[7]='>'; $ARGV[6]='../etc/passwd'; open(FILE, "$ARGV[7]/tmp/$ARGV[6]")
Guest werSystemspionage/sabotage leicht gemacht?
Code (perl): (dl )1 2 3$ARGV[7]='>'; $ARGV[6]='../etc/passwd'; open(FILE, "$ARGV[7]/tmp/$ARGV[6]")
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
#!/usr/bin/perl use strict; use warnings; use MIME::Base64 qw(encode_base64); my $debug=0; my $mailprog ='/usr/sbin/sendmail'; my $sep_attachement='mail_attachement==============='; my $sep_html='plain_html==============='; my $sep_images='html_images==============='; my $tmp_dir='/tmp/'; my $body="body.html"; my @images=( ['image001.gif','image/gif'], ['image002.gif','image/gif'], ); my $to=$ARGV[0]; my $from=$ARGV[1]; my $subject="$ARGV[2] $ARGV[3] $ARGV[4]"; my $unknown=$ARGV[5]; my $attachement=$ARGV[6]; my $user_dir=$ARGV[7]; die(qq(NO USER DIR! "$user_dir")) unless(-d $user_dir); # mail erzeugen... my $mail=''; # Mail Header $mail.="To: $to <$to\@yxz.de>\n"; $mail.="From: $from <noreplay\@xyz.de>\n"; $mail.="Reply-to: muster\@xyz\n"; $mail.="Subject: $subject\n"; $mail.="MIME-Version: 1.0\n"; # Trennerspezifikation für Attachements $mail.="Content-Type: multipart/mixed;\n"; $mail.="\tboundary=$sep_attachement\n\n"; # Hinweis, wenn kein MIME-Standard unterstützt wird. $mail.="This is a multi-part message in MIME format.\n"; $mail.="\n\n"; # Abgrenzung der Email vom Header $mail.="--$sep_attachement\n"; # Trennerspezifikation Plaint Text mit HTML als Alternative $mail.="Content-Type: multipart/alternative;\n"; $mail.="\tboundary=$sep_html\n"; # Abgrenzung der PLAIN von HTML #$mail.="--$sep_html\n"; #$mail.="Content-Type: text/plain; charset=us-ascii\n"; #$mail.="Content-Transfer-Encoding: quoted-printable\n\n"; #$mail.="Alternative als Plain Text\n"; # neuer Content-Type sobald sich ein Bild im HTMLTEIL befindet $mail.="--$sep_html\n"; $mail.="Content-Type: multipart/related;\n"; $mail.="\tboundary=$sep_images\n"; # Abgrenzung der HTMLQUELLCODE vom Bild $mail.="--$sep_images\n"; $mail.="Content-Type: text/html; charset=us-ascii\n\n"; $mail.=read_file($user_dir.$tmp_dir.$body); $mail.="\n"; # Einbinden der Bilder $mail.=read_image($user_dir.$tmp_dir,@$_,$sep_images) for(@images); $mail.="$unknown\n"; # Abgrenzung der HTMLQUELLCODE vom Bild schließen $mail.="--$sep_images--\n"; # Abgrenzung der PLAINTEXT vom HTMLTEIL schließen $mail.="--$sep_html--\n"; # Abgrenzung des TEXTTEIL vom ATTACHMENT $mail.="--$sep_attachement\n"; $mail.=qq(Content-Type: application/octet-stream; name="$attachement"\n); $mail.="Content-ID: <$attachement>\n"; $mail.="Content-Transfer-Encoding: 7bit\n"; $mail.=qq(Content-Disposition: attachement; filename="$attachement"\n); $mail.=read_file($user_dir.$tmp_dir.$attachement); # Abgrenzung des TEXTTEIL vom ATTACHMENT schließen $mail.="--$sep_attachement--\n"; if($debug) { print $mail; exit; } # mail versenden ... open(my $mail_out, "|$mailprog -t") || die "Can't open $mailprog!\n)"; print $mail_out $mail; close($mail_out); ######################################################################## sub read_file { my $file=shift; if(open(my $fh, '<', $file)) { binmode($fh); local $/=undef; return <$fh>; } die qq[ERROR open "$file" ($!)\n]; } sub read_image { my $base=shift; my $file=shift; my $type=shift; my $sep=shift; my $txt=''; $txt.="--$sep\n" if($sep); $txt.="Content-Type: $type\n"; $txt.="Content-ID: <$file>\n"; $txt.="Content-Transfer-Encoding: base64\n"; $txt.=qq(Content-Disposition: inline; filename="$file"\n); my $buf=read_file($base.$file); ### Kodierung auf base64 Basis $txt.=encode_base64($buf); $txt.="\n"; return $txt; }
2010-12-16T15:15:17 topegEin paar Sachen sind mir aufgefallen:
Das HTML wird in "$ARGV[7]/tmp/body.html" gesucht, die Bilder aber in "$ARGV[7]/image001.gif". Ist das so richtig? Da alles andere in "$ARGV[7]/tmp/" liegt halte ich es für wahrscheinlich, dass die Bilder auch dort liegen.
2010-12-16T15:15:17 topegWas steht in "$ARGV[5]"? das kann unter Umständen eines der Bilder kaputt machen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
#!/usr/bin/perl ### Variablen erzeugen my $to = "$ARGV[0]\@domain"; my $from = "$ARGV[1]"; my $replay = "email"; my $subject = "$ARGV[2] $ARGV[3] $ARGV[4]"; my $workdir = "$ARGV[7]"; my $tempdir = "$ARGV[7]/tmp"; my $cwffile = "$ARGV[6]"; my $htmlfile = "$ARGV[5]"; ### Modul einbinden use MIME::Lite; ### "Container" für die Multipartmessage erstellen $msg = MIME::Lite->new( From =>"$from", To =>"$to", ReplyTo =>"$replay", Subject =>"$subject", Type =>'multipart/related', ); ### HTML-Datei öffnen, lesen, Inhalt in die Email schreiben und schließen open(FILE, "$tempdir/$htmlfile") or die "Can't open data: '$htmlfile'!\n$!"; read(FILE, $buf, 60*57); $msg->attach( Type =>'text/html', Data =>"$buf" ); close(FILE); ### Erstes Bild einbetten $msg->attach( Type =>'image/gif', Encoding =>'base64', Filename =>'image001.gif', Disposition =>'inline', Path =>"$workdir/image001.gif" ); ### Zweites Bild einbetten $msg->attach( Type =>'image/gif', Encoding =>'base64', Filename =>'image002.gif', Disposition =>'inline', Path =>"$workdir/image002.gif" ); ### Linkfile anhängen $msg->attach( Type =>'text/plain', Encoding =>'7bit', Filename =>"$cwffile", Disposition =>'attachment', Path =>"$tempdir/$cwffile" ); ### Nachricht versenden $msg->send();
2010-12-20T13:45:05 biancaBist Du das eigentlich, mit dem ich vor einigen Monaten schonmal versucht habe, so ein altes Bestellscript aufzuarbeiten? :)
Guest MichaelNein, ich bin heute das erste Mal hier ... und ziemlich begeistert :-)
Guest MichaelDas Skript soll eine (schöne) Infomail verschicken mit einer Link-Datei im Anhang.
1 2 3 4 5 6 7 8 9 10
### HTML-Datei öffnen, lesen, Inhalt in die Email schreiben und schließen open(FILE, "$tempdir/$htmlfile") or die "Can't open data: '$htmlfile'!\n$!"; read(FILE, $buf, 60*57); $msg->attach( Type =>'text/html', Data =>"$buf" ); close(FILE);
1 2 3 4 5 6 7 8 9 10 11 12 13 14
### HTML-Datei öffnen, lesen, Inhalt in die Email schreiben und schließen { # Drei Parameter "$tempdir" könnte auch "> /tmp" sein # und "$htmlfile" eine wichtige Datei ("../irgendwo/hin.datei.conf"). open(my $fh, '<', "$tempdir/$htmlfile") or die "Can't open data: '$htmlfile'!\n$!"; binmode($fh); # keine Zeichenumwandlung local $/=undef; # keine Zeilentrenner $msg->attach( Type =>'text/html', Data =><$fh>, ); close($fh); }
die("No tempdir") unless(-d $tempdir);
2010-12-20T13:49:07 topegWarum ließt du 60*57 (3420) Byte aus der Datei? Das finde ich seltsam.
2010-12-20T13:49:07 topegWeiterhin prüfe ob "$tempdir" sinnvoll gesetzt ist. Z.B. so:
Code (perl): (dl )1 2 3 4 5 6 7 8 9 10 11 12 13 14### HTML-Datei öffnen, lesen, Inhalt in die Email schreiben und schließen { # Drei Parameter "$tempdir" könnte auch "> /tmp" sein # und "$htmlfile" eine wichtige Datei ("../irgendwo/hin.datei.conf"). open(my $fh, '<', "$tempdir/$htmlfile") or die "Can't open data: '$htmlfile'!\n$!"; binmode($fh); # keine Zeichenumwandlung local $/=undef; # keine Zeilentrenner $msg->attach( Type =>'text/html', Data =><$fh>, ); close($fh); }
Das prüft ob das Verzeichnis existiert. man kann auch noch weitergehend testen.
Guest Michaelaber irgenwie funktioniert es :-)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
my $html_filename = 'datei.html'; my $html; if (open (my $htmlfh, '<', $html_filename)) { # Einlesen in einem Zug; siehe Perl Cookbook in <http://oreilly.com/catalog/cookbook/chapter/ch08.html> local $/ = undef; $html = <$htmlfh>; close($htmlfh); } else { warn "Kann Datei $html_filename nicht oeffnen $!"; } my $msg = MIME::Lite->new( To =>'you@yourhost.com', Subject =>'Text und HTML mit Bildern!', Type =>'multipart/alternative' ); ### plain text my $textpart = $msg->attach(Type => 'text/plain', Data => [ "Blah\n", "Blubb\n" ]); ### HTML my $htmlpart = $msg->attach(Type => 'multipart/related'); $htmlpart->attach(Type => 'text/html', Data => [ $html ]); $htmlpart->attach(Type => 'image/gif', Path => '/path/zu/bildern/Bild.gif', Id => 'Bild1');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
Return-Path: <[gekürzt]>
Delivered-To: [gekürzt]
Received: [gekürzt]; 16 Dec 2010 19:03:44 -0000
Date: 16 Dec 2010 19:03:44 -0000
Message-ID: <[gekürzt]>
Mime-Version: 1.0
From: [gekürzt]
Organization: [gekürzt]
To: [gekürzt]
Subject: [gekürzt]
Content-Type: multipart/related;
boundary="----=_NextPart_2861612201020034419256"
Hier Text fuer MIME-unfaehige Clients
------=_NextPart_2861612201020034419256
Content-Type: multipart/alternative;
boundary="----=_NextPart_2861612201020034419256SUB"
------=_NextPart_2861612201020034419256SUB
Content-Type: text/plain;
charset="ISO-8859-1"
Content-Transfer-Encoding: quoted-printable
Und hier die Pur-Text-Alternative
------=_NextPart_2861612201020034419256SUB
Content-Type: text/html;
charset="ISO-8859-1"
Content-Transfer-Encoding: quoted-printable
<html>
<body>
<table border=3D"3">
<tr>
<td><img src=3D"http://www.perl.org/simages/lcamel.gif"></td>
<td>Externes Objekt</td>
</tr>
<tr>
<td><img src=3D"cid:1"></td>
<td>embedded object</td>
</tr>
</table>
</body>
</html>
------=_NextPart_2861612201020034419256SUB--
------=_NextPart_2861612201020034419256
Content-Type: application/octet-stream;
name="osterhase.gif"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
Content-ID: <1>
R0lGODlhPwBBAPcAABgNBCQMAS0MACkaBjEUADEYCDcUAEQVADEmADkpAD0pAEQpAC8lCEcrAkEs
Cjo0IFMkA1YzAlI+BnFMA1I9GGtMFVRGOHNONnteH2xdOYtoJpd7MnNoTHtuXJl+TZODaJx4g5+U
fp+ah5yckZqZn5ilsZSluaWltaWthJyvt5SlvZatvaWlvZytvaCxvaW1vZGnxpCxypS1xpS1zpyl
xpytxpytzpy1xpy1zpy11qWlxqWtxqWtzqWt1qW1xqW1zsOcMtipLbSVSs2jR9e2MtGzQtCxSt61
QuevLuW7NOK9Pe+5Od61SuetRue1RvKzRrhgd7dphs5bf81nhb5ygbuObMqoVcKiccawW9ayV8yx
Z8evet6xUuqyU+S0YN+zc7l3lLuFmrOnrbGtxq21tbK1uq21xrW1xqW11qW13q2tzq2t1q210rW1
zq213rW12tRtjM93ks6Al8+NoN9ukeWEnd+QqOyRqcmjn9ufp8WrvdipvuuYr+SoseOvwfWlvNa9
St7DR+e9QufGPdO9V97BVue9SufAUu+9Qve9QvO9SvPIQefGVufOUu+9UvfLT9O9ad69a97GY+fA
Ze+9XurJYvfBYvbRX5y9xqq9w8DBsrvExt3Dde/Kc+rJgdTLuJS9zpS91py9zpy91pzG1qW9zqW9
1qXG1q29zq3GzrW9zrXGzr3Bzsa9zsbGzr3Ozs69zta9zsbOztDOzt69yt7KytbWyt7Ozue9yunI
yPe9zvzIy97Wxt7WzuHhzu/izpy93pzG3qW93qXG3qXG56291q293q2957W91rW93rW9563G1q3G
3rHK1q3K4q3O57XG3rXG57XG77XO1rXO3rXO57291r293r3G1r3G4sTH187B2r3O4snP3s7W2s7W
597G2N3Q39bW4uPW4Nje2OHj2dfe6+Pe7PnD2vjS3/Xb4/fX8Ozn2/fn2uvi7/rh8Ozv3ubr6+np
7+/v7/nz3vTv7/f37//n7+Lr9+vr+/fn+/Hx+//n+//x9fz59P37/SH5BAEAAD8ALAAAAAA/AEEA
QAj+AH8IHEiwoMGDCBMqXEhwTx45YKRAkTKlIhw5dTLSoUgnihQwBedEiQInjpw7fO7UgQOH4hQo
UKjMmZNHD8ObBPHMsWNHJZU4A0fG4cMnT54weXAqXcigwQYrkyYBYlLoiCBBlwQFYcJkCJBCjCRJ
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
------=_NextPart_2861612201020034419256--