From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#32194: [PATCH] Use Gnulib regex for lib-src Date: Tue, 31 Jul 2018 11:21:38 -0700 Organization: UCLA Computer Science Department Message-ID: <15823bbe-8298-0d69-c7a6-edf2001e4513@cs.ucla.edu> References: <20180717234729.15507-1-eggert@cs.ucla.edu> <83va9c33kk.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------F39DF2437E1EAB82A614CC92" X-Trace: blaine.gmane.org 1533061546 18389 195.159.176.226 (31 Jul 2018 18:25:46 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 31 Jul 2018 18:25:46 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 Cc: 32194@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Jul 31 20:22:45 2018 Return-path: Envelope-to: geb-bug-gnu-emacs@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 1fkZIA-0001O4-DC for geb-bug-gnu-emacs@m.gmane.org; Tue, 31 Jul 2018 20:22:44 +0200 Original-Received: from localhost ([::1]:60190 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fkZKG-0003VB-Uv for geb-bug-gnu-emacs@m.gmane.org; Tue, 31 Jul 2018 14:24:53 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:48524) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fkZJH-00033o-Tk for bug-gnu-emacs@gnu.org; Tue, 31 Jul 2018 14:24:40 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fkZIW-0000DH-U1 for bug-gnu-emacs@gnu.org; Tue, 31 Jul 2018 14:23:51 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:59863) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fkZIU-0000Bk-GX for bug-gnu-emacs@gnu.org; Tue, 31 Jul 2018 14:23:04 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1fkZIU-0002Sc-9R for bug-gnu-emacs@gnu.org; Tue, 31 Jul 2018 14:23:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 31 Jul 2018 18:23:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 32194 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 32194-submit@debbugs.gnu.org id=B32194.15330613389389 (code B ref 32194); Tue, 31 Jul 2018 18:23:02 +0000 Original-Received: (at 32194) by debbugs.gnu.org; 31 Jul 2018 18:22:18 +0000 Original-Received: from localhost ([127.0.0.1]:36649 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fkZHm-0002RN-M8 for submit@debbugs.gnu.org; Tue, 31 Jul 2018 14:22:18 -0400 Original-Received: from zimbra.cs.ucla.edu ([131.179.128.68]:52994) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fkZHj-0002R6-BR for 32194@debbugs.gnu.org; Tue, 31 Jul 2018 14:22:16 -0400 Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 67F951610DE; Tue, 31 Jul 2018 11:22:09 -0700 (PDT) Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id Y60tA3Y2ye7p; Tue, 31 Jul 2018 11:21:46 -0700 (PDT) Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id BCD0C161134; Tue, 31 Jul 2018 11:21:46 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id cxI_I9ViIVUK; Tue, 31 Jul 2018 11:21:46 -0700 (PDT) Original-Received: from Penguin.CS.UCLA.EDU (Penguin.CS.UCLA.EDU [131.179.64.200]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 0312D1610DE; Tue, 31 Jul 2018 11:21:46 -0700 (PDT) Openpgp: preference=signencrypt Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= xsFNBEyAcmQBEADAAyH2xoTu7ppG5D3a8FMZEon74dCvc4+q1XA2J2tBy2pwaTqfhpxxdGA9 Jj50UJ3PD4bSUEgN8tLZ0san47l5XTAFLi2456ciSl5m8sKaHlGdt9XmAAtmXqeZVIYX/UFS 96fDzf4xhEmm/y7LbYEPQdUdxu47xA5KhTYp5bltF3WYDz1Ygd7gx07Auwp7iw7eNvnoDTAl KAl8KYDZzbDNCQGEbpY3efZIvPdeI+FWQN4W+kghy+P6au6PrIIhYraeua7XDdb2LS1en3Ss mE3QjqfRqI/A2ue8JMwsvXe/WK38Ezs6x74iTaqI3AFH6ilAhDqpMnd/msSESNFt76DiO1ZK QMr9amVPknjfPmJISqdhgB1DlEdw34sROf6V8mZw0xfqT6PKE46LcFefzs0kbg4GORf8vjG2 Sf1tk5eU8MBiyN/bZ03bKNjNYMpODDQQwuP84kYLkX2wBxxMAhBxwbDVZudzxDZJ1C2VXujC OJVxq2kljBM9ETYuUGqd75AW2LXrLw6+MuIsHFAYAgRr7+KcwDgBAfwhPBYX34nSSiHlmLC+ KaHLeCLF5ZI2vKm3HEeCTtlOg7xZEONgwzL+fdKo+D6SoC8RRxJKs8a3sVfI4t6CnrQzvJbB n6gxdgCu5i29J1QCYrCYvql2UyFPAK+do99/1jOXT4m2836j1wARAQABzSBQYXVsIEVnZ2Vy dCA8ZWdnZXJ0QGNzLnVjbGEuZWR1PsLBfgQTAQIAKAUCTIByZAIbAwUJEswDAAYLCQgHAwIG FQgCCQoLBBYCAwECH In-Reply-To: <83va9c33kk.fsf@gnu.org> Content-Language: en-US X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.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" Xref: news.gmane.org gmane.emacs.bugs:149123 Archived-At: This is a multi-part message in MIME format. --------------F39DF2437E1EAB82A614CC92 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Eli Zaretskii wrote: > would it be possible to let the configure > script also check -lregex for those functions? This could be > important on non-glibc systems. It would no doubt be possible. However, we haven't found a need in other applications that use Gnulib. Gnulib code tends to be more up-to-date than system-supplied libraries, and in practice it's OK if the system puts the regex code in a place where 'configure' won't find it, as Emacs will just fall back on the better Gnulib version in that case. > 2. Do we really need to rename src/regex.c? We could have 2 regex.c in > separate directories, couldn't we? If possible, I'd prefer not to > rename files, as that makes VCS forensics more complicated. Renaming src/regex.h works around problems with having two include files src/regex.h and lib/regex.h that fight each other. I tried not renaming src/regex.h at first, and then ran into problems and gave up; although I surely could get it to work eventually, I figured that we'd continue to have ongoing problems and so it would be better to bite the bullet. We could rename only src/regex.c, but it would be confusing for the .c and .h files to disagree in names. Also, having two different */regex.c files in different places would mean for long-term confusion by builders and bug-reporters. Also, the regex code will surely change quite a bit once we decouple it from glibc, which lessens the advantage of trying to use 'git diff' on the result. Come to think of it, we might as well do some of the obvious simplifications now; I'll attach them as additional patches to this email. This is why I judged the advantages of renaming to outweigh the disadvantages. If despite all this you prefer to not rename src/regex.c we could do that fairly easily. Not renaming src/regex.h would be a bigger hill to climb, one that I expect is not worth it. > 3. Is it really necessary to pull mbrtowc, locale_charset, > nl_langinfo, and their dependencies? I didn't know, so in my first cut I did the easiest thing and pulled them all in. It's pretty easy to omit them; we can always add some back if we find they're needed after all. Revised patch attached; it is the first patch in the attached series. (The later patches are some of the simplifications mentioned above.) > P.S. Is it true that this version will no longer support a build with > WIDE_CHAR_SUPPORT undefined, i.e. those which have only the C locale? I don't see any issues with such a build. What sort of problem do you have in mind? --------------F39DF2437E1EAB82A614CC92 Content-Type: text/plain; charset=UTF-8; name="0001-Use-Gnulib-regex-for-lib-src.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-Use-Gnulib-regex-for-lib-src.txt" RnJvbSBiMDk2NmU1N2ZiOTc1OTllODA2NTQ5ZDgwZmVmYTgwM2M5MGQ4YTMwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBUdWUsIDMxIEp1bCAyMDE4IDEwOjQ5OjQ1IC0wNzAwClN1YmplY3Q6IFtQQVRD SCAxLzRdIFVzZSBHbnVsaWIgcmVnZXggZm9yIGxpYi1zcmMKTUlNRS1WZXJzaW9uOiAxLjAK Q29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNm ZXItRW5jb2Rpbmc6IDhiaXQKCkVtYWNzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZm9ya2VkIGZy b20gZXZlcnlvbmUgZWxzZSBsb25nIGFnby4KVGhpcyBtYWtlcyBpdCBvZmZpY2lhbCBhbmQg c2hvdWxkIGFsbG93IHNpbXBsaWZpY2F0aW9uIGxhdGVyLgpldGFncy5jIG5vdyB1c2VzIHRo ZSBnbGliYyByZWdleCBBUEksIGZhbGxpbmcgYmFjayBvbiBhCkdudWxpYi1zdXBwbGllZCBz dWJzdGl0dXRlIGxpYi9yZWdleC5jIGlmIG5lY2Vzc2FyeS4KRW1hY3MgcHJvcGVyIG5vdyB1 c2VzIGl0cyBvd24gcmVndWxhciBleHByZXNzaW9uIG1vZHVsZS4KQWx0aG91Z2ggdGhpcyBw YXRjaCBtYXkgbG9vayBkYXVudGluZ2x5IGxhcmdlLCBtb3N0IG9mIGl0CndhcyBnZW5lcmF0 ZWQgYXV0b21hdGljYWxseSBieSBhZG1pbi9tZXJnZS1nbnVsaWIKYW5kIGNvbnRhaW5zIGFu IGV4YWN0IGNvcHkgb2YgdGhlIGdsaWJjIHJlZ2V4IHNvdXJjZSwKYW5kIHRoZSBieS1oYW5k IGNoYW5nZXMgZG8gbm90IGdyb3cgdGhlIEVtYWNzIHNvdXJjZSBjb2RlLgoqIGFkbWluL21l cmdlLWdudWxpYiAoR05VTElCX01PRFVMRVMpOiBBZGQgcmVnZXguCihBVk9JREVEX01PRFVM RVMpOiBBZGQgYnRvd2MsIGxhbmdpbmZvLCBsb2NrLCBtYnJ0b3djLCBtYnNpbml0LApubF9s YW5naW5mbywgd2NoYXIsIHdjcnRvbWIsIHdjdHlwZS1oLgoqIGxpYi1zcmMvTWFrZWZpbGUu aW4gKHJlZ2V4Lm8pOiBSZW1vdmU7IEdudWxpYiBkb2VzIHRoaXMgZm9yIHVzIG5vdy4KKGV0 YWdzX2RlcHMsIGV0YWdzX2xpYnMpOiBSZW1vdmUgcmVnZXguby4KKiBsaWItc3JjL2V0YWdz LmMgKGFkZF9yZWdleCk6IFVzZSB1bnNpZ25lZCBjaGFyIHRyYW5zbGF0aW9uIGFycmF5LApz aW5jZSBnbGliYyByZWdleCByZXF1aXJlcyB0aGF0LgoqIGxpYi9NYWtlZmlsZS5pbiAobm90 X2VtYWNzX09CSkVDVFMsIGZvcl9lbWFjc19PQkpFQ1RTKTogTmV3IG1hY3Jvcy4KKGxpYmVn bnVfYV9PQkpFQ1RTKTogVXNlIHRoZW0sIHRvIGF2b2lkIGJ1aWxkaW5nIGUtcmVnZXguby4K KiBsaWIvZ251bGliLm1rLmluLCBtNC9nbnVsaWItY29tcC5tNDogUmVnZW5lcmF0ZS4KKiBs aWIvcmVnY29tcC5jLCBsaWIvcmVnZXguYywgbGliL3JlZ2V4LmgsIGxpYi9yZWdleF9pbnRl cm5hbC5jOgoqIGxpYi9yZWdleF9pbnRlcm5hbC5oLCBsaWIvcmVnZXhlYy5jLCBtNC9idWls dGluLWV4cGVjdC5tNDoKKiBtNC9lZWFsbG9jLm00LCBtNC9nbGliYzIxLm00LCBtNC9tYnN0 YXRlX3QubTQsIG00L3JlZ2V4Lm00OgpOZXcgZmlsZXMsIGNvcGllZCBmcm9tIEdudWxpYi4K KiBzcmMvcmVnZXgtZW1hY3MuYywgc3JjL3JlZ2V4LWVtYWNzLmg6ClJlbmFtZSBmcm9tIHNy Yy9yZWdleC5jIGFuZCBzcmMvcmVnZXguaCwgdG8gYXZvaWQgY29uZnVzaW9uCndpdGggbGli L3JlZ2V4LmMuICBBbGwgcmVmZXJlbmNlcyBjaGFuZ2VkLgoqIHNyYy9yZWdleC1lbWFjcy5o LCBzcmMvY29uZl9wb3N0Lmg6CihSRV9UUkFOU0xBVEVfVFlQRSwgUkVfVFJBTlNMQVRFLCBS RV9UUkFOU0xBVEVfUCk6Ck1vdmUgZnJvbSBzcmMvY29uZl9wb3N0LmggdG8gc3JjL3JlZ2V4 LWVtYWNzLmgsCnNvIHRoYXQgdGhleSBkb27igJl0IGludGVyZmVyZSB3aXRoIGNvbXBpbGlu ZyBsaWIvcmVnZXguYy4KKiB0ZXN0L3NyYy9yZWdleC1lbWFjcy10ZXN0cy5lbDoKUmVuYW1l IGZyb20gdGVzdC9zcmMvcmVnZXgtdGVzdHMuZWwsIGZvciBjb25zaXN0ZW5jeS4KLS0tCiBh ZG1pbi9NQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICst CiBhZG1pbi9maW5kLWdjLmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAy ICstCiBhZG1pbi9tZXJnZS1nbnVsaWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg ICA3ICstCiBldGMvTkVXUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgICA3ICsKIGxpYi1zcmMvTWFrZWZpbGUuaW4gICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDggKy0KIGxpYi1zcmMvZXRhZ3MuYyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgIDIgKy0KIGxpYi9NYWtlZmlsZS5pbiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgIDggKy0KIGxpYi9nbnVsaWIubWsuaW4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgMjMgKwogbGliL3JlZ2NvbXAuYyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgMzk0NCArKysrKysrKysrKysrKysKIGxpYi9yZWdleC5jICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgODEgKwogbGliL3JlZ2V4LmggICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDY1OCArKysKIGxpYi9yZWdleF9p bnRlcm5hbC5jICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE3NDAgKysrKysrKwogbGli L3JlZ2V4X2ludGVybmFsLmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkxMSArKysr CiBsaWIvcmVnZXhlYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0MzI0 ICsrKysrKysrKysrKysrKysrCiBsaXNwL2NoYXItZm9sZC5lbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgICAyICstCiBtNC9idWlsdGluLWV4cGVjdC5tNCAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgIDQ5ICsKIG00L2VlYWxsb2MubTQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgMzEgKwogbTQvZ2xpYmMyMS5tNCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAzNCArCiBtNC9nbnVsaWItY29tcC5tNCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDMwICsKIG00L21ic3RhdGVfdC5tNCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDEgKwogbTQvcmVnZXgubTQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMwMCArKwogc3JjL01ha2VmaWxlLmluICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQogc3JjL2Nhc2V0YWIuYyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQogc3JjL2NvbmZfcG9z dC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyAtCiBzcmMvZGVwcy5t ayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEwICstCiBzcmMvZW1h Y3MuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA4ICstCiBzcmMv e3JlZ2V4LmMgPT4gcmVnZXgtZW1hY3MuY30gICAgICAgICAgICAgICAgfCAgIDU0ICstCiBz cmMve3JlZ2V4LmggPT4gcmVnZXgtZW1hY3MuaH0gICAgICAgICAgICAgICAgfCAgIDE1ICst CiBzcmMvc2VhcmNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA4 ICstCiBzcmMvc3ludGF4LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg ICA2ICstCiBzcmMvdGhyZWFkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgICAyICstCiAuLi4ve3JlZ2V4LXRlc3RzLmVsID0+IHJlZ2V4LWVtYWNzLXRlc3RzLmVs fSAgfCAgICA2ICstCiAzMiBmaWxlcyBjaGFuZ2VkLCAxMjI0OSBpbnNlcnRpb25zKCspLCA3 NSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvcmVnY29tcC5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgbGliL3JlZ2V4LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvcmVn ZXguaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9yZWdleF9pbnRlcm5hbC5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgbGliL3JlZ2V4X2ludGVybmFsLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBs aWIvcmVnZXhlYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbTQvYnVpbHRpbi1leHBlY3QubTQK IGNyZWF0ZSBtb2RlIDEwMDY0NCBtNC9lZWFsbG9jLm00CiBjcmVhdGUgbW9kZSAxMDA2NDQg bTQvZ2xpYmMyMS5tNAogY3JlYXRlIG1vZGUgMTAwNjQ0IG00L21ic3RhdGVfdC5tNAogY3Jl YXRlIG1vZGUgMTAwNjQ0IG00L3JlZ2V4Lm00CiByZW5hbWUgc3JjL3tyZWdleC5jID0+IHJl Z2V4LWVtYWNzLmN9ICg5OSUpCiByZW5hbWUgc3JjL3tyZWdleC5oID0+IHJlZ2V4LWVtYWNz Lmh9ICg5OCUpCiByZW5hbWUgdGVzdC9zcmMve3JlZ2V4LXRlc3RzLmVsID0+IHJlZ2V4LWVt YWNzLXRlc3RzLmVsfSAoOTklKQoKZGlmZiAtLWdpdCBhL2FkbWluL01BSU5UQUlORVJTIGIv YWRtaW4vTUFJTlRBSU5FUlMKaW5kZXggMWE0MTU3YWM1My4uMTA2MzNhOGUwZSAxMDA2NDQK LS0tIGEvYWRtaW4vTUFJTlRBSU5FUlMKKysrIGIvYWRtaW4vTUFJTlRBSU5FUlMKQEAgLTM3 LDcgKzM3LDcgQEAgS2VuaWNoaSBIYW5kYQogCU11bGUKIAogU3RlZmFuIE1vbm5pZXIKLQlz cmMvcmVnZXguYworCXNyYy9yZWdleC1lbWFjcy5jCiAJc3JjL3N5bnRheC5jCiAJc3JjL2tl eW1hcC5jCiAJZm9udC1sb2NrL2ppdC1sb2NrL3N5bnRheApkaWZmIC0tZ2l0IGEvYWRtaW4v ZmluZC1nYy5lbCBiL2FkbWluL2ZpbmQtZ2MuZWwKaW5kZXggZmI1NjQwMzljNy4uZThjYzEx MzY1MCAxMDA2NDQKLS0tIGEvYWRtaW4vZmluZC1nYy5lbAorKysgYi9hZG1pbi9maW5kLWdj LmVsCkBAIC01Nyw3ICs1Nyw3IEBAIGZpbmQtZ2Mtc291cmNlLWZpbGVzCiAgICAgImtleW1h cC5jIiAic3lzZGVwLmMiICJidWZmZXIuYyIgImZpbGVsb2NrLmMiCiAgICAgImluc2RlbC5j IiAibWFya2VyLmMiICJtaW5pYnVmLmMiICJmaWxlaW8uYyIKICAgICAiZGlyZWQuYyIgImNt ZHMuYyIgImNhc2VmaWRkbGUuYyIKLSAgICAiaW5kZW50LmMiICJzZWFyY2guYyIgInJlZ2V4 LmMiICJ1bmRvLmMiCisgICAgImluZGVudC5jIiAic2VhcmNoLmMiICJyZWdleC1lbWFjcy5j IiAidW5kby5jIgogICAgICJhbGxvYy5jIiAiZGF0YS5jIiAiZG9jLmMiICJlZGl0Zm5zLmMi CiAgICAgImNhbGxpbnQuYyIgImV2YWwuYyIgImZucy5jIiAicHJpbnQuYyIgImxyZWFkLmMi CiAgICAgInN5bnRheC5jIiAidW5leGNvZmYuYyIKZGlmZiAtLWdpdCBhL2FkbWluL21lcmdl LWdudWxpYiBiL2FkbWluL21lcmdlLWdudWxpYgppbmRleCAzOWRmYWVlOGY0Li4yNGUxMzc4 NjQ4IDEwMDc1NQotLS0gYS9hZG1pbi9tZXJnZS1nbnVsaWIKKysrIGIvYWRtaW4vbWVyZ2Ut Z251bGliCkBAIC0zNyw3ICszNyw3IEBAIEdOVUxJQl9NT0RVTEVTPQogICBnZXRsb2FkYXZn IGdldG9wdC1nbnUgZ2V0dGltZSBnZXR0aW1lb2ZkYXkgZ2l0bG9nLXRvLWNoYW5nZWxvZwog ICBpZ25vcmUtdmFsdWUgaW50cHJvcHMgbGFyZ2VmaWxlIGxzdGF0CiAgIG1hbnl3YXJuaW5n cyBtZW1yY2hyIG1pbm1heCBta29zdGVtcCBta3RpbWUgbnN0cmZ0aW1lCi0gIHBpcGUyIHBz ZWxlY3QgcHRocmVhZF9zaWdtYXNrIHB1dGVudiBxY29weS1hY2wgcmVhZGxpbmsgcmVhZGxp bmthdAorICBwaXBlMiBwc2VsZWN0IHB0aHJlYWRfc2lnbWFzayBwdXRlbnYgcWNvcHktYWNs IHJlYWRsaW5rIHJlYWRsaW5rYXQgcmVnZXgKICAgc2lnMnN0ciBzb2NrbGVuIHN0YXQtdGlt ZSBzdGQtZ251MTEgc3RkYWxpZ24gc3RkZGVmIHN0ZGlvCiAgIHN0cGNweSBzdHJ0b2ltYXgg c3ltbGluayBzeXNfc3RhdCBzeXNfdGltZQogICB0ZW1wbmFtZSB0aW1lIHRpbWVfciB0aW1l X3J6IHRpbWVnbSB0aW1lci10aW1lIHRpbWVzcGVjLWFkZCB0aW1lc3BlYy1zdWIKQEAgLTQ2 LDExICs0NiwxMiBAQCBHTlVMSUJfTU9EVUxFUz0KICcKIAogQVZPSURFRF9NT0RVTEVTPScK LSAgY2xvc2UgZHVwIGZjaGRpciBmc3RhdAotICBtYWxsb2MtcG9zaXggbXN2Yy1pbnZhbCBt c3ZjLW5vdGhyb3cKKyAgYnRvd2MgY2xvc2UgZHVwIGZjaGRpciBmc3RhdCBsYW5naW5mbyBs b2NrCisgIG1hbGxvYy1wb3NpeCBtYnJ0b3djIG1ic2luaXQgbXN2Yy1pbnZhbCBtc3ZjLW5v dGhyb3cgbmxfbGFuZ2luZm8KICAgb3BlbmF0LWRpZSBvcGVuZGlyIHJhaXNlCiAgIHNhdmUt Y3dkIHNlbGVjdCBzZXRlbnYgc2lncHJvY21hc2sgc3RhdCBzdGRhcmcgc3RkYm9vbAogICB0 aHJlYWRsaWIgdHpzZXQgdW5zZXRlbnYgdXRpbWUgdXRpbWUtaAorICB3Y2hhciB3Y3J0b21i IHdjdHlwZS1oCiAnCiAKIEdOVUxJQl9UT09MX0ZMQUdTPScKZGlmZiAtLWdpdCBhL2V0Yy9O RVdTIGIvZXRjL05FV1MKaW5kZXggZjFlYTgzNTY3OS4uYjA5M2I2Nzg4ZSAxMDA2NDQKLS0t IGEvZXRjL05FV1MKKysrIGIvZXRjL05FV1MKQEAgLTMxLDYgKzMxLDEzIEBAIGZ1bmN0aW9u cyAnanNvbi1zZXJpYWxpemUnLCAnanNvbi1pbnNlcnQnLCAnanNvbi1wYXJzZS1zdHJpbmcn LCBhbmQKICdqc29uLXBhcnNlLWJ1ZmZlcicgYXJlIHR5cGljYWxseSBtdWNoIGZhc3RlciB0 aGFuIHRoZWlyIExpc3AKIGNvdW50ZXJwYXJ0cyBmcm9tIGpzb24uZWwuCiAKKyoqIFRoZSBl dGFncyBwcm9ncmFtIG5vdyB1c2VzIHRoZSBDIGxpYnJhcnkncyByZWd1bGFyIGV4cHJlc3Np b24gbWF0Y2hlcgord2hlbiBwb3NzaWJsZSwgYW5kIGEgY29tcGF0aWJsZSByZWdleCBzdWJz dGl0dXRlIG90aGVyd2lzZS4gIFRoaXMgd2lsbAorbGV0IGRldmVsb3BlcnMgbWFpbnRhaW4g RW1hY3MncyBvd24gcmVnZXggY29kZSB3aXRob3V0IGhhdmluZyB0byBhbHNvCitzdXBwb3J0 IG90aGVyIHByb2dyYW1zLiAgVGhlIG5ldyBjb25maWd1cmUgb3B0aW9uICctLXdpdGhvdXQt aW5jbHVkZWQtcmVnZXgnCitmb3JjZXMgZXRhZ3MgdG8gdXNlIHRoZSBDIGxpYnJhcnkncyBy ZWdleCBtYXRjaGVyIGV2ZW4gaWYgdGhlIHJlZ2V4CitzdWJzdGl0dXRlIG9yZGluYXJpbHkg d291bGQgYmUgdXNlZCB0byB3b3JrIGFyb3VuZCBjb21wYXRpYmlsaXR5IHByb2JsZW1zLgor CiAqKiBFbWFjcyBoYXMgYmVlbiBwb3J0ZWQgdG8gdGhlIC1mY2hlY2stcG9pbnRlci1ib3Vu ZHMgb3B0aW9uIG9mIEdDQy4KIFRoaXMgY2F1c2VzIEVtYWNzIHRvIGNoZWNrIGJvdW5kcyBv ZiBzb21lIGFycmF5cyBhZGRyZXNzZWQgYnkgaXRzCiBpbnRlcm5hbCBwb2ludGVycywgd2hp Y2ggY2FuIGJlIGhlbHBmdWwgd2hlbiBkZWJ1Z2dpbmcgdGhlIEVtYWNzCmRpZmYgLS1naXQg YS9saWItc3JjL01ha2VmaWxlLmluIGIvbGliLXNyYy9NYWtlZmlsZS5pbgppbmRleCBmYTM3 ZDhlZDg1Li5iMmI5MDE3ODhhIDEwMDY0NAotLS0gYS9saWItc3JjL01ha2VmaWxlLmluCisr KyBiL2xpYi1zcmMvTWFrZWZpbGUuaW4KQEAgLTM2MSwxMyArMzYxLDkgQEAgVEFHUzoKIC4u L2xpYi9saWJnbnUuYTogJChjb25maWdfaCkKIAkkKE1BS0UpIC1DIC4uL2xpYiBhbGwKIAot cmVnZXgubzogJChzcmNkaXIpLy4uL3NyYy9yZWdleC5jICQoc3JjZGlyKS8uLi9zcmMvcmVn ZXguaCAkKGNvbmZpZ19oKQotCSQoQU1fVl9DQykkKENDKSAtYyAkKENQUF9DRkxBR1MpICQ8 Ci0KLQotZXRhZ3NfZGVwcyA9ICR7c3JjZGlyfS9ldGFncy5jIHJlZ2V4Lm8gJChOVExJQikg JChjb25maWdfaCkKK2V0YWdzX2RlcHMgPSAke3NyY2Rpcn0vZXRhZ3MuYyAkKE5UTElCKSAk KGNvbmZpZ19oKQogZXRhZ3NfY2ZsYWdzID0gLURFTUFDU19OQU1FPSJcIkdOVSBFbWFjc1wi IiAtRFZFUlNJT049IlwiJHt2ZXJzaW9ufVwiIiAtbyAkQAotZXRhZ3NfbGlicyA9IHJlZ2V4 Lm8gJChOVExJQikgJChMT0FETElCRVMpCitldGFnc19saWJzID0gJChOVExJQikgJChMT0FE TElCRVMpCiAKIGV0YWdzJHtFWEVFWFR9OiAke2V0YWdzX2RlcHN9CiAJJChBTV9WX0NDTEQp JChDQykgJHtBTExfQ0ZMQUdTfSAkKGV0YWdzX2NmbGFncykgJDwgJChldGFnc19saWJzKQpk aWZmIC0tZ2l0IGEvbGliLXNyYy9ldGFncy5jIGIvbGliLXNyYy9ldGFncy5jCmluZGV4IGIz YjQ1NzVlMGEuLmVlNTA2NzAzNDMgMTAwNjQ0Ci0tLSBhL2xpYi1zcmMvZXRhZ3MuYworKysg Yi9saWItc3JjL2V0YWdzLmMKQEAgLTY0MDEsNyArNjQwMSw3IEBAIGFkZF9yZWdleCAoY2hh ciAqcmVnZXhwX3BhdHRlcm4sIGxhbmd1YWdlICpsYW5nKQogICAqcGF0YnVmID0gemVyb3Bh dHRlcm47CiAgIGlmIChpZ25vcmVfY2FzZSkKICAgICB7Ci0gICAgICBzdGF0aWMgY2hhciBs Y190cmFuc1tVQ0hBUl9NQVggKyAxXTsKKyAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGxj X3RyYW5zW1VDSEFSX01BWCArIDFdOwogICAgICAgaW50IGk7CiAgICAgICBmb3IgKGkgPSAw OyBpIDwgVUNIQVJfTUFYICsgMTsgaSsrKQogCWxjX3RyYW5zW2ldID0gY190b2xvd2VyIChp KTsKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5pbiBiL2xpYi9NYWtlZmlsZS5pbgppbmRl eCAyMDFmNGI1MzgzLi5iMjZkYjI3NDIzIDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUuaW4K KysrIGIvbGliL01ha2VmaWxlLmluCkBAIC03OSw5ICs3OSwxNSBAQCAuLi9jb25maWcuc3Rh dHVzOgogTWFrZWZpbGU6IC4uL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL01ha2VmaWxlLmlu CiAJJChNQUtFKSAtQyAuLiBzcmMvJEAKIAorIyBPYmplY3QgbW9kdWxlcyB0aGF0IG5lZWQg bm90IGJlIGJ1aWx0IGZvciBFbWFjcy4KKyMgRW1hY3MgZG9lcyBub3QgbmVlZCBlLXJlZ2V4 Lm8gKGl0IGhhcyBpdHMgb3duIHJlZ2V4LWVtYWNzLmMpLAorIyBhbmQgYnVpbGRpbmcgaXQg d291bGQganVzdCB3YXN0ZSB0aW1lLgorbm90X2VtYWNzX09CSkVDVFMgPSByZWdleC5vCisK IGxpYmdudV9hX09CSkVDVFMgPSAkKGdsX0xJQk9CSlMpIFwKICAgJChwYXRzdWJzdCAlLmMs JS5vLCQoZmlsdGVyICUuYywkKGxpYmdudV9hX1NPVVJDRVMpKSkKLWxpYmVnbnVfYV9PQkpF Q1RTID0gJChwYXRzdWJzdCAlLm8sZS0lLm8sJChsaWJnbnVfYV9PQkpFQ1RTKSkKK2Zvcl9l bWFjc19PQkpFQ1RTID0gJChmaWx0ZXItb3V0ICQobm90X2VtYWNzX09CSkVDVFMpLCQobGli Z251X2FfT0JKRUNUUykpCitsaWJlZ251X2FfT0JKRUNUUyA9ICQocGF0c3Vic3QgJS5vLGUt JS5vLCQoZm9yX2VtYWNzX09CSkVDVFMpKQogCiAkKGxpYmVnbnVfYV9PQkpFQ1RTKSAkKGxp YmdudV9hX09CSkVDVFMpOiAkKEJVSUxUX1NPVVJDRVMpCiAKZGlmZiAtLWdpdCBhL2xpYi9n bnVsaWIubWsuaW4gYi9saWIvZ251bGliLm1rLmluCmluZGV4IGU2MjM5MjEwOTEuLjFmNGUy ODZlN2YgMTAwNjQ0Ci0tLSBhL2xpYi9nbnVsaWIubWsuaW4KKysrIGIvbGliL2dudWxpYi5t ay5pbgpAQCAtMzQsMTMgKzM0LDE5IEBACiAjICAtLW5vLWxpYnRvb2wgXAogIyAgLS1tYWNy by1wcmVmaXg9Z2wgXAogIyAgLS1uby12Yy1maWxlcyBcCisjICAtLWF2b2lkPWJ0b3djIFwK ICMgIC0tYXZvaWQ9Y2xvc2UgXAogIyAgLS1hdm9pZD1kdXAgXAogIyAgLS1hdm9pZD1mY2hk aXIgXAogIyAgLS1hdm9pZD1mc3RhdCBcCisjICAtLWF2b2lkPWxhbmdpbmZvIFwKKyMgIC0t YXZvaWQ9bG9jayBcCiAjICAtLWF2b2lkPW1hbGxvYy1wb3NpeCBcCisjICAtLWF2b2lkPW1i cnRvd2MgXAorIyAgLS1hdm9pZD1tYnNpbml0IFwKICMgIC0tYXZvaWQ9bXN2Yy1pbnZhbCBc CiAjICAtLWF2b2lkPW1zdmMtbm90aHJvdyBcCisjICAtLWF2b2lkPW5sX2xhbmdpbmZvIFwK ICMgIC0tYXZvaWQ9b3BlbmF0LWRpZSBcCiAjICAtLWF2b2lkPW9wZW5kaXIgXAogIyAgLS1h dm9pZD1yYWlzZSBcCkBAIC01Niw2ICs2Miw5IEBACiAjICAtLWF2b2lkPXVuc2V0ZW52IFwK ICMgIC0tYXZvaWQ9dXRpbWUgXAogIyAgLS1hdm9pZD11dGltZS1oIFwKKyMgIC0tYXZvaWQ9 d2NoYXIgXAorIyAgLS1hdm9pZD13Y3J0b21iIFwKKyMgIC0tYXZvaWQ9d2N0eXBlLWggXAog IyAgYWxsb2NhLW9wdCBcCiAjICBiaW5hcnktaW8gXAogIyAgYnl0ZXN3YXAgXApAQCAtMTEy LDYgKzEyMSw3IEBACiAjICBxY29weS1hY2wgXAogIyAgcmVhZGxpbmsgXAogIyAgcmVhZGxp bmthdCBcCisjICByZWdleCBcCiAjICBzaWcyc3RyIFwKICMgIHNvY2tsZW4gXAogIyAgc3Rh dC10aW1lIFwKQEAgLTIxNSw2ICsyMjUsNyBAQCBHRVRPUFRfQ0RFRlNfSCA9IEBHRVRPUFRf Q0RFRlNfSEAKIEdFVE9QVF9IID0gQEdFVE9QVF9IQAogR0ZJTEVOT1RJRllfQ0ZMQUdTID0g QEdGSUxFTk9USUZZX0NGTEFHU0AKIEdGSUxFTk9USUZZX0xJQlMgPSBAR0ZJTEVOT1RJRllf TElCU0AKK0dMSUJDMjEgPSBAR0xJQkMyMUAKIEdMX0NPTkRfTElCVE9PTCA9IEBHTF9DT05E X0xJQlRPT0xACiBHTF9HRU5FUkFURV9BTExPQ0FfSCA9IEBHTF9HRU5FUkFURV9BTExPQ0Ff SEAKIEdMX0dFTkVSQVRFX0JZVEVTV0FQX0ggPSBAR0xfR0VORVJBVEVfQllURVNXQVBfSEAK QEAgLTEwMjEsNiArMTAzMiw3IEBAIGdhbWV1c2VyID0gQGdhbWV1c2VyQAogZ2xfR05VTElC X0VOQUJMRURfMDNlMGFhYWQ0Y2I4OWNhNzU3NjUzYmQzNjdhNmNjYjcgPSBAZ2xfR05VTElC X0VOQUJMRURfMDNlMGFhYWQ0Y2I4OWNhNzU3NjUzYmQzNjdhNmNjYjdACiBnbF9HTlVMSUJf RU5BQkxFRF8yMDQ5ZTg4N2M3ZTUzMDhmYWFkMjdiM2Y4OTRiYjhjOSA9IEBnbF9HTlVMSUJf RU5BQkxFRF8yMDQ5ZTg4N2M3ZTUzMDhmYWFkMjdiM2Y4OTRiYjhjOUAKIGdsX0dOVUxJQl9F TkFCTEVEXzI2MDk0MWMwZTVkYzY3ZWM5ZTg3ZDFmYjMyMWMzMDBiID0gQGdsX0dOVUxJQl9F TkFCTEVEXzI2MDk0MWMwZTVkYzY3ZWM5ZTg3ZDFmYjMyMWMzMDBiQAorZ2xfR05VTElCX0VO QUJMRURfMzdmNzFiNjA0YWE5YzU0NDQ2NzgzZDgwZjQyZmU1NDcgPSBAZ2xfR05VTElCX0VO QUJMRURfMzdmNzFiNjA0YWE5YzU0NDQ2NzgzZDgwZjQyZmU1NDdACiBnbF9HTlVMSUJfRU5B QkxFRF81MjY0Mjk0YWEwYTU1NTc1NDFiNTNjOGM3NDFmN2YzMSA9IEBnbF9HTlVMSUJfRU5B QkxFRF81MjY0Mjk0YWEwYTU1NTc1NDFiNTNjOGM3NDFmN2YzMUAKIGdsX0dOVUxJQl9FTkFC TEVEXzYwOTllOTczN2Y3NTdkYjM2YzQ3ZmE5ZDlmMDJlODhjID0gQGdsX0dOVUxJQl9FTkFC TEVEXzYwOTllOTczN2Y3NTdkYjM2YzQ3ZmE5ZDlmMDJlODhjQAogZ2xfR05VTElCX0VOQUJM RURfNjgyZTYwOTYwNGNjYWFjNmJlMzgyZTRlZTNhNGVhZWMgPSBAZ2xfR05VTElCX0VOQUJM RURfNjgyZTYwOTYwNGNjYWFjNmJlMzgyZTRlZTNhNGVhZWNACkBAIC0yMDY2LDYgKzIwNzgs MTcgQEAgRVhUUkFfbGliZ251X2FfU09VUkNFUyArPSBhdC1mdW5jLmMgcmVhZGxpbmthdC5j CiBlbmRpZgogIyMgZW5kICAgZ251bGliIG1vZHVsZSByZWFkbGlua2F0CiAKKyMjIGJlZ2lu IGdudWxpYiBtb2R1bGUgcmVnZXgKK2lmZXEgKCwkKE9NSVRfR05VTElCX01PRFVMRV9yZWdl eCkpCisKKworRVhUUkFfRElTVCArPSByZWdjb21wLmMgcmVnZXguYyByZWdleC5oIHJlZ2V4 X2ludGVybmFsLmMgcmVnZXhfaW50ZXJuYWwuaCByZWdleGVjLmMKKworRVhUUkFfbGliZ251 X2FfU09VUkNFUyArPSByZWdjb21wLmMgcmVnZXguYyByZWdleF9pbnRlcm5hbC5jIHJlZ2V4 ZWMuYworCitlbmRpZgorIyMgZW5kICAgZ251bGliIG1vZHVsZSByZWdleAorCiAjIyBiZWdp biBnbnVsaWIgbW9kdWxlIHJvb3QtdWlkCiBpZmVxICgsJChPTUlUX0dOVUxJQl9NT0RVTEVf cm9vdC11aWQpKQogCmRpZmYgLS1naXQgYS9saWIvcmVnY29tcC5jIGIvbGliL3JlZ2NvbXAu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi41M2ViMjI2Mzc0Ci0t LSAvZGV2L251bGwKKysrIGIvbGliL3JlZ2NvbXAuYwpAQCAtMCwwICsxLDM5NDQgQEAKKy8q IEV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBhbmQgc2VhcmNoIGxpYnJh cnkuCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5Lgor ICAgQ29udHJpYnV0ZWQgYnkgSXNhbXUgSGFzZWdhd2EgPGlzYW11QHlhbWF0by5pYm0uY29t Pi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg ICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGlj ZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAgPGh0 dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZmRlZiBfTElCQworIyBp bmNsdWRlIDxsb2NhbGUvd2VpZ2h0Lmg+CisjZW5kaWYKKworc3RhdGljIHJlZ19lcnJjb2Rl X3QgcmVfY29tcGlsZV9pbnRlcm5hbCAocmVnZXhfdCAqcHJlZywgY29uc3QgY2hhciAqIHBh dHRlcm4sCisJCQkJCSAgc2l6ZV90IGxlbmd0aCwgcmVnX3N5bnRheF90IHN5bnRheCk7Citz dGF0aWMgdm9pZCByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAocmVnZXhfdCAqYnVmcCwKKwkJ CQkgICAgIGNvbnN0IHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGUsCisJCQkJICAgICBjaGFy ICpmYXN0bWFwKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGluaXRfZGZhIChyZV9kZmFfdCAq ZGZhLCBzaXplX3QgcGF0X2xlbik7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3N0YXRpYyB2 b2lkIGZyZWVfY2hhcnNldCAocmVfY2hhcnNldF90ICpjc2V0KTsKKyNlbmRpZiAvKiBSRV9F TkFCTEVfSTE4TiAqLworc3RhdGljIHZvaWQgZnJlZV93b3JrYXJlYV9jb21waWxlIChyZWdl eF90ICpwcmVnKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNyZWF0ZV9pbml0aWFsX3N0YXRl IChyZV9kZmFfdCAqZGZhKTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIHZvaWQg b3B0aW1pemVfdXRmOCAocmVfZGZhX3QgKmRmYSk7CisjZW5kaWYKK3N0YXRpYyByZWdfZXJy Y29kZV90IGFuYWx5emUgKHJlZ2V4X3QgKnByZWcpOworc3RhdGljIHJlZ19lcnJjb2RlX3Qg cHJlb3JkZXIgKGJpbl90cmVlX3QgKnJvb3QsCisJCQkgICAgICAgcmVnX2VycmNvZGVfdCAo Zm4gKHZvaWQgKiwgYmluX3RyZWVfdCAqKSksCisJCQkgICAgICAgdm9pZCAqZXh0cmEpOwor c3RhdGljIHJlZ19lcnJjb2RlX3QgcG9zdG9yZGVyIChiaW5fdHJlZV90ICpyb290LAorCQkJ CXJlZ19lcnJjb2RlX3QgKGZuICh2b2lkICosIGJpbl90cmVlX3QgKikpLAorCQkJCXZvaWQg KmV4dHJhKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IG9wdGltaXplX3N1YmV4cHMgKHZvaWQg KmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGxvd2Vy X3N1YmV4cHMgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKTsKK3N0YXRpYyBiaW5f dHJlZV90ICpsb3dlcl9zdWJleHAgKHJlZ19lcnJjb2RlX3QgKmVyciwgcmVnZXhfdCAqcHJl ZywKKwkJCQkgYmluX3RyZWVfdCAqbm9kZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjYWxj X2ZpcnN0ICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSk7CitzdGF0aWMgcmVnX2Vy cmNvZGVfdCBjYWxjX25leHQgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKTsKK3N0 YXRpYyByZWdfZXJyY29kZV90IGxpbmtfbmZhX25vZGVzICh2b2lkICpleHRyYSwgYmluX3Ry ZWVfdCAqbm9kZSk7CitzdGF0aWMgSWR4IGR1cGxpY2F0ZV9ub2RlIChyZV9kZmFfdCAqZGZh LCBJZHggb3JnX2lkeCwgdW5zaWduZWQgaW50IGNvbnN0cmFpbnQpOworc3RhdGljIElkeCBz ZWFyY2hfZHVwbGljYXRlZF9ub2RlIChjb25zdCByZV9kZmFfdCAqZGZhLCBJZHggb3JnX25v ZGUsCisJCQkJICAgdW5zaWduZWQgaW50IGNvbnN0cmFpbnQpOworc3RhdGljIHJlZ19lcnJj b2RlX3QgY2FsY19lY2xvc3VyZSAocmVfZGZhX3QgKmRmYSk7CitzdGF0aWMgcmVnX2VycmNv ZGVfdCBjYWxjX2VjbG9zdXJlX2l0ZXIgKHJlX25vZGVfc2V0ICpuZXdfc2V0LCByZV9kZmFf dCAqZGZhLAorCQkJCQkgSWR4IG5vZGUsIGJvb2wgcm9vdCk7CitzdGF0aWMgcmVnX2VycmNv ZGVfdCBjYWxjX2ludmVjbG9zdXJlIChyZV9kZmFfdCAqZGZhKTsKK3N0YXRpYyBJZHggZmV0 Y2hfbnVtYmVyIChyZV9zdHJpbmdfdCAqaW5wdXQsIHJlX3Rva2VuX3QgKnRva2VuLAorCQkJ IHJlZ19zeW50YXhfdCBzeW50YXgpOworc3RhdGljIGludCBwZWVrX3Rva2VuIChyZV90b2tl bl90ICp0b2tlbiwgcmVfc3RyaW5nX3QgKmlucHV0LAorCQkJcmVnX3N5bnRheF90IHN5bnRh eCk7CitzdGF0aWMgYmluX3RyZWVfdCAqcGFyc2UgKHJlX3N0cmluZ190ICpyZWdleHAsIHJl Z2V4X3QgKnByZWcsCisJCQkgIHJlZ19zeW50YXhfdCBzeW50YXgsIHJlZ19lcnJjb2RlX3Qg KmVycik7CitzdGF0aWMgYmluX3RyZWVfdCAqcGFyc2VfcmVnX2V4cCAocmVfc3RyaW5nX3Qg KnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywKKwkJCQkgIHJlX3Rva2VuX3QgKnRva2VuLCByZWdf c3ludGF4X3Qgc3ludGF4LAorCQkJCSAgSWR4IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycik7 CitzdGF0aWMgYmluX3RyZWVfdCAqcGFyc2VfYnJhbmNoIChyZV9zdHJpbmdfdCAqcmVnZXhw LCByZWdleF90ICpwcmVnLAorCQkJCSByZV90b2tlbl90ICp0b2tlbiwgcmVnX3N5bnRheF90 IHN5bnRheCwKKwkJCQkgSWR4IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycik7CitzdGF0aWMg YmluX3RyZWVfdCAqcGFyc2VfZXhwcmVzc2lvbiAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVn ZXhfdCAqcHJlZywKKwkJCQkgICAgIHJlX3Rva2VuX3QgKnRva2VuLCByZWdfc3ludGF4X3Qg c3ludGF4LAorCQkJCSAgICAgSWR4IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycik7CitzdGF0 aWMgYmluX3RyZWVfdCAqcGFyc2Vfc3ViX2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVn ZXhfdCAqcHJlZywKKwkJCQkgIHJlX3Rva2VuX3QgKnRva2VuLCByZWdfc3ludGF4X3Qgc3lu dGF4LAorCQkJCSAgSWR4IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycik7CitzdGF0aWMgYmlu X3RyZWVfdCAqcGFyc2VfZHVwX29wIChiaW5fdHJlZV90ICpkdXBfZWxlbSwgcmVfc3RyaW5n X3QgKnJlZ2V4cCwKKwkJCQkgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisJ CQkJIHJlZ19zeW50YXhfdCBzeW50YXgsIHJlZ19lcnJjb2RlX3QgKmVycik7CitzdGF0aWMg YmluX3RyZWVfdCAqcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJl X2RmYV90ICpkZmEsCisJCQkJICAgICAgcmVfdG9rZW5fdCAqdG9rZW4sIHJlZ19zeW50YXhf dCBzeW50YXgsCisJCQkJICAgICAgcmVnX2VycmNvZGVfdCAqZXJyKTsKK3N0YXRpYyByZWdf ZXJyY29kZV90IHBhcnNlX2JyYWNrZXRfZWxlbWVudCAoYnJhY2tldF9lbGVtX3QgKmVsZW0s CisJCQkJCSAgICByZV9zdHJpbmdfdCAqcmVnZXhwLAorCQkJCQkgICAgcmVfdG9rZW5fdCAq dG9rZW4sIGludCB0b2tlbl9sZW4sCisJCQkJCSAgICByZV9kZmFfdCAqZGZhLAorCQkJCQkg ICAgcmVnX3N5bnRheF90IHN5bnRheCwKKwkJCQkJICAgIGJvb2wgYWNjZXB0X2h5cGhlbik7 CitzdGF0aWMgcmVnX2VycmNvZGVfdCBwYXJzZV9icmFja2V0X3N5bWJvbCAoYnJhY2tldF9l bGVtX3QgKmVsZW0sCisJCQkJCSAgcmVfc3RyaW5nX3QgKnJlZ2V4cCwKKwkJCQkJICByZV90 b2tlbl90ICp0b2tlbik7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3N0YXRpYyByZWdfZXJy Y29kZV90IGJ1aWxkX2VxdWl2X2NsYXNzIChiaXRzZXRfdCBzYmNzZXQsCisJCQkJCXJlX2No YXJzZXRfdCAqbWJjc2V0LAorCQkJCQlJZHggKmVxdWl2X2NsYXNzX2FsbG9jLAorCQkJCQlj b25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGJ1aWxk X2NoYXJjbGFzcyAoUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsCisJCQkJICAgICAgYml0c2V0 X3Qgc2Jjc2V0LAorCQkJCSAgICAgIHJlX2NoYXJzZXRfdCAqbWJjc2V0LAorCQkJCSAgICAg IElkeCAqY2hhcl9jbGFzc19hbGxvYywKKwkJCQkgICAgICBjb25zdCBjaGFyICpjbGFzc19u YW1lLAorCQkJCSAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgpOworI2Vsc2UgIC8qIG5vdCBS RV9FTkFCTEVfSTE4TiAqLworc3RhdGljIHJlZ19lcnJjb2RlX3QgYnVpbGRfZXF1aXZfY2xh c3MgKGJpdHNldF90IHNiY3NldCwKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSk7 CitzdGF0aWMgcmVnX2VycmNvZGVfdCBidWlsZF9jaGFyY2xhc3MgKFJFX1RSQU5TTEFURV9U WVBFIHRyYW5zLAorCQkJCSAgICAgIGJpdHNldF90IHNiY3NldCwKKwkJCQkgICAgICBjb25z dCBjaGFyICpjbGFzc19uYW1lLAorCQkJCSAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgpOwor I2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworc3RhdGljIGJpbl90cmVlX3QgKmJ1 aWxkX2NoYXJjbGFzc19vcCAocmVfZGZhX3QgKmRmYSwKKwkJCQkgICAgICAgUkVfVFJBTlNM QVRFX1RZUEUgdHJhbnMsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmNsYXNzX25hbWUsCisJ CQkJICAgICAgIGNvbnN0IGNoYXIgKmV4dHJhLAorCQkJCSAgICAgICBib29sIG5vbl9tYXRj aCwgcmVnX2VycmNvZGVfdCAqZXJyKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpjcmVhdGVfdHJl ZSAocmVfZGZhX3QgKmRmYSwKKwkJCQliaW5fdHJlZV90ICpsZWZ0LCBiaW5fdHJlZV90ICpy aWdodCwKKwkJCQlyZV90b2tlbl90eXBlX3QgdHlwZSk7CitzdGF0aWMgYmluX3RyZWVfdCAq Y3JlYXRlX3Rva2VuX3RyZWUgKHJlX2RmYV90ICpkZmEsCisJCQkJICAgICAgYmluX3RyZWVf dCAqbGVmdCwgYmluX3RyZWVfdCAqcmlnaHQsCisJCQkJICAgICAgY29uc3QgcmVfdG9rZW5f dCAqdG9rZW4pOworc3RhdGljIGJpbl90cmVlX3QgKmR1cGxpY2F0ZV90cmVlIChjb25zdCBi aW5fdHJlZV90ICpzcmMsIHJlX2RmYV90ICpkZmEpOworc3RhdGljIHZvaWQgZnJlZV90b2tl biAocmVfdG9rZW5fdCAqbm9kZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBmcmVlX3RyZWUg KHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKTsKK3N0YXRpYyByZWdfZXJyY29kZV90 IG1hcmtfb3B0X3N1YmV4cCAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpOworDAor LyogVGhpcyB0YWJsZSBnaXZlcyBhbiBlcnJvciBtZXNzYWdlIGZvciBlYWNoIG9mIHRoZSBl cnJvciBjb2RlcyBsaXN0ZWQKKyAgIGluIHJlZ2V4LmguICBPYnZpb3VzbHkgdGhlIG9yZGVy IGhlcmUgaGFzIHRvIGJlIHNhbWUgYXMgdGhlcmUuCisgICBQT1NJWCBkb2Vzbid0IHJlcXVp cmUgdGhhdCB3ZSBkbyBhbnl0aGluZyBmb3IgUkVHX05PRVJST1IsCisgICBidXQgd2h5IG5v dCBiZSBuaWNlPyAgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgX19yZV9lcnJvcl9tc2dpZFtd ID0KKyAgeworI2RlZmluZSBSRUdfTk9FUlJPUl9JRFgJMAorICAgIGdldHRleHRfbm9vcCAo IlN1Y2Nlc3MiKQkvKiBSRUdfTk9FUlJPUiAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX05P TUFUQ0hfSURYIChSRUdfTk9FUlJPUl9JRFggKyBzaXplb2YgIlN1Y2Nlc3MiKQorICAgIGdl dHRleHRfbm9vcCAoIk5vIG1hdGNoIikJLyogUkVHX05PTUFUQ0ggKi8KKyAgICAiXDAiCisj ZGVmaW5lIFJFR19CQURQQVRfSURYCShSRUdfTk9NQVRDSF9JRFggKyBzaXplb2YgIk5vIG1h dGNoIikKKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiIp IC8qIFJFR19CQURQQVQgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FQ09MTEFURV9JRFgg KFJFR19CQURQQVRfSURYICsgc2l6ZW9mICJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiIp CisgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIikgLyog UkVHX0VDT0xMQVRFICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfRUNUWVBFX0lEWAkoUkVH X0VDT0xMQVRFX0lEWCArIHNpemVvZiAiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIikK KyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lIikgLyog UkVHX0VDVFlQRSAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VFU0NBUEVfSURYCShSRUdf RUNUWVBFX0lEWCArIHNpemVvZiAiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIpCisg ICAgZ2V0dGV4dF9ub29wICgiVHJhaWxpbmcgYmFja3NsYXNoIikgLyogUkVHX0VFU0NBUEUg Ki8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FU1VCUkVHX0lEWAkoUkVHX0VFU0NBUEVfSURY ICsgc2l6ZW9mICJUcmFpbGluZyBiYWNrc2xhc2giKQorICAgIGdldHRleHRfbm9vcCAoIklu dmFsaWQgYmFjayByZWZlcmVuY2UiKSAvKiBSRUdfRVNVQlJFRyAqLworICAgICJcMCIKKyNk ZWZpbmUgUkVHX0VCUkFDS19JRFgJKFJFR19FU1VCUkVHX0lEWCArIHNpemVvZiAiSW52YWxp ZCBiYWNrIHJlZmVyZW5jZSIpCisgICAgZ2V0dGV4dF9ub29wICgiVW5tYXRjaGVkIFssIFte LCBbOiwgWy4sIG9yIFs9IikJLyogUkVHX0VCUkFDSyAqLworICAgICJcMCIKKyNkZWZpbmUg UkVHX0VQQVJFTl9JRFgJKFJFR19FQlJBQ0tfSURYICsgc2l6ZW9mICJVbm1hdGNoZWQgWywg W14sIFs6LCBbLiwgb3IgWz0iKQorICAgIGdldHRleHRfbm9vcCAoIlVubWF0Y2hlZCAoIG9y IFxcKCIpIC8qIFJFR19FUEFSRU4gKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FQlJBQ0Vf SURYCShSRUdfRVBBUkVOX0lEWCArIHNpemVvZiAiVW5tYXRjaGVkICggb3IgXFwoIikKKyAg ICBnZXR0ZXh0X25vb3AgKCJVbm1hdGNoZWQgXFx7IikgLyogUkVHX0VCUkFDRSAqLworICAg ICJcMCIKKyNkZWZpbmUgUkVHX0JBREJSX0lEWAkoUkVHX0VCUkFDRV9JRFggKyBzaXplb2Yg IlVubWF0Y2hlZCBcXHsiKQorICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgY29udGVudCBv ZiBcXHtcXH0iKSAvKiBSRUdfQkFEQlIgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FUkFO R0VfSURYCShSRUdfQkFEQlJfSURYICsgc2l6ZW9mICJJbnZhbGlkIGNvbnRlbnQgb2YgXFx7 XFx9IikKKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIHJhbmdlIGVuZCIpCS8qIFJFR19F UkFOR0UgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FU1BBQ0VfSURYCShSRUdfRVJBTkdF X0lEWCArIHNpemVvZiAiSW52YWxpZCByYW5nZSBlbmQiKQorICAgIGdldHRleHRfbm9vcCAo Ik1lbW9yeSBleGhhdXN0ZWQiKSAvKiBSRUdfRVNQQUNFICovCisgICAgIlwwIgorI2RlZmlu ZSBSRUdfQkFEUlBUX0lEWAkoUkVHX0VTUEFDRV9JRFggKyBzaXplb2YgIk1lbW9yeSBleGhh dXN0ZWQiKQorICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgcHJlY2VkaW5nIHJlZ3VsYXIg ZXhwcmVzc2lvbiIpIC8qIFJFR19CQURSUFQgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19F RU5EX0lEWAkoUkVHX0JBRFJQVF9JRFggKyBzaXplb2YgIkludmFsaWQgcHJlY2VkaW5nIHJl Z3VsYXIgZXhwcmVzc2lvbiIpCisgICAgZ2V0dGV4dF9ub29wICgiUHJlbWF0dXJlIGVuZCBv ZiByZWd1bGFyIGV4cHJlc3Npb24iKSAvKiBSRUdfRUVORCAqLworICAgICJcMCIKKyNkZWZp bmUgUkVHX0VTSVpFX0lEWAkoUkVHX0VFTkRfSURYICsgc2l6ZW9mICJQcmVtYXR1cmUgZW5k IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiIpCisgICAgZ2V0dGV4dF9ub29wICgiUmVndWxhciBl eHByZXNzaW9uIHRvbyBiaWciKSAvKiBSRUdfRVNJWkUgKi8KKyAgICAiXDAiCisjZGVmaW5l IFJFR19FUlBBUkVOX0lEWAkoUkVHX0VTSVpFX0lEWCArIHNpemVvZiAiUmVndWxhciBleHBy ZXNzaW9uIHRvbyBiaWciKQorICAgIGdldHRleHRfbm9vcCAoIlVubWF0Y2hlZCApIG9yIFxc KSIpIC8qIFJFR19FUlBBUkVOICovCisgIH07CisKK3N0YXRpYyBjb25zdCBzaXplX3QgX19y ZV9lcnJvcl9tc2dpZF9pZHhbXSA9CisgIHsKKyAgICBSRUdfTk9FUlJPUl9JRFgsCisgICAg UkVHX05PTUFUQ0hfSURYLAorICAgIFJFR19CQURQQVRfSURYLAorICAgIFJFR19FQ09MTEFU RV9JRFgsCisgICAgUkVHX0VDVFlQRV9JRFgsCisgICAgUkVHX0VFU0NBUEVfSURYLAorICAg IFJFR19FU1VCUkVHX0lEWCwKKyAgICBSRUdfRUJSQUNLX0lEWCwKKyAgICBSRUdfRVBBUkVO X0lEWCwKKyAgICBSRUdfRUJSQUNFX0lEWCwKKyAgICBSRUdfQkFEQlJfSURYLAorICAgIFJF R19FUkFOR0VfSURYLAorICAgIFJFR19FU1BBQ0VfSURYLAorICAgIFJFR19CQURSUFRfSURY LAorICAgIFJFR19FRU5EX0lEWCwKKyAgICBSRUdfRVNJWkVfSURYLAorICAgIFJFR19FUlBB UkVOX0lEWAorICB9OworDAorLyogRW50cnkgcG9pbnRzIGZvciBHTlUgY29kZS4gICovCisK Ky8qIHJlX2NvbXBpbGVfcGF0dGVybiBpcyB0aGUgR05VIHJlZ3VsYXIgZXhwcmVzc2lvbiBj b21waWxlcjogaXQKKyAgIGNvbXBpbGVzIFBBVFRFUk4gKG9mIGxlbmd0aCBMRU5HVEgpIGFu ZCBwdXRzIHRoZSByZXN1bHQgaW4gQlVGUC4KKyAgIFJldHVybnMgMCBpZiB0aGUgcGF0dGVy biB3YXMgdmFsaWQsIG90aGVyd2lzZSBhbiBlcnJvciBzdHJpbmcuCisKKyAgIEFzc3VtZXMg dGhlICdhbGxvY2F0ZWQnIChhbmQgcGVyaGFwcyAnYnVmZmVyJykgYW5kICd0cmFuc2xhdGUn IGZpZWxkcworICAgYXJlIHNldCBpbiBCVUZQIG9uIGVudHJ5LiAgKi8KKworY29uc3QgY2hh ciAqCityZV9jb21waWxlX3BhdHRlcm4gKGNvbnN0IGNoYXIgKnBhdHRlcm4sIHNpemVfdCBs ZW5ndGgsCisJCSAgICBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApCit7CisgIHJl Z19lcnJjb2RlX3QgcmV0OworCisgIC8qIEFuZCBHTlUgY29kZSBkZXRlcm1pbmVzIHdoZXRo ZXIgb3Igbm90IHRvIGdldCByZWdpc3RlciBpbmZvcm1hdGlvbgorICAgICBieSBwYXNzaW5n IG51bGwgZm9yIHRoZSBSRUdTIGFyZ3VtZW50IHRvIHJlX21hdGNoLCBldGMuLCBub3QgYnkK KyAgICAgc2V0dGluZyBub19zdWIsIHVubGVzcyBSRV9OT19TVUIgaXMgc2V0LiAgKi8KKyAg YnVmcC0+bm9fc3ViID0gISEocmVfc3ludGF4X29wdGlvbnMgJiBSRV9OT19TVUIpOworCisg IC8qIE1hdGNoIGFuY2hvcnMgYXQgbmV3bGluZS4gICovCisgIGJ1ZnAtPm5ld2xpbmVfYW5j aG9yID0gMTsKKworICByZXQgPSByZV9jb21waWxlX2ludGVybmFsIChidWZwLCBwYXR0ZXJu LCBsZW5ndGgsIHJlX3N5bnRheF9vcHRpb25zKTsKKworICBpZiAoIXJldCkKKyAgICByZXR1 cm4gTlVMTDsKKyAgcmV0dXJuIGdldHRleHQgKF9fcmVfZXJyb3JfbXNnaWQgKyBfX3JlX2Vy cm9yX21zZ2lkX2lkeFsoaW50KSByZXRdKTsKK30KKyNpZmRlZiBfTElCQword2Vha19hbGlh cyAoX19yZV9jb21waWxlX3BhdHRlcm4sIHJlX2NvbXBpbGVfcGF0dGVybikKKyNlbmRpZgor CisvKiBTZXQgYnkgJ3JlX3NldF9zeW50YXgnIHRvIHRoZSBjdXJyZW50IHJlZ2V4cCBzeW50 YXggdG8gcmVjb2duaXplLiAgQ2FuCisgICBhbHNvIGJlIGFzc2lnbmVkIHRvIGFyYml0cmFy aWx5OiBlYWNoIHBhdHRlcm4gYnVmZmVyIHN0b3JlcyBpdHMgb3duCisgICBzeW50YXgsIHNv IGl0IGNhbiBiZSBjaGFuZ2VkIGJldHdlZW4gcmVnZXggY29tcGlsYXRpb25zLiAgKi8KKy8q IFRoaXMgaGFzIG5vIGluaXRpYWxpemVyIGJlY2F1c2UgaW5pdGlhbGl6ZWQgdmFyaWFibGVz IGluIEVtYWNzCisgICBiZWNvbWUgcmVhZC1vbmx5IGFmdGVyIGR1bXBpbmcuICAqLworcmVn X3N5bnRheF90IHJlX3N5bnRheF9vcHRpb25zOworCisKKy8qIFNwZWNpZnkgdGhlIHByZWNp c2Ugc3ludGF4IG9mIHJlZ2V4cHMgZm9yIGNvbXBpbGF0aW9uLiAgVGhpcyBwcm92aWRlcwor ICAgZm9yIGNvbXBhdGliaWxpdHkgZm9yIHZhcmlvdXMgdXRpbGl0aWVzIHdoaWNoIGhpc3Rv cmljYWxseSBoYXZlCisgICBkaWZmZXJlbnQsIGluY29tcGF0aWJsZSBzeW50YXhlcy4KKwor ICAgVGhlIGFyZ3VtZW50IFNZTlRBWCBpcyBhIGJpdCBtYXNrIGNvbXByaXNlZCBvZiB0aGUg dmFyaW91cyBiaXRzCisgICBkZWZpbmVkIGluIHJlZ2V4LmguICBXZSByZXR1cm4gdGhlIG9s ZCBzeW50YXguICAqLworCityZWdfc3ludGF4X3QKK3JlX3NldF9zeW50YXggKHJlZ19zeW50 YXhfdCBzeW50YXgpCit7CisgIHJlZ19zeW50YXhfdCByZXQgPSByZV9zeW50YXhfb3B0aW9u czsKKworICByZV9zeW50YXhfb3B0aW9ucyA9IHN5bnRheDsKKyAgcmV0dXJuIHJldDsKK30K KyNpZmRlZiBfTElCQword2Vha19hbGlhcyAoX19yZV9zZXRfc3ludGF4LCByZV9zZXRfc3lu dGF4KQorI2VuZGlmCisKK2ludAorcmVfY29tcGlsZV9mYXN0bWFwIChzdHJ1Y3QgcmVfcGF0 dGVybl9idWZmZXIgKmJ1ZnApCit7CisgIHJlX2RmYV90ICpkZmEgPSBidWZwLT5idWZmZXI7 CisgIGNoYXIgKmZhc3RtYXAgPSBidWZwLT5mYXN0bWFwOworCisgIG1lbXNldCAoZmFzdG1h cCwgJ1wwJywgc2l6ZW9mIChjaGFyKSAqIFNCQ19NQVgpOworICByZV9jb21waWxlX2Zhc3Rt YXBfaXRlciAoYnVmcCwgZGZhLT5pbml0X3N0YXRlLCBmYXN0bWFwKTsKKyAgaWYgKGRmYS0+ aW5pdF9zdGF0ZSAhPSBkZmEtPmluaXRfc3RhdGVfd29yZCkKKyAgICByZV9jb21waWxlX2Zh c3RtYXBfaXRlciAoYnVmcCwgZGZhLT5pbml0X3N0YXRlX3dvcmQsIGZhc3RtYXApOworICBp ZiAoZGZhLT5pbml0X3N0YXRlICE9IGRmYS0+aW5pdF9zdGF0ZV9ubCkKKyAgICByZV9jb21w aWxlX2Zhc3RtYXBfaXRlciAoYnVmcCwgZGZhLT5pbml0X3N0YXRlX25sLCBmYXN0bWFwKTsK KyAgaWYgKGRmYS0+aW5pdF9zdGF0ZSAhPSBkZmEtPmluaXRfc3RhdGVfYmVnYnVmKQorICAg IHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChidWZwLCBkZmEtPmluaXRfc3RhdGVfYmVnYnVm LCBmYXN0bWFwKTsKKyAgYnVmcC0+ZmFzdG1hcF9hY2N1cmF0ZSA9IDE7CisgIHJldHVybiAw OworfQorI2lmZGVmIF9MSUJDCit3ZWFrX2FsaWFzIChfX3JlX2NvbXBpbGVfZmFzdG1hcCwg cmVfY29tcGlsZV9mYXN0bWFwKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19h dHRyaWJ1dGVfXyAoKGFsd2F5c19pbmxpbmUpKQorcmVfc2V0X2Zhc3RtYXAgKGNoYXIgKmZh c3RtYXAsIGJvb2wgaWNhc2UsIGludCBjaCkKK3sKKyAgZmFzdG1hcFtjaF0gPSAxOworICBp ZiAoaWNhc2UpCisgICAgZmFzdG1hcFt0b2xvd2VyIChjaCldID0gMTsKK30KKworLyogSGVs cGVyIGZ1bmN0aW9uIGZvciByZV9jb21waWxlX2Zhc3RtYXAuCisgICBDb21waWxlIGZhc3Rt YXAgZm9yIHRoZSBpbml0aWFsX3N0YXRlIElOSVRfU1RBVEUuICAqLworCitzdGF0aWMgdm9p ZAorcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKHJlZ2V4X3QgKmJ1ZnAsIGNvbnN0IHJlX2Rm YXN0YXRlX3QgKmluaXRfc3RhdGUsCisJCQkgY2hhciAqZmFzdG1hcCkKK3sKKyAgcmVfZGZh X3QgKmRmYSA9IGJ1ZnAtPmJ1ZmZlcjsKKyAgSWR4IG5vZGVfY250OworICBib29sIGljYXNl ID0gKGRmYS0+bWJfY3VyX21heCA9PSAxICYmIChidWZwLT5zeW50YXggJiBSRV9JQ0FTRSkp OworICBmb3IgKG5vZGVfY250ID0gMDsgbm9kZV9jbnQgPCBpbml0X3N0YXRlLT5ub2Rlcy5u ZWxlbTsgKytub2RlX2NudCkKKyAgICB7CisgICAgICBJZHggbm9kZSA9IGluaXRfc3RhdGUt Pm5vZGVzLmVsZW1zW25vZGVfY250XTsKKyAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlID0g ZGZhLT5ub2Rlc1tub2RlXS50eXBlOworCisgICAgICBpZiAodHlwZSA9PSBDSEFSQUNURVIp CisJeworCSAgcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIGljYXNlLCBkZmEtPm5vZGVzW25v ZGVdLm9wci5jKTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCSAgaWYgKChidWZwLT5zeW50 YXggJiBSRV9JQ0FTRSkgJiYgZGZhLT5tYl9jdXJfbWF4ID4gMSkKKwkgICAgeworCSAgICAg IHVuc2lnbmVkIGNoYXIgYnVmW01CX0xFTl9NQVhdOworCSAgICAgIHVuc2lnbmVkIGNoYXIg KnA7CisJICAgICAgd2NoYXJfdCB3YzsKKwkgICAgICBtYnN0YXRlX3Qgc3RhdGU7CisKKwkg ICAgICBwID0gYnVmOworCSAgICAgICpwKysgPSBkZmEtPm5vZGVzW25vZGVdLm9wci5jOwor CSAgICAgIHdoaWxlICgrK25vZGUgPCBkZmEtPm5vZGVzX2xlbgorCQkgICAgICYmCWRmYS0+ bm9kZXNbbm9kZV0udHlwZSA9PSBDSEFSQUNURVIKKwkJICAgICAmJiBkZmEtPm5vZGVzW25v ZGVdLm1iX3BhcnRpYWwpCisJCSpwKysgPSBkZmEtPm5vZGVzW25vZGVdLm9wci5jOworCSAg ICAgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKHN0YXRlKSk7CisJICAgICAgaWYg KF9fbWJydG93YyAoJndjLCAoY29uc3QgY2hhciAqKSBidWYsIHAgLSBidWYsCisJCQkgICAg ICZzdGF0ZSkgPT0gcCAtIGJ1ZgorCQkgICYmIChfX3djcnRvbWIgKChjaGFyICopIGJ1Ziwg X190b3dsb3dlciAod2MpLCAmc3RhdGUpCisJCSAgICAgICE9IChzaXplX3QpIC0xKSkKKwkJ cmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIGZhbHNlLCBidWZbMF0pOworCSAgICB9CisjZW5k aWYKKwl9CisgICAgICBlbHNlIGlmICh0eXBlID09IFNJTVBMRV9CUkFDS0VUKQorCXsKKwkg IGludCBpLCBjaDsKKwkgIGZvciAoaSA9IDAsIGNoID0gMDsgaSA8IEJJVFNFVF9XT1JEUzsg KytpKQorCSAgICB7CisJICAgICAgaW50IGo7CisJICAgICAgYml0c2V0X3dvcmRfdCB3ID0g ZGZhLT5ub2Rlc1tub2RlXS5vcHIuc2Jjc2V0W2ldOworCSAgICAgIGZvciAoaiA9IDA7IGog PCBCSVRTRVRfV09SRF9CSVRTOyArK2osICsrY2gpCisJCWlmICh3ICYgKChiaXRzZXRfd29y ZF90KSAxIDw8IGopKQorCQkgIHJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBpY2FzZSwgY2gp OworCSAgICB9CisJfQorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBlbHNlIGlmICh0 eXBlID09IENPTVBMRVhfQlJBQ0tFVCkKKwl7CisJICByZV9jaGFyc2V0X3QgKmNzZXQgPSBk ZmEtPm5vZGVzW25vZGVdLm9wci5tYmNzZXQ7CisJICBJZHggaTsKKworIyBpZmRlZiBfTElC QworCSAgLyogU2VlIGlmIHdlIGhhdmUgdG8gdHJ5IGFsbCBieXRlcyB3aGljaCBzdGFydCBt dWx0aXBsZSBjb2xsYXRpb24KKwkgICAgIGVsZW1lbnRzLgorCSAgICAgZS5nLiBJbiBkYV9E Sywgd2Ugd2FudCB0byBjYXRjaCAnYScgc2luY2UgImFhIiBpcyBhIHZhbGlkCisJCSAgY29s bGF0aW9uIGVsZW1lbnQsIGFuZCBkb24ndCBjYXRjaCAnYicgc2luY2UgJ2InIGlzCisJCSAg dGhlIG9ubHkgY29sbGF0aW9uIGVsZW1lbnQgd2hpY2ggc3RhcnRzIGZyb20gJ2InIChhbmQK KwkJICBpdCBpcyBjYXVnaHQgYnkgU0lNUExFX0JSQUNLRVQpLiAgKi8KKwkgICAgICBpZiAo X05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKSAhPSAw CisJCSAgJiYgKGNzZXQtPm5jb2xsX3N5bXMgfHwgY3NldC0+bnJhbmdlcykpCisJCXsKKwkJ ICBjb25zdCBpbnQzMl90ICp0YWJsZSA9IChjb25zdCBpbnQzMl90ICopCisJCSAgICBfTkxf Q1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfVEFCTEVNQik7CisJCSAgZm9yIChp ID0gMDsgaSA8IFNCQ19NQVg7ICsraSkKKwkJICAgIGlmICh0YWJsZVtpXSA8IDApCisJCSAg ICAgIHJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBpY2FzZSwgaSk7CisJCX0KKyMgZW5kaWYg LyogX0xJQkMgKi8KKworCSAgLyogU2VlIGlmIHdlIGhhdmUgdG8gc3RhcnQgdGhlIG1hdGNo IGF0IGFsbCBtdWx0aWJ5dGUgY2hhcmFjdGVycywKKwkgICAgIGkuZS4gd2hlcmUgd2Ugd291 bGQgbm90IGZpbmQgYW4gaW52YWxpZCBzZXF1ZW5jZS4gIFRoaXMgb25seQorCSAgICAgYXBw bGllcyB0byBtdWx0aWJ5dGUgY2hhcmFjdGVyIHNldHM7IGZvciBzaW5nbGUgYnl0ZSBjaGFy YWN0ZXIKKwkgICAgIHNldHMsIHRoZSBTSU1QTEVfQlJBQ0tFVCBhZ2FpbiBzdWZmaWNlcy4g ICovCisJICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMQorCSAgICAgICYmIChjc2V0LT5uY2hh cl9jbGFzc2VzIHx8IGNzZXQtPm5vbl9tYXRjaCB8fCBjc2V0LT5ucmFuZ2VzCisjIGlmZGVm IF9MSUJDCisJCSAgfHwgY3NldC0+bmVxdWl2X2NsYXNzZXMKKyMgZW5kaWYgLyogX0xJQkMg Ki8KKwkJICkpCisJICAgIHsKKwkgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAwOworCSAgICAg IGRvCisJCXsKKwkJICBtYnN0YXRlX3QgbWJzOworCQkgIG1lbXNldCAoJm1icywgMCwgc2l6 ZW9mIChtYnMpKTsKKwkJICBpZiAoX19tYnJ0b3djIChOVUxMLCAoY2hhciAqKSAmYywgMSwg Jm1icykgPT0gKHNpemVfdCkgLTIpCisJCSAgICByZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwg ZmFsc2UsIChpbnQpIGMpOworCQl9CisJICAgICAgd2hpbGUgKCsrYyAhPSAwKTsKKwkgICAg fQorCisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiAuLi4gRWxzZSBjYXRjaCBhbGwgYnl0 ZXMgd2hpY2ggY2FuIHN0YXJ0IHRoZSBtYmNoYXJzLiAgKi8KKwkgICAgICBmb3IgKGkgPSAw OyBpIDwgY3NldC0+bm1iY2hhcnM7ICsraSkKKwkJeworCQkgIGNoYXIgYnVmWzI1Nl07CisJ CSAgbWJzdGF0ZV90IHN0YXRlOworCQkgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2Yg KHN0YXRlKSk7CisJCSAgaWYgKF9fd2NydG9tYiAoYnVmLCBjc2V0LT5tYmNoYXJzW2ldLCAm c3RhdGUpICE9IChzaXplX3QpIC0xKQorCQkgICAgcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAs IGljYXNlLCAqKHVuc2lnbmVkIGNoYXIgKikgYnVmKTsKKwkJICBpZiAoKGJ1ZnAtPnN5bnRh eCAmIFJFX0lDQVNFKSAmJiBkZmEtPm1iX2N1cl9tYXggPiAxKQorCQkgICAgeworCQkgICAg ICBpZiAoX193Y3J0b21iIChidWYsIF9fdG93bG93ZXIgKGNzZXQtPm1iY2hhcnNbaV0pLCAm c3RhdGUpCisJCQkgICE9IChzaXplX3QpIC0xKQorCQkJcmVfc2V0X2Zhc3RtYXAgKGZhc3Rt YXAsIGZhbHNlLCAqKHVuc2lnbmVkIGNoYXIgKikgYnVmKTsKKwkJICAgIH0KKwkJfQorCSAg ICB9CisJfQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgICBlbHNlIGlmICh0 eXBlID09IE9QX1BFUklPRAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICAgICAgIHx8IHR5 cGUgPT0gT1BfVVRGOF9QRVJJT0QKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCSAg ICAgICB8fCB0eXBlID09IEVORF9PRl9SRSkKKwl7CisJICBtZW1zZXQgKGZhc3RtYXAsICdc MScsIHNpemVvZiAoY2hhcikgKiBTQkNfTUFYKTsKKwkgIGlmICh0eXBlID09IEVORF9PRl9S RSkKKwkgICAgYnVmcC0+Y2FuX2JlX251bGwgPSAxOworCSAgcmV0dXJuOworCX0KKyAgICB9 Cit9CisMCisvKiBFbnRyeSBwb2ludCBmb3IgUE9TSVggY29kZS4gICovCisvKiByZWdjb21w IHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFzIGEgc3RyaW5nIGFuZCBjb21waWxlcyBp dC4KKworICAgUFJFRyBpcyBhIHJlZ2V4X3QgKi4gIFdlIGRvIG5vdCBleHBlY3QgYW55IGZp ZWxkcyB0byBiZSBpbml0aWFsaXplZCwKKyAgIHNpbmNlIFBPU0lYIHNheXMgd2Ugc2hvdWxk bid0LiAgVGh1cywgd2Ugc2V0CisKKyAgICAgJ2J1ZmZlcicgdG8gdGhlIGNvbXBpbGVkIHBh dHRlcm47CisgICAgICd1c2VkJyB0byB0aGUgbGVuZ3RoIG9mIHRoZSBjb21waWxlZCBwYXR0 ZXJuOworICAgICAnc3ludGF4JyB0byBSRV9TWU5UQVhfUE9TSVhfRVhURU5ERUQgaWYgdGhl CisgICAgICAgUkVHX0VYVEVOREVEIGJpdCBpbiBDRkxBR1MgaXMgc2V0OyBvdGhlcndpc2Us IHRvCisgICAgICAgUkVfU1lOVEFYX1BPU0lYX0JBU0lDOworICAgICAnbmV3bGluZV9hbmNo b3InIHRvIFJFR19ORVdMSU5FIGJlaW5nIHNldCBpbiBDRkxBR1M7CisgICAgICdmYXN0bWFw JyB0byBhbiBhbGxvY2F0ZWQgc3BhY2UgZm9yIHRoZSBmYXN0bWFwOworICAgICAnZmFzdG1h cF9hY2N1cmF0ZScgdG8gemVybzsKKyAgICAgJ3JlX25zdWInIHRvIHRoZSBudW1iZXIgb2Yg c3ViZXhwcmVzc2lvbnMgaW4gUEFUVEVSTi4KKworICAgUEFUVEVSTiBpcyB0aGUgYWRkcmVz cyBvZiB0aGUgcGF0dGVybiBzdHJpbmcuCisKKyAgIENGTEFHUyBpcyBhIHNlcmllcyBvZiBi aXRzIHdoaWNoIGFmZmVjdCBjb21waWxhdGlvbi4KKworICAgICBJZiBSRUdfRVhURU5ERUQg aXMgc2V0LCB3ZSB1c2UgUE9TSVggZXh0ZW5kZWQgc3ludGF4OyBvdGhlcndpc2UsIHdlCisg ICAgIHVzZSBQT1NJWCBiYXNpYyBzeW50YXguCisKKyAgICAgSWYgUkVHX05FV0xJTkUgaXMg c2V0LCB0aGVuIC4gYW5kIFteLi4uXSBkb24ndCBtYXRjaCBuZXdsaW5lLgorICAgICBBbHNv LCByZWdleGVjIHdpbGwgdHJ5IGEgbWF0Y2ggYmVnaW5uaW5nIGFmdGVyIGV2ZXJ5IG5ld2xp bmUuCisKKyAgICAgSWYgUkVHX0lDQVNFIGlzIHNldCwgdGhlbiB3ZSBjb25zaWRlcnMgdXBw ZXItIGFuZCBsb3dlcmNhc2UKKyAgICAgdmVyc2lvbnMgb2YgbGV0dGVycyB0byBiZSBlcXVp dmFsZW50IHdoZW4gbWF0Y2hpbmcuCisKKyAgICAgSWYgUkVHX05PU1VCIGlzIHNldCwgdGhl biB3aGVuIFBSRUcgaXMgcGFzc2VkIHRvIHJlZ2V4ZWMsIHRoYXQKKyAgICAgcm91dGluZSB3 aWxsIHJlcG9ydCBvbmx5IHN1Y2Nlc3Mgb3IgZmFpbHVyZSwgYW5kIG5vdGhpbmcgYWJvdXQg dGhlCisgICAgIHJlZ2lzdGVycy4KKworICAgSXQgcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRz LCBub256ZXJvIGlmIGl0IGRvZXNuJ3QuICAoU2VlIHJlZ2V4LmggZm9yCisgICB0aGUgcmV0 dXJuIGNvZGVzIGFuZCB0aGVpciBtZWFuaW5ncy4pICAqLworCitpbnQKK3JlZ2NvbXAgKHJl Z2V4X3QgKl9SZXN0cmljdF8gcHJlZywgY29uc3QgY2hhciAqX1Jlc3RyaWN0XyBwYXR0ZXJu LCBpbnQgY2ZsYWdzKQoreworICByZWdfZXJyY29kZV90IHJldDsKKyAgcmVnX3N5bnRheF90 IHN5bnRheCA9ICgoY2ZsYWdzICYgUkVHX0VYVEVOREVEKSA/IFJFX1NZTlRBWF9QT1NJWF9F WFRFTkRFRAorCQkJIDogUkVfU1lOVEFYX1BPU0lYX0JBU0lDKTsKKworICBwcmVnLT5idWZm ZXIgPSBOVUxMOworICBwcmVnLT5hbGxvY2F0ZWQgPSAwOworICBwcmVnLT51c2VkID0gMDsK KworICAvKiBUcnkgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBmYXN0bWFwLiAgKi8KKyAg cHJlZy0+ZmFzdG1hcCA9IHJlX21hbGxvYyAoY2hhciwgU0JDX01BWCk7CisgIGlmIChCRSAo cHJlZy0+ZmFzdG1hcCA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwor ICBzeW50YXggfD0gKGNmbGFncyAmIFJFR19JQ0FTRSkgPyBSRV9JQ0FTRSA6IDA7CisKKyAg LyogSWYgUkVHX05FV0xJTkUgaXMgc2V0LCBuZXdsaW5lcyBhcmUgdHJlYXRlZCBkaWZmZXJl bnRseS4gICovCisgIGlmIChjZmxhZ3MgJiBSRUdfTkVXTElORSkKKyAgICB7IC8qIFJFR19O RVdMSU5FIGltcGxpZXMgbmVpdGhlciAuIG5vciBbXi4uLl0gbWF0Y2ggbmV3bGluZS4gICov CisgICAgICBzeW50YXggJj0gflJFX0RPVF9ORVdMSU5FOworICAgICAgc3ludGF4IHw9IFJF X0hBVF9MSVNUU19OT1RfTkVXTElORTsKKyAgICAgIC8qIEl0IGFsc28gY2hhbmdlcyB0aGUg bWF0Y2hpbmcgYmVoYXZpb3IuICAqLworICAgICAgcHJlZy0+bmV3bGluZV9hbmNob3IgPSAx OworICAgIH0KKyAgZWxzZQorICAgIHByZWctPm5ld2xpbmVfYW5jaG9yID0gMDsKKyAgcHJl Zy0+bm9fc3ViID0gISEoY2ZsYWdzICYgUkVHX05PU1VCKTsKKyAgcHJlZy0+dHJhbnNsYXRl ID0gTlVMTDsKKworICByZXQgPSByZV9jb21waWxlX2ludGVybmFsIChwcmVnLCBwYXR0ZXJu LCBzdHJsZW4gKHBhdHRlcm4pLCBzeW50YXgpOworCisgIC8qIFBPU0lYIGRvZXNuJ3QgZGlz dGluZ3Vpc2ggYmV0d2VlbiBhbiB1bm1hdGNoZWQgb3Blbi1ncm91cCBhbmQgYW4KKyAgICAg dW5tYXRjaGVkIGNsb3NlLWdyb3VwOiBib3RoIGFyZSBSRUdfRVBBUkVOLiAgKi8KKyAgaWYg KHJldCA9PSBSRUdfRVJQQVJFTikKKyAgICByZXQgPSBSRUdfRVBBUkVOOworCisgIC8qIFdl IGhhdmUgYWxyZWFkeSBjaGVja2VkIHByZWctPmZhc3RtYXAgIT0gTlVMTC4gICovCisgIGlm IChCRSAocmV0ID09IFJFR19OT0VSUk9SLCAxKSkKKyAgICAvKiBDb21wdXRlIHRoZSBmYXN0 bWFwIG5vdywgc2luY2UgcmVnZXhlYyBjYW5ub3QgbW9kaWZ5IHRoZSBwYXR0ZXJuCisgICAg ICAgYnVmZmVyLiAgVGhpcyBmdW5jdGlvbiBuZXZlciBmYWlscyBpbiB0aGlzIGltcGxlbWVu dGF0aW9uLiAgKi8KKyAgICAodm9pZCkgcmVfY29tcGlsZV9mYXN0bWFwIChwcmVnKTsKKyAg ZWxzZQorICAgIHsKKyAgICAgIC8qIFNvbWUgZXJyb3Igb2NjdXJyZWQgd2hpbGUgY29tcGls aW5nIHRoZSBleHByZXNzaW9uLiAgKi8KKyAgICAgIHJlX2ZyZWUgKHByZWctPmZhc3RtYXAp OworICAgICAgcHJlZy0+ZmFzdG1hcCA9IE5VTEw7CisgICAgfQorCisgIHJldHVybiAoaW50 KSByZXQ7Cit9CisjaWZkZWYgX0xJQkMKK2xpYmNfaGlkZGVuX2RlZiAoX19yZWdjb21wKQor d2Vha19hbGlhcyAoX19yZWdjb21wLCByZWdjb21wKQorI2VuZGlmCisKKy8qIFJldHVybnMg YSBtZXNzYWdlIGNvcnJlc3BvbmRpbmcgdG8gYW4gZXJyb3IgY29kZSwgRVJSQ09ERSwgcmV0 dXJuZWQKKyAgIGZyb20gZWl0aGVyIHJlZ2NvbXAgb3IgcmVnZXhlYy4gICBXZSBkb24ndCB1 c2UgUFJFRyBoZXJlLiAgKi8KKworc2l6ZV90CityZWdlcnJvciAoaW50IGVycmNvZGUsIGNv bnN0IHJlZ2V4X3QgKl9SZXN0cmljdF8gcHJlZywgY2hhciAqX1Jlc3RyaWN0XyBlcnJidWYs CisJICBzaXplX3QgZXJyYnVmX3NpemUpCit7CisgIGNvbnN0IGNoYXIgKm1zZzsKKyAgc2l6 ZV90IG1zZ19zaXplOworCisgIGlmIChCRSAoZXJyY29kZSA8IDAKKwkgIHx8IGVycmNvZGUg Pj0gKGludCkgKHNpemVvZiAoX19yZV9lcnJvcl9tc2dpZF9pZHgpCisJCQkgICAgICAgLyBz aXplb2YgKF9fcmVfZXJyb3JfbXNnaWRfaWR4WzBdKSksIDApKQorICAgIC8qIE9ubHkgZXJy b3IgY29kZXMgcmV0dXJuZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgc2hvdWxkIGJlIHBh c3NlZAorICAgICAgIHRvIHRoaXMgcm91dGluZS4gIElmIHdlIGFyZSBnaXZlbiBhbnl0aGlu ZyBlbHNlLCBvciBpZiBvdGhlciByZWdleAorICAgICAgIGNvZGUgZ2VuZXJhdGVzIGFuIGlu dmFsaWQgZXJyb3IgY29kZSwgdGhlbiB0aGUgcHJvZ3JhbSBoYXMgYSBidWcuCisgICAgICAg RHVtcCBjb3JlIHNvIHdlIGNhbiBmaXggaXQuICAqLworICAgIGFib3J0ICgpOworCisgIG1z ZyA9IGdldHRleHQgKF9fcmVfZXJyb3JfbXNnaWQgKyBfX3JlX2Vycm9yX21zZ2lkX2lkeFtl cnJjb2RlXSk7CisKKyAgbXNnX3NpemUgPSBzdHJsZW4gKG1zZykgKyAxOyAvKiBJbmNsdWRl cyB0aGUgbnVsbC4gICovCisKKyAgaWYgKEJFIChlcnJidWZfc2l6ZSAhPSAwLCAxKSkKKyAg ICB7CisgICAgICBzaXplX3QgY3B5X3NpemUgPSBtc2dfc2l6ZTsKKyAgICAgIGlmIChCRSAo bXNnX3NpemUgPiBlcnJidWZfc2l6ZSwgMCkpCisJeworCSAgY3B5X3NpemUgPSBlcnJidWZf c2l6ZSAtIDE7CisJICBlcnJidWZbY3B5X3NpemVdID0gJ1wwJzsKKwl9CisgICAgICBtZW1j cHkgKGVycmJ1ZiwgbXNnLCBjcHlfc2l6ZSk7CisgICAgfQorCisgIHJldHVybiBtc2dfc2l6 ZTsKK30KKyNpZmRlZiBfTElCQword2Vha19hbGlhcyAoX19yZWdlcnJvciwgcmVnZXJyb3Ip CisjZW5kaWYKKworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy8qIFRoaXMgc3RhdGljIGFy cmF5IGlzIHVzZWQgZm9yIHRoZSBtYXAgdG8gc2luZ2xlLWJ5dGUgY2hhcmFjdGVycyB3aGVu CisgICBVVEYtOCBpcyB1c2VkLiAgT3RoZXJ3aXNlIHdlIHdvdWxkIGFsbG9jYXRlIG1lbW9y eSBqdXN0IHRvIGluaXRpYWxpemUKKyAgIGl0IHRoZSBzYW1lIGFsbCB0aGUgdGltZS4gIFVU Ri04IGlzIHRoZSBwcmVmZXJyZWQgZW5jb2Rpbmcgc28gdGhpcyBpcworICAgYSB3b3J0aHdo aWxlIG9wdGltaXphdGlvbi4gICovCitzdGF0aWMgY29uc3QgYml0c2V0X3QgdXRmOF9zYl9t YXAgPQoreworICAvKiBTZXQgdGhlIGZpcnN0IDEyOCBiaXRzLiAgKi8KKyMgaWYgZGVmaW5l ZCBfX0dOVUNfXyAmJiAhZGVmaW5lZCBfX1NUUklDVF9BTlNJX18KKyAgWzAgLi4uIDB4ODAg LyBCSVRTRVRfV09SRF9CSVRTIC0gMV0gPSBCSVRTRVRfV09SRF9NQVgKKyMgZWxzZQorIyAg aWYgNCAqIEJJVFNFVF9XT1JEX0JJVFMgPCBBU0NJSV9DSEFSUworIyAgIGVycm9yICJiaXRz ZXRfd29yZF90IGlzIG5hcnJvd2VyIHRoYW4gMzIgYml0cyIKKyMgIGVsaWYgMyAqIEJJVFNF VF9XT1JEX0JJVFMgPCBBU0NJSV9DSEFSUworICBCSVRTRVRfV09SRF9NQVgsIEJJVFNFVF9X T1JEX01BWCwgQklUU0VUX1dPUkRfTUFYLAorIyAgZWxpZiAyICogQklUU0VUX1dPUkRfQklU UyA8IEFTQ0lJX0NIQVJTCisgIEJJVFNFVF9XT1JEX01BWCwgQklUU0VUX1dPUkRfTUFYLAor IyAgZWxpZiAxICogQklUU0VUX1dPUkRfQklUUyA8IEFTQ0lJX0NIQVJTCisgIEJJVFNFVF9X T1JEX01BWCwKKyMgIGVuZGlmCisgIChCSVRTRVRfV09SRF9NQVgKKyAgID4+IChTQkNfTUFY ICUgQklUU0VUX1dPUkRfQklUUyA9PSAwCisgICAgICAgPyAwCisgICAgICAgOiBCSVRTRVRf V09SRF9CSVRTIC0gU0JDX01BWCAlIEJJVFNFVF9XT1JEX0JJVFMpKQorIyBlbmRpZgorfTsK KyNlbmRpZgorCisKK3N0YXRpYyB2b2lkCitmcmVlX2RmYV9jb250ZW50IChyZV9kZmFfdCAq ZGZhKQoreworICBJZHggaSwgajsKKworICBpZiAoZGZhLT5ub2RlcykKKyAgICBmb3IgKGkg PSAwOyBpIDwgZGZhLT5ub2Rlc19sZW47ICsraSkKKyAgICAgIGZyZWVfdG9rZW4gKGRmYS0+ bm9kZXMgKyBpKTsKKyAgcmVfZnJlZSAoZGZhLT5uZXh0cyk7CisgIGZvciAoaSA9IDA7IGkg PCBkZmEtPm5vZGVzX2xlbjsgKytpKQorICAgIHsKKyAgICAgIGlmIChkZmEtPmVjbG9zdXJl cyAhPSBOVUxMKQorCXJlX25vZGVfc2V0X2ZyZWUgKGRmYS0+ZWNsb3N1cmVzICsgaSk7Cisg ICAgICBpZiAoZGZhLT5pbnZlY2xvc3VyZXMgIT0gTlVMTCkKKwlyZV9ub2RlX3NldF9mcmVl IChkZmEtPmludmVjbG9zdXJlcyArIGkpOworICAgICAgaWYgKGRmYS0+ZWRlc3RzICE9IE5V TEwpCisJcmVfbm9kZV9zZXRfZnJlZSAoZGZhLT5lZGVzdHMgKyBpKTsKKyAgICB9CisgIHJl X2ZyZWUgKGRmYS0+ZWRlc3RzKTsKKyAgcmVfZnJlZSAoZGZhLT5lY2xvc3VyZXMpOworICBy ZV9mcmVlIChkZmEtPmludmVjbG9zdXJlcyk7CisgIHJlX2ZyZWUgKGRmYS0+bm9kZXMpOwor CisgIGlmIChkZmEtPnN0YXRlX3RhYmxlKQorICAgIGZvciAoaSA9IDA7IGkgPD0gZGZhLT5z dGF0ZV9oYXNoX21hc2s7ICsraSkKKyAgICAgIHsKKwlzdHJ1Y3QgcmVfc3RhdGVfdGFibGVf ZW50cnkgKmVudHJ5ID0gZGZhLT5zdGF0ZV90YWJsZSArIGk7CisJZm9yIChqID0gMDsgaiA8 IGVudHJ5LT5udW07ICsraikKKwkgIHsKKwkgICAgcmVfZGZhc3RhdGVfdCAqc3RhdGUgPSBl bnRyeS0+YXJyYXlbal07CisJICAgIGZyZWVfc3RhdGUgKHN0YXRlKTsKKwkgIH0KKwlyZV9m cmVlIChlbnRyeS0+YXJyYXkpOworICAgICAgfQorICByZV9mcmVlIChkZmEtPnN0YXRlX3Rh YmxlKTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAoZGZhLT5zYl9jaGFyICE9IHV0 Zjhfc2JfbWFwKQorICAgIHJlX2ZyZWUgKGRmYS0+c2JfY2hhcik7CisjZW5kaWYKKyAgcmVf ZnJlZSAoZGZhLT5zdWJleHBfbWFwKTsKKyNpZmRlZiBERUJVRworICByZV9mcmVlIChkZmEt PnJlX3N0cik7CisjZW5kaWYKKworICByZV9mcmVlIChkZmEpOworfQorCisKKy8qIEZyZWUg ZHluYW1pY2FsbHkgYWxsb2NhdGVkIHNwYWNlIHVzZWQgYnkgUFJFRy4gICovCisKK3ZvaWQK K3JlZ2ZyZWUgKHJlZ2V4X3QgKnByZWcpCit7CisgIHJlX2RmYV90ICpkZmEgPSBwcmVnLT5i dWZmZXI7CisgIGlmIChCRSAoZGZhICE9IE5VTEwsIDEpKQorICAgIHsKKyAgICAgIGxvY2tf ZmluaSAoZGZhLT5sb2NrKTsKKyAgICAgIGZyZWVfZGZhX2NvbnRlbnQgKGRmYSk7CisgICAg fQorICBwcmVnLT5idWZmZXIgPSBOVUxMOworICBwcmVnLT5hbGxvY2F0ZWQgPSAwOworCisg IHJlX2ZyZWUgKHByZWctPmZhc3RtYXApOworICBwcmVnLT5mYXN0bWFwID0gTlVMTDsKKwor ICByZV9mcmVlIChwcmVnLT50cmFuc2xhdGUpOworICBwcmVnLT50cmFuc2xhdGUgPSBOVUxM OworfQorI2lmZGVmIF9MSUJDCitsaWJjX2hpZGRlbl9kZWYgKF9fcmVnZnJlZSkKK3dlYWtf YWxpYXMgKF9fcmVnZnJlZSwgcmVnZnJlZSkKKyNlbmRpZgorDAorLyogRW50cnkgcG9pbnRz IGNvbXBhdGlibGUgd2l0aCA0LjIgQlNEIHJlZ2V4IGxpYnJhcnkuICBXZSBkb24ndCBkZWZp bmUKKyAgIHRoZW0gdW5sZXNzIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQuICAqLworCisjaWYg ZGVmaW5lZCBfUkVHRVhfUkVfQ09NUCB8fCBkZWZpbmVkIF9MSUJDCisKKy8qIEJTRCBoYXMg b25lIGFuZCBvbmx5IG9uZSBwYXR0ZXJuIGJ1ZmZlci4gICovCitzdGF0aWMgc3RydWN0IHJl X3BhdHRlcm5fYnVmZmVyIHJlX2NvbXBfYnVmOworCitjaGFyICoKKyMgaWZkZWYgX0xJQkMK Ky8qIE1ha2UgdGhlc2UgZGVmaW5pdGlvbnMgd2VhayBpbiBsaWJjLCBzbyBQT1NJWCBwcm9n cmFtcyBjYW4gcmVkZWZpbmUKKyAgIHRoZXNlIG5hbWVzIGlmIHRoZXkgZG9uJ3QgdXNlIG91 ciBmdW5jdGlvbnMsIGFuZCBzdGlsbCB1c2UKKyAgIHJlZ2NvbXAvcmVnZXhlYyBhYm92ZSB3 aXRob3V0IGxpbmsgZXJyb3JzLiAgKi8KK3dlYWtfZnVuY3Rpb24KKyMgZW5kaWYKK3JlX2Nv bXAgKGNvbnN0IGNoYXIgKnMpCit7CisgIHJlZ19lcnJjb2RlX3QgcmV0OworICBjaGFyICpm YXN0bWFwOworCisgIGlmICghcykKKyAgICB7CisgICAgICBpZiAoIXJlX2NvbXBfYnVmLmJ1 ZmZlcikKKwlyZXR1cm4gZ2V0dGV4dCAoIk5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lv biIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIGlmIChyZV9jb21wX2J1Zi5idWZm ZXIpCisgICAgeworICAgICAgZmFzdG1hcCA9IHJlX2NvbXBfYnVmLmZhc3RtYXA7CisgICAg ICByZV9jb21wX2J1Zi5mYXN0bWFwID0gTlVMTDsKKyAgICAgIF9fcmVnZnJlZSAoJnJlX2Nv bXBfYnVmKTsKKyAgICAgIG1lbXNldCAoJnJlX2NvbXBfYnVmLCAnXDAnLCBzaXplb2YgKHJl X2NvbXBfYnVmKSk7CisgICAgICByZV9jb21wX2J1Zi5mYXN0bWFwID0gZmFzdG1hcDsKKyAg ICB9CisKKyAgaWYgKHJlX2NvbXBfYnVmLmZhc3RtYXAgPT0gTlVMTCkKKyAgICB7CisgICAg ICByZV9jb21wX2J1Zi5mYXN0bWFwID0gcmVfbWFsbG9jIChjaGFyLCBTQkNfTUFYKTsKKyAg ICAgIGlmIChyZV9jb21wX2J1Zi5mYXN0bWFwID09IE5VTEwpCisJcmV0dXJuIChjaGFyICop IGdldHRleHQgKF9fcmVfZXJyb3JfbXNnaWQKKwkJCQkgKyBfX3JlX2Vycm9yX21zZ2lkX2lk eFsoaW50KSBSRUdfRVNQQUNFXSk7CisgICAgfQorCisgIC8qIFNpbmNlICdyZV9leGVjJyBh bHdheXMgcGFzc2VzIE5VTEwgZm9yIHRoZSAncmVncycgYXJndW1lbnQsIHdlCisgICAgIGRv bid0IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcGF0dGVybiBidWZmZXIgZmllbGRzIHdoaWNo IGFmZmVjdCBpdC4gICovCisKKyAgLyogTWF0Y2ggYW5jaG9ycyBhdCBuZXdsaW5lcy4gICov CisgIHJlX2NvbXBfYnVmLm5ld2xpbmVfYW5jaG9yID0gMTsKKworICByZXQgPSByZV9jb21w aWxlX2ludGVybmFsICgmcmVfY29tcF9idWYsIHMsIHN0cmxlbiAocyksIHJlX3N5bnRheF9v cHRpb25zKTsKKworICBpZiAoIXJldCkKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiBZZXMs IHdlJ3JlIGRpc2NhcmRpbmcgJ2NvbnN0JyBoZXJlIGlmICFIQVZFX0xJQklOVEwuICAqLwor ICByZXR1cm4gKGNoYXIgKikgZ2V0dGV4dCAoX19yZV9lcnJvcl9tc2dpZCArIF9fcmVfZXJy b3JfbXNnaWRfaWR4WyhpbnQpIHJldF0pOworfQorCisjaWZkZWYgX0xJQkMKK2xpYmNfZnJl ZXJlc19mbiAoZnJlZV9tZW0pCit7CisgIF9fcmVnZnJlZSAoJnJlX2NvbXBfYnVmKTsKK30K KyNlbmRpZgorCisjZW5kaWYgLyogX1JFR0VYX1JFX0NPTVAgKi8KKwwKKy8qIEludGVybmFs IGVudHJ5IHBvaW50LgorICAgQ29tcGlsZSB0aGUgcmVndWxhciBleHByZXNzaW9uIFBBVFRF Uk4sIHdob3NlIGxlbmd0aCBpcyBMRU5HVEguCisgICBTWU5UQVggaW5kaWNhdGUgcmVndWxh ciBleHByZXNzaW9uJ3Mgc3ludGF4LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK3Jl X2NvbXBpbGVfaW50ZXJuYWwgKHJlZ2V4X3QgKnByZWcsIGNvbnN0IGNoYXIgKiBwYXR0ZXJu LCBzaXplX3QgbGVuZ3RoLAorCQkgICAgIHJlZ19zeW50YXhfdCBzeW50YXgpCit7CisgIHJl Z19lcnJjb2RlX3QgZXJyID0gUkVHX05PRVJST1I7CisgIHJlX2RmYV90ICpkZmE7CisgIHJl X3N0cmluZ190IHJlZ2V4cDsKKworICAvKiBJbml0aWFsaXplIHRoZSBwYXR0ZXJuIGJ1ZmZl ci4gICovCisgIHByZWctPmZhc3RtYXBfYWNjdXJhdGUgPSAwOworICBwcmVnLT5zeW50YXgg PSBzeW50YXg7CisgIHByZWctPm5vdF9ib2wgPSBwcmVnLT5ub3RfZW9sID0gMDsKKyAgcHJl Zy0+dXNlZCA9IDA7CisgIHByZWctPnJlX25zdWIgPSAwOworICBwcmVnLT5jYW5fYmVfbnVs bCA9IDA7CisgIHByZWctPnJlZ3NfYWxsb2NhdGVkID0gUkVHU19VTkFMTE9DQVRFRDsKKwor ICAvKiBJbml0aWFsaXplIHRoZSBkZmEuICAqLworICBkZmEgPSBwcmVnLT5idWZmZXI7Cisg IGlmIChCRSAocHJlZy0+YWxsb2NhdGVkIDwgc2l6ZW9mIChyZV9kZmFfdCksIDApKQorICAg IHsKKyAgICAgIC8qIElmIHplcm8gYWxsb2NhdGVkLCBidXQgYnVmZmVyIGlzIG5vbi1udWxs LCB0cnkgdG8gcmVhbGxvYworCSBlbm91Z2ggc3BhY2UuICBUaGlzIGxvc2VzIGlmIGJ1ZmZl cidzIGFkZHJlc3MgaXMgYm9ndXMsIGJ1dAorCSB0aGF0IGlzIHRoZSB1c2VyJ3MgcmVzcG9u c2liaWxpdHkuICBJZiAtPmJ1ZmZlciBpcyBOVUxMIHRoaXMKKwkgaXMgYSBzaW1wbGUgYWxs b2NhdGlvbi4gICovCisgICAgICBkZmEgPSByZV9yZWFsbG9jIChwcmVnLT5idWZmZXIsIHJl X2RmYV90LCAxKTsKKyAgICAgIGlmIChkZmEgPT0gTlVMTCkKKwlyZXR1cm4gUkVHX0VTUEFD RTsKKyAgICAgIHByZWctPmFsbG9jYXRlZCA9IHNpemVvZiAocmVfZGZhX3QpOworICAgICAg cHJlZy0+YnVmZmVyID0gZGZhOworICAgIH0KKyAgcHJlZy0+dXNlZCA9IHNpemVvZiAocmVf ZGZhX3QpOworCisgIGVyciA9IGluaXRfZGZhIChkZmEsIGxlbmd0aCk7CisgIGlmIChCRSAo ZXJyID09IFJFR19OT0VSUk9SICYmIGxvY2tfaW5pdCAoZGZhLT5sb2NrKSAhPSAwLCAwKSkK KyAgICBlcnIgPSBSRUdfRVNQQUNFOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwg MCkpCisgICAgeworICAgICAgZnJlZV9kZmFfY29udGVudCAoZGZhKTsKKyAgICAgIHByZWct PmJ1ZmZlciA9IE5VTEw7CisgICAgICBwcmVnLT5hbGxvY2F0ZWQgPSAwOworICAgICAgcmV0 dXJuIGVycjsKKyAgICB9CisjaWZkZWYgREVCVUcKKyAgLyogTm90ZTogbGVuZ3RoKzEgd2ls bCBub3Qgb3ZlcmZsb3cgc2luY2UgaXQgaXMgY2hlY2tlZCBpbiBpbml0X2RmYS4gICovCisg IGRmYS0+cmVfc3RyID0gcmVfbWFsbG9jIChjaGFyLCBsZW5ndGggKyAxKTsKKyAgc3RybmNw eSAoZGZhLT5yZV9zdHIsIHBhdHRlcm4sIGxlbmd0aCArIDEpOworI2VuZGlmCisKKyAgZXJy ID0gcmVfc3RyaW5nX2NvbnN0cnVjdCAoJnJlZ2V4cCwgcGF0dGVybiwgbGVuZ3RoLCBwcmVn LT50cmFuc2xhdGUsCisJCQkgICAgIChzeW50YXggJiBSRV9JQ0FTRSkgIT0gMCwgZGZhKTsK KyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHsKKyAgICByZV9jb21w aWxlX2ludGVybmFsX2ZyZWVfcmV0dXJuOgorICAgICAgZnJlZV93b3JrYXJlYV9jb21waWxl IChwcmVnKTsKKyAgICAgIHJlX3N0cmluZ19kZXN0cnVjdCAoJnJlZ2V4cCk7CisgICAgICBs b2NrX2ZpbmkgKGRmYS0+bG9jayk7CisgICAgICBmcmVlX2RmYV9jb250ZW50IChkZmEpOwor ICAgICAgcHJlZy0+YnVmZmVyID0gTlVMTDsKKyAgICAgIHByZWctPmFsbG9jYXRlZCA9IDA7 CisgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAvKiBQYXJzZSB0aGUgcmVndWxhciBl eHByZXNzaW9uLCBhbmQgYnVpbGQgYSBzdHJ1Y3R1cmUgdHJlZS4gICovCisgIHByZWctPnJl X25zdWIgPSAwOworICBkZmEtPnN0cl90cmVlID0gcGFyc2UgKCZyZWdleHAsIHByZWcsIHN5 bnRheCwgJmVycik7CisgIGlmIChCRSAoZGZhLT5zdHJfdHJlZSA9PSBOVUxMLCAwKSkKKyAg ICBnb3RvIHJlX2NvbXBpbGVfaW50ZXJuYWxfZnJlZV9yZXR1cm47CisKKyAgLyogQW5hbHl6 ZSB0aGUgdHJlZSBhbmQgY3JlYXRlIHRoZSBuZmEuICAqLworICBlcnIgPSBhbmFseXplIChw cmVnKTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIGdvdG8gcmVf Y29tcGlsZV9pbnRlcm5hbF9mcmVlX3JldHVybjsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThO CisgIC8qIElmIHBvc3NpYmxlLCBkbyBzZWFyY2hpbmcgaW4gc2luZ2xlIGJ5dGUgZW5jb2Rp bmcgdG8gc3BlZWQgdGhpbmdzIHVwLiAgKi8KKyAgaWYgKGRmYS0+aXNfdXRmOCAmJiAhKHN5 bnRheCAmIFJFX0lDQVNFKSAmJiBwcmVnLT50cmFuc2xhdGUgPT0gTlVMTCkKKyAgICBvcHRp bWl6ZV91dGY4IChkZmEpOworI2VuZGlmCisKKyAgLyogVGhlbiBjcmVhdGUgdGhlIGluaXRp YWwgc3RhdGUgb2YgdGhlIGRmYS4gICovCisgIGVyciA9IGNyZWF0ZV9pbml0aWFsX3N0YXRl IChkZmEpOworCisgIC8qIFJlbGVhc2Ugd29yayBhcmVhcy4gICovCisgIGZyZWVfd29ya2Fy ZWFfY29tcGlsZSAocHJlZyk7CisgIHJlX3N0cmluZ19kZXN0cnVjdCAoJnJlZ2V4cCk7CisK KyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHsKKyAgICAgIGxvY2tf ZmluaSAoZGZhLT5sb2NrKTsKKyAgICAgIGZyZWVfZGZhX2NvbnRlbnQgKGRmYSk7CisgICAg ICBwcmVnLT5idWZmZXIgPSBOVUxMOworICAgICAgcHJlZy0+YWxsb2NhdGVkID0gMDsKKyAg ICB9CisKKyAgcmV0dXJuIGVycjsKK30KKworLyogSW5pdGlhbGl6ZSBERkEuICBXZSB1c2Ug dGhlIGxlbmd0aCBvZiB0aGUgcmVndWxhciBleHByZXNzaW9uIFBBVF9MRU4KKyAgIGFzIHRo ZSBpbml0aWFsIGxlbmd0aCBvZiBzb21lIGFycmF5cy4gICovCisKK3N0YXRpYyByZWdfZXJy Y29kZV90Citpbml0X2RmYSAocmVfZGZhX3QgKmRmYSwgc2l6ZV90IHBhdF9sZW4pCit7Cisg IF9fcmVfc2l6ZV90IHRhYmxlX3NpemU7CisjaWZuZGVmIF9MSUJDCisgIGNvbnN0IGNoYXIg KmNvZGVzZXRfbmFtZTsKKyNlbmRpZgorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIHNpemVf dCBtYXhfaTE4bl9vYmplY3Rfc2l6ZSA9IE1BWCAoc2l6ZW9mICh3Y2hhcl90KSwgc2l6ZW9m ICh3Y3R5cGVfdCkpOworI2Vsc2UKKyAgc2l6ZV90IG1heF9pMThuX29iamVjdF9zaXplID0g MDsKKyNlbmRpZgorICBzaXplX3QgbWF4X29iamVjdF9zaXplID0KKyAgICBNQVggKHNpemVv ZiAoc3RydWN0IHJlX3N0YXRlX3RhYmxlX2VudHJ5KSwKKwkgTUFYIChzaXplb2YgKHJlX3Rv a2VuX3QpLAorCSAgICAgIE1BWCAoc2l6ZW9mIChyZV9ub2RlX3NldCksCisJCSAgIE1BWCAo c2l6ZW9mIChyZWdtYXRjaF90KSwKKwkJCW1heF9pMThuX29iamVjdF9zaXplKSkpKTsKKwor ICBtZW1zZXQgKGRmYSwgJ1wwJywgc2l6ZW9mIChyZV9kZmFfdCkpOworCisgIC8qIEZvcmNl IGFsbG9jYXRpb24gb2Ygc3RyX3RyZWVfc3RvcmFnZSB0aGUgZmlyc3QgdGltZS4gICovCisg IGRmYS0+c3RyX3RyZWVfc3RvcmFnZV9pZHggPSBCSU5fVFJFRV9TVE9SQUdFX1NJWkU7CisK KyAgLyogQXZvaWQgb3ZlcmZsb3dzLiAgVGhlIGV4dHJhICIvIDIiIGlzIGZvciB0aGUgdGFi bGVfc2l6ZSBkb3VibGluZworICAgICBjYWxjdWxhdGlvbiBiZWxvdywgYW5kIGZvciBzaW1p bGFyIGRvdWJsaW5nIGNhbGN1bGF0aW9ucworICAgICBlbHNld2hlcmUuICBBbmQgaXQncyA8 PSByYXRoZXIgdGhhbiA8LCBiZWNhdXNlIHNvbWUgb2YgdGhlCisgICAgIGRvdWJsaW5nIGNh bGN1bGF0aW9ucyBhZGQgMSBhZnRlcndhcmRzLiAgKi8KKyAgaWYgKEJFIChNSU4gKElEWF9N QVgsIFNJWkVfTUFYIC8gbWF4X29iamVjdF9zaXplKSAvIDIgPD0gcGF0X2xlbiwgMCkpCisg ICAgcmV0dXJuIFJFR19FU1BBQ0U7CisKKyAgZGZhLT5ub2Rlc19hbGxvYyA9IHBhdF9sZW4g KyAxOworICBkZmEtPm5vZGVzID0gcmVfbWFsbG9jIChyZV90b2tlbl90LCBkZmEtPm5vZGVz X2FsbG9jKTsKKworICAvKiAgdGFibGVfc2l6ZSA9IDIgXiBjZWlsKGxvZyBwYXRfbGVuKSAq LworICBmb3IgKHRhYmxlX3NpemUgPSAxOyA7IHRhYmxlX3NpemUgPDw9IDEpCisgICAgaWYg KHRhYmxlX3NpemUgPiBwYXRfbGVuKQorICAgICAgYnJlYWs7CisKKyAgZGZhLT5zdGF0ZV90 YWJsZSA9IGNhbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgcmVfc3RhdGVfdGFibGVfZW50cnkpLCB0 YWJsZV9zaXplKTsKKyAgZGZhLT5zdGF0ZV9oYXNoX21hc2sgPSB0YWJsZV9zaXplIC0gMTsK KworICBkZmEtPm1iX2N1cl9tYXggPSBNQl9DVVJfTUFYOworI2lmZGVmIF9MSUJDCisgIGlm IChkZmEtPm1iX2N1cl9tYXggPT0gNgorICAgICAgJiYgc3RyY21wIChfTkxfQ1VSUkVOVCAo TENfQ1RZUEUsIF9OTF9DVFlQRV9DT0RFU0VUX05BTUUpLCAiVVRGLTgiKSA9PSAwKQorICAg IGRmYS0+aXNfdXRmOCA9IDE7CisgIGRmYS0+bWFwX25vdGFzY2lpID0gKF9OTF9DVVJSRU5U X1dPUkQgKExDX0NUWVBFLCBfTkxfQ1RZUEVfTUFQX1RPX05PTkFTQ0lJKQorCQkgICAgICAg IT0gMCk7CisjZWxzZQorICBjb2Rlc2V0X25hbWUgPSBubF9sYW5naW5mbyAoQ09ERVNFVCk7 CisgIGlmICgoY29kZXNldF9uYW1lWzBdID09ICdVJyB8fCBjb2Rlc2V0X25hbWVbMF0gPT0g J3UnKQorICAgICAgJiYgKGNvZGVzZXRfbmFtZVsxXSA9PSAnVCcgfHwgY29kZXNldF9uYW1l WzFdID09ICd0JykKKyAgICAgICYmIChjb2Rlc2V0X25hbWVbMl0gPT0gJ0YnIHx8IGNvZGVz ZXRfbmFtZVsyXSA9PSAnZicpCisgICAgICAmJiBzdHJjbXAgKGNvZGVzZXRfbmFtZSArIDMg KyAoY29kZXNldF9uYW1lWzNdID09ICctJyksICI4IikgPT0gMCkKKyAgICBkZmEtPmlzX3V0 ZjggPSAxOworCisgIC8qIFdlIGNoZWNrIGV4aGF1c3RpdmVseSBpbiB0aGUgbG9vcCBiZWxv dyBpZiB0aGlzIGNoYXJzZXQgaXMgYQorICAgICBzdXBlcnNldCBvZiBBU0NJSS4gICovCisg IGRmYS0+bWFwX25vdGFzY2lpID0gMDsKKyNlbmRpZgorCisjaWZkZWYgUkVfRU5BQkxFX0kx OE4KKyAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisgICAgeworICAgICAgaWYgKGRmYS0+ aXNfdXRmOCkKKwlkZmEtPnNiX2NoYXIgPSAocmVfYml0c2V0X3B0cl90KSB1dGY4X3NiX21h cDsKKyAgICAgIGVsc2UKKwl7CisJICBpbnQgaSwgaiwgY2g7CisKKwkgIGRmYS0+c2JfY2hh ciA9IChyZV9iaXRzZXRfcHRyX3QpIGNhbGxvYyAoc2l6ZW9mIChiaXRzZXRfdCksIDEpOwor CSAgaWYgKEJFIChkZmEtPnNiX2NoYXIgPT0gTlVMTCwgMCkpCisJICAgIHJldHVybiBSRUdf RVNQQUNFOworCisJICAvKiBTZXQgdGhlIGJpdHMgY29ycmVzcG9uZGluZyB0byBzaW5nbGUg Ynl0ZSBjaGFycy4gICovCisJICBmb3IgKGkgPSAwLCBjaCA9IDA7IGkgPCBCSVRTRVRfV09S RFM7ICsraSkKKwkgICAgZm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEX0JJVFM7ICsraiwg KytjaCkKKwkgICAgICB7CisJCXdpbnRfdCB3Y2ggPSBfX2J0b3djIChjaCk7CisJCWlmICh3 Y2ggIT0gV0VPRikKKwkJICBkZmEtPnNiX2NoYXJbaV0gfD0gKGJpdHNldF93b3JkX3QpIDEg PDwgajsKKyMgaWZuZGVmIF9MSUJDCisJCWlmIChpc2FzY2lpIChjaCkgJiYgd2NoICE9IGNo KQorCQkgIGRmYS0+bWFwX25vdGFzY2lpID0gMTsKKyMgZW5kaWYKKwkgICAgICB9CisJfQor ICAgIH0KKyNlbmRpZgorCisgIGlmIChCRSAoZGZhLT5ub2RlcyA9PSBOVUxMIHx8IGRmYS0+ c3RhdGVfdGFibGUgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisgIHJl dHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogSW5pdGlhbGl6ZSBXT1JEX0NIQVIgdGFibGUs IHdoaWNoIGluZGljYXRlIHdoaWNoIGNoYXJhY3RlciBpcworICAgIndvcmQiLiAgSW4gdGhp cyBjYXNlICJ3b3JkIiBtZWFucyB0aGF0IGl0IGlzIHRoZSB3b3JkIGNvbnN0cnVjdGlvbgor ICAgY2hhcmFjdGVyIHVzZWQgYnkgc29tZSBvcGVyYXRvcnMgbGlrZSAiXDwiLCAiXD4iLCBl dGMuICAqLworCitzdGF0aWMgdm9pZAoraW5pdF93b3JkX2NoYXIgKHJlX2RmYV90ICpkZmEp Cit7CisgIGludCBpID0gMDsKKyAgaW50IGo7CisgIGludCBjaCA9IDA7CisgIGRmYS0+d29y ZF9vcHNfdXNlZCA9IDE7CisgIGlmIChCRSAoZGZhLT5tYXBfbm90YXNjaWkgPT0gMCwgMSkp CisgICAgeworICAgICAgLyogQXZvaWQgdWludDMyX3QgYW5kIHVpbnQ2NF90IGFzIHNvbWUg bm9uLUdDQyBwbGF0Zm9ybXMgbGFjaworCSB0aGVtLCBhbiBpc3N1ZSB3aGVuIHRoaXMgY29k ZSBpcyB1c2VkIGluIEdudWxpYi4gICovCisgICAgICBiaXRzZXRfd29yZF90IGJpdHMwID0g MHgwMDAwMDAwMDsKKyAgICAgIGJpdHNldF93b3JkX3QgYml0czEgPSAweDAzZmYwMDAwOwor ICAgICAgYml0c2V0X3dvcmRfdCBiaXRzMiA9IDB4ODdmZmZmZmU7CisgICAgICBiaXRzZXRf d29yZF90IGJpdHMzID0gMHgwN2ZmZmZmZTsKKyAgICAgIGlmIChCSVRTRVRfV09SRF9CSVRT ID09IDY0KQorCXsKKwkgIC8qIFBhY2lmeSBnY2MgLVdvdmVyZmxvdyBvbiAzMi1iaXQgcGxh dGZvcm1ucy4gICovCisJICBkZmEtPndvcmRfY2hhclswXSA9IGJpdHMxIDw8IDMxIDw8IDEg fCBiaXRzMDsKKwkgIGRmYS0+d29yZF9jaGFyWzFdID0gYml0czMgPDwgMzEgPDwgMSB8IGJp dHMyOworCSAgaSA9IDI7CisJfQorICAgICAgZWxzZSBpZiAoQklUU0VUX1dPUkRfQklUUyA9 PSAzMikKKwl7CisJICBkZmEtPndvcmRfY2hhclswXSA9IGJpdHMwOworCSAgZGZhLT53b3Jk X2NoYXJbMV0gPSBiaXRzMTsKKwkgIGRmYS0+d29yZF9jaGFyWzJdID0gYml0czI7CisJICBk ZmEtPndvcmRfY2hhclszXSA9IGJpdHMzOworCSAgaSA9IDQ7CisJfQorICAgICAgZWxzZQor ICAgICAgICBnb3RvIGdlbmVyYWxfY2FzZTsKKyAgICAgIGNoID0gMTI4OworCisgICAgICBp ZiAoQkUgKGRmYS0+aXNfdXRmOCwgMSkpCisJeworCSAgbWVtc2V0ICgmZGZhLT53b3JkX2No YXJbaV0sICdcMCcsIChTQkNfTUFYIC0gY2gpIC8gOCk7CisJICByZXR1cm47CisJfQorICAg IH0KKworIGdlbmVyYWxfY2FzZToKKyAgZm9yICg7IGkgPCBCSVRTRVRfV09SRFM7ICsraSkK KyAgICBmb3IgKGogPSAwOyBqIDwgQklUU0VUX1dPUkRfQklUUzsgKytqLCArK2NoKQorICAg ICAgaWYgKGlzYWxudW0gKGNoKSB8fCBjaCA9PSAnXycpCisJZGZhLT53b3JkX2NoYXJbaV0g fD0gKGJpdHNldF93b3JkX3QpIDEgPDwgajsKK30KKworLyogRnJlZSB0aGUgd29yayBhcmVh IHdoaWNoIGFyZSBvbmx5IHVzZWQgd2hpbGUgY29tcGlsaW5nLiAgKi8KKworc3RhdGljIHZv aWQKK2ZyZWVfd29ya2FyZWFfY29tcGlsZSAocmVnZXhfdCAqcHJlZykKK3sKKyAgcmVfZGZh X3QgKmRmYSA9IHByZWctPmJ1ZmZlcjsKKyAgYmluX3RyZWVfc3RvcmFnZV90ICpzdG9yYWdl LCAqbmV4dDsKKyAgZm9yIChzdG9yYWdlID0gZGZhLT5zdHJfdHJlZV9zdG9yYWdlOyBzdG9y YWdlOyBzdG9yYWdlID0gbmV4dCkKKyAgICB7CisgICAgICBuZXh0ID0gc3RvcmFnZS0+bmV4 dDsKKyAgICAgIHJlX2ZyZWUgKHN0b3JhZ2UpOworICAgIH0KKyAgZGZhLT5zdHJfdHJlZV9z dG9yYWdlID0gTlVMTDsKKyAgZGZhLT5zdHJfdHJlZV9zdG9yYWdlX2lkeCA9IEJJTl9UUkVF X1NUT1JBR0VfU0laRTsKKyAgZGZhLT5zdHJfdHJlZSA9IE5VTEw7CisgIHJlX2ZyZWUgKGRm YS0+b3JnX2luZGljZXMpOworICBkZmEtPm9yZ19pbmRpY2VzID0gTlVMTDsKK30KKworLyog Q3JlYXRlIGluaXRpYWwgc3RhdGVzIGZvciBhbGwgY29udGV4dHMuICAqLworCitzdGF0aWMg cmVnX2VycmNvZGVfdAorY3JlYXRlX2luaXRpYWxfc3RhdGUgKHJlX2RmYV90ICpkZmEpCit7 CisgIElkeCBmaXJzdCwgaTsKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIHJlX25vZGVfc2V0 IGluaXRfbm9kZXM7CisKKyAgLyogSW5pdGlhbCBzdGF0ZXMgaGF2ZSB0aGUgZXBzaWxvbiBj bG9zdXJlIG9mIHRoZSBub2RlIHdoaWNoIGlzCisgICAgIHRoZSBmaXJzdCBub2RlIG9mIHRo ZSByZWd1bGFyIGV4cHJlc3Npb24uICAqLworICBmaXJzdCA9IGRmYS0+c3RyX3RyZWUtPmZp cnN0LT5ub2RlX2lkeDsKKyAgZGZhLT5pbml0X25vZGUgPSBmaXJzdDsKKyAgZXJyID0gcmVf bm9kZV9zZXRfaW5pdF9jb3B5ICgmaW5pdF9ub2RlcywgZGZhLT5lY2xvc3VyZXMgKyBmaXJz dCk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gZXJy OworCisgIC8qIFRoZSBiYWNrLXJlZmVyZW5jZXMgd2hpY2ggYXJlIGluIGluaXRpYWwgc3Rh dGVzIGNhbiBlcHNpbG9uIHRyYW5zaXQsCisgICAgIHNpbmNlIGluIHRoaXMgY2FzZSBhbGwg b2YgdGhlIHN1YmV4cHJlc3Npb25zIGNhbiBiZSBudWxsLgorICAgICBUaGVuIHdlIGFkZCBl cHNpbG9uIGNsb3N1cmVzIG9mIHRoZSBub2RlcyB3aGljaCBhcmUgdGhlIG5leHQgbm9kZXMg b2YKKyAgICAgdGhlIGJhY2stcmVmZXJlbmNlcy4gICovCisgIGlmIChkZmEtPm5iYWNrcmVm ID4gMCkKKyAgICBmb3IgKGkgPSAwOyBpIDwgaW5pdF9ub2Rlcy5uZWxlbTsgKytpKQorICAg ICAgeworCUlkeCBub2RlX2lkeCA9IGluaXRfbm9kZXMuZWxlbXNbaV07CisJcmVfdG9rZW5f dHlwZV90IHR5cGUgPSBkZmEtPm5vZGVzW25vZGVfaWR4XS50eXBlOworCisJSWR4IGNsZXhw X2lkeDsKKwlpZiAodHlwZSAhPSBPUF9CQUNLX1JFRikKKwkgIGNvbnRpbnVlOworCWZvciAo Y2xleHBfaWR4ID0gMDsgY2xleHBfaWR4IDwgaW5pdF9ub2Rlcy5uZWxlbTsgKytjbGV4cF9p ZHgpCisJICB7CisJICAgIHJlX3Rva2VuX3QgKmNsZXhwX25vZGU7CisJICAgIGNsZXhwX25v ZGUgPSBkZmEtPm5vZGVzICsgaW5pdF9ub2Rlcy5lbGVtc1tjbGV4cF9pZHhdOworCSAgICBp ZiAoY2xleHBfbm9kZS0+dHlwZSA9PSBPUF9DTE9TRV9TVUJFWFAKKwkJJiYgY2xleHBfbm9k ZS0+b3ByLmlkeCA9PSBkZmEtPm5vZGVzW25vZGVfaWR4XS5vcHIuaWR4KQorCSAgICAgIGJy ZWFrOworCSAgfQorCWlmIChjbGV4cF9pZHggPT0gaW5pdF9ub2Rlcy5uZWxlbSkKKwkgIGNv bnRpbnVlOworCisJaWYgKHR5cGUgPT0gT1BfQkFDS19SRUYpCisJICB7CisJICAgIElkeCBk ZXN0X2lkeCA9IGRmYS0+ZWRlc3RzW25vZGVfaWR4XS5lbGVtc1swXTsKKwkgICAgaWYgKCFy ZV9ub2RlX3NldF9jb250YWlucyAoJmluaXRfbm9kZXMsIGRlc3RfaWR4KSkKKwkgICAgICB7 CisJCXJlZ19lcnJjb2RlX3QgbWVyZ2VfZXJyCisgICAgICAgICAgICAgICAgICA9IHJlX25v ZGVfc2V0X21lcmdlICgmaW5pdF9ub2RlcywgZGZhLT5lY2xvc3VyZXMgKyBkZXN0X2lkeCk7 CisJCWlmIChtZXJnZV9lcnIgIT0gUkVHX05PRVJST1IpCisJCSAgcmV0dXJuIG1lcmdlX2Vy cjsKKwkJaSA9IDA7CisJICAgICAgfQorCSAgfQorICAgICAgfQorCisgIC8qIEl0IG11c3Qg YmUgdGhlIGZpcnN0IHRpbWUgdG8gaW52b2tlIGFjcXVpcmVfc3RhdGUuICAqLworICBkZmEt PmluaXRfc3RhdGUgPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKCZlcnIsIGRmYSwgJmlu aXRfbm9kZXMsIDApOworICAvKiBXZSBkb24ndCBjaGVjayBFUlIgaGVyZSwgc2luY2UgdGhl IGluaXRpYWwgc3RhdGUgbXVzdCBub3QgYmUgTlVMTC4gICovCisgIGlmIChCRSAoZGZhLT5p bml0X3N0YXRlID09IE5VTEwsIDApKQorICAgIHJldHVybiBlcnI7CisgIGlmIChkZmEtPmlu aXRfc3RhdGUtPmhhc19jb25zdHJhaW50KQorICAgIHsKKyAgICAgIGRmYS0+aW5pdF9zdGF0 ZV93b3JkID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZpbml0X25v ZGVzLAorCQkJCQkJICAgICAgIENPTlRFWFRfV09SRCk7CisgICAgICBkZmEtPmluaXRfc3Rh dGVfbmwgPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKCZlcnIsIGRmYSwgJmluaXRfbm9k ZXMsCisJCQkJCQkgICAgIENPTlRFWFRfTkVXTElORSk7CisgICAgICBkZmEtPmluaXRfc3Rh dGVfYmVnYnVmID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsCisJCQkJ CQkJICZpbml0X25vZGVzLAorCQkJCQkJCSBDT05URVhUX05FV0xJTkUKKwkJCQkJCQkgfCBD T05URVhUX0JFR0JVRik7CisgICAgICBpZiAoQkUgKGRmYS0+aW5pdF9zdGF0ZV93b3JkID09 IE5VTEwgfHwgZGZhLT5pbml0X3N0YXRlX25sID09IE5VTEwKKwkgICAgICB8fCBkZmEtPmlu aXRfc3RhdGVfYmVnYnVmID09IE5VTEwsIDApKQorCXJldHVybiBlcnI7CisgICAgfQorICBl bHNlCisgICAgZGZhLT5pbml0X3N0YXRlX3dvcmQgPSBkZmEtPmluaXRfc3RhdGVfbmwKKyAg ICAgID0gZGZhLT5pbml0X3N0YXRlX2JlZ2J1ZiA9IGRmYS0+aW5pdF9zdGF0ZTsKKworICBy ZV9ub2RlX3NldF9mcmVlICgmaW5pdF9ub2Rlcyk7CisgIHJldHVybiBSRUdfTk9FUlJPUjsK K30KKwwKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLyogSWYgaXQgaXMgcG9zc2libGUgdG8g ZG8gc2VhcmNoaW5nIGluIHNpbmdsZSBieXRlIGVuY29kaW5nIGluc3RlYWQgb2YgVVRGLTgK KyAgIHRvIHNwZWVkIHRoaW5ncyB1cCwgc2V0IGRmYS0+bWJfY3VyX21heCB0byAxLCBjbGVh ciBpc191dGY4IGFuZCBjaGFuZ2UKKyAgIERGQSBub2RlcyB3aGVyZSBuZWVkZWQuICAqLwor CitzdGF0aWMgdm9pZAorb3B0aW1pemVfdXRmOCAocmVfZGZhX3QgKmRmYSkKK3sKKyAgSWR4 IG5vZGU7CisgIGludCBpOworICBib29sIG1iX2NoYXJzID0gZmFsc2U7CisgIGJvb2wgaGFz X3BlcmlvZCA9IGZhbHNlOworCisgIGZvciAobm9kZSA9IDA7IG5vZGUgPCBkZmEtPm5vZGVz X2xlbjsgKytub2RlKQorICAgIHN3aXRjaCAoZGZhLT5ub2Rlc1tub2RlXS50eXBlKQorICAg ICAgeworICAgICAgY2FzZSBDSEFSQUNURVI6CisJaWYgKGRmYS0+bm9kZXNbbm9kZV0ub3By LmMgPj0gQVNDSUlfQ0hBUlMpCisJICBtYl9jaGFycyA9IHRydWU7CisJYnJlYWs7CisgICAg ICBjYXNlIEFOQ0hPUjoKKwlzd2l0Y2ggKGRmYS0+bm9kZXNbbm9kZV0ub3ByLmN0eF90eXBl KQorCSAgeworCSAgY2FzZSBMSU5FX0ZJUlNUOgorCSAgY2FzZSBMSU5FX0xBU1Q6CisJICBj YXNlIEJVRl9GSVJTVDoKKwkgIGNhc2UgQlVGX0xBU1Q6CisJICAgIGJyZWFrOworCSAgZGVm YXVsdDoKKwkgICAgLyogV29yZCBhbmNob3JzIGV0Yy4gY2Fubm90IGJlIGhhbmRsZWQuICBJ dCdzIG9rYXkgdG8gdGVzdAorCSAgICAgICBvcHIuY3R4X3R5cGUgc2luY2UgY29uc3RyYWlu dHMgKGZvciBhbGwgREZBIG5vZGVzKSBhcmUKKwkgICAgICAgY3JlYXRlZCBieSBPUmluZyBv bmUgb3IgbW9yZSBvcHIuY3R4X3R5cGUgdmFsdWVzLiAgKi8KKwkgICAgcmV0dXJuOworCSAg fQorCWJyZWFrOworICAgICAgY2FzZSBPUF9QRVJJT0Q6CisJaGFzX3BlcmlvZCA9IHRydWU7 CisJYnJlYWs7CisgICAgICBjYXNlIE9QX0JBQ0tfUkVGOgorICAgICAgY2FzZSBPUF9BTFQ6 CisgICAgICBjYXNlIEVORF9PRl9SRToKKyAgICAgIGNhc2UgT1BfRFVQX0FTVEVSSVNLOgor ICAgICAgY2FzZSBPUF9PUEVOX1NVQkVYUDoKKyAgICAgIGNhc2UgT1BfQ0xPU0VfU1VCRVhQ OgorCWJyZWFrOworICAgICAgY2FzZSBDT01QTEVYX0JSQUNLRVQ6CisJcmV0dXJuOworICAg ICAgY2FzZSBTSU1QTEVfQlJBQ0tFVDoKKwkvKiBKdXN0IGRvdWJsZSBjaGVjay4gICovCisJ eworCSAgaW50IHJzaGlmdCA9IChBU0NJSV9DSEFSUyAlIEJJVFNFVF9XT1JEX0JJVFMgPT0g MAorCQkJPyAwCisJCQk6IEJJVFNFVF9XT1JEX0JJVFMgLSBBU0NJSV9DSEFSUyAlIEJJVFNF VF9XT1JEX0JJVFMpOworCSAgZm9yIChpID0gQVNDSUlfQ0hBUlMgLyBCSVRTRVRfV09SRF9C SVRTOyBpIDwgQklUU0VUX1dPUkRTOyArK2kpCisJICAgIHsKKwkgICAgICBpZiAoZGZhLT5u b2Rlc1tub2RlXS5vcHIuc2Jjc2V0W2ldID4+IHJzaGlmdCAhPSAwKQorCQlyZXR1cm47CisJ ICAgICAgcnNoaWZ0ID0gMDsKKwkgICAgfQorCX0KKwlicmVhazsKKyAgICAgIGRlZmF1bHQ6 CisJYWJvcnQgKCk7CisgICAgICB9CisKKyAgaWYgKG1iX2NoYXJzIHx8IGhhc19wZXJpb2Qp CisgICAgZm9yIChub2RlID0gMDsgbm9kZSA8IGRmYS0+bm9kZXNfbGVuOyArK25vZGUpCisg ICAgICB7CisJaWYgKGRmYS0+bm9kZXNbbm9kZV0udHlwZSA9PSBDSEFSQUNURVIKKwkgICAg JiYgZGZhLT5ub2Rlc1tub2RlXS5vcHIuYyA+PSBBU0NJSV9DSEFSUykKKwkgIGRmYS0+bm9k ZXNbbm9kZV0ubWJfcGFydGlhbCA9IDA7CisJZWxzZSBpZiAoZGZhLT5ub2Rlc1tub2RlXS50 eXBlID09IE9QX1BFUklPRCkKKwkgIGRmYS0+bm9kZXNbbm9kZV0udHlwZSA9IE9QX1VURjhf UEVSSU9EOworICAgICAgfQorCisgIC8qIFRoZSBzZWFyY2ggY2FuIGJlIGluIHNpbmdsZSBi eXRlIGxvY2FsZS4gICovCisgIGRmYS0+bWJfY3VyX21heCA9IDE7CisgIGRmYS0+aXNfdXRm OCA9IDA7CisgIGRmYS0+aGFzX21iX25vZGUgPSBkZmEtPm5iYWNrcmVmID4gMCB8fCBoYXNf cGVyaW9kOworfQorI2VuZGlmCisMCisvKiBBbmFseXplIHRoZSBzdHJ1Y3R1cmUgdHJlZSwg YW5kIGNhbGN1bGF0ZSAiZmlyc3QiLCAibmV4dCIsICJlZGVzdCIsCisgICAiZWNsb3N1cmUi LCBhbmQgImludmVjbG9zdXJlIi4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CithbmFs eXplIChyZWdleF90ICpwcmVnKQoreworICByZV9kZmFfdCAqZGZhID0gcHJlZy0+YnVmZmVy OworICByZWdfZXJyY29kZV90IHJldDsKKworICAvKiBBbGxvY2F0ZSBhcnJheXMuICAqLwor ICBkZmEtPm5leHRzID0gcmVfbWFsbG9jIChJZHgsIGRmYS0+bm9kZXNfYWxsb2MpOworICBk ZmEtPm9yZ19pbmRpY2VzID0gcmVfbWFsbG9jIChJZHgsIGRmYS0+bm9kZXNfYWxsb2MpOwor ICBkZmEtPmVkZXN0cyA9IHJlX21hbGxvYyAocmVfbm9kZV9zZXQsIGRmYS0+bm9kZXNfYWxs b2MpOworICBkZmEtPmVjbG9zdXJlcyA9IHJlX21hbGxvYyAocmVfbm9kZV9zZXQsIGRmYS0+ bm9kZXNfYWxsb2MpOworICBpZiAoQkUgKGRmYS0+bmV4dHMgPT0gTlVMTCB8fCBkZmEtPm9y Z19pbmRpY2VzID09IE5VTEwgfHwgZGZhLT5lZGVzdHMgPT0gTlVMTAorCSAgfHwgZGZhLT5l Y2xvc3VyZXMgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisKKyAgZGZh LT5zdWJleHBfbWFwID0gcmVfbWFsbG9jIChJZHgsIHByZWctPnJlX25zdWIpOworICBpZiAo ZGZhLT5zdWJleHBfbWFwICE9IE5VTEwpCisgICAgeworICAgICAgSWR4IGk7CisgICAgICBm b3IgKGkgPSAwOyBpIDwgcHJlZy0+cmVfbnN1YjsgaSsrKQorCWRmYS0+c3ViZXhwX21hcFtp XSA9IGk7CisgICAgICBwcmVvcmRlciAoZGZhLT5zdHJfdHJlZSwgb3B0aW1pemVfc3ViZXhw cywgZGZhKTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmVnLT5yZV9uc3ViOyBpKyspCisJ aWYgKGRmYS0+c3ViZXhwX21hcFtpXSAhPSBpKQorCSAgYnJlYWs7CisgICAgICBpZiAoaSA9 PSBwcmVnLT5yZV9uc3ViKQorCXsKKwkgIHJlX2ZyZWUgKGRmYS0+c3ViZXhwX21hcCk7CisJ ICBkZmEtPnN1YmV4cF9tYXAgPSBOVUxMOworCX0KKyAgICB9CisKKyAgcmV0ID0gcG9zdG9y ZGVyIChkZmEtPnN0cl90cmVlLCBsb3dlcl9zdWJleHBzLCBwcmVnKTsKKyAgaWYgKEJFIChy ZXQgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiByZXQ7CisgIHJldCA9IHBvc3Rv cmRlciAoZGZhLT5zdHJfdHJlZSwgY2FsY19maXJzdCwgZGZhKTsKKyAgaWYgKEJFIChyZXQg IT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiByZXQ7CisgIHByZW9yZGVyIChkZmEt PnN0cl90cmVlLCBjYWxjX25leHQsIGRmYSk7CisgIHJldCA9IHByZW9yZGVyIChkZmEtPnN0 cl90cmVlLCBsaW5rX25mYV9ub2RlcywgZGZhKTsKKyAgaWYgKEJFIChyZXQgIT0gUkVHX05P RVJST1IsIDApKQorICAgIHJldHVybiByZXQ7CisgIHJldCA9IGNhbGNfZWNsb3N1cmUgKGRm YSk7CisgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gcmV0 OworCisgIC8qIFdlIG9ubHkgbmVlZCB0aGlzIGR1cmluZyB0aGUgcHJ1bmVfaW1wb3NzaWJs ZV9ub2RlcyBwYXNzIGluIHJlZ2V4ZWMuYzsKKyAgICAgc2tpcCBpdCBpZiBwX2lfbiB3aWxs IG5vdCBydW4sIGFzIGNhbGNfaW52ZWNsb3N1cmUgY2FuIGJlIHF1YWRyYXRpYy4gICovCisg IGlmICgoIXByZWctPm5vX3N1YiAmJiBwcmVnLT5yZV9uc3ViID4gMCAmJiBkZmEtPmhhc19w bHVyYWxfbWF0Y2gpCisgICAgICB8fCBkZmEtPm5iYWNrcmVmKQorICAgIHsKKyAgICAgIGRm YS0+aW52ZWNsb3N1cmVzID0gcmVfbWFsbG9jIChyZV9ub2RlX3NldCwgZGZhLT5ub2Rlc19s ZW4pOworICAgICAgaWYgKEJFIChkZmEtPmludmVjbG9zdXJlcyA9PSBOVUxMLCAwKSkKKwly ZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIHJldCA9IGNhbGNfaW52ZWNsb3N1cmUgKGRmYSk7 CisgICAgfQorCisgIHJldHVybiByZXQ7Cit9CisKKy8qIE91ciBwYXJzZSB0cmVlcyBhcmUg dmVyeSB1bmJhbGFuY2VkLCBzbyB3ZSBjYW5ub3QgdXNlIGEgc3RhY2sgdG8KKyAgIGltcGxl bWVudCBwYXJzZSB0cmVlIHZpc2l0cy4gIEluc3RlYWQsIHdlIHVzZSBwYXJlbnQgcG9pbnRl cnMgYW5kCisgICBzb21lIGhhaXJ5IGNvZGUgaW4gdGhlc2UgdHdvIGZ1bmN0aW9ucy4gICov CitzdGF0aWMgcmVnX2VycmNvZGVfdAorcG9zdG9yZGVyIChiaW5fdHJlZV90ICpyb290LCBy ZWdfZXJyY29kZV90IChmbiAodm9pZCAqLCBiaW5fdHJlZV90ICopKSwKKwkgICB2b2lkICpl eHRyYSkKK3sKKyAgYmluX3RyZWVfdCAqbm9kZSwgKnByZXY7CisKKyAgZm9yIChub2RlID0g cm9vdDsgOyApCisgICAgeworICAgICAgLyogRGVzY2VuZCBkb3duIHRoZSB0cmVlLCBwcmVm ZXJhYmx5IHRvIHRoZSBsZWZ0IChvciB0byB0aGUgcmlnaHQKKwkgaWYgdGhhdCdzIHRoZSBv bmx5IGNoaWxkKS4gICovCisgICAgICB3aGlsZSAobm9kZS0+bGVmdCB8fCBub2RlLT5yaWdo dCkKKwlpZiAobm9kZS0+bGVmdCkKKwkgIG5vZGUgPSBub2RlLT5sZWZ0OworCWVsc2UKKwkg IG5vZGUgPSBub2RlLT5yaWdodDsKKworICAgICAgZG8KKwl7CisJICByZWdfZXJyY29kZV90 IGVyciA9IGZuIChleHRyYSwgbm9kZSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJP UiwgMCkpCisJICAgIHJldHVybiBlcnI7CisJICBpZiAobm9kZS0+cGFyZW50ID09IE5VTEwp CisJICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKwkgIHByZXYgPSBub2RlOworCSAgbm9kZSA9 IG5vZGUtPnBhcmVudDsKKwl9CisgICAgICAvKiBHbyB1cCB3aGlsZSB3ZSBoYXZlIGEgbm9k ZSB0aGF0IGlzIHJlYWNoZWQgZnJvbSB0aGUgcmlnaHQuICAqLworICAgICAgd2hpbGUgKG5v ZGUtPnJpZ2h0ID09IHByZXYgfHwgbm9kZS0+cmlnaHQgPT0gTlVMTCk7CisgICAgICBub2Rl ID0gbm9kZS0+cmlnaHQ7CisgICAgfQorfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAorcHJl b3JkZXIgKGJpbl90cmVlX3QgKnJvb3QsIHJlZ19lcnJjb2RlX3QgKGZuICh2b2lkICosIGJp bl90cmVlX3QgKikpLAorCSAgdm9pZCAqZXh0cmEpCit7CisgIGJpbl90cmVlX3QgKm5vZGU7 CisKKyAgZm9yIChub2RlID0gcm9vdDsgOyApCisgICAgeworICAgICAgcmVnX2VycmNvZGVf dCBlcnIgPSBmbiAoZXh0cmEsIG5vZGUpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05P RVJST1IsIDApKQorCXJldHVybiBlcnI7CisKKyAgICAgIC8qIEdvIHRvIHRoZSBsZWZ0IG5v ZGUsIG9yIHVwIGFuZCB0byB0aGUgcmlnaHQuICAqLworICAgICAgaWYgKG5vZGUtPmxlZnQp CisJbm9kZSA9IG5vZGUtPmxlZnQ7CisgICAgICBlbHNlCisJeworCSAgYmluX3RyZWVfdCAq cHJldiA9IE5VTEw7CisJICB3aGlsZSAobm9kZS0+cmlnaHQgPT0gcHJldiB8fCBub2RlLT5y aWdodCA9PSBOVUxMKQorCSAgICB7CisJICAgICAgcHJldiA9IG5vZGU7CisJICAgICAgbm9k ZSA9IG5vZGUtPnBhcmVudDsKKwkgICAgICBpZiAoIW5vZGUpCisJCXJldHVybiBSRUdfTk9F UlJPUjsKKwkgICAgfQorCSAgbm9kZSA9IG5vZGUtPnJpZ2h0OworCX0KKyAgICB9Cit9CisK Ky8qIE9wdGltaXphdGlvbiBwYXNzOiBpZiBhIFNVQkVYUCBpcyBlbnRpcmVseSBjb250YWlu ZWQsIHN0cmlwIGl0IGFuZCB0ZWxsCisgICByZV9zZWFyY2hfaW50ZXJuYWwgdG8gbWFwIHRo ZSBpbm5lciBvbmUncyBvcHIuaWR4IHRvIHRoaXMgb25lJ3MuICBBZGp1c3QKKyAgIGJhY2ty ZWZlcmVuY2VzIGFzIHdlbGwuICBSZXF1aXJlcyBhIHByZW9yZGVyIHZpc2l0LiAgKi8KK3N0 YXRpYyByZWdfZXJyY29kZV90CitvcHRpbWl6ZV9zdWJleHBzICh2b2lkICpleHRyYSwgYmlu X3RyZWVfdCAqbm9kZSkKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBleHRy YTsKKworICBpZiAobm9kZS0+dG9rZW4udHlwZSA9PSBPUF9CQUNLX1JFRiAmJiBkZmEtPnN1 YmV4cF9tYXApCisgICAgeworICAgICAgaW50IGlkeCA9IG5vZGUtPnRva2VuLm9wci5pZHg7 CisgICAgICBub2RlLT50b2tlbi5vcHIuaWR4ID0gZGZhLT5zdWJleHBfbWFwW2lkeF07Cisg ICAgICBkZmEtPnVzZWRfYmtyZWZfbWFwIHw9IDEgPDwgbm9kZS0+dG9rZW4ub3ByLmlkeDsK KyAgICB9CisKKyAgZWxzZSBpZiAobm9kZS0+dG9rZW4udHlwZSA9PSBTVUJFWFAKKwkgICAm JiBub2RlLT5sZWZ0ICYmIG5vZGUtPmxlZnQtPnRva2VuLnR5cGUgPT0gU1VCRVhQKQorICAg IHsKKyAgICAgIElkeCBvdGhlcl9pZHggPSBub2RlLT5sZWZ0LT50b2tlbi5vcHIuaWR4Owor CisgICAgICBub2RlLT5sZWZ0ID0gbm9kZS0+bGVmdC0+bGVmdDsKKyAgICAgIGlmIChub2Rl LT5sZWZ0KQorCW5vZGUtPmxlZnQtPnBhcmVudCA9IG5vZGU7CisKKyAgICAgIGRmYS0+c3Vi ZXhwX21hcFtvdGhlcl9pZHhdID0gZGZhLT5zdWJleHBfbWFwW25vZGUtPnRva2VuLm9wci5p ZHhdOworICAgICAgaWYgKG90aGVyX2lkeCA8IEJJVFNFVF9XT1JEX0JJVFMpCisJZGZhLT51 c2VkX2JrcmVmX21hcCAmPSB+KChiaXRzZXRfd29yZF90KSAxIDw8IG90aGVyX2lkeCk7Cisg ICAgfQorCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogTG93ZXJpbmcgcGFzczog VHVybiBlYWNoIFNVQkVYUCBub2RlIGludG8gdGhlIGFwcHJvcHJpYXRlIGNvbmNhdGVuYXRp b24KKyAgIG9mIE9QX09QRU5fU1VCRVhQLCB0aGUgYm9keSBvZiB0aGUgU1VCRVhQIChpZiBh bnkpIGFuZCBPUF9DTE9TRV9TVUJFWFAuICAqLworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2xv d2VyX3N1YmV4cHMgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKQoreworICByZWdl eF90ICpwcmVnID0gKHJlZ2V4X3QgKikgZXh0cmE7CisgIHJlZ19lcnJjb2RlX3QgZXJyID0g UkVHX05PRVJST1I7CisKKyAgaWYgKG5vZGUtPmxlZnQgJiYgbm9kZS0+bGVmdC0+dG9rZW4u dHlwZSA9PSBTVUJFWFApCisgICAgeworICAgICAgbm9kZS0+bGVmdCA9IGxvd2VyX3N1YmV4 cCAoJmVyciwgcHJlZywgbm9kZS0+bGVmdCk7CisgICAgICBpZiAobm9kZS0+bGVmdCkKKwlu b2RlLT5sZWZ0LT5wYXJlbnQgPSBub2RlOworICAgIH0KKyAgaWYgKG5vZGUtPnJpZ2h0ICYm IG5vZGUtPnJpZ2h0LT50b2tlbi50eXBlID09IFNVQkVYUCkKKyAgICB7CisgICAgICBub2Rl LT5yaWdodCA9IGxvd2VyX3N1YmV4cCAoJmVyciwgcHJlZywgbm9kZS0+cmlnaHQpOworICAg ICAgaWYgKG5vZGUtPnJpZ2h0KQorCW5vZGUtPnJpZ2h0LT5wYXJlbnQgPSBub2RlOworICAg IH0KKworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgYmluX3RyZWVfdCAqCitsb3dlcl9z dWJleHAgKHJlZ19lcnJjb2RlX3QgKmVyciwgcmVnZXhfdCAqcHJlZywgYmluX3RyZWVfdCAq bm9kZSkKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IHByZWctPmJ1ZmZlcjsKKyAgYmluX3RyZWVf dCAqYm9keSA9IG5vZGUtPmxlZnQ7CisgIGJpbl90cmVlX3QgKm9wLCAqY2xzLCAqdHJlZTEs ICp0cmVlOworCisgIGlmIChwcmVnLT5ub19zdWIKKyAgICAgIC8qIFdlIGRvIG5vdCBvcHRp bWl6ZSBlbXB0eSBzdWJleHByZXNzaW9ucywgYmVjYXVzZSBvdGhlcndpc2Ugd2UgbWF5CisJ IGhhdmUgYmFkIENPTkNBVCBub2RlcyB3aXRoIE5VTEwgY2hpbGRyZW4uICBUaGlzIGlzIG9i dmlvdXNseSBub3QKKwkgdmVyeSBjb21tb24sIHNvIHdlIGRvIG5vdCBsb3NlIG11Y2guICBB biBleGFtcGxlIHRoYXQgdHJpZ2dlcnMKKwkgdGhpcyBjYXNlIGlzIHRoZSBzZWQgInNjcmlw dCIgL1woXCkveC4gICovCisgICAgICAmJiBub2RlLT5sZWZ0ICE9IE5VTEwKKyAgICAgICYm IChub2RlLT50b2tlbi5vcHIuaWR4ID49IEJJVFNFVF9XT1JEX0JJVFMKKwkgIHx8ICEoZGZh LT51c2VkX2JrcmVmX21hcAorCSAgICAgICAmICgoYml0c2V0X3dvcmRfdCkgMSA8PCBub2Rl LT50b2tlbi5vcHIuaWR4KSkpKQorICAgIHJldHVybiBub2RlLT5sZWZ0OworCisgIC8qIENv bnZlcnQgdGhlIFNVQkVYUCBub2RlIHRvIHRoZSBjb25jYXRlbmF0aW9uIG9mIGFuCisgICAg IE9QX09QRU5fU1VCRVhQLCB0aGUgY29udGVudHMsIGFuZCBhbiBPUF9DTE9TRV9TVUJFWFAu ICAqLworICBvcCA9IGNyZWF0ZV90cmVlIChkZmEsIE5VTEwsIE5VTEwsIE9QX09QRU5fU1VC RVhQKTsKKyAgY2xzID0gY3JlYXRlX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgT1BfQ0xPU0Vf U1VCRVhQKTsKKyAgdHJlZTEgPSBib2R5ID8gY3JlYXRlX3RyZWUgKGRmYSwgYm9keSwgY2xz LCBDT05DQVQpIDogY2xzOworICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgb3AsIHRyZWUx LCBDT05DQVQpOworICBpZiAoQkUgKHRyZWUgPT0gTlVMTCB8fCB0cmVlMSA9PSBOVUxMIHx8 IG9wID09IE5VTEwgfHwgY2xzID09IE5VTEwsIDApKQorICAgIHsKKyAgICAgICplcnIgPSBS RUdfRVNQQUNFOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIG9wLT50b2tlbi5v cHIuaWR4ID0gY2xzLT50b2tlbi5vcHIuaWR4ID0gbm9kZS0+dG9rZW4ub3ByLmlkeDsKKyAg b3AtPnRva2VuLm9wdF9zdWJleHAgPSBjbHMtPnRva2VuLm9wdF9zdWJleHAgPSBub2RlLT50 b2tlbi5vcHRfc3ViZXhwOworICByZXR1cm4gdHJlZTsKK30KKworLyogUGFzcyAxIGluIGJ1 aWxkaW5nIHRoZSBORkE6IGNvbXB1dGUgRklSU1QgYW5kIGNyZWF0ZSB1bmxpbmtlZCBhdXRv bWF0b24KKyAgIG5vZGVzLiAgUmVxdWlyZXMgYSBwb3N0b3JkZXIgdmlzaXQuICAqLworc3Rh dGljIHJlZ19lcnJjb2RlX3QKK2NhbGNfZmlyc3QgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90 ICpub2RlKQoreworICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIGV4dHJhOworICBp ZiAobm9kZS0+dG9rZW4udHlwZSA9PSBDT05DQVQpCisgICAgeworICAgICAgbm9kZS0+Zmly c3QgPSBub2RlLT5sZWZ0LT5maXJzdDsKKyAgICAgIG5vZGUtPm5vZGVfaWR4ID0gbm9kZS0+ bGVmdC0+bm9kZV9pZHg7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbm9kZS0+Zmly c3QgPSBub2RlOworICAgICAgbm9kZS0+bm9kZV9pZHggPSByZV9kZmFfYWRkX25vZGUgKGRm YSwgbm9kZS0+dG9rZW4pOworICAgICAgaWYgKEJFIChub2RlLT5ub2RlX2lkeCA9PSAtMSwg MCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBpZiAobm9kZS0+dG9rZW4udHlwZSA9 PSBBTkNIT1IpCisJZGZhLT5ub2Rlc1tub2RlLT5ub2RlX2lkeF0uY29uc3RyYWludCA9IG5v ZGUtPnRva2VuLm9wci5jdHhfdHlwZTsKKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsK K30KKworLyogUGFzcyAyOiBjb21wdXRlIE5FWFQgb24gdGhlIHRyZWUuICBQcmVvcmRlciB2 aXNpdC4gICovCitzdGF0aWMgcmVnX2VycmNvZGVfdAorY2FsY19uZXh0ICh2b2lkICpleHRy YSwgYmluX3RyZWVfdCAqbm9kZSkKK3sKKyAgc3dpdGNoIChub2RlLT50b2tlbi50eXBlKQor ICAgIHsKKyAgICBjYXNlIE9QX0RVUF9BU1RFUklTSzoKKyAgICAgIG5vZGUtPmxlZnQtPm5l eHQgPSBub2RlOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDT05DQVQ6CisgICAgICBub2Rl LT5sZWZ0LT5uZXh0ID0gbm9kZS0+cmlnaHQtPmZpcnN0OworICAgICAgbm9kZS0+cmlnaHQt Pm5leHQgPSBub2RlLT5uZXh0OworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg IGlmIChub2RlLT5sZWZ0KQorCW5vZGUtPmxlZnQtPm5leHQgPSBub2RlLT5uZXh0OworICAg ICAgaWYgKG5vZGUtPnJpZ2h0KQorCW5vZGUtPnJpZ2h0LT5uZXh0ID0gbm9kZS0+bmV4dDsK KyAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBQ YXNzIDM6IGxpbmsgYWxsIERGQSBub2RlcyB0byB0aGVpciBORVhUIG5vZGUgKGFueSBvcmRl ciB3aWxsIGRvKS4gICovCitzdGF0aWMgcmVnX2VycmNvZGVfdAorbGlua19uZmFfbm9kZXMg KHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKQoreworICByZV9kZmFfdCAqZGZhID0g KHJlX2RmYV90ICopIGV4dHJhOworICBJZHggaWR4ID0gbm9kZS0+bm9kZV9pZHg7CisgIHJl Z19lcnJjb2RlX3QgZXJyID0gUkVHX05PRVJST1I7CisKKyAgc3dpdGNoIChub2RlLT50b2tl bi50eXBlKQorICAgIHsKKyAgICBjYXNlIENPTkNBVDoKKyAgICAgIGJyZWFrOworCisgICAg Y2FzZSBFTkRfT0ZfUkU6CisgICAgICBhc3NlcnQgKG5vZGUtPm5leHQgPT0gTlVMTCk7Cisg ICAgICBicmVhazsKKworICAgIGNhc2UgT1BfRFVQX0FTVEVSSVNLOgorICAgIGNhc2UgT1Bf QUxUOgorICAgICAgeworCUlkeCBsZWZ0LCByaWdodDsKKwlkZmEtPmhhc19wbHVyYWxfbWF0 Y2ggPSAxOworCWlmIChub2RlLT5sZWZ0ICE9IE5VTEwpCisJICBsZWZ0ID0gbm9kZS0+bGVm dC0+Zmlyc3QtPm5vZGVfaWR4OworCWVsc2UKKwkgIGxlZnQgPSBub2RlLT5uZXh0LT5ub2Rl X2lkeDsKKwlpZiAobm9kZS0+cmlnaHQgIT0gTlVMTCkKKwkgIHJpZ2h0ID0gbm9kZS0+cmln aHQtPmZpcnN0LT5ub2RlX2lkeDsKKwllbHNlCisJICByaWdodCA9IG5vZGUtPm5leHQtPm5v ZGVfaWR4OworCWFzc2VydCAobGVmdCA+IC0xKTsKKwlhc3NlcnQgKHJpZ2h0ID4gLTEpOwor CWVyciA9IHJlX25vZGVfc2V0X2luaXRfMiAoZGZhLT5lZGVzdHMgKyBpZHgsIGxlZnQsIHJp Z2h0KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBBTkNIT1I6CisgICAg Y2FzZSBPUF9PUEVOX1NVQkVYUDoKKyAgICBjYXNlIE9QX0NMT1NFX1NVQkVYUDoKKyAgICAg IGVyciA9IHJlX25vZGVfc2V0X2luaXRfMSAoZGZhLT5lZGVzdHMgKyBpZHgsIG5vZGUtPm5l eHQtPm5vZGVfaWR4KTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9CQUNLX1JFRjoK KyAgICAgIGRmYS0+bmV4dHNbaWR4XSA9IG5vZGUtPm5leHQtPm5vZGVfaWR4OworICAgICAg aWYgKG5vZGUtPnRva2VuLnR5cGUgPT0gT1BfQkFDS19SRUYpCisJZXJyID0gcmVfbm9kZV9z ZXRfaW5pdF8xIChkZmEtPmVkZXN0cyArIGlkeCwgZGZhLT5uZXh0c1tpZHhdKTsKKyAgICAg IGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGFzc2VydCAoIUlTX0VQU0lMT05fTk9E RSAobm9kZS0+dG9rZW4udHlwZSkpOworICAgICAgZGZhLT5uZXh0c1tpZHhdID0gbm9kZS0+ bmV4dC0+bm9kZV9pZHg7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgcmV0dXJuIGVycjsK K30KKworLyogRHVwbGljYXRlIHRoZSBlcHNpbG9uIGNsb3N1cmUgb2YgdGhlIG5vZGUgUk9P VF9OT0RFLgorICAgTm90ZSB0aGF0IGR1cGxpY2F0ZWQgbm9kZXMgaGF2ZSBjb25zdHJhaW50 IElOSVRfQ09OU1RSQUlOVCBpbiBhZGRpdGlvbgorICAgdG8gdGhlaXIgb3duIGNvbnN0cmFp bnQuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorZHVwbGljYXRlX25vZGVfY2xvc3Vy ZSAocmVfZGZhX3QgKmRmYSwgSWR4IHRvcF9vcmdfbm9kZSwgSWR4IHRvcF9jbG9uZV9ub2Rl LAorCQkJSWR4IHJvb3Rfbm9kZSwgdW5zaWduZWQgaW50IGluaXRfY29uc3RyYWludCkKK3sK KyAgSWR4IG9yZ19ub2RlLCBjbG9uZV9ub2RlOworICBib29sIG9rOworICB1bnNpZ25lZCBp bnQgY29uc3RyYWludCA9IGluaXRfY29uc3RyYWludDsKKyAgZm9yIChvcmdfbm9kZSA9IHRv cF9vcmdfbm9kZSwgY2xvbmVfbm9kZSA9IHRvcF9jbG9uZV9ub2RlOzspCisgICAgeworICAg ICAgSWR4IG9yZ19kZXN0LCBjbG9uZV9kZXN0OworICAgICAgaWYgKGRmYS0+bm9kZXNbb3Jn X25vZGVdLnR5cGUgPT0gT1BfQkFDS19SRUYpCisJeworCSAgLyogSWYgdGhlIGJhY2sgcmVm ZXJlbmNlIGVwc2lsb24tdHJhbnNpdCwgaXRzIGRlc3RpbmF0aW9uIG11c3QKKwkgICAgIGFs c28gaGF2ZSB0aGUgY29uc3RyYWludC4gIFRoZW4gZHVwbGljYXRlIHRoZSBlcHNpbG9uIGNs b3N1cmUKKwkgICAgIG9mIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgYmFjayByZWZlcmVuY2Us IGFuZCBzdG9yZSBpdCBpbgorCSAgICAgZWRlc3RzIG9mIHRoZSBiYWNrIHJlZmVyZW5jZS4g ICovCisJICBvcmdfZGVzdCA9IGRmYS0+bmV4dHNbb3JnX25vZGVdOworCSAgcmVfbm9kZV9z ZXRfZW1wdHkgKGRmYS0+ZWRlc3RzICsgY2xvbmVfbm9kZSk7CisJICBjbG9uZV9kZXN0ID0g ZHVwbGljYXRlX25vZGUgKGRmYSwgb3JnX2Rlc3QsIGNvbnN0cmFpbnQpOworCSAgaWYgKEJF IChjbG9uZV9kZXN0ID09IC0xLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJICBk ZmEtPm5leHRzW2Nsb25lX25vZGVdID0gZGZhLT5uZXh0c1tvcmdfbm9kZV07CisJICBvayA9 IHJlX25vZGVfc2V0X2luc2VydCAoZGZhLT5lZGVzdHMgKyBjbG9uZV9ub2RlLCBjbG9uZV9k ZXN0KTsKKwkgIGlmIChCRSAoISBvaywgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOwor CX0KKyAgICAgIGVsc2UgaWYgKGRmYS0+ZWRlc3RzW29yZ19ub2RlXS5uZWxlbSA9PSAwKQor CXsKKwkgIC8qIEluIGNhc2Ugb2YgdGhlIG5vZGUgY2FuJ3QgZXBzaWxvbi10cmFuc2l0LCBk b24ndCBkdXBsaWNhdGUgdGhlCisJICAgICBkZXN0aW5hdGlvbiBhbmQgc3RvcmUgdGhlIG9y aWdpbmFsIGRlc3RpbmF0aW9uIGFzIHRoZQorCSAgICAgZGVzdGluYXRpb24gb2YgdGhlIG5v ZGUuICAqLworCSAgZGZhLT5uZXh0c1tjbG9uZV9ub2RlXSA9IGRmYS0+bmV4dHNbb3JnX25v ZGVdOworCSAgYnJlYWs7CisJfQorICAgICAgZWxzZSBpZiAoZGZhLT5lZGVzdHNbb3JnX25v ZGVdLm5lbGVtID09IDEpCisJeworCSAgLyogSW4gY2FzZSBvZiB0aGUgbm9kZSBjYW4gZXBz aWxvbi10cmFuc2l0LCBhbmQgaXQgaGFzIG9ubHkgb25lCisJICAgICBkZXN0aW5hdGlvbi4g ICovCisJICBvcmdfZGVzdCA9IGRmYS0+ZWRlc3RzW29yZ19ub2RlXS5lbGVtc1swXTsKKwkg IHJlX25vZGVfc2V0X2VtcHR5IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUpOworCSAgLyog SWYgdGhlIG5vZGUgaXMgcm9vdF9ub2RlIGl0c2VsZiwgaXQgbWVhbnMgdGhlIGVwc2lsb24g Y2xvc3VyZQorCSAgICAgaGFzIGEgbG9vcC4gIFRoZW4gdGllIGl0IHRvIHRoZSBkZXN0aW5h dGlvbiBvZiB0aGUgcm9vdF9ub2RlLiAgKi8KKwkgIGlmIChvcmdfbm9kZSA9PSByb290X25v ZGUgJiYgY2xvbmVfbm9kZSAhPSBvcmdfbm9kZSkKKwkgICAgeworCSAgICAgIG9rID0gcmVf bm9kZV9zZXRfaW5zZXJ0IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUsIG9yZ19kZXN0KTsK KwkgICAgICBpZiAoQkUgKCEgb2ssIDApKQorCSAgICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7 CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIC8qIEluIGNhc2UgdGhlIG5vZGUgaGFzIGFu b3RoZXIgY29uc3RyYWludCwgYXBwZW5kIGl0LiAgKi8KKwkgIGNvbnN0cmFpbnQgfD0gZGZh LT5ub2Rlc1tvcmdfbm9kZV0uY29uc3RyYWludDsKKwkgIGNsb25lX2Rlc3QgPSBkdXBsaWNh dGVfbm9kZSAoZGZhLCBvcmdfZGVzdCwgY29uc3RyYWludCk7CisJICBpZiAoQkUgKGNsb25l X2Rlc3QgPT0gLTEsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwkgIG9rID0gcmVf bm9kZV9zZXRfaW5zZXJ0IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUsIGNsb25lX2Rlc3Qp OworCSAgaWYgKEJFICghIG9rLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQor ICAgICAgZWxzZSAvKiBkZmEtPmVkZXN0c1tvcmdfbm9kZV0ubmVsZW0gPT0gMiAqLworCXsK KwkgIC8qIEluIGNhc2Ugb2YgdGhlIG5vZGUgY2FuIGVwc2lsb24tdHJhbnNpdCwgYW5kIGl0 IGhhcyB0d28KKwkgICAgIGRlc3RpbmF0aW9ucy4gSW4gdGhlIGJpbl90cmVlX3QgYW5kIERG QSwgdGhhdCdzICd8JyBhbmQgJyonLiAgICovCisJICBvcmdfZGVzdCA9IGRmYS0+ZWRlc3Rz W29yZ19ub2RlXS5lbGVtc1swXTsKKwkgIHJlX25vZGVfc2V0X2VtcHR5IChkZmEtPmVkZXN0 cyArIGNsb25lX25vZGUpOworCSAgLyogU2VhcmNoIGZvciBhIGR1cGxpY2F0ZWQgbm9kZSB3 aGljaCBzYXRpc2ZpZXMgdGhlIGNvbnN0cmFpbnQuICAqLworCSAgY2xvbmVfZGVzdCA9IHNl YXJjaF9kdXBsaWNhdGVkX25vZGUgKGRmYSwgb3JnX2Rlc3QsIGNvbnN0cmFpbnQpOworCSAg aWYgKGNsb25lX2Rlc3QgPT0gLTEpCisJICAgIHsKKwkgICAgICAvKiBUaGVyZSBpcyBubyBz dWNoIGR1cGxpY2F0ZWQgbm9kZSwgY3JlYXRlIGEgbmV3IG9uZS4gICovCisJICAgICAgcmVn X2VycmNvZGVfdCBlcnI7CisJICAgICAgY2xvbmVfZGVzdCA9IGR1cGxpY2F0ZV9ub2RlIChk ZmEsIG9yZ19kZXN0LCBjb25zdHJhaW50KTsKKwkgICAgICBpZiAoQkUgKGNsb25lX2Rlc3Qg PT0gLTEsIDApKQorCQlyZXR1cm4gUkVHX0VTUEFDRTsKKwkgICAgICBvayA9IHJlX25vZGVf c2V0X2luc2VydCAoZGZhLT5lZGVzdHMgKyBjbG9uZV9ub2RlLCBjbG9uZV9kZXN0KTsKKwkg ICAgICBpZiAoQkUgKCEgb2ssIDApKQorCQlyZXR1cm4gUkVHX0VTUEFDRTsKKwkgICAgICBl cnIgPSBkdXBsaWNhdGVfbm9kZV9jbG9zdXJlIChkZmEsIG9yZ19kZXN0LCBjbG9uZV9kZXN0 LAorCQkJCQkgICAgcm9vdF9ub2RlLCBjb25zdHJhaW50KTsKKwkgICAgICBpZiAoQkUgKGVy ciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCXJldHVybiBlcnI7CisJICAgIH0KKwkgIGVsc2UK KwkgICAgeworCSAgICAgIC8qIFRoZXJlIGlzIGEgZHVwbGljYXRlZCBub2RlIHdoaWNoIHNh dGlzZmllcyB0aGUgY29uc3RyYWludCwKKwkJIHVzZSBpdCB0byBhdm9pZCBpbmZpbml0ZSBs b29wLiAgKi8KKwkgICAgICBvayA9IHJlX25vZGVfc2V0X2luc2VydCAoZGZhLT5lZGVzdHMg KyBjbG9uZV9ub2RlLCBjbG9uZV9kZXN0KTsKKwkgICAgICBpZiAoQkUgKCEgb2ssIDApKQor CQlyZXR1cm4gUkVHX0VTUEFDRTsKKwkgICAgfQorCisJICBvcmdfZGVzdCA9IGRmYS0+ZWRl c3RzW29yZ19ub2RlXS5lbGVtc1sxXTsKKwkgIGNsb25lX2Rlc3QgPSBkdXBsaWNhdGVfbm9k ZSAoZGZhLCBvcmdfZGVzdCwgY29uc3RyYWludCk7CisJICBpZiAoQkUgKGNsb25lX2Rlc3Qg PT0gLTEsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwkgIG9rID0gcmVfbm9kZV9z ZXRfaW5zZXJ0IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUsIGNsb25lX2Rlc3QpOworCSAg aWYgKEJFICghIG9rLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQorICAgICAg b3JnX25vZGUgPSBvcmdfZGVzdDsKKyAgICAgIGNsb25lX25vZGUgPSBjbG9uZV9kZXN0Owor ICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBTZWFyY2ggZm9yIGEgbm9k ZSB3aGljaCBpcyBkdXBsaWNhdGVkIGZyb20gdGhlIG5vZGUgT1JHX05PREUsIGFuZAorICAg c2F0aXNmaWVzIHRoZSBjb25zdHJhaW50IENPTlNUUkFJTlQuICAqLworCitzdGF0aWMgSWR4 CitzZWFyY2hfZHVwbGljYXRlZF9ub2RlIChjb25zdCByZV9kZmFfdCAqZGZhLCBJZHggb3Jn X25vZGUsCisJCQl1bnNpZ25lZCBpbnQgY29uc3RyYWludCkKK3sKKyAgSWR4IGlkeDsKKyAg Zm9yIChpZHggPSBkZmEtPm5vZGVzX2xlbiAtIDE7IGRmYS0+bm9kZXNbaWR4XS5kdXBsaWNh dGVkICYmIGlkeCA+IDA7IC0taWR4KQorICAgIHsKKyAgICAgIGlmIChvcmdfbm9kZSA9PSBk ZmEtPm9yZ19pbmRpY2VzW2lkeF0KKwkgICYmIGNvbnN0cmFpbnQgPT0gZGZhLT5ub2Rlc1tp ZHhdLmNvbnN0cmFpbnQpCisJcmV0dXJuIGlkeDsgLyogRm91bmQuICAqLworICAgIH0KKyAg cmV0dXJuIC0xOyAvKiBOb3QgZm91bmQuICAqLworfQorCisvKiBEdXBsaWNhdGUgdGhlIG5v ZGUgd2hvc2UgaW5kZXggaXMgT1JHX0lEWCBhbmQgc2V0IHRoZSBjb25zdHJhaW50IENPTlNU UkFJTlQuCisgICBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBuZXcgbm9kZSwgb3IgLTEgaWYg aW5zdWZmaWNpZW50IHN0b3JhZ2UgaXMKKyAgIGF2YWlsYWJsZS4gICovCisKK3N0YXRpYyBJ ZHgKK2R1cGxpY2F0ZV9ub2RlIChyZV9kZmFfdCAqZGZhLCBJZHggb3JnX2lkeCwgdW5zaWdu ZWQgaW50IGNvbnN0cmFpbnQpCit7CisgIElkeCBkdXBfaWR4ID0gcmVfZGZhX2FkZF9ub2Rl IChkZmEsIGRmYS0+bm9kZXNbb3JnX2lkeF0pOworICBpZiAoQkUgKGR1cF9pZHggIT0gLTEs IDEpKQorICAgIHsKKyAgICAgIGRmYS0+bm9kZXNbZHVwX2lkeF0uY29uc3RyYWludCA9IGNv bnN0cmFpbnQ7CisgICAgICBkZmEtPm5vZGVzW2R1cF9pZHhdLmNvbnN0cmFpbnQgfD0gZGZh LT5ub2Rlc1tvcmdfaWR4XS5jb25zdHJhaW50OworICAgICAgZGZhLT5ub2Rlc1tkdXBfaWR4 XS5kdXBsaWNhdGVkID0gMTsKKworICAgICAgLyogU3RvcmUgdGhlIGluZGV4IG9mIHRoZSBv cmlnaW5hbCBub2RlLiAgKi8KKyAgICAgIGRmYS0+b3JnX2luZGljZXNbZHVwX2lkeF0gPSBv cmdfaWR4OworICAgIH0KKyAgcmV0dXJuIGR1cF9pZHg7Cit9CisKK3N0YXRpYyByZWdfZXJy Y29kZV90CitjYWxjX2ludmVjbG9zdXJlIChyZV9kZmFfdCAqZGZhKQoreworICBJZHggc3Jj LCBpZHg7CisgIGJvb2wgb2s7CisgIGZvciAoaWR4ID0gMDsgaWR4IDwgZGZhLT5ub2Rlc19s ZW47ICsraWR4KQorICAgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKGRmYS0+aW52ZWNsb3N1 cmVzICsgaWR4KTsKKworICBmb3IgKHNyYyA9IDA7IHNyYyA8IGRmYS0+bm9kZXNfbGVuOyAr K3NyYykKKyAgICB7CisgICAgICBJZHggKmVsZW1zID0gZGZhLT5lY2xvc3VyZXNbc3JjXS5l bGVtczsKKyAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgZGZhLT5lY2xvc3VyZXNbc3JjXS5u ZWxlbTsgKytpZHgpCisJeworCSAgb2sgPSByZV9ub2RlX3NldF9pbnNlcnRfbGFzdCAoZGZh LT5pbnZlY2xvc3VyZXMgKyBlbGVtc1tpZHhdLCBzcmMpOworCSAgaWYgKEJFICghIG9rLCAw KSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQorICAgIH0KKworICByZXR1cm4gUkVH X05PRVJST1I7Cit9CisKKy8qIENhbGN1bGF0ZSAiZWNsb3N1cmUiIGZvciBhbGwgdGhlIG5v ZGUgaW4gREZBLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2NhbGNfZWNsb3N1cmUg KHJlX2RmYV90ICpkZmEpCit7CisgIElkeCBub2RlX2lkeDsKKyAgYm9vbCBpbmNvbXBsZXRl OworI2lmZGVmIERFQlVHCisgIGFzc2VydCAoZGZhLT5ub2Rlc19sZW4gPiAwKTsKKyNlbmRp ZgorICBpbmNvbXBsZXRlID0gZmFsc2U7CisgIC8qIEZvciBlYWNoIG5vZGVzLCBjYWxjdWxh dGUgZXBzaWxvbiBjbG9zdXJlLiAgKi8KKyAgZm9yIChub2RlX2lkeCA9IDA7IDsgKytub2Rl X2lkeCkKKyAgICB7CisgICAgICByZWdfZXJyY29kZV90IGVycjsKKyAgICAgIHJlX25vZGVf c2V0IGVjbG9zdXJlX2VsZW07CisgICAgICBpZiAobm9kZV9pZHggPT0gZGZhLT5ub2Rlc19s ZW4pCisJeworCSAgaWYgKCFpbmNvbXBsZXRlKQorCSAgICBicmVhazsKKwkgIGluY29tcGxl dGUgPSBmYWxzZTsKKwkgIG5vZGVfaWR4ID0gMDsKKwl9CisKKyNpZmRlZiBERUJVRworICAg ICAgYXNzZXJ0IChkZmEtPmVjbG9zdXJlc1tub2RlX2lkeF0ubmVsZW0gIT0gLTEpOworI2Vu ZGlmCisKKyAgICAgIC8qIElmIHdlIGhhdmUgYWxyZWFkeSBjYWxjdWxhdGVkLCBza2lwIGl0 LiAgKi8KKyAgICAgIGlmIChkZmEtPmVjbG9zdXJlc1tub2RlX2lkeF0ubmVsZW0gIT0gMCkK Kwljb250aW51ZTsKKyAgICAgIC8qIENhbGN1bGF0ZSBlcHNpbG9uIGNsb3N1cmUgb2YgJ25v ZGVfaWR4Jy4gICovCisgICAgICBlcnIgPSBjYWxjX2VjbG9zdXJlX2l0ZXIgKCZlY2xvc3Vy ZV9lbGVtLCBkZmEsIG5vZGVfaWR4LCB0cnVlKTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJF R19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gZXJyOworCisgICAgICBpZiAoZGZhLT5lY2xvc3Vy ZXNbbm9kZV9pZHhdLm5lbGVtID09IDApCisJeworCSAgaW5jb21wbGV0ZSA9IHRydWU7CisJ ICByZV9ub2RlX3NldF9mcmVlICgmZWNsb3N1cmVfZWxlbSk7CisJfQorICAgIH0KKyAgcmV0 dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBDYWxjdWxhdGUgZXBzaWxvbiBjbG9zdXJlIG9m IE5PREUuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorY2FsY19lY2xvc3VyZV9pdGVy IChyZV9ub2RlX3NldCAqbmV3X3NldCwgcmVfZGZhX3QgKmRmYSwgSWR4IG5vZGUsIGJvb2wg cm9vdCkKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIElkeCBpOworICByZV9ub2RlX3Nl dCBlY2xvc3VyZTsKKyAgYm9vbCBvazsKKyAgYm9vbCBpbmNvbXBsZXRlID0gZmFsc2U7Cisg IGVyciA9IHJlX25vZGVfc2V0X2FsbG9jICgmZWNsb3N1cmUsIGRmYS0+ZWRlc3RzW25vZGVd Lm5lbGVtICsgMSk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICBy ZXR1cm4gZXJyOworCisgIC8qIFRoaXMgaW5kaWNhdGVzIHRoYXQgd2UgYXJlIGNhbGN1bGF0 aW5nIHRoaXMgbm9kZSBub3cuCisgICAgIFdlIHJlZmVyZW5jZSB0aGlzIHZhbHVlIHRvIGF2 b2lkIGluZmluaXRlIGxvb3AuICAqLworICBkZmEtPmVjbG9zdXJlc1tub2RlXS5uZWxlbSA9 IC0xOworCisgIC8qIElmIHRoZSBjdXJyZW50IG5vZGUgaGFzIGNvbnN0cmFpbnRzLCBkdXBs aWNhdGUgYWxsIG5vZGVzCisgICAgIHNpbmNlIHRoZXkgbXVzdCBpbmhlcml0IHRoZSBjb25z dHJhaW50cy4gICovCisgIGlmIChkZmEtPm5vZGVzW25vZGVdLmNvbnN0cmFpbnQKKyAgICAg ICYmIGRmYS0+ZWRlc3RzW25vZGVdLm5lbGVtCisgICAgICAmJiAhZGZhLT5ub2Rlc1tkZmEt PmVkZXN0c1tub2RlXS5lbGVtc1swXV0uZHVwbGljYXRlZCkKKyAgICB7CisgICAgICBlcnIg PSBkdXBsaWNhdGVfbm9kZV9jbG9zdXJlIChkZmEsIG5vZGUsIG5vZGUsIG5vZGUsCisJCQkJ ICAgIGRmYS0+bm9kZXNbbm9kZV0uY29uc3RyYWludCk7CisgICAgICBpZiAoQkUgKGVyciAh PSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIGVycjsKKyAgICB9CisKKyAgLyogRXhwYW5k IGVhY2ggZXBzaWxvbiBkZXN0aW5hdGlvbiBub2Rlcy4gICovCisgIGlmIChJU19FUFNJTE9O X05PREUoZGZhLT5ub2Rlc1tub2RlXS50eXBlKSkKKyAgICBmb3IgKGkgPSAwOyBpIDwgZGZh LT5lZGVzdHNbbm9kZV0ubmVsZW07ICsraSkKKyAgICAgIHsKKwlyZV9ub2RlX3NldCBlY2xv c3VyZV9lbGVtOworCUlkeCBlZGVzdCA9IGRmYS0+ZWRlc3RzW25vZGVdLmVsZW1zW2ldOwor CS8qIElmIGNhbGN1bGF0aW5nIHRoZSBlcHNpbG9uIGNsb3N1cmUgb2YgJ2VkZXN0JyBpcyBp biBwcm9ncmVzcywKKwkgICByZXR1cm4gaW50ZXJtZWRpYXRlIHJlc3VsdC4gICovCisJaWYg KGRmYS0+ZWNsb3N1cmVzW2VkZXN0XS5uZWxlbSA9PSAtMSkKKwkgIHsKKwkgICAgaW5jb21w bGV0ZSA9IHRydWU7CisJICAgIGNvbnRpbnVlOworCSAgfQorCS8qIElmIHdlIGhhdmVuJ3Qg Y2FsY3VsYXRlZCB0aGUgZXBzaWxvbiBjbG9zdXJlIG9mICdlZGVzdCcgeWV0LAorCSAgIGNh bGN1bGF0ZSBub3cuIE90aGVyd2lzZSB1c2UgY2FsY3VsYXRlZCBlcHNpbG9uIGNsb3N1cmUu ICAqLworCWlmIChkZmEtPmVjbG9zdXJlc1tlZGVzdF0ubmVsZW0gPT0gMCkKKwkgIHsKKwkg ICAgZXJyID0gY2FsY19lY2xvc3VyZV9pdGVyICgmZWNsb3N1cmVfZWxlbSwgZGZhLCBlZGVz dCwgZmFsc2UpOworCSAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAg ICAgcmV0dXJuIGVycjsKKwkgIH0KKwllbHNlCisJICBlY2xvc3VyZV9lbGVtID0gZGZhLT5l Y2xvc3VyZXNbZWRlc3RdOworCS8qIE1lcmdlIHRoZSBlcHNpbG9uIGNsb3N1cmUgb2YgJ2Vk ZXN0Jy4gICovCisJZXJyID0gcmVfbm9kZV9zZXRfbWVyZ2UgKCZlY2xvc3VyZSwgJmVjbG9z dXJlX2VsZW0pOworCWlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgIHJldHVy biBlcnI7CisJLyogSWYgdGhlIGVwc2lsb24gY2xvc3VyZSBvZiAnZWRlc3QnIGlzIGluY29t cGxldGUsCisJICAgdGhlIGVwc2lsb24gY2xvc3VyZSBvZiB0aGlzIG5vZGUgaXMgYWxzbyBp bmNvbXBsZXRlLiAgKi8KKwlpZiAoZGZhLT5lY2xvc3VyZXNbZWRlc3RdLm5lbGVtID09IDAp CisJICB7CisJICAgIGluY29tcGxldGUgPSB0cnVlOworCSAgICByZV9ub2RlX3NldF9mcmVl ICgmZWNsb3N1cmVfZWxlbSk7CisJICB9CisgICAgICB9CisKKyAgLyogQW4gZXBzaWxvbiBj bG9zdXJlIGluY2x1ZGVzIGl0c2VsZi4gICovCisgIG9rID0gcmVfbm9kZV9zZXRfaW5zZXJ0 ICgmZWNsb3N1cmUsIG5vZGUpOworICBpZiAoQkUgKCEgb2ssIDApKQorICAgIHJldHVybiBS RUdfRVNQQUNFOworICBpZiAoaW5jb21wbGV0ZSAmJiAhcm9vdCkKKyAgICBkZmEtPmVjbG9z dXJlc1tub2RlXS5uZWxlbSA9IDA7CisgIGVsc2UKKyAgICBkZmEtPmVjbG9zdXJlc1tub2Rl XSA9IGVjbG9zdXJlOworICAqbmV3X3NldCA9IGVjbG9zdXJlOworICByZXR1cm4gUkVHX05P RVJST1I7Cit9CisMCisvKiBGdW5jdGlvbnMgZm9yIHRva2VuIHdoaWNoIGFyZSB1c2VkIGlu IHRoZSBwYXJzZXIuICAqLworCisvKiBGZXRjaCBhIHRva2VuIGZyb20gSU5QVVQuCisgICBX ZSBtdXN0IG5vdCB1c2UgdGhpcyBmdW5jdGlvbiBpbnNpZGUgYnJhY2tldCBleHByZXNzaW9u cy4gICovCisKK3N0YXRpYyB2b2lkCitmZXRjaF90b2tlbiAocmVfdG9rZW5fdCAqcmVzdWx0 LCByZV9zdHJpbmdfdCAqaW5wdXQsIHJlZ19zeW50YXhfdCBzeW50YXgpCit7CisgIHJlX3N0 cmluZ19za2lwX2J5dGVzIChpbnB1dCwgcGVla190b2tlbiAocmVzdWx0LCBpbnB1dCwgc3lu dGF4KSk7Cit9CisKKy8qIFBlZWsgYSB0b2tlbiBmcm9tIElOUFVULCBhbmQgcmV0dXJuIHRo ZSBsZW5ndGggb2YgdGhlIHRva2VuLgorICAgV2UgbXVzdCBub3QgdXNlIHRoaXMgZnVuY3Rp b24gaW5zaWRlIGJyYWNrZXQgZXhwcmVzc2lvbnMuICAqLworCitzdGF0aWMgaW50CitwZWVr X3Rva2VuIChyZV90b2tlbl90ICp0b2tlbiwgcmVfc3RyaW5nX3QgKmlucHV0LCByZWdfc3lu dGF4X3Qgc3ludGF4KQoreworICB1bnNpZ25lZCBjaGFyIGM7CisKKyAgaWYgKHJlX3N0cmlu Z19lb2kgKGlucHV0KSkKKyAgICB7CisgICAgICB0b2tlbi0+dHlwZSA9IEVORF9PRl9SRTsK KyAgICAgIHJldHVybiAwOworICAgIH0KKworICBjID0gcmVfc3RyaW5nX3BlZWtfYnl0ZSAo aW5wdXQsIDApOworICB0b2tlbi0+b3ByLmMgPSBjOworCisgIHRva2VuLT53b3JkX2NoYXIg PSAwOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIHRva2VuLT5tYl9wYXJ0aWFsID0gMDsK KyAgaWYgKGlucHV0LT5tYl9jdXJfbWF4ID4gMSAmJgorICAgICAgIXJlX3N0cmluZ19maXJz dF9ieXRlIChpbnB1dCwgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSkpCisgICAgeworICAg ICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisgICAgICB0b2tlbi0+bWJfcGFydGlhbCA9 IDE7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisjZW5kaWYKKyAgaWYgKGMgPT0gJ1xcJykK KyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyIGMyOworICAgICAgaWYgKHJlX3N0cmluZ19j dXJfaWR4IChpbnB1dCkgKyAxID49IHJlX3N0cmluZ19sZW5ndGggKGlucHV0KSkKKwl7CisJ ICB0b2tlbi0+dHlwZSA9IEJBQ0tfU0xBU0g7CisJICByZXR1cm4gMTsKKwl9CisKKyAgICAg IGMyID0gcmVfc3RyaW5nX3BlZWtfYnl0ZV9jYXNlIChpbnB1dCwgMSk7CisgICAgICB0b2tl bi0+b3ByLmMgPSBjMjsKKyAgICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworI2lmZGVm IFJFX0VOQUJMRV9JMThOCisgICAgICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxKQorCXsK KwkgIHdpbnRfdCB3YyA9IHJlX3N0cmluZ193Y2hhcl9hdCAoaW5wdXQsCisJCQkJCSAgcmVf c3RyaW5nX2N1cl9pZHggKGlucHV0KSArIDEpOworCSAgdG9rZW4tPndvcmRfY2hhciA9IElT X1dJREVfV09SRF9DSEFSICh3YykgIT0gMDsKKwl9CisgICAgICBlbHNlCisjZW5kaWYKKwl0 b2tlbi0+d29yZF9jaGFyID0gSVNfV09SRF9DSEFSIChjMikgIT0gMDsKKworICAgICAgc3dp dGNoIChjMikKKwl7CisJY2FzZSAnfCc6CisJICBpZiAoIShzeW50YXggJiBSRV9MSU1JVEVE X09QUykgJiYgIShzeW50YXggJiBSRV9OT19CS19WQkFSKSkKKwkgICAgdG9rZW4tPnR5cGUg PSBPUF9BTFQ7CisJICBicmVhazsKKwljYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBj YXNlICc0JzogY2FzZSAnNSc6CisJY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2Fz ZSAnOSc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19CS19SRUZTKSkKKwkgICAgeworCSAg ICAgIHRva2VuLT50eXBlID0gT1BfQkFDS19SRUY7CisJICAgICAgdG9rZW4tPm9wci5pZHgg PSBjMiAtICcxJzsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSAnPCc6CisJICBpZiAoIShz eW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgeworCSAgICAgIHRva2VuLT50eXBlID0g QU5DSE9SOworCSAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBXT1JEX0ZJUlNUOworCSAg ICB9CisJICBicmVhazsKKwljYXNlICc+JzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0dO VV9PUFMpKQorCSAgICB7CisJICAgICAgdG9rZW4tPnR5cGUgPSBBTkNIT1I7CisJICAgICAg dG9rZW4tPm9wci5jdHhfdHlwZSA9IFdPUkRfTEFTVDsKKwkgICAgfQorCSAgYnJlYWs7CisJ Y2FzZSAnYic6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgewor CSAgICAgIHRva2VuLT50eXBlID0gQU5DSE9SOworCSAgICAgIHRva2VuLT5vcHIuY3R4X3R5 cGUgPSBXT1JEX0RFTElNOworCSAgICB9CisJICBicmVhazsKKwljYXNlICdCJzoKKwkgIGlm ICghKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpKQorCSAgICB7CisJICAgICAgdG9rZW4tPnR5 cGUgPSBBTkNIT1I7CisJICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IE5PVF9XT1JEX0RF TElNOworCSAgICB9CisJICBicmVhazsKKwljYXNlICd3JzoKKwkgIGlmICghKHN5bnRheCAm IFJFX05PX0dOVV9PUFMpKQorCSAgICB0b2tlbi0+dHlwZSA9IE9QX1dPUkQ7CisJICBicmVh azsKKwljYXNlICdXJzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpKQorCSAg ICB0b2tlbi0+dHlwZSA9IE9QX05PVFdPUkQ7CisJICBicmVhazsKKwljYXNlICdzJzoKKwkg IGlmICghKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpKQorCSAgICB0b2tlbi0+dHlwZSA9IE9Q X1NQQUNFOworCSAgYnJlYWs7CisJY2FzZSAnUyc6CisJICBpZiAoIShzeW50YXggJiBSRV9O T19HTlVfT1BTKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9OT1RTUEFDRTsKKwkgIGJyZWFr OworCWNhc2UgJ2AnOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fR05VX09QUykpCisJICAg IHsKKwkgICAgICB0b2tlbi0+dHlwZSA9IEFOQ0hPUjsKKwkgICAgICB0b2tlbi0+b3ByLmN0 eF90eXBlID0gQlVGX0ZJUlNUOworCSAgICB9CisJICBicmVhazsKKwljYXNlICdcJyc6CisJ ICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgeworCSAgICAgIHRva2Vu LT50eXBlID0gQU5DSE9SOworCSAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBCVUZfTEFT VDsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSAnKCc6CisJICBpZiAoIShzeW50YXggJiBS RV9OT19CS19QQVJFTlMpKQorCSAgICB0b2tlbi0+dHlwZSA9IE9QX09QRU5fU1VCRVhQOwor CSAgYnJlYWs7CisJY2FzZSAnKSc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19CS19QQVJF TlMpKQorCSAgICB0b2tlbi0+dHlwZSA9IE9QX0NMT1NFX1NVQkVYUDsKKwkgIGJyZWFrOwor CWNhc2UgJysnOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTElNSVRFRF9PUFMpICYmIChzeW50 YXggJiBSRV9CS19QTFVTX1FNKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9EVVBfUExVUzsK KwkgIGJyZWFrOworCWNhc2UgJz8nOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTElNSVRFRF9P UFMpICYmIChzeW50YXggJiBSRV9CS19QTFVTX1FNKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBP UF9EVVBfUVVFU1RJT047CisJICBicmVhazsKKwljYXNlICd7JzoKKwkgIGlmICgoc3ludGF4 ICYgUkVfSU5URVJWQUxTKSAmJiAoIShzeW50YXggJiBSRV9OT19CS19CUkFDRVMpKSkKKwkg ICAgdG9rZW4tPnR5cGUgPSBPUF9PUEVOX0RVUF9OVU07CisJICBicmVhazsKKwljYXNlICd9 JzoKKwkgIGlmICgoc3ludGF4ICYgUkVfSU5URVJWQUxTKSAmJiAoIShzeW50YXggJiBSRV9O T19CS19CUkFDRVMpKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9DTE9TRV9EVVBfTlVNOwor CSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGJyZWFrOworCX0KKyAgICAgIHJldHVybiAyOwor ICAgIH0KKworICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKyNpZmRlZiBSRV9FTkFCTEVf STE4TgorICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxKQorICAgIHsKKyAgICAgIHdpbnRf dCB3YyA9IHJlX3N0cmluZ193Y2hhcl9hdCAoaW5wdXQsIHJlX3N0cmluZ19jdXJfaWR4IChp bnB1dCkpOworICAgICAgdG9rZW4tPndvcmRfY2hhciA9IElTX1dJREVfV09SRF9DSEFSICh3 YykgIT0gMDsKKyAgICB9CisgIGVsc2UKKyNlbmRpZgorICAgIHRva2VuLT53b3JkX2NoYXIg PSBJU19XT1JEX0NIQVIgKHRva2VuLT5vcHIuYyk7CisKKyAgc3dpdGNoIChjKQorICAgIHsK KyAgICBjYXNlICdcbic6CisgICAgICBpZiAoc3ludGF4ICYgUkVfTkVXTElORV9BTFQpCisJ dG9rZW4tPnR5cGUgPSBPUF9BTFQ7CisgICAgICBicmVhazsKKyAgICBjYXNlICd8JzoKKyAg ICAgIGlmICghKHN5bnRheCAmIFJFX0xJTUlURURfT1BTKSAmJiAoc3ludGF4ICYgUkVfTk9f QktfVkJBUikpCisJdG9rZW4tPnR5cGUgPSBPUF9BTFQ7CisgICAgICBicmVhazsKKyAgICBj YXNlICcqJzoKKyAgICAgIHRva2VuLT50eXBlID0gT1BfRFVQX0FTVEVSSVNLOworICAgICAg YnJlYWs7CisgICAgY2FzZSAnKyc6CisgICAgICBpZiAoIShzeW50YXggJiBSRV9MSU1JVEVE X09QUykgJiYgIShzeW50YXggJiBSRV9CS19QTFVTX1FNKSkKKwl0b2tlbi0+dHlwZSA9IE9Q X0RVUF9QTFVTOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnPyc6CisgICAgICBpZiAoIShz eW50YXggJiBSRV9MSU1JVEVEX09QUykgJiYgIShzeW50YXggJiBSRV9CS19QTFVTX1FNKSkK Kwl0b2tlbi0+dHlwZSA9IE9QX0RVUF9RVUVTVElPTjsKKyAgICAgIGJyZWFrOworICAgIGNh c2UgJ3snOgorICAgICAgaWYgKChzeW50YXggJiBSRV9JTlRFUlZBTFMpICYmIChzeW50YXgg JiBSRV9OT19CS19CUkFDRVMpKQorCXRva2VuLT50eXBlID0gT1BfT1BFTl9EVVBfTlVNOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSAnfSc6CisgICAgICBpZiAoKHN5bnRheCAmIFJFX0lO VEVSVkFMUykgJiYgKHN5bnRheCAmIFJFX05PX0JLX0JSQUNFUykpCisJdG9rZW4tPnR5cGUg PSBPUF9DTE9TRV9EVVBfTlVNOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnKCc6CisgICAg ICBpZiAoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TKQorCXRva2VuLT50eXBlID0gT1BfT1BF Tl9TVUJFWFA7CisgICAgICBicmVhazsKKyAgICBjYXNlICcpJzoKKyAgICAgIGlmIChzeW50 YXggJiBSRV9OT19CS19QQVJFTlMpCisJdG9rZW4tPnR5cGUgPSBPUF9DTE9TRV9TVUJFWFA7 CisgICAgICBicmVhazsKKyAgICBjYXNlICdbJzoKKyAgICAgIHRva2VuLT50eXBlID0gT1Bf T1BFTl9CUkFDS0VUOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnLic6CisgICAgICB0b2tl bi0+dHlwZSA9IE9QX1BFUklPRDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ14nOgorICAg ICAgaWYgKCEoc3ludGF4ICYgKFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUyB8IFJFX0NBUkVU X0FOQ0hPUlNfSEVSRSkpICYmCisJICByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpICE9IDAp CisJeworCSAgY2hhciBwcmV2ID0gcmVfc3RyaW5nX3BlZWtfYnl0ZSAoaW5wdXQsIC0xKTsK KwkgIGlmICghKHN5bnRheCAmIFJFX05FV0xJTkVfQUxUKSB8fCBwcmV2ICE9ICdcbicpCisJ ICAgIGJyZWFrOworCX0KKyAgICAgIHRva2VuLT50eXBlID0gQU5DSE9SOworICAgICAgdG9r ZW4tPm9wci5jdHhfdHlwZSA9IExJTkVfRklSU1Q7CisgICAgICBicmVhazsKKyAgICBjYXNl ICckJzoKKyAgICAgIGlmICghKHN5bnRheCAmIFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUykg JiYKKwkgIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkgKyAxICE9IHJlX3N0cmluZ19sZW5n dGggKGlucHV0KSkKKwl7CisJICByZV90b2tlbl90IG5leHQ7CisJICByZV9zdHJpbmdfc2tp cF9ieXRlcyAoaW5wdXQsIDEpOworCSAgcGVla190b2tlbiAoJm5leHQsIGlucHV0LCBzeW50 YXgpOworCSAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKGlucHV0LCAtMSk7CisJICBpZiAobmV4 dC50eXBlICE9IE9QX0FMVCAmJiBuZXh0LnR5cGUgIT0gT1BfQ0xPU0VfU1VCRVhQKQorCSAg ICBicmVhazsKKwl9CisgICAgICB0b2tlbi0+dHlwZSA9IEFOQ0hPUjsKKyAgICAgIHRva2Vu LT5vcHIuY3R4X3R5cGUgPSBMSU5FX0xBU1Q7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0 OgorICAgICAgYnJlYWs7CisgICAgfQorICByZXR1cm4gMTsKK30KKworLyogUGVlayBhIHRv a2VuIGZyb20gSU5QVVQsIGFuZCByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgdG9rZW4uCisg ICBXZSBtdXN0IG5vdCB1c2UgdGhpcyBmdW5jdGlvbiBvdXQgb2YgYnJhY2tldCBleHByZXNz aW9ucy4gICovCisKK3N0YXRpYyBpbnQKK3BlZWtfdG9rZW5fYnJhY2tldCAocmVfdG9rZW5f dCAqdG9rZW4sIHJlX3N0cmluZ190ICppbnB1dCwgcmVnX3N5bnRheF90IHN5bnRheCkKK3sK KyAgdW5zaWduZWQgY2hhciBjOworICBpZiAocmVfc3RyaW5nX2VvaSAoaW5wdXQpKQorICAg IHsKKyAgICAgIHRva2VuLT50eXBlID0gRU5EX09GX1JFOworICAgICAgcmV0dXJuIDA7Cisg ICAgfQorICBjID0gcmVfc3RyaW5nX3BlZWtfYnl0ZSAoaW5wdXQsIDApOworICB0b2tlbi0+ b3ByLmMgPSBjOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKGlucHV0LT5tYl9j dXJfbWF4ID4gMSAmJgorICAgICAgIXJlX3N0cmluZ19maXJzdF9ieXRlIChpbnB1dCwgcmVf c3RyaW5nX2N1cl9pZHggKGlucHV0KSkpCisgICAgeworICAgICAgdG9rZW4tPnR5cGUgPSBD SEFSQUNURVI7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisjZW5kaWYgLyogUkVfRU5BQkxF X0kxOE4gKi8KKworICBpZiAoYyA9PSAnXFwnICYmIChzeW50YXggJiBSRV9CQUNLU0xBU0hf RVNDQVBFX0lOX0xJU1RTKQorICAgICAgJiYgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSAr IDEgPCByZV9zdHJpbmdfbGVuZ3RoIChpbnB1dCkpCisgICAgeworICAgICAgLyogSW4gdGhp cyBjYXNlLCAnXCcgZXNjYXBlIGEgY2hhcmFjdGVyLiAgKi8KKyAgICAgIHVuc2lnbmVkIGNo YXIgYzI7CisgICAgICByZV9zdHJpbmdfc2tpcF9ieXRlcyAoaW5wdXQsIDEpOworICAgICAg YzIgPSByZV9zdHJpbmdfcGVla19ieXRlIChpbnB1dCwgMCk7CisgICAgICB0b2tlbi0+b3By LmMgPSBjMjsKKyAgICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworICAgICAgcmV0dXJu IDE7CisgICAgfQorICBpZiAoYyA9PSAnWycpIC8qICdbJyBpcyBhIHNwZWNpYWwgY2hhciBp biBhIGJyYWNrZXQgZXhwcy4gICovCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciBjMjsK KyAgICAgIGludCB0b2tlbl9sZW47CisgICAgICBpZiAocmVfc3RyaW5nX2N1cl9pZHggKGlu cHV0KSArIDEgPCByZV9zdHJpbmdfbGVuZ3RoIChpbnB1dCkpCisJYzIgPSByZV9zdHJpbmdf cGVla19ieXRlIChpbnB1dCwgMSk7CisgICAgICBlbHNlCisJYzIgPSAwOworICAgICAgdG9r ZW4tPm9wci5jID0gYzI7CisgICAgICB0b2tlbl9sZW4gPSAyOworICAgICAgc3dpdGNoIChj MikKKwl7CisJY2FzZSAnLic6CisJICB0b2tlbi0+dHlwZSA9IE9QX09QRU5fQ09MTF9FTEVN OworCSAgYnJlYWs7CisKKwljYXNlICc9JzoKKwkgIHRva2VuLT50eXBlID0gT1BfT1BFTl9F UVVJVl9DTEFTUzsKKwkgIGJyZWFrOworCisJY2FzZSAnOic6CisJICBpZiAoc3ludGF4ICYg UkVfQ0hBUl9DTEFTU0VTKQorCSAgICB7CisJICAgICAgdG9rZW4tPnR5cGUgPSBPUF9PUEVO X0NIQVJfQ0xBU1M7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIEZBTExUSFJPVUdIOwor CWRlZmF1bHQ6CisJICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKwkgIHRva2VuLT5vcHIu YyA9IGM7CisJICB0b2tlbl9sZW4gPSAxOworCSAgYnJlYWs7CisJfQorICAgICAgcmV0dXJu IHRva2VuX2xlbjsKKyAgICB9CisgIHN3aXRjaCAoYykKKyAgICB7CisgICAgY2FzZSAnLSc6 CisgICAgICB0b2tlbi0+dHlwZSA9IE9QX0NIQVJTRVRfUkFOR0U7CisgICAgICBicmVhazsK KyAgICBjYXNlICddJzoKKyAgICAgIHRva2VuLT50eXBlID0gT1BfQ0xPU0VfQlJBQ0tFVDsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgJ14nOgorICAgICAgdG9rZW4tPnR5cGUgPSBPUF9O T05fTUFUQ0hfTElTVDsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICB0b2tl bi0+dHlwZSA9IENIQVJBQ1RFUjsKKyAgICB9CisgIHJldHVybiAxOworfQorDAorLyogRnVu Y3Rpb25zIGZvciBwYXJzZXIuICAqLworCisvKiBFbnRyeSBwb2ludCBvZiB0aGUgcGFyc2Vy LgorICAgUGFyc2UgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBSRUdFWFAgYW5kIHJldHVybiB0 aGUgc3RydWN0dXJlIHRyZWUuCisgICBJZiBhbiBlcnJvciBvY2N1cnMsIEVSUiBpcyBzZXQg YnkgZXJyb3IgY29kZSwgYW5kIHJldHVybiBOVUxMLgorICAgVGhpcyBmdW5jdGlvbiBidWls ZCB0aGUgZm9sbG93aW5nIHRyZWUsIGZyb20gcmVndWxhciBleHByZXNzaW9uIDxyZWdfZXhw PjoKKwkgICBDQVQKKwkgICAvIFwKKwkgIC8gICBcCisgICA8cmVnX2V4cD4gIEVPUgorCisg ICBDQVQgbWVhbnMgY29uY2F0ZW5hdGlvbi4KKyAgIEVPUiBtZWFucyBlbmQgb2YgcmVndWxh ciBleHByZXNzaW9uLiAgKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorcGFyc2UgKHJlX3N0 cmluZ190ICpyZWdleHAsIHJlZ2V4X3QgKnByZWcsIHJlZ19zeW50YXhfdCBzeW50YXgsCisg ICAgICAgcmVnX2VycmNvZGVfdCAqZXJyKQoreworICByZV9kZmFfdCAqZGZhID0gcHJlZy0+ YnVmZmVyOworICBiaW5fdHJlZV90ICp0cmVlLCAqZW9yLCAqcm9vdDsKKyAgcmVfdG9rZW5f dCBjdXJyZW50X3Rva2VuOworICBkZmEtPnN5bnRheCA9IHN5bnRheDsKKyAgZmV0Y2hfdG9r ZW4gKCZjdXJyZW50X3Rva2VuLCByZWdleHAsIHN5bnRheCB8IFJFX0NBUkVUX0FOQ0hPUlNf SEVSRSk7CisgIHRyZWUgPSBwYXJzZV9yZWdfZXhwIChyZWdleHAsIHByZWcsICZjdXJyZW50 X3Rva2VuLCBzeW50YXgsIDAsIGVycik7CisgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJP UiAmJiB0cmVlID09IE5VTEwsIDApKQorICAgIHJldHVybiBOVUxMOworICBlb3IgPSBjcmVh dGVfdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCBFTkRfT0ZfUkUpOworICBpZiAodHJlZSAhPSBO VUxMKQorICAgIHJvb3QgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlLCBlb3IsIENPTkNBVCk7 CisgIGVsc2UKKyAgICByb290ID0gZW9yOworICBpZiAoQkUgKGVvciA9PSBOVUxMIHx8IHJv b3QgPT0gTlVMTCwgMCkpCisgICAgeworICAgICAgKmVyciA9IFJFR19FU1BBQ0U7CisgICAg ICByZXR1cm4gTlVMTDsKKyAgICB9CisgIHJldHVybiByb290OworfQorCisvKiBUaGlzIGZ1 bmN0aW9uIGJ1aWxkIHRoZSBmb2xsb3dpbmcgdHJlZSwgZnJvbSByZWd1bGFyIGV4cHJlc3Np b24KKyAgIDxicmFuY2gxPnw8YnJhbmNoMj46CisJICAgQUxUCisJICAgLyBcCisJICAvICAg XAorICAgPGJyYW5jaDE+IDxicmFuY2gyPgorCisgICBBTFQgbWVhbnMgYWx0ZXJuYXRpdmUs IHdoaWNoIHJlcHJlc2VudHMgdGhlIG9wZXJhdG9yICd8Jy4gICovCisKK3N0YXRpYyBiaW5f dHJlZV90ICoKK3BhcnNlX3JlZ19leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlZ2V4X3Qg KnByZWcsIHJlX3Rva2VuX3QgKnRva2VuLAorCSAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4 LCBJZHggbmVzdCwgcmVnX2VycmNvZGVfdCAqZXJyKQoreworICByZV9kZmFfdCAqZGZhID0g cHJlZy0+YnVmZmVyOworICBiaW5fdHJlZV90ICp0cmVlLCAqYnJhbmNoID0gTlVMTDsKKyAg Yml0c2V0X3dvcmRfdCBpbml0aWFsX2JrcmVmX21hcCA9IGRmYS0+Y29tcGxldGVkX2JrcmVm X21hcDsKKyAgdHJlZSA9IHBhcnNlX2JyYW5jaCAocmVnZXhwLCBwcmVnLCB0b2tlbiwgc3lu dGF4LCBuZXN0LCBlcnIpOworICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgdHJl ZSA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gTlVMTDsKKworICB3aGlsZSAodG9rZW4tPnR5 cGUgPT0gT1BfQUxUKQorICAgIHsKKyAgICAgIGZldGNoX3Rva2VuICh0b2tlbiwgcmVnZXhw LCBzeW50YXggfCBSRV9DQVJFVF9BTkNIT1JTX0hFUkUpOworICAgICAgaWYgKHRva2VuLT50 eXBlICE9IE9QX0FMVCAmJiB0b2tlbi0+dHlwZSAhPSBFTkRfT0ZfUkUKKwkgICYmIChuZXN0 ID09IDAgfHwgdG9rZW4tPnR5cGUgIT0gT1BfQ0xPU0VfU1VCRVhQKSkKKwl7CisJICBiaXRz ZXRfd29yZF90IGFjY3VtdWxhdGVkX2JrcmVmX21hcCA9IGRmYS0+Y29tcGxldGVkX2JrcmVm X21hcDsKKwkgIGRmYS0+Y29tcGxldGVkX2JrcmVmX21hcCA9IGluaXRpYWxfYmtyZWZfbWFw OworCSAgYnJhbmNoID0gcGFyc2VfYnJhbmNoIChyZWdleHAsIHByZWcsIHRva2VuLCBzeW50 YXgsIG5lc3QsIGVycik7CisJICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgYnJh bmNoID09IE5VTEwsIDApKQorCSAgICB7CisJICAgICAgaWYgKHRyZWUgIT0gTlVMTCkKKwkJ cG9zdG9yZGVyICh0cmVlLCBmcmVlX3RyZWUsIE5VTEwpOworCSAgICAgIHJldHVybiBOVUxM OworCSAgICB9CisJICBkZmEtPmNvbXBsZXRlZF9ia3JlZl9tYXAgfD0gYWNjdW11bGF0ZWRf YmtyZWZfbWFwOworCX0KKyAgICAgIGVsc2UKKwlicmFuY2ggPSBOVUxMOworICAgICAgdHJl ZSA9IGNyZWF0ZV90cmVlIChkZmEsIHRyZWUsIGJyYW5jaCwgT1BfQUxUKTsKKyAgICAgIGlm IChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKwl7CisJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkg IHJldHVybiBOVUxMOworCX0KKyAgICB9CisgIHJldHVybiB0cmVlOworfQorCisvKiBUaGlz IGZ1bmN0aW9uIGJ1aWxkIHRoZSBmb2xsb3dpbmcgdHJlZSwgZnJvbSByZWd1bGFyIGV4cHJl c3Npb24KKyAgIDxleHAxPjxleHAyPjoKKwlDQVQKKwkvIFwKKyAgICAgICAvICAgXAorICAg PGV4cDE+IDxleHAyPgorCisgICBDQVQgbWVhbnMgY29uY2F0ZW5hdGlvbi4gICovCisKK3N0 YXRpYyBiaW5fdHJlZV90ICoKK3BhcnNlX2JyYW5jaCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwg cmVnZXhfdCAqcHJlZywgcmVfdG9rZW5fdCAqdG9rZW4sCisJICAgICAgcmVnX3N5bnRheF90 IHN5bnRheCwgSWR4IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycikKK3sKKyAgYmluX3RyZWVf dCAqdHJlZSwgKmV4cHI7CisgIHJlX2RmYV90ICpkZmEgPSBwcmVnLT5idWZmZXI7CisgIHRy ZWUgPSBwYXJzZV9leHByZXNzaW9uIChyZWdleHAsIHByZWcsIHRva2VuLCBzeW50YXgsIG5l c3QsIGVycik7CisgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiB0cmVlID09IE5V TEwsIDApKQorICAgIHJldHVybiBOVUxMOworCisgIHdoaWxlICh0b2tlbi0+dHlwZSAhPSBP UF9BTFQgJiYgdG9rZW4tPnR5cGUgIT0gRU5EX09GX1JFCisJICYmIChuZXN0ID09IDAgfHwg dG9rZW4tPnR5cGUgIT0gT1BfQ0xPU0VfU1VCRVhQKSkKKyAgICB7CisgICAgICBleHByID0g cGFyc2VfZXhwcmVzc2lvbiAocmVnZXhwLCBwcmVnLCB0b2tlbiwgc3ludGF4LCBuZXN0LCBl cnIpOworICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SICYmIGV4cHIgPT0gTlVM TCwgMCkpCisJeworCSAgaWYgKHRyZWUgIT0gTlVMTCkKKwkgICAgcG9zdG9yZGVyICh0cmVl LCBmcmVlX3RyZWUsIE5VTEwpOworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgaWYgKHRy ZWUgIT0gTlVMTCAmJiBleHByICE9IE5VTEwpCisJeworCSAgYmluX3RyZWVfdCAqbmV3dHJl ZSA9IGNyZWF0ZV90cmVlIChkZmEsIHRyZWUsIGV4cHIsIENPTkNBVCk7CisJICBpZiAobmV3 dHJlZSA9PSBOVUxMKQorCSAgICB7CisJICAgICAgcG9zdG9yZGVyIChleHByLCBmcmVlX3Ry ZWUsIE5VTEwpOworCSAgICAgIHBvc3RvcmRlciAodHJlZSwgZnJlZV90cmVlLCBOVUxMKTsK KwkgICAgICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgICAgICByZXR1cm4gTlVMTDsKKwkgICAg fQorCSAgdHJlZSA9IG5ld3RyZWU7CisJfQorICAgICAgZWxzZSBpZiAodHJlZSA9PSBOVUxM KQorCXRyZWUgPSBleHByOworICAgICAgLyogT3RoZXJ3aXNlIGV4cHIgPT0gTlVMTCwgd2Ug ZG9uJ3QgbmVlZCB0byBjcmVhdGUgbmV3IHRyZWUuICAqLworICAgIH0KKyAgcmV0dXJuIHRy ZWU7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gYnVpbGQgdGhlIGZvbGxvd2luZyB0cmVlLCBm cm9tIHJlZ3VsYXIgZXhwcmVzc2lvbiBhKjoKKwkgKgorCSB8CisJIGEKKyovCisKK3N0YXRp YyBiaW5fdHJlZV90ICoKK3BhcnNlX2V4cHJlc3Npb24gKHJlX3N0cmluZ190ICpyZWdleHAs IHJlZ2V4X3QgKnByZWcsIHJlX3Rva2VuX3QgKnRva2VuLAorCQkgIHJlZ19zeW50YXhfdCBz eW50YXgsIElkeCBuZXN0LCByZWdfZXJyY29kZV90ICplcnIpCit7CisgIHJlX2RmYV90ICpk ZmEgPSBwcmVnLT5idWZmZXI7CisgIGJpbl90cmVlX3QgKnRyZWU7CisgIHN3aXRjaCAodG9r ZW4tPnR5cGUpCisgICAgeworICAgIGNhc2UgQ0hBUkFDVEVSOgorICAgICAgdHJlZSA9IGNy ZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKyAgICAgIGlmIChC RSAodHJlZSA9PSBOVUxMLCAwKSkKKwl7CisJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgIHJl dHVybiBOVUxMOworCX0KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgaWYgKGRmYS0+ bWJfY3VyX21heCA+IDEpCisJeworCSAgd2hpbGUgKCFyZV9zdHJpbmdfZW9pIChyZWdleHAp CisJCSAmJiAhcmVfc3RyaW5nX2ZpcnN0X2J5dGUgKHJlZ2V4cCwgcmVfc3RyaW5nX2N1cl9p ZHggKHJlZ2V4cCkpKQorCSAgICB7CisJICAgICAgYmluX3RyZWVfdCAqbWJjX3JlbWFpbjsK KwkgICAgICBmZXRjaF90b2tlbiAodG9rZW4sIHJlZ2V4cCwgc3ludGF4KTsKKwkgICAgICBt YmNfcmVtYWluID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgdG9rZW4p OworCSAgICAgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlLCBtYmNfcmVtYWluLCBD T05DQVQpOworCSAgICAgIGlmIChCRSAobWJjX3JlbWFpbiA9PSBOVUxMIHx8IHRyZWUgPT0g TlVMTCwgMCkpCisJCXsKKwkJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkJICByZXR1cm4gTlVM TDsKKwkJfQorCSAgICB9CisJfQorI2VuZGlmCisgICAgICBicmVhazsKKworICAgIGNhc2Ug T1BfT1BFTl9TVUJFWFA6CisgICAgICB0cmVlID0gcGFyc2Vfc3ViX2V4cCAocmVnZXhwLCBw cmVnLCB0b2tlbiwgc3ludGF4LCBuZXN0ICsgMSwgZXJyKTsKKyAgICAgIGlmIChCRSAoKmVy ciAhPSBSRUdfTk9FUlJPUiAmJiB0cmVlID09IE5VTEwsIDApKQorCXJldHVybiBOVUxMOwor ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX09QRU5fQlJBQ0tFVDoKKyAgICAgIHRyZWUg PSBwYXJzZV9icmFja2V0X2V4cCAocmVnZXhwLCBkZmEsIHRva2VuLCBzeW50YXgsIGVycik7 CisgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgdHJlZSA9PSBOVUxMLCAw KSkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9CQUNLX1JF RjoKKyAgICAgIGlmICghQkUgKGRmYS0+Y29tcGxldGVkX2JrcmVmX21hcCAmICgxIDw8IHRv a2VuLT5vcHIuaWR4KSwgMSkpCisJeworCSAgKmVyciA9IFJFR19FU1VCUkVHOworCSAgcmV0 dXJuIE5VTEw7CisJfQorICAgICAgZGZhLT51c2VkX2JrcmVmX21hcCB8PSAxIDw8IHRva2Vu LT5vcHIuaWR4OworICAgICAgdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEws IE5VTEwsIHRva2VuKTsKKyAgICAgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKwl7CisJ ICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgICsrZGZh LT5uYmFja3JlZjsKKyAgICAgIGRmYS0+aGFzX21iX25vZGUgPSAxOworICAgICAgYnJlYWs7 CisKKyAgICBjYXNlIE9QX09QRU5fRFVQX05VTToKKyAgICAgIGlmIChzeW50YXggJiBSRV9D T05URVhUX0lOVkFMSURfRFVQKQorCXsKKwkgICplcnIgPSBSRUdfQkFEUlBUOworCSAgcmV0 dXJuIE5VTEw7CisJfQorICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBPUF9EVVBfQVNU RVJJU0s6CisgICAgY2FzZSBPUF9EVVBfUExVUzoKKyAgICBjYXNlIE9QX0RVUF9RVUVTVElP TjoKKyAgICAgIGlmIChzeW50YXggJiBSRV9DT05URVhUX0lOVkFMSURfT1BTKQorCXsKKwkg ICplcnIgPSBSRUdfQkFEUlBUOworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgZWxzZSBp ZiAoc3ludGF4ICYgUkVfQ09OVEVYVF9JTkRFUF9PUFMpCisJeworCSAgZmV0Y2hfdG9rZW4g KHRva2VuLCByZWdleHAsIHN5bnRheCk7CisJICByZXR1cm4gcGFyc2VfZXhwcmVzc2lvbiAo cmVnZXhwLCBwcmVnLCB0b2tlbiwgc3ludGF4LCBuZXN0LCBlcnIpOworCX0KKyAgICAgIEZB TExUSFJPVUdIOworICAgIGNhc2UgT1BfQ0xPU0VfU1VCRVhQOgorICAgICAgaWYgKCh0b2tl bi0+dHlwZSA9PSBPUF9DTE9TRV9TVUJFWFApICYmCisJICAhKHN5bnRheCAmIFJFX1VOTUFU Q0hFRF9SSUdIVF9QQVJFTl9PUkQpKQorCXsKKwkgICplcnIgPSBSRUdfRVJQQVJFTjsKKwkg IHJldHVybiBOVUxMOworCX0KKyAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgT1BfQ0xP U0VfRFVQX05VTToKKyAgICAgIC8qIFdlIHRyZWF0IGl0IGFzIGEgbm9ybWFsIGNoYXJhY3Rl ci4gICovCisKKyAgICAgIC8qIFRoZW4gd2UgY2FuIHRoZXNlIGNoYXJhY3RlcnMgYXMgbm9y bWFsIGNoYXJhY3RlcnMuICAqLworICAgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7Cisg ICAgICAvKiBtYl9wYXJ0aWFsIGFuZCB3b3JkX2NoYXIgYml0cyBzaG91bGQgYmUgaW5pdGlh bGl6ZWQgYWxyZWFkeQorCSBieSBwZWVrX3Rva2VuLiAgKi8KKyAgICAgIHRyZWUgPSBjcmVh dGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCB0b2tlbik7CisgICAgICBpZiAoQkUg KHRyZWUgPT0gTlVMTCwgMCkpCisJeworCSAgKmVyciA9IFJFR19FU1BBQ0U7CisJICByZXR1 cm4gTlVMTDsKKwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgQU5DSE9SOgorICAgICAg aWYgKCh0b2tlbi0+b3ByLmN0eF90eXBlCisJICAgJiAoV09SRF9ERUxJTSB8IE5PVF9XT1JE X0RFTElNIHwgV09SRF9GSVJTVCB8IFdPUkRfTEFTVCkpCisJICAmJiBkZmEtPndvcmRfb3Bz X3VzZWQgPT0gMCkKKwlpbml0X3dvcmRfY2hhciAoZGZhKTsKKyAgICAgIGlmICh0b2tlbi0+ b3ByLmN0eF90eXBlID09IFdPUkRfREVMSU0KKwkgIHx8IHRva2VuLT5vcHIuY3R4X3R5cGUg PT0gTk9UX1dPUkRfREVMSU0pCisJeworCSAgYmluX3RyZWVfdCAqdHJlZV9maXJzdCwgKnRy ZWVfbGFzdDsKKwkgIGlmICh0b2tlbi0+b3ByLmN0eF90eXBlID09IFdPUkRfREVMSU0pCisJ ICAgIHsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gV09SRF9GSVJTVDsKKwkgICAg ICB0cmVlX2ZpcnN0ID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgdG9r ZW4pOworCSAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBXT1JEX0xBU1Q7CisJICAgIH0K KwkgIGVsc2UKKwkgICAgeworCSAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBJTlNJREVf V09SRDsKKwkgICAgICB0cmVlX2ZpcnN0ID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVM TCwgTlVMTCwgdG9rZW4pOworCSAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBJTlNJREVf Tk9UV09SRDsKKwkgICAgfQorCSAgdHJlZV9sYXN0ID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRm YSwgTlVMTCwgTlVMTCwgdG9rZW4pOworCSAgdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIHRy ZWVfZmlyc3QsIHRyZWVfbGFzdCwgT1BfQUxUKTsKKwkgIGlmIChCRSAodHJlZV9maXJzdCA9 PSBOVUxMIHx8IHRyZWVfbGFzdCA9PSBOVUxMIHx8IHRyZWUgPT0gTlVMTCwgMCkpCisJICAg IHsKKwkgICAgICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgICAgICByZXR1cm4gTlVMTDsKKwkg ICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICB0cmVlID0gY3JlYXRlX3Rva2VuX3RyZWUg KGRmYSwgTlVMTCwgTlVMTCwgdG9rZW4pOworCSAgaWYgKEJFICh0cmVlID09IE5VTEwsIDAp KQorCSAgICB7CisJICAgICAgKmVyciA9IFJFR19FU1BBQ0U7CisJICAgICAgcmV0dXJuIE5V TEw7CisJICAgIH0KKwl9CisgICAgICAvKiBXZSBtdXN0IHJldHVybiBoZXJlLCBzaW5jZSBB TkNIT1JzIGNhbid0IGJlIGZvbGxvd2VkCisJIGJ5IHJlcGV0aXRpb24gb3BlcmF0b3JzLgor CSBlZy4gUkUiXioiIGlzIGludmFsaWQgb3IgIjxBTkNIT1IoXik+PENIQVIoKik+IiwKKwkg ICAgIGl0IG11c3Qgbm90IGJlICI8QU5DSE9SKF4pPjxSRVBFQVQoKik+Ii4gICovCisgICAg ICBmZXRjaF90b2tlbiAodG9rZW4sIHJlZ2V4cCwgc3ludGF4KTsKKyAgICAgIHJldHVybiB0 cmVlOworCisgICAgY2FzZSBPUF9QRVJJT0Q6CisgICAgICB0cmVlID0gY3JlYXRlX3Rva2Vu X3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgdG9rZW4pOworICAgICAgaWYgKEJFICh0cmVlID09 IE5VTEwsIDApKQorCXsKKwkgICplcnIgPSBSRUdfRVNQQUNFOworCSAgcmV0dXJuIE5VTEw7 CisJfQorICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJZGZhLT5oYXNfbWJfbm9k ZSA9IDE7CisgICAgICBicmVhazsKKworICAgIGNhc2UgT1BfV09SRDoKKyAgICBjYXNlIE9Q X05PVFdPUkQ6CisgICAgICB0cmVlID0gYnVpbGRfY2hhcmNsYXNzX29wIChkZmEsIHJlZ2V4 cC0+dHJhbnMsCisJCQkJICJhbG51bSIsCisJCQkJICJfIiwKKwkJCQkgdG9rZW4tPnR5cGUg PT0gT1BfTk9UV09SRCwgZXJyKTsKKyAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJP UiAmJiB0cmVlID09IE5VTEwsIDApKQorCXJldHVybiBOVUxMOworICAgICAgYnJlYWs7CisK KyAgICBjYXNlIE9QX1NQQUNFOgorICAgIGNhc2UgT1BfTk9UU1BBQ0U6CisgICAgICB0cmVl ID0gYnVpbGRfY2hhcmNsYXNzX29wIChkZmEsIHJlZ2V4cC0+dHJhbnMsCisJCQkJICJzcGFj ZSIsCisJCQkJICIiLAorCQkJCSB0b2tlbi0+dHlwZSA9PSBPUF9OT1RTUEFDRSwgZXJyKTsK KyAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiB0cmVlID09IE5VTEwsIDAp KQorCXJldHVybiBOVUxMOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0FMVDoKKyAg ICBjYXNlIEVORF9PRl9SRToKKyAgICAgIHJldHVybiBOVUxMOworCisgICAgY2FzZSBCQUNL X1NMQVNIOgorICAgICAgKmVyciA9IFJFR19FRVNDQVBFOworICAgICAgcmV0dXJuIE5VTEw7 CisKKyAgICBkZWZhdWx0OgorICAgICAgLyogTXVzdCBub3QgaGFwcGVuPyAgKi8KKyNpZmRl ZiBERUJVRworICAgICAgYXNzZXJ0ICgwKTsKKyNlbmRpZgorICAgICAgcmV0dXJuIE5VTEw7 CisgICAgfQorICBmZXRjaF90b2tlbiAodG9rZW4sIHJlZ2V4cCwgc3ludGF4KTsKKworICB3 aGlsZSAodG9rZW4tPnR5cGUgPT0gT1BfRFVQX0FTVEVSSVNLIHx8IHRva2VuLT50eXBlID09 IE9QX0RVUF9QTFVTCisJIHx8IHRva2VuLT50eXBlID09IE9QX0RVUF9RVUVTVElPTiB8fCB0 b2tlbi0+dHlwZSA9PSBPUF9PUEVOX0RVUF9OVU0pCisgICAgeworICAgICAgYmluX3RyZWVf dCAqZHVwX3RyZWUgPSBwYXJzZV9kdXBfb3AgKHRyZWUsIHJlZ2V4cCwgZGZhLCB0b2tlbiwK KwkJCQkJICAgc3ludGF4LCBlcnIpOworICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VS Uk9SICYmIGR1cF90cmVlID09IE5VTEwsIDApKQorCXsKKwkgIGlmICh0cmVlICE9IE5VTEwp CisJICAgIHBvc3RvcmRlciAodHJlZSwgZnJlZV90cmVlLCBOVUxMKTsKKwkgIHJldHVybiBO VUxMOworCX0KKyAgICAgIHRyZWUgPSBkdXBfdHJlZTsKKyAgICAgIC8qIEluIEJSRSBjb25z ZWN1dGl2ZSBkdXBsaWNhdGlvbnMgYXJlIG5vdCBhbGxvd2VkLiAgKi8KKyAgICAgIGlmICgo c3ludGF4ICYgUkVfQ09OVEVYVF9JTlZBTElEX0RVUCkKKwkgICYmICh0b2tlbi0+dHlwZSA9 PSBPUF9EVVBfQVNURVJJU0sKKwkgICAgICB8fCB0b2tlbi0+dHlwZSA9PSBPUF9PUEVOX0RV UF9OVU0pKQorCXsKKwkgIGlmICh0cmVlICE9IE5VTEwpCisJICAgIHBvc3RvcmRlciAodHJl ZSwgZnJlZV90cmVlLCBOVUxMKTsKKwkgICplcnIgPSBSRUdfQkFEUlBUOworCSAgcmV0dXJu IE5VTEw7CisJfQorICAgIH0KKworICByZXR1cm4gdHJlZTsKK30KKworLyogVGhpcyBmdW5j dGlvbiBidWlsZCB0aGUgZm9sbG93aW5nIHRyZWUsIGZyb20gcmVndWxhciBleHByZXNzaW9u CisgICAoPHJlZ19leHA+KToKKwkgU1VCRVhQCisJICAgIHwKKwk8cmVnX2V4cD4KKyovCisK K3N0YXRpYyBiaW5fdHJlZV90ICoKK3BhcnNlX3N1Yl9leHAgKHJlX3N0cmluZ190ICpyZWdl eHAsIHJlZ2V4X3QgKnByZWcsIHJlX3Rva2VuX3QgKnRva2VuLAorCSAgICAgICByZWdfc3lu dGF4X3Qgc3ludGF4LCBJZHggbmVzdCwgcmVnX2VycmNvZGVfdCAqZXJyKQoreworICByZV9k ZmFfdCAqZGZhID0gcHJlZy0+YnVmZmVyOworICBiaW5fdHJlZV90ICp0cmVlOworICBzaXpl X3QgY3VyX25zdWI7CisgIGN1cl9uc3ViID0gcHJlZy0+cmVfbnN1YisrOworCisgIGZldGNo X3Rva2VuICh0b2tlbiwgcmVnZXhwLCBzeW50YXggfCBSRV9DQVJFVF9BTkNIT1JTX0hFUkUp OworCisgIC8qIFRoZSBzdWJleHByZXNzaW9uIG1heSBiZSBhIG51bGwgc3RyaW5nLiAgKi8K KyAgaWYgKHRva2VuLT50eXBlID09IE9QX0NMT1NFX1NVQkVYUCkKKyAgICB0cmVlID0gTlVM TDsKKyAgZWxzZQorICAgIHsKKyAgICAgIHRyZWUgPSBwYXJzZV9yZWdfZXhwIChyZWdleHAs IHByZWcsIHRva2VuLCBzeW50YXgsIG5lc3QsIGVycik7CisgICAgICBpZiAoQkUgKCplcnIg PT0gUkVHX05PRVJST1IgJiYgdG9rZW4tPnR5cGUgIT0gT1BfQ0xPU0VfU1VCRVhQLCAwKSkK Kwl7CisJICBpZiAodHJlZSAhPSBOVUxMKQorCSAgICBwb3N0b3JkZXIgKHRyZWUsIGZyZWVf dHJlZSwgTlVMTCk7CisJICAqZXJyID0gUkVHX0VQQVJFTjsKKwl9CisgICAgICBpZiAoQkUg KCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBOVUxMOworICAgIH0KKworICBp ZiAoY3VyX25zdWIgPD0gJzknIC0gJzEnKQorICAgIGRmYS0+Y29tcGxldGVkX2JrcmVmX21h cCB8PSAxIDw8IGN1cl9uc3ViOworCisgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVl LCBOVUxMLCBTVUJFWFApOworICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisgICAgewor ICAgICAgKmVyciA9IFJFR19FU1BBQ0U7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cisg IHRyZWUtPnRva2VuLm9wci5pZHggPSBjdXJfbnN1YjsKKyAgcmV0dXJuIHRyZWU7Cit9CisK Ky8qIFRoaXMgZnVuY3Rpb24gcGFyc2UgcmVwZXRpdGlvbiBvcGVyYXRvcnMgbGlrZSAiKiIs ICIrIiwgInsxLDN9IiBldGMuICAqLworCitzdGF0aWMgYmluX3RyZWVfdCAqCitwYXJzZV9k dXBfb3AgKGJpbl90cmVlX3QgKmVsZW0sIHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90 ICpkZmEsCisJICAgICAgcmVfdG9rZW5fdCAqdG9rZW4sIHJlZ19zeW50YXhfdCBzeW50YXgs IHJlZ19lcnJjb2RlX3QgKmVycikKK3sKKyAgYmluX3RyZWVfdCAqdHJlZSA9IE5VTEwsICpv bGRfdHJlZSA9IE5VTEw7CisgIElkeCBpLCBzdGFydCwgZW5kLCBzdGFydF9pZHggPSByZV9z dHJpbmdfY3VyX2lkeCAocmVnZXhwKTsKKyAgcmVfdG9rZW5fdCBzdGFydF90b2tlbiA9ICp0 b2tlbjsKKworICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9EVVBfTlVNKQorICAgIHsK KyAgICAgIGVuZCA9IDA7CisgICAgICBzdGFydCA9IGZldGNoX251bWJlciAocmVnZXhwLCB0 b2tlbiwgc3ludGF4KTsKKyAgICAgIGlmIChzdGFydCA9PSAtMSkKKwl7CisJICBpZiAodG9r ZW4tPnR5cGUgPT0gQ0hBUkFDVEVSICYmIHRva2VuLT5vcHIuYyA9PSAnLCcpCisJICAgIHN0 YXJ0ID0gMDsgLyogV2UgdHJlYXQgInssbX0iIGFzICJ7MCxtfSIuICAqLworCSAgZWxzZQor CSAgICB7CisJICAgICAgKmVyciA9IFJFR19CQURCUjsgLyogPHJlPnt9IGlzIGludmFsaWQu ICAqLworCSAgICAgIHJldHVybiBOVUxMOworCSAgICB9CisJfQorICAgICAgaWYgKEJFIChz dGFydCAhPSAtMiwgMSkpCisJeworCSAgLyogV2UgdHJlYXQgIntufSIgYXMgIntuLG59Ii4g ICovCisJICBlbmQgPSAoKHRva2VuLT50eXBlID09IE9QX0NMT1NFX0RVUF9OVU0pID8gc3Rh cnQKKwkJIDogKCh0b2tlbi0+dHlwZSA9PSBDSEFSQUNURVIgJiYgdG9rZW4tPm9wci5jID09 ICcsJykKKwkJICAgID8gZmV0Y2hfbnVtYmVyIChyZWdleHAsIHRva2VuLCBzeW50YXgpIDog LTIpKTsKKwl9CisgICAgICBpZiAoQkUgKHN0YXJ0ID09IC0yIHx8IGVuZCA9PSAtMiwgMCkp CisJeworCSAgLyogSW52YWxpZCBzZXF1ZW5jZS4gICovCisJICBpZiAoQkUgKCEoc3ludGF4 ICYgUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQpLCAwKSkKKwkgICAgeworCSAgICAgIGlmICh0 b2tlbi0+dHlwZSA9PSBFTkRfT0ZfUkUpCisJCSplcnIgPSBSRUdfRUJSQUNFOworCSAgICAg IGVsc2UKKwkJKmVyciA9IFJFR19CQURCUjsKKworCSAgICAgIHJldHVybiBOVUxMOworCSAg ICB9CisKKwkgIC8qIElmIHRoZSBzeW50YXggYml0IGlzIHNldCwgcm9sbGJhY2suICAqLwor CSAgcmVfc3RyaW5nX3NldF9pbmRleCAocmVnZXhwLCBzdGFydF9pZHgpOworCSAgKnRva2Vu ID0gc3RhcnRfdG9rZW47CisJICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKwkgIC8qIG1i X3BhcnRpYWwgYW5kIHdvcmRfY2hhciBiaXRzIHNob3VsZCBiZSBhbHJlYWR5IGluaXRpYWxp emVkIGJ5CisJICAgICBwZWVrX3Rva2VuLiAgKi8KKwkgIHJldHVybiBlbGVtOworCX0KKwor ICAgICAgaWYgKEJFICgoZW5kICE9IC0xICYmIHN0YXJ0ID4gZW5kKQorCSAgICAgIHx8IHRv a2VuLT50eXBlICE9IE9QX0NMT1NFX0RVUF9OVU0sIDApKQorCXsKKwkgIC8qIEZpcnN0IG51 bWJlciBncmVhdGVyIHRoYW4gc2Vjb25kLiAgKi8KKwkgICplcnIgPSBSRUdfQkFEQlI7CisJ ICByZXR1cm4gTlVMTDsKKwl9CisKKyAgICAgIGlmIChCRSAoUkVfRFVQX01BWCA8IChlbmQg PT0gLTEgPyBzdGFydCA6IGVuZCksIDApKQorCXsKKwkgICplcnIgPSBSRUdfRVNJWkU7CisJ ICByZXR1cm4gTlVMTDsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgc3RhcnQg PSAodG9rZW4tPnR5cGUgPT0gT1BfRFVQX1BMVVMpID8gMSA6IDA7CisgICAgICBlbmQgPSAo dG9rZW4tPnR5cGUgPT0gT1BfRFVQX1FVRVNUSU9OKSA/IDEgOiAtMTsKKyAgICB9CisKKyAg ZmV0Y2hfdG9rZW4gKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisKKyAgaWYgKEJFIChlbGVt ID09IE5VTEwsIDApKQorICAgIHJldHVybiBOVUxMOworICBpZiAoQkUgKHN0YXJ0ID09IDAg JiYgZW5kID09IDAsIDApKQorICAgIHsKKyAgICAgIHBvc3RvcmRlciAoZWxlbSwgZnJlZV90 cmVlLCBOVUxMKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAvKiBFeHRyYWN0 ICI8cmU+e24sbX0iIHRvICI8cmU+PHJlPi4uLjxyZT48cmU+ezAsPG0tbj59Ii4gICovCisg IGlmIChCRSAoc3RhcnQgPiAwLCAwKSkKKyAgICB7CisgICAgICB0cmVlID0gZWxlbTsKKyAg ICAgIGZvciAoaSA9IDI7IGkgPD0gc3RhcnQ7ICsraSkKKwl7CisJICBlbGVtID0gZHVwbGlj YXRlX3RyZWUgKGVsZW0sIGRmYSk7CisJICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgdHJl ZSwgZWxlbSwgQ09OQ0FUKTsKKwkgIGlmIChCRSAoZWxlbSA9PSBOVUxMIHx8IHRyZWUgPT0g TlVMTCwgMCkpCisJICAgIGdvdG8gcGFyc2VfZHVwX29wX2VzcGFjZTsKKwl9CisKKyAgICAg IGlmIChzdGFydCA9PSBlbmQpCisJcmV0dXJuIHRyZWU7CisKKyAgICAgIC8qIER1cGxpY2F0 ZSBFTEVNIGJlZm9yZSBpdCBpcyBtYXJrZWQgb3B0aW9uYWwuICAqLworICAgICAgZWxlbSA9 IGR1cGxpY2F0ZV90cmVlIChlbGVtLCBkZmEpOworICAgICAgaWYgKEJFIChlbGVtID09IE5V TEwsIDApKQorICAgICAgICBnb3RvIHBhcnNlX2R1cF9vcF9lc3BhY2U7CisgICAgICBvbGRf dHJlZSA9IHRyZWU7CisgICAgfQorICBlbHNlCisgICAgb2xkX3RyZWUgPSBOVUxMOworCisg IGlmIChlbGVtLT50b2tlbi50eXBlID09IFNVQkVYUCkKKyAgICB7CisgICAgICB1aW50cHRy X3Qgc3ViaWR4ID0gZWxlbS0+dG9rZW4ub3ByLmlkeDsKKyAgICAgIHBvc3RvcmRlciAoZWxl bSwgbWFya19vcHRfc3ViZXhwLCAodm9pZCAqKSBzdWJpZHgpOworICAgIH0KKworICB0cmVl ID0gY3JlYXRlX3RyZWUgKGRmYSwgZWxlbSwgTlVMTCwKKwkJICAgICAgKGVuZCA9PSAtMSA/ IE9QX0RVUF9BU1RFUklTSyA6IE9QX0FMVCkpOworICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwg MCkpCisgICAgZ290byBwYXJzZV9kdXBfb3BfZXNwYWNlOworCisgIC8qIFRoaXMgbG9vcCBp cyBhY3R1YWxseSBleGVjdXRlZCBvbmx5IHdoZW4gZW5kICE9IC0xLAorICAgICB0byByZXdy aXRlIDxyZT57MCxufSBhcyAoPHJlPig8cmU+Li4uPHJlPj8pPyk/Li4uICBXZSBoYXZlCisg ICAgIGFscmVhZHkgY3JlYXRlZCB0aGUgc3RhcnQrMS10aCBjb3B5LiAgKi8KKyAgaWYgKFRZ UEVfU0lHTkVEIChJZHgpIHx8IGVuZCAhPSAtMSkKKyAgICBmb3IgKGkgPSBzdGFydCArIDI7 IGkgPD0gZW5kOyArK2kpCisgICAgICB7CisJZWxlbSA9IGR1cGxpY2F0ZV90cmVlIChlbGVt LCBkZmEpOworCXRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlLCBlbGVtLCBDT05DQVQp OworCWlmIChCRSAoZWxlbSA9PSBOVUxMIHx8IHRyZWUgPT0gTlVMTCwgMCkpCisJICBnb3Rv IHBhcnNlX2R1cF9vcF9lc3BhY2U7CisKKwl0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgdHJl ZSwgTlVMTCwgT1BfQUxUKTsKKwlpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisJICBnb3Rv IHBhcnNlX2R1cF9vcF9lc3BhY2U7CisgICAgICB9CisKKyAgaWYgKG9sZF90cmVlKQorICAg IHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCBvbGRfdHJlZSwgdHJlZSwgQ09OQ0FUKTsKKwor ICByZXR1cm4gdHJlZTsKKworIHBhcnNlX2R1cF9vcF9lc3BhY2U6CisgICplcnIgPSBSRUdf RVNQQUNFOworICByZXR1cm4gTlVMTDsKK30KKworLyogU2l6ZSBvZiB0aGUgbmFtZXMgZm9y IGNvbGxhdGluZyBzeW1ib2wvZXF1aXZhbGVuY2VfY2xhc3MvY2hhcmFjdGVyX2NsYXNzLgor ICAgSSdtIG5vdCBzdXJlLCBidXQgbWF5YmUgZW5vdWdoLiAgKi8KKyNkZWZpbmUgQlJBQ0tF VF9OQU1FX0JVRl9TSVpFIDMyCisKKyNpZm5kZWYgX0xJQkMKKworIyBpZmRlZiBSRV9FTkFC TEVfSTE4TgorLyogQ29udmVydCB0aGUgYnl0ZSBCIHRvIHRoZSBjb3JyZXNwb25kaW5nIHdp ZGUgY2hhcmFjdGVyLiAgSW4gYQorICAgdW5pYnl0ZSBsb2NhbGUsIHRyZWF0IEIgYXMgaXRz ZWxmIGlmIGl0IGlzIGFuIGVuY29kaW5nIGVycm9yLgorICAgSW4gYSBtdWx0aWJ5dGUgbG9j YWxlLCByZXR1cm4gV0VPRiBpZiBCIGlzIGFuIGVuY29kaW5nIGVycm9yLiAgKi8KK3N0YXRp YyB3aW50X3QKK3BhcnNlX2J5dGUgKHVuc2lnbmVkIGNoYXIgYiwgcmVfY2hhcnNldF90ICpt YmNzZXQpCit7CisgIHdpbnRfdCB3YyA9IF9fYnRvd2MgKGIpOworICByZXR1cm4gd2MgPT0g V0VPRiAmJiAhbWJjc2V0ID8gYiA6IHdjOworfQorI2VuZGlmCisKKyAgLyogTG9jYWwgZnVu Y3Rpb24gZm9yIHBhcnNlX2JyYWNrZXRfZXhwIG9ubHkgdXNlZCBpbiBjYXNlIG9mIE5PVCBf TElCQy4KKyAgICAgQnVpbGQgdGhlIHJhbmdlIGV4cHJlc3Npb24gd2hpY2ggc3RhcnRzIGZy b20gU1RBUlRfRUxFTSwgYW5kIGVuZHMKKyAgICAgYXQgRU5EX0VMRU0uICBUaGUgcmVzdWx0 IGFyZSB3cml0dGVuIHRvIE1CQ1NFVCBhbmQgU0JDU0VULgorICAgICBSQU5HRV9BTExPQyBp cyB0aGUgYWxsb2NhdGVkIHNpemUgb2YgbWJjc2V0LT5yYW5nZV9zdGFydHMsIGFuZAorICAg ICBtYmNzZXQtPnJhbmdlX2VuZHMsIGlzIGEgcG9pbnRlciBhcmd1bWVudCBzaW5jZSB3ZSBt YXkKKyAgICAgdXBkYXRlIGl0LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKKyMgaWZk ZWYgUkVfRU5BQkxFX0kxOE4KK2J1aWxkX3JhbmdlX2V4cCAoY29uc3QgcmVnX3N5bnRheF90 IHN5bnRheCwKKyAgICAgICAgICAgICAgICAgYml0c2V0X3Qgc2Jjc2V0LAorICAgICAgICAg ICAgICAgICByZV9jaGFyc2V0X3QgKm1iY3NldCwKKyAgICAgICAgICAgICAgICAgSWR4ICpy YW5nZV9hbGxvYywKKyAgICAgICAgICAgICAgICAgY29uc3QgYnJhY2tldF9lbGVtX3QgKnN0 YXJ0X2VsZW0sCisgICAgICAgICAgICAgICAgIGNvbnN0IGJyYWNrZXRfZWxlbV90ICplbmRf ZWxlbSkKKyMgZWxzZSAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK2J1aWxkX3JhbmdlX2V4 cCAoY29uc3QgcmVnX3N5bnRheF90IHN5bnRheCwKKyAgICAgICAgICAgICAgICAgYml0c2V0 X3Qgc2Jjc2V0LAorICAgICAgICAgICAgICAgICBjb25zdCBicmFja2V0X2VsZW1fdCAqc3Rh cnRfZWxlbSwKKyAgICAgICAgICAgICAgICAgY29uc3QgYnJhY2tldF9lbGVtX3QgKmVuZF9l bGVtKQorIyBlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK3sKKyAgdW5zaWduZWQg aW50IHN0YXJ0X2NoLCBlbmRfY2g7CisgIC8qIEVxdWl2YWxlbmNlIENsYXNzZXMgYW5kIENo YXJhY3RlciBDbGFzc2VzIGNhbid0IGJlIGEgcmFuZ2Ugc3RhcnQvZW5kLiAgKi8KKyAgaWYg KEJFIChzdGFydF9lbGVtLT50eXBlID09IEVRVUlWX0NMQVNTIHx8IHN0YXJ0X2VsZW0tPnR5 cGUgPT0gQ0hBUl9DTEFTUworCSAgfHwgZW5kX2VsZW0tPnR5cGUgPT0gRVFVSVZfQ0xBU1Mg fHwgZW5kX2VsZW0tPnR5cGUgPT0gQ0hBUl9DTEFTUywKKwkgIDApKQorICAgIHJldHVybiBS RUdfRVJBTkdFOworCisgIC8qIFdlIGNhbiBoYW5kbGUgbm8gbXVsdGkgY2hhcmFjdGVyIGNv bGxhdGluZyBlbGVtZW50cyB3aXRob3V0IGxpYmMKKyAgICAgc3VwcG9ydC4gICovCisgIGlm IChCRSAoKHN0YXJ0X2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0KKwkgICAmJiBzdHJsZW4gKChj aGFyICopIHN0YXJ0X2VsZW0tPm9wci5uYW1lKSA+IDEpCisJICB8fCAoZW5kX2VsZW0tPnR5 cGUgPT0gQ09MTF9TWU0KKwkgICAgICAmJiBzdHJsZW4gKChjaGFyICopIGVuZF9lbGVtLT5v cHIubmFtZSkgPiAxKSwgMCkpCisgICAgcmV0dXJuIFJFR19FQ09MTEFURTsKKworIyBpZmRl ZiBSRV9FTkFCTEVfSTE4TgorICB7CisgICAgd2NoYXJfdCB3YzsKKyAgICB3aW50X3Qgc3Rh cnRfd2M7CisgICAgd2ludF90IGVuZF93YzsKKworICAgIHN0YXJ0X2NoID0gKChzdGFydF9l bGVtLT50eXBlID09IFNCX0NIQVIpID8gc3RhcnRfZWxlbS0+b3ByLmNoCisJCTogKChzdGFy dF9lbGVtLT50eXBlID09IENPTExfU1lNKSA/IHN0YXJ0X2VsZW0tPm9wci5uYW1lWzBdCisJ CSAgIDogMCkpOworICAgIGVuZF9jaCA9ICgoZW5kX2VsZW0tPnR5cGUgPT0gU0JfQ0hBUikg PyBlbmRfZWxlbS0+b3ByLmNoCisJICAgICAgOiAoKGVuZF9lbGVtLT50eXBlID09IENPTExf U1lNKSA/IGVuZF9lbGVtLT5vcHIubmFtZVswXQorCQkgOiAwKSk7CisgICAgc3RhcnRfd2Mg PSAoKHN0YXJ0X2VsZW0tPnR5cGUgPT0gU0JfQ0hBUiB8fCBzdGFydF9lbGVtLT50eXBlID09 IENPTExfU1lNKQorCQk/IHBhcnNlX2J5dGUgKHN0YXJ0X2NoLCBtYmNzZXQpIDogc3RhcnRf ZWxlbS0+b3ByLndjaCk7CisgICAgZW5kX3djID0gKChlbmRfZWxlbS0+dHlwZSA9PSBTQl9D SEFSIHx8IGVuZF9lbGVtLT50eXBlID09IENPTExfU1lNKQorCSAgICAgID8gcGFyc2VfYnl0 ZSAoZW5kX2NoLCBtYmNzZXQpIDogZW5kX2VsZW0tPm9wci53Y2gpOworICAgIGlmIChzdGFy dF93YyA9PSBXRU9GIHx8IGVuZF93YyA9PSBXRU9GKQorICAgICAgcmV0dXJuIFJFR19FQ09M TEFURTsKKyAgICBlbHNlIGlmIChCRSAoKHN5bnRheCAmIFJFX05PX0VNUFRZX1JBTkdFUykg JiYgc3RhcnRfd2MgPiBlbmRfd2MsIDApKQorICAgICAgcmV0dXJuIFJFR19FUkFOR0U7CisK KyAgICAvKiBHb3QgdmFsaWQgY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlcywgYWRkIHRoZW0g YXMgYSBuZXcgZW50cnkuCisgICAgICAgSG93ZXZlciwgZm9yICFfTElCQyB3ZSBoYXZlIG5v IGNvbGxhdGlvbiBlbGVtZW50czogaWYgdGhlCisgICAgICAgY2hhcmFjdGVyIHNldCBpcyBz aW5nbGUgYnl0ZSwgdGhlIHNpbmdsZSBieXRlIGNoYXJhY3RlciBzZXQKKyAgICAgICB0aGF0 IHdlIGJ1aWxkIGJlbG93IHN1ZmZpY2VzLiAgcGFyc2VfYnJhY2tldF9leHAgcGFzc2VzCisg ICAgICAgbm8gTUJDU0VUIGlmIGRmYS0+bWJfY3VyX21heCA9PSAxLiAgKi8KKyAgICBpZiAo bWJjc2V0KQorICAgICAgeworCS8qIENoZWNrIHRoZSBzcGFjZSBvZiB0aGUgYXJyYXlzLiAg Ki8KKwlpZiAoQkUgKCpyYW5nZV9hbGxvYyA9PSBtYmNzZXQtPm5yYW5nZXMsIDApKQorCSAg eworCSAgICAvKiBUaGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlLCBuZWVkIHJlYWxsb2MuICAq LworCSAgICB3Y2hhcl90ICpuZXdfYXJyYXlfc3RhcnQsICpuZXdfYXJyYXlfZW5kOworCSAg ICBJZHggbmV3X25yYW5nZXM7CisKKwkgICAgLyogKzEgaW4gY2FzZSBvZiBtYmNzZXQtPm5y YW5nZXMgaXMgMC4gICovCisJICAgIG5ld19ucmFuZ2VzID0gMiAqIG1iY3NldC0+bnJhbmdl cyArIDE7CisJICAgIC8qIFVzZSByZWFsbG9jIHNpbmNlIG1iY3NldC0+cmFuZ2Vfc3RhcnRz IGFuZCBtYmNzZXQtPnJhbmdlX2VuZHMKKwkgICAgICAgYXJlIE5VTEwgaWYgKnJhbmdlX2Fs bG9jID09IDAuICAqLworCSAgICBuZXdfYXJyYXlfc3RhcnQgPSByZV9yZWFsbG9jIChtYmNz ZXQtPnJhbmdlX3N0YXJ0cywgd2NoYXJfdCwKKwkJCQkJICBuZXdfbnJhbmdlcyk7CisJICAg IG5ld19hcnJheV9lbmQgPSByZV9yZWFsbG9jIChtYmNzZXQtPnJhbmdlX2VuZHMsIHdjaGFy X3QsCisJCQkJCW5ld19ucmFuZ2VzKTsKKworCSAgICBpZiAoQkUgKG5ld19hcnJheV9zdGFy dCA9PSBOVUxMIHx8IG5ld19hcnJheV9lbmQgPT0gTlVMTCwgMCkpCisJICAgICAgeworCQly ZV9mcmVlIChuZXdfYXJyYXlfc3RhcnQpOworCQlyZV9mcmVlIChuZXdfYXJyYXlfZW5kKTsK KwkJcmV0dXJuIFJFR19FU1BBQ0U7CisJICAgICAgfQorCisJICAgIG1iY3NldC0+cmFuZ2Vf c3RhcnRzID0gbmV3X2FycmF5X3N0YXJ0OworCSAgICBtYmNzZXQtPnJhbmdlX2VuZHMgPSBu ZXdfYXJyYXlfZW5kOworCSAgICAqcmFuZ2VfYWxsb2MgPSBuZXdfbnJhbmdlczsKKwkgIH0K KworCW1iY3NldC0+cmFuZ2Vfc3RhcnRzW21iY3NldC0+bnJhbmdlc10gPSBzdGFydF93YzsK KwltYmNzZXQtPnJhbmdlX2VuZHNbbWJjc2V0LT5ucmFuZ2VzKytdID0gZW5kX3djOworICAg ICAgfQorCisgICAgLyogQnVpbGQgdGhlIHRhYmxlIGZvciBzaW5nbGUgYnl0ZSBjaGFyYWN0 ZXJzLiAgKi8KKyAgICBmb3IgKHdjID0gMDsgd2MgPCBTQkNfTUFYOyArK3djKQorICAgICAg eworCWlmIChzdGFydF93YyA8PSB3YyAmJiB3YyA8PSBlbmRfd2MpCisJICBiaXRzZXRfc2V0 IChzYmNzZXQsIHdjKTsKKyAgICAgIH0KKyAgfQorIyBlbHNlIC8qIG5vdCBSRV9FTkFCTEVf STE4TiAqLworICB7CisgICAgdW5zaWduZWQgaW50IGNoOworICAgIHN0YXJ0X2NoID0gKChz dGFydF9lbGVtLT50eXBlID09IFNCX0NIQVIgKSA/IHN0YXJ0X2VsZW0tPm9wci5jaAorCQk6 ICgoc3RhcnRfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTSkgPyBzdGFydF9lbGVtLT5vcHIubmFt ZVswXQorCQkgICA6IDApKTsKKyAgICBlbmRfY2ggPSAoKGVuZF9lbGVtLT50eXBlID09IFNC X0NIQVIgKSA/IGVuZF9lbGVtLT5vcHIuY2gKKwkgICAgICA6ICgoZW5kX2VsZW0tPnR5cGUg PT0gQ09MTF9TWU0pID8gZW5kX2VsZW0tPm9wci5uYW1lWzBdCisJCSA6IDApKTsKKyAgICBp ZiAoc3RhcnRfY2ggPiBlbmRfY2gpCisgICAgICByZXR1cm4gUkVHX0VSQU5HRTsKKyAgICAv KiBCdWlsZCB0aGUgdGFibGUgZm9yIHNpbmdsZSBieXRlIGNoYXJhY3RlcnMuICAqLworICAg IGZvciAoY2ggPSAwOyBjaCA8IFNCQ19NQVg7ICsrY2gpCisgICAgICBpZiAoc3RhcnRfY2gg PD0gY2ggICYmIGNoIDw9IGVuZF9jaCkKKwliaXRzZXRfc2V0IChzYmNzZXQsIGNoKTsKKyAg fQorIyBlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgcmV0dXJuIFJFR19OT0VS Uk9SOworfQorI2VuZGlmIC8qIG5vdCBfTElCQyAqLworCisjaWZuZGVmIF9MSUJDCisvKiBI ZWxwZXIgZnVuY3Rpb24gZm9yIHBhcnNlX2JyYWNrZXRfZXhwIG9ubHkgdXNlZCBpbiBjYXNl IG9mIE5PVCBfTElCQy4uCisgICBCdWlsZCB0aGUgY29sbGF0aW5nIGVsZW1lbnQgd2hpY2gg aXMgcmVwcmVzZW50ZWQgYnkgTkFNRS4KKyAgIFRoZSByZXN1bHQgYXJlIHdyaXR0ZW4gdG8g TUJDU0VUIGFuZCBTQkNTRVQuCisgICBDT0xMX1NZTV9BTExPQyBpcyB0aGUgYWxsb2NhdGVk IHNpemUgb2YgbWJjc2V0LT5jb2xsX3N5bSwgaXMgYQorICAgcG9pbnRlciBhcmd1bWVudCBz aW5jZSB3ZSBtYXkgdXBkYXRlIGl0LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKKyMg aWZkZWYgUkVfRU5BQkxFX0kxOE4KK2J1aWxkX2NvbGxhdGluZ19zeW1ib2wgKGJpdHNldF90 IHNiY3NldCwgcmVfY2hhcnNldF90ICptYmNzZXQsCisJCQlJZHggKmNvbGxfc3ltX2FsbG9j LCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKQorIyBlbHNlIC8qIG5vdCBSRV9FTkFCTEVf STE4TiAqLworYnVpbGRfY29sbGF0aW5nX3N5bWJvbCAoYml0c2V0X3Qgc2Jjc2V0LCBjb25z dCB1bnNpZ25lZCBjaGFyICpuYW1lKQorIyBlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4g Ki8KK3sKKyAgc2l6ZV90IG5hbWVfbGVuID0gc3RybGVuICgoY29uc3QgY2hhciAqKSBuYW1l KTsKKyAgaWYgKEJFIChuYW1lX2xlbiAhPSAxLCAwKSkKKyAgICByZXR1cm4gUkVHX0VDT0xM QVRFOworICBlbHNlCisgICAgeworICAgICAgYml0c2V0X3NldCAoc2Jjc2V0LCBuYW1lWzBd KTsKKyAgICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyAgICB9Cit9CisjZW5kaWYgLyogbm90 IF9MSUJDICovCisKKy8qIFRoaXMgZnVuY3Rpb24gcGFyc2UgYnJhY2tldCBleHByZXNzaW9u IGxpa2UgIlthYmNdIiwgIlthLWNdIiwKKyAgICJbWy5hLWEuXV0iIGV0Yy4gICovCisKK3N0 YXRpYyBiaW5fdHJlZV90ICoKK3BhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVn ZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKwkJICAgcmVnX3N5bnRh eF90IHN5bnRheCwgcmVnX2VycmNvZGVfdCAqZXJyKQoreworI2lmZGVmIF9MSUJDCisgIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmNvbGxzZXFtYjsKKyAgY29uc3QgY2hhciAqY29sbHNlcXdj OworICB1aW50MzJfdCBucnVsZXM7CisgIGludDMyX3QgdGFibGVfc2l6ZTsKKyAgY29uc3Qg aW50MzJfdCAqc3ltYl90YWJsZTsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqZXh0cmE7CisK KyAgLyogTG9jYWwgZnVuY3Rpb24gZm9yIHBhcnNlX2JyYWNrZXRfZXhwIHVzZWQgaW4gX0xJ QkMgZW52aXJvbm1lbnQuCisgICAgIFNlZWsgdGhlIGNvbGxhdGluZyBzeW1ib2wgZW50cnkg Y29ycmVzcG9uZGluZyB0byBOQU1FLgorICAgICBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBz eW1ib2wgaW4gdGhlIFNZTUJfVEFCTEUsCisgICAgIG9yIC0xIGlmIG5vdCBmb3VuZC4gICov CisKKyAgYXV0byBpbmxpbmUgaW50MzJfdAorICBfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lu bGluZSkpCisgIHNlZWtfY29sbGF0aW5nX3N5bWJvbF9lbnRyeSAoY29uc3QgdW5zaWduZWQg Y2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQorICAgIHsKKyAgICAgIGludDMyX3QgZWxl bTsKKworICAgICAgZm9yIChlbGVtID0gMDsgZWxlbSA8IHRhYmxlX3NpemU7IGVsZW0rKykK KwlpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gIT0gMCkKKwkgIHsKKwkgICAgaW50MzJfdCBp ZHggPSBzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV07CisJICAgIC8qIFNraXAgdGhlIG5hbWUg b2YgY29sbGF0aW5nIGVsZW1lbnQgbmFtZS4gICovCisJICAgIGlkeCArPSAxICsgZXh0cmFb aWR4XTsKKwkgICAgaWYgKC8qIENvbXBhcmUgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZS4gICov CisJCW5hbWVfbGVuID09IGV4dHJhW2lkeF0KKwkJLyogQ29tcGFyZSB0aGUgbmFtZS4gICov CisJCSYmIG1lbWNtcCAobmFtZSwgJmV4dHJhW2lkeCArIDFdLCBuYW1lX2xlbikgPT0gMCkK KwkgICAgICAvKiBZZXAsIHRoaXMgaXMgdGhlIGVudHJ5LiAgKi8KKwkgICAgICByZXR1cm4g ZWxlbTsKKwkgIH0KKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgLyogTG9jYWwgZnVu Y3Rpb24gZm9yIHBhcnNlX2JyYWNrZXRfZXhwIHVzZWQgaW4gX0xJQkMgZW52aXJvbm1lbnQu CisgICAgIExvb2sgdXAgdGhlIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZSBvZiBCUl9FTEVN LgorICAgICBSZXR1cm4gdGhlIHZhbHVlIGlmIHN1Y2NlZWRlZCwgVUlOVF9NQVggb3RoZXJ3 aXNlLiAgKi8KKworICBhdXRvIGlubGluZSB1bnNpZ25lZCBpbnQKKyAgX19hdHRyaWJ1dGVf XyAoKGFsd2F5c19pbmxpbmUpKQorICBsb29rdXBfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVl IChicmFja2V0X2VsZW1fdCAqYnJfZWxlbSkKKyAgICB7CisgICAgICBpZiAoYnJfZWxlbS0+ dHlwZSA9PSBTQl9DSEFSKQorCXsKKwkgIC8qCisJICBpZiAoTUJfQ1VSX01BWCA9PSAxKQor CSAgKi8KKwkgIGlmIChucnVsZXMgPT0gMCkKKwkgICAgcmV0dXJuIGNvbGxzZXFtYlticl9l bGVtLT5vcHIuY2hdOworCSAgZWxzZQorCSAgICB7CisJICAgICAgd2ludF90IHdjID0gX19i dG93YyAoYnJfZWxlbS0+b3ByLmNoKTsKKwkgICAgICByZXR1cm4gX19jb2xsc2VxX3RhYmxl X2xvb2t1cCAoY29sbHNlcXdjLCB3Yyk7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmIChi cl9lbGVtLT50eXBlID09IE1CX0NIQVIpCisJeworCSAgaWYgKG5ydWxlcyAhPSAwKQorCSAg ICByZXR1cm4gX19jb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcXdjLCBicl9lbGVtLT5v cHIud2NoKTsKKwl9CisgICAgICBlbHNlIGlmIChicl9lbGVtLT50eXBlID09IENPTExfU1lN KQorCXsKKwkgIHNpemVfdCBzeW1fbmFtZV9sZW4gPSBzdHJsZW4gKChjaGFyICopIGJyX2Vs ZW0tPm9wci5uYW1lKTsKKwkgIGlmIChucnVsZXMgIT0gMCkKKwkgICAgeworCSAgICAgIGlu dDMyX3QgZWxlbSwgaWR4OworCSAgICAgIGVsZW0gPSBzZWVrX2NvbGxhdGluZ19zeW1ib2xf ZW50cnkgKGJyX2VsZW0tPm9wci5uYW1lLAorCQkJCQkJICBzeW1fbmFtZV9sZW4pOworCSAg ICAgIGlmIChlbGVtICE9IC0xKQorCQl7CisJCSAgLyogV2UgZm91bmQgdGhlIGVudHJ5LiAg Ki8KKwkJICBpZHggPSBzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV07CisJCSAgLyogU2tpcCB0 aGUgbmFtZSBvZiBjb2xsYXRpbmcgZWxlbWVudCBuYW1lLiAgKi8KKwkJICBpZHggKz0gMSAr IGV4dHJhW2lkeF07CisJCSAgLyogU2tpcCB0aGUgYnl0ZSBzZXF1ZW5jZSBvZiB0aGUgY29s bGF0aW5nIGVsZW1lbnQuICAqLworCQkgIGlkeCArPSAxICsgZXh0cmFbaWR4XTsKKwkJICAv KiBBZGp1c3QgZm9yIHRoZSBhbGlnbm1lbnQuICAqLworCQkgIGlkeCA9IChpZHggKyAzKSAm IH4zOworCQkgIC8qIFNraXAgdGhlIG11bHRpYnl0ZSBjb2xsYXRpb24gc2VxdWVuY2UgdmFs dWUuICAqLworCQkgIGlkeCArPSBzaXplb2YgKHVuc2lnbmVkIGludCk7CisJCSAgLyogU2tp cCB0aGUgd2lkZSBjaGFyIHNlcXVlbmNlIG9mIHRoZSBjb2xsYXRpbmcgZWxlbWVudC4gICov CisJCSAgaWR4ICs9IHNpemVvZiAodW5zaWduZWQgaW50KSAqCisJCSAgICAoMSArICoodW5z aWduZWQgaW50ICopIChleHRyYSArIGlkeCkpOworCQkgIC8qIFJldHVybiB0aGUgY29sbGF0 aW9uIHNlcXVlbmNlIHZhbHVlLiAgKi8KKwkJICByZXR1cm4gKih1bnNpZ25lZCBpbnQgKikg KGV4dHJhICsgaWR4KTsKKwkJfQorCSAgICAgIGVsc2UgaWYgKHN5bV9uYW1lX2xlbiA9PSAx KQorCQl7CisJCSAgLyogTm8gdmFsaWQgY2hhcmFjdGVyLiAgTWF0Y2ggaXQgYXMgYSBzaW5n bGUgYnl0ZQorCQkgICAgIGNoYXJhY3Rlci4gICovCisJCSAgcmV0dXJuIGNvbGxzZXFtYlti cl9lbGVtLT5vcHIubmFtZVswXV07CisJCX0KKwkgICAgfQorCSAgZWxzZSBpZiAoc3ltX25h bWVfbGVuID09IDEpCisJICAgIHJldHVybiBjb2xsc2VxbWJbYnJfZWxlbS0+b3ByLm5hbWVb MF1dOworCX0KKyAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICB9CisKKyAgLyogTG9jYWwg ZnVuY3Rpb24gZm9yIHBhcnNlX2JyYWNrZXRfZXhwIHVzZWQgaW4gX0xJQkMgZW52aXJvbm1l bnQuCisgICAgIEJ1aWxkIHRoZSByYW5nZSBleHByZXNzaW9uIHdoaWNoIHN0YXJ0cyBmcm9t IFNUQVJUX0VMRU0sIGFuZCBlbmRzCisgICAgIGF0IEVORF9FTEVNLiAgVGhlIHJlc3VsdCBh cmUgd3JpdHRlbiB0byBNQkNTRVQgYW5kIFNCQ1NFVC4KKyAgICAgUkFOR0VfQUxMT0MgaXMg dGhlIGFsbG9jYXRlZCBzaXplIG9mIG1iY3NldC0+cmFuZ2Vfc3RhcnRzLCBhbmQKKyAgICAg bWJjc2V0LT5yYW5nZV9lbmRzLCBpcyBhIHBvaW50ZXIgYXJndW1lbnQgc2luY2Ugd2UgbWF5 CisgICAgIHVwZGF0ZSBpdC4gICovCisKKyAgYXV0byBpbmxpbmUgcmVnX2VycmNvZGVfdAor ICBfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGluZSkpCisgIGJ1aWxkX3JhbmdlX2V4cCAo Yml0c2V0X3Qgc2Jjc2V0LCByZV9jaGFyc2V0X3QgKm1iY3NldCwgaW50ICpyYW5nZV9hbGxv YywKKwkJICAgYnJhY2tldF9lbGVtX3QgKnN0YXJ0X2VsZW0sIGJyYWNrZXRfZWxlbV90ICpl bmRfZWxlbSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgY2g7CisgICAgICB1aW50MzJf dCBzdGFydF9jb2xsc2VxOworICAgICAgdWludDMyX3QgZW5kX2NvbGxzZXE7CisKKyAgICAg IC8qIEVxdWl2YWxlbmNlIENsYXNzZXMgYW5kIENoYXJhY3RlciBDbGFzc2VzIGNhbid0IGJl IGEgcmFuZ2UKKwkgc3RhcnQvZW5kLiAgKi8KKyAgICAgIGlmIChCRSAoc3RhcnRfZWxlbS0+ dHlwZSA9PSBFUVVJVl9DTEFTUyB8fCBzdGFydF9lbGVtLT50eXBlID09IENIQVJfQ0xBU1MK KwkgICAgICB8fCBlbmRfZWxlbS0+dHlwZSA9PSBFUVVJVl9DTEFTUyB8fCBlbmRfZWxlbS0+ dHlwZSA9PSBDSEFSX0NMQVNTLAorCSAgICAgIDApKQorCXJldHVybiBSRUdfRVJBTkdFOwor CisgICAgICAvKiBGSVhNRTogSW1wbGVtZW50IHJhdGlvbmFsIHJhbmdlcyBoZXJlLCB0b28u ICAqLworICAgICAgc3RhcnRfY29sbHNlcSA9IGxvb2t1cF9jb2xsYXRpb25fc2VxdWVuY2Vf dmFsdWUgKHN0YXJ0X2VsZW0pOworICAgICAgZW5kX2NvbGxzZXEgPSBsb29rdXBfY29sbGF0 aW9uX3NlcXVlbmNlX3ZhbHVlIChlbmRfZWxlbSk7CisgICAgICAvKiBDaGVjayBzdGFydC9l bmQgY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlcy4gICovCisgICAgICBpZiAoQkUgKHN0YXJ0 X2NvbGxzZXEgPT0gVUlOVF9NQVggfHwgZW5kX2NvbGxzZXEgPT0gVUlOVF9NQVgsIDApKQor CXJldHVybiBSRUdfRUNPTExBVEU7CisgICAgICBpZiAoQkUgKChzeW50YXggJiBSRV9OT19F TVBUWV9SQU5HRVMpICYmIHN0YXJ0X2NvbGxzZXEgPiBlbmRfY29sbHNlcSwgMCkpCisJcmV0 dXJuIFJFR19FUkFOR0U7CisKKyAgICAgIC8qIEdvdCB2YWxpZCBjb2xsYXRpb24gc2VxdWVu Y2UgdmFsdWVzLCBhZGQgdGhlbSBhcyBhIG5ldyBlbnRyeS4KKwkgSG93ZXZlciwgaWYgd2Ug aGF2ZSBubyBjb2xsYXRpb24gZWxlbWVudHMsIGFuZCB0aGUgY2hhcmFjdGVyIHNldAorCSBp cyBzaW5nbGUgYnl0ZSwgdGhlIHNpbmdsZSBieXRlIGNoYXJhY3RlciBzZXQgdGhhdCB3ZQor CSBidWlsZCBiZWxvdyBzdWZmaWNlcy4gKi8KKyAgICAgIGlmIChucnVsZXMgPiAwIHx8IGRm YS0+bWJfY3VyX21heCA+IDEpCisJeworCSAgLyogQ2hlY2sgdGhlIHNwYWNlIG9mIHRoZSBh cnJheXMuICAqLworCSAgaWYgKEJFICgqcmFuZ2VfYWxsb2MgPT0gbWJjc2V0LT5ucmFuZ2Vz LCAwKSkKKwkgICAgeworCSAgICAgIC8qIFRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UsIG5l ZWQgcmVhbGxvYy4gICovCisJICAgICAgdWludDMyX3QgKm5ld19hcnJheV9zdGFydDsKKwkg ICAgICB1aW50MzJfdCAqbmV3X2FycmF5X2VuZDsKKwkgICAgICBJZHggbmV3X25yYW5nZXM7 CisKKwkgICAgICAvKiArMSBpbiBjYXNlIG9mIG1iY3NldC0+bnJhbmdlcyBpcyAwLiAgKi8K KwkgICAgICBuZXdfbnJhbmdlcyA9IDIgKiBtYmNzZXQtPm5yYW5nZXMgKyAxOworCSAgICAg IG5ld19hcnJheV9zdGFydCA9IHJlX3JlYWxsb2MgKG1iY3NldC0+cmFuZ2Vfc3RhcnRzLCB1 aW50MzJfdCwKKwkJCQkJICAgIG5ld19ucmFuZ2VzKTsKKwkgICAgICBuZXdfYXJyYXlfZW5k ID0gcmVfcmVhbGxvYyAobWJjc2V0LT5yYW5nZV9lbmRzLCB1aW50MzJfdCwKKwkJCQkJICBu ZXdfbnJhbmdlcyk7CisKKwkgICAgICBpZiAoQkUgKG5ld19hcnJheV9zdGFydCA9PSBOVUxM IHx8IG5ld19hcnJheV9lbmQgPT0gTlVMTCwgMCkpCisJCXJldHVybiBSRUdfRVNQQUNFOwor CisJICAgICAgbWJjc2V0LT5yYW5nZV9zdGFydHMgPSBuZXdfYXJyYXlfc3RhcnQ7CisJICAg ICAgbWJjc2V0LT5yYW5nZV9lbmRzID0gbmV3X2FycmF5X2VuZDsKKwkgICAgICAqcmFuZ2Vf YWxsb2MgPSBuZXdfbnJhbmdlczsKKwkgICAgfQorCisJICBtYmNzZXQtPnJhbmdlX3N0YXJ0 c1ttYmNzZXQtPm5yYW5nZXNdID0gc3RhcnRfY29sbHNlcTsKKwkgIG1iY3NldC0+cmFuZ2Vf ZW5kc1ttYmNzZXQtPm5yYW5nZXMrK10gPSBlbmRfY29sbHNlcTsKKwl9CisKKyAgICAgIC8q IEJ1aWxkIHRoZSB0YWJsZSBmb3Igc2luZ2xlIGJ5dGUgY2hhcmFjdGVycy4gICovCisgICAg ICBmb3IgKGNoID0gMDsgY2ggPCBTQkNfTUFYOyBjaCsrKQorCXsKKwkgIHVpbnQzMl90IGNo X2NvbGxzZXE7CisJICAvKgorCSAgaWYgKE1CX0NVUl9NQVggPT0gMSkKKwkgICovCisJICBp ZiAobnJ1bGVzID09IDApCisJICAgIGNoX2NvbGxzZXEgPSBjb2xsc2VxbWJbY2hdOworCSAg ZWxzZQorCSAgICBjaF9jb2xsc2VxID0gX19jb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNl cXdjLCBfX2J0b3djIChjaCkpOworCSAgaWYgKHN0YXJ0X2NvbGxzZXEgPD0gY2hfY29sbHNl cSAmJiBjaF9jb2xsc2VxIDw9IGVuZF9jb2xsc2VxKQorCSAgICBiaXRzZXRfc2V0IChzYmNz ZXQsIGNoKTsKKwl9CisgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisgICAgfQorCisgIC8q IExvY2FsIGZ1bmN0aW9uIGZvciBwYXJzZV9icmFja2V0X2V4cCB1c2VkIGluIF9MSUJDIGVu dmlyb25tZW50LgorICAgICBCdWlsZCB0aGUgY29sbGF0aW5nIGVsZW1lbnQgd2hpY2ggaXMg cmVwcmVzZW50ZWQgYnkgTkFNRS4KKyAgICAgVGhlIHJlc3VsdCBhcmUgd3JpdHRlbiB0byBN QkNTRVQgYW5kIFNCQ1NFVC4KKyAgICAgQ09MTF9TWU1fQUxMT0MgaXMgdGhlIGFsbG9jYXRl ZCBzaXplIG9mIG1iY3NldC0+Y29sbF9zeW0sIGlzIGEKKyAgICAgcG9pbnRlciBhcmd1bWVu dCBzaW5jZSB3ZSBtYXkgdXBkYXRlIGl0LiAgKi8KKworICBhdXRvIGlubGluZSByZWdfZXJy Y29kZV90CisgIF9fYXR0cmlidXRlX18gKChhbHdheXNfaW5saW5lKSkKKyAgYnVpbGRfY29s bGF0aW5nX3N5bWJvbCAoYml0c2V0X3Qgc2Jjc2V0LCByZV9jaGFyc2V0X3QgKm1iY3NldCwK KwkJCSAgSWR4ICpjb2xsX3N5bV9hbGxvYywgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSkK KyAgICB7CisgICAgICBpbnQzMl90IGVsZW0sIGlkeDsKKyAgICAgIHNpemVfdCBuYW1lX2xl biA9IHN0cmxlbiAoKGNvbnN0IGNoYXIgKikgbmFtZSk7CisgICAgICBpZiAobnJ1bGVzICE9 IDApCisJeworCSAgZWxlbSA9IHNlZWtfY29sbGF0aW5nX3N5bWJvbF9lbnRyeSAobmFtZSwg bmFtZV9sZW4pOworCSAgaWYgKGVsZW0gIT0gLTEpCisJICAgIHsKKwkgICAgICAvKiBXZSBm b3VuZCB0aGUgZW50cnkuICAqLworCSAgICAgIGlkeCA9IHN5bWJfdGFibGVbMiAqIGVsZW0g KyAxXTsKKwkgICAgICAvKiBTa2lwIHRoZSBuYW1lIG9mIGNvbGxhdGluZyBlbGVtZW50IG5h bWUuICAqLworCSAgICAgIGlkeCArPSAxICsgZXh0cmFbaWR4XTsKKwkgICAgfQorCSAgZWxz ZSBpZiAobmFtZV9sZW4gPT0gMSkKKwkgICAgeworCSAgICAgIC8qIE5vIHZhbGlkIGNoYXJh Y3RlciwgdHJlYXQgaXQgYXMgYSBub3JtYWwKKwkJIGNoYXJhY3Rlci4gICovCisJICAgICAg Yml0c2V0X3NldCAoc2Jjc2V0LCBuYW1lWzBdKTsKKwkgICAgICByZXR1cm4gUkVHX05PRVJS T1I7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgcmV0dXJuIFJFR19FQ09MTEFURTsKKworCSAg LyogR290IHZhbGlkIGNvbGxhdGlvbiBzZXF1ZW5jZSwgYWRkIGl0IGFzIGEgbmV3IGVudHJ5 LiAgKi8KKwkgIC8qIENoZWNrIHRoZSBzcGFjZSBvZiB0aGUgYXJyYXlzLiAgKi8KKwkgIGlm IChCRSAoKmNvbGxfc3ltX2FsbG9jID09IG1iY3NldC0+bmNvbGxfc3ltcywgMCkpCisJICAg IHsKKwkgICAgICAvKiBOb3QgZW5vdWdoLCByZWFsbG9jIGl0LiAgKi8KKwkgICAgICAvKiAr MSBpbiBjYXNlIG9mIG1iY3NldC0+bmNvbGxfc3ltcyBpcyAwLiAgKi8KKwkgICAgICBJZHgg bmV3X2NvbGxfc3ltX2FsbG9jID0gMiAqIG1iY3NldC0+bmNvbGxfc3ltcyArIDE7CisJICAg ICAgLyogVXNlIHJlYWxsb2Mgc2luY2UgbWJjc2V0LT5jb2xsX3N5bXMgaXMgTlVMTAorCQkg aWYgKmFsbG9jID09IDAuICAqLworCSAgICAgIGludDMyX3QgKm5ld19jb2xsX3N5bXMgPSBy ZV9yZWFsbG9jIChtYmNzZXQtPmNvbGxfc3ltcywgaW50MzJfdCwKKwkJCQkJCSAgIG5ld19j b2xsX3N5bV9hbGxvYyk7CisJICAgICAgaWYgKEJFIChuZXdfY29sbF9zeW1zID09IE5VTEws IDApKQorCQlyZXR1cm4gUkVHX0VTUEFDRTsKKwkgICAgICBtYmNzZXQtPmNvbGxfc3ltcyA9 IG5ld19jb2xsX3N5bXM7CisJICAgICAgKmNvbGxfc3ltX2FsbG9jID0gbmV3X2NvbGxfc3lt X2FsbG9jOworCSAgICB9CisJICBtYmNzZXQtPmNvbGxfc3ltc1ttYmNzZXQtPm5jb2xsX3N5 bXMrK10gPSBpZHg7CisJICByZXR1cm4gUkVHX05PRVJST1I7CisJfQorICAgICAgZWxzZQor CXsKKwkgIGlmIChCRSAobmFtZV9sZW4gIT0gMSwgMCkpCisJICAgIHJldHVybiBSRUdfRUNP TExBVEU7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBiaXRzZXRfc2V0IChzYmNzZXQsIG5h bWVbMF0pOworCSAgICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKwkgICAgfQorCX0KKyAgICB9 CisjZW5kaWYKKworICByZV90b2tlbl90IGJyX3Rva2VuOworICByZV9iaXRzZXRfcHRyX3Qg c2Jjc2V0OworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIHJlX2NoYXJzZXRfdCAqbWJjc2V0 OworICBJZHggY29sbF9zeW1fYWxsb2MgPSAwLCByYW5nZV9hbGxvYyA9IDAsIG1iY2hhcl9h bGxvYyA9IDA7CisgIElkeCBlcXVpdl9jbGFzc19hbGxvYyA9IDAsIGNoYXJfY2xhc3NfYWxs b2MgPSAwOworI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICBib29sIG5vbl9t YXRjaCA9IGZhbHNlOworICBiaW5fdHJlZV90ICp3b3JrX3RyZWU7CisgIGludCB0b2tlbl9s ZW47CisgIGJvb2wgZmlyc3Rfcm91bmQgPSB0cnVlOworI2lmZGVmIF9MSUJDCisgIGNvbGxz ZXFtYiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisgICAgX05MX0NVUlJFTlQgKExDX0NP TExBVEUsIF9OTF9DT0xMQVRFX0NPTExTRVFNQik7CisgIG5ydWxlcyA9IF9OTF9DVVJSRU5U X1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisgIGlmIChucnVsZXMp CisgICAgeworICAgICAgLyoKKyAgICAgIGlmIChNQl9DVVJfTUFYID4gMSkKKyAgICAgICov CisgICAgICBjb2xsc2Vxd2MgPSBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExB VEVfQ09MTFNFUVdDKTsKKyAgICAgIHRhYmxlX3NpemUgPSBfTkxfQ1VSUkVOVF9XT1JEIChM Q19DT0xMQVRFLCBfTkxfQ09MTEFURV9TWU1CX0hBU0hfU0laRU1CKTsKKyAgICAgIHN5bWJf dGFibGUgPSAoY29uc3QgaW50MzJfdCAqKSBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKwkJ CQkJCSAgX05MX0NPTExBVEVfU1lNQl9UQUJMRU1CKTsKKyAgICAgIGV4dHJhID0gKGNvbnN0 IHVuc2lnbmVkIGNoYXIgKikgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisJCQkJCQkgICBf TkxfQ09MTEFURV9TWU1CX0VYVFJBTUIpOworICAgIH0KKyNlbmRpZgorICBzYmNzZXQgPSAo cmVfYml0c2V0X3B0cl90KSBjYWxsb2MgKHNpemVvZiAoYml0c2V0X3QpLCAxKTsKKyNpZmRl ZiBSRV9FTkFCTEVfSTE4TgorICBtYmNzZXQgPSAocmVfY2hhcnNldF90ICopIGNhbGxvYyAo c2l6ZW9mIChyZV9jaGFyc2V0X3QpLCAxKTsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAq LworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChCRSAoc2Jjc2V0ID09IE5VTEwgfHwg bWJjc2V0ID09IE5VTEwsIDApKQorI2Vsc2UKKyAgaWYgKEJFIChzYmNzZXQgPT0gTlVMTCwg MCkpCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICB7CisgICAgICByZV9mcmVl IChzYmNzZXQpOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICByZV9mcmVlIChtYmNz ZXQpOworI2VuZGlmCisgICAgICAqZXJyID0gUkVHX0VTUEFDRTsKKyAgICAgIHJldHVybiBO VUxMOworICAgIH0KKworICB0b2tlbl9sZW4gPSBwZWVrX3Rva2VuX2JyYWNrZXQgKHRva2Vu LCByZWdleHAsIHN5bnRheCk7CisgIGlmIChCRSAodG9rZW4tPnR5cGUgPT0gRU5EX09GX1JF LCAwKSkKKyAgICB7CisgICAgICAqZXJyID0gUkVHX0JBRFBBVDsKKyAgICAgIGdvdG8gcGFy c2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm47CisgICAgfQorICBpZiAodG9rZW4tPnR5cGUg PT0gT1BfTk9OX01BVENIX0xJU1QpCisgICAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisg ICAgICBtYmNzZXQtPm5vbl9tYXRjaCA9IDE7CisjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9J MThOICovCisgICAgICBub25fbWF0Y2ggPSB0cnVlOworICAgICAgaWYgKHN5bnRheCAmIFJF X0hBVF9MSVNUU19OT1RfTkVXTElORSkKKwliaXRzZXRfc2V0IChzYmNzZXQsICdcbicpOwor ICAgICAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgdG9rZW5fbGVuKTsgLyogU2tp cCBhIHRva2VuLiAgKi8KKyAgICAgIHRva2VuX2xlbiA9IHBlZWtfdG9rZW5fYnJhY2tldCAo dG9rZW4sIHJlZ2V4cCwgc3ludGF4KTsKKyAgICAgIGlmIChCRSAodG9rZW4tPnR5cGUgPT0g RU5EX09GX1JFLCAwKSkKKwl7CisJICAqZXJyID0gUkVHX0JBRFBBVDsKKwkgIGdvdG8gcGFy c2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm47CisJfQorICAgIH0KKworICAvKiBXZSB0cmVh dCB0aGUgZmlyc3QgJ10nIGFzIGEgbm9ybWFsIGNoYXJhY3Rlci4gICovCisgIGlmICh0b2tl bi0+dHlwZSA9PSBPUF9DTE9TRV9CUkFDS0VUKQorICAgIHRva2VuLT50eXBlID0gQ0hBUkFD VEVSOworCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGJyYWNrZXRfZWxlbV90IHN0YXJ0 X2VsZW0sIGVuZF9lbGVtOworICAgICAgdW5zaWduZWQgY2hhciBzdGFydF9uYW1lX2J1ZltC UkFDS0VUX05BTUVfQlVGX1NJWkVdOworICAgICAgdW5zaWduZWQgY2hhciBlbmRfbmFtZV9i dWZbQlJBQ0tFVF9OQU1FX0JVRl9TSVpFXTsKKyAgICAgIHJlZ19lcnJjb2RlX3QgcmV0Owor ICAgICAgaW50IHRva2VuX2xlbjIgPSAwOworICAgICAgYm9vbCBpc19yYW5nZV9leHAgPSBm YWxzZTsKKyAgICAgIHJlX3Rva2VuX3QgdG9rZW4yOworCisgICAgICBzdGFydF9lbGVtLm9w ci5uYW1lID0gc3RhcnRfbmFtZV9idWY7CisgICAgICBzdGFydF9lbGVtLnR5cGUgPSBDT0xM X1NZTTsKKyAgICAgIHJldCA9IHBhcnNlX2JyYWNrZXRfZWxlbWVudCAoJnN0YXJ0X2VsZW0s IHJlZ2V4cCwgdG9rZW4sIHRva2VuX2xlbiwgZGZhLAorCQkJCSAgIHN5bnRheCwgZmlyc3Rf cm91bmQpOworICAgICAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorCXsKKwkg ICplcnIgPSByZXQ7CisJICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOwor CX0KKyAgICAgIGZpcnN0X3JvdW5kID0gZmFsc2U7CisKKyAgICAgIC8qIEdldCBpbmZvcm1h dGlvbiBhYm91dCB0aGUgbmV4dCB0b2tlbi4gIFdlIG5lZWQgaXQgaW4gYW55IGNhc2UuICAq LworICAgICAgdG9rZW5fbGVuID0gcGVla190b2tlbl9icmFja2V0ICh0b2tlbiwgcmVnZXhw LCBzeW50YXgpOworCisgICAgICAvKiBEbyBub3QgY2hlY2sgZm9yIHJhbmdlcyBpZiB3ZSBr bm93IHRoZXkgYXJlIG5vdCBhbGxvd2VkLiAgKi8KKyAgICAgIGlmIChzdGFydF9lbGVtLnR5 cGUgIT0gQ0hBUl9DTEFTUyAmJiBzdGFydF9lbGVtLnR5cGUgIT0gRVFVSVZfQ0xBU1MpCisJ eworCSAgaWYgKEJFICh0b2tlbi0+dHlwZSA9PSBFTkRfT0ZfUkUsIDApKQorCSAgICB7CisJ ICAgICAgKmVyciA9IFJFR19FQlJBQ0s7CisJICAgICAgZ290byBwYXJzZV9icmFja2V0X2V4 cF9mcmVlX3JldHVybjsKKwkgICAgfQorCSAgaWYgKHRva2VuLT50eXBlID09IE9QX0NIQVJT RVRfUkFOR0UpCisJICAgIHsKKwkgICAgICByZV9zdHJpbmdfc2tpcF9ieXRlcyAocmVnZXhw LCB0b2tlbl9sZW4pOyAvKiBTa2lwICctJy4gICovCisJICAgICAgdG9rZW5fbGVuMiA9IHBl ZWtfdG9rZW5fYnJhY2tldCAoJnRva2VuMiwgcmVnZXhwLCBzeW50YXgpOworCSAgICAgIGlm IChCRSAodG9rZW4yLnR5cGUgPT0gRU5EX09GX1JFLCAwKSkKKwkJeworCQkgICplcnIgPSBS RUdfRUJSQUNLOworCQkgIGdvdG8gcGFyc2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm47CisJ CX0KKwkgICAgICBpZiAodG9rZW4yLnR5cGUgPT0gT1BfQ0xPU0VfQlJBQ0tFVCkKKwkJewor CQkgIC8qIFdlIHRyZWF0IHRoZSBsYXN0ICctJyBhcyBhIG5vcm1hbCBjaGFyYWN0ZXIuICAq LworCQkgIHJlX3N0cmluZ19za2lwX2J5dGVzIChyZWdleHAsIC10b2tlbl9sZW4pOworCQkg IHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworCQl9CisJICAgICAgZWxzZQorCQlpc19yYW5n ZV9leHAgPSB0cnVlOworCSAgICB9CisJfQorCisgICAgICBpZiAoaXNfcmFuZ2VfZXhwID09 IHRydWUpCisJeworCSAgZW5kX2VsZW0ub3ByLm5hbWUgPSBlbmRfbmFtZV9idWY7CisJICBl bmRfZWxlbS50eXBlID0gQ09MTF9TWU07CisJICByZXQgPSBwYXJzZV9icmFja2V0X2VsZW1l bnQgKCZlbmRfZWxlbSwgcmVnZXhwLCAmdG9rZW4yLCB0b2tlbl9sZW4yLAorCQkJCSAgICAg ICBkZmEsIHN5bnRheCwgdHJ1ZSk7CisJICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwg MCkpCisJICAgIHsKKwkgICAgICAqZXJyID0gcmV0OworCSAgICAgIGdvdG8gcGFyc2VfYnJh Y2tldF9leHBfZnJlZV9yZXR1cm47CisJICAgIH0KKworCSAgdG9rZW5fbGVuID0gcGVla190 b2tlbl9icmFja2V0ICh0b2tlbiwgcmVnZXhwLCBzeW50YXgpOworCisjaWZkZWYgX0xJQkMK KwkgICplcnIgPSBidWlsZF9yYW5nZV9leHAgKHNiY3NldCwgbWJjc2V0LCAmcmFuZ2VfYWxs b2MsCisJCQkJICAmc3RhcnRfZWxlbSwgJmVuZF9lbGVtKTsKKyNlbHNlCisjIGlmZGVmIFJF X0VOQUJMRV9JMThOCisJICAqZXJyID0gYnVpbGRfcmFuZ2VfZXhwIChzeW50YXgsIHNiY3Nl dCwKKwkJCQkgIGRmYS0+bWJfY3VyX21heCA+IDEgPyBtYmNzZXQgOiBOVUxMLAorCQkJCSAg JnJhbmdlX2FsbG9jLCAmc3RhcnRfZWxlbSwgJmVuZF9lbGVtKTsKKyMgZWxzZQorCSAgKmVy ciA9IGJ1aWxkX3JhbmdlX2V4cCAoc3ludGF4LCBzYmNzZXQsICZzdGFydF9lbGVtLCAmZW5k X2VsZW0pOworIyBlbmRpZgorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisJICBpZiAo QkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICBnb3RvIHBhcnNlX2JyYWNrZXRf ZXhwX2ZyZWVfcmV0dXJuOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBzd2l0Y2ggKHN0YXJ0 X2VsZW0udHlwZSkKKwkgICAgeworCSAgICBjYXNlIFNCX0NIQVI6CisJICAgICAgYml0c2V0 X3NldCAoc2Jjc2V0LCBzdGFydF9lbGVtLm9wci5jaCk7CisJICAgICAgYnJlYWs7CisjaWZk ZWYgUkVfRU5BQkxFX0kxOE4KKwkgICAgY2FzZSBNQl9DSEFSOgorCSAgICAgIC8qIENoZWNr IHdoZXRoZXIgdGhlIGFycmF5IGhhcyBlbm91Z2ggc3BhY2UuICAqLworCSAgICAgIGlmIChC RSAobWJjaGFyX2FsbG9jID09IG1iY3NldC0+bm1iY2hhcnMsIDApKQorCQl7CisJCSAgd2No YXJfdCAqbmV3X21iY2hhcnM7CisJCSAgLyogTm90IGVub3VnaCwgcmVhbGxvYyBpdC4gICov CisJCSAgLyogKzEgaW4gY2FzZSBvZiBtYmNzZXQtPm5tYmNoYXJzIGlzIDAuICAqLworCQkg IG1iY2hhcl9hbGxvYyA9IDIgKiBtYmNzZXQtPm5tYmNoYXJzICsgMTsKKwkJICAvKiBVc2Ug cmVhbGxvYyBzaW5jZSBhcnJheSBpcyBOVUxMIGlmICphbGxvYyA9PSAwLiAgKi8KKwkJICBu ZXdfbWJjaGFycyA9IHJlX3JlYWxsb2MgKG1iY3NldC0+bWJjaGFycywgd2NoYXJfdCwKKwkJ CQkJICAgIG1iY2hhcl9hbGxvYyk7CisJCSAgaWYgKEJFIChuZXdfbWJjaGFycyA9PSBOVUxM LCAwKSkKKwkJICAgIGdvdG8gcGFyc2VfYnJhY2tldF9leHBfZXNwYWNlOworCQkgIG1iY3Nl dC0+bWJjaGFycyA9IG5ld19tYmNoYXJzOworCQl9CisJICAgICAgbWJjc2V0LT5tYmNoYXJz W21iY3NldC0+bm1iY2hhcnMrK10gPSBzdGFydF9lbGVtLm9wci53Y2g7CisJICAgICAgYnJl YWs7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwkgICAgY2FzZSBFUVVJVl9DTEFT UzoKKwkgICAgICAqZXJyID0gYnVpbGRfZXF1aXZfY2xhc3MgKHNiY3NldCwKKyNpZmRlZiBS RV9FTkFCTEVfSTE4TgorCQkJCQltYmNzZXQsICZlcXVpdl9jbGFzc19hbGxvYywKKyNlbmRp ZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCQkJCQlzdGFydF9lbGVtLm9wci5uYW1lKTsKKwkg ICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlnb3RvIHBhcnNlX2Jy YWNrZXRfZXhwX2ZyZWVfcmV0dXJuOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIENPTExf U1lNOgorCSAgICAgICplcnIgPSBidWlsZF9jb2xsYXRpbmdfc3ltYm9sIChzYmNzZXQsCisj aWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkJCQkJICAgICBtYmNzZXQsICZjb2xsX3N5bV9hbGxv YywKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCQkJCQkgICAgIHN0YXJ0X2VsZW0u b3ByLm5hbWUpOworCSAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJ CWdvdG8gcGFyc2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm47CisJICAgICAgYnJlYWs7CisJ ICAgIGNhc2UgQ0hBUl9DTEFTUzoKKwkgICAgICAqZXJyID0gYnVpbGRfY2hhcmNsYXNzIChy ZWdleHAtPnRyYW5zLCBzYmNzZXQsCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkJCQkgICAg ICBtYmNzZXQsICZjaGFyX2NsYXNzX2FsbG9jLAorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThO ICovCisJCQkJICAgICAgKGNvbnN0IGNoYXIgKikgc3RhcnRfZWxlbS5vcHIubmFtZSwKKwkJ CQkgICAgICBzeW50YXgpOworCSAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiwg MCkpCisJICAgICAgIGdvdG8gcGFyc2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm47CisJICAg ICAgYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJICAgICAgYXNzZXJ0ICgwKTsKKwkgICAgICBi cmVhazsKKwkgICAgfQorCX0KKyAgICAgIGlmIChCRSAodG9rZW4tPnR5cGUgPT0gRU5EX09G X1JFLCAwKSkKKwl7CisJICAqZXJyID0gUkVHX0VCUkFDSzsKKwkgIGdvdG8gcGFyc2VfYnJh Y2tldF9leHBfZnJlZV9yZXR1cm47CisJfQorICAgICAgaWYgKHRva2VuLT50eXBlID09IE9Q X0NMT1NFX0JSQUNLRVQpCisJYnJlYWs7CisgICAgfQorCisgIHJlX3N0cmluZ19za2lwX2J5 dGVzIChyZWdleHAsIHRva2VuX2xlbik7IC8qIFNraXAgYSB0b2tlbi4gICovCisKKyAgLyog SWYgaXQgaXMgbm9uLW1hdGNoaW5nIGxpc3QuICAqLworICBpZiAobm9uX21hdGNoKQorICAg IGJpdHNldF9ub3QgKHNiY3NldCk7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAvKiBF bnN1cmUgb25seSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXJzIGFyZSBzZXQuICAqLworICBpZiAo ZGZhLT5tYl9jdXJfbWF4ID4gMSkKKyAgICBiaXRzZXRfbWFzayAoc2Jjc2V0LCBkZmEtPnNi X2NoYXIpOworCisgIGlmIChtYmNzZXQtPm5tYmNoYXJzIHx8IG1iY3NldC0+bmNvbGxfc3lt cyB8fCBtYmNzZXQtPm5lcXVpdl9jbGFzc2VzCisgICAgICB8fCBtYmNzZXQtPm5yYW5nZXMg fHwgKGRmYS0+bWJfY3VyX21heCA+IDEgJiYgKG1iY3NldC0+bmNoYXJfY2xhc3NlcworCQkJ CQkJICAgICB8fCBtYmNzZXQtPm5vbl9tYXRjaCkpKQorICAgIHsKKyAgICAgIGJpbl90cmVl X3QgKm1iY190cmVlOworICAgICAgaW50IHNiY19pZHg7CisgICAgICAvKiBCdWlsZCBhIHRy ZWUgZm9yIGNvbXBsZXggYnJhY2tldC4gICovCisgICAgICBkZmEtPmhhc19tYl9ub2RlID0g MTsKKyAgICAgIGJyX3Rva2VuLnR5cGUgPSBDT01QTEVYX0JSQUNLRVQ7CisgICAgICBicl90 b2tlbi5vcHIubWJjc2V0ID0gbWJjc2V0OworICAgICAgbWJjX3RyZWUgPSBjcmVhdGVfdG9r ZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCAmYnJfdG9rZW4pOworICAgICAgaWYgKEJFICht YmNfdHJlZSA9PSBOVUxMLCAwKSkKKwlnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2VzcGFjZTsK KyAgICAgIGZvciAoc2JjX2lkeCA9IDA7IHNiY19pZHggPCBCSVRTRVRfV09SRFM7ICsrc2Jj X2lkeCkKKwlpZiAoc2Jjc2V0W3NiY19pZHhdKQorCSAgYnJlYWs7CisgICAgICAvKiBJZiB0 aGVyZSBhcmUgbm8gYml0cyBzZXQgaW4gc2Jjc2V0LCB0aGVyZSBpcyBubyBwb2ludAorCSBv ZiBoYXZpbmcgYm90aCBTSU1QTEVfQlJBQ0tFVCBhbmQgQ09NUExFWF9CUkFDS0VULiAgKi8K KyAgICAgIGlmIChzYmNfaWR4IDwgQklUU0VUX1dPUkRTKQorCXsKKwkgIC8qIEJ1aWxkIGEg dHJlZSBmb3Igc2ltcGxlIGJyYWNrZXQuICAqLworCSAgYnJfdG9rZW4udHlwZSA9IFNJTVBM RV9CUkFDS0VUOworCSAgYnJfdG9rZW4ub3ByLnNiY3NldCA9IHNiY3NldDsKKwkgIHdvcmtf dHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsICZicl90b2tlbik7 CisJICBpZiAoQkUgKHdvcmtfdHJlZSA9PSBOVUxMLCAwKSkKKwkgICAgZ290byBwYXJzZV9i cmFja2V0X2V4cF9lc3BhY2U7CisKKwkgIC8qIFRoZW4gam9pbiB0aGVtIGJ5IEFMVCBub2Rl LiAgKi8KKwkgIHdvcmtfdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIHdvcmtfdHJlZSwgbWJj X3RyZWUsIE9QX0FMVCk7CisJICBpZiAoQkUgKHdvcmtfdHJlZSA9PSBOVUxMLCAwKSkKKwkg ICAgZ290byBwYXJzZV9icmFja2V0X2V4cF9lc3BhY2U7CisJfQorICAgICAgZWxzZQorCXsK KwkgIHJlX2ZyZWUgKHNiY3NldCk7CisJICB3b3JrX3RyZWUgPSBtYmNfdHJlZTsKKwl9Cisg ICAgfQorICBlbHNlCisjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgICAgewor I2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBmcmVlX2NoYXJzZXQgKG1iY3NldCk7Cisj ZW5kaWYKKyAgICAgIC8qIEJ1aWxkIGEgdHJlZSBmb3Igc2ltcGxlIGJyYWNrZXQuICAqLwor ICAgICAgYnJfdG9rZW4udHlwZSA9IFNJTVBMRV9CUkFDS0VUOworICAgICAgYnJfdG9rZW4u b3ByLnNiY3NldCA9IHNiY3NldDsKKyAgICAgIHdvcmtfdHJlZSA9IGNyZWF0ZV90b2tlbl90 cmVlIChkZmEsIE5VTEwsIE5VTEwsICZicl90b2tlbik7CisgICAgICBpZiAoQkUgKHdvcmtf dHJlZSA9PSBOVUxMLCAwKSkKKwlnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2VzcGFjZTsKKyAg ICB9CisgIHJldHVybiB3b3JrX3RyZWU7CisKKyBwYXJzZV9icmFja2V0X2V4cF9lc3BhY2U6 CisgICplcnIgPSBSRUdfRVNQQUNFOworIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJu OgorICByZV9mcmVlIChzYmNzZXQpOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGZyZWVf Y2hhcnNldCAobWJjc2V0KTsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworICByZXR1 cm4gTlVMTDsKK30KKworLyogUGFyc2UgYW4gZWxlbWVudCBpbiB0aGUgYnJhY2tldCBleHBy ZXNzaW9uLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK3BhcnNlX2JyYWNrZXRfZWxl bWVudCAoYnJhY2tldF9lbGVtX3QgKmVsZW0sIHJlX3N0cmluZ190ICpyZWdleHAsCisJCSAg ICAgICByZV90b2tlbl90ICp0b2tlbiwgaW50IHRva2VuX2xlbiwgcmVfZGZhX3QgKmRmYSwK KwkJICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsIGJvb2wgYWNjZXB0X2h5cGhlbikKK3sK KyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpbnQgY3VyX2NoYXJfc2l6ZTsKKyAgY3VyX2No YXJfc2l6ZSA9IHJlX3N0cmluZ19jaGFyX3NpemVfYXQgKHJlZ2V4cCwgcmVfc3RyaW5nX2N1 cl9pZHggKHJlZ2V4cCkpOworICBpZiAoY3VyX2NoYXJfc2l6ZSA+IDEpCisgICAgeworICAg ICAgZWxlbS0+dHlwZSA9IE1CX0NIQVI7CisgICAgICBlbGVtLT5vcHIud2NoID0gcmVfc3Ry aW5nX3djaGFyX2F0IChyZWdleHAsIHJlX3N0cmluZ19jdXJfaWR4IChyZWdleHApKTsKKyAg ICAgIHJlX3N0cmluZ19za2lwX2J5dGVzIChyZWdleHAsIGN1cl9jaGFyX3NpemUpOworICAg ICAgcmV0dXJuIFJFR19OT0VSUk9SOworICAgIH0KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4 TiAqLworICByZV9zdHJpbmdfc2tpcF9ieXRlcyAocmVnZXhwLCB0b2tlbl9sZW4pOyAvKiBT a2lwIGEgdG9rZW4uICAqLworICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9DT0xMX0VM RU0gfHwgdG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9DSEFSX0NMQVNTCisgICAgICB8fCB0b2tl bi0+dHlwZSA9PSBPUF9PUEVOX0VRVUlWX0NMQVNTKQorICAgIHJldHVybiBwYXJzZV9icmFj a2V0X3N5bWJvbCAoZWxlbSwgcmVnZXhwLCB0b2tlbik7CisgIGlmIChCRSAodG9rZW4tPnR5 cGUgPT0gT1BfQ0hBUlNFVF9SQU5HRSwgMCkgJiYgIWFjY2VwdF9oeXBoZW4pCisgICAgewor ICAgICAgLyogQSAnLScgbXVzdCBvbmx5IGFwcGVhciBhcyBhbnl0aGluZyBidXQgYSByYW5n ZSBpbmRpY2F0b3IgYmVmb3JlCisJIHRoZSBjbG9zaW5nIGJyYWNrZXQuICBFdmVyeXRoaW5n IGVsc2UgaXMgYW4gZXJyb3IuICAqLworICAgICAgcmVfdG9rZW5fdCB0b2tlbjI7CisgICAg ICAodm9pZCkgcGVla190b2tlbl9icmFja2V0ICgmdG9rZW4yLCByZWdleHAsIHN5bnRheCk7 CisgICAgICBpZiAodG9rZW4yLnR5cGUgIT0gT1BfQ0xPU0VfQlJBQ0tFVCkKKwkvKiBUaGUg YWN0dWFsIGVycm9yIHZhbHVlIGlzIG5vdCBzdGFuZGFyZGl6ZWQgc2luY2UgdGhpcyB3aG9s ZQorCSAgIGNhc2UgaXMgdW5kZWZpbmVkLiAgQnV0IEVSQU5HRSBtYWtlcyBnb29kIHNlbnNl LiAgKi8KKwlyZXR1cm4gUkVHX0VSQU5HRTsKKyAgICB9CisgIGVsZW0tPnR5cGUgPSBTQl9D SEFSOworICBlbGVtLT5vcHIuY2ggPSB0b2tlbi0+b3ByLmM7CisgIHJldHVybiBSRUdfTk9F UlJPUjsKK30KKworLyogUGFyc2UgYSBicmFja2V0IHN5bWJvbCBpbiB0aGUgYnJhY2tldCBl eHByZXNzaW9uLiAgQnJhY2tldCBzeW1ib2xzIGFyZQorICAgc3VjaCBhcyBbOjxjaGFyYWN0 ZXJfY2xhc3M+Ol0sIFsuPGNvbGxhdGluZ19lbGVtZW50Pi5dLCBhbmQKKyAgIFs9PGVxdWl2 YWxlbnRfY2xhc3M+PV0uICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorcGFyc2VfYnJh Y2tldF9zeW1ib2wgKGJyYWNrZXRfZWxlbV90ICplbGVtLCByZV9zdHJpbmdfdCAqcmVnZXhw LAorCQkgICAgICByZV90b2tlbl90ICp0b2tlbikKK3sKKyAgdW5zaWduZWQgY2hhciBjaCwg ZGVsaW0gPSB0b2tlbi0+b3ByLmM7CisgIGludCBpID0gMDsKKyAgaWYgKHJlX3N0cmluZ19l b2kocmVnZXhwKSkKKyAgICByZXR1cm4gUkVHX0VCUkFDSzsKKyAgZm9yICg7OyArK2kpCisg ICAgeworICAgICAgaWYgKGkgPj0gQlJBQ0tFVF9OQU1FX0JVRl9TSVpFKQorCXJldHVybiBS RUdfRUJSQUNLOworICAgICAgaWYgKHRva2VuLT50eXBlID09IE9QX09QRU5fQ0hBUl9DTEFT UykKKwljaCA9IHJlX3N0cmluZ19mZXRjaF9ieXRlX2Nhc2UgKHJlZ2V4cCk7CisgICAgICBl bHNlCisJY2ggPSByZV9zdHJpbmdfZmV0Y2hfYnl0ZSAocmVnZXhwKTsKKyAgICAgIGlmIChy ZV9zdHJpbmdfZW9pKHJlZ2V4cCkpCisJcmV0dXJuIFJFR19FQlJBQ0s7CisgICAgICBpZiAo Y2ggPT0gZGVsaW0gJiYgcmVfc3RyaW5nX3BlZWtfYnl0ZSAocmVnZXhwLCAwKSA9PSAnXScp CisJYnJlYWs7CisgICAgICBlbGVtLT5vcHIubmFtZVtpXSA9IGNoOworICAgIH0KKyAgcmVf c3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgMSk7CisgIGVsZW0tPm9wci5uYW1lW2ldID0g J1wwJzsKKyAgc3dpdGNoICh0b2tlbi0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBPUF9PUEVO X0NPTExfRUxFTToKKyAgICAgIGVsZW0tPnR5cGUgPSBDT0xMX1NZTTsKKyAgICAgIGJyZWFr OworICAgIGNhc2UgT1BfT1BFTl9FUVVJVl9DTEFTUzoKKyAgICAgIGVsZW0tPnR5cGUgPSBF UVVJVl9DTEFTUzsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BfT1BFTl9DSEFSX0NMQVNT OgorICAgICAgZWxlbS0+dHlwZSA9IENIQVJfQ0xBU1M7CisgICAgICBicmVhazsKKyAgICBk ZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9 CisKKyAgLyogSGVscGVyIGZ1bmN0aW9uIGZvciBwYXJzZV9icmFja2V0X2V4cC4KKyAgICAg QnVpbGQgdGhlIGVxdWl2YWxlbmNlIGNsYXNzIHdoaWNoIGlzIHJlcHJlc2VudGVkIGJ5IE5B TUUuCisgICAgIFRoZSByZXN1bHQgYXJlIHdyaXR0ZW4gdG8gTUJDU0VUIGFuZCBTQkNTRVQu CisgICAgIEVRVUlWX0NMQVNTX0FMTE9DIGlzIHRoZSBhbGxvY2F0ZWQgc2l6ZSBvZiBtYmNz ZXQtPmVxdWl2X2NsYXNzZXMsCisgICAgIGlzIGEgcG9pbnRlciBhcmd1bWVudCBzaW5jZSB3 ZSBtYXkgdXBkYXRlIGl0LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKKyNpZmRlZiBS RV9FTkFCTEVfSTE4TgorYnVpbGRfZXF1aXZfY2xhc3MgKGJpdHNldF90IHNiY3NldCwgcmVf Y2hhcnNldF90ICptYmNzZXQsCisJCSAgIElkeCAqZXF1aXZfY2xhc3NfYWxsb2MsIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKm5hbWUpCisjZWxzZSAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8K K2J1aWxkX2VxdWl2X2NsYXNzIChiaXRzZXRfdCBzYmNzZXQsIGNvbnN0IHVuc2lnbmVkIGNo YXIgKm5hbWUpCisjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCit7CisjaWZkZWYg X0xJQkMKKyAgdWludDMyX3QgbnJ1bGVzID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFU RSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKyAgaWYgKG5ydWxlcyAhPSAwKQorICAgIHsKKyAg ICAgIGNvbnN0IGludDMyX3QgKnRhYmxlLCAqaW5kaXJlY3Q7CisgICAgICBjb25zdCB1bnNp Z25lZCBjaGFyICp3ZWlnaHRzLCAqZXh0cmEsICpjcDsKKyAgICAgIHVuc2lnbmVkIGNoYXIg Y2hhcl9idWZbMl07CisgICAgICBpbnQzMl90IGlkeDEsIGlkeDI7CisgICAgICB1bnNpZ25l ZCBpbnQgY2g7CisgICAgICBzaXplX3QgbGVuOworICAgICAgLyogQ2FsY3VsYXRlIHRoZSBp bmRleCBmb3IgZXF1aXZhbGVuY2UgY2xhc3MuICAqLworICAgICAgY3AgPSBuYW1lOworICAg ICAgdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKSBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwg X05MX0NPTExBVEVfVEFCTEVNQik7CisgICAgICB3ZWlnaHRzID0gKGNvbnN0IHVuc2lnbmVk IGNoYXIgKikgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisJCQkJCSAgICAgICBfTkxfQ09M TEFURV9XRUlHSFRNQik7CisgICAgICBleHRyYSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICop IF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorCQkJCQkJICAgX05MX0NPTExBVEVfRVhUUkFN Qik7CisgICAgICBpbmRpcmVjdCA9IChjb25zdCBpbnQzMl90ICopIF9OTF9DVVJSRU5UIChM Q19DT0xMQVRFLAorCQkJCQkJX05MX0NPTExBVEVfSU5ESVJFQ1RNQik7CisgICAgICBpZHgx ID0gZmluZGlkeCAodGFibGUsIGluZGlyZWN0LCBleHRyYSwgJmNwLCAtMSk7CisgICAgICBp ZiAoQkUgKGlkeDEgPT0gMCB8fCAqY3AgIT0gJ1wwJywgMCkpCisJLyogVGhpcyBpc24ndCBh IHZhbGlkIGNoYXJhY3Rlci4gICovCisJcmV0dXJuIFJFR19FQ09MTEFURTsKKworICAgICAg LyogQnVpbGQgc2luZ2xlIGJ5dGUgbWF0Y2hpbmcgdGFibGUgZm9yIHRoaXMgZXF1aXZhbGVu Y2UgY2xhc3MuICAqLworICAgICAgbGVuID0gd2VpZ2h0c1tpZHgxICYgMHhmZmZmZmZdOwor ICAgICAgZm9yIChjaCA9IDA7IGNoIDwgU0JDX01BWDsgKytjaCkKKwl7CisJICBjaGFyX2J1 ZlswXSA9IGNoOworCSAgY3AgPSBjaGFyX2J1ZjsKKwkgIGlkeDIgPSBmaW5kaWR4ICh0YWJs ZSwgaW5kaXJlY3QsIGV4dHJhLCAmY3AsIDEpOworLyoKKwkgIGlkeDIgPSB0YWJsZVtjaF07 CisqLworCSAgaWYgKGlkeDIgPT0gMCkKKwkgICAgLyogVGhpcyBpc24ndCBhIHZhbGlkIGNo YXJhY3Rlci4gICovCisJICAgIGNvbnRpbnVlOworCSAgLyogQ29tcGFyZSBvbmx5IGlmIHRo ZSBsZW5ndGggbWF0Y2hlcyBhbmQgdGhlIGNvbGxhdGlvbiBydWxlCisJICAgICBpbmRleCBp cyB0aGUgc2FtZS4gICovCisJICBpZiAobGVuID09IHdlaWdodHNbaWR4MiAmIDB4ZmZmZmZm XSAmJiAoaWR4MSA+PiAyNCkgPT0gKGlkeDIgPj4gMjQpKQorCSAgICB7CisJICAgICAgaW50 IGNudCA9IDA7CisKKwkgICAgICB3aGlsZSAoY250IDw9IGxlbiAmJgorCQkgICAgIHdlaWdo dHNbKGlkeDEgJiAweGZmZmZmZikgKyAxICsgY250XQorCQkgICAgID09IHdlaWdodHNbKGlk eDIgJiAweGZmZmZmZikgKyAxICsgY250XSkKKwkJKytjbnQ7CisKKwkgICAgICBpZiAoY250 ID4gbGVuKQorCQliaXRzZXRfc2V0IChzYmNzZXQsIGNoKTsKKwkgICAgfQorCX0KKyAgICAg IC8qIENoZWNrIHdoZXRoZXIgdGhlIGFycmF5IGhhcyBlbm91Z2ggc3BhY2UuICAqLworICAg ICAgaWYgKEJFICgqZXF1aXZfY2xhc3NfYWxsb2MgPT0gbWJjc2V0LT5uZXF1aXZfY2xhc3Nl cywgMCkpCisJeworCSAgLyogTm90IGVub3VnaCwgcmVhbGxvYyBpdC4gICovCisJICAvKiAr MSBpbiBjYXNlIG9mIG1iY3NldC0+bmVxdWl2X2NsYXNzZXMgaXMgMC4gICovCisJICBJZHgg bmV3X2VxdWl2X2NsYXNzX2FsbG9jID0gMiAqIG1iY3NldC0+bmVxdWl2X2NsYXNzZXMgKyAx OworCSAgLyogVXNlIHJlYWxsb2Mgc2luY2UgdGhlIGFycmF5IGlzIE5VTEwgaWYgKmFsbG9j ID09IDAuICAqLworCSAgaW50MzJfdCAqbmV3X2VxdWl2X2NsYXNzZXMgPSByZV9yZWFsbG9j IChtYmNzZXQtPmVxdWl2X2NsYXNzZXMsCisJCQkJCQkgICBpbnQzMl90LAorCQkJCQkJICAg bmV3X2VxdWl2X2NsYXNzX2FsbG9jKTsKKwkgIGlmIChCRSAobmV3X2VxdWl2X2NsYXNzZXMg PT0gTlVMTCwgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCSAgbWJjc2V0LT5lcXVp dl9jbGFzc2VzID0gbmV3X2VxdWl2X2NsYXNzZXM7CisJICAqZXF1aXZfY2xhc3NfYWxsb2Mg PSBuZXdfZXF1aXZfY2xhc3NfYWxsb2M7CisJfQorICAgICAgbWJjc2V0LT5lcXVpdl9jbGFz c2VzW21iY3NldC0+bmVxdWl2X2NsYXNzZXMrK10gPSBpZHgxOworICAgIH0KKyAgZWxzZQor I2VuZGlmIC8qIF9MSUJDICovCisgICAgeworICAgICAgaWYgKEJFIChzdHJsZW4gKChjb25z dCBjaGFyICopIG5hbWUpICE9IDEsIDApKQorCXJldHVybiBSRUdfRUNPTExBVEU7CisgICAg ICBiaXRzZXRfc2V0IChzYmNzZXQsICpuYW1lKTsKKyAgICB9CisgIHJldHVybiBSRUdfTk9F UlJPUjsKK30KKworICAvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHBhcnNlX2JyYWNrZXRfZXhw LgorICAgICBCdWlsZCB0aGUgY2hhcmFjdGVyIGNsYXNzIHdoaWNoIGlzIHJlcHJlc2VudGVk IGJ5IE5BTUUuCisgICAgIFRoZSByZXN1bHQgYXJlIHdyaXR0ZW4gdG8gTUJDU0VUIGFuZCBT QkNTRVQuCisgICAgIENIQVJfQ0xBU1NfQUxMT0MgaXMgdGhlIGFsbG9jYXRlZCBzaXplIG9m IG1iY3NldC0+Y2hhcl9jbGFzc2VzLAorICAgICBpcyBhIHBvaW50ZXIgYXJndW1lbnQgc2lu Y2Ugd2UgbWF5IHVwZGF0ZSBpdC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CisjaWZk ZWYgUkVfRU5BQkxFX0kxOE4KK2J1aWxkX2NoYXJjbGFzcyAoUkVfVFJBTlNMQVRFX1RZUEUg dHJhbnMsIGJpdHNldF90IHNiY3NldCwKKwkJIHJlX2NoYXJzZXRfdCAqbWJjc2V0LCBJZHgg KmNoYXJfY2xhc3NfYWxsb2MsCisJCSBjb25zdCBjaGFyICpjbGFzc19uYW1lLCByZWdfc3lu dGF4X3Qgc3ludGF4KQorI2Vsc2UgLyogbm90IFJFX0VOQUJMRV9JMThOICovCitidWlsZF9j aGFyY2xhc3MgKFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLCBiaXRzZXRfdCBzYmNzZXQsCisJ CSBjb25zdCBjaGFyICpjbGFzc19uYW1lLCByZWdfc3ludGF4X3Qgc3ludGF4KQorI2VuZGlm IC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworeworICBpbnQgaTsKKyAgY29uc3QgY2hhciAq bmFtZSA9IGNsYXNzX25hbWU7CisKKyAgLyogSW4gY2FzZSBvZiBSRUdfSUNBU0UgInVwcGVy IiBhbmQgImxvd2VyIiBtYXRjaCB0aGUgYm90aCBvZgorICAgICB1cHBlciBhbmQgbG93ZXIg Y2FzZXMuICAqLworICBpZiAoKHN5bnRheCAmIFJFX0lDQVNFKQorICAgICAgJiYgKHN0cmNt cCAobmFtZSwgInVwcGVyIikgPT0gMCB8fCBzdHJjbXAgKG5hbWUsICJsb3dlciIpID09IDAp KQorICAgIG5hbWUgPSAiYWxwaGEiOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgLyog Q2hlY2sgdGhlIHNwYWNlIG9mIHRoZSBhcnJheXMuICAqLworICBpZiAoQkUgKCpjaGFyX2Ns YXNzX2FsbG9jID09IG1iY3NldC0+bmNoYXJfY2xhc3NlcywgMCkpCisgICAgeworICAgICAg LyogTm90IGVub3VnaCwgcmVhbGxvYyBpdC4gICovCisgICAgICAvKiArMSBpbiBjYXNlIG9m IG1iY3NldC0+bmNoYXJfY2xhc3NlcyBpcyAwLiAgKi8KKyAgICAgIElkeCBuZXdfY2hhcl9j bGFzc19hbGxvYyA9IDIgKiBtYmNzZXQtPm5jaGFyX2NsYXNzZXMgKyAxOworICAgICAgLyog VXNlIHJlYWxsb2Mgc2luY2UgYXJyYXkgaXMgTlVMTCBpZiAqYWxsb2MgPT0gMC4gICovCisg ICAgICB3Y3R5cGVfdCAqbmV3X2NoYXJfY2xhc3NlcyA9IHJlX3JlYWxsb2MgKG1iY3NldC0+ Y2hhcl9jbGFzc2VzLCB3Y3R5cGVfdCwKKwkJCQkJICAgICAgIG5ld19jaGFyX2NsYXNzX2Fs bG9jKTsKKyAgICAgIGlmIChCRSAobmV3X2NoYXJfY2xhc3NlcyA9PSBOVUxMLCAwKSkKKwly ZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIG1iY3NldC0+Y2hhcl9jbGFzc2VzID0gbmV3X2No YXJfY2xhc3NlczsKKyAgICAgICpjaGFyX2NsYXNzX2FsbG9jID0gbmV3X2NoYXJfY2xhc3Nf YWxsb2M7CisgICAgfQorICBtYmNzZXQtPmNoYXJfY2xhc3Nlc1ttYmNzZXQtPm5jaGFyX2Ns YXNzZXMrK10gPSBfX3djdHlwZSAobmFtZSk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4g Ki8KKworI2RlZmluZSBCVUlMRF9DSEFSQ0xBU1NfTE9PUChjdHlwZV9mdW5jKQlcCisgIGRv IHsJCQkJCQlcCisgICAgaWYgKEJFICh0cmFucyAhPSBOVUxMLCAwKSkJCQlcCisgICAgICB7 CQkJCQkJXAorCWZvciAoaSA9IDA7IGkgPCBTQkNfTUFYOyArK2kpCQlcCisJICBpZiAoY3R5 cGVfZnVuYyAoaSkpCQkJXAorCSAgICBiaXRzZXRfc2V0IChzYmNzZXQsIHRyYW5zW2ldKTsJ XAorICAgICAgfQkJCQkJCVwKKyAgICBlbHNlCQkJCQlcCisgICAgICB7CQkJCQkJXAorCWZv ciAoaSA9IDA7IGkgPCBTQkNfTUFYOyArK2kpCQlcCisJICBpZiAoY3R5cGVfZnVuYyAoaSkp CQkJXAorCSAgICBiaXRzZXRfc2V0IChzYmNzZXQsIGkpOwkJXAorICAgICAgfQkJCQkJCVwK KyAgfSB3aGlsZSAoMCkKKworICBpZiAoc3RyY21wIChuYW1lLCAiYWxudW0iKSA9PSAwKQor ICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc2FsbnVtKTsKKyAgZWxzZSBpZiAoc3RyY21w IChuYW1lLCAiY250cmwiKSA9PSAwKQorICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc2Nu dHJsKTsKKyAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAibG93ZXIiKSA9PSAwKQorICAgIEJV SUxEX0NIQVJDTEFTU19MT09QIChpc2xvd2VyKTsKKyAgZWxzZSBpZiAoc3RyY21wIChuYW1l LCAic3BhY2UiKSA9PSAwKQorICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc3NwYWNlKTsK KyAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiYWxwaGEiKSA9PSAwKQorICAgIEJVSUxEX0NI QVJDTEFTU19MT09QIChpc2FscGhhKTsKKyAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiZGln aXQiKSA9PSAwKQorICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc2RpZ2l0KTsKKyAgZWxz ZSBpZiAoc3RyY21wIChuYW1lLCAicHJpbnQiKSA9PSAwKQorICAgIEJVSUxEX0NIQVJDTEFT U19MT09QIChpc3ByaW50KTsKKyAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAidXBwZXIiKSA9 PSAwKQorICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc3VwcGVyKTsKKyAgZWxzZSBpZiAo c3RyY21wIChuYW1lLCAiYmxhbmsiKSA9PSAwKQorICAgIEJVSUxEX0NIQVJDTEFTU19MT09Q IChpc2JsYW5rKTsKKyAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiZ3JhcGgiKSA9PSAwKQor ICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc2dyYXBoKTsKKyAgZWxzZSBpZiAoc3RyY21w IChuYW1lLCAicHVuY3QiKSA9PSAwKQorICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc3B1 bmN0KTsKKyAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAieGRpZ2l0IikgPT0gMCkKKyAgICBC VUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXN4ZGlnaXQpOworICBlbHNlCisgICAgcmV0dXJuIFJF R19FQ1RZUEU7CisKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgYmluX3Ry ZWVfdCAqCitidWlsZF9jaGFyY2xhc3Nfb3AgKHJlX2RmYV90ICpkZmEsIFJFX1RSQU5TTEFU RV9UWVBFIHRyYW5zLAorCQkgICAgY29uc3QgY2hhciAqY2xhc3NfbmFtZSwKKwkJICAgIGNv bnN0IGNoYXIgKmV4dHJhLCBib29sIG5vbl9tYXRjaCwKKwkJICAgIHJlZ19lcnJjb2RlX3Qg KmVycikKK3sKKyAgcmVfYml0c2V0X3B0cl90IHNiY3NldDsKKyNpZmRlZiBSRV9FTkFCTEVf STE4TgorICByZV9jaGFyc2V0X3QgKm1iY3NldDsKKyAgSWR4IGFsbG9jID0gMDsKKyNlbmRp ZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgcmVnX2VycmNvZGVfdCByZXQ7CisgIHJl X3Rva2VuX3QgYnJfdG9rZW47CisgIGJpbl90cmVlX3QgKnRyZWU7CisKKyAgc2Jjc2V0ID0g KHJlX2JpdHNldF9wdHJfdCkgY2FsbG9jIChzaXplb2YgKGJpdHNldF90KSwgMSk7CisgIGlm IChCRSAoc2Jjc2V0ID09IE5VTEwsIDApKQorICAgIHsKKyAgICAgICplcnIgPSBSRUdfRVNQ QUNFOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorI2lmZGVmIFJFX0VOQUJMRV9JMThO CisgIG1iY3NldCA9IChyZV9jaGFyc2V0X3QgKikgY2FsbG9jIChzaXplb2YgKHJlX2NoYXJz ZXRfdCksIDEpOworICBpZiAoQkUgKG1iY3NldCA9PSBOVUxMLCAwKSkKKyAgICB7CisgICAg ICByZV9mcmVlIChzYmNzZXQpOworICAgICAgKmVyciA9IFJFR19FU1BBQ0U7CisgICAgICBy ZXR1cm4gTlVMTDsKKyAgICB9CisgIG1iY3NldC0+bm9uX21hdGNoID0gbm9uX21hdGNoOwor I2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKKyAgLyogV2UgZG9uJ3QgY2FyZSB0aGUg c3ludGF4IGluIHRoaXMgY2FzZS4gICovCisgIHJldCA9IGJ1aWxkX2NoYXJjbGFzcyAodHJh bnMsIHNiY3NldCwKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCQkJIG1iY3NldCwgJmFsbG9j LAorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisJCQkgY2xhc3NfbmFtZSwgMCk7CisK KyAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHsKKyAgICAgIHJlX2Zy ZWUgKHNiY3NldCk7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGZyZWVfY2hhcnNl dCAobWJjc2V0KTsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworICAgICAgKmVyciA9 IHJldDsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgLyogXHcgbWF0Y2ggJ18nIGFs c28uICAqLworICBmb3IgKDsgKmV4dHJhOyBleHRyYSsrKQorICAgIGJpdHNldF9zZXQgKHNi Y3NldCwgKmV4dHJhKTsKKworICAvKiBJZiBpdCBpcyBub24tbWF0Y2hpbmcgbGlzdC4gICov CisgIGlmIChub25fbWF0Y2gpCisgICAgYml0c2V0X25vdCAoc2Jjc2V0KTsKKworI2lmZGVm IFJFX0VOQUJMRV9JMThOCisgIC8qIEVuc3VyZSBvbmx5IHNpbmdsZSBieXRlIGNoYXJhY3Rl cnMgYXJlIHNldC4gICovCisgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorICAgIGJpdHNl dF9tYXNrIChzYmNzZXQsIGRmYS0+c2JfY2hhcik7CisjZW5kaWYKKworICAvKiBCdWlsZCBh IHRyZWUgZm9yIHNpbXBsZSBicmFja2V0LiAgKi8KKyNpZiBkZWZpbmVkIEdDQ19MSU5UIHx8 IGRlZmluZWQgbGludAorICBtZW1zZXQgKCZicl90b2tlbiwgMCwgc2l6ZW9mIGJyX3Rva2Vu KTsKKyNlbmRpZgorICBicl90b2tlbi50eXBlID0gU0lNUExFX0JSQUNLRVQ7CisgIGJyX3Rv a2VuLm9wci5zYmNzZXQgPSBzYmNzZXQ7CisgIHRyZWUgPSBjcmVhdGVfdG9rZW5fdHJlZSAo ZGZhLCBOVUxMLCBOVUxMLCAmYnJfdG9rZW4pOworICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwg MCkpCisgICAgZ290byBidWlsZF93b3JkX29wX2VzcGFjZTsKKworI2lmZGVmIFJFX0VOQUJM RV9JMThOCisgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorICAgIHsKKyAgICAgIGJpbl90 cmVlX3QgKm1iY190cmVlOworICAgICAgLyogQnVpbGQgYSB0cmVlIGZvciBjb21wbGV4IGJy YWNrZXQuICAqLworICAgICAgYnJfdG9rZW4udHlwZSA9IENPTVBMRVhfQlJBQ0tFVDsKKyAg ICAgIGJyX3Rva2VuLm9wci5tYmNzZXQgPSBtYmNzZXQ7CisgICAgICBkZmEtPmhhc19tYl9u b2RlID0gMTsKKyAgICAgIG1iY190cmVlID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVM TCwgTlVMTCwgJmJyX3Rva2VuKTsKKyAgICAgIGlmIChCRSAobWJjX3RyZWUgPT0gTlVMTCwg MCkpCisJZ290byBidWlsZF93b3JkX29wX2VzcGFjZTsKKyAgICAgIC8qIFRoZW4gam9pbiB0 aGVtIGJ5IEFMVCBub2RlLiAgKi8KKyAgICAgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0 cmVlLCBtYmNfdHJlZSwgT1BfQUxUKTsKKyAgICAgIGlmIChCRSAobWJjX3RyZWUgIT0gTlVM TCwgMSkpCisJcmV0dXJuIHRyZWU7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZnJl ZV9jaGFyc2V0IChtYmNzZXQpOworICAgICAgcmV0dXJuIHRyZWU7CisgICAgfQorI2Vsc2Ug Lyogbm90IFJFX0VOQUJMRV9JMThOICovCisgIHJldHVybiB0cmVlOworI2VuZGlmIC8qIG5v dCBSRV9FTkFCTEVfSTE4TiAqLworCisgYnVpbGRfd29yZF9vcF9lc3BhY2U6CisgIHJlX2Zy ZWUgKHNiY3NldCk7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgZnJlZV9jaGFyc2V0ICht YmNzZXQpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICplcnIgPSBSRUdfRVNQ QUNFOworICByZXR1cm4gTlVMTDsKK30KKworLyogVGhpcyBpcyBpbnRlbmRlZCBmb3IgdGhl IGV4cHJlc3Npb25zIGxpa2UgImF7MSwzfSIuCisgICBGZXRjaCBhIG51bWJlciBmcm9tICdp bnB1dCcsIGFuZCByZXR1cm4gdGhlIG51bWJlci4KKyAgIFJldHVybiAtMSBpZiB0aGUgbnVt YmVyIGZpZWxkIGlzIGVtcHR5IGxpa2UgInssMX0iLgorICAgUmV0dXJuIFJFX0RVUF9NQVgg KyAxIGlmIHRoZSBudW1iZXIgZmllbGQgaXMgdG9vIGxhcmdlLgorICAgUmV0dXJuIC0yIGlm IGFuIGVycm9yIG9jY3VycmVkLiAgKi8KKworc3RhdGljIElkeAorZmV0Y2hfbnVtYmVyIChy ZV9zdHJpbmdfdCAqaW5wdXQsIHJlX3Rva2VuX3QgKnRva2VuLCByZWdfc3ludGF4X3Qgc3lu dGF4KQoreworICBJZHggbnVtID0gLTE7CisgIHVuc2lnbmVkIGNoYXIgYzsKKyAgd2hpbGUg KDEpCisgICAgeworICAgICAgZmV0Y2hfdG9rZW4gKHRva2VuLCBpbnB1dCwgc3ludGF4KTsK KyAgICAgIGMgPSB0b2tlbi0+b3ByLmM7CisgICAgICBpZiAoQkUgKHRva2VuLT50eXBlID09 IEVORF9PRl9SRSwgMCkpCisJcmV0dXJuIC0yOworICAgICAgaWYgKHRva2VuLT50eXBlID09 IE9QX0NMT1NFX0RVUF9OVU0gfHwgYyA9PSAnLCcpCisJYnJlYWs7CisgICAgICBudW0gPSAo KHRva2VuLT50eXBlICE9IENIQVJBQ1RFUiB8fCBjIDwgJzAnIHx8ICc5JyA8IGMgfHwgbnVt ID09IC0yKQorCSAgICAgPyAtMgorCSAgICAgOiBudW0gPT0gLTEKKwkgICAgID8gYyAtICcw JworCSAgICAgOiBNSU4gKFJFX0RVUF9NQVggKyAxLCBudW0gKiAxMCArIGMgLSAnMCcpKTsK KyAgICB9CisgIHJldHVybiBudW07Cit9CisMCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3N0 YXRpYyB2b2lkCitmcmVlX2NoYXJzZXQgKHJlX2NoYXJzZXRfdCAqY3NldCkKK3sKKyAgcmVf ZnJlZSAoY3NldC0+bWJjaGFycyk7CisjIGlmZGVmIF9MSUJDCisgIHJlX2ZyZWUgKGNzZXQt PmNvbGxfc3ltcyk7CisgIHJlX2ZyZWUgKGNzZXQtPmVxdWl2X2NsYXNzZXMpOworICByZV9m cmVlIChjc2V0LT5yYW5nZV9zdGFydHMpOworICByZV9mcmVlIChjc2V0LT5yYW5nZV9lbmRz KTsKKyMgZW5kaWYKKyAgcmVfZnJlZSAoY3NldC0+Y2hhcl9jbGFzc2VzKTsKKyAgcmVfZnJl ZSAoY3NldCk7Cit9CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwwKKy8qIEZ1bmN0 aW9ucyBmb3IgYmluYXJ5IHRyZWUgb3BlcmF0aW9uLiAgKi8KKworLyogQ3JlYXRlIGEgdHJl ZSBub2RlLiAgKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorY3JlYXRlX3RyZWUgKHJlX2Rm YV90ICpkZmEsIGJpbl90cmVlX3QgKmxlZnQsIGJpbl90cmVlX3QgKnJpZ2h0LAorCSAgICAg cmVfdG9rZW5fdHlwZV90IHR5cGUpCit7CisgIHJlX3Rva2VuX3QgdDsKKyNpZiBkZWZpbmVk IEdDQ19MSU5UIHx8IGRlZmluZWQgbGludAorICBtZW1zZXQgKCZ0LCAwLCBzaXplb2YgdCk7 CisjZW5kaWYKKyAgdC50eXBlID0gdHlwZTsKKyAgcmV0dXJuIGNyZWF0ZV90b2tlbl90cmVl IChkZmEsIGxlZnQsIHJpZ2h0LCAmdCk7Cit9CisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK2Ny ZWF0ZV90b2tlbl90cmVlIChyZV9kZmFfdCAqZGZhLCBiaW5fdHJlZV90ICpsZWZ0LCBiaW5f dHJlZV90ICpyaWdodCwKKwkJICAgY29uc3QgcmVfdG9rZW5fdCAqdG9rZW4pCit7CisgIGJp bl90cmVlX3QgKnRyZWU7CisgIGlmIChCRSAoZGZhLT5zdHJfdHJlZV9zdG9yYWdlX2lkeCA9 PSBCSU5fVFJFRV9TVE9SQUdFX1NJWkUsIDApKQorICAgIHsKKyAgICAgIGJpbl90cmVlX3N0 b3JhZ2VfdCAqc3RvcmFnZSA9IHJlX21hbGxvYyAoYmluX3RyZWVfc3RvcmFnZV90LCAxKTsK KworICAgICAgaWYgKHN0b3JhZ2UgPT0gTlVMTCkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIHN0 b3JhZ2UtPm5leHQgPSBkZmEtPnN0cl90cmVlX3N0b3JhZ2U7CisgICAgICBkZmEtPnN0cl90 cmVlX3N0b3JhZ2UgPSBzdG9yYWdlOworICAgICAgZGZhLT5zdHJfdHJlZV9zdG9yYWdlX2lk eCA9IDA7CisgICAgfQorICB0cmVlID0gJmRmYS0+c3RyX3RyZWVfc3RvcmFnZS0+ZGF0YVtk ZmEtPnN0cl90cmVlX3N0b3JhZ2VfaWR4KytdOworCisgIHRyZWUtPnBhcmVudCA9IE5VTEw7 CisgIHRyZWUtPmxlZnQgPSBsZWZ0OworICB0cmVlLT5yaWdodCA9IHJpZ2h0OworICB0cmVl LT50b2tlbiA9ICp0b2tlbjsKKyAgdHJlZS0+dG9rZW4uZHVwbGljYXRlZCA9IDA7CisgIHRy ZWUtPnRva2VuLm9wdF9zdWJleHAgPSAwOworICB0cmVlLT5maXJzdCA9IE5VTEw7CisgIHRy ZWUtPm5leHQgPSBOVUxMOworICB0cmVlLT5ub2RlX2lkeCA9IC0xOworCisgIGlmIChsZWZ0 ICE9IE5VTEwpCisgICAgbGVmdC0+cGFyZW50ID0gdHJlZTsKKyAgaWYgKHJpZ2h0ICE9IE5V TEwpCisgICAgcmlnaHQtPnBhcmVudCA9IHRyZWU7CisgIHJldHVybiB0cmVlOworfQorCisv KiBNYXJrIHRoZSB0cmVlIFNSQyBhcyBhbiBvcHRpb25hbCBzdWJleHByZXNzaW9uLgorICAg VG8gYmUgY2FsbGVkIGZyb20gcHJlb3JkZXIgb3IgcG9zdG9yZGVyLiAgKi8KKworc3RhdGlj IHJlZ19lcnJjb2RlX3QKK21hcmtfb3B0X3N1YmV4cCAodm9pZCAqZXh0cmEsIGJpbl90cmVl X3QgKm5vZGUpCit7CisgIElkeCBpZHggPSAodWludHB0cl90KSBleHRyYTsKKyAgaWYgKG5v ZGUtPnRva2VuLnR5cGUgPT0gU1VCRVhQICYmIG5vZGUtPnRva2VuLm9wci5pZHggPT0gaWR4 KQorICAgIG5vZGUtPnRva2VuLm9wdF9zdWJleHAgPSAxOworCisgIHJldHVybiBSRUdfTk9F UlJPUjsKK30KKworLyogRnJlZSB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpbnNpZGUgTk9ERS4g Ki8KKworc3RhdGljIHZvaWQKK2ZyZWVfdG9rZW4gKHJlX3Rva2VuX3QgKm5vZGUpCit7Cisj aWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKG5vZGUtPnR5cGUgPT0gQ09NUExFWF9CUkFD S0VUICYmIG5vZGUtPmR1cGxpY2F0ZWQgPT0gMCkKKyAgICBmcmVlX2NoYXJzZXQgKG5vZGUt Pm9wci5tYmNzZXQpOworICBlbHNlCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAg ICBpZiAobm9kZS0+dHlwZSA9PSBTSU1QTEVfQlJBQ0tFVCAmJiBub2RlLT5kdXBsaWNhdGVk ID09IDApCisgICAgICByZV9mcmVlIChub2RlLT5vcHIuc2Jjc2V0KTsKK30KKworLyogV29y a2VyIGZ1bmN0aW9uIGZvciB0cmVlIHdhbGtpbmcuICBGcmVlIHRoZSBhbGxvY2F0ZWQgbWVt b3J5IGluc2lkZSBOT0RFCisgICBhbmQgaXRzIGNoaWxkcmVuLiAqLworCitzdGF0aWMgcmVn X2VycmNvZGVfdAorZnJlZV90cmVlICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSkK K3sKKyAgZnJlZV90b2tlbiAoJm5vZGUtPnRva2VuKTsKKyAgcmV0dXJuIFJFR19OT0VSUk9S OworfQorCisKKy8qIER1cGxpY2F0ZSB0aGUgbm9kZSBTUkMsIGFuZCByZXR1cm4gbmV3IG5v ZGUuICBUaGlzIGlzIGEgcHJlb3JkZXIKKyAgIHZpc2l0IHNpbWlsYXIgdG8gdGhlIG9uZSBp bXBsZW1lbnRlZCBieSB0aGUgZ2VuZXJpYyB2aXNpdG9yLCBidXQKKyAgIHdlIG5lZWQgbW9y ZSBpbmZyYXN0cnVjdHVyZSB0byBtYWludGFpbiB0d28gcGFyYWxsZWwgdHJlZXMgLS0tIHNv LAorICAgaXQncyBlYXNpZXIgdG8gZHVwbGljYXRlLiAgKi8KKworc3RhdGljIGJpbl90cmVl X3QgKgorZHVwbGljYXRlX3RyZWUgKGNvbnN0IGJpbl90cmVlX3QgKnJvb3QsIHJlX2RmYV90 ICpkZmEpCit7CisgIGNvbnN0IGJpbl90cmVlX3QgKm5vZGU7CisgIGJpbl90cmVlX3QgKmR1 cF9yb290OworICBiaW5fdHJlZV90ICoqcF9uZXcgPSAmZHVwX3Jvb3QsICpkdXBfbm9kZSA9 IHJvb3QtPnBhcmVudDsKKworICBmb3IgKG5vZGUgPSByb290OyA7ICkKKyAgICB7CisgICAg ICAvKiBDcmVhdGUgYSBuZXcgdHJlZSBhbmQgbGluayBpdCBiYWNrIHRvIHRoZSBjdXJyZW50 IHBhcmVudC4gICovCisgICAgICAqcF9uZXcgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBO VUxMLCBOVUxMLCAmbm9kZS0+dG9rZW4pOworICAgICAgaWYgKCpwX25ldyA9PSBOVUxMKQor CXJldHVybiBOVUxMOworICAgICAgKCpwX25ldyktPnBhcmVudCA9IGR1cF9ub2RlOworICAg ICAgKCpwX25ldyktPnRva2VuLmR1cGxpY2F0ZWQgPSAxOworICAgICAgZHVwX25vZGUgPSAq cF9uZXc7CisKKyAgICAgIC8qIEdvIHRvIHRoZSBsZWZ0IG5vZGUsIG9yIHVwIGFuZCB0byB0 aGUgcmlnaHQuICAqLworICAgICAgaWYgKG5vZGUtPmxlZnQpCisJeworCSAgbm9kZSA9IG5v ZGUtPmxlZnQ7CisJICBwX25ldyA9ICZkdXBfbm9kZS0+bGVmdDsKKwl9CisgICAgICBlbHNl CisJeworCSAgY29uc3QgYmluX3RyZWVfdCAqcHJldiA9IE5VTEw7CisJICB3aGlsZSAobm9k ZS0+cmlnaHQgPT0gcHJldiB8fCBub2RlLT5yaWdodCA9PSBOVUxMKQorCSAgICB7CisJICAg ICAgcHJldiA9IG5vZGU7CisJICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudDsKKwkgICAgICBk dXBfbm9kZSA9IGR1cF9ub2RlLT5wYXJlbnQ7CisJICAgICAgaWYgKCFub2RlKQorCQlyZXR1 cm4gZHVwX3Jvb3Q7CisJICAgIH0KKwkgIG5vZGUgPSBub2RlLT5yaWdodDsKKwkgIHBfbmV3 ID0gJmR1cF9ub2RlLT5yaWdodDsKKwl9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbGliL3Jl Z2V4LmMgYi9saWIvcmVnZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi40OTllMWYwZTAzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3JlZ2V4LmMKQEAgLTAs MCArMSw4MSBAQAorLyogRXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGFu ZCBzZWFyY2ggbGlicmFyeS4KKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDE4IEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdO VSBDIExpYnJhcnkuCisgICBDb250cmlidXRlZCBieSBJc2FtdSBIYXNlZ2F3YSA8aXNhbXVA eWFtYXRvLmlibS5jb20+LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZSBHTlUKKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5v dCwgc2VlCisgICA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lm bmRlZiBfTElCQworIyBpbmNsdWRlIDxjb25maWcuaD4KKworIyBpZiAoX19HTlVDX18gPT0g NCAmJiA2IDw9IF9fR05VQ19NSU5PUl9fKSB8fCA0IDwgX19HTlVDX18KKyMgIHByYWdtYSBH Q0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3N1Z2dlc3QtYXR0cmlidXRlPXB1cmUiCisjIGVu ZGlmCisjIGlmIChfX0dOVUNfXyA9PSA0ICYmIDMgPD0gX19HTlVDX01JTk9SX18pIHx8IDQg PCBfX0dOVUNfXworIyAgcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xb2xkLXN0 eWxlLWRlZmluaXRpb24iCisjICBwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd0 eXBlLWxpbWl0cyIKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBNYWtlIHN1cmUgbm8gb25lIGNv bXBpbGVzIHRoaXMgY29kZSB3aXRoIGEgQysrIGNvbXBpbGVyLiAgKi8KKyNpZiBkZWZpbmVk IF9fY3BsdXNwbHVzICYmIGRlZmluZWQgX0xJQkMKKyMgZXJyb3IgIlRoaXMgaXMgQyBjb2Rl LCB1c2UgYSBDIGNvbXBpbGVyIgorI2VuZGlmCisKKyNpZmRlZiBfTElCQworLyogV2UgaGF2 ZSB0byBrZWVwIHRoZSBuYW1lc3BhY2UgY2xlYW4uICAqLworIyBkZWZpbmUgcmVnZnJlZShw cmVnKSBfX3JlZ2ZyZWUgKHByZWcpCisjIGRlZmluZSByZWdleGVjKHByLCBzdCwgbm0sIHBt LCBlZikgX19yZWdleGVjIChwciwgc3QsIG5tLCBwbSwgZWYpCisjIGRlZmluZSByZWdjb21w KHByZWcsIHBhdHRlcm4sIGNmbGFncykgX19yZWdjb21wIChwcmVnLCBwYXR0ZXJuLCBjZmxh Z3MpCisjIGRlZmluZSByZWdlcnJvcihlcnJjb2RlLCBwcmVnLCBlcnJidWYsIGVycmJ1Zl9z aXplKSBcCisJX19yZWdlcnJvcihlcnJjb2RlLCBwcmVnLCBlcnJidWYsIGVycmJ1Zl9zaXpl KQorIyBkZWZpbmUgcmVfc2V0X3JlZ2lzdGVycyhidSwgcmUsIG51LCBzdCwgZW4pIFwKKwlf X3JlX3NldF9yZWdpc3RlcnMgKGJ1LCByZSwgbnUsIHN0LCBlbikKKyMgZGVmaW5lIHJlX21h dGNoXzIoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyLCBwb3MsIHJlZ3Ms IHN0b3ApIFwKKwlfX3JlX21hdGNoXzIgKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcy LCBzaXplMiwgcG9zLCByZWdzLCBzdG9wKQorIyBkZWZpbmUgcmVfbWF0Y2goYnVmcCwgc3Ry aW5nLCBzaXplLCBwb3MsIHJlZ3MpIFwKKwlfX3JlX21hdGNoIChidWZwLCBzdHJpbmcsIHNp emUsIHBvcywgcmVncykKKyMgZGVmaW5lIHJlX3NlYXJjaChidWZwLCBzdHJpbmcsIHNpemUs IHN0YXJ0cG9zLCByYW5nZSwgcmVncykgXAorCV9fcmVfc2VhcmNoIChidWZwLCBzdHJpbmcs IHNpemUsIHN0YXJ0cG9zLCByYW5nZSwgcmVncykKKyMgZGVmaW5lIHJlX2NvbXBpbGVfcGF0 dGVybihwYXR0ZXJuLCBsZW5ndGgsIGJ1ZnApIFwKKwlfX3JlX2NvbXBpbGVfcGF0dGVybiAo cGF0dGVybiwgbGVuZ3RoLCBidWZwKQorIyBkZWZpbmUgcmVfc2V0X3N5bnRheChzeW50YXgp IF9fcmVfc2V0X3N5bnRheCAoc3ludGF4KQorIyBkZWZpbmUgcmVfc2VhcmNoXzIoYnVmcCwg c3QxLCBzMSwgc3QyLCBzMiwgc3RhcnRwb3MsIHJhbmdlLCByZWdzLCBzdG9wKSBcCisJX19y ZV9zZWFyY2hfMiAoYnVmcCwgc3QxLCBzMSwgc3QyLCBzMiwgc3RhcnRwb3MsIHJhbmdlLCBy ZWdzLCBzdG9wKQorIyBkZWZpbmUgcmVfY29tcGlsZV9mYXN0bWFwKGJ1ZnApIF9fcmVfY29t cGlsZV9mYXN0bWFwIChidWZwKQorCisjIGluY2x1ZGUgIi4uL2xvY2FsZS9sb2NhbGVpbmZv LmgiCisjZW5kaWYKKworLyogT24gc29tZSBzeXN0ZW1zLCBsaW1pdHMuaCBzZXRzIFJFX0RV UF9NQVggdG8gYSBsb3dlciB2YWx1ZSB0aGFuCisgICBHTlUgcmVnZXggYWxsb3dzLiAgSW5j bHVkZSBpdCBiZWZvcmUgPHJlZ2V4Lmg+LCB3aGljaCBjb3JyZWN0bHkKKyAgICN1bmRlZnMg UkVfRFVQX01BWCBhbmQgc2V0cyBpdCB0byB0aGUgcmlnaHQgdmFsdWUuICAqLworI2luY2x1 ZGUgPGxpbWl0cy5oPgorCisjaW5jbHVkZSA8cmVnZXguaD4KKyNpbmNsdWRlICJyZWdleF9p bnRlcm5hbC5oIgorCisjaW5jbHVkZSAicmVnZXhfaW50ZXJuYWwuYyIKKyNpbmNsdWRlICJy ZWdjb21wLmMiCisjaW5jbHVkZSAicmVnZXhlYy5jIgorCisvKiBCaW5hcnkgYmFja3dhcmQg Y29tcGF0aWJpbGl0eS4gICovCisjaWYgX0xJQkMKKyMgaW5jbHVkZSA8c2hsaWItY29tcGF0 Lmg+CisjIGlmIFNITElCX0NPTVBBVCAobGliYywgR0xJQkNfMl8wLCBHTElCQ18yXzMpCits aW5rX3dhcm5pbmcgKHJlX21heF9mYWlsdXJlcywgInRoZSAncmVfbWF4X2ZhaWx1cmVzJyB2 YXJpYWJsZSBpcyBvYnNvbGV0ZSBhbmQgd2lsbCBnbyBhd2F5LiIpCitpbnQgcmVfbWF4X2Zh aWx1cmVzID0gMjAwMDsKKyMgZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3JlZ2V4 LmggYi9saWIvcmVnZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5mMmFjOTUwN2FkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3JlZ2V4LmgKQEAgLTAsMCAr MSw2NTggQEAKKy8qIERlZmluaXRpb25zIGZvciBkYXRhIHN0cnVjdHVyZXMgYW5kIHJvdXRp bmVzIGZvciB0aGUgcmVndWxhcgorICAgZXhwcmVzc2lvbiBsaWJyYXJ5LgorICAgQ29weXJp Z2h0IChDKSAxOTg1LCAxOTg5LTIwMTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhl IEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBv ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMg TGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3 aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAgPGh0dHBzOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX1JFR0VYX0gKKyNkZWZpbmUgX1JF R0VYX0ggMQorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIEFsbG93IHRoZSB1c2Ug aW4gQysrIGNvZGUuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNl bmRpZgorCisvKiBEZWZpbmUgX19VU0VfR05VIHRvIGRlY2xhcmUgR05VIGV4dGVuc2lvbnMg dGhhdCB2aW9sYXRlIHRoZQorICAgUE9TSVggbmFtZSBzcGFjZSBydWxlcy4gICovCisjaWZk ZWYgX0dOVV9TT1VSQ0UKKyMgZGVmaW5lIF9fVVNFX0dOVSAxCisjZW5kaWYKKworI2lmZGVm IF9SRUdFWF9MQVJHRV9PRkZTRVRTCisKKy8qIFVzZSB0eXBlcyBhbmQgdmFsdWVzIHRoYXQg YXJlIHdpZGUgZW5vdWdoIHRvIHJlcHJlc2VudCBzaWduZWQgYW5kCisgICB1bnNpZ25lZCBi eXRlIG9mZnNldHMgaW4gbWVtb3J5LiAgVGhpcyBjdXJyZW50bHkgd29ya3Mgb25seSB3aGVu CisgICB0aGUgcmVnZXggY29kZSBpcyB1c2VkIG91dHNpZGUgb2YgdGhlIEdOVSBDIGxpYnJh cnk7IGl0IGlzIG5vdCB5ZXQKKyAgIHN1cHBvcnRlZCB3aXRoaW4gZ2xpYmMgaXRzZWxmLCBh bmQgZ2xpYmMgdXNlcnMgc2hvdWxkIG5vdCBkZWZpbmUKKyAgIF9SRUdFWF9MQVJHRV9PRkZT RVRTLiAgKi8KKworLyogVGhlIHR5cGUgb2Ygb2JqZWN0IHNpemVzLiAgKi8KK3R5cGVkZWYg c2l6ZV90IF9fcmVfc2l6ZV90OworCisvKiBUaGUgdHlwZSBvZiBvYmplY3Qgc2l6ZXMsIGlu IHBsYWNlcyB3aGVyZSB0aGUgdHJhZGl0aW9uYWwgY29kZQorICAgdXNlcyB1bnNpZ25lZCBs b25nIGludC4gICovCit0eXBlZGVmIHNpemVfdCBfX3JlX2xvbmdfc2l6ZV90OworCisjZWxz ZQorCisvKiBUaGUgdHJhZGl0aW9uYWwgR05VIHJlZ2V4IGltcGxlbWVudGF0aW9uIG1pc2hh bmRsZXMgc3RyaW5ncyBsb25nZXIKKyAgIHRoYW4gSU5UX01BWC4gICovCit0eXBlZGVmIHVu c2lnbmVkIGludCBfX3JlX3NpemVfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX19y ZV9sb25nX3NpemVfdDsKKworI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgdHdvIHR5cGVz IGhhdmUgdG8gYmUgc2lnbmVkIGFuZCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUKKyAgIHdpZGUg ZW5vdWdoIHRvIGhvbGQgYSB2YWx1ZSBvZiBhIHBvaW50ZXIuICBGb3IgbW9zdCBBTlNJIGNv bXBpbGVycworICAgcHRyZGlmZl90IGFuZCBzaXplX3Qgc2hvdWxkIGJlIGxpa2VseSBPSy4g IFN0aWxsIHNpemUgb2YgdGhlc2UgdHdvCisgICB0eXBlcyBpcyAyIGZvciBNaWNyb3NvZnQg Qy4gIFVnaC4uLiAqLwordHlwZWRlZiBsb25nIGludCBzX3JlZ190OwordHlwZWRlZiB1bnNp Z25lZCBsb25nIGludCBhY3RpdmVfcmVnX3Q7CisKKy8qIFRoZSBmb2xsb3dpbmcgYml0cyBh cmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJlZ2V4cCBzeW50YXggd2UKKyAgIHJlY29nbml6 ZS4gIFRoZSBzZXQvbm90LXNldCBtZWFuaW5ncyBhcmUgY2hvc2VuIHNvIHRoYXQgRW1hY3Mg c3ludGF4CisgICByZW1haW5zIHRoZSB2YWx1ZSAwLiAgVGhlIGJpdHMgYXJlIGdpdmVuIGlu IGFscGhhYmV0aWNhbCBvcmRlciwgYW5kCisgICB0aGUgZGVmaW5pdGlvbnMgc2hpZnRlZCBi eSBvbmUgZnJvbSB0aGUgcHJldmlvdXMgYml0OyB0aHVzLCB3aGVuIHdlCisgICBhZGQgb3Ig cmVtb3ZlIGEgYml0LCBvbmx5IG9uZSBvdGhlciBkZWZpbml0aW9uIG5lZWQgY2hhbmdlLiAg Ki8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcmVnX3N5bnRheF90OworCisjaWZkZWYg X19VU0VfR05VCisvKiBJZiB0aGlzIGJpdCBpcyBub3Qgc2V0LCB0aGVuIFwgaW5zaWRlIGEg YnJhY2tldCBleHByZXNzaW9uIGlzIGxpdGVyYWwuCisgICBJZiBzZXQsIHRoZW4gc3VjaCBh IFwgcXVvdGVzIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyLiAgKi8KKyMgZGVmaW5lIFJFX0JB Q0tTTEFTSF9FU0NBUEVfSU5fTElTVFMgKCh1bnNpZ25lZCBsb25nIGludCkgMSkKKworLyog SWYgdGhpcyBiaXQgaXMgbm90IHNldCwgdGhlbiArIGFuZCA/IGFyZSBvcGVyYXRvcnMsIGFu ZCBcKyBhbmQgXD8gYXJlCisgICAgIGxpdGVyYWxzLgorICAgSWYgc2V0LCB0aGVuIFwrIGFu ZCBcPyBhcmUgb3BlcmF0b3JzIGFuZCArIGFuZCA/IGFyZSBsaXRlcmFscy4gICovCisjIGRl ZmluZSBSRV9CS19QTFVTX1FNIChSRV9CQUNLU0xBU0hfRVNDQVBFX0lOX0xJU1RTIDw8IDEp CisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBjaGFyYWN0ZXIgY2xhc3NlcyBhcmUg c3VwcG9ydGVkLiAgVGhleSBhcmU6CisgICAgIFs6YWxwaGE6XSwgWzp1cHBlcjpdLCBbOmxv d2VyOl0sICBbOmRpZ2l0Ol0sIFs6YWxudW06XSwgWzp4ZGlnaXQ6XSwKKyAgICAgWzpzcGFj ZTpdLCBbOnByaW50Ol0sIFs6cHVuY3Q6XSwgWzpncmFwaDpdLCBhbmQgWzpjbnRybDpdLgor ICAgSWYgbm90IHNldCwgdGhlbiBjaGFyYWN0ZXIgY2xhc3NlcyBhcmUgbm90IHN1cHBvcnRl ZC4gICovCisjIGRlZmluZSBSRV9DSEFSX0NMQVNTRVMgKFJFX0JLX1BMVVNfUU0gPDwgMSkK KworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIF4gYW5kICQgYXJlIGFsd2F5cyBhbmNo b3JzIChvdXRzaWRlIGJyYWNrZXQKKyAgICAgZXhwcmVzc2lvbnMsIG9mIGNvdXJzZSkuCisg ICBJZiB0aGlzIGJpdCBpcyBub3Qgc2V0LCB0aGVuIGl0IGRlcGVuZHM6CisJXiAgaXMgYW4g YW5jaG9yIGlmIGl0IGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSByZWd1bGFyCisJICAgZXhw cmVzc2lvbiBvciBhZnRlciBhbiBvcGVuLWdyb3VwIG9yIGFuIGFsdGVybmF0aW9uIG9wZXJh dG9yOworCSQgIGlzIGFuIGFuY2hvciBpZiBpdCBpcyBhdCB0aGUgZW5kIG9mIGEgcmVndWxh ciBleHByZXNzaW9uLCBvcgorCSAgIGJlZm9yZSBhIGNsb3NlLWdyb3VwIG9yIGFuIGFsdGVy bmF0aW9uIG9wZXJhdG9yLgorCisgICBUaGlzIGJpdCBjb3VsZCBiZSAocmUpY29tYmluZWQg d2l0aCBSRV9DT05URVhUX0lOREVQX09QUywgYmVjYXVzZQorICAgUE9TSVggZHJhZnQgMTEu MiBzYXlzIHRoYXQgKiBldGMuIGluIGxlYWRpbmcgcG9zaXRpb25zIGlzIHVuZGVmaW5lZC4K KyAgIFdlIGFscmVhZHkgaW1wbGVtZW50ZWQgYSBwcmV2aW91cyBkcmFmdCB3aGljaCBtYWRl IHRob3NlIGNvbnN0cnVjdHMKKyAgIGludmFsaWQsIHRob3VnaCwgc28gd2UgaGF2ZW4ndCBj aGFuZ2VkIHRoZSBjb2RlIGJhY2suICAqLworIyBkZWZpbmUgUkVfQ09OVEVYVF9JTkRFUF9B TkNIT1JTIChSRV9DSEFSX0NMQVNTRVMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0 LCB0aGVuIHNwZWNpYWwgY2hhcmFjdGVycyBhcmUgYWx3YXlzIHNwZWNpYWwKKyAgICAgcmVn YXJkbGVzcyBvZiB3aGVyZSB0aGV5IGFyZSBpbiB0aGUgcGF0dGVybi4KKyAgIElmIHRoaXMg Yml0IGlzIG5vdCBzZXQsIHRoZW4gc3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBzcGVjaWFsIG9u bHkgaW4KKyAgICAgc29tZSBjb250ZXh0czsgb3RoZXJ3aXNlIHRoZXkgYXJlIG9yZGluYXJ5 LiAgU3BlY2lmaWNhbGx5LAorICAgICAqICsgPyBhbmQgaW50ZXJ2YWxzIGFyZSBvbmx5IHNw ZWNpYWwgd2hlbiBub3QgYWZ0ZXIgdGhlIGJlZ2lubmluZywKKyAgICAgb3Blbi1ncm91cCwg b3IgYWx0ZXJuYXRpb24gb3BlcmF0b3IuICAqLworIyBkZWZpbmUgUkVfQ09OVEVYVF9JTkRF UF9PUFMgKFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUyA8PCAxKQorCisvKiBJZiB0aGlzIGJp dCBpcyBzZXQsIHRoZW4gKiwgKywgPywgYW5kIHsgY2Fubm90IGJlIGZpcnN0IGluIGFuIHJl IG9yCisgICAgIGltbWVkaWF0ZWx5IGFmdGVyIGFuIGFsdGVybmF0aW9uIG9yIGJlZ2luLWdy b3VwIG9wZXJhdG9yLiAgKi8KKyMgZGVmaW5lIFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgKFJF X0NPTlRFWFRfSU5ERVBfT1BTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhl biAuIG1hdGNoZXMgbmV3bGluZS4KKyAgIElmIG5vdCBzZXQsIHRoZW4gaXQgZG9lc24ndC4g ICovCisjIGRlZmluZSBSRV9ET1RfTkVXTElORSAoUkVfQ09OVEVYVF9JTlZBTElEX09QUyA8 PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gLiBkb2Vzbid0IG1hdGNoIE5V TC4KKyAgIElmIG5vdCBzZXQsIHRoZW4gaXQgZG9lcy4gICovCisjIGRlZmluZSBSRV9ET1Rf Tk9UX05VTEwgKFJFX0RPVF9ORVdMSU5FIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNl dCwgbm9ubWF0Y2hpbmcgbGlzdHMgW14uLi5dIGRvIG5vdCBtYXRjaCBuZXdsaW5lLgorICAg SWYgbm90IHNldCwgdGhleSBkby4gICovCisjIGRlZmluZSBSRV9IQVRfTElTVFNfTk9UX05F V0xJTkUgKFJFX0RPVF9OT1RfTlVMTCA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQs IGVpdGhlciBcey4uLlx9IG9yIHsuLi59IGRlZmluZXMgYW4KKyAgICAgaW50ZXJ2YWwsIGRl cGVuZGluZyBvbiBSRV9OT19CS19CUkFDRVMuCisgICBJZiBub3Qgc2V0LCBceywgXH0sIHss IGFuZCB9IGFyZSBsaXRlcmFscy4gICovCisjIGRlZmluZSBSRV9JTlRFUlZBTFMgKFJFX0hB VF9MSVNUU19OT1RfTkVXTElORSA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsICss ID8gYW5kIHwgYXJlbid0IHJlY29nbml6ZWQgYXMgb3BlcmF0b3JzLgorICAgSWYgbm90IHNl dCwgdGhleSBhcmUuICAqLworIyBkZWZpbmUgUkVfTElNSVRFRF9PUFMgKFJFX0lOVEVSVkFM UyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIG5ld2xpbmUgaXMgYW4gYWx0ZXJu YXRpb24gb3BlcmF0b3IuCisgICBJZiBub3Qgc2V0LCBuZXdsaW5lIGlzIGxpdGVyYWwuICAq LworIyBkZWZpbmUgUkVfTkVXTElORV9BTFQgKFJFX0xJTUlURURfT1BTIDw8IDEpCisKKy8q IElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiAney4uLn0nIGRlZmluZXMgYW4gaW50ZXJ2YWws IGFuZCBceyBhbmQgXH0KKyAgICAgYXJlIGxpdGVyYWxzLgorICBJZiBub3Qgc2V0LCB0aGVu ICdcey4uLlx9JyBkZWZpbmVzIGFuIGludGVydmFsLiAgKi8KKyMgZGVmaW5lIFJFX05PX0JL X0JSQUNFUyAoUkVfTkVXTElORV9BTFQgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0 LCAoLi4uKSBkZWZpbmVzIGEgZ3JvdXAsIGFuZCBcKCBhbmQgXCkgYXJlIGxpdGVyYWxzLgor ICAgSWYgbm90IHNldCwgXCguLi5cKSBkZWZpbmVzIGEgZ3JvdXAsIGFuZCAoIGFuZCApIGFy ZSBsaXRlcmFscy4gICovCisjIGRlZmluZSBSRV9OT19CS19QQVJFTlMgKFJFX05PX0JLX0JS QUNFUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gXDxkaWdpdD4gbWF0 Y2hlcyA8ZGlnaXQ+LgorICAgSWYgbm90IHNldCwgdGhlbiBcPGRpZ2l0PiBpcyBhIGJhY2st cmVmZXJlbmNlLiAgKi8KKyMgZGVmaW5lIFJFX05PX0JLX1JFRlMgKFJFX05PX0JLX1BBUkVO UyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gfCBpcyBhbiBhbHRlcm5h dGlvbiBvcGVyYXRvciwgYW5kIFx8IGlzIGxpdGVyYWwuCisgICBJZiBub3Qgc2V0LCB0aGVu IFx8IGlzIGFuIGFsdGVybmF0aW9uIG9wZXJhdG9yLCBhbmQgfCBpcyBsaXRlcmFsLiAgKi8K KyMgZGVmaW5lIFJFX05PX0JLX1ZCQVIgKFJFX05PX0JLX1JFRlMgPDwgMSkKKworLyogSWYg dGhpcyBiaXQgaXMgc2V0LCB0aGVuIGFuIGVuZGluZyByYW5nZSBwb2ludCBjb2xsYXRpbmcg aGlnaGVyCisgICAgIHRoYW4gdGhlIHN0YXJ0aW5nIHJhbmdlIHBvaW50LCBhcyBpbiBbei1h XSwgaXMgaW52YWxpZC4KKyAgIElmIG5vdCBzZXQsIHRoZW4gd2hlbiBlbmRpbmcgcmFuZ2Ug cG9pbnQgY29sbGF0ZXMgaGlnaGVyIHRoYW4gdGhlCisgICAgIHN0YXJ0aW5nIHJhbmdlIHBv aW50LCB0aGUgcmFuZ2UgaXMgaWdub3JlZC4gICovCisjIGRlZmluZSBSRV9OT19FTVBUWV9S QU5HRVMgKFJFX05PX0JLX1ZCQVIgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0 aGVuIGFuIHVubWF0Y2hlZCApIGlzIG9yZGluYXJ5LgorICAgSWYgbm90IHNldCwgdGhlbiBh biB1bm1hdGNoZWQgKSBpcyBpbnZhbGlkLiAgKi8KKyMgZGVmaW5lIFJFX1VOTUFUQ0hFRF9S SUdIVF9QQVJFTl9PUkQgKFJFX05PX0VNUFRZX1JBTkdFUyA8PCAxKQorCisvKiBJZiB0aGlz IGJpdCBpcyBzZXQsIHN1Y2NlZWQgYXMgc29vbiBhcyB3ZSBtYXRjaCB0aGUgd2hvbGUgcGF0 dGVybiwKKyAgIHdpdGhvdXQgZnVydGhlciBiYWNrdHJhY2tpbmcuICAqLworIyBkZWZpbmUg UkVfTk9fUE9TSVhfQkFDS1RSQUNLSU5HIChSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JE IDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgZG8gbm90IHByb2Nlc3MgdGhlIEdO VSByZWdleCBvcGVyYXRvcnMuCisgICBJZiBub3Qgc2V0LCB0aGVuIHRoZSBHTlUgcmVnZXgg b3BlcmF0b3JzIGFyZSByZWNvZ25pemVkLiAqLworIyBkZWZpbmUgUkVfTk9fR05VX09QUyAo UkVfTk9fUE9TSVhfQkFDS1RSQUNLSU5HIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNl dCwgdHVybiBvbiBpbnRlcm5hbCByZWdleCBkZWJ1Z2dpbmcuCisgICBJZiBub3Qgc2V0LCBh bmQgZGVidWdnaW5nIHdhcyBvbiwgdHVybiBpdCBvZmYuCisgICBUaGlzIG9ubHkgd29ya3Mg aWYgcmVnZXguYyBpcyBjb21waWxlZCAtRERFQlVHLgorICAgV2UgZGVmaW5lIHRoaXMgYml0 IGFsd2F5cywgc28gdGhhdCBhbGwgdGhhdCdzIG5lZWRlZCB0byB0dXJuIG9uCisgICBkZWJ1 Z2dpbmcgaXMgdG8gcmVjb21waWxlIHJlZ2V4LmM7IHRoZSBjYWxsaW5nIGNvZGUgY2FuIGFs d2F5cyBoYXZlCisgICB0aGlzIGJpdCBzZXQsIGFuZCBpdCB3b24ndCBhZmZlY3QgYW55dGhp bmcgaW4gdGhlIG5vcm1hbCBjYXNlLiAqLworIyBkZWZpbmUgUkVfREVCVUcgKFJFX05PX0dO VV9PUFMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCBhIHN5bnRhY3RpY2FsbHkg aW52YWxpZCBpbnRlcnZhbCBpcyB0cmVhdGVkIGFzCisgICBhIHN0cmluZyBvZiBvcmRpbmFy eSBjaGFyYWN0ZXJzLiAgRm9yIGV4YW1wbGUsIHRoZSBFUkUgJ2F7MScgaXMKKyAgIHRyZWF0 ZWQgYXMgJ2FcezEnLiAgKi8KKyMgZGVmaW5lIFJFX0lOVkFMSURfSU5URVJWQUxfT1JEIChS RV9ERUJVRyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gaWdub3JlIGNh c2Ugd2hlbiBtYXRjaGluZy4KKyAgIElmIG5vdCBzZXQsIHRoZW4gY2FzZSBpcyBzaWduaWZp Y2FudC4gICovCisjIGRlZmluZSBSRV9JQ0FTRSAoUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQg PDwgMSkKKworLyogVGhpcyBiaXQgaXMgdXNlZCBpbnRlcm5hbGx5IGxpa2UgUkVfQ09OVEVY VF9JTkRFUF9BTkNIT1JTIGJ1dCBvbmx5CisgICBmb3IgXiwgYmVjYXVzZSBpdCBpcyBkaWZm aWN1bHQgdG8gc2NhbiB0aGUgcmVnZXggYmFja3dhcmRzIHRvIGZpbmQKKyAgIHdoZXRoZXIg XiBzaG91bGQgYmUgc3BlY2lhbC4gICovCisjIGRlZmluZSBSRV9DQVJFVF9BTkNIT1JTX0hF UkUgKFJFX0lDQVNFIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBceyBj YW5ub3QgYmUgZmlyc3QgaW4gYSByZWdleCBvcgorICAgaW1tZWRpYXRlbHkgYWZ0ZXIgYW4g YWx0ZXJuYXRpb24sIG9wZW4tZ3JvdXAgb3IgXH0gb3BlcmF0b3IuICAqLworIyBkZWZpbmUg UkVfQ09OVEVYVF9JTlZBTElEX0RVUCAoUkVfQ0FSRVRfQU5DSE9SU19IRVJFIDw8IDEpCisK Ky8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBub19zdWIgd2lsbCBiZSBzZXQgdG8gMSBk dXJpbmcKKyAgIHJlX2NvbXBpbGVfcGF0dGVybi4gICovCisjIGRlZmluZSBSRV9OT19TVUIg KFJFX0NPTlRFWFRfSU5WQUxJRF9EVVAgPDwgMSkKKyNlbmRpZgorCisvKiBUaGlzIGdsb2Jh bCB2YXJpYWJsZSBkZWZpbmVzIHRoZSBwYXJ0aWN1bGFyIHJlZ2V4cCBzeW50YXggdG8gdXNl IChmb3IKKyAgIHNvbWUgaW50ZXJmYWNlcykuICBXaGVuIGEgcmVnZXhwIGlzIGNvbXBpbGVk LCB0aGUgc3ludGF4IHVzZWQgaXMKKyAgIHN0b3JlZCBpbiB0aGUgcGF0dGVybiBidWZmZXIs IHNvIGNoYW5naW5nIHRoaXMgZG9lcyBub3QgYWZmZWN0CisgICBhbHJlYWR5LWNvbXBpbGVk IHJlZ2V4cHMuICAqLworZXh0ZXJuIHJlZ19zeW50YXhfdCByZV9zeW50YXhfb3B0aW9uczsK KwwKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIERlZmluZSBjb21iaW5hdGlvbnMgb2YgdGhlIGFi b3ZlIGJpdHMgZm9yIHRoZSBzdGFuZGFyZCBwb3NzaWJpbGl0aWVzLgorICAgKFRoZSBbW1sg Y29tbWVudHMgZGVsaW1pdCB3aGF0IGdldHMgcHV0IGludG8gdGhlIFRleGluZm8gZmlsZSwg c28KKyAgIGRvbid0IGRlbGV0ZSB0aGVtISkgICovCisvKiBbW1tiZWdpbiBzeW50YXhlc11d XSAqLworIyBkZWZpbmUgUkVfU1lOVEFYX0VNQUNTIDAKKworIyBkZWZpbmUgUkVfU1lOVEFY X0FXSwkJCQkJCQlcCisgIChSRV9CQUNLU0xBU0hfRVNDQVBFX0lOX0xJU1RTICAgfCBSRV9E T1RfTk9UX05VTEwJCQlcCisgICB8IFJFX05PX0JLX1BBUkVOUyAgICAgICAgICAgICAgfCBS RV9OT19CS19SRUZTCQkJXAorICAgfCBSRV9OT19CS19WQkFSICAgICAgICAgICAgICAgIHwg UkVfTk9fRU1QVFlfUkFOR0VTCQkJXAorICAgfCBSRV9ET1RfTkVXTElORQkJICB8IFJFX0NP TlRFWFRfSU5ERVBfQU5DSE9SUwkJXAorICAgfCBSRV9DSEFSX0NMQVNTRVMJCQkJCQkJXAor ICAgfCBSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JEIHwgUkVfTk9fR05VX09QUykKKwor IyBkZWZpbmUgUkVfU1lOVEFYX0dOVV9BV0sJCQkJCQlcCisgICgoUkVfU1lOVEFYX1BPU0lY X0VYVEVOREVEIHwgUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUwkJXAorICAgIHwgUkVf SU5WQUxJRF9JTlRFUlZBTF9PUkQpCQkJCQkJXAorICAgJiB+KFJFX0RPVF9OT1RfTlVMTCB8 IFJFX0NPTlRFWFRfSU5ERVBfT1BTCQkJCVwKKyAgICAgIHwgUkVfQ09OVEVYVF9JTlZBTElE X09QUyApKQorCisjIGRlZmluZSBSRV9TWU5UQVhfUE9TSVhfQVdLCQkJCQkJXAorICAoUkVf U1lOVEFYX1BPU0lYX0VYVEVOREVEIHwgUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUwkJ XAorICAgfCBSRV9JTlRFUlZBTFMJICAgIHwgUkVfTk9fR05VX09QUwkJCQlcCisgICB8IFJF X0lOVkFMSURfSU5URVJWQUxfT1JEKQorCisjIGRlZmluZSBSRV9TWU5UQVhfR1JFUAkJCQkJ CQlcCisgICgoUkVfU1lOVEFYX1BPU0lYX0JBU0lDIHwgUkVfTkVXTElORV9BTFQpCQkJCVwK KyAgICYgfihSRV9DT05URVhUX0lOVkFMSURfRFVQIHwgUkVfRE9UX05PVF9OVUxMKSkKKwor IyBkZWZpbmUgUkVfU1lOVEFYX0VHUkVQCQkJCQkJXAorICAoKFJFX1NZTlRBWF9QT1NJWF9F WFRFTkRFRCB8IFJFX0lOVkFMSURfSU5URVJWQUxfT1JEIHwgUkVfTkVXTElORV9BTFQpIFwK KyAgICYgfihSRV9DT05URVhUX0lOVkFMSURfT1BTIHwgUkVfRE9UX05PVF9OVUxMKSkKKwor LyogUE9TSVggZ3JlcCAtRSBiZWhhdmlvciBpcyBubyBsb25nZXIgaW5jb21wYXRpYmxlIHdp dGggR05VLiAgKi8KKyMgZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9FR1JFUAkJCQkJCVwKKyAg UkVfU1lOVEFYX0VHUkVQCisKKy8qIFAxMDAzLjIvRDExLjIsIHNlY3Rpb24gNC4yMC43LjEs IGxpbmVzIDUwNzhmZi4gICovCisjIGRlZmluZSBSRV9TWU5UQVhfRUQgUkVfU1lOVEFYX1BP U0lYX0JBU0lDCisKKyMgZGVmaW5lIFJFX1NZTlRBWF9TRUQgUkVfU1lOVEFYX1BPU0lYX0JB U0lDCisKKy8qIFN5bnRheCBiaXRzIGNvbW1vbiB0byBib3RoIGJhc2ljIGFuZCBleHRlbmRl ZCBQT1NJWCByZWdleCBzeW50YXguICAqLworIyBkZWZpbmUgX1JFX1NZTlRBWF9QT1NJWF9D T01NT04JCQkJCVwKKyAgKFJFX0NIQVJfQ0xBU1NFUyB8IFJFX0RPVF9ORVdMSU5FICAgICAg fCBSRV9ET1RfTk9UX05VTEwJCVwKKyAgIHwgUkVfSU5URVJWQUxTICB8IFJFX05PX0VNUFRZ X1JBTkdFUykKKworIyBkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX0JBU0lDCQkJCQkJXAorICAo X1JFX1NZTlRBWF9QT1NJWF9DT01NT04gfCBSRV9CS19QTFVTX1FNIHwgUkVfQ09OVEVYVF9J TlZBTElEX0RVUCkKKworLyogRGlmZmVycyBmcm9tIC4uLl9QT1NJWF9CQVNJQyBvbmx5IGlu IHRoYXQgUkVfQktfUExVU19RTSBiZWNvbWVzCisgICBSRV9MSU1JVEVEX09QUywgaS5lLiwg XD8gXCsgXHwgYXJlIG5vdCByZWNvZ25pemVkLiAgQWN0dWFsbHksIHRoaXMKKyAgIGlzbid0 IG1pbmltYWwsIHNpbmNlIG90aGVyIG9wZXJhdG9ycywgc3VjaCBhcyBcYCwgYXJlbid0IGRp c2FibGVkLiAgKi8KKyMgZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9NSU5JTUFMX0JBU0lDCQkJ CQlcCisgIChfUkVfU1lOVEFYX1BPU0lYX0NPTU1PTiB8IFJFX0xJTUlURURfT1BTKQorCisj IGRlZmluZSBSRV9TWU5UQVhfUE9TSVhfRVhURU5ERUQJCQkJCVwKKyAgKF9SRV9TWU5UQVhf UE9TSVhfQ09NTU9OICB8IFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUwkJCVwKKyAgIHwgUkVf Q09OVEVYVF9JTkRFUF9PUFMgICB8IFJFX05PX0JLX0JSQUNFUwkJCQlcCisgICB8IFJFX05P X0JLX1BBUkVOUyAgICAgICAgfCBSRV9OT19CS19WQkFSCQkJCVwKKyAgIHwgUkVfQ09OVEVY VF9JTlZBTElEX09QUyB8IFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQpCisKKy8qIERp ZmZlcnMgZnJvbSAuLi5fUE9TSVhfRVhURU5ERUQgaW4gdGhhdCBSRV9DT05URVhUX0lOREVQ X09QUyBpcworICAgcmVtb3ZlZCBhbmQgUkVfTk9fQktfUkVGUyBpcyBhZGRlZC4gICovCisj IGRlZmluZSBSRV9TWU5UQVhfUE9TSVhfTUlOSU1BTF9FWFRFTkRFRAkJCQlcCisgIChfUkVf U1lOVEFYX1BPU0lYX0NPTU1PTiAgfCBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMJCQlcCisg ICB8IFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgfCBSRV9OT19CS19CUkFDRVMJCQkJXAorICAg fCBSRV9OT19CS19QQVJFTlMgICAgICAgIHwgUkVfTk9fQktfUkVGUwkJCQlcCisgICB8IFJF X05PX0JLX1ZCQVIJICAgIHwgUkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVOX09SRCkKKy8qIFtb W2VuZCBzeW50YXhlc11dXSAqLworCisvKiBNYXhpbXVtIG51bWJlciBvZiBkdXBsaWNhdGVz IGFuIGludGVydmFsIGNhbiBhbGxvdy4gIFBPU0lYLWNvbmZvcm1pbmcKKyAgIHN5c3RlbXMg bWlnaHQgZGVmaW5lIHRoaXMgaW4gPGxpbWl0cy5oPiwgYnV0IHdlIHdhbnQgb3VyCisgICB2 YWx1ZSwgc28gcmVtb3ZlIGFueSBwcmV2aW91cyBkZWZpbmUuICAqLworIyBpZmRlZiBfUkVH RVhfSU5DTFVERV9MSU1JVFNfSAorIyAgaW5jbHVkZSA8bGltaXRzLmg+CisjIGVuZGlmCisj IGlmZGVmIFJFX0RVUF9NQVgKKyMgIHVuZGVmIFJFX0RVUF9NQVgKKyMgZW5kaWYKKworLyog UkVfRFVQX01BWCBpcyAyKioxNSAtIDEgYmVjYXVzZSBhbiBlYXJsaWVyIGltcGxlbWVudGF0 aW9uIHN0b3JlZAorICAgdGhlIGNvdW50ZXIgYXMgYSAyLWJ5dGUgc2lnbmVkIGludGVnZXIu ICBUaGlzIGlzIG5vIGxvbmdlciB0cnVlLCBzbworICAgUkVfRFVQX01BWCBjb3VsZCBiZSBp bmNyZWFzZWQgdG8gKElOVF9NQVggLyAxMCAtIDEpLCBvciB0bworICAgKChTSVpFX01BWCAt IDkpIC8gMTApIGlmIF9SRUdFWF9MQVJHRV9PRkZTRVRTIGlzIGRlZmluZWQuCisgICBIb3dl dmVyLCB0aGVyZSB3b3VsZCBiZSBhIGh1Z2UgcGVyZm9ybWFuY2UgcHJvYmxlbSBpZiBzb21l b25lCisgICBhY3R1YWxseSB1c2VkIGEgcGF0dGVybiBsaWtlIGFcezIxNDc0ODM2M1x9LCBz byBSRV9EVVBfTUFYIHJldGFpbnMKKyAgIGl0cyBoaXN0b3JpY2FsIHZhbHVlLiAgKi8KKyMg ZGVmaW5lIFJFX0RVUF9NQVggKDB4N2ZmZikKKyNlbmRpZgorCisKKy8qIFBPU0lYICdjZmxh Z3MnIGJpdHMgKGkuZS4sIGluZm9ybWF0aW9uIGZvciAncmVnY29tcCcpLiAgKi8KKworLyog SWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIHVzZSBleHRlbmRlZCByZWd1bGFyIGV4cHJlc3Np b24gc3ludGF4LgorICAgSWYgbm90IHNldCwgdGhlbiB1c2UgYmFzaWMgcmVndWxhciBleHBy ZXNzaW9uIHN5bnRheC4gICovCisjZGVmaW5lIFJFR19FWFRFTkRFRCAxCisKKy8qIElmIHRo aXMgYml0IGlzIHNldCwgdGhlbiBpZ25vcmUgY2FzZSB3aGVuIG1hdGNoaW5nLgorICAgSWYg bm90IHNldCwgdGhlbiBjYXNlIGlzIHNpZ25pZmljYW50LiAgKi8KKyNkZWZpbmUgUkVHX0lD QVNFICgxIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBhbmNob3JzIGRv IG5vdCBtYXRjaCBhdCBuZXdsaW5lCisgICAgIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZy4K KyAgIElmIG5vdCBzZXQsIHRoZW4gYW5jaG9ycyBkbyBtYXRjaCBhdCBuZXdsaW5lcy4gICov CisjZGVmaW5lIFJFR19ORVdMSU5FICgxIDw8IDIpCisKKy8qIElmIHRoaXMgYml0IGlzIHNl dCwgdGhlbiByZXBvcnQgb25seSBzdWNjZXNzIG9yIGZhaWwgaW4gcmVnZXhlYy4KKyAgIElm IG5vdCBzZXQsIHRoZW4gcmV0dXJucyBkaWZmZXIgYmV0d2VlbiBub3QgbWF0Y2hpbmcgYW5k IGVycm9ycy4gICovCisjZGVmaW5lIFJFR19OT1NVQiAoMSA8PCAzKQorCisKKy8qIFBPU0lY ICdlZmxhZ3MnIGJpdHMgKGkuZS4sIGluZm9ybWF0aW9uIGZvciByZWdleGVjKS4gICovCisK Ky8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiB0aGUgYmVnaW5uaW5nLW9mLWxpbmUgb3Bl cmF0b3IgZG9lc24ndCBtYXRjaAorICAgICB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcg KHByZXN1bWFibHkgYmVjYXVzZSBpdCdzIG5vdCB0aGUKKyAgICAgYmVnaW5uaW5nIG9mIGEg bGluZSkuCisgICBJZiBub3Qgc2V0LCB0aGVuIHRoZSBiZWdpbm5pbmctb2YtbGluZSBvcGVy YXRvciBkb2VzIG1hdGNoIHRoZQorICAgICBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZy4gICov CisjZGVmaW5lIFJFR19OT1RCT0wgMQorCisvKiBMaWtlIFJFR19OT1RCT0wsIGV4Y2VwdCBm b3IgdGhlIGVuZC1vZi1saW5lLiAgKi8KKyNkZWZpbmUgUkVHX05PVEVPTCAoMSA8PCAxKQor CisvKiBVc2UgUE1BVENIWzBdIHRvIGRlbGltaXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhl IHNlYXJjaCBpbiB0aGUKKyAgIGJ1ZmZlci4gICovCisjZGVmaW5lIFJFR19TVEFSVEVORCAo MSA8PCAyKQorCisKKy8qIElmIGFueSBlcnJvciBjb2RlcyBhcmUgcmVtb3ZlZCwgY2hhbmdl ZCwgb3IgYWRkZWQsIHVwZGF0ZSB0aGUKKyAgICdfX3JlX2Vycm9yX21zZ2lkJyB0YWJsZSBp biByZWdjb21wLmMuICAqLworCit0eXBlZGVmIGVudW0KK3sKKyAgX1JFR19FTk9TWVMgPSAt MSwJLyogVGhpcyB3aWxsIG5ldmVyIGhhcHBlbiBmb3IgdGhpcyBpbXBsZW1lbnRhdGlvbi4g ICovCisgIF9SRUdfTk9FUlJPUiA9IDAsCS8qIFN1Y2Nlc3MuICAqLworICBfUkVHX05PTUFU Q0gsCQkvKiBEaWRuJ3QgZmluZCBhIG1hdGNoIChmb3IgcmVnZXhlYykuICAqLworCisgIC8q IFBPU0lYIHJlZ2NvbXAgcmV0dXJuIGVycm9yIGNvZGVzLiAgKEluIHRoZSBvcmRlciBsaXN0 ZWQgaW4gdGhlCisgICAgIHN0YW5kYXJkLikgICovCisgIF9SRUdfQkFEUEFULAkJLyogSW52 YWxpZCBwYXR0ZXJuLiAgKi8KKyAgX1JFR19FQ09MTEFURSwJLyogSW52YWxpZCBjb2xsYXRp bmcgZWxlbWVudC4gICovCisgIF9SRUdfRUNUWVBFLAkJLyogSW52YWxpZCBjaGFyYWN0ZXIg Y2xhc3MgbmFtZS4gICovCisgIF9SRUdfRUVTQ0FQRSwJCS8qIFRyYWlsaW5nIGJhY2tzbGFz aC4gICovCisgIF9SRUdfRVNVQlJFRywJCS8qIEludmFsaWQgYmFjayByZWZlcmVuY2UuICAq LworICBfUkVHX0VCUkFDSywJCS8qIFVubWF0Y2hlZCBsZWZ0IGJyYWNrZXQuICAqLworICBf UkVHX0VQQVJFTiwJCS8qIFBhcmVudGhlc2lzIGltYmFsYW5jZS4gICovCisgIF9SRUdfRUJS QUNFLAkJLyogVW5tYXRjaGVkIFx7LiAgKi8KKyAgX1JFR19CQURCUiwJCS8qIEludmFsaWQg Y29udGVudHMgb2YgXHtcfS4gICovCisgIF9SRUdfRVJBTkdFLAkJLyogSW52YWxpZCByYW5n ZSBlbmQuICAqLworICBfUkVHX0VTUEFDRSwJCS8qIFJhbiBvdXQgb2YgbWVtb3J5LiAgKi8K KyAgX1JFR19CQURSUFQsCQkvKiBObyBwcmVjZWRpbmcgcmUgZm9yIHJlcGV0aXRpb24gb3Au ICAqLworCisgIC8qIEVycm9yIGNvZGVzIHdlJ3ZlIGFkZGVkLiAgKi8KKyAgX1JFR19FRU5E LAkJLyogUHJlbWF0dXJlIGVuZC4gICovCisgIF9SRUdfRVNJWkUsCQkvKiBUb28gbGFyZ2Ug KGUuZy4sIHJlcGVhdCBjb3VudCB0b28gbGFyZ2UpLiAgKi8KKyAgX1JFR19FUlBBUkVOCQkv KiBVbm1hdGNoZWQgKSBvciBcKTsgbm90IHJldHVybmVkIGZyb20gcmVnY29tcC4gICovCit9 IHJlZ19lcnJjb2RlX3Q7CisKKyNpZiBkZWZpbmVkIF9YT1BFTl9TT1VSQ0UgfHwgZGVmaW5l ZCBfX1VTRV9YT1BFTjJLCisjIGRlZmluZSBSRUdfRU5PU1lTCV9SRUdfRU5PU1lTCisjZW5k aWYKKyNkZWZpbmUgUkVHX05PRVJST1IJX1JFR19OT0VSUk9SCisjZGVmaW5lIFJFR19OT01B VENICV9SRUdfTk9NQVRDSAorI2RlZmluZSBSRUdfQkFEUEFUCV9SRUdfQkFEUEFUCisjZGVm aW5lIFJFR19FQ09MTEFURQlfUkVHX0VDT0xMQVRFCisjZGVmaW5lIFJFR19FQ1RZUEUJX1JF R19FQ1RZUEUKKyNkZWZpbmUgUkVHX0VFU0NBUEUJX1JFR19FRVNDQVBFCisjZGVmaW5lIFJF R19FU1VCUkVHCV9SRUdfRVNVQlJFRworI2RlZmluZSBSRUdfRUJSQUNLCV9SRUdfRUJSQUNL CisjZGVmaW5lIFJFR19FUEFSRU4JX1JFR19FUEFSRU4KKyNkZWZpbmUgUkVHX0VCUkFDRQlf UkVHX0VCUkFDRQorI2RlZmluZSBSRUdfQkFEQlIJX1JFR19CQURCUgorI2RlZmluZSBSRUdf RVJBTkdFCV9SRUdfRVJBTkdFCisjZGVmaW5lIFJFR19FU1BBQ0UJX1JFR19FU1BBQ0UKKyNk ZWZpbmUgUkVHX0JBRFJQVAlfUkVHX0JBRFJQVAorI2RlZmluZSBSRUdfRUVORAlfUkVHX0VF TkQKKyNkZWZpbmUgUkVHX0VTSVpFCV9SRUdfRVNJWkUKKyNkZWZpbmUgUkVHX0VSUEFSRU4J X1JFR19FUlBBUkVOCisMCisvKiBUaGlzIGRhdGEgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBj b21waWxlZCBwYXR0ZXJuLiAgQmVmb3JlIGNhbGxpbmcKKyAgIHRoZSBwYXR0ZXJuIGNvbXBp bGVyLCB0aGUgZmllbGRzICdidWZmZXInLCAnYWxsb2NhdGVkJywgJ2Zhc3RtYXAnLAorICAg YW5kICd0cmFuc2xhdGUnIGNhbiBiZSBzZXQuICBBZnRlciB0aGUgcGF0dGVybiBoYXMgYmVl biBjb21waWxlZCwKKyAgIHRoZSBmaWVsZHMgJ3JlX25zdWInLCAnbm90X2JvbCcgYW5kICdu b3RfZW9sJyBhcmUgYXZhaWxhYmxlLiAgQWxsCisgICBvdGhlciBmaWVsZHMgYXJlIHByaXZh dGUgdG8gdGhlIHJlZ2V4IHJvdXRpbmVzLiAgKi8KKworI2lmbmRlZiBSRV9UUkFOU0xBVEVf VFlQRQorIyBkZWZpbmUgX19SRV9UUkFOU0xBVEVfVFlQRSB1bnNpZ25lZCBjaGFyICoKKyMg aWZkZWYgX19VU0VfR05VCisjICBkZWZpbmUgUkVfVFJBTlNMQVRFX1RZUEUgX19SRV9UUkFO U0xBVEVfVFlQRQorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX1VTRV9HTlUKKyMgZGVm aW5lIF9fUkVQQl9QUkVGSVgobmFtZSkgbmFtZQorI2Vsc2UKKyMgZGVmaW5lIF9fUkVQQl9Q UkVGSVgobmFtZSkgX18jI25hbWUKKyNlbmRpZgorCitzdHJ1Y3QgcmVfcGF0dGVybl9idWZm ZXIKK3sKKyAgLyogU3BhY2UgdGhhdCBob2xkcyB0aGUgY29tcGlsZWQgcGF0dGVybi4gIFRo ZSB0eXBlCisgICAgICdzdHJ1Y3QgcmVfZGZhX3QnIGlzIHByaXZhdGUgYW5kIGlzIG5vdCBk ZWNsYXJlZCBoZXJlLiAgKi8KKyAgc3RydWN0IHJlX2RmYV90ICpfX1JFUEJfUFJFRklYKGJ1 ZmZlcik7CisKKyAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIHdoaWNoICdidWZmZXInIHBvaW50 cy4gICovCisgIF9fcmVfbG9uZ19zaXplX3QgX19SRVBCX1BSRUZJWChhbGxvY2F0ZWQpOwor CisgIC8qIE51bWJlciBvZiBieXRlcyBhY3R1YWxseSB1c2VkIGluICdidWZmZXInLiAgKi8K KyAgX19yZV9sb25nX3NpemVfdCBfX1JFUEJfUFJFRklYKHVzZWQpOworCisgIC8qIFN5bnRh eCBzZXR0aW5nIHdpdGggd2hpY2ggdGhlIHBhdHRlcm4gd2FzIGNvbXBpbGVkLiAgKi8KKyAg cmVnX3N5bnRheF90IF9fUkVQQl9QUkVGSVgoc3ludGF4KTsKKworICAvKiBQb2ludGVyIHRv IGEgZmFzdG1hcCwgaWYgYW55LCBvdGhlcndpc2UgemVyby4gIHJlX3NlYXJjaCB1c2VzIHRo ZQorICAgICBmYXN0bWFwLCBpZiB0aGVyZSBpcyBvbmUsIHRvIHNraXAgb3ZlciBpbXBvc3Np YmxlIHN0YXJ0aW5nIHBvaW50cworICAgICBmb3IgbWF0Y2hlcy4gICovCisgIGNoYXIgKl9f UkVQQl9QUkVGSVgoZmFzdG1hcCk7CisKKyAgLyogRWl0aGVyIGEgdHJhbnNsYXRlIHRhYmxl IHRvIGFwcGx5IHRvIGFsbCBjaGFyYWN0ZXJzIGJlZm9yZQorICAgICBjb21wYXJpbmcgdGhl bSwgb3IgemVybyBmb3Igbm8gdHJhbnNsYXRpb24uICBUaGUgdHJhbnNsYXRpb24gaXMKKyAg ICAgYXBwbGllZCB0byBhIHBhdHRlcm4gd2hlbiBpdCBpcyBjb21waWxlZCBhbmQgdG8gYSBz dHJpbmcgd2hlbiBpdAorICAgICBpcyBtYXRjaGVkLiAgKi8KKyAgX19SRV9UUkFOU0xBVEVf VFlQRSBfX1JFUEJfUFJFRklYKHRyYW5zbGF0ZSk7CisKKyAgLyogTnVtYmVyIG9mIHN1YmV4 cHJlc3Npb25zIGZvdW5kIGJ5IHRoZSBjb21waWxlci4gICovCisgIHNpemVfdCByZV9uc3Vi OworCisgIC8qIFplcm8gaWYgdGhpcyBwYXR0ZXJuIGNhbm5vdCBtYXRjaCB0aGUgZW1wdHkg c3RyaW5nLCBvbmUgZWxzZS4KKyAgICAgV2VsbCwgaW4gdHJ1dGggaXQncyB1c2VkIG9ubHkg aW4gJ3JlX3NlYXJjaF8yJywgdG8gc2VlIHdoZXRoZXIgb3IKKyAgICAgbm90IHdlIHNob3Vs ZCB1c2UgdGhlIGZhc3RtYXAsIHNvIHdlIGRvbid0IHNldCB0aGlzIGFic29sdXRlbHkKKyAg ICAgcGVyZmVjdGx5OyBzZWUgJ3JlX2NvbXBpbGVfZmFzdG1hcCcgKHRoZSAiZHVwbGljYXRl IiBjYXNlKS4gICovCisgIHVuc2lnbmVkIF9fUkVQQl9QUkVGSVgoY2FuX2JlX251bGwpIDog MTsKKworICAvKiBJZiBSRUdTX1VOQUxMT0NBVEVELCBhbGxvY2F0ZSBzcGFjZSBpbiB0aGUg J3JlZ3MnIHN0cnVjdHVyZQorICAgICBmb3IgJ21heCAoUkVfTlJFR1MsIHJlX25zdWIgKyAx KScgZ3JvdXBzLgorICAgICBJZiBSRUdTX1JFQUxMT0NBVEUsIHJlYWxsb2NhdGUgc3BhY2Ug aWYgbmVjZXNzYXJ5LgorICAgICBJZiBSRUdTX0ZJWEVELCB1c2Ugd2hhdCdzIHRoZXJlLiAg Ki8KKyNpZmRlZiBfX1VTRV9HTlUKKyMgZGVmaW5lIFJFR1NfVU5BTExPQ0FURUQgMAorIyBk ZWZpbmUgUkVHU19SRUFMTE9DQVRFIDEKKyMgZGVmaW5lIFJFR1NfRklYRUQgMgorI2VuZGlm CisgIHVuc2lnbmVkIF9fUkVQQl9QUkVGSVgocmVnc19hbGxvY2F0ZWQpIDogMjsKKworICAv KiBTZXQgdG8gemVybyB3aGVuICdyZV9jb21waWxlX3BhdHRlcm4nIGNvbXBpbGVzIGEgcGF0 dGVybjsgc2V0IHRvCisgICAgIG9uZSBieSAncmVfY29tcGlsZV9mYXN0bWFwJyBpZiBpdCB1 cGRhdGVzIHRoZSBmYXN0bWFwLiAgKi8KKyAgdW5zaWduZWQgX19SRVBCX1BSRUZJWChmYXN0 bWFwX2FjY3VyYXRlKSA6IDE7CisKKyAgLyogSWYgc2V0LCAncmVfbWF0Y2hfMicgZG9lcyBu b3QgcmV0dXJuIGluZm9ybWF0aW9uIGFib3V0CisgICAgIHN1YmV4cHJlc3Npb25zLiAgKi8K KyAgdW5zaWduZWQgX19SRVBCX1BSRUZJWChub19zdWIpIDogMTsKKworICAvKiBJZiBzZXQs IGEgYmVnaW5uaW5nLW9mLWxpbmUgYW5jaG9yIGRvZXNuJ3QgbWF0Y2ggYXQgdGhlIGJlZ2lu bmluZworICAgICBvZiB0aGUgc3RyaW5nLiAgKi8KKyAgdW5zaWduZWQgX19SRVBCX1BSRUZJ WChub3RfYm9sKSA6IDE7CisKKyAgLyogU2ltaWxhcmx5IGZvciBhbiBlbmQtb2YtbGluZSBh bmNob3IuICAqLworICB1bnNpZ25lZCBfX1JFUEJfUFJFRklYKG5vdF9lb2wpIDogMTsKKwor ICAvKiBJZiB0cnVlLCBhbiBhbmNob3IgYXQgYSBuZXdsaW5lIG1hdGNoZXMuICAqLworICB1 bnNpZ25lZCBfX1JFUEJfUFJFRklYKG5ld2xpbmVfYW5jaG9yKSA6IDE7Cit9OworCit0eXBl ZGVmIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciByZWdleF90OworDAorLyogVHlwZSBmb3Ig Ynl0ZSBvZmZzZXRzIHdpdGhpbiB0aGUgc3RyaW5nLiAgUE9TSVggbWFuZGF0ZXMgdGhpcy4g ICovCisjaWZkZWYgX1JFR0VYX0xBUkdFX09GRlNFVFMKKy8qIFBPU0lYIDEwMDMuMS0yMDA4 IHJlcXVpcmVzIHRoYXQgcmVnb2ZmX3QgYmUgYXQgbGVhc3QgYXMgd2lkZSBhcworICAgcHRy ZGlmZl90IGFuZCBzc2l6ZV90LiAgV2UgZG9uJ3Qga25vdyBvZiBhbnkgaG9zdHMgd2hlcmUg cHRyZGlmZl90CisgICBpcyB3aWRlciB0aGFuIHNzaXplX3QsIHNvIHNzaXplX3QgaXMgc2Fm ZS4gIHB0cmRpZmZfdCBpcyBub3QKKyAgIHZpc2libGUgaGVyZSwgc28gdXNlIHNzaXplX3Qu ICAqLwordHlwZWRlZiBzc2l6ZV90IHJlZ29mZl90OworI2Vsc2UKKy8qIFRoZSB0cmFkaXRp b25hbCBHTlUgcmVnZXggaW1wbGVtZW50YXRpb24gbWlzaGFuZGxlcyBzdHJpbmdzIGxvbmdl cgorICAgdGhhbiBJTlRfTUFYLiAgKi8KK3R5cGVkZWYgaW50IHJlZ29mZl90OworI2VuZGlm CisKKworI2lmZGVmIF9fVVNFX0dOVQorLyogVGhpcyBpcyB0aGUgc3RydWN0dXJlIHdlIHN0 b3JlIHJlZ2lzdGVyIG1hdGNoIGRhdGEgaW4uICBTZWUKKyAgIHJlZ2V4LnRleGluZm8gZm9y IGEgZnVsbCBkZXNjcmlwdGlvbiBvZiB3aGF0IHJlZ2lzdGVycyBtYXRjaC4gICovCitzdHJ1 Y3QgcmVfcmVnaXN0ZXJzCit7CisgIF9fcmVfc2l6ZV90IG51bV9yZWdzOworICByZWdvZmZf dCAqc3RhcnQ7CisgIHJlZ29mZl90ICplbmQ7Cit9OworCisKKy8qIElmICdyZWdzX2FsbG9j YXRlZCcgaXMgUkVHU19VTkFMTE9DQVRFRCBpbiB0aGUgcGF0dGVybiBidWZmZXIsCisgICAn cmVfbWF0Y2hfMicgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhdCBsZWFzdCB0aGlzIG1h bnkgcmVnaXN0ZXJzCisgICB0aGUgZmlyc3QgdGltZSBhICdyZWdzJyBzdHJ1Y3R1cmUgaXMg cGFzc2VkLiAgKi8KKyMgaWZuZGVmIFJFX05SRUdTCisjICBkZWZpbmUgUkVfTlJFR1MgMzAK KyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFBPU0lYIHNwZWNpZmljYXRpb24gZm9yIHJlZ2lz dGVycy4gIEFzaWRlIGZyb20gdGhlIGRpZmZlcmVudCBuYW1lcyB0aGFuCisgICAncmVfcmVn aXN0ZXJzJywgUE9TSVggdXNlcyBhbiBhcnJheSBvZiBzdHJ1Y3R1cmVzLCBpbnN0ZWFkIG9m IGEKKyAgIHN0cnVjdHVyZSBvZiBhcnJheXMuICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAg cmVnb2ZmX3Qgcm1fc287ICAvKiBCeXRlIG9mZnNldCBmcm9tIHN0cmluZydzIHN0YXJ0IHRv IHN1YnN0cmluZydzIHN0YXJ0LiAgKi8KKyAgcmVnb2ZmX3Qgcm1fZW87ICAvKiBCeXRlIG9m ZnNldCBmcm9tIHN0cmluZydzIHN0YXJ0IHRvIHN1YnN0cmluZydzIGVuZC4gICovCit9IHJl Z21hdGNoX3Q7CisMCisvKiBEZWNsYXJhdGlvbnMgZm9yIHJvdXRpbmVzLiAgKi8KKworI2lm ZGVmIF9fVVNFX0dOVQorLyogU2V0cyB0aGUgY3VycmVudCBkZWZhdWx0IHN5bnRheCB0byBT WU5UQVgsIGFuZCByZXR1cm4gdGhlIG9sZCBzeW50YXguCisgICBZb3UgY2FuIGFsc28gc2lt cGx5IGFzc2lnbiB0byB0aGUgJ3JlX3N5bnRheF9vcHRpb25zJyB2YXJpYWJsZS4gICovCitl eHRlcm4gcmVnX3N5bnRheF90IHJlX3NldF9zeW50YXggKHJlZ19zeW50YXhfdCBfX3N5bnRh eCk7CisKKy8qIENvbXBpbGUgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBQQVRURVJOLCB3aXRo IGxlbmd0aCBMRU5HVEgKKyAgIGFuZCBzeW50YXggZ2l2ZW4gYnkgdGhlIGdsb2JhbCAncmVf c3ludGF4X29wdGlvbnMnLCBpbnRvIHRoZSBidWZmZXIKKyAgIEJVRkZFUi4gIFJldHVybiBO VUxMIGlmIHN1Y2Nlc3NmdWwsIGFuZCBhbiBlcnJvciBzdHJpbmcgaWYgbm90LgorCisgICBU byBmcmVlIHRoZSBhbGxvY2F0ZWQgc3RvcmFnZSwgeW91IG11c3QgY2FsbCAncmVnZnJlZScg b24gQlVGRkVSLgorICAgTm90ZSB0aGF0IHRoZSB0cmFuc2xhdGUgdGFibGUgbXVzdCBlaXRo ZXIgaGF2ZSBiZWVuIGluaXRpYWxpemVkIGJ5CisgICAncmVnY29tcCcsIHdpdGggYSBtYWxs b2MnZWQgdmFsdWUsIG9yIHNldCB0byBOVUxMIGJlZm9yZSBjYWxsaW5nCisgICAncmVnZnJl ZScuICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKnJlX2NvbXBpbGVfcGF0dGVybiAoY29uc3Qg Y2hhciAqX19wYXR0ZXJuLCBzaXplX3QgX19sZW5ndGgsCisJCQkJICAgICAgIHN0cnVjdCBy ZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIpOworCisKKy8qIENvbXBpbGUgYSBmYXN0bWFw IGZvciB0aGUgY29tcGlsZWQgcGF0dGVybiBpbiBCVUZGRVI7IHVzZWQgdG8KKyAgIGFjY2Vs ZXJhdGUgc2VhcmNoZXMuICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsIGFuZCAtMiBpZiB3YXMg YW4KKyAgIGludGVybmFsIGVycm9yLiAgKi8KK2V4dGVybiBpbnQgcmVfY29tcGlsZV9mYXN0 bWFwIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyKTsKKworCisvKiBTZWFy Y2ggaW4gdGhlIHN0cmluZyBTVFJJTkcgKHdpdGggbGVuZ3RoIExFTkdUSCkgZm9yIHRoZSBw YXR0ZXJuCisgICBjb21waWxlZCBpbnRvIEJVRkZFUi4gIFN0YXJ0IHNlYXJjaGluZyBhdCBw b3NpdGlvbiBTVEFSVCwgZm9yIFJBTkdFCisgICBjaGFyYWN0ZXJzLiAgUmV0dXJuIHRoZSBz dGFydGluZyBwb3NpdGlvbiBvZiB0aGUgbWF0Y2gsIC0xIGZvciBubworICAgbWF0Y2gsIG9y IC0yIGZvciBhbiBpbnRlcm5hbCBlcnJvci4gIEFsc28gcmV0dXJuIHJlZ2lzdGVyCisgICBp bmZvcm1hdGlvbiBpbiBSRUdTIChpZiBSRUdTIGFuZCBCVUZGRVItPm5vX3N1YiBhcmUgbm9u emVybykuICAqLworZXh0ZXJuIHJlZ29mZl90IHJlX3NlYXJjaCAoc3RydWN0IHJlX3BhdHRl cm5fYnVmZmVyICpfX2J1ZmZlciwKKwkJCSAgIGNvbnN0IGNoYXIgKl9fU3RyaW5nLCByZWdv ZmZfdCBfX2xlbmd0aCwKKwkJCSAgIHJlZ29mZl90IF9fc3RhcnQsIHJlZ29mZl90IF9fcmFu Z2UsCisJCQkgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpfX3JlZ3MpOworCisKKy8qIExpa2Ug J3JlX3NlYXJjaCcsIGJ1dCBzZWFyY2ggaW4gdGhlIGNvbmNhdGVuYXRpb24gb2YgU1RSSU5H MSBhbmQKKyAgIFNUUklORzIuICBBbHNvLCBzdG9wIHNlYXJjaGluZyBhdCBpbmRleCBTVEFS VCArIFNUT1AuICAqLworZXh0ZXJuIHJlZ29mZl90IHJlX3NlYXJjaF8yIChzdHJ1Y3QgcmVf cGF0dGVybl9idWZmZXIgKl9fYnVmZmVyLAorCQkJICAgICBjb25zdCBjaGFyICpfX3N0cmlu ZzEsIHJlZ29mZl90IF9fbGVuZ3RoMSwKKwkJCSAgICAgY29uc3QgY2hhciAqX19zdHJpbmcy LCByZWdvZmZfdCBfX2xlbmd0aDIsCisJCQkgICAgIHJlZ29mZl90IF9fc3RhcnQsIHJlZ29m Zl90IF9fcmFuZ2UsCisJCQkgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKl9fcmVncywKKwkJ CSAgICAgcmVnb2ZmX3QgX19zdG9wKTsKKworCisvKiBMaWtlICdyZV9zZWFyY2gnLCBidXQg cmV0dXJuIGhvdyBtYW55IGNoYXJhY3RlcnMgaW4gU1RSSU5HIHRoZSByZWdleHAKKyAgIGlu IEJVRkZFUiBtYXRjaGVkLCBzdGFydGluZyBhdCBwb3NpdGlvbiBTVEFSVC4gICovCitleHRl cm4gcmVnb2ZmX3QgcmVfbWF0Y2ggKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZm ZXIsCisJCQkgIGNvbnN0IGNoYXIgKl9fU3RyaW5nLCByZWdvZmZfdCBfX2xlbmd0aCwKKwkJ CSAgcmVnb2ZmX3QgX19zdGFydCwgc3RydWN0IHJlX3JlZ2lzdGVycyAqX19yZWdzKTsKKwor CisvKiBSZWxhdGVzIHRvICdyZV9tYXRjaCcgYXMgJ3JlX3NlYXJjaF8yJyByZWxhdGVzIHRv ICdyZV9zZWFyY2gnLiAgKi8KK2V4dGVybiByZWdvZmZfdCByZV9tYXRjaF8yIChzdHJ1Y3Qg cmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyLAorCQkJICAgIGNvbnN0IGNoYXIgKl9fc3Ry aW5nMSwgcmVnb2ZmX3QgX19sZW5ndGgxLAorCQkJICAgIGNvbnN0IGNoYXIgKl9fc3RyaW5n MiwgcmVnb2ZmX3QgX19sZW5ndGgyLAorCQkJICAgIHJlZ29mZl90IF9fc3RhcnQsIHN0cnVj dCByZV9yZWdpc3RlcnMgKl9fcmVncywKKwkJCSAgICByZWdvZmZfdCBfX3N0b3ApOworCisK Ky8qIFNldCBSRUdTIHRvIGhvbGQgTlVNX1JFR1MgcmVnaXN0ZXJzLCBzdG9yaW5nIHRoZW0g aW4gU1RBUlRTIGFuZAorICAgRU5EUy4gIFN1YnNlcXVlbnQgbWF0Y2hlcyB1c2luZyBCVUZG RVIgYW5kIFJFR1Mgd2lsbCB1c2UgdGhpcyBtZW1vcnkKKyAgIGZvciByZWNvcmRpbmcgcmVn aXN0ZXIgaW5mb3JtYXRpb24uICBTVEFSVFMgYW5kIEVORFMgbXVzdCBiZQorICAgYWxsb2Nh dGVkIHdpdGggbWFsbG9jLCBhbmQgbXVzdCBlYWNoIGJlIGF0IGxlYXN0ICdOVU1fUkVHUyAq IHNpemVvZgorICAgKHJlZ29mZl90KScgYnl0ZXMgbG9uZy4KKworICAgSWYgTlVNX1JFR1Mg PT0gMCwgdGhlbiBzdWJzZXF1ZW50IG1hdGNoZXMgc2hvdWxkIGFsbG9jYXRlIHRoZWlyIG93 bgorICAgcmVnaXN0ZXIgZGF0YS4KKworICAgVW5sZXNzIHRoaXMgZnVuY3Rpb24gaXMgY2Fs bGVkLCB0aGUgZmlyc3Qgc2VhcmNoIG9yIG1hdGNoIHVzaW5nCisgICBCVUZGRVIgd2lsbCBh bGxvY2F0ZSBpdHMgb3duIHJlZ2lzdGVyIGRhdGEsIHdpdGhvdXQKKyAgIGZyZWVpbmcgdGhl IG9sZCBkYXRhLiAgKi8KK2V4dGVybiB2b2lkIHJlX3NldF9yZWdpc3RlcnMgKHN0cnVjdCBy ZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIsCisJCQkgICAgICBzdHJ1Y3QgcmVfcmVnaXN0 ZXJzICpfX3JlZ3MsCisJCQkgICAgICBfX3JlX3NpemVfdCBfX251bV9yZWdzLAorCQkJICAg ICAgcmVnb2ZmX3QgKl9fc3RhcnRzLCByZWdvZmZfdCAqX19lbmRzKTsKKyNlbmRpZgkvKiBV c2UgR05VICovCisKKyNpZiBkZWZpbmVkIF9SRUdFWF9SRV9DT01QIHx8IChkZWZpbmVkIF9M SUJDICYmIGRlZmluZWQgX19VU0VfTUlTQykKKyMgaWZuZGVmIF9DUkFZCisvKiA0LjIgYnNk IGNvbXBhdGliaWxpdHkuICAqLworZXh0ZXJuIGNoYXIgKnJlX2NvbXAgKGNvbnN0IGNoYXIg Kik7CitleHRlcm4gaW50IHJlX2V4ZWMgKGNvbnN0IGNoYXIgKik7CisjIGVuZGlmCisjZW5k aWYKKworLyogRm9yIHBsYWluICdyZXN0cmljdCcsIHVzZSBnbGliYydzIF9fcmVzdHJpY3Qg aWYgZGVmaW5lZC4KKyAgIE90aGVyd2lzZSwgR0NDIDIuOTUgYW5kIGxhdGVyIGhhdmUgIl9f cmVzdHJpY3QiOyBDOTkgY29tcGlsZXJzIGhhdmUKKyAgICJyZXN0cmljdCIsIGFuZCAiY29u ZmlndXJlIiBtYXkgaGF2ZSBkZWZpbmVkICJyZXN0cmljdCIuCisgICBPdGhlciBjb21waWxl cnMgdXNlIF9fcmVzdHJpY3QsIF9fcmVzdHJpY3RfXywgYW5kIF9SZXN0cmljdCwgYW5kCisg ICAnY29uZmlndXJlJyBtaWdodCAjZGVmaW5lICdyZXN0cmljdCcgdG8gdGhvc2Ugd29yZHMs IHNvIHBpY2sgYQorICAgZGlmZmVyZW50IG5hbWUuICAqLworI2lmbmRlZiBfUmVzdHJpY3Rf CisjIGlmIGRlZmluZWQgX19yZXN0cmljdCB8fCAyIDwgX19HTlVDX18gKyAoOTUgPD0gX19H TlVDX01JTk9SX18pCisjICBkZWZpbmUgX1Jlc3RyaWN0XyBfX3Jlc3RyaWN0CisjIGVsaWYg MTk5OTAxTCA8PSBfX1NURENfVkVSU0lPTl9fIHx8IGRlZmluZWQgcmVzdHJpY3QKKyMgIGRl ZmluZSBfUmVzdHJpY3RfIHJlc3RyaWN0CisjIGVsc2UKKyMgIGRlZmluZSBfUmVzdHJpY3Rf CisjIGVuZGlmCisjZW5kaWYKKy8qIEZvciBbcmVzdHJpY3RdLCB1c2UgZ2xpYmMncyBfX3Jl c3RyaWN0X2FyciBpZiBhdmFpbGFibGUuCisgICBPdGhlcndpc2UsIEdDQyAzLjEgKG5vdCBp biBDKysgbW9kZSkgYW5kIEM5OSBzdXBwb3J0IFtyZXN0cmljdF0uICAqLworI2lmbmRlZiBf UmVzdHJpY3RfYXJyXworIyBpZmRlZiBfX3Jlc3RyaWN0X2FycgorIyAgZGVmaW5lIF9SZXN0 cmljdF9hcnJfIF9fcmVzdHJpY3RfYXJyCisjIGVsaWYgKCgxOTk5MDFMIDw9IF9fU1REQ19W RVJTSU9OX18gfHwgMyA8IF9fR05VQ19fICsgKDEgPD0gX19HTlVDX01JTk9SX18pKSBcCisg ICAgICAgICYmICFkZWZpbmVkIF9fR05VR19fKQorIyAgZGVmaW5lIF9SZXN0cmljdF9hcnJf IF9SZXN0cmljdF8KKyMgZWxzZQorIyAgZGVmaW5lIF9SZXN0cmljdF9hcnJfCisjIGVuZGlm CisjZW5kaWYKKworLyogUE9TSVggY29tcGF0aWJpbGl0eS4gICovCitleHRlcm4gaW50IHJl Z2NvbXAgKHJlZ2V4X3QgKl9SZXN0cmljdF8gX19wcmVnLAorCQkgICAgY29uc3QgY2hhciAq X1Jlc3RyaWN0XyBfX3BhdHRlcm4sCisJCSAgICBpbnQgX19jZmxhZ3MpOworCitleHRlcm4g aW50IHJlZ2V4ZWMgKGNvbnN0IHJlZ2V4X3QgKl9SZXN0cmljdF8gX19wcmVnLAorCQkgICAg Y29uc3QgY2hhciAqX1Jlc3RyaWN0XyBfX1N0cmluZywgc2l6ZV90IF9fbm1hdGNoLAorCQkg ICAgcmVnbWF0Y2hfdCBfX3BtYXRjaFtfUmVzdHJpY3RfYXJyX10sCisJCSAgICBpbnQgX19l ZmxhZ3MpOworCitleHRlcm4gc2l6ZV90IHJlZ2Vycm9yIChpbnQgX19lcnJjb2RlLCBjb25z dCByZWdleF90ICpfUmVzdHJpY3RfIF9fcHJlZywKKwkJCWNoYXIgKl9SZXN0cmljdF8gX19l cnJidWYsIHNpemVfdCBfX2VycmJ1Zl9zaXplKTsKKworZXh0ZXJuIHZvaWQgcmVnZnJlZSAo cmVnZXhfdCAqX19wcmVnKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgkv KiBDKysgKi8KKworI2VuZGlmIC8qIHJlZ2V4LmggKi8KZGlmZiAtLWdpdCBhL2xpYi9yZWdl eF9pbnRlcm5hbC5jIGIvbGliL3JlZ2V4X2ludGVybmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uMzIzNzM1NjVlNgotLS0gL2Rldi9udWxsCisrKyBiL2xp Yi9yZWdleF9pbnRlcm5hbC5jCkBAIC0wLDAgKzEsMTc0MCBAQAorLyogRXh0ZW5kZWQgcmVn dWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGFuZCBzZWFyY2ggbGlicmFyeS4KKyAgIENvcHly aWdodCAoQykgMjAwMi0yMDE4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAg VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBDb250cmlidXRl ZCBieSBJc2FtdSBIYXNlZ2F3YSA8aXNhbXVAeWFtYXRvLmlibS5jb20+LgorCisgICBUaGUg R05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBM aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdp dGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCisgICA8aHR0cHM6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworc3RhdGljIHZvaWQgcmVfc3RyaW5nX2NvbnN0cnVj dF9jb21tb24gKGNvbnN0IGNoYXIgKnN0ciwgSWR4IGxlbiwKKwkJCQkJcmVfc3RyaW5nX3Qg KnBzdHIsCisJCQkJCVJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLCBib29sIGljYXNlLAorCQkJ CQljb25zdCByZV9kZmFfdCAqZGZhKTsKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICpjcmVhdGVf Y2lfbmV3c3RhdGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkJCSAgY29uc3QgcmVfbm9k ZV9zZXQgKm5vZGVzLAorCQkJCQkgIHJlX2hhc2h2YWxfdCBoYXNoKTsKK3N0YXRpYyByZV9k ZmFzdGF0ZV90ICpjcmVhdGVfY2RfbmV3c3RhdGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisJ CQkJCSAgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzLAorCQkJCQkgIHVuc2lnbmVkIGludCBj b250ZXh0LAorCQkJCQkgIHJlX2hhc2h2YWxfdCBoYXNoKTsKK3N0YXRpYyByZWdfZXJyY29k ZV90IHJlX3N0cmluZ19yZWFsbG9jX2J1ZmZlcnMgKHJlX3N0cmluZ190ICpwc3RyLAorCQkJ CQkJSWR4IG5ld19idWZfbGVuKTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIHZv aWQgYnVpbGRfd2NzX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpOworc3RhdGljIHJlZ19l cnJjb2RlX3QgYnVpbGRfd2NzX3VwcGVyX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpOwor I2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCitzdGF0aWMgdm9pZCBidWlsZF91cHBlcl9i dWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKTsKK3N0YXRpYyB2b2lkIHJlX3N0cmluZ190cmFu c2xhdGVfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cik7CitzdGF0aWMgdW5zaWduZWQgaW50 IHJlX3N0cmluZ19jb250ZXh0X2F0IChjb25zdCByZV9zdHJpbmdfdCAqaW5wdXQsIElkeCBp ZHgsCisJCQkJCSAgaW50IGVmbGFncykgX19hdHRyaWJ1dGVfXyAoKHB1cmUpKTsKKwwKKy8q IEZ1bmN0aW9ucyBmb3Igc3RyaW5nIG9wZXJhdGlvbi4gICovCisKKy8qIFRoaXMgZnVuY3Rp b24gYWxsb2NhdGUgdGhlIGJ1ZmZlcnMuICBJdCBpcyBuZWNlc3NhcnkgdG8gY2FsbAorICAg cmVfc3RyaW5nX3JlY29uc3RydWN0IGJlZm9yZSB1c2luZyB0aGUgb2JqZWN0LiAgKi8KKwor c3RhdGljIHJlZ19lcnJjb2RlX3QKK19fYXR0cmlidXRlX3dhcm5fdW51c2VkX3Jlc3VsdF9f CityZV9zdHJpbmdfYWxsb2NhdGUgKHJlX3N0cmluZ190ICpwc3RyLCBjb25zdCBjaGFyICpz dHIsIElkeCBsZW4sIElkeCBpbml0X2xlbiwKKwkJICAgIFJFX1RSQU5TTEFURV9UWVBFIHRy YW5zLCBib29sIGljYXNlLCBjb25zdCByZV9kZmFfdCAqZGZhKQoreworICByZWdfZXJyY29k ZV90IHJldDsKKyAgSWR4IGluaXRfYnVmX2xlbjsKKworICAvKiBFbnN1cmUgYXQgbGVhc3Qg b25lIGNoYXJhY3RlciBmaXRzIGludG8gdGhlIGJ1ZmZlcnMuICAqLworICBpZiAoaW5pdF9s ZW4gPCBkZmEtPm1iX2N1cl9tYXgpCisgICAgaW5pdF9sZW4gPSBkZmEtPm1iX2N1cl9tYXg7 CisgIGluaXRfYnVmX2xlbiA9IChsZW4gKyAxIDwgaW5pdF9sZW4pID8gbGVuICsgMTogaW5p dF9sZW47CisgIHJlX3N0cmluZ19jb25zdHJ1Y3RfY29tbW9uIChzdHIsIGxlbiwgcHN0ciwg dHJhbnMsIGljYXNlLCBkZmEpOworCisgIHJldCA9IHJlX3N0cmluZ19yZWFsbG9jX2J1ZmZl cnMgKHBzdHIsIGluaXRfYnVmX2xlbik7CisgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9S LCAwKSkKKyAgICByZXR1cm4gcmV0OworCisgIHBzdHItPndvcmRfY2hhciA9IGRmYS0+d29y ZF9jaGFyOworICBwc3RyLT53b3JkX29wc191c2VkID0gZGZhLT53b3JkX29wc191c2VkOwor ICBwc3RyLT5tYnMgPSBwc3RyLT5tYnNfYWxsb2NhdGVkID8gcHN0ci0+bWJzIDogKHVuc2ln bmVkIGNoYXIgKikgc3RyOworICBwc3RyLT52YWxpZF9sZW4gPSAocHN0ci0+bWJzX2FsbG9j YXRlZCB8fCBkZmEtPm1iX2N1cl9tYXggPiAxKSA/IDAgOiBsZW47CisgIHBzdHItPnZhbGlk X3Jhd19sZW4gPSBwc3RyLT52YWxpZF9sZW47CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30K KworLyogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZSB0aGUgYnVmZmVycywgYW5kIGluaXRpYWxp emUgdGhlbS4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitfX2F0dHJpYnV0ZV93YXJu X3VudXNlZF9yZXN1bHRfXworcmVfc3RyaW5nX2NvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBz dHIsIGNvbnN0IGNoYXIgKnN0ciwgSWR4IGxlbiwKKwkJICAgICBSRV9UUkFOU0xBVEVfVFlQ RSB0cmFucywgYm9vbCBpY2FzZSwgY29uc3QgcmVfZGZhX3QgKmRmYSkKK3sKKyAgcmVnX2Vy cmNvZGVfdCByZXQ7CisgIG1lbXNldCAocHN0ciwgJ1wwJywgc2l6ZW9mIChyZV9zdHJpbmdf dCkpOworICByZV9zdHJpbmdfY29uc3RydWN0X2NvbW1vbiAoc3RyLCBsZW4sIHBzdHIsIHRy YW5zLCBpY2FzZSwgZGZhKTsKKworICBpZiAobGVuID4gMCkKKyAgICB7CisgICAgICByZXQg PSByZV9zdHJpbmdfcmVhbGxvY19idWZmZXJzIChwc3RyLCBsZW4gKyAxKTsKKyAgICAgIGlm IChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gcmV0OworICAgIH0KKyAg cHN0ci0+bWJzID0gcHN0ci0+bWJzX2FsbG9jYXRlZCA/IHBzdHItPm1icyA6ICh1bnNpZ25l ZCBjaGFyICopIHN0cjsKKworICBpZiAoaWNhc2UpCisgICAgeworI2lmZGVmIFJFX0VOQUJM RV9JMThOCisgICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKwl7CisJICB3aGlsZSAo MSkKKwkgICAgeworCSAgICAgIHJldCA9IGJ1aWxkX3djc191cHBlcl9idWZmZXIgKHBzdHIp OworCSAgICAgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJcmV0dXJuIHJl dDsKKwkgICAgICBpZiAocHN0ci0+dmFsaWRfcmF3X2xlbiA+PSBsZW4pCisJCWJyZWFrOwor CSAgICAgIGlmIChwc3RyLT5idWZzX2xlbiA+IHBzdHItPnZhbGlkX2xlbiArIGRmYS0+bWJf Y3VyX21heCkKKwkJYnJlYWs7CisJICAgICAgcmV0ID0gcmVfc3RyaW5nX3JlYWxsb2NfYnVm ZmVycyAocHN0ciwgcHN0ci0+YnVmc19sZW4gKiAyKTsKKwkgICAgICBpZiAoQkUgKHJldCAh PSBSRUdfTk9FUlJPUiwgMCkpCisJCXJldHVybiByZXQ7CisJICAgIH0KKwl9CisgICAgICBl bHNlCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCisJYnVpbGRfdXBwZXJfYnVmZmVy IChwc3RyKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4K KyAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorCWJ1aWxkX3djc19idWZmZXIgKHBz dHIpOworICAgICAgZWxzZQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICAqLworCXsKKwkg IGlmICh0cmFucyAhPSBOVUxMKQorCSAgICByZV9zdHJpbmdfdHJhbnNsYXRlX2J1ZmZlciAo cHN0cik7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBwc3RyLT52YWxpZF9sZW4gPSBwc3Ry LT5idWZzX2xlbjsKKwkgICAgICBwc3RyLT52YWxpZF9yYXdfbGVuID0gcHN0ci0+YnVmc19s ZW47CisJICAgIH0KKwl9CisgICAgfQorCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKwor LyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgcmVfc3RyaW5nX2FsbG9jYXRlLCBhbmQgcmVfc3Ry aW5nX2NvbnN0cnVjdC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitfX2F0dHJpYnV0 ZV93YXJuX3VudXNlZF9yZXN1bHRfXworcmVfc3RyaW5nX3JlYWxsb2NfYnVmZmVycyAocmVf c3RyaW5nX3QgKnBzdHIsIElkeCBuZXdfYnVmX2xlbikKK3sKKyNpZmRlZiBSRV9FTkFCTEVf STE4TgorICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisgICAgeworICAgICAgd2ludF90 ICpuZXdfd2NzOworCisgICAgICAvKiBBdm9pZCBvdmVyZmxvdyBpbiByZWFsbG9jLiAgKi8K KyAgICAgIGNvbnN0IHNpemVfdCBtYXhfb2JqZWN0X3NpemUgPSBNQVggKHNpemVvZiAod2lu dF90KSwgc2l6ZW9mIChJZHgpKTsKKyAgICAgIGlmIChCRSAoTUlOIChJRFhfTUFYLCBTSVpF X01BWCAvIG1heF9vYmplY3Rfc2l6ZSkgPCBuZXdfYnVmX2xlbiwgMCkpCisJcmV0dXJuIFJF R19FU1BBQ0U7CisKKyAgICAgIG5ld193Y3MgPSByZV9yZWFsbG9jIChwc3RyLT53Y3MsIHdp bnRfdCwgbmV3X2J1Zl9sZW4pOworICAgICAgaWYgKEJFIChuZXdfd2NzID09IE5VTEwsIDAp KQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgcHN0ci0+d2NzID0gbmV3X3djczsKKyAg ICAgIGlmIChwc3RyLT5vZmZzZXRzICE9IE5VTEwpCisJeworCSAgSWR4ICpuZXdfb2Zmc2V0 cyA9IHJlX3JlYWxsb2MgKHBzdHItPm9mZnNldHMsIElkeCwgbmV3X2J1Zl9sZW4pOworCSAg aWYgKEJFIChuZXdfb2Zmc2V0cyA9PSBOVUxMLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BB Q0U7CisJICBwc3RyLT5vZmZzZXRzID0gbmV3X29mZnNldHM7CisJfQorICAgIH0KKyNlbmRp ZiAvKiBSRV9FTkFCTEVfSTE4TiAgKi8KKyAgaWYgKHBzdHItPm1ic19hbGxvY2F0ZWQpCisg ICAgeworICAgICAgdW5zaWduZWQgY2hhciAqbmV3X21icyA9IHJlX3JlYWxsb2MgKHBzdHIt Pm1icywgdW5zaWduZWQgY2hhciwKKwkJCQkJICAgbmV3X2J1Zl9sZW4pOworICAgICAgaWYg KEJFIChuZXdfbWJzID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAg cHN0ci0+bWJzID0gbmV3X21iczsKKyAgICB9CisgIHBzdHItPmJ1ZnNfbGVuID0gbmV3X2J1 Zl9sZW47CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworCitzdGF0aWMgdm9pZAorcmVf c3RyaW5nX2NvbnN0cnVjdF9jb21tb24gKGNvbnN0IGNoYXIgKnN0ciwgSWR4IGxlbiwgcmVf c3RyaW5nX3QgKnBzdHIsCisJCQkgICAgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsIGJvb2wg aWNhc2UsCisJCQkgICAgY29uc3QgcmVfZGZhX3QgKmRmYSkKK3sKKyAgcHN0ci0+cmF3X21i cyA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHN0cjsKKyAgcHN0ci0+bGVuID0gbGVuOwor ICBwc3RyLT5yYXdfbGVuID0gbGVuOworICBwc3RyLT50cmFucyA9IHRyYW5zOworICBwc3Ry LT5pY2FzZSA9IGljYXNlOworICBwc3RyLT5tYnNfYWxsb2NhdGVkID0gKHRyYW5zICE9IE5V TEwgfHwgaWNhc2UpOworICBwc3RyLT5tYl9jdXJfbWF4ID0gZGZhLT5tYl9jdXJfbWF4Owor ICBwc3RyLT5pc191dGY4ID0gZGZhLT5pc191dGY4OworICBwc3RyLT5tYXBfbm90YXNjaWkg PSBkZmEtPm1hcF9ub3Rhc2NpaTsKKyAgcHN0ci0+c3RvcCA9IHBzdHItPmxlbjsKKyAgcHN0 ci0+cmF3X3N0b3AgPSBwc3RyLT5zdG9wOworfQorCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4K KworLyogQnVpbGQgd2lkZSBjaGFyYWN0ZXIgYnVmZmVyIFBTVFItPldDUy4KKyAgIElmIHRo ZSBieXRlIHNlcXVlbmNlIG9mIHRoZSBzdHJpbmcgYXJlOgorICAgICA8bWIxPigwKSwgPG1i MT4oMSksIDxtYjI+KDApLCA8bWIyPigxKSwgPHNiMz4KKyAgIFRoZW4gd2lkZSBjaGFyYWN0 ZXIgYnVmZmVyIHdpbGwgYmU6CisgICAgIDx3YzE+ICAgLCBXRU9GICAgICwgPHdjMj4gICAs IFdFT0YgICAgLCA8d2MzPgorICAgV2UgdXNlIFdFT0YgZm9yIHBhZGRpbmcsIHRoZXkgaW5k aWNhdGUgdGhhdCB0aGUgcG9zaXRpb24gaXNuJ3QKKyAgIGEgZmlyc3QgYnl0ZSBvZiBhIG11 bHRpYnl0ZSBjaGFyYWN0ZXIuCisKKyAgIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGFzc3Vt ZXMgUFNUUi0+VkFMSURfTEVOIGVsZW1lbnRzIGFyZSBhbHJlYWR5CisgICBidWlsdCBhbmQg c3RhcnRzIGZyb20gUFNUUi0+VkFMSURfTEVOLiAgKi8KKworc3RhdGljIHZvaWQKK2J1aWxk X3djc19idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQoreworI2lmZGVmIF9MSUJDCisgIHVu c2lnbmVkIGNoYXIgYnVmW01CX0xFTl9NQVhdOworICBhc3NlcnQgKE1CX0xFTl9NQVggPj0g cHN0ci0+bWJfY3VyX21heCk7CisjZWxzZQorICB1bnNpZ25lZCBjaGFyIGJ1Zls2NF07Cisj ZW5kaWYKKyAgbWJzdGF0ZV90IHByZXZfc3Q7CisgIElkeCBieXRlX2lkeCwgZW5kX2lkeCwg cmVtYWluX2xlbjsKKyAgc2l6ZV90IG1iY2xlbjsKKworICAvKiBCdWlsZCB0aGUgYnVmZmVy cyBmcm9tIHBzdHItPnZhbGlkX2xlbiB0byBlaXRoZXIgcHN0ci0+bGVuIG9yCisgICAgIHBz dHItPmJ1ZnNfbGVuLiAgKi8KKyAgZW5kX2lkeCA9IChwc3RyLT5idWZzX2xlbiA+IHBzdHIt PmxlbikgPyBwc3RyLT5sZW4gOiBwc3RyLT5idWZzX2xlbjsKKyAgZm9yIChieXRlX2lkeCA9 IHBzdHItPnZhbGlkX2xlbjsgYnl0ZV9pZHggPCBlbmRfaWR4OykKKyAgICB7CisgICAgICB3 Y2hhcl90IHdjOworICAgICAgY29uc3QgY2hhciAqcDsKKworICAgICAgcmVtYWluX2xlbiA9 IGVuZF9pZHggLSBieXRlX2lkeDsKKyAgICAgIHByZXZfc3QgPSBwc3RyLT5jdXJfc3RhdGU7 CisgICAgICAvKiBBcHBseSB0aGUgdHJhbnNsYXRpb24gaWYgd2UgbmVlZC4gICovCisgICAg ICBpZiAoQkUgKHBzdHItPnRyYW5zICE9IE5VTEwsIDApKQorCXsKKwkgIGludCBpLCBjaDsK KworCSAgZm9yIChpID0gMDsgaSA8IHBzdHItPm1iX2N1cl9tYXggJiYgaSA8IHJlbWFpbl9s ZW47ICsraSkKKwkgICAgeworCSAgICAgIGNoID0gcHN0ci0+cmF3X21icyBbcHN0ci0+cmF3 X21ic19pZHggKyBieXRlX2lkeCArIGldOworCSAgICAgIGJ1ZltpXSA9IHBzdHItPm1ic1ti eXRlX2lkeCArIGldID0gcHN0ci0+dHJhbnNbY2hdOworCSAgICB9CisJICBwID0gKGNvbnN0 IGNoYXIgKikgYnVmOworCX0KKyAgICAgIGVsc2UKKwlwID0gKGNvbnN0IGNoYXIgKikgcHN0 ci0+cmF3X21icyArIHBzdHItPnJhd19tYnNfaWR4ICsgYnl0ZV9pZHg7CisgICAgICBtYmNs ZW4gPSBfX21icnRvd2MgKCZ3YywgcCwgcmVtYWluX2xlbiwgJnBzdHItPmN1cl9zdGF0ZSk7 CisgICAgICBpZiAoQkUgKG1iY2xlbiA9PSAoc2l6ZV90KSAtMSB8fCBtYmNsZW4gPT0gMAor CSAgICAgIHx8IChtYmNsZW4gPT0gKHNpemVfdCkgLTIgJiYgcHN0ci0+YnVmc19sZW4gPj0g cHN0ci0+bGVuKSwgMCkpCisJeworCSAgLyogV2UgdHJlYXQgdGhlc2UgY2FzZXMgYXMgYSBz aW5nbGVieXRlIGNoYXJhY3Rlci4gICovCisJICBtYmNsZW4gPSAxOworCSAgd2MgPSAod2No YXJfdCkgcHN0ci0+cmF3X21ic1twc3RyLT5yYXdfbWJzX2lkeCArIGJ5dGVfaWR4XTsKKwkg IGlmIChCRSAocHN0ci0+dHJhbnMgIT0gTlVMTCwgMCkpCisJICAgIHdjID0gcHN0ci0+dHJh bnNbd2NdOworCSAgcHN0ci0+Y3VyX3N0YXRlID0gcHJldl9zdDsKKwl9CisgICAgICBlbHNl IGlmIChCRSAobWJjbGVuID09IChzaXplX3QpIC0yLCAwKSkKKwl7CisJICAvKiBUaGUgYnVm ZmVyIGRvZXNuJ3QgaGF2ZSBlbm91Z2ggc3BhY2UsIGZpbmlzaCB0byBidWlsZC4gICovCisJ ICBwc3RyLT5jdXJfc3RhdGUgPSBwcmV2X3N0OworCSAgYnJlYWs7CisJfQorCisgICAgICAv KiBXcml0ZSB3aWRlIGNoYXJhY3RlciBhbmQgcGFkZGluZy4gICovCisgICAgICBwc3RyLT53 Y3NbYnl0ZV9pZHgrK10gPSB3YzsKKyAgICAgIC8qIFdyaXRlIHBhZGRpbmdzLiAgKi8KKyAg ICAgIGZvciAocmVtYWluX2xlbiA9IGJ5dGVfaWR4ICsgbWJjbGVuIC0gMTsgYnl0ZV9pZHgg PCByZW1haW5fbGVuIDspCisJcHN0ci0+d2NzW2J5dGVfaWR4KytdID0gV0VPRjsKKyAgICB9 CisgIHBzdHItPnZhbGlkX2xlbiA9IGJ5dGVfaWR4OworICBwc3RyLT52YWxpZF9yYXdfbGVu ID0gYnl0ZV9pZHg7Cit9CisKKy8qIEJ1aWxkIHdpZGUgY2hhcmFjdGVyIGJ1ZmZlciBQU1RS LT5XQ1MgbGlrZSBidWlsZF93Y3NfYnVmZmVyLAorICAgYnV0IGZvciBSRUdfSUNBU0UuICAq LworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorX19hdHRyaWJ1dGVfd2Fybl91bnVzZWRfcmVz dWx0X18KK2J1aWxkX3djc191cHBlcl9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQorewor ICBtYnN0YXRlX3QgcHJldl9zdDsKKyAgSWR4IHNyY19pZHgsIGJ5dGVfaWR4LCBlbmRfaWR4 LCByZW1haW5fbGVuOworICBzaXplX3QgbWJjbGVuOworI2lmZGVmIF9MSUJDCisgIGNoYXIg YnVmW01CX0xFTl9NQVhdOworICBhc3NlcnQgKE1CX0xFTl9NQVggPj0gcHN0ci0+bWJfY3Vy X21heCk7CisjZWxzZQorICBjaGFyIGJ1Zls2NF07CisjZW5kaWYKKworICBieXRlX2lkeCA9 IHBzdHItPnZhbGlkX2xlbjsKKyAgZW5kX2lkeCA9IChwc3RyLT5idWZzX2xlbiA+IHBzdHIt PmxlbikgPyBwc3RyLT5sZW4gOiBwc3RyLT5idWZzX2xlbjsKKworICAvKiBUaGUgZm9sbG93 aW5nIG9wdGltaXphdGlvbiBhc3N1bWVzIHRoYXQgQVNDSUkgY2hhcmFjdGVycyBjYW4gYmUK KyAgICAgbWFwcGVkIHRvIHdpZGUgY2hhcmFjdGVycyB3aXRoIGEgc2ltcGxlIGNhc3QuICAq LworICBpZiAoISBwc3RyLT5tYXBfbm90YXNjaWkgJiYgcHN0ci0+dHJhbnMgPT0gTlVMTCAm JiAhcHN0ci0+b2Zmc2V0c19uZWVkZWQpCisgICAgeworICAgICAgd2hpbGUgKGJ5dGVfaWR4 IDwgZW5kX2lkeCkKKwl7CisJICB3Y2hhcl90IHdjOworCisJICBpZiAoaXNhc2NpaSAocHN0 ci0+cmF3X21ic1twc3RyLT5yYXdfbWJzX2lkeCArIGJ5dGVfaWR4XSkKKwkgICAgICAmJiBt YnNpbml0ICgmcHN0ci0+Y3VyX3N0YXRlKSkKKwkgICAgeworCSAgICAgIC8qIEluIGNhc2Ug b2YgYSBzaW5nbGVieXRlIGNoYXJhY3Rlci4gICovCisJICAgICAgcHN0ci0+bWJzW2J5dGVf aWR4XQorCQk9IHRvdXBwZXIgKHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBi eXRlX2lkeF0pOworCSAgICAgIC8qIFRoZSBuZXh0IHN0ZXAgdXNlcyB0aGUgYXNzdW1wdGlv biB0aGF0IHdjaGFyX3QgaXMgZW5jb2RlZAorCQkgQVNDSUktc2FmZTogYWxsIEFTQ0lJIHZh bHVlcyBjYW4gYmUgY29udmVydGVkIGxpa2UgdGhpcy4gICovCisJICAgICAgcHN0ci0+d2Nz W2J5dGVfaWR4XSA9ICh3Y2hhcl90KSBwc3RyLT5tYnNbYnl0ZV9pZHhdOworCSAgICAgICsr Ynl0ZV9pZHg7CisJICAgICAgY29udGludWU7CisJICAgIH0KKworCSAgcmVtYWluX2xlbiA9 IGVuZF9pZHggLSBieXRlX2lkeDsKKwkgIHByZXZfc3QgPSBwc3RyLT5jdXJfc3RhdGU7CisJ ICBtYmNsZW4gPSBfX21icnRvd2MgKCZ3YywKKwkJCSAgICAgICgoY29uc3QgY2hhciAqKSBw c3RyLT5yYXdfbWJzICsgcHN0ci0+cmF3X21ic19pZHgKKwkJCSAgICAgICArIGJ5dGVfaWR4 KSwgcmVtYWluX2xlbiwgJnBzdHItPmN1cl9zdGF0ZSk7CisJICBpZiAoQkUgKG1iY2xlbiA8 IChzaXplX3QpIC0yLCAxKSkKKwkgICAgeworCSAgICAgIHdjaGFyX3Qgd2N1ID0gX190b3d1 cHBlciAod2MpOworCSAgICAgIGlmICh3Y3UgIT0gd2MpCisJCXsKKwkJICBzaXplX3QgbWJj ZGxlbjsKKworCQkgIG1iY2RsZW4gPSBfX3djcnRvbWIgKGJ1Ziwgd2N1LCAmcHJldl9zdCk7 CisJCSAgaWYgKEJFIChtYmNsZW4gPT0gbWJjZGxlbiwgMSkpCisJCSAgICBtZW1jcHkgKHBz dHItPm1icyArIGJ5dGVfaWR4LCBidWYsIG1iY2xlbik7CisJCSAgZWxzZQorCQkgICAgewor CQkgICAgICBzcmNfaWR4ID0gYnl0ZV9pZHg7CisJCSAgICAgIGdvdG8gb2Zmc2V0c19uZWVk ZWQ7CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlCisJCW1lbWNweSAocHN0ci0+bWJzICsg Ynl0ZV9pZHgsCisJCQlwc3RyLT5yYXdfbWJzICsgcHN0ci0+cmF3X21ic19pZHggKyBieXRl X2lkeCwgbWJjbGVuKTsKKwkgICAgICBwc3RyLT53Y3NbYnl0ZV9pZHgrK10gPSB3Y3U7CisJ ICAgICAgLyogV3JpdGUgcGFkZGluZ3MuICAqLworCSAgICAgIGZvciAocmVtYWluX2xlbiA9 IGJ5dGVfaWR4ICsgbWJjbGVuIC0gMTsgYnl0ZV9pZHggPCByZW1haW5fbGVuIDspCisJCXBz dHItPndjc1tieXRlX2lkeCsrXSA9IFdFT0Y7CisJICAgIH0KKwkgIGVsc2UgaWYgKG1iY2xl biA9PSAoc2l6ZV90KSAtMSB8fCBtYmNsZW4gPT0gMAorCQkgICB8fCAobWJjbGVuID09IChz aXplX3QpIC0yICYmIHBzdHItPmJ1ZnNfbGVuID49IHBzdHItPmxlbikpCisJICAgIHsKKwkg ICAgICAvKiBJdCBpcyBhbiBpbnZhbGlkIGNoYXJhY3RlciwgYW4gaW5jb21wbGV0ZSBjaGFy YWN0ZXIKKwkJIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgb3IgJ1wwJy4gIEp1c3QgdXNl IHRoZSBieXRlLiAgKi8KKwkgICAgICBpbnQgY2ggPSBwc3RyLT5yYXdfbWJzW3BzdHItPnJh d19tYnNfaWR4ICsgYnl0ZV9pZHhdOworCSAgICAgIHBzdHItPm1ic1tieXRlX2lkeF0gPSBj aDsKKwkgICAgICAvKiBBbmQgYWxzbyBjYXN0IGl0IHRvIHdpZGUgY2hhci4gICovCisJICAg ICAgcHN0ci0+d2NzW2J5dGVfaWR4KytdID0gKHdjaGFyX3QpIGNoOworCSAgICAgIGlmIChC RSAobWJjbGVuID09IChzaXplX3QpIC0xLCAwKSkKKwkJcHN0ci0+Y3VyX3N0YXRlID0gcHJl dl9zdDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLyogVGhlIGJ1ZmZlciBk b2Vzbid0IGhhdmUgZW5vdWdoIHNwYWNlLCBmaW5pc2ggdG8gYnVpbGQuICAqLworCSAgICAg IHBzdHItPmN1cl9zdGF0ZSA9IHByZXZfc3Q7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9 CisgICAgICBwc3RyLT52YWxpZF9sZW4gPSBieXRlX2lkeDsKKyAgICAgIHBzdHItPnZhbGlk X3Jhd19sZW4gPSBieXRlX2lkeDsKKyAgICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyAgICB9 CisgIGVsc2UKKyAgICBmb3IgKHNyY19pZHggPSBwc3RyLT52YWxpZF9yYXdfbGVuOyBieXRl X2lkeCA8IGVuZF9pZHg7KQorICAgICAgeworCXdjaGFyX3Qgd2M7CisJY29uc3QgY2hhciAq cDsKKyAgICAgIG9mZnNldHNfbmVlZGVkOgorCXJlbWFpbl9sZW4gPSBlbmRfaWR4IC0gYnl0 ZV9pZHg7CisJcHJldl9zdCA9IHBzdHItPmN1cl9zdGF0ZTsKKwlpZiAoQkUgKHBzdHItPnRy YW5zICE9IE5VTEwsIDApKQorCSAgeworCSAgICBpbnQgaSwgY2g7CisKKwkgICAgZm9yIChp ID0gMDsgaSA8IHBzdHItPm1iX2N1cl9tYXggJiYgaSA8IHJlbWFpbl9sZW47ICsraSkKKwkg ICAgICB7CisJCWNoID0gcHN0ci0+cmF3X21icyBbcHN0ci0+cmF3X21ic19pZHggKyBzcmNf aWR4ICsgaV07CisJCWJ1ZltpXSA9IHBzdHItPnRyYW5zW2NoXTsKKwkgICAgICB9CisJICAg IHAgPSAoY29uc3QgY2hhciAqKSBidWY7CisJICB9CisJZWxzZQorCSAgcCA9IChjb25zdCBj aGFyICopIHBzdHItPnJhd19tYnMgKyBwc3RyLT5yYXdfbWJzX2lkeCArIHNyY19pZHg7CisJ bWJjbGVuID0gX19tYnJ0b3djICgmd2MsIHAsIHJlbWFpbl9sZW4sICZwc3RyLT5jdXJfc3Rh dGUpOworCWlmIChCRSAobWJjbGVuIDwgKHNpemVfdCkgLTIsIDEpKQorCSAgeworCSAgICB3 Y2hhcl90IHdjdSA9IF9fdG93dXBwZXIgKHdjKTsKKwkgICAgaWYgKHdjdSAhPSB3YykKKwkg ICAgICB7CisJCXNpemVfdCBtYmNkbGVuOworCisJCW1iY2RsZW4gPSBfX3djcnRvbWIgKChj aGFyICopIGJ1Ziwgd2N1LCAmcHJldl9zdCk7CisJCWlmIChCRSAobWJjbGVuID09IG1iY2Rs ZW4sIDEpKQorCQkgIG1lbWNweSAocHN0ci0+bWJzICsgYnl0ZV9pZHgsIGJ1ZiwgbWJjbGVu KTsKKwkJZWxzZSBpZiAobWJjZGxlbiAhPSAoc2l6ZV90KSAtMSkKKwkJICB7CisJCSAgICBz aXplX3QgaTsKKworCQkgICAgaWYgKGJ5dGVfaWR4ICsgbWJjZGxlbiA+IHBzdHItPmJ1ZnNf bGVuKQorCQkgICAgICB7CisJCQlwc3RyLT5jdXJfc3RhdGUgPSBwcmV2X3N0OworCQkJYnJl YWs7CisJCSAgICAgIH0KKworCQkgICAgaWYgKHBzdHItPm9mZnNldHMgPT0gTlVMTCkKKwkJ ICAgICAgeworCQkJcHN0ci0+b2Zmc2V0cyA9IHJlX21hbGxvYyAoSWR4LCBwc3RyLT5idWZz X2xlbik7CisKKwkJCWlmIChwc3RyLT5vZmZzZXRzID09IE5VTEwpCisJCQkgIHJldHVybiBS RUdfRVNQQUNFOworCQkgICAgICB9CisJCSAgICBpZiAoIXBzdHItPm9mZnNldHNfbmVlZGVk KQorCQkgICAgICB7CisJCQlmb3IgKGkgPSAwOyBpIDwgKHNpemVfdCkgYnl0ZV9pZHg7ICsr aSkKKwkJCSAgcHN0ci0+b2Zmc2V0c1tpXSA9IGk7CisJCQlwc3RyLT5vZmZzZXRzX25lZWRl ZCA9IDE7CisJCSAgICAgIH0KKworCQkgICAgbWVtY3B5IChwc3RyLT5tYnMgKyBieXRlX2lk eCwgYnVmLCBtYmNkbGVuKTsKKwkJICAgIHBzdHItPndjc1tieXRlX2lkeF0gPSB3Y3U7CisJ CSAgICBwc3RyLT5vZmZzZXRzW2J5dGVfaWR4XSA9IHNyY19pZHg7CisJCSAgICBmb3IgKGkg PSAxOyBpIDwgbWJjZGxlbjsgKytpKQorCQkgICAgICB7CisJCQlwc3RyLT5vZmZzZXRzW2J5 dGVfaWR4ICsgaV0KKwkJCSAgPSBzcmNfaWR4ICsgKGkgPCBtYmNsZW4gPyBpIDogbWJjbGVu IC0gMSk7CisJCQlwc3RyLT53Y3NbYnl0ZV9pZHggKyBpXSA9IFdFT0Y7CisJCSAgICAgIH0K KwkJICAgIHBzdHItPmxlbiArPSBtYmNkbGVuIC0gbWJjbGVuOworCQkgICAgaWYgKHBzdHIt PnJhd19zdG9wID4gc3JjX2lkeCkKKwkJICAgICAgcHN0ci0+c3RvcCArPSBtYmNkbGVuIC0g bWJjbGVuOworCQkgICAgZW5kX2lkeCA9IChwc3RyLT5idWZzX2xlbiA+IHBzdHItPmxlbikK KwkJCSAgICAgID8gcHN0ci0+bGVuIDogcHN0ci0+YnVmc19sZW47CisJCSAgICBieXRlX2lk eCArPSBtYmNkbGVuOworCQkgICAgc3JjX2lkeCArPSBtYmNsZW47CisJCSAgICBjb250aW51 ZTsKKwkJICB9CisJCWVsc2UKKwkJICBtZW1jcHkgKHBzdHItPm1icyArIGJ5dGVfaWR4LCBw LCBtYmNsZW4pOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIG1lbWNweSAocHN0ci0+ bWJzICsgYnl0ZV9pZHgsIHAsIG1iY2xlbik7CisKKwkgICAgaWYgKEJFIChwc3RyLT5vZmZz ZXRzX25lZWRlZCAhPSAwLCAwKSkKKwkgICAgICB7CisJCXNpemVfdCBpOworCQlmb3IgKGkg PSAwOyBpIDwgbWJjbGVuOyArK2kpCisJCSAgcHN0ci0+b2Zmc2V0c1tieXRlX2lkeCArIGld ID0gc3JjX2lkeCArIGk7CisJICAgICAgfQorCSAgICBzcmNfaWR4ICs9IG1iY2xlbjsKKwor CSAgICBwc3RyLT53Y3NbYnl0ZV9pZHgrK10gPSB3Y3U7CisJICAgIC8qIFdyaXRlIHBhZGRp bmdzLiAgKi8KKwkgICAgZm9yIChyZW1haW5fbGVuID0gYnl0ZV9pZHggKyBtYmNsZW4gLSAx OyBieXRlX2lkeCA8IHJlbWFpbl9sZW4gOykKKwkgICAgICBwc3RyLT53Y3NbYnl0ZV9pZHgr K10gPSBXRU9GOworCSAgfQorCWVsc2UgaWYgKG1iY2xlbiA9PSAoc2l6ZV90KSAtMSB8fCBt YmNsZW4gPT0gMAorCQkgfHwgKG1iY2xlbiA9PSAoc2l6ZV90KSAtMiAmJiBwc3RyLT5idWZz X2xlbiA+PSBwc3RyLT5sZW4pKQorCSAgeworCSAgICAvKiBJdCBpcyBhbiBpbnZhbGlkIGNo YXJhY3RlciBvciAnXDAnLiAgSnVzdCB1c2UgdGhlIGJ5dGUuICAqLworCSAgICBpbnQgY2gg PSBwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgc3JjX2lkeF07CisKKwkgICAg aWYgKEJFIChwc3RyLT50cmFucyAhPSBOVUxMLCAwKSkKKwkgICAgICBjaCA9IHBzdHItPnRy YW5zIFtjaF07CisJICAgIHBzdHItPm1ic1tieXRlX2lkeF0gPSBjaDsKKworCSAgICBpZiAo QkUgKHBzdHItPm9mZnNldHNfbmVlZGVkICE9IDAsIDApKQorCSAgICAgIHBzdHItPm9mZnNl dHNbYnl0ZV9pZHhdID0gc3JjX2lkeDsKKwkgICAgKytzcmNfaWR4OworCisJICAgIC8qIEFu ZCBhbHNvIGNhc3QgaXQgdG8gd2lkZSBjaGFyLiAgKi8KKwkgICAgcHN0ci0+d2NzW2J5dGVf aWR4KytdID0gKHdjaGFyX3QpIGNoOworCSAgICBpZiAoQkUgKG1iY2xlbiA9PSAoc2l6ZV90 KSAtMSwgMCkpCisJICAgICAgcHN0ci0+Y3VyX3N0YXRlID0gcHJldl9zdDsKKwkgIH0KKwll bHNlCisJICB7CisJICAgIC8qIFRoZSBidWZmZXIgZG9lc24ndCBoYXZlIGVub3VnaCBzcGFj ZSwgZmluaXNoIHRvIGJ1aWxkLiAgKi8KKwkgICAgcHN0ci0+Y3VyX3N0YXRlID0gcHJldl9z dDsKKwkgICAgYnJlYWs7CisJICB9CisgICAgICB9CisgIHBzdHItPnZhbGlkX2xlbiA9IGJ5 dGVfaWR4OworICBwc3RyLT52YWxpZF9yYXdfbGVuID0gc3JjX2lkeDsKKyAgcmV0dXJuIFJF R19OT0VSUk9SOworfQorCisvKiBTa2lwIGNoYXJhY3RlcnMgdW50aWwgdGhlIGluZGV4IGJl Y29tZXMgZ3JlYXRlciB0aGFuIE5FV19SQVdfSURYLgorICAgUmV0dXJuIHRoZSBpbmRleC4g ICovCisKK3N0YXRpYyBJZHgKK3JlX3N0cmluZ19za2lwX2NoYXJzIChyZV9zdHJpbmdfdCAq cHN0ciwgSWR4IG5ld19yYXdfaWR4LCB3aW50X3QgKmxhc3Rfd2MpCit7CisgIG1ic3RhdGVf dCBwcmV2X3N0OworICBJZHggcmF3YnVmX2lkeDsKKyAgc2l6ZV90IG1iY2xlbjsKKyAgd2lu dF90IHdjID0gV0VPRjsKKworICAvKiBTa2lwIHRoZSBjaGFyYWN0ZXJzIHdoaWNoIGFyZSBu b3QgbmVjZXNzYXJ5IHRvIGNoZWNrLiAgKi8KKyAgZm9yIChyYXdidWZfaWR4ID0gcHN0ci0+ cmF3X21ic19pZHggKyBwc3RyLT52YWxpZF9yYXdfbGVuOworICAgICAgIHJhd2J1Zl9pZHgg PCBuZXdfcmF3X2lkeDspCisgICAgeworICAgICAgd2NoYXJfdCB3YzI7CisgICAgICBJZHgg cmVtYWluX2xlbiA9IHBzdHItPnJhd19sZW4gLSByYXdidWZfaWR4OworICAgICAgcHJldl9z dCA9IHBzdHItPmN1cl9zdGF0ZTsKKyAgICAgIG1iY2xlbiA9IF9fbWJydG93YyAoJndjMiwg KGNvbnN0IGNoYXIgKikgcHN0ci0+cmF3X21icyArIHJhd2J1Zl9pZHgsCisJCQkgIHJlbWFp bl9sZW4sICZwc3RyLT5jdXJfc3RhdGUpOworICAgICAgaWYgKEJFIChtYmNsZW4gPT0gKHNp emVfdCkgLTIgfHwgbWJjbGVuID09IChzaXplX3QpIC0xIHx8IG1iY2xlbiA9PSAwLCAwKSkK Kwl7CisJICAvKiBXZSB0cmVhdCB0aGVzZSBjYXNlcyBhcyBhIHNpbmdsZSBieXRlIGNoYXJh Y3Rlci4gICovCisJICBpZiAobWJjbGVuID09IDAgfHwgcmVtYWluX2xlbiA9PSAwKQorCSAg ICB3YyA9IEwnXDAnOworCSAgZWxzZQorCSAgICB3YyA9ICoodW5zaWduZWQgY2hhciAqKSAo cHN0ci0+cmF3X21icyArIHJhd2J1Zl9pZHgpOworCSAgbWJjbGVuID0gMTsKKwkgIHBzdHIt PmN1cl9zdGF0ZSA9IHByZXZfc3Q7CisJfQorICAgICAgZWxzZQorCXdjID0gd2MyOworICAg ICAgLyogVGhlbiBwcm9jZWVkIHRoZSBuZXh0IGNoYXJhY3Rlci4gICovCisgICAgICByYXdi dWZfaWR4ICs9IG1iY2xlbjsKKyAgICB9CisgICpsYXN0X3djID0gd2M7CisgIHJldHVybiBy YXdidWZfaWR4OworfQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICAqLworCisvKiBCdWls ZCB0aGUgYnVmZmVyIFBTVFItPk1CUywgYW5kIGFwcGx5IHRoZSB0cmFuc2xhdGlvbiBpZiB3 ZSBuZWVkLgorICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIGNhc2Ugb2YgUkVHX0lDQVNF LiAgKi8KKworc3RhdGljIHZvaWQKK2J1aWxkX3VwcGVyX2J1ZmZlciAocmVfc3RyaW5nX3Qg KnBzdHIpCit7CisgIElkeCBjaGFyX2lkeCwgZW5kX2lkeDsKKyAgZW5kX2lkeCA9IChwc3Ry LT5idWZzX2xlbiA+IHBzdHItPmxlbikgPyBwc3RyLT5sZW4gOiBwc3RyLT5idWZzX2xlbjsK KworICBmb3IgKGNoYXJfaWR4ID0gcHN0ci0+dmFsaWRfbGVuOyBjaGFyX2lkeCA8IGVuZF9p ZHg7ICsrY2hhcl9pZHgpCisgICAgeworICAgICAgaW50IGNoID0gcHN0ci0+cmF3X21ic1tw c3RyLT5yYXdfbWJzX2lkeCArIGNoYXJfaWR4XTsKKyAgICAgIGlmIChCRSAocHN0ci0+dHJh bnMgIT0gTlVMTCwgMCkpCisJY2ggPSBwc3RyLT50cmFuc1tjaF07CisgICAgICBwc3RyLT5t YnNbY2hhcl9pZHhdID0gdG91cHBlciAoY2gpOworICAgIH0KKyAgcHN0ci0+dmFsaWRfbGVu ID0gY2hhcl9pZHg7CisgIHBzdHItPnZhbGlkX3Jhd19sZW4gPSBjaGFyX2lkeDsKK30KKwor LyogQXBwbHkgVFJBTlMgdG8gdGhlIGJ1ZmZlciBpbiBQU1RSLiAgKi8KKworc3RhdGljIHZv aWQKK3JlX3N0cmluZ190cmFuc2xhdGVfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKK3sK KyAgSWR4IGJ1Zl9pZHgsIGVuZF9pZHg7CisgIGVuZF9pZHggPSAocHN0ci0+YnVmc19sZW4g PiBwc3RyLT5sZW4pID8gcHN0ci0+bGVuIDogcHN0ci0+YnVmc19sZW47CisKKyAgZm9yIChi dWZfaWR4ID0gcHN0ci0+dmFsaWRfbGVuOyBidWZfaWR4IDwgZW5kX2lkeDsgKytidWZfaWR4 KQorICAgIHsKKyAgICAgIGludCBjaCA9IHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19p ZHggKyBidWZfaWR4XTsKKyAgICAgIHBzdHItPm1ic1tidWZfaWR4XSA9IHBzdHItPnRyYW5z W2NoXTsKKyAgICB9CisKKyAgcHN0ci0+dmFsaWRfbGVuID0gYnVmX2lkeDsKKyAgcHN0ci0+ dmFsaWRfcmF3X2xlbiA9IGJ1Zl9pZHg7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gcmUtY29u c3RydWN0IHRoZSBidWZmZXJzLgorICAgQ29uY3JldGVseSwgY29udmVydCB0byB3aWRlIGNo YXJhY3RlciBpbiBjYXNlIG9mIHBzdHItPm1iX2N1cl9tYXggPiAxLAorICAgY29udmVydCB0 byB1cHBlciBjYXNlIGluIGNhc2Ugb2YgUkVHX0lDQVNFLCBhcHBseSB0cmFuc2xhdGlvbi4g ICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitfX2F0dHJpYnV0ZV93YXJuX3VudXNlZF9y ZXN1bHRfXworcmVfc3RyaW5nX3JlY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgSWR4 IGlkeCwgaW50IGVmbGFncykKK3sKKyAgSWR4IG9mZnNldDsKKworICBpZiAoQkUgKHBzdHIt PnJhd19tYnNfaWR4IDw9IGlkeCwgMCkpCisgICAgb2Zmc2V0ID0gaWR4IC0gcHN0ci0+cmF3 X21ic19pZHg7CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBSZXNldCBidWZmZXIuICAqLwor I2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEp CisJbWVtc2V0ICgmcHN0ci0+Y3VyX3N0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkp OworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgICBwc3RyLT5sZW4gPSBwc3Ry LT5yYXdfbGVuOworICAgICAgcHN0ci0+c3RvcCA9IHBzdHItPnJhd19zdG9wOworICAgICAg cHN0ci0+dmFsaWRfbGVuID0gMDsKKyAgICAgIHBzdHItPnJhd19tYnNfaWR4ID0gMDsKKyAg ICAgIHBzdHItPnZhbGlkX3Jhd19sZW4gPSAwOworICAgICAgcHN0ci0+b2Zmc2V0c19uZWVk ZWQgPSAwOworICAgICAgcHN0ci0+dGlwX2NvbnRleHQgPSAoKGVmbGFncyAmIFJFR19OT1RC T0wpID8gQ09OVEVYVF9CRUdCVUYKKwkJCSAgIDogQ09OVEVYVF9ORVdMSU5FIHwgQ09OVEVY VF9CRUdCVUYpOworICAgICAgaWYgKCFwc3RyLT5tYnNfYWxsb2NhdGVkKQorCXBzdHItPm1i cyA9ICh1bnNpZ25lZCBjaGFyICopIHBzdHItPnJhd19tYnM7CisgICAgICBvZmZzZXQgPSBp ZHg7CisgICAgfQorCisgIGlmIChCRSAob2Zmc2V0ICE9IDAsIDEpKQorICAgIHsKKyAgICAg IC8qIFNob3VsZCB0aGUgYWxyZWFkeSBjaGVja2VkIGNoYXJhY3RlcnMgYmUga2VwdD8gICov CisgICAgICBpZiAoQkUgKG9mZnNldCA8IHBzdHItPnZhbGlkX3Jhd19sZW4sIDEpKQorCXsK KwkgIC8qIFllcywgbW92ZSB0aGVtIHRvIHRoZSBmcm9udCBvZiB0aGUgYnVmZmVyLiAgKi8K KyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCSAgaWYgKEJFIChwc3RyLT5vZmZzZXRzX25lZWRl ZCwgMCkpCisJICAgIHsKKwkgICAgICBJZHggbG93ID0gMCwgaGlnaCA9IHBzdHItPnZhbGlk X2xlbiwgbWlkOworCSAgICAgIGRvCisJCXsKKwkJICBtaWQgPSAoaGlnaCArIGxvdykgLyAy OworCQkgIGlmIChwc3RyLT5vZmZzZXRzW21pZF0gPiBvZmZzZXQpCisJCSAgICBoaWdoID0g bWlkOworCQkgIGVsc2UgaWYgKHBzdHItPm9mZnNldHNbbWlkXSA8IG9mZnNldCkKKwkJICAg IGxvdyA9IG1pZCArIDE7CisJCSAgZWxzZQorCQkgICAgYnJlYWs7CisJCX0KKwkgICAgICB3 aGlsZSAobG93IDwgaGlnaCk7CisJICAgICAgaWYgKHBzdHItPm9mZnNldHNbbWlkXSA8IG9m ZnNldCkKKwkJKyttaWQ7CisJICAgICAgcHN0ci0+dGlwX2NvbnRleHQgPSByZV9zdHJpbmdf Y29udGV4dF9hdCAocHN0ciwgbWlkIC0gMSwKKwkJCQkJCQllZmxhZ3MpOworCSAgICAgIC8q IFRoaXMgY2FuIGJlIHF1aXRlIGNvbXBsaWNhdGVkLCBzbyBoYW5kbGUgc3BlY2lhbGx5CisJ CSBvbmx5IHRoZSBjb21tb24gYW5kIGVhc3kgY2FzZSB3aGVyZSB0aGUgY2hhcmFjdGVyIHdp dGgKKwkJIGRpZmZlcmVudCBsZW5ndGggcmVwcmVzZW50YXRpb24gb2YgbG93ZXIgYW5kIHVw cGVyCisJCSBjYXNlIGlzIHByZXNlbnQgYXQgb3IgYWZ0ZXIgb2Zmc2V0LiAgKi8KKwkgICAg ICBpZiAocHN0ci0+dmFsaWRfbGVuID4gb2Zmc2V0CisJCSAgJiYgbWlkID09IG9mZnNldCAm JiBwc3RyLT5vZmZzZXRzW21pZF0gPT0gb2Zmc2V0KQorCQl7CisJCSAgbWVtbW92ZSAocHN0 ci0+d2NzLCBwc3RyLT53Y3MgKyBvZmZzZXQsCisJCQkgICAocHN0ci0+dmFsaWRfbGVuIC0g b2Zmc2V0KSAqIHNpemVvZiAod2ludF90KSk7CisJCSAgbWVtbW92ZSAocHN0ci0+bWJzLCBw c3RyLT5tYnMgKyBvZmZzZXQsIHBzdHItPnZhbGlkX2xlbiAtIG9mZnNldCk7CisJCSAgcHN0 ci0+dmFsaWRfbGVuIC09IG9mZnNldDsKKwkJICBwc3RyLT52YWxpZF9yYXdfbGVuIC09IG9m ZnNldDsKKwkJICBmb3IgKGxvdyA9IDA7IGxvdyA8IHBzdHItPnZhbGlkX2xlbjsgbG93Kysp CisJCSAgICBwc3RyLT5vZmZzZXRzW2xvd10gPSBwc3RyLT5vZmZzZXRzW2xvdyArIG9mZnNl dF0gLSBvZmZzZXQ7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICAvKiBPdGhlcndpc2Us IGp1c3QgZmluZCBvdXQgaG93IGxvbmcgdGhlIHBhcnRpYWwgbXVsdGlieXRlCisJCSAgICAg Y2hhcmFjdGVyIGF0IG9mZnNldCBpcyBhbmQgZmlsbCBpdCB3aXRoIFdFT0YvMjU1LiAgKi8K KwkJICBwc3RyLT5sZW4gPSBwc3RyLT5yYXdfbGVuIC0gaWR4ICsgb2Zmc2V0OworCQkgIHBz dHItPnN0b3AgPSBwc3RyLT5yYXdfc3RvcCAtIGlkeCArIG9mZnNldDsKKwkJICBwc3RyLT5v ZmZzZXRzX25lZWRlZCA9IDA7CisJCSAgd2hpbGUgKG1pZCA+IDAgJiYgcHN0ci0+b2Zmc2V0 c1ttaWQgLSAxXSA9PSBvZmZzZXQpCisJCSAgICAtLW1pZDsKKwkJICB3aGlsZSAobWlkIDwg cHN0ci0+dmFsaWRfbGVuKQorCQkgICAgaWYgKHBzdHItPndjc1ttaWRdICE9IFdFT0YpCisJ CSAgICAgIGJyZWFrOworCQkgICAgZWxzZQorCQkgICAgICArK21pZDsKKwkJICBpZiAobWlk ID09IHBzdHItPnZhbGlkX2xlbikKKwkJICAgIHBzdHItPnZhbGlkX2xlbiA9IDA7CisJCSAg ZWxzZQorCQkgICAgeworCQkgICAgICBwc3RyLT52YWxpZF9sZW4gPSBwc3RyLT5vZmZzZXRz W21pZF0gLSBvZmZzZXQ7CisJCSAgICAgIGlmIChwc3RyLT52YWxpZF9sZW4pCisJCQl7CisJ CQkgIGZvciAobG93ID0gMDsgbG93IDwgcHN0ci0+dmFsaWRfbGVuOyArK2xvdykKKwkJCSAg ICBwc3RyLT53Y3NbbG93XSA9IFdFT0Y7CisJCQkgIG1lbXNldCAocHN0ci0+bWJzLCAyNTUs IHBzdHItPnZhbGlkX2xlbik7CisJCQl9CisJCSAgICB9CisJCSAgcHN0ci0+dmFsaWRfcmF3 X2xlbiA9IHBzdHItPnZhbGlkX2xlbjsKKwkJfQorCSAgICB9CisJICBlbHNlCisjZW5kaWYK KwkgICAgeworCSAgICAgIHBzdHItPnRpcF9jb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRf YXQgKHBzdHIsIG9mZnNldCAtIDEsCisJCQkJCQkJZWZsYWdzKTsKKyNpZmRlZiBSRV9FTkFC TEVfSTE4TgorCSAgICAgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKwkJbWVtbW92ZSAo cHN0ci0+d2NzLCBwc3RyLT53Y3MgKyBvZmZzZXQsCisJCQkgKHBzdHItPnZhbGlkX2xlbiAt IG9mZnNldCkgKiBzaXplb2YgKHdpbnRfdCkpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThO ICovCisJICAgICAgaWYgKEJFIChwc3RyLT5tYnNfYWxsb2NhdGVkLCAwKSkKKwkJbWVtbW92 ZSAocHN0ci0+bWJzLCBwc3RyLT5tYnMgKyBvZmZzZXQsCisJCQkgcHN0ci0+dmFsaWRfbGVu IC0gb2Zmc2V0KTsKKwkgICAgICBwc3RyLT52YWxpZF9sZW4gLT0gb2Zmc2V0OworCSAgICAg IHBzdHItPnZhbGlkX3Jhd19sZW4gLT0gb2Zmc2V0OworI2lmIGRlZmluZWQgREVCVUcgJiYg REVCVUcKKwkgICAgICBhc3NlcnQgKHBzdHItPnZhbGlkX2xlbiA+IDApOworI2VuZGlmCisJ ICAgIH0KKwl9CisgICAgICBlbHNlCisJeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICAv KiBObywgc2tpcCBhbGwgY2hhcmFjdGVycyB1bnRpbCBJRFguICAqLworCSAgSWR4IHByZXZf dmFsaWRfbGVuID0gcHN0ci0+dmFsaWRfbGVuOworCisJICBpZiAoQkUgKHBzdHItPm9mZnNl dHNfbmVlZGVkLCAwKSkKKwkgICAgeworCSAgICAgIHBzdHItPmxlbiA9IHBzdHItPnJhd19s ZW4gLSBpZHggKyBvZmZzZXQ7CisJICAgICAgcHN0ci0+c3RvcCA9IHBzdHItPnJhd19zdG9w IC0gaWR4ICsgb2Zmc2V0OworCSAgICAgIHBzdHItPm9mZnNldHNfbmVlZGVkID0gMDsKKwkg ICAgfQorI2VuZGlmCisJICBwc3RyLT52YWxpZF9sZW4gPSAwOworI2lmZGVmIFJFX0VOQUJM RV9JMThOCisJICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisJICAgIHsKKwkgICAgICBJ ZHggd2NzX2lkeDsKKwkgICAgICB3aW50X3Qgd2MgPSBXRU9GOworCisJICAgICAgaWYgKHBz dHItPmlzX3V0ZjgpCisJCXsKKwkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpyYXcsICpwLCAq ZW5kOworCisJCSAgLyogU3BlY2lhbCBjYXNlIFVURi04LiAgTXVsdGktYnl0ZSBjaGFycyBz dGFydCB3aXRoIGFueQorCQkgICAgIGJ5dGUgb3RoZXIgdGhhbiAweDgwIC0gMHhiZi4gICov CisJCSAgcmF3ID0gcHN0ci0+cmF3X21icyArIHBzdHItPnJhd19tYnNfaWR4OworCQkgIGVu ZCA9IHJhdyArIChvZmZzZXQgLSBwc3RyLT5tYl9jdXJfbWF4KTsKKwkJICBpZiAoZW5kIDwg cHN0ci0+cmF3X21icykKKwkJICAgIGVuZCA9IHBzdHItPnJhd19tYnM7CisJCSAgcCA9IHJh dyArIG9mZnNldCAtIDE7CisjaWZkZWYgX0xJQkMKKwkJICAvKiBXZSBrbm93IHRoZSB3Y2hh cl90IGVuY29kaW5nIGlzIFVDUzQsIHNvIGZvciB0aGUgc2ltcGxlCisJCSAgICAgY2FzZSwg QVNDSUkgY2hhcmFjdGVycywgc2tpcCB0aGUgY29udmVyc2lvbiBzdGVwLiAgKi8KKwkJICBp ZiAoaXNhc2NpaSAoKnApICYmIEJFIChwc3RyLT50cmFucyA9PSBOVUxMLCAxKSkKKwkJICAg IHsKKwkJICAgICAgbWVtc2V0ICgmcHN0ci0+Y3VyX3N0YXRlLCAnXDAnLCBzaXplb2YgKG1i c3RhdGVfdCkpOworCQkgICAgICAvKiBwc3RyLT52YWxpZF9sZW4gPSAwOyAqLworCQkgICAg ICB3YyA9ICh3Y2hhcl90KSAqcDsKKwkJICAgIH0KKwkJICBlbHNlCisjZW5kaWYKKwkJICAg IGZvciAoOyBwID49IGVuZDsgLS1wKQorCQkgICAgICBpZiAoKCpwICYgMHhjMCkgIT0gMHg4 MCkKKwkJCXsKKwkJCSAgbWJzdGF0ZV90IGN1cl9zdGF0ZTsKKwkJCSAgd2NoYXJfdCB3YzI7 CisJCQkgIElkeCBtbGVuID0gcmF3ICsgcHN0ci0+bGVuIC0gcDsKKwkJCSAgdW5zaWduZWQg Y2hhciBidWZbNl07CisJCQkgIHNpemVfdCBtYmNsZW47CisKKwkJCSAgY29uc3QgdW5zaWdu ZWQgY2hhciAqcHAgPSBwOworCQkJICBpZiAoQkUgKHBzdHItPnRyYW5zICE9IE5VTEwsIDAp KQorCQkJICAgIHsKKwkJCSAgICAgIGludCBpID0gbWxlbiA8IDYgPyBtbGVuIDogNjsKKwkJ CSAgICAgIHdoaWxlICgtLWkgPj0gMCkKKwkJCQlidWZbaV0gPSBwc3RyLT50cmFuc1twW2ld XTsKKwkJCSAgICAgIHBwID0gYnVmOworCQkJICAgIH0KKwkJCSAgLyogWFhYIERvbid0IHVz ZSBtYnJ0b3djLCB3ZSBrbm93IHdoaWNoIGNvbnZlcnNpb24KKwkJCSAgICAgdG8gdXNlIChV VEYtOCAtPiBVQ1M0KS4gICovCisJCQkgIG1lbXNldCAoJmN1cl9zdGF0ZSwgMCwgc2l6ZW9m IChjdXJfc3RhdGUpKTsKKwkJCSAgbWJjbGVuID0gX19tYnJ0b3djICgmd2MyLCAoY29uc3Qg Y2hhciAqKSBwcCwgbWxlbiwKKwkJCQkJICAgICAgJmN1cl9zdGF0ZSk7CisJCQkgIGlmIChy YXcgKyBvZmZzZXQgLSBwIDw9IG1iY2xlbgorCQkJICAgICAgJiYgbWJjbGVuIDwgKHNpemVf dCkgLTIpCisJCQkgICAgeworCQkJICAgICAgbWVtc2V0ICgmcHN0ci0+Y3VyX3N0YXRlLCAn XDAnLAorCQkJCSAgICAgIHNpemVvZiAobWJzdGF0ZV90KSk7CisJCQkgICAgICBwc3RyLT52 YWxpZF9sZW4gPSBtYmNsZW4gLSAocmF3ICsgb2Zmc2V0IC0gcCk7CisJCQkgICAgICB3YyA9 IHdjMjsKKwkJCSAgICB9CisJCQkgIGJyZWFrOworCQkJfQorCQl9CisKKwkgICAgICBpZiAo d2MgPT0gV0VPRikKKwkJcHN0ci0+dmFsaWRfbGVuID0gcmVfc3RyaW5nX3NraXBfY2hhcnMg KHBzdHIsIGlkeCwgJndjKSAtIGlkeDsKKwkgICAgICBpZiAod2MgPT0gV0VPRikKKwkJcHN0 ci0+dGlwX2NvbnRleHQKKwkJICA9IHJlX3N0cmluZ19jb250ZXh0X2F0IChwc3RyLCBwcmV2 X3ZhbGlkX2xlbiAtIDEsIGVmbGFncyk7CisJICAgICAgZWxzZQorCQlwc3RyLT50aXBfY29u dGV4dCA9ICgoQkUgKHBzdHItPndvcmRfb3BzX3VzZWQgIT0gMCwgMCkKKwkJCQkgICAgICAm JiBJU19XSURFX1dPUkRfQ0hBUiAod2MpKQorCQkJCSAgICAgPyBDT05URVhUX1dPUkQKKwkJ CQkgICAgIDogKChJU19XSURFX05FV0xJTkUgKHdjKQorCQkJCQkgJiYgcHN0ci0+bmV3bGlu ZV9hbmNob3IpCisJCQkJCT8gQ09OVEVYVF9ORVdMSU5FIDogMCkpOworCSAgICAgIGlmIChC RSAocHN0ci0+dmFsaWRfbGVuLCAwKSkKKwkJeworCQkgIGZvciAod2NzX2lkeCA9IDA7IHdj c19pZHggPCBwc3RyLT52YWxpZF9sZW47ICsrd2NzX2lkeCkKKwkJICAgIHBzdHItPndjc1t3 Y3NfaWR4XSA9IFdFT0Y7CisJCSAgaWYgKHBzdHItPm1ic19hbGxvY2F0ZWQpCisJCSAgICBt ZW1zZXQgKHBzdHItPm1icywgMjU1LCBwc3RyLT52YWxpZF9sZW4pOworCQl9CisJICAgICAg cHN0ci0+dmFsaWRfcmF3X2xlbiA9IHBzdHItPnZhbGlkX2xlbjsKKwkgICAgfQorCSAgZWxz ZQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisJICAgIHsKKwkgICAgICBpbnQgYyA9 IHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBvZmZzZXQgLSAxXTsKKwkgICAg ICBwc3RyLT52YWxpZF9yYXdfbGVuID0gMDsKKwkgICAgICBpZiAocHN0ci0+dHJhbnMpCisJ CWMgPSBwc3RyLT50cmFuc1tjXTsKKwkgICAgICBwc3RyLT50aXBfY29udGV4dCA9IChiaXRz ZXRfY29udGFpbiAocHN0ci0+d29yZF9jaGFyLCBjKQorCQkJCSAgID8gQ09OVEVYVF9XT1JE CisJCQkJICAgOiAoKElTX05FV0xJTkUgKGMpICYmIHBzdHItPm5ld2xpbmVfYW5jaG9yKQor CQkJCSAgICAgID8gQ09OVEVYVF9ORVdMSU5FIDogMCkpOworCSAgICB9CisJfQorICAgICAg aWYgKCFCRSAocHN0ci0+bWJzX2FsbG9jYXRlZCwgMCkpCisJcHN0ci0+bWJzICs9IG9mZnNl dDsKKyAgICB9CisgIHBzdHItPnJhd19tYnNfaWR4ID0gaWR4OworICBwc3RyLT5sZW4gLT0g b2Zmc2V0OworICBwc3RyLT5zdG9wIC09IG9mZnNldDsKKworICAvKiBUaGVuIGJ1aWxkIHRo ZSBidWZmZXJzLiAgKi8KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAocHN0ci0+bWJf Y3VyX21heCA+IDEpCisgICAgeworICAgICAgaWYgKHBzdHItPmljYXNlKQorCXsKKwkgIHJl Z19lcnJjb2RlX3QgcmV0ID0gYnVpbGRfd2NzX3VwcGVyX2J1ZmZlciAocHN0cik7CisJICBp ZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiByZXQ7CisJfQor ICAgICAgZWxzZQorCWJ1aWxkX3djc19idWZmZXIgKHBzdHIpOworICAgIH0KKyAgZWxzZQor I2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgaWYgKEJFIChwc3RyLT5tYnNfYWxs b2NhdGVkLCAwKSkKKyAgICAgIHsKKwlpZiAocHN0ci0+aWNhc2UpCisJICBidWlsZF91cHBl cl9idWZmZXIgKHBzdHIpOworCWVsc2UgaWYgKHBzdHItPnRyYW5zICE9IE5VTEwpCisJICBy ZV9zdHJpbmdfdHJhbnNsYXRlX2J1ZmZlciAocHN0cik7CisgICAgICB9CisgICAgZWxzZQor ICAgICAgcHN0ci0+dmFsaWRfbGVuID0gcHN0ci0+bGVuOworCisgIHBzdHItPmN1cl9pZHgg PSAwOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFy CitfX2F0dHJpYnV0ZV9fICgocHVyZSkpCityZV9zdHJpbmdfcGVla19ieXRlX2Nhc2UgKGNv bnN0IHJlX3N0cmluZ190ICpwc3RyLCBJZHggaWR4KQoreworICBpbnQgY2g7CisgIElkeCBv ZmY7CisKKyAgLyogSGFuZGxlIHRoZSBjb21tb24gKGVhc2llc3QpIGNhc2VzIGZpcnN0LiAg Ki8KKyAgaWYgKEJFICghcHN0ci0+bWJzX2FsbG9jYXRlZCwgMSkpCisgICAgcmV0dXJuIHJl X3N0cmluZ19wZWVrX2J5dGUgKHBzdHIsIGlkeCk7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4 TgorICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEKKyAgICAgICYmICEgcmVfc3RyaW5nX2lz X3NpbmdsZV9ieXRlX2NoYXIgKHBzdHIsIHBzdHItPmN1cl9pZHggKyBpZHgpKQorICAgIHJl dHVybiByZV9zdHJpbmdfcGVla19ieXRlIChwc3RyLCBpZHgpOworI2VuZGlmCisKKyAgb2Zm ID0gcHN0ci0+Y3VyX2lkeCArIGlkeDsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAo cHN0ci0+b2Zmc2V0c19uZWVkZWQpCisgICAgb2ZmID0gcHN0ci0+b2Zmc2V0c1tvZmZdOwor I2VuZGlmCisKKyAgY2ggPSBwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgb2Zm XTsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIC8qIEVuc3VyZSB0aGF0IGUuZy4gZm9y IHRyX1RSLlVURi04IEJBQ0tTTEFTSCBET1RMRVNTIFNNQUxMIExFVFRFUiBJCisgICAgIHRo aXMgZnVuY3Rpb24gcmV0dXJucyBDQVBJVEFMIExFVFRFUiBJIGluc3RlYWQgb2YgZmlyc3Qg Ynl0ZSBvZgorICAgICBET1RMRVNTIFNNQUxMIExFVFRFUiBJLiAgVGhlIGxhdHRlciB3b3Vs ZCBjb25mdXNlIHRoZSBwYXJzZXIsCisgICAgIHNpbmNlIHBlZWtfYnl0ZV9jYXNlIGRvZXNu J3QgYWR2YW5jZSBjdXJfaWR4IGluIGFueSB3YXkuICAqLworICBpZiAocHN0ci0+b2Zmc2V0 c19uZWVkZWQgJiYgIWlzYXNjaWkgKGNoKSkKKyAgICByZXR1cm4gcmVfc3RyaW5nX3BlZWtf Ynl0ZSAocHN0ciwgaWR4KTsKKyNlbmRpZgorCisgIHJldHVybiBjaDsKK30KKworc3RhdGlj IHVuc2lnbmVkIGNoYXIKK3JlX3N0cmluZ19mZXRjaF9ieXRlX2Nhc2UgKHJlX3N0cmluZ190 ICpwc3RyKQoreworICBpZiAoQkUgKCFwc3RyLT5tYnNfYWxsb2NhdGVkLCAxKSkKKyAgICBy ZXR1cm4gcmVfc3RyaW5nX2ZldGNoX2J5dGUgKHBzdHIpOworCisjaWZkZWYgUkVfRU5BQkxF X0kxOE4KKyAgaWYgKHBzdHItPm9mZnNldHNfbmVlZGVkKQorICAgIHsKKyAgICAgIElkeCBv ZmY7CisgICAgICBpbnQgY2g7CisKKyAgICAgIC8qIEZvciB0cl9UUi5VVEYtOCBbWzppc2xv d2VyOl1dIHRoZXJlIGlzCisJIFtbOiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRE9UIGxvd2Vy Ol1dIGluIG1icy4gIFNraXAKKwkgaW4gdGhhdCBjYXNlIHRoZSB3aG9sZSBtdWx0aS1ieXRl IGNoYXJhY3RlciBhbmQgcmV0dXJuCisJIHRoZSBvcmlnaW5hbCBsZXR0ZXIuICBPbiB0aGUg b3RoZXIgc2lkZSwgd2l0aAorCSBbWzogRE9UTEVTUyBTTUFMTCBMRVRURVIgSSByZXR1cm4g W1s6SSwgYXMgZG9pbmcKKwkgYW55dGhpbmcgZWxzZSB3b3VsZCBjb21wbGljYXRlIHRoaW5n cyB0b28gbXVjaC4gICovCisKKyAgICAgIGlmICghcmVfc3RyaW5nX2ZpcnN0X2J5dGUgKHBz dHIsIHBzdHItPmN1cl9pZHgpKQorCXJldHVybiByZV9zdHJpbmdfZmV0Y2hfYnl0ZSAocHN0 cik7CisKKyAgICAgIG9mZiA9IHBzdHItPm9mZnNldHNbcHN0ci0+Y3VyX2lkeF07CisgICAg ICBjaCA9IHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBvZmZdOworCisgICAg ICBpZiAoISBpc2FzY2lpIChjaCkpCisJcmV0dXJuIHJlX3N0cmluZ19mZXRjaF9ieXRlIChw c3RyKTsKKworICAgICAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHBzdHIsCisJCQkgICAgcmVf c3RyaW5nX2NoYXJfc2l6ZV9hdCAocHN0ciwgcHN0ci0+Y3VyX2lkeCkpOworICAgICAgcmV0 dXJuIGNoOworICAgIH0KKyNlbmRpZgorCisgIHJldHVybiBwc3RyLT5yYXdfbWJzW3BzdHIt PnJhd19tYnNfaWR4ICsgcHN0ci0+Y3VyX2lkeCsrXTsKK30KKworc3RhdGljIHZvaWQKK3Jl X3N0cmluZ19kZXN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIpCit7CisjaWZkZWYgUkVfRU5B QkxFX0kxOE4KKyAgcmVfZnJlZSAocHN0ci0+d2NzKTsKKyAgcmVfZnJlZSAocHN0ci0+b2Zm c2V0cyk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCisgIGlmIChwc3RyLT5tYnNf YWxsb2NhdGVkKQorICAgIHJlX2ZyZWUgKHBzdHItPm1icyk7Cit9CisKKy8qIFJldHVybiB0 aGUgY29udGV4dCBhdCBJRFggaW4gSU5QVVQuICAqLworCitzdGF0aWMgdW5zaWduZWQgaW50 CityZV9zdHJpbmdfY29udGV4dF9hdCAoY29uc3QgcmVfc3RyaW5nX3QgKmlucHV0LCBJZHgg aWR4LCBpbnQgZWZsYWdzKQoreworICBpbnQgYzsKKyAgaWYgKEJFIChpZHggPCAwLCAwKSkK KyAgICAvKiBJbiB0aGlzIGNhc2UsIHdlIHVzZSB0aGUgdmFsdWUgc3RvcmVkIGluIGlucHV0 LT50aXBfY29udGV4dCwKKyAgICAgICBzaW5jZSB3ZSBjYW4ndCBrbm93IHRoZSBjaGFyYWN0 ZXIgaW4gaW5wdXQtPm1ic1stMV0gaGVyZS4gICovCisgICAgcmV0dXJuIGlucHV0LT50aXBf Y29udGV4dDsKKyAgaWYgKEJFIChpZHggPT0gaW5wdXQtPmxlbiwgMCkpCisgICAgcmV0dXJu ICgoZWZsYWdzICYgUkVHX05PVEVPTCkgPyBDT05URVhUX0VOREJVRgorCSAgICA6IENPTlRF WFRfTkVXTElORSB8IENPTlRFWFRfRU5EQlVGKTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgor ICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxKQorICAgIHsKKyAgICAgIHdpbnRfdCB3YzsK KyAgICAgIElkeCB3Y19pZHggPSBpZHg7CisgICAgICB3aGlsZShpbnB1dC0+d2NzW3djX2lk eF0gPT0gV0VPRikKKwl7CisjaWYgZGVmaW5lZCBERUJVRyAmJiBERUJVRworCSAgLyogSXQg bXVzdCBub3QgaGFwcGVuLiAgKi8KKwkgIGFzc2VydCAod2NfaWR4ID49IDApOworI2VuZGlm CisJICAtLXdjX2lkeDsKKwkgIGlmICh3Y19pZHggPCAwKQorCSAgICByZXR1cm4gaW5wdXQt PnRpcF9jb250ZXh0OworCX0KKyAgICAgIHdjID0gaW5wdXQtPndjc1t3Y19pZHhdOworICAg ICAgaWYgKEJFIChpbnB1dC0+d29yZF9vcHNfdXNlZCAhPSAwLCAwKSAmJiBJU19XSURFX1dP UkRfQ0hBUiAod2MpKQorCXJldHVybiBDT05URVhUX1dPUkQ7CisgICAgICByZXR1cm4gKElT X1dJREVfTkVXTElORSAod2MpICYmIGlucHV0LT5uZXdsaW5lX2FuY2hvcgorCSAgICAgID8g Q09OVEVYVF9ORVdMSU5FIDogMCk7CisgICAgfQorICBlbHNlCisjZW5kaWYKKyAgICB7Cisg ICAgICBjID0gcmVfc3RyaW5nX2J5dGVfYXQgKGlucHV0LCBpZHgpOworICAgICAgaWYgKGJp dHNldF9jb250YWluIChpbnB1dC0+d29yZF9jaGFyLCBjKSkKKwlyZXR1cm4gQ09OVEVYVF9X T1JEOworICAgICAgcmV0dXJuIElTX05FV0xJTkUgKGMpICYmIGlucHV0LT5uZXdsaW5lX2Fu Y2hvciA/IENPTlRFWFRfTkVXTElORSA6IDA7CisgICAgfQorfQorDAorLyogRnVuY3Rpb25z IGZvciBzZXQgb3BlcmF0aW9uLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK19fYXR0 cmlidXRlX3dhcm5fdW51c2VkX3Jlc3VsdF9fCityZV9ub2RlX3NldF9hbGxvYyAocmVfbm9k ZV9zZXQgKnNldCwgSWR4IHNpemUpCit7CisgIHNldC0+YWxsb2MgPSBzaXplOworICBzZXQt Pm5lbGVtID0gMDsKKyAgc2V0LT5lbGVtcyA9IHJlX21hbGxvYyAoSWR4LCBzaXplKTsKKyAg aWYgKEJFIChzZXQtPmVsZW1zID09IE5VTEwsIDApICYmIChNQUxMT0NfMF9JU19OT05OVUxM IHx8IHNpemUgIT0gMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisgIHJldHVybiBSRUdf Tk9FUlJPUjsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK19fYXR0cmlidXRlX3dhcm5f dW51c2VkX3Jlc3VsdF9fCityZV9ub2RlX3NldF9pbml0XzEgKHJlX25vZGVfc2V0ICpzZXQs IElkeCBlbGVtKQoreworICBzZXQtPmFsbG9jID0gMTsKKyAgc2V0LT5uZWxlbSA9IDE7Cisg IHNldC0+ZWxlbXMgPSByZV9tYWxsb2MgKElkeCwgMSk7CisgIGlmIChCRSAoc2V0LT5lbGVt cyA9PSBOVUxMLCAwKSkKKyAgICB7CisgICAgICBzZXQtPmFsbG9jID0gc2V0LT5uZWxlbSA9 IDA7CisgICAgICByZXR1cm4gUkVHX0VTUEFDRTsKKyAgICB9CisgIHNldC0+ZWxlbXNbMF0g PSBlbGVtOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyByZWdfZXJyY29k ZV90CitfX2F0dHJpYnV0ZV93YXJuX3VudXNlZF9yZXN1bHRfXworcmVfbm9kZV9zZXRfaW5p dF8yIChyZV9ub2RlX3NldCAqc2V0LCBJZHggZWxlbTEsIElkeCBlbGVtMikKK3sKKyAgc2V0 LT5hbGxvYyA9IDI7CisgIHNldC0+ZWxlbXMgPSByZV9tYWxsb2MgKElkeCwgMik7CisgIGlm IChCRSAoc2V0LT5lbGVtcyA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gUkVHX0VTUEFDRTsK KyAgaWYgKGVsZW0xID09IGVsZW0yKQorICAgIHsKKyAgICAgIHNldC0+bmVsZW0gPSAxOwor ICAgICAgc2V0LT5lbGVtc1swXSA9IGVsZW0xOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAg ICAgIHNldC0+bmVsZW0gPSAyOworICAgICAgaWYgKGVsZW0xIDwgZWxlbTIpCisJeworCSAg c2V0LT5lbGVtc1swXSA9IGVsZW0xOworCSAgc2V0LT5lbGVtc1sxXSA9IGVsZW0yOworCX0K KyAgICAgIGVsc2UKKwl7CisJICBzZXQtPmVsZW1zWzBdID0gZWxlbTI7CisJICBzZXQtPmVs ZW1zWzFdID0gZWxlbTE7CisJfQorICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQor CitzdGF0aWMgcmVnX2VycmNvZGVfdAorX19hdHRyaWJ1dGVfd2Fybl91bnVzZWRfcmVzdWx0 X18KK3JlX25vZGVfc2V0X2luaXRfY29weSAocmVfbm9kZV9zZXQgKmRlc3QsIGNvbnN0IHJl X25vZGVfc2V0ICpzcmMpCit7CisgIGRlc3QtPm5lbGVtID0gc3JjLT5uZWxlbTsKKyAgaWYg KHNyYy0+bmVsZW0gPiAwKQorICAgIHsKKyAgICAgIGRlc3QtPmFsbG9jID0gZGVzdC0+bmVs ZW07CisgICAgICBkZXN0LT5lbGVtcyA9IHJlX21hbGxvYyAoSWR4LCBkZXN0LT5hbGxvYyk7 CisgICAgICBpZiAoQkUgKGRlc3QtPmVsZW1zID09IE5VTEwsIDApKQorCXsKKwkgIGRlc3Qt PmFsbG9jID0gZGVzdC0+bmVsZW0gPSAwOworCSAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQor ICAgICAgbWVtY3B5IChkZXN0LT5lbGVtcywgc3JjLT5lbGVtcywgc3JjLT5uZWxlbSAqIHNp emVvZiAoSWR4KSk7CisgICAgfQorICBlbHNlCisgICAgcmVfbm9kZV9zZXRfaW5pdF9lbXB0 eSAoZGVzdCk7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogQ2FsY3VsYXRlIHRo ZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHNldHMgU1JDMSBhbmQgU1JDMi4gQW5kIG1lcmdlIGl0 IHRvCisgICBERVNULiBSZXR1cm4gdmFsdWUgaW5kaWNhdGUgdGhlIGVycm9yIGNvZGUgb3Ig UkVHX05PRVJST1IgaWYgc3VjY2VlZGVkLgorICAgTm90ZTogV2UgYXNzdW1lIGRlc3QtPmVs ZW1zIGlzIE5VTEwsIHdoZW4gZGVzdC0+YWxsb2MgaXMgMC4gICovCisKK3N0YXRpYyByZWdf ZXJyY29kZV90CitfX2F0dHJpYnV0ZV93YXJuX3VudXNlZF9yZXN1bHRfXworcmVfbm9kZV9z ZXRfYWRkX2ludGVyc2VjdCAocmVfbm9kZV9zZXQgKmRlc3QsIGNvbnN0IHJlX25vZGVfc2V0 ICpzcmMxLAorCQkJICAgY29uc3QgcmVfbm9kZV9zZXQgKnNyYzIpCit7CisgIElkeCBpMSwg aTIsIGlzLCBpZCwgZGVsdGEsIHNiYXNlOworICBpZiAoc3JjMS0+bmVsZW0gPT0gMCB8fCBz cmMyLT5uZWxlbSA9PSAwKQorICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKworICAvKiBXZSBu ZWVkIGRlc3QtPm5lbGVtICsgMiAqIGVsZW1zX2luX2ludGVyc2VjdGlvbjsgdGhpcyBpcyBh CisgICAgIGNvbnNlcnZhdGl2ZSBlc3RpbWF0ZS4gICovCisgIGlmIChzcmMxLT5uZWxlbSAr IHNyYzItPm5lbGVtICsgZGVzdC0+bmVsZW0gPiBkZXN0LT5hbGxvYykKKyAgICB7CisgICAg ICBJZHggbmV3X2FsbG9jID0gc3JjMS0+bmVsZW0gKyBzcmMyLT5uZWxlbSArIGRlc3QtPmFs bG9jOworICAgICAgSWR4ICpuZXdfZWxlbXMgPSByZV9yZWFsbG9jIChkZXN0LT5lbGVtcywg SWR4LCBuZXdfYWxsb2MpOworICAgICAgaWYgKEJFIChuZXdfZWxlbXMgPT0gTlVMTCwgMCkp CisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBkZXN0LT5lbGVtcyA9IG5ld19lbGVtczsK KyAgICAgIGRlc3QtPmFsbG9jID0gbmV3X2FsbG9jOworICAgIH0KKworICAvKiBGaW5kIHRo ZSBpdGVtcyBpbiB0aGUgaW50ZXJzZWN0aW9uIG9mIFNSQzEgYW5kIFNSQzIsIGFuZCBjb3B5 CisgICAgIGludG8gdGhlIHRvcCBvZiBERVNUIHRob3NlIHRoYXQgYXJlIG5vdCBhbHJlYWR5 IGluIERFU1QgaXRzZWxmLiAgKi8KKyAgc2Jhc2UgPSBkZXN0LT5uZWxlbSArIHNyYzEtPm5l bGVtICsgc3JjMi0+bmVsZW07CisgIGkxID0gc3JjMS0+bmVsZW0gLSAxOworICBpMiA9IHNy YzItPm5lbGVtIC0gMTsKKyAgaWQgPSBkZXN0LT5uZWxlbSAtIDE7CisgIGZvciAoOzspCisg ICAgeworICAgICAgaWYgKHNyYzEtPmVsZW1zW2kxXSA9PSBzcmMyLT5lbGVtc1tpMl0pCisJ eworCSAgLyogVHJ5IHRvIGZpbmQgdGhlIGl0ZW0gaW4gREVTVC4gIE1heWJlIHdlIGNvdWxk IGJpbmFyeSBzZWFyY2g/ICAqLworCSAgd2hpbGUgKGlkID49IDAgJiYgZGVzdC0+ZWxlbXNb aWRdID4gc3JjMS0+ZWxlbXNbaTFdKQorCSAgICAtLWlkOworCisJICBpZiAoaWQgPCAwIHx8 IGRlc3QtPmVsZW1zW2lkXSAhPSBzcmMxLT5lbGVtc1tpMV0pCisgICAgICAgICAgICBkZXN0 LT5lbGVtc1stLXNiYXNlXSA9IHNyYzEtPmVsZW1zW2kxXTsKKworCSAgaWYgKC0taTEgPCAw IHx8IC0taTIgPCAwKQorCSAgICBicmVhazsKKwl9CisKKyAgICAgIC8qIExvd2VyIHRoZSBo aWdoZXN0IG9mIHRoZSB0d28gaXRlbXMuICAqLworICAgICAgZWxzZSBpZiAoc3JjMS0+ZWxl bXNbaTFdIDwgc3JjMi0+ZWxlbXNbaTJdKQorCXsKKwkgIGlmICgtLWkyIDwgMCkKKwkgICAg YnJlYWs7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmICgtLWkxIDwgMCkKKwkgICAgYnJl YWs7CisJfQorICAgIH0KKworICBpZCA9IGRlc3QtPm5lbGVtIC0gMTsKKyAgaXMgPSBkZXN0 LT5uZWxlbSArIHNyYzEtPm5lbGVtICsgc3JjMi0+bmVsZW0gLSAxOworICBkZWx0YSA9IGlz IC0gc2Jhc2UgKyAxOworCisgIC8qIE5vdyBjb3B5LiAgV2hlbiBERUxUQSBiZWNvbWVzIHpl cm8sIHRoZSByZW1haW5pbmcKKyAgICAgREVTVCBlbGVtZW50cyBhcmUgYWxyZWFkeSBpbiBw bGFjZTsgdGhpcyBpcyBtb3JlIG9yCisgICAgIGxlc3MgdGhlIHNhbWUgbG9vcCB0aGF0IGlz IGluIHJlX25vZGVfc2V0X21lcmdlLiAgKi8KKyAgZGVzdC0+bmVsZW0gKz0gZGVsdGE7Cisg IGlmIChkZWx0YSA+IDAgJiYgaWQgPj0gMCkKKyAgICBmb3IgKDs7KQorICAgICAgeworCWlm IChkZXN0LT5lbGVtc1tpc10gPiBkZXN0LT5lbGVtc1tpZF0pCisJICB7CisJICAgIC8qIENv cHkgZnJvbSB0aGUgdG9wLiAgKi8KKwkgICAgZGVzdC0+ZWxlbXNbaWQgKyBkZWx0YS0tXSA9 IGRlc3QtPmVsZW1zW2lzLS1dOworCSAgICBpZiAoZGVsdGEgPT0gMCkKKwkgICAgICBicmVh azsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIC8qIFNsaWRlIGZyb20gdGhlIGJvdHRvbS4g ICovCisJICAgIGRlc3QtPmVsZW1zW2lkICsgZGVsdGFdID0gZGVzdC0+ZWxlbXNbaWRdOwor CSAgICBpZiAoLS1pZCA8IDApCisJICAgICAgYnJlYWs7CisJICB9CisgICAgICB9CisKKyAg LyogQ29weSByZW1haW5pbmcgU1JDIGVsZW1lbnRzLiAgKi8KKyAgbWVtY3B5IChkZXN0LT5l bGVtcywgZGVzdC0+ZWxlbXMgKyBzYmFzZSwgZGVsdGEgKiBzaXplb2YgKElkeCkpOworCisg IHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogQ2FsY3VsYXRlIHRoZSB1bmlvbiBzZXQg b2YgdGhlIHNldHMgU1JDMSBhbmQgU1JDMi4gQW5kIHN0b3JlIGl0IHRvCisgICBERVNULiBS ZXR1cm4gdmFsdWUgaW5kaWNhdGUgdGhlIGVycm9yIGNvZGUgb3IgUkVHX05PRVJST1IgaWYg c3VjY2VlZGVkLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK19fYXR0cmlidXRlX3dh cm5fdW51c2VkX3Jlc3VsdF9fCityZV9ub2RlX3NldF9pbml0X3VuaW9uIChyZV9ub2RlX3Nl dCAqZGVzdCwgY29uc3QgcmVfbm9kZV9zZXQgKnNyYzEsCisJCQljb25zdCByZV9ub2RlX3Nl dCAqc3JjMikKK3sKKyAgSWR4IGkxLCBpMiwgaWQ7CisgIGlmIChzcmMxICE9IE5VTEwgJiYg c3JjMS0+bmVsZW0gPiAwICYmIHNyYzIgIT0gTlVMTCAmJiBzcmMyLT5uZWxlbSA+IDApCisg ICAgeworICAgICAgZGVzdC0+YWxsb2MgPSBzcmMxLT5uZWxlbSArIHNyYzItPm5lbGVtOwor ICAgICAgZGVzdC0+ZWxlbXMgPSByZV9tYWxsb2MgKElkeCwgZGVzdC0+YWxsb2MpOworICAg ICAgaWYgKEJFIChkZXN0LT5lbGVtcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFD RTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoc3JjMSAhPSBOVUxMICYmIHNy YzEtPm5lbGVtID4gMCkKKwlyZXR1cm4gcmVfbm9kZV9zZXRfaW5pdF9jb3B5IChkZXN0LCBz cmMxKTsKKyAgICAgIGVsc2UgaWYgKHNyYzIgIT0gTlVMTCAmJiBzcmMyLT5uZWxlbSA+IDAp CisJcmV0dXJuIHJlX25vZGVfc2V0X2luaXRfY29weSAoZGVzdCwgc3JjMik7CisgICAgICBl bHNlCisJcmVfbm9kZV9zZXRfaW5pdF9lbXB0eSAoZGVzdCk7CisgICAgICByZXR1cm4gUkVH X05PRVJST1I7CisgICAgfQorICBmb3IgKGkxID0gaTIgPSBpZCA9IDAgOyBpMSA8IHNyYzEt Pm5lbGVtICYmIGkyIDwgc3JjMi0+bmVsZW0gOykKKyAgICB7CisgICAgICBpZiAoc3JjMS0+ ZWxlbXNbaTFdID4gc3JjMi0+ZWxlbXNbaTJdKQorCXsKKwkgIGRlc3QtPmVsZW1zW2lkKytd ID0gc3JjMi0+ZWxlbXNbaTIrK107CisJICBjb250aW51ZTsKKwl9CisgICAgICBpZiAoc3Jj MS0+ZWxlbXNbaTFdID09IHNyYzItPmVsZW1zW2kyXSkKKwkrK2kyOworICAgICAgZGVzdC0+ ZWxlbXNbaWQrK10gPSBzcmMxLT5lbGVtc1tpMSsrXTsKKyAgICB9CisgIGlmIChpMSA8IHNy YzEtPm5lbGVtKQorICAgIHsKKyAgICAgIG1lbWNweSAoZGVzdC0+ZWxlbXMgKyBpZCwgc3Jj MS0+ZWxlbXMgKyBpMSwKKwkgICAgIChzcmMxLT5uZWxlbSAtIGkxKSAqIHNpemVvZiAoSWR4 KSk7CisgICAgICBpZCArPSBzcmMxLT5uZWxlbSAtIGkxOworICAgIH0KKyAgZWxzZSBpZiAo aTIgPCBzcmMyLT5uZWxlbSkKKyAgICB7CisgICAgICBtZW1jcHkgKGRlc3QtPmVsZW1zICsg aWQsIHNyYzItPmVsZW1zICsgaTIsCisJICAgICAoc3JjMi0+bmVsZW0gLSBpMikgKiBzaXpl b2YgKElkeCkpOworICAgICAgaWQgKz0gc3JjMi0+bmVsZW0gLSBpMjsKKyAgICB9CisgIGRl c3QtPm5lbGVtID0gaWQ7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogQ2FsY3Vs YXRlIHRoZSB1bmlvbiBzZXQgb2YgdGhlIHNldHMgREVTVCBhbmQgU1JDLiBBbmQgc3RvcmUg aXQgdG8KKyAgIERFU1QuIFJldHVybiB2YWx1ZSBpbmRpY2F0ZSB0aGUgZXJyb3IgY29kZSBv ciBSRUdfTk9FUlJPUiBpZiBzdWNjZWVkZWQuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVf dAorX19hdHRyaWJ1dGVfd2Fybl91bnVzZWRfcmVzdWx0X18KK3JlX25vZGVfc2V0X21lcmdl IChyZV9ub2RlX3NldCAqZGVzdCwgY29uc3QgcmVfbm9kZV9zZXQgKnNyYykKK3sKKyAgSWR4 IGlzLCBpZCwgc2Jhc2UsIGRlbHRhOworICBpZiAoc3JjID09IE5VTEwgfHwgc3JjLT5uZWxl bSA9PSAwKQorICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyAgaWYgKGRlc3QtPmFsbG9jIDwg MiAqIHNyYy0+bmVsZW0gKyBkZXN0LT5uZWxlbSkKKyAgICB7CisgICAgICBJZHggbmV3X2Fs bG9jID0gMiAqIChzcmMtPm5lbGVtICsgZGVzdC0+YWxsb2MpOworICAgICAgSWR4ICpuZXdf YnVmZmVyID0gcmVfcmVhbGxvYyAoZGVzdC0+ZWxlbXMsIElkeCwgbmV3X2FsbG9jKTsKKyAg ICAgIGlmIChCRSAobmV3X2J1ZmZlciA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFD RTsKKyAgICAgIGRlc3QtPmVsZW1zID0gbmV3X2J1ZmZlcjsKKyAgICAgIGRlc3QtPmFsbG9j ID0gbmV3X2FsbG9jOworICAgIH0KKworICBpZiAoQkUgKGRlc3QtPm5lbGVtID09IDAsIDAp KQorICAgIHsKKyAgICAgIGRlc3QtPm5lbGVtID0gc3JjLT5uZWxlbTsKKyAgICAgIG1lbWNw eSAoZGVzdC0+ZWxlbXMsIHNyYy0+ZWxlbXMsIHNyYy0+bmVsZW0gKiBzaXplb2YgKElkeCkp OworICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworICAgIH0KKworICAvKiBDb3B5IGludG8g dGhlIHRvcCBvZiBERVNUIHRoZSBpdGVtcyBvZiBTUkMgdGhhdCBhcmUgbm90CisgICAgIGZv dW5kIGluIERFU1QuICBNYXliZSB3ZSBjb3VsZCBiaW5hcnkgc2VhcmNoIGluIERFU1Q/ICAq LworICBmb3IgKHNiYXNlID0gZGVzdC0+bmVsZW0gKyAyICogc3JjLT5uZWxlbSwKKyAgICAg ICBpcyA9IHNyYy0+bmVsZW0gLSAxLCBpZCA9IGRlc3QtPm5lbGVtIC0gMTsgaXMgPj0gMCAm JiBpZCA+PSAwOyApCisgICAgeworICAgICAgaWYgKGRlc3QtPmVsZW1zW2lkXSA9PSBzcmMt PmVsZW1zW2lzXSkKKwlpcy0tLCBpZC0tOworICAgICAgZWxzZSBpZiAoZGVzdC0+ZWxlbXNb aWRdIDwgc3JjLT5lbGVtc1tpc10pCisJZGVzdC0+ZWxlbXNbLS1zYmFzZV0gPSBzcmMtPmVs ZW1zW2lzLS1dOworICAgICAgZWxzZSAvKiBpZiAoZGVzdC0+ZWxlbXNbaWRdID4gc3JjLT5l bGVtc1tpc10pICovCisJLS1pZDsKKyAgICB9CisKKyAgaWYgKGlzID49IDApCisgICAgewor ICAgICAgLyogSWYgREVTVCBpcyBleGhhdXN0ZWQsIHRoZSByZW1haW5pbmcgaXRlbXMgb2Yg U1JDIG11c3QgYmUgdW5pcXVlLiAgKi8KKyAgICAgIHNiYXNlIC09IGlzICsgMTsKKyAgICAg IG1lbWNweSAoZGVzdC0+ZWxlbXMgKyBzYmFzZSwgc3JjLT5lbGVtcywgKGlzICsgMSkgKiBz aXplb2YgKElkeCkpOworICAgIH0KKworICBpZCA9IGRlc3QtPm5lbGVtIC0gMTsKKyAgaXMg PSBkZXN0LT5uZWxlbSArIDIgKiBzcmMtPm5lbGVtIC0gMTsKKyAgZGVsdGEgPSBpcyAtIHNi YXNlICsgMTsKKyAgaWYgKGRlbHRhID09IDApCisgICAgcmV0dXJuIFJFR19OT0VSUk9SOwor CisgIC8qIE5vdyBjb3B5LiAgV2hlbiBERUxUQSBiZWNvbWVzIHplcm8sIHRoZSByZW1haW5p bmcKKyAgICAgREVTVCBlbGVtZW50cyBhcmUgYWxyZWFkeSBpbiBwbGFjZS4gICovCisgIGRl c3QtPm5lbGVtICs9IGRlbHRhOworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIGlmIChkZXN0 LT5lbGVtc1tpc10gPiBkZXN0LT5lbGVtc1tpZF0pCisJeworCSAgLyogQ29weSBmcm9tIHRo ZSB0b3AuICAqLworCSAgZGVzdC0+ZWxlbXNbaWQgKyBkZWx0YS0tXSA9IGRlc3QtPmVsZW1z W2lzLS1dOworCSAgaWYgKGRlbHRhID09IDApCisJICAgIGJyZWFrOworCX0KKyAgICAgIGVs c2UKKwl7CisJICAvKiBTbGlkZSBmcm9tIHRoZSBib3R0b20uICAqLworCSAgZGVzdC0+ZWxl bXNbaWQgKyBkZWx0YV0gPSBkZXN0LT5lbGVtc1tpZF07CisJICBpZiAoLS1pZCA8IDApCisJ ICAgIHsKKwkgICAgICAvKiBDb3B5IHJlbWFpbmluZyBTUkMgZWxlbWVudHMuICAqLworCSAg ICAgIG1lbWNweSAoZGVzdC0+ZWxlbXMsIGRlc3QtPmVsZW1zICsgc2Jhc2UsCisJCSAgICAg IGRlbHRhICogc2l6ZW9mIChJZHgpKTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAg ICB9CisKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBJbnNlcnQgdGhlIG5ldyBl bGVtZW50IEVMRU0gdG8gdGhlIHJlX25vZGVfc2V0KiBTRVQuCisgICBTRVQgc2hvdWxkIG5v dCBhbHJlYWR5IGhhdmUgRUxFTS4KKyAgIFJldHVybiB0cnVlIGlmIHN1Y2Nlc3NmdWwuICAq LworCitzdGF0aWMgYm9vbAorX19hdHRyaWJ1dGVfd2Fybl91bnVzZWRfcmVzdWx0X18KK3Jl X25vZGVfc2V0X2luc2VydCAocmVfbm9kZV9zZXQgKnNldCwgSWR4IGVsZW0pCit7CisgIElk eCBpZHg7CisgIC8qIEluIGNhc2UgdGhlIHNldCBpcyBlbXB0eS4gICovCisgIGlmIChzZXQt PmFsbG9jID09IDApCisgICAgcmV0dXJuIEJFIChyZV9ub2RlX3NldF9pbml0XzEgKHNldCwg ZWxlbSkgPT0gUkVHX05PRVJST1IsIDEpOworCisgIGlmIChCRSAoc2V0LT5uZWxlbSwgMCkg PT0gMCkKKyAgICB7CisgICAgICAvKiBXZSBhbHJlYWR5IGd1YXJhbnRlZWQgYWJvdmUgdGhh dCBzZXQtPmFsbG9jICE9IDAuICAqLworICAgICAgc2V0LT5lbGVtc1swXSA9IGVsZW07Cisg ICAgICArK3NldC0+bmVsZW07CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgLyog UmVhbGxvYyBpZiB3ZSBuZWVkLiAgKi8KKyAgaWYgKHNldC0+YWxsb2MgPT0gc2V0LT5uZWxl bSkKKyAgICB7CisgICAgICBJZHggKm5ld19lbGVtczsKKyAgICAgIHNldC0+YWxsb2MgPSBz ZXQtPmFsbG9jICogMjsKKyAgICAgIG5ld19lbGVtcyA9IHJlX3JlYWxsb2MgKHNldC0+ZWxl bXMsIElkeCwgc2V0LT5hbGxvYyk7CisgICAgICBpZiAoQkUgKG5ld19lbGVtcyA9PSBOVUxM LCAwKSkKKwlyZXR1cm4gZmFsc2U7CisgICAgICBzZXQtPmVsZW1zID0gbmV3X2VsZW1zOwor ICAgIH0KKworICAvKiBNb3ZlIHRoZSBlbGVtZW50cyB3aGljaCBmb2xsb3dzIHRoZSBuZXcg ZWxlbWVudC4gIFRlc3QgdGhlCisgICAgIGZpcnN0IGVsZW1lbnQgc2VwYXJhdGVseSB0byBz a2lwIGEgY2hlY2sgaW4gdGhlIGlubmVyIGxvb3AuICAqLworICBpZiAoZWxlbSA8IHNldC0+ ZWxlbXNbMF0pCisgICAgeworICAgICAgaWR4ID0gMDsKKyAgICAgIGZvciAoaWR4ID0gc2V0 LT5uZWxlbTsgaWR4ID4gMDsgaWR4LS0pCisJc2V0LT5lbGVtc1tpZHhdID0gc2V0LT5lbGVt c1tpZHggLSAxXTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBmb3IgKGlkeCA9IHNl dC0+bmVsZW07IHNldC0+ZWxlbXNbaWR4IC0gMV0gPiBlbGVtOyBpZHgtLSkKKwlzZXQtPmVs ZW1zW2lkeF0gPSBzZXQtPmVsZW1zW2lkeCAtIDFdOworICAgIH0KKworICAvKiBJbnNlcnQg dGhlIG5ldyBlbGVtZW50LiAgKi8KKyAgc2V0LT5lbGVtc1tpZHhdID0gZWxlbTsKKyAgKytz ZXQtPm5lbGVtOworICByZXR1cm4gdHJ1ZTsKK30KKworLyogSW5zZXJ0IHRoZSBuZXcgZWxl bWVudCBFTEVNIHRvIHRoZSByZV9ub2RlX3NldCogU0VULgorICAgU0VUIHNob3VsZCBub3Qg YWxyZWFkeSBoYXZlIGFueSBlbGVtZW50IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBFTEVN LgorICAgUmV0dXJuIHRydWUgaWYgc3VjY2Vzc2Z1bC4gICovCisKK3N0YXRpYyBib29sCitf X2F0dHJpYnV0ZV93YXJuX3VudXNlZF9yZXN1bHRfXworcmVfbm9kZV9zZXRfaW5zZXJ0X2xh c3QgKHJlX25vZGVfc2V0ICpzZXQsIElkeCBlbGVtKQoreworICAvKiBSZWFsbG9jIGlmIHdl IG5lZWQuICAqLworICBpZiAoc2V0LT5hbGxvYyA9PSBzZXQtPm5lbGVtKQorICAgIHsKKyAg ICAgIElkeCAqbmV3X2VsZW1zOworICAgICAgc2V0LT5hbGxvYyA9IChzZXQtPmFsbG9jICsg MSkgKiAyOworICAgICAgbmV3X2VsZW1zID0gcmVfcmVhbGxvYyAoc2V0LT5lbGVtcywgSWR4 LCBzZXQtPmFsbG9jKTsKKyAgICAgIGlmIChCRSAobmV3X2VsZW1zID09IE5VTEwsIDApKQor CXJldHVybiBmYWxzZTsKKyAgICAgIHNldC0+ZWxlbXMgPSBuZXdfZWxlbXM7CisgICAgfQor CisgIC8qIEluc2VydCB0aGUgbmV3IGVsZW1lbnQuICAqLworICBzZXQtPmVsZW1zW3NldC0+ bmVsZW0rK10gPSBlbGVtOworICByZXR1cm4gdHJ1ZTsKK30KKworLyogQ29tcGFyZSB0d28g bm9kZSBzZXRzIFNFVDEgYW5kIFNFVDIuCisgICBSZXR1cm4gdHJ1ZSBpZiBTRVQxIGFuZCBT RVQyIGFyZSBlcXVpdmFsZW50LiAgKi8KKworc3RhdGljIGJvb2wKK19fYXR0cmlidXRlX18g KChwdXJlKSkKK3JlX25vZGVfc2V0X2NvbXBhcmUgKGNvbnN0IHJlX25vZGVfc2V0ICpzZXQx LCBjb25zdCByZV9ub2RlX3NldCAqc2V0MikKK3sKKyAgSWR4IGk7CisgIGlmIChzZXQxID09 IE5VTEwgfHwgc2V0MiA9PSBOVUxMIHx8IHNldDEtPm5lbGVtICE9IHNldDItPm5lbGVtKQor ICAgIHJldHVybiBmYWxzZTsKKyAgZm9yIChpID0gc2V0MS0+bmVsZW0gOyAtLWkgPj0gMCA7 ICkKKyAgICBpZiAoc2V0MS0+ZWxlbXNbaV0gIT0gc2V0Mi0+ZWxlbXNbaV0pCisgICAgICBy ZXR1cm4gZmFsc2U7CisgIHJldHVybiB0cnVlOworfQorCisvKiBSZXR1cm4gKGlkeCArIDEp IGlmIFNFVCBjb250YWlucyB0aGUgZWxlbWVudCBFTEVNLCByZXR1cm4gMCBvdGhlcndpc2Uu ICAqLworCitzdGF0aWMgSWR4CitfX2F0dHJpYnV0ZV9fICgocHVyZSkpCityZV9ub2RlX3Nl dF9jb250YWlucyAoY29uc3QgcmVfbm9kZV9zZXQgKnNldCwgSWR4IGVsZW0pCit7CisgIF9f cmVfc2l6ZV90IGlkeCwgcmlnaHQsIG1pZDsKKyAgaWYgKHNldC0+bmVsZW0gPD0gMCkKKyAg ICByZXR1cm4gMDsKKworICAvKiBCaW5hcnkgc2VhcmNoIHRoZSBlbGVtZW50LiAgKi8KKyAg aWR4ID0gMDsKKyAgcmlnaHQgPSBzZXQtPm5lbGVtIC0gMTsKKyAgd2hpbGUgKGlkeCA8IHJp Z2h0KQorICAgIHsKKyAgICAgIG1pZCA9IChpZHggKyByaWdodCkgLyAyOworICAgICAgaWYg KHNldC0+ZWxlbXNbbWlkXSA8IGVsZW0pCisJaWR4ID0gbWlkICsgMTsKKyAgICAgIGVsc2UK KwlyaWdodCA9IG1pZDsKKyAgICB9CisgIHJldHVybiBzZXQtPmVsZW1zW2lkeF0gPT0gZWxl bSA/IGlkeCArIDEgOiAwOworfQorCitzdGF0aWMgdm9pZAorcmVfbm9kZV9zZXRfcmVtb3Zl X2F0IChyZV9ub2RlX3NldCAqc2V0LCBJZHggaWR4KQoreworICBpZiAoaWR4IDwgMCB8fCBp ZHggPj0gc2V0LT5uZWxlbSkKKyAgICByZXR1cm47CisgIC0tc2V0LT5uZWxlbTsKKyAgZm9y ICg7IGlkeCA8IHNldC0+bmVsZW07IGlkeCsrKQorICAgIHNldC0+ZWxlbXNbaWR4XSA9IHNl dC0+ZWxlbXNbaWR4ICsgMV07Cit9CisMCisKKy8qIEFkZCB0aGUgdG9rZW4gVE9LRU4gdG8g ZGZhLT5ub2RlcywgYW5kIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIHRva2VuLgorICAgT3Ig cmV0dXJuIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkLiAgKi8KKworc3RhdGljIElkeAorcmVf ZGZhX2FkZF9ub2RlIChyZV9kZmFfdCAqZGZhLCByZV90b2tlbl90IHRva2VuKQoreworICBp ZiAoQkUgKGRmYS0+bm9kZXNfbGVuID49IGRmYS0+bm9kZXNfYWxsb2MsIDApKQorICAgIHsK KyAgICAgIHNpemVfdCBuZXdfbm9kZXNfYWxsb2MgPSBkZmEtPm5vZGVzX2FsbG9jICogMjsK KyAgICAgIElkeCAqbmV3X25leHRzLCAqbmV3X2luZGljZXM7CisgICAgICByZV9ub2RlX3Nl dCAqbmV3X2VkZXN0cywgKm5ld19lY2xvc3VyZXM7CisgICAgICByZV90b2tlbl90ICpuZXdf bm9kZXM7CisKKyAgICAgIC8qIEF2b2lkIG92ZXJmbG93cyBpbiByZWFsbG9jLiAgKi8KKyAg ICAgIGNvbnN0IHNpemVfdCBtYXhfb2JqZWN0X3NpemUgPSBNQVggKHNpemVvZiAocmVfdG9r ZW5fdCksCisJCQkJCSAgTUFYIChzaXplb2YgKHJlX25vZGVfc2V0KSwKKwkJCQkJICAgICAg IHNpemVvZiAoSWR4KSkpOworICAgICAgaWYgKEJFIChNSU4gKElEWF9NQVgsIFNJWkVfTUFY IC8gbWF4X29iamVjdF9zaXplKSA8IG5ld19ub2Rlc19hbGxvYywgMCkpCisJcmV0dXJuIC0x OworCisgICAgICBuZXdfbm9kZXMgPSByZV9yZWFsbG9jIChkZmEtPm5vZGVzLCByZV90b2tl bl90LCBuZXdfbm9kZXNfYWxsb2MpOworICAgICAgaWYgKEJFIChuZXdfbm9kZXMgPT0gTlVM TCwgMCkpCisJcmV0dXJuIC0xOworICAgICAgZGZhLT5ub2RlcyA9IG5ld19ub2RlczsKKyAg ICAgIG5ld19uZXh0cyA9IHJlX3JlYWxsb2MgKGRmYS0+bmV4dHMsIElkeCwgbmV3X25vZGVz X2FsbG9jKTsKKyAgICAgIG5ld19pbmRpY2VzID0gcmVfcmVhbGxvYyAoZGZhLT5vcmdfaW5k aWNlcywgSWR4LCBuZXdfbm9kZXNfYWxsb2MpOworICAgICAgbmV3X2VkZXN0cyA9IHJlX3Jl YWxsb2MgKGRmYS0+ZWRlc3RzLCByZV9ub2RlX3NldCwgbmV3X25vZGVzX2FsbG9jKTsKKyAg ICAgIG5ld19lY2xvc3VyZXMgPSByZV9yZWFsbG9jIChkZmEtPmVjbG9zdXJlcywgcmVfbm9k ZV9zZXQsIG5ld19ub2Rlc19hbGxvYyk7CisgICAgICBpZiAoQkUgKG5ld19uZXh0cyA9PSBO VUxMIHx8IG5ld19pbmRpY2VzID09IE5VTEwKKwkgICAgICB8fCBuZXdfZWRlc3RzID09IE5V TEwgfHwgbmV3X2VjbG9zdXJlcyA9PSBOVUxMLCAwKSkKKwl7CisJICAgcmVfZnJlZSAobmV3 X25leHRzKTsKKwkgICByZV9mcmVlIChuZXdfaW5kaWNlcyk7CisJICAgcmVfZnJlZSAobmV3 X2VkZXN0cyk7CisJICAgcmVfZnJlZSAobmV3X2VjbG9zdXJlcyk7CisJICAgcmV0dXJuIC0x OworCX0KKyAgICAgIGRmYS0+bmV4dHMgPSBuZXdfbmV4dHM7CisgICAgICBkZmEtPm9yZ19p bmRpY2VzID0gbmV3X2luZGljZXM7CisgICAgICBkZmEtPmVkZXN0cyA9IG5ld19lZGVzdHM7 CisgICAgICBkZmEtPmVjbG9zdXJlcyA9IG5ld19lY2xvc3VyZXM7CisgICAgICBkZmEtPm5v ZGVzX2FsbG9jID0gbmV3X25vZGVzX2FsbG9jOworICAgIH0KKyAgZGZhLT5ub2Rlc1tkZmEt Pm5vZGVzX2xlbl0gPSB0b2tlbjsKKyAgZGZhLT5ub2Rlc1tkZmEtPm5vZGVzX2xlbl0uY29u c3RyYWludCA9IDA7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgZGZhLT5ub2Rlc1tkZmEt Pm5vZGVzX2xlbl0uYWNjZXB0X21iID0KKyAgICAoKHRva2VuLnR5cGUgPT0gT1BfUEVSSU9E ICYmIGRmYS0+bWJfY3VyX21heCA+IDEpCisgICAgIHx8IHRva2VuLnR5cGUgPT0gQ09NUExF WF9CUkFDS0VUKTsKKyNlbmRpZgorICBkZmEtPm5leHRzW2RmYS0+bm9kZXNfbGVuXSA9IC0x OworICByZV9ub2RlX3NldF9pbml0X2VtcHR5IChkZmEtPmVkZXN0cyArIGRmYS0+bm9kZXNf bGVuKTsKKyAgcmVfbm9kZV9zZXRfaW5pdF9lbXB0eSAoZGZhLT5lY2xvc3VyZXMgKyBkZmEt Pm5vZGVzX2xlbik7CisgIHJldHVybiBkZmEtPm5vZGVzX2xlbisrOworfQorCitzdGF0aWMg cmVfaGFzaHZhbF90CitjYWxjX3N0YXRlX2hhc2ggKGNvbnN0IHJlX25vZGVfc2V0ICpub2Rl cywgdW5zaWduZWQgaW50IGNvbnRleHQpCit7CisgIHJlX2hhc2h2YWxfdCBoYXNoID0gbm9k ZXMtPm5lbGVtICsgY29udGV4dDsKKyAgSWR4IGk7CisgIGZvciAoaSA9IDAgOyBpIDwgbm9k ZXMtPm5lbGVtIDsgaSsrKQorICAgIGhhc2ggKz0gbm9kZXMtPmVsZW1zW2ldOworICByZXR1 cm4gaGFzaDsKK30KKworLyogU2VhcmNoIGZvciB0aGUgc3RhdGUgd2hvc2Ugbm9kZV9zZXQg aXMgZXF1aXZhbGVudCB0byBOT0RFUy4KKyAgIFJldHVybiB0aGUgcG9pbnRlciB0byB0aGUg c3RhdGUsIGlmIHdlIGZvdW5kIGl0IGluIHRoZSBERkEuCisgICBPdGhlcndpc2UgY3JlYXRl IHRoZSBuZXcgb25lIGFuZCByZXR1cm4gaXQuICBJbiBjYXNlIG9mIGFuIGVycm9yCisgICBy ZXR1cm4gTlVMTCBhbmQgc2V0IHRoZSBlcnJvciBjb2RlIGluIEVSUi4KKyAgIE5vdGU6IC0g V2UgYXNzdW1lIE5VTEwgYXMgdGhlIGludmFsaWQgc3RhdGUsIHRoZW4gaXQgaXMgcG9zc2li bGUgdGhhdAorCSAgIHJldHVybiB2YWx1ZSBpcyBOVUxMIGFuZCBFUlIgaXMgUkVHX05PRVJS T1IuCisJIC0gV2UgbmV2ZXIgcmV0dXJuIG5vbi1OVUxMIHZhbHVlIGluIGNhc2Ugb2YgYW55 IGVycm9ycywgaXQgaXMgZm9yCisJICAgb3B0aW1pemF0aW9uLiAgKi8KKworc3RhdGljIHJl X2RmYXN0YXRlX3QgKgorX19hdHRyaWJ1dGVfd2Fybl91bnVzZWRfcmVzdWx0X18KK3JlX2Fj cXVpcmVfc3RhdGUgKHJlZ19lcnJjb2RlX3QgKmVyciwgY29uc3QgcmVfZGZhX3QgKmRmYSwK KwkJICBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMpCit7CisgIHJlX2hhc2h2YWxfdCBoYXNo OworICByZV9kZmFzdGF0ZV90ICpuZXdfc3RhdGU7CisgIHN0cnVjdCByZV9zdGF0ZV90YWJs ZV9lbnRyeSAqc3BvdDsKKyAgSWR4IGk7CisjaWYgZGVmaW5lZCBHQ0NfTElOVCB8fCBkZWZp bmVkIGxpbnQKKyAgLyogU3VwcHJlc3MgYm9ndXMgdW5pbml0aWFsaXplZC12YXJpYWJsZSB3 YXJuaW5ncy4gICovCisgICplcnIgPSBSRUdfTk9FUlJPUjsKKyNlbmRpZgorICBpZiAoQkUg KG5vZGVzLT5uZWxlbSA9PSAwLCAwKSkKKyAgICB7CisgICAgICAqZXJyID0gUkVHX05PRVJS T1I7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIGhhc2ggPSBjYWxjX3N0YXRlX2hh c2ggKG5vZGVzLCAwKTsKKyAgc3BvdCA9IGRmYS0+c3RhdGVfdGFibGUgKyAoaGFzaCAmIGRm YS0+c3RhdGVfaGFzaF9tYXNrKTsKKworICBmb3IgKGkgPSAwIDsgaSA8IHNwb3QtPm51bSA7 IGkrKykKKyAgICB7CisgICAgICByZV9kZmFzdGF0ZV90ICpzdGF0ZSA9IHNwb3QtPmFycmF5 W2ldOworICAgICAgaWYgKGhhc2ggIT0gc3RhdGUtPmhhc2gpCisJY29udGludWU7CisgICAg ICBpZiAocmVfbm9kZV9zZXRfY29tcGFyZSAoJnN0YXRlLT5ub2Rlcywgbm9kZXMpKQorCXJl dHVybiBzdGF0ZTsKKyAgICB9CisKKyAgLyogVGhlcmUgYXJlIG5vIGFwcHJvcHJpYXRlIHN0 YXRlIGluIHRoZSBkZmEsIGNyZWF0ZSB0aGUgbmV3IG9uZS4gICovCisgIG5ld19zdGF0ZSA9 IGNyZWF0ZV9jaV9uZXdzdGF0ZSAoZGZhLCBub2RlcywgaGFzaCk7CisgIGlmIChCRSAobmV3 X3N0YXRlID09IE5VTEwsIDApKQorICAgICplcnIgPSBSRUdfRVNQQUNFOworCisgIHJldHVy biBuZXdfc3RhdGU7Cit9CisKKy8qIFNlYXJjaCBmb3IgdGhlIHN0YXRlIHdob3NlIG5vZGVf c2V0IGlzIGVxdWl2YWxlbnQgdG8gTk9ERVMgYW5kCisgICB3aG9zZSBjb250ZXh0IGlzIGVx dWl2YWxlbnQgdG8gQ09OVEVYVC4KKyAgIFJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgc3Rh dGUsIGlmIHdlIGZvdW5kIGl0IGluIHRoZSBERkEuCisgICBPdGhlcndpc2UgY3JlYXRlIHRo ZSBuZXcgb25lIGFuZCByZXR1cm4gaXQuICBJbiBjYXNlIG9mIGFuIGVycm9yCisgICByZXR1 cm4gTlVMTCBhbmQgc2V0IHRoZSBlcnJvciBjb2RlIGluIEVSUi4KKyAgIE5vdGU6IC0gV2Ug YXNzdW1lIE5VTEwgYXMgdGhlIGludmFsaWQgc3RhdGUsIHRoZW4gaXQgaXMgcG9zc2libGUg dGhhdAorCSAgIHJldHVybiB2YWx1ZSBpcyBOVUxMIGFuZCBFUlIgaXMgUkVHX05PRVJST1Iu CisJIC0gV2UgbmV2ZXIgcmV0dXJuIG5vbi1OVUxMIHZhbHVlIGluIGNhc2Ugb2YgYW55IGVy cm9ycywgaXQgaXMgZm9yCisJICAgb3B0aW1pemF0aW9uLiAgKi8KKworc3RhdGljIHJlX2Rm YXN0YXRlX3QgKgorX19hdHRyaWJ1dGVfd2Fybl91bnVzZWRfcmVzdWx0X18KK3JlX2FjcXVp cmVfc3RhdGVfY29udGV4dCAocmVnX2VycmNvZGVfdCAqZXJyLCBjb25zdCByZV9kZmFfdCAq ZGZhLAorCQkJICBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMsIHVuc2lnbmVkIGludCBjb250 ZXh0KQoreworICByZV9oYXNodmFsX3QgaGFzaDsKKyAgcmVfZGZhc3RhdGVfdCAqbmV3X3N0 YXRlOworICBzdHJ1Y3QgcmVfc3RhdGVfdGFibGVfZW50cnkgKnNwb3Q7CisgIElkeCBpOwor I2lmIGRlZmluZWQgR0NDX0xJTlQgfHwgZGVmaW5lZCBsaW50CisgIC8qIFN1cHByZXNzIGJv Z3VzIHVuaW5pdGlhbGl6ZWQtdmFyaWFibGUgd2FybmluZ3MuICAqLworICAqZXJyID0gUkVH X05PRVJST1I7CisjZW5kaWYKKyAgaWYgKG5vZGVzLT5uZWxlbSA9PSAwKQorICAgIHsKKyAg ICAgICplcnIgPSBSRUdfTk9FUlJPUjsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAg aGFzaCA9IGNhbGNfc3RhdGVfaGFzaCAobm9kZXMsIGNvbnRleHQpOworICBzcG90ID0gZGZh LT5zdGF0ZV90YWJsZSArIChoYXNoICYgZGZhLT5zdGF0ZV9oYXNoX21hc2spOworCisgIGZv ciAoaSA9IDAgOyBpIDwgc3BvdC0+bnVtIDsgaSsrKQorICAgIHsKKyAgICAgIHJlX2RmYXN0 YXRlX3QgKnN0YXRlID0gc3BvdC0+YXJyYXlbaV07CisgICAgICBpZiAoc3RhdGUtPmhhc2gg PT0gaGFzaAorCSAgJiYgc3RhdGUtPmNvbnRleHQgPT0gY29udGV4dAorCSAgJiYgcmVfbm9k ZV9zZXRfY29tcGFyZSAoc3RhdGUtPmVudHJhbmNlX25vZGVzLCBub2RlcykpCisJcmV0dXJu IHN0YXRlOworICAgIH0KKyAgLyogVGhlcmUgYXJlIG5vIGFwcHJvcHJpYXRlIHN0YXRlIGlu ICdkZmEnLCBjcmVhdGUgdGhlIG5ldyBvbmUuICAqLworICBuZXdfc3RhdGUgPSBjcmVhdGVf Y2RfbmV3c3RhdGUgKGRmYSwgbm9kZXMsIGNvbnRleHQsIGhhc2gpOworICBpZiAoQkUgKG5l d19zdGF0ZSA9PSBOVUxMLCAwKSkKKyAgICAqZXJyID0gUkVHX0VTUEFDRTsKKworICByZXR1 cm4gbmV3X3N0YXRlOworfQorCisvKiBGaW5pc2ggaW5pdGlhbGl6YXRpb24gb2YgdGhlIG5l dyBzdGF0ZSBORVdTVEFURSwgYW5kIHVzaW5nIGl0cyBoYXNoIHZhbHVlCisgICBIQVNIIHB1 dCBpbiB0aGUgYXBwcm9wcmlhdGUgYnVja2V0IG9mIERGQSdzIHN0YXRlIHRhYmxlLiAgUmV0 dXJuIHZhbHVlCisgICBpbmRpY2F0ZXMgdGhlIGVycm9yIGNvZGUgaWYgZmFpbGVkLiAgKi8K Kworc3RhdGljIHJlZ19lcnJjb2RlX3QKK19fYXR0cmlidXRlX3dhcm5fdW51c2VkX3Jlc3Vs dF9fCityZWdpc3Rlcl9zdGF0ZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwgcmVfZGZhc3RhdGVf dCAqbmV3c3RhdGUsCisJCXJlX2hhc2h2YWxfdCBoYXNoKQoreworICBzdHJ1Y3QgcmVfc3Rh dGVfdGFibGVfZW50cnkgKnNwb3Q7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBJZHggaTsK KworICBuZXdzdGF0ZS0+aGFzaCA9IGhhc2g7CisgIGVyciA9IHJlX25vZGVfc2V0X2FsbG9j ICgmbmV3c3RhdGUtPm5vbl9lcHNfbm9kZXMsIG5ld3N0YXRlLT5ub2Rlcy5uZWxlbSk7Cisg IGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gUkVHX0VTUEFD RTsKKyAgZm9yIChpID0gMDsgaSA8IG5ld3N0YXRlLT5ub2Rlcy5uZWxlbTsgaSsrKQorICAg IHsKKyAgICAgIElkeCBlbGVtID0gbmV3c3RhdGUtPm5vZGVzLmVsZW1zW2ldOworICAgICAg aWYgKCFJU19FUFNJTE9OX05PREUgKGRmYS0+bm9kZXNbZWxlbV0udHlwZSkpCisJaWYgKCEg cmVfbm9kZV9zZXRfaW5zZXJ0X2xhc3QgKCZuZXdzdGF0ZS0+bm9uX2Vwc19ub2RlcywgZWxl bSkpCisJICByZXR1cm4gUkVHX0VTUEFDRTsKKyAgICB9CisKKyAgc3BvdCA9IGRmYS0+c3Rh dGVfdGFibGUgKyAoaGFzaCAmIGRmYS0+c3RhdGVfaGFzaF9tYXNrKTsKKyAgaWYgKEJFIChz cG90LT5hbGxvYyA8PSBzcG90LT5udW0sIDApKQorICAgIHsKKyAgICAgIElkeCBuZXdfYWxs b2MgPSAyICogc3BvdC0+bnVtICsgMjsKKyAgICAgIHJlX2RmYXN0YXRlX3QgKipuZXdfYXJy YXkgPSByZV9yZWFsbG9jIChzcG90LT5hcnJheSwgcmVfZGZhc3RhdGVfdCAqLAorCQkJCQkg ICAgICBuZXdfYWxsb2MpOworICAgICAgaWYgKEJFIChuZXdfYXJyYXkgPT0gTlVMTCwgMCkp CisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBzcG90LT5hcnJheSA9IG5ld19hcnJheTsK KyAgICAgIHNwb3QtPmFsbG9jID0gbmV3X2FsbG9jOworICAgIH0KKyAgc3BvdC0+YXJyYXlb c3BvdC0+bnVtKytdID0gbmV3c3RhdGU7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKwor c3RhdGljIHZvaWQKK2ZyZWVfc3RhdGUgKHJlX2RmYXN0YXRlX3QgKnN0YXRlKQoreworICBy ZV9ub2RlX3NldF9mcmVlICgmc3RhdGUtPm5vbl9lcHNfbm9kZXMpOworICByZV9ub2RlX3Nl dF9mcmVlICgmc3RhdGUtPmludmVjbG9zdXJlKTsKKyAgaWYgKHN0YXRlLT5lbnRyYW5jZV9u b2RlcyAhPSAmc3RhdGUtPm5vZGVzKQorICAgIHsKKyAgICAgIHJlX25vZGVfc2V0X2ZyZWUg KHN0YXRlLT5lbnRyYW5jZV9ub2Rlcyk7CisgICAgICByZV9mcmVlIChzdGF0ZS0+ZW50cmFu Y2Vfbm9kZXMpOworICAgIH0KKyAgcmVfbm9kZV9zZXRfZnJlZSAoJnN0YXRlLT5ub2Rlcyk7 CisgIHJlX2ZyZWUgKHN0YXRlLT53b3JkX3RydGFibGUpOworICByZV9mcmVlIChzdGF0ZS0+ dHJ0YWJsZSk7CisgIHJlX2ZyZWUgKHN0YXRlKTsKK30KKworLyogQ3JlYXRlIHRoZSBuZXcg c3RhdGUgd2hpY2ggaXMgaW5kZXBlbmRlbnQgb2YgY29udGV4dHMuCisgICBSZXR1cm4gdGhl IG5ldyBzdGF0ZSBpZiBzdWNjZWVkZWQsIG90aGVyd2lzZSByZXR1cm4gTlVMTC4gICovCisK K3N0YXRpYyByZV9kZmFzdGF0ZV90ICoKK19fYXR0cmlidXRlX3dhcm5fdW51c2VkX3Jlc3Vs dF9fCitjcmVhdGVfY2lfbmV3c3RhdGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGNvbnN0IHJl X25vZGVfc2V0ICpub2RlcywKKwkJICAgIHJlX2hhc2h2YWxfdCBoYXNoKQoreworICBJZHgg aTsKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIHJlX2RmYXN0YXRlX3QgKm5ld3N0YXRlOwor CisgIG5ld3N0YXRlID0gKHJlX2RmYXN0YXRlX3QgKikgY2FsbG9jIChzaXplb2YgKHJlX2Rm YXN0YXRlX3QpLCAxKTsKKyAgaWYgKEJFIChuZXdzdGF0ZSA9PSBOVUxMLCAwKSkKKyAgICBy ZXR1cm4gTlVMTDsKKyAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF9jb3B5ICgmbmV3c3RhdGUt Pm5vZGVzLCBub2Rlcyk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAg ICB7CisgICAgICByZV9mcmVlIChuZXdzdGF0ZSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAg ICB9CisKKyAgbmV3c3RhdGUtPmVudHJhbmNlX25vZGVzID0gJm5ld3N0YXRlLT5ub2RlczsK KyAgZm9yIChpID0gMCA7IGkgPCBub2Rlcy0+bmVsZW0gOyBpKyspCisgICAgeworICAgICAg cmVfdG9rZW5fdCAqbm9kZSA9IGRmYS0+bm9kZXMgKyBub2Rlcy0+ZWxlbXNbaV07CisgICAg ICByZV90b2tlbl90eXBlX3QgdHlwZSA9IG5vZGUtPnR5cGU7CisgICAgICBpZiAodHlwZSA9 PSBDSEFSQUNURVIgJiYgIW5vZGUtPmNvbnN0cmFpbnQpCisJY29udGludWU7CisjaWZkZWYg UkVfRU5BQkxFX0kxOE4KKyAgICAgIG5ld3N0YXRlLT5hY2NlcHRfbWIgfD0gbm9kZS0+YWNj ZXB0X21iOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKKyAgICAgIC8qIElmIHRo ZSBzdGF0ZSBoYXMgdGhlIGhhbHQgbm9kZSwgdGhlIHN0YXRlIGlzIGEgaGFsdCBzdGF0ZS4g ICovCisgICAgICBpZiAodHlwZSA9PSBFTkRfT0ZfUkUpCisJbmV3c3RhdGUtPmhhbHQgPSAx OworICAgICAgZWxzZSBpZiAodHlwZSA9PSBPUF9CQUNLX1JFRikKKwluZXdzdGF0ZS0+aGFz X2JhY2tyZWYgPSAxOworICAgICAgZWxzZSBpZiAodHlwZSA9PSBBTkNIT1IgfHwgbm9kZS0+ Y29uc3RyYWludCkKKwluZXdzdGF0ZS0+aGFzX2NvbnN0cmFpbnQgPSAxOworICAgIH0KKyAg ZXJyID0gcmVnaXN0ZXJfc3RhdGUgKGRmYSwgbmV3c3RhdGUsIGhhc2gpOworICBpZiAoQkUg KGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgeworICAgICAgZnJlZV9zdGF0ZSAobmV3 c3RhdGUpOworICAgICAgbmV3c3RhdGUgPSBOVUxMOworICAgIH0KKyAgcmV0dXJuIG5ld3N0 YXRlOworfQorCisvKiBDcmVhdGUgdGhlIG5ldyBzdGF0ZSB3aGljaCBpcyBkZXBlbmQgb24g dGhlIGNvbnRleHQgQ09OVEVYVC4KKyAgIFJldHVybiB0aGUgbmV3IHN0YXRlIGlmIHN1Y2Nl ZWRlZCwgb3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgKi8KKworc3RhdGljIHJlX2RmYXN0YXRl X3QgKgorX19hdHRyaWJ1dGVfd2Fybl91bnVzZWRfcmVzdWx0X18KK2NyZWF0ZV9jZF9uZXdz dGF0ZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzLAor CQkgICAgdW5zaWduZWQgaW50IGNvbnRleHQsIHJlX2hhc2h2YWxfdCBoYXNoKQoreworICBJ ZHggaSwgbmN0eF9ub2RlcyA9IDA7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICByZV9kZmFz dGF0ZV90ICpuZXdzdGF0ZTsKKworICBuZXdzdGF0ZSA9IChyZV9kZmFzdGF0ZV90ICopIGNh bGxvYyAoc2l6ZW9mIChyZV9kZmFzdGF0ZV90KSwgMSk7CisgIGlmIChCRSAobmV3c3RhdGUg PT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIE5VTEw7CisgIGVyciA9IHJlX25vZGVfc2V0X2lu aXRfY29weSAoJm5ld3N0YXRlLT5ub2Rlcywgbm9kZXMpOworICBpZiAoQkUgKGVyciAhPSBS RUdfTk9FUlJPUiwgMCkpCisgICAgeworICAgICAgcmVfZnJlZSAobmV3c3RhdGUpOworICAg ICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIG5ld3N0YXRlLT5jb250ZXh0ID0gY29udGV4 dDsKKyAgbmV3c3RhdGUtPmVudHJhbmNlX25vZGVzID0gJm5ld3N0YXRlLT5ub2RlczsKKwor ICBmb3IgKGkgPSAwIDsgaSA8IG5vZGVzLT5uZWxlbSA7IGkrKykKKyAgICB7CisgICAgICBy ZV90b2tlbl90ICpub2RlID0gZGZhLT5ub2RlcyArIG5vZGVzLT5lbGVtc1tpXTsKKyAgICAg IHJlX3Rva2VuX3R5cGVfdCB0eXBlID0gbm9kZS0+dHlwZTsKKyAgICAgIHVuc2lnbmVkIGlu dCBjb25zdHJhaW50ID0gbm9kZS0+Y29uc3RyYWludDsKKworICAgICAgaWYgKHR5cGUgPT0g Q0hBUkFDVEVSICYmICFjb25zdHJhaW50KQorCWNvbnRpbnVlOworI2lmZGVmIFJFX0VOQUJM RV9JMThOCisgICAgICBuZXdzdGF0ZS0+YWNjZXB0X21iIHw9IG5vZGUtPmFjY2VwdF9tYjsK KyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisgICAgICAvKiBJZiB0aGUgc3RhdGUg aGFzIHRoZSBoYWx0IG5vZGUsIHRoZSBzdGF0ZSBpcyBhIGhhbHQgc3RhdGUuICAqLworICAg ICAgaWYgKHR5cGUgPT0gRU5EX09GX1JFKQorCW5ld3N0YXRlLT5oYWx0ID0gMTsKKyAgICAg IGVsc2UgaWYgKHR5cGUgPT0gT1BfQkFDS19SRUYpCisJbmV3c3RhdGUtPmhhc19iYWNrcmVm ID0gMTsKKworICAgICAgaWYgKGNvbnN0cmFpbnQpCisJeworCSAgaWYgKG5ld3N0YXRlLT5l bnRyYW5jZV9ub2RlcyA9PSAmbmV3c3RhdGUtPm5vZGVzKQorCSAgICB7CisJICAgICAgbmV3 c3RhdGUtPmVudHJhbmNlX25vZGVzID0gcmVfbWFsbG9jIChyZV9ub2RlX3NldCwgMSk7CisJ ICAgICAgaWYgKEJFIChuZXdzdGF0ZS0+ZW50cmFuY2Vfbm9kZXMgPT0gTlVMTCwgMCkpCisJ CXsKKwkJICBmcmVlX3N0YXRlIChuZXdzdGF0ZSk7CisJCSAgcmV0dXJuIE5VTEw7CisJCX0K KwkgICAgICBpZiAocmVfbm9kZV9zZXRfaW5pdF9jb3B5IChuZXdzdGF0ZS0+ZW50cmFuY2Vf bm9kZXMsIG5vZGVzKQorCQkgICE9IFJFR19OT0VSUk9SKQorCQlyZXR1cm4gTlVMTDsKKwkg ICAgICBuY3R4X25vZGVzID0gMDsKKwkgICAgICBuZXdzdGF0ZS0+aGFzX2NvbnN0cmFpbnQg PSAxOworCSAgICB9CisKKwkgIGlmIChOT1RfU0FUSVNGWV9QUkVWX0NPTlNUUkFJTlQgKGNv bnN0cmFpbnQsY29udGV4dCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9yZW1vdmVf YXQgKCZuZXdzdGF0ZS0+bm9kZXMsIGkgLSBuY3R4X25vZGVzKTsKKwkgICAgICArK25jdHhf bm9kZXM7CisJICAgIH0KKwl9CisgICAgfQorICBlcnIgPSByZWdpc3Rlcl9zdGF0ZSAoZGZh LCBuZXdzdGF0ZSwgaGFzaCk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkK KyAgICB7CisgICAgICBmcmVlX3N0YXRlIChuZXdzdGF0ZSk7CisgICAgICBuZXdzdGF0ZSA9 IE5VTEw7CisgICAgfQorICByZXR1cm4gIG5ld3N0YXRlOworfQpkaWZmIC0tZ2l0IGEvbGli L3JlZ2V4X2ludGVybmFsLmggYi9saWIvcmVnZXhfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43YmJlODAyYmM1Ci0tLSAvZGV2L251bGwKKysr IGIvbGliL3JlZ2V4X2ludGVybmFsLmgKQEAgLTAsMCArMSw5MTEgQEAKKy8qIEV4dGVuZGVk IHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBhbmQgc2VhcmNoIGxpYnJhcnkuCisgICBD b3B5cmlnaHQgKEMpIDIwMDItMjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29udHJp YnV0ZWQgYnkgSXNhbXUgSGFzZWdhd2EgPGlzYW11QHlhbWF0by5pYm0uY29tPi4KKworICAg VGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05V IEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9u ZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAgPGh0dHBzOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX1JFR0VYX0lOVEVSTkFMX0gK KyNkZWZpbmUgX1JFR0VYX0lOVEVSTkFMX0ggMQorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+Cisj aW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxp Yi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyNp bmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgPHdjdHlw ZS5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworLyog UHJvcGVydGllcyBvZiBpbnRlZ2Vycy4gIEFsdGhvdWdoIEdudWxpYiBoYXMgaW50cHJvcHMu aCwgZ2xpYmMgZG9lcworICAgd2l0aG91dCBmb3Igbm93LiAgKi8KKyNpZm5kZWYgX0xJQkMK KyMgaW5jbHVkZSAiaW50cHJvcHMuaCIKKyNlbHNlCisvKiBUcnVlIGlmIHRoZSByZWFsIHR5 cGUgVCBpcyBzaWduZWQuICAqLworIyBkZWZpbmUgVFlQRV9TSUdORUQodCkgKCEgKCh0KSAw IDwgKHQpIC0xKSkKKworLyogVHJ1ZSBpZiBhZGRpbmcgdGhlIG5vbm5lZ2F0aXZlIElkeCB2 YWx1ZXMgQSBhbmQgQiB3b3VsZCBvdmVyZmxvdy4KKyAgIElmIGZhbHNlLCBzZXQgKlIgdG8g QSArIEIuICBBLCBCLCBhbmQgUiBtYXkgYmUgZXZhbHVhdGVkIG1vcmUgdGhhbgorICAgb25j ZSwgb3IgemVybyB0aW1lcy4gIEFsdGhvdWdoIHRoaXMgaXMgbm90IGEgZnVsbCBpbXBsZW1l bnRhdGlvbiBvZgorICAgR251bGliIElOVF9BRERfV1JBUFYsIGl0IGlzIGdvb2QgZW5vdWdo IGZvciBnbGliYyByZWdleCBjb2RlLgorICAgRklYTUU6IFRoaXMgaW1wbGVtZW50YXRpb24g aXMgYSBmcmFnaWxlIHN0b3BnYXAsIGFuZCB0aGlzIGZpbGUgd291bGQKKyAgIGJlIHNpbXBs ZXIgYW5kIG1vcmUgcm9idXN0IGlmIGludHByb3BzLmggd2VyZSBtaWdyYXRlZCBpbnRvIGds aWJjLiAgKi8KKyMgZGVmaW5lIElOVF9BRERfV1JBUFYoYSwgYiwgcikgXAorICAgKElEWF9N QVggLSAoYSkgPCAoYikgPyB0cnVlIDogKCoocikgPSAoYSkgKyAoYiksIGZhbHNlKSkKKyNl bmRpZgorCisjaWZkZWYgX0xJQkMKKyMgaW5jbHVkZSA8bGliYy1sb2NrLmg+CisjIGRlZmlu ZSBsb2NrX2RlZmluZShuYW1lKSBfX2xpYmNfbG9ja19kZWZpbmUgKCwgbmFtZSkKKyMgZGVm aW5lIGxvY2tfaW5pdChsb2NrKSAoX19saWJjX2xvY2tfaW5pdCAobG9jayksIDApCisjIGRl ZmluZSBsb2NrX2ZpbmkobG9jaykgKCh2b2lkKSAwKQorIyBkZWZpbmUgbG9ja19sb2NrKGxv Y2spIF9fbGliY19sb2NrX2xvY2sgKGxvY2spCisjIGRlZmluZSBsb2NrX3VubG9jayhsb2Nr KSBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9MT0NL ICYmICFkZWZpbmVkIFVTRV9VTkxPQ0tFRF9JTworIyBpbmNsdWRlICJnbHRocmVhZC9sb2Nr LmgiCisgIC8qIFVzZSBnbF9sb2NrX2RlZmluZSBpZiBlbXB0eSBtYWNybyBhcmd1bWVudHMg YXJlIGtub3duIHRvIHdvcmsuCisgICAgIE90aGVyd2lzZSwgZmFsbCBiYWNrIG9uIGxlc3Mt cG9ydGFibGUgc3Vic3RpdHV0ZXMuICAqLworIyBpZiAoKGRlZmluZWQgX19HTlVDX18gJiYg IWRlZmluZWQgX19TVFJJQ1RfQU5TSV9fKSBcCisgICAgICB8fCAoZGVmaW5lZCBfX1NURENf VkVSU0lPTl9fICYmIDE5OTkwMUwgPD0gX19TVERDX1ZFUlNJT05fXykpCisjICBkZWZpbmUg bG9ja19kZWZpbmUobmFtZSkgZ2xfbG9ja19kZWZpbmUgKCwgbmFtZSkKKyMgZWxpZiBVU0Vf UE9TSVhfVEhSRUFEUworIyAgZGVmaW5lIGxvY2tfZGVmaW5lKG5hbWUpIHB0aHJlYWRfbXV0 ZXhfdCBuYW1lOworIyBlbGlmIFVTRV9QVEhfVEhSRUFEUworIyAgZGVmaW5lIGxvY2tfZGVm aW5lKG5hbWUpIHB0aF9tdXRleF90IG5hbWU7CisjIGVsaWYgVVNFX1NPTEFSSVNfVEhSRUFE UworIyAgZGVmaW5lIGxvY2tfZGVmaW5lKG5hbWUpIG11dGV4X3QgbmFtZTsKKyMgZWxpZiBV U0VfV0lORE9XU19USFJFQURTCisjICBkZWZpbmUgbG9ja19kZWZpbmUobmFtZSkgZ2xfbG9j a190IG5hbWU7CisjIGVsc2UKKyMgIGRlZmluZSBsb2NrX2RlZmluZShuYW1lKQorIyBlbmRp ZgorIyBkZWZpbmUgbG9ja19pbml0KGxvY2spIGdsdGhyZWFkX2xvY2tfaW5pdCAoJihsb2Nr KSkKKyMgZGVmaW5lIGxvY2tfZmluaShsb2NrKSBnbHRocmVhZF9sb2NrX2Rlc3Ryb3kgKCYo bG9jaykpCisjIGRlZmluZSBsb2NrX2xvY2sobG9jaykgZ2x0aHJlYWRfbG9ja19sb2NrICgm KGxvY2spKQorIyBkZWZpbmUgbG9ja191bmxvY2sobG9jaykgZ2x0aHJlYWRfbG9ja191bmxv Y2sgKCYobG9jaykpCisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QVEhSRUFEICYmICFkZWZpbmVk IFVTRV9VTkxPQ0tFRF9JTworIyBpbmNsdWRlIDxwdGhyZWFkLmg+CisjIGRlZmluZSBsb2Nr X2RlZmluZShuYW1lKSBwdGhyZWFkX211dGV4X3QgbmFtZTsKKyMgZGVmaW5lIGxvY2tfaW5p dChsb2NrKSBwdGhyZWFkX211dGV4X2luaXQgKCYobG9jayksIDApCisjIGRlZmluZSBsb2Nr X2ZpbmkobG9jaykgcHRocmVhZF9tdXRleF9kZXN0cm95ICgmKGxvY2spKQorIyBkZWZpbmUg bG9ja19sb2NrKGxvY2spIHB0aHJlYWRfbXV0ZXhfbG9jayAoJihsb2NrKSkKKyMgZGVmaW5l IGxvY2tfdW5sb2NrKGxvY2spIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmKGxvY2spKQorI2Vs c2UKKyMgZGVmaW5lIGxvY2tfZGVmaW5lKG5hbWUpCisjIGRlZmluZSBsb2NrX2luaXQobG9j aykgMAorIyBkZWZpbmUgbG9ja19maW5pKGxvY2spICgodm9pZCkgMCkKKyAgLyogVGhlICdk ZmEnIGF2b2lkcyBhbiAidW51c2VkIHZhcmlhYmxlICdkZmEnIiB3YXJuaW5nIGZyb20gR0ND LiAgKi8KKyMgZGVmaW5lIGxvY2tfbG9jayhsb2NrKSAoKHZvaWQpIGRmYSkKKyMgZGVmaW5l IGxvY2tfdW5sb2NrKGxvY2spICgodm9pZCkgMCkKKyNlbmRpZgorCisvKiBJbiBjYXNlIHRo YXQgdGhlIHN5c3RlbSBkb2Vzbid0IGhhdmUgaXNibGFuaygpLiAgKi8KKyNpZiAhZGVmaW5l ZCBfTElCQyAmJiAhIChkZWZpbmVkIGlzYmxhbmsgfHwgKEhBVkVfSVNCTEFOSyAmJiBIQVZF X0RFQ0xfSVNCTEFOSykpCisjIGRlZmluZSBpc2JsYW5rKGNoKSAoKGNoKSA9PSAnICcgfHwg KGNoKSA9PSAnXHQnKQorI2VuZGlmCisKKyNpZmRlZiBfTElCQworIyBpZm5kZWYgX1JFX0RF RklORV9MT0NBTEVfRlVOQ1RJT05TCisjICBkZWZpbmUgX1JFX0RFRklORV9MT0NBTEVfRlVO Q1RJT05TIDEKKyMgICBpbmNsdWRlIDxsb2NhbGUvbG9jYWxlaW5mby5oPgorIyAgIGluY2x1 ZGUgPGxvY2FsZS9jb2xsLWxvb2t1cC5oPgorIyBlbmRpZgorI2VuZGlmCisKKy8qIFRoaXMg aXMgZm9yIG90aGVyIEdOVSBkaXN0cmlidXRpb25zIHdpdGggaW50ZXJuYXRpb25hbGl6ZWQg bWVzc2FnZXMuICAqLworI2lmIChIQVZFX0xJQklOVExfSCAmJiBFTkFCTEVfTkxTKSB8fCBk ZWZpbmVkIF9MSUJDCisjIGluY2x1ZGUgPGxpYmludGwuaD4KKyMgaWZkZWYgX0xJQkMKKyMg IHVuZGVmIGdldHRleHQKKyMgIGRlZmluZSBnZXR0ZXh0KG1zZ2lkKSBcCisgIF9fZGNnZXR0 ZXh0IChfbGliY19pbnRsX2RvbWFpbm5hbWUsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKyMgZW5k aWYKKyNlbHNlCisjIHVuZGVmIGdldHRleHQKKyMgZGVmaW5lIGdldHRleHQobXNnaWQpICht c2dpZCkKKyNlbmRpZgorCisjaWZuZGVmIGdldHRleHRfbm9vcAorLyogVGhpcyBkZWZpbmUg aXMgc28geGdldHRleHQgY2FuIGZpbmQgdGhlIGludGVybmF0aW9uYWxpemFibGUKKyAgIHN0 cmluZ3MuICAqLworIyBkZWZpbmUgZ2V0dGV4dF9ub29wKFN0cmluZykgU3RyaW5nCisjZW5k aWYKKworI2lmIChkZWZpbmVkIE1CX0NVUl9NQVggJiYgSEFWRV9XQ1RZUEVfSCAmJiBIQVZF X0lTV0NUWVBFKSB8fCBfTElCQworIyBkZWZpbmUgUkVfRU5BQkxFX0kxOE4KKyNlbmRpZgor CisjZGVmaW5lIEJFKGV4cHIsIHZhbCkgX19idWlsdGluX2V4cGVjdCAoZXhwciwgdmFsKQor CisvKiBOdW1iZXIgb2YgQVNDSUkgY2hhcmFjdGVycy4gICovCisjZGVmaW5lIEFTQ0lJX0NI QVJTIDB4ODAKKworLyogTnVtYmVyIG9mIHNpbmdsZSBieXRlIGNoYXJhY3RlcnMuICAqLwor I2RlZmluZSBTQkNfTUFYIChVQ0hBUl9NQVggKyAxKQorCisjZGVmaW5lIENPTExfRUxFTV9M RU5fTUFYIDgKKworLyogVGhlIGNoYXJhY3RlciB3aGljaCByZXByZXNlbnRzIG5ld2xpbmUu ICAqLworI2RlZmluZSBORVdMSU5FX0NIQVIgJ1xuJworI2RlZmluZSBXSURFX05FV0xJTkVf Q0hBUiBMJ1xuJworCisvKiBSZW5hbWUgdG8gc3RhbmRhcmQgQVBJIGZvciB1c2luZyBvdXQg b2YgZ2xpYmMuICAqLworI2lmbmRlZiBfTElCQworIyB1bmRlZiBfX3djdHlwZQorIyB1bmRl ZiBfX2lzd2N0eXBlCisjIGRlZmluZSBfX3djdHlwZSB3Y3R5cGUKKyMgZGVmaW5lIF9faXN3 YWxudW0gaXN3YWxudW0KKyMgZGVmaW5lIF9faXN3Y3R5cGUgaXN3Y3R5cGUKKyMgZGVmaW5l IF9fdG93bG93ZXIgdG93bG93ZXIKKyMgZGVmaW5lIF9fdG93dXBwZXIgdG93dXBwZXIKKyMg ZGVmaW5lIF9fYnRvd2MgYnRvd2MKKyMgZGVmaW5lIF9fbWJydG93YyBtYnJ0b3djCisjIGRl ZmluZSBfX3djcnRvbWIgd2NydG9tYgorIyBkZWZpbmUgX19yZWdmcmVlIHJlZ2ZyZWUKKyMg ZGVmaW5lIGF0dHJpYnV0ZV9oaWRkZW4KKyNlbmRpZiAvKiBub3QgX0xJQkMgKi8KKworI2lm IF9fR05VQ19fIDwgMyArIChfX0dOVUNfTUlOT1JfXyA8IDEpCisjIGRlZmluZSBfX2F0dHJp YnV0ZV9fKGFyZykKKyNlbmRpZgorCisjaWZuZGVmIFNTSVpFX01BWAorIyBkZWZpbmUgU1NJ WkVfTUFYICgoc3NpemVfdCkgKFNJWkVfTUFYIC8gMikpCisjZW5kaWYKKworLyogVGhlIHR5 cGUgb2YgaW5kZXhlcyBpbnRvIHN0cmluZ3MuICBUaGlzIGlzIHNpZ25lZCwgbm90IHNpemVf dCwKKyAgIHNpbmNlIHRoZSBBUEkgcmVxdWlyZXMgaW5kZXhlcyB0byBmaXQgaW4gcmVnb2Zm X3QgYW55d2F5LCBhbmQgdXNpbmcKKyAgIHNpZ25lZCBpbnRlZ2VycyBtYWtlcyB0aGUgY29k ZSBhIGJpdCBzbWFsbGVyIGFuZCBwcmVzdW1hYmx5IGZhc3Rlci4KKyAgIFRoZSB0cmFkaXRp b25hbCBHTlUgcmVnZXggaW1wbGVtZW50YXRpb24gdXNlcyBpbnQgZm9yIGluZGV4ZXMuCisg ICBUaGUgUE9TSVgtY29tcGF0aWJsZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGEgcG9zc2libHkt d2lkZXIgdHlwZS4KKyAgIFRoZSBuYW1lICdJZHgnIGlzIHRocmVlIGxldHRlcnMgdG8gbWlu aW1pemUgdGhlIGhhc3NsZSBvZgorICAgcmVpbmRlbnRpbmcgYSBsb3Qgb2YgcmVnZXggY29k ZSB0aGF0IGZvcm1lcmx5IHVzZWQgJ2ludCcuICAqLwordHlwZWRlZiByZWdvZmZfdCBJZHg7 CisjaWZkZWYgX1JFR0VYX0xBUkdFX09GRlNFVFMKKyMgZGVmaW5lIElEWF9NQVggU1NJWkVf TUFYCisjZWxzZQorIyBkZWZpbmUgSURYX01BWCBJTlRfTUFYCisjZW5kaWYKKworLyogQSBo YXNoIHZhbHVlLCBzdWl0YWJsZSBmb3IgY29tcHV0aW5nIGhhc2ggdGFibGVzLiAgKi8KK3R5 cGVkZWYgX19yZV9zaXplX3QgcmVfaGFzaHZhbF90OworCisvKiBBbiBpbnRlZ2VyIHVzZWQg dG8gcmVwcmVzZW50IGEgc2V0IG9mIGJpdHMuICBJdCBtdXN0IGJlIHVuc2lnbmVkLAorICAg YW5kIG11c3QgYmUgYXQgbGVhc3QgYXMgd2lkZSBhcyB1bnNpZ25lZCBpbnQuICAqLwordHlw ZWRlZiB1bnNpZ25lZCBsb25nIGludCBiaXRzZXRfd29yZF90OworLyogQWxsIGJpdHMgc2V0 IGluIGEgYml0c2V0X3dvcmRfdC4gICovCisjZGVmaW5lIEJJVFNFVF9XT1JEX01BWCBVTE9O R19NQVgKKworLyogTnVtYmVyIG9mIGJpdHMgaW4gYSBiaXRzZXRfd29yZF90LiAgRm9yIHBv cnRhYmlsaXR5IHRvIGhvc3RzIHdpdGgKKyAgIHBhZGRpbmcgYml0cywgZG8gbm90IHVzZSAn KHNpemVvZiAoYml0c2V0X3dvcmRfdCkgKiBDSEFSX0JJVCknOworICAgaW5zdGVhZCwgZGVk dWNlIGl0IGRpcmVjdGx5IGZyb20gQklUU0VUX1dPUkRfTUFYLiAgQXZvaWQKKyAgIGdyZWF0 ZXItdGhhbi0zMi1iaXQgaW50ZWdlcnMgYW5kIHVuY29uZGl0aW9uYWwgc2hpZnRzIGJ5IG1v cmUgdGhhbgorICAgMzEgYml0cywgYXMgdGhleSdyZSBub3QgcG9ydGFibGUuICAqLworI2lm IEJJVFNFVF9XT1JEX01BWCA9PSAweGZmZmZmZmZmVUwKKyMgZGVmaW5lIEJJVFNFVF9XT1JE X0JJVFMgMzIKKyNlbGlmIEJJVFNFVF9XT1JEX01BWCA+PiAzMSA+PiA0ID09IDEKKyMgZGVm aW5lIEJJVFNFVF9XT1JEX0JJVFMgMzYKKyNlbGlmIEJJVFNFVF9XT1JEX01BWCA+PiAzMSA+ PiAxNiA9PSAxCisjIGRlZmluZSBCSVRTRVRfV09SRF9CSVRTIDQ4CisjZWxpZiBCSVRTRVRf V09SRF9NQVggPj4gMzEgPj4gMjggPT0gMQorIyBkZWZpbmUgQklUU0VUX1dPUkRfQklUUyA2 MAorI2VsaWYgQklUU0VUX1dPUkRfTUFYID4+IDMxID4+IDMxID4+IDEgPT0gMQorIyBkZWZp bmUgQklUU0VUX1dPUkRfQklUUyA2NAorI2VsaWYgQklUU0VUX1dPUkRfTUFYID4+IDMxID4+ IDMxID4+IDkgPT0gMQorIyBkZWZpbmUgQklUU0VUX1dPUkRfQklUUyA3MgorI2VsaWYgQklU U0VUX1dPUkRfTUFYID4+IDMxID4+IDMxID4+IDMxID4+IDMxID4+IDMgPT0gMQorIyBkZWZp bmUgQklUU0VUX1dPUkRfQklUUyAxMjgKKyNlbGlmIEJJVFNFVF9XT1JEX01BWCA+PiAzMSA+ PiAzMSA+PiAzMSA+PiAzMSA+PiAzMSA+PiAzMSA+PiAzMSA+PiAzMSA+PiA3ID09IDEKKyMg ZGVmaW5lIEJJVFNFVF9XT1JEX0JJVFMgMjU2CisjZWxpZiBCSVRTRVRfV09SRF9NQVggPj4g MzEgPj4gMzEgPj4gMzEgPj4gMzEgPj4gMzEgPj4gMzEgPj4gMzEgPj4gMzEgPj4gNyA+IDEK KyMgZGVmaW5lIEJJVFNFVF9XT1JEX0JJVFMgMjU3IC8qIGFueSB2YWx1ZSA+IFNCQ19NQVgg d2lsbCBkbyBoZXJlICovCisjIGlmIEJJVFNFVF9XT1JEX0JJVFMgPD0gU0JDX01BWAorIyAg ZXJyb3IgIkludmFsaWQgU0JDX01BWCIKKyMgZW5kaWYKKyNlbHNlCisjIGVycm9yICJBZGQg Y2FzZSBmb3IgbmV3IGJpdHNldF93b3JkX3Qgc2l6ZSIKKyNlbmRpZgorCisvKiBOdW1iZXIg b2YgYml0c2V0X3dvcmRfdCB2YWx1ZXMgaW4gYSBiaXRzZXRfdC4gICovCisjZGVmaW5lIEJJ VFNFVF9XT1JEUyAoKFNCQ19NQVggKyBCSVRTRVRfV09SRF9CSVRTIC0gMSkgLyBCSVRTRVRf V09SRF9CSVRTKQorCit0eXBlZGVmIGJpdHNldF93b3JkX3QgYml0c2V0X3RbQklUU0VUX1dP UkRTXTsKK3R5cGVkZWYgYml0c2V0X3dvcmRfdCAqcmVfYml0c2V0X3B0cl90OwordHlwZWRl ZiBjb25zdCBiaXRzZXRfd29yZF90ICpyZV9jb25zdF9iaXRzZXRfcHRyX3Q7CisKKyNkZWZp bmUgUFJFVl9XT1JEX0NPTlNUUkFJTlQgMHgwMDAxCisjZGVmaW5lIFBSRVZfTk9UV09SRF9D T05TVFJBSU5UIDB4MDAwMgorI2RlZmluZSBORVhUX1dPUkRfQ09OU1RSQUlOVCAweDAwMDQK KyNkZWZpbmUgTkVYVF9OT1RXT1JEX0NPTlNUUkFJTlQgMHgwMDA4CisjZGVmaW5lIFBSRVZf TkVXTElORV9DT05TVFJBSU5UIDB4MDAxMAorI2RlZmluZSBORVhUX05FV0xJTkVfQ09OU1RS QUlOVCAweDAwMjAKKyNkZWZpbmUgUFJFVl9CRUdCVUZfQ09OU1RSQUlOVCAweDAwNDAKKyNk ZWZpbmUgTkVYVF9FTkRCVUZfQ09OU1RSQUlOVCAweDAwODAKKyNkZWZpbmUgV09SRF9ERUxJ TV9DT05TVFJBSU5UIDB4MDEwMAorI2RlZmluZSBOT1RfV09SRF9ERUxJTV9DT05TVFJBSU5U IDB4MDIwMAorCit0eXBlZGVmIGVudW0KK3sKKyAgSU5TSURFX1dPUkQgPSBQUkVWX1dPUkRf Q09OU1RSQUlOVCB8IE5FWFRfV09SRF9DT05TVFJBSU5ULAorICBXT1JEX0ZJUlNUID0gUFJF Vl9OT1RXT1JEX0NPTlNUUkFJTlQgfCBORVhUX1dPUkRfQ09OU1RSQUlOVCwKKyAgV09SRF9M QVNUID0gUFJFVl9XT1JEX0NPTlNUUkFJTlQgfCBORVhUX05PVFdPUkRfQ09OU1RSQUlOVCwK KyAgSU5TSURFX05PVFdPUkQgPSBQUkVWX05PVFdPUkRfQ09OU1RSQUlOVCB8IE5FWFRfTk9U V09SRF9DT05TVFJBSU5ULAorICBMSU5FX0ZJUlNUID0gUFJFVl9ORVdMSU5FX0NPTlNUUkFJ TlQsCisgIExJTkVfTEFTVCA9IE5FWFRfTkVXTElORV9DT05TVFJBSU5ULAorICBCVUZfRklS U1QgPSBQUkVWX0JFR0JVRl9DT05TVFJBSU5ULAorICBCVUZfTEFTVCA9IE5FWFRfRU5EQlVG X0NPTlNUUkFJTlQsCisgIFdPUkRfREVMSU0gPSBXT1JEX0RFTElNX0NPTlNUUkFJTlQsCisg IE5PVF9XT1JEX0RFTElNID0gTk9UX1dPUkRfREVMSU1fQ09OU1RSQUlOVAorfSByZV9jb250 ZXh0X3R5cGU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIElkeCBhbGxvYzsKKyAgSWR4IG5l bGVtOworICBJZHggKmVsZW1zOworfSByZV9ub2RlX3NldDsKKwordHlwZWRlZiBlbnVtCit7 CisgIE5PTl9UWVBFID0gMCwKKworICAvKiBOb2RlIHR5cGUsIFRoZXNlIGFyZSB1c2VkIGJ5 IHRva2VuLCBub2RlLCB0cmVlLiAgKi8KKyAgQ0hBUkFDVEVSID0gMSwKKyAgRU5EX09GX1JF ID0gMiwKKyAgU0lNUExFX0JSQUNLRVQgPSAzLAorICBPUF9CQUNLX1JFRiA9IDQsCisgIE9Q X1BFUklPRCA9IDUsCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgQ09NUExFWF9CUkFDS0VU ID0gNiwKKyAgT1BfVVRGOF9QRVJJT0QgPSA3LAorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThO ICovCisKKyAgLyogV2UgZGVmaW5lIEVQU0lMT05fQklUIGFzIGEgbWFjcm8gc28gdGhhdCBP UF9PUEVOX1NVQkVYUCBpcyB1c2VkCisgICAgIHdoZW4gdGhlIGRlYnVnZ2VyIHNob3dzIHZh bHVlcyBvZiB0aGlzIGVudW0gdHlwZS4gICovCisjZGVmaW5lIEVQU0lMT05fQklUIDgKKyAg T1BfT1BFTl9TVUJFWFAgPSBFUFNJTE9OX0JJVCB8IDAsCisgIE9QX0NMT1NFX1NVQkVYUCA9 IEVQU0lMT05fQklUIHwgMSwKKyAgT1BfQUxUID0gRVBTSUxPTl9CSVQgfCAyLAorICBPUF9E VVBfQVNURVJJU0sgPSBFUFNJTE9OX0JJVCB8IDMsCisgIEFOQ0hPUiA9IEVQU0lMT05fQklU IHwgNCwKKworICAvKiBUcmVlIHR5cGUsIHRoZXNlIGFyZSB1c2VkIG9ubHkgYnkgdHJlZS4g Ki8KKyAgQ09OQ0FUID0gMTYsCisgIFNVQkVYUCA9IDE3LAorCisgIC8qIFRva2VuIHR5cGUs IHRoZXNlIGFyZSB1c2VkIG9ubHkgYnkgdG9rZW4uICAqLworICBPUF9EVVBfUExVUyA9IDE4 LAorICBPUF9EVVBfUVVFU1RJT04sCisgIE9QX09QRU5fQlJBQ0tFVCwKKyAgT1BfQ0xPU0Vf QlJBQ0tFVCwKKyAgT1BfQ0hBUlNFVF9SQU5HRSwKKyAgT1BfT1BFTl9EVVBfTlVNLAorICBP UF9DTE9TRV9EVVBfTlVNLAorICBPUF9OT05fTUFUQ0hfTElTVCwKKyAgT1BfT1BFTl9DT0xM X0VMRU0sCisgIE9QX0NMT1NFX0NPTExfRUxFTSwKKyAgT1BfT1BFTl9FUVVJVl9DTEFTUywK KyAgT1BfQ0xPU0VfRVFVSVZfQ0xBU1MsCisgIE9QX09QRU5fQ0hBUl9DTEFTUywKKyAgT1Bf Q0xPU0VfQ0hBUl9DTEFTUywKKyAgT1BfV09SRCwKKyAgT1BfTk9UV09SRCwKKyAgT1BfU1BB Q0UsCisgIE9QX05PVFNQQUNFLAorICBCQUNLX1NMQVNICisKK30gcmVfdG9rZW5fdHlwZV90 OworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIE11 bHRpYnl0ZSBjaGFyYWN0ZXJzLiAgKi8KKyAgd2NoYXJfdCAqbWJjaGFyczsKKworICAvKiBD b2xsYXRpbmcgc3ltYm9scy4gICovCisjIGlmZGVmIF9MSUJDCisgIGludDMyX3QgKmNvbGxf c3ltczsKKyMgZW5kaWYKKworICAvKiBFcXVpdmFsZW5jZSBjbGFzc2VzLiAqLworIyBpZmRl ZiBfTElCQworICBpbnQzMl90ICplcXVpdl9jbGFzc2VzOworIyBlbmRpZgorCisgIC8qIFJh bmdlIGV4cHJlc3Npb25zLiAqLworIyBpZmRlZiBfTElCQworICB1aW50MzJfdCAqcmFuZ2Vf c3RhcnRzOworICB1aW50MzJfdCAqcmFuZ2VfZW5kczsKKyMgZWxzZSAvKiBub3QgX0xJQkMg Ki8KKyAgd2NoYXJfdCAqcmFuZ2Vfc3RhcnRzOworICB3Y2hhcl90ICpyYW5nZV9lbmRzOwor IyBlbmRpZiAvKiBub3QgX0xJQkMgKi8KKworICAvKiBDaGFyYWN0ZXIgY2xhc3Nlcy4gKi8K KyAgd2N0eXBlX3QgKmNoYXJfY2xhc3NlczsKKworICAvKiBJZiB0aGlzIGNoYXJhY3RlciBz ZXQgaXMgdGhlIG5vbi1tYXRjaGluZyBsaXN0LiAgKi8KKyAgdW5zaWduZWQgaW50IG5vbl9t YXRjaCA6IDE7CisKKyAgLyogIyBvZiBtdWx0aWJ5dGUgY2hhcmFjdGVycy4gICovCisgIElk eCBubWJjaGFyczsKKworICAvKiAjIG9mIGNvbGxhdGluZyBzeW1ib2xzLiAgKi8KKyAgSWR4 IG5jb2xsX3N5bXM7CisKKyAgLyogIyBvZiBlcXVpdmFsZW5jZSBjbGFzc2VzLiAqLworICBJ ZHggbmVxdWl2X2NsYXNzZXM7CisKKyAgLyogIyBvZiByYW5nZSBleHByZXNzaW9ucy4gKi8K KyAgSWR4IG5yYW5nZXM7CisKKyAgLyogIyBvZiBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi8KKyAg SWR4IG5jaGFyX2NsYXNzZXM7Cit9IHJlX2NoYXJzZXRfdDsKKyNlbmRpZiAvKiBSRV9FTkFC TEVfSTE4TiAqLworCit0eXBlZGVmIHN0cnVjdAoreworICB1bmlvbgorICB7CisgICAgdW5z aWduZWQgY2hhciBjOwkJLyogZm9yIENIQVJBQ1RFUiAqLworICAgIHJlX2JpdHNldF9wdHJf dCBzYmNzZXQ7CS8qIGZvciBTSU1QTEVfQlJBQ0tFVCAqLworI2lmZGVmIFJFX0VOQUJMRV9J MThOCisgICAgcmVfY2hhcnNldF90ICptYmNzZXQ7CS8qIGZvciBDT01QTEVYX0JSQUNLRVQg Ki8KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworICAgIElkeCBpZHg7CQkJLyogZm9y IEJBQ0tfUkVGICovCisgICAgcmVfY29udGV4dF90eXBlIGN0eF90eXBlOwkvKiBmb3IgQU5D SE9SICovCisgIH0gb3ByOworI2lmIF9fR05VQ19fID49IDIgJiYgIWRlZmluZWQgX19TVFJJ Q1RfQU5TSV9fCisgIHJlX3Rva2VuX3R5cGVfdCB0eXBlIDogODsKKyNlbHNlCisgIHJlX3Rv a2VuX3R5cGVfdCB0eXBlOworI2VuZGlmCisgIHVuc2lnbmVkIGludCBjb25zdHJhaW50IDog MTA7CS8qIGNvbnRleHQgY29uc3RyYWludCAqLworICB1bnNpZ25lZCBpbnQgZHVwbGljYXRl ZCA6IDE7CisgIHVuc2lnbmVkIGludCBvcHRfc3ViZXhwIDogMTsKKyNpZmRlZiBSRV9FTkFC TEVfSTE4TgorICB1bnNpZ25lZCBpbnQgYWNjZXB0X21iIDogMTsKKyAgLyogVGhlc2UgMiBi aXRzIGNhbiBiZSBtb3ZlZCBpbnRvIHRoZSB1bmlvbiBpZiBuZWVkZWQgKGUuZy4gaWYgcnVu bmluZyBvdXQKKyAgICAgb2YgYml0czsgbW92ZSBvcHIuYyB0byBvcHIuYy5jIGFuZCBtb3Zl IHRoZSBmbGFncyB0byBvcHIuYy5mbGFncykuICAqLworICB1bnNpZ25lZCBpbnQgbWJfcGFy dGlhbCA6IDE7CisjZW5kaWYKKyAgdW5zaWduZWQgaW50IHdvcmRfY2hhciA6IDE7Cit9IHJl X3Rva2VuX3Q7CisKKyNkZWZpbmUgSVNfRVBTSUxPTl9OT0RFKHR5cGUpICgodHlwZSkgJiBF UFNJTE9OX0JJVCkKKworc3RydWN0IHJlX3N0cmluZ190Cit7CisgIC8qIEluZGljYXRlIHRo ZSByYXcgYnVmZmVyIHdoaWNoIGlzIHRoZSBvcmlnaW5hbCBzdHJpbmcgcGFzc2VkIGFzIGFu CisgICAgIGFyZ3VtZW50IG9mIHJlZ2V4ZWMoKSwgcmVfc2VhcmNoKCksIGV0Yy4uICAqLwor ICBjb25zdCB1bnNpZ25lZCBjaGFyICpyYXdfbWJzOworICAvKiBTdG9yZSB0aGUgbXVsdGli eXRlIHN0cmluZy4gIEluIGNhc2Ugb2YgImNhc2UgaW5zZW5zaXRpdmUgbW9kZSIgbGlrZQor ICAgICBSRUdfSUNBU0UsIHVwcGVyIGNhc2VzIG9mIHRoZSBzdHJpbmcgYXJlIHN0b3JlZCwg b3RoZXJ3aXNlIE1CUyBwb2ludHMKKyAgICAgdGhlIHNhbWUgYWRkcmVzcyB0aGF0IFJBV19N QlMgcG9pbnRzLiAgKi8KKyAgdW5zaWduZWQgY2hhciAqbWJzOworI2lmZGVmIFJFX0VOQUJM RV9JMThOCisgIC8qIFN0b3JlIHRoZSB3aWRlIGNoYXJhY3RlciBzdHJpbmcgd2hpY2ggaXMg Y29ycmVzcG9uZGluZyB0byBNQlMuICAqLworICB3aW50X3QgKndjczsKKyAgSWR4ICpvZmZz ZXRzOworICBtYnN0YXRlX3QgY3VyX3N0YXRlOworI2VuZGlmCisgIC8qIEluZGV4IGluIFJB V19NQlMuICBFYWNoIGNoYXJhY3RlciBtYnNbaV0gY29ycmVzcG9uZHMgdG8KKyAgICAgcmF3 X21ic1tyYXdfbWJzX2lkeCArIGldLiAgKi8KKyAgSWR4IHJhd19tYnNfaWR4OworICAvKiBU aGUgbGVuZ3RoIG9mIHRoZSB2YWxpZCBjaGFyYWN0ZXJzIGluIHRoZSBidWZmZXJzLiAgKi8K KyAgSWR4IHZhbGlkX2xlbjsKKyAgLyogVGhlIGNvcnJlc3BvbmRpbmcgbnVtYmVyIG9mIGJ5 dGVzIGluIHJhd19tYnMgYXJyYXkuICAqLworICBJZHggdmFsaWRfcmF3X2xlbjsKKyAgLyog VGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVycyBNQlMgYW5kIFdDUy4gICovCisgIElkeCBidWZz X2xlbjsKKyAgLyogVGhlIGluZGV4IGluIE1CUywgd2hpY2ggaXMgdXBkYXRlZCBieSByZV9z dHJpbmdfZmV0Y2hfYnl0ZS4gICovCisgIElkeCBjdXJfaWR4OworICAvKiBsZW5ndGggb2Yg UkFXX01CUyBhcnJheS4gICovCisgIElkeCByYXdfbGVuOworICAvKiBUaGlzIGlzIFJBV19M RU4gLSBSQVdfTUJTX0lEWCArIFZBTElEX0xFTiAtIFZBTElEX1JBV19MRU4uICAqLworICBJ ZHggbGVuOworICAvKiBFbmQgb2YgdGhlIGJ1ZmZlciBtYXkgYmUgc2hvcnRlciB0aGFuIGl0 cyBsZW5ndGggaW4gdGhlIGNhc2VzIHN1Y2gKKyAgICAgYXMgcmVfbWF0Y2hfMiwgcmVfc2Vh cmNoXzIuICBUaGVuLCB3ZSB1c2UgU1RPUCBmb3IgZW5kIG9mIHRoZSBidWZmZXIKKyAgICAg aW5zdGVhZCBvZiBMRU4uICAqLworICBJZHggcmF3X3N0b3A7CisgIC8qIFRoaXMgaXMgUkFX X1NUT1AgLSBSQVdfTUJTX0lEWCBhZGp1c3RlZCB0aHJvdWdoIE9GRlNFVFMuICAqLworICBJ ZHggc3RvcDsKKworICAvKiBUaGUgY29udGV4dCBvZiBtYnNbMF0uICBXZSBzdG9yZSB0aGUg Y29udGV4dCBpbmRlcGVuZGVudGx5LCBzaW5jZQorICAgICB0aGUgY29udGV4dCBvZiBtYnNb MF0gbWF5IGJlIGRpZmZlcmVudCBmcm9tIHJhd19tYnNbMF0sIHdoaWNoIGlzCisgICAgIHRo ZSBiZWdpbm5pbmcgb2YgdGhlIGlucHV0IHN0cmluZy4gICovCisgIHVuc2lnbmVkIGludCB0 aXBfY29udGV4dDsKKyAgLyogVGhlIHRyYW5zbGF0aW9uIHBhc3NlZCBhcyBhIHBhcnQgb2Yg YW4gYXJndW1lbnQgb2YgcmVfY29tcGlsZV9wYXR0ZXJuLiAgKi8KKyAgUkVfVFJBTlNMQVRF X1RZUEUgdHJhbnM7CisgIC8qIENvcHkgb2YgcmVfZGZhX3QncyB3b3JkX2NoYXIuICAqLwor ICByZV9jb25zdF9iaXRzZXRfcHRyX3Qgd29yZF9jaGFyOworICAvKiB0cnVlIGlmIFJFR19J Q0FTRS4gICovCisgIHVuc2lnbmVkIGNoYXIgaWNhc2U7CisgIHVuc2lnbmVkIGNoYXIgaXNf dXRmODsKKyAgdW5zaWduZWQgY2hhciBtYXBfbm90YXNjaWk7CisgIHVuc2lnbmVkIGNoYXIg bWJzX2FsbG9jYXRlZDsKKyAgdW5zaWduZWQgY2hhciBvZmZzZXRzX25lZWRlZDsKKyAgdW5z aWduZWQgY2hhciBuZXdsaW5lX2FuY2hvcjsKKyAgdW5zaWduZWQgY2hhciB3b3JkX29wc191 c2VkOworICBpbnQgbWJfY3VyX21heDsKK307Cit0eXBlZGVmIHN0cnVjdCByZV9zdHJpbmdf dCByZV9zdHJpbmdfdDsKKworCitzdHJ1Y3QgcmVfZGZhX3Q7Cit0eXBlZGVmIHN0cnVjdCBy ZV9kZmFfdCByZV9kZmFfdDsKKworI2lmbmRlZiBfTElCQworIyBkZWZpbmUgSVNfSU4obGli YykgZmFsc2UKKyNlbmRpZgorCisjZGVmaW5lIHJlX3N0cmluZ19wZWVrX2J5dGUocHN0ciwg b2Zmc2V0KSBcCisgICgocHN0ciktPm1ic1socHN0ciktPmN1cl9pZHggKyBvZmZzZXRdKQor I2RlZmluZSByZV9zdHJpbmdfZmV0Y2hfYnl0ZShwc3RyKSBcCisgICgocHN0ciktPm1ic1so cHN0ciktPmN1cl9pZHgrK10pCisjZGVmaW5lIHJlX3N0cmluZ19maXJzdF9ieXRlKHBzdHIs IGlkeCkgXAorICAoKGlkeCkgPT0gKHBzdHIpLT52YWxpZF9sZW4gfHwgKHBzdHIpLT53Y3Nb aWR4XSAhPSBXRU9GKQorI2RlZmluZSByZV9zdHJpbmdfaXNfc2luZ2xlX2J5dGVfY2hhcihw c3RyLCBpZHgpIFwKKyAgKChwc3RyKS0+d2NzW2lkeF0gIT0gV0VPRiAmJiAoKHBzdHIpLT52 YWxpZF9sZW4gPT0gKGlkeCkgKyAxIFwKKwkJCQl8fCAocHN0ciktPndjc1soaWR4KSArIDFd ICE9IFdFT0YpKQorI2RlZmluZSByZV9zdHJpbmdfZW9pKHBzdHIpICgocHN0ciktPnN0b3Ag PD0gKHBzdHIpLT5jdXJfaWR4KQorI2RlZmluZSByZV9zdHJpbmdfY3VyX2lkeChwc3RyKSAo KHBzdHIpLT5jdXJfaWR4KQorI2RlZmluZSByZV9zdHJpbmdfZ2V0X2J1ZmZlcihwc3RyKSAo KHBzdHIpLT5tYnMpCisjZGVmaW5lIHJlX3N0cmluZ19sZW5ndGgocHN0cikgKChwc3RyKS0+ bGVuKQorI2RlZmluZSByZV9zdHJpbmdfYnl0ZV9hdChwc3RyLGlkeCkgKChwc3RyKS0+bWJz W2lkeF0pCisjZGVmaW5lIHJlX3N0cmluZ19za2lwX2J5dGVzKHBzdHIsaWR4KSAoKHBzdHIp LT5jdXJfaWR4ICs9IChpZHgpKQorI2RlZmluZSByZV9zdHJpbmdfc2V0X2luZGV4KHBzdHIs aWR4KSAoKHBzdHIpLT5jdXJfaWR4ID0gKGlkeCkpCisKKyNpZiBkZWZpbmVkIF9MSUJDIHx8 IEhBVkVfQUxMT0NBCisjIGluY2x1ZGUgPGFsbG9jYS5oPgorI2VuZGlmCisKKyNpZm5kZWYg X0xJQkMKKyMgaWYgSEFWRV9BTExPQ0EKKy8qIFRoZSBPUyB1c3VhbGx5IGd1YXJhbnRlZXMg b25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKyAgIGFu ZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwgYXMgNDA5NiBieXRlcy4gIFNvIHdlIGNh bm5vdCBzYWZlbHkKKyAgIGFsbG9jYXRlIGFueXRoaW5nIGxhcmdlciB0aGFuIDQwOTYgYnl0 ZXMuICBBbHNvIGNhcmUgZm9yIHRoZSBwb3NzaWJpbGl0eQorICAgb2YgYSBmZXcgY29tcGls ZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBzdGFjayBzbG90cy4gICovCisjICBkZWZpbmUgX19s aWJjX3VzZV9hbGxvY2EobikgKChuKSA8IDQwMzIpCisjIGVsc2UKKy8qIGFsbG9jYSBpcyBp bXBsZW1lbnRlZCB3aXRoIG1hbGxvYywgc28ganVzdCB1c2UgbWFsbG9jLiAgKi8KKyMgIGRl ZmluZSBfX2xpYmNfdXNlX2FsbG9jYShuKSAwCisjICB1bmRlZiBhbGxvY2EKKyMgIGRlZmlu ZSBhbGxvY2EobikgbWFsbG9jIChuKQorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfTElC QworIyBkZWZpbmUgTUFMTE9DXzBfSVNfTk9OTlVMTCAxCisjZWxpZiAhZGVmaW5lZCBNQUxM T0NfMF9JU19OT05OVUxMCisjIGRlZmluZSBNQUxMT0NfMF9JU19OT05OVUxMIDAKKyNlbmRp ZgorCisjaWZuZGVmIE1BWAorIyBkZWZpbmUgTUFYKGEsYikgKChhKSA8IChiKSA/IChiKSA6 IChhKSkKKyNlbmRpZgorI2lmbmRlZiBNSU4KKyMgZGVmaW5lIE1JTihhLGIpICgoYSkgPCAo YikgPyAoYSkgOiAoYikpCisjZW5kaWYKKworI2RlZmluZSByZV9tYWxsb2ModCxuKSAoKHQg KikgbWFsbG9jICgobikgKiBzaXplb2YgKHQpKSkKKyNkZWZpbmUgcmVfcmVhbGxvYyhwLHQs bikgKCh0ICopIHJlYWxsb2MgKHAsIChuKSAqIHNpemVvZiAodCkpKQorI2RlZmluZSByZV9m cmVlKHApIGZyZWUgKHApCisKK3N0cnVjdCBiaW5fdHJlZV90Cit7CisgIHN0cnVjdCBiaW5f dHJlZV90ICpwYXJlbnQ7CisgIHN0cnVjdCBiaW5fdHJlZV90ICpsZWZ0OworICBzdHJ1Y3Qg YmluX3RyZWVfdCAqcmlnaHQ7CisgIHN0cnVjdCBiaW5fdHJlZV90ICpmaXJzdDsKKyAgc3Ry dWN0IGJpbl90cmVlX3QgKm5leHQ7CisKKyAgcmVfdG9rZW5fdCB0b2tlbjsKKworICAvKiAn bm9kZV9pZHgnIGlzIHRoZSBpbmRleCBpbiBkZmEtPm5vZGVzLCBpZiAndHlwZScgPT0gMC4K KyAgICAgT3RoZXJ3aXNlICd0eXBlJyBpbmRpY2F0ZSB0aGUgdHlwZSBvZiB0aGlzIG5vZGUu ICAqLworICBJZHggbm9kZV9pZHg7Cit9OwordHlwZWRlZiBzdHJ1Y3QgYmluX3RyZWVfdCBi aW5fdHJlZV90OworCisjZGVmaW5lIEJJTl9UUkVFX1NUT1JBR0VfU0laRSBcCisgICgoMTAy NCAtIHNpemVvZiAodm9pZCAqKSkgLyBzaXplb2YgKGJpbl90cmVlX3QpKQorCitzdHJ1Y3Qg YmluX3RyZWVfc3RvcmFnZV90Cit7CisgIHN0cnVjdCBiaW5fdHJlZV9zdG9yYWdlX3QgKm5l eHQ7CisgIGJpbl90cmVlX3QgZGF0YVtCSU5fVFJFRV9TVE9SQUdFX1NJWkVdOworfTsKK3R5 cGVkZWYgc3RydWN0IGJpbl90cmVlX3N0b3JhZ2VfdCBiaW5fdHJlZV9zdG9yYWdlX3Q7CisK KyNkZWZpbmUgQ09OVEVYVF9XT1JEIDEKKyNkZWZpbmUgQ09OVEVYVF9ORVdMSU5FIChDT05U RVhUX1dPUkQgPDwgMSkKKyNkZWZpbmUgQ09OVEVYVF9CRUdCVUYgKENPTlRFWFRfTkVXTElO RSA8PCAxKQorI2RlZmluZSBDT05URVhUX0VOREJVRiAoQ09OVEVYVF9CRUdCVUYgPDwgMSkK KworI2RlZmluZSBJU19XT1JEX0NPTlRFWFQoYykgKChjKSAmIENPTlRFWFRfV09SRCkKKyNk ZWZpbmUgSVNfTkVXTElORV9DT05URVhUKGMpICgoYykgJiBDT05URVhUX05FV0xJTkUpCisj ZGVmaW5lIElTX0JFR0JVRl9DT05URVhUKGMpICgoYykgJiBDT05URVhUX0JFR0JVRikKKyNk ZWZpbmUgSVNfRU5EQlVGX0NPTlRFWFQoYykgKChjKSAmIENPTlRFWFRfRU5EQlVGKQorI2Rl ZmluZSBJU19PUkRJTkFSWV9DT05URVhUKGMpICgoYykgPT0gMCkKKworI2RlZmluZSBJU19X T1JEX0NIQVIoY2gpIChpc2FsbnVtIChjaCkgfHwgKGNoKSA9PSAnXycpCisjZGVmaW5lIElT X05FV0xJTkUoY2gpICgoY2gpID09IE5FV0xJTkVfQ0hBUikKKyNkZWZpbmUgSVNfV0lERV9X T1JEX0NIQVIoY2gpIChfX2lzd2FsbnVtIChjaCkgfHwgKGNoKSA9PSBMJ18nKQorI2RlZmlu ZSBJU19XSURFX05FV0xJTkUoY2gpICgoY2gpID09IFdJREVfTkVXTElORV9DSEFSKQorCisj ZGVmaW5lIE5PVF9TQVRJU0ZZX1BSRVZfQ09OU1RSQUlOVChjb25zdHJhaW50LGNvbnRleHQp IFwKKyAoKCgoY29uc3RyYWludCkgJiBQUkVWX1dPUkRfQ09OU1RSQUlOVCkgJiYgIUlTX1dP UkRfQ09OVEVYVCAoY29udGV4dCkpIFwKKyAgfHwgKChjb25zdHJhaW50ICYgUFJFVl9OT1RX T1JEX0NPTlNUUkFJTlQpICYmIElTX1dPUkRfQ09OVEVYVCAoY29udGV4dCkpIFwKKyAgfHwg KChjb25zdHJhaW50ICYgUFJFVl9ORVdMSU5FX0NPTlNUUkFJTlQpICYmICFJU19ORVdMSU5F X0NPTlRFWFQgKGNvbnRleHQpKVwKKyAgfHwgKChjb25zdHJhaW50ICYgUFJFVl9CRUdCVUZf Q09OU1RSQUlOVCkgJiYgIUlTX0JFR0JVRl9DT05URVhUIChjb250ZXh0KSkpCisKKyNkZWZp bmUgTk9UX1NBVElTRllfTkVYVF9DT05TVFJBSU5UKGNvbnN0cmFpbnQsY29udGV4dCkgXAor ICgoKChjb25zdHJhaW50KSAmIE5FWFRfV09SRF9DT05TVFJBSU5UKSAmJiAhSVNfV09SRF9D T05URVhUIChjb250ZXh0KSkgXAorICB8fCAoKChjb25zdHJhaW50KSAmIE5FWFRfTk9UV09S RF9DT05TVFJBSU5UKSAmJiBJU19XT1JEX0NPTlRFWFQgKGNvbnRleHQpKSBcCisgIHx8ICgo KGNvbnN0cmFpbnQpICYgTkVYVF9ORVdMSU5FX0NPTlNUUkFJTlQpICYmICFJU19ORVdMSU5F X0NPTlRFWFQgKGNvbnRleHQpKSBcCisgIHx8ICgoKGNvbnN0cmFpbnQpICYgTkVYVF9FTkRC VUZfQ09OU1RSQUlOVCkgJiYgIUlTX0VOREJVRl9DT05URVhUIChjb250ZXh0KSkpCisKK3N0 cnVjdCByZV9kZmFzdGF0ZV90Cit7CisgIHJlX2hhc2h2YWxfdCBoYXNoOworICByZV9ub2Rl X3NldCBub2RlczsKKyAgcmVfbm9kZV9zZXQgbm9uX2Vwc19ub2RlczsKKyAgcmVfbm9kZV9z ZXQgaW52ZWNsb3N1cmU7CisgIHJlX25vZGVfc2V0ICplbnRyYW5jZV9ub2RlczsKKyAgc3Ry dWN0IHJlX2RmYXN0YXRlX3QgKip0cnRhYmxlLCAqKndvcmRfdHJ0YWJsZTsKKyAgdW5zaWdu ZWQgaW50IGNvbnRleHQgOiA0OworICB1bnNpZ25lZCBpbnQgaGFsdCA6IDE7CisgIC8qIElm IHRoaXMgc3RhdGUgY2FuIGFjY2VwdCAibXVsdGkgYnl0ZSIuCisgICAgIE5vdGUgdGhhdCB3 ZSByZWZlciB0byBtdWx0aWJ5dGUgY2hhcmFjdGVycywgYW5kIG11bHRpIGNoYXJhY3Rlcgor ICAgICBjb2xsYXRpbmcgZWxlbWVudHMgYXMgIm11bHRpIGJ5dGUiLiAgKi8KKyAgdW5zaWdu ZWQgaW50IGFjY2VwdF9tYiA6IDE7CisgIC8qIElmIHRoaXMgc3RhdGUgaGFzIGJhY2tyZWZl cmVuY2Ugbm9kZShzKS4gICovCisgIHVuc2lnbmVkIGludCBoYXNfYmFja3JlZiA6IDE7Cisg IHVuc2lnbmVkIGludCBoYXNfY29uc3RyYWludCA6IDE7Cit9OwordHlwZWRlZiBzdHJ1Y3Qg cmVfZGZhc3RhdGVfdCByZV9kZmFzdGF0ZV90OworCitzdHJ1Y3QgcmVfc3RhdGVfdGFibGVf ZW50cnkKK3sKKyAgSWR4IG51bTsKKyAgSWR4IGFsbG9jOworICByZV9kZmFzdGF0ZV90ICoq YXJyYXk7Cit9OworCisvKiBBcnJheSB0eXBlIHVzZWQgaW4gcmVfc3ViX21hdGNoX2xhc3Rf dCBhbmQgcmVfc3ViX21hdGNoX3RvcF90LiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAg SWR4IG5leHRfaWR4OworICBJZHggYWxsb2M7CisgIHJlX2RmYXN0YXRlX3QgKiphcnJheTsK K30gc3RhdGVfYXJyYXlfdDsKKworLyogU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5v ZGUgTk9ERSB3aG9zZSB0eXBlIGlzIE9QX0NMT1NFX1NVQkVYUC4gICovCisKK3R5cGVkZWYg c3RydWN0Cit7CisgIElkeCBub2RlOworICBJZHggc3RyX2lkeDsgLyogVGhlIHBvc2l0aW9u IE5PREUgbWF0Y2ggYXQuICAqLworICBzdGF0ZV9hcnJheV90IHBhdGg7Cit9IHJlX3N1Yl9t YXRjaF9sYXN0X3Q7CisKKy8qIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBub2RlIE5P REUgd2hvc2UgdHlwZSBpcyBPUF9PUEVOX1NVQkVYUC4KKyAgIEFuZCBpbmZvcm1hdGlvbiBh Ym91dCB0aGUgbm9kZSwgd2hvc2UgdHlwZSBpcyBPUF9DTE9TRV9TVUJFWFAsCisgICBjb3Jy ZXNwb25kaW5nIHRvIE5PREUgaXMgc3RvcmVkIGluIExBU1RTLiAgKi8KKwordHlwZWRlZiBz dHJ1Y3QKK3sKKyAgSWR4IHN0cl9pZHg7CisgIElkeCBub2RlOworICBzdGF0ZV9hcnJheV90 ICpwYXRoOworICBJZHggYWxhc3RzOyAvKiBBbGxvY2F0aW9uIHNpemUgb2YgTEFTVFMuICAq LworICBJZHggbmxhc3RzOyAvKiBUaGUgbnVtYmVyIG9mIExBU1RTLiAgKi8KKyAgcmVfc3Vi X21hdGNoX2xhc3RfdCAqKmxhc3RzOworfSByZV9zdWJfbWF0Y2hfdG9wX3Q7CisKK3N0cnVj dCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5Cit7CisgIElkeCBub2RlOworICBJZHggc3RyX2lk eDsKKyAgSWR4IHN1YmV4cF9mcm9tOworICBJZHggc3ViZXhwX3RvOworICBjaGFyIG1vcmU7 CisgIGNoYXIgdW51c2VkOworICB1bnNpZ25lZCBzaG9ydCBpbnQgZXBzX3JlYWNoYWJsZV9z dWJleHBzX21hcDsKK307CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIFRoZSBzdHJpbmcg b2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGlucHV0IHN0cmluZy4gICovCisgIHJlX3N0 cmluZ190IGlucHV0OworI2lmIGRlZmluZWQgX0xJQkMgfHwgKGRlZmluZWQgX19TVERDX1ZF UlNJT05fXyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCisgIGNvbnN0IHJlX2Rm YV90ICpjb25zdCBkZmE7CisjZWxzZQorICBjb25zdCByZV9kZmFfdCAqZGZhOworI2VuZGlm CisgIC8qIEVGTEFHUyBvZiB0aGUgYXJndW1lbnQgb2YgcmVnZXhlYy4gICovCisgIGludCBl ZmxhZ3M7CisgIC8qIFdoZXJlIHRoZSBtYXRjaGluZyBlbmRzLiAgKi8KKyAgSWR4IG1hdGNo X2xhc3Q7CisgIElkeCBsYXN0X25vZGU7CisgIC8qIFRoZSBzdGF0ZSBsb2cgdXNlZCBieSB0 aGUgbWF0Y2hlci4gICovCisgIHJlX2RmYXN0YXRlX3QgKipzdGF0ZV9sb2c7CisgIElkeCBz dGF0ZV9sb2dfdG9wOworICAvKiBCYWNrIHJlZmVyZW5jZSBjYWNoZS4gICovCisgIElkeCBu YmtyZWZfZW50czsKKyAgSWR4IGFia3JlZl9lbnRzOworICBzdHJ1Y3QgcmVfYmFja3JlZl9j YWNoZV9lbnRyeSAqYmtyZWZfZW50czsKKyAgaW50IG1heF9tYl9lbGVtX2xlbjsKKyAgSWR4 IG5zdWJfdG9wczsKKyAgSWR4IGFzdWJfdG9wczsKKyAgcmVfc3ViX21hdGNoX3RvcF90ICoq c3ViX3RvcHM7Cit9IHJlX21hdGNoX2NvbnRleHRfdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sK KyAgcmVfZGZhc3RhdGVfdCAqKnNpZnRlZF9zdGF0ZXM7CisgIHJlX2RmYXN0YXRlX3QgKips aW1pdGVkX3N0YXRlczsKKyAgSWR4IGxhc3Rfbm9kZTsKKyAgSWR4IGxhc3Rfc3RyX2lkeDsK KyAgcmVfbm9kZV9zZXQgbGltaXRzOworfSByZV9zaWZ0X2NvbnRleHRfdDsKKworc3RydWN0 IHJlX2ZhaWxfc3RhY2tfZW50X3QKK3sKKyAgSWR4IGlkeDsKKyAgSWR4IG5vZGU7CisgIHJl Z21hdGNoX3QgKnJlZ3M7CisgIHJlX25vZGVfc2V0IGVwc192aWFfbm9kZXM7Cit9OworCitz dHJ1Y3QgcmVfZmFpbF9zdGFja190Cit7CisgIElkeCBudW07CisgIElkeCBhbGxvYzsKKyAg c3RydWN0IHJlX2ZhaWxfc3RhY2tfZW50X3QgKnN0YWNrOworfTsKKworc3RydWN0IHJlX2Rm YV90Cit7CisgIHJlX3Rva2VuX3QgKm5vZGVzOworICBzaXplX3Qgbm9kZXNfYWxsb2M7Cisg IHNpemVfdCBub2Rlc19sZW47CisgIElkeCAqbmV4dHM7CisgIElkeCAqb3JnX2luZGljZXM7 CisgIHJlX25vZGVfc2V0ICplZGVzdHM7CisgIHJlX25vZGVfc2V0ICplY2xvc3VyZXM7Cisg IHJlX25vZGVfc2V0ICppbnZlY2xvc3VyZXM7CisgIHN0cnVjdCByZV9zdGF0ZV90YWJsZV9l bnRyeSAqc3RhdGVfdGFibGU7CisgIHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGU7CisgIHJl X2RmYXN0YXRlX3QgKmluaXRfc3RhdGVfd29yZDsKKyAgcmVfZGZhc3RhdGVfdCAqaW5pdF9z dGF0ZV9ubDsKKyAgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZV9iZWdidWY7CisgIGJpbl90 cmVlX3QgKnN0cl90cmVlOworICBiaW5fdHJlZV9zdG9yYWdlX3QgKnN0cl90cmVlX3N0b3Jh Z2U7CisgIHJlX2JpdHNldF9wdHJfdCBzYl9jaGFyOworICBpbnQgc3RyX3RyZWVfc3RvcmFn ZV9pZHg7CisKKyAgLyogbnVtYmVyIG9mIHN1YmV4cHJlc3Npb25zICdyZV9uc3ViJyBpcyBp biByZWdleF90LiAgKi8KKyAgcmVfaGFzaHZhbF90IHN0YXRlX2hhc2hfbWFzazsKKyAgSWR4 IGluaXRfbm9kZTsKKyAgSWR4IG5iYWNrcmVmOyAvKiBUaGUgbnVtYmVyIG9mIGJhY2tyZWZl cmVuY2UgaW4gdGhpcyBkZmEuICAqLworCisgIC8qIEJpdG1hcCBleHByZXNzaW5nIHdoaWNo IGJhY2tyZWZlcmVuY2UgaXMgdXNlZC4gICovCisgIGJpdHNldF93b3JkX3QgdXNlZF9ia3Jl Zl9tYXA7CisgIGJpdHNldF93b3JkX3QgY29tcGxldGVkX2JrcmVmX21hcDsKKworICB1bnNp Z25lZCBpbnQgaGFzX3BsdXJhbF9tYXRjaCA6IDE7CisgIC8qIElmIHRoaXMgZGZhIGhhcyAi bXVsdGlieXRlIG5vZGUiLCB3aGljaCBpcyBhIGJhY2tyZWZlcmVuY2Ugb3IKKyAgICAgYSBu b2RlIHdoaWNoIGNhbiBhY2NlcHQgbXVsdGlieXRlIGNoYXJhY3RlciBvciBtdWx0aSBjaGFy YWN0ZXIKKyAgICAgY29sbGF0aW5nIGVsZW1lbnQuICAqLworICB1bnNpZ25lZCBpbnQgaGFz X21iX25vZGUgOiAxOworICB1bnNpZ25lZCBpbnQgaXNfdXRmOCA6IDE7CisgIHVuc2lnbmVk IGludCBtYXBfbm90YXNjaWkgOiAxOworICB1bnNpZ25lZCBpbnQgd29yZF9vcHNfdXNlZCA6 IDE7CisgIGludCBtYl9jdXJfbWF4OworICBiaXRzZXRfdCB3b3JkX2NoYXI7CisgIHJlZ19z eW50YXhfdCBzeW50YXg7CisgIElkeCAqc3ViZXhwX21hcDsKKyNpZmRlZiBERUJVRworICBj aGFyKiByZV9zdHI7CisjZW5kaWYKKyAgbG9ja19kZWZpbmUgKGxvY2spCit9OworCisjZGVm aW5lIHJlX25vZGVfc2V0X2luaXRfZW1wdHkoc2V0KSBtZW1zZXQgKHNldCwgJ1wwJywgc2l6 ZW9mIChyZV9ub2RlX3NldCkpCisjZGVmaW5lIHJlX25vZGVfc2V0X3JlbW92ZShzZXQsaWQp IFwKKyAgKHJlX25vZGVfc2V0X3JlbW92ZV9hdCAoc2V0LCByZV9ub2RlX3NldF9jb250YWlu cyAoc2V0LCBpZCkgLSAxKSkKKyNkZWZpbmUgcmVfbm9kZV9zZXRfZW1wdHkocCkgKChwKS0+ bmVsZW0gPSAwKQorI2RlZmluZSByZV9ub2RlX3NldF9mcmVlKHNldCkgcmVfZnJlZSAoKHNl dCktPmVsZW1zKQorDAorCit0eXBlZGVmIGVudW0KK3sKKyAgU0JfQ0hBUiwKKyAgTUJfQ0hB UiwKKyAgRVFVSVZfQ0xBU1MsCisgIENPTExfU1lNLAorICBDSEFSX0NMQVNTCit9IGJyYWNr ZXRfZWxlbV90eXBlOworCit0eXBlZGVmIHN0cnVjdAoreworICBicmFja2V0X2VsZW1fdHlw ZSB0eXBlOworICB1bmlvbgorICB7CisgICAgdW5zaWduZWQgY2hhciBjaDsKKyAgICB1bnNp Z25lZCBjaGFyICpuYW1lOworICAgIHdjaGFyX3Qgd2NoOworICB9IG9wcjsKK30gYnJhY2tl dF9lbGVtX3Q7CisKKworLyogRnVuY3Rpb25zIGZvciBiaXRzZXRfdCBvcGVyYXRpb24uICAq LworCitzdGF0aWMgaW5saW5lIHZvaWQKK2JpdHNldF9zZXQgKGJpdHNldF90IHNldCwgSWR4 IGkpCit7CisgIHNldFtpIC8gQklUU0VUX1dPUkRfQklUU10gfD0gKGJpdHNldF93b3JkX3Qp IDEgPDwgaSAlIEJJVFNFVF9XT1JEX0JJVFM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAor Yml0c2V0X2NsZWFyIChiaXRzZXRfdCBzZXQsIElkeCBpKQoreworICBzZXRbaSAvIEJJVFNF VF9XT1JEX0JJVFNdICY9IH4gKChiaXRzZXRfd29yZF90KSAxIDw8IGkgJSBCSVRTRVRfV09S RF9CSVRTKTsKK30KKworc3RhdGljIGlubGluZSBib29sCitiaXRzZXRfY29udGFpbiAoY29u c3QgYml0c2V0X3Qgc2V0LCBJZHggaSkKK3sKKyAgcmV0dXJuIChzZXRbaSAvIEJJVFNFVF9X T1JEX0JJVFNdID4+IGkgJSBCSVRTRVRfV09SRF9CSVRTKSAmIDE7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZAorYml0c2V0X2VtcHR5IChiaXRzZXRfdCBzZXQpCit7CisgIG1lbXNldCAo c2V0LCAnXDAnLCBzaXplb2YgKGJpdHNldF90KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZAorYml0c2V0X3NldF9hbGwgKGJpdHNldF90IHNldCkKK3sKKyAgbWVtc2V0IChzZXQsIC0x LCBzaXplb2YgKGJpdHNldF93b3JkX3QpICogKFNCQ19NQVggLyBCSVRTRVRfV09SRF9CSVRT KSk7CisgIGlmIChTQkNfTUFYICUgQklUU0VUX1dPUkRfQklUUyAhPSAwKQorICAgIHNldFtC SVRTRVRfV09SRFMgLSAxXSA9CisgICAgICAoKGJpdHNldF93b3JkX3QpIDEgPDwgU0JDX01B WCAlIEJJVFNFVF9XT1JEX0JJVFMpIC0gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCiti aXRzZXRfY29weSAoYml0c2V0X3QgZGVzdCwgY29uc3QgYml0c2V0X3Qgc3JjKQoreworICBt ZW1jcHkgKGRlc3QsIHNyYywgc2l6ZW9mIChiaXRzZXRfdCkpOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQKK2JpdHNldF9ub3QgKGJpdHNldF90IHNldCkKK3sKKyAgaW50IGJpdHNldF9p OworICBmb3IgKGJpdHNldF9pID0gMDsgYml0c2V0X2kgPCBTQkNfTUFYIC8gQklUU0VUX1dP UkRfQklUUzsgKytiaXRzZXRfaSkKKyAgICBzZXRbYml0c2V0X2ldID0gfnNldFtiaXRzZXRf aV07CisgIGlmIChTQkNfTUFYICUgQklUU0VUX1dPUkRfQklUUyAhPSAwKQorICAgIHNldFtC SVRTRVRfV09SRFMgLSAxXSA9CisgICAgICAoKCgoYml0c2V0X3dvcmRfdCkgMSA8PCBTQkNf TUFYICUgQklUU0VUX1dPUkRfQklUUykgLSAxKQorICAgICAgICYgfnNldFtCSVRTRVRfV09S RFMgLSAxXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYml0c2V0X21lcmdlIChiaXRz ZXRfdCBkZXN0LCBjb25zdCBiaXRzZXRfdCBzcmMpCit7CisgIGludCBiaXRzZXRfaTsKKyAg Zm9yIChiaXRzZXRfaSA9IDA7IGJpdHNldF9pIDwgQklUU0VUX1dPUkRTOyArK2JpdHNldF9p KQorICAgIGRlc3RbYml0c2V0X2ldIHw9IHNyY1tiaXRzZXRfaV07Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZAorYml0c2V0X21hc2sgKGJpdHNldF90IGRlc3QsIGNvbnN0IGJpdHNldF90 IHNyYykKK3sKKyAgaW50IGJpdHNldF9pOworICBmb3IgKGJpdHNldF9pID0gMDsgYml0c2V0 X2kgPCBCSVRTRVRfV09SRFM7ICsrYml0c2V0X2kpCisgICAgZGVzdFtiaXRzZXRfaV0gJj0g c3JjW2JpdHNldF9pXTsKK30KKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisvKiBGdW5jdGlv bnMgZm9yIHJlX3N0cmluZy4gICovCitzdGF0aWMgaW50CitfX2F0dHJpYnV0ZV9fICgocHVy ZSwgdW51c2VkKSkKK3JlX3N0cmluZ19jaGFyX3NpemVfYXQgKGNvbnN0IHJlX3N0cmluZ190 ICpwc3RyLCBJZHggaWR4KQoreworICBpbnQgYnl0ZV9pZHg7CisgIGlmIChwc3RyLT5tYl9j dXJfbWF4ID09IDEpCisgICAgcmV0dXJuIDE7CisgIGZvciAoYnl0ZV9pZHggPSAxOyBpZHgg KyBieXRlX2lkeCA8IHBzdHItPnZhbGlkX2xlbjsgKytieXRlX2lkeCkKKyAgICBpZiAocHN0 ci0+d2NzW2lkeCArIGJ5dGVfaWR4XSAhPSBXRU9GKQorICAgICAgYnJlYWs7CisgIHJldHVy biBieXRlX2lkeDsKK30KKworc3RhdGljIHdpbnRfdAorX19hdHRyaWJ1dGVfXyAoKHB1cmUs IHVudXNlZCkpCityZV9zdHJpbmdfd2NoYXJfYXQgKGNvbnN0IHJlX3N0cmluZ190ICpwc3Ry LCBJZHggaWR4KQoreworICBpZiAocHN0ci0+bWJfY3VyX21heCA9PSAxKQorICAgIHJldHVy biAod2ludF90KSBwc3RyLT5tYnNbaWR4XTsKKyAgcmV0dXJuICh3aW50X3QpIHBzdHItPndj c1tpZHhdOworfQorCisjIGlmZGVmIF9MSUJDCisjICBpbmNsdWRlIDxsb2NhbGUvd2VpZ2h0 Lmg+CisjIGVuZGlmCisKK3N0YXRpYyBpbnQKK19fYXR0cmlidXRlX18gKChwdXJlLCB1bnVz ZWQpKQorcmVfc3RyaW5nX2VsZW1fc2l6ZV9hdCAoY29uc3QgcmVfc3RyaW5nX3QgKnBzdHIs IElkeCBpZHgpCit7CisjIGlmZGVmIF9MSUJDCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAs ICpleHRyYTsKKyAgY29uc3QgaW50MzJfdCAqdGFibGUsICppbmRpcmVjdDsKKyAgdWludF9m YXN0MzJfdCBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09M TEFURV9OUlVMRVMpOworCisgIGlmIChucnVsZXMgIT0gMCkKKyAgICB7CisgICAgICB0YWJs ZSA9IChjb25zdCBpbnQzMl90ICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09M TEFURV9UQUJMRU1CKTsKKyAgICAgIGV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikK KwlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfRVhUUkFNQik7CisgICAg ICBpbmRpcmVjdCA9IChjb25zdCBpbnQzMl90ICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRF LAorCQkJCQkJX05MX0NPTExBVEVfSU5ESVJFQ1RNQik7CisgICAgICBwID0gcHN0ci0+bWJz ICsgaWR4OworICAgICAgZmluZGlkeCAodGFibGUsIGluZGlyZWN0LCBleHRyYSwgJnAsIHBz dHItPmxlbiAtIGlkeCk7CisgICAgICByZXR1cm4gcCAtIHBzdHItPm1icyAtIGlkeDsKKyAg ICB9CisgIGVsc2UKKyMgZW5kaWYgLyogX0xJQkMgKi8KKyAgICByZXR1cm4gMTsKK30KKyNl bmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisjaWZuZGVmIF9fR05VQ19QUkVSRVEKKyMg aWYgZGVmaW5lZCBfX0dOVUNfXyAmJiBkZWZpbmVkIF9fR05VQ19NSU5PUl9fCisjICBkZWZp bmUgX19HTlVDX1BSRVJFUShtYWosIG1pbikgXAorICAgICAgICAgKChfX0dOVUNfXyA8PCAx NikgKyBfX0dOVUNfTUlOT1JfXyA+PSAoKG1haikgPDwgMTYpICsgKG1pbikpCisjIGVsc2UK KyMgIGRlZmluZSBfX0dOVUNfUFJFUkVRKG1haiwgbWluKSAwCisjIGVuZGlmCisjZW5kaWYK KworI2lmIF9fR05VQ19QUkVSRVEgKDMsNCkKKyMgdW5kZWYgX19hdHRyaWJ1dGVfd2Fybl91 bnVzZWRfcmVzdWx0X18KKyMgZGVmaW5lIF9fYXR0cmlidXRlX3dhcm5fdW51c2VkX3Jlc3Vs dF9fIFwKKyAgIF9fYXR0cmlidXRlX18gKChfX3dhcm5fdW51c2VkX3Jlc3VsdF9fKSkKKyNl bHNlCisjIGRlZmluZSBfX2F0dHJpYnV0ZV93YXJuX3VudXNlZF9yZXN1bHRfXyAvKiBlbXB0 eSAqLworI2VuZGlmCisKKyNpZm5kZWYgRkFMTFRIUk9VR0gKKyMgaWYgX19HTlVDX18gPCA3 CisjICBkZWZpbmUgRkFMTFRIUk9VR0ggKCh2b2lkKSAwKQorIyBlbHNlCisjICBkZWZpbmUg RkFMTFRIUk9VR0ggX19hdHRyaWJ1dGVfXyAoKF9fZmFsbHRocm91Z2hfXykpCisjIGVuZGlm CisjZW5kaWYKKworI2VuZGlmIC8qICBfUkVHRVhfSU5URVJOQUxfSCAqLwpkaWZmIC0tZ2l0 IGEvbGliL3JlZ2V4ZWMuYyBiL2xpYi9yZWdleGVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uNjU5MTMxMTE2NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9y ZWdleGVjLmMKQEAgLTAsMCArMSw0MzI0IEBACisvKiBFeHRlbmRlZCByZWd1bGFyIGV4cHJl c3Npb24gbWF0Y2hpbmcgYW5kIHNlYXJjaCBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAy MDAyLTIwMTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUg aXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IElzYW11 IEhhc2VnYXdhIDxpc2FtdUB5YW1hdG8uaWJtLmNvbT4uCisKKyAgIFRoZSBHTlUgQyBMaWJy YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj CisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05V IEMgTGlicmFyeTsgaWYgbm90LCBzZWUKKyAgIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdCBtYXRjaF9jdHhfaW5pdCAocmVf bWF0Y2hfY29udGV4dF90ICpjYWNoZSwgaW50IGVmbGFncywKKwkJCQkgICAgIElkeCBuKTsK K3N0YXRpYyB2b2lkIG1hdGNoX2N0eF9jbGVhbiAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4 KTsKK3N0YXRpYyB2b2lkIG1hdGNoX2N0eF9mcmVlIChyZV9tYXRjaF9jb250ZXh0X3QgKmNh Y2hlKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IG1hdGNoX2N0eF9hZGRfZW50cnkgKHJlX21h dGNoX2NvbnRleHRfdCAqY2FjaGUsIElkeCBub2RlLAorCQkJCQkgIElkeCBzdHJfaWR4LCBJ ZHggZnJvbSwgSWR4IHRvKTsKK3N0YXRpYyBJZHggc2VhcmNoX2N1cl9ia3JlZl9lbnRyeSAo Y29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBJZHggc3RyX2lkeCk7CitzdGF0aWMg cmVnX2VycmNvZGVfdCBtYXRjaF9jdHhfYWRkX3N1YnRvcCAocmVfbWF0Y2hfY29udGV4dF90 ICptY3R4LCBJZHggbm9kZSwKKwkJCQkJICAgSWR4IHN0cl9pZHgpOworc3RhdGljIHJlX3N1 Yl9tYXRjaF9sYXN0X3QgKiBtYXRjaF9jdHhfYWRkX3N1Ymxhc3QgKHJlX3N1Yl9tYXRjaF90 b3BfdCAqc3VidG9wLAorCQkJCQkJICAgIElkeCBub2RlLCBJZHggc3RyX2lkeCk7CitzdGF0 aWMgdm9pZCBzaWZ0X2N0eF9pbml0IChyZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCwgcmVfZGZh c3RhdGVfdCAqKnNpZnRlZF9zdHMsCisJCQkgICByZV9kZmFzdGF0ZV90ICoqbGltaXRlZF9z dHMsIElkeCBsYXN0X25vZGUsCisJCQkgICBJZHggbGFzdF9zdHJfaWR4KTsKK3N0YXRpYyBy ZWdfZXJyY29kZV90IHJlX3NlYXJjaF9pbnRlcm5hbCAoY29uc3QgcmVnZXhfdCAqcHJlZywK KwkJCQkJIGNvbnN0IGNoYXIgKnN0cmluZywgSWR4IGxlbmd0aCwKKwkJCQkJIElkeCBzdGFy dCwgSWR4IGxhc3Rfc3RhcnQsIElkeCBzdG9wLAorCQkJCQkgc2l6ZV90IG5tYXRjaCwgcmVn bWF0Y2hfdCBwbWF0Y2hbXSwKKwkJCQkJIGludCBlZmxhZ3MpOworc3RhdGljIHJlZ29mZl90 IHJlX3NlYXJjaF8yX3N0dWIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKwkJ CQkgIGNvbnN0IGNoYXIgKnN0cmluZzEsIElkeCBsZW5ndGgxLAorCQkJCSAgY29uc3QgY2hh ciAqc3RyaW5nMiwgSWR4IGxlbmd0aDIsCisJCQkJICBJZHggc3RhcnQsIHJlZ29mZl90IHJh bmdlLAorCQkJCSAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywKKwkJCQkgIElkeCBzdG9w LCBib29sIHJldF9sZW4pOworc3RhdGljIHJlZ29mZl90IHJlX3NlYXJjaF9zdHViIChzdHJ1 Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisJCQkJY29uc3QgY2hhciAqc3RyaW5nLCBJ ZHggbGVuZ3RoLCBJZHggc3RhcnQsCisJCQkJcmVnb2ZmX3QgcmFuZ2UsIElkeCBzdG9wLAor CQkJCXN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCisJCQkJYm9vbCByZXRfbGVuKTsKK3N0 YXRpYyB1bnNpZ25lZCByZV9jb3B5X3JlZ3MgKHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3Ms IHJlZ21hdGNoX3QgKnBtYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElk eCBucmVncywgaW50IHJlZ3NfYWxsb2NhdGVkKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IHBy dW5lX2ltcG9zc2libGVfbm9kZXMgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCk7CitzdGF0 aWMgSWR4IGNoZWNrX21hdGNoaW5nIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGJvb2wg ZmxfbG9uZ2VzdF9tYXRjaCwKKwkJCSAgIElkeCAqcF9tYXRjaF9maXJzdCk7CitzdGF0aWMg SWR4IGNoZWNrX2hhbHRfc3RhdGVfY29udGV4dCAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90 ICptY3R4LAorCQkJCSAgICAgY29uc3QgcmVfZGZhc3RhdGVfdCAqc3RhdGUsIElkeCBpZHgp Oworc3RhdGljIHZvaWQgdXBkYXRlX3JlZ3MgKGNvbnN0IHJlX2RmYV90ICpkZmEsIHJlZ21h dGNoX3QgKnBtYXRjaCwKKwkJCSByZWdtYXRjaF90ICpwcmV2X2lkeF9tYXRjaCwgSWR4IGN1 cl9ub2RlLAorCQkJIElkeCBjdXJfaWR4LCBJZHggbm1hdGNoKTsKK3N0YXRpYyByZWdfZXJy Y29kZV90IHB1c2hfZmFpbF9zdGFjayAoc3RydWN0IHJlX2ZhaWxfc3RhY2tfdCAqZnMsCisJ CQkJICAgICAgSWR4IHN0cl9pZHgsIElkeCBkZXN0X25vZGUsIElkeCBucmVncywKKwkJCQkg ICAgICByZWdtYXRjaF90ICpyZWdzLAorCQkJCSAgICAgIHJlX25vZGVfc2V0ICplcHNfdmlh X25vZGVzKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IHNldF9yZWdzIChjb25zdCByZWdleF90 ICpwcmVnLAorCQkJICAgICAgIGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJ CSAgICAgICBzaXplX3Qgbm1hdGNoLCByZWdtYXRjaF90ICpwbWF0Y2gsCisJCQkgICAgICAg Ym9vbCBmbF9iYWNrdHJhY2spOworc3RhdGljIHJlZ19lcnJjb2RlX3QgZnJlZV9mYWlsX3N0 YWNrX3JldHVybiAoc3RydWN0IHJlX2ZhaWxfc3RhY2tfdCAqZnMpOworCisjaWZkZWYgUkVf RU5BQkxFX0kxOE4KK3N0YXRpYyBpbnQgc2lmdF9zdGF0ZXNfaXRlcl9tYiAoY29uc3QgcmVf bWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCXJlX3NpZnRfY29udGV4dF90ICpzY3R4LAor CQkJCUlkeCBub2RlX2lkeCwgSWR4IHN0cl9pZHgsIElkeCBtYXhfc3RyX2lkeCk7CisjZW5k aWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KK3N0YXRpYyByZWdfZXJyY29kZV90IHNpZnRfc3Rh dGVzX2JhY2t3YXJkIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJCSAg IHJlX3NpZnRfY29udGV4dF90ICpzY3R4KTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGJ1aWxk X3NpZnRlZF9zdGF0ZXMgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJ ICByZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCwgSWR4IHN0cl9pZHgsCisJCQkJCSAgcmVfbm9k ZV9zZXQgKmN1cl9kZXN0KTsKK3N0YXRpYyByZWdfZXJyY29kZV90IHVwZGF0ZV9jdXJfc2lm dGVkX3N0YXRlIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJCSAgICAg IHJlX3NpZnRfY29udGV4dF90ICpzY3R4LAorCQkJCQkgICAgICBJZHggc3RyX2lkeCwKKwkJ CQkJICAgICAgcmVfbm9kZV9zZXQgKmRlc3Rfbm9kZXMpOworc3RhdGljIHJlZ19lcnJjb2Rl X3QgYWRkX2Vwc2lsb25fc3JjX25vZGVzIChjb25zdCByZV9kZmFfdCAqZGZhLAorCQkJCQkg ICAgcmVfbm9kZV9zZXQgKmRlc3Rfbm9kZXMsCisJCQkJCSAgICBjb25zdCByZV9ub2RlX3Nl dCAqY2FuZGlkYXRlcyk7CitzdGF0aWMgYm9vbCBjaGVja19kc3RfbGltaXRzIChjb25zdCBy ZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkgICAgICBjb25zdCByZV9ub2RlX3NldCAq bGltaXRzLAorCQkJICAgICAgSWR4IGRzdF9ub2RlLCBJZHggZHN0X2lkeCwgSWR4IHNyY19u b2RlLAorCQkJICAgICAgSWR4IHNyY19pZHgpOworc3RhdGljIGludCBjaGVja19kc3RfbGlt aXRzX2NhbGNfcG9zXzEgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJ aW50IGJvdW5kYXJpZXMsIElkeCBzdWJleHBfaWR4LAorCQkJCQlJZHggZnJvbV9ub2RlLCBJ ZHggYmtyZWZfaWR4KTsKK3N0YXRpYyBpbnQgY2hlY2tfZHN0X2xpbWl0c19jYWxjX3BvcyAo Y29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCSAgICAgIElkeCBsaW1pdCwg SWR4IHN1YmV4cF9pZHgsCisJCQkJICAgICAgSWR4IG5vZGUsIElkeCBzdHJfaWR4LAorCQkJ CSAgICAgIElkeCBia3JlZl9pZHgpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2hlY2tfc3Vi ZXhwX2xpbWl0cyAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJCQkJICByZV9ub2RlX3NldCAq ZGVzdF9ub2RlcywKKwkJCQkJICBjb25zdCByZV9ub2RlX3NldCAqY2FuZGlkYXRlcywKKwkJ CQkJICByZV9ub2RlX3NldCAqbGltaXRzLAorCQkJCQkgIHN0cnVjdCByZV9iYWNrcmVmX2Nh Y2hlX2VudHJ5ICpia3JlZl9lbnRzLAorCQkJCQkgIElkeCBzdHJfaWR4KTsKK3N0YXRpYyBy ZWdfZXJyY29kZV90IHNpZnRfc3RhdGVzX2JrcmVmIChjb25zdCByZV9tYXRjaF9jb250ZXh0 X3QgKm1jdHgsCisJCQkJCXJlX3NpZnRfY29udGV4dF90ICpzY3R4LAorCQkJCQlJZHggc3Ry X2lkeCwgY29uc3QgcmVfbm9kZV9zZXQgKmNhbmRpZGF0ZXMpOworc3RhdGljIHJlZ19lcnJj b2RlX3QgbWVyZ2Vfc3RhdGVfYXJyYXkgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkJCXJl X2RmYXN0YXRlX3QgKipkc3QsCisJCQkJCXJlX2RmYXN0YXRlX3QgKipzcmMsIElkeCBudW0p Oworc3RhdGljIHJlX2RmYXN0YXRlX3QgKmZpbmRfcmVjb3Zlcl9zdGF0ZSAocmVnX2VycmNv ZGVfdCAqZXJyLAorCQkJCQkgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4KTsKK3N0YXRpYyBy ZV9kZmFzdGF0ZV90ICp0cmFuc2l0X3N0YXRlIChyZWdfZXJyY29kZV90ICplcnIsCisJCQkJ ICAgICByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJICAgICByZV9kZmFzdGF0ZV90 ICpzdGF0ZSk7CitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqbWVyZ2Vfc3RhdGVfd2l0aF9sb2cg KHJlZ19lcnJjb2RlX3QgKmVyciwKKwkJCQkJICAgIHJlX21hdGNoX2NvbnRleHRfdCAqbWN0 eCwKKwkJCQkJICAgIHJlX2RmYXN0YXRlX3QgKm5leHRfc3RhdGUpOworc3RhdGljIHJlZ19l cnJjb2RlX3QgY2hlY2tfc3ViZXhwX21hdGNoaW5nX3RvcCAocmVfbWF0Y2hfY29udGV4dF90 ICptY3R4LAorCQkJCQkJcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywKKwkJCQkJCUlkeCBzdHJf aWR4KTsKKyNpZiAwCitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqdHJhbnNpdF9zdGF0ZV9zYiAo cmVnX2VycmNvZGVfdCAqZXJyLAorCQkJCQlyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJ CQkJCXJlX2RmYXN0YXRlX3QgKnBzdGF0ZSk7CisjZW5kaWYKKyNpZmRlZiBSRV9FTkFCTEVf STE4Tgorc3RhdGljIHJlZ19lcnJjb2RlX3QgdHJhbnNpdF9zdGF0ZV9tYiAocmVfbWF0Y2hf Y29udGV4dF90ICptY3R4LAorCQkJCSAgICAgICByZV9kZmFzdGF0ZV90ICpwc3RhdGUpOwor I2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCitzdGF0aWMgcmVnX2VycmNvZGVfdCB0cmFu c2l0X3N0YXRlX2JrcmVmIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJCSAgY29u c3QgcmVfbm9kZV9zZXQgKm5vZGVzKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGdldF9zdWJl eHAgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkgSWR4IGJrcmVmX25vZGUsIElk eCBia3JlZl9zdHJfaWR4KTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGdldF9zdWJleHBfc3Vi IChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJICAgICBjb25zdCByZV9zdWJfbWF0 Y2hfdG9wX3QgKnN1Yl90b3AsCisJCQkJICAgICByZV9zdWJfbWF0Y2hfbGFzdF90ICpzdWJf bGFzdCwKKwkJCQkgICAgIElkeCBia3JlZl9ub2RlLCBJZHggYmtyZWZfc3RyKTsKK3N0YXRp YyBJZHggZmluZF9zdWJleHBfbm9kZSAoY29uc3QgcmVfZGZhX3QgKmRmYSwgY29uc3QgcmVf bm9kZV9zZXQgKm5vZGVzLAorCQkJICAgICBJZHggc3ViZXhwX2lkeCwgaW50IHR5cGUpOwor c3RhdGljIHJlZ19lcnJjb2RlX3QgY2hlY2tfYXJyaXZhbCAocmVfbWF0Y2hfY29udGV4dF90 ICptY3R4LAorCQkJCSAgICBzdGF0ZV9hcnJheV90ICpwYXRoLCBJZHggdG9wX25vZGUsCisJ CQkJICAgIElkeCB0b3Bfc3RyLCBJZHggbGFzdF9ub2RlLCBJZHggbGFzdF9zdHIsCisJCQkJ ICAgIGludCB0eXBlKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNoZWNrX2Fycml2YWxfYWRk X25leHRfbm9kZXMgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJCSAgIElkeCBz dHJfaWR4LAorCQkJCQkJICAgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywKKwkJCQkJCSAgIHJl X25vZGVfc2V0ICpuZXh0X25vZGVzKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNoZWNrX2Fy cml2YWxfZXhwYW5kX2VjbCAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJCQkJICAgICAgIHJl X25vZGVfc2V0ICpjdXJfbm9kZXMsCisJCQkJCSAgICAgICBJZHggZXhfc3ViZXhwLCBpbnQg dHlwZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjaGVja19hcnJpdmFsX2V4cGFuZF9lY2xf c3ViIChjb25zdCByZV9kZmFfdCAqZGZhLAorCQkJCQkJICAgcmVfbm9kZV9zZXQgKmRzdF9u b2RlcywKKwkJCQkJCSAgIElkeCB0YXJnZXQsIElkeCBleF9zdWJleHAsCisJCQkJCQkgICBp bnQgdHlwZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBleHBhbmRfYmtyZWZfY2FjaGUgKHJl X21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJIHJlX25vZGVfc2V0ICpjdXJfbm9kZXMs IElkeCBjdXJfc3RyLAorCQkJCQkgSWR4IHN1YmV4cF9udW0sIGludCB0eXBlKTsKK3N0YXRp YyBib29sIGJ1aWxkX3RydGFibGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsIHJlX2RmYXN0YXRl X3QgKnN0YXRlKTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIGludCBjaGVja19u b2RlX2FjY2VwdF9ieXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgSWR4IG5vZGVfaWR4LAor CQkJCSAgICBjb25zdCByZV9zdHJpbmdfdCAqaW5wdXQsIElkeCBpZHgpOworIyBpZmRlZiBf TElCQworc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX2NvbGxhdGlvbl9zZXF1ZW5jZV92YWx1 ZSAoY29uc3QgdW5zaWduZWQgY2hhciAqbWJzLAorCQkJCQkJICAgc2l6ZV90IG5hbWVfbGVu KTsKKyMgZW5kaWYgLyogX0xJQkMgKi8KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLwor c3RhdGljIElkeCBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcyAoY29uc3QgcmVfZGZhX3Qg KmRmYSwKKwkJCQkgICAgICAgY29uc3QgcmVfZGZhc3RhdGVfdCAqc3RhdGUsCisJCQkJICAg ICAgIHJlX25vZGVfc2V0ICpzdGF0ZXNfbm9kZSwKKwkJCQkgICAgICAgYml0c2V0X3QgKnN0 YXRlc19jaCk7CitzdGF0aWMgYm9vbCBjaGVja19ub2RlX2FjY2VwdCAoY29uc3QgcmVfbWF0 Y2hfY29udGV4dF90ICptY3R4LAorCQkJICAgICAgIGNvbnN0IHJlX3Rva2VuX3QgKm5vZGUs IElkeCBpZHgpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgZXh0ZW5kX2J1ZmZlcnMgKHJlX21h dGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IG1pbl9sZW4pOworDAorLyogRW50cnkgcG9pbnQg Zm9yIFBPU0lYIGNvZGUuICAqLworCisvKiByZWdleGVjIHNlYXJjaGVzIGZvciBhIGdpdmVu IHBhdHRlcm4sIHNwZWNpZmllZCBieSBQUkVHLCBpbiB0aGUKKyAgIHN0cmluZyBTVFJJTkcu CisKKyAgIElmIE5NQVRDSCBpcyB6ZXJvIG9yIFJFR19OT1NVQiB3YXMgc2V0IGluIHRoZSBj ZmxhZ3MgYXJndW1lbnQgdG8KKyAgICdyZWdjb21wJywgd2UgaWdub3JlIFBNQVRDSC4gIE90 aGVyd2lzZSwgd2UgYXNzdW1lIFBNQVRDSCBoYXMgYXQKKyAgIGxlYXN0IE5NQVRDSCBlbGVt ZW50cywgYW5kIHdlIHNldCB0aGVtIHRvIHRoZSBvZmZzZXRzIG9mIHRoZQorICAgY29ycmVz cG9uZGluZyBtYXRjaGVkIHN1YnN0cmluZ3MuCisKKyAgIEVGTEFHUyBzcGVjaWZpZXMgImV4 ZWN1dGlvbiBmbGFncyIgd2hpY2ggYWZmZWN0IG1hdGNoaW5nOiBpZgorICAgUkVHX05PVEJP TCBpcyBzZXQsIHRoZW4gXiBkb2VzIG5vdCBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRo ZQorICAgc3RyaW5nOyBpZiBSRUdfTk9URU9MIGlzIHNldCwgdGhlbiAkIGRvZXMgbm90IG1h dGNoIGF0IHRoZSBlbmQuCisKKyAgIFdlIHJldHVybiAwIGlmIHdlIGZpbmQgYSBtYXRjaCBh bmQgUkVHX05PTUFUQ0ggaWYgbm90LiAgKi8KKworaW50CityZWdleGVjIChjb25zdCByZWdl eF90ICpfUmVzdHJpY3RfIHByZWcsIGNvbnN0IGNoYXIgKl9SZXN0cmljdF8gc3RyaW5nLAor CSBzaXplX3Qgbm1hdGNoLCByZWdtYXRjaF90IHBtYXRjaFtdLCBpbnQgZWZsYWdzKQorewor ICByZWdfZXJyY29kZV90IGVycjsKKyAgSWR4IHN0YXJ0LCBsZW5ndGg7CisgIHJlX2RmYV90 ICpkZmEgPSBwcmVnLT5idWZmZXI7CisKKyAgaWYgKGVmbGFncyAmIH4oUkVHX05PVEJPTCB8 IFJFR19OT1RFT0wgfCBSRUdfU1RBUlRFTkQpKQorICAgIHJldHVybiBSRUdfQkFEUEFUOwor CisgIGlmIChlZmxhZ3MgJiBSRUdfU1RBUlRFTkQpCisgICAgeworICAgICAgc3RhcnQgPSBw bWF0Y2hbMF0ucm1fc287CisgICAgICBsZW5ndGggPSBwbWF0Y2hbMF0ucm1fZW87CisgICAg fQorICBlbHNlCisgICAgeworICAgICAgc3RhcnQgPSAwOworICAgICAgbGVuZ3RoID0gc3Ry bGVuIChzdHJpbmcpOworICAgIH0KKworICBsb2NrX2xvY2sgKGRmYS0+bG9jayk7CisgIGlm IChwcmVnLT5ub19zdWIpCisgICAgZXJyID0gcmVfc2VhcmNoX2ludGVybmFsIChwcmVnLCBz dHJpbmcsIGxlbmd0aCwgc3RhcnQsIGxlbmd0aCwKKwkJCSAgICAgIGxlbmd0aCwgMCwgTlVM TCwgZWZsYWdzKTsKKyAgZWxzZQorICAgIGVyciA9IHJlX3NlYXJjaF9pbnRlcm5hbCAocHJl Zywgc3RyaW5nLCBsZW5ndGgsIHN0YXJ0LCBsZW5ndGgsCisJCQkgICAgICBsZW5ndGgsIG5t YXRjaCwgcG1hdGNoLCBlZmxhZ3MpOworICBsb2NrX3VubG9jayAoZGZhLT5sb2NrKTsKKyAg cmV0dXJuIGVyciAhPSBSRUdfTk9FUlJPUjsKK30KKworI2lmZGVmIF9MSUJDCitsaWJjX2hp ZGRlbl9kZWYgKF9fcmVnZXhlYykKKworIyBpbmNsdWRlIDxzaGxpYi1jb21wYXQuaD4KK3Zl cnNpb25lZF9zeW1ib2wgKGxpYmMsIF9fcmVnZXhlYywgcmVnZXhlYywgR0xJQkNfMl8zXzQp OworCisjIGlmIFNITElCX0NPTVBBVCAobGliYywgR0xJQkNfMl8wLCBHTElCQ18yXzNfNCkK K19fdHlwZW9mX18gKF9fcmVnZXhlYykgX19jb21wYXRfcmVnZXhlYzsKKworaW50CithdHRy aWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorX19jb21wYXRfcmVnZXhlYyAoY29uc3QgcmVn ZXhfdCAqX1Jlc3RyaWN0XyBwcmVnLAorCQkgIGNvbnN0IGNoYXIgKl9SZXN0cmljdF8gc3Ry aW5nLCBzaXplX3Qgbm1hdGNoLAorCQkgIHJlZ21hdGNoX3QgcG1hdGNoW10sIGludCBlZmxh Z3MpCit7CisgIHJldHVybiByZWdleGVjIChwcmVnLCBzdHJpbmcsIG5tYXRjaCwgcG1hdGNo LAorCQkgIGVmbGFncyAmIChSRUdfTk9UQk9MIHwgUkVHX05PVEVPTCkpOworfQorY29tcGF0 X3N5bWJvbCAobGliYywgX19jb21wYXRfcmVnZXhlYywgcmVnZXhlYywgR0xJQkNfMl8wKTsK KyMgZW5kaWYKKyNlbmRpZgorCisvKiBFbnRyeSBwb2ludHMgZm9yIEdOVSBjb2RlLiAgKi8K KworLyogcmVfbWF0Y2gsIHJlX3NlYXJjaCwgcmVfbWF0Y2hfMiwgcmVfc2VhcmNoXzIKKwor ICAgVGhlIGZvcm1lciB0d28gZnVuY3Rpb25zIG9wZXJhdGUgb24gU1RSSU5HIHdpdGggbGVu Z3RoIExFTkdUSCwKKyAgIHdoaWxlIHRoZSBsYXRlciB0d28gb3BlcmF0ZSBvbiBjb25jYXRl bmF0aW9uIG9mIFNUUklORzEgYW5kIFNUUklORzIKKyAgIHdpdGggbGVuZ3RocyBMRU5HVEgx IGFuZCBMRU5HVEgyLCByZXNwZWN0aXZlbHkuCisKKyAgIHJlX21hdGNoKCkgbWF0Y2hlcyB0 aGUgY29tcGlsZWQgcGF0dGVybiBpbiBCVUZQIGFnYWluc3QgdGhlIHN0cmluZywKKyAgIHN0 YXJ0aW5nIGF0IGluZGV4IFNUQVJULgorCisgICByZV9zZWFyY2goKSBmaXJzdCB0cmllcyBt YXRjaGluZyBhdCBpbmRleCBTVEFSVCwgdGhlbiBpdCB0cmllcyB0byBtYXRjaAorICAgc3Rh cnRpbmcgZnJvbSBpbmRleCBTVEFSVCArIDEsIGFuZCBzbyBvbi4gIFRoZSBsYXN0IHN0YXJ0 IHBvc2l0aW9uIHRyaWVkCisgICBpcyBTVEFSVCArIFJBTkdFLiAgKFRodXMgUkFOR0UgPSAw IGZvcmNlcyByZV9zZWFyY2ggdG8gb3BlcmF0ZSB0aGUgc2FtZQorICAgd2F5IGFzIHJlX21h dGNoKCkuKQorCisgICBUaGUgcGFyYW1ldGVyIFNUT1Agb2YgcmVfe21hdGNoLHNlYXJjaH1f MiBzcGVjaWZpZXMgdGhhdCBubyBtYXRjaCBleGNlZWRpbmcKKyAgIHRoZSBmaXJzdCBTVE9Q IGNoYXJhY3RlcnMgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHN0cmluZ3Mgc2hvdWxk IGJlCisgICBjb25jZXJuZWQuCisKKyAgIElmIFJFR1MgaXMgbm90IE5VTEwsIGFuZCBCVUZQ LT5ub19zdWIgaXMgbm90IHNldCwgdGhlIG9mZnNldHMgb2YgdGhlIG1hdGNoCisgICBhbmQg YWxsIGdyb3VwcyBpcyBzdG9yZWQgaW4gUkVHUy4gIChGb3IgdGhlICJfMiIgdmFyaWFudHMs IHRoZSBvZmZzZXRzIGFyZQorICAgY29tcHV0ZWQgcmVsYXRpdmUgdG8gdGhlIGNvbmNhdGVu YXRpb24sIG5vdCByZWxhdGl2ZSB0byB0aGUgaW5kaXZpZHVhbAorICAgc3RyaW5ncy4pCisK KyAgIE9uIHN1Y2Nlc3MsIHJlX21hdGNoKiBmdW5jdGlvbnMgcmV0dXJuIHRoZSBsZW5ndGgg b2YgdGhlIG1hdGNoLCByZV9zZWFyY2gqCisgICByZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRo ZSBzdGFydCBvZiB0aGUgbWF0Y2guICBSZXR1cm4gdmFsdWUgLTEgbWVhbnMgbm8KKyAgIG1h dGNoIHdhcyBmb3VuZCBhbmQgLTIgaW5kaWNhdGVzIGFuIGludGVybmFsIGVycm9yLiAgKi8K KworcmVnb2ZmX3QKK3JlX21hdGNoIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAs IGNvbnN0IGNoYXIgKnN0cmluZywgSWR4IGxlbmd0aCwKKwkgIElkeCBzdGFydCwgc3RydWN0 IHJlX3JlZ2lzdGVycyAqcmVncykKK3sKKyAgcmV0dXJuIHJlX3NlYXJjaF9zdHViIChidWZw LCBzdHJpbmcsIGxlbmd0aCwgc3RhcnQsIDAsIGxlbmd0aCwgcmVncywgdHJ1ZSk7Cit9Cisj aWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVfbWF0Y2gsIHJlX21hdGNoKQorI2VuZGlm CisKK3JlZ29mZl90CityZV9zZWFyY2ggKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVm cCwgY29uc3QgY2hhciAqc3RyaW5nLCBJZHggbGVuZ3RoLAorCSAgIElkeCBzdGFydCwgcmVn b2ZmX3QgcmFuZ2UsIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MpCit7CisgIHJldHVybiBy ZV9zZWFyY2hfc3R1YiAoYnVmcCwgc3RyaW5nLCBsZW5ndGgsIHN0YXJ0LCByYW5nZSwgbGVu Z3RoLCByZWdzLAorCQkJIGZhbHNlKTsKK30KKyNpZmRlZiBfTElCQword2Vha19hbGlhcyAo X19yZV9zZWFyY2gsIHJlX3NlYXJjaCkKKyNlbmRpZgorCityZWdvZmZfdAorcmVfbWF0Y2hf MiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCBjb25zdCBjaGFyICpzdHJpbmcx LCBJZHggbGVuZ3RoMSwKKwkgICAgY29uc3QgY2hhciAqc3RyaW5nMiwgSWR4IGxlbmd0aDIs IElkeCBzdGFydCwKKwkgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgSWR4IHN0b3Ap Cit7CisgIHJldHVybiByZV9zZWFyY2hfMl9zdHViIChidWZwLCBzdHJpbmcxLCBsZW5ndGgx LCBzdHJpbmcyLCBsZW5ndGgyLAorCQkJICAgc3RhcnQsIDAsIHJlZ3MsIHN0b3AsIHRydWUp OworfQorI2lmZGVmIF9MSUJDCit3ZWFrX2FsaWFzIChfX3JlX21hdGNoXzIsIHJlX21hdGNo XzIpCisjZW5kaWYKKworcmVnb2ZmX3QKK3JlX3NlYXJjaF8yIChzdHJ1Y3QgcmVfcGF0dGVy bl9idWZmZXIgKmJ1ZnAsIGNvbnN0IGNoYXIgKnN0cmluZzEsIElkeCBsZW5ndGgxLAorCSAg ICAgY29uc3QgY2hhciAqc3RyaW5nMiwgSWR4IGxlbmd0aDIsIElkeCBzdGFydCwgcmVnb2Zm X3QgcmFuZ2UsCisJICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCBJZHggc3RvcCkK K3sKKyAgcmV0dXJuIHJlX3NlYXJjaF8yX3N0dWIgKGJ1ZnAsIHN0cmluZzEsIGxlbmd0aDEs IHN0cmluZzIsIGxlbmd0aDIsCisJCQkgICBzdGFydCwgcmFuZ2UsIHJlZ3MsIHN0b3AsIGZh bHNlKTsKK30KKyNpZmRlZiBfTElCQword2Vha19hbGlhcyAoX19yZV9zZWFyY2hfMiwgcmVf c2VhcmNoXzIpCisjZW5kaWYKKworc3RhdGljIHJlZ29mZl90CityZV9zZWFyY2hfMl9zdHVi IChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIGNvbnN0IGNoYXIgKnN0cmluZzEs CisJCSAgSWR4IGxlbmd0aDEsIGNvbnN0IGNoYXIgKnN0cmluZzIsIElkeCBsZW5ndGgyLCBJ ZHggc3RhcnQsCisJCSAgcmVnb2ZmX3QgcmFuZ2UsIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJl Z3MsCisJCSAgSWR4IHN0b3AsIGJvb2wgcmV0X2xlbikKK3sKKyAgY29uc3QgY2hhciAqc3Ry OworICByZWdvZmZfdCBydmFsOworICBJZHggbGVuOworICBjaGFyICpzID0gTlVMTDsKKwor ICBpZiAoQkUgKChsZW5ndGgxIDwgMCB8fCBsZW5ndGgyIDwgMCB8fCBzdG9wIDwgMAorICAg ICAgICAgICB8fCBJTlRfQUREX1dSQVBWIChsZW5ndGgxLCBsZW5ndGgyLCAmbGVuKSksCisg ICAgICAgICAgMCkpCisgICAgcmV0dXJuIC0yOworCisgIC8qIENvbmNhdGVuYXRlIHRoZSBz dHJpbmdzLiAgKi8KKyAgaWYgKGxlbmd0aDIgPiAwKQorICAgIGlmIChsZW5ndGgxID4gMCkK KyAgICAgIHsKKwlzID0gcmVfbWFsbG9jIChjaGFyLCBsZW4pOworCisJaWYgKEJFIChzID09 IE5VTEwsIDApKQorCSAgcmV0dXJuIC0yOworI2lmZGVmIF9MSUJDCisJbWVtY3B5IChfX21l bXBjcHkgKHMsIHN0cmluZzEsIGxlbmd0aDEpLCBzdHJpbmcyLCBsZW5ndGgyKTsKKyNlbHNl CisJbWVtY3B5IChzLCBzdHJpbmcxLCBsZW5ndGgxKTsKKwltZW1jcHkgKHMgKyBsZW5ndGgx LCBzdHJpbmcyLCBsZW5ndGgyKTsKKyNlbmRpZgorCXN0ciA9IHM7CisgICAgICB9CisgICAg ZWxzZQorICAgICAgc3RyID0gc3RyaW5nMjsKKyAgZWxzZQorICAgIHN0ciA9IHN0cmluZzE7 CisKKyAgcnZhbCA9IHJlX3NlYXJjaF9zdHViIChidWZwLCBzdHIsIGxlbiwgc3RhcnQsIHJh bmdlLCBzdG9wLCByZWdzLAorCQkJIHJldF9sZW4pOworICByZV9mcmVlIChzKTsKKyAgcmV0 dXJuIHJ2YWw7Cit9CisKKy8qIFRoZSBwYXJhbWV0ZXJzIGhhdmUgdGhlIHNhbWUgbWVhbmlu ZyBhcyB0aG9zZSBvZiByZV9zZWFyY2guCisgICBBZGRpdGlvbmFsIHBhcmFtZXRlcnM6Cisg ICBJZiBSRVRfTEVOIGlzIHRydWUgdGhlIGxlbmd0aCBvZiB0aGUgbWF0Y2ggaXMgcmV0dXJu ZWQgKHJlX21hdGNoIHN0eWxlKTsKKyAgIG90aGVyd2lzZSB0aGUgcG9zaXRpb24gb2YgdGhl IG1hdGNoIGlzIHJldHVybmVkLiAgKi8KKworc3RhdGljIHJlZ29mZl90CityZV9zZWFyY2hf c3R1YiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCBjb25zdCBjaGFyICpzdHJp bmcsIElkeCBsZW5ndGgsCisJCUlkeCBzdGFydCwgcmVnb2ZmX3QgcmFuZ2UsIElkeCBzdG9w LCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLAorCQlib29sIHJldF9sZW4pCit7CisgIHJl Z19lcnJjb2RlX3QgcmVzdWx0OworICByZWdtYXRjaF90ICpwbWF0Y2g7CisgIElkeCBucmVn czsKKyAgcmVnb2ZmX3QgcnZhbDsKKyAgaW50IGVmbGFncyA9IDA7CisgIHJlX2RmYV90ICpk ZmEgPSBidWZwLT5idWZmZXI7CisgIElkeCBsYXN0X3N0YXJ0ID0gc3RhcnQgKyByYW5nZTsK KworICAvKiBDaGVjayBmb3Igb3V0LW9mLXJhbmdlLiAgKi8KKyAgaWYgKEJFIChzdGFydCA8 IDAgfHwgc3RhcnQgPiBsZW5ndGgsIDApKQorICAgIHJldHVybiAtMTsKKyAgaWYgKEJFIChs ZW5ndGggPCBsYXN0X3N0YXJ0IHx8ICgwIDw9IHJhbmdlICYmIGxhc3Rfc3RhcnQgPCBzdGFy dCksIDApKQorICAgIGxhc3Rfc3RhcnQgPSBsZW5ndGg7CisgIGVsc2UgaWYgKEJFIChsYXN0 X3N0YXJ0IDwgMCB8fCAocmFuZ2UgPCAwICYmIHN0YXJ0IDw9IGxhc3Rfc3RhcnQpLCAwKSkK KyAgICBsYXN0X3N0YXJ0ID0gMDsKKworICBsb2NrX2xvY2sgKGRmYS0+bG9jayk7CisKKyAg ZWZsYWdzIHw9IChidWZwLT5ub3RfYm9sKSA/IFJFR19OT1RCT0wgOiAwOworICBlZmxhZ3Mg fD0gKGJ1ZnAtPm5vdF9lb2wpID8gUkVHX05PVEVPTCA6IDA7CisKKyAgLyogQ29tcGlsZSBm YXN0bWFwIGlmIHdlIGhhdmVuJ3QgeWV0LiAgKi8KKyAgaWYgKHN0YXJ0IDwgbGFzdF9zdGFy dCAmJiBidWZwLT5mYXN0bWFwICE9IE5VTEwgJiYgIWJ1ZnAtPmZhc3RtYXBfYWNjdXJhdGUp CisgICAgcmVfY29tcGlsZV9mYXN0bWFwIChidWZwKTsKKworICBpZiAoQkUgKGJ1ZnAtPm5v X3N1YiwgMCkpCisgICAgcmVncyA9IE5VTEw7CisKKyAgLyogV2UgbmVlZCBhdCBsZWFzdCAx IHJlZ2lzdGVyLiAgKi8KKyAgaWYgKHJlZ3MgPT0gTlVMTCkKKyAgICBucmVncyA9IDE7Cisg IGVsc2UgaWYgKEJFIChidWZwLT5yZWdzX2FsbG9jYXRlZCA9PSBSRUdTX0ZJWEVECisJICAg ICAgICYmIHJlZ3MtPm51bV9yZWdzIDw9IGJ1ZnAtPnJlX25zdWIsIDApKQorICAgIHsKKyAg ICAgIG5yZWdzID0gcmVncy0+bnVtX3JlZ3M7CisgICAgICBpZiAoQkUgKG5yZWdzIDwgMSwg MCkpCisJeworCSAgLyogTm90aGluZyBjYW4gYmUgY29waWVkIHRvIHJlZ3MuICAqLworCSAg cmVncyA9IE5VTEw7CisJICBucmVncyA9IDE7CisJfQorICAgIH0KKyAgZWxzZQorICAgIG5y ZWdzID0gYnVmcC0+cmVfbnN1YiArIDE7CisgIHBtYXRjaCA9IHJlX21hbGxvYyAocmVnbWF0 Y2hfdCwgbnJlZ3MpOworICBpZiAoQkUgKHBtYXRjaCA9PSBOVUxMLCAwKSkKKyAgICB7Cisg ICAgICBydmFsID0gLTI7CisgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgcmVzdWx0ID0g cmVfc2VhcmNoX2ludGVybmFsIChidWZwLCBzdHJpbmcsIGxlbmd0aCwgc3RhcnQsIGxhc3Rf c3RhcnQsIHN0b3AsCisJCQkgICAgICAgbnJlZ3MsIHBtYXRjaCwgZWZsYWdzKTsKKworICBy dmFsID0gMDsKKworICAvKiBJIGhvcGUgd2UgbmVlZG4ndCBmaWxsIHRoZWlyIHJlZ3Mgd2l0 aCAtMSdzIHdoZW4gbm8gbWF0Y2ggd2FzIGZvdW5kLiAgKi8KKyAgaWYgKHJlc3VsdCAhPSBS RUdfTk9FUlJPUikKKyAgICBydmFsID0gcmVzdWx0ID09IFJFR19OT01BVENIID8gLTEgOiAt MjsKKyAgZWxzZSBpZiAocmVncyAhPSBOVUxMKQorICAgIHsKKyAgICAgIC8qIElmIGNhbGxl ciB3YW50cyByZWdpc3RlciBjb250ZW50cyBkYXRhIGJhY2ssIGNvcHkgdGhlbS4gICovCisg ICAgICBidWZwLT5yZWdzX2FsbG9jYXRlZCA9IHJlX2NvcHlfcmVncyAocmVncywgcG1hdGNo LCBucmVncywKKwkJCQkJICAgYnVmcC0+cmVnc19hbGxvY2F0ZWQpOworICAgICAgaWYgKEJF IChidWZwLT5yZWdzX2FsbG9jYXRlZCA9PSBSRUdTX1VOQUxMT0NBVEVELCAwKSkKKwlydmFs ID0gLTI7CisgICAgfQorCisgIGlmIChCRSAocnZhbCA9PSAwLCAxKSkKKyAgICB7CisgICAg ICBpZiAocmV0X2xlbikKKwl7CisJICBhc3NlcnQgKHBtYXRjaFswXS5ybV9zbyA9PSBzdGFy dCk7CisJICBydmFsID0gcG1hdGNoWzBdLnJtX2VvIC0gc3RhcnQ7CisJfQorICAgICAgZWxz ZQorCXJ2YWwgPSBwbWF0Y2hbMF0ucm1fc287CisgICAgfQorICByZV9mcmVlIChwbWF0Y2gp OworIG91dDoKKyAgbG9ja191bmxvY2sgKGRmYS0+bG9jayk7CisgIHJldHVybiBydmFsOwor fQorCitzdGF0aWMgdW5zaWduZWQKK3JlX2NvcHlfcmVncyAoc3RydWN0IHJlX3JlZ2lzdGVy cyAqcmVncywgcmVnbWF0Y2hfdCAqcG1hdGNoLCBJZHggbnJlZ3MsCisJICAgICAgaW50IHJl Z3NfYWxsb2NhdGVkKQoreworICBpbnQgcnZhbCA9IFJFR1NfUkVBTExPQ0FURTsKKyAgSWR4 IGk7CisgIElkeCBuZWVkX3JlZ3MgPSBucmVncyArIDE7CisgIC8qIFdlIG5lZWQgb25lIGV4 dHJhIGVsZW1lbnQgYmV5b25kICdudW1fcmVncycgZm9yIHRoZSAnLTEnIG1hcmtlciBHTlUg Y29kZQorICAgICB1c2VzLiAgKi8KKworICAvKiBIYXZlIHRoZSByZWdpc3RlciBkYXRhIGFy cmF5cyBiZWVuIGFsbG9jYXRlZD8gICovCisgIGlmIChyZWdzX2FsbG9jYXRlZCA9PSBSRUdT X1VOQUxMT0NBVEVEKQorICAgIHsgLyogTm8uICBTbyBhbGxvY2F0ZSB0aGVtIHdpdGggbWFs bG9jLiAgKi8KKyAgICAgIHJlZ3MtPnN0YXJ0ID0gcmVfbWFsbG9jIChyZWdvZmZfdCwgbmVl ZF9yZWdzKTsKKyAgICAgIGlmIChCRSAocmVncy0+c3RhcnQgPT0gTlVMTCwgMCkpCisJcmV0 dXJuIFJFR1NfVU5BTExPQ0FURUQ7CisgICAgICByZWdzLT5lbmQgPSByZV9tYWxsb2MgKHJl Z29mZl90LCBuZWVkX3JlZ3MpOworICAgICAgaWYgKEJFIChyZWdzLT5lbmQgPT0gTlVMTCwg MCkpCisJeworCSAgcmVfZnJlZSAocmVncy0+c3RhcnQpOworCSAgcmV0dXJuIFJFR1NfVU5B TExPQ0FURUQ7CisJfQorICAgICAgcmVncy0+bnVtX3JlZ3MgPSBuZWVkX3JlZ3M7CisgICAg fQorICBlbHNlIGlmIChyZWdzX2FsbG9jYXRlZCA9PSBSRUdTX1JFQUxMT0NBVEUpCisgICAg eyAvKiBZZXMuICBJZiB3ZSBuZWVkIG1vcmUgZWxlbWVudHMgdGhhbiB3ZXJlIGFscmVhZHkK KwkgYWxsb2NhdGVkLCByZWFsbG9jYXRlIHRoZW0uICBJZiB3ZSBuZWVkIGZld2VyLCBqdXN0 CisJIGxlYXZlIGl0IGFsb25lLiAgKi8KKyAgICAgIGlmIChCRSAobmVlZF9yZWdzID4gcmVn cy0+bnVtX3JlZ3MsIDApKQorCXsKKwkgIHJlZ29mZl90ICpuZXdfc3RhcnQgPSByZV9yZWFs bG9jIChyZWdzLT5zdGFydCwgcmVnb2ZmX3QsIG5lZWRfcmVncyk7CisJICByZWdvZmZfdCAq bmV3X2VuZDsKKwkgIGlmIChCRSAobmV3X3N0YXJ0ID09IE5VTEwsIDApKQorCSAgICByZXR1 cm4gUkVHU19VTkFMTE9DQVRFRDsKKwkgIG5ld19lbmQgPSByZV9yZWFsbG9jIChyZWdzLT5l bmQsIHJlZ29mZl90LCBuZWVkX3JlZ3MpOworCSAgaWYgKEJFIChuZXdfZW5kID09IE5VTEws IDApKQorCSAgICB7CisJICAgICAgcmVfZnJlZSAobmV3X3N0YXJ0KTsKKwkgICAgICByZXR1 cm4gUkVHU19VTkFMTE9DQVRFRDsKKwkgICAgfQorCSAgcmVncy0+c3RhcnQgPSBuZXdfc3Rh cnQ7CisJICByZWdzLT5lbmQgPSBuZXdfZW5kOworCSAgcmVncy0+bnVtX3JlZ3MgPSBuZWVk X3JlZ3M7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGFzc2VydCAocmVnc19h bGxvY2F0ZWQgPT0gUkVHU19GSVhFRCk7CisgICAgICAvKiBUaGlzIGZ1bmN0aW9uIG1heSBu b3QgYmUgY2FsbGVkIHdpdGggUkVHU19GSVhFRCBhbmQgbnJlZ3MgdG9vIGJpZy4gICovCisg ICAgICBhc3NlcnQgKHJlZ3MtPm51bV9yZWdzID49IG5yZWdzKTsKKyAgICAgIHJ2YWwgPSBS RUdTX0ZJWEVEOworICAgIH0KKworICAvKiBDb3B5IHRoZSByZWdzLiAgKi8KKyAgZm9yIChp ID0gMDsgaSA8IG5yZWdzOyArK2kpCisgICAgeworICAgICAgcmVncy0+c3RhcnRbaV0gPSBw bWF0Y2hbaV0ucm1fc287CisgICAgICByZWdzLT5lbmRbaV0gPSBwbWF0Y2hbaV0ucm1fZW87 CisgICAgfQorICBmb3IgKCA7IGkgPCByZWdzLT5udW1fcmVnczsgKytpKQorICAgIHJlZ3Mt PnN0YXJ0W2ldID0gcmVncy0+ZW5kW2ldID0gLTE7CisKKyAgcmV0dXJuIHJ2YWw7Cit9CisK Ky8qIFNldCBSRUdTIHRvIGhvbGQgTlVNX1JFR1MgcmVnaXN0ZXJzLCBzdG9yaW5nIHRoZW0g aW4gU1RBUlRTIGFuZAorICAgRU5EUy4gIFN1YnNlcXVlbnQgbWF0Y2hlcyB1c2luZyBQQVRU RVJOX0JVRkZFUiBhbmQgUkVHUyB3aWxsIHVzZQorICAgdGhpcyBtZW1vcnkgZm9yIHJlY29y ZGluZyByZWdpc3RlciBpbmZvcm1hdGlvbi4gIFNUQVJUUyBhbmQgRU5EUworICAgbXVzdCBi ZSBhbGxvY2F0ZWQgdXNpbmcgdGhlIG1hbGxvYyBsaWJyYXJ5IHJvdXRpbmUsIGFuZCBtdXN0 IGVhY2gKKyAgIGJlIGF0IGxlYXN0IE5VTV9SRUdTICogc2l6ZW9mIChyZWdvZmZfdCkgYnl0 ZXMgbG9uZy4KKworICAgSWYgTlVNX1JFR1MgPT0gMCwgdGhlbiBzdWJzZXF1ZW50IG1hdGNo ZXMgc2hvdWxkIGFsbG9jYXRlIHRoZWlyIG93bgorICAgcmVnaXN0ZXIgZGF0YS4KKworICAg VW5sZXNzIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgZmlyc3Qgc2VhcmNoIG9yIG1h dGNoIHVzaW5nCisgICBQQVRURVJOX0JVRkZFUiB3aWxsIGFsbG9jYXRlIGl0cyBvd24gcmVn aXN0ZXIgZGF0YSwgd2l0aG91dAorICAgZnJlZWluZyB0aGUgb2xkIGRhdGEuICAqLworCit2 b2lkCityZV9zZXRfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAs IHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCisJCSAgX19yZV9zaXplX3QgbnVtX3JlZ3Ms IHJlZ29mZl90ICpzdGFydHMsIHJlZ29mZl90ICplbmRzKQoreworICBpZiAobnVtX3JlZ3Mp CisgICAgeworICAgICAgYnVmcC0+cmVnc19hbGxvY2F0ZWQgPSBSRUdTX1JFQUxMT0NBVEU7 CisgICAgICByZWdzLT5udW1fcmVncyA9IG51bV9yZWdzOworICAgICAgcmVncy0+c3RhcnQg PSBzdGFydHM7CisgICAgICByZWdzLT5lbmQgPSBlbmRzOworICAgIH0KKyAgZWxzZQorICAg IHsKKyAgICAgIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID0gUkVHU19VTkFMTE9DQVRFRDsKKyAg ICAgIHJlZ3MtPm51bV9yZWdzID0gMDsKKyAgICAgIHJlZ3MtPnN0YXJ0ID0gcmVncy0+ZW5k ID0gTlVMTDsKKyAgICB9Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVfc2V0 X3JlZ2lzdGVycywgcmVfc2V0X3JlZ2lzdGVycykKKyNlbmRpZgorDAorLyogRW50cnkgcG9p bnRzIGNvbXBhdGlibGUgd2l0aCA0LjIgQlNEIHJlZ2V4IGxpYnJhcnkuICBXZSBkb24ndCBk ZWZpbmUKKyAgIHRoZW0gdW5sZXNzIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQuICAqLworCisj aWYgZGVmaW5lZCBfUkVHRVhfUkVfQ09NUCB8fCBkZWZpbmVkIF9MSUJDCitpbnQKKyMgaWZk ZWYgX0xJQkMKK3dlYWtfZnVuY3Rpb24KKyMgZW5kaWYKK3JlX2V4ZWMgKGNvbnN0IGNoYXIg KnMpCit7CisgIHJldHVybiAwID09IHJlZ2V4ZWMgKCZyZV9jb21wX2J1ZiwgcywgMCwgTlVM TCwgMCk7Cit9CisjZW5kaWYgLyogX1JFR0VYX1JFX0NPTVAgKi8KKwwKKy8qIEludGVybmFs IGVudHJ5IHBvaW50LiAgKi8KKworLyogU2VhcmNoZXMgZm9yIGEgY29tcGlsZWQgcGF0dGVy biBQUkVHIGluIHRoZSBzdHJpbmcgU1RSSU5HLCB3aG9zZQorICAgbGVuZ3RoIGlzIExFTkdU SC4gIE5NQVRDSCwgUE1BVENILCBhbmQgRUZMQUdTIGhhdmUgdGhlIHNhbWUKKyAgIG1lYW5p bmcgYXMgd2l0aCByZWdleGVjLiAgTEFTVF9TVEFSVCBpcyBTVEFSVCArIFJBTkdFLCB3aGVy ZQorICAgU1RBUlQgYW5kIFJBTkdFIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyB3aXRoIHJl X3NlYXJjaC4KKyAgIFJldHVybiBSRUdfTk9FUlJPUiBpZiB3ZSBmaW5kIGEgbWF0Y2gsIGFu ZCBSRUdfTk9NQVRDSCBpZiBub3QsCisgICBvdGhlcndpc2UgcmV0dXJuIHRoZSBlcnJvciBj b2RlLgorICAgTm90ZTogV2UgYXNzdW1lIGZyb250IGVuZCBmdW5jdGlvbnMgYWxyZWFkeSBj aGVjayByYW5nZXMuCisgICAoMCA8PSBMQVNUX1NUQVJUICYmIExBU1RfU1RBUlQgPD0gTEVO R1RIKSAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK19fYXR0cmlidXRlX3dhcm5fdW51 c2VkX3Jlc3VsdF9fCityZV9zZWFyY2hfaW50ZXJuYWwgKGNvbnN0IHJlZ2V4X3QgKnByZWcs IGNvbnN0IGNoYXIgKnN0cmluZywgSWR4IGxlbmd0aCwKKwkJICAgIElkeCBzdGFydCwgSWR4 IGxhc3Rfc3RhcnQsIElkeCBzdG9wLCBzaXplX3Qgbm1hdGNoLAorCQkgICAgcmVnbWF0Y2hf dCBwbWF0Y2hbXSwgaW50IGVmbGFncykKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGNv bnN0IHJlX2RmYV90ICpkZmEgPSBwcmVnLT5idWZmZXI7CisgIElkeCBsZWZ0X2xpbSwgcmln aHRfbGltOworICBpbnQgaW5jcjsKKyAgYm9vbCBmbF9sb25nZXN0X21hdGNoOworICBpbnQg bWF0Y2hfa2luZDsKKyAgSWR4IG1hdGNoX2ZpcnN0OworICBJZHggbWF0Y2hfbGFzdCA9IC0x OworICBJZHggZXh0cmFfbm1hdGNoOworICBib29sIHNiOworICBpbnQgY2g7CisjaWYgZGVm aW5lZCBfTElCQyB8fCAoZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fICYmIF9fU1REQ19WRVJT SU9OX18gPj0gMTk5OTAxTCkKKyAgcmVfbWF0Y2hfY29udGV4dF90IG1jdHggPSB7IC5kZmEg PSBkZmEgfTsKKyNlbHNlCisgIHJlX21hdGNoX2NvbnRleHRfdCBtY3R4OworI2VuZGlmCisg IGNoYXIgKmZhc3RtYXAgPSAoKHByZWctPmZhc3RtYXAgIT0gTlVMTCAmJiBwcmVnLT5mYXN0 bWFwX2FjY3VyYXRlCisJCSAgICAmJiBzdGFydCAhPSBsYXN0X3N0YXJ0ICYmICFwcmVnLT5j YW5fYmVfbnVsbCkKKwkJICAgPyBwcmVnLT5mYXN0bWFwIDogTlVMTCk7CisgIFJFX1RSQU5T TEFURV9UWVBFIHQgPSBwcmVnLT50cmFuc2xhdGU7CisKKyNpZiAhKGRlZmluZWQgX0xJQkMg fHwgKGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5 OTkwMUwpKQorICBtZW1zZXQgKCZtY3R4LCAnXDAnLCBzaXplb2YgKHJlX21hdGNoX2NvbnRl eHRfdCkpOworICBtY3R4LmRmYSA9IGRmYTsKKyNlbmRpZgorCisgIGV4dHJhX25tYXRjaCA9 IChubWF0Y2ggPiBwcmVnLT5yZV9uc3ViKSA/IG5tYXRjaCAtIChwcmVnLT5yZV9uc3ViICsg MSkgOiAwOworICBubWF0Y2ggLT0gZXh0cmFfbm1hdGNoOworCisgIC8qIENoZWNrIGlmIHRo ZSBERkEgaGF2ZW4ndCBiZWVuIGNvbXBpbGVkLiAgKi8KKyAgaWYgKEJFIChwcmVnLT51c2Vk ID09IDAgfHwgZGZhLT5pbml0X3N0YXRlID09IE5VTEwKKwkgIHx8IGRmYS0+aW5pdF9zdGF0 ZV93b3JkID09IE5VTEwgfHwgZGZhLT5pbml0X3N0YXRlX25sID09IE5VTEwKKwkgIHx8IGRm YS0+aW5pdF9zdGF0ZV9iZWdidWYgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIFJFR19OT01B VENIOworCisjaWZkZWYgREVCVUcKKyAgLyogV2UgYXNzdW1lIGZyb250LWVuZCBmdW5jdGlv bnMgYWxyZWFkeSBjaGVjayB0aGVtLiAgKi8KKyAgYXNzZXJ0ICgwIDw9IGxhc3Rfc3RhcnQg JiYgbGFzdF9zdGFydCA8PSBsZW5ndGgpOworI2VuZGlmCisKKyAgLyogSWYgaW5pdGlhbCBz dGF0ZXMgd2l0aCBub24tYmVnYnVmIGNvbnRleHRzIGhhdmUgbm8gZWxlbWVudHMsCisgICAg IHRoZSByZWdleCBtdXN0IGJlIGFuY2hvcmVkLiAgSWYgcHJlZy0+bmV3bGluZV9hbmNob3Ig aXMgc2V0LAorICAgICB3ZSdsbCBuZXZlciB1c2UgaW5pdF9zdGF0ZV9ubCwgc28gZG8gbm90 IGNoZWNrIGl0LiAgKi8KKyAgaWYgKGRmYS0+aW5pdF9zdGF0ZS0+bm9kZXMubmVsZW0gPT0g MAorICAgICAgJiYgZGZhLT5pbml0X3N0YXRlX3dvcmQtPm5vZGVzLm5lbGVtID09IDAKKyAg ICAgICYmIChkZmEtPmluaXRfc3RhdGVfbmwtPm5vZGVzLm5lbGVtID09IDAKKwkgIHx8ICFw cmVnLT5uZXdsaW5lX2FuY2hvcikpCisgICAgeworICAgICAgaWYgKHN0YXJ0ICE9IDAgJiYg bGFzdF9zdGFydCAhPSAwKQorICAgICAgICByZXR1cm4gUkVHX05PTUFUQ0g7CisgICAgICBz dGFydCA9IGxhc3Rfc3RhcnQgPSAwOworICAgIH0KKworICAvKiBXZSBtdXN0IGNoZWNrIHRo ZSBsb25nZXN0IG1hdGNoaW5nLCBpZiBubWF0Y2ggPiAwLiAgKi8KKyAgZmxfbG9uZ2VzdF9t YXRjaCA9IChubWF0Y2ggIT0gMCB8fCBkZmEtPm5iYWNrcmVmKTsKKworICBlcnIgPSByZV9z dHJpbmdfYWxsb2NhdGUgKCZtY3R4LmlucHV0LCBzdHJpbmcsIGxlbmd0aCwgZGZhLT5ub2Rl c19sZW4gKyAxLAorCQkJICAgIHByZWctPnRyYW5zbGF0ZSwgKHByZWctPnN5bnRheCAmIFJF X0lDQVNFKSAhPSAwLAorCQkJICAgIGRmYSk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VS Uk9SLCAwKSkKKyAgICBnb3RvIGZyZWVfcmV0dXJuOworICBtY3R4LmlucHV0LnN0b3AgPSBz dG9wOworICBtY3R4LmlucHV0LnJhd19zdG9wID0gc3RvcDsKKyAgbWN0eC5pbnB1dC5uZXds aW5lX2FuY2hvciA9IHByZWctPm5ld2xpbmVfYW5jaG9yOworCisgIGVyciA9IG1hdGNoX2N0 eF9pbml0ICgmbWN0eCwgZWZsYWdzLCBkZmEtPm5iYWNrcmVmICogMik7CisgIGlmIChCRSAo ZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICBnb3RvIGZyZWVfcmV0dXJuOworCisgIC8q IFdlIHdpbGwgbG9nIGFsbCB0aGUgREZBIHN0YXRlcyB0aHJvdWdoIHdoaWNoIHRoZSBkZmEg cGFzcywKKyAgICAgaWYgbm1hdGNoID4gMSwgb3IgdGhpcyBkZmEgaGFzICJtdWx0aWJ5dGUg bm9kZSIsIHdoaWNoIGlzIGEKKyAgICAgYmFjay1yZWZlcmVuY2Ugb3IgYSBub2RlIHdoaWNo IGNhbiBhY2NlcHQgbXVsdGlieXRlIGNoYXJhY3RlciBvcgorICAgICBtdWx0aSBjaGFyYWN0 ZXIgY29sbGF0aW5nIGVsZW1lbnQuICAqLworICBpZiAobm1hdGNoID4gMSB8fCBkZmEtPmhh c19tYl9ub2RlKQorICAgIHsKKyAgICAgIC8qIEF2b2lkIG92ZXJmbG93LiAgKi8KKyAgICAg IGlmIChCRSAoKE1JTiAoSURYX01BWCwgU0laRV9NQVggLyBzaXplb2YgKHJlX2RmYXN0YXRl X3QgKikpCisgICAgICAgICAgICAgICA8PSBtY3R4LmlucHV0LmJ1ZnNfbGVuKSwgMCkpCisJ eworCSAgZXJyID0gUkVHX0VTUEFDRTsKKwkgIGdvdG8gZnJlZV9yZXR1cm47CisJfQorCisg ICAgICBtY3R4LnN0YXRlX2xvZyA9IHJlX21hbGxvYyAocmVfZGZhc3RhdGVfdCAqLCBtY3R4 LmlucHV0LmJ1ZnNfbGVuICsgMSk7CisgICAgICBpZiAoQkUgKG1jdHguc3RhdGVfbG9nID09 IE5VTEwsIDApKQorCXsKKwkgIGVyciA9IFJFR19FU1BBQ0U7CisJICBnb3RvIGZyZWVfcmV0 dXJuOworCX0KKyAgICB9CisgIGVsc2UKKyAgICBtY3R4LnN0YXRlX2xvZyA9IE5VTEw7CisK KyAgbWF0Y2hfZmlyc3QgPSBzdGFydDsKKyAgbWN0eC5pbnB1dC50aXBfY29udGV4dCA9IChl ZmxhZ3MgJiBSRUdfTk9UQk9MKSA/IENPTlRFWFRfQkVHQlVGCisJCQkgICA6IENPTlRFWFRf TkVXTElORSB8IENPTlRFWFRfQkVHQlVGOworCisgIC8qIENoZWNrIGluY3JlbWVudGFsbHkg d2hldGhlciB0aGUgaW5wdXQgc3RyaW5nIG1hdGNoZXMuICAqLworICBpbmNyID0gKGxhc3Rf c3RhcnQgPCBzdGFydCkgPyAtMSA6IDE7CisgIGxlZnRfbGltID0gKGxhc3Rfc3RhcnQgPCBz dGFydCkgPyBsYXN0X3N0YXJ0IDogc3RhcnQ7CisgIHJpZ2h0X2xpbSA9IChsYXN0X3N0YXJ0 IDwgc3RhcnQpID8gc3RhcnQgOiBsYXN0X3N0YXJ0OworICBzYiA9IGRmYS0+bWJfY3VyX21h eCA9PSAxOworICBtYXRjaF9raW5kID0KKyAgICAoZmFzdG1hcAorICAgICA/ICgoc2IgfHwg IShwcmVnLT5zeW50YXggJiBSRV9JQ0FTRSB8fCB0KSA/IDQgOiAwKQorCXwgKHN0YXJ0IDw9 IGxhc3Rfc3RhcnQgPyAyIDogMCkKKwl8ICh0ICE9IE5VTEwgPyAxIDogMCkpCisgICAgIDog OCk7CisKKyAgZm9yICg7OyBtYXRjaF9maXJzdCArPSBpbmNyKQorICAgIHsKKyAgICAgIGVy ciA9IFJFR19OT01BVENIOworICAgICAgaWYgKG1hdGNoX2ZpcnN0IDwgbGVmdF9saW0gfHwg cmlnaHRfbGltIDwgbWF0Y2hfZmlyc3QpCisJZ290byBmcmVlX3JldHVybjsKKworICAgICAg LyogQWR2YW5jZSBhcyByYXBpZGx5IGFzIHBvc3NpYmxlIHRocm91Z2ggdGhlIHN0cmluZywg dW50aWwgd2UKKwkgZmluZCBhIHBsYXVzaWJsZSBwbGFjZSB0byBzdGFydCBtYXRjaGluZy4g IFRoaXMgbWF5IGJlIGRvbmUKKwkgd2l0aCB2YXJ5aW5nIGVmZmljaWVuY3ksIHNvIHRoZXJl IGFyZSB2YXJpb3VzIHBvc3NpYmlsaXRpZXM6CisJIG9ubHkgdGhlIG1vc3QgY29tbW9uIG9m IHRoZW0gYXJlIHNwZWNpYWxpemVkLCBpbiBvcmRlciB0bworCSBzYXZlIG9uIGNvZGUgc2l6 ZS4gIFdlIHVzZSBhIHN3aXRjaCBzdGF0ZW1lbnQgZm9yIHNwZWVkLiAgKi8KKyAgICAgIHN3 aXRjaCAobWF0Y2hfa2luZCkKKwl7CisJY2FzZSA4OgorCSAgLyogTm8gZmFzdG1hcC4gICov CisJICBicmVhazsKKworCWNhc2UgNzoKKwkgIC8qIEZhc3RtYXAgd2l0aCBzaW5nbGUtYnl0 ZSB0cmFuc2xhdGlvbiwgbWF0Y2ggZm9yd2FyZC4gICovCisJICB3aGlsZSAoQkUgKG1hdGNo X2ZpcnN0IDwgcmlnaHRfbGltLCAxKQorCQkgJiYgIWZhc3RtYXBbdFsodW5zaWduZWQgY2hh cikgc3RyaW5nW21hdGNoX2ZpcnN0XV1dKQorCSAgICArK21hdGNoX2ZpcnN0OworCSAgZ290 byBmb3J3YXJkX21hdGNoX2ZvdW5kX3N0YXJ0X29yX3JlYWNoZWRfZW5kOworCisJY2FzZSA2 OgorCSAgLyogRmFzdG1hcCB3aXRob3V0IHRyYW5zbGF0aW9uLCBtYXRjaCBmb3J3YXJkLiAg Ki8KKwkgIHdoaWxlIChCRSAobWF0Y2hfZmlyc3QgPCByaWdodF9saW0sIDEpCisJCSAmJiAh ZmFzdG1hcFsodW5zaWduZWQgY2hhcikgc3RyaW5nW21hdGNoX2ZpcnN0XV0pCisJICAgICsr bWF0Y2hfZmlyc3Q7CisKKwlmb3J3YXJkX21hdGNoX2ZvdW5kX3N0YXJ0X29yX3JlYWNoZWRf ZW5kOgorCSAgaWYgKEJFIChtYXRjaF9maXJzdCA9PSByaWdodF9saW0sIDApKQorCSAgICB7 CisJICAgICAgY2ggPSBtYXRjaF9maXJzdCA+PSBsZW5ndGgKKwkJICAgICAgID8gMCA6ICh1 bnNpZ25lZCBjaGFyKSBzdHJpbmdbbWF0Y2hfZmlyc3RdOworCSAgICAgIGlmICghZmFzdG1h cFt0ID8gdFtjaF0gOiBjaF0pCisJCWdvdG8gZnJlZV9yZXR1cm47CisJICAgIH0KKwkgIGJy ZWFrOworCisJY2FzZSA0OgorCWNhc2UgNToKKwkgIC8qIEZhc3RtYXAgd2l0aG91dCBtdWx0 aS1ieXRlIHRyYW5zbGF0aW9uLCBtYXRjaCBiYWNrd2FyZHMuICAqLworCSAgd2hpbGUgKG1h dGNoX2ZpcnN0ID49IGxlZnRfbGltKQorCSAgICB7CisJICAgICAgY2ggPSBtYXRjaF9maXJz dCA+PSBsZW5ndGgKKwkJICAgICAgID8gMCA6ICh1bnNpZ25lZCBjaGFyKSBzdHJpbmdbbWF0 Y2hfZmlyc3RdOworCSAgICAgIGlmIChmYXN0bWFwW3QgPyB0W2NoXSA6IGNoXSkKKwkJYnJl YWs7CisJICAgICAgLS1tYXRjaF9maXJzdDsKKwkgICAgfQorCSAgaWYgKG1hdGNoX2ZpcnN0 IDwgbGVmdF9saW0pCisJICAgIGdvdG8gZnJlZV9yZXR1cm47CisJICBicmVhazsKKworCWRl ZmF1bHQ6CisJICAvKiBJbiB0aGlzIGNhc2UsIHdlIGNhbid0IGRldGVybWluZSBlYXNpbHkg dGhlIGN1cnJlbnQgYnl0ZSwKKwkgICAgIHNpbmNlIGl0IG1pZ2h0IGJlIGEgY29tcG9uZW50 IGJ5dGUgb2YgYSBtdWx0aWJ5dGUKKwkgICAgIGNoYXJhY3Rlci4gIFRoZW4gd2UgdXNlIHRo ZSBjb25zdHJ1Y3RlZCBidWZmZXIgaW5zdGVhZC4gICovCisJICBmb3IgKDs7KQorCSAgICB7 CisJICAgICAgLyogSWYgTUFUQ0hfRklSU1QgaXMgb3V0IG9mIHRoZSB2YWxpZCByYW5nZSwg cmVjb25zdHJ1Y3QgdGhlCisJCSBidWZmZXJzLiAgKi8KKwkgICAgICBfX3JlX3NpemVfdCBv ZmZzZXQgPSBtYXRjaF9maXJzdCAtIG1jdHguaW5wdXQucmF3X21ic19pZHg7CisJICAgICAg aWYgKEJFIChvZmZzZXQgPj0gKF9fcmVfc2l6ZV90KSBtY3R4LmlucHV0LnZhbGlkX3Jhd19s ZW4sIDApKQorCQl7CisJCSAgZXJyID0gcmVfc3RyaW5nX3JlY29uc3RydWN0ICgmbWN0eC5p bnB1dCwgbWF0Y2hfZmlyc3QsCisJCQkJCSAgICAgICBlZmxhZ3MpOworCQkgIGlmIChCRSAo ZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICAgIGdvdG8gZnJlZV9yZXR1cm47CisKKwkJ ICBvZmZzZXQgPSBtYXRjaF9maXJzdCAtIG1jdHguaW5wdXQucmF3X21ic19pZHg7CisJCX0K KwkgICAgICAvKiBJZiBNQVRDSF9GSVJTVCBpcyBvdXQgb2YgdGhlIGJ1ZmZlciwgbGVhdmUg aXQgYXMgJ1wwJy4KKwkJIE5vdGUgdGhhdCBNQVRDSF9GSVJTVCBtdXN0IG5vdCBiZSBzbWFs bGVyIHRoYW4gMC4gICovCisJICAgICAgY2ggPSAobWF0Y2hfZmlyc3QgPj0gbGVuZ3RoCisJ CSAgICA/IDAgOiByZV9zdHJpbmdfYnl0ZV9hdCAoJm1jdHguaW5wdXQsIG9mZnNldCkpOwor CSAgICAgIGlmIChmYXN0bWFwW2NoXSkKKwkJYnJlYWs7CisJICAgICAgbWF0Y2hfZmlyc3Qg Kz0gaW5jcjsKKwkgICAgICBpZiAobWF0Y2hfZmlyc3QgPCBsZWZ0X2xpbSB8fCBtYXRjaF9m aXJzdCA+IHJpZ2h0X2xpbSkKKwkJeworCQkgIGVyciA9IFJFR19OT01BVENIOworCQkgIGdv dG8gZnJlZV9yZXR1cm47CisJCX0KKwkgICAgfQorCSAgYnJlYWs7CisJfQorCisgICAgICAv KiBSZWNvbnN0cnVjdCB0aGUgYnVmZmVycyBzbyB0aGF0IHRoZSBtYXRjaGVyIGNhbiBhc3N1 bWUgdGhhdAorCSB0aGUgbWF0Y2hpbmcgc3RhcnRzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0 aGUgYnVmZmVyLiAgKi8KKyAgICAgIGVyciA9IHJlX3N0cmluZ19yZWNvbnN0cnVjdCAoJm1j dHguaW5wdXQsIG1hdGNoX2ZpcnN0LCBlZmxhZ3MpOworICAgICAgaWYgKEJFIChlcnIgIT0g UkVHX05PRVJST1IsIDApKQorCWdvdG8gZnJlZV9yZXR1cm47CisKKyNpZmRlZiBSRV9FTkFC TEVfSTE4TgorICAgICAvKiBEb24ndCBjb25zaWRlciB0aGlzIGNoYXIgYXMgYSBwb3NzaWJs ZSBtYXRjaCBzdGFydCBpZiBpdCBwYXJ0LAorCXlldCBpc24ndCB0aGUgaGVhZCwgb2YgYSBt dWx0aWJ5dGUgY2hhcmFjdGVyLiAgKi8KKyAgICAgIGlmICghc2IgJiYgIXJlX3N0cmluZ19m aXJzdF9ieXRlICgmbWN0eC5pbnB1dCwgMCkpCisJY29udGludWU7CisjZW5kaWYKKworICAg ICAgLyogSXQgc2VlbXMgdG8gYmUgYXBwcm9wcmlhdGUgb25lLCB0aGVuIHVzZSB0aGUgbWF0 Y2hlci4gICovCisgICAgICAvKiBXZSBhc3N1bWUgdGhhdCB0aGUgbWF0Y2hpbmcgc3RhcnRz IGZyb20gMC4gICovCisgICAgICBtY3R4LnN0YXRlX2xvZ190b3AgPSBtY3R4Lm5ia3JlZl9l bnRzID0gbWN0eC5tYXhfbWJfZWxlbV9sZW4gPSAwOworICAgICAgbWF0Y2hfbGFzdCA9IGNo ZWNrX21hdGNoaW5nICgmbWN0eCwgZmxfbG9uZ2VzdF9tYXRjaCwKKwkJCQkgICBzdGFydCA8 PSBsYXN0X3N0YXJ0ID8gJm1hdGNoX2ZpcnN0IDogTlVMTCk7CisgICAgICBpZiAobWF0Y2hf bGFzdCAhPSAtMSkKKwl7CisJICBpZiAoQkUgKG1hdGNoX2xhc3QgPT0gLTIsIDApKQorCSAg ICB7CisJICAgICAgZXJyID0gUkVHX0VTUEFDRTsKKwkgICAgICBnb3RvIGZyZWVfcmV0dXJu OworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBtY3R4Lm1hdGNoX2xhc3QgPSBt YXRjaF9sYXN0OworCSAgICAgIGlmICgoIXByZWctPm5vX3N1YiAmJiBubWF0Y2ggPiAxKSB8 fCBkZmEtPm5iYWNrcmVmKQorCQl7CisJCSAgcmVfZGZhc3RhdGVfdCAqcHN0YXRlID0gbWN0 eC5zdGF0ZV9sb2dbbWF0Y2hfbGFzdF07CisJCSAgbWN0eC5sYXN0X25vZGUgPSBjaGVja19o YWx0X3N0YXRlX2NvbnRleHQgKCZtY3R4LCBwc3RhdGUsCisJCQkJCQkJICAgICBtYXRjaF9s YXN0KTsKKwkJfQorCSAgICAgIGlmICgoIXByZWctPm5vX3N1YiAmJiBubWF0Y2ggPiAxICYm IGRmYS0+aGFzX3BsdXJhbF9tYXRjaCkKKwkJICB8fCBkZmEtPm5iYWNrcmVmKQorCQl7CisJ CSAgZXJyID0gcHJ1bmVfaW1wb3NzaWJsZV9ub2RlcyAoJm1jdHgpOworCQkgIGlmIChlcnIg PT0gUkVHX05PRVJST1IpCisJCSAgICBicmVhazsKKwkJICBpZiAoQkUgKGVyciAhPSBSRUdf Tk9NQVRDSCwgMCkpCisJCSAgICBnb3RvIGZyZWVfcmV0dXJuOworCQkgIG1hdGNoX2xhc3Qg PSAtMTsKKwkJfQorCSAgICAgIGVsc2UKKwkJYnJlYWs7IC8qIFdlIGZvdW5kIGEgbWF0Y2gu ICAqLworCSAgICB9CisJfQorCisgICAgICBtYXRjaF9jdHhfY2xlYW4gKCZtY3R4KTsKKyAg ICB9CisKKyNpZmRlZiBERUJVRworICBhc3NlcnQgKG1hdGNoX2xhc3QgIT0gLTEpOworICBh c3NlcnQgKGVyciA9PSBSRUdfTk9FUlJPUik7CisjZW5kaWYKKworICAvKiBTZXQgcG1hdGNo W10gaWYgd2UgbmVlZC4gICovCisgIGlmIChubWF0Y2ggPiAwKQorICAgIHsKKyAgICAgIElk eCByZWdfaWR4OworCisgICAgICAvKiBJbml0aWFsaXplIHJlZ2lzdGVycy4gICovCisgICAg ICBmb3IgKHJlZ19pZHggPSAxOyByZWdfaWR4IDwgbm1hdGNoOyArK3JlZ19pZHgpCisJcG1h dGNoW3JlZ19pZHhdLnJtX3NvID0gcG1hdGNoW3JlZ19pZHhdLnJtX2VvID0gLTE7CisKKyAg ICAgIC8qIFNldCB0aGUgcG9pbnRzIHdoZXJlIG1hdGNoaW5nIHN0YXJ0L2VuZC4gICovCisg ICAgICBwbWF0Y2hbMF0ucm1fc28gPSAwOworICAgICAgcG1hdGNoWzBdLnJtX2VvID0gbWN0 eC5tYXRjaF9sYXN0OworICAgICAgLyogRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGZh aWwgaWYgbWN0eC5tYXRjaF9sYXN0IGV4Y2VlZHMKKwkgdGhlIG1heGltdW0gcG9zc2libGUg cmVnb2ZmX3QgdmFsdWUuICBXZSBuZWVkIGEgbmV3IGVycm9yCisJIGNvZGUgUkVHX09WRVJG TE9XLiAgKi8KKworICAgICAgaWYgKCFwcmVnLT5ub19zdWIgJiYgbm1hdGNoID4gMSkKKwl7 CisJICBlcnIgPSBzZXRfcmVncyAocHJlZywgJm1jdHgsIG5tYXRjaCwgcG1hdGNoLAorCQkJ ICBkZmEtPmhhc19wbHVyYWxfbWF0Y2ggJiYgZGZhLT5uYmFja3JlZiA+IDApOworCSAgaWYg KEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICBnb3RvIGZyZWVfcmV0dXJuOwor CX0KKworICAgICAgLyogQXQgbGFzdCwgYWRkIHRoZSBvZmZzZXQgdG8gZWFjaCByZWdpc3Rl ciwgc2luY2Ugd2Ugc2xpZAorCSB0aGUgYnVmZmVycyBzbyB0aGF0IHdlIGNvdWxkIGFzc3Vt ZSB0aGF0IHRoZSBtYXRjaGluZyBzdGFydHMKKwkgZnJvbSAwLiAgKi8KKyAgICAgIGZvciAo cmVnX2lkeCA9IDA7IHJlZ19pZHggPCBubWF0Y2g7ICsrcmVnX2lkeCkKKwlpZiAocG1hdGNo W3JlZ19pZHhdLnJtX3NvICE9IC0xKQorCSAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJ ICAgIGlmIChCRSAobWN0eC5pbnB1dC5vZmZzZXRzX25lZWRlZCAhPSAwLCAwKSkKKwkgICAg ICB7CisJCXBtYXRjaFtyZWdfaWR4XS5ybV9zbyA9CisJCSAgKHBtYXRjaFtyZWdfaWR4XS5y bV9zbyA9PSBtY3R4LmlucHV0LnZhbGlkX2xlbgorCQkgICA/IG1jdHguaW5wdXQudmFsaWRf cmF3X2xlbgorCQkgICA6IG1jdHguaW5wdXQub2Zmc2V0c1twbWF0Y2hbcmVnX2lkeF0ucm1f c29dKTsKKwkJcG1hdGNoW3JlZ19pZHhdLnJtX2VvID0KKwkJICAocG1hdGNoW3JlZ19pZHhd LnJtX2VvID09IG1jdHguaW5wdXQudmFsaWRfbGVuCisJCSAgID8gbWN0eC5pbnB1dC52YWxp ZF9yYXdfbGVuCisJCSAgIDogbWN0eC5pbnB1dC5vZmZzZXRzW3BtYXRjaFtyZWdfaWR4XS5y bV9lb10pOworCSAgICAgIH0KKyNlbHNlCisJICAgIGFzc2VydCAobWN0eC5pbnB1dC5vZmZz ZXRzX25lZWRlZCA9PSAwKTsKKyNlbmRpZgorCSAgICBwbWF0Y2hbcmVnX2lkeF0ucm1fc28g Kz0gbWF0Y2hfZmlyc3Q7CisJICAgIHBtYXRjaFtyZWdfaWR4XS5ybV9lbyArPSBtYXRjaF9m aXJzdDsKKwkgIH0KKyAgICAgIGZvciAocmVnX2lkeCA9IDA7IHJlZ19pZHggPCBleHRyYV9u bWF0Y2g7ICsrcmVnX2lkeCkKKwl7CisJICBwbWF0Y2hbbm1hdGNoICsgcmVnX2lkeF0ucm1f c28gPSAtMTsKKwkgIHBtYXRjaFtubWF0Y2ggKyByZWdfaWR4XS5ybV9lbyA9IC0xOworCX0K KworICAgICAgaWYgKGRmYS0+c3ViZXhwX21hcCkKKwlmb3IgKHJlZ19pZHggPSAwOyByZWdf aWR4ICsgMSA8IG5tYXRjaDsgcmVnX2lkeCsrKQorCSAgaWYgKGRmYS0+c3ViZXhwX21hcFty ZWdfaWR4XSAhPSByZWdfaWR4KQorCSAgICB7CisJICAgICAgcG1hdGNoW3JlZ19pZHggKyAx XS5ybV9zbworCQk9IHBtYXRjaFtkZmEtPnN1YmV4cF9tYXBbcmVnX2lkeF0gKyAxXS5ybV9z bzsKKwkgICAgICBwbWF0Y2hbcmVnX2lkeCArIDFdLnJtX2VvCisJCT0gcG1hdGNoW2RmYS0+ c3ViZXhwX21hcFtyZWdfaWR4XSArIDFdLnJtX2VvOworCSAgICB9CisgICAgfQorCisgZnJl ZV9yZXR1cm46CisgIHJlX2ZyZWUgKG1jdHguc3RhdGVfbG9nKTsKKyAgaWYgKGRmYS0+bmJh Y2tyZWYpCisgICAgbWF0Y2hfY3R4X2ZyZWUgKCZtY3R4KTsKKyAgcmVfc3RyaW5nX2Rlc3Ry dWN0ICgmbWN0eC5pbnB1dCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyByZWdfZXJy Y29kZV90CitfX2F0dHJpYnV0ZV93YXJuX3VudXNlZF9yZXN1bHRfXworcHJ1bmVfaW1wb3Nz aWJsZV9ub2RlcyAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4KQoreworICBjb25zdCByZV9k ZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICBJZHggaGFsdF9ub2RlLCBtYXRjaF9s YXN0OworICByZWdfZXJyY29kZV90IHJldDsKKyAgcmVfZGZhc3RhdGVfdCAqKnNpZnRlZF9z dGF0ZXM7CisgIHJlX2RmYXN0YXRlX3QgKipsaW1fc3RhdGVzID0gTlVMTDsKKyAgcmVfc2lm dF9jb250ZXh0X3Qgc2N0eDsKKyNpZmRlZiBERUJVRworICBhc3NlcnQgKG1jdHgtPnN0YXRl X2xvZyAhPSBOVUxMKTsKKyNlbmRpZgorICBtYXRjaF9sYXN0ID0gbWN0eC0+bWF0Y2hfbGFz dDsKKyAgaGFsdF9ub2RlID0gbWN0eC0+bGFzdF9ub2RlOworCisgIC8qIEF2b2lkIG92ZXJm bG93LiAgKi8KKyAgaWYgKEJFIChNSU4gKElEWF9NQVgsIFNJWkVfTUFYIC8gc2l6ZW9mIChy ZV9kZmFzdGF0ZV90ICopKSA8PSBtYXRjaF9sYXN0LCAwKSkKKyAgICByZXR1cm4gUkVHX0VT UEFDRTsKKworICBzaWZ0ZWRfc3RhdGVzID0gcmVfbWFsbG9jIChyZV9kZmFzdGF0ZV90ICos IG1hdGNoX2xhc3QgKyAxKTsKKyAgaWYgKEJFIChzaWZ0ZWRfc3RhdGVzID09IE5VTEwsIDAp KQorICAgIHsKKyAgICAgIHJldCA9IFJFR19FU1BBQ0U7CisgICAgICBnb3RvIGZyZWVfcmV0 dXJuOworICAgIH0KKyAgaWYgKGRmYS0+bmJhY2tyZWYpCisgICAgeworICAgICAgbGltX3N0 YXRlcyA9IHJlX21hbGxvYyAocmVfZGZhc3RhdGVfdCAqLCBtYXRjaF9sYXN0ICsgMSk7Cisg ICAgICBpZiAoQkUgKGxpbV9zdGF0ZXMgPT0gTlVMTCwgMCkpCisJeworCSAgcmV0ID0gUkVH X0VTUEFDRTsKKwkgIGdvdG8gZnJlZV9yZXR1cm47CisJfQorICAgICAgd2hpbGUgKDEpCisJ eworCSAgbWVtc2V0IChsaW1fc3RhdGVzLCAnXDAnLAorCQkgIHNpemVvZiAocmVfZGZhc3Rh dGVfdCAqKSAqIChtYXRjaF9sYXN0ICsgMSkpOworCSAgc2lmdF9jdHhfaW5pdCAoJnNjdHgs IHNpZnRlZF9zdGF0ZXMsIGxpbV9zdGF0ZXMsIGhhbHRfbm9kZSwKKwkJCSBtYXRjaF9sYXN0 KTsKKwkgIHJldCA9IHNpZnRfc3RhdGVzX2JhY2t3YXJkIChtY3R4LCAmc2N0eCk7CisJICBy ZV9ub2RlX3NldF9mcmVlICgmc2N0eC5saW1pdHMpOworCSAgaWYgKEJFIChyZXQgIT0gUkVH X05PRVJST1IsIDApKQorCSAgICAgIGdvdG8gZnJlZV9yZXR1cm47CisJICBpZiAoc2lmdGVk X3N0YXRlc1swXSAhPSBOVUxMIHx8IGxpbV9zdGF0ZXNbMF0gIT0gTlVMTCkKKwkgICAgYnJl YWs7CisJICBkbworCSAgICB7CisJICAgICAgLS1tYXRjaF9sYXN0OworCSAgICAgIGlmICht YXRjaF9sYXN0IDwgMCkKKwkJeworCQkgIHJldCA9IFJFR19OT01BVENIOworCQkgIGdvdG8g ZnJlZV9yZXR1cm47CisJCX0KKwkgICAgfSB3aGlsZSAobWN0eC0+c3RhdGVfbG9nW21hdGNo X2xhc3RdID09IE5VTEwKKwkJICAgICB8fCAhbWN0eC0+c3RhdGVfbG9nW21hdGNoX2xhc3Rd LT5oYWx0KTsKKwkgIGhhbHRfbm9kZSA9IGNoZWNrX2hhbHRfc3RhdGVfY29udGV4dCAobWN0 eCwKKwkJCQkJCW1jdHgtPnN0YXRlX2xvZ1ttYXRjaF9sYXN0XSwKKwkJCQkJCW1hdGNoX2xh c3QpOworCX0KKyAgICAgIHJldCA9IG1lcmdlX3N0YXRlX2FycmF5IChkZmEsIHNpZnRlZF9z dGF0ZXMsIGxpbV9zdGF0ZXMsCisJCQkgICAgICAgbWF0Y2hfbGFzdCArIDEpOworICAgICAg cmVfZnJlZSAobGltX3N0YXRlcyk7CisgICAgICBsaW1fc3RhdGVzID0gTlVMTDsKKyAgICAg IGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKwlnb3RvIGZyZWVfcmV0dXJuOwor ICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHNpZnRfY3R4X2luaXQgKCZzY3R4LCBzaWZ0 ZWRfc3RhdGVzLCBsaW1fc3RhdGVzLCBoYWx0X25vZGUsIG1hdGNoX2xhc3QpOworICAgICAg cmV0ID0gc2lmdF9zdGF0ZXNfYmFja3dhcmQgKG1jdHgsICZzY3R4KTsKKyAgICAgIHJlX25v ZGVfc2V0X2ZyZWUgKCZzY3R4LmxpbWl0cyk7CisgICAgICBpZiAoQkUgKHJldCAhPSBSRUdf Tk9FUlJPUiwgMCkpCisJZ290byBmcmVlX3JldHVybjsKKyAgICAgIGlmIChzaWZ0ZWRfc3Rh dGVzWzBdID09IE5VTEwpCisJeworCSAgcmV0ID0gUkVHX05PTUFUQ0g7CisJICBnb3RvIGZy ZWVfcmV0dXJuOworCX0KKyAgICB9CisgIHJlX2ZyZWUgKG1jdHgtPnN0YXRlX2xvZyk7Cisg IG1jdHgtPnN0YXRlX2xvZyA9IHNpZnRlZF9zdGF0ZXM7CisgIHNpZnRlZF9zdGF0ZXMgPSBO VUxMOworICBtY3R4LT5sYXN0X25vZGUgPSBoYWx0X25vZGU7CisgIG1jdHgtPm1hdGNoX2xh c3QgPSBtYXRjaF9sYXN0OworICByZXQgPSBSRUdfTk9FUlJPUjsKKyBmcmVlX3JldHVybjoK KyAgcmVfZnJlZSAoc2lmdGVkX3N0YXRlcyk7CisgIHJlX2ZyZWUgKGxpbV9zdGF0ZXMpOwor ICByZXR1cm4gcmV0OworfQorCisvKiBBY3F1aXJlIGFuIGluaXRpYWwgc3RhdGUgYW5kIHJl dHVybiBpdC4KKyAgIFdlIG11c3Qgc2VsZWN0IGFwcHJvcHJpYXRlIGluaXRpYWwgc3RhdGUg ZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LAorICAgc2luY2UgaW5pdGlhbCBzdGF0ZXMgbWF5 IGhhdmUgY29uc3RyYWludHMgbGlrZSAiXDwiLCAiXiIsIGV0Yy4uICAqLworCitzdGF0aWMg aW5saW5lIHJlX2RmYXN0YXRlX3QgKgorX19hdHRyaWJ1dGVfXyAoKGFsd2F5c19pbmxpbmUp KQorYWNxdWlyZV9pbml0X3N0YXRlX2NvbnRleHQgKHJlZ19lcnJjb2RlX3QgKmVyciwgY29u c3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJICAgIElkeCBpZHgpCit7CisgIGNv bnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGlmIChkZmEtPmluaXRf c3RhdGUtPmhhc19jb25zdHJhaW50KQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCBjb250 ZXh0OworICAgICAgY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0ICgmbWN0eC0+aW5w dXQsIGlkeCAtIDEsIG1jdHgtPmVmbGFncyk7CisgICAgICBpZiAoSVNfV09SRF9DT05URVhU IChjb250ZXh0KSkKKwlyZXR1cm4gZGZhLT5pbml0X3N0YXRlX3dvcmQ7CisgICAgICBlbHNl IGlmIChJU19PUkRJTkFSWV9DT05URVhUIChjb250ZXh0KSkKKwlyZXR1cm4gZGZhLT5pbml0 X3N0YXRlOworICAgICAgZWxzZSBpZiAoSVNfQkVHQlVGX0NPTlRFWFQgKGNvbnRleHQpICYm IElTX05FV0xJTkVfQ09OVEVYVCAoY29udGV4dCkpCisJcmV0dXJuIGRmYS0+aW5pdF9zdGF0 ZV9iZWdidWY7CisgICAgICBlbHNlIGlmIChJU19ORVdMSU5FX0NPTlRFWFQgKGNvbnRleHQp KQorCXJldHVybiBkZmEtPmluaXRfc3RhdGVfbmw7CisgICAgICBlbHNlIGlmIChJU19CRUdC VUZfQ09OVEVYVCAoY29udGV4dCkpCisJeworCSAgLyogSXQgaXMgcmVsYXRpdmVseSByYXJl IGNhc2UsIHRoZW4gY2FsY3VsYXRlIG9uIGRlbWFuZC4gICovCisJICByZXR1cm4gcmVfYWNx dWlyZV9zdGF0ZV9jb250ZXh0IChlcnIsIGRmYSwKKwkJCQkJICAgZGZhLT5pbml0X3N0YXRl LT5lbnRyYW5jZV9ub2RlcywKKwkJCQkJICAgY29udGV4dCk7CisJfQorICAgICAgZWxzZQor CS8qIE11c3Qgbm90IGhhcHBlbj8gICovCisJcmV0dXJuIGRmYS0+aW5pdF9zdGF0ZTsKKyAg ICB9CisgIGVsc2UKKyAgICByZXR1cm4gZGZhLT5pbml0X3N0YXRlOworfQorCisvKiBDaGVj ayB3aGV0aGVyIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggaW5wdXQgc3RyaW5nIElO UFVUIG9yIG5vdCwKKyAgIGFuZCByZXR1cm4gdGhlIGluZGV4IHdoZXJlIHRoZSBtYXRjaGlu ZyBlbmQuICBSZXR1cm4gLTEgaWYKKyAgIHRoZXJlIGlzIG5vIG1hdGNoLCBhbmQgcmV0dXJu IC0yIGluIGNhc2Ugb2YgYW4gZXJyb3IuCisgICBGTF9MT05HRVNUX01BVENIIG1lYW5zIHdl IHdhbnQgdGhlIFBPU0lYIGxvbmdlc3QgbWF0Y2hpbmcuCisgICBJZiBQX01BVENIX0ZJUlNU IGlzIG5vdCBOVUxMLCBhbmQgdGhlIG1hdGNoIGZhaWxzLCBpdCBpcyBzZXQgdG8gdGhlCisg ICBuZXh0IHBsYWNlIHdoZXJlIHdlIG1heSB3YW50IHRvIHRyeSBtYXRjaGluZy4KKyAgIE5v dGUgdGhhdCB0aGUgbWF0Y2hlciBhc3N1bWVzIHRoYXQgdGhlIG1hdGNoaW5nIHN0YXJ0cyBm cm9tIHRoZSBjdXJyZW50CisgICBpbmRleCBvZiB0aGUgYnVmZmVyLiAgKi8KKworc3RhdGlj IElkeAorX19hdHRyaWJ1dGVfd2Fybl91bnVzZWRfcmVzdWx0X18KK2NoZWNrX21hdGNoaW5n IChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGJvb2wgZmxfbG9uZ2VzdF9tYXRjaCwKKwkJ SWR4ICpwX21hdGNoX2ZpcnN0KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0g bWN0eC0+ZGZhOworICByZWdfZXJyY29kZV90IGVycjsKKyAgSWR4IG1hdGNoID0gMDsKKyAg SWR4IG1hdGNoX2xhc3QgPSAtMTsKKyAgSWR4IGN1cl9zdHJfaWR4ID0gcmVfc3RyaW5nX2N1 cl9pZHggKCZtY3R4LT5pbnB1dCk7CisgIHJlX2RmYXN0YXRlX3QgKmN1cl9zdGF0ZTsKKyAg Ym9vbCBhdF9pbml0X3N0YXRlID0gcF9tYXRjaF9maXJzdCAhPSBOVUxMOworICBJZHggbmV4 dF9zdGFydF9pZHggPSBjdXJfc3RyX2lkeDsKKworICBlcnIgPSBSRUdfTk9FUlJPUjsKKyAg Y3VyX3N0YXRlID0gYWNxdWlyZV9pbml0X3N0YXRlX2NvbnRleHQgKCZlcnIsIG1jdHgsIGN1 cl9zdHJfaWR4KTsKKyAgLyogQW4gaW5pdGlhbCBzdGF0ZSBtdXN0IG5vdCBiZSBOVUxMIChp bnZhbGlkKS4gICovCisgIGlmIChCRSAoY3VyX3N0YXRlID09IE5VTEwsIDApKQorICAgIHsK KyAgICAgIGFzc2VydCAoZXJyID09IFJFR19FU1BBQ0UpOworICAgICAgcmV0dXJuIC0yOwor ICAgIH0KKworICBpZiAobWN0eC0+c3RhdGVfbG9nICE9IE5VTEwpCisgICAgeworICAgICAg bWN0eC0+c3RhdGVfbG9nW2N1cl9zdHJfaWR4XSA9IGN1cl9zdGF0ZTsKKworICAgICAgLyog Q2hlY2sgT1BfT1BFTl9TVUJFWFAgaW4gdGhlIGluaXRpYWwgc3RhdGUgaW4gY2FzZSB0aGF0 IHdlIHVzZSB0aGVtCisJIGxhdGVyLiAgRS5nLiBQcm9jZXNzaW5nIGJhY2sgcmVmZXJlbmNl cy4gICovCisgICAgICBpZiAoQkUgKGRmYS0+bmJhY2tyZWYsIDApKQorCXsKKwkgIGF0X2lu aXRfc3RhdGUgPSBmYWxzZTsKKwkgIGVyciA9IGNoZWNrX3N1YmV4cF9tYXRjaGluZ190b3Ag KG1jdHgsICZjdXJfc3RhdGUtPm5vZGVzLCAwKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19O T0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKworCSAgaWYgKGN1cl9zdGF0ZS0+aGFz X2JhY2tyZWYpCisJICAgIHsKKwkgICAgICBlcnIgPSB0cmFuc2l0X3N0YXRlX2JrcmVmICht Y3R4LCAmY3VyX3N0YXRlLT5ub2Rlcyk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05P RVJST1IsIDApKQorCQlyZXR1cm4gZXJyOworCSAgICB9CisJfQorICAgIH0KKworICAvKiBJ ZiB0aGUgUkUgYWNjZXB0cyBOVUxMIHN0cmluZy4gICovCisgIGlmIChCRSAoY3VyX3N0YXRl LT5oYWx0LCAwKSkKKyAgICB7CisgICAgICBpZiAoIWN1cl9zdGF0ZS0+aGFzX2NvbnN0cmFp bnQKKwkgIHx8IGNoZWNrX2hhbHRfc3RhdGVfY29udGV4dCAobWN0eCwgY3VyX3N0YXRlLCBj dXJfc3RyX2lkeCkpCisJeworCSAgaWYgKCFmbF9sb25nZXN0X21hdGNoKQorCSAgICByZXR1 cm4gY3VyX3N0cl9pZHg7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBtYXRjaF9sYXN0ID0g Y3VyX3N0cl9pZHg7CisJICAgICAgbWF0Y2ggPSAxOworCSAgICB9CisJfQorICAgIH0KKwor ICB3aGlsZSAoIXJlX3N0cmluZ19lb2kgKCZtY3R4LT5pbnB1dCkpCisgICAgeworICAgICAg cmVfZGZhc3RhdGVfdCAqb2xkX3N0YXRlID0gY3VyX3N0YXRlOworICAgICAgSWR4IG5leHRf Y2hhcl9pZHggPSByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KSArIDE7CisKKyAg ICAgIGlmICgoQkUgKG5leHRfY2hhcl9pZHggPj0gbWN0eC0+aW5wdXQuYnVmc19sZW4sIDAp CisJICAgJiYgbWN0eC0+aW5wdXQuYnVmc19sZW4gPCBtY3R4LT5pbnB1dC5sZW4pCisJICB8 fCAoQkUgKG5leHRfY2hhcl9pZHggPj0gbWN0eC0+aW5wdXQudmFsaWRfbGVuLCAwKQorCSAg ICAgICYmIG1jdHgtPmlucHV0LnZhbGlkX2xlbiA8IG1jdHgtPmlucHV0LmxlbikpCisJewor CSAgZXJyID0gZXh0ZW5kX2J1ZmZlcnMgKG1jdHgsIG5leHRfY2hhcl9pZHggKyAxKTsKKwkg IGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIGFzc2Vy dCAoZXJyID09IFJFR19FU1BBQ0UpOworCSAgICAgIHJldHVybiAtMjsKKwkgICAgfQorCX0K KworICAgICAgY3VyX3N0YXRlID0gdHJhbnNpdF9zdGF0ZSAoJmVyciwgbWN0eCwgY3VyX3N0 YXRlKTsKKyAgICAgIGlmIChtY3R4LT5zdGF0ZV9sb2cgIT0gTlVMTCkKKwljdXJfc3RhdGUg PSBtZXJnZV9zdGF0ZV93aXRoX2xvZyAoJmVyciwgbWN0eCwgY3VyX3N0YXRlKTsKKworICAg ICAgaWYgKGN1cl9zdGF0ZSA9PSBOVUxMKQorCXsKKwkgIC8qIFJlYWNoZWQgdGhlIGludmFs aWQgc3RhdGUgb3IgYW4gZXJyb3IuICBUcnkgdG8gcmVjb3ZlciBhIHZhbGlkCisJICAgICBz dGF0ZSB1c2luZyB0aGUgc3RhdGUgbG9nLCBpZiBhdmFpbGFibGUgYW5kIGlmIHdlIGhhdmUg bm90CisJICAgICBhbHJlYWR5IGZvdW5kIGEgdmFsaWQgKGV2ZW4gaWYgbm90IHRoZSBsb25n ZXN0KSBtYXRjaC4gICovCisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJ ICAgIHJldHVybiAtMjsKKworCSAgaWYgKG1jdHgtPnN0YXRlX2xvZyA9PSBOVUxMCisJICAg ICAgfHwgKG1hdGNoICYmICFmbF9sb25nZXN0X21hdGNoKQorCSAgICAgIHx8IChjdXJfc3Rh dGUgPSBmaW5kX3JlY292ZXJfc3RhdGUgKCZlcnIsIG1jdHgpKSA9PSBOVUxMKQorCSAgICBi cmVhazsKKwl9CisKKyAgICAgIGlmIChCRSAoYXRfaW5pdF9zdGF0ZSwgMCkpCisJeworCSAg aWYgKG9sZF9zdGF0ZSA9PSBjdXJfc3RhdGUpCisJICAgIG5leHRfc3RhcnRfaWR4ID0gbmV4 dF9jaGFyX2lkeDsKKwkgIGVsc2UKKwkgICAgYXRfaW5pdF9zdGF0ZSA9IGZhbHNlOworCX0K KworICAgICAgaWYgKGN1cl9zdGF0ZS0+aGFsdCkKKwl7CisJICAvKiBSZWFjaGVkIGEgaGFs dCBzdGF0ZS4KKwkgICAgIENoZWNrIHRoZSBoYWx0IHN0YXRlIGNhbiBzYXRpc2Z5IHRoZSBj dXJyZW50IGNvbnRleHQuICAqLworCSAgaWYgKCFjdXJfc3RhdGUtPmhhc19jb25zdHJhaW50 CisJICAgICAgfHwgY2hlY2tfaGFsdF9zdGF0ZV9jb250ZXh0IChtY3R4LCBjdXJfc3RhdGUs CisJCQkJCSAgIHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpKSkKKwkgICAgewor CSAgICAgIC8qIFdlIGZvdW5kIGFuIGFwcHJvcHJpYXRlIGhhbHQgc3RhdGUuICAqLworCSAg ICAgIG1hdGNoX2xhc3QgPSByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KTsKKwkg ICAgICBtYXRjaCA9IDE7CisKKwkgICAgICAvKiBXZSBmb3VuZCBhIG1hdGNoLCBkbyBub3Qg bW9kaWZ5IG1hdGNoX2ZpcnN0IGJlbG93LiAgKi8KKwkgICAgICBwX21hdGNoX2ZpcnN0ID0g TlVMTDsKKwkgICAgICBpZiAoIWZsX2xvbmdlc3RfbWF0Y2gpCisJCWJyZWFrOworCSAgICB9 CisJfQorICAgIH0KKworICBpZiAocF9tYXRjaF9maXJzdCkKKyAgICAqcF9tYXRjaF9maXJz dCArPSBuZXh0X3N0YXJ0X2lkeDsKKworICByZXR1cm4gbWF0Y2hfbGFzdDsKK30KKworLyog Q2hlY2sgTk9ERSBtYXRjaCB0aGUgY3VycmVudCBjb250ZXh0LiAgKi8KKworc3RhdGljIGJv b2wKK2NoZWNrX2hhbHRfbm9kZV9jb250ZXh0IChjb25zdCByZV9kZmFfdCAqZGZhLCBJZHgg bm9kZSwgdW5zaWduZWQgaW50IGNvbnRleHQpCit7CisgIHJlX3Rva2VuX3R5cGVfdCB0eXBl ID0gZGZhLT5ub2Rlc1tub2RlXS50eXBlOworICB1bnNpZ25lZCBpbnQgY29uc3RyYWludCA9 IGRmYS0+bm9kZXNbbm9kZV0uY29uc3RyYWludDsKKyAgaWYgKHR5cGUgIT0gRU5EX09GX1JF KQorICAgIHJldHVybiBmYWxzZTsKKyAgaWYgKCFjb25zdHJhaW50KQorICAgIHJldHVybiB0 cnVlOworICBpZiAoTk9UX1NBVElTRllfTkVYVF9DT05TVFJBSU5UIChjb25zdHJhaW50LCBj b250ZXh0KSkKKyAgICByZXR1cm4gZmFsc2U7CisgIHJldHVybiB0cnVlOworfQorCisvKiBD aGVjayB0aGUgaGFsdCBzdGF0ZSBTVEFURSBtYXRjaCB0aGUgY3VycmVudCBjb250ZXh0Lgor ICAgUmV0dXJuIDAgaWYgbm90IG1hdGNoLCBpZiB0aGUgbm9kZSwgU1RBVEUgaGFzLCBpcyBh IGhhbHQgbm9kZSBhbmQKKyAgIG1hdGNoIHRoZSBjb250ZXh0LCByZXR1cm4gdGhlIG5vZGUu ICAqLworCitzdGF0aWMgSWR4CitjaGVja19oYWx0X3N0YXRlX2NvbnRleHQgKGNvbnN0IHJl X21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCSAgY29uc3QgcmVfZGZhc3RhdGVfdCAqc3Rh dGUsIElkeCBpZHgpCit7CisgIElkeCBpOworICB1bnNpZ25lZCBpbnQgY29udGV4dDsKKyNp ZmRlZiBERUJVRworICBhc3NlcnQgKHN0YXRlLT5oYWx0KTsKKyNlbmRpZgorICBjb250ZXh0 ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwgaWR4LCBtY3R4LT5lZmxh Z3MpOworICBmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPm5vZGVzLm5lbGVtOyArK2kpCisgICAg aWYgKGNoZWNrX2hhbHRfbm9kZV9jb250ZXh0IChtY3R4LT5kZmEsIHN0YXRlLT5ub2Rlcy5l bGVtc1tpXSwgY29udGV4dCkpCisgICAgICByZXR1cm4gc3RhdGUtPm5vZGVzLmVsZW1zW2ld OworICByZXR1cm4gMDsKK30KKworLyogQ29tcHV0ZSB0aGUgbmV4dCBub2RlIHRvIHdoaWNo ICJORkEiIHRyYW5zaXQgZnJvbSBOT0RFKCJORkEiIGlzIGEgTkZBCisgICBjb3JyZXNwb25k aW5nIHRvIHRoZSBERkEpLgorICAgUmV0dXJuIHRoZSBkZXN0aW5hdGlvbiBub2RlLCBhbmQg dXBkYXRlIEVQU19WSUFfTk9ERVM7CisgICByZXR1cm4gLTEgaW4gY2FzZSBvZiBlcnJvcnMu ICAqLworCitzdGF0aWMgSWR4Citwcm9jZWVkX25leHRfbm9kZSAoY29uc3QgcmVfbWF0Y2hf Y29udGV4dF90ICptY3R4LCBJZHggbnJlZ3MsIHJlZ21hdGNoX3QgKnJlZ3MsCisJCSAgIElk eCAqcGlkeCwgSWR4IG5vZGUsIHJlX25vZGVfc2V0ICplcHNfdmlhX25vZGVzLAorCQkgICBz dHJ1Y3QgcmVfZmFpbF9zdGFja190ICpmcykKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0 IGRmYSA9IG1jdHgtPmRmYTsKKyAgSWR4IGk7CisgIGJvb2wgb2s7CisgIGlmIChJU19FUFNJ TE9OX05PREUgKGRmYS0+bm9kZXNbbm9kZV0udHlwZSkpCisgICAgeworICAgICAgcmVfbm9k ZV9zZXQgKmN1cl9ub2RlcyA9ICZtY3R4LT5zdGF0ZV9sb2dbKnBpZHhdLT5ub2RlczsKKyAg ICAgIHJlX25vZGVfc2V0ICplZGVzdHMgPSAmZGZhLT5lZGVzdHNbbm9kZV07CisgICAgICBJ ZHggZGVzdF9ub2RlOworICAgICAgb2sgPSByZV9ub2RlX3NldF9pbnNlcnQgKGVwc192aWFf bm9kZXMsIG5vZGUpOworICAgICAgaWYgKEJFICghIG9rLCAwKSkKKwlyZXR1cm4gLTI7Cisg ICAgICAvKiBQaWNrIHVwIGEgdmFsaWQgZGVzdGluYXRpb24sIG9yIHJldHVybiAtMSBpZiBu b25lCisJIGlzIGZvdW5kLiAgKi8KKyAgICAgIGZvciAoZGVzdF9ub2RlID0gLTEsIGkgPSAw OyBpIDwgZWRlc3RzLT5uZWxlbTsgKytpKQorCXsKKwkgIElkeCBjYW5kaWRhdGUgPSBlZGVz dHMtPmVsZW1zW2ldOworCSAgaWYgKCFyZV9ub2RlX3NldF9jb250YWlucyAoY3VyX25vZGVz LCBjYW5kaWRhdGUpKQorCSAgICBjb250aW51ZTsKKyAgICAgICAgICBpZiAoZGVzdF9ub2Rl ID09IC0xKQorCSAgICBkZXN0X25vZGUgPSBjYW5kaWRhdGU7CisKKwkgIGVsc2UKKwkgICAg eworCSAgICAgIC8qIEluIG9yZGVyIHRvIGF2b2lkIGluZmluaXRlIGxvb3AgbGlrZSAiKGEq KSoiLCByZXR1cm4gdGhlIHNlY29uZAorCQkgZXBzaWxvbi10cmFuc2l0aW9uIGlmIHRoZSBm aXJzdCB3YXMgYWxyZWFkeSBjb25zaWRlcmVkLiAgKi8KKwkgICAgICBpZiAocmVfbm9kZV9z ZXRfY29udGFpbnMgKGVwc192aWFfbm9kZXMsIGRlc3Rfbm9kZSkpCisJCXJldHVybiBjYW5k aWRhdGU7CisKKwkgICAgICAvKiBPdGhlcndpc2UsIHB1c2ggdGhlIHNlY29uZCBlcHNpbG9u LXRyYW5zaXRpb24gb24gdGhlIGZhaWwgc3RhY2suICAqLworCSAgICAgIGVsc2UgaWYgKGZz ICE9IE5VTEwKKwkJICAgICAgICYmIHB1c2hfZmFpbF9zdGFjayAoZnMsICpwaWR4LCBjYW5k aWRhdGUsIG5yZWdzLCByZWdzLAorCQkJCQkgICBlcHNfdmlhX25vZGVzKSkKKwkJcmV0dXJu IC0yOworCisJICAgICAgLyogV2Uga25vdyB3ZSBhcmUgZ29pbmcgdG8gZXhpdC4gICovCisJ ICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gZGVzdF9ub2RlOworICAg IH0KKyAgZWxzZQorICAgIHsKKyAgICAgIElkeCBuYWNjZXB0ZWQgPSAwOworICAgICAgcmVf dG9rZW5fdHlwZV90IHR5cGUgPSBkZmEtPm5vZGVzW25vZGVdLnR5cGU7CisKKyNpZmRlZiBS RV9FTkFCTEVfSTE4TgorICAgICAgaWYgKGRmYS0+bm9kZXNbbm9kZV0uYWNjZXB0X21iKQor CW5hY2NlcHRlZCA9IGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChkZmEsIG5vZGUsICZtY3R4 LT5pbnB1dCwgKnBpZHgpOworICAgICAgZWxzZQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThO ICovCisgICAgICBpZiAodHlwZSA9PSBPUF9CQUNLX1JFRikKKwl7CisJICBJZHggc3ViZXhw X2lkeCA9IGRmYS0+bm9kZXNbbm9kZV0ub3ByLmlkeCArIDE7CisJICBuYWNjZXB0ZWQgPSBy ZWdzW3N1YmV4cF9pZHhdLnJtX2VvIC0gcmVnc1tzdWJleHBfaWR4XS5ybV9zbzsKKwkgIGlm IChmcyAhPSBOVUxMKQorCSAgICB7CisJICAgICAgaWYgKHJlZ3Nbc3ViZXhwX2lkeF0ucm1f c28gPT0gLTEgfHwgcmVnc1tzdWJleHBfaWR4XS5ybV9lbyA9PSAtMSkKKwkJcmV0dXJuIC0x OworCSAgICAgIGVsc2UgaWYgKG5hY2NlcHRlZCkKKwkJeworCQkgIGNoYXIgKmJ1ZiA9IChj aGFyICopIHJlX3N0cmluZ19nZXRfYnVmZmVyICgmbWN0eC0+aW5wdXQpOworCQkgIGlmICht ZW1jbXAgKGJ1ZiArIHJlZ3Nbc3ViZXhwX2lkeF0ucm1fc28sIGJ1ZiArICpwaWR4LAorCQkJ ICAgICAgbmFjY2VwdGVkKSAhPSAwKQorCQkgICAgcmV0dXJuIC0xOworCQl9CisJICAgIH0K KworCSAgaWYgKG5hY2NlcHRlZCA9PSAwKQorCSAgICB7CisJICAgICAgSWR4IGRlc3Rfbm9k ZTsKKwkgICAgICBvayA9IHJlX25vZGVfc2V0X2luc2VydCAoZXBzX3ZpYV9ub2Rlcywgbm9k ZSk7CisJICAgICAgaWYgKEJFICghIG9rLCAwKSkKKwkJcmV0dXJuIC0yOworCSAgICAgIGRl c3Rfbm9kZSA9IGRmYS0+ZWRlc3RzW25vZGVdLmVsZW1zWzBdOworCSAgICAgIGlmIChyZV9u b2RlX3NldF9jb250YWlucyAoJm1jdHgtPnN0YXRlX2xvZ1sqcGlkeF0tPm5vZGVzLAorCQkJ CQlkZXN0X25vZGUpKQorCQlyZXR1cm4gZGVzdF9ub2RlOworCSAgICB9CisJfQorCisgICAg ICBpZiAobmFjY2VwdGVkICE9IDAKKwkgIHx8IGNoZWNrX25vZGVfYWNjZXB0IChtY3R4LCBk ZmEtPm5vZGVzICsgbm9kZSwgKnBpZHgpKQorCXsKKwkgIElkeCBkZXN0X25vZGUgPSBkZmEt Pm5leHRzW25vZGVdOworCSAgKnBpZHggPSAobmFjY2VwdGVkID09IDApID8gKnBpZHggKyAx IDogKnBpZHggKyBuYWNjZXB0ZWQ7CisJICBpZiAoZnMgJiYgKCpwaWR4ID4gbWN0eC0+bWF0 Y2hfbGFzdCB8fCBtY3R4LT5zdGF0ZV9sb2dbKnBpZHhdID09IE5VTEwKKwkJICAgICB8fCAh cmVfbm9kZV9zZXRfY29udGFpbnMgKCZtY3R4LT5zdGF0ZV9sb2dbKnBpZHhdLT5ub2RlcywK KwkJCQkJICAgICAgIGRlc3Rfbm9kZSkpKQorCSAgICByZXR1cm4gLTE7CisJICByZV9ub2Rl X3NldF9lbXB0eSAoZXBzX3ZpYV9ub2Rlcyk7CisJICByZXR1cm4gZGVzdF9ub2RlOworCX0K KyAgICB9CisgIHJldHVybiAtMTsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK19fYXR0 cmlidXRlX3dhcm5fdW51c2VkX3Jlc3VsdF9fCitwdXNoX2ZhaWxfc3RhY2sgKHN0cnVjdCBy ZV9mYWlsX3N0YWNrX3QgKmZzLCBJZHggc3RyX2lkeCwgSWR4IGRlc3Rfbm9kZSwKKwkJIElk eCBucmVncywgcmVnbWF0Y2hfdCAqcmVncywgcmVfbm9kZV9zZXQgKmVwc192aWFfbm9kZXMp Cit7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBJZHggbnVtID0gZnMtPm51bSsrOworICBp ZiAoZnMtPm51bSA9PSBmcy0+YWxsb2MpCisgICAgeworICAgICAgc3RydWN0IHJlX2ZhaWxf c3RhY2tfZW50X3QgKm5ld19hcnJheTsKKyAgICAgIG5ld19hcnJheSA9IHJlX3JlYWxsb2Mg KGZzLT5zdGFjaywgc3RydWN0IHJlX2ZhaWxfc3RhY2tfZW50X3QsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmcy0+YWxsb2MgKiAyKTsKKyAgICAgIGlmIChuZXdfYXJyYXkg PT0gTlVMTCkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIGZzLT5hbGxvYyAqPSAyOwor ICAgICAgZnMtPnN0YWNrID0gbmV3X2FycmF5OworICAgIH0KKyAgZnMtPnN0YWNrW251bV0u aWR4ID0gc3RyX2lkeDsKKyAgZnMtPnN0YWNrW251bV0ubm9kZSA9IGRlc3Rfbm9kZTsKKyAg ZnMtPnN0YWNrW251bV0ucmVncyA9IHJlX21hbGxvYyAocmVnbWF0Y2hfdCwgbnJlZ3MpOwor ICBpZiAoZnMtPnN0YWNrW251bV0ucmVncyA9PSBOVUxMKQorICAgIHJldHVybiBSRUdfRVNQ QUNFOworICBtZW1jcHkgKGZzLT5zdGFja1tudW1dLnJlZ3MsIHJlZ3MsIHNpemVvZiAocmVn bWF0Y2hfdCkgKiBucmVncyk7CisgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfY29weSAoJmZz LT5zdGFja1tudW1dLmVwc192aWFfbm9kZXMsIGVwc192aWFfbm9kZXMpOworICByZXR1cm4g ZXJyOworfQorCitzdGF0aWMgSWR4Citwb3BfZmFpbF9zdGFjayAoc3RydWN0IHJlX2ZhaWxf c3RhY2tfdCAqZnMsIElkeCAqcGlkeCwgSWR4IG5yZWdzLAorCQlyZWdtYXRjaF90ICpyZWdz LCByZV9ub2RlX3NldCAqZXBzX3ZpYV9ub2RlcykKK3sKKyAgSWR4IG51bSA9IC0tZnMtPm51 bTsKKyAgYXNzZXJ0IChudW0gPj0gMCk7CisgICpwaWR4ID0gZnMtPnN0YWNrW251bV0uaWR4 OworICBtZW1jcHkgKHJlZ3MsIGZzLT5zdGFja1tudW1dLnJlZ3MsIHNpemVvZiAocmVnbWF0 Y2hfdCkgKiBucmVncyk7CisgIHJlX25vZGVfc2V0X2ZyZWUgKGVwc192aWFfbm9kZXMpOwor ICByZV9mcmVlIChmcy0+c3RhY2tbbnVtXS5yZWdzKTsKKyAgKmVwc192aWFfbm9kZXMgPSBm cy0+c3RhY2tbbnVtXS5lcHNfdmlhX25vZGVzOworICByZXR1cm4gZnMtPnN0YWNrW251bV0u bm9kZTsKK30KKworLyogU2V0IHRoZSBwb3NpdGlvbnMgd2hlcmUgdGhlIHN1YmV4cHJlc3Np b25zIGFyZSBzdGFydHMvZW5kcyB0byByZWdpc3RlcnMKKyAgIFBNQVRDSC4KKyAgIE5vdGU6 IFdlIGFzc3VtZSB0aGF0IHBtYXRjaFswXSBpcyBhbHJlYWR5IHNldCwgYW5kCisgICBwbWF0 Y2hbaV0ucm1fc28gPT0gcG1hdGNoW2ldLnJtX2VvID09IC0xIGZvciAwIDwgaSA8IG5tYXRj aC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitfX2F0dHJpYnV0ZV93YXJuX3VudXNl ZF9yZXN1bHRfXworc2V0X3JlZ3MgKGNvbnN0IHJlZ2V4X3QgKnByZWcsIGNvbnN0IHJlX21h dGNoX2NvbnRleHRfdCAqbWN0eCwgc2l6ZV90IG5tYXRjaCwKKwkgIHJlZ21hdGNoX3QgKnBt YXRjaCwgYm9vbCBmbF9iYWNrdHJhY2spCit7CisgIGNvbnN0IHJlX2RmYV90ICpkZmEgPSBw cmVnLT5idWZmZXI7CisgIElkeCBpZHgsIGN1cl9ub2RlOworICByZV9ub2RlX3NldCBlcHNf dmlhX25vZGVzOworICBzdHJ1Y3QgcmVfZmFpbF9zdGFja190ICpmczsKKyAgc3RydWN0IHJl X2ZhaWxfc3RhY2tfdCBmc19ib2R5ID0geyAwLCAyLCBOVUxMIH07CisgIHJlZ21hdGNoX3Qg KnByZXZfaWR4X21hdGNoOworICBib29sIHByZXZfaWR4X21hdGNoX21hbGxvY2VkID0gZmFs c2U7CisKKyNpZmRlZiBERUJVRworICBhc3NlcnQgKG5tYXRjaCA+IDEpOworICBhc3NlcnQg KG1jdHgtPnN0YXRlX2xvZyAhPSBOVUxMKTsKKyNlbmRpZgorICBpZiAoZmxfYmFja3RyYWNr KQorICAgIHsKKyAgICAgIGZzID0gJmZzX2JvZHk7CisgICAgICBmcy0+c3RhY2sgPSByZV9t YWxsb2MgKHN0cnVjdCByZV9mYWlsX3N0YWNrX2VudF90LCBmcy0+YWxsb2MpOworICAgICAg aWYgKGZzLT5zdGFjayA9PSBOVUxMKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgIH0KKyAg ZWxzZQorICAgIGZzID0gTlVMTDsKKworICBjdXJfbm9kZSA9IGRmYS0+aW5pdF9ub2RlOwor ICByZV9ub2RlX3NldF9pbml0X2VtcHR5ICgmZXBzX3ZpYV9ub2Rlcyk7CisKKyAgaWYgKF9f bGliY191c2VfYWxsb2NhIChubWF0Y2ggKiBzaXplb2YgKHJlZ21hdGNoX3QpKSkKKyAgICBw cmV2X2lkeF9tYXRjaCA9IChyZWdtYXRjaF90ICopIGFsbG9jYSAobm1hdGNoICogc2l6ZW9m IChyZWdtYXRjaF90KSk7CisgIGVsc2UKKyAgICB7CisgICAgICBwcmV2X2lkeF9tYXRjaCA9 IHJlX21hbGxvYyAocmVnbWF0Y2hfdCwgbm1hdGNoKTsKKyAgICAgIGlmIChwcmV2X2lkeF9t YXRjaCA9PSBOVUxMKQorCXsKKwkgIGZyZWVfZmFpbF9zdGFja19yZXR1cm4gKGZzKTsKKwkg IHJldHVybiBSRUdfRVNQQUNFOworCX0KKyAgICAgIHByZXZfaWR4X21hdGNoX21hbGxvY2Vk ID0gdHJ1ZTsKKyAgICB9CisgIG1lbWNweSAocHJldl9pZHhfbWF0Y2gsIHBtYXRjaCwgc2l6 ZW9mIChyZWdtYXRjaF90KSAqIG5tYXRjaCk7CisKKyAgZm9yIChpZHggPSBwbWF0Y2hbMF0u cm1fc287IGlkeCA8PSBwbWF0Y2hbMF0ucm1fZW8gOykKKyAgICB7CisgICAgICB1cGRhdGVf cmVncyAoZGZhLCBwbWF0Y2gsIHByZXZfaWR4X21hdGNoLCBjdXJfbm9kZSwgaWR4LCBubWF0 Y2gpOworCisgICAgICBpZiAoaWR4ID09IHBtYXRjaFswXS5ybV9lbyAmJiBjdXJfbm9kZSA9 PSBtY3R4LT5sYXN0X25vZGUpCisJeworCSAgSWR4IHJlZ19pZHg7CisJICBpZiAoZnMpCisJ ICAgIHsKKwkgICAgICBmb3IgKHJlZ19pZHggPSAwOyByZWdfaWR4IDwgbm1hdGNoOyArK3Jl Z19pZHgpCisJCWlmIChwbWF0Y2hbcmVnX2lkeF0ucm1fc28gPiAtMSAmJiBwbWF0Y2hbcmVn X2lkeF0ucm1fZW8gPT0gLTEpCisJCSAgYnJlYWs7CisJICAgICAgaWYgKHJlZ19pZHggPT0g bm1hdGNoKQorCQl7CisJCSAgcmVfbm9kZV9zZXRfZnJlZSAoJmVwc192aWFfbm9kZXMpOwor CQkgIGlmIChwcmV2X2lkeF9tYXRjaF9tYWxsb2NlZCkKKwkJICAgIHJlX2ZyZWUgKHByZXZf aWR4X21hdGNoKTsKKwkJICByZXR1cm4gZnJlZV9mYWlsX3N0YWNrX3JldHVybiAoZnMpOwor CQl9CisJICAgICAgY3VyX25vZGUgPSBwb3BfZmFpbF9zdGFjayAoZnMsICZpZHgsIG5tYXRj aCwgcG1hdGNoLAorCQkJCQkgJmVwc192aWFfbm9kZXMpOworCSAgICB9CisJICBlbHNlCisJ ICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmZXBzX3ZpYV9ub2Rlcyk7CisJICAg ICAgaWYgKHByZXZfaWR4X21hdGNoX21hbGxvY2VkKQorCQlyZV9mcmVlIChwcmV2X2lkeF9t YXRjaCk7CisJICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworCSAgICB9CisJfQorCisgICAg ICAvKiBQcm9jZWVkIHRvIG5leHQgbm9kZS4gICovCisgICAgICBjdXJfbm9kZSA9IHByb2Nl ZWRfbmV4dF9ub2RlIChtY3R4LCBubWF0Y2gsIHBtYXRjaCwgJmlkeCwgY3VyX25vZGUsCisJ CQkJICAgICZlcHNfdmlhX25vZGVzLCBmcyk7CisKKyAgICAgIGlmIChCRSAoY3VyX25vZGUg PCAwLCAwKSkKKwl7CisJICBpZiAoQkUgKGN1cl9ub2RlID09IC0yLCAwKSkKKwkgICAgewor CSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZlcHNfdmlhX25vZGVzKTsKKwkgICAgICBpZiAo cHJldl9pZHhfbWF0Y2hfbWFsbG9jZWQpCisJCXJlX2ZyZWUgKHByZXZfaWR4X21hdGNoKTsK KwkgICAgICBmcmVlX2ZhaWxfc3RhY2tfcmV0dXJuIChmcyk7CisJICAgICAgcmV0dXJuIFJF R19FU1BBQ0U7CisJICAgIH0KKwkgIGlmIChmcykKKwkgICAgY3VyX25vZGUgPSBwb3BfZmFp bF9zdGFjayAoZnMsICZpZHgsIG5tYXRjaCwgcG1hdGNoLAorCQkJCSAgICAgICAmZXBzX3Zp YV9ub2Rlcyk7CisJICBlbHNlCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgm ZXBzX3ZpYV9ub2Rlcyk7CisJICAgICAgaWYgKHByZXZfaWR4X21hdGNoX21hbGxvY2VkKQor CQlyZV9mcmVlIChwcmV2X2lkeF9tYXRjaCk7CisJICAgICAgcmV0dXJuIFJFR19OT01BVENI OworCSAgICB9CisJfQorICAgIH0KKyAgcmVfbm9kZV9zZXRfZnJlZSAoJmVwc192aWFfbm9k ZXMpOworICBpZiAocHJldl9pZHhfbWF0Y2hfbWFsbG9jZWQpCisgICAgcmVfZnJlZSAocHJl dl9pZHhfbWF0Y2gpOworICByZXR1cm4gZnJlZV9mYWlsX3N0YWNrX3JldHVybiAoZnMpOwor fQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAorZnJlZV9mYWlsX3N0YWNrX3JldHVybiAoc3Ry dWN0IHJlX2ZhaWxfc3RhY2tfdCAqZnMpCit7CisgIGlmIChmcykKKyAgICB7CisgICAgICBJ ZHggZnNfaWR4OworICAgICAgZm9yIChmc19pZHggPSAwOyBmc19pZHggPCBmcy0+bnVtOyAr K2ZzX2lkeCkKKwl7CisJICByZV9ub2RlX3NldF9mcmVlICgmZnMtPnN0YWNrW2ZzX2lkeF0u ZXBzX3ZpYV9ub2Rlcyk7CisJICByZV9mcmVlIChmcy0+c3RhY2tbZnNfaWR4XS5yZWdzKTsK Kwl9CisgICAgICByZV9mcmVlIChmcy0+c3RhY2spOworICAgIH0KKyAgcmV0dXJuIFJFR19O T0VSUk9SOworfQorCitzdGF0aWMgdm9pZAordXBkYXRlX3JlZ3MgKGNvbnN0IHJlX2RmYV90 ICpkZmEsIHJlZ21hdGNoX3QgKnBtYXRjaCwKKwkgICAgIHJlZ21hdGNoX3QgKnByZXZfaWR4 X21hdGNoLCBJZHggY3VyX25vZGUsIElkeCBjdXJfaWR4LCBJZHggbm1hdGNoKQoreworICBp bnQgdHlwZSA9IGRmYS0+bm9kZXNbY3VyX25vZGVdLnR5cGU7CisgIGlmICh0eXBlID09IE9Q X09QRU5fU1VCRVhQKQorICAgIHsKKyAgICAgIElkeCByZWdfbnVtID0gZGZhLT5ub2Rlc1tj dXJfbm9kZV0ub3ByLmlkeCArIDE7CisKKyAgICAgIC8qIFdlIGFyZSBhdCB0aGUgZmlyc3Qg bm9kZSBvZiB0aGlzIHN1YiBleHByZXNzaW9uLiAgKi8KKyAgICAgIGlmIChyZWdfbnVtIDwg bm1hdGNoKQorCXsKKwkgIHBtYXRjaFtyZWdfbnVtXS5ybV9zbyA9IGN1cl9pZHg7CisJICBw bWF0Y2hbcmVnX251bV0ucm1fZW8gPSAtMTsKKwl9CisgICAgfQorICBlbHNlIGlmICh0eXBl ID09IE9QX0NMT1NFX1NVQkVYUCkKKyAgICB7CisgICAgICBJZHggcmVnX251bSA9IGRmYS0+ bm9kZXNbY3VyX25vZGVdLm9wci5pZHggKyAxOworICAgICAgaWYgKHJlZ19udW0gPCBubWF0 Y2gpCisJeworCSAgLyogV2UgYXJlIGF0IHRoZSBsYXN0IG5vZGUgb2YgdGhpcyBzdWIgZXhw cmVzc2lvbi4gICovCisJICBpZiAocG1hdGNoW3JlZ19udW1dLnJtX3NvIDwgY3VyX2lkeCkK KwkgICAgeworCSAgICAgIHBtYXRjaFtyZWdfbnVtXS5ybV9lbyA9IGN1cl9pZHg7CisJICAg ICAgLyogVGhpcyBpcyBhIG5vbi1lbXB0eSBtYXRjaCBvciB3ZSBhcmUgbm90IGluc2lkZSBh biBvcHRpb25hbAorCQkgc3ViZXhwcmVzc2lvbi4gIEFjY2VwdCB0aGlzIHJpZ2h0IGF3YXku ICAqLworCSAgICAgIG1lbWNweSAocHJldl9pZHhfbWF0Y2gsIHBtYXRjaCwgc2l6ZW9mIChy ZWdtYXRjaF90KSAqIG5tYXRjaCk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAg IGlmIChkZmEtPm5vZGVzW2N1cl9ub2RlXS5vcHRfc3ViZXhwCisJCSAgJiYgcHJldl9pZHhf bWF0Y2hbcmVnX251bV0ucm1fc28gIT0gLTEpCisJCS8qIFdlIHRyYW5zaXRlZCB0aHJvdWdo IGFuIGVtcHR5IG1hdGNoIGZvciBhbiBvcHRpb25hbAorCQkgICBzdWJleHByZXNzaW9uLCBs aWtlIChhPykqLCBhbmQgdGhpcyBpcyBub3QgdGhlIHN1YmV4cCdzCisJCSAgIGZpcnN0IG1h dGNoLiAgQ29weSBiYWNrIHRoZSBvbGQgY29udGVudCBvZiB0aGUgcmVnaXN0ZXJzCisJCSAg IHNvIHRoYXQgbWF0Y2hlcyBvZiBhbiBpbm5lciBzdWJleHByZXNzaW9uIGFyZSB1bmRvbmUg YXMKKwkJICAgd2VsbCwgbGlrZSBpbiAoKGE/KSkqLiAgKi8KKwkJbWVtY3B5IChwbWF0Y2gs IHByZXZfaWR4X21hdGNoLCBzaXplb2YgKHJlZ21hdGNoX3QpICogbm1hdGNoKTsKKwkgICAg ICBlbHNlCisJCS8qIFdlIGNvbXBsZXRlZCBhIHN1YmV4cHJlc3Npb24sIGJ1dCBpdCBtYXkg YmUgcGFydCBvZgorCQkgICBhbiBvcHRpb25hbCBvbmUsIHNvIGRvIG5vdCB1cGRhdGUgUFJF Vl9JRFhfTUFUQ0guICAqLworCQlwbWF0Y2hbcmVnX251bV0ucm1fZW8gPSBjdXJfaWR4Owor CSAgICB9CisJfQorICAgIH0KK30KKworLyogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIFNU QVRFX0xPRyBmcm9tIHRoZSBTQ1RYLT5sYXN0X3N0cl9pZHggdG8gMAorICAgYW5kIHNpZnQg dGhlIG5vZGVzIGluIGVhY2ggc3RhdGVzIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHJ1 bGVzLgorICAgVXBkYXRlZCBzdGF0ZV9sb2cgd2lsbCBiZSB3cm90ZSB0byBTVEFURV9MT0cu CisKKyAgIFJ1bGVzOiBXZSB0aHJvdyBhd2F5IHRoZSBOb2RlICdhJyBpbiB0aGUgU1RBVEVf TE9HW1NUUl9JRFhdIGlmLi4uCisgICAgIDEuIFdoZW4gU1RSX0lEWCA9PSBNQVRDSF9MQVNU KHRoZSBsYXN0IGluZGV4IGluIHRoZSBzdGF0ZV9sb2cpOgorCUlmICdhJyBpc24ndCB0aGUg TEFTVF9OT0RFIGFuZCAnYScgY2FuJ3QgZXBzaWxvbiB0cmFuc2l0IHRvCisJdGhlIExBU1Rf Tk9ERSwgd2UgdGhyb3cgYXdheSB0aGUgbm9kZSAnYScuCisgICAgIDIuIFdoZW4gMCA8PSBT VFJfSURYIDwgTUFUQ0hfTEFTVCBhbmQgJ2EnIGFjY2VwdHMKKwlzdHJpbmcgJ3MnIGFuZCB0 cmFuc2l0IHRvICdiJzoKKwlpLiBJZiAnYicgaXNuJ3QgaW4gdGhlIFNUQVRFX0xPR1tTVFJf SURYK3N0cmxlbigncycpXSwgd2UgdGhyb3cKKwkgICBhd2F5IHRoZSBub2RlICdhJy4KKwlp aS4gSWYgJ2InIGlzIGluIHRoZSBTVEFURV9MT0dbU1RSX0lEWCtzdHJsZW4oJ3MnKV0gYnV0 ICdiJyBpcworCSAgICB0aHJvd24gYXdheSwgd2UgdGhyb3cgYXdheSB0aGUgbm9kZSAnYScu CisgICAgIDMuIFdoZW4gMCA8PSBTVFJfSURYIDwgTUFUQ0hfTEFTVCBhbmQgJ2EnIGVwc2ls b24gdHJhbnNpdCB0byAnYic6CisJaS4gSWYgJ2InIGlzbid0IGluIHRoZSBTVEFURV9MT0db U1RSX0lEWF0sIHdlIHRocm93IGF3YXkgdGhlCisJICAgbm9kZSAnYScuCisJaWkuIElmICdi JyBpcyBpbiB0aGUgU1RBVEVfTE9HW1NUUl9JRFhdIGJ1dCAnYicgaXMgdGhyb3duIGF3YXks CisJICAgIHdlIHRocm93IGF3YXkgdGhlIG5vZGUgJ2EnLiAgKi8KKworI2RlZmluZSBTVEFU RV9OT0RFX0NPTlRBSU5TKHN0YXRlLG5vZGUpIFwKKyAgKChzdGF0ZSkgIT0gTlVMTCAmJiBy ZV9ub2RlX3NldF9jb250YWlucyAoJihzdGF0ZSktPm5vZGVzLCBub2RlKSkKKworc3RhdGlj IHJlZ19lcnJjb2RlX3QKK3NpZnRfc3RhdGVzX2JhY2t3YXJkIChjb25zdCByZV9tYXRjaF9j b250ZXh0X3QgKm1jdHgsIHJlX3NpZnRfY29udGV4dF90ICpzY3R4KQoreworICByZWdfZXJy Y29kZV90IGVycjsKKyAgaW50IG51bGxfY250ID0gMDsKKyAgSWR4IHN0cl9pZHggPSBzY3R4 LT5sYXN0X3N0cl9pZHg7CisgIHJlX25vZGVfc2V0IGN1cl9kZXN0OworCisjaWZkZWYgREVC VUcKKyAgYXNzZXJ0IChtY3R4LT5zdGF0ZV9sb2cgIT0gTlVMTCAmJiBtY3R4LT5zdGF0ZV9s b2dbc3RyX2lkeF0gIT0gTlVMTCk7CisjZW5kaWYKKworICAvKiBCdWlsZCBzaWZ0ZWQgc3Rh dGVfbG9nW3N0cl9pZHhdLiAgSXQgaGFzIHRoZSBub2RlcyB3aGljaCBjYW4gZXBzaWxvbgor ICAgICB0cmFuc2l0IHRvIHRoZSBsYXN0X25vZGUgYW5kIHRoZSBsYXN0X25vZGUgaXRzZWxm LiAgKi8KKyAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8xICgmY3VyX2Rlc3QsIHNjdHgtPmxh c3Rfbm9kZSk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1 cm4gZXJyOworICBlcnIgPSB1cGRhdGVfY3VyX3NpZnRlZF9zdGF0ZSAobWN0eCwgc2N0eCwg c3RyX2lkeCwgJmN1cl9kZXN0KTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDAp KQorICAgIGdvdG8gZnJlZV9yZXR1cm47CisKKyAgLyogVGhlbiBjaGVjayBlYWNoIHN0YXRl cyBpbiB0aGUgc3RhdGVfbG9nLiAgKi8KKyAgd2hpbGUgKHN0cl9pZHggPiAwKQorICAgIHsK KyAgICAgIC8qIFVwZGF0ZSBjb3VudGVycy4gICovCisgICAgICBudWxsX2NudCA9IChzY3R4 LT5zaWZ0ZWRfc3RhdGVzW3N0cl9pZHhdID09IE5VTEwpID8gbnVsbF9jbnQgKyAxIDogMDsK KyAgICAgIGlmIChudWxsX2NudCA+IG1jdHgtPm1heF9tYl9lbGVtX2xlbikKKwl7CisJICBt ZW1zZXQgKHNjdHgtPnNpZnRlZF9zdGF0ZXMsICdcMCcsCisJCSAgc2l6ZW9mIChyZV9kZmFz dGF0ZV90ICopICogc3RyX2lkeCk7CisJICByZV9ub2RlX3NldF9mcmVlICgmY3VyX2Rlc3Qp OworCSAgcmV0dXJuIFJFR19OT0VSUk9SOworCX0KKyAgICAgIHJlX25vZGVfc2V0X2VtcHR5 ICgmY3VyX2Rlc3QpOworICAgICAgLS1zdHJfaWR4OworCisgICAgICBpZiAobWN0eC0+c3Rh dGVfbG9nW3N0cl9pZHhdKQorCXsKKwkgIGVyciA9IGJ1aWxkX3NpZnRlZF9zdGF0ZXMgKG1j dHgsIHNjdHgsIHN0cl9pZHgsICZjdXJfZGVzdCk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdf Tk9FUlJPUiwgMCkpCisJICAgIGdvdG8gZnJlZV9yZXR1cm47CisJfQorCisgICAgICAvKiBB ZGQgYWxsIHRoZSBub2RlcyB3aGljaCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u czoKKwkgLSBJdCBjYW4gZXBzaWxvbiB0cmFuc2l0IHRvIGEgbm9kZSBpbiBDVVJfREVTVC4K KwkgLSBJdCBpcyBpbiBDVVJfU1JDLgorCSBBbmQgdXBkYXRlIHN0YXRlX2xvZy4gICovCisg ICAgICBlcnIgPSB1cGRhdGVfY3VyX3NpZnRlZF9zdGF0ZSAobWN0eCwgc2N0eCwgc3RyX2lk eCwgJmN1cl9kZXN0KTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkK Kwlnb3RvIGZyZWVfcmV0dXJuOworICAgIH0KKyAgZXJyID0gUkVHX05PRVJST1I7CisgZnJl ZV9yZXR1cm46CisgIHJlX25vZGVfc2V0X2ZyZWUgKCZjdXJfZGVzdCk7CisgIHJldHVybiBl cnI7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitfX2F0dHJpYnV0ZV93YXJuX3VudXNl ZF9yZXN1bHRfXworYnVpbGRfc2lmdGVkX3N0YXRlcyAoY29uc3QgcmVfbWF0Y2hfY29udGV4 dF90ICptY3R4LCByZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCwKKwkJICAgICBJZHggc3RyX2lk eCwgcmVfbm9kZV9zZXQgKmN1cl9kZXN0KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3Qg ZGZhID0gbWN0eC0+ZGZhOworICBjb25zdCByZV9ub2RlX3NldCAqY3VyX3NyYyA9ICZtY3R4 LT5zdGF0ZV9sb2dbc3RyX2lkeF0tPm5vbl9lcHNfbm9kZXM7CisgIElkeCBpOworCisgIC8q IFRoZW4gYnVpbGQgdGhlIG5leHQgc2lmdGVkIHN0YXRlLgorICAgICBXZSBidWlsZCB0aGUg bmV4dCBzaWZ0ZWQgc3RhdGUgb24gJ2N1cl9kZXN0JywgYW5kIHVwZGF0ZQorICAgICAnc2lm dGVkX3N0YXRlc1tzdHJfaWR4XScgd2l0aCAnY3VyX2Rlc3QnLgorICAgICBOb3RlOgorICAg ICAnY3VyX2Rlc3QnIGlzIHRoZSBzaWZ0ZWQgc3RhdGUgZnJvbSAnc3RhdGVfbG9nW3N0cl9p ZHggKyAxXScuCisgICAgICdjdXJfc3JjJyBwb2ludHMgdGhlIG5vZGVfc2V0IG9mIHRoZSBv bGQgJ3N0YXRlX2xvZ1tzdHJfaWR4XScKKyAgICAgKHdpdGggdGhlIGVwc2lsb24gbm9kZXMg cHJlLWZpbHRlcmVkIG91dCkuICAqLworICBmb3IgKGkgPSAwOyBpIDwgY3VyX3NyYy0+bmVs ZW07IGkrKykKKyAgICB7CisgICAgICBJZHggcHJldl9ub2RlID0gY3VyX3NyYy0+ZWxlbXNb aV07CisgICAgICBpbnQgbmFjY2VwdGVkID0gMDsKKyAgICAgIGJvb2wgb2s7CisKKyNpZmRl ZiBERUJVRworICAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBkZmEtPm5vZGVzW3ByZXZf bm9kZV0udHlwZTsKKyAgICAgIGFzc2VydCAoIUlTX0VQU0lMT05fTk9ERSAodHlwZSkpOwor I2VuZGlmCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIC8qIElmIHRoZSBub2RlIG1h eSBhY2NlcHQgIm11bHRpIGJ5dGUiLiAgKi8KKyAgICAgIGlmIChkZmEtPm5vZGVzW3ByZXZf bm9kZV0uYWNjZXB0X21iKQorCW5hY2NlcHRlZCA9IHNpZnRfc3RhdGVzX2l0ZXJfbWIgKG1j dHgsIHNjdHgsIHByZXZfbm9kZSwKKwkJCQkJIHN0cl9pZHgsIHNjdHgtPmxhc3Rfc3RyX2lk eCk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworICAgICAgLyogV2UgZG9uJ3Qg Y2hlY2sgYmFja3JlZmVyZW5jZXMgaGVyZS4KKwkgU2VlIHVwZGF0ZV9jdXJfc2lmdGVkX3N0 YXRlKCkuICAqLworICAgICAgaWYgKCFuYWNjZXB0ZWQKKwkgICYmIGNoZWNrX25vZGVfYWNj ZXB0IChtY3R4LCBkZmEtPm5vZGVzICsgcHJldl9ub2RlLCBzdHJfaWR4KQorCSAgJiYgU1RB VEVfTk9ERV9DT05UQUlOUyAoc2N0eC0+c2lmdGVkX3N0YXRlc1tzdHJfaWR4ICsgMV0sCisJ CQkJICBkZmEtPm5leHRzW3ByZXZfbm9kZV0pKQorCW5hY2NlcHRlZCA9IDE7CisKKyAgICAg IGlmIChuYWNjZXB0ZWQgPT0gMCkKKwljb250aW51ZTsKKworICAgICAgaWYgKHNjdHgtPmxp bWl0cy5uZWxlbSkKKwl7CisJICBJZHggdG9faWR4ID0gc3RyX2lkeCArIG5hY2NlcHRlZDsK KwkgIGlmIChjaGVja19kc3RfbGltaXRzIChtY3R4LCAmc2N0eC0+bGltaXRzLAorCQkJCWRm YS0+bmV4dHNbcHJldl9ub2RlXSwgdG9faWR4LAorCQkJCXByZXZfbm9kZSwgc3RyX2lkeCkp CisJICAgIGNvbnRpbnVlOworCX0KKyAgICAgIG9rID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChj dXJfZGVzdCwgcHJldl9ub2RlKTsKKyAgICAgIGlmIChCRSAoISBvaywgMCkpCisJcmV0dXJu IFJFR19FU1BBQ0U7CisgICAgfQorCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyog SGVscGVyIGZ1bmN0aW9ucy4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitjbGVhbl9z dGF0ZV9sb2dfaWZfbmVlZGVkIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIElkeCBuZXh0 X3N0YXRlX2xvZ19pZHgpCit7CisgIElkeCB0b3AgPSBtY3R4LT5zdGF0ZV9sb2dfdG9wOwor CisgIGlmICgobmV4dF9zdGF0ZV9sb2dfaWR4ID49IG1jdHgtPmlucHV0LmJ1ZnNfbGVuCisg ICAgICAgJiYgbWN0eC0+aW5wdXQuYnVmc19sZW4gPCBtY3R4LT5pbnB1dC5sZW4pCisgICAg ICB8fCAobmV4dF9zdGF0ZV9sb2dfaWR4ID49IG1jdHgtPmlucHV0LnZhbGlkX2xlbgorCSAg JiYgbWN0eC0+aW5wdXQudmFsaWRfbGVuIDwgbWN0eC0+aW5wdXQubGVuKSkKKyAgICB7Cisg ICAgICByZWdfZXJyY29kZV90IGVycjsKKyAgICAgIGVyciA9IGV4dGVuZF9idWZmZXJzICht Y3R4LCBuZXh0X3N0YXRlX2xvZ19pZHggKyAxKTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJF R19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gZXJyOworICAgIH0KKworICBpZiAodG9wIDwgbmV4 dF9zdGF0ZV9sb2dfaWR4KQorICAgIHsKKyAgICAgIG1lbXNldCAobWN0eC0+c3RhdGVfbG9n ICsgdG9wICsgMSwgJ1wwJywKKwkgICAgICBzaXplb2YgKHJlX2RmYXN0YXRlX3QgKikgKiAo bmV4dF9zdGF0ZV9sb2dfaWR4IC0gdG9wKSk7CisgICAgICBtY3R4LT5zdGF0ZV9sb2dfdG9w ID0gbmV4dF9zdGF0ZV9sb2dfaWR4OworICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOwor fQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAorbWVyZ2Vfc3RhdGVfYXJyYXkgKGNvbnN0IHJl X2RmYV90ICpkZmEsIHJlX2RmYXN0YXRlX3QgKipkc3QsCisJCSAgIHJlX2RmYXN0YXRlX3Qg KipzcmMsIElkeCBudW0pCit7CisgIElkeCBzdF9pZHg7CisgIHJlZ19lcnJjb2RlX3QgZXJy OworICBmb3IgKHN0X2lkeCA9IDA7IHN0X2lkeCA8IG51bTsgKytzdF9pZHgpCisgICAgewor ICAgICAgaWYgKGRzdFtzdF9pZHhdID09IE5VTEwpCisJZHN0W3N0X2lkeF0gPSBzcmNbc3Rf aWR4XTsKKyAgICAgIGVsc2UgaWYgKHNyY1tzdF9pZHhdICE9IE5VTEwpCisJeworCSAgcmVf bm9kZV9zZXQgbWVyZ2VkX3NldDsKKwkgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfdW5pb24g KCZtZXJnZWRfc2V0LCAmZHN0W3N0X2lkeF0tPm5vZGVzLAorCQkJCQkmc3JjW3N0X2lkeF0t Pm5vZGVzKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0 dXJuIGVycjsKKwkgIGRzdFtzdF9pZHhdID0gcmVfYWNxdWlyZV9zdGF0ZSAoJmVyciwgZGZh LCAmbWVyZ2VkX3NldCk7CisJICByZV9ub2RlX3NldF9mcmVlICgmbWVyZ2VkX3NldCk7CisJ ICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisJ fQorICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgcmVnX2VycmNv ZGVfdAordXBkYXRlX2N1cl9zaWZ0ZWRfc3RhdGUgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRf dCAqbWN0eCwKKwkJCSByZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCwgSWR4IHN0cl9pZHgsCisJ CQkgcmVfbm9kZV9zZXQgKmRlc3Rfbm9kZXMpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25z dCBkZmEgPSBtY3R4LT5kZmE7CisgIHJlZ19lcnJjb2RlX3QgZXJyID0gUkVHX05PRVJST1I7 CisgIGNvbnN0IHJlX25vZGVfc2V0ICpjYW5kaWRhdGVzOworICBjYW5kaWRhdGVzID0gKCht Y3R4LT5zdGF0ZV9sb2dbc3RyX2lkeF0gPT0gTlVMTCkgPyBOVUxMCisJCTogJm1jdHgtPnN0 YXRlX2xvZ1tzdHJfaWR4XS0+bm9kZXMpOworCisgIGlmIChkZXN0X25vZGVzLT5uZWxlbSA9 PSAwKQorICAgIHNjdHgtPnNpZnRlZF9zdGF0ZXNbc3RyX2lkeF0gPSBOVUxMOworICBlbHNl CisgICAgeworICAgICAgaWYgKGNhbmRpZGF0ZXMpCisJeworCSAgLyogQXQgZmlyc3QsIGFk ZCB0aGUgbm9kZXMgd2hpY2ggY2FuIGVwc2lsb24gdHJhbnNpdCB0byBhIG5vZGUgaW4KKwkg ICAgIERFU1RfTk9ERS4gICovCisJICBlcnIgPSBhZGRfZXBzaWxvbl9zcmNfbm9kZXMgKGRm YSwgZGVzdF9ub2RlcywgY2FuZGlkYXRlcyk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9F UlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisKKwkgIC8qIFRoZW4sIGNoZWNrIHRoZSBs aW1pdGF0aW9ucyBpbiB0aGUgY3VycmVudCBzaWZ0X2NvbnRleHQuICAqLworCSAgaWYgKHNj dHgtPmxpbWl0cy5uZWxlbSkKKwkgICAgeworCSAgICAgIGVyciA9IGNoZWNrX3N1YmV4cF9s aW1pdHMgKGRmYSwgZGVzdF9ub2RlcywgY2FuZGlkYXRlcywgJnNjdHgtPmxpbWl0cywKKwkJ CQkJIG1jdHgtPmJrcmVmX2VudHMsIHN0cl9pZHgpOworCSAgICAgIGlmIChCRSAoZXJyICE9 IFJFR19OT0VSUk9SLCAwKSkKKwkJcmV0dXJuIGVycjsKKwkgICAgfQorCX0KKworICAgICAg c2N0eC0+c2lmdGVkX3N0YXRlc1tzdHJfaWR4XSA9IHJlX2FjcXVpcmVfc3RhdGUgKCZlcnIs IGRmYSwgZGVzdF9ub2Rlcyk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwg MCkpCisJcmV0dXJuIGVycjsKKyAgICB9CisKKyAgaWYgKGNhbmRpZGF0ZXMgJiYgbWN0eC0+ c3RhdGVfbG9nW3N0cl9pZHhdLT5oYXNfYmFja3JlZikKKyAgICB7CisgICAgICBlcnIgPSBz aWZ0X3N0YXRlc19ia3JlZiAobWN0eCwgc2N0eCwgc3RyX2lkeCwgY2FuZGlkYXRlcyk7Cisg ICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIGVycjsKKyAg ICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QK K19fYXR0cmlidXRlX3dhcm5fdW51c2VkX3Jlc3VsdF9fCithZGRfZXBzaWxvbl9zcmNfbm9k ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIHJlX25vZGVfc2V0ICpkZXN0X25vZGVzLAorCQkg ICAgICAgY29uc3QgcmVfbm9kZV9zZXQgKmNhbmRpZGF0ZXMpCit7CisgIHJlZ19lcnJjb2Rl X3QgZXJyID0gUkVHX05PRVJST1I7CisgIElkeCBpOworCisgIHJlX2RmYXN0YXRlX3QgKnN0 YXRlID0gcmVfYWNxdWlyZV9zdGF0ZSAoJmVyciwgZGZhLCBkZXN0X25vZGVzKTsKKyAgaWYg KEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiBlcnI7CisKKyAgaWYg KCFzdGF0ZS0+aW52ZWNsb3N1cmUuYWxsb2MpCisgICAgeworICAgICAgZXJyID0gcmVfbm9k ZV9zZXRfYWxsb2MgKCZzdGF0ZS0+aW52ZWNsb3N1cmUsIGRlc3Rfbm9kZXMtPm5lbGVtKTsK KyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gUkVHX0VT UEFDRTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBkZXN0X25vZGVzLT5uZWxlbTsgaSsrKQor CXsKKwkgIGVyciA9IHJlX25vZGVfc2V0X21lcmdlICgmc3RhdGUtPmludmVjbG9zdXJlLAor CQkJCSAgIGRmYS0+aW52ZWNsb3N1cmVzICsgZGVzdF9ub2Rlcy0+ZWxlbXNbaV0pOworCSAg aWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFD RTsKKwl9CisgICAgfQorICByZXR1cm4gcmVfbm9kZV9zZXRfYWRkX2ludGVyc2VjdCAoZGVz dF9ub2RlcywgY2FuZGlkYXRlcywKKwkJCQkgICAgJnN0YXRlLT5pbnZlY2xvc3VyZSk7Cit9 CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitzdWJfZXBzaWxvbl9zcmNfbm9kZXMgKGNvbnN0 IHJlX2RmYV90ICpkZmEsIElkeCBub2RlLCByZV9ub2RlX3NldCAqZGVzdF9ub2RlcywKKwkJ ICAgICAgIGNvbnN0IHJlX25vZGVfc2V0ICpjYW5kaWRhdGVzKQoreworICAgIElkeCBlY2xf aWR4OworICAgIHJlZ19lcnJjb2RlX3QgZXJyOworICAgIHJlX25vZGVfc2V0ICppbnZfZWNs b3N1cmUgPSBkZmEtPmludmVjbG9zdXJlcyArIG5vZGU7CisgICAgcmVfbm9kZV9zZXQgZXhj ZXB0X25vZGVzOworICAgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKCZleGNlcHRfbm9kZXMp OworICAgIGZvciAoZWNsX2lkeCA9IDA7IGVjbF9pZHggPCBpbnZfZWNsb3N1cmUtPm5lbGVt OyArK2VjbF9pZHgpCisgICAgICB7CisJSWR4IGN1cl9ub2RlID0gaW52X2VjbG9zdXJlLT5l bGVtc1tlY2xfaWR4XTsKKwlpZiAoY3VyX25vZGUgPT0gbm9kZSkKKwkgIGNvbnRpbnVlOwor CWlmIChJU19FUFNJTE9OX05PREUgKGRmYS0+bm9kZXNbY3VyX25vZGVdLnR5cGUpKQorCSAg eworCSAgICBJZHggZWRzdDEgPSBkZmEtPmVkZXN0c1tjdXJfbm9kZV0uZWxlbXNbMF07CisJ ICAgIElkeCBlZHN0MiA9ICgoZGZhLT5lZGVzdHNbY3VyX25vZGVdLm5lbGVtID4gMSkKKwkJ CSA/IGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5lbGVtc1sxXSA6IC0xKTsKKwkgICAgaWYgKCgh cmVfbm9kZV9zZXRfY29udGFpbnMgKGludl9lY2xvc3VyZSwgZWRzdDEpCisJCSAmJiByZV9u b2RlX3NldF9jb250YWlucyAoZGVzdF9ub2RlcywgZWRzdDEpKQorCQl8fCAoZWRzdDIgPiAw CisJCSAgICAmJiAhcmVfbm9kZV9zZXRfY29udGFpbnMgKGludl9lY2xvc3VyZSwgZWRzdDIp CisJCSAgICAmJiByZV9ub2RlX3NldF9jb250YWlucyAoZGVzdF9ub2RlcywgZWRzdDIpKSkK KwkgICAgICB7CisJCWVyciA9IHJlX25vZGVfc2V0X2FkZF9pbnRlcnNlY3QgKCZleGNlcHRf bm9kZXMsIGNhbmRpZGF0ZXMsCisJCQkJCQkgZGZhLT5pbnZlY2xvc3VyZXMgKyBjdXJfbm9k ZSk7CisJCWlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICB7CisJCSAgICBy ZV9ub2RlX3NldF9mcmVlICgmZXhjZXB0X25vZGVzKTsKKwkJICAgIHJldHVybiBlcnI7CisJ CSAgfQorCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKyAgICBmb3IgKGVjbF9pZHggPSAwOyBl Y2xfaWR4IDwgaW52X2VjbG9zdXJlLT5uZWxlbTsgKytlY2xfaWR4KQorICAgICAgeworCUlk eCBjdXJfbm9kZSA9IGludl9lY2xvc3VyZS0+ZWxlbXNbZWNsX2lkeF07CisJaWYgKCFyZV9u b2RlX3NldF9jb250YWlucyAoJmV4Y2VwdF9ub2RlcywgY3VyX25vZGUpKQorCSAgeworCSAg ICBJZHggaWR4ID0gcmVfbm9kZV9zZXRfY29udGFpbnMgKGRlc3Rfbm9kZXMsIGN1cl9ub2Rl KSAtIDE7CisJICAgIHJlX25vZGVfc2V0X3JlbW92ZV9hdCAoZGVzdF9ub2RlcywgaWR4KTsK KwkgIH0KKyAgICAgIH0KKyAgICByZV9ub2RlX3NldF9mcmVlICgmZXhjZXB0X25vZGVzKTsK KyAgICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyBib29sCitjaGVja19kc3Rf bGltaXRzIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGNvbnN0IHJlX25vZGVf c2V0ICpsaW1pdHMsCisJCSAgSWR4IGRzdF9ub2RlLCBJZHggZHN0X2lkeCwgSWR4IHNyY19u b2RlLCBJZHggc3JjX2lkeCkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1j dHgtPmRmYTsKKyAgSWR4IGxpbV9pZHgsIHNyY19wb3MsIGRzdF9wb3M7CisKKyAgSWR4IGRz dF9ia3JlZl9pZHggPSBzZWFyY2hfY3VyX2JrcmVmX2VudHJ5IChtY3R4LCBkc3RfaWR4KTsK KyAgSWR4IHNyY19ia3JlZl9pZHggPSBzZWFyY2hfY3VyX2JrcmVmX2VudHJ5IChtY3R4LCBz cmNfaWR4KTsKKyAgZm9yIChsaW1faWR4ID0gMDsgbGltX2lkeCA8IGxpbWl0cy0+bmVsZW07 ICsrbGltX2lkeCkKKyAgICB7CisgICAgICBJZHggc3ViZXhwX2lkeDsKKyAgICAgIHN0cnVj dCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICplbnQ7CisgICAgICBlbnQgPSBtY3R4LT5ia3Jl Zl9lbnRzICsgbGltaXRzLT5lbGVtc1tsaW1faWR4XTsKKyAgICAgIHN1YmV4cF9pZHggPSBk ZmEtPm5vZGVzW2VudC0+bm9kZV0ub3ByLmlkeDsKKworICAgICAgZHN0X3BvcyA9IGNoZWNr X2RzdF9saW1pdHNfY2FsY19wb3MgKG1jdHgsIGxpbWl0cy0+ZWxlbXNbbGltX2lkeF0sCisJ CQkJCSAgIHN1YmV4cF9pZHgsIGRzdF9ub2RlLCBkc3RfaWR4LAorCQkJCQkgICBkc3RfYmty ZWZfaWR4KTsKKyAgICAgIHNyY19wb3MgPSBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zICht Y3R4LCBsaW1pdHMtPmVsZW1zW2xpbV9pZHhdLAorCQkJCQkgICBzdWJleHBfaWR4LCBzcmNf bm9kZSwgc3JjX2lkeCwKKwkJCQkJICAgc3JjX2JrcmVmX2lkeCk7CisKKyAgICAgIC8qIElu IGNhc2Ugb2Y6CisJIDxzcmM+IDxkc3Q+ICggPHN1YmV4cD4gKQorCSAoIDxzdWJleHA+ICkg PHNyYz4gPGRzdD4KKwkgKCA8c3ViZXhwMT4gPHNyYz4gPHN1YmV4cDI+IDxkc3Q+IDxzdWJl eHAzPiApICAqLworICAgICAgaWYgKHNyY19wb3MgPT0gZHN0X3BvcykKKwljb250aW51ZTsg LyogVGhpcyBpcyB1bnJlbGF0ZWQgbGltaXRhdGlvbi4gICovCisgICAgICBlbHNlCisJcmV0 dXJuIHRydWU7CisgICAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQKK2No ZWNrX2RzdF9saW1pdHNfY2FsY19wb3NfMSAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICpt Y3R4LCBpbnQgYm91bmRhcmllcywKKwkJCSAgICAgSWR4IHN1YmV4cF9pZHgsIElkeCBmcm9t X25vZGUsIElkeCBia3JlZl9pZHgpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEg PSBtY3R4LT5kZmE7CisgIGNvbnN0IHJlX25vZGVfc2V0ICplY2xvc3VyZXMgPSBkZmEtPmVj bG9zdXJlcyArIGZyb21fbm9kZTsKKyAgSWR4IG5vZGVfaWR4OworCisgIC8qIEVsc2UsIHdl IGFyZSBvbiB0aGUgYm91bmRhcnk6IGV4YW1pbmUgdGhlIG5vZGVzIG9uIHRoZSBlcHNpbG9u CisgICAgIGNsb3N1cmUuICAqLworICBmb3IgKG5vZGVfaWR4ID0gMDsgbm9kZV9pZHggPCBl Y2xvc3VyZXMtPm5lbGVtOyArK25vZGVfaWR4KQorICAgIHsKKyAgICAgIElkeCBub2RlID0g ZWNsb3N1cmVzLT5lbGVtc1tub2RlX2lkeF07CisgICAgICBzd2l0Y2ggKGRmYS0+bm9kZXNb bm9kZV0udHlwZSkKKwl7CisJY2FzZSBPUF9CQUNLX1JFRjoKKwkgIGlmIChia3JlZl9pZHgg IT0gLTEpCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAq ZW50ID0gbWN0eC0+YmtyZWZfZW50cyArIGJrcmVmX2lkeDsKKwkgICAgICBkbworCQl7CisJ CSAgSWR4IGRzdDsKKwkJICBpbnQgY3BvczsKKworCQkgIGlmIChlbnQtPm5vZGUgIT0gbm9k ZSkKKwkJICAgIGNvbnRpbnVlOworCisJCSAgaWYgKHN1YmV4cF9pZHggPCBCSVRTRVRfV09S RF9CSVRTCisJCSAgICAgICYmICEoZW50LT5lcHNfcmVhY2hhYmxlX3N1YmV4cHNfbWFwCisJ CQkgICAmICgoYml0c2V0X3dvcmRfdCkgMSA8PCBzdWJleHBfaWR4KSkpCisJCSAgICBjb250 aW51ZTsKKworCQkgIC8qIFJlY3Vyc2UgdHJ5aW5nIHRvIHJlYWNoIHRoZSBPUF9PUEVOX1NV QkVYUCBhbmQKKwkJICAgICBPUF9DTE9TRV9TVUJFWFAgY2FzZXMgYmVsb3cuICBCdXQsIGlm IHRoZQorCQkgICAgIGRlc3RpbmF0aW9uIG5vZGUgaXMgdGhlIHNhbWUgbm9kZSBhcyB0aGUg c291cmNlCisJCSAgICAgbm9kZSwgZG9uJ3QgcmVjdXJzZSBiZWNhdXNlIGl0IHdvdWxkIGNh dXNlIGFuCisJCSAgICAgaW5maW5pdGUgbG9vcDogYSByZWdleCB0aGF0IGV4aGliaXRzIHRo aXMgYmVoYXZpb3IKKwkJICAgICBpcyAoKVwxKlwxKiAgKi8KKwkJICBkc3QgPSBkZmEtPmVk ZXN0c1tub2RlXS5lbGVtc1swXTsKKwkJICBpZiAoZHN0ID09IGZyb21fbm9kZSkKKwkJICAg IHsKKwkJICAgICAgaWYgKGJvdW5kYXJpZXMgJiAxKQorCQkJcmV0dXJuIC0xOworCQkgICAg ICBlbHNlIC8qIGlmIChib3VuZGFyaWVzICYgMikgKi8KKwkJCXJldHVybiAwOworCQkgICAg fQorCisJCSAgY3BvcyA9CisJCSAgICBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zXzEgKG1j dHgsIGJvdW5kYXJpZXMsIHN1YmV4cF9pZHgsCisJCQkJCQkgZHN0LCBia3JlZl9pZHgpOwor CQkgIGlmIChjcG9zID09IC0xIC8qICYmIChib3VuZGFyaWVzICYgMSkgKi8pCisJCSAgICBy ZXR1cm4gLTE7CisJCSAgaWYgKGNwb3MgPT0gMCAmJiAoYm91bmRhcmllcyAmIDIpKQorCQkg ICAgcmV0dXJuIDA7CisKKwkJICBpZiAoc3ViZXhwX2lkeCA8IEJJVFNFVF9XT1JEX0JJVFMp CisJCSAgICBlbnQtPmVwc19yZWFjaGFibGVfc3ViZXhwc19tYXAKKwkJICAgICAgJj0gfigo Yml0c2V0X3dvcmRfdCkgMSA8PCBzdWJleHBfaWR4KTsKKwkJfQorCSAgICAgIHdoaWxlIChl bnQrKy0+bW9yZSk7CisJICAgIH0KKwkgIGJyZWFrOworCisJY2FzZSBPUF9PUEVOX1NVQkVY UDoKKwkgIGlmICgoYm91bmRhcmllcyAmIDEpICYmIHN1YmV4cF9pZHggPT0gZGZhLT5ub2Rl c1tub2RlXS5vcHIuaWR4KQorCSAgICByZXR1cm4gLTE7CisJICBicmVhazsKKworCWNhc2Ug T1BfQ0xPU0VfU1VCRVhQOgorCSAgaWYgKChib3VuZGFyaWVzICYgMikgJiYgc3ViZXhwX2lk eCA9PSBkZmEtPm5vZGVzW25vZGVdLm9wci5pZHgpCisJICAgIHJldHVybiAwOworCSAgYnJl YWs7CisKKwlkZWZhdWx0OgorCSAgICBicmVhazsKKwl9CisgICAgfQorCisgIHJldHVybiAo Ym91bmRhcmllcyAmIDIpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQKK2NoZWNrX2RzdF9s aW1pdHNfY2FsY19wb3MgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgSWR4IGxp bWl0LAorCQkJICAgSWR4IHN1YmV4cF9pZHgsIElkeCBmcm9tX25vZGUsIElkeCBzdHJfaWR4 LAorCQkJICAgSWR4IGJrcmVmX2lkeCkKK3sKKyAgc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVf ZW50cnkgKmxpbSA9IG1jdHgtPmJrcmVmX2VudHMgKyBsaW1pdDsKKyAgaW50IGJvdW5kYXJp ZXM7CisKKyAgLyogSWYgd2UgYXJlIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSBzdWJleHBy ZXNzaW9uLCByZXR1cm4gLTEgb3IgMS4gICovCisgIGlmIChzdHJfaWR4IDwgbGltLT5zdWJl eHBfZnJvbSkKKyAgICByZXR1cm4gLTE7CisKKyAgaWYgKGxpbS0+c3ViZXhwX3RvIDwgc3Ry X2lkeCkKKyAgICByZXR1cm4gMTsKKworICAvKiBJZiB3ZSBhcmUgd2l0aGluIHRoZSBzdWJl eHByZXNzaW9uLCByZXR1cm4gMC4gICovCisgIGJvdW5kYXJpZXMgPSAoc3RyX2lkeCA9PSBs aW0tPnN1YmV4cF9mcm9tKTsKKyAgYm91bmRhcmllcyB8PSAoc3RyX2lkeCA9PSBsaW0tPnN1 YmV4cF90bykgPDwgMTsKKyAgaWYgKGJvdW5kYXJpZXMgPT0gMCkKKyAgICByZXR1cm4gMDsK KworICAvKiBFbHNlLCBleGFtaW5lIGVwc2lsb24gY2xvc3VyZS4gICovCisgIHJldHVybiBj aGVja19kc3RfbGltaXRzX2NhbGNfcG9zXzEgKG1jdHgsIGJvdW5kYXJpZXMsIHN1YmV4cF9p ZHgsCisJCQkJICAgICAgZnJvbV9ub2RlLCBia3JlZl9pZHgpOworfQorCisvKiBDaGVjayB0 aGUgbGltaXRhdGlvbnMgb2Ygc3ViIGV4cHJlc3Npb25zIExJTUlUUywgYW5kIHJlbW92ZSB0 aGUgbm9kZXMKKyAgIHdoaWNoIGFyZSBhZ2FpbnN0IGxpbWl0YXRpb25zIGZyb20gREVTVF9O T0RFUy4gKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2NoZWNrX3N1YmV4cF9saW1pdHMg KGNvbnN0IHJlX2RmYV90ICpkZmEsIHJlX25vZGVfc2V0ICpkZXN0X25vZGVzLAorCQkgICAg IGNvbnN0IHJlX25vZGVfc2V0ICpjYW5kaWRhdGVzLCByZV9ub2RlX3NldCAqbGltaXRzLAor CQkgICAgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICpia3JlZl9lbnRzLCBJZHgg c3RyX2lkeCkKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIElkeCBub2RlX2lkeCwgbGlt X2lkeDsKKworICBmb3IgKGxpbV9pZHggPSAwOyBsaW1faWR4IDwgbGltaXRzLT5uZWxlbTsg KytsaW1faWR4KQorICAgIHsKKyAgICAgIElkeCBzdWJleHBfaWR4OworICAgICAgc3RydWN0 IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkgKmVudDsKKyAgICAgIGVudCA9IGJrcmVmX2VudHMg KyBsaW1pdHMtPmVsZW1zW2xpbV9pZHhdOworCisgICAgICBpZiAoc3RyX2lkeCA8PSBlbnQt PnN1YmV4cF9mcm9tIHx8IGVudC0+c3RyX2lkeCA8IHN0cl9pZHgpCisJY29udGludWU7IC8q IFRoaXMgaXMgdW5yZWxhdGVkIGxpbWl0YXRpb24uICAqLworCisgICAgICBzdWJleHBfaWR4 ID0gZGZhLT5ub2Rlc1tlbnQtPm5vZGVdLm9wci5pZHg7CisgICAgICBpZiAoZW50LT5zdWJl eHBfdG8gPT0gc3RyX2lkeCkKKwl7CisJICBJZHggb3BzX25vZGUgPSAtMTsKKwkgIElkeCBj bHNfbm9kZSA9IC0xOworCSAgZm9yIChub2RlX2lkeCA9IDA7IG5vZGVfaWR4IDwgZGVzdF9u b2Rlcy0+bmVsZW07ICsrbm9kZV9pZHgpCisJICAgIHsKKwkgICAgICBJZHggbm9kZSA9IGRl c3Rfbm9kZXMtPmVsZW1zW25vZGVfaWR4XTsKKwkgICAgICByZV90b2tlbl90eXBlX3QgdHlw ZSA9IGRmYS0+bm9kZXNbbm9kZV0udHlwZTsKKwkgICAgICBpZiAodHlwZSA9PSBPUF9PUEVO X1NVQkVYUAorCQkgICYmIHN1YmV4cF9pZHggPT0gZGZhLT5ub2Rlc1tub2RlXS5vcHIuaWR4 KQorCQlvcHNfbm9kZSA9IG5vZGU7CisJICAgICAgZWxzZSBpZiAodHlwZSA9PSBPUF9DTE9T RV9TVUJFWFAKKwkJICAgICAgICYmIHN1YmV4cF9pZHggPT0gZGZhLT5ub2Rlc1tub2RlXS5v cHIuaWR4KQorCQljbHNfbm9kZSA9IG5vZGU7CisJICAgIH0KKworCSAgLyogQ2hlY2sgdGhl IGxpbWl0YXRpb24gb2YgdGhlIG9wZW4gc3ViZXhwcmVzc2lvbi4gICovCisJICAvKiBOb3Rl IHRoYXQgKGVudC0+c3ViZXhwX3RvID0gc3RyX2lkeCAhPSBlbnQtPnN1YmV4cF9mcm9tKS4g ICovCisJICBpZiAob3BzX25vZGUgPj0gMCkKKwkgICAgeworCSAgICAgIGVyciA9IHN1Yl9l cHNpbG9uX3NyY19ub2RlcyAoZGZhLCBvcHNfbm9kZSwgZGVzdF9ub2RlcywKKwkJCQkJICAg Y2FuZGlkYXRlcyk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQor CQlyZXR1cm4gZXJyOworCSAgICB9CisKKwkgIC8qIENoZWNrIHRoZSBsaW1pdGF0aW9uIG9m IHRoZSBjbG9zZSBzdWJleHByZXNzaW9uLiAgKi8KKwkgIGlmIChjbHNfbm9kZSA+PSAwKQor CSAgICBmb3IgKG5vZGVfaWR4ID0gMDsgbm9kZV9pZHggPCBkZXN0X25vZGVzLT5uZWxlbTsg Kytub2RlX2lkeCkKKwkgICAgICB7CisJCUlkeCBub2RlID0gZGVzdF9ub2Rlcy0+ZWxlbXNb bm9kZV9pZHhdOworCQlpZiAoIXJlX25vZGVfc2V0X2NvbnRhaW5zIChkZmEtPmludmVjbG9z dXJlcyArIG5vZGUsCisJCQkJCSAgIGNsc19ub2RlKQorCQkgICAgJiYgIXJlX25vZGVfc2V0 X2NvbnRhaW5zIChkZmEtPmVjbG9zdXJlcyArIG5vZGUsCisJCQkJCSAgICAgIGNsc19ub2Rl KSkKKwkJICB7CisJCSAgICAvKiBJdCBpcyBhZ2FpbnN0IHRoaXMgbGltaXRhdGlvbi4KKwkJ ICAgICAgIFJlbW92ZSBpdCBmb3JtIHRoZSBjdXJyZW50IHNpZnRlZCBzdGF0ZS4gICovCisJ CSAgICBlcnIgPSBzdWJfZXBzaWxvbl9zcmNfbm9kZXMgKGRmYSwgbm9kZSwgZGVzdF9ub2Rl cywKKwkJCQkJCSBjYW5kaWRhdGVzKTsKKwkJICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VS Uk9SLCAwKSkKKwkJICAgICAgcmV0dXJuIGVycjsKKwkJICAgIC0tbm9kZV9pZHg7CisJCSAg fQorCSAgICAgIH0KKwl9CisgICAgICBlbHNlIC8qIChlbnQtPnN1YmV4cF90byAhPSBzdHJf aWR4KSAgKi8KKwl7CisJICBmb3IgKG5vZGVfaWR4ID0gMDsgbm9kZV9pZHggPCBkZXN0X25v ZGVzLT5uZWxlbTsgKytub2RlX2lkeCkKKwkgICAgeworCSAgICAgIElkeCBub2RlID0gZGVz dF9ub2Rlcy0+ZWxlbXNbbm9kZV9pZHhdOworCSAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBl ID0gZGZhLT5ub2Rlc1tub2RlXS50eXBlOworCSAgICAgIGlmICh0eXBlID09IE9QX0NMT1NF X1NVQkVYUCB8fCB0eXBlID09IE9QX09QRU5fU1VCRVhQKQorCQl7CisJCSAgaWYgKHN1YmV4 cF9pZHggIT0gZGZhLT5ub2Rlc1tub2RlXS5vcHIuaWR4KQorCQkgICAgY29udGludWU7CisJ CSAgLyogSXQgaXMgYWdhaW5zdCB0aGlzIGxpbWl0YXRpb24uCisJCSAgICAgUmVtb3ZlIGl0 IGZvcm0gdGhlIGN1cnJlbnQgc2lmdGVkIHN0YXRlLiAgKi8KKwkJICBlcnIgPSBzdWJfZXBz aWxvbl9zcmNfbm9kZXMgKGRmYSwgbm9kZSwgZGVzdF9ub2RlcywKKwkJCQkJICAgICAgIGNh bmRpZGF0ZXMpOworCQkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICAg IHJldHVybiBlcnI7CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgIHJldHVybiBSRUdfTk9F UlJPUjsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK19fYXR0cmlidXRlX3dhcm5fdW51 c2VkX3Jlc3VsdF9fCitzaWZ0X3N0YXRlc19ia3JlZiAoY29uc3QgcmVfbWF0Y2hfY29udGV4 dF90ICptY3R4LCByZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCwKKwkJICAgSWR4IHN0cl9pZHgs IGNvbnN0IHJlX25vZGVfc2V0ICpjYW5kaWRhdGVzKQoreworICBjb25zdCByZV9kZmFfdCAq Y29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZWdfZXJyY29kZV90IGVycjsKKyAgSWR4IG5v ZGVfaWR4LCBub2RlOworICByZV9zaWZ0X2NvbnRleHRfdCBsb2NhbF9zY3R4OworICBJZHgg Zmlyc3RfaWR4ID0gc2VhcmNoX2N1cl9ia3JlZl9lbnRyeSAobWN0eCwgc3RyX2lkeCk7CisK KyAgaWYgKGZpcnN0X2lkeCA9PSAtMSkKKyAgICByZXR1cm4gUkVHX05PRVJST1I7CisKKyAg bG9jYWxfc2N0eC5zaWZ0ZWRfc3RhdGVzID0gTlVMTDsgLyogTWFyayB0aGF0IGl0IGhhc24n dCBiZWVuIGluaXRpYWxpemVkLiAgKi8KKworICBmb3IgKG5vZGVfaWR4ID0gMDsgbm9kZV9p ZHggPCBjYW5kaWRhdGVzLT5uZWxlbTsgKytub2RlX2lkeCkKKyAgICB7CisgICAgICBJZHgg ZW5hYmxlZF9pZHg7CisgICAgICByZV90b2tlbl90eXBlX3QgdHlwZTsKKyAgICAgIHN0cnVj dCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICplbnRyeTsKKyAgICAgIG5vZGUgPSBjYW5kaWRh dGVzLT5lbGVtc1tub2RlX2lkeF07CisgICAgICB0eXBlID0gZGZhLT5ub2Rlc1tub2RlXS50 eXBlOworICAgICAgLyogQXZvaWQgaW5maW5pdGUgbG9vcCBmb3IgdGhlIFJFcyBsaWtlICIo KVwxKyIuICAqLworICAgICAgaWYgKG5vZGUgPT0gc2N0eC0+bGFzdF9ub2RlICYmIHN0cl9p ZHggPT0gc2N0eC0+bGFzdF9zdHJfaWR4KQorCWNvbnRpbnVlOworICAgICAgaWYgKHR5cGUg IT0gT1BfQkFDS19SRUYpCisJY29udGludWU7CisKKyAgICAgIGVudHJ5ID0gbWN0eC0+Ymty ZWZfZW50cyArIGZpcnN0X2lkeDsKKyAgICAgIGVuYWJsZWRfaWR4ID0gZmlyc3RfaWR4Owor ICAgICAgZG8KKwl7CisJICBJZHggc3ViZXhwX2xlbjsKKwkgIElkeCB0b19pZHg7CisJICBJ ZHggZHN0X25vZGU7CisJICBib29sIG9rOworCSAgcmVfZGZhc3RhdGVfdCAqY3VyX3N0YXRl OworCisJICBpZiAoZW50cnktPm5vZGUgIT0gbm9kZSkKKwkgICAgY29udGludWU7CisJICBz dWJleHBfbGVuID0gZW50cnktPnN1YmV4cF90byAtIGVudHJ5LT5zdWJleHBfZnJvbTsKKwkg IHRvX2lkeCA9IHN0cl9pZHggKyBzdWJleHBfbGVuOworCSAgZHN0X25vZGUgPSAoc3ViZXhw X2xlbiA/IGRmYS0+bmV4dHNbbm9kZV0KKwkJICAgICAgOiBkZmEtPmVkZXN0c1tub2RlXS5l bGVtc1swXSk7CisKKwkgIGlmICh0b19pZHggPiBzY3R4LT5sYXN0X3N0cl9pZHgKKwkgICAg ICB8fCBzY3R4LT5zaWZ0ZWRfc3RhdGVzW3RvX2lkeF0gPT0gTlVMTAorCSAgICAgIHx8ICFT VEFURV9OT0RFX0NPTlRBSU5TIChzY3R4LT5zaWZ0ZWRfc3RhdGVzW3RvX2lkeF0sIGRzdF9u b2RlKQorCSAgICAgIHx8IGNoZWNrX2RzdF9saW1pdHMgKG1jdHgsICZzY3R4LT5saW1pdHMs IG5vZGUsCisJCQkJICAgc3RyX2lkeCwgZHN0X25vZGUsIHRvX2lkeCkpCisJICAgIGNvbnRp bnVlOworCisJICBpZiAobG9jYWxfc2N0eC5zaWZ0ZWRfc3RhdGVzID09IE5VTEwpCisJICAg IHsKKwkgICAgICBsb2NhbF9zY3R4ID0gKnNjdHg7CisJICAgICAgZXJyID0gcmVfbm9kZV9z ZXRfaW5pdF9jb3B5ICgmbG9jYWxfc2N0eC5saW1pdHMsICZzY3R4LT5saW1pdHMpOworCSAg ICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJZ290byBmcmVlX3JldHVy bjsKKwkgICAgfQorCSAgbG9jYWxfc2N0eC5sYXN0X25vZGUgPSBub2RlOworCSAgbG9jYWxf c2N0eC5sYXN0X3N0cl9pZHggPSBzdHJfaWR4OworCSAgb2sgPSByZV9ub2RlX3NldF9pbnNl cnQgKCZsb2NhbF9zY3R4LmxpbWl0cywgZW5hYmxlZF9pZHgpOworCSAgaWYgKEJFICghIG9r LCAwKSkKKwkgICAgeworCSAgICAgIGVyciA9IFJFR19FU1BBQ0U7CisJICAgICAgZ290byBm cmVlX3JldHVybjsKKwkgICAgfQorCSAgY3VyX3N0YXRlID0gbG9jYWxfc2N0eC5zaWZ0ZWRf c3RhdGVzW3N0cl9pZHhdOworCSAgZXJyID0gc2lmdF9zdGF0ZXNfYmFja3dhcmQgKG1jdHgs ICZsb2NhbF9zY3R4KTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkg ICAgZ290byBmcmVlX3JldHVybjsKKwkgIGlmIChzY3R4LT5saW1pdGVkX3N0YXRlcyAhPSBO VUxMKQorCSAgICB7CisJICAgICAgZXJyID0gbWVyZ2Vfc3RhdGVfYXJyYXkgKGRmYSwgc2N0 eC0+bGltaXRlZF9zdGF0ZXMsCisJCQkJICAgICAgIGxvY2FsX3NjdHguc2lmdGVkX3N0YXRl cywKKwkJCQkgICAgICAgc3RyX2lkeCArIDEpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJF R19OT0VSUk9SLCAwKSkKKwkJZ290byBmcmVlX3JldHVybjsKKwkgICAgfQorCSAgbG9jYWxf c2N0eC5zaWZ0ZWRfc3RhdGVzW3N0cl9pZHhdID0gY3VyX3N0YXRlOworCSAgcmVfbm9kZV9z ZXRfcmVtb3ZlICgmbG9jYWxfc2N0eC5saW1pdHMsIGVuYWJsZWRfaWR4KTsKKworCSAgLyog bWN0eC0+YmtyZWZfZW50cyBtYXkgaGF2ZSBjaGFuZ2VkLCByZWxvYWQgdGhlIHBvaW50ZXIu ICAqLworCSAgZW50cnkgPSBtY3R4LT5ia3JlZl9lbnRzICsgZW5hYmxlZF9pZHg7CisJfQor ICAgICAgd2hpbGUgKGVuYWJsZWRfaWR4KyssIGVudHJ5KystPm1vcmUpOworICAgIH0KKyAg ZXJyID0gUkVHX05PRVJST1I7CisgZnJlZV9yZXR1cm46CisgIGlmIChsb2NhbF9zY3R4LnNp ZnRlZF9zdGF0ZXMgIT0gTlVMTCkKKyAgICB7CisgICAgICByZV9ub2RlX3NldF9mcmVlICgm bG9jYWxfc2N0eC5saW1pdHMpOworICAgIH0KKworICByZXR1cm4gZXJyOworfQorCisKKyNp ZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIGludAorc2lmdF9zdGF0ZXNfaXRlcl9tYiAo Y29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCByZV9zaWZ0X2NvbnRleHRfdCAqc2N0 eCwKKwkJICAgICBJZHggbm9kZV9pZHgsIElkeCBzdHJfaWR4LCBJZHggbWF4X3N0cl9pZHgp Cit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGludCBu YWNjZXB0ZWQ7CisgIC8qIENoZWNrIHRoZSBub2RlIGNhbiBhY2NlcHQgIm11bHRpIGJ5dGUi LiAgKi8KKyAgbmFjY2VwdGVkID0gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGRmYSwgbm9k ZV9pZHgsICZtY3R4LT5pbnB1dCwgc3RyX2lkeCk7CisgIGlmIChuYWNjZXB0ZWQgPiAwICYm IHN0cl9pZHggKyBuYWNjZXB0ZWQgPD0gbWF4X3N0cl9pZHggJiYKKyAgICAgICFTVEFURV9O T0RFX0NPTlRBSU5TIChzY3R4LT5zaWZ0ZWRfc3RhdGVzW3N0cl9pZHggKyBuYWNjZXB0ZWRd LAorCQkJICAgIGRmYS0+bmV4dHNbbm9kZV9pZHhdKSkKKyAgICAvKiBUaGUgbm9kZSBjYW4n dCBhY2NlcHQgdGhlICJtdWx0aSBieXRlIiwgb3IgdGhlCisgICAgICAgZGVzdGluYXRpb24g d2FzIGFscmVhZHkgdGhyb3duIGF3YXksIHRoZW4gdGhlIG5vZGUKKyAgICAgICBjb3VsZCd0 IGFjY2VwdCB0aGUgY3VycmVudCBpbnB1dCAibXVsdGkgYnl0ZSIuICAgKi8KKyAgICBuYWNj ZXB0ZWQgPSAwOworICAvKiBPdGhlcndpc2UsIGl0IGlzIHN1cmUgdGhhdCB0aGUgbm9kZSBj b3VsZCBhY2NlcHQKKyAgICAgJ25hY2NlcHRlZCcgYnl0ZXMgaW5wdXQuICAqLworICByZXR1 cm4gbmFjY2VwdGVkOworfQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKKwwKKy8q IEZ1bmN0aW9ucyBmb3Igc3RhdGUgdHJhbnNpdGlvbi4gICovCisKKy8qIFJldHVybiB0aGUg bmV4dCBzdGF0ZSB0byB3aGljaCB0aGUgY3VycmVudCBzdGF0ZSBTVEFURSB3aWxsIHRyYW5z aXQgYnkKKyAgIGFjY2VwdGluZyB0aGUgY3VycmVudCBpbnB1dCBieXRlLCBhbmQgdXBkYXRl IFNUQVRFX0xPRyBpZiBuZWNlc3NhcnkuCisgICBJZiBTVEFURSBjYW4gYWNjZXB0IGEgbXVs dGlieXRlIGNoYXIvY29sbGF0aW5nIGVsZW1lbnQvYmFjayByZWZlcmVuY2UKKyAgIHVwZGF0 ZSB0aGUgZGVzdGluYXRpb24gb2YgU1RBVEVfTE9HLiAgKi8KKworc3RhdGljIHJlX2RmYXN0 YXRlX3QgKgorX19hdHRyaWJ1dGVfd2Fybl91bnVzZWRfcmVzdWx0X18KK3RyYW5zaXRfc3Rh dGUgKHJlZ19lcnJjb2RlX3QgKmVyciwgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCSAg ICAgICByZV9kZmFzdGF0ZV90ICpzdGF0ZSkKK3sKKyAgcmVfZGZhc3RhdGVfdCAqKnRydGFi bGU7CisgIHVuc2lnbmVkIGNoYXIgY2g7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAv KiBJZiB0aGUgY3VycmVudCBzdGF0ZSBjYW4gYWNjZXB0IG11bHRpYnl0ZS4gICovCisgIGlm IChCRSAoc3RhdGUtPmFjY2VwdF9tYiwgMCkpCisgICAgeworICAgICAgKmVyciA9IHRyYW5z aXRfc3RhdGVfbWIgKG1jdHgsIHN0YXRlKTsKKyAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdf Tk9FUlJPUiwgMCkpCisJcmV0dXJuIE5VTEw7CisgICAgfQorI2VuZGlmIC8qIFJFX0VOQUJM RV9JMThOICovCisKKyAgLyogVGhlbiBkZWNpZGUgdGhlIG5leHQgc3RhdGUgd2l0aCB0aGUg c2luZ2xlIGJ5dGUuICAqLworI2lmIDAKKyAgaWYgKDApCisgICAgLyogZG9uJ3QgdXNlIHRy YW5zaXRpb24gdGFibGUgICovCisgICAgcmV0dXJuIHRyYW5zaXRfc3RhdGVfc2IgKGVyciwg bWN0eCwgc3RhdGUpOworI2VuZGlmCisKKyAgLyogVXNlIHRyYW5zaXRpb24gdGFibGUgICov CisgIGNoID0gcmVfc3RyaW5nX2ZldGNoX2J5dGUgKCZtY3R4LT5pbnB1dCk7CisgIGZvciAo OzspCisgICAgeworICAgICAgdHJ0YWJsZSA9IHN0YXRlLT50cnRhYmxlOworICAgICAgaWYg KEJFICh0cnRhYmxlICE9IE5VTEwsIDEpKQorCXJldHVybiB0cnRhYmxlW2NoXTsKKworICAg ICAgdHJ0YWJsZSA9IHN0YXRlLT53b3JkX3RydGFibGU7CisgICAgICBpZiAoQkUgKHRydGFi bGUgIT0gTlVMTCwgMSkpCisJeworCSAgdW5zaWduZWQgaW50IGNvbnRleHQ7CisJICBjb250 ZXh0CisJICAgID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwKKwkJCQkg ICAgcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCkgLSAxLAorCQkJCSAgICBtY3R4 LT5lZmxhZ3MpOworCSAgaWYgKElTX1dPUkRfQ09OVEVYVCAoY29udGV4dCkpCisJICAgIHJl dHVybiB0cnRhYmxlW2NoICsgU0JDX01BWF07CisJICBlbHNlCisJICAgIHJldHVybiB0cnRh YmxlW2NoXTsKKwl9CisKKyAgICAgIGlmICghYnVpbGRfdHJ0YWJsZSAobWN0eC0+ZGZhLCBz dGF0ZSkpCisJeworCSAgKmVyciA9IFJFR19FU1BBQ0U7CisJICByZXR1cm4gTlVMTDsKKwl9 CisKKyAgICAgIC8qIFJldHJ5LCB3ZSBub3cgaGF2ZSBhIHRyYW5zaXRpb24gdGFibGUuICAq LworICAgIH0KK30KKworLyogVXBkYXRlIHRoZSBzdGF0ZV9sb2cgaWYgd2UgbmVlZCAqLwor c3RhdGljIHJlX2RmYXN0YXRlX3QgKgorbWVyZ2Vfc3RhdGVfd2l0aF9sb2cgKHJlZ19lcnJj b2RlX3QgKmVyciwgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkgICAgICByZV9kZmFz dGF0ZV90ICpuZXh0X3N0YXRlKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0g bWN0eC0+ZGZhOworICBJZHggY3VyX2lkeCA9IHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+ aW5wdXQpOworCisgIGlmIChjdXJfaWR4ID4gbWN0eC0+c3RhdGVfbG9nX3RvcCkKKyAgICB7 CisgICAgICBtY3R4LT5zdGF0ZV9sb2dbY3VyX2lkeF0gPSBuZXh0X3N0YXRlOworICAgICAg bWN0eC0+c3RhdGVfbG9nX3RvcCA9IGN1cl9pZHg7CisgICAgfQorICBlbHNlIGlmIChtY3R4 LT5zdGF0ZV9sb2dbY3VyX2lkeF0gPT0gMCkKKyAgICB7CisgICAgICBtY3R4LT5zdGF0ZV9s b2dbY3VyX2lkeF0gPSBuZXh0X3N0YXRlOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAg IHJlX2RmYXN0YXRlX3QgKnBzdGF0ZTsKKyAgICAgIHVuc2lnbmVkIGludCBjb250ZXh0Owor ICAgICAgcmVfbm9kZV9zZXQgbmV4dF9ub2RlcywgKmxvZ19ub2RlcywgKnRhYmxlX25vZGVz ID0gTlVMTDsKKyAgICAgIC8qIElmIChzdGF0ZV9sb2dbY3VyX2lkeF0gIT0gMCksIGl0IGlt cGxpZXMgdGhhdCBjdXJfaWR4IGlzCisJIHRoZSBkZXN0aW5hdGlvbiBvZiBhIG11bHRpYnl0 ZSBjaGFyL2NvbGxhdGluZyBlbGVtZW50LworCSBiYWNrIHJlZmVyZW5jZS4gIFRoZW4gdGhl IG5leHQgc3RhdGUgaXMgdGhlIHVuaW9uIHNldCBvZgorCSB0aGVzZSBkZXN0aW5hdGlvbnMg YW5kIHRoZSByZXN1bHRzIG9mIHRoZSB0cmFuc2l0aW9uIHRhYmxlLiAgKi8KKyAgICAgIHBz dGF0ZSA9IG1jdHgtPnN0YXRlX2xvZ1tjdXJfaWR4XTsKKyAgICAgIGxvZ19ub2RlcyA9IHBz dGF0ZS0+ZW50cmFuY2Vfbm9kZXM7CisgICAgICBpZiAobmV4dF9zdGF0ZSAhPSBOVUxMKQor CXsKKwkgIHRhYmxlX25vZGVzID0gbmV4dF9zdGF0ZS0+ZW50cmFuY2Vfbm9kZXM7CisJICAq ZXJyID0gcmVfbm9kZV9zZXRfaW5pdF91bmlvbiAoJm5leHRfbm9kZXMsIHRhYmxlX25vZGVz LAorCQkJCQkgICAgIGxvZ19ub2Rlcyk7CisJICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJS T1IsIDApKQorCSAgICByZXR1cm4gTlVMTDsKKwl9CisgICAgICBlbHNlCisJbmV4dF9ub2Rl cyA9ICpsb2dfbm9kZXM7CisgICAgICAvKiBOb3RlOiBXZSBhbHJlYWR5IGFkZCB0aGUgbm9k ZXMgb2YgdGhlIGluaXRpYWwgc3RhdGUsCisJIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBhZGQg dGhlbSBoZXJlLiAgKi8KKworICAgICAgY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0 ICgmbWN0eC0+aW5wdXQsCisJCQkJICAgICAgcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5p bnB1dCkgLSAxLAorCQkJCSAgICAgIG1jdHgtPmVmbGFncyk7CisgICAgICBuZXh0X3N0YXRl ID0gbWN0eC0+c3RhdGVfbG9nW2N1cl9pZHhdCisJPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRl eHQgKGVyciwgZGZhLCAmbmV4dF9ub2RlcywgY29udGV4dCk7CisgICAgICAvKiBXZSBkb24n dCBuZWVkIHRvIGNoZWNrIGVycm9ycyBoZXJlLCBzaW5jZSB0aGUgcmV0dXJuIHZhbHVlIG9m CisJIHRoaXMgZnVuY3Rpb24gaXMgbmV4dF9zdGF0ZSBhbmQgRVJSIGlzIGFscmVhZHkgc2V0 LiAgKi8KKworICAgICAgaWYgKHRhYmxlX25vZGVzICE9IE5VTEwpCisJcmVfbm9kZV9zZXRf ZnJlZSAoJm5leHRfbm9kZXMpOworICAgIH0KKworICBpZiAoQkUgKGRmYS0+bmJhY2tyZWYs IDApICYmIG5leHRfc3RhdGUgIT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBDaGVjayBPUF9P UEVOX1NVQkVYUCBpbiB0aGUgY3VycmVudCBzdGF0ZSBpbiBjYXNlIHRoYXQgd2UgdXNlIHRo ZW0KKwkgbGF0ZXIuICBXZSBtdXN0IGNoZWNrIHRoZW0gaGVyZSwgc2luY2UgdGhlIGJhY2sg cmVmZXJlbmNlcyBpbiB0aGUKKwkgbmV4dCBzdGF0ZSBtaWdodCB1c2UgdGhlbS4gICovCisg ICAgICAqZXJyID0gY2hlY2tfc3ViZXhwX21hdGNoaW5nX3RvcCAobWN0eCwgJm5leHRfc3Rh dGUtPm5vZGVzLAorCQkJCQljdXJfaWR4KTsKKyAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdf Tk9FUlJPUiwgMCkpCisJcmV0dXJuIE5VTEw7CisKKyAgICAgIC8qIElmIHRoZSBuZXh0IHN0 YXRlIGhhcyBiYWNrIHJlZmVyZW5jZXMuICAqLworICAgICAgaWYgKG5leHRfc3RhdGUtPmhh c19iYWNrcmVmKQorCXsKKwkgICplcnIgPSB0cmFuc2l0X3N0YXRlX2JrcmVmIChtY3R4LCAm bmV4dF9zdGF0ZS0+bm9kZXMpOworCSAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAw KSkKKwkgICAgcmV0dXJuIE5VTEw7CisJICBuZXh0X3N0YXRlID0gbWN0eC0+c3RhdGVfbG9n W2N1cl9pZHhdOworCX0KKyAgICB9CisKKyAgcmV0dXJuIG5leHRfc3RhdGU7Cit9CisKKy8q IFNraXAgYnl0ZXMgaW4gdGhlIGlucHV0IHRoYXQgY29ycmVzcG9uZCB0byBwYXJ0IG9mIGEK KyAgIG11bHRpLWJ5dGUgbWF0Y2gsIHRoZW4gbG9vayBpbiB0aGUgbG9nIGZvciBhIHN0YXRl CisgICBmcm9tIHdoaWNoIHRvIHJlc3RhcnQgbWF0Y2hpbmcuICAqLworc3RhdGljIHJlX2Rm YXN0YXRlX3QgKgorZmluZF9yZWNvdmVyX3N0YXRlIChyZWdfZXJyY29kZV90ICplcnIsIHJl X21hdGNoX2NvbnRleHRfdCAqbWN0eCkKK3sKKyAgcmVfZGZhc3RhdGVfdCAqY3VyX3N0YXRl OworICBkbworICAgIHsKKyAgICAgIElkeCBtYXggPSBtY3R4LT5zdGF0ZV9sb2dfdG9wOwor ICAgICAgSWR4IGN1cl9zdHJfaWR4ID0gcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1 dCk7CisKKyAgICAgIGRvCisJeworCSAgaWYgKCsrY3VyX3N0cl9pZHggPiBtYXgpCisJICAg IHJldHVybiBOVUxMOworCSAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKCZtY3R4LT5pbnB1dCwg MSk7CisJfQorICAgICAgd2hpbGUgKG1jdHgtPnN0YXRlX2xvZ1tjdXJfc3RyX2lkeF0gPT0g TlVMTCk7CisKKyAgICAgIGN1cl9zdGF0ZSA9IG1lcmdlX3N0YXRlX3dpdGhfbG9nIChlcnIs IG1jdHgsIE5VTEwpOworICAgIH0KKyAgd2hpbGUgKCplcnIgPT0gUkVHX05PRVJST1IgJiYg Y3VyX3N0YXRlID09IE5VTEwpOworICByZXR1cm4gY3VyX3N0YXRlOworfQorCisvKiBIZWxw ZXIgZnVuY3Rpb25zIGZvciB0cmFuc2l0X3N0YXRlLiAgKi8KKworLyogRnJvbSB0aGUgbm9k ZSBzZXQgQ1VSX05PREVTLCBwaWNrIHVwIHRoZSBub2RlcyB3aG9zZSB0eXBlcyBhcmUKKyAg IE9QX09QRU5fU1VCRVhQIGFuZCB3aGljaCBoYXZlIGNvcnJlc3BvbmRpbmcgYmFjayByZWZl cmVuY2VzIGluIHRoZSByZWd1bGFyCisgICBleHByZXNzaW9uLiBBbmQgcmVnaXN0ZXIgdGhl bSB0byB1c2UgdGhlbSBsYXRlciBmb3IgZXZhbHVhdGluZyB0aGUKKyAgIGNvcnJlc3BvbmRp bmcgYmFjayByZWZlcmVuY2VzLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2NoZWNr X3N1YmV4cF9tYXRjaGluZ190b3AgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgcmVfbm9k ZV9zZXQgKmN1cl9ub2RlcywKKwkJCSAgIElkeCBzdHJfaWR4KQoreworICBjb25zdCByZV9k ZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICBJZHggbm9kZV9pZHg7CisgIHJlZ19l cnJjb2RlX3QgZXJyOworCisgIC8qIFRPRE86IFRoaXMgaXNuJ3QgZWZmaWNpZW50LgorCSAg IEJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgbW9yZSB0aGFuIG9uZSBub2RlcyB3aG9zZSB0eXBl cyBhcmUKKwkgICBPUF9PUEVOX1NVQkVYUCBhbmQgd2hvc2UgaW5kZXggaXMgU1VCRVhQX0lE WCwgd2UgbXVzdCBjaGVjayBhbGwKKwkgICBub2Rlcy4KKwkgICBFLmcuIFJFOiAoYSl7Mn0g ICovCisgIGZvciAobm9kZV9pZHggPSAwOyBub2RlX2lkeCA8IGN1cl9ub2Rlcy0+bmVsZW07 ICsrbm9kZV9pZHgpCisgICAgeworICAgICAgSWR4IG5vZGUgPSBjdXJfbm9kZXMtPmVsZW1z W25vZGVfaWR4XTsKKyAgICAgIGlmIChkZmEtPm5vZGVzW25vZGVdLnR5cGUgPT0gT1BfT1BF Tl9TVUJFWFAKKwkgICYmIGRmYS0+bm9kZXNbbm9kZV0ub3ByLmlkeCA8IEJJVFNFVF9XT1JE X0JJVFMKKwkgICYmIChkZmEtPnVzZWRfYmtyZWZfbWFwCisJICAgICAgJiAoKGJpdHNldF93 b3JkX3QpIDEgPDwgZGZhLT5ub2Rlc1tub2RlXS5vcHIuaWR4KSkpCisJeworCSAgZXJyID0g bWF0Y2hfY3R4X2FkZF9zdWJ0b3AgKG1jdHgsIG5vZGUsIHN0cl9pZHgpOworCSAgaWYgKEJF IChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gZXJyOworCX0KKyAgICB9 CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworI2lmIDAKKy8qIFJldHVybiB0aGUgbmV4 dCBzdGF0ZSB0byB3aGljaCB0aGUgY3VycmVudCBzdGF0ZSBTVEFURSB3aWxsIHRyYW5zaXQg YnkKKyAgIGFjY2VwdGluZyB0aGUgY3VycmVudCBpbnB1dCBieXRlLiAgKi8KKworc3RhdGlj IHJlX2RmYXN0YXRlX3QgKgordHJhbnNpdF9zdGF0ZV9zYiAocmVnX2VycmNvZGVfdCAqZXJy LCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCSAgcmVfZGZhc3RhdGVfdCAqc3RhdGUp Cit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIHJlX25v ZGVfc2V0IG5leHRfbm9kZXM7CisgIHJlX2RmYXN0YXRlX3QgKm5leHRfc3RhdGU7CisgIElk eCBub2RlX2NudCwgY3VyX3N0cl9pZHggPSByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlu cHV0KTsKKyAgdW5zaWduZWQgaW50IGNvbnRleHQ7CisKKyAgKmVyciA9IHJlX25vZGVfc2V0 X2FsbG9jICgmbmV4dF9ub2Rlcywgc3RhdGUtPm5vZGVzLm5lbGVtICsgMSk7CisgIGlmIChC RSAoKmVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIE5VTEw7CisgIGZvciAo bm9kZV9jbnQgPSAwOyBub2RlX2NudCA8IHN0YXRlLT5ub2Rlcy5uZWxlbTsgKytub2RlX2Nu dCkKKyAgICB7CisgICAgICBJZHggY3VyX25vZGUgPSBzdGF0ZS0+bm9kZXMuZWxlbXNbbm9k ZV9jbnRdOworICAgICAgaWYgKGNoZWNrX25vZGVfYWNjZXB0IChtY3R4LCBkZmEtPm5vZGVz ICsgY3VyX25vZGUsIGN1cl9zdHJfaWR4KSkKKwl7CisJICAqZXJyID0gcmVfbm9kZV9zZXRf bWVyZ2UgKCZuZXh0X25vZGVzLAorCQkJCSAgICBkZmEtPmVjbG9zdXJlcyArIGRmYS0+bmV4 dHNbY3VyX25vZGVdKTsKKwkgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJ ICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICAgICAg cmV0dXJuIE5VTEw7CisJICAgIH0KKwl9CisgICAgfQorICBjb250ZXh0ID0gcmVfc3RyaW5n X2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwgY3VyX3N0cl9pZHgsIG1jdHgtPmVmbGFncyk7 CisgIG5leHRfc3RhdGUgPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKGVyciwgZGZhLCAm bmV4dF9ub2RlcywgY29udGV4dCk7CisgIC8qIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZXJy b3JzIGhlcmUsIHNpbmNlIHRoZSByZXR1cm4gdmFsdWUgb2YKKyAgICAgdGhpcyBmdW5jdGlv biBpcyBuZXh0X3N0YXRlIGFuZCBFUlIgaXMgYWxyZWFkeSBzZXQuICAqLworCisgIHJlX25v ZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKyAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKCZt Y3R4LT5pbnB1dCwgMSk7CisgIHJldHVybiBuZXh0X3N0YXRlOworfQorI2VuZGlmCisKKyNp ZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIHJlZ19lcnJjb2RlX3QKK3RyYW5zaXRfc3Rh dGVfbWIgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgcmVfZGZhc3RhdGVfdCAqcHN0YXRl KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZWdf ZXJyY29kZV90IGVycjsKKyAgSWR4IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IHBzdGF0ZS0+ bm9kZXMubmVsZW07ICsraSkKKyAgICB7CisgICAgICByZV9ub2RlX3NldCBkZXN0X25vZGVz LCAqbmV3X25vZGVzOworICAgICAgSWR4IGN1cl9ub2RlX2lkeCA9IHBzdGF0ZS0+bm9kZXMu ZWxlbXNbaV07CisgICAgICBpbnQgbmFjY2VwdGVkOworICAgICAgSWR4IGRlc3RfaWR4Owor ICAgICAgdW5zaWduZWQgaW50IGNvbnRleHQ7CisgICAgICByZV9kZmFzdGF0ZV90ICpkZXN0 X3N0YXRlOworCisgICAgICBpZiAoIWRmYS0+bm9kZXNbY3VyX25vZGVfaWR4XS5hY2NlcHRf bWIpCisJY29udGludWU7CisKKyAgICAgIGlmIChkZmEtPm5vZGVzW2N1cl9ub2RlX2lkeF0u Y29uc3RyYWludCkKKwl7CisJICBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZt Y3R4LT5pbnB1dCwKKwkJCQkJICByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KSwK KwkJCQkJICBtY3R4LT5lZmxhZ3MpOworCSAgaWYgKE5PVF9TQVRJU0ZZX05FWFRfQ09OU1RS QUlOVCAoZGZhLT5ub2Rlc1tjdXJfbm9kZV9pZHhdLmNvbnN0cmFpbnQsCisJCQkJCSAgIGNv bnRleHQpKQorCSAgICBjb250aW51ZTsKKwl9CisKKyAgICAgIC8qIEhvdyBtYW55IGJ5dGVz IHRoZSBub2RlIGNhbiBhY2NlcHQ/ICAqLworICAgICAgbmFjY2VwdGVkID0gY2hlY2tfbm9k ZV9hY2NlcHRfYnl0ZXMgKGRmYSwgY3VyX25vZGVfaWR4LCAmbWN0eC0+aW5wdXQsCisJCQkJ CSAgIHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpKTsKKyAgICAgIGlmIChuYWNj ZXB0ZWQgPT0gMCkKKwljb250aW51ZTsKKworICAgICAgLyogVGhlIG5vZGUgY2FuIGFjY2Vw dHMgJ25hY2NlcHRlZCcgYnl0ZXMuICAqLworICAgICAgZGVzdF9pZHggPSByZV9zdHJpbmdf Y3VyX2lkeCAoJm1jdHgtPmlucHV0KSArIG5hY2NlcHRlZDsKKyAgICAgIG1jdHgtPm1heF9t Yl9lbGVtX2xlbiA9ICgobWN0eC0+bWF4X21iX2VsZW1fbGVuIDwgbmFjY2VwdGVkKSA/IG5h Y2NlcHRlZAorCQkJICAgICAgIDogbWN0eC0+bWF4X21iX2VsZW1fbGVuKTsKKyAgICAgIGVy ciA9IGNsZWFuX3N0YXRlX2xvZ19pZl9uZWVkZWQgKG1jdHgsIGRlc3RfaWR4KTsKKyAgICAg IGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gZXJyOworI2lmZGVm IERFQlVHCisgICAgICBhc3NlcnQgKGRmYS0+bmV4dHNbY3VyX25vZGVfaWR4XSAhPSAtMSk7 CisjZW5kaWYKKyAgICAgIG5ld19ub2RlcyA9IGRmYS0+ZWNsb3N1cmVzICsgZGZhLT5uZXh0 c1tjdXJfbm9kZV9pZHhdOworCisgICAgICBkZXN0X3N0YXRlID0gbWN0eC0+c3RhdGVfbG9n W2Rlc3RfaWR4XTsKKyAgICAgIGlmIChkZXN0X3N0YXRlID09IE5VTEwpCisJZGVzdF9ub2Rl cyA9ICpuZXdfbm9kZXM7CisgICAgICBlbHNlCisJeworCSAgZXJyID0gcmVfbm9kZV9zZXRf aW5pdF91bmlvbiAoJmRlc3Rfbm9kZXMsCisJCQkJCWRlc3Rfc3RhdGUtPmVudHJhbmNlX25v ZGVzLCBuZXdfbm9kZXMpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQor CSAgICByZXR1cm4gZXJyOworCX0KKyAgICAgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4 dF9hdCAoJm1jdHgtPmlucHV0LCBkZXN0X2lkeCAtIDEsCisJCQkJICAgICAgbWN0eC0+ZWZs YWdzKTsKKyAgICAgIG1jdHgtPnN0YXRlX2xvZ1tkZXN0X2lkeF0KKwk9IHJlX2FjcXVpcmVf c3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmZGVzdF9ub2RlcywgY29udGV4dCk7CisgICAg ICBpZiAoZGVzdF9zdGF0ZSAhPSBOVUxMKQorCXJlX25vZGVfc2V0X2ZyZWUgKCZkZXN0X25v ZGVzKTsKKyAgICAgIGlmIChCRSAobWN0eC0+c3RhdGVfbG9nW2Rlc3RfaWR4XSA9PSBOVUxM ICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIGVycjsKKyAgICB9CisgIHJl dHVybiBSRUdfTk9FUlJPUjsKK30KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCitz dGF0aWMgcmVnX2VycmNvZGVfdAordHJhbnNpdF9zdGF0ZV9ia3JlZiAocmVfbWF0Y2hfY29u dGV4dF90ICptY3R4LCBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMpCit7CisgIGNvbnN0IHJl X2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIHJlZ19lcnJjb2RlX3QgZXJyOwor ICBJZHggaTsKKyAgSWR4IGN1cl9zdHJfaWR4ID0gcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4 LT5pbnB1dCk7CisKKyAgZm9yIChpID0gMDsgaSA8IG5vZGVzLT5uZWxlbTsgKytpKQorICAg IHsKKyAgICAgIElkeCBkZXN0X3N0cl9pZHgsIHByZXZfbmVsZW0sIGJrY19pZHg7CisgICAg ICBJZHggbm9kZV9pZHggPSBub2Rlcy0+ZWxlbXNbaV07CisgICAgICB1bnNpZ25lZCBpbnQg Y29udGV4dDsKKyAgICAgIGNvbnN0IHJlX3Rva2VuX3QgKm5vZGUgPSBkZmEtPm5vZGVzICsg bm9kZV9pZHg7CisgICAgICByZV9ub2RlX3NldCAqbmV3X2Rlc3Rfbm9kZXM7CisKKyAgICAg IC8qIENoZWNrIHdoZXRoZXIgJ25vZGUnIGlzIGEgYmFja3JlZmVyZW5jZSBvciBub3QuICAq LworICAgICAgaWYgKG5vZGUtPnR5cGUgIT0gT1BfQkFDS19SRUYpCisJY29udGludWU7CisK KyAgICAgIGlmIChub2RlLT5jb25zdHJhaW50KQorCXsKKwkgIGNvbnRleHQgPSByZV9zdHJp bmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBjdXJfc3RyX2lkeCwKKwkJCQkJICBtY3R4 LT5lZmxhZ3MpOworCSAgaWYgKE5PVF9TQVRJU0ZZX05FWFRfQ09OU1RSQUlOVCAobm9kZS0+ Y29uc3RyYWludCwgY29udGV4dCkpCisJICAgIGNvbnRpbnVlOworCX0KKworICAgICAgLyog J25vZGUnIGlzIGEgYmFja3JlZmVyZW5jZS4KKwkgQ2hlY2sgdGhlIHN1YnN0cmluZyB3aGlj aCB0aGUgc3Vic3RyaW5nIG1hdGNoZWQuICAqLworICAgICAgYmtjX2lkeCA9IG1jdHgtPm5i a3JlZl9lbnRzOworICAgICAgZXJyID0gZ2V0X3N1YmV4cCAobWN0eCwgbm9kZV9pZHgsIGN1 cl9zdHJfaWR4KTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwln b3RvIGZyZWVfcmV0dXJuOworCisgICAgICAvKiBBbmQgYWRkIHRoZSBlcHNpbG9uIGNsb3N1 cmVzICh3aGljaCBpcyAnbmV3X2Rlc3Rfbm9kZXMnKSBvZgorCSB0aGUgYmFja3JlZmVyZW5j ZSB0byBhcHByb3ByaWF0ZSBzdGF0ZV9sb2cuICAqLworI2lmZGVmIERFQlVHCisgICAgICBh c3NlcnQgKGRmYS0+bmV4dHNbbm9kZV9pZHhdICE9IC0xKTsKKyNlbmRpZgorICAgICAgZm9y ICg7IGJrY19pZHggPCBtY3R4LT5uYmtyZWZfZW50czsgKytia2NfaWR4KQorCXsKKwkgIElk eCBzdWJleHBfbGVuOworCSAgcmVfZGZhc3RhdGVfdCAqZGVzdF9zdGF0ZTsKKwkgIHN0cnVj dCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICpia3JlZl9lbnQ7CisJICBia3JlZl9lbnQgPSBt Y3R4LT5ia3JlZl9lbnRzICsgYmtjX2lkeDsKKwkgIGlmIChia3JlZl9lbnQtPm5vZGUgIT0g bm9kZV9pZHggfHwgYmtyZWZfZW50LT5zdHJfaWR4ICE9IGN1cl9zdHJfaWR4KQorCSAgICBj b250aW51ZTsKKwkgIHN1YmV4cF9sZW4gPSBia3JlZl9lbnQtPnN1YmV4cF90byAtIGJrcmVm X2VudC0+c3ViZXhwX2Zyb207CisJICBuZXdfZGVzdF9ub2RlcyA9IChzdWJleHBfbGVuID09 IDAKKwkJCSAgICA/IGRmYS0+ZWNsb3N1cmVzICsgZGZhLT5lZGVzdHNbbm9kZV9pZHhdLmVs ZW1zWzBdCisJCQkgICAgOiBkZmEtPmVjbG9zdXJlcyArIGRmYS0+bmV4dHNbbm9kZV9pZHhd KTsKKwkgIGRlc3Rfc3RyX2lkeCA9IChjdXJfc3RyX2lkeCArIGJrcmVmX2VudC0+c3ViZXhw X3RvCisJCQkgIC0gYmtyZWZfZW50LT5zdWJleHBfZnJvbSk7CisJICBjb250ZXh0ID0gcmVf c3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwgZGVzdF9zdHJfaWR4IC0gMSwKKwkJ CQkJICBtY3R4LT5lZmxhZ3MpOworCSAgZGVzdF9zdGF0ZSA9IG1jdHgtPnN0YXRlX2xvZ1tk ZXN0X3N0cl9pZHhdOworCSAgcHJldl9uZWxlbSA9ICgobWN0eC0+c3RhdGVfbG9nW2N1cl9z dHJfaWR4XSA9PSBOVUxMKSA/IDAKKwkJCTogbWN0eC0+c3RhdGVfbG9nW2N1cl9zdHJfaWR4 XS0+bm9kZXMubmVsZW0pOworCSAgLyogQWRkICduZXdfZGVzdF9ub2RlJyB0byBzdGF0ZV9s b2cuICAqLworCSAgaWYgKGRlc3Rfc3RhdGUgPT0gTlVMTCkKKwkgICAgeworCSAgICAgIG1j dHgtPnN0YXRlX2xvZ1tkZXN0X3N0cl9pZHhdCisJCT0gcmVfYWNxdWlyZV9zdGF0ZV9jb250 ZXh0ICgmZXJyLCBkZmEsIG5ld19kZXN0X25vZGVzLAorCQkJCQkgICAgY29udGV4dCk7CisJ ICAgICAgaWYgKEJFIChtY3R4LT5zdGF0ZV9sb2dbZGVzdF9zdHJfaWR4XSA9PSBOVUxMCisJ CSAgICAgICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCWdvdG8gZnJlZV9yZXR1cm47 CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0IGRlc3Rfbm9k ZXM7CisJICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF91bmlvbiAoJmRlc3Rfbm9kZXMs CisJCQkJCSAgICBkZXN0X3N0YXRlLT5lbnRyYW5jZV9ub2RlcywKKwkJCQkJICAgIG5ld19k ZXN0X25vZGVzKTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJ CXsKKwkJICByZV9ub2RlX3NldF9mcmVlICgmZGVzdF9ub2Rlcyk7CisJCSAgZ290byBmcmVl X3JldHVybjsKKwkJfQorCSAgICAgIG1jdHgtPnN0YXRlX2xvZ1tkZXN0X3N0cl9pZHhdCisJ CT0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZkZXN0X25vZGVzLCBj b250ZXh0KTsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmZGVzdF9ub2Rlcyk7CisJICAg ICAgaWYgKEJFIChtY3R4LT5zdGF0ZV9sb2dbZGVzdF9zdHJfaWR4XSA9PSBOVUxMCisJCSAg ICAgICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCWdvdG8gZnJlZV9yZXR1cm47CisJ ICAgIH0KKwkgIC8qIFdlIG5lZWQgdG8gY2hlY2sgcmVjdXJzaXZlbHkgaWYgdGhlIGJhY2ty ZWZlcmVuY2UgY2FuIGVwc2lsb24KKwkgICAgIHRyYW5zaXQuICAqLworCSAgaWYgKHN1YmV4 cF9sZW4gPT0gMAorCSAgICAgICYmIG1jdHgtPnN0YXRlX2xvZ1tjdXJfc3RyX2lkeF0tPm5v ZGVzLm5lbGVtID4gcHJldl9uZWxlbSkKKwkgICAgeworCSAgICAgIGVyciA9IGNoZWNrX3N1 YmV4cF9tYXRjaGluZ190b3AgKG1jdHgsIG5ld19kZXN0X25vZGVzLAorCQkJCQkgICAgICAg Y3VyX3N0cl9pZHgpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkK KwkJZ290byBmcmVlX3JldHVybjsKKwkgICAgICBlcnIgPSB0cmFuc2l0X3N0YXRlX2JrcmVm IChtY3R4LCBuZXdfZGVzdF9ub2Rlcyk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05P RVJST1IsIDApKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCSAgICB9CisJfQorICAgIH0KKyAg ZXJyID0gUkVHX05PRVJST1I7CisgZnJlZV9yZXR1cm46CisgIHJldHVybiBlcnI7Cit9CisK Ky8qIEVudW1lcmF0ZSBhbGwgdGhlIGNhbmRpZGF0ZXMgd2hpY2ggdGhlIGJhY2tyZWZlcmVu Y2UgQktSRUZfTk9ERSBjYW4gbWF0Y2gKKyAgIGF0IEJLUkVGX1NUUl9JRFgsIGFuZCByZWdp c3RlciB0aGVtIGJ5IG1hdGNoX2N0eF9hZGRfZW50cnkoKS4KKyAgIE5vdGUgdGhhdCB3ZSBt aWdodCBjb2xsZWN0IGluYXBwcm9wcmlhdGUgY2FuZGlkYXRlcyBoZXJlLgorICAgSG93ZXZl ciwgdGhlIGNvc3Qgb2YgY2hlY2tpbmcgdGhlbSBzdHJpY3RseSBoZXJlIGlzIHRvbyBoaWdo LCB0aGVuIHdlCisgICBkZWxheSB0aGVzZSBjaGVja2luZyBmb3IgcHJ1bmVfaW1wb3NzaWJs ZV9ub2RlcygpLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK19fYXR0cmlidXRlX3dh cm5fdW51c2VkX3Jlc3VsdF9fCitnZXRfc3ViZXhwIChyZV9tYXRjaF9jb250ZXh0X3QgKm1j dHgsIElkeCBia3JlZl9ub2RlLCBJZHggYmtyZWZfc3RyX2lkeCkKK3sKKyAgY29uc3QgcmVf ZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgSWR4IHN1YmV4cF9udW0sIHN1Yl90 b3BfaWR4OworICBjb25zdCBjaGFyICpidWYgPSAoY29uc3QgY2hhciAqKSByZV9zdHJpbmdf Z2V0X2J1ZmZlciAoJm1jdHgtPmlucHV0KTsKKyAgLyogUmV0dXJuIGlmIHdlIGhhdmUgYWxy ZWFkeSBjaGVja2VkIEJLUkVGX05PREUgYXQgQktSRUZfU1RSX0lEWC4gICovCisgIElkeCBj YWNoZV9pZHggPSBzZWFyY2hfY3VyX2JrcmVmX2VudHJ5IChtY3R4LCBia3JlZl9zdHJfaWR4 KTsKKyAgaWYgKGNhY2hlX2lkeCAhPSAtMSkKKyAgICB7CisgICAgICBjb25zdCBzdHJ1Y3Qg cmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqZW50cnkKKwk9IG1jdHgtPmJrcmVmX2VudHMgKyBj YWNoZV9pZHg7CisgICAgICBkbworCWlmIChlbnRyeS0+bm9kZSA9PSBia3JlZl9ub2RlKQor CSAgcmV0dXJuIFJFR19OT0VSUk9SOyAvKiBXZSBhbHJlYWR5IGNoZWNrZWQgaXQuICAqLwor ICAgICAgd2hpbGUgKGVudHJ5KystPm1vcmUpOworICAgIH0KKworICBzdWJleHBfbnVtID0g ZGZhLT5ub2Rlc1tia3JlZl9ub2RlXS5vcHIuaWR4OworCisgIC8qIEZvciBlYWNoIHN1YiBl eHByZXNzaW9uICAqLworICBmb3IgKHN1Yl90b3BfaWR4ID0gMDsgc3ViX3RvcF9pZHggPCBt Y3R4LT5uc3ViX3RvcHM7ICsrc3ViX3RvcF9pZHgpCisgICAgeworICAgICAgcmVnX2VycmNv ZGVfdCBlcnI7CisgICAgICByZV9zdWJfbWF0Y2hfdG9wX3QgKnN1Yl90b3AgPSBtY3R4LT5z dWJfdG9wc1tzdWJfdG9wX2lkeF07CisgICAgICByZV9zdWJfbWF0Y2hfbGFzdF90ICpzdWJf bGFzdDsKKyAgICAgIElkeCBzdWJfbGFzdF9pZHgsIHNsX3N0ciwgYmtyZWZfc3RyX29mZjsK KworICAgICAgaWYgKGRmYS0+bm9kZXNbc3ViX3RvcC0+bm9kZV0ub3ByLmlkeCAhPSBzdWJl eHBfbnVtKQorCWNvbnRpbnVlOyAvKiBJdCBpc24ndCByZWxhdGVkLiAgKi8KKworICAgICAg c2xfc3RyID0gc3ViX3RvcC0+c3RyX2lkeDsKKyAgICAgIGJrcmVmX3N0cl9vZmYgPSBia3Jl Zl9zdHJfaWR4OworICAgICAgLyogQXQgZmlyc3QsIGNoZWNrIHRoZSBsYXN0IG5vZGUgb2Yg c3ViIGV4cHJlc3Npb25zIHdlIGFscmVhZHkKKwkgZXZhbHVhdGVkLiAgKi8KKyAgICAgIGZv ciAoc3ViX2xhc3RfaWR4ID0gMDsgc3ViX2xhc3RfaWR4IDwgc3ViX3RvcC0+bmxhc3RzOyAr K3N1Yl9sYXN0X2lkeCkKKwl7CisJICByZWdvZmZfdCBzbF9zdHJfZGlmZjsKKwkgIHN1Yl9s YXN0ID0gc3ViX3RvcC0+bGFzdHNbc3ViX2xhc3RfaWR4XTsKKwkgIHNsX3N0cl9kaWZmID0g c3ViX2xhc3QtPnN0cl9pZHggLSBzbF9zdHI7CisJICAvKiBUaGUgbWF0Y2hlZCBzdHJpbmcg YnkgdGhlIHN1YiBleHByZXNzaW9uIG1hdGNoIHdpdGggdGhlIHN1YnN0cmluZworCSAgICAg YXQgdGhlIGJhY2sgcmVmZXJlbmNlPyAgKi8KKwkgIGlmIChzbF9zdHJfZGlmZiA+IDApCisJ ICAgIHsKKwkgICAgICBpZiAoQkUgKGJrcmVmX3N0cl9vZmYgKyBzbF9zdHJfZGlmZiA+IG1j dHgtPmlucHV0LnZhbGlkX2xlbiwgMCkpCisJCXsKKwkJICAvKiBOb3QgZW5vdWdoIGNoYXJz IGZvciBhIHN1Y2Nlc3NmdWwgbWF0Y2guICAqLworCQkgIGlmIChia3JlZl9zdHJfb2ZmICsg c2xfc3RyX2RpZmYgPiBtY3R4LT5pbnB1dC5sZW4pCisJCSAgICBicmVhazsKKworCQkgIGVy ciA9IGNsZWFuX3N0YXRlX2xvZ19pZl9uZWVkZWQgKG1jdHgsCisJCQkJCQkgICBia3JlZl9z dHJfb2ZmCisJCQkJCQkgICArIHNsX3N0cl9kaWZmKTsKKwkJICBpZiAoQkUgKGVyciAhPSBS RUdfTk9FUlJPUiwgMCkpCisJCSAgICByZXR1cm4gZXJyOworCQkgIGJ1ZiA9IChjb25zdCBj aGFyICopIHJlX3N0cmluZ19nZXRfYnVmZmVyICgmbWN0eC0+aW5wdXQpOworCQl9CisJICAg ICAgaWYgKG1lbWNtcCAoYnVmICsgYmtyZWZfc3RyX29mZiwgYnVmICsgc2xfc3RyLCBzbF9z dHJfZGlmZikgIT0gMCkKKwkJLyogV2UgZG9uJ3QgbmVlZCB0byBzZWFyY2ggdGhpcyBzdWIg ZXhwcmVzc2lvbiBhbnkgbW9yZS4gICovCisJCWJyZWFrOworCSAgICB9CisJICBia3JlZl9z dHJfb2ZmICs9IHNsX3N0cl9kaWZmOworCSAgc2xfc3RyICs9IHNsX3N0cl9kaWZmOworCSAg ZXJyID0gZ2V0X3N1YmV4cF9zdWIgKG1jdHgsIHN1Yl90b3AsIHN1Yl9sYXN0LCBia3JlZl9u b2RlLAorCQkJCWJrcmVmX3N0cl9pZHgpOworCisJICAvKiBSZWxvYWQgYnVmLCBzaW5jZSB0 aGUgcHJlY2VkaW5nIGNhbGwgbWlnaHQgaGF2ZSByZWFsbG9jYXRlZAorCSAgICAgdGhlIGJ1 ZmZlci4gICovCisJICBidWYgPSAoY29uc3QgY2hhciAqKSByZV9zdHJpbmdfZ2V0X2J1ZmZl ciAoJm1jdHgtPmlucHV0KTsKKworCSAgaWYgKGVyciA9PSBSRUdfTk9NQVRDSCkKKwkgICAg Y29udGludWU7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJl dHVybiBlcnI7CisJfQorCisgICAgICBpZiAoc3ViX2xhc3RfaWR4IDwgc3ViX3RvcC0+bmxh c3RzKQorCWNvbnRpbnVlOworICAgICAgaWYgKHN1Yl9sYXN0X2lkeCA+IDApCisJKytzbF9z dHI7CisgICAgICAvKiBUaGVuLCBzZWFyY2ggZm9yIHRoZSBvdGhlciBsYXN0IG5vZGVzIG9m IHRoZSBzdWIgZXhwcmVzc2lvbi4gICovCisgICAgICBmb3IgKDsgc2xfc3RyIDw9IGJrcmVm X3N0cl9pZHg7ICsrc2xfc3RyKQorCXsKKwkgIElkeCBjbHNfbm9kZTsKKwkgIHJlZ29mZl90 IHNsX3N0cl9vZmY7CisJICBjb25zdCByZV9ub2RlX3NldCAqbm9kZXM7CisJICBzbF9zdHJf b2ZmID0gc2xfc3RyIC0gc3ViX3RvcC0+c3RyX2lkeDsKKwkgIC8qIFRoZSBtYXRjaGVkIHN0 cmluZyBieSB0aGUgc3ViIGV4cHJlc3Npb24gbWF0Y2ggd2l0aCB0aGUgc3Vic3RyaW5nCisJ ICAgICBhdCB0aGUgYmFjayByZWZlcmVuY2U/ICAqLworCSAgaWYgKHNsX3N0cl9vZmYgPiAw KQorCSAgICB7CisJICAgICAgaWYgKEJFIChia3JlZl9zdHJfb2ZmID49IG1jdHgtPmlucHV0 LnZhbGlkX2xlbiwgMCkpCisJCXsKKwkJICAvKiBJZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0 aGUgaW5wdXQsIHdlIGNhbm5vdCBtYXRjaC4gICovCisJCSAgaWYgKGJrcmVmX3N0cl9vZmYg Pj0gbWN0eC0+aW5wdXQubGVuKQorCQkgICAgYnJlYWs7CisKKwkJICBlcnIgPSBleHRlbmRf YnVmZmVycyAobWN0eCwgYmtyZWZfc3RyX29mZiArIDEpOworCQkgIGlmIChCRSAoZXJyICE9 IFJFR19OT0VSUk9SLCAwKSkKKwkJICAgIHJldHVybiBlcnI7CisKKwkJICBidWYgPSAoY29u c3QgY2hhciAqKSByZV9zdHJpbmdfZ2V0X2J1ZmZlciAoJm1jdHgtPmlucHV0KTsKKwkJfQor CSAgICAgIGlmIChidWYgW2JrcmVmX3N0cl9vZmYrK10gIT0gYnVmW3NsX3N0ciAtIDFdKQor CQlicmVhazsgLyogV2UgZG9uJ3QgbmVlZCB0byBzZWFyY2ggdGhpcyBzdWIgZXhwcmVzc2lv bgorCQkJICBhbnkgbW9yZS4gICovCisJICAgIH0KKwkgIGlmIChtY3R4LT5zdGF0ZV9sb2db c2xfc3RyXSA9PSBOVUxMKQorCSAgICBjb250aW51ZTsKKwkgIC8qIERvZXMgdGhpcyBzdGF0 ZSBoYXZlIGEgJyknIG9mIHRoZSBzdWIgZXhwcmVzc2lvbj8gICovCisJICBub2RlcyA9ICZt Y3R4LT5zdGF0ZV9sb2dbc2xfc3RyXS0+bm9kZXM7CisJICBjbHNfbm9kZSA9IGZpbmRfc3Vi ZXhwX25vZGUgKGRmYSwgbm9kZXMsIHN1YmV4cF9udW0sCisJCQkJICAgICAgIE9QX0NMT1NF X1NVQkVYUCk7CisJICBpZiAoY2xzX25vZGUgPT0gLTEpCisJICAgIGNvbnRpbnVlOyAvKiBO by4gICovCisJICBpZiAoc3ViX3RvcC0+cGF0aCA9PSBOVUxMKQorCSAgICB7CisJICAgICAg c3ViX3RvcC0+cGF0aCA9IGNhbGxvYyAoc2l6ZW9mIChzdGF0ZV9hcnJheV90KSwKKwkJCQkg ICAgICBzbF9zdHIgLSBzdWJfdG9wLT5zdHJfaWR4ICsgMSk7CisJICAgICAgaWYgKHN1Yl90 b3AtPnBhdGggPT0gTlVMTCkKKwkJcmV0dXJuIFJFR19FU1BBQ0U7CisJICAgIH0KKwkgIC8q IENhbiB0aGUgT1BfT1BFTl9TVUJFWFAgbm9kZSBhcnJpdmUgdGhlIE9QX0NMT1NFX1NVQkVY UCBub2RlCisJICAgICBpbiB0aGUgY3VycmVudCBjb250ZXh0PyAgKi8KKwkgIGVyciA9IGNo ZWNrX2Fycml2YWwgKG1jdHgsIHN1Yl90b3AtPnBhdGgsIHN1Yl90b3AtPm5vZGUsCisJCQkg ICAgICAgc3ViX3RvcC0+c3RyX2lkeCwgY2xzX25vZGUsIHNsX3N0ciwKKwkJCSAgICAgICBP UF9DTE9TRV9TVUJFWFApOworCSAgaWYgKGVyciA9PSBSRUdfTk9NQVRDSCkKKwkgICAgICBj b250aW51ZTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgICBy ZXR1cm4gZXJyOworCSAgc3ViX2xhc3QgPSBtYXRjaF9jdHhfYWRkX3N1Ymxhc3QgKHN1Yl90 b3AsIGNsc19ub2RlLCBzbF9zdHIpOworCSAgaWYgKEJFIChzdWJfbGFzdCA9PSBOVUxMLCAw KSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJICBlcnIgPSBnZXRfc3ViZXhwX3N1YiAo bWN0eCwgc3ViX3RvcCwgc3ViX2xhc3QsIGJrcmVmX25vZGUsCisJCQkJYmtyZWZfc3RyX2lk eCk7CisJICBpZiAoZXJyID09IFJFR19OT01BVENIKQorCSAgICBjb250aW51ZTsKKwl9Cisg ICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbnMg Zm9yIGdldF9zdWJleHAoKS4gICovCisKKy8qIENoZWNrIFNVQl9MQVNUIGNhbiBhcnJpdmUg dG8gdGhlIGJhY2sgcmVmZXJlbmNlIEJLUkVGX05PREUgYXQgQktSRUZfU1RSLgorICAgSWYg aXQgY2FuIGFycml2ZSwgcmVnaXN0ZXIgdGhlIHN1YiBleHByZXNzaW9uIGV4cHJlc3NlZCB3 aXRoIFNVQl9UT1AKKyAgIGFuZCBTVUJfTEFTVC4gICovCisKK3N0YXRpYyByZWdfZXJyY29k ZV90CitnZXRfc3ViZXhwX3N1YiAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBjb25zdCBy ZV9zdWJfbWF0Y2hfdG9wX3QgKnN1Yl90b3AsCisJCXJlX3N1Yl9tYXRjaF9sYXN0X3QgKnN1 Yl9sYXN0LCBJZHggYmtyZWZfbm9kZSwgSWR4IGJrcmVmX3N0cikKK3sKKyAgcmVnX2VycmNv ZGVfdCBlcnI7CisgIElkeCB0b19pZHg7CisgIC8qIENhbiB0aGUgc3ViZXhwcmVzc2lvbiBh cnJpdmUgdGhlIGJhY2sgcmVmZXJlbmNlPyAgKi8KKyAgZXJyID0gY2hlY2tfYXJyaXZhbCAo bWN0eCwgJnN1Yl9sYXN0LT5wYXRoLCBzdWJfbGFzdC0+bm9kZSwKKwkJICAgICAgIHN1Yl9s YXN0LT5zdHJfaWR4LCBia3JlZl9ub2RlLCBia3JlZl9zdHIsCisJCSAgICAgICBPUF9PUEVO X1NVQkVYUCk7CisgIGlmIChlcnIgIT0gUkVHX05PRVJST1IpCisgICAgcmV0dXJuIGVycjsK KyAgZXJyID0gbWF0Y2hfY3R4X2FkZF9lbnRyeSAobWN0eCwgYmtyZWZfbm9kZSwgYmtyZWZf c3RyLCBzdWJfdG9wLT5zdHJfaWR4LAorCQkJICAgICBzdWJfbGFzdC0+c3RyX2lkeCk7Cisg IGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gZXJyOworICB0 b19pZHggPSBia3JlZl9zdHIgKyBzdWJfbGFzdC0+c3RyX2lkeCAtIHN1Yl90b3AtPnN0cl9p ZHg7CisgIHJldHVybiBjbGVhbl9zdGF0ZV9sb2dfaWZfbmVlZGVkIChtY3R4LCB0b19pZHgp OworfQorCisvKiBGaW5kIHRoZSBmaXJzdCBub2RlIHdoaWNoIGlzICcoJyBvciAnKScgYW5k IHdob3NlIGluZGV4IGlzIFNVQkVYUF9JRFguCisgICBTZWFyY2ggJygnIGlmIEZMX09QRU4s IG9yIHNlYXJjaCAnKScgb3RoZXJ3aXNlLgorICAgVE9ETzogVGhpcyBmdW5jdGlvbiBpc24n dCBlZmZpY2llbnQuLi4KKwkgQmVjYXVzZSB0aGVyZSBtaWdodCBiZSBtb3JlIHRoYW4gb25l IG5vZGVzIHdob3NlIHR5cGVzIGFyZQorCSBPUF9PUEVOX1NVQkVYUCBhbmQgd2hvc2UgaW5k ZXggaXMgU1VCRVhQX0lEWCwgd2UgbXVzdCBjaGVjayBhbGwKKwkgbm9kZXMuCisJIEUuZy4g UkU6IChhKXsyfSAgKi8KKworc3RhdGljIElkeAorZmluZF9zdWJleHBfbm9kZSAoY29uc3Qg cmVfZGZhX3QgKmRmYSwgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzLAorCQkgIElkeCBzdWJl eHBfaWR4LCBpbnQgdHlwZSkKK3sKKyAgSWR4IGNsc19pZHg7CisgIGZvciAoY2xzX2lkeCA9 IDA7IGNsc19pZHggPCBub2Rlcy0+bmVsZW07ICsrY2xzX2lkeCkKKyAgICB7CisgICAgICBJ ZHggY2xzX25vZGUgPSBub2Rlcy0+ZWxlbXNbY2xzX2lkeF07CisgICAgICBjb25zdCByZV90 b2tlbl90ICpub2RlID0gZGZhLT5ub2RlcyArIGNsc19ub2RlOworICAgICAgaWYgKG5vZGUt PnR5cGUgPT0gdHlwZQorCSAgJiYgbm9kZS0+b3ByLmlkeCA9PSBzdWJleHBfaWR4KQorCXJl dHVybiBjbHNfbm9kZTsKKyAgICB9CisgIHJldHVybiAtMTsKK30KKworLyogQ2hlY2sgd2hl dGhlciB0aGUgbm9kZSBUT1BfTk9ERSBhdCBUT1BfU1RSIGNhbiBhcnJpdmUgdG8gdGhlIG5v ZGUKKyAgIExBU1RfTk9ERSBhdCBMQVNUX1NUUi4gIFdlIHJlY29yZCB0aGUgcGF0aCBvbnRv IFBBVEggc2luY2UgaXQgd2lsbCBiZQorICAgaGVhdmlseSByZXVzZWQuCisgICBSZXR1cm4g UkVHX05PRVJST1IgaWYgaXQgY2FuIGFycml2ZSwgb3IgUkVHX05PTUFUQ0ggb3RoZXJ3aXNl LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK19fYXR0cmlidXRlX3dhcm5fdW51c2Vk X3Jlc3VsdF9fCitjaGVja19hcnJpdmFsIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHN0 YXRlX2FycmF5X3QgKnBhdGgsIElkeCB0b3Bfbm9kZSwKKwkgICAgICAgSWR4IHRvcF9zdHIs IElkeCBsYXN0X25vZGUsIElkeCBsYXN0X3N0ciwgaW50IHR5cGUpCit7CisgIGNvbnN0IHJl X2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIHJlZ19lcnJjb2RlX3QgZXJyID0g UkVHX05PRVJST1I7CisgIElkeCBzdWJleHBfbnVtLCBiYWNrdXBfY3VyX2lkeCwgc3RyX2lk eCwgbnVsbF9jbnQ7CisgIHJlX2RmYXN0YXRlX3QgKmN1cl9zdGF0ZSA9IE5VTEw7CisgIHJl X25vZGVfc2V0ICpjdXJfbm9kZXMsIG5leHRfbm9kZXM7CisgIHJlX2RmYXN0YXRlX3QgKipi YWNrdXBfc3RhdGVfbG9nOworICB1bnNpZ25lZCBpbnQgY29udGV4dDsKKworICBzdWJleHBf bnVtID0gZGZhLT5ub2Rlc1t0b3Bfbm9kZV0ub3ByLmlkeDsKKyAgLyogRXh0ZW5kIHRoZSBi dWZmZXIgaWYgd2UgbmVlZC4gICovCisgIGlmIChCRSAocGF0aC0+YWxsb2MgPCBsYXN0X3N0 ciArIG1jdHgtPm1heF9tYl9lbGVtX2xlbiArIDEsIDApKQorICAgIHsKKyAgICAgIHJlX2Rm YXN0YXRlX3QgKipuZXdfYXJyYXk7CisgICAgICBJZHggb2xkX2FsbG9jID0gcGF0aC0+YWxs b2M7CisgICAgICBJZHggaW5jcl9hbGxvYyA9IGxhc3Rfc3RyICsgbWN0eC0+bWF4X21iX2Vs ZW1fbGVuICsgMTsKKyAgICAgIElkeCBuZXdfYWxsb2M7CisgICAgICBpZiAoQkUgKElEWF9N QVggLSBvbGRfYWxsb2MgPCBpbmNyX2FsbG9jLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsK KyAgICAgIG5ld19hbGxvYyA9IG9sZF9hbGxvYyArIGluY3JfYWxsb2M7CisgICAgICBpZiAo QkUgKFNJWkVfTUFYIC8gc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopIDwgbmV3X2FsbG9jLCAw KSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIG5ld19hcnJheSA9IHJlX3JlYWxsb2Mg KHBhdGgtPmFycmF5LCByZV9kZmFzdGF0ZV90ICosIG5ld19hbGxvYyk7CisgICAgICBpZiAo QkUgKG5ld19hcnJheSA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAg IHBhdGgtPmFycmF5ID0gbmV3X2FycmF5OworICAgICAgcGF0aC0+YWxsb2MgPSBuZXdfYWxs b2M7CisgICAgICBtZW1zZXQgKG5ld19hcnJheSArIG9sZF9hbGxvYywgJ1wwJywKKwkgICAg ICBzaXplb2YgKHJlX2RmYXN0YXRlX3QgKikgKiAocGF0aC0+YWxsb2MgLSBvbGRfYWxsb2Mp KTsKKyAgICB9CisKKyAgc3RyX2lkeCA9IHBhdGgtPm5leHRfaWR4ID8gcGF0aC0+bmV4dF9p ZHggOiB0b3Bfc3RyOworCisgIC8qIFRlbXBvcmFyeSBtb2RpZnkgTUNUWC4gICovCisgIGJh Y2t1cF9zdGF0ZV9sb2cgPSBtY3R4LT5zdGF0ZV9sb2c7CisgIGJhY2t1cF9jdXJfaWR4ID0g bWN0eC0+aW5wdXQuY3VyX2lkeDsKKyAgbWN0eC0+c3RhdGVfbG9nID0gcGF0aC0+YXJyYXk7 CisgIG1jdHgtPmlucHV0LmN1cl9pZHggPSBzdHJfaWR4OworCisgIC8qIFNldHVwIGluaXRp YWwgbm9kZSBzZXQuICAqLworICBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZt Y3R4LT5pbnB1dCwgc3RyX2lkeCAtIDEsIG1jdHgtPmVmbGFncyk7CisgIGlmIChzdHJfaWR4 ID09IHRvcF9zdHIpCisgICAgeworICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8xICgm bmV4dF9ub2RlcywgdG9wX25vZGUpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJS T1IsIDApKQorCXJldHVybiBlcnI7CisgICAgICBlcnIgPSBjaGVja19hcnJpdmFsX2V4cGFu ZF9lY2wgKGRmYSwgJm5leHRfbm9kZXMsIHN1YmV4cF9udW0sIHR5cGUpOworICAgICAgaWYg KEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXsKKwkgIHJlX25vZGVfc2V0X2ZyZWUg KCZuZXh0X25vZGVzKTsKKwkgIHJldHVybiBlcnI7CisJfQorICAgIH0KKyAgZWxzZQorICAg IHsKKyAgICAgIGN1cl9zdGF0ZSA9IG1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XTsKKyAgICAg IGlmIChjdXJfc3RhdGUgJiYgY3VyX3N0YXRlLT5oYXNfYmFja3JlZikKKwl7CisJICBlcnIg PSByZV9ub2RlX3NldF9pbml0X2NvcHkgKCZuZXh0X25vZGVzLCAmY3VyX3N0YXRlLT5ub2Rl cyk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBl cnI7CisJfQorICAgICAgZWxzZQorCXJlX25vZGVfc2V0X2luaXRfZW1wdHkgKCZuZXh0X25v ZGVzKTsKKyAgICB9CisgIGlmIChzdHJfaWR4ID09IHRvcF9zdHIgfHwgKGN1cl9zdGF0ZSAm JiBjdXJfc3RhdGUtPmhhc19iYWNrcmVmKSkKKyAgICB7CisgICAgICBpZiAobmV4dF9ub2Rl cy5uZWxlbSkKKwl7CisJICBlcnIgPSBleHBhbmRfYmtyZWZfY2FjaGUgKG1jdHgsICZuZXh0 X25vZGVzLCBzdHJfaWR4LAorCQkJCSAgICBzdWJleHBfbnVtLCB0eXBlKTsKKwkgIGlmIChC RSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0 X2ZyZWUgKCZuZXh0X25vZGVzKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJfQor ICAgICAgY3VyX3N0YXRlID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEs ICZuZXh0X25vZGVzLCBjb250ZXh0KTsKKyAgICAgIGlmIChCRSAoY3VyX3N0YXRlID09IE5V TEwgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwl7CisJICByZV9ub2RlX3NldF9mcmVl ICgmbmV4dF9ub2Rlcyk7CisJICByZXR1cm4gZXJyOworCX0KKyAgICAgIG1jdHgtPnN0YXRl X2xvZ1tzdHJfaWR4XSA9IGN1cl9zdGF0ZTsKKyAgICB9CisKKyAgZm9yIChudWxsX2NudCA9 IDA7IHN0cl9pZHggPCBsYXN0X3N0ciAmJiBudWxsX2NudCA8PSBtY3R4LT5tYXhfbWJfZWxl bV9sZW47KQorICAgIHsKKyAgICAgIHJlX25vZGVfc2V0X2VtcHR5ICgmbmV4dF9ub2Rlcyk7 CisgICAgICBpZiAobWN0eC0+c3RhdGVfbG9nW3N0cl9pZHggKyAxXSkKKwl7CisJICBlcnIg PSByZV9ub2RlX3NldF9tZXJnZSAoJm5leHRfbm9kZXMsCisJCQkJICAgJm1jdHgtPnN0YXRl X2xvZ1tzdHJfaWR4ICsgMV0tPm5vZGVzKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VS Uk9SLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVz KTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJfQorICAgICAgaWYgKGN1cl9zdGF0 ZSkKKwl7CisJICBlcnIgPSBjaGVja19hcnJpdmFsX2FkZF9uZXh0X25vZGVzIChtY3R4LCBz dHJfaWR4LAorCQkJCQkgICAgICAmY3VyX3N0YXRlLT5ub25fZXBzX25vZGVzLAorCQkJCQkg ICAgICAmbmV4dF9ub2Rlcyk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkp CisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICAg ICAgcmV0dXJuIGVycjsKKwkgICAgfQorCX0KKyAgICAgICsrc3RyX2lkeDsKKyAgICAgIGlm IChuZXh0X25vZGVzLm5lbGVtKQorCXsKKwkgIGVyciA9IGNoZWNrX2Fycml2YWxfZXhwYW5k X2VjbCAoZGZhLCAmbmV4dF9ub2Rlcywgc3ViZXhwX251bSwgdHlwZSk7CisJICBpZiAoQkUg KGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9m cmVlICgmbmV4dF9ub2Rlcyk7CisJICAgICAgcmV0dXJuIGVycjsKKwkgICAgfQorCSAgZXJy ID0gZXhwYW5kX2JrcmVmX2NhY2hlIChtY3R4LCAmbmV4dF9ub2Rlcywgc3RyX2lkeCwKKwkJ CQkgICAgc3ViZXhwX251bSwgdHlwZSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJP UiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7 CisJICAgICAgcmV0dXJuIGVycjsKKwkgICAgfQorCX0KKyAgICAgIGNvbnRleHQgPSByZV9z dHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBzdHJfaWR4IC0gMSwgbWN0eC0+ZWZs YWdzKTsKKyAgICAgIGN1cl9zdGF0ZSA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVy ciwgZGZhLCAmbmV4dF9ub2RlcywgY29udGV4dCk7CisgICAgICBpZiAoQkUgKGN1cl9zdGF0 ZSA9PSBOVUxMICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJeworCSAgcmVfbm9kZV9z ZXRfZnJlZSAoJm5leHRfbm9kZXMpOworCSAgcmV0dXJuIGVycjsKKwl9CisgICAgICBtY3R4 LT5zdGF0ZV9sb2dbc3RyX2lkeF0gPSBjdXJfc3RhdGU7CisgICAgICBudWxsX2NudCA9IGN1 cl9zdGF0ZSA9PSBOVUxMID8gbnVsbF9jbnQgKyAxIDogMDsKKyAgICB9CisgIHJlX25vZGVf c2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKyAgY3VyX25vZGVzID0gKG1jdHgtPnN0YXRlX2xv Z1tsYXN0X3N0cl0gPT0gTlVMTCA/IE5VTEwKKwkgICAgICAgOiAmbWN0eC0+c3RhdGVfbG9n W2xhc3Rfc3RyXS0+bm9kZXMpOworICBwYXRoLT5uZXh0X2lkeCA9IHN0cl9pZHg7CisKKyAg LyogRml4IE1DVFguICAqLworICBtY3R4LT5zdGF0ZV9sb2cgPSBiYWNrdXBfc3RhdGVfbG9n OworICBtY3R4LT5pbnB1dC5jdXJfaWR4ID0gYmFja3VwX2N1cl9pZHg7CisKKyAgLyogVGhl biBjaGVjayB0aGUgY3VycmVudCBub2RlIHNldCBoYXMgdGhlIG5vZGUgTEFTVF9OT0RFLiAg Ki8KKyAgaWYgKGN1cl9ub2RlcyAhPSBOVUxMICYmIHJlX25vZGVfc2V0X2NvbnRhaW5zIChj dXJfbm9kZXMsIGxhc3Rfbm9kZSkpCisgICAgcmV0dXJuIFJFR19OT0VSUk9SOworCisgIHJl dHVybiBSRUdfTk9NQVRDSDsKK30KKworLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgY2hlY2tf YXJyaXZhbC4gICovCisKKy8qIENhbGN1bGF0ZSB0aGUgZGVzdGluYXRpb24gbm9kZXMgb2Yg Q1VSX05PREVTIGF0IFNUUl9JRFgsIGFuZCBhcHBlbmQgdGhlbQorICAgdG8gTkVYVF9OT0RF Uy4KKyAgIFRPRE86IFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byB0aGUgZnVuY3Rpb25z IHRyYW5zaXRfc3RhdGUqKCksCisJIGhvd2V2ZXIgdGhpcyBmdW5jdGlvbiBoYXMgbWFueSBh ZGRpdGlvbmFsIHdvcmtzLgorCSBDYW4ndCB3ZSB1bmlmeSB0aGVtPyAgKi8KKworc3RhdGlj IHJlZ19lcnJjb2RlX3QKK19fYXR0cmlidXRlX3dhcm5fdW51c2VkX3Jlc3VsdF9fCitjaGVj a19hcnJpdmFsX2FkZF9uZXh0X25vZGVzIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIElk eCBzdHJfaWR4LAorCQkJICAgICAgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywgcmVfbm9kZV9z ZXQgKm5leHRfbm9kZXMpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4 LT5kZmE7CisgIGJvb2wgb2s7CisgIElkeCBjdXJfaWR4OworI2lmZGVmIFJFX0VOQUJMRV9J MThOCisgIHJlZ19lcnJjb2RlX3QgZXJyID0gUkVHX05PRVJST1I7CisjZW5kaWYKKyAgcmVf bm9kZV9zZXQgdW5pb25fc2V0OworICByZV9ub2RlX3NldF9pbml0X2VtcHR5ICgmdW5pb25f c2V0KTsKKyAgZm9yIChjdXJfaWR4ID0gMDsgY3VyX2lkeCA8IGN1cl9ub2Rlcy0+bmVsZW07 ICsrY3VyX2lkeCkKKyAgICB7CisgICAgICBpbnQgbmFjY2VwdGVkID0gMDsKKyAgICAgIElk eCBjdXJfbm9kZSA9IGN1cl9ub2Rlcy0+ZWxlbXNbY3VyX2lkeF07CisjaWZkZWYgREVCVUcK KyAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlID0gZGZhLT5ub2Rlc1tjdXJfbm9kZV0udHlw ZTsKKyAgICAgIGFzc2VydCAoIUlTX0VQU0lMT05fTk9ERSAodHlwZSkpOworI2VuZGlmCisj aWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIC8qIElmIHRoZSBub2RlIG1heSBhY2NlcHQg Im11bHRpIGJ5dGUiLiAgKi8KKyAgICAgIGlmIChkZmEtPm5vZGVzW2N1cl9ub2RlXS5hY2Nl cHRfbWIpCisJeworCSAgbmFjY2VwdGVkID0gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGRm YSwgY3VyX25vZGUsICZtY3R4LT5pbnB1dCwKKwkJCQkJICAgICAgIHN0cl9pZHgpOworCSAg aWYgKG5hY2NlcHRlZCA+IDEpCisJICAgIHsKKwkgICAgICByZV9kZmFzdGF0ZV90ICpkZXN0 X3N0YXRlOworCSAgICAgIElkeCBuZXh0X25vZGUgPSBkZmEtPm5leHRzW2N1cl9ub2RlXTsK KwkgICAgICBJZHggbmV4dF9pZHggPSBzdHJfaWR4ICsgbmFjY2VwdGVkOworCSAgICAgIGRl c3Rfc3RhdGUgPSBtY3R4LT5zdGF0ZV9sb2dbbmV4dF9pZHhdOworCSAgICAgIHJlX25vZGVf c2V0X2VtcHR5ICgmdW5pb25fc2V0KTsKKwkgICAgICBpZiAoZGVzdF9zdGF0ZSkKKwkJewor CQkgIGVyciA9IHJlX25vZGVfc2V0X21lcmdlICgmdW5pb25fc2V0LCAmZGVzdF9zdGF0ZS0+ bm9kZXMpOworCQkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICAgIHsK KwkJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJnVuaW9uX3NldCk7CisJCSAgICAgIHJldHVy biBlcnI7CisJCSAgICB9CisJCX0KKwkgICAgICBvayA9IHJlX25vZGVfc2V0X2luc2VydCAo JnVuaW9uX3NldCwgbmV4dF9ub2RlKTsKKwkgICAgICBpZiAoQkUgKCEgb2ssIDApKQorCQl7 CisJCSAgcmVfbm9kZV9zZXRfZnJlZSAoJnVuaW9uX3NldCk7CisJCSAgcmV0dXJuIFJFR19F U1BBQ0U7CisJCX0KKwkgICAgICBtY3R4LT5zdGF0ZV9sb2dbbmV4dF9pZHhdID0gcmVfYWNx dWlyZV9zdGF0ZSAoJmVyciwgZGZhLAorCQkJCQkJCSAgICAmdW5pb25fc2V0KTsKKwkgICAg ICBpZiAoQkUgKG1jdHgtPnN0YXRlX2xvZ1tuZXh0X2lkeF0gPT0gTlVMTAorCQkgICAgICAm JiBlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQl7CisJCSAgcmVfbm9kZV9zZXRfZnJlZSAo JnVuaW9uX3NldCk7CisJCSAgcmV0dXJuIGVycjsKKwkJfQorCSAgICB9CisJfQorI2VuZGlm IC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgICBpZiAobmFjY2VwdGVkCisJICB8fCBjaGVj a19ub2RlX2FjY2VwdCAobWN0eCwgZGZhLT5ub2RlcyArIGN1cl9ub2RlLCBzdHJfaWR4KSkK Kwl7CisJICBvayA9IHJlX25vZGVfc2V0X2luc2VydCAobmV4dF9ub2RlcywgZGZhLT5uZXh0 c1tjdXJfbm9kZV0pOworCSAgaWYgKEJFICghIG9rLCAwKSkKKwkgICAgeworCSAgICAgIHJl X25vZGVfc2V0X2ZyZWUgKCZ1bmlvbl9zZXQpOworCSAgICAgIHJldHVybiBSRUdfRVNQQUNF OworCSAgICB9CisJfQorICAgIH0KKyAgcmVfbm9kZV9zZXRfZnJlZSAoJnVuaW9uX3NldCk7 CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogRm9yIGFsbCB0aGUgbm9kZXMgaW4g Q1VSX05PREVTLCBhZGQgdGhlIGVwc2lsb24gY2xvc3VyZXMgb2YgdGhlbSB0bworICAgQ1VS X05PREVTLCBob3dldmVyIGV4Y2x1ZGUgdGhlIG5vZGVzIHdoaWNoIGFyZToKKyAgICAtIGlu c2lkZSB0aGUgc3ViIGV4cHJlc3Npb24gd2hvc2UgbnVtYmVyIGlzIEVYX1NVQkVYUCwgaWYg RkxfT1BFTi4KKyAgICAtIG91dCBvZiB0aGUgc3ViIGV4cHJlc3Npb24gd2hvc2UgbnVtYmVy IGlzIEVYX1NVQkVYUCwgaWYgIUZMX09QRU4uCisqLworCitzdGF0aWMgcmVnX2VycmNvZGVf dAorY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsIChjb25zdCByZV9kZmFfdCAqZGZhLCByZV9u b2RlX3NldCAqY3VyX25vZGVzLAorCQkJICBJZHggZXhfc3ViZXhwLCBpbnQgdHlwZSkKK3sK KyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIElkeCBpZHgsIG91dHNpZGVfbm9kZTsKKyAgcmVf bm9kZV9zZXQgbmV3X25vZGVzOworI2lmZGVmIERFQlVHCisgIGFzc2VydCAoY3VyX25vZGVz LT5uZWxlbSk7CisjZW5kaWYKKyAgZXJyID0gcmVfbm9kZV9zZXRfYWxsb2MgKCZuZXdfbm9k ZXMsIGN1cl9ub2Rlcy0+bmVsZW0pOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwg MCkpCisgICAgcmV0dXJuIGVycjsKKyAgLyogQ3JlYXRlIGEgbmV3IG5vZGUgc2V0IE5FV19O T0RFUyB3aXRoIHRoZSBub2RlcyB3aGljaCBhcmUgZXBzaWxvbgorICAgICBjbG9zdXJlcyBv ZiB0aGUgbm9kZSBpbiBDVVJfTk9ERVMuICAqLworCisgIGZvciAoaWR4ID0gMDsgaWR4IDwg Y3VyX25vZGVzLT5uZWxlbTsgKytpZHgpCisgICAgeworICAgICAgSWR4IGN1cl9ub2RlID0g Y3VyX25vZGVzLT5lbGVtc1tpZHhdOworICAgICAgY29uc3QgcmVfbm9kZV9zZXQgKmVjbG9z dXJlID0gZGZhLT5lY2xvc3VyZXMgKyBjdXJfbm9kZTsKKyAgICAgIG91dHNpZGVfbm9kZSA9 IGZpbmRfc3ViZXhwX25vZGUgKGRmYSwgZWNsb3N1cmUsIGV4X3N1YmV4cCwgdHlwZSk7Cisg ICAgICBpZiAob3V0c2lkZV9ub2RlID09IC0xKQorCXsKKwkgIC8qIFRoZXJlIGFyZSBubyBw cm9ibGVtYXRpYyBub2RlcywganVzdCBtZXJnZSB0aGVtLiAgKi8KKwkgIGVyciA9IHJlX25v ZGVfc2V0X21lcmdlICgmbmV3X25vZGVzLCBlY2xvc3VyZSk7CisJICBpZiAoQkUgKGVyciAh PSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgm bmV3X25vZGVzKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJfQorICAgICAgZWxz ZQorCXsKKwkgIC8qIFRoZXJlIGFyZSBwcm9ibGVtYXRpYyBub2RlcywgcmUtY2FsY3VsYXRl IGluY3JlbWVudGFsbHkuICAqLworCSAgZXJyID0gY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNs X3N1YiAoZGZhLCAmbmV3X25vZGVzLCBjdXJfbm9kZSwKKwkJCQkJICAgICAgZXhfc3ViZXhw LCB0eXBlKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgewor CSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXdfbm9kZXMpOworCSAgICAgIHJldHVybiBl cnI7CisJICAgIH0KKwl9CisgICAgfQorICByZV9ub2RlX3NldF9mcmVlIChjdXJfbm9kZXMp OworICAqY3VyX25vZGVzID0gbmV3X25vZGVzOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9 CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsLgor ICAgQ2hlY2sgaW5jcmVtZW50YWxseSB0aGUgZXBzaWxvbiBjbG9zdXJlIG9mIFRBUkdFVCwg YW5kIGlmIGl0IGlzbid0CisgICBwcm9ibGVtYXRpYyBhcHBlbmQgaXQgdG8gRFNUX05PREVT LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK19fYXR0cmlidXRlX3dhcm5fdW51c2Vk X3Jlc3VsdF9fCitjaGVja19hcnJpdmFsX2V4cGFuZF9lY2xfc3ViIChjb25zdCByZV9kZmFf dCAqZGZhLCByZV9ub2RlX3NldCAqZHN0X25vZGVzLAorCQkJICAgICAgSWR4IHRhcmdldCwg SWR4IGV4X3N1YmV4cCwgaW50IHR5cGUpCit7CisgIElkeCBjdXJfbm9kZTsKKyAgZm9yIChj dXJfbm9kZSA9IHRhcmdldDsgIXJlX25vZGVfc2V0X2NvbnRhaW5zIChkc3Rfbm9kZXMsIGN1 cl9ub2RlKTspCisgICAgeworICAgICAgYm9vbCBvazsKKworICAgICAgaWYgKGRmYS0+bm9k ZXNbY3VyX25vZGVdLnR5cGUgPT0gdHlwZQorCSAgJiYgZGZhLT5ub2Rlc1tjdXJfbm9kZV0u b3ByLmlkeCA9PSBleF9zdWJleHApCisJeworCSAgaWYgKHR5cGUgPT0gT1BfQ0xPU0VfU1VC RVhQKQorCSAgICB7CisJICAgICAgb2sgPSByZV9ub2RlX3NldF9pbnNlcnQgKGRzdF9ub2Rl cywgY3VyX25vZGUpOworCSAgICAgIGlmIChCRSAoISBvaywgMCkpCisJCXJldHVybiBSRUdf RVNQQUNFOworCSAgICB9CisJICBicmVhazsKKwl9CisgICAgICBvayA9IHJlX25vZGVfc2V0 X2luc2VydCAoZHN0X25vZGVzLCBjdXJfbm9kZSk7CisgICAgICBpZiAoQkUgKCEgb2ssIDAp KQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgaWYgKGRmYS0+ZWRlc3RzW2N1cl9ub2Rl XS5uZWxlbSA9PSAwKQorCWJyZWFrOworICAgICAgaWYgKGRmYS0+ZWRlc3RzW2N1cl9ub2Rl XS5uZWxlbSA9PSAyKQorCXsKKwkgIHJlZ19lcnJjb2RlX3QgZXJyOworCSAgZXJyID0gY2hl Y2tfYXJyaXZhbF9leHBhbmRfZWNsX3N1YiAoZGZhLCBkc3Rfbm9kZXMsCisJCQkJCSAgICAg IGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5lbGVtc1sxXSwKKwkJCQkJICAgICAgZXhfc3ViZXhw LCB0eXBlKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0 dXJuIGVycjsKKwl9CisgICAgICBjdXJfbm9kZSA9IGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5l bGVtc1swXTsKKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworCisvKiBGb3Ig YWxsIHRoZSBiYWNrIHJlZmVyZW5jZXMgaW4gdGhlIGN1cnJlbnQgc3RhdGUsIGNhbGN1bGF0 ZSB0aGUKKyAgIGRlc3RpbmF0aW9uIG9mIHRoZSBiYWNrIHJlZmVyZW5jZXMgYnkgdGhlIGFw cHJvcHJpYXRlIGVudHJ5CisgICBpbiBNQ1RYLT5CS1JFRl9FTlRTLiAgKi8KKworc3RhdGlj IHJlZ19lcnJjb2RlX3QKK19fYXR0cmlidXRlX3dhcm5fdW51c2VkX3Jlc3VsdF9fCitleHBh bmRfYmtyZWZfY2FjaGUgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgcmVfbm9kZV9zZXQg KmN1cl9ub2RlcywKKwkJICAgIElkeCBjdXJfc3RyLCBJZHggc3ViZXhwX251bSwgaW50IHR5 cGUpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIHJl Z19lcnJjb2RlX3QgZXJyOworICBJZHggY2FjaGVfaWR4X3N0YXJ0ID0gc2VhcmNoX2N1cl9i a3JlZl9lbnRyeSAobWN0eCwgY3VyX3N0cik7CisgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hl X2VudHJ5ICplbnQ7CisKKyAgaWYgKGNhY2hlX2lkeF9zdGFydCA9PSAtMSkKKyAgICByZXR1 cm4gUkVHX05PRVJST1I7CisKKyByZXN0YXJ0OgorICBlbnQgPSBtY3R4LT5ia3JlZl9lbnRz ICsgY2FjaGVfaWR4X3N0YXJ0OworICBkbworICAgIHsKKyAgICAgIElkeCB0b19pZHgsIG5l eHRfbm9kZTsKKworICAgICAgLyogSXMgdGhpcyBlbnRyeSBFTlQgaXMgYXBwcm9wcmlhdGU/ ICAqLworICAgICAgaWYgKCFyZV9ub2RlX3NldF9jb250YWlucyAoY3VyX25vZGVzLCBlbnQt Pm5vZGUpKQorCWNvbnRpbnVlOyAvKiBOby4gICovCisKKyAgICAgIHRvX2lkeCA9IGN1cl9z dHIgKyBlbnQtPnN1YmV4cF90byAtIGVudC0+c3ViZXhwX2Zyb207CisgICAgICAvKiBDYWxj dWxhdGUgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBiYWNrIHJlZmVyZW5jZSwgYW5kIGFwcGVu ZCBpdAorCSB0byBNQ1RYLT5TVEFURV9MT0cuICAqLworICAgICAgaWYgKHRvX2lkeCA9PSBj dXJfc3RyKQorCXsKKwkgIC8qIFRoZSBiYWNrcmVmZXJlbmNlIGRpZCBlcHNpbG9uIHRyYW5z aXQsIHdlIG11c3QgcmUtY2hlY2sgYWxsIHRoZQorCSAgICAgbm9kZSBpbiB0aGUgY3VycmVu dCBzdGF0ZS4gICovCisJICByZV9ub2RlX3NldCBuZXdfZGVzdHM7CisJICByZWdfZXJyY29k ZV90IGVycjIsIGVycjM7CisJICBuZXh0X25vZGUgPSBkZmEtPmVkZXN0c1tlbnQtPm5vZGVd LmVsZW1zWzBdOworCSAgaWYgKHJlX25vZGVfc2V0X2NvbnRhaW5zIChjdXJfbm9kZXMsIG5l eHRfbm9kZSkpCisJICAgIGNvbnRpbnVlOworCSAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8x ICgmbmV3X2Rlc3RzLCBuZXh0X25vZGUpOworCSAgZXJyMiA9IGNoZWNrX2Fycml2YWxfZXhw YW5kX2VjbCAoZGZhLCAmbmV3X2Rlc3RzLCBzdWJleHBfbnVtLCB0eXBlKTsKKwkgIGVycjMg PSByZV9ub2RlX3NldF9tZXJnZSAoY3VyX25vZGVzLCAmbmV3X2Rlc3RzKTsKKwkgIHJlX25v ZGVfc2V0X2ZyZWUgKCZuZXdfZGVzdHMpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJS T1IgfHwgZXJyMiAhPSBSRUdfTk9FUlJPUgorCQkgIHx8IGVycjMgIT0gUkVHX05PRVJST1Is IDApKQorCSAgICB7CisJICAgICAgZXJyID0gKGVyciAhPSBSRUdfTk9FUlJPUiA/IGVycgor CQkgICAgIDogKGVycjIgIT0gUkVHX05PRVJST1IgPyBlcnIyIDogZXJyMykpOworCSAgICAg IHJldHVybiBlcnI7CisJICAgIH0KKwkgIC8qIFRPRE86IEl0IGlzIHN0aWxsIGluZWZmaWNp ZW50Li4uICAqLworCSAgZ290byByZXN0YXJ0OworCX0KKyAgICAgIGVsc2UKKwl7CisJICBy ZV9ub2RlX3NldCB1bmlvbl9zZXQ7CisJICBuZXh0X25vZGUgPSBkZmEtPm5leHRzW2VudC0+ bm9kZV07CisJICBpZiAobWN0eC0+c3RhdGVfbG9nW3RvX2lkeF0pCisJICAgIHsKKwkgICAg ICBib29sIG9rOworCSAgICAgIGlmIChyZV9ub2RlX3NldF9jb250YWlucyAoJm1jdHgtPnN0 YXRlX2xvZ1t0b19pZHhdLT5ub2RlcywKKwkJCQkJbmV4dF9ub2RlKSkKKwkJY29udGludWU7 CisJICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF9jb3B5ICgmdW5pb25fc2V0LAorCQkJ CQkgICAmbWN0eC0+c3RhdGVfbG9nW3RvX2lkeF0tPm5vZGVzKTsKKwkgICAgICBvayA9IHJl X25vZGVfc2V0X2luc2VydCAoJnVuaW9uX3NldCwgbmV4dF9ub2RlKTsKKwkgICAgICBpZiAo QkUgKGVyciAhPSBSRUdfTk9FUlJPUiB8fCAhIG9rLCAwKSkKKwkJeworCQkgIHJlX25vZGVf c2V0X2ZyZWUgKCZ1bmlvbl9zZXQpOworCQkgIGVyciA9IGVyciAhPSBSRUdfTk9FUlJPUiA/ IGVyciA6IFJFR19FU1BBQ0U7CisJCSAgcmV0dXJuIGVycjsKKwkJfQorCSAgICB9CisJICBl bHNlCisJICAgIHsKKwkgICAgICBlcnIgPSByZV9ub2RlX3NldF9pbml0XzEgKCZ1bmlvbl9z ZXQsIG5leHRfbm9kZSk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDAp KQorCQlyZXR1cm4gZXJyOworCSAgICB9CisJICBtY3R4LT5zdGF0ZV9sb2dbdG9faWR4XSA9 IHJlX2FjcXVpcmVfc3RhdGUgKCZlcnIsIGRmYSwgJnVuaW9uX3NldCk7CisJICByZV9ub2Rl X3NldF9mcmVlICgmdW5pb25fc2V0KTsKKwkgIGlmIChCRSAobWN0eC0+c3RhdGVfbG9nW3Rv X2lkeF0gPT0gTlVMTAorCQkgICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJl dHVybiBlcnI7CisJfQorICAgIH0KKyAgd2hpbGUgKGVudCsrLT5tb3JlKTsKKyAgcmV0dXJu IFJFR19OT0VSUk9SOworfQorCisvKiBCdWlsZCB0cmFuc2l0aW9uIHRhYmxlIGZvciB0aGUg c3RhdGUuCisgICBSZXR1cm4gdHJ1ZSBpZiBzdWNjZXNzZnVsLiAgKi8KKworc3RhdGljIGJv b2wKK2J1aWxkX3RydGFibGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsIHJlX2RmYXN0YXRlX3Qg KnN0YXRlKQoreworICByZWdfZXJyY29kZV90IGVycjsKKyAgSWR4IGksIGo7CisgIGludCBj aDsKKyAgYm9vbCBuZWVkX3dvcmRfdHJ0YWJsZSA9IGZhbHNlOworICBiaXRzZXRfd29yZF90 IGVsZW0sIG1hc2s7CisgIGJvb2wgZGVzdHNfbm9kZV9tYWxsb2NlZCA9IGZhbHNlOworICBi b29sIGRlc3Rfc3RhdGVzX21hbGxvY2VkID0gZmFsc2U7CisgIElkeCBuZGVzdHM7IC8qIE51 bWJlciBvZiB0aGUgZGVzdGluYXRpb24gc3RhdGVzIGZyb20gJ3N0YXRlJy4gICovCisgIHJl X2RmYXN0YXRlX3QgKip0cnRhYmxlOworICByZV9kZmFzdGF0ZV90ICoqZGVzdF9zdGF0ZXMg PSBOVUxMLCAqKmRlc3Rfc3RhdGVzX3dvcmQsICoqZGVzdF9zdGF0ZXNfbmw7CisgIHJlX25v ZGVfc2V0IGZvbGxvd3MsICpkZXN0c19ub2RlOworICBiaXRzZXRfdCAqZGVzdHNfY2g7Cisg IGJpdHNldF90IGFjY2VwdGFibGU7CisKKyAgc3RydWN0IGRlc3RzX2FsbG9jCisgIHsKKyAg ICByZV9ub2RlX3NldCBkZXN0c19ub2RlW1NCQ19NQVhdOworICAgIGJpdHNldF90IGRlc3Rz X2NoW1NCQ19NQVhdOworICB9ICpkZXN0c19hbGxvYzsKKworICAvKiBXZSBidWlsZCBERkEg c3RhdGVzIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBkZXN0aW5hdGlvbiBub2RlcworICAg ICBmcm9tICdzdGF0ZScuICAnZGVzdHNfbm9kZVtpXScgcmVwcmVzZW50cyB0aGUgbm9kZXMg d2hpY2ggaS10aAorICAgICBkZXN0aW5hdGlvbiBzdGF0ZSBjb250YWlucywgYW5kICdkZXN0 c19jaFtpXScgcmVwcmVzZW50cyB0aGUKKyAgICAgY2hhcmFjdGVycyB3aGljaCBpLXRoIGRl c3RpbmF0aW9uIHN0YXRlIGFjY2VwdHMuICAqLworICBpZiAoX19saWJjX3VzZV9hbGxvY2Eg KHNpemVvZiAoc3RydWN0IGRlc3RzX2FsbG9jKSkpCisgICAgZGVzdHNfYWxsb2MgPSAoc3Ry dWN0IGRlc3RzX2FsbG9jICopIGFsbG9jYSAoc2l6ZW9mIChzdHJ1Y3QgZGVzdHNfYWxsb2Mp KTsKKyAgZWxzZQorICAgIHsKKyAgICAgIGRlc3RzX2FsbG9jID0gcmVfbWFsbG9jIChzdHJ1 Y3QgZGVzdHNfYWxsb2MsIDEpOworICAgICAgaWYgKEJFIChkZXN0c19hbGxvYyA9PSBOVUxM LCAwKSkKKwlyZXR1cm4gZmFsc2U7CisgICAgICBkZXN0c19ub2RlX21hbGxvY2VkID0gdHJ1 ZTsKKyAgICB9CisgIGRlc3RzX25vZGUgPSBkZXN0c19hbGxvYy0+ZGVzdHNfbm9kZTsKKyAg ZGVzdHNfY2ggPSBkZXN0c19hbGxvYy0+ZGVzdHNfY2g7CisKKyAgLyogSW5pdGlhbGl6ZSB0 cmFuc2l0aW9uIHRhYmxlLiAgKi8KKyAgc3RhdGUtPndvcmRfdHJ0YWJsZSA9IHN0YXRlLT50 cnRhYmxlID0gTlVMTDsKKworICAvKiBBdCBmaXJzdCwgZ3JvdXAgYWxsIG5vZGVzIGJlbG9u Z2luZyB0byAnc3RhdGUnIGludG8gc2V2ZXJhbAorICAgICBkZXN0aW5hdGlvbnMuICAqLwor ICBuZGVzdHMgPSBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcyAoZGZhLCBzdGF0ZSwgZGVz dHNfbm9kZSwgZGVzdHNfY2gpOworICBpZiAoQkUgKG5kZXN0cyA8PSAwLCAwKSkKKyAgICB7 CisgICAgICBpZiAoZGVzdHNfbm9kZV9tYWxsb2NlZCkKKwlyZV9mcmVlIChkZXN0c19hbGxv Yyk7CisgICAgICAvKiBSZXR1cm4gZmFsc2UgaW4gY2FzZSBvZiBhbiBlcnJvciwgdHJ1ZSBv dGhlcndpc2UuICAqLworICAgICAgaWYgKG5kZXN0cyA9PSAwKQorCXsKKwkgIHN0YXRlLT50 cnRhYmxlID0gKHJlX2RmYXN0YXRlX3QgKiopCisJICAgIGNhbGxvYyAoc2l6ZW9mIChyZV9k ZmFzdGF0ZV90ICopLCBTQkNfTUFYKTsKKyAgICAgICAgICBpZiAoQkUgKHN0YXRlLT50cnRh YmxlID09IE5VTEwsIDApKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCSAgcmV0dXJu IHRydWU7CisJfQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICBlcnIgPSByZV9u b2RlX3NldF9hbGxvYyAoJmZvbGxvd3MsIG5kZXN0cyArIDEpOworICBpZiAoQkUgKGVyciAh PSBSRUdfTk9FUlJPUiwgMCkpCisgICAgZ290byBvdXRfZnJlZTsKKworICAvKiBBdm9pZCBh cml0aG1ldGljIG92ZXJmbG93IGluIHNpemUgY2FsY3VsYXRpb24uICAqLworICBpZiAoQkUg KCgoKFNJWkVfTUFYIC0gKHNpemVvZiAocmVfbm9kZV9zZXQpICsgc2l6ZW9mIChiaXRzZXRf dCkpICogU0JDX01BWCkKKwkgICAgLyAoMyAqIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSkp CisJICAgPCBuZGVzdHMpLAorCSAgMCkpCisgICAgZ290byBvdXRfZnJlZTsKKworICBpZiAo X19saWJjX3VzZV9hbGxvY2EgKChzaXplb2YgKHJlX25vZGVfc2V0KSArIHNpemVvZiAoYml0 c2V0X3QpKSAqIFNCQ19NQVgKKwkJCSArIG5kZXN0cyAqIDMgKiBzaXplb2YgKHJlX2RmYXN0 YXRlX3QgKikpKQorICAgIGRlc3Rfc3RhdGVzID0gKHJlX2RmYXN0YXRlX3QgKiopCisgICAg ICBhbGxvY2EgKG5kZXN0cyAqIDMgKiBzaXplb2YgKHJlX2RmYXN0YXRlX3QgKikpOworICBl bHNlCisgICAgeworICAgICAgZGVzdF9zdGF0ZXMgPSByZV9tYWxsb2MgKHJlX2RmYXN0YXRl X3QgKiwgbmRlc3RzICogMyk7CisgICAgICBpZiAoQkUgKGRlc3Rfc3RhdGVzID09IE5VTEws IDApKQorCXsKK291dF9mcmVlOgorCSAgaWYgKGRlc3Rfc3RhdGVzX21hbGxvY2VkKQorCSAg ICByZV9mcmVlIChkZXN0X3N0YXRlcyk7CisJICByZV9ub2RlX3NldF9mcmVlICgmZm9sbG93 cyk7CisJICBmb3IgKGkgPSAwOyBpIDwgbmRlc3RzOyArK2kpCisJICAgIHJlX25vZGVfc2V0 X2ZyZWUgKGRlc3RzX25vZGUgKyBpKTsKKwkgIGlmIChkZXN0c19ub2RlX21hbGxvY2VkKQor CSAgICByZV9mcmVlIChkZXN0c19hbGxvYyk7CisJICByZXR1cm4gZmFsc2U7CisJfQorICAg ICAgZGVzdF9zdGF0ZXNfbWFsbG9jZWQgPSB0cnVlOworICAgIH0KKyAgZGVzdF9zdGF0ZXNf d29yZCA9IGRlc3Rfc3RhdGVzICsgbmRlc3RzOworICBkZXN0X3N0YXRlc19ubCA9IGRlc3Rf c3RhdGVzX3dvcmQgKyBuZGVzdHM7CisgIGJpdHNldF9lbXB0eSAoYWNjZXB0YWJsZSk7CisK KyAgLyogVGhlbiBidWlsZCB0aGUgc3RhdGVzIGZvciBhbGwgZGVzdGluYXRpb25zLiAgKi8K KyAgZm9yIChpID0gMDsgaSA8IG5kZXN0czsgKytpKQorICAgIHsKKyAgICAgIElkeCBuZXh0 X25vZGU7CisgICAgICByZV9ub2RlX3NldF9lbXB0eSAoJmZvbGxvd3MpOworICAgICAgLyog TWVyZ2UgdGhlIGZvbGxvd3Mgb2YgdGhpcyBkZXN0aW5hdGlvbiBzdGF0ZXMuICAqLworICAg ICAgZm9yIChqID0gMDsgaiA8IGRlc3RzX25vZGVbaV0ubmVsZW07ICsraikKKwl7CisJICBu ZXh0X25vZGUgPSBkZmEtPm5leHRzW2Rlc3RzX25vZGVbaV0uZWxlbXNbal1dOworCSAgaWYg KG5leHRfbm9kZSAhPSAtMSkKKwkgICAgeworCSAgICAgIGVyciA9IHJlX25vZGVfc2V0X21l cmdlICgmZm9sbG93cywgZGZhLT5lY2xvc3VyZXMgKyBuZXh0X25vZGUpOworCSAgICAgIGlm IChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJZ290byBvdXRfZnJlZTsKKwkgICAg fQorCX0KKyAgICAgIGRlc3Rfc3RhdGVzW2ldID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0 ICgmZXJyLCBkZmEsICZmb2xsb3dzLCAwKTsKKyAgICAgIGlmIChCRSAoZGVzdF9zdGF0ZXNb aV0gPT0gTlVMTCAmJiBlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCWdvdG8gb3V0X2ZyZWU7 CisgICAgICAvKiBJZiB0aGUgbmV3IHN0YXRlIGhhcyBjb250ZXh0IGNvbnN0cmFpbnQsCisJ IGJ1aWxkIGFwcHJvcHJpYXRlIHN0YXRlcyBmb3IgdGhlc2UgY29udGV4dHMuICAqLworICAg ICAgaWYgKGRlc3Rfc3RhdGVzW2ldLT5oYXNfY29uc3RyYWludCkKKwl7CisJICBkZXN0X3N0 YXRlc193b3JkW2ldID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZm b2xsb3dzLAorCQkJCQkJCSAgQ09OVEVYVF9XT1JEKTsKKwkgIGlmIChCRSAoZGVzdF9zdGF0 ZXNfd29yZFtpXSA9PSBOVUxMICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIGdv dG8gb3V0X2ZyZWU7CisKKwkgIGlmIChkZXN0X3N0YXRlc1tpXSAhPSBkZXN0X3N0YXRlc193 b3JkW2ldICYmIGRmYS0+bWJfY3VyX21heCA+IDEpCisJICAgIG5lZWRfd29yZF90cnRhYmxl ID0gdHJ1ZTsKKworCSAgZGVzdF9zdGF0ZXNfbmxbaV0gPSByZV9hY3F1aXJlX3N0YXRlX2Nv bnRleHQgKCZlcnIsIGRmYSwgJmZvbGxvd3MsCisJCQkJCQkJQ09OVEVYVF9ORVdMSU5FKTsK KwkgIGlmIChCRSAoZGVzdF9zdGF0ZXNfbmxbaV0gPT0gTlVMTCAmJiBlcnIgIT0gUkVHX05P RVJST1IsIDApKQorCSAgICBnb3RvIG91dF9mcmVlOworCX0KKyAgICAgIGVsc2UKKwl7CisJ ICBkZXN0X3N0YXRlc193b3JkW2ldID0gZGVzdF9zdGF0ZXNbaV07CisJICBkZXN0X3N0YXRl c19ubFtpXSA9IGRlc3Rfc3RhdGVzW2ldOworCX0KKyAgICAgIGJpdHNldF9tZXJnZSAoYWNj ZXB0YWJsZSwgZGVzdHNfY2hbaV0pOworICAgIH0KKworICBpZiAoIUJFIChuZWVkX3dvcmRf dHJ0YWJsZSwgMCkpCisgICAgeworICAgICAgLyogV2UgZG9uJ3QgY2FyZSBhYm91dCB3aGV0 aGVyIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIGlzIGEgd29yZAorCSBjaGFyYWN0ZXIsIG9y IHdlIGFyZSBpbiBhIHNpbmdsZS1ieXRlIGNoYXJhY3RlciBzZXQgc28gd2UgY2FuCisJIGRp c2Nlcm4gYnkgbG9va2luZyBhdCB0aGUgY2hhcmFjdGVyIGNvZGU6IGFsbG9jYXRlIGEKKwkg MjU2LWVudHJ5IHRyYW5zaXRpb24gdGFibGUuICAqLworICAgICAgdHJ0YWJsZSA9IHN0YXRl LT50cnRhYmxlID0KKwkocmVfZGZhc3RhdGVfdCAqKikgY2FsbG9jIChzaXplb2YgKHJlX2Rm YXN0YXRlX3QgKiksIFNCQ19NQVgpOworICAgICAgaWYgKEJFICh0cnRhYmxlID09IE5VTEws IDApKQorCWdvdG8gb3V0X2ZyZWU7CisKKyAgICAgIC8qIEZvciBhbGwgY2hhcmFjdGVycyBj aC4uLjogICovCisgICAgICBmb3IgKGkgPSAwOyBpIDwgQklUU0VUX1dPUkRTOyArK2kpCisJ Zm9yIChjaCA9IGkgKiBCSVRTRVRfV09SRF9CSVRTLCBlbGVtID0gYWNjZXB0YWJsZVtpXSwg bWFzayA9IDE7CisJICAgICBlbGVtOworCSAgICAgbWFzayA8PD0gMSwgZWxlbSA+Pj0gMSwg KytjaCkKKwkgIGlmIChCRSAoZWxlbSAmIDEsIDApKQorCSAgICB7CisJICAgICAgLyogVGhl cmUgbXVzdCBiZSBleGFjdGx5IG9uZSBkZXN0aW5hdGlvbiB3aGljaCBhY2NlcHRzCisJCSBj aGFyYWN0ZXIgY2guICBTZWUgZ3JvdXBfbm9kZXNfaW50b19ERkFzdGF0ZXMuICAqLworCSAg ICAgIGZvciAoaiA9IDA7IChkZXN0c19jaFtqXVtpXSAmIG1hc2spID09IDA7ICsraikKKwkJ OworCisJICAgICAgLyogai10aCBkZXN0aW5hdGlvbiBhY2NlcHRzIHRoZSB3b3JkIGNoYXJh Y3RlciBjaC4gICovCisJICAgICAgaWYgKGRmYS0+d29yZF9jaGFyW2ldICYgbWFzaykKKwkJ dHJ0YWJsZVtjaF0gPSBkZXN0X3N0YXRlc193b3JkW2pdOworCSAgICAgIGVsc2UKKwkJdHJ0 YWJsZVtjaF0gPSBkZXN0X3N0YXRlc1tqXTsKKwkgICAgfQorICAgIH0KKyAgZWxzZQorICAg IHsKKyAgICAgIC8qIFdlIGNhcmUgYWJvdXQgd2hldGhlciB0aGUgZm9sbG93aW5nIGNoYXJh Y3RlciBpcyBhIHdvcmQKKwkgY2hhcmFjdGVyLCBhbmQgd2UgYXJlIGluIGEgbXVsdGktYnl0 ZSBjaGFyYWN0ZXIgc2V0OiBkaXNjZXJuCisJIGJ5IGxvb2tpbmcgYXQgdGhlIGNoYXJhY3Rl ciBjb2RlOiBidWlsZCB0d28gMjU2LWVudHJ5CisJIHRyYW5zaXRpb24gdGFibGVzLCBvbmUg c3RhcnRpbmcgYXQgdHJ0YWJsZVswXSBhbmQgb25lCisJIHN0YXJ0aW5nIGF0IHRydGFibGVb U0JDX01BWF0uICAqLworICAgICAgdHJ0YWJsZSA9IHN0YXRlLT53b3JkX3RydGFibGUgPQor CShyZV9kZmFzdGF0ZV90ICoqKSBjYWxsb2MgKHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSwg MiAqIFNCQ19NQVgpOworICAgICAgaWYgKEJFICh0cnRhYmxlID09IE5VTEwsIDApKQorCWdv dG8gb3V0X2ZyZWU7CisKKyAgICAgIC8qIEZvciBhbGwgY2hhcmFjdGVycyBjaC4uLjogICov CisgICAgICBmb3IgKGkgPSAwOyBpIDwgQklUU0VUX1dPUkRTOyArK2kpCisJZm9yIChjaCA9 IGkgKiBCSVRTRVRfV09SRF9CSVRTLCBlbGVtID0gYWNjZXB0YWJsZVtpXSwgbWFzayA9IDE7 CisJICAgICBlbGVtOworCSAgICAgbWFzayA8PD0gMSwgZWxlbSA+Pj0gMSwgKytjaCkKKwkg IGlmIChCRSAoZWxlbSAmIDEsIDApKQorCSAgICB7CisJICAgICAgLyogVGhlcmUgbXVzdCBi ZSBleGFjdGx5IG9uZSBkZXN0aW5hdGlvbiB3aGljaCBhY2NlcHRzCisJCSBjaGFyYWN0ZXIg Y2guICBTZWUgZ3JvdXBfbm9kZXNfaW50b19ERkFzdGF0ZXMuICAqLworCSAgICAgIGZvciAo aiA9IDA7IChkZXN0c19jaFtqXVtpXSAmIG1hc2spID09IDA7ICsraikKKwkJOworCisJICAg ICAgLyogai10aCBkZXN0aW5hdGlvbiBhY2NlcHRzIHRoZSB3b3JkIGNoYXJhY3RlciBjaC4g ICovCisJICAgICAgdHJ0YWJsZVtjaF0gPSBkZXN0X3N0YXRlc1tqXTsKKwkgICAgICB0cnRh YmxlW2NoICsgU0JDX01BWF0gPSBkZXN0X3N0YXRlc193b3JkW2pdOworCSAgICB9CisgICAg fQorCisgIC8qIG5ldyBsaW5lICovCisgIGlmIChiaXRzZXRfY29udGFpbiAoYWNjZXB0YWJs ZSwgTkVXTElORV9DSEFSKSkKKyAgICB7CisgICAgICAvKiBUaGUgY3VycmVudCBzdGF0ZSBh Y2NlcHRzIG5ld2xpbmUgY2hhcmFjdGVyLiAgKi8KKyAgICAgIGZvciAoaiA9IDA7IGogPCBu ZGVzdHM7ICsraikKKwlpZiAoYml0c2V0X2NvbnRhaW4gKGRlc3RzX2NoW2pdLCBORVdMSU5F X0NIQVIpKQorCSAgeworCSAgICAvKiBrLXRoIGRlc3RpbmF0aW9uIGFjY2VwdHMgbmV3bGlu ZSBjaGFyYWN0ZXIuICAqLworCSAgICB0cnRhYmxlW05FV0xJTkVfQ0hBUl0gPSBkZXN0X3N0 YXRlc19ubFtqXTsKKwkgICAgaWYgKG5lZWRfd29yZF90cnRhYmxlKQorCSAgICAgIHRydGFi bGVbTkVXTElORV9DSEFSICsgU0JDX01BWF0gPSBkZXN0X3N0YXRlc19ubFtqXTsKKwkgICAg LyogVGhlcmUgbXVzdCBiZSBvbmx5IG9uZSBkZXN0aW5hdGlvbiB3aGljaCBhY2NlcHRzCisJ ICAgICAgIG5ld2xpbmUuICBTZWUgZ3JvdXBfbm9kZXNfaW50b19ERkFzdGF0ZXMuICAqLwor CSAgICBicmVhazsKKwkgIH0KKyAgICB9CisKKyAgaWYgKGRlc3Rfc3RhdGVzX21hbGxvY2Vk KQorICAgIHJlX2ZyZWUgKGRlc3Rfc3RhdGVzKTsKKworICByZV9ub2RlX3NldF9mcmVlICgm Zm9sbG93cyk7CisgIGZvciAoaSA9IDA7IGkgPCBuZGVzdHM7ICsraSkKKyAgICByZV9ub2Rl X3NldF9mcmVlIChkZXN0c19ub2RlICsgaSk7CisKKyAgaWYgKGRlc3RzX25vZGVfbWFsbG9j ZWQpCisgICAgcmVfZnJlZSAoZGVzdHNfYWxsb2MpOworCisgIHJldHVybiB0cnVlOworfQor CisvKiBHcm91cCBhbGwgbm9kZXMgYmVsb25naW5nIHRvIFNUQVRFIGludG8gc2V2ZXJhbCBk ZXN0aW5hdGlvbnMuCisgICBUaGVuIGZvciBhbGwgZGVzdGluYXRpb25zLCBzZXQgdGhlIG5v ZGVzIGJlbG9uZ2luZyB0byB0aGUgZGVzdGluYXRpb24KKyAgIHRvIERFU1RTX05PREVbaV0g YW5kIHNldCB0aGUgY2hhcmFjdGVycyBhY2NlcHRlZCBieSB0aGUgZGVzdGluYXRpb24KKyAg IHRvIERFU1RfQ0hbaV0uICBUaGlzIGZ1bmN0aW9uIHJldHVybiB0aGUgbnVtYmVyIG9mIGRl c3RpbmF0aW9ucy4gICovCisKK3N0YXRpYyBJZHgKK2dyb3VwX25vZGVzX2ludG9fREZBc3Rh dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBjb25zdCByZV9kZmFzdGF0ZV90ICpzdGF0ZSwK KwkJCSAgICByZV9ub2RlX3NldCAqZGVzdHNfbm9kZSwgYml0c2V0X3QgKmRlc3RzX2NoKQor eworICByZWdfZXJyY29kZV90IGVycjsKKyAgYm9vbCBvazsKKyAgSWR4IGksIGosIGs7Cisg IElkeCBuZGVzdHM7IC8qIE51bWJlciBvZiB0aGUgZGVzdGluYXRpb25zIGZyb20gJ3N0YXRl Jy4gICovCisgIGJpdHNldF90IGFjY2VwdHM7IC8qIENoYXJhY3RlcnMgYSBub2RlIGNhbiBh Y2NlcHQuICAqLworICBjb25zdCByZV9ub2RlX3NldCAqY3VyX25vZGVzID0gJnN0YXRlLT5u b2RlczsKKyAgYml0c2V0X2VtcHR5IChhY2NlcHRzKTsKKyAgbmRlc3RzID0gMDsKKworICAv KiBGb3IgYWxsIHRoZSBub2RlcyBiZWxvbmdpbmcgdG8gJ3N0YXRlJywgICovCisgIGZvciAo aSA9IDA7IGkgPCBjdXJfbm9kZXMtPm5lbGVtOyArK2kpCisgICAgeworICAgICAgcmVfdG9r ZW5fdCAqbm9kZSA9ICZkZmEtPm5vZGVzW2N1cl9ub2Rlcy0+ZWxlbXNbaV1dOworICAgICAg cmVfdG9rZW5fdHlwZV90IHR5cGUgPSBub2RlLT50eXBlOworICAgICAgdW5zaWduZWQgaW50 IGNvbnN0cmFpbnQgPSBub2RlLT5jb25zdHJhaW50OworCisgICAgICAvKiBFbnVtZXJhdGUg YWxsIHNpbmdsZSBieXRlIGNoYXJhY3RlciB0aGlzIG5vZGUgY2FuIGFjY2VwdC4gICovCisg ICAgICBpZiAodHlwZSA9PSBDSEFSQUNURVIpCisJYml0c2V0X3NldCAoYWNjZXB0cywgbm9k ZS0+b3ByLmMpOworICAgICAgZWxzZSBpZiAodHlwZSA9PSBTSU1QTEVfQlJBQ0tFVCkKKwl7 CisJICBiaXRzZXRfbWVyZ2UgKGFjY2VwdHMsIG5vZGUtPm9wci5zYmNzZXQpOworCX0KKyAg ICAgIGVsc2UgaWYgKHR5cGUgPT0gT1BfUEVSSU9EKQorCXsKKyNpZmRlZiBSRV9FTkFCTEVf STE4TgorCSAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJICAgIGJpdHNldF9tZXJnZSAo YWNjZXB0cywgZGZhLT5zYl9jaGFyKTsKKwkgIGVsc2UKKyNlbmRpZgorCSAgICBiaXRzZXRf c2V0X2FsbCAoYWNjZXB0cyk7CisJICBpZiAoIShkZmEtPnN5bnRheCAmIFJFX0RPVF9ORVdM SU5FKSkKKwkgICAgYml0c2V0X2NsZWFyIChhY2NlcHRzLCAnXG4nKTsKKwkgIGlmIChkZmEt PnN5bnRheCAmIFJFX0RPVF9OT1RfTlVMTCkKKwkgICAgYml0c2V0X2NsZWFyIChhY2NlcHRz LCAnXDAnKTsKKwl9CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGVsc2UgaWYgKHR5 cGUgPT0gT1BfVVRGOF9QRVJJT0QpCisJeworCSAgaWYgKEFTQ0lJX0NIQVJTICUgQklUU0VU X1dPUkRfQklUUyA9PSAwKQorCSAgICBtZW1zZXQgKGFjY2VwdHMsIC0xLCBBU0NJSV9DSEFS UyAvIENIQVJfQklUKTsKKwkgIGVsc2UKKwkgICAgYml0c2V0X21lcmdlIChhY2NlcHRzLCB1 dGY4X3NiX21hcCk7CisJICBpZiAoIShkZmEtPnN5bnRheCAmIFJFX0RPVF9ORVdMSU5FKSkK KwkgICAgYml0c2V0X2NsZWFyIChhY2NlcHRzLCAnXG4nKTsKKwkgIGlmIChkZmEtPnN5bnRh eCAmIFJFX0RPVF9OT1RfTlVMTCkKKwkgICAgYml0c2V0X2NsZWFyIChhY2NlcHRzLCAnXDAn KTsKKwl9CisjZW5kaWYKKyAgICAgIGVsc2UKKwljb250aW51ZTsKKworICAgICAgLyogQ2hl Y2sgdGhlICdhY2NlcHRzJyBhbmQgc2lmdCB0aGUgY2hhcmFjdGVycyB3aGljaCBhcmUgbm90 CisJIG1hdGNoIGl0IHRoZSBjb250ZXh0LiAgKi8KKyAgICAgIGlmIChjb25zdHJhaW50KQor CXsKKwkgIGlmIChjb25zdHJhaW50ICYgTkVYVF9ORVdMSU5FX0NPTlNUUkFJTlQpCisJICAg IHsKKwkgICAgICBib29sIGFjY2VwdHNfbmV3bGluZSA9IGJpdHNldF9jb250YWluIChhY2Nl cHRzLCBORVdMSU5FX0NIQVIpOworCSAgICAgIGJpdHNldF9lbXB0eSAoYWNjZXB0cyk7CisJ ICAgICAgaWYgKGFjY2VwdHNfbmV3bGluZSkKKwkJYml0c2V0X3NldCAoYWNjZXB0cywgTkVX TElORV9DSEFSKTsKKwkgICAgICBlbHNlCisJCWNvbnRpbnVlOworCSAgICB9CisJICBpZiAo Y29uc3RyYWludCAmIE5FWFRfRU5EQlVGX0NPTlNUUkFJTlQpCisJICAgIHsKKwkgICAgICBi aXRzZXRfZW1wdHkgKGFjY2VwdHMpOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisKKwkg IGlmIChjb25zdHJhaW50ICYgTkVYVF9XT1JEX0NPTlNUUkFJTlQpCisJICAgIHsKKwkgICAg ICBiaXRzZXRfd29yZF90IGFueV9zZXQgPSAwOworCSAgICAgIGlmICh0eXBlID09IENIQVJB Q1RFUiAmJiAhbm9kZS0+d29yZF9jaGFyKQorCQl7CisJCSAgYml0c2V0X2VtcHR5IChhY2Nl cHRzKTsKKwkJICBjb250aW51ZTsKKwkJfQorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICAg ICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJCWZvciAoaiA9IDA7IGogPCBCSVRTRVRf V09SRFM7ICsraikKKwkJICBhbnlfc2V0IHw9IChhY2NlcHRzW2pdICY9IChkZmEtPndvcmRf Y2hhcltqXSB8IH5kZmEtPnNiX2NoYXJbal0pKTsKKwkgICAgICBlbHNlCisjZW5kaWYKKwkJ Zm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEUzsgKytqKQorCQkgIGFueV9zZXQgfD0gKGFj Y2VwdHNbal0gJj0gZGZhLT53b3JkX2NoYXJbal0pOworCSAgICAgIGlmICghYW55X3NldCkK KwkJY29udGludWU7CisJICAgIH0KKwkgIGlmIChjb25zdHJhaW50ICYgTkVYVF9OT1RXT1JE X0NPTlNUUkFJTlQpCisJICAgIHsKKwkgICAgICBiaXRzZXRfd29yZF90IGFueV9zZXQgPSAw OworCSAgICAgIGlmICh0eXBlID09IENIQVJBQ1RFUiAmJiBub2RlLT53b3JkX2NoYXIpCisJ CXsKKwkJICBiaXRzZXRfZW1wdHkgKGFjY2VwdHMpOworCQkgIGNvbnRpbnVlOworCQl9Cisj aWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkgICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkK KwkJZm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEUzsgKytqKQorCQkgIGFueV9zZXQgfD0g KGFjY2VwdHNbal0gJj0gfihkZmEtPndvcmRfY2hhcltqXSAmIGRmYS0+c2JfY2hhcltqXSkp OworCSAgICAgIGVsc2UKKyNlbmRpZgorCQlmb3IgKGogPSAwOyBqIDwgQklUU0VUX1dPUkRT OyArK2opCisJCSAgYW55X3NldCB8PSAoYWNjZXB0c1tqXSAmPSB+ZGZhLT53b3JkX2NoYXJb al0pOworCSAgICAgIGlmICghYW55X3NldCkKKwkJY29udGludWU7CisJICAgIH0KKwl9CisK KyAgICAgIC8qIFRoZW4gZGl2aWRlICdhY2NlcHRzJyBpbnRvIERGQSBzdGF0ZXMsIG9yIGNy ZWF0ZSBhIG5ldworCSBzdGF0ZS4gIEFib3ZlLCB3ZSBtYWtlIHN1cmUgdGhhdCBhY2NlcHRz IGlzIG5vdCBlbXB0eS4gICovCisgICAgICBmb3IgKGogPSAwOyBqIDwgbmRlc3RzOyArK2op CisJeworCSAgYml0c2V0X3QgaW50ZXJzZWM7IC8qIEludGVyc2VjdGlvbiBzZXRzLCBzZWUg YmVsb3cuICAqLworCSAgYml0c2V0X3QgcmVtYWluczsKKwkgIC8qIEZsYWdzLCBzZWUgYmVs b3cuICAqLworCSAgYml0c2V0X3dvcmRfdCBoYXNfaW50ZXJzZWMsIG5vdF9zdWJzZXQsIG5v dF9jb25zdW1lZDsKKworCSAgLyogT3B0aW1pemF0aW9uLCBza2lwIGlmIHRoaXMgc3RhdGUg ZG9lc24ndCBhY2NlcHQgdGhlIGNoYXJhY3Rlci4gICovCisJICBpZiAodHlwZSA9PSBDSEFS QUNURVIgJiYgIWJpdHNldF9jb250YWluIChkZXN0c19jaFtqXSwgbm9kZS0+b3ByLmMpKQor CSAgICBjb250aW51ZTsKKworCSAgLyogRW51bWVyYXRlIHRoZSBpbnRlcnNlY3Rpb24gc2V0 IG9mIHRoaXMgc3RhdGUgYW5kICdhY2NlcHRzJy4gICovCisJICBoYXNfaW50ZXJzZWMgPSAw OworCSAgZm9yIChrID0gMDsgayA8IEJJVFNFVF9XT1JEUzsgKytrKQorCSAgICBoYXNfaW50 ZXJzZWMgfD0gaW50ZXJzZWNba10gPSBhY2NlcHRzW2tdICYgZGVzdHNfY2hbal1ba107CisJ ICAvKiBBbmQgc2tpcCBpZiB0aGUgaW50ZXJzZWN0aW9uIHNldCBpcyBlbXB0eS4gICovCisJ ICBpZiAoIWhhc19pbnRlcnNlYykKKwkgICAgY29udGludWU7CisKKwkgIC8qIFRoZW4gY2hl Y2sgaWYgdGhpcyBzdGF0ZSBpcyBhIHN1YnNldCBvZiAnYWNjZXB0cycuICAqLworCSAgbm90 X3N1YnNldCA9IG5vdF9jb25zdW1lZCA9IDA7CisJICBmb3IgKGsgPSAwOyBrIDwgQklUU0VU X1dPUkRTOyArK2spCisJICAgIHsKKwkgICAgICBub3Rfc3Vic2V0IHw9IHJlbWFpbnNba10g PSB+YWNjZXB0c1trXSAmIGRlc3RzX2NoW2pdW2tdOworCSAgICAgIG5vdF9jb25zdW1lZCB8 PSBhY2NlcHRzW2tdID0gYWNjZXB0c1trXSAmIH5kZXN0c19jaFtqXVtrXTsKKwkgICAgfQor CisJICAvKiBJZiB0aGlzIHN0YXRlIGlzbid0IGEgc3Vic2V0IG9mICdhY2NlcHRzJywgY3Jl YXRlIGEKKwkgICAgIG5ldyBncm91cCBzdGF0ZSwgd2hpY2ggaGFzIHRoZSAncmVtYWlucycu ICovCisJICBpZiAobm90X3N1YnNldCkKKwkgICAgeworCSAgICAgIGJpdHNldF9jb3B5IChk ZXN0c19jaFtuZGVzdHNdLCByZW1haW5zKTsKKwkgICAgICBiaXRzZXRfY29weSAoZGVzdHNf Y2hbal0sIGludGVyc2VjKTsKKwkgICAgICBlcnIgPSByZV9ub2RlX3NldF9pbml0X2NvcHkg KGRlc3RzX25vZGUgKyBuZGVzdHMsICZkZXN0c19ub2RlW2pdKTsKKwkgICAgICBpZiAoQkUg KGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCWdvdG8gZXJyb3JfcmV0dXJuOworCSAgICAg ICsrbmRlc3RzOworCSAgICB9CisKKwkgIC8qIFB1dCB0aGUgcG9zaXRpb24gaW4gdGhlIGN1 cnJlbnQgZ3JvdXAuICovCisJICBvayA9IHJlX25vZGVfc2V0X2luc2VydCAoJmRlc3RzX25v ZGVbal0sIGN1cl9ub2Rlcy0+ZWxlbXNbaV0pOworCSAgaWYgKEJFICghIG9rLCAwKSkKKwkg ICAgZ290byBlcnJvcl9yZXR1cm47CisKKwkgIC8qIElmIGFsbCBjaGFyYWN0ZXJzIGFyZSBj b25zdW1lZCwgZ28gdG8gbmV4dCBub2RlLiAqLworCSAgaWYgKCFub3RfY29uc3VtZWQpCisJ ICAgIGJyZWFrOworCX0KKyAgICAgIC8qIFNvbWUgY2hhcmFjdGVycyByZW1haW4sIGNyZWF0 ZSBhIG5ldyBncm91cC4gKi8KKyAgICAgIGlmIChqID09IG5kZXN0cykKKwl7CisJICBiaXRz ZXRfY29weSAoZGVzdHNfY2hbbmRlc3RzXSwgYWNjZXB0cyk7CisJICBlcnIgPSByZV9ub2Rl X3NldF9pbml0XzEgKGRlc3RzX25vZGUgKyBuZGVzdHMsIGN1cl9ub2Rlcy0+ZWxlbXNbaV0p OworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICBnb3RvIGVycm9y X3JldHVybjsKKwkgICsrbmRlc3RzOworCSAgYml0c2V0X2VtcHR5IChhY2NlcHRzKTsKKwl9 CisgICAgfQorICByZXR1cm4gbmRlc3RzOworIGVycm9yX3JldHVybjoKKyAgZm9yIChqID0g MDsgaiA8IG5kZXN0czsgKytqKQorICAgIHJlX25vZGVfc2V0X2ZyZWUgKGRlc3RzX25vZGUg KyBqKTsKKyAgcmV0dXJuIC0xOworfQorCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy8qIENo ZWNrIGhvdyBtYW55IGJ5dGVzIHRoZSBub2RlICdkZmEtPm5vZGVzW25vZGVfaWR4XScgYWNj ZXB0cy4KKyAgIFJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBieXRlcyB0aGUgbm9kZSBhY2Nl cHRzLgorICAgU1RSX0lEWCBpcyB0aGUgY3VycmVudCBpbmRleCBvZiB0aGUgaW5wdXQgc3Ry aW5nLgorCisgICBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIG5vZGVzIHdoaWNoIGNhbiBh Y2NlcHQgb25lIGNoYXJhY3Rlciwgb3IKKyAgIG9uZSBjb2xsYXRpbmcgZWxlbWVudCBsaWtl ICcuJywgJ1thLXpdJywgb3Bwb3NpdGUgdG8gdGhlIG90aGVyIG5vZGVzCisgICBjYW4gb25s eSBhY2NlcHQgb25lIGJ5dGUuICAqLworCisjIGlmZGVmIF9MSUJDCisjICBpbmNsdWRlIDxs b2NhbGUvd2VpZ2h0Lmg+CisjIGVuZGlmCisKK3N0YXRpYyBpbnQKK2NoZWNrX25vZGVfYWNj ZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBJZHggbm9kZV9pZHgsCisJCQkgY29u c3QgcmVfc3RyaW5nX3QgKmlucHV0LCBJZHggc3RyX2lkeCkKK3sKKyAgY29uc3QgcmVfdG9r ZW5fdCAqbm9kZSA9IGRmYS0+bm9kZXMgKyBub2RlX2lkeDsKKyAgaW50IGNoYXJfbGVuLCBl bGVtX2xlbjsKKyAgSWR4IGk7CisKKyAgaWYgKEJFIChub2RlLT50eXBlID09IE9QX1VURjhf UEVSSU9ELCAwKSkKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyIGMgPSByZV9zdHJpbmdf Ynl0ZV9hdCAoaW5wdXQsIHN0cl9pZHgpLCBkOworICAgICAgaWYgKEJFIChjIDwgMHhjMiwg MSkpCisJcmV0dXJuIDA7CisKKyAgICAgIGlmIChzdHJfaWR4ICsgMiA+IGlucHV0LT5sZW4p CisJcmV0dXJuIDA7CisKKyAgICAgIGQgPSByZV9zdHJpbmdfYnl0ZV9hdCAoaW5wdXQsIHN0 cl9pZHggKyAxKTsKKyAgICAgIGlmIChjIDwgMHhlMCkKKwlyZXR1cm4gKGQgPCAweDgwIHx8 IGQgPiAweGJmKSA/IDAgOiAyOworICAgICAgZWxzZSBpZiAoYyA8IDB4ZjApCisJeworCSAg Y2hhcl9sZW4gPSAzOworCSAgaWYgKGMgPT0gMHhlMCAmJiBkIDwgMHhhMCkKKwkgICAgcmV0 dXJuIDA7CisJfQorICAgICAgZWxzZSBpZiAoYyA8IDB4ZjgpCisJeworCSAgY2hhcl9sZW4g PSA0OworCSAgaWYgKGMgPT0gMHhmMCAmJiBkIDwgMHg5MCkKKwkgICAgcmV0dXJuIDA7CisJ fQorICAgICAgZWxzZSBpZiAoYyA8IDB4ZmMpCisJeworCSAgY2hhcl9sZW4gPSA1OworCSAg aWYgKGMgPT0gMHhmOCAmJiBkIDwgMHg4OCkKKwkgICAgcmV0dXJuIDA7CisJfQorICAgICAg ZWxzZSBpZiAoYyA8IDB4ZmUpCisJeworCSAgY2hhcl9sZW4gPSA2OworCSAgaWYgKGMgPT0g MHhmYyAmJiBkIDwgMHg4NCkKKwkgICAgcmV0dXJuIDA7CisJfQorICAgICAgZWxzZQorCXJl dHVybiAwOworCisgICAgICBpZiAoc3RyX2lkeCArIGNoYXJfbGVuID4gaW5wdXQtPmxlbikK KwlyZXR1cm4gMDsKKworICAgICAgZm9yIChpID0gMTsgaSA8IGNoYXJfbGVuOyArK2kpCisJ eworCSAgZCA9IHJlX3N0cmluZ19ieXRlX2F0IChpbnB1dCwgc3RyX2lkeCArIGkpOworCSAg aWYgKGQgPCAweDgwIHx8IGQgPiAweGJmKQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICBy ZXR1cm4gY2hhcl9sZW47CisgICAgfQorCisgIGNoYXJfbGVuID0gcmVfc3RyaW5nX2NoYXJf c2l6ZV9hdCAoaW5wdXQsIHN0cl9pZHgpOworICBpZiAobm9kZS0+dHlwZSA9PSBPUF9QRVJJ T0QpCisgICAgeworICAgICAgaWYgKGNoYXJfbGVuIDw9IDEpCisJcmV0dXJuIDA7CisgICAg ICAvKiBGSVhNRTogSSBkb24ndCB0aGluayB0aGlzIGlmIGlzIG5lZWRlZCwgYXMgYm90aCAn XG4nCisJIGFuZCAnXDAnIGFyZSBjaGFyX2xlbiA9PSAxLiAgKi8KKyAgICAgIC8qICcuJyBh Y2NlcHRzIGFueSBvbmUgY2hhcmFjdGVyIGV4Y2VwdCB0aGUgZm9sbG93aW5nIHR3byBjYXNl cy4gICovCisgICAgICBpZiAoKCEoZGZhLT5zeW50YXggJiBSRV9ET1RfTkVXTElORSkgJiYK KwkgICByZV9zdHJpbmdfYnl0ZV9hdCAoaW5wdXQsIHN0cl9pZHgpID09ICdcbicpIHx8CisJ ICAoKGRmYS0+c3ludGF4ICYgUkVfRE9UX05PVF9OVUxMKSAmJgorCSAgIHJlX3N0cmluZ19i eXRlX2F0IChpbnB1dCwgc3RyX2lkeCkgPT0gJ1wwJykpCisJcmV0dXJuIDA7CisgICAgICBy ZXR1cm4gY2hhcl9sZW47CisgICAgfQorCisgIGVsZW1fbGVuID0gcmVfc3RyaW5nX2VsZW1f c2l6ZV9hdCAoaW5wdXQsIHN0cl9pZHgpOworICBpZiAoKGVsZW1fbGVuIDw9IDEgJiYgY2hh cl9sZW4gPD0gMSkgfHwgY2hhcl9sZW4gPT0gMCkKKyAgICByZXR1cm4gMDsKKworICBpZiAo bm9kZS0+dHlwZSA9PSBDT01QTEVYX0JSQUNLRVQpCisgICAgeworICAgICAgY29uc3QgcmVf Y2hhcnNldF90ICpjc2V0ID0gbm9kZS0+b3ByLm1iY3NldDsKKyMgaWZkZWYgX0xJQkMKKyAg ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBpbgorCT0gKChjb25zdCB1bnNpZ25lZCBjaGFy ICopIHJlX3N0cmluZ19nZXRfYnVmZmVyIChpbnB1dCkgKyBzdHJfaWR4KTsKKyAgICAgIElk eCBqOworICAgICAgdWludDMyX3QgbnJ1bGVzOworIyBlbmRpZiAvKiBfTElCQyAqLworICAg ICAgaW50IG1hdGNoX2xlbiA9IDA7CisgICAgICB3Y2hhcl90IHdjID0gKChjc2V0LT5ucmFu Z2VzIHx8IGNzZXQtPm5jaGFyX2NsYXNzZXMgfHwgY3NldC0+bm1iY2hhcnMpCisJCSAgICA/ IHJlX3N0cmluZ193Y2hhcl9hdCAoaW5wdXQsIHN0cl9pZHgpIDogMCk7CisKKyAgICAgIC8q IG1hdGNoIHdpdGggbXVsdGlieXRlIGNoYXJhY3Rlcj8gICovCisgICAgICBmb3IgKGkgPSAw OyBpIDwgY3NldC0+bm1iY2hhcnM7ICsraSkKKwlpZiAod2MgPT0gY3NldC0+bWJjaGFyc1tp XSkKKwkgIHsKKwkgICAgbWF0Y2hfbGVuID0gY2hhcl9sZW47CisJICAgIGdvdG8gY2hlY2tf bm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g7CisJICB9CisgICAgICAvKiBtYXRjaCB3aXRoIGNo YXJhY3Rlcl9jbGFzcz8gICovCisgICAgICBmb3IgKGkgPSAwOyBpIDwgY3NldC0+bmNoYXJf Y2xhc3NlczsgKytpKQorCXsKKwkgIHdjdHlwZV90IHd0ID0gY3NldC0+Y2hhcl9jbGFzc2Vz W2ldOworCSAgaWYgKF9faXN3Y3R5cGUgKHdjLCB3dCkpCisJICAgIHsKKwkgICAgICBtYXRj aF9sZW4gPSBjaGFyX2xlbjsKKwkgICAgICBnb3RvIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVz X21hdGNoOworCSAgICB9CisJfQorCisjIGlmZGVmIF9MSUJDCisgICAgICBucnVsZXMgPSBf TkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworICAg ICAgaWYgKG5ydWxlcyAhPSAwKQorCXsKKwkgIHVuc2lnbmVkIGludCBpbl9jb2xsc2VxID0g MDsKKwkgIGNvbnN0IGludDMyX3QgKnRhYmxlLCAqaW5kaXJlY3Q7CisJICBjb25zdCB1bnNp Z25lZCBjaGFyICp3ZWlnaHRzLCAqZXh0cmE7CisJICBjb25zdCBjaGFyICpjb2xsc2Vxd2M7 CisKKwkgIC8qIG1hdGNoIHdpdGggY29sbGF0aW5nX3N5bWJvbD8gICovCisJICBpZiAoY3Nl dC0+bmNvbGxfc3ltcykKKwkgICAgZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQor CSAgICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9TWU1CX0VYVFJB TUIpOworCSAgZm9yIChpID0gMDsgaSA8IGNzZXQtPm5jb2xsX3N5bXM7ICsraSkKKwkgICAg eworCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbGxfc3ltID0gZXh0cmEgKyBjc2V0 LT5jb2xsX3N5bXNbaV07CisJICAgICAgLyogQ29tcGFyZSB0aGUgbGVuZ3RoIG9mIGlucHV0 IGNvbGxhdGluZyBlbGVtZW50IGFuZAorCQkgdGhlIGxlbmd0aCBvZiBjdXJyZW50IGNvbGxh dGluZyBlbGVtZW50LiAgKi8KKwkgICAgICBpZiAoKmNvbGxfc3ltICE9IGVsZW1fbGVuKQor CQljb250aW51ZTsKKwkgICAgICAvKiBDb21wYXJlIGVhY2ggYnl0ZXMuICAqLworCSAgICAg IGZvciAoaiA9IDA7IGogPCAqY29sbF9zeW07IGorKykKKwkJaWYgKHBpbltqXSAhPSBjb2xs X3N5bVsxICsgal0pCisJCSAgYnJlYWs7CisJICAgICAgaWYgKGogPT0gKmNvbGxfc3ltKQor CQl7CisJCSAgLyogTWF0Y2ggaWYgZXZlcnkgYnl0ZXMgaXMgZXF1YWwuICAqLworCQkgIG1h dGNoX2xlbiA9IGo7CisJCSAgZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsK KwkJfQorCSAgICB9CisKKwkgIGlmIChjc2V0LT5ucmFuZ2VzKQorCSAgICB7CisJICAgICAg aWYgKGVsZW1fbGVuIDw9IGNoYXJfbGVuKQorCQl7CisJCSAgY29sbHNlcXdjID0gX05MX0NV UlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0NPTExTRVFXQyk7CisJCSAgaW5fY29s bHNlcSA9IF9fY29sbHNlcV90YWJsZV9sb29rdXAgKGNvbGxzZXF3Yywgd2MpOworCQl9CisJ ICAgICAgZWxzZQorCQlpbl9jb2xsc2VxID0gZmluZF9jb2xsYXRpb25fc2VxdWVuY2VfdmFs dWUgKHBpbiwgZWxlbV9sZW4pOworCSAgICB9CisJICAvKiBtYXRjaCB3aXRoIHJhbmdlIGV4 cHJlc3Npb24/ICAqLworCSAgLyogRklYTUU6IEltcGxlbWVudCByYXRpb25hbCByYW5nZXMg aGVyZSwgdG9vLiAgKi8KKwkgIGZvciAoaSA9IDA7IGkgPCBjc2V0LT5ucmFuZ2VzOyArK2kp CisJICAgIGlmIChjc2V0LT5yYW5nZV9zdGFydHNbaV0gPD0gaW5fY29sbHNlcQorCQkmJiBp bl9jb2xsc2VxIDw9IGNzZXQtPnJhbmdlX2VuZHNbaV0pCisJICAgICAgeworCQltYXRjaF9s ZW4gPSBlbGVtX2xlbjsKKwkJZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsK KwkgICAgICB9CisKKwkgIC8qIG1hdGNoIHdpdGggZXF1aXZhbGVuY2VfY2xhc3M/ICAqLwor CSAgaWYgKGNzZXQtPm5lcXVpdl9jbGFzc2VzKQorCSAgICB7CisJICAgICAgY29uc3QgdW5z aWduZWQgY2hhciAqY3AgPSBwaW47CisJICAgICAgdGFibGUgPSAoY29uc3QgaW50MzJfdCAq KQorCQlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfVEFCTEVNQik7CisJ ICAgICAgd2VpZ2h0cyA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisJCV9OTF9DVVJSRU5U IChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9XRUlHSFRNQik7CisJICAgICAgZXh0cmEgPSAo Y29uc3QgdW5zaWduZWQgY2hhciAqKQorCQlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05M X0NPTExBVEVfRVhUUkFNQik7CisJICAgICAgaW5kaXJlY3QgPSAoY29uc3QgaW50MzJfdCAq KQorCQlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfSU5ESVJFQ1RNQik7 CisJICAgICAgaW50MzJfdCBpZHggPSBmaW5kaWR4ICh0YWJsZSwgaW5kaXJlY3QsIGV4dHJh LCAmY3AsIGVsZW1fbGVuKTsKKwkgICAgICBpbnQzMl90IHJ1bGUgPSBpZHggPj4gMjQ7CisJ ICAgICAgaWR4ICY9IDB4ZmZmZmZmOworCSAgICAgIGlmIChpZHggPiAwKQorCQl7CisJCSAg c2l6ZV90IHdlaWdodF9sZW4gPSB3ZWlnaHRzW2lkeF07CisJCSAgZm9yIChpID0gMDsgaSA8 IGNzZXQtPm5lcXVpdl9jbGFzc2VzOyArK2kpCisJCSAgICB7CisJCSAgICAgIGludDMyX3Qg ZXF1aXZfY2xhc3NfaWR4ID0gY3NldC0+ZXF1aXZfY2xhc3Nlc1tpXTsKKwkJICAgICAgaW50 MzJfdCBlcXVpdl9jbGFzc19ydWxlID0gZXF1aXZfY2xhc3NfaWR4ID4+IDI0OworCQkgICAg ICBlcXVpdl9jbGFzc19pZHggJj0gMHhmZmZmZmY7CisJCSAgICAgIGlmICh3ZWlnaHRzW2Vx dWl2X2NsYXNzX2lkeF0gPT0gd2VpZ2h0X2xlbgorCQkJICAmJiBlcXVpdl9jbGFzc19ydWxl ID09IHJ1bGUKKwkJCSAgJiYgbWVtY21wICh3ZWlnaHRzICsgaWR4ICsgMSwKKwkJCQkgICAg IHdlaWdodHMgKyBlcXVpdl9jbGFzc19pZHggKyAxLAorCQkJCSAgICAgd2VpZ2h0X2xlbikg PT0gMCkKKwkJCXsKKwkJCSAgbWF0Y2hfbGVuID0gZWxlbV9sZW47CisJCQkgIGdvdG8gY2hl Y2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAg fQorCX0KKyAgICAgIGVsc2UKKyMgZW5kaWYgLyogX0xJQkMgKi8KKwl7CisJICAvKiBtYXRj aCB3aXRoIHJhbmdlIGV4cHJlc3Npb24/ICAqLworCSAgZm9yIChpID0gMDsgaSA8IGNzZXQt Pm5yYW5nZXM7ICsraSkKKwkgICAgeworCSAgICAgIGlmIChjc2V0LT5yYW5nZV9zdGFydHNb aV0gPD0gd2MgJiYgd2MgPD0gY3NldC0+cmFuZ2VfZW5kc1tpXSkKKwkJeworCQkgIG1hdGNo X2xlbiA9IGNoYXJfbGVuOworCQkgIGdvdG8gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0 Y2g7CisJCX0KKwkgICAgfQorCX0KKyAgICBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRj aDoKKyAgICAgIGlmICghY3NldC0+bm9uX21hdGNoKQorCXJldHVybiBtYXRjaF9sZW47Cisg ICAgICBlbHNlCisJeworCSAgaWYgKG1hdGNoX2xlbiA+IDApCisJICAgIHJldHVybiAwOwor CSAgZWxzZQorCSAgICByZXR1cm4gKGVsZW1fbGVuID4gY2hhcl9sZW4pID8gZWxlbV9sZW4g OiBjaGFyX2xlbjsKKwl9CisgICAgfQorICByZXR1cm4gMDsKK30KKworIyBpZmRlZiBfTElC Qworc3RhdGljIHVuc2lnbmVkIGludAorZmluZF9jb2xsYXRpb25fc2VxdWVuY2VfdmFsdWUg KGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1icywgc2l6ZV90IG1ic19sZW4pCit7CisgIHVpbnQz Ml90IG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRF X05SVUxFUyk7CisgIGlmIChucnVsZXMgPT0gMCkKKyAgICB7CisgICAgICBpZiAobWJzX2xl biA9PSAxKQorCXsKKwkgIC8qIE5vIHZhbGlkIGNoYXJhY3Rlci4gIE1hdGNoIGl0IGFzIGEg c2luZ2xlIGJ5dGUgY2hhcmFjdGVyLiAgKi8KKwkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNv bGxzZXEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorCSAgICBfTkxfQ1VSUkVOVCAoTENf Q09MTEFURSwgX05MX0NPTExBVEVfQ09MTFNFUU1CKTsKKwkgIHJldHVybiBjb2xsc2VxW21i c1swXV07CisJfQorICAgICAgcmV0dXJuIFVJTlRfTUFYOworICAgIH0KKyAgZWxzZQorICAg IHsKKyAgICAgIGludDMyX3QgaWR4OworICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZXh0 cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorCV9OTF9DVVJSRU5UIChMQ19DT0xMQVRF LCBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIpOworICAgICAgaW50MzJfdCBleHRyYXNpemUg PSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorCV9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBf TkxfQ09MTEFURV9TWU1CX0VYVFJBTUIgKyAxKSAtIGV4dHJhOworCisgICAgICBmb3IgKGlk eCA9IDA7IGlkeCA8IGV4dHJhc2l6ZTspCisJeworCSAgaW50IG1ic19jbnQ7CisJICBib29s IGZvdW5kID0gZmFsc2U7CisJICBpbnQzMl90IGVsZW1fbWJzX2xlbjsKKwkgIC8qIFNraXAg dGhlIG5hbWUgb2YgY29sbGF0aW5nIGVsZW1lbnQgbmFtZS4gICovCisJICBpZHggPSBpZHgg KyBleHRyYVtpZHhdICsgMTsKKwkgIGVsZW1fbWJzX2xlbiA9IGV4dHJhW2lkeCsrXTsKKwkg IGlmIChtYnNfbGVuID09IGVsZW1fbWJzX2xlbikKKwkgICAgeworCSAgICAgIGZvciAobWJz X2NudCA9IDA7IG1ic19jbnQgPCBlbGVtX21ic19sZW47ICsrbWJzX2NudCkKKwkJaWYgKGV4 dHJhW2lkeCArIG1ic19jbnRdICE9IG1ic1ttYnNfY250XSkKKwkJICBicmVhazsKKwkgICAg ICBpZiAobWJzX2NudCA9PSBlbGVtX21ic19sZW4pCisJCS8qIEZvdW5kIHRoZSBlbnRyeS4g ICovCisJCWZvdW5kID0gdHJ1ZTsKKwkgICAgfQorCSAgLyogU2tpcCB0aGUgYnl0ZSBzZXF1 ZW5jZSBvZiB0aGUgY29sbGF0aW5nIGVsZW1lbnQuICAqLworCSAgaWR4ICs9IGVsZW1fbWJz X2xlbjsKKwkgIC8qIEFkanVzdCBmb3IgdGhlIGFsaWdubWVudC4gICovCisJICBpZHggPSAo aWR4ICsgMykgJiB+MzsKKwkgIC8qIFNraXAgdGhlIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1 ZS4gICovCisJICBpZHggKz0gc2l6ZW9mICh1aW50MzJfdCk7CisJICAvKiBTa2lwIHRoZSB3 aWRlIGNoYXIgc2VxdWVuY2Ugb2YgdGhlIGNvbGxhdGluZyBlbGVtZW50LiAgKi8KKwkgIGlk eCA9IGlkeCArIHNpemVvZiAodWludDMyX3QpICogKCooaW50MzJfdCAqKSAoZXh0cmEgKyBp ZHgpICsgMSk7CisJICAvKiBJZiB3ZSBmb3VuZCB0aGUgZW50cnksIHJldHVybiB0aGUgc2Vx dWVuY2UgdmFsdWUuICAqLworCSAgaWYgKGZvdW5kKQorCSAgICByZXR1cm4gKih1aW50MzJf dCAqKSAoZXh0cmEgKyBpZHgpOworCSAgLyogU2tpcCB0aGUgY29sbGF0aW9uIHNlcXVlbmNl IHZhbHVlLiAgKi8KKwkgIGlkeCArPSBzaXplb2YgKHVpbnQzMl90KTsKKwl9CisgICAgICBy ZXR1cm4gVUlOVF9NQVg7CisgICAgfQorfQorIyBlbmRpZiAvKiBfTElCQyAqLworI2VuZGlm IC8qIFJFX0VOQUJMRV9JMThOICovCisKKy8qIENoZWNrIHdoZXRoZXIgdGhlIG5vZGUgYWNj ZXB0cyB0aGUgYnl0ZSB3aGljaCBpcyBJRFgtdGgKKyAgIGJ5dGUgb2YgdGhlIElOUFVULiAg Ki8KKworc3RhdGljIGJvb2wKK2NoZWNrX25vZGVfYWNjZXB0IChjb25zdCByZV9tYXRjaF9j b250ZXh0X3QgKm1jdHgsIGNvbnN0IHJlX3Rva2VuX3QgKm5vZGUsCisJCSAgIElkeCBpZHgp Cit7CisgIHVuc2lnbmVkIGNoYXIgY2g7CisgIGNoID0gcmVfc3RyaW5nX2J5dGVfYXQgKCZt Y3R4LT5pbnB1dCwgaWR4KTsKKyAgc3dpdGNoIChub2RlLT50eXBlKQorICAgIHsKKyAgICBj YXNlIENIQVJBQ1RFUjoKKyAgICAgIGlmIChub2RlLT5vcHIuYyAhPSBjaCkKKyAgICAgICAg cmV0dXJuIGZhbHNlOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNJTVBMRV9CUkFDS0VU OgorICAgICAgaWYgKCFiaXRzZXRfY29udGFpbiAobm9kZS0+b3ByLnNiY3NldCwgY2gpKQor ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBicmVhazsKKworI2lmZGVmIFJFX0VOQUJM RV9JMThOCisgICAgY2FzZSBPUF9VVEY4X1BFUklPRDoKKyAgICAgIGlmIChjaCA+PSBBU0NJ SV9DSEFSUykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgRkFMTFRIUk9VR0g7Cisj ZW5kaWYKKyAgICBjYXNlIE9QX1BFUklPRDoKKyAgICAgIGlmICgoY2ggPT0gJ1xuJyAmJiAh KG1jdHgtPmRmYS0+c3ludGF4ICYgUkVfRE9UX05FV0xJTkUpKQorCSAgfHwgKGNoID09ICdc MCcgJiYgKG1jdHgtPmRmYS0+c3ludGF4ICYgUkVfRE9UX05PVF9OVUxMKSkpCisJcmV0dXJu IGZhbHNlOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZh bHNlOworICAgIH0KKworICBpZiAobm9kZS0+Y29uc3RyYWludCkKKyAgICB7CisgICAgICAv KiBUaGUgbm9kZSBoYXMgY29uc3RyYWludHMuICBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50 IGNvbnRleHQKKwkgc2F0aXNmaWVzIHRoZSBjb25zdHJhaW50cy4gICovCisgICAgICB1bnNp Z25lZCBpbnQgY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0ICgmbWN0eC0+aW5wdXQs IGlkeCwKKwkJCQkJCSAgIG1jdHgtPmVmbGFncyk7CisgICAgICBpZiAoTk9UX1NBVElTRllf TkVYVF9DT05TVFJBSU5UIChub2RlLT5jb25zdHJhaW50LCBjb250ZXh0KSkKKwlyZXR1cm4g ZmFsc2U7CisgICAgfQorCisgIHJldHVybiB0cnVlOworfQorCisvKiBFeHRlbmQgdGhlIGJ1 ZmZlcnMsIGlmIHRoZSBidWZmZXJzIGhhdmUgcnVuIG91dC4gICovCisKK3N0YXRpYyByZWdf ZXJyY29kZV90CitfX2F0dHJpYnV0ZV93YXJuX3VudXNlZF9yZXN1bHRfXworZXh0ZW5kX2J1 ZmZlcnMgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IG1pbl9sZW4pCit7CisgIHJl Z19lcnJjb2RlX3QgcmV0OworICByZV9zdHJpbmdfdCAqcHN0ciA9ICZtY3R4LT5pbnB1dDsK KworICAvKiBBdm9pZCBvdmVyZmxvdy4gICovCisgIGlmIChCRSAoTUlOIChJRFhfTUFYLCBT SVpFX01BWCAvIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSkgLyAyCisgICAgICAgICAgPD0g cHN0ci0+YnVmc19sZW4sIDApKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworCisgIC8qIERv dWJsZSB0aGUgbGVuZ3RocyBvZiB0aGUgYnVmZmVycywgYnV0IGFsbG9jYXRlIGF0IGxlYXN0 IE1JTl9MRU4uICAqLworICByZXQgPSByZV9zdHJpbmdfcmVhbGxvY19idWZmZXJzIChwc3Ry LAorCQkJCSAgIE1BWCAobWluX2xlbiwKKwkJCQkJTUlOIChwc3RyLT5sZW4sIHBzdHItPmJ1 ZnNfbGVuICogMikpKTsKKyAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorICAg IHJldHVybiByZXQ7CisKKyAgaWYgKG1jdHgtPnN0YXRlX2xvZyAhPSBOVUxMKQorICAgIHsK KyAgICAgIC8qIEFuZCBkb3VibGUgdGhlIGxlbmd0aCBvZiBzdGF0ZV9sb2cuICAqLworICAg ICAgLyogWFhYIFdlIGhhdmUgbm8gaW5kaWNhdGlvbiBvZiB0aGUgc2l6ZSBvZiB0aGlzIGJ1 ZmZlci4gIElmIHRoaXMKKwkgYWxsb2NhdGlvbiBmYWlsIHdlIGhhdmUgbm8gaW5kaWNhdGlv biB0aGF0IHRoZSBzdGF0ZV9sb2cgYXJyYXkKKwkgZG9lcyBub3QgaGF2ZSB0aGUgcmlnaHQg c2l6ZS4gICovCisgICAgICByZV9kZmFzdGF0ZV90ICoqbmV3X2FycmF5ID0gcmVfcmVhbGxv YyAobWN0eC0+c3RhdGVfbG9nLCByZV9kZmFzdGF0ZV90ICosCisJCQkJCSAgICAgIHBzdHIt PmJ1ZnNfbGVuICsgMSk7CisgICAgICBpZiAoQkUgKG5ld19hcnJheSA9PSBOVUxMLCAwKSkK KwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIG1jdHgtPnN0YXRlX2xvZyA9IG5ld19hcnJh eTsKKyAgICB9CisKKyAgLyogVGhlbiByZWNvbnN0cnVjdCB0aGUgYnVmZmVycy4gICovCisg IGlmIChwc3RyLT5pY2FzZSkKKyAgICB7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAg IGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKwl7CisJICByZXQgPSBidWlsZF93Y3NfdXBw ZXJfYnVmZmVyIChwc3RyKTsKKwkgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkK KwkgICAgcmV0dXJuIHJldDsKKwl9CisgICAgICBlbHNlCisjZW5kaWYgLyogUkVfRU5BQkxF X0kxOE4gICovCisJYnVpbGRfdXBwZXJfYnVmZmVyIChwc3RyKTsKKyAgICB9CisgIGVsc2UK KyAgICB7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGlmIChwc3RyLT5tYl9jdXJf bWF4ID4gMSkKKwlidWlsZF93Y3NfYnVmZmVyIChwc3RyKTsKKyAgICAgIGVsc2UKKyNlbmRp ZiAvKiBSRV9FTkFCTEVfSTE4TiAgKi8KKwl7CisJICBpZiAocHN0ci0+dHJhbnMgIT0gTlVM TCkKKwkgICAgcmVfc3RyaW5nX3RyYW5zbGF0ZV9idWZmZXIgKHBzdHIpOworCX0KKyAgICB9 CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworDAorLyogRnVuY3Rpb25zIGZvciBtYXRj aGluZyBjb250ZXh0LiAgKi8KKworLyogSW5pdGlhbGl6ZSBNQ1RYLiAgKi8KKworc3RhdGlj IHJlZ19lcnJjb2RlX3QKK19fYXR0cmlidXRlX3dhcm5fdW51c2VkX3Jlc3VsdF9fCittYXRj aF9jdHhfaW5pdCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgZWZsYWdzLCBJZHgg bikKK3sKKyAgbWN0eC0+ZWZsYWdzID0gZWZsYWdzOworICBtY3R4LT5tYXRjaF9sYXN0ID0g LTE7CisgIGlmIChuID4gMCkKKyAgICB7CisgICAgICAvKiBBdm9pZCBvdmVyZmxvdy4gICov CisgICAgICBzaXplX3QgbWF4X29iamVjdF9zaXplID0KKwlNQVggKHNpemVvZiAoc3RydWN0 IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkpLAorCSAgICAgc2l6ZW9mIChyZV9zdWJfbWF0Y2hf dG9wX3QgKikpOworICAgICAgaWYgKEJFIChNSU4gKElEWF9NQVgsIFNJWkVfTUFYIC8gbWF4 X29iamVjdF9zaXplKSA8IG4sIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworCisgICAgICBt Y3R4LT5ia3JlZl9lbnRzID0gcmVfbWFsbG9jIChzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9l bnRyeSwgbik7CisgICAgICBtY3R4LT5zdWJfdG9wcyA9IHJlX21hbGxvYyAocmVfc3ViX21h dGNoX3RvcF90ICosIG4pOworICAgICAgaWYgKEJFIChtY3R4LT5ia3JlZl9lbnRzID09IE5V TEwgfHwgbWN0eC0+c3ViX3RvcHMgPT0gTlVMTCwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7 CisgICAgfQorICAvKiBBbHJlYWR5IHplcm8tZWQgYnkgdGhlIGNhbGxlci4KKyAgICAgZWxz ZQorICAgICAgIG1jdHgtPmJrcmVmX2VudHMgPSBOVUxMOworICAgICBtY3R4LT5uYmtyZWZf ZW50cyA9IDA7CisgICAgIG1jdHgtPm5zdWJfdG9wcyA9IDA7ICAqLworICBtY3R4LT5hYmty ZWZfZW50cyA9IG47CisgIG1jdHgtPm1heF9tYl9lbGVtX2xlbiA9IDE7CisgIG1jdHgtPmFz dWJfdG9wcyA9IG47CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogQ2xlYW4gdGhl IGVudHJpZXMgd2hpY2ggZGVwZW5kIG9uIHRoZSBjdXJyZW50IGlucHV0IGluIE1DVFguCisg ICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgaW52b2tlZCB3aGVuIHRoZSBtYXRjaGVyIGNoYW5n ZXMgdGhlIHN0YXJ0IGluZGV4CisgICBvZiB0aGUgaW5wdXQsIG9yIGNoYW5nZXMgdGhlIGlu cHV0IHN0cmluZy4gICovCisKK3N0YXRpYyB2b2lkCittYXRjaF9jdHhfY2xlYW4gKHJlX21h dGNoX2NvbnRleHRfdCAqbWN0eCkKK3sKKyAgSWR4IHN0X2lkeDsKKyAgZm9yIChzdF9pZHgg PSAwOyBzdF9pZHggPCBtY3R4LT5uc3ViX3RvcHM7ICsrc3RfaWR4KQorICAgIHsKKyAgICAg IElkeCBzbF9pZHg7CisgICAgICByZV9zdWJfbWF0Y2hfdG9wX3QgKnRvcCA9IG1jdHgtPnN1 Yl90b3BzW3N0X2lkeF07CisgICAgICBmb3IgKHNsX2lkeCA9IDA7IHNsX2lkeCA8IHRvcC0+ bmxhc3RzOyArK3NsX2lkeCkKKwl7CisJICByZV9zdWJfbWF0Y2hfbGFzdF90ICpsYXN0ID0g dG9wLT5sYXN0c1tzbF9pZHhdOworCSAgcmVfZnJlZSAobGFzdC0+cGF0aC5hcnJheSk7CisJ ICByZV9mcmVlIChsYXN0KTsKKwl9CisgICAgICByZV9mcmVlICh0b3AtPmxhc3RzKTsKKyAg ICAgIGlmICh0b3AtPnBhdGgpCisJeworCSAgcmVfZnJlZSAodG9wLT5wYXRoLT5hcnJheSk7 CisJICByZV9mcmVlICh0b3AtPnBhdGgpOworCX0KKyAgICAgIHJlX2ZyZWUgKHRvcCk7Cisg ICAgfQorCisgIG1jdHgtPm5zdWJfdG9wcyA9IDA7CisgIG1jdHgtPm5ia3JlZl9lbnRzID0g MDsKK30KKworLyogRnJlZSBhbGwgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggTUNUWC4g ICovCisKK3N0YXRpYyB2b2lkCittYXRjaF9jdHhfZnJlZSAocmVfbWF0Y2hfY29udGV4dF90 ICptY3R4KQoreworICAvKiBGaXJzdCwgZnJlZSBhbGwgdGhlIG1lbW9yeSBhc3NvY2lhdGVk IHdpdGggTUNUWC0+U1VCX1RPUFMuICAqLworICBtYXRjaF9jdHhfY2xlYW4gKG1jdHgpOwor ICByZV9mcmVlIChtY3R4LT5zdWJfdG9wcyk7CisgIHJlX2ZyZWUgKG1jdHgtPmJrcmVmX2Vu dHMpOworfQorCisvKiBBZGQgYSBuZXcgYmFja3JlZmVyZW5jZSBlbnRyeSB0byBNQ1RYLgor ICAgTm90ZSB0aGF0IHdlIGFzc3VtZSB0aGF0IGNhbGxlciBuZXZlciBjYWxsIHRoaXMgZnVu Y3Rpb24gd2l0aCBkdXBsaWNhdGUKKyAgIGVudHJ5LCBhbmQgY2FsbCB3aXRoIFNUUl9JRFgg d2hpY2ggaXNuJ3Qgc21hbGxlciB0aGFuIGFueSBleGlzdGluZyBlbnRyeS4KKyovCisKK3N0 YXRpYyByZWdfZXJyY29kZV90CitfX2F0dHJpYnV0ZV93YXJuX3VudXNlZF9yZXN1bHRfXwor bWF0Y2hfY3R4X2FkZF9lbnRyeSAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBJZHggbm9k ZSwgSWR4IHN0cl9pZHgsIElkeCBmcm9tLAorCQkgICAgIElkeCB0bykKK3sKKyAgaWYgKG1j dHgtPm5ia3JlZl9lbnRzID49IG1jdHgtPmFia3JlZl9lbnRzKQorICAgIHsKKyAgICAgIHN0 cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5KiBuZXdfZW50cnk7CisgICAgICBuZXdfZW50 cnkgPSByZV9yZWFsbG9jIChtY3R4LT5ia3JlZl9lbnRzLCBzdHJ1Y3QgcmVfYmFja3JlZl9j YWNoZV9lbnRyeSwKKwkJCSAgICAgIG1jdHgtPmFia3JlZl9lbnRzICogMik7CisgICAgICBp ZiAoQkUgKG5ld19lbnRyeSA9PSBOVUxMLCAwKSkKKwl7CisJICByZV9mcmVlIChtY3R4LT5i a3JlZl9lbnRzKTsKKwkgIHJldHVybiBSRUdfRVNQQUNFOworCX0KKyAgICAgIG1jdHgtPmJr cmVmX2VudHMgPSBuZXdfZW50cnk7CisgICAgICBtZW1zZXQgKG1jdHgtPmJrcmVmX2VudHMg KyBtY3R4LT5uYmtyZWZfZW50cywgJ1wwJywKKwkgICAgICBzaXplb2YgKHN0cnVjdCByZV9i YWNrcmVmX2NhY2hlX2VudHJ5KSAqIG1jdHgtPmFia3JlZl9lbnRzKTsKKyAgICAgIG1jdHgt PmFia3JlZl9lbnRzICo9IDI7CisgICAgfQorICBpZiAobWN0eC0+bmJrcmVmX2VudHMgPiAw CisgICAgICAmJiBtY3R4LT5ia3JlZl9lbnRzW21jdHgtPm5ia3JlZl9lbnRzIC0gMV0uc3Ry X2lkeCA9PSBzdHJfaWR4KQorICAgIG1jdHgtPmJrcmVmX2VudHNbbWN0eC0+bmJrcmVmX2Vu dHMgLSAxXS5tb3JlID0gMTsKKworICBtY3R4LT5ia3JlZl9lbnRzW21jdHgtPm5ia3JlZl9l bnRzXS5ub2RlID0gbm9kZTsKKyAgbWN0eC0+YmtyZWZfZW50c1ttY3R4LT5uYmtyZWZfZW50 c10uc3RyX2lkeCA9IHN0cl9pZHg7CisgIG1jdHgtPmJrcmVmX2VudHNbbWN0eC0+bmJrcmVm X2VudHNdLnN1YmV4cF9mcm9tID0gZnJvbTsKKyAgbWN0eC0+YmtyZWZfZW50c1ttY3R4LT5u YmtyZWZfZW50c10uc3ViZXhwX3RvID0gdG87CisKKyAgLyogVGhpcyBpcyBhIGNhY2hlIHRo YXQgc2F2ZXMgbmVnYXRpdmUgcmVzdWx0cyBvZiBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9z LgorICAgICBJZiBiaXQgTiBpcyBjbGVhciwgbWVhbnMgdGhhdCB0aGlzIGVudHJ5IHdvbid0 IGVwc2lsb24tdHJhbnNpdGlvbiB0bworICAgICBhbiBPUF9PUEVOX1NVQkVYUCBvciBPUF9D TE9TRV9TVUJFWFAgZm9yIHRoZSBOKzEtdGggc3ViZXhwcmVzc2lvbi4gIElmCisgICAgIGl0 IGlzIHNldCwgY2hlY2tfZHN0X2xpbWl0c19jYWxjX3Bvc18xIHdpbGwgcmVjdXJzZSBhbmQg dHJ5IHRvIGZpbmQgb25lCisgICAgIHN1Y2ggbm9kZS4KKworICAgICBBIGJhY2tyZWZlcmVu Y2UgZG9lcyBub3QgZXBzaWxvbi10cmFuc2l0aW9uIHVubGVzcyBpdCBpcyBlbXB0eSwgc28g c2V0CisgICAgIHRvIGFsbCB6ZXJvcyBpZiBGUk9NICE9IFRPLiAgKi8KKyAgbWN0eC0+Ymty ZWZfZW50c1ttY3R4LT5uYmtyZWZfZW50c10uZXBzX3JlYWNoYWJsZV9zdWJleHBzX21hcAor ICAgID0gKGZyb20gPT0gdG8gPyAtMSA6IDApOworCisgIG1jdHgtPmJrcmVmX2VudHNbbWN0 eC0+bmJrcmVmX2VudHMrK10ubW9yZSA9IDA7CisgIGlmIChtY3R4LT5tYXhfbWJfZWxlbV9s ZW4gPCB0byAtIGZyb20pCisgICAgbWN0eC0+bWF4X21iX2VsZW1fbGVuID0gdG8gLSBmcm9t OworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIFJldHVybiB0aGUgZmlyc3QgZW50 cnkgd2l0aCB0aGUgc2FtZSBzdHJfaWR4LCBvciAtMSBpZiBub25lIGlzCisgICBmb3VuZC4g IE5vdGUgdGhhdCBNQ1RYLT5CS1JFRl9FTlRTIGlzIGFscmVhZHkgc29ydGVkIGJ5IE1DVFgt PlNUUl9JRFguICAqLworCitzdGF0aWMgSWR4CitzZWFyY2hfY3VyX2JrcmVmX2VudHJ5IChj b25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIElkeCBzdHJfaWR4KQoreworICBJZHgg bGVmdCwgcmlnaHQsIG1pZCwgbGFzdDsKKyAgbGFzdCA9IHJpZ2h0ID0gbWN0eC0+bmJrcmVm X2VudHM7CisgIGZvciAobGVmdCA9IDA7IGxlZnQgPCByaWdodDspCisgICAgeworICAgICAg bWlkID0gKGxlZnQgKyByaWdodCkgLyAyOworICAgICAgaWYgKG1jdHgtPmJrcmVmX2VudHNb bWlkXS5zdHJfaWR4IDwgc3RyX2lkeCkKKwlsZWZ0ID0gbWlkICsgMTsKKyAgICAgIGVsc2UK KwlyaWdodCA9IG1pZDsKKyAgICB9CisgIGlmIChsZWZ0IDwgbGFzdCAmJiBtY3R4LT5ia3Jl Zl9lbnRzW2xlZnRdLnN0cl9pZHggPT0gc3RyX2lkeCkKKyAgICByZXR1cm4gbGVmdDsKKyAg ZWxzZQorICAgIHJldHVybiAtMTsKK30KKworLyogUmVnaXN0ZXIgdGhlIG5vZGUgTk9ERSwg d2hvc2UgdHlwZSBpcyBPUF9PUEVOX1NVQkVYUCwgYW5kIHdoaWNoIG1hdGNoZXMKKyAgIGF0 IFNUUl9JRFguICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorX19hdHRyaWJ1dGVfd2Fy bl91bnVzZWRfcmVzdWx0X18KK21hdGNoX2N0eF9hZGRfc3VidG9wIChyZV9tYXRjaF9jb250 ZXh0X3QgKm1jdHgsIElkeCBub2RlLCBJZHggc3RyX2lkeCkKK3sKKyNpZmRlZiBERUJVRwor ICBhc3NlcnQgKG1jdHgtPnN1Yl90b3BzICE9IE5VTEwpOworICBhc3NlcnQgKG1jdHgtPmFz dWJfdG9wcyA+IDApOworI2VuZGlmCisgIGlmIChCRSAobWN0eC0+bnN1Yl90b3BzID09IG1j dHgtPmFzdWJfdG9wcywgMCkpCisgICAgeworICAgICAgSWR4IG5ld19hc3ViX3RvcHMgPSBt Y3R4LT5hc3ViX3RvcHMgKiAyOworICAgICAgcmVfc3ViX21hdGNoX3RvcF90ICoqbmV3X2Fy cmF5ID0gcmVfcmVhbGxvYyAobWN0eC0+c3ViX3RvcHMsCisJCQkJCQkgICByZV9zdWJfbWF0 Y2hfdG9wX3QgKiwKKwkJCQkJCSAgIG5ld19hc3ViX3RvcHMpOworICAgICAgaWYgKEJFIChu ZXdfYXJyYXkgPT0gTlVMTCwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBtY3R4 LT5zdWJfdG9wcyA9IG5ld19hcnJheTsKKyAgICAgIG1jdHgtPmFzdWJfdG9wcyA9IG5ld19h c3ViX3RvcHM7CisgICAgfQorICBtY3R4LT5zdWJfdG9wc1ttY3R4LT5uc3ViX3RvcHNdID0g Y2FsbG9jICgxLCBzaXplb2YgKHJlX3N1Yl9tYXRjaF90b3BfdCkpOworICBpZiAoQkUgKG1j dHgtPnN1Yl90b3BzW21jdHgtPm5zdWJfdG9wc10gPT0gTlVMTCwgMCkpCisgICAgcmV0dXJu IFJFR19FU1BBQ0U7CisgIG1jdHgtPnN1Yl90b3BzW21jdHgtPm5zdWJfdG9wc10tPm5vZGUg PSBub2RlOworICBtY3R4LT5zdWJfdG9wc1ttY3R4LT5uc3ViX3RvcHMrK10tPnN0cl9pZHgg PSBzdHJfaWR4OworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIFJlZ2lzdGVyIHRo ZSBub2RlIE5PREUsIHdob3NlIHR5cGUgaXMgT1BfQ0xPU0VfU1VCRVhQLCBhbmQgd2hpY2gg bWF0Y2hlcworICAgYXQgU1RSX0lEWCwgd2hvc2UgY29ycmVzcG9uZGluZyBPUF9PUEVOX1NV QkVYUCBpcyBTVUJfVE9QLiAgKi8KKworc3RhdGljIHJlX3N1Yl9tYXRjaF9sYXN0X3QgKgor bWF0Y2hfY3R4X2FkZF9zdWJsYXN0IChyZV9zdWJfbWF0Y2hfdG9wX3QgKnN1YnRvcCwgSWR4 IG5vZGUsIElkeCBzdHJfaWR4KQoreworICByZV9zdWJfbWF0Y2hfbGFzdF90ICpuZXdfZW50 cnk7CisgIGlmIChCRSAoc3VidG9wLT5ubGFzdHMgPT0gc3VidG9wLT5hbGFzdHMsIDApKQor ICAgIHsKKyAgICAgIElkeCBuZXdfYWxhc3RzID0gMiAqIHN1YnRvcC0+YWxhc3RzICsgMTsK KyAgICAgIHJlX3N1Yl9tYXRjaF9sYXN0X3QgKipuZXdfYXJyYXkgPSByZV9yZWFsbG9jIChz dWJ0b3AtPmxhc3RzLAorCQkJCQkJICAgIHJlX3N1Yl9tYXRjaF9sYXN0X3QgKiwKKwkJCQkJ CSAgICBuZXdfYWxhc3RzKTsKKyAgICAgIGlmIChCRSAobmV3X2FycmF5ID09IE5VTEwsIDAp KQorCXJldHVybiBOVUxMOworICAgICAgc3VidG9wLT5sYXN0cyA9IG5ld19hcnJheTsKKyAg ICAgIHN1YnRvcC0+YWxhc3RzID0gbmV3X2FsYXN0czsKKyAgICB9CisgIG5ld19lbnRyeSA9 IGNhbGxvYyAoMSwgc2l6ZW9mIChyZV9zdWJfbWF0Y2hfbGFzdF90KSk7CisgIGlmIChCRSAo bmV3X2VudHJ5ICE9IE5VTEwsIDEpKQorICAgIHsKKyAgICAgIHN1YnRvcC0+bGFzdHNbc3Vi dG9wLT5ubGFzdHNdID0gbmV3X2VudHJ5OworICAgICAgbmV3X2VudHJ5LT5ub2RlID0gbm9k ZTsKKyAgICAgIG5ld19lbnRyeS0+c3RyX2lkeCA9IHN0cl9pZHg7CisgICAgICArK3N1YnRv cC0+bmxhc3RzOworICAgIH0KKyAgcmV0dXJuIG5ld19lbnRyeTsKK30KKworc3RhdGljIHZv aWQKK3NpZnRfY3R4X2luaXQgKHJlX3NpZnRfY29udGV4dF90ICpzY3R4LCByZV9kZmFzdGF0 ZV90ICoqc2lmdGVkX3N0cywKKwkgICAgICAgcmVfZGZhc3RhdGVfdCAqKmxpbWl0ZWRfc3Rz LCBJZHggbGFzdF9ub2RlLCBJZHggbGFzdF9zdHJfaWR4KQoreworICBzY3R4LT5zaWZ0ZWRf c3RhdGVzID0gc2lmdGVkX3N0czsKKyAgc2N0eC0+bGltaXRlZF9zdGF0ZXMgPSBsaW1pdGVk X3N0czsKKyAgc2N0eC0+bGFzdF9ub2RlID0gbGFzdF9ub2RlOworICBzY3R4LT5sYXN0X3N0 cl9pZHggPSBsYXN0X3N0cl9pZHg7CisgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKCZzY3R4 LT5saW1pdHMpOworfQpkaWZmIC0tZ2l0IGEvbGlzcC9jaGFyLWZvbGQuZWwgYi9saXNwL2No YXItZm9sZC5lbAppbmRleCA5YzA1ZTM2NGRmLi4zMTFmZTg4NWE5IDEwMDY0NAotLS0gYS9s aXNwL2NoYXItZm9sZC5lbAorKysgYi9saXNwL2NoYXItZm9sZC5lbApAQCAtMjE0LDcgKzIx NCw3IEBAIGNoYXItZm9sZC10by1yZWdleHAKICAgICAod2hlbiAoPiBzcGFjZXMgMCkKICAg ICAgIChwdXNoIChjaGFyLWZvbGQtLW1ha2Utc3BhY2Utc3RyaW5nIHNwYWNlcykgb3V0KSkK ICAgICAobGV0ICgocmVnZXhwIChhcHBseSAjJ2NvbmNhdCAobnJldmVyc2Ugb3V0KSkpKQot ICAgICAgOzsgTGltaXRlZCBieSBgTUFYX0JVRl9TSVpFJyBpbiBgcmVnZXguYycuCisgICAg ICA7OyBMaW1pdGVkIGJ5IE1BWF9CVUZfU0laRSBpbiByZWdleC1lbWFjcy5jLgogICAgICAg KGlmICg+IChsZW5ndGggcmVnZXhwKSA1MDAwKQogICAgICAgICAgIChyZWdleHAtcXVvdGUg c3RyaW5nKQogICAgICAgICByZWdleHApKSkpCmRpZmYgLS1naXQgYS9tNC9idWlsdGluLWV4 cGVjdC5tNCBiL200L2J1aWx0aW4tZXhwZWN0Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAuLmExZWFmOTY1YjQKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9idWls dGluLWV4cGVjdC5tNApAQCAtMCwwICsxLDQ5IEBACitkbmwgQ2hlY2sgZm9yIF9fYnVpbHRp bl9leHBlY3QuCisKK2RubCBDb3B5cmlnaHQgMjAxNi0yMDE4IEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24g dG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9k aWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2Ru bCBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LgorCitBQ19ERUZVTihbZ2xfX19CVUlMVElOX0VY UEVDVF0sCitbCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgX19idWlsdGluX2V4cGVjdF0sCisg ICAgW2dsX2N2X19fYnVpbHRpbl9leHBlY3RdLAorICAgIFtBQ19MSU5LX0lGRUxTRSgKKyAg ICAgICBbQUNfTEFOR19TT1VSQ0UoW1sKKyAgICAgICAgIGludAorICAgICAgICAgbWFpbiAo aW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgeworICAgICAgICAgICBhcmdjID0g X19idWlsdGluX2V4cGVjdCAoYXJnYywgMTAwKTsKKyAgICAgICAgICAgcmV0dXJuIGFyZ3Zb YXJnYyAhPSAxMDBdWzBdOworICAgICAgICAgfV1dKV0sCisgICAgICAgW2dsX2N2X19fYnVp bHRpbl9leHBlY3Q9eWVzXSwKKyAgICAgICBbQUNfTElOS19JRkVMU0UoCisgICAgICAgICAg W0FDX0xBTkdfU09VUkNFKFtbCisgICAgICAgICAgICAgI2luY2x1ZGUgPGJ1aWx0aW5zLmg+ CisgICAgICAgICAgICAgaW50CisgICAgICAgICAgICAgbWFpbiAoaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGFyZ2MgPSBfX2J1aWx0 aW5fZXhwZWN0IChhcmdjLCAxMDApOworICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3ZbYXJn YyAhPSAxMDBdWzBdOworICAgICAgICAgICAgIH1dXSldLAorICAgICAgICAgIFtnbF9jdl9f X2J1aWx0aW5fZXhwZWN0PSJpbiA8YnVpbHRpbnMuaD4iXSwKKyAgICAgICAgICBbZ2xfY3Zf X19idWlsdGluX2V4cGVjdD1ub10pXSldKQorICBpZiB0ZXN0ICIkZ2xfY3ZfX19idWlsdGlu X2V4cGVjdCIgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoW0hBVkVfX19CVUlMVElOX0VY UEVDVF0sIFsxXSkKKyAgZWxpZiB0ZXN0ICIkZ2xfY3ZfX19idWlsdGluX2V4cGVjdCIgPSAi aW4gPGJ1aWx0aW5zLmg+IjsgdGhlbgorICAgIEFDX0RFRklORShbSEFWRV9fX0JVSUxUSU5f RVhQRUNUXSwgWzJdKQorICBmaQorICBBSF9WRVJCQVRJTShbSEFWRV9fX0JVSUxUSU5fRVhQ RUNUXSwKKyAgICBbLyogRGVmaW5lIHRvIDEgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIF9f YnVpbHRpbl9leHBlY3QsCisgICBhbmQgdG8gMiBpZiA8YnVpbHRpbnMuaD4gZG9lcy4gICov CisjdW5kZWYgSEFWRV9fX0JVSUxUSU5fRVhQRUNUCisjaWZuZGVmIEhBVkVfX19CVUlMVElO X0VYUEVDVAorIyBkZWZpbmUgX19idWlsdGluX2V4cGVjdChlLCBjKSAoZSkKKyNlbGlmIEhB VkVfX19CVUlMVElOX0VYUEVDVCA9PSAyCisjIGluY2x1ZGUgPGJ1aWx0aW5zLmg+CisjZW5k aWYKKyAgICBdKQorXSkKZGlmZiAtLWdpdCBhL200L2VlYWxsb2MubTQgYi9tNC9lZWFsbG9j Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmE1YTRlMjY3ZDgK LS0tIC9kZXYvbnVsbAorKysgYi9tNC9lZWFsbG9jLm00CkBAIC0wLDAgKzEsMzEgQEAKKyMg ZWVhbGxvYy5tNCBzZXJpYWwgMworZG5sIENvcHlyaWdodCAoQykgMjAwMywgMjAwOS0yMDE4 IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVl IHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5s aW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3 aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBp cyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9FRUFMTE9DXSwKK1sKKyAgQUNfUkVRVUlS RShbZ2xfRUVNQUxMT0NdKQorICBBQ19SRVFVSVJFKFtnbF9FRVJFQUxMT0NdKQorXSkKKwor QUNfREVGVU4oW2dsX0VFTUFMTE9DXSwKK1sKKyAgX0FDX0ZVTkNfTUFMTE9DX0lGKAorICAg IFtnbF9jdl9mdW5jX21hbGxvY18wX25vbm51bGw9MV0sCisgICAgW2dsX2N2X2Z1bmNfbWFs bG9jXzBfbm9ubnVsbD0wXSkKKyAgQUNfREVGSU5FX1VOUVVPVEVEKFtNQUxMT0NfMF9JU19O T05OVUxMXSwgWyRnbF9jdl9mdW5jX21hbGxvY18wX25vbm51bGxdLAorICAgIFtJZiBtYWxs b2MoMCkgaXMgIT0gTlVMTCwgZGVmaW5lIHRoaXMgdG8gMS4gIE90aGVyd2lzZSBkZWZpbmUg dGhpcworICAgICB0byAwLl0pCitdKQorCitBQ19ERUZVTihbZ2xfRUVSRUFMTE9DXSwKK1sK KyAgX0FDX0ZVTkNfUkVBTExPQ19JRigKKyAgICBbZ2xfY3ZfZnVuY19yZWFsbG9jXzBfbm9u bnVsbD0xXSwKKyAgICBbZ2xfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbD0wXSkKKyAgQUNf REVGSU5FX1VOUVVPVEVEKFtSRUFMTE9DXzBfSVNfTk9OTlVMTF0sIFskZ2xfY3ZfZnVuY19y ZWFsbG9jXzBfbm9ubnVsbF0sCisgICAgW0lmIHJlYWxsb2MoTlVMTCwwKSBpcyAhPSBOVUxM LCBkZWZpbmUgdGhpcyB0byAxLiAgT3RoZXJ3aXNlIGRlZmluZSB0aGlzCisgICAgIHRvIDAu XSkKK10pCmRpZmYgLS1naXQgYS9tNC9nbGliYzIxLm00IGIvbTQvZ2xpYmMyMS5tNApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4xMjZhYTFhOTU5Ci0tLSAvZGV2 L251bGwKKysrIGIvbTQvZ2xpYmMyMS5tNApAQCAtMCwwICsxLDM0IEBACisjIGdsaWJjMjEu bTQgc2VyaWFsIDUKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiwgMjAwNCwgMjAwOCwg MjAxMC0yMDE4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RubCBJbmMuCitkbmwgVGhp cyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24K K2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmli dXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFz IHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUZXN0IGZvciB0aGUgR05VIEMgTGli cmFyeSwgdmVyc2lvbiAyLjEgb3IgbmV3ZXIsIG9yIHVDbGliYy4KKyMgRnJvbSBCcnVubyBI YWlibGUuCisKK0FDX0RFRlVOKFtnbF9HTElCQzIxXSwKKyAgWworICAgIEFDX0NBQ0hFX0NI RUNLKFt3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgTGlicmFyeSA+PSAyLjEgb3Ig dUNsaWJjXSwKKyAgICAgIFthY19jdl9nbnVfbGlicmFyeV8yXzFdLAorICAgICAgW0FDX0VH UkVQX0NQUChbTHVja3ldLAorICAgICAgICBbCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNp ZmRlZiBfX0dOVV9MSUJSQVJZX18KKyAjaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNf TUlOT1JfXyA+PSAxKSB8fCAoX19HTElCQ19fID4gMikKKyAgTHVja3kgR05VIHVzZXIKKyAj ZW5kaWYKKyNlbmRpZgorI2lmZGVmIF9fVUNMSUJDX18KKyBMdWNreSB1c2VyCisjZW5kaWYK KyAgICAgICAgXSwKKyAgICAgICAgW2FjX2N2X2dudV9saWJyYXJ5XzJfMT15ZXNdLAorICAg ICAgICBbYWNfY3ZfZ251X2xpYnJhcnlfMl8xPW5vXSkKKyAgICAgIF0KKyAgICApCisgICAg QUNfU1VCU1QoW0dMSUJDMjFdKQorICAgIEdMSUJDMjE9IiRhY19jdl9nbnVfbGlicmFyeV8y XzEiCisgIF0KKykKZGlmZiAtLWdpdCBhL200L2dudWxpYi1jb21wLm00IGIvbTQvZ251bGli LWNvbXAubTQKaW5kZXggYTZlM2JlMzgxNS4uNWRhYTIyOGY2NiAxMDA2NDQKLS0tIGEvbTQv Z251bGliLWNvbXAubTQKKysrIGIvbTQvZ251bGliLWNvbXAubTQKQEAgLTQ4LDYgKzQ4LDcg QEAgQUNfREVGVU4KICAgIyBDb2RlIGZyb20gbW9kdWxlIGFsbG9jYXRvcjoKICAgIyBDb2Rl IGZyb20gbW9kdWxlIGF0LWludGVybmFsOgogICAjIENvZGUgZnJvbSBtb2R1bGUgYmluYXJ5 LWlvOgorICAjIENvZGUgZnJvbSBtb2R1bGUgYnVpbHRpbi1leHBlY3Q6CiAgICMgQ29kZSBm cm9tIG1vZHVsZSBieXRlc3dhcDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIGMtY3R5cGU6CiAg ICMgQ29kZSBmcm9tIG1vZHVsZSBjLXN0cmNhc2U6CkBAIC0xMjgsNiArMTI5LDcgQEAgQUNf REVGVU4KICAgIyBDb2RlIGZyb20gbW9kdWxlIHFjb3B5LWFjbDoKICAgIyBDb2RlIGZyb20g bW9kdWxlIHJlYWRsaW5rOgogICAjIENvZGUgZnJvbSBtb2R1bGUgcmVhZGxpbmthdDoKKyAg IyBDb2RlIGZyb20gbW9kdWxlIHJlZ2V4OgogICAjIENvZGUgZnJvbSBtb2R1bGUgcm9vdC11 aWQ6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBzaWcyc3RyOgogICAjIENvZGUgZnJvbSBtb2R1 bGUgc2lnbmFsLWg6CkBAIC0zNTYsNiArMzU4LDExIEBAIEFDX0RFRlVOCiAgICAgQUNfTElC T0JKKFtyZWFkbGlua2F0XSkKICAgZmkKICAgZ2xfVU5JU1REX01PRFVMRV9JTkRJQ0FUT1Io W3JlYWRsaW5rYXRdKQorICBnbF9SRUdFWAorICBpZiB0ZXN0ICRhY191c2VfaW5jbHVkZWRf cmVnZXggPSB5ZXM7IHRoZW4KKyAgICBBQ19MSUJPQkooW3JlZ2V4XSkKKyAgICBnbF9QUkVS RVFfUkVHRVgKKyAgZmkKICAgZ2xfRlVOQ19TSUcyU1RSCiAgIGlmIHRlc3QgJGFjX2N2X2Z1 bmNfc2lnMnN0ciA9IG5vOyB0aGVuCiAgICAgQUNfTElCT0JKKFtzaWcyc3RyXSkKQEAgLTQy Myw2ICs0MzAsNyBAQCBBQ19ERUZVTgogICBnbF9VVElNRU5TCiAgIEFDX0NfVkFSQVJSQVlT CiAgIGdsX2dudWxpYl9lbmFibGVkXzI2MDk0MWMwZTVkYzY3ZWM5ZTg3ZDFmYjMyMWMzMDBi PWZhbHNlCisgIGdsX2dudWxpYl9lbmFibGVkXzM3ZjcxYjYwNGFhOWM1NDQ0Njc4M2Q4MGY0 MmZlNTQ3PWZhbHNlCiAgIGdsX2dudWxpYl9lbmFibGVkX2Nsb2V4ZWM9ZmFsc2UKICAgZ2xf Z251bGliX2VuYWJsZWRfZGlyZmQ9ZmFsc2UKICAgZ2xfZ251bGliX2VuYWJsZWRfZG9zbmFt ZT1mYWxzZQpAQCAtNDQ2LDYgKzQ1NCwxMyBAQCBBQ19ERUZVTgogICAgICAgZnVuY19nbF9n bnVsaWJfbTRjb2RlX29wZW4KICAgICBmaQogICB9CisgIGZ1bmNfZ2xfZ251bGliX200Y29k ZV8zN2Y3MWI2MDRhYTljNTQ0NDY3ODNkODBmNDJmZTU0NyAoKQorICB7CisgICAgaWYgISAk Z2xfZ251bGliX2VuYWJsZWRfMzdmNzFiNjA0YWE5YzU0NDQ2NzgzZDgwZjQyZmU1NDc7IHRo ZW4KKyAgICAgIGdsX19fQlVJTFRJTl9FWFBFQ1QKKyAgICAgIGdsX2dudWxpYl9lbmFibGVk XzM3ZjcxYjYwNGFhOWM1NDQ0Njc4M2Q4MGY0MmZlNTQ3PXRydWUKKyAgICBmaQorICB9CiAg IGZ1bmNfZ2xfZ251bGliX200Y29kZV9jbG9leGVjICgpCiAgIHsKICAgICBpZiAhICRnbF9n bnVsaWJfZW5hYmxlZF9jbG9leGVjOyB0aGVuCkBAIC02NDksNiArNjY0LDkgQEAgQUNfREVG VU4KICAgaWYgdGVzdCAkSEFWRV9SRUFETElOS0FUID0gMDsgdGhlbgogICAgIGZ1bmNfZ2xf Z251bGliX200Y29kZV8wM2UwYWFhZDRjYjg5Y2E3NTc2NTNiZDM2N2E2Y2NiNwogICBmaQor ICBpZiB0ZXN0ICRhY191c2VfaW5jbHVkZWRfcmVnZXggPSB5ZXM7IHRoZW4KKyAgICBmdW5j X2dsX2dudWxpYl9tNGNvZGVfMzdmNzFiNjA0YWE5YzU0NDQ2NzgzZDgwZjQyZmU1NDcKKyAg ZmkKICAgaWYgeyB0ZXN0ICRIQVZFX0RFQ0xfU1RSVE9JTUFYID0gMCB8fCB0ZXN0ICRSRVBM QUNFX1NUUlRPSU1BWCA9IDE7IH0gJiYgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50 ID0geWVzOyB0aGVuCiAgICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX3N0cnRvbGwKICAgZmkK QEAgLTY1Nyw2ICs2NzUsNyBAQCBBQ19ERUZVTgogICBmaQogICBtNF9wYXR0ZXJuX2FsbG93 KFteZ2xfR05VTElCX0VOQUJMRURfXSkKICAgQU1fQ09ORElUSU9OQUwoW2dsX0dOVUxJQl9F TkFCTEVEXzI2MDk0MWMwZTVkYzY3ZWM5ZTg3ZDFmYjMyMWMzMDBiXSwgWyRnbF9nbnVsaWJf ZW5hYmxlZF8yNjA5NDFjMGU1ZGM2N2VjOWU4N2QxZmIzMjFjMzAwYl0pCisgIEFNX0NPTkRJ VElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF8zN2Y3MWI2MDRhYTljNTQ0NDY3ODNkODBmNDJm ZTU0N10sIFskZ2xfZ251bGliX2VuYWJsZWRfMzdmNzFiNjA0YWE5YzU0NDQ2NzgzZDgwZjQy ZmU1NDddKQogICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfY2xvZXhlY10s IFskZ2xfZ251bGliX2VuYWJsZWRfY2xvZXhlY10pCiAgIEFNX0NPTkRJVElPTkFMKFtnbF9H TlVMSUJfRU5BQkxFRF9kaXJmZF0sIFskZ2xfZ251bGliX2VuYWJsZWRfZGlyZmRdKQogICBB TV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfZG9zbmFtZV0sIFskZ2xfZ251bGli X2VuYWJsZWRfZG9zbmFtZV0pCkBAIC05MjEsNiArOTQwLDEyIEBAIEFDX0RFRlVOCiAgIGxp Yi9xY29weS1hY2wuYwogICBsaWIvcmVhZGxpbmsuYwogICBsaWIvcmVhZGxpbmthdC5jCisg IGxpYi9yZWdjb21wLmMKKyAgbGliL3JlZ2V4LmMKKyAgbGliL3JlZ2V4LmgKKyAgbGliL3Jl Z2V4X2ludGVybmFsLmMKKyAgbGliL3JlZ2V4X2ludGVybmFsLmgKKyAgbGliL3JlZ2V4ZWMu YwogICBsaWIvcm9vdC11aWQuaAogICBsaWIvc2V0LXBlcm1pc3Npb25zLmMKICAgbGliL3No YTEuYwpAQCAtOTc3LDYgKzEwMDIsNyBAQCBBQ19ERUZVTgogICBtNC9hYnNvbHV0ZS1oZWFk ZXIubTQKICAgbTQvYWNsLm00CiAgIG00L2FsbG9jYS5tNAorICBtNC9idWlsdGluLWV4cGVj dC5tNAogICBtNC9ieXRlc3dhcC5tNAogICBtNC9jLXN0cnRvZC5tNAogICBtNC9jbG9ja190 aW1lLm00CkBAIC05ODgsNiArMTAxNCw3IEBAIEFDX0RFRlVOCiAgIG00L2RpcmVudF9oLm00 CiAgIG00L2RpcmZkLm00CiAgIG00L2R1cDIubTQKKyAgbTQvZWVhbGxvYy5tNAogICBtNC9l bnZpcm9uLm00CiAgIG00L2Vycm5vX2gubTQKICAgbTQvZXVpZGFjY2Vzcy5tNApAQCAtMTAx NSw2ICsxMDQyLDcgQEAgQUNfREVGVU4KICAgbTQvZ2V0dGltZS5tNAogICBtNC9nZXR0aW1l b2ZkYXkubTQKICAgbTQvZ2wtb3BlbnNzbC5tNAorICBtNC9nbGliYzIxLm00CiAgIG00L2du dWxpYi1jb21tb24ubTQKICAgbTQvZ3JvdXAtbWVtYmVyLm00CiAgIG00L2luY2x1ZGVfbmV4 dC5tNApAQCAtMTAyNiw2ICsxMDU0LDcgQEAgQUNfREVGVU4KICAgbTQvbHN0YXQubTQKICAg bTQvbWFueXdhcm5pbmdzLWMrKy5tNAogICBtNC9tYW55d2FybmluZ3MubTQKKyAgbTQvbWJz dGF0ZV90Lm00CiAgIG00L21kNS5tNAogICBtNC9tZW1yY2hyLm00CiAgIG00L21pbm1heC5t NApAQCAtMTA0NCw2ICsxMDczLDcgQEAgQUNfREVGVU4KICAgbTQvcHV0ZW52Lm00CiAgIG00 L3JlYWRsaW5rLm00CiAgIG00L3JlYWRsaW5rYXQubTQKKyAgbTQvcmVnZXgubTQKICAgbTQv c2hhMS5tNAogICBtNC9zaGEyNTYubTQKICAgbTQvc2hhNTEyLm00CmRpZmYgLS1naXQgYS9t NC9tYnN0YXRlX3QubTQgYi9tNC9tYnN0YXRlX3QubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uMDA0YWEwZDE3YwotLS0gL2Rldi9udWxsCisrKyBiL200L21i c3RhdGVfdC5tNApAQCAtMCwwICsxLDQxIEBACisjIG1ic3RhdGVfdC5tNCBzZXJpYWwgMTMK K2RubCBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiwgMjAwOC0yMDE4IEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Np b24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQg bW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisK KyMgRnJvbSBQYXVsIEVnZ2VydC4KKworIyBCZU9TIDUgaGFzIDx3Y2hhci5oPiBidXQgZG9l cyBub3QgZGVmaW5lIG1ic3RhdGVfdCwKKyMgc28geW91IGNhbid0IGRlY2xhcmUgYW4gb2Jq ZWN0IG9mIHRoYXQgdHlwZS4KKyMgQ2hlY2sgZm9yIHRoaXMgaW5jb21wYXRpYmlsaXR5IHdp dGggU3RhbmRhcmQgQy4KKworIyBBQ19UWVBFX01CU1RBVEVfVAorIyAtLS0tLS0tLS0tLS0t LS0tLQorQUNfREVGVU4oW0FDX1RZUEVfTUJTVEFURV9UXSwKK1sKKyAgIEFDX1JFUVVJUkUo W0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10pIGRubCBmb3IgSFAtVVggMTEuMTEKKworICAg QUNfQ0FDSEVfQ0hFQ0soW2ZvciBtYnN0YXRlX3RdLCBbYWNfY3ZfdHlwZV9tYnN0YXRlX3Rd LAorICAgICBbQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1BST0dSQU0o CisgICAgICAgICAgIFtBQ19JTkNMVURFU19ERUZBVUxUWworLyogVHJ1NjQgd2l0aCBEZXNr dG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJl Zm9yZQorICAgPHdjaGFyLmg+LgorICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRl Zi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlCisgICBpbmNsdWRlZCBiZWZv cmUgPHdjaGFyLmg+LiAgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRp by5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPl1dLAorICAgICAg ICAgICBbW21ic3RhdGVfdCB4OyByZXR1cm4gc2l6ZW9mIHg7XV0pXSwKKyAgICAgICAgW2Fj X2N2X3R5cGVfbWJzdGF0ZV90PXllc10sCisgICAgICAgIFthY19jdl90eXBlX21ic3RhdGVf dD1ub10pXSkKKyAgIGlmIHRlc3QgJGFjX2N2X3R5cGVfbWJzdGF0ZV90ID0geWVzOyB0aGVu CisgICAgIEFDX0RFRklORShbSEFWRV9NQlNUQVRFX1RdLCBbMV0sCisgICAgICAgICAgICAg ICBbRGVmaW5lIHRvIDEgaWYgPHdjaGFyLmg+IGRlY2xhcmVzIG1ic3RhdGVfdC5dKQorICAg ZWxzZQorICAgICBBQ19ERUZJTkUoW21ic3RhdGVfdF0sIFtpbnRdLAorICAgICAgICAgICAg ICAgW0RlZmluZSB0byBhIHR5cGUgaWYgPHdjaGFyLmg+IGRvZXMgbm90IGRlZmluZS5dKQor ICAgZmkKK10pCmRpZmYgLS1naXQgYS9tNC9yZWdleC5tNCBiL200L3JlZ2V4Lm00Cm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjA1NWQ3MWI1YWEKLS0tIC9kZXYv bnVsbAorKysgYi9tNC9yZWdleC5tNApAQCAtMCwwICsxLDMwMCBAQAorIyBzZXJpYWwgNjcK KworIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSwgMjAwMy0yMDE4IEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lv biB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9k aWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2Ru bCBJbml0aWFsbHkgZGVyaXZlZCBmcm9tIGNvZGUgaW4gR05VIGdyZXAuCitkbmwgTW9zdGx5 IHdyaXR0ZW4gYnkgSmltIE1leWVyaW5nLgorCitBQ19QUkVSRVEoWzIuNTBdKQorCitBQ19E RUZVTihbZ2xfUkVHRVhdLAorWworICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0p IGRubCBmb3IgY3Jvc3MtY29tcGlsZXMKKyAgQUNfQVJHX1dJVEgoW2luY2x1ZGVkLXJlZ2V4 XSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1pbmNsdWRlZC1yZWdleF0sCisg ICAgICAgICAgICAgICAgICAgIFtkb24ndCBjb21waWxlIHJlZ2V4OyB0aGlzIGlzIHRoZSBk ZWZhdWx0IG9uIHN5c3RlbXMKKyAgICAgICAgICAgICAgICAgICAgIHdpdGggcmVjZW50LWVu b3VnaCB2ZXJzaW9ucyBvZiB0aGUgR05VIEMgTGlicmFyeQorICAgICAgICAgICAgICAgICAg ICAgKHVzZSB3aXRoIGNhdXRpb24gb24gb3RoZXIgc3lzdGVtcykuXSldKQorCisgIGNhc2Ug JHdpdGhfaW5jbHVkZWRfcmVnZXggaW4gIygKKyAgeWVzfG5vKSBhY191c2VfaW5jbHVkZWRf cmVnZXg9JHdpdGhfaW5jbHVkZWRfcmVnZXgKKyAgICAgICAgOzsKKyAgJycpCisgICAgIyBJ ZiB0aGUgc3lzdGVtIHJlZ2V4IHN1cHBvcnQgaXMgZ29vZCBlbm91Z2ggdGhhdCBpdCBwYXNz ZXMgdGhlCisgICAgIyBmb2xsb3dpbmcgcnVuIHRlc3QsIHRoZW4gZGVmYXVsdCB0byAqbm90 KiB1c2luZyB0aGUgaW5jbHVkZWQgcmVnZXguYy4KKyAgICAjIElmIGNyb3NzIGNvbXBpbGlu ZywgYXNzdW1lIHRoZSB0ZXN0IHdvdWxkIGZhaWwgYW5kIHVzZSB0aGUgaW5jbHVkZWQKKyAg ICAjIHJlZ2V4LmMuCisgICAgQUNfQ0hFQ0tfREVDTFNfT05DRShbYWxhcm1dKQorICAgIEFD X0NIRUNLX0hFQURFUlNfT05DRShbbWFsbG9jLmhdKQorICAgIEFDX0NBQ0hFX0NIRUNLKFtm b3Igd29ya2luZyByZV9jb21waWxlX3BhdHRlcm5dLAorICAgICAgICAgICAgICAgICAgIFtn bF9jdl9mdW5jX3JlX2NvbXBpbGVfcGF0dGVybl93b3JraW5nXSwKKyAgICAgIFtBQ19SVU5f SUZFTFNFKAorICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorICAgICAgICAgIFtbI2luY2x1 ZGUgPHJlZ2V4Lmg+CisKKyAgICAgICAgICAgICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAgICAg ICAgICAgICNpbmNsdWRlIDxsaW1pdHMuaD4KKyAgICAgICAgICAgICNpbmNsdWRlIDxzdHJp bmcuaD4KKworICAgICAgICAgICAgI2lmIGRlZmluZWQgTV9DSEVDS19BQ1RJT04gfHwgSEFW RV9ERUNMX0FMQVJNCisgICAgICAgICAgICAjIGluY2x1ZGUgPHNpZ25hbC5oPgorICAgICAg ICAgICAgIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyAgICAgICAgICAgICNlbmRpZgorCisgICAg ICAgICAgICAjaWYgSEFWRV9NQUxMT0NfSAorICAgICAgICAgICAgIyBpbmNsdWRlIDxtYWxs b2MuaD4KKyAgICAgICAgICAgICNlbmRpZgorCisgICAgICAgICAgICAjaWZkZWYgTV9DSEVD S19BQ1RJT04KKyAgICAgICAgICAgIC8qIEV4aXQgd2l0aCBkaXN0aW5ndWlzaGFibGUgZXhp dCBjb2RlLiAgKi8KKyAgICAgICAgICAgIHN0YXRpYyB2b2lkIHNpZ2FicnRfbm9fY29yZSAo aW50IHNpZykgeyByYWlzZSAoU0lHVEVSTSk7IH0KKyAgICAgICAgICAgICNlbmRpZgorICAg ICAgICAgIF1dLAorICAgICAgICAgIFtbaW50IHJlc3VsdCA9IDA7CisgICAgICAgICAgICBz dGF0aWMgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyIHJlZ2V4OworICAgICAgICAgICAgdW5z aWduZWQgY2hhciBmb2xkZWRfY2hhcnNbVUNIQVJfTUFYICsgMV07CisgICAgICAgICAgICBp bnQgaTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnM7CisgICAgICAgICAgICBzdHJ1Y3Qg cmVfcmVnaXN0ZXJzIHJlZ3M7CisKKyAgICAgICAgICAgIC8qIFNvbWUgYnVpbGRzIG9mIGds aWJjIGdvIGludG8gYW4gaW5maW5pdGUgbG9vcCBvbiB0aGlzCisgICAgICAgICAgICAgICB0 ZXN0LiAgVXNlIGFsYXJtIHRvIGZvcmNlIGRlYXRoLCBhbmQgbWFsbG9wdCB0byBhdm9pZAor ICAgICAgICAgICAgICAgbWFsbG9jIHJlY3Vyc2lvbiBpbiBkaWFnbm9zaW5nIHRoZSBjb3Jy dXB0ZWQgaGVhcC4gKi8KKyNpZiBIQVZFX0RFQ0xfQUxBUk0KKyAgICAgICAgICAgIHNpZ25h bCAoU0lHQUxSTSwgU0lHX0RGTCk7CisgICAgICAgICAgICBhbGFybSAoMik7CisjZW5kaWYK KyNpZmRlZiBNX0NIRUNLX0FDVElPTgorICAgICAgICAgICAgc2lnbmFsIChTSUdBQlJULCBz aWdhYnJ0X25vX2NvcmUpOworICAgICAgICAgICAgbWFsbG9wdCAoTV9DSEVDS19BQ1RJT04s IDIpOworI2VuZGlmCisKKyAgICAgICAgICAgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgImVu X1VTLlVURi04IikpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAvKiBodHRwczovL3NvdXJjZXdhcmUub3JnL21sL2xpYmMtaGFja2Vy LzIwMDYtMDkvbXNnMDAwMDguaHRtbAorICAgICAgICAgICAgICAgICAgICAgVGhpcyB0ZXN0 IG5lZWRzIHZhbGdyaW5kIHRvIGNhdGNoIHRoZSBidWcgb24gRGViaWFuCisgICAgICAgICAg ICAgICAgICAgICBHTlUvTGludXggMy4xIHg4NiwgYnV0IGl0IG1pZ2h0IGNhdGNoIHRoZSBi dWcgYmV0dGVyCisgICAgICAgICAgICAgICAgICAgICBvbiBvdGhlciBwbGF0Zm9ybXMgYW5k IGl0IHNob3VsZG4ndCBodXJ0IHRvIHRyeSB0aGUKKyAgICAgICAgICAgICAgICAgICAgIHRl c3QgaGVyZS4gICovCisgICAgICAgICAgICAgICAgICBzdGF0aWMgY2hhciBjb25zdCBwYXRb XSA9ICJpbnNlcnQgaW50byI7CisgICAgICAgICAgICAgICAgICBzdGF0aWMgY2hhciBjb25z dCBkYXRhW10gPQorICAgICAgICAgICAgICAgICAgICAiXHhGRlwwXHgxMlx4QTJceEFBXHhD NFx4QjEsS1x4MTJceEM0XHhCMSpceEFDSyI7CisgICAgICAgICAgICAgICAgICByZV9zZXRf c3ludGF4IChSRV9TWU5UQVhfR1JFUCB8IFJFX0hBVF9MSVNUU19OT1RfTkVXTElORQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSRV9JQ0FTRSk7CisgICAgICAgICAg ICAgICAgICBtZW1zZXQgKCZyZWdleCwgMCwgc2l6ZW9mIHJlZ2V4KTsKKyAgICAgICAgICAg ICAgICAgIHMgPSByZV9jb21waWxlX3BhdHRlcm4gKHBhdCwgc2l6ZW9mIHBhdCAtIDEsICZy ZWdleCk7CisgICAgICAgICAgICAgICAgICBpZiAocykKKyAgICAgICAgICAgICAgICAgICAg cmVzdWx0IHw9IDE7CisgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZV9zZWFyY2ggKCZy ZWdleCwgZGF0YSwgc2l6ZW9mIGRhdGEgLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAwLCBzaXplb2YgZGF0YSAtIDEsICZyZWdzKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIT0gLTEpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAx OworICAgICAgICAgICAgICAgICAgcmVnZnJlZSAoJnJlZ2V4KTsKKyAgICAgICAgICAgICAg ICB9CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvKiBUaGlzIHRl c3QgaXMgZnJvbSBnbGliYyBidWcgMTUwNzguCisgICAgICAgICAgICAgICAgICAgICBUaGUg dGVzdCBjYXNlIGlzIGZyb20gQW5kcmVhcyBTY2h3YWIgaW4KKyAgICAgICAgICAgICAgICAg ICAgIDxodHRwczovL3NvdXJjZXdhcmUub3JnL21sL2xpYmMtYWxwaGEvMjAxMy0wMS9tc2cw MDk2Ny5odG1sPi4KKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAg ICBzdGF0aWMgY2hhciBjb25zdCBwYXRbXSA9ICJbXnhdeCI7CisgICAgICAgICAgICAgICAg ICBzdGF0aWMgY2hhciBjb25zdCBkYXRhW10gPQorICAgICAgICAgICAgICAgICAgICAvKiA8 VTEwMDA+PFUxMDNCPjxVMTAzRD48VTEwMTQ+PFUxMDNBPjxVMTAyRj48VTEwMTU+PFUxMDNB PiAqLworICAgICAgICAgICAgICAgICAgICAiXHhlMVx4ODBceDgwIgorICAgICAgICAgICAg ICAgICAgICAiXHhlMVx4ODBceGJiIgorICAgICAgICAgICAgICAgICAgICAiXHhlMVx4ODBc eGJkIgorICAgICAgICAgICAgICAgICAgICAiXHhlMVx4ODBceDk0IgorICAgICAgICAgICAg ICAgICAgICAiXHhlMVx4ODBceGJhIgorICAgICAgICAgICAgICAgICAgICAiXHhlMVx4ODBc eGFmIgorICAgICAgICAgICAgICAgICAgICAiXHhlMVx4ODBceDk1IgorICAgICAgICAgICAg ICAgICAgICAiXHhlMVx4ODBceGJhIgorICAgICAgICAgICAgICAgICAgICAieCI7CisgICAg ICAgICAgICAgICAgICByZV9zZXRfc3ludGF4ICgwKTsKKyAgICAgICAgICAgICAgICAgIG1l bXNldCAoJnJlZ2V4LCAwLCBzaXplb2YgcmVnZXgpOworICAgICAgICAgICAgICAgICAgcyA9 IHJlX2NvbXBpbGVfcGF0dGVybiAocGF0LCBzaXplb2YgcGF0IC0gMSwgJnJlZ2V4KTsKKyAg ICAgICAgICAgICAgICAgIGlmIChzKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0g MTsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgICAgIGkgPSByZV9zZWFyY2ggKCZyZWdleCwgZGF0YSwgc2l6ZW9m IGRhdGEgLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNp emVvZiBkYXRhIC0gMSwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gMCAm JiBpICE9IDIxKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDE7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIHJlZ2ZyZWUgKCZyZWdleCk7 CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCEgc2V0bG9jYWxl IChMQ19BTEwsICJDIikpCisgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAg ICAgICAgfQorCisgICAgICAgICAgICAvKiBUaGlzIHRlc3QgaXMgZnJvbSBnbGliYyBidWcg Mzk1NywgcmVwb3J0ZWQgYnkgQW5kcmV3IE1hY2tleS4gICovCisgICAgICAgICAgICByZV9z ZXRfc3ludGF4IChSRV9TWU5UQVhfRUdSRVAgfCBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUp OworICAgICAgICAgICAgbWVtc2V0ICgmcmVnZXgsIDAsIHNpemVvZiByZWdleCk7CisgICAg ICAgICAgICBzID0gcmVfY29tcGlsZV9wYXR0ZXJuICgiYVteeF1iIiwgNiwgJnJlZ2V4KTsK KyAgICAgICAgICAgIGlmIChzKQorICAgICAgICAgICAgICByZXN1bHQgfD0gMjsKKyAgICAg ICAgICAgIC8qIFRoaXMgc2hvdWxkIGZhaWwsIGJ1dCBzdWNjZWVkcyBmb3IgZ2xpYmMtMi41 LiAgKi8KKyAgICAgICAgICAgIGVsc2UgaWYgKHJlX3NlYXJjaCAoJnJlZ2V4LCAiYVxuYiIs IDMsIDAsIDMsICZyZWdzKSAhPSAtMSkKKyAgICAgICAgICAgICAgcmVzdWx0IHw9IDI7CisK KyAgICAgICAgICAgIC8qIFRoaXMgcmVndWxhciBleHByZXNzaW9uIGlzIGZyb20gU3BlbmNl ciBlcmUgdGVzdCBudW1iZXIgNzUKKyAgICAgICAgICAgICAgIGluIGdyZXAtMi4zLiAgKi8K KyAgICAgICAgICAgIHJlX3NldF9zeW50YXggKFJFX1NZTlRBWF9QT1NJWF9FR1JFUCk7Cisg ICAgICAgICAgICBtZW1zZXQgKCZyZWdleCwgMCwgc2l6ZW9mIHJlZ2V4KTsKKyAgICAgICAg ICAgIGZvciAoaSA9IDA7IGkgPD0gVUNIQVJfTUFYOyBpKyspCisgICAgICAgICAgICAgIGZv bGRlZF9jaGFyc1tpXSA9IGk7CisgICAgICAgICAgICByZWdleC50cmFuc2xhdGUgPSBmb2xk ZWRfY2hhcnM7CisgICAgICAgICAgICBzID0gcmVfY29tcGlsZV9wYXR0ZXJuICgiYVtbOkA6 PkA6XV1iXG4iLCAxMSwgJnJlZ2V4KTsKKyAgICAgICAgICAgIC8qIFRoaXMgc2hvdWxkIGZh aWwgd2l0aCBfSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZV8gZXJyb3IuICAqLworICAg ICAgICAgICAgaWYgKCFzKQorICAgICAgICAgICAgICByZXN1bHQgfD0gNDsKKworICAgICAg ICAgICAgLyogRW5zdXJlIHRoYXQgW2ItYV0gaXMgZGlhZ25vc2VkIGFzIGludmFsaWQsIHdo ZW4KKyAgICAgICAgICAgICAgIHVzaW5nIFJFX05PX0VNUFRZX1JBTkdFUy4gKi8KKyAgICAg ICAgICAgIHJlX3NldF9zeW50YXggKFJFX1NZTlRBWF9QT1NJWF9FR1JFUCB8IFJFX05PX0VN UFRZX1JBTkdFUyk7CisgICAgICAgICAgICBtZW1zZXQgKCZyZWdleCwgMCwgc2l6ZW9mIHJl Z2V4KTsKKyAgICAgICAgICAgIHMgPSByZV9jb21waWxlX3BhdHRlcm4gKCJhW2ItYV0iLCA2 LCAmcmVnZXgpOworICAgICAgICAgICAgaWYgKHMgPT0gMCkKKyAgICAgICAgICAgICAgcmVz dWx0IHw9IDg7CisKKyAgICAgICAgICAgIC8qIFRoaXMgc2hvdWxkIHN1Y2NlZWQsIGJ1dCBk b2VzIG5vdCBmb3IgZ2xpYmMtMi4xLjMuICAqLworICAgICAgICAgICAgbWVtc2V0ICgmcmVn ZXgsIDAsIHNpemVvZiByZWdleCk7CisgICAgICAgICAgICBzID0gcmVfY29tcGlsZV9wYXR0 ZXJuICgiezEiLCAyLCAmcmVnZXgpOworICAgICAgICAgICAgaWYgKHMpCisgICAgICAgICAg ICAgIHJlc3VsdCB8PSA4OworCisgICAgICAgICAgICAvKiBUaGUgZm9sbG93aW5nIGV4YW1w bGUgaXMgZGVyaXZlZCBmcm9tIGEgcHJvYmxlbSByZXBvcnQKKyAgICAgICAgICAgICAgIGFn YWluc3QgZ2F3ayBmcm9tIEpvcmdlIFN0b2xmaSA8c3RvbGZpQGljLnVuaWNhbXAuYnI+LiAg Ki8KKyAgICAgICAgICAgIG1lbXNldCAoJnJlZ2V4LCAwLCBzaXplb2YgcmVnZXgpOworICAg ICAgICAgICAgcyA9IHJlX2NvbXBpbGVfcGF0dGVybiAoIlthblwzNzFdKm4iLCA3LCAmcmVn ZXgpOworICAgICAgICAgICAgaWYgKHMpCisgICAgICAgICAgICAgIHJlc3VsdCB8PSA4Owor ICAgICAgICAgICAgLyogVGhpcyBzaG91bGQgbWF0Y2gsIGJ1dCBkb2VzIG5vdCBmb3IgZ2xp YmMtMi4yLjEuICAqLworICAgICAgICAgICAgZWxzZSBpZiAocmVfbWF0Y2ggKCZyZWdleCwg ImFuIiwgMiwgMCwgJnJlZ3MpICE9IDIpCisgICAgICAgICAgICAgIHJlc3VsdCB8PSA4Owor CisgICAgICAgICAgICBtZW1zZXQgKCZyZWdleCwgMCwgc2l6ZW9mIHJlZ2V4KTsKKyAgICAg ICAgICAgIHMgPSByZV9jb21waWxlX3BhdHRlcm4gKCJ4IiwgMSwgJnJlZ2V4KTsKKyAgICAg ICAgICAgIGlmIChzKQorICAgICAgICAgICAgICByZXN1bHQgfD0gODsKKyAgICAgICAgICAg IC8qIGdsaWJjLTIuMi45MyBkb2VzIG5vdCB3b3JrIHdpdGggYSBuZWdhdGl2ZSBSQU5HRSBh cmd1bWVudC4gICovCisgICAgICAgICAgICBlbHNlIGlmIChyZV9zZWFyY2ggKCZyZWdleCwg Ind4eSIsIDMsIDIsIC0yLCAmcmVncykgIT0gMSkKKyAgICAgICAgICAgICAgcmVzdWx0IHw9 IDg7CisKKyAgICAgICAgICAgIC8qIFRoZSB2ZXJzaW9uIG9mIHJlZ2V4LmMgaW4gb2xkZXIg dmVyc2lvbnMgb2YgZ251bGliCisgICAgICAgICAgICAgICBpZ25vcmVkIFJFX0lDQVNFLiAg RGV0ZWN0IHRoYXQgcHJvYmxlbSB0b28uICAqLworICAgICAgICAgICAgcmVfc2V0X3N5bnRh eCAoUkVfU1lOVEFYX0VNQUNTIHwgUkVfSUNBU0UpOworICAgICAgICAgICAgbWVtc2V0ICgm cmVnZXgsIDAsIHNpemVvZiByZWdleCk7CisgICAgICAgICAgICBzID0gcmVfY29tcGlsZV9w YXR0ZXJuICgieCIsIDEsICZyZWdleCk7CisgICAgICAgICAgICBpZiAocykKKyAgICAgICAg ICAgICAgcmVzdWx0IHw9IDE2OworICAgICAgICAgICAgZWxzZSBpZiAocmVfc2VhcmNoICgm cmVnZXgsICJXWFkiLCAzLCAwLCAzLCAmcmVncykgPCAwKQorICAgICAgICAgICAgICByZXN1 bHQgfD0gMTY7CisKKyAgICAgICAgICAgIC8qIENhdGNoIGEgYnVnIHJlcG9ydGVkIGJ5IFZp biBTaGVsdG9uIGluCisgICAgICAgICAgICAgICBodHRwczovL2xpc3RzLmdudS5vcmcvci9i dWctY29yZXV0aWxzLzIwMDctMDYvbXNnMDAwODkuaHRtbAorICAgICAgICAgICAgICAgKi8K KyAgICAgICAgICAgIHJlX3NldF9zeW50YXggKFJFX1NZTlRBWF9QT1NJWF9CQVNJQworICAg ICAgICAgICAgICAgICAgICAgICAgICAgJiB+UkVfQ09OVEVYVF9JTlZBTElEX0RVUAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgJiB+UkVfTk9fRU1QVFlfUkFOR0VTKTsKKyAgICAg ICAgICAgIG1lbXNldCAoJnJlZ2V4LCAwLCBzaXplb2YgcmVnZXgpOworICAgICAgICAgICAg cyA9IHJlX2NvbXBpbGVfcGF0dGVybiAoIltbOmFsbnVtOl1fLV1cXFxcKyQiLCAxNiwgJnJl Z2V4KTsKKyAgICAgICAgICAgIGlmIChzKQorICAgICAgICAgICAgICByZXN1bHQgfD0gMzI7 CisKKyAgICAgICAgICAgIC8qIFJFR19TVEFSVEVORCB3YXMgYWRkZWQgdG8gZ2xpYmMgb24g MjAwNC0wMS0xNS4KKyAgICAgICAgICAgICAgIFJlamVjdCBvbGRlciB2ZXJzaW9ucy4gICov CisgICAgICAgICAgICBpZiAoISBSRUdfU1RBUlRFTkQpCisgICAgICAgICAgICAgIHJlc3Vs dCB8PSA2NDsKKworI2lmIDAKKyAgICAgICAgICAgIC8qIEl0IHdvdWxkIGJlIG5pY2UgdG8g cmVqZWN0IGhvc3RzIHdob3NlIHJlZ29mZl90IHZhbHVlcyBhcmUgdG9vCisgICAgICAgICAg ICAgICBuYXJyb3cgKGluY2x1ZGluZyBnbGliYyBvbiBob3N0cyB3aXRoIDY0LWJpdCBwdHJk aWZmX3QgYW5kCisgICAgICAgICAgICAgICAzMi1iaXQgaW50KSwgYnV0IHdlIHNob3VsZCB3 YWl0IHVudGlsIGdsaWJjIGltcGxlbWVudHMgdGhpcworICAgICAgICAgICAgICAgZmVhdHVy ZS4gIE90aGVyd2lzZSwgc3VwcG9ydCBmb3IgZXF1aXZhbGVuY2UgY2xhc3NlcyBhbmQKKyAg ICAgICAgICAgICAgIG11bHRpYnl0ZSBjb2xsYXRpb24gc3ltYm9scyB3b3VsZCBhbHdheXMg YmUgYnJva2VuIGV4Y2VwdAorICAgICAgICAgICAgICAgd2hlbiBjb21waWxpbmcgLS13aXRo b3V0LWluY2x1ZGVkLXJlZ2V4LiAgICovCisgICAgICAgICAgICBpZiAoc2l6ZW9mIChyZWdv ZmZfdCkgPCBzaXplb2YgKHB0cmRpZmZfdCkKKyAgICAgICAgICAgICAgICB8fCBzaXplb2Yg KHJlZ29mZl90KSA8IHNpemVvZiAoc3NpemVfdCkpCisgICAgICAgICAgICAgIHJlc3VsdCB8 PSA2NDsKKyNlbmRpZgorCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAg IF1dKV0sCisgICAgICAgIFtnbF9jdl9mdW5jX3JlX2NvbXBpbGVfcGF0dGVybl93b3JraW5n PXllc10sCisgICAgICAgIFtnbF9jdl9mdW5jX3JlX2NvbXBpbGVfcGF0dGVybl93b3JraW5n PW5vXSwKKyAgICAgICAgW2Nhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAg ICMgR3Vlc3Mgbm8gb24gbmF0aXZlIFdpbmRvd3MuCisgICAgICAgICAgIG1pbmd3KikgZ2xf Y3ZfZnVuY19yZV9jb21waWxlX3BhdHRlcm5fd29ya2luZz0iZ3Vlc3Npbmcgbm8iIDs7Cisg ICAgICAgICAgICAgICAgICAgIyBPdGhlcndpc2UsIGFzc3VtZSBpdCBpcyBub3Qgd29ya2lu Zy4KKyAgICAgICAgICAgKikgICAgICBnbF9jdl9mdW5jX3JlX2NvbXBpbGVfcGF0dGVybl93 b3JraW5nPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgIGVzYWMKKyAgICAgICAgXSkKKyAg ICAgIF0pCisgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcmVfY29tcGlsZV9wYXR0ZXJuX3dvcmtp bmciIGluICMoCisgICAgICAqeWVzKSBhY191c2VfaW5jbHVkZWRfcmVnZXg9bm87OyAjKAor ICAgICAgKm5vKSBhY191c2VfaW5jbHVkZWRfcmVnZXg9eWVzOzsKKyAgICBlc2FjCisgICAg OzsKKyAgKikgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIHZhbHVlIGZvciAtLXdpdGgtaW5jbHVk ZWQtcmVnZXg6ICR3aXRoX2luY2x1ZGVkX3JlZ2V4XSkKKyAgICA7OworICBlc2FjCisKKyAg aWYgdGVzdCAkYWNfdXNlX2luY2x1ZGVkX3JlZ2V4ID0geWVzOyB0aGVuCisgICAgQUNfREVG SU5FKFtfUkVHRVhfSU5DTFVERV9MSU1JVFNfSF0sIFsxXSwKKyAgICAgIFtEZWZpbmUgaWYg eW91IHdhbnQgPHJlZ2V4Lmg+IHRvIGluY2x1ZGUgPGxpbWl0cy5oPiwgc28gdGhhdCBpdAor ICAgICAgIGNvbnNpc3RlbnRseSBvdmVycmlkZXMgPGxpbWl0cy5oPidzIFJFX0RVUF9NQVgu XSkKKyAgICBBQ19ERUZJTkUoW19SRUdFWF9MQVJHRV9PRkZTRVRTXSwgWzFdLAorICAgICAg W0RlZmluZSBpZiB5b3Ugd2FudCByZWdvZmZfdCB0byBiZSBhdCBsZWFzdCBhcyB3aWRlIFBP U0lYIHJlcXVpcmVzLl0pCisgICAgQUNfREVGSU5FKFtyZV9zeW50YXhfb3B0aW9uc10sIFty cGxfcmVfc3ludGF4X29wdGlvbnNdLAorICAgICAgW0RlZmluZSB0byBycGxfcmVfc3ludGF4 X29wdGlvbnMgaWYgdGhlIHJlcGxhY2VtZW50IHNob3VsZCBiZSB1c2VkLl0pCisgICAgQUNf REVGSU5FKFtyZV9zZXRfc3ludGF4XSwgW3JwbF9yZV9zZXRfc3ludGF4XSwKKyAgICAgIFtE ZWZpbmUgdG8gcnBsX3JlX3NldF9zeW50YXggaWYgdGhlIHJlcGxhY2VtZW50IHNob3VsZCBi ZSB1c2VkLl0pCisgICAgQUNfREVGSU5FKFtyZV9jb21waWxlX3BhdHRlcm5dLCBbcnBsX3Jl X2NvbXBpbGVfcGF0dGVybl0sCisgICAgICBbRGVmaW5lIHRvIHJwbF9yZV9jb21waWxlX3Bh dHRlcm4gaWYgdGhlIHJlcGxhY2VtZW50IHNob3VsZCBiZSB1c2VkLl0pCisgICAgQUNfREVG SU5FKFtyZV9jb21waWxlX2Zhc3RtYXBdLCBbcnBsX3JlX2NvbXBpbGVfZmFzdG1hcF0sCisg ICAgICBbRGVmaW5lIHRvIHJwbF9yZV9jb21waWxlX2Zhc3RtYXAgaWYgdGhlIHJlcGxhY2Vt ZW50IHNob3VsZCBiZSB1c2VkLl0pCisgICAgQUNfREVGSU5FKFtyZV9zZWFyY2hdLCBbcnBs X3JlX3NlYXJjaF0sCisgICAgICBbRGVmaW5lIHRvIHJwbF9yZV9zZWFyY2ggaWYgdGhlIHJl cGxhY2VtZW50IHNob3VsZCBiZSB1c2VkLl0pCisgICAgQUNfREVGSU5FKFtyZV9zZWFyY2hf Ml0sIFtycGxfcmVfc2VhcmNoXzJdLAorICAgICAgW0RlZmluZSB0byBycGxfcmVfc2VhcmNo XzIgaWYgdGhlIHJlcGxhY2VtZW50IHNob3VsZCBiZSB1c2VkLl0pCisgICAgQUNfREVGSU5F KFtyZV9tYXRjaF0sIFtycGxfcmVfbWF0Y2hdLAorICAgICAgW0RlZmluZSB0byBycGxfcmVf bWF0Y2ggaWYgdGhlIHJlcGxhY2VtZW50IHNob3VsZCBiZSB1c2VkLl0pCisgICAgQUNfREVG SU5FKFtyZV9tYXRjaF8yXSwgW3JwbF9yZV9tYXRjaF8yXSwKKyAgICAgIFtEZWZpbmUgdG8g cnBsX3JlX21hdGNoXzIgaWYgdGhlIHJlcGxhY2VtZW50IHNob3VsZCBiZSB1c2VkLl0pCisg ICAgQUNfREVGSU5FKFtyZV9zZXRfcmVnaXN0ZXJzXSwgW3JwbF9yZV9zZXRfcmVnaXN0ZXJz XSwKKyAgICAgIFtEZWZpbmUgdG8gcnBsX3JlX3NldF9yZWdpc3RlcnMgaWYgdGhlIHJlcGxh Y2VtZW50IHNob3VsZCBiZSB1c2VkLl0pCisgICAgQUNfREVGSU5FKFtyZV9jb21wXSwgW3Jw bF9yZV9jb21wXSwKKyAgICAgIFtEZWZpbmUgdG8gcnBsX3JlX2NvbXAgaWYgdGhlIHJlcGxh Y2VtZW50IHNob3VsZCBiZSB1c2VkLl0pCisgICAgQUNfREVGSU5FKFtyZV9leGVjXSwgW3Jw bF9yZV9leGVjXSwKKyAgICAgIFtEZWZpbmUgdG8gcnBsX3JlX2V4ZWMgaWYgdGhlIHJlcGxh Y2VtZW50IHNob3VsZCBiZSB1c2VkLl0pCisgICAgQUNfREVGSU5FKFtyZWdjb21wXSwgW3Jw bF9yZWdjb21wXSwKKyAgICAgIFtEZWZpbmUgdG8gcnBsX3JlZ2NvbXAgaWYgdGhlIHJlcGxh Y2VtZW50IHNob3VsZCBiZSB1c2VkLl0pCisgICAgQUNfREVGSU5FKFtyZWdleGVjXSwgW3Jw bF9yZWdleGVjXSwKKyAgICAgIFtEZWZpbmUgdG8gcnBsX3JlZ2V4ZWMgaWYgdGhlIHJlcGxh Y2VtZW50IHNob3VsZCBiZSB1c2VkLl0pCisgICAgQUNfREVGSU5FKFtyZWdlcnJvcl0sIFty cGxfcmVnZXJyb3JdLAorICAgICAgW0RlZmluZSB0byBycGxfcmVnZXJyb3IgaWYgdGhlIHJl cGxhY2VtZW50IHNob3VsZCBiZSB1c2VkLl0pCisgICAgQUNfREVGSU5FKFtyZWdmcmVlXSwg W3JwbF9yZWdmcmVlXSwKKyAgICAgIFtEZWZpbmUgdG8gcnBsX3JlZ2ZyZWUgaWYgdGhlIHJl cGxhY2VtZW50IHNob3VsZCBiZSB1c2VkLl0pCisgIGZpCitdKQorCisjIFByZXJlcXVpc2l0 ZXMgb2YgbGliL3JlZ2V4LmMgYW5kIGxpYi9yZWdleF9pbnRlcm5hbC5jLgorQUNfREVGVU4o W2dsX1BSRVJFUV9SRUdFWF0sCitbCisgIEFDX1JFUVVJUkUoW0FDX1VTRV9TWVNURU1fRVhU RU5TSU9OU10pCisgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKyAgQUNfUkVRVUlSRShb QUNfQ19SRVNUUklDVF0pCisgIEFDX1JFUVVJUkUoW0FDX1RZUEVfTUJTVEFURV9UXSkKKyAg QUNfUkVRVUlSRShbZ2xfRUVNQUxMT0NdKQorICBBQ19SRVFVSVJFKFtnbF9HTElCQzIxXSkK KyAgQUNfQ0hFQ0tfSEVBREVSUyhbbGliaW50bC5oXSkKKyAgQUNfQ0hFQ0tfRlVOQ1NfT05D RShbaXNibGFuayBpc3djdHlwZV0pCisgIEFDX0NIRUNLX0RFQ0xTKFtpc2JsYW5rXSwgW10s IFtdLCBbWyNpbmNsdWRlIDxjdHlwZS5oPl1dKQorXSkKZGlmZiAtLWdpdCBhL3NyYy9NYWtl ZmlsZS5pbiBiL3NyYy9NYWtlZmlsZS5pbgppbmRleCBjM2JjYzUwMzQ5Li4xYWFlMjdiMmY5 IDEwMDY0NAotLS0gYS9zcmMvTWFrZWZpbGUuaW4KKysrIGIvc3JjL01ha2VmaWxlLmluCkBA IC0zOTEsNyArMzkxLDcgQEAgYmFzZV9vYmogPQogCWVtYWNzLm8ga2V5Ym9hcmQubyBtYWNy b3MubyBrZXltYXAubyBzeXNkZXAubyBcCiAJYnVmZmVyLm8gZmlsZWxvY2subyBpbnNkZWwu byBtYXJrZXIubyBcCiAJbWluaWJ1Zi5vIGZpbGVpby5vIGRpcmVkLm8gXAotCWNtZHMubyBj YXNldGFiLm8gY2FzZWZpZGRsZS5vIGluZGVudC5vIHNlYXJjaC5vIHJlZ2V4Lm8gdW5kby5v IFwKKwljbWRzLm8gY2FzZXRhYi5vIGNhc2VmaWRkbGUubyBpbmRlbnQubyBzZWFyY2gubyBy ZWdleC1lbWFjcy5vIHVuZG8ubyBcCiAJYWxsb2MubyBkYXRhLm8gZG9jLm8gZWRpdGZucy5v IGNhbGxpbnQubyBcCiAJZXZhbC5vIGZsb2F0Zm5zLm8gZm5zLm8gZm9udC5vIHByaW50Lm8g bHJlYWQubyAkKE1PRFVMRVNfT0JKKSBcCiAJc3ludGF4Lm8gJChVTkVYRUNfT0JKKSBieXRl Y29kZS5vIFwKZGlmZiAtLWdpdCBhL3NyYy9jYXNldGFiLmMgYi9zcmMvY2FzZXRhYi5jCmlu ZGV4IDhmODA2YTA2NDcuLjI4OWRjNjViODUgMTAwNjQ0Ci0tLSBhL3NyYy9jYXNldGFiLmMK KysrIGIvc3JjL2Nhc2V0YWIuYwpAQCAtMTQ0LDcgKzE0NCw3IEBAIHNldF9jYXNlX3RhYmxl IChMaXNwX09iamVjdCB0YWJsZSwgYm9vbCBzdGFuZGFyZCkKICAgICAgIHNldF9jaGFyX3Rh YmxlX2V4dHJhcyAodGFibGUsIDIsIGVxdik7CiAgICAgfQogCi0gIC8qIFRoaXMgaXMgc28g c2V0X2ltYWdlX29mX3JhbmdlXzEgaW4gcmVnZXguYyBjYW4gZmluZCB0aGUgRVFWIHRhYmxl LiAgKi8KKyAgLyogVGhpcyBsZXRzIHNldF9pbWFnZV9vZl9yYW5nZV8xIGluIHJlZ2V4LWVt YWNzLmMgZmluZCB0aGUgRVFWIHRhYmxlLiAgKi8KICAgc2V0X2NoYXJfdGFibGVfZXh0cmFz IChjYW5vbiwgMiwgZXF2KTsKIAogICBpZiAoc3RhbmRhcmQpCmRpZmYgLS1naXQgYS9zcmMv Y29uZl9wb3N0LmggYi9zcmMvY29uZl9wb3N0LmgKaW5kZXggMDgwZDdiN2U2OC4uOTc1ODI5 ODQzNyAxMDA2NDQKLS0tIGEvc3JjL2NvbmZfcG9zdC5oCisrKyBiL3NyYy9jb25mX3Bvc3Qu aApAQCAtMjAyLDEzICsyMDIsNiBAQCBleHRlcm4gdm9pZCBfRGViUHJpbnQgKGNvbnN0IGNo YXIgKmZtdCwgLi4uKTsKICNlbmRpZgogI2VuZGlmCiAKLSNpZmRlZiBlbWFjcyAvKiBEb24n dCBkbyB0aGlzIGZvciBsaWItc3JjLiAgKi8KLS8qIFRlbGwgcmVnZXguYyB0byB1c2UgYSB0 eXBlIGNvbXBhdGlibGUgd2l0aCBFbWFjcy4gICovCi0jZGVmaW5lIFJFX1RSQU5TTEFURV9U WVBFIExpc3BfT2JqZWN0Ci0jZGVmaW5lIFJFX1RSQU5TTEFURShUQkwsIEMpIGNoYXJfdGFi bGVfdHJhbnNsYXRlIChUQkwsIEMpCi0jZGVmaW5lIFJFX1RSQU5TTEFURV9QKFRCTCkgKCFF USAoVEJMLCBtYWtlX251bWJlciAoMCkpKQotI2VuZGlmCi0KIC8qIFRlbGwgdGltZV9yei5j IHRvIHVzZSBFbWFjcydzIGdldHRlciBhbmQgc2V0dGVyIGZvciBUWi4KICAgIE9ubHkgRW1h Y3MgdXNlcyB0aW1lX3J6IHNvIHRoaXMgaXMgT0suICAqLwogI2RlZmluZSBnZXRlbnZfVFog ZW1hY3NfZ2V0ZW52X1RaCmRpZmYgLS1naXQgYS9zcmMvZGVwcy5tayBiL3NyYy9kZXBzLm1r CmluZGV4IDdiNmFlOWNkOGUuLmExMjMyMWQ1NDQgMTAwNjQ0Ci0tLSBhL3NyYy9kZXBzLm1r CisrKyBiL3NyYy9kZXBzLm1rCkBAIC03MSw3ICs3MSw3IEBAIGNtZHMubzoKIHByZS1jcnQw Lm86IHByZS1jcnQwLmMKIGRidXNiaW5kLm86IGRidXNiaW5kLmMgdGVybWhvb2tzLmggZnJh bWUuaCBrZXlib2FyZC5oIGxpc3AuaCAkKGNvbmZpZ19oKQogZGlyZWQubzogZGlyZWQuYyBj b21tYW5kcy5oIGJ1ZmZlci5oIGxpc3AuaCAkKGNvbmZpZ19oKSBjaGFyYWN0ZXIuaCBjaGFy c2V0LmggXAotICAgY29kaW5nLmggcmVnZXguaCBzeXN0aW1lLmggYmxvY2tpbnB1dC5oIGF0 aW1lci5oIGNvbXBvc2l0ZS5oIFwKKyAgIGNvZGluZy5oIHJlZ2V4LWVtYWNzLmggc3lzdGlt ZS5oIGJsb2NraW5wdXQuaCBhdGltZXIuaCBjb21wb3NpdGUuaCBcCiAgICAuLi9saWIvZmls ZW1vZGUuaCAuLi9saWIvdW5pc3RkLmggZ2xvYmFscy5oCiBkaXNwbmV3Lm86IGRpc3BuZXcu YyBzeXN0aW1lLmggY29tbWFuZHMuaCBwcm9jZXNzLmggZnJhbWUuaCBjb2RpbmcuaCBcCiAg ICB3aW5kb3cuaCBidWZmZXIuaCB0ZXJtY2hhci5oIHRlcm1vcHRzLmggdGVybWhvb2tzLmgg Y20uaCBcCkBAIC0xNjksMjAgKzE2OSwyMCBAQCBwcm9jZXNzLm86CiAgICBibG9ja2lucHV0 LmggYXRpbWVyLmggY29kaW5nLmggbXNkb3MuaCBuc3Rlcm0uaCBjb21wb3NpdGUuaCBcCiAg ICBrZXlib2FyZC5oIGxpc3AuaCBnbG9iYWxzLmggJChjb25maWdfaCkgY2hhcmFjdGVyLmgg eGdzZWxlY3QuaCBzeXNzZWxlY3QuaCBcCiAgICAuLi9saWIvdW5pc3RkLmggZ251dGxzLmgK LXJlZ2V4Lm86IHJlZ2V4LmMgc3ludGF4LmggYnVmZmVyLmggbGlzcC5oIGdsb2JhbHMuaCAk KGNvbmZpZ19oKSByZWdleC5oIFwKLSAgIGNhdGVnb3J5LmggY2hhcmFjdGVyLmgKK3JlZ2V4 LWVtYWNzLm86IHJlZ2V4LWVtYWNzLmMgc3ludGF4LmggYnVmZmVyLmggbGlzcC5oIGdsb2Jh bHMuaCAkKGNvbmZpZ19oKSBcCisgICByZWdleC1lbWFjcy5oIGNhdGVnb3J5LmggY2hhcmFj dGVyLmgKIHJlZ2lvbi1jYWNoZS5vOiByZWdpb24tY2FjaGUuYyBidWZmZXIuaCByZWdpb24t Y2FjaGUuaCBcCiAgICBsaXNwLmggZ2xvYmFscy5oICQoY29uZmlnX2gpCiBzY3JvbGwubzog c2Nyb2xsLmMgdGVybWNoYXIuaCBkaXNwZXh0ZXJuLmggZnJhbWUuaCBtc2Rvcy5oIGtleWJv YXJkLmggXAogICAgdGVybWhvb2tzLmggbGlzcC5oIGdsb2JhbHMuaCAkKGNvbmZpZ19oKSBz eXN0aW1lLmggY29kaW5nLmggY29tcG9zaXRlLmggXAogICAgd2luZG93LmgKLXNlYXJjaC5v OiBzZWFyY2guYyByZWdleC5oIGNvbW1hbmRzLmggYnVmZmVyLmggcmVnaW9uLWNhY2hlLmgg c3ludGF4LmggXAorc2VhcmNoLm86IHNlYXJjaC5jIHJlZ2V4LWVtYWNzLmggY29tbWFuZHMu aCBidWZmZXIuaCByZWdpb24tY2FjaGUuaCBzeW50YXguaCBcCiAgICBibG9ja2lucHV0Lmgg YXRpbWVyLmggc3lzdGltZS5oIGNhdGVnb3J5LmggY2hhcmFjdGVyLmggY2hhcnNldC5oIFwK ICAgICQoSU5URVJWQUxTX0gpIGxpc3AuaCBnbG9iYWxzLmggJChjb25maWdfaCkKIHNvdW5k Lm86IHNvdW5kLmMgZGlzcGV4dGVybi5oIHN5c3NpZ25hbC5oIGxpc3AuaCBnbG9iYWxzLmgg JChjb25maWdfaCkgXAogICAgYXRpbWVyLmggc3lzdGltZS5oIC4uL2xpYi91bmlzdGQuaCBt c2Rvcy5oCiBzeW50YXgubzogc3ludGF4LmMgc3ludGF4LmggYnVmZmVyLmggY29tbWFuZHMu aCBjYXRlZ29yeS5oIGNoYXJhY3Rlci5oIFwKLSAgIGtleW1hcC5oIHJlZ2V4LmggJChJTlRF UlZBTFNfSCkgbGlzcC5oIGdsb2JhbHMuaCAkKGNvbmZpZ19oKQorICAga2V5bWFwLmggcmVn ZXgtZW1hY3MuaCAkKElOVEVSVkFMU19IKSBsaXNwLmggZ2xvYmFscy5oICQoY29uZmlnX2gp CiBzeXNkZXAubzogc3lzZGVwLmMgc3lzc2lnbmFsLmggc3lzdHR5Lmggc3lzdGltZS5oIHN5 c3dhaXQuaCBibG9ja2lucHV0LmggXAogICAgcHJvY2Vzcy5oIGRpc3BleHRlcm4uaCB0ZXJt aG9va3MuaCB0ZXJtY2hhci5oIHRlcm1vcHRzLmggY29kaW5nLmggXAogICAgZnJhbWUuaCBh dGltZXIuaCB3aW5kb3cuaCBtc2Rvcy5oIGRvc2Zucy5oIGtleWJvYXJkLmggY20uaCBsaXNw LmggXApkaWZmIC0tZ2l0IGEvc3JjL2VtYWNzLmMgYi9zcmMvZW1hY3MuYwppbmRleCAxMzBh OWY4ZmM4Li43NWZlYmQzNzJmIDEwMDY0NAotLS0gYS9zcmMvZW1hY3MuYworKysgYi9zcmMv ZW1hY3MuYwpAQCAtODQsNyArODQsNyBAQCBhbG9uZyB3aXRoIEdOVSBFbWFjcy4gIElmIG5v dCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogI2luY2x1ZGUg ImNvbXBvc2l0ZS5oIgogI2luY2x1ZGUgImRpc3BleHRlcm4uaCIKICNpbmNsdWRlICJwdHIt Ym91bmRzLmgiCi0jaW5jbHVkZSAicmVnZXguaCIKKyNpbmNsdWRlICJyZWdleC1lbWFjcy5o IgogI2luY2x1ZGUgInNoZWFwLmgiCiAjaW5jbHVkZSAic3ludGF4LmgiCiAjaW5jbHVkZSAi c3lzc2VsZWN0LmgiCkBAIC04NDYsOSArODQ2LDkgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogICAgIHsKICAgICAgIHJsaW1fdCBsaW0gPSBybGltLnJsaW1fY3VyOwogCi0g ICAgICAvKiBBcHByb3hpbWF0ZSB0aGUgYW1vdW50IHJlZ2V4LmMgbmVlZHMgcGVyIHVuaXQg b2YKKyAgICAgIC8qIEFwcHJveGltYXRlIHRoZSBhbW91bnQgcmVnZXgtZW1hY3MuYyBuZWVk cyBwZXIgdW5pdCBvZgogCSBlbWFjc19yZV9tYXhfZmFpbHVyZXMsIHRoZW4gYWRkIDMzJSB0 byBjb3ZlciB0aGUgc2l6ZSBvZiB0aGUKLQkgc21hbGxlciBzdGFja3MgdGhhdCByZWdleC5j IHN1Y2Nlc3NpdmVseSBhbGxvY2F0ZXMgYW5kCisJIHNtYWxsZXIgc3RhY2tzIHRoYXQgcmVn ZXgtZW1hY3MuYyBzdWNjZXNzaXZlbHkgYWxsb2NhdGVzIGFuZAogCSBkaXNjYXJkcyBvbiBp dHMgd2F5IHRvIHRoZSBtYXhpbXVtLiAgKi8KICAgICAgIGludCBtaW5fcmF0aW8gPSAyMCAq IHNpemVvZiAoY2hhciAqKTsKICAgICAgIGludCByYXRpbyA9IG1pbl9yYXRpbyArIG1pbl9y YXRpbyAvIDM7CkBAIC04ODcsNyArODg3LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogCQlsaW0gPSBuZXdsaW07CiAJICAgIH0KIAl9Ci0gICAgICAvKiBJZiB0aGUgc3Rh Y2sgaXMgYmlnIGVub3VnaCwgbGV0IHJlZ2V4LmMgbW9yZSBvZiBpdCBiZWZvcmUKKyAgICAg IC8qIElmIHRoZSBzdGFjayBpcyBiaWcgZW5vdWdoLCBnaXZlIHJlZ2V4LWVtYWNzLmMgbW9y ZSBvZiBpdCBiZWZvcmUKICAgICAgICAgIGZhbGxpbmcgYmFjayB0byBoZWFwIGFsbG9jYXRp b24uICAqLwogICAgICAgZW1hY3NfcmVfc2FmZV9hbGxvY2EgPSBtYXgKICAgICAgICAgKG1p biAobGltIC0gZXh0cmEsIFNJWkVfTUFYKSAqIChtaW5fcmF0aW8gLyByYXRpbyksCmRpZmYg LS1naXQgYS9zcmMvcmVnZXguYyBiL3NyYy9yZWdleC1lbWFjcy5jCnNpbWlsYXJpdHkgaW5k ZXggOTklCnJlbmFtZSBmcm9tIHNyYy9yZWdleC5jCnJlbmFtZSB0byBzcmMvcmVnZXgtZW1h Y3MuYwppbmRleCA2ZWUxM2M0Yzk5Li45NjhhMjVkYzc5IDEwMDY0NAotLS0gYS9zcmMvcmVn ZXguYworKysgYi9zcmMvcmVnZXgtZW1hY3MuYwpAQCAtNTMsNyArNTMsNyBAQAogI2luY2x1 ZGUgPHN0ZGxpYi5oPgogCiAjaWZkZWYgZW1hY3MKLS8qIFdlIG5lZWQgdGhpcyBmb3IgYHJl Z2V4LmgnLCBhbmQgcGVyaGFwcyBmb3IgdGhlIEVtYWNzIGluY2x1ZGUgZmlsZXMuICAqLwor LyogV2UgbmVlZCB0aGlzIGZvciByZWdleC1lbWFjcy5oLCBhbmQgcGVyaGFwcyBmb3IgdGhl IEVtYWNzIGluY2x1ZGUgZmlsZXMuICAqLwogIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNl bmRpZgogCkBAIC0yODksNyArMjg5LDcgQEAgZW51bSBzeW50YXhjb2RlIHsgU3doaXRlc3Bh Y2UgPSAwLCBTd29yZCA9IDEsIFNzeW1ib2wgPSAyIH07CiAjZW5kaWYKIAwKIC8qIEdldCB0 aGUgaW50ZXJmYWNlLCBpbmNsdWRpbmcgdGhlIHN5bnRheCBiaXRzLiAgKi8KLSNpbmNsdWRl ICJyZWdleC5oIgorI2luY2x1ZGUgInJlZ2V4LWVtYWNzLmgiCiAKIC8qIGlzYWxwaGEgZXRj LiBhcmUgdXNlZCBmb3IgdGhlIGNoYXJhY3RlciBjbGFzc2VzLiAgKi8KICNpbmNsdWRlIDxj dHlwZS5oPgpAQCAtMTE1Nyw3ICsxMTU3LDcgQEAgcmVnX3N5bnRheF90IHJlX3N5bnRheF9v cHRpb25zOwogICAgZGlmZmVyZW50LCBpbmNvbXBhdGlibGUgc3ludGF4ZXMuCiAKICAgIFRo ZSBhcmd1bWVudCBTWU5UQVggaXMgYSBiaXQgbWFzayBjb21wcmlzZWQgb2YgdGhlIHZhcmlv dXMgYml0cwotICAgZGVmaW5lZCBpbiByZWdleC5oLiAgV2UgcmV0dXJuIHRoZSBvbGQgc3lu dGF4LiAgKi8KKyAgIGRlZmluZWQgaW4gcmVnZXgtZW1hY3MuaC4gIFdlIHJldHVybiB0aGUg b2xkIHN5bnRheC4gICovCiAKIHJlZ19zeW50YXhfdAogcmVfc2V0X3N5bnRheCAocmVnX3N5 bnRheF90IHN5bnRheCkKQEAgLTExNzIsNyArMTE3Miw3IEBAIFdFQUtfQUxJQVMgKF9fcmVf c2V0X3N5bnRheCwgcmVfc2V0X3N5bnRheCkKICNlbmRpZgogDAogLyogVGhpcyB0YWJsZSBn aXZlcyBhbiBlcnJvciBtZXNzYWdlIGZvciBlYWNoIG9mIHRoZSBlcnJvciBjb2RlcyBsaXN0 ZWQKLSAgIGluIHJlZ2V4LmguICBPYnZpb3VzbHkgdGhlIG9yZGVyIGhlcmUgaGFzIHRvIGJl IHNhbWUgYXMgdGhlcmUuCisgICBpbiByZWdleC1lbWFjcy5oLiAgT2J2aW91c2x5IHRoZSBv cmRlciBoZXJlIGhhcyB0byBiZSBzYW1lIGFzIHRoZXJlLgogICAgUE9TSVggZG9lc24ndCBy ZXF1aXJlIHRoYXQgd2UgZG8gYW55dGhpbmcgZm9yIFJFR19OT0VSUk9SLAogICAgYnV0IHdo eSBub3QgYmUgbmljZT8gICovCiAKQEAgLTE0NzQsMjggKzE0NzQsMjggQEAgZG8gewkJCQkJ CQkJCVwKICAgY2hhciAqZGVzdGluYXRpb247CQkJCQkJCVwKICAgLyogTXVzdCBiZSBpbnQs IHNvIHdoZW4gd2UgZG9uJ3Qgc2F2ZSBhbnkgcmVnaXN0ZXJzLCB0aGUgYXJpdGhtZXRpYwlc CiAgICAgIG9mIDAgKyAtMSBpc24ndCBkb25lIGFzIHVuc2lnbmVkLiAgKi8JCQkJXAotICAJ CQkJCQkJCQlcCisJCQkJCQkJCQlcCiAgIERFQlVHX1NUQVRFTUVOVCAobmZhaWx1cmVfcG9p bnRzX3B1c2hlZCsrKTsJCQkJXAogICBERUJVR19QUklOVCAoIlxuUFVTSF9GQUlMVVJFX1BP SU5UOlxuIik7CQkJCVwKICAgREVCVUdfUFJJTlQgKCIgIEJlZm9yZSBwdXNoLCBuZXh0IGF2 YWlsOiAlemRcbiIsIChmYWlsX3N0YWNrKS5hdmFpbCk7CVwKICAgREVCVUdfUFJJTlQgKCIJ CQlzaXplOiAlemRcbiIsIChmYWlsX3N0YWNrKS5zaXplKTtcCi0gIAkJCQkJCQkJCVwKKwkJ CQkJCQkJCVwKICAgRU5TVVJFX0ZBSUxfU1RBQ0sgKE5VTV9OT05SRUdfSVRFTVMpOwkJCQkJ XAotICAJCQkJCQkJCQlcCisJCQkJCQkJCQlcCiAgIERFQlVHX1BSSU5UICgiXG4iKTsJCQkJ CQkJXAotICAJCQkJCQkJCQlcCisJCQkJCQkJCQlcCiAgIERFQlVHX1BSSU5UICgiICBQdXNo IGZyYW1lIGluZGV4OiAlemRcbiIsIGZhaWxfc3RhY2suZnJhbWUpOwkJXAogICBQVVNIX0ZB SUxVUkVfSU5UIChmYWlsX3N0YWNrLmZyYW1lKTsJCQkJCVwKLSAgCQkJCQkJCQkJXAorCQkJ CQkJCQkJXAogICBERUJVR19QUklOVCAoIiAgUHVzaCBzdHJpbmcgJXA6IFwiIiwgc3RyaW5n X3BsYWNlKTsJCQlcCiAgIERFQlVHX1BSSU5UX0RPVUJMRV9TVFJJTkcgKHN0cmluZ19wbGFj ZSwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyKTtcCiAgIERFQlVHX1BSSU5UICgi XCJcbiIpOwkJCQkJCQlcCiAgIFBVU0hfRkFJTFVSRV9QT0lOVEVSIChzdHJpbmdfcGxhY2Up OwkJCQkJXAotICAJCQkJCQkJCQlcCisJCQkJCQkJCQlcCiAgIERFQlVHX1BSSU5UICgiICBQ dXNoIHBhdHRlcm4gJXA6ICIsIHBhdHRlcm4pOwkJCQlcCiAgIERFQlVHX1BSSU5UX0NPTVBJ TEVEX1BBVFRFUk4gKGJ1ZnAsIHBhdHRlcm4sIHBlbmQpOwkJCVwKICAgUFVTSF9GQUlMVVJF X1BPSU5URVIgKHBhdHRlcm4pOwkJCQkJXAotICAJCQkJCQkJCQlcCisJCQkJCQkJCQlcCiAg IC8qIENsb3NlIHRoZSBmcmFtZSBieSBtb3ZpbmcgdGhlIGZyYW1lIHBvaW50ZXIgcGFzdCBp dC4gICovCQlcCiAgIGZhaWxfc3RhY2suZnJhbWUgPSBmYWlsX3N0YWNrLmF2YWlsOwkJCQkJ XAogfSB3aGlsZSAoMCkKQEAgLTE4MjIsNyArMTgyMiw3IEBAIHN0cnVjdCByYW5nZV90YWJs ZV93b3JrX2FyZWEKICNkZWZpbmUgU0VUVVBfQVNDSUlfUkFOR0Uod29ya19hcmVhLCBGUk9N LCBUTykJCQlcCiAgIGRvIHsJCQkJCQkJCVwKICAgICBpbnQgQzAsIEMxOwkJCQkJCQlcCi0g ICAgCQkJCQkJCQlcCisJCQkJCQkJCVwKICAgICBmb3IgKEMwID0gKEZST00pOyBDMCA8PSAo VE8pOyBDMCsrKQkJCQlcCiAgICAgICB7CQkJCQkJCQlcCiAJQzEgPSBUUkFOU0xBVEUgKEMw KTsJCQkJCVwKQEAgLTE4NDMsNyArMTg0Myw3IEBAIHN0cnVjdCByYW5nZV90YWJsZV93b3Jr X2FyZWEKICAgZG8gewkJCQkJCQkJCSAgICAgICBcCiAgICAgaW50IEMwLCBDMSwgQzIsIEk7 CQkJCQkJCSAgICAgICBcCiAgICAgaW50IFVTRUQgPSBSQU5HRV9UQUJMRV9XT1JLX1VTRUQg KHdvcmtfYXJlYSk7CQkJICAgICAgIFwKLSAgICAJCQkJCQkJCQkgICAgICAgXAorCQkJCQkJ CQkJICAgICAgIFwKICAgICBmb3IgKEMwID0gKEZST00pOyBDMCA8PSAoVE8pOyBDMCsrKQkJ CQkJICAgICAgIFwKICAgICAgIHsJCQkJCQkJCQkgICAgICAgXAogCUMxID0gUkVfQ0hBUl9U T19NVUxUSUJZVEUgKEMwKTsJCQkJCSAgICAgICBcCkBAIC0xODgyLDcgKzE4ODIsNyBAQCBz dHJ1Y3QgcmFuZ2VfdGFibGVfd29ya19hcmVhCiAjZGVmaW5lIFNFVFVQX01VTFRJQllURV9S QU5HRSh3b3JrX2FyZWEsIEZST00sIFRPKQkJCSAgIFwKICAgZG8gewkJCQkJCQkJCSAgIFwK ICAgICBpbnQgQzAsIEMxLCBDMiwgSSwgVVNFRCA9IFJBTkdFX1RBQkxFX1dPUktfVVNFRCAo d29ya19hcmVhKTsJICAgXAotICAgIAkJCQkJCQkJCSAgIFwKKwkJCQkJCQkJCSAgIFwKICAg ICBTRVRfUkFOR0VfVEFCTEVfV09SS19BUkVBICgod29ya19hcmVhKSwgKEZST00pLCAoVE8p KTsJCSAgIFwKICAgICBmb3IgKEMwID0gKEZST00pOyBDMCA8PSAoVE8pOyBDMCsrKQkJCQkJ ICAgXAogICAgICAgewkJCQkJCQkJCSAgIFwKQEAgLTE4OTYsNyArMTg5Niw3IEBAIHN0cnVj dCByYW5nZV90YWJsZV93b3JrX2FyZWEKIAkgIHsJCQkJCQkJCSAgIFwKIAkgICAgaW50IGZy b20gPSBSQU5HRV9UQUJMRV9XT1JLX0VMVCAod29ya19hcmVhLCBJKTsJCSAgIFwKIAkgICAg aW50IHRvID0gUkFOR0VfVEFCTEVfV09SS19FTFQgKHdvcmtfYXJlYSwgSSArIDEpOwkJICAg XAotCSAgICAJCQkJCQkJCSAgIFwKKwkJCQkJCQkJCSAgIFwKIAkgICAgaWYgKEMxID49IGZy b20gLSAxICYmIEMxIDw9IHRvICsgMSkJCQkJICAgXAogCSAgICAgIHsJCQkJCQkJCSAgIFwK IAkJaWYgKEMxID09IGZyb20gLSAxKQkJCQkJICAgXApAQCAtMjM3MSw3ICsyMzcxLDcgQEAg c3RhdGljIGJvb2xlYW4gZ3JvdXBfaW5fY29tcGlsZV9zdGFjayAoY29tcGlsZV9zdGFja190 eXBlIGNvbXBpbGVfc3RhY2ssCiAJCQkJICAgICAgIHJlZ251bV90IHJlZ251bSk7CiAKIC8q IGByZWdleF9jb21waWxlJyBjb21waWxlcyBQQVRURVJOIChvZiBsZW5ndGggU0laRSkgYWNj b3JkaW5nIHRvIFNZTlRBWC4KLSAgIFJldHVybnMgb25lIG9mIGVycm9yIGNvZGVzIGRlZmlu ZWQgaW4gYHJlZ2V4LmgnLCBvciB6ZXJvIGZvciBzdWNjZXNzLgorICAgUmV0dXJucyBvbmUg b2YgZXJyb3IgY29kZXMgZGVmaW5lZCBpbiByZWdleC1lbWFjcy5oLCBvciB6ZXJvIGZvciBz dWNjZXNzLgogCiAgICBJZiBXSElURVNQQUNFX1JFR0VYUCBpcyBnaXZlbiAob25seSAjaWZk ZWYgZW1hY3MpLCBpdCBpcyB1c2VkIGluc3RlYWQgb2YKICAgIGEgc3BhY2UgY2hhcmFjdGVy IGluIFBBVFRFUk4uCkBAIC0yNzE0LDE1ICsyNzE0LDE1IEBAIHJlZ2V4X2NvbXBpbGUgKHJl X2NoYXIgKnBhdHRlcm4sIHNpemVfdCBzaXplLAogCiAJCSAgICBpZiAoIXplcm9fdGltZXNf b2sgJiYgc2ltcGxlKQogCQkgICAgICB7IC8qIFNpbmNlIHNpbXBsZSAqIGxvb3BzIGNhbiBi ZSBtYWRlIGZhc3RlciBieSB1c2luZwotCQkgICAgCSAgIG9uX2ZhaWx1cmVfa2VlcF9zdHJp bmdfanVtcCwgd2UgdHVybiBzaW1wbGUgUCsKLQkJICAgIAkgICBpbnRvIFBQKiBpZiBQIGlz IHNpbXBsZS4gICovCi0JCSAgICAJdW5zaWduZWQgY2hhciAqcDEsICpwMjsKLQkJICAgIAlz dGFydG9mZnNldCA9IGIgLSBsYXN0c3RhcnQ7Ci0JCSAgICAJR0VUX0JVRkZFUl9TUEFDRSAo c3RhcnRvZmZzZXQpOwotCQkgICAgCXAxID0gYjsgcDIgPSBsYXN0c3RhcnQ7Ci0JCSAgICAJ d2hpbGUgKHAyIDwgcDEpCi0JCSAgICAJICAqYisrID0gKnAyKys7Ci0JCSAgICAJemVyb190 aW1lc19vayA9IDE7CisJCQkgICBvbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXAsIHdlIHR1 cm4gc2ltcGxlIFArCisJCQkgICBpbnRvIFBQKiBpZiBQIGlzIHNpbXBsZS4gICovCisJCQl1 bnNpZ25lZCBjaGFyICpwMSwgKnAyOworCQkJc3RhcnRvZmZzZXQgPSBiIC0gbGFzdHN0YXJ0 OworCQkJR0VUX0JVRkZFUl9TUEFDRSAoc3RhcnRvZmZzZXQpOworCQkJcDEgPSBiOyBwMiA9 IGxhc3RzdGFydDsKKwkJCXdoaWxlIChwMiA8IHAxKQorCQkJICAqYisrID0gKnAyKys7CisJ CQl6ZXJvX3RpbWVzX29rID0gMTsKIAkJICAgICAgfQogCiAJCSAgICBHRVRfQlVGRkVSX1NQ QUNFICg2KTsKQEAgLTYyMTcsNyArNjIxNyw3IEBAIHJlX21hdGNoXzJfaW50ZXJuYWwgKHN0 cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAqc3RyaW5nMSwKIAogICBG UkVFX1ZBUklBQkxFUyAoKTsKIAotICByZXR1cm4gLTE7ICAgICAgICAgCQkJLyogRmFpbHVy ZSB0byBtYXRjaC4gICovCisgIHJldHVybiAtMTsJLyogRmFpbHVyZSB0byBtYXRjaC4gICov CiB9CiAMCiAvKiBTdWJyb3V0aW5lIGRlZmluaXRpb25zIGZvciByZV9tYXRjaF8yLiAgKi8K QEAgLTY0MDAsNyArNjQwMCw3IEBAIHJlX2V4ZWMgKGNvbnN0IGNoYXIgKnMpCiAgICAgIHJv dXRpbmUgd2lsbCByZXBvcnQgb25seSBzdWNjZXNzIG9yIGZhaWx1cmUsIGFuZCBub3RoaW5n IGFib3V0IHRoZQogICAgICByZWdpc3RlcnMuCiAKLSAgIEl0IHJldHVybnMgMCBpZiBpdCBz dWNjZWVkcywgbm9uemVybyBpZiBpdCBkb2Vzbid0LiAgKFNlZSByZWdleC5oIGZvcgorICAg SXQgcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBub256ZXJvIGlmIGl0IGRvZXNuJ3QuICAo U2VlIHJlZ2V4LWVtYWNzLmggZm9yCiAgICB0aGUgcmV0dXJuIGNvZGVzIGFuZCB0aGVpciBt ZWFuaW5ncy4pICAqLwogCiByZWdfZXJyY29kZV90CmRpZmYgLS1naXQgYS9zcmMvcmVnZXgu aCBiL3NyYy9yZWdleC1lbWFjcy5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9t IHNyYy9yZWdleC5oCnJlbmFtZSB0byBzcmMvcmVnZXgtZW1hY3MuaAppbmRleCAzYTJkNzRk ODZhLi44YTE1ZTU3OTNmIDEwMDY0NAotLS0gYS9zcmMvcmVnZXguaAorKysgYi9zcmMvcmVn ZXgtZW1hY3MuaApAQCAtMTYwLDkgKzE2MCw5IEBAIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBy ZWdfc3ludGF4X3Q7CiAKIC8qIElmIHRoaXMgYml0IGlzIHNldCwgdHVybiBvbiBpbnRlcm5h bCByZWdleCBkZWJ1Z2dpbmcuCiAgICBJZiBub3Qgc2V0LCBhbmQgZGVidWdnaW5nIHdhcyBv biwgdHVybiBpdCBvZmYuCi0gICBUaGlzIG9ubHkgd29ya3MgaWYgcmVnZXguYyBpcyBjb21w aWxlZCAtRERFQlVHLgorICAgVGhpcyBvbmx5IHdvcmtzIGlmIHJlZ2V4LWVtYWNzLmMgaXMg Y29tcGlsZWQgLURERUJVRy4KICAgIFdlIGRlZmluZSB0aGlzIGJpdCBhbHdheXMsIHNvIHRo YXQgYWxsIHRoYXQncyBuZWVkZWQgdG8gdHVybiBvbgotICAgZGVidWdnaW5nIGlzIHRvIHJl Y29tcGlsZSByZWdleC5jOyB0aGUgY2FsbGluZyBjb2RlIGNhbiBhbHdheXMgaGF2ZQorICAg ZGVidWdnaW5nIGlzIHRvIHJlY29tcGlsZSByZWdleC1lbWFjcy5jOyB0aGUgY2FsbGluZyBj b2RlIGNhbiBhbHdheXMgaGF2ZQogICAgdGhpcyBiaXQgc2V0LCBhbmQgaXQgd29uJ3QgYWZm ZWN0IGFueXRoaW5nIGluIHRoZSBub3JtYWwgY2FzZS4gKi8KICNkZWZpbmUgUkVfREVCVUcg KFJFX05PX05FV0xJTkVfQU5DSE9SIDw8IDEpCiAKQEAgLTIxOSw3ICsyMTksNyBAQCBleHRl cm4gcHRyZGlmZl90IGVtYWNzX3JlX3NhZmVfYWxsb2NhOwogICAoKFJFX1NZTlRBWF9QT1NJ WF9FWFRFTkRFRCB8IFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMgfCBSRV9ERUJVRykJ XAogICAgJiB+KFJFX0RPVF9OT1RfTlVMTCB8IFJFX0lOVEVSVkFMUyB8IFJFX0NPTlRFWFRf SU5ERVBfT1BTKSkKIAotI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfQVdLIAkJCQkJCVwKKyNk ZWZpbmUgUkVfU1lOVEFYX1BPU0lYX0FXSwkJCQkJCVwKICAgKFJFX1NZTlRBWF9QT1NJWF9F WFRFTkRFRCB8IFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMJCVwKICAgIHwgUkVfSU5U RVJWQUxTCSAgICB8IFJFX05PX0dOVV9PUFMpCiAKQEAgLTMxNyw3ICszMTcsNyBAQCBleHRl cm4gcHRyZGlmZl90IGVtYWNzX3JlX3NhZmVfYWxsb2NhOwogCiAKIC8qIElmIGFueSBlcnJv ciBjb2RlcyBhcmUgcmVtb3ZlZCwgY2hhbmdlZCwgb3IgYWRkZWQsIHVwZGF0ZSB0aGUKLSAg IGByZV9lcnJvcl9tc2cnIHRhYmxlIGluIHJlZ2V4LmMuICAqLworICAgcmVfZXJyb3JfbXNn IHRhYmxlIGluIHJlZ2V4LWVtYWNzLmMuICAqLwogdHlwZWRlZiBlbnVtCiB7CiAjaWZkZWYg X1hPUEVOX1NPVVJDRQpAQCAtMzUwLDYgKzM1MCwxMSBAQCB0eXBlZGVmIGVudW0KICAgUkVH X0VTSVpFQlIgICAgICAgICAgIC8qIG4gb3IgbSB0b28gYmlnIGluIFx7bixtXH0gKi8KIH0g cmVnX2VycmNvZGVfdDsKIAwKKy8qIFVzZSBhIHR5cGUgY29tcGF0aWJsZSB3aXRoIEVtYWNz LiAgKi8KKyNkZWZpbmUgUkVfVFJBTlNMQVRFX1RZUEUgTGlzcF9PYmplY3QKKyNkZWZpbmUg UkVfVFJBTlNMQVRFKFRCTCwgQykgY2hhcl90YWJsZV90cmFuc2xhdGUgKFRCTCwgQykKKyNk ZWZpbmUgUkVfVFJBTlNMQVRFX1AoVEJMKSAoIUVRIChUQkwsIG1ha2VfbnVtYmVyICgwKSkp CisKIC8qIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIGNvbXBpbGVkIHBhdHRl cm4uICBCZWZvcmUgY2FsbGluZwogICAgdGhlIHBhdHRlcm4gY29tcGlsZXIsIHRoZSBmaWVs ZHMgYGJ1ZmZlcicsIGBhbGxvY2F0ZWQnLCBgZmFzdG1hcCcsCiAgICBgdHJhbnNsYXRlJywg YW5kIGBub19zdWInIGNhbiBiZSBzZXQuICBBZnRlciB0aGUgcGF0dGVybiBoYXMgYmVlbgpA QCAtNjUwLDUgKzY1NSw1IEBAIHR5cGVkZWYgaW50IHJlX3djaGFyX3Q7CiAKICNlbmRpZiAv KiBub3QgV0lERV9DSEFSX1NVUFBPUlQgKi8KIAotI2VuZGlmIC8qIHJlZ2V4LmggKi8KKyNl bmRpZiAvKiByZWdleC1lbWFjcy5oICovCiAMCmRpZmYgLS1naXQgYS9zcmMvc2VhcmNoLmMg Yi9zcmMvc2VhcmNoLmMKaW5kZXggY2NkYjY1OTc3Ni4uNGVlNzAxNDRmYyAxMDA2NDQKLS0t IGEvc3JjL3NlYXJjaC5jCisrKyBiL3NyYy9zZWFyY2guYwpAQCAtMzAsNyArMzAsNyBAQCBh bG9uZyB3aXRoIEdOVSBFbWFjcy4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uICAqLwogI2luY2x1ZGUgImJsb2NraW5wdXQuaCIKICNpbmNsdWRlICJp bnRlcnZhbHMuaCIKIAotI2luY2x1ZGUgInJlZ2V4LmgiCisjaW5jbHVkZSAicmVnZXgtZW1h Y3MuaCIKIAogI2RlZmluZSBSRUdFWFBfQ0FDSEVfU0laRSAyMAogCkBAIC0yOTAsNyArMjkw LDcgQEAgbG9va2luZ19hdF8xIChMaXNwX09iamVjdCBzdHJpbmcsIGJvb2wgcG9zaXgpCiAg IGlmIChydW5uaW5nX2FzeW5jaF9jb2RlKQogICAgIHNhdmVfc2VhcmNoX3JlZ3MgKCk7CiAK LSAgLyogVGhpcyBpcyBzbyBzZXRfaW1hZ2Vfb2ZfcmFuZ2VfMSBpbiByZWdleC5jIGNhbiBm aW5kIHRoZSBFUVYgdGFibGUuICAqLworICAvKiBUaGlzIGxldHMgc2V0X2ltYWdlX29mX3Jh bmdlXzEgaW4gcmVnZXgtZW1hY3MuYyBmaW5kIHRoZSBFUVYgdGFibGUuICAqLwogICBzZXRf Y2hhcl90YWJsZV9leHRyYXMgKEJWQVIgKGN1cnJlbnRfYnVmZmVyLCBjYXNlX2Nhbm9uX3Rh YmxlKSwgMiwKIAkJCSBCVkFSIChjdXJyZW50X2J1ZmZlciwgY2FzZV9lcXZfdGFibGUpKTsK IApAQCAtNDEwLDcgKzQxMCw3IEBAIHN0cmluZ19tYXRjaF8xIChMaXNwX09iamVjdCByZWdl eHAsIExpc3BfT2JqZWN0IHN0cmluZywgTGlzcF9PYmplY3Qgc3RhcnQsCiAgICAgICBwb3Nf Ynl0ZSA9IHN0cmluZ19jaGFyX3RvX2J5dGUgKHN0cmluZywgcG9zKTsKICAgICB9CiAKLSAg LyogVGhpcyBpcyBzbyBzZXRfaW1hZ2Vfb2ZfcmFuZ2VfMSBpbiByZWdleC5jIGNhbiBmaW5k IHRoZSBFUVYgdGFibGUuICAqLworICAvKiBUaGlzIGxldHMgc2V0X2ltYWdlX29mX3Jhbmdl XzEgaW4gcmVnZXgtZW1hY3MuYyBmaW5kIHRoZSBFUVYgdGFibGUuICAqLwogICBzZXRfY2hh cl90YWJsZV9leHRyYXMgKEJWQVIgKGN1cnJlbnRfYnVmZmVyLCBjYXNlX2Nhbm9uX3RhYmxl KSwgMiwKIAkJCSBCVkFSIChjdXJyZW50X2J1ZmZlciwgY2FzZV9lcXZfdGFibGUpKTsKIApA QCAtMTA2Miw3ICsxMDYyLDcgQEAgc2VhcmNoX2NvbW1hbmQgKExpc3BfT2JqZWN0IHN0cmlu ZywgTGlzcF9PYmplY3QgYm91bmQsIExpc3BfT2JqZWN0IG5vZXJyb3IsCiAJbGltX2J5dGUg PSBDSEFSX1RPX0JZVEUgKGxpbSk7CiAgICAgfQogCi0gIC8qIFRoaXMgaXMgc28gc2V0X2lt YWdlX29mX3JhbmdlXzEgaW4gcmVnZXguYyBjYW4gZmluZCB0aGUgRVFWIHRhYmxlLiAgKi8K KyAgLyogVGhpcyBsZXRzIHNldF9pbWFnZV9vZl9yYW5nZV8xIGluIHJlZ2V4LWVtYWNzLmMg ZmluZCB0aGUgRVFWIHRhYmxlLiAgKi8KICAgc2V0X2NoYXJfdGFibGVfZXh0cmFzIChCVkFS IChjdXJyZW50X2J1ZmZlciwgY2FzZV9jYW5vbl90YWJsZSksIDIsCiAJCQkgQlZBUiAoY3Vy cmVudF9idWZmZXIsIGNhc2VfZXF2X3RhYmxlKSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9zeW50 YXguYyBiL3NyYy9zeW50YXguYwppbmRleCBjNWE0YjAzOTU1Li41Yjg3NWFkMjk2IDEwMDY0 NAotLS0gYS9zcmMvc3ludGF4LmMKKysrIGIvc3JjL3N5bnRheC5jCkBAIC0yMyw3ICsyMyw3 IEBAIGFsb25nIHdpdGggR05VIEVtYWNzLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4gICovCiAjaW5jbHVkZSAibGlzcC5oIgogI2luY2x1ZGUgImNo YXJhY3Rlci5oIgogI2luY2x1ZGUgImJ1ZmZlci5oIgotI2luY2x1ZGUgInJlZ2V4LmgiCisj aW5jbHVkZSAicmVnZXgtZW1hY3MuaCIKICNpbmNsdWRlICJzeW50YXguaCIKICNpbmNsdWRl ICJpbnRlcnZhbHMuaCIKICNpbmNsdWRlICJjYXRlZ29yeS5oIgpAQCAtMjY3LDcgKzI2Nyw3 IEBAIFNFVFVQX1NZTlRBWF9UQUJMRSAocHRyZGlmZl90IGZyb20sIHB0cmRpZmZfdCBjb3Vu dCkKICAgIElmIGl0IGlzIHQgKHdoaWNoIGlzIG9ubHkgdXNlZCBpbiBmYXN0X2Nfc3RyaW5n X21hdGNoX2lnbm9yZV9jYXNlKSwKICAgIGlnbm9yZSBwcm9wZXJ0aWVzIGFsdG9nZXRoZXIu CiAKLSAgIFRoaXMgaXMgbWVhbnQgZm9yIHJlZ2V4LmMgdG8gdXNlLiAgRm9yIGJ1ZmZlcnMs IHJlZ2V4LmMgcGFzc2VzIGFyZ3VtZW50cworICAgVGhpcyBpcyBtZWFudCBzbyB0aGF0IGZv ciBidWZmZXJzLCByZWdleC1lbWFjcy5jIHBhc3NlcyBhcmd1bWVudHMKICAgIHRvIHRoZSBV UERBVEVfU1lOVEFYX1RBQkxFIGZ1bmN0aW9ucyB3aGljaCBhcmUgcmVsYXRpdmUgdG8gQkVH Vi4KICAgIFNvIGlmIGl0IGlzIGEgYnVmZmVyLCB3ZSBzZXQgdGhlIG9mZnNldCBmaWVsZCB0 byBCRUdWLiAgKi8KIApAQCAtMzcyOSw3ICszNzI5LDcgQEAgc3ltc19vZl9zeW50YXggKHZv aWQpCiAgIHN0YXRpY3BybyAoJmdsX3N0YXRlLmN1cnJlbnRfc3ludGF4X3RhYmxlKTsKICAg c3RhdGljcHJvICgmZ2xfc3RhdGUub2xkX3Byb3ApOwogCi0gIC8qIERlZmluZWQgaW4gcmVn ZXguYy4gICovCisgIC8qIERlZmluZWQgaW4gcmVnZXgtZW1hY3MuYy4gICovCiAgIHN0YXRp Y3BybyAoJnJlX21hdGNoX29iamVjdCk7CiAKICAgREVGU1lNIChRc2Nhbl9lcnJvciwgInNj YW4tZXJyb3IiKTsKZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQuaCBiL3NyYy90aHJlYWQuaApp bmRleCA5MjJlZWE2MjE3Li5lMWViNDA5MjFiIDEwMDY0NAotLS0gYS9zcmMvdGhyZWFkLmgK KysrIGIvc3JjL3RocmVhZC5oCkBAIC0xOSw3ICsxOSw3IEBAIGFsb25nIHdpdGggR05VIEVt YWNzLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICov CiAjaWZuZGVmIFRIUkVBRF9ICiAjZGVmaW5lIFRIUkVBRF9ICiAKLSNpbmNsdWRlICJyZWdl eC5oIgorI2luY2x1ZGUgInJlZ2V4LWVtYWNzLmgiCiAKICNpZmRlZiBXSU5ET1dTTlQKICNp bmNsdWRlIDxzeXMvc29ja2V0Lmg+CmRpZmYgLS1naXQgYS90ZXN0L3NyYy9yZWdleC10ZXN0 cy5lbCBiL3Rlc3Qvc3JjL3JlZ2V4LWVtYWNzLXRlc3RzLmVsCnNpbWlsYXJpdHkgaW5kZXgg OTklCnJlbmFtZSBmcm9tIHRlc3Qvc3JjL3JlZ2V4LXRlc3RzLmVsCnJlbmFtZSB0byB0ZXN0 L3NyYy9yZWdleC1lbWFjcy10ZXN0cy5lbAppbmRleCAwODNlZDVjNGM4Li43YTA3NTkwOGE2 IDEwMDY0NAotLS0gYS90ZXN0L3NyYy9yZWdleC10ZXN0cy5lbAorKysgYi90ZXN0L3NyYy9y ZWdleC1lbWFjcy10ZXN0cy5lbApAQCAtMSw0ICsxLDQgQEAKLTs7OyByZWdleC10ZXN0cy5l bCAtLS0gdGVzdHMgZm9yIHJlZ2V4LmMgZnVuY3Rpb25zIC0qLSBsZXhpY2FsLWJpbmRpbmc6 IHQgLSotCis7OzsgcmVnZXgtZW1hY3MtdGVzdHMuZWwgLS0tIHRlc3RzIGZvciByZWdleC1l bWFjcy5jIC0qLSBsZXhpY2FsLWJpbmRpbmc6IHQgLSotCiAKIDs7IENvcHlyaWdodCAoQykg MjAxNS0yMDE4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCkBAIC0yNCw3ICsy NCw3IEBACiAoZGVmdmFyIHJlZ2V4LXRlc3RzLS1yZXNvdXJjZXMtZGlyCiAgIChjb25jYXQg KGNvbmNhdCAoZmlsZS1uYW1lLWRpcmVjdG9yeSAob3IgbG9hZC1maWxlLW5hbWUgYnVmZmVy LWZpbGUtbmFtZSkpCiAgICAgICAgICAgICAgICAgICAiL3JlZ2V4LXJlc291cmNlcy8iKSkK LSAgIlBhdGggdG8gcmVnZXgtcmVzb3VyY2VzIGRpcmVjdG9yeSBuZXh0IHRvIHRoZSBcInJl Z2V4LXRlc3RzLmVsXCIgZmlsZS4iKQorICAiUGF0aCB0byByZWdleC1yZXNvdXJjZXMgZGly ZWN0b3J5IG5leHQgdG8gdGhlIFwicmVnZXgtZW1hY3MtdGVzdHMuZWxcIiBmaWxlLiIpCiAK IChlcnQtZGVmdGVzdCByZWdleC13b3JkLWNjLWZhbGxiYWNrLXRlc3QgKCkKICAgIlRlc3Qg dGhhdCBcIltbOmNjOl1dKnhcIiBtYXRjaGVzIFwieFwiIChidWcjMjQwMjApLgpAQCAtNjgz LDQgKzY4Myw0IEBAIHJlZ2V4LXRlc3RzLVRFU1RTCiAgIChzaG91bGQtbm90IChzdHJpbmct bWF0Y2ggIlxcYHhcXHs2NTUzNVxcfSIgKG1ha2Utc3RyaW5nIDY1NTM0ID94KSkpCiAgIChz aG91bGQtZXJyb3IgKHN0cmluZy1tYXRjaCAiXFxgeFxcezY1NTM2XFx9IiAiWCIpIDp0eXBl ICdpbnZhbGlkLXJlZ2V4cCkpCiAKLTs7OyByZWdleC10ZXN0cy5lbCBlbmRzIGhlcmUKKzs7 OyByZWdleC1lbWFjcy10ZXN0cy5lbCBlbmRzIGhlcmUKLS0gCjIuMTcuMQoK --------------F39DF2437E1EAB82A614CC92 Content-Type: text/plain; charset=UTF-8; name="0002-Simplify-regex-emacs-code-by-assuming-Emacs.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0002-Simplify-regex-emacs-code-by-assuming-Emacs.txt" RnJvbSBlYjRhZTlhMDRjZTZmNzdjMDA2ODc0YWExZmNkNDBkM2IwMWY4ZjhmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBUdWUsIDMxIEp1bCAyMDE4IDEwOjQ5OjQ1IC0wNzAwClN1YmplY3Q6IFtQQVRD SCAyLzRdIFNpbXBsaWZ5IHJlZ2V4LWVtYWNzIGNvZGUgYnkgYXNzdW1pbmcgRW1hY3MKTUlN RS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04 CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKCiogc3JjL3JlZ2V4LWVtYWNzLmM6 IE9taXQgbm8tbG9uZ2VyLW5lZWRlZCBBSVggY29kZS4KRG9u4oCZdCBpZ25vcmUgR0NDIHdh cm5pbmdzLgpJbmNsdWRlIHJlZ2V4LWVtYWNzLmggaW1tZWRpYXRlbHkgYWZ0ZXIgY29uZmln LmgsCnRvIHRlc3QgdGhhdCBpdOKAmXMgaW5kZXBlbmRlbnQuCk9taXQgdGhlICIjaWZuZGVm IGVtYWNzIiBhbmQgIiNpZmRlZiBSRUdFWF9NQUxMT0MiIGFuZCAiI2lmZGVmCkRFQlVHIiBv ciAiI2lmIFdJREVfQ0hBUl9TVVBQT1JUIiBvciAiI2lmZGVmIF9SRUdFWF9SRV9DT01QIiwK Y29kZSwgYXMgd2UgYXJlIG5vIGxvbmdlciBpbnRlcmVzdGVkIGluIGNvbXBpbGluZyBvdXRz aWRlCkVtYWNzICh3aXRoIG9yIHdpdGhvdXQgZGVidWdnaW5nIG9yIG5hdGl2ZSB3aWRlIGNo YXIgc3VwcG9ydCkKb3IgaW4gYXZvaWRpbmcgYWxsb2NhLgpObyBuZWVkIHRvIGluY2x1ZGUg c3RkZGVmLmgsIHN0ZGxpYi5oLCBzeXMvdHlwZXMuaCwgd2NoYXIuaCwKd2N0eXBlLmgsIGxv Y2FsZS9sb2NhbGVpbmZvLmgsIGxvY2FsZS9lbGVtLWhhc2guaCwgbGFuZ2luZm8uaCwKbGli aW50bC5oLCB1bmlzdGQuaCwgc3RkYm9vbC5oLCBzdHJpbmcuaCwgc3RkaW8uaCwgYXNzZXJ0 LmguCkFsbCB1c2VzIG9mIGFzc2VydCBjaGFuZ2VkIHRvIGVhc3NlcnQuCihSRV9EVVBfTUFY LCByZWdfc3ludGF4X3QsIFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMpCihSRV9CS19Q TFVTX1FNLCBSRV9DSEFSX0NMQVNTRVMsIFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUykKKFJF X0NPTlRFWFRfSU5ERVBfT1BTLCBSRV9DT05URVhUX0lOVkFMSURfT1BTLCBSRV9ET1RfTkVX TElORSkKKFJFX0RPVF9OT1RfTlVMTCwgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FLCBSRV9J TlRFUlZBTFMpCihSRV9MSU1JVEVEX09QUywgUkVfTkVXTElORV9BTFQsIFJFX05PX0JLX0JS QUNFUykKKFJFX05PX0JLX1BBUkVOUywgUkVfTk9fQktfUkVGUywgUkVfTk9fQktfVkJBUikK KFJFX05PX0VNUFRZX1JBTkdFUywgUkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVOX09SRCkKKFJF X05PX1BPU0lYX0JBQ0tUUkFDS0lORywgUkVfTk9fR05VX09QUywgUkVfRlJVR0FMKQooUkVf U0hZX0dST1VQUywgUkVfTk9fTkVXTElORV9BTkNIT1IsIFJFX1NZTlRBWF9FTUFDUykKKFJF R19OT0VSUk9SLCBSRUdfTk9NQVRDSCwgUkVHX0JBRFBBVCwgUkVHX0VDT0xMQVRFKQooUkVH X0VDVFlQRSwgUkVHX0VFU0NBUEUsIFJFR19FU1VCUkVHLCBSRUdfRUJSQUNLLCBSRUdfRVBB UkVOKQooUkVHX0VCUkFDRSwgUkVHX0JBREJSLCBSRUdfRVJBTkdFLCBSRUdfRVNQQUNFLCBS RUdfQkFEUlBUKQooUkVHX0VFTkQsIFJFR19FU0laRSwgUkVHX0VSUEFSRU4sIFJFR19FUkFO R0VYLCBSRUdfRVNJWkVCUikKKHJlZ19lcnJjb2RlX3QsIFJFR1NfVU5BTExPQ0FURUQsIFJF R1NfUkVBTExPQ0FURSwgUkVHU19GSVhFRCkKKFJFX05SRUdTLCBSRV9UUkFOU0xBVEUsIFJF X1RSQU5TTEFURV9QKToKTW92ZSBoZXJlIGZyb20gcmVnZXgtZW1hY3MuaC4KKFJFX05SRUdT KTogRGVmaW5lIHVuY29uZGl0aW9uYWxseS4KKGJvb2xlYW4pOiBSZW1vdmUuICBBbGwgdXNl cyByZXBsYWNlZCBieSBib29sLgooV0lERV9DSEFSX1NVUFBPUlQsIHJlZ2ZyZWUsIHJlZ2V4 ZWMsIHJlZ2NvbXAsIHJlZ2Vycm9yKToKKHJlX3NldF9zeW50YXgsIHJlX3N5bnRheF9vcHRp b25zLCBXRUFLX0FMSUFTLCBnZXR0ZXh0LCBnZXR0ZXh0X25vb3ApOgpSZW1vdmUuIEFsbCB1 c2VzIHJlbW92ZWQuCihtYWxsb2MsIHJlYWxsb2MsIGZyZWUpOiBEbyBub3QgcmVkZWZpbmUu ICBBZGp1c3QgYWxsIGNhbGxlcnMKdG8gdXNlIHhtYWxsb2MsIHhyZWFsbG9jLCB4ZnJlZSBp bnN0ZWFkLgoocmVfZXJyb3JfbXNnaWQpOiBVc2UgQzk5IHRvIGF2b2lkIG5lZWQgdG8ga2Vl cCBpbiBzYW1lIG9yZGVyCmFzIHJlZ19lcnJvcl90LgooUkVHRVhfVVNFX1NBRkVfQUxMT0NB KTogU2ltcGxpZnkgYnkgdXNpbmcgVVNFX1NBRkVfQUxMT0NBLgooUkVHRVhfQUxMT0NBVEUs IFJFR0VYX1JFQUxMT0NBVEUsIFJFR0VYX0ZSRUUsIFJFR0VYX0FMTE9DQVRFX1NUQUNLKQoo UkVHRVhfUkVBTExPQ0FURV9TVEFDSywgUkVHRVhfRlJFRV9TVEFDSyk6IFJlbW92ZS4KQWxs IGNhbGxlcnMgY2hhbmdlZCB0byB1c2UgdGhlIG5vbi1SRUdFWF9NQUxMT0MgdmVyc2lvbi4K KFJFR0VYX1RBTExPQyk6IFJlbW92ZS4gIEFsbCBjYWxsZXJzIGNoYW5nZWQgdG8gdXNlIFNB RkVfQUxMT0NBLgoocmVfc2V0X3N5bnRheCk6IFJlbW92ZTsgdW51c2VkLgooTUFUQ0hfTUFZ X0FMTE9DQVRFKTogUmVtb3ZlOyBub3cgYWx3YXlzIHRydWUuICBBbGwgdXNlcyBzaW1wbGlm aWVkLgooSU5JVF9GQUlMVVJFX0FMTE9DKTogRGVmaW5lIHVuY29uZGl0aW9uYWxseS4KKHJl X2NvbXBpbGVfZmFzdG1hcCk6IE5vdyBzdGF0aWMuCihyZV9jb21waWxlX3BhdHRlcm4pOiBB dm9pZCB1bm5lY2Vzc2FyeSBjYXN0LgoqIHNyYy9yZWdleC1lbWFjcy5oIChFTUFDU19SRUdF WF9IKTogUmVuYW1lZCBmcm9tIF9SRUdFWF9IIHRvCmF2b2lkIHBvc3NpYmxlIGNvbGxpc2lv biB3aXRoIGdsaWJjLgpEb27igJl0IGluY2x1ZGUgc3lzL3R5cGVzLmguICBBbGwgdXNlcyBv ZiBzc2l6ZV90IGNoYW5nZWQgdG8gcHRyZGlmZl90LgpEb27igJl0IHdvcnJ5IGFib3V0IEMr KyBvciBWTVMuCkFzc3VtZSBlbWFjcyBpcyBkZWZpbmVkIGFuZCB0aGF0IF9SRUdFWF9SRV9D T01QIGFuZCBXSURFX0NIQVJfU1VQUE9SVAphcmUgbm90LgpEZWZpbmUgc3RydWN0IHJlX3Jl Z2lzdGVycyBiZWZvcmUgaW5jbHVkaW5nIGxpc3AuaC4KKFJFR19FTk9TWVMsIFJFX1RSQU5T TEFURV9UWVBFKTogUmVtb3ZlOyBhbGwgdXNlcyByZXBsYWNlZCBieQpMaXNwX09iamVjdC4K KHJlZ29mZl90KTogUmVtb3ZlLiAgQWxsIHVzZXMgcmVwbGFjZWQgd2l0aCBwdHJkaWZmX3Qu CihyZV9tYXRjaCwgcmVnY29tcCwgcmVnZXhlYywgcmVnZXJyb3IsIHJlZ2ZyZWUpOgpSZW1v dmUgZGVjbCBvZiBub25leGlzdGVudCBmdW5jdGlvbnMuCihSRV9ERUJVRywgUkVfU1lOVEFY X0FXSywgUkVfU1lOVEFYX0dOVV9BV0spCihSRV9TWU5UQVhfUE9TSVhfQVdLLCBSRV9TWU5U QVhfR1JFUCwgUkVfU1lOVEFYX0VHUkVQKQooUkVfU1lOVEFYX1BPU0lYX0VHUkVQLCBSRV9T WU5UQVhfRUQsIFJFX1NZTlRBWF9TRUQpCihfUkVfU1lOVEFYX1BPU0lYX0NPTU1PTiwgUkVf U1lOVEFYX1BPU0lYX0JBU0lDKQooUkVfU1lOVEFYX1BPU0lYX01JTklNQUxfQkFTSUMsIFJF X1NZTlRBWF9QT1NJWF9FWFRFTkRFRCkKKFJFX1NZTlRBWF9QT1NJWF9NSU5JTUFMX0VYVEVO REVELCBSRUdfRVhURU5ERUQsIFJFR19JQ0FTRSkKKFJFR19ORVdMSU5FLCBSRUdfTk9TVUIs IFJFR19OT1RCT0wsIFJFR19OT1RFT0wsIHJlZ21hdGNoX3QpOgpSZW1vdmU7IHVudXNlZC4K KiBzcmMvc2VhcmNoLmMgKEZzZXRfbWF0Y2hfZGF0YSk6IFNpbXBsaWZ5IHJhbmdlIHRlc3Qg bm93IHRoYXQKd2Uga25vdyBpdOKAmXMgcHRyZGlmZl90LgotLS0KIHNyYy9yZWdleC1lbWFj cy5jIHwgMjQ4NyArKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KIHNyYy9yZWdleC1lbWFjcy5oIHwgIDU0MiArLS0tLS0tLS0tCiBzcmMvc2VhcmNoLmMg ICAgICB8ICAgMjEgKy0KIHNyYy90aHJlYWQuaCAgICAgIHwgICAgNCArLQogNCBmaWxlcyBj aGFuZ2VkLCA0NzIgaW5zZXJ0aW9ucygrKSwgMjU4MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvcmVnZXgtZW1hY3MuYyBiL3NyYy9yZWdleC1lbWFjcy5jCmluZGV4IDk2OGEy NWRjNzkuLjFmMGZmM2JmMDcgMTAwNjQ0Ci0tLSBhL3NyYy9yZWdleC1lbWFjcy5jCisrKyBi L3NyYy9yZWdleC1lbWFjcy5jCkBAIC0yMSwxNTggKzIxLDE4NyBAQAogICAgLSBzdHJ1Y3R1 cmUgdGhlIG9wY29kZSBzcGFjZSBpbnRvIG9wY29kZStmbGFnLgogICAgLSBtZXJnZSB3aXRo IGdsaWJjJ3MgcmVnZXguW2NoXS4KICAgIC0gcmVwbGFjZSAoc3VjY2VlZF9uICsganVtcF9u ICsgc2V0X251bWJlcl9hdCkgd2l0aCBzb21ldGhpbmcgdGhhdCBkb2Vzbid0Ci0gICAgIG5l ZWQgdG8gbW9kaWZ5IHRoZSBjb21waWxlZCByZWdleHAgc28gdGhhdCByZV9tYXRjaCBjYW4g YmUgcmVlbnRyYW50LgorICAgICBuZWVkIHRvIG1vZGlmeSB0aGUgY29tcGlsZWQgcmVnZXhw IHNvIHRoYXQgcmVfc2VhcmNoIGNhbiBiZSByZWVudHJhbnQuCiAgICAtIGdldCByaWQgb2Yg b25fZmFpbHVyZV9qdW1wX3NtYXJ0IGJ5IGRvaW5nIHRoZSBvcHRpbWl6YXRpb24gaW4gcmVf Y29tcAotICAgICByYXRoZXIgdGhhbiBhdCBydW4tdGltZSwgc28gdGhhdCByZV9tYXRjaCBj YW4gYmUgcmVlbnRyYW50LgorICAgICByYXRoZXIgdGhhbiBhdCBydW4tdGltZSwgc28gdGhh dCByZV9zZWFyY2ggY2FuIGJlIHJlZW50cmFudC4KICovCiAKLS8qIEFJWCByZXF1aXJlcyB0 aGlzIHRvIGJlIHRoZSBmaXJzdCB0aGluZyBpbiB0aGUgZmlsZS4gICovCi0jaWYgZGVmaW5l ZCBfQUlYICYmICFkZWZpbmVkIFJFR0VYX01BTExPQwotICAjcHJhZ21hIGFsbG9jYQotI2Vu ZGlmCi0KLS8qIElnbm9yZSBzb21lIEdDQyB3YXJuaW5ncyBmb3Igbm93LiAgVGhpcyBzZWN0 aW9uIHNob3VsZCBnbyBhd2F5Ci0gICBvbmNlIHRoZSBFbWFjcyBhbmQgR251bGliIHJlZ2V4 IGNvZGUgaXMgbWVyZ2VkLiAgKi8KLSNpZiA0IDwgX19HTlVDX18gKyAoNSA8PSBfX0dOVUNf TUlOT1JfXykgfHwgZGVmaW5lZCBfX2NsYW5nX18KLSMgcHJhZ21hIEdDQyBkaWFnbm9zdGlj IGlnbm9yZWQgIi1Xc3RyaWN0LW92ZXJmbG93IgotIyBpZm5kZWYgZW1hY3MKLSMgIHByYWdt YSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1mdW5jdGlvbiIKLSMgIHByYWdt YSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1tYWNyb3MiCi0jICBwcmFnbWEg R0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtcmVzdWx0IgotIyAgcHJhZ21hIEdD QyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXZhcmlhYmxlIgotIyBlbmRpZgotI2Vu ZGlmCi0KLSNpZiA0IDwgX19HTlVDX18gKyAoNiA8PSBfX0dOVUNfTUlOT1JfXykgJiYgISBk ZWZpbmVkIF9fY2xhbmdfXwotIyBwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1 bnVzZWQtYnV0LXNldC12YXJpYWJsZSIKLSNlbmRpZgotCiAjaW5jbHVkZSA8Y29uZmlnLmg+ CiAKLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2lmZGVm IGVtYWNzCi0vKiBXZSBuZWVkIHRoaXMgZm9yIHJlZ2V4LWVtYWNzLmgsIGFuZCBwZXJoYXBz IGZvciB0aGUgRW1hY3MgaW5jbHVkZSBmaWxlcy4gICovCi0jIGluY2x1ZGUgPHN5cy90eXBl cy5oPgotI2VuZGlmCi0KLS8qIFdoZXRoZXIgdG8gdXNlIElTTyBDIEFtZW5kbWVudCAxIHdp ZGUgY2hhciBmdW5jdGlvbnMuCi0gICBUaG9zZSBzaG91bGQgbm90IGJlIHVzZWQgZm9yIEVt YWNzIHNpbmNlIGl0IHVzZXMgaXRzIG93bi4gICovCi0jaWYgZGVmaW5lZCBfTElCQwotI2Rl ZmluZSBXSURFX0NIQVJfU1VQUE9SVCAxCi0jZWxzZQotI2RlZmluZSBXSURFX0NIQVJfU1VQ UE9SVCBcCi0JKEhBVkVfV0NUWVBFX0ggJiYgSEFWRV9XQ0hBUl9IICYmIEhBVkVfQlRPV0Mg JiYgIWVtYWNzKQotI2VuZGlmCisvKiBHZXQgdGhlIGludGVyZmFjZSwgaW5jbHVkaW5nIHRo ZSBzeW50YXggYml0cy4gICovCisjaW5jbHVkZSAicmVnZXgtZW1hY3MuaCIKIAotLyogRm9y IHBsYXRmb3JtIHdoaWNoIHN1cHBvcnQgdGhlIElTTyBDIGFtZW5kbWVudCAxIGZ1bmN0aW9u YWxpdHkgd2UKLSAgIHN1cHBvcnQgdXNlciBkZWZpbmVkIGNoYXJhY3RlciBjbGFzc2VzLiAg Ki8KLSNpZiBXSURFX0NIQVJfU1VQUE9SVAotLyogU29sYXJpcyAyLjUgaGFzIGEgYnVnOiA8 d2NoYXIuaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgPHdjdHlwZS5oPi4gICovCi0jIGlu Y2x1ZGUgPHdjaGFyLmg+Ci0jIGluY2x1ZGUgPHdjdHlwZS5oPgotI2VuZGlmCisjaW5jbHVk ZSA8c3RkbGliLmg+CiAKLSNpZmRlZiBfTElCQwotLyogV2UgaGF2ZSB0byBrZWVwIHRoZSBu YW1lc3BhY2UgY2xlYW4uICAqLwotIyBkZWZpbmUgcmVnZnJlZShwcmVnKSBfX3JlZ2ZyZWUg KHByZWcpCi0jIGRlZmluZSByZWdleGVjKHByLCBzdCwgbm0sIHBtLCBlZikgX19yZWdleGVj IChwciwgc3QsIG5tLCBwbSwgZWYpCi0jIGRlZmluZSByZWdjb21wKHByZWcsIHBhdHRlcm4s IGNmbGFncykgX19yZWdjb21wIChwcmVnLCBwYXR0ZXJuLCBjZmxhZ3MpCi0jIGRlZmluZSBy ZWdlcnJvcihlcnJfY29kZSwgcHJlZywgZXJyYnVmLCBlcnJidWZfc2l6ZSkgXAotCV9fcmVn ZXJyb3IgKGVycl9jb2RlLCBwcmVnLCBlcnJidWYsIGVycmJ1Zl9zaXplKQotIyBkZWZpbmUg cmVfc2V0X3JlZ2lzdGVycyhidSwgcmUsIG51LCBzdCwgZW4pIFwKLQlfX3JlX3NldF9yZWdp c3RlcnMgKGJ1LCByZSwgbnUsIHN0LCBlbikKLSMgZGVmaW5lIHJlX21hdGNoXzIoYnVmcCwg c3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyLCBwb3MsIHJlZ3MsIHN0b3ApIFwKLQlf X3JlX21hdGNoXzIgKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMiwgcG9z LCByZWdzLCBzdG9wKQotIyBkZWZpbmUgcmVfbWF0Y2goYnVmcCwgc3RyaW5nLCBzaXplLCBw b3MsIHJlZ3MpIFwKLQlfX3JlX21hdGNoIChidWZwLCBzdHJpbmcsIHNpemUsIHBvcywgcmVn cykKLSMgZGVmaW5lIHJlX3NlYXJjaChidWZwLCBzdHJpbmcsIHNpemUsIHN0YXJ0cG9zLCBy YW5nZSwgcmVncykgXAotCV9fcmVfc2VhcmNoIChidWZwLCBzdHJpbmcsIHNpemUsIHN0YXJ0 cG9zLCByYW5nZSwgcmVncykKLSMgZGVmaW5lIHJlX2NvbXBpbGVfcGF0dGVybihwYXR0ZXJu LCBsZW5ndGgsIGJ1ZnApIFwKLQlfX3JlX2NvbXBpbGVfcGF0dGVybiAocGF0dGVybiwgbGVu Z3RoLCBidWZwKQotIyBkZWZpbmUgcmVfc2V0X3N5bnRheChzeW50YXgpIF9fcmVfc2V0X3N5 bnRheCAoc3ludGF4KQotIyBkZWZpbmUgcmVfc2VhcmNoXzIoYnVmcCwgc3QxLCBzMSwgc3Qy LCBzMiwgc3RhcnRwb3MsIHJhbmdlLCByZWdzLCBzdG9wKSBcCi0JX19yZV9zZWFyY2hfMiAo YnVmcCwgc3QxLCBzMSwgc3QyLCBzMiwgc3RhcnRwb3MsIHJhbmdlLCByZWdzLCBzdG9wKQot IyBkZWZpbmUgcmVfY29tcGlsZV9mYXN0bWFwKGJ1ZnApIF9fcmVfY29tcGlsZV9mYXN0bWFw IChidWZwKQotCi0vKiBNYWtlIHN1cmUgd2UgY2FsbCBsaWJjJ3MgZnVuY3Rpb24gZXZlbiBp ZiB0aGUgdXNlciBvdmVycmlkZXMgdGhlbS4gICovCi0jIGRlZmluZSBidG93YyBfX2J0b3dj Ci0jIGRlZmluZSBpc3djdHlwZSBfX2lzd2N0eXBlCi0jIGRlZmluZSB3Y3R5cGUgX193Y3R5 cGUKLQotIyBkZWZpbmUgV0VBS19BTElBUyhhLGIpIHdlYWtfYWxpYXMgKGEsIGIpCi0KLS8q IFdlIGFyZSBhbHNvIHVzaW5nIHNvbWUgbGlicmFyeSBpbnRlcm5hbHMuICAqLwotIyBpbmNs dWRlIDxsb2NhbGUvbG9jYWxlaW5mby5oPgotIyBpbmNsdWRlIDxsb2NhbGUvZWxlbS1oYXNo Lmg+Ci0jIGluY2x1ZGUgPGxhbmdpbmZvLmg+Ci0jZWxzZQotIyBkZWZpbmUgV0VBS19BTElB UyhhLGIpCi0jZW5kaWYKKyNpbmNsdWRlICJjaGFyYWN0ZXIuaCIKKyNpbmNsdWRlICJidWZm ZXIuaCIKIAotLyogVGhpcyBpcyBmb3Igb3RoZXIgR05VIGRpc3RyaWJ1dGlvbnMgd2l0aCBp bnRlcm5hdGlvbmFsaXplZCBtZXNzYWdlcy4gICovCi0jaWYgSEFWRV9MSUJJTlRMX0ggfHwg ZGVmaW5lZCBfTElCQwotIyBpbmNsdWRlIDxsaWJpbnRsLmg+Ci0jZWxzZQotIyBkZWZpbmUg Z2V0dGV4dChtc2dpZCkgKG1zZ2lkKQotI2VuZGlmCisjaW5jbHVkZSAic3ludGF4LmgiCisj aW5jbHVkZSAiY2F0ZWdvcnkuaCIKIAotI2lmbmRlZiBnZXR0ZXh0X25vb3AKLS8qIFRoaXMg ZGVmaW5lIGlzIHNvIHhnZXR0ZXh0IGNhbiBmaW5kIHRoZSBpbnRlcm5hdGlvbmFsaXphYmxl Ci0gICBzdHJpbmdzLiAgKi8KLSMgZGVmaW5lIGdldHRleHRfbm9vcChTdHJpbmcpIFN0cmlu ZworLyogTWF4aW11bSBudW1iZXIgb2YgZHVwbGljYXRlcyBhbiBpbnRlcnZhbCBjYW4gYWxs b3cuICBTb21lIHN5c3RlbXMKKyAgIGRlZmluZSB0aGlzIGluIG90aGVyIGhlYWRlciBmaWxl cywgYnV0IHdlIHdhbnQgb3VyCisgICB2YWx1ZSwgc28gcmVtb3ZlIGFueSBwcmV2aW91cyBk ZWZpbmUuICAqLworI2lmZGVmIFJFX0RVUF9NQVgKKyMgdW5kZWYgUkVfRFVQX01BWAogI2Vu ZGlmCi0KLS8qIFRoZSBgZW1hY3MnIHN3aXRjaCB0dXJucyBvbiBjZXJ0YWluIG1hdGNoaW5n IGNvbW1hbmRzCi0gICB0aGF0IG1ha2Ugc2Vuc2Ugb25seSBpbiBFbWFjcy4gKi8KLSNpZmRl ZiBlbWFjcwotCi0jIGluY2x1ZGUgImxpc3AuaCIKLSMgaW5jbHVkZSAiY2hhcmFjdGVyLmgi Ci0jIGluY2x1ZGUgImJ1ZmZlci5oIgotCi0jIGluY2x1ZGUgInN5bnRheC5oIgotIyBpbmNs dWRlICJjYXRlZ29yeS5oIgorLyogUmVwZWF0IGNvdW50cyBhcmUgc3RvcmVkIGluIG9wY29k ZXMgYXMgMiBieXRlIGludGVnZXJzLiAgVGhpcyB3YXMKKyAgIHByZXZpb3VzbHkgbGltaXRl ZCB0byA3ZmZmIGJlY2F1c2UgdGhlIHBhcnNpbmcgY29kZSB1c2VzIHNpZ25lZAorICAgaW50 cy4gIEJ1dCBFbWFjcyBvbmx5IHJ1bnMgb24gMzIgYml0IHBsYXRmb3JtcyBhbnl3YXkuICAq LworI2RlZmluZSBSRV9EVVBfTUFYICgweGZmZmYpCisKKy8qIFRoZSBmb2xsb3dpbmcgYml0 cyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJlZ2V4cCBzeW50YXggd2UKKyAgIHJlY29n bml6ZS4gIFRoZSBzZXQvbm90LXNldCBtZWFuaW5ncyB3aGVyZSBoaXN0b3JpY2FsbHkgY2hv c2VuIHNvCisgICB0aGF0IEVtYWNzIHN5bnRheCBoYWQgdGhlIHZhbHVlIDAuCisgICBUaGUg Yml0cyBhcmUgZ2l2ZW4gaW4gYWxwaGFiZXRpY2FsIG9yZGVyLCBhbmQKKyAgIHRoZSBkZWZp bml0aW9ucyBzaGlmdGVkIGJ5IG9uZSBmcm9tIHRoZSBwcmV2aW91cyBiaXQ7IHRodXMsIHdo ZW4gd2UKKyAgIGFkZCBvciByZW1vdmUgYSBiaXQsIG9ubHkgb25lIG90aGVyIGRlZmluaXRp b24gbmVlZCBjaGFuZ2UuICAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHJlZ19zeW50YXhf dDsKKworLyogSWYgdGhpcyBiaXQgaXMgbm90IHNldCwgdGhlbiBcIGluc2lkZSBhIGJyYWNr ZXQgZXhwcmVzc2lvbiBpcyBsaXRlcmFsLgorICAgSWYgc2V0LCB0aGVuIHN1Y2ggYSBcIHF1 b3RlcyB0aGUgZm9sbG93aW5nIGNoYXJhY3Rlci4gICovCisjZGVmaW5lIFJFX0JBQ0tTTEFT SF9FU0NBUEVfSU5fTElTVFMgKCh1bnNpZ25lZCBsb25nIGludCkgMSkKKworLyogSWYgdGhp cyBiaXQgaXMgbm90IHNldCwgdGhlbiArIGFuZCA/IGFyZSBvcGVyYXRvcnMsIGFuZCBcKyBh bmQgXD8gYXJlCisgICAgIGxpdGVyYWxzLgorICAgSWYgc2V0LCB0aGVuIFwrIGFuZCBcPyBh cmUgb3BlcmF0b3JzIGFuZCArIGFuZCA/IGFyZSBsaXRlcmFscy4gICovCisjZGVmaW5lIFJF X0JLX1BMVVNfUU0gKFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMgPDwgMSkKKworLyog SWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGNoYXJhY3RlciBjbGFzc2VzIGFyZSBzdXBwb3J0 ZWQuICBUaGV5IGFyZToKKyAgICAgWzphbHBoYTpdLCBbOnVwcGVyOl0sIFs6bG93ZXI6XSwg IFs6ZGlnaXQ6XSwgWzphbG51bTpdLCBbOnhkaWdpdDpdLAorICAgICBbOnNwYWNlOl0sIFs6 cHJpbnQ6XSwgWzpwdW5jdDpdLCBbOmdyYXBoOl0sIGFuZCBbOmNudHJsOl0uCisgICBJZiBu b3Qgc2V0LCB0aGVuIGNoYXJhY3RlciBjbGFzc2VzIGFyZSBub3Qgc3VwcG9ydGVkLiAgKi8K KyNkZWZpbmUgUkVfQ0hBUl9DTEFTU0VTIChSRV9CS19QTFVTX1FNIDw8IDEpCisKKy8qIElm IHRoaXMgYml0IGlzIHNldCwgdGhlbiBeIGFuZCAkIGFyZSBhbHdheXMgYW5jaG9ycyAob3V0 c2lkZSBicmFja2V0CisgICAgIGV4cHJlc3Npb25zLCBvZiBjb3Vyc2UpLgorICAgSWYgdGhp cyBiaXQgaXMgbm90IHNldCwgdGhlbiBpdCBkZXBlbmRzOgorICAgICAgICBeICBpcyBhbiBh bmNob3IgaWYgaXQgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHJlZ3VsYXIKKyAgICAgICAg ICAgZXhwcmVzc2lvbiBvciBhZnRlciBhbiBvcGVuLWdyb3VwIG9yIGFuIGFsdGVybmF0aW9u IG9wZXJhdG9yOworICAgICAgICAkICBpcyBhbiBhbmNob3IgaWYgaXQgaXMgYXQgdGhlIGVu ZCBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwgb3IKKyAgICAgICAgICAgYmVmb3JlIGEgY2xv c2UtZ3JvdXAgb3IgYW4gYWx0ZXJuYXRpb24gb3BlcmF0b3IuCisKKyAgIFRoaXMgYml0IGNv dWxkIGJlIChyZSljb21iaW5lZCB3aXRoIFJFX0NPTlRFWFRfSU5ERVBfT1BTLCBiZWNhdXNl CisgICBQT1NJWCBkcmFmdCAxMS4yIHNheXMgdGhhdCAqIGV0Yy4gaW4gbGVhZGluZyBwb3Np dGlvbnMgaXMgdW5kZWZpbmVkLgorICAgV2UgYWxyZWFkeSBpbXBsZW1lbnRlZCBhIHByZXZp b3VzIGRyYWZ0IHdoaWNoIG1hZGUgdGhvc2UgY29uc3RydWN0cworICAgaW52YWxpZCwgdGhv dWdoLCBzbyB3ZSBoYXZlbid0IGNoYW5nZWQgdGhlIGNvZGUgYmFjay4gICovCisjZGVmaW5l IFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUyAoUkVfQ0hBUl9DTEFTU0VTIDw8IDEpCisKKy8q IElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIGFsd2F5 cyBzcGVjaWFsCisgICAgIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhleSBhcmUgaW4gdGhlIHBh dHRlcm4uCisgICBJZiB0aGlzIGJpdCBpcyBub3Qgc2V0LCB0aGVuIHNwZWNpYWwgY2hhcmFj dGVycyBhcmUgc3BlY2lhbCBvbmx5IGluCisgICAgIHNvbWUgY29udGV4dHM7IG90aGVyd2lz ZSB0aGV5IGFyZSBvcmRpbmFyeS4gIFNwZWNpZmljYWxseSwKKyAgICAgKiArID8gYW5kIGlu dGVydmFscyBhcmUgb25seSBzcGVjaWFsIHdoZW4gbm90IGFmdGVyIHRoZSBiZWdpbm5pbmcs CisgICAgIG9wZW4tZ3JvdXAsIG9yIGFsdGVybmF0aW9uIG9wZXJhdG9yLiAgKi8KKyNkZWZp bmUgUkVfQ09OVEVYVF9JTkRFUF9PUFMgKFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUyA8PCAx KQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gKiwgKywgPywgYW5kIHsgY2Fubm90 IGJlIGZpcnN0IGluIGFuIHJlIG9yCisgICAgIGltbWVkaWF0ZWx5IGFmdGVyIGFuIGFsdGVy bmF0aW9uIG9yIGJlZ2luLWdyb3VwIG9wZXJhdG9yLiAgKi8KKyNkZWZpbmUgUkVfQ09OVEVY VF9JTlZBTElEX09QUyAoUkVfQ09OVEVYVF9JTkRFUF9PUFMgPDwgMSkKKworLyogSWYgdGhp cyBiaXQgaXMgc2V0LCB0aGVuIC4gbWF0Y2hlcyBuZXdsaW5lLgorICAgSWYgbm90IHNldCwg dGhlbiBpdCBkb2Vzbid0LiAgKi8KKyNkZWZpbmUgUkVfRE9UX05FV0xJTkUgKFJFX0NPTlRF WFRfSU5WQUxJRF9PUFMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIC4g ZG9lc24ndCBtYXRjaCBOVUwuCisgICBJZiBub3Qgc2V0LCB0aGVuIGl0IGRvZXMuICAqLwor I2RlZmluZSBSRV9ET1RfTk9UX05VTEwgKFJFX0RPVF9ORVdMSU5FIDw8IDEpCisKKy8qIElm IHRoaXMgYml0IGlzIHNldCwgbm9ubWF0Y2hpbmcgbGlzdHMgW14uLi5dIGRvIG5vdCBtYXRj aCBuZXdsaW5lLgorICAgSWYgbm90IHNldCwgdGhleSBkby4gICovCisjZGVmaW5lIFJFX0hB VF9MSVNUU19OT1RfTkVXTElORSAoUkVfRE9UX05PVF9OVUxMIDw8IDEpCisKKy8qIElmIHRo aXMgYml0IGlzIHNldCwgZWl0aGVyIFx7Li4uXH0gb3Igey4uLn0gZGVmaW5lcyBhbgorICAg ICBpbnRlcnZhbCwgZGVwZW5kaW5nIG9uIFJFX05PX0JLX0JSQUNFUy4KKyAgIElmIG5vdCBz ZXQsIFx7LCBcfSwgeywgYW5kIH0gYXJlIGxpdGVyYWxzLiAgKi8KKyNkZWZpbmUgUkVfSU5U RVJWQUxTIChSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUgPDwgMSkKKworLyogSWYgdGhpcyBi aXQgaXMgc2V0LCArLCA/IGFuZCB8IGFyZW4ndCByZWNvZ25pemVkIGFzIG9wZXJhdG9ycy4K KyAgIElmIG5vdCBzZXQsIHRoZXkgYXJlLiAgKi8KKyNkZWZpbmUgUkVfTElNSVRFRF9PUFMg KFJFX0lOVEVSVkFMUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIG5ld2xpbmUg aXMgYW4gYWx0ZXJuYXRpb24gb3BlcmF0b3IuCisgICBJZiBub3Qgc2V0LCBuZXdsaW5lIGlz IGxpdGVyYWwuICAqLworI2RlZmluZSBSRV9ORVdMSU5FX0FMVCAoUkVfTElNSVRFRF9PUFMg PDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGB7Li4ufScgZGVmaW5lcyBh biBpbnRlcnZhbCwgYW5kIFx7IGFuZCBcfQorICAgICBhcmUgbGl0ZXJhbHMuCisgIElmIG5v dCBzZXQsIHRoZW4gYFx7Li4uXH0nIGRlZmluZXMgYW4gaW50ZXJ2YWwuICAqLworI2RlZmlu ZSBSRV9OT19CS19CUkFDRVMgKFJFX05FV0xJTkVfQUxUIDw8IDEpCisKKy8qIElmIHRoaXMg Yml0IGlzIHNldCwgKC4uLikgZGVmaW5lcyBhIGdyb3VwLCBhbmQgXCggYW5kIFwpIGFyZSBs aXRlcmFscy4KKyAgIElmIG5vdCBzZXQsIFwoLi4uXCkgZGVmaW5lcyBhIGdyb3VwLCBhbmQg KCBhbmQgKSBhcmUgbGl0ZXJhbHMuICAqLworI2RlZmluZSBSRV9OT19CS19QQVJFTlMgKFJF X05PX0JLX0JSQUNFUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gXDxk aWdpdD4gbWF0Y2hlcyA8ZGlnaXQ+LgorICAgSWYgbm90IHNldCwgdGhlbiBcPGRpZ2l0PiBp cyBhIGJhY2stcmVmZXJlbmNlLiAgKi8KKyNkZWZpbmUgUkVfTk9fQktfUkVGUyAoUkVfTk9f QktfUEFSRU5TIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiB8IGlzIGFu IGFsdGVybmF0aW9uIG9wZXJhdG9yLCBhbmQgXHwgaXMgbGl0ZXJhbC4KKyAgIElmIG5vdCBz ZXQsIHRoZW4gXHwgaXMgYW4gYWx0ZXJuYXRpb24gb3BlcmF0b3IsIGFuZCB8IGlzIGxpdGVy YWwuICAqLworI2RlZmluZSBSRV9OT19CS19WQkFSIChSRV9OT19CS19SRUZTIDw8IDEpCisK Ky8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBhbiBlbmRpbmcgcmFuZ2UgcG9pbnQgY29s bGF0aW5nIGhpZ2hlcgorICAgICB0aGFuIHRoZSBzdGFydGluZyByYW5nZSBwb2ludCwgYXMg aW4gW3otYV0sIGlzIGludmFsaWQuCisgICBJZiBub3Qgc2V0LCB0aGVuIHdoZW4gZW5kaW5n IHJhbmdlIHBvaW50IGNvbGxhdGVzIGhpZ2hlciB0aGFuIHRoZQorICAgICBzdGFydGluZyBy YW5nZSBwb2ludCwgdGhlIHJhbmdlIGlzIGlnbm9yZWQuICAqLworI2RlZmluZSBSRV9OT19F TVBUWV9SQU5HRVMgKFJFX05PX0JLX1ZCQVIgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMg c2V0LCB0aGVuIGFuIHVubWF0Y2hlZCApIGlzIG9yZGluYXJ5LgorICAgSWYgbm90IHNldCwg dGhlbiBhbiB1bm1hdGNoZWQgKSBpcyBpbnZhbGlkLiAgKi8KKyNkZWZpbmUgUkVfVU5NQVRD SEVEX1JJR0hUX1BBUkVOX09SRCAoUkVfTk9fRU1QVFlfUkFOR0VTIDw8IDEpCisKKy8qIElm IHRoaXMgYml0IGlzIHNldCwgc3VjY2VlZCBhcyBzb29uIGFzIHdlIG1hdGNoIHRoZSB3aG9s ZSBwYXR0ZXJuLAorICAgd2l0aG91dCBmdXJ0aGVyIGJhY2t0cmFja2luZy4gICovCisjZGVm aW5lIFJFX05PX1BPU0lYX0JBQ0tUUkFDS0lORyAoUkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVO X09SRCA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIGRvIG5vdCBwcm9jZXNzIHRo ZSBHTlUgcmVnZXggb3BlcmF0b3JzLgorICAgSWYgbm90IHNldCwgdGhlbiB0aGUgR05VIHJl Z2V4IG9wZXJhdG9ycyBhcmUgcmVjb2duaXplZC4gKi8KKyNkZWZpbmUgUkVfTk9fR05VX09Q UyAoUkVfTk9fUE9TSVhfQkFDS1RSQUNLSU5HIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlz IHNldCwgdGhlbiAqPywgKz8gYW5kID8/IG1hdGNoIG5vbiBncmVlZGlseS4gKi8KKyNkZWZp bmUgUkVfRlJVR0FMIChSRV9OT19HTlVfT1BTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlz IHNldCwgdGhlbiAoPzouLi4pIGlzIHRyZWF0ZWQgYXMgYSBzaHkgZ3JvdXAuICAqLworI2Rl ZmluZSBSRV9TSFlfR1JPVVBTIChSRV9GUlVHQUwgPDwgMSkKKworLyogSWYgdGhpcyBiaXQg aXMgc2V0LCBeIGFuZCAkIG9ubHkgbWF0Y2ggYXQgYmVnL2VuZCBvZiBidWZmZXIuICAqLwor I2RlZmluZSBSRV9OT19ORVdMSU5FX0FOQ0hPUiAoUkVfU0hZX0dST1VQUyA8PCAxKQorCisv KiBUaGlzIGdsb2JhbCB2YXJpYWJsZSBkZWZpbmVzIHRoZSBwYXJ0aWN1bGFyIHJlZ2V4cCBz eW50YXggdG8gdXNlIChmb3IKKyAgIHNvbWUgaW50ZXJmYWNlcykuICBXaGVuIGEgcmVnZXhw IGlzIGNvbXBpbGVkLCB0aGUgc3ludGF4IHVzZWQgaXMKKyAgIHN0b3JlZCBpbiB0aGUgcGF0 dGVybiBidWZmZXIsIHNvIGNoYW5naW5nIHRoaXMgZG9lcyBub3QgYWZmZWN0CisgICBhbHJl YWR5LWNvbXBpbGVkIHJlZ2V4cHMuICAqLworLyogZXh0ZXJuIHJlZ19zeW50YXhfdCByZV9z eW50YXhfb3B0aW9uczsgKi8KKy8qIERlZmluZSBjb21iaW5hdGlvbnMgb2YgdGhlIGFib3Zl IGJpdHMgZm9yIHRoZSBzdGFuZGFyZCBwb3NzaWJpbGl0aWVzLiAgKi8KKyNkZWZpbmUgUkVf U1lOVEFYX0VNQUNTCQkJCQkJCVwKKyAgKFJFX0NIQVJfQ0xBU1NFUyB8IFJFX0lOVEVSVkFM UyB8IFJFX1NIWV9HUk9VUFMgfCBSRV9GUlVHQUwpCiAKIC8qIE1ha2Ugc3ludGF4IHRhYmxl IGxvb2t1cCBncmFudCBkYXRhIGluIGdsX3N0YXRlLiAgKi8KLSMgZGVmaW5lIFNZTlRBWChj KSBzeW50YXhfcHJvcGVydHkgKGMsIDEpCi0KLSMgaWZkZWYgbWFsbG9jCi0jICB1bmRlZiBt YWxsb2MKLSMgZW5kaWYKLSMgZGVmaW5lIG1hbGxvYyB4bWFsbG9jCi0jIGlmZGVmIHJlYWxs b2MKLSMgIHVuZGVmIHJlYWxsb2MKLSMgZW5kaWYKLSMgZGVmaW5lIHJlYWxsb2MgeHJlYWxs b2MKLSMgaWZkZWYgZnJlZQotIyAgdW5kZWYgZnJlZQotIyBlbmRpZgotIyBkZWZpbmUgZnJl ZSB4ZnJlZQorI2RlZmluZSBTWU5UQVgoYykgc3ludGF4X3Byb3BlcnR5IChjLCAxKQogCiAv KiBDb252ZXJ0cyB0aGUgcG9pbnRlciB0byB0aGUgY2hhciB0byBCRUctYmFzZWQgb2Zmc2V0 IGZyb20gdGhlIHN0YXJ0LiAgKi8KLSMgZGVmaW5lIFBUUl9UT19PRkZTRVQoZCkgUE9TX0FT X0lOX0JVRkZFUiAoUE9JTlRFUl9UT19PRkZTRVQgKGQpKQorI2RlZmluZSBQVFJfVE9fT0ZG U0VUKGQpIFBPU19BU19JTl9CVUZGRVIgKFBPSU5URVJfVE9fT0ZGU0VUIChkKSkKIC8qIFN0 cmluZ3MgYXJlIDAtaW5kZXhlZCwgYnVmZmVycyBhcmUgMS1pbmRleGVkOyB3ZSBwdW4gb24g dGhlIGJvb2xlYW4KICAgIHJlc3VsdCB0byBnZXQgdGhlIHJpZ2h0IGJhc2UgaW5kZXguICAq LwotIyBkZWZpbmUgUE9TX0FTX0lOX0JVRkZFUihwKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyNkZWZpbmUgUE9TX0FTX0lOX0JVRkZFUihwKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKChwKSArIChOSUxQIChnbF9zdGF0ZS5v YmplY3QpIHx8IEJVRkZFUlAgKGdsX3N0YXRlLm9iamVjdCkpKQogCi0jIGRlZmluZSBSRV9N VUxUSUJZVEVfUChidWZwKSAoKGJ1ZnApLT5tdWx0aWJ5dGUpCi0jIGRlZmluZSBSRV9UQVJH RVRfTVVMVElCWVRFX1AoYnVmcCkgKChidWZwKS0+dGFyZ2V0X211bHRpYnl0ZSkKLSMgZGVm aW5lIFJFX1NUUklOR19DSEFSKHAsIG11bHRpYnl0ZSkgXAorI2RlZmluZSBSRV9NVUxUSUJZ VEVfUChidWZwKSAoKGJ1ZnApLT5tdWx0aWJ5dGUpCisjZGVmaW5lIFJFX1RBUkdFVF9NVUxU SUJZVEVfUChidWZwKSAoKGJ1ZnApLT50YXJnZXRfbXVsdGlieXRlKQorI2RlZmluZSBSRV9T VFJJTkdfQ0hBUihwLCBtdWx0aWJ5dGUpIFwKICAgKG11bHRpYnl0ZSA/IChTVFJJTkdfQ0hB UiAocCkpIDogKCoocCkpKQotIyBkZWZpbmUgUkVfU1RSSU5HX0NIQVJfQU5EX0xFTkdUSChw LCBsZW4sIG11bHRpYnl0ZSkgXAorI2RlZmluZSBSRV9TVFJJTkdfQ0hBUl9BTkRfTEVOR1RI KHAsIGxlbiwgbXVsdGlieXRlKSBcCiAgIChtdWx0aWJ5dGUgPyAoU1RSSU5HX0NIQVJfQU5E X0xFTkdUSCAocCwgbGVuKSkgOiAoKGxlbikgPSAxLCAqKHApKSkKIAotIyBkZWZpbmUgUkVf Q0hBUl9UT19NVUxUSUJZVEUoYykgVU5JQllURV9UT19DSEFSIChjKQorI2RlZmluZSBSRV9D SEFSX1RPX01VTFRJQllURShjKSBVTklCWVRFX1RPX0NIQVIgKGMpCiAKLSMgZGVmaW5lIFJF X0NIQVJfVE9fVU5JQllURShjKSBDSEFSX1RPX0JZVEVfU0FGRSAoYykKKyNkZWZpbmUgUkVf Q0hBUl9UT19VTklCWVRFKGMpIENIQVJfVE9fQllURV9TQUZFIChjKQogCiAvKiBTZXQgQyBh IChwb3NzaWJseSBjb252ZXJ0ZWQgdG8gbXVsdGlieXRlKSBjaGFyYWN0ZXIgYmVmb3JlIFAu ICBQCiAgICBwb2ludHMgaW50byBhIHN0cmluZyB3aGljaCBpcyB0aGUgdmlydHVhbCBjb25j YXRlbmF0aW9uIG9mIFNUUjEKICAgICh3aGljaCBlbmRzIGF0IEVORDEpIG9yIFNUUjIgKHdo aWNoIGVuZHMgYXQgRU5EMikuICAqLwotIyBkZWZpbmUgR0VUX0NIQVJfQkVGT1JFXzIoYywg cCwgc3RyMSwgZW5kMSwgc3RyMiwgZW5kMikJCSAgICAgXAorI2RlZmluZSBHRVRfQ0hBUl9C RUZPUkVfMihjLCBwLCBzdHIxLCBlbmQxLCBzdHIyLCBlbmQyKQkJCSAgICAgXAogICBkbyB7 CQkJCQkJCQkJICAgICBcCiAgICAgaWYgKHRhcmdldF9tdWx0aWJ5dGUpCQkJCQkJICAgICBc CiAgICAgICB7CQkJCQkJCQkJICAgICBcCkBAIC0xOTAsNyArMjE5LDcgQEAKIAogLyogU2V0 IEMgYSAocG9zc2libHkgY29udmVydGVkIHRvIG11bHRpYnl0ZSkgY2hhcmFjdGVyIGF0IFAs IGFuZCBzZXQKICAgIExFTiB0byB0aGUgYnl0ZSBsZW5ndGggb2YgdGhhdCBjaGFyYWN0ZXIu ICAqLwotIyBkZWZpbmUgR0VUX0NIQVJfQUZURVIoYywgcCwgbGVuKQkJXAorI2RlZmluZSBH RVRfQ0hBUl9BRlRFUihjLCBwLCBsZW4pCQlcCiAgIGRvIHsJCQkJCQlcCiAgICAgaWYgKHRh cmdldF9tdWx0aWJ5dGUpCQkJXAogICAgICAgKGMpID0gU1RSSU5HX0NIQVJfQU5EX0xFTkdU SCAocCwgbGVuKTsJXApAQCAtMjAxLDIzNSArMjMwLDY2IEBACiAJKGMpID0gUkVfQ0hBUl9U T19NVUxUSUJZVEUgKGMpOwkJXAogICAgICAgfQkJCQkJCVwKICAgIH0gd2hpbGUgKDApCi0K LSNlbHNlICAvKiBub3QgZW1hY3MgKi8KLQotLyogSWYgd2UgYXJlIG5vdCBsaW5raW5nIHdp dGggRW1hY3MgcHJvcGVyLAotICAgd2UgY2FuJ3QgdXNlIHRoZSByZWxvY2F0aW5nIGFsbG9j YXRvcgotICAgZXZlbiBpZiBjb25maWcuaCBzYXlzIHRoYXQgd2UgY2FuLiAgKi8KLSMgdW5k ZWYgUkVMX0FMTE9DCi0KLSMgaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLS8qIFdoZW4gdXNlZCBp biBFbWFjcydzIGxpYi1zcmMsIHdlIG5lZWQgeG1hbGxvYyBhbmQgeHJlYWxsb2MuICovCi0K LXN0YXRpYyBBVFRSSUJVVEVfTUFMTE9DIHZvaWQgKgoteG1hbGxvYyAoc2l6ZV90IHNpemUp Ci17Ci0gIHZvaWQgKnZhbCA9IG1hbGxvYyAoc2l6ZSk7Ci0gIGlmICghdmFsICYmIHNpemUp Ci0gICAgewotICAgICAgd3JpdGUgKFNUREVSUl9GSUxFTk8sICJ2aXJ0dWFsIG1lbW9yeSBl eGhhdXN0ZWRcbiIsIDI1KTsKLSAgICAgIGV4aXQgKDEpOwotICAgIH0KLSAgcmV0dXJuIHZh bDsKLX0KLQotc3RhdGljIHZvaWQgKgoteHJlYWxsb2MgKHZvaWQgKmJsb2NrLCBzaXplX3Qg c2l6ZSkKLXsKLSAgdm9pZCAqdmFsOwotICAvKiBXZSBtdXN0IGNhbGwgbWFsbG9jIGV4cGxp Y2l0bHkgd2hlbiBCTE9DSyBpcyAwLCBzaW5jZSBzb21lCi0gICAgIHJlYWxsb2NzIGRvbid0 IGRvIHRoaXMuICAqLwotICBpZiAoISBibG9jaykKLSAgICB2YWwgPSBtYWxsb2MgKHNpemUp OwotICBlbHNlCi0gICAgdmFsID0gcmVhbGxvYyAoYmxvY2ssIHNpemUpOwotICBpZiAoIXZh bCAmJiBzaXplKQotICAgIHsKLSAgICAgIHdyaXRlIChTVERFUlJfRklMRU5PLCAidmlydHVh bCBtZW1vcnkgZXhoYXVzdGVkXG4iLCAyNSk7Ci0gICAgICBleGl0ICgxKTsKLSAgICB9Ci0g IHJldHVybiB2YWw7Ci19Ci0KLSMgaWZkZWYgbWFsbG9jCi0jICB1bmRlZiBtYWxsb2MKLSMg ZW5kaWYKLSMgZGVmaW5lIG1hbGxvYyB4bWFsbG9jCi0jIGlmZGVmIHJlYWxsb2MKLSMgIHVu ZGVmIHJlYWxsb2MKLSMgZW5kaWYKLSMgZGVmaW5lIHJlYWxsb2MgeHJlYWxsb2MKLQotIyBp bmNsdWRlIDxzdGRib29sLmg+Ci0jIGluY2x1ZGUgPHN0cmluZy5oPgotCi0vKiBEZWZpbmUg dGhlIHN5bnRheCBzdHVmZiBmb3IgXDwsIFw+LCBldGMuICAqLwotCi0vKiBTd29yZCBtdXN0 IGJlIG5vbnplcm8gZm9yIHRoZSB3b3JkY2hhciBwYXR0ZXJuIGNvbW1hbmRzIGluIHJlX21h dGNoXzIuICAqLwotZW51bSBzeW50YXhjb2RlIHsgU3doaXRlc3BhY2UgPSAwLCBTd29yZCA9 IDEsIFNzeW1ib2wgPSAyIH07Ci0KLS8qIER1bW15IG1hY3JvcyBmb3Igbm9uLUVtYWNzIGVu dmlyb25tZW50cy4gICovCi0jIGRlZmluZSBNQVhfTVVMVElCWVRFX0xFTkdUSCAxCi0jIGRl ZmluZSBSRV9NVUxUSUJZVEVfUCh4KSAwCi0jIGRlZmluZSBSRV9UQVJHRVRfTVVMVElCWVRF X1AoeCkgMAotIyBkZWZpbmUgV09SRF9CT1VOREFSWV9QKGMxLCBjMikgKDApCi0jIGRlZmlu ZSBCWVRFU19CWV9DSEFSX0hFQUQocCkgKDEpCi0jIGRlZmluZSBQUkVWX0NIQVJfQk9VTkRB UlkocCwgbGltaXQpICgocCktLSkKLSMgZGVmaW5lIFNUUklOR19DSEFSKHApICgqKHApKQot IyBkZWZpbmUgUkVfU1RSSU5HX0NIQVIocCwgbXVsdGlieXRlKSBTVFJJTkdfQ0hBUiAocCkK LSMgZGVmaW5lIENIQVJfU1RSSU5HKGMsIHMpICgqKHMpID0gKGMpLCAxKQotIyBkZWZpbmUg U1RSSU5HX0NIQVJfQU5EX0xFTkdUSChwLCBhY3R1YWxfbGVuKSAoKGFjdHVhbF9sZW4pID0g MSwgKihwKSkKLSMgZGVmaW5lIFJFX1NUUklOR19DSEFSX0FORF9MRU5HVEgocCwgbGVuLCBt dWx0aWJ5dGUpIFNUUklOR19DSEFSX0FORF9MRU5HVEggKHAsIGxlbikKLSMgZGVmaW5lIFJF X0NIQVJfVE9fTVVMVElCWVRFKGMpIChjKQotIyBkZWZpbmUgUkVfQ0hBUl9UT19VTklCWVRF KGMpIChjKQotIyBkZWZpbmUgR0VUX0NIQVJfQkVGT1JFXzIoYywgcCwgc3RyMSwgZW5kMSwg c3RyMiwgZW5kMikgXAotICAoYyA9ICgocCkgPT0gKHN0cjIpID8gKigoZW5kMSkgLSAxKSA6 ICooKHApIC0gMSkpKQotIyBkZWZpbmUgR0VUX0NIQVJfQUZURVIoYywgcCwgbGVuKQlcCi0g IChjID0gKnAsIGxlbiA9IDEpCi0jIGRlZmluZSBDSEFSX0JZVEU4X1AoYykgKDApCi0jIGRl ZmluZSBDSEFSX0xFQURJTkdfQ09ERShjKSAoYykKLQotI2VuZGlmIC8qIG5vdCBlbWFjcyAq LwotCi0jaWZuZGVmIFJFX1RSQU5TTEFURQotIyBkZWZpbmUgUkVfVFJBTlNMQVRFKFRCTCwg QykgKCh1bnNpZ25lZCBjaGFyKShUQkwpW0NdKQotIyBkZWZpbmUgUkVfVFJBTlNMQVRFX1Ao VEJMKSAoVEJMKQotI2VuZGlmCiAMCi0vKiBHZXQgdGhlIGludGVyZmFjZSwgaW5jbHVkaW5n IHRoZSBzeW50YXggYml0cy4gICovCi0jaW5jbHVkZSAicmVnZXgtZW1hY3MuaCIKLQogLyog aXNhbHBoYSBldGMuIGFyZSB1c2VkIGZvciB0aGUgY2hhcmFjdGVyIGNsYXNzZXMuICAqLwog I2luY2x1ZGUgPGN0eXBlLmg+CiAKLSNpZmRlZiBlbWFjcwotCiAvKiAxIGlmIEMgaXMgYW4g QVNDSUkgY2hhcmFjdGVyLiAgKi8KLSMgZGVmaW5lIElTX1JFQUxfQVNDSUkoYykgKChjKSA8 IDAyMDApCisjZGVmaW5lIElTX1JFQUxfQVNDSUkoYykgKChjKSA8IDAyMDApCiAKIC8qIDEg aWYgQyBpcyBhIHVuaWJ5dGUgY2hhcmFjdGVyLiAgKi8KLSMgZGVmaW5lIElTVU5JQllURShj KSAoU0lOR0xFX0JZVEVfQ0hBUl9QICgoYykpKQorI2RlZmluZSBJU1VOSUJZVEUoYykgKFNJ TkdMRV9CWVRFX0NIQVJfUCAoKGMpKSkKIAogLyogVGhlIEVtYWNzIGRlZmluaXRpb25zIHNo b3VsZCBub3QgYmUgZGlyZWN0bHkgYWZmZWN0ZWQgYnkgbG9jYWxlcy4gICovCiAKIC8qIElu IEVtYWNzLCB0aGVzZSBhcmUgb25seSB1c2VkIGZvciBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXJz LiAgKi8KLSMgZGVmaW5lIElTRElHSVQoYykgKChjKSA+PSAnMCcgJiYgKGMpIDw9ICc5JykK LSMgZGVmaW5lIElTQ05UUkwoYykgKChjKSA8ICcgJykKLSMgZGVmaW5lIElTWERJR0lUKGMp ICgwIDw9IGNoYXJfaGV4ZGlnaXQgKGMpKQorI2RlZmluZSBJU0RJR0lUKGMpICgoYykgPj0g JzAnICYmIChjKSA8PSAnOScpCisjZGVmaW5lIElTQ05UUkwoYykgKChjKSA8ICcgJykKKyNk ZWZpbmUgSVNYRElHSVQoYykgKDAgPD0gY2hhcl9oZXhkaWdpdCAoYykpCiAKIC8qIFRoZSBy ZXN0IG11c3QgaGFuZGxlIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLiAgKi8KIAotIyBkZWZpbmUg SVNCTEFOSyhjKSAoSVNfUkVBTF9BU0NJSSAoYykgICAgICAgICAgICAgICAgICBcCisjZGVm aW5lIElTQkxBTksoYykgKElTX1JFQUxfQVNDSUkgKGMpCQkJXAogICAgICAgICAgICAgICAg ICAgICAgPyAoKGMpID09ICcgJyB8fCAoYykgPT0gJ1x0JykgICAgICBcCiAgICAgICAgICAg ICAgICAgICAgICA6IGJsYW5rcCAoYykpCiAKLSMgZGVmaW5lIElTR1JBUEgoYykgKFNJTkdM RV9CWVRFX0NIQVJfUCAoYykJCQkJXAorI2RlZmluZSBJU0dSQVBIKGMpIChTSU5HTEVfQllU RV9DSEFSX1AgKGMpCQkJCVwKIAkJICAgICA/IChjKSA+ICcgJyAmJiAhKChjKSA+PSAwMTc3 ICYmIChjKSA8PSAwMjQwKQlcCiAJCSAgICAgOiBncmFwaGljcCAoYykpCiAKLSMgZGVmaW5l IElTUFJJTlQoYykgKFNJTkdMRV9CWVRFX0NIQVJfUCAoYykJCQkJXAorI2RlZmluZSBJU1BS SU5UKGMpIChTSU5HTEVfQllURV9DSEFSX1AgKGMpCQkJCVwKIAkJICAgID8gKGMpID49ICcg JyAmJiAhKChjKSA+PSAwMTc3ICYmIChjKSA8PSAwMjM3KQlcCiAJCSAgICAgOiBwcmludGFi bGVwIChjKSkKIAotIyBkZWZpbmUgSVNBTE5VTShjKSAoSVNfUkVBTF9BU0NJSSAoYykJCQlc CisjZGVmaW5lIElTQUxOVU0oYykgKElTX1JFQUxfQVNDSUkgKGMpCQkJXAogCQkgICAgPyAo KChjKSA+PSAnYScgJiYgKGMpIDw9ICd6JykJXAogCQkgICAgICAgfHwgKChjKSA+PSAnQScg JiYgKGMpIDw9ICdaJykJXAogCQkgICAgICAgfHwgKChjKSA+PSAnMCcgJiYgKGMpIDw9ICc5 JykpCVwKIAkJICAgIDogYWxwaGFudW1lcmljcCAoYykpCiAKLSMgZGVmaW5lIElTQUxQSEEo YykgKElTX1JFQUxfQVNDSUkgKGMpCQkJXAorI2RlZmluZSBJU0FMUEhBKGMpIChJU19SRUFM X0FTQ0lJIChjKQkJCVwKIAkJICAgID8gKCgoYykgPj0gJ2EnICYmIChjKSA8PSAneicpCVwK IAkJICAgICAgIHx8ICgoYykgPj0gJ0EnICYmIChjKSA8PSAnWicpKQlcCiAJCSAgICA6IGFs cGhhYmV0aWNwIChjKSkKIAotIyBkZWZpbmUgSVNMT1dFUihjKSBsb3dlcmNhc2VwIChjKQor I2RlZmluZSBJU0xPV0VSKGMpIGxvd2VyY2FzZXAgKGMpCiAKLSMgZGVmaW5lIElTUFVOQ1Qo YykgKElTX1JFQUxfQVNDSUkgKGMpCQkJCVwKKyNkZWZpbmUgSVNQVU5DVChjKSAoSVNfUkVB TF9BU0NJSSAoYykJCQkJXAogCQkgICAgPyAoKGMpID4gJyAnICYmIChjKSA8IDAxNzcJCQlc CiAJCSAgICAgICAmJiAhKCgoYykgPj0gJ2EnICYmIChjKSA8PSAneicpCQlcCiAJCSAgICAg ICAgICAgIHx8ICgoYykgPj0gJ0EnICYmIChjKSA8PSAnWicpCVwKIAkJICAgICAgICAgICAg fHwgKChjKSA+PSAnMCcgJiYgKGMpIDw9ICc5JykpKQlcCiAJCSAgICA6IFNZTlRBWCAoYykg IT0gU3dvcmQpCiAKLSMgZGVmaW5lIElTU1BBQ0UoYykgKFNZTlRBWCAoYykgPT0gU3doaXRl c3BhY2UpCi0KLSMgZGVmaW5lIElTVVBQRVIoYykgdXBwZXJjYXNlcCAoYykKLQotIyBkZWZp bmUgSVNXT1JEKGMpIChTWU5UQVggKGMpID09IFN3b3JkKQotCi0jZWxzZSAvKiBub3QgZW1h Y3MgKi8KLQotLyogMSBpZiBDIGlzIGFuIEFTQ0lJIGNoYXJhY3Rlci4gICovCi0jIGRlZmlu ZSBJU19SRUFMX0FTQ0lJKGMpICgoYykgPCAwMjAwKQotCi0vKiBUaGlzIGRpc3RpbmN0aW9u IGlzIG5vdCBtZWFuaW5nZnVsLCBleGNlcHQgaW4gRW1hY3MuICAqLwotIyBkZWZpbmUgSVNV TklCWVRFKGMpIDEKLQotIyBpZmRlZiBpc2JsYW5rCi0jICBkZWZpbmUgSVNCTEFOSyhjKSBp c2JsYW5rIChjKQotIyBlbHNlCi0jICBkZWZpbmUgSVNCTEFOSyhjKSAoKGMpID09ICcgJyB8 fCAoYykgPT0gJ1x0JykKLSMgZW5kaWYKLSMgaWZkZWYgaXNncmFwaAotIyAgZGVmaW5lIElT R1JBUEgoYykgaXNncmFwaCAoYykKLSMgZWxzZQotIyAgZGVmaW5lIElTR1JBUEgoYykgKGlz cHJpbnQgKGMpICYmICFpc3NwYWNlIChjKSkKLSMgZW5kaWYKLQotLyogU29sYXJpcyBkZWZp bmVzIElTUFJJTlQgc28gd2UgbXVzdCB1bmRlZmluZSBpdCBmaXJzdC4gICovCi0jIHVuZGVm IElTUFJJTlQKLSMgZGVmaW5lIElTUFJJTlQoYykgaXNwcmludCAoYykKLSMgZGVmaW5lIElT RElHSVQoYykgaXNkaWdpdCAoYykKLSMgZGVmaW5lIElTQUxOVU0oYykgaXNhbG51bSAoYykK LSMgZGVmaW5lIElTQUxQSEEoYykgaXNhbHBoYSAoYykKLSMgZGVmaW5lIElTQ05UUkwoYykg aXNjbnRybCAoYykKLSMgZGVmaW5lIElTTE9XRVIoYykgaXNsb3dlciAoYykKLSMgZGVmaW5l IElTUFVOQ1QoYykgaXNwdW5jdCAoYykKLSMgZGVmaW5lIElTU1BBQ0UoYykgaXNzcGFjZSAo YykKLSMgZGVmaW5lIElTVVBQRVIoYykgaXN1cHBlciAoYykKLSMgZGVmaW5lIElTWERJR0lU KGMpIGlzeGRpZ2l0IChjKQotCi0jIGRlZmluZSBJU1dPUkQoYykgSVNBTFBIQSAoYykKLQot IyBpZmRlZiBfdG9sb3dlcgotIyAgZGVmaW5lIFRPTE9XRVIoYykgX3RvbG93ZXIgKGMpCi0j IGVsc2UKLSMgIGRlZmluZSBUT0xPV0VSKGMpIHRvbG93ZXIgKGMpCi0jIGVuZGlmCi0KLS8q IEhvdyBtYW55IGNoYXJhY3RlcnMgaW4gdGhlIGNoYXJhY3RlciBzZXQuICAqLwotIyBkZWZp bmUgQ0hBUl9TRVRfU0laRSAyNTYKLQotIyBpZmRlZiBTWU5UQVhfVEFCTEUKLQotZXh0ZXJu IGNoYXIgKnJlX3N5bnRheF90YWJsZTsKLQotIyBlbHNlIC8qIG5vdCBTWU5UQVhfVEFCTEUg Ki8KLQotc3RhdGljIGNoYXIgcmVfc3ludGF4X3RhYmxlW0NIQVJfU0VUX1NJWkVdOwotCi1z dGF0aWMgdm9pZAotaW5pdF9zeW50YXhfb25jZSAodm9pZCkKLXsKLSAgIHJlZ2lzdGVyIGlu dCBjOwotICAgc3RhdGljIGludCBkb25lID0gMDsKLQotICAgaWYgKGRvbmUpCi0gICAgIHJl dHVybjsKLQotICAgbWVtc2V0IChyZV9zeW50YXhfdGFibGUsIDAsIHNpemVvZiByZV9zeW50 YXhfdGFibGUpOwotCi0gICBmb3IgKGMgPSAwOyBjIDwgQ0hBUl9TRVRfU0laRTsgKytjKQot ICAgICBpZiAoSVNBTE5VTSAoYykpCi0JcmVfc3ludGF4X3RhYmxlW2NdID0gU3dvcmQ7Cisj ZGVmaW5lIElTU1BBQ0UoYykgKFNZTlRBWCAoYykgPT0gU3doaXRlc3BhY2UpCiAKLSAgIHJl X3N5bnRheF90YWJsZVsnXyddID0gU3N5bWJvbDsKKyNkZWZpbmUgSVNVUFBFUihjKSB1cHBl cmNhc2VwIChjKQogCi0gICBkb25lID0gMTsKLX0KLQotIyBlbmRpZiAvKiBub3QgU1lOVEFY X1RBQkxFICovCi0KLSMgZGVmaW5lIFNZTlRBWChjKSByZV9zeW50YXhfdGFibGVbKGMpXQot Ci0jZW5kaWYgLyogbm90IGVtYWNzICovCisjZGVmaW5lIElTV09SRChjKSAoU1lOVEFYIChj KSA9PSBTd29yZCkKIAwKICNkZWZpbmUgU0lHTl9FWFRFTkRfQ0hBUihjKSAoKHNpZ25lZCBj aGFyKSAoYykpCiAMCi0vKiBTaG91bGQgd2UgdXNlIG1hbGxvYyBvciBhbGxvY2E/ICBJZiBS RUdFWF9NQUxMT0MgaXMgbm90IGRlZmluZWQsIHdlCi0gICB1c2UgYGFsbG9jYScgaW5zdGVh ZCBvZiBgbWFsbG9jJy4gIFRoaXMgaXMgYmVjYXVzZSB1c2luZyBtYWxsb2MgaW4KKy8qIFVz ZSBhbGxvY2EgaW5zdGVhZCBvZiBtYWxsb2MuICBUaGlzIGlzIGJlY2F1c2UgdXNpbmcgbWFs bG9jIGluCiAgICByZV9zZWFyY2gqIG9yIHJlX21hdGNoKiBjb3VsZCBjYXVzZSBtZW1vcnkg bGVha3Mgd2hlbiBDLWcgaXMgdXNlZAogICAgaW4gRW1hY3MgKG5vdGUgdGhhdCBTQUZFX0FM TE9DQSBjb3VsZCBhbHNvIGNhbGwgbWFsbG9jLCBidXQgZG9lcyBzbwogICAgdmlhIGByZWNv cmRfeG1hbGxvYycgd2hpY2ggdXNlcyBgdW53aW5kX3Byb3RlY3QnIHRvIGVuc3VyZSB0aGUK QEAgLTQ0MSw2NCArMzAxLDE3IEBAIGluaXRfc3ludGF4X29uY2UgKHZvaWQpCiAgICBub3Qg ZnVuY3Rpb25zIC0tIGBhbGxvY2EnLWFsbG9jYXRlZCBzcGFjZSBkaXNhcHBlYXJzIGF0IHRo ZSBlbmQgb2YgdGhlCiAgICBmdW5jdGlvbiBpdCBpcyBjYWxsZWQgaW4uICAqLwogCi0jaWZk ZWYgUkVHRVhfTUFMTE9DCi0KLSMgZGVmaW5lIFJFR0VYX0FMTE9DQVRFIG1hbGxvYwotIyBk ZWZpbmUgUkVHRVhfUkVBTExPQ0FURShzb3VyY2UsIG9zaXplLCBuc2l6ZSkgcmVhbGxvYyAo c291cmNlLCBuc2l6ZSkKLSMgZGVmaW5lIFJFR0VYX0ZSRUUgZnJlZQotCi0jZWxzZSAvKiBu b3QgUkVHRVhfTUFMTE9DICAqLwotCi0jIGlmZGVmIGVtYWNzCiAvKiBUaGlzIG1heSBiZSBh ZGp1c3RlZCBpbiBtYWluKCksIGlmIHRoZSBzdGFjayBpcyBzdWNjZXNzZnVsbHkgZ3Jvd24u ICAqLwogcHRyZGlmZl90IGVtYWNzX3JlX3NhZmVfYWxsb2NhID0gTUFYX0FMTE9DQTsKIC8q IExpa2UgVVNFX1NBRkVfQUxMT0NBLCBidXQgdXNlIGVtYWNzX3JlX3NhZmVfYWxsb2NhLiAg Ki8KLSMgIGRlZmluZSBSRUdFWF9VU0VfU0FGRV9BTExPQ0EgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotICBwdHJkaWZmX3Qgc2FfYXZhaWwgPSBlbWFjc19y ZV9zYWZlX2FsbG9jYTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHB0cmRpZmZf dCBzYV9jb3VudCA9IFNQRUNQRExfSU5ERVggKCkKLQotIyAgZGVmaW5lIFJFR0VYX1NBRkVf RlJFRSgpIFNBRkVfRlJFRSAoKQotIyAgZGVmaW5lIFJFR0VYX0FMTE9DQVRFIFNBRkVfQUxM T0NBCi0jIGVsc2UKLSMgIGluY2x1ZGUgPGFsbG9jYS5oPgotIyAgZGVmaW5lIFJFR0VYX0FM TE9DQVRFIGFsbG9jYQotIyBlbmRpZgorI2RlZmluZSBSRUdFWF9VU0VfU0FGRV9BTExPQ0EJ CQkJCSAgICAgICBcCisgIFVTRV9TQUZFX0FMTE9DQTsgc2FfYXZhaWwgPSBlbWFjc19yZV9z YWZlX2FsbG9jYQogCiAvKiBBc3N1bWVzIGEgYGNoYXIgKmRlc3RpbmF0aW9uJyB2YXJpYWJs ZS4gICovCi0jIGRlZmluZSBSRUdFWF9SRUFMTE9DQVRFKHNvdXJjZSwgb3NpemUsIG5zaXpl KQkJCQlcCi0gIChkZXN0aW5hdGlvbiA9IFJFR0VYX0FMTE9DQVRFIChuc2l6ZSksCQkJCVwK KyNkZWZpbmUgUkVHRVhfUkVBTExPQ0FURShzb3VyY2UsIG9zaXplLCBuc2l6ZSkJCQkJXAor ICAoZGVzdGluYXRpb24gPSBTQUZFX0FMTE9DQSAobnNpemUpLAkJCQkJXAogICAgbWVtY3B5 IChkZXN0aW5hdGlvbiwgc291cmNlLCBvc2l6ZSkpCiAKLS8qIE5vIG5lZWQgdG8gZG8gYW55 dGhpbmcgdG8gZnJlZSwgYWZ0ZXIgYWxsb2NhLiAgKi8KLSMgZGVmaW5lIFJFR0VYX0ZSRUUo YXJnKSAoKHZvaWQpMCkgLyogRG8gbm90aGluZyEgIEJ1dCBpbmhpYml0IGdjYyB3YXJuaW5n LiAgKi8KLQotI2VuZGlmIC8qIG5vdCBSRUdFWF9NQUxMT0MgKi8KLQotI2lmbmRlZiBSRUdF WF9VU0VfU0FGRV9BTExPQ0EKLSMgZGVmaW5lIFJFR0VYX1VTRV9TQUZFX0FMTE9DQSAoKHZv aWQpIDApCi0jIGRlZmluZSBSRUdFWF9TQUZFX0ZSRUUoKSAoKHZvaWQpIDApCi0jZW5kaWYK LQotLyogRGVmaW5lIGhvdyB0byBhbGxvY2F0ZSB0aGUgZmFpbHVyZSBzdGFjay4gICovCi0K LSNpZiBkZWZpbmVkIFJFTF9BTExPQyAmJiBkZWZpbmVkIFJFR0VYX01BTExPQwotCi0jIGRl ZmluZSBSRUdFWF9BTExPQ0FURV9TVEFDSyhzaXplKQkJCQlcCi0gIHJfYWxsb2MgKCZmYWls dXJlX3N0YWNrX3B0ciwgKHNpemUpKQotIyBkZWZpbmUgUkVHRVhfUkVBTExPQ0FURV9TVEFD Syhzb3VyY2UsIG9zaXplLCBuc2l6ZSkJCVwKLSAgcl9yZV9hbGxvYyAoJmZhaWx1cmVfc3Rh Y2tfcHRyLCAobnNpemUpKQotIyBkZWZpbmUgUkVHRVhfRlJFRV9TVEFDSyhwdHIpCQkJCQlc Ci0gIHJfYWxsb2NfZnJlZSAoJmZhaWx1cmVfc3RhY2tfcHRyKQotCi0jZWxzZSAvKiBub3Qg dXNpbmcgcmVsb2NhdGluZyBhbGxvY2F0b3IgKi8KLQotIyBkZWZpbmUgUkVHRVhfQUxMT0NB VEVfU1RBQ0soc2l6ZSkgUkVHRVhfQUxMT0NBVEUgKHNpemUpCi0jIGRlZmluZSBSRUdFWF9S RUFMTE9DQVRFX1NUQUNLKHNvdXJjZSwgbywgbikgUkVHRVhfUkVBTExPQ0FURSAoc291cmNl LCBvLCBuKQotIyBkZWZpbmUgUkVHRVhfRlJFRV9TVEFDSyhwdHIpIFJFR0VYX0ZSRUUgKHB0 cikKLQotI2VuZGlmIC8qIG5vdCB1c2luZyByZWxvY2F0aW5nIGFsbG9jYXRvciAqLwotCi0K IC8qIFRydWUgaWYgYHNpemUxJyBpcyBub24tTlVMTCBhbmQgUFRSIGlzIHBvaW50aW5nIGFu eXdoZXJlIGluc2lkZQogICAgYHN0cmluZzEnIG9yIGp1c3QgcGFzdCBpdHMgZW5kLiAgVGhp cyB3b3JrcyBpZiBQVFIgaXMgTlVMTCwgd2hpY2ggaXMKICAgIGEgZ29vZCB0aGluZy4gICov CkBAIC01MDYsMzAgKzMxOSwyMCBAQCBwdHJkaWZmX3QgZW1hY3NfcmVfc2FmZV9hbGxvY2Eg PSBNQVhfQUxMT0NBOwogICAoc2l6ZTEgJiYgc3RyaW5nMSA8PSAocHRyKSAmJiAocHRyKSA8 PSBzdHJpbmcxICsgc2l6ZTEpCiAKIC8qIChSZSlBbGxvY2F0ZSBOIGl0ZW1zIG9mIHR5cGUg VCB1c2luZyBtYWxsb2MsIG9yIGZhaWwuICAqLwotI2RlZmluZSBUQUxMT0MobiwgdCkgKCh0 ICopIG1hbGxvYyAoKG4pICogc2l6ZW9mICh0KSkpCi0jZGVmaW5lIFJFVEFMTE9DKGFkZHIs IG4sIHQpICgoYWRkcikgPSAodCAqKSByZWFsbG9jIChhZGRyLCAobikgKiBzaXplb2YgKHQp KSkKLSNkZWZpbmUgUkVHRVhfVEFMTE9DKG4sIHQpICgodCAqKSBSRUdFWF9BTExPQ0FURSAo KG4pICogc2l6ZW9mICh0KSkpCisjZGVmaW5lIFRBTExPQyhuLCB0KSAoKHQgKikgeG1hbGxv YyAoKG4pICogc2l6ZW9mICh0KSkpCisjZGVmaW5lIFJFVEFMTE9DKGFkZHIsIG4sIHQpICgo YWRkcikgPSAodCAqKSB4cmVhbGxvYyAoYWRkciwgKG4pICogc2l6ZW9mICh0KSkpCiAKICNk ZWZpbmUgQllURVdJRFRIIDggLyogSW4gYml0cy4gICovCiAKLSNpZm5kZWYgZW1hY3MKLSMg dW5kZWYgbWF4Ci0jIHVuZGVmIG1pbgotIyBkZWZpbmUgbWF4KGEsIGIpICgoYSkgPiAoYikg PyAoYSkgOiAoYikpCi0jIGRlZmluZSBtaW4oYSwgYikgKChhKSA8IChiKSA/IChhKSA6IChi KSkKLSNlbmRpZgotCiAvKiBUeXBlIG9mIHNvdXJjZS1wYXR0ZXJuIGFuZCBzdHJpbmcgY2hh cnMuICAqLwogdHlwZWRlZiBjb25zdCB1bnNpZ25lZCBjaGFyIHJlX2NoYXI7CiAKLXR5cGVk ZWYgY2hhciBib29sZWFuOwotCi1zdGF0aWMgcmVnb2ZmX3QgcmVfbWF0Y2hfMl9pbnRlcm5h bCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorc3RhdGljIHB0cmRpZmZfdCBy ZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCiAJ CQkJICAgICByZV9jaGFyICpzdHJpbmcxLCBzaXplX3Qgc2l6ZTEsCiAJCQkJICAgICByZV9j aGFyICpzdHJpbmcyLCBzaXplX3Qgc2l6ZTIsCi0JCQkJICAgICBzc2l6ZV90IHBvcywKKwkJ CQkgICAgIHB0cmRpZmZfdCBwb3MsCiAJCQkJICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpy ZWdzLAotCQkJCSAgICAgc3NpemVfdCBzdG9wKTsKKwkJCQkgICAgIHB0cmRpZmZfdCBzdG9w KTsKIAwKIC8qIFRoZXNlIGFyZSB0aGUgY29tbWFuZCBjb2RlcyB0aGF0IGFwcGVhciBpbiBj b21waWxlZCByZWd1bGFyCiAgICBleHByZXNzaW9ucy4gIFNvbWUgb3Bjb2RlcyBhcmUgZm9s bG93ZWQgYnkgYXJndW1lbnQgYnl0ZXMuICBBCkBAIC01OTEsOCArMzk0LDcgQEAgdHlwZWRl ZiBlbnVtCiAJLyogRmFpbCB1bmxlc3MgYXQgZW5kIG9mIGxpbmUuICAqLwogICBlbmRsaW5l LAogCi0JLyogU3VjY2VlZHMgaWYgYXQgYmVnaW5uaW5nIG9mIGJ1ZmZlciAoaWYgZW1hY3Mp IG9yIGF0IGJlZ2lubmluZwotCSAgIG9mIHN0cmluZyB0byBiZSBtYXRjaGVkIChpZiBub3Qp LiAgKi8KKwkvKiBTdWNjZWVkcyBpZiBhdCBiZWdpbm5pbmcgb2YgYnVmZmVyLiAgKi8KICAg YmVnYnVmLAogCiAJLyogQW5hbG9nb3VzbHksIGZvciBlbmQgb2YgYnVmZmVyL3N0cmluZy4g ICovCkBAIC02NTcsMTAgKzQ1OSw5IEBAIHR5cGVkZWYgZW51bQogICBzeW50YXhzcGVjLAog CiAJLyogTWF0Y2hlcyBhbnkgY2hhcmFjdGVyIHdob3NlIHN5bnRheCBpcyBub3QgdGhhdCBz cGVjaWZpZWQuICAqLwotICBub3RzeW50YXhzcGVjCisgIG5vdHN5bnRheHNwZWMsCiAKLSNp ZmRlZiBlbWFjcwotICAsIGF0X2RvdCwJLyogU3VjY2VlZHMgaWYgYXQgcG9pbnQuICAqLwor ICBhdF9kb3QsCS8qIFN1Y2NlZWRzIGlmIGF0IHBvaW50LiAgKi8KIAogICAvKiBNYXRjaGVz IGFueSBjaGFyYWN0ZXIgd2hvc2UgY2F0ZWdvcnktc2V0IGNvbnRhaW5zIHRoZSBzcGVjaWZp ZWQKICAgICAgY2F0ZWdvcnkuICBUaGUgb3BlcmF0b3IgaXMgZm9sbG93ZWQgYnkgYSBieXRl IHdoaWNoIGNvbnRhaW5zIGEKQEAgLTY3MSw3ICs0NzIsNiBAQCB0eXBlZGVmIGVudW0KICAg ICAgc3BlY2lmaWVkIGNhdGVnb3J5LiAgVGhlIG9wZXJhdG9yIGlzIGZvbGxvd2VkIGJ5IGEg Ynl0ZSB3aGljaAogICAgICBjb250YWlucyB0aGUgY2F0ZWdvcnkgY29kZSAobW5lbW9uaWMg QVNDSUkgY2hhcmFjdGVyKS4gICovCiAgIG5vdGNhdGVnb3J5c3BlYwotI2VuZGlmIC8qIGVt YWNzICovCiB9IHJlX29wY29kZV90OwogDAogLyogQ29tbW9uIG9wZXJhdGlvbnMgb24gdGhl IGNvbXBpbGVkIHBhdHRlcm4uICAqLwpAQCAtNzU5LDEyICs1NTksMTAgQEAgZXh0cmFjdF9u dW1iZXJfYW5kX2luY3IgKHJlX2NoYXIgKipzb3VyY2UpCiAgICBhbmQgdGhlIDIgYnl0ZXMg b2YgZmxhZ3MgYXQgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0YWJsZS4gICovCiAjZGVmaW5l IENIQVJTRVRfUkFOR0VfVEFCTEUocCkgKCYocClbNCArIENIQVJTRVRfQklUTUFQX1NJWkUg KHApXSkKIAotI2lmZGVmIGVtYWNzCiAvKiBFeHRyYWN0IHRoZSBiaXQgZmxhZ3MgdGhhdCBz dGFydCBhIHJhbmdlIHRhYmxlLiAgKi8KICNkZWZpbmUgQ0hBUlNFVF9SQU5HRV9UQUJMRV9C SVRTKHApCQlcCiAgICgocClbMiArIENIQVJTRVRfQklUTUFQX1NJWkUgKHApXQkJXAogICAg KyAocClbMyArIENIQVJTRVRfQklUTUFQX1NJWkUgKHApXSAqIDB4MTAwKQotI2VuZGlmCiAK IC8qIFJldHVybiB0aGUgYWRkcmVzcyBvZiBlbmQgb2YgUkFOR0VfVEFCTEUuICBDT1VOVCBp cyBudW1iZXIgb2YKICAgIHJhbmdlcyAod2hpY2ggaXMgYSBwYWlyIG9mIChzdGFydCwgZW5k KSkgaW4gdGhlIFJBTkdFX1RBQkxFLiAgYCogMicKQEAgLTc3Myw1MDMgKzU3MSw5MCBAQCBl eHRyYWN0X251bWJlcl9hbmRfaW5jciAocmVfY2hhciAqKnNvdXJjZSkKICNkZWZpbmUgQ0hB UlNFVF9SQU5HRV9UQUJMRV9FTkQocmFuZ2VfdGFibGUsIGNvdW50KQlcCiAgICgocmFuZ2Vf dGFibGUpICsgKGNvdW50KSAqIDIgKiAzKQogDAotLyogSWYgREVCVUcgaXMgZGVmaW5lZCwg UmVnZXggcHJpbnRzIG1hbnkgdm9sdW1pbm91cyBtZXNzYWdlcyBhYm91dCB3aGF0Ci0gICBp dCBpcyBkb2luZyAoaWYgdGhlIHZhcmlhYmxlIGBkZWJ1ZycgaXMgbm9uemVybykuICBJZiBs aW5rZWQgd2l0aCB0aGUKLSAgIG1haW4gcHJvZ3JhbSBpbiBgaXJlZ2V4LmMnLCB5b3UgY2Fu IGVudGVyIHBhdHRlcm5zIGFuZCBzdHJpbmdzCi0gICBpbnRlcmFjdGl2ZWx5LiAgQW5kIGlm IGxpbmtlZCB3aXRoIHRoZSBtYWluIHByb2dyYW0gaW4gYG1haW4uYycgYW5kCi0gICB0aGUg b3RoZXIgdGVzdCBmaWxlcywgeW91IGNhbiBydW4gdGhlIGFscmVhZHktd3JpdHRlbiB0ZXN0 cy4gICovCi0KLSNpZmRlZiBERUJVRwotCi0vKiBXZSB1c2Ugc3RhbmRhcmQgSS9PIGZvciBk ZWJ1Z2dpbmcuICAqLwotIyBpbmNsdWRlIDxzdGRpby5oPgotCi0vKiBJdCBpcyB1c2VmdWwg dG8gdGVzdCB0aGluZ3MgdGhhdCBgYG11c3QnJyBiZSB0cnVlIHdoZW4gZGVidWdnaW5nLiAg Ki8KLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0KLXN0YXRpYyBpbnQgZGVidWcgPSAtMTAwMDAw OwotCi0jIGRlZmluZSBERUJVR19TVEFURU1FTlQoZSkgZQotIyBkZWZpbmUgREVCVUdfUFJJ TlQoLi4uKSBpZiAoZGVidWcgPiAwKSBwcmludGYgKF9fVkFfQVJHU19fKQotIyBkZWZpbmUg REVCVUdfQ09NUElMRVNfQVJHVU1FTlRTCi0jIGRlZmluZSBERUJVR19QUklOVF9DT01QSUxF RF9QQVRURVJOKHAsIHMsIGUpCQkJCVwKLSAgaWYgKGRlYnVnID4gMCkgcHJpbnRfcGFydGlh bF9jb21waWxlZF9wYXR0ZXJuIChzLCBlKQotIyBkZWZpbmUgREVCVUdfUFJJTlRfRE9VQkxF X1NUUklORyh3LCBzMSwgc3oxLCBzMiwgc3oyKQkJCVwKLSAgaWYgKGRlYnVnID4gMCkgcHJp bnRfZG91YmxlX3N0cmluZyAodywgczEsIHN6MSwgczIsIHN6MikKLQotCi0vKiBQcmludCB0 aGUgZmFzdG1hcCBpbiBodW1hbi1yZWFkYWJsZSBmb3JtLiAgKi8KLQotc3RhdGljIHZvaWQK LXByaW50X2Zhc3RtYXAgKGNoYXIgKmZhc3RtYXApCi17Ci0gIHVuc2lnbmVkIHdhc19hX3Jh bmdlID0gMDsKLSAgdW5zaWduZWQgaSA9IDA7Ci0KLSAgd2hpbGUgKGkgPCAoMSA8PCBCWVRF V0lEVEgpKQotICAgIHsKLSAgICAgIGlmIChmYXN0bWFwW2krK10pCi0JewotCSAgd2FzX2Ff cmFuZ2UgPSAwOwotCSAgcHV0Y2hhciAoaSAtIDEpOwotCSAgd2hpbGUgKGkgPCAoMSA8PCBC WVRFV0lEVEgpICAmJiAgZmFzdG1hcFtpXSkKLQkgICAgewotCSAgICAgIHdhc19hX3Jhbmdl ID0gMTsKLQkgICAgICBpKys7Ci0JICAgIH0KLQkgIGlmICh3YXNfYV9yYW5nZSkKLQkgICAg ewotCSAgICAgIHByaW50ZiAoIi0iKTsKLQkgICAgICBwdXRjaGFyIChpIC0gMSk7Ci0JICAg IH0KLQl9Ci0gICAgfQotICBwdXRjaGFyICgnXG4nKTsKLX0KLQotCi0vKiBQcmludCBhIGNv bXBpbGVkIHBhdHRlcm4gc3RyaW5nIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0sIHN0YXJ0aW5n IGF0Ci0gICB0aGUgU1RBUlQgcG9pbnRlciBpbnRvIGl0IGFuZCBlbmRpbmcganVzdCBiZWZv cmUgdGhlIHBvaW50ZXIgRU5ELiAgKi8KLQotc3RhdGljIHZvaWQKLXByaW50X3BhcnRpYWxf Y29tcGlsZWRfcGF0dGVybiAocmVfY2hhciAqc3RhcnQsIHJlX2NoYXIgKmVuZCkKLXsKLSAg aW50IG1jbnQsIG1jbnQyOwotICByZV9jaGFyICpwID0gc3RhcnQ7Ci0gIHJlX2NoYXIgKnBl bmQgPSBlbmQ7Ci0KLSAgaWYgKHN0YXJ0ID09IE5VTEwpCi0gICAgewotICAgICAgZnByaW50 ZiAoc3RkZXJyLCAiKG51bGwpXG4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgLyog TG9vcCBvdmVyIHBhdHRlcm4gY29tbWFuZHMuICAqLwotICB3aGlsZSAocCA8IHBlbmQpCi0g ICAgewotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXRkOlx0IiwgcCAtIHN0YXJ0KTsKLQot ICAgICAgc3dpdGNoICgocmVfb3Bjb2RlX3QpICpwKyspCi0JewotCWNhc2Ugbm9fb3A6Ci0J ICBmcHJpbnRmIChzdGRlcnIsICIvbm9fb3AiKTsKLQkgIGJyZWFrOwotCi0JY2FzZSBzdWNj ZWVkOgotCSAgZnByaW50ZiAoc3RkZXJyLCAiL3N1Y2NlZWQiKTsKLQkgIGJyZWFrOwotCi0J Y2FzZSBleGFjdG46Ci0JICBtY250ID0gKnArKzsKLQkgIGZwcmludGYgKHN0ZGVyciwgIi9l eGFjdG4vJWQiLCBtY250KTsKLQkgIGRvCi0JICAgIHsKLQkgICAgICBmcHJpbnRmIChzdGRl cnIsICIvJWMiLCAqcCsrKTsKLQkgICAgfQotCSAgd2hpbGUgKC0tbWNudCk7Ci0JICBicmVh azsKLQotCWNhc2Ugc3RhcnRfbWVtb3J5OgotCSAgZnByaW50ZiAoc3RkZXJyLCAiL3N0YXJ0 X21lbW9yeS8lZCIsICpwKyspOwotCSAgYnJlYWs7Ci0KLQljYXNlIHN0b3BfbWVtb3J5Ogot CSAgZnByaW50ZiAoc3RkZXJyLCAiL3N0b3BfbWVtb3J5LyVkIiwgKnArKyk7Ci0JICBicmVh azsKLQotCWNhc2UgZHVwbGljYXRlOgotCSAgZnByaW50ZiAoc3RkZXJyLCAiL2R1cGxpY2F0 ZS8lZCIsICpwKyspOwotCSAgYnJlYWs7Ci0KLQljYXNlIGFueWNoYXI6Ci0JICBmcHJpbnRm IChzdGRlcnIsICIvYW55Y2hhciIpOwotCSAgYnJlYWs7Ci0KLQljYXNlIGNoYXJzZXQ6Ci0J Y2FzZSBjaGFyc2V0X25vdDoKLQkgIHsKLQkgICAgcmVnaXN0ZXIgaW50IGMsIGxhc3QgPSAt MTAwOwotCSAgICByZWdpc3RlciBpbnQgaW5fcmFuZ2UgPSAwOwotCSAgICBpbnQgbGVuZ3Ro ID0gQ0hBUlNFVF9CSVRNQVBfU0laRSAocCAtIDEpOwotCSAgICBpbnQgaGFzX3JhbmdlX3Rh YmxlID0gQ0hBUlNFVF9SQU5HRV9UQUJMRV9FWElTVFNfUCAocCAtIDEpOwotCi0JICAgIGZw cmludGYgKHN0ZGVyciwgIi9jaGFyc2V0IFslcyIsCi0JCSAgICAgKHJlX29wY29kZV90KSAq KHAgLSAxKSA9PSBjaGFyc2V0X25vdCA/ICJeIiA6ICIiKTsKLQotCSAgICBpZiAocCArICpw ID49IHBlbmQpCi0JICAgICAgZnByaW50ZiAoc3RkZXJyLCAiICFleHRlbmRzIHBhc3QgZW5k IG9mIHBhdHRlcm4hICIpOwotCi0JICAgIGZvciAoYyA9IDA7IGMgPCAyNTY7IGMrKykKLQkg ICAgICBpZiAoYyAvIDggPCBsZW5ndGgKLQkJICAmJiAocFsxICsgKGMvOCldICYgKDEgPDwg KGMgJSA4KSkpKQotCQl7Ci0JCSAgLyogQXJlIHdlIHN0YXJ0aW5nIGEgcmFuZ2U/ICAqLwot CQkgIGlmIChsYXN0ICsgMSA9PSBjICYmICEgaW5fcmFuZ2UpCi0JCSAgICB7Ci0JCSAgICAg IGZwcmludGYgKHN0ZGVyciwgIi0iKTsKLQkJICAgICAgaW5fcmFuZ2UgPSAxOwotCQkgICAg fQotCQkgIC8qIEhhdmUgd2UgYnJva2VuIGEgcmFuZ2U/ICAqLwotCQkgIGVsc2UgaWYgKGxh c3QgKyAxICE9IGMgJiYgaW5fcmFuZ2UpCi0JCSAgICB7Ci0JCSAgICAgIGZwcmludGYgKHN0 ZGVyciwgIiVjIiwgbGFzdCk7Ci0JCSAgICAgIGluX3JhbmdlID0gMDsKLQkJICAgIH0KLQot CQkgIGlmICghIGluX3JhbmdlKQotCQkgICAgZnByaW50ZiAoc3RkZXJyLCAiJWMiLCBjKTsK LQotCQkgIGxhc3QgPSBjOwotCSAgICAgIH0KLQotCSAgICBpZiAoaW5fcmFuZ2UpCi0JICAg ICAgZnByaW50ZiAoc3RkZXJyLCAiJWMiLCBsYXN0KTsKLQotCSAgICBmcHJpbnRmIChzdGRl cnIsICJdIik7Ci0KLQkgICAgcCArPSAxICsgbGVuZ3RoOwotCi0JICAgIGlmIChoYXNfcmFu Z2VfdGFibGUpCi0JICAgICAgewotCQlpbnQgY291bnQ7Ci0JCWZwcmludGYgKHN0ZGVyciwg Imhhcy1yYW5nZS10YWJsZSIpOwotCi0JCS8qID8/PyBTaG91bGQgcHJpbnQgdGhlIHJhbmdl IHRhYmxlOyBmb3Igbm93LCBqdXN0IHNraXAgaXQuICAqLwotCQlwICs9IDI7CQkvKiBza2lw IHJhbmdlIHRhYmxlIGJpdHMgKi8KLQkJRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKGNvdW50 LCBwKTsKLQkJcCA9IENIQVJTRVRfUkFOR0VfVEFCTEVfRU5EIChwLCBjb3VudCk7Ci0JICAg ICAgfQotCSAgfQotCSAgYnJlYWs7Ci0KLQljYXNlIGJlZ2xpbmU6Ci0JICBmcHJpbnRmIChz dGRlcnIsICIvYmVnbGluZSIpOwotCSAgYnJlYWs7Ci0KLQljYXNlIGVuZGxpbmU6Ci0JICBm cHJpbnRmIChzdGRlcnIsICIvZW5kbGluZSIpOwotCSAgYnJlYWs7Ci0KLQljYXNlIG9uX2Zh aWx1cmVfanVtcDoKLQkgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwKTsKLQkg IGZwcmludGYgKHN0ZGVyciwgIi9vbl9mYWlsdXJlX2p1bXAgdG8gJXRkIiwgcCArIG1jbnQg LSBzdGFydCk7Ci0JICBicmVhazsKLQotCWNhc2Ugb25fZmFpbHVyZV9rZWVwX3N0cmluZ19q dW1wOgotCSAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOwotCSAgZnByaW50 ZiAoc3RkZXJyLCAiL29uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcCB0byAldGQiLAotCQkg ICBwICsgbWNudCAtIHN0YXJ0KTsKLQkgIGJyZWFrOwotCi0JY2FzZSBvbl9mYWlsdXJlX2p1 bXBfbmFzdHlsb29wOgotCSAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOwot CSAgZnByaW50ZiAoc3RkZXJyLCAiL29uX2ZhaWx1cmVfanVtcF9uYXN0eWxvb3AgdG8gJXRk IiwKLQkJICAgcCArIG1jbnQgLSBzdGFydCk7Ci0JICBicmVhazsKLQotCWNhc2Ugb25fZmFp bHVyZV9qdW1wX2xvb3A6Ci0JICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcCk7 Ci0JICBmcHJpbnRmIChzdGRlcnIsICIvb25fZmFpbHVyZV9qdW1wX2xvb3AgdG8gJXRkIiwK LQkJICAgcCArIG1jbnQgLSBzdGFydCk7Ci0JICBicmVhazsKLQotCWNhc2Ugb25fZmFpbHVy ZV9qdW1wX3NtYXJ0OgotCSAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOwot CSAgZnByaW50ZiAoc3RkZXJyLCAiL29uX2ZhaWx1cmVfanVtcF9zbWFydCB0byAldGQiLAot CQkgICBwICsgbWNudCAtIHN0YXJ0KTsKLQkgIGJyZWFrOwotCi0JY2FzZSBqdW1wOgotCSAg RVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOwotCSAgZnByaW50ZiAoc3RkZXJy LCAiL2p1bXAgdG8gJXRkIiwgcCArIG1jbnQgLSBzdGFydCk7Ci0JICBicmVhazsKLQotCWNh c2Ugc3VjY2VlZF9uOgotCSAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOwot CSAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQyLCBwKTsKLQkgIGZwcmludGYgKHN0 ZGVyciwgIi9zdWNjZWVkX24gdG8gJXRkLCAlZCB0aW1lcyIsCi0JCSAgIHAgLSAyICsgbWNu dCAtIHN0YXJ0LCBtY250Mik7Ci0JICBicmVhazsKLQotCWNhc2UganVtcF9uOgotCSAgRVhU UkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOwotCSAgRVhUUkFDVF9OVU1CRVJfQU5E X0lOQ1IgKG1jbnQyLCBwKTsKLQkgIGZwcmludGYgKHN0ZGVyciwgIi9qdW1wX24gdG8gJXRk LCAlZCB0aW1lcyIsCi0JCSAgIHAgLSAyICsgbWNudCAtIHN0YXJ0LCBtY250Mik7Ci0JICBi cmVhazsKLQotCWNhc2Ugc2V0X251bWJlcl9hdDoKLQkgIEVYVFJBQ1RfTlVNQkVSX0FORF9J TkNSIChtY250LCBwKTsKLQkgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250MiwgcCk7 Ci0JICBmcHJpbnRmIChzdGRlcnIsICIvc2V0X251bWJlcl9hdCBsb2NhdGlvbiAldGQgdG8g JWQiLAotCQkgICBwIC0gMiArIG1jbnQgLSBzdGFydCwgbWNudDIpOwotCSAgYnJlYWs7Ci0K LQljYXNlIHdvcmRib3VuZDoKLQkgIGZwcmludGYgKHN0ZGVyciwgIi93b3JkYm91bmQiKTsK LQkgIGJyZWFrOwotCi0JY2FzZSBub3R3b3JkYm91bmQ6Ci0JICBmcHJpbnRmIChzdGRlcnIs ICIvbm90d29yZGJvdW5kIik7Ci0JICBicmVhazsKLQotCWNhc2Ugd29yZGJlZzoKLQkgIGZw cmludGYgKHN0ZGVyciwgIi93b3JkYmVnIik7Ci0JICBicmVhazsKLQotCWNhc2Ugd29yZGVu ZDoKLQkgIGZwcmludGYgKHN0ZGVyciwgIi93b3JkZW5kIik7Ci0JICBicmVhazsKLQotCWNh c2Ugc3ltYmVnOgotCSAgZnByaW50ZiAoc3RkZXJyLCAiL3N5bWJlZyIpOwotCSAgYnJlYWs7 Ci0KLQljYXNlIHN5bWVuZDoKLQkgIGZwcmludGYgKHN0ZGVyciwgIi9zeW1lbmQiKTsKLQkg IGJyZWFrOwotCi0JY2FzZSBzeW50YXhzcGVjOgotCSAgZnByaW50ZiAoc3RkZXJyLCAiL3N5 bnRheHNwZWMiKTsKLQkgIG1jbnQgPSAqcCsrOwotCSAgZnByaW50ZiAoc3RkZXJyLCAiLyVk IiwgbWNudCk7Ci0JICBicmVhazsKLQotCWNhc2Ugbm90c3ludGF4c3BlYzoKLQkgIGZwcmlu dGYgKHN0ZGVyciwgIi9ub3RzeW50YXhzcGVjIik7Ci0JICBtY250ID0gKnArKzsKLQkgIGZw cmludGYgKHN0ZGVyciwgIi8lZCIsIG1jbnQpOwotCSAgYnJlYWs7Ci0KLSMgaWZkZWYgZW1h Y3MKLQljYXNlIGF0X2RvdDoKLQkgIGZwcmludGYgKHN0ZGVyciwgIi9hdF9kb3QiKTsKLQkg IGJyZWFrOwotCi0JY2FzZSBjYXRlZ29yeXNwZWM6Ci0JICBmcHJpbnRmIChzdGRlcnIsICIv Y2F0ZWdvcnlzcGVjIik7Ci0JICBtY250ID0gKnArKzsKLQkgIGZwcmludGYgKHN0ZGVyciwg Ii8lZCIsIG1jbnQpOwotCSAgYnJlYWs7Ci0KLQljYXNlIG5vdGNhdGVnb3J5c3BlYzoKLQkg IGZwcmludGYgKHN0ZGVyciwgIi9ub3RjYXRlZ29yeXNwZWMiKTsKLQkgIG1jbnQgPSAqcCsr OwotCSAgZnByaW50ZiAoc3RkZXJyLCAiLyVkIiwgbWNudCk7Ci0JICBicmVhazsKLSMgZW5k aWYgLyogZW1hY3MgKi8KLQotCWNhc2UgYmVnYnVmOgotCSAgZnByaW50ZiAoc3RkZXJyLCAi L2JlZ2J1ZiIpOwotCSAgYnJlYWs7Ci0KLQljYXNlIGVuZGJ1ZjoKLQkgIGZwcmludGYgKHN0 ZGVyciwgIi9lbmRidWYiKTsKLQkgIGJyZWFrOwotCi0JZGVmYXVsdDoKLQkgIGZwcmludGYg KHN0ZGVyciwgIj8lZCIsICoocC0xKSk7Ci0JfQotCi0gICAgICBmcHJpbnRmIChzdGRlcnIs ICJcbiIpOwotICAgIH0KLQotICBmcHJpbnRmIChzdGRlcnIsICIldGQ6XHRlbmQgb2YgcGF0 dGVybi5cbiIsIHAgLSBzdGFydCk7Ci19Ci0KLQotc3RhdGljIHZvaWQKLXByaW50X2NvbXBp bGVkX3BhdHRlcm4gKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCkKLXsKLSAgcmVf Y2hhciAqYnVmZmVyID0gYnVmcC0+YnVmZmVyOwotCi0gIHByaW50X3BhcnRpYWxfY29tcGls ZWRfcGF0dGVybiAoYnVmZmVyLCBidWZmZXIgKyBidWZwLT51c2VkKTsKLSAgcHJpbnRmICgi JWxkIGJ5dGVzIHVzZWQvJWxkIGJ5dGVzIGFsbG9jYXRlZC5cbiIsCi0JICBidWZwLT51c2Vk LCBidWZwLT5hbGxvY2F0ZWQpOwotCi0gIGlmIChidWZwLT5mYXN0bWFwX2FjY3VyYXRlICYm IGJ1ZnAtPmZhc3RtYXApCi0gICAgewotICAgICAgcHJpbnRmICgiZmFzdG1hcDogIik7Ci0g ICAgICBwcmludF9mYXN0bWFwIChidWZwLT5mYXN0bWFwKTsKLSAgICB9Ci0KLSAgcHJpbnRm ICgicmVfbnN1YjogJXp1XHQiLCBidWZwLT5yZV9uc3ViKTsKLSAgcHJpbnRmICgicmVnc19h bGxvYzogJWRcdCIsIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkKTsKLSAgcHJpbnRmICgiY2FuX2Jl X251bGw6ICVkXHQiLCBidWZwLT5jYW5fYmVfbnVsbCk7Ci0gIHByaW50ZiAoIm5vX3N1Yjog JWRcdCIsIGJ1ZnAtPm5vX3N1Yik7Ci0gIHByaW50ZiAoIm5vdF9ib2w6ICVkXHQiLCBidWZw LT5ub3RfYm9sKTsKLSAgcHJpbnRmICgibm90X2VvbDogJWRcdCIsIGJ1ZnAtPm5vdF9lb2wp OwotI2lmbmRlZiBlbWFjcwotICBwcmludGYgKCJzeW50YXg6ICVseFxuIiwgYnVmcC0+c3lu dGF4KTsKLSNlbmRpZgotICBmZmx1c2ggKHN0ZG91dCk7Ci0gIC8qIFBlcmhhcHMgd2Ugc2hv dWxkIHByaW50IHRoZSB0cmFuc2xhdGUgdGFibGU/ICAqLwotfQotCi0KLXN0YXRpYyB2b2lk Ci1wcmludF9kb3VibGVfc3RyaW5nIChyZV9jaGFyICp3aGVyZSwgcmVfY2hhciAqc3RyaW5n MSwgc3NpemVfdCBzaXplMSwKLQkJICAgICByZV9jaGFyICpzdHJpbmcyLCBzc2l6ZV90IHNp emUyKQotewotICBzc2l6ZV90IHRoaXNfY2hhcjsKLQotICBpZiAod2hlcmUgPT0gTlVMTCkK LSAgICBwcmludGYgKCIobnVsbCkiKTsKLSAgZWxzZQotICAgIHsKLSAgICAgIGlmIChGSVJT VF9TVFJJTkdfUCAod2hlcmUpKQotCXsKLQkgIGZvciAodGhpc19jaGFyID0gd2hlcmUgLSBz dHJpbmcxOyB0aGlzX2NoYXIgPCBzaXplMTsgdGhpc19jaGFyKyspCi0JICAgIHB1dGNoYXIg KHN0cmluZzFbdGhpc19jaGFyXSk7Ci0KLQkgIHdoZXJlID0gc3RyaW5nMjsKLQl9Ci0KLSAg ICAgIGZvciAodGhpc19jaGFyID0gd2hlcmUgLSBzdHJpbmcyOyB0aGlzX2NoYXIgPCBzaXpl MjsgdGhpc19jaGFyKyspCi0JcHV0Y2hhciAoc3RyaW5nMlt0aGlzX2NoYXJdKTsKLSAgICB9 Ci19Ci0KLSNlbHNlIC8qIG5vdCBERUJVRyAqLwotCi0jIHVuZGVmIGFzc2VydAotIyBkZWZp bmUgYXNzZXJ0KGUpCi0KLSMgZGVmaW5lIERFQlVHX1NUQVRFTUVOVChlKQotIyBkZWZpbmUg REVCVUdfUFJJTlQoLi4uKQotIyBkZWZpbmUgREVCVUdfUFJJTlRfQ09NUElMRURfUEFUVEVS TihwLCBzLCBlKQotIyBkZWZpbmUgREVCVUdfUFJJTlRfRE9VQkxFX1NUUklORyh3LCBzMSwg c3oxLCBzMiwgc3oyKQotCi0jZW5kaWYgLyogbm90IERFQlVHICovCi0MCi0jaWZuZGVmIGVt YWNzCi0KLS8qIFNldCBieSBgcmVfc2V0X3N5bnRheCcgdG8gdGhlIGN1cnJlbnQgcmVnZXhw IHN5bnRheCB0byByZWNvZ25pemUuICBDYW4KLSAgIGFsc28gYmUgYXNzaWduZWQgdG8gYXJi aXRyYXJpbHk6IGVhY2ggcGF0dGVybiBidWZmZXIgc3RvcmVzIGl0cyBvd24KLSAgIHN5bnRh eCwgc28gaXQgY2FuIGJlIGNoYW5nZWQgYmV0d2VlbiByZWdleCBjb21waWxhdGlvbnMuICAq LwotLyogVGhpcyBoYXMgbm8gaW5pdGlhbGl6ZXIgYmVjYXVzZSBpbml0aWFsaXplZCB2YXJp YWJsZXMgaW4gRW1hY3MKLSAgIGJlY29tZSByZWFkLW9ubHkgYWZ0ZXIgZHVtcGluZy4gICov Ci1yZWdfc3ludGF4X3QgcmVfc3ludGF4X29wdGlvbnM7Ci0KLQotLyogU3BlY2lmeSB0aGUg cHJlY2lzZSBzeW50YXggb2YgcmVnZXhwcyBmb3IgY29tcGlsYXRpb24uICBUaGlzIHByb3Zp ZGVzCi0gICBmb3IgY29tcGF0aWJpbGl0eSBmb3IgdmFyaW91cyB1dGlsaXRpZXMgd2hpY2gg aGlzdG9yaWNhbGx5IGhhdmUKLSAgIGRpZmZlcmVudCwgaW5jb21wYXRpYmxlIHN5bnRheGVz LgotCi0gICBUaGUgYXJndW1lbnQgU1lOVEFYIGlzIGEgYml0IG1hc2sgY29tcHJpc2VkIG9m IHRoZSB2YXJpb3VzIGJpdHMKLSAgIGRlZmluZWQgaW4gcmVnZXgtZW1hY3MuaC4gIFdlIHJl dHVybiB0aGUgb2xkIHN5bnRheC4gICovCi0KLXJlZ19zeW50YXhfdAotcmVfc2V0X3N5bnRh eCAocmVnX3N5bnRheF90IHN5bnRheCkKK3R5cGVkZWYgZW51bQogewotICByZWdfc3ludGF4 X3QgcmV0ID0gcmVfc3ludGF4X29wdGlvbnM7Ci0KLSAgcmVfc3ludGF4X29wdGlvbnMgPSBz eW50YXg7Ci0gIHJldHVybiByZXQ7Ci19Ci1XRUFLX0FMSUFTIChfX3JlX3NldF9zeW50YXgs IHJlX3NldF9zeW50YXgpCi0KLSNlbmRpZgotDAotLyogVGhpcyB0YWJsZSBnaXZlcyBhbiBl cnJvciBtZXNzYWdlIGZvciBlYWNoIG9mIHRoZSBlcnJvciBjb2RlcyBsaXN0ZWQKLSAgIGlu IHJlZ2V4LWVtYWNzLmguICBPYnZpb3VzbHkgdGhlIG9yZGVyIGhlcmUgaGFzIHRvIGJlIHNh bWUgYXMgdGhlcmUuCi0gICBQT1NJWCBkb2Vzbid0IHJlcXVpcmUgdGhhdCB3ZSBkbyBhbnl0 aGluZyBmb3IgUkVHX05PRVJST1IsCi0gICBidXQgd2h5IG5vdCBiZSBuaWNlPyAgKi8KKyAg UkVHX05PRVJST1IgPSAwLAkvKiBTdWNjZXNzLiAgKi8KKyAgUkVHX05PTUFUQ0gsCQkvKiBE aWRuJ3QgZmluZCBhIG1hdGNoIChmb3IgcmVnZXhlYykuICAqLworCisgIC8qIFBPU0lYIHJl Z2NvbXAgcmV0dXJuIGVycm9yIGNvZGVzLiAgKEluIHRoZSBvcmRlciBsaXN0ZWQgaW4gdGhl CisgICAgIHN0YW5kYXJkLikgICovCisgIFJFR19CQURQQVQsCQkvKiBJbnZhbGlkIHBhdHRl cm4uICAqLworICBSRUdfRUNPTExBVEUsCQkvKiBOb3QgaW1wbGVtZW50ZWQuICAqLworICBS RUdfRUNUWVBFLAkJLyogSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZS4gICovCisgIFJF R19FRVNDQVBFLAkJLyogVHJhaWxpbmcgYmFja3NsYXNoLiAgKi8KKyAgUkVHX0VTVUJSRUcs CQkvKiBJbnZhbGlkIGJhY2sgcmVmZXJlbmNlLiAgKi8KKyAgUkVHX0VCUkFDSywJCS8qIFVu bWF0Y2hlZCBsZWZ0IGJyYWNrZXQuICAqLworICBSRUdfRVBBUkVOLAkJLyogUGFyZW50aGVz aXMgaW1iYWxhbmNlLiAgKi8KKyAgUkVHX0VCUkFDRSwJCS8qIFVubWF0Y2hlZCBcey4gICov CisgIFJFR19CQURCUiwJCS8qIEludmFsaWQgY29udGVudHMgb2YgXHtcfS4gICovCisgIFJF R19FUkFOR0UsCQkvKiBJbnZhbGlkIHJhbmdlIGVuZC4gICovCisgIFJFR19FU1BBQ0UsCQkv KiBSYW4gb3V0IG9mIG1lbW9yeS4gICovCisgIFJFR19CQURSUFQsCQkvKiBObyBwcmVjZWRp bmcgcmUgZm9yIHJlcGV0aXRpb24gb3AuICAqLworCisgIC8qIEVycm9yIGNvZGVzIHdlJ3Zl IGFkZGVkLiAgKi8KKyAgUkVHX0VFTkQsCQkvKiBQcmVtYXR1cmUgZW5kLiAgKi8KKyAgUkVH X0VTSVpFLAkJLyogQ29tcGlsZWQgcGF0dGVybiBiaWdnZXIgdGhhbiAyXjE2IGJ5dGVzLiAg Ki8KKyAgUkVHX0VSUEFSRU4sCQkvKiBVbm1hdGNoZWQgKSBvciBcKTsgbm90IHJldHVybmVk IGZyb20gcmVnY29tcC4gICovCisgIFJFR19FUkFOR0VYLAkJLyogUmFuZ2Ugc3RyaWRpbmcg b3ZlciBjaGFyc2V0cy4gICovCisgIFJFR19FU0laRUJSICAgICAgICAgICAvKiBuIG9yIG0g dG9vIGJpZyBpbiBce24sbVx9ICovCit9IHJlZ19lcnJjb2RlX3Q7CiAKIHN0YXRpYyBjb25z dCBjaGFyICpyZV9lcnJvcl9tc2dpZFtdID0KICAgewotICAgIGdldHRleHRfbm9vcCAoIlN1 Y2Nlc3MiKSwJLyogUkVHX05PRVJST1IgKi8KLSAgICBnZXR0ZXh0X25vb3AgKCJObyBtYXRj aCIpLAkvKiBSRUdfTk9NQVRDSCAqLwotICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgcmVn dWxhciBleHByZXNzaW9uIiksIC8qIFJFR19CQURQQVQgKi8KLSAgICBnZXR0ZXh0X25vb3Ag KCJJbnZhbGlkIGNvbGxhdGlvbiBjaGFyYWN0ZXIiKSwgLyogUkVHX0VDT0xMQVRFICovCi0g ICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIpLCAvKiBS RUdfRUNUWVBFICovCi0gICAgZ2V0dGV4dF9ub29wICgiVHJhaWxpbmcgYmFja3NsYXNoIiks IC8qIFJFR19FRVNDQVBFICovCi0gICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBiYWNrIHJl ZmVyZW5jZSIpLCAvKiBSRUdfRVNVQlJFRyAqLwotICAgIGdldHRleHRfbm9vcCAoIlVubWF0 Y2hlZCBbIG9yIFteIiksCS8qIFJFR19FQlJBQ0sgKi8KLSAgICBnZXR0ZXh0X25vb3AgKCJV bm1hdGNoZWQgKCBvciBcXCgiKSwgLyogUkVHX0VQQVJFTiAqLwotICAgIGdldHRleHRfbm9v cCAoIlVubWF0Y2hlZCBcXHsiKSwgLyogUkVHX0VCUkFDRSAqLwotICAgIGdldHRleHRfbm9v cCAoIkludmFsaWQgY29udGVudCBvZiBcXHtcXH0iKSwgLyogUkVHX0JBREJSICovCi0gICAg Z2V0dGV4dF9ub29wICgiSW52YWxpZCByYW5nZSBlbmQiKSwJLyogUkVHX0VSQU5HRSAqLwot ICAgIGdldHRleHRfbm9vcCAoIk1lbW9yeSBleGhhdXN0ZWQiKSwgLyogUkVHX0VTUEFDRSAq LwotICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgcHJlY2VkaW5nIHJlZ3VsYXIgZXhwcmVz c2lvbiIpLCAvKiBSRUdfQkFEUlBUICovCi0gICAgZ2V0dGV4dF9ub29wICgiUHJlbWF0dXJl IGVuZCBvZiByZWd1bGFyIGV4cHJlc3Npb24iKSwgLyogUkVHX0VFTkQgKi8KLSAgICBnZXR0 ZXh0X25vb3AgKCJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIpLCAvKiBSRUdfRVNJWkUg Ki8KLSAgICBnZXR0ZXh0X25vb3AgKCJVbm1hdGNoZWQgKSBvciBcXCkiKSwgLyogUkVHX0VS UEFSRU4gKi8KLSAgICBnZXR0ZXh0X25vb3AgKCJSYW5nZSBzdHJpZGluZyBvdmVyIGNoYXJz ZXRzIiksIC8qIFJFR19FUkFOR0VYICAqLwotICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQg Y29udGVudCBvZiBcXHtcXH0sIHJlcGV0aXRpb25zIHRvbyBiaWciKSAvKiBSRUdfRVNJWkVC UiAgKi8KKyAgIFtSRUdfTk9FUlJPUl0gPSAiU3VjY2VzcyIsCisgICBbUkVHX05PTUFUQ0hd ID0gIk5vIG1hdGNoIiwKKyAgIFtSRUdfQkFEUEFUXSA9ICJJbnZhbGlkIHJlZ3VsYXIgZXhw cmVzc2lvbiIsCisgICBbUkVHX0VDT0xMQVRFXSA9ICJJbnZhbGlkIGNvbGxhdGlvbiBjaGFy YWN0ZXIiLAorICAgW1JFR19FQ1RZUEVdID0gIkludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5h bWUiLAorICAgW1JFR19FRVNDQVBFXSA9ICJUcmFpbGluZyBiYWNrc2xhc2giLAorICAgW1JF R19FU1VCUkVHXSA9ICJJbnZhbGlkIGJhY2sgcmVmZXJlbmNlIiwKKyAgIFtSRUdfRUJSQUNL XSA9ICJVbm1hdGNoZWQgWyBvciBbXiIsCisgICBbUkVHX0VQQVJFTl0gPSAiVW5tYXRjaGVk ICggb3IgXFwoIiwKKyAgIFtSRUdfRUJSQUNFXSA9ICJVbm1hdGNoZWQgXFx7IiwKKyAgIFtS RUdfQkFEQlJdID0gIkludmFsaWQgY29udGVudCBvZiBcXHtcXH0iLAorICAgW1JFR19FUkFO R0VdID0gIkludmFsaWQgcmFuZ2UgZW5kIiwKKyAgIFtSRUdfRVNQQUNFXSA9ICJNZW1vcnkg ZXhoYXVzdGVkIiwKKyAgIFtSRUdfQkFEUlBUXSA9ICJJbnZhbGlkIHByZWNlZGluZyByZWd1 bGFyIGV4cHJlc3Npb24iLAorICAgW1JFR19FRU5EXSA9ICJQcmVtYXR1cmUgZW5kIG9mIHJl Z3VsYXIgZXhwcmVzc2lvbiIsCisgICBbUkVHX0VTSVpFXSA9ICJSZWd1bGFyIGV4cHJlc3Np b24gdG9vIGJpZyIsCisgICBbUkVHX0VSUEFSRU5dID0gIlVubWF0Y2hlZCApIG9yIFxcKSIs CisgICBbUkVHX0VSQU5HRVggXSA9ICJSYW5nZSBzdHJpZGluZyBvdmVyIGNoYXJzZXRzIiwK KyAgIFtSRUdfRVNJWkVCUiBdID0gIkludmFsaWQgY29udGVudCBvZiBcXHtcXH0iLAogICB9 OwotDAotLyogV2hldGhlciB0byBhbGxvY2F0ZSBtZW1vcnkgZHVyaW5nIG1hdGNoaW5nLiAg Ki8KLQotLyogRGVmaW5lIE1BVENIX01BWV9BTExPQ0FURSB0byBhbGxvdyB0aGUgc2VhcmNo aW5nIGFuZCBtYXRjaGluZwotICAgZnVuY3Rpb25zIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhl IGZhaWx1cmUgc3RhY2sgYW5kIHJlZ2lzdGVycy4KLSAgIE5vcm1hbGx5IHNob3VsZCBiZSBk ZWZpbmVkLCBiZWNhdXNlIG90aGVyd2lzZSBzZWFyY2hpbmcgYW5kCi0gICBtYXRjaGluZyBy b3V0aW5lcyB3aWxsIGhhdmUgbXVjaCBzbWFsbGVyIG1lbW9yeSByZXNvdXJjZXMgYXQgdGhl aXIKLSAgIGRpc3Bvc2FsLCBhbmQgdGhlcmVmb3JlIG1pZ2h0IGZhaWwgdG8gaGFuZGxlIGNv bXBsZXggcmVnZXhwcy4KLSAgIFRoZXJlZm9yZSB1bmRlZmluZSBNQVRDSF9NQVlfQUxMT0NB VEUgb25seSBpbiB0aGUgZm9sbG93aW5nCi0gICBleGNlcHRpb25hbCBzaXR1YXRpb25zOgot Ci0gICAuIFdoZW4gcnVubmluZyBvbiBhIHN5c3RlbSB3aGVyZSBtZW1vcnkgaXMgYXQgcHJl bWl1bS4KLSAgIC4gV2hlbiBhbGxvY2EgY2Fubm90IGJlIHVzZWQgYXQgYWxsLCBwZXJoYXBz IGR1ZSB0byBidWdzIGluCi0gICAgIGl0cyBpbXBsZW1lbnRhdGlvbiwgb3IgaXRzIGJlaW5n IHVuYXZhaWxhYmxlLCBvciBkdWUgdG8gYQotICAgICB2ZXJ5IHNtYWxsIHN0YWNrIHNpemUu ICBUaGlzIHJlcXVpcmVzIHRvIGRlZmluZSBSRUdFWF9NQUxMT0MKLSAgICAgdG8gdXNlIG1h bGxvYyBpbnN0ZWFkLCB3aGljaCBpbiB0dXJuIGNvdWxkIGxlYWQgdG8gbWVtb3J5Ci0gICAg IGxlYWtzIGlmIHNlYXJjaCBpcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4gIChGb3IgdGhl c2UKLSAgICAgcmVhc29ucywgZGVmaW5pbmcgUkVHRVhfTUFMTE9DIHdoZW4gYnVpbGRpbmcg RW1hY3MKLSAgICAgYXV0b21hdGljYWxseSB1bmRlZmluZXMgTUFUQ0hfTUFZX0FMTE9DQVRF LCBidXQgb3V0c2lkZQotICAgICBFbWFjcyB5b3UgbWF5IG5vdCBjYXJlIGFib3V0IG1lbW9y eSBsZWFrcy4pICBJZiB5b3Ugd2FudCB0bwotICAgICBwcmV2ZW50IHRoZSBtZW1vcnkgbGVh a3MsIHVuZGVmaW5lIE1BVENIX01BWV9BTExPQ0FURS4KLSAgIC4gV2hlbiBjb2RlIHRoYXQg Y2FsbHMgdGhlIHNlYXJjaGluZyBhbmQgbWF0Y2hpbmcgZnVuY3Rpb25zCi0gICAgIGNhbm5v dCBhbGxvdyBtZW1vcnkgYWxsb2NhdGlvbiwgZm9yIHdoYXRldmVyIHJlYXNvbnMuICAqLwot Ci0vKiBOb3JtYWxseSwgdGhpcyBpcyBmaW5lLiAgKi8KLSNkZWZpbmUgTUFUQ0hfTUFZX0FM TE9DQVRFCi0KLS8qIFRoZSBtYXRjaCByb3V0aW5lcyBtYXkgbm90IGFsbG9jYXRlIGlmICgx KSB0aGV5IHdvdWxkIGRvIGl0IHdpdGggbWFsbG9jCi0gICBhbmQgKDIpIGl0J3Mgbm90IHNh ZmUgZm9yIHRoZW0gdG8gdXNlIG1hbGxvYy4KLSAgIE5vdGUgdGhhdCBpZiBSRUxfQUxMT0Mg aXMgZGVmaW5lZCwgbWF0Y2hpbmcgd291bGQgbm90IHVzZSBtYWxsb2MgZm9yIHRoZQotICAg ZmFpbHVyZSBzdGFjaywgYnV0IHdlIHdvdWxkIHN0aWxsIHVzZSBpdCBmb3IgdGhlIHJlZ2lz dGVyIHZlY3RvcnM7Ci0gICBzbyBSRUxfQUxMT0Mgc2hvdWxkIG5vdCBhZmZlY3QgdGhpcy4g ICovCi0jaWYgZGVmaW5lZCBSRUdFWF9NQUxMT0MgJiYgZGVmaW5lZCBlbWFjcwotIyB1bmRl ZiBNQVRDSF9NQVlfQUxMT0NBVEUKLSNlbmRpZgogCi0vKiBXaGlsZSByZWdleCBtYXRjaGlu ZyBvZiBhIHNpbmdsZSBjb21waWxlZCBwYXR0ZXJuIGlzbid0IHJlZW50cmFudAotICAgKGJl Y2F1c2Ugd2UgY29tcGlsZSByZWdleGVzIHRvIGJ5dGVjb2RlIHByb2dyYW1zLCBhbmQgdGhl IGJ5dGVjb2RlCi0gICBwcm9ncmFtcyBhcmUgc2VsZi1tb2RpZnlpbmcpLCB0aGUgcmVnZXgg bWFjaGluZXJ5IG11c3QgbmV2ZXJ0aGVsZXNzCi0gICBiZSByZWVudHJhbnQgd2l0aCByZXNw ZWN0IHRvIF9kaWZmZXJlbnRfIHBhdHRlcm5zLCBhbmQgd2UgZG8gdGhhdAotICAgYnkgYXZv aWRpbmcgZ2xvYmFsIHZhcmlhYmxlcyBhbmQgdXNpbmcgTUFUQ0hfTUFZX0FMTE9DQVRFLiAg Ki8KLSNpZiAhZGVmaW5lZCBNQVRDSF9NQVlfQUxMT0NBVEUgJiYgZGVmaW5lZCBlbWFjcwot IyBlcnJvciAiRW1hY3MgcmVxdWlyZXMgTUFUQ0hfTUFZX0FMTE9DQVRFIgotI2VuZGlmCisv KiBGb3IgJ3JlZ3NfYWxsb2NhdGVkJy4gICovCitlbnVtIHsgUkVHU19VTkFMTE9DQVRFRCwg UkVHU19SRUFMTE9DQVRFLCBSRUdTX0ZJWEVEIH07CiAKKy8qIElmICdyZWdzX2FsbG9jYXRl ZCcgaXMgUkVHU19VTkFMTE9DQVRFRCBpbiB0aGUgcGF0dGVybiBidWZmZXIsCisgICAncmVf bWF0Y2hfMicgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhdCBsZWFzdCB0aGlzIG1hbnkg cmVnaXN0ZXJzCisgICB0aGUgZmlyc3QgdGltZSBhIGByZWdzJyBzdHJ1Y3R1cmUgaXMgcGFz c2VkLiAgKi8KK2VudW0geyBSRV9OUkVHUyA9IDMwIH07CiAMCisvKiBUaGUgc2VhcmNoaW5n IGFuZCBtYXRjaGluZyBmdW5jdGlvbnMgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUKKyAgIGZh aWx1cmUgc3RhY2sgYW5kIHJlZ2lzdGVycy4gIE90aGVyd2lzZSBzZWFyY2hpbmcgYW5kIG1h dGNoaW5nCisgICByb3V0aW5lcyB3b3VsZCBoYXZlIG11Y2ggc21hbGxlciBtZW1vcnkgcmVz b3VyY2VzIGF0IHRoZWlyCisgICBkaXNwb3NhbCwgYW5kIHRoZXJlZm9yZSBtaWdodCBmYWls IHRvIGhhbmRsZSBjb21wbGV4IHJlZ2V4cHMuICAqLworCiAvKiBGYWlsdXJlIHN0YWNrIGRl Y2xhcmF0aW9ucyBhbmQgbWFjcm9zOyBib3RoIHJlX2NvbXBpbGVfZmFzdG1hcCBhbmQKICAg IHJlX21hdGNoXzIgdXNlIGEgZmFpbHVyZSBzdGFjay4gIFRoZXNlIGhhdmUgdG8gYmUgbWFj cm9zIGJlY2F1c2Ugb2YKLSAgIFJFR0VYX0FMTE9DQVRFX1NUQUNLLiAgKi8KKyAgIFNBRkVf QUxMT0NBLiAgKi8KIAogCiAvKiBBcHByb3hpbWF0ZSBudW1iZXIgb2YgZmFpbHVyZSBwb2lu dHMgZm9yIHdoaWNoIHRvIGluaXRpYWxseSBhbGxvY2F0ZSBzcGFjZQogICAgd2hlbiBtYXRj aGluZy4gIElmIHRoaXMgbnVtYmVyIGlzIGV4Y2VlZGVkLCB3ZSBhbGxvY2F0ZSBtb3JlCiAg ICBzcGFjZSwgc28gaXQgaXMgbm90IGEgaGFyZCBsaW1pdC4gICovCi0jaWZuZGVmIElOSVRf RkFJTFVSRV9BTExPQwotIyBkZWZpbmUgSU5JVF9GQUlMVVJFX0FMTE9DIDIwCi0jZW5kaWYK KyNkZWZpbmUgSU5JVF9GQUlMVVJFX0FMTE9DIDIwCiAKIC8qIFJvdWdobHkgdGhlIG1heGlt dW0gbnVtYmVyIG9mIGZhaWx1cmUgcG9pbnRzIG9uIHRoZSBzdGFjay4gIFdvdWxkIGJlCiAg ICBleGFjdGx5IHRoYXQgaWYgYWx3YXlzIHVzZWQgVFlQSUNBTF9GQUlMVVJFX1NJWkUgaXRl bXMgZWFjaCB0aW1lIHdlIGZhaWxlZC4KICAgIFRoaXMgaXMgYSB2YXJpYWJsZSBvbmx5IHNv IHVzZXJzIG9mIHJlZ2V4IGNhbiBhc3NpZ24gdG8gaXQ7IHdlIG5ldmVyCiAgICBjaGFuZ2Ug aXQgb3Vyc2VsdmVzLiAgV2UgYWx3YXlzIG11bHRpcGx5IGl0IGJ5IFRZUElDQUxfRkFJTFVS RV9TSVpFCiAgICBiZWZvcmUgdXNpbmcgaXQsIHNvIGl0IHNob3VsZCBwcm9iYWJseSBiZSBh IGJ5dGUtY291bnQgaW5zdGVhZC4gICovCi0jIGlmIGRlZmluZWQgTUFUQ0hfTUFZX0FMTE9D QVRFCiAvKiBOb3RlIHRoYXQgNDQwMCB3YXMgZW5vdWdoIHRvIGNhdXNlIGEgY3Jhc2ggb24g QWxwaGEgT1NGLzEsCiAgICB3aG9zZSBkZWZhdWx0IHN0YWNrIGxpbWl0IGlzIDJtYi4gIElu IG9yZGVyIGZvciBhIGxhcmdlcgogICAgdmFsdWUgdG8gd29yayByZWxpYWJseSwgeW91IGhh dmUgdG8gdHJ5IHRvIG1ha2UgaXQgYWNjb3JkCiAgICB3aXRoIHRoZSBwcm9jZXNzIHN0YWNr IGxpbWl0LiAgKi8KIHNpemVfdCBlbWFjc19yZV9tYXhfZmFpbHVyZXMgPSA0MDAwMDsKLSMg ZWxzZQotc2l6ZV90IGVtYWNzX3JlX21heF9mYWlsdXJlcyA9IDQwMDA7Ci0jIGVuZGlmCiAK IHVuaW9uIGZhaWxfc3RhY2tfZWx0CiB7CkBAIC0xMjkxLDMzICs2NzYsMTcgQEAgdHlwZWRl ZiBzdHJ1Y3QKICNkZWZpbmUgRkFJTF9TVEFDS19FTVBUWSgpICAgICAoZmFpbF9zdGFjay5m cmFtZSA9PSAwKQogCiAKLS8qIERlZmluZSBtYWNyb3MgdG8gaW5pdGlhbGl6ZSBhbmQgZnJl ZSB0aGUgZmFpbHVyZSBzdGFjay4KLSAgIERvIGByZXR1cm4gLTInIGlmIHRoZSBhbGxvYyBm YWlscy4gICovCisvKiBEZWZpbmUgbWFjcm9zIHRvIGluaXRpYWxpemUgYW5kIGZyZWUgdGhl IGZhaWx1cmUgc3RhY2suICAqLwogCi0jaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCi0jIGRl ZmluZSBJTklUX0ZBSUxfU1RBQ0soKQkJCQkJCVwKKyNkZWZpbmUgSU5JVF9GQUlMX1NUQUNL KCkJCQkJCQlcCiAgIGRvIHsJCQkJCQkJCQlcCiAgICAgZmFpbF9zdGFjay5zdGFjayA9CQkJ CQkJCVwKLSAgICAgIFJFR0VYX0FMTE9DQVRFX1NUQUNLIChJTklUX0ZBSUxVUkVfQUxMT0Mg KiBUWVBJQ0FMX0ZBSUxVUkVfU0laRQlcCi0JCQkgICAgKiBzaXplb2YgKGZhaWxfc3RhY2tf ZWx0X3QpKTsJCVwKLQkJCQkJCQkJCVwKLSAgICBpZiAoZmFpbF9zdGFjay5zdGFjayA9PSBO VUxMKQkJCQkJXAotICAgICAgcmV0dXJuIC0yOwkJCQkJCQlcCi0JCQkJCQkJCQlcCisgICAg ICBTQUZFX0FMTE9DQSAoSU5JVF9GQUlMVVJFX0FMTE9DICogVFlQSUNBTF9GQUlMVVJFX1NJ WkUJCVwKKwkJICAgKiBzaXplb2YgKGZhaWxfc3RhY2tfZWx0X3QpKTsJCQlcCiAgICAgZmFp bF9zdGFjay5zaXplID0gSU5JVF9GQUlMVVJFX0FMTE9DOwkJCQlcCiAgICAgZmFpbF9zdGFj ay5hdmFpbCA9IDA7CQkJCQkJXAogICAgIGZhaWxfc3RhY2suZnJhbWUgPSAwOwkJCQkJCVwK ICAgfSB3aGlsZSAoMCkKLSNlbHNlCi0jIGRlZmluZSBJTklUX0ZBSUxfU1RBQ0soKQkJCQkJ CVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBmYWlsX3N0YWNrLmF2YWlsID0gMDsJCQkJCQlc Ci0gICAgZmFpbF9zdGFjay5mcmFtZSA9IDA7CQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0j IGRlZmluZSBSRVRBTExPQ19JRihhZGRyLCBuLCB0KSBcCi0gIGlmIChhZGRyKSBSRVRBTExP QygoYWRkciksIChuKSwgdCk7IGVsc2UgKGFkZHIpID0gVEFMTE9DICgobiksIHQpCi0jZW5k aWYKIAogCiAvKiBEb3VibGUgdGhlIHNpemUgb2YgRkFJTF9TVEFDSywgdXAgdG8gYSBsaW1p dApAQCAtMTMyNiw3ICs2OTUsNyBAQCB0eXBlZGVmIHN0cnVjdAogICAgUmV0dXJuIDEgaWYg c3VjY2VlZHMsIGFuZCAwIGlmIGVpdGhlciByYW4gb3V0IG9mIG1lbW9yeQogICAgYWxsb2Nh dGluZyBzcGFjZSBmb3IgaXQgb3IgaXQgd2FzIGFscmVhZHkgdG9vIGxhcmdlLgogCi0gICBS RUdFWF9SRUFMTE9DQVRFX1NUQUNLIHJlcXVpcmVzIGBkZXN0aW5hdGlvbicgYmUgZGVjbGFy ZWQuICAgKi8KKyAgIFJFR0VYX1JFQUxMT0NBVEUgcmVxdWlyZXMgYGRlc3RpbmF0aW9uJyBi ZSBkZWNsYXJlZC4gICAqLwogCiAvKiBGYWN0b3IgdG8gaW5jcmVhc2UgdGhlIGZhaWx1cmUg c3RhY2sgc2l6ZSBieQogICAgd2hlbiB3ZSBpbmNyZWFzZSBpdC4KQEAgLTEzMzksMTggKzcw OCwxNSBAQCB0eXBlZGVmIHN0cnVjdAogICAoKChmYWlsX3N0YWNrKS5zaXplID49IGVtYWNz X3JlX21heF9mYWlsdXJlcyAqIFRZUElDQUxfRkFJTFVSRV9TSVpFKSAgICAgICAgXAogICAg PyAwCQkJCQkJCQkJXAogICAgOiAoKGZhaWxfc3RhY2spLnN0YWNrCQkJCQkJXAotICAgICAg PSBSRUdFWF9SRUFMTE9DQVRFX1NUQUNLICgoZmFpbF9zdGFjaykuc3RhY2ssCQkJXAorICAg ICAgPSBSRUdFWF9SRUFMTE9DQVRFICgoZmFpbF9zdGFjaykuc3RhY2ssCQkJCVwKIAkgIChm YWlsX3N0YWNrKS5zaXplICogc2l6ZW9mIChmYWlsX3N0YWNrX2VsdF90KSwJCVwKICAgICAg ICAgICBtaW4gKGVtYWNzX3JlX21heF9mYWlsdXJlcyAqIFRZUElDQUxfRkFJTFVSRV9TSVpF LCAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICgoZmFpbF9zdGFjaykuc2l6 ZSAqIEZBSUxfU1RBQ0tfR1JPV1RIX0ZBQ1RPUikpICAgICAgICAgIFwKICAgICAgICAgICAq IHNpemVvZiAoZmFpbF9zdGFja19lbHRfdCkpLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLQkJCQkJCQkJCVwKLSAgICAgIChmYWlsX3N0YWNrKS5zdGFjayA9PSBOVUxM CQkJCQlcCi0gICAgICA/IDAJCQkJCQkJCVwKLSAgICAgIDogKChmYWlsX3N0YWNrKS5zaXpl CQkJCQkJXAotICAgICAgICAgPSAobWluIChlbWFjc19yZV9tYXhfZmFpbHVyZXMgKiBUWVBJ Q0FMX0ZBSUxVUkVfU0laRSwgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAo KGZhaWxfc3RhY2spLnNpemUgKiBGQUlMX1NUQUNLX0dST1dUSF9GQUNUT1IpKSksICAgICAg XAotCSAxKSkpCisgICAgICAoKGZhaWxfc3RhY2spLnNpemUJCQkJCQlcCisgICAgICAgPSAo bWluIChlbWFjc19yZV9tYXhfZmFpbHVyZXMgKiBUWVBJQ0FMX0ZBSUxVUkVfU0laRSwJCVwK KwkgICAgICAgKChmYWlsX3N0YWNrKS5zaXplICogRkFJTF9TVEFDS19HUk9XVEhfRkFDVE9S KSkpKSwJXAorICAgICAgMSkpCiAKIAogLyogUHVzaCBhIHBvaW50ZXIgdmFsdWUgb250byB0 aGUgZmFpbHVyZSBzdGFjay4KQEAgLTEzODQsOCArNzUwLDYgQEAgdHlwZWRlZiBzdHJ1Y3QK IHdoaWxlIChSRU1BSU5JTkdfQVZBSUxfU0xPVFMgPD0gc3BhY2UpIHsJCQkJXAogICBpZiAo IUdST1dfRkFJTF9TVEFDSyAoZmFpbF9zdGFjaykpCQkJCQlcCiAgICAgcmV0dXJuIC0yOwkJ CQkJCQkJXAotICBERUJVR19QUklOVCAoIlxuICBEb3VibGVkIHN0YWNrOyBzaXplIG5vdzog JXpkXG4iLCAoZmFpbF9zdGFjaykuc2l6ZSk7XAotICBERUJVR19QUklOVCAoIgkgc2xvdHMg YXZhaWxhYmxlOiAlemRcbiIsIFJFTUFJTklOR19BVkFJTF9TTE9UUyk7XAogfQogCiAvKiBQ dXNoIHJlZ2lzdGVyIE5VTSBvbnRvIHRoZSBzdGFjay4gICovCkBAIC0xMzk0LDggKzc1OCw2 IEBAIGRvIHsJCQkJCQkJCQlcCiAgIGNoYXIgKmRlc3RpbmF0aW9uOwkJCQkJCQlcCiAgIGxv bmcgbiA9IG51bTsJCQkJCQkJCVwKICAgRU5TVVJFX0ZBSUxfU1RBQ0soMyk7CQkJCQkJCVwK LSAgREVCVUdfUFJJTlQgKCIgICAgUHVzaCByZWcgJWxkIChzcGFubmluZyAlcCAtPiAlcClc biIsCQlcCi0JICAgICAgIG4sIHJlZ3N0YXJ0W25dLCByZWdlbmRbbl0pOwkJCQlcCiAgIFBV U0hfRkFJTFVSRV9QT0lOVEVSIChyZWdzdGFydFtuXSk7CQkJCQlcCiAgIFBVU0hfRkFJTFVS RV9QT0lOVEVSIChyZWdlbmRbbl0pOwkJCQkJXAogICBQVVNIX0ZBSUxVUkVfSU5UIChuKTsJ CQkJCQkJXApAQCAtMTQwOSw3ICs3NzEsNiBAQCBkbyB7CQkJCQkJCQkJXAogICBpbnQgYzsJ CQkJCQkJCVwKICAgRU5TVVJFX0ZBSUxfU1RBQ0soMyk7CQkJCQkJCVwKICAgRVhUUkFDVF9O VU1CRVIgKGMsIHB0cik7CQkJCQkJXAotICBERUJVR19QUklOVCAoIiAgICBQdXNoIG51bWJl ciAlcCA9ICVkIC0+ICVkXG4iLCBwdHIsIGMsIHZhbCk7CQlcCiAgIFBVU0hfRkFJTFVSRV9J TlQgKGMpOwkJCQkJCQlcCiAgIFBVU0hfRkFJTFVSRV9QT0lOVEVSIChwdHIpOwkJCQkJCVwK ICAgUFVTSF9GQUlMVVJFX0lOVCAoLTEpOwkJCQkJCVwKQEAgLTE0MjMsNDEgKzc4NCwzNiBA QCBkbyB7CQkJCQkJCQkJXAogICBpZiAocGZyZWcgPT0gLTEpCQkJCQkJCVwKICAgICB7CQkJ CQkJCQkJXAogICAgICAgLyogSXQncyBhIGNvdW50ZXIuICAqLwkJCQkJCVwKLSAgICAgIC8q IEhlcmUsIHdlIGRpc2NhcmQgYGNvbnN0JywgbWFraW5nIHJlX21hdGNoIG5vbi1yZWVudHJh bnQuICAqLwlcCisgICAgICAvKiBEaXNjYXJkICdjb25zdCcsIG1ha2luZyByZV9zZWFyY2gg bm9uLXJlZW50cmFudC4gICovCQlcCiAgICAgICB1bnNpZ25lZCBjaGFyICpwdHIgPSAodW5z aWduZWQgY2hhciAqKSBQT1BfRkFJTFVSRV9QT0lOVEVSICgpOwlcCiAgICAgICBwZnJlZyA9 IFBPUF9GQUlMVVJFX0lOVCAoKTsJCQkJCVwKICAgICAgIFNUT1JFX05VTUJFUiAocHRyLCBw ZnJlZyk7CQkJCQlcCi0gICAgICBERUJVR19QUklOVCAoIiAgICAgUG9wIGNvdW50ZXIgJXAg PSAlbGRcbiIsIHB0ciwgcGZyZWcpOwkJXAogICAgIH0JCQkJCQkJCQlcCiAgIGVsc2UJCQkJ CQkJCQlcCiAgICAgewkJCQkJCQkJCVwKICAgICAgIHJlZ2VuZFtwZnJlZ10gPSBQT1BfRkFJ TFVSRV9QT0lOVEVSICgpOwkJCQlcCiAgICAgICByZWdzdGFydFtwZnJlZ10gPSBQT1BfRkFJ TFVSRV9QT0lOVEVSICgpOwkJCQlcCi0gICAgICBERUJVR19QUklOVCAoIiAgICAgUG9wIHJl ZyAlbGQgKHNwYW5uaW5nICVwIC0+ICVwKVxuIiwJCVwKLQkJICAgcGZyZWcsIHJlZ3N0YXJ0 W3BmcmVnXSwgcmVnZW5kW3BmcmVnXSk7CQlcCiAgICAgfQkJCQkJCQkJCVwKIH0gd2hpbGUg KDApCiAKIC8qIENoZWNrIHRoYXQgd2UgYXJlIG5vdCBzdHVjayBpbiBhbiBpbmZpbml0ZSBs b29wLiAgKi8KICNkZWZpbmUgQ0hFQ0tfSU5GSU5JVEVfTE9PUChwYXRfY3VyLCBzdHJpbmdf cGxhY2UpCQkJXAogZG8gewkJCQkJCQkJCVwKLSAgc3NpemVfdCBmYWlsdXJlID0gVE9QX0ZB SUxVUkVfSEFORExFICgpOwkJCQlcCisgIHB0cmRpZmZfdCBmYWlsdXJlID0gVE9QX0ZBSUxV UkVfSEFORExFICgpOwkJCQlcCiAgIC8qIENoZWNrIGZvciBpbmZpbml0ZSBtYXRjaGluZyBs b29wcyAqLwkJCQlcCiAgIHdoaWxlIChmYWlsdXJlID4gMAkJCQkJCQlcCiAJICYmIChGQUlM VVJFX1NUUiAoZmFpbHVyZSkgPT0gc3RyaW5nX3BsYWNlCQkJXAogCSAgICAgfHwgRkFJTFVS RV9TVFIgKGZhaWx1cmUpID09IE5VTEwpKQkJCQlcCiAgICAgewkJCQkJCQkJCVwKLSAgICAg IGFzc2VydCAoRkFJTFVSRV9QQVQgKGZhaWx1cmUpID49IGJ1ZnAtPmJ1ZmZlcgkJCVwKLQkg ICAgICAmJiBGQUlMVVJFX1BBVCAoZmFpbHVyZSkgPD0gYnVmcC0+YnVmZmVyICsgYnVmcC0+ dXNlZCk7CVwKKyAgICAgIGVhc3NlcnQgKEZBSUxVUkVfUEFUIChmYWlsdXJlKSA+PSBidWZw LT5idWZmZXIJCQlcCisJICAgICAgICYmIEZBSUxVUkVfUEFUIChmYWlsdXJlKSA8PSBidWZw LT5idWZmZXIgKyBidWZwLT51c2VkKTsJXAogICAgICAgaWYgKEZBSUxVUkVfUEFUIChmYWls dXJlKSA9PSBwYXRfY3VyKQkJCQlcCiAJewkJCQkJCQkJXAogCSAgY3ljbGUgPSAxOwkJCQkJ CQlcCiAJICBicmVhazsJCQkJCQkJXAogCX0JCQkJCQkJCVwKLSAgICAgIERFQlVHX1BSSU5U ICgiICBPdGhlciBwYXR0ZXJuOiAlcFxuIiwgRkFJTFVSRV9QQVQgKGZhaWx1cmUpKTsJXAog ICAgICAgZmFpbHVyZSA9IE5FWFRfRkFJTFVSRV9IQU5ETEUoZmFpbHVyZSk7CQkJCVwKICAg ICB9CQkJCQkJCQkJXAotICBERUJVR19QUklOVCAoIiAgT3RoZXIgc3RyaW5nOiAlcFxuIiwg RkFJTFVSRV9TVFIgKGZhaWx1cmUpKTsJCVwKIH0gd2hpbGUgKDApCiAKIC8qIFB1c2ggdGhl IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSB3ZSB3aWxsIG5lZWQKQEAgLTE0NzUsMjUg KzgzMSw5IEBAIGRvIHsJCQkJCQkJCQlcCiAgIC8qIE11c3QgYmUgaW50LCBzbyB3aGVuIHdl IGRvbid0IHNhdmUgYW55IHJlZ2lzdGVycywgdGhlIGFyaXRobWV0aWMJXAogICAgICBvZiAw ICsgLTEgaXNuJ3QgZG9uZSBhcyB1bnNpZ25lZC4gICovCQkJCVwKIAkJCQkJCQkJCVwKLSAg REVCVUdfU1RBVEVNRU5UIChuZmFpbHVyZV9wb2ludHNfcHVzaGVkKyspOwkJCQlcCi0gIERF QlVHX1BSSU5UICgiXG5QVVNIX0ZBSUxVUkVfUE9JTlQ6XG4iKTsJCQkJXAotICBERUJVR19Q UklOVCAoIiAgQmVmb3JlIHB1c2gsIG5leHQgYXZhaWw6ICV6ZFxuIiwgKGZhaWxfc3RhY2sp LmF2YWlsKTsJXAotICBERUJVR19QUklOVCAoIgkJCXNpemU6ICV6ZFxuIiwgKGZhaWxfc3Rh Y2spLnNpemUpO1wKLQkJCQkJCQkJCVwKICAgRU5TVVJFX0ZBSUxfU1RBQ0sgKE5VTV9OT05S RUdfSVRFTVMpOwkJCQkJXAotCQkJCQkJCQkJXAotICBERUJVR19QUklOVCAoIlxuIik7CQkJ CQkJCVwKLQkJCQkJCQkJCVwKLSAgREVCVUdfUFJJTlQgKCIgIFB1c2ggZnJhbWUgaW5kZXg6 ICV6ZFxuIiwgZmFpbF9zdGFjay5mcmFtZSk7CQlcCiAgIFBVU0hfRkFJTFVSRV9JTlQgKGZh aWxfc3RhY2suZnJhbWUpOwkJCQkJXAotCQkJCQkJCQkJXAotICBERUJVR19QUklOVCAoIiAg UHVzaCBzdHJpbmcgJXA6IFwiIiwgc3RyaW5nX3BsYWNlKTsJCQlcCi0gIERFQlVHX1BSSU5U X0RPVUJMRV9TVFJJTkcgKHN0cmluZ19wbGFjZSwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIs IHNpemUyKTtcCi0gIERFQlVHX1BSSU5UICgiXCJcbiIpOwkJCQkJCQlcCiAgIFBVU0hfRkFJ TFVSRV9QT0lOVEVSIChzdHJpbmdfcGxhY2UpOwkJCQkJXAotCQkJCQkJCQkJXAotICBERUJV R19QUklOVCAoIiAgUHVzaCBwYXR0ZXJuICVwOiAiLCBwYXR0ZXJuKTsJCQkJXAotICBERUJV R19QUklOVF9DT01QSUxFRF9QQVRURVJOIChidWZwLCBwYXR0ZXJuLCBwZW5kKTsJCQlcCiAg IFBVU0hfRkFJTFVSRV9QT0lOVEVSIChwYXR0ZXJuKTsJCQkJCVwKIAkJCQkJCQkJCVwKICAg LyogQ2xvc2UgdGhlIGZyYW1lIGJ5IG1vdmluZyB0aGUgZnJhbWUgcG9pbnRlciBwYXN0IGl0 LiAgKi8JCVwKQEAgLTE1MjIsMzYgKzg2MiwyNSBAQCBkbyB7CQkJCQkJCQkJXAogCiAjZGVm aW5lIFBPUF9GQUlMVVJFX1BPSU5UKHN0ciwgcGF0KSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCiBkbyB7CQkJCQkJCQkJXAotICBhc3NlcnQgKCFGQUlMX1NUQUNL X0VNUFRZICgpKTsJCQkJCVwKKyAgZWFzc2VydCAoIUZBSUxfU1RBQ0tfRU1QVFkgKCkpOwkJ CQkJXAogCQkJCQkJCQkJXAogICAvKiBSZW1vdmUgZmFpbHVyZSBwb2ludHMgYW5kIHBvaW50 IHRvIGhvdyBtYW55IHJlZ3MgcHVzaGVkLiAgKi8JXAotICBERUJVR19QUklOVCAoIlBPUF9G QUlMVVJFX1BPSU5UOlxuIik7CQkJCQlcCi0gIERFQlVHX1BSSU5UICgiICBCZWZvcmUgcG9w LCBuZXh0IGF2YWlsOiAlemRcbiIsIGZhaWxfc3RhY2suYXZhaWwpOwlcCi0gIERFQlVHX1BS SU5UICgiCQkgICAgIHNpemU6ICV6ZFxuIiwgZmFpbF9zdGFjay5zaXplKTsJXAogCQkJCQkJ CQkJXAogICAvKiBQb3AgdGhlIHNhdmVkIHJlZ2lzdGVycy4gICovCQkJCQlcCiAgIHdoaWxl IChmYWlsX3N0YWNrLmZyYW1lIDwgZmFpbF9zdGFjay5hdmFpbCkJCQkJXAogICAgIFBPUF9G QUlMVVJFX1JFR19PUl9DT1VOVCAoKTsJCQkJCVwKIAkJCQkJCQkJCVwKICAgcGF0ID0gUE9Q X0ZBSUxVUkVfUE9JTlRFUiAoKTsJCQkJCQlcCi0gIERFQlVHX1BSSU5UICgiICBQb3BwaW5n IHBhdHRlcm4gJXA6ICIsIHBhdCk7CQkJCVwKLSAgREVCVUdfUFJJTlRfQ09NUElMRURfUEFU VEVSTiAoYnVmcCwgcGF0LCBwZW5kKTsJCQlcCiAJCQkJCQkJCQlcCiAgIC8qIElmIHRoZSBz YXZlZCBzdHJpbmcgbG9jYXRpb24gaXMgTlVMTCwgaXQgY2FtZSBmcm9tIGFuCQlcCiAgICAg IG9uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcCBvcGNvZGUsIGFuZCB3ZSB3YW50IHRvIHRo cm93IGF3YXkgdGhlCVwKICAgICAgc2F2ZWQgTlVMTCwgdGh1cyByZXRhaW5pbmcgb3VyIGN1 cnJlbnQgcG9zaXRpb24gaW4gdGhlIHN0cmluZy4gICovCVwKICAgc3RyID0gUE9QX0ZBSUxV UkVfUE9JTlRFUiAoKTsJCQkJCQlcCi0gIERFQlVHX1BSSU5UICgiICBQb3BwaW5nIHN0cmlu ZyAlcDogXCIiLCBzdHIpOwkJCQlcCi0gIERFQlVHX1BSSU5UX0RPVUJMRV9TVFJJTkcgKHN0 ciwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyKTsJXAotICBERUJVR19QUklOVCAo IlwiXG4iKTsJCQkJCQkJXAogCQkJCQkJCQkJXAogICBmYWlsX3N0YWNrLmZyYW1lID0gUE9Q X0ZBSUxVUkVfSU5UICgpOwkJCQlcCi0gIERFQlVHX1BSSU5UICgiICBQb3BwaW5nICBmcmFt ZSBpbmRleDogJXpkXG4iLCBmYWlsX3N0YWNrLmZyYW1lKTsJXAogCQkJCQkJCQkJXAotICBh c3NlcnQgKGZhaWxfc3RhY2suYXZhaWwgPj0gMCk7CQkJCQlcCi0gIGFzc2VydCAoZmFpbF9z dGFjay5mcmFtZSA8PSBmYWlsX3N0YWNrLmF2YWlsKTsJCQlcCi0JCQkJCQkJCQlcCi0gIERF QlVHX1NUQVRFTUVOVCAobmZhaWx1cmVfcG9pbnRzX3BvcHBlZCsrKTsJCQkJXAorICBlYXNz ZXJ0IChmYWlsX3N0YWNrLmF2YWlsID49IDApOwkJCQkJXAorICBlYXNzZXJ0IChmYWlsX3N0 YWNrLmZyYW1lIDw9IGZhaWxfc3RhY2suYXZhaWwpOwkJCVwKIH0gd2hpbGUgKDApIC8qIFBP UF9GQUlMVVJFX1BPSU5UICovCiAKIApAQCAtMTU2MiwxMiArODkxLDggQEAgZG8gewkJCQkJ CQkJCVwKIC8qIFN1YnJvdXRpbmUgZGVjbGFyYXRpb25zIGFuZCBtYWNyb3MgZm9yIHJlZ2V4 X2NvbXBpbGUuICAqLwogCiBzdGF0aWMgcmVnX2VycmNvZGVfdCByZWdleF9jb21waWxlIChy ZV9jaGFyICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSwKLSNpZmRlZiBlbWFjcwogCQkJCSAgICBi b29sIHBvc2l4X2JhY2t0cmFja2luZywKIAkJCQkgICAgY29uc3QgY2hhciAqd2hpdGVzcGFj ZV9yZWdleHAsCi0jZWxzZQotCQkJCSAgICByZWdfc3ludGF4X3Qgc3ludGF4LAotI2VuZGlm CiAJCQkJICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCk7CiBzdGF0aWMgdm9p ZCBzdG9yZV9vcDEgKHJlX29wY29kZV90IG9wLCB1bnNpZ25lZCBjaGFyICpsb2MsIGludCBh cmcpOwogc3RhdGljIHZvaWQgc3RvcmVfb3AyIChyZV9vcGNvZGVfdCBvcCwgdW5zaWduZWQg Y2hhciAqbG9jLCBpbnQgYXJnMSwgaW50IGFyZzIpOwpAQCAtMTU3NSwxMCArOTAwLDEwIEBA IHN0YXRpYyB2b2lkIGluc2VydF9vcDEgKHJlX29wY29kZV90IG9wLCB1bnNpZ25lZCBjaGFy ICpsb2MsCiAJCQlpbnQgYXJnLCB1bnNpZ25lZCBjaGFyICplbmQpOwogc3RhdGljIHZvaWQg aW5zZXJ0X29wMiAocmVfb3Bjb2RlX3Qgb3AsIHVuc2lnbmVkIGNoYXIgKmxvYywKIAkJCWlu dCBhcmcxLCBpbnQgYXJnMiwgdW5zaWduZWQgY2hhciAqZW5kKTsKLXN0YXRpYyBib29sZWFu IGF0X2JlZ2xpbmVfbG9jX3AgKHJlX2NoYXIgKnBhdHRlcm4sIHJlX2NoYXIgKnAsCi0JCQkJ IHJlZ19zeW50YXhfdCBzeW50YXgpOwotc3RhdGljIGJvb2xlYW4gYXRfZW5kbGluZV9sb2Nf cCAocmVfY2hhciAqcCwgcmVfY2hhciAqcGVuZCwKLQkJCQkgcmVnX3N5bnRheF90IHN5bnRh eCk7CitzdGF0aWMgYm9vbCBhdF9iZWdsaW5lX2xvY19wIChyZV9jaGFyICpwYXR0ZXJuLCBy ZV9jaGFyICpwLAorCQkJICAgICAgcmVnX3N5bnRheF90IHN5bnRheCk7CitzdGF0aWMgYm9v bCBhdF9lbmRsaW5lX2xvY19wIChyZV9jaGFyICpwLCByZV9jaGFyICpwZW5kLAorCQkJICAg ICAgcmVnX3N5bnRheF90IHN5bnRheCk7CiBzdGF0aWMgcmVfY2hhciAqc2tpcF9vbmVfY2hh ciAocmVfY2hhciAqcCk7CiBzdGF0aWMgaW50IGFuYWx5emVfZmlyc3QgKHJlX2NoYXIgKnAs IHJlX2NoYXIgKnBlbmQsCiAJCQkgIGNoYXIgKmZhc3RtYXAsIGNvbnN0IGludCBtdWx0aWJ5 dGUpOwpAQCAtMTU5NCwxNCArOTE5LDE1IEBAIHN0YXRpYyBpbnQgYW5hbHl6ZV9maXJzdCAo cmVfY2hhciAqcCwgcmVfY2hhciAqcGVuZCwKICAgfSB3aGlsZSAoMCkKIAogCi0vKiBJZiBg dHJhbnNsYXRlJyBpcyBub24tbnVsbCwgcmV0dXJuIHRyYW5zbGF0ZVtEXSwgZWxzZSBqdXN0 IEQuICBXZQorI2RlZmluZSBSRV9UUkFOU0xBVEUoVEJMLCBDKSBjaGFyX3RhYmxlX3RyYW5z bGF0ZSAoVEJMLCBDKQorI2RlZmluZSBSRV9UUkFOU0xBVEVfUChUQkwpICghRVEgKFRCTCwg bWFrZV9udW1iZXIgKDApKSkKKworLyogSWYgYHRyYW5zbGF0ZScgaXMgbm9uLXplcm8sIHJl dHVybiB0cmFuc2xhdGVbRF0sIGVsc2UganVzdCBELiAgV2UKICAgIGNhc3QgdGhlIHN1YnNj cmlwdCB0byB0cmFuc2xhdGUgYmVjYXVzZSBzb21lIGRhdGEgaXMgZGVjbGFyZWQgYXMKICAg IGBjaGFyIConLCB0byBhdm9pZCB3YXJuaW5ncyB3aGVuIGEgc3RyaW5nIGNvbnN0YW50IGlz IHBhc3NlZC4gIEJ1dAogICAgd2hlbiB3ZSB1c2UgYSBjaGFyYWN0ZXIgYXMgYSBzdWJzY3Jp cHQgd2UgbXVzdCBtYWtlIGl0IHVuc2lnbmVkLiAgKi8KLSNpZm5kZWYgVFJBTlNMQVRFCi0j IGRlZmluZSBUUkFOU0xBVEUoZCkgXAorI2RlZmluZSBUUkFOU0xBVEUoZCkgXAogICAoUkVf VFJBTlNMQVRFX1AgKHRyYW5zbGF0ZSkgPyBSRV9UUkFOU0xBVEUgKHRyYW5zbGF0ZSwgKGQp KSA6IChkKSkKLSNlbmRpZgogCiAKIC8qIE1hY3JvcyBmb3Igb3V0cHV0dGluZyB0aGUgY29t cGlsZWQgcGF0dGVybiBpbnRvIGBidWZmZXInLiAgKi8KQEAgLTE2NzYsOCArMTAwMiw2IEBA IHN0YXRpYyBpbnQgYW5hbHl6ZV9maXJzdCAocmVfY2hhciAqcCwgcmVfY2hhciAqcGVuZCwK ICAgICBpZiAobGFzdHN0YXJ0X3NldCkgbGFzdHN0YXJ0X29mZiA9IGxhc3RzdGFydCAtIG9s ZF9idWZmZXI7CQlcCiAgICAgaWYgKHBlbmRpbmdfZXhhY3Rfc2V0KSBwZW5kaW5nX2V4YWN0 X29mZiA9IHBlbmRpbmdfZXhhY3QgLSBvbGRfYnVmZmVyOyBcCiAgICAgUkVUQUxMT0MgKGJ1 ZnAtPmJ1ZmZlciwgYnVmcC0+YWxsb2NhdGVkLCB1bnNpZ25lZCBjaGFyKTsJCVwKLSAgICBp ZiAoYnVmcC0+YnVmZmVyID09IE5VTEwpCQkJCQkJXAotICAgICAgcmV0dXJuIFJFR19FU1BB Q0U7CQkJCQkJXAogICAgIHVuc2lnbmVkIGNoYXIgKm5ld19idWZmZXIgPSBidWZwLT5idWZm ZXI7CQkJCVwKICAgICBiID0gbmV3X2J1ZmZlciArIGJfb2ZmOwkJCQkJCVwKICAgICBiZWdh bHQgPSBuZXdfYnVmZmVyICsgYmVnYWx0X29mZjsJCQkJCVwKQEAgLTE3MjgsMTIgKzEwNTIs NiBAQCB0eXBlZGVmIHN0cnVjdAogCiAvKiBUaGUgbmV4dCBhdmFpbGFibGUgZWxlbWVudC4g ICovCiAjZGVmaW5lIENPTVBJTEVfU1RBQ0tfVE9QIChjb21waWxlX3N0YWNrLnN0YWNrW2Nv bXBpbGVfc3RhY2suYXZhaWxdKQotCi0vKiBFeHBsaWNpdCBxdWl0IGNoZWNraW5nIGlzIG5l ZWRlZCBmb3IgRW1hY3MsIHdoaWNoIHVzZXMgcG9sbGluZyB0bwotICAgcHJvY2VzcyBpbnB1 dCBldmVudHMuICAqLwotI2lmbmRlZiBlbWFjcwotc3RhdGljIHZvaWQgbWF5YmVfcXVpdCAo dm9pZCkge30KLSNlbmRpZgogDAogLyogU3RydWN0dXJlIHRvIG1hbmFnZSB3b3JrIGFyZWEg Zm9yIHJhbmdlIHRhYmxlLiAgKi8KIHN0cnVjdCByYW5nZV90YWJsZV93b3JrX2FyZWEKQEAg LTE3NDQsOCArMTA2Miw2IEBAIHN0cnVjdCByYW5nZV90YWJsZV93b3JrX2FyZWEKICAgaW50 IGJpdHM7CQkJLyogZmxhZyB0byByZWNvcmQgY2hhcmFjdGVyIGNsYXNzZXMgKi8KIH07CiAK LSNpZmRlZiBlbWFjcwotCiAvKiBNYWtlIHN1cmUgdGhhdCBXT1JLX0FSRUEgY2FuIGhvbGQg bW9yZSBOIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLgogICAgVGhpcyBpcyB1c2VkIG9ubHkgaW4g c2V0X2ltYWdlX29mX3JhbmdlIGFuZCBzZXRfaW1hZ2Vfb2ZfcmFuZ2VfMS4KICAgIEl0IGV4 cGVjdHMgV09SS19BUkVBIHRvIGJlIGEgcG9pbnRlci4KQEAgLTE3NzIsMTMgKzEwODgsMTEg QEAgc3RydWN0IHJhbmdlX3RhYmxlX3dvcmtfYXJlYQogICAgICh3b3JrX2FyZWEpLnRhYmxl Wyh3b3JrX2FyZWEpLnVzZWQrK10gPSAocmFuZ2VfZW5kKTsJCVwKICAgfSB3aGlsZSAoMCkK IAotI2VuZGlmIC8qIGVtYWNzICovCi0KIC8qIEZyZWUgYWxsb2NhdGVkIG1lbW9yeSBmb3Ig V09SS19BUkVBLiAgKi8KICNkZWZpbmUgRlJFRV9SQU5HRV9UQUJMRV9XT1JLX0FSRUEod29y a19hcmVhKQlcCiAgIGRvIHsJCQkJCQlcCiAgICAgaWYgKCh3b3JrX2FyZWEpLnRhYmxlKQkJ CVwKLSAgICAgIGZyZWUgKCh3b3JrX2FyZWEpLnRhYmxlKTsJCQlcCisgICAgICB4ZnJlZSAo KHdvcmtfYXJlYSkudGFibGUpOwkJCVwKICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBDTEVB Ul9SQU5HRV9UQUJMRV9XT1JLX1VTRUQod29ya19hcmVhKSAoKHdvcmtfYXJlYSkudXNlZCA9 IDAsICh3b3JrX2FyZWEpLmJpdHMgPSAwKQpAQCAtMTgwNiw4ICsxMTIwLDYgQEAgc3RydWN0 IHJhbmdlX3RhYmxlX3dvcmtfYXJlYQogI2RlZmluZSBTRVRfTElTVF9CSVQoYykgKGJbKChj KSkgLyBCWVRFV0lEVEhdIHw9IDEgPDwgKChjKSAlIEJZVEVXSURUSCkpCiAKIAotI2lmZGVm IGVtYWNzCi0KIC8qIFN0b3JlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIEZST00gdG8gVE8g aW4gdGhlIGJpdG1hcCBhdCBCIChmb3IKICAgIEFTQ0lJIGFuZCB1bmlieXRlIGNoYXJhY3Rl cnMpIGFuZCBXT1JLX0FSRUEgKGZvciBtdWx0aWJ5dGUKICAgIGNoYXJhY3RlcnMpIHdoaWxl IHRyYW5zbGF0aW5nIHRoZW0gYW5kIHBheWluZyBhdHRlbnRpb24gdG8gdGhlCkBAIC0xOTEx LDggKzEyMjMsNiBAQCBzdHJ1Y3QgcmFuZ2VfdGFibGVfd29ya19hcmVhCiAgICAgICB9CQkJ CQkJCQkJICAgXAogICB9IHdoaWxlICgwKQogCi0jZW5kaWYgLyogZW1hY3MgKi8KLQogLyog R2V0IHRoZSBuZXh0IHVuc2lnbmVkIG51bWJlciBpbiB0aGUgdW5jb21waWxlZCBwYXR0ZXJu LiAgKi8KICNkZWZpbmUgR0VUX0lOVEVSVkFMX0NPVU5UKG51bSkJCQkJCVwKICAgZG8gewkJ CQkJCQkJCVwKQEAgLTE5MzUsOCArMTI0NSw2IEBAIHN0cnVjdCByYW5nZV90YWJsZV93b3Jr X2FyZWEKICAgICAgIH0JCQkJCQkJCQlcCiAgIH0gd2hpbGUgKDApCiAMCi0jaWYgISBXSURF X0NIQVJfU1VQUE9SVAotCiAvKiBQYXJzZSBhIGNoYXJhY3RlciBjbGFzcywgaS5lLiBzdHJp bmcgc3VjaCBhcyAiWzpuYW1lOl0iLiAgKnN0cnAKICAgIHBvaW50cyB0byB0aGUgc3RyaW5n IHRvIGJlIHBhcnNlZCBhbmQgbGltaXQgaXMgbGVuZ3RoLCBpbiBieXRlcywgb2YKICAgIHRo YXQgc3RyaW5nLgpAQCAtMjAzMCw3ICsxMzM4LDcgQEAgcmVfd2N0eXBlX3BhcnNlIChjb25z dCB1bnNpZ25lZCBjaGFyICoqc3RycCwgdW5zaWduZWQgbGltaXQpCiB9CiAKIC8qIFRydWUg aWYgQ0ggaXMgaW4gdGhlIGNoYXIgY2xhc3MgQ0MuICAqLwotYm9vbGVhbgorYm9vbAogcmVf aXN3Y3R5cGUgKGludCBjaCwgcmVfd2N0eXBlX3QgY2MpCiB7CiAgIHN3aXRjaCAoY2MpCkBA IC0yMDgzLDcgKzEzOTEsNiBAQCByZV93Y3R5cGVfdG9fYml0IChyZV93Y3R5cGVfdCBjYykK ICAgICAgIGFib3J0ICgpOwogICAgIH0KIH0KLSNlbmRpZgogDAogLyogRmlsbGluZyBpbiB0 aGUgd29yayBhcmVhIG9mIGEgcmFuZ2UuICAqLwogCkBAIC0yMDkzLDI4NyArMTQwMCwxNSBA QCBzdGF0aWMgdm9pZAogZXh0ZW5kX3JhbmdlX3RhYmxlX3dvcmtfYXJlYSAoc3RydWN0IHJh bmdlX3RhYmxlX3dvcmtfYXJlYSAqd29ya19hcmVhKQogewogICB3b3JrX2FyZWEtPmFsbG9j YXRlZCArPSAxNiAqIHNpemVvZiAoaW50KTsKLSAgd29ya19hcmVhLT50YWJsZSA9IHJlYWxs b2MgKHdvcmtfYXJlYS0+dGFibGUsIHdvcmtfYXJlYS0+YWxsb2NhdGVkKTsKKyAgd29ya19h cmVhLT50YWJsZSA9IHhyZWFsbG9jICh3b3JrX2FyZWEtPnRhYmxlLCB3b3JrX2FyZWEtPmFs bG9jYXRlZCk7CiB9Ci0KLSNpZiAwCi0jaWZkZWYgZW1hY3MKLQotLyogQ2FyZWZ1bGx5IGZp bmQgdGhlIHJhbmdlcyBvZiBjb2RlcyB0aGF0IGFyZSBlcXVpdmFsZW50Ci0gICB1bmRlciBj YXNlIGNvbnZlcnNpb24gdG8gdGhlIHJhbmdlIHN0YXJ0Li5lbmQgd2hlbiBwYXNzZWQgdGhy b3VnaAotICAgVFJBTlNMQVRFLiAgSGFuZGxlIHRoZSBjYXNlIHdoZXJlIG5vbi1sZXR0ZXJz IGNhbiBjb21lIGluIGJldHdlZW4KLSAgIHR3byB1cHBlci1jYXNlIGxldHRlcnMgKHdoaWNo IGhhcHBlbnMgaW4gTGF0aW4tMSkuCi0gICBBbHNvIGhhbmRsZSB0aGUgY2FzZSBvZiBncm91 cHMgb2YgbW9yZSB0aGFuIDIgY2FzZS1lcXVpdmFsZW50IGNoYXJzLgotCi0gICBUaGUgYmFz aWMgbWV0aG9kIGlzIHRvIGxvb2sgYXQgY29uc2VjdXRpdmUgY2hhcmFjdGVycyBhbmQgc2Vl Ci0gICBpZiB0aGV5IGNhbiBmb3JtIGEgcnVuIHRoYXQgY2FuIGJlIGhhbmRsZWQgYXMgb25l LgotCi0gICBSZXR1cm5zIC0xIGlmIHN1Y2Nlc3NmdWwsIFJFR19FU1BBQ0UgaWYgcmFuIG91 dCBvZiBzcGFjZS4gICovCi0KLXN0YXRpYyBpbnQKLXNldF9pbWFnZV9vZl9yYW5nZV8xIChz dHJ1Y3QgcmFuZ2VfdGFibGVfd29ya19hcmVhICp3b3JrX2FyZWEsCi0JCSAgICAgIHJlX3dj aGFyX3Qgc3RhcnQsIHJlX3djaGFyX3QgZW5kLAotCQkgICAgICBSRV9UUkFOU0xBVEVfVFlQ RSB0cmFuc2xhdGUpCi17Ci0gIC8qIGBvbmVfY2FzZScgaW5kaWNhdGVzIGEgY2hhcmFjdGVy LCBvciBhIHJ1biBvZiBjaGFyYWN0ZXJzLAotICAgICBlYWNoIG9mIHdoaWNoIGlzIGFuIGlz b2xhdGUgKG5vIGNhc2UtZXF1aXZhbGVudHMpLgotICAgICBUaGlzIGluY2x1ZGVzIGFsbCBB U0NJSSBub24tbGV0dGVycy4KLQotICAgICBgdHdvX2Nhc2UnIGluZGljYXRlcyBhIGNoYXJh Y3Rlciwgb3IgYSBydW4gb2YgY2hhcmFjdGVycywKLSAgICAgZWFjaCBvZiB3aGljaCBoYXMg dHdvIGNhc2UtZXF1aXZhbGVudCBmb3Jtcy4KLSAgICAgVGhpcyBpbmNsdWRlcyBhbGwgQVND SUkgbGV0dGVycy4KLQotICAgICBgc3RyYW5nZScgaW5kaWNhdGVzIGEgY2hhcmFjdGVyIHRo YXQgaGFzIG1vcmUgdGhhbiBvbmUKLSAgICAgY2FzZS1lcXVpdmFsZW50LiAgKi8KLQotICBl bnVtIGNhc2VfdHlwZSB7b25lX2Nhc2UsIHR3b19jYXNlLCBzdHJhbmdlfTsKLQotICAvKiBE ZXNjcmliZSB0aGUgcnVuIHRoYXQgaXMgaW4gcHJvZ3Jlc3MsCi0gICAgIHdoaWNoIHRoZSBu ZXh0IGNoYXJhY3RlciBjYW4gdHJ5IHRvIGV4dGVuZC4KLSAgICAgSWYgcnVuX3R5cGUgaXMg c3RyYW5nZSwgdGhhdCBtZWFucyB0aGVyZSByZWFsbHkgaXMgbm8gcnVuLgotICAgICBJZiBy dW5fdHlwZSBpcyBvbmVfY2FzZSwgdGhlbiBydW5fc3RhcnQuLi5ydW5fZW5kIGlzIHRoZSBy dW4uCi0gICAgIElmIHJ1bl90eXBlIGlzIHR3b19jYXNlLCB0aGVuIHRoZSBydW4gaXMgcnVu X3N0YXJ0Li4ucnVuX2VuZCwKLSAgICAgYW5kIHRoZSBjYXNlLWVxdWl2YWxlbnRzIGVuZCBh dCBydW5fZXF2X2VuZC4gICovCi0KLSAgZW51bSBjYXNlX3R5cGUgcnVuX3R5cGUgPSBzdHJh bmdlOwotICBpbnQgcnVuX3N0YXJ0LCBydW5fZW5kLCBydW5fZXF2X2VuZDsKLQotICBMaXNw X09iamVjdCBlcXZfdGFibGU7Ci0KLSAgaWYgKCFSRV9UUkFOU0xBVEVfUCAodHJhbnNsYXRl KSkKLSAgICB7Ci0gICAgICBFWFRFTkRfUkFOR0VfVEFCTEUgKHdvcmtfYXJlYSwgMik7Ci0g ICAgICB3b3JrX2FyZWEtPnRhYmxlW3dvcmtfYXJlYS0+dXNlZCsrXSA9IChzdGFydCk7Ci0g ICAgICB3b3JrX2FyZWEtPnRhYmxlW3dvcmtfYXJlYS0+dXNlZCsrXSA9IChlbmQpOwotICAg ICAgcmV0dXJuIC0xOwotICAgIH0KLQotICBlcXZfdGFibGUgPSBYQ0hBUl9UQUJMRSAodHJh bnNsYXRlKS0+ZXh0cmFzWzJdOwotCi0gIGZvciAoOyBzdGFydCA8PSBlbmQ7IHN0YXJ0Kysp Ci0gICAgewotICAgICAgZW51bSBjYXNlX3R5cGUgdGhpc190eXBlOwotICAgICAgaW50IGVx diA9IFJFX1RSQU5TTEFURSAoZXF2X3RhYmxlLCBzdGFydCk7Ci0gICAgICBpbnQgbWluY2hh ciwgbWF4Y2hhcjsKLQotICAgICAgLyogQ2xhc3NpZnkgdGhpcyBjaGFyYWN0ZXIgKi8KLSAg ICAgIGlmIChlcXYgPT0gc3RhcnQpCi0JdGhpc190eXBlID0gb25lX2Nhc2U7Ci0gICAgICBl bHNlIGlmIChSRV9UUkFOU0xBVEUgKGVxdl90YWJsZSwgZXF2KSA9PSBzdGFydCkKLQl0aGlz X3R5cGUgPSB0d29fY2FzZTsKLSAgICAgIGVsc2UKLQl0aGlzX3R5cGUgPSBzdHJhbmdlOwot Ci0gICAgICBpZiAoc3RhcnQgPCBlcXYpCi0JbWluY2hhciA9IHN0YXJ0LCBtYXhjaGFyID0g ZXF2OwotICAgICAgZWxzZQotCW1pbmNoYXIgPSBlcXYsIG1heGNoYXIgPSBzdGFydDsKLQot ICAgICAgLyogQ2FuIHRoaXMgY2hhcmFjdGVyIGV4dGVuZCB0aGUgcnVuIGluIHByb2dyZXNz PyAgKi8KLSAgICAgIGlmICh0aGlzX3R5cGUgPT0gc3RyYW5nZSB8fCB0aGlzX3R5cGUgIT0g cnVuX3R5cGUKLQkgIHx8ICEobWluY2hhciA9PSBydW5fZW5kICsgMQotCSAgICAgICAmJiAo cnVuX3R5cGUgPT0gdHdvX2Nhc2UKLQkJICAgPyBtYXhjaGFyID09IHJ1bl9lcXZfZW5kICsg MSA6IDEpKSkKLQl7Ci0JICAvKiBObywgZW5kIHRoZSBydW4uCi0JICAgICBSZWNvcmQgZWFj aCBvZiBpdHMgZXF1aXZhbGVudCByYW5nZXMuICAqLwotCSAgaWYgKHJ1bl90eXBlID09IG9u ZV9jYXNlKQotCSAgICB7Ci0JICAgICAgRVhURU5EX1JBTkdFX1RBQkxFICh3b3JrX2FyZWEs IDIpOwotCSAgICAgIHdvcmtfYXJlYS0+dGFibGVbd29ya19hcmVhLT51c2VkKytdID0gcnVu X3N0YXJ0OwotCSAgICAgIHdvcmtfYXJlYS0+dGFibGVbd29ya19hcmVhLT51c2VkKytdID0g cnVuX2VuZDsKLQkgICAgfQotCSAgZWxzZSBpZiAocnVuX3R5cGUgPT0gdHdvX2Nhc2UpCi0J ICAgIHsKLQkgICAgICBFWFRFTkRfUkFOR0VfVEFCTEUgKHdvcmtfYXJlYSwgNCk7Ci0JICAg ICAgd29ya19hcmVhLT50YWJsZVt3b3JrX2FyZWEtPnVzZWQrK10gPSBydW5fc3RhcnQ7Ci0J ICAgICAgd29ya19hcmVhLT50YWJsZVt3b3JrX2FyZWEtPnVzZWQrK10gPSBydW5fZW5kOwot CSAgICAgIHdvcmtfYXJlYS0+dGFibGVbd29ya19hcmVhLT51c2VkKytdCi0JCT0gUkVfVFJB TlNMQVRFIChlcXZfdGFibGUsIHJ1bl9zdGFydCk7Ci0JICAgICAgd29ya19hcmVhLT50YWJs ZVt3b3JrX2FyZWEtPnVzZWQrK10KLQkJPSBSRV9UUkFOU0xBVEUgKGVxdl90YWJsZSwgcnVu X2VuZCk7Ci0JICAgIH0KLQkgIHJ1bl90eXBlID0gc3RyYW5nZTsKLQl9Ci0KLSAgICAgIGlm ICh0aGlzX3R5cGUgPT0gc3RyYW5nZSkKLQl7Ci0JICAvKiBGb3IgYSBzdHJhbmdlIGNoYXJh Y3RlciwgYWRkIGVhY2ggb2YgaXRzIGVxdWl2YWxlbnRzLCBvbmUKLQkgICAgIGJ5IG9uZS4g IERvbid0IHN0YXJ0IGEgcmFuZ2UuICAqLwotCSAgZG8KLQkgICAgewotCSAgICAgIEVYVEVO RF9SQU5HRV9UQUJMRSAod29ya19hcmVhLCAyKTsKLQkgICAgICB3b3JrX2FyZWEtPnRhYmxl W3dvcmtfYXJlYS0+dXNlZCsrXSA9IGVxdjsKLQkgICAgICB3b3JrX2FyZWEtPnRhYmxlW3dv cmtfYXJlYS0+dXNlZCsrXSA9IGVxdjsKLQkgICAgICBlcXYgPSBSRV9UUkFOU0xBVEUgKGVx dl90YWJsZSwgZXF2KTsKLQkgICAgfQotCSAgd2hpbGUgKGVxdiAhPSBzdGFydCk7Ci0JfQot Ci0gICAgICAvKiBBZGQgdGhpcyBjaGFyIHRvIHRoZSBydW4sIG9yIHN0YXJ0IGEgbmV3IHJ1 bi4gICovCi0gICAgICBlbHNlIGlmIChydW5fdHlwZSA9PSBzdHJhbmdlKQotCXsKLQkgIC8q IEluaXRpYWxpemUgYSBuZXcgcmFuZ2UuICAqLwotCSAgcnVuX3R5cGUgPSB0aGlzX3R5cGU7 Ci0JICBydW5fc3RhcnQgPSBzdGFydDsKLQkgIHJ1bl9lbmQgPSBzdGFydDsKLQkgIHJ1bl9l cXZfZW5kID0gUkVfVFJBTlNMQVRFIChlcXZfdGFibGUsIHJ1bl9lbmQpOwotCX0KLSAgICAg IGVsc2UKLQl7Ci0JICAvKiBFeHRlbmQgYSBydW5uaW5nIHJhbmdlLiAgKi8KLQkgIHJ1bl9l bmQgPSBtaW5jaGFyOwotCSAgcnVuX2Vxdl9lbmQgPSBSRV9UUkFOU0xBVEUgKGVxdl90YWJs ZSwgcnVuX2VuZCk7Ci0JfQotICAgIH0KLQotICAvKiBJZiBhIHJ1biBpcyBzdGlsbCBpbiBw cm9ncmVzcyBhdCB0aGUgZW5kLCBmaW5pc2ggaXQgbm93Ci0gICAgIGJ5IHJlY29yZGluZyBp dHMgZXF1aXZhbGVudCByYW5nZXMuICAqLwotICBpZiAocnVuX3R5cGUgPT0gb25lX2Nhc2Up Ci0gICAgewotICAgICAgRVhURU5EX1JBTkdFX1RBQkxFICh3b3JrX2FyZWEsIDIpOwotICAg ICAgd29ya19hcmVhLT50YWJsZVt3b3JrX2FyZWEtPnVzZWQrK10gPSBydW5fc3RhcnQ7Ci0g ICAgICB3b3JrX2FyZWEtPnRhYmxlW3dvcmtfYXJlYS0+dXNlZCsrXSA9IHJ1bl9lbmQ7Ci0g ICAgfQotICBlbHNlIGlmIChydW5fdHlwZSA9PSB0d29fY2FzZSkKLSAgICB7Ci0gICAgICBF WFRFTkRfUkFOR0VfVEFCTEUgKHdvcmtfYXJlYSwgNCk7Ci0gICAgICB3b3JrX2FyZWEtPnRh YmxlW3dvcmtfYXJlYS0+dXNlZCsrXSA9IHJ1bl9zdGFydDsKLSAgICAgIHdvcmtfYXJlYS0+ dGFibGVbd29ya19hcmVhLT51c2VkKytdID0gcnVuX2VuZDsKLSAgICAgIHdvcmtfYXJlYS0+ dGFibGVbd29ya19hcmVhLT51c2VkKytdCi0JPSBSRV9UUkFOU0xBVEUgKGVxdl90YWJsZSwg cnVuX3N0YXJ0KTsKLSAgICAgIHdvcmtfYXJlYS0+dGFibGVbd29ya19hcmVhLT51c2VkKytd Ci0JPSBSRV9UUkFOU0xBVEUgKGVxdl90YWJsZSwgcnVuX2VuZCk7Ci0gICAgfQotCi0gIHJl dHVybiAtMTsKLX0KLQotI2VuZGlmIC8qIGVtYWNzICovCi0KLS8qIFJlY29yZCB0aGUgaW1h Z2Ugb2YgdGhlIHJhbmdlIHN0YXJ0Li5lbmQgd2hlbiBwYXNzZWQgdGhyb3VnaAotICAgVFJB TlNMQVRFLiAgVGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgVFJBTlNMQVRFKHN0YXJ0KS4uVFJB TlNMQVRFKGVuZCkKLSAgIGFuZCBpcyBub3QgZXZlbiBuZWNlc3NhcmlseSBjb250aWd1b3Vz LgotICAgTm9ybWFsbHkgd2UgYXBwcm94aW1hdGUgaXQgd2l0aCB0aGUgc21hbGxlc3QgY29u dGlndW91cyByYW5nZSB0aGF0IGNvbnRhaW5zCi0gICBhbGwgdGhlIGNoYXJzIHdlIG5lZWQu ICBIb3dldmVyLCBmb3IgTGF0aW4tMSB3ZSBnbyB0byBleHRyYSBlZmZvcnQKLSAgIHRvIGRv IGEgYmV0dGVyIGpvYi4KLQotICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGZvciBB U0NJSSByYW5nZXMuCi0KLSAgIFJldHVybnMgLTEgaWYgc3VjY2Vzc2Z1bCwgUkVHX0VTUEFD RSBpZiByYW4gb3V0IG9mIHNwYWNlLiAgKi8KLQotc3RhdGljIGludAotc2V0X2ltYWdlX29m X3JhbmdlIChzdHJ1Y3QgcmFuZ2VfdGFibGVfd29ya19hcmVhICp3b3JrX2FyZWEsCi0JCSAg ICByZV93Y2hhcl90IHN0YXJ0LCByZV93Y2hhcl90IGVuZCwKLQkJICAgIFJFX1RSQU5TTEFU RV9UWVBFIHRyYW5zbGF0ZSkKLXsKLSAgcmVfd2NoYXJfdCBjbWluLCBjbWF4OwotCi0jaWZk ZWYgZW1hY3MKLSAgLyogRm9yIExhdGluLTEgcmFuZ2VzLCB1c2Ugc2V0X2ltYWdlX29mX3Jh bmdlXzEKLSAgICAgdG8gZ2V0IHByb3BlciBoYW5kbGluZyBvZiByYW5nZXMgdGhhdCBpbmNs dWRlIGxldHRlcnMgYW5kIG5vbmxldHRlcnMuCi0gICAgIEZvciBhIHJhbmdlIHRoYXQgaW5j bHVkZXMgdGhlIHdob2xlIG9mIExhdGluLTEsIHRoaXMgaXMgbm90IG5lY2Vzc2FyeS4KLSAg ICAgRm9yIG90aGVyIGNoYXJhY3RlciBzZXRzLCB3ZSBkb24ndCBib3RoZXIgdG8gZ2V0IHRo aXMgcmlnaHQuICAqLwotICBpZiAoUkVfVFJBTlNMQVRFX1AgKHRyYW5zbGF0ZSkgJiYgc3Rh cnQgPCAwNDQwMAotICAgICAgJiYgIShzdGFydCA8IDA0MjAwICYmIGVuZCA+PSAwNDM3Nykp Ci0gICAgewotICAgICAgaW50IG5ld2VuZDsKLSAgICAgIGludCB0ZW07Ci0gICAgICBuZXdl bmQgPSBlbmQ7Ci0gICAgICBpZiAobmV3ZW5kID4gMDQzNzcpCi0JbmV3ZW5kID0gMDQzNzc7 Ci0gICAgICB0ZW0gPSBzZXRfaW1hZ2Vfb2ZfcmFuZ2VfMSAod29ya19hcmVhLCBzdGFydCwg bmV3ZW5kLCB0cmFuc2xhdGUpOwotICAgICAgaWYgKHRlbSA+IDApCi0JcmV0dXJuIHRlbTsK LQotICAgICAgc3RhcnQgPSAwNDQwMDsKLSAgICAgIGlmIChlbmQgPCAwNDQwMCkKLQlyZXR1 cm4gLTE7Ci0gICAgfQotI2VuZGlmCi0KLSAgRVhURU5EX1JBTkdFX1RBQkxFICh3b3JrX2Fy ZWEsIDIpOwotICB3b3JrX2FyZWEtPnRhYmxlW3dvcmtfYXJlYS0+dXNlZCsrXSA9IChzdGFy dCk7Ci0gIHdvcmtfYXJlYS0+dGFibGVbd29ya19hcmVhLT51c2VkKytdID0gKGVuZCk7Ci0K LSAgY21pbiA9IC0xLCBjbWF4ID0gLTE7Ci0KLSAgaWYgKFJFX1RSQU5TTEFURV9QICh0cmFu c2xhdGUpKQotICAgIHsKLSAgICAgIGludCBjaDsKLQotICAgICAgZm9yIChjaCA9IHN0YXJ0 OyBjaCA8PSBlbmQ7IGNoKyspCi0JewotCSAgcmVfd2NoYXJfdCBjID0gVFJBTlNMQVRFIChj aCk7Ci0JICBpZiAoISAoc3RhcnQgPD0gYyAmJiBjIDw9IGVuZCkpCi0JICAgIHsKLQkgICAg ICBpZiAoY21pbiA9PSAtMSkKLQkJY21pbiA9IGMsIGNtYXggPSBjOwotCSAgICAgIGVsc2UK LQkJewotCQkgIGNtaW4gPSBtaW4gKGNtaW4sIGMpOwotCQkgIGNtYXggPSBtYXggKGNtYXgs IGMpOwotCQl9Ci0JICAgIH0KLQl9Ci0KLSAgICAgIGlmIChjbWluICE9IC0xKQotCXsKLQkg IEVYVEVORF9SQU5HRV9UQUJMRSAod29ya19hcmVhLCAyKTsKLQkgIHdvcmtfYXJlYS0+dGFi bGVbd29ya19hcmVhLT51c2VkKytdID0gKGNtaW4pOwotCSAgd29ya19hcmVhLT50YWJsZVt3 b3JrX2FyZWEtPnVzZWQrK10gPSAoY21heCk7Ci0JfQotICAgIH0KLQotICByZXR1cm4gLTE7 Ci19Ci0jZW5kaWYJLyogMCAqLwotDAotI2lmbmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUKLQot LyogSWYgd2UgY2Fubm90IGFsbG9jYXRlIGxhcmdlIG9iamVjdHMgd2l0aGluIHJlX21hdGNo XzJfaW50ZXJuYWwsCi0gICB3ZSBtYWtlIHRoZSBmYWlsIHN0YWNrIGFuZCByZWdpc3RlciB2 ZWN0b3JzIGdsb2JhbC4KLSAgIFRoZSBmYWlsIHN0YWNrLCB3ZSBncm93IHRvIHRoZSBtYXhp bXVtIHNpemUgd2hlbiBhIHJlZ2V4cAotICAgaXMgY29tcGlsZWQuCi0gICBUaGUgcmVnaXN0 ZXIgdmVjdG9ycywgd2UgYWRqdXN0IGluIHNpemUgZWFjaCB0aW1lIHdlCi0gICBjb21waWxl IGEgcmVnZXhwLCBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBvZiByZWdpc3RlcnMgaXQgbmVl ZHMuICAqLwotCi1zdGF0aWMgZmFpbF9zdGFja190eXBlIGZhaWxfc3RhY2s7Ci0KLS8qIFNp emUgd2l0aCB3aGljaCB0aGUgZm9sbG93aW5nIHZlY3RvcnMgYXJlIGN1cnJlbnRseSBhbGxv Y2F0ZWQuCi0gICBUaGF0IGlzIHNvIHdlIGNhbiBtYWtlIHRoZW0gYmlnZ2VyIGFzIG5lZWRl ZCwKLSAgIGJ1dCBuZXZlciBtYWtlIHRoZW0gc21hbGxlci4gICovCi1zdGF0aWMgaW50IHJl Z3NfYWxsb2NhdGVkX3NpemU7Ci0KLXN0YXRpYyByZV9jaGFyICoqICAgICByZWdzdGFydCwg KiogICAgIHJlZ2VuZDsKLXN0YXRpYyByZV9jaGFyICoqYmVzdF9yZWdzdGFydCwgKipiZXN0 X3JlZ2VuZDsKLQotLyogTWFrZSB0aGUgcmVnaXN0ZXIgdmVjdG9ycyBiaWcgZW5vdWdoIGZv ciBOVU1fUkVHUyByZWdpc3RlcnMsCi0gICBidXQgZG9uJ3QgbWFrZSB0aGVtIHNtYWxsZXIu ICAqLwotCi1zdGF0aWMKLXJlZ2V4X2dyb3dfcmVnaXN0ZXJzIChpbnQgbnVtX3JlZ3MpCi17 Ci0gIGlmIChudW1fcmVncyA+IHJlZ3NfYWxsb2NhdGVkX3NpemUpCi0gICAgewotICAgICAg UkVUQUxMT0NfSUYgKHJlZ3N0YXJ0LAkgbnVtX3JlZ3MsIHJlX2NoYXIgKik7Ci0gICAgICBS RVRBTExPQ19JRiAocmVnZW5kLAkgbnVtX3JlZ3MsIHJlX2NoYXIgKik7Ci0gICAgICBSRVRB TExPQ19JRiAoYmVzdF9yZWdzdGFydCwgbnVtX3JlZ3MsIHJlX2NoYXIgKik7Ci0gICAgICBS RVRBTExPQ19JRiAoYmVzdF9yZWdlbmQsCSBudW1fcmVncywgcmVfY2hhciAqKTsKLQotICAg ICAgcmVnc19hbGxvY2F0ZWRfc2l6ZSA9IG51bV9yZWdzOwotICAgIH0KLX0KLQotI2VuZGlm IC8qIG5vdCBNQVRDSF9NQVlfQUxMT0NBVEUgKi8KIAwKLXN0YXRpYyBib29sZWFuIGdyb3Vw X2luX2NvbXBpbGVfc3RhY2sgKGNvbXBpbGVfc3RhY2tfdHlwZSBjb21waWxlX3N0YWNrLAot CQkJCSAgICAgICByZWdudW1fdCByZWdudW0pOworc3RhdGljIGJvb2wgZ3JvdXBfaW5fY29t cGlsZV9zdGFjayAoY29tcGlsZV9zdGFja190eXBlLCByZWdudW1fdCk7CiAKIC8qIGByZWdl eF9jb21waWxlJyBjb21waWxlcyBQQVRURVJOIChvZiBsZW5ndGggU0laRSkgYWNjb3JkaW5n IHRvIFNZTlRBWC4KICAgIFJldHVybnMgb25lIG9mIGVycm9yIGNvZGVzIGRlZmluZWQgaW4g cmVnZXgtZW1hY3MuaCwgb3IgemVybyBmb3Igc3VjY2Vzcy4KIAotICAgSWYgV0hJVEVTUEFD RV9SRUdFWFAgaXMgZ2l2ZW4gKG9ubHkgI2lmZGVmIGVtYWNzKSwgaXQgaXMgdXNlZCBpbnN0 ZWFkIG9mCisgICBJZiBXSElURVNQQUNFX1JFR0VYUCBpcyBnaXZlbiwgaXQgaXMgdXNlZCBp bnN0ZWFkIG9mCiAgICBhIHNwYWNlIGNoYXJhY3RlciBpbiBQQVRURVJOLgogCiAgICBBc3N1 bWVzIHRoZSBgYWxsb2NhdGVkJyAoYW5kIHBlcmhhcHMgYGJ1ZmZlcicpIGFuZCBgdHJhbnNs YXRlJwpAQCAtMjQwMyw0MiArMTQzOCwzMyBAQCBkbyB7CQkJCQkJCQkJXAogI2RlZmluZSBG UkVFX1NUQUNLX1JFVFVSTih2YWx1ZSkJCVwKICAgZG8gewkJCQkJCQlcCiAgICAgRlJFRV9S QU5HRV9UQUJMRV9XT1JLX0FSRUEgKHJhbmdlX3RhYmxlX3dvcmspOwlcCi0gICAgZnJlZSAo Y29tcGlsZV9zdGFjay5zdGFjayk7CQkJCVwKKyAgICB4ZnJlZSAoY29tcGlsZV9zdGFjay5z dGFjayk7CQkJXAogICAgIHJldHVybiB2YWx1ZTsJCQkJCVwKICAgfSB3aGlsZSAoMCkKIAog c3RhdGljIHJlZ19lcnJjb2RlX3QKIHJlZ2V4X2NvbXBpbGUgKHJlX2NoYXIgKnBhdHRlcm4s IHNpemVfdCBzaXplLAotI2lmZGVmIGVtYWNzCi0jIGRlZmluZSBzeW50YXggUkVfU1lOVEFY X0VNQUNTCiAJICAgICAgIGJvb2wgcG9zaXhfYmFja3RyYWNraW5nLAogCSAgICAgICBjb25z dCBjaGFyICp3aGl0ZXNwYWNlX3JlZ2V4cCwKLSNlbHNlCi0JICAgICAgIHJlZ19zeW50YXhf dCBzeW50YXgsCi0jIGRlZmluZSBwb3NpeF9iYWNrdHJhY2tpbmcgKCEoc3ludGF4ICYgUkVf Tk9fUE9TSVhfQkFDS1RSQUNLSU5HKSkKLSNlbmRpZgogCSAgICAgICBzdHJ1Y3QgcmVfcGF0 dGVybl9idWZmZXIgKmJ1ZnApCiB7CisgIHJlZ19zeW50YXhfdCBzeW50YXggPSBSRV9TWU5U QVhfRU1BQ1M7CisKICAgLyogV2UgZmV0Y2ggY2hhcmFjdGVycyBmcm9tIFBBVFRFUk4gaGVy ZS4gICovCi0gIHJlZ2lzdGVyIHJlX3djaGFyX3QgYywgYzE7CisgIGludCBjLCBjMTsKIAog ICAvKiBQb2ludHMgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCB3aGVyZSB3ZSBzaG91bGQg YXBwZW5kLiAgKi8KLSAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqYjsKKyAgdW5zaWduZWQg Y2hhciAqYjsKIAogICAvKiBLZWVwcyB0cmFjayBvZiB1bmNsb3NlZCBncm91cHMuICAqLwog ICBjb21waWxlX3N0YWNrX3R5cGUgY29tcGlsZV9zdGFjazsKIAogICAvKiBQb2ludHMgdG8g dGhlIGN1cnJlbnQgKGVuZGluZykgcG9zaXRpb24gaW4gdGhlIHBhdHRlcm4uICAqLwotI2lm ZGVmIEFJWAotICAvKiBgY29uc3QnIG1ha2VzIEFJWCBjb21waWxlciBmYWlsLiAgKi8KLSAg dW5zaWduZWQgY2hhciAqcCA9IHBhdHRlcm47Ci0jZWxzZQogICByZV9jaGFyICpwID0gcGF0 dGVybjsKLSNlbmRpZgogICByZV9jaGFyICpwZW5kID0gcGF0dGVybiArIHNpemU7CiAKICAg LyogSG93IHRvIHRyYW5zbGF0ZSB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcGF0dGVybi4gICov Ci0gIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0ZSA9IGJ1ZnAtPnRyYW5zbGF0ZTsKKyAg TGlzcF9PYmplY3QgdHJhbnNsYXRlID0gYnVmcC0+dHJhbnNsYXRlOwogCiAgIC8qIEFkZHJl c3Mgb2YgdGhlIGNvdW50LWJ5dGUgb2YgdGhlIG1vc3QgcmVjZW50bHkgaW5zZXJ0ZWQgYGV4 YWN0bicKICAgICAgY29tbWFuZC4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gdGVsbCBp ZiBhIG5ldyBleGFjdC1tYXRjaApAQCAtMjQ2Nyw5ICsxNDkzLDggQEAgcmVnZXhfY29tcGls ZSAocmVfY2hhciAqcGF0dGVybiwgc2l6ZV90IHNpemUsCiAgIHN0cnVjdCByYW5nZV90YWJs ZV93b3JrX2FyZWEgcmFuZ2VfdGFibGVfd29yazsKIAogICAvKiBJZiB0aGUgb2JqZWN0IG1h dGNoZWQgY2FuIGNvbnRhaW4gbXVsdGlieXRlIGNoYXJhY3RlcnMuICAqLwotICBjb25zdCBi b29sZWFuIG11bHRpYnl0ZSA9IFJFX01VTFRJQllURV9QIChidWZwKTsKKyAgYm9vbCBtdWx0 aWJ5dGUgPSBSRV9NVUxUSUJZVEVfUCAoYnVmcCk7CiAKLSNpZmRlZiBlbWFjcwogICAvKiBO b256ZXJvIGlmIHdlIGhhdmUgcHVzaGVkIGRvd24gaW50byBhIHN1YnBhdHRlcm4uICAqLwog ICBpbnQgaW5fc3VicGF0dGVybiA9IDA7CiAKQEAgLTI0NzgsMjYgKzE1MDMsOSBAQCByZWdl eF9jb21waWxlIChyZV9jaGFyICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSwKICAgcmVfY2hhciAq bWFpbl9wOwogICByZV9jaGFyICptYWluX3BhdHRlcm47CiAgIHJlX2NoYXIgKm1haW5fcGVu ZDsKLSNlbmRpZgotCi0jaWZkZWYgREVCVUcKLSAgZGVidWcrKzsKLSAgREVCVUdfUFJJTlQg KCJcbkNvbXBpbGluZyBwYXR0ZXJuOiAiKTsKLSAgaWYgKGRlYnVnID4gMCkKLSAgICB7Ci0g ICAgICB1bnNpZ25lZCBkZWJ1Z19jb3VudDsKLQotICAgICAgZm9yIChkZWJ1Z19jb3VudCA9 IDA7IGRlYnVnX2NvdW50IDwgc2l6ZTsgZGVidWdfY291bnQrKykKLQlwdXRjaGFyIChwYXR0 ZXJuW2RlYnVnX2NvdW50XSk7Ci0gICAgICBwdXRjaGFyICgnXG4nKTsKLSAgICB9Ci0jZW5k aWYgLyogREVCVUcgKi8KIAogICAvKiBJbml0aWFsaXplIHRoZSBjb21waWxlIHN0YWNrLiAg Ki8KICAgY29tcGlsZV9zdGFjay5zdGFjayA9IFRBTExPQyAoSU5JVF9DT01QSUxFX1NUQUNL X1NJWkUsIGNvbXBpbGVfc3RhY2tfZWx0X3QpOwotICBpZiAoY29tcGlsZV9zdGFjay5zdGFj ayA9PSBOVUxMKQotICAgIHJldHVybiBSRUdfRVNQQUNFOwotCiAgIGNvbXBpbGVfc3RhY2su c2l6ZSA9IElOSVRfQ09NUElMRV9TVEFDS19TSVpFOwogICBjb21waWxlX3N0YWNrLmF2YWls ID0gMDsKIApAQCAtMjUwNSw5ICsxNTEzLDYgQEAgcmVnZXhfY29tcGlsZSAocmVfY2hhciAq cGF0dGVybiwgc2l6ZV90IHNpemUsCiAgIHJhbmdlX3RhYmxlX3dvcmsuYWxsb2NhdGVkID0g MDsKIAogICAvKiBJbml0aWFsaXplIHRoZSBwYXR0ZXJuIGJ1ZmZlci4gICovCi0jaWZuZGVm IGVtYWNzCi0gIGJ1ZnAtPnN5bnRheCA9IHN5bnRheDsKLSNlbmRpZgogICBidWZwLT5mYXN0 bWFwX2FjY3VyYXRlID0gMDsKICAgYnVmcC0+bm90X2JvbCA9IGJ1ZnAtPm5vdF9lb2wgPSAw OwogICBidWZwLT51c2VkX3N5bnRheCA9IDA7CkBAIC0yNTIwLDExICsxNTI1LDYgQEAgcmVn ZXhfY29tcGlsZSAocmVfY2hhciAqcGF0dGVybiwgc2l6ZV90IHNpemUsCiAgIC8qIEFsd2F5 cyBjb3VudCBncm91cHMsIHdoZXRoZXIgb3Igbm90IGJ1ZnAtPm5vX3N1YiBpcyBzZXQuICAq LwogICBidWZwLT5yZV9uc3ViID0gMDsKIAotI2lmICFkZWZpbmVkIGVtYWNzICYmICFkZWZp bmVkIFNZTlRBWF9UQUJMRQotICAvKiBJbml0aWFsaXplIHRoZSBzeW50YXggdGFibGUuICAq LwotICAgaW5pdF9zeW50YXhfb25jZSAoKTsKLSNlbmRpZgotCiAgIGlmIChidWZwLT5hbGxv Y2F0ZWQgPT0gMCkKICAgICB7CiAgICAgICBpZiAoYnVmcC0+YnVmZmVyKQpAQCAtMjUzNyw4 ICsxNTM3LDYgQEAgcmVnZXhfY29tcGlsZSAocmVfY2hhciAqcGF0dGVybiwgc2l6ZV90IHNp emUsCiAJeyAvKiBDYWxsZXIgZGlkIG5vdCBhbGxvY2F0ZSBhIGJ1ZmZlci4gIERvIGl0IGZv ciB0aGVtLiAgKi8KIAkgIGJ1ZnAtPmJ1ZmZlciA9IFRBTExPQyAoSU5JVF9CVUZfU0laRSwg dW5zaWduZWQgY2hhcik7CiAJfQotICAgICAgaWYgKCFidWZwLT5idWZmZXIpIEZSRUVfU1RB Q0tfUkVUVVJOIChSRUdfRVNQQUNFKTsKLQogICAgICAgYnVmcC0+YWxsb2NhdGVkID0gSU5J VF9CVUZfU0laRTsKICAgICB9CiAKQEAgLTI1NDksNyArMTU0Nyw2IEBAIHJlZ2V4X2NvbXBp bGUgKHJlX2NoYXIgKnBhdHRlcm4sIHNpemVfdCBzaXplLAogICAgIHsKICAgICAgIGlmIChw ID09IHBlbmQpCiAJewotI2lmZGVmIGVtYWNzCiAJICAvKiBJZiB0aGlzIGlzIHRoZSBlbmQg b2YgYW4gaW5jbHVkZWQgcmVnZXhwLAogCSAgICAgcG9wIGJhY2sgdG8gdGhlIG1haW4gcmVn ZXhwIGFuZCB0cnkgYWdhaW4uICAqLwogCSAgaWYgKGluX3N1YnBhdHRlcm4pCkBAIC0yNTYw LDcgKzE1NTcsNiBAQCByZWdleF9jb21waWxlIChyZV9jaGFyICpwYXR0ZXJuLCBzaXplX3Qg c2l6ZSwKIAkgICAgICBwZW5kID0gbWFpbl9wZW5kOwogCSAgICAgIGNvbnRpbnVlOwogCSAg ICB9Ci0jZW5kaWYKIAkgIC8qIElmIHRoaXMgaXMgdGhlIGVuZCBvZiB0aGUgbWFpbiByZWdl eHAsIHdlIGFyZSBkb25lLiAgKi8KIAkgIGJyZWFrOwogCX0KQEAgLTI1NjksNyArMTU2NSw2 IEBAIHJlZ2V4X2NvbXBpbGUgKHJlX2NoYXIgKnBhdHRlcm4sIHNpemVfdCBzaXplLAogCiAg ICAgICBzd2l0Y2ggKGMpCiAJewotI2lmZGVmIGVtYWNzCiAJY2FzZSAnICc6CiAJICB7CiAJ ICAgIHJlX2NoYXIgKnAxID0gcDsKQEAgLTI2MDIsNyArMTU5Nyw2IEBAIHJlZ2V4X2NvbXBp bGUgKHJlX2NoYXIgKnBhdHRlcm4sIHNpemVfdCBzaXplLAogCSAgICBwZW5kID0gcCArIHN0 cmxlbiAod2hpdGVzcGFjZV9yZWdleHApOwogCSAgICBicmVhazsKIAkgIH0KLSNlbmRpZgog CiAJY2FzZSAnXic6CiAJICB7CkBAIC0yNjUzLDggKzE2NDcsOCBAQCByZWdleF9jb21waWxl IChyZV9jaGFyICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSwKIAogCSAgewogCSAgICAvKiAxIG1l YW5zIHplcm8gKG1hbnkpIG1hdGNoZXMgaXMgYWxsb3dlZC4gICovCi0JICAgIGJvb2xlYW4g emVyb190aW1lc19vayA9IDAsIG1hbnlfdGltZXNfb2sgPSAwOwotCSAgICBib29sZWFuIGdy ZWVkeSA9IDE7CisJICAgIGJvb2wgemVyb190aW1lc19vayA9IGZhbHNlLCBtYW55X3RpbWVz X29rID0gZmFsc2U7CisJICAgIGJvb2wgZ3JlZWR5ID0gdHJ1ZTsKIAogCSAgICAvKiBJZiB0 aGVyZSBpcyBhIHNlcXVlbmNlIG9mIHJlcGV0aXRpb24gY2hhcnMsIGNvbGxhcHNlIGl0CiAJ ICAgICAgIGRvd24gdG8ganVzdCBvbmUgKHRoZSByaWdodCBvbmUpLiAgV2UgY2FuJ3QgY29t YmluZQpAQCAtMjY2NSw3ICsxNjU5LDcgQEAgcmVnZXhfY29tcGlsZSAocmVfY2hhciAqcGF0 dGVybiwgc2l6ZV90IHNpemUsCiAJICAgICAgewogCQlpZiAoKHN5bnRheCAmIFJFX0ZSVUdB TCkKIAkJICAgICYmIGMgPT0gJz8nICYmICh6ZXJvX3RpbWVzX29rIHx8IG1hbnlfdGltZXNf b2spKQotCQkgIGdyZWVkeSA9IDA7CisJCSAgZ3JlZWR5ID0gZmFsc2U7CiAJCWVsc2UKIAkJ ICB7CiAJCSAgICB6ZXJvX3RpbWVzX29rIHw9IGMgIT0gJysnOwpAQCAtMjcwNCwxMyArMTY5 OCwxMyBAQCByZWdleF9jb21waWxlIChyZV9jaGFyICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSwK IAkgICAgICB7CiAJCWlmIChtYW55X3RpbWVzX29rKQogCQkgIHsKLQkJICAgIGJvb2xlYW4g c2ltcGxlID0gc2tpcF9vbmVfY2hhciAobGFzdHN0YXJ0KSA9PSBiOworCQkgICAgYm9vbCBz aW1wbGUgPSBza2lwX29uZV9jaGFyIChsYXN0c3RhcnQpID09IGI7CiAJCSAgICBzaXplX3Qg c3RhcnRvZmZzZXQgPSAwOwogCQkgICAgcmVfb3Bjb2RlX3Qgb2ZqID0KIAkJICAgICAgLyog Q2hlY2sgaWYgdGhlIGxvb3AgY2FuIG1hdGNoIHRoZSBlbXB0eSBzdHJpbmcuICAqLwogCQkg ICAgICAoc2ltcGxlIHx8ICFhbmFseXplX2ZpcnN0IChsYXN0c3RhcnQsIGIsIE5VTEwsIDAp KQogCQkgICAgICA/IG9uX2ZhaWx1cmVfanVtcCA6IG9uX2ZhaWx1cmVfanVtcF9sb29wOwot CQkgICAgYXNzZXJ0IChza2lwX29uZV9jaGFyIChsYXN0c3RhcnQpIDw9IGIpOworCQkgICAg ZWFzc2VydCAoc2tpcF9vbmVfY2hhciAobGFzdHN0YXJ0KSA8PSBiKTsKIAogCQkgICAgaWYg KCF6ZXJvX3RpbWVzX29rICYmIHNpbXBsZSkKIAkJICAgICAgeyAvKiBTaW5jZSBzaW1wbGUg KiBsb29wcyBjYW4gYmUgbWFkZSBmYXN0ZXIgYnkgdXNpbmcKQEAgLTI3NDMsNyArMTczNyw3 IEBAIHJlZ2V4X2NvbXBpbGUgKHJlX2NoYXIgKnBhdHRlcm4sIHNpemVfdCBzaXplLAogCQll bHNlCiAJCSAgewogCQkgICAgLyogQSBzaW1wbGUgPyBwYXR0ZXJuLiAgKi8KLQkJICAgIGFz c2VydCAoemVyb190aW1lc19vayk7CisJCSAgICBlYXNzZXJ0ICh6ZXJvX3RpbWVzX29rKTsK IAkJICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDMpOwogCQkgICAgSU5TRVJUX0pVTVAgKG9uX2Zh aWx1cmVfanVtcCwgbGFzdHN0YXJ0LCBiICsgMyk7CiAJCSAgICBiICs9IDM7CkBAIC0yNzU1 LDcgKzE3NDksNyBAQCByZWdleF9jb21waWxlIChyZV9jaGFyICpwYXR0ZXJuLCBzaXplX3Qg c2l6ZSwKIAkJR0VUX0JVRkZFUl9TUEFDRSAoNyk7IC8qIFdlIG1pZ2h0IHVzZSBsZXNzLiAg Ki8KIAkJaWYgKG1hbnlfdGltZXNfb2spCiAJCSAgewotCQkgICAgYm9vbGVhbiBlbXB0eXAg PSBhbmFseXplX2ZpcnN0IChsYXN0c3RhcnQsIGIsIE5VTEwsIDApOworCQkgICAgYm9vbCBl bXB0eXAgPSBhbmFseXplX2ZpcnN0IChsYXN0c3RhcnQsIGIsIE5VTEwsIDApOwogCiAJCSAg ICAvKiBUaGUgbm9uLWdyZWVkeSBtdWx0aXBsZSBtYXRjaCBsb29rcyBsaWtlCiAJCSAgICAg ICBhIHJlcGVhdC4udW50aWw6IHdlIG9ubHkgbmVlZCBhIGNvbmRpdGlvbmFsIGp1bXAKQEAg LTI4MzAsMTAgKzE4MjQsOSBAQCByZWdleF9jb21waWxlIChyZV9jaGFyICpwYXR0ZXJuLCBz aXplX3Qgc2l6ZSwKIAkgICAgLyogUmVhZCBpbiBjaGFyYWN0ZXJzIGFuZCByYW5nZXMsIHNl dHRpbmcgbWFwIGJpdHMuICAqLwogCSAgICBmb3IgKDs7KQogCSAgICAgIHsKLQkJYm9vbGVh biBlc2NhcGVkX2NoYXIgPSBmYWxzZTsKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqcDIgPSBw OwogCQlyZV93Y3R5cGVfdCBjYzsKLQkJcmVfd2NoYXJfdCBjaDsKKwkJaW50IGNoOwogCiAJ CWlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKIApAQCAt Mjg0OCwxNSArMTg0MSw2IEBAIHJlZ2V4X2NvbXBpbGUgKHJlX2NoYXIgKnBhdHRlcm4sIHNp emVfdCBzaXplLAogCQkgICAgaWYgKHAgPT0gcGVuZCkKIAkJICAgICAgRlJFRV9TVEFDS19S RVRVUk4gKFJFR19FQlJBQ0spOwogCi0jaWZuZGVmIGVtYWNzCi0JCSAgICBmb3IgKGNoID0g MDsgY2ggPCAoMSA8PCBCWVRFV0lEVEgpOyArK2NoKQotCQkgICAgICBpZiAocmVfaXN3Y3R5 cGUgKGJ0b3djIChjaCksIGNjKSkKLQkJCXsKLQkJCSAgYyA9IFRSQU5TTEFURSAoY2gpOwot CQkJICBpZiAoYyA8ICgxIDw8IEJZVEVXSURUSCkpCi0JCQkgICAgU0VUX0xJU1RfQklUIChj KTsKLQkJCX0KLSNlbHNlICAvKiBlbWFjcyAqLwogCQkgICAgLyogTW9zdCBjaGFyYWN0ZXIg Y2xhc3NlcyBpbiBhIG11bHRpYnl0ZSBtYXRjaCBqdXN0IHNldAogCQkgICAgICAgYSBmbGFn LiAgRXhjZXB0aW9ucyBhcmUgaXNfYmxhbmssIGlzX2RpZ2l0LCBpc19jbnRybCwgYW5kCiAJ CSAgICAgICBpc194ZGlnaXQsIHNpbmNlIHRoZXkgY2FuIG9ubHkgbWF0Y2ggQVNDSUkgY2hh cmFjdGVycy4KQEAgLTI4ODMsNyArMTg2Nyw3IEBAIHJlZ2V4X2NvbXBpbGUgKHJlX2NoYXIg KnBhdHRlcm4sIHNpemVfdCBzaXplLAogCQkJfQogCQkgICAgU0VUX1JBTkdFX1RBQkxFX1dP UktfQVJFQV9CSVQKIAkJICAgICAgKHJhbmdlX3RhYmxlX3dvcmssIHJlX3djdHlwZV90b19i aXQgKGNjKSk7Ci0jZW5kaWYJLyogZW1hY3MgKi8KKwogCQkgICAgLyogSW4gbW9zdCBjYXNl cyB0aGUgbWF0Y2hpbmcgcnVsZSBmb3IgY2hhciBjbGFzc2VzIG9ubHkKIAkJICAgICAgIHVz ZXMgdGhlIHN5bnRheCB0YWJsZSBmb3IgbXVsdGlieXRlIGNoYXJzLCBzbyB0aGF0IHRoZQog CQkgICAgICAgY29udGVudCBvZiB0aGUgc3ludGF4LXRhYmxlIGlzIG5vdCBoYXJkY29kZWQg aW4gdGhlCkBAIC0yOTA3LDcgKzE4OTEsNiBAQCByZWdleF9jb21waWxlIChyZV9jaGFyICpw YXR0ZXJuLCBzaXplX3Qgc2l6ZSwKIAkJICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tf UkVUVVJOIChSRUdfRUVTQ0FQRSk7CiAKIAkJICAgIFBBVEZFVENIIChjKTsKLQkJICAgIGVz Y2FwZWRfY2hhciA9IHRydWU7CiAJCSAgfQogCQllbHNlCiAJCSAgewpAQCAtMjkyNiwxMyAr MTkwOSwxMiBAQCByZWdleF9jb21waWxlIChyZV9jaGFyICpwYXR0ZXJuLCBzaXplX3Qgc2l6 ZSwKIAogCQkgICAgLyogRmV0Y2ggdGhlIGNoYXJhY3RlciB3aGljaCBlbmRzIHRoZSByYW5n ZS4gKi8KIAkJICAgIFBBVEZFVENIIChjMSk7Ci0jaWZkZWYgZW1hY3MKKwogCQkgICAgaWYg KENIQVJfQllURThfUCAoYzEpCiAJCQkmJiAhIEFTQ0lJX0NIQVJfUCAoYykgJiYgISBDSEFS X0JZVEU4X1AgKGMpKQogCQkgICAgICAvKiBUcmVhdCB0aGUgcmFuZ2UgZnJvbSBhIG11bHRp Ynl0ZSBjaGFyYWN0ZXIgdG8KIAkJCSByYXctYnl0ZSBjaGFyYWN0ZXIgYXMgZW1wdHkuICAq LwogCQkgICAgICBjID0gYzEgKyAxOwotI2VuZGlmCS8qIGVtYWNzICovCiAJCSAgfQogCQll bHNlCiAJCSAgLyogUmFuZ2UgZnJvbSBDIHRvIEMuICovCkBAIC0yOTQ2LDE1ICsxOTI4LDYg QEAgcmVnZXhfY29tcGlsZSAocmVfY2hhciAqcGF0dGVybiwgc2l6ZV90IHNpemUsCiAJCSAg fQogCQllbHNlCiAJCSAgewotI2lmbmRlZiBlbWFjcwotCQkgICAgLyogU2V0IHRoZSByYW5n ZSBpbnRvIGJpdG1hcCAqLwotCQkgICAgZm9yICg7IGMgPD0gYzE7IGMrKykKLQkJICAgICAg ewotCQkJY2ggPSBUUkFOU0xBVEUgKGMpOwotCQkJaWYgKGNoIDwgKDEgPDwgQllURVdJRFRI KSkKLQkJCSAgU0VUX0xJU1RfQklUIChjaCk7Ci0JCSAgICAgIH0KLSNlbHNlICAvKiBlbWFj cyAqLwogCQkgICAgaWYgKGMgPCAxMjgpCiAJCSAgICAgIHsKIAkJCWNoID0gbWluICgxMjcs IGMxKTsKQEAgLTI5ODEsNyArMTk1NCw2IEBAIHJlZ2V4X2NvbXBpbGUgKHJlX2NoYXIgKnBh dHRlcm4sIHNpemVfdCBzaXplLAogCQkJICAgIFNFVFVQX1VOSUJZVEVfUkFOR0UgKHJhbmdl X3RhYmxlX3dvcmssIGMsIGMxKTsKIAkJCSAgfQogCQkgICAgICB9Ci0jZW5kaWYgLyogZW1h Y3MgKi8KIAkJICB9CiAJICAgICAgfQogCkBAIC0zMDA2LDggKzE5NzgsNyBAQCByZWdleF9j b21waWxlIChyZV9jaGFyICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSwKIAkJLyogSW5kaWNhdGUg dGhlIGV4aXN0ZW5jZSBvZiByYW5nZSB0YWJsZS4gICovCiAJCWxhc3RzdGFydFsxXSB8PSAw eDgwOwogCi0JCS8qIFN0b3JlIHRoZSBjaGFyYWN0ZXIgY2xhc3MgZmxhZyBiaXRzIGludG8g dGhlIHJhbmdlIHRhYmxlLgotCQkgICBJZiBub3QgaW4gZW1hY3MsIHRoZXNlIGZsYWcgYml0 cyBhcmUgYWx3YXlzIDAuICAqLworCQkvKiBTdG9yZSB0aGUgY2hhcmFjdGVyIGNsYXNzIGZs YWcgYml0cyBpbnRvIHRoZSByYW5nZSB0YWJsZS4gICovCiAJCSpiKysgPSBSQU5HRV9UQUJM RV9XT1JLX0JJVFMgKHJhbmdlX3RhYmxlX3dvcmspICYgMHhmZjsKIAkJKmIrKyA9IFJBTkdF X1RBQkxFX1dPUktfQklUUyAocmFuZ2VfdGFibGVfd29yaykgPj4gODsKIApAQCAtMzEyNiw4 ICsyMDk3LDYgQEAgcmVnZXhfY29tcGlsZSAocmVfY2hhciAqcGF0dGVybiwgc2l6ZV90IHNp emUsCiAJCSAgewogCQkgICAgUkVUQUxMT0MgKGNvbXBpbGVfc3RhY2suc3RhY2ssIGNvbXBp bGVfc3RhY2suc2l6ZSA8PCAxLAogCQkJICAgICAgY29tcGlsZV9zdGFja19lbHRfdCk7Ci0J CSAgICBpZiAoY29tcGlsZV9zdGFjay5zdGFjayA9PSBOVUxMKSByZXR1cm4gUkVHX0VTUEFD RTsKLQogCQkgICAgY29tcGlsZV9zdGFjay5zaXplIDw8PSAxOwogCQkgIH0KIApAQCAtMzE4 Myw3ICsyMTUyLDcgQEAgcmVnZXhfY29tcGlsZSAocmVfY2hhciAqcGF0dGVybiwgc2l6ZV90 IHNpemUsCiAKIAkgICAgICAvKiBTaW5jZSB3ZSBqdXN0IGNoZWNrZWQgZm9yIGFuIGVtcHR5 IHN0YWNrIGFib3ZlLCB0aGlzCiAJCSBgYGNhbid0IGhhcHBlbicnLiAgKi8KLQkgICAgICBh c3NlcnQgKGNvbXBpbGVfc3RhY2suYXZhaWwgIT0gMCk7CisJICAgICAgZWFzc2VydCAoY29t cGlsZV9zdGFjay5hdmFpbCAhPSAwKTsKIAkgICAgICB7CiAJCS8qIFdlIGRvbid0IGp1c3Qg d2FudCB0byByZXN0b3JlIGludG8gYHJlZ251bScsIGJlY2F1c2UKIAkJICAgbGF0ZXIgZ3Jv dXBzIHNob3VsZCBjb250aW51ZSB0byBiZSBudW1iZXJlZCBoaWdoZXIsCkBAIC0zNDA5LDcg KzIzNzgsNyBAQCByZWdleF9jb21waWxlIChyZV9jaGFyICpwYXR0ZXJuLCBzaXplX3Qgc2l6 ZSwKIAogCSAgICB1bmZldGNoX2ludGVydmFsOgogCSAgICAgIC8qIElmIGFuIGludmFsaWQg aW50ZXJ2YWwsIG1hdGNoIHRoZSBjaGFyYWN0ZXJzIGFzIGxpdGVyYWxzLiAgKi8KLQkgICAg ICAgYXNzZXJ0IChiZWdfaW50ZXJ2YWwpOworCSAgICAgICBlYXNzZXJ0IChiZWdfaW50ZXJ2 YWwpOwogCSAgICAgICBwID0gYmVnX2ludGVydmFsOwogCSAgICAgICBiZWdfaW50ZXJ2YWwg PSBOVUxMOwogCkBAIC0zNDE4LDEzICsyMzg3LDEyIEBAIHJlZ2V4X2NvbXBpbGUgKHJlX2No YXIgKnBhdHRlcm4sIHNpemVfdCBzaXplLAogCiAJICAgICAgIGlmICghKHN5bnRheCAmIFJF X05PX0JLX0JSQUNFUykpCiAJCSB7Ci0JCSAgIGFzc2VydCAocCA+IHBhdHRlcm4gJiYgcFst MV0gPT0gJ1xcJyk7CisJCSAgIGVhc3NlcnQgKHAgPiBwYXR0ZXJuICYmIHBbLTFdID09ICdc XCcpOwogCQkgICBnb3RvIG5vcm1hbF9iYWNrc2xhc2g7CiAJCSB9CiAJICAgICAgIGVsc2UK IAkJIGdvdG8gbm9ybWFsX2NoYXI7CiAKLSNpZmRlZiBlbWFjcwogCSAgICBjYXNlICc9JzoK IAkgICAgICBsYXN0c3RhcnQgPSBiOwogCSAgICAgIEJVRl9QVVNIIChhdF9kb3QpOwpAQCAt MzQ1Myw4ICsyNDIxLDYgQEAgcmVnZXhfY29tcGlsZSAocmVfY2hhciAqcGF0dGVybiwgc2l6 ZV90IHNpemUsCiAJICAgICAgUEFURkVUQ0ggKGMpOwogCSAgICAgIEJVRl9QVVNIXzIgKG5v dGNhdGVnb3J5c3BlYywgYyk7CiAJICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogZW1hY3MgKi8K LQogCiAJICAgIGNhc2UgJ3cnOgogCSAgICAgIGlmIChzeW50YXggJiBSRV9OT19HTlVfT1BT KQpAQCAtMzYwNiw3ICsyNTcyLDcgQEAgcmVnZXhfY29tcGlsZSAocmVfY2hhciAqcGF0dGVy biwgc2l6ZV90IHNpemUsCiAJCWMxID0gUkVfQ0hBUl9UT19NVUxUSUJZVEUgKGMpOwogCQlp ZiAoISBDSEFSX0JZVEU4X1AgKGMxKSkKIAkJICB7Ci0JCSAgICByZV93Y2hhcl90IGMyID0g VFJBTlNMQVRFIChjMSk7CisJCSAgICBpbnQgYzIgPSBUUkFOU0xBVEUgKGMxKTsKIAogCQkg ICAgaWYgKGMxICE9IGMyICYmIChjMSA9IFJFX0NIQVJfVE9fVU5JQllURSAoYzIpKSA+PSAw KQogCQkgICAgICBjID0gYzE7CkBAIC0zNjM3LDQxICsyNjAzLDggQEAgcmVnZXhfY29tcGls ZSAocmVfY2hhciAqcGF0dGVybiwgc2l6ZV90IHNpemUsCiAgIC8qIFdlIGhhdmUgc3VjY2Vl ZGVkOyBzZXQgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyLiAgKi8KICAgYnVmcC0+dXNlZCA9 IGIgLSBidWZwLT5idWZmZXI7CiAKLSNpZmRlZiBERUJVRwotICBpZiAoZGVidWcgPiAwKQot ICAgIHsKLSAgICAgIHJlX2NvbXBpbGVfZmFzdG1hcCAoYnVmcCk7Ci0gICAgICBERUJVR19Q UklOVCAoIlxuQ29tcGlsZWQgcGF0dGVybjogXG4iKTsKLSAgICAgIHByaW50X2NvbXBpbGVk X3BhdHRlcm4gKGJ1ZnApOwotICAgIH0KLSAgZGVidWctLTsKLSNlbmRpZiAvKiBERUJVRyAq LwotCi0jaWZuZGVmIE1BVENIX01BWV9BTExPQ0FURQotICAvKiBJbml0aWFsaXplIHRoZSBm YWlsdXJlIHN0YWNrIHRvIHRoZSBsYXJnZXN0IHBvc3NpYmxlIHN0YWNrLiAgVGhpcwotICAg ICBpc24ndCBuZWNlc3NhcnkgdW5sZXNzIHdlJ3JlIHRyeWluZyB0byBhdm9pZCBjYWxsaW5n IGFsbG9jYSBpbgotICAgICB0aGUgc2VhcmNoIGFuZCBtYXRjaCByb3V0aW5lcy4gICovCi0g IHsKLSAgICBpbnQgbnVtX3JlZ3MgPSBidWZwLT5yZV9uc3ViICsgMTsKLQotICAgIGlmIChm YWlsX3N0YWNrLnNpemUgPCBlbWFjc19yZV9tYXhfZmFpbHVyZXMgKiBUWVBJQ0FMX0ZBSUxV UkVfU0laRSkKLSAgICAgIHsKLQlmYWlsX3N0YWNrLnNpemUgPSBlbWFjc19yZV9tYXhfZmFp bHVyZXMgKiBUWVBJQ0FMX0ZBSUxVUkVfU0laRTsKLQlmYWxrX3N0YWNrLnN0YWNrID0gcmVh bGxvYyAoZmFpbF9zdGFjay5zdGFjaywKLQkJCQkgICAgZmFpbF9zdGFjay5zaXplICogc2l6 ZW9mICpmYWxrX3N0YWNrLnN0YWNrKTsKLSAgICAgIH0KLQotICAgIHJlZ2V4X2dyb3dfcmVn aXN0ZXJzIChudW1fcmVncyk7Ci0gIH0KLSNlbmRpZiAvKiBub3QgTUFUQ0hfTUFZX0FMTE9D QVRFICovCi0KICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19OT0VSUk9SKTsKIAotI2lmZGVm IGVtYWNzCi0jIHVuZGVmIHN5bnRheAotI2Vsc2UKLSMgdW5kZWYgcG9zaXhfYmFja3RyYWNr aW5nCi0jZW5kaWYKIH0gLyogcmVnZXhfY29tcGlsZSAqLwogDAogLyogU3Vicm91dGluZXMg Zm9yIGByZWdleF9jb21waWxlJy4gICovCkBAIC0zNzMyLDExICsyNjY1LDExIEBAIGluc2Vy dF9vcDIgKHJlX29wY29kZV90IG9wLCB1bnNpZ25lZCBjaGFyICpsb2MsIGludCBhcmcxLCBp bnQgYXJnMiwgdW5zaWduZWQgY2hhCiAgICBhZnRlciBhbiBhbHRlcm5hdGl2ZSBvciBhIGJl Z2luLXN1YmV4cHJlc3Npb24uICBXZSBhc3N1bWUgdGhlcmUgaXMgYXQKICAgIGxlYXN0IG9u ZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBeLiAgKi8KIAotc3RhdGljIGJvb2xlYW4KK3N0YXRp YyBib29sCiBhdF9iZWdsaW5lX2xvY19wIChyZV9jaGFyICpwYXR0ZXJuLCByZV9jaGFyICpw LCByZWdfc3ludGF4X3Qgc3ludGF4KQogewogICByZV9jaGFyICpwcmV2ID0gcCAtIDI7Ci0g IGJvb2xlYW4gb2RkX2JhY2tzbGFzaGVzOworICBib29sIG9kZF9iYWNrc2xhc2hlczsKIAog ICAvKiBBZnRlciBhIHN1YmV4cHJlc3Npb24/ICAqLwogICBpZiAoKnByZXYgPT0gJygnKQpA QCAtMzc3MywxMSArMjcwNiwxMSBAQCBhdF9iZWdsaW5lX2xvY19wIChyZV9jaGFyICpwYXR0 ZXJuLCByZV9jaGFyICpwLCByZWdfc3ludGF4X3Qgc3ludGF4KQogLyogVGhlIGR1YWwgb2Yg YXRfYmVnbGluZV9sb2NfcC4gIFRoaXMgb25lIGlzIGZvciAkLiAgV2UgYXNzdW1lIHRoZXJl IGlzCiAgICBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGFmdGVyIHRoZSAkLCBpLmUuLCBgUCA8 IFBFTkQnLiAgKi8KIAotc3RhdGljIGJvb2xlYW4KK3N0YXRpYyBib29sCiBhdF9lbmRsaW5l X2xvY19wIChyZV9jaGFyICpwLCByZV9jaGFyICpwZW5kLCByZWdfc3ludGF4X3Qgc3ludGF4 KQogewogICByZV9jaGFyICpuZXh0ID0gcDsKLSAgYm9vbGVhbiBuZXh0X2JhY2tzbGFzaCA9 ICpuZXh0ID09ICdcXCc7CisgIGJvb2wgbmV4dF9iYWNrc2xhc2ggPSAqbmV4dCA9PSAnXFwn OwogICByZV9jaGFyICpuZXh0X25leHQgPSBwICsgMSA8IHBlbmQgPyBwICsgMSA6IDA7CiAK ICAgcmV0dXJuCkBAIC0zNzkzLDEwICsyNzI2LDEwIEBAIGF0X2VuZGxpbmVfbG9jX3AgKHJl X2NoYXIgKnAsIHJlX2NoYXIgKnBlbmQsIHJlZ19zeW50YXhfdCBzeW50YXgpCiAvKiBSZXR1 cm5zIHRydWUgaWYgUkVHTlVNIGlzIGluIG9uZSBvZiBDT01QSUxFX1NUQUNLJ3MgZWxlbWVu dHMgYW5kCiAgICBmYWxzZSBpZiBpdCdzIG5vdC4gICovCiAKLXN0YXRpYyBib29sZWFuCitz dGF0aWMgYm9vbAogZ3JvdXBfaW5fY29tcGlsZV9zdGFjayAoY29tcGlsZV9zdGFja190eXBl IGNvbXBpbGVfc3RhY2ssIHJlZ251bV90IHJlZ251bSkKIHsKLSAgc3NpemVfdCB0aGlzX2Vs ZW1lbnQ7CisgIHB0cmRpZmZfdCB0aGlzX2VsZW1lbnQ7CiAKICAgZm9yICh0aGlzX2VsZW1l bnQgPSBjb21waWxlX3N0YWNrLmF2YWlsIC0gMTsKICAgICAgICB0aGlzX2VsZW1lbnQgPj0g MDsKQEAgLTM4MjIsMTMgKzI3NTUsMTMgQEAgYW5hbHl6ZV9maXJzdCAocmVfY2hhciAqcCwg cmVfY2hhciAqcGVuZCwgY2hhciAqZmFzdG1hcCwKIAkgICAgICAgY29uc3QgaW50IG11bHRp Ynl0ZSkKIHsKICAgaW50IGosIGs7Ci0gIGJvb2xlYW4gbm90OworICBib29sIG5vdDsKIAog ICAvKiBJZiBhbGwgZWxlbWVudHMgZm9yIGJhc2UgbGVhZGluZy1jb2RlcyBpbiBmYXN0bWFw IGlzIHNldCwgdGhpcwogICAgICBmbGFnIGlzIHNldCB0cnVlLiAgKi8KLSAgYm9vbGVhbiBt YXRjaF9hbnlfbXVsdGlieXRlX2NoYXJhY3RlcnMgPSBmYWxzZTsKKyAgYm9vbCBtYXRjaF9h bnlfbXVsdGlieXRlX2NoYXJhY3RlcnMgPSBmYWxzZTsKIAotICBhc3NlcnQgKHApOworICBl YXNzZXJ0IChwKTsKIAogICAvKiBUaGUgbG9vcCBiZWxvdyB3b3JrcyBhcyBmb2xsb3dzOgog ICAgICAtIEl0IGhhcyBhIHdvcmtpbmctbGlzdCBrZXB0IGluIHRoZSBQQVRURVJOX1NUQUNL IGFuZCB3aGljaCBiYXNpY2FsbHkKQEAgLTM5MTksNyArMjg1Miw2IEBAIGFuYWx5emVfZmly c3QgKHJlX2NoYXIgKnAsIHJlX2NoYXIgKnBlbmQsIGNoYXIgKmZhc3RtYXAsCiAJICAgIGlm ICghIShwW2ogLyBCWVRFV0lEVEhdICYgKDEgPDwgKGogJSBCWVRFV0lEVEgpKSkgXiBub3Qp CiAJICAgICAgZmFzdG1hcFtqXSA9IDE7CiAKLSNpZmRlZiBlbWFjcwogCSAgaWYgKC8qIEFu eSBsZWFkaW5nIGNvZGUgY2FuIHBvc3NpYmx5IHN0YXJ0IGEgY2hhcmFjdGVyCiAJCSB3aGlj aCBkb2Vzbid0IG1hdGNoIHRoZSBzcGVjaWZpZWQgc2V0IG9mIGNoYXJhY3RlcnMuICAqLwog CSAgICAgIG5vdApAQCAtMzk2NSwyMCArMjg5NywxMSBAQCBhbmFseXplX2ZpcnN0IChyZV9j aGFyICpwLCByZV9jaGFyICpwZW5kLCBjaGFyICpmYXN0bWFwLAogCQkgICAgZmFzdG1hcFtq XSA9IDE7CiAJCX0KIAkgICAgfQotI2VuZGlmCiAJICBicmVhazsKIAogCWNhc2Ugc3ludGF4 c3BlYzoKIAljYXNlIG5vdHN5bnRheHNwZWM6CiAJICBpZiAoIWZhc3RtYXApIGJyZWFrOwot I2lmbmRlZiBlbWFjcwotCSAgbm90ID0gKHJlX29wY29kZV90KXBbLTFdID09IG5vdHN5bnRh eHNwZWM7Ci0JICBrID0gKnArKzsKLQkgIGZvciAoaiA9IDA7IGogPCAoMSA8PCBCWVRFV0lE VEgpOyBqKyspCi0JICAgIGlmICgoU1lOVEFYIChqKSA9PSAoZW51bSBzeW50YXhjb2RlKSBr KSBeIG5vdCkKLQkgICAgICBmYXN0bWFwW2pdID0gMTsKLQkgIGJyZWFrOwotI2Vsc2UgIC8q IGVtYWNzICovCiAJICAvKiBUaGlzIG1hdGNoIGRlcGVuZHMgb24gdGV4dCBwcm9wZXJ0aWVz LiAgVGhlc2UgZW5kIHdpdGgKIAkgICAgIGFib3J0aW5nIG9wdGltaXphdGlvbnMuICAqLwog CSAgcmV0dXJuIC0xOwpAQCAtNDAwNyw3ICsyOTMwLDYgQEAgYW5hbHl6ZV9maXJzdCAocmVf Y2hhciAqcCwgcmVfY2hhciAqcGVuZCwgY2hhciAqZmFzdG1hcCwKIAkgYGNvbnRpbnVlJy4g ICovCiAKIAljYXNlIGF0X2RvdDoKLSNlbmRpZiAvKiAhZW1hY3MgKi8KIAljYXNlIG5vX29w OgogCWNhc2UgYmVnbGluZToKIAljYXNlIGVuZGxpbmU6CkBAIC00MDY1LDcgKzI5ODcsNiBA QCBhbmFseXplX2ZpcnN0IChyZV9jaGFyICpwLCByZV9jaGFyICpwZW5kLCBjaGFyICpmYXN0 bWFwLAogCiAJY2FzZSBqdW1wX246CiAJICAvKiBUaGlzIGNvZGUgc2ltcGx5IGRvZXMgbm90 IHByb3Blcmx5IGhhbmRsZSBmb3J3YXJkIGp1bXBfbi4gICovCi0JICBERUJVR19TVEFURU1F TlQgKEVYVFJBQ1RfTlVNQkVSIChqLCBwKTsgYXNzZXJ0IChqIDwgMCkpOwogCSAgcCArPSA0 OwogCSAgLyoganVtcF9uIGNhbiBlaXRoZXIganVtcCBvciBmYWxsIHRocm91Z2guICBUaGUg KGJhY2t3YXJkKSBqdW1wCiAJICAgICBjYXNlIGhhcyBhbHJlYWR5IGJlZW4gaGFuZGxlZCwg c28gd2Ugb25seSBuZWVkIHRvIGxvb2sgYXQgdGhlCkBAIC00MDc0LDcgKzI5OTUsNiBAQCBh bmFseXplX2ZpcnN0IChyZV9jaGFyICpwLCByZV9jaGFyICpwZW5kLCBjaGFyICpmYXN0bWFw LAogCiAJY2FzZSBzdWNjZWVkX246CiAJICAvKiBJZiBOID09IDAsIGl0IHNob3VsZCBiZSBh biBvbl9mYWlsdXJlX2p1bXBfbG9vcCBpbnN0ZWFkLiAgKi8KLQkgIERFQlVHX1NUQVRFTUVO VCAoRVhUUkFDVF9OVU1CRVIgKGosIHAgKyAyKTsgYXNzZXJ0IChqID4gMCkpOwogCSAgcCAr PSA0OwogCSAgLyogV2Ugb25seSBjYXJlIGFib3V0IG9uZSBpdGVyYXRpb24gb2YgdGhlIGxv b3AsIHNvIHdlIGRvbid0CiAJICAgICBuZWVkIHRvIGNvbnNpZGVyIHRoZSBjYXNlIHdoZXJl IHRoaXMgYmVoYXZlcyBsaWtlIGFuCkBAIC00MTI1LDEzICszMDQ1LDEzIEBAIGFuYWx5emVf Zmlyc3QgKHJlX2NoYXIgKnAsIHJlX2NoYXIgKnBlbmQsIGNoYXIgKmZhc3RtYXAsCiAKICAg IFJldHVybnMgMCBpZiB3ZSBzdWNjZWVkLCAtMiBpZiBhbiBpbnRlcm5hbCBlcnJvci4gICAq LwogCi1pbnQKK3N0YXRpYyB2b2lkCiByZV9jb21waWxlX2Zhc3RtYXAgKHN0cnVjdCByZV9w YXR0ZXJuX2J1ZmZlciAqYnVmcCkKIHsKICAgY2hhciAqZmFzdG1hcCA9IGJ1ZnAtPmZhc3Rt YXA7CiAgIGludCBhbmFseXNpczsKIAotICBhc3NlcnQgKGZhc3RtYXAgJiYgYnVmcC0+YnVm ZmVyKTsKKyAgZWFzc2VydCAoZmFzdG1hcCAmJiBidWZwLT5idWZmZXIpOwogCiAgIG1lbXNl dCAoZmFzdG1hcCwgMCwgMSA8PCBCWVRFV0lEVEgpOyAgLyogQXNzdW1lIG5vdGhpbmcncyB2 YWxpZC4gICovCiAgIGJ1ZnAtPmZhc3RtYXBfYWNjdXJhdGUgPSAxOwkgICAgLyogSXQgd2ls bCBiZSB3aGVuIHdlJ3JlIGRvbmUuICAqLwpAQCAtNDEzOSwxNCArMzA1OSwxMyBAQCByZV9j b21waWxlX2Zhc3RtYXAgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCkKICAgYW5h bHlzaXMgPSBhbmFseXplX2ZpcnN0IChidWZwLT5idWZmZXIsIGJ1ZnAtPmJ1ZmZlciArIGJ1 ZnAtPnVzZWQsCiAJCQkgICAgZmFzdG1hcCwgUkVfTVVMVElCWVRFX1AgKGJ1ZnApKTsKICAg YnVmcC0+Y2FuX2JlX251bGwgPSAoYW5hbHlzaXMgIT0gMCk7Ci0gIHJldHVybiAwOwogfSAv KiByZV9jb21waWxlX2Zhc3RtYXAgKi8KIAwKIC8qIFNldCBSRUdTIHRvIGhvbGQgTlVNX1JF R1MgcmVnaXN0ZXJzLCBzdG9yaW5nIHRoZW0gaW4gU1RBUlRTIGFuZAogICAgRU5EUy4gIFN1 YnNlcXVlbnQgbWF0Y2hlcyB1c2luZyBQQVRURVJOX0JVRkZFUiBhbmQgUkVHUyB3aWxsIHVz ZQogICAgdGhpcyBtZW1vcnkgZm9yIHJlY29yZGluZyByZWdpc3RlciBpbmZvcm1hdGlvbi4g IFNUQVJUUyBhbmQgRU5EUwogICAgbXVzdCBiZSBhbGxvY2F0ZWQgdXNpbmcgdGhlIG1hbGxv YyBsaWJyYXJ5IHJvdXRpbmUsIGFuZCBtdXN0IGVhY2gKLSAgIGJlIGF0IGxlYXN0IE5VTV9S RUdTICogc2l6ZW9mIChyZWdvZmZfdCkgYnl0ZXMgbG9uZy4KKyAgIGJlIGF0IGxlYXN0IE5V TV9SRUdTICogc2l6ZW9mIChwdHJkaWZmX3QpIGJ5dGVzIGxvbmcuCiAKICAgIElmIE5VTV9S RUdTID09IDAsIHRoZW4gc3Vic2VxdWVudCBtYXRjaGVzIHNob3VsZCBhbGxvY2F0ZSB0aGVp ciBvd24KICAgIHJlZ2lzdGVyIGRhdGEuCkBAIC00MTU2LDcgKzMwNzUsOCBAQCByZV9jb21w aWxlX2Zhc3RtYXAgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCkKICAgIGZyZWVp bmcgdGhlIG9sZCBkYXRhLiAgKi8KIAogdm9pZAotcmVfc2V0X3JlZ2lzdGVycyAoc3RydWN0 IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCB1 bnNpZ25lZCBpbnQgbnVtX3JlZ3MsIHJlZ29mZl90ICpzdGFydHMsIHJlZ29mZl90ICplbmRz KQorcmVfc2V0X3JlZ2lzdGVycyAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCBz dHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLAorCQkgIHVuc2lnbmVkIGludCBudW1fcmVncywg cHRyZGlmZl90ICpzdGFydHMsIHB0cmRpZmZfdCAqZW5kcykKIHsKICAgaWYgKG51bV9yZWdz KQogICAgIHsKQEAgLTQxNzIsMjEgKzMwOTIsMTkgQEAgcmVfc2V0X3JlZ2lzdGVycyAoc3Ry dWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdz LCB1bnMKICAgICAgIHJlZ3MtPnN0YXJ0ID0gcmVncy0+ZW5kID0gMDsKICAgICB9CiB9Ci1X RUFLX0FMSUFTIChfX3JlX3NldF9yZWdpc3RlcnMsIHJlX3NldF9yZWdpc3RlcnMpCiAMCiAv KiBTZWFyY2hpbmcgcm91dGluZXMuICAqLwogCiAvKiBMaWtlIHJlX3NlYXJjaF8yLCBiZWxv dywgYnV0IG9ubHkgb25lIHN0cmluZyBpcyBzcGVjaWZpZWQsIGFuZAogICAgZG9lc24ndCBs ZXQgeW91IHNheSB3aGVyZSB0byBzdG9wIG1hdGNoaW5nLiAqLwogCi1yZWdvZmZfdAorcHRy ZGlmZl90CiByZV9zZWFyY2ggKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgY29u c3QgY2hhciAqc3RyaW5nLCBzaXplX3Qgc2l6ZSwKLQkgICBzc2l6ZV90IHN0YXJ0cG9zLCBz c2l6ZV90IHJhbmdlLCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzKQorCSAgIHB0cmRpZmZf dCBzdGFydHBvcywgcHRyZGlmZl90IHJhbmdlLCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdz KQogewogICByZXR1cm4gcmVfc2VhcmNoXzIgKGJ1ZnAsIE5VTEwsIDAsIHN0cmluZywgc2l6 ZSwgc3RhcnRwb3MsIHJhbmdlLAogCQkgICAgICByZWdzLCBzaXplKTsKIH0KLVdFQUtfQUxJ QVMgKF9fcmVfc2VhcmNoLCByZV9zZWFyY2gpCiAKIC8qIEhlYWQgYWRkcmVzcyBvZiB2aXJ0 dWFsIGNvbmNhdGVuYXRpb24gb2Ygc3RyaW5nLiAgKi8KICNkZWZpbmUgSEVBRF9BRERSX1ZT VFJJTkcoUCkJCVwKQEAgLTQyMTcsMjEgKzMxMzUsMjEgQEAgV0VBS19BTElBUyAoX19yZV9z ZWFyY2gsIHJlX3NlYXJjaCkKICAgIGZvdW5kLCAtMSBpZiBubyBtYXRjaCwgb3IgLTIgaWYg ZXJyb3IgKHN1Y2ggYXMgZmFpbHVyZQogICAgc3RhY2sgb3ZlcmZsb3cpLiAgKi8KIAotcmVn b2ZmX3QKK3B0cmRpZmZfdAogcmVfc2VhcmNoXzIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZl ciAqYnVmcCwgY29uc3QgY2hhciAqc3RyMSwgc2l6ZV90IHNpemUxLAotCSAgICAgY29uc3Qg Y2hhciAqc3RyMiwgc2l6ZV90IHNpemUyLCBzc2l6ZV90IHN0YXJ0cG9zLCBzc2l6ZV90IHJh bmdlLAotCSAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgc3NpemVfdCBzdG9wKQor CSAgICAgY29uc3QgY2hhciAqc3RyMiwgc2l6ZV90IHNpemUyLCBwdHJkaWZmX3Qgc3RhcnRw b3MsIHB0cmRpZmZfdCByYW5nZSwKKwkgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3Ms IHB0cmRpZmZfdCBzdG9wKQogewotICByZWdvZmZfdCB2YWw7CisgIHB0cmRpZmZfdCB2YWw7 CiAgIHJlX2NoYXIgKnN0cmluZzEgPSAocmVfY2hhciAqKSBzdHIxOwogICByZV9jaGFyICpz dHJpbmcyID0gKHJlX2NoYXIgKikgc3RyMjsKLSAgcmVnaXN0ZXIgY2hhciAqZmFzdG1hcCA9 IGJ1ZnAtPmZhc3RtYXA7Ci0gIHJlZ2lzdGVyIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0 ZSA9IGJ1ZnAtPnRyYW5zbGF0ZTsKKyAgY2hhciAqZmFzdG1hcCA9IGJ1ZnAtPmZhc3RtYXA7 CisgIExpc3BfT2JqZWN0IHRyYW5zbGF0ZSA9IGJ1ZnAtPnRyYW5zbGF0ZTsKICAgc2l6ZV90 IHRvdGFsX3NpemUgPSBzaXplMSArIHNpemUyOwotICBzc2l6ZV90IGVuZHBvcyA9IHN0YXJ0 cG9zICsgcmFuZ2U7Ci0gIGJvb2xlYW4gYW5jaG9yZWRfc3RhcnQ7CisgIHB0cmRpZmZfdCBl bmRwb3MgPSBzdGFydHBvcyArIHJhbmdlOworICBib29sIGFuY2hvcmVkX3N0YXJ0OwogICAv KiBOb256ZXJvIGlmIHdlIGFyZSBzZWFyY2hpbmcgbXVsdGlieXRlIHN0cmluZy4gICovCi0g IGNvbnN0IGJvb2xlYW4gbXVsdGlieXRlID0gUkVfVEFSR0VUX01VTFRJQllURV9QIChidWZw KTsKKyAgYm9vbCBtdWx0aWJ5dGUgPSBSRV9UQVJHRVRfTVVMVElCWVRFX1AgKGJ1ZnApOwog CiAgIC8qIENoZWNrIGZvciBvdXQtb2YtcmFuZ2UgU1RBUlRQT1MuICAqLwogICBpZiAoc3Rh cnRwb3MgPCAwIHx8IHN0YXJ0cG9zID4gdG90YWxfc2l6ZSkKQEAgLTQyNTUsNyArMzE3Myw2 IEBAIHJlX3NlYXJjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIGNvbnN0 IGNoYXIgKnN0cjEsIHNpemVfdCBzaXplMSwKIAlyYW5nZSA9IDA7CiAgICAgfQogCi0jaWZk ZWYgZW1hY3MKICAgLyogSW4gYSBmb3J3YXJkIHNlYXJjaCBmb3Igc29tZXRoaW5nIHRoYXQg c3RhcnRzIHdpdGggXD0uCiAgICAgIGRvbid0IGtlZXAgc2VhcmNoaW5nIHBhc3QgcG9pbnQu ICAqLwogICBpZiAoYnVmcC0+dXNlZCA+IDAgJiYgKHJlX29wY29kZV90KSBidWZwLT5idWZm ZXJbMF0gPT0gYXRfZG90ICYmIHJhbmdlID4gMCkKQEAgLTQyNjQsNyArMzE4MSw2IEBAIHJl X3NlYXJjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIGNvbnN0IGNoYXIg KnN0cjEsIHNpemVfdCBzaXplMSwKICAgICAgIGlmIChyYW5nZSA8IDApCiAJcmV0dXJuIC0x OwogICAgIH0KLSNlbmRpZiAvKiBlbWFjcyAqLwogCiAgIC8qIFVwZGF0ZSB0aGUgZmFzdG1h cCBub3cgaWYgbm90IGNvcnJlY3QgYWxyZWFkeS4gICovCiAgIGlmIChmYXN0bWFwICYmICFi dWZwLT5mYXN0bWFwX2FjY3VyYXRlKQpAQCAtNDI3MywxNCArMzE4OSwxMiBAQCByZV9zZWFy Y2hfMiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCBjb25zdCBjaGFyICpzdHIx LCBzaXplX3Qgc2l6ZTEsCiAgIC8qIFNlZSB3aGV0aGVyIHRoZSBwYXR0ZXJuIGlzIGFuY2hv cmVkLiAgKi8KICAgYW5jaG9yZWRfc3RhcnQgPSAoYnVmcC0+YnVmZmVyWzBdID09IGJlZ2xp bmUpOwogCi0jaWZkZWYgZW1hY3MKICAgZ2xfc3RhdGUub2JqZWN0ID0gcmVfbWF0Y2hfb2Jq ZWN0OyAvKiBVc2VkIGJ5IFNZTlRBWF9UQUJMRV9CWVRFX1RPX0NIQVIuICovCiAgIHsKLSAg ICBzc2l6ZV90IGNoYXJwb3MgPSBTWU5UQVhfVEFCTEVfQllURV9UT19DSEFSIChQT1NfQVNf SU5fQlVGRkVSIChzdGFydHBvcykpOworICAgIHB0cmRpZmZfdCBjaGFycG9zID0gU1lOVEFY X1RBQkxFX0JZVEVfVE9fQ0hBUiAoUE9TX0FTX0lOX0JVRkZFUiAoc3RhcnRwb3MpKTsKIAog ICAgIFNFVFVQX1NZTlRBWF9UQUJMRV9GT1JfT0JKRUNUIChyZV9tYXRjaF9vYmplY3QsIGNo YXJwb3MsIDEpOwogICB9Ci0jZW5kaWYKIAogICAvKiBMb29wIHRocm91Z2ggdGhlIHN0cmlu ZywgbG9va2luZyBmb3IgYSBwbGFjZSB0byBzdGFydCBtYXRjaGluZy4gICovCiAgIGZvciAo OzspCkBAIC00MzAzLDE0ICszMjE3LDE0IEBAIHJlX3NlYXJjaF8yIChzdHJ1Y3QgcmVfcGF0 dGVybl9idWZmZXIgKmJ1ZnAsIGNvbnN0IGNoYXIgKnN0cjEsIHNpemVfdCBzaXplMSwKIAkg dGhlIGZpcnN0IG51bGwgc3RyaW5nLiAgKi8KICAgICAgIGlmIChmYXN0bWFwICYmIHN0YXJ0 cG9zIDwgdG90YWxfc2l6ZSAmJiAhYnVmcC0+Y2FuX2JlX251bGwpCiAJewotCSAgcmVnaXN0 ZXIgcmVfY2hhciAqZDsKLQkgIHJlZ2lzdGVyIHJlX3djaGFyX3QgYnVmX2NoOworCSAgcmVf Y2hhciAqZDsKKwkgIGludCBidWZfY2g7CiAKIAkgIGQgPSBQT1NfQUREUl9WU1RSSU5HIChz dGFydHBvcyk7CiAKIAkgIGlmIChyYW5nZSA+IDApCS8qIFNlYXJjaGluZyBmb3J3YXJkcy4g ICovCiAJICAgIHsKLQkgICAgICBzc2l6ZV90IGlyYW5nZSA9IHJhbmdlLCBsaW0gPSAwOwor CSAgICAgIHB0cmRpZmZfdCBpcmFuZ2UgPSByYW5nZSwgbGltID0gMDsKIAogCSAgICAgIGlm IChzdGFydHBvcyA8IHNpemUxICYmIHN0YXJ0cG9zICsgcmFuZ2UgPj0gc2l6ZTEpCiAJCWxp bSA9IHJhbmdlIC0gKHNpemUxIC0gc3RhcnRwb3MpOwpAQCAtNDMzNSwxMSArMzI0OSw5IEBA IHJlX3NlYXJjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIGNvbnN0IGNo YXIgKnN0cjEsIHNpemVfdCBzaXplMSwKIAkJICBlbHNlCiAJCSAgICB3aGlsZSAocmFuZ2Ug PiBsaW0pCiAJCSAgICAgIHsKLQkJCXJlZ2lzdGVyIHJlX3djaGFyX3QgY2gsIHRyYW5zbGF0 ZWQ7Ci0KIAkJCWJ1Zl9jaCA9ICpkOwotCQkJY2ggPSBSRV9DSEFSX1RPX01VTFRJQllURSAo YnVmX2NoKTsKLQkJCXRyYW5zbGF0ZWQgPSBSRV9UUkFOU0xBVEUgKHRyYW5zbGF0ZSwgY2gp OworCQkJaW50IGNoID0gUkVfQ0hBUl9UT19NVUxUSUJZVEUgKGJ1Zl9jaCk7CisJCQlpbnQg dHJhbnNsYXRlZCA9IFJFX1RSQU5TTEFURSAodHJhbnNsYXRlLCBjaCk7CiAJCQlpZiAodHJh bnNsYXRlZCAhPSBjaAogCQkJICAgICYmIChjaCA9IFJFX0NIQVJfVE9fVU5JQllURSAodHJh bnNsYXRlZCkpID49IDApCiAJCQkgIGJ1Zl9jaCA9IGNoOwpAQCAtNDM4MiwxMSArMzI5NCw5 IEBAIHJlX3NlYXJjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIGNvbnN0 IGNoYXIgKnN0cjEsIHNpemVfdCBzaXplMSwKIAkJfQogCSAgICAgIGVsc2UKIAkJewotCQkg IHJlZ2lzdGVyIHJlX3djaGFyX3QgY2gsIHRyYW5zbGF0ZWQ7Ci0KIAkJICBidWZfY2ggPSAq ZDsKLQkJICBjaCA9IFJFX0NIQVJfVE9fTVVMVElCWVRFIChidWZfY2gpOwotCQkgIHRyYW5z bGF0ZWQgPSBUUkFOU0xBVEUgKGNoKTsKKwkJICBpbnQgY2ggPSBSRV9DSEFSX1RPX01VTFRJ QllURSAoYnVmX2NoKTsKKwkJICBpbnQgdHJhbnNsYXRlZCA9IFRSQU5TTEFURSAoY2gpOwog CQkgIGlmICh0cmFuc2xhdGVkICE9IGNoCiAJCSAgICAgICYmIChjaCA9IFJFX0NIQVJfVE9f VU5JQllURSAodHJhbnNsYXRlZCkpID49IDApCiAJCSAgICBidWZfY2ggPSBjaDsKQEAgLTQ0 NTYsMTMgKzMzNjYsMTIgQEAgcmVfc2VhcmNoXzIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZl ciAqYnVmcCwgY29uc3QgY2hhciAqc3RyMSwgc2l6ZV90IHNpemUxLAogICAgIH0KICAgcmV0 dXJuIC0xOwogfSAvKiByZV9zZWFyY2hfMiAqLwotV0VBS19BTElBUyAoX19yZV9zZWFyY2hf MiwgcmVfc2VhcmNoXzIpCiAMCiAvKiBEZWNsYXJhdGlvbnMgYW5kIG1hY3JvcyBmb3IgcmVf bWF0Y2hfMi4gICovCiAKIHN0YXRpYyBpbnQgYmNtcF90cmFuc2xhdGUgKHJlX2NoYXIgKnMx LCByZV9jaGFyICpzMiwKLQkJCSAgIHJlZ2lzdGVyIHNzaXplX3QgbGVuLAotCQkJICAgUkVf VFJBTlNMQVRFX1RZUEUgdHJhbnNsYXRlLAorCQkJICAgcHRyZGlmZl90IGxlbiwKKwkJCSAg IExpc3BfT2JqZWN0IHRyYW5zbGF0ZSwKIAkJCSAgIGNvbnN0IGludCBtdWx0aWJ5dGUpOwog CiAvKiBUaGlzIGNvbnZlcnRzIFBUUiwgYSBwb2ludGVyIGludG8gb25lIG9mIHRoZSBzZWFy Y2ggc3RyaW5ncyBgc3RyaW5nMScKQEAgLTQ1MzAsMjkgKzM0MzksNiBAQCBzdGF0aWMgaW50 IGJjbXBfdHJhbnNsYXRlIChyZV9jaGFyICpzMSwgcmVfY2hhciAqczIsCiAgICB8fCBXT1JE Q0hBUl9QIChkIC0gMSkgIT0gV09SRENIQVJfUCAoZCkpCiAjZW5kaWYKIAotLyogRnJlZSBl dmVyeXRoaW5nIHdlIG1hbGxvYy4gICovCi0jaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCi0j IGRlZmluZSBGUkVFX1ZBUih2YXIpCQkJCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBp ZiAodmFyKQkJCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlSRUdFWF9GUkVFICh2YXIp OwkJCQkJCVwKLQl2YXIgPSBOVUxMOwkJCQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICB9 IHdoaWxlICgwKQotIyBkZWZpbmUgRlJFRV9WQVJJQUJMRVMoKQkJCQkJCVwKLSAgZG8gewkJ CQkJCQkJCVwKLSAgICBSRUdFWF9GUkVFX1NUQUNLIChmYWlsX3N0YWNrLnN0YWNrKTsJCQkJ XAotICAgIEZSRUVfVkFSIChyZWdzdGFydCk7CQkJCQkJXAotICAgIEZSRUVfVkFSIChyZWdl bmQpOwkJCQkJCQlcCi0gICAgRlJFRV9WQVIgKGJlc3RfcmVnc3RhcnQpOwkJCQkJCVwKLSAg ICBGUkVFX1ZBUiAoYmVzdF9yZWdlbmQpOwkJCQkJCVwKLSAgICBSRUdFWF9TQUZFX0ZSRUUg KCk7CQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLSNlbHNlCi0jIGRlZmluZSBGUkVFX1ZBUklB QkxFUygpICgodm9pZCkwKSAvKiBEbyBub3RoaW5nISAgQnV0IGluaGliaXQgZ2NjIHdhcm5p bmcuICAqLwotI2VuZGlmIC8qIG5vdCBNQVRDSF9NQVlfQUxMT0NBVEUgKi8KLQogDAogLyog T3B0aW1pemF0aW9uIHJvdXRpbmVzLiAgKi8KIApAQCAtNDU4NSwxMCArMzQ3MSw4IEBAIHNr aXBfb25lX2NoYXIgKHJlX2NoYXIgKnApCiAKICAgICBjYXNlIHN5bnRheHNwZWM6CiAgICAg Y2FzZSBub3RzeW50YXhzcGVjOgotI2lmZGVmIGVtYWNzCiAgICAgY2FzZSBjYXRlZ29yeXNw ZWM6CiAgICAgY2FzZSBub3RjYXRlZ29yeXNwZWM6Ci0jZW5kaWYgLyogZW1hY3MgKi8KICAg ICAgIHArKzsKICAgICAgIGJyZWFrOwogCkBAIC00NjIyLDcgKzM1MDYsNyBAQCBza2lwX25v b3BzIChyZV9jaGFyICpwLCByZV9jaGFyICpwZW5kKQogCSAgcmV0dXJuIHA7CiAJfQogICAg IH0KLSAgYXNzZXJ0IChwID09IHBlbmQpOworICBlYXNzZXJ0IChwID09IHBlbmQpOwogICBy ZXR1cm4gcDsKIH0KIApAQCAtNDY1NSwxMSArMzUzOSwxMCBAQCBleGVjdXRlX2NoYXJzZXQg KHJlX2NoYXIgKipwcCwgdW5zaWduZWQgYywgdW5zaWduZWQgY29yaWcsIGJvb2wgdW5pYnl0 ZSkKIAkgICYmIHBbMiArIGMgLyBCWVRFV0lEVEhdICYgKDEgPDwgKGMgJSBCWVRFV0lEVEgp KSkKIAlyZXR1cm4gIW5vdDsKICAgICB9Ci0jaWZkZWYgZW1hY3MKICAgZWxzZSBpZiAocnRw KQogICAgIHsKICAgICAgIGludCBjbGFzc19iaXRzID0gQ0hBUlNFVF9SQU5HRV9UQUJMRV9C SVRTIChwKTsKLSAgICAgIHJlX3djaGFyX3QgcmFuZ2Vfc3RhcnQsIHJhbmdlX2VuZDsKKyAg ICAgIGludCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kOwogCiAgIC8qIFNvcnQgdGVzdHMgYnkg dGhlIG1vc3QgY29tbW9ubHkgdXNlZCBjbGFzc2VzIHdpdGggc29tZSBhZGp1c3RtZW50IHRv IHdoaWNoCiAgICAgIHRlc3RzIGFyZSBlYXNpZXN0IHRvIHBlcmZvcm0uICBUYWtlIGEgbG9v ayBhdCBjb21tZW50IGluIHJlX3djdHlwZV9wYXJzZQpAQCAtNDY5MCw3ICszNTczLDcgQEAg ZXhlY3V0ZV9jaGFyc2V0IChyZV9jaGFyICoqcHAsIHVuc2lnbmVkIGMsIHVuc2lnbmVkIGNv cmlnLCBib29sIHVuaWJ5dGUpCiAJICAgIHJldHVybiAhbm90OwogCX0KICAgICB9Ci0jZW5k aWYgLyogZW1hY3MgKi8KKwogICByZXR1cm4gbm90OwogfQogCkBAIC00NzAwLDExICszNTgz LDExIEBAIG11dHVhbGx5X2V4Y2x1c2l2ZV9wIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIg KmJ1ZnAsIHJlX2NoYXIgKnAxLAogCQkgICAgICByZV9jaGFyICpwMikKIHsKICAgcmVfb3Bj b2RlX3Qgb3AyOwotICBjb25zdCBib29sZWFuIG11bHRpYnl0ZSA9IFJFX01VTFRJQllURV9Q IChidWZwKTsKKyAgYm9vbCBtdWx0aWJ5dGUgPSBSRV9NVUxUSUJZVEVfUCAoYnVmcCk7CiAg IHVuc2lnbmVkIGNoYXIgKnBlbmQgPSBidWZwLT5idWZmZXIgKyBidWZwLT51c2VkOwogCi0g IGFzc2VydCAocDEgPj0gYnVmcC0+YnVmZmVyICYmIHAxIDwgcGVuZAotCSAgJiYgcDIgPj0g YnVmcC0+YnVmZmVyICYmIHAyIDw9IHBlbmQpOworICBlYXNzZXJ0IChwMSA+PSBidWZwLT5i dWZmZXIgJiYgcDEgPCBwZW5kCisJICAgJiYgcDIgPj0gYnVmcC0+YnVmZmVyICYmIHAyIDw9 IHBlbmQpOwogCiAgIC8qIFNraXAgb3ZlciBvcGVuL2Nsb3NlLWdyb3VwIGNvbW1hbmRzLgog ICAgICBJZiB3aGF0IGZvbGxvd3MgdGhpcyBsb29wIGlzIGEgLi4uKyBjb25zdHJ1Y3QsCkBA IC00NzE1LDggKzM1OTgsOCBAQCBtdXR1YWxseV9leGNsdXNpdmVfcCAoc3RydWN0IHJlX3Bh dHRlcm5fYnVmZmVyICpidWZwLCByZV9jaGFyICpwMSwKICAgICAgaXMgb25seSB1c2VkIGlu IHRoZSBjYXNlIHdoZXJlIHAxIGlzIGEgc2ltcGxlIG1hdGNoIG9wZXJhdG9yLiAgKi8KICAg LyogcDEgPSBza2lwX25vb3BzIChwMSwgcGVuZCk7ICovCiAKLSAgYXNzZXJ0IChwMSA+PSBi dWZwLT5idWZmZXIgJiYgcDEgPCBwZW5kCi0JICAmJiBwMiA+PSBidWZwLT5idWZmZXIgJiYg cDIgPD0gcGVuZCk7CisgIGVhc3NlcnQgKHAxID49IGJ1ZnAtPmJ1ZmZlciAmJiBwMSA8IHBl bmQKKwkgICAmJiBwMiA+PSBidWZwLT5idWZmZXIgJiYgcDIgPD0gcGVuZCk7CiAKICAgb3Ay ID0gcDIgPT0gcGVuZCA/IHN1Y2NlZWQgOiAqcDI7CiAKQEAgLTQ3MjYsNDMgKzM2MDksMzEg QEAgbXV0dWFsbHlfZXhjbHVzaXZlX3AgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVm cCwgcmVfY2hhciAqcDEsCiAgICAgY2FzZSBlbmRidWY6CiAgICAgICAvKiBJZiB3ZSdyZSBh dCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCB3ZSBjYW4gY2hhbmdlLiAgKi8KICAgICAgIGlm IChza2lwX29uZV9jaGFyIChwMSkpCi0JewotCSAgREVCVUdfUFJJTlQgKCIgIEVuZCBvZiBw YXR0ZXJuOiBmYXN0IGxvb3AuXG4iKTsKLQkgIHJldHVybiAxOwotCX0KKwlyZXR1cm4gMTsK ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBlbmRsaW5lOgogICAgIGNhc2UgZXhhY3RuOgog ICAgICAgewotCXJlZ2lzdGVyIHJlX3djaGFyX3QgYworCWludCBjCiAJICA9IChyZV9vcGNv ZGVfdCkgKnAyID09IGVuZGxpbmUgPyAnXG4nCiAJICA6IFJFX1NUUklOR19DSEFSIChwMiAr IDIsIG11bHRpYnl0ZSk7CiAKIAlpZiAoKHJlX29wY29kZV90KSAqcDEgPT0gZXhhY3RuKQog CSAgewogCSAgICBpZiAoYyAhPSBSRV9TVFJJTkdfQ0hBUiAocDEgKyAyLCBtdWx0aWJ5dGUp KQotCSAgICAgIHsKLQkJREVCVUdfUFJJTlQgKCIgICclYycgIT0gJyVjJyA9PiBmYXN0IGxv b3AuXG4iLCBjLCBwMVsyXSk7Ci0JCXJldHVybiAxOwotCSAgICAgIH0KKwkgICAgICByZXR1 cm4gMTsKIAkgIH0KIAogCWVsc2UgaWYgKChyZV9vcGNvZGVfdCkgKnAxID09IGNoYXJzZXQK IAkJIHx8IChyZV9vcGNvZGVfdCkgKnAxID09IGNoYXJzZXRfbm90KQogCSAgewogCSAgICBp ZiAoIWV4ZWN1dGVfY2hhcnNldCAoJnAxLCBjLCBjLCAhbXVsdGlieXRlIHx8IElTX1JFQUxf QVNDSUkgKGMpKSkKLQkgICAgICB7Ci0JCURFQlVHX1BSSU5UICgiCSBObyBtYXRjaCA9PiBm YXN0IGxvb3AuXG4iKTsKLQkJcmV0dXJuIDE7Ci0JICAgICAgfQorCSAgICAgIHJldHVybiAx OwogCSAgfQogCWVsc2UgaWYgKChyZV9vcGNvZGVfdCkgKnAxID09IGFueWNoYXIKIAkJICYm IGMgPT0gJ1xuJykKLQkgIHsKLQkgICAgREVCVUdfUFJJTlQgKCIgICAuICE9IFxcbiA9PiBm YXN0IGxvb3AuXG4iKTsKLQkgICAgcmV0dXJuIDE7Ci0JICB9CisJICByZXR1cm4gMTsKICAg ICAgIH0KICAgICAgIGJyZWFrOwogCkBAIC00ODAyLDEwICszNjczLDcgQEAgbXV0dWFsbHlf ZXhjbHVzaXZlX3AgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAq cDEsCiAKIAkgICAgICBpZiAoaWR4ID09IHAyWzFdCiAJCSAgfHwgaWR4ID09IENIQVJTRVRf QklUTUFQX1NJWkUgKHAxKSkKLQkJewotCQkgIERFQlVHX1BSSU5UICgiCSBObyBtYXRjaCA9 PiBmYXN0IGxvb3AuXG4iKTsKLQkJICByZXR1cm4gMTsKLQkJfQorCQlyZXR1cm4gMTsKIAkg ICAgfQogCSAgZWxzZSBpZiAoKHJlX29wY29kZV90KSAqcDEgPT0gY2hhcnNldF9ub3QpCiAJ ICAgIHsKQEAgLTQ4MTksMTAgKzM2ODcsNyBAQCBtdXR1YWxseV9leGNsdXNpdmVfcCAoc3Ry dWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCByZV9jaGFyICpwMSwKIAkJICBicmVhazsK IAogCSAgICAgIGlmIChpZHggPT0gcDJbMV0pCi0JCXsKLQkJICBERUJVR19QUklOVCAoIgkg Tm8gbWF0Y2ggPT4gZmFzdCBsb29wLlxuIik7Ci0JCSAgcmV0dXJuIDE7Ci0JCX0KKwkJcmV0 dXJuIDE7CiAJICAgICAgfQogCSAgfQogICAgICAgfQpAQCAtNDg2NSwxMiArMzczMCwxMCBA QCBtdXR1YWxseV9leGNsdXNpdmVfcCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZw LCByZV9jaGFyICpwMSwKIAkgICAgICAgfHwgKHJlX29wY29kZV90KSAqcDEgPT0gc3ludGF4 c3BlYykKIAkgICAgICAmJiBwMVsxXSA9PSBTd29yZCk7CiAKLSNpZmRlZiBlbWFjcwogICAg IGNhc2UgY2F0ZWdvcnlzcGVjOgogICAgICAgcmV0dXJuICgocmVfb3Bjb2RlX3QpICpwMSA9 PSBub3RjYXRlZ29yeXNwZWMgJiYgcDFbMV0gPT0gcDJbMV0pOwogICAgIGNhc2Ugbm90Y2F0 ZWdvcnlzcGVjOgogICAgICAgcmV0dXJuICgocmVfb3Bjb2RlX3QpICpwMSA9PSBjYXRlZ29y eXNwZWMgJiYgcDFbMV0gPT0gcDJbMV0pOwotI2VuZGlmIC8qIGVtYWNzICovCiAKICAgICBk ZWZhdWx0OgogICAgICAgOwpAQCAtNDg4MywyMCArMzc0Niw2IEBAIG11dHVhbGx5X2V4Y2x1 c2l2ZV9wIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIHJlX2NoYXIgKnAxLAog DAogLyogTWF0Y2hpbmcgcm91dGluZXMuICAqLwogCi0jaWZuZGVmIGVtYWNzCS8qIEVtYWNz IG5ldmVyIHVzZXMgdGhpcy4gICovCi0vKiByZV9tYXRjaCBpcyBsaWtlIHJlX21hdGNoXzIg ZXhjZXB0IGl0IHRha2VzIG9ubHkgYSBzaW5nbGUgc3RyaW5nLiAgKi8KLQotcmVnb2ZmX3QK LXJlX21hdGNoIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIGNvbnN0IGNoYXIg KnN0cmluZywKLQkgIHNpemVfdCBzaXplLCBzc2l6ZV90IHBvcywgc3RydWN0IHJlX3JlZ2lz dGVycyAqcmVncykKLXsKLSAgcmVnb2ZmX3QgcmVzdWx0ID0gcmVfbWF0Y2hfMl9pbnRlcm5h bCAoYnVmcCwgTlVMTCwgMCwgKHJlX2NoYXIgKikgc3RyaW5nLAotCQkJCQkgc2l6ZSwgcG9z LCByZWdzLCBzaXplKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLVdFQUtfQUxJQVMgKF9fcmVf bWF0Y2gsIHJlX21hdGNoKQotI2VuZGlmIC8qIG5vdCBlbWFjcyAqLwotCiAvKiByZV9tYXRj aF8yIG1hdGNoZXMgdGhlIGNvbXBpbGVkIHBhdHRlcm4gaW4gQlVGUCBhZ2FpbnN0IHRoZQog ICAgdGhlICh2aXJ0dWFsKSBjb25jYXRlbmF0aW9uIG9mIFNUUklORzEgYW5kIFNUUklORzIg KG9mIGxlbmd0aCBTSVpFMQogICAgYW5kIFNJWkUyLCByZXNwZWN0aXZlbHkpLiAgV2Ugc3Rh cnQgbWF0Y2hpbmcgYXQgUE9TLCBhbmQgc3RvcApAQCAtNDkxMCwzNCArMzc1OSwzMSBAQCBX RUFLX0FMSUFTIChfX3JlX21hdGNoLCByZV9tYXRjaCkKICAgIGZhaWx1cmUgc3RhY2sgb3Zl cmZsb3dpbmcpLiAgT3RoZXJ3aXNlLCB3ZSByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUKICAg IG1hdGNoZWQgc3Vic3RyaW5nLiAgKi8KIAotcmVnb2ZmX3QKK3B0cmRpZmZfdAogcmVfbWF0 Y2hfMiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCBjb25zdCBjaGFyICpzdHJp bmcxLAotCSAgICBzaXplX3Qgc2l6ZTEsIGNvbnN0IGNoYXIgKnN0cmluZzIsIHNpemVfdCBz aXplMiwgc3NpemVfdCBwb3MsCi0JICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIHNz aXplX3Qgc3RvcCkKKwkgICAgc2l6ZV90IHNpemUxLCBjb25zdCBjaGFyICpzdHJpbmcyLCBz aXplX3Qgc2l6ZTIsIHB0cmRpZmZfdCBwb3MsCisJICAgIHN0cnVjdCByZV9yZWdpc3RlcnMg KnJlZ3MsIHB0cmRpZmZfdCBzdG9wKQogewotICByZWdvZmZfdCByZXN1bHQ7CisgIHB0cmRp ZmZfdCByZXN1bHQ7CiAKLSNpZmRlZiBlbWFjcwotICBzc2l6ZV90IGNoYXJwb3M7CisgIHB0 cmRpZmZfdCBjaGFycG9zOwogICBnbF9zdGF0ZS5vYmplY3QgPSByZV9tYXRjaF9vYmplY3Q7 IC8qIFVzZWQgYnkgU1lOVEFYX1RBQkxFX0JZVEVfVE9fQ0hBUi4gKi8KICAgY2hhcnBvcyA9 IFNZTlRBWF9UQUJMRV9CWVRFX1RPX0NIQVIgKFBPU19BU19JTl9CVUZGRVIgKHBvcykpOwog ICBTRVRVUF9TWU5UQVhfVEFCTEVfRk9SX09CSkVDVCAocmVfbWF0Y2hfb2JqZWN0LCBjaGFy cG9zLCAxKTsKLSNlbmRpZgogCiAgIHJlc3VsdCA9IHJlX21hdGNoXzJfaW50ZXJuYWwgKGJ1 ZnAsIChyZV9jaGFyICopIHN0cmluZzEsIHNpemUxLAogCQkJCShyZV9jaGFyICopIHN0cmlu ZzIsIHNpemUyLAogCQkJCXBvcywgcmVncywgc3RvcCk7CiAgIHJldHVybiByZXN1bHQ7CiB9 Ci1XRUFLX0FMSUFTIChfX3JlX21hdGNoXzIsIHJlX21hdGNoXzIpCiAKIAogLyogVGhpcyBp cyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIHRoYXQgd2UgY2FuIGZvcmNlIGFuIGFsbG9jYSBj bGVhbnVwCiAgICBhZnRlcndhcmRzLiAgKi8KLXN0YXRpYyByZWdvZmZfdAorc3RhdGljIHB0 cmRpZmZfdAogcmVfbWF0Y2hfMl9pbnRlcm5hbCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVy ICpidWZwLCByZV9jaGFyICpzdHJpbmcxLAogCQkgICAgIHNpemVfdCBzaXplMSwgcmVfY2hh ciAqc3RyaW5nMiwgc2l6ZV90IHNpemUyLAotCQkgICAgIHNzaXplX3QgcG9zLCBzdHJ1Y3Qg cmVfcmVnaXN0ZXJzICpyZWdzLCBzc2l6ZV90IHN0b3ApCisJCSAgICAgcHRyZGlmZl90IHBv cywgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgcHRyZGlmZl90IHN0b3ApCiB7CiAgIC8q IEdlbmVyYWwgdGVtcG9yYXJpZXMuICAqLwogICBpbnQgbWNudDsKQEAgLTQ5NjQsMTMgKzM4 MTAsMTMgQEAgcmVfbWF0Y2hfMl9pbnRlcm5hbCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVy ICpidWZwLCByZV9jaGFyICpzdHJpbmcxLAogICByZV9jaGFyICpwZW5kID0gcCArIGJ1ZnAt PnVzZWQ7CiAKICAgLyogV2UgdXNlIHRoaXMgdG8gbWFwIGV2ZXJ5IGNoYXJhY3RlciBpbiB0 aGUgc3RyaW5nLgkqLwotICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFuc2xhdGUgPSBidWZwLT50 cmFuc2xhdGU7CisgIExpc3BfT2JqZWN0IHRyYW5zbGF0ZSA9IGJ1ZnAtPnRyYW5zbGF0ZTsK IAotICAvKiBOb256ZXJvIGlmIEJVRlAgaXMgc2V0dXAgZnJvbSBhIG11bHRpYnl0ZSByZWdl eC4gICovCi0gIGNvbnN0IGJvb2xlYW4gbXVsdGlieXRlID0gUkVfTVVMVElCWVRFX1AgKGJ1 ZnApOworICAvKiBUcnVlIGlmIEJVRlAgaXMgc2V0dXAgZnJvbSBhIG11bHRpYnl0ZSByZWdl eC4gICovCisgIGJvb2wgbXVsdGlieXRlID0gUkVfTVVMVElCWVRFX1AgKGJ1ZnApOwogCi0g IC8qIE5vbnplcm8gaWYgU1RSSU5HMS9TVFJJTkcyIGFyZSBtdWx0aWJ5dGUuICAqLwotICBj b25zdCBib29sZWFuIHRhcmdldF9tdWx0aWJ5dGUgPSBSRV9UQVJHRVRfTVVMVElCWVRFX1Ag KGJ1ZnApOworICAvKiBUcnVlIGlmIFNUUklORzEvU1RSSU5HMiBhcmUgbXVsdGlieXRlLiAg Ki8KKyAgYm9vbCB0YXJnZXRfbXVsdGlieXRlID0gUkVfVEFSR0VUX01VTFRJQllURV9QIChi dWZwKTsKIAogICAvKiBGYWlsdXJlIHBvaW50IHN0YWNrLiAgRWFjaCBwbGFjZSB0aGF0IGNh biBoYW5kbGUgYSBmYWlsdXJlIGZ1cnRoZXIKICAgICAgZG93biB0aGUgbGluZSBwdXNoZXMg YSBmYWlsdXJlIHBvaW50IG9uIHRoaXMgc3RhY2suICBJdCBjb25zaXN0cyBvZgpAQCAtNDk3 OSwxOCArMzgyNSw3IEBAIHJlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJu X2J1ZmZlciAqYnVmcCwgcmVfY2hhciAqc3RyaW5nMSwKICAgICAgcmVnaXN0ZXJzLCBhbmQs IGZpbmFsbHksIHR3byBjaGFyIConcy4gIFRoZSBmaXJzdCBjaGFyICogaXMgd2hlcmUKICAg ICAgdG8gcmVzdW1lIHNjYW5uaW5nIHRoZSBwYXR0ZXJuOyB0aGUgc2Vjb25kIG9uZSBpcyB3 aGVyZSB0byByZXN1bWUKICAgICAgc2Nhbm5pbmcgdGhlIHN0cmluZ3MuICAqLwotI2lmZGVm IE1BVENIX01BWV9BTExPQ0FURSAvKiBvdGhlcndpc2UsIHRoaXMgaXMgZ2xvYmFsLiAgKi8K ICAgZmFpbF9zdGFja190eXBlIGZhaWxfc3RhY2s7Ci0jZW5kaWYKLSNpZmRlZiBERUJVR19D T01QSUxFU19BUkdVTUVOVFMKLSAgdW5zaWduZWQgbmZhaWx1cmVfcG9pbnRzX3B1c2hlZCA9 IDAsIG5mYWlsdXJlX3BvaW50c19wb3BwZWQgPSAwOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVk IFJFTF9BTExPQyAmJiBkZWZpbmVkIFJFR0VYX01BTExPQwotICAvKiBUaGlzIGhvbGRzIHRo ZSBwb2ludGVyIHRvIHRoZSBmYWlsdXJlIHN0YWNrLCB3aGVuCi0gICAgIGl0IGlzIGFsbG9j YXRlZCByZWxvY2F0YWJseS4gICovCi0gIGZhaWxfc3RhY2tfZWx0X3QgKmZhaWx1cmVfc3Rh Y2tfcHRyOwotI2VuZGlmCiAKICAgLyogV2UgZmlsbCBhbGwgdGhlIHJlZ2lzdGVycyBpbnRl cm5hbGx5LCBpbmRlcGVuZGVudCBvZiB3aGF0IHdlCiAgICAgIHJldHVybiwgZm9yIHVzZSBp biBiYWNrcmVmZXJlbmNlcy4gIFRoZSBudW1iZXIgaGVyZSBpbmNsdWRlcwpAQCAtNTAwNCwx OCArMzgzOSwxNCBAQCByZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9i dWZmZXIgKmJ1ZnAsIHJlX2NoYXIgKnN0cmluZzEsCiAgICAgIG1hdGNoaW5nIGFuZCB0aGUg cmVnbnVtLXRoIHJlZ2VuZCBwb2ludHMgdG8gcmlnaHQgYWZ0ZXIgd2hlcmUgd2UKICAgICAg c3RvcHBlZCBtYXRjaGluZyB0aGUgcmVnbnVtLXRoIHN1YmV4cHJlc3Npb24uICAoVGhlIHpl cm90aCByZWdpc3RlcgogICAgICBrZWVwcyB0cmFjayBvZiB3aGF0IHRoZSB3aG9sZSBwYXR0 ZXJuIG1hdGNoZXMuKSAgKi8KLSNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUgLyogb3RoZXJ3 aXNlLCB0aGVzZSBhcmUgZ2xvYmFsLiAgKi8KLSAgcmVfY2hhciAqKnJlZ3N0YXJ0LCAqKnJl Z2VuZDsKLSNlbmRpZgorICByZV9jaGFyICoqcmVnc3RhcnQgVU5JTklULCAqKnJlZ2VuZCBV TklOSVQ7CiAKICAgLyogVGhlIGZvbGxvd2luZyByZWNvcmQgdGhlIHJlZ2lzdGVyIGluZm8g YXMgZm91bmQgaW4gdGhlIGFib3ZlCiAgICAgIHZhcmlhYmxlcyB3aGVuIHdlIGZpbmQgYSBt YXRjaCBiZXR0ZXIgdGhhbiBhbnkgd2UndmUgc2VlbiBiZWZvcmUuCiAgICAgIFRoaXMgaGFw cGVucyBhcyB3ZSBiYWNrdHJhY2sgdGhyb3VnaCB0aGUgZmFpbHVyZSBwb2ludHMsIHdoaWNo IGluCiAgICAgIHR1cm4gaGFwcGVucyBvbmx5IGlmIHdlIGhhdmUgbm90IHlldCBtYXRjaGVk IHRoZSBlbnRpcmUgc3RyaW5nLiAqLwogICB1bnNpZ25lZCBiZXN0X3JlZ3Nfc2V0ID0gZmFs c2U7Ci0jaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFIC8qIG90aGVyd2lzZSwgdGhlc2UgYXJl IGdsb2JhbC4gICovCi0gIHJlX2NoYXIgKipiZXN0X3JlZ3N0YXJ0LCAqKmJlc3RfcmVnZW5k OwotI2VuZGlmCisgIHJlX2NoYXIgKipiZXN0X3JlZ3N0YXJ0IFVOSU5JVCwgKipiZXN0X3Jl Z2VuZCBVTklOSVQ7CiAKICAgLyogTG9naWNhbGx5LCB0aGlzIGlzIGBiZXN0X3JlZ2VuZFsw XScuICBCdXQgd2UgZG9uJ3Qgd2FudCB0byBoYXZlIHRvCiAgICAgIGFsbG9jYXRlIHNwYWNl IGZvciB0aGF0IGlmIHdlJ3JlIG5vdCBhbGxvY2F0aW5nIHNwYWNlIGZvciBhbnl0aGluZwpA QCAtNTAyNywxOCArMzg1OCwxMCBAQCByZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVf cGF0dGVybl9idWZmZXIgKmJ1ZnAsIHJlX2NoYXIgKnN0cmluZzEsCiAgICAgIGFuZCBuZWVk IHRvIHRlc3QgaXQsIGl0J3Mgbm90IGdhcmJhZ2UuICAqLwogICByZV9jaGFyICptYXRjaF9l bmQgPSBOVUxMOwogCi0jaWZkZWYgREVCVUdfQ09NUElMRVNfQVJHVU1FTlRTCi0gIC8qIENv dW50cyB0aGUgdG90YWwgbnVtYmVyIG9mIHJlZ2lzdGVycyBwdXNoZWQuICAqLwotICB1bnNp Z25lZCBudW1fcmVnc19wdXNoZWQgPSAwOwotI2VuZGlmCi0KLSAgREVCVUdfUFJJTlQgKCJc blxuRW50ZXJpbmcgcmVfbWF0Y2hfMi5cbiIpOwotCiAgIFJFR0VYX1VTRV9TQUZFX0FMTE9D QTsKIAogICBJTklUX0ZBSUxfU1RBQ0sgKCk7CiAKLSNpZmRlZiBNQVRDSF9NQVlfQUxMT0NB VEUKICAgLyogRG8gbm90IGJvdGhlciB0byBpbml0aWFsaXplIGFsbCB0aGUgcmVnaXN0ZXIg dmFyaWFibGVzIGlmIHRoZXJlIGFyZQogICAgICBubyBncm91cHMgaW4gdGhlIHBhdHRlcm4s IGFzIGl0IHRha2VzIGEgZmFpciBhbW91bnQgb2YgdGltZS4gIElmCiAgICAgIHRoZXJlIGFy ZSBncm91cHMsIHdlIGluY2x1ZGUgc3BhY2UgZm9yIHJlZ2lzdGVyIDAgKHRoZSB3aG9sZQpA QCAtNTA0NiwyOSArMzg2OSwxNiBAQCByZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVf cGF0dGVybl9idWZmZXIgKmJ1ZnAsIHJlX2NoYXIgKnN0cmluZzEsCiAgICAgIGFycmF5IGlu ZGV4aW5nLiAgV2Ugc2hvdWxkIGZpeCB0aGlzLiAgKi8KICAgaWYgKGJ1ZnAtPnJlX25zdWIp CiAgICAgewotICAgICAgcmVnc3RhcnQgPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCByZV9j aGFyICopOwotICAgICAgcmVnZW5kID0gUkVHRVhfVEFMTE9DIChudW1fcmVncywgcmVfY2hh ciAqKTsKLSAgICAgIGJlc3RfcmVnc3RhcnQgPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCBy ZV9jaGFyICopOwotICAgICAgYmVzdF9yZWdlbmQgPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdz LCByZV9jaGFyICopOwotCi0gICAgICBpZiAoIShyZWdzdGFydCAmJiByZWdlbmQgJiYgYmVz dF9yZWdzdGFydCAmJiBiZXN0X3JlZ2VuZCkpCi0JewotCSAgRlJFRV9WQVJJQUJMRVMgKCk7 Ci0JICByZXR1cm4gLTI7Ci0JfQotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIC8qIFdl IG11c3QgaW5pdGlhbGl6ZSBhbGwgb3VyIHZhcmlhYmxlcyB0byBOVUxMLCBzbyB0aGF0Ci0J IGBGUkVFX1ZBUklBQkxFUycgZG9lc24ndCB0cnkgdG8gZnJlZSB0aGVtLiAgKi8KLSAgICAg IHJlZ3N0YXJ0ID0gcmVnZW5kID0gYmVzdF9yZWdzdGFydCA9IGJlc3RfcmVnZW5kID0gTlVM TDsKKyAgICAgIHJlZ3N0YXJ0ID0gU0FGRV9BTExPQ0EgKG51bV9yZWdzICogNCAqIHNpemVv ZiAqcmVnc3RhcnQpOworICAgICAgcmVnZW5kID0gcmVnc3RhcnQgKyBudW1fcmVnczsKKyAg ICAgIGJlc3RfcmVnc3RhcnQgPSByZWdlbmQgKyBudW1fcmVnczsKKyAgICAgIGJlc3RfcmVn ZW5kID0gYmVzdF9yZWdzdGFydCArIG51bV9yZWdzOwogICAgIH0KLSNlbmRpZiAvKiBNQVRD SF9NQVlfQUxMT0NBVEUgKi8KIAogICAvKiBUaGUgc3RhcnRpbmcgcG9zaXRpb24gaXMgYm9n dXMuICAqLwogICBpZiAocG9zIDwgMCB8fCBwb3MgPiBzaXplMSArIHNpemUyKQogICAgIHsK LSAgICAgIEZSRUVfVkFSSUFCTEVTICgpOworICAgICAgU0FGRV9GUkVFICgpOwogICAgICAg cmV0dXJuIC0xOwogICAgIH0KIApAQCAtNTEzMCwyMyArMzk0MCwxNCBAQCByZV9tYXRjaF8y X2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIHJlX2NoYXIgKnN0 cmluZzEsCiAgICAgICBkZW5kID0gZW5kX21hdGNoXzE7CiAgICAgfQogCi0gIERFQlVHX1BS SU5UICgiVGhlIGNvbXBpbGVkIHBhdHRlcm4gaXM6ICIpOwotICBERUJVR19QUklOVF9DT01Q SUxFRF9QQVRURVJOIChidWZwLCBwLCBwZW5kKTsKLSAgREVCVUdfUFJJTlQgKCJUaGUgc3Ry aW5nIHRvIG1hdGNoIGlzOiBcIiIpOwotICBERUJVR19QUklOVF9ET1VCTEVfU1RSSU5HIChk LCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIpOwotICBERUJVR19QUklOVCAoIlwi XG4iKTsKLQogICAvKiBUaGlzIGxvb3BzIG92ZXIgcGF0dGVybiBjb21tYW5kcy4gIEl0IGV4 aXRzIGJ5IHJldHVybmluZyBmcm9tIHRoZQogICAgICBmdW5jdGlvbiBpZiB0aGUgbWF0Y2gg aXMgY29tcGxldGUsIG9yIGl0IGRyb3BzIHRocm91Z2ggaWYgdGhlIG1hdGNoCiAgICAgIGZh aWxzIGF0IHRoaXMgc3RhcnRpbmcgcG9pbnQgaW4gdGhlIGlucHV0IGRhdGEuICAqLwogICBm b3IgKDs7KQogICAgIHsKLSAgICAgIERFQlVHX1BSSU5UICgiXG4lcDogIiwgcCk7Ci0KICAg ICAgIGlmIChwID09IHBlbmQpCiAJewogCSAgLyogRW5kIG9mIHBhdHRlcm4gbWVhbnMgd2Ug bWlnaHQgaGF2ZSBzdWNjZWVkZWQuICAqLwotCSAgREVCVUdfUFJJTlQgKCJlbmQgb2YgcGF0 dGVybiAuLi4gIik7CiAKIAkgIC8qIElmIHdlIGhhdmVuJ3QgbWF0Y2hlZCB0aGUgZW50aXJl IHN0cmluZywgYW5kIHdlIHdhbnQgdGhlCiAJICAgICBsb25nZXN0IG1hdGNoLCB0cnkgYmFj a3RyYWNraW5nLiAgKi8KQEAgLTUxNjksOCArMzk3MCw2IEBAIHJlX21hdGNoXzJfaW50ZXJu YWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAqc3RyaW5nMSwK IAkJICBiZXN0X21hdGNoX3AgPSAhRklSU1RfU1RSSU5HX1AgKGQpOwogCSAgICAgIH0KIAot CSAgICAgIERFQlVHX1BSSU5UICgiYmFja3RyYWNraW5nLlxuIik7Ci0KIAkgICAgICBpZiAo IUZBSUxfU1RBQ0tfRU1QVFkgKCkpCiAJCXsgLyogTW9yZSBmYWlsdXJlIHBvaW50cyB0byB0 cnkuICAqLwogCkBAIC01MTgwLDggKzM5NzksNiBAQCByZV9tYXRjaF8yX2ludGVybmFsIChz dHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIHJlX2NoYXIgKnN0cmluZzEsCiAJCSAg ICAgIGJlc3RfcmVnc19zZXQgPSB0cnVlOwogCQkgICAgICBtYXRjaF9lbmQgPSBkOwogCi0J CSAgICAgIERFQlVHX1BSSU5UICgiXG5TQVZJTkcgbWF0Y2ggYXMgYmVzdCBzbyBmYXIuXG4i KTsKLQogCQkgICAgICBmb3IgKHJlZyA9IDE7IHJlZyA8IG51bV9yZWdzOyByZWcrKykKIAkJ CXsKIAkJCSAgYmVzdF9yZWdzdGFydFtyZWddID0gcmVnc3RhcnRbcmVnXTsKQEAgLTUyMDIs OCArMzk5OSw2IEBAIHJlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1 ZmZlciAqYnVmcCwgcmVfY2hhciAqc3RyaW5nMSwKIAkJICAgICBGb3IgZXhhbXBsZSwgdGhl IHBhdHRlcm4gYHguKnkuKnonIGFnYWluc3QgdGhlCiAJCSAgICAgc3RyaW5ncyBgeC0nIGFu ZCBgeS16LScsIGlmIHRoZSB0d28gc3RyaW5ncyBhcmUKIAkJICAgICBub3QgY29uc2VjdXRp dmUgaW4gbWVtb3J5LiAgKi8KLQkJICBERUJVR19QUklOVCAoIlJlc3RvcmluZyBiZXN0IHJl Z2lzdGVycy5cbiIpOwotCiAJCSAgZCA9IG1hdGNoX2VuZDsKIAkJICBkZW5kID0gKChkID49 IHN0cmluZzEgJiYgZCA8PSBlbmQxKQogCQkJICAgPyBlbmRfbWF0Y2hfMSA6IGVuZF9tYXRj aF8yKTsKQEAgLTUyMTcsOCArNDAxMiw2IEBAIHJlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVj dCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAqc3RyaW5nMSwKIAkgICAgfSAv KiBkICE9IGVuZF9tYXRjaF8yICovCiAKIAlzdWNjZWVkX2xhYmVsOgotCSAgREVCVUdfUFJJ TlQgKCJBY2NlcHRpbmcgbWF0Y2guXG4iKTsKLQogCSAgLyogSWYgY2FsbGVyIHdhbnRzIHJl Z2lzdGVyIGNvbnRlbnRzIGRhdGEgYmFjaywgZG8gaXQuICAqLwogCSAgaWYgKHJlZ3MgJiYg IWJ1ZnAtPm5vX3N1YikKIAkgICAgewpAQCAtNTIyOCwxMyArNDAyMSw4IEBAIHJlX21hdGNo XzJfaW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAq c3RyaW5nMSwKIAkJICAgICBleHRyYSBlbGVtZW50IGJleW9uZCBgbnVtX3JlZ3MnIGZvciB0 aGUgYC0xJyBtYXJrZXIKIAkJICAgICBHTlUgY29kZSB1c2VzLiAgKi8KIAkJICByZWdzLT5u dW1fcmVncyA9IG1heCAoUkVfTlJFR1MsIG51bV9yZWdzICsgMSk7Ci0JCSAgcmVncy0+c3Rh cnQgPSBUQUxMT0MgKHJlZ3MtPm51bV9yZWdzLCByZWdvZmZfdCk7Ci0JCSAgcmVncy0+ZW5k ID0gVEFMTE9DIChyZWdzLT5udW1fcmVncywgcmVnb2ZmX3QpOwotCQkgIGlmIChyZWdzLT5z dGFydCA9PSBOVUxMIHx8IHJlZ3MtPmVuZCA9PSBOVUxMKQotCQkgICAgewotCQkgICAgICBG UkVFX1ZBUklBQkxFUyAoKTsKLQkJICAgICAgcmV0dXJuIC0yOwotCQkgICAgfQorCQkgIHJl Z3MtPnN0YXJ0ID0gVEFMTE9DIChyZWdzLT5udW1fcmVncywgcHRyZGlmZl90KTsKKwkJICBy ZWdzLT5lbmQgPSBUQUxMT0MgKHJlZ3MtPm51bV9yZWdzLCBwdHJkaWZmX3QpOwogCQkgIGJ1 ZnAtPnJlZ3NfYWxsb2NhdGVkID0gUkVHU19SRUFMTE9DQVRFOwogCQl9CiAJICAgICAgZWxz ZSBpZiAoYnVmcC0+cmVnc19hbGxvY2F0ZWQgPT0gUkVHU19SRUFMTE9DQVRFKQpAQCAtNTI0 NCwyMCArNDAzMiwxNSBAQCByZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVy bl9idWZmZXIgKmJ1ZnAsIHJlX2NoYXIgKnN0cmluZzEsCiAJCSAgaWYgKHJlZ3MtPm51bV9y ZWdzIDwgbnVtX3JlZ3MgKyAxKQogCQkgICAgewogCQkgICAgICByZWdzLT5udW1fcmVncyA9 IG51bV9yZWdzICsgMTsKLQkJICAgICAgUkVUQUxMT0MgKHJlZ3MtPnN0YXJ0LCByZWdzLT5u dW1fcmVncywgcmVnb2ZmX3QpOwotCQkgICAgICBSRVRBTExPQyAocmVncy0+ZW5kLCByZWdz LT5udW1fcmVncywgcmVnb2ZmX3QpOwotCQkgICAgICBpZiAocmVncy0+c3RhcnQgPT0gTlVM TCB8fCByZWdzLT5lbmQgPT0gTlVMTCkKLQkJCXsKLQkJCSAgRlJFRV9WQVJJQUJMRVMgKCk7 Ci0JCQkgIHJldHVybiAtMjsKLQkJCX0KKwkJICAgICAgUkVUQUxMT0MgKHJlZ3MtPnN0YXJ0 LCByZWdzLT5udW1fcmVncywgcHRyZGlmZl90KTsKKwkJICAgICAgUkVUQUxMT0MgKHJlZ3Mt PmVuZCwgcmVncy0+bnVtX3JlZ3MsIHB0cmRpZmZfdCk7CiAJCSAgICB9CiAJCX0KIAkgICAg ICBlbHNlCiAJCXsKIAkJICAvKiBUaGVzZSBicmFjZXMgZmVuZCBvZmYgYSAiZW1wdHkgYm9k eSBpbiBhbiBlbHNlLXN0YXRlbWVudCIKIAkJICAgICB3YXJuaW5nIHVuZGVyIEdDQyB3aGVu IGFzc2VydCBleHBhbmRzIHRvIG5vdGhpbmcuICAqLwotCQkgIGFzc2VydCAoYnVmcC0+cmVn c19hbGxvY2F0ZWQgPT0gUkVHU19GSVhFRCk7CisJCSAgZWFzc2VydCAoYnVmcC0+cmVnc19h bGxvY2F0ZWQgPT0gUkVHU19GSVhFRCk7CiAJCX0KIAogCSAgICAgIC8qIENvbnZlcnQgdGhl IHBvaW50ZXIgZGF0YSBpbiBgcmVnc3RhcnQnIGFuZCBgcmVnZW5kJyB0bwpAQCAtNTI5MSwx NiArNDA3NCw4IEBAIHJlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1 ZmZlciAqYnVmcCwgcmVfY2hhciAqc3RyaW5nMSwKIAkJcmVncy0+c3RhcnRbcmVnXSA9IHJl Z3MtPmVuZFtyZWddID0gLTE7CiAJICAgIH0gLyogcmVncyAmJiAhYnVmcC0+bm9fc3ViICov CiAKLQkgIERFQlVHX1BSSU5UICgiJXUgZmFpbHVyZSBwb2ludHMgcHVzaGVkLCAldSBwb3Bw ZWQgKCV1IHJlbWFpbikuXG4iLAotCQkgICAgICAgbmZhaWx1cmVfcG9pbnRzX3B1c2hlZCwg bmZhaWx1cmVfcG9pbnRzX3BvcHBlZCwKLQkJICAgICAgIG5mYWlsdXJlX3BvaW50c19wdXNo ZWQgLSBuZmFpbHVyZV9wb2ludHNfcG9wcGVkKTsKLQkgIERFQlVHX1BSSU5UICgiJXUgcmVn aXN0ZXJzIHB1c2hlZC5cbiIsIG51bV9yZWdzX3B1c2hlZCk7Ci0KIAkgIHB0cmRpZmZfdCBk Y250ID0gUE9JTlRFUl9UT19PRkZTRVQgKGQpIC0gcG9zOwotCi0JICBERUJVR19QUklOVCAo IlJldHVybmluZyAldGQgZnJvbSByZV9tYXRjaF8yLlxuIiwgZGNudCk7Ci0KLQkgIEZSRUVf VkFSSUFCTEVTICgpOworCSAgU0FGRV9GUkVFICgpOwogCSAgcmV0dXJuIGRjbnQ7CiAJfQog CkBAIC01MzEwLDExICs0MDg1LDkgQEAgcmVfbWF0Y2hfMl9pbnRlcm5hbCAoc3RydWN0IHJl X3BhdHRlcm5fYnVmZmVyICpidWZwLCByZV9jaGFyICpzdHJpbmcxLAogCS8qIElnbm9yZSB0 aGVzZS4gIFVzZWQgdG8gaWdub3JlIHRoZSBuIG9mIHN1Y2NlZWRfbidzIHdoaWNoCiAJICAg Y3VycmVudGx5IGhhdmUgbiA9PSAwLiAgKi8KIAljYXNlIG5vX29wOgotCSAgREVCVUdfUFJJ TlQgKCJFWEVDVVRJTkcgbm9fb3AuXG4iKTsKIAkgIGJyZWFrOwogCiAJY2FzZSBzdWNjZWVk OgotCSAgREVCVUdfUFJJTlQgKCJFWEVDVVRJTkcgc3VjY2VlZC5cbiIpOwogCSAgZ290byBz dWNjZWVkX2xhYmVsOwogCiAJLyogTWF0Y2ggdGhlIG5leHQgbiBwYXR0ZXJuIGNoYXJhY3Rl cnMgZXhhY3RseS4gIFRoZSBmb2xsb3dpbmcKQEAgLTUzMjIsMzggKzQwOTUsMTAgQEAgcmVf bWF0Y2hfMl9pbnRlcm5hbCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCByZV9j aGFyICpzdHJpbmcxLAogCSAgIGFyZSB0aGUgY2hhcmFjdGVycyB0byBtYXRjaC4gICovCiAJ Y2FzZSBleGFjdG46CiAJICBtY250ID0gKnArKzsKLQkgIERFQlVHX1BSSU5UICgiRVhFQ1VU SU5HIGV4YWN0biAlZC5cbiIsIG1jbnQpOwogCiAJICAvKiBSZW1lbWJlciB0aGUgc3RhcnQg cG9pbnQgdG8gcm9sbGJhY2sgdXBvbiBmYWlsdXJlLiAgKi8KIAkgIGRmYWlsID0gZDsKIAot I2lmbmRlZiBlbWFjcwotCSAgLyogVGhpcyBpcyB3cml0dGVuIG91dCBhcyBhbiBpZi1lbHNl IHNvIHdlIGRvbid0IHdhc3RlIHRpbWUKLQkgICAgIHRlc3RpbmcgYHRyYW5zbGF0ZScgaW5z aWRlIHRoZSBsb29wLiAgKi8KLQkgIGlmIChSRV9UUkFOU0xBVEVfUCAodHJhbnNsYXRlKSkK LQkgICAgZG8KLQkgICAgICB7Ci0JCVBSRUZFVENIICgpOwotCQlpZiAoUkVfVFJBTlNMQVRF ICh0cmFuc2xhdGUsICpkKSAhPSAqcCsrKQotCQkgIHsKLQkJICAgIGQgPSBkZmFpbDsKLQkJ ICAgIGdvdG8gZmFpbDsKLQkJICB9Ci0JCWQrKzsKLQkgICAgICB9Ci0JICAgIHdoaWxlICgt LW1jbnQpOwotCSAgZWxzZQotCSAgICBkbwotCSAgICAgIHsKLQkJUFJFRkVUQ0ggKCk7Ci0J CWlmICgqZCsrICE9ICpwKyspCi0JCSAgewotCQkgICAgZCA9IGRmYWlsOwotCQkgICAgZ290 byBmYWlsOwotCQkgIH0KLQkgICAgICB9Ci0JICAgIHdoaWxlICgtLW1jbnQpOwotI2Vsc2Ug IC8qIGVtYWNzICovCiAJICAvKiBUaGUgY29zdCBvZiB0ZXN0aW5nIGB0cmFuc2xhdGUnIGlz IGNvbXBhcmF0aXZlbHkgc21hbGwuICAqLwogCSAgaWYgKHRhcmdldF9tdWx0aWJ5dGUpCiAJ ICAgIGRvCkBAIC01NDE4LDcgKzQxNjMsNyBAQCByZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1 Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIHJlX2NoYXIgKnN0cmluZzEsCiAJCWQrKzsK IAkgICAgICB9CiAJICAgIHdoaWxlICgtLW1jbnQpOwotI2VuZGlmCisKIAkgIGJyZWFrOwog CiAKQEAgLTU0MjYsMjcgKzQxNzEsMjAgQEAgcmVfbWF0Y2hfMl9pbnRlcm5hbCAoc3RydWN0 IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCByZV9jaGFyICpzdHJpbmcxLAogCWNhc2UgYW55 Y2hhcjoKIAkgIHsKIAkgICAgaW50IGJ1Zl9jaGFybGVuOwotCSAgICByZV93Y2hhcl90IGJ1 Zl9jaDsKKwkgICAgaW50IGJ1Zl9jaDsKIAkgICAgcmVnX3N5bnRheF90IHN5bnRheDsKIAot CSAgICBERUJVR19QUklOVCAoIkVYRUNVVElORyBhbnljaGFyLlxuIik7Ci0KIAkgICAgUFJF RkVUQ0ggKCk7CiAJICAgIGJ1Zl9jaCA9IFJFX1NUUklOR19DSEFSX0FORF9MRU5HVEggKGQs IGJ1Zl9jaGFybGVuLAogCQkJCQkJdGFyZ2V0X211bHRpYnl0ZSk7CiAJICAgIGJ1Zl9jaCA9 IFRSQU5TTEFURSAoYnVmX2NoKTsKIAotI2lmZGVmIGVtYWNzCiAJICAgIHN5bnRheCA9IFJF X1NZTlRBWF9FTUFDUzsKLSNlbHNlCi0JICAgIHN5bnRheCA9IGJ1ZnAtPnN5bnRheDsKLSNl bmRpZgogCiAJICAgIGlmICgoIShzeW50YXggJiBSRV9ET1RfTkVXTElORSkgJiYgYnVmX2No ID09ICdcbicpCiAJCXx8ICgoc3ludGF4ICYgUkVfRE9UX05PVF9OVUxMKSAmJiBidWZfY2gg PT0gJ1wwMDAnKSkKIAkgICAgICBnb3RvIGZhaWw7CiAKLQkgICAgREVCVUdfUFJJTlQgKCIg IE1hdGNoZWQgXCIlZFwiLlxuIiwgKmQpOwogCSAgICBkICs9IGJ1Zl9jaGFybGVuOwogCSAg fQogCSAgYnJlYWs7CkBAIC01NDU5LDEwICs0MTk3LDcgQEAgcmVfbWF0Y2hfMl9pbnRlcm5h bCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCByZV9jaGFyICpzdHJpbmcxLAog CSAgICBpbnQgbGVuOwogCiAJICAgIC8qIFdoZXRoZXIgbWF0Y2hpbmcgYWdhaW5zdCBhIHVu aWJ5dGUgY2hhcmFjdGVyLiAgKi8KLQkgICAgYm9vbGVhbiB1bmlieXRlX2NoYXIgPSBmYWxz ZTsKLQotCSAgICBERUJVR19QUklOVCAoIkVYRUNVVElORyBjaGFyc2V0JXMuXG4iLAotCQkJ IChyZV9vcGNvZGVfdCkgKihwIC0gMSkgPT0gY2hhcnNldF9ub3QgPyAiX25vdCIgOiAiIik7 CisJICAgIGJvb2wgdW5pYnl0ZV9jaGFyID0gZmFsc2U7CiAKIAkgICAgUFJFRkVUQ0ggKCk7 CiAJICAgIGNvcmlnID0gYyA9IFJFX1NUUklOR19DSEFSX0FORF9MRU5HVEggKGQsIGxlbiwg dGFyZ2V0X211bHRpYnl0ZSk7CkBAIC01NTEwLDE0ICs0MjQ1LDExIEBAIHJlX21hdGNoXzJf aW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAqc3Ry aW5nMSwKIAkgICBtYXRjaGVkIHdpdGhpbiB0aGUgZ3JvdXAgaXMgcmVjb3JkZWQgKGluIHRo ZSBpbnRlcm5hbAogCSAgIHJlZ2lzdGVycyBkYXRhIHN0cnVjdHVyZSkgdW5kZXIgdGhlIHJl Z2lzdGVyIG51bWJlci4gICovCiAJY2FzZSBzdGFydF9tZW1vcnk6Ci0JICBERUJVR19QUklO VCAoIkVYRUNVVElORyBzdGFydF9tZW1vcnkgJWQ6XG4iLCAqcCk7Ci0KIAkgIC8qIEluIGNh c2Ugd2UgbmVlZCB0byB1bmRvIHRoaXMgb3BlcmF0aW9uICh2aWEgYmFja3RyYWNraW5nKS4g ICovCiAJICBQVVNIX0ZBSUxVUkVfUkVHICgqcCk7CiAKIAkgIHJlZ3N0YXJ0WypwXSA9IGQ7 CiAJICByZWdlbmRbKnBdID0gTlVMTDsJLyogcHJvYmFibHkgdW5uZWNlc3NhcnkuICAtc20g ICovCi0JICBERUJVR19QUklOVCAoIiAgcmVnc3RhcnQ6ICV0ZFxuIiwgUE9JTlRFUl9UT19P RkZTRVQgKHJlZ3N0YXJ0WypwXSkpOwogCiAJICAvKiBNb3ZlIHBhc3QgdGhlIHJlZ2lzdGVy IG51bWJlciBhbmQgaW5uZXIgZ3JvdXAgY291bnQuICAqLwogCSAgcCArPSAxOwpAQCAtNTUy NywxMiArNDI1OSwxMCBAQCByZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVy bl9idWZmZXIgKmJ1ZnAsIHJlX2NoYXIgKnN0cmluZzEsCiAJLyogVGhlIHN0b3BfbWVtb3J5 IG9wY29kZSByZXByZXNlbnRzIHRoZSBlbmQgb2YgYSBncm91cC4gIEl0cwogCSAgIGFyZ3Vt ZW50IGlzIHRoZSBzYW1lIGFzIHN0YXJ0X21lbW9yeSdzOiB0aGUgcmVnaXN0ZXIgbnVtYmVy LiAgKi8KIAljYXNlIHN0b3BfbWVtb3J5OgotCSAgREVCVUdfUFJJTlQgKCJFWEVDVVRJTkcg c3RvcF9tZW1vcnkgJWQ6XG4iLCAqcCk7Ci0KLQkgIGFzc2VydCAoIVJFR19VTlNFVCAocmVn c3RhcnRbKnBdKSk7CisJICBlYXNzZXJ0ICghUkVHX1VOU0VUIChyZWdzdGFydFsqcF0pKTsK IAkgIC8qIFN0cmljdGx5IHNwZWFraW5nLCB0aGVyZSBzaG91bGQgYmUgY29kZSBzdWNoIGFz OgogCi0JCWFzc2VydCAoUkVHX1VOU0VUIChyZWdlbmRbKnBdKSk7CisJCWVhc3NlcnQgKFJF R19VTlNFVCAocmVnZW5kWypwXSkpOwogCQlQVVNIX0ZBSUxVUkVfUkVHU1RPUCAoKHVuc2ln bmVkIGludCkqcCk7CiAKIAkgICAgIEJ1dCB0aGUgb25seSBpbmZvIHRvIGJlIHB1c2hlZCBp cyByZWdlbmRbKnBdIGFuZCBpdCBpcyBrbm93biB0bwpAQCAtNTU0NSw3ICs0Mjc1LDYgQEAg cmVfbWF0Y2hfMl9pbnRlcm5hbCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCBy ZV9jaGFyICpzdHJpbmcxLAogCSAgICAgaXMgKm5vdCogdW5kb25lLiAgKi8KIAogCSAgcmVn ZW5kWypwXSA9IGQ7Ci0JICBERUJVR19QUklOVCAoIiAgICAgIHJlZ2VuZDogJXRkXG4iLCBQ T0lOVEVSX1RPX09GRlNFVCAocmVnZW5kWypwXSkpOwogCiAJICAvKiBNb3ZlIHBhc3QgdGhl IHJlZ2lzdGVyIG51bWJlciBhbmQgdGhlIGlubmVyIGdyb3VwIGNvdW50LiAgKi8KIAkgIHAg Kz0gMTsKQEAgLTU1NTYsOSArNDI4NSw4IEBAIHJlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVj dCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAqc3RyaW5nMSwKIAkgICBmb2xs b3dlZCBieSB0aGUgbnVtZXJpYyB2YWx1ZSBvZiA8ZGlnaXQ+IGFzIHRoZSByZWdpc3RlciBu dW1iZXIuICAqLwogCWNhc2UgZHVwbGljYXRlOgogCSAgewotCSAgICByZWdpc3RlciByZV9j aGFyICpkMiwgKmRlbmQyOworCSAgICByZV9jaGFyICpkMiwgKmRlbmQyOwogCSAgICBpbnQg cmVnbm8gPSAqcCsrOwkvKiBHZXQgd2hpY2ggcmVnaXN0ZXIgdG8gbWF0Y2ggYWdhaW5zdC4g ICovCi0JICAgIERFQlVHX1BSSU5UICgiRVhFQ1VUSU5HIGR1cGxpY2F0ZSAlZC5cbiIsIHJl Z25vKTsKIAogCSAgICAvKiBDYW4ndCBiYWNrIHJlZmVyZW5jZSBhIGdyb3VwIHdoaWNoIHdl J3ZlIG5ldmVyIG1hdGNoZWQuICAqLwogCSAgICBpZiAoUkVHX1VOU0VUIChyZWdzdGFydFty ZWdub10pIHx8IFJFR19VTlNFVCAocmVnZW5kW3JlZ25vXSkpCkBAIC01NjI1LDggKzQzNTMs NiBAQCByZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1 ZnAsIHJlX2NoYXIgKnN0cmluZzEsCiAJLyogYmVnbGluZSBtYXRjaGVzIHRoZSBlbXB0eSBz dHJpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nCiAJICAgKHVubGVzcyBgbm90 X2JvbCcgaXMgc2V0IGluIGBidWZwJyksIGFuZCBhZnRlciBuZXdsaW5lcy4gICovCiAJY2Fz ZSBiZWdsaW5lOgotCSAgREVCVUdfUFJJTlQgKCJFWEVDVVRJTkcgYmVnbGluZS5cbiIpOwot CiAJICBpZiAoQVRfU1RSSU5HU19CRUcgKGQpKQogCSAgICB7CiAJICAgICAgaWYgKCFidWZw LT5ub3RfYm9sKSBicmVhazsKQEAgLTU2NDQsOCArNDM3MCw2IEBAIHJlX21hdGNoXzJfaW50 ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAqc3RyaW5n MSwKIAogCS8qIGVuZGxpbmUgaXMgdGhlIGR1YWwgb2YgYmVnbGluZS4gICovCiAJY2FzZSBl bmRsaW5lOgotCSAgREVCVUdfUFJJTlQgKCJFWEVDVVRJTkcgZW5kbGluZS5cbiIpOwotCiAJ ICBpZiAoQVRfU1RSSU5HU19FTkQgKGQpKQogCSAgICB7CiAJICAgICAgaWYgKCFidWZwLT5u b3RfZW9sKSBicmVhazsKQEAgLTU2NjEsNyArNDM4NSw2IEBAIHJlX21hdGNoXzJfaW50ZXJu YWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAqc3RyaW5nMSwK IAogCS8qIE1hdGNoIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiB0aGUgZGF0YS4gICovCiAJ Y2FzZSBiZWdidWY6Ci0JICBERUJVR19QUklOVCAoIkVYRUNVVElORyBiZWdidWYuXG4iKTsK IAkgIGlmIChBVF9TVFJJTkdTX0JFRyAoZCkpCiAJICAgIGJyZWFrOwogCSAgZ290byBmYWls OwpAQCAtNTY2OSw3ICs0MzkyLDYgQEAgcmVfbWF0Y2hfMl9pbnRlcm5hbCAoc3RydWN0IHJl X3BhdHRlcm5fYnVmZmVyICpidWZwLCByZV9jaGFyICpzdHJpbmcxLAogCiAJLyogTWF0Y2gg YXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBkYXRhLiAgKi8KIAljYXNlIGVuZGJ1ZjoKLQkgIERF QlVHX1BSSU5UICgiRVhFQ1VUSU5HIGVuZGJ1Zi5cbiIpOwogCSAgaWYgKEFUX1NUUklOR1Nf RU5EIChkKSkKIAkgICAgYnJlYWs7CiAJICBnb3RvIGZhaWw7CkBAIC01NjkzLDggKzQ0MTUs NiBAQCByZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1 ZnAsIHJlX2NoYXIgKnN0cmluZzEsCiAJICAgY2FzZTsgdGhhdCBzZWVtcyB3b3JzZSB0aGFu IHRoaXMuICAqLwogCWNhc2Ugb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wOgogCSAgRVhU UkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOwotCSAgREVCVUdfUFJJTlQgKCJFWEVD VVRJTkcgb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wICVkICh0byAlcCk6XG4iLAotCQkg ICAgICAgbWNudCwgcCArIG1jbnQpOwogCiAJICBQVVNIX0ZBSUxVUkVfUE9JTlQgKHAgLSAz LCBOVUxMKTsKIAkgIGJyZWFrOwpAQCAtNTcxNSwxMCArNDQzNSw4IEBAIHJlX21hdGNoXzJf aW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAqc3Ry aW5nMSwKIAkgICAgIHRoZSBsb29wLiAgKi8KIAljYXNlIG9uX2ZhaWx1cmVfanVtcF9uYXN0 eWxvb3A6CiAJICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcCk7Ci0JICBERUJV R19QUklOVCAoIkVYRUNVVElORyBvbl9mYWlsdXJlX2p1bXBfbmFzdHlsb29wICVkICh0byAl cCk6XG4iLAotCQkgICAgICAgbWNudCwgcCArIG1jbnQpOwogCi0JICBhc3NlcnQgKChyZV9v cGNvZGVfdClwWy00XSA9PSBub19vcCk7CisJICBlYXNzZXJ0ICgocmVfb3Bjb2RlX3QpcFst NF0gPT0gbm9fb3ApOwogCSAgewogCSAgICBpbnQgY3ljbGUgPSAwOwogCSAgICBDSEVDS19J TkZJTklURV9MT09QIChwIC0gNCwgZCk7CkBAIC01NzM2LDggKzQ0NTQsNiBAQCByZV9tYXRj aF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIHJlX2NoYXIg KnN0cmluZzEsCiAJY2FzZSBvbl9mYWlsdXJlX2p1bXBfbG9vcDoKIAlvbl9mYWlsdXJlOgog CSAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOwotCSAgREVCVUdfUFJJTlQg KCJFWEVDVVRJTkcgb25fZmFpbHVyZV9qdW1wX2xvb3AgJWQgKHRvICVwKTpcbiIsCi0JCSAg ICAgICBtY250LCBwICsgbWNudCk7CiAJICB7CiAJICAgIGludCBjeWNsZSA9IDA7CiAJICAg IENIRUNLX0lORklOSVRFX0xPT1AgKHAgLSAzLCBkKTsKQEAgLTU3NjgsOSArNDQ4NCw2IEBA IHJlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwg cmVfY2hhciAqc3RyaW5nMSwKIAkgICBwb3BfZmFpbHVyZV9qdW1wIGJhY2sgdG8gdGhpcyBv bl9mYWlsdXJlX2p1bXAuICAqLwogCWNhc2Ugb25fZmFpbHVyZV9qdW1wOgogCSAgRVhUUkFD VF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOwotCSAgREVCVUdfUFJJTlQgKCJFWEVDVVRJ Tkcgb25fZmFpbHVyZV9qdW1wICVkICh0byAlcCk6XG4iLAotCQkgICAgICAgbWNudCwgcCAr IG1jbnQpOwotCiAJICBQVVNIX0ZBSUxVUkVfUE9JTlQgKHAgLTMsIGQpOwogCSAgYnJlYWs7 CiAKQEAgLTU3ODMsMTEgKzQ0OTYsOSBAQCByZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3Qg cmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIHJlX2NoYXIgKnN0cmluZzEsCiAJICAgb25fZmFp bHVyZV9rZWVwX3N0cmluZ19qdW1wIGluc3RlYWQgb2Ygb25fZmFpbHVyZV9qdW1wLiAgKi8K IAljYXNlIG9uX2ZhaWx1cmVfanVtcF9zbWFydDoKIAkgIEVYVFJBQ1RfTlVNQkVSX0FORF9J TkNSIChtY250LCBwKTsKLQkgIERFQlVHX1BSSU5UICgiRVhFQ1VUSU5HIG9uX2ZhaWx1cmVf anVtcF9zbWFydCAlZCAodG8gJXApLlxuIiwKLQkJICAgICAgIG1jbnQsIHAgKyBtY250KTsK IAkgIHsKIAkgICAgcmVfY2hhciAqcDEgPSBwOyAvKiBOZXh0IG9wZXJhdGlvbi4gICovCi0J ICAgIC8qIEhlcmUsIHdlIGRpc2NhcmQgYGNvbnN0JywgbWFraW5nIHJlX21hdGNoIG5vbi1y ZWVudHJhbnQuICAqLworCSAgICAvKiBEaXNjYXJkICdjb25zdCcsIG1ha2luZyByZV9zZWFy Y2ggbm9uLXJlZW50cmFudC4gICovCiAJICAgIHVuc2lnbmVkIGNoYXIgKnAyID0gKHVuc2ln bmVkIGNoYXIgKikgcCArIG1jbnQ7IC8qIEp1bXAgZGVzdC4gICovCiAJICAgIHVuc2lnbmVk IGNoYXIgKnAzID0gKHVuc2lnbmVkIGNoYXIgKikgcCAtIDM7IC8qIG9wY29kZSBsb2NhdGlv bi4gICovCiAKQEAgLTU3OTgsMjMgKzQ1MDksMTkgQEAgcmVfbWF0Y2hfMl9pbnRlcm5hbCAo c3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCByZV9jaGFyICpzdHJpbmcxLAogCiAJ ICAgIC8qIEVuc3VyZSB0aGlzIGlzIGluZGVlZCB0aGUgdHJpdmlhbCBraW5kIG9mIGxvb3AK IAkgICAgICAgd2UgYXJlIGV4cGVjdGluZy4gICovCi0JICAgIGFzc2VydCAoc2tpcF9vbmVf Y2hhciAocDEpID09IHAyIC0gMyk7Ci0JICAgIGFzc2VydCAoKHJlX29wY29kZV90KSBwMlst M10gPT0ganVtcCAmJiBwMiArIG1jbnQgPT0gcCk7Ci0JICAgIERFQlVHX1NUQVRFTUVOVCAo ZGVidWcgKz0gMik7CisJICAgIGVhc3NlcnQgKHNraXBfb25lX2NoYXIgKHAxKSA9PSBwMiAt IDMpOworCSAgICBlYXNzZXJ0ICgocmVfb3Bjb2RlX3QpIHAyWy0zXSA9PSBqdW1wICYmIHAy ICsgbWNudCA9PSBwKTsKIAkgICAgaWYgKG11dHVhbGx5X2V4Y2x1c2l2ZV9wIChidWZwLCBw MSwgcDIpKQogCSAgICAgIHsKIAkJLyogVXNlIGEgZmFzdCBgb25fZmFpbHVyZV9rZWVwX3N0 cmluZ19qdW1wJyBsb29wLiAgKi8KLQkJREVCVUdfUFJJTlQgKCIgIHNtYXJ0IGV4Y2x1c2l2 ZSA9PiBmYXN0IGxvb3AuXG4iKTsKIAkJKnAzID0gKHVuc2lnbmVkIGNoYXIpIG9uX2ZhaWx1 cmVfa2VlcF9zdHJpbmdfanVtcDsKIAkJU1RPUkVfTlVNQkVSIChwMiAtIDIsIG1jbnQgKyAz KTsKIAkgICAgICB9CiAJICAgIGVsc2UKIAkgICAgICB7CiAJCS8qIERlZmF1bHQgdG8gYSBz YWZlIGBvbl9mYWlsdXJlX2p1bXAnIGxvb3AuICAqLwotCQlERUJVR19QUklOVCAoIiAgc21h cnQgZGVmYXVsdCA9PiBzbG93IGxvb3AuXG4iKTsKIAkJKnAzID0gKHVuc2lnbmVkIGNoYXIp IG9uX2ZhaWx1cmVfanVtcDsKIAkgICAgICB9Ci0JICAgIERFQlVHX1NUQVRFTUVOVCAoZGVi dWcgLT0gMik7CiAJICB9CiAJICBicmVhazsKIApAQCAtNTgyMyw5ICs0NTMwLDcgQEAgcmVf bWF0Y2hfMl9pbnRlcm5hbCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCByZV9j aGFyICpzdHJpbmcxLAogCXVuY29uZGl0aW9uYWxfanVtcDoKIAkgIG1heWJlX3F1aXQgKCk7 CiAJICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcCk7CS8qIEdldCB0aGUgYW1v dW50IHRvIGp1bXAuICAqLwotCSAgREVCVUdfUFJJTlQgKCJFWEVDVVRJTkcganVtcCAlZCAi LCBtY250KTsKIAkgIHAgKz0gbWNudDsJCQkJLyogRG8gdGhlIGp1bXAuICAqLwotCSAgREVC VUdfUFJJTlQgKCIodG8gJXApLlxuIiwgcCk7CiAJICBicmVhazsKIAogCkBAIC01ODM0LDEy ICs0NTM5LDExIEBAIHJlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1 ZmZlciAqYnVmcCwgcmVfY2hhciAqc3RyaW5nMSwKIAljYXNlIHN1Y2NlZWRfbjoKIAkgIC8q IFNpZ25lZG5lc3MgZG9lc24ndCBtYXR0ZXIgc2luY2Ugd2Ugb25seSBjb21wYXJlIE1DTlQg dG8gMC4gICovCiAJICBFWFRSQUNUX05VTUJFUiAobWNudCwgcCArIDIpOwotCSAgREVCVUdf UFJJTlQgKCJFWEVDVVRJTkcgc3VjY2VlZF9uICVkLlxuIiwgbWNudCk7CiAKIAkgIC8qIE9y aWdpbmFsbHksIG1jbnQgaXMgaG93IG1hbnkgdGltZXMgd2UgSEFWRSB0byBzdWNjZWVkLiAg Ki8KIAkgIGlmIChtY250ICE9IDApCiAJICAgIHsKLQkgICAgICAvKiBIZXJlLCB3ZSBkaXNj YXJkIGBjb25zdCcsIG1ha2luZyByZV9tYXRjaCBub24tcmVlbnRyYW50LiAgKi8KKwkgICAg ICAvKiBEaXNjYXJkICdjb25zdCcsIG1ha2luZyByZV9zZWFyY2ggbm9uLXJlZW50cmFudC4g ICovCiAJICAgICAgdW5zaWduZWQgY2hhciAqcDIgPSAodW5zaWduZWQgY2hhciAqKSBwICsg MjsgLyogY291bnRlciBsb2MuICAqLwogCSAgICAgIG1jbnQtLTsKIAkgICAgICBwICs9IDQ7 CkBAIC01ODUzLDEyICs0NTU3LDExIEBAIHJlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVjdCBy ZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAqc3RyaW5nMSwKIAljYXNlIGp1bXBf bjoKIAkgIC8qIFNpZ25lZG5lc3MgZG9lc24ndCBtYXR0ZXIgc2luY2Ugd2Ugb25seSBjb21w YXJlIE1DTlQgdG8gMC4gICovCiAJICBFWFRSQUNUX05VTUJFUiAobWNudCwgcCArIDIpOwot CSAgREVCVUdfUFJJTlQgKCJFWEVDVVRJTkcganVtcF9uICVkLlxuIiwgbWNudCk7CiAKIAkg IC8qIE9yaWdpbmFsbHksIHRoaXMgaXMgaG93IG1hbnkgdGltZXMgd2UgQ0FOIGp1bXAuICAq LwogCSAgaWYgKG1jbnQgIT0gMCkKIAkgICAgewotCSAgICAgICAvKiBIZXJlLCB3ZSBkaXNj YXJkIGBjb25zdCcsIG1ha2luZyByZV9tYXRjaCBub24tcmVlbnRyYW50LiAgKi8KKwkgICAg ICAvKiBEaXNjYXJkICdjb25zdCcsIG1ha2luZyByZV9zZWFyY2ggbm9uLXJlZW50cmFudC4g ICovCiAJICAgICAgdW5zaWduZWQgY2hhciAqcDIgPSAodW5zaWduZWQgY2hhciAqKSBwICsg MjsgLyogY291bnRlciBsb2MuICAqLwogCSAgICAgIG1jbnQtLTsKIAkgICAgICBQVVNIX05V TUJFUiAocDIsIG1jbnQpOwpAQCAtNTg3MiwxNCArNDU3NSwxMiBAQCByZV9tYXRjaF8yX2lu dGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIHJlX2NoYXIgKnN0cmlu ZzEsCiAJY2FzZSBzZXRfbnVtYmVyX2F0OgogCSAgewogCSAgICB1bnNpZ25lZCBjaGFyICpw MjsJLyogTG9jYXRpb24gb2YgdGhlIGNvdW50ZXIuICAqLwotCSAgICBERUJVR19QUklOVCAo IkVYRUNVVElORyBzZXRfbnVtYmVyX2F0LlxuIik7CiAKIAkgICAgRVhUUkFDVF9OVU1CRVJf QU5EX0lOQ1IgKG1jbnQsIHApOwotCSAgICAvKiBIZXJlLCB3ZSBkaXNjYXJkIGBjb25zdCcs IG1ha2luZyByZV9tYXRjaCBub24tcmVlbnRyYW50LiAgKi8KKwkgICAgLyogRGlzY2FyZCAn Y29uc3QnLCBtYWtpbmcgcmVfc2VhcmNoIG5vbi1yZWVudHJhbnQuICAqLwogCSAgICBwMiA9 ICh1bnNpZ25lZCBjaGFyICopIHAgKyBtY250OwogCSAgICAvKiBTaWduZWRuZXNzIGRvZXNu J3QgbWF0dGVyIHNpbmNlIHdlIG9ubHkgY29weSBNQ05UJ3MgYml0cy4gICovCiAJICAgIEVY VFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwKTsKLQkgICAgREVCVUdfUFJJTlQgKCIg IFNldHRpbmcgJXAgdG8gJWQuXG4iLCBwMiwgbWNudCk7CiAJICAgIFBVU0hfTlVNQkVSIChw MiwgbWNudCk7CiAJICAgIGJyZWFrOwogCSAgfQpAQCAtNTg4Nyw4ICs0NTg4LDcgQEAgcmVf bWF0Y2hfMl9pbnRlcm5hbCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCByZV9j aGFyICpzdHJpbmcxLAogCWNhc2Ugd29yZGJvdW5kOgogCWNhc2Ugbm90d29yZGJvdW5kOgog CSAgewotCSAgICBib29sZWFuIG5vdCA9IChyZV9vcGNvZGVfdCkgKihwIC0gMSkgPT0gbm90 d29yZGJvdW5kOwotCSAgICBERUJVR19QUklOVCAoIkVYRUNVVElORyAlc3dvcmRib3VuZC5c biIsIG5vdCA/ICJub3QiIDogIiIpOworCSAgICBib29sIG5vdCA9IChyZV9vcGNvZGVfdCkg KihwIC0gMSkgPT0gbm90d29yZGJvdW5kOwogCiAJICAgIC8qIFdlIFNVQ0NFRUQgKG9yIEZB SUwpIGluIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNhc2VzOiAqLwogCkBAIC01ODk5LDE5ICs0 NTk5LDE1IEBAIHJlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZl ciAqYnVmcCwgcmVfY2hhciAqc3RyaW5nMSwKIAkgICAgICB7CiAJCS8qIEMxIGlzIHRoZSBj aGFyYWN0ZXIgYmVmb3JlIEQsIFMxIGlzIHRoZSBzeW50YXggb2YgQzEsIEMyCiAJCSAgIGlz IHRoZSBjaGFyYWN0ZXIgYXQgRCwgYW5kIFMyIGlzIHRoZSBzeW50YXggb2YgQzIuICAqLwot CQlyZV93Y2hhcl90IGMxLCBjMjsKKwkJaW50IGMxLCBjMjsKIAkJaW50IHMxLCBzMjsKIAkJ aW50IGR1bW15OwotI2lmZGVmIGVtYWNzCi0JCXNzaXplX3Qgb2Zmc2V0ID0gUFRSX1RPX09G RlNFVCAoZCAtIDEpOwotCQlzc2l6ZV90IGNoYXJwb3MgPSBTWU5UQVhfVEFCTEVfQllURV9U T19DSEFSIChvZmZzZXQpOworCQlwdHJkaWZmX3Qgb2Zmc2V0ID0gUFRSX1RPX09GRlNFVCAo ZCAtIDEpOworCQlwdHJkaWZmX3QgY2hhcnBvcyA9IFNZTlRBWF9UQUJMRV9CWVRFX1RPX0NI QVIgKG9mZnNldCk7CiAJCVVQREFURV9TWU5UQVhfVEFCTEUgKGNoYXJwb3MpOwotI2VuZGlm CiAJCUdFVF9DSEFSX0JFRk9SRV8yIChjMSwgZCwgc3RyaW5nMSwgZW5kMSwgc3RyaW5nMiwg ZW5kMik7CiAJCXMxID0gU1lOVEFYIChjMSk7Ci0jaWZkZWYgZW1hY3MKIAkJVVBEQVRFX1NZ TlRBWF9UQUJMRV9GT1JXQVJEIChjaGFycG9zICsgMSk7Ci0jZW5kaWYKIAkJUFJFRkVUQ0hf Tk9MSU1JVCAoKTsKIAkJR0VUX0NIQVJfQUZURVIgKGMyLCBkLCBkdW1teSk7CiAJCXMyID0g U1lOVEFYIChjMik7CkBAIC01OTMwLDggKzQ2MjYsNiBAQCByZV9tYXRjaF8yX2ludGVybmFs IChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIHJlX2NoYXIgKnN0cmluZzEsCiAJ ICB9CiAKIAljYXNlIHdvcmRiZWc6Ci0JICBERUJVR19QUklOVCAoIkVYRUNVVElORyB3b3Jk YmVnLlxuIik7Ci0KIAkgIC8qIFdlIEZBSUwgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgY2Fz ZXM6ICovCiAKIAkgIC8qIENhc2UgMTogRCBpcyBhdCB0aGUgZW5kIG9mIHN0cmluZy4gICov CkBAIC01OTQxLDE0ICs0NjM1LDEyIEBAIHJlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVjdCBy ZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAqc3RyaW5nMSwKIAkgICAgewogCSAg ICAgIC8qIEMxIGlzIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIEQsIFMxIGlzIHRoZSBzeW50YXgg b2YgQzEsIEMyCiAJCSBpcyB0aGUgY2hhcmFjdGVyIGF0IEQsIGFuZCBTMiBpcyB0aGUgc3lu dGF4IG9mIEMyLiAgKi8KLQkgICAgICByZV93Y2hhcl90IGMxLCBjMjsKKwkgICAgICBpbnQg YzEsIGMyOwogCSAgICAgIGludCBzMSwgczI7CiAJICAgICAgaW50IGR1bW15OwotI2lmZGVm IGVtYWNzCi0JICAgICAgc3NpemVfdCBvZmZzZXQgPSBQVFJfVE9fT0ZGU0VUIChkKTsKLQkg ICAgICBzc2l6ZV90IGNoYXJwb3MgPSBTWU5UQVhfVEFCTEVfQllURV9UT19DSEFSIChvZmZz ZXQpOworCSAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBQVFJfVE9fT0ZGU0VUIChkKTsKKwkg ICAgICBwdHJkaWZmX3QgY2hhcnBvcyA9IFNZTlRBWF9UQUJMRV9CWVRFX1RPX0NIQVIgKG9m ZnNldCk7CiAJICAgICAgVVBEQVRFX1NZTlRBWF9UQUJMRSAoY2hhcnBvcyk7Ci0jZW5kaWYK IAkgICAgICBQUkVGRVRDSCAoKTsKIAkgICAgICBHRVRfQ0hBUl9BRlRFUiAoYzIsIGQsIGR1 bW15KTsKIAkgICAgICBzMiA9IFNZTlRBWCAoYzIpOwpAQCAtNTk2MSw5ICs0NjUzLDcgQEAg cmVfbWF0Y2hfMl9pbnRlcm5hbCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCBy ZV9jaGFyICpzdHJpbmcxLAogCSAgICAgIGlmICghQVRfU1RSSU5HU19CRUcgKGQpKQogCQl7 CiAJCSAgR0VUX0NIQVJfQkVGT1JFXzIgKGMxLCBkLCBzdHJpbmcxLCBlbmQxLCBzdHJpbmcy LCBlbmQyKTsKLSNpZmRlZiBlbWFjcwogCQkgIFVQREFURV9TWU5UQVhfVEFCTEVfQkFDS1dB UkQgKGNoYXJwb3MgLSAxKTsKLSNlbmRpZgogCQkgIHMxID0gU1lOVEFYIChjMSk7CiAKIAkJ ICAvKiAuLi4gYW5kIFMxIGlzIFN3b3JkLCBhbmQgV09SRF9CT1VOREFSWV9QIChDMSwgQzIp CkBAIC01OTc1LDggKzQ2NjUsNiBAQCByZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVf cGF0dGVybl9idWZmZXIgKmJ1ZnAsIHJlX2NoYXIgKnN0cmluZzEsCiAJICBicmVhazsKIAog CWNhc2Ugd29yZGVuZDoKLQkgIERFQlVHX1BSSU5UICgiRVhFQ1VUSU5HIHdvcmRlbmQuXG4i KTsKLQogCSAgLyogV2UgRkFJTCBpbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBjYXNlczogKi8K IAogCSAgLyogQ2FzZSAxOiBEIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc3RyaW5nLiAgKi8K QEAgLTU5ODYsMTQgKzQ2NzQsMTIgQEAgcmVfbWF0Y2hfMl9pbnRlcm5hbCAoc3RydWN0IHJl X3BhdHRlcm5fYnVmZmVyICpidWZwLCByZV9jaGFyICpzdHJpbmcxLAogCSAgICB7CiAJICAg ICAgLyogQzEgaXMgdGhlIGNoYXJhY3RlciBiZWZvcmUgRCwgUzEgaXMgdGhlIHN5bnRheCBv ZiBDMSwgQzIKIAkJIGlzIHRoZSBjaGFyYWN0ZXIgYXQgRCwgYW5kIFMyIGlzIHRoZSBzeW50 YXggb2YgQzIuICAqLwotCSAgICAgIHJlX3djaGFyX3QgYzEsIGMyOworCSAgICAgIGludCBj MSwgYzI7CiAJICAgICAgaW50IHMxLCBzMjsKIAkgICAgICBpbnQgZHVtbXk7Ci0jaWZkZWYg ZW1hY3MKLQkgICAgICBzc2l6ZV90IG9mZnNldCA9IFBUUl9UT19PRkZTRVQgKGQpIC0gMTsK LQkgICAgICBzc2l6ZV90IGNoYXJwb3MgPSBTWU5UQVhfVEFCTEVfQllURV9UT19DSEFSIChv ZmZzZXQpOworCSAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBQVFJfVE9fT0ZGU0VUIChkKSAt IDE7CisJICAgICAgcHRyZGlmZl90IGNoYXJwb3MgPSBTWU5UQVhfVEFCTEVfQllURV9UT19D SEFSIChvZmZzZXQpOwogCSAgICAgIFVQREFURV9TWU5UQVhfVEFCTEUgKGNoYXJwb3MpOwot I2VuZGlmCiAJICAgICAgR0VUX0NIQVJfQkVGT1JFXzIgKGMxLCBkLCBzdHJpbmcxLCBlbmQx LCBzdHJpbmcyLCBlbmQyKTsKIAkgICAgICBzMSA9IFNZTlRBWCAoYzEpOwogCkBAIC02MDA2 LDkgKzQ2OTIsNyBAQCByZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9i dWZmZXIgKmJ1ZnAsIHJlX2NoYXIgKnN0cmluZzEsCiAJCXsKIAkJICBQUkVGRVRDSF9OT0xJ TUlUICgpOwogCQkgIEdFVF9DSEFSX0FGVEVSIChjMiwgZCwgZHVtbXkpOwotI2lmZGVmIGVt YWNzCiAJCSAgVVBEQVRFX1NZTlRBWF9UQUJMRV9GT1JXQVJEIChjaGFycG9zKTsKLSNlbmRp ZgogCQkgIHMyID0gU1lOVEFYIChjMik7CiAKIAkJICAvKiAuLi4gYW5kIFMyIGlzIFN3b3Jk LCBhbmQgV09SRF9CT1VOREFSWV9QIChDMSwgQzIpCkBAIC02MDIwLDggKzQ3MDQsNiBAQCBy ZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIHJl X2NoYXIgKnN0cmluZzEsCiAJICBicmVhazsKIAogCWNhc2Ugc3ltYmVnOgotCSAgREVCVUdf UFJJTlQgKCJFWEVDVVRJTkcgc3ltYmVnLlxuIik7Ci0KIAkgIC8qIFdlIEZBSUwgaW4gb25l IG9mIHRoZSBmb2xsb3dpbmcgY2FzZXM6ICovCiAKIAkgIC8qIENhc2UgMTogRCBpcyBhdCB0 aGUgZW5kIG9mIHN0cmluZy4gICovCkBAIC02MDMxLDEzICs0NzEzLDExIEBAIHJlX21hdGNo XzJfaW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAq c3RyaW5nMSwKIAkgICAgewogCSAgICAgIC8qIEMxIGlzIHRoZSBjaGFyYWN0ZXIgYmVmb3Jl IEQsIFMxIGlzIHRoZSBzeW50YXggb2YgQzEsIEMyCiAJCSBpcyB0aGUgY2hhcmFjdGVyIGF0 IEQsIGFuZCBTMiBpcyB0aGUgc3ludGF4IG9mIEMyLiAgKi8KLQkgICAgICByZV93Y2hhcl90 IGMxLCBjMjsKKwkgICAgICBpbnQgYzEsIGMyOwogCSAgICAgIGludCBzMSwgczI7Ci0jaWZk ZWYgZW1hY3MKLQkgICAgICBzc2l6ZV90IG9mZnNldCA9IFBUUl9UT19PRkZTRVQgKGQpOwot CSAgICAgIHNzaXplX3QgY2hhcnBvcyA9IFNZTlRBWF9UQUJMRV9CWVRFX1RPX0NIQVIgKG9m ZnNldCk7CisJICAgICAgcHRyZGlmZl90IG9mZnNldCA9IFBUUl9UT19PRkZTRVQgKGQpOwor CSAgICAgIHB0cmRpZmZfdCBjaGFycG9zID0gU1lOVEFYX1RBQkxFX0JZVEVfVE9fQ0hBUiAo b2Zmc2V0KTsKIAkgICAgICBVUERBVEVfU1lOVEFYX1RBQkxFIChjaGFycG9zKTsKLSNlbmRp ZgogCSAgICAgIFBSRUZFVENIICgpOwogCSAgICAgIGMyID0gUkVfU1RSSU5HX0NIQVIgKGQs IHRhcmdldF9tdWx0aWJ5dGUpOwogCSAgICAgIHMyID0gU1lOVEFYIChjMik7CkBAIC02MDUw LDkgKzQ3MzAsNyBAQCByZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9i dWZmZXIgKmJ1ZnAsIHJlX2NoYXIgKnN0cmluZzEsCiAJICAgICAgaWYgKCFBVF9TVFJJTkdT X0JFRyAoZCkpCiAJCXsKIAkJICBHRVRfQ0hBUl9CRUZPUkVfMiAoYzEsIGQsIHN0cmluZzEs IGVuZDEsIHN0cmluZzIsIGVuZDIpOwotI2lmZGVmIGVtYWNzCiAJCSAgVVBEQVRFX1NZTlRB WF9UQUJMRV9CQUNLV0FSRCAoY2hhcnBvcyAtIDEpOwotI2VuZGlmCiAJCSAgczEgPSBTWU5U QVggKGMxKTsKIAogCQkgIC8qIC4uLiBhbmQgUzEgaXMgU3dvcmQgb3IgU3N5bWJvbC4gICov CkBAIC02MDYzLDggKzQ3NDEsNiBAQCByZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVf cGF0dGVybl9idWZmZXIgKmJ1ZnAsIHJlX2NoYXIgKnN0cmluZzEsCiAJICBicmVhazsKIAog CWNhc2Ugc3ltZW5kOgotCSAgREVCVUdfUFJJTlQgKCJFWEVDVVRJTkcgc3ltZW5kLlxuIik7 Ci0KIAkgIC8qIFdlIEZBSUwgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgY2FzZXM6ICovCiAK IAkgIC8qIENhc2UgMTogRCBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHN0cmluZy4gICovCkBA IC02MDc0LDEzICs0NzUwLDExIEBAIHJlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVjdCByZV9w YXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAqc3RyaW5nMSwKIAkgICAgewogCSAgICAg IC8qIEMxIGlzIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIEQsIFMxIGlzIHRoZSBzeW50YXggb2Yg QzEsIEMyCiAJCSBpcyB0aGUgY2hhcmFjdGVyIGF0IEQsIGFuZCBTMiBpcyB0aGUgc3ludGF4 IG9mIEMyLiAgKi8KLQkgICAgICByZV93Y2hhcl90IGMxLCBjMjsKKwkgICAgICBpbnQgYzEs IGMyOwogCSAgICAgIGludCBzMSwgczI7Ci0jaWZkZWYgZW1hY3MKLQkgICAgICBzc2l6ZV90 IG9mZnNldCA9IFBUUl9UT19PRkZTRVQgKGQpIC0gMTsKLQkgICAgICBzc2l6ZV90IGNoYXJw b3MgPSBTWU5UQVhfVEFCTEVfQllURV9UT19DSEFSIChvZmZzZXQpOworCSAgICAgIHB0cmRp ZmZfdCBvZmZzZXQgPSBQVFJfVE9fT0ZGU0VUIChkKSAtIDE7CisJICAgICAgcHRyZGlmZl90 IGNoYXJwb3MgPSBTWU5UQVhfVEFCTEVfQllURV9UT19DSEFSIChvZmZzZXQpOwogCSAgICAg IFVQREFURV9TWU5UQVhfVEFCTEUgKGNoYXJwb3MpOwotI2VuZGlmCiAJICAgICAgR0VUX0NI QVJfQkVGT1JFXzIgKGMxLCBkLCBzdHJpbmcxLCBlbmQxLCBzdHJpbmcyLCBlbmQyKTsKIAkg ICAgICBzMSA9IFNZTlRBWCAoYzEpOwogCkBAIC02MDkzLDkgKzQ3NjcsNyBAQCByZV9tYXRj aF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIHJlX2NoYXIg KnN0cmluZzEsCiAJCXsKIAkJICBQUkVGRVRDSF9OT0xJTUlUICgpOwogCQkgIGMyID0gUkVf U1RSSU5HX0NIQVIgKGQsIHRhcmdldF9tdWx0aWJ5dGUpOwotI2lmZGVmIGVtYWNzCiAJCSAg VVBEQVRFX1NZTlRBWF9UQUJMRV9GT1JXQVJEIChjaGFycG9zICsgMSk7Ci0jZW5kaWYKIAkJ ICBzMiA9IFNZTlRBWCAoYzIpOwogCiAJCSAgLyogLi4uIGFuZCBTMiBpcyBTd29yZCBvciBT c3ltYm9sLiAgKi8KQEAgLTYxMDgsMjEgKzQ3ODAsMTcgQEAgcmVfbWF0Y2hfMl9pbnRlcm5h bCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCByZV9jaGFyICpzdHJpbmcxLAog CWNhc2Ugc3ludGF4c3BlYzoKIAljYXNlIG5vdHN5bnRheHNwZWM6CiAJICB7Ci0JICAgIGJv b2xlYW4gbm90ID0gKHJlX29wY29kZV90KSAqKHAgLSAxKSA9PSBub3RzeW50YXhzcGVjOwor CSAgICBib29sIG5vdCA9IChyZV9vcGNvZGVfdCkgKihwIC0gMSkgPT0gbm90c3ludGF4c3Bl YzsKIAkgICAgbWNudCA9ICpwKys7Ci0JICAgIERFQlVHX1BSSU5UICgiRVhFQ1VUSU5HICVz c3ludGF4c3BlYyAlZC5cbiIsIG5vdCA/ICJub3QiIDogIiIsCi0JCQkgbWNudCk7CiAJICAg IFBSRUZFVENIICgpOwotI2lmZGVmIGVtYWNzCiAJICAgIHsKLQkgICAgICBzc2l6ZV90IG9m ZnNldCA9IFBUUl9UT19PRkZTRVQgKGQpOwotCSAgICAgIHNzaXplX3QgcG9zMSA9IFNZTlRB WF9UQUJMRV9CWVRFX1RPX0NIQVIgKG9mZnNldCk7CisJICAgICAgcHRyZGlmZl90IG9mZnNl dCA9IFBUUl9UT19PRkZTRVQgKGQpOworCSAgICAgIHB0cmRpZmZfdCBwb3MxID0gU1lOVEFY X1RBQkxFX0JZVEVfVE9fQ0hBUiAob2Zmc2V0KTsKIAkgICAgICBVUERBVEVfU1lOVEFYX1RB QkxFIChwb3MxKTsKIAkgICAgfQotI2VuZGlmCiAJICAgIHsKIAkgICAgICBpbnQgbGVuOwot CSAgICAgIHJlX3djaGFyX3QgYzsKKwkgICAgICBpbnQgYzsKIAogCSAgICAgIEdFVF9DSEFS X0FGVEVSIChjLCBkLCBsZW4pOwogCSAgICAgIGlmICgoU1lOVEFYIChjKSAhPSAoZW51bSBz eW50YXhjb2RlKSBtY250KSBeIG5vdCkKQEAgLTYxMzIsOSArNDgwMCw3IEBAIHJlX21hdGNo XzJfaW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAq c3RyaW5nMSwKIAkgIH0KIAkgIGJyZWFrOwogCi0jaWZkZWYgZW1hY3MKIAljYXNlIGF0X2Rv dDoKLQkgIERFQlVHX1BSSU5UICgiRVhFQ1VUSU5HIGF0X2RvdC5cbiIpOwogCSAgaWYgKFBU Ul9CWVRFX1BPUyAoZCkgIT0gUFRfQllURSkKIAkgICAgZ290byBmYWlsOwogCSAgYnJlYWs7 CkBAIC02MTQyLDE1ICs0ODA4LDEzIEBAIHJlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVjdCBy ZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAqc3RyaW5nMSwKIAljYXNlIGNhdGVn b3J5c3BlYzoKIAljYXNlIG5vdGNhdGVnb3J5c3BlYzoKIAkgIHsKLQkgICAgYm9vbGVhbiBu b3QgPSAocmVfb3Bjb2RlX3QpICoocCAtIDEpID09IG5vdGNhdGVnb3J5c3BlYzsKKwkgICAg Ym9vbCBub3QgPSAocmVfb3Bjb2RlX3QpICoocCAtIDEpID09IG5vdGNhdGVnb3J5c3BlYzsK IAkgICAgbWNudCA9ICpwKys7Ci0JICAgIERFQlVHX1BSSU5UICgiRVhFQ1VUSU5HICVzY2F0 ZWdvcnlzcGVjICVkLlxuIiwKLQkJCSBub3QgPyAibm90IiA6ICIiLCBtY250KTsKIAkgICAg UFJFRkVUQ0ggKCk7CiAKIAkgICAgewogCSAgICAgIGludCBsZW47Ci0JICAgICAgcmVfd2No YXJfdCBjOworCSAgICAgIGludCBjOwogCSAgICAgIEdFVF9DSEFSX0FGVEVSIChjLCBkLCBs ZW4pOwogCSAgICAgIGlmICgoIUNIQVJfSEFTX0NBVEVHT1JZIChjLCBtY250KSkgXiBub3Qp CiAJCWdvdG8gZmFpbDsKQEAgLTYxNTksOCArNDgyMyw2IEBAIHJlX21hdGNoXzJfaW50ZXJu YWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAqc3RyaW5nMSwK IAkgIH0KIAkgIGJyZWFrOwogCi0jZW5kaWYgLyogZW1hY3MgKi8KLQogCWRlZmF1bHQ6CiAJ ICBhYm9ydCAoKTsKIAl9CkBAIC02MTc0LDE2ICs0ODM2LDE1IEBAIHJlX21hdGNoXzJfaW50 ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAqc3RyaW5n MSwKIAl7CiAJICByZV9jaGFyICpzdHIsICpwYXQ7CiAJICAvKiBBIHJlc3RhcnQgcG9pbnQg aXMga25vd24uICBSZXN0b3JlIHRvIHRoYXQgc3RhdGUuICAqLwotCSAgREVCVUdfUFJJTlQg KCJcbkZBSUw6XG4iKTsKIAkgIFBPUF9GQUlMVVJFX1BPSU5UIChzdHIsIHBhdCk7CiAJICBz d2l0Y2ggKCpwYXQrKykKIAkgICAgewogCSAgICBjYXNlIG9uX2ZhaWx1cmVfa2VlcF9zdHJp bmdfanVtcDoKLQkgICAgICBhc3NlcnQgKHN0ciA9PSBOVUxMKTsKKwkgICAgICBlYXNzZXJ0 IChzdHIgPT0gTlVMTCk7CiAJICAgICAgZ290byBjb250aW51ZV9mYWlsdXJlX2p1bXA7CiAK IAkgICAgY2FzZSBvbl9mYWlsdXJlX2p1bXBfbmFzdHlsb29wOgotCSAgICAgIGFzc2VydCAo KHJlX29wY29kZV90KXBhdFstMl0gPT0gbm9fb3ApOworCSAgICAgIGVhc3NlcnQgKChyZV9v cGNvZGVfdClwYXRbLTJdID09IG5vX29wKTsKIAkgICAgICBQVVNIX0ZBSUxVUkVfUE9JTlQg KHBhdCAtIDIsIHN0cik7CiAJICAgICAgRkFMTFRIUk9VR0g7CiAJICAgIGNhc2Ugb25fZmFp bHVyZV9qdW1wX2xvb3A6CkBAIC02MjAzLDcgKzQ4NjQsNyBAQCByZV9tYXRjaF8yX2ludGVy bmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIHJlX2NoYXIgKnN0cmluZzEs CiAJICAgICAgYWJvcnQgKCk7CiAJICAgIH0KIAotCSAgYXNzZXJ0IChwID49IGJ1ZnAtPmJ1 ZmZlciAmJiBwIDw9IHBlbmQpOworCSAgZWFzc2VydCAocCA+PSBidWZwLT5idWZmZXIgJiYg cCA8PSBwZW5kKTsKIAogCSAgaWYgKGQgPj0gc3RyaW5nMSAmJiBkIDw9IGVuZDEpCiAJICAg IGRlbmQgPSBlbmRfbWF0Y2hfMTsKQEAgLTYyMTUsNyArNDg3Niw3IEBAIHJlX21hdGNoXzJf aW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAqc3Ry aW5nMSwKICAgaWYgKGJlc3RfcmVnc19zZXQpCiAgICAgZ290byByZXN0b3JlX2Jlc3RfcmVn czsKIAotICBGUkVFX1ZBUklBQkxFUyAoKTsKKyAgU0FGRV9GUkVFICgpOwogCiAgIHJldHVy biAtMTsJLyogRmFpbHVyZSB0byBtYXRjaC4gICovCiB9CkBAIC02MjI2LDggKzQ4ODcsOCBA QCByZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAs IHJlX2NoYXIgKnN0cmluZzEsCiAgICBieXRlczsgbm9uemVybyBvdGhlcndpc2UuICAqLwog CiBzdGF0aWMgaW50Ci1iY21wX3RyYW5zbGF0ZSAocmVfY2hhciAqczEsIHJlX2NoYXIgKnMy LCBzc2l6ZV90IGxlbiwKLQkJUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnNsYXRlLCBjb25zdCBp bnQgdGFyZ2V0X211bHRpYnl0ZSkKK2JjbXBfdHJhbnNsYXRlIChyZV9jaGFyICpzMSwgcmVf Y2hhciAqczIsIHB0cmRpZmZfdCBsZW4sCisJCUxpc3BfT2JqZWN0IHRyYW5zbGF0ZSwgaW50 IHRhcmdldF9tdWx0aWJ5dGUpCiB7CiAgIHJlX2NoYXIgKnAxID0gczEsICpwMiA9IHMyOwog ICByZV9jaGFyICpwMV9lbmQgPSBzMSArIGxlbjsKQEAgLTYyMzgsNyArNDg5OSw3IEBAIGJj bXBfdHJhbnNsYXRlIChyZV9jaGFyICpzMSwgcmVfY2hhciAqczIsIHNzaXplX3QgbGVuLAog ICB3aGlsZSAocDEgPCBwMV9lbmQgJiYgcDIgPCBwMl9lbmQpCiAgICAgewogICAgICAgaW50 IHAxX2NoYXJsZW4sIHAyX2NoYXJsZW47Ci0gICAgICByZV93Y2hhcl90IHAxX2NoLCBwMl9j aDsKKyAgICAgIGludCBwMV9jaCwgcDJfY2g7CiAKICAgICAgIEdFVF9DSEFSX0FGVEVSIChw MV9jaCwgcDEsIHAxX2NoYXJsZW4pOwogICAgICAgR0VUX0NIQVJfQUZURVIgKHAyX2NoLCBw MiwgcDJfY2hhcmxlbik7CkBAIC02MjY5LDkgKzQ5MzAsNyBAQCBiY21wX3RyYW5zbGF0ZSAo cmVfY2hhciAqczEsIHJlX2NoYXIgKnMyLCBzc2l6ZV90IGxlbiwKIAogY29uc3QgY2hhciAq CiByZV9jb21waWxlX3BhdHRlcm4gKGNvbnN0IGNoYXIgKnBhdHRlcm4sIHNpemVfdCBsZW5n dGgsCi0jaWZkZWYgZW1hY3MKIAkJICAgIGJvb2wgcG9zaXhfYmFja3RyYWNraW5nLCBjb25z dCBjaGFyICp3aGl0ZXNwYWNlX3JlZ2V4cCwKLSNlbmRpZgogCQkgICAgc3RydWN0IHJlX3Bh dHRlcm5fYnVmZmVyICpidWZwKQogewogICByZWdfZXJyY29kZV90IHJldDsKQEAgLTYyODEs MzM0ICs0OTQwLDE2IEBAIHJlX2NvbXBpbGVfcGF0dGVybiAoY29uc3QgY2hhciAqcGF0dGVy biwgc2l6ZV90IGxlbmd0aCwKICAgYnVmcC0+cmVnc19hbGxvY2F0ZWQgPSBSRUdTX1VOQUxM T0NBVEVEOwogCiAgIC8qIEFuZCBHTlUgY29kZSBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90 IHRvIGdldCByZWdpc3RlciBpbmZvcm1hdGlvbgotICAgICBieSBwYXNzaW5nIG51bGwgZm9y IHRoZSBSRUdTIGFyZ3VtZW50IHRvIHJlX21hdGNoLCBldGMuLCBub3QgYnkKKyAgICAgYnkg cGFzc2luZyBudWxsIGZvciB0aGUgUkVHUyBhcmd1bWVudCB0byByZV9zZWFyY2gsIGV0Yy4s IG5vdCBieQogICAgICBzZXR0aW5nIG5vX3N1Yi4gICovCiAgIGJ1ZnAtPm5vX3N1YiA9IDA7 CiAKICAgcmV0ID0gcmVnZXhfY29tcGlsZSAoKHJlX2NoYXIgKikgcGF0dGVybiwgbGVuZ3Ro LAotI2lmZGVmIGVtYWNzCiAJCSAgICAgICBwb3NpeF9iYWNrdHJhY2tpbmcsCiAJCSAgICAg ICB3aGl0ZXNwYWNlX3JlZ2V4cCwKLSNlbHNlCi0JCSAgICAgICByZV9zeW50YXhfb3B0aW9u cywKLSNlbmRpZgogCQkgICAgICAgYnVmcCk7CiAKICAgaWYgKCFyZXQpCiAgICAgcmV0dXJu IE5VTEw7Ci0gIHJldHVybiBnZXR0ZXh0IChyZV9lcnJvcl9tc2dpZFsoaW50KSByZXRdKTsK LX0KLVdFQUtfQUxJQVMgKF9fcmVfY29tcGlsZV9wYXR0ZXJuLCByZV9jb21waWxlX3BhdHRl cm4pCi0MCi0vKiBFbnRyeSBwb2ludHMgY29tcGF0aWJsZSB3aXRoIDQuMiBCU0QgcmVnZXgg bGlicmFyeS4gIFdlIGRvbid0IGRlZmluZQotICAgdGhlbSB1bmxlc3Mgc3BlY2lmaWNhbGx5 IHJlcXVlc3RlZC4gICovCi0KLSNpZiBkZWZpbmVkIF9SRUdFWF9SRV9DT01QIHx8IGRlZmlu ZWQgX0xJQkMKLQotLyogQlNEIGhhcyBvbmUgYW5kIG9ubHkgb25lIHBhdHRlcm4gYnVmZmVy LiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgcmVfY29tcF9idWY7Ci0K LWNoYXIgKgotIyBpZmRlZiBfTElCQwotLyogTWFrZSB0aGVzZSBkZWZpbml0aW9ucyB3ZWFr IGluIGxpYmMsIHNvIFBPU0lYIHByb2dyYW1zIGNhbiByZWRlZmluZQotICAgdGhlc2UgbmFt ZXMgaWYgdGhleSBkb24ndCB1c2Ugb3VyIGZ1bmN0aW9ucywgYW5kIHN0aWxsIHVzZQotICAg cmVnY29tcC9yZWdleGVjIGJlbG93IHdpdGhvdXQgbGluayBlcnJvcnMuICAqLwotd2Vha19m dW5jdGlvbgotIyBlbmRpZgotcmVfY29tcCAoY29uc3QgY2hhciAqcykKLXsKLSAgcmVnX2Vy cmNvZGVfdCByZXQ7Ci0KLSAgaWYgKCFzKQotICAgIHsKLSAgICAgIGlmICghcmVfY29tcF9i dWYuYnVmZmVyKQotCS8qIFllcywgd2UncmUgZGlzY2FyZGluZyBgY29uc3QnIGhlcmUgaWYg IUhBVkVfTElCSU5UTC4gICovCi0JcmV0dXJuIChjaGFyICopIGdldHRleHQgKCJObyBwcmV2 aW91cyByZWd1bGFyIGV4cHJlc3Npb24iKTsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLQot ICBpZiAoIXJlX2NvbXBfYnVmLmJ1ZmZlcikKLSAgICB7Ci0gICAgICByZV9jb21wX2J1Zi5i dWZmZXIgPSBtYWxsb2MgKDIwMCk7Ci0gICAgICBpZiAocmVfY29tcF9idWYuYnVmZmVyID09 IE5VTEwpCi0JLyogWWVzLCB3ZSdyZSBkaXNjYXJkaW5nIGBjb25zdCcgaGVyZSBpZiAhSEFW RV9MSUJJTlRMLiAgKi8KLQlyZXR1cm4gKGNoYXIgKikgZ2V0dGV4dCAocmVfZXJyb3JfbXNn aWRbKGludCkgUkVHX0VTUEFDRV0pOwotICAgICAgcmVfY29tcF9idWYuYWxsb2NhdGVkID0g MjAwOwotCi0gICAgICByZV9jb21wX2J1Zi5mYXN0bWFwID0gbWFsbG9jICgxIDw8IEJZVEVX SURUSCk7Ci0gICAgICBpZiAocmVfY29tcF9idWYuZmFzdG1hcCA9PSBOVUxMKQotCS8qIFll cywgd2UncmUgZGlzY2FyZGluZyBgY29uc3QnIGhlcmUgaWYgIUhBVkVfTElCSU5UTC4gICov Ci0JcmV0dXJuIChjaGFyICopIGdldHRleHQgKHJlX2Vycm9yX21zZ2lkWyhpbnQpIFJFR19F U1BBQ0VdKTsKLSAgICB9Ci0KLSAgLyogU2luY2UgYHJlX2V4ZWMnIGFsd2F5cyBwYXNzZXMg TlVMTCBmb3IgdGhlIGByZWdzJyBhcmd1bWVudCwgd2UKLSAgICAgZG9uJ3QgbmVlZCB0byBp bml0aWFsaXplIHRoZSBwYXR0ZXJuIGJ1ZmZlciBmaWVsZHMgd2hpY2ggYWZmZWN0IGl0LiAg Ki8KLQotICByZXQgPSByZWdleF9jb21waWxlIChzLCBzdHJsZW4gKHMpLCByZV9zeW50YXhf b3B0aW9ucywgJnJlX2NvbXBfYnVmKTsKLQotICBpZiAoIXJldCkKLSAgICByZXR1cm4gTlVM TDsKLQotICAvKiBZZXMsIHdlJ3JlIGRpc2NhcmRpbmcgYGNvbnN0JyBoZXJlIGlmICFIQVZF X0xJQklOVEwuICAqLwotICByZXR1cm4gKGNoYXIgKikgZ2V0dGV4dCAocmVfZXJyb3JfbXNn aWRbKGludCkgcmV0XSk7Ci19Ci0KLQotaW50Ci0jIGlmZGVmIF9MSUJDCi13ZWFrX2Z1bmN0 aW9uCi0jIGVuZGlmCi1yZV9leGVjIChjb25zdCBjaGFyICpzKQotewotICBjb25zdCBzaXpl X3QgbGVuID0gc3RybGVuIChzKTsKLSAgcmV0dXJuIHJlX3NlYXJjaCAoJnJlX2NvbXBfYnVm LCBzLCBsZW4sIDAsIGxlbiwgMCkgPj0gMDsKLX0KLSNlbmRpZiAvKiBfUkVHRVhfUkVfQ09N UCAqLwotDAotLyogUE9TSVguMiBmdW5jdGlvbnMuICBEb24ndCBkZWZpbmUgdGhlc2UgZm9y IEVtYWNzLiAgKi8KLQotI2lmbmRlZiBlbWFjcwotCi0vKiByZWdjb21wIHRha2VzIGEgcmVn dWxhciBleHByZXNzaW9uIGFzIGEgc3RyaW5nIGFuZCBjb21waWxlcyBpdC4KLQotICAgUFJF RyBpcyBhIHJlZ2V4X3QgKi4gIFdlIGRvIG5vdCBleHBlY3QgYW55IGZpZWxkcyB0byBiZSBp bml0aWFsaXplZCwKLSAgIHNpbmNlIFBPU0lYIHNheXMgd2Ugc2hvdWxkbid0LiAgVGh1cywg d2Ugc2V0Ci0KLSAgICAgYGJ1ZmZlcicgdG8gdGhlIGNvbXBpbGVkIHBhdHRlcm47Ci0gICAg IGB1c2VkJyB0byB0aGUgbGVuZ3RoIG9mIHRoZSBjb21waWxlZCBwYXR0ZXJuOwotICAgICBg c3ludGF4JyB0byBSRV9TWU5UQVhfUE9TSVhfRVhURU5ERUQgaWYgdGhlCi0gICAgICAgUkVH X0VYVEVOREVEIGJpdCBpbiBDRkxBR1MgaXMgc2V0OyBvdGhlcndpc2UsIHRvCi0gICAgICAg UkVfU1lOVEFYX1BPU0lYX0JBU0lDOwotICAgICBgZmFzdG1hcCcgdG8gYW4gYWxsb2NhdGVk IHNwYWNlIGZvciB0aGUgZmFzdG1hcDsKLSAgICAgYGZhc3RtYXBfYWNjdXJhdGUnIHRvIHpl cm87Ci0gICAgIGByZV9uc3ViJyB0byB0aGUgbnVtYmVyIG9mIHN1YmV4cHJlc3Npb25zIGlu IFBBVFRFUk4uCi0KLSAgIFBBVFRFUk4gaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHBhdHRlcm4g c3RyaW5nLgotCi0gICBDRkxBR1MgaXMgYSBzZXJpZXMgb2YgYml0cyB3aGljaCBhZmZlY3Qg Y29tcGlsYXRpb24uCi0KLSAgICAgSWYgUkVHX0VYVEVOREVEIGlzIHNldCwgd2UgdXNlIFBP U0lYIGV4dGVuZGVkIHN5bnRheDsgb3RoZXJ3aXNlLCB3ZQotICAgICB1c2UgUE9TSVggYmFz aWMgc3ludGF4LgotCi0gICAgIElmIFJFR19ORVdMSU5FIGlzIHNldCwgdGhlbiAuIGFuZCBb Xi4uLl0gZG9uJ3QgbWF0Y2ggbmV3bGluZS4KLSAgICAgQWxzbywgcmVnZXhlYyB3aWxsIHRy eSBhIG1hdGNoIGJlZ2lubmluZyBhZnRlciBldmVyeSBuZXdsaW5lLgotCi0gICAgIElmIFJF R19JQ0FTRSBpcyBzZXQsIHRoZW4gd2UgY29uc2lkZXJzIHVwcGVyLSBhbmQgbG93ZXJjYXNl Ci0gICAgIHZlcnNpb25zIG9mIGxldHRlcnMgdG8gYmUgZXF1aXZhbGVudCB3aGVuIG1hdGNo aW5nLgotCi0gICAgIElmIFJFR19OT1NVQiBpcyBzZXQsIHRoZW4gd2hlbiBQUkVHIGlzIHBh c3NlZCB0byByZWdleGVjLCB0aGF0Ci0gICAgIHJvdXRpbmUgd2lsbCByZXBvcnQgb25seSBz dWNjZXNzIG9yIGZhaWx1cmUsIGFuZCBub3RoaW5nIGFib3V0IHRoZQotICAgICByZWdpc3Rl cnMuCi0KLSAgIEl0IHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgbm9uemVybyBpZiBpdCBk b2Vzbid0LiAgKFNlZSByZWdleC1lbWFjcy5oIGZvcgotICAgdGhlIHJldHVybiBjb2RlcyBh bmQgdGhlaXIgbWVhbmluZ3MuKSAgKi8KLQotcmVnX2VycmNvZGVfdAotcmVnY29tcCAocmVn ZXhfdCAqX1Jlc3RyaWN0XyBwcmVnLCBjb25zdCBjaGFyICpfUmVzdHJpY3RfIHBhdHRlcm4s Ci0JIGludCBjZmxhZ3MpCi17Ci0gIHJlZ19lcnJjb2RlX3QgcmV0OwotICByZWdfc3ludGF4 X3Qgc3ludGF4Ci0gICAgPSAoY2ZsYWdzICYgUkVHX0VYVEVOREVEKSA/Ci0gICAgICBSRV9T WU5UQVhfUE9TSVhfRVhURU5ERUQgOiBSRV9TWU5UQVhfUE9TSVhfQkFTSUM7Ci0KLSAgLyog cmVnZXhfY29tcGlsZSB3aWxsIGFsbG9jYXRlIHRoZSBzcGFjZSBmb3IgdGhlIGNvbXBpbGVk IHBhdHRlcm4uICAqLwotICBwcmVnLT5idWZmZXIgPSAwOwotICBwcmVnLT5hbGxvY2F0ZWQg PSAwOwotICBwcmVnLT51c2VkID0gMDsKLQotICAvKiBUcnkgdG8gYWxsb2NhdGUgc3BhY2Ug Zm9yIHRoZSBmYXN0bWFwLiAgKi8KLSAgcHJlZy0+ZmFzdG1hcCA9IG1hbGxvYyAoMSA8PCBC WVRFV0lEVEgpOwotCi0gIGlmIChjZmxhZ3MgJiBSRUdfSUNBU0UpCi0gICAgewotICAgICAg dW5zaWduZWQgaTsKLQotICAgICAgcHJlZy0+dHJhbnNsYXRlID0gbWFsbG9jIChDSEFSX1NF VF9TSVpFICogc2l6ZW9mICpwcmVnLT50cmFuc2xhdGUpOwotICAgICAgaWYgKHByZWctPnRy YW5zbGF0ZSA9PSBOVUxMKQotCXJldHVybiAoaW50KSBSRUdfRVNQQUNFOwotCi0gICAgICAv KiBNYXAgdXBwZXJjYXNlIGNoYXJhY3RlcnMgdG8gY29ycmVzcG9uZGluZyBsb3dlcmNhc2Ug b25lcy4gICovCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgQ0hBUl9TRVRfU0laRTsgaSsrKQot CXByZWctPnRyYW5zbGF0ZVtpXSA9IElTVVBQRVIgKGkpID8gVE9MT1dFUiAoaSkgOiBpOwot ICAgIH0KLSAgZWxzZQotICAgIHByZWctPnRyYW5zbGF0ZSA9IE5VTEw7Ci0KLSAgLyogSWYg UkVHX05FV0xJTkUgaXMgc2V0LCBuZXdsaW5lcyBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseS4g ICovCi0gIGlmIChjZmxhZ3MgJiBSRUdfTkVXTElORSkKLSAgICB7IC8qIFJFR19ORVdMSU5F IGltcGxpZXMgbmVpdGhlciAuIG5vciBbXi4uLl0gbWF0Y2ggbmV3bGluZS4gICovCi0gICAg ICBzeW50YXggJj0gflJFX0RPVF9ORVdMSU5FOwotICAgICAgc3ludGF4IHw9IFJFX0hBVF9M SVNUU19OT1RfTkVXTElORTsKLSAgICB9Ci0gIGVsc2UKLSAgICBzeW50YXggfD0gUkVfTk9f TkVXTElORV9BTkNIT1I7Ci0KLSAgcHJlZy0+bm9fc3ViID0gISEoY2ZsYWdzICYgUkVHX05P U1VCKTsKLQotICAvKiBQT1NJWCBzYXlzIGEgbnVsbCBjaGFyYWN0ZXIgaW4gdGhlIHBhdHRl cm4gdGVybWluYXRlcyBpdCwgc28gd2UKLSAgICAgY2FuIHVzZSBzdHJsZW4gaGVyZSBpbiBj b21waWxpbmcgdGhlIHBhdHRlcm4uICAqLwotICByZXQgPSByZWdleF9jb21waWxlICgocmVf Y2hhciAqKSBwYXR0ZXJuLCBzdHJsZW4gKHBhdHRlcm4pLCBzeW50YXgsIHByZWcpOwotCi0g IC8qIFBPU0lYIGRvZXNuJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbiB1bm1hdGNoZWQgb3Bl bi1ncm91cCBhbmQgYW4KLSAgICAgdW5tYXRjaGVkIGNsb3NlLWdyb3VwOiBib3RoIGFyZSBS RUdfRVBBUkVOLiAgKi8KLSAgaWYgKHJldCA9PSBSRUdfRVJQQVJFTikKLSAgICByZXQgPSBS RUdfRVBBUkVOOwotCi0gIGlmIChyZXQgPT0gUkVHX05PRVJST1IgJiYgcHJlZy0+ZmFzdG1h cCkKLSAgICB7IC8qIENvbXB1dGUgdGhlIGZhc3RtYXAgbm93LCBzaW5jZSByZWdleGVjIGNh bm5vdCBtb2RpZnkgdGhlIHBhdHRlcm4KLQkgYnVmZmVyLiAgKi8KLSAgICAgIHJlX2NvbXBp bGVfZmFzdG1hcCAocHJlZyk7Ci0gICAgICBpZiAocHJlZy0+Y2FuX2JlX251bGwpCi0JeyAv KiBUaGUgZmFzdG1hcCBjYW4ndCBiZSB1c2VkIGFueXdheS4gICovCi0JICBmcmVlIChwcmVn LT5mYXN0bWFwKTsKLQkgIHByZWctPmZhc3RtYXAgPSBOVUxMOwotCX0KLSAgICB9Ci0gIHJl dHVybiByZXQ7Ci19Ci1XRUFLX0FMSUFTIChfX3JlZ2NvbXAsIHJlZ2NvbXApCi0KLQotLyog cmVnZXhlYyBzZWFyY2hlcyBmb3IgYSBnaXZlbiBwYXR0ZXJuLCBzcGVjaWZpZWQgYnkgUFJF RywgaW4gdGhlCi0gICBzdHJpbmcgU1RSSU5HLgotCi0gICBJZiBOTUFUQ0ggaXMgemVybyBv ciBSRUdfTk9TVUIgd2FzIHNldCBpbiB0aGUgY2ZsYWdzIGFyZ3VtZW50IHRvCi0gICBgcmVn Y29tcCcsIHdlIGlnbm9yZSBQTUFUQ0guICBPdGhlcndpc2UsIHdlIGFzc3VtZSBQTUFUQ0gg aGFzIGF0Ci0gICBsZWFzdCBOTUFUQ0ggZWxlbWVudHMsIGFuZCB3ZSBzZXQgdGhlbSB0byB0 aGUgb2Zmc2V0cyBvZiB0aGUKLSAgIGNvcnJlc3BvbmRpbmcgbWF0Y2hlZCBzdWJzdHJpbmdz LgotCi0gICBFRkxBR1Mgc3BlY2lmaWVzIGBleGVjdXRpb24gZmxhZ3MnIHdoaWNoIGFmZmVj dCBtYXRjaGluZzogaWYKLSAgIFJFR19OT1RCT0wgaXMgc2V0LCB0aGVuIF4gZG9lcyBub3Qg bWF0Y2ggYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKLSAgIHN0cmluZzsgaWYgUkVHX05PVEVP TCBpcyBzZXQsIHRoZW4gJCBkb2VzIG5vdCBtYXRjaCBhdCB0aGUgZW5kLgotCi0gICBXZSBy ZXR1cm4gMCBpZiB3ZSBmaW5kIGEgbWF0Y2ggYW5kIFJFR19OT01BVENIIGlmIG5vdC4gICov Ci0KLXJlZ19lcnJjb2RlX3QKLXJlZ2V4ZWMgKGNvbnN0IHJlZ2V4X3QgKl9SZXN0cmljdF8g cHJlZywgY29uc3QgY2hhciAqX1Jlc3RyaWN0XyBzdHJpbmcsCi0JIHNpemVfdCBubWF0Y2gs IHJlZ21hdGNoX3QgcG1hdGNoW19SZXN0cmljdF9hcnJfXSwgaW50IGVmbGFncykKLXsKLSAg cmVnb2ZmX3QgcmV0OwotICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzIHJlZ3M7Ci0gIHJlZ2V4X3Qg cHJpdmF0ZV9wcmVnOwotICBzaXplX3QgbGVuID0gc3RybGVuIChzdHJpbmcpOwotICBib29s ZWFuIHdhbnRfcmVnX2luZm8gPSAhcHJlZy0+bm9fc3ViICYmIG5tYXRjaCA+IDAgJiYgcG1h dGNoOwotCi0gIHByaXZhdGVfcHJlZyA9ICpwcmVnOwotCi0gIHByaXZhdGVfcHJlZy5ub3Rf Ym9sID0gISEoZWZsYWdzICYgUkVHX05PVEJPTCk7Ci0gIHByaXZhdGVfcHJlZy5ub3RfZW9s ID0gISEoZWZsYWdzICYgUkVHX05PVEVPTCk7Ci0KLSAgLyogVGhlIHVzZXIgaGFzIHRvbGQg dXMgZXhhY3RseSBob3cgbWFueSByZWdpc3RlcnMgdG8gcmV0dXJuCi0gICAgIGluZm9ybWF0 aW9uIGFib3V0LCB2aWEgYG5tYXRjaCcuICBXZSBoYXZlIHRvIHBhc3MgdGhhdCBvbiB0byB0 aGUKLSAgICAgbWF0Y2hpbmcgcm91dGluZXMuICAqLwotICBwcml2YXRlX3ByZWcucmVnc19h bGxvY2F0ZWQgPSBSRUdTX0ZJWEVEOwotCi0gIGlmICh3YW50X3JlZ19pbmZvKQotICAgIHsK LSAgICAgIHJlZ3MubnVtX3JlZ3MgPSBubWF0Y2g7Ci0gICAgICByZWdzLnN0YXJ0ID0gVEFM TE9DIChubWF0Y2ggKiAyLCByZWdvZmZfdCk7Ci0gICAgICBpZiAocmVncy5zdGFydCA9PSBO VUxMKQotCXJldHVybiBSRUdfTk9NQVRDSDsKLSAgICAgIHJlZ3MuZW5kID0gcmVncy5zdGFy dCArIG5tYXRjaDsKLSAgICB9Ci0KLSAgLyogSW5zdGVhZCBvZiB1c2luZyBub3RfZW9sIHRv IGltcGxlbWVudCBSRUdfTk9URU9MLCB3ZSBjb3VsZCBzaW1wbHkKLSAgICAgcGFzcyAoJnBy aXZhdGVfcHJlZywgc3RyaW5nLCBsZW4gKyAxLCAwLCBsZW4sIC4uLikgcHJldGVuZGluZyB0 aGUgc3RyaW5nCi0gICAgIHdhcyBhIGxpdHRsZSBiaXQgbG9uZ2VyIGJ1dCBzdGlsbCBvbmx5 IG1hdGNoaW5nIHRoZSByZWFsIHBhcnQuCi0gICAgIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUg YGVuZGxpbmUnIHdpbGwgY2hlY2sgZm9yIGEgJ1xuJyBhbmQgd2lsbCBmaW5kIGEKLSAgICAg J1wwJywgY29ycmVjdGx5IGRlY2lkaW5nIHRoYXQgdGhpcyBpcyBub3QgdGhlIGVuZCBvZiBh IGxpbmUuCi0gICAgIEJ1dCBpdCBkb2Vzbid0IHdvcmsgb3V0IHNvIG5pY2VseSBmb3IgUkVH X05PVEJPTCwgc2luY2Ugd2UgZG9uJ3QgaGF2ZQotICAgICBhIGNvbnZlbmllbnQgJ1wwJyB0 aGVyZS4gIEZvciBhbGwgd2Uga25vdywgdGhlIHN0cmluZyBjb3VsZCBiZSBwcmVjZWRlZAot ICAgICBieSAnXG4nIHdoaWNoIHdvdWxkIHRocm93IHRoaW5ncyBvZmYuICAqLwotCi0gIC8q IFBlcmZvcm0gdGhlIHNlYXJjaGluZyBvcGVyYXRpb24uICAqLwotICByZXQgPSByZV9zZWFy Y2ggKCZwcml2YXRlX3ByZWcsIHN0cmluZywgbGVuLAotCQkgICAvKiBzdGFydDogKi8gMCwg LyogcmFuZ2U6ICovIGxlbiwKLQkJICAgd2FudF9yZWdfaW5mbyA/ICZyZWdzIDogMCk7Ci0K LSAgLyogQ29weSB0aGUgcmVnaXN0ZXIgaW5mb3JtYXRpb24gdG8gdGhlIFBPU0lYIHN0cnVj dHVyZS4gICovCi0gIGlmICh3YW50X3JlZ19pbmZvKQotICAgIHsKLSAgICAgIGlmIChyZXQg Pj0gMCkKLQl7Ci0JICB1bnNpZ25lZCByOwotCi0JICBmb3IgKHIgPSAwOyByIDwgbm1hdGNo OyByKyspCi0JICAgIHsKLQkgICAgICBwbWF0Y2hbcl0ucm1fc28gPSByZWdzLnN0YXJ0W3Jd OwotCSAgICAgIHBtYXRjaFtyXS5ybV9lbyA9IHJlZ3MuZW5kW3JdOwotCSAgICB9Ci0JfQot Ci0gICAgICAvKiBJZiB3ZSBuZWVkZWQgdGhlIHRlbXBvcmFyeSByZWdpc3RlciBpbmZvLCBm cmVlIHRoZSBzcGFjZSBub3cuICAqLwotICAgICAgZnJlZSAocmVncy5zdGFydCk7Ci0gICAg fQotCi0gIC8qIFdlIHdhbnQgemVybyByZXR1cm4gdG8gbWVhbiBzdWNjZXNzLCB1bmxpa2Ug YHJlX3NlYXJjaCcuICAqLwotICByZXR1cm4gcmV0ID49IDAgPyBSRUdfTk9FUlJPUiA6IFJF R19OT01BVENIOwotfQotV0VBS19BTElBUyAoX19yZWdleGVjLCByZWdleGVjKQotCi0KLS8q IFJldHVybnMgYSBtZXNzYWdlIGNvcnJlc3BvbmRpbmcgdG8gYW4gZXJyb3IgY29kZSwgRVJS X0NPREUsIHJldHVybmVkCi0gICBmcm9tIGVpdGhlciByZWdjb21wIG9yIHJlZ2V4ZWMuICAg V2UgZG9uJ3QgdXNlIFBSRUcgaGVyZS4KLQotICAgRVJSX0NPREUgd2FzIHByZXZpb3VzbHkg Y2FsbGVkIEVSUkNPREUsIGJ1dCB0aGF0IG5hbWUgY2F1c2VzIGFuCi0gICBlcnJvciB3aXRo IG1zdmM4IGNvbXBpbGVyLiAgKi8KLQotc2l6ZV90Ci1yZWdlcnJvciAoaW50IGVycl9jb2Rl LCBjb25zdCByZWdleF90ICpwcmVnLCBjaGFyICplcnJidWYsIHNpemVfdCBlcnJidWZfc2l6 ZSkKLXsKLSAgY29uc3QgY2hhciAqbXNnOwotICBzaXplX3QgbXNnX3NpemU7Ci0KLSAgaWYg KGVycl9jb2RlIDwgMAotICAgICAgfHwgZXJyX2NvZGUgPj0gKHNpemVvZiAocmVfZXJyb3Jf bXNnaWQpIC8gc2l6ZW9mIChyZV9lcnJvcl9tc2dpZFswXSkpKQotICAgIC8qIE9ubHkgZXJy b3IgY29kZXMgcmV0dXJuZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgc2hvdWxkIGJlIHBh c3NlZAotICAgICAgIHRvIHRoaXMgcm91dGluZS4gIElmIHdlIGFyZSBnaXZlbiBhbnl0aGlu ZyBlbHNlLCBvciBpZiBvdGhlciByZWdleAotICAgICAgIGNvZGUgZ2VuZXJhdGVzIGFuIGlu dmFsaWQgZXJyb3IgY29kZSwgdGhlbiB0aGUgcHJvZ3JhbSBoYXMgYSBidWcuCi0gICAgICAg RHVtcCBjb3JlIHNvIHdlIGNhbiBmaXggaXQuICAqLwotICAgIGFib3J0ICgpOwotCi0gIG1z ZyA9IGdldHRleHQgKHJlX2Vycm9yX21zZ2lkW2Vycl9jb2RlXSk7Ci0KLSAgbXNnX3NpemUg PSBzdHJsZW4gKG1zZykgKyAxOyAvKiBJbmNsdWRlcyB0aGUgbnVsbC4gICovCi0KLSAgaWYg KGVycmJ1Zl9zaXplICE9IDApCi0gICAgewotICAgICAgaWYgKG1zZ19zaXplID4gZXJyYnVm X3NpemUpCi0JewotCSAgbWVtY3B5IChlcnJidWYsIG1zZywgZXJyYnVmX3NpemUgLSAxKTsK LQkgIGVycmJ1ZltlcnJidWZfc2l6ZSAtIDFdID0gMDsKLQl9Ci0gICAgICBlbHNlCi0Jc3Ry Y3B5IChlcnJidWYsIG1zZyk7Ci0gICAgfQotCi0gIHJldHVybiBtc2dfc2l6ZTsKLX0KLVdF QUtfQUxJQVMgKF9fcmVnZXJyb3IsIHJlZ2Vycm9yKQotCi0KLS8qIEZyZWUgZHluYW1pY2Fs bHkgYWxsb2NhdGVkIHNwYWNlIHVzZWQgYnkgUFJFRy4gICovCi0KLXZvaWQKLXJlZ2ZyZWUg KHJlZ2V4X3QgKnByZWcpCi17Ci0gIGZyZWUgKHByZWctPmJ1ZmZlcik7Ci0gIHByZWctPmJ1 ZmZlciA9IE5VTEw7Ci0KLSAgcHJlZy0+YWxsb2NhdGVkID0gMDsKLSAgcHJlZy0+dXNlZCA9 IDA7Ci0KLSAgZnJlZSAocHJlZy0+ZmFzdG1hcCk7Ci0gIHByZWctPmZhc3RtYXAgPSBOVUxM OwotICBwcmVnLT5mYXN0bWFwX2FjY3VyYXRlID0gMDsKLQotICBmcmVlIChwcmVnLT50cmFu c2xhdGUpOwotICBwcmVnLT50cmFuc2xhdGUgPSBOVUxMOworICByZXR1cm4gcmVfZXJyb3Jf bXNnaWRbcmV0XTsKIH0KLVdFQUtfQUxJQVMgKF9fcmVnZnJlZSwgcmVnZnJlZSkKLQotI2Vu ZGlmIC8qIG5vdCBlbWFjcyAgKi8KZGlmZiAtLWdpdCBhL3NyYy9yZWdleC1lbWFjcy5oIGIv c3JjL3JlZ2V4LWVtYWNzLmgKaW5kZXggOGExNWU1NzkzZi4uODk4YzBmMmFlYSAxMDA2NDQK LS0tIGEvc3JjL3JlZ2V4LWVtYWNzLmgKKysrIGIvc3JjL3JlZ2V4LWVtYWNzLmgKQEAgLTE3 LDE2MyArMTcsMjQgQEAKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgICBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAq LwogCi0jaWZuZGVmIF9SRUdFWF9ICi0jZGVmaW5lIF9SRUdFWF9IIDEKLQotI2lmIGRlZmlu ZWQgZW1hY3MgJiYgKGRlZmluZWQgX1JFR0VYX1JFX0NPTVAgfHwgZGVmaW5lZCBfTElCQykK LS8qIFdlJ3JlIG5vdCBkZWZpbmluZyByZV9zZXRfc3ludGF4IGFuZCB1c2luZyBhIGRpZmZl cmVudCBwcm90b3R5cGUgb2YKLSAgIHJlX2NvbXBpbGVfcGF0dGVybiB3aGVuIGJ1aWxkaW5n IEVtYWNzIHNvIGZhaWwgY29tcGlsYXRpb24gZWFybHkgd2l0aAotICAgYSAoc29tZXdoYXQg aGVscGZ1bCkgZXJyb3IgbWVzc2FnZSB3aGVuIGNvbmZsaWN0IGlzIGRldGVjdGVkLiAqLwot IyBlcnJvciAiX1JFR0VYX1JFX0NPTVAgbm9yIF9MSUJDIGNhbiBiZSBkZWZpbmVkIGlmIGVt YWNzIGlzIGRlZmluZWQuIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQot LyogQWxsb3cgdGhlIHVzZSBpbiBDKysgY29kZS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMK LWV4dGVybiAiQyIgewotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZCBfUE9TSVhfQ19TT1VSQ0Ug JiYgIWRlZmluZWQgX1BPU0lYX1NPVVJDRSAmJiBkZWZpbmVkIFZNUwotLyogVk1TIGRvZXNu J3QgaGF2ZSBgc2l6ZV90JyBpbiA8c3lzL3R5cGVzLmg+LCBldmVuIHRob3VnaCBQT1NJWCBz YXlzIGl0Ci0gICBzaG91bGQgYmUgdGhlcmUuICAqLwotIyBpbmNsdWRlIDxzdGRkZWYuaD4K LSNlbmRpZgotCi0vKiBUaGUgZm9sbG93aW5nIGJpdHMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5l IHRoZSByZWdleHAgc3ludGF4IHdlCi0gICByZWNvZ25pemUuICBUaGUgc2V0L25vdC1zZXQg bWVhbmluZ3Mgd2hlcmUgaGlzdG9yaWNhbGx5IGNob3NlbiBzbwotICAgdGhhdCBFbWFjcyBz eW50YXggaGFkIHRoZSB2YWx1ZSAwLgotICAgVGhlIGJpdHMgYXJlIGdpdmVuIGluIGFscGhh YmV0aWNhbCBvcmRlciwgYW5kCi0gICB0aGUgZGVmaW5pdGlvbnMgc2hpZnRlZCBieSBvbmUg ZnJvbSB0aGUgcHJldmlvdXMgYml0OyB0aHVzLCB3aGVuIHdlCi0gICBhZGQgb3IgcmVtb3Zl IGEgYml0LCBvbmx5IG9uZSBvdGhlciBkZWZpbml0aW9uIG5lZWQgY2hhbmdlLiAgKi8KLXR5 cGVkZWYgdW5zaWduZWQgbG9uZyByZWdfc3ludGF4X3Q7Ci0KLS8qIElmIHRoaXMgYml0IGlz IG5vdCBzZXQsIHRoZW4gXCBpbnNpZGUgYSBicmFja2V0IGV4cHJlc3Npb24gaXMgbGl0ZXJh bC4KLSAgIElmIHNldCwgdGhlbiBzdWNoIGEgXCBxdW90ZXMgdGhlIGZvbGxvd2luZyBjaGFy YWN0ZXIuICAqLwotI2RlZmluZSBSRV9CQUNLU0xBU0hfRVNDQVBFX0lOX0xJU1RTICgodW5z aWduZWQgbG9uZyBpbnQpIDEpCi0KLS8qIElmIHRoaXMgYml0IGlzIG5vdCBzZXQsIHRoZW4g KyBhbmQgPyBhcmUgb3BlcmF0b3JzLCBhbmQgXCsgYW5kIFw/IGFyZQotICAgICBsaXRlcmFs cy4KLSAgIElmIHNldCwgdGhlbiBcKyBhbmQgXD8gYXJlIG9wZXJhdG9ycyBhbmQgKyBhbmQg PyBhcmUgbGl0ZXJhbHMuICAqLwotI2RlZmluZSBSRV9CS19QTFVTX1FNIChSRV9CQUNLU0xB U0hfRVNDQVBFX0lOX0xJU1RTIDw8IDEpCi0KLS8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhl biBjaGFyYWN0ZXIgY2xhc3NlcyBhcmUgc3VwcG9ydGVkLiAgVGhleSBhcmU6Ci0gICAgIFs6 YWxwaGE6XSwgWzp1cHBlcjpdLCBbOmxvd2VyOl0sICBbOmRpZ2l0Ol0sIFs6YWxudW06XSwg Wzp4ZGlnaXQ6XSwKLSAgICAgWzpzcGFjZTpdLCBbOnByaW50Ol0sIFs6cHVuY3Q6XSwgWzpn cmFwaDpdLCBhbmQgWzpjbnRybDpdLgotICAgSWYgbm90IHNldCwgdGhlbiBjaGFyYWN0ZXIg Y2xhc3NlcyBhcmUgbm90IHN1cHBvcnRlZC4gICovCi0jZGVmaW5lIFJFX0NIQVJfQ0xBU1NF UyAoUkVfQktfUExVU19RTSA8PCAxKQotCi0vKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4g XiBhbmQgJCBhcmUgYWx3YXlzIGFuY2hvcnMgKG91dHNpZGUgYnJhY2tldAotICAgICBleHBy ZXNzaW9ucywgb2YgY291cnNlKS4KLSAgIElmIHRoaXMgYml0IGlzIG5vdCBzZXQsIHRoZW4g aXQgZGVwZW5kczoKLSAgICAgICAgXiAgaXMgYW4gYW5jaG9yIGlmIGl0IGlzIGF0IHRoZSBi ZWdpbm5pbmcgb2YgYSByZWd1bGFyCi0gICAgICAgICAgIGV4cHJlc3Npb24gb3IgYWZ0ZXIg YW4gb3Blbi1ncm91cCBvciBhbiBhbHRlcm5hdGlvbiBvcGVyYXRvcjsKLSAgICAgICAgJCAg aXMgYW4gYW5jaG9yIGlmIGl0IGlzIGF0IHRoZSBlbmQgb2YgYSByZWd1bGFyIGV4cHJlc3Np b24sIG9yCi0gICAgICAgICAgIGJlZm9yZSBhIGNsb3NlLWdyb3VwIG9yIGFuIGFsdGVybmF0 aW9uIG9wZXJhdG9yLgotCi0gICBUaGlzIGJpdCBjb3VsZCBiZSAocmUpY29tYmluZWQgd2l0 aCBSRV9DT05URVhUX0lOREVQX09QUywgYmVjYXVzZQotICAgUE9TSVggZHJhZnQgMTEuMiBz YXlzIHRoYXQgKiBldGMuIGluIGxlYWRpbmcgcG9zaXRpb25zIGlzIHVuZGVmaW5lZC4KLSAg IFdlIGFscmVhZHkgaW1wbGVtZW50ZWQgYSBwcmV2aW91cyBkcmFmdCB3aGljaCBtYWRlIHRo b3NlIGNvbnN0cnVjdHMKLSAgIGludmFsaWQsIHRob3VnaCwgc28gd2UgaGF2ZW4ndCBjaGFu Z2VkIHRoZSBjb2RlIGJhY2suICAqLwotI2RlZmluZSBSRV9DT05URVhUX0lOREVQX0FOQ0hP UlMgKFJFX0NIQVJfQ0xBU1NFUyA8PCAxKQotCi0vKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRo ZW4gc3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBhbHdheXMgc3BlY2lhbAotICAgICByZWdhcmRs ZXNzIG9mIHdoZXJlIHRoZXkgYXJlIGluIHRoZSBwYXR0ZXJuLgotICAgSWYgdGhpcyBiaXQg aXMgbm90IHNldCwgdGhlbiBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIHNwZWNpYWwgb25seSBp bgotICAgICBzb21lIGNvbnRleHRzOyBvdGhlcndpc2UgdGhleSBhcmUgb3JkaW5hcnkuICBT cGVjaWZpY2FsbHksCi0gICAgICogKyA/IGFuZCBpbnRlcnZhbHMgYXJlIG9ubHkgc3BlY2lh bCB3aGVuIG5vdCBhZnRlciB0aGUgYmVnaW5uaW5nLAotICAgICBvcGVuLWdyb3VwLCBvciBh bHRlcm5hdGlvbiBvcGVyYXRvci4gICovCi0jZGVmaW5lIFJFX0NPTlRFWFRfSU5ERVBfT1BT IChSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMgPDwgMSkKLQotLyogSWYgdGhpcyBiaXQgaXMg c2V0LCB0aGVuICosICssID8sIGFuZCB7IGNhbm5vdCBiZSBmaXJzdCBpbiBhbiByZSBvcgot ICAgICBpbW1lZGlhdGVseSBhZnRlciBhbiBhbHRlcm5hdGlvbiBvciBiZWdpbi1ncm91cCBv cGVyYXRvci4gICovCi0jZGVmaW5lIFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgKFJFX0NPTlRF WFRfSU5ERVBfT1BTIDw8IDEpCi0KLS8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiAuIG1h dGNoZXMgbmV3bGluZS4KLSAgIElmIG5vdCBzZXQsIHRoZW4gaXQgZG9lc24ndC4gICovCi0j ZGVmaW5lIFJFX0RPVF9ORVdMSU5FIChSRV9DT05URVhUX0lOVkFMSURfT1BTIDw8IDEpCi0K LS8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiAuIGRvZXNuJ3QgbWF0Y2ggTlVMLgotICAg SWYgbm90IHNldCwgdGhlbiBpdCBkb2VzLiAgKi8KLSNkZWZpbmUgUkVfRE9UX05PVF9OVUxM IChSRV9ET1RfTkVXTElORSA8PCAxKQotCi0vKiBJZiB0aGlzIGJpdCBpcyBzZXQsIG5vbm1h dGNoaW5nIGxpc3RzIFteLi4uXSBkbyBub3QgbWF0Y2ggbmV3bGluZS4KLSAgIElmIG5vdCBz ZXQsIHRoZXkgZG8uICAqLwotI2RlZmluZSBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUgKFJF X0RPVF9OT1RfTlVMTCA8PCAxKQotCi0vKiBJZiB0aGlzIGJpdCBpcyBzZXQsIGVpdGhlciBc ey4uLlx9IG9yIHsuLi59IGRlZmluZXMgYW4KLSAgICAgaW50ZXJ2YWwsIGRlcGVuZGluZyBv biBSRV9OT19CS19CUkFDRVMuCi0gICBJZiBub3Qgc2V0LCBceywgXH0sIHssIGFuZCB9IGFy ZSBsaXRlcmFscy4gICovCi0jZGVmaW5lIFJFX0lOVEVSVkFMUyAoUkVfSEFUX0xJU1RTX05P VF9ORVdMSU5FIDw8IDEpCi0KLS8qIElmIHRoaXMgYml0IGlzIHNldCwgKywgPyBhbmQgfCBh cmVuJ3QgcmVjb2duaXplZCBhcyBvcGVyYXRvcnMuCi0gICBJZiBub3Qgc2V0LCB0aGV5IGFy ZS4gICovCi0jZGVmaW5lIFJFX0xJTUlURURfT1BTIChSRV9JTlRFUlZBTFMgPDwgMSkKLQot LyogSWYgdGhpcyBiaXQgaXMgc2V0LCBuZXdsaW5lIGlzIGFuIGFsdGVybmF0aW9uIG9wZXJh dG9yLgotICAgSWYgbm90IHNldCwgbmV3bGluZSBpcyBsaXRlcmFsLiAgKi8KLSNkZWZpbmUg UkVfTkVXTElORV9BTFQgKFJFX0xJTUlURURfT1BTIDw8IDEpCi0KLS8qIElmIHRoaXMgYml0 IGlzIHNldCwgdGhlbiBgey4uLn0nIGRlZmluZXMgYW4gaW50ZXJ2YWwsIGFuZCBceyBhbmQg XH0KLSAgICAgYXJlIGxpdGVyYWxzLgotICBJZiBub3Qgc2V0LCB0aGVuIGBcey4uLlx9JyBk ZWZpbmVzIGFuIGludGVydmFsLiAgKi8KLSNkZWZpbmUgUkVfTk9fQktfQlJBQ0VTIChSRV9O RVdMSU5FX0FMVCA8PCAxKQotCi0vKiBJZiB0aGlzIGJpdCBpcyBzZXQsICguLi4pIGRlZmlu ZXMgYSBncm91cCwgYW5kIFwoIGFuZCBcKSBhcmUgbGl0ZXJhbHMuCi0gICBJZiBub3Qgc2V0 LCBcKC4uLlwpIGRlZmluZXMgYSBncm91cCwgYW5kICggYW5kICkgYXJlIGxpdGVyYWxzLiAg Ki8KLSNkZWZpbmUgUkVfTk9fQktfUEFSRU5TIChSRV9OT19CS19CUkFDRVMgPDwgMSkKLQot LyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIFw8ZGlnaXQ+IG1hdGNoZXMgPGRpZ2l0Pi4K LSAgIElmIG5vdCBzZXQsIHRoZW4gXDxkaWdpdD4gaXMgYSBiYWNrLXJlZmVyZW5jZS4gICov Ci0jZGVmaW5lIFJFX05PX0JLX1JFRlMgKFJFX05PX0JLX1BBUkVOUyA8PCAxKQotCi0vKiBJ ZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gfCBpcyBhbiBhbHRlcm5hdGlvbiBvcGVyYXRvciwg YW5kIFx8IGlzIGxpdGVyYWwuCi0gICBJZiBub3Qgc2V0LCB0aGVuIFx8IGlzIGFuIGFsdGVy bmF0aW9uIG9wZXJhdG9yLCBhbmQgfCBpcyBsaXRlcmFsLiAgKi8KLSNkZWZpbmUgUkVfTk9f QktfVkJBUiAoUkVfTk9fQktfUkVGUyA8PCAxKQotCi0vKiBJZiB0aGlzIGJpdCBpcyBzZXQs IHRoZW4gYW4gZW5kaW5nIHJhbmdlIHBvaW50IGNvbGxhdGluZyBoaWdoZXIKLSAgICAgdGhh biB0aGUgc3RhcnRpbmcgcmFuZ2UgcG9pbnQsIGFzIGluIFt6LWFdLCBpcyBpbnZhbGlkLgot ICAgSWYgbm90IHNldCwgdGhlbiB3aGVuIGVuZGluZyByYW5nZSBwb2ludCBjb2xsYXRlcyBo aWdoZXIgdGhhbiB0aGUKLSAgICAgc3RhcnRpbmcgcmFuZ2UgcG9pbnQsIHRoZSByYW5nZSBp cyBpZ25vcmVkLiAgKi8KLSNkZWZpbmUgUkVfTk9fRU1QVFlfUkFOR0VTIChSRV9OT19CS19W QkFSIDw8IDEpCi0KLS8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBhbiB1bm1hdGNoZWQg KSBpcyBvcmRpbmFyeS4KLSAgIElmIG5vdCBzZXQsIHRoZW4gYW4gdW5tYXRjaGVkICkgaXMg aW52YWxpZC4gICovCi0jZGVmaW5lIFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQgKFJF X05PX0VNUFRZX1JBTkdFUyA8PCAxKQotCi0vKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHN1Y2Nl ZWQgYXMgc29vbiBhcyB3ZSBtYXRjaCB0aGUgd2hvbGUgcGF0dGVybiwKLSAgIHdpdGhvdXQg ZnVydGhlciBiYWNrdHJhY2tpbmcuICAqLwotI2RlZmluZSBSRV9OT19QT1NJWF9CQUNLVFJB Q0tJTkcgKFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQgPDwgMSkKLQotLyogSWYgdGhp cyBiaXQgaXMgc2V0LCBkbyBub3QgcHJvY2VzcyB0aGUgR05VIHJlZ2V4IG9wZXJhdG9ycy4K LSAgIElmIG5vdCBzZXQsIHRoZW4gdGhlIEdOVSByZWdleCBvcGVyYXRvcnMgYXJlIHJlY29n bml6ZWQuICovCi0jZGVmaW5lIFJFX05PX0dOVV9PUFMgKFJFX05PX1BPU0lYX0JBQ0tUUkFD S0lORyA8PCAxKQotCi0vKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gKj8sICs/IGFuZCA/ PyBtYXRjaCBub24gZ3JlZWRpbHkuICovCi0jZGVmaW5lIFJFX0ZSVUdBTCAoUkVfTk9fR05V X09QUyA8PCAxKQotCi0vKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gKD86Li4uKSBpcyB0 cmVhdGVkIGFzIGEgc2h5IGdyb3VwLiAgKi8KLSNkZWZpbmUgUkVfU0hZX0dST1VQUyAoUkVf RlJVR0FMIDw8IDEpCi0KLS8qIElmIHRoaXMgYml0IGlzIHNldCwgXiBhbmQgJCBvbmx5IG1h dGNoIGF0IGJlZy9lbmQgb2YgYnVmZmVyLiAgKi8KLSNkZWZpbmUgUkVfTk9fTkVXTElORV9B TkNIT1IgKFJFX1NIWV9HUk9VUFMgPDwgMSkKLQotLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0 dXJuIG9uIGludGVybmFsIHJlZ2V4IGRlYnVnZ2luZy4KLSAgIElmIG5vdCBzZXQsIGFuZCBk ZWJ1Z2dpbmcgd2FzIG9uLCB0dXJuIGl0IG9mZi4KLSAgIFRoaXMgb25seSB3b3JrcyBpZiBy ZWdleC1lbWFjcy5jIGlzIGNvbXBpbGVkIC1EREVCVUcuCi0gICBXZSBkZWZpbmUgdGhpcyBi aXQgYWx3YXlzLCBzbyB0aGF0IGFsbCB0aGF0J3MgbmVlZGVkIHRvIHR1cm4gb24KLSAgIGRl YnVnZ2luZyBpcyB0byByZWNvbXBpbGUgcmVnZXgtZW1hY3MuYzsgdGhlIGNhbGxpbmcgY29k ZSBjYW4gYWx3YXlzIGhhdmUKLSAgIHRoaXMgYml0IHNldCwgYW5kIGl0IHdvbid0IGFmZmVj dCBhbnl0aGluZyBpbiB0aGUgbm9ybWFsIGNhc2UuICovCi0jZGVmaW5lIFJFX0RFQlVHIChS RV9OT19ORVdMSU5FX0FOQ0hPUiA8PCAxKQotCi0vKiBUaGlzIGdsb2JhbCB2YXJpYWJsZSBk ZWZpbmVzIHRoZSBwYXJ0aWN1bGFyIHJlZ2V4cCBzeW50YXggdG8gdXNlIChmb3IKLSAgIHNv bWUgaW50ZXJmYWNlcykuICBXaGVuIGEgcmVnZXhwIGlzIGNvbXBpbGVkLCB0aGUgc3ludGF4 IHVzZWQgaXMKLSAgIHN0b3JlZCBpbiB0aGUgcGF0dGVybiBidWZmZXIsIHNvIGNoYW5naW5n IHRoaXMgZG9lcyBub3QgYWZmZWN0Ci0gICBhbHJlYWR5LWNvbXBpbGVkIHJlZ2V4cHMuICAq LwotLyogZXh0ZXJuIHJlZ19zeW50YXhfdCByZV9zeW50YXhfb3B0aW9uczsgKi8KLQotI2lm ZGVmIGVtYWNzCi0jIGluY2x1ZGUgImxpc3AuaCIKKyNpZm5kZWYgRU1BQ1NfUkVHRVhfSAor I2RlZmluZSBFTUFDU19SRUdFWF9IIDEKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisvKiBU aGlzIGlzIHRoZSBzdHJ1Y3R1cmUgd2Ugc3RvcmUgcmVnaXN0ZXIgbWF0Y2ggZGF0YSBpbi4g IFNlZQorICAgcmVnZXgudGV4aW5mbyBmb3IgYSBmdWxsIGRlc2NyaXB0aW9uIG9mIHdoYXQg cmVnaXN0ZXJzIG1hdGNoLgorICAgRGVjbGFyZSB0aGlzIGJlZm9yZSBpbmNsdWRpbmcgbGlz cC5oLCBzaW5jZSBsaXNwLmggKHZpYSB0aHJlYWQuaCkKKyAgIHVzZXMgc3RydWN0IHJlX3Jl Z2lzdGVycy4gICovCitzdHJ1Y3QgcmVfcmVnaXN0ZXJzCit7CisgIHVuc2lnbmVkIG51bV9y ZWdzOworICBwdHJkaWZmX3QgKnN0YXJ0OworICBwdHJkaWZmX3QgKmVuZDsKK307CisKKyNp bmNsdWRlICJsaXNwLmgiCisKIC8qIEluIEVtYWNzLCB0aGlzIGlzIHRoZSBzdHJpbmcgb3Ig YnVmZmVyIGluIHdoaWNoIHdlIGFyZSBtYXRjaGluZy4KICAgIEl0IGlzIHVzZWQgZm9yIGxv b2tpbmcgdXAgc3ludGF4IHByb3BlcnRpZXMuCiAKQEAgLTE4NywxODcgKzQ4LDI0IEBAIHR5 cGVkZWYgdW5zaWduZWQgbG9uZyByZWdfc3ludGF4X3Q7CiAgICBhbmQgbWF0Y2ggZnVuY3Rp b25zLiAgVGhlc2UgZnVuY3Rpb25zIGNhcHR1cmUgdGhlIGN1cnJlbnQgdmFsdWUgb2YKICAg IHJlX21hdGNoX29iamVjdCBpbnRvIGdsX3N0YXRlIG9uIGVudHJ5LgogCi0gICBUT0RPOiBv bmNlIHdlIGdldCByaWQgb2YgdGhlICFlbWFjcyBjYXNlIGluIHRoaXMgY29kZSwgdHVybiBp bnRvIGFuCi0gICBhY3R1YWwgZnVuY3Rpb24gcGFyYW1ldGVyLiAgKi8KKyAgIFRPRE86IHR1 cm4gaW50byBhbiBhY3R1YWwgZnVuY3Rpb24gcGFyYW1ldGVyLiAgKi8KIGV4dGVybiBMaXNw X09iamVjdCByZV9tYXRjaF9vYmplY3Q7Ci0jZW5kaWYKIAogLyogUm91Z2hseSB0aGUgbWF4 aW11bSBudW1iZXIgb2YgZmFpbHVyZSBwb2ludHMgb24gdGhlIHN0YWNrLiAgKi8KIGV4dGVy biBzaXplX3QgZW1hY3NfcmVfbWF4X2ZhaWx1cmVzOwogCi0jaWZkZWYgZW1hY3MKIC8qIEFt b3VudCBvZiBtZW1vcnkgdGhhdCB3ZSBjYW4gc2FmZWx5IHN0YWNrIGFsbG9jYXRlLiAgKi8K IGV4dGVybiBwdHJkaWZmX3QgZW1hY3NfcmVfc2FmZV9hbGxvY2E7Ci0jZW5kaWYKLQotDAot LyogRGVmaW5lIGNvbWJpbmF0aW9ucyBvZiB0aGUgYWJvdmUgYml0cyBmb3IgdGhlIHN0YW5k YXJkIHBvc3NpYmlsaXRpZXMuCi0gICAoVGhlIFtbWyBjb21tZW50cyBkZWxpbWl0IHdoYXQg Z2V0cyBwdXQgaW50byB0aGUgVGV4aW5mbyBmaWxlLCBzbwotICAgZG9uJ3QgZGVsZXRlIHRo ZW0hKSAgKi8KLS8qIFtbW2JlZ2luIHN5bnRheGVzXV1dICovCi0jZGVmaW5lIFJFX1NZTlRB WF9FTUFDUwkJCQkJCQlcCi0gIChSRV9DSEFSX0NMQVNTRVMgfCBSRV9JTlRFUlZBTFMgfCBS RV9TSFlfR1JPVVBTIHwgUkVfRlJVR0FMKQotCi0jZGVmaW5lIFJFX1NZTlRBWF9BV0sJCQkJ CQkJXAotICAoUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUyAgIHwgUkVfRE9UX05PVF9O VUxMCQkJXAotICAgfCBSRV9OT19CS19QQVJFTlMgICAgICAgICAgICAgIHwgUkVfTk9fQktf UkVGUwkJCVwKLSAgIHwgUkVfTk9fQktfVkJBUiAgICAgICAgICAgICAgICB8IFJFX05PX0VN UFRZX1JBTkdFUwkJCVwKLSAgIHwgUkVfRE9UX05FV0xJTkUJCSAgfCBSRV9DT05URVhUX0lO REVQX0FOQ0hPUlMJCVwKLSAgIHwgUkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVOX09SRCB8IFJF X05PX0dOVV9PUFMpCi0KLSNkZWZpbmUgUkVfU1lOVEFYX0dOVV9BV0sJCQkJCQlcCi0gICgo UkVfU1lOVEFYX1BPU0lYX0VYVEVOREVEIHwgUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNU UyB8IFJFX0RFQlVHKQlcCi0gICAmIH4oUkVfRE9UX05PVF9OVUxMIHwgUkVfSU5URVJWQUxT IHwgUkVfQ09OVEVYVF9JTkRFUF9PUFMpKQotCi0jZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9B V0sJCQkJCQlcCi0gIChSRV9TWU5UQVhfUE9TSVhfRVhURU5ERUQgfCBSRV9CQUNLU0xBU0hf RVNDQVBFX0lOX0xJU1RTCQlcCi0gICB8IFJFX0lOVEVSVkFMUwkgICAgfCBSRV9OT19HTlVf T1BTKQotCi0jZGVmaW5lIFJFX1NZTlRBWF9HUkVQCQkJCQkJCVwKLSAgKFJFX0JLX1BMVVNf UU0gICAgICAgICAgICAgIHwgUkVfQ0hBUl9DTEFTU0VTCQkJCVwKLSAgIHwgUkVfSEFUX0xJ U1RTX05PVF9ORVdMSU5FIHwgUkVfSU5URVJWQUxTCQkJCVwKLSAgIHwgUkVfTkVXTElORV9B TFQpCi0KLSNkZWZpbmUgUkVfU1lOVEFYX0VHUkVQCQkJCQkJCVwKLSAgKFJFX0NIQVJfQ0xB U1NFUyAgICAgICAgfCBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMJCQlcCi0gICB8IFJFX0NP TlRFWFRfSU5ERVBfT1BTIHwgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FCQkJXAotICAgfCBS RV9ORVdMSU5FX0FMVCAgICAgICB8IFJFX05PX0JLX1BBUkVOUwkJCQlcCi0gICB8IFJFX05P X0JLX1ZCQVIpCi0KLSNkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX0VHUkVQCQkJCQkJXAotICAo UkVfU1lOVEFYX0VHUkVQIHwgUkVfSU5URVJWQUxTIHwgUkVfTk9fQktfQlJBQ0VTKQotCi0v KiBQMTAwMy4yL0QxMS4yLCBzZWN0aW9uIDQuMjAuNy4xLCBsaW5lcyA1MDc4ZmYuICAqLwot I2RlZmluZSBSRV9TWU5UQVhfRUQgUkVfU1lOVEFYX1BPU0lYX0JBU0lDCi0KLSNkZWZpbmUg UkVfU1lOVEFYX1NFRCBSRV9TWU5UQVhfUE9TSVhfQkFTSUMKLQotLyogU3ludGF4IGJpdHMg Y29tbW9uIHRvIGJvdGggYmFzaWMgYW5kIGV4dGVuZGVkIFBPU0lYIHJlZ2V4IHN5bnRheC4g ICovCi0jZGVmaW5lIF9SRV9TWU5UQVhfUE9TSVhfQ09NTU9OCQkJCQkJXAotICAoUkVfQ0hB Ul9DTEFTU0VTIHwgUkVfRE9UX05FV0xJTkUgICAgICB8IFJFX0RPVF9OT1RfTlVMTAkJXAot ICAgfCBSRV9JTlRFUlZBTFMgIHwgUkVfTk9fRU1QVFlfUkFOR0VTKQotCi0jZGVmaW5lIFJF X1NZTlRBWF9QT1NJWF9CQVNJQwkJCQkJCVwKLSAgKF9SRV9TWU5UQVhfUE9TSVhfQ09NTU9O IHwgUkVfQktfUExVU19RTSkKLQotLyogRGlmZmVycyBmcm9tIC4uLl9QT1NJWF9CQVNJQyBv bmx5IGluIHRoYXQgUkVfQktfUExVU19RTSBiZWNvbWVzCi0gICBSRV9MSU1JVEVEX09QUywg aS5lLiwgXD8gXCsgXHwgYXJlIG5vdCByZWNvZ25pemVkLiAgQWN0dWFsbHksIHRoaXMKLSAg IGlzbid0IG1pbmltYWwsIHNpbmNlIG90aGVyIG9wZXJhdG9ycywgc3VjaCBhcyBcYCwgYXJl bid0IGRpc2FibGVkLiAgKi8KLSNkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX01JTklNQUxfQkFT SUMJCQkJCVwKLSAgKF9SRV9TWU5UQVhfUE9TSVhfQ09NTU9OIHwgUkVfTElNSVRFRF9PUFMp Ci0KLSNkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX0VYVEVOREVECQkJCQlcCi0gIChfUkVfU1lO VEFYX1BPU0lYX0NPTU1PTiAgfCBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMJCQlcCi0gICB8 IFJFX0NPTlRFWFRfSU5ERVBfT1BTICAgfCBSRV9OT19CS19CUkFDRVMJCQkJXAotICAgfCBS RV9OT19CS19QQVJFTlMgICAgICAgIHwgUkVfTk9fQktfVkJBUgkJCQlcCi0gICB8IFJFX0NP TlRFWFRfSU5WQUxJRF9PUFMgfCBSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JEKQotCi0v KiBEaWZmZXJzIGZyb20gLi4uX1BPU0lYX0VYVEVOREVEIGluIHRoYXQgUkVfQ09OVEVYVF9J TkRFUF9PUFMgaXMKLSAgIHJlbW92ZWQgYW5kIFJFX05PX0JLX1JFRlMgaXMgYWRkZWQuICAq LwotI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfTUlOSU1BTF9FWFRFTkRFRAkJCQlcCi0gIChf UkVfU1lOVEFYX1BPU0lYX0NPTU1PTiAgfCBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMJCQlc Ci0gICB8IFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgfCBSRV9OT19CS19CUkFDRVMJCQkJXAot ICAgfCBSRV9OT19CS19QQVJFTlMgICAgICAgIHwgUkVfTk9fQktfUkVGUwkJCQlcCi0gICB8 IFJFX05PX0JLX1ZCQVIJICAgIHwgUkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVOX09SRCkKLS8q IFtbW2VuZCBzeW50YXhlc11dXSAqLwotDAotLyogTWF4aW11bSBudW1iZXIgb2YgZHVwbGlj YXRlcyBhbiBpbnRlcnZhbCBjYW4gYWxsb3cuICBTb21lIHN5c3RlbXMKLSAgIChlcnJvbmVv dXNseSkgZGVmaW5lIHRoaXMgaW4gb3RoZXIgaGVhZGVyIGZpbGVzLCBidXQgd2Ugd2FudCBv dXIKLSAgIHZhbHVlLCBzbyByZW1vdmUgYW55IHByZXZpb3VzIGRlZmluZS4gICovCi0jaWZk ZWYgUkVfRFVQX01BWAotIyB1bmRlZiBSRV9EVVBfTUFYCi0jZW5kaWYKLS8qIFJlcGVhdCBj b3VudHMgYXJlIHN0b3JlZCBpbiBvcGNvZGVzIGFzIDIgYnl0ZSBpbnRlZ2Vycy4gIFRoaXMg d2FzCi0gICBwcmV2aW91c2x5IGxpbWl0ZWQgdG8gN2ZmZiBiZWNhdXNlIHRoZSBwYXJzaW5n IGNvZGUgdXNlcyBzaWduZWQKLSAgIGludHMuICBCdXQgRW1hY3Mgb25seSBydW5zIG9uIDMy IGJpdCBwbGF0Zm9ybXMgYW55d2F5LiAgKi8KLSNkZWZpbmUgUkVfRFVQX01BWCAoMHhmZmZm KQotCiAKLS8qIFBPU0lYIGBjZmxhZ3MnIGJpdHMgKGkuZS4sIGluZm9ybWF0aW9uIGZvciBg cmVnY29tcCcpLiAgKi8KLQotLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIHVzZSBleHRl bmRlZCByZWd1bGFyIGV4cHJlc3Npb24gc3ludGF4LgotICAgSWYgbm90IHNldCwgdGhlbiB1 c2UgYmFzaWMgcmVndWxhciBleHByZXNzaW9uIHN5bnRheC4gICovCi0jZGVmaW5lIFJFR19F WFRFTkRFRCAxCi0KLS8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBpZ25vcmUgY2FzZSB3 aGVuIG1hdGNoaW5nLgotICAgSWYgbm90IHNldCwgdGhlbiBjYXNlIGlzIHNpZ25pZmljYW50 LiAgKi8KLSNkZWZpbmUgUkVHX0lDQVNFIChSRUdfRVhURU5ERUQgPDwgMSkKLQotLyogSWYg dGhpcyBiaXQgaXMgc2V0LCB0aGVuIGFuY2hvcnMgZG8gbm90IG1hdGNoIGF0IG5ld2xpbmUK LSAgICAgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nLgotICAgSWYgbm90IHNldCwgdGhlbiBh bmNob3JzIGRvIG1hdGNoIGF0IG5ld2xpbmVzLiAgKi8KLSNkZWZpbmUgUkVHX05FV0xJTkUg KFJFR19JQ0FTRSA8PCAxKQotCi0vKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gcmVwb3J0 IG9ubHkgc3VjY2VzcyBvciBmYWlsIGluIHJlZ2V4ZWMuCi0gICBJZiBub3Qgc2V0LCB0aGVu IHJldHVybnMgZGlmZmVyIGJldHdlZW4gbm90IG1hdGNoaW5nIGFuZCBlcnJvcnMuICAqLwot I2RlZmluZSBSRUdfTk9TVUIgKFJFR19ORVdMSU5FIDw8IDEpCi0KLQotLyogUE9TSVggYGVm bGFncycgYml0cyAoaS5lLiwgaW5mb3JtYXRpb24gZm9yIHJlZ2V4ZWMpLiAgKi8KLQotLyog SWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIHRoZSBiZWdpbm5pbmctb2YtbGluZSBvcGVyYXRv ciBkb2Vzbid0IG1hdGNoCi0gICAgIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyAocHJl c3VtYWJseSBiZWNhdXNlIGl0J3Mgbm90IHRoZQotICAgICBiZWdpbm5pbmcgb2YgYSBsaW5l KS4KLSAgIElmIG5vdCBzZXQsIHRoZW4gdGhlIGJlZ2lubmluZy1vZi1saW5lIG9wZXJhdG9y IGRvZXMgbWF0Y2ggdGhlCi0gICAgIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLiAgKi8KLSNk ZWZpbmUgUkVHX05PVEJPTCAxCi0KLS8qIExpa2UgUkVHX05PVEJPTCwgZXhjZXB0IGZvciB0 aGUgZW5kLW9mLWxpbmUuICAqLwotI2RlZmluZSBSRUdfTk9URU9MICgxIDw8IDEpCi0KLQot LyogSWYgYW55IGVycm9yIGNvZGVzIGFyZSByZW1vdmVkLCBjaGFuZ2VkLCBvciBhZGRlZCwg dXBkYXRlIHRoZQotICAgcmVfZXJyb3JfbXNnIHRhYmxlIGluIHJlZ2V4LWVtYWNzLmMuICAq LwotdHlwZWRlZiBlbnVtCi17Ci0jaWZkZWYgX1hPUEVOX1NPVVJDRQotICBSRUdfRU5PU1lT ID0gLTEsCS8qIFRoaXMgd2lsbCBuZXZlciBoYXBwZW4gZm9yIHRoaXMgaW1wbGVtZW50YXRp b24uICAqLwotI2VuZGlmCi0KLSAgUkVHX05PRVJST1IgPSAwLAkvKiBTdWNjZXNzLiAgKi8K LSAgUkVHX05PTUFUQ0gsCQkvKiBEaWRuJ3QgZmluZCBhIG1hdGNoIChmb3IgcmVnZXhlYyku ICAqLwotCi0gIC8qIFBPU0lYIHJlZ2NvbXAgcmV0dXJuIGVycm9yIGNvZGVzLiAgKEluIHRo ZSBvcmRlciBsaXN0ZWQgaW4gdGhlCi0gICAgIHN0YW5kYXJkLikgICovCi0gIFJFR19CQURQ QVQsCQkvKiBJbnZhbGlkIHBhdHRlcm4uICAqLwotICBSRUdfRUNPTExBVEUsCQkvKiBOb3Qg aW1wbGVtZW50ZWQuICAqLwotICBSRUdfRUNUWVBFLAkJLyogSW52YWxpZCBjaGFyYWN0ZXIg Y2xhc3MgbmFtZS4gICovCi0gIFJFR19FRVNDQVBFLAkJLyogVHJhaWxpbmcgYmFja3NsYXNo LiAgKi8KLSAgUkVHX0VTVUJSRUcsCQkvKiBJbnZhbGlkIGJhY2sgcmVmZXJlbmNlLiAgKi8K LSAgUkVHX0VCUkFDSywJCS8qIFVubWF0Y2hlZCBsZWZ0IGJyYWNrZXQuICAqLwotICBSRUdf RVBBUkVOLAkJLyogUGFyZW50aGVzaXMgaW1iYWxhbmNlLiAgKi8KLSAgUkVHX0VCUkFDRSwJ CS8qIFVubWF0Y2hlZCBcey4gICovCi0gIFJFR19CQURCUiwJCS8qIEludmFsaWQgY29udGVu dHMgb2YgXHtcfS4gICovCi0gIFJFR19FUkFOR0UsCQkvKiBJbnZhbGlkIHJhbmdlIGVuZC4g ICovCi0gIFJFR19FU1BBQ0UsCQkvKiBSYW4gb3V0IG9mIG1lbW9yeS4gICovCi0gIFJFR19C QURSUFQsCQkvKiBObyBwcmVjZWRpbmcgcmUgZm9yIHJlcGV0aXRpb24gb3AuICAqLwotCi0g IC8qIEVycm9yIGNvZGVzIHdlJ3ZlIGFkZGVkLiAgKi8KLSAgUkVHX0VFTkQsCQkvKiBQcmVt YXR1cmUgZW5kLiAgKi8KLSAgUkVHX0VTSVpFLAkJLyogQ29tcGlsZWQgcGF0dGVybiBiaWdn ZXIgdGhhbiAyXjE2IGJ5dGVzLiAgKi8KLSAgUkVHX0VSUEFSRU4sCQkvKiBVbm1hdGNoZWQg KSBvciBcKTsgbm90IHJldHVybmVkIGZyb20gcmVnY29tcC4gICovCi0gIFJFR19FUkFOR0VY LAkJLyogUmFuZ2Ugc3RyaWRpbmcgb3ZlciBjaGFyc2V0cy4gICovCi0gIFJFR19FU0laRUJS ICAgICAgICAgICAvKiBuIG9yIG0gdG9vIGJpZyBpbiBce24sbVx9ICovCi19IHJlZ19lcnJj b2RlX3Q7CiAMCi0vKiBVc2UgYSB0eXBlIGNvbXBhdGlibGUgd2l0aCBFbWFjcy4gICovCi0j ZGVmaW5lIFJFX1RSQU5TTEFURV9UWVBFIExpc3BfT2JqZWN0Ci0jZGVmaW5lIFJFX1RSQU5T TEFURShUQkwsIEMpIGNoYXJfdGFibGVfdHJhbnNsYXRlIChUQkwsIEMpCi0jZGVmaW5lIFJF X1RSQU5TTEFURV9QKFRCTCkgKCFFUSAoVEJMLCBtYWtlX251bWJlciAoMCkpKQotCiAvKiBU aGlzIGRhdGEgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBjb21waWxlZCBwYXR0ZXJuLiAgQmVm b3JlIGNhbGxpbmcKICAgIHRoZSBwYXR0ZXJuIGNvbXBpbGVyLCB0aGUgZmllbGRzIGBidWZm ZXInLCBgYWxsb2NhdGVkJywgYGZhc3RtYXAnLAogICAgYHRyYW5zbGF0ZScsIGFuZCBgbm9f c3ViJyBjYW4gYmUgc2V0LiAgQWZ0ZXIgdGhlIHBhdHRlcm4gaGFzIGJlZW4KICAgIGNvbXBp bGVkLCB0aGUgYHJlX25zdWInIGZpZWxkIGlzIGF2YWlsYWJsZS4gIEFsbCBvdGhlciBmaWVs ZHMgYXJlCiAgICBwcml2YXRlIHRvIHRoZSByZWdleCByb3V0aW5lcy4gICovCiAKLSNpZm5k ZWYgUkVfVFJBTlNMQVRFX1RZUEUKLSMgZGVmaW5lIFJFX1RSQU5TTEFURV9UWVBFIGNoYXIg KgotI2VuZGlmCi0KIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlcgogewotLyogW1tbYmVnaW4g cGF0dGVybl9idWZmZXJdXV0gKi8KIAkvKiBTcGFjZSB0aGF0IGhvbGRzIHRoZSBjb21waWxl ZCBwYXR0ZXJuLiAgSXQgaXMgZGVjbGFyZWQgYXMKICAgICAgICAgICBgdW5zaWduZWQgY2hh ciAqJyBiZWNhdXNlIGl0cyBlbGVtZW50cyBhcmUKICAgICAgICAgICAgc29tZXRpbWVzIHVz ZWQgYXMgYXJyYXkgaW5kZXhlcy4gICovCkBAIC0zNzksMTMgKzc3LDkgQEAgc3RydWN0IHJl X3BhdHRlcm5fYnVmZmVyCiAJLyogTnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHVzZWQgaW4g YGJ1ZmZlcicuICAqLwogICBzaXplX3QgdXNlZDsKIAotI2lmZGVmIGVtYWNzCiAgICAgICAg IC8qIENoYXJzZXQgb2YgdW5pYnl0ZSBjaGFyYWN0ZXJzIGF0IGNvbXBpbGluZyB0aW1lLiAq LwogICBpbnQgY2hhcnNldF91bmlieXRlOwotI2Vsc2UKLSAgICAgICAgLyogU3ludGF4IHNl dHRpbmcgd2l0aCB3aGljaCB0aGUgcGF0dGVybiB3YXMgY29tcGlsZWQuICAqLwotICByZWdf c3ludGF4X3Qgc3ludGF4OwotI2VuZGlmCisKICAgICAgICAgLyogUG9pbnRlciB0byBhIGZh c3RtYXAsIGlmIGFueSwgb3RoZXJ3aXNlIHplcm8uICByZV9zZWFyY2ggdXNlcwogICAgICAg ICAgICB0aGUgZmFzdG1hcCwgaWYgdGhlcmUgaXMgb25lLCB0byBza2lwIG92ZXIgaW1wb3Nz aWJsZQogICAgICAgICAgICBzdGFydGluZyBwb2ludHMgZm9yIG1hdGNoZXMuICAqLwpAQCAt Mzk1LDcgKzg5LDcgQEAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyCiAgICAgICAgICAgIGNv bXBhcmluZyB0aGVtLCBvciB6ZXJvIGZvciBubyB0cmFuc2xhdGlvbi4gIFRoZSB0cmFuc2xh dGlvbgogICAgICAgICAgICBpcyBhcHBsaWVkIHRvIGEgcGF0dGVybiB3aGVuIGl0IGlzIGNv bXBpbGVkIGFuZCB0byBhIHN0cmluZwogICAgICAgICAgICB3aGVuIGl0IGlzIG1hdGNoZWQu ICAqLwotICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFuc2xhdGU7CisgIExpc3BfT2JqZWN0IHRy YW5zbGF0ZTsKIAogCS8qIE51bWJlciBvZiBzdWJleHByZXNzaW9ucyBmb3VuZCBieSB0aGUg Y29tcGlsZXIuICAqLwogICBzaXplX3QgcmVfbnN1YjsKQEAgLTQxMCw5ICsxMDQsNiBAQCBz dHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIKICAgICAgICAgICAgICBmb3IgYG1heCAoUkVfTlJF R1MsIHJlX25zdWIgKyAxKScgZ3JvdXBzLgogICAgICAgICAgICBJZiBSRUdTX1JFQUxMT0NB VEUsIHJlYWxsb2NhdGUgc3BhY2UgaWYgbmVjZXNzYXJ5LgogICAgICAgICAgICBJZiBSRUdT X0ZJWEVELCB1c2Ugd2hhdCdzIHRoZXJlLiAgKi8KLSNkZWZpbmUgUkVHU19VTkFMTE9DQVRF RCAwCi0jZGVmaW5lIFJFR1NfUkVBTExPQ0FURSAxCi0jZGVmaW5lIFJFR1NfRklYRUQgMgog ICB1bnNpZ25lZCByZWdzX2FsbG9jYXRlZCA6IDI7CiAKICAgICAgICAgLyogU2V0IHRvIHpl cm8gd2hlbiBgcmVnZXhfY29tcGlsZScgY29tcGlsZXMgYSBwYXR0ZXJuOyBzZXQgdG8gb25l CkBAIC00MzQsNyArMTI1LDYgQEAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyCiAgICAgIHNv IHRoZSBjb21waWxlZCBwYXR0ZXJuIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSBjdXJyZW50IHN5 bnRheCB0YWJsZS4gICovCiAgIHVuc2lnbmVkIHVzZWRfc3ludGF4IDogMTsKIAotI2lmZGVm IGVtYWNzCiAgIC8qIElmIHRydWUsIG11bHRpLWJ5dGUgZm9ybSBpbiB0aGUgcmVnZXhwIHBh dHRlcm4gc2hvdWxkIGJlCiAgICAgIHJlY29nbml6ZWQgYXMgYSBtdWx0aWJ5dGUgY2hhcmFj dGVyLiAgKi8KICAgdW5zaWduZWQgbXVsdGlieXRlIDogMTsKQEAgLTQ0Miw3MiArMTMyLDE3 IEBAIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlcgogICAvKiBJZiB0cnVlLCBtdWx0aS1ieXRl IGZvcm0gaW4gdGhlIHRhcmdldCBvZiBtYXRjaCBzaG91bGQgYmUKICAgICAgcmVjb2duaXpl ZCBhcyBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICAqLwogICB1bnNpZ25lZCB0YXJnZXRfbXVs dGlieXRlIDogMTsKLSNlbmRpZgotCi0vKiBbW1tlbmQgcGF0dGVybl9idWZmZXJdXV0gKi8K IH07Ci0KLXR5cGVkZWYgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyIHJlZ2V4X3Q7Ci0MCi0v KiBQT1NJWCAxMDAzLjEtMjAwOCByZXF1aXJlcyB0aGF0IHJlZ29mZl90IGJlIGF0IGxlYXN0 IGFzIHdpZGUgYXMKLSAgIHB0cmRpZmZfdCBhbmQgc3NpemVfdC4gIFdlIGRvbid0IGtub3cg b2YgYW55IGhvc3RzIHdoZXJlIHB0cmRpZmZfdAotICAgaXMgd2lkZXIgdGhhbiBzc2l6ZV90 LCBzbyBzc2l6ZV90IGlzIHNhZmUuICBwdHJkaWZmX3QgaXMgbm90Ci0gICBuZWNlc3Nhcmls eSB2aXNpYmxlIGhlcmUsIHNvIHVzZSBzc2l6ZV90LiAgKi8KLXR5cGVkZWYgc3NpemVfdCBy ZWdvZmZfdDsKLQotCi0vKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgd2Ugc3RvcmUgcmVnaXN0 ZXIgbWF0Y2ggZGF0YSBpbi4gIFNlZQotICAgcmVnZXgudGV4aW5mbyBmb3IgYSBmdWxsIGRl c2NyaXB0aW9uIG9mIHdoYXQgcmVnaXN0ZXJzIG1hdGNoLiAgKi8KLXN0cnVjdCByZV9yZWdp c3RlcnMKLXsKLSAgdW5zaWduZWQgbnVtX3JlZ3M7Ci0gIHJlZ29mZl90ICpzdGFydDsKLSAg cmVnb2ZmX3QgKmVuZDsKLX07Ci0KLQotLyogSWYgYHJlZ3NfYWxsb2NhdGVkJyBpcyBSRUdT X1VOQUxMT0NBVEVEIGluIHRoZSBwYXR0ZXJuIGJ1ZmZlciwKLSAgIGByZV9tYXRjaF8yJyBy ZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGF0IGxlYXN0IHRoaXMgbWFueSByZWdpc3RlcnMK LSAgIHRoZSBmaXJzdCB0aW1lIGEgYHJlZ3MnIHN0cnVjdHVyZSBpcyBwYXNzZWQuICAqLwot I2lmbmRlZiBSRV9OUkVHUwotIyBkZWZpbmUgUkVfTlJFR1MgMzAKLSNlbmRpZgotCi0KLS8q IFBPU0lYIHNwZWNpZmljYXRpb24gZm9yIHJlZ2lzdGVycy4gIEFzaWRlIGZyb20gdGhlIGRp ZmZlcmVudCBuYW1lcyB0aGFuCi0gICBgcmVfcmVnaXN0ZXJzJywgUE9TSVggdXNlcyBhbiBh cnJheSBvZiBzdHJ1Y3R1cmVzLCBpbnN0ZWFkIG9mIGEKLSAgIHN0cnVjdHVyZSBvZiBhcnJh eXMuICAqLwotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgcmVnb2ZmX3Qgcm1fc287ICAvKiBCeXRl IG9mZnNldCBmcm9tIHN0cmluZydzIHN0YXJ0IHRvIHN1YnN0cmluZydzIHN0YXJ0LiAgKi8K LSAgcmVnb2ZmX3Qgcm1fZW87ICAvKiBCeXRlIG9mZnNldCBmcm9tIHN0cmluZydzIHN0YXJ0 IHRvIHN1YnN0cmluZydzIGVuZC4gICovCi19IHJlZ21hdGNoX3Q7CiAMCiAvKiBEZWNsYXJh dGlvbnMgZm9yIHJvdXRpbmVzLiAgKi8KIAotI2lmbmRlZiBlbWFjcwotCi0vKiBTZXRzIHRo ZSBjdXJyZW50IGRlZmF1bHQgc3ludGF4IHRvIFNZTlRBWCwgYW5kIHJldHVybiB0aGUgb2xk IHN5bnRheC4KLSAgIFlvdSBjYW4gYWxzbyBzaW1wbHkgYXNzaWduIHRvIHRoZSBgcmVfc3lu dGF4X29wdGlvbnMnIHZhcmlhYmxlLiAgKi8KLWV4dGVybiByZWdfc3ludGF4X3QgcmVfc2V0 X3N5bnRheCAocmVnX3N5bnRheF90IF9fc3ludGF4KTsKLQotI2VuZGlmCi0KIC8qIENvbXBp bGUgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBQQVRURVJOLCB3aXRoIGxlbmd0aCBMRU5HVEgK ICAgIGFuZCBzeW50YXggZ2l2ZW4gYnkgdGhlIGdsb2JhbCBgcmVfc3ludGF4X29wdGlvbnMn LCBpbnRvIHRoZSBidWZmZXIKICAgIEJVRkZFUi4gIFJldHVybiBOVUxMIGlmIHN1Y2Nlc3Nm dWwsIGFuZCBhbiBlcnJvciBzdHJpbmcgaWYgbm90LiAgKi8KLWV4dGVybiBjb25zdCBjaGFy ICpyZV9jb21waWxlX3BhdHRlcm4gKGNvbnN0IGNoYXIgKl9fcGF0dGVybiwgc2l6ZV90IF9f bGVuZ3RoLAotI2lmZGVmIGVtYWNzCitleHRlcm4gY29uc3QgY2hhciAqcmVfY29tcGlsZV9w YXR0ZXJuIChjb25zdCBjaGFyICpwYXR0ZXJuLCBzaXplX3QgbGVuZ3RoLAogCQkJCSAgICAg ICBib29sIHBvc2l4X2JhY2t0cmFja2luZywKIAkJCQkgICAgICAgY29uc3QgY2hhciAqd2hp dGVzcGFjZV9yZWdleHAsCi0jZW5kaWYKLQkJCQkgICAgICAgc3RydWN0IHJlX3BhdHRlcm5f YnVmZmVyICpfX2J1ZmZlcik7Ci0KLQotLyogQ29tcGlsZSBhIGZhc3RtYXAgZm9yIHRoZSBj b21waWxlZCBwYXR0ZXJuIGluIEJVRkZFUjsgdXNlZCB0bwotICAgYWNjZWxlcmF0ZSBzZWFy Y2hlcy4gIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwgYW5kIC0yIGlmIHdhcyBhbgotICAgaW50 ZXJuYWwgZXJyb3IuICAqLwotZXh0ZXJuIGludCByZV9jb21waWxlX2Zhc3RtYXAgKHN0cnVj dCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIpOworCQkJCSAgICAgICBzdHJ1Y3QgcmVf cGF0dGVybl9idWZmZXIgKmJ1ZmZlcik7CiAKIAogLyogU2VhcmNoIGluIHRoZSBzdHJpbmcg U1RSSU5HICh3aXRoIGxlbmd0aCBMRU5HVEgpIGZvciB0aGUgcGF0dGVybgpAQCAtNTE1LDQy ICsxNTAsMzYgQEAgZXh0ZXJuIGludCByZV9jb21waWxlX2Zhc3RtYXAgKHN0cnVjdCByZV9w YXR0ZXJuX2J1ZmZlciAqX19idWZmZXIpOwogICAgY2hhcmFjdGVycy4gIFJldHVybiB0aGUg c3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIG1hdGNoLCAtMSBmb3Igbm8KICAgIG1hdGNoLCBv ciAtMiBmb3IgYW4gaW50ZXJuYWwgZXJyb3IuICBBbHNvIHJldHVybiByZWdpc3RlcgogICAg aW5mb3JtYXRpb24gaW4gUkVHUyAoaWYgUkVHUyBhbmQgQlVGRkVSLT5ub19zdWIgYXJlIG5v bnplcm8pLiAgKi8KLWV4dGVybiByZWdvZmZfdCByZV9zZWFyY2ggKHN0cnVjdCByZV9wYXR0 ZXJuX2J1ZmZlciAqX19idWZmZXIsCi0JCQkgICBjb25zdCBjaGFyICpfX3N0cmluZywgc2l6 ZV90IF9fbGVuZ3RoLAotCQkJICAgc3NpemVfdCBfX3N0YXJ0LCBzc2l6ZV90IF9fcmFuZ2Us Ci0JCQkgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpfX3JlZ3MpOworZXh0ZXJuIHB0cmRpZmZf dCByZV9zZWFyY2ggKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmZmVyLAorCQkJICAg Y29uc3QgY2hhciAqc3RyaW5nLCBzaXplX3QgbGVuZ3RoLAorCQkJICAgcHRyZGlmZl90IHN0 YXJ0LCBwdHJkaWZmX3QgcmFuZ2UsCisJCQkgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdz KTsKIAogCiAvKiBMaWtlIGByZV9zZWFyY2gnLCBidXQgc2VhcmNoIGluIHRoZSBjb25jYXRl bmF0aW9uIG9mIFNUUklORzEgYW5kCiAgICBTVFJJTkcyLiAgQWxzbywgc3RvcCBzZWFyY2hp bmcgYXQgaW5kZXggU1RBUlQgKyBTVE9QLiAgKi8KLWV4dGVybiByZWdvZmZfdCByZV9zZWFy Y2hfMiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpfX2J1ZmZlciwKLQkJCSAgICAgY29u c3QgY2hhciAqX19zdHJpbmcxLCBzaXplX3QgX19sZW5ndGgxLAotCQkJICAgICBjb25zdCBj aGFyICpfX3N0cmluZzIsIHNpemVfdCBfX2xlbmd0aDIsCi0JCQkgICAgIHNzaXplX3QgX19z dGFydCwgc3NpemVfdCBfX3JhbmdlLAotCQkJICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpf X3JlZ3MsCi0JCQkgICAgIHNzaXplX3QgX19zdG9wKTsKK2V4dGVybiBwdHJkaWZmX3QgcmVf c2VhcmNoXzIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmZmVyLAorCQkJICAgICBj b25zdCBjaGFyICpzdHJpbmcxLCBzaXplX3QgbGVuZ3RoMSwKKwkJCSAgICAgY29uc3QgY2hh ciAqc3RyaW5nMiwgc2l6ZV90IGxlbmd0aDIsCisJCQkgICAgIHB0cmRpZmZfdCBzdGFydCwg cHRyZGlmZl90IHJhbmdlLAorCQkJICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLAor CQkJICAgICBwdHJkaWZmX3Qgc3RvcCk7CiAKIAotLyogTGlrZSBgcmVfc2VhcmNoJywgYnV0 IHJldHVybiBob3cgbWFueSBjaGFyYWN0ZXJzIGluIFNUUklORyB0aGUgcmVnZXhwCisvKiBM aWtlICdyZV9zZWFyY2hfMicsIGJ1dCByZXR1cm4gaG93IG1hbnkgY2hhcmFjdGVycyBpbiBT VFJJTkcgdGhlIHJlZ2V4cAogICAgaW4gQlVGRkVSIG1hdGNoZWQsIHN0YXJ0aW5nIGF0IHBv c2l0aW9uIFNUQVJULiAgKi8KLWV4dGVybiByZWdvZmZfdCByZV9tYXRjaCAoc3RydWN0IHJl X3BhdHRlcm5fYnVmZmVyICpfX2J1ZmZlciwKLQkJCSAgY29uc3QgY2hhciAqX19zdHJpbmcs IHNpemVfdCBfX2xlbmd0aCwKLQkJCSAgc3NpemVfdCBfX3N0YXJ0LCBzdHJ1Y3QgcmVfcmVn aXN0ZXJzICpfX3JlZ3MpOwotCi0KLS8qIFJlbGF0ZXMgdG8gYHJlX21hdGNoJyBhcyBgcmVf c2VhcmNoXzInIHJlbGF0ZXMgdG8gYHJlX3NlYXJjaCcuICAqLwotZXh0ZXJuIHJlZ29mZl90 IHJlX21hdGNoXzIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIsCi0JCQkg ICAgY29uc3QgY2hhciAqX19zdHJpbmcxLCBzaXplX3QgX19sZW5ndGgxLAotCQkJICAgIGNv bnN0IGNoYXIgKl9fc3RyaW5nMiwgc2l6ZV90IF9fbGVuZ3RoMiwKLQkJCSAgICBzc2l6ZV90 IF9fc3RhcnQsIHN0cnVjdCByZV9yZWdpc3RlcnMgKl9fcmVncywKLQkJCSAgICBzc2l6ZV90 IF9fc3RvcCk7CitleHRlcm4gcHRyZGlmZl90IHJlX21hdGNoXzIgKHN0cnVjdCByZV9wYXR0 ZXJuX2J1ZmZlciAqYnVmZmVyLAorCQkJICAgIGNvbnN0IGNoYXIgKnN0cmluZzEsIHNpemVf dCBsZW5ndGgxLAorCQkJICAgIGNvbnN0IGNoYXIgKnN0cmluZzIsIHNpemVfdCBsZW5ndGgy LAorCQkJICAgIHB0cmRpZmZfdCBzdGFydCwgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywK KwkJCSAgICBwdHJkaWZmX3Qgc3RvcCk7CiAKIAogLyogU2V0IFJFR1MgdG8gaG9sZCBOVU1f UkVHUyByZWdpc3RlcnMsIHN0b3JpbmcgdGhlbSBpbiBTVEFSVFMgYW5kCiAgICBFTkRTLiAg U3Vic2VxdWVudCBtYXRjaGVzIHVzaW5nIEJVRkZFUiBhbmQgUkVHUyB3aWxsIHVzZSB0aGlz IG1lbW9yeQogICAgZm9yIHJlY29yZGluZyByZWdpc3RlciBpbmZvcm1hdGlvbi4gIFNUQVJU UyBhbmQgRU5EUyBtdXN0IGJlCiAgICBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MsIGFuZCBtdXN0 IGVhY2ggYmUgYXQgbGVhc3QgYE5VTV9SRUdTICogc2l6ZW9mCi0gICAocmVnb2ZmX3QpJyBi eXRlcyBsb25nLgorICAgKHB0cmRpZmZfdCknIGJ5dGVzIGxvbmcuCiAKICAgIElmIE5VTV9S RUdTID09IDAsIHRoZW4gc3Vic2VxdWVudCBtYXRjaGVzIHNob3VsZCBhbGxvY2F0ZSB0aGVp ciBvd24KICAgIHJlZ2lzdGVyIGRhdGEuCkBAIC01NTgsODMgKzE4NywxMCBAQCBleHRlcm4g cmVnb2ZmX3QgcmVfbWF0Y2hfMiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpfX2J1ZmZl ciwKICAgIFVubGVzcyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIGZpcnN0IHNlYXJj aCBvciBtYXRjaCB1c2luZwogICAgUEFUVEVSTl9CVUZGRVIgd2lsbCBhbGxvY2F0ZSBpdHMg b3duIHJlZ2lzdGVyIGRhdGEsIHdpdGhvdXQKICAgIGZyZWVpbmcgdGhlIG9sZCBkYXRhLiAg Ki8KLWV4dGVybiB2b2lkIHJlX3NldF9yZWdpc3RlcnMgKHN0cnVjdCByZV9wYXR0ZXJuX2J1 ZmZlciAqX19idWZmZXIsCi0JCQkgICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpfX3JlZ3Ms Ci0JCQkgICAgICB1bnNpZ25lZCBfX251bV9yZWdzLAotCQkJICAgICAgcmVnb2ZmX3QgKl9f c3RhcnRzLCByZWdvZmZfdCAqX19lbmRzKTsKLQotI2lmIGRlZmluZWQgX1JFR0VYX1JFX0NP TVAgfHwgZGVmaW5lZCBfTElCQwotIyBpZm5kZWYgX0NSQVkKLS8qIDQuMiBic2QgY29tcGF0 aWJpbGl0eS4gICovCi1leHRlcm4gY2hhciAqcmVfY29tcCAoY29uc3QgY2hhciAqKTsKLWV4 dGVybiBpbnQgcmVfZXhlYyAoY29uc3QgY2hhciAqKTsKLSMgZW5kaWYKLSNlbmRpZgotCi0v KiBHQ0MgMi45NSBhbmQgbGF0ZXIgaGF2ZSAiX19yZXN0cmljdCI7IEM5OSBjb21waWxlcnMg aGF2ZQotICAgInJlc3RyaWN0IiwgYW5kICJjb25maWd1cmUiIG1heSBoYXZlIGRlZmluZWQg InJlc3RyaWN0Ii4KLSAgIE90aGVyIGNvbXBpbGVycyB1c2UgX19yZXN0cmljdCwgX19yZXN0 cmljdF9fLCBhbmQgX1Jlc3RyaWN0LCBhbmQKLSAgICdjb25maWd1cmUnIG1pZ2h0ICNkZWZp bmUgJ3Jlc3RyaWN0JyB0byB0aG9zZSB3b3Jkcywgc28gcGljayBhCi0gICBkaWZmZXJlbnQg bmFtZS4gICovCi0jaWZuZGVmIF9SZXN0cmljdF8KLSMgaWYgMTk5OTAxTCA8PSBfX1NURENf VkVSU0lPTl9fCi0jICBkZWZpbmUgX1Jlc3RyaWN0XyByZXN0cmljdAotIyBlbGlmIDIgPCBf X0dOVUNfXyB8fCAoMiA9PSBfX0dOVUNfXyAmJiA5NSA8PSBfX0dOVUNfTUlOT1JfXykKLSMg IGRlZmluZSBfUmVzdHJpY3RfIF9fcmVzdHJpY3QKLSMgZWxzZQotIyAgZGVmaW5lIF9SZXN0 cmljdF8KLSMgZW5kaWYKLSNlbmRpZgotLyogZ2NjIDMuMSBhbmQgdXAgc3VwcG9ydCB0aGUg W3Jlc3RyaWN0XSBzeW50YXguICBEb24ndCB0cnVzdAotICAgc3lzL2NkZWZzLmgncyBkZWZp bml0aW9uIG9mIF9fcmVzdHJpY3RfYXJyLCB0aG91Z2gsIGFzIGl0Ci0gICBtaXNoYW5kbGVz IGdjYyAtYW5zaSAtcGVkYW50aWMuICAqLwotI2lmbmRlZiBfUmVzdHJpY3RfYXJyXwotIyBp ZiAoKDE5OTkwMUwgPD0gX19TVERDX1ZFUlNJT05fXwkJCQkJXAotICAgICAgIHx8ICgoMyA8 IF9fR05VQ19fIHx8ICgzID09IF9fR05VQ19fICYmIDEgPD0gX19HTlVDX01JTk9SX18pKQlc Ci0JICAgJiYgIWRlZmluZWQgX19TVFJJQ1RfQU5TSV9fKSkJCQkJCVwKLSAgICAgICYmICFk ZWZpbmVkIF9fR05VR19fKQotIyAgZGVmaW5lIF9SZXN0cmljdF9hcnJfIF9SZXN0cmljdF8K LSMgZWxzZQotIyAgZGVmaW5lIF9SZXN0cmljdF9hcnJfCi0jIGVuZGlmCi0jZW5kaWYKLQot LyogUE9TSVggY29tcGF0aWJpbGl0eS4gICovCi1leHRlcm4gcmVnX2VycmNvZGVfdCByZWdj b21wIChyZWdleF90ICpfUmVzdHJpY3RfIF9fcHJlZywKLQkJCSAgICAgIGNvbnN0IGNoYXIg Kl9SZXN0cmljdF8gX19wYXR0ZXJuLAotCQkJICAgICAgaW50IF9fY2ZsYWdzKTsKLQotZXh0 ZXJuIHJlZ19lcnJjb2RlX3QgcmVnZXhlYyAoY29uc3QgcmVnZXhfdCAqX1Jlc3RyaWN0XyBf X3ByZWcsCi0JCQkgICAgICBjb25zdCBjaGFyICpfUmVzdHJpY3RfIF9fc3RyaW5nLCBzaXpl X3QgX19ubWF0Y2gsCi0JCQkgICAgICByZWdtYXRjaF90IF9fcG1hdGNoW19SZXN0cmljdF9h cnJfXSwKLQkJCSAgICAgIGludCBfX2VmbGFncyk7Ci0KLWV4dGVybiBzaXplX3QgcmVnZXJy b3IgKGludCBfX2VycmNvZGUsIGNvbnN0IHJlZ2V4X3QgKiBfX3ByZWcsCi0JCQljaGFyICpf X2VycmJ1Ziwgc2l6ZV90IF9fZXJyYnVmX3NpemUpOwotCi1leHRlcm4gdm9pZCByZWdmcmVl IChyZWdleF90ICpfX3ByZWcpOwotCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlm CS8qIEMrKyAqLwotCi0vKiBGb3IgcGxhdGZvcm0gd2hpY2ggc3VwcG9ydCB0aGUgSVNPIEMg YW1lbmRtZW50IDEgZnVuY3Rpb25hbGl0eSB3ZQotICAgc3VwcG9ydCB1c2VyIGRlZmluZWQg Y2hhcmFjdGVyIGNsYXNzZXMuICAqLwotI2lmIFdJREVfQ0hBUl9TVVBQT1JUCi0vKiBTb2xh cmlzIDIuNSBoYXMgYSBidWc6IDx3Y2hhci5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSA8 d2N0eXBlLmg+LiAgKi8KLSMgaW5jbHVkZSA8d2NoYXIuaD4KLSMgaW5jbHVkZSA8d2N0eXBl Lmg+Ci0KLXR5cGVkZWYgd2N0eXBlX3QgcmVfd2N0eXBlX3Q7Ci10eXBlZGVmIHdjaGFyX3Qg cmVfd2NoYXJfdDsKLSMgZGVmaW5lIHJlX3djdHlwZSB3Y3R5cGUKLSMgZGVmaW5lIHJlX2lz d2N0eXBlIGlzd2N0eXBlCi0jIGRlZmluZSByZV93Y3R5cGVfdG9fYml0KGNjKSAwCi0jZWxz ZQotIyBpZm5kZWYgZW1hY3MKLSMgIGRlZmluZSBidG93YyhjKSBjCi0jIGVuZGlmCitleHRl cm4gdm9pZCByZV9zZXRfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1 ZmZlciwKKwkJCSAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCisJCQkgICAgICB1 bnNpZ25lZCBudW1fcmVncywKKwkJCSAgICAgIHB0cmRpZmZfdCAqc3RhcnRzLCBwdHJkaWZm X3QgKmVuZHMpOwogCiAvKiBDaGFyYWN0ZXIgY2xhc3Nlcy4gICovCiB0eXBlZGVmIGVudW0g eyBSRUNDX0VSUk9SID0gMCwKQEAgLTY0OCwxMiArMjA0LDggQEAgdHlwZWRlZiBlbnVtIHsg UkVDQ19FUlJPUiA9IDAsCiAJICAgICAgIFJFQ0NfQVNDSUksIFJFQ0NfVU5JQllURQogfSBy ZV93Y3R5cGVfdDsKIAotZXh0ZXJuIGNoYXIgcmVfaXN3Y3R5cGUgKGludCBjaCwgICAgcmVf d2N0eXBlX3QgY2MpOwotZXh0ZXJuIHJlX3djdHlwZV90IHJlX3djdHlwZV9wYXJzZSAoY29u c3QgdW5zaWduZWQgY2hhciAqKnN0cnAsIHVuc2lnbmVkIGxpbWl0KTsKLQotdHlwZWRlZiBp bnQgcmVfd2NoYXJfdDsKLQotI2VuZGlmIC8qIG5vdCBXSURFX0NIQVJfU1VQUE9SVCAqLwor ZXh0ZXJuIGJvb2wgcmVfaXN3Y3R5cGUgKGludCBjaCwgcmVfd2N0eXBlX3QgY2MpOworZXh0 ZXJuIHJlX3djdHlwZV90IHJlX3djdHlwZV9wYXJzZSAoY29uc3QgdW5zaWduZWQgY2hhciAq KnN0cnAsCisJCQkJICAgIHVuc2lnbmVkIGxpbWl0KTsKIAogI2VuZGlmIC8qIHJlZ2V4LWVt YWNzLmggKi8KLQwKZGlmZiAtLWdpdCBhL3NyYy9zZWFyY2guYyBiL3NyYy9zZWFyY2guYwpp bmRleCA0ZWU3MDE0NGZjLi4yMDMxYmRjNmQyIDEwMDY0NAotLS0gYS9zcmMvc2VhcmNoLmMK KysrIGIvc3JjL3NlYXJjaC5jCkBAIC01OSw4ICs1OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcmVn ZXhwX2NhY2hlIHNlYXJjaGJ1ZnNbUkVHRVhQX0NBQ0hFX1NJWkVdOwogc3RhdGljIHN0cnVj dCByZWdleHBfY2FjaGUgKnNlYXJjaGJ1Zl9oZWFkOwogCiAKLS8qIEV2ZXJ5IGNhbGwgdG8g cmVfbWF0Y2gsIGV0Yy4sIG11c3QgcGFzcyAmc2VhcmNoX3JlZ3MgYXMgdGhlIHJlZ3MKLSAg IGFyZ3VtZW50IHVubGVzcyB5b3UgY2FuIHNob3cgaXQgaXMgdW5uZWNlc3NhcnkgKGkuZS4s IGlmIHJlX21hdGNoCisvKiBFdmVyeSBjYWxsIHRvIHJlX3NlYXJjaCwgZXRjLiwgbXVzdCBw YXNzICZzZWFyY2hfcmVncyBhcyB0aGUgcmVncworICAgYXJndW1lbnQgdW5sZXNzIHlvdSBj YW4gc2hvdyBpdCBpcyB1bm5lY2Vzc2FyeSAoaS5lLiwgaWYgcmVfc2VhcmNoCiAgICBpcyBj ZXJ0YWlubHkgZ29pbmcgdG8gYmUgY2FsbGVkIGFnYWluIGJlZm9yZSByZWdpb24tYXJvdW5k LW1hdGNoCiAgICBjYW4gYmUgY2FsbGVkKS4KIApAQCAtMjE4Niw4ICsyMTg2LDggQEAgc2V0 X3NlYXJjaF9yZWdzIChwdHJkaWZmX3QgYmVnX2J5dGUsIHB0cmRpZmZfdCBuYnl0ZXMpCiAg ICAgIHRoZSBtYXRjaCBwb3NpdGlvbi4gICovCiAgIGlmIChzZWFyY2hfcmVncy5udW1fcmVn cyA9PSAwKQogICAgIHsKLSAgICAgIHNlYXJjaF9yZWdzLnN0YXJ0ID0geG1hbGxvYyAoMiAq IHNpemVvZiAocmVnb2ZmX3QpKTsKLSAgICAgIHNlYXJjaF9yZWdzLmVuZCA9IHhtYWxsb2Mg KDIgKiBzaXplb2YgKHJlZ29mZl90KSk7CisgICAgICBzZWFyY2hfcmVncy5zdGFydCA9IHht YWxsb2MgKDIgKiBzaXplb2YgKnNlYXJjaF9yZWdzLnN0YXJ0KTsKKyAgICAgIHNlYXJjaF9y ZWdzLmVuZCA9IHhtYWxsb2MgKDIgKiBzaXplb2YgKnNlYXJjaF9yZWdzLmVuZCk7CiAgICAg ICBzZWFyY2hfcmVncy5udW1fcmVncyA9IDI7CiAgICAgfQogCkBAIC0yOTk4LDkgKzI5OTgs OSBAQCBJZiBvcHRpb25hbCBhcmcgUkVTRUFUIGlzIG5vbi1uaWwsIG1ha2UgbWFya2VycyBv biBMSVNUIHBvaW50IG5vd2hlcmUuICAqLykKIAkgIG1lbW9yeV9mdWxsIChTSVpFX01BWCk7 CiAJc2VhcmNoX3JlZ3Muc3RhcnQgPQogCSAgeHBhbGxvYyAoc2VhcmNoX3JlZ3Muc3RhcnQs ICZudW1fcmVncywgbGVuZ3RoIC0gbnVtX3JlZ3MsCi0JCSAgIG1pbiAoUFRSRElGRl9NQVgs IFVJTlRfTUFYKSwgc2l6ZW9mIChyZWdvZmZfdCkpOworCQkgICBtaW4gKFBUUkRJRkZfTUFY LCBVSU5UX01BWCksIHNpemVvZiAqc2VhcmNoX3JlZ3Muc3RhcnQpOwogCXNlYXJjaF9yZWdz LmVuZCA9Ci0JICB4cmVhbGxvYyAoc2VhcmNoX3JlZ3MuZW5kLCBudW1fcmVncyAqIHNpemVv ZiAocmVnb2ZmX3QpKTsKKwkgIHhyZWFsbG9jIChzZWFyY2hfcmVncy5lbmQsIG51bV9yZWdz ICogc2l6ZW9mICpzZWFyY2hfcmVncy5lbmQpOwogCiAJZm9yIChpID0gc2VhcmNoX3JlZ3Mu bnVtX3JlZ3M7IGkgPCBudW1fcmVnczsgaSsrKQogCSAgc2VhcmNoX3JlZ3Muc3RhcnRbaV0g PSAtMTsKQEAgLTMwNTUsMTIgKzMwNTUsOSBAQCBJZiBvcHRpb25hbCBhcmcgUkVTRUFUIGlz IG5vbi1uaWwsIG1ha2UgbWFya2VycyBvbiBMSVNUIHBvaW50IG5vd2hlcmUuICAqLykKIAkg ICAgICBYU0VURkFTVElOVCAobWFya2VyLCAwKTsKIAogCSAgICBDSEVDS19OVU1CRVJfQ09F UkNFX01BUktFUiAobWFya2VyKTsKLQkgICAgaWYgKChYSU5UIChmcm9tKSA8IDAKLQkJID8g VFlQRV9NSU5JTVVNIChyZWdvZmZfdCkgPD0gWElOVCAoZnJvbSkKLQkJIDogWElOVCAoZnJv bSkgPD0gVFlQRV9NQVhJTVVNIChyZWdvZmZfdCkpCi0JCSYmIChYSU5UIChtYXJrZXIpIDwg MAotCQkgICAgPyBUWVBFX01JTklNVU0gKHJlZ29mZl90KSA8PSBYSU5UIChtYXJrZXIpCi0J CSAgICA6IFhJTlQgKG1hcmtlcikgPD0gVFlQRV9NQVhJTVVNIChyZWdvZmZfdCkpKQorCSAg ICBpZiAoUFRSRElGRl9NSU4gPD0gWElOVCAoZnJvbSkgJiYgWElOVCAoZnJvbSkgPD0gUFRS RElGRl9NQVgKKwkJJiYgUFRSRElGRl9NSU4gPD0gWElOVCAobWFya2VyKQorCQkmJiBYSU5U IChtYXJrZXIpIDw9IFBUUkRJRkZfTUFYKQogCSAgICAgIHsKIAkJc2VhcmNoX3JlZ3Muc3Rh cnRbaV0gPSBYSU5UIChmcm9tKTsKIAkJc2VhcmNoX3JlZ3MuZW5kW2ldID0gWElOVCAobWFy a2VyKTsKZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQuaCBiL3NyYy90aHJlYWQuaAppbmRleCBl MWViNDA5MjFiLi44ZWNiMDA4MjRkIDEwMDY0NAotLS0gYS9zcmMvdGhyZWFkLmgKKysrIGIv c3JjL3RocmVhZC5oCkBAIC0xMTIsOCArMTEyLDggQEAgc3RydWN0IHRocmVhZF9zdGF0ZQog ICBzdHJ1Y3QgYnVmZmVyICptX2N1cnJlbnRfYnVmZmVyOwogI2RlZmluZSBjdXJyZW50X2J1 ZmZlciAoY3VycmVudF90aHJlYWQtPm1fY3VycmVudF9idWZmZXIpCiAKLSAgLyogRXZlcnkg Y2FsbCB0byByZV9tYXRjaCwgZXRjLiwgbXVzdCBwYXNzICZzZWFyY2hfcmVncyBhcyB0aGUg cmVncwotICAgICBhcmd1bWVudCB1bmxlc3MgeW91IGNhbiBzaG93IGl0IGlzIHVubmVjZXNz YXJ5IChpLmUuLCBpZiByZV9tYXRjaAorICAvKiBFdmVyeSBjYWxsIHRvIHJlX21hdGNoXzIs IGV0Yy4sIG11c3QgcGFzcyAmc2VhcmNoX3JlZ3MgYXMgdGhlIHJlZ3MKKyAgICAgYXJndW1l bnQgdW5sZXNzIHlvdSBjYW4gc2hvdyBpdCBpcyB1bm5lY2Vzc2FyeSAoaS5lLiwgaWYgcmVf bWF0Y2hfMgogICAgICBpcyBjZXJ0YWlubHkgZ29pbmcgdG8gYmUgY2FsbGVkIGFnYWluIGJl Zm9yZSByZWdpb24tYXJvdW5kLW1hdGNoCiAgICAgIGNhbiBiZSBjYWxsZWQpLgogCi0tIAoy LjE3LjEKCg== --------------F39DF2437E1EAB82A614CC92 Content-Type: text/plain; charset=UTF-8; name="0003-Simplify-regex-emacs-by-assuming-Emacs-syntax.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0003-Simplify-regex-emacs-by-assuming-Emacs-syntax.txt" RnJvbSA2MDZmNGNlNTVkYTI4ZjJlN2NmNmQyMTRlNzQ2ODE5ZDgyYzk0YWI0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBUdWUsIDMxIEp1bCAyMDE4IDEwOjQ5OjQ2IC0wNzAwClN1YmplY3Q6IFtQQVRD SCAzLzRdIFNpbXBsaWZ5IHJlZ2V4LWVtYWNzIGJ5IGFzc3VtaW5nIEVtYWNzIHN5bnRheAoK KiBzcmMvcmVnZXgtZW1hY3MuYyAocmVnX3N5bnRheF90KQooUkVfQkFDS1NMQVNIX0VTQ0FQ RV9JTl9MSVNUUywgUkVfQktfUExVU19RTSkKKFJFX0NIQVJfQ0xBU1NFUywgUkVfQ09OVEVY VF9JTkRFUF9BTkNIT1JTKQooUkVfQ09OVEVYVF9JTkRFUF9PUFMsIFJFX0NPTlRFWFRfSU5W QUxJRF9PUFMpCihSRV9ET1RfTkVXTElORSwgUkVfRE9UX05PVF9OVUxMLCBSRV9IQVRfTElT VFNfTk9UX05FV0xJTkUpCihSRV9JTlRFUlZBTFMsIFJFX0xJTUlURURfT1BTLCBSRV9ORVdM SU5FX0FMVCkKKFJFX05PX0JLX0JSQUNFUywgUkVfTk9fQktfUEFSRU5TLCBSRV9OT19CS19S RUZTKQooUkVfTk9fQktfVkJBUiwgUkVfTk9fRU1QVFlfUkFOR0VTKQooUkVfVU5NQVRDSEVE X1JJR0hUX1BBUkVOX09SRCwgUkVfTk9fUE9TSVhfQkFDS1RSQUNLSU5HKQooUkVfTk9fR05V X09QUywgUkVfRlJVR0FMLCBSRV9TSFlfR1JPVVBTKQooUkVfTk9fTkVXTElORV9BTkNIT1Is IFJFX1NZTlRBWF9FTUFDUywgUkVfVFJBTlNMQVRFX1ApOgpSZW1vdmUuICBBbGwgdXNlcyBy ZW1vdmVkIGFuZCByZXN1bHRpbmcgY29kZSBzaW1wbGlmaWVkLgooVFJBTlNMQVRFKTogVHJl YXQgbmlsIGFzIGFuIGFic2VudCB0cmFuc2xhdGlvbiB0YWJsZSwgbm90IHplcm8uCkFsbCB1 c2VzIGNoYW5nZWQuCi0tLQogc3JjL3JlZ2V4LWVtYWNzLmMgfCA0OTQgKysrKysrKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL3NlYXJjaC5jICAgICAg fCAgIDQgKy0KIDIgZmlsZXMgY2hhbmdlZCwgNzAgaW5zZXJ0aW9ucygrKSwgNDI4IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9yZWdleC1lbWFjcy5jIGIvc3JjL3JlZ2V4LWVt YWNzLmMKaW5kZXggMWYwZmYzYmYwNy4uMTg1NjYwZDFmNSAxMDA2NDQKLS0tIGEvc3JjL3Jl Z2V4LWVtYWNzLmMKKysrIGIvc3JjL3JlZ2V4LWVtYWNzLmMKQEAgLTUwLDEzMyArNTAsNiBA QAogICAgaW50cy4gIEJ1dCBFbWFjcyBvbmx5IHJ1bnMgb24gMzIgYml0IHBsYXRmb3JtcyBh bnl3YXkuICAqLwogI2RlZmluZSBSRV9EVVBfTUFYICgweGZmZmYpCiAKLS8qIFRoZSBmb2xs b3dpbmcgYml0cyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJlZ2V4cCBzeW50YXggd2UK LSAgIHJlY29nbml6ZS4gIFRoZSBzZXQvbm90LXNldCBtZWFuaW5ncyB3aGVyZSBoaXN0b3Jp Y2FsbHkgY2hvc2VuIHNvCi0gICB0aGF0IEVtYWNzIHN5bnRheCBoYWQgdGhlIHZhbHVlIDAu Ci0gICBUaGUgYml0cyBhcmUgZ2l2ZW4gaW4gYWxwaGFiZXRpY2FsIG9yZGVyLCBhbmQKLSAg IHRoZSBkZWZpbml0aW9ucyBzaGlmdGVkIGJ5IG9uZSBmcm9tIHRoZSBwcmV2aW91cyBiaXQ7 IHRodXMsIHdoZW4gd2UKLSAgIGFkZCBvciByZW1vdmUgYSBiaXQsIG9ubHkgb25lIG90aGVy IGRlZmluaXRpb24gbmVlZCBjaGFuZ2UuICAqLwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIHJl Z19zeW50YXhfdDsKLQotLyogSWYgdGhpcyBiaXQgaXMgbm90IHNldCwgdGhlbiBcIGluc2lk ZSBhIGJyYWNrZXQgZXhwcmVzc2lvbiBpcyBsaXRlcmFsLgotICAgSWYgc2V0LCB0aGVuIHN1 Y2ggYSBcIHF1b3RlcyB0aGUgZm9sbG93aW5nIGNoYXJhY3Rlci4gICovCi0jZGVmaW5lIFJF X0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMgKCh1bnNpZ25lZCBsb25nIGludCkgMSkKLQot LyogSWYgdGhpcyBiaXQgaXMgbm90IHNldCwgdGhlbiArIGFuZCA/IGFyZSBvcGVyYXRvcnMs IGFuZCBcKyBhbmQgXD8gYXJlCi0gICAgIGxpdGVyYWxzLgotICAgSWYgc2V0LCB0aGVuIFwr IGFuZCBcPyBhcmUgb3BlcmF0b3JzIGFuZCArIGFuZCA/IGFyZSBsaXRlcmFscy4gICovCi0j ZGVmaW5lIFJFX0JLX1BMVVNfUU0gKFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMgPDwg MSkKLQotLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGNoYXJhY3RlciBjbGFzc2VzIGFy ZSBzdXBwb3J0ZWQuICBUaGV5IGFyZToKLSAgICAgWzphbHBoYTpdLCBbOnVwcGVyOl0sIFs6 bG93ZXI6XSwgIFs6ZGlnaXQ6XSwgWzphbG51bTpdLCBbOnhkaWdpdDpdLAotICAgICBbOnNw YWNlOl0sIFs6cHJpbnQ6XSwgWzpwdW5jdDpdLCBbOmdyYXBoOl0sIGFuZCBbOmNudHJsOl0u Ci0gICBJZiBub3Qgc2V0LCB0aGVuIGNoYXJhY3RlciBjbGFzc2VzIGFyZSBub3Qgc3VwcG9y dGVkLiAgKi8KLSNkZWZpbmUgUkVfQ0hBUl9DTEFTU0VTIChSRV9CS19QTFVTX1FNIDw8IDEp Ci0KLS8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBeIGFuZCAkIGFyZSBhbHdheXMgYW5j aG9ycyAob3V0c2lkZSBicmFja2V0Ci0gICAgIGV4cHJlc3Npb25zLCBvZiBjb3Vyc2UpLgot ICAgSWYgdGhpcyBiaXQgaXMgbm90IHNldCwgdGhlbiBpdCBkZXBlbmRzOgotICAgICAgICBe ICBpcyBhbiBhbmNob3IgaWYgaXQgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHJlZ3VsYXIK LSAgICAgICAgICAgZXhwcmVzc2lvbiBvciBhZnRlciBhbiBvcGVuLWdyb3VwIG9yIGFuIGFs dGVybmF0aW9uIG9wZXJhdG9yOwotICAgICAgICAkICBpcyBhbiBhbmNob3IgaWYgaXQgaXMg YXQgdGhlIGVuZCBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwgb3IKLSAgICAgICAgICAgYmVm b3JlIGEgY2xvc2UtZ3JvdXAgb3IgYW4gYWx0ZXJuYXRpb24gb3BlcmF0b3IuCi0KLSAgIFRo aXMgYml0IGNvdWxkIGJlIChyZSljb21iaW5lZCB3aXRoIFJFX0NPTlRFWFRfSU5ERVBfT1BT LCBiZWNhdXNlCi0gICBQT1NJWCBkcmFmdCAxMS4yIHNheXMgdGhhdCAqIGV0Yy4gaW4gbGVh ZGluZyBwb3NpdGlvbnMgaXMgdW5kZWZpbmVkLgotICAgV2UgYWxyZWFkeSBpbXBsZW1lbnRl ZCBhIHByZXZpb3VzIGRyYWZ0IHdoaWNoIG1hZGUgdGhvc2UgY29uc3RydWN0cwotICAgaW52 YWxpZCwgdGhvdWdoLCBzbyB3ZSBoYXZlbid0IGNoYW5nZWQgdGhlIGNvZGUgYmFjay4gICov Ci0jZGVmaW5lIFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUyAoUkVfQ0hBUl9DTEFTU0VTIDw8 IDEpCi0KLS8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBzcGVjaWFsIGNoYXJhY3RlcnMg YXJlIGFsd2F5cyBzcGVjaWFsCi0gICAgIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhleSBhcmUg aW4gdGhlIHBhdHRlcm4uCi0gICBJZiB0aGlzIGJpdCBpcyBub3Qgc2V0LCB0aGVuIHNwZWNp YWwgY2hhcmFjdGVycyBhcmUgc3BlY2lhbCBvbmx5IGluCi0gICAgIHNvbWUgY29udGV4dHM7 IG90aGVyd2lzZSB0aGV5IGFyZSBvcmRpbmFyeS4gIFNwZWNpZmljYWxseSwKLSAgICAgKiAr ID8gYW5kIGludGVydmFscyBhcmUgb25seSBzcGVjaWFsIHdoZW4gbm90IGFmdGVyIHRoZSBi ZWdpbm5pbmcsCi0gICAgIG9wZW4tZ3JvdXAsIG9yIGFsdGVybmF0aW9uIG9wZXJhdG9yLiAg Ki8KLSNkZWZpbmUgUkVfQ09OVEVYVF9JTkRFUF9PUFMgKFJFX0NPTlRFWFRfSU5ERVBfQU5D SE9SUyA8PCAxKQotCi0vKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gKiwgKywgPywgYW5k IHsgY2Fubm90IGJlIGZpcnN0IGluIGFuIHJlIG9yCi0gICAgIGltbWVkaWF0ZWx5IGFmdGVy IGFuIGFsdGVybmF0aW9uIG9yIGJlZ2luLWdyb3VwIG9wZXJhdG9yLiAgKi8KLSNkZWZpbmUg UkVfQ09OVEVYVF9JTlZBTElEX09QUyAoUkVfQ09OVEVYVF9JTkRFUF9PUFMgPDwgMSkKLQot LyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIC4gbWF0Y2hlcyBuZXdsaW5lLgotICAgSWYg bm90IHNldCwgdGhlbiBpdCBkb2Vzbid0LiAgKi8KLSNkZWZpbmUgUkVfRE9UX05FV0xJTkUg KFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgPDwgMSkKLQotLyogSWYgdGhpcyBiaXQgaXMgc2V0 LCB0aGVuIC4gZG9lc24ndCBtYXRjaCBOVUwuCi0gICBJZiBub3Qgc2V0LCB0aGVuIGl0IGRv ZXMuICAqLwotI2RlZmluZSBSRV9ET1RfTk9UX05VTEwgKFJFX0RPVF9ORVdMSU5FIDw8IDEp Ci0KLS8qIElmIHRoaXMgYml0IGlzIHNldCwgbm9ubWF0Y2hpbmcgbGlzdHMgW14uLi5dIGRv IG5vdCBtYXRjaCBuZXdsaW5lLgotICAgSWYgbm90IHNldCwgdGhleSBkby4gICovCi0jZGVm aW5lIFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSAoUkVfRE9UX05PVF9OVUxMIDw8IDEpCi0K LS8qIElmIHRoaXMgYml0IGlzIHNldCwgZWl0aGVyIFx7Li4uXH0gb3Igey4uLn0gZGVmaW5l cyBhbgotICAgICBpbnRlcnZhbCwgZGVwZW5kaW5nIG9uIFJFX05PX0JLX0JSQUNFUy4KLSAg IElmIG5vdCBzZXQsIFx7LCBcfSwgeywgYW5kIH0gYXJlIGxpdGVyYWxzLiAgKi8KLSNkZWZp bmUgUkVfSU5URVJWQUxTIChSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUgPDwgMSkKLQotLyog SWYgdGhpcyBiaXQgaXMgc2V0LCArLCA/IGFuZCB8IGFyZW4ndCByZWNvZ25pemVkIGFzIG9w ZXJhdG9ycy4KLSAgIElmIG5vdCBzZXQsIHRoZXkgYXJlLiAgKi8KLSNkZWZpbmUgUkVfTElN SVRFRF9PUFMgKFJFX0lOVEVSVkFMUyA8PCAxKQotCi0vKiBJZiB0aGlzIGJpdCBpcyBzZXQs IG5ld2xpbmUgaXMgYW4gYWx0ZXJuYXRpb24gb3BlcmF0b3IuCi0gICBJZiBub3Qgc2V0LCBu ZXdsaW5lIGlzIGxpdGVyYWwuICAqLwotI2RlZmluZSBSRV9ORVdMSU5FX0FMVCAoUkVfTElN SVRFRF9PUFMgPDwgMSkKLQotLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGB7Li4ufScg ZGVmaW5lcyBhbiBpbnRlcnZhbCwgYW5kIFx7IGFuZCBcfQotICAgICBhcmUgbGl0ZXJhbHMu Ci0gIElmIG5vdCBzZXQsIHRoZW4gYFx7Li4uXH0nIGRlZmluZXMgYW4gaW50ZXJ2YWwuICAq LwotI2RlZmluZSBSRV9OT19CS19CUkFDRVMgKFJFX05FV0xJTkVfQUxUIDw8IDEpCi0KLS8q IElmIHRoaXMgYml0IGlzIHNldCwgKC4uLikgZGVmaW5lcyBhIGdyb3VwLCBhbmQgXCggYW5k IFwpIGFyZSBsaXRlcmFscy4KLSAgIElmIG5vdCBzZXQsIFwoLi4uXCkgZGVmaW5lcyBhIGdy b3VwLCBhbmQgKCBhbmQgKSBhcmUgbGl0ZXJhbHMuICAqLwotI2RlZmluZSBSRV9OT19CS19Q QVJFTlMgKFJFX05PX0JLX0JSQUNFUyA8PCAxKQotCi0vKiBJZiB0aGlzIGJpdCBpcyBzZXQs IHRoZW4gXDxkaWdpdD4gbWF0Y2hlcyA8ZGlnaXQ+LgotICAgSWYgbm90IHNldCwgdGhlbiBc PGRpZ2l0PiBpcyBhIGJhY2stcmVmZXJlbmNlLiAgKi8KLSNkZWZpbmUgUkVfTk9fQktfUkVG UyAoUkVfTk9fQktfUEFSRU5TIDw8IDEpCi0KLS8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhl biB8IGlzIGFuIGFsdGVybmF0aW9uIG9wZXJhdG9yLCBhbmQgXHwgaXMgbGl0ZXJhbC4KLSAg IElmIG5vdCBzZXQsIHRoZW4gXHwgaXMgYW4gYWx0ZXJuYXRpb24gb3BlcmF0b3IsIGFuZCB8 IGlzIGxpdGVyYWwuICAqLwotI2RlZmluZSBSRV9OT19CS19WQkFSIChSRV9OT19CS19SRUZT IDw8IDEpCi0KLS8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBhbiBlbmRpbmcgcmFuZ2Ug cG9pbnQgY29sbGF0aW5nIGhpZ2hlcgotICAgICB0aGFuIHRoZSBzdGFydGluZyByYW5nZSBw b2ludCwgYXMgaW4gW3otYV0sIGlzIGludmFsaWQuCi0gICBJZiBub3Qgc2V0LCB0aGVuIHdo ZW4gZW5kaW5nIHJhbmdlIHBvaW50IGNvbGxhdGVzIGhpZ2hlciB0aGFuIHRoZQotICAgICBz dGFydGluZyByYW5nZSBwb2ludCwgdGhlIHJhbmdlIGlzIGlnbm9yZWQuICAqLwotI2RlZmlu ZSBSRV9OT19FTVBUWV9SQU5HRVMgKFJFX05PX0JLX1ZCQVIgPDwgMSkKLQotLyogSWYgdGhp cyBiaXQgaXMgc2V0LCB0aGVuIGFuIHVubWF0Y2hlZCApIGlzIG9yZGluYXJ5LgotICAgSWYg bm90IHNldCwgdGhlbiBhbiB1bm1hdGNoZWQgKSBpcyBpbnZhbGlkLiAgKi8KLSNkZWZpbmUg UkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVOX09SRCAoUkVfTk9fRU1QVFlfUkFOR0VTIDw8IDEp Ci0KLS8qIElmIHRoaXMgYml0IGlzIHNldCwgc3VjY2VlZCBhcyBzb29uIGFzIHdlIG1hdGNo IHRoZSB3aG9sZSBwYXR0ZXJuLAotICAgd2l0aG91dCBmdXJ0aGVyIGJhY2t0cmFja2luZy4g ICovCi0jZGVmaW5lIFJFX05PX1BPU0lYX0JBQ0tUUkFDS0lORyAoUkVfVU5NQVRDSEVEX1JJ R0hUX1BBUkVOX09SRCA8PCAxKQotCi0vKiBJZiB0aGlzIGJpdCBpcyBzZXQsIGRvIG5vdCBw cm9jZXNzIHRoZSBHTlUgcmVnZXggb3BlcmF0b3JzLgotICAgSWYgbm90IHNldCwgdGhlbiB0 aGUgR05VIHJlZ2V4IG9wZXJhdG9ycyBhcmUgcmVjb2duaXplZC4gKi8KLSNkZWZpbmUgUkVf Tk9fR05VX09QUyAoUkVfTk9fUE9TSVhfQkFDS1RSQUNLSU5HIDw8IDEpCi0KLS8qIElmIHRo aXMgYml0IGlzIHNldCwgdGhlbiAqPywgKz8gYW5kID8/IG1hdGNoIG5vbiBncmVlZGlseS4g Ki8KLSNkZWZpbmUgUkVfRlJVR0FMIChSRV9OT19HTlVfT1BTIDw8IDEpCi0KLS8qIElmIHRo aXMgYml0IGlzIHNldCwgdGhlbiAoPzouLi4pIGlzIHRyZWF0ZWQgYXMgYSBzaHkgZ3JvdXAu ICAqLwotI2RlZmluZSBSRV9TSFlfR1JPVVBTIChSRV9GUlVHQUwgPDwgMSkKLQotLyogSWYg dGhpcyBiaXQgaXMgc2V0LCBeIGFuZCAkIG9ubHkgbWF0Y2ggYXQgYmVnL2VuZCBvZiBidWZm ZXIuICAqLwotI2RlZmluZSBSRV9OT19ORVdMSU5FX0FOQ0hPUiAoUkVfU0hZX0dST1VQUyA8 PCAxKQotCi0vKiBUaGlzIGdsb2JhbCB2YXJpYWJsZSBkZWZpbmVzIHRoZSBwYXJ0aWN1bGFy IHJlZ2V4cCBzeW50YXggdG8gdXNlIChmb3IKLSAgIHNvbWUgaW50ZXJmYWNlcykuICBXaGVu IGEgcmVnZXhwIGlzIGNvbXBpbGVkLCB0aGUgc3ludGF4IHVzZWQgaXMKLSAgIHN0b3JlZCBp biB0aGUgcGF0dGVybiBidWZmZXIsIHNvIGNoYW5naW5nIHRoaXMgZG9lcyBub3QgYWZmZWN0 Ci0gICBhbHJlYWR5LWNvbXBpbGVkIHJlZ2V4cHMuICAqLwotLyogZXh0ZXJuIHJlZ19zeW50 YXhfdCByZV9zeW50YXhfb3B0aW9uczsgKi8KLS8qIERlZmluZSBjb21iaW5hdGlvbnMgb2Yg dGhlIGFib3ZlIGJpdHMgZm9yIHRoZSBzdGFuZGFyZCBwb3NzaWJpbGl0aWVzLiAgKi8KLSNk ZWZpbmUgUkVfU1lOVEFYX0VNQUNTCQkJCQkJCVwKLSAgKFJFX0NIQVJfQ0xBU1NFUyB8IFJF X0lOVEVSVkFMUyB8IFJFX1NIWV9HUk9VUFMgfCBSRV9GUlVHQUwpCi0KIC8qIE1ha2Ugc3lu dGF4IHRhYmxlIGxvb2t1cCBncmFudCBkYXRhIGluIGdsX3N0YXRlLiAgKi8KICNkZWZpbmUg U1lOVEFYKGMpIHN5bnRheF9wcm9wZXJ0eSAoYywgMSkKIApAQCAtOTAwLDEwICs3NzMsOCBA QCBzdGF0aWMgdm9pZCBpbnNlcnRfb3AxIChyZV9vcGNvZGVfdCBvcCwgdW5zaWduZWQgY2hh ciAqbG9jLAogCQkJaW50IGFyZywgdW5zaWduZWQgY2hhciAqZW5kKTsKIHN0YXRpYyB2b2lk IGluc2VydF9vcDIgKHJlX29wY29kZV90IG9wLCB1bnNpZ25lZCBjaGFyICpsb2MsCiAJCQlp bnQgYXJnMSwgaW50IGFyZzIsIHVuc2lnbmVkIGNoYXIgKmVuZCk7Ci1zdGF0aWMgYm9vbCBh dF9iZWdsaW5lX2xvY19wIChyZV9jaGFyICpwYXR0ZXJuLCByZV9jaGFyICpwLAotCQkJICAg ICAgcmVnX3N5bnRheF90IHN5bnRheCk7Ci1zdGF0aWMgYm9vbCBhdF9lbmRsaW5lX2xvY19w IChyZV9jaGFyICpwLCByZV9jaGFyICpwZW5kLAotCQkJICAgICAgcmVnX3N5bnRheF90IHN5 bnRheCk7CitzdGF0aWMgYm9vbCBhdF9iZWdsaW5lX2xvY19wIChyZV9jaGFyICpwYXR0ZXJu LCByZV9jaGFyICpwKTsKK3N0YXRpYyBib29sIGF0X2VuZGxpbmVfbG9jX3AgKHJlX2NoYXIg KnAsIHJlX2NoYXIgKnBlbmQpOwogc3RhdGljIHJlX2NoYXIgKnNraXBfb25lX2NoYXIgKHJl X2NoYXIgKnApOwogc3RhdGljIGludCBhbmFseXplX2ZpcnN0IChyZV9jaGFyICpwLCByZV9j aGFyICpwZW5kLAogCQkJICBjaGFyICpmYXN0bWFwLCBjb25zdCBpbnQgbXVsdGlieXRlKTsK QEAgLTkyMCwxNSArNzkxLDcgQEAgc3RhdGljIGludCBhbmFseXplX2ZpcnN0IChyZV9jaGFy ICpwLCByZV9jaGFyICpwZW5kLAogCiAKICNkZWZpbmUgUkVfVFJBTlNMQVRFKFRCTCwgQykg Y2hhcl90YWJsZV90cmFuc2xhdGUgKFRCTCwgQykKLSNkZWZpbmUgUkVfVFJBTlNMQVRFX1Ao VEJMKSAoIUVRIChUQkwsIG1ha2VfbnVtYmVyICgwKSkpCi0KLS8qIElmIGB0cmFuc2xhdGUn IGlzIG5vbi16ZXJvLCByZXR1cm4gdHJhbnNsYXRlW0RdLCBlbHNlIGp1c3QgRC4gIFdlCi0g ICBjYXN0IHRoZSBzdWJzY3JpcHQgdG8gdHJhbnNsYXRlIGJlY2F1c2Ugc29tZSBkYXRhIGlz IGRlY2xhcmVkIGFzCi0gICBgY2hhciAqJywgdG8gYXZvaWQgd2FybmluZ3Mgd2hlbiBhIHN0 cmluZyBjb25zdGFudCBpcyBwYXNzZWQuICBCdXQKLSAgIHdoZW4gd2UgdXNlIGEgY2hhcmFj dGVyIGFzIGEgc3Vic2NyaXB0IHdlIG11c3QgbWFrZSBpdCB1bnNpZ25lZC4gICovCi0jZGVm aW5lIFRSQU5TTEFURShkKSBcCi0gIChSRV9UUkFOU0xBVEVfUCAodHJhbnNsYXRlKSA/IFJF X1RSQU5TTEFURSAodHJhbnNsYXRlLCAoZCkpIDogKGQpKQotCisjZGVmaW5lIFRSQU5TTEFU RShkKSAoIU5JTFAgKHRyYW5zbGF0ZSkgPyBSRV9UUkFOU0xBVEUgKHRyYW5zbGF0ZSwgZCkg OiAoZCkpCiAKIC8qIE1hY3JvcyBmb3Igb3V0cHV0dGluZyB0aGUgY29tcGlsZWQgcGF0dGVy biBpbnRvIGBidWZmZXInLiAgKi8KIApAQCAtMTQ0OCw4ICsxMzExLDYgQEAgcmVnZXhfY29t cGlsZSAocmVfY2hhciAqcGF0dGVybiwgc2l6ZV90IHNpemUsCiAJICAgICAgIGNvbnN0IGNo YXIgKndoaXRlc3BhY2VfcmVnZXhwLAogCSAgICAgICBzdHJ1Y3QgcmVfcGF0dGVybl9idWZm ZXIgKmJ1ZnApCiB7Ci0gIHJlZ19zeW50YXhfdCBzeW50YXggPSBSRV9TWU5UQVhfRU1BQ1M7 Ci0KICAgLyogV2UgZmV0Y2ggY2hhcmFjdGVycyBmcm9tIFBBVFRFUk4gaGVyZS4gICovCiAg IGludCBjLCBjMTsKIApAQCAtMTU5OSw1MSArMTQ2MCwyNCBAQCByZWdleF9jb21waWxlIChy ZV9jaGFyICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSwKIAkgIH0KIAogCWNhc2UgJ14nOgotCSAg ewotCSAgICBpZiAoICAgLyogSWYgYXQgc3RhcnQgb2YgcGF0dGVybiwgaXQncyBhbiBvcGVy YXRvci4gICovCi0JCSAgIHAgPT0gcGF0dGVybiArIDEKLQkJICAgLyogSWYgY29udGV4dCBp bmRlcGVuZGVudCwgaXQncyBhbiBvcGVyYXRvci4gICovCi0JCXx8IHN5bnRheCAmIFJFX0NP TlRFWFRfSU5ERVBfQU5DSE9SUwotCQkgICAvKiBPdGhlcndpc2UsIGRlcGVuZHMgb24gd2hh dCdzIGNvbWUgYmVmb3JlLiAgKi8KLQkJfHwgYXRfYmVnbGluZV9sb2NfcCAocGF0dGVybiwg cCwgc3ludGF4KSkKLQkgICAgICBCVUZfUFVTSCAoKHN5bnRheCAmIFJFX05PX05FV0xJTkVf QU5DSE9SKSA/IGJlZ2J1ZiA6IGJlZ2xpbmUpOwotCSAgICBlbHNlCi0JICAgICAgZ290byBu b3JtYWxfY2hhcjsKLQkgIH0KKwkgIGlmICghIChwID09IHBhdHRlcm4gKyAxIHx8IGF0X2Jl Z2xpbmVfbG9jX3AgKHBhdHRlcm4sIHApKSkKKwkgICAgZ290byBub3JtYWxfY2hhcjsKKwkg IEJVRl9QVVNIIChiZWdsaW5lKTsKIAkgIGJyZWFrOwogCi0KIAljYXNlICckJzoKLQkgIHsK LQkgICAgaWYgKCAgIC8qIElmIGF0IGVuZCBvZiBwYXR0ZXJuLCBpdCdzIGFuIG9wZXJhdG9y LiAgKi8KLQkJICAgcCA9PSBwZW5kCi0JCSAgIC8qIElmIGNvbnRleHQgaW5kZXBlbmRlbnQs IGl0J3MgYW4gb3BlcmF0b3IuICAqLwotCQl8fCBzeW50YXggJiBSRV9DT05URVhUX0lOREVQ X0FOQ0hPUlMKLQkJICAgLyogT3RoZXJ3aXNlLCBkZXBlbmRzIG9uIHdoYXQncyBuZXh0LiAg Ki8KLQkJfHwgYXRfZW5kbGluZV9sb2NfcCAocCwgcGVuZCwgc3ludGF4KSkKLQkgICAgICAg QlVGX1BVU0ggKChzeW50YXggJiBSRV9OT19ORVdMSU5FX0FOQ0hPUikgPyBlbmRidWYgOiBl bmRsaW5lKTsKLQkgICAgIGVsc2UKLQkgICAgICAgZ290byBub3JtYWxfY2hhcjsKLQkgICB9 Ci0JICAgYnJlYWs7CisJICBpZiAoISAocCA9PSBwZW5kIHx8IGF0X2VuZGxpbmVfbG9jX3Ag KHAsIHBlbmQpKSkKKwkgICAgZ290byBub3JtYWxfY2hhcjsKKwkgIEJVRl9QVVNIIChlbmRs aW5lKTsKKwkgIGJyZWFrOwogCiAKIAljYXNlICcrJzoKIAljYXNlICc/JzoKLQkgIGlmICgo c3ludGF4ICYgUkVfQktfUExVU19RTSkKLQkgICAgICB8fCAoc3ludGF4ICYgUkVfTElNSVRF RF9PUFMpKQotCSAgICBnb3RvIG5vcm1hbF9jaGFyOwotCSAgRkFMTFRIUk9VR0g7CiAJY2Fz ZSAnKic6Ci0JaGFuZGxlX3BsdXM6CiAJICAvKiBJZiB0aGVyZSBpcyBubyBwcmV2aW91cyBw YXR0ZXJuLi4uICAqLwogCSAgaWYgKCFsYXN0c3RhcnQpCi0JICAgIHsKLQkgICAgICBpZiAo c3ludGF4ICYgUkVfQ09OVEVYVF9JTlZBTElEX09QUykKLQkJRlJFRV9TVEFDS19SRVRVUk4g KFJFR19CQURSUFQpOwotCSAgICAgIGVsc2UgaWYgKCEoc3ludGF4ICYgUkVfQ09OVEVYVF9J TkRFUF9PUFMpKQotCQlnb3RvIG5vcm1hbF9jaGFyOwotCSAgICB9CisJICAgIGdvdG8gbm9y bWFsX2NoYXI7CiAKIAkgIHsKIAkgICAgLyogMSBtZWFucyB6ZXJvIChtYW55KSBtYXRjaGVz IGlzIGFsbG93ZWQuICAqLwpAQCAtMTY1Nyw4ICsxNDkxLDcgQEAgcmVnZXhfY29tcGlsZSAo cmVfY2hhciAqcGF0dGVybiwgc2l6ZV90IHNpemUsCiAKIAkgICAgZm9yICg7OykKIAkgICAg ICB7Ci0JCWlmICgoc3ludGF4ICYgUkVfRlJVR0FMKQotCQkgICAgJiYgYyA9PSAnPycgJiYg KHplcm9fdGltZXNfb2sgfHwgbWFueV90aW1lc19vaykpCisJCWlmIChjID09ICc/JyAmJiAo emVyb190aW1lc19vayB8fCBtYW55X3RpbWVzX29rKSkKIAkJICBncmVlZHkgPSBmYWxzZTsK IAkJZWxzZQogCQkgIHsKQEAgLTE2NjYsMjUgKzE0OTksMTAgQEAgcmVnZXhfY29tcGlsZSAo cmVfY2hhciAqcGF0dGVybiwgc2l6ZV90IHNpemUsCiAJCSAgICBtYW55X3RpbWVzX29rIHw9 IGMgIT0gJz8nOwogCQkgIH0KIAotCQlpZiAocCA9PSBwZW5kKQotCQkgIGJyZWFrOwotCQll bHNlIGlmICgqcCA9PSAnKicKLQkJCSB8fCAoIShzeW50YXggJiBSRV9CS19QTFVTX1FNKQot CQkJICAgICAmJiAoKnAgPT0gJysnIHx8ICpwID09ICc/JykpKQotCQkgIDsKLQkJZWxzZSBp ZiAoc3ludGF4ICYgUkVfQktfUExVU19RTQkgJiYgKnAgPT0gJ1xcJykKLQkJICB7Ci0JCSAg ICBpZiAocCsxID09IHBlbmQpCi0JCSAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUVT Q0FQRSk7Ci0JCSAgICBpZiAocFsxXSA9PSAnKycgfHwgcFsxXSA9PSAnPycpCi0JCSAgICAg IFBBVEZFVENIIChjKTsgLyogR29iYmxlIHVwIHRoZSBiYWNrc2xhc2guICAqLwotCQkgICAg ZWxzZQotCQkgICAgICBicmVhazsKLQkJICB9Ci0JCWVsc2UKKwkJaWYgKCEgKHAgPCBwZW5k ICYmICgqcCA9PSAnKicgfHwgKnAgPT0gJysnIHx8ICpwID09ICc/JykpKQogCQkgIGJyZWFr OwogCQkvKiBJZiB3ZSBnZXQgaGVyZSwgd2UgZm91bmQgYW5vdGhlciByZXBlYXQgY2hhcmFj dGVyLiAgKi8KLQkJUEFURkVUQ0ggKGMpOworCQljID0gKnArKzsKIAkgICAgICAgfQogCiAJ ICAgIC8qIFN0YXIsIGV0Yy4gYXBwbGllZCB0byBhbiBlbXB0eSBwYXR0ZXJuIGlzIGVxdWl2 YWxlbnQKQEAgLTE4MTYsMjQgKzE2MzQsMTggQEAgcmVnZXhfY29tcGlsZSAocmVfY2hhciAq cGF0dGVybiwgc2l6ZV90IHNpemUsCiAJICAgIC8qIENsZWFyIHRoZSB3aG9sZSBtYXAuICAq LwogCSAgICBtZW1zZXQgKGIsIDAsICgxIDw8IEJZVEVXSURUSCkgLyBCWVRFV0lEVEgpOwog Ci0JICAgIC8qIGNoYXJzZXRfbm90IG1hdGNoZXMgbmV3bGluZSBhY2NvcmRpbmcgdG8gYSBz eW50YXggYml0LiAgKi8KLQkgICAgaWYgKChyZV9vcGNvZGVfdCkgYlstMl0gPT0gY2hhcnNl dF9ub3QKLQkJJiYgKHN5bnRheCAmIFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSkpCi0JICAg ICAgU0VUX0xJU1RfQklUICgnXG4nKTsKLQogCSAgICAvKiBSZWFkIGluIGNoYXJhY3RlcnMg YW5kIHJhbmdlcywgc2V0dGluZyBtYXAgYml0cy4gICovCiAJICAgIGZvciAoOzspCiAJICAg ICAgewogCQljb25zdCB1bnNpZ25lZCBjaGFyICpwMiA9IHA7Ci0JCXJlX3djdHlwZV90IGNj OwogCQlpbnQgY2g7CiAKIAkJaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJF R19FQlJBQ0spOwogCiAJCS8qIFNlZSBpZiB3ZSdyZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEg cG9zc2libGUgY2hhcmFjdGVyCiAJCSAgIGNsYXNzLiAgKi8KLQkJaWYgKHN5bnRheCAmIFJF X0NIQVJfQ0xBU1NFUyAmJgotCQkgICAgKGNjID0gcmVfd2N0eXBlX3BhcnNlKCZwLCBwZW5k IC0gcCkpICE9IC0xKQorCQlyZV93Y3R5cGVfdCBjYyA9IHJlX3djdHlwZV9wYXJzZSAoJnAs IHBlbmQgLSBwKTsKKwkJaWYgKGNjICE9IC0xKQogCQkgIHsKIAkJICAgIGlmIChjYyA9PSAw KQogCQkgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDVFlQRSk7CkBAIC0xODg1LDIx ICsxNjk3LDExIEBAIHJlZ2V4X2NvbXBpbGUgKHJlX2NoYXIgKnBhdHRlcm4sIHNpemVfdCBz aXplLAogCQkgICAobGV0ICgoY2FzZS1mb2xkLXNlYXJjaCB0KSkgKHN0cmluZy1tYXRjaCAi W0EtX10iICJBIikpICAqLwogCQlQQVRGRVRDSCAoYyk7CiAKLQkJLyogXCBtaWdodCBlc2Nh cGUgY2hhcmFjdGVycyBpbnNpZGUgWy4uLl0gYW5kIFteLi4uXS4gICovCi0JCWlmICgoc3lu dGF4ICYgUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUykgJiYgYyA9PSAnXFwnKQotCQkg IHsKLQkJICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUVTQ0FQ RSk7Ci0KLQkJICAgIFBBVEZFVENIIChjKTsKLQkJICB9Ci0JCWVsc2UKLQkJICB7Ci0JCSAg ICAvKiBDb3VsZCBiZSB0aGUgZW5kIG9mIHRoZSBicmFja2V0IGV4cHJlc3Npb24uICBJZiBp dCdzCi0JCSAgICAgICBub3QgKGkuZS4sIHdoZW4gdGhlIGJyYWNrZXQgZXhwcmVzc2lvbiBp cyBgW10nIHNvCi0JCSAgICAgICBmYXIpLCB0aGUgJ10nIGNoYXJhY3RlciBiaXQgZ2V0cyBz ZXQgd2F5IGJlbG93LiAgKi8KLQkJICAgIGlmIChjID09ICddJyAmJiBwMiAhPSBwMSkKLQkJ ICAgICAgYnJlYWs7Ci0JCSAgfQorCQkvKiBDb3VsZCBiZSB0aGUgZW5kIG9mIHRoZSBicmFj a2V0IGV4cHJlc3Npb24uICBJZiBpdCdzCisJCSAgIG5vdCAoaS5lLiwgd2hlbiB0aGUgYnJh Y2tldCBleHByZXNzaW9uIGlzIGBbXScgc28KKwkJICAgZmFyKSwgdGhlICddJyBjaGFyYWN0 ZXIgYml0IGdldHMgc2V0IHdheSBiZWxvdy4gICovCisJCWlmIChjID09ICddJyAmJiBwMiAh PSBwMSkKKwkJICBicmVhazsKIAogCQlpZiAocCA8IHBlbmQgJiYgcFswXSA9PSAnLScgJiYg cFsxXSAhPSAnXScpCiAJCSAgewpAQCAtMTkyMCwxMyArMTcyMiw3IEBAIHJlZ2V4X2NvbXBp bGUgKHJlX2NoYXIgKnBhdHRlcm4sIHNpemVfdCBzaXplLAogCQkgIC8qIFJhbmdlIGZyb20g QyB0byBDLiAqLwogCQkgIGMxID0gYzsKIAotCQlpZiAoYyA+IGMxKQotCQkgIHsKLQkJICAg IGlmIChzeW50YXggJiBSRV9OT19FTVBUWV9SQU5HRVMpCi0JCSAgICAgIEZSRUVfU1RBQ0tf UkVUVVJOIChSRUdfRVJBTkdFWCk7Ci0JCSAgICAvKiBFbHNlLCByZXBlYXQgdGhlIGxvb3Au ICAqLwotCQkgIH0KLQkJZWxzZQorCQlpZiAoYyA8PSBjMSkKIAkJICB7CiAJCSAgICBpZiAo YyA8IDEyOCkKIAkJICAgICAgewpAQCAtMTkzNiwyNCArMTczMiwxNyBAQCByZWdleF9jb21w aWxlIChyZV9jaGFyICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSwKIAkJCWlmIChDSEFSX0JZVEU4 X1AgKGMxKSkKIAkJCSAgYyA9IEJZVEU4X1RPX0NIQVIgKDEyOCk7CiAJCSAgICAgIH0KLQkJ ICAgIGlmIChjIDw9IGMxKQorCQkgICAgaWYgKENIQVJfQllURThfUCAoYykpCiAJCSAgICAg IHsKLQkJCWlmIChDSEFSX0JZVEU4X1AgKGMpKQotCQkJICB7Ci0JCQkgICAgYyA9IENIQVJf VE9fQllURTggKGMpOwotCQkJICAgIGMxID0gQ0hBUl9UT19CWVRFOCAoYzEpOwotCQkJICAg IGZvciAoOyBjIDw9IGMxOyBjKyspCi0JCQkgICAgICBTRVRfTElTVF9CSVQgKGMpOwotCQkJ ICB9Ci0JCQllbHNlIGlmIChtdWx0aWJ5dGUpCi0JCQkgIHsKLQkJCSAgICBTRVRVUF9NVUxU SUJZVEVfUkFOR0UgKHJhbmdlX3RhYmxlX3dvcmssIGMsIGMxKTsKLQkJCSAgfQotCQkJZWxz ZQotCQkJICB7Ci0JCQkgICAgU0VUVVBfVU5JQllURV9SQU5HRSAocmFuZ2VfdGFibGVfd29y aywgYywgYzEpOwotCQkJICB9CisJCQljID0gQ0hBUl9UT19CWVRFOCAoYyk7CisJCQljMSA9 IENIQVJfVE9fQllURTggKGMxKTsKKwkJCWZvciAoOyBjIDw9IGMxOyBjKyspCisJCQkgIFNF VF9MSVNUX0JJVCAoYyk7CiAJCSAgICAgIH0KKwkJICAgIGVsc2UgaWYgKG11bHRpYnl0ZSkK KwkJICAgICAgU0VUVVBfTVVMVElCWVRFX1JBTkdFIChyYW5nZV90YWJsZV93b3JrLCBjLCBj MSk7CisJCSAgICBlbHNlCisJCSAgICAgIFNFVFVQX1VOSUJZVEVfUkFOR0UgKHJhbmdlX3Rh YmxlX3dvcmssIGMsIGMxKTsKIAkJICB9CiAJICAgICAgfQogCkBAIC0xOTkxLDQxICsxNzgw LDYgQEAgcmVnZXhfY29tcGlsZSAocmVfY2hhciAqcGF0dGVybiwgc2l6ZV90IHNpemUsCiAJ ICBicmVhazsKIAogCi0JY2FzZSAnKCc6Ci0JICBpZiAoc3ludGF4ICYgUkVfTk9fQktfUEFS RU5TKQotCSAgICBnb3RvIGhhbmRsZV9vcGVuOwotCSAgZWxzZQotCSAgICBnb3RvIG5vcm1h bF9jaGFyOwotCi0KLQljYXNlICcpJzoKLQkgIGlmIChzeW50YXggJiBSRV9OT19CS19QQVJF TlMpCi0JICAgIGdvdG8gaGFuZGxlX2Nsb3NlOwotCSAgZWxzZQotCSAgICBnb3RvIG5vcm1h bF9jaGFyOwotCi0KLQljYXNlICdcbic6Ci0JICBpZiAoc3ludGF4ICYgUkVfTkVXTElORV9B TFQpCi0JICAgIGdvdG8gaGFuZGxlX2FsdDsKLQkgIGVsc2UKLQkgICAgZ290byBub3JtYWxf Y2hhcjsKLQotCi0JY2FzZSAnfCc6Ci0JICBpZiAoc3ludGF4ICYgUkVfTk9fQktfVkJBUikK LQkgICAgZ290byBoYW5kbGVfYWx0OwotCSAgZWxzZQotCSAgICBnb3RvIG5vcm1hbF9jaGFy OwotCi0KLQljYXNlICd7JzoKLQkgICBpZiAoc3ludGF4ICYgUkVfSU5URVJWQUxTICYmIHN5 bnRheCAmIFJFX05PX0JLX0JSQUNFUykKLQkgICAgIGdvdG8gaGFuZGxlX2ludGVydmFsOwot CSAgIGVsc2UKLQkgICAgIGdvdG8gbm9ybWFsX2NoYXI7Ci0KLQogCWNhc2UgJ1xcJzoKIAkg IGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUVTQ0FQRSk7CiAKQEAg LTIwMzcsMTcgKzE3OTEsMTMgQEAgcmVnZXhfY29tcGlsZSAocmVfY2hhciAqcGF0dGVybiwg c2l6ZV90IHNpemUsCiAJICBzd2l0Y2ggKGMpCiAJICAgIHsKIAkgICAgY2FzZSAnKCc6Ci0J ICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0JLX1BBUkVOUykKLQkJZ290byBub3JtYWxfYmFj a3NsYXNoOwotCi0JICAgIGhhbmRsZV9vcGVuOgogCSAgICAgIHsKIAkJaW50IHNoeSA9IDA7 CiAJCXJlZ251bV90IHJlZ251bSA9IDA7CiAJCWlmIChwKzEgPCBwZW5kKQogCQkgIHsKIAkJ ICAgIC8qIExvb2sgZm9yIGEgc3BlY2lhbCAoPy4uLikgY29uc3RydWN0ICovCi0JCSAgICBp ZiAoKHN5bnRheCAmIFJFX1NIWV9HUk9VUFMpICYmICpwID09ICc/JykKKwkJICAgIGlmICgq cCA9PSAnPycpCiAJCSAgICAgIHsKIAkJCVBBVEZFVENIIChjKTsgLyogR29iYmxlIHVwIHRo ZSAnPycuICAqLwogCQkJd2hpbGUgKCFzaHkpCkBAIC0yMTI4LDI3ICsxODc4LDE0IEBAIHJl Z2V4X2NvbXBpbGUgKHJlX2NoYXIgKnBhdHRlcm4sIHNpemVfdCBzaXplLAogCSAgICAgIH0K IAogCSAgICBjYXNlICcpJzoKLQkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5T KSBnb3RvIG5vcm1hbF9iYWNrc2xhc2g7Ci0KIAkgICAgICBpZiAoQ09NUElMRV9TVEFDS19F TVBUWSkKLQkJewotCQkgIGlmIChzeW50YXggJiBSRV9VTk1BVENIRURfUklHSFRfUEFSRU5f T1JEKQotCQkgICAgZ290byBub3JtYWxfYmFja3NsYXNoOwotCQkgIGVsc2UKLQkJICAgIEZS RUVfU1RBQ0tfUkVUVVJOIChSRUdfRVJQQVJFTik7Ci0JCX0KKwkJRlJFRV9TVEFDS19SRVRV Uk4gKFJFR19FUlBBUkVOKTsKIAotCSAgICBoYW5kbGVfY2xvc2U6CiAJICAgICAgRklYVVBf QUxUX0pVTVAgKCk7CiAKIAkgICAgICAvKiBTZWUgc2ltaWxhciBjb2RlIGZvciBiYWNrc2xh c2hlZCBsZWZ0IHBhcmVuIGFib3ZlLiAgKi8KIAkgICAgICBpZiAoQ09NUElMRV9TVEFDS19F TVBUWSkKLQkJewotCQkgIGlmIChzeW50YXggJiBSRV9VTk1BVENIRURfUklHSFRfUEFSRU5f T1JEKQotCQkgICAgZ290byBub3JtYWxfY2hhcjsKLQkJICBlbHNlCi0JCSAgICBGUkVFX1NU QUNLX1JFVFVSTiAoUkVHX0VSUEFSRU4pOwotCQl9CisJCUZSRUVfU1RBQ0tfUkVUVVJOIChS RUdfRVJQQVJFTik7CiAKIAkgICAgICAvKiBTaW5jZSB3ZSBqdXN0IGNoZWNrZWQgZm9yIGFu IGVtcHR5IHN0YWNrIGFib3ZlLCB0aGlzCiAJCSBgYGNhbid0IGhhcHBlbicnLiAgKi8KQEAg LTIxODEsMTIgKzE5MTgsNiBAQCByZWdleF9jb21waWxlIChyZV9jaGFyICpwYXR0ZXJuLCBz aXplX3Qgc2l6ZSwKIAogCiAJICAgIGNhc2UgJ3wnOgkJCQkJLyogYFx8Jy4gICovCi0JICAg ICAgaWYgKHN5bnRheCAmIFJFX0xJTUlURURfT1BTIHx8IHN5bnRheCAmIFJFX05PX0JLX1ZC QVIpCi0JCWdvdG8gbm9ybWFsX2JhY2tzbGFzaDsKLQkgICAgaGFuZGxlX2FsdDoKLQkgICAg ICBpZiAoc3ludGF4ICYgUkVfTElNSVRFRF9PUFMpCi0JCWdvdG8gbm9ybWFsX2NoYXI7Ci0K IAkgICAgICAvKiBJbnNlcnQgYmVmb3JlIHRoZSBwcmV2aW91cyBhbHRlcm5hdGl2ZSBhIGp1 bXAgd2hpY2gKIAkJIGp1bXBzIHRvIHRoaXMgYWx0ZXJuYXRpdmUgaWYgdGhlIGZvcm1lciBm YWlscy4gICovCiAJICAgICAgR0VUX0JVRkZFUl9TUEFDRSAoMyk7CkBAIC0yMjI1LDE3ICsx OTU2LDcgQEAgcmVnZXhfY29tcGlsZSAocmVfY2hhciAqcGF0dGVybiwgc2l6ZV90IHNpemUs CiAKIAogCSAgICBjYXNlICd7JzoKLQkgICAgICAvKiBJZiBceyBpcyBhIGxpdGVyYWwuICAq LwotCSAgICAgIGlmICghKHN5bnRheCAmIFJFX0lOVEVSVkFMUykKLQkJICAgICAvKiBJZiB3 ZSdyZSBhdCBgXHsnIGFuZCBpdCdzIG5vdCB0aGUgb3Blbi1pbnRlcnZhbAotCQkJb3BlcmF0 b3IuICAqLwotCQkgIHx8IChzeW50YXggJiBSRV9OT19CS19CUkFDRVMpKQotCQlnb3RvIG5v cm1hbF9iYWNrc2xhc2g7Ci0KLQkgICAgaGFuZGxlX2ludGVydmFsOgogCSAgICAgIHsKLQkJ LyogSWYgZ290IGhlcmUsIHRoZW4gdGhlIHN5bnRheCBhbGxvd3MgaW50ZXJ2YWxzLiAgKi8K LQogCQkvKiBBdCBsZWFzdCAobW9zdCkgdGhpcyBtYW55IG1hdGNoZXMgbXVzdCBiZSBtYWRl LiAgKi8KIAkJaW50IGxvd2VyX2JvdW5kID0gMCwgdXBwZXJfYm91bmQgPSAtMTsKIApAQCAt MjI1MCwzMyArMTk3MSwxOSBAQCByZWdleF9jb21waWxlIChyZV9jaGFyICpwYXR0ZXJuLCBz aXplX3Qgc2l6ZSwKIAkJICB1cHBlcl9ib3VuZCA9IGxvd2VyX2JvdW5kOwogCiAJCWlmIChs b3dlcl9ib3VuZCA8IDAKLQkJICAgIHx8ICgwIDw9IHVwcGVyX2JvdW5kICYmIHVwcGVyX2Jv dW5kIDwgbG93ZXJfYm91bmQpKQorCQkgICAgfHwgKDAgPD0gdXBwZXJfYm91bmQgJiYgdXBw ZXJfYm91bmQgPCBsb3dlcl9ib3VuZCkKKwkJICAgIHx8IGMgIT0gJ1xcJykKIAkJICBGUkVF X1NUQUNLX1JFVFVSTiAoUkVHX0JBREJSKTsKLQotCQlpZiAoIShzeW50YXggJiBSRV9OT19C S19CUkFDRVMpKQotCQkgIHsKLQkJICAgIGlmIChjICE9ICdcXCcpCi0JCSAgICAgIEZSRUVf U1RBQ0tfUkVUVVJOIChSRUdfQkFEQlIpOwotCQkgICAgaWYgKHAgPT0gcGVuZCkKLQkJICAg ICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FRVNDQVBFKTsKLQkJICAgIFBBVEZFVENIIChj KTsKLQkJICB9Ci0KLQkJaWYgKGMgIT0gJ30nKQorCQlpZiAocCA9PSBwZW5kKQorCQkgIEZS RUVfU1RBQ0tfUkVUVVJOIChSRUdfRUVTQ0FQRSk7CisJCWlmICgqcCsrICE9ICd9JykKIAkJ ICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0JBREJSKTsKIAogCQkvKiBXZSBqdXN0IHBhcnNl ZCBhIHZhbGlkIGludGVydmFsLiAgKi8KIAogCQkvKiBJZiBpdCdzIGludmFsaWQgdG8gaGF2 ZSBubyBwcmVjZWRpbmcgcmUuICAqLwogCQlpZiAoIWxhc3RzdGFydCkKLQkJICB7Ci0JCSAg ICBpZiAoc3ludGF4ICYgUkVfQ09OVEVYVF9JTlZBTElEX09QUykKLQkJICAgICAgRlJFRV9T VEFDS19SRVRVUk4gKFJFR19CQURSUFQpOwotCQkgICAgZWxzZSBpZiAoc3ludGF4ICYgUkVf Q09OVEVYVF9JTkRFUF9PUFMpCi0JCSAgICAgIGxhc3RzdGFydCA9IGI7Ci0JCSAgICBlbHNl Ci0JCSAgICAgIGdvdG8gdW5mZXRjaF9pbnRlcnZhbDsKLQkJICB9CisJCSAgZ290byB1bmZl dGNoX2ludGVydmFsOwogCiAJCWlmICh1cHBlcl9ib3VuZCA9PSAwKQogCQkgIC8qIElmIHRo ZSB1cHBlciBib3VuZCBpcyB6ZXJvLCBqdXN0IGRyb3AgdGhlIHN1YiBwYXR0ZXJuCkBAIC0y MzgxLDE3ICsyMDg4LDkgQEAgcmVnZXhfY29tcGlsZSAocmVfY2hhciAqcGF0dGVybiwgc2l6 ZV90IHNpemUsCiAJICAgICAgIGVhc3NlcnQgKGJlZ19pbnRlcnZhbCk7CiAJICAgICAgIHAg PSBiZWdfaW50ZXJ2YWw7CiAJICAgICAgIGJlZ19pbnRlcnZhbCA9IE5VTEw7Ci0KLQkgICAg ICAgLyogbm9ybWFsX2NoYXIgYW5kIG5vcm1hbF9iYWNrc2xhc2ggbmVlZCBgYycuICAqLwor CSAgICAgICBlYXNzZXJ0IChwID4gcGF0dGVybiAmJiBwWy0xXSA9PSAnXFwnKTsKIAkgICAg ICAgYyA9ICd7JzsKLQotCSAgICAgICBpZiAoIShzeW50YXggJiBSRV9OT19CS19CUkFDRVMp KQotCQkgewotCQkgICBlYXNzZXJ0IChwID4gcGF0dGVybiAmJiBwWy0xXSA9PSAnXFwnKTsK LQkJICAgZ290byBub3JtYWxfYmFja3NsYXNoOwotCQkgfQotCSAgICAgICBlbHNlCi0JCSBn b3RvIG5vcm1hbF9jaGFyOworCSAgICAgICBnb3RvIG5vcm1hbF9jaGFyOwogCiAJICAgIGNh c2UgJz0nOgogCSAgICAgIGxhc3RzdGFydCA9IGI7CkBAIC0yNDIzLDM4ICsyMTIyLDI4IEBA IHJlZ2V4X2NvbXBpbGUgKHJlX2NoYXIgKnBhdHRlcm4sIHNpemVfdCBzaXplLAogCSAgICAg IGJyZWFrOwogCiAJICAgIGNhc2UgJ3cnOgotCSAgICAgIGlmIChzeW50YXggJiBSRV9OT19H TlVfT1BTKQotCQlnb3RvIG5vcm1hbF9jaGFyOwogCSAgICAgIGxhc3RzdGFydCA9IGI7CiAJ ICAgICAgQlVGX1BVU0hfMiAoc3ludGF4c3BlYywgU3dvcmQpOwogCSAgICAgIGJyZWFrOwog CiAKIAkgICAgY2FzZSAnVyc6Ci0JICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0dOVV9PUFMp Ci0JCWdvdG8gbm9ybWFsX2NoYXI7CiAJICAgICAgbGFzdHN0YXJ0ID0gYjsKIAkgICAgICBC VUZfUFVTSF8yIChub3RzeW50YXhzcGVjLCBTd29yZCk7CiAJICAgICAgYnJlYWs7CiAKIAog CSAgICBjYXNlICc8JzoKLQkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fR05VX09QUykKLQkJ Z290byBub3JtYWxfY2hhcjsKIAkgICAgICBsYXN0c3RhcnQgPSBiOwogCSAgICAgIEJVRl9Q VVNIICh3b3JkYmVnKTsKIAkgICAgICBicmVhazsKIAogCSAgICBjYXNlICc+JzoKLQkgICAg ICBpZiAoc3ludGF4ICYgUkVfTk9fR05VX09QUykKLQkJZ290byBub3JtYWxfY2hhcjsKIAkg ICAgICBsYXN0c3RhcnQgPSBiOwogCSAgICAgIEJVRl9QVVNIICh3b3JkZW5kKTsKIAkgICAg ICBicmVhazsKIAogCSAgICBjYXNlICdfJzoKLQkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9f R05VX09QUykKLQkJZ290byBub3JtYWxfY2hhcjsKICAgICAgICAgICAgICAgbGFzdHN0YXJ0 ID0gYjsKICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOwogICAgICAgICAgICAgICBpZiAo YyA9PSAnPCcpCkBAIC0yNDY2LDM4ICsyMTU1LDI1IEBAIHJlZ2V4X2NvbXBpbGUgKHJlX2No YXIgKnBhdHRlcm4sIHNpemVfdCBzaXplLAogICAgICAgICAgICAgICBicmVhazsKIAogCSAg ICBjYXNlICdiJzoKLQkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fR05VX09QUykKLQkJZ290 byBub3JtYWxfY2hhcjsKIAkgICAgICBCVUZfUFVTSCAod29yZGJvdW5kKTsKIAkgICAgICBi cmVhazsKIAogCSAgICBjYXNlICdCJzoKLQkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fR05V X09QUykKLQkJZ290byBub3JtYWxfY2hhcjsKIAkgICAgICBCVUZfUFVTSCAobm90d29yZGJv dW5kKTsKIAkgICAgICBicmVhazsKIAogCSAgICBjYXNlICdgJzoKLQkgICAgICBpZiAoc3lu dGF4ICYgUkVfTk9fR05VX09QUykKLQkJZ290byBub3JtYWxfY2hhcjsKIAkgICAgICBCVUZf UFVTSCAoYmVnYnVmKTsKIAkgICAgICBicmVhazsKIAogCSAgICBjYXNlICdcJyc6Ci0JICAg ICAgaWYgKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpCi0JCWdvdG8gbm9ybWFsX2NoYXI7CiAJ ICAgICAgQlVGX1BVU0ggKGVuZGJ1Zik7CiAJICAgICAgYnJlYWs7CiAKIAkgICAgY2FzZSAn MSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOgogCSAgICBjYXNl ICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKIAkgICAgICB7Ci0JCXJlZ251 bV90IHJlZzsKLQotCQlpZiAoc3ludGF4ICYgUkVfTk9fQktfUkVGUykKLQkJICBnb3RvIG5v cm1hbF9iYWNrc2xhc2g7Ci0KLQkJcmVnID0gYyAtICcwJzsKKwkJcmVnbnVtX3QgcmVnID0g YyAtICcwJzsKIAogCQlpZiAocmVnID4gYnVmcC0+cmVfbnN1YiB8fCByZWcgPCAxCiAJCSAg ICAvKiBDYW4ndCBiYWNrIHJlZmVyZW5jZSB0byBhIHN1YmV4cCBiZWZvcmUgaXRzIGVuZC4g ICovCkBAIC0yNTA5LDE2ICsyMTg1LDcgQEAgcmVnZXhfY29tcGlsZSAocmVfY2hhciAqcGF0 dGVybiwgc2l6ZV90IHNpemUsCiAJICAgICAgfQogCSAgICAgIGJyZWFrOwogCi0KLQkgICAg Y2FzZSAnKyc6Ci0JICAgIGNhc2UgJz8nOgotCSAgICAgIGlmIChzeW50YXggJiBSRV9CS19Q TFVTX1FNKQotCQlnb3RvIGhhbmRsZV9wbHVzOwotCSAgICAgIGVsc2UKLQkJZ290byBub3Jt YWxfYmFja3NsYXNoOwotCiAJICAgIGRlZmF1bHQ6Ci0JICAgIG5vcm1hbF9iYWNrc2xhc2g6 CiAJICAgICAgLyogWW91IG1pZ2h0IHRoaW5rIGl0IHdvdWxkIGJlIHVzZWZ1bCBmb3IgXCB0 byBtZWFuCiAJCSBub3QgdG8gdHJhbnNsYXRlOyBidXQgaWYgd2UgZG9uJ3QgdHJhbnNsYXRl IGl0CiAJCSBpdCB3aWxsIG5ldmVyIG1hdGNoIGFueXRoaW5nLiAgKi8KQEAgLTI1NDAsMTQg KzIyMDcsOSBAQCByZWdleF9jb21waWxlIChyZV9jaGFyICpwYXR0ZXJuLCBzaXplX3Qgc2l6 ZSwKIAkgICAgICB8fCAqcGVuZGluZ19leGFjdCA+PSAoMSA8PCBCWVRFV0lEVEgpIC0gTUFY X01VTFRJQllURV9MRU5HVEgKIAogCSAgICAgIC8qIElmIGZvbGxvd2VkIGJ5IGEgcmVwZXRp dGlvbiBvcGVyYXRvci4gICovCi0JICAgICAgfHwgKHAgIT0gcGVuZCAmJiAoKnAgPT0gJyon IHx8ICpwID09ICdeJykpCi0JICAgICAgfHwgKChzeW50YXggJiBSRV9CS19QTFVTX1FNKQot CQkgID8gcCArIDEgPCBwZW5kICYmICpwID09ICdcXCcgJiYgKHBbMV0gPT0gJysnIHx8IHBb MV0gPT0gJz8nKQotCQkgIDogcCAhPSBwZW5kICYmICgqcCA9PSAnKycgfHwgKnAgPT0gJz8n KSkKLQkgICAgICB8fCAoKHN5bnRheCAmIFJFX0lOVEVSVkFMUykKLQkJICAmJiAoKHN5bnRh eCAmIFJFX05PX0JLX0JSQUNFUykKLQkJICAgICAgPyBwICE9IHBlbmQgJiYgKnAgPT0gJ3sn Ci0JCSAgICAgIDogcCArIDEgPCBwZW5kICYmIHBbMF0gPT0gJ1xcJyAmJiBwWzFdID09ICd7 JykpKQorCSAgICAgIHx8IChwICE9IHBlbmQKKwkJICAmJiAoKnAgPT0gJyonIHx8ICpwID09 ICcrJyB8fCAqcCA9PSAnPycgfHwgKnAgPT0gJ14nKSkKKwkgICAgICB8fCAocCArIDEgPCBw ZW5kICYmIHBbMF0gPT0gJ1xcJyAmJiBwWzFdID09ICd7JykpCiAJICAgIHsKIAkgICAgICAv KiBTdGFydCBidWlsZGluZyBhIG5ldyBleGFjdG4uICAqLwogCkBAIC0yNjY2LDQwICsyMzI4 LDM1IEBAIGluc2VydF9vcDIgKHJlX29wY29kZV90IG9wLCB1bnNpZ25lZCBjaGFyICpsb2Ms IGludCBhcmcxLCBpbnQgYXJnMiwgdW5zaWduZWQgY2hhCiAgICBsZWFzdCBvbmUgY2hhcmFj dGVyIGJlZm9yZSB0aGUgXi4gICovCiAKIHN0YXRpYyBib29sCi1hdF9iZWdsaW5lX2xvY19w IChyZV9jaGFyICpwYXR0ZXJuLCByZV9jaGFyICpwLCByZWdfc3ludGF4X3Qgc3ludGF4KQor YXRfYmVnbGluZV9sb2NfcCAocmVfY2hhciAqcGF0dGVybiwgcmVfY2hhciAqcCkKIHsKICAg cmVfY2hhciAqcHJldiA9IHAgLSAyOwotICBib29sIG9kZF9iYWNrc2xhc2hlczsKLQotICAv KiBBZnRlciBhIHN1YmV4cHJlc3Npb24/ICAqLwotICBpZiAoKnByZXYgPT0gJygnKQotICAg IG9kZF9iYWNrc2xhc2hlcyA9IChzeW50YXggJiBSRV9OT19CS19QQVJFTlMpID09IDA7Ci0K LSAgLyogQWZ0ZXIgYW4gYWx0ZXJuYXRpdmU/ICAqLwotICBlbHNlIGlmICgqcHJldiA9PSAn fCcpCi0gICAgb2RkX2JhY2tzbGFzaGVzID0gKHN5bnRheCAmIFJFX05PX0JLX1ZCQVIpID09 IDA7CiAKLSAgLyogQWZ0ZXIgYSBzaHkgc3ViZXhwcmVzc2lvbj8gICovCi0gIGVsc2UgaWYg KCpwcmV2ID09ICc6JyAmJiAoc3ludGF4ICYgUkVfU0hZX0dST1VQUykpCisgIHN3aXRjaCAo KnByZXYpCiAgICAgeworICAgIGNhc2UgJygnOiAvKiBBZnRlciBhIHN1YmV4cHJlc3Npb24u ICAqLworICAgIGNhc2UgJ3wnOiAvKiBBZnRlciBhbiBhbHRlcm5hdGl2ZS4gICovCisgICAg ICBicmVhazsKKworICAgIGNhc2UgJzonOiAvKiBBZnRlciBhIHNoeSBzdWJleHByZXNzaW9u LiAgKi8KICAgICAgIC8qIFNraXAgb3ZlciBvcHRpb25hbCByZWdudW0uICAqLwotICAgICAg d2hpbGUgKHByZXYgLSAxID49IHBhdHRlcm4gJiYgcHJldlstMV0gPj0gJzAnICYmIHByZXZb LTFdIDw9ICc5JykKKyAgICAgIHdoaWxlIChwcmV2ID4gcGF0dGVybiAmJiAnMCcgPD0gcHJl dlstMV0gJiYgcHJldlstMV0gPD0gJzknKQogCS0tcHJldjsKIAotICAgICAgaWYgKCEocHJl diAtIDIgPj0gcGF0dGVybgotCSAgICAmJiBwcmV2Wy0xXSA9PSAnPycgJiYgcHJldlstMl0g PT0gJygnKSkKKyAgICAgIGlmICghIChwcmV2ID4gcGF0dGVybiArIDEgJiYgcHJldlstMV0g PT0gJz8nICYmIHByZXZbLTJdID09ICcoJykpCiAJcmV0dXJuIGZhbHNlOwogICAgICAgcHJl diAtPSAyOwotICAgICAgb2RkX2JhY2tzbGFzaGVzID0gKHN5bnRheCAmIFJFX05PX0JLX1BB UkVOUykgPT0gMDsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVy biBmYWxzZTsKICAgICB9Ci0gIGVsc2UKLSAgICByZXR1cm4gZmFsc2U7CiAKICAgLyogQ291 bnQgdGhlIG51bWJlciBvZiBwcmVjZWRpbmcgYmFja3NsYXNoZXMuICAqLwogICBwID0gcHJl djsKLSAgd2hpbGUgKHByZXYgLSAxID49IHBhdHRlcm4gJiYgcHJldlstMV0gPT0gJ1xcJykK KyAgd2hpbGUgKHByZXYgPiBwYXR0ZXJuICYmIHByZXZbLTFdID09ICdcXCcpCiAgICAgLS1w cmV2OwotICByZXR1cm4gKHAgLSBwcmV2KSAmIG9kZF9iYWNrc2xhc2hlczsKKyAgcmV0dXJu IChwIC0gcHJldikgJiAxOwogfQogCiAKQEAgLTI3MDcsMTkgKzIzNjQsMTAgQEAgYXRfYmVn bGluZV9sb2NfcCAocmVfY2hhciAqcGF0dGVybiwgcmVfY2hhciAqcCwgcmVnX3N5bnRheF90 IHN5bnRheCkKICAgIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlICQsIGkuZS4s IGBQIDwgUEVORCcuICAqLwogCiBzdGF0aWMgYm9vbAotYXRfZW5kbGluZV9sb2NfcCAocmVf Y2hhciAqcCwgcmVfY2hhciAqcGVuZCwgcmVnX3N5bnRheF90IHN5bnRheCkKK2F0X2VuZGxp bmVfbG9jX3AgKHJlX2NoYXIgKnAsIHJlX2NoYXIgKnBlbmQpCiB7Ci0gIHJlX2NoYXIgKm5l eHQgPSBwOwotICBib29sIG5leHRfYmFja3NsYXNoID0gKm5leHQgPT0gJ1xcJzsKLSAgcmVf Y2hhciAqbmV4dF9uZXh0ID0gcCArIDEgPCBwZW5kID8gcCArIDEgOiAwOwotCi0gIHJldHVy bgotICAgICAgIC8qIEJlZm9yZSBhIHN1YmV4cHJlc3Npb24/ICAqLwotICAgICAgIChzeW50 YXggJiBSRV9OT19CS19QQVJFTlMgPyAqbmV4dCA9PSAnKScKLQk6IG5leHRfYmFja3NsYXNo ICYmIG5leHRfbmV4dCAmJiAqbmV4dF9uZXh0ID09ICcpJykKLSAgICAgICAvKiBCZWZvcmUg YW4gYWx0ZXJuYXRpdmU/ICAqLwotICAgIHx8IChzeW50YXggJiBSRV9OT19CS19WQkFSID8g Km5leHQgPT0gJ3wnCi0JOiBuZXh0X2JhY2tzbGFzaCAmJiBuZXh0X25leHQgJiYgKm5leHRf bmV4dCA9PSAnfCcpOworICAvKiBCZWZvcmUgYSBzdWJleHByZXNzaW9uIG9yIGFuIGFsdGVy bmF0aXZlPyAgKi8KKyAgcmV0dXJuICpwID09ICdcXCcgJiYgcCArIDEgPCBwZW5kICYmIChw WzFdID09ICcpJyB8fCBwWzFdID09ICd8Jyk7CiB9CiAKIApAQCAtMzIzMSw3ICsyODc5LDcg QEAgcmVfc2VhcmNoXzIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgY29uc3Qg Y2hhciAqc3RyMSwgc2l6ZV90IHNpemUxLAogCiAJICAgICAgLyogV3JpdHRlbiBvdXQgYXMg YW4gaWYtZWxzZSB0byBhdm9pZCB0ZXN0aW5nIGB0cmFuc2xhdGUnCiAJCSBpbnNpZGUgdGhl IGxvb3AuICAqLwotCSAgICAgIGlmIChSRV9UUkFOU0xBVEVfUCAodHJhbnNsYXRlKSkKKwkg ICAgICBpZiAoIU5JTFAgKHRyYW5zbGF0ZSkpCiAJCXsKIAkJICBpZiAobXVsdGlieXRlKQog CQkgICAgd2hpbGUgKHJhbmdlID4gbGltKQpAQCAtNDE2NywyNCArMzgxNSwxOCBAQCByZV9t YXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIHJlX2No YXIgKnN0cmluZzEsCiAJICBicmVhazsKIAogCi0JLyogTWF0Y2ggYW55IGNoYXJhY3RlciBl eGNlcHQgcG9zc2libHkgYSBuZXdsaW5lIG9yIGEgbnVsbC4gICovCisJLyogTWF0Y2ggYW55 IGNoYXJhY3RlciBleGNlcHQgbmV3bGluZS4gICovCiAJY2FzZSBhbnljaGFyOgogCSAgewog CSAgICBpbnQgYnVmX2NoYXJsZW47CiAJICAgIGludCBidWZfY2g7Ci0JICAgIHJlZ19zeW50 YXhfdCBzeW50YXg7CiAKIAkgICAgUFJFRkVUQ0ggKCk7CiAJICAgIGJ1Zl9jaCA9IFJFX1NU UklOR19DSEFSX0FORF9MRU5HVEggKGQsIGJ1Zl9jaGFybGVuLAogCQkJCQkJdGFyZ2V0X211 bHRpYnl0ZSk7CiAJICAgIGJ1Zl9jaCA9IFRSQU5TTEFURSAoYnVmX2NoKTsKLQotCSAgICBz eW50YXggPSBSRV9TWU5UQVhfRU1BQ1M7Ci0KLQkgICAgaWYgKCghKHN5bnRheCAmIFJFX0RP VF9ORVdMSU5FKSAmJiBidWZfY2ggPT0gJ1xuJykKLQkJfHwgKChzeW50YXggJiBSRV9ET1Rf Tk9UX05VTEwpICYmIGJ1Zl9jaCA9PSAnXDAwMCcpKQorCSAgICBpZiAoYnVmX2NoID09ICdc bicpCiAJICAgICAgZ290byBmYWlsOwotCiAJICAgIGQgKz0gYnVmX2NoYXJsZW47CiAJICB9 CiAJICBicmVhazsKQEAgLTQzMzcsNyArMzk3OSw3IEBAIHJlX21hdGNoXzJfaW50ZXJuYWwg KHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgcmVfY2hhciAqc3RyaW5nMSwKIAog CQkvKiBDb21wYXJlIHRoYXQgbWFueTsgZmFpbHVyZSBpZiBtaXNtYXRjaCwgZWxzZSBtb3Zl CiAJCSAgIHBhc3QgdGhlbS4gICovCi0JCWlmIChSRV9UUkFOU0xBVEVfUCAodHJhbnNsYXRl KQorCQlpZiAoIU5JTFAgKHRyYW5zbGF0ZSkKIAkJICAgID8gYmNtcF90cmFuc2xhdGUgKGQs IGQyLCBkY250LCB0cmFuc2xhdGUsIHRhcmdldF9tdWx0aWJ5dGUpCiAJCSAgICA6IG1lbWNt cCAoZCwgZDIsIGRjbnQpKQogCQkgIHsKZGlmZiAtLWdpdCBhL3NyYy9zZWFyY2guYyBiL3Ny Yy9zZWFyY2guYwppbmRleCAyMDMxYmRjNmQyLi45NWNiYmQ4YzgxIDEwMDY0NAotLS0gYS9z cmMvc2VhcmNoLmMKKysrIGIvc3JjL3NlYXJjaC5jCkBAIC0xMzIsNyArMTMyLDcgQEAgY29t cGlsZV9wYXR0ZXJuXzEgKHN0cnVjdCByZWdleHBfY2FjaGUgKmNwLCBMaXNwX09iamVjdCBw YXR0ZXJuLAogCiAgIGVhc3NlcnQgKCFjcC0+YnVzeSk7CiAgIGNwLT5yZWdleHAgPSBRbmls OwotICBjcC0+YnVmLnRyYW5zbGF0ZSA9ICghIE5JTFAgKHRyYW5zbGF0ZSkgPyB0cmFuc2xh dGUgOiBtYWtlX251bWJlciAoMCkpOworICBjcC0+YnVmLnRyYW5zbGF0ZSA9IHRyYW5zbGF0 ZTsKICAgY3AtPnBvc2l4ID0gcG9zaXg7CiAgIGNwLT5idWYubXVsdGlieXRlID0gU1RSSU5H X01VTFRJQllURSAocGF0dGVybik7CiAgIGNwLT5idWYuY2hhcnNldF91bmlieXRlID0gY2hh cnNldF91bmlieXRlOwpAQCAtMjM4LDcgKzIzOCw3IEBAIGNvbXBpbGVfcGF0dGVybiAoTGlz cF9PYmplY3QgcGF0dGVybiwgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncCwKICAgICAgICAg ICAmJiAhY3AtPmJ1c3kKIAkgICYmIFNUUklOR19NVUxUSUJZVEUgKGNwLT5yZWdleHApID09 IFNUUklOR19NVUxUSUJZVEUgKHBhdHRlcm4pCiAJICAmJiAhTklMUCAoRnN0cmluZ19lcXVh bCAoY3AtPnJlZ2V4cCwgcGF0dGVybikpCi0JICAmJiBFUSAoY3AtPmJ1Zi50cmFuc2xhdGUs ICghIE5JTFAgKHRyYW5zbGF0ZSkgPyB0cmFuc2xhdGUgOiBtYWtlX251bWJlciAoMCkpKQor CSAgJiYgRVEgKGNwLT5idWYudHJhbnNsYXRlLCB0cmFuc2xhdGUpCiAJICAmJiBjcC0+cG9z aXggPT0gcG9zaXgKIAkgICYmIChFUSAoY3AtPnN5bnRheF90YWJsZSwgUXQpCiAJICAgICAg fHwgRVEgKGNwLT5zeW50YXhfdGFibGUsIEJWQVIgKGN1cnJlbnRfYnVmZmVyLCBzeW50YXhf dGFibGUpKSkKLS0gCjIuMTcuMQoK --------------F39DF2437E1EAB82A614CC92 Content-Type: text/plain; charset=UTF-8; name="0004-Remove-always-0-struct-re_pattern_buffer-members.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0004-Remove-always-0-struct-re_pattern_buffer-members.txt" RnJvbSA4YTQyMjkxZGMyN2JiZWI4MTExOTVjMTFkZGZmNmE5ZGMxNzhkZmVmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBUdWUsIDMxIEp1bCAyMDE4IDEwOjQ5OjQ2IC0wNzAwClN1YmplY3Q6IFtQQVRD SCA0LzRdIFJlbW92ZSBhbHdheXMtMCBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgbWVtYmVy cwoKKiBzcmMvcmVnZXgtZW1hY3MuaCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyKToKUmVt b3ZlIG5vX3N1Yiwgbm90X2JvbCwgbm90X2VvbC4gIFRoZXkgYXJlIGFsd2F5cyB6ZXJvLgpB bGwgdXNlcyByZW1vdmVkLCBhbmQgY29kZSBzaW1wbGlmaWVkLgotLS0KIHNyYy9yZWdleC1l bWFjcy5jIHwgMzkgKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBz cmMvcmVnZXgtZW1hY3MuaCB8IDE1ICsrLS0tLS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2Vk LCAxMyBpbnNlcnRpb25zKCspLCA0MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv cmVnZXgtZW1hY3MuYyBiL3NyYy9yZWdleC1lbWFjcy5jCmluZGV4IDE4NTY2MGQxZjUuLjJk YWI4ZmFlMDUgMTAwNjQ0Ci0tLSBhL3NyYy9yZWdleC1lbWFjcy5jCisrKyBiL3NyYy9yZWdl eC1lbWFjcy5jCkBAIC0xMjg0LDcgKzEyODQsNiBAQCBzdGF0aWMgYm9vbCBncm91cF9pbl9j b21waWxlX3N0YWNrIChjb21waWxlX3N0YWNrX3R5cGUsIHJlZ251bV90KTsKICAgICAgYHVz ZWQnIGlzIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBjb21waWxlZCBwYXR0ZXJuOwogICAg ICBgZmFzdG1hcF9hY2N1cmF0ZScgaXMgemVybzsKICAgICAgYHJlX25zdWInIGlzIHRoZSBu dW1iZXIgb2Ygc3ViZXhwcmVzc2lvbnMgaW4gUEFUVEVSTjsKLSAgICAgYG5vdF9ib2wnIGFu ZCBgbm90X2VvbCcgYXJlIHplcm87CiAKICAgIFRoZSBgZmFzdG1hcCcgZmllbGQgaXMgbmVp dGhlciBleGFtaW5lZCBub3Igc2V0LiAgKi8KIApAQCAtMTM3NSw3ICsxMzc0LDYgQEAgcmVn ZXhfY29tcGlsZSAocmVfY2hhciAqcGF0dGVybiwgc2l6ZV90IHNpemUsCiAKICAgLyogSW5p dGlhbGl6ZSB0aGUgcGF0dGVybiBidWZmZXIuICAqLwogICBidWZwLT5mYXN0bWFwX2FjY3Vy YXRlID0gMDsKLSAgYnVmcC0+bm90X2JvbCA9IGJ1ZnAtPm5vdF9lb2wgPSAwOwogICBidWZw LT51c2VkX3N5bnRheCA9IDA7CiAKICAgLyogU2V0IGB1c2VkJyB0byB6ZXJvLCBzbyB0aGF0 IGlmIHdlIHJldHVybiBhbiBlcnJvciwgdGhlIHBhdHRlcm4KQEAgLTEzODMsNyArMTM4MSw2 IEBAIHJlZ2V4X2NvbXBpbGUgKHJlX2NoYXIgKnBhdHRlcm4sIHNpemVfdCBzaXplLAogICAg ICBhdCB0aGUgZW5kLiAgKi8KICAgYnVmcC0+dXNlZCA9IDA7CiAKLSAgLyogQWx3YXlzIGNv dW50IGdyb3Vwcywgd2hldGhlciBvciBub3QgYnVmcC0+bm9fc3ViIGlzIHNldC4gICovCiAg IGJ1ZnAtPnJlX25zdWIgPSAwOwogCiAgIGlmIChidWZwLT5hbGxvY2F0ZWQgPT0gMCkKQEAg LTMzOTksOSArMzM5Niw4IEBAIG11dHVhbGx5X2V4Y2x1c2l2ZV9wIChzdHJ1Y3QgcmVfcGF0 dGVybl9idWZmZXIgKmJ1ZnAsIHJlX2NoYXIgKnAxLAogICAgYW5kIFNJWkUyLCByZXNwZWN0 aXZlbHkpLiAgV2Ugc3RhcnQgbWF0Y2hpbmcgYXQgUE9TLCBhbmQgc3RvcAogICAgbWF0Y2hp bmcgYXQgU1RPUC4KIAotICAgSWYgUkVHUyBpcyBub24tbnVsbCBhbmQgdGhlIGBub19zdWIn IGZpZWxkIG9mIEJVRlAgaXMgbm9uemVybywgd2UKLSAgIHN0b3JlIG9mZnNldHMgZm9yIHRo ZSBzdWJzdHJpbmcgZWFjaCBncm91cCBtYXRjaGVkIGluIFJFR1MuICBTZWUgdGhlCi0gICBk b2N1bWVudGF0aW9uIGZvciBleGFjdGx5IGhvdyBtYW55IGdyb3VwcyB3ZSBmaWxsLgorICAg SWYgUkVHUyBpcyBub24tbnVsbCwgc3RvcmUgb2Zmc2V0cyBmb3IgdGhlIHN1YnN0cmluZyBl YWNoIGdyb3VwCisgICBtYXRjaGVkIGluIFJFR1MuCiAKICAgIFdlIHJldHVybiAtMSBpZiBu byBtYXRjaCwgLTIgaWYgYW4gaW50ZXJuYWwgZXJyb3IgKHN1Y2ggYXMgdGhlCiAgICBmYWls dXJlIHN0YWNrIG92ZXJmbG93aW5nKS4gIE90aGVyd2lzZSwgd2UgcmV0dXJuIHRoZSBsZW5n dGggb2YgdGhlCkBAIC0zNjYxLDcgKzM2NTcsNyBAQCByZV9tYXRjaF8yX2ludGVybmFsIChz dHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIHJlX2NoYXIgKnN0cmluZzEsCiAKIAlz dWNjZWVkX2xhYmVsOgogCSAgLyogSWYgY2FsbGVyIHdhbnRzIHJlZ2lzdGVyIGNvbnRlbnRz IGRhdGEgYmFjaywgZG8gaXQuICAqLwotCSAgaWYgKHJlZ3MgJiYgIWJ1ZnAtPm5vX3N1YikK KwkgIGlmIChyZWdzKQogCSAgICB7CiAJICAgICAgLyogSGF2ZSB0aGUgcmVnaXN0ZXIgZGF0 YSBhcnJheXMgYmVlbiBhbGxvY2F0ZWQ/CSovCiAJICAgICAgaWYgKGJ1ZnAtPnJlZ3NfYWxs b2NhdGVkID09IFJFR1NfVU5BTExPQ0FURUQpCkBAIC0zNzIwLDcgKzM3MTYsNyBAQCByZV9t YXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIHJlX2No YXIgKnN0cmluZzEsCiAJCSAtMSBhdCB0aGUgZW5kLiAgKi8KIAkgICAgICBmb3IgKHJlZyA9 IG51bV9yZWdzOyByZWcgPCByZWdzLT5udW1fcmVnczsgcmVnKyspCiAJCXJlZ3MtPnN0YXJ0 W3JlZ10gPSByZWdzLT5lbmRbcmVnXSA9IC0xOwotCSAgICB9IC8qIHJlZ3MgJiYgIWJ1ZnAt Pm5vX3N1YiAqLworCSAgICB9CiAKIAkgIHB0cmRpZmZfdCBkY250ID0gUE9JTlRFUl9UT19P RkZTRVQgKGQpIC0gcG9zOwogCSAgU0FGRV9GUkVFICgpOwpAQCAtMzk5MiwxMyArMzk4OCwx MSBAQCByZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1 ZnAsIHJlX2NoYXIgKnN0cmluZzEsCiAJICBicmVhazsKIAogCi0JLyogYmVnbGluZSBtYXRj aGVzIHRoZSBlbXB0eSBzdHJpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nCi0J ICAgKHVubGVzcyBgbm90X2JvbCcgaXMgc2V0IGluIGBidWZwJyksIGFuZCBhZnRlciBuZXds aW5lcy4gICovCisJLyogYmVnbGluZSBtYXRjaGVzIHRoZSBlbXB0eSBzdHJpbmcgYXQgdGhl IGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLAorCSAgIGFuZCBhZnRlciBuZXdsaW5lcy4gICov CiAJY2FzZSBiZWdsaW5lOgogCSAgaWYgKEFUX1NUUklOR1NfQkVHIChkKSkKLQkgICAgewot CSAgICAgIGlmICghYnVmcC0+bm90X2JvbCkgYnJlYWs7Ci0JICAgIH0KKwkgICAgYnJlYWs7 CiAJICBlbHNlCiAJICAgIHsKIAkgICAgICB1bnNpZ25lZCBjOwpAQCAtNDAwNiwyMiArNDAw MCwxNiBAQCByZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIg KmJ1ZnAsIHJlX2NoYXIgKnN0cmluZzEsCiAJICAgICAgaWYgKGMgPT0gJ1xuJykKIAkJYnJl YWs7CiAJICAgIH0KLQkgIC8qIEluIGFsbCBvdGhlciBjYXNlcywgd2UgZmFpbC4gICovCiAJ ICBnb3RvIGZhaWw7CiAKIAogCS8qIGVuZGxpbmUgaXMgdGhlIGR1YWwgb2YgYmVnbGluZS4g ICovCiAJY2FzZSBlbmRsaW5lOgogCSAgaWYgKEFUX1NUUklOR1NfRU5EIChkKSkKLQkgICAg ewotCSAgICAgIGlmICghYnVmcC0+bm90X2VvbCkgYnJlYWs7Ci0JICAgIH0KLQkgIGVsc2UK LQkgICAgewotCSAgICAgIFBSRUZFVENIX05PTElNSVQgKCk7Ci0JICAgICAgaWYgKCpkID09 ICdcbicpCi0JCWJyZWFrOwotCSAgICB9CisJICAgIGJyZWFrOworCSAgUFJFRkVUQ0hfTk9M SU1JVCAoKTsKKwkgIGlmICgqZCA9PSAnXG4nKQorCSAgICBicmVhazsKIAkgIGdvdG8gZmFp bDsKIAogCkBAIC00NTgxLDExICs0NTY5LDYgQEAgcmVfY29tcGlsZV9wYXR0ZXJuIChjb25z dCBjaGFyICpwYXR0ZXJuLCBzaXplX3QgbGVuZ3RoLAogICAgICAoYW5kIGF0IGxlYXN0IG9u ZSBleHRyYSB3aWxsIGJlIC0xKS4gICovCiAgIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID0gUkVH U19VTkFMTE9DQVRFRDsKIAotICAvKiBBbmQgR05VIGNvZGUgZGV0ZXJtaW5lcyB3aGV0aGVy IG9yIG5vdCB0byBnZXQgcmVnaXN0ZXIgaW5mb3JtYXRpb24KLSAgICAgYnkgcGFzc2luZyBu dWxsIGZvciB0aGUgUkVHUyBhcmd1bWVudCB0byByZV9zZWFyY2gsIGV0Yy4sIG5vdCBieQot ICAgICBzZXR0aW5nIG5vX3N1Yi4gICovCi0gIGJ1ZnAtPm5vX3N1YiA9IDA7Ci0KICAgcmV0 ID0gcmVnZXhfY29tcGlsZSAoKHJlX2NoYXIgKikgcGF0dGVybiwgbGVuZ3RoLAogCQkgICAg ICAgcG9zaXhfYmFja3RyYWNraW5nLAogCQkgICAgICAgd2hpdGVzcGFjZV9yZWdleHAsCmRp ZmYgLS1naXQgYS9zcmMvcmVnZXgtZW1hY3MuaCBiL3NyYy9yZWdleC1lbWFjcy5oCmluZGV4 IDg5OGMwZjJhZWEuLjRkYWJlNjgwZWYgMTAwNjQ0Ci0tLSBhL3NyYy9yZWdleC1lbWFjcy5o CisrKyBiL3NyYy9yZWdleC1lbWFjcy5oCkBAIC02MCw3ICs2MCw3IEBAIGV4dGVybiBwdHJk aWZmX3QgZW1hY3NfcmVfc2FmZV9hbGxvY2E7CiAMCiAvKiBUaGlzIGRhdGEgc3RydWN0dXJl IHJlcHJlc2VudHMgYSBjb21waWxlZCBwYXR0ZXJuLiAgQmVmb3JlIGNhbGxpbmcKICAgIHRo ZSBwYXR0ZXJuIGNvbXBpbGVyLCB0aGUgZmllbGRzIGBidWZmZXInLCBgYWxsb2NhdGVkJywg YGZhc3RtYXAnLAotICAgYHRyYW5zbGF0ZScsIGFuZCBgbm9fc3ViJyBjYW4gYmUgc2V0LiAg QWZ0ZXIgdGhlIHBhdHRlcm4gaGFzIGJlZW4KKyAgIGFuZCBgdHJhbnNsYXRlJyBjYW4gYmUg c2V0LiAgQWZ0ZXIgdGhlIHBhdHRlcm4gaGFzIGJlZW4KICAgIGNvbXBpbGVkLCB0aGUgYHJl X25zdWInIGZpZWxkIGlzIGF2YWlsYWJsZS4gIEFsbCBvdGhlciBmaWVsZHMgYXJlCiAgICBw cml2YXRlIHRvIHRoZSByZWdleCByb3V0aW5lcy4gICovCiAKQEAgLTExMCwxNyArMTEwLDYg QEAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyCiAgICAgICAgICAgIGJ5IGByZV9jb21waWxl X2Zhc3RtYXAnIGlmIGl0IHVwZGF0ZXMgdGhlIGZhc3RtYXAuICAqLwogICB1bnNpZ25lZCBm YXN0bWFwX2FjY3VyYXRlIDogMTsKIAotICAgICAgICAvKiBJZiBzZXQsIGByZV9tYXRjaF8y JyBkb2VzIG5vdCByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQKLSAgICAgICAgICAgc3ViZXhw cmVzc2lvbnMuICAqLwotICB1bnNpZ25lZCBub19zdWIgOiAxOwotCi0gICAgICAgIC8qIElm IHNldCwgYSBiZWdpbm5pbmctb2YtbGluZSBhbmNob3IgZG9lc24ndCBtYXRjaCBhdCB0aGUK LSAgICAgICAgICAgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcuICAqLwotICB1bnNpZ25lZCBu b3RfYm9sIDogMTsKLQotICAgICAgICAvKiBTaW1pbGFybHkgZm9yIGFuIGVuZC1vZi1saW5l IGFuY2hvci4gICovCi0gIHVuc2lnbmVkIG5vdF9lb2wgOiAxOwotCiAgIC8qIElmIHRydWUs IHRoZSBjb21waWxhdGlvbiBvZiB0aGUgcGF0dGVybiBoYWQgdG8gbG9vayB1cCB0aGUgc3lu dGF4IHRhYmxlLAogICAgICBzbyB0aGUgY29tcGlsZWQgcGF0dGVybiBpcyBvbmx5IHZhbGlk IGZvciB0aGUgY3VycmVudCBzeW50YXggdGFibGUuICAqLwogICB1bnNpZ25lZCB1c2VkX3N5 bnRheCA6IDE7CkBAIC0xNDksNyArMTM4LDcgQEAgZXh0ZXJuIGNvbnN0IGNoYXIgKnJlX2Nv bXBpbGVfcGF0dGVybiAoY29uc3QgY2hhciAqcGF0dGVybiwgc2l6ZV90IGxlbmd0aCwKICAg IGNvbXBpbGVkIGludG8gQlVGRkVSLiAgU3RhcnQgc2VhcmNoaW5nIGF0IHBvc2l0aW9uIFNU QVJULCBmb3IgUkFOR0UKICAgIGNoYXJhY3RlcnMuICBSZXR1cm4gdGhlIHN0YXJ0aW5nIHBv c2l0aW9uIG9mIHRoZSBtYXRjaCwgLTEgZm9yIG5vCiAgICBtYXRjaCwgb3IgLTIgZm9yIGFu IGludGVybmFsIGVycm9yLiAgQWxzbyByZXR1cm4gcmVnaXN0ZXIKLSAgIGluZm9ybWF0aW9u IGluIFJFR1MgKGlmIFJFR1MgYW5kIEJVRkZFUi0+bm9fc3ViIGFyZSBub256ZXJvKS4gICov CisgICBpbmZvcm1hdGlvbiBpbiBSRUdTIChpZiBSRUdTIGlzIG5vbnplcm8pLiAgKi8KIGV4 dGVybiBwdHJkaWZmX3QgcmVfc2VhcmNoIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1 ZmZlciwKIAkJCSAgIGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90IGxlbmd0aCwKIAkJCSAg IHB0cmRpZmZfdCBzdGFydCwgcHRyZGlmZl90IHJhbmdlLAotLSAKMi4xNy4xCgo= --------------F39DF2437E1EAB82A614CC92--