From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Philipp Stephani Newsgroups: gmane.emacs.devel Subject: Re: emacs-module.c, eassert, and nonnull args Date: Mon, 05 Jun 2017 13:56:57 +0000 Message-ID: References: <5a128432-e087-ad45-a15c-c2b0ebb8f28d@cs.ucla.edu> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="001a11c0b168f9a662055136e0ba" X-Trace: blaine.gmane.org 1496671218 21484 195.159.176.226 (5 Jun 2017 14:00:18 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Mon, 5 Jun 2017 14:00:18 +0000 (UTC) Cc: Emacs Development To: Paul Eggert , Philipp Stephani Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Jun 05 16:00:07 2017 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dHsYA-0004z2-P6 for ged-emacs-devel@m.gmane.org; Mon, 05 Jun 2017 16:00:07 +0200 Original-Received: from localhost ([::1]:33571 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dHsYE-0006a8-Gy for ged-emacs-devel@m.gmane.org; Mon, 05 Jun 2017 10:00:10 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:33945) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dHsVL-000139-VQ for emacs-devel@gnu.org; Mon, 05 Jun 2017 09:57:14 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dHsVJ-0004Mp-C4 for emacs-devel@gnu.org; Mon, 05 Jun 2017 09:57:12 -0400 Original-Received: from mail-oi0-x236.google.com ([2607:f8b0:4003:c06::236]:33872) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dHsVJ-0004M5-1w for emacs-devel@gnu.org; Mon, 05 Jun 2017 09:57:09 -0400 Original-Received: by mail-oi0-x236.google.com with SMTP id o65so133817841oif.1 for ; Mon, 05 Jun 2017 06:57:08 -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=BW2bRDMeFcXjPsWouwTjoE1iucAvAbcDNPLpHD0sV/U=; b=krV1hNsx+s8lGZ9Elj0PeS27E5U4w2xG6ju6+DYDsR7Qms+Mi56HEsPuuTJSZZKZ0r QLuOMxc3T1DQFPkmDJIq9EvgcK309AraLeOpBiWnewn4AE2KCUc3RNvILGs/S3Wsi1JV ZWzssdy/0OjkpWMUyz8MHTH36FeTkaY9wl0WZOstCRiPa+imPkhKFYIASidcOhFi5xDN oJjAOge1i5Jxa1iNntM2eUFRqaWPrcj/pKQiNXIXO7tLP0AQFjW9MriqQdbtB8to7QOl i7npVz5av/WhAd5sFHozkxUszRd/eQnodG4D6VuXxKmTmMVzKJyYwsLmonp1U1KlvuhB Mvug== 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=BW2bRDMeFcXjPsWouwTjoE1iucAvAbcDNPLpHD0sV/U=; b=El2ZgeTd9PlPA/lmPQd5DROxH/L+ohmWUeCRr1dX29JZtpnhAESVQO7vbERmqcDGfR eEacIkGOulI3c9KBeH1/GMBwTNM2A7UqZmy43j38fLu8iD/3gOh2kT1qTQgLiEbYis0Z qppu+m+H1J4iDn80WJ50NDVr98UY41Bi140hJ7ZjEWtVrSk3IMgTcbjpqVID1CWo3tBA ZkHMwjuPZDbryrODUF9aNkc/fBjhWDJ+esMFdkGPtuuEo6Nph7RL32g2ceZUxBonT4TB DNurt1PYslWMepWJh+aYk7/JiafEtbM3+Wz+WNocnE7Rce3HSEOJgTokK0MkwuP9tIio /k3Q== X-Gm-Message-State: AKS2vOxf1pu0t40o96vwfUBiQWtWEnBpBfUctjVx69rDwJRYrfijlHZr yfA7iKSckUYQQtv0krxm+RKpL7BFAumX X-Received: by 10.157.53.88 with SMTP id l24mr10655615ote.155.1496671028058; Mon, 05 Jun 2017 06:57:08 -0700 (PDT) In-Reply-To: <5a128432-e087-ad45-a15c-c2b0ebb8f28d@cs.ucla.edu> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4003:c06::236 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:215450 Archived-At: --001a11c0b168f9a662055136e0ba Content-Type: multipart/alternative; boundary="001a11c0b168f9a65e055136e0b8" --001a11c0b168f9a65e055136e0b8 Content-Type: text/plain; charset="UTF-8" Paul Eggert schrieb am Mo., 5. Juni 2017 um 04:48 Uhr: > Thanks for your recent improvements to emacs-module.c. One thing I noticed, > though, was that it added several easserts. However, there's a comment at > the > start of emacs-module.c that says "Do NOT use 'eassert'". To play it safe > for > now I removed the easserts, and thought I'd raise this on emacs-discuss. > > As I understand it, emacs-module.c's use of eassert is intended for bugs in > Emacs itself, not for bugs in user-supplied modules. Although perhaps we > need a > more-systematic way of issuing signals for screwups in modules, 'eassert' > sounds > dicey for that as assertion failures are so drastic. Even though modules > can > dump core on their own, should Emacs be on high alert and dump core merely > because a module has an invalid value? Plus, should ENABLE_CHECKING affect > module-screwup checking the same way that it affects eassert? > I think you are right, eassert is the wrong tool here. If at all, module developers can be expected to use normal release builds of Emacs, so eassert wouldn't help them. In the attached patch I've implemented a command-line option '-module-assertions' that allows these assertions to be enabled at runtime. The option is meant to be used during development for batch jobs and sessions where crashing is OK. (The commit doesn't contain documentation yet.) > Instead of using runtime checks, perhaps we should decorate > emacs-module.h's > function declarations with __attribute__ ((__nonnull__ ((N)))) if argument > N of > a module function is supposed to be nonnull, so that problems in this area > can > (mostly) be caught statically. We could add a macro like the following to > src/emacs-module.h, after the definition of EMACS_NOEXCEPT: > > #if 3 < __GNUC__ + (3 <= __GNUC_MINOR__) > # define EMACS_ARG_NONNULL(...) __attribute__ ((__nonnull__ > ((__VA_ARGS__)))) > #else > # define EMACS_ARG_NONNULL(...) > #endif > > and then use EMACS_ARG_NONNULL calls for function pointers whose arguments > are > supposed to be nonnull. > > Yes, that makes sense. Instead of the explicit version check (that might not work with other compilers), __has_attribute should be used if available. --001a11c0b168f9a65e055136e0b8 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


Paul E= ggert <eggert@cs.ucla.edu> = schrieb am Mo., 5. Juni 2017 um 04:48=C2=A0Uhr:
Thanks for your recent improvements to emacs-module.c. One th= ing I noticed,
though, was that it added several easserts. However, there's a comment = at the
start of emacs-module.c that says "Do NOT use 'eassert'".= To play it safe for
now I removed the easserts, and thought I'd raise this on emacs-discuss= .

As I understand it, emacs-module.c's use of eassert is intended for bug= s in
Emacs itself, not for bugs in user-supplied modules. Although perhaps we ne= ed a
more-systematic way of issuing signals for screwups in modules, 'easser= t' sounds
dicey for that as assertion failures are so drastic. Even though modules ca= n
dump core on their own, should Emacs be on high alert and dump core merely<= br> because a module has an invalid value? Plus, should ENABLE_CHECKING affect<= br> module-screwup checking the same way that it affects eassert?

I think you are right, eassert is the wrong tool her= e. If at all, module developers can be expected to use normal release build= s of Emacs, so eassert wouldn't help them.
In the attached pa= tch I've implemented a command-line option '-module-assertions'= that allows these assertions to be enabled at runtime. The option is meant= to be used during development for batch jobs and sessions where crashing i= s OK.
(The commit doesn't contain documentation yet.)
=C2=A0
Instead of using runtime checks, perhaps we should decorate emacs-module.h&= #39;s
function declarations with __attribute__ ((__nonnull__ ((N)))) if argument = N of
a module function is supposed to be nonnull, so that problems in this area = can
(mostly) be caught statically. We could add a macro like the following to src/emacs-module.h, after the definition of EMACS_NOEXCEPT:

=C2=A0 =C2=A0#if 3 < __GNUC__ + (3 <=3D __GNUC_MINOR__)
=C2=A0 =C2=A0# define EMACS_ARG_NONNULL(...) __attribute__ ((__nonnull__ ((= __VA_ARGS__))))
=C2=A0 =C2=A0#else
=C2=A0 =C2=A0# define EMACS_ARG_NONNULL(...)
=C2=A0 =C2=A0#endif

and then use EMACS_ARG_NONNULL calls for function pointers whose arguments = are
supposed to be nonnull.


Yes, that makes sense. Instead of the = explicit version check (that might not work with other compilers), __has_at= tribute should be used if available.=C2=A0
--001a11c0b168f9a65e055136e0b8-- --001a11c0b168f9a662055136e0ba Content-Type: text/plain; charset="US-ASCII"; name="0001-Implement-module-assertions-for-users.txt" Content-Disposition: attachment; filename="0001-Implement-module-assertions-for-users.txt" Content-Transfer-Encoding: base64 Content-ID: <15c788b453c200f8f151> X-Attachment-Id: 15c788b453c200f8f151 RnJvbSBhZjVjM2UyMDE0MjhiYjNkMGMwOTJhMjVmYWUwZDBjYjIwNTMyOWI5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwIFN0ZXBoYW5pIDxwaHN0QGdvb2dsZS5jb20+CkRh dGU6IE1vbiwgNSBKdW4gMjAxNyAxMzoyOToxNCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEltcGxl bWVudCBtb2R1bGUgYXNzZXJ0aW9ucyBmb3IgdXNlcnMKCkFkZCBhIG5ldyBjb21tYW5kLWxpbmUg b3B0aW9uICctbW9kdWxlLWFzc2VydGlvbnMnIHRoYXQgdXNlcnMgY2FuCmVuYWJsZSBkZXZlbG9w aW5nIG9yIGRlYnVnZ2luZyBhIG1vZHVsZS4gIElmIHRoaXMgb3B0aW9uIGlzIHByZXNlbnQsCkVt YWNzIHBlcmZvcm1zIGFkZGl0aW9uYWwgY2hlY2tzIHRvIHZlcmlmeSB0aGF0IG1vZHVsZXMgZnVs ZmlsbCB0aGVpcgpyZXF1aXJlbWVudHMuICBUaGVzZSBjaGVja3MgYXJlIGV4cGVuc2l2ZSBhbmQg Y3Jhc2ggRW1hY3MgaWYgbW9kdWxlcwphcmUgaW52YWxpZCwgc28gZGlzYWJsZSB0aGVtIGJ5IGRl ZmF1bHQuCgpUaGlzIGlzIGEgY29tbWFuZC1saW5lIG9wdGlvbiBpbnN0ZWFkIG9mIGFuIG9yZGlu YXJ5IHZhcmlhYmxlIGJlY2F1c2UKY2hhbmdpbmcgaXQgd2hpbGUgRW1hY3MgaXMgcnVubmluZyB3 b3VsZCBjYXVzZSBkYXRhIHN0cnVjdHVyZQppbWJhbGFuY2VzLgoKKiBzcmMvZW1hY3MuYyAobWFp bik6IE5ldyBjb21tYW5kIGxpbmUgb3B0aW9uICctbW9kdWxlLWFzc2VydGlvbnMnLgoKKiBzcmMv ZW1hY3MtbW9kdWxlLmMgKGFzc2VydF9tYWluX3RocmVhZCwgYXNzZXJ0X3J1bnRpbWUsIGFzc2Vy dF9lbnYpCihhc3NlcnRfdmFsdWUpOiBOZXcgZnVuY3Rpb25zIHRvIGFzc2VydCBtb2R1bGUgcmVx dWlyZW1lbnRzLgooc3ltc19vZl9tb2R1bGUpOiBOZXcgdW5pbnRlcm5lZCB2YXJpYWJsZSAnbW9k dWxlLXJ1bnRpbWVzJy4KKGluaXRfbW9kdWxlX2Fzc2VydGlvbnMsIGluX21haW5fdGhyZWFkKTog TmV3IGhlbHBlciBmdW5jdGlvbnMuCihpbml0aWFsaXplX2Vudmlyb25tZW50KTogSW5pdGlhbGl6 ZSB2YWx1ZSBsaXN0LgooZmluYWxpemVfZW52aXJvbm1lbnQpOiBSZXNldCB2YWx1ZSBsaXN0Lgoo ZmluYWxpemVfcnVudGltZV91bndpbmQpOiBQb3AgbW9kdWxlIHJ1bnRpbWUgb2JqZWN0IHN0YWNr LgoodmFsdWVfdG9fbGlzcCk6IEFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyB2YWxpZC4KKGxpc3Bf dG9fdmFsdWUpOiBSZWNvcmQgbmV3IHZhbHVlIGlmIGFzc2VydGlvbnMgYXJlIGVuYWJsZWQuCihN T0RVTEVfRlVOQ1RJT05fQkVHSU5fTk9fQ0FUQ0gpCihtb2R1bGVfbm9uX2xvY2FsX2V4aXRfY2hl Y2ssIG1vZHVsZV9ub25fbG9jYWxfZXhpdF9jbGVhcikKKG1vZHVsZV9ub25fbG9jYWxfZXhpdF9n ZXQsIG1vZHVsZV9ub25fbG9jYWxfZXhpdF9zaWduYWwpCihtb2R1bGVfbm9uX2xvY2FsX2V4aXRf dGhyb3cpOiBBc3NlcnQgdGhyZWFkIGFuZCBlbnZpcm9ubWVudC4KKG1vZHVsZV9nZXRfZW52aXJv bm1lbnQpOiBBc3NlcnQgdGhyZWFkIGFuZCBydW50aW1lLgoobW9kdWxlX21ha2VfZnVuY3Rpb24s IG1vZHVsZV9mdW5jYWxsLCBtb2R1bGVfaW50ZXJuKQoobW9kdWxlX2Z1bmNhbGwsIG1vZHVsZV9t YWtlX2ludGVnZXIsIG1vZHVsZV9tYWtlX2Zsb2F0KQoobW9kdWxlX21ha2Vfc3RyaW5nLCBtb2R1 bGVfbWFrZV91c2VyX3B0ciwgbW9kdWxlX3ZlY19nZXQpCihmdW5jYWxsX21vZHVsZSk6IEFkYXB0 IGNhbGxlcnMuCgoqIHRlc3QvTWFrZWZpbGUuaW4gKEVNQUNTT1BUKTogRW5hYmxlIG1vZHVsZSBh c3NlcnRpb25zIHdoZW4gdGVzdGluZwptb2R1bGVzLgotLS0KIHNyYy9lbWFjcy1tb2R1bGUuYyB8 IDE1MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0t LQogc3JjL2VtYWNzLmMgICAgICAgIHwgICA3ICsrKwogc3JjL2xpc3AuaCAgICAgICAgIHwgICAx ICsKIHRlc3QvTWFrZWZpbGUuaW4gICB8ICAgMiArLQogNCBmaWxlcyBjaGFuZ2VkLCAxMzIgaW5z ZXJ0aW9ucygrKSwgMjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2VtYWNzLW1vZHVs ZS5jIGIvc3JjL2VtYWNzLW1vZHVsZS5jCmluZGV4IGJlYmZlNTk0NDIuLmY0MjE4YWEwMTIgMTAw NjQ0Ci0tLSBhL3NyYy9lbWFjcy1tb2R1bGUuYworKysgYi9zcmMvZW1hY3MtbW9kdWxlLmMKQEAg LTc3LDYgKzc3LDEwIEBAIHN0cnVjdCBlbWFjc19lbnZfcHJpdmF0ZQogICAgICBzdG9yYWdlIGlz IGFsd2F5cyBhdmFpbGFibGUgZm9yIHRoZW0sIGV2ZW4gaW4gYW4gb3V0LW9mLW1lbW9yeQogICAg ICBzaXR1YXRpb24uICAqLwogICBMaXNwX09iamVjdCBub25fbG9jYWxfZXhpdF9zeW1ib2wsIG5v bl9sb2NhbF9leGl0X2RhdGE7CisKKyAgLyogVmFsdWVzIGFsbG9jYXRlZCBmcm9tIHRoaXMgZW52 aXJvbm1lbnQuICBPbmx5IHVzZWQgaWYKKyAgICAgYG1vZHVsZS1hc3NlcnRpb25zJyBpcyB0LiAg Ki8KKyAgTGlzcF9PYmplY3QgdmFsdWVzOwogfTsKIAogLyogVGhlIHByaXZhdGUgcGFydHMgb2Yg YW4gYGVtYWNzX3J1bnRpbWUnIG9iamVjdCBjb250YWluIHRoZSBpbml0aWFsCkBAIC05Miw5ICs5 NiwxMiBAQCBzdHJ1Y3QgZW1hY3NfcnVudGltZV9wcml2YXRlCiBzdHJ1Y3QgbW9kdWxlX2Z1bl9l bnY7CiAKIHN0YXRpYyBMaXNwX09iamVjdCB2YWx1ZV90b19saXNwIChlbWFjc192YWx1ZSk7Ci1z dGF0aWMgZW1hY3NfdmFsdWUgbGlzcF90b192YWx1ZSAoTGlzcF9PYmplY3QpOworc3RhdGljIGVt YWNzX3ZhbHVlIGxpc3BfdG9fdmFsdWUgKGVtYWNzX2VudiAqLCBMaXNwX09iamVjdCk7CiBzdGF0 aWMgZW51bSBlbWFjc19mdW5jYWxsX2V4aXQgbW9kdWxlX25vbl9sb2NhbF9leGl0X2NoZWNrIChl bWFjc19lbnYgKik7Ci1zdGF0aWMgdm9pZCBjaGVja19tYWluX3RocmVhZCAodm9pZCk7CitzdGF0 aWMgdm9pZCBhc3NlcnRfbWFpbl90aHJlYWQgKHZvaWQpOworc3RhdGljIHZvaWQgYXNzZXJ0X3J1 bnRpbWUgKHN0cnVjdCBlbWFjc19ydW50aW1lICopOworc3RhdGljIHZvaWQgYXNzZXJ0X2VudiAo ZW1hY3NfZW52ICopOworc3RhdGljIHZvaWQgYXNzZXJ0X3ZhbHVlIChMaXNwX09iamVjdCk7CiBz dGF0aWMgdm9pZCBpbml0aWFsaXplX2Vudmlyb25tZW50IChlbWFjc19lbnYgKiwgc3RydWN0IGVt YWNzX2Vudl9wcml2YXRlICopOwogc3RhdGljIHZvaWQgZmluYWxpemVfZW52aXJvbm1lbnQgKGVt YWNzX2VudiAqKTsKIHN0YXRpYyB2b2lkIGZpbmFsaXplX2Vudmlyb25tZW50X3Vud2luZCAodm9p ZCAqKTsKQEAgLTExMiw2ICsxMTksOCBAQCBzdGF0aWMgdm9pZCBtb2R1bGVfcmVzZXRfaGFuZGxl cmxpc3QgKHN0cnVjdCBoYW5kbGVyICpjb25zdCAqKTsKICAgIGNvZGUgc2hvdWxkIG5vdCBhc3N1 bWUgdGhpcy4gICovCiB2ZXJpZnkgKE5JTF9JU19aRVJPKTsKIHN0YXRpYyBlbWFjc192YWx1ZSBj b25zdCBtb2R1bGVfbmlsID0gMDsKKworc3RhdGljIGJvb2wgbW9kdWxlX2Fzc2VydGlvbnM7CiAM CiAvKiBDb252ZW5pZW5jZSBtYWNyb3MgZm9yIG5vbi1sb2NhbCBleGl0IGhhbmRsaW5nLiAgKi8K IApAQCAtMjE1LDcgKzIyNCw4IEBAIHN0YXRpYyBlbWFjc192YWx1ZSBjb25zdCBtb2R1bGVfbmls ID0gMDsKIAogI2RlZmluZSBNT0RVTEVfRlVOQ1RJT05fQkVHSU5fTk9fQ0FUQ0goZXJyb3JfcmV0 dmFsKSAgICAgICAgICAgICAgICAgICAgXAogICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNoZWNrX21h aW5fdGhyZWFkICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgIGFzc2VydF9tYWluX3RocmVhZCAoKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFzc2VydF9lbnYgKGVudik7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmIChtb2R1bGVf bm9uX2xvY2FsX2V4aXRfY2hlY2sgKGVudikgIT0gZW1hY3NfZnVuY2FsbF9leGl0X3JldHVybikg XAogICAgICAgcmV0dXJuIGVycm9yX3JldHZhbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAogICB9IHdoaWxlIChmYWxzZSkKQEAgLTI0MSw3ICsyNTEsOCBA QCBDSEVDS19VU0VSX1BUUiAoTGlzcF9PYmplY3Qgb2JqKQogc3RhdGljIGVtYWNzX2VudiAqCiBt b2R1bGVfZ2V0X2Vudmlyb25tZW50IChzdHJ1Y3QgZW1hY3NfcnVudGltZSAqZXJ0KQogewotICBj aGVja19tYWluX3RocmVhZCAoKTsKKyAgYXNzZXJ0X21haW5fdGhyZWFkICgpOworICBhc3NlcnRf cnVudGltZSAoZXJ0KTsKICAgcmV0dXJuICZlcnQtPnByaXZhdGVfbWVtYmVycy0+cHViOwogfQog CkBAIC0yNzEsNyArMjgyLDcgQEAgbW9kdWxlX21ha2VfZ2xvYmFsX3JlZiAoZW1hY3NfZW52ICpl bnYsIGVtYWNzX3ZhbHVlIHJlZikKICAgICAgIGhhc2hfcHV0IChoLCBuZXdfb2JqLCBtYWtlX25h dG51bSAoMSksIGhhc2hjb2RlKTsKICAgICB9CiAKLSAgcmV0dXJuIGxpc3BfdG9fdmFsdWUgKG5l d19vYmopOworICByZXR1cm4gbGlzcF90b192YWx1ZSAoZW52LCBuZXdfb2JqKTsKIH0KIAogc3Rh dGljIHZvaWQKQEAgLTMwMywyNyArMzE0LDMwIEBAIG1vZHVsZV9mcmVlX2dsb2JhbF9yZWYgKGVt YWNzX2VudiAqZW52LCBlbWFjc192YWx1ZSByZWYpCiBzdGF0aWMgZW51bSBlbWFjc19mdW5jYWxs X2V4aXQKIG1vZHVsZV9ub25fbG9jYWxfZXhpdF9jaGVjayAoZW1hY3NfZW52ICplbnYpCiB7Ci0g IGNoZWNrX21haW5fdGhyZWFkICgpOworICBhc3NlcnRfbWFpbl90aHJlYWQgKCk7CisgIGFzc2Vy dF9lbnYgKGVudik7CiAgIHJldHVybiBlbnYtPnByaXZhdGVfbWVtYmVycy0+cGVuZGluZ19ub25f bG9jYWxfZXhpdDsKIH0KIAogc3RhdGljIHZvaWQKIG1vZHVsZV9ub25fbG9jYWxfZXhpdF9jbGVh ciAoZW1hY3NfZW52ICplbnYpCiB7Ci0gIGNoZWNrX21haW5fdGhyZWFkICgpOworICBhc3NlcnRf bWFpbl90aHJlYWQgKCk7CisgIGFzc2VydF9lbnYgKGVudik7CiAgIGVudi0+cHJpdmF0ZV9tZW1i ZXJzLT5wZW5kaW5nX25vbl9sb2NhbF9leGl0ID0gZW1hY3NfZnVuY2FsbF9leGl0X3JldHVybjsK IH0KIAogc3RhdGljIGVudW0gZW1hY3NfZnVuY2FsbF9leGl0CiBtb2R1bGVfbm9uX2xvY2FsX2V4 aXRfZ2V0IChlbWFjc19lbnYgKmVudiwgZW1hY3NfdmFsdWUgKnN5bSwgZW1hY3NfdmFsdWUgKmRh dGEpCiB7Ci0gIGNoZWNrX21haW5fdGhyZWFkICgpOworICBhc3NlcnRfbWFpbl90aHJlYWQgKCk7 CisgIGFzc2VydF9lbnYgKGVudik7CiAgIHN0cnVjdCBlbWFjc19lbnZfcHJpdmF0ZSAqcCA9IGVu di0+cHJpdmF0ZV9tZW1iZXJzOwogICBpZiAocC0+cGVuZGluZ19ub25fbG9jYWxfZXhpdCAhPSBl bWFjc19mdW5jYWxsX2V4aXRfcmV0dXJuKQogICAgIHsKICAgICAgIC8qIEZJWE1FOiBsaXNwX3Rv X3ZhbHVlIGNhbiBleGl0IG5vbi1sb2NhbGx5LiAgKi8KLSAgICAgICpzeW0gPSBsaXNwX3RvX3Zh bHVlIChwLT5ub25fbG9jYWxfZXhpdF9zeW1ib2wpOwotICAgICAgKmRhdGEgPSBsaXNwX3RvX3Zh bHVlIChwLT5ub25fbG9jYWxfZXhpdF9kYXRhKTsKKyAgICAgICpzeW0gPSBsaXNwX3RvX3ZhbHVl IChlbnYsIHAtPm5vbl9sb2NhbF9leGl0X3N5bWJvbCk7CisgICAgICAqZGF0YSA9IGxpc3BfdG9f dmFsdWUgKGVudiwgcC0+bm9uX2xvY2FsX2V4aXRfZGF0YSk7CiAgICAgfQogICByZXR1cm4gcC0+ cGVuZGluZ19ub25fbG9jYWxfZXhpdDsKIH0KQEAgLTMzMiw3ICszNDYsOCBAQCBtb2R1bGVfbm9u X2xvY2FsX2V4aXRfZ2V0IChlbWFjc19lbnYgKmVudiwgZW1hY3NfdmFsdWUgKnN5bSwgZW1hY3Nf dmFsdWUgKmRhdGEpCiBzdGF0aWMgdm9pZAogbW9kdWxlX25vbl9sb2NhbF9leGl0X3NpZ25hbCAo ZW1hY3NfZW52ICplbnYsIGVtYWNzX3ZhbHVlIHN5bSwgZW1hY3NfdmFsdWUgZGF0YSkKIHsKLSAg Y2hlY2tfbWFpbl90aHJlYWQgKCk7CisgIGFzc2VydF9tYWluX3RocmVhZCAoKTsKKyAgYXNzZXJ0 X2VudiAoZW52KTsKICAgaWYgKG1vZHVsZV9ub25fbG9jYWxfZXhpdF9jaGVjayAoZW52KSA9PSBl bWFjc19mdW5jYWxsX2V4aXRfcmV0dXJuKQogICAgIG1vZHVsZV9ub25fbG9jYWxfZXhpdF9zaWdu YWxfMSAoZW52LCB2YWx1ZV90b19saXNwIChzeW0pLAogCQkJCSAgICB2YWx1ZV90b19saXNwIChk YXRhKSk7CkBAIC0zNDEsNyArMzU2LDggQEAgbW9kdWxlX25vbl9sb2NhbF9leGl0X3NpZ25hbCAo ZW1hY3NfZW52ICplbnYsIGVtYWNzX3ZhbHVlIHN5bSwgZW1hY3NfdmFsdWUgZGF0YSkKIHN0YXRp YyB2b2lkCiBtb2R1bGVfbm9uX2xvY2FsX2V4aXRfdGhyb3cgKGVtYWNzX2VudiAqZW52LCBlbWFj c192YWx1ZSB0YWcsIGVtYWNzX3ZhbHVlIHZhbHVlKQogewotICBjaGVja19tYWluX3RocmVhZCAo KTsKKyAgYXNzZXJ0X21haW5fdGhyZWFkICgpOworICBhc3NlcnRfZW52IChlbnYpOwogICBpZiAo bW9kdWxlX25vbl9sb2NhbF9leGl0X2NoZWNrIChlbnYpID09IGVtYWNzX2Z1bmNhbGxfZXhpdF9y ZXR1cm4pCiAgICAgbW9kdWxlX25vbl9sb2NhbF9leGl0X3Rocm93XzEgKGVudiwgdmFsdWVfdG9f bGlzcCAodGFnKSwKIAkJCQkgICB2YWx1ZV90b19saXNwICh2YWx1ZSkpOwpAQCAtMzgxLDcgKzM5 Nyw3IEBAIG1vZHVsZV9tYWtlX2Z1bmN0aW9uIChlbWFjc19lbnYgKmVudiwgcHRyZGlmZl90IG1p bl9hcml0eSwgcHRyZGlmZl90IG1heF9hcml0eSwKICAgWFNFVF9NT0RVTEVfRlVOQ1RJT04gKHJl c3VsdCwgZnVuY3Rpb24pOwogICBlYXNzZXJ0IChNT0RVTEVfRlVOQ1RJT05QIChyZXN1bHQpKTsK IAotICByZXR1cm4gbGlzcF90b192YWx1ZSAocmVzdWx0KTsKKyAgcmV0dXJuIGxpc3BfdG9fdmFs dWUgKGVudiwgcmVzdWx0KTsKIH0KIAogc3RhdGljIGVtYWNzX3ZhbHVlCkBAIC00MDEsNyArNDE3 LDcgQEAgbW9kdWxlX2Z1bmNhbGwgKGVtYWNzX2VudiAqZW52LCBlbWFjc192YWx1ZSBmdW4sIHB0 cmRpZmZfdCBuYXJncywKICAgbmV3YXJnc1swXSA9IHZhbHVlX3RvX2xpc3AgKGZ1bik7CiAgIGZv ciAocHRyZGlmZl90IGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykKICAgICBuZXdhcmdzWzEgKyBpXSA9 IHZhbHVlX3RvX2xpc3AgKGFyZ3NbaV0pOwotICBlbWFjc192YWx1ZSByZXN1bHQgPSBsaXNwX3Rv X3ZhbHVlIChGZnVuY2FsbCAobmFyZ3MxLCBuZXdhcmdzKSk7CisgIGVtYWNzX3ZhbHVlIHJlc3Vs dCA9IGxpc3BfdG9fdmFsdWUgKGVudiwgRmZ1bmNhbGwgKG5hcmdzMSwgbmV3YXJncykpOwogICBT QUZFX0ZSRUUgKCk7CiAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC00MTAsMTQgKzQyNiwxNCBAQCBz dGF0aWMgZW1hY3NfdmFsdWUKIG1vZHVsZV9pbnRlcm4gKGVtYWNzX2VudiAqZW52LCBjb25zdCBj aGFyICpuYW1lKQogewogICBNT0RVTEVfRlVOQ1RJT05fQkVHSU4gKG1vZHVsZV9uaWwpOwotICBy ZXR1cm4gbGlzcF90b192YWx1ZSAoaW50ZXJuIChuYW1lKSk7CisgIHJldHVybiBsaXNwX3RvX3Zh bHVlIChlbnYsIGludGVybiAobmFtZSkpOwogfQogCiBzdGF0aWMgZW1hY3NfdmFsdWUKIG1vZHVs ZV90eXBlX29mIChlbWFjc19lbnYgKmVudiwgZW1hY3NfdmFsdWUgdmFsdWUpCiB7CiAgIE1PRFVM RV9GVU5DVElPTl9CRUdJTiAobW9kdWxlX25pbCk7Ci0gIHJldHVybiBsaXNwX3RvX3ZhbHVlIChG dHlwZV9vZiAodmFsdWVfdG9fbGlzcCAodmFsdWUpKSk7CisgIHJldHVybiBsaXNwX3RvX3ZhbHVl IChlbnYsIEZ0eXBlX29mICh2YWx1ZV90b19saXNwICh2YWx1ZSkpKTsKIH0KIAogc3RhdGljIGJv b2wKQEAgLTQ0OSw3ICs0NjUsNyBAQCBtb2R1bGVfbWFrZV9pbnRlZ2VyIChlbWFjc19lbnYgKmVu diwgaW50bWF4X3QgbikKICAgTU9EVUxFX0ZVTkNUSU9OX0JFR0lOIChtb2R1bGVfbmlsKTsKICAg aWYgKEZJWE5VTV9PVkVSRkxPV19QIChuKSkKICAgICB4c2lnbmFsMCAoUW92ZXJmbG93X2Vycm9y KTsKLSAgcmV0dXJuIGxpc3BfdG9fdmFsdWUgKG1ha2VfbnVtYmVyIChuKSk7CisgIHJldHVybiBs aXNwX3RvX3ZhbHVlIChlbnYsIG1ha2VfbnVtYmVyIChuKSk7CiB9CiAKIHN0YXRpYyBkb3VibGUK QEAgLTQ2NSw3ICs0ODEsNyBAQCBzdGF0aWMgZW1hY3NfdmFsdWUKIG1vZHVsZV9tYWtlX2Zsb2F0 IChlbWFjc19lbnYgKmVudiwgZG91YmxlIGQpCiB7CiAgIE1PRFVMRV9GVU5DVElPTl9CRUdJTiAo bW9kdWxlX25pbCk7Ci0gIHJldHVybiBsaXNwX3RvX3ZhbHVlIChtYWtlX2Zsb2F0IChkKSk7Cisg IHJldHVybiBsaXNwX3RvX3ZhbHVlIChlbnYsIG1ha2VfZmxvYXQgKGQpKTsKIH0KIAogc3RhdGlj IGJvb2wKQEAgLTUwNywxNCArNTIzLDE1IEBAIG1vZHVsZV9tYWtlX3N0cmluZyAoZW1hY3NfZW52 ICplbnYsIGNvbnN0IGNoYXIgKnN0ciwgcHRyZGlmZl90IGxlbmd0aCkKICAgaWYgKCEgKDAgPD0g bGVuZ3RoICYmIGxlbmd0aCA8PSBTVFJJTkdfQllURVNfQk9VTkQpKQogICAgIHhzaWduYWwwIChR b3ZlcmZsb3dfZXJyb3IpOwogICBBVVRPX1NUUklOR19XSVRIX0xFTiAobHN0ciwgc3RyLCBsZW5n dGgpOwotICByZXR1cm4gbGlzcF90b192YWx1ZSAoY29kZV9jb252ZXJ0X3N0cmluZ19ub3JlY29y ZCAobHN0ciwgUXV0Zl84LCBmYWxzZSkpOworICByZXR1cm4gbGlzcF90b192YWx1ZSAoZW52LAor ICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9jb252ZXJ0X3N0cmluZ19ub3JlY29yZCAobHN0 ciwgUXV0Zl84LCBmYWxzZSkpOwogfQogCiBzdGF0aWMgZW1hY3NfdmFsdWUKIG1vZHVsZV9tYWtl X3VzZXJfcHRyIChlbWFjc19lbnYgKmVudiwgZW1hY3NfZmluYWxpemVyX2Z1bmN0aW9uIGZpbiwg dm9pZCAqcHRyKQogewogICBNT0RVTEVfRlVOQ1RJT05fQkVHSU4gKG1vZHVsZV9uaWwpOwotICBy ZXR1cm4gbGlzcF90b192YWx1ZSAobWFrZV91c2VyX3B0ciAoZmluLCBwdHIpKTsKKyAgcmV0dXJu IGxpc3BfdG9fdmFsdWUgKGVudiwgbWFrZV91c2VyX3B0ciAoZmluLCBwdHIpKTsKIH0KIAogc3Rh dGljIHZvaWQgKgpAQCAtNTgxLDcgKzU5OCw3IEBAIG1vZHVsZV92ZWNfZ2V0IChlbWFjc19lbnYg KmVudiwgZW1hY3NfdmFsdWUgdmVjLCBwdHJkaWZmX3QgaSkKICAgTU9EVUxFX0ZVTkNUSU9OX0JF R0lOIChtb2R1bGVfbmlsKTsKICAgTGlzcF9PYmplY3QgbHZlYyA9IHZhbHVlX3RvX2xpc3AgKHZl Yyk7CiAgIGNoZWNrX3ZlY19pbmRleCAobHZlYywgaSk7Ci0gIHJldHVybiBsaXNwX3RvX3ZhbHVl IChBUkVGIChsdmVjLCBpKSk7CisgIHJldHVybiBsaXNwX3RvX3ZhbHVlIChlbnYsIEFSRUYgKGx2 ZWMsIGkpKTsKIH0KIAogc3RhdGljIHB0cmRpZmZfdApAQCAtNjM2LDYgKzY1Myw3IEBAIERFRlVO ICgibW9kdWxlLWxvYWQiLCBGbW9kdWxlX2xvYWQsIFNtb2R1bGVfbG9hZCwgMSwgMSwgMCwKICAg ICAgIC5wcml2YXRlX21lbWJlcnMgPSAmcnQsCiAgICAgICAuZ2V0X2Vudmlyb25tZW50ID0gbW9k dWxlX2dldF9lbnZpcm9ubWVudAogICAgIH07CisgIFZtb2R1bGVfcnVudGltZXMgPSBGY29ucyAo bWFrZV9zYXZlX3B0ciAoJnB1YiksIFZtb2R1bGVfcnVudGltZXMpOwogICBwdHJkaWZmX3QgY291 bnQgPSBTUEVDUERMX0lOREVYICgpOwogICByZWNvcmRfdW53aW5kX3Byb3RlY3RfcHRyIChmaW5h bGl6ZV9ydW50aW1lX3Vud2luZCwgJnB1Yik7CiAKQEAgLTY2OCwxMyArNjg2LDEzIEBAIGZ1bmNh bGxfbW9kdWxlIChMaXNwX09iamVjdCBmdW5jdGlvbiwgcHRyZGlmZl90IG5hcmdzLCBMaXNwX09i amVjdCAqYXJnbGlzdCkKIAogICBVU0VfU0FGRV9BTExPQ0E7CiAgIEFUVFJJQlVURV9NQVlfQUxJ QVMgZW1hY3NfdmFsdWUgKmFyZ3M7Ci0gIGlmIChwbGFpbl92YWx1ZXMpCisgIGlmIChwbGFpbl92 YWx1ZXMgJiYgISBtb2R1bGVfYXNzZXJ0aW9ucykKICAgICBhcmdzID0gKGVtYWNzX3ZhbHVlICop IGFyZ2xpc3Q7CiAgIGVsc2UKICAgICB7CiAgICAgICBhcmdzID0gU0FGRV9BTExPQ0EgKG5hcmdz ICogc2l6ZW9mICphcmdzKTsKICAgICAgIGZvciAocHRyZGlmZl90IGkgPSAwOyBpIDwgbmFyZ3M7 IGkrKykKLQlhcmdzW2ldID0gbGlzcF90b192YWx1ZSAoYXJnbGlzdFtpXSk7CisJYXJnc1tpXSA9 IGxpc3BfdG9fdmFsdWUgKCZwdWIsIGFyZ2xpc3RbaV0pOwogICAgIH0KIAogICBlbWFjc192YWx1 ZSByZXQgPSBmdW5jLT5zdWJyICgmcHViLCBuYXJncywgYXJncywgZnVuYy0+ZGF0YSk7CkBAIC03 MTEsMTcgKzcyOSw3MiBAQCBtb2R1bGVfZnVuY3Rpb25fYXJpdHkgKGNvbnN0IHN0cnVjdCBMaXNw X01vZHVsZV9GdW5jdGlvbiAqY29uc3QgZnVuY3Rpb24pCiAMCiAvKiBIZWxwZXIgZnVuY3Rpb25z LiAgKi8KIAotc3RhdGljIHZvaWQKLWNoZWNrX21haW5fdGhyZWFkICh2b2lkKQorc3RhdGljIGJv b2wKK2luX21haW5fdGhyZWFkICh2b2lkKQogewogI2lmZGVmIEhBVkVfUFRIUkVBRAotICBlYXNz ZXJ0IChwdGhyZWFkX2VxdWFsIChwdGhyZWFkX3NlbGYgKCksIG1haW5fdGhyZWFkX2lkKSk7Cisg IHJldHVybiBwdGhyZWFkX2VxdWFsIChwdGhyZWFkX3NlbGYgKCksIG1haW5fdGhyZWFkX2lkKTsK ICNlbGlmIGRlZmluZWQgV0lORE9XU05UCi0gIGVhc3NlcnQgKEdldEN1cnJlbnRUaHJlYWRJZCAo KSA9PSBkd01haW5UaHJlYWRJZCk7CisgIHJldHVybiBHZXRDdXJyZW50VGhyZWFkSWQgKCkgPT0g ZHdNYWluVGhyZWFkSWQ7CiAjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQKK2Fzc2VydF9tYWluX3Ro cmVhZCAodm9pZCkKK3sKKyAgaWYgKCEgbW9kdWxlX2Fzc2VydGlvbnMgfHwgaW5fbWFpbl90aHJl YWQgKCkpCisgICAgcmV0dXJuOworICBkaWUgKCJNb2R1bGUgZnVuY3Rpb24gY2FsbGVkIGZyb20g b3V0c2lkZSB0aGUgbWFpbiB0aHJlYWQiLAorICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXyk7Cit9 CisKK3N0YXRpYyB2b2lkCithc3NlcnRfcnVudGltZSAoc3RydWN0IGVtYWNzX3J1bnRpbWUgKmVy dCkKK3sKKyAgaWYgKCEgbW9kdWxlX2Fzc2VydGlvbnMpCisgICAgcmV0dXJuOworICBMaXNwX09i amVjdCB0YWlsID0gVm1vZHVsZV9ydW50aW1lczsKKyAgRk9SX0VBQ0hfVEFJTF9TQUZFICh0YWls KQorICB7CisgICAgaWYgKFhTQVZFX1BPSU5URVIgKFhDQVIgKHRhaWwpLCAwKSA9PSBlcnQpCisg ICAgICByZXR1cm47CisgIH0KKyAgZGllICgiSW52YWxpZCBydW50aW1lIHBvaW50ZXIgcGFzc2Vk IHRvIG1vZHVsZSBmdW5jdGlvbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7Cit9CisKK3N0YXRpYyB2 b2lkCithc3NlcnRfZW52IChlbWFjc19lbnYgKmVudikKK3sKKyAgaWYgKCEgbW9kdWxlX2Fzc2Vy dGlvbnMpCisgICAgcmV0dXJuOworICBMaXNwX09iamVjdCB0YWlsID0gVm1vZHVsZV9lbnZpcm9u bWVudHM7CisgIEZPUl9FQUNIX1RBSUxfU0FGRSAodGFpbCkKKyAgICBpZiAoWFNBVkVfUE9JTlRF UiAoWENBUiAodGFpbCksIDApID09IGVudikKKyAgICAgIHJldHVybjsKKyAgZGllICgiSW52YWxp ZCBlbnZpcm9ubWVudCBwb2ludGVyIHBhc3NlZCB0byBtb2R1bGUgZnVuY3Rpb24iLAorICAgICAg IF9fRklMRV9fLCBfX0xJTkVfXyk7Cit9CisKK3N0YXRpYyB2b2lkCithc3NlcnRfdmFsdWUgKExp c3BfT2JqZWN0IG9iamVjdCkKK3sKKyAgaWYgKCEgbW9kdWxlX2Fzc2VydGlvbnMpCisgICAgcmV0 dXJuOworICBMaXNwX09iamVjdCBlbnZpcm9ubWVudHMgPSBWbW9kdWxlX2Vudmlyb25tZW50czsK KyAgRk9SX0VBQ0hfVEFJTF9TQUZFIChlbnZpcm9ubWVudHMpCisgIHsKKyAgICBlbWFjc19lbnYg KmVudiA9IFhTQVZFX1BPSU5URVIgKFhDQVIgKGVudmlyb25tZW50cyksIDApOworICAgIExpc3Bf T2JqZWN0IHZhbHVlcyA9IGVudi0+cHJpdmF0ZV9tZW1iZXJzLT52YWx1ZXM7CisgICAgRk9SX0VB Q0hfVEFJTF9TQUZFICh2YWx1ZXMpCisgICAgICBpZiAoRVEgKFhDQVIgKHZhbHVlcyksIG9iamVj dCkpCisgICAgICAgIHJldHVybjsKKyAgfQorICBpZiAoaGFzaF9sb29rdXAgKFhIQVNIX1RBQkxF IChWbW9kdWxlX3JlZnNfaGFzaCksIG9iamVjdCwgTlVMTCkgPj0gMCkKKyAgICByZXR1cm47Cisg IGRpZSAoIkludmFsaWQgdmFsdWUgcGFzc2VkIHRvIG1vZHVsZSBmdW5jdGlvbiIsIF9fRklMRV9f LCBfX0xJTkVfXyk7Cit9CisKK3N0YXRpYyB2b2lkCiBtb2R1bGVfbm9uX2xvY2FsX2V4aXRfc2ln bmFsXzEgKGVtYWNzX2VudiAqZW52LCBMaXNwX09iamVjdCBzeW0sCiAJCQkJTGlzcF9PYmplY3Qg ZGF0YSkKIHsKQEAgLTgwOSw2ICs4ODIsNyBAQCB2YWx1ZV90b19saXNwIChlbWFjc192YWx1ZSB2 KQogICBMaXNwX09iamVjdCBvID0gdmFsdWVfdG9fbGlzcF9iaXRzICh2KTsKICAgaWYgKCEgcGxh aW5fdmFsdWVzICYmIENPTlNQIChvKSAmJiBFUSAoWENEUiAobyksIGx0dl9tYXJrKSkKICAgICBv ID0gWENBUiAobyk7CisgIGFzc2VydF92YWx1ZSAobyk7CiAgIHJldHVybiBvOwogfQogCkBAIC04 MzQsNyArOTA4LDcgQEAgZW51bSB7IEhBVkVfU1RSVUNUX0FUVFJJQlVURV9BTElHTkVEID0gMCB9 OwogLyogQ29udmVydCBPIHRvIGFuIGVtYWNzX3ZhbHVlLiAgQWxsb2NhdGUgc3RvcmFnZSBpZiBu ZWVkZWQ7IHRoaXMgY2FuCiAgICBzaWduYWwgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZC4gIE11c3Qg YmUgYW4gaW5qZWN0aXZlIGZ1bmN0aW9uLiAgKi8KIHN0YXRpYyBlbWFjc192YWx1ZQotbGlzcF90 b192YWx1ZSAoTGlzcF9PYmplY3QgbykKK2xpc3BfdG9fdmFsdWUgKGVtYWNzX2VudiAqZW52LCBM aXNwX09iamVjdCBvKQogewogICBlbWFjc192YWx1ZSB2ID0gbGlzcF90b192YWx1ZV9iaXRzIChv KTsKIApAQCAtODU5LDYgKzkzMyw5IEBAIGxpc3BfdG9fdmFsdWUgKExpc3BfT2JqZWN0IG8pCiAg ICAgICB2ID0gKGVtYWNzX3ZhbHVlKSAoKGludHB0cl90KSBYQ09OUyAocGFpcikgKyBMaXNwX0Nv bnMpOwogICAgIH0KIAorICBpZiAobW9kdWxlX2Fzc2VydGlvbnMpCisgICAgZW52LT5wcml2YXRl X21lbWJlcnMtPnZhbHVlcyA9IEZjb25zIChvLCBlbnYtPnByaXZhdGVfbWVtYmVycy0+dmFsdWVz KTsKKwogICBlYXNzZXJ0IChFUSAobywgdmFsdWVfdG9fbGlzcCAodikpKTsKICAgcmV0dXJuIHY7 CiB9CkBAIC04NzEsNiArOTQ4LDcgQEAgc3RhdGljIHZvaWQKIGluaXRpYWxpemVfZW52aXJvbm1l bnQgKGVtYWNzX2VudiAqZW52LCBzdHJ1Y3QgZW1hY3NfZW52X3ByaXZhdGUgKnByaXYpCiB7CiAg IHByaXYtPnBlbmRpbmdfbm9uX2xvY2FsX2V4aXQgPSBlbWFjc19mdW5jYWxsX2V4aXRfcmV0dXJu OworICBwcml2LT52YWx1ZXMgPSBRbmlsOwogICBlbnYtPnNpemUgPSBzaXplb2YgKmVudjsKICAg ZW52LT5wcml2YXRlX21lbWJlcnMgPSBwcml2OwogICBlbnYtPm1ha2VfZ2xvYmFsX3JlZiA9IG1v ZHVsZV9tYWtlX2dsb2JhbF9yZWY7CkBAIC05MDksNiArOTg3LDcgQEAgaW5pdGlhbGl6ZV9lbnZp cm9ubWVudCAoZW1hY3NfZW52ICplbnYsIHN0cnVjdCBlbWFjc19lbnZfcHJpdmF0ZSAqcHJpdikK IHN0YXRpYyB2b2lkCiBmaW5hbGl6ZV9lbnZpcm9ubWVudCAoZW1hY3NfZW52ICplbnYpCiB7Cisg IGVudi0+cHJpdmF0ZV9tZW1iZXJzLT52YWx1ZXMgPSBRbmlsOwogICBlYXNzZXJ0IChYU0FWRV9Q T0lOVEVSIChYQ0FSIChWbW9kdWxlX2Vudmlyb25tZW50cyksIDApID09IGVudik7CiAgIFZtb2R1 bGVfZW52aXJvbm1lbnRzID0gWENEUiAoVm1vZHVsZV9lbnZpcm9ubWVudHMpOwogfQpAQCAtOTIz LDYgKzEwMDIsOCBAQCBzdGF0aWMgdm9pZAogZmluYWxpemVfcnVudGltZV91bndpbmQgKHZvaWQq IHJhd19lcnQpCiB7CiAgIHN0cnVjdCBlbWFjc19ydW50aW1lICplcnQgPSByYXdfZXJ0OworICBl YXNzZXJ0IChYU0FWRV9QT0lOVEVSIChYQ0FSIChWbW9kdWxlX3J1bnRpbWVzKSwgMCkgPT0gZXJ0 KTsKKyAgVm1vZHVsZV9ydW50aW1lcyA9IFhDRFIgKFZtb2R1bGVfcnVudGltZXMpOwogICBmaW5h bGl6ZV9lbnZpcm9ubWVudCAoJmVydC0+cHJpdmF0ZV9tZW1iZXJzLT5wdWIpOwogfQogCkBAIC05 NjEsNiArMTA0MiwxMiBAQCBtb2R1bGVfaGFuZGxlX3Rocm93IChlbWFjc19lbnYgKmVudiwgTGlz cF9PYmplY3QgdGFnX3ZhbCkKIC8qIFNlZ21lbnQgaW5pdGlhbGl6ZXIuICAqLwogCiB2b2lkCitp bml0X21vZHVsZV9hc3NlcnRpb25zIChib29sIGVuYWJsZSkKK3sKKyAgbW9kdWxlX2Fzc2VydGlv bnMgPSBlbmFibGU7Cit9CisKK3ZvaWQKIHN5bXNfb2ZfbW9kdWxlICh2b2lkKQogewogICBpZiAo IXBsYWluX3ZhbHVlcykKQEAgLTk3Nyw2ICsxMDY0LDE0IEBAIHN5bXNfb2ZfbW9kdWxlICh2b2lk KQogCQkgICAgICAgUW5pbCwgZmFsc2UpOwogICBGdW5pbnRlcm4gKFFtb2R1bGVfcmVmc19oYXNo LCBRbmlsKTsKIAorICBERUZTWU0gKFFtb2R1bGVfcnVudGltZXMsICJtb2R1bGUtcnVudGltZXMi KTsKKyAgREVGVkFSX0xJU1AgKCJtb2R1bGUtcnVudGltZXMiLCBWbW9kdWxlX3J1bnRpbWVzLAor ICAgICAgICAgICAgICAgZG9jOiAvKiBMaXN0IG9mIGFjdGl2ZSBtb2R1bGUgcnVudGltZXMuICAq Lyk7CisgIFZtb2R1bGVfcnVudGltZXMgPSBRbmlsOworICAvKiBVbmludGVybiBgbW9kdWxlLXJ1 bnRpbWVzJyBiZWNhdXNlIGl0IGlzIG9ubHkgdXNlZAorICAgICBpbnRlcm5hbGx5LiAgKi8KKyAg RnVuaW50ZXJuIChRbW9kdWxlX3J1bnRpbWVzLCBRbmlsKTsKKwogICBERUZTWU0gKFFtb2R1bGVf ZW52aXJvbm1lbnRzLCAibW9kdWxlLWVudmlyb25tZW50cyIpOwogICBERUZWQVJfTElTUCAoIm1v ZHVsZS1lbnZpcm9ubWVudHMiLCBWbW9kdWxlX2Vudmlyb25tZW50cywKICAgICAgICAgICAgICAg IGRvYzogLyogTGlzdCBvZiBhY3RpdmUgbW9kdWxlIGVudmlyb25tZW50cy4gICovKTsKZGlmZiAt LWdpdCBhL3NyYy9lbWFjcy5jIGIvc3JjL2VtYWNzLmMKaW5kZXggNDllYmI4MTc2Ny4uNzRiOTA2 YTE4ZSAxMDA2NDQKLS0tIGEvc3JjL2VtYWNzLmMKKysrIGIvc3JjL2VtYWNzLmMKQEAgLTEyNjMs NiArMTI2MywxMiBAQCBVc2luZyBhbiBFbWFjcyBjb25maWd1cmVkIHdpdGggLS13aXRoLXgtdG9v bGtpdD1sdWNpZCBkb2VzIG5vdCBoYXZlIHRoaXMgcHJvYmxlbQogICBidWlsZF9kZXRhaWxzID0g ISBhcmdtYXRjaCAoYXJndiwgYXJnYywgIi1uby1idWlsZC1kZXRhaWxzIiwKIAkJCSAgICAgICIt LW5vLWJ1aWxkLWRldGFpbHMiLCA3LCBOVUxMLCAmc2tpcF9hcmdzKTsKIAorI2lmZGVmIEhBVkVf TU9EVUxFUworICBpbml0X21vZHVsZV9hc3NlcnRpb25zIChhcmdtYXRjaCAoYXJndiwgYXJnYywg Ii1tb2R1bGUtYXNzZXJ0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiLS1tb2R1bGUtYXNzZXJ0aW9ucyIsIDE1LCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnNraXBfYXJncykpOworI2VuZGlmCisKICNpZmRlZiBIQVZFX05TCiAg IG5zX3Bvb2wgPSBuc19hbGxvY19hdXRvcmVsZWFzZV9wb29sICgpOwogI2lmZGVmIE5TX0lNUExf R05VU1RFUApAQCAtMTcyMCw2ICsxNzI2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdGFuZGFy ZF9hcmdzIHN0YW5kYXJkX2FyZ3NbXSA9CiAgIHsgIi1ubCIsICItLW5vLWxvYWR1cCIsIDcwLCAw IH0sCiAgIHsgIi1uc2wiLCAiLS1uby1zaXRlLWxpc3AiLCA2NSwgMCB9LAogICB7ICItbm8tYnVp bGQtZGV0YWlscyIsICItLW5vLWJ1aWxkLWRldGFpbHMiLCA2MywgMCB9LAorICB7ICItbW9kdWxl LWFzc2VydGlvbnMiLCAiLS1tb2R1bGUtYXNzZXJ0aW9ucyIsIDYyLCAwIH0sCiAgIC8qIC1kIG11 c3QgY29tZSBsYXN0IGJlZm9yZSB0aGUgb3B0aW9ucyBoYW5kbGVkIGluIHN0YXJ0dXAuZWwuICAq LwogICB7ICItZCIsICItLWRpc3BsYXkiLCA2MCwgMSB9LAogICB7ICItZGlzcGxheSIsIDAsIDYw LCAxIH0sCmRpZmYgLS1naXQgYS9zcmMvbGlzcC5oIGIvc3JjL2xpc3AuaAppbmRleCBjMzViZDFm NmRmLi45MWRlNzVlNGEzIDEwMDY0NAotLS0gYS9zcmMvbGlzcC5oCisrKyBiL3NyYy9saXNwLmgK QEAgLTM5NTgsNiArMzk1OCw3IEBAIGV4dGVybiBMaXNwX09iamVjdCBtYWtlX3VzZXJfcHRyICh2 b2lkICgqZmluYWxpemVyKSAodm9pZCAqKSwgdm9pZCAqcCk7CiAvKiBEZWZpbmVkIGluIGVtYWNz LW1vZHVsZS5jLiAgKi8KIGV4dGVybiBMaXNwX09iamVjdCBmdW5jYWxsX21vZHVsZSAoTGlzcF9P YmplY3QsIHB0cmRpZmZfdCwgTGlzcF9PYmplY3QgKik7CiBleHRlcm4gTGlzcF9PYmplY3QgbW9k dWxlX2Z1bmN0aW9uX2FyaXR5IChjb25zdCBzdHJ1Y3QgTGlzcF9Nb2R1bGVfRnVuY3Rpb24gKik7 CitleHRlcm4gdm9pZCBpbml0X21vZHVsZV9hc3NlcnRpb25zIChib29sKTsKIGV4dGVybiB2b2lk IHN5bXNfb2ZfbW9kdWxlICh2b2lkKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS90ZXN0L01ha2Vm aWxlLmluIGIvdGVzdC9NYWtlZmlsZS5pbgppbmRleCA3YjhjOTY3MTI4Li4wYzI0YzQ4ZTYwIDEw MDY0NAotLS0gYS90ZXN0L01ha2VmaWxlLmluCisrKyBiL3Rlc3QvTWFrZWZpbGUuaW4KQEAgLTY4 LDcgKzY4LDcgQEAgRU1BQ1NfRVhUUkFPUFQ9CiAjIENvbW1hbmQgbGluZSBmbGFncyBmb3IgRW1h Y3MuCiAjIEFwcGFyZW50bHkgTVNZUyBiYXNoIHdvdWxkIGNvbnZlcnQgIi1MIDoiIHRvICItTCA7 IiBhbnl3YXksCiAjIGJ1dCB3ZSBtaWdodCBhcyB3ZWxsIGJlIGV4cGxpY2l0LgotRU1BQ1NPUFQg PSAtYmF0Y2ggLS1uby1zaXRlLWZpbGUgLS1uby1zaXRlLWxpc3AgLUwgIiQoU0VQQ0hBUikkKHNy Y2RpcikiICQoRU1BQ1NfRVhUUkFPUFQpCitFTUFDU09QVCA9IC1iYXRjaCAtLW5vLXNpdGUtZmls ZSAtLW5vLXNpdGUtbGlzcCAtbW9kdWxlLWFzc2VydGlvbnMgLUwgIiQoU0VQQ0hBUikkKHNyY2Rp cikiICQoRU1BQ1NfRVhUUkFPUFQpCiAKICMgUHJldmVudCBhbnkgc2V0dGluZ3MgaW4gdGhlIHVz ZXIgZW52aXJvbm1lbnQgY2F1c2luZyBwcm9ibGVtcy4KIHVuZXhwb3J0IEVNQUNTREFUQSBFTUFD U0RPQyBFTUFDU1BBVEggR1JFUF9PUFRJT05TCi0tIAoyLjEzLjAKCg== --001a11c0b168f9a662055136e0ba--