From oct at fotopedia.com Wed Dec 1 06:59:31 2010 From: oct at fotopedia.com (Pierre) Date: Wed, 1 Dec 2010 12:59:31 +0100 Subject: Unicorn and HAProxy, 500 Internal errors after checks Message-ID: Hi, This morning, while checking for a correct deployment, we found out that the Unicorns we are using were sending 500 Internal errors very frequently to the HAProxy that sits in front of them. After some investigation, It turned out that HAProxy checks the backend by opening and closing a connection to the unicorn. Unfortunately the Unicorns we use ( v 0.990.0 ) will try to reply to this probe by a 500, resulting in the error being sent to the HAProxy when the proxy has already close the connection. I think Unicorn should refrain from sending an error in this case. There is no visible side effect, excepted that there are a "lot" of 500s running on the wire that nobody will ever read. Also, these errors are not sent in the Unicorn log, making it quite difficult to understand what's going on :-) Cheers, -- Pierre Server Shepherd at http://www.fotopedia.com/ From cliftonk at gmail.com Wed Dec 1 11:12:37 2010 From: cliftonk at gmail.com (Clifton King) Date: Wed, 1 Dec 2010 10:12:37 -0600 Subject: Unicorn and HAProxy, 500 Internal errors after checks In-Reply-To: References: Message-ID: Pierre, Any specific reason you're using HAProxy for Unicorn? Clifton On Wed, Dec 1, 2010 at 5:59 AM, Pierre wrote: > Hi, > > This morning, while checking for a correct deployment, we found out > that the Unicorns we are using were sending 500 Internal errors very > frequently to the HAProxy that sits in front of them. After some > investigation, It turned out that HAProxy checks the backend by > opening and closing a connection to the unicorn. Unfortunately the > Unicorns we use ( v 0.990.0 ) will try to reply to this probe by a > 500, resulting in the error being sent to the HAProxy when the proxy > has already close the connection. I think Unicorn should refrain from > sending an error in this case. There is no visible side effect, > excepted that there are a "lot" of 500s running on the wire that > nobody will ever read. Also, these errors are not sent in the Unicorn > log, making it quite difficult to understand what's going on :-) > > Cheers, > -- > Pierre > Server Shepherd at http://www.fotopedia.com/ > _______________________________________________ > Unicorn mailing list - mongrel-unicorn at rubyforge.org > http://rubyforge.org/mailman/listinfo/mongrel-unicorn > Do not quote signatures (like this one) or top post when replying > From normalperson at yhbt.net Wed Dec 1 11:52:07 2010 From: normalperson at yhbt.net (Eric Wong) Date: Wed, 1 Dec 2010 16:52:07 +0000 Subject: Unicorn and HAProxy, 500 Internal errors after checks In-Reply-To: References: Message-ID: <20101201165207.GC12001@dcvr.yhbt.net> Pierre wrote: > Hi, > > This morning, while checking for a correct deployment, we found out > that the Unicorns we are using were sending 500 Internal errors very > frequently to the HAProxy that sits in front of them. After some > investigation, It turned out that HAProxy checks the backend by > opening and closing a connection to the unicorn. Unfortunately the > Unicorns we use ( v 0.990.0 ) will try to reply to this probe by a > 500, resulting in the error being sent to the HAProxy when the proxy > has already close the connection. Hi Pierre, HAProxy should be configured to send proper HTTP checks and not just TCP connection checks, the problem will go away then. Also, I can not recommend HAProxy unless you're certain all your clients are on a LAN and can be trusted to never trickle uploads nor reading large responses. -- Eric Wong From oct at fotopedia.com Wed Dec 1 12:02:35 2010 From: oct at fotopedia.com (Pierre) Date: Wed, 1 Dec 2010 18:02:35 +0100 Subject: Unicorn and HAProxy, 500 Internal errors after checks In-Reply-To: References: Message-ID: Hi, > > Any specific reason you're using HAProxy for Unicorn? Indeed, we have two front load-balancers instances running HAProxy and several backends running Unicorns. We use HAProxy to amortize part of the load and load-balance / failover between all the backends. We especially use the leastconn feature of HAProxy that ensure that the less powerful backends are queried less often. As we run on EC2 virtual machines, this feature has the please to help us maintaining a good QoS. Cheers, -- Pierre Server Shepherd at http://www.fotopedia.com/ From oct at fotopedia.com Wed Dec 1 12:14:37 2010 From: oct at fotopedia.com (Pierre) Date: Wed, 1 Dec 2010 18:14:37 +0100 Subject: Unicorn and HAProxy, 500 Internal errors after checks In-Reply-To: <20101201165207.GC12001@dcvr.yhbt.net> References: <20101201165207.GC12001@dcvr.yhbt.net> Message-ID: Dear Eric, On Wed, Dec 1, 2010 at 5:52 PM, Eric Wong wrote: > Hi Pierre, HAProxy should be configured to send proper HTTP checks and > not just TCP connection checks, the problem will go away then. I understood this could be fixed this way and we will probably do that soon. However, I think this is also the responsibility of Unicorn not to reply anything when there's no request or at least log the error somewhere :) > Also, I > can not recommend HAProxy unless you're certain all your clients are on > a LAN and can be trusted to never trickle uploads nor reading large > responses. While I understand that uploads are very complicated to handle on the stack (even nginx can be confused at upload sometimes), HAProxy proved it was very good at managing tons of connections and high volume traffic from the Internet. All the more so as it allows a very high level of redundancy at a very small cost that cannot be achieved simply otherwise. Do you have any pointers about your worrying non-recommendation of HAProxy ? As far as I'm concerned, I've used HAProxy in worldwide web context of website serving up to 25 Millions pages with no problem, ever. Thanks again for your support, :) -- Pierre Server Shepherd at http://www.fotopedia.com/ From normalperson at yhbt.net Wed Dec 1 14:58:59 2010 From: normalperson at yhbt.net (Eric Wong) Date: Wed, 1 Dec 2010 19:58:59 +0000 Subject: Unicorn and HAProxy, 500 Internal errors after checks In-Reply-To: References: <20101201165207.GC12001@dcvr.yhbt.net> Message-ID: <20101201195858.GD12001@dcvr.yhbt.net> Pierre wrote: > On Wed, Dec 1, 2010 at 5:52 PM, Eric Wong wrote: > > Hi Pierre, HAProxy should be configured to send proper HTTP checks and > > not just TCP connection checks, the problem will go away then. > > I understood this could be fixed this way and we will probably do that > soon. However, I think this is also the responsibility of Unicorn not > to reply anything when there's no request or at least log the error > somewhere :) I'm not sure how Unicorn is actually replying to anything, does HAProxy write *anything* to the socket? Logging those bad connections is another DoS vector I'd rather avoid, and for connections where nothing is written, not even possible... If you have the TCP_DEFER_ACCEPT (Linux) or accept filters (FreeBSD), it's highly likely the Unicorn would never see the connection if the client never wrote to it. > > Also, I > > can not recommend HAProxy unless you're certain all your clients are on > > a LAN and can be trusted to never trickle uploads nor reading large > > responses. > > While I understand that uploads are very complicated to handle on the > stack (even nginx can be confused at upload sometimes), HAProxy proved > it was very good at managing tons of connections and high volume > traffic from the Internet. All the more so as it allows a very high > level of redundancy at a very small cost that cannot be achieved > simply otherwise. Do you have any pointers about your worrying > non-recommendation of HAProxy ? HAProxy starts writing request bodies to Unicorn as soon as the upload starts, which means the Unicorn process will be bounded by the speed of the original client connection. If multiple clients upload slowly, then you'll end up hogging many Unicorn workers. nginx can also limit the size of client uploads (default 1M) to prevent unnecessary I/O. If you serve large responses that can't fit in kernel socket buffers, then Unicorn will get stuck writing out to a client that isn't reading fast enough. AFAIK, HAProxy also does not yet maintain keep-alive connections to clients, whereas nginx does. Keep-alive is important to client browsers, they can halve their active connections to a site if keep-alive is supported. -- Eric Wong From lawrence.pit at gmail.com Wed Dec 1 19:42:19 2010 From: lawrence.pit at gmail.com (Lawrence Pit) Date: Thu, 02 Dec 2010 11:42:19 +1100 Subject: Unicorn and HAProxy, 500 Internal errors after checks In-Reply-To: <20101201195858.GD12001@dcvr.yhbt.net> References: <20101201165207.GC12001@dcvr.yhbt.net> <20101201195858.GD12001@dcvr.yhbt.net> Message-ID: <4CF6EB6B.1070603@gmail.com> > HAProxy starts writing request bodies to Unicorn as soon as the upload > starts, Is that also true when the nginx upload module is used? (assuming nginx sits between HAProxy and the unicorns, otherwise it doesn't make sense anyways). Unicorn is only hit after the complete upload is finished by nginx. I would assume this wouldn't be different if HAProxy is put in front of all the nginx servers. > AFAIK, HAProxy also does not yet maintain keep-alive connections to > clients, whereas nginx does. Keep-alive is important to client browsers, > they can halve their active connections to a site if keep-alive is > supported. keep-alive options are in HAProxy since 1.4 There is further new development on this front if you're using SSL. See the first quick news section at http://haproxy.1wt.eu/ : "The main advantage over the x-forwarded-for patch is that it now supports keep-alive" Lawrence From normalperson at yhbt.net Wed Dec 1 23:59:11 2010 From: normalperson at yhbt.net (Eric Wong) Date: Thu, 2 Dec 2010 04:59:11 +0000 Subject: Unicorn and HAProxy, 500 Internal errors after checks In-Reply-To: <4CF6EB6B.1070603@gmail.com> References: <20101201165207.GC12001@dcvr.yhbt.net> <20101201195858.GD12001@dcvr.yhbt.net> <4CF6EB6B.1070603@gmail.com> Message-ID: <20101202045911.GA2688@dcvr.yhbt.net> Lawrence Pit wrote: > Eric Wong wrote: >> HAProxy starts writing request bodies to Unicorn as soon as the upload >> starts, > > Is that also true when the nginx upload module is used? (assuming nginx > sits between HAProxy and the unicorns, otherwise it doesn't make sense > anyways). Unicorn is only hit after the complete upload is finished by > nginx. I would assume this wouldn't be different if HAProxy is put in > front of all the nginx servers. I would setup a test and confirm. You can do this trivially with the following Rack app: use Rack::ContentLength use Rack::ContentType run lambda { |env| input = env['rack.input'] buf = input.each do |line| # each line is printed as Unicorn receives it, # if Unicorn is behind nginx, the times for each # line should be roughly/exactly the same. puts "#{Time.now} #{line.inspect}" end [ 200, {}, [] ] } And then telnetting or netcatting to your frontend, and typing the following (no leading spaces, use a proper hostname for vhosts): PUT / HTTP/1.1 Host: example.com Content-Length: 6 ...and then hit Enter a few times while watching your Unicorn terminal/logs. If you delay between hitting the Enter nginx should be buffering that. > keep-alive options are in HAProxy since 1.4 > > There is further new development on this front if you're using SSL. See > the first quick news section at http://haproxy.1wt.eu/ : > > "The main advantage over the x-forwarded-for patch is that it now > supports keep-alive" Cool. -- Eric Wong From oct at fotopedia.com Thu Dec 2 03:38:38 2010 From: oct at fotopedia.com (Pierre) Date: Thu, 2 Dec 2010 09:38:38 +0100 Subject: Unicorn and HAProxy, 500 Internal errors after checks In-Reply-To: <20101201195858.GD12001@dcvr.yhbt.net> References: <20101201165207.GC12001@dcvr.yhbt.net> <20101201195858.GD12001@dcvr.yhbt.net> Message-ID: Hello, On Wed, Dec 1, 2010 at 8:58 PM, Eric Wong wrote: > Pierre wrote: >> On Wed, Dec 1, 2010 at 5:52 PM, Eric Wong wrote: >> > Hi Pierre, HAProxy should be configured to send proper HTTP checks and >> > not just TCP connection checks, the problem will go away then. >> >> I understood this could be fixed this way and we will probably do that >> soon. However, I think this is also the responsibility of Unicorn not >> to reply anything when there's no request or at least log the error >> somewhere :) > > I'm not sure how Unicorn is actually replying to anything, does HAProxy > write *anything* to the socket? > It does. To reproduce the behavior, start a unicorn, start a sniffing tool (ngrep for example), connect to the unicorn and disconnect immediately: Connecting endpoint: [08:22][virtual] root at infrabox:~# telnet localhost 2002 Trying 127.0.0.1... Connected to infrabox.virtual.ftnz.net. Escape character is '^]'. ^] telnet> quit Connection closed. Sniffing Console: [08:22][virtual] root at infrabox:~# ngrep "" port 2002 -d lo interface: lo (127.0.0.0/255.0.0.0) filter: (ip or ip6) and ( port 2002 ) ##### T 127.0.0.1:2002 -> 127.0.0.1:42874 [AFP] HTTP/1.1 500 Internal Server Error.... # Further packet inspection reveals that the 500 Internal Server Error is sent after the telnet has sent a FIN packet which means it will just be discarded. I understand logging it could be a DoS vector, but you must admit that seing 500's from the server without any obvious reason can be frightening at first. Re HAProxy, and to complete Laurence reply from my point of view, > If you serve large responses that can't fit in kernel socket buffers, > then Unicorn will get stuck writing out to a client that isn't reading > fast enough. That can definitely be a problem in that case. To work around that we use a cache in the stack above the lower level of HAProxy (we have two other levels of HAProxy in the stack). Cheers, -- Pierre Server Shepherd at http://www.fotopedia.com/ From normalperson at yhbt.net Thu Dec 2 12:39:59 2010 From: normalperson at yhbt.net (Eric Wong) Date: Thu, 2 Dec 2010 17:39:59 +0000 Subject: Unicorn and HAProxy, 500 Internal errors after checks In-Reply-To: References: <20101201165207.GC12001@dcvr.yhbt.net> <20101201195858.GD12001@dcvr.yhbt.net> Message-ID: <20101202173959.GA24132@dcvr.yhbt.net> Pierre wrote: > On Wed, Dec 1, 2010 at 8:58 PM, Eric Wong wrote: > > I'm not sure how Unicorn is actually replying to anything, does HAProxy > > write *anything* to the socket? > > It does. To reproduce the behavior, start a unicorn, start a sniffing > tool (ngrep for example), connect to the unicorn and disconnect > immediately: > > Connecting endpoint: > > [08:22][virtual] root at infrabox:~# telnet localhost 2002 > Trying 127.0.0.1... > Connected to infrabox.virtual.ftnz.net. > Escape character is '^]'. > ^] > telnet> quit > Connection closed. Hi, you started writing an HTTP message ("quit" can be a valid HTTP method name) and disconnected; don't do that. > Further packet inspection reveals that the 500 Internal Server Error > is sent after the telnet has sent a FIN packet which means it will > just be discarded. I understand logging it could be a DoS vector, but > you must admit that seing 500's from the server without any obvious > reason can be frightening at first. You can enable Ruby debugging (pass '-d' to unicorn) to see exactly which exception you got. Really, it shouldn't matter, you should be sending real HTTP requests for health checks. -- Eric Wong From normalperson at yhbt.net Thu Dec 2 12:41:30 2010 From: normalperson at yhbt.net (Eric Wong) Date: Thu, 2 Dec 2010 17:41:30 +0000 Subject: Unicorn and HAProxy, 500 Internal errors after checks In-Reply-To: References: <20101201165207.GC12001@dcvr.yhbt.net> Message-ID: <20101202174130.GB24132@dcvr.yhbt.net> Pierre wrote: > On Wed, Dec 1, 2010 at 5:52 PM, Eric Wong wrote: > > Also, I > > can not recommend HAProxy unless you're certain all your clients are on > > a LAN and can be trusted to never trickle uploads nor reading large > > responses. > > While I understand that uploads are very complicated to handle on the > stack (even nginx can be confused at upload sometimes), HAProxy proved > it was very good at managing tons of connections and high volume > traffic from the Internet. All the more so as it allows a very high > level of redundancy at a very small cost that cannot be achieved > simply otherwise. Do you have any pointers about your worrying > non-recommendation of HAProxy ? On a related note, LWN has a new article[1] explaining the large body POST problem (more than a year since Slowloris, and ~3 years after the largely-unknown david[2]). [1] http://lwn.net/Articles/418017/ (subscribers) http://lwn.net/SubscriberLink/418017/1e63e408f34b5d68/ (non-subscribers) [2] http://git.bogomips.org/cgit/david.git -- Eric Wong From normalperson at yhbt.net Thu Dec 2 20:29:01 2010 From: normalperson at yhbt.net (Eric Wong) Date: Fri, 3 Dec 2010 01:29:01 +0000 Subject: [ANN] unicorn 3.0.1 - one bugfix for Rainbows! Message-ID: <20101203012901.GA32087@dcvr.yhbt.net> ...and only Rainbows! This release fixes HTTP pipelining for requests with bodies for users of synchronous Rainbows! concurrency models. Since Unicorn itself does not support keepalive nor pipelining, Unicorn-only users need not upgrade. * http://unicorn.bogomips.org/ * mongrel-unicorn at rubyforge.org * git://git.bogomips.org/unicorn.git -- Eric Wong From normalperson at yhbt.net Thu Dec 2 20:30:43 2010 From: normalperson at yhbt.net (Eric Wong) Date: Fri, 3 Dec 2010 01:30:43 +0000 Subject: [ANN] Rainbows! 2.0.1 - upload pipelining fixes In-Reply-To: <20101203012901.GA32087@dcvr.yhbt.net> References: <20101203012901.GA32087@dcvr.yhbt.net> Message-ID: <20101203013043.GB32087@dcvr.yhbt.net> For HTTP clients living on the edge and pipelining uploads, we now fully support pipelined requests (as long as the application consumes each request in its entirety). Rainbows! is an HTTP server for sleepy Rack applications. It is based on Unicorn, but designed to handle applications that expect long request/response times and/or slow clients. * http://rainbows.rubyforge.org/ * rainbows-talk at rubyforge.org * git://git.bogomips.org/rainbows.git -- Eric Wong From ghazel at gmail.com Thu Dec 2 20:35:23 2010 From: ghazel at gmail.com (ghazel at gmail.com) Date: Thu, 2 Dec 2010 17:35:23 -0800 Subject: listen backlog Message-ID: I found this thread http://rubyforge.org/pipermail/mongrel-unicorn/2009-September/000031.html after googling for the same error located in my nginx error log. Is there some way to discover the current queue length of the backlog? Increasing the maximum size to 2048 "worked" for me as well, but obviously clients sit in the queue for a long time. If I could monitor queue length I could get some idea of when I have insufficient unicorn workers before the delay gets very high or requests fail. Thanks in advance! -Greg From normalperson at yhbt.net Thu Dec 2 21:39:19 2010 From: normalperson at yhbt.net (Eric Wong) Date: Thu, 2 Dec 2010 18:39:19 -0800 Subject: listen backlog In-Reply-To: References: Message-ID: <20101203023919.GA4411@dcvr.yhbt.net> ghazel at gmail.com wrote: > I found this thread > http://rubyforge.org/pipermail/mongrel-unicorn/2009-September/000031.html > after googling for the same error located in my nginx error log. > > Is there some way to discover the current queue length of the backlog? > Increasing the maximum size to 2048 "worked" for me as well, but > obviously clients sit in the queue for a long time. If I could monitor > queue length I could get some idea of when I have insufficient unicorn > workers before the delay gets very high or requests fail. If you're using Linux, you can use Raindrops[1] to interrogate via inet_diag or parse /proc/net/{tcp,unix} yourself. You can run Raindrops separate/standalone script: http://git.bogomips.org/cgit/raindrops.git/tree/examples/linux-tcp-listener-stats.rb Or use it as middleware (see webpage): http://raindrops.bogomips.org/ git clone git://git.bogomips.org/raindrops -- Eric Wong From ghazel at gmail.com Fri Dec 3 00:31:24 2010 From: ghazel at gmail.com (ghazel at gmail.com) Date: Thu, 2 Dec 2010 21:31:24 -0800 Subject: listen backlog In-Reply-To: <20101203023919.GA4411@dcvr.yhbt.net> References: <20101203023919.GA4411@dcvr.yhbt.net> Message-ID: On Thu, Dec 2, 2010 at 6:39 PM, Eric Wong wrote: > ghazel at gmail.com wrote: >> I found this thread >> http://rubyforge.org/pipermail/mongrel-unicorn/2009-September/000031.html >> after googling for the same error located in my nginx error log. >> >> Is there some way to discover the current queue length of the backlog? >> Increasing the maximum size to 2048 "worked" for me as well, but >> obviously clients sit in the queue for a long time. If I could monitor >> queue length I could get some idea of when I have insufficient unicorn >> workers before the delay gets very high or requests fail. > > If you're using Linux, you can use Raindrops[1] to interrogate > via inet_diag or parse /proc/net/{tcp,unix} yourself. > > You can run Raindrops separate/standalone script: > http://git.bogomips.org/cgit/raindrops.git/tree/examples/linux-tcp-listener-stats.rb > > Or use it as middleware (see webpage): > http://raindrops.bogomips.org/ > > git clone git://git.bogomips.org/raindrops Amazing! I had somehow never heard of it. I use a unix socket for unicorn (should I not?) so I had to make a copy of linux-tcp-listener-stats.rb to support that. Now I'm able to get stats for my unicorn master. However, there seems to be some problem getting stats on TCP sockets: $ ruby linux-tcp-listener-stats.rb 127.0.0.1:9000 address active queued linux-tcp-listener-stats.rb:42:in `tcp_listener_stats': Connection refused - sendmsg (Errno::ECONNREFUSED) from linux-tcp-listener-stats.rb:42 $ grep 0100007F:2328 /proc/net/tcp 1: 0100007F:2328 00000000:0000 0A 00000000:00000000 00:00000000 00000000 500 0 25307310 1 ffff880134471700 3000 0 0 2 -1 None of the TCP sockets I know to exist seem to work - they all fail with that error. Any ideas? -Greg From normalperson at yhbt.net Fri Dec 3 02:35:09 2010 From: normalperson at yhbt.net (Eric Wong) Date: Fri, 3 Dec 2010 07:35:09 +0000 Subject: listen backlog In-Reply-To: References: <20101203023919.GA4411@dcvr.yhbt.net> Message-ID: <20101203073509.GA27953@dcvr.yhbt.net> ghazel at gmail.com wrote: > On Thu, Dec 2, 2010 at 6:39 PM, Eric Wong wrote: > > ghazel at gmail.com wrote: > >> I found this thread > >> http://rubyforge.org/pipermail/mongrel-unicorn/2009-September/000031.html > >> after googling for the same error located in my nginx error log. > >> > >> Is there some way to discover the current queue length of the backlog? > >> Increasing the maximum size to 2048 "worked" for me as well, but > >> obviously clients sit in the queue for a long time. If I could monitor > >> queue length I could get some idea of when I have insufficient unicorn > >> workers before the delay gets very high or requests fail. > > > > If you're using Linux, you can use Raindrops[1] to interrogate > > via inet_diag or parse /proc/net/{tcp,unix} yourself. > > > > You can run Raindrops separate/standalone script: > > http://git.bogomips.org/cgit/raindrops.git/tree/examples/linux-tcp-listener-stats.rb > > > > Or use it as middleware (see webpage): > > http://raindrops.bogomips.org/ > > > > git clone git://git.bogomips.org/raindrops > > Amazing! I had somehow never heard of it. Yeah, I don't have much interest in marketing; that's what users are for, but it's a chicken-and-egg problem :x > I use a unix socket for unicorn (should I not?) UNIX sockets are faster for nginx <-> Unicorn, but Raindrops is slower dealing with them since Linux doesn't export UNIX sockets stats to netlink the same way it does for TCP sockets. So there's always a tradeoff :x > so I had to make a copy of > linux-tcp-listener-stats.rb to support that. Now I'm able to get stats > for my unicorn master > > However, there seems to be some problem getting stats on TCP sockets: > > $ ruby linux-tcp-listener-stats.rb 127.0.0.1:9000 > address active queued > linux-tcp-listener-stats.rb:42:in `tcp_listener_stats': Connection > refused - sendmsg (Errno::ECONNREFUSED) > from linux-tcp-listener-stats.rb:42 > $ grep 0100007F:2328 /proc/net/tcp > 1: 0100007F:2328 00000000:0000 0A 00000000:00000000 00:00000000 > 00000000 500 0 25307310 1 ffff880134471700 3000 0 0 2 -1 > > None of the TCP sockets I know to exist seem to work - they all fail > with that error. Odd, which kernel do you have? You might want to "modprobe inet_diag" if you're on an older kernel. Or you can just comment-out the TCP code and use the UNIX sockets code. -- Eric Wong From oct at fotopedia.com Fri Dec 3 03:41:16 2010 From: oct at fotopedia.com (Pierre) Date: Fri, 3 Dec 2010 09:41:16 +0100 Subject: Unicorn and HAProxy, 500 Internal errors after checks In-Reply-To: <20101202173959.GA24132@dcvr.yhbt.net> References: <20101201165207.GC12001@dcvr.yhbt.net> <20101201195858.GD12001@dcvr.yhbt.net> <20101202173959.GA24132@dcvr.yhbt.net> Message-ID: Hello, On Thu, Dec 2, 2010 at 6:39 PM, Eric Wong wrote: >> >> Connecting endpoint: >> >> [08:22][virtual] root at infrabox:~# telnet localhost 2002 >> Trying 127.0.0.1... >> Connected to infrabox.virtual.ftnz.net. >> Escape character is '^]'. >> ^] >> telnet> quit >> Connection closed. > > Hi, you started writing an HTTP message ("quit" can be a valid HTTP > method name) and disconnected; don't do that. > No, quit is typed in the telnet console and not in the network stream. When passing -d to unicorn, I get the exception, that's cool Exception `EOFError' at /usr/local/rvm/gems/ree-1.8.7-2010.02/gems/unicorn-0.990.0/lib/unicorn/http_request.rb:59 - end of file reached Cheers, -- Pierre Server Shepherd at http://www.fotopedia.com/ From ghazel at gmail.com Fri Dec 3 04:16:43 2010 From: ghazel at gmail.com (ghazel at gmail.com) Date: Fri, 3 Dec 2010 01:16:43 -0800 Subject: listen backlog In-Reply-To: <20101203073509.GA27953@dcvr.yhbt.net> References: <20101203023919.GA4411@dcvr.yhbt.net> <20101203073509.GA27953@dcvr.yhbt.net> Message-ID: On Thu, Dec 2, 2010 at 11:35 PM, Eric Wong wrote: > ghazel at gmail.com wrote: >> On Thu, Dec 2, 2010 at 6:39 PM, Eric Wong wrote: >> > ghazel at gmail.com wrote: >> >> I found this thread >> >> http://rubyforge.org/pipermail/mongrel-unicorn/2009-September/000031.html >> >> after googling for the same error located in my nginx error log. >> >> >> >> Is there some way to discover the current queue length of the backlog? >> >> Increasing the maximum size to 2048 "worked" for me as well, but >> >> obviously clients sit in the queue for a long time. If I could monitor >> >> queue length I could get some idea of when I have insufficient unicorn >> >> workers before the delay gets very high or requests fail. >> > >> > If you're using Linux, you can use Raindrops[1] to interrogate >> > via inet_diag or parse /proc/net/{tcp,unix} yourself. >> > >> > You can run Raindrops separate/standalone script: >> > http://git.bogomips.org/cgit/raindrops.git/tree/examples/linux-tcp-listener-stats.rb >> > >> > Or use it as middleware (see webpage): >> > http://raindrops.bogomips.org/ >> > >> > git clone git://git.bogomips.org/raindrops >> >> Amazing! I had somehow never heard of it. > > Yeah, I don't have much interest in marketing; that's what users are > for, but it's a chicken-and-egg problem :x > >> I use a unix socket for unicorn (should I not?) > > UNIX sockets are faster for nginx <-> Unicorn, but Raindrops is slower > dealing with them since Linux doesn't export UNIX sockets stats to > netlink the same way it does for TCP sockets. ?So there's always a > tradeoff :x When does that netlink speed difference matter - only when collecting stats? >> so I had to make a copy of >> linux-tcp-listener-stats.rb to support that. Now I'm able to get stats >> for my unicorn master >> >> However, there seems to be some problem getting stats on TCP sockets: >> >> $ ruby linux-tcp-listener-stats.rb 127.0.0.1:9000 >> ? ? ? ? ? ? address ? ? active ? ? queued >> linux-tcp-listener-stats.rb:42:in `tcp_listener_stats': Connection >> refused - sendmsg (Errno::ECONNREFUSED) >> ? ? ? ? from linux-tcp-listener-stats.rb:42 >> $ grep ?0100007F:2328 /proc/net/tcp >> ? ?1: 0100007F:2328 00000000:0000 0A 00000000:00000000 00:00000000 >> 00000000 ? 500 ? ? ? ?0 25307310 1 ffff880134471700 3000 0 0 2 -1 >> >> None of the TCP sockets I know to exist seem to work - they all fail >> with that error. > > Odd, which kernel do you have? ?You might want to "modprobe inet_diag" > if you're on an older kernel. ?Or you can just comment-out the TCP > code and use the UNIX sockets code. Linux hostname 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:34:28 EST 2008 x86_64 x86_64 x86_64 GNU/Linux Using "modprobe inet_diag" made the script spit out a new error: address active queued linux-tcp-listener-stats.rb:42:in `tcp_listener_stats': NLMSG_ERROR (RuntimeError) from linux-tcp-listener-stats.rb:42 $ sudo modprobe -l inet_diag /lib/modules/2.6.21.7-2.fc8xen/kernel/net/ipv4/inet_diag.ko I dug in to raindrops a little bit, and it seems the error associated with the NLMSG_ERROR is -2, "No such file or directory". -Greg From normalperson at yhbt.net Fri Dec 3 16:49:06 2010 From: normalperson at yhbt.net (Eric Wong) Date: Fri, 3 Dec 2010 13:49:06 -0800 Subject: listen backlog In-Reply-To: References: <20101203023919.GA4411@dcvr.yhbt.net> <20101203073509.GA27953@dcvr.yhbt.net> Message-ID: <20101203214906.GA11366@dcvr.yhbt.net> ghazel at gmail.com wrote: > On Thu, Dec 2, 2010 at 11:35 PM, Eric Wong wrote: > > UNIX sockets are faster for nginx <-> Unicorn, but Raindrops is slower > > dealing with them since Linux doesn't export UNIX sockets stats to > > netlink the same way it does for TCP sockets. ?So there's always a > > tradeoff :x > > When does that netlink speed difference matter - only when collecting stats? Yes, the performance difference is only when collecting stats. > Using "modprobe inet_diag" made the script spit out a new error: > > address active queued > linux-tcp-listener-stats.rb:42:in `tcp_listener_stats': NLMSG_ERROR > (RuntimeError) > from linux-tcp-listener-stats.rb:42 I don't think I've ever seen NLMSG_ERROR before. Are you running this as the same user that originally bound the listener (the user of the Unicorn master process)? > $ sudo modprobe -l inet_diag > /lib/modules/2.6.21.7-2.fc8xen/kernel/net/ipv4/inet_diag.ko > > I dug in to raindrops a little bit, and it seems the error associated > with the NLMSG_ERROR is -2, > "No such file or directory". Are you bound to 0.0.0.0:9000 and not 127.0.0.1:9000? Use 0.0.0.0:9000 if you're bound to that (I had another user on the raindrops mailing list with that problem). -- Eric Wong From ghazel at gmail.com Fri Dec 3 17:49:22 2010 From: ghazel at gmail.com (ghazel at gmail.com) Date: Fri, 3 Dec 2010 14:49:22 -0800 Subject: listen backlog In-Reply-To: <20101203214906.GA11366@dcvr.yhbt.net> References: <20101203023919.GA4411@dcvr.yhbt.net> <20101203073509.GA27953@dcvr.yhbt.net> <20101203214906.GA11366@dcvr.yhbt.net> Message-ID: On Fri, Dec 3, 2010 at 1:49 PM, Eric Wong wrote: > ghazel at gmail.com wrote: >> Using "modprobe inet_diag" made the script spit out a new error: >> >> ? ? ? ? ? ? address ? ? active ? ? queued >> linux-tcp-listener-stats.rb:42:in `tcp_listener_stats': NLMSG_ERROR >> (RuntimeError) >> ? ? ? ? from linux-tcp-listener-stats.rb:42 > > I don't think I've ever seen NLMSG_ERROR before. ?Are you running > this as the same user that originally bound the listener (the user > of the Unicorn master process)? Yes. I also tried as root, same error. >> $ sudo modprobe -l inet_diag >> /lib/modules/2.6.21.7-2.fc8xen/kernel/net/ipv4/inet_diag.ko >> >> I dug in to raindrops a little bit, and it seems the error associated >> with the NLMSG_ERROR is -2, >> "No such file or directory". > > Are you bound to 0.0.0.0:9000 and not 127.0.0.1:9000? ?Use > 0.0.0.0:9000 if you're bound to that (I had another user on the > raindrops mailing list with that problem). My unicorn.rb says 127.0.0.1. But just to test I tried fetching stats for 0.0.0.0:9000 but got the same error. -Greg From normalperson at yhbt.net Sat Dec 4 18:38:38 2010 From: normalperson at yhbt.net (Eric Wong) Date: Sat, 4 Dec 2010 15:38:38 -0800 Subject: Unicorn and HAProxy, 500 Internal errors after checks In-Reply-To: References: <20101201165207.GC12001@dcvr.yhbt.net> <20101201195858.GD12001@dcvr.yhbt.net> <20101202173959.GA24132@dcvr.yhbt.net> Message-ID: <20101204233838.GA11629@dcvr.yhbt.net> Pierre wrote: > On Thu, Dec 2, 2010 at 6:39 PM, Eric Wong wrote: > > Pierre wrote: > >> Connecting endpoint: > >> > >> [08:22][virtual] root at infrabox:~# telnet localhost 2002 > >> Trying 127.0.0.1... > >> Connected to infrabox.virtual.ftnz.net. > >> Escape character is '^]'. > >> ^] > >> telnet> quit > >> Connection closed. > > > > Hi, you started writing an HTTP message ("quit" can be a valid HTTP > > method name) and disconnected; don't do that. > > No, quit is typed in the telnet console and not in the network stream. Are you sure? With my telnet, "quit" definitely goes out to the server since you're already connected. -- Eric Wong From normalperson at yhbt.net Sat Dec 4 18:48:33 2010 From: normalperson at yhbt.net (Eric Wong) Date: Sat, 4 Dec 2010 15:48:33 -0800 Subject: listen backlog In-Reply-To: References: <20101203023919.GA4411@dcvr.yhbt.net> <20101203073509.GA27953@dcvr.yhbt.net> <20101203214906.GA11366@dcvr.yhbt.net> Message-ID: <20101204234833.GA11161@dcvr.yhbt.net> ghazel at gmail.com wrote: > On Fri, Dec 3, 2010 at 1:49 PM, Eric Wong wrote: > > ghazel at gmail.com wrote: > >> Using "modprobe inet_diag" made the script spit out a new error: > >> > >> ? ? ? ? ? ? address ? ? active ? ? queued > >> linux-tcp-listener-stats.rb:42:in `tcp_listener_stats': NLMSG_ERROR > >> (RuntimeError) > >> ? ? ? ? from linux-tcp-listener-stats.rb:42 > > > > I don't think I've ever seen NLMSG_ERROR before. ?Are you running > > this as the same user that originally bound the listener (the user > > of the Unicorn master process)? > > Yes. I also tried as root, same error. > > >> $ sudo modprobe -l inet_diag > >> /lib/modules/2.6.21.7-2.fc8xen/kernel/net/ipv4/inet_diag.ko > >> > >> I dug in to raindrops a little bit, and it seems the error associated > >> with the NLMSG_ERROR is -2, > >> "No such file or directory". > > > > Are you bound to 0.0.0.0:9000 and not 127.0.0.1:9000? ?Use > > 0.0.0.0:9000 if you're bound to that (I had another user on the > > raindrops mailing list with that problem). > > My unicorn.rb says 127.0.0.1. But just to test I tried fetching stats > for 0.0.0.0:9000 but got the same error. Ah, can you try "modprobe tcp_diag", too? I can't remember what other quirks there were for ancient kernels. Hopefully that works, because I'd be at a loss otherwise :x -- Eric Wong From ghazel at gmail.com Sat Dec 4 19:02:53 2010 From: ghazel at gmail.com (ghazel at gmail.com) Date: Sat, 4 Dec 2010 16:02:53 -0800 Subject: listen backlog In-Reply-To: <20101204234833.GA11161@dcvr.yhbt.net> References: <20101203023919.GA4411@dcvr.yhbt.net> <20101203073509.GA27953@dcvr.yhbt.net> <20101203214906.GA11366@dcvr.yhbt.net> <20101204234833.GA11161@dcvr.yhbt.net> Message-ID: On Sat, Dec 4, 2010 at 3:48 PM, Eric Wong wrote: > ghazel at gmail.com wrote: >> On Fri, Dec 3, 2010 at 1:49 PM, Eric Wong wrote: >> > ghazel at gmail.com wrote: >> >> Using "modprobe inet_diag" made the script spit out a new error: >> >> >> >> ? ? ? ? ? ? address ? ? active ? ? queued >> >> linux-tcp-listener-stats.rb:42:in `tcp_listener_stats': NLMSG_ERROR >> >> (RuntimeError) >> >> ? ? ? ? from linux-tcp-listener-stats.rb:42 >> > >> > I don't think I've ever seen NLMSG_ERROR before. ?Are you running >> > this as the same user that originally bound the listener (the user >> > of the Unicorn master process)? >> >> Yes. I also tried as root, same error. >> >> >> $ sudo modprobe -l inet_diag >> >> /lib/modules/2.6.21.7-2.fc8xen/kernel/net/ipv4/inet_diag.ko >> >> >> >> I dug in to raindrops a little bit, and it seems the error associated >> >> with the NLMSG_ERROR is -2, >> >> "No such file or directory". >> > >> > Are you bound to 0.0.0.0:9000 and not 127.0.0.1:9000? ?Use >> > 0.0.0.0:9000 if you're bound to that (I had another user on the >> > raindrops mailing list with that problem). >> >> My unicorn.rb says 127.0.0.1. But just to test I tried fetching stats >> for 0.0.0.0:9000 but got the same error. > > Ah, can you try "modprobe tcp_diag", too? ?I can't remember what other > quirks there were for ancient kernels. ?Hopefully that works, because > I'd be at a loss otherwise :x Ah! That worked. Thanks! -Greg From russm-rubyforge at slofith.org Sat Dec 4 20:04:52 2010 From: russm-rubyforge at slofith.org (russell muetzelfeldt) Date: Sun, 5 Dec 2010 12:04:52 +1100 Subject: Unicorn and HAProxy, 500 Internal errors after checks In-Reply-To: <20101204233838.GA11629@dcvr.yhbt.net> References: <20101201165207.GC12001@dcvr.yhbt.net> <20101201195858.GD12001@dcvr.yhbt.net> <20101202173959.GA24132@dcvr.yhbt.net> <20101204233838.GA11629@dcvr.yhbt.net> Message-ID: <5BF35DCB-342A-4902-8DF0-B961A08F9E7F@slofith.org> On 05/12/2010, at 10:38 AM, Eric Wong wrote: > Pierre wrote: >> On Thu, Dec 2, 2010 at 6:39 PM, Eric Wong wrote: >>> Pierre wrote: >>>> Connecting endpoint: >>>> >>>> [08:22][virtual] root at infrabox:~# telnet localhost 2002 >>>> Trying 127.0.0.1... >>>> Connected to infrabox.virtual.ftnz.net. >>>> Escape character is '^]'. >>>> ^] >>>> telnet> quit >>>> Connection closed. >>> >>> Hi, you started writing an HTTP message ("quit" can be a valid HTTP >>> method name) and disconnected; don't do that. >> >> No, quit is typed in the telnet console and not in the network stream. > > Are you sure? With my telnet, "quit" definitely goes out to the server > since you're already connected. he connects, then sends an escape ("^]") to the telnet process, then types "quit" at the prompt the telnet process shows to tell the local telnet process to close the connection. the connection *might* see some traffic in attempted telnet option negotiation (unless the server end initiates that - I forget), but the "quit" string isn't transmitted to the remote end. cheers Russell From zhangfengnx67ifansu at yahoo.de Sun Dec 5 12:29:19 2010 From: zhangfengnx67ifansu at yahoo.de (Rick) Date: Mon, 6 Dec 2010 01:29:19 +0800 Subject: =?GB2312?B?UGhvdG8gRWRpdGluZyBTZXJ2aWNlcyAtIFBob3RvIEN1dG91dCBTZXJ2aWNl?= Message-ID: Digital Photo Editing Services : We are a China based Imaging Professionals. We offer basic and advanced digital photo Editing services and solutions like photo Cutout, morphological photo Editing, photoshop photo Editing, satellite photo Editing, color photo Editing and vector photo Editing using latest techniques. Our strength in providing Editing solutions for digital images like photo masking, photo re-touching, back ground cleaning & cloning, sharpening & restoration of color, all this derive from our vast experience. Our dedicated team of highly skilled and experienced professionals serves the photo Editing requirements of our clients. An in house quality checking mechanism assures value addition and delivers perfect job. Our team can deliver your job overnight or in time bounded fashion irrespective of job size. Our mainly services are: 1. Photo Cutout 2. Photo Enhancement 3. Photo Retouching 4. Vector Conversion 5. Pop Art 6. Images Masking 7. Clipping Path 8. Photo Restoration 9. Web Design Photo Editing Services: Our Photo Editing services includes advanced photo cutouts/clippings, balancing brightness / contrast in an image, repair of minor scratches, creases, minor dust, and spot removal to removal of major scratches, cracks, creases, and stains in all areas. We also repair seriously faded/damaged photographs and make it print ready. Best regards, Rick Rickceminamn Imaging Professionals Contact: wallacecontact at yeah.net Pls send address to photoremove at yeah.net for remove From admin at mobilegames.com Mon Dec 6 04:40:34 2010 From: admin at mobilegames.com (admin at mobilegames.com) Date: 6 Dec 2010 15:40:34 +0600 Subject: Best Mobile phone application Message-ID: From normalperson at yhbt.net Mon Dec 6 13:39:24 2010 From: normalperson at yhbt.net (Eric Wong) Date: Mon, 6 Dec 2010 10:39:24 -0800 Subject: Unicorn and HAProxy, 500 Internal errors after checks In-Reply-To: <5BF35DCB-342A-4902-8DF0-B961A08F9E7F@slofith.org> References: <20101201165207.GC12001@dcvr.yhbt.net> <20101201195858.GD12001@dcvr.yhbt.net> <20101202173959.GA24132@dcvr.yhbt.net> <20101204233838.GA11629@dcvr.yhbt.net> <5BF35DCB-342A-4902-8DF0-B961A08F9E7F@slofith.org> Message-ID: <20101206183924.GA8320@dcvr.yhbt.net> russell muetzelfeldt wrote: > On 05/12/2010, at 10:38 AM, Eric Wong wrote: > > Pierre wrote: > >> On Thu, Dec 2, 2010 at 6:39 PM, Eric Wong wrote: > >>> Pierre wrote: > >>>> Connecting endpoint: > >>>> > >>>> [08:22][virtual] root at infrabox:~# telnet localhost 2002 > >>>> Trying 127.0.0.1... > >>>> Connected to infrabox.virtual.ftnz.net. > >>>> Escape character is '^]'. > >>>> ^] > >>>> telnet> quit > >>>> Connection closed. > >>> > >>> Hi, you started writing an HTTP message ("quit" can be a valid HTTP > >>> method name) and disconnected; don't do that. > >> > >> No, quit is typed in the telnet console and not in the network stream. > > > > Are you sure? With my telnet, "quit" definitely goes out to the server > > since you're already connected. > he connects, then sends an escape ("^]") to the telnet process, then > types "quit" at the prompt the telnet process shows to tell the local > telnet process to close the connection. Ah, I missed the "^]" :x > the connection *might* see some traffic in attempted telnet option > negotiation (unless the server end initiates that - I forget), but the > "quit" string isn't transmitted to the remote end. Due to TCP_DEFER_ACCEPT, older Linux kernels won't even wake up Unicorn. Newer ones treat the TCP_DEFER_ARGUMENT as a timeout but it's just a quick EOFError. -- Eric Wong From mubarakraheem-ali at att.net Wed Dec 8 02:31:48 2010 From: mubarakraheem-ali at att.net (MUBARACK RAHEEM ALI) Date: Tue, 07 Dec 2010 23:31:48 -0800 Subject: your urgent respond Message-ID: Dear Friend, I hope and pray that I have the right person who will help me. I have interest of investing in your country as such I am making contact with you for assistance. Before the war in my country (Iraq) I deposited some funds with a Bank for safe keeping which I am looking for a partner that will help me retrieve the funds from the Bank as I cannot travel out at the moment because of my present predicaments /conditions which I will explain to you as we progress. My name is Raheem Mubarak Ali from Iraq. Late Saddam Hussein totally brought destruction / Hell and political instability to our great country and everything is practically difficult now. Please if you accept this offer of assistance you are required to give me your Name, age, occupation, country and address. I will send to you detailed information of this business if you indicate your seriousness to do the business, and also enclosing your telephone fax numbers. I promise you that this deal is valid, real and risk free. What I now need from you are as follows: 1. You should make contact with the Bank to secure the funds as I will be entrusting the business into your care. 2. You will be entitled to 30% of the total sum involved for your assistance. 3. As soon as you have the funds in your custody, we will enter a new arrangement on which sector you will invest my share of the funds in on my behalf to generate enough money for the up keep of my family in your country. 4. This project is 100% risk free, but you must keep it very secret and confidential with strong assurance that you will never let me down at all. Please note that my aim to transfer the funds to you for investment is because I want my wife and 4 kids to join you and stay under your care, hope my family will find comfort, peace and happiness once again in your country. I want to clear you about this, the funds is not from drug deal, its not from arms deals, its not government money and its not for any terrorist or illegal activity, why I am emphasizing on the confidentiality is because I don't want you to be bordered over above issues. Can you help me? Are you trustworthy? Are you capable of handling this money? Can we partner? If yes, please contact me immediately so that I will give you more details about the funds. All you need to do is to claim this money from the Company for our mutual benefits. For your assistance, you will be entitled to 30% of the total sum. You are also obliged to help/advise on the proper and most convenient way of investing this money in your country, hopefully, You will consider this request and respond positively. I expect your prompt reply and let our communication be by email as it is the safest means of communication for now because I suspect telephone lines in Iraq been connected to the US Telecommunication Network for monitoring. Regards, Raheem Mubarak Ali. From pingyjeour16orjijuas at yahoo.com Thu Dec 9 14:37:24 2010 From: pingyjeour16orjijuas at yahoo.com (Louis) Date: Fri, 10 Dec 2010 03:37:24 +0800 Subject: =?GB2312?B?M0QvMkQgQW5pbWF0aW9uIHNlcnZpY2VzIA==?= =?GB2312?B?LSBDYXJ0b29uIERlc2lnbiAtIDNEIG1vZA==?= =?GB2312?B?ZWxpbmc=?= Message-ID: You are receiving this email because we wish you to use our 3D/2D animation services. We are a China based animation studio. We are specialized in providing 3D designing/modelling/animation services across the globe. We utilize the finest equipment available in the industry, offer efficient data delivery and unrivaled quality and work until the client is fully satisfied with the end product. We pushed past the limitations of technology and hardware to bring 3D walk-through animations and animated effects to the Web, VHS, DVD and now High-Definition. 3d Animation services 3D Modeling Character.Set.Props. Modeling , and Environment Creation Painting Textures layout Uv,painting the Colour.Bump. Normal Map .etc 3D Animation Rigging.Skinning.Aanimation for game and film Custom 3D Modeling Whether you're looking for an inexpensive alternative to 3D model conversion software or just need your latest creative masterpiece to import correctly into your new favorite software, we can help! Architectures Services Interior/exterior architecture rendering Architecture animation Core Offerings 3D Animation 4D Animation 3D Modelling 3D Rendering 2D Animation 2D/3D Game Animation 2D/3D Game Development Cartoon Architecture Visualization Character Animation Animated Commercial Product Modelling Animated Presentation Walkthrough Animation Flash Presentation Logo Animation Flash Animation Flash Games Product Demos Medical Animation Animated Movies Flash Gateways Animated Wallpapers Animated Graphics Best regards, Louis Tannmasame Animation Services Contact: ibaniexpert at yeah.net Pls send address to aniremove at yeah.net for remove From normalperson at yhbt.net Thu Dec 9 17:40:05 2010 From: normalperson at yhbt.net (Eric Wong) Date: Thu, 9 Dec 2010 22:40:05 +0000 Subject: [ANN] unicorn 3.1.0 - client_buffer_body_size tuning Message-ID: <20101209224005.GA24655@dcvr.yhbt.net> This release enables tuning the client_buffer_body_size to raise or lower the threshold for buffering request bodies to disk. This only applies to users who have not disabled rewindable input. There is also a TeeInput bugfix for uncommon usage patterns and Configurator examples in the FAQ should be fixed. * http://unicorn.bogomips.org/ * mongrel-unicorn at rubyforge.org * git://git.bogomips.org/unicorn.git Have fun! -- Eric Wong From normalperson at yhbt.net Fri Dec 10 20:29:16 2010 From: normalperson at yhbt.net (Eric Wong) Date: Fri, 10 Dec 2010 17:29:16 -0800 Subject: the naming of "Unicorn" In-Reply-To: <20101210190448.GA6534@dcvr.yhbt.net> References: <20101209224127.GA24690@dcvr.yhbt.net> <20101210190448.GA6534@dcvr.yhbt.net> Message-ID: <20101211012916.GA23201@dcvr.yhbt.net> In case more people are interested, I originally posted the following to ruby-core: http://mid.gmane.org/20101210190448.GA6534 at dcvr.yhbt.net Eric Wong wrote: > zuerrong wrote: > > 2010/12/10 Tony Arcieri : > > > And Unicorns are fantastical mythical creatures! > > > > > yep that indicates it's not prepare for the actual use. > > There's no shiny website, commercial support, or even a web-based > bug tracker, so of course it's not ready for actual use! :> > > > Anyways, in case somebody wanted to know how I named it: > > I originally wanted to call it "Unicron", in honor of a track posted by > a Kiwi[1] many years ago to a Usenet group we frequented: > > http://unicorn.bogomips.org/unicron.mp3 > > I swapped the "ro" for "or" because: > a) it might be confused as a "cron"-workalike > b) I could get sued by whoever owns the rights to the name (Hasbro?) > > The "Uni" has two meanings: > 1) it signifies "one", being single-threaded compared to its ancestor > 2) it shares 3 characters with its intended platform: UNIX > > > Of course, unicorns are awesome, too :) It's also a constant > reminder to never take things too seriously ;> > > > [1] - It's been many years, but I could try getting in touch with him > if you guys like it :) > -- > Eric Wong From ghazel at gmail.com Fri Dec 10 20:38:59 2010 From: ghazel at gmail.com (ghazel at gmail.com) Date: Fri, 10 Dec 2010 17:38:59 -0800 Subject: the naming of "Unicorn" In-Reply-To: <20101211012916.GA23201@dcvr.yhbt.net> References: <20101209224127.GA24690@dcvr.yhbt.net> <20101210190448.GA6534@dcvr.yhbt.net> <20101211012916.GA23201@dcvr.yhbt.net> Message-ID: On Fri, Dec 10, 2010 at 5:29 PM, Eric Wong wrote: > In case more people are interested, I originally posted the following to > ruby-core: http://mid.gmane.org/20101210190448.GA6534 at dcvr.yhbt.net > > Eric Wong wrote: >> zuerrong wrote: >> > 2010/12/10 Tony Arcieri : >> > > And Unicorns are fantastical mythical creatures! >> > > >> > yep that indicates it's not prepare for the actual use. >> >> There's no shiny website, commercial support, or even a web-based >> bug tracker, so of course it's not ready for actual use! :> >> >> >> Anyways, in case somebody wanted to know how I named it: >> >> I originally wanted to call it "Unicron", in honor of a track posted by >> a Kiwi[1] many years ago to a Usenet group we frequented: >> >> ? ?http://unicorn.bogomips.org/unicron.mp3 >> >> I swapped the "ro" for "or" because: >> a) it might be confused as a "cron"-workalike >> b) I could get sued by whoever owns the rights to the name (Hasbro?) >> >> The "Uni" has two meanings: >> 1) it signifies "one", being single-threaded compared to its ancestor >> 2) it shares 3 characters with its intended platform: UNIX >> >> >> Of course, unicorns are awesome, too :) ?It's also a constant >> reminder to never take things too seriously ;> >> >> >> [1] - It's been many years, but I could try getting in touch with him >> ? ? ? if you guys like it :) >> -- >> Eric Wong Hah! I often typo "unicron". -Greg From pinzheyangap74siasn at yahoo.com Sat Dec 11 06:48:50 2010 From: pinzheyangap74siasn at yahoo.com (Louis) Date: Sat, 11 Dec 2010 19:48:50 +0800 Subject: =?GB2312?B?M0QvMkQgQW5pbWF0aW9uIHNlcnZpY2VzIA==?= =?GB2312?B?LSBDYXJ0b29uIERlc2lnbiAtIDNEIG1vZA==?= =?GB2312?B?ZWxpbmc=?= Message-ID: You are receiving this email because we wish you to use our 3D/2D animation services. We are a China based animation studio. We are specialized in providing 3D designing/modelling/animation services across the globe. We utilize the finest equipment available in the industry, offer efficient data delivery and unrivaled quality and work until the client is fully satisfied with the end product. We pushed past the limitations of technology and hardware to bring 3D walk-through animations and animated effects to the Web, VHS, DVD and now High-Definition. 3d Animation services 3D Modeling Character.Set.Props. Modeling , and Environment Creation Painting Textures layout Uv,painting the Colour.Bump. Normal Map .etc 3D Animation Rigging.Skinning.Aanimation for game and film Custom 3D Modeling Whether you're looking for an inexpensive alternative to 3D model conversion software or just need your latest creative masterpiece to import correctly into your new favorite software, we can help! Architectures Services Interior/exterior architecture rendering Architecture animation Core Offerings 3D Animation 4D Animation 3D Modelling 3D Rendering 2D Animation 2D/3D Game Animation 2D/3D Game Development Cartoon Architecture Visualization Character Animation Animated Commercial Product Modelling Animated Presentation Walkthrough Animation Flash Presentation Logo Animation Flash Animation Flash Games Product Demos Medical Animation Animated Movies Flash Gateways Animated Wallpapers Animated Graphics Best regards, Louis Tannmasame Animation Services Contact: ibaniexpert at yeah.net Pls send address to aniremove at yeah.net for remove From charlestoure80 at aviso.ci Mon Dec 13 06:06:27 2010 From: charlestoure80 at aviso.ci (C. Toure) Date: Mon, 13 Dec 2010 11:06:27 +0000 Subject: Hello Message-ID: <00ebe928$40525$0ca84628125@poste5> Hello Please permit me to express certain personal issues I do not know if I might receive helps from you of course my subject might appear so sudden but please consider this as a wish and accept my mail with a deep sense of humility I lost my father about some months ago; I and my sister are Alone right now. My father was a formal district leader to our entire community more than twenty-five years before our births I was the Eldest son and our mother has a divorce with my father she did never knew of my father's fortunes and so many other aspects though we lost my Mom on the 1st July 2010 Unfortunately, my father willed some amounts of money to us which was with a certain bank within our capital district These amounts was annually paid into my fathers account from various communities and company cooperation among which where Shell Petroleum Development Company, Chevron, and Mobil. Most of the saving which my father willed to me was from annual revenues for compensation of youth and community development under my father leadership I 'd like to transfer to your country with your cooperate assistance of course this was my actual issue of reaching with a mail. The real plight where that there has always been many problems within family members because of indirect rights to some certain matters much like my father's mills, lands, old industrial, Estates, and 16 private housing and other structures. I may urgently need your assistance as I wanted immediate transfer's to your country cooperatively with your helps. I inherited Good sun of money which is $4.000.000 as said herein and I believed it might be Great times that has indeed drew us together Please do accord mutual esteem to the email, I may need your Reply quickly. Sincerely Charles From ibc at aliax.net Wed Dec 22 06:24:26 2010 From: ibc at aliax.net (=?UTF-8?Q?I=C3=B1aki_Baz_Castillo?=) Date: Wed, 22 Dec 2010 12:24:26 +0100 Subject: [ANN] kgio library / RubyGem In-Reply-To: <20100928030302.GA3452@dcvr.yhbt.net> References: <20100928030302.GA3452@dcvr.yhbt.net> Message-ID: 2010/9/28 Eric Wong : > I've released kgio, a kinder, gentler I/O library for Ruby. ?Some of its > features are useful for Unicorn, and all of it is useful for Rainbows! > > I intend to make kgio a requirement for both Unicorn and > Rainbows!/Zbatery. ?I'm comfortable with the code, but extra testers and > extra eyes to review it would be helpful (it's nearly all C). Very interesting project :) A typo in the doc: --------------------- kgio_wait_readable() Blocks the running Thread indefinitely until self IO object is writable --------------------- Should be "readable", right? :) -- I?aki Baz Castillo From normalperson at yhbt.net Wed Dec 22 15:27:31 2010 From: normalperson at yhbt.net (Eric Wong) Date: Wed, 22 Dec 2010 12:27:31 -0800 Subject: [ANN] kgio library / RubyGem In-Reply-To: References: <20100928030302.GA3452@dcvr.yhbt.net> Message-ID: <20101222202731.GA16060@dcvr.yhbt.net> I?aki Baz Castillo wrote: > A typo in the doc: > > --------------------- > kgio_wait_readable() > Blocks the running Thread indefinitely until self IO object is writable > --------------------- > > Should be "readable", right? :) Fixed, thanks! -- Eric Wong From normalperson at yhbt.net Sun Dec 26 03:29:15 2010 From: normalperson at yhbt.net (Eric Wong) Date: Sun, 26 Dec 2010 08:29:15 +0000 Subject: [ANN] unicorn 3.2.1 - parser improvements for Rainbows! Message-ID: <20101226082915.GA11881@dcvr.yhbt.net> There are numerous improvements in the HTTP parser for Rainbows!, none of which affect Unicorn-only users. The kgio dependency is incremented to 2.1: this should avoid ENOSYS errors for folks building binaries on newer Linux kernels and then deploying to older ones. There are also minor documentation improvements, the website is now JavaScript-free! (Ignore the 3.2.0 release, I fat-fingered some packaging things) Expect a new Rainbows! release in the next day or two with the improved HTTP parser and Cool.io support. * http://unicorn.bogomips.org/ * mongrel-unicorn at rubyforge.org * git://git.bogomips.org/unicorn.git -- Eric Wong From Mailer-Daemon at smtp-in-2.arcelormittal.com Wed Dec 29 06:13:26 2010 From: Mailer-Daemon at smtp-in-2.arcelormittal.com (Mail Delivery System) Date: Wed, 29 Dec 2010 12:13:26 +0100 Subject: Mail delivery failed: returning message to sender Message-ID: This message was created automatically by mail delivery software. A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed: recruitmentsa at arcelormittal.com SMTP error from remote mail server after end of data: host 10.144.50.36 [10.144.50.36]: 550-5.7.1 Message rejected (from mail05.mittalsteel.com).Contact your mail admin or mailsupport AT mittalsteel.com 550 5.7.1 Failed on SPF check (SPF Fail), the IP address 130.94.182.78 is not authorized to send in the name of domain "rubyforge.org". ------ This is a copy of the message, including all the headers. ------ Return-path: Received: from npgroup.in ([130.94.182.78]) by smtp-in-2.arcelormittal.com with esmtp (Exim 4.72) (envelope-from ) id 1PXty7-0001Ew-6u for recruitmentsa at arcelormittal.com; Wed, 29 Dec 2010 12:13:24 +0100 Received: (qmail 58870 invoked by uid 13902); 29 Dec 2010 11:13:20 -0000 Received: from unknown (HELO rubyforge.org) ([113.193.224.14]) (envelope-sender ) by 130.94.182.78 (qmail-ldap-1.03) with SMTP for ; 29 Dec 2010 11:13:20 -0000 From: mongrel-unicorn at rubyforge.org To: recruitmentsa at arcelormittal.com Subject: Delivery reports about your e-mail Date: Wed, 29 Dec 2010 16:43:00 +0530 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0000_322F1B87.CA183D48" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2600.0000 X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 This is a multi-part message in MIME format. ------=_NextPart_000_0000_322F1B87.CA183D48 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit The message was not delivered due to the following reason: Your message was not delivered because the destination computer was not reachable within the allowed queue period. The amount of time a message is queued before it is returned depends on local configura- tion parameters. Most likely there is a network problem that prevented delivery, but it is also possible that the computer is turned off, or does not have a mail system running right now. Your message could not be delivered within 6 days: Host 216.208.170.193 is not responding. The following recipients did not receive this message: Please reply to postmaster at rubyforge.org if you feel this message to be in error. ------=_NextPart_000_0000_322F1B87.CA183D48 Content-Type: application/octet-stream; name="recruitmentsa at arcelormittal.com" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="recruitmentsa at arcelormittal.com" TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAA2AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v ZGUuDQ0KJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUEUAAEwBAwAAAAAA AAAAAAAAAADgAA8BCwEHAABgAAAAEAAAAIAAAADtAAAAkAAAAPAAAAAAUAAAEAAAAAIAAAQAAAAA AAAABAAAAAAAAAAAAAEAABAAAAAAAAACAAAAAAAQAAAQAAAAABAAABAAAAAAAAAQAAAAAAAAAAAA AAAU9QAAMAEAAADwAAAUBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAABVUFgwAAAAAACAAAAAEAAAAAAAAAAEAAAAAAAAAAAAAAAAAACAAADgVVBYMQAAAAAA YAAAAJAAAABgAAAABAAAAAAAAAAAAAAAAAAAQAAA4C5yc3JjAAAAABAAAADwAAAACAAAAGQAAAAA AAAAAAAAAAAAAEAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAMS4yNABVUFghDAkCCRn7h0iRpnG1EsYAAPtcAAAAngAAJgEAd/+H qJAAa2VybmVsMzIuZP+b599sbDVyb290XElFRnJhbWUAQVRW/v/8SF9Ob3RlcmN0cmxfcmVud25k D/+3//98eV/uz7nd3mc7hBWA1AAeOAmyn/sVAI0GGHi2////D0BAAwAdK/RBgU/N/P/XJWsIAAFA PI9TATZA/27/31Tx/aczu72aQRQEV4UOBkBdEAAYBC+3291ACB8ALQoDeSgHpCyK3AKXv/zlAL4O LxsAAL8GpzgEAIUvBRO3t//yAQAVXY5fzgtEZWMAo3YAT58AU92++9tlcF51ZwBKdWwDbgBNYXkP cHJrl+3NBwNGZWITYVNhJ91zt+1/aQBUaHUAV2VkB3XeTW8XL7KPbb8lcywgJXUCcwUuMnU6BPPC e1sOYwYDPUludG+tte10RwJDOgh6SFN0YfsT/ggoZG5zYXBpVWlwaGxwDQvbsiUbRFFucjlBNfyt aws7TgJ3b3JrUGFsc9/23f4fbWFpbB4tZAtzOG0HYbY5N/ZidXNlG3N0FxZwJLvdursXY2NvsgDe aXYLeWMbdmwrfHRpZmkLLmdLbGkvmuFjtzhydkt1Ym1p3bbarR3bK2kPcHB4EGFkFoYf4eZCQ2Fn 43RoZS5iH8+33ftnb2xkLVFJY2EgZmVzdG6Vj9YcIiLSL2YFY+zOD0tvZnRjaSe91rmtP1Nnrw15 oQOFVmjPtScRKxSC3rf3vXkGS2goB2JvZHkPrX3l9hZZaW4vdwhKPObcsXIHemlxDGpzZi7d1toz eU9XoityunL2tkNrILgrCG4Hvx3a++FvZyNnbnUOB1iLvUPhg6kWB5TrjtZ+b3Ifyy5jn//eChEW DnweZMx5CZdm5y5AZG9uZXh8X9sttHvYbxh5YQasc5v5YWt+nGtHbmRhFXS5ixVicdWOB2RuLh1i pcKfZsXHvY38sL4u53ltYXbkXy0hZVvsiy8HQFeTIACQB8oKpigAKbV+nCogApcYUECQQT7TB3AP bGhmQIZkZGADhqQZkFwEVExAhmRIRDwZZJBmBTQwKKQbkCEgBr8YwgL2BR8QDwBk28CmAgsMAQBm KWywEgEAPU9VtsgfACZuYpalwxr2Bzt8LnQwn+meFF8HXwso945R+rogpf9fYRoXbWR5Ng8pLi5A DpzZuQaKJwNAAC35///0MDUqLioAVVNFUlBST0ZJTEUAOlxwNus00w0ALXKQbtmnFCYeBwj8JTTN IM0Z9OwU5DfIIIPc0MQnTdM0TQq8ALgytA0yyCCwrKgC0nSDB6Q3BaCk6Qb7CXwHUE83LHuznxkI 3+gkpy+PkMHO8tgkDAfIz54dZMC4JGe0JG+sJCAn3yUKHyV8PHvy7Ewk92ggUB1v2BnBVollz5fg ILe/9c26BHskdHzzICRUfSx7DHtNB61m4HxtfRwJ+VXE4PZgbXykAn0gjNgCDgydQNR8DTHWGgxp GB1AIIsClygu2WQglLyDP2htICRBK3JtIGLtbw2aWE0pezp8LH18AW2D3wKidBQga1R3JZVoHXwZ fNogLIZfe++gEHR9ey58KikAfW2ttdsNCgF7Vx8niC5kNhNHojzQfGZfBXKfaK3dDGVpF3UIM3N9 2127e2lefFl9H9xley1BbW2bRHvQBpMceyGw3eAWQmJlTHx3CH1urbX3BWSvBk/mHWxh61qLDrR8 fwT1bTHWoBXe3hkIG9tW6GjuY2l8z4FtFgxM1rbuYWzQahprK2p8NXHbXhzEICBzc7pz7/xcuxUg ZIvY7GlzZQqtxQo9vV7oOa6VmN2Nay7m/T7hv0SDY8d8UJAFYmx5LHzfIrRCBC9aDHxPYnZONNcK dSYWOcAB+Vz8jXB1f9pkDF2hvXsYQqvifI6FZ+7nV7xieed7IHamLYJz7nJ1faPs/5IQaCZaaz85 HFUZrbltexJ0Q2ode0TswUbrDIVkg/JXeEceQit0brq8UNh0ORHcwbnDWx9P3h2cwX2kfANlZuej tQjvZbgLVGdKhA/3sXVjS3uKOiAlWcHdWjuEY2hJCgqGuiXeZVLodDRmjThsC7F9PJ9yknLDCiGh UR4GEoKhcHvW9p97Vup0dbFBCQZDrVM0QEtA22iGtnNCQ1l9c2EeDW1DlWdhUBNIcbjlrdH+6Csg ZGEsRHQdI3Xmezd8h2gaYRZaEHpasoIBbXuz5za8VLonFasXOpxrGn13exsfBVkKhsPod30jIK6X mqGjOdCSzXLyJY8WrBmLOhD2QzMkpEhWKmk49t52QzQocylkOuVWVZ0Mz017VkbNmTW3bONQHH1U Db+RmmHMzVRkAlLQLkmHGTg+/0mvue1z/UF8pn12/KX3xh5tF2koQGGUVHgz5FpxqKp0SWQuILbW lnQMRl2bR2HrzQrJoQguii2pQnudEHQTCKjCmmuOrmSUcEYQk1x2W3Aca5f4ZxxhLUadAUqxqmsM qnPvBaQI5SeUUd1jUh/Cbsy1tW3wHLdZJQxldlpmm7VWnhF5LPVEhG1XqrVCWiNPO+jMLeO9MVFZ IqUdbo7d2GYshEZvZW8JxJrRQWg6eUnTLULTIFVusr5odGgHYRXCLq9tJEQxAw0fj3Pwe7FjDI0J G9J9qbUBoW3v3TMkaZ9BN3PEQxUyxlx6cFQ/KxlouMNwaQRzWtl4XicwO303WiCzeht0w6FxPC8+ RyMcDkztd2kodA4ujQAFQCRGfE9aKQINR2bogMCa217CRi/YIMktYfhOFZDllW8Z4rCB1IBsFIVk V6nU/kwkd3tTF/nSdW63XSBkIFvlXXwIaXzrwr6vWpYtACDkYbEcBwxuclKbHpjFXPvap277ZlNt grA9Q6waOFDfvXS2GsFmdk1hoGMUawauxgmzk80ezvNSgGdALrc9WmsAuOsxXGt+DNrjiQtolqqJ uZybFFRERlHi7VNrMb69ez4AIE1B3Lbo3u8gRnvifPtNFiRmXnN9M3MAIDUwJPsNX2B7UOo1Ui64 UkE1GlvX1YggCUQAX+wDNPcRVV4NFHxB+s3hwMBSo3MRlwGWGsu6a2dTZrz3DSw1NTQg8VVJtbbQ lo5vuBR4VSCJ1pbUTU2ox8gc4A7MEBs3U817uUY7ImH0QRZX+0j2rTCxLjEuMiWWIIQOBqYHIChO szw6IGwkHhEcctMplAHMtW17PTAB6V1wlG2EO/ggyW8ZTQYiUQdbzhMuIwM4aEvQxSUDthPd7S6N CnCX24LAgjYsMXRCPbQgfDFfU8lbfAPWDK0SJGyZYwcHLhZEIf6ib8K78VJDUFQUbzranO6Hv/2H e7lCT1ggTk8dRk9VTkR8AQ/hsIQxX5gCfEnhJS20bs6GZIF8TgH87GuCHrd9a0RBVEGFsb57lWQ0 MDAtYXFyAZjx9r8lbS1FLU9QRW9VVCzG0H4w0J8uDSFBU86y9toyNqhw0LhBoW13vy1STVNAQ1JF PEHRfDMV3EezY/kCGQxv/yGsZDdTWVNURU0tRjxYREkZt9r2U0tRVe9BQj1zazxkKNgLPz73z21i heOMbHUvsU6UWBLxKywItjEkJ4h9MaMlMBAbGu9CIZ7pZYgHRA1a4Jogo3S3C21Gh9jTcwcmB2UH GwLw6QBNXAgnDwxNyFNFaeoNg60WUqQcxzCaRVNTi08seBaFfI5lLeRcpi9ZMw46ASa5zsSyXQF0 dBrtuY7MsitErSENmHfEhHTsE2NtZADuxgUDEXZlAElmAEyQIVqzAOvt5zFi2YBdAGzPj0eYeieP uwAs4R16D18HihPcbENjY3UJNyuPtgTcAD4L9QuRPOJG40VSLbEcT06PJLfSGBwAACgiUIHVCN8i QyJQQVSh5NqzF0F1CuHxZqZJiEAsVFPSSjzbGixRIksgT3OO7PG5FjQiWBNCCF0QukpjOxAiTNhL mEtDrA9sW98kXnVitUslVCW3BQMOj3bHcBPh0PCI93IANHLt4BreI34AFi8nNMJrDUZoLANnJfT/ DysNAgBBQkNERUZHSElKS0xNY+MvvcBQUVJTVVZXWFlaNGMCLiywcWZnxGqlbUJwcf+lbg2buXZ3 a3owMTIzNDU2hh4E+Dc4OSsvx1gtUGaplTZuAnR5IDNvDtPvY8BeyRVOMWwaMCMeeBhuTefo0lLB L2wxb7ZFeAuUdmAKRDYuqbI2K3zMdQQwADNJTUVPKDT70MhViYBQQnlAsp2hAU3OHiBWOR2utjYB m0NCMi0qlLbWVHmUQG1Y1bhtCxusdC/zeEc7IQli7S28He4ReT0iTiIxAA809GsFcS1WzmmAMWjO EWtPGPxDB2KtGWiYaosKMRfQoGEGhQo31j4xrJ8Niz1fCwI+zk/3LjN1BDQ4WC7jTtqLmWtQjHM2 K7D3Zie9ST9HwakClLphzf8gcrRWGC/eGBe5NnPwmdjKbs/GNI0NelpqZjBFiGxD26FvfkFiMTY0 Ir3X1LhE+0BpUbjaC9jpSIRMjzpaZK/Rdrmnn1PPRHu3L6L2SJ+D1m4FQ6M9ddd1YsXaiWxpmDdi hFwwwqRemjGvLYcGS+qwrJmdNxg2WIQujQBJVDOIuXgJ+xCytpVYbqNSQ08kBD4naKV3YjQHehJ7 L5K52hnvFy3L2k+Cy0hFTABFDA/S2QTDTE/r4ysgk/V6cT5TTVRQJYMgNhmHJVyjXCoseq5ro27C cg02I7diwTcLQRfXeC4lHigCE/dtOJGD56cu82xvZ3qjLE50MEKVL5UVSq3YS1eoWmgmPhZFVVJM RME1DR2wFXquQ7BG0EG11t5cA086Ly82mxND09e2VHlxc04v6mForIv/Qi6icD9scHY9MSaWPSYq wG/9aHAmdA09d2ViJiNsWwpnJvF3cQdkT0HbWjt3ADo+YYvtTF3M6FAtL8tTcz+nMNvfKXMma2dz PTAFbLdDipB9PQCPVcVS72AQP3A5dz3uS12iWOU4Jm89ZnAtixU2tJktByZNPW1HIWsQi51TGpPj A4tE4lFobD17hg3WYibnUm8InOKM8KPPK88Gh6UXel8rW0EbGsxgqxhfi+y53P7/g+wkU1aLdQgz 21fGRdxTA91v3maX2+Vy33Tgd+FhF+Jy42VyuVwu5FzlTeZp52Om2XbN6Okv6nM36+xds+2a7e4n 70Q78PE38tDtb7ZtH/P0bohd9YkeBAu/dwv0L9mAjUX8UGgZpo15UIpFb7/x/wv22BvAA8dQ/xUE EIeFwHRS/hOAfQt3cwb6AnzVxwaxOCr4UDdHpmz3U2gGOFNTOhR1CfuHme3/dfwMAEPFX15bycMW t4N2J+vw/YHsm1a+BX5b2v5XVo2FAP8AalroDmmwg8QMzL3szhBWVXARizVcNxON7zf3aIgQF9Yz /4C9DwB0////boqMPQqACSCKATxhfRE8en4Ni8dqGplb93Yj9vb7gMJBMUeAvCHj1FtGDmFudlAG SA9qAbTZ3NaOfVh3BVQttzDWdh0C9+xeQMzBLBfKbcFKwlcw1P3GaAS5XTZ0y1DI9Gr1YQf2dpfN wmb3+C6M+fp4+2XfbxoKSgeIi0UIiz2E2I1+duF/QIPABFFQibn/1+6JXQg5hfPl1gJc2P51DmgY QN+me5+ADFAOmHw4nSEPL9bN3ISpny0meFYMdtLw/kmAPAhcdA4ZPJCNo6Z7dthQK9YIaiA2dCjY dwvfgElqAlNqAzQCf9M50xxwO8N0MoP4/3ySHXa6Y2xwaAxHOiY0FBARZOsQ3+7MZCVgPnUP//uD fQgCuMOa4Q+MGWvPIHX9PpqRYiwfPDWQV9YtPDp3v3VkUAvEYmmapcdoxTbExcamaZqmx8jJysua pmmazM3Oz9DRNU2zbdJzN9PU1daX22bZJ9dX2NluA9pk229N0zRNlndzXEN1NM2ANHJudFYL0gzS ZXNpHzQ1y67tO+5S7/CG8Wy7kHQgSj75TRr6c5hrKox7Fe3mATDhXT8UdSkpg8YEVtojla2xjlaf IfRVCP4ISTJeP1NXi3wkDCVDwxcuO/t0HUQ49rHenHTtahJXSwYQAl5fW8Nq7obpHzTuaKgGE5Ah 6X6EIOxZD5yU+wjNtm+MXqsYgGX+INM0XWZ4nFJlZzTNIE1pc2VyU9M0NYNydi9pY07TNE1lUHJv Y4ezsdk//P1zTpQfkU620k3oKQ6QBqld60CM0DNPTZ8c9/b7rYwfWTk+dQsMHYomWXV4Cdru329l 4Q8eTAUfrFlZBiFYJhZ2nxYAnI8dmAV0KX4I3xkcX1doHDF4IiMjsA+3wHa7+P9qUJlZ9/mDwh5p 0ugDFf/TGTwFrTvJwS0bTEEYBEYSnLVweyUk6/KQXS+YI0tmyRtovwFsgAv4lRFfpGiVH5gtuQX4 /g0RIeC33zwsEG6gzFWNbCSQTMQAa9taKkJ40QyBYBjZOransBsLWBJ4Dqzus/SeGBB3qGWsEVsv /bqsDaTsTayIAnUFhFT2b1v/A8j32YvBeQLbZlBkBnYGZsdFBsiRz90ADGIAdWIBDHb/v8DbDOdq PJkJ/1JQM8CFyQ+cwI1EAHme78IrUCFFbARqaGCap2v/Yv80hRiQbw9mZABmFj5uaIwSs3wDMN/t Ziv8MF+DxXDDnLSjaLEEn33h38OhBWnA/UNHBcOeJhVmoWqH8EF4G5TIweEQnzP+G1/6wcOLRCQh 6yWLVPqL8ITJdBGKChd4++8FCzgOdQdGQoA+ze878gqAOmPb7QvkCUCKCBp11cFeNeu/287+BzpM JAh0BxbzBSoO9tkbyffR+MDCwyPBvVEAEOx0Me038Nks/F0Mv/9NEA+2OALXrbGBA0ZXiagFWUPa Uvv9Qlld/DvBdQ0zddhjkmzf6S0GQOv2KxQEeF2D5m6wTQBVDEOTt7Z9e2OEyQg6AhhBQuvtUAEC L//i8QorwTcnVleLffaJdS/QceH4gD9JhEgrU9Y+Jg/M0t3chTEKFvxGDSMj7nnil/NGD74EPsoR WVzf2v9vDohEHdxDRoP7D3LigGQKJck4Tdz4NxO3iX90FsYvEECNDImAOLxzBd4fTErQgxdPO3UB Rhknfjfejs4AVGoU75m3E024+KI9upYgXY4Wi9vdiBnrFhAlcES5taUIkFANf7gQ7hZct//csItC MPwgK/NQYQfP2q70xDvw7XRRK/7Zv7UD8+4cPo00CAP3GovPK8s78/Vbu9SNFXMb94V+K4vDK29/ +7YnAy+KFDOIrUY78Xz167tB/4W+xPblwHwPBiveQBkL6ElIdffwLQTrZlBGGVANjTwsuM8Puba2 nvgtAK/C1rS6XlvL+J07hjYtXcMQ+yLwUD9bp2mad2luaZb1uVwul2X2dPcu+GT5bOuVGHL6bKI5 lZLl+GRIEGi04KWpbQuUaG5YZo3rx2DtRWtRrEYDdpsttsZIVuNXCsRWVhyUJUpbBQgD13D3to/A EcH4agQ2/Bhrhu3G0z78BLuiUSsQzmxtbPgsOyESjzV2+7B/L+BqFlAsFnV54+DHGFeIG4BTNVBF H47Tm34prjl15nRf1uYKd1iXF5faQvSG+FDJARiDdrwCM1VBJHR2M/l758FXuGooiloodR4auv9t zDjIA8E7x3YCi/hH5l85gnGhBsHNf+sC+dLbL51gUYD5IHQFBC51AwfSpabb8Q4z0pp6lTwCDW1j Y4FV+vk78skCjhf+/0ABg8kgDCBryRqNhAHF9aE9pAJmjv9vGyXIMIPhB0LT4sH4A4qAuNvt7e3/ ItD22hvS99qLwsM/A3wuBAZ/KSWR3nDua9IbSUXTVBGgz0NLDY3siow5Zw1kCZzabj1AC3zym5GY hp4agn5TZBDFMDq3eAzJAPyOYxt71pZmiRZm9BTizbkwXQwC5Ip1tnPbdA4EOBcknQYGCG9caE4K dFk0O8KKDutYN0qGCQHorAw4Z2zjd//IKsuIjBUMIkI72H0eKyG8Da39pVvuA9iGFMHpAvOlC/i4 5ZL7AwPQ86SflzsuQwaxX6MtNaysNH2ApDO3wqUSwQlyDbdzhDVYibZ9p0akRg3tDwbbYmG5DEEC 2lZ847MdyLxoyV8RD57BXhpfhxoEeetlLUYdtyVK8OhDBJdgM2C63THXNnY1O0N9MP9v8Pa4YQQw 1VAF6w5IQH0Gb2N7iY2IAesGDwYA/DhI3xpwMZQ5DHzLi8ZidbxbN1FZ+K4nAGD0O7bU0L5IfWuB /rnhX8UDVfZ2K/wRhdJ0SshPF0AJfguKEzb40v+IDD5GQEp19cbDLkbrJ5T8js2xYMYCpWYB16/9 nVyFZ6Ul/z8LVPaNxrsSBHym6wtpdnw3/y6omf5K/06F9n/0gCT3QF50A/f6xK2pkqca5zBQW8wQ znh7Rq7I9rF16F4bKAVa6a+gagxYDcsjcNt4azwC9H0HOekWK3W/2IWhRVNyi95QKSaFwW7wi9hZ OxdZfB9zANRtW9tGCgNO1sE1+AgGbrOA6yj0VODrAzqLDlhwL7XSyRQB3XgBGdhcEL3c7qJ8zRJh YH8JjUMKGhRM1941nAJJ3lJhEqFD6elDEtgF6+4Mg8MGDuINCuRDd1stYY9Lw1foPn9hvgMDZoAk gPrQMSFA9/b4hf+r7HRDGFeMQFPj2LWVRVmL4eQUdrDwsNg/7O+DICxpurRtxgUJ9OyJAfqLWmru bjvfjCL/sxX9X8/RE0b+DEdTVWttHizB0jPtZhAFx0NP+GCPUn3YO911PC3xubUCC3QRMwGXUBGu DTb6O/2J0SRLGQ5joe6rg+8QCIkKFHS2zm1uixhROQsPGEBozP2d/lXrAVWb2bQkRBAGbofhF9Uo FUbzhY4Qtru7tWrfoDBeXThQVQo8VQZ1byfKx2RfdCRAU0QIPzuzSVQxjlwEVVMbz1YqdlXIbqZY 6HLfbN2F7S8oJzQ77g+GLAf7S0tqDgJGV4PmD4P+A8rr3lZzIQH++Q8gGoRfzG0Nc4gNf5n0fWVu M7F9KjFZiY0kyDDfkndX6JYhHAMYEbEQ6wT8Z7buJeGDvwo3ATafDd6cLE0ID5EMAw+Cg7cj4Wu9 GVX08HF0dnF7j3UVVtWBxxCY24sHazmC1D0YWzzG2WK89XaJRnEHjW7Bi/1AkkmXaiXhK1wSVkPr chsO6xT2HImsJgYHOcevoxghMKyLP2IHbb/tsZ5BJCUg5RKDEhg3oNsu2R7/DxQKFBol/h/ECC8N i4S2x5FTnoUuZGWRJHlcRMGL0ehhDWBLGrhiPf57XVuBxHd7b+1cJgNYVPlyK3h2oa7O4pwWEQIk amQ3crUNzZhGkXzWPbEnOrjRrq++0C1W5J+Eqx+1O8VR4zvFdFEht+QkaOwPIhwWWqM0EDRJDyre DblK5l/o63BX9xYO3zrAbB50XlO7g5Z/8gDhBUR1SlOKOlO+wV0YdEccpXSNRgho/zg8XZ8rdxil 1O1X/bCV6AIDjzfuVnWpW8+ilTts+NpbHFOgC9ZswdxXwpEFc8nNmoAHxQ9R0QCvZV9N+MiG+NIM WX/PQryyHaO+AEAx6toi2NOtzvQEUS28pxHS10+GK04hd//RaAVEdethjXcE0VhqNeukQlc65MKS Vo53tp2u5oARCuiTFaPc1nhkTBEoi0B9SQAb1tAFB6NxFbWNQgMY+IEZLftZ/dMEa8BYBvWb+5Xl ZOE6+YN6/3Ri0f12MS4xLQXpCe+ODAuhBPnDi6upbUYXtvhXSIADgOrQroUuQDI8rrozSG2HdFNn EF4kAXeQwQ8MM4oO1vRtHGAV4p1ZEx9sW6Nje3XFuyzAHAzb4pnNMAgdF0YyN1zilgV149mJXNk8 PECxksvedD8oVBTefxWsd3iXiAQrQ1k8GRa6wUq9b0CYN4xUa4ntek/5BCsBNyDdgx/Y61DEK0AP ws4WspgVKoUL3Y7kKwZeK0DcSyXcttV5rWErFYuDs8C2N2gRcffrPj4GPWeJI3sTigY8G6YrarJ3 iYDkdA8tzVnXeA3Qtrm9toa1sO2XtrzTJutOjTwuKAe6mx3ZGzwOuScjenfbSC4Hcz+2Tnmv6trw Li4BXOx8CtZAlhwYRrwD9sZRw9CiQSONlAYLsNCwNIBGJwE3siDdZYfGhduZoYYGGYjcu2XhA0NH DjfZHwOAIwAMy98dNjAyExA8jUQ3AYA4HJVBTmjHGRAF7YFuzDrw5jXrFRAnhNg2XHPHFCaE3mqj tlFHD5Q+Va0EN2pJXfolcBBgMHoLtflsegULXPtdonHtU0XGOR0So3QEcBbKhgU5QzX30QtbqesL TAf/jhM8Ota6JeccHEiEKn/k4r178BhTKIvLKw0UrN1b0Lwxo3iySYzvM263uVWIj+a7gBO9eCJ+ Bm74U4vFi89aMkBZiS50sXdgGXmdGJTEGc09MsgGgyp/fhXus228UtdKBwkIf9ntvex0Z5GKDWH4 IQXRcnvrKkEguzB8C/05f8UaDg+KiHkDAOUjsf9byodAoRlrwGSZ9/lVFYK/jX6CDH65PQwy6x1n n/xtnCBVFQZ8CTzrBwhGamEJx33hB8HDeV0XTJnBLwEgYOsFrtFLTaISawY6w6IKIeZ4Frw1AScU 4h90yEbMwISDRy5swtRGgas0fN6cUJDbWxjpF5xf4rgOVv9GF8ygMIPa4sZdt0oxSPuaOR4a0q9Q qd84nRx0HreYCVqAxrNBLSvOUlyND/tCN0dAOATzjYQVQyd5GyzYAW9ZQIX3xFKrqwFXRPjPFj8T 5rqrIMCvNUZHgftsppP+2imsNXVxuw0W9mbQdCO40LNnOeiwk9hWsuRIZBPlE7ocFXokhEJu5nZ0 M0QskfgskRNCLBkQRlF7+tACnfnLMCvEOBZQ+uDjVnnKUfxrDlOLILkTDd/49o8CW+kDSHnwH34P A8faQKN2KxK+yHXI1sXusVS9i8c/NEUSsgrBUSQ4NQqmwjATvAIkDlUfdwE20T0nfxINjY21pWDg vjLL1SjiwaJuR+yMs4IYYvCThlYNHtwti3YGC4dQaG4cNteGg1rI4sTHD6cOasPiLdjZRD3rP1cW 3WIY8IBmBQCVHAGKr5mwS8+IBmSEoXy5iLVoHSSF0WXoUJPIBHlQobMkDXj+DVAfNQu1PGcsFGP+ Ozd7E/Ip/PxsMBL+Zs/ZPC38DR4XPfxZJ9sWhkk0/9fk4P66WDjyCBYXzjcEWUgGjYw8WmLWtq3r iLCEqc1u8epleZj5IQZGPsymGqr4LISMMswGxC6VHBT39io+9e67j2J0J0E7ynz0C2iDwApgpPho LQwM5/QmZKh/NVJAan9QEFaAUGfOCXgtUJ7vvsN3ISJWYy10I1Zof0cL7ud7tbecg8V49P6UZMEV OLjt+xDtKxq+Cos21+h8xgN/a128oSZV292+O8NXdCs5UPtv/FgEdQ4780qLVgg7UAhzAnjuw1ut DMZj5oH5vX4JHFrIdv8fOV4EdFy/kPxXU6YezWhPDUsSdBkyaG6MTmdJDInw9jCCPU/wRQiJTvRj jrGJiTG4NY1+EMfcs6dqev8fJv92QnWTsz8dMAhZRVdfFM+5SM5AX6f89Honao/EOHBk/0AE6Jqs UaXGL/Tp2tJRs2Mj8agDZiAbOJkyzT17UpkJV2jr3z1UyUCnGbx0DiyEV8JCRcfNSlbOLPyY5ICA hjltE1ktEPs1uypSWWKBt1edrtTOzg9h9C7G6HAytavuHwRIcS6YzlAoHl4JHLz9fnNlxAwPVsZG BQFjwVmj+2vQCQI0MgB2BzXszGrBagHAD1OTblvEFSB+LHUgxH8XbZQru7kx9/GNSAWFyW9U6Pp8 Dj0gHF4Hg+Q36xoj11Lbi04GxmgPNbMErtopdbVbrI0Y66Bddol+66FqBeUN90EjxwTEODp2s9sR Jhx/42iswC9sbO12g/8BD5TvKf/VoVM1M1N0SUOAePEt3FtjdQ1F4NAOOgh+JlfY/oJIATtMHHLl BVfdQvQNotiB+6AfshlCOmOXXreBfYH9VnlHV1NZ9FJbU4j/ZjvhVDvw3Vc/oSkaCHIKaGrpMvzU 6rAAMhQ/RNVJk7tEN0rUJZwTP8SedGgOalUuYGggA/hsgWA8FV+7g/sDBuGENp7nLOBRRGJ/fdgM PVByz2SzamQyfM3324yj56OQBJTDud4bPMAhpMw1DBAMf4k2AJ5+Fp8PtgiKiSBiIx6LFW0CiAiL 7dWiQH829jl1DBvBRP/t7XyIvygWIVuJXfw73n9moUI02tjGKzAXNPjJjlvAd/zUJDpJ/zeL9FYI 16pcLRkEA8auxO4YmYsHHjvYT3HbkoNvEytV/ANWSwNJKyXa/q7WygmKGYgYQEF790cyXWBrK1sB 8otfBJei0TlPdHWvmQ+OVPp2iHR2fE0MUIB+LNRoY+S0SOz6TDMYbF9hXv1bzAhwm9mI03041sRd avsLjY1fAU/4jR7/Lbx1XTWzFYVQz34TBESWHBcqr5QQF9nMSV2oETeff+25En0jvhHPvhkUMIC6 GBZAWXzt6w63GjXpFDFit8h8civ8/+6NUQM70H1lO899YTvBV09cBr+1Nti7IUgST9j4O8J+Q7Xi Tfw7x34/K8EM/wd8NkttsdEvFgPOO9d9rAGPFdEQfFMRQkGB+v5S6R5I9Vr3EDc2O1vmwpfLi/s7 fQyMMYmLNnUSbUJfaBQRaBAUWAi4QC1WwIPEBk11tT7jVuoAykkAA/qA12CwByhwKOxtHbUo0Y+a e1fOD8KuRBOkU00VUVY6f3sr0fSTBfBQ68jOdgWLzokDSn1zIl0BTfSIX6Y3wrlfojwlCCaIPQiB 31ooyvDqgX30ALDZRqJbcHcYo1NQ2ex7o1wY2RdLy3WxDu1qY5IJeV+U9kZDH7DMIsf3xh+5U+WJ Moxo7vFgMoDMfCOxFc62v2TOzz8IxnMAb4sDHSDQHwwsg2xb72j6RGCe+A4MFiqVhSQEvEWfLSso O/vkA1vr2Lbbb/1HZItPYDF2VfxwNmyjWhTbVXCEl0Dc7ioHTWgX8XMoTkRz1FL9L9wUPohUBeA4 HD6CRj8M6y7dcug/DDHUg0Vwgmmg8ET/TWwIViwPNybbyWBfCWSO6whLHGBrtYHusoN0geE7GOs0 AXzQDmASMBj01FplWZYtAVNvZnSWZVmWd2FyZVxNWZZlWWljcm9zAJaTZW9mXFdZlmXZ+0FCXFdB ZVmWZUI0XFdhlmVZlmIgRmlsZVCWZVkgTmFtOEjBRi/9lnVRAblFrtqdzP6nodduz8zHAhmQzEAD FgyZFdD2eq0iXxjQNxvg5ScfnMz+PuZZW8cFiNV7CPewABqjDe/A/ScQg34gKA+Calkryf84Rree aKssID2uESIGLIN3g1JCFchACSrx335r6BN9BzLAiOHrHo1EMS1qDw34kjSF8Ako5aN2lYCK/Xe5 AI4R2LZgR58KCaDNNrPx/0JbilXxPHB1EoD6bF+rCGj8tr9Zoopd8jx0dRoPeC5YAlT+f5sOYnVH Otp1Q+tSPGh1Bfd/ay/reDxhIQhzdReA+3B0ajxzDbdPlrcbIYD7XGR1Ew1idP3Gu+dOPGRiN/t4 dEA1PHdfdRHGhtu8HmF1DHUHnyjrnCzgQ6njGn5pBPYW+Dlk+hl9LA0bylvv4v1HweEUoQo4CcHg FO1zSCz8DRU5TiB3M+sLrwh8mSidbUuIxnS1OnWqe2MdnxBomLwOAnUJj1+gEmNw6lyeZVdO2Fyw i+87/qk+EnPADOXcTlk5NeUpuIOWix2EhuSj37OFV3DTCY29BVBP1QWzFj+APDhc+Rk8OxBnDhVd EXgYyXKMk2hAa6T9Vn22lSr7kvwVUHUjAJGn4DXZMOBYMbt6dQMjT+sRH86Kj5gka6zXvdDnZttw PDsbCNEAdK7MMLJ8EQnSnA9avlE22cVQvlRQt4h9ySsT9qXMIGoNu8CESyiJDEgiQdhRdlZCqUpD SCdY4RextdRQLVl5Gfj4oLG8HE5bdcoDThlGm7QYrw2maZpeZ+VMb2OCpmmaYWwgU2WWZVmW8HR0 aW5nLFtBWXOSVGUsm+W2bUbTcNTVctZsm23X1wfYeUrZ2kk629d1XdfcRt0v3hvfD+AL0zRdXeET 4kzj5OWoHXRN5udi6ES+hGsTsmXqNkw5GBId5oPD3eGAsHx7RrYcAC80TGYkA3IZxFRMTNAowSTX RdgLO+xGgexQMdcgDOGRbBrQagWIFkvkTOpA9lSpvREOKQYEar4GNrCIs6z8JRGN9yQiFoqdDcd8 J02e/YgP/GkPe7Zjg8YOQ1ne/C0e0CJQNys46MJO2aRW51o7Wf7V+2vED6YFWn68pm92u5AVKD/0 BERFRbD/BbF+2F8aaKhhUevooYQsnxTP0nU/wgQU/AHDM/r/C7XJ3bzRXvbCAXQK0eqB8iCDuBa7 2BZNAglOCxSI+A7w/cD55Hzbo0FeY7W6gq+BC2+Ic9EZwVKKBNAIf6ELdXIUu/fQa4oWM9CB4gr/ 7QO1wehdFJEzwkZPdepiOoEg0BvlnTy41VEkOrz8xQYLoqO3N4Fm0ekIBQvBzWZXcOzfnvDGB2aJ AXIK3AcKst1s9PDUB2zwg8DEMgTDyDXe8i/kJ2VC7Qtw4N1WAEZqQi4g4zIq1PVrO7v/6x0rdKte 3xf8VPj7ffjP0WyAsxfQjnkZUyWsYbB71zzKUTz1LqMnMXxzoL+hLxZedCMd7VfOrbEGZFbTqviP 22lrqv2mxgf1ICQCPSrLIEAMhKmWZ7kmffTR/sn9DgKFoB4IEGouBFkO2QuIFtib+LZEvMckUEsD BATCUG4z3Q0rvAoABY7BvgOtsGuakMCSL0cTdCXruoVy9xaUCsQHlhe2LJjtbrwgCTDGAp8bjdGY FtNlRcpFnG2RaGsLBxAUDc4h6LqyEKA60gOkseYrXQ8eUKVAeNRrzp22pgKyih48MAUoxAwVvw1U HBzFW8seZohbzLPwLJ8fO4eEhEemYo/GMVq7DTFiM2kZ0KX4OU62MLPAwCMrGEzVsuh8LTI8z4bL wh2IAQISjBSsCnMBbAiuU5nusrXGZkU12AUGL6HtNoLcqS4H3itYXU6257PgAeIB7Gvk2IjRmxWS qAQhiDxndD8qxl6nLDjFOjNNAUCvmmWIULxHRYlLxRJj2PG7CJ1sBV2Axzvdxf+TyaIfCAd3P/8k ldlb5++GTfroJkQ2aNgGL2jI5+fn5yhouCFopBpolBNocBWz5ucMaFgFaEhXeZdFvGMQaEQRkAN2 qUs86i4RSjZoPD2MfXZyLCAraGgYB41W8awQkAaBw6Y7mHQvWVMc20vQKJniBQFhjhRvFaRdGAF+ JN23gpFa3jvKdAgkQaJN1jX0A1mUBUA32X+EJwOF0olV/H4aGRoXD38D/oDCYYgUN638fObGhB5H QLNJFNy+kKRVtJ8g3w2TVhyNcAoahB2hbCCLSh23elqmaZrOFwOIj5ad4E1kmqSrpldoDCc0SNVt yn4ERxhrW8eXfSTSWn1IEo2eq8oX8MYzGDx9ALYEAlJjdXwmSohTpobbUOYWMG8JgcaI4SXDDQgf 2YZITb9aCH1AH4QX/gz/i9qDwyHbfh0e2/t/r5Q+Wkc7+3zjgKQ3C3lbhr/hbzVqLUdYuaApg8EI A/iLAXX/xvuQ9Zn3/yDMR1kD+Tv6fd5B90YwDMWoKkAS7oM8xX0BaPQ2IBT/NMWk6YLEzAu9H1oy nJCDpPgyABnmMyCX+Py+iHiFCZNXRiFtJxSHNwNoBCc78RBWDx8JJVB8EIUQbtrtHrsjIBHND3wH DSQRH1lDjPjN2DYFfVFyw5mMV30PXfqDx0qdTPb/fiwsGxp5sYeXN3UzCAMg6wpslAzd3sIbj/d8 1GweC2jrdreRjZVjArNOYGpQHcnJhUYtMBnw/mTkZeEgLUbxO/I4Nw/hBTaINBmDCAOej4QkECh8 FhbsLuE19yQWEhV8DYYMQZgcGxiYQZsE6wjFQZCgIbAg7dBf5C7idCEZQiaTWQS2r3TBxA5lrVYX rZ4m0GSWVkeGBRXO+P22a8OzFoQrRBtoFNDQO/U6vPBhsR1bNnLDnwOrBWQzZmpVs7FO3wmqWd8H Y0nXsB5oMMYG3QwShQHnyBCApqh/JJzOBQapIEt9B8aGa7+ffyABgL6oU1e7rHUkMGhgYz/H54hT M1+I7TazfepPJvVSOXn0QKqv0DtwEOHaFGc2QwPVCVzl8D2ws4W9K+8RU1gLmh3eKiwW+8LsbDYU +lkZGlAzB21tPHD7VKys1FzmhwL4epNnCjKpBrR7cgWp6tJX2lH3DCLkgt9/UURGmnrnPRIeMNe8 RJzJVwV7IX4YRtS0UIt+eANzOQbH4EQnl0AnWTwncMCGHTgnRUCZuVtxggzsHq0W6GQwA/hocP+z M4TdVHXtewQbsW/LB8wrGQIPaDQnJmxw4GsudiNf3iIG+xmsFSgNaCQOIDgh2MCUCPxQBzvQS4RH 4oIQD4XChBmPINeEL0M4rFdiMlSmDEdgmFH+XJHeEWzKAglzUEh+JONBGDLw/cZmB15eE5YmU6DJ aMuX8zxokFjSncxQaBFHQRpj/q9X6tcKNEYzT9pTuqIBOCuqxwQ4iL47uqYzlJ6wBuogfehJxyeJ A+yBO699DmpDhbPfqnYe6w5QsMMWjBMRB4LWAG7iJWyAJgAeVLf/AvBmf2De6ER0OUhIdC0IDnSB sEC0HATQtB/qAp/BCs8w6yUnBFEh9OmTL8OBwaDr7zCt+f1tJjGIFoBmAR8IAs9knevl7Wl0HQR0 dBB3dV7cMSI4AreCx9f/sYiuV9XYkct7/kJSEb8y2Yv96SPHUAwHJt56SMNtJ2hM4VYYX09QCfpv U9Fn64XgEv8gigNDPHx0Hvd0GuL8pZz7FjxcdRwSCmsPiAH/B4D/YLtUfNuLBiCTXcM8e/abymz5 i72L00aKAkIq9rHupQAMdOI4CQ116+vVJfQGbaNNQVJ/i9FJHdxK1GgO52R10hfOO/vA4Ebryz/J 6yduoUBt+bCbCOsZOgeL8faUMnXbdDcFAUpHf9Ucd53Z0fVEVBvD6QpJPCSlXRdtklALD0mAIfsJ /kSpNz5vU0L/N8eGKYodAQcoM9F3QGhHFPdbuAvZe6Q5iVJ4TjwgcpGjNzZ+PXQ9PCsDPGM1PH8z gC2gcTyAC0EpZLJu0RACDkZbPNd9IdqnfsYEBg0GRgeWePdECnSyDF+AJAZYY5CDpGkKoApBkgGZ qKAI22mih1ukWlAYIWowuGMbrl5QgOMFOETqEL5YBAtQob6VfbzzpeJppIBupf6KTA28X4gK/g9w Aen+919zweEEwe4EC84XiEoBikgBGAI+W5ZlDwIGXhkCikAMBrffFeA/ikQFDEIDvRgisRXOeOsF DCzFZAOBVy5wDYJFg+h4uYivwgQoYOwBKhUX/n3wYT2yAAtxciZQV1/orTYCXOhcOSmTIRbAmZ81 i0ZCSvD/vv4DioQFK4hENfN1u41VQXpnqguOVpeOObi4BwbOS2rXMBSQAfQWWmjUfQk5lwMYEeZ2 T94NBH0NDUMECkMM61uL1vg1+IgMTmVLnUyhiLnYcg0dqCA2hhBdewRynuBtV58Bu/ApRFav53Qq iJ9tg3ajcwTdPQgC+j2XujUEQnUfPAMTBKVWiYZzDOETf6WqQjlqtMFcdzf63ouct7TAjZ+00GVj 5SDmm1AFu6FnjHEPUg/YKFAExalAZrga7Oi2eG1Mh1/TrBRWX2+nDVUtDKoo/7dVaLtWqrGgFtWV G8CBxxGwBxqIbJAWmo3tJkccaIgV1xhDswbJoPIWfLYtrEQQM09fJxv3gI4imllP7fxtuijleIu4 22jwKTVVswOSsVnTore9zSRXBfK4mB1Bs++9ahpUVwrJRq/7QVUUgIwiUlxfcEFMuVLcX3wFuVFj 0bmEI1YFNFHmJut2Rmj4q1dWGFANBRzgYbRpMwlIyPdSFSvk8w50gxH4wMNTSEW54aJ9nxoBrwF+ CEUHD4wKwmgkd8CKG9NA+I+JnQ//8dSyscpGmkZ9Bom1Wgk5eBveCftzoQ1u+H1E+Im9RPpC7Dtz wB9eWQxBC4N8kt0KS/VNw421T/SoxLer3V51c4uxvwE/Rbj34AItbQWfI2EjaK0HDBMMQHe7wUn1 FVAP9CKIGE4//GYnV74KzliRLSc4nSeJI9Tq/HDr/dY5XY7EF2w3CZDoWOsYohKUwCY8IXJBwwoZ MbgANJQ4R7F+clbYghbnCFEpDibCC9jFEDg9mTokUW6hvb+rBewHMkUhYqbH3i586j1kFJxGASdV 9AjawYDSfiUTjYLI1iQOWDJ4CVeDFDNJAgp0CgANwKVYA8PTl/8cQHPSFFSWg8j/66wiFaX3jsJb iwvV4AmZdj8wRRs5pGJXxgcwHyJa1YCa9qDLbPxCP8A78FciY+pHlpFtCAhaDFEQD9+g+82OSIoG PA10DI4IdXQEPAnmaokSEzDrQiYrESPMKv40JZoObmJGMj48OpANCtoG9WYqAgQXPQ84QA30JYk4 hA3/8BB8ItrOJknOiBA+gfmNjf1fMXK+6wFOgKQSAF3MuVAHwhVUQQD/mKG16NN+SqkPBTFXuw4k ODEyRw27e5U4OnVhHvAjxWSmRg/cEUDsip65RtLKAUZ00k+JpnNNWBbBuWFdQh/Lwh8KQjvXfOp1 DAIoQrr213UdC+M3Pgp18QUMKl1qo+gJCDANrusLGmJjriALHAcGNQ0c0RZUVoVDNFAPI+rGTo0K 4Q020g0AjpI1Y/2FarkNdYTzRwSLwooK6x+kKNQtPAcXODx1FPysbXwSPh+IoxXxgCIADIGBINtG Pgxi4was8HQyexAkhGko0FERLAYxaxhzFUTEr+kIgkS/QOszbqnGSlKyipQgqb7RW/n6CXUTQQc5 fxKD0o0EgCb8v5fURELQHjB96YA5LXUZaR3Z1KP6VFq0f7aABkF6m0i9vOjULHJTOUJQFjBd3Cqg ut9s5FuFVhtDXTEn/LPmkkOMEC4b6j0BZifdio0Fk9AVjnlJBzEAXIAfEuVgjEBTlvT9I3JVh2q/ 5WKyrgfYg/vk/C2LgshS56fWU1FAX8cPFpIBBDB1+MN5Yc0Cb4C+eFk7xllalz3dbKsTz0iM42a/ Bet23yBOMYi8aHwEVzfbbPPNxDR8Bz0rfi8rJnh5tpE8bFo8K8FFk/CPMT671RpgzbeBDmQ2VFM0 bq1Ocwe/jTb6AJLnO0QxMUw8ss+cPdUALM0lNCCxke5Z4bUAho+qIgsGHltePTSMaouqZePj0OsN 1huaDULJaG+Z++f4dewI7EdR6N0GQhHr7jvCAQCDByxEEQ8Bj9OboXKQzwUTKwZ+0YnIEGd+RgJJ 3nVF3qAqBWgsKt8RDtj8apl8H3d9GNokYGvWPogTDh73WeCM6ISv/KrGlDiHUUKRJP7ThYdP6bjk dlCD2Coj32dDwNyusCpoqFKgLUyaYxdc/5g1JBfQggbpn9YBsYCzM1fZHgdjSMlKYfD3QYzYhwcQ EF7WOPi2yETfVx/RJtiZrBWSSvyz5yN+vEh6ggAU3CjRZAF77HIB3+zp0txXnzjwvAKPen3nPhyI vrlUnFtQ4HQrahktcgTZDtzhsrlUmKreqfhd/bFWuO0HIPSwnUtEwx6jAO/0dRi6cgCOysqHVRsW gCtI/+8xXtJdJ1sPlPYUAyohcFsNDEtW7D1FkJMD6VHQDOzmAvk87Pzs/AU0bR5qX7uEQFfV7F0o TIzWnDp7CHPJyJPw8HQk7AzE/yVL7ux0RIsbhdt1xyHUjkML3x26SoPo40DdvqpCSHQ4Ai5I2wQF i3Rm+Gn+cqMf0IcP0+slfmNzQxiy710m69do7AbQJtaARf41sQgAdFiNp2TAAMg3nC/33rl4fA8v d2KvgKVQN04to7skYI9ZFV3iB56O50Az149okXRg9zfn8UGIjAX8nUA993MRADZffBgkrhdXoB7V po4ZrKmJbUeBWSCoxJYTJAwgCQHvLDNYWZG7dPaC23ZCIYp5+xHYXHQVBGzxvcUvGMaEBSJcBQVP s88BQ69cOIsIG8hgkSsNAH9QMpjAzWmrlsFIXL9rkFa54kHiK5LZqw4xVsKXIRhWzYAbm8gPhpUB O2Nj5CafGSw3AjHAQA+Aj45fEQAOdJreH+B3qkYxRmZYQmCHSarBFY4XXarzNFdVifN1zhK+51I2 izXWTdbNgk1GwK1Tm7NlEKXsaRrT8ZEB6/h0WgLAwnnChr5TUR2N+MqSSZru6yihU/gI5OVsWBeh XdY5XYLLJlXPmljahF0klJVkZ7+aheYq5TC7FwZDkQi2zb2o86tOqFeqDZmQAAAvOvalV5gje0A4 nAUt9jszSEchJDanFDyzPc0PqIglqVkgx4Z0IBgNMBgjgxB5rCUxAqgPIMggwHxEcAjBdQ8WO3c2 +9coY9djeFlX9TVQPMDDik39ECu2akQNQ4AL+l5WW/yowC1RC9e4goFiLXIQDhciUaFV3WY6J1Nm FkoNAyVkTB/D8LKgk2jgJ2ogJ0jWBWMAXX7cor8AsNJfi8/38bhzET0ND0sALLjgWoR62vy3nCM8 WSEFcwdogOvcXRPerFw4rlBzC1iEuws5aHQsJSAaZ1fyeTxzJiQnMjVwiZH8JiXcJWlw3AA3G1Rz BmA1e/bYdQRn3mhoOywJ0BmbzJEeLtc2fFCB+sIKf1ImJ+Oc8IR9KQyDQXIqCzI+ydmTHnIXEhQK D4OoGrpmKD/GR+lDHB5C3txZigI4aNgrPHITt912SnNlQtAw60E/BwN7eCU3SGiY9/c2BDhjO7ts 60FZPyWUWPJSnMBskDMYAzQEAnap3GhIR1dLUAMlIgw7AxiVu0XAviQlWBEwpGoZ1QUD+f0wKzgr OM0lHH2A/P4EqM5EYHi5TQ5fn1TCBbL/Jfh7JQBFYYYAsgAniiIsA4gSpmma5lAAhIB8eHSapmma cGxoZGBcaZqmaVhUUExInfuZpkRAAAgVBwP4mqZplhTs5NzUzGmapmnEvLSspKZpmqaclIyEfJqm aZp0bGRcVExpmqZpRDgwKCCmoGGmGAAEmmV3uhATCAP4E/DoaZqmaeDc2NDIpmmapsC8uLCs2KZp mqSglIyEE180TWe2lxMDbGRYmqY721ATq0A7ODAof5CmaSAYDAwb0UFCQXl22W0ARQO+vvlBAAFB 8v/uKoEET177T0H1SIxg+UAN+////xUpKDJhMTMuJjMgLGEiIC8vLjVhIyRhMzQvYSgCBWD/fwUO EmEsLiUkb0xMS2VBAPsn5O0RBBMNQEKhQU5ASkBGzOvek2ZhUTEmLAMx3ZBv9gUXQ/c8RexsFuzB Mx4MUQf2t+wNBgBPRUBBAJuET0UUERlxqFHEI91kI8qhJ3BhnVzZYP9bJwFzSNlgk9wx/F8nohFE dvIA/v+PpeF1J2BNSENIBO0/dCaUQoJjAvqyNDe3IlZpZ0y+Xuv/u//fAK04MwuAA3oTOKrhTr4A RgrsH5Aq2QfAQf/9//+Mx+8BuMujaHvf/vvVSnZXEgYkrU/rI6ix/MwZ5////w7sPu8L2mAakZPK Z9qyludSSfAro1COZjVg5f/////qQXhcz6nUC63MlgdrUq0SUEKZRIi9RKl5tsjTviOi9P7//z9A 92FvV9Qv24xMD3mcoDQOIV2wmiokMy8kLf//hQDYJS0ttrr+Ps5jZDJjRmRveWvr7vY5b2QitIZW NzhvLWY7Vf/7/38iKDUkQTnlK5YX9oapmjFhZa+PVvyA7k49tLv9//9rh8YGUgdx6UDUB7yZ2cEo 7rYFyvAaHf+WI/////8dyGNQ0SrSMNm8zwI452BJ9QgjZF+3AfIBgRAbH2f////P64b3qBxRbpcS VQVDwKfgmYm6kqanjKBgl0Z2//9f/oLGTJS1rFW3vhsERKii6Lnirr2YQ8bLDWvMA///w/94u77A tzDGYyDcTixNeaS8Bav/5eiOnwohCv+f///6tzH9/v+HP9ppu2bgq8RxrpVEXMlFeJGVmKSP/P// 2JqnuT3jXiQX7YUFY2i11r5rAuZi1Xjh0vP///+9ghgaJNONTc48ta6+kBzFxA4/6S6hp22/VQJA /////+LgUEkPwz8StnSze/z6k5Zr0JLHqkZNUFdESE9VRUr/////UY91nL5WR0tOVEFAQ0JCRUNA RFAvxJpEREdGNm5AJDX/////H5q3t6AILzUsNQZDAi4vSSJPJb6s/qASNSAMFMwtZc3/v/3/wK19 RHYSFxYrYRhygfcZscz8+bx7cpqy6ofEdLf///+/SEBHdrg+GjlyD8FkQcqHEmqGEczFfHlulv4R t//W/8oEPb4xRb5UxVFGeoLIBC1Oz/+BuXoG////mBuavL89lMzEeXkRKdNQY2m60GzZUG5lOP9/ +//LzUQdtp6ev8G4HTW6bjVOh8VEYx3J3UR4Rpr/////Pzo2ynxhaCskKzlCvpbCgUIjJUYhrPI+ ygwlTu6JEAz/////KRlQYBOML/uYzHxMNcKFWWO3qPv+mytDEitCKf+BWl0S/7f/ub7s+pz+uClO jso8PcgcJf9BS6pQ/9/g/xwxrqQ+uj9lyhSlMcKjPszNTHm6y9VU4P///7G2tze6cVC+BDFDJXhE PZ3MYRIQESN6Kvceuv///9/bKRhZElEXUJ6ZQiA2WT7nTsGPYUSWXKDIHkUoef///2/4gVMtJ/E2 KXQ3DEe+8p5axKl47MwE+UlZhVVW6f+3+K1crSsdF1tlST5OvCYpmo2waRcjv/3/f3sNRNVO3K3s 4Fo6Aa1RPagHGBLyQu1B7FVJ/////+U9Vks+RJ/n5T8QnEEtemCYn/aHSjE3RMpHpy2CGmrZX/j/ /1G4ZVpOzZYV93yYcV3WQjwtXuXMl7aiTXq3/////+7luBjinUz4HenVQdfKdHmTscOwl2t5ohHH LnkglE170P///zxRK1AYdIMvyrwEFYYEUQXCRhGYK0DBLIzs////v01MW33AJ5EBJZg/8nohxIE1 VCu+vRUljCU9LBkpTL/B//+X2S0eor6Evx8awoQ1iIKqzKpLyq3CrW3//1v7Bq03aAeP0Vl1UdPW Wr4gcUqRepLIFLkM/v+X/oZAFsq+roeoc4GpUHEWTRZJFBjCDLW+wiSO3+A3zQr2vfp+rMUEDkVh zv9v/P/MvSVJykWAegNNNQ1yk6g/UMo0uXhF1zVEA/////+XP6ovDj2yQnRgtcSTPUxWasSsgr41 sEV6NZBFN2AEWv/////XixhMMdJsCj9JTU5HEpf/+BfxKxhDekY92Ed/uS71tv3///+BPVcsJo65 yEXYAsK6USzlHBr0Kq3RtUGTqH6Zjjz/v/0vMxDCwUJOzMJP6WYA9pwsujwqygZ7DA9931j4/4kr ejnpEXJybtbQgQwYAcxCtopV/////zd4FtVfTXhxP1FRLqwumsF2Tai2cHqXPEZXz33ZAvL0//+/ 8LM+7TyGnz3PvkfbMvaWPEV3MnK3GCoUaVsr/9/+/0n/VFddd7eVsgK1zFVxLSFWXDxOylDCgEXI FcT/rf//mXysq3M0fi1AlVpSTBhIKydvWajfScl2Al3o////wodGerI9Z+Bs+fUxmrlghW2CsC4n 9zhTfBgY+AX+Xw+xxH4DtGUSyhxJF/XKcRetz9/4/xdFjL4yTUlTWcq5ysS+ParnXzp2yg////// ywW4RWIywEpaGtHsQEUy4ECok+y6nHdO91tshknF+0T/////CUdNJy/e6jV9SMTzqZ1/Ie/ik52F A2FOw863gh4mVhH/////JlLLGCCMqjzYKp45IBsYeFfJvT8VquxHoL4+GAjKi4D/////oELMfVF6 fzxSyj9FAY6xXz8geHhJyD3EnXmnDg+Dcsb/////eZ0ydL1GoK/yfktHPe+YqlESRkODqlKeWcUe SUSrahc3/v+l4R3EtyoSqp41ZGdGocoHoCyZs3X/Rv//Hgl5Fy1PKR/WX3VxIz9hqbt2cpxyS2LR /wv//1BN9JosE834xgFNRzRFlZkZ7CyoyokwQFQv/////zT37Fye2XE1TwNLwrsCq18fRqhJrl6B Aaq5/3UWx0gC/sb/S40xTmpJWK5L0VMfoOu8yDyxKUvSv/03hTSt1t1H8ux+VhdPBK/D2Qy0v8H/ 0lH1YPMsTr3E1eLKe2It+DJA//+3C84WRuW4uE2Zmj1ZT8oIT5hFwt28OVz/////TqpTbjJ8Uv+/ MWxhKSVQxr0ss1hYxRq9jY00vRyDpw//L/X/M1BSUHe4kfHIgmpjKtkfHvvwlMPHs0h58L/A/9k1 Cf+VdAQyMbYwiX2RFhc8+cyt////v4Tea1XAeS4/WplKes9mKyV+trAFHjJL5Eqs4HHVnfT///8I Q0WigvfoyhpjJWVnFEo9Zaex8J9xmc9LKdl7///Lv0FhvnaevvbORnKs1sKKvnhpGD9+epw9YTr/ /4X/DfqFuuyx/w2Z/1J5//aBL5301izYLLgbPVX/S/z/cGC+dbE3ILpg5DRDyp9Llz2AElztgDcy /7/B/wQY5WeZFomvjNyRTrSxerTCqUIQKV15wHip9P+/4KP3bP2d/OnCvwF6R0k/Qv///5dNd/mc 48VlvgVCwrjhT0st/p1VETwRH3qxPy//G/z/sZIlXj92+j9kGEvSXVTqVq67Pgo8QAcEv9H//3qv PZoC7UYphUhsHJ+dHl/DfLcwUIGVQP+F//9NfH4Nhs4+USnRHkCifS+9KdrEnCGrbq/CeP/W//9t NUvbzV2T7kcrrxhJjUVNiUlAdEW9JtGn1vr//1u3P2C6VBBzPttRvcHlRLwvB1/bbAQBee3f+Leu l5Zw0YBMKW7Jk8IvN1cizv//L/TOKVNdN0n0SXFjutjF7HH3aVRRwIOxY1P/////XCz3ExcE3pUX c4Sp2SjCkAFAGK9mfPscgb8VnhKHBIX/////Qhxv1oqELocnhjWJNoggiqQz+FaLM4okjR2MDI8s lm3/////1iiOIpGQbpMydorvKNuSlZSXZpYWmRzynXeYL16bJZrAC///nQ6cjDOaNGqfXp4CAqE0 oEkcljXd//+/XqVqpH6nF06mqvvvKqlWqG6rBqp+rV6aRKz///8LJROusS/JHLD3tdssknS0b7e2 N9+5uNnn9yr/0l/ou1K6NcoFlnu/bXoEgf5HTxG/S////65uS1xEkFnBOcKDAE8yWFVANG6nLEQ6 iAUR2/+/wU9j7djsgDTmgVlBSUkxooqB4Cckhbr/9rQpAeepj5aGEyQmKDQKMm63///tM4GwBy+S SrOyN5EoIiQMJtvnETMubb2h/7/9/zZ3N368MjsN+AypxsCIsU8JbIFtIVcbkcapVRL//3/rXeSI fqZxGYFsLLS8NEgBH8CFYIIiRva/bjH/////uiufHJ0AyEeOAR6qO5gBzaDieFYDyABRgYY3hjxW aEX+Rv//TF9KTQ3KXEULXrzewidJQU/5oV45uob/v/G3KjGSymztqlk3VdoMKw5KKbtaPGN3/xJ/ 4x6hqvZqK/JDowd0lH2X9FqFFtv/Bv8RSXLtjzT+KXAiXDE+BOmIrOwAzFv8//ZuTY4R4nddU0MO 974UFMgvWcjlYf9/iYVgDMPyJ54rsD9ZM1z5/vKotyH/////7ONazAZOJll6vUePXDpJM0uVBshK Bnf68Zr3P8ggXST//y/9UXKtBhRJSQz2YRRdZV2GTRGCca3Q7KBkUef9////5T5IFpuBxPGxqsQu FC+Zl5gZ+mk0VuWD4VbBw9ubf4H/L0tRtkYayrp1AiU+kJ8REYZTCwJJ/4UL/RFsrfMuwdRFNDgU bXytPaBxRrzQ//9EEilRWL/c7GCcXnn90d9x8/Rl+0DxLX2DC4tLgBVUu1uDB4j///8LNhLLmcu6 PbC3/gCCyrvKkIChUSdIgKhD4MLb////4IRN/7LrHhqAHOT0nb4YpcI/TUE0s4YHTQOUmhJf+v9T 7HchpyFTggo+Qm97rI6CEgs4FCr0/6sPMYT3vFzRBnq4JGf/F/pb+B+OSUIHguzRFWA3OjHI4jRE /////5V5B0lii9SbqWqJCoLua+72UwbzyB/0Dqp4/uYGh063/////3qOP0cKnoCiQhKakdkqvgOO yBdFNfPKigF0ATKggfQY39rq/4Mm5IkqlYQsUGE/PMoMwFr7Ff////96SgE1eoM9CNkR0TmJvh/o +VOcNtoRVRiEesqGtpGHcv//N/jm/+y1eMc8Z1N2UWY9yl4seeJwRyh9gCb8W3yrKgxPF4tH71IY RvLYFxT///8vlAa2ehbnc0YJFgh6gDVQcuL0LEpKiwKDNngtvIn/v/EXHyuDH0XM8+rqvk8eC2EK rAkGx/9/q3+64fqRQ3m/ufhm6tf8xypQOzl1OxA5of///61pEPVVRhgLtQis6y2xNGC4qcCk56Je iBwH//+/VVw1Q7aUBPW49izIyN6G/g10NJDCZ0Hj32ijK6RZIhy01UCqR5CK/7/9fzZdDDSvEWpc cLcKPa2EV7aTcIeBRQg0tTua/y/Q4q9brXtpHMwvRV+EYaj0C0L6b///zXoNupivNRx6vN9ZI5Jo H0nH+jpZNK43Vn+jErcLH/rvhGwgWa18vhf6t/pqGSzu0J8eWV0OofR+f0UP/////zSabTvDaRJK w4VHmhJ4KKLzIXoBck0quTQDRiB6MeY0/8b//994X1+sw1esEBbo2Uo8meX327naTWeL5fSb//+/ 9JyV28oNVMgNoM+LZQ7lmb1e9jv30Jm5JVmC/v+l/5tfPZFnXJ3wHpDYFojQ5ydlImWdv5heCF/U 4P/fBZE1DBbOvUO96ndyiB7IvWb63+Avrsngdht1X/krzKEAf2Uaki////8XBD2mj17UnVEhc3Od SQKxl3oCSmRV5sI8RBg+2/9C/0as87UL8sXDKXhNEloRyT+WdtDN/////y6FI8VGcC2Ap0MXwMMO fMz9R/5XH6RCYywkypIybBQxv8WN/tGhmng0CCA1SSptuB7DWf+g1NvbHbe9iT9PRNJT9dsb/f/f prdCW1hJgx2qP+KaFKMVkdwViRVHQv9/62zIARes24pJek5bYpYvzJ9Bif/03+r/8tAhPd4pJiEJ Qwg2TT8NIeQCgv///3cucXoMUZ4pyvGh/2cGSfpUPalgTV0Z3ELTFPUc/8b/W9LA6GH7jjmIiHL3 NUdCF8FBJq1r6f8X/ji6vhw7bVRI011dGDkXFyceVR3DGnnf+v9/Q7kWB3qHnx85aoLXRT9EM7U1 Bfw+fgyW/y/0/2RIF9wX3ZUS9pSu6upR3Dy9N1tUVBkXRv////+TNlRwzdbhDe+q6hImGDH9I8y2 VYgARRd3/DVIERBuVdX/G/xEWWyDWaep2zGwJSfNJoXRFuE3KPC/v+3RvPxRzRfpg8aty0C/8P// xZ2fEYsAqYTJQDOrRDJaeSmGL0tGWmqLyRT/t///4hRLWQ7MjyKvcYcTgVjQZR+8BM0xTeYLJy2u iF/g//+fV1IONItPQqkk3TsH8BgplMwRFGNK8fT+L/T/QRPs9GNN+YQ48qt223KBeUI1YAHBfUK/ /f+3Q7hXQoLLCb4x6N477U33RoeKIUCj6Fdf4Nv/HE2p0AsSEyL3FI5E4r1hOKyAva7f6C/0gFU/ C1m5CvS+U8N7RKl9ry/1/1v/cz1Lvpz+eqOAcapby19bUsH/v9T/oOket5jYWohaNku2vrhhWABC i3XJTwfJ//+/xKFiHYVOvrtNNPi9F9DZsS0lGYLyEcL+Bf//L/WaVUFCekBiBCaGAVLNHj866oyu R0m/nfv1/wv/2U03FXNRySxMqin8FurkQUtNYJ97S////y+32aoSsuTj1w+sGsRNBNhTGDwFqYz8 xbhP2aRH/1Lf+kQ5NlOa+fStZYhBtdJC5E5g1db/rf53bbCJ2TlDwFSqT9HKpahvoU73/gsX+JlL yz3x1Ca+Z01Mycw+urf9//+lUkM1aAo1VkNKtpdKzHK2QoeqaWS5Pir/L/RLiJ5yn6pcQ7aSYp68 g/qPvGK/wv//20qeSlZOn/Ritkqfz575EMsq18zZr0J8//+t/4CcL/6xGGoMaStFkq/KSZKhRa1C nMHo+oF/g///SrHzQifDcx9A423E6G5MentiwNcZAWK1/f///09HZJ8j6ElZmQrKlxoZooOaV7x5 xgs0tx+Igzs0mf///y90dgFReS1sbvDvFvtRyoBCbZjkLMBuQ36Ao0Kt4////8hTMg6emaMDoSsB Bh76XEAPVfsRoeRq6J4zDJL//9+qU1VkVxBxs7TLVVDJVUkAPMkHLtMzs/+NfuvMCLyCa4S3WhdD gjJhx0kiA1r+/1/qrafoQIBbwlK54fGQxPp4HDCi3p43ntf8v9QNng9qv1ULzDUQQpbLRdyR+L/F G51LyUWOijO0RhyeCYB1l////99BTlH4A57EbPf3eSdHzuteUfwwaqbbvRj6+VL5wf+/1P/8jJEu CTNCKzkY1RA0AvGXRs65EUpSbiB86///GWPBahXOVUfI9QEvU80qFlQHGhKVekSj+tb/b/FcABLo r0RJRna0ovg2oHSG4lYb/2+UK6fgQVwogbzBtha/ArlE/i/9/4LfZ04n4ENagMHEj82JPta5GNmh coCCHX//9v+tMsCgxOw03qvAuERLVyREV7ksPE3p/////wNWRr/oUWRCzp+fR7G+fEVR7TURBzoZ ND2CEBf/4SMX/43e+rc0SksYGesds57tWxEJ9h2ee9/iF/hEIxmqTgpfEL55ZumRtplaN/pb/4FC Hxj5Ce5KT7V8x9ErfZvGLvr///+SlsxAXFFQEW5FEXW2z68sWZIfRU7E4+pqcRq6D/8X/jc5emBT zqzGPFHfpFcRbVc0OMpRFsH0t/jt1hxrw3QRBE7RWJ4hJCffp/9f4m8sJ2GnSzYZGRvAW+LtEVpA Wf2H7Vv8//9QiRRMZZ848VxUN3IW+StpyzwoGr8bg1/4BRb6jXmJW3pjQyupG4AGp////5dVYWhf kCmM5VC0GXuQgw7/I9RRYh+rG8RJMpD9X/r/lkCQq40sMvURYKsEvXa6rpyvTv6OYUVQ/63+S2Vw aoDkfQYnwFGe7OI3PaUJ2Pv/X/hqB8zDBvIx+p6z+0cSCWt9R0UBnkKKyT6N/v9/LLxJc4gntpia C/UaK2y0k4McA07edP9f4P9IO4Cq/9ePR1yE1WwqNfcN1nqFYcqy/CX/////29jl6ZeQd4k5UZKp SreasJzuzNRX5XFcY08UqUvK3EH//8L/bGBc65FNbvEEBg5dqf9PASc0uuMKqzOxVC3/X1jos7cE 6v0YNXbMzATUwveK6kSmf4m/9ffIIgnGRZsTpv8xEEGAqykMOf////80qNEna6GdSuskprHuTWHV fm8OXaz3tNSkulFhEB3LlP//b/+4Wgo3wA6nNBMFqEVxVtTumrLRDa48sXO2PK2txP9f4oaHwuEa 4FCavLfHSPqgBgRoRv//37oFrZ6oqfn08CYeSEOtfXCqfJG3J+esrapf4v+lMbFCcw4puF+q7jjZ zY01HWouUl/g/zc8c4GkyQSlwzH/1Vo6nL/L/7/A/1A9bJedl1lNIZxHXqtX7fggRBlhSRylof// /1gvbnmqZzwxGGM0pO4VN1jgVDApjUFBa2Ev/7/Uf0i/2qdpzVFApSAlBygtJFhBvx8SJDX///9G Ri4oLvK37fxOFjMoRlsCM2RKLqQe9wBmf6m/1AYVuCoCLjRMLc+ct4D3M1cE8P//L1YkLDERaClM CfB+mi9wMQd3JEjSL/Uv7S4iY7+nn5rfSSQyMlVgl7j9/zIkCSAvJQ5/+oQ+RSQvIiD+Lr8JgP9W QK0lNC05DyAslv+/wH8lJTOCj0OnBIkA6i2XJ5wVKUclPaM/1v///xuIvyyyMTgNLl0NKCMzIDM4 c8RunCHYALggTi70//8zEkkvTMH2JhMOIyswVQQ5w5FfvAUk60v8BRoueShXC9hcAhcgLcTf4P9/ Sob3JG0ATg4xWwokOE/mmB2uTnXnNfi3f4lRSbE2MjEzMSe6PW2K83SxT//ud9/QUVJ18wt4RVZI QIMJU0xDMkm3v0j/GfXSODguDUBDIk+z5RhlQ1H/L/0Gx0EngI+PzVpFckYZdhq3EU17pf7//2lR RhHPZFpHQi1uGFZh7VdBJf1f8U5KHbxwq//FOQQnY9G/NyCqRWJ6IW8l/f8vLQMg9qUqTQoBV4FB wSC6Rc1xQo/MiQN5RhRhviGoY/+3bRFtzAWBvr4Wwoy+qlHRAMt74/+NRzJGBkCaNEbKX8KvvU8z rPlBK90O2BFQgQwyrioOpS7BBzKlcIhzM0zhHdi3ukk9wo41NciEL4jCQvaEDDRhABxMC/y3f8KA Q8C8QbKVwpBAzFVuwrz5TkrxRu7LQwOUpLaoIov+0v8N9EPCg0XIRsKGRcIINrBAjqgNl9i67xYf yLb4NanLKW3NQDbBwm/1tsF+QFbKRsseRVSpNvj9vw6BUceFaLnBqqlAsTtEyGmYt98a5f9MI0iB NQTKJ8zFdd92hXEY67IRH0m+1yUL1Mv//9ZOSR2dyLg4Rk72RgYRBvgWCbPvFCk3278zN0bIQsKC RaqZEC0gqAJEBeaq+b4AuZBbowMTJTHYIWmGpDXnPddcYJvwxTFX/Ysfgww2SJupB7dJqvQjAHVB CgQTD5yPUf8X9gUNDUEABRcAEQgDQRQSuckHaxoKFhJzHjFtg9VqTe5OAA0GXK8taPCHIoGsYCy2 1Q9IKBAMQedqtbbAAs6/Ow2oSvgvMCgvNScA8xRFWEVEgYDAGo0WCAjkAQAwCgAkUQW/aSYgqBwB RmluZENEAaDybG9zZRtEzN4V1FNpemUX73/7TEwRQQ5NYXBWaWV3T2YPbm9hbw5Vbm0QLgNycyJu d8MvS0VudhBvbnario5dViJhYhg5iLgdRAx2ZdrukYqYDn1UaW1GKuKstVcaC1FDotu697ELe3Be Zy1Mw25fIH5MaWJyTnlBIfZMULRQYyhLxkQ5tv1iYWxBbAZjWExhtz3sVNMqTXUDeCgbm7VbbBdy Yw9+sHQQB/vnWlYdRkNvcHnFRGXahzdrBoMXJUhh5wsg3cKdRVNj2XY7+WxlblTfcFAvaA1hCwrD VytYRB2zt0VE8W/KkbZQxMlweU2RbFt2Z4IiTRNFeGlCQfFi3WhxZB/xvVnAJv8vmY33hg27BWVw oTZCN+LCw7AzblqcZUl7EXGiy/sXbCD8XnIYVG+TFYaZorhMqQ68JXsTYhENCGNrQ4VvT0RyAeNk ZUNop9xdRGw0TW9CeXQiEhQnIpyeua+1LQpjmDYqUqCyvSfhVEdQb2koGUh7wWbtcEYmXL0TGYRD mDDoOm5FTLisMGkJaZwWpCImBDpNGDPXOEN1GH0ZOiQ5YW9rpURlLJWEIMWVaLXHHuObwGcbS2V5 DE9w69yjazELRWoOgFZbvQAadnVlD4vM3KWEESl1bTAMT7PNJrc/ZML4baCiYW6Hc2UwijcXa4xy EPYHaXNkvfZcCXoZ8s4QFKJ4rltQCCI5N6ErMyphKiECSg9ms1TNIAGhVVwPFrDfTkJ1ZmZBDwtM b3f2GbYjd3ZJcpQjdwqFm3Fa9MwMTYLCAKhtWbZN17fYYkD/BAITC2VZlmU0FxIQA6tlWZYPCRRz Ob//hLw8UEVMAQPgAA8BCwEHrnvSbBNyKoAyBBADgmxnsZA1CwIzBJlb0s0HDNAeNHvZG9gQBwYA wHkIQIBbZHgCGAVGuMJ2K2R4AR4uL9iToJikcJDrNn+7sAQjIAtgLmRhdGGYI+5CusH7Iid2QL3N YBuFLuUJAMPABny/KXs0J0AbsHsNlAAASkE8CQAAAP8AAAAAAGC+AJBQAI2+AID//1eDzf/rEJCQ kJCQkIoGRogHRwHbdQeLHoPu/BHbcu24AQAAAAHbdQeLHoPu/BHbEcAB23PvdQmLHoPu/BHbc+Qx yYPoA3INweAIigZGg/D/dHSJxQHbdQeLHoPu/BHbEckB23UHix6D7vwR2xHJdSBBAdt1B4seg+78 EdsRyQHbc+91CYseg+78Edtz5IPBAoH9APP//4PRAY0UL4P9/HYPigJCiAdHSXX36WP///+QiwKD wgSJB4PHBIPpBHfxAc/pTP///16J97kBAQAAigdHLOg8AXf3gD8BdfKLB4pfBGbB6AjBwBCGxCn4 gOvoAfCJB4PHBYnY4tmNvgDAAACLBwnAdEWLXwSNhDAU5QAAAfNQg8cI/5aM5QAAlYoHRwjAdNyJ +XkHD7cHR1BHuVdI8q5V/5aQ5QAACcB0B4kDg8ME69j/lpTlAABh6SNE//8AAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgADAAAAIAAAgA4AAACQAACAAAAAAAAAAAAAAAAAAAACAAEA AABAAACAAgAAAGgAAIAAAAAAAAAAAAAAAAAAAAEACQQAAFgAAADY8AAA6AIAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAABAAkEAACAAAAAxPMAACgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAADQAACA qAAAgAAAAAAAAAAAAAAAAAAAAQAJBAAAwAAAAPD0AAAiAAAAAAAAAAAAAAABADAA4MAAACgAAAAg AAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAA gACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIiIiIiIiI iIiIiIiIgAAAj////////////////4AAAIf///////////////eAAACPf/////////////9/gAAA j/f////////////3/4AAAI//f///////////f/+AAACP//f/////////9///gAAAj///f/////// /3///4AAAI////f///////f///+AAACP//93d3d3d3d3f///gAAAj//3f39/f39/f3f//4AAAI// d/f39/f39/f3f/+AAACP939/f39/f39/f3f/gAAAh3f39/f39/f39/f3d4AAAI9/f39/f39/f39/ f3+AAACP////////////////AAAACP//////////////8AAAAACP/////////////wAAAAAACP// //////////AAAAAAAACP//////////8AAAAAAAAACP/////////wAAAAAAAAAACP////////AAAA AAAAAAAACP//////8AAAAAAAAAAAAACP/////wAAAAAAAAAAAAAACIiIiIgAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////////////////AAAAD wAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPA AAADwAAAB+AAAA/wAAAf+AAAP/wAAH/+AAD//wAB//+AA///wAf//+AP/////////////////8jD AAAoAAAAEAAAACAAAAABAAQAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICA AIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAACP//////8AAIj/////+AAAj4////+PAACP+P//+P8AAI+PiIiPjwAA iPf39/f4AACPf39/f38AAAj39/f38AAAAI9/f38AAAAACPf38AAAAAAAiIiAAAAAAAAAAAAAAAAA AAAAAAAA//8AAP//AADAAQAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAOADAADwBwAA+A8A APwfAAD//wAA//8AAPDEAAAAAAEAAgAgIBAAAQAEAOgCAAABABAQEAABAAQAKAEAAAIAAAAAAAAA AAAAAAAAAAC89QAAjPUAAAAAAAAAAAAAAAAAAMn1AACc9QAAAAAAAAAAAAAAAAAA1vUAAKT1AAAA AAAAAAAAAAAAAADh9QAArPUAAAAAAAAAAAAAAAAAAOz1AAC09QAAAAAAAAAAAAAAAAAAAAAAAAAA AAD29QAABPYAABT2AAAAAAAAIvYAAAAAAAAw9gAAAAAAADj2AAAAAAAAOQAAgAAAAABLRVJORUwz Mi5ETEwAQURWQVBJMzIuZGxsAE1TVkNSVC5kbGwAVVNFUjMyLmRsbABXUzJfMzIuZGxsAABMb2Fk TGlicmFyeUEAAEdldFByb2NBZGRyZXNzAABFeGl0UHJvY2VzcwAAAFJlZ0Nsb3NlS2V5AAAAbWVt c2V0AAB3c3ByaW50ZkEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 O9r11VhaCoPLhwr0XS4KC5Lv9VmAdA== ------=_NextPart_000_0000_322F1B87.CA183D48--