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: [PATCH] Performance improvement for R6RS records Date: Sat, 18 Sep 2010 20:20:45 -0400 Message-ID: NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0022152d6ddd50e0a8049091c4ef X-Trace: dough.gmane.org 1284855666 4791 80.91.229.12 (19 Sep 2010 00:21:06 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Sun, 19 Sep 2010 00:21:06 +0000 (UTC) To: guile-devel Original-X-From: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Sun Sep 19 02:21:05 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 1Ox7eR-0006yy-8c for guile-devel@m.gmane.org; Sun, 19 Sep 2010 02:21:04 +0200 Original-Received: from localhost ([127.0.0.1]:53661 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ox7eQ-0002ME-C8 for guile-devel@m.gmane.org; Sat, 18 Sep 2010 20:21:02 -0400 Original-Received: from [140.186.70.92] (port=37722 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ox7eF-0002LL-W9 for guile-devel@gnu.org; Sat, 18 Sep 2010 20:20:57 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1Ox7eA-0007cq-IB for guile-devel@gnu.org; Sat, 18 Sep 2010 20:20:51 -0400 Original-Received: from mail-iw0-f169.google.com ([209.85.214.169]:52926) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Ox7eA-0007cd-Da for guile-devel@gnu.org; Sat, 18 Sep 2010 20:20:46 -0400 Original-Received: by iwn33 with SMTP id 33so5048539iwn.0 for ; Sat, 18 Sep 2010 17:20:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:date:message-id :subject:from:to:content-type; bh=41GG1jXgPV8SXpZt9t7RqUzLi0w6jy6U53OypsV5kd8=; b=i7xleVR/KxQCU40zKyXovPNEfUPIRcGXhVfBWGxl7ka6qdSCNQT+0pgwc6DoC7gqH4 FMJtRqSDK6FqOFRP9osRV6JD+LeZOdtPLAEMnmBrGdu3rTKYmy0uJjNTDyPT+YGvFmon XQnasjFW26L7jPZDslb3b7j4YAOCHQSozMIjU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=OP1/ge4pXYrp4U3QlHoQ/nzye3OnyGQ7hVPSEZpiII31UD1o6wh8jgVdZTrhJC3s71 wJoEz5lKl+m6889Z4J/KbwIjFuIx2DY/XA6rQk9QX69UVST4Q0FcRn8W3ttG/j6FV0vx pcxvLN3jqKiTwo4G9MniNQ8JAvUpHL7y89PmA= Original-Received: by 10.231.38.9 with SMTP id z9mr7779858ibd.24.1284855645134; Sat, 18 Sep 2010 17:20:45 -0700 (PDT) Original-Received: by 10.231.158.193 with HTTP; Sat, 18 Sep 2010 17:20:45 -0700 (PDT) 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:10932 Archived-At: --0022152d6ddd50e0a8049091c4ef Content-Type: text/plain; charset=ISO-8859-1 Hi Guilers, I've been a bit quiet recently since, while waiting for 2.0, I've been rewriting one of my old Guile module projects (SDOM) as an R6RS library. Among other things, this has gotten me pretty familiar with the performance profile of Guile's R6RS records code. My initial implementation had every record be a distinct struct type identified by its own vtable, in which the first two slots were used to store the record's type descriptor and a pointer to a parent type; this meant that simple type predicates and mutability checks required (expensive) examination of the vtable layout. The attached patched changes the way record data is laid out, such that all records are of the same struct type, which holds the type descriptor and parent pointer, as well as a reference to the field data, which now lives in its own struct. Some naive profiling, in the context of the test suite for SDOM (which makes extensive use of records), indicates a speedup of around 40%. Any questions? Would someone care to review before I push? Regards, Julian --0022152d6ddd50e0a8049091c4ef 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_ge95twk60 RnJvbSBiZTFiMzYwZmRjZmE2Yzk2ZWE5YjBjNjRhN2ExOWMwNWZhMTY1MGE1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKdWxpYW4gR3JhaGFtIDxqdWxpYW4uZ3JhaGFtQGF5YS55YWxl LmVkdT4KRGF0ZTogU2F0LCAxOCBTZXAgMjAxMCAxOTo1OTozMyAtMDQwMApTdWJqZWN0OiBbUEFU Q0hdIEltcHJvdmUgcGVyZm9ybWFuY2Ugb2YgUjZSUyByZWNvcmRzIGltcGxlbWVudGF0aW9uCgpT dG9yZSBmaWVsZCBsYXlvdXQgYW5kIG90aGVyIHJlY29yZCB0eXBlIG1ldGFkYXRhIGluIGEgc3Ry dWN0IHR5cGUgdGhhdApzaXRzIGluIGZyb250IG9mIHRoZSBhY3R1YWwgZmllbGQgZGF0YSwgd2hp Y2ggc2F2ZXMgdXMgYW4gZXhwZW5zaXZlCmluc3BlY3Rpb24gb2YgdGhlIHZ0YWJsZSBsYXlvdXQg c3RyaW5nLgoKKiBtb2R1bGUvcm5ycy9yZWNvcmRzL2luc3BlY3Rpb24uc2NtIChyZWNvcmQtZmll bGQtbXV0YWJsZT8pOiBDaGVjawogIG11dGFiaWxpdHkgdXNpbmcgdGhlIGJpdCBmaWVsZCBzdG9y ZWQgaW4gdGhlIHJlY29yZC10eXBlIGRlc2NyaXB0b3IKICBpbnN0ZWFkIG9mIHRoZSByZWNvcmQg c3RydWN0J3MgdnRhYmxlLgoqIG1vZHVsZS9ybnJzL3JlY29yZHMvcHJvY2VkdXJhbC5zY20gKHJl Y29yZC1pbnRlcm5hbD8pOiBSZWltcGxlbWVudCBhcyBhbgogIGBlcT8nIGNoZWNrIGFnYWluc3Qg YHJlY29yZC12dGFibGUnLgogIChyZWNvcmQtdnRhYmxlKTogTmV3IHN0cnVjdCB0eXBlIHdpdGgg ZmllbGRzIGZvciBwYXJlbnQsIHJlY29yZC10eXBlCiAgZGVzY3JpcHRvciwgYW5kIGZpZWxkIGRh dGEuCiAgKG1ha2UtcmVjb3JkLXR5cGUtZGVzY3JpcHRvcik6IEluIGFkZGl0aW9uIHRvIGZpZWxk IHN0cnVjdCB2dGFibGUsIGJ1aWxkCiAgdXAgYSBtdXRhYmlsaXR5IGJpdCBmaWVsZCB0byB1c2Ug Zm9yIGZhc3QgbXV0YWJpbGl0eSBjaGVja3MuCiAgKHJlY29yZC1hY2Nlc3NvciwgcmVjb3JkLW11 dGF0b3IpOiBVc2UgZmllbGQgc3RydWN0IGFuZCBtdXRhYmlsaXR5IGJpdAogIGZpZWxkLgotLS0K IG1vZHVsZS9ybnJzL3JlY29yZHMvaW5zcGVjdGlvbi5zY20gfCAgIDEwICsrLS0KIG1vZHVsZS9y bnJzL3JlY29yZHMvcHJvY2VkdXJhbC5zY20gfCAgIDg5ICsrKysrKysrKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA2MiBpbnNlcnRpb25zKCspLCAzNyBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9tb2R1bGUvcm5ycy9yZWNvcmRzL2luc3BlY3Rpb24uc2Nt IGIvbW9kdWxlL3JucnMvcmVjb3Jkcy9pbnNwZWN0aW9uLnNjbQppbmRleCBhMTQyZDdjLi4wYmQ2 Mzk5IDEwMDY0NAotLS0gYS9tb2R1bGUvcm5ycy9yZWNvcmRzL2luc3BlY3Rpb24uc2NtCisrKyBi L21vZHVsZS9ybnJzL3JlY29yZHMvaW5zcGVjdGlvbi5zY20KQEAgLTI4LDcgKzI4LDggQEAKIAkg IHJlY29yZC10eXBlLW9wYXF1ZT8gCiAJICByZWNvcmQtdHlwZS1maWVsZC1uYW1lcyAKIAkgIHJl Y29yZC1maWVsZC1tdXRhYmxlPykKLSAgKGltcG9ydCAocm5ycyBiYXNlICg2KSkKKyAgKGltcG9y dCAocm5ycyBhcml0aG1ldGljIGJpdHdpc2UgKDYpKQorICAgICAgICAgIChybnJzIGJhc2UgKDYp KQogCSAgKHJucnMgY29uZGl0aW9ucyAoNikpCiAgICAgICAgICAgKHJucnMgZXhjZXB0aW9ucyAo NikpCiAJICAocm5ycyByZWNvcmRzIHByb2NlZHVyYWwgKDYpKQpAQCAtNDUsNiArNDYsOCBAQAog ICAoZGVmaW5lIHJ0ZC1pbmRleC1vcGFxdWU/IChAQCAocm5ycyByZWNvcmRzIHByb2NlZHVyYWwp IHJ0ZC1pbmRleC1vcGFxdWU/KSkKICAgKGRlZmluZSBydGQtaW5kZXgtZmllbGQtbmFtZXMgCiAg ICAgKEBAIChybnJzIHJlY29yZHMgcHJvY2VkdXJhbCkgcnRkLWluZGV4LWZpZWxkLW5hbWVzKSkK KyAgKGRlZmluZSBydGQtaW5kZXgtZmllbGQtYml0LWZpZWxkCisgICAgKEBAIChybnJzIHJlY29y ZHMgcHJvY2VkdXJhbCkgcnRkLWluZGV4LWZpZWxkLWJpdC1maWVsZCkpCiAgIChkZWZpbmUgcnRk LWluZGV4LWZpZWxkLXZ0YWJsZSAKICAgICAoQEAgKHJucnMgcmVjb3JkcyBwcm9jZWR1cmFsKSBy dGQtaW5kZXgtZmllbGQtdnRhYmxlKSkKIApAQCAtNzYsOCArNzksNSBAQAogICAgIChlbnN1cmUt cnRkIHJ0ZCkgKHN0cnVjdC1yZWYgcnRkIHJ0ZC1pbmRleC1maWVsZC1uYW1lcykpCiAgIChkZWZp bmUgKHJlY29yZC1maWVsZC1tdXRhYmxlPyBydGQgaykKICAgICAoZW5zdXJlLXJ0ZCBydGQpCi0g ICAgKGxldCAoKHZ0IChzdHJ1Y3QtcmVmIHJ0ZCBydGQtaW5kZXgtZmllbGQtdnRhYmxlKSkpCi0g ICAgICAoZXF2PyAoc3RyaW5nLXJlZiAoc3ltYm9sLT5zdHJpbmcgKHN0cnVjdC1yZWYgdnQgdnRh YmxlLWluZGV4LWxheW91dCkpCi0JCQkoKyAoKiAyICgrIGsgMikpIDEpKQotCSAgICAjXHcpKSkK KyAgICAoYml0d2lzZS1iaXQtc2V0PyAoc3RydWN0LXJlZiBydGQgcnRkLWluZGV4LWZpZWxkLWJp dC1maWVsZCkgaykpCiApCmRpZmYgLS1naXQgYS9tb2R1bGUvcm5ycy9yZWNvcmRzL3Byb2NlZHVy YWwuc2NtIGIvbW9kdWxlL3JucnMvcmVjb3Jkcy9wcm9jZWR1cmFsLnNjbQppbmRleCBiZDFkMGQx Li5jNDlmMGNiIDEwMDY0NAotLS0gYS9tb2R1bGUvcm5ycy9yZWNvcmRzL3Byb2NlZHVyYWwuc2Nt CisrKyBiL21vZHVsZS9ybnJzL3JlY29yZHMvcHJvY2VkdXJhbC5zY20KQEAgLTI4LDcgKzI4LDEx IEBACiAJICByZWNvcmQtbXV0YXRvcikKIAkgIAogICAoaW1wb3J0IChybnJzIGJhc2UgKDYpKQot ICAgICAgICAgIChvbmx5IChndWlsZSkgYW5kPT4KKyAgICAgICAgICAob25seSAoZ3VpbGUpIGxv Z2FuZCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2lvcgorICAgICAgICAgICAgICAgICAg ICAgICAgYXNoCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZD0+CiAJCQl0aHJvdwogCQkJ ZGlzcGxheQogCQkgICAgICAgIG1ha2Utc3RydWN0IApAQCAtNTIsMTYgKzU2LDExIEBACiAJICAo b25seSAoc3JmaSA6MSkgZm9sZCBzcGxpdC1hdCB0YWtlKSkKIAogICAoZGVmaW5lIChyZWNvcmQt aW50ZXJuYWw/IG9iaikKLSAgICAoYW5kIChzdHJ1Y3Q/IG9iaikKLQkgKGxldCogKCh2dGFibGUg KHN0cnVjdC12dGFibGUgb2JqKSkKLQkJKGxheW91dCAoc3ltYm9sLT5zdHJpbmcKLQkJCSAoc3Ry dWN0LXJlZiB2dGFibGUgdnRhYmxlLWluZGV4LWxheW91dCkpKSkKLQkgICAoYW5kICg+PSAoc3Ry aW5nLWxlbmd0aCBsYXlvdXQpIDQpCi0JCShsZXQgKChydGQgKHN0cnVjdC1yZWYgb2JqIHJlY29y ZC1pbmRleC1ydGQpKSkKLQkJICAoYW5kIChyZWNvcmQtdHlwZS1kZXNjcmlwdG9yPyBydGQpKSkp KSkpCisgICAgKGFuZCAoc3RydWN0PyBvYmopIChlcT8gKHN0cnVjdC12dGFibGUgb2JqKSByZWNv cmQtdnRhYmxlKSkpCiAKICAgKGRlZmluZSByZWNvcmQtaW5kZXgtcGFyZW50IDApCiAgIChkZWZp bmUgcmVjb3JkLWluZGV4LXJ0ZCAxKQorICAoZGVmaW5lIHJlY29yZC1pbmRleC1maWVsZHMgMikK IAogICAoZGVmaW5lIHJ0ZC1pbmRleC1uYW1lIDApCiAgIChkZWZpbmUgcnRkLWluZGV4LXVpZCAx KQpAQCAtNzEsMTQgKzcwLDIyIEBACiAgIChkZWZpbmUgcnRkLWluZGV4LXByZWRpY2F0ZSA1KQog ICAoZGVmaW5lIHJ0ZC1pbmRleC1maWVsZC1uYW1lcyA2KQogICAoZGVmaW5lIHJ0ZC1pbmRleC1m aWVsZC12dGFibGUgNykKLSAgKGRlZmluZSBydGQtaW5kZXgtZmllbGQtYmluZGVyIDgpCisgIChk ZWZpbmUgcnRkLWluZGV4LWZpZWxkLWJpdC1maWVsZCA4KQorICAoZGVmaW5lIHJ0ZC1pbmRleC1m aWVsZC1iaW5kZXIgOSkKIAogICAoZGVmaW5lIHJjdGQtaW5kZXgtcnRkIDApCiAgIChkZWZpbmUg cmN0ZC1pbmRleC1wYXJlbnQgMSkKICAgKGRlZmluZSByY3RkLWluZGV4LXByb3RvY29sIDIpCiAK KyAgKGRlZmluZSByZWNvcmQtdnRhYmxlCisgICAgKG1ha2UtdnRhYmxlICJwcnBycHIiCisgICAg ICAgICAgICAgICAgIChsYW1iZGEgKG9iaiBwb3J0KQorICAgICAgICAgICAgICAgICAgIChzaW1w bGUtZm9ybWF0IHBvcnQgIiM8cjZyczpyZWNvcmQ6fkE+IgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChzdHJ1Y3QtcmVmIChzdHJ1Y3QtcmVmIG9iaiByZWNvcmQtaW5kZXgtcnRk KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0ZC1pbmRl eC1uYW1lKSkpKSkKKwogICAoZGVmaW5lIHJlY29yZC10eXBlLXZ0YWJsZSAKLSAgICAobWFrZS12 dGFibGUgInBycHJwcnBycHJwcnBycHJwciIgCisgICAgKG1ha2UtdnRhYmxlICJwcnBycHJwcnBy cHJwcnBycHJwciIgCiAJCSAobGFtYmRhIChvYmogcG9ydCkgCiAJCSAgIChzaW1wbGUtZm9ybWF0 IHBvcnQgIiM8cjZyczpyZWNvcmQtdHlwZTp+QT4iCiAJCQkJICAoc3RydWN0LXJlZiBvYmogcnRk LWluZGV4LW5hbWUpKSkpKQpAQCAtOTMsMTQgKzEwMCwzMyBAQAogICAoZGVmaW5lIHVpZC10YWJs ZSAobWFrZS1oYXNoLXRhYmxlKSkgICAgCiAKICAgKGRlZmluZSAobWFrZS1yZWNvcmQtdHlwZS1k ZXNjcmlwdG9yIG5hbWUgcGFyZW50IHVpZCBzZWFsZWQ/IG9wYXF1ZT8gZmllbGRzKQotICAgIChk ZWZpbmUgZmllbGRzLXZ0YWJsZQotICAgICAgKG1ha2UtdnRhYmxlIChmb2xkIChsYW1iZGEgKHgg cCkgCi0JCQkgICAoc3RyaW5nLWFwcGVuZCBwIChjYXNlIChjYXIgeCkKLQkJCQkJICAgICAgKChp bW11dGFibGUpICJwciIpCi0JCQkJCSAgICAgICgobXV0YWJsZSkgInB3IikpKSkKLQkJCSAicHJw ciIgKHZlY3Rvci0+bGlzdCBmaWVsZHMpKQorICAgIChkZWZpbmUgZmllbGRzLXBhaXIKKyAgICAg IChsZXQgbG9vcCAoKGZpZWxkLWxpc3QgKHZlY3Rvci0+bGlzdCBmaWVsZHMpKQorICAgICAgICAg ICAgICAgICAobGF5b3V0LXN0ciAiIikKKyAgICAgICAgICAgICAgICAgKGxheW91dC1iaXQtZmll bGQgMCkKKyAgICAgICAgICAgICAgICAgKGNvdW50ZXIgMCkpCisgICAgICAgIChpZiAobnVsbD8g ZmllbGQtbGlzdCkKKyAgICAgICAgICAgIChjb25zIGxheW91dC1zdHIgbGF5b3V0LWJpdC1maWVs ZCkKKyAgICAgICAgICAgIChjYXNlIChjYWFyIGZpZWxkLWxpc3QpCisgICAgICAgICAgICAgICgo aW1tdXRhYmxlKSAKKyAgICAgICAgICAgICAgIChsb29wIChjZHIgZmllbGQtbGlzdCkKKyAgICAg ICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGxheW91dC1zdHIgInByIikgCisgICAgICAg ICAgICAgICAgICAgICBsYXlvdXQtYml0LWZpZWxkIAorICAgICAgICAgICAgICAgICAgICAgKCsg Y291bnRlciAxKSkpCisgICAgICAgICAgICAgICgobXV0YWJsZSkKKyAgICAgICAgICAgICAgIChs b29wIChjZHIgZmllbGQtbGlzdCkKKyAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5k IGxheW91dC1zdHIgInB3IikKKyAgICAgICAgICAgICAgICAgICAgIChsb2dpb3IgbGF5b3V0LWJp dC1maWVsZCAoYXNoIDEgY291bnRlcikpCisgICAgICAgICAgICAgICAgICAgICAoKyBjb3VudGVy IDEpKSkKKyAgICAgICAgICAgICAgKGVsc2UgKHI2cnMtcmFpc2UgKG1ha2UtYXNzZXJ0aW9uLXZp b2xhdGlvbikpKSkpKSkKKworICAgIChkZWZpbmUgZmllbGRzLXZ0YWJsZSAKKyAgICAgIChtYWtl LXZ0YWJsZSAoY2FyIGZpZWxkcy1wYWlyKQogCQkgICAobGFtYmRhIChvYmogcG9ydCkKLQkJICAg ICAoc2ltcGxlLWZvcm1hdCBwb3J0ICIjPHI2cnM6cmVjb3JkOn5BPiIgbmFtZSkpKSkKKwkJICAg ICAoc2ltcGxlLWZvcm1hdCBwb3J0ICIjPHI2cnM6cmVjb3JkLWZpZWxkczp+QT4iIG5hbWUpKSkp CisKKyAgICAoZGVmaW5lIGZpZWxkcy1iaXQtZmllbGQgKGNkciBmaWVsZHMtcGFpcikpCisKICAg ICAoZGVmaW5lIGZpZWxkLW5hbWVzIChsaXN0LT52ZWN0b3IgKG1hcCBjYWRyICh2ZWN0b3ItPmxp c3QgZmllbGRzKSkpKQogICAgIChkZWZpbmUgbGF0ZS1ydGQgI2YpCiAgICAgKGRlZmluZSAocHJp dmF0ZS1yZWNvcmQtcHJlZGljYXRlIG9iaikgICAgICAgCkBAIC0xMTEsMTAgKzEzNyw5IEBACiAJ CQlwcml2YXRlLXJlY29yZC1wcmVkaWNhdGUpKSkpKQogCiAgICAgKGRlZmluZSAoZmllbGQtYmlu ZGVyIHBhcmVudC1zdHJ1Y3QgLiBhcmdzKQotICAgICAgKGFwcGx5IG1ha2Utc3RydWN0IChhcHBl bmQgKGxpc3QgZmllbGRzLXZ0YWJsZSAwIAotCQkJCSAgICAgICBwYXJlbnQtc3RydWN0IAotCQkJ CSAgICAgICBsYXRlLXJ0ZCkgCi0JCQkJIGFyZ3MpKSkKKyAgICAgIChtYWtlLXN0cnVjdCByZWNv cmQtdnRhYmxlIDAgcGFyZW50LXN0cnVjdCBsYXRlLXJ0ZCAKKyAgICAgICAgICAgICAgICAgICAo YXBwbHkgbWFrZS1zdHJ1Y3QgKGFwcGVuZCAobGlzdCBmaWVsZHMtdnRhYmxlIDApIGFyZ3MpKSkp CisKICAgICAoaWYgKGFuZCBwYXJlbnQgKHN0cnVjdC1yZWYgcGFyZW50IHJ0ZC1pbmRleC1zZWFs ZWQ/KSkKIAkocjZycy1yYWlzZSAobWFrZS1hc3NlcnRpb24tdmlvbGF0aW9uKSkpCiAKQEAgLTE1 MCw2ICsxNzUsNyBAQAogCQkJCSAgcHJpdmF0ZS1yZWNvcmQtcHJlZGljYXRlCiAJCQkJICBmaWVs ZC1uYW1lcwogCQkJCSAgZmllbGRzLXZ0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZpZWxkcy1iaXQtZmllbGQKIAkJCQkgIGZpZWxkLWJpbmRlcikpKQogCSAgICAoc2V0 ISBsYXRlLXJ0ZCBydGQpCiAJICAgIChpZiB1aWQgKGhhc2hxLXNldCEgdWlkLXRhYmxlIHVpZCBy dGQpKQpAQCAtMjAwLDI0ICsyMjYsMjMgQEAKIAogICAoZGVmaW5lIChyZWNvcmQtYWNjZXNzb3Ig cnRkIGspCiAgICAgKGRlZmluZSAocmVjb3JkLWFjY2Vzc29yLWlubmVyIG9iaikKLSAgICAgIChp ZiAobm90IChyZWNvcmQtaW50ZXJuYWw/IG9iaikpCi0JICAocjZycy1yYWlzZSAobWFrZS1hc3Nl cnRpb24tdmlvbGF0aW9uKSkpCiAgICAgICAoaWYgKGVxPyAoc3RydWN0LXJlZiBvYmogcmVjb3Jk LWluZGV4LXJ0ZCkgcnRkKQotCSAgKHN0cnVjdC1yZWYgb2JqICgrIGsgMikpCi0JICAocmVjb3Jk LWFjY2Vzc29yLWlubmVyIChzdHJ1Y3QtcmVmIG9iaiByZWNvcmQtaW5kZXgtcGFyZW50KSkpKQot ICAgIChsYW1iZGEgKG9iaikgKHJlY29yZC1hY2Nlc3Nvci1pbm5lciBvYmopKSkKKwkgIChzdHJ1 Y3QtcmVmIChzdHJ1Y3QtcmVmIG9iaiByZWNvcmQtaW5kZXgtZmllbGRzKSBrKQorICAgICAgICAg IChhbmQ9PiAoc3RydWN0LXJlZiBvYmogcmVjb3JkLWluZGV4LXBhcmVudCkgcmVjb3JkLWFjY2Vz c29yLWlubmVyKSkpCisgICAgKGxhbWJkYSAob2JqKSAKKyAgICAgIChpZiAobm90IChyZWNvcmQt aW50ZXJuYWw/IG9iaikpCisgICAgICAgICAgKHI2cnMtcmFpc2UgKG1ha2UtYXNzZXJ0aW9uLXZp b2xhdGlvbikpKQorICAgICAgKHJlY29yZC1hY2Nlc3Nvci1pbm5lciBvYmopKSkKIAogICAoZGVm aW5lIChyZWNvcmQtbXV0YXRvciBydGQgaykKICAgICAoZGVmaW5lIChyZWNvcmQtbXV0YXRvci1p bm5lciBvYmogdmFsKQotICAgICAgKGFuZCBvYmogCisgICAgICAoYW5kIG9iagogCSAgIChvciAo YW5kIChlcT8gKHN0cnVjdC1yZWYgb2JqIHJlY29yZC1pbmRleC1ydGQpIHJ0ZCkgCi0JCSAgICAo c3RydWN0LXNldCEgb2JqICgrIGsgMikgdmFsKSkKKwkJICAgIChzdHJ1Y3Qtc2V0ISAoc3RydWN0 LXJlZiBvYmogcmVjb3JkLWluZGV4LWZpZWxkcykgayB2YWwpKQogCSAgICAgICAocmVjb3JkLW11 dGF0b3ItaW5uZXIgKHN0cnVjdC1yZWYgb2JqIHJlY29yZC1pbmRleC1wYXJlbnQpIAogCQkJCSAg ICAgdmFsKSkpKQotICAgIChsZXQqICgocnRkLXZ0YWJsZSAoc3RydWN0LXJlZiBydGQgcnRkLWlu ZGV4LWZpZWxkLXZ0YWJsZSkpCi0JICAgKGZpZWxkLWxheW91dCAoc3ltYm9sLT5zdHJpbmcKLQkJ CSAgKHN0cnVjdC1yZWYgcnRkLXZ0YWJsZSB2dGFibGUtaW5kZXgtbGF5b3V0KSkpKQotICAgICAg KGlmIChub3QgKGVxdj8gKHN0cmluZy1yZWYgZmllbGQtbGF5b3V0ICgrICgqICgrIGsgMikgMikg MSkpICNcdykpCisgICAgKGxldCAoKGJpdC1maWVsZCAoc3RydWN0LXJlZiBydGQgcnRkLWluZGV4 LWZpZWxkLWJpdC1maWVsZCkpKQorICAgICAgKGlmICh6ZXJvPyAobG9nYW5kIGJpdC1maWVsZCAo YXNoIDEgaykpKQogCSAgKHI2cnMtcmFpc2UgKG1ha2UtYXNzZXJ0aW9uLXZpb2xhdGlvbikpKSkK ICAgICAobGFtYmRhIChvYmogdmFsKSAocmVjb3JkLW11dGF0b3ItaW5uZXIgb2JqIHZhbCkpKQog Ci0tIAoxLjcuMC40Cgo= --0022152d6ddd50e0a8049091c4ef--