Click here to Skip to main content
Click here to Skip to main content

MemoryStream Compression

, 20 Jun 2004
Rate this:
Please Sign up or sign in to vote.
MemoryStream based compression based on SharpZipLib.

Introduction

Hello, this is my first article on CodeProject. I have been a long time reader, and the CodeProject resource has been an endless supply of answers to many questions. After searching CodeProject, I found that the .NET section lacked any articles on compression, so I thought I would write this article.

SharpZipLib from ICSharpCode

First of all, this article depends on the SharpZipLib which is 100% free to use, in any sort of projects. Details on the license and download links are available here.

Purpose

A friend asked me to teach him C#.NET, and as a project to teach him, I decided to start writing a revision control system utilizing both server and client, we've both had our share of pitfalls with CVS. One of the features he wanted involved compression, so I sought out this library, but its documentation is sketchy unless you use it purely for an API reference. Also, the documentation only shows examples of file based compression. However, in our project, we wanted the ability to work in memory (with custom diff-type patches). Originally, I found this library on a forum that said this wasn't possible, but after digging into the library documentation, I found some Stream-oriented classes that looked promising. An hour or so of playing around, and this simple and short code was the result. Since the code is relatively short, I have not included any source or demo files to download. I hope someone finds this useful!

Compression

For convenience sake, we localize the namespaces IO, Text, and SharpZipLib:

using System;
using System.IO;
using System.Text;
using ICSharpCode.SharpZipLib.BZip2;

First of all, we'll start with compression. Since we're using MemoryStreams, let's create a new one:

MemoryStream msCompressed = new MemoryStream();

Simple enough, right? For this example, I will use BZip2. You can use Zip, or Tar, however, they require implementing a dummy FileEntry, which is extra overhead that is not needed. My choice of BZip2 over GZip comes from the experience that larger data can be compressed smaller, at the cost of a slightly larger header (discussed below).

Next, we create a BZip2 output stream, passing in our MemoryStream.

BZip2OutputStream zosCompressed = new BZip2OutputStream(msCompressed);

Pretty easy... Now however, is a good time to address the header overhead I mentioned above. In my practical tests, compressing a 1 byte string, rendered a 28 byte overhead from the headers alone when using GZip, plus the additional byte that could not be compressed any further. The same test with BZip2 rendered a 36 byte overhead from the headers alone. In practice, compressing a source file from a test project of 12892 bytes was compressed to 2563 bytes, about a 75% compression rate give or take my bad math, using BZip2. Similarly, another test revealed 730 bytes compressed to 429 bytes. And a final test, a 174 bytes compressed to 161 bytes.

Obviously, with any compression, the more data is available, the better the algorithm can compress patterns.

So with that little bit of theory out of the way, back to the code... From here, we start writing data to the BZip2OutputStream:

string sBuffer = "This represents some data being compressed.";


byte[] bytesBuffer = Encoding.ASCII.GetBytes(sBuffer);
zosCompressed.Write(bytesBuffer, 0, bytesBuffer.Length);
zosCompressed.Finalize();
zosCompressed.Close();

Pretty easy. As with most IO and stream methods, byte arrays are used instead of strings. So we encode our output as a byte array, then write it to the compression stream, which in turn compresses the data and writes it to the inner stream, which is our MemoryStream.

bytesBuffer = msCompressed.ToArray();
string sCompressed = Encoding.ASCII.GetString(bytesBuffer);

So now, the MemoryStream contains the compressed data, so we pull it out as a byte array and convert it back to a string. Note that this string is NOT readable, attempting to put this string into a textbox will render strange results. If you want to view the data, the way I did it was to convert it into a Base64 string, but this increases the size, anyone has any suggestions to that are welcome to comment. The result of running this specific code renders the 43 byte uncompressed data as 74 byte compressed data, and when encoded as a base 64 string, the final result is 100 characters as follows:

QlpoOTFBWSZTWZxkIpsAAAMTgEABBAA+49wAIAAxTTIxMTEImJhNNDIbvQ
                                  aWyYEHiwN49LdoKNqKN2C9ZUG5+LuSKcKEhOMhFNg=

Obviously, these are not desirable results. However, I believe the speed of which the library compresses short strings of data could be extended into a method which returns either a compressed or uncompressed string with a flag indicating which was more efficient.

Uncompression

Now of course, to test our code above, we need some uncompression code. I will put all the code together, since it's pretty much the same, just using a BZip2InputStream instead of a BZip2OutputStream, and Read instead of Write:

MemoryStream msUncompressed = 
    new MemoryStream(Encoding.ASCII.GetBytes(sCompressed));
BZip2InputStream zisUncompressed = new BZip2InputStream(msUncompressed);
bytesBuffer = new byte[zisUncompressed.Length];
zisUncompressed.Read(bytesBuffer, 0, bytesBuffer.Length);
zisUncompressed.Close();
msUncompressed.Close();
string sUncompressed = Encoding.ASCII.GetString(bytesBuffer);

Now, a quick check on sUncompressed should reveal the original string intact... No files involved, however, if you wanted to load a file, there are a few ways you can do it, and I leave it to your imagination.

Closing

Special thanks to the developers at ICSharpCode.Net for providing this awesome library free to the public which makes this article possible. I have no affiliation with ICSharpCode.Net, so I hope I have not breached anything in posting this article.

I hope you all find this as useful as I have!

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

Astaelan
Web Developer
Canada Canada
Short and simple, I'm a self contracted programmer, my strongest programming skills are in C/C++ and C#/.NET. I have a nack for porting C algorithms to C#.

Comments and Discussions

 
GeneralRe: DeflaterOutputStream Read not supported PinmemberBo Hansen24-Aug-07 7:46 
GeneralRe: DeflaterOutputStream Read not supported Pinmembergetabdul8-Jul-08 23:37 
GeneralUnicode comprssion PinmemberKStankov29-Jul-07 12:55 
GeneralRe: Unicode comprssion Pinmemberlextm12-Aug-07 20:12 
GeneralHERE IS THE WORKING CODE !!! PinmemberMathieu Clerte21-Aug-06 20:36 
GeneralRe: HERE IS THE WORKING CODE !!! PinmemberAstaelan3-Nov-06 22:33 
GeneralRe: HERE IS THE WORKING CODE !!! Pinmemberlextm10-Jul-07 21:27 
Generalzip a xml string..... Pinmembercooleader20-Jun-06 5:35 
GeneralRe: zip a xml string..... Pinmemberanj198315-Aug-06 1:22 
GeneralRe: zip a xml string..... PinmemberMathieu Clerte21-Aug-06 20:37 
GeneralRe: zip a xml string..... Pinmemberdginwv27-Sep-06 13:09 
QuestionObject reference not set to an instance of an object Pinmembershivaka14-Jun-06 10:03 
QuestionRe: Object reference not set to an instance of an object Pinmembershivaka14-Jun-06 10:12 
Dear Astaelan and all other friends,
 
I have put the code and .txt file data here...
 

Here is my code :
StreamReader sr = new StreamReader(Server.MapPath(".") + "image.txt");
string a = sr.ReadToEnd();
 
byte[] bytesBuffer;
MemoryStream msUncompressed =
new MemoryStream(Encoding.ASCII.GetBytes(a));
 
BZip2InputStream zisUncompressed = new BZip2InputStream(msUncompressed);
bytesBuffer = new byte[zisUncompressed.Length];
zisUncompressed.Read(bytesBuffer, 0, bytesBuffer.Length);
zisUncompressed.Close();
msUncompressed.Close();
string sUncompressed = Encoding.ASCII.GetString(bytesBuffer);
 
image.txt is :
SUkqAAgAAAASAP4ABAABAAAAAAAAAAABBAABAAAArwYAAAEBBAABAAAAoAgAAAIB AwABAAAAAQAAAAMBAwABAAAABAAAAAYBAwABAAAAAAAAAAoBAwABAAAAAgAAABEB BAABAAAA5gEAABIBAwABAAAAAQAAABUBAwABAAAAAQAAABYBBAABAAAAoAgAABcB BAABAAAAjEYAABoBBQABAAAA5gAAABsBBQABAAAA7gAAABwBAwABAAAAAQAAACgB AwABAAAAAgAAADIBAgAUAAAA9gAAADsBAgDIAAAAHgEAAHJIAADIAAAAAQAAAMgA AAABAAAAMTItMjQtMjAwMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIw MDIgU05PV0JPVU5ELCBBTEwgUklHSFRTIFJFU0VSVkVEAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA////////P0mBFpjvz2Rq//////9pwoxJI+6HE92EFscEhTObpCLCpJvZ VIjKmBlOGIRHH4Kh4aGHh95DIbiH/GXt9V7vVe7lL//j+L/clHM6/EWap9+ffn+/ SDN9Jcl/yGaYYx6GwDxmNp3ZzIx3PpPTPMwzcbMxBKabmZlN551tHuaZzswYAnNo Oj8zQ2AOh+y9/hMJeNBUQw/BQ3A0ZAi+IRjyciw/BC/fQ3C0POToHoKHYDX0Ev7B SQc7HXNF2WCQgDlhsFOgpKOFLy9Hy7ssLy+/HL0vt7zcafzycuGqf1IBD0q7FA4P AoPAf3ogGCRyODlIMT3Qp2M6vOiYPHSEQYscTo5/eqDkLjrCoHQ4Od6LHIZB6Xhc 0ico8KCiLcmyChb8j5eX+/iSS4Yuv/zLy//xLl8yVL59+ZJfqp8qwMN6udRdsvyH l+zr8N/jeOEv2f+Hy/HH/yX7+yrpUxN4WLqlX/U3+P8N/vihQ///N/ih/9v/MTl6 aOlTGniwSAKXkoqThJPAxOfE58l/w/9v+H8OZGbI//+Gnw353/9/8tMKSZ8bBx7o 2pK6wlWCS/AW/LD/H/b6i+wX2f//OuwX2f8f/9+CX/rcBzzMy67yuqqr/Qf7/8G+ 0uKCXtD/fw32C/p//9OY/kufWwAP/tL/+x6G9PBt6Yevz/n/35Z+Hd76z/nflh7D kL4+dwU8suv//8atnL/153yUzd4W/Pr6rR8157vWbcG/t26zN16SPjcd+G7p1xsb rRhCBRv1Q6gjHHV8HLxR/xAqjoOj/o0KjrD1CTctz00GM8koVV0Khy13t34vyzcx fhPjfetrT+MyMd79d8st6/VzY4HGVVXShg3DkMkehhyGfhgKwRAMbfVW+zD0oWFo Q1Y7DP3DkMMQDP2fGxVIEuyE1qEJ9gyHEREREREREREREREREXFERERERERExM9N CSbXIEVt2PCfGwS2tuI3bPjPrQyrUkmCJBiG4T+3BlgtV2jYsP/c0jCdxBgKSkIK x8+Ew2Y5KOk8bNifDOBhQwQYqiIGtxUO/w0vucrL/f8iin97gsk55F+uy/7//wk8 rN+l3/7/J6yDXlJbdamlln77S1fZG4Yahv6Jbj+B3rL/BPqhon7vteRvb1lfp9wv 9b9l/X9JcklaggXrNzKjv9RvD4Ng0B96ISIiIuIfWpMdPG860Yk+nejTiTd9+jyi T59O9OnEm0706dPnTSc60YlOvOnTp08nHtGnTyf6PKJPnz6deNOJPn36vOlEJ/p0 4hF9+nSizyP69OnEmz59OtGnE3068abPm050ov9laOn///////////////////// ////B62JgEno/////////////////////////xsiVK7///////////////////// ////PwTp/////////////////////////x+C9P////////////////////////83 CNL/////////////////////////rxAE6f////////////////////////83BILi /////////////////////////wdBoP////////////////////////8fgqD///// ////////////////////bwgC/f///////////////////////79CEKT///////// ////////////////DwKB/v///////////////////////78hCPr///////////// ////////////IQj0/////////////////////////w1BkP7///////////////// //////8fIVCCIRQQwghX4tH/////////////////////////BYKu//////////// //////////////9DoFoqSf////////////////////////8PQVr///////////// /////////////4dAX///////////////////////////Iej///////////////// /////////w8CFQmvuv7///////////////////////9fEPQrCbdU//////////// /////////////w+B9CLj9f////////////////////////9/CPov/f////////// //////////////8Pgdb6//////////////////////////9DoHqptOr///////// ////////////////BYJ0a33V/////////////////////////0OgX0v///////// /////////////////0PQ18v+/////////////////////////4dApUv1//////// /////////////////38I0l+1JP3///////////////////////8/CPSl9f////// //////////////////+/IOh//f////////////////////////8Pgb6u//////// //////////////////9DUOnSWPX/////////////////////////IZCOS676//// ////////////////////fxD0Wv//////////////////////////gkD3//////// //////////////////+HoNf6/////////////////////////w+BJK2JiZL0//// /////////////////////xD0Kun/////////////////////////fxDoX5+gsKP8 ////////////////////////H4L+av//////////////////////////BYGkdf3/ ////////////////////////D0FrSZek/////////////////////////4eg1/X/ ////////////////////////HxERERH///////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////9THidG nOjgDAgDEyY2lGcOlAFhEwXKzMzEhvLMjyvxIAyUHT/isZkPYaH///////////// ////////////f/9heX25Icvr8r204MXb/////////////////////////5ckXQwv qWj3L4l2y7Jo90ui3ZL8kkqCYEqP//////////////////////////+aU8ZZu5yX QMRjLuPybIpul/MSiHiXZ5zNpUWHs0V0NqX7/////////////////////////9/6 7P/45eP/+Nvf/kaRL///////////////////////////zn+pYTEw5K0lJCAVz0s SR9OSNSlFRNyev//////////////////////////q/+/4f8NR9WG/w0f9df///// /////////////////////5eke2lJ2l56yda3l5ZsSVqSlo76//////////////// ///////////1Ga+wj89Wh1bYx8POOPSfLYOI//////////////////////////9/ 4/+Crw/P+IKvw8/CS8/p3tb/////////////////////////r/+v/L6fpW+l9z3h /v/W/ev/////////////////////////UdJLCQlUqyR2pYS4daNaJbGbkLMmJNpG bVRCCghR+v///////////////////////7+1Ja2SUf9qlGQZ9atRKr1Uat76//// ////////////////////v/VfIUNLX4Y2ZGjpMlTbNQyVUf////////////////// //////9HRERERERERERERERERET8//////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// /////////////////////////////////////////////0yk8P////////////// //////////+TDhqEwYIPgwJ0EGG+EiZALaH/////////////////////////v2pB sPz/////////////////////////a5VHRERERERERERERERERERERERERERERERE RERERERERERERERExI+IiPipBnYSYMEHnQUMDsyywASYfFeVEt71w0q4+pL9h7/u f0RERPxEAhUKECqA4AHBAycEJkDpe334D+s1+A9PsPiSYf2umig+/IdXQvC64T8i IiLiJy1YkgALPoQ4SkeIQ0iAghkmgOTDJb2G/feEq7UO/8P/Utj6ERERET9VQUEB pxrCgMGAMCN88A9LpRoUThNgGMTNYi7MA+EQMcyH8JkLCJ/5EBJmNjN9r9e/FfIy 5CEP+YfgD/+qfi95WVZ5WV/+8ASr+Ut/OkzBIrtFh9OCDhPDosNpzPW7SqW2puFL LpXvJbm01ye3PyIiIm5Ld+GF31X4l3+yQCjAigPhQDkQFpj5X5J04vySTpy/8cP/ rf8VOnEW+nXiLPQHf7hqqZXgs75C0f0V3W/w96oLhm61VcOd7rZqp/sb/rAQESkH +eMCOzmiHVdyRPthf8Tft8veL/sH+6erZTJe+jcZL/0P/m/F/8f/n2H/f83s//rv +78XV+vv0z3duk/3DbX1J4x7L9lSSy31UkstGRX1j406NjbKqI2N2v9WbVleW25Z /2FoGDJkCIY2ZAiGYOgjIiIiIiLi///////jz0zklDnMTRT///////////////9/ CsgsIP////8zk86l/0/B/1kiHps50WP4Ifh/LEfLL/8TiXL0p+P/oCymg44v2f9L sqv+8n9W/v///////////////9b/29L/tvT/+P/4/9b/1v+t/2Hoj4iIOOL///// //////+fQPOYN/P0+JObM/n0icOJz/xEmQ3OHMvkk4DyZoMzoHwoH5wcSiIWOAPO HAuUP3vy/0Pw9xD8//99+MPhw//h+/9i43+xduu8/3MMRPw+z89Xnud5Dua5IOLn MK8h4uf5/f/y78v////f/mEP+2H//7D//5L9QcS7sfX//xDx3/////8/RPz//+8b /v9fsrf///8l+yX73/7/x/cGh4gvEPE//v//X9fX/1/////bw/7/f+3t119aekn7 tZfe/v/n+T7Y29Kf558gJ99+6QRpHCeIwOUJbUJPHr/9//97/////4/6UOjQ/4f+ /4S8Lf3G/N+o/z+v0NvX+cpH+SgH85HQOcwXdD56+39r6++t////9gzK1+/7+//+ 9n+jjPo3auv/Kfnz///f93f+P//3/x+GYOh3GPr//yV7e/y3t9+W7Jfs7bf/IyIi IiIiIv7/xv/29tv/v/3G/23p/////////8cJ7rL3T/Bobyc4b0v2S/b2+39D//5v b7/9/9vv/xERERERERERERERERHx/5+Qyc08cSg5MzMP5aDMzENZ4sCJz2Ne/P+3 rEMwBIfDEBz+Ibj/b4v5Ik9sLDbOb37FxvkVRHyWFxv/f1uyJam8fHu7fPu/vP9v S62ShJL9L9kv2S/ZQcT7+EZ5Sf/////v/y2jpH9p6Zf+//5cx+K6xr/0x/HHkv2/ /WRAmGcm/uSzwYlPEX3WsUw+G8IVShELlD8z/Zct6T/0x//7h4fgflv6Phw+PAT/ F3Mv/fk758/f8v/9efZi5z5fXQsifp9n57kg4uf5Yuf/kr1kg0C29NvS5/9taeO3 F2T/rf9vb/+wF2RPPesv2UutrX/r/7fu7+8h4r8t/SHiv+//7/MiS+RMaVFMPE5s gmDGf8k+4Rll1G/US/Yb9W8/br/Xkr399kv2P/6r9IJl+1/+MARD28PQxj8M7f/9 3/r//7/e//qrGA4i3nMlDsJBmONHoo+IiIiIiIiIiPhvEm+/19rb/6q9tEns/PSI m8fs2NEjHts8LxDx2BGPEd+c2NEjbsH6WfvvBXfb0v/fRK59gmTU5dv/Unm8ibDf o+WPIQt/tAzBH/2/P/ra/f9/MPz//3/UhwbDn3aLhT8oD2f+046UO/OfdhuSPoxx n7Wzmc1n8/TYcfz/ubR9jtBCb/8ldD6aS18+fumSS3bVkv3l/wYb/n37bUn+If9/ 2Nv/b/95dR/2f/Af/////28Y9ofx/8Xbfx7+rzP+//P/r+f/nvH/hv8//v//n5nt N/ijHvXXPyXmzJ8+cThxKEVf//a/ZG9/Ldnb/z/sP8uX////pwdP4d/wb0ugf/wh +P9ft3Xj/zde/+1t/Qf//////9ae3z8x/KEXjf//Yu2fd46BiP/SYen//6X/D0v/ 9G7dpmdrNn9bav03yvh/wsE/c7+g/yzVX/7/H7VRe4LnCXXZe9SSvb1R/0YZHxVL 9h8bf/jLiPp+aduo//+N/0v2oWFo/38P/dvD0L9lGj8s0/j/Ycg0/t2GIViWtHG8 v95q0/uG//8RERERERERERERR0RERERERERERMQRYeir7o03jvoG/yeE//0aVm1b Zu5N42F92P9L9o+PiIiIiIgf7P+8xm9Lf/9ffsQ/FW9Lf/7/39r6//+NMuoTerL/ D0Mw9P//ERERcWITH5wB5U0xYxbig5ND+eDMxIfyJ58OTgdnRBEbnDH5dHDCmIj+ D8GHWwfBhwfB4f/W+yH4/4ud85XnXos+52Ce5xV9zvNnPl+fr5550WNBxP+/IPth /4L8YS/Ih/0fIr5AxP8Pwf//+9962f9l////IeK/1P//8fd6/B/////t35Ls/2TM Y17MMUOJwznxps8MpaPkmIfer7/0urT+b0v/L+H/VxmC//9wOLxJ/JIt/Uu/9P// 9q/9HyoWzqPmKy8Q8T8X/Obj/G4iR5DG/wkicILE+E+Q/idIt//y/5dL9v//9r49 GD70f+hD/9vS/8/H/x8cf4GI/5L9//ZP9PKVj2zpczAf5ct89OfrP1/b/0L/X1H6 ////h/3+//77///bP4n/vwSSdEL+f0Ki9EtT8t+t2xR/b1N8/29L/2+f//9D6n/J /uOP/7e9Xt9+3f7/f/tfsv8vCFw6X8efi/+2vv239PYtbdvS/7/x9v9/ibcd4Zf/ /P35+7D0xxuW/g1L3/ob9X8Y+v+v//P//9JvVIJH29qoBOftBB/UtlEnePwEjz6M kGT/X7Il/v//rz8Mvf0w9PYwtA1D/78PQ///RByf0CvZJ4IT6o96xiMiIiIiIiIi IiIiIiLi/4eh///t0Pb/R0RERERERETE//////////+pmASzmEu8+POYA6XPDOWY CzPHJX78OJjNhOcxL+b+PwRD8D0E/xAMwUMwBEPwssoQ/GRASMQHZxVFbHAGlD+J 2ZP/f7GxWFsQ8V9snIu5YG2xsSDi5zGPecyfhaFi4Tzq4W89/P3/y8u/L//Ly1+y JVuyL79csj/PBRGfxJ+vPP8+4i/ZjZIdRLwl/BsllOz/l3Bw/AUi/tt/iPgCEf9h ///f8O//G/7/P4lfUfr///8/RPxzE8X/Bv/9CYkJGfBv639YWgJJ+pfs///f/v/D luzt5/mHvWTH/3mHNKT+/9+Wfv3//4Md738u5nIfwyDQf7QFsWlB4NIvaf//0m// /12+H/77Mv6/9BJvO8JHlf+fII1/+/+2xPj8b2z/U7wN4jj//P8n/oXXf//b0of+ /9/a+nvr39r6tmRLttSStGRL/M+zhf4/X/not/8nEiijJPuNE+pEcEIDZZRkx3Fs nIiYiOMf9v+///b/YQiGfodBxP9hCIYehmAIhgz9MPSf/7elv///IyIiIiIiIiIi IiIi4i/Z/7/928+LJCI4yqGEozqCThxC8sShBI7e////t3/j1////w/p36j//9d/ aWn8H0v2zP8JHu2Exv3pEY8RO+LmmxNxhG12xJvNhGPxHLMj7ombb07EzfeZIDcL FjPOcBbsyM38P/T/v/37R8vREBxDjpeHPOToaAiOhvzyf7Qs/x8RERERERERP+1I udM+8+mG8nAQioXPw+fhtE+HM5925+ETCd62pRMStCPlFm//p2L+HLP0V122ZNd6 jevrZdeSXa4/qlFfNer/h+D////jg4+P//9jadClf9D/L9YWRPz///83/P///xmn 8dYZ/6Lx/7/8p10l+v//f5bDPsuz/P/P8gUt/y/o/98o2Qv///8P/v////////83 /Oeu/1uypbfpTd7b9LbptfS29Da9XwUi3gn1v/5/g3/E/+P4cNRGHXVU/PFHSRtL tvRv/P9hS/b/Z7hgaIe1NaxhZbgehh7Wm7n/fzP3/wc7nhI4HU6H0+F0OHkUscQC 5U8+G5x81nGdYuZYJjHrCBMz+IiIIyIiIiLiiIiIiIiIiIiIiIj/Xf7/1sP93/oP wf/flhif/4k6iUlMYhK/IOLneZ+DCyK+lyDivyDii51zu9b/ra2/JEmSFCK+QMT/ Yf///79k/3+jjJLs////DxH//9b/l+hsP+KHIRj6JUmSpH/J/u1fsr0k+yW7ZP+P iPj/29K//v///1Letv8vSZIk/Wsvbf/atqT92kv4////L4+3TxCx/Mu//E8QO+i/ JEmStC39of//////////Quej7XNwoW1J6Bf6z+1a/5IkSdL/+/b//9/sfxaUPUnn M4/ZCNt885nHPGb+//+2dP7v//Pfmv/Pv22U9P2yvCzLsvz//3/J3t7+JdtLsl+y 29LPx6tYOI/kEguLhcXCeRQL61+SJEn6/+2N////bZR+H1ou2VrX5ZJdDv3/v1H/ /3/8/7b0P3FzmD1xc5hzEPH/JRzHHw8i/v//X7K39wTnhLpsS7ITGoS6bKMS3A7y o+Voebz1CySQ/vH///9v7///Pwz9mkWxcBbFIm7Ua7f00n9ERERERERERERERERE PKour8v+H2ywpZf+X/8fLxZ+yV166f85//+X/y+99P//P4f8n/f0l176/9/6zf7V lqTWVsmWpP//Rr1R7Dcq3iijRCSwiNz/v/XWW9aWtfX/ERERERERERER///JgFLE AuXPTMQQH5wBYQanxxLr/4cPD8Eg+PC2pP/zXBDx83yxs+hzvvLsvLKk/7d/2Auy Bfnbe/1//38v+/1WgYj//yX7H8e3tyX9//96S/9e9f9Ve2mTqv9GSf9fKo83EWKC 9BOk1P9HfWgw/L9cz4IQZT7zmI2wzTefecxjNvIvofPRXDpfn2NAxJf+ZXlZlmX5 f17dh/2/tn5OVSycR3KJhcXCYuE8ioVZ9D//94y3KX5dsiP80HLJ1roul+xy/S/Z 2//6tWT/FEyfM/0g4v9LOI4/Lv3/7W1t6fVyYn7ItjTe+gUSSP/1//+wZFh6ae1P NHi3Jdyo127pJf0v2dsbZVSCByrBXfaP0P8fbLCll/7/28MQDB1asj/njVos/JK7 9JL0R0RERERERHzR/sv/l176/6EFEf//eU9/6aX/v/6rLUmtrZItSdL/Y8lmvFHx RhklIoFFpP/fIBDKfsvasrb+PyIiIiIiIiL+//////8/GTDY4FyYnJhNTuRg/D8s PwT//76H4P+/vvz/9EoXp3H3yTNtGv/v/xLsZ4GQMX3Ws1EOSoH5KG8WCH3+DJSF uZqcefH7/9pp3Nf/3w3B/d8QDMEQ3Pr/y3/J0OeUz8f5WPQ4H5/z52OxsdhYbPz/ 199+/H/fBcHe//fyssv/n+CD0v5P0E00Tj5x081hxjP+X2IYAhF/+/8lW0LJDhFf IOL/v3z7/1iG/P9rCdv/v/7//z/0/59IsEAq5v3xNUrFXP+JxKP+//8f0t7+v2qE /lFV5f9//f//T690O/6nOG0ac/5B/8pDS//n/Hno/23p/8N++w7/v2j/56L99f9v /8z///9t+Xf9/9BP4r9fpaX/25ZsyZb+/+9v3NL/r/9v3yqtb0vbra2te/1/O12+ rZ8Q//EzjnpvI45KNAgJvBvF2Sijjv9/S/YelWCYkP43COTf+nYzHKqHoRuGhiEY +v/v/9YjIiIiIiJiIxIPERERERER/9+/W28Y0v+Nsh8MPYz6IyIiIg6D/uP///// //////8j4s8so/Fd+AbliZknIL61/v///////////xNMUxE7diTiEoX+PwTz9f86 leNHookUJzaRQ0mPwcR5wkwa/UW39eVx3Zb+Bb/wEKz/ct1e4pgd28SbuAX//zpm AVr1L9mCicfpg4g/5IWj/9k8PXYc/1mbImZmRzziCeGzNsec2NEjbsHEI06c/v// n4fPfDpsaFuSf8j/vhz/kgXBH338/w3Z0muvL3n9L97+8/BxGBdvB20W0GPmP+02 lG5LnxsBp0Kkz56MSZ+aEyHe1GaSimj6///j//9Rf/0NHrX+l+wvv/63/q+r6r/X l///b0ugf/yGB/3/////eYHHH8dc68/Wt/6f5f//ovH/Z5OZF43///9/W/rD//+3 hdrfOOr//wX9Zxvr04Mv6P/n/f//f/v///ajOP02vW39N+r///7/35b//73+8xkC czDv+UzuuXo+szA58yZu+uzphsCM+cyfzqwZAhNmFuZPZwjMY/50hsAc3ujwXx51 /OFfb7Xp/cav/0fZUut//LcheMgPwZCHPARDMOT4BT8ER0PwkCE4egiOHoKHSbjd +oe1afz7G28c9dfG/3ts/OH/LzaGQfn5xcZijcUai43FxmLt7EaqDYMWG6fbYmMY JNYWG6fbMEhsnG7DILHxaOE4IiKOiFtm7k3jYf2wNnP/D0MwZBr/vvW/fMm/vLy8 vLzsL//y8vLLLi+/vPzyUZraPSIiIo6IiIiIOCIiIuL/JXv8JVtyySV7lLwu+7Vr 7SXXrpfs+nHoUb/0/wf9///w+P/lX/5Y/v8fvob1Q//HMyMf/8cmvv////9//JvY hBzHv/4/ROz//w3+//////83+ImI3tzYevyfL/P/OfzP5f//////8+WD/0+N6fFi EwSzn0jxInITzCzMJS79pZf+/ye4mf///3/m///n0v/SC5bt+1cI/v/9f/d9k9j/ /1u/9W/9++fs/8RNNHPQ/ywshoOI9/0HyYh/yZl/fWfe1dWZ723pW3qv99qWvH5n /u//aAh+fcn//p+EBacjI+IRj23i0aNH3H9oGNIN/TCk1tYwJFtq/dZv/dZbW/8w pN+W/rTPPHP/46PfM+JEjzjTPXHmmx3xhuAlO1746B8ho4KNIOK/UcbGRhkb9SHi OHij3qiNMuqDjfpg479syZaWPhz3QcT7I8LREByfeUPlQWf+tPuHYLllPyyY9jDt YRmC9RvyYehhaFgw9A7r3dD/L/0bbPj/Twcd0+HMBy3Zfy355R8REREREREREUdE RERERERERPz/9d8w7N/+qy6X7Pr//////9c/2Pb//3/8//////9f+gdP4X/j//// W////98SI1uS+P3Tm7n//f/P8n9b+v//f3ycqP+WWv//1r8lm9Hb0vHb+n/8M1zD 0L+xUUbU78Z/HPXx1sf/f0RERNyGIRiy6jcZ/2e4YD0MDUNvGv//f0QY0hERERER cURExBHx/349pfv/4x/1f1t6WP9HfPz/////////////////iIiIP7OMxnfhG5Qn Zp6A+Nb6//////////////////////////////////+fGvr/4/9/Yv2fBJEq8kiO IoJAuTmRaC5NDQ2ZPD5Kgpn5yYgfnz4E8/Tf1BIE/+OCX5b/Ifiv/62yrlNDq6os //9Ft/U/uypyGzr0z3AQ8aBZxWIW/0W3f/n/+yG4ruO/LtmS/V/+GyGYQ8w8u4kz M83zPOZFPAY9j3kRNzPxIg7RzvBn+KmhHzN8YvH/b/zBy4KXouUhLMeCVznCclwe +tDjcej+/w/+BsOQWFssLqXDYu2zKBYOEutRYuF0FGunB3p8/G1c/v83+Nv/9lL5 L7lk13ZJdtlf/z81tOHT4f9/+4O9ZEsY9ZL9/8EY+pfs/38c9uj//2B/8P/+/+MN zsLx//8/NXSO//9/8M+c////v739/zdb+v////+M/Pf/QcT7/zORgvdM/N+F+sdJ 7uf0/3//bd2WbHbVb0v/nOYE357T29KH4f/U0P23ZEu29K22/qh/af/fVlva/ral lv6N+seNqI0ZxfEbFfWtsFHG22/UsfFRu3Fs1GHD//u1Zb1lfVhuGfq3hmm8oWHd hjIcsnaYhPufGtrQsLast2B9RERERERERETEERERFo7jsBAR8RH/+NTQ//8f///4 /58a+j8+/v///9TQ/x///9TQ////P/7/qaGJ9X/CzO2RQ7kzMzMzM/NcGofMbGaU BDPzkxE/Pv1vagmCZRmC/wVD8LL8D8H/W5fl16mhtVWW//8CEe/squhwFrMoOjx0 PMNBxBPts4rFLP6Lbv9/v1yyJbt8nRr6L1+yJfu//GvzIs68iDMvThz6ecyLuJmJ F3EI/o+f4f9HPLH4/zf+8ujol1/lCMvx/x96PJb6/z/4fzqcDn/ePkosnI5i7fRA 0r80PjW0DUn+/zf4S3Z5+Utfkl321/qvP2640+H/f/v//yP00L9kv/Qv/cMGG/3/ H+wf/f+gZ+H4/6V/6aeGzvH2///gX/9ftH/7/5f+pR////9n5P//F/R7Jv4v/Us/ NTTJPb3p/f/ff9Hv//+35/S29JIt2ZL0f39rS7ZkS99q6y//b12/baml/4QEjhNi xj9uRBllzCiO36io///Gxu/GsVGH1bL0p4b2qi3rLetL9r/JeNPub0MZDln7lvWP G4IFa8t6C9ZHREREREREHBEREXF8WIiI+Ij/p4b+/4/j/58a+v////Hx/08N/f// /+P/nxr6/+P///9PDU2s/xMmbprIHEGaS8zMzOOQyeNAKZiZn9hEwR+CuStNsvj6 l+WpoQU/BMsPwX9ZV/1Vln/Vl1/+ix7rqj80i1kcz3AQ8aAkEh3O4oseC0S8X7D+ f5VsyZ4a+lepXLK/YP1X5BEv4tEjbmbiRTwGQTCHJ8wQDMEc5kW8iTMz84nZn+H/ xx8zvIT/K2r/kuMIy7G8vPxyHC3LED70/8eh/7/K/2LtoHQUawflbRgSCy8WhiEY EgsHpcNi4bydxfH/qaFtXJL+//9X2V/SS/aS/ZJd5ZItLfn/jxt+/V+y/5L9S/YI /f///xH6/z81NOxL+v////+gx8cf/zHo//+f41fp/+jf//+i/f//L9r//4//S/+t 35n//xf0WT0Tz8TPOPT//9TQJPcv/Tvz/4ZsS78t/c/pOf2c/jn9vy3Z0nj/kmRL 35BFv79Rf0v/ui0lNCy9Lf22tNr6cfxG1DOXkMBvVPm3jDo2auOw8cbhsPFvbBy/ ZU0N7b9ab/2HIesMh6xNu93QhtwN/YZMu2Ea/5Y1bujfehiS7I+IIyIiIiIiIiIi Io6IU0PDQkTER8T///9/HP//1ND/f/w//v+fGvr/4/+fGvr////H/z819P/H//// nxr6/+P/nxr6////x/8/NfT/x/8/NfT///+P/39q6P+P////PzX0/8f/PzX0//// j/9/auj/j////z819P/H/z819P///4//f2ro/4////8/NfT/x/8/NfT///+P/39q 6P+P////PzX0/8f/PzX0////j/9/auj/j////z819P/H/z819P/H////nxr6/+P/ nxr6////x/8/NfT/x////58a+v/j/58a+v///8f/PzX0/8f///+fGvr/4/+fGvr/ ///H/z819P/H////////////////////////iIiIP7MCzTcoT8zcrvj///////// ////PCgrcYkXPxL95wIlVsxx4vS6LT0fIZC4c3zIf676Z+j1/9b/U55uy5JOHosF M/hn8/TYcXzr/9d/fQhe3pbkH/JZ55jPghnMM/E4pmB2xM3zGUE/feQN9c9swWz+ IOIv+DNvSLz9i7f/PPwOwfKyMGQ5WnjIkOX/ELz8/y/Zo/6ov/6aebGwIfF25vOw eDvtznwizcN5WCz8uTCxRIY+84bE29vakqH/Qbcl0D8+luxxVMl11HLJ1/XxQ7Dq S/YI/f//ReN/0fj/64MH/Rj0/zgO/qr6P+iX//+C/gX9Z1ux3vCi8b9o/H9Wbvhn bY45EbdgttkRt2AG/y/a////v1H/f8YPe0F/BkP/n2Um/CULgqOHHL38f71x1G9L r7/eatP7B//////B/5j5tNtQHk67DYmF35Ze/9l9HDZ+442j3pYY/WqrTW99W7fp 2fTo/Zfs8vXyx4/D8eXhH4bczL1l5t40HtbHRoWN4yjjj4+KMur/f/wHPwy5affv j4iIiIiIiA9Dlpu5TeNhmbnfNH5YsKz///+GR0RERER8REREHBERERER/7z/z/KH /VO6vy3//w/+R/0oW/ptej+jf1jf4w9HfdioHz8MwdA7rHfr/4iIiIiI//////8/ NfR//D819P+nRBNFf64jCw3B5MyBkyBmGoJZmIW4IBzkP9ElD8HysjwEC5b/D0Wx 9rlTbvE2icXaYu1zp9xibbG2OMGT5q+C7KVdsiVBdvnSLnn5/yEQ8Ymu/cf9XbJ/ rCX7/zXiv4QS/j/+/8eJru+n8/+99BPnifP/pY2XJek3JsEvtND/8Q1Hqv2/4f7s nJ3/E13SYLhsSfrBMOEfG/s/Sqfc5Ut/ym2/+3/p/SXp3///T3RB+n9I////H6UJ /n/pJ/DP+Gd5+v8nugTdb0uSIFu6v9WWWmrp/9I+pNal1n1ILrW6uv5HEY46YqMm X4Q36oiNMoqzUUb9J7oehmD91jBkyNqQoT8iDkOIiDgMISLi//9PDY3jH/9PDf3/ /+P/qaH/4///Tw39H/9PDf0f/xERf2YFmttBuV3x////J2duQv8hWP+r/s/aHHMi HiN2xGPENzviFszg/5IFwdFytAw5evn/mPm0I+VOO1LuPJx2GxILPzfBHCYcPXpE YT4TR/+SXXXVevnj/w/Bwv////gPnihmR6QIR4/QUSKiitGtOMpZsE37////G/7/ VT+I+DmezeymR4+4eSZeOgph4nHM95/3/3+WP+z7x1Xxf/mPFpbshwz52/L//z/4 zzEn4uZ5jqdHjxHH7IgTp+kRN48FE494xGPHsWDiccyJuHn8v3j7T7szX24W0Jk7 D/8oW/p/m97P6HsIjhaG/A85/mj5+CE/BEfL3zrqXy75/5Klf4//P+rDRh1E/DOf dmc+D//n4XRbOu0WCxsK+sxt6Myn3WLh9xr0//9/jD8MwdD/w3q3vpfscsn199Lr Lx+vl6yX7PLxf9H4/////4iIiIiIiPj+/8ffGv9/8P/4/8H/C/r/b/3PNvg//v// 35Z+w///v+GP///flv7Z+r//f5bvleX/w/7//2G/9fq/rfFvyza9////H7/XD/4/ W/8P/m/8f2z9UVH/3ZbeVpveb9M7/un9rbb8tvT0/jdz/28aD0M/LFj/jz+Oeivq f6PCG0eFj9+oERERERFxRETE/w5DbxoP64e19Vu+aTwsH4bemin6j4iIiIiIiCMi IiIiIiLiUX9pWH/o+K//+P////9zgxHKRTrx9b9VsP5vVf2fTQ4LZjtrC2YwO+Ix Ykfc/7flIe/L0XL0/xdvG8rDYTQk3k47Uu60//+o6waPWnXZ/x/02PCg//9/0fgn zIvG////BX0Gs7mg//+/9N////+P1216xq9/S//LOBxVYeM//l9mbocFy83cf4br 8YiIiIiIiOP/ZyYo3FT8//9//P+fJZKI4ChHWPHkUJKnT3RR6P966/2qf3IiSqRH MBNYhEZY8esddJ49/l/wQ7C2Pj3iMWJH3HxzIo6wzY54szmbHAtmmx3x2GZH3Hzz /f7/9VU76KPlaAiOIcfLD3nIMeRoyJB/HjN7+oyJm83MDMEQzGbe/6zNMTvi5nmO 2RFvNmdteuzYLJhtTsRjxONsciyYbXbEY5sdcfPN96cdKXfaZz7dUB4OQrHw52FD eTgoD6fdmTsP/7LwsSy//H+HHC0MOV6WrJeH4GhZfshDjiFHQ4b8VZct2bVeY5S+ Xnq5ZOmvYm3xfnasLRaGIRgSC+M/jHk47c58Hg5CsfD4YmFDmU87Um6x8OdhQ3k4 KA+n3Zk7D/////HBx8fHP8ZHCbIlvwTZkr9k/w3WyyXXa/zHJbvqMUpfL71csvT/ //8Nh/7/P/T/X/jlf8Pxf3zwH/z/wcfHxz/G//9/lsPO3Fme5Vn+GVuet+L/+P8/ F/7/Df+G/99w6P//////wbf//9n67f///88cPMv/LIc974f9/7Azd5ZneZZ/ptP/ t2RLb9ObvHeb3ja9bXpvyza9t3Pxz8X/f///g9vyg/8/+Pb/P1v/H8eHozbqjjrq qI+K+v///7+xTe9ttelN3lGt9N6WfnrvNr1tetv03pZtev9nuGBoh7W1DWtYw3pY sN5u3v/Nuzl/67+iPo7aKDc2Khz/Rt1RRx31UVEjIo6IiIiIiIiIiPhuS7a+Lbm+ Lf1hwXrTeFhbMGQabzkM/dY2rGEN62HB+m9j4zc2Khw2ivMfERERERERERERERER ERHx3zZkEPHfkOVu/f8RERERERHxP/7/////////////////////////////f8Li iCOe6JhDPLPx/79PCWqoppoKSqf+f4m4irh+Uy6D/v//////l0xFUzHp/kk62v// Bp0S/5RO/f9Cb+j//z+LTs3/////kqH9JVOt/2/9nnhIp8Q66v+IiIiI+P////// P+I/s3jzRZz45phNbOKYTXyxEeJimy2efsYm4WxQ3I7850lUU0E1FdRQQQ0VVFNB DXWZtaimwv9/Uw3RJUmSQZJBG7RBkkGbahHXS6ZcxPX/N+UyFXr8//////+/ZZAk /UtLvySZuv+m4p85lshidsSKWFP8FBEtApkdsXpL+uOkePz/G/T/f8meBJMsRgyU ZBFjdsSKWFP8/wuia+lPHeVUfuooR/9v6P/Y/0OwrvpL9mP/kqn5EPT/f2r+//9Z 4phvdsTNY76fHjt6xGM0cfPNjnjK5l4VM+D9//SImx0jjjlxzPfTY0ePeIwmbr7Z EW/JVJdMtUy1flOtl0z1TbX2/0OGHC1D7j9ajoYcL/tZm2N2xBHiCSYexzwWzPbT Y0ePeIwmbr7ZEU/Z3B/9EDxkyP1Hy9GQ4/+kl7Whrf239v9n7jycdouF83AQ8f+0 I+VO+zwcJImFe8mCHP+Q5SH3Hy1HQ46X/dPuz/yZOw8HEf9PO1LutM/DQSMiIiIi IiIiIv5fsvTyUb//qsvW6/HHPJxuaENnbvG2oTwcRPw/7Ui50z4PB0li4f5yL8le svT7r7psvf7/GH9wvP//xx/86/UvWajr91912Xo9/t/6j/H+/x////8Nf/z//4b/ +P8R9Hj//48/+P////j///9/lg87g/v/n+XD/v9/0fg//v9/w/97/Wdw//+z/P/P 1g/+//8/+M87y/8X9Bnc//8sH/b/8T9b/////xPibdmm9/S26e2tf0s2vWf02/L/ z9b///8/+P/b0rZs09tb/5Zses9CbEwcIS6e6MQWTwzmERvTiScOMRDi4ouO6eKJ OPL/qKg3KuqN/zjqjfoom97/trxu09tb/5Zses/o/634qKg3/uOoTw0VlKDmqaHC ixpqqKGCytRQMzXUUfNU9hz9Hxast2DtpvF/hgvWtiXtUYf/KONw1Bv/cdQb9f8w NCxYu2n8n+GC9Rv0vykXcf0b9KZCxLWp2XoR1/8RERERERERERFxfBiCtf+wzNwO azeN/zNcsLYtaURERERERERERPz//x///////3uNiIiIiIiIiIiIiIjjv5R0f2lT 0Sw/KUqSqShdxCUINCmaiv9/r49T4scbNJjfU5nUj/9P5Qb935b+Tx3oP3WgDQ1T 81MZnTpqbpD0G/o/4rb0//8/Xf+n5v///3/E/zfV+v2XXjL0b/3+/99Q4mltaLeS mtj/pvqf2Pv/HxEREREREREREREREf///////////38KcWLHF98cs4lNHLOJLzZC HLPFEUdsscXX/4cKxJBADKmopoJqKqihghoqqKaCGuoyK8X////hjwsiLskgyaAN 2iDJoE21iOt/ibhMjf7/+D/+//+/qRBxSW8q9P+XIEn/S0u/JJm6SfeXTA1I+v9L MOX6j5Pi8Z8iQJJB0lv/f+n4Tx3lVH7qKEf/v9D//6V5GoL+/0/N/0/N///z9KZa plq/qdZLpvqWJZnq///k0Ja1oa39E////4+IiIiIiIiIiIj4////////////s4jZ HGYRRzyxzcZ08TCDKcwTS+zYMZgRnxkxmNH/X1RTQQ2V96KaCipPZWqoQjU1BWJI IIYEAlFOHYih1IFA1BWIof+/ZNBLxFXEtWTQ/5KpEHH9///4//9//H/8x/H/f/yl //+/WZGpaCqeFJOaiZKpq//BUvDE3/oR8Q/m/w16dqk8RfDyDYH+BzEkMRwEAjVd kkAM/X+YGvSGHv7DVC40/o9LiNf/z6xA/+k6Nf//mfUQhVPz/6Vf+v+bar1kaDfV /zfVkkw1Ff/penL9//+kkPW7IdDETsKJQwxZb1mWlfyytv4jIiIiIiKihIiIiIiI +B//LJNytomZSFNzgiftRJvgmedGm5CJNBNkEhNp5llP0LlV/z9RXrk85TM/Vf5n /RPqJ+O5lZ//lM/8T39KT4r//xj0/zji4z/+/4j/+P//////////P7l5zB4EE1/E wweeuDksWPDEzWGWiZvHjEEw8dlmz342MyY+nSlMfPrE58xg9sTNPH3iFjxxM2Yw hdmzZ7BgBrMnbrrZTOHZzPNsZkx8BgsmPpvZEzc5MyY+gynMY/bEJz7xGcyzYGZm TNwcL3ji5rBgwRM3YwazLJjB7ImbbnLPZh5zmGXi5rBgZvOYPXELZjBj+sRNzoyJ mz7nWcQTg3n6L8vxfzTkj5ajIcfLP+RYFv7l6KOPXpZfXo5lWViWhxxDfjkacizL chzL8pCjhY+G/NHLL8eysCzL0fKyHD3koyFH/y9qqPlfzC0Ws4A2D0uGsph3Q4ay KBazcN6zgBZz/3kP5W2xuC2JxSyeRUNZPG+LuT9vGxILZ4FUzNtiUSyKuc97KO+G FgtnMe8hsSjmFguHQmJRzG0o71kUi4aymHdDhrJ43t6QWMwCqSgWxcJiMW9nUSxs SMwtFs6iobyfxbxn0Zb+l4jrf2HZ9f81Qr8uuxyh9YU/Qqux/C+7vr6+sfAbL6+6 sbzswhFaCP3yGqFVdmF5VdmFI7Quv0bo1zd+2VWXl5fdWJdfWF6P0GuE1v+P///4 3/4H/Y8f9P8H3fD/8f//hn/D/2/44wcd9P9Bj/+PH/T/B/3f8Mf/f2z4//8H/UHf /jc7mbIT//+/9Iv2/79o//+L9sPwb0v//w/DPwz/Pwz/L9ov2v+/aP///6L9/y/a /w/D//8/DP///6L9L9r/0g/m/f/n5W/8h/7Pl4f+/0MP+/+8/P+H/cP+f9ifl4c+ 9P+HPl/+5+Wh///Q/8P+vPz/fPH//x/6D/3GP0w5+n/Ta/b//+t/s29p/Zve+jp7 b92oZv//P31veit9v/Wn763Nvum9vn7rrzf7ptf6zb7pvX7rv/5P37/Z/62tzZ6+ f+tNr/Vf//X/6To1/xtl1OG3wh+Hw29UHB/eqPh4Y+M36v/wb2xUbBw26jc2Nsqo 4+PwRn28UUYZ9UYZFY7fOPxxOPwbHzbqNzbKKOM3KmyUUR+O//itTbVeMmXn/5a1 //4Ggez+Vo7LIJD3LYOIv0EgbxlE/C3rf/8tyyDiW279lkHEt6wNAnmDQPatNwjk Lct6y3KDQH6DiO9vEMjuv7Vbv0HEtyzrLbesd4NA/g0C+d+y/o+IiIgjIiIiIo6I iIiIiIiIIyIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi IiIiIiLiIyL+pbnVq/QfehT0P9eL0oNAk2Tm6bMMi2X+hEzFJGY9lee+mapZX/9H avz4Tx//J/FT4yn1JB7/Pz6O//j4//j////////kns2MiZtj4rOZPfEZzJ49gymY MQgmPtuzmcMsEzd74jN44mY8cbMXzGCen7gZc57NPBOfPoNns2Dis5k9cZMze+JP 3Iw58yZuHnNYMINnYfbEZzZ79gwWzGD2xE03m1kmPoN5Jj599rNZMPHZzJ642fxf GHK0sBzLL0OOl5fl6FiOPvpl4ehfFl4e8svRchz90bI85OVYfnk5luVYFv4hvxwt /xeLec+iWBSLIbHw5+28ZwEt5l4s5u0sHBILZ/EsvCGxKBazsC0tFsXiefu8G1os nEWxcCgL21IWFgvnbUN5XywcEnN/3jYkFs4CqZi3Q2JRLP55N7RYOIt5+385Quvy sqv8GxFaX3jZjeVVXl/+ZZeX/2WX3zhCv7wur/IvL28coZdX4TdeXnVjlV3+I/TL 68b/D/of/28Y9P/Y8P//f/xvf/wbHvT//7f/Nzzo/2/4/w0f/w/6/4b/v2j///8w LNr/Pwz/////v/Q/DC/a////S/8wvGj//8Pw/8Pw/y/a/z8M///Q/3n5Dzv0//ni ////vPyNz8uHfej//9/4H/ah/3/Y/w/7vPwP/f+w/7eu39rsb13p+/o3vZs9fW/p 1r/1m31r6zf71un767d+66231ErfX2+96a30/dafvt/sW9fXb336/t84fmOjNio2 jg9v1EYZxxv1Rx02yjjK2ijjjY/DG/VGHWXFRhmH443aqNg4bNRvvFHG8XF4o96Y 8X+DiG8QyG8Q8a0tg4hvGQTyvrVl5bi2/hzXbhlE/BzXWwYRf2uDQPatt85xneOy LDcI5K0tg4hvufVbWwYR3yDibxDIvvXW/xEREXFEREREREREHBERERERERFHxBER EREREREfEREREREREREREXFERERERMT/pFiXqF6lmajX/1FDo6BH/Yd1waph/UdE RMT///////////////9TELEnZkr+L/9E+r9Y+/H/5f//kc3siZvj2cweBJrB5Mye beLTJ24OCyY+e/rEZzBNCfS/YTlaWI5RlheOhv
QuestionHow to extract a file from MemoryStream? PinmemberNuBee27-Oct-05 12:47 
GeneralProbs uncompressing if don't know original length PinmemberJon_Dylon30-Sep-05 4:58 
QuestionHow do I unzip a compressed string? Pinmembershuvaj15-Sep-05 2:48 
GeneralCompress a bitmap Pinsusshappyhym22-Jun-05 16:39 
GeneralBad uncompression example PinmemberIhor Bobak24-Nov-04 5:45 
GeneralRe: Bad uncompression example PinmemberAstaelan24-Nov-04 20:26 
GeneralRe: Bad uncompression example Try This PinmemberJeffrey Scott Flesher30-Nov-05 20:08 
GeneralRe: Bad uncompression example Try This Pinmembermindphaser2k518-Jul-08 15:21 
QuestionHow to Zip more than one file PinsussEdilberto11-Jun-04 14:06 
AnswerRe: How to Zip more than one file Pinmemberchangcn21-Jun-04 15:46 
AnswerRe: How to Zip more than one file PinmemberMunkieFish26-Dec-06 8:39 
GeneralSecurity Exeception PinmemberEric Coll8-Jun-04 10:20 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.141223.1 | Last Updated 21 Jun 2004
Article Copyright 2004 by Astaelan
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid