From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#14295: Support copy-file ACLs for Solaris etc. Date: Sat, 27 Apr 2013 20:33:19 -0700 Organization: UCLA Computer Science Department Message-ID: <517C987F.6060902@cs.ucla.edu> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------060902070705010703000507" X-Trace: ger.gmane.org 1367120113 15994 80.91.229.3 (28 Apr 2013 03:35:13 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 28 Apr 2013 03:35:13 +0000 (UTC) To: 14295@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sun Apr 28 05:35:16 2013 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1UWIOR-0008En-PV for geb-bug-gnu-emacs@m.gmane.org; Sun, 28 Apr 2013 05:35:16 +0200 Original-Received: from localhost ([::1]:51847 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWIOR-00067g-1N for geb-bug-gnu-emacs@m.gmane.org; Sat, 27 Apr 2013 23:35:15 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:59459) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWIOD-000625-OM for bug-gnu-emacs@gnu.org; Sat, 27 Apr 2013 23:35:11 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UWIO6-0006mG-5l for bug-gnu-emacs@gnu.org; Sat, 27 Apr 2013 23:35:01 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:43551) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWIO6-0006mC-0C for bug-gnu-emacs@gnu.org; Sat, 27 Apr 2013 23:34:54 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1UWIOF-0004ES-AN for bug-gnu-emacs@gnu.org; Sat, 27 Apr 2013 23:35:03 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 28 Apr 2013 03:35:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 14295 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.136712005216176 (code B ref -1); Sun, 28 Apr 2013 03:35:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 28 Apr 2013 03:34:12 +0000 Original-Received: from localhost ([127.0.0.1]:47660 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UWINQ-0004Co-91 for submit@debbugs.gnu.org; Sat, 27 Apr 2013 23:34:12 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:47964) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UWINK-0004CY-SH for submit@debbugs.gnu.org; Sat, 27 Apr 2013 23:34:07 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UWIMx-0006JQ-FY for submit@debbugs.gnu.org; Sat, 27 Apr 2013 23:33:56 -0400 Original-Received: from lists.gnu.org ([208.118.235.17]:33184) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWIMx-0006JM-AS for submit@debbugs.gnu.org; Sat, 27 Apr 2013 23:33:43 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:59294) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWIMo-0005zG-Uy for bug-gnu-emacs@gnu.org; Sat, 27 Apr 2013 23:33:43 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UWIMg-0006I4-Rd for bug-gnu-emacs@gnu.org; Sat, 27 Apr 2013 23:33:34 -0400 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:59969) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWIMg-0006Gx-1F; Sat, 27 Apr 2013 23:33:26 -0400 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 112AF39E810A; Sat, 27 Apr 2013 20:33:25 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Original-Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id xeFOZyaNfEdE; Sat, 27 Apr 2013 20:33:20 -0700 (PDT) Original-Received: from [192.168.1.9] (pool-71-189-154-249.lsanca.fios.verizon.net [71.189.154.249]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id C6E2439E8008; Sat, 27 Apr 2013 20:33:19 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130404 Thunderbird/17.0.5 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:73793 Archived-At: This is a multi-part message in MIME format. --------------060902070705010703000507 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Tags: patch Recently copy-file was augmented to add support for copying ACLs on abandoned-POSIX-style hosts. Here's an additional patch to add support for copying ACLs on Solaris, HP-UX, etc. Basically, the idea is to use Gnulib's support for ACLs. I've tested this on GNU/Linux and Solaris, but not on Microsoft platforms, and am CC'ing this to Eli as a heads-up for that. This changes the 'configure' option from --without-acl to --disable-acl if one wishes to disable ACL support when configuring Emacs; this is the option spelling that other GNU packages use. --------------060902070705010703000507 Content-Type: text/plain; charset=UTF-8; name="acl.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="acl.txt" PT09IG1vZGlmaWVkIGZpbGUgJ0NoYW5nZUxvZycKLS0tIENoYW5nZUxvZwkyMDEzLTA0LTI3 IDE5OjMwOjMzICswMDAwCisrKyBDaGFuZ2VMb2cJMjAxMy0wNC0yNyAxOTo0MDo0OSArMDAw MApAQCAtMSw1ICsxLDE2IEBACiAyMDEzLTA0LTI3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBj cy51Y2xhLmVkdT4KIAorCVVzZSBHbnVsaWIgQUNMIGltcGxlbWVudGF0aW9uLCBmb3IgYmVu ZWZpdCBvZiBTb2xhcmlzIGV0Yy4KKwkqIGNvbmZpZ3VyZS5hYzogUmVtb3ZlIC13aXRoLWFj bCBvcHRpb24sIHNpbmNlIEdudWxpYiBkb2VzIHRoYXQgZm9yCisJdXMgbm93LgorCShMSUJB Q0xfTElCUyk6IFJlbW92ZTsgbm8gbG9uZ2VyIG5lZWRlZC4KKwkqIGxpYi9NYWtlZmlsZS5h bSAoQ0xFQU5GSUxFUywgU1VGRklYRVMpOiBOZXcgKGVtcHR5KSBtYWNyb3MsCisJZm9yIHRo ZSBiZW5lZml0IG9mIHRoZSBuZXcgQUNMIGltcGxlbWVudGF0aW9uLgorCSogbGliL2FjbC1l cnJuby12YWxpZC5jLCBsaWIvYWNsLWludGVybmFsLmgsIGxpYi9hY2wuaDoKKwkqIGxpYi9h Y2xfZW50cmllcy5jLCBsaWIvZmlsZS1oYXMtYWNsLmMsIGxpYi9xY29weS1hY2wuYzoKKwkq IGxpYi9xc2V0LWFjbC5jLCBtNC9hY2wubTQ6IE5ldyBmaWxlcywgdGFrZW4gZnJvbSBnbnVs aWIuCisJKiBsaWIvZ251bGliLm1rLCBtNC9nbnVsaWItY29tcC5tNDogUmVnZW5lcmF0ZS4K KwogCU1lcmdlIGZyb20gZ251bGliLCBpbmNvcnBvcmF0aW5nOgogCTIwMTMtMDQtMjcgYWxp Z25vZiwgaW50cHJvcHMsIG1hbGxvY2E6IHBvcnQgYmV0dGVyIHRvIElCTSdzIEMgY29tcGls ZXIKIAoKPT09IG1vZGlmaWVkIGZpbGUgJ2FkbWluL0NoYW5nZUxvZycKLS0tIGFkbWluL0No YW5nZUxvZwkyMDEzLTA0LTAyIDAxOjE4OjQwICswMDAwCisrKyBhZG1pbi9DaGFuZ2VMb2cJ MjAxMy0wNC0xNyAwNToyMTozMyArMDAwMApAQCAtMSwzICsxLDggQEAKKzIwMTMtMDQtMTcg IFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJVXNlIEdudWxpYiBBQ0wg aW1wbGVtZW50YXRpb24sIGZvciBiZW5lZml0IG9mIFNvbGFyaXMgZXRjLgorCSogbWVyZ2Ut Z251bGliIChHTlVMSUJfTU9EVUxFUyk6IEFkZCBxYWNsLgorCiAyMDEzLTA0LTAxICBQYXVs IEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KIAogCVVzZSBVVEYtOCBmb3IgbW9zdCBm aWxlcyB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIChCdWcjMTM5MzYpLgoKPT09IG1vZGlm aWVkIGZpbGUgJ2FkbWluL21lcmdlLWdudWxpYicKLS0tIGFkbWluL21lcmdlLWdudWxpYgky MDEzLTAzLTEzIDE4OjQyOjIyICswMDAwCisrKyBhZG1pbi9tZXJnZS1nbnVsaWIJMjAxMy0w NC0xNyAwNToyMTozMyArMDAwMApAQCAtMzMsNyArMzMsNyBAQAogICBnZXRsb2FkYXZnIGdl dG9wdC1nbnUgZ2V0dGltZSBnZXR0aW1lb2ZkYXkKICAgaWdub3JlLXZhbHVlIGludHByb3Bz IGxhcmdlZmlsZSBsc3RhdAogICBtYW55d2FybmluZ3MgbWVtcmNociBta3RpbWUKLSAgcHNl bGVjdCBwdGhyZWFkX3NpZ21hc2sgcHV0ZW52IHJlYWRsaW5rIHJlYWRsaW5rYXQKKyAgcHNl bGVjdCBwdGhyZWFkX3NpZ21hc2sgcHV0ZW52IHFhY2wgcmVhZGxpbmsgcmVhZGxpbmthdAog ICBzaWcyc3RyIHNvY2tsZW4gc3RhdC10aW1lIHN0ZGFsaWduIHN0ZGFyZyBzdGRib29sIHN0 ZGlvCiAgIHN0cmZ0aW1lIHN0cnRvaW1heCBzdHJ0b3VtYXggc3ltbGluayBzeXNfc3RhdAog ICBzeXNfdGltZSB0aW1lIHRpbWVyLXRpbWUgdGltZXNwZWMtYWRkIHRpbWVzcGVjLXN1YiB1 bnNldGVudiB1dGltZW5zCgo9PT0gbW9kaWZpZWQgZmlsZSAnY29uZmlndXJlLmFjJwotLS0g Y29uZmlndXJlLmFjCTIwMTMtMDQtMjYgMTk6MzE6MDkgKzAwMDAKKysrIGNvbmZpZ3VyZS5h YwkyMDEzLTA0LTI3IDE5OjQwOjQ5ICswMDAwCkBAIC0xOTksNyArMTk5LDYgQEAKIE9QVElP Tl9ERUZBVUxUX09OKFtnY29uZl0sW2Rvbid0IGNvbXBpbGUgd2l0aCBHQ29uZiBzdXBwb3J0 XSkKIE9QVElPTl9ERUZBVUxUX09OKFtnc2V0dGluZ3NdLFtkb24ndCBjb21waWxlIHdpdGgg R1NldHRpbmdzIHN1cHBvcnRdKQogT1BUSU9OX0RFRkFVTFRfT04oW3NlbGludXhdLFtkb24n dCBjb21waWxlIHdpdGggU0VMaW51eCBzdXBwb3J0XSkKLU9QVElPTl9ERUZBVUxUX09OKFth Y2xdLFtkb24ndCBjb21waWxlIHdpdGggQUNMIHN1cHBvcnRdKQogT1BUSU9OX0RFRkFVTFRf T04oW2dudXRsc10sW2Rvbid0IHVzZSAtbGdudXRscyBmb3IgU1NML1RMUyBzdXBwb3J0XSkK IE9QVElPTl9ERUZBVUxUX09OKFtpbm90aWZ5XSxbZG9uJ3QgY29tcGlsZSB3aXRoIGlub3Rp ZnkgKGZpbGUtd2F0Y2gpIHN1cHBvcnRdKQogCkBAIC0yMTg1LDIzICsyMTg0LDYgQEAKICAg QUNfREVGSU5FKEhBVkVfSU5PVElGWSwgMSwgW0RlZmluZSB0byAxIHRvIHVzZSBpbm90aWZ5 Ll0pCiBmaQogCi1kbmwgUE9TSVggQUNMIHN1cHBvcnQ6IHByb3ZpZGVkIGJ5IGxpYmFjbCBv biBHTlUvTGludXgsIGJ5IGxpYmMgb24gRnJlZUJTRC4KLUhBVkVfUE9TSVhfQUNMPW5vCi1M SUJBQ0xfTElCUz0KLWlmIHRlc3QgIiR7d2l0aF9hY2x9IiA9ICJ5ZXMiOyB0aGVuCi0gIEFD X0NIRUNLX0xJQihbYWNsXSwgW2FjbF9zZXRfZmlsZV0sIEhBVkVfUE9TSVhfQUNMPXllcywg SEFWRV9QT1NJWF9BQ0w9bm8pCi0gIGlmIHRlc3QgIiRIQVZFX1BPU0lYX0FDTCIgPSB5ZXM7 IHRoZW4KLSAgICBBQ19ERUZJTkUoSEFWRV9QT1NJWF9BQ0wsIDEsIFtEZWZpbmUgdG8gMSBp ZiB1c2luZyBQT1NJWCBBQ0wgc3VwcG9ydC5dKQotICAgIExJQkFDTF9MSUJTPS1sYWNsCi0g IGVsc2UKLSAgICBBQ19DSEVDS19GVU5DKGFjbF9zZXRfZmlsZSwgSEFWRV9QT1NJWF9BQ0w9 eWVzLCBIQVZFX1BPU0lYX0FDTD1ubykKLSAgICBpZiB0ZXN0ICIkSEFWRV9QT1NJWF9BQ0wi ID0geWVzOyB0aGVuCi0gICAgICBBQ19ERUZJTkUoSEFWRV9QT1NJWF9BQ0wsIDEsIFtEZWZp bmUgdG8gMSBpZiB1c2luZyBQT1NJWCBBQ0wgc3VwcG9ydC5dKQotICAgIGZpCi0gZmkKLWZp Ci1BQ19TVUJTVChMSUJBQ0xfTElCUykKLQogZG5sIERvIG5vdCBwdXQgd2hpdGVzcGFjZSBi ZWZvcmUgdGhlICNpbmNsdWRlIHN0YXRlbWVudHMgYmVsb3cuCiBkbmwgT2xkZXIgY29tcGls ZXJzIChlZyBzdW5vczQgY2MpIGNob2tlIG9uIGl0LgogSEFWRV9YQVczRD1ubwoKPT09IG1v ZGlmaWVkIGZpbGUgJ2V0Yy9DaGFuZ2VMb2cnCi0tLSBldGMvQ2hhbmdlTG9nCTIwMTMtMDQt MjQgMTY6NTA6MTQgKzAwMDAKKysrIGV0Yy9DaGFuZ2VMb2cJMjAxMy0wNC0yNyAxOTo0MDo0 OSArMDAwMApAQCAtMSwzICsxLDkgQEAKKzIwMTMtMDQtMjcgIFBhdWwgRWdnZXJ0ICA8ZWdn ZXJ0QGNzLnVjbGEuZWR1PgorCisJVXNlIEdudWxpYiBBQ0wgaW1wbGVtZW50YXRpb24sIGZv ciBiZW5lZml0IG9mIFNvbGFyaXMgZXRjLgorCSogTkVXUzogRW1hY3MgaXMgbm8gbG9uZ2Vy IGxpbWl0ZWQgdG8gUE9TSVggQUNMcy4gIC0tZGlzYWJsZS1hY2wsCisJbm90IC0td2l0aG91 dC1hY2wsIHNpbmNlIHdlJ3JlIG5vdyB1c2luZyBHbnVsaWIncyBpbXBsZW1lbnRhdGlvbi4K KwogMjAxMy0wNC0yNCAgVGFzc2lsbyBIb3JuICA8dHNkaEBnbnUub3JnPgogCiAJKiB0aGVt ZXMvdHNkaC1kYXJrLXRoZW1lLmVsICh0c2RoLWRhcmspOiBBZGQgaWRvIGZhY2VzIGFuZCBy ZW1vdmUKCj09PSBtb2RpZmllZCBmaWxlICdldGMvTkVXUycKLS0tIGV0Yy9ORVdTCTIwMTMt MDQtMjcgMjA6NTU6MDAgKzAwMDAKKysrIGV0Yy9ORVdTCTIwMTMtMDQtMjggMDA6MDA6MTkg KzAwMDAKQEAgLTIzLDEwICsyMywxMCBAQAogDAogKiBJbnN0YWxsYXRpb24gQ2hhbmdlcyBp biBFbWFjcyAyNC40CiAKLSoqIEVtYWNzIGNhbiBiZSBjb21waWxlZCB3aXRoIFBPU0lYIEFD TCBzdXBwb3J0LgorKiogRW1hY3MgY2FuIGJlIGNvbXBpbGVkIHdpdGggQUNMIHN1cHBvcnQu CiBUaGlzIGhhcHBlbnMgYnkgZGVmYXVsdCBpZiBhIHN1aXRhYmxlIHN1cHBvcnQgbGlicmFy eSBpcyBmb3VuZCBhdAogYnVpbGQgdGltZSwgbGlrZSBsaWJhY2wgb24gR05VL0xpbnV4LiAg VG8gcHJldmVudCB0aGlzLCB1c2UgdGhlCi1jb25maWd1cmUgb3B0aW9uIGAtLXdpdGhvdXQt YWNsJy4KK2NvbmZpZ3VyZSBvcHRpb24gYC0tZGlzYWJsZS1hY2wnLgogCiAqKiBUaGUgY29u ZmlndXJlIG9wdGlvbiAtLXdpdGgtY3J0LWRpciBoYXMgYmVlbiByZW1vdmVkLgogSXQgaXMg bm8gbG9uZ2VyIG5lZWRlZCwgYXMgdGhlIGNydCoubyBmaWxlcyBhcmUgbm8gbG9uZ2VyIGxp bmtlZCBzcGVjaWFsbHkuCgo9PT0gbW9kaWZpZWQgZmlsZSAnbGliL01ha2VmaWxlLmFtJwot LS0gbGliL01ha2VmaWxlLmFtCTIwMTMtMDQtMDcgMDY6MjE6NDAgKzAwMDAKKysrIGxpYi9N YWtlZmlsZS5hbQkyMDEzLTA0LTE3IDA1OjIxOjMzICswMDAwCkBAIC0xLDggKzEsMTAgQEAK IEJVSUxUX1NPVVJDRVMgPQorQ0xFQU5GSUxFUyA9CiBFWFRSQV9ESVNUID0KIE1PU1RMWUNM RUFORElSUyA9CiBNT1NUTFlDTEVBTkZJTEVTID0KIG5vaW5zdF9MSUJSQVJJRVMgPQorU1VG RklYRVMgPQogCiBBTV9DRkxBR1MgPSAkKFBST0ZJTElOR19DRkxBR1MpICQoR05VTElCX1dB Uk5fQ0ZMQUdTKSAkKFdFUlJPUl9DRkxBR1MpCiBERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1J JCh0b3Bfc3JjZGlyKS9saWIgLUkuLi9zcmMgLUkkKHRvcF9zcmNkaXIpL3NyYwoKPT09IGFk ZGVkIGZpbGUgJ2xpYi9hY2wtZXJybm8tdmFsaWQuYycKLS0tIGxpYi9hY2wtZXJybm8tdmFs aWQuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIvYWNsLWVycm5vLXZhbGlk LmMJMjAxMy0wNC0xNyAwNToyMTozMyArMDAwMApAQCAtMCwwICsxLDQ4IEBACisvKiBUZXN0 IHdoZXRoZXIgQUNMcyBhcmUgd2VsbCBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0uCisKKyAg IENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u CisKKyAgIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQuICAqLworCisjaW5jbHVkZSA8Y29uZmln Lmg+CisKKyNpbmNsdWRlIDxhY2wuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisKKy8qIFJl dHVybiB0cnVlIGlmIGVycm5vIHZhbHVlIEVSUk5VTSBpbmRpY2F0ZXMgdGhhdCBBQ0xzIGFy ZSB3ZWxsCisgICBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0uICBFUlJOVU0gc2hvdWxkIGJl IGFuIGVycm5vIHZhbHVlIG9idGFpbmVkCisgICBhZnRlciBhbiBBQ0wtcmVsYXRlZCBzeXN0 ZW0gY2FsbCBmYWlscy4gICovCitib29sCithY2xfZXJybm9fdmFsaWQgKGludCBlcnJudW0p Cit7CisgIC8qIFJlY29nbml6ZSBzb21lIGNvbW1vbiBlcnJvcnMgc3VjaCBhcyBmcm9tIGFu IE5GUyBtb3VudCB0aGF0IGRvZXMKKyAgICAgbm90IHN1cHBvcnQgQUNMcywgZXZlbiB3aGVu IGxvY2FsIGRyaXZlcyBkby4gICovCisgIHN3aXRjaCAoZXJybnVtKQorICAgIHsKKyAgICBj YXNlIEVCVVNZOiByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBFSU5WQUw6IHJldHVybiBmYWxz ZTsKKyNpZiBkZWZpbmVkIF9fQVBQTEVfXyAmJiBkZWZpbmVkIF9fTUFDSF9fCisgICAgY2Fz ZSBFTk9FTlQ6IHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgIGNhc2UgRU5PU1lTOiByZXR1 cm4gZmFsc2U7CisjaWYgZGVmaW5lZCBFTk9UU1VQICYmIEVOT1RTVVAgIT0gRU9QTk9UU1VQ UAorICAgIGNhc2UgRU5PVFNVUDogcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgY2FzZSBF T1BOT1RTVVBQOiByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDogcmV0dXJuIHRydWU7Cisg ICAgfQorfQoKPT09IGFkZGVkIGZpbGUgJ2xpYi9hY2wtaW50ZXJuYWwuaCcKLS0tIGxpYi9h Y2wtaW50ZXJuYWwuaAkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIvYWNsLWlu dGVybmFsLmgJMjAxMy0wNC0xNyAwNToyMTozMyArMDAwMApAQCAtMCwwICsxLDI1MCBAQAor LyogSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYWNjZXNzIGNvbnRyb2wgbGlzdHMuCisK KyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBv ZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworICAgV3JpdHRlbiBieSBQYXVsIEVnZ2VydCwg QW5kcmVhcyBHcsO8bmJhY2hlciwgYW5kIEJydW5vIEhhaWJsZS4gICovCisKKyNpbmNsdWRl ICJhY2wuaCIKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K KworLyogQWxsIHN5c3RlbXMgZGVmaW5lIHRoZSBBQ0wgcmVsYXRlZCBBUEkgaW4gPHN5cy9h Y2wuaD4uICAqLworI2lmIEhBVkVfU1lTX0FDTF9ICisjIGluY2x1ZGUgPHN5cy9hY2wuaD4K KyNlbmRpZgorI2lmIGRlZmluZWQgSEFWRV9GQUNMICYmICEgZGVmaW5lZCBHRVRBQ0xDTlQg JiYgZGVmaW5lZCBBQ0xfQ05UCisjIGRlZmluZSBHRVRBQ0xDTlQgQUNMX0NOVAorI2VuZGlm CisKKy8qIE9uIExpbnV4LCBhZGRpdGlvbmFsIEFDTCByZWxhdGVkIEFQSSBpcyBhdmFpbGFi bGUgaW4gPGFjbC9saWJhY2wuaD4uICAqLworI2lmZGVmIEhBVkVfQUNMX0xJQkFDTF9ICisj IGluY2x1ZGUgPGFjbC9saWJhY2wuaD4KKyNlbmRpZgorCisvKiBPbiBIUC1VWCA+PSAxMS4x MSwgYWRkaXRpb25hbCBBQ0wgQVBJIGlzIGF2YWlsYWJsZSBpbiA8YWNsdi5oPi4gICovCisj aWYgSEFWRV9BQ0xWX0gKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjIGluY2x1ZGUgPGFj bHYuaD4KKy8qIEhQLVVYIDExLjExIGxhY2tzIHRoZXNlIGRlY2xhcmF0aW9ucy4gICovCitl eHRlcm4gaW50IGFjbCAoY2hhciAqLCBpbnQsIGludCwgc3RydWN0IGFjbCAqKTsKK2V4dGVy biBpbnQgYWNsc29ydCAoaW50LCBpbnQsIHN0cnVjdCBhY2wgKik7CisjZW5kaWYKKworI2lu Y2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZm5kZWYgTUlOCisj IGRlZmluZSBNSU4oYSxiKSAoKGEpIDwgKGIpID8gKGEpIDogKGIpKQorI2VuZGlmCisKKyNp Zm5kZWYgU0laRV9NQVgKKyMgZGVmaW5lIFNJWkVfTUFYICgoc2l6ZV90KSAtMSkKKyNlbmRp ZgorCisjaWZuZGVmIEhBVkVfRkNITU9ECisjIGRlZmluZSBIQVZFX0ZDSE1PRCBmYWxzZQor IyBkZWZpbmUgZmNobW9kKGZkLCBtb2RlKSAoLTEpCisjZW5kaWYKKworX0dMX0lOTElORV9I RUFERVJfQkVHSU4KKyNpZm5kZWYgQUNMX0lOVEVSTkFMX0lOTElORQorIyBkZWZpbmUgQUNM X0lOVEVSTkFMX0lOTElORSBfR0xfSU5MSU5FCisjZW5kaWYKKworI2lmIFVTRV9BQ0wKKwor IyBpZiBIQVZFX0FDTF9HRVRfRklMRQorLyogUE9TSVggMTAwMy4xZSAoZHJhZnQgMTcgLS0g YWJhbmRvbmVkKSBzcGVjaWZpYyB2ZXJzaW9uLiAgKi8KKy8qIExpbnV4LCBGcmVlQlNELCBN YWMgT1MgWCwgSVJJWCwgVHJ1NjQgKi8KKworIyAgaWZuZGVmIE1JTl9BQ0xfRU5UUklFUwor IyAgIGRlZmluZSBNSU5fQUNMX0VOVFJJRVMgNAorIyAgZW5kaWYKKworLyogUE9TSVggMTAw My4xZSAoZHJhZnQgMTcpICovCisjICBpZmRlZiBIQVZFX0FDTF9HRVRfRkQKKy8qIE1vc3Qg cGxhdGZvcm1zIGhhdmUgYSAxLWFyZ3VtZW50IGFjbF9nZXRfZmQsIG9ubHkgT1NGLzEgaGFz IGEgMi1hcmd1bWVudAorICAgbWFjcm8oISkuICAqLworIyAgIGlmIEhBVkVfQUNMX0ZSRUVf VEVYVCAvKiBPU0YvMSAqLworQUNMX0lOVEVSTkFMX0lOTElORSBhY2xfdAorcnBsX2FjbF9n ZXRfZmQgKGludCBmZCkKK3sKKyAgcmV0dXJuIGFjbF9nZXRfZmQgKGZkLCBBQ0xfVFlQRV9B Q0NFU1MpOworfQorIyAgICB1bmRlZiBhY2xfZ2V0X2ZkCisjICAgIGRlZmluZSBhY2xfZ2V0 X2ZkIHJwbF9hY2xfZ2V0X2ZkCisjICAgZW5kaWYKKyMgIGVsc2UKKyMgICBkZWZpbmUgSEFW RV9BQ0xfR0VUX0ZEIGZhbHNlCisjICAgdW5kZWYgYWNsX2dldF9mZAorIyAgIGRlZmluZSBh Y2xfZ2V0X2ZkKGZkKSAoTlVMTCkKKyMgIGVuZGlmCisKKy8qIFBPU0lYIDEwMDMuMWUgKGRy YWZ0IDE3KSAqLworIyAgaWZkZWYgSEFWRV9BQ0xfU0VUX0ZECisvKiBNb3N0IHBsYXRmb3Jt cyBoYXZlIGEgMi1hcmd1bWVudCBhY2xfc2V0X2ZkLCBvbmx5IE9TRi8xIGhhcyBhIDMtYXJn dW1lbnQKKyAgIG1hY3JvKCEpLiAgKi8KKyMgICBpZiBIQVZFX0FDTF9GUkVFX1RFWFQgLyog T1NGLzEgKi8KK0FDTF9JTlRFUk5BTF9JTkxJTkUgaW50CitycGxfYWNsX3NldF9mZCAoaW50 IGZkLCBhY2xfdCBhY2wpCit7CisgIHJldHVybiBhY2xfc2V0X2ZkIChmZCwgQUNMX1RZUEVf QUNDRVNTLCBhY2wpOworfQorIyAgICB1bmRlZiBhY2xfc2V0X2ZkCisjICAgIGRlZmluZSBh Y2xfc2V0X2ZkIHJwbF9hY2xfc2V0X2ZkCisjICAgZW5kaWYKKyMgIGVsc2UKKyMgICBkZWZp bmUgSEFWRV9BQ0xfU0VUX0ZEIGZhbHNlCisjICAgdW5kZWYgYWNsX3NldF9mZAorIyAgIGRl ZmluZSBhY2xfc2V0X2ZkKGZkLCBhY2wpICgtMSkKKyMgIGVuZGlmCisKKy8qIFBPU0lYIDEw MDMuMWUgKGRyYWZ0IDEzKSAqLworIyAgaWYgISBIQVZFX0FDTF9GUkVFX1RFWFQKKyMgICBk ZWZpbmUgYWNsX2ZyZWVfdGV4dChidWYpIGFjbF9mcmVlIChidWYpCisjICBlbmRpZgorCisv KiBMaW51eC1zcGVjaWZpYyAqLworIyAgaWZuZGVmIEhBVkVfQUNMX0VYVEVOREVEX0ZJTEUK KyMgICBkZWZpbmUgSEFWRV9BQ0xfRVhURU5ERURfRklMRSBmYWxzZQorIyAgIGRlZmluZSBh Y2xfZXh0ZW5kZWRfZmlsZShuYW1lKSAoLTEpCisjICBlbmRpZgorCisvKiBMaW51eC1zcGVj aWZpYyAqLworIyAgaWZuZGVmIEhBVkVfQUNMX0ZST01fTU9ERQorIyAgIGRlZmluZSBIQVZF X0FDTF9GUk9NX01PREUgZmFsc2UKKyMgICBkZWZpbmUgYWNsX2Zyb21fbW9kZShtb2RlKSAo TlVMTCkKKyMgIGVuZGlmCisKKy8qIFNldCB0byAxIGlmIGEgZmlsZSdzIG1vZGUgaXMgaW1w bGljaXQgYnkgdGhlIEFDTC4KKyAgIFNldCB0byAwIGlmIGEgZmlsZSdzIG1vZGUgaXMgc3Rv cmVkIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgQUNMLiAgKi8KKyMgIGlmIChIQVZFX0FDTF9D T1BZX0VYVF9OQVRJVkUgJiYgSEFWRV9BQ0xfQ1JFQVRFX0VOVFJZX05QKSB8fCBkZWZpbmVk IF9fc2dpIC8qIE1hYyBPUyBYLCBJUklYICovCisjICAgZGVmaW5lIE1PREVfSU5TSURFX0FD TCAwCisjICBlbHNlCisjICAgZGVmaW5lIE1PREVfSU5TSURFX0FDTCAxCisjICBlbmRpZgor CisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIEFDTC4KKyAgIFJldHVybiAt MSBhbmQgc2V0IGVycm5vIHVwb24gZmFpbHVyZSB0byBkZXRlcm1pbmUgaXQuICAqLworLyog RGVmaW5lIGEgcmVwbGFjZW1lbnQgZm9yIGFjbF9lbnRyaWVzIGlmIG5lZWRlZC4gKE9ubHkg TGludXggaGFzIGl0LikgICovCisjICBpZiAhSEFWRV9BQ0xfRU5UUklFUworIyAgIGRlZmlu ZSBhY2xfZW50cmllcyBycGxfYWNsX2VudHJpZXMKK2V4dGVybiBpbnQgYWNsX2VudHJpZXMg KGFjbF90KTsKKyMgIGVuZGlmCisKKyMgIGlmIEhBVkVfQUNMX1RZUEVfRVhURU5ERUQgLyog TWFjIE9TIFggKi8KKy8qIEFDTCBpcyBhbiBBQ0wsIGZyb20gYSBmaWxlLCBzdG9yZWQgYXMg dHlwZSBBQ0xfVFlQRV9FWFRFTkRFRC4KKyAgIFJldHVybiAxIGlmIHRoZSBnaXZlbiBBQ0wg aXMgbm9uLXRyaXZpYWwuCisgICBSZXR1cm4gMCBpZiBpdCBpcyB0cml2aWFsLiAgKi8KK2V4 dGVybiBpbnQgYWNsX2V4dGVuZGVkX25vbnRyaXZpYWwgKGFjbF90KTsKKyMgIGVsc2UKKy8q IEFDTCBpcyBhbiBBQ0wsIGZyb20gYSBmaWxlLCBzdG9yZWQgYXMgdHlwZSBBQ0xfVFlQRV9B Q0NFU1MuCisgICBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgor ICAgUmV0dXJuIDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50IHRvIGEgc2lt cGxlIHN0YXQoKSBtb2RlLgorICAgUmV0dXJuIC0xIGFuZCBzZXQgZXJybm8gdXBvbiBmYWls dXJlIHRvIGRldGVybWluZSBpdC4gICovCitleHRlcm4gaW50IGFjbF9hY2Nlc3Nfbm9udHJp dmlhbCAoYWNsX3QpOworIyAgZW5kaWYKKworIyBlbGlmIEhBVkVfRkFDTCAmJiBkZWZpbmVk IEdFVEFDTCAvKiBTb2xhcmlzLCBDeWd3aW4sIG5vdCBIUC1VWCAqLworCisvKiBTZXQgdG8g MSBpZiBhIGZpbGUncyBtb2RlIGlzIGltcGxpY2l0IGJ5IHRoZSBBQ0wuCisgICBTZXQgdG8g MCBpZiBhIGZpbGUncyBtb2RlIGlzIHN0b3JlZCBpbmRlcGVuZGVudGx5IGZyb20gdGhlIEFD TC4gICovCisjICBpZiBkZWZpbmVkIF9fQ1lHV0lOX18gLyogQ3lnd2luICovCisjICAgZGVm aW5lIE1PREVfSU5TSURFX0FDTCAwCisjICBlbHNlIC8qIFNvbGFyaXMgKi8KKyMgICBkZWZp bmUgTU9ERV9JTlNJREVfQUNMIDEKKyMgIGVuZGlmCisKKy8qIFJldHVybiAxIGlmIHRoZSBn aXZlbiBBQ0wgaXMgbm9uLXRyaXZpYWwuCisgICBSZXR1cm4gMCBpZiBpdCBpcyB0cml2aWFs LCBpLmUuIGVxdWl2YWxlbnQgdG8gYSBzaW1wbGUgc3RhdCgpIG1vZGUuICAqLworZXh0ZXJu IGludCBhY2xfbm9udHJpdmlhbCAoaW50IGNvdW50LCBhY2xlbnRfdCAqZW50cmllcyk7CisK KyMgIGlmZGVmIEFDRV9HRVRBQ0wgLyogU29sYXJpcyAxMCAqLworCisvKiBUZXN0IGFuIEFD TCByZXRyaWV2ZWQgd2l0aCBBQ0VfR0VUQUNMLgorICAgUmV0dXJuIDEgaWYgdGhlIGdpdmVu IEFDTCwgY29uc2lzdGluZyBvZiBDT1VOVCBlbnRyaWVzLCBpcyBub24tdHJpdmlhbC4KKyAg IFJldHVybiAwIGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNpbXBs ZSBzdGF0KCkgbW9kZS4gICovCitleHRlcm4gaW50IGFjbF9hY2Vfbm9udHJpdmlhbCAoaW50 IGNvdW50LCBhY2VfdCAqZW50cmllcyk7CisKKy8qIERlZmluaXRpb25zIGZvciB3aGVuIHRo ZSBidWlsdCBleGVjdXRhYmxlIGlzIGV4ZWN1dGVkIG9uIFNvbGFyaXMgMTAKKyAgIChuZXdl ciB2ZXJzaW9uKSBvciBTb2xhcmlzIDExLiAgKi8KKy8qIEZvciBhX3R5cGUuICAqLworIyAg IGRlZmluZSBPTERfQUxMT1cgMAorIyAgIGRlZmluZSBPTERfREVOWSAgMQorIyAgIGRlZmlu ZSBORVdfQUNFX0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFIDAgLyogcmVwbGFjZXMgQUxMT1cg Ki8KKyMgICBkZWZpbmUgTkVXX0FDRV9BQ0NFU1NfREVOSUVEX0FDRV9UWVBFICAxIC8qIHJl cGxhY2VzIERFTlkgKi8KKy8qIEZvciBhX2ZsYWdzLiAgKi8KKyMgICBkZWZpbmUgT0xEX0FD RV9PV05FUiAgICAgICAgICAgIDB4MDEwMAorIyAgIGRlZmluZSBPTERfQUNFX0dST1VQICAg ICAgICAgICAgMHgwMjAwCisjICAgZGVmaW5lIE9MRF9BQ0VfT1RIRVIgICAgICAgICAgICAw eDA0MDAKKyMgICBkZWZpbmUgTkVXX0FDRV9PV05FUiAgICAgICAgICAgIDB4MTAwMAorIyAg IGRlZmluZSBORVdfQUNFX0dST1VQICAgICAgICAgICAgMHgyMDAwCisjICAgZGVmaW5lIE5F V19BQ0VfSURFTlRJRklFUl9HUk9VUCAweDAwNDAKKyMgICBkZWZpbmUgTkVXX0FDRV9FVkVS WU9ORSAgICAgICAgIDB4NDAwMAorLyogRm9yIGFfYWNjZXNzX21hc2suICAqLworIyAgIGRl ZmluZSBORVdfQUNFX1JFQURfREFUQSAgICAgICAgIDB4MDAxIC8qIGNvcnJlc3BvbmRzIHRv ICdyJyAqLworIyAgIGRlZmluZSBORVdfQUNFX1dSSVRFX0RBVEEgICAgICAgIDB4MDAyIC8q IGNvcnJlc3BvbmRzIHRvICd3JyAqLworIyAgIGRlZmluZSBORVdfQUNFX0FQUEVORF9EQVRB ICAgICAgIDB4MDA0CisjICAgZGVmaW5lIE5FV19BQ0VfUkVBRF9OQU1FRF9BVFRSUyAgMHgw MDgKKyMgICBkZWZpbmUgTkVXX0FDRV9XUklURV9OQU1FRF9BVFRSUyAweDAxMAorIyAgIGRl ZmluZSBORVdfQUNFX0VYRUNVVEUgICAgICAgICAgIDB4MDIwCisjICAgZGVmaW5lIE5FV19B Q0VfREVMRVRFX0NISUxEICAgICAgMHgwNDAKKyMgICBkZWZpbmUgTkVXX0FDRV9SRUFEX0FU VFJJQlVURVMgICAweDA4MAorIyAgIGRlZmluZSBORVdfQUNFX1dSSVRFX0FUVFJJQlVURVMg IDB4MTAwCisjICAgZGVmaW5lIE5FV19BQ0VfREVMRVRFICAgICAgICAgIDB4MTAwMDAKKyMg ICBkZWZpbmUgTkVXX0FDRV9SRUFEX0FDTCAgICAgICAgMHgyMDAwMAorIyAgIGRlZmluZSBO RVdfQUNFX1dSSVRFX0FDTCAgICAgICAweDQwMDAwCisjICAgZGVmaW5lIE5FV19BQ0VfV1JJ VEVfT1dORVIgICAgIDB4ODAwMDAKKyMgICBkZWZpbmUgTkVXX0FDRV9TWU5DSFJPTklaRSAg ICAweDEwMDAwMAorCisjICBlbmRpZgorCisjIGVsaWYgSEFWRV9HRVRBQ0wgLyogSFAtVVgg Ki8KKworLyogUmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCBpcyBub24tdHJpdmlhbC4KKyAg IFJldHVybiAwIGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNpbXBs ZSBzdGF0KCkgbW9kZS4gICovCitleHRlcm4gaW50IGFjbF9ub250cml2aWFsIChpbnQgY291 bnQsIHN0cnVjdCBhY2xfZW50cnkgKmVudHJpZXMsIHN0cnVjdCBzdGF0ICpzYik7CisKKyMg IGlmIEhBVkVfQUNMVl9IIC8qIEhQLVVYID49IDExLjExICovCisKKy8qIFJldHVybiAxIGlm IHRoZSBnaXZlbiBBQ0wgaXMgbm9uLXRyaXZpYWwuCisgICBSZXR1cm4gMCBpZiBpdCBpcyB0 cml2aWFsLCBpLmUuIGVxdWl2YWxlbnQgdG8gYSBzaW1wbGUgc3RhdCgpIG1vZGUuICAqLwor ZXh0ZXJuIGludCBhY2x2X25vbnRyaXZpYWwgKGludCBjb3VudCwgc3RydWN0IGFjbCAqZW50 cmllcyk7CisKKyMgIGVuZGlmCisKKyMgZWxpZiBIQVZFX0FDTFhfR0VUICYmIDAgLyogQUlY ICovCisKKy8qIFRPRE8gKi8KKworIyBlbGlmIEhBVkVfU1RBVEFDTCAvKiBvbGRlciBBSVgg Ki8KKworLyogUmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCBpcyBub24tdHJpdmlhbC4KKyAg IFJldHVybiAwIGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNpbXBs ZSBzdGF0KCkgbW9kZS4gICovCitleHRlcm4gaW50IGFjbF9ub250cml2aWFsIChzdHJ1Y3Qg YWNsICphKTsKKworIyBlbGlmIEhBVkVfQUNMU09SVCAvKiBOb25TdG9wIEtlcm5lbCAqLwor CisvKiBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgorICAgUmV0 dXJuIDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50IHRvIGEgc2ltcGxlIHN0 YXQoKSBtb2RlLiAgKi8KK2V4dGVybiBpbnQgYWNsX25vbnRyaXZpYWwgKGludCBjb3VudCwg c3RydWN0IGFjbCAqZW50cmllcyk7CisKKyMgZW5kaWYKKworI2VuZGlmCisKK19HTF9JTkxJ TkVfSEVBREVSX0VORAoKPT09IGFkZGVkIGZpbGUgJ2xpYi9hY2wuaCcKLS0tIGxpYi9hY2wu aAkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIvYWNsLmgJMjAxMy0wNC0xNyAw NToyMTozMyArMDAwMApAQCAtMCwwICsxLDMwIEBACisvKiBhY2wuYyAtIGFjY2VzcyBjb250 cm9sIGxpc3RzCisKKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwOC0yMDEzIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyAgIFdyaXR0ZW4gYnkgUGF1bCBF Z2dlcnQuICAqLworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN5cy90eXBl cy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKK2Jvb2wgYWNsX2Vycm5vX3ZhbGlkIChp bnQpIF9HTF9BVFRSSUJVVEVfQ09OU1Q7CitpbnQgZmlsZV9oYXNfYWNsIChjaGFyIGNvbnN0 ICosIHN0cnVjdCBzdGF0IGNvbnN0ICopOworaW50IHFzZXRfYWNsIChjaGFyIGNvbnN0ICos IGludCwgbW9kZV90KTsKK2ludCBzZXRfYWNsIChjaGFyIGNvbnN0ICosIGludCwgbW9kZV90 KTsKK2ludCBxY29weV9hY2wgKGNoYXIgY29uc3QgKiwgaW50LCBjaGFyIGNvbnN0ICosIGlu dCwgbW9kZV90KTsKK2ludCBjb3B5X2FjbCAoY2hhciBjb25zdCAqLCBpbnQsIGNoYXIgY29u c3QgKiwgaW50LCBtb2RlX3QpOworaW50IGNobW9kX29yX2ZjaG1vZCAoY2hhciBjb25zdCAq LCBpbnQsIG1vZGVfdCk7Cgo9PT0gYWRkZWQgZmlsZSAnbGliL2FjbF9lbnRyaWVzLmMnCi0t LSBsaWIvYWNsX2VudHJpZXMuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIv YWNsX2VudHJpZXMuYwkyMDEzLTA0LTE3IDA1OjIxOjMzICswMDAwCkBAIC0wLDAgKzEsNzUg QEAKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYW4gQUNMLgorCisgICBD b3B5cmlnaHQgKEMpIDIwMDItMjAwMywgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAg IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor CisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor ICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisKKyAgIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQgYW5kIEFu ZHJlYXMgR3J1ZW5iYWNoZXIuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNs dWRlICJhY2wtaW50ZXJuYWwuaCIKKworLyogVGhpcyBmaWxlIGFzc3VtZXMgUE9TSVgtZHJh ZnQgbGlrZSBBQ0xzCisgICAoTGludXgsIEZyZWVCU0QsIE1hYyBPUyBYLCBJUklYLCBUcnU2 NCkuICAqLworCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIEFDTC4KKyAg IFJldHVybiAtMSBhbmQgc2V0IGVycm5vIHVwb24gZmFpbHVyZSB0byBkZXRlcm1pbmUgaXQu ICAqLworCitpbnQKK2FjbF9lbnRyaWVzIChhY2xfdCBhY2wpCit7CisgIGludCBjb3VudCA9 IDA7CisKKyAgaWYgKGFjbCAhPSBOVUxMKQorICAgIHsKKyNpZiBIQVZFX0FDTF9GSVJTVF9F TlRSWSAvKiBMaW51eCwgRnJlZUJTRCwgTWFjIE9TIFggKi8KKyMgaWYgSEFWRV9BQ0xfVFlQ RV9FWFRFTkRFRCAvKiBNYWMgT1MgWCAqLworICAgICAgLyogYWNsX2dldF9lbnRyeSByZXR1 cm5zIDAgd2hlbiBpdCBzdWNjZXNzZnVsbHkgZmV0Y2hlcyBhbiBlbnRyeSwKKyAgICAgICAg IGFuZCAtMS9FSU5WQUwgYXQgdGhlIGVuZC4gICovCisgICAgICBhY2xfZW50cnlfdCBhY2U7 CisgICAgICBpbnQgZ290X29uZTsKKworICAgICAgZm9yIChnb3Rfb25lID0gYWNsX2dldF9l bnRyeSAoYWNsLCBBQ0xfRklSU1RfRU5UUlksICZhY2UpOworICAgICAgICAgICBnb3Rfb25l ID49IDA7CisgICAgICAgICAgIGdvdF9vbmUgPSBhY2xfZ2V0X2VudHJ5IChhY2wsIEFDTF9O RVhUX0VOVFJZLCAmYWNlKSkKKyAgICAgICAgY291bnQrKzsKKyMgZWxzZSAvKiBMaW51eCwg RnJlZUJTRCAqLworICAgICAgLyogYWNsX2dldF9lbnRyeSByZXR1cm5zIDEgd2hlbiBpdCBz dWNjZXNzZnVsbHkgZmV0Y2hlcyBhbiBlbnRyeSwKKyAgICAgICAgIGFuZCAwIGF0IHRoZSBl bmQuICAqLworICAgICAgYWNsX2VudHJ5X3QgYWNlOworICAgICAgaW50IGdvdF9vbmU7CisK KyAgICAgIGZvciAoZ290X29uZSA9IGFjbF9nZXRfZW50cnkgKGFjbCwgQUNMX0ZJUlNUX0VO VFJZLCAmYWNlKTsKKyAgICAgICAgICAgZ290X29uZSA+IDA7CisgICAgICAgICAgIGdvdF9v bmUgPSBhY2xfZ2V0X2VudHJ5IChhY2wsIEFDTF9ORVhUX0VOVFJZLCAmYWNlKSkKKyAgICAg ICAgY291bnQrKzsKKyAgICAgIGlmIChnb3Rfb25lIDwgMCkKKyAgICAgICAgcmV0dXJuIC0x OworIyBlbmRpZgorI2Vsc2UgLyogSVJJWCwgVHJ1NjQgKi8KKyMgaWYgSEFWRV9BQ0xfVE9f U0hPUlRfVEVYVCAvKiBJUklYICovCisgICAgICAvKiBEb24ndCB1c2UgYWNsX2dldF9lbnRy eTogaXQgaXMgdW5kb2N1bWVudGVkLiAgKi8KKyAgICAgIGNvdW50ID0gYWNsLT5hY2xfY250 OworIyBlbmRpZgorIyBpZiBIQVZFX0FDTF9GUkVFX1RFWFQgLyogVHJ1NjQgKi8KKyAgICAg IC8qIERvbid0IHVzZSBhY2xfZ2V0X2VudHJ5OiBpdCB0YWtlcyBvbmx5IG9uZSBhcmd1bWVu dCBhbmQgZG9lcyBub3QKKyAgICAgICAgIHdvcmsuICAqLworICAgICAgY291bnQgPSBhY2wt PmFjbF9udW07CisjIGVuZGlmCisjZW5kaWYKKyAgICB9CisKKyAgcmV0dXJuIGNvdW50Owor fQoKPT09IGFkZGVkIGZpbGUgJ2xpYi9maWxlLWhhcy1hY2wuYycKLS0tIGxpYi9maWxlLWhh cy1hY2wuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIvZmlsZS1oYXMtYWNs LmMJMjAxMy0wNC0xOCAwMTozNTowOCArMDAwMApAQCAtMCwwICsxLDkxOCBAQAorLyogVGVz dCB3aGV0aGVyIGEgZmlsZSBoYXMgYSBub250cml2aWFsIGFjY2VzcyBjb250cm9sIGxpc3Qu CisKKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAyMDA1LTIwMTMgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworICAgV3JpdHRlbiBieSBQYXVsIEVnZ2Vy dCwgQW5kcmVhcyBHcsO8bmJhY2hlciwgYW5kIEJydW5vIEhhaWJsZS4gICovCisKKy8qIFdp dGhvdXQgdGhpcyBwcmFnbWEsIGdjYyA0LjcuMCAyMDEyMDEyNiBtYXkgc3VnZ2VzdCB0aGF0 IHRoZQorICAgZmlsZV9oYXNfYWNsIGZ1bmN0aW9uIG1pZ2h0IGJlIGNhbmRpZGF0ZSBmb3Ig YXR0cmlidXRlICdjb25zdCcgICovCisjaWYgKF9fR05VQ19fID09IDQgJiYgNiA8PSBfX0dO VUNfTUlOT1JfXykgfHwgNCA8IF9fR05VQ19fCisjIHByYWdtYSBHQ0MgZGlhZ25vc3RpYyBp Z25vcmVkICItV3N1Z2dlc3QtYXR0cmlidXRlPWNvbnN0IgorI2VuZGlmCisKKyNpbmNsdWRl IDxjb25maWcuaD4KKworI2luY2x1ZGUgImFjbC5oIgorCisjaW5jbHVkZSAiYWNsLWludGVy bmFsLmgiCisKKworI2lmIFVTRV9BQ0wgJiYgSEFWRV9BQ0xfR0VUX0ZJTEUKKworIyBpZiBI QVZFX0FDTF9UWVBFX0VYVEVOREVEIC8qIE1hYyBPUyBYICovCisKKy8qIEFDTCBpcyBhbiBB Q0wsIGZyb20gYSBmaWxlLCBzdG9yZWQgYXMgdHlwZSBBQ0xfVFlQRV9FWFRFTkRFRC4KKyAg IFJldHVybiAxIGlmIHRoZSBnaXZlbiBBQ0wgaXMgbm9uLXRyaXZpYWwuCisgICBSZXR1cm4g MCBpZiBpdCBpcyB0cml2aWFsLiAgKi8KK2ludAorYWNsX2V4dGVuZGVkX25vbnRyaXZpYWwg KGFjbF90IGFjbCkKK3sKKyAgLyogYWNsIGlzIG5vbi10cml2aWFsIGlmIGl0IGlzIG5vbi1l bXB0eS4gICovCisgIHJldHVybiAoYWNsX2VudHJpZXMgKGFjbCkgPiAwKTsKK30KKworIyBl bHNlIC8qIExpbnV4LCBGcmVlQlNELCBJUklYLCBUcnU2NCAqLworCisvKiBBQ0wgaXMgYW4g QUNMLCBmcm9tIGEgZmlsZSwgc3RvcmVkIGFzIHR5cGUgQUNMX1RZUEVfQUNDRVNTLgorICAg UmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCBpcyBub24tdHJpdmlhbC4KKyAgIFJldHVybiAw IGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNpbXBsZSBzdGF0KCkg bW9kZS4KKyAgIFJldHVybiAtMSBhbmQgc2V0IGVycm5vIHVwb24gZmFpbHVyZSB0byBkZXRl cm1pbmUgaXQuICAqLworaW50CithY2xfYWNjZXNzX25vbnRyaXZpYWwgKGFjbF90IGFjbCkK K3sKKyAgLyogYWNsIGlzIG5vbi10cml2aWFsIGlmIGl0IGhhcyBzb21lIGVudHJpZXMgb3Ro ZXIgdGhhbiBmb3IgInVzZXI6OiIsCisgICAgICJncm91cDo6IiwgYW5kICJvdGhlcjo6Ii4g IE5vcm1hbGx5IHRoZXNlIHRocmVlIHNob3VsZCBiZSBwcmVzZW50CisgICAgIGF0IGxlYXN0 LCBhbGxvd2luZyB1cyB0byB3cml0ZQorICAgICAgICByZXR1cm4gKDMgPCBhY2xfZW50cmll cyAoYWNsKSk7CisgICAgIGJ1dCB0aGUgZm9sbG93aW5nIGNvZGUgaXMgbW9yZSByb2J1c3Qu ICAqLworIyAgaWYgSEFWRV9BQ0xfRklSU1RfRU5UUlkgLyogTGludXgsIEZyZWVCU0QgKi8K KworICBhY2xfZW50cnlfdCBhY2U7CisgIGludCBnb3Rfb25lOworCisgIGZvciAoZ290X29u ZSA9IGFjbF9nZXRfZW50cnkgKGFjbCwgQUNMX0ZJUlNUX0VOVFJZLCAmYWNlKTsKKyAgICAg ICBnb3Rfb25lID4gMDsKKyAgICAgICBnb3Rfb25lID0gYWNsX2dldF9lbnRyeSAoYWNsLCBB Q0xfTkVYVF9FTlRSWSwgJmFjZSkpCisgICAgeworICAgICAgYWNsX3RhZ190IHRhZzsKKyAg ICAgIGlmIChhY2xfZ2V0X3RhZ190eXBlIChhY2UsICZ0YWcpIDwgMCkKKyAgICAgICAgcmV0 dXJuIC0xOworICAgICAgaWYgKCEodGFnID09IEFDTF9VU0VSX09CSiB8fCB0YWcgPT0gQUNM X0dST1VQX09CSiB8fCB0YWcgPT0gQUNMX09USEVSKSkKKyAgICAgICAgcmV0dXJuIDE7Cisg ICAgfQorICByZXR1cm4gZ290X29uZTsKKworIyAgZWxzZSAvKiBJUklYLCBUcnU2NCAqLwor IyAgIGlmIEhBVkVfQUNMX1RPX1NIT1JUX1RFWFQgLyogSVJJWCAqLworICAvKiBEb24ndCB1 c2UgYWNsX2dldF9lbnRyeTogaXQgaXMgdW5kb2N1bWVudGVkLiAgKi8KKworICBpbnQgY291 bnQgPSBhY2wtPmFjbF9jbnQ7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBjb3Vu dDsgaSsrKQorICAgIHsKKyAgICAgIGFjbF9lbnRyeV90IGFjZSA9ICZhY2wtPmFjbF9lbnRy eVtpXTsKKyAgICAgIGFjbF90YWdfdCB0YWcgPSBhY2UtPmFlX3RhZzsKKworICAgICAgaWYg KCEodGFnID09IEFDTF9VU0VSX09CSiB8fCB0YWcgPT0gQUNMX0dST1VQX09CSgorICAgICAg ICAgICAgfHwgdGFnID09IEFDTF9PVEhFUl9PQkopKQorICAgICAgICByZXR1cm4gMTsKKyAg ICB9CisgIHJldHVybiAwOworCisjICAgZW5kaWYKKyMgICBpZiBIQVZFX0FDTF9GUkVFX1RF WFQgLyogVHJ1NjQgKi8KKyAgLyogRG9uJ3QgdXNlIGFjbF9nZXRfZW50cnk6IGl0IHRha2Vz IG9ubHkgb25lIGFyZ3VtZW50IGFuZCBkb2VzIG5vdCB3b3JrLiAgKi8KKworICBpbnQgY291 bnQgPSBhY2wtPmFjbF9udW07CisgIGFjbF9lbnRyeV90IGFjZTsKKworICBmb3IgKGFjZSA9 IGFjbC0+YWNsX2ZpcnN0OyBjb3VudCA+IDA7IGFjZSA9IGFjZS0+bmV4dCwgY291bnQtLSkK KyAgICB7CisgICAgICBhY2xfdGFnX3QgdGFnOworICAgICAgYWNsX3Blcm1fdCBwZXJtOwor CisgICAgICB0YWcgPSBhY2UtPmVudHJ5LT5hY2xfdHlwZTsKKyAgICAgIGlmICghKHRhZyA9 PSBBQ0xfVVNFUl9PQkogfHwgdGFnID09IEFDTF9HUk9VUF9PQkogfHwgdGFnID09IEFDTF9P VEhFUikpCisgICAgICAgIHJldHVybiAxOworCisgICAgICBwZXJtID0gYWNlLT5lbnRyeS0+ YWNsX3Blcm07CisgICAgICAvKiBPbiBUcnU2NCwgcGVybSBjYW4gYWxzbyBjb250YWluIG5v bi1zdGFuZGFyZCBiaXRzIHN1Y2ggYXMKKyAgICAgICAgIFBFUk1fSU5TRVJULCBQRVJNX0RF TEVURSwgUEVSTV9NT0RJRlksIFBFUk1fTE9PS1VQLCAuLi4gKi8KKyAgICAgIGlmICgocGVy bSAmIH4oQUNMX1JFQUQgfCBBQ0xfV1JJVEUgfCBBQ0xfRVhFQ1VURSkpICE9IDApCisgICAg ICAgIHJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7CisKKyMgICBlbmRpZgorIyAgZW5k aWYKK30KKworIyBlbmRpZgorCisKKyNlbGlmIFVTRV9BQ0wgJiYgSEFWRV9GQUNMICYmIGRl ZmluZWQgR0VUQUNMIC8qIFNvbGFyaXMsIEN5Z3dpbiwgbm90IEhQLVVYICovCisKKy8qIFRl c3QgYW4gQUNMIHJldHJpZXZlZCB3aXRoIEdFVEFDTC4KKyAgIFJldHVybiAxIGlmIHRoZSBn aXZlbiBBQ0wsIGNvbnNpc3Rpbmcgb2YgQ09VTlQgZW50cmllcywgaXMgbm9uLXRyaXZpYWwu CisgICBSZXR1cm4gMCBpZiBpdCBpcyB0cml2aWFsLCBpLmUuIGVxdWl2YWxlbnQgdG8gYSBz aW1wbGUgc3RhdCgpIG1vZGUuICAqLworaW50CithY2xfbm9udHJpdmlhbCAoaW50IGNvdW50 LCBhY2xlbnRfdCAqZW50cmllcykKK3sKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8 IGNvdW50OyBpKyspCisgICAgeworICAgICAgYWNsZW50X3QgKmFjZSA9ICZlbnRyaWVzW2ld OworCisgICAgICAvKiBOb3RlOiBJZiBhY2UtPmFfdHlwZSA9IFVTRVJfT0JKLCBhY2UtPmFf aWQgaXMgdGhlIHN0X3VpZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIElmIGFjZS0+YV90eXBl ID0gR1JPVVBfT0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X2dpZCBmcm9tIHN0YXQoKS4KKyAg ICAgICAgIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgYWNlLT5hX2lkIGluIHRoZXNlIGNhc2Vz LiAgKi8KKyAgICAgIGlmICghKGFjZS0+YV90eXBlID09IFVTRVJfT0JKCisgICAgICAgICAg ICB8fCBhY2UtPmFfdHlwZSA9PSBHUk9VUF9PQkoKKyAgICAgICAgICAgIHx8IGFjZS0+YV90 eXBlID09IE9USEVSX09CSgorICAgICAgICAgICAgLyogTm90ZTogQ3lnd2luIGRvZXMgbm90 IHJldHVybiBhIENMQVNTX09CSiAoIm1hc2s6IikgZW50cnkKKyAgICAgICAgICAgICAgIHNv bWV0aW1lcy4gICovCisgICAgICAgICAgICB8fCBhY2UtPmFfdHlwZSA9PSBDTEFTU19PQkop KQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAwOworfQorCisjIGlmZGVm IEFDRV9HRVRBQ0wKKworLyogQSBzaG9ydGN1dCBmb3IgYSBiaXRtYXNrLiAgKi8KKyMgIGRl ZmluZSBORVdfQUNFX1dSSVRFQV9EQVRBIChORVdfQUNFX1dSSVRFX0RBVEEgfCBORVdfQUNF X0FQUEVORF9EQVRBKQorCisvKiBUZXN0IGFuIEFDTCByZXRyaWV2ZWQgd2l0aCBBQ0VfR0VU QUNMLgorICAgUmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCwgY29uc2lzdGluZyBvZiBDT1VO VCBlbnRyaWVzLCBpcyBub24tdHJpdmlhbC4KKyAgIFJldHVybiAwIGlmIGl0IGlzIHRyaXZp YWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNpbXBsZSBzdGF0KCkgbW9kZS4gICovCitpbnQK K2FjbF9hY2Vfbm9udHJpdmlhbCAoaW50IGNvdW50LCBhY2VfdCAqZW50cmllcykKK3sKKyAg aW50IGk7CisKKyAgLyogVGhlIGZsYWdzIGluIHRoZSBhY2VfdCBzdHJ1Y3R1cmUgY2hhbmdl ZCBpbiBhIGJpbmFyeSBpbmNvbXBhdGlibGUgd2F5CisgICAgIHdoZW4gQUNMX05PX1RSSVZJ QUwgZXRjLiB3ZXJlIGludHJvZHVjZWQgaW4gPHN5cy9hY2wuaD4gdmVyc2lvbiAxLjE1Lgor ICAgICBIb3cgdG8gZGlzdGluZ3Vpc2ggdGhlIHR3byBjb252ZW50aW9ucyBhdCBydW50aW1l PworICAgICBJbiB0aGUgb2xkIGNvbnZlbnRpb24sIHVzdWFsbHkgdGhyZWUgQUNFcyBoYXZl IGFfZmxhZ3MgPSBBQ0VfT1dORVIgLworICAgICBBQ0VfR1JPVVAgLyBBQ0VfT1RIRVIsIGlu IHRoZSByYW5nZSAweDAxMDAuLjB4MDQwMC4gIEluIHRoZSBuZXcKKyAgICAgY29udmVudGlv biwgdGhlc2UgdmFsdWVzIGFyZSBub3QgdXNlZC4gICovCisgIGludCBvbGRfY29udmVudGlv biA9IDA7CisKKyAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgaWYgKGVudHJp ZXNbaV0uYV9mbGFncyAmIChPTERfQUNFX09XTkVSIHwgT0xEX0FDRV9HUk9VUCB8IE9MRF9B Q0VfT1RIRVIpKQorICAgICAgeworICAgICAgICBvbGRfY29udmVudGlvbiA9IDE7CisgICAg ICAgIGJyZWFrOworICAgICAgfQorCisgIGlmIChvbGRfY29udmVudGlvbikKKyAgICAvKiBS dW5uaW5nIG9uIFNvbGFyaXMgMTAuICAqLworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsg aSsrKQorICAgICAgeworICAgICAgICBhY2VfdCAqYWNlID0gJmVudHJpZXNbaV07CisKKyAg ICAgICAgLyogTm90ZToKKyAgICAgICAgICAgSWYgYWNlLT5hX2ZsYWdzID0gQUNFX09XTkVS LCBhY2UtPmFfd2hvIGlzIHRoZSBzdF91aWQgZnJvbSBzdGF0KCkuCisgICAgICAgICAgIElm IGFjZS0+YV9mbGFncyA9IEFDRV9HUk9VUCwgYWNlLT5hX3dobyBpcyB0aGUgc3RfZ2lkIGZy b20gc3RhdCgpLgorICAgICAgICAgICBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGFjZS0+YV93 aG8gaW4gdGhlc2UgY2FzZXMuICAqLworICAgICAgICBpZiAoIShhY2UtPmFfdHlwZSA9PSBP TERfQUxMT1cKKyAgICAgICAgICAgICAgJiYgKGFjZS0+YV9mbGFncyA9PSBPTERfQUNFX09X TkVSCisgICAgICAgICAgICAgICAgICB8fCBhY2UtPmFfZmxhZ3MgPT0gT0xEX0FDRV9HUk9V UAorICAgICAgICAgICAgICAgICAgfHwgYWNlLT5hX2ZsYWdzID09IE9MRF9BQ0VfT1RIRVIp KSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAg IC8qIFJ1bm5pbmcgb24gU29sYXJpcyAxMCAobmV3ZXIgdmVyc2lvbikgb3IgU29sYXJpcyAx MS4gICovCisgICAgICB1bnNpZ25lZCBpbnQgYWNjZXNzX21hc2tzWzZdID0KKyAgICAgICAg eworICAgICAgICAgIDAsIC8qIG93bmVyQCBkZW55ICovCisgICAgICAgICAgMCwgLyogb3du ZXJAIGFsbG93ICovCisgICAgICAgICAgMCwgLyogZ3JvdXBAIGRlbnkgKi8KKyAgICAgICAg ICAwLCAvKiBncm91cEAgYWxsb3cgKi8KKyAgICAgICAgICAwLCAvKiBldmVyeW9uZUAgZGVu eSAqLworICAgICAgICAgIDAgIC8qIGV2ZXJ5b25lQCBhbGxvdyAqLworICAgICAgICB9Owor CisgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAg ICAgIGFjZV90ICphY2UgPSAmZW50cmllc1tpXTsKKyAgICAgICAgICB1bnNpZ25lZCBpbnQg aW5kZXgxOworICAgICAgICAgIHVuc2lnbmVkIGludCBpbmRleDI7CisKKyAgICAgICAgICBp ZiAoYWNlLT5hX3R5cGUgPT0gTkVXX0FDRV9BQ0NFU1NfQUxMT1dFRF9BQ0VfVFlQRSkKKyAg ICAgICAgICAgIGluZGV4MSA9IDE7CisgICAgICAgICAgZWxzZSBpZiAoYWNlLT5hX3R5cGUg PT0gTkVXX0FDRV9BQ0NFU1NfREVOSUVEX0FDRV9UWVBFKQorICAgICAgICAgICAgaW5kZXgx ID0gMDsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAg ICAgIGlmIChhY2UtPmFfZmxhZ3MgPT0gTkVXX0FDRV9PV05FUikKKyAgICAgICAgICAgIGlu ZGV4MiA9IDA7CisgICAgICAgICAgZWxzZSBpZiAoYWNlLT5hX2ZsYWdzID09IChORVdfQUNF X0dST1VQIHwgTkVXX0FDRV9JREVOVElGSUVSX0dST1VQKSkKKyAgICAgICAgICAgIGluZGV4 MiA9IDI7CisgICAgICAgICAgZWxzZSBpZiAoYWNlLT5hX2ZsYWdzID09IE5FV19BQ0VfRVZF UllPTkUpCisgICAgICAgICAgICBpbmRleDIgPSA0OworICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgYWNjZXNzX21hc2tzW2luZGV4MSArIGlu ZGV4Ml0gfD0gYWNlLT5hX2FjY2Vzc19tYXNrOworICAgICAgICB9CisKKyAgICAgIC8qIFRo ZSBzYW1lIGJpdCBzaG91bGRuJ3QgYmUgYm90aCBhbGxvd2VkIGFuZCBkZW5pZWQuICAqLwor ICAgICAgaWYgKGFjY2Vzc19tYXNrc1swXSAmIGFjY2Vzc19tYXNrc1sxXSkKKyAgICAgICAg cmV0dXJuIDE7CisgICAgICBpZiAoYWNjZXNzX21hc2tzWzJdICYgYWNjZXNzX21hc2tzWzNd KQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGlmIChhY2Nlc3NfbWFza3NbNF0gJiBhY2Nl c3NfbWFza3NbNV0pCisgICAgICAgIHJldHVybiAxOworCisgICAgICAvKiBDaGVjayBtaW5p bXVtIG1hc2tzLiAgKi8KKyAgICAgIGlmICgoTkVXX0FDRV9XUklURV9OQU1FRF9BVFRSUwor ICAgICAgICAgICB8IE5FV19BQ0VfV1JJVEVfQVRUUklCVVRFUworICAgICAgICAgICB8IE5F V19BQ0VfV1JJVEVfQUNMCisgICAgICAgICAgIHwgTkVXX0FDRV9XUklURV9PV05FUikKKyAg ICAgICAgICAmIH4gYWNjZXNzX21hc2tzWzFdKQorICAgICAgICByZXR1cm4gMTsKKyAgICAg IGFjY2Vzc19tYXNrc1sxXSAmPSB+KE5FV19BQ0VfV1JJVEVfTkFNRURfQVRUUlMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9XUklURV9BVFRSSUJVVEVTCisgICAg ICAgICAgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfV1JJVEVfQUNMCisgICAgICAgICAg ICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfV1JJVEVfT1dORVIpOworICAgICAgaWYgKChO RVdfQUNFX1JFQURfTkFNRURfQVRUUlMKKyAgICAgICAgICAgfCBORVdfQUNFX1JFQURfQVRU UklCVVRFUworICAgICAgICAgICB8IE5FV19BQ0VfUkVBRF9BQ0wKKyAgICAgICAgICAgfCBO RVdfQUNFX1NZTkNIUk9OSVpFKQorICAgICAgICAgICYgfiBhY2Nlc3NfbWFza3NbNV0pCisg ICAgICAgIHJldHVybiAxOworICAgICAgYWNjZXNzX21hc2tzWzVdICY9IH4oTkVXX0FDRV9S RUFEX05BTUVEX0FUVFJTCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5FV19BQ0Vf UkVBRF9BVFRSSUJVVEVTCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5FV19BQ0Vf UkVBRF9BQ0wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9TWU5DSFJP TklaRSk7CisKKyAgICAgIC8qIENoZWNrIHRoZSBhbGxvd2VkIG9yIGRlbmllZCBiaXRzLiAg Ki8KKyAgICAgIHN3aXRjaCAoKGFjY2Vzc19tYXNrc1swXSB8IGFjY2Vzc19tYXNrc1sxXSkK KyAgICAgICAgICAgICAgJiB+KE5FV19BQ0VfUkVBRF9OQU1FRF9BVFRSUworICAgICAgICAg ICAgICAgICAgfCBORVdfQUNFX1JFQURfQVRUUklCVVRFUworICAgICAgICAgICAgICAgICAg fCBORVdfQUNFX1JFQURfQUNMCisgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfU1lOQ0hS T05JWkUpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgY2FzZSBORVdf QUNFX1JFQURfREFUQToKKyAgICAgICAgY2FzZSAgICAgICAgICAgICAgICAgICAgIE5FV19B Q0VfV1JJVEVBX0RBVEE6CisgICAgICAgIGNhc2UgTkVXX0FDRV9SRUFEX0RBVEEgfCBORVdf QUNFX1dSSVRFQV9EQVRBOgorICAgICAgICBjYXNlICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5FV19BQ0VfRVhFQ1VURToKKyAgICAgICAgY2FzZSBORVdf QUNFX1JFQURfREFUQSB8ICAgICAgICAgICAgICAgICAgICAgICBORVdfQUNFX0VYRUNVVEU6 CisgICAgICAgIGNhc2UgICAgICAgICAgICAgICAgICAgICBORVdfQUNFX1dSSVRFQV9EQVRB IHwgTkVXX0FDRV9FWEVDVVRFOgorICAgICAgICBjYXNlIE5FV19BQ0VfUkVBRF9EQVRBIHwg TkVXX0FDRV9XUklURUFfREFUQSB8IE5FV19BQ0VfRVhFQ1VURToKKyAgICAgICAgICBicmVh azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQor ICAgICAgc3dpdGNoICgoYWNjZXNzX21hc2tzWzJdIHwgYWNjZXNzX21hc2tzWzNdKQorICAg ICAgICAgICAgICAmIH4oTkVXX0FDRV9SRUFEX05BTUVEX0FUVFJTCisgICAgICAgICAgICAg ICAgICB8IE5FV19BQ0VfUkVBRF9BVFRSSUJVVEVTCisgICAgICAgICAgICAgICAgICB8IE5F V19BQ0VfUkVBRF9BQ0wKKyAgICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9TWU5DSFJPTkla RSkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICBjYXNlIE5FV19BQ0Vf UkVBRF9EQVRBOgorICAgICAgICBjYXNlICAgICAgICAgICAgICAgICAgICAgTkVXX0FDRV9X UklURUFfREFUQToKKyAgICAgICAgY2FzZSBORVdfQUNFX1JFQURfREFUQSB8IE5FV19BQ0Vf V1JJVEVBX0RBVEE6CisgICAgICAgIGNhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTkVXX0FDRV9FWEVDVVRFOgorICAgICAgICBjYXNlIE5FV19BQ0Vf UkVBRF9EQVRBIHwgICAgICAgICAgICAgICAgICAgICAgIE5FV19BQ0VfRVhFQ1VURToKKyAg ICAgICAgY2FzZSAgICAgICAgICAgICAgICAgICAgIE5FV19BQ0VfV1JJVEVBX0RBVEEgfCBO RVdfQUNFX0VYRUNVVEU6CisgICAgICAgIGNhc2UgTkVXX0FDRV9SRUFEX0RBVEEgfCBORVdf QUNFX1dSSVRFQV9EQVRBIHwgTkVXX0FDRV9FWEVDVVRFOgorICAgICAgICAgIGJyZWFrOwor ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAg ICBzd2l0Y2ggKChhY2Nlc3NfbWFza3NbNF0gfCBhY2Nlc3NfbWFza3NbNV0pCisgICAgICAg ICAgICAgICYgfihORVdfQUNFX1dSSVRFX05BTUVEX0FUVFJTCisgICAgICAgICAgICAgICAg ICB8IE5FV19BQ0VfV1JJVEVfQVRUUklCVVRFUworICAgICAgICAgICAgICAgICAgfCBORVdf QUNFX1dSSVRFX0FDTAorICAgICAgICAgICAgICAgICAgfCBORVdfQUNFX1dSSVRFX09XTkVS KSkKKyAgICAgICAgeworICAgICAgICBjYXNlIDA6CisgICAgICAgIGNhc2UgTkVXX0FDRV9S RUFEX0RBVEE6CisgICAgICAgIGNhc2UgICAgICAgICAgICAgICAgICAgICBORVdfQUNFX1dS SVRFQV9EQVRBOgorICAgICAgICBjYXNlIE5FV19BQ0VfUkVBRF9EQVRBIHwgTkVXX0FDRV9X UklURUFfREFUQToKKyAgICAgICAgY2FzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBORVdfQUNFX0VYRUNVVEU6CisgICAgICAgIGNhc2UgTkVXX0FDRV9S RUFEX0RBVEEgfCAgICAgICAgICAgICAgICAgICAgICAgTkVXX0FDRV9FWEVDVVRFOgorICAg ICAgICBjYXNlICAgICAgICAgICAgICAgICAgICAgTkVXX0FDRV9XUklURUFfREFUQSB8IE5F V19BQ0VfRVhFQ1VURToKKyAgICAgICAgY2FzZSBORVdfQUNFX1JFQURfREFUQSB8IE5FV19B Q0VfV1JJVEVBX0RBVEEgfCBORVdfQUNFX0VYRUNVVEU6CisgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAg ICAgLyogQ2hlY2sgdGhhdCB0aGUgTkVXX0FDRV9XUklURV9EQVRBIGFuZCBORVdfQUNFX0FQ UEVORF9EQVRBIGJpdHMgYXJlCisgICAgICAgICBlaXRoZXIgYm90aCBhbGxvd2VkIG9yIGJv dGggZGVuaWVkLiAgKi8KKyAgICAgIGlmICgoKGFjY2Vzc19tYXNrc1swXSAmIE5FV19BQ0Vf V1JJVEVfREFUQSkgIT0gMCkKKyAgICAgICAgICAhPSAoKGFjY2Vzc19tYXNrc1swXSAmIE5F V19BQ0VfQVBQRU5EX0RBVEEpICE9IDApKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGlm ICgoKGFjY2Vzc19tYXNrc1syXSAmIE5FV19BQ0VfV1JJVEVfREFUQSkgIT0gMCkKKyAgICAg ICAgICAhPSAoKGFjY2Vzc19tYXNrc1syXSAmIE5FV19BQ0VfQVBQRU5EX0RBVEEpICE9IDAp KQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGlmICgoKGFjY2Vzc19tYXNrc1s0XSAmIE5F V19BQ0VfV1JJVEVfREFUQSkgIT0gMCkKKyAgICAgICAgICAhPSAoKGFjY2Vzc19tYXNrc1s0 XSAmIE5FV19BQ0VfQVBQRU5EX0RBVEEpICE9IDApKQorICAgICAgICByZXR1cm4gMTsKKyAg ICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKyMgZW5kaWYKKworI2VsaWYgVVNFX0FDTCAmJiBI QVZFX0dFVEFDTCAvKiBIUC1VWCAqLworCisvKiBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNM IGlzIG5vbi10cml2aWFsLgorICAgUmV0dXJuIDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBl cXVpdmFsZW50IHRvIGEgc2ltcGxlIHN0YXQoKSBtb2RlLiAgKi8KK2ludAorYWNsX25vbnRy aXZpYWwgKGludCBjb3VudCwgc3RydWN0IGFjbF9lbnRyeSAqZW50cmllcywgc3RydWN0IHN0 YXQgKnNiKQoreworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykK KyAgICB7CisgICAgICBzdHJ1Y3QgYWNsX2VudHJ5ICphY2UgPSAmZW50cmllc1tpXTsKKwor ICAgICAgaWYgKCEoKGFjZS0+dWlkID09IHNiLT5zdF91aWQgJiYgYWNlLT5naWQgPT0gQUNM X05TR1JPVVApCisgICAgICAgICAgICB8fCAoYWNlLT51aWQgPT0gQUNMX05TVVNFUiAmJiBh Y2UtPmdpZCA9PSBzYi0+c3RfZ2lkKQorICAgICAgICAgICAgfHwgKGFjZS0+dWlkID09IEFD TF9OU1VTRVIgJiYgYWNlLT5naWQgPT0gQUNMX05TR1JPVVApKSkKKyAgICAgICAgcmV0dXJu IDE7CisgICAgfQorICByZXR1cm4gMDsKK30KKworIyBpZiBIQVZFX0FDTFZfSCAvKiBIUC1V WCA+PSAxMS4xMSAqLworCisvKiBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10 cml2aWFsLgorICAgUmV0dXJuIDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50 IHRvIGEgc2ltcGxlIHN0YXQoKSBtb2RlLiAgKi8KK2ludAorYWNsdl9ub250cml2aWFsIChp bnQgY291bnQsIHN0cnVjdCBhY2wgKmVudHJpZXMpCit7CisgIGludCBpOworCisgIGZvciAo aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgIHN0cnVjdCBhY2wgKmFjZSA9 ICZlbnRyaWVzW2ldOworCisgICAgICAvKiBOb3RlOiBJZiBhY2UtPmFfdHlwZSA9IFVTRVJf T0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X3VpZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIElm IGFjZS0+YV90eXBlID0gR1JPVVBfT0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X2dpZCBmcm9t IHN0YXQoKS4KKyAgICAgICAgIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgYWNlLT5hX2lkIGlu IHRoZXNlIGNhc2VzLiAgKi8KKyAgICAgIGlmICghKGFjZS0+YV90eXBlID09IFVTRVJfT0JK IC8qIG5vIG5lZWQgdG8gY2hlY2sgYWNlLT5hX2lkIGhlcmUgKi8KKyAgICAgICAgICAgIHx8 IGFjZS0+YV90eXBlID09IEdST1VQX09CSiAvKiBubyBuZWVkIHRvIGNoZWNrIGFjZS0+YV9p ZCBoZXJlICovCisgICAgICAgICAgICB8fCBhY2UtPmFfdHlwZSA9PSBDTEFTU19PQkoKKyAg ICAgICAgICAgIHx8IGFjZS0+YV90eXBlID09IE9USEVSX09CSikpCisgICAgICAgIHJldHVy biAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKyMgZW5kaWYKKworI2VsaWYgVVNFX0FD TCAmJiAoSEFWRV9BQ0xYX0dFVCB8fCBIQVZFX1NUQVRBQ0wpIC8qIEFJWCAqLworCisvKiBS ZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgorICAgUmV0dXJuIDAg aWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50IHRvIGEgc2ltcGxlIHN0YXQoKSBt b2RlLiAgKi8KK2ludAorYWNsX25vbnRyaXZpYWwgKHN0cnVjdCBhY2wgKmEpCit7CisgIC8q IFRoZSBub3JtYWwgd2F5IHRvIGl0ZXJhdGUgdGhyb3VnaCBhbiBBQ0wgaXMgbGlrZSB0aGlz OgorICAgICAgIHN0cnVjdCBhY2xfZW50cnkgKmFjZTsKKyAgICAgICBmb3IgKGFjZSA9IGEt PmFjbF9leHQ7IGFjZSAhPSBhY2xfbGFzdCAoYSk7IGFjZSA9IGFjbF9ueHQgKGFjZSkpCisg ICAgICAgICB7CisgICAgICAgICAgIHN0cnVjdCBhY2VfaWQgKmFlaTsKKyAgICAgICAgICAg c3dpdGNoIChhY2UtPmFjZV90eXBlKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICBj YXNlIEFDQ19QRVJNSVQ6CisgICAgICAgICAgICAgY2FzZSBBQ0NfREVOWToKKyAgICAgICAg ICAgICBjYXNlIEFDQ19TUEVDSUZZOgorICAgICAgICAgICAgICAgLi4uOworICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgZm9yIChhZWkgPSBhY2UtPmFjZV9pZDsgYWVpICE9IGlkX2xh c3QgKGFjZSk7IGFlaSA9IGlkX254dCAoYWVpKSkKKyAgICAgICAgICAgICAuLi4KKyAgICAg ICAgIH0KKyAgICovCisgIHJldHVybiAoYWNsX2xhc3QgKGEpICE9IGEtPmFjbF9leHQgPyAx IDogMCk7Cit9CisKKyMgaWYgSEFWRV9BQ0xYX0dFVCAmJiBkZWZpbmVkIEFDTF9BSVhfV0lQ IC8qIG5ld2VyIEFJWCAqLworCisvKiBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5v bi10cml2aWFsLgorICAgUmV0dXJuIDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFs ZW50IHRvIGEgc2ltcGxlIHN0YXQoKSBtb2RlLiAgKi8KK2ludAorYWNsX25mczRfbm9udHJp dmlhbCAobmZzNF9hY2xfaW50X3QgKmEpCit7CisjICBpZiAxIC8qIGxldCdzIHRyeSB0aGlz IGZpcnN0ICovCisgIHJldHVybiAoYS0+YWNsRW50cnlOID4gMCA/IDEgOiAwKTsKKyMgIGVs c2UKKyAgaW50IGNvdW50ID0gYS0+YWNsRW50cnlOOworICBpbnQgaTsKKworICBmb3IgKGkg PSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICBuZnM0X2FjZV9pbnRfdCAqYWNl ID0gJmEtPmFjbEVudHJ5W2ldOworCisgICAgICBpZiAoISgoYWNlLT5mbGFncyAmIEFDRTRf SURfU1BFQ0lBTCkgIT0gMAorICAgICAgICAgICAgJiYgKGFjZS0+YWNlV2hvLnNwZWNpYWxf d2hvaWQgPT0gQUNFNF9XSE9fT1dORVIKKyAgICAgICAgICAgICAgICB8fCBhY2UtPmFjZVdo by5zcGVjaWFsX3dob2lkID09IEFDRTRfV0hPX0dST1VQCisgICAgICAgICAgICAgICAgfHwg YWNlLT5hY2VXaG8uc3BlY2lhbF93aG9pZCA9PSBBQ0U0X1dIT19FVkVSWU9ORSkKKyAgICAg ICAgICAgICYmIGFjZS0+YWNlVHlwZSA9PSBBQ0U0X0FDQ0VTU19BTExPV0VEX0FDRV9UWVBF CisgICAgICAgICAgICAmJiBhY2UtPmFjZUZsYWdzID09IDAKKyAgICAgICAgICAgICYmIChh Y2UtPmFjZU1hc2sgJiB+KEFDRTRfUkVBRF9EQVRBIHwgQUNFNF9MSVNUX0RJUkVDVE9SWQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBQ0U0X1dSSVRFX0RBVEEgfCBB Q0U0X0FERF9GSUxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFDRTRf RVhFQ1VURSkpID09IDApKQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAw OworIyAgZW5kaWYKK30KKworIyBlbmRpZgorCisjZWxpZiBVU0VfQUNMICYmIEhBVkVfQUNM U09SVCAvKiBOb25TdG9wIEtlcm5lbCAqLworCisvKiBUZXN0IGFuIEFDTCByZXRyaWV2ZWQg d2l0aCBBQ0xfR0VULgorICAgUmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCwgY29uc2lzdGlu ZyBvZiBDT1VOVCBlbnRyaWVzLCBpcyBub24tdHJpdmlhbC4KKyAgIFJldHVybiAwIGlmIGl0 IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNpbXBsZSBzdGF0KCkgbW9kZS4g ICovCitpbnQKK2FjbF9ub250cml2aWFsIChpbnQgY291bnQsIHN0cnVjdCBhY2wgKmVudHJp ZXMpCit7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAg IHsKKyAgICAgIHN0cnVjdCBhY2wgKmFjZSA9ICZlbnRyaWVzW2ldOworCisgICAgICAvKiBO b3RlOiBJZiBhY2UtPmFfdHlwZSA9IFVTRVJfT0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X3Vp ZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIElmIGFjZS0+YV90eXBlID0gR1JPVVBfT0JKLCBh Y2UtPmFfaWQgaXMgdGhlIHN0X2dpZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIFdlIGRvbid0 IG5lZWQgdG8gY2hlY2sgYWNlLT5hX2lkIGluIHRoZXNlIGNhc2VzLiAgKi8KKyAgICAgIGlm ICghKGFjZS0+YV90eXBlID09IFVTRVJfT0JKIC8qIG5vIG5lZWQgdG8gY2hlY2sgYWNlLT5h X2lkIGhlcmUgKi8KKyAgICAgICAgICAgIHx8IGFjZS0+YV90eXBlID09IEdST1VQX09CSiAv KiBubyBuZWVkIHRvIGNoZWNrIGFjZS0+YV9pZCBoZXJlICovCisgICAgICAgICAgICB8fCBh Y2UtPmFfdHlwZSA9PSBDTEFTU19PQkoKKyAgICAgICAgICAgIHx8IGFjZS0+YV90eXBlID09 IE9USEVSX09CSikpCisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9 CisKKyNlbmRpZgorCisKKy8qIFJldHVybiAxIGlmIE5BTUUgaGFzIGEgbm9udHJpdmlhbCBh Y2Nlc3MgY29udHJvbCBsaXN0LCAwIGlmIE5BTUUKKyAgIG9ubHkgaGFzIG5vIG9yIGEgYmFz ZSBhY2Nlc3MgY29udHJvbCBsaXN0LCBhbmQgLTEgKHNldHRpbmcgZXJybm8pCisgICBvbiBl cnJvci4gIFNCIG11c3QgYmUgc2V0IHRvIHRoZSBzdGF0IGJ1ZmZlciBvZiBOQU1FLCBvYnRh aW5lZAorICAgdGhyb3VnaCBzdGF0KCkgb3IgbHN0YXQoKS4gICovCisKK2ludAorZmlsZV9o YXNfYWNsIChjaGFyIGNvbnN0ICpuYW1lLCBzdHJ1Y3Qgc3RhdCBjb25zdCAqc2IpCit7Cisj aWYgVVNFX0FDTAorICBpZiAoISBTX0lTTE5LIChzYi0+c3RfbW9kZSkpCisgICAgeworIyBp ZiBIQVZFX0FDTF9HRVRfRklMRQorCisgICAgICAvKiBQT1NJWCAxMDAzLjFlIChkcmFmdCAx NyAtLSBhYmFuZG9uZWQpIHNwZWNpZmljIHZlcnNpb24uICAqLworICAgICAgLyogTGludXgs IEZyZWVCU0QsIE1hYyBPUyBYLCBJUklYLCBUcnU2NCAqLworICAgICAgaW50IHJldDsKKwor ICAgICAgaWYgKEhBVkVfQUNMX0VYVEVOREVEX0ZJTEUpIC8qIExpbnV4ICovCisgICAgICAg IHsKKyAgICAgICAgICAvKiBPbiBMaW51eCwgYWNsX2V4dGVuZGVkX2ZpbGUgaXMgYW4gb3B0 aW1pemVkIGZ1bmN0aW9uOiBJdCBvbmx5CisgICAgICAgICAgICAgbWFrZXMgdHdvIGNhbGxz IHRvIGdldHhhdHRyKCksIG9uZSBmb3IgQUNMX1RZUEVfQUNDRVNTLCBvbmUgZm9yCisgICAg ICAgICAgICAgQUNMX1RZUEVfREVGQVVMVC4gICovCisgICAgICAgICAgcmV0ID0gYWNsX2V4 dGVuZGVkX2ZpbGUgKG5hbWUpOworICAgICAgICB9CisgICAgICBlbHNlIC8qIEZyZWVCU0Qs IE1hYyBPUyBYLCBJUklYLCBUcnU2NCAqLworICAgICAgICB7CisjICBpZiBIQVZFX0FDTF9U WVBFX0VYVEVOREVEIC8qIE1hYyBPUyBYICovCisgICAgICAgICAgLyogT24gTWFjIE9TIFgs IGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfQUNDRVNTKQorICAgICAgICAgICAgIGFu ZCBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0RFRkFVTFQpCisgICAgICAgICAgICAg YWx3YXlzIHJldHVybiBOVUxMIC8gRUlOVkFMLiAgVGhlcmUgaXMgbm8gcG9pbnQgaW4gbWFr aW5nCisgICAgICAgICAgICAgdGhlc2UgdHdvIHVzZWxlc3MgY2FsbHMuICBUaGUgcmVhbCBB Q0wgaXMgcmV0cmlldmVkIHRocm91Z2gKKyAgICAgICAgICAgICBhY2xfZ2V0X2ZpbGUgKG5h bWUsIEFDTF9UWVBFX0VYVEVOREVEKS4gICovCisgICAgICAgICAgYWNsX3QgYWNsID0gYWNs X2dldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9FWFRFTkRFRCk7CisgICAgICAgICAgaWYgKGFj bCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0ID0gYWNsX2V4dGVuZGVkX25v bnRyaXZpYWwgKGFjbCk7CisgICAgICAgICAgICAgIGFjbF9mcmVlIChhY2wpOworICAgICAg ICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IC0xOworIyAgZWxz ZSAvKiBGcmVlQlNELCBJUklYLCBUcnU2NCAqLworICAgICAgICAgIGFjbF90IGFjbCA9IGFj bF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfQUNDRVNTKTsKKyAgICAgICAgICBpZiAoYWNs KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpbnQgc2F2ZWRfZXJybm87CisKKyAg ICAgICAgICAgICAgcmV0ID0gYWNsX2FjY2Vzc19ub250cml2aWFsIChhY2wpOworICAgICAg ICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAgICAgICBhY2xfZnJlZSAo YWNsKTsKKyAgICAgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyMgICBpZiBIQVZF X0FDTF9GUkVFX1RFWFQgLyogVHJ1NjQgKi8KKyAgICAgICAgICAgICAgLyogT24gT1NGLzEs IGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfREVGQVVMVCkgYWx3YXlzCisgICAgICAg ICAgICAgICAgIHJldHVybnMgTlVMTCB3aXRoIGVycm5vIG5vdCBzZXQuICBUaGVyZSBpcyBu byBwb2ludCBpbgorICAgICAgICAgICAgICAgICBtYWtpbmcgdGhpcyBjYWxsLiAgKi8KKyMg ICBlbHNlIC8qIEZyZWVCU0QsIElSSVggKi8KKyAgICAgICAgICAgICAgLyogT24gTGludXgs IEZyZWVCU0QsIElSSVgsIGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfQUNDRVNTKQor ICAgICAgICAgICAgICAgICBhbmQgYWNsX2dldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9ERUZB VUxUKSBvbiBhIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICBlaXRoZXIgYm90aCBzdWNj ZWVkIG9yIGJvdGggZmFpbDsgaXQgZGVwZW5kcyBvbiB0aGUKKyAgICAgICAgICAgICAgICAg ZmlsZSBzeXN0ZW0uICBUaGVyZWZvcmUgdGhlcmUgaXMgbm8gcG9pbnQgaW4gbWFraW5nIHRo ZSBzZWNvbmQKKyAgICAgICAgICAgICAgICAgY2FsbCBpZiB0aGUgZmlyc3Qgb25lIGFscmVh ZHkgZmFpbGVkLiAgKi8KKyAgICAgICAgICAgICAgaWYgKHJldCA9PSAwICYmIFNfSVNESVIg KHNiLT5zdF9tb2RlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBh Y2wgPSBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0RFRkFVTFQpOworICAgICAgICAg ICAgICAgICAgaWYgKGFjbCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICAgICAgIHJldCA9ICgwIDwgYWNsX2VudHJpZXMgKGFjbCkpOworICAgICAgICAgICAg ICAgICAgICAgIGFjbF9mcmVlIChhY2wpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldCA9IC0xOworICAg ICAgICAgICAgICAgIH0KKyMgICBlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgIHJldCA9IC0xOworIyAgZW5kaWYKKyAgICAgICAgfQorICAgICAg aWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiAtIGFjbF9lcnJub192YWxpZCAoZXJybm8p OworICAgICAgcmV0dXJuIHJldDsKKworIyBlbGlmIEhBVkVfRkFDTCAmJiBkZWZpbmVkIEdF VEFDTCAvKiBTb2xhcmlzLCBDeWd3aW4sIG5vdCBIUC1VWCAqLworCisjICBpZiBkZWZpbmVk IEFDTF9OT19UUklWSUFMCisKKyAgICAgIC8qIFNvbGFyaXMgMTAgKG5ld2VyIHZlcnNpb24p LCB3aGljaCBoYXMgYWRkaXRpb25hbCBBUEkgZGVjbGFyZWQgaW4KKyAgICAgICAgIDxzeXMv YWNsLmg+IChhY2xfdCkgYW5kIGltcGxlbWVudGVkIGluIGxpYnNlYyAoYWNsX3NldCwgYWNs X3RyaXZpYWwsCisgICAgICAgICBhY2xfZnJvbXRleHQsIC4uLikuICAqLworICAgICAgcmV0 dXJuIGFjbF90cml2aWFsIChuYW1lKTsKKworIyAgZWxzZSAvKiBTb2xhcmlzLCBDeWd3aW4s IGdlbmVyYWwgY2FzZSAqLworCisgICAgICAvKiBTb2xhcmlzIDIuNSB0aHJvdWdoIFNvbGFy aXMgMTAsIEN5Z3dpbiwgYW5kIGNvbnRlbXBvcmFuZW91cyB2ZXJzaW9ucworICAgICAgICAg b2YgVW5peHdhcmUuICBUaGUgYWNsKCkgY2FsbCByZXR1cm5zIHRoZSBhY2Nlc3MgYW5kIGRl ZmF1bHQgQUNMIGJvdGgKKyAgICAgICAgIGF0IG9uY2UuICAqLworICAgICAgeworICAgICAg ICAvKiBJbml0aWFsbHksIHRyeSB0byByZWFkIHRoZSBlbnRyaWVzIGludG8gYSBzdGFjay1h bGxvY2F0ZWQgYnVmZmVyLgorICAgICAgICAgICBVc2UgbWFsbG9jIGlmIGl0IGRvZXMgbm90 IGZpdC4gICovCisgICAgICAgIGVudW0KKyAgICAgICAgICB7CisgICAgICAgICAgICBhbGxv Y19pbml0ID0gNDAwMCAvIHNpemVvZiAoYWNsZW50X3QpLCAvKiA+PSAzICovCisgICAgICAg ICAgICBhbGxvY19tYXggPSBNSU4gKElOVF9NQVgsIFNJWkVfTUFYIC8gc2l6ZW9mIChhY2xl bnRfdCkpCisgICAgICAgICAgfTsKKyAgICAgICAgYWNsZW50X3QgYnVmW2FsbG9jX2luaXRd OworICAgICAgICBzaXplX3QgYWxsb2MgPSBhbGxvY19pbml0OworICAgICAgICBhY2xlbnRf dCAqZW50cmllcyA9IGJ1ZjsKKyAgICAgICAgYWNsZW50X3QgKm1hbGxvY2VkID0gTlVMTDsK KyAgICAgICAgaW50IGNvdW50OworCisgICAgICAgIGZvciAoOzspCisgICAgICAgICAgewor ICAgICAgICAgICAgY291bnQgPSBhY2wgKG5hbWUsIEdFVEFDTCwgYWxsb2MsIGVudHJpZXMp OworICAgICAgICAgICAgaWYgKGNvdW50IDwgMCAmJiBlcnJubyA9PSBFTk9TUEMpCisgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBJbmNyZWFzZSB0aGUgc2l6ZSBvZiB0 aGUgYnVmZmVyLiAgKi8KKyAgICAgICAgICAgICAgICBmcmVlIChtYWxsb2NlZCk7CisgICAg ICAgICAgICAgICAgaWYgKGFsbG9jID4gYWxsb2NfbWF4IC8gMikKKyAgICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgICAg ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICBhbGxvYyA9IDIgKiBhbGxvYzsgLyogPD0gYWxsb2NfbWF4ICovCisgICAgICAgICAg ICAgICAgZW50cmllcyA9IG1hbGxvY2VkID0KKyAgICAgICAgICAgICAgICAgIChhY2xlbnRf dCAqKSBtYWxsb2MgKGFsbG9jICogc2l6ZW9mIChhY2xlbnRfdCkpOworICAgICAgICAgICAg ICAgIGlmIChlbnRyaWVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICAgICAgICAgICAgICByZXR1 cm4gLTE7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7 CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAg ICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXJy bm8gPT0gRU5PU1lTIHx8IGVycm5vID09IEVOT1RTVVApCisgICAgICAgICAgICAgIDsKKyAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBz YXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAgICAgICAgIGZyZWUgKG1hbGxvY2VkKTsK KyAgICAgICAgICAgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgICAgICAgICAg IHJldHVybiAtMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgZWxz ZSBpZiAoY291bnQgPT0gMCkKKyAgICAgICAgICA7CisgICAgICAgIGVsc2UKKyAgICAgICAg ICB7CisgICAgICAgICAgICAvKiBEb24ndCB1c2UgTUlOX0FDTF9FTlRSSUVTOiAgSXQncyBz ZXQgdG8gNCBvbiBDeWd3aW4sIGJ1dCBDeWd3aW4KKyAgICAgICAgICAgICAgIHJldHVybnMg b25seSAzIGVudHJpZXMgZm9yIGZpbGVzIHdpdGggbm8gQUNMLiAgQnV0IHRoaXMgaXMgc2Fm ZToKKyAgICAgICAgICAgICAgIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gNCBlbnRyaWVzLCB0 aGVyZSBjYW5ub3QgYmUgb25seSB0aGUKKyAgICAgICAgICAgICAgICJ1c2VyOjoiLCAiZ3Jv dXA6OiIsICJvdGhlcjoiLCBhbmQgIm1hc2s6IiBlbnRyaWVzLiAgKi8KKyAgICAgICAgICAg IGlmIChjb3VudCA+IDQpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmcmVl IChtYWxsb2NlZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAg IH0KKworICAgICAgICAgICAgaWYgKGFjbF9ub250cml2aWFsIChjb3VudCwgZW50cmllcykp CisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmcmVlIChtYWxsb2NlZCk7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9 CisgICAgICAgIGZyZWUgKG1hbGxvY2VkKTsKKyAgICAgIH0KKworIyAgIGlmZGVmIEFDRV9H RVRBQ0wKKyAgICAgIC8qIFNvbGFyaXMgYWxzbyBoYXMgYSBkaWZmZXJlbnQgdmFyaWFudCBv ZiBBQ0xzLCB1c2VkIGluIFpGUyBhbmQgTkZTdjQKKyAgICAgICAgIGZpbGUgc3lzdGVtcyAo d2hlcmVhcyB0aGUgb3RoZXIgb25lcyBhcmUgdXNlZCBpbiBVRlMgZmlsZSBzeXN0ZW1zKS4g ICovCisgICAgICB7CisgICAgICAgIC8qIEluaXRpYWxseSwgdHJ5IHRvIHJlYWQgdGhlIGVu dHJpZXMgaW50byBhIHN0YWNrLWFsbG9jYXRlZCBidWZmZXIuCisgICAgICAgICAgIFVzZSBt YWxsb2MgaWYgaXQgZG9lcyBub3QgZml0LiAgKi8KKyAgICAgICAgZW51bQorICAgICAgICAg IHsKKyAgICAgICAgICAgIGFsbG9jX2luaXQgPSA0MDAwIC8gc2l6ZW9mIChhY2VfdCksIC8q ID49IDMgKi8KKyAgICAgICAgICAgIGFsbG9jX21heCA9IE1JTiAoSU5UX01BWCwgU0laRV9N QVggLyBzaXplb2YgKGFjZV90KSkKKyAgICAgICAgICB9OworICAgICAgICBhY2VfdCBidWZb YWxsb2NfaW5pdF07CisgICAgICAgIHNpemVfdCBhbGxvYyA9IGFsbG9jX2luaXQ7CisgICAg ICAgIGFjZV90ICplbnRyaWVzID0gYnVmOworICAgICAgICBhY2VfdCAqbWFsbG9jZWQgPSBO VUxMOworICAgICAgICBpbnQgY291bnQ7CisKKyAgICAgICAgZm9yICg7OykKKyAgICAgICAg ICB7CisgICAgICAgICAgICBjb3VudCA9IGFjbCAobmFtZSwgQUNFX0dFVEFDTCwgYWxsb2Ms IGVudHJpZXMpOworICAgICAgICAgICAgaWYgKGNvdW50IDwgMCAmJiBlcnJubyA9PSBFTk9T UEMpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBJbmNyZWFzZSB0aGUg c2l6ZSBvZiB0aGUgYnVmZmVyLiAgKi8KKyAgICAgICAgICAgICAgICBmcmVlIChtYWxsb2Nl ZCk7CisgICAgICAgICAgICAgICAgaWYgKGFsbG9jID4gYWxsb2NfbWF4IC8gMikKKyAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBFTk9NRU07Cisg ICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBhbGxvYyA9IDIgKiBhbGxvYzsgLyogPD0gYWxsb2NfbWF4ICovCisg ICAgICAgICAgICAgICAgZW50cmllcyA9IG1hbGxvY2VkID0gKGFjZV90ICopIG1hbGxvYyAo YWxsb2MgKiBzaXplb2YgKGFjZV90KSk7CisgICAgICAgICAgICAgICAgaWYgKGVudHJpZXMg PT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZXJy bm8gPSBFTk9NRU07CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICBpZiAoY291bnQg PCAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwg ZXJybm8gPT0gRUlOVkFMKQorICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJu bzsKKyAgICAgICAgICAgICAgICBmcmVlIChtYWxsb2NlZCk7CisgICAgICAgICAgICAgICAg ZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvdW50ID09IDAp CisgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAg LyogSW4gdGhlIG9sZCAob3JpZ2luYWwgU29sYXJpcyAxMCkgY29udmVudGlvbjoKKyAgICAg ICAgICAgICAgIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gMyBlbnRyaWVzLCB0aGVyZSBjYW5u b3QgYmUgb25seSB0aGUKKyAgICAgICAgICAgICAgIEFDRV9PV05FUiwgQUNFX0dST1VQLCBB Q0VfT1RIRVIgZW50cmllcy4KKyAgICAgICAgICAgICAgIEluIHRoZSBuZXdlciBTb2xhcmlz IDEwIGFuZCBTb2xhcmlzIDExIGNvbnZlbnRpb246CisgICAgICAgICAgICAgICBJZiB0aGVy ZSBhcmUgbW9yZSB0aGFuIDYgZW50cmllcywgdGhlcmUgY2Fubm90IGJlIG9ubHkgdGhlCisg ICAgICAgICAgICAgICBBQ0VfT1dORVIsIEFDRV9HUk9VUCwgQUNFX0VWRVJZT05FIGVudHJp ZXMsIGVhY2ggb25jZSB3aXRoCisgICAgICAgICAgICAgICBORVdfQUNFX0FDQ0VTU19BTExP V0VEX0FDRV9UWVBFIGFuZCBvbmNlIHdpdGgKKyAgICAgICAgICAgICAgIE5FV19BQ0VfQUND RVNTX0RFTklFRF9BQ0VfVFlQRS4gICovCisgICAgICAgICAgICBpZiAoY291bnQgPiA2KQor ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJlZSAobWFsbG9jZWQpOworICAg ICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg IGlmIChhY2xfYWNlX25vbnRyaXZpYWwgKGNvdW50LCBlbnRyaWVzKSkKKyAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIGZyZWUgKG1hbGxvY2VkKTsKKyAgICAgICAgICAgICAg ICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgZnJl ZSAobWFsbG9jZWQpOworICAgICAgfQorIyAgIGVuZGlmCisKKyAgICAgIHJldHVybiAwOwor IyAgZW5kaWYKKworIyBlbGlmIEhBVkVfR0VUQUNMIC8qIEhQLVVYICovCisKKyAgICAgIHsK KyAgICAgICAgc3RydWN0IGFjbF9lbnRyeSBlbnRyaWVzW05BQ0xFTlRSSUVTXTsKKyAgICAg ICAgaW50IGNvdW50OworCisgICAgICAgIGNvdW50ID0gZ2V0YWNsIChuYW1lLCBOQUNMRU5U UklFUywgZW50cmllcyk7CisKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgICB7 CisgICAgICAgICAgICAvKiBFTk9TWVMgaXMgc2VlbiBvbiBuZXdlciBIUC1VWCB2ZXJzaW9u cy4KKyAgICAgICAgICAgICAgIEVPUE5PVFNVUFAgaXMgdHlwaWNhbGx5IHNlZW4gb24gTkZT IG1vdW50cy4KKyAgICAgICAgICAgICAgIEVOT1RTVVAgd2FzIHNlZW4gb24gUXVhbnR1bSBT dG9yTmV4dCBmaWxlIHN5c3RlbXMgKGN2ZnMpLiAgKi8KKyAgICAgICAgICAgIGlmIChlcnJu byA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFTk9UU1VQ KQorICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHJl dHVybiAtMTsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvdW50ID09IDApCisg ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGVsc2UgLyogY291bnQgPiAwICovCisgICAg ICAgICAgeworICAgICAgICAgICAgaWYgKGNvdW50ID4gTkFDTEVOVFJJRVMpCisgICAgICAg ICAgICAgIC8qIElmIE5BQ0xFTlRSSUVTIGNhbm5vdCBiZSB0cnVzdGVkLCB1c2UgZHluYW1p YyBtZW1vcnkKKyAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbi4gICovCisgICAgICAgICAg ICAgIGFib3J0ICgpOworCisgICAgICAgICAgICAvKiBJZiB0aGVyZSBhcmUgbW9yZSB0aGFu IDMgZW50cmllcywgdGhlcmUgY2Fubm90IGJlIG9ubHkgdGhlCisgICAgICAgICAgICAgICAo dWlkLCUpLCAoJSxnaWQpLCAoJSwlKSBlbnRyaWVzLiAgKi8KKyAgICAgICAgICAgIGlmIChj b3VudCA+IDMpCisgICAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisKKyAgICAgICAgICAgICAgaWYg KHN0YXQgKG5hbWUsICZzdGF0YnVmKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0x OworCisgICAgICAgICAgICAgIHJldHVybiBhY2xfbm9udHJpdmlhbCAoY291bnQsIGVudHJp ZXMsICZzdGF0YnVmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICB9CisK KyMgIGlmIEhBVkVfQUNMVl9IIC8qIEhQLVVYID49IDExLjExICovCisKKyAgICAgIHsKKyAg ICAgICAgc3RydWN0IGFjbCBlbnRyaWVzW05BQ0xWRU5UUklFU107CisgICAgICAgIGludCBj b3VudDsKKworICAgICAgICBjb3VudCA9IGFjbCAoKGNoYXIgKikgbmFtZSwgQUNMX0dFVCwg TkFDTFZFTlRSSUVTLCBlbnRyaWVzKTsKKworICAgICAgICBpZiAoY291bnQgPCAwKQorICAg ICAgICAgIHsKKyAgICAgICAgICAgIC8qIEVPUE5PVFNVUFAgaXMgc2VlbiBvbiBORlMgaW4g SFAtVVggMTEuMTEsIDExLjIzLgorICAgICAgICAgICAgICAgRUlOVkFMIGlzIHNlZW4gb24g TkZTIGluIEhQLVVYIDExLjMxLiAgKi8KKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9T WVMgfHwgZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFSU5WQUwpCisgICAgICAg ICAgICAgIDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcmV0dXJuIC0xOwor ICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY291bnQgPT0gMCkKKyAgICAgICAgICBy ZXR1cm4gMDsKKyAgICAgICAgZWxzZSAvKiBjb3VudCA+IDAgKi8KKyAgICAgICAgICB7Cisg ICAgICAgICAgICBpZiAoY291bnQgPiBOQUNMVkVOVFJJRVMpCisgICAgICAgICAgICAgIC8q IElmIE5BQ0xWRU5UUklFUyBjYW5ub3QgYmUgdHJ1c3RlZCwgdXNlIGR5bmFtaWMgbWVtb3J5 CisgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24uICAqLworICAgICAgICAgICAgICBhYm9y dCAoKTsKKworICAgICAgICAgICAgLyogSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiA0IGVudHJp ZXMsIHRoZXJlIGNhbm5vdCBiZSBvbmx5IHRoZQorICAgICAgICAgICAgICAgZm91ciBiYXNl IEFDTCBlbnRyaWVzLiAgKi8KKyAgICAgICAgICAgIGlmIChjb3VudCA+IDQpCisgICAgICAg ICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgICByZXR1cm4gYWNsdl9ub250cml2aWFs IChjb3VudCwgZW50cmllcyk7CisgICAgICAgICAgfQorICAgICAgfQorCisjICBlbmRpZgor CisjIGVsaWYgSEFWRV9BQ0xYX0dFVCAmJiBkZWZpbmVkIEFDTF9BSVhfV0lQIC8qIEFJWCAq LworCisgICAgICBhY2xfdHlwZV90IHR5cGU7CisgICAgICBjaGFyIGFjbGJ1ZlsxMDI0XTsK KyAgICAgIHZvaWQgKmFjbCA9IGFjbGJ1ZjsKKyAgICAgIHNpemVfdCBhY2xzaXplID0gc2l6 ZW9mIChhY2xidWYpOworICAgICAgbW9kZV90IG1vZGU7CisKKyAgICAgIGZvciAoOzspCisg ICAgICAgIHsKKyAgICAgICAgICAvKiBUaGUgZG9jcyBzYXkgdGhhdCB0eXBlIGJlaW5nIDAg aXMgZXF1aXZhbGVudCB0byBBQ0xfQU5ZLCBidXQgaXQKKyAgICAgICAgICAgICBpcyBub3Qg dHJ1ZSwgaW4gQUlYIDUuMy4gICovCisgICAgICAgICAgdHlwZS51NjQgPSBBQ0xfQU5ZOwor ICAgICAgICAgIGlmIChhY2x4X2dldCAobmFtZSwgMCwgJnR5cGUsIGFjbGJ1ZiwgJmFjbHNp emUsICZtb2RlKSA+PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgaWYgKGVy cm5vID09IEVOT1NZUykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgIGlmIChl cnJubyAhPSBFTk9TUEMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChhY2wg IT0gYWNsYnVmKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGludCBz YXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAgICAgICAgICAgZnJlZSAoYWNsKTsKKyAg ICAgICAgICAgICAgICAgIGVycm5vID0gc2F2ZWRfZXJybm87CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAg YWNsc2l6ZSA9IDIgKiBhY2xzaXplOworICAgICAgICAgIGlmIChhY2wgIT0gYWNsYnVmKQor ICAgICAgICAgICAgZnJlZSAoYWNsKTsKKyAgICAgICAgICBhY2wgPSBtYWxsb2MgKGFjbHNp emUpOworICAgICAgICAgIGlmIChhY2wgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBpZiAodHlwZS51NjQgPT0gQUNMX0FJ WEMpCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgcmVzdWx0ID0gYWNsX25vbnRyaXZpYWwg KChzdHJ1Y3QgYWNsICopIGFjbCk7CisgICAgICAgICAgaWYgKGFjbCAhPSBhY2xidWYpCisg ICAgICAgICAgICBmcmVlIChhY2wpOworICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg ICAgIH0KKyAgICAgIGVsc2UgaWYgKHR5cGUudTY0ID09IEFDTF9ORlM0KQorICAgICAgICB7 CisgICAgICAgICAgaW50IHJlc3VsdCA9IGFjbF9uZnM0X25vbnRyaXZpYWwgKChuZnM0X2Fj bF9pbnRfdCAqKSBhY2wpOworICAgICAgICAgIGlmIChhY2wgIT0gYWNsYnVmKQorICAgICAg ICAgICAgZnJlZSAoYWNsKTsKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9 CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBBIG5ld2VyIHR5cGUgb2Yg QUNMIGhhcyBiZWVuIGludHJvZHVjZWQgaW4gdGhlIHN5c3RlbS4KKyAgICAgICAgICAgICBX ZSBzaG91bGQgYmV0dGVyIHN1cHBvcnQgaXQuICAqLworICAgICAgICAgIGlmIChhY2wgIT0g YWNsYnVmKQorICAgICAgICAgICAgZnJlZSAoYWNsKTsKKyAgICAgICAgICBlcnJubyA9IEVJ TlZBTDsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworIyBlbGlmIEhBVkVf U1RBVEFDTCAvKiBvbGRlciBBSVggKi8KKworICAgICAgdW5pb24geyBzdHJ1Y3QgYWNsIGE7 IGNoYXIgcm9vbVs0MDk2XTsgfSB1OworCisgICAgICBpZiAoc3RhdGFjbCAobmFtZSwgU1RY X05PUk1BTCwgJnUuYSwgc2l6ZW9mICh1KSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisK KyAgICAgIHJldHVybiBhY2xfbm9udHJpdmlhbCAoJnUuYSk7CisKKyMgZWxpZiBIQVZFX0FD TFNPUlQgLyogTm9uU3RvcCBLZXJuZWwgKi8KKworICAgICAgeworICAgICAgICBzdHJ1Y3Qg YWNsIGVudHJpZXNbTkFDTEVOVFJJRVNdOworICAgICAgICBpbnQgY291bnQ7CisKKyAgICAg ICAgY291bnQgPSBhY2wgKChjaGFyICopIG5hbWUsIEFDTF9HRVQsIE5BQ0xFTlRSSUVTLCBl bnRyaWVzKTsKKworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICAgIHsKKyAgICAg ICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRU5PVFNVUCkKKyAgICAg ICAgICAgICAgOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb3VudCA9PSAwKQorICAgICAgICAg IHJldHVybiAwOworICAgICAgICBlbHNlIC8qIGNvdW50ID4gMCAqLworICAgICAgICAgIHsK KyAgICAgICAgICAgIGlmIChjb3VudCA+IE5BQ0xFTlRSSUVTKQorICAgICAgICAgICAgICAv KiBJZiBOQUNMRU5UUklFUyBjYW5ub3QgYmUgdHJ1c3RlZCwgdXNlIGR5bmFtaWMgbWVtb3J5 CisgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24uICAqLworICAgICAgICAgICAgICBhYm9y dCAoKTsKKworICAgICAgICAgICAgLyogSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiA0IGVudHJp ZXMsIHRoZXJlIGNhbm5vdCBiZSBvbmx5IHRoZQorICAgICAgICAgICAgICAgZm91ciBiYXNl IEFDTCBlbnRyaWVzLiAgKi8KKyAgICAgICAgICAgIGlmIChjb3VudCA+IDQpCisgICAgICAg ICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgICByZXR1cm4gYWNsX25vbnRyaXZpYWwg KGNvdW50LCBlbnRyaWVzKTsKKyAgICAgICAgICB9CisgICAgICB9CisKKyMgZW5kaWYKKyAg ICB9CisjZW5kaWYKKworICByZXR1cm4gMDsKK30KCj09PSBtb2RpZmllZCBmaWxlICdsaWIv Z251bGliLm1rJwotLS0gbGliL2dudWxpYi5tawkyMDEzLTAzLTEzIDE4OjQyOjIyICswMDAw CisrKyBsaWIvZ251bGliLm1rCTIwMTMtMDQtMjcgMjA6MjQ6MTAgKzAwMDAKQEAgLTIxLDcg KzIxLDcgQEAKICMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9m IHRoYXQgcHJvZ3JhbS4KICMKICMgR2VuZXJhdGVkIGJ5IGdudWxpYi10b29sLgotIyBSZXBy b2R1Y2UgYnk6IGdudWxpYi10b29sIC0taW1wb3J0IC0tZGlyPS4gLS1saWI9bGliZ251IC0t c291cmNlLWJhc2U9bGliIC0tbTQtYmFzZT1tNCAtLWRvYy1iYXNlPWRvYyAtLXRlc3RzLWJh c2U9dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1eCAtLWF2b2lkPWR1cCAtLWF2b2lkPWVycm5v IC0tYXZvaWQ9ZmNoZGlyIC0tYXZvaWQ9ZmNudGwgLS1hdm9pZD1mc3RhdCAtLWF2b2lkPW1h bGxvYy1wb3NpeCAtLWF2b2lkPW1zdmMtaW52YWwgLS1hdm9pZD1tc3ZjLW5vdGhyb3cgLS1h dm9pZD1vcGVuIC0tYXZvaWQ9b3BlbmF0LWRpZSAtLWF2b2lkPW9wZW5kaXIgLS1hdm9pZD1y YWlzZSAtLWF2b2lkPXNhdmUtY3dkIC0tYXZvaWQ9c2VsZWN0IC0tYXZvaWQ9c2lncHJvY21h c2sgLS1hdm9pZD1zeXNfdHlwZXMgLS1hdm9pZD10aHJlYWRsaWIgLS1tYWtlZmlsZS1uYW1l PWdudWxpYi5tayAtLWNvbmRpdGlvbmFsLWRlcGVuZGVuY2llcyAtLW5vLWxpYnRvb2wgLS1t YWNyby1wcmVmaXg9Z2wgLS1uby12Yy1maWxlcyBhbGxvY2Etb3B0IGMtY3R5cGUgYy1zdHJj YXNlIGNhcmVhZGxpbmthdCBjbG9zZS1zdHJlYW0gY3J5cHRvL21kNSBjcnlwdG8vc2hhMSBj cnlwdG8vc2hhMjU2IGNyeXB0by9zaGE1MTIgZHRvYXN0ciBkdG90aW1lc3BlYyBkdXAyIGVu dmlyb24gZXhlY2luZm8gZmFjY2Vzc2F0IGZjbnRsLWggZmRhdGFzeW5jIGZkb3BlbmRpciBm aWxlbW9kZSBmc3RhdGF0IGZzeW5jIGdldGxvYWRhdmcgZ2V0b3B0LWdudSBnZXR0aW1lIGdl dHRpbWVvZmRheSBpZ25vcmUtdmFsdWUgaW50cHJvcHMgbGFyZ2VmaWxlIGxzdGF0IG1hbnl3 YXJuaW5ncyBtZW1yY2hyIG1rdGltZSBwc2VsZWN0IHB0aHJlYWRfc2lnbWFzayBwdXRlbnYg cmVhZGxpbmsgcmVhZGxpbmthdCBzaWcyc3RyIHNvY2tsZW4gc3RhdC10aW1lIHN0ZGFsaWdu IHN0ZGFyZyBzdGRib29sIHN0ZGlvIHN0cmZ0aW1lIHN0cnRvaW1heCBzdHJ0b3VtYXggc3lt bGluayBzeXNfc3RhdCBzeXNfdGltZSB0aW1lIHRpbWVyLXRpbWUgdGltZXNwZWMtYWRkIHRp bWVzcGVjLXN1YiB1bnNldGVudiB1dGltZW5zIHdhcm5pbmdzCisjIFJlcHJvZHVjZSBieTog Z251bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9LiAtLWxpYj1saWJnbnUgLS1zb3VyY2UtYmFz ZT1saWIgLS1tNC1iYXNlPW00IC0tZG9jLWJhc2U9ZG9jIC0tdGVzdHMtYmFzZT10ZXN0cyAt LWF1eC1kaXI9YnVpbGQtYXV4IC0tYXZvaWQ9ZHVwIC0tYXZvaWQ9ZXJybm8gLS1hdm9pZD1m Y2hkaXIgLS1hdm9pZD1mY250bCAtLWF2b2lkPWZzdGF0IC0tYXZvaWQ9bWFsbG9jLXBvc2l4 IC0tYXZvaWQ9bXN2Yy1pbnZhbCAtLWF2b2lkPW1zdmMtbm90aHJvdyAtLWF2b2lkPW9wZW4g LS1hdm9pZD1vcGVuYXQtZGllIC0tYXZvaWQ9b3BlbmRpciAtLWF2b2lkPXJhaXNlIC0tYXZv aWQ9c2F2ZS1jd2QgLS1hdm9pZD1zZWxlY3QgLS1hdm9pZD1zaWdwcm9jbWFzayAtLWF2b2lk PXN5c190eXBlcyAtLWF2b2lkPXRocmVhZGxpYiAtLW1ha2VmaWxlLW5hbWU9Z251bGliLm1r IC0tY29uZGl0aW9uYWwtZGVwZW5kZW5jaWVzIC0tbm8tbGlidG9vbCAtLW1hY3JvLXByZWZp eD1nbCAtLW5vLXZjLWZpbGVzIGFsbG9jYS1vcHQgYy1jdHlwZSBjLXN0cmNhc2UgY2FyZWFk bGlua2F0IGNsb3NlLXN0cmVhbSBjcnlwdG8vbWQ1IGNyeXB0by9zaGExIGNyeXB0by9zaGEy NTYgY3J5cHRvL3NoYTUxMiBkdG9hc3RyIGR0b3RpbWVzcGVjIGR1cDIgZW52aXJvbiBleGVj aW5mbyBmYWNjZXNzYXQgZmNudGwtaCBmZGF0YXN5bmMgZmRvcGVuZGlyIGZpbGVtb2RlIGZz dGF0YXQgZnN5bmMgZ2V0bG9hZGF2ZyBnZXRvcHQtZ251IGdldHRpbWUgZ2V0dGltZW9mZGF5 IGlnbm9yZS12YWx1ZSBpbnRwcm9wcyBsYXJnZWZpbGUgbHN0YXQgbWFueXdhcm5pbmdzIG1l bXJjaHIgbWt0aW1lIHBzZWxlY3QgcHRocmVhZF9zaWdtYXNrIHB1dGVudiBxYWNsIHJlYWRs aW5rIHJlYWRsaW5rYXQgc2lnMnN0ciBzb2NrbGVuIHN0YXQtdGltZSBzdGRhbGlnbiBzdGRh cmcgc3RkYm9vbCBzdGRpbyBzdHJmdGltZSBzdHJ0b2ltYXggc3RydG91bWF4IHN5bWxpbmsg c3lzX3N0YXQgc3lzX3RpbWUgdGltZSB0aW1lci10aW1lIHRpbWVzcGVjLWFkZCB0aW1lc3Bl Yy1zdWIgdW5zZXRlbnYgdXRpbWVucyB3YXJuaW5ncwogCiAKIE1PU1RMWUNMRUFORklMRVMg Kz0gY29yZSAqLnN0YWNrZHVtcApAQCAtNTYxLDYgKzU2MSwxNiBAQAogCiAjIyBlbmQgICBn bnVsaWIgbW9kdWxlIHB1dGVudgogCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHFhY2wKKwor bGliZ251X2FfU09VUkNFUyArPSBhY2wtZXJybm8tdmFsaWQuYyBmaWxlLWhhcy1hY2wuYyBx Y29weS1hY2wuYyBxc2V0LWFjbC5jCisKK0VYVFJBX0RJU1QgKz0gYWNsLWludGVybmFsLmgg YWNsLmggYWNsX2VudHJpZXMuYworCitFWFRSQV9saWJnbnVfYV9TT1VSQ0VTICs9IGFjbF9l bnRyaWVzLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBxYWNsCisKICMjIGJlZ2luIGdu dWxpYiBtb2R1bGUgcmVhZGxpbmsKIAogCgo9PT0gYWRkZWQgZmlsZSAnbGliL3Fjb3B5LWFj bC5jJwotLS0gbGliL3Fjb3B5LWFjbC5jCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysr IGxpYi9xY29weS1hY2wuYwkyMDEzLTA0LTE3IDA1OjIxOjMzICswMDAwCkBAIC0wLDAgKzEs NTgzIEBACisvKiBjb3B5LWFjbC5jIC0gY29weSBhY2Nlc3MgY29udHJvbCBsaXN0IGZyb20g b25lIGZpbGUgdG8gYW5vdGhlciBmaWxlCisKKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAz LCAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKwor ICAgV3JpdHRlbiBieSBQYXVsIEVnZ2VydCwgQW5kcmVhcyBHcsO8bmJhY2hlciwgYW5kIEJy dW5vIEhhaWJsZS4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgImFj bC5oIgorCisjaW5jbHVkZSAiYWNsLWludGVybmFsLmgiCisKKworLyogQ29weSBhY2Nlc3Mg Y29udHJvbCBsaXN0cyBmcm9tIG9uZSBmaWxlIHRvIGFub3RoZXIuIElmIFNPVVJDRV9ERVND IGlzCisgICBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvciwgdXNlIGZpbGUgZGVzY3JpcHRvciBv cGVyYXRpb25zLCBlbHNlIHVzZQorICAgZmlsZW5hbWUgYmFzZWQgb3BlcmF0aW9ucyBvbiBT UkNfTkFNRS4gTGlrZXdpc2UgZm9yIERFU1RfREVTQyBhbmQKKyAgIERTVF9OQU1FLgorICAg SWYgYWNjZXNzIGNvbnRyb2wgbGlzdHMgYXJlIG5vdCBhdmFpbGFibGUsIGZjaG1vZCB0aGUg dGFyZ2V0IGZpbGUgdG8KKyAgIE1PREUuICBBbHNvIHNldHMgdGhlIG5vbi1wZXJtaXNzaW9u IGJpdHMgb2YgdGhlIGRlc3RpbmF0aW9uIGZpbGUKKyAgIChTX0lTVUlELCBTX0lTR0lELCBT X0lTVlRYKSB0byB0aG9zZSBmcm9tIE1PREUgaWYgYW55IGFyZSBzZXQuCisgICBSZXR1cm4g MCBpZiBzdWNjZXNzZnVsLgorICAgUmV0dXJuIC0yIGFuZCBzZXQgZXJybm8gZm9yIGFuIGVy cm9yIHJlbGF0aW5nIHRvIHRoZSBzb3VyY2UgZmlsZS4KKyAgIFJldHVybiAtMSBhbmQgc2V0 IGVycm5vIGZvciBhbiBlcnJvciByZWxhdGluZyB0byB0aGUgZGVzdGluYXRpb24gZmlsZS4g ICovCisKK2ludAorcWNvcHlfYWNsIChjb25zdCBjaGFyICpzcmNfbmFtZSwgaW50IHNvdXJj ZV9kZXNjLCBjb25zdCBjaGFyICpkc3RfbmFtZSwKKyAgICAgICAgICAgaW50IGRlc3RfZGVz YywgbW9kZV90IG1vZGUpCit7CisjaWYgVVNFX0FDTCAmJiBIQVZFX0FDTF9HRVRfRklMRQor ICAvKiBQT1NJWCAxMDAzLjFlIChkcmFmdCAxNyAtLSBhYmFuZG9uZWQpIHNwZWNpZmljIHZl cnNpb24uICAqLworICAvKiBMaW51eCwgRnJlZUJTRCwgTWFjIE9TIFgsIElSSVgsIFRydTY0 ICovCisjIGlmICFIQVZFX0FDTF9UWVBFX0VYVEVOREVECisgIC8qIExpbnV4LCBGcmVlQlNE LCBJUklYLCBUcnU2NCAqLworCisgIGFjbF90IGFjbDsKKyAgaW50IHJldDsKKworICBpZiAo SEFWRV9BQ0xfR0VUX0ZEICYmIHNvdXJjZV9kZXNjICE9IC0xKQorICAgIGFjbCA9IGFjbF9n ZXRfZmQgKHNvdXJjZV9kZXNjKTsKKyAgZWxzZQorICAgIGFjbCA9IGFjbF9nZXRfZmlsZSAo c3JjX25hbWUsIEFDTF9UWVBFX0FDQ0VTUyk7CisgIGlmIChhY2wgPT0gTlVMTCkKKyAgICB7 CisgICAgICBpZiAoISBhY2xfZXJybm9fdmFsaWQgKGVycm5vKSkKKyAgICAgICAgcmV0dXJu IHFzZXRfYWNsIChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKTsKKyAgICAgIGVsc2UKKyAg ICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICBpZiAoSEFWRV9BQ0xfU0VUX0ZEICYmIGRl c3RfZGVzYyAhPSAtMSkKKyAgICByZXQgPSBhY2xfc2V0X2ZkIChkZXN0X2Rlc2MsIGFjbCk7 CisgIGVsc2UKKyAgICByZXQgPSBhY2xfc2V0X2ZpbGUgKGRzdF9uYW1lLCBBQ0xfVFlQRV9B Q0NFU1MsIGFjbCk7CisgIGlmIChyZXQgIT0gMCkKKyAgICB7CisgICAgICBpbnQgc2F2ZWRf ZXJybm8gPSBlcnJubzsKKworICAgICAgaWYgKCEgYWNsX2Vycm5vX3ZhbGlkIChlcnJubykg JiYgIWFjbF9hY2Nlc3Nfbm9udHJpdmlhbCAoYWNsKSkKKyAgICAgICAgeworICAgICAgICAg IGFjbF9mcmVlIChhY2wpOworICAgICAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKGRz dF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAg ICAgIHsKKyAgICAgICAgICBhY2xfZnJlZSAoYWNsKTsKKyAgICAgICAgICBjaG1vZF9vcl9m Y2htb2QgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworICAgICAgICAgIGVycm5vID0g c2F2ZWRfZXJybm87CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQor ICBlbHNlCisgICAgYWNsX2ZyZWUgKGFjbCk7CisKKyAgaWYgKCFNT0RFX0lOU0lERV9BQ0wg fHwgKG1vZGUgJiAoU19JU1VJRCB8IFNfSVNHSUQgfCBTX0lTVlRYKSkpCisgICAgeworICAg ICAgLyogV2UgZGlkIG5vdCBjYWxsIGNobW9kIHNvIGZhciwgYW5kIGVpdGhlciB0aGUgbW9k ZSBhbmQgdGhlIEFDTCBhcmUKKyAgICAgICAgIHNlcGFyYXRlIG9yIHNwZWNpYWwgYml0cyBh cmUgdG8gYmUgc2V0IHdoaWNoIGRvbid0IGZpdCBpbnRvIEFDTHMuICAqLworCisgICAgICBp ZiAoY2htb2Rfb3JfZmNobW9kIChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKSAhPSAwKQor ICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGlmIChTX0lTRElSIChtb2RlKSkKKyAg ICB7CisgICAgICBhY2wgPSBhY2xfZ2V0X2ZpbGUgKHNyY19uYW1lLCBBQ0xfVFlQRV9ERUZB VUxUKTsKKyAgICAgIGlmIChhY2wgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0yOworCisg ICAgICBpZiAoYWNsX3NldF9maWxlIChkc3RfbmFtZSwgQUNMX1RZUEVfREVGQVVMVCwgYWNs KSkKKyAgICAgICAgeworICAgICAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworCisg ICAgICAgICAgYWNsX2ZyZWUgKGFjbCk7CisgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJu bzsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAg ICAgYWNsX2ZyZWUgKGFjbCk7CisgICAgfQorICByZXR1cm4gMDsKKworIyBlbHNlIC8qIEhB VkVfQUNMX1RZUEVfRVhURU5ERUQgKi8KKyAgLyogTWFjIE9TIFggKi8KKworICAvKiBPbiBN YWMgT1MgWCwgIGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfQUNDRVNTKQorICAgICBh bmQgICAgICAgICAgIGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfREVGQVVMVCkKKyAg ICAgYWx3YXlzIHJldHVybiBOVUxMIC8gRUlOVkFMLiAgWW91IGhhdmUgdG8gdXNlCisgICAg ICAgICAgICAgICAgICAgYWNsX2dldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9FWFRFTkRFRCkK KyAgICAgb3IgICAgICAgICAgICBhY2xfZ2V0X2ZkIChvcGVuIChuYW1lLCAuLi4pKQorICAg ICB0byByZXRyaWV2ZSBhbiBBQ0wuCisgICAgIE9uIHRoZSBvdGhlciBoYW5kLAorICAgICAg ICAgICAgICAgICAgIGFjbF9zZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfQUNDRVNTLCBhY2wp CisgICAgIGFuZCAgICAgICAgICAgYWNsX3NldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9ERUZB VUxULCBhY2wpCisgICAgIGhhdmUgdGhlIHNhbWUgZWZmZWN0IGFzCisgICAgICAgICAgICAg ICAgICAgYWNsX3NldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9FWFRFTkRFRCwgYWNsKToKKyAg ICAgRWFjaCBvZiB0aGVzZSBjYWxscyBzZXRzIHRoZSBmaWxlJ3MgQUNMLiAgKi8KKworICBh Y2xfdCBhY2w7CisgIGludCByZXQ7CisKKyAgaWYgKEhBVkVfQUNMX0dFVF9GRCAmJiBzb3Vy Y2VfZGVzYyAhPSAtMSkKKyAgICBhY2wgPSBhY2xfZ2V0X2ZkIChzb3VyY2VfZGVzYyk7Cisg IGVsc2UKKyAgICBhY2wgPSBhY2xfZ2V0X2ZpbGUgKHNyY19uYW1lLCBBQ0xfVFlQRV9FWFRF TkRFRCk7CisgIGlmIChhY2wgPT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAoIWFjbF9lcnJu b192YWxpZCAoZXJybm8pKQorICAgICAgICByZXR1cm4gcXNldF9hY2wgKGRzdF9uYW1lLCBk ZXN0X2Rlc2MsIG1vZGUpOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gLTI7CisgICAg fQorCisgIGlmIChIQVZFX0FDTF9TRVRfRkQgJiYgZGVzdF9kZXNjICE9IC0xKQorICAgIHJl dCA9IGFjbF9zZXRfZmQgKGRlc3RfZGVzYywgYWNsKTsKKyAgZWxzZQorICAgIHJldCA9IGFj bF9zZXRfZmlsZSAoZHN0X25hbWUsIEFDTF9UWVBFX0VYVEVOREVELCBhY2wpOworICBpZiAo cmV0ICE9IDApCisgICAgeworICAgICAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisKKyAg ICAgIGlmICghYWNsX2Vycm5vX3ZhbGlkIChzYXZlZF9lcnJubykgJiYgIWFjbF9leHRlbmRl ZF9ub250cml2aWFsIChhY2wpKQorICAgICAgICB7CisgICAgICAgICAgYWNsX2ZyZWUgKGFj bCk7CisgICAgICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAoZHN0X25hbWUsIGRlc3Rf ZGVzYywgbW9kZSk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg ICAgIGFjbF9mcmVlIChhY2wpOworICAgICAgICAgIGNobW9kX29yX2ZjaG1vZCAoZHN0X25h bWUsIGRlc3RfZGVzYywgbW9kZSk7CisgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsK KyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICBh Y2xfZnJlZSAoYWNsKTsKKworICAvKiBTaW5jZSAhTU9ERV9JTlNJREVfQUNMLCB3ZSBoYXZl IHRvIGNhbGwgY2htb2QgZXhwbGljaXRseS4gICovCisgIHJldHVybiBjaG1vZF9vcl9mY2ht b2QgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworCisjIGVuZGlmCisKKyNlbGlmIFVT RV9BQ0wgJiYgZGVmaW5lZCBHRVRBQ0wgLyogU29sYXJpcywgQ3lnd2luLCBub3QgSFAtVVgg Ki8KKworICAvKiBTb2xhcmlzIDIuNSB0aHJvdWdoIFNvbGFyaXMgMTAsIEN5Z3dpbiwgYW5k IGNvbnRlbXBvcmFuZW91cyB2ZXJzaW9ucworICAgICBvZiBVbml4d2FyZS4gIFRoZSBhY2wo KSBjYWxsIHJldHVybnMgdGhlIGFjY2VzcyBhbmQgZGVmYXVsdCBBQ0wgYm90aAorICAgICBh dCBvbmNlLiAgKi8KKyMgaWZkZWYgQUNFX0dFVEFDTAorICBpbnQgYWNlX2NvdW50OworICBh Y2VfdCAqYWNlX2VudHJpZXM7CisjIGVuZGlmCisgIGludCBjb3VudDsKKyAgYWNsZW50X3Qg KmVudHJpZXM7CisgIGludCBkaWRfY2htb2Q7CisgIGludCBzYXZlZF9lcnJubzsKKyAgaW50 IHJldDsKKworIyBpZmRlZiBBQ0VfR0VUQUNMCisgIC8qIFNvbGFyaXMgYWxzbyBoYXMgYSBk aWZmZXJlbnQgdmFyaWFudCBvZiBBQ0xzLCB1c2VkIGluIFpGUyBhbmQgTkZTdjQKKyAgICAg ZmlsZSBzeXN0ZW1zICh3aGVyZWFzIHRoZSBvdGhlciBvbmVzIGFyZSB1c2VkIGluIFVGUyBm aWxlIHN5c3RlbXMpLgorICAgICBUaGVyZSBpcyBhbiBBUEkKKyAgICAgICBwYXRoY29uZiAo bmFtZSwgX1BDX0FDTF9FTkFCTEVEKQorICAgICAgIGZwYXRoY29uZiAoZGVzYywgX1BDX0FD TF9FTkFCTEVEKQorICAgICB0aGF0IGFsbG93cyB0byBkZXRlcm1pbmUgd2hpY2ggb2YgdGhl IHR3byBraW5kcyBvZiBBQ0xzIGlzIHN1cHBvcnRlZAorICAgICBmb3IgdGhlIGdpdmVuIGZp bGUuICBCdXQgc29tZSBmaWxlIHN5c3RlbXMgbWF5IGltcGxlbWVudCB0aGlzIGNhbGwKKyAg ICAgaW5jb3JyZWN0bHksIHNvIGJldHRlciBub3QgdXNlIGl0LgorICAgICBXaGVuIGZldGNo aW5nIHRoZSBzb3VyY2UgQUNMLCB3ZSBzaW1wbHkgZmV0Y2ggYm90aCBBQ0wgdHlwZXMuCisg ICAgIFdoZW4gc2V0dGluZyB0aGUgZGVzdGluYXRpb24gQUNMLCB3ZSB0cnkgZWl0aGVyIEFD TCB0eXBlcywgYXNzdW1pbmcKKyAgICAgdGhhdCB0aGUga2VybmVsIHdpbGwgdHJhbnNsYXRl IHRoZSBBQ0wgZnJvbSBvbmUgZm9ybSB0byB0aGUgb3RoZXIuCisgICAgIChTZWUgaW4gPGh0 dHA6Ly9kb2NzLnN1bi5jb20vYXBwL2RvY3MvZG9jLzgxOS0yMjQxLzZuNGh1YzdpYT9sPWVu JmE9dmlldz4KKyAgICAgdGhlIGRlc2NyaXB0aW9uIG9mIEVOT1RTVVAuKSAgKi8KKyAgZm9y ICg7OykKKyAgICB7CisgICAgICBhY2VfY291bnQgPSAoc291cmNlX2Rlc2MgIT0gLTEKKyAg ICAgICAgICAgICAgICAgICA/IGZhY2wgKHNvdXJjZV9kZXNjLCBBQ0VfR0VUQUNMQ05ULCAw LCBOVUxMKQorICAgICAgICAgICAgICAgICAgIDogYWNsIChzcmNfbmFtZSwgQUNFX0dFVEFD TENOVCwgMCwgTlVMTCkpOworCisgICAgICBpZiAoYWNlX2NvdW50IDwgMCkKKyAgICAgICAg eworICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRUlOVkFMKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICBhY2VfY291bnQgPSAwOworICAgICAgICAg ICAgICBhY2VfZW50cmllcyA9IE5VTEw7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICAg ICAgfQorCisgICAgICBpZiAoYWNlX2NvdW50ID09IDApCisgICAgICAgIHsKKyAgICAgICAg ICBhY2VfZW50cmllcyA9IE5VTEw7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor ICAgICAgYWNlX2VudHJpZXMgPSAoYWNlX3QgKikgbWFsbG9jIChhY2VfY291bnQgKiBzaXpl b2YgKGFjZV90KSk7CisgICAgICBpZiAoYWNlX2VudHJpZXMgPT0gTlVMTCkKKyAgICAgICAg eworICAgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICAgIHJldHVybiAtMjsKKyAg ICAgICAgfQorCisgICAgICByZXQgPSAoc291cmNlX2Rlc2MgIT0gLTEKKyAgICAgICAgICAg ICA/IGZhY2wgKHNvdXJjZV9kZXNjLCBBQ0VfR0VUQUNMLCBhY2VfY291bnQsIGFjZV9lbnRy aWVzKQorICAgICAgICAgICAgIDogYWNsIChzcmNfbmFtZSwgQUNFX0dFVEFDTCwgYWNlX2Nv dW50LCBhY2VfZW50cmllcykpOworICAgICAgaWYgKHJldCA8IDApCisgICAgICAgIHsKKyAg ICAgICAgICBmcmVlIChhY2VfZW50cmllcyk7CisgICAgICAgICAgaWYgKGVycm5vID09IEVO T1NZUyB8fCBlcnJubyA9PSBFSU5WQUwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg IGFjZV9jb3VudCA9IDA7CisgICAgICAgICAgICAgIGFjZV9lbnRyaWVzID0gTlVMTDsKKyAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgcmV0dXJuIC0yOworICAgICAgICB9CisgICAgICBpZiAocmV0ID09IGFjZV9j b3VudCkKKyAgICAgICAgYnJlYWs7CisgICAgICAvKiBIdWg/IFRoZSBudW1iZXIgb2YgQUNM IGVudHJpZXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBjYWxsLgorICAgICAgICAgUmVwZWF0 LiAgKi8KKyAgICB9CisjIGVuZGlmCisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICBjb3Vu dCA9IChzb3VyY2VfZGVzYyAhPSAtMQorICAgICAgICAgICAgICAgPyBmYWNsIChzb3VyY2Vf ZGVzYywgR0VUQUNMQ05ULCAwLCBOVUxMKQorICAgICAgICAgICAgICAgOiBhY2wgKHNyY19u YW1lLCBHRVRBQ0xDTlQsIDAsIE5VTEwpKTsKKworICAgICAgaWYgKGNvdW50IDwgMCkKKyAg ICAgICAgeworICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRU5P VFNVUCB8fCBlcnJubyA9PSBFT1BOT1RTVVBQKQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICBjb3VudCA9IDA7CisgICAgICAgICAgICAgIGVudHJpZXMgPSBOVUxMOworICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAg ICAgICByZXR1cm4gLTI7CisgICAgICAgIH0KKworICAgICAgaWYgKGNvdW50ID09IDApCisg ICAgICAgIHsKKyAgICAgICAgICBlbnRyaWVzID0gTlVMTDsKKyAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorCisgICAgICBlbnRyaWVzID0gKGFjbGVudF90ICopIG1hbGxvYyAoY291 bnQgKiBzaXplb2YgKGFjbGVudF90KSk7CisgICAgICBpZiAoZW50cmllcyA9PSBOVUxMKQor ICAgICAgICB7CisgICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgICAgcmV0dXJu IC0yOworICAgICAgICB9CisKKyAgICAgIGlmICgoc291cmNlX2Rlc2MgIT0gLTEKKyAgICAg ICAgICAgPyBmYWNsIChzb3VyY2VfZGVzYywgR0VUQUNMLCBjb3VudCwgZW50cmllcykKKyAg ICAgICAgICAgOiBhY2wgKHNyY19uYW1lLCBHRVRBQ0wsIGNvdW50LCBlbnRyaWVzKSkKKyAg ICAgICAgICA9PSBjb3VudCkKKyAgICAgICAgYnJlYWs7CisgICAgICAvKiBIdWg/IFRoZSBu dW1iZXIgb2YgQUNMIGVudHJpZXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBjYWxsLgorICAg ICAgICAgUmVwZWF0LiAgKi8KKyAgICB9CisKKyAgLyogSXMgdGhlcmUgYW4gQUNMIG9mIGVp dGhlciBraW5kPyAgKi8KKyMgaWZkZWYgQUNFX0dFVEFDTAorICBpZiAoYWNlX2NvdW50ID09 IDApCisjIGVuZGlmCisgICAgaWYgKGNvdW50ID09IDApCisgICAgICByZXR1cm4gcXNldF9h Y2wgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworCisgIGRpZF9jaG1vZCA9IDA7IC8q IHNldCB0byAxIG9uY2UgdGhlIG1vZGUgYml0cyBpbiAwNzc3IGhhdmUgYmVlbiBzZXQgKi8K KyAgc2F2ZWRfZXJybm8gPSAwOyAvKiB0aGUgZmlyc3Qgbm9uLWlnbm9yYWJsZSBlcnJvciBj b2RlICovCisKKyAgaWYgKCFNT0RFX0lOU0lERV9BQ0wpCisgICAgeworICAgICAgLyogT24g Q3lnd2luLCBpdCBpcyBuZWNlc3NhcnkgdG8gY2FsbCBjaG1vZCBiZWZvcmUgYWNsLCBiZWNh dXNlCisgICAgICAgICBjaG1vZCBjYW4gY2hhbmdlIHRoZSBjb250ZW50cyBvZiB0aGUgQUNM IChpbiB3YXlzIHRoYXQgZG9uJ3QKKyAgICAgICAgIGNoYW5nZSB0aGUgYWxsb3dlZCBhY2Nl c3NlcywgYnV0IHN0aWxsIHZpc2libGUpLiAgKi8KKyAgICAgIGlmIChjaG1vZF9vcl9mY2ht b2QgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpICE9IDApCisgICAgICAgIHNhdmVkX2Vy cm5vID0gZXJybm87CisgICAgICBkaWRfY2htb2QgPSAxOworICAgIH0KKworICAvKiBJZiBi b3RoIGFjZV9lbnRyaWVzIGFuZCBlbnRyaWVzIGFyZSBhdmFpbGFibGUsIHRyeSBTRVRBQ0wg YmVmb3JlCisgICAgIEFDRV9TRVRBQ0wsIGJlY2F1c2UgU0VUQUNMIGNhbm5vdCBmYWlsIHdp dGggRU5PVFNVUCB3aGVyZWFzIEFDRV9TRVRBQ0wKKyAgICAgY2FuLiAgKi8KKworICBpZiAo Y291bnQgPiAwKQorICAgIHsKKyAgICAgIHJldCA9IChkZXN0X2Rlc2MgIT0gLTEKKyAgICAg ICAgICAgICA/IGZhY2wgKGRlc3RfZGVzYywgU0VUQUNMLCBjb3VudCwgZW50cmllcykKKyAg ICAgICAgICAgICA6IGFjbCAoZHN0X25hbWUsIFNFVEFDTCwgY291bnQsIGVudHJpZXMpKTsK KyAgICAgIGlmIChyZXQgPCAwICYmIHNhdmVkX2Vycm5vID09IDApCisgICAgICAgIHsKKyAg ICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAgIGlmICgoZXJybm8gPT0g RU5PU1lTIHx8IGVycm5vID09IEVPUE5PVFNVUFAgfHwgZXJybm8gPT0gRUlOVkFMKQorICAg ICAgICAgICAgICAmJiAhYWNsX25vbnRyaXZpYWwgKGNvdW50LCBlbnRyaWVzKSkKKyAgICAg ICAgICAgIHNhdmVkX2Vycm5vID0gMDsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAg ICBkaWRfY2htb2QgPSAxOworICAgIH0KKyAgZnJlZSAoZW50cmllcyk7CisKKyMgaWZkZWYg QUNFX0dFVEFDTAorICBpZiAoYWNlX2NvdW50ID4gMCkKKyAgICB7CisgICAgICByZXQgPSAo ZGVzdF9kZXNjICE9IC0xCisgICAgICAgICAgICAgPyBmYWNsIChkZXN0X2Rlc2MsIEFDRV9T RVRBQ0wsIGFjZV9jb3VudCwgYWNlX2VudHJpZXMpCisgICAgICAgICAgICAgOiBhY2wgKGRz dF9uYW1lLCBBQ0VfU0VUQUNMLCBhY2VfY291bnQsIGFjZV9lbnRyaWVzKSk7CisgICAgICBp ZiAocmV0IDwgMCAmJiBzYXZlZF9lcnJubyA9PSAwKQorICAgICAgICB7CisgICAgICAgICAg c2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICBpZiAoKGVycm5vID09IEVOT1NZUyB8 fCBlcnJubyA9PSBFSU5WQUwgfHwgZXJybm8gPT0gRU5PVFNVUCkKKyAgICAgICAgICAgICAg JiYgIWFjbF9hY2Vfbm9udHJpdmlhbCAoYWNlX2NvdW50LCBhY2VfZW50cmllcykpCisgICAg ICAgICAgICBzYXZlZF9lcnJubyA9IDA7CisgICAgICAgIH0KKyAgICB9CisgIGZyZWUgKGFj ZV9lbnRyaWVzKTsKKyMgZW5kaWYKKworICBpZiAoTU9ERV9JTlNJREVfQUNMCisgICAgICAm JiBkaWRfY2htb2QgPD0gKChtb2RlICYgKFNfSVNVSUQgfCBTX0lTR0lEIHwgU19JU1ZUWCkp ID8gMSA6IDApKQorICAgIHsKKyAgICAgIC8qIFdlIGRpZCBub3QgY2FsbCBjaG1vZCBzbyBm YXIsIGFuZCBlaXRoZXIgdGhlIG1vZGUgYW5kIHRoZSBBQ0wgYXJlCisgICAgICAgICBzZXBh cmF0ZSBvciBzcGVjaWFsIGJpdHMgYXJlIHRvIGJlIHNldCB3aGljaCBkb24ndCBmaXQgaW50 byBBQ0xzLiAgKi8KKworICAgICAgaWYgKGNobW9kX29yX2ZjaG1vZCAoZHN0X25hbWUsIGRl c3RfZGVzYywgbW9kZSkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChzYXZlZF9l cnJubyA9PSAwKQorICAgICAgICAgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAg fQorICAgIH0KKworICBpZiAoc2F2ZWRfZXJybm8pCisgICAgeworICAgICAgZXJybm8gPSBz YXZlZF9lcnJubzsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIHJldHVybiAwOworCisj ZWxpZiBVU0VfQUNMICYmIEhBVkVfR0VUQUNMIC8qIEhQLVVYICovCisKKyAgc3RydWN0IGFj bF9lbnRyeSBlbnRyaWVzW05BQ0xFTlRSSUVTXTsKKyAgaW50IGNvdW50OworIyBpZiBIQVZF X0FDTFZfSAorICBzdHJ1Y3QgYWNsIGFjbHZfZW50cmllc1tOQUNMVkVOVFJJRVNdOworICBp bnQgYWNsdl9jb3VudDsKKyMgZW5kaWYKKyAgaW50IGRpZF9jaG1vZDsKKyAgaW50IHNhdmVk X2Vycm5vOworICBpbnQgcmV0OworCisgIGNvdW50ID0gKHNvdXJjZV9kZXNjICE9IC0xCisg ICAgICAgICAgID8gZmdldGFjbCAoc291cmNlX2Rlc2MsIE5BQ0xFTlRSSUVTLCBlbnRyaWVz KQorICAgICAgICAgICA6IGdldGFjbCAoc3JjX25hbWUsIE5BQ0xFTlRSSUVTLCBlbnRyaWVz KSk7CisKKyAgaWYgKGNvdW50IDwgMCkKKyAgICB7CisgICAgICBpZiAoZXJybm8gPT0gRU5P U1lTIHx8IGVycm5vID09IEVPUE5PVFNVUFAgfHwgZXJybm8gPT0gRU5PVFNVUCkKKyAgICAg ICAgY291bnQgPSAwOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gLTI7CisgICAgfQor ICBlbHNlIGlmIChjb3VudCA+IDApCisgICAgeworICAgICAgaWYgKGNvdW50ID4gTkFDTEVO VFJJRVMpCisgICAgICAgIC8qIElmIE5BQ0xFTlRSSUVTIGNhbm5vdCBiZSB0cnVzdGVkLCB1 c2UgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbi4gICovCisgICAgICAgIGFib3J0ICgpOwor ICAgIH0KKworIyBpZiBIQVZFX0FDTFZfSAorICBhY2x2X2NvdW50ID0gYWNsICgoY2hhciAq KSBzcmNfbmFtZSwgQUNMX0dFVCwgTkFDTFZFTlRSSUVTLCBhY2x2X2VudHJpZXMpOworCisg IGlmIChhY2x2X2NvdW50IDwgMCkKKyAgICB7CisgICAgICBpZiAoZXJybm8gPT0gRU5PU1lT IHx8IGVycm5vID09IEVPUE5PVFNVUFAgfHwgZXJybm8gPT0gRUlOVkFMKQorICAgICAgICBj b3VudCA9IDA7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisgIGVs c2UgaWYgKGFjbHZfY291bnQgPiAwKQorICAgIHsKKyAgICAgIGlmIChhY2x2X2NvdW50ID4g TkFDTFZFTlRSSUVTKQorICAgICAgICAvKiBJZiBOQUNMVkVOVFJJRVMgY2Fubm90IGJlIHRy dXN0ZWQsIHVzZSBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uLiAgKi8KKyAgICAgICAgYWJv cnQgKCk7CisgICAgfQorIyBlbmRpZgorCisgIGlmIChjb3VudCA9PSAwKQorIyBpZiBIQVZF X0FDTFZfSAorICAgIGlmIChhY2x2X2NvdW50ID09IDApCisjIGVuZGlmCisgICAgICByZXR1 cm4gcXNldF9hY2wgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworCisgIGRpZF9jaG1v ZCA9IDA7IC8qIHNldCB0byAxIG9uY2UgdGhlIG1vZGUgYml0cyBpbiAwNzc3IGhhdmUgYmVl biBzZXQgKi8KKyAgc2F2ZWRfZXJybm8gPSAwOyAvKiB0aGUgZmlyc3Qgbm9uLWlnbm9yYWJs ZSBlcnJvciBjb2RlICovCisKKyAgaWYgKGNvdW50ID4gMCkKKyAgICB7CisgICAgICByZXQg PSAoZGVzdF9kZXNjICE9IC0xCisgICAgICAgICAgICAgPyBmc2V0YWNsIChkZXN0X2Rlc2Ms IGNvdW50LCBlbnRyaWVzKQorICAgICAgICAgICAgIDogc2V0YWNsIChkc3RfbmFtZSwgY291 bnQsIGVudHJpZXMpKTsKKyAgICAgIGlmIChyZXQgPCAwICYmIHNhdmVkX2Vycm5vID09IDAp CisgICAgICAgIHsKKyAgICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAg IGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9 PSBFTk9UU1VQKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCBz b3VyY2Vfc3RhdGJ1ZjsKKworICAgICAgICAgICAgICBpZiAoKHNvdXJjZV9kZXNjICE9IC0x CisgICAgICAgICAgICAgICAgICAgPyBmc3RhdCAoc291cmNlX2Rlc2MsICZzb3VyY2Vfc3Rh dGJ1ZikKKyAgICAgICAgICAgICAgICAgICA6IHN0YXQgKHNyY19uYW1lLCAmc291cmNlX3N0 YXRidWYpKSA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlm ICghYWNsX25vbnRyaXZpYWwgKGNvdW50LCBlbnRyaWVzLCAmc291cmNlX3N0YXRidWYpKQor ICAgICAgICAgICAgICAgICAgICBzYXZlZF9lcnJubyA9IDA7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2F2ZWRfZXJybm8gPSBl cnJubzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBk aWRfY2htb2QgPSAxOworICAgIH0KKworIyBpZiBIQVZFX0FDTFZfSAorICBpZiAoYWNsdl9j b3VudCA+IDApCisgICAgeworICAgICAgcmV0ID0gYWNsICgoY2hhciAqKSBkc3RfbmFtZSwg QUNMX1NFVCwgYWNsdl9jb3VudCwgYWNsdl9lbnRyaWVzKTsKKyAgICAgIGlmIChyZXQgPCAw ICYmIHNhdmVkX2Vycm5vID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBzYXZlZF9lcnJu byA9IGVycm5vOworICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0g RU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFSU5WQUwpCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgIGlmICghYWNsdl9ub250cml2aWFsIChhY2x2X2NvdW50LCBhY2x2X2VudHJpZXMp KQorICAgICAgICAgICAgICAgIHNhdmVkX2Vycm5vID0gMDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBkaWRfY2htb2QgPSAxOworICAgIH0KKyMg ZW5kaWYKKworICBpZiAoZGlkX2NobW9kIDw9ICgobW9kZSAmIChTX0lTVUlEIHwgU19JU0dJ RCB8IFNfSVNWVFgpKSA/IDEgOiAwKSkKKyAgICB7CisgICAgICAvKiBXZSBkaWQgbm90IGNh bGwgY2htb2Qgc28gZmFyLCBhbmQgc3BlY2lhbCBiaXRzIGFyZSB0byBiZSBzZXQgd2hpY2gK KyAgICAgICAgIGRvbid0IGZpdCBpbnRvIEFDTHMuICAqLworCisgICAgICBpZiAoY2htb2Rf b3JfZmNobW9kIChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKSAhPSAwKQorICAgICAgICB7 CisgICAgICAgICAgaWYgKHNhdmVkX2Vycm5vID09IDApCisgICAgICAgICAgICBzYXZlZF9l cnJubyA9IGVycm5vOworICAgICAgICB9CisgICAgfQorCisgIGlmIChzYXZlZF9lcnJubykK KyAgICB7CisgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgcmV0dXJuIC0xOwor ICAgIH0KKyAgcmV0dXJuIDA7CisKKyNlbGlmIFVTRV9BQ0wgJiYgSEFWRV9BQ0xYX0dFVCAm JiAwIC8qIEFJWCAqLworCisgIC8qIFRPRE8gKi8KKworI2VsaWYgVVNFX0FDTCAmJiBIQVZF X1NUQVRBQ0wgLyogb2xkZXIgQUlYICovCisKKyAgdW5pb24geyBzdHJ1Y3QgYWNsIGE7IGNo YXIgcm9vbVs0MDk2XTsgfSB1OworICBpbnQgcmV0OworCisgIGlmICgoc291cmNlX2Rlc2Mg IT0gLTEKKyAgICAgICA/IGZzdGF0YWNsIChzb3VyY2VfZGVzYywgU1RYX05PUk1BTCwgJnUu YSwgc2l6ZW9mICh1KSkKKyAgICAgICA6IHN0YXRhY2wgKHNyY19uYW1lLCBTVFhfTk9STUFM LCAmdS5hLCBzaXplb2YgKHUpKSkKKyAgICAgIDwgMCkKKyAgICByZXR1cm4gLTI7CisKKyAg cmV0ID0gKGRlc3RfZGVzYyAhPSAtMQorICAgICAgICAgPyBmY2hhY2wgKGRlc3RfZGVzYywg JnUuYSwgdS5hLmFjbF9sZW4pCisgICAgICAgICA6IGNoYWNsIChkc3RfbmFtZSwgJnUuYSwg dS5hLmFjbF9sZW4pKTsKKyAgaWYgKHJldCA8IDApCisgICAgeworICAgICAgaW50IHNhdmVk X2Vycm5vID0gZXJybm87CisKKyAgICAgIGNobW9kX29yX2ZjaG1vZCAoZHN0X25hbWUsIGRl c3RfZGVzYywgbW9kZSk7CisgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgcmV0 dXJuIC0xOworICAgIH0KKworICAvKiBObyBuZWVkIHRvIGNhbGwgY2htb2Rfb3JfZmNobW9k IGF0IHRoaXMgcG9pbnQsIHNpbmNlIHRoZSBtb2RlIGJpdHMKKyAgICAgU19JU1VJRCwgU19J U0dJRCwgU19JU1ZUWCBhcmUgYWxzbyBzdG9yZWQgaW4gdGhlIEFDTC4gICovCisKKyAgcmV0 dXJuIDA7CisKKyNlbGlmIFVTRV9BQ0wgJiYgSEFWRV9BQ0xTT1JUIC8qIE5vblN0b3AgS2Vy bmVsICovCisKKyAgc3RydWN0IGFjbCBlbnRyaWVzW05BQ0xFTlRSSUVTXTsKKyAgaW50IGNv dW50OworICBpbnQgcmV0OworCisgIGNvdW50ID0gYWNsICgoY2hhciAqKSBzcmNfbmFtZSwg QUNMX0dFVCwgTkFDTEVOVFJJRVMsIGVudHJpZXMpOworCisgIGlmIChjb3VudCA8IDApCisg ICAgeworICAgICAgaWYgKDApCisgICAgICAgIGNvdW50ID0gMDsKKyAgICAgIGVsc2UKKyAg ICAgICAgcmV0dXJuIC0yOworICAgIH0KKyAgZWxzZSBpZiAoY291bnQgPiAwKQorICAgIHsK KyAgICAgIGlmIChjb3VudCA+IE5BQ0xFTlRSSUVTKQorICAgICAgICAvKiBJZiBOQUNMRU5U UklFUyBjYW5ub3QgYmUgdHJ1c3RlZCwgdXNlIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24u ICAqLworICAgICAgICBhYm9ydCAoKTsKKyAgICB9CisKKyAgaWYgKGNvdW50ID09IDApCisg ICAgcmV0dXJuIHFzZXRfYWNsIChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKTsKKworICBy ZXQgPSBhY2wgKChjaGFyICopIGRzdF9uYW1lLCBBQ0xfU0VULCBjb3VudCwgZW50cmllcyk7 CisgIGlmIChyZXQgPCAwKQorICAgIHsKKyAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5v OworCisgICAgICBpZiAoMCkKKyAgICAgICAgeworICAgICAgICAgIGlmICghYWNsX25vbnRy aXZpYWwgKGNvdW50LCBlbnRyaWVzKSkKKyAgICAgICAgICAgIHJldHVybiBjaG1vZF9vcl9m Y2htb2QgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworICAgICAgICB9CisKKyAgICAg IGNobW9kX29yX2ZjaG1vZCAoZHN0X25hbWUsIGRlc3RfZGVzYywgbW9kZSk7CisgICAgICBl cnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAo bW9kZSAmIChTX0lTVUlEIHwgU19JU0dJRCB8IFNfSVNWVFgpKQorICAgIHsKKyAgICAgIC8q IFdlIGRpZCBub3QgY2FsbCBjaG1vZCBzbyBmYXIsIGFuZCBlaXRoZXIgdGhlIG1vZGUgYW5k IHRoZSBBQ0wgYXJlCisgICAgICAgICBzZXBhcmF0ZSBvciBzcGVjaWFsIGJpdHMgYXJlIHRv IGJlIHNldCB3aGljaCBkb24ndCBmaXQgaW50byBBQ0xzLiAgKi8KKworICAgICAgcmV0dXJu IGNobW9kX29yX2ZjaG1vZCAoZHN0X25hbWUsIGRlc3RfZGVzYywgbW9kZSk7CisgICAgfQor ICByZXR1cm4gMDsKKworI2Vsc2UKKworICByZXR1cm4gcXNldF9hY2wgKGRzdF9uYW1lLCBk ZXN0X2Rlc2MsIG1vZGUpOworCisjZW5kaWYKK30KCj09PSBhZGRlZCBmaWxlICdsaWIvcXNl dC1hY2wuYycKLS0tIGxpYi9xc2V0LWFjbC5jCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAK KysrIGxpYi9xc2V0LWFjbC5jCTIwMTMtMDQtMjggMDA6NDY6MzYgKzAwMDAKQEAgLTAsMCAr MSw2NzYgQEAKKy8qIHFzZXQtYWNsLmMgLSBzZXQgYWNjZXNzIGNvbnRyb2wgbGlzdCBlcXVp dmFsZW50IHRvIGEgbW9kZQorCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMywgMjAwNS0y MDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJ ZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyAgIFdyaXR0 ZW4gYnkgUGF1bCBFZ2dlcnQgYW5kIEFuZHJlYXMgR3J1ZW5iYWNoZXIsIGFuZCBCcnVubyBI YWlibGUuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNkZWZpbmUgQUNMX0lOVEVS TkFMX0lOTElORSBfR0xfRVhURVJOX0lOTElORQorCisjaW5jbHVkZSAiYWNsLmgiCisKKyNp bmNsdWRlICJhY2wtaW50ZXJuYWwuaCIKKworCisvKiBJZiBERVNDIGlzIGEgdmFsaWQgZmls ZSBkZXNjcmlwdG9yIHVzZSBmY2htb2QgdG8gY2hhbmdlIHRoZQorICAgZmlsZSdzIG1vZGUg dG8gTU9ERSBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBmY2htb2QuIE9uIHN5c3RlbXMKKyAgIHRo YXQgZG9uJ3QgaGF2ZSBmY2htb2QgYW5kIGlmIERFU0MgaXMgaW52YWxpZCwgdXNlIGNobW9k IG9uCisgICBOQU1FIGluc3RlYWQuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLiAgUmV0 dXJuIC0xIGFuZCBzZXQgZXJybm8gdXBvbiBmYWlsdXJlLiAgKi8KKworaW50CitjaG1vZF9v cl9mY2htb2QgKGNvbnN0IGNoYXIgKm5hbWUsIGludCBkZXNjLCBtb2RlX3QgbW9kZSkKK3sK KyAgaWYgKEhBVkVfRkNITU9EICYmIGRlc2MgIT0gLTEpCisgICAgcmV0dXJuIGZjaG1vZCAo ZGVzYywgbW9kZSk7CisgIGVsc2UKKyAgICByZXR1cm4gY2htb2QgKG5hbWUsIG1vZGUpOwor fQorCisvKiBTZXQgdGhlIGFjY2VzcyBjb250cm9sIGxpc3RzIG9mIGEgZmlsZS4gSWYgREVT QyBpcyBhIHZhbGlkIGZpbGUKKyAgIGRlc2NyaXB0b3IsIHVzZSBmaWxlIGRlc2NyaXB0b3Ig b3BlcmF0aW9ucyB3aGVyZSBhdmFpbGFibGUsIGVsc2UgdXNlCisgICBmaWxlbmFtZSBiYXNl ZCBvcGVyYXRpb25zIG9uIE5BTUUuICBJZiBhY2Nlc3MgY29udHJvbCBsaXN0cyBhcmUgbm90 CisgICBhdmFpbGFibGUsIGZjaG1vZCB0aGUgdGFyZ2V0IGZpbGUgdG8gTU9ERS4gIEFsc28g c2V0cyB0aGUKKyAgIG5vbi1wZXJtaXNzaW9uIGJpdHMgb2YgdGhlIGRlc3RpbmF0aW9uIGZp bGUgKFNfSVNVSUQsIFNfSVNHSUQsIFNfSVNWVFgpCisgICB0byB0aG9zZSBmcm9tIE1PREUg aWYgYW55IGFyZSBzZXQuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLiAgUmV0dXJuIC0x IGFuZCBzZXQgZXJybm8gdXBvbiBmYWlsdXJlLiAgKi8KKworaW50Citxc2V0X2FjbCAoY2hh ciBjb25zdCAqbmFtZSwgaW50IGRlc2MsIG1vZGVfdCBtb2RlKQoreworI2lmIFVTRV9BQ0wK KyMgaWYgSEFWRV9BQ0xfR0VUX0ZJTEUKKyAgLyogUE9TSVggMTAwMy4xZSBkcmFmdCAxNyAo YWJhbmRvbmVkKSBzcGVjaWZpYyB2ZXJzaW9uLiAgKi8KKyAgLyogTGludXgsIEZyZWVCU0Qs IE1hYyBPUyBYLCBJUklYLCBUcnU2NCAqLworIyAgaWYgIUhBVkVfQUNMX1RZUEVfRVhURU5E RUQKKyAgLyogTGludXgsIEZyZWVCU0QsIElSSVgsIFRydTY0ICovCisKKyAgLyogV2UgbXVz dCBhbHNvIGhhdmUgYWNsX2Zyb21fdGV4dCBhbmQgYWNsX2RlbGV0ZV9kZWZfZmlsZS4KKyAg ICAgKGFjbF9kZWxldGVfZGVmX2ZpbGUgY291bGQgYmUgZW11bGF0ZWQgd2l0aCBhY2xfaW5p dCBmb2xsb3dlZAorICAgICAgYnkgYWNsX3NldF9maWxlLCBidXQgYWNsX3NldF9maWxlIHdp dGggYW4gZW1wdHkgYWNsIGlzCisgICAgICB1bnNwZWNpZmllZC4pICAqLworCisjICAgaWZu ZGVmIEhBVkVfQUNMX0ZST01fVEVYVAorIyAgICBlcnJvciBNdXN0IGhhdmUgYWNsX2Zyb21f dGV4dCAoc2VlIFBPU0lYIDEwMDMuMWUgZHJhZnQgMTcpLgorIyAgIGVuZGlmCisjICAgaWZu ZGVmIEhBVkVfQUNMX0RFTEVURV9ERUZfRklMRQorIyAgICBlcnJvciBNdXN0IGhhdmUgYWNs X2RlbGV0ZV9kZWZfZmlsZSAoc2VlIFBPU0lYIDEwMDMuMWUgZHJhZnQgMTcpLgorIyAgIGVu ZGlmCisKKyAgYWNsX3QgYWNsOworICBpbnQgcmV0OworCisgIGlmIChIQVZFX0FDTF9GUk9N X01PREUpIC8qIExpbnV4ICovCisgICAgeworICAgICAgYWNsID0gYWNsX2Zyb21fbW9kZSAo bW9kZSk7CisgICAgICBpZiAoIWFjbCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAg ZWxzZSAvKiBGcmVlQlNELCBJUklYLCBUcnU2NCAqLworICAgIHsKKyAgICAgIC8qIElmIHdl IHdlcmUgdG8gY3JlYXRlIHRoZSBBQ0wgdXNpbmcgdGhlIGZ1bmN0aW9ucyBhY2xfaW5pdCgp LAorICAgICAgICAgYWNsX2NyZWF0ZV9lbnRyeSgpLCBhY2xfc2V0X3RhZ190eXBlKCksIGFj bF9zZXRfcXVhbGlmaWVyKCksCisgICAgICAgICBhY2xfZ2V0X3Blcm1zZXQoKSwgYWNsX2Ns ZWFyX3Blcm1bc10oKSwgYWNsX2FkZF9wZXJtKCksIHdlCisgICAgICAgICB3b3VsZCBuZWVk IHRvIGNyZWF0ZSBhIHF1YWxpZmllci4gIEkgZG9uJ3Qga25vdyBob3cgdG8gZG8gdGhpcy4K KyAgICAgICAgIFNvIGNyZWF0ZSBpdCB1c2luZyBhY2xfZnJvbV90ZXh0KCkuICAqLworCisj ICAgaWYgSEFWRV9BQ0xfRlJFRV9URVhUIC8qIFRydTY0ICovCisgICAgICBjaGFyIGFjbF90 ZXh0W10gPSAidTo6LS0tLGc6Oi0tLSxvOjotLS0sIjsKKyMgICBlbHNlIC8qIEZyZWVCU0Qs IElSSVggKi8KKyAgICAgIGNoYXIgYWNsX3RleHRbXSA9ICJ1OjotLS0sZzo6LS0tLG86Oi0t LSI7CisjICAgZW5kaWYKKworICAgICAgaWYgKG1vZGUgJiBTX0lSVVNSKSBhY2xfdGV4dFsg M10gPSAncic7CisgICAgICBpZiAobW9kZSAmIFNfSVdVU1IpIGFjbF90ZXh0WyA0XSA9ICd3 JzsKKyAgICAgIGlmIChtb2RlICYgU19JWFVTUikgYWNsX3RleHRbIDVdID0gJ3gnOworICAg ICAgaWYgKG1vZGUgJiBTX0lSR1JQKSBhY2xfdGV4dFsxMF0gPSAncic7CisgICAgICBpZiAo bW9kZSAmIFNfSVdHUlApIGFjbF90ZXh0WzExXSA9ICd3JzsKKyAgICAgIGlmIChtb2RlICYg U19JWEdSUCkgYWNsX3RleHRbMTJdID0gJ3gnOworICAgICAgaWYgKG1vZGUgJiBTX0lST1RI KSBhY2xfdGV4dFsxN10gPSAncic7CisgICAgICBpZiAobW9kZSAmIFNfSVdPVEgpIGFjbF90 ZXh0WzE4XSA9ICd3JzsKKyAgICAgIGlmIChtb2RlICYgU19JWE9USCkgYWNsX3RleHRbMTld ID0gJ3gnOworCisgICAgICBhY2wgPSBhY2xfZnJvbV90ZXh0IChhY2xfdGV4dCk7CisgICAg ICBpZiAoIWFjbCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgaWYgKEhBVkVfQUNM X1NFVF9GRCAmJiBkZXNjICE9IC0xKQorICAgIHJldCA9IGFjbF9zZXRfZmQgKGRlc2MsIGFj bCk7CisgIGVsc2UKKyAgICByZXQgPSBhY2xfc2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0FD Q0VTUywgYWNsKTsKKyAgaWYgKHJldCAhPSAwKQorICAgIHsKKyAgICAgIGludCBzYXZlZF9l cnJubyA9IGVycm5vOworICAgICAgYWNsX2ZyZWUgKGFjbCk7CisgICAgICBpZiAoISBhY2xf ZXJybm9fdmFsaWQgKGVycm5vKSkKKyAgICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAo bmFtZSwgZGVzYywgbW9kZSk7CisgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAg cmV0dXJuIC0xOworICAgIH0KKyAgZWxzZQorICAgIGFjbF9mcmVlIChhY2wpOworCisgIGlm IChTX0lTRElSIChtb2RlKSAmJiBhY2xfZGVsZXRlX2RlZl9maWxlIChuYW1lKSkKKyAgICBy ZXR1cm4gLTE7CisKKyAgaWYgKCFNT0RFX0lOU0lERV9BQ0wgfHwgKG1vZGUgJiAoU19JU1VJ RCB8IFNfSVNHSUQgfCBTX0lTVlRYKSkpCisgICAgeworICAgICAgLyogV2UgZGlkIG5vdCBj YWxsIGNobW9kIHNvIGZhciwgYW5kIGVpdGhlciB0aGUgbW9kZSBhbmQgdGhlIEFDTCBhcmUK KyAgICAgICAgIHNlcGFyYXRlIG9yIHNwZWNpYWwgYml0cyBhcmUgdG8gYmUgc2V0IHdoaWNo IGRvbid0IGZpdCBpbnRvIEFDTHMuICAqLworICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1v ZCAobmFtZSwgZGVzYywgbW9kZSk7CisgICAgfQorICByZXR1cm4gMDsKKworIyAgZWxzZSAv KiBIQVZFX0FDTF9UWVBFX0VYVEVOREVEICovCisgIC8qIE1hYyBPUyBYICovCisKKyAgLyog T24gTWFjIE9TIFgsICBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0FDQ0VTUykKKyAg ICAgYW5kICAgICAgICAgICBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0RFRkFVTFQp CisgICAgIGFsd2F5cyByZXR1cm4gTlVMTCAvIEVJTlZBTC4gIFlvdSBoYXZlIHRvIHVzZQor ICAgICAgICAgICAgICAgICAgIGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfRVhURU5E RUQpCisgICAgIG9yICAgICAgICAgICAgYWNsX2dldF9mZCAob3BlbiAobmFtZSwgLi4uKSkK KyAgICAgdG8gcmV0cmlldmUgYW4gQUNMLgorICAgICBPbiB0aGUgb3RoZXIgaGFuZCwKKyAg ICAgICAgICAgICAgICAgICBhY2xfc2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0FDQ0VTUywg YWNsKQorICAgICBhbmQgICAgICAgICAgIGFjbF9zZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVf REVGQVVMVCwgYWNsKQorICAgICBoYXZlIHRoZSBzYW1lIGVmZmVjdCBhcworICAgICAgICAg ICAgICAgICAgIGFjbF9zZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfRVhURU5ERUQsIGFjbCk6 CisgICAgIEVhY2ggb2YgdGhlc2UgY2FsbHMgc2V0cyB0aGUgZmlsZSdzIEFDTC4gICovCisK KyAgYWNsX3QgYWNsOworICBpbnQgcmV0OworCisgIC8qIFJlbW92ZSB0aGUgQUNMIGlmIHRo ZSBmaWxlIGhhcyBBQ0xzLiAgKi8KKyAgaWYgKEhBVkVfQUNMX0dFVF9GRCAmJiBkZXNjICE9 IC0xKQorICAgIGFjbCA9IGFjbF9nZXRfZmQgKGRlc2MpOworICBlbHNlCisgICAgYWNsID0g YWNsX2dldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9FWFRFTkRFRCk7CisgIGlmIChhY2wpCisg ICAgeworICAgICAgYWNsX2ZyZWUgKGFjbCk7CisKKyAgICAgIGFjbCA9IGFjbF9pbml0ICgw KTsKKyAgICAgIGlmIChhY2wpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoSEFWRV9BQ0xf U0VUX0ZEICYmIGRlc2MgIT0gLTEpCisgICAgICAgICAgICByZXQgPSBhY2xfc2V0X2ZkIChk ZXNjLCBhY2wpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IGFjbF9zZXRf ZmlsZSAobmFtZSwgQUNMX1RZUEVfRVhURU5ERUQsIGFjbCk7CisgICAgICAgICAgaWYgKHJl dCAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpbnQgc2F2ZWRfZXJybm8g PSBlcnJubzsKKyAgICAgICAgICAgICAgYWNsX2ZyZWUgKGFjbCk7CisgICAgICAgICAgICAg IGlmICghIGFjbF9lcnJub192YWxpZCAoc2F2ZWRfZXJybm8pKQorICAgICAgICAgICAgICAg IHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUpOworICAgICAgICAg ICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgICAgICAgICByZXR1cm4gLTE7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgYWNsX2ZyZWUgKGFjbCk7CisgICAgICAgIH0KKyAg ICB9CisKKyAgLyogU2luY2UgIU1PREVfSU5TSURFX0FDTCwgd2UgaGF2ZSB0byBjYWxsIGNo bW9kIGV4cGxpY2l0bHkuICAqLworICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1lLCBk ZXNjLCBtb2RlKTsKKyMgIGVuZGlmCisKKyMgZWxpZiBIQVZFX0ZBQ0wgJiYgZGVmaW5lZCBH RVRBQ0wgLyogU29sYXJpcywgQ3lnd2luLCBub3QgSFAtVVggKi8KKworICBpbnQgZG9uZV9z ZXRhY2wgPSAwOworCisjICBpZmRlZiBBQ0VfR0VUQUNMCisgIC8qIFNvbGFyaXMgYWxzbyBo YXMgYSBkaWZmZXJlbnQgdmFyaWFudCBvZiBBQ0xzLCB1c2VkIGluIFpGUyBhbmQgTkZTdjQK KyAgICAgZmlsZSBzeXN0ZW1zICh3aGVyZWFzIHRoZSBvdGhlciBvbmVzIGFyZSB1c2VkIGlu IFVGUyBmaWxlIHN5c3RlbXMpLiAgKi8KKworICAvKiBUaGUgZmxhZ3MgaW4gdGhlIGFjZV90 IHN0cnVjdHVyZSBjaGFuZ2VkIGluIGEgYmluYXJ5IGluY29tcGF0aWJsZSB3YXkKKyAgICAg d2hlbiBBQ0xfTk9fVFJJVklBTCBldGMuIHdlcmUgaW50cm9kdWNlZCBpbiA8c3lzL2FjbC5o PiB2ZXJzaW9uIDEuMTUuCisgICAgIEhvdyB0byBkaXN0aW5ndWlzaCB0aGUgdHdvIGNvbnZl bnRpb25zIGF0IHJ1bnRpbWU/CisgICAgIFdlIGZldGNoIHRoZSBleGlzdGluZyBBQ0wuICBJ biB0aGUgb2xkIGNvbnZlbnRpb24sIHVzdWFsbHkgdGhyZWUgQUNFcyBoYXZlCisgICAgIGFf ZmxhZ3MgPSBBQ0VfT1dORVIgLyBBQ0VfR1JPVVAgLyBBQ0VfT1RIRVIsIGluIHRoZSByYW5n ZSAweDAxMDAuLjB4MDQwMC4KKyAgICAgSW4gdGhlIG5ldyBjb252ZW50aW9uLCB0aGVzZSB2 YWx1ZXMgYXJlIG5vdCB1c2VkLiAgKi8KKyAgaW50IGNvbnZlbnRpb247CisKKyAgeworICAg IC8qIEluaXRpYWxseSwgdHJ5IHRvIHJlYWQgdGhlIGVudHJpZXMgaW50byBhIHN0YWNrLWFs bG9jYXRlZCBidWZmZXIuCisgICAgICAgVXNlIG1hbGxvYyBpZiBpdCBkb2VzIG5vdCBmaXQu ICAqLworICAgIGVudW0KKyAgICAgIHsKKyAgICAgICAgYWxsb2NfaW5pdCA9IDQwMDAgLyBz aXplb2YgKGFjZV90KSwgLyogPj0gMyAqLworICAgICAgICBhbGxvY19tYXggPSBNSU4gKElO VF9NQVgsIFNJWkVfTUFYIC8gc2l6ZW9mIChhY2VfdCkpCisgICAgICB9OworICAgIGFjZV90 IGJ1ZlthbGxvY19pbml0XTsKKyAgICBzaXplX3QgYWxsb2MgPSBhbGxvY19pbml0OworICAg IGFjZV90ICplbnRyaWVzID0gYnVmOworICAgIGFjZV90ICptYWxsb2NlZCA9IE5VTEw7Cisg ICAgaW50IGNvdW50OworCisgICAgZm9yICg7OykKKyAgICAgIHsKKyAgICAgICAgY291bnQg PSAoZGVzYyAhPSAtMQorICAgICAgICAgICAgICAgICA/IGZhY2wgKGRlc2MsIEFDRV9HRVRB Q0wsIGFsbG9jLCBlbnRyaWVzKQorICAgICAgICAgICAgICAgICA6IGFjbCAobmFtZSwgQUNF X0dFVEFDTCwgYWxsb2MsIGVudHJpZXMpKTsKKyAgICAgICAgaWYgKGNvdW50IDwgMCAmJiBl cnJubyA9PSBFTk9TUEMpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogSW5jcmVhc2Ug dGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4gICovCisgICAgICAgICAgICBmcmVlIChtYWxsb2Nl ZCk7CisgICAgICAgICAgICBpZiAoYWxsb2MgPiBhbGxvY19tYXggLyAyKQorICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgICAgICAg ICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBhbGxvYyA9IDIg KiBhbGxvYzsgLyogPD0gYWxsb2NfbWF4ICovCisgICAgICAgICAgICBlbnRyaWVzID0gbWFs bG9jZWQgPSAoYWNlX3QgKikgbWFsbG9jIChhbGxvYyAqIHNpemVvZiAoYWNlX3QpKTsKKyAg ICAgICAgICAgIGlmIChlbnRyaWVzID09IE5VTEwpCisgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0K KyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICBpZiAoY291bnQgPD0gMCkKKyAgICAg IGNvbnZlbnRpb24gPSAtMTsKKyAgICBlbHNlCisgICAgICB7CisgICAgICAgIGludCBpOwor CisgICAgICAgIGNvbnZlbnRpb24gPSAwOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291 bnQ7IGkrKykKKyAgICAgICAgICBpZiAoZW50cmllc1tpXS5hX2ZsYWdzICYgKE9MRF9BQ0Vf T1dORVIgfCBPTERfQUNFX0dST1VQIHwgT0xEX0FDRV9PVEhFUikpCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgIGNvbnZlbnRpb24gPSAxOworICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgIH0KKyAgICAgIH0KKyAgICBmcmVlIChtYWxsb2NlZCk7CisgIH0KKwor ICBpZiAoY29udmVudGlvbiA+PSAwKQorICAgIHsKKyAgICAgIGFjZV90IGVudHJpZXNbNl07 CisgICAgICBpbnQgY291bnQ7CisgICAgICBpbnQgcmV0OworCisgICAgICBpZiAoY29udmVu dGlvbikKKyAgICAgICAgeworICAgICAgICAgIC8qIFJ1bm5pbmcgb24gU29sYXJpcyAxMC4g ICovCisgICAgICAgICAgZW50cmllc1swXS5hX3R5cGUgPSBPTERfQUxMT1c7CisgICAgICAg ICAgZW50cmllc1swXS5hX2ZsYWdzID0gT0xEX0FDRV9PV05FUjsKKyAgICAgICAgICBlbnRy aWVzWzBdLmFfd2hvID0gMDsgLyogaXJyZWxldmFudCAqLworICAgICAgICAgIGVudHJpZXNb MF0uYV9hY2Nlc3NfbWFzayA9IChtb2RlID4+IDYpICYgNzsKKyAgICAgICAgICBlbnRyaWVz WzFdLmFfdHlwZSA9IE9MRF9BTExPVzsKKyAgICAgICAgICBlbnRyaWVzWzFdLmFfZmxhZ3Mg PSBPTERfQUNFX0dST1VQOworICAgICAgICAgIGVudHJpZXNbMV0uYV93aG8gPSAwOyAvKiBp cnJlbGV2YW50ICovCisgICAgICAgICAgZW50cmllc1sxXS5hX2FjY2Vzc19tYXNrID0gKG1v ZGUgPj4gMykgJiA3OworICAgICAgICAgIGVudHJpZXNbMl0uYV90eXBlID0gT0xEX0FMTE9X OworICAgICAgICAgIGVudHJpZXNbMl0uYV9mbGFncyA9IE9MRF9BQ0VfT1RIRVI7CisgICAg ICAgICAgZW50cmllc1syXS5hX3dobyA9IDA7CisgICAgICAgICAgZW50cmllc1syXS5hX2Fj Y2Vzc19tYXNrID0gbW9kZSAmIDc7CisgICAgICAgICAgY291bnQgPSAzOworICAgICAgICB9 CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBSdW5uaW5nIG9uIFNvbGFy aXMgMTAgKG5ld2VyIHZlcnNpb24pIG9yIFNvbGFyaXMgMTEuCisgICAgICAgICAgICAgVGhl IGRldGFpbHMgaGVyZSB3ZXJlIGZvdW5kIHRocm91Z2ggIi9iaW4vbHMgLWx2ZCBzb21lZmls ZXMiLiAgKi8KKyAgICAgICAgICBlbnRyaWVzWzBdLmFfdHlwZSA9IE5FV19BQ0VfQUNDRVNT X0RFTklFRF9BQ0VfVFlQRTsKKyAgICAgICAgICBlbnRyaWVzWzBdLmFfZmxhZ3MgPSBORVdf QUNFX09XTkVSOworICAgICAgICAgIGVudHJpZXNbMF0uYV93aG8gPSAwOyAvKiBpcnJlbGV2 YW50ICovCisgICAgICAgICAgZW50cmllc1swXS5hX2FjY2Vzc19tYXNrID0gMDsKKyAgICAg ICAgICBlbnRyaWVzWzFdLmFfdHlwZSA9IE5FV19BQ0VfQUNDRVNTX0FMTE9XRURfQUNFX1RZ UEU7CisgICAgICAgICAgZW50cmllc1sxXS5hX2ZsYWdzID0gTkVXX0FDRV9PV05FUjsKKyAg ICAgICAgICBlbnRyaWVzWzFdLmFfd2hvID0gMDsgLyogaXJyZWxldmFudCAqLworICAgICAg ICAgIGVudHJpZXNbMV0uYV9hY2Nlc3NfbWFzayA9IE5FV19BQ0VfV1JJVEVfTkFNRURfQVRU UlMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfV1JJ VEVfQVRUUklCVVRFUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg TkVXX0FDRV9XUklURV9BQ0wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8IE5FV19BQ0VfV1JJVEVfT1dORVI7CisgICAgICAgICAgaWYgKG1vZGUgJiAwNDAwKQor ICAgICAgICAgICAgZW50cmllc1sxXS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfUkVBRF9E QVRBOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJpZXNbMF0uYV9hY2Nlc3Nf bWFzayB8PSBORVdfQUNFX1JFQURfREFUQTsKKyAgICAgICAgICBpZiAobW9kZSAmIDAyMDAp CisgICAgICAgICAgICBlbnRyaWVzWzFdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9XUklU RV9EQVRBIHwgTkVXX0FDRV9BUFBFTkRfREFUQTsKKyAgICAgICAgICBlbHNlCisgICAgICAg ICAgICBlbnRyaWVzWzBdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9XUklURV9EQVRBIHwg TkVXX0FDRV9BUFBFTkRfREFUQTsKKyAgICAgICAgICBpZiAobW9kZSAmIDAxMDApCisgICAg ICAgICAgICBlbnRyaWVzWzFdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9FWEVDVVRFOwor ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJpZXNbMF0uYV9hY2Nlc3NfbWFzayB8 PSBORVdfQUNFX0VYRUNVVEU7CisgICAgICAgICAgZW50cmllc1syXS5hX3R5cGUgPSBORVdf QUNFX0FDQ0VTU19ERU5JRURfQUNFX1RZUEU7CisgICAgICAgICAgZW50cmllc1syXS5hX2Zs YWdzID0gTkVXX0FDRV9HUk9VUCB8IE5FV19BQ0VfSURFTlRJRklFUl9HUk9VUDsKKyAgICAg ICAgICBlbnRyaWVzWzJdLmFfd2hvID0gMDsgLyogaXJyZWxldmFudCAqLworICAgICAgICAg IGVudHJpZXNbMl0uYV9hY2Nlc3NfbWFzayA9IDA7CisgICAgICAgICAgZW50cmllc1szXS5h X3R5cGUgPSBORVdfQUNFX0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFOworICAgICAgICAgIGVu dHJpZXNbM10uYV9mbGFncyA9IE5FV19BQ0VfR1JPVVAgfCBORVdfQUNFX0lERU5USUZJRVJf R1JPVVA7CisgICAgICAgICAgZW50cmllc1szXS5hX3dobyA9IDA7IC8qIGlycmVsZXZhbnQg Ki8KKyAgICAgICAgICBlbnRyaWVzWzNdLmFfYWNjZXNzX21hc2sgPSAwOworICAgICAgICAg IGlmIChtb2RlICYgMDA0MCkKKyAgICAgICAgICAgIGVudHJpZXNbM10uYV9hY2Nlc3NfbWFz ayB8PSBORVdfQUNFX1JFQURfREFUQTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBl bnRyaWVzWzJdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9SRUFEX0RBVEE7CisgICAgICAg ICAgaWYgKG1vZGUgJiAwMDIwKQorICAgICAgICAgICAgZW50cmllc1szXS5hX2FjY2Vzc19t YXNrIHw9IE5FV19BQ0VfV1JJVEVfREFUQSB8IE5FV19BQ0VfQVBQRU5EX0RBVEE7CisgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgZW50cmllc1syXS5hX2FjY2Vzc19tYXNrIHw9IE5F V19BQ0VfV1JJVEVfREFUQSB8IE5FV19BQ0VfQVBQRU5EX0RBVEE7CisgICAgICAgICAgaWYg KG1vZGUgJiAwMDEwKQorICAgICAgICAgICAgZW50cmllc1szXS5hX2FjY2Vzc19tYXNrIHw9 IE5FV19BQ0VfRVhFQ1VURTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRyaWVz WzJdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9FWEVDVVRFOworICAgICAgICAgIGVudHJp ZXNbNF0uYV90eXBlID0gTkVXX0FDRV9BQ0NFU1NfREVOSUVEX0FDRV9UWVBFOworICAgICAg ICAgIGVudHJpZXNbNF0uYV9mbGFncyA9IE5FV19BQ0VfRVZFUllPTkU7CisgICAgICAgICAg ZW50cmllc1s0XS5hX3dobyA9IDA7CisgICAgICAgICAgZW50cmllc1s0XS5hX2FjY2Vzc19t YXNrID0gTkVXX0FDRV9XUklURV9OQU1FRF9BVFRSUworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9XUklURV9BVFRSSUJVVEVTCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBORVdfQUNFX1dSSVRFX0FDTAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9XUklURV9PV05FUjsK KyAgICAgICAgICBlbnRyaWVzWzVdLmFfdHlwZSA9IE5FV19BQ0VfQUNDRVNTX0FMTE9XRURf QUNFX1RZUEU7CisgICAgICAgICAgZW50cmllc1s1XS5hX2ZsYWdzID0gTkVXX0FDRV9FVkVS WU9ORTsKKyAgICAgICAgICBlbnRyaWVzWzVdLmFfd2hvID0gMDsKKyAgICAgICAgICBlbnRy aWVzWzVdLmFfYWNjZXNzX21hc2sgPSBORVdfQUNFX1JFQURfTkFNRURfQVRUUlMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfUkVBRF9BVFRSSUJV VEVTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBORVdfQUNFX1JF QURfQUNMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBORVdfQUNF X1NZTkNIUk9OSVpFOworICAgICAgICAgIGlmIChtb2RlICYgMDAwNCkKKyAgICAgICAgICAg IGVudHJpZXNbNV0uYV9hY2Nlc3NfbWFzayB8PSBORVdfQUNFX1JFQURfREFUQTsKKyAgICAg ICAgICBlbHNlCisgICAgICAgICAgICBlbnRyaWVzWzRdLmFfYWNjZXNzX21hc2sgfD0gTkVX X0FDRV9SRUFEX0RBVEE7CisgICAgICAgICAgaWYgKG1vZGUgJiAwMDAyKQorICAgICAgICAg ICAgZW50cmllc1s1XS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfV1JJVEVfREFUQSB8IE5F V19BQ0VfQVBQRU5EX0RBVEE7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZW50cmll c1s0XS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfV1JJVEVfREFUQSB8IE5FV19BQ0VfQVBQ RU5EX0RBVEE7CisgICAgICAgICAgaWYgKG1vZGUgJiAwMDAxKQorICAgICAgICAgICAgZW50 cmllc1s1XS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfRVhFQ1VURTsKKyAgICAgICAgICBl bHNlCisgICAgICAgICAgICBlbnRyaWVzWzRdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9F WEVDVVRFOworICAgICAgICAgIGNvdW50ID0gNjsKKyAgICAgICAgfQorICAgICAgaWYgKGRl c2MgIT0gLTEpCisgICAgICAgIHJldCA9IGZhY2wgKGRlc2MsIEFDRV9TRVRBQ0wsIGNvdW50 LCBlbnRyaWVzKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0ID0gYWNsIChuYW1lLCBBQ0Vf U0VUQUNMLCBjb3VudCwgZW50cmllcyk7CisgICAgICBpZiAocmV0IDwgMCAmJiBlcnJubyAh PSBFSU5WQUwgJiYgZXJybm8gIT0gRU5PVFNVUCkKKyAgICAgICAgeworICAgICAgICAgIGlm IChlcnJubyA9PSBFTk9TWVMpCisgICAgICAgICAgICByZXR1cm4gY2htb2Rfb3JfZmNobW9k IChuYW1lLCBkZXNjLCBtb2RlKTsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0K KyAgICAgIGlmIChyZXQgPT0gMCkKKyAgICAgICAgZG9uZV9zZXRhY2wgPSAxOworICAgIH0K KyMgIGVuZGlmCisKKyAgaWYgKCFkb25lX3NldGFjbCkKKyAgICB7CisgICAgICBhY2xlbnRf dCBlbnRyaWVzWzNdOworICAgICAgaW50IHJldDsKKworICAgICAgZW50cmllc1swXS5hX3R5 cGUgPSBVU0VSX09CSjsKKyAgICAgIGVudHJpZXNbMF0uYV9pZCA9IDA7IC8qIGlycmVsZXZh bnQgKi8KKyAgICAgIGVudHJpZXNbMF0uYV9wZXJtID0gKG1vZGUgPj4gNikgJiA3OworICAg ICAgZW50cmllc1sxXS5hX3R5cGUgPSBHUk9VUF9PQko7CisgICAgICBlbnRyaWVzWzFdLmFf aWQgPSAwOyAvKiBpcnJlbGV2YW50ICovCisgICAgICBlbnRyaWVzWzFdLmFfcGVybSA9ICht b2RlID4+IDMpICYgNzsKKyAgICAgIGVudHJpZXNbMl0uYV90eXBlID0gT1RIRVJfT0JKOwor ICAgICAgZW50cmllc1syXS5hX2lkID0gMDsKKyAgICAgIGVudHJpZXNbMl0uYV9wZXJtID0g bW9kZSAmIDc7CisKKyAgICAgIGlmIChkZXNjICE9IC0xKQorICAgICAgICByZXQgPSBmYWNs IChkZXNjLCBTRVRBQ0wsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoZW50cmllcykg LyBzaXplb2YgKGFjbGVudF90KSwgZW50cmllcyk7CisgICAgICBlbHNlCisgICAgICAgIHJl dCA9IGFjbCAobmFtZSwgU0VUQUNMLAorICAgICAgICAgICAgICAgICAgIHNpemVvZiAoZW50 cmllcykgLyBzaXplb2YgKGFjbGVudF90KSwgZW50cmllcyk7CisgICAgICBpZiAocmV0IDwg MCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8g PT0gRU9QTk9UU1VQUCkKKyAgICAgICAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5h bWUsIGRlc2MsIG1vZGUpOworICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAg IH0KKworICBpZiAoIU1PREVfSU5TSURFX0FDTCB8fCAobW9kZSAmIChTX0lTVUlEIHwgU19J U0dJRCB8IFNfSVNWVFgpKSkKKyAgICB7CisgICAgICAvKiBXZSBkaWQgbm90IGNhbGwgY2ht b2Qgc28gZmFyLCBzbyB0aGUgc3BlY2lhbCBiaXRzIGhhdmUgbm90IHlldAorICAgICAgICAg YmVlbiBzZXQuICAqLworICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAobmFtZSwgZGVz YywgbW9kZSk7CisgICAgfQorICByZXR1cm4gMDsKKworIyBlbGlmIEhBVkVfR0VUQUNMIC8q IEhQLVVYICovCisKKyAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKyAgaW50IHJldDsKKworICBp ZiAoZGVzYyAhPSAtMSkKKyAgICByZXQgPSBmc3RhdCAoZGVzYywgJnN0YXRidWYpOworICBl bHNlCisgICAgcmV0ID0gc3RhdCAobmFtZSwgJnN0YXRidWYpOworICBpZiAocmV0IDwgMCkK KyAgICByZXR1cm4gLTE7CisKKyAgeworICAgIHN0cnVjdCBhY2xfZW50cnkgZW50cmllc1sz XTsKKworICAgIGVudHJpZXNbMF0udWlkID0gc3RhdGJ1Zi5zdF91aWQ7CisgICAgZW50cmll c1swXS5naWQgPSBBQ0xfTlNHUk9VUDsKKyAgICBlbnRyaWVzWzBdLm1vZGUgPSAobW9kZSA+ PiA2KSAmIDc7CisgICAgZW50cmllc1sxXS51aWQgPSBBQ0xfTlNVU0VSOworICAgIGVudHJp ZXNbMV0uZ2lkID0gc3RhdGJ1Zi5zdF9naWQ7CisgICAgZW50cmllc1sxXS5tb2RlID0gKG1v ZGUgPj4gMykgJiA3OworICAgIGVudHJpZXNbMl0udWlkID0gQUNMX05TVVNFUjsKKyAgICBl bnRyaWVzWzJdLmdpZCA9IEFDTF9OU0dST1VQOworICAgIGVudHJpZXNbMl0ubW9kZSA9IG1v ZGUgJiA3OworCisgICAgaWYgKGRlc2MgIT0gLTEpCisgICAgICByZXQgPSBmc2V0YWNsIChk ZXNjLCBzaXplb2YgKGVudHJpZXMpIC8gc2l6ZW9mIChzdHJ1Y3QgYWNsX2VudHJ5KSwgZW50 cmllcyk7CisgICAgZWxzZQorICAgICAgcmV0ID0gc2V0YWNsIChuYW1lLCBzaXplb2YgKGVu dHJpZXMpIC8gc2l6ZW9mIChzdHJ1Y3QgYWNsX2VudHJ5KSwgZW50cmllcyk7CisgIH0KKyAg aWYgKHJldCA8IDApCisgICAgeworICAgICAgaWYgKCEoZXJybm8gPT0gRU5PU1lTIHx8IGVy cm5vID09IEVPUE5PVFNVUFAgfHwgZXJybm8gPT0gRU5PVFNVUCkpCisgICAgICAgIHJldHVy biAtMTsKKworIyAgaWYgSEFWRV9BQ0xWX0ggLyogSFAtVVggPj0gMTEuMTEgKi8KKyAgICAg IHsKKyAgICAgICAgc3RydWN0IGFjbCBlbnRyaWVzWzRdOworCisgICAgICAgIGVudHJpZXNb MF0uYV90eXBlID0gVVNFUl9PQko7CisgICAgICAgIGVudHJpZXNbMF0uYV9pZCA9IDA7IC8q IGlycmVsZXZhbnQgKi8KKyAgICAgICAgZW50cmllc1swXS5hX3Blcm0gPSAobW9kZSA+PiA2 KSAmIDc7CisgICAgICAgIGVudHJpZXNbMV0uYV90eXBlID0gR1JPVVBfT0JKOworICAgICAg ICBlbnRyaWVzWzFdLmFfaWQgPSAwOyAvKiBpcnJlbGV2YW50ICovCisgICAgICAgIGVudHJp ZXNbMV0uYV9wZXJtID0gKG1vZGUgPj4gMykgJiA3OworICAgICAgICBlbnRyaWVzWzJdLmFf dHlwZSA9IENMQVNTX09CSjsKKyAgICAgICAgZW50cmllc1syXS5hX2lkID0gMDsKKyAgICAg ICAgZW50cmllc1syXS5hX3Blcm0gPSAobW9kZSA+PiAzKSAmIDc7CisgICAgICAgIGVudHJp ZXNbM10uYV90eXBlID0gT1RIRVJfT0JKOworICAgICAgICBlbnRyaWVzWzNdLmFfaWQgPSAw OworICAgICAgICBlbnRyaWVzWzNdLmFfcGVybSA9IG1vZGUgJiA3OworCisgICAgICAgIHJl dCA9IGFjbHNvcnQgKHNpemVvZiAoZW50cmllcykgLyBzaXplb2YgKHN0cnVjdCBhY2wpLCAx LCBlbnRyaWVzKTsKKyAgICAgICAgaWYgKHJldCA+IDApCisgICAgICAgICAgYWJvcnQgKCk7 CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgw KQorICAgICAgICAgICAgICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1lLCBkZXNjLCBt b2RlKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICB9CisKKyAgICAgICAg cmV0ID0gYWNsICgoY2hhciAqKSBuYW1lLCBBQ0xfU0VULAorICAgICAgICAgICAgICAgICAg IHNpemVvZiAoZW50cmllcykgLyBzaXplb2YgKHN0cnVjdCBhY2wpLCBlbnRyaWVzKTsKKyAg ICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKGVycm5v ID09IEVOT1NZUyB8fCBlcnJubyA9PSBFT1BOT1RTVVBQIHx8IGVycm5vID09IEVJTlZBTCkK KyAgICAgICAgICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAobmFtZSwgZGVzYywgbW9k ZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgfQorICAgICAgfQorIyAg ZWxzZQorICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAobmFtZSwgZGVzYywgbW9kZSk7 CisjICBlbmRpZgorICAgIH0KKworICBpZiAobW9kZSAmIChTX0lTVUlEIHwgU19JU0dJRCB8 IFNfSVNWVFgpKQorICAgIHsKKyAgICAgIC8qIFdlIGRpZCBub3QgY2FsbCBjaG1vZCBzbyBm YXIsIHNvIHRoZSBzcGVjaWFsIGJpdHMgaGF2ZSBub3QgeWV0CisgICAgICAgICBiZWVuIHNl dC4gICovCisgICAgICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1lLCBkZXNjLCBtb2Rl KTsKKyAgICB9CisgIHJldHVybiAwOworCisjIGVsaWYgSEFWRV9BQ0xYX0dFVCAmJiBkZWZp bmVkIEFDTF9BSVhfV0lQIC8qIEFJWCAqLworCisgIGFjbF90eXBlX2xpc3RfdCB0eXBlczsK KyAgc2l6ZV90IHR5cGVzX3NpemUgPSBzaXplb2YgKHR5cGVzKTsKKyAgYWNsX3R5cGVfdCB0 eXBlOworCisgIGlmIChhY2x4X2dldHR5cGVzIChuYW1lLCAmdHlwZXMsICZ0eXBlc19zaXpl KSA8IDAKKyAgICAgIHx8IHR5cGVzLm51bV9lbnRyaWVzID09IDApCisgICAgcmV0dXJuIGNo bW9kX29yX2ZjaG1vZCAobmFtZSwgZGVzYywgbW9kZSk7CisKKyAgLyogWFhYIERvIHdlIG5l ZWQgdG8gY2xlYXIgYWxsIHR5cGVzIG9mIEFDTHMgZm9yIHRoZSBnaXZlbiBmaWxlLCBvciBp cyBpdAorICAgICBzdWZmaWNpZW50IHRvIGNsZWFyIHRoZSBmaXJzdCBvbmU/ICAqLworICB0 eXBlID0gdHlwZXMuZW50cmllc1swXTsKKyAgaWYgKHR5cGUudTY0ID09IEFDTF9BSVhDKQor ICAgIHsKKyAgICAgIHVuaW9uIHsgc3RydWN0IGFjbCBhOyBjaGFyIHJvb21bMTI4XTsgfSB1 OworICAgICAgaW50IHJldDsKKworICAgICAgdS5hLmFjbF9sZW4gPSAoY2hhciAqKSAmdS5h LmFjbF9leHRbMF0gLSAoY2hhciAqKSAmdS5hOyAvKiBubyBlbnRyaWVzICovCisgICAgICB1 LmEuYWNsX21vZGUgPSBtb2RlICYgfihTX0lYQUNMIHwgMDc3Nyk7CisgICAgICB1LmEudV9h Y2Nlc3MgPSAobW9kZSA+PiA2KSAmIDc7CisgICAgICB1LmEuZ19hY2Nlc3MgPSAobW9kZSA+ PiAzKSAmIDc7CisgICAgICB1LmEub19hY2Nlc3MgPSBtb2RlICYgNzsKKworICAgICAgaWYg KGRlc2MgIT0gLTEpCisgICAgICAgIHJldCA9IGFjbHhfZnB1dCAoZGVzYywgU0VUX0FDTCB8 IFNFVF9NT0RFX1NfQklUUywKKyAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCAmdS5h LCB1LmEuYWNsX2xlbiwgbW9kZSk7CisgICAgICBlbHNlCisgICAgICAgIHJldCA9IGFjbHhf cHV0IChuYW1lLCBTRVRfQUNMIHwgU0VUX01PREVfU19CSVRTLAorICAgICAgICAgICAgICAg ICAgICAgICAgdHlwZSwgJnUuYSwgdS5hLmFjbF9sZW4sIG1vZGUpOworICAgICAgaWYgKCEo cmV0IDwgMCAmJiBlcnJubyA9PSBFTk9TWVMpKQorICAgICAgICByZXR1cm4gcmV0OworICAg IH0KKyAgZWxzZSBpZiAodHlwZS51NjQgPT0gQUNMX05GUzQpCisgICAgeworICAgICAgdW5p b24geyBuZnM0X2FjbF9pbnRfdCBhOyBjaGFyIHJvb21bMTI4XTsgfSB1OworICAgICAgbmZz NF9hY2VfaW50X3QgKmFjZTsKKyAgICAgIGludCByZXQ7CisKKyAgICAgIHUuYS5hY2xWZXJz aW9uID0gTkZTNF9BQ0xfSU5UX1NUUlVDVF9WRVJTSU9OOworICAgICAgdS5hLmFjbEVudHJ5 TiA9IDA7CisgICAgICBhY2UgPSAmdS5hLmFjbEVudHJ5WzBdOworICAgICAgeworICAgICAg ICBhY2UtPmZsYWdzID0gQUNFNF9JRF9TUEVDSUFMOworICAgICAgICBhY2UtPmFjZVdoby5z cGVjaWFsX3dob2lkID0gQUNFNF9XSE9fT1dORVI7CisgICAgICAgIGFjZS0+YWNlVHlwZSA9 IEFDRTRfQUNDRVNTX0FMTE9XRURfQUNFX1RZUEU7CisgICAgICAgIGFjZS0+YWNlRmxhZ3Mg PSAwOworICAgICAgICBhY2UtPmFjZU1hc2sgPQorICAgICAgICAgIChtb2RlICYgMDQwMCA/ IEFDRTRfUkVBRF9EQVRBIHwgQUNFNF9MSVNUX0RJUkVDVE9SWSA6IDApCisgICAgICAgICAg fCAobW9kZSAmIDAyMDAKKyAgICAgICAgICAgICA/IEFDRTRfV1JJVEVfREFUQSB8IEFDRTRf QUREX0ZJTEUgfCBBQ0U0X0FQUEVORF9EQVRBCisgICAgICAgICAgICAgICB8IEFDRTRfQURE X1NVQkRJUkVDVE9SWQorICAgICAgICAgICAgIDogMCkKKyAgICAgICAgICB8IChtb2RlICYg MDEwMCA/IEFDRTRfRVhFQ1VURSA6IDApOworICAgICAgICBhY2UtPmFjZVdob1N0cmluZ1sw XSA9ICdcMCc7CisgICAgICAgIGFjZS0+ZW50cnlMZW4gPSAoY2hhciAqKSAmYWNlLT5hY2VX aG9TdHJpbmdbNF0gLSAoY2hhciAqKSBhY2U7CisgICAgICAgIGFjZSA9IChuZnM0X2FjZV9p bnRfdCAqKSAoY2hhciAqKSAmYWNlLT5hY2VXaG9TdHJpbmdbNF07CisgICAgICAgIHUuYS5h Y2xFbnRyeU4rKzsKKyAgICAgIH0KKyAgICAgIHsKKyAgICAgICAgYWNlLT5mbGFncyA9IEFD RTRfSURfU1BFQ0lBTDsKKyAgICAgICAgYWNlLT5hY2VXaG8uc3BlY2lhbF93aG9pZCA9IEFD RTRfV0hPX0dST1VQOworICAgICAgICBhY2UtPmFjZVR5cGUgPSBBQ0U0X0FDQ0VTU19BTExP V0VEX0FDRV9UWVBFOworICAgICAgICBhY2UtPmFjZUZsYWdzID0gMDsKKyAgICAgICAgYWNl LT5hY2VNYXNrID0KKyAgICAgICAgICAobW9kZSAmIDAwNDAgPyBBQ0U0X1JFQURfREFUQSB8 IEFDRTRfTElTVF9ESVJFQ1RPUlkgOiAwKQorICAgICAgICAgIHwgKG1vZGUgJiAwMDIwCisg ICAgICAgICAgICAgPyBBQ0U0X1dSSVRFX0RBVEEgfCBBQ0U0X0FERF9GSUxFIHwgQUNFNF9B UFBFTkRfREFUQQorICAgICAgICAgICAgICAgfCBBQ0U0X0FERF9TVUJESVJFQ1RPUlkKKyAg ICAgICAgICAgICA6IDApCisgICAgICAgICAgfCAobW9kZSAmIDAwMTAgPyBBQ0U0X0VYRUNV VEUgOiAwKTsKKyAgICAgICAgYWNlLT5hY2VXaG9TdHJpbmdbMF0gPSAnXDAnOworICAgICAg ICBhY2UtPmVudHJ5TGVuID0gKGNoYXIgKikgJmFjZS0+YWNlV2hvU3RyaW5nWzRdIC0gKGNo YXIgKikgYWNlOworICAgICAgICBhY2UgPSAobmZzNF9hY2VfaW50X3QgKikgKGNoYXIgKikg JmFjZS0+YWNlV2hvU3RyaW5nWzRdOworICAgICAgICB1LmEuYWNsRW50cnlOKys7CisgICAg ICB9CisgICAgICB7CisgICAgICAgIGFjZS0+ZmxhZ3MgPSBBQ0U0X0lEX1NQRUNJQUw7Cisg ICAgICAgIGFjZS0+YWNlV2hvLnNwZWNpYWxfd2hvaWQgPSBBQ0U0X1dIT19FVkVSWU9ORTsK KyAgICAgICAgYWNlLT5hY2VUeXBlID0gQUNFNF9BQ0NFU1NfQUxMT1dFRF9BQ0VfVFlQRTsK KyAgICAgICAgYWNlLT5hY2VGbGFncyA9IDA7CisgICAgICAgIGFjZS0+YWNlTWFzayA9Cisg ICAgICAgICAgKG1vZGUgJiAwMDA0ID8gQUNFNF9SRUFEX0RBVEEgfCBBQ0U0X0xJU1RfRElS RUNUT1JZIDogMCkKKyAgICAgICAgICB8IChtb2RlICYgMDAwMgorICAgICAgICAgICAgID8g QUNFNF9XUklURV9EQVRBIHwgQUNFNF9BRERfRklMRSB8IEFDRTRfQVBQRU5EX0RBVEEKKyAg ICAgICAgICAgICAgIHwgQUNFNF9BRERfU1VCRElSRUNUT1JZCisgICAgICAgICAgICAgOiAw KQorICAgICAgICAgIHwgKG1vZGUgJiAwMDAxID8gQUNFNF9FWEVDVVRFIDogMCk7CisgICAg ICAgIGFjZS0+YWNlV2hvU3RyaW5nWzBdID0gJ1wwJzsKKyAgICAgICAgYWNlLT5lbnRyeUxl biA9IChjaGFyICopICZhY2UtPmFjZVdob1N0cmluZ1s0XSAtIChjaGFyICopIGFjZTsKKyAg ICAgICAgYWNlID0gKG5mczRfYWNlX2ludF90ICopIChjaGFyICopICZhY2UtPmFjZVdob1N0 cmluZ1s0XTsKKyAgICAgICAgdS5hLmFjbEVudHJ5TisrOworICAgICAgfQorICAgICAgdS5h LmFjbExlbmd0aCA9IChjaGFyICopIGFjZSAtIChjaGFyICopICZ1LmE7CisKKyAgICAgIGlm IChkZXNjICE9IC0xKQorICAgICAgICByZXQgPSBhY2x4X2ZwdXQgKGRlc2MsIFNFVF9BQ0wg fCBTRVRfTU9ERV9TX0JJVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgJnUu YSwgdS5hLmFjbExlbmd0aCwgbW9kZSk7CisgICAgICBlbHNlCisgICAgICAgIHJldCA9IGFj bHhfcHV0IChuYW1lLCBTRVRfQUNMIHwgU0VUX01PREVfU19CSVRTLAorICAgICAgICAgICAg ICAgICAgICAgICAgdHlwZSwgJnUuYSwgdS5hLmFjbExlbmd0aCwgbW9kZSk7CisgICAgICBp ZiAoIShyZXQgPCAwICYmIGVycm5vID09IEVOT1NZUykpCisgICAgICAgIHJldHVybiByZXQ7 CisgICAgfQorCisgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUp OworCisjIGVsaWYgSEFWRV9TVEFUQUNMIC8qIG9sZGVyIEFJWCAqLworCisgIHVuaW9uIHsg c3RydWN0IGFjbCBhOyBjaGFyIHJvb21bMTI4XTsgfSB1OworICBpbnQgcmV0OworCisgIHUu YS5hY2xfbGVuID0gKGNoYXIgKikgJnUuYS5hY2xfZXh0WzBdIC0gKGNoYXIgKikgJnUuYTsg Lyogbm8gZW50cmllcyAqLworICB1LmEuYWNsX21vZGUgPSBtb2RlICYgfihTX0lYQUNMIHwg MDc3Nyk7CisgIHUuYS51X2FjY2VzcyA9IChtb2RlID4+IDYpICYgNzsKKyAgdS5hLmdfYWNj ZXNzID0gKG1vZGUgPj4gMykgJiA3OworICB1LmEub19hY2Nlc3MgPSBtb2RlICYgNzsKKwor ICBpZiAoZGVzYyAhPSAtMSkKKyAgICByZXQgPSBmY2hhY2wgKGRlc2MsICZ1LmEsIHUuYS5h Y2xfbGVuKTsKKyAgZWxzZQorICAgIHJldCA9IGNoYWNsIChuYW1lLCAmdS5hLCB1LmEuYWNs X2xlbik7CisKKyAgaWYgKHJldCA8IDAgJiYgZXJybm8gPT0gRU5PU1lTKQorICAgIHJldHVy biBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUpOworCisgIHJldHVybiByZXQ7 CisKKyMgZWxpZiBIQVZFX0FDTFNPUlQgLyogTm9uU3RvcCBLZXJuZWwgKi8KKworICBzdHJ1 Y3QgYWNsIGVudHJpZXNbNF07CisgIGludCByZXQ7CisKKyAgZW50cmllc1swXS5hX3R5cGUg PSBVU0VSX09CSjsKKyAgZW50cmllc1swXS5hX2lkID0gMDsgLyogaXJyZWxldmFudCAqLwor ICBlbnRyaWVzWzBdLmFfcGVybSA9IChtb2RlID4+IDYpICYgNzsKKyAgZW50cmllc1sxXS5h X3R5cGUgPSBHUk9VUF9PQko7CisgIGVudHJpZXNbMV0uYV9pZCA9IDA7IC8qIGlycmVsZXZh bnQgKi8KKyAgZW50cmllc1sxXS5hX3Blcm0gPSAobW9kZSA+PiAzKSAmIDc7CisgIGVudHJp ZXNbMl0uYV90eXBlID0gQ0xBU1NfT0JKOworICBlbnRyaWVzWzJdLmFfaWQgPSAwOworICBl bnRyaWVzWzJdLmFfcGVybSA9IChtb2RlID4+IDMpICYgNzsKKyAgZW50cmllc1szXS5hX3R5 cGUgPSBPVEhFUl9PQko7CisgIGVudHJpZXNbM10uYV9pZCA9IDA7CisgIGVudHJpZXNbM10u YV9wZXJtID0gbW9kZSAmIDc7CisKKyAgcmV0ID0gYWNsc29ydCAoc2l6ZW9mIChlbnRyaWVz KSAvIHNpemVvZiAoc3RydWN0IGFjbCksIDEsIGVudHJpZXMpOworICBpZiAocmV0ID4gMCkK KyAgICBhYm9ydCAoKTsKKyAgaWYgKHJldCA8IDApCisgICAgeworICAgICAgaWYgKDApCisg ICAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUpOworICAg ICAgcmV0dXJuIC0xOworICAgIH0KKworICByZXQgPSBhY2wgKChjaGFyICopIG5hbWUsIEFD TF9TRVQsCisgICAgICAgICAgICAgc2l6ZW9mIChlbnRyaWVzKSAvIHNpemVvZiAoc3RydWN0 IGFjbCksIGVudHJpZXMpOworICBpZiAocmV0IDwgMCkKKyAgICB7CisgICAgICBpZiAoMCkK KyAgICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAobmFtZSwgZGVzYywgbW9kZSk7Cisg ICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGlmIChtb2RlICYgKFNfSVNVSUQgfCBTX0lT R0lEIHwgU19JU1ZUWCkpCisgICAgeworICAgICAgLyogV2UgZGlkIG5vdCBjYWxsIGNobW9k IHNvIGZhciwgc28gdGhlIHNwZWNpYWwgYml0cyBoYXZlIG5vdCB5ZXQKKyAgICAgICAgIGJl ZW4gc2V0LiAgKi8KKyAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2Ms IG1vZGUpOworICAgIH0KKyAgcmV0dXJuIDA7CisKKyMgZWxzZSAvKiBVbmtub3duIGZsYXZv ciBvZiBBQ0xzICovCisgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1v ZGUpOworIyBlbmRpZgorI2Vsc2UgLyogIVVTRV9BQ0wgKi8KKyAgcmV0dXJuIGNobW9kX29y X2ZjaG1vZCAobmFtZSwgZGVzYywgbW9kZSk7CisjZW5kaWYKK30KCj09PSBhZGRlZCBmaWxl ICdtNC9hY2wubTQnCi0tLSBtNC9hY2wubTQJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAor KysgbTQvYWNsLm00CTIwMTMtMDQtMTcgMDU6MjE6MzMgKzAwMDAKQEAgLTAsMCArMSwxNjQg QEAKKyMgYWNsLm00IC0gY2hlY2sgZm9yIGFjY2VzcyBjb250cm9sIGxpc3QgKEFDTCkgcHJp bWl0aXZlcworIyBzZXJpYWwgMTUKKworIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQtMjAx MyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGZyZWUg c29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1p dGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBv ciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJl c2VydmVkLgorCisjIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQgYW5kIEppbSBNZXllcmluZy4K KworQUNfREVGVU4oW2dsX0ZVTkNfQUNMXSwKK1sKKyAgQUNfQVJHX0VOQUJMRShbYWNsXSwK KyAgICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWFjbF0sIFtkbyBub3Qgc3VwcG9ydCBB Q0xzXSksCisgICAgLCBbZW5hYmxlX2FjbD1hdXRvXSkKKworICBMSUJfQUNMPQorICB1c2Vf YWNsPTAKKyAgaWYgdGVzdCAieCRlbmFibGVfYWNsIiAhPSAieG5vIjsgdGhlbgorICAgIGRu bCBPbiBhbGwgcGxhdGZvcm1zLCB0aGUgQUNMIHJlbGF0ZWQgQVBJIGlzIGRlY2xhcmVkIGlu IDxzeXMvYWNsLmg+LgorICAgIEFDX0NIRUNLX0hFQURFUlMoW3N5cy9hY2wuaF0pCisgICAg aWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19hY2xfaCA9IHllczsgdGhlbgorICAgICAgYWNf c2F2ZV9MSUJTPSRMSUJTCisKKyAgICAgIGRubCBUZXN0IGZvciBQT1NJWC1kcmFmdC1saWtl IEFQSSAoTGludXgsIEZyZWVCU0QsIE1hYyBPUyBYLCBJUklYLCBUcnU2NCkuCisgICAgICBk bmwgLWxhY2wgaXMgbmVlZGVkIG9uIExpbnV4LCAtbHBhY2wgaXMgbmVlZGVkIG9uIE9TRi8x LgorICAgICAgaWYgdGVzdCAkdXNlX2FjbCA9IDA7IHRoZW4KKyAgICAgICAgQUNfU0VBUkNI X0xJQlMoW2FjbF9nZXRfZmlsZV0sIFthY2wgcGFjbF0sCisgICAgICAgICAgW2lmIHRlc3Qg IiRhY19jdl9zZWFyY2hfYWNsX2dldF9maWxlIiAhPSAibm9uZSByZXF1aXJlZCI7IHRoZW4K KyAgICAgICAgICAgICBMSUJfQUNMPSRhY19jdl9zZWFyY2hfYWNsX2dldF9maWxlCisgICAg ICAgICAgIGZpCisgICAgICAgICAgIEFDX0NIRUNLX0ZVTkNTKAorICAgICAgICAgICAgIFth Y2xfZ2V0X2ZpbGUgYWNsX2dldF9mZCBhY2xfc2V0X2ZpbGUgYWNsX3NldF9mZCBcCisgICAg ICAgICAgICAgIGFjbF9mcmVlIGFjbF9mcm9tX21vZGUgYWNsX2Zyb21fdGV4dCBcCisgICAg ICAgICAgICAgIGFjbF9kZWxldGVfZGVmX2ZpbGUgYWNsX2V4dGVuZGVkX2ZpbGUgXAorICAg ICAgICAgICAgICBhY2xfZGVsZXRlX2ZkX25wIGFjbF9kZWxldGVfZmlsZV9ucCBcCisgICAg ICAgICAgICAgIGFjbF9jb3B5X2V4dF9uYXRpdmUgYWNsX2NyZWF0ZV9lbnRyeV9ucCBcCisg ICAgICAgICAgICAgIGFjbF90b19zaG9ydF90ZXh0IGFjbF9mcmVlX3RleHRdKQorICAgICAg ICAgICAjIElmIHRoZSBhY2xfZ2V0X2ZpbGUgYnVnIGlzIGRldGVjdGVkLCBkb24ndCBlbmFi bGUgdGhlIEFDTCBzdXBwb3J0LgorICAgICAgICAgICBnbF9BQ0xfR0VUX0ZJTEUoW3VzZV9h Y2w9MV0sIFtdKQorICAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWNsID0gMTsgdGhlbgorICAg ICAgICAgICAgIGRubCBPbiBMaW51eCwgYWRkaXRpb25hbCBBUEkgaXMgZGVjbGFyZWQgaW4g PGFjbC9saWJhY2wuaD4uCisgICAgICAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhbYWNsL2xp YmFjbC5oXSkKKyAgICAgICAgICAgICBBQ19SRVBMQUNFX0ZVTkNTKFthY2xfZW50cmllc10p CisgICAgICAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBBQ0xfRklSU1RfRU5UUlldLAor ICAgICAgICAgICAgICAgW2dsX2N2X2FjbF9BQ0xfRklSU1RfRU5UUlldLAorICAgICAgICAg ICAgICAgW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oCitbWyNpbmNsdWRl IDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvYWNsLmg+CitpbnQgdHlwZSA9IEFDTF9G SVJTVF9FTlRSWTtdXSldLAorICAgICAgICAgICAgICAgICAgW2dsX2N2X2FjbF9BQ0xfRklS U1RfRU5UUlk9eWVzXSwKKyAgICAgICAgICAgICAgICAgIFtnbF9jdl9hY2xfQUNMX0ZJUlNU X0VOVFJZPW5vXSldKQorICAgICAgICAgICAgIGlmIHRlc3QgJGdsX2N2X2FjbF9BQ0xfRklS U1RfRU5UUlkgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgIEFDX0RFRklORShbSEFWRV9B Q0xfRklSU1RfRU5UUlldLCBbMV0sCisgICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBp ZiB0aGUgY29uc3RhbnQgQUNMX0ZJUlNUX0VOVFJZIGV4aXN0cy5dKQorICAgICAgICAgICAg IGZpCisgICAgICAgICAgICAgZG5sIE9uIE1hYyBPUyBYLCBvdGhlciB0eXBlcyBvZiBBQ0xz IGFyZSBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBBQ0xf VFlQRV9FWFRFTkRFRF0sCisgICAgICAgICAgICAgICBbZ2xfY3ZfYWNsX0FDTF9UWVBFX0VY VEVOREVEXSwKKyAgICAgICAgICAgICAgIFtBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19Q Uk9HUkFNKAorW1sjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2FjbC5o PgoraW50IHR5cGUgPSBBQ0xfVFlQRV9FWFRFTkRFRDtdXSldLAorICAgICAgICAgICAgICAg ICAgW2dsX2N2X2FjbF9BQ0xfVFlQRV9FWFRFTkRFRD15ZXNdLAorICAgICAgICAgICAgICAg ICAgW2dsX2N2X2FjbF9BQ0xfVFlQRV9FWFRFTkRFRD1ub10pXSkKKyAgICAgICAgICAgICBp ZiB0ZXN0ICRnbF9jdl9hY2xfQUNMX1RZUEVfRVhURU5ERUQgPSB5ZXM7IHRoZW4KKyAgICAg ICAgICAgICAgIEFDX0RFRklORShbSEFWRV9BQ0xfVFlQRV9FWFRFTkRFRF0sIFsxXSwKKyAg ICAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHRoZSBBQ0wgdHlwZSBBQ0xfVFlQRV9F WFRFTkRFRCBleGlzdHMuXSkKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgTElCX0FDTD0KKyAgICAgICAgICAgZmkKKyAgICAgICAgICBdKQorICAg ICAgZmkKKworICAgICAgZG5sIFRlc3QgZm9yIFNvbGFyaXMgQVBJIChTb2xhcmlzLCBDeWd3 aW4pLgorICAgICAgaWYgdGVzdCAkdXNlX2FjbCA9IDA7IHRoZW4KKyAgICAgICAgQUNfQ0hF Q0tfRlVOQ1MoW2ZhY2xdKQorICAgICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2ZhY2wgPSB5 ZXM7IHRoZW4KKyAgICAgICAgICBBQ19TRUFSQ0hfTElCUyhbYWNsX3RyaXZpYWxdLCBbc2Vj XSwKKyAgICAgICAgICAgIFtpZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX2FjbF90cml2aWFsIiAh PSAibm9uZSByZXF1aXJlZCI7IHRoZW4KKyAgICAgICAgICAgICAgIExJQl9BQ0w9JGFjX2N2 X3NlYXJjaF9hY2xfdHJpdmlhbAorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBdKQor ICAgICAgICAgIEFDX0NIRUNLX0ZVTkNTKFthY2xfdHJpdmlhbF0pCisgICAgICAgICAgdXNl X2FjbD0xCisgICAgICAgIGZpCisgICAgICBmaQorCisgICAgICBkbmwgVGVzdCBmb3IgSFAt VVggQVBJLgorICAgICAgaWYgdGVzdCAkdXNlX2FjbCA9IDA7IHRoZW4KKyAgICAgICAgQUNf Q0hFQ0tfRlVOQ1MoW2dldGFjbF0pCisgICAgICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfZ2V0 YWNsID0geWVzOyB0aGVuCisgICAgICAgICAgdXNlX2FjbD0xCisgICAgICAgIGZpCisgICAg ICAgIGRubCBUZXN0IGZvciBIUC1VWCAxMS4xMSBBUEkuCisgICAgICAgIEFDX0NIRUNLX0hF QURFUlMoW2FjbHYuaF0sIFtdLCBbXSwgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD5dKQorICAg ICAgZmkKKworICAgICAgZG5sIFRlc3QgZm9yIEFJWCBBUEkgKEFJWCA1LjMgb3IgbmV3ZXIp LgorICAgICAgaWYgdGVzdCAkdXNlX2FjbCA9IDA7IHRoZW4KKyAgICAgICAgQUNfQ0hFQ0tf RlVOQ1MoW2FjbHhfZ2V0XSkKKyAgICAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19hY2x4X2dl dCA9IHllczsgdGhlbgorICAgICAgICAgIHVzZV9hY2w9MQorICAgICAgICBmaQorICAgICAg ZmkKKworICAgICAgZG5sIFRlc3QgZm9yIG9sZGVyIEFJWCBBUEkuCisgICAgICBpZiB0ZXN0 ICR1c2VfYWNsID0gMCB8fCB0ZXN0ICIkYWNfY3ZfZnVuY19hY2x4X2dldCIgPSB5ZXM7IHRo ZW4KKyAgICAgICAgQUNfQ0hFQ0tfRlVOQ1MoW3N0YXRhY2xdKQorICAgICAgICBpZiB0ZXN0 ICRhY19jdl9mdW5jX3N0YXRhY2wgPSB5ZXM7IHRoZW4KKyAgICAgICAgICB1c2VfYWNsPTEK KyAgICAgICAgZmkKKyAgICAgIGZpCisKKyAgICAgIGRubCBUZXN0IGZvciBOb25TdG9wIEtl cm5lbCBBUEkuCisgICAgICBpZiB0ZXN0ICR1c2VfYWNsID0gMDsgdGhlbgorICAgICAgICBB Q19DSEVDS19GVU5DUyhbYWNsc29ydF0pCisgICAgICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNf YWNsc29ydCA9IHllczsgdGhlbgorICAgICAgICAgIHVzZV9hY2w9MQorICAgICAgICBmaQor ICAgICAgZmkKKworICAgICAgTElCUz0kYWNfc2F2ZV9MSUJTCisgICAgZmkKKyAgICBpZiB0 ZXN0ICJ4JGVuYWJsZV9hY2wkdXNlX2FjbCIgPSAieHllczAiOyB0aGVuCisgICAgICBBQ19N U0dfRVJST1IoW0FDTHMgZW5hYmxlZCBidXQgc3VwcG9ydCBub3QgZGV0ZWN0ZWRdKQorICAg IGVsaWYgdGVzdCAieCRlbmFibGVfYWNsJHVzZV9hY2wiID0gInhhdXRvMCI7IHRoZW4KKyAg ICAgIEFDX01TR19XQVJOKFtsaWJhY2wgZGV2ZWxvcG1lbnQgbGlicmFyeSB3YXMgbm90IGZv dW5kIG9yIG5vdCB1c2FibGUuXSkKKyAgICAgIEFDX01TR19XQVJOKFtBQ19QQUNLQUdFX05B TUUgd2lsbCBiZSBidWlsdCB3aXRob3V0IEFDTCBzdXBwb3J0Ll0pCisgICAgZmkKKyAgZmkK KyAgQUNfU1VCU1QoW0xJQl9BQ0xdKQorICBBQ19ERUZJTkVfVU5RVU9URUQoW1VTRV9BQ0xd LCBbJHVzZV9hY2xdLAorICAgIFtEZWZpbmUgdG8gbm9uemVybyBpZiB5b3Ugd2FudCBhY2Nl c3MgY29udHJvbCBsaXN0IHN1cHBvcnQuXSkKKyAgVVNFX0FDTD0kdXNlX2FjbAorICBBQ19T VUJTVChbVVNFX0FDTF0pCitdKQorCisjIGdsX0FDTF9HRVRfRklMRShJRi1XT1JLUywgSUYt Tk9UKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmICdh Y2xfZ2V0X2ZpbGUnIHdvcmtzIChkb2VzIG5vdCBoYXZlIGEgcGFydGljdWxhciBidWcpLAor IyBydW4gSUYtV09SS1MsIG90aGVyd2lzZSwgSUYtTk9ULgorIyBUaGlzIHRlc3RzIGZvciBh IERhcndpbiA4LjcuMCBidWcsIHdoZXJlYnkgYWNsX2dldF9maWxlIHJldHVybnMgTlVMTCwK KyMgYnV0IHNldHMgZXJybm8gPSBFTk9FTlQgZm9yIGFuIGV4aXN0aW5nIGZpbGUgb3IgZGly ZWN0b3J5LgorQUNfREVGVU4oW2dsX0FDTF9HRVRfRklMRV0sCitbCisgIEFDX0NBQ0hFX0NI RUNLKFtmb3Igd29ya2luZyBhY2xfZ2V0X2ZpbGVdLCBbZ2xfY3ZfZnVuY193b3JraW5nX2Fj bF9nZXRfZmlsZV0sCisgICAgW0FDX1JVTl9JRkVMU0UoCisgICAgICAgW0FDX0xBTkdfUFJP R1JBTSgKKyAgICAgICAgICBbWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAgICAgICAg I2luY2x1ZGUgPHN5cy9hY2wuaD4KKyAgICAgICAgICAgI2luY2x1ZGUgPGVycm5vLmg+Cisg ICAgICAgICAgXV0sCisgICAgICAgICAgW1tpZiAoIWFjbF9nZXRfZmlsZSAoIi4iLCBBQ0xf VFlQRV9BQ0NFU1MpICYmIGVycm5vID09IEVOT0VOVCkKKyAgICAgICAgICAgICAgcmV0dXJu IDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICBdXSldLAorICAgICAgIFtn bF9jdl9mdW5jX3dvcmtpbmdfYWNsX2dldF9maWxlPXllc10sCisgICAgICAgW2dsX2N2X2Z1 bmNfd29ya2luZ19hY2xfZ2V0X2ZpbGU9bm9dLAorICAgICAgIFtnbF9jdl9mdW5jX3dvcmtp bmdfYWNsX2dldF9maWxlPWNyb3NzLWNvbXBpbGluZ10pXSkKKworICBBU19JRihbdGVzdCAk Z2xfY3ZfZnVuY193b3JraW5nX2FjbF9nZXRfZmlsZSA9IHllc10sIFskMV0sIFskMl0pCitd KQoKPT09IG1vZGlmaWVkIGZpbGUgJ200L2dudWxpYi1jb21wLm00JwotLS0gbTQvZ251bGli LWNvbXAubTQJMjAxMy0wMy0xMyAxODo0MjoyMiArMDAwMAorKysgbTQvZ251bGliLWNvbXAu bTQJMjAxMy0wNC0yNyAyMDoyNDoxMCArMDAwMApAQCAtOTQsNiArOTQsNyBAQAogICAjIENv ZGUgZnJvbSBtb2R1bGUgcHNlbGVjdDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHB0aHJlYWRf c2lnbWFzazoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHB1dGVudjoKKyAgIyBDb2RlIGZyb20g bW9kdWxlIHFhY2w6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSByZWFkbGluazoKICAgIyBDb2Rl IGZyb20gbW9kdWxlIHJlYWRsaW5rYXQ6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSByb290LXVp ZDoKQEAgLTI4Nyw2ICsyODgsNyBAQAogICAgIGdsX1BSRVJFUV9QVVRFTlYKICAgZmkKICAg Z2xfU1RETElCX01PRFVMRV9JTkRJQ0FUT1IoW3B1dGVudl0pCisgIGdsX0ZVTkNfQUNMCiAg IGdsX0ZVTkNfUkVBRExJTksKICAgaWYgdGVzdCAkSEFWRV9SRUFETElOSyA9IDAgfHwgdGVz dCAkUkVQTEFDRV9SRUFETElOSyA9IDE7IHRoZW4KICAgICBBQ19MSUJPQkooW3JlYWRsaW5r XSkKQEAgLTczMyw2ICs3MzUsMTAgQEAKICAgYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51 bGwuaAogICBidWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgKICAgYnVpbGQtYXV4L3NuaXBw ZXQvd2Fybi1vbi11c2UuaAorICBsaWIvYWNsLWVycm5vLXZhbGlkLmMKKyAgbGliL2FjbC1p bnRlcm5hbC5oCisgIGxpYi9hY2wuaAorICBsaWIvYWNsX2VudHJpZXMuYwogICBsaWIvYWxs b2NhLmluLmgKICAgbGliL2FsbG9jYXRvci5jCiAgIGxpYi9hbGxvY2F0b3IuaApAQCAtNzU4 LDYgKzc2NCw3IEBACiAgIGxpYi9mY250bC5pbi5oCiAgIGxpYi9mZGF0YXN5bmMuYwogICBs aWIvZmRvcGVuZGlyLmMKKyAgbGliL2ZpbGUtaGFzLWFjbC5jCiAgIGxpYi9maWxlbW9kZS5j CiAgIGxpYi9maWxlbW9kZS5oCiAgIGxpYi9mcGVuZGluZy5jCkBAIC03OTIsNiArNzk5LDgg QEAKICAgbGliL3BzZWxlY3QuYwogICBsaWIvcHRocmVhZF9zaWdtYXNrLmMKICAgbGliL3B1 dGVudi5jCisgIGxpYi9xY29weS1hY2wuYworICBsaWIvcXNldC1hY2wuYwogICBsaWIvcmVh ZGxpbmsuYwogICBsaWIvcmVhZGxpbmthdC5jCiAgIGxpYi9yb290LXVpZC5oCkBAIC04NDMs NiArODUyLDcgQEAKICAgbGliL3ZlcmlmeS5oCiAgIGxpYi94YWxsb2Mtb3ZlcnNpemVkLmgK ICAgbTQvMDBnbnVsaWIubTQKKyAgbTQvYWNsLm00CiAgIG00L2FsbG9jYS5tNAogICBtNC9j LXN0cnRvZC5tNAogICBtNC9jbG9ja190aW1lLm00Cgo9PT0gbW9kaWZpZWQgZmlsZSAnbnQv Q2hhbmdlTG9nJwotLS0gbnQvQ2hhbmdlTG9nCTIwMTMtMDQtMDkgMDI6Mzg6NTYgKzAwMDAK KysrIG50L0NoYW5nZUxvZwkyMDEzLTA0LTE3IDA1OjIxOjMzICswMDAwCkBAIC0xLDMgKzEs OCBAQAorMjAxMy0wNC0xNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisK KwlVc2UgR251bGliIEFDTCBpbXBsZW1lbnRhdGlvbiwgZm9yIGJlbmVmaXQgb2YgU29sYXJp cyBldGMuCisJKiBjb25maWcubnQgKEhBVkVfQUNMX1NFVF9GSUxFKTogUmVuYW1lIGZyb20g SEFWRV9QT1NJWF9BQ0wuCisKIDIwMTMtMDQtMDkgIEtlbiBCcm93biAgPGticm93bkBjb3Ju ZWxsLmVkdT4KIAogCSogZW1hY3MucmM6IFVzZSA2NC1iaXQgbWFuaWZlc3QgZm9yIDY0LWJp dCBDeWd3aW4gYnVpbGQuCgo9PT0gbW9kaWZpZWQgZmlsZSAnbnQvY29uZmlnLm50JwotLS0g bnQvY29uZmlnLm50CTIwMTMtMDMtMzAgMDc6MTA6NTggKzAwMDAKKysrIG50L2NvbmZpZy5u dAkyMDEzLTA0LTE3IDA1OjIxOjMzICswMDAwCkBAIC03NTYsNyArNzU2LDcgQEAKICN1bmRl ZiBIQVZFX1BOR19ICiAKIC8qIERlZmluZSB0byAxIGlmIHVzaW5nIFBPU0lYIEFDTCBzdXBw b3J0LiAqLwotI2RlZmluZSBIQVZFX1BPU0lYX0FDTCAxCisjZGVmaW5lIEhBVkVfQUNMX1NF VF9GSUxFIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb3NpeF9tZW1h bGlnbicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9QT1NJWF9NRU1BTElHTgoKPT09IG1v ZGlmaWVkIGZpbGUgJ3NyYy9DaGFuZ2VMb2cnCi0tLSBzcmMvQ2hhbmdlTG9nCTIwMTMtMDQt MjcgMjE6MTI6MTcgKzAwMDAKKysrIHNyYy9DaGFuZ2VMb2cJMjAxMy0wNC0yOCAwMDowMDox OSArMDAwMApAQCAtMSwzICsxLDEwIEBACisyMDEzLTA0LTI3ICBQYXVsIEVnZ2VydCAgPGVn Z2VydEBjcy51Y2xhLmVkdT4KKworCVVzZSBHbnVsaWIgQUNMIGltcGxlbWVudGF0aW9uLCBm b3IgYmVuZWZpdCBvZiBTb2xhcmlzIGV0Yy4KKwkqIE1ha2VmaWxlLmluIChMSUJfQUNMKTog TmV3IG1hY3JvLgorCShMSUJBQ0xfTElCUyk6IFJlbW92ZS4KKwkoTElCRVMpOiBVc2UgTElC X0FDTCwgbm90IExJQkFDTF9MSUJTLgorCiAyMDEzLTA0LTI3ICBKdXJpIExpbmtvdiAgPGp1 cmlAanVydGEub3JnPgogCiAJKiBjYWxsaW50LmMgKEZjYWxsX2ludGVyYWN0aXZlbHkpOiBD YWxsIGBRcmVhZF9udW1iZXInIGZvcgoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9NYWtlZmls ZS5pbicKLS0tIHNyYy9NYWtlZmlsZS5pbgkyMDEzLTA0LTIyIDA1OjE4OjMwICswMDAwCisr KyBzcmMvTWFrZWZpbGUuaW4JMjAxMy0wNC0yNyAxOTo0MDo0OSArMDAwMApAQCAtMTM3LDYg KzEzNyw3IEBACiBNMTdOX0ZMVF9DRkxBR1MgPSBATTE3Tl9GTFRfQ0ZMQUdTQAogTTE3Tl9G TFRfTElCUyA9IEBNMTdOX0ZMVF9MSUJTQAogCitMSUJfQUNMPUBMSUJfQUNMQAogTElCX0NM T0NLX0dFVFRJTUU9QExJQl9DTE9DS19HRVRUSU1FQAogTElCX0VBQ0NFU1M9QExJQl9FQUND RVNTQAogTElCX0ZEQVRBU1lOQz1ATElCX0ZEQVRBU1lOQ0AKQEAgLTI4Miw4ICsyODMsNiBA QAogTElCR05VVExTX0xJQlMgPSBATElCR05VVExTX0xJQlNACiBMSUJHTlVUTFNfQ0ZMQUdT ID0gQExJQkdOVVRMU19DRkxBR1NACiAKLUxJQkFDTF9MSUJTID0gQExJQkFDTF9MSUJTQAot CiBMSUJfUFRIUkVBRF9TSUdNQVNLID0gQExJQl9QVEhSRUFEX1NJR01BU0tACiAKIElOVEVS VkFMU19IID0gZGlzcGV4dGVybi5oIGludGVydmFscy5oIGNvbXBvc2l0ZS5oCkBAIC0zOTEs MTMgKzM5MCwxMyBAQAogIyMgQ29uc3RydWN0IGZ1bGwgc2V0IG9mIGxpYnJhcmllcyB0byBi ZSBsaW5rZWQuCiBMSUJFUyA9ICQoTElCUykgJChXMzJfTElCUykgJChMSUJTX0dOVVNURVAp ICQoTElCWF9CQVNFKSAkKExJQklNQUdFKSBcCiAgICAkKExJQlhfT1RIRVIpICQoTElCU09V TkQpIFwKLSAgICQoUlNWR19MSUJTKSAkKElNQUdFTUFHSUNLX0xJQlMpICQoTElCX0NMT0NL X0dFVFRJTUUpIFwKKyAgICQoUlNWR19MSUJTKSAkKElNQUdFTUFHSUNLX0xJQlMpICQoTElC X0FDTCkgJChMSUJfQ0xPQ0tfR0VUVElNRSkgXAogICAgJChMSUJfRUFDQ0VTUykgJChMSUJf RkRBVEFTWU5DKSAkKExJQl9USU1FUl9USU1FKSAkKERCVVNfTElCUykgXAogICAgJChMSUJf RVhFQ0lORk8pIFwKICAgICQoTElCWE1MMl9MSUJTKSAkKExJQkdQTSkgJChMSUJSRVNPTFYp ICQoTElCU19TWVNURU0pIFwKICAgICQoTElCU19URVJNQ0FQKSAkKEdFVExPQURBVkdfTElC UykgJChTRVRUSU5HU19MSUJTKSAkKExJQlNFTElOVVhfTElCUykgXAogICAgJChGUkVFVFlQ RV9MSUJTKSAkKEZPTlRDT05GSUdfTElCUykgJChMSUJPVEZfTElCUykgJChNMTdOX0ZMVF9M SUJTKSBcCi0gICAkKExJQkFDTF9MSUJTKSAkKExJQkdOVVRMU19MSUJTKSAkKExJQl9QVEhS RUFEKSAkKExJQl9QVEhSRUFEX1NJR01BU0spIFwKKyAgICQoTElCR05VVExTX0xJQlMpICQo TElCX1BUSFJFQUQpICQoTElCX1BUSFJFQURfU0lHTUFTSykgXAogICAgJChMSUJfTUFUSCkK IAogYWxsOiBlbWFjcyQoRVhFRVhUKSAkKE9USEVSX0ZJTEVTKQoKPT09IG1vZGlmaWVkIGZp bGUgJ3NyYy9maWxlaW8uYycKLS0tIHNyYy9maWxlaW8uYwkyMDEzLTA0LTA3IDE2OjE4OjQx ICswMDAwCisrKyBzcmMvZmlsZWlvLmMJMjAxMy0wNC0xNyAwNToyMTozMyArMDAwMApAQCAt MzYsNyArMzYsNyBAQAogI2luY2x1ZGUgPHNlbGludXgvY29udGV4dC5oPgogI2VuZGlmCiAK LSNpZmRlZiBIQVZFX1BPU0lYX0FDTAorI2lmZGVmIEhBVkVfQUNMX1NFVF9GSUxFCiAjaW5j bHVkZSA8c3lzL2FjbC5oPgogI2VuZGlmCiAKQEAgLTgxLDI2ICs4MSw4IEBACiAjZGVmaW5l IERSSVZFX0xFVFRFUih4KSBjX3RvbG93ZXIgKHgpCiAjZW5kaWYKIAotI2lmZGVmIEhBVkVf UE9TSVhfQUNMCi0vKiBGSVhNRTogdGhpcyBtYWNybyB3YXMgY29waWVkIGZyb20gZ251bGli J3MgcHJpdmF0ZSBhY2wtaW50ZXJuYWwuaAotICAgaGVhZGVyIGZpbGUuICAqLwotLyogUmVj b2duaXplIHNvbWUgY29tbW9uIGVycm9ycyBzdWNoIGFzIGZyb20gYW4gTkZTIG1vdW50IHRo YXQgZG9lcwotICAgbm90IHN1cHBvcnQgQUNMcywgZXZlbiB3aGVuIGxvY2FsIGRyaXZlcyBk by4gICovCi0jaWYgZGVmaW5lZCBfX0FQUExFX18gJiYgZGVmaW5lZCBfX01BQ0hfXyAvKiBN YWMgT1MgWCAqLwotI2RlZmluZSBBQ0xfTk9UX1dFTExfU1VQUE9SVEVEKEVycikJCQkJCVwK LSAgKChFcnIpID09IEVOT1RTVVAgfHwgKEVycikgPT0gRU5PU1lTIHx8IChFcnIpID09IEVJ TlZBTCB8fCAoRXJyKSA9PSBFQlVTWSB8fCAoRXJyKSA9PSBFTk9FTlQpCi0jZWxpZiBkZWZp bmVkIEVPUE5PVFNVUFAgLyogVHJ1NjQgTkZTICovCi0jZGVmaW5lIEFDTF9OT1RfV0VMTF9T VVBQT1JURUQoRXJyKQkJCQkJXAotICAoKEVycikgPT0gRU5PVFNVUCB8fCAoRXJyKSA9PSBF Tk9TWVMgfHwgKEVycikgPT0gRUlOVkFMIHx8IChFcnIpID09IEVCVVNZIHx8IChFcnIpID09 IEVPUE5PVFNVUFApCi0jZWxpZiBkZWZpbmVkIFdJTkRPV1NOVAotI2RlZmluZSBBQ0xfTk9U X1dFTExfU1VQUE9SVEVEKEVycikgICgoRXJyKSA9PSBFTk9UU1VQKQotI2Vsc2UKLSNkZWZp bmUgQUNMX05PVF9XRUxMX1NVUFBPUlRFRChFcnIpCQkJCQlcCi0gICgoRXJyKSA9PSBFTk9U U1VQIHx8IChFcnIpID09IEVOT1NZUyB8fCAoRXJyKSA9PSBFSU5WQUwgfHwgKEVycikgPT0g RUJVU1kpCi0jZW5kaWYKLSNlbmRpZgkvKiBIQVZFX1BPU0lYX0FDTCAqLwotCiAjaW5jbHVk ZSAic3lzdGltZS5oIgorI2luY2x1ZGUgPGFjbC5oPgogI2luY2x1ZGUgPGFsbG9jYXRvci5o PgogI2luY2x1ZGUgPGNhcmVhZGxpbmthdC5oPgogI2luY2x1ZGUgPHN0YXQtdGltZS5oPgpA QCAtMTk4OCw5ICsxOTcwLDYgQEAKICAgc2VjdXJpdHlfY29udGV4dF90IGNvbjsKICAgaW50 IGNvbmxlbmd0aCA9IDA7CiAjZW5kaWYKLSNpZmRlZiBIQVZFX1BPU0lYX0FDTAotICBhY2xf dCBhY2wgPSBOVUxMOwotI2VuZGlmCiAKICAgZW5jb2RlZF9maWxlID0gZW5jb2RlZF9uZXdu YW1lID0gUW5pbDsKICAgR0NQUk80IChmaWxlLCBuZXduYW1lLCBlbmNvZGVkX2ZpbGUsIGVu Y29kZWRfbmV3bmFtZSk7CkBAIC0yMDI2LDE0ICsyMDA1LDYgQEAKICAgICBvdXRfc3Quc3Rf bW9kZSA9IDA7CiAKICNpZmRlZiBXSU5ET1dTTlQKLSAgaWYgKCFOSUxQIChwcmVzZXJ2ZV9l eHRlbmRlZF9hdHRyaWJ1dGVzKSkKLSAgICB7Ci0jaWZkZWYgSEFWRV9QT1NJWF9BQ0wKLSAg ICAgIGFjbCA9IGFjbF9nZXRfZmlsZSAoU0RBVEEgKGVuY29kZWRfZmlsZSksIEFDTF9UWVBF X0FDQ0VTUyk7Ci0gICAgICBpZiAoYWNsID09IE5VTEwgJiYgIUFDTF9OT1RfV0VMTF9TVVBQ T1JURUQgKGVycm5vKSkKLQlyZXBvcnRfZmlsZV9lcnJvciAoIkdldHRpbmcgQUNMIiwgRmNv bnMgKGZpbGUsIFFuaWwpKTsKLSNlbmRpZgotICAgIH0KICAgaWYgKCFDb3B5RmlsZSAoU0RB VEEgKGVuY29kZWRfZmlsZSksCiAJCSBTREFUQSAoZW5jb2RlZF9uZXduYW1lKSwKIAkJIEZB TFNFKSkKQEAgLTIwNjksMTcgKzIwNDAsNiBAQAogICAgICAgLyogUmVzdG9yZSBvcmlnaW5h bCBhdHRyaWJ1dGVzLiAgKi8KICAgICAgIFNldEZpbGVBdHRyaWJ1dGVzIChmaWxlbmFtZSwg YXR0cmlidXRlcyk7CiAgICAgfQotI2lmZGVmIEhBVkVfUE9TSVhfQUNMCi0gIGlmIChhY2wg IT0gTlVMTCkKLSAgICB7Ci0gICAgICBib29sIGZhaWwgPQotCWFjbF9zZXRfZmlsZSAoU0RB VEEgKGVuY29kZWRfbmV3bmFtZSksIEFDTF9UWVBFX0FDQ0VTUywgYWNsKSAhPSAwOwotICAg ICAgaWYgKGZhaWwgJiYgIUFDTF9OT1RfV0VMTF9TVVBQT1JURUQgKGVycm5vKSkKLQlyZXBv cnRfZmlsZV9lcnJvciAoIlNldHRpbmcgQUNMIiwgRmNvbnMgKG5ld25hbWUsIFFuaWwpKTsK LQotICAgICAgYWNsX2ZyZWUgKGFjbCk7Ci0gICAgfQotI2VuZGlmCiAjZWxzZSAvKiBub3Qg V0lORE9XU05UICovCiAgIGltbWVkaWF0ZV9xdWl0ID0gMTsKICAgaWZkID0gZW1hY3Nfb3Bl biAoU1NEQVRBIChlbmNvZGVkX2ZpbGUpLCBPX1JET05MWSwgMCk7CkBAIC0yMTAzLDEyICsy MDYzLDYgQEAKIAkgICAgcmVwb3J0X2ZpbGVfZXJyb3IgKCJEb2luZyBmZ2V0ZmlsZWNvbiIs IEZjb25zIChmaWxlLCBRbmlsKSk7CiAJfQogI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1BPU0lY X0FDTAotICAgICAgYWNsID0gYWNsX2dldF9mZCAoaWZkKTsKLSAgICAgIGlmIChhY2wgPT0g TlVMTCAmJiAhQUNMX05PVF9XRUxMX1NVUFBPUlRFRCAoZXJybm8pKQotCXJlcG9ydF9maWxl X2Vycm9yICgiR2V0dGluZyBBQ0wiLCBGY29ucyAoZmlsZSwgUW5pbCkpOwotI2VuZGlmCiAg ICAgfQogCiAgIGlmIChvdXRfc3Quc3RfbW9kZSAhPSAwCkBAIC0yMTU2LDcgKzIxMTAsNyBA QAogICBpbW1lZGlhdGVfcXVpdCA9IDA7CiAKICNpZm5kZWYgTVNET1MKLSAgLyogUHJlc2Vy dmUgdGhlIG9yaWdpbmFsIGZpbGUgbW9kZXMsIGFuZCBpZiByZXF1ZXN0ZWQsIGFsc28gaXRz CisgIC8qIFByZXNlcnZlIHRoZSBvcmlnaW5hbCBmaWxlIHBlcm1pc3Npb25zLCBhbmQgaWYg cmVxdWVzdGVkLCBhbHNvIGl0cwogICAgICBvd25lciBhbmQgZ3JvdXAuICAqLwogICB7CiAg ICAgbW9kZV90IG1vZGVfbWFzayA9IDA3Nzc3OwpAQCAtMjE3Myw4ICsyMTI3LDE2IEBACiAJ ICAgICAgbW9kZV9tYXNrIHw9IDAyMDAwOwogCSAgfQogICAgICAgfQotICAgIGlmIChmY2ht b2QgKG9mZCwgc3Quc3RfbW9kZSAmIG1vZGVfbWFzaykgIT0gMCkKLSAgICAgIHJlcG9ydF9m aWxlX2Vycm9yICgiRG9pbmcgY2htb2QiLCBGY29ucyAobmV3bmFtZSwgUW5pbCkpOworCisg ICAgc3dpdGNoICghTklMUCAocHJlc2VydmVfZXh0ZW5kZWRfYXR0cmlidXRlcykKKwkgICAg PyBxY29weV9hY2wgKFNTREFUQSAoZW5jb2RlZF9maWxlKSwgaWZkLAorCQkJIFNTREFUQSAo ZW5jb2RlZF9uZXduYW1lKSwgb2ZkLAorCQkJIHN0LnN0X21vZGUgJiBtb2RlX21hc2spCisJ ICAgIDogZmNobW9kIChvZmQsIHN0LnN0X21vZGUgJiBtb2RlX21hc2spKQorICAgICAgewor ICAgICAgY2FzZSAtMjogcmVwb3J0X2ZpbGVfZXJyb3IgKCJDb3B5aW5nIHBlcm1pc3Npb25z IGZyb20iLCBsaXN0MSAoZmlsZSkpOworICAgICAgY2FzZSAtMTogcmVwb3J0X2ZpbGVfZXJy b3IgKCJDb3B5aW5nIHBlcm1pc3Npb25zIHRvIiwgbGlzdDEgKG5ld25hbWUpKTsKKyAgICAg IH0KICAgfQogI2VuZGlmCS8qIG5vdCBNU0RPUyAqLwogCkBAIC0yMTkxLDE3ICsyMTUzLDYg QEAKICAgICB9CiAjZW5kaWYKIAotI2lmZGVmIEhBVkVfUE9TSVhfQUNMCi0gIGlmIChhY2wg IT0gTlVMTCkKLSAgICB7Ci0gICAgICBib29sIGZhaWwgPSBhY2xfc2V0X2ZkIChvZmQsIGFj bCkgIT0gMDsKLSAgICAgIGlmIChmYWlsICYmICFBQ0xfTk9UX1dFTExfU1VQUE9SVEVEIChl cnJubykpCi0JcmVwb3J0X2ZpbGVfZXJyb3IgKCJTZXR0aW5nIEFDTCIsIEZjb25zIChuZXdu YW1lLCBRbmlsKSk7Ci0KLSAgICAgIGFjbF9mcmVlIChhY2wpOwotICAgIH0KLSNlbmRpZgot CiAgIGlmICghTklMUCAoa2VlcF90aW1lKSkKICAgICB7CiAgICAgICBFTUFDU19USU1FIGF0 aW1lID0gZ2V0X3N0YXRfYXRpbWUgKCZzdCk7CkBAIC0zMTExLDcgKzMwNjIsNyBAQAogewog ICBMaXNwX09iamVjdCBhYnNuYW1lOwogICBMaXNwX09iamVjdCBoYW5kbGVyOwotI2lmZGVm IEhBVkVfUE9TSVhfQUNMCisjaWZkZWYgSEFWRV9BQ0xfU0VUX0ZJTEUKICAgYWNsX3QgYWNs OwogICBMaXNwX09iamVjdCBhY2xfc3RyaW5nOwogICBjaGFyICpzdHI7CkBAIC0zMTI2LDcg KzMwNzcsNyBAQAogICBpZiAoIU5JTFAgKGhhbmRsZXIpKQogICAgIHJldHVybiBjYWxsMiAo aGFuZGxlciwgUWZpbGVfYWNsLCBhYnNuYW1lKTsKIAotI2lmZGVmIEhBVkVfUE9TSVhfQUNM CisjaWZkZWYgSEFWRV9BQ0xfU0VUX0ZJTEUKICAgYWJzbmFtZSA9IEVOQ09ERV9GSUxFIChh YnNuYW1lKTsKIAogICBhY2wgPSBhY2xfZ2V0X2ZpbGUgKFNTREFUQSAoYWJzbmFtZSksIEFD TF9UWVBFX0FDQ0VTUyk7CkBAIC0zMTY0LDcgKzMxMTUsNyBAQAogewogICBMaXNwX09iamVj dCBhYnNuYW1lOwogICBMaXNwX09iamVjdCBoYW5kbGVyOwotI2lmZGVmIEhBVkVfUE9TSVhf QUNMCisjaWZkZWYgSEFWRV9BQ0xfU0VUX0ZJTEUKICAgTGlzcF9PYmplY3QgZW5jb2RlZF9h YnNuYW1lOwogICBhY2xfdCBhY2w7CiAgIGJvb2wgZmFpbDsKQEAgLTMxNzgsNyArMzEyOSw3 IEBACiAgIGlmICghTklMUCAoaGFuZGxlcikpCiAgICAgcmV0dXJuIGNhbGwzIChoYW5kbGVy LCBRc2V0X2ZpbGVfYWNsLCBhYnNuYW1lLCBhY2xfc3RyaW5nKTsKIAotI2lmZGVmIEhBVkVf UE9TSVhfQUNMCisjaWZkZWYgSEFWRV9BQ0xfU0VUX0ZJTEUKICAgaWYgKFNUUklOR1AgKGFj bF9zdHJpbmcpKQogICAgIHsKICAgICAgIGFjbCA9IGFjbF9mcm9tX3RleHQgKFNTREFUQSAo YWNsX3N0cmluZykpOwpAQCAtMzE5Myw3ICszMTQ0LDcgQEAKICAgICAgIGZhaWwgPSAoYWNs X3NldF9maWxlIChTU0RBVEEgKGVuY29kZWRfYWJzbmFtZSksIEFDTF9UWVBFX0FDQ0VTUywK IAkJCSAgICBhY2wpCiAJICAgICAgIT0gMCk7Ci0gICAgICBpZiAoZmFpbCAmJiAhQUNMX05P VF9XRUxMX1NVUFBPUlRFRCAoZXJybm8pKQorICAgICAgaWYgKGZhaWwgJiYgYWNsX2Vycm5v X3ZhbGlkIChlcnJubykpCiAJcmVwb3J0X2ZpbGVfZXJyb3IgKCJTZXR0aW5nIEFDTCIsIEZj b25zIChhYnNuYW1lLCBRbmlsKSk7CiAKICAgICAgIGFjbF9mcmVlIChhY2wpOwoK --------------060902070705010703000507--