Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!news.mixmin.net!news.unit0.net!takemy.news.telefonica.de!telefonica.de!newsfeed.xs4all.nl!newsfeed3a.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.000 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'python,': 0.02; 'programmer': 0.03; 'jeff': 0.04; 'value,': 0.04; 'yet.': 0.04; 'output': 0.05; 'assign': 0.07; 'received:198': 0.07; 'advice?': 0.09; 'converts': 0.09; 'data:': 0.09; 'derived': 0.09; 'ex:': 0.09; 'fname': 0.09; 'indexes': 0.09; 'python': 0.11; 'language,': 0.12; 'wrote': 0.14; 'creates': 0.14; '1010': 0.16; 'csv': 0.16; 'etc...': 0.16; 'filename:fname piece:signature': 0.16; 'forth.': 0.16; 'iterable': 0.16; 'lazily': 0.16; 'modules,': 0.16; 'rewritten': 0.16; 'subject:CSV': 0.16; 'variables,': 0.16; 'which,': 0.16; 'files.': 0.16; 'language': 0.16; 'wrote:': 0.18; 'file,': 0.19; 'received:10.0.1': 0.19; "skip:' 30": 0.19; 'example': 0.22; 'import': 0.22; 'file.': 0.24; "i've": 0.25; 'values': 0.27; 'header:In-Reply-To:1': 0.27; 'skip:- 40': 0.29; '(this': 0.29; 'characters': 0.30; 'lines': 0.31; "skip:' 10": 0.31; 'question:': 0.31; 'way?': 0.31; 'file': 0.32; 'lists': 0.32; 'there.': 0.32; 'run': 0.32; 'open': 0.33; 'reader': 0.33; '"the': 0.34; 'something': 0.35; 'there': 0.35; 'method': 0.36; 'received:10.0': 0.36; 'similar': 0.36; 'so,': 0.37; 'too': 0.37; 'list': 0.37; 'received:10': 0.37; 'skip:[ 10': 0.38; 'to:addr :python-list': 0.38; 'files': 0.38; 'little': 0.38; 'quote': 0.39; 'to:addr:python.org': 0.39; 'how': 0.40; 'read': 0.60; 'helps': 0.61; 'length': 0.61; 'new': 0.61; 'back': 0.62; 'decided': 0.64; 'more': 0.64; 'different': 0.65; 'love': 0.65; 'skip:1 20': 0.65; 'charset:windows-1252': 0.65; 'export': 0.74; 'analysis': 0.75; 'as:': 0.81; 'speaks': 0.91 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=riseup.net; s=squak; t=1410663104; bh=bf7XXRX875zjN+wABJphHDThqQMwWUKhxprAwLlowAY=; h=Date:From:To:Subject:References:In-Reply-To:From; b=N1Jd/Pw+AY6HJWymhWuttELfUAaxusbcYWqHU8uaQQ6zDtMgLGJKJKsLJAOczV4zz 0FdMapuuky936ZX+YQUVgpynKQkcObYwIwhMmJ0KB5wVWzPJom08PUA4268Uw6ZIzI kYDDSEiLS1MokYy8Djojso6EnI4O7ZlV7f/RTmQw= Date: Sun, 14 Sep 2014 02:51:25 +0000 From: kjs MIME-Version: 1.0 To: python-list@python.org Subject: Re: CSV methodology References: In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="NBVVKKD4s8eO02GqNhGtEiOHs2c06W6E1" X-Virus-Scanned: clamav-milter 0.98.4 at mx1 X-Virus-Status: Clean X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 302 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1410663113 news.xs4all.nl 2839 [2001:888:2000:d::a6]:57979 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:77858 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --NBVVKKD4s8eO02GqNhGtEiOHs2c06W6E1 Content-Type: multipart/mixed; boundary="------------010807040106010105050403" This is a multi-part message in MIME format. --------------010807040106010105050403 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable jetrn@newsguy.com wrote: >=20 > Hello. Back in the '80s, I wrote a fractal generator, which, over the = years, > I've modified/etc to run under Windows. I've been an Assembly Language= > programmer for decades. Recently, I decided to learn a new language, > and decided on Python, and I just love it, and the various IDEs. >=20 > Anyway, something I thought would be interesting, would be to export > some data from my fractal program (I call it MXP), and write something > in Python and its various scientific data analysis and plotting modules= , > and... well, see what's in there. >=20 > An example of the data: > 1.850358651774470E-0002 > 32 > 22 > 27 > ... (this format repeats) >=20 > So, I wrote a procedure in MXP which converts "the data" and exports > a csv file. So far, here's what I've started with: >=20 > ----------------------------------------------- > import csv >=20 > fname =3D 'E:/Users/jayte/Documents/Python Scripts/XportTestBlock.csv' >=20 > f =3D open(fname) >=20 > reader =3D csv.reader(f) >=20 > for flt in reader: > x =3D len(flt) > file.close(f) > ----------------------------------------------- The csv.reader(f) object creates an iterable that will create lists from lines in f. The list will have values at indexes based on the commas in the file. EX: my_header_1, my_header_2 111, 0001 101, 1010 100, 1001 The csv.reader will lazily make lists like ['my_header_1', 'my_header_2'], ['111', '0001'], ... and so forth. Your program above will take the length of those lists, and assign that value to x. For every line in the file, f will get rewritten with a new value, the length of list which is derived from the number of commas in the csv. Also note that the csv.reader speaks many dialects, and can do similar work on files with different quote characters and delimiters. Generally, I prefer to read in csv files with the standard readline() method of open files. I do like to use csv.DictWriter, which helps me to keep my csv output tabular. -Kevin >=20 > This will get me an addressable array, as: >=20 > flt[0], flt[1], flt[350], etc... from which values can be assigned to > other variables, converted... >=20 > My question: Is there a better way? Do I need to learn more about > how csv file are organized? Perhaps I know far too little of Python > to be attempting something like this, just yet. >=20 > Advice? >=20 > Jeff >=20 --------------010807040106010105050403 Content-Type: application/pgp-keys; name="0x8A61431E.asc" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0x8A61431E.asc" -----BEGIN PGP PUBLIC KEY BLOCK----- mQINBFMejQkBEACxte4BKdCPoHswqJNJdc6Rqq6vHghTS5z3hhhPUmDtiLimHlhw rQFY2RvViqMkjKqzyn6csAZjk7xpeZQWle+4jRUGkd/yI0EZ4LhHuPeVycENoXur f/l2kFNN8r0pNJBUUzg+nBjJ9lrKzPG0vY8X+jV85iHt/+Lmb6RLgsbLbc+TFxzF uilolLDJKxjLZoYfgjoteYskXYfST6ZVrmHij9j6tZbP/KhU4C8mIL7V43AErkJv 5x7D7qsGyhpy9t9S9rayF1ZtpHOBquHjJ+EW+ISc9w8azguF2hJngyoHJZoiqMSd vJOwfZypRvVw2MoY6+8j90EbtzdLfy7x8hFszFBmMi/vGR+cAMWFvoX/inJ8I97x 2/O3Js6/KhVkSjESMDBKn97te3QtzyayqCXae/3u3ZEYYfdcq8aXlkgQKVUebzHu bszknSZWeT5FPYBgq62va6xolnMvf7vtyBdhoF+9EeXUV6UQdN7a+A5x6gTozeAv +98jwZtSl7b+HaQicPQDaN+1eZci908SmL20Ul1gf5QWaoZTY2KLH3RbaKqB88vR Lp8Fhv+1L5xUae3bl6ka9y4RXITpy5Vp4MY/GWEk2gdcfvOj2+Ol8nwHI0l/M6sy tf7TuCwWKuaCarpzj4PMtzyeFk0svvDeR3bMLBWGd0wzisc19ssE1NrG6QARAQAB tCBLZXZpbiBTY2hpZXNzZXIgPGJmYkByaXNldXAubmV0PokCPQQTAQoAJwUCUx6N CQIbAQUJAQesAAULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRD0TkGtimFDHpEy D/9CkkCJHpSfBMM1DAHISBS4xkc7R7cVudkJ4qC2jylO9pj+FBBwh6MfAAxUD72Z auPRq+OKpBpp+ExLNpPnSPqEiYNTrSy8ddwFBIzhpqVbuAUW6VT4iFUpgWhaKody STde2oUb88qDpaBmfByL84BzML5N5eJcZoqSU4uXd4uHSiNgATPdvO3xJ/gQZxGg YZuNOoevaytIdBdxAVAsS9iUAGsk67UuVv/d2H6Ty2fhgcM4WNTyWrWq7uTpBjph rcBF7gn09yPOAZqBkTqKQVlCTkFLctdzDqKXaWYhX49EQ/vBGpfMZSekk3aDNOs6 MCW8bn1GJWt5il19TOY4Uyp+EN3O0izE0qY+pI1ibJG8Fpdwv93kyXXxftixj8rF 9oVTQOWMxkAXJVwa4R9TBw5EM4idKFIQOukYGtUljWlzxKUawNO+jWdzBFj6m33N zZd3Zg9jmwhyraB7So0CAXkh4uxXYVYCJKqsJV18Idmxtli3lGrvb28tT4IOk/Wv lPasrIrnKHjYwUtyzIgvw1hIzh+eghKVNBZyhqhj90fbazoUn3Y0m+Fvh9BbdyMl +CIJ+NDumUYXpmrxbxJmi7ch+3CdFJUKcH7h+NKUOQbhMoBI8OuwU6MFfPA1ObpH 8kZS0009AhkqrTnDjWxuEI8gR1Ucznt10bX5aAoAf5PdR4kCHAQSAQgABgUCVAat dAAKCRBipyw6KxJToGP5D/92+EwN0sbJbzp+y4A+nXsvalLHlE4dxE5+td1NWP2w Q0WdorMPW0viiWI9uY3QV5F8WbvZ6jyRJTSog8UfKyO5DYyinREyLjmae2oOdnt5 0YWlmv3XAh3M2xF5ztKD5qxbEc1ZI4C839Lxxr9UrxgWbMb472GDm0SBedJGargt aWGtNAyg2BbPUPY9AfVBCh6/2rOxiUQ1vFYqSHZmyfZRn+4rJJDEKTkq4PiCGRE2 upIf51WREw3hhZ0JOw8Fb/haH+F++VPGH9c4/po3Ibwv5W8Ub+kTKNZVW1W7uDBA M2NPtCDMymHv3+0eiDa3sFzr065bhTUMOkEapFmJa0syBMv0g0drOPcmucs7o+51 g0ji3YQgKqQXUR3VFkcSBUn1jMzU3i80u06gy/t/6Gurf43CEelp1kLtk3ECqI8o N8M5UhLg6AmfCcemvd87HUWyNOx8Q+nWQYr76zwL34IUSvdztJuPb6i4V+gM5Asj Sc5OkJuOW1iij9V0VDKK829gjFhgaMmhqRaQbGW/pVoosvjqk3vBxGoiXYbjhEHQ 8jNcyBhc9S9WV8dxb5Hzb5ImxQaPzSlCy2NU6PdTtNKfRTkYtc0eTa6pSlRgaye6 JZJVuUNcIE6PfPQNM4YfPahCsi+te2iEs+8DHUi3sfXJOWiJUwf/b3eiskOe+pGa JIkCPQQTAQoAJwIbAQULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAUCVAbObQUJAeK+ WQAKCRD0TkGtimFDHgqnD/4nIjj0v4pQaql9z/u8t2g7TIs5DGnq6n7fvLEaCYDY d3tqqNRPTxNeyT3+QwJlUhxMnunNpsvvF8Qxzs8+OM8rgXxrHgZ/DPMi1oJu6rZp 8boYiClodiZROVu/4t5jWomV5dwALKl6szQCrv+IMm2PA3CUdyjQ8zzP92RJ2+vM fwbVWE2eKocuYuX6MX0XSgcv2xS3jZp6lRW9Qe7WyPScth43STb03EK2gz+05Uu9 bEb/AaXY1aPNy/CILwgDgGMlMhIWsPn+qSxRDrMU0jf14yx6lydXrvGMkIrAzxcn DwNAjvVI04ULrrS+bd+PhsLzgAU68P4BMips7zO+zQhvqBWCn9k3Y9KvDuqJ8v58 2Ylwn4wiGQSg0oldYAApBt3EQzBkH2BBmQRcV7FYjlsfXbeA1PxkZCYtyPG9SBKS bXksGiGYUhirCQVw9UhpxmWKTWTdzhZZHX5IHDbBSAl5PwBayAaQe8/pDXQjESoc s2cCFvl2IxqS3alyA9eGCOyPYS3qpilkVAzF6btEFBIYk54OGay8fpGUGlL2RJCF 9VGinlzfFNdeHFH0OHCBeH4tDDnV4uFkYTI6tyGir0+voUPJiiQV3UE0L08ZboBB JHKc4ig5Vw+YT/Btv1BNWLdC2ShOf4YLmdtYdUlf/o6nSS9RbJUA7AL5+ItTovR/ ZbkCDQRTHpDUARAAscY/wM/5Vz3RnY5Ri/Sypn55NmEgcw2csvgjl6G3OkqxgMJn SErVOomylKDrXtGmzJmf5mIL4VkaZa3yjUshkxcavX4LT1xZe3lLN4a4plyuqOl+ pekA9StKsbCVw3lqbgeatNfw1pCDX2dyeKlSAEWenJ40kPqlwJVAT3u6z+l+O9+3 l+IlCGm0+7KULFF2Im/Rn7ZkRMpixoULkTMNV9p2gJY+wb4WSMmlDp3YRI/sD48t M06T9NR/Q7D52expCu/CeK0gYOD0ZY7uoWDmYQ23pwbSG99tUFq9OFi7YKfwsS2+ q0ORBO196BwdRHvDZ02HWisdhp1uf8Qsn3v/qkCjMgqm84UBKIr2TXk6dNZstsBM tLVAseyF+COcAARTb7HEa8audRoX/rTEgHptgfULgOa+1aN2rq9ld6SSgofszC3T ILef5tAEbJyvtG95970MUGLWc8YdYLxXKFJylqc8MHw1BEDhZuu6eL0q3LJy8LpY vFcyqkNatOhDh1CdHOi+tDU7jDXsWQJ+ag5F9NtuKhd9ja0Qb/x6YwtHw9FYU6hS cFoSzrTPdtA5QpNK5+L5iqDvo0RiMk8Fb4XvU9sF0S0T6wAzym1TvbZa8YMyVcRl SZZAJNRawzLxEoIJW233MsTeItFnknrjtLZmOhZDft6v7JDXn+B/AaaNwwcAEQEA AYkERAQYAQoADwUCUx6Q1AIbAgUJAOa2gAIpCRD0TkGtimFDHsFdIAQZAQoABgUC Ux6Q1AAKCRBeAjY+7qIDcGD6EACtrS4ucJY1PEd+k/LdQ2J6bxUGS/RzjBmUeoh1 B5/3rHk+3bmh52c2n/z79UlE4nS89GxpnIwJQAta2nQKRVYdTveHVYj/zH9ANHBE Kp+Xzq9KaArVqouPbGoTXoRZ+3jkm+3utbApvQsFxazThpagBsutKOiDy2odGjC2 /K4xQIRVCFrtDP1+MBLXKteqqCLffy/dt0J/b4sx7naUjmSc6kiOj/M/I8zAVCKf jqLSfGu/ykTvI7sPeC70ZqYnPgBeUQISxqk0DVb7OvLmxucplJa2hdy0zsYJzJ/E CadqVsN5+63SosOlSgJi+bh5h69lLvYoCPLgidUqjFGfcimq7vAHJV90F4N6PVIs HsFpuf+ANHnne5NnPBp2awJYVQxqkMrMaoDk0ErbrPC14ZLAeKQmpbup3RAwvmaQ unGQE3sPBVPt/DyimXJZz0ZHt9nvNWMQ8mKALugvC5fb5RANaPX+wo/k7ONCx/nG QddHGcEp5qe/LmPUvB6vvo9+2aUs7CovlR+nQF7amBs4eXURYOievsELlwg/FIAI LUqeJ8zBw6bDKa7SYfkhNTlMY1r1ECmPE/nEmUsBY4BAXZj6ks/jzLqSILmHn1TC SAn0rrGtmi8HTfmTrB4FhMqRrUACUVsYU3LVNiVJwzm8crtwcfnA2zH39+DZXsP+ AD1aPuEOEACwBRMoDLpuhyjM1RwcDbuAHTGlBHlLSuD59Ewwp2v1yHCOEZi+EkH+ U41PLKwYwJ8tS2bIQ78Ohp6U8xC6gNShmkaJyPT0hmDMXtPLeP3vXsYZE0DJIDiS 3Y0+eZtB8PFU75x9N1M9Hv+NW5A2LnIDLID1lNhguxv4Zg7HomfJ+xqSUoHA8zAH Q3VJBxo5UrZ17+iGArn2m/ZdvVkka/PCXxCc8yJmB7U9m5fOxABBNdUlyoSg5d8/ CQ0hAssm0/tYE0BZEwmuq7d/5gE/eyQrm1BibteGqYThHy61nP7qCCSoG8xfo7tY 53OIsZ/7r5mfBjS501JrnefnnLOy1MetGvJoxhMlA/U6bW+NyPXf3xnOI5E9SwGR wvmI48HDk6kEmT3PE6Tab1EhEKJI/s7ckDx+yqF2zsMQpbKnl3M3Ay4co9q9UFPf h/HYKREeL+QWC/Qb4l6Dg9QXo51rfzC5TJhK08xaZQgkZNxIlU3CAFzGWYyywfyN AcstjWitgCUMTm2zXN9rR8DZwPKw9x8l8XhBHAU9cUnE/SWiOQW01BGEA3SHDVr9 Zgh0tfkYu4FY6IoRtYRL+FWu1RJW9Xnpb25Qjd/GwfmwISwP5Vpq001xCKpeaPRk aZVCoU/6ARjYoXg8NYMSvVjv2YI/dqnTQNwiUp1QyiiqJibIRpTFQokERAQYAQoA DwIbAgUCVAbNLQUJAdWKVQIpwV0gBBkBCgAGBQJTHpDUAAoJEF4CNj7uogNwYPoQ AK2tLi5wljU8R36T8t1DYnpvFQZL9HOMGZR6iHUHn/eseT7duaHnZzaf/Pv1SUTi dLz0bGmcjAlAC1radApFVh1O94dViP/Mf0A0cEQqn5fOr0poCtWqi49sahNehFn7 eOSb7e61sCm9CwXFrNOGlqAGy60o6IPLah0aMLb8rjFAhFUIWu0M/X4wEtcq16qo It9/L923Qn9vizHudpSOZJzqSI6P8z8jzMBUIp+OotJ8a7/KRO8juw94LvRmpic+ AF5RAhLGqTQNVvs68ubG5ymUlraF3LTOxgnMn8QJp2pWw3n7rdKiw6VKAmL5uHmH r2Uu9igI8uCJ1SqMUZ9yKaru8AclX3QXg3o9UiwewWm5/4A0eed7k2c8GnZrAlhV DGqQysxqgOTQStus8LXhksB4pCalu6ndEDC+ZpC6cZATew8FU+38PKKZclnPRke3 2e81YxDyYoAu6C8Ll9vlEA1o9f7Cj+Ts40LH+cZB10cZwSnmp78uY9S8Hq++j37Z pSzsKi+VH6dAXtqYGzh5dRFg6J6+wQuXCD8UgAgtSp4nzMHDpsMprtJh+SE1OUxj WvUQKY8T+cSZSwFjgEBdmPqSz+PMupIguYefVMJICfSusa2aLwdN+ZOsHgWEypGt QAJRWxhTctU2JUnDObxyu3Bx+cDbMff34Nlew/4APVo+CRD0TkGtimFDHlq0D/4n BSsmtQCyEkb+nNnKr8RjA9LJHO/sOeSOA+Qp9+NUI5xFPP2Rla2Y2uNuLnmh/bC1 kRlSyZ+yniU8Fppawe0MXwuytHCfAk3bCR3aEYdReN5yUsA1cOahZGpojS5mxVpe NJyzW2pAgcV2v8gVCnNcik67K7PMvVptetAC1fwlHdGpzurV8m1fd+6xocL/ITwh +ibG7GEcWe/1SbLTATZ6OQwmszQZmjaPknPF+ZQugT8P4f0cFcsmiNPL7behRhgz k0ccbad+Y6nlqczp5MDbO8l7G5V7Ez4iwdH0a9OL7N20cfvKrcpRCLqjSIbvXgiD BK69TZmV/5DA1TJ/kxDEewbI00LMZrZKrLoQ2CUCAR+5/EGOPv2K62rDJz9WCLuk VKhfufOMpTLwl1cR60luMWIow4+f4KHNCAkoV1dy1KZ7X1ShNYhzqqK4jm6nO1Xp 6QDsf/i3e+Mtqz6u80/bMXk3fT9hxlcCmOUSchh+vmc9fnL86+xQdSRI9p3x68Ik kP6zsAPjQX2ClseW8FHQPHC3NHsgBrVNKA7iVJDLLRnDHj/6HVicLhPd1zl1xqh2 SpPYdaIr+6tPZc0kxoQ74yno9QLLQxXGnGUMfPDuyK4OBxjNjTkewCfbMeVj/srW UpOfg53vY4eXzVi1CjtY//1JHYFq1WaiVRV7gX3DA7kCDQRTHpHzARAAy3xeAqwC BBafKKl4NaTbMlqGeBG6Xmb5m74CACfOFI9BA2ovepcVfaUM4PketZ21AsGdWRbE O1838f4Pv/BhEPLdIoHt6/b/hb54mk6JUKSDlaHU7ejhFHHFATscdoomgHGj71yp cUX70m+JClRZK2h6LhWiAQJzRXvN37dGVwgPGhbXv8/dn8pPsNKfPXKUkAGe4kcV l9h+qdBQlKLtsuMuo848FwPrcZvrAOhRd2V3p67tHmMICxnpNi8GvfXdkhpHXoYz /VyHlNtTU+zqmGhu6/8DtdY7yRB9hzQ4e+cMSL0fSF7cf7o8PC0ubOGKR/68hiDs MeMHuMMO/OEWEna5IuU9UQTPkuGcQQcYFPiTmroa8UMs6PrRJU6sTXOC9rJ6X4Jh 6CYf/zep+Fy0Ba87TieoZoYNkZYDkEFO9BZV1fqjF3VmgLnLV8JBimE/yODiPSfS RUVzQaA4uDbotKiySr4Sz4xxRs6iWP39y6iMEW3OVCfyCjE65eN0OOtfOyLunhLh J7lnuPLHTM2kRqFfyqXCJN02PFBYzbrq//0KyGZpJQXF7AoG5UTN9ZWa+JSyETw1 1wxxHQXJwg6gGVjlwpj5TYR8boqfB2i7KR1wDlBX2s731ujmt6SAiYGdljUBal5H FAWPyDOn32ySEUlyrch/6QfSDYXaOgwLVgsAEQEAAYkCJQQYAQoADwUCUx6R8wIb DAUJAOa2gAAKCRD0TkGtimFDHngXEAChd/QlcQOyIoZYRRkD447ixONl4b+P3Prv wYDC6t7IOgtueGqylOwXdQMcUjNcPgBFaajocOXw6iBDHoKmvmscBP2rVA5a0ubC hhfwI/RuW1VZJpMJpBUQUEgIcz2OQwd4GCwrDI9dpPgbK3pvzx/9719BLrPdsyNA uNPJcTqfEPFXhap8IJLUhMnmf7zqCb9FVtKR4Nu7A4h2qGorUqn6ckddpSu+GBdW 2Th3Z3oWnkGQ28i9mN436HA/v27OjRcliEc2SwmCHfrg6/CXqjz4A17Fn4osGQOU GaONaF15uVca9yjbrS2wQ0ExskqBNtl9hb/Q7NYo4B5I6jANmQ0Nx0PJu6nYb+vV razZKG9u9flNXjO362zWJLqO1jmCv590YtQ2LuuxEc23WfoQBica61x8BAXXR656 pZbXJBFLSbgl0FG1JRfJVdBkZZg8IcdhtFBZJZJqO2GaFytwcgj8HMsHZywrJtHc 1rgc9tw3mdH07Iksm2sFeuBGEGMZWKmiwJ/Z71p3sLY5He13TVl0SkieGp83oFpa 70+mq2V0l8daeumiR3epWYu0lP1FfwVY3xVAhiKC0YK0U0w7OUpXbEs0MFN07dKg MK2Vqun5C+YHyFZjE4uZ6KWSUK1RfXkLL2VC1MbbxBRLMIMpg3fnhv4hvpB6jmK9 f4aWFz0Pu4kCJQQYAQoADwIbDAUCVAbNYQUJAdWJbAAKCRD0TkGtimFDHnSeEACA UBwukUOPVicwImptFGECohTXRW2NkIDK3gGEYoGk43OmMrKsHWQwrVFFYWKRiAoG /wIIkGjf+oc0jJNegbxfgAi1SgVJXvaI3lMwzc8W04oU5Sg/HIkpTuxxTD0/S6ZQ KfmHCcYJVHAa3et8IrBMtD09KXn/UavzgllpUpYLDqFoeRui/WFLHkFXipq6dJTX SmDB2zfuiZENoFtFmM8rHzonoYRolTPOJTQEZmhSGI6KzOJ55Pwvywd1GC16ZeLV OGV+l8ntnyztTRVlkQEBOcvZrUieavwetCKyOoITUuZTjFHE+iT6BhMVQeDS6gUa 5zDksaSgHBQdK4dX/6jJ0C/RHC4cJ4RMMPO+AN7VPO+CkdZdyJVSSoYNFELLJI3K VPPQcVWlnFFdRGbhKzBZHNPxhwP/0eRjKFadEK6y62ISUFhNB/cuEYTv2sQtIJ1Y TV2ubicZnolwq1GtLrrmyU+P5EjXLIcFVVJn/fZLKERLb+CWY6J76n9bXVjUgcWG bS1Q3dJRSRZaFiN7b6LZnbjuw2YIbi/9JHKi0SuBUwhwAeCRlJ+520RE5O3i3PVG cxWAzRO6TA9VAAaPnaR+oEsUFinbJwbPVRjMlIXsbKf6COW8jr/iGn52lfnYVa67 4Wh39yShCGKROwDLtlnMvSmMk+/ZvFOTCtKwjxn44bkCDQRTHpMIARAAqnarcjtH 3htgGdBZeK91W7auLdWLSBTEFhVvvbw6RZHr4eVFM82WV3xToROQuFMyPpiKNJwT t4skhNjR51wyVqcYCRzmPsldBxvuPqklC7NZWum8glSu2Jm7JG8KiaEBFaRI6PZA AjpGisd8L4UlIucqFl4PdyWaaSCuxrylZinBSHVApRw+m4RkU18pSfe5mEeOwGM4 LU1FAlphrBACpH1N7WElNgPn8v/mEDMHCLajgU3eqMBZAwfa5MJiNB7SxM+itWxe xPHfMuG+1GnPncVgJwXnCsLvn5EAsRo0vYpsICwsELQdWauyd2MJ43ER7iqsYLRz PlXMUgvAkXhY138vhwxfX9JGM2b/vRih0zsICGp4cIvHF9UFEt3lnXJFpI6Q3+gT BrzVkb0HHNKObw68uhxT+hIcPWwHWrSPTiQRyFmICwroBhf2EUR1YFP5QsdrF21A zFCuh/8U5aYdMPTgeIG9AtjLTrnXWxuLrBanRQ252t6EfD3Z84/f6nsvVjBMRoxh NB/FSK/8UwSX9Iv17M/z7wo8ndjqt0gwML/WUgJYxbjSDDy2YGvw82845g7/YdIw A25R/b5bL+o2Sq4pGfDXzh7ZCRetgNIIwlqm9x3ZnATtu/PpZ4trhxM6sgxDnTJI IfqaK6E8KuVjplgWA7FL5kmrLGZlXQ4mi4EAEQEAAYkCJQQYAQoADwUCUx6TCAIb IAUJAOa2gAAKCRD0TkGtimFDHpYzD/wLcmRLW5ixzviky82jF9dAYs+4F8QiM4r7 vgp4V2DQ8Kc1Ia5n/Y5FEs0kEZlFLD5mPFhqh5M/TB5qf+FW90hoZn51Xy/6NDZO PyiFBdLThxbkbCnrjPXj1x/q5Wq600kB6jRNmQQTLxdKeWRd1FzdNgGLileJ8AR/ 5gWo0JPquPvUObiHcs0cq0LLN38XowvzEFC+BZ/B/eHCBkIjStrZ73kL8gm4FjOh vDeckD/FXveHHjqQJyDXid3sbJxr3lb45FjvVyoB2z4/tLV+rBeOU/NeaaMPFBDj Qe9drkRbH8EuLRwuQdOve2OThqHsQjFBDXS2A83yCAbawGiyx92f5UMmwZ2OsBi+ u3nj4INU7/rou7BD+vOhji7iD7JqA9X3Qooo21iIKdEKrMQzxJr1Z1CdutJ3rw6g VBiYV9eecAOcAVYzAtdzIfswxBzETEqrqDjy2Vpi5N/eJqAMa7DigiDFzpxm0E3n QpevV6qvrTg0kVfGw5TcVaUy9pFmlmEGy7gagaXKlHLOH5c60mNot9yZ1/XU3BS7 Zd+E+LCgDRhwKiXSkYsLbiy3cj01LpCvm9U95um9sLIC7kSHoB8Rs54DhnO2z3J1 nYRhHSFy/3nfK9Qdlhf+19nLjA0dAcrnPew0zrYgvqkOOG48KtPOVGt7uO44+qta tl78xnPAdIkCJQQYAQoADwIbIAUCVAbNjAUJAdWIgQAKCRD0TkGtimFDHtIzD/9V Jl8PDA7/Jqr8x93zLCWPbVx6aE5y0WKIh97Jici49SER/LBJEnrzOkXymMnkiYcY nulmEJnKUDqF0O1TJeGGaN9mEvIu0qTn+UlHUBzdvSzrnUaMTDu8H8Rn5DU5bAew PT4cus1nd+QdHVc/Pjs0E6n8YHQCvvTZWgPAN757Vyqb9/R67gzFTNKbxRXtmjAs kZqDD4To7ci75QJ/Lvpd7BuM9Hf0ZxuKj1BHdqdXpqSLW49MTpDl5KLhjQLNMkna E3oE2HF637TD2t5qhqfP+hm2XnACKsCrvTS4/EhVhDbuqKO4zdxFqNJaGTjgQRK1 fL2aqkUAv4DGlygYfsuiLiwTY1lcdYag2aZfIkA7C0AnyOYVMcAEdqg/yMJgbJZU 6QabVtYK38F2tTd8xfq1bBVOXyG+T8T1otd1CWGOeXCoafqJY7l2CTwgR/XWkAha NCzKMpWh4mvGhwwR2b6MGSY3asbblJdYs47eNVER6Z2/16DbXb4F1TJxLY1F/XaU Vw0yaY0IusRbY5h5xoq9A7yVFNO7VlarmJE8z+icpekAnCw+z8biWDRnD8L3sX09 jlBf99IOpFxCyxlz62oToB/7Vigi9thnHsqdEKEokcQ7yCcwWaS1/0cc9HkbbuCt kBVwT5avFGku0x/YE25AdeBVgAylIws3COJxdJ9rYQ=3D=3D =3Dy5+1 -----END PGP PUBLIC KEY BLOCK----- --------------010807040106010105050403-- --NBVVKKD4s8eO02GqNhGtEiOHs2c06W6E1 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- iQIcBAEBCgAGBQJUFQKtAAoJEF4CNj7uogNwdFAQAK+fustgGLQkN8N6tSV63igy VdzNXjGEik6HdT3PnUBXooAddZfyHIhqhHsBYp6cmXX3eVhxk+NP3k+r4FN0x1D7 Fzb/QGO1noXTw3/vRYwhpl+uHOoed7pZJgs+FtDZck6TCqRebfgAvrEzrJqC9XnX KGvNEVNXk8bcKLfD+ZbRaGX0DKJTzC87OVghAr6aLZUYpBjjQxs78WQiT1mM9Ves Hxh8zbu/EhsJAb1KHtcYLZk7hI4xWtGW2HWsAg+Iiwk37GzrYPiGMB4Y5BD62DNc LZAwi6Rpa6faqmYL3nJOA0bF7jfLpyUDYLtMVdJlrNBFuCz15qw7tGB9xTszvDSm YwtybmB1TcqqCu4UIRdU7o6hf2dEfiG+97namBtc+sishDlA60Xg3AOZ4yh6c7XJ GsFfM7IjG3cQTmth4RGlkw4/X30hnMVWRyoxpLV4ar15pXEfeW50H2Eqq4bqNYt1 +blzYp9+T0/Y1caVR5Gfr/dMN+lTFzy2gd1T+ph5c+XZ/92yC13sEqg+uXjsSBuS WFNk+/0i3KOL1lJr6F9pjfve5vQ0grzKGnK9KzP8aDd+FPmwu6Lxq8SuHZBPSPVA xBNG0/Th9ZqM+3tQ9MLCfK38OaPgMW/PNhRqQeInfLW292u4b3dYPC2zbfSawskd eajc/fkbC7zsKk50ue/+ =vlEI -----END PGP SIGNATURE----- --NBVVKKD4s8eO02GqNhGtEiOHs2c06W6E1--