From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Ross Subject: Re: NFSv4/pNFS possible POSIX I/O API standards Date: Fri, 01 Dec 2006 16:29:37 -0600 Message-ID: <4570ACD1.7060800@mcs.anl.gov> References: <6.2.3.4.2.20061127213243.04f786c0@cic-mail.lanl.gov> <20061128055428.GA29891@infradead.org> <20061129090450.GA16296@infradead.org> <20061129122313.GG14315@parisc-linux.org> <20061129123913.GA15994@infradead.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------040105060902010605000506" Cc: Matthew Wilcox , Gary Grider , linux-fsdevel@vger.kernel.org Return-path: Received: from mailgw.mcs.anl.gov ([140.221.9.4]:53396 "EHLO mailgw.mcs.anl.gov") by vger.kernel.org with ESMTP id S1162118AbWLAW3x (ORCPT ); Fri, 1 Dec 2006 17:29:53 -0500 To: Christoph Hellwig In-Reply-To: <20061129123913.GA15994@infradead.org> Sender: linux-fsdevel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org This is a multi-part message in MIME format. --------------040105060902010605000506 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi all, The use model for openg() and openfh() (renamed sutoc()) is n processes spread across a large cluster simultaneously opening a file. The challenge is to avoid to the greatest extent possible incurring O(n) FS interactions. To do that we need to allow actions of one process to be reused by other processes on other OS instances. The openg() call allows one process to perform name resolution, which is often the most expensive part of this use model. Because permission checking is also performed as part of the openg(), some file systems to not require additional communication between OS and FS at openfh(). External communication channels are used to pass the handle resulting from the openg() call out to processes on other nodes (e.g. MPI_Bcast). dup(), openat(), and UNIX sockets are not viable options in this model, because there are many OS instances, not just one. All the calls that are being discussed as part of the HEC extensions are being discussed in this context of multiple OS instances and cluster file systems. Regarding the lifetime of the handle, there has been quite a bit of discussion about this. I believe that we most recently were thinking that there was an undefined lifetime for this, allowing servers to "forget" these values (as in the case where a server is restarted). Clients would need to perform the openg() again if they were to try to use an outdated handle, or simply fall back to a regular open(). This is not a problem in our use model. I've attached a graph showing the time to use individual open() calls vs. the openg()/MPI_Bcast()/openfh() combination; it's a clear win for any significant number of processes. These results are from our colleagues at Sandia (Ruth Klundt et. al.) with PVFS underneath, but I expect the trend to be similar for many cluster file systems. Regarding trying to "force APIs using standardization" on you (Christoph's 11/29/2006 message), you've got us all wrong. The standardization process is going to take some time, so we're starting on it at the same time that we're working with prototypes, so that we don't have to wait any longer than necessary to have these things be part of POSIX. The whole reason we're presenting this on this list is to try to describe why we think these calls are important and get feedback on how we can make these calls work well in the context of Linux. I'm glad to see so many people taking interest. I look forward to further constructive discussion. Thanks, Rob --- Rob Ross Mathematics and Computer Science Division Argonne National Laboratory Christoph Hellwig wrote: > On Wed, Nov 29, 2006 at 05:23:13AM -0700, Matthew Wilcox wrote: >> Is this for people who don't know about dup(), or do they need >> independent file offsets? If the latter, I think an xdup() would be >> preferable (would there be a security issue for OSes with revoke()?) >> Either that, or make the key be useful for something else. > > Not sharing the file offset means we need a separate file struct, at > which point the only thing saved is doing a lookup at the time of > opening the file. While a full pathname traversal can be quite costly > an open is not something you do all that often anyway. And if you really > need to open/close files very often you can speed it up nicely by keeping > a file descriptor on the parent directory open and use openat(). > > Anyway, enough of talking here. We really need a very good description > of the use case people want this for, and the specific performance problems > they see to find a solution. And the solution definitly does not involve > as second half-assed file handle time with unspecified lifetime rules :-) --------------040105060902010605000506 Content-Type: application/pdf; x-mac-type="0"; x-mac-creator="0"; name="openg-compare.pdf" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="openg-compare.pdf" JVBERi0xLjMKJcTl8uXrp/Og0MTGCjIgMCBvYmoKPDwgL0xlbmd0aCA0IDAgUiAvRmlsdGVy IC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeNorVAhUKARjfbdcQwWXfIVAADG0BO0KZW5kc3Ry ZWFtCmVuZG9iago0IDAgb2JqCjIzCmVuZG9iagoxIDAgb2JqCjw8IC9UeXBlIC9QYWdlIC9Q YXJlbnQgNyAwIFIgL1Jlc291cmNlcyAzIDAgUiAvQ29udGVudHMgMiAwIFIgL01lZGlhQm94 ClswIDAgNTA4IDQwN10gPj4KZW5kb2JqCjMgMCBvYmoKPDwgL1Byb2NTZXQgWyAvUERGIF0g L1hPYmplY3QgPDwgL0ZtMSA1IDAgUiA+PiA+PgplbmRvYmoKNSAwIG9iago8PCAvTGVuZ3Ro IDggMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9Gb3JtIC9Gb3JtVHlwZSAxIC9CQm94 IFswIDAgNTA4IDQwN10KL1Jlc291cmNlcyA2IDAgUiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+ PgpzdHJlYW0KeNqtXEuP5LYRvvNX6LgGMm0+xNfBh8RIcgkCBLtALr7Yi7GxRs863nEc+N+H xWcVSWnU3TrY26oR60EWqz4WSf26/Gv5deEXpVT4v9WL5vZinOViWbm5KM3Dry/Py7+Xz8vX f38Vy0+vi1heP8KDhIfUdA2tBA/vstb+iTD4MQqastD24oXlfF2UXy/aKRC+mosxlkv2pLS8 CPiZ2PCLXv4XGPwc/nv/LWq8ysuafr1MWV6Dbuk3oS6N2jhcp3yvy/uFE6GMCH2DUROK361U dr3FmKk0xJeRd+d8jxrOtnQQXJbxQnwR1ZRW6F2G+6G9qzzPw5y6OTjIXz4swoSfHP7xLvzZ GK8XuYKjfnhZvv6buHAmlg8/Lu/EV8uHn5e/hharvUhNFcokrE0iEVUiiVE9iAoiMHXg7lWD d2sV60XkLki3ISoWXqlEPqIOKrCigrMX1APvfJEvlZkMBaIW+cHNGhXLx9TNLpDSguioAAMF hKkaONF3fCEh2zOJCI6kvY6XFpiGwUeWS10EK6kjf0m6HlGR+EbFGmDqZtcrYS/cKemQEqpa ryyf9D+iov5vVKIEom72hDKC9v9aPWAVuu//QkIdkElYcCLt9T9E8r7/TXX9VftJ/yMqFl+p RANE3ez/VYuh/z0vSsxDnJGQnmgw2w6dHPgPEZ/2hElRyC0wW+IITFTwEhTE4hMFiy7vVLGs vNM7vwMmanEmBh9vo+Uh245yxaoiL8Gw7Eol8hsVm47f7fq/6CGUhT5IasipGl7FDhSkCyqV jAB+F6lRqZvdESNhHAA100EGQwBAUB0aFetQqQzrgN/d0EEqWxPBRAkmPXVCeCaCPXW89Pe5 MCadg9fWKE7PbFbrGiVRmxv1iuEBercpgN/dsFkpl2NBjAJBDzbogaY20mMKXigoKlMBv7ul R+gOY4oelu9FAvYwOMPvsofBGQF97yMyJlpHSB1CTfAtQL8hXncQ/Otvw78fX2OfhKxhwjQE xRCodjp2JXeL1SBqUVEgD5H1SSmIsT2cbi1wvw18rkvs+PBnOyPh3p1xLPbuW4KXB0J66Ahr Yt5KVlgXrQjxkNW1xbEebPZWDYgcMrhEdMBtQWSaHSMF2z1wusNou+YAaCMqY2C49F6aYPja hu8Ow9lgeJVFbO80ALtCt+MHYuGMy2G7WdFFCp/zT2BHh1vCH960mh0d7iaJIFYiH7CylDkL RIUwAds544atZ4dGXRoV/S2bZon9Ya5F69kZzp4kEWcfhAerjC0OP6UiW1lu/ojTK+5iY8lC XwPCoMOf7LrR59nc/iqKwvVKzQoErC7KA0sP2MAZl2Nm41CtdMFc1kbw2w18RLublrMbR75J I5YXKms6BPt0rsIscyrpi5HvHcE+wNsccXnLWSHSQLQ3DwQ90g2sCSJ9QGSHtQoXLdz3JGzk wOt2u9fcOLi+wek6O8B98X7D96ssulas1BriA9+SftIDtnDG5YZKU/QN1C8XEVSPZUHnk+kx 1zhFkUvMMakr6nskig2tr4tXxXcnJIJXJhx3hrKpXDNp0C/QQrxAekfvlU3vM7w3CyL5msi+ xmWaUzmT9SQ8DAOv20y2LlWtIHDYlLELTtHRtNP8torqcEqhJgWCQU5edHpi5YkilZHPmzbj gC2lykjfmjg1KSq1+kSUUkWRVN0pEHFKitBVJ0wiSGXCcQepjCMujYuOZjt8pjfwGbsXobih nBhJLEoOhlhRHLwnEHt7PjcZGzJ+rkyl6gwyWPOysj0NlVVpJKT1OgAOCVG5eyK5uLY4lIsn ZgdLkpOIzErgcAaVyhNTcRVGEcmowjXWP1N9cEplFJHYXU/f7QVQbOXRAKFM3wXLEyzgj3YB e3PgsySSj3vhgD50cnA2pdL03HPcsJxNx3/NNVu5yNV1625Z5Z0215s4UkHulYDyMY/bH+SR ohJzk+fDVmXEYsT8MLi5cOE9hh867ZAEnqdVHaooMuWJAgGu2FJe6R6x6TNOt5sulAP1RQC6 qSSKI56/bw22VXdIoiiIodLjTp3MkLvphKkks/ccj9jPqP2uVJ5FnvAZzWiXx/68pViTRfqg UJlIHeDs0n4Rcyft96b5fMSldHnh5it2xoOeV37FbnZC8aFIpPWHiR6wV1lcYU7F07xxeGQG wGZjQGjeT4owkFHOA7RJEoU4idSEA6wx2dUrlWEqATs9x9snAGxzpnWdtz3i0RjxnFONqNIo 4slU5jOmV1Is+DdFO/ZQFYbtDrsysrifm00Dg6fBOWivSKRob6IHIByday5zKilHVA6PTAPY 803TgKZ/HdfQu04w7Qi2h35MPw8yKUmHXWve5oCEZV2jUNRjHvV/2GbO/n8kHJ4wB5pE0gOF ynDgW7Ve+mfSARNemwueiC/TsS8MfoKDhYTD2/IuQp8UWpHd7GHo4zB4C4APSU7nhZIXjxQC e1wHAd+z6YDPjYX97rRGbha3hM9PBntVGt1l6nQAdGMSDCKPJPVPOG36+obprlSDujnO7p7j o+lslEaxDtUhnY1KmGag0O2mCb8bOgDmgVRQGRJCdREurG7d8brV24u7JIcey0KS03mslAhG Ek3vqq9lbRvMxhGXuYofFs+roNUb78uC47wCTpWG53ivA5wIi3p2jxTVjJxudPaAGbK7CGPG goaQ66kVDSkmzj7TIZ1ISxF7SqUVDSkedXploFgkBdlhEPXo2WlOn+RQYFMkpxNwyb3DM8PP xFxjDrt7NhWXaVdRakWynS9DdQyxC+ZvzuJVGj2BVypTTQcAL3FPb0IiuXzC8cb0FuBBdhhl 6y9crFbZy05LcVUio2Bm1CMdBkyuP6fi2d44HPEHJwC2wJyC6lbCeaS0J3iwLB9aWTHOMbeV ONgbCR/EkKPRWCxAmno+t1AZoeKMR3gdsZ2NticUYsvi2VPIY1MSKEftz8gCSBg+F01VCMbp dFKYPhHAY8djF+yu8Y9q+Vo/8mSVy57S4YZ5J9wLfvxYrXoZdACoo8vOVE+h4MfPql83dQbZ z1IWBJZzei0+QD4y3nt34oaWsh0UwrJDrl9zKmJTageH7E0dwLa8AU6g53W0L+wwIDwRFDVJ GBRN5AMS0nlODCTcCROOdwbGBJQMdkpc/n1sYrApSpBmMjE6HSLwqYfJfdrWRRQCkMwdE2PT L5Qd4sN+N9zpFVEOuTYQ3T+ZbuudqJGCTbeHdnTf9gC4DlCdccP0E/FCkcb6iwtYBwBDPk8G 8kjg0sjpgYmwmlxgYprTPtDu3lmwdSDH8MksaNSgQDDPqOzw8MjaI+kDww/7PxhuApTnJC9y W7YUHBr8hIzenP43b4A0aQQk2bLgdzkLiqJP/k1gkT20CcKayQs1WZeykualtkfGe3qe4144 pIcaFsChiQqAgnSGPHMq6QU91pLfGPiuF3y0Q6t6nB2tjsWZi+MsiSKhTnhIa7x6/5RKTjD5 g1XfqeVyLfUlIygcTmd6T9zvKZIoAqpUkysgq0Y/yYDOOBw2Nta8XKkrGdefM5TmlnOGB+pe zsxOWPcaXJl0Pkf7QloaiWIdc/iU9XSsg+vEI56+bKDjxbDFS7+Hq9tZFLmS2EsPWVuVCzdz KsnwPceb3ByW2HlfQw/7GuxJqzf3NW5d9TSJFNuMegB68cMz2dOa8LrJ/FXyWmMlGzr5Dstp kLYKosm8UkF8SNRSZf+Oz6w9k3Qu+eGdvGk6X02sKokKC3DRT9i82DyvBmbWYSOv0wBKOcaV Ex1VL0ylgGbdDu39dOcmYrrAgqY2US5WG4+vFQCokXnSs5M2eIoousHTKwAoBq5zdI8koU84 7Q39lu26lJJShRWv56R96Ej9eJ5Hz66g9xqAbYaXs6pJKUyiqMYcPsFHOoHOAsljOcny/iSb PbTRc7y2wccb8Fh0yHR8LWdWed7oqRSS6Lh4+/Qe2x/6gB2K17nuZHZaJZ9Y1aiiSFWjUwDg C9T36BOFN3o8mc3e7zm69KUyFNiSU/fRzHrqvr5Hzxz1ra9wBzdX3SckouyEIwyTUrFGY3yn Ss0y+QWSFEsbSHXKZY8wfsGPFAvo0UFC0sxrwhBY4Fg4VaCsY9prNC/TxiDEqRSk0hHz9Ehr DrMizPvwVCoUmVevSKoftNdoquwaQx50ZUwGEqMJc50GjNX41L/9tTLZQF96h5YhSLPA3so6 NAOJpq2OV/ymyUXHG0DBa4UwBfM7ko4QGGnvkKUibglXTXn7QfOHma4UhBHloleaHeSiUZZc 3qGBvFJzS4jaaz6ROZKoNhOOoA2cJQ5u6fwEka70pE1+lQbXrjUETp9RRLvMg6k0yOoRW8iw 1s7nPwVHG8UxcrInWKBkfeqLRKVJ8yBJr/0zXdZNeEVlvC6oUZXtD7xpryt4aW/S8Da2h8Dl CvacUalmE77bRbXq3zkxMKV8Qn9l+An+dFn4eZvOSRyNrJ0GIWqt+dI2m1K7OOsPlRbYaHyI l2tes8h0Kwgb78tFwvOKyFUcWXP2SkAcd/SBGDxy2dl0HmxeZbkHLV0JxTjcrjIfWzqvgFwk 0sg90SOEZSWz58+pZMNZ+gc8P+SFNOTlYAMjd5ltFnjeqtOqYeXVaRCTVbm53fTCVJLC7Fv3 ubNo+DqHA/NZ+CfA2SXuGsK2YfpGl7zwJX2j65//ffnh+cvyy4/Lt9dPz59/ey2f7AgsODB5 iowE5NaAOJwvH1f58+/PX77/6Xn5x/e/PX/++Mfy3btPn5eXT9frp9fnj6/ffVU/wgUjYOLF NFfOBIsA3uIuJpzy2fuSXGwnTYypLz0XuEdW7rtWKsPU3PJK+NQvxlHmYyvWyXuZyeuY7ynJ JrK2+exbwSaCjrWf2sPusWfZs4eRL8bJ9KWYMPIhv8ePNcGOWfSjX/7z/Pmn795dn39/vn7D /7R8/PIcPOqbP56bD7Htu9o2HRR0K3yDJsxWSGHk1Fx+wZZLfC+oSTq+mpa4w3NpEagdjyVf k5bp8PqOidq3rwOBnTtmsjBVphffsnDTYueendotL6xvQuyaU7VrdsbfBy1c1/xrGErX2Zi/ SLR9yL1Ijzef96xkKh+0BRcmrahJI6m2uw6cisXLWxbLCFvHMX3LXnoYLKutCgbet1e6NM/6 VsS4OVXma3mE02FjxYq+K7UxUz//MrN2cy832xAPd86sZtWXhaqBCjei5g2U2urKej5HzZbp NP/evJ0ZTWrcWTb3GdLsTlvA+bqFptqIGDalxpZ16uYndtBMt6KvdW1M3i1Du5JPkZ/OUO45 s3Slqv5CW1GzRlJtdx04HR5YU+HLfOrOfbkCyayv9bm8sD+osaZWR7W1IlbNqaUcRzhFsPd/ Ah64JwplbmRzdHJlYW0KZW5kb2JqCjggMCBvYmoKMzk5MQplbmRvYmoKNiAwIG9iago8PCAv UHJvY1NldCBbIC9QREYgL1RleHQgXSAvQ29sb3JTcGFjZSA8PCAvQ3MyIDEyIDAgUiAvQ3Mx IDEwIDAgUiA+PgovRXh0R1N0YXRlIDw8IC9HczIgMTMgMCBSIC9HczEgMTQgMCBSID4+IC9G b250IDw8IC9GMi4wIDExIDAgUiAvRjEuMAo5IDAgUiA+PiA+PgplbmRvYmoKMTMgMCBvYmoK PDwgL1R5cGUgL0V4dEdTdGF0ZSAvT1BNIDEgPj4KZW5kb2JqCjE0IDAgb2JqCjw8IC9UeXBl IC9FeHRHU3RhdGUgL1NNIDAuMDIgPj4KZW5kb2JqCjE1IDAgb2JqCjw8IC9MZW5ndGggMTYg MCBSIC9OIDEgL0FsdGVybmF0ZSAvRGV2aWNlR3JheSAvRmlsdGVyIC9GbGF0ZURlY29kZQo+ PgpzdHJlYW0KeNqVU01rE1EUvTNW3IQqoqV09ZZFkjB+LKy7mKRp0hJjmqIRQceZl2Sa+fLN JJrQVTduRLsSF24Ef0CXLrpwUehGUSjVX+CifoAodCmemYnJ2CrqhffemfvOvffc+xiisXXV dU2ZEVm2LwrVTP1q/Ro78oZkGqcEwVTNczOVykKAbcfmdMD23pIUnNupIBf9nx3WuafhfIHl 3PFdn0hSgE+0a9UscA54XHNF4K8Bz+meZgE/ITp0fBAb2MkCt7kwNFYQao9VhNMwzLjWv93/ kwWzidC3y2HP0sRLrSO6g2tJekXk87t+8JF13J4wmi2fnZ6ZOc9S7IyinGUZTIizrGO5HZ8L VrS1dJKppslCqscE97jocj1Nltn52dtRrAS3lxZxThPJH7iXH2DJ1dXcPPA5+Cd0nssDX4B/ s2HMFoHTWJsNMbuE8xT8zPCLtcgvb9hmeSHyyyXbKV8CToLz2PUvVoHxDvJ9r7uYH+T5uqyW KjgnwCm1nfmAMwmO32/VrgAfg/9mv5UtR37pO9XJJE4G2dhtYjRHKgmysKuUIhfYoQbuDfAM KoQsDq9BHrXBLwC/D7EaZhpFmFSJ4YC5i9jdMPY2dcCNopGpTKtJZV35pDxT3imflR3lKdDH tanOtOs+erAqbhja64dfkC+oPMoXqWADVVFmDRX/pNLHnb1PYwbLpCa81nAO3iBChUoPUR1w g4ypeEcNe21qyOsRCxTye+W9WHU+1DmqfSvM3w61dUOGhz0T0xC9Q9TdMm5HasHeWtmYjFfd GXt+fTuxtbJvNno43WzYTx/MgzOKv40zrNfEcoZs/tuJavH6v+TB3/oDn7HwUQplbmRzdHJl YW0KZW5kb2JqCjE2IDAgb2JqCjYzMQplbmRvYmoKMTIgMCBvYmoKWyAvSUNDQmFzZWQgMTUg MCBSIF0KZW5kb2JqCjE3IDAgb2JqCjw8IC9MZW5ndGggMTggMCBSIC9OIDMgL0FsdGVybmF0 ZSAvRGV2aWNlUkdCIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp42n2ST0gUURzH v7MlQqwFZSZS8E62B1cG7WAdjN31b8q2rGumCLLOvtkdnZ2d3sxuJR5CiC5B1jG6WNFJOoYH Dx0CDxGCYl0i6CgZBIKXkO03M7vuiNqDN+8zv/+/33tAXShtmnqAAXnDFsn+KLs7PsHqN1CH BgRBK61YZiSRGHaZbHFk7X2F5Jyb4eP1/10NghICElWAxqzH1xye9njA4fu2aRNPOqzk0hli k7hNpJIx4lfEZ7M+nvZxhlsK8TLxTcUUFCeQIh4oKVkn5g6xbGQ0g+SXibsylpInJt/AU2cW Xpn2ENB9BTj1uSabsIDld8Cl1pos1AxcHANWOmuy3aQ7H6lp3VI7O1yRFIwCdT/K5d1WoP4F sP+8XP77ulzef0M5vgMfdaUoSpUZSdIXwOvDXY393OBCU5hzXwlRUDWd+0Z6vNrr14tH9SWr dBJ7M3FXF7BE9zB2Bhh6DLz8CVx9D1z4ACQagNR1BB6hum3+wM0TK5gPhZbN2axDljtY2Dk6 WYReCGexQt4s2lywQUNpb2NpXWeuqcUEt7go8Uw78nqx2u852kFujI7QSfMKqNzqrbA0k0n3 0N2gnXgjw3t6nXdBvKhqfYPOhdD+pIq+UY+l85o9mPI40G3o8eEKwyjEb3sxsWPa0WQ1vlUa 6a3KZ9K3EnS2kPzGbGHIsWki39BcLjXmsZSay8XiFV7FOHRwaDDoa4AhiX5EEYYJgQJU0mhk oZGUuzaC2MLssZY6Ej5mpN8mn23X5x6K5O143UE0joW2gwhM/ib/lrfkJfmt/GuxpRiqaRbE lKasP/tDcZ3M1bgVbaUmL75CeSOk1ZElaf6gJ8tXqa861VhsqUVycvAn8T1fl9yXKYxpN9Ks m6nk6iz6RnzZTpoe2a7NrzbXcm2dXpncDK7NH5pV4UhX/KCrw/81O78//wfNsAFoCmVuZHN0 cmVhbQplbmRvYmoKMTggMCBvYmoKNzA2CmVuZG9iagoxMCAwIG9iagpbIC9JQ0NCYXNlZCAx NyAwIFIgXQplbmRvYmoKNyAwIG9iago8PCAvVHlwZSAvUGFnZXMgL01lZGlhQm94IFswIDAg NjEyIDc5Ml0gL0NvdW50IDEgL0tpZHMgWyAxIDAgUiBdID4+CmVuZG9iagoxOSAwIG9iago8 PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgNyAwIFIgPj4KZW5kb2JqCjIwIDAgb2JqCjw8IC9M ZW5ndGggMjEgMCBSIC9MZW5ndGgxIDEwNDQ0IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0 cmVhbQp42r06aXgUVbbn1tpr0vuWpbvTnXT2Pd00CaQSskEWQtgSTCQBgoAsATFsoghoIOiI jgoiT1zQQRx9neBgIyOP50PHje/h9nBBGZ+4jUZc4kbo6neqOiDM45vPH/NNVW6du9W5555z 7lk6BQQANLABaBDmLunqIRPIn7HnNSyvzO1d6brGmiEAkJ0A9Ob5Pdcsefx3wx0AbCKAYuCa xWvmH5mzbCuA9gSAeeWC7q55X1CRcQCeKnzfvwA74jezX2P7Bmx7FyxZufqmq5T/ge0Hsb16 8bK5XZOTJ36OQzZsj1/StbpHsVp5L7Zbse1a2rWk++AHiiPYXo1tX8+y61ZS39EHsC29f3XP iu6e6pZAKUAqNulX8UFA2o+0Iw6OSDhg1mjPrxeFe5UuZrTN/t04d7HGj0IFFiX8/aXCoobf cmlAC3EI40EHeoQGudcIJjCDBaxYt4EdHJAAifJIEhJ1FPTs85DD7oAkplLqib6H5X0JilOj Z9kToIpGokN0MW46RSqnR4gJ/h1pfgZuxL29AfuJEjwwRArhXZJEMuEdEOF9+F9cZxs8iM9q +Jz8iPv6gqTjHD9shAdgT7QHeqAc788Ji9SNgS+i66IvRX+BSuiHY4QnRpIUPQR50If3LthN NNSc6ADS3wCrUIs2wsvwXnQw+jfE74dPiJ7kMaXRD5DnLPYEYSvsh2eIm3hIJrkq+gn225DG dtgfbYz24ntncVYeNME6XO0j4iRpJIvsIh/SQ9EN0d/h3hJxbDrMxXsJ3Aw7YTc8Kc+awySy ZsRfBfU49jvU38/hO1SGDFJJVlNv03+jv2FKmV3RY0jHdFyvE/YQGrniJdPJPNJDniRPk/8i P1IBqosO0m8zPcxDSNt02AIPwXPwF3gTPoAvYQjOQYQwSNN4MpmsI/+G7/0vVUR1UOup26j3 qLN0Af0hwzPb2FvYw1Em+nb0HNKcDJlQCrUwBVqhG+/5sBSuh5tgM+FhBwzAfyG1p+E0UREd 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 mqS1moVmea2srOqFUyvh/wDJcpweCmVuZHN0cmVhbQplbmRvYmoKMjEgMCBvYmoKNzE5OApl bmRvYmoKMjIgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Bc2NlbnQgNzcwIC9D YXBIZWlnaHQgNzMxIC9EZXNjZW50IC0yMzAgL0ZsYWdzCjMyIC9Gb250QkJveCBbIC0yMDUg LTQ0MyAxNDM3IDEyNTQgXSAvRm9udE5hbWUgL1hLQklFRStIZWx2ZXRpY2EtQm9sZAovSXRh bGljQW5nbGUgMCAvU3RlbVYgMCAvTWF4V2lkdGggMTUwMCAvWEhlaWdodCA1NDAgL0ZvbnRG aWxlMiAyMCAwIFIKPj4KZW5kb2JqCjIzIDAgb2JqClsgMjc4IDcyMiA3MjIgNzIyIDcyMiA3 MjIgNzIyIDcyMiAzMzMgMzMzIDcyMiA3MjIgMjc4IDcyMiA3MjIgNzIyIDU1Ngo3MjIgNzIy IDcyMiA3MjIgNzIyIDcyMiA3MjIgNTU2IDcyMiA3MjIgNzIyIDcyMiA1ODQgNzIyIDcyMiA3 MjIgNzIyCjcyMiA3MjIgNzIyIDcyMiA3MjIgNzIyIDcyMiA3MjIgNzIyIDcyMiA2MTEgNzIy IDcyMiA3MjIgNzIyIDcyMiA3MjIKNzIyIDcyMiA3MjIgNzIyIDcyMiA3MjIgNzIyIDcyMiA3 MjIgNzIyIDcyMiA3MjIgNzIyIDcyMiA1NTYgNjExIDU1Ngo3MjIgNTU2IDMzMyA2MTEgNzIy IDI3OCA3MjIgNzIyIDI3OCA4ODkgNjExIDYxMSA2MTEgNzIyIDM4OSA1NTYgMzMzCjYxMSA1 NTYgNzIyIDcyMiA1NTYgXQplbmRvYmoKMTEgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5 cGUgL1RydWVUeXBlIC9CYXNlRm9udCAvWEtCSUVFK0hlbHZldGljYS1Cb2xkCi9Gb250RGVz Y3JpcHRvciAyMiAwIFIgL1dpZHRocyAyMyAwIFIgL0ZpcnN0Q2hhciAzMiAvTGFzdENoYXIg MTIxIC9FbmNvZGluZwovTWFjUm9tYW5FbmNvZGluZyA+PgplbmRvYmoKMjQgMCBvYmoKPDwg L0xlbmd0aCAyNSAwIFIgL0xlbmd0aDEgNjgyMCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+Pgpz 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 hj+QTzTSL58j46VWkR5KB4jG0J0Xa9W/u9Jz+VLzp2EvdxeIRCdH2lyiAqIyomlEVUSTaWwB PAGv4CwGmOnM5+wy9iWuNjIHqGEBxXMhnQQY0FKpARC+Vh4ATu5F0I/Mq6A+8E6bNaesLKOy eWFXc2drU4O8l+Ur3AzNcL1LTWSgE1A8JEAiGMEESXSeAjorZ9AXCZGHKCNjohG6cR88RLSH iIVW3AjLiTYQPUrEXeH2Ew3gxn5OKT6HyyGJ3pBRnGVWnMliVEdZ3gmi4uguy4fGL46jid4Q n6GpXwOqiWrcg7thHljwSXDgCqgEN+44kr7QUk9d+6GDqJuIlWvE/f2peZYTmAkOOqdY0Amp HD5r+So3y3I2N8hgv+UlV5Cj5sVUksRYy6B5l+UF8x2WE0QHI10H0oPSPfvNCy1bU4O4o9/y S3MQqeO/Is1SM936rKU9vdcyL1fun9obZA72W4qp/2YxylJYZLN4zGcs2a6gEknOMk+1jM59 wzLKLA+zklGHqLOkmLdaxlFXqtnnGkd0HA/gThiNO/sdUyzPEUvLPTI5vag3iPccqXTnOoK4 QiysdPemV7oc6VMtjvRyl4v4m18R1gq3ChOFPCFDcAtOwSYkC3FKvVKrjFFGK9VKpVII4lP9 pRbFcTwIpQTLwSNKhZIP4tOk5I7jIVl56JiSUzJKUMYFw58elXKIdvzBo1qJI+ZZhcwpgnjo SER1SLRwEsfJHVoG5H8JyOnJoJKBKRDAzUEFrEvoKjWW6ifoisu9/66qv6bO+PeXEc2BXvqy CBww+wN5EhM2+690Zvynq3MpVc1lGRlVM5cf6epomy//dGX3NRPVBzZ2tRgD3Y1Wa19bx8jv cs76xqYWqW1oDnTYm72BNrvX2tc1/zrd86XuLru3D+b7ZtX2zRebvf1dYpf8q92RxrIlddfM teHKXEvKrmOsTDK2RJqrse463XVSd6M0V500V500V6PYKM8lrdPXWlN2VydlJ30O0iefuyYw ecac2oC1we8N4j7pG3Ep/D8/Eh2tCmVuZHN0cmVhbQplbmRvYmoKMjUgMCBvYmoKNDQ0Mwpl bmRvYmoKMjYgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Bc2NlbnQgNzcwIC9D YXBIZWlnaHQgNzI3IC9EZXNjZW50IC0yMzAgL0ZsYWdzCjMyIC9Gb250QkJveCBbIC0xOTUg LTQ0NCAxNDQ2IDEyMDcgXSAvRm9udE5hbWUgL0RNVFpCQitIZWx2ZXRpY2EgL0l0YWxpY0Fu Z2xlCjAgL1N0ZW1WIDAgL01heFdpZHRoIDE1MDAgL1hIZWlnaHQgNTMxIC9Gb250RmlsZTIg MjQgMCBSID4+CmVuZG9iagoyNyAwIG9iagpbIDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1 NiA1NTYgNzIyIDU1NiBdCmVuZG9iago5IDAgb2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBl IC9UcnVlVHlwZSAvQmFzZUZvbnQgL0RNVFpCQitIZWx2ZXRpY2EgL0ZvbnREZXNjcmlwdG9y CjI2IDAgUiAvV2lkdGhzIDI3IDAgUiAvRmlyc3RDaGFyIDQ4IC9MYXN0Q2hhciA1NyAvRW5j b2RpbmcgL01hY1JvbWFuRW5jb2RpbmcKPj4KZW5kb2JqCjI4IDAgb2JqCjw8IC9DcmVhdGlv bkRhdGUgKEQ6MjAwNjEyMDExNjE1MzUtMDYnMDAnKSAvTW9kRGF0ZSAoRDoyMDA2MTIwMTE2 MTUzNS0wNicwMCcpCi9Qcm9kdWNlciAoTWFjIE9TIFggMTAuNC44IFF1YXJ0eiBQREZDb250 ZXh0KSA+PgplbmRvYmoKeHJlZgowIDI5CjAwMDAwMDAwMDAgMDAwMDAgbiAKMDAwMDAwMDEz NyAwMDAwMCBuIAowMDAwMDAwMDIyIDAwMDAwIG4gCjAwMDAwMDAyNDEgMDAwMDAgbiAKMDAw MDAwMDExOSAwMDAwMCBuIAowMDAwMDAwMzA2IDAwMDAwIG4gCjAwMDAwMDQ0NzAgMDAwMDAg biAKMDAwMDAwNjM4NyAwMDAwMCBuIAowMDAwMDA0NDUwIDAwMDAwIG4gCjAwMDAwMTk0NjMg MDAwMDAgbiAKMDAwMDAwNjM1MCAwMDAwMCBuIAowMDAwMDE0NDQyIDAwMDAwIG4gCjAwMDAw MDU0ODQgMDAwMDAgbiAKMDAwMDAwNDYzNSAwMDAwMCBuIAowMDAwMDA0NjgxIDAwMDAwIG4g CjAwMDAwMDQ3MjkgMDAwMDAgbiAKMDAwMDAwNTQ2NCAwMDAwMCBuIAowMDAwMDA1NTIxIDAw MDAwIG4gCjAwMDAwMDYzMzAgMDAwMDAgbiAKMDAwMDAwNjQ3MCAwMDAwMCBuIAowMDAwMDA2 NTIwIDAwMDAwIG4gCjAwMDAwMTM4MDkgMDAwMDAgbiAKMDAwMDAxMzgzMCAwMDAwMCBuIAow MDAwMDE0MDYyIDAwMDAwIG4gCjAwMDAwMTQ2MjIgMDAwMDAgbiAKMDAwMDAxOTE1NSAwMDAw MCBuIAowMDAwMDE5MTc2IDAwMDAwIG4gCjAwMDAwMTk0MDMgMDAwMDAgbiAKMDAwMDAxOTYz NiAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDI5IC9Sb290IDE5IDAgUiAvSW5mbyAyOCAw IFIgL0lEIFsgPDM4OTEyZWQ1OGUwM2M2NjYwYzU2MTA5YTMxYTQ4MGIyPgo8Mzg5MTJlZDU4 ZTAzYzY2NjBjNTYxMDlhMzFhNDgwYjI+IF0gPj4Kc3RhcnR4cmVmCjE5Nzc5CiUlRU9GCg== --------------040105060902010605000506--