From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#9119: [PATCH] modernize function definitions in gmalloc.c Date: Mon, 16 Apr 2012 00:23:54 -0700 Organization: UCLA Computer Science Department Message-ID: <4F8BC90A.6030304@cs.ucla.edu> References: <4E24C5DC.50709@gmail.com> <8362d43v58.fsf@gnu.org> <87ty0ns4hf.fsf@gnus.org> <4F88AA4A.1030108@cornell.edu> <4F88ABC7.8030006@cornell.edu> <834nsm3i6w.fsf@gnu.org> <4F895C42.2020907@cornell.edu> <87ty0mmucr.fsf@gnus.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------010706040806010903080204" X-Trace: dough.gmane.org 1334561132 5358 80.91.229.3 (16 Apr 2012 07:25:32 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Mon, 16 Apr 2012 07:25:32 +0000 (UTC) Cc: schwab@linux-m68k.org, dan.colascione@gmail.com, 9119@debbugs.gnu.org To: Lars Ingebrigtsen Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Apr 16 09:25:30 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1SJgJO-0005CU-Fy for geb-bug-gnu-emacs@m.gmane.org; Mon, 16 Apr 2012 09:25:23 +0200 Original-Received: from localhost ([::1]:40657 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SJgJN-0004dr-RZ for geb-bug-gnu-emacs@m.gmane.org; Mon, 16 Apr 2012 03:25:21 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:36118) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SJgJC-0004d3-P7 for bug-gnu-emacs@gnu.org; Mon, 16 Apr 2012 03:25:19 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SJgJ4-0005Hl-UX for bug-gnu-emacs@gnu.org; Mon, 16 Apr 2012 03:25:10 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:34646) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SJgJ4-0005G0-Oo for bug-gnu-emacs@gnu.org; Mon, 16 Apr 2012 03:25:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1SJgJ4-0004Oo-88 for bug-gnu-emacs@gnu.org; Mon, 16 Apr 2012 03:25:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 16 Apr 2012 07:25:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 9119 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 9119-submit@debbugs.gnu.org id=B9119.133456105016845 (code B ref 9119); Mon, 16 Apr 2012 07:25:02 +0000 Original-Received: (at 9119) by debbugs.gnu.org; 16 Apr 2012 07:24:10 +0000 Original-Received: from localhost ([127.0.0.1]:35680 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1SJgIB-0004Nc-DR for submit@debbugs.gnu.org; Mon, 16 Apr 2012 03:24:09 -0400 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:49370) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1SJgI4-0004My-F9 for 9119@debbugs.gnu.org; Mon, 16 Apr 2012 03:24:05 -0400 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id EC892A60001; Mon, 16 Apr 2012 00:23:53 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Original-Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id eH4He6YJk81n; Mon, 16 Apr 2012 00:23:51 -0700 (PDT) Original-Received: from [192.168.1.10] (pool-71-189-109-235.lsanca.fios.verizon.net [71.189.109.235]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id DD32239E8007; Mon, 16 Apr 2012 00:23:50 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; Linux i686; rv:11.0) Gecko/20120329 Thunderbird/11.0.1 In-Reply-To: <87ty0mmucr.fsf@gnus.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 140.186.70.43 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.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:59106 Archived-At: This is a multi-part message in MIME format. --------------010706040806010903080204 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 04/14/2012 04:21 AM, Lars Ingebrigtsen wrote: > Perhaps Paul can just apply his changes directly... I installed the non-tricky parts into the trunk, in bzrs 107916 through 107919. The gmalloc.c part remains. Attached is a more up-to-date version of the remaining part, with some more stuff added that we've already talked about (e.g., replacing __malloc_size_t with size_t) and some of the iffier stuff removed (e.g., removing valloc). I'd like to test it a bit more internally, before installing it on the trunk. The testing is a bit tricky since the current Emacs trunk fails the GC_MALLOC_CHECK tests on a "make bootstrap" when using gmalloc.c. I don't know if that is a longstanding problem that can't easily be fixed, or what... --------------010706040806010903080204 Content-Type: text/plain; charset=UTF-8; name="gmalloc-diff.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="gmalloc-diff.txt" Z21hbGxvYy5jIG1vZGVybml6YXRpb24gLyBjbGVhbnVwIChCdWcjOTExOSkKKiBnbWFsbG9j LmMgKF9NQUxMT0NfSU5URVJOQUwsIF9NQUxMT0NfSCwgUFAsIF9fcHRyX3QpCihfX21hbGxv Y19zaXplX3QsIF9fbWFsbG9jX3B0cmRpZmZfdCk6IFJlbW92ZS4KQWxsIHVzZXMgcmVtb3Zl ZCBhbmQgcmVwbGFjZWQgYnkgZGVmaW5pZW5zIGFzIG5lZWRlZC4KQWxzbywgaXQncyBub3cg YXNzdW1lZCB0aGF0ICdlbWFjcycgaXMgZGVmaW5lZC4KSW5jbHVkZSA8c3RkaW50Lmg+LCBm b3IgUFRSRElGRl9NQVguCih2YWxsb2MpOiBEZWNsYXJlIG9ubHkgaWYgbm90IGVsaWRlZC4K KHJfYWxsb2MsIHJfYWxsb2NfZnJlZSwgcl9yZV9hbGxvYyk6IFJlbW92ZSBkZWNsczsgbm8g bG9uZ2VyIG5lZWRlZC4KKHByb3RlY3RfbWFsbG9jX3N0YXRlLCBhbGlnbiwgZ2V0X2NvbnRp Z3VvdXNfc3BhY2UpOgoobWFsbG9jX2F0Zm9ya19oYW5kbGVyX3ByZXBhcmUsIG1hbGxvY19h dGZvcmtfaGFuZGxlcl9wYXJlbnQpCihtYWxsb2NfYXRmb3JrX2hhbmRsZXJfY2hpbGQsIG1h bGxvY19lbmFibGVfdGhyZWFkKToKKG1hbGxvY19pbml0aWFsaXplXzEsIF9fbWFsbG9jX2lu aXRpYWxpemUsIG1vcmVjb3JlX25vbG9jayk6CihfbWFsbG9jX2ludGVybmFsX25vbG9jaywg X21hbGxvY19pbnRlcm5hbCwgbWFsbG9jLCBfbWFsbG9jLCBfZnJlZSkKKF9yZWFsbG9jLCBf ZnJlZV9pbnRlcm5hbF9ub2xvY2ssIF9mcmVlX2ludGVybmFsLCBmcmVlLCBjZnJlZSkKKHNw ZWNpYWxfcmVhbGxvYywgX3JlYWxsb2NfaW50ZXJuYWxfbm9sb2NrLCBfcmVhbGxvY19pbnRl cm5hbCkKKHJlYWxsb2MsIGNhbGxvYywgX19kZWZhdWx0X21vcmVjb3JlLCBtZW1hbGlnbiwg cG9zaXhfbWVtYWxpZ24pCih2YWxsb2MsIGNoZWNraGRyLCBmcmVlaG9vaywgbWFsbG9jaG9v aywgcmVhbGxvY2hvb2ssIG1hYm9ydCwgbWNoZWNrKQoobXByb2JlKToKVXNlIHByb3RvdHlw ZXMgcmF0aGVyIHRoYW4gb2xkLXN0eWxlIGRlZm5zLiAgT21pdCBuby1sb25nZXItbmVlZGVk CmRlY2xzIHdpdGggUFAuCihhbGlnbik6IERvbid0IGFzc3VtZSB3cmFwYXJvdW5kIGJlaGF2 aW9yIGFmdGVyIHNpZ25lZCBvdmVyZmxvdy4KKGFsaWduLCBfbWFsbG9jX2ludGVybmFsX25v bG9jaywgX2ZyZWVfaW50ZXJuYWxfbm9sb2NrLCBtZW1hbGlnbik6CkRvbid0IHVuc2lnbmVk IGxvbmcgaW50IGlzIHdpZGUgZW5vdWdoIHRvIGhvbGQgYSBwb2ludGVyOwp1c2UgdWludHB0 cl90IGluc3RlYWQuCihhbGlnbik6IE9taXQgc2V0LWJ1dC1uZXZlci11c2VkIGxvY2FsIHZh ci4KKG1hbGxvY19pbml0aWFsaXplXzEsIG1vcmVjb3JlX25vbG9jaywgX21hbGxvY19pbnRl cm5hbF9ub2xvY2spCihfZnJlZV9pbnRlcm5hbF9ub2xvY2ssIG1lbWFsaWduLCBtYWxsb2No b29rLCByZWFsbG9jaG9vayk6Ck9taXQgbm8tbG9uZ2VyLW5lZWRlZCBjYXN0cy4KKF9tYWxs b2MsIF9mcmVlLCBfcmVhbGxvYyk6IEFkZCBleHRlcm4gZGVjbHMsIHRvIHBhY2lmeSBHQ0Mu CihfZnJlZV9pbnRlcm5hbF9ub2xvY2ssIF9yZWFsbG9jX2ludGVybmFsX25vbG9jayk6CkFk ZCBjYXN0IGZvciBub24tR0NDIGNhc2UuCihnZXRwYWdlc2l6ZSk6IERvIG5vdCBhc3N1bWUg dW5pc3RkLmggZGVjbGFyZXMgX19nZXRwYWdlc2l6ZS4KKE1BR0lDV09SRCwgTUFHSUNGUkVF KTogRG8gbm90IGFzc3VtZSBtYWdpYyBudW1iZXIgaXMgMzItYml0Lgooc3RydWN0IGhlYWRl ci5tYWdpYyk6IE5vdyBzaXplX3QsIG5vdCB1bnNpZ25lZCBsb25nIGludC4KPT09IG1vZGlm aWVkIGZpbGUgJ3NyYy9nbWFsbG9jLmMnCi0tLSBzcmMvZ21hbGxvYy5jCTIwMTEtMDktMDkg MDE6MDY6NTIgKzAwMDAKKysrIHNyYy9nbWFsbG9jLmMJMjAxMi0wNC0xNiAwNzowNDoyMyAr MDAwMApAQCAtMSw5ICsxLDMgQEAKLS8qIFRoaXMgZmlsZSBpcyBubyBsb25nZXIgYXV0b21h dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBsaWJjLiAgKi8KLQotI2RlZmluZSBfTUFMTE9DX0lO VEVSTkFMCi0KLS8qIFRoZSBtYWxsb2MgaGVhZGVycyBhbmQgc291cmNlIGZpbGVzIGZyb20g dGhlIEMgbGlicmFyeSBmb2xsb3cgaGVyZS4gICovCi0KIC8qIERlY2xhcmF0aW9ucyBmb3Ig YG1hbGxvYycgYW5kIGZyaWVuZHMuCiAgICBDb3B5cmlnaHQgKEMpIDE5OTAsIDE5OTEsIDE5 OTIsIDE5OTMsIDE5OTUsIDE5OTYsIDE5OTksIDIwMDIsIDIwMDMsIDIwMDQsCiAgICAgICAg ICAgICAgICAgIDIwMDUsIDIwMDYsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCkBAIC0yNywxMiArMjEsNiBAQAogICAgVGhlIGF1dGhvciBtYXkgYmUgcmVhY2hlZCAo RW1haWwpIGF0IHRoZSBhZGRyZXNzIG1pa2VAYWkubWl0LmVkdSwKICAgIG9yIChVUyBtYWls KSBhcyBNaWtlIEhhZXJ0ZWwgYy9vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gICovCgot I2lmbmRlZiBfTUFMTE9DX0gKLQotI2RlZmluZSBfTUFMTE9DX0gJMQotCi0jaWZkZWYgX01B TExPQ19JTlRFUk5BTAotCiAjaWZkZWYJSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgPGNvbmZp Zy5oPgogI2VuZGlmCkBAIC00MSw2MiArMjksNDQgQEAKICNkZWZpbmUgVVNFX1BUSFJFQUQK ICNlbmRpZgoKLSN1bmRlZglQUAotI2RlZmluZQlQUChhcmdzKQlhcmdzCi0jdW5kZWYJX19w dHJfdAotI2RlZmluZQlfX3B0cl90CQl2b2lkICoKLQogI2luY2x1ZGUgPHN0cmluZy5oPgog I2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHVu aXN0ZC5oPgoKICNpZmRlZiBVU0VfUFRIUkVBRAogI2luY2x1ZGUgPHB0aHJlYWQuaD4KICNl bmRpZgoKLSNlbmRpZgkvKiBfTUFMTE9DX0lOVEVSTkFMLiAgKi8KLQotCiAjaWZkZWYJX19j cGx1c3BsdXMKIGV4dGVybiAiQyIKIHsKICNlbmRpZgoKICNpbmNsdWRlIDxzdGRkZWYuaD4K LSNkZWZpbmUJX19tYWxsb2Nfc2l6ZV90CQlzaXplX3QKLSNkZWZpbmUJX19tYWxsb2NfcHRy ZGlmZl90CXB0cmRpZmZfdAoKCiAvKiBBbGxvY2F0ZSBTSVpFIGJ5dGVzIG9mIG1lbW9yeS4g ICovCi1leHRlcm4gX19wdHJfdCBtYWxsb2MgUFAgKChfX21hbGxvY19zaXplX3QgX19zaXpl KSk7CitleHRlcm4gdm9pZCAqbWFsbG9jIChzaXplX3Qgc2l6ZSk7CiAvKiBSZS1hbGxvY2F0 ZSB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgYmxvY2sKLSAgIGluIF9fcHRyX3QsIG1ha2lu ZyB0aGUgbmV3IGJsb2NrIFNJWkUgYnl0ZXMgbG9uZy4gICovCi1leHRlcm4gX19wdHJfdCBy ZWFsbG9jIFBQICgoX19wdHJfdCBfX3B0ciwgX19tYWxsb2Nfc2l6ZV90IF9fc2l6ZSkpOwor ICAgaW4gcHRyLCBtYWtpbmcgdGhlIG5ldyBibG9jayBTSVpFIGJ5dGVzIGxvbmcuICAqLwor ZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOwogLyogQWxs b2NhdGUgTk1FTUIgZWxlbWVudHMgb2YgU0laRSBieXRlcyBlYWNoLCBhbGwgaW5pdGlhbGl6 ZWQgdG8gMC4gICovCi1leHRlcm4gX19wdHJfdCBjYWxsb2MgUFAgKChfX21hbGxvY19zaXpl X3QgX19ubWVtYiwgX19tYWxsb2Nfc2l6ZV90IF9fc2l6ZSkpOworZXh0ZXJuIHZvaWQgKmNh bGxvYyAoc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSk7CiAvKiBGcmVlIGEgYmxvY2sgYWxs b2NhdGVkIGJ5IGBtYWxsb2MnLCBgcmVhbGxvYycgb3IgYGNhbGxvYycuICAqLwotZXh0ZXJu IHZvaWQgZnJlZSBQUCAoKF9fcHRyX3QgX19wdHIpKTsKK2V4dGVybiB2b2lkIGZyZWUgKHZv aWQgKnB0cik7CgogLyogQWxsb2NhdGUgU0laRSBieXRlcyBhbGxvY2F0ZWQgdG8gQUxJR05N RU5UIGJ5dGVzLiAgKi8KLSNpZiAhZGVmaW5lZCAoX01BTExPQ19JTlRFUk5BTCkgfHwgZGVm aW5lZCAoTVNET1MpIC8qIEF2b2lkIGNvbmZsaWN0LiAgKi8KLWV4dGVybiBfX3B0cl90IG1l bWFsaWduIFBQICgoX19tYWxsb2Nfc2l6ZV90IF9fYWxpZ25tZW50LAotCQkJICAgICBfX21h bGxvY19zaXplX3QgX19zaXplKSk7Ci1leHRlcm4gaW50IHBvc2l4X21lbWFsaWduIFBQICgo X19wdHJfdCAqLCBfX21hbGxvY19zaXplX3QsCi0JCQkgICAgICAgX19tYWxsb2Nfc2l6ZV90 IHNpemUpKTsKLSNlbmRpZgotCi0vKiBBbGxvY2F0ZSBTSVpFIGJ5dGVzIG9uIGEgcGFnZSBi b3VuZGFyeS4gICovCi0jaWYgISAoZGVmaW5lZCAoX01BTExPQ19JTlRFUk5BTCkgJiYgZGVm aW5lZCAoR01BTExPQ19JTkhJQklUX1ZBTExPQykpCi1leHRlcm4gX19wdHJfdCB2YWxsb2Mg UFAgKChfX21hbGxvY19zaXplX3QgX19zaXplKSk7CisjaWZuZGVmIE1TRE9TCitleHRlcm4g dm9pZCAqbWVtYWxpZ24gKHNpemVfdCwgc2l6ZV90KTsKK2V4dGVybiBpbnQgcG9zaXhfbWVt YWxpZ24gKHZvaWQgKiosIHNpemVfdCwgc2l6ZV90KTsKICNlbmRpZgoKICNpZmRlZiBVU0Vf UFRIUkVBRAogLyogU2V0IHVwIG11dGV4ZXMgYW5kIG1ha2UgbWFsbG9jIGV0Yy4gdGhyZWFk LXNhZmUuICAqLwotZXh0ZXJuIHZvaWQgbWFsbG9jX2VuYWJsZV90aHJlYWQgUFAgKCh2b2lk KSk7CitleHRlcm4gdm9pZCBtYWxsb2NfZW5hYmxlX3RocmVhZCAodm9pZCk7CiAjZW5kaWYK Ci0jaWZkZWYgX01BTExPQ19JTlRFUk5BTAotCiAvKiBUaGUgYWxsb2NhdG9yIGRpdmlkZXMg dGhlIGhlYXAgaW50byBibG9ja3Mgb2YgZml4ZWQgc2l6ZTsgbGFyZ2UKICAgIHJlcXVlc3Rz IHJlY2VpdmUgb25lIG9yIG1vcmUgd2hvbGUgYmxvY2tzLCBhbmQgc21hbGwgcmVxdWVzdHMK ICAgIHJlY2VpdmUgYSBmcmFnbWVudCBvZiBhIGJsb2NrLiAgRnJhZ21lbnQgc2l6ZXMgYXJl IHBvd2VycyBvZiB0d28sCkBAIC0xMjgsMjIgKzk4LDIyIEBACiAJICB7CiAJICAgIHN0cnVj dAogCSAgICAgIHsKLQkJX19tYWxsb2Nfc2l6ZV90IG5mcmVlOyAvKiBGcmVlIGZyYWdzIGlu IGEgZnJhZ21lbnRlZCBibG9jay4gICovCi0JCV9fbWFsbG9jX3NpemVfdCBmaXJzdDsgLyog Rmlyc3QgZnJlZSBmcmFnbWVudCBvZiB0aGUgYmxvY2suICAqLworCQlzaXplX3QgbmZyZWU7 IC8qIEZyZWUgZnJhZ3MgaW4gYSBmcmFnbWVudGVkIGJsb2NrLiAgKi8KKwkJc2l6ZV90IGZp cnN0OyAvKiBGaXJzdCBmcmVlIGZyYWdtZW50IG9mIHRoZSBibG9jay4gICovCiAJICAgICAg fSBmcmFnOwogCSAgICAvKiBGb3IgYSBsYXJnZSBvYmplY3QsIGluIGl0cyBmaXJzdCBibG9j aywgdGhpcyBoYXMgdGhlIG51bWJlcgogCSAgICAgICBvZiBibG9ja3MgaW4gdGhlIG9iamVj dC4gIEluIHRoZSBvdGhlciBibG9ja3MsIHRoaXMgaGFzIGEKIAkgICAgICAgbmVnYXRpdmUg bnVtYmVyIHdoaWNoIHNheXMgaG93IGZhciBiYWNrIHRoZSBmaXJzdCBibG9jayBpcy4gICov Ci0JICAgIF9fbWFsbG9jX3B0cmRpZmZfdCBzaXplOworCSAgICBwdHJkaWZmX3Qgc2l6ZTsK IAkgIH0gaW5mbzsKICAgICAgIH0gYnVzeTsKICAgICAvKiBIZWFwIGluZm9ybWF0aW9uIGZv ciBhIGZyZWUgYmxvY2sKICAgICAgICAodGhhdCBtYXkgYmUgdGhlIGZpcnN0IG9mIGEgZnJl ZSBjbHVzdGVyKS4gICovCiAgICAgc3RydWN0CiAgICAgICB7Ci0JX19tYWxsb2Nfc2l6ZV90 IHNpemU7CS8qIFNpemUgKGluIGJsb2Nrcykgb2YgYSBmcmVlIGNsdXN0ZXIuICAqLwotCV9f bWFsbG9jX3NpemVfdCBuZXh0OwkvKiBJbmRleCBvZiBuZXh0IGZyZWUgY2x1c3Rlci4gICov Ci0JX19tYWxsb2Nfc2l6ZV90IHByZXY7CS8qIEluZGV4IG9mIHByZXZpb3VzIGZyZWUgY2x1 c3Rlci4gICovCisJc2l6ZV90IHNpemU7CS8qIFNpemUgKGluIGJsb2Nrcykgb2YgYSBmcmVl IGNsdXN0ZXIuICAqLworCXNpemVfdCBuZXh0OwkvKiBJbmRleCBvZiBuZXh0IGZyZWUgY2x1 c3Rlci4gICovCisJc2l6ZV90IHByZXY7CS8qIEluZGV4IG9mIHByZXZpb3VzIGZyZWUgY2x1 c3Rlci4gICovCiAgICAgICB9IGZyZWU7CiAgIH0gbWFsbG9jX2luZm87CgpAQCAtMTU1LDEz ICsxMjUsMTMgQEAKCiAvKiBBZGRyZXNzIHRvIGJsb2NrIG51bWJlciBhbmQgdmljZSB2ZXJz YS4gICovCiAjZGVmaW5lIEJMT0NLKEEpCSgoKGNoYXIgKikgKEEpIC0gX2hlYXBiYXNlKSAv IEJMT0NLU0laRSArIDEpCi0jZGVmaW5lIEFERFJFU1MoQikJKChfX3B0cl90KSAoKChCKSAt IDEpICogQkxPQ0tTSVpFICsgX2hlYXBiYXNlKSkKKyNkZWZpbmUgQUREUkVTUyhCKQkoKHZv aWQgKikgKCgoQikgLSAxKSAqIEJMT0NLU0laRSArIF9oZWFwYmFzZSkpCgogLyogQ3VycmVu dCBzZWFyY2ggaW5kZXggZm9yIHRoZSBoZWFwIHRhYmxlLiAgKi8KLWV4dGVybiBfX21hbGxv Y19zaXplX3QgX2hlYXBpbmRleDsKK2V4dGVybiBzaXplX3QgX2hlYXBpbmRleDsKCiAvKiBM aW1pdCBvZiB2YWxpZCBpbmZvIHRhYmxlIGluZGljZXMuICAqLwotZXh0ZXJuIF9fbWFsbG9j X3NpemVfdCBfaGVhcGxpbWl0OworZXh0ZXJuIHNpemVfdCBfaGVhcGxpbWl0OwoKIC8qIERv dWJseSBsaW5rZWQgbGlzdHMgb2YgZnJlZSBmcmFnbWVudHMuICAqLwogc3RydWN0IGxpc3QK QEAgLTE3NywyNiArMTQ3LDI2IEBACiBzdHJ1Y3QgYWxpZ25saXN0CiAgIHsKICAgICBzdHJ1 Y3QgYWxpZ25saXN0ICpuZXh0OwotICAgIF9fcHRyX3QgYWxpZ25lZDsJCS8qIFRoZSBhZGRy ZXNzIHRoYXQgbWVtYWxpZ25lZCByZXR1cm5lZC4gICovCi0gICAgX19wdHJfdCBleGFjdDsJ CS8qIFRoZSBhZGRyZXNzIHRoYXQgbWFsbG9jIHJldHVybmVkLiAgKi8KKyAgICB2b2lkICph bGlnbmVkOwkJLyogVGhlIGFkZHJlc3MgdGhhdCBtZW1hbGlnbmVkIHJldHVybmVkLiAgKi8K KyAgICB2b2lkICpleGFjdDsJCS8qIFRoZSBhZGRyZXNzIHRoYXQgbWFsbG9jIHJldHVybmVk LiAgKi8KICAgfTsKIGV4dGVybiBzdHJ1Y3QgYWxpZ25saXN0ICpfYWxpZ25lZF9ibG9ja3M7 CgogLyogSW5zdHJ1bWVudGF0aW9uLiAgKi8KLWV4dGVybiBfX21hbGxvY19zaXplX3QgX2No dW5rc191c2VkOwotZXh0ZXJuIF9fbWFsbG9jX3NpemVfdCBfYnl0ZXNfdXNlZDsKLWV4dGVy biBfX21hbGxvY19zaXplX3QgX2NodW5rc19mcmVlOwotZXh0ZXJuIF9fbWFsbG9jX3NpemVf dCBfYnl0ZXNfZnJlZTsKK2V4dGVybiBzaXplX3QgX2NodW5rc191c2VkOworZXh0ZXJuIHNp emVfdCBfYnl0ZXNfdXNlZDsKK2V4dGVybiBzaXplX3QgX2NodW5rc19mcmVlOworZXh0ZXJu IHNpemVfdCBfYnl0ZXNfZnJlZTsKCiAvKiBJbnRlcm5hbCB2ZXJzaW9ucyBvZiBgbWFsbG9j JywgYHJlYWxsb2MnLCBhbmQgYGZyZWUnCiAgICB1c2VkIHdoZW4gdGhlc2UgZnVuY3Rpb25z IG5lZWQgdG8gY2FsbCBlYWNoIG90aGVyLgogICAgVGhleSBhcmUgdGhlIHNhbWUgYnV0IGRv bid0IGNhbGwgdGhlIGhvb2tzLiAgKi8KLWV4dGVybiBfX3B0cl90IF9tYWxsb2NfaW50ZXJu YWwgUFAgKChfX21hbGxvY19zaXplX3QgX19zaXplKSk7Ci1leHRlcm4gX19wdHJfdCBfcmVh bGxvY19pbnRlcm5hbCBQUCAoKF9fcHRyX3QgX19wdHIsIF9fbWFsbG9jX3NpemVfdCBfX3Np emUpKTsKLWV4dGVybiB2b2lkIF9mcmVlX2ludGVybmFsIFBQICgoX19wdHJfdCBfX3B0cikp OwotZXh0ZXJuIF9fcHRyX3QgX21hbGxvY19pbnRlcm5hbF9ub2xvY2sgUFAgKChfX21hbGxv Y19zaXplX3QgX19zaXplKSk7Ci1leHRlcm4gX19wdHJfdCBfcmVhbGxvY19pbnRlcm5hbF9u b2xvY2sgUFAgKChfX3B0cl90IF9fcHRyLCBfX21hbGxvY19zaXplX3QgX19zaXplKSk7Ci1l eHRlcm4gdm9pZCBfZnJlZV9pbnRlcm5hbF9ub2xvY2sgUFAgKChfX3B0cl90IF9fcHRyKSk7 CitleHRlcm4gdm9pZCAqX21hbGxvY19pbnRlcm5hbCAoc2l6ZV90KTsKK2V4dGVybiB2b2lk ICpfcmVhbGxvY19pbnRlcm5hbCAodm9pZCAqLCBzaXplX3QpOworZXh0ZXJuIHZvaWQgX2Zy ZWVfaW50ZXJuYWwgKHZvaWQgKik7CitleHRlcm4gdm9pZCAqX21hbGxvY19pbnRlcm5hbF9u b2xvY2sgKHNpemVfdCk7CitleHRlcm4gdm9pZCAqX3JlYWxsb2NfaW50ZXJuYWxfbm9sb2Nr ICh2b2lkICosIHNpemVfdCk7CitleHRlcm4gdm9pZCBfZnJlZV9pbnRlcm5hbF9ub2xvY2sg KHZvaWQgKik7CgogI2lmZGVmIFVTRV9QVEhSRUFECiBleHRlcm4gcHRocmVhZF9tdXRleF90 IF9tYWxsb2NfbXV0ZXgsIF9hbGlnbmVkX2Jsb2Nrc19tdXRleDsKQEAgLTIyOCwzOSArMTk4 LDM2IEBACiAjZGVmaW5lIFVOTE9DS19BTElHTkVEX0JMT0NLUygpCiAjZW5kaWYKCi0jZW5k aWYgLyogX01BTExPQ19JTlRFUk5BTC4gICovCi0KIC8qIEdpdmVuIGFuIGFkZHJlc3MgaW4g dGhlIG1pZGRsZSBvZiBhIG1hbGxvYydkIG9iamVjdCwKICAgIHJldHVybiB0aGUgYWRkcmVz cyBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBvYmplY3QuICAqLwotZXh0ZXJuIF9fcHRyX3Qg bWFsbG9jX2ZpbmRfb2JqZWN0X2FkZHJlc3MgUFAgKChfX3B0cl90IF9fcHRyKSk7CitleHRl cm4gdm9pZCAqbWFsbG9jX2ZpbmRfb2JqZWN0X2FkZHJlc3MgKHZvaWQgKnB0cik7CgogLyog VW5kZXJseWluZyBhbGxvY2F0aW9uIGZ1bmN0aW9uOyBzdWNjZXNzaXZlIGNhbGxzIHNob3Vs ZAogICAgcmV0dXJuIGNvbnRpZ3VvdXMgcGllY2VzIG9mIG1lbW9yeS4gICovCi1leHRlcm4g X19wdHJfdCAoKl9fbW9yZWNvcmUpIFBQICgoX19tYWxsb2NfcHRyZGlmZl90IF9fc2l6ZSkp OworZXh0ZXJuIHZvaWQgKigqX19tb3JlY29yZSkgKHB0cmRpZmZfdCBzaXplKTsKCiAvKiBE ZWZhdWx0IHZhbHVlIG9mIGBfX21vcmVjb3JlJy4gICovCi1leHRlcm4gX19wdHJfdCBfX2Rl ZmF1bHRfbW9yZWNvcmUgUFAgKChfX21hbGxvY19wdHJkaWZmX3QgX19zaXplKSk7CitleHRl cm4gdm9pZCAqX19kZWZhdWx0X21vcmVjb3JlIChwdHJkaWZmX3Qgc2l6ZSk7CgogLyogSWYg bm90IE5VTEwsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGVhY2ggdGltZQogICAg YF9fbW9yZWNvcmUnIGlzIGNhbGxlZCB0byBpbmNyZWFzZSB0aGUgZGF0YSBzaXplLiAgKi8K LWV4dGVybiB2b2lkICgqX19hZnRlcl9tb3JlY29yZV9ob29rKSBQUCAoKHZvaWQpKTsKK2V4 dGVybiB2b2lkICgqX19hZnRlcl9tb3JlY29yZV9ob29rKSAodm9pZCk7CgogLyogTnVtYmVy IG9mIGV4dHJhIGJsb2NrcyB0byBnZXQgZWFjaCB0aW1lIHdlIGFzayBmb3IgbW9yZSBjb3Jl LgogICAgVGhpcyByZWR1Y2VzIHRoZSBmcmVxdWVuY3kgb2YgY2FsbGluZyBgKCpfX21vcmVj b3JlKScuICAqLwotZXh0ZXJuIF9fbWFsbG9jX3NpemVfdCBfX21hbGxvY19leHRyYV9ibG9j a3M7CitleHRlcm4gc2l6ZV90IF9fbWFsbG9jX2V4dHJhX2Jsb2NrczsKCiAvKiBOb256ZXJv IGlmIGBtYWxsb2MnIGhhcyBiZWVuIGNhbGxlZCBhbmQgZG9uZSBpdHMgaW5pdGlhbGl6YXRp b24uICAqLwogZXh0ZXJuIGludCBfX21hbGxvY19pbml0aWFsaXplZDsKIC8qIEZ1bmN0aW9u IGNhbGxlZCB0byBpbml0aWFsaXplIG1hbGxvYyBkYXRhIHN0cnVjdHVyZXMuICAqLwotZXh0 ZXJuIGludCBfX21hbGxvY19pbml0aWFsaXplIFBQICgodm9pZCkpOworZXh0ZXJuIGludCBf X21hbGxvY19pbml0aWFsaXplICh2b2lkKTsKCiAvKiBIb29rcyBmb3IgZGVidWdnaW5nIHZl cnNpb25zLiAgKi8KLWV4dGVybiB2b2lkICgqX19tYWxsb2NfaW5pdGlhbGl6ZV9ob29rKSBQ UCAoKHZvaWQpKTsKLWV4dGVybiB2b2lkICgqX19mcmVlX2hvb2spIFBQICgoX19wdHJfdCBf X3B0cikpOwotZXh0ZXJuIF9fcHRyX3QgKCpfX21hbGxvY19ob29rKSBQUCAoKF9fbWFsbG9j X3NpemVfdCBfX3NpemUpKTsKLWV4dGVybiBfX3B0cl90ICgqX19yZWFsbG9jX2hvb2spIFBQ ICgoX19wdHJfdCBfX3B0ciwgX19tYWxsb2Nfc2l6ZV90IF9fc2l6ZSkpOwotZXh0ZXJuIF9f cHRyX3QgKCpfX21lbWFsaWduX2hvb2spIFBQICgoX19tYWxsb2Nfc2l6ZV90IF9fc2l6ZSwK LQkJCQkgICAgICAgX19tYWxsb2Nfc2l6ZV90IF9fYWxpZ25tZW50KSk7CitleHRlcm4gdm9p ZCAoKl9fbWFsbG9jX2luaXRpYWxpemVfaG9vaykgKHZvaWQpOworZXh0ZXJuIHZvaWQgKCpf X2ZyZWVfaG9vaykgKHZvaWQgKnB0cik7CitleHRlcm4gdm9pZCAqKCpfX21hbGxvY19ob29r KSAoc2l6ZV90IHNpemUpOworZXh0ZXJuIHZvaWQgKigqX19yZWFsbG9jX2hvb2spICh2b2lk ICpwdHIsIHNpemVfdCBzaXplKTsKK2V4dGVybiB2b2lkICooKl9fbWVtYWxpZ25faG9vaykg KHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KTsKCiAvKiBSZXR1cm4gdmFsdWVzIGZv ciBgbXByb2JlJzogdGhlc2UgYXJlIHRoZSBraW5kcyBvZiBpbmNvbnNpc3RlbmNpZXMgdGhh dAogICAgYG1jaGVjaycgZW5hYmxlcyBkZXRlY3Rpb24gb2YuICAqLwpAQCAtMjc3LDUyICsy NDQsMzcgQEAKICAgIGJlZm9yZSBgbWFsbG9jJyBpcyBldmVyIGNhbGxlZC4gIEFCT1JURlVO QyBpcyBjYWxsZWQgd2l0aCBhbiBlcnJvciBjb2RlCiAgICAoc2VlIGVudW0gYWJvdmUpIHdo ZW4gYW4gaW5jb25zaXN0ZW5jeSBpcyBkZXRlY3RlZC4gIElmIEFCT1JURlVOQyBpcwogICAg bnVsbCwgdGhlIHN0YW5kYXJkIGZ1bmN0aW9uIHByaW50cyBvbiBzdGRlcnIgYW5kIHRoZW4g Y2FsbHMgYGFib3J0Jy4gICovCi1leHRlcm4gaW50IG1jaGVjayBQUCAoKHZvaWQgKCpfX2Fi b3J0ZnVuYykgUFAgKChlbnVtIG1jaGVja19zdGF0dXMpKSkpOworZXh0ZXJuIGludCBtY2hl Y2sgKHZvaWQgKCphYm9ydGZ1bmMpIChlbnVtIG1jaGVja19zdGF0dXMpKTsKCiAvKiBDaGVj ayBmb3IgYWJlcnJhdGlvbnMgaW4gYSBwYXJ0aWN1bGFyIG1hbGxvYydkIGJsb2NrLiAgWW91 IG11c3QgaGF2ZQogICAgY2FsbGVkIGBtY2hlY2snIGFscmVhZHkuICBUaGVzZSBhcmUgdGhl IHNhbWUgY2hlY2tzIHRoYXQgYG1jaGVjaycgZG9lcwogICAgd2hlbiB5b3UgZnJlZSBvciBy ZWFsbG9jYXRlIGEgYmxvY2suICAqLwotZXh0ZXJuIGVudW0gbWNoZWNrX3N0YXR1cyBtcHJv YmUgUFAgKChfX3B0cl90IF9fcHRyKSk7CitleHRlcm4gZW51bSBtY2hlY2tfc3RhdHVzIG1w cm9iZSAodm9pZCAqcHRyKTsKCiAvKiBBY3RpdmF0ZSBhIHN0YW5kYXJkIGNvbGxlY3Rpb24g b2YgdHJhY2luZyBob29rcy4gICovCi1leHRlcm4gdm9pZCBtdHJhY2UgUFAgKCh2b2lkKSk7 Ci1leHRlcm4gdm9pZCBtdW50cmFjZSBQUCAoKHZvaWQpKTsKK2V4dGVybiB2b2lkIG10cmFj ZSAodm9pZCk7CitleHRlcm4gdm9pZCBtdW50cmFjZSAodm9pZCk7CgogLyogU3RhdGlzdGlj cyBhdmFpbGFibGUgdG8gdGhlIHVzZXIuICAqLwogc3RydWN0IG1zdGF0cwogICB7Ci0gICAg X19tYWxsb2Nfc2l6ZV90IGJ5dGVzX3RvdGFsOyAvKiBUb3RhbCBzaXplIG9mIHRoZSBoZWFw LiAqLwotICAgIF9fbWFsbG9jX3NpemVfdCBjaHVua3NfdXNlZDsgLyogQ2h1bmtzIGFsbG9j YXRlZCBieSB0aGUgdXNlci4gKi8KLSAgICBfX21hbGxvY19zaXplX3QgYnl0ZXNfdXNlZDsJ LyogQnl0ZSB0b3RhbCBvZiB1c2VyLWFsbG9jYXRlZCBjaHVua3MuICovCi0gICAgX19tYWxs b2Nfc2l6ZV90IGNodW5rc19mcmVlOyAvKiBDaHVua3MgaW4gdGhlIGZyZWUgbGlzdC4gKi8K LSAgICBfX21hbGxvY19zaXplX3QgYnl0ZXNfZnJlZTsJLyogQnl0ZSB0b3RhbCBvZiBjaHVu a3MgaW4gdGhlIGZyZWUgbGlzdC4gKi8KKyAgICBzaXplX3QgYnl0ZXNfdG90YWw7CS8qIFRv dGFsIHNpemUgb2YgdGhlIGhlYXAuICovCisgICAgc2l6ZV90IGNodW5rc191c2VkOwkvKiBD aHVua3MgYWxsb2NhdGVkIGJ5IHRoZSB1c2VyLiAqLworICAgIHNpemVfdCBieXRlc191c2Vk OwkvKiBCeXRlIHRvdGFsIG9mIHVzZXItYWxsb2NhdGVkIGNodW5rcy4gKi8KKyAgICBzaXpl X3QgY2h1bmtzX2ZyZWU7CS8qIENodW5rcyBpbiB0aGUgZnJlZSBsaXN0LiAqLworICAgIHNp emVfdCBieXRlc19mcmVlOwkvKiBCeXRlIHRvdGFsIG9mIGNodW5rcyBpbiB0aGUgZnJlZSBs aXN0LiAqLwogICB9OwoKIC8qIFBpY2sgdXAgdGhlIGN1cnJlbnQgc3RhdGlzdGljcy4gKi8K LWV4dGVybiBzdHJ1Y3QgbXN0YXRzIG1zdGF0cyBQUCAoKHZvaWQpKTsKK2V4dGVybiBzdHJ1 Y3QgbXN0YXRzIG1zdGF0cyAodm9pZCk7CgogLyogQ2FsbCBXQVJORlVOIHdpdGggYSB3YXJu aW5nIG1lc3NhZ2Ugd2hlbiBtZW1vcnkgdXNhZ2UgaXMgaGlnaC4gICovCi1leHRlcm4gdm9p ZCBtZW1vcnlfd2FybmluZ3MgUFAgKChfX3B0cl90IF9fc3RhcnQsCi0JCQkJIHZvaWQgKCpf X3dhcm5mdW4pIFBQICgoY29uc3QgY2hhciAqKSkpKTsKLQotCi0vKiBSZWxvY2F0aW5nIGFs bG9jYXRvci4gICovCi0KLS8qIEFsbG9jYXRlIFNJWkUgYnl0ZXMsIGFuZCBzdG9yZSB0aGUg YWRkcmVzcyBpbiAqSEFORExFUFRSLiAgKi8KLWV4dGVybiBfX3B0cl90IHJfYWxsb2MgUFAg KChfX3B0cl90ICpfX2hhbmRsZXB0ciwgX19tYWxsb2Nfc2l6ZV90IF9fc2l6ZSkpOwotCi0v KiBGcmVlIHRoZSBzdG9yYWdlIGFsbG9jYXRlZCBpbiBIQU5ETEVQVFIuICAqLwotZXh0ZXJu IHZvaWQgcl9hbGxvY19mcmVlIFBQICgoX19wdHJfdCAqX19oYW5kbGVwdHIpKTsKLQotLyog QWRqdXN0IHRoZSBibG9jayBhdCBIQU5ETEVQVFIgdG8gYmUgU0laRSBieXRlcyBsb25nLiAg Ki8KLWV4dGVybiBfX3B0cl90IHJfcmVfYWxsb2MgUFAgKChfX3B0cl90ICpfX2hhbmRsZXB0 ciwgX19tYWxsb2Nfc2l6ZV90IF9fc2l6ZSkpOwotCitleHRlcm4gdm9pZCBtZW1vcnlfd2Fy bmluZ3MgKHZvaWQgKnN0YXJ0LCB2b2lkICgqd2FybmZ1bikgKGNvbnN0IGNoYXIgKikpOwoK ICNpZmRlZglfX2NwbHVzcGx1cwogfQogI2VuZGlmCgotI2VuZGlmIC8qIG1hbGxvYy5oICAq LwogLyogTWVtb3J5IGFsbG9jYXRvciBgbWFsbG9jJy4KICAgIENvcHlyaWdodCAxOTkwLCAx OTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgogCQkgIFdyaXR0ZW4gTWF5IDE5ODkgYnkgTWlrZSBIYWVydGVsLgpAQCAtMzQ1LDEw ICsyOTcsNiBAQAogICAgVGhlIGF1dGhvciBtYXkgYmUgcmVhY2hlZCAoRW1haWwpIGF0IHRo ZSBhZGRyZXNzIG1pa2VAYWkubWl0LmVkdSwKICAgIG9yIChVUyBtYWlsKSBhcyBNaWtlIEhh ZXJ0ZWwgYy9vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gICovCgotI2lmbmRlZglfTUFM TE9DX0lOVEVSTkFMCi0jZGVmaW5lIF9NQUxMT0NfSU5URVJOQUwKLSNpbmNsdWRlIDxtYWxs b2MuaD4KLSNlbmRpZgogI2luY2x1ZGUgPGVycm5vLmg+CgogLyogT24gQ3lnd2luIHRoZXJl IGFyZSB0d28gaGVhcHMuICB0ZW1hY3MgdXNlcyB0aGUgc3RhdGljIGhlYXAKQEAgLTM2Miwx NSArMzEwLDE1IEBACiAgICB0aGlzIGlzIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSwgd2UnbGwg aGF2ZSB0byBzaW1pbGFybHkgZGVhbCB3aXRoCiAgICByZWluaXRpYWxpemluZyByYWxsb2Mu ICovCiAjaWZkZWYgQ1lHV0lOCi1leHRlcm4gX19wdHJfdCBic3Nfc2JyayBQUCAoKHB0cmRp ZmZfdCBfX3NpemUpKTsKK2V4dGVybiB2b2lkICpic3Nfc2JyayAocHRyZGlmZl90IHNpemUp OwogZXh0ZXJuIGludCBic3Nfc2Jya19kaWRfdW5leGVjOwogY2hhciAqYnNzX3NicmtfaGVh cGJhc2U7CS8qIF9oZWFwYmFzZSBmb3Igc3RhdGljIGhlYXAgKi8KIG1hbGxvY19pbmZvICpi c3Nfc2Jya19oZWFwaW5mbzsJLyogX2hlYXBpbmZvIGZvciBzdGF0aWMgaGVhcCAqLwogI2Vu ZGlmCi1fX3B0cl90ICgqX19tb3JlY29yZSkgUFAgKChfX21hbGxvY19wdHJkaWZmX3QgX19z aXplKSkgPSBfX2RlZmF1bHRfbW9yZWNvcmU7Cit2b2lkICooKl9fbW9yZWNvcmUpIChwdHJk aWZmX3Qgc2l6ZSkgPSBfX2RlZmF1bHRfbW9yZWNvcmU7CgogLyogRGVidWdnaW5nIGhvb2sg Zm9yIGBtYWxsb2MnLiAgKi8KLV9fcHRyX3QgKCpfX21hbGxvY19ob29rKSBQUCAoKF9fbWFs bG9jX3NpemVfdCBfX3NpemUpKTsKK3ZvaWQgKigqX19tYWxsb2NfaG9vaykgKHNpemVfdCBz aXplKTsKCiAvKiBQb2ludGVyIHRvIHRoZSBiYXNlIG9mIHRoZSBmaXJzdCBibG9jay4gICov CiBjaGFyICpfaGVhcGJhc2U7CkBAIC0zNzksMzAgKzMyNywzMCBAQAogbWFsbG9jX2luZm8g Kl9oZWFwaW5mbzsKCiAvKiBOdW1iZXIgb2YgaW5mbyBlbnRyaWVzLiAgKi8KLXN0YXRpYyBf X21hbGxvY19zaXplX3QgaGVhcHNpemU7CitzdGF0aWMgc2l6ZV90IGhlYXBzaXplOwoKIC8q IFNlYXJjaCBpbmRleCBpbiB0aGUgaW5mbyB0YWJsZS4gICovCi1fX21hbGxvY19zaXplX3Qg X2hlYXBpbmRleDsKK3NpemVfdCBfaGVhcGluZGV4OwoKIC8qIExpbWl0IG9mIHZhbGlkIGlu Zm8gdGFibGUgaW5kaWNlcy4gICovCi1fX21hbGxvY19zaXplX3QgX2hlYXBsaW1pdDsKK3Np emVfdCBfaGVhcGxpbWl0OwoKIC8qIEZyZWUgbGlzdHMgZm9yIGVhY2ggZnJhZ21lbnQgc2l6 ZS4gICovCiBzdHJ1Y3QgbGlzdCBfZnJhZ2hlYWRbQkxPQ0tMT0ddOwoKIC8qIEluc3RydW1l bnRhdGlvbi4gICovCi1fX21hbGxvY19zaXplX3QgX2NodW5rc191c2VkOwotX19tYWxsb2Nf c2l6ZV90IF9ieXRlc191c2VkOwotX19tYWxsb2Nfc2l6ZV90IF9jaHVua3NfZnJlZTsKLV9f bWFsbG9jX3NpemVfdCBfYnl0ZXNfZnJlZTsKK3NpemVfdCBfY2h1bmtzX3VzZWQ7CitzaXpl X3QgX2J5dGVzX3VzZWQ7CitzaXplX3QgX2NodW5rc19mcmVlOworc2l6ZV90IF9ieXRlc19m cmVlOwoKIC8qIEFyZSB5b3UgZXhwZXJpZW5jZWQ/ICAqLwogaW50IF9fbWFsbG9jX2luaXRp YWxpemVkOwoKLV9fbWFsbG9jX3NpemVfdCBfX21hbGxvY19leHRyYV9ibG9ja3M7CitzaXpl X3QgX19tYWxsb2NfZXh0cmFfYmxvY2tzOwoKLXZvaWQgKCpfX21hbGxvY19pbml0aWFsaXpl X2hvb2spIFBQICgodm9pZCkpOwotdm9pZCAoKl9fYWZ0ZXJfbW9yZWNvcmVfaG9vaykgUFAg KCh2b2lkKSk7Cit2b2lkICgqX19tYWxsb2NfaW5pdGlhbGl6ZV9ob29rKSAodm9pZCk7Cit2 b2lkICgqX19hZnRlcl9tb3JlY29yZV9ob29rKSAodm9pZCk7CgogI2lmIGRlZmluZWQgR0Nf TUFMTE9DX0NIRUNLICYmIGRlZmluZWQgR0NfUFJPVEVDVF9NQUxMT0NfU1RBVEUKCkBAIC00 MTksMTIgKzM2NywxMSBAQAogI2luY2x1ZGUgPHN5cy9tbWFuLmg+Cgogc3RhdGljIGludCBz dGF0ZV9wcm90ZWN0ZWRfcDsKLXN0YXRpYyBfX21hbGxvY19zaXplX3QgbGFzdF9zdGF0ZV9z aXplOworc3RhdGljIHNpemVfdCBsYXN0X3N0YXRlX3NpemU7CiBzdGF0aWMgbWFsbG9jX2lu Zm8gKmxhc3RfaGVhcGluZm87Cgogdm9pZAotcHJvdGVjdF9tYWxsb2Nfc3RhdGUgKHByb3Rl Y3RfcCkKLSAgICAgaW50IHByb3RlY3RfcDsKK3Byb3RlY3RfbWFsbG9jX3N0YXRlIChpbnQg cHJvdGVjdF9wKQogewogICAvKiBJZiBfaGVhcGluZm8gaGFzIGJlZW4gcmVsb2NhdGVkLCBt YWtlIHN1cmUgaXRzIG9sZCBsb2NhdGlvbgogICAgICBpc24ndCBsZWZ0IHJlYWQtb25seTsg aXQgd2lsbCBiZSByZXVzZWQgYnkgbWFsbG9jLiAgKi8KQEAgLTQ1MywyOSArNDAwLDI1IEBA CgoKIC8qIEFsaWduZWQgYWxsb2NhdGlvbi4gICovCi1zdGF0aWMgX19wdHJfdCBhbGlnbiBQ UCAoKF9fbWFsbG9jX3NpemVfdCkpOwotc3RhdGljIF9fcHRyX3QKLWFsaWduIChzaXplKQot ICAgICBfX21hbGxvY19zaXplX3Qgc2l6ZTsKK3N0YXRpYyB2b2lkICoKK2FsaWduIChzaXpl X3Qgc2l6ZSkKIHsKLSAgX19wdHJfdCByZXN1bHQ7Ci0gIHVuc2lnbmVkIGxvbmcgaW50IGFk ajsKKyAgdm9pZCAqcmVzdWx0OworICBwdHJkaWZmX3QgYWRqOwoKICAgLyogYWxpZ24gYWNj ZXB0cyBhbiB1bnNpZ25lZCBhcmd1bWVudCwgYnV0IF9fbW9yZWNvcmUgYWNjZXB0cyBhCi0g ICAgIHNpZ25lZCBvbmUuICBUaGlzIGNvdWxkIGxlYWQgdG8gdHJvdWJsZSBpZiBTSVpFIG92 ZXJmbG93cyBhCi0gICAgIHNpZ25lZCBpbnQgdHlwZSBhY2NlcHRlZCBieSBfX21vcmVjb3Jl LiAgV2UganVzdCBwdW50IGluIHRoYXQKKyAgICAgc2lnbmVkIG9uZS4gIFRoaXMgY291bGQg bGVhZCB0byB0cm91YmxlIGlmIFNJWkUgb3ZlcmZsb3dzIHRoZQorICAgICBwdHJkaWZmX3Qg dHlwZSBhY2NlcHRlZCBieSBfX21vcmVjb3JlLiAgV2UganVzdCBwdW50IGluIHRoYXQKICAg ICAgY2FzZSwgc2luY2UgdGhleSBhcmUgcmVxdWVzdGluZyBhIGx1ZGljcm91cyBhbW91bnQg YW55d2F5LiAgKi8KLSAgaWYgKChfX21hbGxvY19wdHJkaWZmX3Qpc2l6ZSA8IDApCisgIGlm IChQVFJESUZGX01BWCA8IHNpemUpCiAgICAgcmVzdWx0ID0gMDsKICAgZWxzZQogICAgIHJl c3VsdCA9ICgqX19tb3JlY29yZSkgKHNpemUpOwotICBhZGogPSAodW5zaWduZWQgbG9uZyBp bnQpICgodW5zaWduZWQgbG9uZyBpbnQpICgoY2hhciAqKSByZXN1bHQgLQotCQkJCQkJICAo Y2hhciAqKSBOVUxMKSkgJSBCTE9DS1NJWkU7CisgIGFkaiA9ICh1aW50cHRyX3QpIHJlc3Vs dCAlIEJMT0NLU0laRTsKICAgaWYgKGFkaiAhPSAwKQogICAgIHsKLSAgICAgIF9fcHRyX3Qg bmV3OwogICAgICAgYWRqID0gQkxPQ0tTSVpFIC0gYWRqOwotICAgICAgbmV3ID0gKCpfX21v cmVjb3JlKSAoYWRqKTsKKyAgICAgICgqX19tb3JlY29yZSkgKGFkaik7CiAgICAgICByZXN1 bHQgPSAoY2hhciAqKSByZXN1bHQgKyBhZGo7CiAgICAgfQoKQEAgLTQ4OCwxNCArNDMxLDEx IEBACiAvKiBHZXQgU0laRSBieXRlcywgaWYgd2UgY2FuIGdldCB0aGVtIHN0YXJ0aW5nIGF0 IEVORC4KICAgIFJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgc3BhY2Ugd2UgZ290LgogICAg SWYgd2UgY2Fubm90IGdldCBzcGFjZSBhdCBFTkQsIGZhaWwgYW5kIHJldHVybiAwLiAgKi8K LXN0YXRpYyBfX3B0cl90IGdldF9jb250aWd1b3VzX3NwYWNlIFBQICgoX19tYWxsb2NfcHRy ZGlmZl90LCBfX3B0cl90KSk7Ci1zdGF0aWMgX19wdHJfdAotZ2V0X2NvbnRpZ3VvdXNfc3Bh Y2UgKHNpemUsIHBvc2l0aW9uKQotICAgICBfX21hbGxvY19wdHJkaWZmX3Qgc2l6ZTsKLSAg ICAgX19wdHJfdCBwb3NpdGlvbjsKK3N0YXRpYyB2b2lkICoKK2dldF9jb250aWd1b3VzX3Nw YWNlIChwdHJkaWZmX3Qgc2l6ZSwgdm9pZCAqcG9zaXRpb24pCiB7Ci0gIF9fcHRyX3QgYmVm b3JlOwotICBfX3B0cl90IGFmdGVyOworICB2b2lkICpiZWZvcmU7CisgIHZvaWQgKmFmdGVy OwoKICAgYmVmb3JlID0gKCpfX21vcmVjb3JlKSAoMCk7CiAgIC8qIElmIHdlIGNhbiB0ZWxs IGluIGFkdmFuY2UgdGhhdCB0aGUgYnJlYWsgaXMgYXQgdGhlIHdyb25nIHBsYWNlLApAQCAt NTI1LDcgKzQ2NSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIHJlZ2lzdGVyX2hlYXBpbmZv ICh2b2lkKQogewotICBfX21hbGxvY19zaXplX3QgYmxvY2ssIGJsb2NrczsKKyAgc2l6ZV90 IGJsb2NrLCBibG9ja3M7CgogICBibG9jayA9IEJMT0NLIChfaGVhcGluZm8pOwogICBibG9j a3MgPSBCTE9DS0lGWSAoaGVhcHNpemUgKiBzaXplb2YgKG1hbGxvY19pbmZvKSk7CkBAIC01 NDgsMjEgKzQ4OCwyMSBAQAogaW50IF9tYWxsb2NfdGhyZWFkX2VuYWJsZWRfcDsKCiBzdGF0 aWMgdm9pZAotbWFsbG9jX2F0Zm9ya19oYW5kbGVyX3ByZXBhcmUgKCkKK21hbGxvY19hdGZv cmtfaGFuZGxlcl9wcmVwYXJlICh2b2lkKQogewogICBMT0NLICgpOwogICBMT0NLX0FMSUdO RURfQkxPQ0tTICgpOwogfQoKIHN0YXRpYyB2b2lkCi1tYWxsb2NfYXRmb3JrX2hhbmRsZXJf cGFyZW50ICgpCittYWxsb2NfYXRmb3JrX2hhbmRsZXJfcGFyZW50ICh2b2lkKQogewogICBV TkxPQ0tfQUxJR05FRF9CTE9DS1MgKCk7CiAgIFVOTE9DSyAoKTsKIH0KCiBzdGF0aWMgdm9p ZAotbWFsbG9jX2F0Zm9ya19oYW5kbGVyX2NoaWxkICgpCittYWxsb2NfYXRmb3JrX2hhbmRs ZXJfY2hpbGQgKHZvaWQpCiB7CiAgIFVOTE9DS19BTElHTkVEX0JMT0NLUyAoKTsKICAgVU5M T0NLICgpOwpAQCAtNTcwLDcgKzUxMCw3IEBACgogLyogU2V0IHVwIG11dGV4ZXMgYW5kIG1h a2UgbWFsbG9jIGV0Yy4gdGhyZWFkLXNhZmUuICAqLwogdm9pZAotbWFsbG9jX2VuYWJsZV90 aHJlYWQgKCkKK21hbGxvY19lbmFibGVfdGhyZWFkICh2b2lkKQogewogICBpZiAoX21hbGxv Y190aHJlYWRfZW5hYmxlZF9wKQogICAgIHJldHVybjsKQEAgLTU4OSw3ICs1MjksNyBAQAog I2VuZGlmCgogc3RhdGljIHZvaWQKLW1hbGxvY19pbml0aWFsaXplXzEgKCkKK21hbGxvY19p bml0aWFsaXplXzEgKHZvaWQpCiB7CiAjaWZkZWYgR0NfTUNIRUNLCiAgIG1jaGVjayAoTlVM TCk7CkBAIC02MDksNyArNTQ5LDcgQEAKICAgICAoKl9fbWFsbG9jX2luaXRpYWxpemVfaG9v aykgKCk7CgogICBoZWFwc2l6ZSA9IEhFQVAgLyBCTE9DS1NJWkU7Ci0gIF9oZWFwaW5mbyA9 IChtYWxsb2NfaW5mbyAqKSBhbGlnbiAoaGVhcHNpemUgKiBzaXplb2YgKG1hbGxvY19pbmZv KSk7CisgIF9oZWFwaW5mbyA9IGFsaWduIChoZWFwc2l6ZSAqIHNpemVvZiAobWFsbG9jX2lu Zm8pKTsKICAgaWYgKF9oZWFwaW5mbyA9PSBOVUxMKQogICAgIHJldHVybjsKICAgbWVtc2V0 IChfaGVhcGluZm8sIDAsIGhlYXBzaXplICogc2l6ZW9mIChtYWxsb2NfaW5mbykpOwpAQCAt NjMwLDcgKzU3MCw3IEBACiAgICBtYWluIHdpbGwgY2FsbCBtYWxsb2Mgd2hpY2ggY2FsbHMg dGhpcyBmdW5jdGlvbi4gIFRoYXQgaXMgYmVmb3JlIGFueSB0aHJlYWRzCiAgICBvciBzaWdu YWwgaGFuZGxlcnMgaGFzIGJlZW4gc2V0IHVwLCBzbyB3ZSBkb24ndCBuZWVkIHRocmVhZCBw cm90ZWN0aW9uLiAgKi8KIGludAotX19tYWxsb2NfaW5pdGlhbGl6ZSAoKQorX19tYWxsb2Nf aW5pdGlhbGl6ZSAodm9pZCkKIHsKICAgaWYgKF9fbWFsbG9jX2luaXRpYWxpemVkKQogICAg IHJldHVybiAwOwpAQCAtNjQ0LDE0ICs1ODQsMTIgQEAKCiAvKiBHZXQgbmVhdGx5IGFsaWdu ZWQgbWVtb3J5LCBpbml0aWFsaXppbmcgb3IKICAgIGdyb3dpbmcgdGhlIGhlYXAgaW5mbyB0 YWJsZSBhcyBuZWNlc3NhcnkuICovCi1zdGF0aWMgX19wdHJfdCBtb3JlY29yZV9ub2xvY2sg UFAgKChfX21hbGxvY19zaXplX3QpKTsKLXN0YXRpYyBfX3B0cl90Ci1tb3JlY29yZV9ub2xv Y2sgKHNpemUpCi0gICAgIF9fbWFsbG9jX3NpemVfdCBzaXplOworc3RhdGljIHZvaWQgKgor bW9yZWNvcmVfbm9sb2NrIChzaXplX3Qgc2l6ZSkKIHsKLSAgX19wdHJfdCByZXN1bHQ7Cisg IHZvaWQgKnJlc3VsdDsKICAgbWFsbG9jX2luZm8gKm5ld2luZm8sICpvbGRpbmZvOwotICBf X21hbGxvY19zaXplX3QgbmV3c2l6ZTsKKyAgc2l6ZV90IG5ld3NpemU7CgogICBpZiAobW9y ZWNvcmVfcmVjdXJzaW5nKQogICAgIC8qIEF2b2lkIHJlY3Vyc2lvbi4gIFRoZSBjYWxsZXIg d2lsbCBrbm93IGhvdyB0byBoYW5kbGUgYSBudWxsIHJldHVybi4gICovCkBAIC02NjQsNyAr NjAyLDcgQEAKICAgUFJPVEVDVF9NQUxMT0NfU1RBVEUgKDApOwoKICAgLyogQ2hlY2sgaWYg d2UgbmVlZCB0byBncm93IHRoZSBpbmZvIHRhYmxlLiAgKi8KLSAgaWYgKChfX21hbGxvY19z aXplX3QpIEJMT0NLICgoY2hhciAqKSByZXN1bHQgKyBzaXplKSA+IGhlYXBzaXplKQorICBp ZiAoKHNpemVfdCkgQkxPQ0sgKChjaGFyICopIHJlc3VsdCArIHNpemUpID4gaGVhcHNpemUp CiAgICAgewogICAgICAgLyogQ2FsY3VsYXRlIHRoZSBuZXcgX2hlYXBpbmZvIHRhYmxlIHNp emUuICBXZSBkbyBub3QgYWNjb3VudCBmb3IgdGhlCiAJIGFkZGVkIGJsb2NrcyBpbiB0aGUg dGFibGUgaXRzZWxmLCBhcyB3ZSBob3BlIHRvIHBsYWNlIHRoZW0gaW4KQEAgLTY3Myw3ICs2 MTEsNyBAQAogICAgICAgbmV3c2l6ZSA9IGhlYXBzaXplOwogICAgICAgZG8KIAluZXdzaXpl ICo9IDI7Ci0gICAgICB3aGlsZSAoKF9fbWFsbG9jX3NpemVfdCkgQkxPQ0sgKChjaGFyICop IHJlc3VsdCArIHNpemUpID4gbmV3c2l6ZSk7CisgICAgICB3aGlsZSAoKHNpemVfdCkgQkxP Q0sgKChjaGFyICopIHJlc3VsdCArIHNpemUpID4gbmV3c2l6ZSk7CgogICAgICAgLyogV2Ug bXVzdCBub3QgcmV1c2UgZXhpc3RpbmcgY29yZSBmb3IgdGhlIG5ldyBpbmZvIHRhYmxlIHdo ZW4gY2FsbGVkCiAJIGZyb20gcmVhbGxvYyBpbiB0aGUgY2FzZSBvZiBncm93aW5nIGEgbGFy Z2UgYmxvY2ssIGJlY2F1c2UgdGhlCkBAIC02ODksOCArNjI3LDggQEAKIAkgICAgIGBtb3Jl Y29yZV9yZWN1cnNpbmcnIGZsYWcgYW5kIHJldHVybiBudWxsLiAgKi8KIAkgIGludCBzYXZl ID0gZXJybm87CS8qIERvbid0IHdhbnQgdG8gY2xvYmJlciBlcnJubyB3aXRoIEVOT01FTS4g ICovCiAJICBtb3JlY29yZV9yZWN1cnNpbmcgPSAxOwotCSAgbmV3aW5mbyA9IChtYWxsb2Nf aW5mbyAqKSBfcmVhbGxvY19pbnRlcm5hbF9ub2xvY2sKLQkgICAgKF9oZWFwaW5mbywgbmV3 c2l6ZSAqIHNpemVvZiAobWFsbG9jX2luZm8pKTsKKwkgIG5ld2luZm8gPSBfcmVhbGxvY19p bnRlcm5hbF9ub2xvY2sgKF9oZWFwaW5mbywKKwkJCQkJICAgICAgbmV3c2l6ZSAqIHNpemVv ZiAobWFsbG9jX2luZm8pKTsKIAkgIG1vcmVjb3JlX3JlY3Vyc2luZyA9IDA7CiAJICBpZiAo bmV3aW5mbyA9PSBOVUxMKQogCSAgICBlcnJubyA9IHNhdmU7CkBAIC03MTAsNyArNjQ4LDcg QEAKICAgICAgIC8qIEFsbG9jYXRlIG5ldyBzcGFjZSBmb3IgdGhlIG1hbGxvYyBpbmZvIHRh YmxlLiAgKi8KICAgICAgIHdoaWxlICgxKQogICAJewotIAkgIG5ld2luZm8gPSAobWFsbG9j X2luZm8gKikgYWxpZ24gKG5ld3NpemUgKiBzaXplb2YgKG1hbGxvY19pbmZvKSk7CisgCSAg bmV3aW5mbyA9IGFsaWduIChuZXdzaXplICogc2l6ZW9mIChtYWxsb2NfaW5mbykpOwoKICAJ ICAvKiBEaWQgaXQgZmFpbD8gICovCiAgCSAgaWYgKG5ld2luZm8gPT0gTlVMTCkKQEAgLTcy MSw4ICs2NTksOCBAQAoKICAJICAvKiBJcyBpdCBiaWcgZW5vdWdoIHRvIHJlY29yZCBzdGF0 dXMgZm9yIGl0cyBvd24gc3BhY2U/CiAgCSAgICAgSWYgc28sIHdlIHdpbi4gICovCi0gCSAg aWYgKChfX21hbGxvY19zaXplX3QpIEJMT0NLICgoY2hhciAqKSBuZXdpbmZvCi0gCQkJCSAg ICAgICArIG5ld3NpemUgKiBzaXplb2YgKG1hbGxvY19pbmZvKSkKKyAJICBpZiAoKHNpemVf dCkgQkxPQ0sgKChjaGFyICopIG5ld2luZm8KKwkJCSAgICAgICsgbmV3c2l6ZSAqIHNpemVv ZiAobWFsbG9jX2luZm8pKQogIAkgICAgICA8IG5ld3NpemUpCiAgCSAgICBicmVhazsKCkBA IC03NTksMTMgKzY5NywxMiBAQAogfQoKIC8qIEFsbG9jYXRlIG1lbW9yeSBmcm9tIHRoZSBo ZWFwLiAgKi8KLV9fcHRyX3QKLV9tYWxsb2NfaW50ZXJuYWxfbm9sb2NrIChzaXplKQotICAg ICBfX21hbGxvY19zaXplX3Qgc2l6ZTsKK3ZvaWQgKgorX21hbGxvY19pbnRlcm5hbF9ub2xv Y2sgKHNpemVfdCBzaXplKQogewotICBfX3B0cl90IHJlc3VsdDsKLSAgX19tYWxsb2Nfc2l6 ZV90IGJsb2NrLCBibG9ja3MsIGxhc3RibG9ja3MsIHN0YXJ0OwotICByZWdpc3RlciBfX21h bGxvY19zaXplX3QgaTsKKyAgdm9pZCAqcmVzdWx0OworICBzaXplX3QgYmxvY2ssIGJsb2Nr cywgbGFzdGJsb2Nrcywgc3RhcnQ7CisgIHJlZ2lzdGVyIHNpemVfdCBpOwogICBzdHJ1Y3Qg bGlzdCAqbmV4dDsKCiAgIC8qIEFOU0kgQyBhbGxvd3MgYG1hbGxvYyAoMCknIHRvIGVpdGhl ciByZXR1cm4gTlVMTCwgb3IgdG8gcmV0dXJuIGEKQEAgLTc5MCw3ICs3MjcsNyBAQAogICAg IHsKICAgICAgIC8qIFNtYWxsIGFsbG9jYXRpb24gdG8gcmVjZWl2ZSBhIGZyYWdtZW50IG9m IGEgYmxvY2suCiAJIERldGVybWluZSB0aGUgbG9nYXJpdGhtIHRvIGJhc2UgdHdvIG9mIHRo ZSBmcmFnbWVudCBzaXplLiAqLwotICAgICAgcmVnaXN0ZXIgX19tYWxsb2Nfc2l6ZV90IGxv ZyA9IDE7CisgICAgICByZWdpc3RlciBzaXplX3QgbG9nID0gMTsKICAgICAgIC0tc2l6ZTsK ICAgICAgIHdoaWxlICgoc2l6ZSAvPSAyKSAhPSAwKQogCSsrbG9nOwpAQCAtODAzLDE1ICs3 NDAsMTQgQEAKIAkgIC8qIFRoZXJlIGFyZSBmcmVlIGZyYWdtZW50cyBvZiB0aGlzIHNpemUu CiAJICAgICBQb3AgYSBmcmFnbWVudCBvdXQgb2YgdGhlIGZyYWdtZW50IGxpc3QgYW5kIHJl dHVybiBpdC4KIAkgICAgIFVwZGF0ZSB0aGUgYmxvY2sncyBuZnJlZSBhbmQgZmlyc3QgY291 bnRlcnMuICovCi0JICByZXN1bHQgPSAoX19wdHJfdCkgbmV4dDsKKwkgIHJlc3VsdCA9IG5l eHQ7CiAJICBuZXh0LT5wcmV2LT5uZXh0ID0gbmV4dC0+bmV4dDsKIAkgIGlmIChuZXh0LT5u ZXh0ICE9IE5VTEwpCiAJICAgIG5leHQtPm5leHQtPnByZXYgPSBuZXh0LT5wcmV2OwogCSAg YmxvY2sgPSBCTE9DSyAocmVzdWx0KTsKIAkgIGlmICgtLV9oZWFwaW5mb1tibG9ja10uYnVz eS5pbmZvLmZyYWcubmZyZWUgIT0gMCkKLQkgICAgX2hlYXBpbmZvW2Jsb2NrXS5idXN5Lmlu Zm8uZnJhZy5maXJzdCA9ICh1bnNpZ25lZCBsb25nIGludCkKLQkgICAgICAoKHVuc2lnbmVk IGxvbmcgaW50KSAoKGNoYXIgKikgbmV4dC0+bmV4dCAtIChjaGFyICopIE5VTEwpCi0JICAg ICAgICUgQkxPQ0tTSVpFKSA+PiBsb2c7CisJICAgIF9oZWFwaW5mb1tibG9ja10uYnVzeS5p bmZvLmZyYWcuZmlyc3QgPQorCSAgICAgICh1aW50cHRyX3QpIG5leHQtPm5leHQgJSBCTE9D S1NJWkUgPj4gbG9nOwoKIAkgIC8qIFVwZGF0ZSB0aGUgc3RhdGlzdGljcy4gICovCiAJICAr K19jaHVua3NfdXNlZDsKQEAgLTg0Myw3ICs3NzksNyBAQAogCSAgbmV4dC0+cHJldiA9ICZf ZnJhZ2hlYWRbbG9nXTsKIAkgIF9mcmFnaGVhZFtsb2ddLm5leHQgPSBuZXh0OwoKLQkgIGZv ciAoaSA9IDI7IGkgPCAoX19tYWxsb2Nfc2l6ZV90KSAoQkxPQ0tTSVpFID4+IGxvZyk7ICsr aSkKKwkgIGZvciAoaSA9IDI7IGkgPCAoc2l6ZV90KSAoQkxPQ0tTSVpFID4+IGxvZyk7ICsr aSkKIAkgICAgewogCSAgICAgIG5leHQgPSAoc3RydWN0IGxpc3QgKikgKChjaGFyICopIHJl c3VsdCArIChpIDw8IGxvZykpOwogCSAgICAgIG5leHQtPm5leHQgPSBfZnJhZ2hlYWRbbG9n XS5uZXh0OwpAQCAtODc3LDcgKzgxMyw3IEBACiAJICBpZiAoYmxvY2sgPT0gc3RhcnQpCiAJ ICAgIHsKIAkgICAgICAvKiBOZWVkIHRvIGdldCBtb3JlIGZyb20gdGhlIHN5c3RlbS4gIEdl dCBhIGxpdHRsZSBleHRyYS4gICovCi0JICAgICAgX19tYWxsb2Nfc2l6ZV90IHdhbnRibG9j a3MgPSBibG9ja3MgKyBfX21hbGxvY19leHRyYV9ibG9ja3M7CisJICAgICAgc2l6ZV90IHdh bnRibG9ja3MgPSBibG9ja3MgKyBfX21hbGxvY19leHRyYV9ibG9ja3M7CiAJICAgICAgYmxv Y2sgPSBfaGVhcGluZm9bMF0uZnJlZS5wcmV2OwogCSAgICAgIGxhc3RibG9ja3MgPSBfaGVh cGluZm9bYmxvY2tdLmZyZWUuc2l6ZTsKIAkgICAgICAvKiBDaGVjayB0byBzZWUgaWYgdGhl IG5ldyBjb3JlIHdpbGwgYmUgY29udGlndW91cyB3aXRoIHRoZQpAQCAtOTU5LDExICs4OTUs MTAgQEAKICAgcmV0dXJuIHJlc3VsdDsKIH0KCi1fX3B0cl90Ci1fbWFsbG9jX2ludGVybmFs IChzaXplKQotICAgICBfX21hbGxvY19zaXplX3Qgc2l6ZTsKK3ZvaWQgKgorX21hbGxvY19p bnRlcm5hbCAoc2l6ZV90IHNpemUpCiB7Ci0gIF9fcHRyX3QgcmVzdWx0OworICB2b2lkICpy ZXN1bHQ7CgogICBMT0NLICgpOwogICByZXN1bHQgPSBfbWFsbG9jX2ludGVybmFsX25vbG9j ayAoc2l6ZSk7CkBAIC05NzIsMTEgKzkwNywxMCBAQAogICByZXR1cm4gcmVzdWx0OwogfQoK LV9fcHRyX3QKLW1hbGxvYyAoc2l6ZSkKLSAgICAgX19tYWxsb2Nfc2l6ZV90IHNpemU7Cit2 b2lkICoKK21hbGxvYyAoc2l6ZV90IHNpemUpCiB7Ci0gIF9fcHRyX3QgKCpob29rKSAoX19t YWxsb2Nfc2l6ZV90KTsKKyAgdm9pZCAqKCpob29rKSAoc2l6ZV90KTsKCiAgIGlmICghX19t YWxsb2NfaW5pdGlhbGl6ZWQgJiYgIV9fbWFsbG9jX2luaXRpYWxpemUgKCkpCiAgICAgcmV0 dXJuIE5VTEw7CkBAIC05OTgsMjQgKzkzMiwyNCBAQAogLyogT24gc29tZSBBTlNJIEMgc3lz dGVtcywgc29tZSBsaWJjIGZ1bmN0aW9ucyBjYWxsIF9tYWxsb2MsIF9mcmVlCiAgICBhbmQg X3JlYWxsb2MuICBNYWtlIHRoZW0gdXNlIHRoZSBHTlUgZnVuY3Rpb25zLiAgKi8KCi1fX3B0 cl90Ci1fbWFsbG9jIChzaXplKQotICAgICBfX21hbGxvY19zaXplX3Qgc2l6ZTsKK2V4dGVy biB2b2lkICpfbWFsbG9jIChzaXplX3QpOworZXh0ZXJuIHZvaWQgX2ZyZWUgKHZvaWQgKik7 CitleHRlcm4gdm9pZCAqX3JlYWxsb2MgKHZvaWQgKiwgc2l6ZV90KTsKKwordm9pZCAqCitf bWFsbG9jIChzaXplX3Qgc2l6ZSkKIHsKICAgcmV0dXJuIG1hbGxvYyAoc2l6ZSk7CiB9Cgog dm9pZAotX2ZyZWUgKHB0cikKLSAgICAgX19wdHJfdCBwdHI7CitfZnJlZSAodm9pZCAqcHRy KQogewogICBmcmVlIChwdHIpOwogfQoKLV9fcHRyX3QKLV9yZWFsbG9jIChwdHIsIHNpemUp Ci0gICAgIF9fcHRyX3QgcHRyOwotICAgICBfX21hbGxvY19zaXplX3Qgc2l6ZTsKK3ZvaWQg KgorX3JlYWxsb2MgKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCiB7CiAgIHJldHVybiByZWFs bG9jIChwdHIsIHNpemUpOwogfQpAQCAtMTA0MywxNCArOTc3LDkgQEAKICAgIFRoZSBhdXRo b3IgbWF5IGJlIHJlYWNoZWQgKEVtYWlsKSBhdCB0aGUgYWRkcmVzcyBtaWtlQGFpLm1pdC5l ZHUsCiAgICBvciAoVVMgbWFpbCkgYXMgTWlrZSBIYWVydGVsIGMvbyBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uICAqLwoKLSNpZm5kZWYJX01BTExPQ19JTlRFUk5BTAotI2RlZmluZSBf TUFMTE9DX0lOVEVSTkFMCi0jaW5jbHVkZSA8bWFsbG9jLmg+Ci0jZW5kaWYKLQoKIC8qIERl YnVnZ2luZyBob29rIGZvciBmcmVlLiAgKi8KLXZvaWQgKCpfX2ZyZWVfaG9vaykgUFAgKChf X3B0cl90IF9fcHRyKSk7Cit2b2lkICgqX19mcmVlX2hvb2spICh2b2lkICpfX3B0cik7Cgog LyogTGlzdCBvZiBibG9ja3MgYWxsb2NhdGVkIGJ5IG1lbWFsaWduLiAgKi8KIHN0cnVjdCBh bGlnbmxpc3QgKl9hbGlnbmVkX2Jsb2NrcyA9IE5VTEw7CkBAIC0xMDU4LDE1ICs5ODcsMTQg QEAKIC8qIFJldHVybiBtZW1vcnkgdG8gdGhlIGhlYXAuCiAgICBMaWtlIGBfZnJlZV9pbnRl cm5hbCcgYnV0IGRvbid0IGxvY2sgbXV0ZXguICAqLwogdm9pZAotX2ZyZWVfaW50ZXJuYWxf bm9sb2NrIChwdHIpCi0gICAgIF9fcHRyX3QgcHRyOworX2ZyZWVfaW50ZXJuYWxfbm9sb2Nr ICh2b2lkICpwdHIpCiB7CiAgIGludCB0eXBlOwotICBfX21hbGxvY19zaXplX3QgYmxvY2ss IGJsb2NrczsKLSAgcmVnaXN0ZXIgX19tYWxsb2Nfc2l6ZV90IGk7CisgIHNpemVfdCBibG9j aywgYmxvY2tzOworICByZWdpc3RlciBzaXplX3QgaTsKICAgc3RydWN0IGxpc3QgKnByZXYs ICpuZXh0OwotICBfX3B0cl90IGN1cmJyazsKLSAgY29uc3QgX19tYWxsb2Nfc2l6ZV90IGxl c3Njb3JlX3RocmVzaG9sZAorICB2b2lkICpjdXJicms7CisgIGNvbnN0IHNpemVfdCBsZXNz Y29yZV90aHJlc2hvbGQKICAgICAvKiBUaHJlc2hvbGQgb2YgZnJlZSBzcGFjZSBhdCB3aGlj aCB3ZSB3aWxsIHJldHVybiBzb21lIHRvIHRoZSBzeXN0ZW0uICAqLwogICAgID0gRklOQUxf RlJFRV9CTE9DS1MgKyAyICogX19tYWxsb2NfZXh0cmFfYmxvY2tzOwoKQEAgLTEwNzYsNyAr MTAwNCw3IEBACiAgICAgcmV0dXJuOwoKICNpZmRlZiBDWUdXSU4KLSAgaWYgKHB0ciA8IF9o ZWFwYmFzZSkKKyAgaWYgKChjaGFyICopIHB0ciA8IF9oZWFwYmFzZSkKICAgICAvKiBXZSdy ZSBiZWluZyBhc2tlZCB0byBmcmVlIHNvbWV0aGluZyBpbiB0aGUgc3RhdGljIGhlYXAuICov CiAgICAgcmV0dXJuOwogI2VuZGlmCkBAIC0xMTYyLDEyICsxMDkwLDEyIEBACiAJICAgICBJ dCdzIHBvc3NpYmxlIHRoYXQgbW92aW5nIF9oZWFwaW5mbyB3aWxsIGFsbG93IHVzIHRvCiAJ ICAgICByZXR1cm4gc29tZSBzcGFjZSB0byB0aGUgc3lzdGVtLiAgKi8KCi0gCSAgX19tYWxs b2Nfc2l6ZV90IGluZm9fYmxvY2sgPSBCTE9DSyAoX2hlYXBpbmZvKTsKLSAJICBfX21hbGxv Y19zaXplX3QgaW5mb19ibG9ja3MgPSBfaGVhcGluZm9baW5mb19ibG9ja10uYnVzeS5pbmZv LnNpemU7Ci0gCSAgX19tYWxsb2Nfc2l6ZV90IHByZXZfYmxvY2sgPSBfaGVhcGluZm9bYmxv Y2tdLmZyZWUucHJldjsKLSAJICBfX21hbGxvY19zaXplX3QgcHJldl9ibG9ja3MgPSBfaGVh cGluZm9bcHJldl9ibG9ja10uZnJlZS5zaXplOwotIAkgIF9fbWFsbG9jX3NpemVfdCBuZXh0 X2Jsb2NrID0gX2hlYXBpbmZvW2Jsb2NrXS5mcmVlLm5leHQ7Ci0gCSAgX19tYWxsb2Nfc2l6 ZV90IG5leHRfYmxvY2tzID0gX2hlYXBpbmZvW25leHRfYmxvY2tdLmZyZWUuc2l6ZTsKKyAJ ICBzaXplX3QgaW5mb19ibG9jayA9IEJMT0NLIChfaGVhcGluZm8pOworIAkgIHNpemVfdCBp bmZvX2Jsb2NrcyA9IF9oZWFwaW5mb1tpbmZvX2Jsb2NrXS5idXN5LmluZm8uc2l6ZTsKKyAJ ICBzaXplX3QgcHJldl9ibG9jayA9IF9oZWFwaW5mb1tibG9ja10uZnJlZS5wcmV2OworIAkg IHNpemVfdCBwcmV2X2Jsb2NrcyA9IF9oZWFwaW5mb1twcmV2X2Jsb2NrXS5mcmVlLnNpemU7 CisgCSAgc2l6ZV90IG5leHRfYmxvY2sgPSBfaGVhcGluZm9bYmxvY2tdLmZyZWUubmV4dDsK KyAJICBzaXplX3QgbmV4dF9ibG9ja3MgPSBfaGVhcGluZm9bbmV4dF9ibG9ja10uZnJlZS5z aXplOwoKIAkgIGlmICgvKiBXaW4gaWYgdGhpcyBibG9jayBiZWluZyBmcmVlZCBpcyBsYXN0 IGluIGNvcmUsIHRoZSBpbmZvIHRhYmxlCiAJCSBpcyBqdXN0IGJlZm9yZSBpdCwgdGhlIHBy ZXZpb3VzIGZyZWUgYmxvY2sgaXMganVzdCBiZWZvcmUgdGhlCkBAIC0xMTkwLDcgKzExMTgs NyBAQAogCSAgICAgICkKIAkgICAgewogCSAgICAgIG1hbGxvY19pbmZvICpuZXdpbmZvOwot CSAgICAgIF9fbWFsbG9jX3NpemVfdCBvbGRsaW1pdCA9IF9oZWFwbGltaXQ7CisJICAgICAg c2l6ZV90IG9sZGxpbWl0ID0gX2hlYXBsaW1pdDsKCiAJICAgICAgLyogRnJlZSB0aGUgb2xk IGluZm8gdGFibGUsIGNsZWFyaW5nIF9oZWFwbGltaXQgdG8gYXZvaWQKIAkJIHJlY3Vyc2lv biBpbnRvIHRoaXMgY29kZS4gIFdlIGRvbid0IHdhbnQgdG8gcmV0dXJuIHRoZQpAQCAtMTIw NSw4ICsxMTMzLDcgQEAKIAkgICAgICBfaGVhcGluZGV4ID0gMDsKCiAJICAgICAgLyogQWxs b2NhdGUgbmV3IHNwYWNlIGZvciB0aGUgaW5mbyB0YWJsZSBhbmQgbW92ZSBpdHMgZGF0YS4g ICovCi0JICAgICAgbmV3aW5mbyA9IChtYWxsb2NfaW5mbyAqKSBfbWFsbG9jX2ludGVybmFs X25vbG9jayAoaW5mb19ibG9ja3MKLQkJCQkJCQkJICogQkxPQ0tTSVpFKTsKKwkgICAgICBu ZXdpbmZvID0gX21hbGxvY19pbnRlcm5hbF9ub2xvY2sgKGluZm9fYmxvY2tzICogQkxPQ0tT SVpFKTsKIAkgICAgICBQUk9URUNUX01BTExPQ19TVEFURSAoMCk7CiAJICAgICAgbWVtbW92 ZSAobmV3aW5mbywgX2hlYXBpbmZvLCBpbmZvX2Jsb2NrcyAqIEJMT0NLU0laRSk7CiAJICAg ICAgX2hlYXBpbmZvID0gbmV3aW5mbzsKQEAgLTEyMjIsNyArMTE0OSw3IEBACiAJICAvKiBO b3cgc2VlIGlmIHdlIGNhbiByZXR1cm4gc3R1ZmYgdG8gdGhlIHN5c3RlbS4gICovCiAJICBp ZiAoYmxvY2sgKyBibG9ja3MgPT0gX2hlYXBsaW1pdCAmJiBibG9ja3MgPj0gbGVzc2NvcmVf dGhyZXNob2xkKQogCSAgICB7Ci0JICAgICAgcmVnaXN0ZXIgX19tYWxsb2Nfc2l6ZV90IGJ5 dGVzID0gYmxvY2tzICogQkxPQ0tTSVpFOworCSAgICAgIHJlZ2lzdGVyIHNpemVfdCBieXRl cyA9IGJsb2NrcyAqIEJMT0NLU0laRTsKIAkgICAgICBfaGVhcGxpbWl0IC09IGJsb2NrczsK IAkgICAgICAoKl9fbW9yZWNvcmUpICgtYnl0ZXMpOwogCSAgICAgIF9oZWFwaW5mb1tfaGVh cGluZm9bYmxvY2tdLmZyZWUucHJldl0uZnJlZS5uZXh0CkBAIC0xMjU1LDcgKzExODIsNyBA QAogCSAgLyogSWYgYWxsIGZyYWdtZW50cyBvZiB0aGlzIGJsb2NrIGFyZSBmcmVlLCByZW1v dmUgdGhlbQogCSAgICAgZnJvbSB0aGUgZnJhZ21lbnQgbGlzdCBhbmQgZnJlZSB0aGUgd2hv bGUgYmxvY2suICAqLwogCSAgbmV4dCA9IHByZXY7Ci0JICBmb3IgKGkgPSAxOyBpIDwgKF9f bWFsbG9jX3NpemVfdCkgKEJMT0NLU0laRSA+PiB0eXBlKTsgKytpKQorCSAgZm9yIChpID0g MTsgaSA8IChzaXplX3QpIChCTE9DS1NJWkUgPj4gdHlwZSk7ICsraSkKIAkgICAgbmV4dCA9 IG5leHQtPm5leHQ7CiAJICBwcmV2LT5wcmV2LT5uZXh0ID0gbmV4dDsKIAkgIGlmIChuZXh0 ICE9IE5VTEwpCkBAIC0xMjgwLDcgKzEyMDcsNyBAQAogCSAgLyogSWYgc29tZSBmcmFnbWVu dHMgb2YgdGhpcyBibG9jayBhcmUgZnJlZSwgbGluayB0aGlzCiAJICAgICBmcmFnbWVudCBp bnRvIHRoZSBmcmFnbWVudCBsaXN0IGFmdGVyIHRoZSBmaXJzdCBmcmVlCiAJICAgICBmcmFn bWVudCBvZiB0aGlzIGJsb2NrLiAqLwotCSAgbmV4dCA9IChzdHJ1Y3QgbGlzdCAqKSBwdHI7 CisJICBuZXh0ID0gcHRyOwogCSAgbmV4dC0+bmV4dCA9IHByZXYtPm5leHQ7CiAJICBuZXh0 LT5wcmV2ID0gcHJldjsKIAkgIHByZXYtPm5leHQgPSBuZXh0OwpAQCAtMTI5MywxMSArMTIy MCwxMCBAQAogCSAgLyogTm8gZnJhZ21lbnRzIG9mIHRoaXMgYmxvY2sgYXJlIGZyZWUsIHNv IGxpbmsgdGhpcwogCSAgICAgZnJhZ21lbnQgaW50byB0aGUgZnJhZ21lbnQgbGlzdCBhbmQg YW5ub3VuY2UgdGhhdAogCSAgICAgaXQgaXMgdGhlIGZpcnN0IGZyZWUgZnJhZ21lbnQgb2Yg dGhpcyBibG9jay4gKi8KLQkgIHByZXYgPSAoc3RydWN0IGxpc3QgKikgcHRyOworCSAgcHJl diA9IHB0cjsKIAkgIF9oZWFwaW5mb1tibG9ja10uYnVzeS5pbmZvLmZyYWcubmZyZWUgPSAx OwotCSAgX2hlYXBpbmZvW2Jsb2NrXS5idXN5LmluZm8uZnJhZy5maXJzdCA9ICh1bnNpZ25l ZCBsb25nIGludCkKLQkgICAgKCh1bnNpZ25lZCBsb25nIGludCkgKChjaGFyICopIHB0ciAt IChjaGFyICopIE5VTEwpCi0JICAgICAlIEJMT0NLU0laRSA+PiB0eXBlKTsKKwkgIF9oZWFw aW5mb1tibG9ja10uYnVzeS5pbmZvLmZyYWcuZmlyc3QgPQorCSAgICAodWludHB0cl90KSBw dHIgJSBCTE9DS1NJWkUgPj4gdHlwZTsKIAkgIHByZXYtPm5leHQgPSBfZnJhZ2hlYWRbdHlw ZV0ubmV4dDsKIAkgIHByZXYtPnByZXYgPSAmX2ZyYWdoZWFkW3R5cGVdOwogCSAgcHJldi0+ cHJldi0+bmV4dCA9IHByZXY7CkBAIC0xMzEzLDggKzEyMzksNyBAQAogLyogUmV0dXJuIG1l bW9yeSB0byB0aGUgaGVhcC4KICAgIExpa2UgYGZyZWUnIGJ1dCBkb24ndCBjYWxsIGEgX19m cmVlX2hvb2sgaWYgdGhlcmUgaXMgb25lLiAgKi8KIHZvaWQKLV9mcmVlX2ludGVybmFsIChw dHIpCi0gICAgIF9fcHRyX3QgcHRyOworX2ZyZWVfaW50ZXJuYWwgKHZvaWQgKnB0cikKIHsK ICAgTE9DSyAoKTsKICAgX2ZyZWVfaW50ZXJuYWxfbm9sb2NrIChwdHIpOwpAQCAtMTMyNCwx MCArMTI0OSw5IEBACiAvKiBSZXR1cm4gbWVtb3J5IHRvIHRoZSBoZWFwLiAgKi8KCiB2b2lk Ci1mcmVlIChwdHIpCi0gICAgIF9fcHRyX3QgcHRyOworZnJlZSAodm9pZCAqcHRyKQogewot ICB2b2lkICgqaG9vaykgKF9fcHRyX3QpID0gX19mcmVlX2hvb2s7CisgIHZvaWQgKCpob29r KSAodm9pZCAqKSA9IF9fZnJlZV9ob29rOwoKICAgaWYgKGhvb2sgIT0gTlVMTCkKICAgICAo Kmhvb2spIChwdHIpOwpAQCAtMTM0MCw4ICsxMjY0LDcgQEAKIHdlYWtfYWxpYXMgKGZyZWUs IGNmcmVlKQogI2Vsc2UKIHZvaWQKLWNmcmVlIChwdHIpCi0gICAgIF9fcHRyX3QgcHRyOwor Y2ZyZWUgKHZvaWQgKnB0cikKIHsKICAgZnJlZSAocHRyKTsKIH0KQEAgLTEzNjgsMzIgKzEy OTEsMjQgQEAKICAgIFRoZSBhdXRob3IgbWF5IGJlIHJlYWNoZWQgKEVtYWlsKSBhdCB0aGUg YWRkcmVzcyBtaWtlQGFpLm1pdC5lZHUsCiAgICBvciAoVVMgbWFpbCkgYXMgTWlrZSBIYWVy dGVsIGMvbyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICAqLwoKLSNpZm5kZWYJX01BTExP Q19JTlRFUk5BTAotI2RlZmluZSBfTUFMTE9DX0lOVEVSTkFMCi0jaW5jbHVkZSA8bWFsbG9j Lmg+Ci0jZW5kaWYKLQotCiAjZGVmaW5lIG1pbihBLCBCKSAoKEEpIDwgKEIpID8gKEEpIDog KEIpKQoKIC8qIE9uIEN5Z3dpbiB0aGUgZHVtcGVkIGVtYWNzIG1heSB0cnkgdG8gcmVhbGxv YyBzdG9yYWdlIGFsbG9jYXRlZCBpbgogICAgdGhlIHN0YXRpYyBoZWFwLiAgV2UganVzdCBt YWxsb2Mgc3BhY2UgaW4gdGhlIG5ldyBoZWFwIGFuZCBjb3B5IHRoZQogICAgZGF0YS4gICov CiAjaWZkZWYgQ1lHV0lOCi1fX3B0cl90Ci1zcGVjaWFsX3JlYWxsb2MgKHB0ciwgc2l6ZSkK LSAgICAgX19wdHJfdCBwdHI7Ci0gICAgIF9fbWFsbG9jX3NpemVfdCBzaXplOwordm9pZCAq CitzcGVjaWFsX3JlYWxsb2MgKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCiB7Ci0gIF9fcHRy X3QgcmVzdWx0OworICB2b2lkICpyZXN1bHQ7CiAgIGludCB0eXBlOwotICBfX21hbGxvY19z aXplX3QgYmxvY2ssIG9sZHNpemU7CisgIHNpemVfdCBibG9jaywgb2xkc2l6ZTsKCiAgIGJs b2NrID0gKChjaGFyICopIHB0ciAtIGJzc19zYnJrX2hlYXBiYXNlKSAvIEJMT0NLU0laRSAr IDE7CiAgIHR5cGUgPSBic3Nfc2Jya19oZWFwaW5mb1tibG9ja10uYnVzeS50eXBlOwogICBv bGRzaXplID0KICAgICB0eXBlID09IDAgPyBic3Nfc2Jya19oZWFwaW5mb1tibG9ja10uYnVz eS5pbmZvLnNpemUgKiBCTE9DS1NJWkUKLSAgICA6IChfX21hbGxvY19zaXplX3QpIDEgPDwg dHlwZTsKKyAgICA6IChzaXplX3QpIDEgPDwgdHlwZTsKICAgcmVzdWx0ID0gX21hbGxvY19p bnRlcm5hbF9ub2xvY2sgKHNpemUpOwogICBpZiAocmVzdWx0ICE9IE5VTEwpCiAgICAgbWVt Y3B5IChyZXN1bHQsIHB0ciwgbWluIChvbGRzaXplLCBzaXplKSk7CkBAIC0xNDAyLDcgKzEz MTcsNyBAQAogI2VuZGlmCgogLyogRGVidWdnaW5nIGhvb2sgZm9yIHJlYWxsb2MuICAqLwot X19wdHJfdCAoKl9fcmVhbGxvY19ob29rKSBQUCAoKF9fcHRyX3QgX19wdHIsIF9fbWFsbG9j X3NpemVfdCBfX3NpemUpKTsKK3ZvaWQgKigqX19yZWFsbG9jX2hvb2spICh2b2lkICpwdHIs IHNpemVfdCBzaXplKTsKCiAvKiBSZXNpemUgdGhlIGdpdmVuIHJlZ2lvbiB0byB0aGUgbmV3 IHNpemUsIHJldHVybmluZyBhIHBvaW50ZXIKICAgIHRvIHRoZSAocG9zc2libHkgbW92ZWQp IHJlZ2lvbi4gIFRoaXMgaXMgb3B0aW1pemVkIGZvciBzcGVlZDsKQEAgLTE0MTAsMTQgKzEz MjUsMTIgQEAKICAgIGFjaGlldmVkIGJ5IHVuY29uZGl0aW9uYWxseSBhbGxvY2F0aW5nIGFu ZCBjb3B5aW5nIHRvIGEKICAgIG5ldyByZWdpb24uICBUaGlzIG1vZHVsZSBoYXMgaW5jZXN0 dW91cyBrbm93bGVkZ2Ugb2YgdGhlCiAgICBpbnRlcm5hbHMgb2YgYm90aCBmcmVlIGFuZCBt YWxsb2MuICovCi1fX3B0cl90Ci1fcmVhbGxvY19pbnRlcm5hbF9ub2xvY2sgKHB0ciwgc2l6 ZSkKLSAgICAgX19wdHJfdCBwdHI7Ci0gICAgIF9fbWFsbG9jX3NpemVfdCBzaXplOwordm9p ZCAqCitfcmVhbGxvY19pbnRlcm5hbF9ub2xvY2sgKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUp CiB7Ci0gIF9fcHRyX3QgcmVzdWx0OworICB2b2lkICpyZXN1bHQ7CiAgIGludCB0eXBlOwot ICBfX21hbGxvY19zaXplX3QgYmxvY2ssIGJsb2Nrcywgb2xkbGltaXQ7CisgIHNpemVfdCBi bG9jaywgYmxvY2tzLCBvbGRsaW1pdDsKCiAgIGlmIChzaXplID09IDApCiAgICAgewpAQCAt MTQyOCw3ICsxMzQxLDcgQEAKICAgICByZXR1cm4gX21hbGxvY19pbnRlcm5hbF9ub2xvY2sg KHNpemUpOwoKICNpZmRlZiBDWUdXSU4KLSAgaWYgKHB0ciA8IF9oZWFwYmFzZSkKKyAgaWYg KChjaGFyICopIHB0ciA8IF9oZWFwYmFzZSkKICAgICAvKiBwdHIgcG9pbnRzIGludG8gdGhl IHN0YXRpYyBoZWFwICovCiAgICAgcmV0dXJuIHNwZWNpYWxfcmVhbGxvYyAocHRyLCBzaXpl KTsKICNlbmRpZgpAQCAtMTQ5Nyw3ICsxNDEwLDcgQEAKIAkgICAgICAgICh2b2lkKSBfbWFs bG9jX2ludGVybmFsX25vbG9jayAoYmxvY2tzICogQkxPQ0tTSVpFKTsKIAkgICAgICBlbHNl CiAJCXsKLQkJICBfX3B0cl90IHByZXZpb3VzCisJCSAgdm9pZCAqcHJldmlvdXMKIAkJICAg ID0gX21hbGxvY19pbnRlcm5hbF9ub2xvY2sgKChibG9jayAtIF9oZWFwaW5kZXgpICogQkxP Q0tTSVpFKTsKIAkJICAodm9pZCkgX21hbGxvY19pbnRlcm5hbF9ub2xvY2sgKGJsb2NrcyAq IEJMT0NLU0laRSk7CiAJCSAgX2ZyZWVfaW50ZXJuYWxfbm9sb2NrIChwcmV2aW91cyk7CkBA IC0xNTEyLDggKzE0MjUsOCBAQAogICAgIGRlZmF1bHQ6CiAgICAgICAvKiBPbGQgc2l6ZSBp cyBhIGZyYWdtZW50OyB0eXBlIGlzIGxvZ2FyaXRobQogCSB0byBiYXNlIHR3byBvZiB0aGUg ZnJhZ21lbnQgc2l6ZS4gICovCi0gICAgICBpZiAoc2l6ZSA+IChfX21hbGxvY19zaXplX3Qp ICgxIDw8ICh0eXBlIC0gMSkpICYmCi0JICBzaXplIDw9IChfX21hbGxvY19zaXplX3QpICgx IDw8IHR5cGUpKQorICAgICAgaWYgKHNpemUgPiAoc2l6ZV90KSAoMSA8PCAodHlwZSAtIDEp KSAmJgorCSAgc2l6ZSA8PSAoc2l6ZV90KSAoMSA8PCB0eXBlKSkKIAkvKiBUaGUgbmV3IHNp emUgaXMgdGhlIHNhbWUga2luZCBvZiBmcmFnbWVudC4gICovCiAJcmVzdWx0ID0gcHRyOwog ICAgICAgZWxzZQpAQCAtMTUyMyw3ICsxNDM2LDcgQEAKIAkgIHJlc3VsdCA9IF9tYWxsb2Nf aW50ZXJuYWxfbm9sb2NrIChzaXplKTsKIAkgIGlmIChyZXN1bHQgPT0gTlVMTCkKIAkgICAg Z290byBvdXQ7Ci0JICBtZW1jcHkgKHJlc3VsdCwgcHRyLCBtaW4gKHNpemUsIChfX21hbGxv Y19zaXplX3QpIDEgPDwgdHlwZSkpOworCSAgbWVtY3B5IChyZXN1bHQsIHB0ciwgbWluIChz aXplLCAoc2l6ZV90KSAxIDw8IHR5cGUpKTsKIAkgIF9mcmVlX2ludGVybmFsX25vbG9jayAo cHRyKTsKIAl9CiAgICAgICBicmVhazsKQEAgLTE1MzQsMTIgKzE0NDcsMTAgQEAKICAgcmV0 dXJuIHJlc3VsdDsKIH0KCi1fX3B0cl90Ci1fcmVhbGxvY19pbnRlcm5hbCAocHRyLCBzaXpl KQotICAgICBfX3B0cl90IHB0cjsKLSAgICAgX19tYWxsb2Nfc2l6ZV90IHNpemU7Cit2b2lk ICoKK19yZWFsbG9jX2ludGVybmFsICh2b2lkICpwdHIsIHNpemVfdCBzaXplKQogewotICBf X3B0cl90IHJlc3VsdDsKKyAgdm9pZCAqcmVzdWx0OwoKICAgTE9DSyAoKTsKICAgcmVzdWx0 ID0gX3JlYWxsb2NfaW50ZXJuYWxfbm9sb2NrIChwdHIsIHNpemUpOwpAQCAtMTU0OCwxMiAr MTQ1OSwxMCBAQAogICByZXR1cm4gcmVzdWx0OwogfQoKLV9fcHRyX3QKLXJlYWxsb2MgKHB0 ciwgc2l6ZSkKLSAgICAgX19wdHJfdCBwdHI7Ci0gICAgIF9fbWFsbG9jX3NpemVfdCBzaXpl Owordm9pZCAqCityZWFsbG9jICh2b2lkICpwdHIsIHNpemVfdCBzaXplKQogewotICBfX3B0 cl90ICgqaG9vaykgKF9fcHRyX3QsIF9fbWFsbG9jX3NpemVfdCk7CisgIHZvaWQgKigqaG9v aykgKHZvaWQgKiwgc2l6ZV90KTsKCiAgIGlmICghX19tYWxsb2NfaW5pdGlhbGl6ZWQgJiYg IV9fbWFsbG9jX2luaXRpYWxpemUgKCkpCiAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNTgxLDE5 ICsxNDkwLDEyIEBACiAgICBUaGUgYXV0aG9yIG1heSBiZSByZWFjaGVkIChFbWFpbCkgYXQg dGhlIGFkZHJlc3MgbWlrZUBhaS5taXQuZWR1LAogICAgb3IgKFVTIG1haWwpIGFzIE1pa2Ug SGFlcnRlbCBjL28gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgKi8KCi0jaWZuZGVmCV9N QUxMT0NfSU5URVJOQUwKLSNkZWZpbmUJX01BTExPQ19JTlRFUk5BTAotI2luY2x1ZGUgPG1h bGxvYy5oPgotI2VuZGlmCi0KIC8qIEFsbG9jYXRlIGFuIGFycmF5IG9mIE5NRU1CIGVsZW1l bnRzIGVhY2ggU0laRSBieXRlcyBsb25nLgogICAgVGhlIGVudGlyZSBhcnJheSBpcyBpbml0 aWFsaXplZCB0byB6ZXJvcy4gICovCi1fX3B0cl90Ci1jYWxsb2MgKG5tZW1iLCBzaXplKQot ICAgICByZWdpc3RlciBfX21hbGxvY19zaXplX3Qgbm1lbWI7Ci0gICAgIHJlZ2lzdGVyIF9f bWFsbG9jX3NpemVfdCBzaXplOwordm9pZCAqCitjYWxsb2MgKHJlZ2lzdGVyIHNpemVfdCBu bWVtYiwgcmVnaXN0ZXIgc2l6ZV90IHNpemUpCiB7Ci0gIHJlZ2lzdGVyIF9fcHRyX3QgcmVz dWx0ID0gbWFsbG9jIChubWVtYiAqIHNpemUpOworICByZWdpc3RlciB2b2lkICpyZXN1bHQg PSBtYWxsb2MgKG5tZW1iICogc2l6ZSk7CgogICBpZiAocmVzdWx0ICE9IE5VTEwpCiAgICAg KHZvaWQpIG1lbXNldCAocmVzdWx0LCAwLCBubWVtYiAqIHNpemUpOwpAQCAtMTYxOCwxMSAr MTUyMCw2IEBACiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBT dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCiBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwoK LSNpZm5kZWYJX01BTExPQ19JTlRFUk5BTAotI2RlZmluZQlfTUFMTE9DX0lOVEVSTkFMCi0j aW5jbHVkZSA8bWFsbG9jLmg+Ci0jZW5kaWYKLQogLyogdUNsaWJjIGRlZmluZXMgX19HTlVf TElCUkFSWV9fLCBidXQgaXQgaXMgbm90IGNvbXBsZXRlbHkKICAgIGNvbXBhdGlibGUuICAq LwogI2lmICFkZWZpbmVkIChfX0dOVV9MSUJSQVJZX18pIHx8IGRlZmluZWQgKF9fVUNMSUJD X18pCkBAIC0xNjMxLDggKzE1MjgsNyBAQAogLyogSXQgaXMgYmVzdCBub3QgdG8gZGVjbGFy ZSB0aGlzIGFuZCBjYXN0IGl0cyByZXN1bHQgb24gZm9yZWlnbiBvcGVyYXRpbmcKICAgIHN5 c3RlbXMgd2l0aCBwb3RlbnRpYWxseSBob3N0aWxlIGluY2x1ZGUgZmlsZXMuICAqLwoKLSNp bmNsdWRlIDxzdGRkZWYuaD4KLWV4dGVybiBfX3B0cl90IF9fc2JyayBQUCAoKHB0cmRpZmZf dCBpbmNyZW1lbnQpKTsKK2V4dGVybiB2b2lkICpfX3NicmsgKHB0cmRpZmZfdCBpbmNyZW1l bnQpOwogI2VuZGlmIC8qIF9fR05VX0xJQlJBUllfXyAmJiAhIGRlZmluZWQgKF9fVUNMSUJD X18pICovCgogI2lmbmRlZiBOVUxMCkBAIC0xNjQyLDE5ICsxNTM4LDE4IEBACiAvKiBBbGxv Y2F0ZSBJTkNSRU1FTlQgbW9yZSBieXRlcyBvZiBkYXRhIHNwYWNlLAogICAgYW5kIHJldHVy biB0aGUgc3RhcnQgb2YgZGF0YSBzcGFjZSwgb3IgTlVMTCBvbiBlcnJvcnMuCiAgICBJZiBJ TkNSRU1FTlQgaXMgbmVnYXRpdmUsIHNocmluayBkYXRhIHNwYWNlLiAgKi8KLV9fcHRyX3QK LV9fZGVmYXVsdF9tb3JlY29yZSAoaW5jcmVtZW50KQotICAgICBfX21hbGxvY19wdHJkaWZm X3QgaW5jcmVtZW50Owordm9pZCAqCitfX2RlZmF1bHRfbW9yZWNvcmUgKHB0cmRpZmZfdCBp bmNyZW1lbnQpCiB7Ci0gIF9fcHRyX3QgcmVzdWx0OworICB2b2lkICpyZXN1bHQ7CiAjaWYg ZGVmaW5lZCAoQ1lHV0lOKQogICBpZiAoIWJzc19zYnJrX2RpZF91bmV4ZWMpCiAgICAgewog ICAgICAgcmV0dXJuIGJzc19zYnJrIChpbmNyZW1lbnQpOwogICAgIH0KICNlbmRpZgotICBy ZXN1bHQgPSAoX19wdHJfdCkgX19zYnJrIChpbmNyZW1lbnQpOwotICBpZiAocmVzdWx0ID09 IChfX3B0cl90KSAtMSkKKyAgcmVzdWx0ID0gKHZvaWQgKikgX19zYnJrIChpbmNyZW1lbnQp OworICBpZiAocmVzdWx0ID09ICh2b2lkICopIC0xKQogICAgIHJldHVybiBOVUxMOwogICBy ZXR1cm4gcmVzdWx0OwogfQpAQCAtMTY3NSwyMiArMTU3MCwxNCBAQAogbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl ZXQsCiBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwoKLSNp Zm5kZWYJX01BTExPQ19JTlRFUk5BTAotI2RlZmluZSBfTUFMTE9DX0lOVEVSTkFMCi0jaW5j bHVkZSA8bWFsbG9jLmg+Ci0jZW5kaWYKLQotX19wdHJfdCAoKl9fbWVtYWxpZ25faG9vaykg UFAgKChfX21hbGxvY19zaXplX3QgX19zaXplLAotCQkJCV9fbWFsbG9jX3NpemVfdCBfX2Fs aWdubWVudCkpOwotCi1fX3B0cl90Ci1tZW1hbGlnbiAoYWxpZ25tZW50LCBzaXplKQotICAg ICBfX21hbGxvY19zaXplX3QgYWxpZ25tZW50OwotICAgICBfX21hbGxvY19zaXplX3Qgc2l6 ZTsKK3ZvaWQgKigqX19tZW1hbGlnbl9ob29rKSAoc2l6ZV90IHNpemUsIHNpemVfdCBhbGln bm1lbnQpOworCit2b2lkICoKK21lbWFsaWduIChzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qg c2l6ZSkKIHsKLSAgX19wdHJfdCByZXN1bHQ7Ci0gIHVuc2lnbmVkIGxvbmcgaW50IGFkaiwg bGFzdGFkajsKLSAgX19wdHJfdCAoKmhvb2spIChfX21hbGxvY19zaXplX3QsIF9fbWFsbG9j X3NpemVfdCkgPSBfX21lbWFsaWduX2hvb2s7CisgIHZvaWQgKnJlc3VsdDsKKyAgc2l6ZV90 IGFkaiwgbGFzdGFkajsKKyAgdm9pZCAqKCpob29rKSAoc2l6ZV90LCBzaXplX3QpID0gX19t ZW1hbGlnbl9ob29rOwoKICAgaWYgKGhvb2spCiAgICAgcmV0dXJuICgqaG9vaykgKGFsaWdu bWVudCwgc2l6ZSk7CkBAIC0xNzAzLDcgKzE1OTAsNyBAQAoKICAgLyogRmlndXJlIG91dCBo b3cgbXVjaCB3ZSB3aWxsIG5lZWQgdG8gcGFkIHRoaXMgcGFydGljdWxhciBibG9jawogICAg ICB0byBhY2hpZXZlIHRoZSByZXF1aXJlZCBhbGlnbm1lbnQuICAqLwotICBhZGogPSAodW5z aWduZWQgbG9uZyBpbnQpICgoY2hhciAqKSByZXN1bHQgLSAoY2hhciAqKSBOVUxMKSAlIGFs aWdubWVudDsKKyAgYWRqID0gKHVpbnRwdHJfdCkgcmVzdWx0ICUgYWxpZ25tZW50OwoKICAg ZG8KICAgICB7CkBAIC0xNzE0LDcgKzE2MDEsNyBAQAogCXJldHVybiBOVUxMOwoKICAgICAg IGxhc3RhZGogPSBhZGo7Ci0gICAgICBhZGogPSAodW5zaWduZWQgbG9uZyBpbnQpICgoY2hh ciAqKSByZXN1bHQgLSAoY2hhciAqKSBOVUxMKSAlIGFsaWdubWVudDsKKyAgICAgIGFkaiA9 ICh1aW50cHRyX3QpIHJlc3VsdCAlIGFsaWdubWVudDsKICAgICAgIC8qIEl0J3MgY29uY2Vp dmFibGUgd2UgbWlnaHQgaGF2ZSBiZWVuIHNvIHVubHVja3kgYXMgdG8gZ2V0IGEKIAkgZGlm ZmVyZW50IGJsb2NrIHdpdGggd2Vha2VyIGFsaWdubWVudC4gIElmIHNvLCB0aGlzIGJsb2Nr IGlzIHRvbwogCSBzaG9ydCB0byBjb250YWluIFNJWkUgYWZ0ZXIgYWxpZ25tZW50IGNvcnJl Y3Rpb24uICBTbyB3ZSBtdXN0CkBAIC0xNzM1LDcgKzE2MjIsNyBAQAogCSAgYnJlYWs7CiAg ICAgICBpZiAobCA9PSBOVUxMKQogCXsKLQkgIGwgPSAoc3RydWN0IGFsaWdubGlzdCAqKSBt YWxsb2MgKHNpemVvZiAoc3RydWN0IGFsaWdubGlzdCkpOworCSAgbCA9IG1hbGxvYyAoc2l6 ZW9mIChzdHJ1Y3QgYWxpZ25saXN0KSk7CiAJICBpZiAobCAhPSBOVUxMKQogCSAgICB7CiAJ ICAgICAgbC0+bmV4dCA9IF9hbGlnbmVkX2Jsb2NrczsKQEAgLTE3NjcsMTUgKzE2NTQsMTIg QEAKICNlbmRpZgoKIGludAotcG9zaXhfbWVtYWxpZ24gKG1lbXB0ciwgYWxpZ25tZW50LCBz aXplKQotICAgICBfX3B0cl90ICptZW1wdHI7Ci0gICAgIF9fbWFsbG9jX3NpemVfdCBhbGln bm1lbnQ7Ci0gICAgIF9fbWFsbG9jX3NpemVfdCBzaXplOworcG9zaXhfbWVtYWxpZ24gKHZv aWQgKiptZW1wdHIsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogewotICBfX3B0 cl90IG1lbTsKKyAgdm9pZCAqbWVtOwoKICAgaWYgKGFsaWdubWVudCA9PSAwCi0gICAgICB8 fCBhbGlnbm1lbnQgJSBzaXplb2YgKF9fcHRyX3QpICE9IDAKKyAgICAgIHx8IGFsaWdubWVu dCAlIHNpemVvZiAodm9pZCAqKSAhPSAwCiAgICAgICB8fCAoYWxpZ25tZW50ICYgKGFsaWdu bWVudCAtIDEpKSAhPSAwKQogICAgIHJldHVybiBFSU5WQUw7CgpAQCAtMTgwOSw0MyArMTY5 MywyNyBAQAogICAgVGhlIGF1dGhvciBtYXkgYmUgcmVhY2hlZCAoRW1haWwpIGF0IHRoZSBh ZGRyZXNzIG1pa2VAYWkubWl0LmVkdSwKICAgIG9yIChVUyBtYWlsKSBhcyBNaWtlIEhhZXJ0 ZWwgYy9vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gICovCgotI2lmIGRlZmluZWQgKF9N QUxMT0NfSU5URVJOQUwpICYmIGRlZmluZWQgKEdNQUxMT0NfSU5ISUJJVF9WQUxMT0MpCi0K IC8qIEVtYWNzIGRlZmluZXMgR01BTExPQ19JTkhJQklUX1ZBTExPQyB0byBhdm9pZCB0aGlz IGRlZmluaXRpb24KICAgIG9uIE1TRE9TLCB3aGVyZSBpdCBjb25mbGljdHMgd2l0aCBhIHN5 c3RlbSBoZWFkZXIgZmlsZS4gICovCgotI2RlZmluZSBFTElERV9WQUxMT0MKLQotI2VuZGlm Ci0KLSNpZm5kZWYJRUxJREVfVkFMTE9DCi0KLSNpZiBkZWZpbmVkIChfX0dOVV9MSUJSQVJZ X18pIHx8IGRlZmluZWQgKF9MSUJDKQotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUg PHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQgKF9fR0xJQkNfXykgJiYgX19HTElCQ19fID49 IDIKLS8qIF9fZ2V0cGFnZXNpemUgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiA8dW5pc3RkLmg+ IHdpdGggcmV0dXJuIHR5cGUgaW50ICovCi0jZWxzZQotZXh0ZXJuIHNpemVfdCBfX2dldHBh Z2VzaXplIFBQICgodm9pZCkpOwotI2VuZGlmCi0jZWxzZQotI2luY2x1ZGUgImdldHBhZ2Vz aXplLmgiCi0jZGVmaW5lCSBfX2dldHBhZ2VzaXplKCkJZ2V0cGFnZXNpemUgKCkKLSNlbmRp ZgotCi0jaWZuZGVmCV9NQUxMT0NfSU5URVJOQUwKLSNkZWZpbmUJX01BTExPQ19JTlRFUk5B TAotI2luY2x1ZGUgPG1hbGxvYy5oPgotI2VuZGlmCi0KLXN0YXRpYyBfX21hbGxvY19zaXpl X3QgcGFnZXNpemU7Ci0KLV9fcHRyX3QKLXZhbGxvYyAoc2l6ZSkKLSAgICAgX19tYWxsb2Nf c2l6ZV90IHNpemU7CisjaWZuZGVmCUdNQUxMT0NfSU5ISUJJVF9WQUxMT0MKKworLyogQWxs b2NhdGUgU0laRSBieXRlcyBvbiBhIHBhZ2UgYm91bmRhcnkuICAqLworZXh0ZXJuIHZvaWQg KnZhbGxvYyAoc2l6ZV90KTsKKworI2lmIGRlZmluZWQgX1NDX1BBR0VTSVpFIHx8ICFkZWZp bmVkIEhBVkVfR0VUUEFHRVNJWkUKKyMgaW5jbHVkZSAiZ2V0cGFnZXNpemUuaCIKKyNlbGlm ICFkZWZpbmVkIGdldHBhZ2VzaXplCitleHRlcm4gaW50IGdldHBhZ2VzaXplICh2b2lkKTsK KyNlbmRpZgorCitzdGF0aWMgc2l6ZV90IHBhZ2VzaXplOworCit2b2lkICoKK3ZhbGxvYyAo c2l6ZV90IHNpemUpCiB7CiAgIGlmIChwYWdlc2l6ZSA9PSAwKQotICAgIHBhZ2VzaXplID0g X19nZXRwYWdlc2l6ZSAoKTsKKyAgICBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplICgpOwoKICAg cmV0dXJuIG1lbWFsaWduIChwYWdlc2l6ZSwgc2l6ZSk7CiB9CkBAIC0xODc2LDQxICsxNzQ0 LDMxIEBACiAgICBUaGUgYXV0aG9yIG1heSBiZSByZWFjaGVkIChFbWFpbCkgYXQgdGhlIGFk ZHJlc3MgbWlrZUBhaS5taXQuZWR1LAogICAgb3IgKFVTIG1haWwpIGFzIE1pa2UgSGFlcnRl bCBjL28gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgKi8KCi0jaWZkZWYgZW1hY3MKLSNp bmNsdWRlIDxzdGRpby5oPgotI2Vsc2UKLSNpZm5kZWYJX01BTExPQ19JTlRFUk5BTAotI2Rl ZmluZQlfTUFMTE9DX0lOVEVSTkFMCi0jaW5jbHVkZSA8bWFsbG9jLmg+Ci0jaW5jbHVkZSA8 c3RkaW8uaD4KLSNlbmRpZgotI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KCiAvKiBPbGQg aG9vayB2YWx1ZXMuICAqLwotc3RhdGljIHZvaWQgKCpvbGRfZnJlZV9ob29rKSAoX19wdHJf dCBwdHIpOwotc3RhdGljIF9fcHRyX3QgKCpvbGRfbWFsbG9jX2hvb2spIChfX21hbGxvY19z aXplX3Qgc2l6ZSk7Ci1zdGF0aWMgX19wdHJfdCAoKm9sZF9yZWFsbG9jX2hvb2spIChfX3B0 cl90IHB0ciwgX19tYWxsb2Nfc2l6ZV90IHNpemUpOworc3RhdGljIHZvaWQgKCpvbGRfZnJl ZV9ob29rKSAodm9pZCAqcHRyKTsKK3N0YXRpYyB2b2lkICooKm9sZF9tYWxsb2NfaG9vaykg KHNpemVfdCBzaXplKTsKK3N0YXRpYyB2b2lkICooKm9sZF9yZWFsbG9jX2hvb2spICh2b2lk ICpwdHIsIHNpemVfdCBzaXplKTsKCiAvKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gc29tZXRo aW5nIGF3ZnVsIGhhcHBlbnMuICAqLwogc3RhdGljIHZvaWQgKCphYm9ydGZ1bmMpIChlbnVt IG1jaGVja19zdGF0dXMpOwoKIC8qIEFyYml0cmFyeSBtYWdpY2FsIG51bWJlcnMuICAqLwot I2RlZmluZSBNQUdJQ1dPUkQJMHhmZWRhYmVlYgotI2RlZmluZSBNQUdJQ0ZSRUUJMHhkODY3 NTMwOQorI2RlZmluZSBNQUdJQ1dPUkQJKFNJWkVfTUFYIC8gMTEgXiBTSVpFX01BWCAvIDEz IDw8IDMpCisjZGVmaW5lIE1BR0lDRlJFRQkoU0laRV9NQVggLyAxNyBeIFNJWkVfTUFYIC8g MTkgPDwgNCkKICNkZWZpbmUgTUFHSUNCWVRFCSgoY2hhcikgMHhkNykKICNkZWZpbmUgTUFM TE9DRkxPT0QJKChjaGFyKSAweDkzKQogI2RlZmluZSBGUkVFRkxPT0QJKChjaGFyKSAweDk1 KQoKIHN0cnVjdCBoZHIKICAgewotICAgIF9fbWFsbG9jX3NpemVfdCBzaXplOwkJLyogRXhh Y3Qgc2l6ZSByZXF1ZXN0ZWQgYnkgdXNlci4gICovCi0gICAgdW5zaWduZWQgbG9uZyBpbnQg bWFnaWM7CS8qIE1hZ2ljIG51bWJlciB0byBjaGVjayBoZWFkZXIgaW50ZWdyaXR5LiAgKi8K KyAgICBzaXplX3Qgc2l6ZTsJLyogRXhhY3Qgc2l6ZSByZXF1ZXN0ZWQgYnkgdXNlci4gICov CisgICAgc2l6ZV90IG1hZ2ljOwkvKiBNYWdpYyBudW1iZXIgdG8gY2hlY2sgaGVhZGVyIGlu dGVncml0eS4gICovCiAgIH07Cgotc3RhdGljIGVudW0gbWNoZWNrX3N0YXR1cyBjaGVja2hk ciAoY29uc3Qgc3RydWN0IGhkciAqKTsKIHN0YXRpYyBlbnVtIG1jaGVja19zdGF0dXMKLWNo ZWNraGRyIChoZHIpCi0gICAgIGNvbnN0IHN0cnVjdCBoZHIgKmhkcjsKK2NoZWNraGRyIChj b25zdCBzdHJ1Y3QgaGRyICpoZHIpCiB7CiAgIGVudW0gbWNoZWNrX3N0YXR1cyBzdGF0dXM7 CiAgIHN3aXRjaCAoaGRyLT5tYWdpYykKQEAgLTE5MzMsMTAgKzE3OTEsOCBAQAogICByZXR1 cm4gc3RhdHVzOwogfQoKLXN0YXRpYyB2b2lkIGZyZWVob29rIChfX3B0cl90KTsKIHN0YXRp YyB2b2lkCi1mcmVlaG9vayAocHRyKQotICAgICBfX3B0cl90IHB0cjsKK2ZyZWVob29rICh2 b2lkICpwdHIpCiB7CiAgIHN0cnVjdCBoZHIgKmhkcjsKCkBAIC0xOTU1LDE1ICsxODExLDEz IEBACiAgIF9fZnJlZV9ob29rID0gZnJlZWhvb2s7CiB9Cgotc3RhdGljIF9fcHRyX3QgbWFs bG9jaG9vayAoX19tYWxsb2Nfc2l6ZV90KTsKLXN0YXRpYyBfX3B0cl90Ci1tYWxsb2Nob29r IChzaXplKQotICAgICBfX21hbGxvY19zaXplX3Qgc2l6ZTsKK3N0YXRpYyB2b2lkICoKK21h bGxvY2hvb2sgKHNpemVfdCBzaXplKQogewogICBzdHJ1Y3QgaGRyICpoZHI7CgogICBfX21h bGxvY19ob29rID0gb2xkX21hbGxvY19ob29rOwotICBoZHIgPSAoc3RydWN0IGhkciAqKSBt YWxsb2MgKHNpemVvZiAoc3RydWN0IGhkcikgKyBzaXplICsgMSk7CisgIGhkciA9IG1hbGxv YyAoc2l6ZW9mIChzdHJ1Y3QgaGRyKSArIHNpemUgKyAxKTsKICAgX19tYWxsb2NfaG9vayA9 IG1hbGxvY2hvb2s7CiAgIGlmIChoZHIgPT0gTlVMTCkKICAgICByZXR1cm4gTlVMTDsKQEAg LTE5NzEsMTggKzE4MjUsMTUgQEAKICAgaGRyLT5zaXplID0gc2l6ZTsKICAgaGRyLT5tYWdp YyA9IE1BR0lDV09SRDsKICAgKChjaGFyICopICZoZHJbMV0pW3NpemVdID0gTUFHSUNCWVRF OwotICBtZW1zZXQgKChfX3B0cl90KSAoaGRyICsgMSksIE1BTExPQ0ZMT09ELCBzaXplKTsK LSAgcmV0dXJuIChfX3B0cl90KSAoaGRyICsgMSk7CisgIG1lbXNldCAoaGRyICsgMSwgTUFM TE9DRkxPT0QsIHNpemUpOworICByZXR1cm4gaGRyICsgMTsKIH0KCi1zdGF0aWMgX19wdHJf dCByZWFsbG9jaG9vayAoX19wdHJfdCwgX19tYWxsb2Nfc2l6ZV90KTsKLXN0YXRpYyBfX3B0 cl90Ci1yZWFsbG9jaG9vayAocHRyLCBzaXplKQotICAgICBfX3B0cl90IHB0cjsKLSAgICAg X19tYWxsb2Nfc2l6ZV90IHNpemU7CitzdGF0aWMgdm9pZCAqCityZWFsbG9jaG9vayAodm9p ZCAqcHRyLCBzaXplX3Qgc2l6ZSkKIHsKICAgc3RydWN0IGhkciAqaGRyID0gTlVMTDsKLSAg X19tYWxsb2Nfc2l6ZV90IG9zaXplID0gMDsKKyAgc2l6ZV90IG9zaXplID0gMDsKCiAgIGlm IChwdHIpCiAgICAgewpAQCAtMTk5Nyw3ICsxODQ4LDcgQEAKICAgX19mcmVlX2hvb2sgPSBv bGRfZnJlZV9ob29rOwogICBfX21hbGxvY19ob29rID0gb2xkX21hbGxvY19ob29rOwogICBf X3JlYWxsb2NfaG9vayA9IG9sZF9yZWFsbG9jX2hvb2s7Ci0gIGhkciA9IChzdHJ1Y3QgaGRy ICopIHJlYWxsb2MgKChfX3B0cl90KSBoZHIsIHNpemVvZiAoc3RydWN0IGhkcikgKyBzaXpl ICsgMSk7CisgIGhkciA9IHJlYWxsb2MgKGhkciwgc2l6ZW9mIChzdHJ1Y3QgaGRyKSArIHNp emUgKyAxKTsKICAgX19mcmVlX2hvb2sgPSBmcmVlaG9vazsKICAgX19tYWxsb2NfaG9vayA9 IG1hbGxvY2hvb2s7CiAgIF9fcmVhbGxvY19ob29rID0gcmVhbGxvY2hvb2s7CkBAIC0yMDA5 LDEyICsxODYwLDExIEBACiAgICgoY2hhciAqKSAmaGRyWzFdKVtzaXplXSA9IE1BR0lDQllU RTsKICAgaWYgKHNpemUgPiBvc2l6ZSkKICAgICBtZW1zZXQgKChjaGFyICopIChoZHIgKyAx KSArIG9zaXplLCBNQUxMT0NGTE9PRCwgc2l6ZSAtIG9zaXplKTsKLSAgcmV0dXJuIChfX3B0 cl90KSAoaGRyICsgMSk7CisgIHJldHVybiBoZHIgKyAxOwogfQoKIHN0YXRpYyB2b2lkCi1t YWJvcnQgKHN0YXR1cykKLSAgICAgZW51bSBtY2hlY2tfc3RhdHVzIHN0YXR1czsKK21hYm9y dCAoZW51bSBtY2hlY2tfc3RhdHVzIHN0YXR1cykKIHsKICAgY29uc3QgY2hhciAqbXNnOwog ICBzd2l0Y2ggKHN0YXR1cykKQEAgLTIwNDcsOCArMTg5Nyw3IEBACiBzdGF0aWMgaW50IG1j aGVja191c2VkID0gMDsKCiBpbnQKLW1jaGVjayAoZnVuYykKLSAgICAgdm9pZCAoKmZ1bmMp IChlbnVtIG1jaGVja19zdGF0dXMpOworbWNoZWNrICh2b2lkICgqZnVuYykgKGVudW0gbWNo ZWNrX3N0YXR1cykpCiB7CiAgIGFib3J0ZnVuYyA9IChmdW5jICE9IE5VTEwpID8gZnVuYyA6 ICZtYWJvcnQ7CgpAQCAtMjA2OCw3ICsxOTE3LDcgQEAKIH0KCiBlbnVtIG1jaGVja19zdGF0 dXMKLW1wcm9iZSAoX19wdHJfdCBwdHIpCittcHJvYmUgKHZvaWQgKnB0cikKIHsKICAgcmV0 dXJuIG1jaGVja191c2VkID8gY2hlY2toZHIgKHB0cikgOiBNQ0hFQ0tfRElTQUJMRUQ7CiB9 Cgo= --------------010706040806010903080204--