From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Pip Cet Newsgroups: gmane.emacs.bugs Subject: bug#36597: 27.0.50; rehash hash tables eagerly in pdumper Date: Mon, 10 Aug 2020 11:51:42 +0000 Message-ID: References: <6a260307-a463-bd08-8a10-d7664d0606a2@cs.ucla.edu> <74235afc-7043-1da7-7c71-07f0ca23b9fd@cs.ucla.edu> <83r26mv53z.fsf@gnu.org> <87ft8vbow1.fsf@gnus.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="00000000000028c00105ac849638" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="25266"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Paul Eggert , 36597@debbugs.gnu.org To: Lars Ingebrigtsen Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Aug 10 13:53:20 2020 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1k56Mh-0006RR-Hz for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 10 Aug 2020 13:53:19 +0200 Original-Received: from localhost ([::1]:43700 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k56Mg-0008BP-Ip for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 10 Aug 2020 07:53:18 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:49478) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k56MQ-0008A0-88 for bug-gnu-emacs@gnu.org; Mon, 10 Aug 2020 07:53:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:51411) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k56MP-0004nw-Up for bug-gnu-emacs@gnu.org; Mon, 10 Aug 2020 07:53:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1k56MP-0000vs-Uc for bug-gnu-emacs@gnu.org; Mon, 10 Aug 2020 07:53:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Pip Cet Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 10 Aug 2020 11:53:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 36597 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 36597-submit@debbugs.gnu.org id=B36597.15970603473514 (code B ref 36597); Mon, 10 Aug 2020 11:53:01 +0000 Original-Received: (at 36597) by debbugs.gnu.org; 10 Aug 2020 11:52:27 +0000 Original-Received: from localhost ([127.0.0.1]:34724 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1k56Lq-0000ub-IH for submit@debbugs.gnu.org; Mon, 10 Aug 2020 07:52:27 -0400 Original-Received: from mail-oi1-f174.google.com ([209.85.167.174]:45586) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1k56Lo-0000uJ-9s for 36597@debbugs.gnu.org; Mon, 10 Aug 2020 07:52:25 -0400 Original-Received: by mail-oi1-f174.google.com with SMTP id o21so8567387oie.12 for <36597@debbugs.gnu.org>; Mon, 10 Aug 2020 04:52:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=5MwkV0JDgj6ZAutFMIY+M2sMjqj3yVW/cQJZOphxa9E=; b=sQjKdq7U3qVJKZ4jzXa0trT9CPVmnBhURCZh9MU1Rke1dFsXhS7uwh0oQAzjTSHmdg pwVH2kN+JPZp1vODVFhJlW+Y3mdQJo4fepNFnLPcjayEdd5crjGafdBGKLhOA1HcjVIN Hovq7D7Zp/dQmybu/sxT2gLieeT/K7ppvIaKU/I8JyISTs7wrI6tp4vxEZ///ZhxN3m5 StmCwJ9rAQMh4ezugOJ+0xya5UWmzzf1LZgJL+WKYacBFISpSJ6LcY8jo7Tvh7YUZWWH m4dzG23X1HcFG5PktgWMEgAE5hyKRrGmOj65GV3n5MaysbD2BPMs/wGef04BGKE2nVxv dUJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=5MwkV0JDgj6ZAutFMIY+M2sMjqj3yVW/cQJZOphxa9E=; b=gM94aw3hr9p7tkz3S7BBFm3O5+k+rR/YptxSy30FKfb5J/1Tm4WfjL/lHp2ClsrevY kMVlq5WdXQ/7dQ7xVuiJ0ZAznejqgIr6kW/b100vOxVUpZkq2d4REFeJng/ccKfy4zOG Ittmh7Tr5TN2/Eyaeb5/uNJXGFBdizU0PhkvSdxeeDFgUX0+ugqGo0+7U1vP0YcecEju GOWTjSrB4IpSdBKp2KIAMiH46F5O8NuXaYtF+QzwY0rLxkY+iO1npOmuDB2yDbMSdMXT PqWNdHVjMObdXYHnVHgWNOj4Co3v+A9fpFtnefY3/ufKs8uNpgo280N6mdFq1VzuTk1I O6gQ== X-Gm-Message-State: AOAM533T20eVEr1B/ezPCGLU8qvx8FurS8ba9b9ufeI4wBWR9enumkEB nIlgJYmuG/O7Z+Nvm8rCDQiToXXVsBupyEwASHw= X-Google-Smtp-Source: ABdhPJwd+bf2NYRewSGbUms0qOLe4U1/Mk/nCTwK9U7RWe5sr2AlYwVONHmCkl7w4p3vnHUay+l+aoJyjlXqfLVb5to= X-Received: by 2002:aca:ed4e:: with SMTP id l75mr366293oih.44.1597060338457; Mon, 10 Aug 2020 04:52:18 -0700 (PDT) In-Reply-To: <87ft8vbow1.fsf@gnus.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:184490 Archived-At: --00000000000028c00105ac849638 Content-Type: text/plain; charset="UTF-8" On Sun, Aug 9, 2020 at 7:28 PM Lars Ingebrigtsen wrote: > >> Well, at least they'll require rebasing, particularly of the > >> no-internal-freelists patch :-) > > > > Rebased patches attached. The performance measurements don't seem to > > change significantly. > > And this was the final message in this thread. I think the general > consensus was that Pip's patches were a good idea... unless they had > any negative performance impact? I'm not aware of any remaining negative performance impact, but I do seem to recall Daniel was somewhat opposed to the patch. > So I tried applying the patch now to Emacs 28 to do some benchmarking, > but it didn't apply cleanly, so I gave up. I'll try to rebase them again. Does the attached work for you? > Is this still something worth pursuing? I think it is, at least in the case of the "rehash eagerly" patch. As for the more general rewrite of hash tables, it might be a good idea to summarize and discuss this idea some more. Here are some initial notes, but I'll make a proper proposal once things are ready: - there's a new lisp.h type for hash cells, which is four words long and holds a hash, key, value, and a next link (either another hash cell, or the hash table this cell belongs to, or nil if it no longer belongs to any hash table) - hash tables are essentially vectors of such hash cells - hash cells are invisible to Lisp code, but C code can hold on to hash cell Lisp Objects, guaranteeing they won't be collected (they can still be removed from the hash table) - in my current implementation, hash cells aren't pseudovectors, they're cons-like objects with four cells rather than two. The implications are: - more work for the garbage collector - a somewhat ambitious rewrite of the profiler to keep hash cells pre-allocated - shrinkable hash tables - genuinely unordered hash tables, since there's no more HASH_INDEX - rehash thresholds would be interpreted differently There's also a slight reduction in memory usage for hash tables. --00000000000028c00105ac849638 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Rehash-hash-tables-eagerly-after-loading-a-dump.patch" Content-Disposition: attachment; filename="0001-Rehash-hash-tables-eagerly-after-loading-a-dump.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kdoge3ao0 RnJvbSAzYWUxN2RiN2QyMTIzYjVhMGI3ZDI1ZTU5MGY5ZTI5ZDdmZjUzN2ZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQaXAgQ2V0IDxwaXBjZXRAZ21haWwuY29tPgpEYXRlOiBGcmks IDE5IEp1bCAyMDE5IDA3OjEyOjQyICswMDAwClN1YmplY3Q6IFtQQVRDSF0gUmVoYXNoIGhhc2gg dGFibGVzIGVhZ2VybHkgYWZ0ZXIgbG9hZGluZyBhIGR1bXAuCgoqIHNyYy9saXNwLmggKGhhc2hf cmVoYXNoX25lZWRlZF9wKTogUmVtb3ZlLiAgQWxsIHVzZXMgcmVtb3ZlZC4KKGhhc2hfcmVoYXNo X2lmX25lZWRlZCk6IFJlbW92ZS4gIEFsbCB1c2VzIHJlbW92ZWQuCihzdHJ1Y3QgTGlzcF9IYXNo X1RhYmxlKTogUmVtb3ZlIGNvbW1lbnQgYWJvdXQgcmVoYXNoaW5nIGhhc2ggdGFibGVzLgoqIHNy Yy9wZHVtcGVyLmMgKHRoYXdfaGFzaF90YWJsZXMpOiBOZXcgZnVuY3Rpb24uCihoYXNoX3RhYmxl X3RoYXcpOiBOZXcgZnVuY3Rpb24uCihoYXNoX3RhYmxlX2ZyZWV6ZSk6IE5ldyBmdW5jdGlvbi4K KGR1bXBfaGFzaF90YWJsZSk6IFNpbXBsaWZ5LgooZHVtcF9oYXNoX3RhYmxlX2xpc3QpOiBOZXcg ZnVuY3Rpb24uCihoYXNoX3RhYmxlX2NvbnRlbnRzKTogTmV3IGZ1bmN0aW9uLgooRmR1bXBfZW1h Y3NfcG9ydGFibGUpOiBIYW5kbGUgaGFzaCB0YWJsZXMgYnkgZWFnZXIgcmVoYXNoaW5nLgoocGR1 bXBlcl9sb2FkKTogUmVzdG9yZSBoYXNoIHRhYmxlcy4KKGluaXRfcGR1bXBlcl9vbmNlKTogTmV3 IGZ1bmN0aW9uLgotLS0KIHNyYy9ieXRlY29kZS5jICB8ICAgMSAtCiBzcmMvY29tcG9zaXRlLmMg fCAgIDEgLQogc3JjL2VtYWNzLmMgICAgIHwgICAxICsKIHNyYy9mbnMuYyAgICAgICB8ICA2NSAr KysrLS0tLS0tLS0tLS0KIHNyYy9saXNwLmggICAgICB8ICAyMSArLS0tLQogc3JjL21pbmlidWYu YyAgIHwgICAzIC0KIHNyYy9wZHVtcGVyLmMgICB8IDIwOCArKysrKysrKysrKysrKysrKysrKyst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9wZHVtcGVyLmggICB8ICAgMSArCiA4IGZp bGVzIGNoYW5nZWQsIDExMiBpbnNlcnRpb25zKCspLCAxODkgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2J5dGVjb2RlLmMgYi9zcmMvYnl0ZWNvZGUuYwppbmRleCAxOTEzYTQ4MTJhLi4x YzNiNmVhYzBkIDEwMDY0NAotLS0gYS9zcmMvYnl0ZWNvZGUuYworKysgYi9zcmMvYnl0ZWNvZGUu YwpAQCAtMTQwMSw3ICsxNDAxLDYgQEAgI2RlZmluZSBERUZJTkUobmFtZSwgdmFsdWUpIExBQkVM IChuYW1lKSAsCiAgICAgICAgICAgICBMaXNwX09iamVjdCB2MSA9IFBPUDsKICAgICAgICAgICAg IHB0cmRpZmZfdCBpOwogICAgICAgICAgICAgc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaCA9IFhI QVNIX1RBQkxFIChqbXBfdGFibGUpOwotICAgICAgICAgICAgaGFzaF9yZWhhc2hfaWZfbmVlZGVk IChoKTsKIAogICAgICAgICAgICAgLyogaC0+Y291bnQgaXMgYSBmYXN0ZXIgYXBwcm94aW1hdGlv biBmb3IgSEFTSF9UQUJMRV9TSVpFIChoKQogICAgICAgICAgICAgICAgaGVyZS4gKi8KZGlmZiAt LWdpdCBhL3NyYy9jb21wb3NpdGUuYyBiL3NyYy9jb21wb3NpdGUuYwppbmRleCBmOTZmMGI3Nzcy Li5lYzJiODMyOGY3IDEwMDY0NAotLS0gYS9zcmMvY29tcG9zaXRlLmMKKysrIGIvc3JjL2NvbXBv c2l0ZS5jCkBAIC02NTIsNyArNjUyLDYgQEAgZ3N0cmluZ19sb29rdXBfY2FjaGUgKExpc3BfT2Jq ZWN0IGhlYWRlcikKIGNvbXBvc2l0aW9uX2dzdHJpbmdfcHV0X2NhY2hlIChMaXNwX09iamVjdCBn c3RyaW5nLCBwdHJkaWZmX3QgbGVuKQogewogICBzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpoID0g WEhBU0hfVEFCTEUgKGdzdHJpbmdfaGFzaF90YWJsZSk7Ci0gIGhhc2hfcmVoYXNoX2lmX25lZWRl ZCAoaCk7CiAgIExpc3BfT2JqZWN0IGhlYWRlciA9IExHU1RSSU5HX0hFQURFUiAoZ3N0cmluZyk7 CiAgIExpc3BfT2JqZWN0IGhhc2ggPSBoLT50ZXN0Lmhhc2hmbiAoaGVhZGVyLCBoKTsKICAgaWYg KGxlbiA8IDApCmRpZmYgLS1naXQgYS9zcmMvZW1hY3MuYyBiL3NyYy9lbWFjcy5jCmluZGV4IDhl NWVhZjVlNDMuLmQzMWZhMmNiMjggMTAwNjQ0Ci0tLSBhL3NyYy9lbWFjcy5jCisrKyBiL3NyYy9l bWFjcy5jCkBAIC0xNTM2LDYgKzE1MzYsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAgIGlmICghaW5pdGlhbGl6ZWQpCiAgICAgewogICAgICAgaW5pdF9hbGxvY19vbmNlICgpOwor ICAgICAgaW5pdF9wZHVtcGVyX29uY2UgKCk7CiAgICAgICBpbml0X29iYXJyYXlfb25jZSAoKTsK ICAgICAgIGluaXRfZXZhbF9vbmNlICgpOwogICAgICAgaW5pdF9jaGFyc2V0X29uY2UgKCk7CmRp ZmYgLS1naXQgYS9zcmMvZm5zLmMgYi9zcmMvZm5zLmMKaW5kZXggODExZDZlODIwMC4uNDFlMjYx MDRmMyAxMDA2NDQKLS0tIGEvc3JjL2Zucy5jCisrKyBiL3NyYy9mbnMuYwpAQCAtNDI0OCw1MCAr NDI0OCwyOCBAQCBtYXliZV9yZXNpemVfaGFzaF90YWJsZSAoc3RydWN0IExpc3BfSGFzaF9UYWJs ZSAqaCkKIAogLyogUmVjb21wdXRlIHRoZSBoYXNoZXMgKGFuZCBoZW5jZSBhbHNvIHRoZSAibmV4 dCIgcG9pbnRlcnMpLgogICAgTm9ybWFsbHkgdGhlcmUncyBuZXZlciBhIG5lZWQgdG8gcmVjb21w dXRlIGhhc2hlcy4KLSAgIFRoaXMgaXMgZG9uZSBvbmx5IG9uIGZpcnN0LWFjY2VzcyB0byBhIGhh c2gtdGFibGUgbG9hZGVkIGZyb20KLSAgIHRoZSAicGR1bXAiLCBiZWNhdXNlIHRoZSBvYmplY3Qn cyBhZGRyZXNzZXMgbWF5IGhhdmUgY2hhbmdlZCwgdGh1cworICAgVGhpcyBpcyBkb25lIG9ubHkg b24gZmlyc3QgYWNjZXNzIHRvIGEgaGFzaC10YWJsZSBsb2FkZWQgZnJvbQorICAgdGhlICJwZHVt cCIsIGJlY2F1c2UgdGhlIG9iamVjdHMnIGFkZHJlc3NlcyBtYXkgaGF2ZSBjaGFuZ2VkLCB0aHVz CiAgICBhZmZlY3RpbmcgdGhlaXIgaGFzaC4gICovCiB2b2lkCi1oYXNoX3RhYmxlX3JlaGFzaCAo c3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaCkKK2hhc2hfdGFibGVfcmVoYXNoIChMaXNwX09iamVj dCBoYXNoKQogewotICBwdHJkaWZmX3Qgc2l6ZSA9IEhBU0hfVEFCTEVfU0laRSAoaCk7Ci0KLSAg LyogVGhlc2Ugc3RydWN0dXJlcyBtYXkgaGF2ZSBiZWVuIHB1cmVjb3BpZWQgYW5kIHNoYXJlZAot ICAgICAoYnVnIzM2NDQ3KS4gICovCi0gIExpc3BfT2JqZWN0IGhhc2ggPSBtYWtlX25pbF92ZWN0 b3IgKHNpemUpOwotICBoLT5uZXh0ID0gRmNvcHlfc2VxdWVuY2UgKGgtPm5leHQpOwotICBoLT5p bmRleCA9IEZjb3B5X3NlcXVlbmNlIChoLT5pbmRleCk7Ci0KKyAgc3RydWN0IExpc3BfSGFzaF9U YWJsZSAqaCA9IFhIQVNIX1RBQkxFIChoYXNoKTsKICAgLyogUmVjb21wdXRlIHRoZSBhY3R1YWwg aGFzaCBjb2RlcyBmb3IgZWFjaCBlbnRyeSBpbiB0aGUgdGFibGUuCiAgICAgIE9yZGVyIGlzIHN0 aWxsIGludmFsaWQuICAqLwotICBmb3IgKHB0cmRpZmZfdCBpID0gMDsgaSA8IHNpemU7ICsraSkK KyAgZm9yIChwdHJkaWZmX3QgaSA9IDA7IGkgPCBoLT5jb3VudDsgKytpKQogICAgIHsKICAgICAg IExpc3BfT2JqZWN0IGtleSA9IEhBU0hfS0VZIChoLCBpKTsKLSAgICAgIGlmICghRVEgKGtleSwg UXVuYm91bmQpKQotICAgICAgICBBU0VUIChoYXNoLCBpLCBoLT50ZXN0Lmhhc2hmbiAoa2V5LCBo KSk7CisgICAgICBMaXNwX09iamVjdCBoYXNoX2NvZGUgPSBoLT50ZXN0Lmhhc2hmbiAoa2V5LCBo KTsKKyAgICAgIHB0cmRpZmZfdCBzdGFydF9vZl9idWNrZXQgPSBYVUZJWE5VTSAoaGFzaF9jb2Rl KSAlIEFTSVpFIChoLT5pbmRleCk7CisgICAgICBzZXRfaGFzaF9oYXNoX3Nsb3QgKGgsIGksIGhh c2hfY29kZSk7CisgICAgICBzZXRfaGFzaF9uZXh0X3Nsb3QgKGgsIGksIEhBU0hfSU5ERVggKGgs IHN0YXJ0X29mX2J1Y2tldCkpOworICAgICAgc2V0X2hhc2hfaW5kZXhfc2xvdCAoaCwgc3RhcnRf b2ZfYnVja2V0LCBpKTsKKyAgICAgIGVhc3NlcnQgKEhBU0hfTkVYVCAoaCwgaSkgIT0gaSk7IC8q IFN0b3AgbG9vcHMuICAqLwogICAgIH0KIAotICAvKiBSZXNldCB0aGUgaW5kZXggc28gdGhhdCBh bnkgc2xvdCB3ZSBkb24ndCBmaWxsIGJlbG93IGlzIG1hcmtlZAotICAgICBpbnZhbGlkLiAgKi8K LSAgRmZpbGxhcnJheSAoaC0+aW5kZXgsIG1ha2VfZml4bnVtICgtMSkpOwotCi0gIC8qIFJlYnVp bGQgdGhlIGNvbGxpc2lvbiBjaGFpbnMuICAqLwotICBmb3IgKHB0cmRpZmZfdCBpID0gMDsgaSA8 IHNpemU7ICsraSkKLSAgICBpZiAoIU5JTFAgKEFSRUYgKGhhc2gsIGkpKSkKLSAgICAgIHsKLSAg ICAgICAgRU1BQ1NfVUlOVCBoYXNoX2NvZGUgPSBYVUZJWE5VTSAoQVJFRiAoaGFzaCwgaSkpOwot ICAgICAgICBwdHJkaWZmX3Qgc3RhcnRfb2ZfYnVja2V0ID0gaGFzaF9jb2RlICUgQVNJWkUgKGgt PmluZGV4KTsKLSAgICAgICAgc2V0X2hhc2hfbmV4dF9zbG90IChoLCBpLCBIQVNIX0lOREVYICho LCBzdGFydF9vZl9idWNrZXQpKTsKLSAgICAgICAgc2V0X2hhc2hfaW5kZXhfc2xvdCAoaCwgc3Rh cnRfb2ZfYnVja2V0LCBpKTsKLSAgICAgICAgZWFzc2VydCAoSEFTSF9ORVhUIChoLCBpKSAhPSBp KTsgLyogU3RvcCBsb29wcy4gICovCi0gICAgICB9Ci0KLSAgLyogRmluYWxseSwgbWFyayB0aGUg aGFzaCB0YWJsZSBhcyBoYXZpbmcgYSB2YWxpZCBoYXNoIG9yZGVyLgotICAgICBEbyB0aGlzIGxh c3Qgc28gdGhhdCBpZiB3ZSdyZSBpbnRlcnJ1cHRlZCwgd2UgcmV0cnkgb24gbmV4dAotICAgICBh Y2Nlc3MuICovCi0gIGVhc3NlcnQgKGhhc2hfcmVoYXNoX25lZWRlZF9wIChoKSk7Ci0gIGgtPmhh c2ggPSBoYXNoOwotICBlYXNzZXJ0ICghaGFzaF9yZWhhc2hfbmVlZGVkX3AgKGgpKTsKKyAgZm9y IChwdHJkaWZmX3QgaSA9IGgtPmNvdW50OyBpIDwgQVNJWkUgKGgtPm5leHQpIC0gMTsgaSsrKQor ICAgIHNldF9oYXNoX25leHRfc2xvdCAoaCwgaSwgaSArIDEpOwogfQogCiAvKiBMb29rdXAgS0VZ IGluIGhhc2ggdGFibGUgSC4gIElmIEhBU0ggaXMgbm9uLW51bGwsIHJldHVybiBpbiAqSEFTSApA QCAtNDMwMyw4ICs0MjgxLDYgQEAgaGFzaF9sb29rdXAgKHN0cnVjdCBMaXNwX0hhc2hfVGFibGUg KmgsIExpc3BfT2JqZWN0IGtleSwgTGlzcF9PYmplY3QgKmhhc2gpCiB7CiAgIHB0cmRpZmZfdCBz dGFydF9vZl9idWNrZXQsIGk7CiAKLSAgaGFzaF9yZWhhc2hfaWZfbmVlZGVkIChoKTsKLQogICBM aXNwX09iamVjdCBoYXNoX2NvZGUgPSBoLT50ZXN0Lmhhc2hmbiAoa2V5LCBoKTsKICAgaWYgKGhh c2gpCiAgICAgKmhhc2ggPSBoYXNoX2NvZGU7CkBAIC00MzM5LDggKzQzMTUsNiBAQCBoYXNoX3B1 dCAoc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaCwgTGlzcF9PYmplY3Qga2V5LCBMaXNwX09iamVj dCB2YWx1ZSwKIHsKICAgcHRyZGlmZl90IHN0YXJ0X29mX2J1Y2tldCwgaTsKIAotICBoYXNoX3Jl aGFzaF9pZl9uZWVkZWQgKGgpOwotCiAgIC8qIEluY3JlbWVudCBjb3VudCBhZnRlciByZXNpemlu ZyBiZWNhdXNlIHJlc2l6aW5nIG1heSBmYWlsLiAgKi8KICAgbWF5YmVfcmVzaXplX2hhc2hfdGFi bGUgKGgpOwogICBoLT5jb3VudCsrOwpAQCAtNDM3Myw4ICs0MzQ3LDYgQEAgaGFzaF9yZW1vdmVf ZnJvbV90YWJsZSAoc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaCwgTGlzcF9PYmplY3Qga2V5KQog ICBwdHJkaWZmX3Qgc3RhcnRfb2ZfYnVja2V0ID0gWFVGSVhOVU0gKGhhc2hfY29kZSkgJSBBU0la RSAoaC0+aW5kZXgpOwogICBwdHJkaWZmX3QgcHJldiA9IC0xOwogCi0gIGhhc2hfcmVoYXNoX2lm X25lZWRlZCAoaCk7Ci0KICAgZm9yIChwdHJkaWZmX3QgaSA9IEhBU0hfSU5ERVggKGgsIHN0YXJ0 X29mX2J1Y2tldCk7CiAgICAgICAgMCA8PSBpOwogICAgICAgIGkgPSBIQVNIX05FWFQgKGgsIGkp KQpAQCAtNDQxNSw4ICs0Mzg3LDcgQEAgaGFzaF9jbGVhciAoc3RydWN0IExpc3BfSGFzaF9UYWJs ZSAqaCkKICAgaWYgKGgtPmNvdW50ID4gMCkKICAgICB7CiAgICAgICBwdHJkaWZmX3Qgc2l6ZSA9 IEhBU0hfVEFCTEVfU0laRSAoaCk7Ci0gICAgICBpZiAoIWhhc2hfcmVoYXNoX25lZWRlZF9wICho KSkKLQltZW1jbGVhciAoeHZlY3Rvcl9jb250ZW50cyAoaC0+aGFzaCksIHNpemUgKiB3b3JkX3Np emUpOworICAgICAgbWVtY2xlYXIgKHh2ZWN0b3JfY29udGVudHMgKGgtPmhhc2gpLCBzaXplICog d29yZF9zaXplKTsKICAgICAgIGZvciAocHRyZGlmZl90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQog CXsKIAkgIHNldF9oYXNoX25leHRfc2xvdCAoaCwgaSwgaSA8IHNpemUgLSAxID8gaSArIDEgOiAt MSk7CkBAIC00NDUyLDkgKzQ0MjMsNyBAQCBzd2VlcF93ZWFrX3RhYmxlIChzdHJ1Y3QgTGlzcF9I YXNoX1RhYmxlICpoLCBib29sIHJlbW92ZV9lbnRyaWVzX3ApCiAgIGZvciAocHRyZGlmZl90IGJ1 Y2tldCA9IDA7IGJ1Y2tldCA8IG47ICsrYnVja2V0KQogICAgIHsKICAgICAgIC8qIEZvbGxvdyBj b2xsaXNpb24gY2hhaW4sIHJlbW92aW5nIGVudHJpZXMgdGhhdCBkb24ndCBzdXJ2aXZlCi0gICAg ICAgICB0aGlzIGdhcmJhZ2UgY29sbGVjdGlvbi4gIEl0J3Mgb2theSBpZiBoYXNoX3JlaGFzaF9u ZWVkZWRfcAotICAgICAgICAgKGgpIGlzIHRydWUsIHNpbmNlIHdlJ3JlIG9wZXJhdGluZyBlbnRp cmVseSBvbiB0aGUgY2FjaGVkCi0gICAgICAgICBoYXNoIHZhbHVlcy4gKi8KKyAgICAgICAgIHRo aXMgZ2FyYmFnZSBjb2xsZWN0aW9uLiAgKi8KICAgICAgIHB0cmRpZmZfdCBwcmV2ID0gLTE7CiAg ICAgICBwdHJkaWZmX3QgbmV4dDsKICAgICAgIGZvciAocHRyZGlmZl90IGkgPSBIQVNIX0lOREVY IChoLCBidWNrZXQpOyAwIDw9IGk7IGkgPSBuZXh0KQpAQCAtNDQ5OSw3ICs0NDY4LDcgQEAgc3dl ZXBfd2Vha190YWJsZSAoc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaCwgYm9vbCByZW1vdmVfZW50 cmllc19wKQogICAgICAgICAgICAgICAgICAgICBzZXRfaGFzaF9oYXNoX3Nsb3QgKGgsIGksIFFu aWwpOwogCiAgICAgICAgICAgICAgICAgICBlYXNzZXJ0IChoLT5jb3VudCAhPSAwKTsKLSAgICAg ICAgICAgICAgICAgIGgtPmNvdW50ICs9IGgtPmNvdW50ID4gMCA/IC0xIDogMTsKKyAgICAgICAg ICAgICAgICAgIGgtPmNvdW50LS07CiAgICAgICAgICAgICAgICAgfQogCSAgICAgIGVsc2UKIAkJ ewpAQCAtNDkyMyw3ICs0ODkyLDcgQEAgREVGVU4gKCJoYXNoLXRhYmxlLWNvdW50IiwgRmhhc2hf dGFibGVfY291bnQsIFNoYXNoX3RhYmxlX2NvdW50LCAxLCAxLCAwLAogICAoTGlzcF9PYmplY3Qg dGFibGUpCiB7CiAgIHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmggPSBjaGVja19oYXNoX3RhYmxl ICh0YWJsZSk7Ci0gIGVhc3NlcnQgKGgtPmNvdW50ID49IDApOworCiAgIHJldHVybiBtYWtlX2Zp eG51bSAoaC0+Y291bnQpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvbGlzcC5oIGIvc3JjL2xpc3Au aAppbmRleCAxN2I5MmEwNDE0Li4wMGQyMzczOTRjIDEwMDY0NAotLS0gYS9zcmMvbGlzcC5oCisr KyBiL3NyYy9saXNwLmgKQEAgLTIyNzUsMTEgKzIyNzUsNyBAQCAjZGVmaW5lIERFRlNZTShzeW0s IG5hbWUpIC8qIGVtcHR5ICovCiAKIHN0cnVjdCBMaXNwX0hhc2hfVGFibGUKIHsKLSAgLyogQ2hh bmdlIHBkdW1wZXIuYyBpZiB5b3UgY2hhbmdlIHRoZSBmaWVsZHMgaGVyZS4KLQotICAgICBJTVBP UlRBTlQhISEhISEhCi0KLSAgICAgQ2FsbCBoYXNoX3JlaGFzaF9pZl9uZWVkZWQoKSBiZWZvcmUg YWNjZXNzaW5nLiAgKi8KKyAgLyogQ2hhbmdlIHBkdW1wZXIuYyBpZiB5b3UgY2hhbmdlIHRoZSBm aWVsZHMgaGVyZS4gICovCiAKICAgLyogVGhpcyBpcyBmb3IgTGlzcDsgdGhlIGhhc2ggdGFibGUg Y29kZSBkb2VzIG5vdCByZWZlciB0byBpdC4gICovCiAgIHVuaW9uIHZlY3Rvcmxpa2VfaGVhZGVy IGhlYWRlcjsKQEAgLTIzOTgsMjAgKzIzOTQsNyBAQCBIQVNIX1RBQkxFX1NJWkUgKGNvbnN0IHN0 cnVjdCBMaXNwX0hhc2hfVGFibGUgKmgpCiAgIHJldHVybiBzaXplOwogfQogCi12b2lkIGhhc2hf dGFibGVfcmVoYXNoIChzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpoKTsKLQotSU5MSU5FIGJvb2wK LWhhc2hfcmVoYXNoX25lZWRlZF9wIChjb25zdCBzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpoKQot ewotICByZXR1cm4gTklMUCAoaC0+aGFzaCk7Ci19Ci0KLUlOTElORSB2b2lkCi1oYXNoX3JlaGFz aF9pZl9uZWVkZWQgKHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmgpCi17Ci0gIGlmIChoYXNoX3Jl aGFzaF9uZWVkZWRfcCAoaCkpCi0gICAgaGFzaF90YWJsZV9yZWhhc2ggKGgpOwotfQordm9pZCBo YXNoX3RhYmxlX3JlaGFzaCAoTGlzcF9PYmplY3QgaCk7CiAKIC8qIERlZmF1bHQgc2l6ZSBmb3Ig aGFzaCB0YWJsZXMgaWYgbm90IHNwZWNpZmllZC4gICovCiAKZGlmZiAtLWdpdCBhL3NyYy9taW5p YnVmLmMgYi9zcmMvbWluaWJ1Zi5jCmluZGV4IDlkODcwY2UzNjQuLmNiMzAyYzVhNjAgMTAwNjQ0 Ci0tLSBhL3NyYy9taW5pYnVmLmMKKysrIGIvc3JjL21pbmlidWYuYwpAQCAtMTIxMiw5ICsxMjEy LDYgQEAgREVGVU4gKCJ0cnktY29tcGxldGlvbiIsIEZ0cnlfY29tcGxldGlvbiwgU3RyeV9jb21w bGV0aW9uLCAyLCAzLCAwLAogICAgICAgYnVja2V0ID0gQVJFRiAoY29sbGVjdGlvbiwgaWR4KTsK ICAgICB9CiAKLSAgaWYgKEhBU0hfVEFCTEVfUCAoY29sbGVjdGlvbikpCi0gICAgaGFzaF9yZWhh c2hfaWZfbmVlZGVkIChYSEFTSF9UQUJMRSAoY29sbGVjdGlvbikpOwotCiAgIHdoaWxlICgxKQog ICAgIHsKICAgICAgIC8qIEdldCB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBhbGlzdCwgb2JhcnJh eSwgb3IgaGFzaC10YWJsZS4gICovCmRpZmYgLS1naXQgYS9zcmMvcGR1bXBlci5jIGIvc3JjL3Bk dW1wZXIuYwppbmRleCA2M2VlMGZjYjdmLi5lZmVlMDAxNjUxIDEwMDY0NAotLS0gYS9zcmMvcGR1 bXBlci5jCisrKyBiL3NyYy9wZHVtcGVyLmMKQEAgLTEwNSwyMSArMTA1LDEwIEBAICNkZWZpbmUg Vk1fTVNfV0lORE9XUyAyCiAjIGRlZmluZSBWTV9TVVBQT1JURUQgMAogI2VuZGlmCiAKLS8qIFBE VU1QRVJfQ0hFQ0tfUkVIQVNISU5HIGJlaW5nIHRydWUgY2F1c2VzIHRoZSBwb3J0YWJsZSBkdW1w ZXIgdG8KLSAgIGNoZWNrLCBmb3IgZWFjaCBoYXNoIHRhYmxlIGl0IGR1bXBzLCB0aGF0IHRoZSBo YXNoIHRhYmxlIG1lYW5zIHRoZQotICAgc2FtZSB0aGluZyBhZnRlciByZWhhc2hpbmcuICAqLwot I2lmbmRlZiBQRFVNUEVSX0NIRUNLX1JFSEFTSElORwotIyBpZiBFTkFCTEVfQ0hFQ0tJTkcKLSMg IGRlZmluZSBQRFVNUEVSX0NIRUNLX1JFSEFTSElORyAxCi0jIGVsc2UKLSMgIGRlZmluZSBQRFVN UEVSX0NIRUNLX1JFSEFTSElORyAwCi0jIGVuZGlmCi0jZW5kaWYKLQotLyogUmVxdWlyZSBhbiBh cmNoaXRlY3R1cmUgaW4gd2hpY2ggcG9pbnRlcnMsIHB0cmRpZmZfdCBhbmQgaW50cHRyX3QKLSAg IGFyZSB0aGUgc2FtZSBzaXplIGFuZCBoYXZlIHRoZSBzYW1lIGxheW91dCwgYW5kIHdoZXJlIGJ5 dGVzIGhhdmUKLSAgIGVpZ2h0IGJpdHMgLS0tIHRoYXQgaXMsIGEgZ2VuZXJhbC1wdXJwb3NlIGNv bXB1dGVyIG1hZGUgYWZ0ZXIgMTk5MC4KLSAgIEFsc28gcmVxdWlyZSBMaXNwX09iamVjdCB0byBi ZSBhdCBsZWFzdCBhcyB3aWRlIGFzIHBvaW50ZXJzLiAgKi8KKy8qIFdlIHJlcXVpcmUgYW4gYXJj aGl0ZWN0dXJlIGluIHdoaWNoIGFsbCBwb2ludGVycyBhcmUgdGhlIHNhbWUgc2l6ZQorICAgYW5k IGhhdmUgdGhlIHNhbWUgbGF5b3V0LCB3aGVyZSBwb2ludGVycyBhcmUgZWl0aGVyIDMyIG9yIDY0 IGJpdHMKKyAgIGxvbmcsIGFuZCB3aGVyZSBieXRlcyBoYXZlIGVpZ2h0IGJpdHMgLS0tIHRoYXQg aXMsIGEKKyAgIGdlbmVyYWwtcHVycG9zZSBjb21wdXRlciBtYWRlIGFmdGVyIDE5OTAuICAqLwog dmVyaWZ5IChzaXplb2YgKHB0cmRpZmZfdCkgPT0gc2l6ZW9mICh2b2lkICopKTsKIHZlcmlmeSAo c2l6ZW9mIChpbnRwdHJfdCkgPT0gc2l6ZW9mIChwdHJkaWZmX3QpKTsKIHZlcmlmeSAoc2l6ZW9m ICh2b2lkICgqKSAodm9pZCkpID09IHNpemVvZiAodm9pZCAqKSk7CkBAIC00MDEsNiArMzkwLDgg QEAgZHVtcF9maW5nZXJwcmludCAoY2hhciBjb25zdCAqbGFiZWwsCiAgICAgIFRoZSBzdGFydCBv ZiB0aGUgY29sZCByZWdpb24gaXMgYWx3YXlzIGFsaWduZWQgb24gYSBwYWdlCiAgICAgIGJvdW5k YXJ5LiAgKi8KICAgZHVtcF9vZmYgY29sZF9zdGFydDsKKworICBkdW1wX29mZiBoYXNoX2xpc3Q7 CiB9OwogCiAvKiBEb3VibGUtZW5kZWQgc2luZ2x5IGxpbmtlZCBsaXN0LiAgKi8KQEAgLTU1OCw2 ICs1NDksOCBAQCBkdW1wX2ZpbmdlcnByaW50IChjaGFyIGNvbnN0ICpsYWJlbCwKICAgICAgaGVh cCBvYmplY3RzLiAgKi8KICAgTGlzcF9PYmplY3QgYmlnbnVtX2RhdGE7CiAKKyAgTGlzcF9PYmpl Y3QgaGFzaF90YWJsZXM7CisKICAgdW5zaWduZWQgbnVtYmVyX2hvdF9yZWxvY2F0aW9uczsKICAg dW5zaWduZWQgbnVtYmVyX2Rpc2NhcmRhYmxlX3JlbG9jYXRpb25zOwogfTsKQEAgLTI2MTYsNzgg KzI2MDksNjEgQEAgZHVtcF92ZWN0b3JsaWtlX2dlbmVyaWMgKHN0cnVjdCBkdW1wX2NvbnRleHQg KmN0eCwKICAgcmV0dXJuIG9mZnNldDsKIH0KIAotLyogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGhh c2ggdGFibGUncyBoYXNoIG9yZGVyIGlzIHN0YWJsZQotICAgYWNyb3NzIGR1bXAgYW5kIGxvYWQu ICBJZiBpdCBpcywgd2UgZG9uJ3QgaGF2ZSB0byB0cmlnZ2VyCi0gICBhIHJlaGFzaCBvbiBhY2Nl c3MuICAqLwotc3RhdGljIGJvb2wKLWR1bXBfaGFzaF90YWJsZV9zdGFibGVfcCAoY29uc3Qgc3Ry dWN0IExpc3BfSGFzaF9UYWJsZSAqaGFzaCkKKy8qIFJldHVybiBhIHZlY3RvciBvZiBLRVksIFZB TFVFIHBhaXJzIGluIHRoZSBnaXZlbiBoYXNoIHRhYmxlIEguICBUaGUKKyAgIGZpcnN0IEgtPmNv dW50IHBhaXJzIGFyZSB2YWxpZCwgdGhlIHJlc3QgaXMgbGVmdCBhcyBuaWwuICAqLworc3RhdGlj IExpc3BfT2JqZWN0CitoYXNoX3RhYmxlX2NvbnRlbnRzIChzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxl ICpoKQogewotICBpZiAoaGFzaC0+dGVzdC5oYXNoZm4gPT0gaGFzaGZuX3VzZXJfZGVmaW5lZCkK KyAgaWYgKGgtPnRlc3QuaGFzaGZuID09IGhhc2hmbl91c2VyX2RlZmluZWQpCiAgICAgZXJyb3Ig KCJjYW5ub3QgZHVtcCBoYXNoIHRhYmxlcyB3aXRoIHVzZXItZGVmaW5lZCB0ZXN0cyIpOyAgLyog QnVnIzM2NzY5ICovCi0gIGJvb2wgaXNfZXFsID0gaGFzaC0+dGVzdC5oYXNoZm4gPT0gaGFzaGZu X2VxbDsKLSAgYm9vbCBpc19lcXVhbCA9IGhhc2gtPnRlc3QuaGFzaGZuID09IGhhc2hmbl9lcXVh bDsKLSAgcHRyZGlmZl90IHNpemUgPSBIQVNIX1RBQkxFX1NJWkUgKGhhc2gpOwotICBmb3IgKHB0 cmRpZmZfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgTGlzcF9PYmplY3QgY29udGVudHMgPSBR bmlsOworICAvKiBNYWtlIHN1cmUga2V5X2FuZF92YWx1ZSBlbmRzIHVwIGluIHRoZSBzYW1lIG9y ZGVyLCBjaGFyc2V0LmMKKyAgICAgcmVsaWVzIG9uIGl0IGJ5IGV4cGVjdGluZyBoYXNoIHRhYmxl IGluZGljZXMgdG8gc3RheSBjb25zdGFudAorICAgICBhY3Jvc3MgdGhlIGR1bXAuICAqLworICBm b3IgKHB0cmRpZmZfdCBpID0gMDsgaSA8IEhBU0hfVEFCTEVfU0laRSAoaCkgLSBoLT5jb3VudDsg aSsrKQogICAgIHsKLSAgICAgIExpc3BfT2JqZWN0IGtleSA9ICBIQVNIX0tFWSAoaGFzaCwgaSk7 Ci0gICAgICBpZiAoIUVRIChrZXksIFF1bmJvdW5kKSkKLSAgICAgICAgewotCSAgYm9vbCBrZXlf c3RhYmxlID0gKGR1bXBfYnVpbHRpbl9zeW1ib2xfcCAoa2V5KQotCQkJICAgICB8fCBGSVhOVU1Q IChrZXkpCi0JCQkgICAgIHx8IChpc19lcXVhbAotCQkJICAgICAgICAgJiYgKFNUUklOR1AgKGtl eSkgfHwgQk9PTF9WRUNUT1JfUCAoa2V5KSkpCi0JCQkgICAgIHx8ICgoaXNfZXF1YWwgfHwgaXNf ZXFsKQotCQkJICAgICAgICAgJiYgKEZMT0FUUCAoa2V5KSB8fCBCSUdOVU1QIChrZXkpKSkpOwot ICAgICAgICAgIGlmICgha2V5X3N0YWJsZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg ICAgICAgfQorICAgICAgZHVtcF9wdXNoICgmY29udGVudHMsIFFuaWwpOworICAgICAgZHVtcF9w dXNoICgmY29udGVudHMsIFF1bmJvdW5kKTsKICAgICB9CiAKLSAgcmV0dXJuIHRydWU7CisgIGZv ciAocHRyZGlmZl90IGkgPSBIQVNIX1RBQkxFX1NJWkUgKGgpIC0gMTsgaSA+PSAwOyAtLWkpCisg ICAgaWYgKCFOSUxQIChIQVNIX0hBU0ggKGgsIGkpKSkKKyAgICAgIHsKKwlkdW1wX3B1c2ggKCZj b250ZW50cywgSEFTSF9WQUxVRSAoaCwgaSkpOworCWR1bXBfcHVzaCAoJmNvbnRlbnRzLCBIQVNI X0tFWSAoaCwgaSkpOworICAgICAgfQorCisgIHJldHVybiBDQUxMTiAoRmFwcGx5LCBRdmVjdG9y LCBjb250ZW50cyk7CiB9CiAKLS8qIFJldHVybiBhIGxpc3Qgb2YgKEtFWSAuIFZBTFVFKSBwYWly cyBpbiB0aGUgZ2l2ZW4gaGFzaCB0YWJsZS4gICovCi1zdGF0aWMgTGlzcF9PYmplY3QKLWhhc2hf dGFibGVfY29udGVudHMgKExpc3BfT2JqZWN0IHRhYmxlKQorc3RhdGljIGR1bXBfb2ZmCitkdW1w X2hhc2hfdGFibGVfbGlzdCAoc3RydWN0IGR1bXBfY29udGV4dCAqY3R4KQogewotICBMaXNwX09i amVjdCBjb250ZW50cyA9IFFuaWw7Ci0gIHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmggPSBYSEFT SF9UQUJMRSAodGFibGUpOwotICBmb3IgKHB0cmRpZmZfdCBpID0gMDsgaSA8IEhBU0hfVEFCTEVf U0laRSAoaCk7ICsraSkKLSAgICB7Ci0gICAgICBMaXNwX09iamVjdCBrZXkgPSAgSEFTSF9LRVkg KGgsIGkpOwotICAgICAgaWYgKCFFUSAoa2V5LCBRdW5ib3VuZCkpCi0gICAgICAgIGR1bXBfcHVz aCAoJmNvbnRlbnRzLCBGY29ucyAoa2V5LCBIQVNIX1ZBTFVFIChoLCBpKSkpOwotICAgIH0KLSAg cmV0dXJuIEZucmV2ZXJzZSAoY29udGVudHMpOworICBpZiAoQ09OU1AgKGN0eC0+aGFzaF90YWJs ZXMpKQorICAgIHJldHVybiBkdW1wX29iamVjdCAoY3R4LCBDQUxMTiAoRmFwcGx5LCBRdmVjdG9y LCBjdHgtPmhhc2hfdGFibGVzKSk7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKIH0KIAotLyogQ29w eSB0aGUgZ2l2ZW4gaGFzaCB0YWJsZSwgcmVoYXNoIGl0LCBhbmQgbWFrZSBzdXJlIHRoYXQgd2Ug Y2FuCi0gICBsb29rIHVwIGFsbCB0aGUgdmFsdWVzIGluIHRoZSBvcmlnaW5hbC4gICovCiBzdGF0 aWMgdm9pZAotY2hlY2tfaGFzaF90YWJsZV9yZWhhc2ggKExpc3BfT2JqZWN0IHRhYmxlX29yaWcp Ci17Ci0gIHB0cmRpZmZfdCBjb3VudCA9IFhIQVNIX1RBQkxFICh0YWJsZV9vcmlnKS0+Y291bnQ7 Ci0gIGhhc2hfcmVoYXNoX2lmX25lZWRlZCAoWEhBU0hfVEFCTEUgKHRhYmxlX29yaWcpKTsKLSAg TGlzcF9PYmplY3QgdGFibGVfcmVoYXNoZWQgPSBGY29weV9oYXNoX3RhYmxlICh0YWJsZV9vcmln KTsKLSAgZWFzc2VydCAoIWhhc2hfcmVoYXNoX25lZWRlZF9wIChYSEFTSF9UQUJMRSAodGFibGVf cmVoYXNoZWQpKSk7Ci0gIFhIQVNIX1RBQkxFICh0YWJsZV9yZWhhc2hlZCktPmhhc2ggPSBRbmls OwotICBlYXNzZXJ0IChjb3VudCA9PSAwIHx8IGhhc2hfcmVoYXNoX25lZWRlZF9wIChYSEFTSF9U QUJMRSAodGFibGVfcmVoYXNoZWQpKSk7Ci0gIGhhc2hfcmVoYXNoX2lmX25lZWRlZCAoWEhBU0hf VEFCTEUgKHRhYmxlX3JlaGFzaGVkKSk7Ci0gIGVhc3NlcnQgKCFoYXNoX3JlaGFzaF9uZWVkZWRf cCAoWEhBU0hfVEFCTEUgKHRhYmxlX3JlaGFzaGVkKSkpOwotICBMaXNwX09iamVjdCBleHBlY3Rl ZF9jb250ZW50cyA9IGhhc2hfdGFibGVfY29udGVudHMgKHRhYmxlX29yaWcpOwotICB3aGlsZSAo IU5JTFAgKGV4cGVjdGVkX2NvbnRlbnRzKSkKLSAgICB7Ci0gICAgICBMaXNwX09iamVjdCBrZXlf dmFsdWVfcGFpciA9IGR1bXBfcG9wICgmZXhwZWN0ZWRfY29udGVudHMpOwotICAgICAgTGlzcF9P YmplY3Qga2V5ID0gWENBUiAoa2V5X3ZhbHVlX3BhaXIpOwotICAgICAgTGlzcF9PYmplY3QgZXhw ZWN0ZWRfdmFsdWUgPSBYQ0RSIChrZXlfdmFsdWVfcGFpcik7Ci0gICAgICBMaXNwX09iamVjdCBh cmJpdHJhcnkgPSBRZHVtcF9lbWFjc19wb3J0YWJsZV9fc29ydF9wcmVkaWNhdGVfY29waWVkOwot ICAgICAgTGlzcF9PYmplY3QgZm91bmRfdmFsdWUgPSBGZ2V0aGFzaCAoa2V5LCB0YWJsZV9yZWhh c2hlZCwgYXJiaXRyYXJ5KTsKLSAgICAgIGVhc3NlcnQgKEVRIChleHBlY3RlZF92YWx1ZSwgZm91 bmRfdmFsdWUpKTsKLSAgICAgIEZyZW1oYXNoIChrZXksIHRhYmxlX3JlaGFzaGVkKTsKLSAgICB9 CitoYXNoX3RhYmxlX2ZyZWV6ZSAoc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaCkKK3sKKyAgcHRy ZGlmZl90IG5rZXlzID0gWEZJWE5BVCAoRmxlbmd0aCAoaC0+a2V5X2FuZF92YWx1ZSkpIC8gMjsK KyAgaC0+a2V5X2FuZF92YWx1ZSA9IGhhc2hfdGFibGVfY29udGVudHMgKGgpOworICBoLT5uZXh0 X2ZyZWUgPSAobmtleXMgPT0gaC0+Y291bnQgPyAtMSA6IGgtPmNvdW50KTsKKyAgaC0+aW5kZXgg PSBGbGVuZ3RoIChoLT5pbmRleCk7CisgIGgtPm5leHQgPSBoLT5oYXNoID0gbWFrZV9maXhudW0g KG5rZXlzKTsKK30KIAotICBlYXNzZXJ0IChFUSAoRmhhc2hfdGFibGVfY291bnQgKHRhYmxlX3Jl aGFzaGVkKSwKLSAgICAgICAgICAgICAgIG1ha2VfZml4bnVtICgwKSkpOworc3RhdGljIHZvaWQK K2hhc2hfdGFibGVfdGhhdyAoTGlzcF9PYmplY3QgaGFzaCkKK3sKKyAgc3RydWN0IExpc3BfSGFz aF9UYWJsZSAqaCA9IFhIQVNIX1RBQkxFIChoYXNoKTsKKyAgaC0+aW5kZXggPSBGbWFrZV92ZWN0 b3IgKGgtPmluZGV4LCBtYWtlX2ZpeG51bSAoLTEpKTsKKyAgaC0+aGFzaCA9IEZtYWtlX3ZlY3Rv ciAoaC0+aGFzaCwgUW5pbCk7CisgIGgtPm5leHQgPSBGbWFrZV92ZWN0b3IgKGgtPm5leHQsIG1h a2VfZml4bnVtICgtMSkpOworCisgIGhhc2hfdGFibGVfcmVoYXNoIChoYXNoKTsKIH0KIAogc3Rh dGljIGR1bXBfb2ZmCkBAIC0yNjk5LDUxICsyNjc1LDExIEBAIGR1bXBfaGFzaF90YWJsZSAoc3Ry dWN0IGR1bXBfY29udGV4dCAqY3R4LAogIyBlcnJvciAiTGlzcF9IYXNoX1RhYmxlIGNoYW5nZWQu IFNlZSBDSEVDS19TVFJVQ1RTIGNvbW1lbnQgaW4gY29uZmlnLmguIgogI2VuZGlmCiAgIGNvbnN0 IHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmhhc2hfaW4gPSBYSEFTSF9UQUJMRSAob2JqZWN0KTsK LSAgYm9vbCBpc19zdGFibGUgPSBkdW1wX2hhc2hfdGFibGVfc3RhYmxlX3AgKGhhc2hfaW4pOwot ICAvKiBJZiB0aGUgaGFzaCB0YWJsZSBpcyBsaWtlbHkgdG8gYmUgbW9kaWZpZWQgaW4gbWVtb3J5 IChlaXRoZXIKLSAgICAgYmVjYXVzZSB3ZSBuZWVkIHRvIHJlaGFzaCwgYW5kIHRodXMgdG9nZ2xl IGhhc2gtPmNvdW50LCBvcgotICAgICBiZWNhdXNlIHdlIG5lZWQgdG8gYXNzZW1ibGUgYSBsaXN0 IG9mIHdlYWsgdGFibGVzKSBwdW50IHRoZSBoYXNoCi0gICAgIHRhYmxlIHRvIHRoZSBlbmQgb2Yg dGhlIGR1bXAsIHdoZXJlIHdlIGNhbiBsdW1wIGFsbCBzdWNoIGhhc2gKLSAgICAgdGFibGVzIHRv Z2V0aGVyLiAgKi8KLSAgaWYgKCEoaXNfc3RhYmxlIHx8ICFOSUxQIChoYXNoX2luLT53ZWFrKSkK LSAgICAgICYmIGN0eC0+ZmxhZ3MuZGVmZXJfaGFzaF90YWJsZXMpCi0gICAgewotICAgICAgaWYg KG9mZnNldCAhPSBEVU1QX09CSkVDVF9PTl9IQVNIX1RBQkxFX1FVRVVFKQotICAgICAgICB7Ci0J ICBlYXNzZXJ0IChvZmZzZXQgPT0gRFVNUF9PQkpFQ1RfT05fTk9STUFMX1FVRVVFCi0JCSAgIHx8 IG9mZnNldCA9PSBEVU1QX09CSkVDVF9OT1RfU0VFTik7Ci0gICAgICAgICAgLyogV2Ugc3RpbGwg d2FudCB0byBkdW1wIHRoZSBhY3R1YWwga2V5cyBhbmQgdmFsdWVzIG5vdy4gICovCi0gICAgICAg ICAgZHVtcF9lbnF1ZXVlX29iamVjdCAoY3R4LCBoYXNoX2luLT5rZXlfYW5kX3ZhbHVlLCBXRUlH SFRfTk9ORSk7Ci0gICAgICAgICAgLyogV2UnbGwgZ2V0IHRvIHRoZSByZXN0IGxhdGVyLiAgKi8K LSAgICAgICAgICBvZmZzZXQgPSBEVU1QX09CSkVDVF9PTl9IQVNIX1RBQkxFX1FVRVVFOwotICAg ICAgICAgIGR1bXBfcmVtZW1iZXJfb2JqZWN0IChjdHgsIG9iamVjdCwgb2Zmc2V0KTsKLSAgICAg ICAgICBkdW1wX3B1c2ggKCZjdHgtPmRlZmVycmVkX2hhc2hfdGFibGVzLCBvYmplY3QpOwotICAg ICAgICB9Ci0gICAgICByZXR1cm4gb2Zmc2V0OwotICAgIH0KLQotICBpZiAoUERVTVBFUl9DSEVD S19SRUhBU0hJTkcpCi0gICAgY2hlY2tfaGFzaF90YWJsZV9yZWhhc2ggKG1ha2VfbGlzcF9wdHIg KCh2b2lkICopIGhhc2hfaW4sIExpc3BfVmVjdG9ybGlrZSkpOwotCiAgIHN0cnVjdCBMaXNwX0hh c2hfVGFibGUgaGFzaF9tdW5nZWQgPSAqaGFzaF9pbjsKICAgc3RydWN0IExpc3BfSGFzaF9UYWJs ZSAqaGFzaCA9ICZoYXNoX211bmdlZDsKIAotICAvKiBSZW1lbWJlciB0byByZWhhc2ggdGhpcyBo YXNoIHRhYmxlIG9uIGZpcnN0IGFjY2Vzcy4gIEFmdGVyIGEKLSAgICAgZHVtcCByZWxvYWQsIHRo ZSBoYXNoIHRhYmxlIHZhbHVlcyB3aWxsIGhhdmUgY2hhbmdlZCwgc28gd2UnbGwKLSAgICAgbmVl ZCB0byByZWJ1aWxkIHRoZSBpbmRleC4KLQotICAgICBUT0RPOiBmb3IgRVEgYW5kIEVRTCBoYXNo IHRhYmxlcywgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHJlaGFzaAotICAgICBoZXJlIHVzaW5n IHRoZSBwcmVmZXJyZWQgbG9hZCBhZGRyZXNzIG9mIHRoZSBkdW1wLCBlbGltaW5hdGluZwotICAg ICB0aGUgbmVlZCB0byByZWhhc2gtb24tYWNjZXNzIGlmIHdlIGNhbiBsb2FkIHRoZSBkdW1wIHdo ZXJlIHdlCi0gICAgIHdhbnQuICAqLwotICBpZiAoaGFzaC0+Y291bnQgPiAwICYmICFpc19zdGFi bGUpCi0gICAgLyogSGFzaCBjb2RlcyB3aWxsIGhhdmUgdG8gYmUgcmVjb21wdXRlZCBhbnl3YXks IHNvIGxldCdzIG5vdCBkdW1wIHRoZW0uCi0gICAgICAgQWxzbyBzZXQgYGhhc2hgIHRvIG5pbCBm b3IgaGFzaF9yZWhhc2hfbmVlZGVkX3AuCi0gICAgICAgV2UgY291bGQgYWxzbyByZWZyYWluIGZy b20gZHVtcGluZyB0aGUgYG5leHQnIGFuZCBgaW5kZXgnIHZlY3RvcnMsCi0gICAgICAgZXhjZXB0 IHRoYXQgYG5leHQnIGlzIGN1cnJlbnRseSB1c2VkIGZvciBIQVNIX1RBQkxFX1NJWkUgYW5kCi0g ICAgICAgd2UnZCBoYXZlIHRvIHJlYnVpbGQgdGhlIG5leHRfZnJlZSBsaXN0IGFzIHdlbGwgYXMg YWRqdXN0Ci0gICAgICAgc3dlZXBfd2Vha19oYXNoX3RhYmxlIGZvciB0aGUgY2FzZSB3aGVyZSB0 aGVyZSdzIG5vIGBpbmRleCcuICAqLwotICAgIGhhc2gtPmhhc2ggPSBRbmlsOworICBoYXNoX3Rh YmxlX2ZyZWV6ZSAoaGFzaCk7CisgIGR1bXBfcHVzaCAoJmN0eC0+aGFzaF90YWJsZXMsIG9iamVj dCk7CiAKICAgU1RBUlRfRFVNUF9QVkVDIChjdHgsICZoYXNoLT5oZWFkZXIsIHN0cnVjdCBMaXNw X0hhc2hfVGFibGUsIG91dCk7CiAgIGR1bXBfcHNldWRvdmVjdG9yX2xpc3BfZmllbGRzIChjdHgs ICZvdXQtPmhlYWRlciwgJmhhc2gtPmhlYWRlcik7CkBAIC00MTUxLDYgKzQwODcsMTkgQEAgREVG VU4gKCJkdW1wLWVtYWNzLXBvcnRhYmxlIiwKIAkgfHwgIU5JTFAgKGN0eC0+ZGVmZXJyZWRfaGFz aF90YWJsZXMpCiAJIHx8ICFOSUxQIChjdHgtPmRlZmVycmVkX3N5bWJvbHMpKTsKIAorICBjdHgt PmhlYWRlci5oYXNoX2xpc3QgPSBjdHgtPm9mZnNldDsKKyAgZHVtcF9oYXNoX3RhYmxlX2xpc3Qg KGN0eCk7CisKKyAgZG8KKyAgICB7CisgICAgICBkdW1wX2RyYWluX2RlZmVycmVkX2hhc2hfdGFi bGVzIChjdHgpOworICAgICAgZHVtcF9kcmFpbl9kZWZlcnJlZF9zeW1ib2xzIChjdHgpOworICAg ICAgZHVtcF9kcmFpbl9ub3JtYWxfcXVldWUgKGN0eCk7CisgICAgfQorICB3aGlsZSAoIWR1bXBf cXVldWVfZW1wdHlfcCAoJmN0eC0+ZHVtcF9xdWV1ZSkKKwkgfHwgIU5JTFAgKGN0eC0+ZGVmZXJy ZWRfaGFzaF90YWJsZXMpCisJIHx8ICFOSUxQIChjdHgtPmRlZmVycmVkX3N5bWJvbHMpKTsKKwog ICBkdW1wX3NvcnRfY29waWVkX29iamVjdHMgKGN0eCk7CiAKICAgLyogV2hpbGUgd2UgY29weSBi dWlsdC1pbiBzeW1ib2xzIGludG8gdGhlIEVtYWNzIGltYWdlLCB0aGVzZQpAQCAtNTMwMiw2ICs1 MjUxLDkgQEAgZHVtcF9kb19hbGxfZW1hY3NfcmVsb2NhdGlvbnMgKGNvbnN0IHN0cnVjdCBkdW1w X2hlYWRlciAqY29uc3QgaGVhZGVyLAogICAgTlVNQkVSX0RVTVBfU0VDVElPTlMsCiAgIH07CiAK Ky8qIFBvaW50ZXIgdG8gYSBzdGFjayB2YXJpYWJsZSB0byBhdm9pZCBoYXZpbmcgdG8gc3RhdGlj cHJvIGl0LiAgKi8KK3N0YXRpYyBMaXNwX09iamVjdCAqcGR1bXBlcl9oYXNoZXMgPSAmemVyb192 ZWN0b3I7CisKIC8qIExvYWQgYSBkdW1wIGZyb20gRFVNUF9GSUxFTkFNRS4gIFJldHVybiBhbiBl cnJvciBjb2RlLgogCiAgICBOLkIuIFdlIHJ1biB2ZXJ5IGVhcmx5IGluIGluaXRpYWxpemF0aW9u LCBzbyB3ZSBjYW4ndCB1c2UgbGlzcCwKQEAgLTU0NDgsNiArNTQwMCwxNSBAQCBwZHVtcGVyX2xv YWQgKGNvbnN0IGNoYXIgKmR1bXBfZmlsZW5hbWUpCiAgIGZvciAoaW50IGkgPSAwOyBpIDwgQVJS QVlFTFRTIChzZWN0aW9ucyk7ICsraSkKICAgICBkdW1wX21tYXBfcmVzZXQgKCZzZWN0aW9uc1tp XSk7CiAKKyAgTGlzcF9PYmplY3QgaGFzaGVzID0gemVyb192ZWN0b3I7CisgIGlmIChoZWFkZXIt Pmhhc2hfbGlzdCkKKyAgICB7CisgICAgICBzdHJ1Y3QgTGlzcF9WZWN0b3IgKmhhc2hfdGFibGVz ID0KKwkoKHN0cnVjdCBMaXNwX1ZlY3RvciAqKShkdW1wX2Jhc2UgKyBoZWFkZXItPmhhc2hfbGlz dCkpOworICAgICAgWFNFVFZFQ1RPUiAoaGFzaGVzLCBoYXNoX3RhYmxlcyk7CisgICAgfQorCisg IHBkdW1wZXJfaGFzaGVzID0gJmhhc2hlczsKICAgLyogUnVuIHRoZSBmdW5jdGlvbnMgRW1hY3Mg cmVnaXN0ZXJlZCBmb3IgZG9pbmcgcG9zdC1kdW1wLWxvYWQKICAgICAgaW5pdGlhbGl6YXRpb24u ICAqLwogICBmb3IgKGludCBpID0gMDsgaSA8IG5yX2R1bXBfaG9va3M7ICsraSkKQEAgLTU1MTgs NiArNTQ3OSwxOSBAQCBERUZVTiAoInBkdW1wZXItc3RhdHMiLCBGcGR1bXBlcl9zdGF0cywgU3Bk dW1wZXJfc3RhdHMsIDAsIDAsIDAsCiAjZW5kaWYgLyogSEFWRV9QRFVNUEVSICovCiAKIAwKK3N0 YXRpYyB2b2lkCit0aGF3X2hhc2hfdGFibGVzICh2b2lkKQoreworICBMaXNwX09iamVjdCBoYXNo X3RhYmxlcyA9ICpwZHVtcGVyX2hhc2hlczsKKyAgZm9yIChwdHJkaWZmX3QgaSA9IDA7IGkgPCBB U0laRSAoaGFzaF90YWJsZXMpOyBpKyspCisgICAgaGFzaF90YWJsZV90aGF3IChBUkVGIChoYXNo X3RhYmxlcywgaSkpOworfQorCit2b2lkCitpbml0X3BkdW1wZXJfb25jZSAodm9pZCkKK3sKKyAg cGR1bXBlcl9kb19ub3dfYW5kX2FmdGVyX2xvYWQgKHRoYXdfaGFzaF90YWJsZXMpOworfQogCiB2 b2lkCiBzeW1zX29mX3BkdW1wZXIgKHZvaWQpCmRpZmYgLS1naXQgYS9zcmMvcGR1bXBlci5oIGIv c3JjL3BkdW1wZXIuaAppbmRleCA2YTk5YjUxMWYyLi5jNzkzZmI0MDU4IDEwMDY0NAotLS0gYS9z cmMvcGR1bXBlci5oCisrKyBiL3NyYy9wZHVtcGVyLmgKQEAgLTI1Niw2ICsyNTYsNyBAQCBwZHVt cGVyX2NsZWFyX21hcmtzICh2b2lkKQogICAgZmlsZSB3YXMgbG9hZGVkLiAgKi8KIGV4dGVybiB2 b2lkIHBkdW1wZXJfcmVjb3JkX3dkIChjb25zdCBjaGFyICopOwogCit2b2lkIGluaXRfcGR1bXBl cl9vbmNlICh2b2lkKTsKIHZvaWQgc3ltc19vZl9wZHVtcGVyICh2b2lkKTsKIAogSU5MSU5FX0hF QURFUl9FTkQKLS0gCjIuMjguMAoK --00000000000028c00105ac849638--