From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Amirouche Boubekki Newsgroups: gmane.lisp.guile.user Subject: Re: Nonblocking get-bytevector-n bug? Date: Mon, 07 Dec 2015 13:44:11 +0100 Message-ID: <525ed16422523b5719d516a9560e3c35@hypermove.net> References: <87h9jvuxb3.fsf@elektro.pacujo.net> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=_71601659c9a4a93e40da7d993b8cf26c" X-Trace: ger.gmane.org 1449492301 7946 80.91.229.3 (7 Dec 2015 12:45:01 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 7 Dec 2015 12:45:01 +0000 (UTC) Cc: guile-user@gnu.org, guile-user-bounces+amirouche=hypermove.net@gnu.org To: Marko Rauhamaa Original-X-From: guile-user-bounces+guile-user=m.gmane.org@gnu.org Mon Dec 07 13:44:52 2015 Return-path: Envelope-to: guile-user@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1a5v9u-0004Tn-NK for guile-user@m.gmane.org; Mon, 07 Dec 2015 13:44:50 +0100 Original-Received: from localhost ([::1]:54246 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a5v9t-00013c-Tq for guile-user@m.gmane.org; Mon, 07 Dec 2015 07:44:49 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:57713) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a5v9R-0000cz-Kc for guile-user@gnu.org; Mon, 07 Dec 2015 07:44:23 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a5v9Q-00075K-1b for guile-user@gnu.org; Mon, 07 Dec 2015 07:44:21 -0500 Original-Received: from relay2-d.mail.gandi.net ([217.70.183.194]:48324) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a5v9L-00073u-CU; Mon, 07 Dec 2015 07:44:15 -0500 Original-Received: from mfilter14-d.gandi.net (mfilter14-d.gandi.net [217.70.178.142]) by relay2-d.mail.gandi.net (Postfix) with ESMTP id A306CC5A55; Mon, 7 Dec 2015 13:44:13 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at mfilter14-d.gandi.net Original-Received: from relay2-d.mail.gandi.net ([IPv6:::ffff:217.70.183.194]) by mfilter14-d.gandi.net (mfilter14-d.gandi.net [::ffff:10.0.15.180]) (amavisd-new, port 10024) with ESMTP id RY35hiGQCxfg; Mon, 7 Dec 2015 13:44:12 +0100 (CET) X-Originating-IP: 10.58.1.143 Original-Received: from webmail.gandi.net (webmail3-d.mgt.gandi.net [10.58.1.143]) (Authenticated sender: amirouche@hypermove.net) by relay2-d.mail.gandi.net (Postfix) with ESMTPA id BAEA7C5A51; Mon, 7 Dec 2015 13:44:11 +0100 (CET) In-Reply-To: <87h9jvuxb3.fsf@elektro.pacujo.net> X-Sender: amirouche@hypermove.net User-Agent: Roundcube Webmail/1.1.2 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 217.70.183.194 X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane.org@gnu.org Original-Sender: guile-user-bounces+guile-user=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.user:12222 Archived-At: --=_71601659c9a4a93e40da7d993b8cf26c Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Le 2015-12-06 21:38, Marko Rauhamaa a écrit : > Guile 2.0.11 provides: > > get-bytevector-n > get-bytevector-n! > get-bytevector-some > > Of these, only get-bytevector-some seems to behave as expected when the > port is nonblocking: First thanks for pointing the correct way to setup a non-blocking port. I was missing that bit in my code. I can't make work `get-bytevector-some` with my code. It only returns a single cell bv. Instead I use `char-ready?`. Here is the definition of `recv-some`: ``` (define (recv-some port) (let next ((out '())) (if (char-ready? port) (let ((byte (get-u8 port))) (if (eof-object? byte) (u8-list->bytevector (reverse out)) (next (cons byte out)))) (u8-list->bytevector (reverse out))))) ``` FWIW, i also have a send-all procedure that works around the fact that the socket is non blocking: ``` (define (send-all socket message cc) (let loop ((message message)) (let* ((count (send socket message)) (message (bytevector-drop message count))) (if (eq? (bytevector-length message) 0) (cc) (loop-add-writer socket (lambda () (loop message))))))) ``` `loop-add-writer` register a thunk to be run when the socket is ready for writes. I attached tests files. --=_71601659c9a4a93e40da7d993b8cf26c Content-Transfer-Encoding: base64 Content-Type: text/plain; name=async.scm Content-Disposition: attachment; filename=async.scm; size=6222 OzsgQ29weXJpZ2h0IChDKSAyMDE1IEFtaXJvdWNoZSBCb3ViZWtraSA8YW1pcm91Y2hlQGh5cGVy bW92ZS5uZXQ+Cgo7OyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yCjs7IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKOzsgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCjs7IHZlcnNpb24gMyBvZiB0aGUgTGljZW5z ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KOzsKOzsgVGhpcyBsaWJy YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7 IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCjs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VCjs7IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCjs7Cjs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKOzsgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQo7OyBGb3VuZGF0aW9uLCBJ bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCjs7IDAyMTEw LTEzMDEgVVNBCihkZWZpbmUtbW9kdWxlIChhc3luYykpCgoodXNlLW1vZHVsZXMgKHNyZmkgc3Jm aS02OSkpIDs7IGhhc2gtdGFibGUKCih1c2UtbW9kdWxlcyAoaWNlLTkgcSkpCih1c2UtbW9kdWxl cyAoaWNlLTkgbWF0Y2gpKQoodXNlLW1vZHVsZXMgKGljZS05IHJkZWxpbSkpCgoodXNlLW1vZHVs ZXMgKHNyZmkgc3JmaS05KSkKCgo7OyBzcmZpLXF1ZXVlIDpvKQooZGVmaW5lIG1ha2UtcXVldWUg bWFrZS1xKQooZGVmaW5lIHB1c2ghIGVucSEpCihkZWZpbmUgcG9wISBkZXEhKQooZGVmaW5lIGVt cHR5PyBxLWVtcHR5PykKCgooZGVmaW5lLXJlY29yZC10eXBlIDxsb29wPgogIChtYWtlLWxvb3Ag cnVubmluZyB0YXNrcyByZWFkZXJzIHdyaXRlcnMpCiAgbG9vcD8KICAocnVubmluZyBsb29wLXJ1 bm5pbmcgbG9vcC1ydW5uaW5nISkKICAodGFza3MgbG9vcC10YXNrcyBsb29wLXRhc2tzISkKICAo cmVhZGVycyBsb29wLXJlYWRlcnMgbG9vcC1yZWFkZXJzISkKICAod3JpdGVycyBsb29wLXdyaXRl cnMgbG9vcC13cml0ZXJzISkpCgoKKGRlZmluZSBsb29wIChtYWtlLWxvb3AgI2ZhbHNlIChtYWtl LXF1ZXVlKSAobWFrZS1oYXNoLXRhYmxlKSAobWFrZS1oYXNoLXRhYmxlKSkpCgooZGVmaW5lLXB1 YmxpYyAqbG9vcCogKG1ha2UtZmx1aWQgbG9vcCkpCgooZGVmaW5lLXB1YmxpYyAobG9vcC1jYWxs LWxhdGVyIHRodW5rKSA7OyBzdXBwb3J0IGRlbGF5CiAgKGxldCAoKGxvb3AgKGZsdWlkLXJlZiAq bG9vcCopKSkKICAgIChwdXNoISAobG9vcC10YXNrcyBsb29wKSB0aHVuaykpKQoKKGRlZmluZSAo bG9vcC1hZGQtcmVhZGVyIHBvcnQgY2FsbGJhY2spCiAgKGxldCogKChsb29wIChmbHVpZC1yZWYg Kmxvb3AqKSkKICAgICAgICAgKHJlYWRlcnMgKGxvb3AtcmVhZGVycyBsb29wKSkKICAgICAgICAg KHF1ZXVlIChoYXNoLXRhYmxlLXJlZiByZWFkZXJzIHBvcnQgbWFrZS1xdWV1ZSkpKQogICAgKHB1 c2ghIHF1ZXVlIGNhbGxiYWNrKQogICAgKGhhc2gtdGFibGUtc2V0ISByZWFkZXJzIHBvcnQgcXVl dWUpKSkKCihkZWZpbmUgKGxvb3AtYWRkLXdyaXRlciBwb3J0IGNhbGxiYWNrKQogIChsZXQqICgo bG9vcCAoZmx1aWQtcmVmICpsb29wKikpCiAgICAgICAgICh3cml0ZXJzIChsb29wLXdyaXRlcnMg bG9vcCkpCiAgICAgICAgIChxdWV1ZSAoaGFzaC10YWJsZS1yZWYgd3JpdGVycyBwb3J0IG1ha2Ut cXVldWUpKSkKICAgIChwdXNoISBxdWV1ZSBjYWxsYmFjaykKICAgIChoYXNoLXRhYmxlLXNldCEg d3JpdGVycyBwb3J0IHF1ZXVlKSkpCgooZGVmaW5lIChjYWxsLXJlYWQtY2FsbGJhY2sgcG9ydCkK ICAobGV0KiAoKGxvb3AgKGZsdWlkLXJlZiAqbG9vcCopKQogICAgICAgICAocXVldWUgKGhhc2gt dGFibGUtcmVmIChsb29wLXJlYWRlcnMgbG9vcCkgcG9ydCkpKQogICAgKHdoZW4gKGFuZCBxdWV1 ZSAobm90IChlbXB0eT8gcXVldWUpKSkKICAgICAgKGxldCAoKGNhbGxiYWNrIChwb3AhIHF1ZXVl KSkpCiAgICAgICh3aGVuIChlbXB0eT8gcXVldWUpCiAgICAgICAgKGhhc2gtdGFibGUtZGVsZXRl ISAobG9vcC1yZWFkZXJzIGxvb3ApIHBvcnQpKQogICAgICAoY2FsbGJhY2spKSkpKQoKKGRlZmlu ZSAoY2FsbC13cml0ZS1jYWxsYmFjayBwb3J0KQogIChsZXQqICgobG9vcCAoZmx1aWQtcmVmICps b29wKikpCiAgICAgICAgIChxdWV1ZSAoaGFzaC10YWJsZS1yZWYgKGxvb3Atd3JpdGVycyBsb29w KSBwb3J0KSkpCiAgICAod2hlbiAoYW5kIHF1ZXVlIChub3QgKGVtcHR5PyBxdWV1ZSkpKQogICAg ICAobGV0ICgoY2FsbGJhY2sgKHBvcCEgcXVldWUpKSkKICAgICAgICAod2hlbiAoZW1wdHk/IHF1 ZXVlKQogICAgICAgICAgKGhhc2gtdGFibGUtZGVsZXRlISAobG9vcC13cml0ZXJzIGxvb3ApIHBv cnQpKQogICAgICAgIChjYWxsYmFjaykpKSkpCgooZGVmaW5lIChsb29wLXJ1bi1vbmNlKQogIChs ZXQgKChsb29wIChmbHVpZC1yZWYgKmxvb3AqKSkKICAgICAgICAocmVhZGVycyAoaGFzaC10YWJs ZS1rZXlzIChsb29wLXJlYWRlcnMgbG9vcCkpKQogICAgICAgICh3cml0ZXJzIChoYXNoLXRhYmxl LWtleXMgKGxvb3Atd3JpdGVycyBsb29wKSkpKQogICAgOzsgZmlyc3QgcG9sbCByZWFkeSBwb3J0 cwogICAgKG1hdGNoIChzZWxlY3QgcmVhZGVycyB3cml0ZXJzICcoKSAwKSA7OyBGSVhNRTogcmVw bGFjZSAwIHdpdGggdGltZSBmb3IgbmV4dCB0YXNrCiAgICAgICgodG8tcmVhZCB0by13cml0ZSBf KQogICAgICAgKGZvci1lYWNoIGNhbGwtcmVhZC1jYWxsYmFjayB0by1yZWFkKQogICAgICAgKGZv ci1lYWNoIGNhbGwtd3JpdGUtY2FsbGJhY2sgdG8td3JpdGUpKSkKICAgIDs7IGV4ZWN1dGUgdGFz a3MKICAgICh3aGlsZSAobm90IChlbXB0eT8gKGxvb3AtdGFza3MgbG9vcCkpKQogICAgICAoKHBv cCEgKGxvb3AtdGFza3MgbG9vcCkpKSkpKQoKKGRlZmluZS1wdWJsaWMgKGxvb3AtcnVuLWZvcmV2 ZXIpCiAgKGxldCogKChsb29wIChmbHVpZC1yZWYgKmxvb3AqKSkpCiAgICAobG9vcC1ydW5uaW5n ISBsb29wICN0cnVlKQogICAgKHdoaWxlIChsb29wLXJ1bm5pbmcgbG9vcCkKICAgICAgKGNhbGwt d2l0aC1wcm9tcHQgJ2xvb3AKICAgICAgICBsb29wLXJ1bi1vbmNlCiAgICAgICAgKGxhbWJkYSAo Y2MgY2FsbGJhY2spIChjYWxsYmFjayBjYykpKSkpKQoKKGRlZmluZS1wdWJsaWMgKGxvb3AtcnVu bmluZz8pCiAgKGxldCAoKGxvb3AgKGZsdWlkLXJlZiAqbG9vcCopKSkKICAgIChsb29wLXJ1bm5p bmcgbG9vcCkpKQoKKGRlZmluZS1wdWJsaWMgKGxvb3Atc3RvcCEpCiAgKGxldCAoKGxvb3AgKGZs dWlkLXJlZiAqbG9vcCopKSkKICAgIChsb29wLXJ1bm5pbmchIGxvb3AgI2ZhbHNlKSkpCgoKOzsg bm9uLWJsb2NraW5nIHJlcGxhY2VtZW50IGZvciByZWFkL3dyaXRlIHByb2NlZHVyZXMKCih1c2Ut bW9kdWxlcyAoaWNlLTkgYmluYXJ5LXBvcnRzKSkKCihkZWZpbmUgKHJlY3Ytc29tZSBwb3J0KQog IChsZXQgbmV4dCAoKG91dCAnKCkpKQogICAgKGlmIChjaGFyLXJlYWR5PyBwb3J0KQogICAgICAo bGV0ICgoYnl0ZSAoZ2V0LXU4IHBvcnQpKSkKICAgICAgICAoaWYgKGVvZi1vYmplY3Q/IGJ5dGUp CiAgICAgICAgICAgIChwayAnZW9mICh1OC1saXN0LT5ieXRldmVjdG9yIChyZXZlcnNlIG91dCkp KQogICAgICAgICAgICAobmV4dCAoY29ucyBieXRlIG91dCkpKSkKICAgICAgKHBrICchcmVhZHkg KHU4LWxpc3QtPmJ5dGV2ZWN0b3IgKHJldmVyc2Ugb3V0KSkpKSkpCiAgICAgICAgICAgICAKKGRl ZmluZS1wdWJsaWMgKHJlY3Ytc29tZS8gc29ja2V0KQogIChhYm9ydC10by1wcm9tcHQgJ2xvb3Ag KGxhbWJkYSAoY2MpIChsb29wLWFkZC1yZWFkZXIgc29ja2V0IChsYW1iZGEgKCkgKGNjIChyZWN2 LXNvbWUgc29ja2V0KSkpKSkpKQoKKGRlZmluZS1wdWJsaWMgKGdldC1ieXRldmVjdG9yLXNvbWUv IHNvY2tldCkKICAoYWJvcnQtdG8tcHJvbXB0ICdsb29wIChsYW1iZGEgKGNjKSAobG9vcC1hZGQt cmVhZGVyIHNvY2tldCAobGFtYmRhICgpIChjYyAoZ2V0LWJ5dGV2ZWN0b3Itc29tZSBzb2NrZXQp KSkpKSkpCgooZGVmaW5lLXB1YmxpYyAoYWNjZXB0LyBzb2NrZXQpCiAgKGFib3J0LXRvLXByb21w dCAnbG9vcCAobGFtYmRhIChjYykgKGxvb3AtYWRkLXJlYWRlciBzb2NrZXQgKGxhbWJkYSAoKSAo Y2MgKGFjY2VwdCBzb2NrZXQpKSkpKSkpCgoodXNlLW1vZHVsZXMgKHJucnMgYnl0ZXZlY3RvcnMp KQoKKGRlZmluZSAoYnl0ZXZlY3Rvci1kcm9wIGJ2IGNvdW50KQogICh1OC1saXN0LT5ieXRldmVj dG9yIChsaXN0LXRhaWwgKGJ5dGV2ZWN0b3ItPnU4LWxpc3QgYnYpIGNvdW50KSkpCgoKKGRlZmlu ZSAoc2VuZC1hbGwgc29ja2V0IG1lc3NhZ2UgY2MpCiAgKGxldCBsb29wICgobWVzc2FnZSBtZXNz YWdlKSkKICAgIChsZXQqICgoY291bnQgKHNlbmQgc29ja2V0IG1lc3NhZ2UpKQogICAgICAgICAg IChtZXNzYWdlIChieXRldmVjdG9yLWRyb3AgbWVzc2FnZSBjb3VudCkpKQogICAgICAoaWYgKGVx PyAoYnl0ZXZlY3Rvci1sZW5ndGggbWVzc2FnZSkgMCkKICAgICAgICAgIChjYykKICAgICAgICAg IChsb29wLWFkZC13cml0ZXIgc29ja2V0IChsYW1iZGEgKCkgKGxvb3AgbWVzc2FnZSkpKSkpKSkK CihkZWZpbmUtcHVibGljIChzZW5kLWFsbC8gc29ja2V0IG1lc3NhZ2UpCiAgKGFib3J0LXRvLXBy b21wdCAnbG9vcCAobGFtYmRhIChjYykgKGxvb3AtYWRkLXdyaXRlciBzb2NrZXQgKGxhbWJkYSAo KSAoc2VuZC1hbGwgc29ja2V0IG1lc3NhZ2UgY2MpKSkpKSkKCgo7OyBYWFg6IHRob3NlIGFyZSBi bG9ja2luZyBhbnl3YXkKCjs7IChkZWZpbmUtcHVibGljIChyZWFkLyBzb2NrZXQpCjs7ICAgKGFi b3J0LXRvLXByb21wdCAnbG9vcCAobGFtYmRhIChjYykgKGxvb3AtYWRkLXJlYWRlciBzb2NrZXQg KGxhbWJkYSAoKSAoY2MgKHJlYWQgc29ja2V0KSkpKSkpKQoKOzsgKGRlZmluZS1wdWJsaWMgKHdy aXRlLyBtZXNzYWdlIHNvY2tldCkKOzsgICAoYWJvcnQtdG8tcHJvbXB0ICdsb29wIChsYW1iZGEg KGNjKSAobG9vcC1hZGQtd3JpdGVyIHNvY2tldCAobGFtYmRhICgpIChjYyAod3JpdGUgbWVzc2Fn ZSBzb2NrZXQpKSkpKSkpCgo7OyAoZGVmaW5lLXB1YmxpYyAoZGlzcGxheS8gbWVzc2FnZSBzb2Nr ZXQpCjs7ICAgKGFib3J0LXRvLXByb21wdCAnbG9vcCAobGFtYmRhIChjYykgKGxvb3AtYWRkLXdy aXRlciBzb2NrZXQgKGxhbWJkYSAoKSAoY2MgKGRpc3BsYXkgbWVzc2FnZSBzb2NrZXQpKSkpKSkp Cgo7OyAoZGVmaW5lLXB1YmxpYyAocmVhZC1saW5lLyBzb2NrZXQpCjs7ICAgKGFib3J0LXRvLXBy b21wdCAnbG9vcCAobGFtYmRhIChjYykgKGxvb3AtYWRkLXdyaXRlciBzb2NrZXQgKGxhbWJkYSAo KSAoY2MgKHJlYWQtbGluZSBzb2NrZXQpKSkpKSkpCgo7OzsgYmFzaWMgVENQIHNvY2tldHMKCihk ZWZpbmUgbWFrZS1zb2NrZXQgc29ja2V0KQoKKGRlZmluZS1wdWJsaWMgKG1ha2UtY2xpZW50LXNv Y2tldCBwb3J0KQogIChsZXQgKChzb2NrZXQgKG1ha2Utc29ja2V0IFBGX0lORVQgU09DS19TVFJF QU0gMCkpKQogICAgKGNvbm5lY3Qgc29ja2V0IEFGX0lORVQgSU5BRERSX0xPT1BCQUNLIHBvcnQp CiAgICAoZmNudGwgc29ja2V0IEZfU0VURkwgKGxvZ2lvciBPX05PTkJMT0NLIChmY250bCBzb2Nr ZXQgRl9HRVRGTCkpKQogICAgc29ja2V0KSkKCihkZWZpbmUtcHVibGljIChtYWtlLXNlcnZlci1z b2NrZXQgcG9ydCkKICAobGV0ICgoc29ja2V0IChtYWtlLXNvY2tldCBQRl9JTkVUIFNPQ0tfU1RS RUFNIDApKSkKICAgIChiaW5kIHNvY2tldCAobWFrZS1zb2NrZXQtYWRkcmVzcyBBRl9JTkVUIElO QUREUl9BTlkgcG9ydCkpCiAgICAobGlzdGVuIHNvY2tldCAxMjgpCiAgICAoZmNudGwgc29ja2V0 IEZfU0VURkwgKGxvZ2lvciBPX05PTkJMT0NLIChmY250bCBzb2NrZXQgRl9HRVRGTCkpKQogICAg c29ja2V0KSkK --=_71601659c9a4a93e40da7d993b8cf26c Content-Transfer-Encoding: base64 Content-Type: text/plain; name=client.scm Content-Disposition: attachment; filename=client.scm; size=562 KGRlZmluZS1tb2R1bGUgKGNsaWVudCkpCgoodXNlLW1vZHVsZXMgKHJucnMgYnl0ZXZlY3RvcnMp KQoKKHVzZS1tb2R1bGVzIChhc3luYykpCgoKKHNldGxvY2FsZSBMQ19BTEwgIiIpCgoKKGRlZmlu ZSAoc2NtLT5zdHJpbmcgc2NtKQogIChjYWxsLXdpdGgtb3V0cHV0LXN0cmluZwogICAgKGxhbWJk YSAocG9ydCkKICAgICAgKHdyaXRlIHNjbSBwb3J0KSkpKQoKKGRlZmluZSBzY20tPmJ2IChjb21w b3NlIHN0cmluZy0+dXRmOCBzY20tPnN0cmluZykpICAKCihkZWZpbmUgKGNsaWVudCkKICAoZGVm aW5lIHNvY2tldCAobWFrZS1jbGllbnQtc29ja2V0IDEyMzQ1KSkKICAoc2VuZC1hbGwvIHNvY2tl dCAoc3RyaW5nLT51dGY4ICJow6lsbG8gd29ybGQiKSkKICAoc2VuZC1hbGwvIHNvY2tldCAjdnU4 KDApKQogIChzZW5kLWFsbC8gc29ja2V0IChzdHJpbmctPnV0ZjggInlvdSBhcmUgZnJlZSIpKQog IChzZW5kLWFsbC8gc29ja2V0ICN2dTgoMCkpCiAgKGNsb3NlIHNvY2tldCkKICAobG9vcC1zdG9w ISkpCgoobG9vcC1jYWxsLWxhdGVyIGNsaWVudCkKKGxvb3AtcnVuLWZvcmV2ZXIpCg== --=_71601659c9a4a93e40da7d993b8cf26c Content-Transfer-Encoding: base64 Content-Type: text/plain; name=server.scm Content-Disposition: attachment; filename=server.scm; size=417 KGRlZmluZS1tb2R1bGUgKHNlcnZlcikpCgoodXNlLW1vZHVsZXMgKHJucnMgYnl0ZXZlY3RvcnMp KQoKKHVzZS1tb2R1bGVzIChhc3luYykpCgoKKHNldGxvY2FsZSBMQ19BTEwgIiIpCgo7OyB2ZXJ5 IHNpbXBsZSBzZXJ2ZXIgc29ja2V0IGhlbHBlcgoKKGRlZmluZSAoc2VydmVyKQogIChsZXQqICgo c29jayAobWFrZS1zZXJ2ZXItc29ja2V0IDEyMzQ1KSkKICAgICAgICAgKGNsaWVudCAoY2FyIChh Y2NlcHQvIHNvY2spKSkpCiAgICAocGsgKHV0ZjgtPnN0cmluZyAocmVjdi1zb21lLyBjbGllbnQp KSkKICAgIChwayAodXRmOC0+c3RyaW5nIChyZWN2LXNvbWUvIGNsaWVudCkpKQogICAgKGNsb3Nl IGNsaWVudCkKICAgIChsb29wLXN0b3AhKSkpCgoKKGxvb3AtY2FsbC1sYXRlciBzZXJ2ZXIpCgoo bG9vcC1ydW4tZm9yZXZlcikK --=_71601659c9a4a93e40da7d993b8cf26c--