[Python-Dev] Unicode strings as filenames

Martin v. Loewis martin@v.loewis.de
Sun, 6 Jan 2002 23:42:34 +0100


--Multipart_Sun_Jan__6_23:42:34_2002-1
Content-Type: text/plain; charset=US-ASCII

> Could someone who really understands this issue (Martin?) perhaps
> write a test case for this? I think something like creating a file
> with some nonascii chars in the name, and verifying that open(),
> readdir(), os.stat() and various others work as expected is what would
> be needed (but I'm not sure I fully understand it:-).

I'll attach a script below. It contains UTF-8 encoded data, so to
prevent transmission errors, it comes base-64 attached. Running it
creates a three additional files in the current directory; I recommend
to run it in an empty directory.

In case you cannot view the source code properly, I attach a
screenshot of my editor.

Regards,
Martin


--Multipart_Sun_Jan__6_23:42:34_2002-1
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="uni.py"
Content-Transfer-Encoding: base64

IyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KaW1wb3J0IGxvY2FsZSwgb3MKCmxvY2FsZS5zZXRsb2Nh
bGUobG9jYWxlLkxDX0FMTCwgIiIpCgpmaWxlbmFtZXMgPSBbCiAgICB1bmljb2RlKCJHcsO8w58t
R290dCIsInV0Zi04IiksCiAgICB1bmljb2RlKCLOk861zrnOrC3Pg86xz4IiLCJ1dGYtOCIpLAog
ICAgdW5pY29kZSgi0JfQtNGA0LDQstGB0YLQstGD0LnRgtC1IiwidXRmLTgiKSwKICAgIF0KCmZv
ciBuYW1lIGluIGZpbGVuYW1lczoKICAgIHByaW50IHJlcHIobmFtZSkKICAgIGYgPSBvcGVuKG5h
bWUsInciKQogICAgZi53cml0ZSgobmFtZSsnXG4nKS5lbmNvZGUoInV0Zi04IikpCiAgICBmLmNs
b3NlKCkKICAgIG9zLnN0YXQobmFtZSkKCnByaW50IG9zLmxpc3RkaXIoIi4iKQoKZm9yIG5hbWUg
aW4gZmlsZW5hbWVzOgogICAgb3MucmVuYW1lKG5hbWUsInRtcCIpCiAgICBvcy5yZW5hbWUoInRt
cCIsbmFtZSkKICAgIAo=

--Multipart_Sun_Jan__6_23:42:34_2002-1
Content-Type: image/png
Content-Disposition: inline; filename="uni.png"
Content-Transfer-Encoding: base64

iVBORw0KGgoAAAANSUhEUgAAApoAAAK3CAIAAACqXHhAAAAABGdBTUEAALGPC/xhBQAAADh0RVh0
U29mdHdhcmUAWFYgVmVyc2lvbiAzLjEwYSAgUmV2OiAxMi8yOS85NCAoUE5HIHBhdGNoIDEuMind
FS5JAAAgAElEQVR4nO3dLZTcWH43YG1OgwIBBgEDFhgYDAgYsMDQIMBgwYAXBCwwCDBY0CBgwIIB
AQYLCiwwCDBYMOAFBgsaDGhoENAgwGCAQcCAAIOAAg0CNKPI+rilq+9/1fMcnz5qlXR1pWrXr+7V
xy1e/tsPBQAQ1unxdHP3p38+/PnD1jUBgP06vfvu9HC3dS263d7eHm4ON7/89nC/ZV0AYN8+ffq0
dRVSbtqzTn/97ptvvnl4eCiK4vCHN+1Xi6L44a8/vLr7tHz1AGAvPn78OHzhly9f3t1lNOhHLF//
hvF3jZdPf/3u63/8+uM//vPhD2/aWV4URTn/1b+8Gr5JuHbfvDBhwsQlTBTF3WDrLF/5TVEUhz9/
KDvby5b327+8vf3wuXy5nHP4w5tqojG/AAY4fXo4PP3GhAkTUSce7j6+f/vx48e7u7vj8djzH/0X
Zdwej8dqYqHly9b58Xh8+5e3HXHeyOyG8tW+OO+cf/rrd3sO/s/vbuu/Pnl15jgmChm3bm4JVYWn
bG6KelWHVHvNgzOwkJ1UCYiiEeef//tzYuEP//GhEc8LLV+P8+5z5+XE3Y939z/ev/inF/c/3n/4
8OHp06df/cNXb/78y6t9CX16PB1uDunvBDvRzsXP7253/jG9SfV2fkwAVnZ6POUu//S3Tztf+vRf
n/rKf/rbp/VXG782fHHuvJ7QP/zww4sXL17/y+vDzeH1v7x+8+bN8989f/3H1+Wrr1+/Ttf79Nfv
fvmXuc+r6Wzj1nM9q7Qnr44T0256CasJVNU+a+/CTk77mTBhYvK589IpqWjpnJl46XT6Jf6f/vZp
WWb9185ympfClYn+6tWrb//ft0VRfPX0q++///6rp19987tv3v//91/99qtymXf/87T4tS1b/1cU
RXl+/v3f3p8eT+//9r5vBxpr1We2Jxrh2rlu46WBy1ddr9Xm2p/yQ2pV/7W9fLoOZ0uoz29MpHd5
yMTZY5Xer75dSOxj33EbXkJfsem/pb5y0gdk4D6eeX8f7k+fHkyYMBF3omh4/OXf18++rv5VMzv8
OvNjTeOlxvLVAr8U/uvq3cu347z03b9+VxTFz//1c1EUL1++/PnTzz//188vXr74/k/f11vwZy+0
61N13tZPZNZfbZ/gbKRL57rDl28v+eTVsdFez6pV3z4O2d9ECY3egurXzvmdodVX5vBjVd9ookXb
WHjI7uRqVD5R58arWYUn1mr/qQypQ6m8msaECRNBJxpOj6fy39mZ1UuNZepz+sp/+M+H+syH/3zo
K7/ovO+8KIqPP3188uRJ+RXg9l9vHz48fPiPD0VRvHnzxd1r3/7+287V7+7uvv39t+//9r782blM
Qmfvd2JOKR0n5Yd1Z8s7sdbwWk1fvq+EdnhU6pUvF/v8Ze9C+ugNP7ZnDTmMZ3fnrMSeplfJLbxz
gfbRHlgycHlG96i3lxleVKL8oq91/ubf3nz+n8+Hvz+Uvz75hydP/v7Jx58+Ni5/K+9Br/8r55cx
X//Z6WzHZnrFxLr15G5f5tZXZjEhz84a0pG7BzupZ2419lPn7td2ctrPhAkTM5077+5XH9DZ/n/L
PLZeahX1/HfP6/Oe/+55b/mdcX74w5sP//Hh6bOn1YXyh8PhxT+9+P5P3w+5TL3M70bAdypDN/ei
pEbH5hD1hYd86M8e7SPqvInR9cw6iTCwwBFv8bZHOFWHrU/7mTBhYt5z59VVb/c1Qy6Fe17TeKmx
fLVAWXi1+tBL4Sr3P94//frp/Y/3RVGUd9oNPzVeT/FN7jjvbCd1ftC3T58v3UznOu3k/J8JEybm
PXfe+a9z+c5y+l46PZ7ufrwriuLux7uyzPqvneV0x/nhD29evnz58PDw/Z++f3h4ePFPL07/c3p4
eDibzZ0t8r610pdJn9VYK3E5WHsTjRSvWlRLt/Dal1BNadH2Xdw3Xfr88dnKFJm7Vt+FgYs19nTi
31Jii50XSPZd3L5EHYA9ekz+61q+91mt/Z3tv7z62Pq1S2/r/PCHN89/9/zdD++e/+75p0+fnj9/
/vbt2zH73KXvgu3h63ZemN13PXbntjqvkV7ogzjrkviJJc9bWmN69i869XfnbOHVBWidF/St0K3S
dxzO12Enp/1MmDAxx7nzu7u7rNb50suXvnjIa1v5fNbTX7+7+9vdy9+/3POzWsfpbLXD7E47ee60
CRMmJj+zved/eVP10Nbllu99ZnvCzp+7DgDLKeP86dOnW1fkC13PbP/886unyaex/vF1UXxaumYA
sEcvvj470Nkmbm9rfcyHP384/P62fB572Snvp59++umnn37u/OfrP77++NPHajiV/4vzzWvmp59+
+umnn34O+fn27dt6nP967vz+h1dPT2//8rZcDgDYrXf//q4oiof/fLi9vS3PnX9xo9rp8XS4OWxT
NQBgrC/HO785aJ0DQDha5wAQntY5AIT3xXjnZeu8nejtJvvZ1K9WKZds/LqEvn6Fqsthxk0ntpVV
wugqnX1HqvLrG8rdaGMrS7x3445D51rpomY54InDmCg/97/PlLcs1/7rVpW/6PsLF+CLOE+3zuv/
r9JLZv0/nNfKW9n2Q2TIdmcJsGLAm07ano/knusGDDSodd6n86t69X2/LKrxa/Flg6Bz3cYp/LkC
qT6zUfIsmxtd/uxbrxfS975M30opsY9Zb+uIL0b1HamXPLAl3VmN6VsfvnrR9b2w723qXL7Ud7Rz
qxSibn2baFdGe51rM/+586qE+g3vRes/djva6x8WfctM1FnyjJsbUf4SW+8spPFGnFXVp7OGw/dx
yNva+VVvIcv9dc2i821qHJ+tjuRO6jbkHVzzLwp2IqN1PmMjsk/jc+HUPxJcn6qSI1Ycsbm5TNzZ
4sv97Uv0XO1ETy95tpy+5Sc2kbf6yM7aemebtV7C6MM7bsmIdRtOo5wrtMi587OGNB+HpEiikOFb
n7K56Zbe2emqz/R093Lfx+5ylaxHaW6oT/8G0Lf1xHesiVtcToi6dXZrAZVJ585HG7KJzhRZbuvL
bW5glTbceqf614t2WPadsCxW/5zdtvXW3npWa3WrL5Fn7blupX3WCjY0z7nzcR+p1edF3/xF/8dW
W9n2Y2uJrZ99O+ZK3L53cLkVGxrXZ7S3smg10lufbs8N0J3ULfEZsn5lYFsZT4Ur/+c0Gm1F5peA
IX3Ly/V+d5Y84+ZGlD9l69U70mgc9xWS9X7VK3Z2dxonXIv+ZusKX57Su7ntuZXOynTOHPI+LroL
u63bwM+QPby/sKZB586HnFBPnCY8e93TkDlnJQo5ewpz9P/5gTVPLzbLzjbmd+577rbObqVv5vAV
xx2HzrXSM2c84Ge3nlh34AJnq73Ekdx53YZvIndDcBk8sx02s+f/bnuuG9Dmme2wjT33Bu+5bkCn
ba5sB/b8H23PdUuLW3OYSOscAML7Jc5PfzsWzp0DQEw3RVGc/vX5x58+Ho/HsnX+7t/fbV0rACDD
3xVf3nkiywEgnOZ951vVAwDI8vqPr6vp5pXtq1cGABjj9va2mr5JLAcArGlIN3ln21ucA8COpHvK
+/JenAPAvvRldiLp/67vhYvx/tnXZ+fs0/tnX0epKgDb6o3zKkgkyqL6Du/7Z19/+9PHb3/6OLCQ
6t+stQMghmvsbB+YkQ1lvs5emekaFdttPQFYzhpxPj1g6o3ORnSl57e3W77Uzr/OVbLKSVS+M24b
/R/7yWBfCADC6YjzubrZ26kwLicScXh2fnsX6snduYm+cmZPuM69KLaL+bneLwDW1xHnZeD1hc1w
9XImFtUoNrcO85Y5epWskocfrsY+7u39AmAFM3S2d7aAq4ny1bMt5unVuHh9xy333Ln3C+Dy9Ha2
17t80x/fiVer09L1ll+UMOg7ob6Vuepwqe8XwDXrvlGtukVq+L1SbY3vAQP7vfem7whc3l1hl/F+
AVynBR8j007BWdp5WRkzPZDmvZ97zwG50PsFwArWuFFtYir0Xeo1ZH5jmayLxtPnpIfvVKI+9TkT
L2EbUbFEgRNLAGBl3Ve2NyY211eTIfPPZnBj5hJ7na7DkFoNLx+AK3SNT4UbaPZWLwAsRJyniHAA
Qrj8EdUA4OKJcwAILxXn7559Xq0eAMBou2ud536HONwcDjeHhSqzQvkAMF0qzl/99GS1eox2ejyF
Lh8Apuu9sr1sJdcTvWo3v/rpSf3Vd88+V3P6VqnP71u+mtPedK56e7qex7nzc8tfup4A0Kk3zuuJ
W59Z/JrHnRN9M/uWqU93rjXC4ebQiMby19z5ueUvXU8A6DPPufPcAN5DN36VkTsPy51XD4A92P4x
MnuI9tyL3Ra9OO70eCrLF+QADLR9nG+u3bl9dpV1rr8T6gAMtLsb1aicHk9VSx0AEuaJ84gPnOmM
yRHZ2Vhl+n3q8huAXN2d7bn3jHXeeNa4Nn7gOfLGXXBpVfLV+6UbLdr6JW9n5zeWySq/s4SE3HoC
QJ/uOO+M0npOtxdLr3J2ZtYClb6omzK/b3pIObmWLh+AK+Hc+czcJg7A+maI8z3cabYfshyA9Wmd
A0B44hwAwhPnABCeOAeA8MQ5AIQnzgEgPHEOAOGJcwAIT5wDQHjiHADCE+cAEJ44B4DwxDkAhCfO
ASA8cQ4A4YlzAAhPnANAeOIcvnB/PN4fj8OnAfZAnO/a4eawdRWuzovb26zpwtsE7EBvnB9uDot+
SC1dfmK7ffP3tr+Hm8Pp8TS9nNyNTiw/sXpZeNYm2gsn3sHhlZzX6fEk0YFt9cZ5O0jmtXT5uaLs
b5R6tpXfTqp/Q/KvWmXNsLw/HqvG95BpgD24yVq6/qla/9zPnZ9b/iz1qWaWE7OXP2P9i56m+Q7r
eXlGdLYXvzbQL/7gALuVEeeNT6vq19z5ueXPVZ/OV2csf+n9jV7PhrOF1DckLAHS5r8Urv4RPHvh
Q7a7sq32N1eUegIwQl5ne64RF38NX7g6pdp5vVjWduey6P7O6FLrCXC1Fozzdift2VVyG45V73Fj
3U0aoCvs7yyi1LPoP98PQMMl3He+/sXPTOf9ApjR/HHe+TE94rO7fbfxwPuPp286y0L7O/sXlNXe
l31a4X59FyUAG+rubO+8p6sRMI2rjtPzG8tkld8ntz6NVzs7cve8vxHrWV9lRDlZ5Sfmt7cOcGG6
47zvo3bK/CHnthMf8Z0vjSin89Ud7m/RdXfWDus5/GD2vdSZsuUJlM51xx3MRWmaA5tb9sp2JrqG
kFhnHxdN3Gt4m4Cdu4RL4eAsiQtcNnEOAOGJcwAIT5wDQHjiHADCE+cAEJ44B4DwxDkAhCfOASA8
cQ4A4YlzAAhPnANAeOIcAMIT5wAQnjgHgPDEOQCEd7N1BYK5+3zXOf/lk5cr1wQAKlrnABCeOAeA
8FKd7YebQ1EUp8dTe3575hX69h++LSfe//f7bWsCwJXrjfPczO7L/ssmyAHYgzGd7Z2ZfW1BDgD7
kX1le1YrvFy4VK1Stvurl+pF9S1fzWlsvXP5xHwAuEgdcV5lYWdy15M4rdFdX/+1czqxfGOB6gtB
5/KJcvrq2ZjjGwAAsXTEeWcozmvN7vqzxQpvAKJb9jEyA9vx8y7f7pMHgMu2bJznXhvfd/47t/yq
gyG3DgAQ0SU/5HXgWQPnzgGIbr04zzoZn9vrXvRfCneW8AYgurw477vovXN+4xr4IZekte9JG7h8
vfzc7QJAdL1xnnXxedb89p1v6ekhEwPrM7vyOa+eDQfAti753PnSpDgAOyHO8xjXHIAdMkAqAIQn
zrPdH4/3x2N7elxRjYkdyt3fGY/PLPZWH4AlRIrzEXevzVVafeEXt7ed05cqd39nPz4TMzhRn3n/
ogA25Nz5ecNvZK+nTlbyNRauyhkYh7nbLVfpXLJv/tJmqU/ucWgP5AMQVKQ438nHbj1g+qbbv04v
f8jyU7a7RH3W/HLQdxy2qg/AmjaI8/TApp3joBc9D2DPHe88XXjfS405uZ3JZYS0G9xLx3DR01pt
nLA/O3+uzvZE3HZudy7p+mugA5dhX63zvjHRi67nxOWOd94o/Gw5E/Ul2dINxLNfF9pt1vqK67df
+7a7dMwDXJJ9xfmUHM19Tvual0HlRpGrr4v8rxf1LpBC/ANXZl9xvpV5oz19IVtuf3W7U7qvqNwL
6ILqOw4rnLwA2C1xXhRzX2TXl76zFLv+dvdGSAO0RbrvHADotHGcz9jLPfqxMOmXxp1lz20iN5Yf
3cJev2l+uDmscHyW03fl47j9AtjKBp3tueOaF5njqQ+Zn6jD6I73xt1oZxMrsXznjW255aQvDate
HTi/z/CvO+njk7vddPlTyimtfLEkwES/KYri9Hj69OnT8Xg87qbNtDduTU6Ie3DSNY+7X0BcjUew
NDQelXF7e3t7e3s8Ht/+5a1z54P4WO8TOvNkOXAxxDmTXGrmXep+AZdKnO/Ufi4WA2D/xHm2Sx0/
27jmAHFFinPjnS/KuOYAcXkq3HkDr4o6+xDWLJf0RaHOuOYAS4gU5zv5OE4MjxY6g41rDhCX8c5T
y7drW4zqZE60JjuDp/5AlYHJ2phTf3573wgljYWNaw4Q175a55c03nkld6SvzubmiOUT5WzSeDWu
OcBy9hXnlzreed3wuCqfWjp9+cb8vXVEG9ccYLp9xflWFo32ueJn3kvt9s+45gDDifOiWPgiu7ny
5tpC69r2F2CKSPedM4sho70BEIvxzs+8NPtZ9uFRWjbrp0dvu5zy16zHthjXHGDPjHc+23jnfXLH
Hc8d+btvcPR0OblXxhnXHGDPjHc+yAXfsjz81H7cg2BccyCK0eOduxRukMv7uO9s0CeEzjxZDlw8
cX6lcvuoLzXzLnW/gGvjynbOaJz83s/VbQBUxHk242qPYzx1gOVEinPjnW+iflfblEfiGE8dYDnO
nZ83/GqpS32WeKB9MZ46cJ0ixflOPi77hjPxLPE046kDLMd456nl27Ut+jtdzw572liy8bC29GDk
ResatNzlq1f7yhkYY/X6d5bfVx/jqQMsZ1+t84sc77zSjrrOBl+ilT9kOPPq10RTcpZehIHdEqs1
ZI2nDlyzfcV59PHO+8659kXa8JnDTXx4amL08bmeIb8y46kD12Bfcb6VuaI93dE9XN/qc8XM0nEV
IvKNpw5cEnFeFIsNu5LbLiy146RebN9iudXrLCcxPkrW5kLkX4hKAgwU6b5zAKCT8c7PvDT8LPuI
HuYhT0abvcyzJjbNx9XHeOoAUxjvfLbxzhOXUPWlTueNaonxwvtuAMs9F77oufNxl5IZTx1gCuOd
DzLv3WvVJeJ7O327bZXi3rdtPHVgLqPHO3fufJB5P473luKlbTuuQ2eeLAc2t5cr2xPfRFauyWr2
Furb1udS3+hL3S9gb7TOASA8cQ4A4W0zBEs5oR8SAGaxQev89HgS5AAwI53tABCeOAeA8MQ5AIQn
zgEgPHEOAOGJcwAIT5wDQHjiHADCE+cAEN6WD3kFAGaxQZx7wisAzGsv453LeAAYzblzAAhPnANA
eOIcAMIT5wAQnjgHgPDEOQCEJ84BIDxxDgDhiXMACE+cA0B44hwAwhPnABCeOAeA8MQ5AIQnzgEg
PHEOAOGJcwAIT5wDQHipOH/37PO7Z59Xq8pq5tqpw83hcHPonD9L+QAw0E3fC++efX7105M1qxLL
4eZwejxlLV8URdYqADDQNXa2L/01pTOzBTkAy+ltnXeqd1NXoVi246uXzoZl2a6teqTrOVfvpq7m
15dstHE7lx+yC/VK5tY/LasV3re/Sx+fxHHTiwAQUUecV8HWSL5G93v9177pPvWe6mq60X1d/7Wx
QBV4fcsn1JP77L70Vb4+0dhoPYnTEvVf9PiMO24A7FlHnJdhlnXuPLdFu7fu6Kz6d4bivNY8Pu2v
I0tsBYBF5XW2DzGlszr3mvDo15Avvb+dy7f75AGIbv44H63dCXx2leiBlHtt/FzHp+pgyK0DAPt0
jVe2Uzo9ntpn+vtupgdgz3Ya5yMSJXoIZdV/yvGJfqAAaMvobG9cEz773duNu7POpk5jmSGdxn0X
7c+l76L3zvm59Z/r+KS3q+8dIKLeOO+MuuEzExL50Tk9ZGKgIfUfuDtZF59nzV/h+MhsgAuz0852
AGA4cQ4A4YlzAAhPnANAeJHi/AIGX1/5JjH3pAFciUhxnmWH2b/+YCfDx4MBILRIcb70OOUAENQG
z2zvG188Pe748HHKc58VM2J88c7lE+UUXU3zdcZ9b4+UCsDl2WYIliFjpTdGaB0+TvmIAV5zxxfP
nZ5ruzOO+w7AJdmms70vaHO70+fqfs/Nv7metra3cd8BCGpHA6Q2bHWmPHcQ0iHl5Lq2cd8BmGi/
cb4HmzSUr3DcdwAminRlOwDQaZs43+FN4WfVW8kjOrfH3QI+fRVXxgFcg2062xM3pHUaMU55tYnR
5+AT44InbkibboVx3wG4MJudO2+nbCJ3x41TPmXk8hEvnc3Rxk1lK4xrrmkOcCWcO1/V+g95XXNz
AGxlgziP/qxWGQnA3midA0B44jy8++Px/nhsT8+1PAD7t2WcH24O0R9ntof6v7i97ZwesfwedgeA
ETaL8/Ki69DnoS/vunHjowMEpbM9vPvjsWpk16fnWh6A/bvMOC+78Rud+eV0e/6I5Yue8ctzy6/m
9L00pK3c13nePilezkl3zmugA0S0wWNkqrQoJ4YMCt6Yk14ld5zyEeOaD9n0fsYv1wQHuHgbxHln
yJ1dfsZNr7z8hZ1fB2CHDJBaFMtf0W38cgAWJc6LYuEGtPHLAVhagDjPPXcOANcmQJzPGN65l7Ml
tK9ZG1iBrOXb9Rl4/eBol3czPcA1CBDnuXLHKV96vPB5xy8ffiPZi9vb6s609i1qAFySzeJ80SZg
7hDmQ2Z2DnC+8vjluar8HhjkmuYAQV3mY2RWs374LZq4shwgqCuK88vIqsvYCwDmdUVxDgCXSpxf
iLlGLr+eEdD3Nu773uoDxHLJ453PWHhfUft5fNtcV613lrOf3WzLqlt94dxx4s+amMEjxqHf8/sC
rGyzK9u3uoh63M3inavs/DrwGUdeGXeT/d7Msgt9RzXraNdTf8hafcf/Mt4XYBYXeN955ao+5uYK
7+sZfm2rcd8b26p+NQ49MEWAc+edY43Xf/aNR9456HjipYHjmvfNX228886Z7U//6ukxDeXMsme4
vUBfimSNg547fnzf/p6dP2S71UuN92vgOPHt89kLndgeNw698emBUoDxzusrthO0bzzy9sdc38Cs
M44vvrfxzstEb2fDog3BRP2zjs+Q+Y2vC/OOE9/QbkOX6nlfePQesJEA452fLWo/oox3vlXkDHwY
flaBm7dN+2I+sXzuuXOAsy7n3PmU1Fw6EnLLP9vH3n7yfJ++BvqitorYzaO9ru9ERt+5c4ApLifO
pwgx3nnfaYUd2qp6uzosQhpYU4BL4Zio75o4AC7G7uJ86WfLDKlA/dd5ryheZ5W26YmeuMI/XcNZ
TjSMWHjg+5i2n69BQR9+AKwmQGd79UFcn0ivkrh4vl1IrPHOl6jhvHKPZ9/yQ+Ynju3E2wHa0405
o/vSXQoHLOE3RVGcHk+fPn06Ho/H3bRF9ubK20YXs5tBd+TK//zgqlR3LHe+2riZ+fb29vb29ng8
vv3L2911tu9T34fmlXyYXsxuBt2RK//zA4YQ5wAQnjgHgPDEOQCEd8njnc+oPQTIVjUBgLbN4ry8
Nm/6tTwrfCdoXz+8h0eFA0AlfGe7i3sBIMBjZIovO7eH5Hff8rnzi/5be9sjmQLAVgKMd547jvWU
8bOHlA8AexNvvPO5slZmA3AxYnS2zyLxyHfXtQEQ2hXFeVHrGCi+DHUtdQBCC39l+wjlDXJa5ABc
jN3F+ezjZ+euOHCcbFfMAbAfATrbE+NYd14kP2X87ELHOwABbRbnWWM+5g4QOdf86lU3swGwZ7vr
bN+n9kNet6oJALSJcwAIT5wDQHjiHADCE+eDrHyTunviAchysXGem4iJ5de/jt1TbgDIcrFxDgDX
Y5v7zkeMOz68nMQArLnLF11N83JOtdbw8ttjwCT213jqAAy3zXjns4w73rd83wCsucsP3PSQ+jcW
qL4QeDQNALPYb2d7bradXX7GsMx6dB0ALG1Hz2xPjEc+y/LF8leMz3j9HQAMt6M4L/rHI59l+Xbn
9pSqzlK+Bj0As9hjZ3vueOTGLwfgyu0ozs8Oc95YYEp+Z31XGLGh6au4Mg6A4TbobJ9r3PH08u0z
6427yxrxOeJMfKI+Q74EGGcdgLlsc+58xLjjIy4mb79an5N+tTG/fdfZ2TLbyycmGjTNAciyo872
PVv/Ia9rbg6A6MQ5AIQnzgEgPHEOAOGJcwAIT5wDQHjiHADCE+cAEJ44B4DwxDkAhCfOASA8cQ4A
4YlzAAhPnANAeOIcAMIT5wAQnjgHgPDEOQCEJ84BIDxxHsb98Xh/PLan51oegLjmjPN3zz7PWNr6
DjeHRUsbUX59lRe3t53TfRLLz7unAGxus9b5Vtl/uDnMEmYrJOLh5nB6PC1R8unxJNEBLsmccf7q
pyczlraQREAulJ1zlX9/PFaN7Pr0XMsDENdNe9a7Z59f/fSkaj1XId03v3q1MTNRTt8qfepNyXoo
9s0foSyqUUhn+dXM9irVS+3KdC5cbyW3N92YM2Nne/FrA33pbzAArKMjzotfk3j4dFEU9eROl1P+
bKye0Eid6te++eO0+5/7yu/cemNOuyu7s3+7sYpwBWCc7s72vqDN7U5fs/t9V13lAxeW3wDMYvy5
883PlJft3eUu6Vq6/Pbm1tkQAJenu7M9iqrfu1gmDpcuHwBmcQmPkTk9nha982rp8gFgou44D/FA
mHS+Tu8nn7L69OzP/QKR+9w3V94BXJLuzvbEDWmdRtx7Vm3i7MKNYKtCqG9+Qt89Zp3z07rQi58A
AAxnSURBVOVXr3bWp7Fu4t42AJiu99x5O2UTudv5UmNmVoENffmX+0yY3HLSudt+tT6nb3pg4UXm
reFZT4nRNAe4MJdw7vyCLfeQ1yWKBWArHXG++R1oAEAWrXMACE+cA0B44hwAwhPnABCeOAeA8MQ5
AIQnzgEgPHEOAOGJcwAIT5wDQHjiHADCE+cAEJ44B4DwxDkAhCfOASA8cQ4A4YlzAAhPnANAeKk4
f/fs87tnn1erymrm2qnDzeFwc+icP0v5ADDQTd8L7559fvXTkzWrEsvh5nB6PGUtXxRF1ioAMNA1
drYv/TWlM7MFOQDL6W2dd6p3U1ehWLbjq5fOhmXZrq16pOs5V++mrubXl2y0cTuXH7IL9Urm1j8t
qxXet79LH5/EcdOLABBRR5xXwdZIvkb3e/3Xvuk+9Z7qarrRfV3/tbFAFXh9yyfUk/vsvvRVvj7R
2Gg9idMS9V/0+Iw7bgDsWUecl2GWde48t0W7t+7orPp3huK81jw+7a8jS2wFgEXldbYPMaWzOvea
8OjXkC+9v53Lt/vkAYhu/jgfrd0JfHaV6IGUe238XMen6mDIrQMA+3SNV7ZTOj2e2mf6+26mB2DP
dhrnIxIleghl1X/K8Yl+oABoy+hsb1wTPvvd2427s86mTmOZIZ3GfRftz6XvovfO+bn1n+v4pLer
7x0got4474y64TMTEvnROT1kYqAh9R+4O1kXn2fNX+H4yGyAC7PTznYAYDhxDgDhiXMACE+cX6z7
4/H+eGxPRykfgOHE+SL2cDPYi9vbzukVyt/D7gNcFXE+vxCDmizamB4+Dg0AsxDnF+v+eKwazfXp
KOUDMNw2z2wfMQ53ZyG544KvMM56u2m+1fjufZ3h9RPe9Zeq+S9ub+svlVFdfzVdfr3y+++lALgM
G8T5jONw544LvtU46xuO795WD+n0S+2JvhUB2NZ+O9uHZFVunm01zvrexnfPJb8Bdm5HA6ROHIc7
d/DQuq3GWb+28d0BWMiO4ryYbxzurcYRz3KF47sDsJA9drZ3jsMNAPTZUZyn8/twcxgX8KuNI14a
90Vk+iqjj88QI25Sd1k7wJo26GwfNw739PKHLL/QOOsrbDf3a0TjbrSBCw9cHoCVbXPufMQ43O2X
shZuz1xunPXGTWUbju+e1gjm9g3lox8Tq2kOsLIddbZfkvXDbFcJup+aAFwJcX4hlktQvesA+yfO
ASA8cb44444DsDRxvoj6ReYbjju+Fc8MAFiZOJ9f1lVpF9mY9hQggJWJ88UZdxyApRnvPLV8NWfK
eOfbjjvets5xMN45wJqMd36N447v6jgAMN1+O9svabzzuczVkR79OADQsKMBUq9wvPO9cRwAgtpR
nBdXNt753jgOAHHtsbPdeOcAkGVHcX7N450PNG7c8a3GX9d2B1iN8c43G++8tPS448O/Xmx7HACY
wnjnvdNzjXd+1nLjjvdVr+/XuY6DpjnAynbU2X5J9hNmmyTrfnYf4EqI8zDGtcslK8A1EOcAEJ44
B4DwxDkAhCfOASA8cQ4A4YlzAAhPnANAeOIcAMIT5wAQnjgHgPDEOQCEJ84BIDxxDgDhiXMACE+c
A0B44hwAwhPnABCeOAeA8MQ5AIQnzgEgPHEOAOGJcwAIT5wDQHjiHADCE+cAEJ44B4DwxDkAhCfO
ASA8cQ4A4YlzAAhPnANAeOIcAMIT5wAQnjgHgPDEOQCEJ84BIDxxDgDhiXMACE+cA0B44hwAwhPn
ABCeOAeA8MQ5AIQnzgEgPHEOAOGJcwAIT5wDQHjiHADCE+cAEJ44B4DwxDkAhCfOASA8cQ4A4Ylz
AAhPnANAeOIcAMIT5wAQnjgHgPDEOQCEJ84BIDxxDgDhiXMACE+cA0B44hwAwhPnABCeOAeA8MQ5
AIQnzgEgPHEOAOGJcwAIT5wDQHjiHADCE+cAEJ44B4DwxDkAhCfOASA8cQ4A4YlzAAhPnANAeOIc
AMIT5wAQnjgHgPDEOQCEJ84BIDxxDgDhiXMACE+cA0B44hwAwhPnABCeOAeA8MQ5AIQnzgEgPHEO
AOGJcwAIT5wDQHjiHADCE+cAEJ44B4DwxDkAhCfOASA8cQ4A4YlzAAhPnANAeOIcAMIT5wAQnjgH
gPDEOQCEJ84BIDxxDgDhiXMACE+cA0B44hwAwhPnABCeOAeA8MQ5AIQnzgEgPHEOAOGJcwAIT5wD
QHjiHADCE+cAEJ44B4DwxDkAhCfOASA8cQ4A4YlzAAhPnANAeOIcAMIT5wAQnjgHgPDEOQCEJ84B
IDxxDgDhiXMACE+cA0B44hwAwhPnABCeOAeA8MQ5AIQnzgEgPHEOAOGJcwAIT5wDQHjiHADCE+cA
EJ44B4DwxDkAhCfOASA8cQ4A4YlzAAhPnANAeOIcAMIT5wAQnjgHgPDEOQCEJ84BIDxxDgDhiXMA
CE+cA0B44hwAwhPnABCeOAeA8MQ5AIQnzgEgPHEOAOGJcwAIT5wDQHjiHADCE+cAEJ44B4DwxDkA
hCfOASA8cQ4A4YlzAAhPnANAeOIcAMIT5wAQnjgHgPDEOQCEJ84BIDxxDgDhiXMACE+cA0B44hwA
whPnABCeOAeA8MQ5AIQnzgEgPHEOAOGJcwAIT5wDQHjiHADCE+cAEJ44B4DwxDkAhCfOASA8cQ4A
4YlzAAhPnANAeOIcAMIT5wAQnjgHgPDEOQCEJ84BIDxxDgDhiXMACE+cA0B44hwAwhPnABCeOAeA
8MQ5AIQnzgEgPHEOAOGJcwAIT5wDQHjiHADCE+cAEJ44B4DwxDkAhCfOASA8cQ4A4YlzAAhPnANA
eOIcAMIT5wAQnjgHgPDEOQCEJ84BIDxxDgDhiXMACE+cA0B44hwAwhPnABCeOAeA8MQ5AIQnzgEg
PHEOAOHdbF0BAOALp8dT7iriHAB25HBzGLFWM87HlQIATFG2yEe0y0vOnQNAeOIcAMK7xjgf3ZXB
XJZ4C2Ys018IEM41xjnbOj2e6pdonB5P9X/DC1mmdkVRFIebw/Tyz5bQuUDWQUgXnlX+XNsFtnKN
ce5yv7053Byqf1cSKn2ZOstBSJTT98fvPwVElxHnjY+G9q8rfxD31ae6OLCzSsPr2VdO+jiQ1mia
p5fs/LV6OxLvb+cfZ+f72Pd3sugXi86DUJ95PV9rgLlc5n3n9U/Gxkdn1gdlohy2Ur4LZxOxmm73
7Xe+p2u+v4tuqP21wN8tXIPZ4nxXHxlzVWZXO3XB6l+wphzz3HW9v8DF6Ijz4efb0vrKmat8LkaI
P4Ct/p5HbHeui+mytmu++eZPnz9FR5wv3bQN8dkNDVv9PY/YbuPkwjrbNd9886fPn2K2K9uv50aX
+tn3K9nlTTjOAMONjPO9fbzOcpdw52XSnQuXSeMioxGyLkXc8Divv9HG1xd/WkCWjEvh6h837Q/l
9T990vXp1Gjtna1zYxONl3IrzAiJrqoRb+KQ5WfU93+k7+9w+E5NrE9jK7n/L4Adyruyvf7/fA//
5zvrk8jdgacbh8xntMOXd0+NPsLpL1hn3/fE8rM0jkf8saVfGrfdIX///sjhAlzmfedL26q1dzEG
HrStjrP3FAinGed7Oym+rawOfBblOAPXYEhzovPzUOscAHYk3Xrpy3txDgD70pfZiaS/5BHV9nkG
dJ+1AiC03jg/3ByygkdKAcBWuuP8Mh6TMu7iqdC7DMB1GvkYmfqvjRuI+24uGhKufct3zu+rT6Iy
jQEx2+UvdPl0X/mJ/UrXc7mqAhBR9xAsjYdNppOjCvV2ViXiNr3d4suvC1nl1Gue2ERn+VmPIB2o
79Fyif06W8+FqgpAUPu9FG6J4Tc2z7+BFdi8ngDE0t3Zvuj543bhZXpV7emBA8HWew6upKnqvD4A
nbrjfNGHayZyt34yPnGOfPb6LH3ufC47rx4AW9njY2Q2aXBLSgDiGnnufIle3yFlNpYpG9azBH9Z
TufVc33jcWXNr16dWM8ligIguozWeaNTujNZiy8vYcu6sapv+fR2OyXunetceNErxvvqP9fxAYCO
OG/kRP3Xvunhc9L6lk9st3OVITMnXmSeNX/4MUzXU4QDXIMRn/Z7PHe+Mq1eAPZj3LlUcV4UIhyA
fRidR1/E+e3t7RyVAQBW9UucP3369Hg85q58e3s7Yi0AoG56nv4S53d3d6OL+PTp05QaAADFtCze
7zPbAYCBxDkAhCfOASC83xRF8fqPr7euBgAw0tu/vC3ufhx/4h0A2IP/BWHAMceM3laAAAAAB3RJ
TUUH0gEGFickdUTongAAAABJRU5ErkJggg==

--Multipart_Sun_Jan__6_23:42:34_2002-1
Content-Type: text/plain; charset=US-ASCII



--Multipart_Sun_Jan__6_23:42:34_2002-1--