ࡱ> M ubjbj== %WW}qlAAA8*B,VBΘ^CD"&D&D&D&D&D&DMOOOOOO$ `s&D&D&D&D&Dsc&D&Dccc&D&D&DMc&DMccle0&DRC o<AUf $T0Θ@dBcdc Multi-Routing the .Net Torres, Francisco Javier & Gigax, Kevin Edward Gigax, Kevin Edward & Torres, Francisco Javier CS522 Computer Communications University of Colorado at Colorado Springs Instructor: Dr. Edward Chow December 14, 2002 Contents Introduction3DesignSockets5Threads8Processes10ImplementationSockets11Threads21Processes24Lessons LearnedFinding available bandwidth25Conclusion26References28 Introduction The Microsoft .Net framework is a large set of Microsoft technologies designed to integrate multiple aspects of the Internet, web services and software capabilities. The Microsoft .Net framework allows compatibility of many different programming languages because it is language neutral and it introduces Microsoft's latest object-oriented language, C#. It is the Microsoft answer to Javas Virtual Machine (JVM). Both of which provide a virtual environment for running software. It is very similar to the J2EE and the Cobra platform, but strives to improve on their technologies. This project aims to use the .Net platform to create a multi-path routing software program. The program was designed based in the model shown in figure 1. The idea is for the software to find acceptable total bandwidths to route packets from the available proxy servers to the destination server. The project creates stream socket connections to determine these paths. In addition, the project plans to also implement bi-directional routing in the future to allow for improved multi-media communications. The project uses three major programming techniques as well as a timed outside ftp program call to determine bandwidth. The program uses threading and socket creation to establish connections with the proxy servers. It then uses process creation to find the available bandwidth with an outside ftp program call.  INCLUDEPICTURE "http://cs.uccs.edu/%7Efjtorres/semproject/MNETR.jpg" \* MERGEFORMATINET  Figure 1 The project follows the following objectives in order: Establish communication between a non-.Net framework environment and a .Net framework environment using sockets Progress to two .Net framework environments communicating together using stream sockets Get an estimated bandwidth using .Net software by timing a file download Add multiple-threaded creation of sockets to allow us to find the available bandwidths simultaneously 5. Begin implementing available bandwidth algorithms to improve the ability of finding good paths Design Sockets Sequence of events Before a client can connect, the server must be listening. The following diagram shows the sequence of events that make up an asynchronous socket session.  INCLUDEPICTURE "http://www.mctainsh.com/Csharp/SocketsInCS_2.gif" \* MERGEFORMATINET  We were working with two applications: ChatServer that the clients connect to and ChatClient that connects to the client. The Server listens for clients to connect; when a connection is requested the server will accept it and return a welcome message.The connections are added to an array of active clients m_aryClients. As clients connect and disconnect, this list will grow and shrink. It is not always possible to detect the loss of a connection, so there should be some form of polling to detect if the connection is still working. When data is received on a listener it is broadcast to all connected clients. Two methods of listening are discussed below; one using polling and the other events to detect connection requests. Method 1 - Using polled TcpListener We use the TcpListener class from System.Net.Sockets to provide a simple method for listening to client connections and processing them. The code (in the Implementation Section) listens for a connection, accepts it and sends a welcome message with a time stamp. If another connection is requested, the old one is lost. Method 2 - UsingSockets with Events Another method is to setup an event and catch connection attempts. The ChatServer sample uses this method. The Client is a windows form application that connects to the server and displays messages that it receives and allows messages to be sent. Stream Sockets in C# .NET We used stream sockets because: Session (or connection) based service Guarantees that packets are sent without errors, sent (and received) in sequence and without duplication Unlimited data size in packets Communication between server and client occurs through streams Streams can be used for binary, text, and string data or serialized objects. Scenario for Stream Sockets Sockets are created by both client and server, Server specifies a port number Server may customize aspects of connections (wait queue, etc) Client specifies the Internet address and port in creating its socket. Server listens for arriving requests to establish a session (connection) with a client. If no connections are pending, the server blocks . If one or more clients are waiting, they are queued and in turn, the server creates a new thread (stay tuned) to service each client. The parent thread re-issues the accept to service another client on the same socket. The client and server identify input and output streams for passing information according to a protocol they both agree to. The input and output streams perform the work of the application. The client and server must both close the connection to allow resources to be used in another connection. Threads How does a threaded socket server, for protocols such as http or ftp, allow multiple clients to be simultaneously connected to the server? This question leads us to understand the importance of Threads in this project. We can say that a thread is a lightweight process or a single sequential flow of control within a program. A multi-threaded program: Two or more threads seemingly active simultaneously. All within the overhead of a single executing program. A single starting point and an ending point for all threads in the program and for the program itself. Issues with multi-threaded programs: Synchronization Concurrency Deadlock Shared Data Scheduling and Blocking operations Performance Threading capabilities: Join - used to wait for another thread to complete. Sleep - suspend for a number of milliseconds Priorities. Thread States , are shown below; Thread includes a property to query a state:  INCLUDEPICTURE "http://pooh.east.asu.edu/Cet556/ClassNotes/Serial/cnSerialThreadSocket-4.gif" \* MERGEFORMATINET  Processes Multi-path routing takes advantage of system processes to implement a file download. The system process makes a system call to the ftp program and then the process waits for the system call to finish downloading a file. A timer is implemented to monitor the time it takes to download the file. At this time the file is set at almost one megabyte in an effort to get more realistic times. Once the ftp file finishes, the process is notified and the timer is stopped. We use the same file (meaning same file size) for every findBandwidth() call. We therefore just use the time it takes to download the file as the estimated bandwidth. We could divide the file size by the estimated time, but since the file size is constant, we would produce the same results. Implementation Sockets Method 1 - Using polled TcpListener (Server) private Socket client = null; const int nPortListen = 399; try { TcpListener listener = new TcpListener( nPortListen ); Console.WriteLine( "Listening as {0}", listener.LocalEndpoint ); listener.Start(); do { byte [] m_byBuff = new byte[127]; if( listener.Pending() ) { client = listener.AcceptSocket(); // Get current date and time. DateTime now = DateTime.Now; string strDateLine = "Welcome " + now.ToString("G") + "\n\r"; // Convert to byte array and send. Byte[] byteDateLine = System.Text.Encoding.ASCII.GetBytes( strDateLine.ToCharArray() ); client.Send( byteDateLine, byteDateLine.Length, 0 ); } else { Thread.Sleep( 100 ); } } while( true ); // We should have something that let us to finish the Server } catch( Exception ex ) { Console.WriteLine ( ex.Message ); } Method 2 - UsingSocket with event (Server) IPAddress [] aryLocalAddr = null; string strHostName = ""; try { // NOTE: DNS lookups are nice and all but quite time consuming. strHostName = Dns.GetHostName(); IPHostEntry ipEntry = Dns.GetHostByName( strHostName ); aryLocalAddr = ipEntry.AddressList; } catch( Exception ex ) { Console.WriteLine ("Error trying to get local address {0} ", ex.Message ); } // Verify we got an IP address. Tell the user if we did if( aryLocalAddr == null || aryLocalAddr.Length < 1 ) { Console.WriteLine( "Unable to get local address" ); return; } Console.WriteLine( "Listening on : [{0}] {1}", strHostName, aryLocalAddr[0] ); //With the address identified we need to bind the listener to this address. Here we are //listening on port 399. Hint: It is good practice toread the port number from the Services //file located in "C:\WinNT\System32\drivers\etc\Services".The following code binds //the listener and begins to listen. An event handler is added pointing all connection //requests to OnConnectRequest. The application can now go about its business without //having to wait or poll for clients to connect. const int nPortListen = 399; // Create the listener socket in this machines IP address Socket listener = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp ); listener.Bind( new IPEndPoint( aryLocalAddr[0], 399 ) ); listener.Listen( 10 ); // Setup a callback to be notified of connection requests listener.BeginAccept( new AsyncCallback( app.OnConnectRequest ), listener ); //When a client requests a connection, the connection request event handler is fired as //follows. The following codecreates a client sends a welcome message and and //reestablishes the accept event handler. Socket client; public void OnConnectRequest( IAsyncResult ar ) { Socket listener = (Socket)ar.AsyncState; client = listener.EndAccept( ar ); Console.WriteLine( "Client {0}, joined", client.RemoteEndPoint ); // Get current date and time. DateTime now = DateTime.Now; string strDateLine = "Welcome " + now.ToString("G") + "\n\r"; // Convert to byte array and send. Byte[] byteDateLine = System.Text.Encoding.ASCII.GetBytes( strDateLine.ToCharArray() ); client.Send( byteDateLine, byteDateLine.Length, 0 ); listener.BeginAccept( new AsyncCallback( OnConnectRequest ), listener ); } Client //The client connects connect to the server when the Connect button is pressed with the //following code private Socket m_sock = null; private void m_btnConnect_Click(object sender, System.EventArgs e) { Cursor cursor = Cursor.Current; Cursor.Current = Cursors.WaitCursor; try { // Close the socket if it is still open if( m_sock != null && m_sock.Connected ) { m_sock.Shutdown( SocketShutdown.Both ); System.Threading.Thread.Sleep( 10 ); m_sock.Close(); } // Create the socket object m_sock = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp ); // Define the Server address and port IPEndPoint epServer = new IPEndPoint(IPAddress.Parse(m_tbServerAddress.Text), 399 ); // Connect to the server blocking method and setup callback for recieved data // m_sock.Connect( epServer ); // SetupRecieveCallback( m_sock ); // Connect to server non-Blocking method m_sock.Blocking = false; AsyncCallback onconnect = new AsyncCallback( OnConnect ); m_sock.BeginConnect( epServer, onconnect, m_sock ); } catch( Exception ex ) { MessageBox.Show( this, ex.Message, "Server Connect failed!" ); } Cursor.Current = cursor; } //If the connection already exists it is destroyed. ASocket is then created and an end //point established.The commented out code allows for the simpler blocking connection //attempt. BeginConnect is used to commence a non blocking connection attempt. Note, //even if a non-blocking connection is attempted, the connection will block until the //machine name is resolved into an IP address, for this reason it is better to use the IP //address than the machine name if possible to avoid blocking. The following method is //called once the connection attempt is complete, it displays connection error or sets up //the receive data callback if connected OK. public void OnConnect( IAsyncResult ar ) { // Socket was the passed in object Socket sock = (Socket)ar.AsyncState; // Check if we were sucessfull try { // sock.EndConnect( ar ); if( sock.Connected ) SetupRecieveCallback( sock ); else MessageBox.Show( this, "Unable to connect to remote machine", "Connect Failed!" ); } catch( Exception ex ) { MessageBox.Show( this, ex.Message, "Unusual error during Connect!" ); } } Recieving data //To receive data asynchronously, it is necessary to setup an AsyncCallback to handle //events triggered by the Socket such asnew data and loss of connection. This is done //using the following method; private byte [] m_byBuff = new byte[256]; // Recieved data buffer public void SetupRecieveCallback( Socket sock ) { try { AsyncCallback recieveData = new AsyncCallback( OnRecievedData ); sock.BeginReceive( m_byBuff, 0, m_byBuff.Length, SocketFlags.None, recieveData, sock ); } catch( Exception ex ) { MessageBox.Show( this, ex.Message, "Setup Recieve Callback failed!" ); } } //The SetupRecieveCallback method starts a BeginReceive using a delegate pointing to //the OnReceveData method that follows. It also passes a buffer for the receive data to be //inserted into. public void OnRecievedData( IAsyncResult ar ) { // Socket was the passed in object Socket sock = (Socket)ar.AsyncState; // Check if we got any data try { int nBytesRec = sock.EndReceive( ar ); if( nBytesRec > 0 ) { // Wrote the data to the List string sRecieved = Encoding.ASCII.GetString( m_byBuff, 0, nBytesRec ); // WARNING : The following line is NOT thread safe. Invoke is // m_lbRecievedData.Items.Add( sRecieved ); Invoke( m_AddMessage, new string [] { sRecieved } ); // If the connection is still usable restablish the callback SetupRecieveCallback( sock ); } else { // If no data was recieved then the connection is probably dead Console.WriteLine( "Client {0}, disconnected", sock.RemoteEndPoint ); sock.Shutdown( SocketShutdown.Both ); sock.Close(); } } catch( Exception ex ) { MessageBox.Show( this, ex.Message, "Unusual error druing Recieve!" ); } } //When the above event is fired the receive data is assumed to be ASCII. The new data is //sent to the display by invoking a delegate. Although it is possible to call Add() on the //list to display the new data, it is a very bad idea because the received data will most //likely be running in another thread. Note the receive callback must also beestablished //again tocontinue to receive more events. Even if more data was received than can be //placed in the input buffer, restabilising the receive callback will cause it to trigger until //all data has been read. //The AddMessage delegate is created to decouple socket thread from user interface //thread as follows; // Declare the delegate prototype to send data back to the form delegate void AddMessage( string sNewMessage ); namespace ChatClient { . . . public class FormMain : System.Windows.Forms.Form { private event AddMessage m_AddMessage; // Add Message Event handler for Form . . . public FormMain() { . . . // Add Message Event handler for Form decoupling from input thread m_AddMessage = new AddMessage( OnAddMessage ); . . . } public void OnAddMessage( string sMessage ) { // Thread safe operation here m_lbRecievedData.Items.Add( sMessage ); } public void OnSomeOtherThread() { . . . string sSomeText = "Hi There"; Invoke( m_AddMessage, new string [] { sSomeText } ); } . . . } } A very simple implementation of Server and Client: using System.Net.Sockets; using System; /// /// Example program showing simple TCP socket connections in C#.NET. /// TCPSocketServer is the socket server. /// Tim Lindquist ECET ASU East /// September 8, 2002 /// public class TCPSocketServer { public static void Main (string [] args) { TcpListener tcpl = new TcpListener(9090); tcpl.Start(); Console.Write("TCPSocketServer up and waiting for connections on 9090"); Socket sock = tcpl.AcceptSocket(); string msg = "Hello Client"; Byte[] msgBytes = System.Text.Encoding.ASCII.GetBytes(msg); sock.Send(msgBytes, msgBytes.Length, SocketFlags.DontRoute); tcpl.Stop(); sock.Close(); } } //Client using System; using System.IO; using System.Windows.Forms; using System.Net.Sockets; /// /// Example program showing simple TCP socket connections in C#.NET. /// TCPSocketClient is the socket client. /// Tim Lindquist ECET ASU East /// September 8, 2002 /// public class TCPSocketClient { public static void Main (string[] args) { TcpClient tcpc = new TcpClient("localhost", 9090); Stream tcpStream = tcpc.GetStream(); StreamReader reader = new StreamReader(tcpStream, System.Text.Encoding.ASCII); MessageBox.Show(reader.ReadLine()); reader.Close(); tcpc.Close(); } } Threads Threaded Socket Server: using System; using System.Collections; using System.Threading; using System.Net; using System.Net.Sockets; using System.Text; /// /// Class demonstrates use of multi-threaded socket servers. /// Tim Lindquist ECET ASU East /// June 15, 2002 /// /// /// This server is multi-threaded in that it creates a new thread to handle /// each incoming client connection. Note that .NET supports this directly, /// if you use the asynchronous server sockets (see Using an Asynchronous /// Server Socket in the .NET Framework Developer's Guide). /// Each incoming connection causes the server to allocate a new /// thread object. The communication protocol in this example is simple. /// The client reads a string from standard input to send to the server. /// It then reads a string from the server and displays the string /// on standard output. /// public class ThreadedServer { private TcpClient threadClient; // the connection number of this client private int connNo; public ThreadedServer(TcpClient client, int connNo){ this.threadClient = client; this.connNo = connNo; } /// /// This method is started in a new thread to service a client /// request. /// public void handleConnect(){ string msg = "Hello Client, you are client number: "+connNo; byte[] msgBytes = System.Text.Encoding.ASCII.GetBytes(msg); byte[] readBytes = new byte[1024]; // get the network stream associated with this client. The network // stream can be used for both receiving data from and sending data // to the client and can be used either synchronously or asynchronously NetworkStream ns = threadClient.GetStream(); // Show the methods to read and write the stream directly rather than // creating a StreamReader and StreamWriter as in the client. // Using this method, must read the correct number of bytes for the // appropriate type and do the conversion from byte array to type. // Client is sending a string, so read it all (less than 1025 bytes). int howMany = ns.Read(readBytes, 0, readBytes.Length); ASCIIEncoding AE = new ASCIIEncoding(); char[] charArray = AE.GetChars(readBytes, 0, howMany); String myString = new String(charArray,0,charArray.Length); Console.WriteLine("Received from client {1} the string: {0}", myString, connNo); ns.Write(msgBytes, 0, msgBytes.Length); ns.Flush(); //doesn't seem necessary since its next closed. ns.Close(); threadClient.Close(); } public static void Main (string[] args) { // count connections int connCount = 0; TcpListener tcpl = new TcpListener(9090); tcpl.Start(); Console.WriteLine("ThreadedServer waiting for connections on 9090"); while (true){ // accept a connection. Note connection is completed before Accept // method returns. The alternative is an asynchronous accept. TcpClient tcpClient = tcpl.AcceptTcpClient(); // create an object to start a thread in to handle the connection ThreadedServer tcs = new ThreadedServer(tcpClient, connCount++); Thread cThread = new Thread(new ThreadStart(tcs.handleConnect)); cThread.Start(); } //tcpl.Stop(); not necessary since the loop doesn't have an exit } } Threaded Client: using System; using System.IO; using System.Windows.Forms; using System.Net.Sockets; /// /// Example program showing simple TCP socket connections in C#.NET. /// ThreadedClient is the socket client to a sample threaded server. /// Tim Lindquist ECET ASU East /// September 8, 2002 /// /// /// This server is multi-threaded in that it creates a new thread to handle /// each incoming client connection. Note that .NET supports this directly, /// if you use the asynchronous server sockets (see Using an Asynchronous /// Server Socket in the .NET Framework Developer's Guide). /// Each incoming connection causes the server to allocate a new /// thread object. The communication protocol in this example is simple. /// The client reads a string from standard input to send to the server. /// It then reads a string from the server and displays the string /// on standard output. /// public class ThreadedClient { public static void Main (string[] args) { TcpClient tcpc = new TcpClient("localhost", 9090); Stream tcpStream = tcpc.GetStream(); StreamWriter writer = new StreamWriter(tcpStream, System.Text.Encoding.ASCII); StreamReader reader = new StreamReader(tcpStream, System.Text.Encoding.ASCII); Console.Write("string to send>"); String myStr = Console.ReadLine(); writer.Write(myStr); writer.Flush(); String fromServer = reader.ReadLine(); Console.WriteLine("Received from server: {0}", fromServer); reader.Close(); writer.Close(); tcpc.Close(); } } Processes The process creation is rather simple. The process object is in the System.Diagnostic library. To create a process, we use the following code: int start; //Keep the time int bandwidth = 1000000; //Set large for failure Process p = new Process(); //Create a process obj p.EnableRaisingEvents=false; //Disable events from interrupting //Set the directory to find the batch file for ftping p.StartInfo.WorkingDirectory="c:/Inetpub/ftproot/kegigax"; //Set arguments: -s: reads a file of commands for ftp p.StartInfo.Arguments="-s:ftp_batch.txt" + server; //Designate the program to execute p.StartInfo.FileName="ftp"; start = System.Environment.TickCount; //Start the timing p.Start(); //Start the process p.WaitForExit(); //Wait for process finish //Calculate time for ftp call bandwidth = System.Environment.TickCount - start; p.Close(); //Close the process The major problem with the implementation is the timing. The actual time to download the file is much smaller then the time found. The reason is because we are executing an external function and calling a process before the download even occurs. The overhead for these is large and takes up more time then the download. We use a rather large file (1MB) to try to compensate for overhead timing errors. At this time, we are using the findBandwidth() function to find an available bandwidth from the host computer to the wind.uccs.edu server. We were not able to implement the actual socket connections with the findBandwidth() because we need three .Net servers with ftp capabilities. At this time we only have two available servers with ftp because of problems with the wait.uccs.edu server, it seems it is blocked by a firewall. To understand the ftp program call, see the ftp_batch.txt file at  HYPERLINK "http://cs.uccs.edu/~cs522/projF2002/kegigax/doc/ftp_batch.txt" http://cs.uccs.edu/~cs522/projF2002/kegigax/doc/ftp_batch.txt. Lessons Learned Finding available bandwidth An interesting fact was observed with finding the estimated bandwidth. Our initial plan was to use a system call to ftp. However, during implementation we experienced difficulty in getting the ftp function to work. We therefore tried using a timed ping to estimate the available bandwidth. After some testing, it was interesting to observe that at times, the function call using ping would be faster to servers in Mexico then servers in Colorado Springs from system calls in Colorado Springs. It was observed that there is no direct relationship between the ping program and available bandwidth. This was confirmed by Dr. Chow (2002). The main problem is that ping tries to find the distance of the path, while ftp is downloading actual bytes from the destination server. Conclusion We started from this picture: Lets find the way to establish communication between two machines, finding the best bandwidth between them, and thats all. We were right and we were wrong. We were right because these two points are the background of this project: do the communication and find a way to calculate the bandwidth. We were wrong because it is not as easy as we were thinking. Establishing communication in a way that is useful for the project involves some issues: multi-threaded servers, concurrency, process, detailed design of the frames headersand finding a way to calculate bandwidth is not trivial. We think the headers should have the follow information:  We were able to implement these issues, but not to put them together. An interesting project that would let us put these concepts together is a program that sends and receives voice and sound based on a bandwidth that incorporates fast speeds. We hope that this project can be the first step in the development of that project in the future. References Albahari, Ben, Peter Drayton & Brad Merril, C# Essentials, 2002, OReilly C#-Corner, http://www.c-sharpcorner.com/ Lippmen, Stanley B., C# Primer A Practical Approach, Addison-Wesley, 2002 Pearson Education O'Reilly Network: Multithreading with C#,  HYPERLINK "http://www.ondotnet.com/pub/a/dotnet/2001/08/06/csharp.html" \t "_parent" http://www.ondotnet.com/pub/a/dotnet/2001/08/06/csharp.html Programing with threads in C#,  HYPERLINK "http://pooh.east.asu.edu/Cet556/ClassNotes/Serial/cnSerialThreadSocket-25.html" \t "_parent" http://pooh.east.asu.edu/Cet556/ClassNotes/Serial/cnSerialThreadSocket-25.html Stream Sockets in C#.NET,  HYPERLINK "http://pooh.east.asu.edu/Cet556/ClassNotes/Serial/cnSerialThreadSocket-18.html" \t "_parent" http://pooh.east.asu.edu/Cet556/ClassNotes/Serial/cnSerialThreadSocket-18.html The Code Project,  HYPERLINK "http://www.codeproject.com/csharp/workerthread.asp" \t "_parent" http://www.codeproject.com/csharp/workerthread.asp VisualC Ideas: Using Sockets in C#,  HYPERLINK "http://www.mctainsh.com/Csharp/SocketsInCS.aspx" \t "_parent" http://www.mctainsh.com/Csharp/SocketsInCS.aspx PAGE  PAGE 2  &-78;<EF^_wx>?BC_`cd  s v WX-ǻ)0J56B*CJOJQJ\]^JphjB*UaJphjB*UaJph B*aJph jUCJ CJ 5CJ$\ CJ(mH sH B*CJHOJQJphCJ(A     &'()*+,-\$a$}uu'57 $$Ifa$ $$Ifa$$If#$d%d&d'dNOPQ789:;<CDEFN\^_guw(dd$If $$Ifa$ $$Ifa$$IfW$$IfFF"Vb6    4 FawxpHh$If $$Ifa$ $$Ifa$$IfW$$IfFF"Vb6    4 FahpL$If $$Ifa$ $$Ifa$$IfW$$IfFF"Vb6    4 Fa-;>?@ABCN\_`abct$If $$Ifa$ $$Ifa$$IfW$$IfFF"Vb6    4 Facdo}< tjbb$da$#$d%d&d'dNOPQ $$Ifa$ $$Ifa$$IfW$$IfFF"Vb6    4 Fa <   w ) 0}'$d%d&d'dNOPQ` $d^a$ $ & Fda$`$`a$d $d`a$$da$W-,Mt $ & Fda$ & Fdd`d$da$ $d`a$ !`,KM   HP %NXag!/=!>!G!t!%%0(*+aJ 5>*\ 5CJ$\j OJQJU^J OJQJ^JjOJQJU^J 0J5\ 56\] 5CJ\0J5PJ\6]0J6PJ])0J56B*CJOJQJ\]^Jph B*aJph56B*\]aJph4>8b|O#$d%d&d'dNOPQ$da$ $d`a$ $ & Fda$ & Fdd`Ot NZ!"#-.,!.!$da$#$d%d&d'dNOPQ` $ & Fda$ $d`a$.!=!>!F!G!t!!!!!!5"K"R"X"""""$da$'$d%d&d'dNOPQ``'$d%d&d'dNOPQ`"#.#x###^$$$$$$$A%C%Y%[%%%%%%%%%6&[&&$da$ !&&&&&('*'+'c''''''0(1(((;)))*7*q**+=+T+U+++++5,,,,,,-D-----..9.x..+/,/y/{/}//// 0 !+,}////P005>5@579):6::<<<<<<<R=ACC?DGHMMMMU[f[abbbbbbc&cFchcjcccdIdmddddddee5eweeeeii^i_i`iiii·0Jj|%U jU 0JB* ph0J 5CJ\)0J56B*CJOJQJ\]^JphmH sH B*aJph 5>*\aJH 0P0R0v0000011L1}111112V2W222,3-33333404 !04r444445!5>5@5A555E666L77777&8O8P8s8{8888888W9X9^9x9~9999999A::::/;1;9;?;;;<<1<7<<< !<<<<@=R========>0>L>V>>>>?V???? @@"@,@x@x@@@A A&A@AFAAAAAAQBBC\CCC)D?DDDDDDDE E ! EbEpEyEEEEE:FLFVF_FFFFFGG6G@GRG}GGGGGGGHHH1H?H@HNHHHHI&IEIFIsIIIJ'JHJJJJJJJJJ KK7KQKQKRK`KKKL)L8LWLXLLLLMbMMMMMMMMMMMN#$d%d&d'dNOPQNN+NENXNYNgNNNN OOcOOO5PvPPQKQcQrQQQQQQQ/RQRQRmRrRsRRRRRSKSSSSITTTUZUUU9VvVVV#WgWWWXXX0X5X6XcX~XXXX&Y:YYYZOZZZZ[L[Q[S[U[f[g[u[[[[[[[\U\\\\\]d]]]+^t^^__'_E_F_r___`P````a4a4aHasaaaaaaaaabbb'cicccdIdmdddded#$d%d&d'dNOPQe5eheeeiiiiiilllUooooop&d$d%d&d'dNOPQ#$d%d&d'dNOPQd`iiillooppppp@qAqjqkqmqqqqqqPrQrrrrrrrsskslsssssAtBtCtEtWtXttttttuJuKuzu{u|u}u~uuuuuuużż鵼żż騡0J j0JU<B*OJQJ^Jph@E jUaJ0JB*aJphjUaJmH sH aJ<aJ#5B*CJOJQJ\^JaJph@EaJ j&U 5CJ$\ 5CJ\CJ$>pppppAqBqkqlqmqqqqqrrrmsnsCtDtEttt ! & F&d$d%d&d'dNOPQt|u}uuuuuuuuuh]h&`#$ & F uuuuuuu<B*OJQJ^Jph@E0J0JmHnHu j0JU# 01h/ =!"#$%Dd6  S Ahhttp://cs.uccs.edu/%7Efjtorres/semproject/MNETR.jpgRr>~+9ȴDFr>~+9JFIFC     C   ," }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?S(((((((((((((((?i-oJ&xƗvwZΚpcIiy8\f1ZjQ#i<cSFG<{n9MZ.I{{7Nܼ7ҳ˟^e%D]j/sU-<(c}%ƿ4ɤO.861?3ƾOٻ~7>.O :[ˀ<ۋ6}q{Wi? i>Ymnryf'zjmspZt~->kYݶVfѱEWYEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPxW4 }.di6HݣIW%蚅Ѭt\2\O c D#+b/Ww M;kc$Q86oGdU8hɓ붞*ž2oՍj_0-GHɇ-J'5w^ %U+Vﮞ*KԓW$<)^ F闺$iў)^& F1;R<}u}d\;GwO0&6b5_Mj:@f[(4܌ؕ[~⭁:jn|To;^STMCWOӺޱ:k4𾔚^jݟCw:@TM!rvu^2VZ?VIRKX(UBG 61޵hxw~$ړj["N䢐$ 1uտfL.ay˿[")pB V[yy*Yn\ߗ9^uwoZ]7M xD$z\i77̲(Nᴂ8'W>}\u IU9+dYgkx1?5OǪMhу|;';d(gi.u6,ml,.$*$m@;^K 3nj_fF|vݕĺnmvGu m.yɮ꼳tj:hvm^_vc`y W H<:ڛn*繁Iiʯp+C(((((((((((((((((((((((((((((e_xSm3MּIitͤ,*"rX^y~2Ѿkw㴮;f^E{[ ^ OHPڐ4S͑2] ((((((((((((((((((((((((((((((((~*v.,߈<% (4W6n)6a ׁcS+ @93Kw?*V=v> 1xGPDCKUo0mrJ=_^wVҝ:M_oSԮdRV2̡ VAg'c' G+<7]7mj.a[KI-9T]F7$B2oQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE%SJ^k`]FJngt يi?q_Wwj%.SW"OY45X2ۗ&5s߂zB'H_ƟtfKmt;FS4jURJIPBg>9O:U K{cƚu8\hf]=+got?W㶹YiksvCq1aHh~\pI%G|w]ɭaKiM{[41)oHMQE1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W㿋xƂCaj<ۀK(VUuvWĿjEӓdҘ9!rdø$r<Ӵ=" ~0/Q oAQّ#UcȬ6+O8Grm'My̰1/E)5U~M[\,xS4쏘m(OGMu瞘QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQHIbIPj=4|]tQm\GÃ]׺Ps\~?L'.|O@%diIBq$ub:\#[~&uqh:fr |r 9>2m쮝-nem"¹m$ȫ۟qfc SoVK8δ %vEz|_>=݄?e-G4lc˷RpNrK1,I's&'Lac+Ʋ1Qbu`AV%TR8ȇgiT4C%ֻZCgtO~d/k-V\6Vgy][s l]ZX{~$kpIp*DvL(['ry[zc_;S7*AGtk!m^}j[yaqX7v>7ּ *Y6`&[b8$2L?T$o{v?i]^G-V`v^$``EpMTt:zF_VqOWldKyp .$DjbO}] mV!5Qn_id|֒dTEp5o /֐]_F}fG/S (!]v"ӡү+ceǨe$b/QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQYt e{V42ORxSllۏDǏX~Y9v]wZZ¥w,x~#^x~ џY1|Ny2-OckuxSɩ68mϴɎk_4|)Cpdn-44nnHv 22G4a'_"ojxϦ/ف>`b/ df_mJ î1BZHOE5~ζZKrrHr uq, 5vI(HB(ڀ9 DmVyH95[ %,1>Dۛ,`s@۴$. ,Q!e rHv({{&RՕC-FᔂX; i/Ah^ w$YYff$$I&EѬ=A {XA $K31f$XI$I&*6>k /٦}Z!\H{#޻kl-fa2I#*($ Mq\7ėTtaV2? apߵď|,NxsPԺ^GF$2Pcu9/OĺvE~(saG* 'wRz o_%Z/c3U?-G Pq#zG4sMKXԊzK"]Es~6&:g7ȩk֩t>KE|sx[[=#/4$֝ uxd Dص.~%Q.y€o?O~)Exs× usVkg[DaU; s6 щYfkx߅?,|!i<%Zƽys K}"p$h8*NN'hKָ:-' A÷2e%JS+*!ăO㿉 >-xCH,>xKRuzAuzVDBHц2pTc+4u|S_ZkWҧvy[4K ?*|qoou? |1񆙤Eld3ف.XAe4\,}}ES$(sĿ4O gwt.4ar€rrcc1S[v]ަM-E.EhgbApȢP^Fe>lirxOLok)ݺlҾAπ4O \KwghePw59 9.T]rzM#GSU7j LBuQOt70<DI*I=xǖ%VpMDGX!aSmK\G}[uFCdA`<(*rHgzu[-%o^ź9"$x+b>UZǂ [Z ާxm=NpTq[b ur\&."ԵeP맫(`*,R @A9]/uRozo"-RՂ `UYH*Ea$sohzt>", 331gwv%ً3;Y$4=Ú\~kp1%٘wf,K31$IQ@CfGE\l=vJ<?DC]vUqgAmZgK] ǴnCB3]FYV3Y_A}g:1$r/)#FV_YN9cG"A{׼ ]jK5k;ɽ8US@+{| gc47qXكDJ5/|8|h3ю<"rLώ\bm7YMF+FqnHtD, k#4 jzՌ7}s-G"AW,eRѦ3oEqޚ" SۤF t"n\k:L^)b: W*=d@㑙HJwV|o&bՁݏEogP}v (?o[J-^[X{3//`bf20Vw*0X +g_5O:Ƶw}ONM[;&34)CH޿_l? ú;>&o*Z#s uu(/waXRXzC<徕㯌ckZ=o>i:kHv@0wm~}x[Q۵zk,I+HQEQEQEQEQEQEWZuBŞ7m^֤׵? G*iw/ Ae^wn¯< v{>Ox 9Zhǩkn791$pEmMWuIuEu*#tnWQJs濉W~&Z#l5MVڄU`x)k?fO,(]u&oj-baē>yV9dE$(]=_}7~h'[j_N[ V"ȅQ2-1ڶ~)Xa;QEv-z-&:!? >f͹X뉥Ǫy*G 45ωzFɥYLj5+HA4ɞi$$ iYk?0I<+tI<˧_I.F܎SS]f3:tvFmYG,h pS b15äiY;yFZk7#eo[4W!x JmÖ_kE]##3;i +:=_Y>Aac@8$Ƹžnu Laq?ߕK#_&kjnZ/.űxrv ca); ߅ Xj-,$@Idr^G8g$ ֢+ukTþɻhu`+T0* B @A9^ouR_z_&0?5MNFPAWe B] BޗǸ]ݘwwbYݘfbYI$] Bޗ[EY;,YؖfbĒIQ@se$1Wö֙ٗk{tGhO$$բ/Ư i5w$ 6\:5|+C:{n[N9,Xd? (ck ~]ҷ_]:~c+w{/-oiguKODRy#]p~ ooaqg IC&=((3FZ&X I$n2:C)v5"oxa:N w`D$c(  !򗳪ږi\XC{ep)@Ȅ`)hFk /dN^r痈sQ̤᥮rB(<_mZo27h|c|Rc#rpHkW K- u;uxc$( xK^/د٣<#z`< i-:Ƣuk|A(t$:$AIs6ܒO5;SLcK+w6LscZ~:z/ǝWºШ cDӼEMa[jV3 ]²Ы\}k&zi2= b\3ʓ + mkŶZ]vTQ.+ H^$L|<S]:~#ҳpOʢF&ߌsOV>'w= Sզsp J?:D=3]kͤJpEvxFx\-C:>y[íZonVo"@*0EHnj ?"E oƳmNVooH'c*I'5-X.>uk0XXYGq0]m&Ib$*.s1~^,5PxpzV{ۥUȐ/ʌFZ(]8 uǂω|_+MQ)5$֋Sګ,n⥲8#?f? V5=CYo|ZI] hiv !(4@8QmQE ( ( ( ( ( ( ( (ZƵNP/nnXz1~4v &DԻ#UdO@+ZW ոm@"v#F$-jw]v`PGZO1׳ Il}L_>h+ '+{3ƺ둟٩GFpDzZ viZB#pOE'JZ il.(+kAX6os7*x< Ep>$7ϠIMzڜ}-X''$E xJ[ok,j/#0[۝FUs@gqW t.ׄ5 y&[v oaֻj(ž"+U1Gb\1讏^0|am$>Mm H [5x⫘/,Ne#[^DvѐI{@,o6Zj*?ّ@S+,^kGBkZis.{1̣]}(((((((7?1jWo.6\c A|Pdz?lޱ3>W= =s?j񯌸<7 u8f0L0cSZwn) RM[Q]=THqIbmAEdGGx&zf >4LU#᎗gj\[Ũj%h[qcE$u& ((xyfb*$ßj9׃8tMyӬysE*eZHE TWA@ZAak 1‚8B( 8 ( T5.FaѤ#'~Qο=g5lն2I,I<ǖf)jzLkZɥHz9%@F$HRq?8ϥ2+PQh={.-z$hUG*QE|z*3`o_1虫f fя_gr|> %V#/&1/֯eu&TkF"kZ\:ޏ}\{ YJ9SW[[{w^Ӣ~? Š((((oN']kdYr-H(=7)xߩ0/%&tVЪi8[FJAvxJ=ymnK,}RrуѺ$7Fx8V]Q xKuuPB5Q@axzWRؖc*˜@8a8(?~]^[MSOozmľ$!-]f&b45 )2kwqЂ  օrZkJ]cGÚ.p0G`c,7GL:+߅[oYǥvjKi}%2BkGWPC)t4|;N{ cN윂]IJ!#(]?>woH'ΌfTt>)š:\q٘M(ڃL{-wtUe<GZds K ,NXA+M3xRL-7i$'2sg%'mvkWo09?݌H؛RԭՊ;[cr;jEPEPEPIKEpgOyOm.{%ơ y* og'c,7n/%vY$#՘ݢ ( ( j3Z\VuƫpDvvK9vUg$Wdޢx F'OAp r !JƬ7 R@Q@Q@fx=V}5巷}褀OSEfxw֞Ӆv%V,$LOS iEQEQEK_j ٤%, p|뙘_nrQӯ[EQEQExo{KnUIZ+X˕A AO |Ɨڽm%ـ8pGנ^ʹc'+%X43öBJY _$dsG ~pi?$U/-sR]a'fGOYJ('bHl| V`-ni&룒HZ(˗:,ܚv9eԧk dV5͜G\AOS~躅ņ'Vc\HuVRkHӜ@oν4i;i3Q9ӂzȩqqZ( k/io[^,ƓF1dwy2p #>/w3: skr$A0+]cㆉ9~!CKҼKa]AqeY')R8ϒxSFE?JO2j5<6e(U*#ʒ31/ iSx'.}>T&^2F oNҽ_{I|8f]@'#ZP3_VXtbgNVNȣV~5 _Q}W3m-$RPIk|%v|ωh57ƥpW1®(Hdf8hKOKGm}k^kF}(YKD껼)orK%mRgcOs{p#.5sớMo?χz^$4?4;Ft.">ҌHj4/z3CǨϣ[5xO!AC,qsztӥ+~dրs_Ɵs8?Kۛh5 FSrw h*cۆ  f\x;IVm9!M&Ydd &\DWl0'ŊZ?5mhnEWAV/^OU:> j.]#7![c~ ;kWOMio66#veA9VU dg_Lo|9->_V蚯7}zn0򽥵×XY*KNW2ihTo宑hz޹៭~rxjW%Z |_/_Kœ]ii;H\DneS0uawI<ohNsaKjȹ::ApKUIzi\[j֪饧+ C, -~vӗOb,T (Q#olȧ\U+fu4RKY((Ǫæ=SB1ٙTL#*3 $ QXsH}[VViirO{yE+:1G0Օr FEZ7uQEf j:41M^[,F2j#yffUQԒJ -T.qao]Mjf_68XRcpJ7g@ztOoXiڹn$ Rm'GEti:FkinY|k PE3J&\ng\i}+YGr$`)rt (¸b?~1$ .!BB61:rٯf i<׈|<-WFe'C'u>Icjh`^꧶˽ܽzusk[<7M^<˻ɖ$(@$ԁW kε㗌~g.;oዿ]%%F #k(I+sv}A|E3‹qSxvK8κb]$ Tuf9k2v^%꼺^>qA>8|M>[ŚOt5֭ }f I2!KHs|">*\tteѢOFRWa+L*<fUZzmNY}\9K_>!|_._j~OzZis"FHݺo~ }\8(%5O I%Yr,hݱ2nS[-;zlﶥr3K'/?E៎^_En6vHd$^ao(&|E|Sx~4ihdqMRI"[l `gtc)9'mIڭ1Җ+$)ۿφ>(|y:м~d"[CLn@хz+i]YUqԥA/ُ+'+F6|oLzEMȅdtoE23OROw{^|X* ^huzjLinYq0#elty^zY'e8Kִw֚ҬDˍ>vʞFjΟ?:붟/,UK\}˱Qv^xWWbjEW!M!O)8W0O N)IJ[njEW!EPEPMJu>5h>ٳW;gh-)6ݞ=4[?3'7ҵ;2ƁM7ThbQjmvųI! |^// 2h𾇩%TO;[8e]VHkS!=# 5m/NoVy\ xC3Z&C<<rG\?g/~>':|#Gl``e6TJsc2k'O x K? K휍8f*>9x|3(5cAv & sRi-K{֟/NJ>$i_ |[4C}.Rkmkqk}H،r= C~7|50дk ő Zއw,Zki.7ڼ":2@+m]APܱG+䐙ehzn-ak~-'K²y3'ܑ2\0faJ9!Fܯ絭>ez(w-o<7}:=[D1r*ɲE2Tâ)<] cECof_"Rd] pzUw&ŋF7s)~jrFG}:T 8p)LӼ7ao[Qeȯt0\3@lTP_vyٛma_RC^KGidwY wlȤgWEgR˚~zw(Kνx2Ybt=>Fnn6ԃd0< G_[a+齂w 2z+o]i9FUތuEA.DP1?#A'#=z]QLAEP\þ)>WKXE23sm;tu|qmJ׳۫sV<6גěˡ+Ts9ab׵ cM=͝bhg^f xu>.xD4{vZZ=o&ඐxVw@BMqY&V31N88]4)EvQEs+4boiɨcjPݗȻ>\i+9*]^ <]Xiw0H?DO@#xŞL>ᯋ-(]0}Gt V3r>*_'n + ܜ'~_ 5_V?oSQX ND, ]m5 ?.#'%d}AS&خQE@# #|$>?4_=mC ̪X1s޽σ=JJ]SY6Y0Y|gs.G-umxK_&deW]AG'Jr/_VZܟ׿"b^_+dH?2-%!UFdV'$E~_tM&Km&i|]A~.Fh y5x[_Sdn{iz'6hRI8҆-_ !ՂnU7cm9k|Yjr\G];G68;>خ+&MHQE QEQEQX7=Vrp6!</#xWVՒ]OH8i$;$dK>+xb-LjL"ई)((EƤ8 Oxv]O73qu$r$jC;FNG4tWyDWmk>x6<7w\i^ XI"#FFQq*=N28;ESQEWF߆?1K+#w]x޸IR Fqʀ<~\L> $EH_V-j$Eg% RC\`0H$7 ;Ad?M`C4Vmn|Gd+XV5$@GڐI]5IWU%X 9 A|AYb=<7+^.><Ѣg8g맠ws|Ax/ƐN2h>ըe'M{y6:OjVv{HZVPk"%ɸncy׳[ndk$$(h\=8=kb~ %:RN2 <X|h;{h|4JE€03h>"ra5NW^sSTVG2A';P^y SYlz녴z ^P-R+w$,8t8$b8F<{`'zOxݧѡ++%!@誫P:[>!O sim.* T0x#aEy4> 7[~ZWcuhC8@nF'np4(C+*hlKfᶱo1)f!@]0NIq@=ψ<_+]7fk oDFU3+ᶳOҴDn,죊MWr8%TJb|!?I꼛ᗎOjuf.<=dc"$h}8ֵ|AY:+~6x+Vb#ydh8UU$viZ-VͫVͨ,E1ErHLբA ,T) 1+?<%r+e oxP>Gno KʡE7 <G݇XzΔ>z뷄2uH*^;LG5¥?  !kI;+x5 8n4Tp)W65͍֓ StVux#FcoI# Q`l``q@pnackekᾣk(|E')Rs_(z@\şRG+=ƺNb\iW4 |9lpe x"h YT$r0<6Ǫ)z)БAWX<^#~ma./0MšL΂s v&M,r&FUV5շ373*Fzߎ3ZAQA Ht]<*~o/=kĚIwԮn E"$7_`}ޚ .~*wHҝFmG'>9x7\wK:~=7ΘY o.غR^^0K}LV[ $8*$)84 ~׉uWm_^4cFoO%cIEW:twi%xtQuYX.A|OokM3N_1[޳lvEg'v/ ~eGxz УuU ]jE.X.]?WדV :5[ tO`K(HT170s؟X¸?*j1ks_O xkItKTװYFu#{ExF"'ҋJ?yx#Cg}6lfb, qnPTcn2HR) |*^;ɮ#]Jm6`\.JUUP:Z xWv7z/t"&8]궄ePq=xFo [GWK.aY@i,<p3 '}2P.~ˤCvgXg7¶Ցr9{&zgu҉+O^}ivKo|Ie\?dHG5Uq?x7NYǜqx7NR㇂Vu"C:ȩה-wK ޟ (ºYi^V!FswTN?/=+YԴ4 Cs\Y<  sC _~1Eh}֕i'akv{7_L옴vY_pE!RJZ@0$%&uwu/_5FoJT^"G) OZwZ:ƈtNP6[[XBaXppjk@4;ԯlfa"43PI=OƓ7!׆6ZZw=4i\[HK\BJ?G|m#BGU^[Oy4m:yv֑,QtBp$5gm3TSE4^lB 9e+Tu] rEzßɬJ`氆!4bߺY @=湿|8*L^e\v #YS;[2G5QL`p*XHҵ;Hu :t`z zEdxOZ7<;c{L{{+HG'w$ORI'$##- ᧅ~i׺/X]i(f 8* O|E`տX?_m@ /=`'|l]4֕dKDk᭗P3u>$VnPAGz>xII#FK$ǃ8M>N6Xx9dVF PEq1J %H'vB;(}?;):EP\ĿʺM>7RR}:1?݅kkiwu+sew #e*}$Pr)kU]]x\隔qhS{,~W.V&_k]QEy_tKWQn KfՔ2>!o޺?xO "Bb0&Uf?5z/$1+`h'Ksq~>Na{['Iiqm]6{6Q|<žފ/iOr~94纊)(lh((((xcMQȷRFw¢"H 1 I 7]Vv\N#eOLWk߉7Ox<,Sƨ;yᣀNM=['춐HS+$@` *;Zd0m E,Q"TAtv((U1ZZ@Ig$jK3=G/o<)`|I)I<Gn qpHʀwQaB OŗĚ.%ݣ-$nDps_oƿ𕘲[uhXD 0C)qZ^K_\6KN%uJ,igɮ((OxDt0ɫ0ٴR -5r(/#j"8дh9`5?izfl/ ]*kۘlaRO;DQԖ<\Yq/3D zj,l&e-(={bVo!5닯0xuY#F DtܨXf(w>a`eЇptI,t> 6OvEmkcU@}*QEQEQEQEQEQE0FEq -tv2%9}OGq ʄ QQ\!ƷKZ3LNǤJ+׌4o[I>Cz"mF?%oX=(f5qe"s2D!0(ZS@Wh͜ VGrel@ètL]]bIxE7Yd0=A(Y>JN'݂;(}?;١K)QdVF PEq1K'wi<D#s<;+}ɂih(S⽍toEZHN=^<?!޻~#xrdMZ|pu a-PúC~#wtjY Ir '[n2VyyQXPovj2iv^#ᴭ?NH!!Jȧ֨}..vۭAS:*!삺@<5Gae_r5¨;h^k>Bu >u#\] <v- 訢 ( ( ( ( ( ( ( (?nO/m5Kg[+r70 uwI`O֗p\W?Z'Z^yriv$M(]"0945⛘nZUvCXב/]2sBJƏ'ULwWWmZ[CpyX+ XkDU񯈖}71$̕"]HsLu/qjj?&? |@@,,̀H_W_ETKMuu.ٺi'ѻ|B۝dM6Iq0]pG<u.ڍ底?? + ( ( ):W6{g.$ZGs Vv=KkY=Ox\ڤOI A C"ɱ xZH-|fC=oR2HUUUU -h54:-,$QI$I$I$䚻@WDYu 7u:/ifB8(y9f9 Ynnf2I,@bO޸M_gmk`j# C{6R2Uj[OOn%G֬TI)ve6g|9OЯΩq-Ʒ}_Ra$OT8HT$]=Vj 5nn?t/?ߐ@Udxź7mYԭG8 +D^Dz$y>9w2lԘ{[0=W?^}3QtWYo_s܈UxA!%~*_hMV$o#٩VjKo}T lDUwsV~|Z_ OPz34xȸ܌ApAEuۀ0-&cּ_|s˯ j뚗᳽c],otb UVT LGQ^}w>W-h]ռMwNc[& A}ʦ$9ݿ,!#{\hϮ)5qcƗz46xoÒK6lu$-J[>G %䳴e ,{(!j|Ae'Ri(#SnFH;rzdќgF)Xw?%lOB.~2Ļo:KC/^HMzƯkz׏~#~Ϻfu`}|iO2*naNq0z_ET—hp(\-ogN鷚g|9KBq_C>xog sҹRе˟KjAAkmd iK48"EͿy N) )%)Z+m5i[sQ<PI<Mi;oCXREyS p\ U#,+~*i/t&յ;Hdckσ[h"v\\-ye8t9F|A_Kr4&=..Fnَ=9RҩJl=> : u KqT!>=3ox"/1u/VqB[^-;=wƐƩE Jp??|@0ŏI.r&T18(k iciֺebMK=XrǹGag_o|E~)^>n[m:k+ft !yMd'{9 k¶77>gUhb- +o4 ?xT|s5Tc~a[DTpA^o]iiAt>Ո|;4P,d0!ϴ~_|7޵qai}s3D\BXn]7`| ɜظяLR1~sM-Ʃu:{X5eٽOwԝ)j ( ( ( ( ( ( ( ( ( ( ( ( ( B3֖~[᫻ jR1G6iL nID~G`2ml;^)Qeԫ+[|]dYc -m{̓o($˩-Nj4ZQGPtym= |2-] 9m0rt?. j*T.&Y"yw#+i>N.FF ˜O9 es8SǏ5'#i-*ep" Iw"#c*ox?xWL&kCKl/&i2u5ָO -_|zwN^TG)=P~womymn rJǰ 5[CWquu!IRgbI8xNOIVaLg_>|*q|q_ [_h&|RZ1~h:(>+,P#E-tJY鶠4.:˱ Wľ.}>=H]W3F%K]cӸbd0rO xE49g/nN].)Si`9ƙ"('j{vw` eԣ׼G$WȂZNV)@,8i~xE"5."I!5.HUT IrzXF>6. l i7<ςu` &B0=^/m}"0=*8zmL0K`ȱ0Ri řQV !Tdr6֟Xկ^ҿںV5=V$(xvmǚ?m>y-<-esb^߲DÂ$b"O>+Id7]#R&qټ`6Grd9w [56-L 9=6mkit.F۫I=kSxᶇ@j~LյIM -O#ھ+((((((((((((((((((((((((M-ŲqgPmdk{䄙u5x,~9׬S54 ǰ !(*Dss]QGmޙ{jb7X-qh||dӼsiOM UQE4[;ɀfѸz?XӠ̏O'QfRk<Xi]x@vɠmc@q2ZC/< F20K{9m0r\!>,FV&o ܋鶎^̂Kq4{I\U+t<_f!:m.Wci I2t|33Hhk]*6!5n|o@oJ·^^"M=Y~+ھO-D-ҽG?<2JoJٸ ? JNQgaץ*5:o{ }HT2,$:ݜo&(˺H,K ?݌3s׾9]6DKx#Id&7:g,!YfVlѵ/,M9Z>7:.')s8"T oGRӤԼqA .3[^epz ۂ$S xʜh\^ !uM]ơg~Vy%| ]#QTYq3U$DO_/?$ Xڀ0\ii$:D++RF6rs9s W^"_j&j U$:vWwE1ipAC j#BARQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQESk NSlg]]IJ e`AZO~F/%msw6_9 FdIV #(o"ǚ(Veocr#aH$*n6G&+`/ggDG<7}ioJFVg,XE1LVpx3C񭵽jt>]On늽 gcb8g<(rIkݫBy]<d~O9]Jy\r 6륵!OjW-bCB`B`b8I1 3D|ţ<(,d9i$FQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE`k3x-)8TG$zR z?-_1_ #? +>1ifzgۣly,Y7`}l$*rq]N"txM1Op 0kp햭4r3ZDu|?'5 4ׄ\0Vas^|Qt-U3FG]NM^X'Gk m؇I!>{l0RT(UqYz>wù^6*S~`/ѩߘ ~5=wE߆ܵ 5k|p ʎFGo|X#O/ Ip7B z YsoG':f?K:PVy.T(z=yb?_uk׺TZN8-3 BpjoWE [J߉U܍?N\?S<<^#SVUJ{0ZX:QЏ,c9߱ޕ+ƺ/G{(`MBUiL#h:֤Ӽ,F+τ>,YxG<yvcN,T/UU$  gþ.ρyKMJ/"RQPO8<G)GUIm|Nw¸5ꩦ]ƩxR1G+߱گo 04 Y"ZAb?_?ß~4f[Aw-fd&$Nj пIGxFQc5!dV<eGuf]^pϧ92n`m[+科)j8'E)2H*=I_~QEQEQEQEQEQEQEQEQEpqtҗĚw).N,_GɨmfA36,2p{=]Bh/ ػN\'bumBMGvNhMybJl[ÊO߲H{ Pюmy]Y?fفj?Gj~)d5]:M2Ӄ0[vcW ~KUNMQ$S*ƣ&XOwTQE1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@74~_ 36yj0B\[ykF$~`sڇki⋫:>.cl:լ#G]&?5h4\YDm(J 8y>kBg(|9x{P95G@Xճpbs%CmaE ="xv_t{K;i#Ě/<6$o/jU)QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE#)>/,Wo[i~kyW6g/oˌq_MEx5S/۵CwF[/ݻwWZֽV>(`hpyZ'ji]5^mK%Ζ(P((((((((((((((((((((((((((((((;'Q=";I5=A{|:gIʣ צ O>"x4;]_N,-F%[?0y[GLZм]ᛯ},7'=:U+ß0a2gi6ܽ핚vZ KF"&:խsַlm||)%r]2T2r+c]<)k閚V.JjZ]{6c Ρ 5~֙ᗅԬZ$ZwsD!Ds _;7/t+0<5Xu;HLդ+37!!XH#xpbN4J~2ʤNQv弭9KVo]-h #VQC$3ܰ"#"1?v~f~8,>5F# KUC$9SFT1?cc%#Oo~GZ>PGSι~t{+MIdU8@˯$:K[I?Ǘ6QZ#CߛUN-٫$ZpCso"$E9 d5` A¾q/>[I&sTĊޯn->c nϺ ((((((((((((((((((((((((((((((B)h Mf)-QEQEQEQEQEQEpr|by iq-YiSMpA@޳o_#hgBߊGqҸwW z ~*EyEp[W??oYз4\,wW z ~*EyEp[W??oYз4\,wW z ~*EyEp[W??oYз4\,wW z ~*EyEp[W??oYз4\,wW z}oqEc]LcDym'|ȷp 23⋅T)((((((((((((((((((((((+? ŪTW@ Tҩ(Swqg5r? [X&y.$XPXf *rI?neVWčU!ιYYQ3jNj3B0!wԘ$~V,T>4okn܏ξO՟aZRu{{Ƽ! lG/GVߊ^+4 “d`% {Ǡ,{A`HCdy_#|d>|[+cÑ TZhI"U WNkg? A➭j&6[\ZCl;Hz,{k0U$Q)$G05柵ױ~?Mu"}><2ξJ@2 dp51骚 _f}EXNM`EؿhQ XgRqgG៭~Ǟu.8:uDcC0 [_ |aXxT3V6z ZfukYjLj! E bxс_kV~o]c^tKKuXO/b1feE|?t^mF5-KUk۫huY4bek@—XK*\?H8 3O:?-z\^k⏉x't\Ϭ?ugki%M)I(]Q_i!j~J<i. wv#hcc"2KaWi%DTzdjXwF@V7t5`Ȫ<ùC䓚׼ ھ?L6a?:'m`"+D-?)ɢc4tVUAMSxKGM֬nCI0d/',?3|z5"MҤa5ۘr7(]>I(>I)]O~n4_ > _ɬe[Ke4r@@X +]>|zGj> & {X"%mX) }?Q }?Qt;3XkN<.|2No+/y+۫`BK5Գ3@/h '/h 'VgԞ7s?_=xB!%ǧ{k>8Sxݽnߎ1XO/|_o4V1-CA ^K[ja1+pq7W_O9G7W_O9EYQ 3iwoji8^ qs[ x?C\[xYK؍wk0CdyNN8| }?Q }?Qtg2֗.tۨxZkk\^I~4[y_xN4MzZ𕮴H_}]Ive%(\E }?Q }?Qtgxl@fsLM΍V3o$#\+2JHN gxڏū[~7M쉦6tTYw.r9/h '/h 'vg/kO>)żh:6 y!)']eE:Έ>.ii&#] $ǑǖnO'| }?Q }?Qt+35~+xKg]&PI a4& pI̜E߇5OV~6wG 7J\eK0xkz~o>I(>I(_WhDuu|Em$?Ix^?/K]w[iZ-2HS W|rǜ(z%ٱVDd$\  S Abhttp://www.mctainsh.com/Csharp/SocketsInCS_2.gifbUb!K]4;QtU0nUb!K]4;QtPNG  IHDRr'2dPLTEuqie}ieu99EA=Q}}51AےUUe((5IEUuu51MMMY$$1eeu(AAMYYi$==  ==--UUuAA((} yqqqq]]ii$$}랞}}QQII҆99ߚuu55uEE mMM}}]]11yaammmeeyy==mm ¾YYiYYee--11EEAAiMMMMmmuᄒeyy99((aaQQm$$yuuIIﶶ׊q--}ή-- }qq q]] uUU55ۺƺ1 i}}a}} $]]55AAAUqq99ߊqq11=eMM((yii55iimUUiII$$]--9¾=wtRNSu|bKGDH cmPPJCmp0712HsQIDATx^ՕەLF̈́2c7QUYUYSQUtwը%Z/H0 $  80B?/k5֏q =xm UF:vwصޫ`ϋ}//x眛;ҹ6UY'Mu~{yϽs߀ڸ2 |1_8W1_8W1_8W1_8W1_8Wׂܿ[ɽJm?Eʿ>AKGB/ͅn} 9FN.\c$tFc2 6X9"1rd$WǁUc̀XX9VtL$i!20PxDS9GU$Hӕ(ED, )p"dҿ?J@jE}.~X `n!G.)(Ȫߐ7>rj#/@3zSF~CH@ Crp\34D+@. RrUPኙY6HpBiږci(yr+ioᇦϔVHF#?@LEC:7n!G*'ZcЊ Cߕo~?ʣ302hjKC{Jݶ43K.R\"g3)Ekg@1hi]?8'gTɍ9 R8Lҡb&:i=(*Fh翄(:43rܦl y `BrP5u7J{HT.+9XLT=U8*!GFm>EʚhYjp;!ˁp+i%1NϸsA.t$K$*8Fc7-':nq[N.qX9J&c9uKT/[\]pXJᶜ\rO:&[\Xe]=<肖?]j~C@y׻MDt2s; 1r;9 qԆY"K7u|dj ݧ6L?|.CgæM[xhJ#ȉ n\am"ҲvUݦhSv gSˊn!h& n1C-kSGb&"EΟM-{CΓ"8qRp*Mlj`ֱ8=O&IRJ"vze ?'FtHLH:$"oIEX kМmh"0l9b\-S=t_FNr+Zr4V<.DX`/;'bm!r!X 9Y3:eġ'`SFk ʇǡ /$K9N zJ[v! m`8o!Od2cn_e!,ʖ7,o7q8λ-xGl8`D&cዦ Y|&:y˖JY3zQDrwl0rd9FˀڢX%# :V91r<+X.q#׿53p%iޚe͝Ց$vPbE[׉*bÆ^Fn zϔSLU/KVwn괇HÉd>ϲ_CFn j",[{t 0HQK- j>H%2nJ=m%J3ës7ȥA6y*L`Cᕁ5F /c Wv;3 ;i:3xAn3Ym@+~Cr iʈ /j8"ëDI8gxu*\ L0pW`ȡ0ϥ/vk?3zxo#IFc9 H- /Currc\"̗[ݑ[%\XX*$1r܆m9q[K\A=.-na]UN.s*S=ޭ:.22yw pc%1rd-hЧJD,!vZ"_#׿]K9KSӘ?V:ws`"MFG1'%f#y0o[)|'^zocc"f}хЙT)Ta`+cӆteIes/r$j3 ^.V9XH d2XS6L|?Dne2NSjRŞeǡÎ ^\?k@Q@je @;/r`.{2$g~.%DIj!487dw6ܩ4I2 -9t5AEv nNbrI\[xߖRt1ֻ"+Y *y{ִi !Uusl7eC1s6v H갨~w%I]c%D \!7r3+)npS՗eehPrYO%'FN.Ik[r">؍8R(]:#l1OhC.E| Eטe ЇMv،R-#[wũ\,\\,|'rR\RvT{my1QYIBcS`)Y8)&ø5cf:*a߅rbZ0Kif{ZI8r0$[oc:Mʤ ~-1RQb.\, z@ʛ%AxAΘXN«^v_;L9A 3 G.T%zj B]"75 k+TUԴ|'3r0rxrDE#S1r\8%=`c)#pg#NIO-9F@;cpJzj1r=*#ȅSS F)P9F.Z0r\O w1rԂcz T3F #S1r\8%=`c)#pg#NIO-9F@;cpJzj1r=*#ȅSS F)P9F.Z N$zLW} \(߱t奞/ENzf8ϟ#o Gbyihs|jr Rt$Cr@9PH:,'B\0dCh,, А0D3f=Vz"t9z,6r9dylVT9*I0Ph f%7P"9\_i$`)mTsŪYhQHVF"BF.U$T3zh6Itzy,'*9a֓ 3ŊP!a!g"g A:+В Z%i*BsDJ`A9B;P:}inxFDXs\_p`Jwׄ+"7LjW-}hˁ! -Ջ $kxM8udҠ*d2hA.6IVXӄTšO!fO1r(=ՆMr+cr~/48"?.ĿF.dXA5?(|K̉(G%r"m9_$Iqi^O:?s}\LTt@Fށp\QH'4Ux7n_Lă8:1˹=L4.^_NV@ؠStOr٧WhU@3$y=.4*cܖ볶HaB̒N}DD&L`(?ܒ\ W? xD-^J@uW=^P= HYBl zj_*rwnr}r7%er"*'sVW >˒KXGm͋25W#'MFcz:w2**'u:$- \XX*c%+h q`r2ʗh_%#um2P}N.'kc};a_䒁9k15FPif}R -7dIf>,C,EhRUIimy_'ٙ:]/7*dg/9 GNP 8dW;n^4Od∇NRE׾*%3ҵPz:IkE)Xִ͌ ]8fM<|IfK%VDR):`]Θ&h.陒)LŠ6x* 2SC1MQ)r-BS?x&Xn7*' E=74g=Ӈ"P 1I--Y}.3q8PyR,3g/׈"#(b)[NSR8x93A ,R3GGA:1G5t7"rNHa6Lʔ3ѦiX `DҘA-!Q3QUbRng]C9E@DA{ ˃\00CiiC Yi KBMDJO!gɁBCMq5$:K,,9!615wfKe#qZR&|2XM 8){VlrGo-X]mï]b&%g#tJʹ=6ccB=FZ30av,͈ה?M{5Z/{3~."@J RCwT)P4K` R&rJw_5 _Q}rɀ$ZDQ=2rnϿЁcX*OVҕXcF%>d%{]ۋdTzq!Y$X +uPSIb%;H(Yѫϝȉ[+rpI KA䨹+E=ʉm?5Ð+q9Ð*!]3r9c^(b T.;@? '@ 0>rfD.l,`r/u4zKvC}EW?5St=Fh`h-uNњ7C -S3w zĺ[iu,a9:LEy,m U9h-z ojҲvpTЋC pWhӽ7 SȂZRM-2yj:G{oO-")V4 @C'"N2mx3%dI,=ֶkzݒ'iZS d ̦q9JK5$-犐0L/~='sf -ÑX5hWtah5~IpFC+]2=mwY ^і!,}:t  @P\Ļ桀|9d7?rhEɡ8b&`rFbnY,XNwv:~k_3r\X%`O%1-I; YF:̨'([*(`,t4pg=&[␦CZ#6Su7tx7 67+$2BrX>x!Bc%ZR bV"R:zÍFgPۈ71r4 qQѫ8VYl릅8ɽi-_m9+D6TfD@_ Tj&q+nuYCg(&MJD67- ڗص_غrrݐljn ^˓Ѳ\`9ϡ*6bԋߠ$pmMhRȭ*(9J=n[΍uS!ȧSAs}i6b 9.Z+ ڏ1*Iz›ȹUCfCEjHe~iIh.#{$пkO1uQgBnJ7aCr*`D.-p,3UsUҹ-TiHWZiA *ºHSFAHbgV\]G/"߸.bj ;E 6X[>a9?kaS^yf^1rd9Fn!G{a+wy+,n[?:Fn%ҋk,nG榎p;.+"z6P4Z8H炮sWq hw3;Z7KGoKub  [wYo-YcSȁ}k]?CJmf-첓RػUHpprڱٚevևNJU2EBv+䀺v rM@[,7 rfHT(6ԉR-;n+:֮P;;hm^ |Sb` ׇ 7o\icb#䪹N.+bX+8] vD:er.r~H(R`@bWHGR='*n 9 CQ!đQwЇ*&,L[0 AMꄽ"9%!5:)ʒ`);X)zaylآi!ͅ#oh=6bU˔T+r(k#2*GS,"׺g QlU,峰6cdKYDMJ\ArK~󶾄\3HJb\(5j1m*%]DzĴ"P-n萠;`zN7 ߥU,HqaYD%Ckhxb~ GM2$W˧[h" kܡA@; QEb6q*0 ~Ȉ tܳGk[N&rPW/!$^t0AL||imE2FX2Sq'9]E@MS(A8}^Ǽr U1 %.(#(`.ڠq &,ZyjYl6s>nK6Jݐ7ԁ܍:T%.l3e{iӹR '6@DfM@(KYVt1JY00!h4$ldi :_ʟqs >K3鍗PHpʓF:?&9T7(ᖅATqԎ^ 5@N([q/on ީx҂?ĮEllmۯuT*k}:Hjz/ͻl dq/i㨘觓.ܗ4aac oyش[¾ ؖ9qJg`h?W`CNTN{ȉCxd5bIјM>r[nimsVp(E W|. 1y)b' 0+Gl1FJg-Q:W!V2ɹ6"taI;hm?eB qb[#9T.YhY {>`}"jޗ'`*lra1et -I"߰F$1>]܎ 甌yv?.7S0H& 2l PXd#pS.*Tzp#%ȥ)ӐdA/^EbRoDa݀Y {"i+I= P$tyQO"NI:K(rhbh7|lecC|)6tK/=la{$,h-iFlnkNԞ<^L0 e†Kc(i%1XSU2%Z#7dzVo\O]c`6/X %bDv $t{+>c#C`@:}Ļ!1n"Hp%G.9Ml亍S8kAqbI/Gm9u-r␗0r22 h9i7oiX1rҐ ~ܖ["dHΈczGS$O# 1r\h䉑c";#FM<1r\$Pzg1r)'FJ9Fw4E1r@#H9F.(3b#EwF#;"ybHΈczGS$O# 1r\h䉑c";#FM<1r\$Pzg1r)o? XG28_)<} |oVQ_{C*F |oο@čE|wnD}lt {o~iܹEC*̪jN}uO =8Eou͏ܷ$;ȅ4![ꞫZ=<뾍't`\mt}3ض5(*`bb{<557n?qc7o<8v8 7~S? XaQc '&O NoǞ4K'~Ao#/\ ^S&[|3?xyI߮A[Vyg ^=캳'_a CUS+9hݷE ~dK[za>wمtn`Q1nvBZpX~NʛgAĕTn"17xlr\+^QKg֔qV} !6vzȽ[}TˬhB᷵WĩD(~cttWF@vq%.3_$Ur(TqFM|^27r1NÛpl۸PO\(l;K?9x߬r_A@e=CJȱSc;-|u6՘Oۻquο<5Kchځ'7~0I 7?3qWT|*سqڦˇ{/>n{vfpm*FNڰH[EИ{(OrlǏ{ܵYoW~p҃~[\?ϹK^Lyp[jS<W[sKǏ9(׷: ͼbZ`oBxz^(ʦӛ̋nJzoA]U=.9ck恵vrB_+_an?ڿ[woڷ7;uIrU517~e]"+kn;x؅jO__=nrt: #OM^wpeoo@%>7r4V¶3╯r?yeʋm;{h(#\=hM=qxBOfܮg- :/ٵa׍sk*LءA+lUnT9ᱍWтV+_|A&گ̞rу6)rpu#4V==7+wLn3L?Sݷh)l˽ɚb_~;:yjD&>;7#։'+woYjw/w_tpj鑳oNL<=qo߮>5AB~8;e+al5XZ55^]MY;yr;]}ȃ~uڣ}\ڕA?XcO=>yw?peN#k3.Ѻ+;&?q/Cɉc7];ءSM< &c;F%"7c߸~8q_Xz'7~|?6+wlG4`\nՏ߄Ŧ]{r'>Yz2Is=^Ջ|cͮ*7nBG#[7VyC_=B~~υ5/Um>\M9Ե-urUe̛vH9_ݲ,/PާWq.Z)Q.n㿬 g^|*eaM}k'*{`N @݇es/ƳG䢔vs YR_Fn{7]vv2O*U;NbDV(h _ܤaR>ӕno)t аp^|eo"H8?M]_gj~`6;n›~ A>,'r84"Fz!P'v)?; >Wc~z_ j#d>0|{O?̓pl7ŕ:9Cw"RdZNSW\b>$ը6(r14 /1T oC 9TL7z_# FJuDQ5q( |)4]JZ4M3`lj^39`ڊŲ-k8Z8|L&Slcm|vchn>78HBȑtJR,`HP4te*WpdW 'VB9& 1 qxqTa :h`yK%٧4NUbk RbqU%ԌPCG2 lSUc*ȟ,Zs6D"I@!M#y?(%ě Z!!s-|RJ|C3A^0 r%z-uׄ  )byskUf'Uz @0vPa"آ z̙Ei^L%m#V9)"˨zUP _\Feal< dcf|T>9D m݇8Izq$ x6ulXOBlEڌBҤdnnA1{ ICO lf:7\H&qJh`5.l)MPu"h ޣGU 6B_HK&@:@"]QхwJrpB=I3Wdl;2ȑH>F΢hP[ rtHE +Qdm,qӝ2?ۓHʥ7!'z`ݦaU.+?mAGgdGb*Su aԡÐ4(Ao")FL5>c2vQ+PRU Khl {xoSip+DFle,tB,IElN=VMS-MM-?C2 KVU8r1+EtؓX<`p _۪fP(ٺרid+蒽Y3eY8`F:-x#λ@Ͽx-:8r7me[?_KHI'[ۯ1r&/A_B:r .F.?)_4#97=튑c$31r/gxeUUN.q:ͩӒc9FNvSd-1re{rccKw 8FNr_C.vd%?:jIGE3;g$VYkͯ idQm4*x?GQ SAg"/fb7I# (,ŮEZiAN?=w@ =?ydnr L2)+F8GknHO̻uTHr HQR뉨-H ;sZHE۾#"kHZK;\1  A|{XJ]9Z q:&ԁbVb2*bXnT"`єBJ-n!@îrk@刐K"rE@ֵ#DwJEnL\߱D$9z$s+ 9?;6$!zs ;Dz}A#kB1r#'ɵq`mFcW9F̀8%յ4<,[m #**31]GYdor7#'BFr`XʵhrYm%^g/ބ׋?)C2W tã?;Gy7}ykp6P| h| 4חWuv>CFV/4anYxǏ OR\~v~jϾ͏umfd}ڽ;P?Եɏ6)ql|SgCj?X /*3]wm~vŷq`͓k|hc3[ C{GFǿQ;{F~H6~f67;]x=eM{#'~BcO|Ȇ-k{pt>@?03ƚhOGGY#^{7o[u>`gn'.]~٭W^߿uBիrYepDŽ]?grZa AtVr4{l>7;:yͽo]fZE9MW~<_9rhUnyG^)&)ej]wV c.Cڧ>pg_<2_4@;#kc]xo==(c>wޟA޻ r7q<|Zs5yȭ(3oyԬ;-wGhFxz.r_sӢo!۱w񽻧G_;\ Ow;b3{/r/ONw/ ȭ߉%o[,￵~|a'-nPc'AѶ TnRlDj?@nK-ןٷ]Onp/zІ#剳@~{W~"۝=`[^WIOgѵyؙT>=w^?{W ˧S뷽~~sY{uw[sƶ~xϷ+G>&ޜucO*w#qܭr8ݳ6^9Epؙϝyo>fWmώ^8 DIT= a';666$8zZejAx,޿֌<>8c;^԰לܥa*#%|*ȜYT^Jl*A)x͌hoKX*SJZ6m\ ,bR6Up,he2l8|2W)S˦.JZ*Ú矮eXCvKs Pa)%*@dAWLDBVBCɀbMM  %U 䨉Ȓo4SFֲW9Hٖk" _0r@`tD I8\Y@!1<,`01C F:X Hq~I]D"1,FB|a3Y0&Mw(Ej^ȉG-ŰfLP2b,y}}lL-QCuDgnL?.-]I[t . >$@:z,% WpE&utA$zurH&r$rfӈH+r `j 3b VZZYM{3lC} :X!]8^/9ߺp~ↂe TO U9 dm/FIOL63]Զ qv4L-h S+_tt2y:dX!{t'w Z7w<} 2D@.ly{}k`[ EKԗX8@ ?9x $.V/p~\tXٖa*pvy#A~pڬkHZirube[ʱI&c9 Hrܖc$#1r\VV9FUN2cccX$3 :V9V9FUN2cccX$3 :V9V9FUN2cccX$3 :V9V9FUN2cccX$3 :V9V9FUN2cccX$3 :V9V9FUN2cccX$3 :V9V9FUN2cccX$3 :V9V9FUN2cccX$3 :V9V9FUN2cccX$3 :V9V~C4qe/F6m y:n#(*e4m#1L}!#u"gp3rbOCީE"ie| U!TYL,-eY8NL16LZ{#۞ma (>r%^hEh9T87?rEsQQсO>rA:H&r&:e68H"aDCVXriM@L3&cVKٔ车TFL--AC_Vz4,eB척-iY<~k=VR͎`c 9KłbFoTĉ):ruYjԈ,zY!itkOߐoG{:l+X'4#g-Ս#'FFc2 (%# :V91r<.'Fc8Jf@rurrd$W**ȱIf@rurr}:Ed,{[/e/n/?UnfՌܭyߗ_-/֬52eߚU3r}_5#[jFּf) }IENDB`Dd& ww  S Ahttp://pooh.east.asu.edu/Cet556/ClassNotes/Serial/cnSerialThreadSocket-4.gifb/^+2CӜ n/^+2CӜPNG  IHDRAPLTE$$$777III[[[mmm3Mf::WWuu3J` w(/7>FMUl"Dfƪ3"J1`@wO^n}Ҍ"Df׈33GG\\pp)Rz"31J@`Ow^n}"Df3M"f+3<DMUh|:Wu3Pm33MMff3Mf"+3<DMUh:|Wu3"J1`@wO^n}Ҍ"Df̈ת33MMff:Wu3(P7mETbq3Mf3Uw--DD[[qq3&M3f@MYfs:WuȒׯ33MMff:Wu3M&f3@MYfs:Wu!bKGDH cmPPJCmp0712HsIDATx^]z8}ޭB4*$ѡ9C/?$@"$@"$@"$@"$@"$?ۗ&记RGcOe]iʾ  2ЖiWH莃Waj2LReT&}+p~$8)S2]khg_a2R~gZIF!Gsu̩oEw8X ?Gz3ά0FUeTtB(`."/}B Y*^DV kM³>xӧBlj<K:Y$1.qHbd[Nӕ(D8zrQD8EBLbt)1eTZKݾ$T CPYI,OJͬfgE }>v70x; 'W:D*`hkVӧ8LTB(r$ia K5ɢ;&+|؋vX72qÍ÷2 Rt[ʬv%+BR6[L ? $<݆1TeR(MO:h D%],Jx&@Y~,9@mԦ8P~C㜉j*^$4.HOhOePpC_ѐvÂ^ooL;b'3"Z!8qTK7yz~+6[w QJps 服uHCa68L 2aWYE"1;8 ea@]0(ȣ]De;^׻#4>p3a(t wD`yt8ة$raE)Qa$z$)"臅"DND51FhH("g렷gnm &[.CICy0ɝK{#&<CPX(bW9RZ\ĂL%sn|Saqnyz=[M(V bsY9 Mu`mշ=fLգ"Wdބ"piQ^0°Z#ܑB68hĽk-#:H'/`beꌂ}v FsR z$~#8.!h*!4Q \8B-b*gͪp3rZ 6 ,ty )* oLypƝ.==O¡8cSĽ ;4uXK#~Ee8[Ö?s 84W#8=nuӇA+D EO0q{\]^3DJY Kts2d2eM&W0ijTN.'\rUV' &B N=K"1eHw-O~PDJnk=L`O{);Lt_՜GStΥ)Rzƒ KE6[hbpلMǭ"XXiwpq铿҈[-u6b^"}W]qъx1"٣:b[,b,沗vYA{-=(R1$WC)+H#.LMes[ `6GD6cF񋸋#;Uebtu˱aJ"∰+k]&'X fg޿dM14:fyӒԳ)5 ٹfh:L ^Z"N]f S17V č\m {ⰉoJGe: HMXږK 3l&/8gɦ2JxEd\ǒ#)$,,5\^n6]L,of6b"1'#^ĹdkpzW^1i?:8(#3'QK|č~-6טT#n+Dx ~i6S޳UK  2ʣ=o5 cO1: `AqT?rNO`2 Ț8集"e;*I6A?wv۽8ď3WuDNw|ď0#j. 1Oؓ0{ʝվGŪhhakAq 荪^gp[,.%&EI1_\\`NejW J%ϥPh>ڗS&,V5+? Gd,ݸr\'$X#h|{g=t_~x/vXo  qvmXx9 uBa"1//^tP#`[mQ"`ڷ$_Ȁu\6uIO㏝JLJ/X1JO`ij-dZi}7&$2QJi;,Xd.R hdۖ/e]Lg THRaƩH/Ird3en}Z/ R1քf S"0ԷЍnL|ewz=#ވK@+4GYKӻL~H!q<V8R$Rd7އqeh_Gby Mv{s=j4:ƖeϨQEWx?http://cs.uccs.edu/~cs522/projF2002/kegigax/doc/ftp_batch.txtyK |http://cs.uccs.edu/~cs522/projF2002/kegigax/doc/ftp_batch.txtpDd` _^T  C 0AHeaders.jpgRop]՞ݪo-'Fop]՞ݪJFIFC     C   " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?,c?t_]ºz+5}G1 . G+ л2tQUϸ?XO7(c?t_𮞊>_+ л2|'BGk;}W>#c?t_]ºz({~s|'B± o/WOEYa\?܎c]V>wMe 5>q± o/Q . ]=}f󿽇p?r9V>wMe ?XO7+w}G1 . G+ л2tQUϸ?XO7(c?t_𮞊>_+ л2|'BGk;}W>#c?t_]ºz({~s|'B± o/WOEYa\?܎c]V>wMe 5>q± o/Q . ]=}f󿽇p?r9V>wMe ?XO7+w}G1 . G+ л2tQUϸ?XO7(c?t_𮞊>_+ л2|'BGk;}W>#c?t_]ºz({~s|'B± o/WOEYa\?܎c]V>wMe 5>q± o/Q . ]=}f󿽇p?r9V>wMe ?XO7+w}G1 . G+ л2tQUϸ?XO7(c?t_𮞊>_+ л2|'BGk;}W>#c?t_]ºz({~Ekk V0D8AU-w՝)% (Š((߈օڕE힙sqCl"fS8 pF+KD|Y!ll>[?iZ[=;>{1q5&aK0X 6Z-g xoWmLiͻ+B:Bֺ5Z힡>}Οhְ9ؚYYx$p4QEQEQE|W8㟂> ]ς"YiBz-+K9-6BX} v47)'?oQVڤۺ5ipM"s& 11E`(xwx~cDկۃ'sHK,/x8px=ÿ:]wڳ_;Im[6ʒdn#![+Hn( ?oK<͠]_jrEq,DXSJ>=L|ayM'Ksowƺ_>#'Z Wvdir:e U//G{}10(QEߴ'^ycPɮ\ɩ+5ZQ|5 h٤1,]:c,T*`zW~ Co? |z/.a ka9lvϵf?u |G kQӚBaRh]qסC~_O?<1jS Ж0t"mb6kKb<? >?>?L,Zբ'D|anSs1Q)R_ot5i^$tGOmKB!Ue,لGko~r>#/:(|:OҚ_0y&(MJ@O27ӭltV"ͬ`Ե&,e ObRPswI5 -|C7u紊MBOeU"|w}cz/ZyYPheήo ./#^3u=&ǒYK/#8teh|3+3.d_'x)GWZ/ž!4Zƫ?KM;N6Ptͥ5ye# %H@ [ݧ%t[·vڦ]iOA(k"< xx+wׅ!ũL Hh:hXɸ+,dW~ߎMx'vf# qiO6Cy<A?.}|A#Zm>ַfȒB+* LdWP+dW/ "m;_:nm}\d̫$HϵdfHI VqI4m'*>oLNI)Y!hrc=N@Ws!?Kg N{ﴁu9|tRGd݂NC ]Zi!߀r۫\Ix[pZ5 kC rՅnh-^Hfw\hppxo7%mzxrA[ybA#&04b6W^>n@4W/_< K䲌"ž"p d9*xZ F8n{eR|E+9%- _xOIk7Q;:"D/K<ÚNJfe ?hŪ X"!Fx5Mz>W1ͅD mPHH_^ύ9uI٭$5 64G4 " S޽'VJ/m7ܴ<)dZ| =o^]q FJc22zL_?i ?k-~HHy2Q"ʫ>ö[{Wxr}K={dzޑmk=D.4~fUo,[r[D._[s2&Z%nYc 3Jer_H ^}eFÞ7|Mu [- YMviB8s_M6w GǯyGLlEeF~DnKcCKQzߌ?ƝY .}W-?T{[#&7tor3z y犿mue^@RIfPJ,b ba<kݱw,{H?xf^𗁭4_Pmc2$.v"Xoʌ]'. j/<t|'č`oGN|O ~8bό⸴,ΐZʐC"IqZ7 8 5?ۓOxYе/Vp4c̎ E ),dW#I Qn}=/k {OÞ$Ҵm'PI5^FvPq| e.L0RI·OZ^>t}M5[7 +Ĭ D$@)OQhv?h]/Z`YNr"&KkdLJȊF82}M'o+ƾIc~Zƕn2/nދ\c= }mBrՅQL((((((((>( Af>( Aks?##k޿D"'o路*Kas~%GÞ$LImjEu:2D*:5/Y? HT&& ޱ+ m+:s_~ռe\x/>|L%y5& s+LF[ۅ|k4o'c&w$^2#KmG>B̑mG~OǯC^<;qU-SY#1#9^/0Þï Cl>,#Uu b: ޓJ SඐHᶣ0H^[uHTt;tIau#ȟ(7m~WOO?68~J4 i3jgiΐCf,ʣ'@kA~W~ AmwTPUv $32 [z7OhVa蒣HKn꤆a"0}+ߊ_~#<|9HqhZ~AM(5 y]l"Uiž ifͱ IL@\!CƘ7GM[2Ot]6UuЮỖYa@!$`+o<Ɔxt 庒X2Y!Yd >:6|FӦAմR_ }kNcT$1T}G~* c?ZC}C^&sR}^-N.P'|_7|<<4 R3m7dW 3xÞ񯁬/-|V/`|Am[Y!qVG^|:~$x'Uxe?z׈-)5}kI'GV,W%'+ [kvv+[K)pmݾWV`)×&Cxn/K6D[st=jSw/?A_}YivwU֡ He*!p6oW}č3Zs{,v퉖m5Z ۝YK'Yo+K.y.o1FU2av`N@F|=,^tC Ү㹈8ބG">q'xkŞf[hu}>hP#icdCNT~?_."___ R)a; @RCn)#' f^>{Oz_$?jKJ)?޼ &O?җR-QT@QEQEQEQEQEQEQEQEQEQEQEW~:H-!yGª($H=W@%!/_A䗶%j4e$¸UzdJw(`۟_g'h7nnٻۜgEQEQEx7^3<'Xk!Wb"`죂z|z">"kCzM+R\߄&xCDzEh!dҵLGqu#όYzpEA.<ءR* e'sz^ kZ̖z~o<K1IOMwKwkZwtqAmpLvTNp;5kg45=Qմ^XγC& SԐpA=ǧxƾ,B-umR YZ2J #TaSI;zo跚0j3jj/Ew(ӛrva Ӽ'֯w۽ԧ Hᆵ:o j!Y E@')ط__áϬ7\.K\YB9EcM_՘U{ mV+;@ʌ0x A XUVv0#aUTp EQEQEgKMd^{YEmgak%IJ2#aPHǩJ/ ;[/4}A&xK^&\[Vm.kOkٛv 䔊FJ@Q@W~_??|s:)ˈ;xH=~> P5d e" ǖf#x۸ (((V`?ݮZE$I]mo6ӄF% dϪh|y{/ |9kNuYy7SM,rj ұ(q{@ZEP (fDžcO}~Nf-881բ??mO~:4n6 ͦ,]]Wۑ1ھq`(QEQEQEQEQEQEQEQEQ^7\|ngzߍ{ ]KQ(-2dB[i#} _> QM~qgwt|s3y۸)\((((5ɫrAʯ૿jdbɠg/K &҇h[(No]X&ZK}yqʆ4.AcRp'^]/5;EӼR:˦ĭ,y] l4evg(~5]WjN_ .dPH؅JH#Ev$xMηy}:Z}:MY\\ʥ.^C;pLbo^ƽ>CW{],YWĝxHeO oԼ/y e<8$Yae629o'$Iܞ k΋(4SQ.Ћ?7o,JXĎ]b5ѭWn5+kM2]ZO/[O{c "#A"ic 1 YEyνC|?ϊO/-Y mf(T09UԜEz7Zb { [&ooa5LKak0+: 1&yc ӡlp ׋_cG=^ Z%tOoӵ  l$2Ln5V*B1E|xvSk=2-KRMEγB\3AhX<r$vjKa#"Iu U'Ӽ\f@wUZ0!;\v=? gM/>ux3́ݠbi@73.Q[%^j'#o&>fT,TOZ ^}W5voZh6o5H$qFpGhUu^ HK2̒-7|ؖxAϯ诟 %tKwǚc >UW7Eh"$?,mp7߷x~ sZW4M'QSЮnƻd_UYK>dma4\VgtWko<3ƺڝ_iw+y$>F=~Gωя_1ةn#O|ۃ_49j:ڕ_hFyRUr0k G|'M'Tcm֐awo-JM r#HA8%cѵ't^*PCqE^4AB3)T F*_hټ>"kt8rf$OG ^$CZSu;QMюYʏ:#ݸ`cFn:^$'jIgu:\)2Έ9QC0 <_xC|Ehf &hl9ewMy'OGz. _1uIĉ+( ظBk@}Akj6ǔ plC#rvEZ> ^1|?utY It#yo0)ݝ W'\X5iF![-V-PuFR6e ?_;~oA6[gkifeY[2`2|1sM>5y ëݑ+nf]q>>Mլ6riO$ӴlYqdR~b.[n^]Exxv /P/ brzJn~z76x}7Pօee5Ay&^!6CB*,:λZ#"JC@ǒw/o_6> XWMEcr9^RC] ?7<+N񜖗Z9$@Icb aq;]=#4CVI7%_)NUGZ.|P?7h>!ɩiqUI"ev@aG>ˢ* ( ( ( w /_?g?^XAXdı ~"`"a4h~N>Z.@ܡfSH A(zCQ? M淣^i>|h5f''W^|]BdWO|Heɣikplu⢕>5gqO\6~-].g:ZlDĮ82T0Sp]Y~x<5v7Si J)dayNw#S g>E Ex? .uxSFnu6e}V ht (\k0^-6be}*cJ`+(ϐc{|A.t/xSz:u]!FGhH.jQ+aT\}vS¾y/7/]]Eh %Jň$5[ _>&5٧*ۣx eee%Xv8'2 }SE !z>S: (7_#MAxKn;yeQ~fl }E>DQC'SJv䉤Y'۵Drm4Q\~W==:'}b5]{zwDž[W{MnX ^a"?4mǑC+7Q4S47Z}Է'dLRL}9^(]=k_}+&k\×(muB`N3k7 [#ȳk5-GɩKBy%\]9~d_Aׄ%uլeDŽhe8tt6r;ejZ%^춰1\oP769F, &Y?|Sigo%UPō򹉂䁒H]-~z1g߈kyokèX@NQFY1à ~E$6QE1Q@Q@Q@Q@Q@Q@Q@Q@9~'ٳYυ4kwZm%31b!H'G|"?|_O1mrLIV8Amn;`)(WCex?Mǫ=/?rZKg+0*o=GWaTzj(}ZKg+0*o=GWaTzj{-JG t{yv_ >g?t7+0*o=]5{y_ >g3t7+0*o=]5{y_ >g3t7+0*o=]5{y_ >g3t7+0*o=]5{y_ >g3t7+0*o=]5{y_ >g3t7+0*o=]5{y_ >g3t7+0*o=]/J .y3G6޻6?*=/?VyR3_ : Qt7=/?VyR3_ : Qt7=/?VyR3_ : Qt7=/?VyR3_ : Qt7=/?VyR3_ : Qt7=/?VyR3_ : Qt7=/?VyR3_ : Qt7=/?VyR3_ : Qt7K"byI[05]C)ex?MǨ_ : WME}C)ex?MǨ_ : WME}C)ex?MǨ_ : WME}C)ex?MǨ_ : WME}C)ex?MǨ_ : WMT5{MΙ6V6e(Fb =/?VyR3#+0*o=GWaTzPr*i&Ե}BJӡ̰X(@$ԁGe/ _dex?MǨ_ : VuO+O};_yy^wl3sZ{y_ >g3t7+0*o=]5{y_ >g3t7+0*o=]5{y_ >g3t7+0*o=]/J .y3G6޻6?*=/?VyR3_ : Qt7=/?VyR2+T;hyiDM͎H\{dhhJV(C ( 1GS_W. }jlTw?X/alIcO~*V?k\ ~ov񷋴{լm,1 ieHcmp3TIWȞbO+m?jfKoqju-N8>akj>6x'~! >mc-h.M摏˞3W?ig[z}ē:n&E4esI@ lk>Ӵ[~n\ڙ%!]U$x]dYF_$i?Wۺl oIB- -u(Kv2Z,I'%Wx`kk?>cÐhlj[\fokmi{5"HHpNx.gӴWcxwXtMr75E+G}:H@Ma;Vu/(+x>A.;d5˳ ).gW|>9^KW70w.$^)-HV Ta#"D~o6KZ;GfH#ls_%o#[ש{guQT@QE&Fqhh'ih+Y;oo:jlUΙpJ{Y7ER s-6xLjo|+uuiQ3eTc}'phO>3y?i˨bjk:~ V:>YK ^ě.U"1aIF7~ֽes#ӴBͤQ܆D8dLH`Uv(bt~T0GX.~||_Ӭu~&|fM>^K$0J ^l8Y%pA+oc׎|8(ͧKMͤeB Ŝ4r{o$k_fgwh7l|ٻ݌g比S#øFz7|F޽a MV!e^\Xjw Gk43TKBM8=bi[&03 C IEg^ SCڕϻʼfMUpz+B8ύ\|=3_xWNmzsT-l:((((_+oؾS5~W͟//ڏ~!5kI,tZB`\;wFB? :4'f}:/|cO|psx+Ot>A˙%]AsL_m;(\T8|$<]5{</FH#DR[Q\0~>۪ڇdI SNs,jb5TrVOø|%/?ƛ3IүK#aX2mpXXtROIW_.ԯ%eʑCuQ `=-a7<ms5/56Fu"H 0*dn$SϟS!xwu><u6;]xRƥrں^,?Ev-ZJ%'V{H}E _/ tm^(B}sۺ cQLG+[Iw^6?|Guz:F|5h-Z<|ĈTdg# /f-,x[1z[bredD?ZMjRzDW^'T}&hH,HpI=5OϿS~XmD0 h#UTqِC{٘Øu .7t.n^kk.-d%²5w/:4/&k;-Z;¬9 +/fp;hOS>^b%.ҭ^bّF>])guhWe5ť&:`]\O4#e,DF)[dq3 "cį٣˟2}VעQ[},&ܮOLUobQ}MA鋨\J;5f2,EUX+`ьi?eχoɣCNek('𖉬[_A[P}k Cº"1fE`r@ zVt]N% xT*ETYIrD;_:/: /?!}-r6KFO*<9c0+lZg⏉~$Duo xQռ+i i^\5Qy$vYQZ@[I@ѨNdž4[jsv!N#մ;vUԼˈ#{XecuۈM!{?:tˬk^E¨ %̎ڐP嘩,Ilѭ?~U3I(*+\&u+u |]\m` '0HEs{?=ӵI&N۟HD0 bcv %=wg|U|mw.,<=:xoMmq)[)lK .n=/ 7Hs<sicuM9ؑCe@%N3}{ğ>MSGtP-8Hw|+.kZTΫoZҼ=hz޷r3*VY3valm`9'{Lv[VItZ|:/%MRˈӋ<f'1;Gjm}h* NGwN|eQe5?"SH*+W\kQk5XQsM~3h7 .]a|ܨ#ڐ>[?:_Ӿ{[4f)nf){K:Wa_Z,~7NQ{K4g-~^6~\hҗhX.~o{NKk)ƣq^   AbL1|lu(_:n&DIk=ԥ!ns/#`JA.(\?ǿ x;9|^tI/=N5;m4IZ4F.Mqz>hZCQtךj[ۿL-VDXGܼ2*?AJ)A s9"W2:k?Ci]Lƥ{ky 7[}wFÜdr0kƾ*~7A}Yx[ց)RND ;) |98$_< -n4X|o,KT>[7#kߵ?h${n4ƸӮX3爥%Gd,F+>~5w~-֯|?jmSBy5]uo"!yD*P 9$<9 x9}[ q ;:~y`dV9R)-4jGpx߇ [hq⭓ iX_+d?~pz}iW-ͦm٢̺œ>Qdtأƚ־#Z3v:EL0]$AO2cp9ci4źVeqe[cm,wT edlkW W /O׆5[w{^\@cZ=¬m˸|WzS_tsi2x[mBKy_ E)S-} PХ?~xUdI7_Gy-w ̓-LKCBYCr8&K;xfY\CO򼜨}iM Y>BE}cɭ|/ +, !wҾ־@u=(HQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEC~9|4ck At6ıJYF=1t_ޏ3FkM45/ hԿ.OZ?m/}ɚ3_ ij_' ?9\GS~/?_4fԿ.OOsR?Əj_p&h|7 ?9\G& rO[iϧLњoOsR?ƏMޏ3FkM45/ hԿ.OZ?m/}ɚ3_ ij_' ?9\GS~/?_4fԿ.OOsR?Əj_p&h|7 ?9\G& rO[iϧLњoOsR?ƏMޏ3FkM45/ hԿ.OZ?m/}ɚ3_ ij_' ?9\GS~/?_4fԿ.OOsR?Əj_p&h|7 ?9\G& rO[iϧLњoOsR?ƏMޏ3FkM墰 <>H&nrLjI$4WN@> Heading 3$@&` 5CJ$\>@> Heading 4$@&` 5CJ\<@< Heading 5$d@& 5CJ \6@6 Heading 6$@& 5CJ$\6@6 Heading 7$@& 5>*\2@2 Heading 8$@&5\0 0 Heading 9 $@&CJ<A@< Default Paragraph Font, @, Footer  !&)@& Page Number<C@< Body Text Indent `.U@!. Hyperlink >*B*phe@2 HTML Preformatted7 2( Px 4 #\'*.25@9CJOJPJQJ^JaJJg@AJ HTML TypewriterCJOJPJQJ^JaJo(V^RV Normal (Web)dd[$\$OJPJQJ^JmH sH tH @b@a@ HTML CodeCJOJPJQJ^JaJph&X@q& Emphasis6]q &'()*+,-\'5789:;<CDEFN\^_guwx-;>?@ABCN\_`abcdo}<w) 0 } W - ,Mt>8b|Ot NZ!"#-.,.=>FGt5KRX.x^ A!C!Y![!!!!!!!!!6"[""""""(#*#+#c######0$1$$$;%%%&7&q&&'='T'U''''5(((((()D)))))**9*x**++,+y+{+}++++ ,P,R,v,,,,,--L-}-----.V.W...,/-/////000r000001!1>1@1A111E222L33333&4O4P4s4{444444W5X5^5x5~5555555A6666/71797?77788187888888@9R99999999:0:L:V::::;V;;;; <<"<,<x<<<= =&=@=F======Q>>?\???)@?@@@@@@@A AbApAyAAAAA:BLBVB_BBBBBCC6C@CRC}CCCCCCCDD1D?D@DNDDDDE&EEEFEsEEEF'FHFFFFFFFFF GG7GQGRG`GGGH)H8HWHXHHHHIbIIIIIIIIIIIJJ+JEJXJYJgJJJJ KKcKKK5LvLLMKMcMrMMMMMMM/NQNmNrNsNNNNNOKOOOOIPPPQZQQQ9RvRRR#SgSSSTT0T5T6TcT~TTTT&U:UUUVOVVVVWLWQWSWUWfWgWuWWWWWWXUXXXXXYdYYY+ZtZZ[['[E[F[r[[[\P\\\\]4]H]s]]]]]]]]]^^^'_i___`I`m````a5ahaaaeeeeeehhhUkkkkklllllAmBmkmlmmmmmmmnnnmonoCpDpEppp|q}qqqqq000000000000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 000000000000000000000000000000000000000000000000000000000000000000000000000000000000X00000000000 00 0 0 000(00 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  0  0  0 0 0  0 0 0 0  0  0  0 0 0 0 0 0 0 0 0  0  0  0 0  0  0  0  0  0  0 0  0  0  0  0 000 0 0 000 (00800&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&h0&0505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050005050505050505050505050505050505050505H0&0000e0e0e00e0e0e0e00e0e00 00 000 0000 000 00 00e0 00 00@0@0@0 0 +iuu=HO^a7wc< O.!"&+ 0048<x@ EHQKNQRX[4aeptu>@ABCDEFGIJKLMNPQRSTUVWXYZ[\]_`u?suW e_eemPnnnokoooApWppppJqzqqCC4C4XXtXtXtXtXt !!H   ak>K_j19Ghp ,AL\hA X j u w _!p!s!}!!!!!!!:"E"H"W"_"j"k"r"u""""""""""#$#g#s#######$$$)$%% &#&$&/&&&&&&''''!'#'/'='L'''''''(((((((())*)<)>)@)H)Y)q)))))))))*D*P*S*v****++++$+0+D+J+W+Y+i++,,,,<,L,],v,z,,,,, -$-3-5-H-X-u-------..A.Q...........u/}/////////0&080E0F0O0V0c0e0n0z000000000000%1>112333333@4M4h4r44444444455555555)6666666 77G7T7U7`7g7t7v777777777778?8N8V8`8i8p8888888^9l9n9z9{9}999 : : :::(:*:,:<:E:::::::::-;G;I;R;j;v;;;;;;<J<R<<<<<<<<<==N=]=e=o=====z????@@@@@@@@@A#A-A.A:AAA BBB(B*B6BsBBBBBBBB"C3CeCnCCCCCD/DDD3EBEkEoEwEEEEEEEEEEEEF#F2F5FSF[F^FFFFFFFFFFFFFFFFGG!G5G=GOGGGEHTH|HHHHHHHHHHHHHHHHIIIIEI_IfIuIvIIIIIIIIJJJ)J1JCJKJVJMMMMMMMMMMNNNN"N%N&N,N5NFNWNbNeNkNNOOOCOIOXO`OcOOOOOOPPPP*Q6Q;QGQ?RBRCRJRMRTRUR^RcRsR|RRRRRRRRRRRRRR)S:SSSSSSSSSSSSSTTT,T[T_TTTTTTTTTTTTTTTTUUUUUUVXVfVgVjVqVVVVVVVVVVVVVV WW{WWWWWWX"X4[B[j[n[v[[[[[[[[[[[[[[[[[\3\M\T\`\n\z\{\\\\\\\]]]]+],]1]8]D]S]]]`]o]w]]]]]]]]]]E^V^^^^^#_&_(_=_______`*`-`<`n````````Ba^aiapaAcNccdllm!mmmtmnnpp}qqq %-[\~ GH ai>Lt{9GOQ`d:@A X j u C!H!q!}!!!!!:"E"""""""#$#c#e#######%%&&&&&'''='L'''5(?((())!)')Y)\)))))=*B****+0+D+++ ,,P,R,V,u,z,,,,,,$-%-u-y-----A.S...%/*/////00c0n0z0{000001!1%1=1112*22333394M4w4z44444444455b5g555A6666675787t7777788 8N8T8@9P9R9X99999 : :8:::::::-;.;h;k;<<<!<<<<<==*=/=]=c=D>H>?0?<@=@@@@@@@@@AAjAmAAAAA B BFBIBgBmBBBCCLCOC^CdCCCCCDD1D6DEDLDDDDDDD&E,EHENEEEEEEEF#F+F1FLFQFFFFFFFFG GGG G7GHZH`HHHHHIIfIvIIIIIIIIIJJJJ+J0JEJJJ^JeJJJJJKKgKkKKKK4LzLLOMQMrMxMMMMMMMMN5NFNWNbN{NNNNNNOOQOUOOOOOPPRPTPPPQ'QQQ?RBRRRRRRS)S;SSSSSSSTTT,T9T?TlTqTTTTTTTTT,U1UFULUUUUUUVVVqVVVVVV WWgWlWuWzWWWWWWW XX=XLXZX`XXXXXY YhYjYYY/Z5Z[['[-[H[N[[[[[[[n\{\\\]]]+]8]D]`]o]w]]]]]]]]^^^^_ _(_=___``n`o```````6a?aiapaAcOccd*hHhllnnoo}qqq333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333klll*l.lXlYl[l]lllllllllllllllll}qqq love&restorkC:\Documents and Settings\ashley\Application Data\Microsoft\Word\Guardado con Autorrecuperacin de NET2.asd love&restorkC:\Documents and Settings\ashley\Application Data\Microsoft\Word\Guardado con Autorrecuperacin de NET2.asd love&restorPC:\UCCS\Fall 2002\CS 522 - Computer Communication\Semester Project List\NET2.doc love&restorkC:\Documents and Settings\ashley\Application Data\Microsoft\Word\Guardado con Autorrecuperacin de NET2.asd love&restorPC:\UCCS\Fall 2002\CS 522 - Computer Communication\Semester Project List\NET2.doc love&restorkC:\Documents and Settings\ashley\Application Data\Microsoft\Word\Guardado con Autorrecuperacin de NET2.asd love&restorkC:\Documents and Settings\ashley\Application Data\Microsoft\Word\Guardado con Autorrecuperacin de NET2.asd love&restorPC:\UCCS\Fall 2002\CS 522 - Computer Communication\Semester Project List\NET2.docGuest]C:\Documents and Settings\Guest\Application Data\Microsoft\Word\AutoRecovery save of NET2.asdGuest0C:\Documents and Settings\Guest\Desktop\NET2.doc bޟ35 ^LP4ۨh         hs/L]NbR Ж (E*"48fm(JVVB'x΂Tp G~L1Pz:T$Ģt[tJHU}>p9        g$H(&/$rT t>9jgP$x6pu"ʮb lvRfA PL# S0<.pP]HƬ>XԴ w48 abj,~aVhv`ɴ'%R됸^p~›(*,/Nv"̪M``O rp{@?[,\Ppd4,4h.6|&5Ѭt0yya<P~ V2'5789:;<CDEFN\^_guwx-;>?@ABCN\_`abcdo}q@llllq@@UnknownGz Times New Roman5Symbol3& z Arialc&   BakerSignet BTCentury GothicI& ??Arial Unicode MS5& z!Tahoma?5 z Courier New;Wingdings"qhSlF{lj]/!20drZ2QMulti-Routing the  KeGGuestOh+'0p  , 8 DPX`hMulti-Routing the ultKeGeGeGNormaloGuesto16sMicrosoft Word 9.0@))@t@Toj]՜.+,D՜.+,@ hp|   r/r Multi-Routing the Title 8@ _PID_HLINKSA<+.0http://www.mctainsh.com/Csharp/SocketsInCS.aspxwt3http://www.codeproject.com/csharp/workerthread.asps/Ohttp://pooh.east.asu.edu/Cet556/ClassNotes/Serial/cnSerialThreadSocket-18.html~,Ohttp://pooh.east.asu.edu/Cet556/ClassNotes/Serial/cnSerialThreadSocket-25.htmlg2 <http://www.ondotnet.com/pub/a/dotnet/2001/08/06/csharp.html> >http://cs.uccs.edu/~cs522/projF2002/kegigax/doc/ftp_batch.txto,t 4http://cs.uccs.edu/%7Efjtorres/semproject/MNETR.jpgn 1http://www.mctainsh.com/Csharp/SocketsInCS_2.gif Mhttp://pooh.east.asu.edu/Cet556/ClassNotes/Serial/cnSerialThreadSocket-4.gifu-o Headers.jpg  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}Root Entry F`oData c1Table/dWordDocument%SummaryInformation(~DocumentSummaryInformation8CompObjjObjectPool`o`o  FMicrosoft Word Document MSWordDocWord.Document.89q