From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Julian Graham" Newsgroups: gmane.lisp.guile.devel Subject: Re: thread cancellation, take 2 Date: Wed, 17 Oct 2007 20:41:49 -0400 Message-ID: <2bc5f8210710171741k51d37e3eha7c1d798f8dec0e@mail.gmail.com> References: <2bc5f8210709200730q61d7973ft8d1da14889efb2f1@mail.gmail.com> <87abrhl604.fsf@laas.fr> <2bc5f8210709200836i1267bcc8qa066b4d27f2c3e2@mail.gmail.com> <2bc5f8210709222216rf7aa8ednd380fa8db2975073@mail.gmail.com> <87vea1oe70.fsf@chbouib.org> <2bc5f8210709231139x4ed56fc4q9ae28afdb707457b@mail.gmail.com> <87k5qg2ssf.fsf@laas.fr> <2bc5f8210709240839k3069f572ne54d10f44680671@mail.gmail.com> <87ejgmnke4.fsf@laas.fr> <2bc5f8210709261939g35dbdbc3g7823dcf3ca843083@mail.gmail.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_27023_11450736.1192668109521" X-Trace: ger.gmane.org 1192668129 17525 80.91.229.12 (18 Oct 2007 00:42:09 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 18 Oct 2007 00:42:09 +0000 (UTC) Cc: guile-devel@gnu.org To: "=?ISO-8859-1?Q?Ludovic_Court=E8s?=" Original-X-From: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Thu Oct 18 02:42:09 2007 Return-path: Envelope-to: guile-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1IiJSh-0000Vh-Gy for guile-devel@m.gmane.org; Thu, 18 Oct 2007 02:42:08 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IiJSZ-0006XB-BL for guile-devel@m.gmane.org; Wed, 17 Oct 2007 20:41:59 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IiJSW-0006TV-4h for guile-devel@gnu.org; Wed, 17 Oct 2007 20:41:56 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IiJSS-0006Pg-Vb for guile-devel@gnu.org; Wed, 17 Oct 2007 20:41:55 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IiJSS-0006Pd-PF for guile-devel@gnu.org; Wed, 17 Oct 2007 20:41:52 -0400 Original-Received: from fk-out-0910.google.com ([209.85.128.191]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1IiJSR-0002ic-UW for guile-devel@gnu.org; Wed, 17 Oct 2007 20:41:52 -0400 Original-Received: by fk-out-0910.google.com with SMTP id 19so6156fkr for ; Wed, 17 Oct 2007 17:41:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; bh=Yc/QuGBNNFb7GB3RPpGRET6f82dVF7pUctMPUHS/id8=; b=LJTC8JCHJKylcMHcJ1EFlJLCgCOsfC/LtGL/7dKKrGs/iW1OaeSft69w4a0vs3rx27mzTQLwEK5kVPInpDiMvuMtzgyvc8Mgd7RctehIkWdnBYImWax/NDKXogtwsuLST8AdtDX3OlHrmfYg05kyEcL9cKYPt3q9TwhhrRHPl6w= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:references; b=p1RUIIcJBnXPt5g1RERNRadWFerMFXjxchhK6ehf825n+RjD6IUy4pLbMlAwsQvmdoWG/AZKzZMGxkzhAUcUelo3MMMvMtxCg26ZMup998bvTu0hmHyG6yxYhY4lAAcM5RzSiEQN9RSL1zWxKcWyApLXwcNZx0MaVvi8tZZJZL0= Original-Received: by 10.82.114.3 with SMTP id m3mr16833419buc.1192668109526; Wed, 17 Oct 2007 17:41:49 -0700 (PDT) Original-Received: by 10.82.176.12 with HTTP; Wed, 17 Oct 2007 17:41:49 -0700 (PDT) In-Reply-To: <2bc5f8210709261939g35dbdbc3g7823dcf3ca843083@mail.gmail.com> X-detected-kernel: by monty-python.gnu.org: Linux 2.6 (newer, 2) X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Errors-To: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.devel:6848 Archived-At: ------=_Part_27023_11450736.1192668109521 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline While testing some of the changes I made for SRFI-18 support, I noticed a couple of deadlocks in my thread cancellation code. I've updated my thread cancellation patch to address them. Specifically: * If a thread was interrupted by a cancellation while it was in Guile mode (i.e., holding its heap mutex), a GC in another thread could cause a deadlock by grabbing the thread admin mutex and then attempting to seize the canceled thread's heap mutex -- the canceled thread only releases its heap mutex once during cancellation (the heap mutexes are recursive). I've added a pthread cleanup handler to deal with this case by releasing a thread's heap mutex before beginning the exit procedure. * If the signal delivery thread got launched a little bit too late, it could be holding its startup mutex and then attempt to grab the thread_admin_mutex, which could be held by a thread that was in the process of being canceled and which was trying to obtain the signal delivery thread's startup mutex. I've resolved this by forcing the signal delivery thread to start (if it hasn't already) during thread cancellation of any thread. Find attached a new version of the thread cancellation patch. Regards, Julian ------=_Part_27023_11450736.1192668109521 Content-Type: application/octet-stream; name="thread-cancellation.HEAD.patch-20071017" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="thread-cancellation.HEAD.patch-20071017"; filename="thread-cancellation.HEAD.patch-20071017" X-Attachment-Id: f_f7wjjxry SW5kZXg6IGxpYmd1aWxlL251bGwtdGhyZWFkcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9zb3Vy Y2VzL2d1aWxlL2d1aWxlL2d1aWxlLWNvcmUvbGliZ3VpbGUvbnVsbC10aHJlYWRzLmgsdgpyZXRy aWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtYSAtdSAtcjEuMTIgbnVsbC10aHJlYWRzLmgKLS0t IGxpYmd1aWxlL251bGwtdGhyZWFkcy5oCTE3IEFwciAyMDA2IDAwOjA1OjQwIC0wMDAwCTEuMTIK KysrIGxpYmd1aWxlL251bGwtdGhyZWFkcy5oCTE4IE9jdCAyMDA3IDAwOjExOjAwIC0wMDAwCkBA IC00MSw2ICs0MSw5IEBACiAjZGVmaW5lIHNjbV9pX3B0aHJlYWRfY3JlYXRlKHQsYSxmLGQpICAg ICAgICgqKHQpPTAsICh2b2lkKShmKSwgRU5PU1lTKQogI2RlZmluZSBzY21faV9wdGhyZWFkX2Rl dGFjaCh0KSAgICAgICAgICAgICBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHNjbV9pX3B0aHJl YWRfZXhpdCh2KSAgICAgICAgICAgICAgIGV4aXQoMCkKKyNkZWZpbmUgc2NtX2lfcHRocmVhZF9j YW5jZWwodCkgICAgICAgICAgICAgMAorI2RlZmluZSBzY21faV9wdGhyZWFkX2NsZWFudXBfcHVz aCh0LHYpICAgICAwCisjZGVmaW5lIHNjbV9pX3B0aHJlYWRfY2xlYW51cF9wb3AoZSkgICAgICAg IDAKICNkZWZpbmUgc2NtX2lfc2NoZWRfeWllbGQoKSAgICAgICAgICAgICAgICAgMAogCiAvKiBT aWduYWxzCkluZGV4OiBsaWJndWlsZS9wdGhyZWFkLXRocmVhZHMuaAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvc291cmNlcy9ndWlsZS9ndWlsZS9ndWlsZS1jb3JlL2xpYmd1aWxlL3B0aHJlYWQtdGhy ZWFkcy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2CmRpZmYgLWEgLXUgLXIxLjE2IHB0aHJl YWQtdGhyZWFkcy5oCi0tLSBsaWJndWlsZS9wdGhyZWFkLXRocmVhZHMuaAkxMCBPY3QgMjAwNyAx Njo0NjoyNiAtMDAwMAkxLjE2CisrKyBsaWJndWlsZS9wdGhyZWFkLXRocmVhZHMuaAkxOCBPY3Qg MjAwNyAwMDoxMTowMCAtMDAwMApAQCAtMzUsNiArMzUsOSBAQAogI2RlZmluZSBzY21faV9wdGhy ZWFkX2NyZWF0ZSAgICAgICAgICAgICAgICBwdGhyZWFkX2NyZWF0ZQogI2RlZmluZSBzY21faV9w dGhyZWFkX2RldGFjaCAgICAgICAgICAgICAgICBwdGhyZWFkX2RldGFjaAogI2RlZmluZSBzY21f aV9wdGhyZWFkX2V4aXQgICAgICAgICAgICAgICAgICBwdGhyZWFkX2V4aXQKKyNkZWZpbmUgc2Nt X2lfcHRocmVhZF9jYW5jZWwgICAgICAgICAgICAgICAgcHRocmVhZF9jYW5jZWwKKyNkZWZpbmUg c2NtX2lfcHRocmVhZF9jbGVhbnVwX3B1c2ggICAgICAgICAgcHRocmVhZF9jbGVhbnVwX3B1c2gK KyNkZWZpbmUgc2NtX2lfcHRocmVhZF9jbGVhbnVwX3BvcCAgICAgICAgICAgcHRocmVhZF9jbGVh bnVwX3BvcAogI2RlZmluZSBzY21faV9zY2hlZF95aWVsZCAgICAgICAgICAgICAgICAgICBzY2hl ZF95aWVsZAogCiAvKiBTaWduYWxzCkluZGV4OiBsaWJndWlsZS9zY21zaWdzLmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpSQ1MgZmlsZTogL3NvdXJjZXMvZ3VpbGUvZ3VpbGUvZ3VpbGUtY29yZS9saWJndWlsZS9zY21z aWdzLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTcKZGlmZiAtYSAtdSAtcjEuOTcgc2Ntc2ln cy5jCi0tLSBsaWJndWlsZS9zY21zaWdzLmMJNyBNYXIgMjAwNyAyMzoxMDo1MiAtMDAwMAkxLjk3 CisrKyBsaWJndWlsZS9zY21zaWdzLmMJMTggT2N0IDIwMDcgMDA6MTE6MDEgLTAwMDAKQEAgLTMz LDYgKzMzLDcgQEAKICNpbmNsdWRlICJsaWJndWlsZS9ldmFsLmgiCiAjaW5jbHVkZSAibGliZ3Vp bGUvcm9vdC5oIgogI2luY2x1ZGUgImxpYmd1aWxlL3ZlY3RvcnMuaCIKKyNpbmNsdWRlICJsaWJn dWlsZS90aHJlYWRzLmgiCiAKICNpbmNsdWRlICJsaWJndWlsZS92YWxpZGF0ZS5oIgogI2luY2x1 ZGUgImxpYmd1aWxlL3NjbXNpZ3MuaCIKQEAgLTk5LDYgKzEwMCw5IEBACiBzdGF0aWMgU0NNIHNp Z25hbF9oYW5kbGVyX2FzeW5jczsKIHN0YXRpYyBTQ00gc2lnbmFsX2hhbmRsZXJfdGhyZWFkczsK IAorc2NtX2lfdGhyZWFkICpzY21faV9zaWduYWxfZGVsaXZlcnlfdGhyZWFkOworc3RhdGljIHNj bV9pX3B0aHJlYWRfbXV0ZXhfdCBzaWduYWxfZGVsaXZlcnlfdGhyZWFkX211dGV4OworCiAvKiBz YXZlcyB0aGUgb3JpZ2luYWwgQyBoYW5kbGVycywgd2hlbiBhIG5ldyBoYW5kbGVyIGlzIGluc3Rh bGxlZC4KICAgIHNldCB0byBTSUdfRVJSIGlmIHRoZSBvcmlnaW5hbCBoYW5kbGVyIGlzIGluc3Rh bGxlZC4gICovCiAjaWZkZWYgSEFWRV9TSUdBQ1RJT04KQEAgLTE4NSwyNCArMTg5LDI5IEBACiAJ ICBpZiAoc2NtX2lzX3RydWUgKGgpKQogCSAgICBzY21fc3lzdGVtX2FzeW5jX21hcmtfZm9yX3Ro cmVhZCAoaCwgdCk7CiAJfQorICAgICAgZWxzZSBpZiAobiA9PSAwKQorCWJyZWFrOyAvKiB0aGUg c2lnbmFsIHBpcGUgd2FzIGNsb3NlZC4gKi8KICAgICAgIGVsc2UgaWYgKG4gPCAwICYmIGVycm5v ICE9IEVJTlRSKQogCXBlcnJvciAoImVycm9yIGluIHNpZ25hbCBkZWxpdmVyeSB0aHJlYWQiKTsK ICAgICB9CiAKLSAgcmV0dXJuIFNDTV9VTlNQRUNJRklFRDsJLyogbm90IHJlYWNoZWQgKi8KKyAg cmV0dXJuIFNDTV9VTlNQRUNJRklFRDsgLyogbm90IHJlYWNoZWQgdW5sZXNzIGFsbCBvdGhlciB0 aHJlYWRzIGV4aXRlZCAqLwogfQogCiBzdGF0aWMgdm9pZAogc3RhcnRfc2lnbmFsX2RlbGl2ZXJ5 X3RocmVhZCAodm9pZCkKIHsKKyAgc2NtX2lfcHRocmVhZF9tdXRleF9sb2NrICgmc2lnbmFsX2Rl bGl2ZXJ5X3RocmVhZF9tdXRleCk7CiAgIGlmIChwaXBlIChzaWduYWxfcGlwZSkgIT0gMCkKICAg ICBzY21fc3lzZXJyb3IgKE5VTEwpOwotICBzY21fc3Bhd25fdGhyZWFkIChzaWduYWxfZGVsaXZl cnlfdGhyZWFkLCBOVUxMLAotCQkgICAgc2NtX2hhbmRsZV9ieV9tZXNzYWdlLCAic2lnbmFsIGRl bGl2ZXJ5IHRocmVhZCIpOworICBzY21faV9zaWduYWxfZGVsaXZlcnlfdGhyZWFkID0gU0NNX0lf VEhSRUFEX0RBVEEgCisgICAgKHNjbV9zcGF3bl90aHJlYWQgKHNpZ25hbF9kZWxpdmVyeV90aHJl YWQsIE5VTEwsCisJCSAgICAgICBzY21faGFuZGxlX2J5X21lc3NhZ2UsICJzaWduYWwgZGVsaXZl cnkgdGhyZWFkIikpOworICBzY21faV9wdGhyZWFkX211dGV4X3VubG9jayAoJnNpZ25hbF9kZWxp dmVyeV90aHJlYWRfbXV0ZXgpOyAgCiB9CiAKLXN0YXRpYyB2b2lkCi1lbnN1cmVfc2lnbmFsX2Rl bGl2ZXJ5X3RocmVhZCAoKQordm9pZAorc2NtX2lfZW5zdXJlX3NpZ25hbF9kZWxpdmVyeV90aHJl YWQgKCkKIHsKICAgc3RhdGljIHNjbV9pX3B0aHJlYWRfb25jZV90IG9uY2UgPSBTQ01fSV9QVEhS RUFEX09OQ0VfSU5JVDsKICAgc2NtX2lfcHRocmVhZF9vbmNlICgmb25jZSwgc3RhcnRfc2lnbmFs X2RlbGl2ZXJ5X3RocmVhZCk7CkBAIC0yMjgsOCArMjM3LDggQEAKICNlbmRpZgogfQogCi1zdGF0 aWMgdm9pZAotZW5zdXJlX3NpZ25hbF9kZWxpdmVyeV90aHJlYWQgKCkKK3ZvaWQKK3NjbV9pX2Vu c3VyZV9zaWduYWxfZGVsaXZlcnlfdGhyZWFkICgpCiB7CiAgIHJldHVybjsKIH0KQEAgLTMzMiw3 ICszNDEsNyBAQAogCVNDTV9NSVNDX0VSUk9SICgidGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCIs IFNDTV9FT0wpOwogICAgIH0KIAotICBlbnN1cmVfc2lnbmFsX2RlbGl2ZXJ5X3RocmVhZCAoKTsK KyAgc2NtX2lfZW5zdXJlX3NpZ25hbF9kZWxpdmVyeV90aHJlYWQgKCk7CiAKICAgU0NNX0NSSVRJ Q0FMX1NFQ1RJT05fU1RBUlQ7CiAgIG9sZF9oYW5kbGVyID0gU0NNX1NJTVBMRV9WRUNUT1JfUkVG ICgqc2lnbmFsX2hhbmRsZXJzLCBjc2lnKTsKQEAgLTY1MywxMCArNjYyLDI5IEBACiAMCiAKIHZv aWQKK3NjbV9pX2Nsb3NlX3NpZ25hbF9waXBlKCkKK3sKKyAgLyogc2lnbmFsX2RlbGl2ZXJ5X3Ro cmVhZF9tdXRleCB3aWxsIG9ubHkgYmUgbG9ja2VkIHdoaWxlIHRoZSBzaWduYWwKKyAgICAgZGVs aXZlcnkgdGhyZWFkIGlzIGJlaW5nIGxhdW5jaGVkLiBUaGUgdGhyZWFkIHRoYXQgY2FsbHMgdGhp cyBmdW5jdGlvbgorICAgICBpcyBhbHJlYWR5IGhvbGRpbmcgdGhlIHRocmVhZCBhZG1pbiBtdXRl eCwgc28gaWYgdGhlIGRlbGl2ZXJ5IHRocmVhZAorICAgICBoYXNuJ3QgYmVlbiBsYXVuY2hlZCBh dCB0aGlzIHBvaW50LCBpdCBuZXZlciB3aWxsIGJlIGJlZm9yZSBzaHV0ZG93bi4KKyAgICovCisg IHNjbV9pX3B0aHJlYWRfbXV0ZXhfbG9jayAoJnNpZ25hbF9kZWxpdmVyeV90aHJlYWRfbXV0ZXgp OworICBpZiAoc2NtX2lfc2lnbmFsX2RlbGl2ZXJ5X3RocmVhZCAhPSBOVUxMKSAKKyAgICB7Cisg ICAgICBjbG9zZSAoc2lnbmFsX3BpcGVbMV0pOworICAgIH0KKyAgc2NtX2lfcHRocmVhZF9tdXRl eF91bmxvY2sgKCZzaWduYWxfZGVsaXZlcnlfdGhyZWFkX211dGV4KTsKK30KKwordm9pZAogc2Nt X2luaXRfc2Ntc2lncyAoKQogewogICBpbnQgaTsKIAorICBzY21faV9wdGhyZWFkX211dGV4X2lu aXQgKCZzaWduYWxfZGVsaXZlcnlfdGhyZWFkX211dGV4LCBOVUxMKTsKKyAgc2NtX2lfc2lnbmFs X2RlbGl2ZXJ5X3RocmVhZCA9IE5VTEw7CisKICAgc2lnbmFsX2hhbmRsZXJzID0KICAgICBTQ01f VkFSSUFCTEVfTE9DIChzY21fY19kZWZpbmUgKCJzaWduYWwtaGFuZGxlcnMiLAogCQkJCSAgc2Nt X2NfbWFrZV92ZWN0b3IgKE5TSUcsIFNDTV9CT09MX0YpKSk7CkluZGV4OiBsaWJndWlsZS9zY21z aWdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3NvdXJjZXMvZ3VpbGUvZ3VpbGUvZ3VpbGUtY29y ZS9saWJndWlsZS9zY21zaWdzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTcKZGlmZiAtYSAt dSAtcjEuMTcgc2Ntc2lncy5oCi0tLSBsaWJndWlsZS9zY21zaWdzLmgJMTcgQXByIDIwMDYgMDA6 MDU6NDAgLTAwMDAJMS4xNworKysgbGliZ3VpbGUvc2Ntc2lncy5oCTE4IE9jdCAyMDA3IDAwOjEx OjAxIC0wMDAwCkBAIC00MSw2ICs0MSw5IEBACiBTQ01fQVBJIFNDTSBzY21fcmFpc2UgKFNDTSBz aWcpOwogU0NNX0FQSSB2b2lkIHNjbV9pbml0X3NjbXNpZ3MgKHZvaWQpOwogCitTQ01fQVBJIHZv aWQgc2NtX2lfY2xvc2Vfc2lnbmFsX3BpcGUgKHZvaWQpOworU0NNX0FQSSB2b2lkIHNjbV9pX2Vu c3VyZV9zaWduYWxfZGVsaXZlcnlfdGhyZWFkICh2b2lkKTsKKwogI2VuZGlmICAvKiBTQ01fU0NN U0lHU19IICovCiAKIC8qCkluZGV4OiBsaWJndWlsZS90aHJlYWRzLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL3NvdXJjZXMvZ3VpbGUvZ3VpbGUvZ3VpbGUtY29yZS9saWJndWlsZS90aHJlYWRzLmMs dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODkKZGlmZiAtYSAtdSAtcjEuODkgdGhyZWFkcy5jCi0t LSBsaWJndWlsZS90aHJlYWRzLmMJMiBPY3QgMjAwNyAxNjowNjoyNSAtMDAwMAkxLjg5CisrKyBs aWJndWlsZS90aHJlYWRzLmMJMTggT2N0IDIwMDcgMDA6MTE6MDMgLTAwMDAKQEAgLTQ4LDYgKzQ4 LDcgQEAKICNpbmNsdWRlICJsaWJndWlsZS9jb250aW51YXRpb25zLmgiCiAjaW5jbHVkZSAibGli Z3VpbGUvZ2MuaCIKICNpbmNsdWRlICJsaWJndWlsZS9pbml0LmgiCisjaW5jbHVkZSAibGliZ3Vp bGUvc2Ntc2lncy5oIgogCiAjaWZkZWYgX19NSU5HVzMyX18KICNpZm5kZWYgRVRJTUVET1VUCkBA IC0xMzEsNiArMTMyLDcgQEAKIHsKICAgc2NtX2lfdGhyZWFkICp0ID0gU0NNX0lfVEhSRUFEX0RB VEEgKG9iaik7CiAgIHNjbV9nY19tYXJrICh0LT5yZXN1bHQpOworICBzY21fZ2NfbWFyayAodC0+ Y2xlYW51cF9oYW5kbGVyKTsKICAgc2NtX2djX21hcmsgKHQtPmpvaW5fcXVldWUpOwogICBzY21f Z2NfbWFyayAodC0+ZHlud2luZHMpOwogICBzY21fZ2NfbWFyayAodC0+YWN0aXZlX2FzeW5jcyk7 CkBAIC00MDUsNiArNDA3LDggQEAKIAogc3RhdGljIFNDTSBzY21faV9kZWZhdWx0X2R5bmFtaWNf c3RhdGU7CiAKK2V4dGVybiBzY21faV90aHJlYWQgKnNjbV9pX3NpZ25hbF9kZWxpdmVyeV90aHJl YWQ7CisKIC8qIFBlcmZvcm0gZmlyc3Qgc3RhZ2Ugb2YgdGhyZWFkIGluaXRpYWxpc2F0aW9uLCBp biBub24tZ3VpbGUgbW9kZS4KICAqLwogc3RhdGljIHZvaWQKQEAgLTQxNSw2ICs0MTksNyBAQAog ICB0LT5wdGhyZWFkID0gc2NtX2lfcHRocmVhZF9zZWxmICgpOwogICB0LT5oYW5kbGUgPSBTQ01f Qk9PTF9GOwogICB0LT5yZXN1bHQgPSBTQ01fQk9PTF9GOworICB0LT5jbGVhbnVwX2hhbmRsZXIg PSBTQ01fQk9PTF9GOwogICB0LT5qb2luX3F1ZXVlID0gU0NNX0VPTDsKICAgdC0+ZHluYW1pY19z dGF0ZSA9IFNDTV9CT09MX0Y7CiAgIHQtPmR5bndpbmRzID0gU0NNX0VPTDsKQEAgLTQzNCw2ICs0 MzksNyBAQAogICBzY21faV9wdGhyZWFkX211dGV4X2luaXQgKCZ0LT5oZWFwX211dGV4LCBOVUxM KTsKICAgdC0+Y2xlYXJfZnJlZWxpc3RzX3AgPSAwOwogICB0LT5nY19ydW5uaW5nX3AgPSAwOwor ICB0LT5jYW5jZWxlZCA9IDA7CiAgIHQtPmV4aXRlZCA9IDA7CiAKICAgdC0+ZnJlZWxpc3QgPSBT Q01fRU9MOwpAQCAtNDc4LDcgKzQ4NCwxNiBAQAogc3RhdGljIHZvaWQgKgogZG9fdGhyZWFkX2V4 aXQgKHZvaWQgKnYpCiB7Ci0gIHNjbV9pX3RocmVhZCAqdCA9IChzY21faV90aHJlYWQgKil2Owor ICBzY21faV90aHJlYWQgKnQgPSAoc2NtX2lfdGhyZWFkICopIHY7CisKKyAgaWYgKCFzY21faXNf ZmFsc2UgKHQtPmNsZWFudXBfaGFuZGxlcikpCisgICAgeworICAgICAgU0NNIHB0ciA9IHQtPmNs ZWFudXBfaGFuZGxlcjsKKyAgICAgIHQtPmNsZWFudXBfaGFuZGxlciA9IFNDTV9CT09MX0Y7Cisg ICAgICB0LT5yZXN1bHQgPSBzY21faW50ZXJuYWxfY2F0Y2ggKFNDTV9CT09MX1QsIAorCQkJCSAg ICAgIChzY21fdF9jYXRjaF9ib2R5KSBzY21fY2FsbF8wLCBwdHIsCisJCQkJICAgICAgc2NtX2hh bmRsZV9ieV9tZXNzYWdlX25vZXhpdCwgTlVMTCk7CisgICAgfQogCiAgIHNjbV9pX3NjbV9wdGhy ZWFkX211dGV4X2xvY2sgKCZ0aHJlYWRfYWRtaW5fbXV0ZXgpOwogCkBAIC00ODksNiArNTA0LDcg QEAKICAgICA7CiAKICAgc2NtX2lfcHRocmVhZF9tdXRleF91bmxvY2sgKCZ0aHJlYWRfYWRtaW5f bXV0ZXgpOworCiAgIHJldHVybiBOVUxMOwogfQogCkBAIC00OTYsMTAgKzUxMiwxNSBAQAogb25f dGhyZWFkX2V4aXQgKHZvaWQgKnYpCiB7CiAgIC8qIFRoaXMgaGFuZGxlciBpcyBleGVjdXRlZCBp biBub24tZ3VpbGUgbW9kZS4gICovCi0gIHNjbV9pX3RocmVhZCAqdCA9IChzY21faV90aHJlYWQg Kil2LCAqKnRwOworICBzY21faV90aHJlYWQgKnQgPSAoc2NtX2lfdGhyZWFkICopIHYsICoqdHA7 CiAKICAgc2NtX2lfcHRocmVhZF9zZXRzcGVjaWZpYyAoc2NtX2lfdGhyZWFkX2tleSwgdik7CiAK KyAgLyogRW5zdXJlIHRoZSBzaWduYWwgaGFuZGxpbmcgdGhyZWFkIGhhcyBiZWVuIGxhdW5jaGVk LCBiZWNhdXNlIHdlIG1pZ2h0IGJlIAorICAgICBzaHV0dGluZyBpdCBkb3duLiAqLworCisgIHNj bV9pX2Vuc3VyZV9zaWduYWxfZGVsaXZlcnlfdGhyZWFkICgpOworCiAgIC8qIFVuYmxvY2tpbmcg dGhlIGpvaW5pbmcgdGhyZWFkcyBuZWVkcyB0byBoYXBwZW4gaW4gZ3VpbGUgbW9kZQogICAgICBz aW5jZSB0aGUgcXVldWUgaXMgYSBTQ00gZGF0YSBzdHJ1Y3R1cmUuICAqLwogICBzY21fd2l0aF9n dWlsZSAoZG9fdGhyZWFkX2V4aXQsIHYpOwpAQCAtNTE1LDYgKzUzNiwxNyBAQAogCWJyZWFrOwog ICAgICAgfQogICB0aHJlYWRfY291bnQtLTsKKworICAvKiBJZiB0aGVyZSdzIG9ubHkgb25lIG90 aGVyIHRocmVhZCwgaXQgY291bGQgYmUgdGhlIHNpZ25hbCBkZWxpdmVyeSB0aHJlYWQsCisgICAg IHNvIHdlIG5lZWQgdG8gbm90aWZ5IGl0IHRvIHNodXQgZG93biBieSBjbG9zaW5nIGl0cyByZWFk IHBpcGUuIElmIGl0J3Mgbm90CisgICAgIHRoZSBzaWduYWwgZGVsaXZlcnkgdGhyZWFkLCB0aGVu IGNsb3NpbmcgdGhlIHJlYWQgcGlwZSBpc24ndCBnb2luZyB0byAKKyAgICAgaHVydC4KKyAgKi8K KyAgaWYgKHRocmVhZF9jb3VudCA8PSAxKQorICAgIHsKKyAgICAgIHNjbV9pX2Nsb3NlX3NpZ25h bF9waXBlICgpOworICAgIH0KKyAgCiAgIHNjbV9pX3B0aHJlYWRfbXV0ZXhfdW5sb2NrICgmdGhy ZWFkX2FkbWluX211dGV4KTsKIAogICBzY21faV9wdGhyZWFkX3NldHNwZWNpZmljIChzY21faV90 aHJlYWRfa2V5LCBOVUxMKTsKQEAgLTY4NCwxNyArNzE2LDMwIEBACiAJCQkJICAgICAgc2NtX2lf ZGVmYXVsdF9keW5hbWljX3N0YXRlKTsKIH0KIAorc3RhdGljIHZvaWQKK3NjbV9sZWF2ZV9ndWls ZV9jbGVhbnVwICh2b2lkICp4KQoreworICBzY21fbGVhdmVfZ3VpbGUgKCk7Cit9CisKIHZvaWQg Kgotc2NtX2lfd2l0aF9ndWlsZV9hbmRfcGFyZW50ICh2b2lkICooKmZ1bmMpKHZvaWQgKiksIHZv aWQgKmRhdGEsCi0JCQkgICAgIFNDTSBwYXJlbnQpCitzY21faV93aXRoX2d1aWxlX2FuZF9wYXJl bnQgKHZvaWQgKigqZnVuYykodm9pZCAqKSwgdm9pZCAqZGF0YSwgU0NNIHBhcmVudCkKIHsKICAg dm9pZCAqcmVzOwogICBpbnQgcmVhbGx5X2VudGVyZWQ7CiAgIFNDTV9TVEFDS0lURU0gYmFzZV9p dGVtOworCiAgIHJlYWxseV9lbnRlcmVkID0gc2NtX2lfaW5pdF90aHJlYWRfZm9yX2d1aWxlICgm YmFzZV9pdGVtLCBwYXJlbnQpOwotICByZXMgPSBzY21fY193aXRoX2NvbnRpbnVhdGlvbl9iYXJy aWVyIChmdW5jLCBkYXRhKTsKICAgaWYgKHJlYWxseV9lbnRlcmVkKQotICAgIHNjbV9sZWF2ZV9n dWlsZSAoKTsKKyAgICB7CisgICAgICBzY21faV9wdGhyZWFkX2NsZWFudXBfcHVzaCAoc2NtX2xl YXZlX2d1aWxlX2NsZWFudXAsIE5VTEwpOworICAgICAgcmVzID0gc2NtX2Nfd2l0aF9jb250aW51 YXRpb25fYmFycmllciAoZnVuYywgZGF0YSk7CisgICAgICBzY21faV9wdGhyZWFkX2NsZWFudXBf cG9wICgwKTsKKyAgICAgIHNjbV9sZWF2ZV9ndWlsZSAoKTsKKyAgICB9CisgIGVsc2UgCisgICAg cmVzID0gc2NtX2Nfd2l0aF9jb250aW51YXRpb25fYmFycmllciAoZnVuYywgZGF0YSk7CisKICAg cmV0dXJuIHJlczsKIH0KIApAQCAtODgwLDYgKzkyNSw3NCBAQAogfQogI3VuZGVmIEZVTkNfTkFN RQogCitTQ01fREVGSU5FIChzY21fY2FuY2VsX3RocmVhZCwgImNhbmNlbC10aHJlYWQiLCAxLCAw LCAwLAorCSAgICAoU0NNIHRocmVhZCksCisiQXN5bmNocm9ub3VzbHkgZm9yY2UgdGhlIHRhcmdl dCBAdmFye3RocmVhZH0gdG8gdGVybWluYXRlLiBAdmFye3RocmVhZH0gIgorImNhbm5vdCBiZSB0 aGUgY3VycmVudCB0aHJlYWQsIGFuZCBpZiBAdmFye3RocmVhZH0gaGFzIGFscmVhZHkgdGVybWlu YXRlZCBvciAiCisiYmVlbiBzaWduYWxlZCB0byB0ZXJtaW5hdGUsIHRoaXMgZnVuY3Rpb24gaXMg YSBuby1vcC4iKQorI2RlZmluZSBGVU5DX05BTUUgc19zY21fY2FuY2VsX3RocmVhZAoreworICBz Y21faV90aHJlYWQgKnQgPSBOVUxMOworCisgIFNDTV9WQUxJREFURV9USFJFQUQgKDEsIHRocmVh ZCk7CisgIHQgPSBTQ01fSV9USFJFQURfREFUQSAodGhyZWFkKTsKKyAgc2NtX2lfc2NtX3B0aHJl YWRfbXV0ZXhfbG9jayAoJnRocmVhZF9hZG1pbl9tdXRleCk7CisgIGlmICghdC0+Y2FuY2VsZWQp CisgICAgeworICAgICAgdC0+Y2FuY2VsZWQgPSAxOworICAgICAgc2NtX2lfcHRocmVhZF9tdXRl eF91bmxvY2sgKCZ0aHJlYWRfYWRtaW5fbXV0ZXgpOworICAgICAgc2NtX2lfcHRocmVhZF9jYW5j ZWwgKHQtPnB0aHJlYWQpOworICAgIH0KKyAgZWxzZSAKKyAgICB7CisgICAgICBzY21faV9wdGhy ZWFkX211dGV4X3VubG9jayAoJnRocmVhZF9hZG1pbl9tdXRleCk7CisgICAgfQorICByZXR1cm4g U0NNX1VOU1BFQ0lGSUVEOworfQorI3VuZGVmIEZVTkNfTkFNRQorCitTQ01fREVGSU5FIChzY21f c2V0X3RocmVhZF9jbGVhbnVwX3gsICJzZXQtdGhyZWFkLWNsZWFudXAhIiwgMiwgMCwgMCwKKwkg ICAgKFNDTSB0aHJlYWQsIFNDTSBwcm9jKSwKKyJTZXQgdGhlIHRodW5rIEB2YXJ7cHJvY30gYXMg dGhlIGNsZWFudXAgaGFuZGxlciBmb3IgdGhlIHRocmVhZCBAdmFye3RocmVhZH0uICIKKyJUaGlz IGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgdGhyZWFkIGV4aXRzLiIpCisjZGVmaW5l IEZVTkNfTkFNRSBzX3NjbV9zZXRfdGhyZWFkX2NsZWFudXBfeAoreworICBzY21faV90aHJlYWQg KnQ7CisKKyAgU0NNX1ZBTElEQVRFX1RIUkVBRCAoMSwgdGhyZWFkKTsKKyAgaWYgKHNjbV9pc190 cnVlIChwcm9jKSAmJiBzY21faXNfZmFsc2UgKHNjbV90aHVua19wIChwcm9jKSkpICAgIAorICAg IHsKKyAgICAgIFNDTV9NSVNDX0VSUk9SICgicHJvYyBtdXN0IGJlIGEgdGh1bmsiLCBTQ01fRU9M KTsKKyAgICB9CisKKyAgc2NtX2lfcHRocmVhZF9tdXRleF9sb2NrICgmdGhyZWFkX2FkbWluX211 dGV4KTsKKyAgdCA9IFNDTV9JX1RIUkVBRF9EQVRBICh0aHJlYWQpOworICBpZiAoISh0LT5leGl0 ZWQgfHwgdC0+Y2FuY2VsZWQpKQorICAgIHsKKyAgICAgIHQtPmNsZWFudXBfaGFuZGxlciA9IHBy b2M7CisgICAgfQorICBzY21faV9wdGhyZWFkX211dGV4X3VubG9jayAoJnRocmVhZF9hZG1pbl9t dXRleCk7CisgIHJldHVybiBTQ01fVU5TUEVDSUZJRUQ7Cit9CisjdW5kZWYgRlVOQ19OQU1FCisK K1NDTV9ERUZJTkUgKHNjbV9jdXJyZW50X3RocmVhZF9jbGVhbnVwLCAidGhyZWFkLWNsZWFudXAi LCAxLCAwLCAwLAorCSAgICAoU0NNIHRocmVhZCksCisiUmV0dXJuIHRoZSBjbGVhbnVwIGhhbmRs ZXIgaW5zdGFsbGVkIGZvciB0aGUgdGhyZWFkIEB2YXJ7dGhyZWFkfS4iKQorI2RlZmluZSBGVU5D X05BTUUgc19zY21fY3VycmVudF90aHJlYWRfY2xlYW51cAoreworICBzY21faV90aHJlYWQgKnQ7 CisgIFNDTSByZXQ7CisKKyAgU0NNX1ZBTElEQVRFX1RIUkVBRCAoMSwgdGhyZWFkKTsKKyAgc2Nt X2lfcHRocmVhZF9tdXRleF9sb2NrICgmdGhyZWFkX2FkbWluX211dGV4KTsKKyAgdCA9IFNDTV9J X1RIUkVBRF9EQVRBICh0aHJlYWQpOworICByZXQgPSAodC0+ZXhpdGVkIHx8IHQtPmNhbmNlbGVk KSA/IFNDTV9CT09MX0YgOiB0LT5jbGVhbnVwX2hhbmRsZXI7CisgIHNjbV9pX3B0aHJlYWRfbXV0 ZXhfdW5sb2NrICgmdGhyZWFkX2FkbWluX211dGV4KTsKKyAgcmV0dXJuIHJldDsKK30KKyN1bmRl ZiBGVU5DX05BTUUKKwogU0NNX0RFRklORSAoc2NtX2pvaW5fdGhyZWFkLCAiam9pbi10aHJlYWQi LCAxLCAwLCAwLAogCSAgICAoU0NNIHRocmVhZCksCiAiU3VzcGVuZCBleGVjdXRpb24gb2YgdGhl IGNhbGxpbmcgdGhyZWFkIHVudGlsIHRoZSB0YXJnZXQgQHZhcnt0aHJlYWR9ICIKQEAgLTE1Mzcs OCArMTY1MCwxMSBAQAogICBsID0gJmxpc3Q7CiAgIGZvciAodCA9IGFsbF90aHJlYWRzOyB0ICYm IG4gPiAwOyB0ID0gdC0+bmV4dF90aHJlYWQpCiAgICAgewotICAgICAgU0NNX1NFVENBUiAoKmws IHQtPmhhbmRsZSk7Ci0gICAgICBsID0gU0NNX0NEUkxPQyAoKmwpOworICAgICAgaWYgKHQgIT0g c2NtX2lfc2lnbmFsX2RlbGl2ZXJ5X3RocmVhZCkKKwl7CisJICBTQ01fU0VUQ0FSICgqbCwgdC0+ aGFuZGxlKTsKKwkgIGwgPSBTQ01fQ0RSTE9DICgqbCk7CisJfQogICAgICAgbi0tOwogICAgIH0K ICAgKmwgPSBTQ01fRU9MOwpAQCAtMTY5Miw2ICsxODA4LDcgQEAKICAgc2NtX3NldF9zbW9iX2Zy ZWUgKHNjbV90YzE2X2NvbmR2YXIsIGZhdF9jb25kX2ZyZWUpOwogCiAgIHNjbV9pX2RlZmF1bHRf ZHluYW1pY19zdGF0ZSA9IFNDTV9CT09MX0Y7CisgIHNjbV9pX3B0aHJlYWRfc2V0c3BlY2lmaWMg KHNjbV9pX3RocmVhZF9rZXksIFNDTV9JX0NVUlJFTlRfVEhSRUFEKTsKICAgZ3VpbGlmeV9zZWxm XzIgKFNDTV9CT09MX0YpOwogICB0aHJlYWRzX2luaXRpYWxpemVkX3AgPSAxOwogCkluZGV4OiBs aWJndWlsZS90aHJlYWRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3NvdXJjZXMvZ3VpbGUvZ3Vp bGUvZ3VpbGUtY29yZS9saWJndWlsZS90aHJlYWRzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu NDgKZGlmZiAtYSAtdSAtcjEuNDggdGhyZWFkcy5oCi0tLSBsaWJndWlsZS90aHJlYWRzLmgJMTcg QXByIDIwMDYgMDA6MDU6NDIgLTAwMDAJMS40OAorKysgbGliZ3VpbGUvdGhyZWFkcy5oCTE4IE9j dCAyMDA3IDAwOjExOjAzIC0wMDAwCkBAIC00OSw5ICs0OSwxMSBAQAogCiAgIFNDTSBoYW5kbGU7 CiAgIHNjbV9pX3B0aHJlYWRfdCBwdGhyZWFkOwotICAKKworICBTQ00gY2xlYW51cF9oYW5kbGVy OwogICBTQ00gam9pbl9xdWV1ZTsKICAgU0NNIHJlc3VsdDsKKyAgaW50IGNhbmNlbGVkOwogICBp bnQgZXhpdGVkOwogCiAgIFNDTSBzbGVlcF9vYmplY3Q7CkBAIC0xNTMsNiArMTU1LDkgQEAKIAog U0NNX0FQSSBTQ00gc2NtX2NhbGxfd2l0aF9uZXdfdGhyZWFkIChTQ00gdGh1bmssIFNDTSBoYW5k bGVyKTsKIFNDTV9BUEkgU0NNIHNjbV95aWVsZCAodm9pZCk7CitTQ01fQVBJIFNDTSBzY21fY2Fu Y2VsX3RocmVhZCAoU0NNIHQpOworU0NNX0FQSSBTQ00gc2NtX3NldF90aHJlYWRfY2xlYW51cF94 IChTQ00gdGhyZWFkLCBTQ00gcHJvYyk7CitTQ01fQVBJIFNDTSBzY21fY3VycmVudF90aHJlYWRf Y2xlYW51cCAoU0NNIHRocmVhZCk7CiBTQ01fQVBJIFNDTSBzY21fam9pbl90aHJlYWQgKFNDTSB0 KTsKIAogU0NNX0FQSSBTQ00gc2NtX21ha2VfbXV0ZXggKHZvaWQpOwpJbmRleDogdGVzdC1zdWl0 ZS90ZXN0cy90aHJlYWRzLnRlc3QKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3NvdXJjZXMvZ3VpbGUv Z3VpbGUvZ3VpbGUtY29yZS90ZXN0LXN1aXRlL3Rlc3RzL3RocmVhZHMudGVzdCx2CnJldHJpZXZp bmcgcmV2aXNpb24gMS42CmRpZmYgLWEgLXUgLXIxLjYgdGhyZWFkcy50ZXN0Ci0tLSB0ZXN0LXN1 aXRlL3Rlc3RzL3RocmVhZHMudGVzdAkxNyBKdW4gMjAwNiAyMzowODoyMyAtMDAwMAkxLjYKKysr IHRlc3Qtc3VpdGUvdGVzdHMvdGhyZWFkcy50ZXN0CTE4IE9jdCAyMDA3IDAwOjExOjA0IC0wMDAw CkBAIC0xMzMsNCArMTMzLDU0IEBACiAJCQkJKGxhbWJkYSAobikgKHNldCEgcmVzdWx0IChjb25z IG4gcmVzdWx0KSkpCiAJCQkJKGxhbWJkYSAobikgKCogMiBuKSkKIAkJCQknKDAgMSAyIDMgNCA1 KSkKLQkgICAgKGVxdWFsPyByZXN1bHQgJygxMCA4IDYgNCAyIDApKSkpKSkpCisJICAgIChlcXVh bD8gcmVzdWx0ICcoMTAgOCA2IDQgMiAwKSkpKSkKKworICAgICAgOzsgCisgICAgICA7OyB0aHJl YWQgY2FuY2VsbGF0aW9uCisgICAgICA7OworCisgICAgICAod2l0aC10ZXN0LXByZWZpeCAiY2Fu Y2VsLXRocmVhZCIKKwkKKyAgICAgICAgKHBhc3MtaWYgImNhbmNlbCBzdWNjZWVkcyIKKwkgIChs ZXQgKChtIChtYWtlLW11dGV4KSkpCisJICAgIChsb2NrLW11dGV4IG0pCisJICAgIChsZXQgKCh0 IChiZWdpbi10aHJlYWQgKGJlZ2luIChsb2NrLW11dGV4IG0pICdmb28pKSkpCisJICAgICAgKGNh bmNlbC10aHJlYWQgdCkKKwkgICAgICAoam9pbi10aHJlYWQgdCkKKwkgICAgICAjdCkpKQorCisJ KHBhc3MtaWYgImhhbmRsZXIgcmVzdWx0IHBhc3NlZCB0byBqb2luIgorCSAgKGxldCAoKG0gKG1h a2UtbXV0ZXgpKSkKKwkgICAgKGxvY2stbXV0ZXggbSkKKwkgICAgKGxldCAoKHQgKGJlZ2luLXRo cmVhZCAobG9jay1tdXRleCBtKSkpKQorCSAgICAgIChzZXQtdGhyZWFkLWNsZWFudXAhIHQgKGxh bWJkYSAoKSAnZm9vKSkKKwkgICAgICAoY2FuY2VsLXRocmVhZCB0KQorCSAgICAgIChlcT8gKGpv aW4tdGhyZWFkIHQpICdmb28pKSkpCisKKwkocGFzcy1pZiAiY2FuIGNhbmNlbCBzZWxmIgorCSAg KGxldCAoKG0gKG1ha2UtbXV0ZXgpKSkKKwkgICAgKGxvY2stbXV0ZXggbSkKKwkgICAgKGxldCAo KHQgKGJlZ2luLXRocmVhZCAoYmVnaW4gCisJCQkJICAgICAoc2V0LXRocmVhZC1jbGVhbnVwISAo Y3VycmVudC10aHJlYWQpCisJCQkJCQkJICAobGFtYmRhICgpICdmb28pKQorCQkJCSAgICAgKGNh bmNlbC10aHJlYWQgKGN1cnJlbnQtdGhyZWFkKSkKKwkJCQkgICAgIChsb2NrLW11dGV4IG0pKSkp KQorCSAgICAgIChlcT8gKGpvaW4tdGhyZWFkIHQpICdmb28pKSkpCisKKwkocGFzcy1pZiAiaGFu ZGxlciBzdXBwbGFudHMgZmluYWwgZXhwciIKKwkgIChsZXQgKCh0IChiZWdpbi10aHJlYWQgKGJl Z2luIChzZXQtdGhyZWFkLWNsZWFudXAhIChjdXJyZW50LXRocmVhZCkKKwkJCQkJCQkgICAgIChs YW1iZGEgKCkgJ2JhcikpCisJCQkJCSdmb28pKSkpCisJICAgIChlcT8gKGpvaW4tdGhyZWFkIHQp ICdiYXIpKSkKKworCShwYXNzLWlmICJyZW1vdmUgaGFuZGxlciBieSBzZXR0aW5nIGZhbHNlIgor CSAgKGxldCAoKG0gKG1ha2UtbXV0ZXgpKSkKKwkgICAgKGxvY2stbXV0ZXggbSkKKwkgICAgKGxl dCAoKHQgKGJlZ2luLXRocmVhZCAobG9jay1tdXRleCBtKSAnYmFyKSkpCisJICAgICAgKHNldC10 aHJlYWQtY2xlYW51cCEgdCAobGFtYmRhICgpICdmb28pKQorCSAgICAgIChzZXQtdGhyZWFkLWNs ZWFudXAhIHQgI2YpCisJICAgICAgKHVubG9jay1tdXRleCBtKQorCSAgICAgIChlcT8gKGpvaW4t dGhyZWFkIHQpICdiYXIpKSkpCisJCisJKHBhc3MtaWYgImluaXRpYWwgaGFuZGxlciBpcyBmYWxz ZSIKKwkgIChub3QgKHRocmVhZC1jbGVhbnVwIChjdXJyZW50LXRocmVhZCkpKSkpKSkK ------=_Part_27023_11450736.1192668109521 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel ------=_Part_27023_11450736.1192668109521--