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: [PATCH] Performance improvement for R6RS records Date: Sun, 10 Oct 2010 01:46:30 -0400 Message-ID: References: NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=000325554d9afd377304923cc35c X-Trace: dough.gmane.org 1286689654 31658 80.91.229.12 (10 Oct 2010 05:47:34 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Sun, 10 Oct 2010 05:47:34 +0000 (UTC) Cc: guile-devel To: Andy Wingo Original-X-From: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Sun Oct 10 07:47:32 2010 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.69) (envelope-from ) id 1P4okM-0000Xp-1J for guile-devel@m.gmane.org; Sun, 10 Oct 2010 07:47:30 +0200 Original-Received: from localhost ([127.0.0.1]:41952 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1P4okC-0007eW-8I for guile-devel@m.gmane.org; Sun, 10 Oct 2010 01:46:48 -0400 Original-Received: from [140.186.70.92] (port=41418 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1P4ojy-0007e6-Ar for guile-devel@gnu.org; Sun, 10 Oct 2010 01:46:36 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1P4ojw-0000Mv-DS for guile-devel@gnu.org; Sun, 10 Oct 2010 01:46:33 -0400 Original-Received: from mail-iw0-f169.google.com ([209.85.214.169]:49101) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1P4ojw-0000MV-6Z for guile-devel@gnu.org; Sun, 10 Oct 2010 01:46:32 -0400 Original-Received: by iwn1 with SMTP id 1so3055831iwn.0 for ; Sat, 09 Oct 2010 22:46:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:in-reply-to :references:date:message-id:subject:from:to:cc:content-type; bh=n8QsZRA6F4xLYyVrICU2zgv+o5ImTZe4X/7JDNPxy9w=; b=s/B+uJcrXAMHgF/VShOnq6oenBe4dRvEdbRcN+2hn6utAqV1/faashXuy/ASdsjyB0 tE76qWRGGtkJ40bt6NatkkJt+DKh6XG9QACzaZbTUP6egWlpcSD7qAm1zIERzy2sTyIu /UTb6/8JrWmX5wKIqDlqZfZKC/scK/L4Qx+Iw= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=Lh9ZDu2M50Y4Sn0C+4g/S+u5uCSFFE6mWOVNHfcMITOBmmUj0I5zde5H6outfqRMJw N6L/f/YugVKCBrET/5IpuwPkZ+RNux6srwqly339qzoKaCrJhJqVMwAUZiaFCnuLYwA6 t4KbPqmcu88HtGlRC54I1BQdSRV3/gyV2Outc= Original-Received: by 10.231.33.71 with SMTP id g7mr3621529ibd.54.1286689590687; Sat, 09 Oct 2010 22:46:30 -0700 (PDT) Original-Received: by 10.231.161.18 with HTTP; Sat, 9 Oct 2010 22:46:30 -0700 (PDT) In-Reply-To: X-detected-operating-system: by eggs.gnu.org: GNU/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:11011 Archived-At: --000325554d9afd377304923cc35c Content-Type: text/plain; charset=ISO-8859-1 Hey Andy, > Hope that helps, It does, thanks! (It took me a while to internalize the practical implications of struct / vtable equality, although I'd read and re-read the relevant bits of the manual...) Find attached a revised version of my original patch, which I hope reflects what you were getting at (flat record layouts, record-type descriptor data stored in the vtable). This version seems to perform a bit better than the first one; my profiling (still fairly naive) indicates a performance improvement of around 50% for the SDOM test suite. As usual, thanks for your help and patience. Regards, Julian --000325554d9afd377304923cc35c Content-Type: text/x-diff; charset=US-ASCII; name="0001-Improve-performance-of-R6RS-records-implementation.patch" Content-Disposition: attachment; filename="0001-Improve-performance-of-R6RS-records-implementation.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gf3hncwz0 RnJvbSA4NzE0YTJhMGU1NzEzYTU3ZTI5MmNkMDNmMmVmOTFiZTE2N2M2ZWY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKdWxpYW4gR3JhaGFtIDxqdWxpYW4uZ3JhaGFtQGF5YS55YWxl LmVkdT4KRGF0ZTogU3VuLCAxMCBPY3QgMjAxMCAwMTozNToyNiAtMDQwMApTdWJqZWN0OiBbUEFU Q0hdIEltcHJvdmUgcGVyZm9ybWFuY2Ugb2YgUjZSUyByZWNvcmRzIGltcGxlbWVudGF0aW9uCgpS ZWltcGxlbWVudCByZWNvcmQtdHlwZSBkZXNjcmlwdG9ycyBhcyB2dGFibGVzIGZvciByZWNvcmQg c3RydWN0cywgc2F2aW5nCnVzIHdoYXQgd2FzIGFuIGV4cGVuc2l2ZSBpbnNwZWN0aW9uIG9mIGEg cmVjb3JkJ3MgdnRhYmxlIGxheW91dCBzdHJpbmcgdG8KZGV0ZXJtaW5lIGl0cyB0eXBlLgoKKiBt b2R1bGUvcm5ycy9yZWNvcmRzL2luc3BlY3Rpb24uc2NtIChyZWNvcmQtZmllbGQtbXV0YWJsZT8p OiBDaGVjawogIG11dGFiaWxpdHkgdXNpbmcgdGhlIGJpdCBmaWVsZCBzdG9yZWQgaW4gdGhlIHJl Y29yZC10eXBlIGRlc2NyaXB0b3IKICBpbnN0ZWFkIG9mIHRoZSByZWNvcmQgc3RydWN0J3MgdnRh YmxlLgoqIG1vZHVsZS9ybnJzL3JlY29yZHMvcHJvY2VkdXJhbC5zY20gKHJlY29yZC1pbnRlcm5h bD8pOiBSZWltcGxlbWVudCBhcyBhCiAgZGVsZWdhdGlvbiB0byBhIGNoZWNrIG9mIHRoZSBwYXNz ZWQgc3RydWN0J3MgdnRhYmxlIGFnYWluc3QKICBgcmVjb3JkLXR5cGUtZGVzY3JpcHRvcj8nLgog IChyZWNvcmQtdHlwZS12dGFibGUpOiBNb2RpZnkgdG8gaW5jbHVkZSBiYXNlIHZ0YWJsZSBsYXlv dXQgYXMgYSBwcmVmaXgKICBvZiB0aGUgcmVjb3JkLXR5cGUtZGVzY3JpcHRvciBsYXlvdXQgc28g dGhhdCBhbGwgcmVjb3JkLXR5cGUgaW5zdGFuY2VzCiAgYXJlIG5vdyBhbHNvIHZ0YWJsZXMuCiAg KG1ha2UtcmVjb3JkLXR5cGUtZGVzY3JpcHRvcik6IFJlbW92ZSBmaWVsZCB2dGFibGU7IGJ1aWxk IHVwIGEgbXV0YWJpbGl0eQogIGJpdCBmaWVsZCB0byB1c2UgZm9yIGZhc3QgbXV0YWJpbGl0eSBj aGVja3MuCiAgKHJlY29yZC1hY2Nlc3NvciwgcmVjb3JkLW11dGF0b3IpOiBVc2UgZmllbGQgc3Ry dWN0IGFuZCBtdXRhYmlsaXR5IGJpdAogIGZpZWxkLgotLS0KIG1vZHVsZS9ybnJzL3JlY29yZHMv aW5zcGVjdGlvbi5zY20gfCAgIDIyICsrKy0tLS0KIG1vZHVsZS9ybnJzL3JlY29yZHMvcHJvY2Vk dXJhbC5zY20gfCAgMTMxICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQogMiBm aWxlcyBjaGFuZ2VkLCA4MSBpbnNlcnRpb25zKCspLCA3MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9tb2R1bGUvcm5ycy9yZWNvcmRzL2luc3BlY3Rpb24uc2NtIGIvbW9kdWxlL3JucnMvcmVj b3Jkcy9pbnNwZWN0aW9uLnNjbQppbmRleCBhMTQyZDdjLi4zMTVlZjBjIDEwMDY0NAotLS0gYS9t b2R1bGUvcm5ycy9yZWNvcmRzL2luc3BlY3Rpb24uc2NtCisrKyBiL21vZHVsZS9ybnJzL3JlY29y ZHMvaW5zcGVjdGlvbi5zY20KQEAgLTI4LDE2ICsyOCwxNSBAQAogCSAgcmVjb3JkLXR5cGUtb3Bh cXVlPyAKIAkgIHJlY29yZC10eXBlLWZpZWxkLW5hbWVzIAogCSAgcmVjb3JkLWZpZWxkLW11dGFi bGU/KQotICAoaW1wb3J0IChybnJzIGJhc2UgKDYpKQorICAoaW1wb3J0IChybnJzIGFyaXRobWV0 aWMgYml0d2lzZSAoNikpCisgICAgICAgICAgKHJucnMgYmFzZSAoNikpCiAJICAocm5ycyBjb25k aXRpb25zICg2KSkKICAgICAgICAgICAocm5ycyBleGNlcHRpb25zICg2KSkKIAkgIChybnJzIHJl Y29yZHMgcHJvY2VkdXJhbCAoNikpCi0JICAob25seSAoZ3VpbGUpIHN0cnVjdC1yZWYgdnRhYmxl LWluZGV4LWxheW91dCBAQCkpCisJICAob25seSAoZ3VpbGUpIHN0cnVjdC1yZWYgc3RydWN0LXZ0 YWJsZSB2dGFibGUtaW5kZXgtbGF5b3V0IEBAKSkKIAogICAoZGVmaW5lIHJlY29yZC1pbnRlcm5h bD8gKEBAIChybnJzIHJlY29yZHMgcHJvY2VkdXJhbCkgcmVjb3JkLWludGVybmFsPykpCiAKLSAg KGRlZmluZSByZWNvcmQtaW5kZXgtcnRkIChAQCAocm5ycyByZWNvcmRzIHByb2NlZHVyYWwpIHJl Y29yZC1pbmRleC1ydGQpKQotCiAgIChkZWZpbmUgcnRkLWluZGV4LW5hbWUgKEBAIChybnJzIHJl Y29yZHMgcHJvY2VkdXJhbCkgcnRkLWluZGV4LW5hbWUpKQogICAoZGVmaW5lIHJ0ZC1pbmRleC1w YXJlbnQgKEBAIChybnJzIHJlY29yZHMgcHJvY2VkdXJhbCkgcnRkLWluZGV4LXBhcmVudCkpCiAg IChkZWZpbmUgcnRkLWluZGV4LXVpZCAoQEAgKHJucnMgcmVjb3JkcyBwcm9jZWR1cmFsKSBydGQt aW5kZXgtdWlkKSkKQEAgLTQ1LDE2ICs0NCwxNiBAQAogICAoZGVmaW5lIHJ0ZC1pbmRleC1vcGFx dWU/IChAQCAocm5ycyByZWNvcmRzIHByb2NlZHVyYWwpIHJ0ZC1pbmRleC1vcGFxdWU/KSkKICAg KGRlZmluZSBydGQtaW5kZXgtZmllbGQtbmFtZXMgCiAgICAgKEBAIChybnJzIHJlY29yZHMgcHJv Y2VkdXJhbCkgcnRkLWluZGV4LWZpZWxkLW5hbWVzKSkKLSAgKGRlZmluZSBydGQtaW5kZXgtZmll bGQtdnRhYmxlIAotICAgIChAQCAocm5ycyByZWNvcmRzIHByb2NlZHVyYWwpIHJ0ZC1pbmRleC1m aWVsZC12dGFibGUpKQorICAoZGVmaW5lIHJ0ZC1pbmRleC1maWVsZC1iaXQtZmllbGQKKyAgICAo QEAgKHJucnMgcmVjb3JkcyBwcm9jZWR1cmFsKSBydGQtaW5kZXgtZmllbGQtYml0LWZpZWxkKSkK IAogICAoZGVmaW5lIChyZWNvcmQ/IG9iaikKLSAgICAoYW5kIChyZWNvcmQtaW50ZXJuYWw/IG9i aikgCi0JIChub3QgKHJlY29yZC10eXBlLW9wYXF1ZT8gKHN0cnVjdC1yZWYgb2JqIHJlY29yZC1p bmRleC1ydGQpKSkpKQorICAgIChhbmQgKHJlY29yZC1pbnRlcm5hbD8gb2JqKQorCSAobm90IChy ZWNvcmQtdHlwZS1vcGFxdWU/IChzdHJ1Y3QtdnRhYmxlIG9iaikpKSkpCiAKICAgKGRlZmluZSAo cmVjb3JkLXJ0ZCByZWNvcmQpCiAgICAgKG9yIChhbmQgKHJlY29yZC1pbnRlcm5hbD8gcmVjb3Jk KQotCSAgICAgKGxldCAoKHJ0ZCAoc3RydWN0LXJlZiByZWNvcmQgcmVjb3JkLWluZGV4LXJ0ZCkp KQorCSAgICAgKGxldCAoKHJ0ZCAoc3RydWN0LXZ0YWJsZSByZWNvcmQpKSkKIAkgICAgICAgKGFu ZCAobm90IChzdHJ1Y3QtcmVmIHJ0ZCBydGQtaW5kZXgtb3BhcXVlPykpIHJ0ZCkpKQogCShyYWlz ZSAobWFrZS1hc3NlcnRpb24tdmlvbGF0aW9uKSkpKQogCkBAIC03Niw4ICs3NSw1IEBACiAgICAg KGVuc3VyZS1ydGQgcnRkKSAoc3RydWN0LXJlZiBydGQgcnRkLWluZGV4LWZpZWxkLW5hbWVzKSkK ICAgKGRlZmluZSAocmVjb3JkLWZpZWxkLW11dGFibGU/IHJ0ZCBrKQogICAgIChlbnN1cmUtcnRk IHJ0ZCkKLSAgICAobGV0ICgodnQgKHN0cnVjdC1yZWYgcnRkIHJ0ZC1pbmRleC1maWVsZC12dGFi bGUpKSkKLSAgICAgIChlcXY/IChzdHJpbmctcmVmIChzeW1ib2wtPnN0cmluZyAoc3RydWN0LXJl ZiB2dCB2dGFibGUtaW5kZXgtbGF5b3V0KSkKLQkJCSgrICgqIDIgKCsgayAyKSkgMSkpCi0JICAg ICNcdykpKQorICAgIChiaXR3aXNlLWJpdC1zZXQ/IChzdHJ1Y3QtcmVmIHJ0ZCBydGQtaW5kZXgt ZmllbGQtYml0LWZpZWxkKSBrKSkKICkKZGlmZiAtLWdpdCBhL21vZHVsZS9ybnJzL3JlY29yZHMv cHJvY2VkdXJhbC5zY20gYi9tb2R1bGUvcm5ycy9yZWNvcmRzL3Byb2NlZHVyYWwuc2NtCmluZGV4 IGJkMWQwZDEuLjY5NzZlZWIgMTAwNjQ0Ci0tLSBhL21vZHVsZS9ybnJzL3JlY29yZHMvcHJvY2Vk dXJhbC5zY20KKysrIGIvbW9kdWxlL3JucnMvcmVjb3Jkcy9wcm9jZWR1cmFsLnNjbQpAQCAtMjgs NyArMjgsMTIgQEAKIAkgIHJlY29yZC1tdXRhdG9yKQogCSAgCiAgIChpbXBvcnQgKHJucnMgYmFz ZSAoNikpCi0gICAgICAgICAgKG9ubHkgKGd1aWxlKSBhbmQ9PgorICAgICAgICAgIChvbmx5IChn dWlsZSkgY29ucyoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2FuZCAKKyAgICAgICAgICAg ICAgICAgICAgICAgIGxvZ2lvcgorICAgICAgICAgICAgICAgICAgICAgICAgYXNoCisKKyAgICAg ICAgICAgICAgICAgICAgICAgIGFuZD0+CiAJCQl0aHJvdwogCQkJZGlzcGxheQogCQkgICAgICAg IG1ha2Utc3RydWN0IApAQCAtMzYsOCArNDEsMTAgQEAKIAkJCW1hcAogCQkJc2ltcGxlLWZvcm1h dAogCQkJc3RyaW5nLWFwcGVuZCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbC1hcHBl bmQKIAkJCQogCQkJc3RydWN0PyAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC1sYXlv dXQKIAkJCXN0cnVjdC1yZWYgCiAJCQlzdHJ1Y3Qtc2V0ISAKIAkJCXN0cnVjdC12dGFibGUKQEAg LTUyLDMzICs1OSwyNiBAQAogCSAgKG9ubHkgKHNyZmkgOjEpIGZvbGQgc3BsaXQtYXQgdGFrZSkp CiAKICAgKGRlZmluZSAocmVjb3JkLWludGVybmFsPyBvYmopCi0gICAgKGFuZCAoc3RydWN0PyBv YmopCi0JIChsZXQqICgodnRhYmxlIChzdHJ1Y3QtdnRhYmxlIG9iaikpCi0JCShsYXlvdXQgKHN5 bWJvbC0+c3RyaW5nCi0JCQkgKHN0cnVjdC1yZWYgdnRhYmxlIHZ0YWJsZS1pbmRleC1sYXlvdXQp KSkpCi0JICAgKGFuZCAoPj0gKHN0cmluZy1sZW5ndGggbGF5b3V0KSA0KQotCQkobGV0ICgocnRk IChzdHJ1Y3QtcmVmIG9iaiByZWNvcmQtaW5kZXgtcnRkKSkpCi0JCSAgKGFuZCAocmVjb3JkLXR5 cGUtZGVzY3JpcHRvcj8gcnRkKSkpKSkpKQotCi0gIChkZWZpbmUgcmVjb3JkLWluZGV4LXBhcmVu dCAwKQotICAoZGVmaW5lIHJlY29yZC1pbmRleC1ydGQgMSkKLQotICAoZGVmaW5lIHJ0ZC1pbmRl eC1uYW1lIDApCi0gIChkZWZpbmUgcnRkLWluZGV4LXVpZCAxKQotICAoZGVmaW5lIHJ0ZC1pbmRl eC1wYXJlbnQgMikKLSAgKGRlZmluZSBydGQtaW5kZXgtc2VhbGVkPyAzKQotICAoZGVmaW5lIHJ0 ZC1pbmRleC1vcGFxdWU/IDQpCi0gIChkZWZpbmUgcnRkLWluZGV4LXByZWRpY2F0ZSA1KQotICAo ZGVmaW5lIHJ0ZC1pbmRleC1maWVsZC1uYW1lcyA2KQotICAoZGVmaW5lIHJ0ZC1pbmRleC1maWVs ZC12dGFibGUgNykKLSAgKGRlZmluZSBydGQtaW5kZXgtZmllbGQtYmluZGVyIDgpCisgICAgKGFu ZCAoc3RydWN0PyBvYmopIChyZWNvcmQtdHlwZS1kZXNjcmlwdG9yPyAoc3RydWN0LXZ0YWJsZSBv YmopKSkpCisKKyAgKGRlZmluZSBydGQtaW5kZXgtbmFtZSA4KQorICAoZGVmaW5lIHJ0ZC1pbmRl eC11aWQgOSkKKyAgKGRlZmluZSBydGQtaW5kZXgtcGFyZW50IDEwKQorICAoZGVmaW5lIHJ0ZC1p bmRleC1zZWFsZWQ/IDExKQorICAoZGVmaW5lIHJ0ZC1pbmRleC1vcGFxdWU/IDEyKQorICAoZGVm aW5lIHJ0ZC1pbmRleC1wcmVkaWNhdGUgMTMpCisgIChkZWZpbmUgcnRkLWluZGV4LWZpZWxkLW5h bWVzIDE0KQorICAoZGVmaW5lIHJ0ZC1pbmRleC1maWVsZC1iaXQtZmllbGQgMTUpCisgIChkZWZp bmUgcnRkLWluZGV4LWZpZWxkLWJpbmRlciAxNikKIAogICAoZGVmaW5lIHJjdGQtaW5kZXgtcnRk IDApCiAgIChkZWZpbmUgcmN0ZC1pbmRleC1wYXJlbnQgMSkKICAgKGRlZmluZSByY3RkLWluZGV4 LXByb3RvY29sIDIpCiAKKyAgKGRlZmluZSB2dGFibGUtYmFzZS1sYXlvdXQgKHN5bWJvbC0+c3Ry aW5nIChzdHJ1Y3QtbGF5b3V0IChtYWtlLXZ0YWJsZSAiIikpKSkKKwogICAoZGVmaW5lIHJlY29y ZC10eXBlLXZ0YWJsZSAKLSAgICAobWFrZS12dGFibGUgInBycHJwcnBycHJwcnBycHJwciIgCisg ICAgKG1ha2UtdnRhYmxlIChzdHJpbmctYXBwZW5kIHZ0YWJsZS1iYXNlLWxheW91dCAicHJwcnBy cHJwcnBycHJwcnBycHIiKQogCQkgKGxhbWJkYSAob2JqIHBvcnQpIAogCQkgICAoc2ltcGxlLWZv cm1hdCBwb3J0ICIjPHI2cnM6cmVjb3JkLXR5cGU6fkE+IgogCQkJCSAgKHN0cnVjdC1yZWYgb2Jq IHJ0ZC1pbmRleC1uYW1lKSkpKSkKQEAgLTkzLDI4ICs5Myw0MCBAQAogICAoZGVmaW5lIHVpZC10 YWJsZSAobWFrZS1oYXNoLXRhYmxlKSkgICAgCiAKICAgKGRlZmluZSAobWFrZS1yZWNvcmQtdHlw ZS1kZXNjcmlwdG9yIG5hbWUgcGFyZW50IHVpZCBzZWFsZWQ/IG9wYXF1ZT8gZmllbGRzKQotICAg IChkZWZpbmUgZmllbGRzLXZ0YWJsZQotICAgICAgKG1ha2UtdnRhYmxlIChmb2xkIChsYW1iZGEg KHggcCkgCi0JCQkgICAoc3RyaW5nLWFwcGVuZCBwIChjYXNlIChjYXIgeCkKLQkJCQkJICAgICAg KChpbW11dGFibGUpICJwciIpCi0JCQkJCSAgICAgICgobXV0YWJsZSkgInB3IikpKSkKLQkJCSAi cHJwciIgKHZlY3Rvci0+bGlzdCBmaWVsZHMpKQotCQkgICAobGFtYmRhIChvYmogcG9ydCkKLQkJ ICAgICAoc2ltcGxlLWZvcm1hdCBwb3J0ICIjPHI2cnM6cmVjb3JkOn5BPiIgbmFtZSkpKSkKKyAg ICAoZGVmaW5lIGZpZWxkcy1wYWlyCisgICAgICAobGV0IGxvb3AgKChmaWVsZC1saXN0ICh2ZWN0 b3ItPmxpc3QgZmllbGRzKSkKKyAgICAgICAgICAgICAgICAgKGxheW91dC1zeW0gJ3ByKQorICAg ICAgICAgICAgICAgICAobGF5b3V0LWJpdC1maWVsZCAwKQorICAgICAgICAgICAgICAgICAoY291 bnRlciAwKSkKKyAgICAgICAgKGlmIChudWxsPyBmaWVsZC1saXN0KQorICAgICAgICAgICAgKGNv bnMgbGF5b3V0LXN5bSBsYXlvdXQtYml0LWZpZWxkKQorICAgICAgICAgICAgKGNhc2UgKGNhYXIg ZmllbGQtbGlzdCkKKyAgICAgICAgICAgICAgKChpbW11dGFibGUpIAorICAgICAgICAgICAgICAg KGxvb3AgKGNkciBmaWVsZC1saXN0KQorICAgICAgICAgICAgICAgICAgICAgKHN5bWJvbC1hcHBl bmQgbGF5b3V0LXN5bSAncHIpIAorICAgICAgICAgICAgICAgICAgICAgbGF5b3V0LWJpdC1maWVs ZCAKKyAgICAgICAgICAgICAgICAgICAgICgrIGNvdW50ZXIgMSkpKQorICAgICAgICAgICAgICAo KG11dGFibGUpCisgICAgICAgICAgICAgICAobG9vcCAoY2RyIGZpZWxkLWxpc3QpCisgICAgICAg ICAgICAgICAgICAgICAoc3ltYm9sLWFwcGVuZCBsYXlvdXQtc3ltICdwdykKKyAgICAgICAgICAg ICAgICAgICAgIChsb2dpb3IgbGF5b3V0LWJpdC1maWVsZCAoYXNoIDEgY291bnRlcikpCisgICAg ICAgICAgICAgICAgICAgICAoKyBjb3VudGVyIDEpKSkKKyAgICAgICAgICAgICAgKGVsc2UgKHI2 cnMtcmFpc2UgKG1ha2UtYXNzZXJ0aW9uLXZpb2xhdGlvbikpKSkpKSkKKworICAgIChkZWZpbmUg ZmllbGRzLWxheW91dCAoY2FyIGZpZWxkcy1wYWlyKSkKKyAgICAoZGVmaW5lIGZpZWxkcy1iaXQt ZmllbGQgKGNkciBmaWVsZHMtcGFpcikpCisKICAgICAoZGVmaW5lIGZpZWxkLW5hbWVzIChsaXN0 LT52ZWN0b3IgKG1hcCBjYWRyICh2ZWN0b3ItPmxpc3QgZmllbGRzKSkpKQogICAgIChkZWZpbmUg bGF0ZS1ydGQgI2YpCisKICAgICAoZGVmaW5lIChwcml2YXRlLXJlY29yZC1wcmVkaWNhdGUgb2Jq KSAgICAgICAKICAgICAgIChhbmQgKHJlY29yZC1pbnRlcm5hbD8gb2JqKQotCSAgIChsZXQgKChy dGQgKHN0cnVjdC1yZWYgb2JqIHJlY29yZC1pbmRleC1ydGQpKSkKLQkgICAgIChvciAoZXE/IChz dHJ1Y3QtcmVmIHJ0ZCBydGQtaW5kZXgtZmllbGQtdnRhYmxlKSBmaWVsZHMtdnRhYmxlKQotCQkg KGFuZD0+IChzdHJ1Y3QtcmVmIG9iaiByZWNvcmQtaW5kZXgtcGFyZW50KQotCQkJcHJpdmF0ZS1y ZWNvcmQtcHJlZGljYXRlKSkpKSkKKyAgICAgICAgICAgKG9yIChlcT8gKHN0cnVjdC12dGFibGUg b2JqKSBsYXRlLXJ0ZCkKKyAgICAgICAgICAgICAgIChhbmQ9PiAoc3RydWN0LXJlZiBvYmogMCkg cHJpdmF0ZS1yZWNvcmQtcHJlZGljYXRlKSkpKQogCiAgICAgKGRlZmluZSAoZmllbGQtYmluZGVy IHBhcmVudC1zdHJ1Y3QgLiBhcmdzKQotICAgICAgKGFwcGx5IG1ha2Utc3RydWN0IChhcHBlbmQg KGxpc3QgZmllbGRzLXZ0YWJsZSAwIAotCQkJCSAgICAgICBwYXJlbnQtc3RydWN0IAotCQkJCSAg ICAgICBsYXRlLXJ0ZCkgCi0JCQkJIGFyZ3MpKSkKKyAgICAgIChhcHBseSBtYWtlLXN0cnVjdCAo Y29ucyogbGF0ZS1ydGQgMCBwYXJlbnQtc3RydWN0IGFyZ3MpKSkKKwogICAgIChpZiAoYW5kIHBh cmVudCAoc3RydWN0LXJlZiBwYXJlbnQgcnRkLWluZGV4LXNlYWxlZD8pKQogCShyNnJzLXJhaXNl IChtYWtlLWFzc2VydGlvbi12aW9sYXRpb24pKSkKIApAQCAtMTI1LDIxICsxMzcsMjUgQEAKIAkg IChpZiAoZXF1YWw/IChsaXN0IG5hbWUgCiAJCQkgICAgcGFyZW50IAogCQkJICAgIHNlYWxlZD8g Ci0JCQkgICAgb3BhcXVlPworCQkJICAgIG9wYXF1ZT8gICAgICAgICAgICAgICAgICAgICAgICAg ICAgCiAJCQkgICAgZmllbGQtbmFtZXMKLQkJCSAgICAoc3RydWN0LXJlZiBmaWVsZHMtdnRhYmxl IHZ0YWJsZS1pbmRleC1sYXlvdXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxk cy1iaXQtZmllbGQpCiAJCSAgICAgIChsaXN0IChzdHJ1Y3QtcmVmIG1hdGNoaW5nLXJ0ZCBydGQt aW5kZXgtbmFtZSkKIAkJCSAgICAoc3RydWN0LXJlZiBtYXRjaGluZy1ydGQgcnRkLWluZGV4LXBh cmVudCkKIAkJCSAgICAoc3RydWN0LXJlZiBtYXRjaGluZy1ydGQgcnRkLWluZGV4LXNlYWxlZD8p CiAJCQkgICAgKHN0cnVjdC1yZWYgbWF0Y2hpbmctcnRkIHJ0ZC1pbmRleC1vcGFxdWU/KQogCQkJ ICAgIChzdHJ1Y3QtcmVmIG1hdGNoaW5nLXJ0ZCBydGQtaW5kZXgtZmllbGQtbmFtZXMpCi0JCQkg ICAgKHN0cnVjdC1yZWYgKHN0cnVjdC1yZWYgbWF0Y2hpbmctcnRkIAotCQkJCQkJICAgIHJ0ZC1p bmRleC1maWVsZC12dGFibGUpCi0JCQkJCXZ0YWJsZS1pbmRleC1sYXlvdXQpKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoc3RydWN0LXJlZiBtYXRjaGluZy1ydGQgCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRkLWluZGV4LWZpZWxkLWJpdC1maWVsZCkp KQogCSAgICAgIG1hdGNoaW5nLXJ0ZAogCSAgICAgIChyNnJzLXJhaXNlIChtYWtlLWFzc2VydGlv bi12aW9sYXRpb24pKSkKLQorICAgICAgICAgIAogCSAgKGxldCAoKHJ0ZCAobWFrZS1zdHJ1Y3Qg cmVjb3JkLXR5cGUtdnRhYmxlIDAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZpZWxkcy1sYXlvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRh IChvYmogcG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaW1wbGUt Zm9ybWF0IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgIiM8cjZy czpyZWNvcmQ6fkE+IiBuYW1lKSkKIAkJCQkgIAogCQkJCSAgbmFtZQogCQkJCSAgdWlkCkBAIC0x NDksNyArMTY1LDcgQEAKIAkJCQkgIAogCQkJCSAgcHJpdmF0ZS1yZWNvcmQtcHJlZGljYXRlCiAJ CQkJICBmaWVsZC1uYW1lcwotCQkJCSAgZmllbGRzLXZ0YWJsZQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZpZWxkcy1iaXQtZmllbGQKIAkJCQkgIGZpZWxkLWJpbmRlcikpKQog CSAgICAoc2V0ISBsYXRlLXJ0ZCBydGQpCiAJICAgIChpZiB1aWQgKGhhc2hxLXNldCEgdWlkLXRh YmxlIHVpZCBydGQpKQpAQCAtMjAwLDI0ICsyMTYsMjEgQEAKIAogICAoZGVmaW5lIChyZWNvcmQt YWNjZXNzb3IgcnRkIGspCiAgICAgKGRlZmluZSAocmVjb3JkLWFjY2Vzc29yLWlubmVyIG9iaikK KyAgICAgIChpZiAoZXE/IChzdHJ1Y3QtdnRhYmxlIG9iaikgcnRkKQorCSAgKHN0cnVjdC1yZWYg b2JqICgrIGsgMSkpCisgICAgICAgICAgKGFuZD0+IChzdHJ1Y3QtcmVmIG9iaiAwKSByZWNvcmQt YWNjZXNzb3ItaW5uZXIpKSkKKyAgICAobGFtYmRhIChvYmopIAogICAgICAgKGlmIChub3QgKHJl Y29yZC1pbnRlcm5hbD8gb2JqKSkKLQkgIChyNnJzLXJhaXNlIChtYWtlLWFzc2VydGlvbi12aW9s YXRpb24pKSkKLSAgICAgIChpZiAoZXE/IChzdHJ1Y3QtcmVmIG9iaiByZWNvcmQtaW5kZXgtcnRk KSBydGQpCi0JICAoc3RydWN0LXJlZiBvYmogKCsgayAyKSkKLQkgIChyZWNvcmQtYWNjZXNzb3It aW5uZXIgKHN0cnVjdC1yZWYgb2JqIHJlY29yZC1pbmRleC1wYXJlbnQpKSkpCi0gICAgKGxhbWJk YSAob2JqKSAocmVjb3JkLWFjY2Vzc29yLWlubmVyIG9iaikpKQorICAgICAgICAgIChyNnJzLXJh aXNlIChtYWtlLWFzc2VydGlvbi12aW9sYXRpb24pKSkKKyAgICAgIChyZWNvcmQtYWNjZXNzb3It aW5uZXIgb2JqKSkpCiAKICAgKGRlZmluZSAocmVjb3JkLW11dGF0b3IgcnRkIGspCiAgICAgKGRl ZmluZSAocmVjb3JkLW11dGF0b3ItaW5uZXIgb2JqIHZhbCkKLSAgICAgIChhbmQgb2JqIAotCSAg IChvciAoYW5kIChlcT8gKHN0cnVjdC1yZWYgb2JqIHJlY29yZC1pbmRleC1ydGQpIHJ0ZCkgCi0J CSAgICAoc3RydWN0LXNldCEgb2JqICgrIGsgMikgdmFsKSkKLQkgICAgICAgKHJlY29yZC1tdXRh dG9yLWlubmVyIChzdHJ1Y3QtcmVmIG9iaiByZWNvcmQtaW5kZXgtcGFyZW50KSAKLQkJCQkgICAg IHZhbCkpKSkKLSAgICAobGV0KiAoKHJ0ZC12dGFibGUgKHN0cnVjdC1yZWYgcnRkIHJ0ZC1pbmRl eC1maWVsZC12dGFibGUpKQotCSAgIChmaWVsZC1sYXlvdXQgKHN5bWJvbC0+c3RyaW5nCi0JCQkg IChzdHJ1Y3QtcmVmIHJ0ZC12dGFibGUgdnRhYmxlLWluZGV4LWxheW91dCkpKSkKLSAgICAgIChp ZiAobm90IChlcXY/IChzdHJpbmctcmVmIGZpZWxkLWxheW91dCAoKyAoKiAoKyBrIDIpIDIpIDEp KSAjXHcpKQorICAgICAgKGFuZCBvYmogKG9yIChhbmQgKGVxPyAoc3RydWN0LXZ0YWJsZSBvYmop IHJ0ZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qtc2V0ISBvYmogKCsgayAxKSB2 YWwpKQorICAgICAgICAgICAgICAgICAgIChyZWNvcmQtbXV0YXRvci1pbm5lciAoc3RydWN0LXJl ZiBvYmogMCkgdmFsKSkpKQorICAgIChsZXQgKChiaXQtZmllbGQgKHN0cnVjdC1yZWYgcnRkIHJ0 ZC1pbmRleC1maWVsZC1iaXQtZmllbGQpKSkKKyAgICAgIChpZiAoemVybz8gKGxvZ2FuZCBiaXQt ZmllbGQgKGFzaCAxIGspKSkKIAkgIChyNnJzLXJhaXNlIChtYWtlLWFzc2VydGlvbi12aW9sYXRp b24pKSkpCiAgICAgKGxhbWJkYSAob2JqIHZhbCkgKHJlY29yZC1tdXRhdG9yLWlubmVyIG9iaiB2 YWwpKSkKIAotLSAKMS43LjAuNAoK --000325554d9afd377304923cc35c--