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#13539: Use fdopendir, fstatat and readlinkat, for efficiency. Date: Tue, 29 Jan 2013 16:56:37 -0800 Organization: UCLA Computer Science Department Message-ID: <51086FC5.20401@cs.ucla.edu> References: <5100F04A.1020603@cs.ucla.edu> <83vcamlcce.fsf@gnu.org> <51063829.3020500@cs.ucla.edu> <83obg9idab.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------080106010007000804020801" X-Trace: ger.gmane.org 1359507468 12319 80.91.229.3 (30 Jan 2013 00:57:48 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 30 Jan 2013 00:57:48 +0000 (UTC) Cc: 13539@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Wed Jan 30 01:58:07 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 1U0M05-0003c0-Ng for geb-bug-gnu-emacs@m.gmane.org; Wed, 30 Jan 2013 01:58:06 +0100 Original-Received: from localhost ([::1]:42438 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U0Lzn-0006eV-JS for geb-bug-gnu-emacs@m.gmane.org; Tue, 29 Jan 2013 19:57:47 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:34321) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U0Lzd-0006eL-1Q for bug-gnu-emacs@gnu.org; Tue, 29 Jan 2013 19:57:44 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1U0LzV-0007uK-Je for bug-gnu-emacs@gnu.org; Tue, 29 Jan 2013 19:57:36 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:49443) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U0LzV-0007u5-Dz for bug-gnu-emacs@gnu.org; Tue, 29 Jan 2013 19:57:29 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1U0M02-0002gA-Jn for bug-gnu-emacs@gnu.org; Tue, 29 Jan 2013 19:58:02 -0500 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: Wed, 30 Jan 2013 00:58:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 13539 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 13539-submit@debbugs.gnu.org id=B13539.135950744110240 (code B ref 13539); Wed, 30 Jan 2013 00:58:02 +0000 Original-Received: (at 13539) by debbugs.gnu.org; 30 Jan 2013 00:57:21 +0000 Original-Received: from localhost ([127.0.0.1]:54907 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1U0LzN-0002f7-IK for submit@debbugs.gnu.org; Tue, 29 Jan 2013 19:57:21 -0500 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:41861) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1U0LzL-0002ez-P2 for 13539@debbugs.gnu.org; Tue, 29 Jan 2013 19:57:20 -0500 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id AC786A60001; Tue, 29 Jan 2013 16:56:44 -0800 (PST) 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 11QLAs5YdXHg; Tue, 29 Jan 2013 16:56:41 -0800 (PST) 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 0E96639E8100; Tue, 29 Jan 2013 16:56:41 -0800 (PST) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130106 Thunderbird/17.0.2 In-Reply-To: <83obg9idab.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.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:70455 Archived-At: This is a multi-part message in MIME format. --------------080106010007000804020801 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 01/28/2013 06:37 AM, Eli Zaretskii wrote: > perhaps a > further optimization would be to avoid the call to > file_name_completion_stat if completion-ignored-extensions is devoid > of elements that end in a slash. Yes, something like that might make sense. >> + fd = (int) name; > ^^^^^ > I think we should use ptrdiff_t rather than int here, since that could > make a difference in 64-bit builds on Windows. Unfortunately that won't work because the existing API uses int elsewhere and we can't easily change int to ptrdiff_t there. But there's another approach: simply set fd = 0, and use dir_pathname inside w32.c. This should be good enough for what Emacs needs. Revised patch attached. --------------080106010007000804020801 Content-Type: text/plain; charset=UTF-8; name="fdopendis.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="fdopendis.txt" PT09IG1vZGlmaWVkIGZpbGUgJy5ienJpZ25vcmUnCi0tLSAuYnpyaWdub3JlCTIwMTMtMDEt MjMgMjM6NDk6NDYgKzAwMDAKKysrIC5ienJpZ25vcmUJMjAxMy0wMS0yNCAwNjo1MToyNSAr MDAwMApAQCAtODcsNiArODcsNyBAQAogbGliL2FsbG9jYS5oCiBsaWIvYXJnLW5vbm51bGwu aAogbGliL2MrK2RlZnMuaAorbGliL2RpcmVudC5oCiBsaWIvZXhlY2luZm8uaAogbGliL2Zj bnRsLmgKIGxpYi9nZXRvcHQuaAoKPT09IG1vZGlmaWVkIGZpbGUgJ0NoYW5nZUxvZycKLS0t IENoYW5nZUxvZwkyMDEzLTAxLTIzIDIzOjQ5OjQ2ICswMDAwCisrKyBDaGFuZ2VMb2cJMjAx My0wMS0yOSAyMDo0OToyNyArMDAwMApAQCAtMSwzICsxLDIzIEBACisyMDEzLTAxLTI5ICBQ YXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVVzZSBmZG9wZW5kaXIsIGZz dGF0YXQgYW5kIHJlYWRsaW5rYXQsIGZvciBlZmZpY2llbmN5IChCdWcjMTM1MzkpLgorCU9u IG15IGhvc3QsIHRoaXMgc3BlZWRzIHVwIGRpcmVjdG9yeS1maWxlcy1hbmQtYXR0cmlidXRl cyBieSBhCisJZmFjdG9yIG9mIDMsIHdoZW4gYXBwbGllZCB0byBFbWFjcydzIHNyYyBkaXJl Y3RvcnkuCisJVGhlc2UgZnVuY3Rpb25zIGFyZSBzdGFuZGFyZGl6ZWQgYnkgUE9TSVggYW5k IGFyZSBjb21tb24gdGhlc2UKKwlkYXlzOyBmYWxsIGJhY2sgb24gYSAoc2xvd2VyKSBnbnVs aWIgaW1wbGVtZW50YXRpb24gaWYgdGhlIGhvc3QKKwlpcyB0b28gb2xkIHRvIHN1cHBseSB0 aGVtLgorCSogLmJ6cmlnbm9yZTogQWRkIGxpYi9kaXJlbnQuaC4KKwkqIGxpYi9NYWtlZmls ZS5hbSAobGliZ251X2FfU09VUkNFUyk6IEFkZCBvcGVuYXQtZGllLmMsIHNhdmUtY3dkLmMu CisJKiBsaWIvY2FyZWFkbGlua2F0LmMsIGxpYi9jYXJlYWRsaW5rYXQuaDogTWVyZ2UgZnJv bSBnbnVsaWIsCisJaW5jb3Jwb3JhdGluZzogMjAxMy0wMS0yOSBjYXJlYWRsaW5rYXQ6IGRv IG5vdCBwcm92aWRlIGNhcmVhZGxpbmthdGN3ZC4KKwkqIGxpYi9nbnVsaWIubWssIG00L2du dWxpYi1jb21wLm00OiBSZWdlbmVyYXRlLgorCSogbGliL2RpcmVudC5pbi5oLCBsaWIvZmRv cGVuZGlyLmMsIGxpYi9mc3RhdGF0LmMsIGxpYi9vcGVuYXQtcHJpdi5oOgorCSogbGliL29w ZW5hdC1wcm9jLmMsIGxpYi9vcGVuYXQuaCwgbTQvZGlyZW50X2gubTQsIG00L2Zkb3BlbmRp ci5tNDoKKwkqIG00L2ZzdGF0YXQubTQ6IE5ldyBmaWxlcywgZnJvbSBnbnVsaWIuCisJKiBs aWIvb3BlbmF0LWRpZS5jLCBsaWIvc2F2ZS1jd2QuYywgbGliL3NhdmUtY3dkLmg6IE5ldyBm aWxlcy4KKwlUaGVzZSBsYXN0IHRocmVlIGFyZSBzcGVjaWZpYyB0byBFbWFjcyBhbmQgYXJl IG5vdCBjb3BpZWQgZnJvbSBnbnVsaWIuCisJVGhleSBhcmUgc2ltcGxlciB0aGFuIHRoZSBn bnVsaWIgdmVyc2lvbnMgYW5kIGFyZSB0dW5lZCBmb3IgRW1hY3MuCisKIDIwMTMtMDEtMjMg IEdpb3Jnb3MgS2VyYW1pZGFzICA8Z2tlcmFtaWRhc0BnbWFpbC5jb20+ICAodGlueSBjaGFu Z2UpCiAKIAkqIC5ienJpZ25vcmU6IGFkZCBsaWItc3JjL2JsZXNzbWFpbC4KCj09PSBtb2Rp ZmllZCBmaWxlICdhZG1pbi9DaGFuZ2VMb2cnCi0tLSBhZG1pbi9DaGFuZ2VMb2cJMjAxMy0w MS0xNSAwOToyMjoyNSArMDAwMAorKysgYWRtaW4vQ2hhbmdlTG9nCTIwMTMtMDEtMjkgMjE6 MDM6MjUgKzAwMDAKQEAgLTEsMyArMSwxMCBAQAorMjAxMy0wMS0yOSAgUGF1bCBFZ2dlcnQg IDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlVc2UgZmRvcGVuZGlyLCBmc3RhdGF0IGFuZCBy ZWFkbGlua2F0LCBmb3IgZWZmaWNpZW5jeSAoQnVnIzEzNTM5KS4KKwkqIG1lcmdlLWdudWxp YiAoR05VTElCX01PRFVMRVMpOiBBZGQgZmRvcGVuZGlyLCBmc3RhdGF0LCByZWFkbGlua2F0 LgorCShHTlVMSUJfVE9PTF9GTEFHUyk6IERvIG5vdCBhdm9pZCBhdC1pbnRlcm5hbCwgb3Bl bmF0LWguCisJQXZvaWQgZHVwLCBvcGVuLCBvcGVuZGlyLgorCiAyMDEzLTAxLTE1ICBEbWl0 cnkgQW50aXBvdiAgPGRtYW50aXBvdkB5YW5kZXgucnU+CiAKIAkqIGNvY2NpbmVsbGUveHNh dmUuY29jY2k6IFNlbWFudGljIHBhdGNoIHRvIGFkanVzdCB1c2VycyBvZgoKPT09IG1vZGlm aWVkIGZpbGUgJ2FkbWluL21lcmdlLWdudWxpYicKLS0tIGFkbWluL21lcmdlLWdudWxpYgky MDEzLTAxLTAyIDE2OjEzOjA0ICswMDAwCisrKyBhZG1pbi9tZXJnZS1nbnVsaWIJMjAxMy0w MS0yNCAwODowMjoxNiArMDAwMApAQCAtMjksOSArMjksOSBAQAogICBhbGxvY2Etb3B0IGMt Y3R5cGUgYy1zdHJjYXNlCiAgIGNhcmVhZGxpbmthdCBjbG9zZS1zdHJlYW0gY3J5cHRvL21k NSBjcnlwdG8vc2hhMSBjcnlwdG8vc2hhMjU2IGNyeXB0by9zaGE1MTIKICAgZHRvYXN0ciBk dG90aW1lc3BlYyBkdXAyIGVudmlyb24gZXhlY2luZm8gZmFjY2Vzc2F0Ci0gIGZjbnRsLWgg ZmlsZW1vZGUgZ2V0bG9hZGF2ZyBnZXRvcHQtZ251IGdldHRpbWUgZ2V0dGltZW9mZGF5Cisg IGZjbnRsLWggZmRvcGVuZGlyIGZpbGVtb2RlIGZzdGF0YXQgZ2V0bG9hZGF2ZyBnZXRvcHQt Z251IGdldHRpbWUgZ2V0dGltZW9mZGF5CiAgIGlnbm9yZS12YWx1ZSBpbnRwcm9wcyBsYXJn ZWZpbGUgbHN0YXQKLSAgbWFueXdhcm5pbmdzIG1rdGltZSBwc2VsZWN0IHB0aHJlYWRfc2ln bWFzayBwdXRlbnYgcmVhZGxpbmsKKyAgbWFueXdhcm5pbmdzIG1rdGltZSBwc2VsZWN0IHB0 aHJlYWRfc2lnbWFzayBwdXRlbnYgcmVhZGxpbmsgcmVhZGxpbmthdAogICBzaWcyc3RyIHNv Y2tsZW4gc3RhdC10aW1lIHN0ZGFsaWduIHN0ZGFyZyBzdGRib29sIHN0ZGlvCiAgIHN0cmZ0 aW1lIHN0cnRvaW1heCBzdHJ0b3VtYXggc3ltbGluayBzeXNfc3RhdAogICBzeXNfdGltZSB0 aW1lIHRpbWVyLXRpbWUgdGltZXNwZWMtYWRkIHRpbWVzcGVjLXN1YiB1bnNldGVudiB1dGlt ZW5zCkBAIC0zOSwxMCArMzksMTAgQEAKICcKIAogR05VTElCX1RPT0xfRkxBR1M9JwotICAt LWF2b2lkPWF0LWludGVybmFsCisgIC0tYXZvaWQ9ZHVwCiAgIC0tYXZvaWQ9ZXJybm8gLS1h dm9pZD1mY2hkaXIgLS1hdm9pZD1mY250bCAtLWF2b2lkPWZzdGF0CiAgIC0tYXZvaWQ9bWFs bG9jLXBvc2l4IC0tYXZvaWQ9bXN2Yy1pbnZhbCAtLWF2b2lkPW1zdmMtbm90aHJvdwotICAt LWF2b2lkPW9wZW5hdC1kaWUgLS1hdm9pZD1vcGVuYXQtaAorICAtLWF2b2lkPW9wZW4gLS1h dm9pZD1vcGVuYXQtZGllIC0tYXZvaWQ9b3BlbmRpcgogICAtLWF2b2lkPXJhaXNlCiAgIC0t YXZvaWQ9c2F2ZS1jd2QgLS1hdm9pZD1zZWxlY3QgLS1hdm9pZD1zaWdwcm9jbWFzayAtLWF2 b2lkPXN5c190eXBlcwogICAtLWF2b2lkPXRocmVhZGxpYgoKPT09IG1vZGlmaWVkIGZpbGUg J2xpYi9NYWtlZmlsZS5hbScKLS0tIGxpYi9NYWtlZmlsZS5hbQkyMDEyLTA4LTAyIDEwOjM5 OjQ3ICswMDAwCisrKyBsaWIvTWFrZWZpbGUuYW0JMjAxMy0wMS0yNCAwNjo1MToyNSArMDAw MApAQCAtOCwzICs4LDUgQEAKIERFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHRvcF9zcmNk aXIpL2xpYiAtSS4uL3NyYyAtSSQodG9wX3NyY2Rpcikvc3JjCiAKIGluY2x1ZGUgZ251bGli Lm1rCisKK2xpYmdudV9hX1NPVVJDRVMgKz0gb3BlbmF0LWRpZS5jIHNhdmUtY3dkLmMKCj09 PSBtb2RpZmllZCBmaWxlICdsaWIvY2FyZWFkbGlua2F0LmMnCi0tLSBsaWIvY2FyZWFkbGlu a2F0LmMJMjAxMy0wMS0wMSAwOToxMTowNSArMDAwMAorKysgbGliL2NhcmVhZGxpbmthdC5j CTIwMTMtMDEtMjkgMjA6NDk6MjcgKzAwMDAKQEAgLTI0LDkgKzI0LDcgQEAKIAogI2luY2x1 ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+ CiAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+CiAKIC8qIERlZmlu ZSB0aGlzIGluZGVwZW5kZW50bHkgc28gdGhhdCBzdGRpbnQuaCBpcyBub3QgYSBwcmVyZXF1 aXNpdGUuICAqLwogI2lmbmRlZiBTSVpFX01BWApAQCAtMzksMjAgKzM3LDYgQEAKIAogI2lu Y2x1ZGUgImFsbG9jYXRvci5oIgogCi0vKiBHZXQgdGhlIHN5bWJvbGljIGxpbmsgdmFsdWUg b2YgRklMRU5BTUUgYW5kIHB1dCBpdCBpbnRvIEJVRkZFUiwgd2l0aAotICAgc2l6ZSBCVUZG RVJfU0laRS4gIFRoaXMgZnVuY3Rpb24gYWN0cyBsaWtlIHJlYWRsaW5rICBidXQgaGFzCi0g ICByZWFkbGlua2F0J3Mgc2lnbmF0dXJlLiAgKi8KLXNzaXplX3QKLWNhcmVhZGxpbmthdGN3 ZCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlbmFtZSwgY2hhciAqYnVmZmVyLAotICAgICAg ICAgICAgICAgICBzaXplX3QgYnVmZmVyX3NpemUpCi17Ci0gIC8qIEZEIG11c3QgYmUgQVRf RkRDV0QgaGVyZSwgb3RoZXJ3aXNlIHRoZSBjYWxsZXIgaXMgdXNpbmcgdGhpcwotICAgICBm dW5jdGlvbiBpbiBjb250ZXh0cyBmb3Igd2hpY2ggaXQgd2FzIG5vdCBtZWFudCBmb3IuICAq LwotICBpZiAoZmQgIT0gQVRfRkRDV0QpCi0gICAgYWJvcnQgKCk7Ci0gIHJldHVybiByZWFk bGluayAoZmlsZW5hbWUsIGJ1ZmZlciwgYnVmZmVyX3NpemUpOwotfQotCiAvKiBBc3N1bWlu ZyB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgRkQsIGdldCB0aGUgc3ltYm9saWMgbGluayB2 YWx1ZQogICAgb2YgRklMRU5BTUUgYXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIGFuZCBw dXQgaXQgaW50byBhIGJ1ZmZlci4KICAgIElmIEZEIGlzIEFUX0ZEQ1dELCBGSUxFTkFNRSBp cyBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byB0aGUgY3VycmVudAoKPT09IG1vZGlmaWVkIGZp bGUgJ2xpYi9jYXJlYWRsaW5rYXQuaCcKLS0tIGxpYi9jYXJlYWRsaW5rYXQuaAkyMDEzLTAx LTAxIDA5OjExOjA1ICswMDAwCisrKyBsaWIvY2FyZWFkbGlua2F0LmgJMjAxMy0wMS0yOSAy MDo0OToyNyArMDAwMApAQCAtNTIsOSArNTIsOSBAQAogICAgICAgICAgICAgICAgICAgICBz c2l6ZV90ICgqcHJlYWRsaW5rYXQpIChpbnQsIGNoYXIgY29uc3QgKiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBzaXplX3QpKTsKIAot LyogU3VpdGFibGUgdmFsdWVzIGZvciBjYXJlYWRsaW5rYXQncyBGRCBhbmQgUFJFQURMSU5L QVQgYXJndW1lbnRzLAorLyogU3VpdGFibGUgdmFsdWUgZm9yIGNhcmVhZGxpbmthdCdzIEZE IGFyZ3VtZW50LAogICAgd2hlbiBkb2luZyBhIHBsYWluIHJlYWRsaW5rOgotICAgUGFzcyBG RCA9IEFUX0ZEQ1dEIGFuZCBQUkVBRExJTktBVCA9IGNhcmVhZGxpbmthdGN3ZC4gICovCisg ICBQYXNzIEZEID0gQVRfRkRDV0QuICAqLwogI2lmIEhBVkVfUkVBRExJTktBVAogLyogQVRf RkRDV0QgaXMgZGVjbGFyZWQgaW4gPGZjbnRsLmg+LiAgKi8KICNlbHNlCkBAIC02Niw3ICs2 Niw1IEBACiAjICBkZWZpbmUgQVRfRkRDV0QgKC0zMDQxOTY1KQogIyBlbmRpZgogI2VuZGlm Ci1zc2l6ZV90IGNhcmVhZGxpbmthdGN3ZCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlbmFt ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHNpemVfdCBidWZm ZXJfc2l6ZSk7CiAKICNlbmRpZiAvKiBfR0xfQ0FSRUFETElOS0FUX0ggKi8KCj09PSBhZGRl ZCBmaWxlICdsaWIvZGlyZW50LmluLmgnCi0tLSBsaWIvZGlyZW50LmluLmgJMTk3MC0wMS0w MSAwMDowMDowMCArMDAwMAorKysgbGliL2RpcmVudC5pbi5oCTIwMTMtMDEtMjQgMDY6NTE6 MjUgKzAwMDAKQEAgLTAsMCArMSwyNTggQEAKKy8qIEEgR05VLWxpa2UgPGRpcmVudC5oPi4K KyAgIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9ESVJFTlRfSAor CisjaWYgX19HTlVDX18gPj0gMworQFBSQUdNQV9TWVNURU1fSEVBREVSQAorI2VuZGlmCitA UFJBR01BX0NPTFVNTlNACisKKy8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxp dCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyNpZiBASEFWRV9ESVJFTlRfSEAKKyMg QElOQ0xVREVfTkVYVEAgQE5FWFRfRElSRU5UX0hACisjZW5kaWYKKworI2lmbmRlZiBfQEdV QVJEX1BSRUZJWEBfRElSRU5UX0gKKyNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX0RJUkVOVF9I CisKKy8qIEdldCBpbm9fdC4gIE5lZWRlZCBvbiBzb21lIHN5c3RlbXMsIGluY2x1ZGluZyBn bGliYyAyLjguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWYgIUBIQVZFX0RJ UkVOVF9IQAorLyogRGVmaW5lIHR5cGVzIERJUiBhbmQgJ3N0cnVjdCBkaXJlbnQnLiAgKi8K KyMgaWYgIUdOVUxJQl9kZWZpbmVkX3N0cnVjdF9kaXJlbnQKK3N0cnVjdCBkaXJlbnQKK3sK KyAgY2hhciBkX3R5cGU7CisgIGNoYXIgZF9uYW1lWzFdOworfTsKKy8qIFBvc3NpYmxlIHZh bHVlcyBmb3IgJ2RfdHlwZScuICAqLworIyAgZGVmaW5lIERUX1VOS05PV04gMAorIyAgZGVm aW5lIERUX0ZJRk8gICAgMSAgICAgICAgICAvKiBGSUZPICovCisjICBkZWZpbmUgRFRfQ0hS ICAgICAyICAgICAgICAgIC8qIGNoYXJhY3RlciBkZXZpY2UgKi8KKyMgIGRlZmluZSBEVF9E SVIgICAgIDQgICAgICAgICAgLyogZGlyZWN0b3J5ICovCisjICBkZWZpbmUgRFRfQkxLICAg ICA2ICAgICAgICAgIC8qIGJsb2NrIGRldmljZSAqLworIyAgZGVmaW5lIERUX1JFRyAgICAg OCAgICAgICAgICAvKiByZWd1bGFyIGZpbGUgKi8KKyMgIGRlZmluZSBEVF9MTksgICAgMTAg ICAgICAgICAgLyogc3ltYm9saWMgbGluayAqLworIyAgZGVmaW5lIERUX1NPQ0sgICAxMiAg ICAgICAgICAvKiBzb2NrZXQgKi8KKyMgIGRlZmluZSBEVF9XSFQgICAgMTQgICAgICAgICAg Lyogd2hpdGVvdXQgKi8KK3R5cGVkZWYgc3RydWN0IGdsX2RpcmVjdG9yeSBESVI7CisjICBk ZWZpbmUgR05VTElCX2RlZmluZWRfc3RydWN0X2RpcmVudCAxCisjIGVuZGlmCisjZW5kaWYK KworLyogVGhlIF9fYXR0cmlidXRlX18gZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZl cnNpb25zIDIuNSBhbmQgbGF0ZXIuCisgICBUaGUgYXR0cmlidXRlIF9fcHVyZV9fIHdhcyBh ZGRlZCBpbiBnY2MgMi45Ni4gICovCisjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9 PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk2KQorIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9Q VVJFIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpCisjZWxzZQorIyBkZWZpbmUgX0dMX0FU VFJJQlVURV9QVVJFIC8qIGVtcHR5ICovCisjZW5kaWYKKworLyogVGhlIGRlZmluaXRpb25z IG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworCisvKiBU aGUgZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwgaXMgY29waWVkIGhlcmUuICAqLwor CisvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUu ICAqLworCisKKy8qIERlY2xhcmUgb3ZlcnJpZGRlbiBmdW5jdGlvbnMuICAqLworCisjaWYg QEdOVUxJQl9PUEVORElSQAorIyBpZiBAUkVQTEFDRV9PUEVORElSQAorIyAgaWYgIShkZWZp bmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRl ZiBvcGVuZGlyCisjICAgZGVmaW5lIG9wZW5kaXIgcnBsX29wZW5kaXIKKyMgIGVuZGlmCitf R0xfRlVOQ0RFQ0xfUlBMIChvcGVuZGlyLCBESVIgKiwgKGNvbnN0IGNoYXIgKmRpcl9uYW1l KSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAob3BlbmRpciwg RElSICosIChjb25zdCBjaGFyICpkaXJfbmFtZSkpOworIyBlbHNlCisjICBpZiAhQEhBVkVf T1BFTkRJUkAKK19HTF9GVU5DREVDTF9TWVMgKG9wZW5kaXIsIERJUiAqLCAoY29uc3QgY2hh ciAqZGlyX25hbWUpIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisjICBlbmRpZgorX0dMX0NY WEFMSUFTX1NZUyAob3BlbmRpciwgRElSICosIChjb25zdCBjaGFyICpkaXJfbmFtZSkpOwor IyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAob3BlbmRpcik7CisjZWxpZiBkZWZpbmVkIEdO VUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIG9wZW5kaXIKKyMgaWYgSEFWRV9SQVdfREVDTF9P UEVORElSCitfR0xfV0FSTl9PTl9VU0UgKG9wZW5kaXIsICJvcGVuZGlyIGlzIG5vdCBwb3J0 YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG9wZW5kaXIg Zm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfUkVB RERJUkAKKyMgaWYgIUBIQVZFX1JFQURESVJACitfR0xfRlVOQ0RFQ0xfU1lTIChyZWFkZGly LCBzdHJ1Y3QgZGlyZW50ICosIChESVIgKmRpcnApIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7 CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyZWFkZGlyLCBzdHJ1Y3QgZGlyZW50ICos IChESVIgKmRpcnApKTsKK19HTF9DWFhBTElBU1dBUk4gKHJlYWRkaXIpOworI2VsaWYgZGVm aW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiByZWFkZGlyCisjIGlmIEhBVkVfUkFX X0RFQ0xfUkVBRERJUgorX0dMX1dBUk5fT05fVVNFIChyZWFkZGlyLCAicmVhZGRpciBpcyBu b3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBy ZWFkZGlyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05V TElCX1JFV0lORERJUkAKKyMgaWYgIUBIQVZFX1JFV0lORERJUkAKK19HTF9GVU5DREVDTF9T WVMgKHJld2luZGRpciwgdm9pZCwgKERJUiAqZGlycCkgX0dMX0FSR19OT05OVUxMICgoMSkp KTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKHJld2luZGRpciwgdm9pZCwgKERJUiAq ZGlycCkpOworX0dMX0NYWEFMSUFTV0FSTiAocmV3aW5kZGlyKTsKKyNlbGlmIGRlZmluZWQg R05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmV3aW5kZGlyCisjIGlmIEhBVkVfUkFXX0RF Q0xfUkVXSU5ERElSCitfR0xfV0FSTl9PTl9VU0UgKHJld2luZGRpciwgInJld2luZGRpciBp cyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVs ZSByZXdpbmRkaXIgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lm IEBHTlVMSUJfQ0xPU0VESVJACisjIGlmIEBSRVBMQUNFX0NMT1NFRElSQAorIyAgaWYgIShk ZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1 bmRlZiBjbG9zZWRpcgorIyAgIGRlZmluZSBjbG9zZWRpciBycGxfY2xvc2VkaXIKKyMgIGVu ZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChjbG9zZWRpciwgaW50LCAoRElSICpkaXJwKSBfR0xf QVJHX05PTk5VTEwgKCgxKSkpOworX0dMX0NYWEFMSUFTX1JQTCAoY2xvc2VkaXIsIGludCwg KERJUiAqZGlycCkpOworIyBlbHNlCisjICBpZiAhQEhBVkVfQ0xPU0VESVJACitfR0xfRlVO Q0RFQ0xfU1lTIChjbG9zZWRpciwgaW50LCAoRElSICpkaXJwKSBfR0xfQVJHX05PTk5VTEwg KCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGNsb3NlZGlyLCBpbnQsIChE SVIgKmRpcnApKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKGNsb3NlZGlyKTsKKyNl bGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgY2xvc2VkaXIKKyMgaWYg SEFWRV9SQVdfREVDTF9DTE9TRURJUgorX0dMX1dBUk5fT05fVVNFIChjbG9zZWRpciwgImNs b3NlZGlyIGlzIG5vdCBwb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVs aWIgbW9kdWxlIGNsb3NlZGlyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlm CisKKyNpZiBAR05VTElCX0RJUkZEQAorLyogUmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3Ig YXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBkaXJlY3Rvcnkgc3RyZWFtLAorICAgb3IgLTEg aWYgbm9uZSBleGlzdHMuICAqLworIyBpZiBAUkVQTEFDRV9ESVJGREAKKyMgIGlmICEoZGVm aW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5k ZWYgZGlyZmQKKyMgICBkZWZpbmUgZGlyZmQgcnBsX2RpcmZkCisjICBlbmRpZgorX0dMX0ZV TkNERUNMX1JQTCAoZGlyZmQsIGludCwgKERJUiAqKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkp OworX0dMX0NYWEFMSUFTX1JQTCAoZGlyZmQsIGludCwgKERJUiAqKSk7CisjIGVsc2UKKyMg IGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFICYm IGRlZmluZWQgZGlyZmQKKyAgICAvKiBkaXJmZCBpcyBkZWZpbmVkIGFzIGEgbWFjcm8gYW5k IG5vdCBhcyBhIGZ1bmN0aW9uLgorICAgICAgIFR1cm4gaXQgaW50byBhIGZ1bmN0aW9uIGFu ZCBnZXQgcmlkIG9mIHRoZSBtYWNyby4gICovCitzdGF0aWMgaW5saW5lIGludCAoZGlyZmQp IChESVIgKmRwKSB7IHJldHVybiBkaXJmZCAoZHApOyB9CisjICAgdW5kZWYgZGlyZmQKKyMg IGVuZGlmCisjICBpZiAhKEBIQVZFX0RFQ0xfRElSRkRAIHx8IGRlZmluZWQgZGlyZmQpCitf R0xfRlVOQ0RFQ0xfU1lTIChkaXJmZCwgaW50LCAoRElSICopIF9HTF9BUkdfTk9OTlVMTCAo KDEpKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZGlyZmQsIGludCwgKERJUiAq KSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChkaXJmZCk7CisjZWxpZiBkZWZpbmVk IEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGRpcmZkCisjIGlmIEhBVkVfUkFXX0RFQ0xf RElSRkQKK19HTF9XQVJOX09OX1VTRSAoZGlyZmQsICJkaXJmZCBpcyB1bnBvcnRhYmxlIC0g IgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBtb2R1bGUgZGlyZmQgZm9yIHBvcnRh YmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfRkRPUEVORElSQAor LyogT3BlbiBhIGRpcmVjdG9yeSBzdHJlYW0gdmlzaXRpbmcgdGhlIGdpdmVuIGRpcmVjdG9y eSBmaWxlCisgICBkZXNjcmlwdG9yLiAgUmV0dXJuIE5VTEwgYW5kIHNldCBlcnJubyBpZiBm ZCBpcyBub3QgdmlzaXRpbmcgYQorICAgZGlyZWN0b3J5LiAgT24gc3VjY2VzcywgdGhpcyBm dW5jdGlvbiBjb25zdW1lcyBmZCAoaXQgd2lsbCBiZQorICAgaW1wbGljaXRseSBjbG9zZWQg ZWl0aGVyIGJ5IHRoaXMgZnVuY3Rpb24gb3IgYnkgYSBzdWJzZXF1ZW50CisgICBjbG9zZWRp cikuICAqLworIyBpZiBAUkVQTEFDRV9GRE9QRU5ESVJACisjICBpZiAhKGRlZmluZWQgX19j cGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorIyAgIHVuZGVmIGZkb3Bl bmRpcgorIyAgIGRlZmluZSBmZG9wZW5kaXIgcnBsX2Zkb3BlbmRpcgorIyAgZW5kaWYKK19H TF9GVU5DREVDTF9SUEwgKGZkb3BlbmRpciwgRElSICosIChpbnQgZmQpKTsKK19HTF9DWFhB TElBU19SUEwgKGZkb3BlbmRpciwgRElSICosIChpbnQgZmQpKTsKKyMgZWxzZQorIyAgaWYg IUBIQVZFX0ZET1BFTkRJUkAgfHwgIUBIQVZFX0RFQ0xfRkRPUEVORElSQAorX0dMX0ZVTkNE RUNMX1NZUyAoZmRvcGVuZGlyLCBESVIgKiwgKGludCBmZCkpOworIyAgZW5kaWYKK19HTF9D WFhBTElBU19TWVMgKGZkb3BlbmRpciwgRElSICosIChpbnQgZmQpKTsKKyMgZW5kaWYKK19H TF9DWFhBTElBU1dBUk4gKGZkb3BlbmRpcik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJ WENIRUNLCisjIHVuZGVmIGZkb3BlbmRpcgorIyBpZiBIQVZFX1JBV19ERUNMX0ZET1BFTkRJ UgorX0dMX1dBUk5fT05fVVNFIChmZG9wZW5kaXIsICJmZG9wZW5kaXIgaXMgdW5wb3J0YWJs ZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZkb3BlbmRpciBm b3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgQEdOVUxJQl9TQ0FO RElSQAorLyogU2NhbiB0aGUgZGlyZWN0b3J5IERJUiwgY2FsbGluZyBGSUxURVIgb24gZWFj aCBkaXJlY3RvcnkgZW50cnkuCisgICBFbnRyaWVzIGZvciB3aGljaCBGSUxURVIgcmV0dXJu cyBub256ZXJvIGFyZSBpbmRpdmlkdWFsbHkgbWFsbG9jJ2QsCisgICBzb3J0ZWQgdXNpbmcg cXNvcnQgd2l0aCBDTVAsIGFuZCBjb2xsZWN0ZWQgaW4gYSBtYWxsb2MnZCBhcnJheSBpbgor ICAgKk5BTUVMSVNULiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2VsZWN0ZWQs IG9yIC0xIG9uIGVycm9yLiAgKi8KKyMgaWYgIUBIQVZFX1NDQU5ESVJACitfR0xfRlVOQ0RF Q0xfU1lTIChzY2FuZGlyLCBpbnQsCisgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAq ZGlyLCBzdHJ1Y3QgZGlyZW50ICoqKm5hbWVsaXN0LAorICAgICAgICAgICAgICAgICAgIGlu dCAoKmZpbHRlcikgKGNvbnN0IHN0cnVjdCBkaXJlbnQgKiksCisgICAgICAgICAgICAgICAg ICAgaW50ICgqY21wKSAoY29uc3Qgc3RydWN0IGRpcmVudCAqKiwgY29uc3Qgc3RydWN0IGRp cmVudCAqKikpCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyLCA0 KSkpOworIyBlbmRpZgorLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIGdsaWJjIHN5c3Rl bXMsIHRoZSBmb3VydGggcGFyYW1ldGVyIGlzCisgICAgICAgICAgICAgICAgICAgICAgICBp bnQgKCpjbXApIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikuICAqLworX0dMX0NYWEFM SUFTX1NZU19DQVNUIChzY2FuZGlyLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgIChj b25zdCBjaGFyICpkaXIsIHN0cnVjdCBkaXJlbnQgKioqbmFtZWxpc3QsCisgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgKCpmaWx0ZXIpIChjb25zdCBzdHJ1Y3QgZGlyZW50ICopLAor ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqY21wKSAoY29uc3Qgc3RydWN0IGRpcmVu dCAqKiwgY29uc3Qgc3RydWN0IGRpcmVudCAqKikpKTsKK19HTF9DWFhBTElBU1dBUk4gKHNj YW5kaXIpOworI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBzY2Fu ZGlyCisjIGlmIEhBVkVfUkFXX0RFQ0xfU0NBTkRJUgorX0dMX1dBUk5fT05fVVNFIChzY2Fu ZGlyLCAic2NhbmRpciBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNl IGdudWxpYiBtb2R1bGUgc2NhbmRpciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNl bmRpZgorCisjaWYgQEdOVUxJQl9BTFBIQVNPUlRACisvKiBDb21wYXJlIHR3byAnc3RydWN0 IGRpcmVudCcgZW50cmllcyBhbHBoYWJldGljYWxseS4gICovCisjIGlmICFASEFWRV9BTFBI QVNPUlRACitfR0xfRlVOQ0RFQ0xfU1lTIChhbHBoYXNvcnQsIGludCwKKyAgICAgICAgICAg ICAgICAgIChjb25zdCBzdHJ1Y3QgZGlyZW50ICoqLCBjb25zdCBzdHJ1Y3QgZGlyZW50ICoq KQorICAgICAgICAgICAgICAgICAgX0dMX0FUVFJJQlVURV9QVVJFCisgICAgICAgICAgICAg ICAgICBfR0xfQVJHX05PTk5VTEwgKCgxLCAyKSkpOworIyBlbmRpZgorLyogTmVlZCB0byBj YXN0LCBiZWNhdXNlIG9uIGdsaWJjIHN5c3RlbXMsIHRoZSBwYXJhbWV0ZXJzIGFyZQorICAg ICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopLiAgKi8K K19HTF9DWFhBTElBU19TWVNfQ0FTVCAoYWxwaGFzb3J0LCBpbnQsCisgICAgICAgICAgICAg ICAgICAgICAgIChjb25zdCBzdHJ1Y3QgZGlyZW50ICoqLCBjb25zdCBzdHJ1Y3QgZGlyZW50 ICoqKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChhbHBoYXNvcnQpOworI2VsaWYgZGVmaW5lZCBH TlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBhbHBoYXNvcnQKKyMgaWYgSEFWRV9SQVdfREVD TF9BTFBIQVNPUlQKK19HTF9XQVJOX09OX1VTRSAoYWxwaGFzb3J0LCAiYWxwaGFzb3J0IGlz IHVucG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBh bHBoYXNvcnQgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisjZW5k aWYgLyogX0BHVUFSRF9QUkVGSVhAX0RJUkVOVF9IICovCisjZW5kaWYgLyogX0BHVUFSRF9Q UkVGSVhAX0RJUkVOVF9IICovCgo9PT0gYWRkZWQgZmlsZSAnbGliL2Zkb3BlbmRpci5jJwot LS0gbGliL2Zkb3BlbmRpci5jCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIGxpYi9m ZG9wZW5kaXIuYwkyMDEzLTAxLTI0IDA2OjUxOjI1ICswMDAwCkBAIC0wLDAgKzEsMjA0IEBA CisvKiBwcm92aWRlIGEgcmVwbGFjZW1lbnQgZmRvcGVuZGlyIGZ1bmN0aW9uCisgICBDb3B5 cmlnaHQgKEMpIDIwMDQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwor ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgor ICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LiAgKi8KKworLyogd3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcgKi8KKworI2luY2x1ZGUg PGNvbmZpZy5oPgorCisjaW5jbHVkZSA8ZGlyZW50Lmg+CisKKyNpbmNsdWRlIDxzdGRsaWIu aD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lmICFIQVZFX0ZET1BFTkRJUgorCisjIGlu Y2x1ZGUgIm9wZW5hdC5oIgorIyBpbmNsdWRlICJvcGVuYXQtcHJpdi5oIgorIyBpbmNsdWRl ICJzYXZlLWN3ZC5oIgorCisjIGlmIEdOVUxJQl9ESVJFTlRfU0FGRVIKKyMgIGluY2x1ZGUg ImRpcmVudC0tLmgiCisjIGVuZGlmCisKKyMgaWZuZGVmIFJFUExBQ0VfRkNIRElSCisjICBk ZWZpbmUgUkVQTEFDRV9GQ0hESVIgMAorIyBlbmRpZgorCitzdGF0aWMgRElSICpmZG9wZW5k aXJfd2l0aF9kdXAgKGludCwgaW50LCBzdHJ1Y3Qgc2F2ZWRfY3dkIGNvbnN0ICopOworc3Rh dGljIERJUiAqZmRfY2xvbmVfb3BlbmRpciAoaW50LCBzdHJ1Y3Qgc2F2ZWRfY3dkIGNvbnN0 ICopOworCisvKiBSZXBsYWNlbWVudCBmb3IgUE9TSVggZmRvcGVuZGlyLgorCisgICBGaXJz dCwgdHJ5IHRvIHNpbXVsYXRlIGl0IHZpYSBvcGVuZGlyICgiL3Byb2Mvc2VsZi9mZC8uLi4i KS4gIEZhaWxpbmcKKyAgIHRoYXQsIHNpbXVsYXRlIGl0IGJ5IHVzaW5nIGZjaGRpciBtZXRh ZGF0YSwgb3IgYnkgZG9pbmcKKyAgIHNhdmVfY3dkL2ZjaGRpci9vcGVuZGlyKCIuIikvcmVz dG9yZV9jd2QuCisgICBJZiBlaXRoZXIgdGhlIHNhdmVfY3dkIG9yIHRoZSByZXN0b3JlX2N3 ZCBmYWlscyAocmVsYXRpdmVseSB1bmxpa2VseSksCisgICB0aGVuIGdpdmUgYSBkaWFnbm9z dGljIGFuZCBleGl0IG5vbnplcm8uCisKKyAgIElmIHN1Y2Nlc3NmdWwsIHRoZSByZXN1bHRp bmcgc3RyZWFtIGlzIGJhc2VkIG9uIEZEIGluCisgICBpbXBsZW1lbnRhdGlvbnMgd2hlcmUg c3RyZWFtcyBhcmUgYmFzZWQgb24gZmlsZSBkZXNjcmlwdG9ycyBhbmQgaW4KKyAgIGFwcGxp Y2F0aW9ucyB3aGVyZSBubyBvdGhlciB0aHJlYWQgb3Igc2lnbmFsIGhhbmRsZXIgYWxsb2Nh dGVzIG9yCisgICBmcmVlcyBmaWxlIGRlc2NyaXB0b3JzLiAgSW4gb3RoZXIgY2FzZXMsIGNv bnN1bHQgZGlyZmQgb24gdGhlIHJlc3VsdAorICAgdG8gZmluZCBvdXQgd2hldGhlciBGRCBp cyBzdGlsbCBiZWluZyB1c2VkLgorCisgICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gd29y a3MganVzdCBsaWtlIFBPU0lYIGZkb3BlbmRpci4KKworICAgVyBBIFIgTiBJIE4gRzoKKwor ICAgVW5saWtlIG90aGVyIGZkLXJlbGF0ZWQgZnVuY3Rpb25zLCB0aGlzIG9uZSBwbGFjZXMg Y29uc3RyYWludHMgb24gRkQuCisgICBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgc3VjY2Vz c2Z1bGx5LCBGRCBpcyB1bmRlciBjb250cm9sIG9mIHRoZQorICAgZGlyZW50Lmggc3lzdGVt LCBhbmQgdGhlIGNhbGxlciBzaG91bGQgbm90IGNsb3NlIG9yIG1vZGlmeSB0aGUgc3RhdGUg b2YKKyAgIEZEIG90aGVyIHRoYW4gYnkgdGhlIGRpcmVudC5oIGZ1bmN0aW9ucy4gICovCitE SVIgKgorZmRvcGVuZGlyIChpbnQgZmQpCit7CisgIERJUiAqZGlyID0gZmRvcGVuZGlyX3dp dGhfZHVwIChmZCwgLTEsIE5VTEwpOworCisgIGlmICghIFJFUExBQ0VfRkNIRElSICYmICEg ZGlyKQorICAgIHsKKyAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgaWYg KEVYUEVDVEVEX0VSUk5PIChzYXZlZF9lcnJubykpCisgICAgICAgIHsKKyAgICAgICAgICBz dHJ1Y3Qgc2F2ZWRfY3dkIGN3ZDsKKyAgICAgICAgICBpZiAoc2F2ZV9jd2QgKCZjd2QpICE9 IDApCisgICAgICAgICAgICBvcGVuYXRfc2F2ZV9mYWlsIChlcnJubyk7CisgICAgICAgICAg ZGlyID0gZmRvcGVuZGlyX3dpdGhfZHVwIChmZCwgLTEsICZjd2QpOworICAgICAgICAgIHNh dmVkX2Vycm5vID0gZXJybm87CisgICAgICAgICAgZnJlZV9jd2QgKCZjd2QpOworICAgICAg ICAgIGVycm5vID0gc2F2ZWRfZXJybm87CisgICAgICAgIH0KKyAgICB9CisKKyAgcmV0dXJu IGRpcjsKK30KKworLyogTGlrZSBmZG9wZW5kaXIsIGV4Y2VwdCB0aGF0IGlmIE9MREVSX0RV UEZEIGlzIG5vdCAtMSwgaXQgaXMga25vd24KKyAgIHRvIGJlIGEgZHVwIG9mIEZEIHdoaWNo IGlzIGxlc3MgdGhhbiBGRCAtIDEgYW5kIHdoaWNoIHdpbGwgYmUKKyAgIGNsb3NlZCBieSB0 aGUgY2FsbGVyIGFuZCBub3Qgb3RoZXJ3aXNlIHVzZWQgYnkgdGhlIGNhbGxlci4gIFRoaXMK KyAgIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhhdCBGRCBpcyBjbG9zZWQgYW5kIGFsbCBmaWxl IGRlc2NyaXB0b3JzIGxlc3MKKyAgIHRoYW4gRkQgYXJlIG9wZW4sIGFuZCB0aGVuIGNhbGxz IGZkX2Nsb25lX29wZW5kaXIgb24gYSBkdXAgb2YgRkQuCisgICBUaGF0IHdheSwgYmFycmlu ZyByYWNlIGNvbmRpdGlvbnMsIGZkX2Nsb25lX29wZW5kaXIgcmV0dXJucyBhCisgICBzdHJl YW0gd2hvc2UgZmlsZSBkZXNjcmlwdG9yIGlzIEZELgorCisgICBJZiBSRVBMQUNFX0NIRElS IG9yIENXRCBpcyBudWxsLCB1c2Ugb3BlbmRpciAoIi9wcm9jL3NlbGYvZmQvLi4uIiwKKyAg IGZhbGxpbmcgYmFjayBvbiBmY2hkaXIgbWV0YWRhdGEuICBPdGhlcndpc2UsIENXRCBpcyBh IHNhdmVkIHZlcnNpb24KKyAgIG9mIHRoZSB3b3JraW5nIGRpcmVjdG9yeTsgdXNlIGZjaGRp ci9vcGVuZGlyKCIuIikvcmVzdG9yZV9jd2QoQ1dEKS4gICovCitzdGF0aWMgRElSICoKK2Zk b3BlbmRpcl93aXRoX2R1cCAoaW50IGZkLCBpbnQgb2xkZXJfZHVwZmQsIHN0cnVjdCBzYXZl ZF9jd2QgY29uc3QgKmN3ZCkKK3sKKyAgaW50IGR1cGZkID0gZHVwIChmZCk7CisgIGlmIChk dXBmZCA8IDAgJiYgZXJybm8gPT0gRU1GSUxFKQorICAgIGR1cGZkID0gb2xkZXJfZHVwZmQ7 CisgIGlmIChkdXBmZCA8IDApCisgICAgcmV0dXJuIE5VTEw7CisgIGVsc2UKKyAgICB7Cisg ICAgICBESVIgKmRpcjsKKyAgICAgIGludCBzYXZlZF9lcnJubzsKKyAgICAgIGlmIChkdXBm ZCA8IGZkIC0gMSAmJiBkdXBmZCAhPSBvbGRlcl9kdXBmZCkKKyAgICAgICAgeworICAgICAg ICAgIGRpciA9IGZkb3BlbmRpcl93aXRoX2R1cCAoZmQsIGR1cGZkLCBjd2QpOworICAgICAg ICAgIHNhdmVkX2Vycm5vID0gZXJybm87CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAg ICAgeworICAgICAgICAgIGNsb3NlIChmZCk7CisgICAgICAgICAgZGlyID0gZmRfY2xvbmVf b3BlbmRpciAoZHVwZmQsIGN3ZCk7CisgICAgICAgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsK KyAgICAgICAgICBpZiAoISBkaXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlu dCBmZDEgPSBkdXAgKGR1cGZkKTsKKyAgICAgICAgICAgICAgaWYgKGZkMSAhPSBmZCkKKyAg ICAgICAgICAgICAgICBvcGVuYXRfc2F2ZV9mYWlsIChmZDEgPCAwID8gZXJybm8gOiBFQkFE Rik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgaWYgKGR1cGZkICE9IG9s ZGVyX2R1cGZkKQorICAgICAgICBjbG9zZSAoZHVwZmQpOworICAgICAgZXJybm8gPSBzYXZl ZF9lcnJubzsKKyAgICAgIHJldHVybiBkaXI7CisgICAgfQorfQorCisvKiBMaWtlIGZkb3Bl bmRpciwgZXhjZXB0IHRoZSByZXN1bHQgY29udHJvbHMgYSBjbG9uZSBvZiBGRC4gIEl0IGlz CisgICB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgYm90aCB0byBjbG9zZSBGRCBhbmQg KGlmIHRoZSByZXN1bHQgaXMKKyAgIG5vdCBudWxsKSB0byBjbG9zZWRpciB0aGUgcmVzdWx0 LiAgKi8KK3N0YXRpYyBESVIgKgorZmRfY2xvbmVfb3BlbmRpciAoaW50IGZkLCBzdHJ1Y3Qg c2F2ZWRfY3dkIGNvbnN0ICpjd2QpCit7CisgIGlmIChSRVBMQUNFX0ZDSERJUiB8fCAhIGN3 ZCkKKyAgICB7CisgICAgICBESVIgKmRpciA9IE5VTEw7CisgICAgICBpbnQgc2F2ZWRfZXJy bm8gPSBFT1BOT1RTVVBQOworICAgICAgY2hhciBidWZbT1BFTkFUX0JVRkZFUl9TSVpFXTsK KyAgICAgIGNoYXIgKnByb2NfZmlsZSA9IG9wZW5hdF9wcm9jX25hbWUgKGJ1ZiwgZmQsICIu Iik7CisgICAgICBpZiAocHJvY19maWxlKQorICAgICAgICB7CisgICAgICAgICAgZGlyID0g b3BlbmRpciAocHJvY19maWxlKTsKKyAgICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOwor ICAgICAgICAgIGlmIChwcm9jX2ZpbGUgIT0gYnVmKQorICAgICAgICAgICAgZnJlZSAocHJv Y19maWxlKTsKKyAgICAgICAgfQorIyBpZiBSRVBMQUNFX0ZDSERJUgorICAgICAgaWYgKCEg ZGlyICYmIEVYUEVDVEVEX0VSUk5PIChzYXZlZF9lcnJubykpCisgICAgICAgIHsKKyAgICAg ICAgICBjaGFyIGNvbnN0ICpuYW1lID0gX2dsX2RpcmVjdG9yeV9uYW1lIChmZCk7CisgICAg ICAgICAgcmV0dXJuIChuYW1lID8gb3BlbmRpciAobmFtZSkgOiBOVUxMKTsKKyAgICAgICAg fQorIyBlbmRpZgorICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAgIHJldHVybiBk aXI7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKGZjaGRpciAoZmQpICE9IDAp CisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg ICAgRElSICpkaXIgPSBvcGVuZGlyICgiLiIpOworICAgICAgICAgIGludCBzYXZlZF9lcnJu byA9IGVycm5vOworICAgICAgICAgIGlmIChyZXN0b3JlX2N3ZCAoY3dkKSAhPSAwKQorICAg ICAgICAgICAgb3BlbmF0X3Jlc3RvcmVfZmFpbCAoZXJybm8pOworICAgICAgICAgIGVycm5v ID0gc2F2ZWRfZXJybm87CisgICAgICAgICAgcmV0dXJuIGRpcjsKKyAgICAgICAgfQorICAg IH0KK30KKworI2Vsc2UgLyogSEFWRV9GRE9QRU5ESVIgKi8KKworIyBpbmNsdWRlIDxlcnJu by5oPgorIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjIHVuZGVmIGZkb3BlbmRpcgorCisv KiBMaWtlIGZkb3BlbmRpciwgYnV0IHdvcmsgYXJvdW5kIEdOVS9IdXJkIGJ1ZyBieSB2YWxp ZGF0aW5nIEZELiAgKi8KKworRElSICoKK3JwbF9mZG9wZW5kaXIgKGludCBmZCkKK3sKKyAg c3RydWN0IHN0YXQgc3Q7CisgIGlmIChmc3RhdCAoZmQsICZzdCkpCisgICAgcmV0dXJuIE5V TEw7CisgIGlmICghU19JU0RJUiAoc3Quc3RfbW9kZSkpCisgICAgeworICAgICAgZXJybm8g PSBFTk9URElSOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICByZXR1cm4gZmRvcGVu ZGlyIChmZCk7Cit9CisKKyNlbmRpZiAvKiBIQVZFX0ZET1BFTkRJUiAqLwoKPT09IGFkZGVk IGZpbGUgJ2xpYi9mc3RhdGF0LmMnCi0tLSBsaWIvZnN0YXRhdC5jCTE5NzAtMDEtMDEgMDA6 MDA6MDAgKzAwMDAKKysrIGxpYi9mc3RhdGF0LmMJMjAxMy0wMS0yNCAwNjo1MToyNSArMDAw MApAQCAtMCwwICsxLDEzNSBAQAorLyogV29yayBhcm91bmQgYW4gZnN0YXRhdCBidWcgb24g U29sYXJpcyA5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDktMjAxMyBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUg PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogV3JpdHRlbiBieSBQ YXVsIEVnZ2VydCBhbmQgSmltIE1leWVyaW5nLiAgKi8KKworLyogSWYgdGhlIHVzZXIncyBj b25maWcuaCBoYXBwZW5zIHRvIGluY2x1ZGUgPHN5cy9zdGF0Lmg+LCBsZXQgaXQgaW5jbHVk ZSBvbmx5CisgICB0aGUgc3lzdGVtJ3MgPHN5cy9zdGF0Lmg+IGhlcmUsIHNvIHRoYXQgb3Jp Z19mc3RhdGF0IGRvZXNuJ3QgcmVjdXJzZSB0bworICAgcnBsX2ZzdGF0YXQuICAqLworI2Rl ZmluZSBfX25lZWRfc3lzdGVtX3N5c19zdGF0X2gKKyNpbmNsdWRlIDxjb25maWcuaD4KKwor LyogR2V0IHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uIG9mIGZzdGF0YXQuICBJdCBtaWdodCBi ZSBkZWZpbmVkIGFzIGEgbWFjcm8uICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lu Y2x1ZGUgPHN5cy9zdGF0Lmg+CisjdW5kZWYgX19uZWVkX3N5c3RlbV9zeXNfc3RhdF9oCisK KyNpZiBIQVZFX0ZTVEFUQVQKK3N0YXRpYyBpbnQKK29yaWdfZnN0YXRhdCAoaW50IGZkLCBj aGFyIGNvbnN0ICpmaWxlbmFtZSwgc3RydWN0IHN0YXQgKmJ1ZiwgaW50IGZsYWdzKQorewor ICByZXR1cm4gZnN0YXRhdCAoZmQsIGZpbGVuYW1lLCBidWYsIGZsYWdzKTsKK30KKyNlbmRp ZgorCisvKiBXcml0ZSAic3lzL3N0YXQuaCIgaGVyZSwgbm90IDxzeXMvc3RhdC5oPiwgb3Ro ZXJ3aXNlIE9TRi8xIDUuMSBEVEsgY2MKKyAgIGVsaW1pbmF0ZXMgdGhpcyBpbmNsdWRlIGJl Y2F1c2Ugb2YgdGhlIHByZWxpbWluYXJ5ICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICAgYWJv dmUuICAqLworI2luY2x1ZGUgInN5cy9zdGF0LmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgor I2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBIQVZFX0ZT VEFUQVQgJiYgSEFWRV9XT1JLSU5HX0ZTVEFUQVRfWkVST19GTEFHCisKKyMgaWZuZGVmIExT VEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LCisjICBkZWZpbmUgTFNUQVRfRk9MTE9XU19T TEFTSEVEX1NZTUxJTksgMAorIyBlbmRpZgorCisvKiBmc3RhdGF0IHNob3VsZCBhbHdheXMg Zm9sbG93IHN5bWJvbGljIGxpbmtzIHRoYXQgZW5kIGluIC8sIGJ1dCBvbgorICAgU29sYXJp cyA5IGl0IGRvZXNuJ3QgaWYgQVRfU1lNTElOS19OT0ZPTExPVyBpcyBzcGVjaWZpZWQuCisg ICBMaWtld2lzZSwgdHJhaWxpbmcgc2xhc2ggb24gYSBub24tZGlyZWN0b3J5IHNob3VsZCBi ZSBhbiBlcnJvci4KKyAgIFRoZXNlIGFyZSB0aGUgc2FtZSBwcm9ibGVtcyB0aGF0IGxzdGF0 LmMgYW5kIHN0YXQuYyBhZGRyZXNzLCBzbworICAgc29sdmUgaXQgaW4gYSBzaW1pbGFyIHdh eS4KKworICAgQUlYIDcuMSBmc3RhdGF0IChBVF9GRENXRCwgLi4uLCAwKSBhbHdheXMgZmFp bHMsIHdoaWNoIGlzIGEgYnVnLgorICAgV29yayBhcm91bmQgdGhpcyBidWcgaWYgRlNUQVRB VF9BVF9GRENXRF8wX0JST0tFTiBpcyBub256ZXJvLiAgKi8KKworaW50CitycGxfZnN0YXRh dCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBzdHJ1Y3Qgc3RhdCAqc3QsIGludCBmbGFn KQoreworICBpbnQgcmVzdWx0ID0gb3JpZ19mc3RhdGF0IChmZCwgZmlsZSwgc3QsIGZsYWcp OworICBzaXplX3QgbGVuOworCisgIGlmIChMU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElO SyB8fCByZXN1bHQgIT0gMCkKKyAgICByZXR1cm4gcmVzdWx0OworICBsZW4gPSBzdHJsZW4g KGZpbGUpOworICBpZiAoZmxhZyAmIEFUX1NZTUxJTktfTk9GT0xMT1cpCisgICAgeworICAg ICAgLyogRml4IGxzdGF0IGJlaGF2aW9yLiAgKi8KKyAgICAgIGlmIChmaWxlW2xlbiAtIDFd ICE9ICcvJyB8fCBTX0lTRElSIChzdC0+c3RfbW9kZSkpCisgICAgICAgIHJldHVybiAwOwor ICAgICAgaWYgKCFTX0lTTE5LIChzdC0+c3RfbW9kZSkpCisgICAgICAgIHsKKyAgICAgICAg ICBlcnJubyA9IEVOT1RESVI7CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9Cisg ICAgICByZXN1bHQgPSBvcmlnX2ZzdGF0YXQgKGZkLCBmaWxlLCBzdCwgZmxhZyAmIH5BVF9T WU1MSU5LX05PRk9MTE9XKTsKKyAgICB9CisgIC8qIEZpeCBzdGF0IGJlaGF2aW9yLiAgKi8K KyAgaWYgKHJlc3VsdCA9PSAwICYmICFTX0lTRElSIChzdC0+c3RfbW9kZSkgJiYgZmlsZVts ZW4gLSAxXSA9PSAnLycpCisgICAgeworICAgICAgZXJybm8gPSBFTk9URElSOworICAgICAg cmV0dXJuIC0xOworICAgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworI2Vsc2UgLyogISAo SEFWRV9GU1RBVEFUICYmIEhBVkVfV09SS0lOR19GU1RBVEFUX1pFUk9fRkxBRykgKi8KKwor LyogT24gbWluZ3csIHRoZSBnbnVsaWIgPHN5cy9zdGF0Lmg+IGRlZmluZXMgJ3N0YXQnIGFz IGEgZnVuY3Rpb24tbGlrZQorICAgbWFjcm87IGJ1dCB1c2luZyBpdCBpbiBBVF9GVU5DX0Yy IGNhdXNlcyBjb21waWxhdGlvbiBmYWlsdXJlCisgICBiZWNhdXNlIHRoZSBwcmVwcm9jZXNz b3Igc2VlcyBhIHVzZSBvZiBhIG1hY3JvIHRoYXQgcmVxdWlyZXMgdHdvCisgICBhcmd1bWVu dHMgYnV0IGlzIG9ubHkgZ2l2ZW4gb25lLiAgSGVuY2UsIHdlIG5lZWQgYW4gaW5saW5lCisg ICBmb3J3YXJkZXIgdG8gZ2V0IHBhc3QgdGhlIHByZXByb2Nlc3Nvci4gICovCitzdGF0aWMg aW50CitzdGF0X2Z1bmMgKGNoYXIgY29uc3QgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCkKK3sK KyAgcmV0dXJuIHN0YXQgKG5hbWUsIHN0KTsKK30KKworLyogTGlrZXdpc2UsIGlmIHRoZXJl IGlzIG5vIG5hdGl2ZSAnbHN0YXQnLCB0aGVuIHRoZSBnbnVsaWIKKyAgIDxzeXMvc3RhdC5o PiBkZWZpbmVkIGl0IGFzIHN0YXQsIHdoaWNoIGFsc28gbmVlZHMgYWRqdXN0bWVudC4gICov CisjIGlmICFIQVZFX0xTVEFUCisjICB1bmRlZiBsc3RhdAorIyAgZGVmaW5lIGxzdGF0IHN0 YXRfZnVuYworIyBlbmRpZgorCisvKiBSZXBsYWNlbWVudCBmb3IgU29sYXJpcycgZnVuY3Rp b24gYnkgdGhlIHNhbWUgbmFtZS4KKyAgIDxodHRwOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNo P3E9ZnN0YXRhdCtzaXRlOmRvY3Muc3VuLmNvbT4KKyAgIEZpcnN0LCB0cnkgdG8gc2ltdWxh dGUgaXQgdmlhIGw/c3RhdCAoIi9wcm9jL3NlbGYvZmQvRkQvRklMRSIpLgorICAgRmFpbGlu ZyB0aGF0LCBzaW11bGF0ZSBpdCB2aWEgc2F2ZV9jd2QvZmNoZGlyLyhzdGF0fGxzdGF0KS9y ZXN0b3JlX2N3ZC4KKyAgIElmIGVpdGhlciB0aGUgc2F2ZV9jd2Qgb3IgdGhlIHJlc3RvcmVf Y3dkIGZhaWxzIChyZWxhdGl2ZWx5IHVubGlrZWx5KSwKKyAgIHRoZW4gZ2l2ZSBhIGRpYWdu b3N0aWMgYW5kIGV4aXQgbm9uemVyby4KKyAgIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiB3 b3JrcyBqdXN0IGxpa2UgU29sYXJpcycgZnN0YXRhdC4gICovCisKKyMgZGVmaW5lIEFUX0ZV TkNfTkFNRSBmc3RhdGF0CisjIGRlZmluZSBBVF9GVU5DX0YxIGxzdGF0CisjIGRlZmluZSBB VF9GVU5DX0YyIHN0YXRfZnVuYworIyBkZWZpbmUgQVRfRlVOQ19VU0VfRjFfQ09ORCBBVF9T WU1MSU5LX05PRk9MTE9XCisjIGRlZmluZSBBVF9GVU5DX1BPU1RfRklMRV9QQVJBTV9ERUNM UyAsIHN0cnVjdCBzdGF0ICpzdCwgaW50IGZsYWcKKyMgZGVmaW5lIEFUX0ZVTkNfUE9TVF9G SUxFX0FSR1MgICAgICAgICwgc3QKKyMgaW5jbHVkZSAiYXQtZnVuYy5jIgorIyB1bmRlZiBB VF9GVU5DX05BTUUKKyMgdW5kZWYgQVRfRlVOQ19GMQorIyB1bmRlZiBBVF9GVU5DX0YyCisj IHVuZGVmIEFUX0ZVTkNfVVNFX0YxX0NPTkQKKyMgdW5kZWYgQVRfRlVOQ19QT1NUX0ZJTEVf UEFSQU1fREVDTFMKKyMgdW5kZWYgQVRfRlVOQ19QT1NUX0ZJTEVfQVJHUworCisjZW5kaWYg LyogIUhBVkVfRlNUQVRBVCAqLwoKPT09IG1vZGlmaWVkIGZpbGUgJ2xpYi9nbnVsaWIubWsn Ci0tLSBsaWIvZ251bGliLm1rCTIwMTMtMDEtMDQgMDI6MTc6NDkgKzAwMDAKKysrIGxpYi9n bnVsaWIubWsJMjAxMy0wMS0yNCAwODowMjoxNiArMDAwMApAQCAtMjEsNyArMjEsNyBAQAog IyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9n cmFtLgogIwogIyBHZW5lcmF0ZWQgYnkgZ251bGliLXRvb2wuCi0jIFJlcHJvZHVjZSBieTog Z251bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9LiAtLWxpYj1saWJnbnUgLS1zb3VyY2UtYmFz ZT1saWIgLS1tNC1iYXNlPW00IC0tZG9jLWJhc2U9ZG9jIC0tdGVzdHMtYmFzZT10ZXN0cyAt LWF1eC1kaXI9YnVpbGQtYXV4IC0tYXZvaWQ9YXQtaW50ZXJuYWwgLS1hdm9pZD1lcnJubyAt LWF2b2lkPWZjaGRpciAtLWF2b2lkPWZjbnRsIC0tYXZvaWQ9ZnN0YXQgLS1hdm9pZD1tYWxs b2MtcG9zaXggLS1hdm9pZD1tc3ZjLWludmFsIC0tYXZvaWQ9bXN2Yy1ub3Rocm93IC0tYXZv aWQ9b3BlbmF0LWRpZSAtLWF2b2lkPW9wZW5hdC1oIC0tYXZvaWQ9cmFpc2UgLS1hdm9pZD1z YXZlLWN3ZCAtLWF2b2lkPXNlbGVjdCAtLWF2b2lkPXNpZ3Byb2NtYXNrIC0tYXZvaWQ9c3lz X3R5cGVzIC0tYXZvaWQ9dGhyZWFkbGliIC0tbWFrZWZpbGUtbmFtZT1nbnVsaWIubWsgLS1j b25kaXRpb25hbC1kZXBlbmRlbmNpZXMgLS1uby1saWJ0b29sIC0tbWFjcm8tcHJlZml4PWds IC0tbm8tdmMtZmlsZXMgYWxsb2NhLW9wdCBjLWN0eXBlIGMtc3RyY2FzZSBjYXJlYWRsaW5r YXQgY2xvc2Utc3RyZWFtIGNyeXB0by9tZDUgY3J5cHRvL3NoYTEgY3J5cHRvL3NoYTI1NiBj cnlwdG8vc2hhNTEyIGR0b2FzdHIgZHRvdGltZXNwZWMgZHVwMiBlbnZpcm9uIGV4ZWNpbmZv IGZhY2Nlc3NhdCBmY250bC1oIGZpbGVtb2RlIGdldGxvYWRhdmcgZ2V0b3B0LWdudSBnZXR0 aW1lIGdldHRpbWVvZmRheSBpZ25vcmUtdmFsdWUgaW50cHJvcHMgbGFyZ2VmaWxlIGxzdGF0 IG1hbnl3YXJuaW5ncyBta3RpbWUgcHNlbGVjdCBwdGhyZWFkX3NpZ21hc2sgcHV0ZW52IHJl YWRsaW5rIHNpZzJzdHIgc29ja2xlbiBzdGF0LXRpbWUgc3RkYWxpZ24gc3RkYXJnIHN0ZGJv b2wgc3RkaW8gc3RyZnRpbWUgc3RydG9pbWF4IHN0cnRvdW1heCBzeW1saW5rIHN5c19zdGF0 IHN5c190aW1lIHRpbWUgdGltZXItdGltZSB0aW1lc3BlYy1hZGQgdGltZXNwZWMtc3ViIHVu c2V0ZW52IHV0aW1lbnMgd2FybmluZ3MKKyMgUmVwcm9kdWNlIGJ5OiBnbnVsaWItdG9vbCAt LWltcG9ydCAtLWRpcj0uIC0tbGliPWxpYmdudSAtLXNvdXJjZS1iYXNlPWxpYiAtLW00LWJh c2U9bTQgLS1kb2MtYmFzZT1kb2MgLS10ZXN0cy1iYXNlPXRlc3RzIC0tYXV4LWRpcj1idWls ZC1hdXggLS1hdm9pZD1kdXAgLS1hdm9pZD1lcnJubyAtLWF2b2lkPWZjaGRpciAtLWF2b2lk PWZjbnRsIC0tYXZvaWQ9ZnN0YXQgLS1hdm9pZD1tYWxsb2MtcG9zaXggLS1hdm9pZD1tc3Zj LWludmFsIC0tYXZvaWQ9bXN2Yy1ub3Rocm93IC0tYXZvaWQ9b3BlbiAtLWF2b2lkPW9wZW5h dC1kaWUgLS1hdm9pZD1vcGVuZGlyIC0tYXZvaWQ9cmFpc2UgLS1hdm9pZD1zYXZlLWN3ZCAt LWF2b2lkPXNlbGVjdCAtLWF2b2lkPXNpZ3Byb2NtYXNrIC0tYXZvaWQ9c3lzX3R5cGVzIC0t YXZvaWQ9dGhyZWFkbGliIC0tbWFrZWZpbGUtbmFtZT1nbnVsaWIubWsgLS1jb25kaXRpb25h bC1kZXBlbmRlbmNpZXMgLS1uby1saWJ0b29sIC0tbWFjcm8tcHJlZml4PWdsIC0tbm8tdmMt ZmlsZXMgYWxsb2NhLW9wdCBjLWN0eXBlIGMtc3RyY2FzZSBjYXJlYWRsaW5rYXQgY2xvc2Ut c3RyZWFtIGNyeXB0by9tZDUgY3J5cHRvL3NoYTEgY3J5cHRvL3NoYTI1NiBjcnlwdG8vc2hh NTEyIGR0b2FzdHIgZHRvdGltZXNwZWMgZHVwMiBlbnZpcm9uIGV4ZWNpbmZvIGZhY2Nlc3Nh dCBmY250bC1oIGZkb3BlbmRpciBmaWxlbW9kZSBmc3RhdGF0IGdldGxvYWRhdmcgZ2V0b3B0 LWdudSBnZXR0aW1lIGdldHRpbWVvZmRheSBpZ25vcmUtdmFsdWUgaW50cHJvcHMgbGFyZ2Vm aWxlIGxzdGF0IG1hbnl3YXJuaW5ncyBta3RpbWUgcHNlbGVjdCBwdGhyZWFkX3NpZ21hc2sg cHV0ZW52IHJlYWRsaW5rIHJlYWRsaW5rYXQgc2lnMnN0ciBzb2NrbGVuIHN0YXQtdGltZSBz dGRhbGlnbiBzdGRhcmcgc3RkYm9vbCBzdGRpbyBzdHJmdGltZSBzdHJ0b2ltYXggc3RydG91 bWF4IHN5bWxpbmsgc3lzX3N0YXQgc3lzX3RpbWUgdGltZSB0aW1lci10aW1lIHRpbWVzcGVj LWFkZCB0aW1lc3BlYy1zdWIgdW5zZXRlbnYgdXRpbWVucyB3YXJuaW5ncwogCiAKIE1PU1RM WUNMRUFORklMRVMgKz0gY29yZSAqLnN0YWNrZHVtcApAQCAtNjQsNiArNjQsMTcgQEAKIAog IyMgZW5kICAgZ251bGliIG1vZHVsZSBhbGxvY2F0b3IKIAorIyMgYmVnaW4gZ251bGliIG1v ZHVsZSBhdC1pbnRlcm5hbAorCitpZiBnbF9HTlVMSUJfRU5BQkxFRF8yNjA5NDFjMGU1ZGM2 N2VjOWU4N2QxZmIzMjFjMzAwYgorCitlbmRpZgorRVhUUkFfRElTVCArPSBvcGVuYXQtcHJp di5oIG9wZW5hdC1wcm9jLmMKKworRVhUUkFfbGliZ251X2FfU09VUkNFUyArPSBvcGVuYXQt cHJvYy5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgYXQtaW50ZXJuYWwKKwogIyMgYmVn aW4gZ251bGliIG1vZHVsZSBjLWN0eXBlCiAKIGxpYmdudV9hX1NPVVJDRVMgKz0gYy1jdHlw ZS5oIGMtY3R5cGUuYwpAQCAtMTI0LDYgKzEzNSw1NCBAQAogCiAjIyBlbmQgICBnbnVsaWIg bW9kdWxlIGNyeXB0by9zaGE1MTIKIAorIyMgYmVnaW4gZ251bGliIG1vZHVsZSBkaXJlbnQK KworQlVJTFRfU09VUkNFUyArPSBkaXJlbnQuaAorCisjIFdlIG5lZWQgdGhlIGZvbGxvd2lu ZyBpbiBvcmRlciB0byBjcmVhdGUgPGRpcmVudC5oPiB3aGVuIHRoZSBzeXN0ZW0KKyMgZG9l c24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVyLgorZGly ZW50Lmg6IGRpcmVudC5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hY REVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKwkkKEFNX1ZfR0VO KXJtIC1mICRALXQgJEAgJiYgXAorCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRF RCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKwkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgn J0B8R0x8ZycgXAorCSAgICAgIC1lICdzfEAnJ0hBVkVfRElSRU5UX0gnJ0B8JChIQVZFX0RJ UkVOVF9IKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVE RV9ORVhUKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8 QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NP TFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisJICAgICAgLWUgJ3N8QCcnTkVYVF9E SVJFTlRfSCcnQHwkKE5FWFRfRElSRU5UX0gpfGcnIFwKKwkgICAgICAtZSAncy9AJydHTlVM SUJfT1BFTkRJUicnQC8kKEdOVUxJQl9PUEVORElSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcn R05VTElCX1JFQURESVInJ0AvJChHTlVMSUJfUkVBRERJUikvZycgXAorCSAgICAgIC1lICdz L0AnJ0dOVUxJQl9SRVdJTkRESVInJ0AvJChHTlVMSUJfUkVXSU5ERElSKS9nJyBcCisJICAg ICAgLWUgJ3MvQCcnR05VTElCX0NMT1NFRElSJydALyQoR05VTElCX0NMT1NFRElSKS9nJyBc CisJICAgICAgLWUgJ3MvQCcnR05VTElCX0RJUkZEJydALyQoR05VTElCX0RJUkZEKS9nJyBc CisJICAgICAgLWUgJ3MvQCcnR05VTElCX0ZET1BFTkRJUicnQC8kKEdOVUxJQl9GRE9QRU5E SVIpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVMSUJfU0NBTkRJUicnQC8kKEdOVUxJQl9T Q0FORElSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX0FMUEhBU09SVCcnQC8kKEdO VUxJQl9BTFBIQVNPUlQpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX09QRU5ESVInJ0Av JChIQVZFX09QRU5ESVIpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX1JFQURESVInJ0Av JChIQVZFX1JFQURESVIpL2cnIFwKKwkgICAgICAtZSAncy9AJydIQVZFX1JFV0lORERJUicn QC8kKEhBVkVfUkVXSU5ERElSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9DTE9TRURJ UicnQC8kKEhBVkVfQ0xPU0VESVIpL2cnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xf RElSRkQnJ0B8JChIQVZFX0RFQ0xfRElSRkQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZF X0RFQ0xfRkRPUEVORElSJydAfCQoSEFWRV9ERUNMX0ZET1BFTkRJUil8ZycgXAorCSAgICAg IC1lICdzfEAnJ0hBVkVfRkRPUEVORElSJydAfCQoSEFWRV9GRE9QRU5ESVIpfGcnIFwKKwkg ICAgICAtZSAnc3xAJydIQVZFX1NDQU5ESVInJ0B8JChIQVZFX1NDQU5ESVIpfGcnIFwKKwkg ICAgICAtZSAnc3xAJydIQVZFX0FMUEhBU09SVCcnQHwkKEhBVkVfQUxQSEFTT1JUKXxnJyBc CisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9PUEVORElSJydAfCQoUkVQTEFDRV9PUEVORElS KXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9DTE9TRURJUicnQHwkKFJFUExBQ0Vf Q0xPU0VESVIpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0RJUkZEJydAfCQoUkVQ TEFDRV9ESVJGRCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfRkRPUEVORElSJydA fCQoUkVQTEFDRV9GRE9QRU5ESVIpfGcnIFwKKwkgICAgICAtZSAnL2RlZmluaXRpb25zIG9m IF9HTF9GVU5DREVDTF9SUEwvciAkKENYWERFRlNfSCknIFwKKwkgICAgICAtZSAnL2RlZmlu aXRpb24gb2YgX0dMX0FSR19OT05OVUxML3IgJChBUkdfTk9OTlVMTF9IKScgXAorCSAgICAg IC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UvciAkKFdBUk5fT05fVVNFX0gp JyBcCisJICAgICAgPCAkKHNyY2RpcikvZGlyZW50LmluLmg7IFwKKwl9ID4gJEAtdCAmJiBc CisJbXYgJEAtdCAkQAorTU9TVExZQ0xFQU5GSUxFUyArPSBkaXJlbnQuaCBkaXJlbnQuaC10 CisKK0VYVFJBX0RJU1QgKz0gZGlyZW50LmluLmgKKworIyMgZW5kICAgZ251bGliIG1vZHVs ZSBkaXJlbnQKKwogIyMgYmVnaW4gZ251bGliIG1vZHVsZSBkb3NuYW1lCiAKIGlmIGdsX0dO VUxJQl9FTkFCTEVEX2Rvc25hbWUKQEAgLTIzOCw2ICsyOTcsMTUgQEAKIAogIyMgZW5kICAg Z251bGliIG1vZHVsZSBmY250bC1oCiAKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZmRvcGVu ZGlyCisKKworRVhUUkFfRElTVCArPSBmZG9wZW5kaXIuYworCitFWFRSQV9saWJnbnVfYV9T T1VSQ0VTICs9IGZkb3BlbmRpci5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZmRvcGVu ZGlyCisKICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZmlsZW1vZGUKIAogbGliZ251X2FfU09V UkNFUyArPSBmaWxlbW9kZS5jCkBAIC0yNTUsNiArMzIzLDE1IEBACiAKICMjIGVuZCAgIGdu dWxpYiBtb2R1bGUgZnBlbmRpbmcKIAorIyMgYmVnaW4gZ251bGliIG1vZHVsZSBmc3RhdGF0 CisKKworRVhUUkFfRElTVCArPSBhdC1mdW5jLmMgZnN0YXRhdC5jCisKK0VYVFJBX2xpYmdu dV9hX1NPVVJDRVMgKz0gYXQtZnVuYy5jIGZzdGF0YXQuYworCisjIyBlbmQgICBnbnVsaWIg bW9kdWxlIGZzdGF0YXQKKwogIyMgYmVnaW4gZ251bGliIG1vZHVsZSBnZXRncm91cHMKIAog aWYgZ2xfR05VTElCX0VOQUJMRURfZ2V0Z3JvdXBzCkBAIC00MTIsNiArNDg5LDE1IEBACiAK ICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgbWt0aW1lCiAKKyMjIGJlZ2luIGdudWxpYiBtb2R1 bGUgb3BlbmF0LWgKKworaWYgZ2xfR05VTElCX0VOQUJMRURfMDNlMGFhYWQ0Y2I4OWNhNzU3 NjUzYmQzNjdhNmNjYjcKKworZW5kaWYKK0VYVFJBX0RJU1QgKz0gb3BlbmF0LmgKKworIyMg ZW5kICAgZ251bGliIG1vZHVsZSBvcGVuYXQtaAorCiAjIyBiZWdpbiBnbnVsaWIgbW9kdWxl IHBhdGhtYXgKIAogaWYgZ2xfR05VTElCX0VOQUJMRURfcGF0aG1heApAQCAtNDU3LDYgKzU0 MywxNSBAQAogCiAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHJlYWRsaW5rCiAKKyMjIGJlZ2lu IGdudWxpYiBtb2R1bGUgcmVhZGxpbmthdAorCisKK0VYVFJBX0RJU1QgKz0gYXQtZnVuYy5j IHJlYWRsaW5rYXQuYworCitFWFRSQV9saWJnbnVfYV9TT1VSQ0VTICs9IGF0LWZ1bmMuYyBy ZWFkbGlua2F0LmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSByZWFkbGlua2F0CisKICMj IGJlZ2luIGdudWxpYiBtb2R1bGUgcm9vdC11aWQKIAogaWYgZ2xfR05VTElCX0VOQUJMRURf NjA5OWU5NzM3Zjc1N2RiMzZjNDdmYTlkOWYwMmU4OGMKCj09PSBhZGRlZCBmaWxlICdsaWIv b3BlbmF0LWRpZS5jJwotLS0gbGliL29wZW5hdC1kaWUuYwkxOTcwLTAxLTAxIDAwOjAwOjAw ICswMDAwCisrKyBsaWIvb3BlbmF0LWRpZS5jCTIwMTMtMDEtMjQgMDY6NTE6MjUgKzAwMDAK QEAgLTAsMCArMSw2IEBACisvKiBSZXNwb25kIHRvIGEgc2F2ZS0gb3IgcmVzdG9yZS1jd2Qg ZmFpbHVyZS4KKyAgIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiB3aXRoIEVtYWNzLiAgKi8K KyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlICJvcGVuYXQuaCIKK3ZvaWQgb3BlbmF0 X3NhdmVfZmFpbCAoaW50IGVycm51bSkgeyBhYm9ydCAoKTsgfQordm9pZCBvcGVuYXRfcmVz dG9yZV9mYWlsIChpbnQgZXJybnVtKSB7IGFib3J0ICgpOyB9Cgo9PT0gYWRkZWQgZmlsZSAn bGliL29wZW5hdC1wcml2LmgnCi0tLSBsaWIvb3BlbmF0LXByaXYuaAkxOTcwLTAxLTAxIDAw OjAwOjAwICswMDAwCisrKyBsaWIvb3BlbmF0LXByaXYuaAkyMDEzLTAxLTI0IDA2OjUxOjI1 ICswMDAwCkBAIC0wLDAgKzEsNjQgQEAKKy8qIEludGVybmFscyBmb3Igb3BlbmF0LWxpa2Ug ZnVuY3Rpb25zLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiwgMjAwOS0yMDEzIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor CisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiB3cml0dGVu IGJ5IEppbSBNZXllcmluZyAqLworCisjaWZuZGVmIF9HTF9IRUFERVJfT1BFTkFUX1BSSVYK KyNkZWZpbmUgX0dMX0hFQURFUl9PUEVOQVRfUFJJVgorCisjaW5jbHVkZSA8ZXJybm8uaD4K KyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogTWF4aW11 bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBpdCBpcyBzYWZlIHRvIGFsbG9jYXRlIGFzIGEgc2lu Z2xlCisgICBhcnJheSBvbiB0aGUgc3RhY2ssIGFuZCB0aGF0IGlzIGtub3duIGFzIGEgY29t cGlsZS10aW1lIGNvbnN0YW50LgorICAgVGhlIGFzc3VtcHRpb24gaXMgdGhhdCB3ZSdsbCB0 b3VjaCB0aGUgYXJyYXkgdmVyeSBxdWlja2x5LCBvciBhCisgICB0ZW1wb3JhcnkgdmVyeSBu ZWFyIHRoZSBhcnJheSwgcHJvdm9raW5nIGFuIG91dC1vZi1tZW1vcnkgdHJhcC4gIE9uCisg ICBzb21lIG9wZXJhdGluZyBzeXN0ZW1zLCB0aGVyZSBpcyBvbmx5IG9uZSBndWFyZCBwYWdl IGZvciB0aGUgc3RhY2ssCisgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFz IDQwOTYgYnl0ZXMuICBTdWJ0cmFjdCA2NCBpbiB0aGUKKyAgIGhvcGUgdGhhdCB0aGlzIHdp bGwgbGV0IHRoZSBjb21waWxlciB0b3VjaCBhIG5lYXJieSB0ZW1wb3JhcnkgYW5kCisgICBw cm92b2tlIGEgdHJhcC4gICovCisjZGVmaW5lIFNBRkVSX0FMTE9DQV9NQVggKDQwOTYgLSA2 NCkKKworI2RlZmluZSBTQUZFUl9BTExPQ0EobSkgKChtKSA8IFNBRkVSX0FMTE9DQV9NQVgg PyAobSkgOiBTQUZFUl9BTExPQ0FfTUFYKQorCisjaWYgZGVmaW5lZCBQQVRIX01BWAorIyBk ZWZpbmUgT1BFTkFUX0JVRkZFUl9TSVpFIFNBRkVSX0FMTE9DQSAoUEFUSF9NQVgpCisjZWxp ZiBkZWZpbmVkIF9YT1BFTl9QQVRIX01BWAorIyBkZWZpbmUgT1BFTkFUX0JVRkZFUl9TSVpF IFNBRkVSX0FMTE9DQSAoX1hPUEVOX1BBVEhfTUFYKQorI2Vsc2UKKyMgZGVmaW5lIE9QRU5B VF9CVUZGRVJfU0laRSBTQUZFUl9BTExPQ0EgKDEwMjQpCisjZW5kaWYKKworY2hhciAqb3Bl bmF0X3Byb2NfbmFtZSAoY2hhciBidWZbT1BFTkFUX0JVRkZFUl9TSVpFXSwgaW50IGZkLCBj aGFyIGNvbnN0ICpmaWxlKTsKKworLyogVHJ5aW5nIHRvIGFjY2VzcyBhIEJVSUxEX1BST0Nf TkFNRSBmaWxlIHdpbGwgZmFpbCBvbiBzeXN0ZW1zIHdpdGhvdXQKKyAgIC9wcm9jIHN1cHBv cnQsIGFuZCBldmVuIG9uIHN5c3RlbXMgKndpdGgqIFByb2NGUyBzdXBwb3J0LiAgUmV0dXJu CisgICBub256ZXJvIGlmIHRoZSBmYWlsdXJlIG1heSBiZSBsZWdpdGltYXRlLCBlLmcuLCBi ZWNhdXNlIC9wcm9jIGlzIG5vdAorICAgcmVhZGFibGUsIG9yIHRoZSBwYXJ0aWN1bGFyIC4u Li9mZC9OIGRpcmVjdG9yeSBpcyBub3QgcHJlc2VudC4gICovCisjZGVmaW5lIEVYUEVDVEVE X0VSUk5PKEVycm5vKSAgICAgICAgICAgICAgICAgICBcCisgICgoRXJybm8pID09IEVOT1RE SVIgfHwgKEVycm5vKSA9PSBFTk9FTlQgICAgICBcCisgICB8fCAoRXJybm8pID09IEVQRVJN IHx8IChFcnJubykgPT0gRUFDQ0VTICAgICBcCisgICB8fCAoRXJybm8pID09IEVOT1NZUyAv KiBTb2xhcmlzIDggKi8gICAgICAgICBcCisgICB8fCAoRXJybm8pID09IEVPUE5PVFNVUFAg LyogRnJlZUJTRCAqLykKKworLyogV3JhcHBlciBmdW5jdGlvbiBzaGFyZWQgYW1vbmcgbGlu a2F0IGFuZCByZW5hbWVhdC4gICovCitpbnQgYXRfZnVuYzIgKGludCBmZDEsIGNoYXIgY29u c3QgKmZpbGUxLAorICAgICAgICAgICAgICBpbnQgZmQyLCBjaGFyIGNvbnN0ICpmaWxlMiwK KyAgICAgICAgICAgICAgaW50ICgqZnVuYykgKGNoYXIgY29uc3QgKmZpbGUxLCBjaGFyIGNv bnN0ICpmaWxlMikpOworCisjZW5kaWYgLyogX0dMX0hFQURFUl9PUEVOQVRfUFJJViAqLwoK PT09IGFkZGVkIGZpbGUgJ2xpYi9vcGVuYXQtcHJvYy5jJwotLS0gbGliL29wZW5hdC1wcm9j LmMJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgbGliL29wZW5hdC1wcm9jLmMJMjAx My0wMS0yNCAwNjo1MToyNSArMDAwMApAQCAtMCwwICsxLDExMCBAQAorLyogQ3JlYXRlIC9w cm9jL3NlbGYvZmQtcmVsYXRlZCBuYW1lcyBmb3Igc3ViZmlsZXMgb2Ygb3BlbiBkaXJlY3Rv cmllcy4KKworICAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5LTIwMTMgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFdyaXR0ZW4gYnkgUGF1bCBF Z2dlcnQuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlICJvcGVuYXQt cHJpdi5oIgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQu aD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRl IDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4K KworI2luY2x1ZGUgImludHByb3BzLmgiCisKKy8qIFRoZSByZXN1bHRzIG9mIG9wZW4oKSBp biB0aGlzIGZpbGUgYXJlIG5vdCB1c2VkIHdpdGggZmNoZGlyLAorICAgYW5kIHdlIGRvIG5v dCBsZWFrIGZkcyB0byBhbnkgc2luZ2xlLXRocmVhZGVkIGNvZGUgdGhhdCBjb3VsZCB1c2Ug c3RkaW8sCisgICB0aGVyZWZvcmUgc2F2ZSBzb21lIHVubmVjZXNzYXJ5IHdvcmsgaW4gZmNo ZGlyLmMuCisgICBGSVhNRSAtIGlmIHRoZSBrZXJuZWwgZXZlciBhZGRzIHN1cHBvcnQgZm9y IG11bHRpLXRocmVhZCBzYWZldHkgZm9yCisgICBhdm9pZGluZyBzdGFuZGFyZCBmZHMsIHRo ZW4gd2Ugc2hvdWxkIHVzZSBvcGVuX3NhZmVyLiAgKi8KKyN1bmRlZiBvcGVuCisjdW5kZWYg Y2xvc2UKKworI2RlZmluZSBQUk9DX1NFTEZfRkRfRk9STUFUICIvcHJvYy9zZWxmL2ZkLyVk LyVzIgorCisjZGVmaW5lIFBST0NfU0VMRl9GRF9OQU1FX1NJWkVfQk9VTkQobGVuKSBcCisg IChzaXplb2YgUFJPQ19TRUxGX0ZEX0ZPUk1BVCAtIHNpemVvZiAiJWQlcyIgXAorICAgKyBJ TlRfU1RSTEVOX0JPVU5EIChpbnQpICsgKGxlbikgKyAxKQorCisKKy8qIFNldCBCVUYgdG8g dGhlIGV4cGFuc2lvbiBvZiBQUk9DX1NFTEZfRkRfRk9STUFULCB1c2luZyBGRCBhbmQgRklM RQorICAgcmVzcGVjdGl2ZWx5IGZvciAlZCBhbmQgJXMuICBJZiBzdWNjZXNzZnVsLCByZXR1 cm4gQlVGIGlmIHRoZQorICAgcmVzdWx0IGZpdHMgaW4gQlVGLCBkeW5hbWljYWxseSBhbGxv Y2F0ZWQgbWVtb3J5IG90aGVyd2lzZS4gIEJ1dAorICAgcmV0dXJuIE5VTEwgaWYgL3Byb2Mg aXMgbm90IHJlbGlhYmxlLCBlaXRoZXIgYmVjYXVzZSB0aGUgb3BlcmF0aW5nCisgICBzeXN0 ZW0gc3VwcG9ydCBpcyBsYWNraW5nIG9yIGJlY2F1c2UgbWVtb3J5IGlzIGxvdy4gICovCitj aGFyICoKK29wZW5hdF9wcm9jX25hbWUgKGNoYXIgYnVmW09QRU5BVF9CVUZGRVJfU0laRV0s IGludCBmZCwgY2hhciBjb25zdCAqZmlsZSkKK3sKKyAgc3RhdGljIGludCBwcm9jX3N0YXR1 cyA9IDA7CisKKyAgLyogTWFrZSBzdXJlIHRoZSBjYWxsZXIgZ2V0cyBFTk9FTlQgd2hlbiBh cHByb3ByaWF0ZS4gICovCisgIGlmICghKmZpbGUpCisgICAgeworICAgICAgYnVmWzBdID0g J1wwJzsKKyAgICAgIHJldHVybiBidWY7CisgICAgfQorCisgIGlmICghIHByb2Nfc3RhdHVz KQorICAgIHsKKyAgICAgIC8qIFNldCBQUk9DX1NUQVRVUyB0byBhIHBvc2l0aXZlIHZhbHVl IGlmIC9wcm9jL3NlbGYvZmQgaXMKKyAgICAgICAgIHJlbGlhYmxlLCBhbmQgYSBuZWdhdGl2 ZSB2YWx1ZSBvdGhlcndpc2UuICBTb2xhcmlzIDEwCisgICAgICAgICAvcHJvYy9zZWxmL2Zk IG1pc2hhbmRsZXMgIi4uIiwgYW5kIGFueSBmaWxlIG5hbWUgbWlnaHQgZXhwYW5kCisgICAg ICAgICB0byAiLi4iIGFmdGVyIHN5bWJvbGljIGxpbmsgZXhwYW5zaW9uLCBzbyBhdm9pZCAv cHJvYy9zZWxmL2ZkCisgICAgICAgICBpZiBpdCBtaXNoYW5kbGVzICIuLiIuICBTb2xhcmlz IDEwIGhhcyBvcGVuYXQsIGJ1dCB0aGlzCisgICAgICAgICBwcm9ibGVtIGlzIGV4aGliaXRl ZCBvbiBjb2RlIHRoYXQgYnVpbHQgb24gU29sYXJpcyA4IGFuZAorICAgICAgICAgcnVubmlu ZyBvbiBTb2xhcmlzIDEwLiAgKi8KKworICAgICAgaW50IHByb2Nfc2VsZl9mZCA9IG9wZW4g KCIvcHJvYy9zZWxmL2ZkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPX1NF QVJDSCB8IE9fRElSRUNUT1JZIHwgT19OT0NUVFkgfCBPX05PTkJMT0NLKTsKKyAgICAgIGlm IChwcm9jX3NlbGZfZmQgPCAwKQorICAgICAgICBwcm9jX3N0YXR1cyA9IC0xOworICAgICAg ZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogRGV0ZWN0IHdoZXRoZXIgL3Byb2Mvc2Vs Zi9mZC8laS8uLi9mZCBleGlzdHMsIHdoZXJlICVpIGlzIHRoZQorICAgICAgICAgICAgIG51 bWJlciBvZiBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIG9uIC9wcm9jL3NlbGYvZmQuICBPbiBM aW51eCwKKyAgICAgICAgICAgICB0aGF0IG5hbWUgcmVzb2x2ZXMgdG8gL3Byb2Mvc2VsZi9m ZCwgd2hpY2ggd2FzIG9wZW5lZCBhYm92ZS4KKyAgICAgICAgICAgICBIb3dldmVyLCBvbiBT b2xhcmlzLCBpdCBtYXkgcmVzb2x2ZSB0byAvcHJvYy9zZWxmL2ZkL2ZkLCB3aGljaAorICAg ICAgICAgICAgIGNhbm5vdCBleGlzdCwgc2luY2UgYWxsIG5hbWVzIGluIC9wcm9jL3NlbGYv ZmQgYXJlIG51bWVyaWMuICAqLworICAgICAgICAgIGNoYXIgZG90ZG90X2J1ZltQUk9DX1NF TEZfRkRfTkFNRV9TSVpFX0JPVU5EIChzaXplb2YgIi4uL2ZkIiAtIDEpXTsKKyAgICAgICAg ICBzcHJpbnRmIChkb3Rkb3RfYnVmLCBQUk9DX1NFTEZfRkRfRk9STUFULCBwcm9jX3NlbGZf ZmQsICIuLi9mZCIpOworICAgICAgICAgIHByb2Nfc3RhdHVzID0gYWNjZXNzIChkb3Rkb3Rf YnVmLCBGX09LKSA/IC0xIDogMTsKKyAgICAgICAgICBjbG9zZSAocHJvY19zZWxmX2ZkKTsK KyAgICAgICAgfQorICAgIH0KKworICBpZiAocHJvY19zdGF0dXMgPCAwKQorICAgIHJldHVy biBOVUxMOworICBlbHNlCisgICAgeworICAgICAgc2l6ZV90IGJ1ZnNpemUgPSBQUk9DX1NF TEZfRkRfTkFNRV9TSVpFX0JPVU5EIChzdHJsZW4gKGZpbGUpKTsKKyAgICAgIGNoYXIgKnJl c3VsdCA9IGJ1ZjsKKyAgICAgIGlmIChPUEVOQVRfQlVGRkVSX1NJWkUgPCBidWZzaXplKQor ICAgICAgICB7CisgICAgICAgICAgcmVzdWx0ID0gbWFsbG9jIChidWZzaXplKTsKKyAgICAg ICAgICBpZiAoISByZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAg fQorICAgICAgc3ByaW50ZiAocmVzdWx0LCBQUk9DX1NFTEZfRkRfRk9STUFULCBmZCwgZmls ZSk7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30KCj09PSBhZGRlZCBmaWxlICds aWIvb3BlbmF0LmgnCi0tLSBsaWIvb3BlbmF0LmgJMTk3MC0wMS0wMSAwMDowMDowMCArMDAw MAorKysgbGliL29wZW5hdC5oCTIwMTMtMDEtMjQgMDY6NTE6MjUgKzAwMDAKQEAgLTAsMCAr MSwxMjAgQEAKKy8qIHByb3ZpZGUgYSByZXBsYWNlbWVudCBvcGVuYXQgZnVuY3Rpb24KKyAg IENvcHlyaWdodCAoQykgMjAwNC0yMDA2LCAyMDA4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIHdyaXR0ZW4gYnkgSmltIE1leWVyaW5n ICovCisKKyNpZm5kZWYgX0dMX0hFQURFUl9PUEVOQVQKKyNkZWZpbmUgX0dMX0hFQURFUl9P UEVOQVQKKworI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4K KyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUg PHN0ZGJvb2wuaD4KKworX0dMX0lOTElORV9IRUFERVJfQkVHSU4KKworI2lmICFIQVZFX09Q RU5BVAorCitpbnQgb3BlbmF0X3Blcm1pc3NpdmUgKGludCBmZCwgY2hhciBjb25zdCAqZmls ZSwgaW50IGZsYWdzLCBtb2RlX3QgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50 ICpjd2RfZXJybm8pOworYm9vbCBvcGVuYXRfbmVlZHNfZmNoZGlyICh2b2lkKTsKKworI2Vs c2UKKworIyBkZWZpbmUgb3BlbmF0X3Blcm1pc3NpdmUoRmQsIEZpbGUsIEZsYWdzLCBNb2Rl LCBDd2RfZXJybm8pIFwKKyAgICBvcGVuYXQgKEZkLCBGaWxlLCBGbGFncywgTW9kZSkKKyMg ZGVmaW5lIG9wZW5hdF9uZWVkc19mY2hkaXIoKSBmYWxzZQorCisjZW5kaWYKKworX05vcmV0 dXJuIHZvaWQgb3BlbmF0X3Jlc3RvcmVfZmFpbCAoaW50KTsKK19Ob3JldHVybiB2b2lkIG9w ZW5hdF9zYXZlX2ZhaWwgKGludCk7CisKKy8qIFVzaW5nIHRoZXNlIGZ1bmN0aW9uIG5hbWVz IG1ha2VzIGFwcGxpY2F0aW9uIGNvZGUKKyAgIHNsaWdodGx5IG1vcmUgcmVhZGFibGUgdGhh biBpdCB3b3VsZCBiZSB3aXRoCisgICBmY2hvd25hdCAoLi4uLCAwKSBvciBmY2hvd25hdCAo Li4uLCBBVF9TWU1MSU5LX05PRk9MTE9XKS4gICovCisKKyNpZiBHTlVMSUJfRkNIT1dOQVQK KworIyBpZm5kZWYgRkNIT1dOQVRfSU5MSU5FCisjICBkZWZpbmUgRkNIT1dOQVRfSU5MSU5F IF9HTF9JTkxJTkUKKyMgZW5kaWYKKworRkNIT1dOQVRfSU5MSU5FIGludAorY2hvd25hdCAo aW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCB1aWRfdCBvd25lciwgZ2lkX3QgZ3JvdXApCit7 CisgIHJldHVybiBmY2hvd25hdCAoZmQsIGZpbGUsIG93bmVyLCBncm91cCwgMCk7Cit9CisK K0ZDSE9XTkFUX0lOTElORSBpbnQKK2xjaG93bmF0IChpbnQgZmQsIGNoYXIgY29uc3QgKmZp bGUsIHVpZF90IG93bmVyLCBnaWRfdCBncm91cCkKK3sKKyAgcmV0dXJuIGZjaG93bmF0IChm ZCwgZmlsZSwgb3duZXIsIGdyb3VwLCBBVF9TWU1MSU5LX05PRk9MTE9XKTsKK30KKworI2Vu ZGlmCisKKyNpZiBHTlVMSUJfRkNITU9EQVQKKworIyBpZm5kZWYgRkNITU9EQVRfSU5MSU5F CisjICBkZWZpbmUgRkNITU9EQVRfSU5MSU5FIF9HTF9JTkxJTkUKKyMgZW5kaWYKKworRkNI TU9EQVRfSU5MSU5FIGludAorY2htb2RhdCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBt b2RlX3QgbW9kZSkKK3sKKyAgcmV0dXJuIGZjaG1vZGF0IChmZCwgZmlsZSwgbW9kZSwgMCk7 Cit9CisKK0ZDSE1PREFUX0lOTElORSBpbnQKK2xjaG1vZGF0IChpbnQgZmQsIGNoYXIgY29u c3QgKmZpbGUsIG1vZGVfdCBtb2RlKQoreworICByZXR1cm4gZmNobW9kYXQgKGZkLCBmaWxl LCBtb2RlLCBBVF9TWU1MSU5LX05PRk9MTE9XKTsKK30KKworI2VuZGlmCisKKyNpZiBHTlVM SUJfU1RBVEFUCisKKyMgaWZuZGVmIFNUQVRBVF9JTkxJTkUKKyMgIGRlZmluZSBTVEFUQVRf SU5MSU5FIF9HTF9JTkxJTkUKKyMgZW5kaWYKKworU1RBVEFUX0lOTElORSBpbnQKK3N0YXRh dCAoaW50IGZkLCBjaGFyIGNvbnN0ICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisgIHJl dHVybiBmc3RhdGF0IChmZCwgbmFtZSwgc3QsIDApOworfQorCitTVEFUQVRfSU5MSU5FIGlu dAorbHN0YXRhdCAoaW50IGZkLCBjaGFyIGNvbnN0ICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3Qp Cit7CisgIHJldHVybiBmc3RhdGF0IChmZCwgbmFtZSwgc3QsIEFUX1NZTUxJTktfTk9GT0xM T1cpOworfQorCisjZW5kaWYKKworLyogRm9yIG5vdywgdGhlcmUgYXJlIG5vIHdyYXBwZXJz IG5hbWVkIGxhY2Nlc3NhdCBvciBsZXVpZGFjY2Vzc2F0LAorICAgc2luY2UgZ251bGliIGRv ZXNuJ3Qgc3VwcG9ydCBmYWNjZXNzYXQoLEFUX1NZTUxJTktfTk9GT0xMT1cpIGFuZAorICAg c2luY2UgYWNjZXNzIHJpZ2h0cyBvbiBzeW1saW5rcyBhcmUgb2YgbGltaXRlZCB1dGlsaXR5 LiAgTGlrZXdpc2UsCisgICB3cmFwcGVycyBhcmUgbm90IHByb3ZpZGVkIGZvciBhY2Nlc3Nh dCBvciBldWlkYWNjZXNzYXQsIHNvIGFzIHRvCisgICBhdm9pZCBkcmFnZ2luZyBpbiAtbGdl biBvbiBzb21lIHBsYXRmb3Jtcy4gICovCisKK19HTF9JTkxJTkVfSEVBREVSX0VORAorCisj ZW5kaWYgLyogX0dMX0hFQURFUl9PUEVOQVQgKi8KCj09PSBhZGRlZCBmaWxlICdsaWIvcmVh ZGxpbmthdC5jJwotLS0gbGliL3JlYWRsaW5rYXQuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICsw MDAwCisrKyBsaWIvcmVhZGxpbmthdC5jCTIwMTMtMDEtMjQgMDg6MDI6MTYgKzAwMDAKQEAg LTAsMCArMSw0NyBAQAorLyogUmVhZCBhIHN5bWxpbmsgcmVsYXRpdmUgdG8gYW4gb3BlbiBk aXJlY3RvcnkuCisgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogd3JpdHRlbiBieSBFcmljIEJsYWtl ICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisv KiBHbnVsaWIgcHJvdmlkZXMgYSByZWFkbGluayBzdHViIGZvciBtaW5ndzsgdXNlIGl0IGZv ciBkaXN0aW5jdGlvbgorICAgYmV0d2VlbiBFSU5WQUwgYW5kIEVOT0VOVCwgcmF0aGVyIHRo YW4gYWx3YXlzIGZhaWxpbmcgd2l0aCBFTk9TWVMuICAqLworCisvKiBQT1NJWCAyMDA4IHNh eXMgdGhhdCB1bmxpa2UgcmVhZGxpbmssIHJlYWRsaW5rYXQgcmV0dXJucyAwIGZvcgorICAg c3VjY2VzcyBpbnN0ZWFkIG9mIHRoZSBidWZmZXIgbGVuZ3RoLiAgQnV0IHRoaXMgd291bGQg cmVuZGVyCisgICByZWFkbGlua2F0IHdvcnRobGVzcyBzaW5jZSByZWFkbGluayBkb2VzIG5v dCBndWFyYW50ZWUgYQorICAgTlVMLXRlcm1pbmF0ZWQgYnVmZmVyLiAgQXNzdW1lIHRoaXMg d2FzIGEgYnVnIGluIFBPU0lYLiAgKi8KKworLyogUmVhZCB0aGUgY29udGVudHMgb2Ygc3lt bGluayBGSUxFIGludG8gYnVmZmVyIEJVRiBvZiBzaXplIExFTiwgaW4gdGhlCisgICBkaXJl Y3Rvcnkgb3BlbiBvbiBkZXNjcmlwdG9yIEZELiAgSWYgcG9zc2libGUsIGRvIGl0IHdpdGhv dXQgY2hhbmdpbmcKKyAgIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4gIE90aGVyd2lzZSwgcmVz b3J0IHRvIHVzaW5nIHNhdmVfY3dkL2ZjaGRpciwKKyAgIHRoZW4gcmVhZGxpbmsvcmVzdG9y ZV9jd2QuICBJZiBlaXRoZXIgdGhlIHNhdmVfY3dkIG9yIHRoZSByZXN0b3JlX2N3ZAorICAg ZmFpbHMsIHRoZW4gZ2l2ZSBhIGRpYWdub3N0aWMgYW5kIGV4aXQgbm9uemVyby4gICovCisK KyNkZWZpbmUgQVRfRlVOQ19OQU1FIHJlYWRsaW5rYXQKKyNkZWZpbmUgQVRfRlVOQ19GMSBy ZWFkbGluaworI2RlZmluZSBBVF9GVU5DX1BPU1RfRklMRV9QQVJBTV9ERUNMUyAsIGNoYXIg KmJ1Ziwgc2l6ZV90IGxlbgorI2RlZmluZSBBVF9GVU5DX1BPU1RfRklMRV9BUkdTICAgICAg ICAsIGJ1ZiwgbGVuCisjZGVmaW5lIEFUX0ZVTkNfUkVTVUxUIHNzaXplX3QKKyNpbmNsdWRl ICJhdC1mdW5jLmMiCisjdW5kZWYgQVRfRlVOQ19OQU1FCisjdW5kZWYgQVRfRlVOQ19GMQor I3VuZGVmIEFUX0ZVTkNfUE9TVF9GSUxFX1BBUkFNX0RFQ0xTCisjdW5kZWYgQVRfRlVOQ19Q T1NUX0ZJTEVfQVJHUworI3VuZGVmIEFUX0ZVTkNfUkVTVUxUCgo9PT0gYWRkZWQgZmlsZSAn bGliL3NhdmUtY3dkLmMnCi0tLSBsaWIvc2F2ZS1jd2QuYwkxOTcwLTAxLTAxIDAwOjAwOjAw ICswMDAwCisrKyBsaWIvc2F2ZS1jd2QuYwkyMDEzLTAxLTI0IDA2OjUxOjI1ICswMDAwCkBA IC0wLDAgKzEsMyBAQAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2RlZmluZSBTQVZFX0NXRF9J TkxJTkUgX0dMX0VYVEVSTl9JTkxJTkUKKyNpbmNsdWRlICJzYXZlLWN3ZC5oIgoKPT09IGFk ZGVkIGZpbGUgJ2xpYi9zYXZlLWN3ZC5oJwotLS0gbGliL3NhdmUtY3dkLmgJMTk3MC0wMS0w MSAwMDowMDowMCArMDAwMAorKysgbGliL3NhdmUtY3dkLmgJMjAxMy0wMS0yNCAwNjo1MToy NSArMDAwMApAQCAtMCwwICsxLDQ2IEBACisvKiBEbyBub3Qgc2F2ZSBhbmQgcmVzdG9yZSB0 aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKworICAgQ29weXJpZ2h0IDIwMTMgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK KyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwg c2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIEdudWxpYiBu ZWVkcyB0byBzYXZlIGFuZCByZXN0b3JlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5 IHRvCisgICBmdWxseSBlbXVsYXRlIGZ1bmN0aW9ucyBsaWtlIGZzdGF0YXQuICBCdXQgRW1h Y3MgZG9lc24ndCBjYXJlIHdoYXQKKyAgIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5 IGlzOyBpdCBhbHdheXMgdXNlcyBhYnNvbHV0ZSBmaWxlCisgICBuYW1lcy4gIFRoaXMgbW9k dWxlIHJlcGxhY2VzIHRoZSBHbnVsaWIgbW9kdWxlIGJ5IG9taXR0aW5nIHRoZSBjb2RlCisg ICB0aGF0IEVtYWNzIGRvZXMgbm90IG5lZWQuICAqLworCisjaWZuZGVmIFNBVkVfQ1dEX0gK KyNkZWZpbmUgU0FWRV9DV0RfSCAxCisKK19HTF9JTkxJTkVfSEVBREVSX0JFR0lOCisjaWZu ZGVmIFNBVkVfQ1dEX0lOTElORQorIyBkZWZpbmUgU0FWRV9DV0RfSU5MSU5FIF9HTF9JTkxJ TkUKKyNlbmRpZgorCitzdHJ1Y3Qgc2F2ZWRfY3dkIHsgaW50IGRlc2M7IH07CisKK1NBVkVf Q1dEX0lOTElORSBpbnQKK3NhdmVfY3dkIChzdHJ1Y3Qgc2F2ZWRfY3dkICpjd2QpCit7Cisg IGN3ZC0+ZGVzYyA9IC0xOworICByZXR1cm4gMDsKK30KKworU0FWRV9DV0RfSU5MSU5FIGlu dCByZXN0b3JlX2N3ZCAoc3RydWN0IHNhdmVkX2N3ZCBjb25zdCAqY3dkKSB7IHJldHVybiAw OyB9CitTQVZFX0NXRF9JTkxJTkUgdm9pZCBmcmVlX2N3ZCAoc3RydWN0IHNhdmVkX2N3ZCAq Y3dkKSB7IH0KKworX0dMX0lOTElORV9IRUFERVJfRU5ECisKKyNlbmRpZgoKPT09IGFkZGVk IGZpbGUgJ200L2RpcmVudF9oLm00JwotLS0gbTQvZGlyZW50X2gubTQJMTk3MC0wMS0wMSAw MDowMDowMCArMDAwMAorKysgbTQvZGlyZW50X2gubTQJMjAxMy0wMS0yNCAwNjo1MToyNSAr MDAwMApAQCAtMCwwICsxLDY0IEBACisjIGRpcmVudF9oLm00IHNlcmlhbCAxNgorZG5sIENv cHlyaWdodCAoQykgMjAwOC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor ZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3Ig ZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMg bG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBXcml0dGVuIGJ5IEJy dW5vIEhhaWJsZS4KKworQUNfREVGVU4oW2dsX0RJUkVOVF9IXSwKK1sKKyAgZG5sIFVzZSBB Q19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYmVsb3cgaXMg ZXhwYW5kZWQKKyAgZG5sIG9uY2Ugb25seSwgYmVmb3JlIGFsbCBzdGF0ZW1lbnRzIHRoYXQg b2NjdXIgaW4gb3RoZXIgbWFjcm9zLgorICBBQ19SRVFVSVJFKFtnbF9ESVJFTlRfSF9ERUZB VUxUU10pCisKKyAgZG5sIDxkaXJlbnQuaD4gaXMgYWx3YXlzIG92ZXJyaWRkZW4sIGJlY2F1 c2Ugb2YgR05VTElCX1BPU0lYQ0hFQ0suCisgIGdsX0NIRUNLX05FWFRfSEVBREVSUyhbZGly ZW50LmhdKQorICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfZGlyZW50X2ggPSB5ZXM7IHRoZW4K KyAgICBIQVZFX0RJUkVOVF9IPTEKKyAgZWxzZQorICAgIEhBVkVfRElSRU5UX0g9MAorICBm aQorICBBQ19TVUJTVChbSEFWRV9ESVJFTlRfSF0pCisKKyAgZG5sIENoZWNrIGZvciBkZWNs YXJhdGlvbnMgb2YgYW55dGhpbmcgd2Ugd2FudCB0byBwb2lzb24gaWYgdGhlCisgIGRubCBj b3JyZXNwb25kaW5nIGdudWxpYiBtb2R1bGUgaXMgbm90IGluIHVzZS4KKyAgZ2xfV0FSTl9P Tl9VU0VfUFJFUEFSRShbWyNpbmNsdWRlIDxkaXJlbnQuaD4KKyAgICBdXSwgW2FscGhhc29y dCBjbG9zZWRpciBkaXJmZCBmZG9wZW5kaXIgb3BlbmRpciByZWFkZGlyIHJld2luZGRpciBz Y2FuZGlyXSkKK10pCisKK0FDX0RFRlVOKFtnbF9ESVJFTlRfTU9EVUxFX0lORElDQVRPUl0s CitbCisgIGRubCBVc2UgQUNfUkVRVUlSRSBoZXJlLCBzbyB0aGF0IHRoZSBkZWZhdWx0IHNl dHRpbmdzIGFyZSBleHBhbmRlZCBvbmNlIG9ubHkuCisgIEFDX1JFUVVJUkUoW2dsX0RJUkVO VF9IX0RFRkFVTFRTXSkKKyAgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEUoWyQx XSkKKyAgZG5sIERlZmluZSBpdCBhbHNvIGFzIGEgQyBtYWNybywgZm9yIHRoZSBiZW5lZml0 IG9mIHRoZSB1bml0IHRlc3RzLgorICBnbF9NT0RVTEVfSU5ESUNBVE9SX0ZPUl9URVNUUyhb JDFdKQorXSkKKworQUNfREVGVU4oW2dsX0RJUkVOVF9IX0RFRkFVTFRTXSwKK1sKKyAgQUNf UkVRVUlSRShbZ2xfVU5JU1REX0hfREVGQVVMVFNdKSBkbmwgZm9yIFJFUExBQ0VfRkNIRElS CisgIEdOVUxJQl9PUEVORElSPTA7ICAgICBBQ19TVUJTVChbR05VTElCX09QRU5ESVJdKQor ICBHTlVMSUJfUkVBRERJUj0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9SRUFERElSXSkKKyAg R05VTElCX1JFV0lORERJUj0wOyAgIEFDX1NVQlNUKFtHTlVMSUJfUkVXSU5ERElSXSkKKyAg R05VTElCX0NMT1NFRElSPTA7ICAgIEFDX1NVQlNUKFtHTlVMSUJfQ0xPU0VESVJdKQorICBH TlVMSUJfRElSRkQ9MDsgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9ESVJGRF0pCisgIEdOVUxJ Ql9GRE9QRU5ESVI9MDsgICBBQ19TVUJTVChbR05VTElCX0ZET1BFTkRJUl0pCisgIEdOVUxJ Ql9TQ0FORElSPTA7ICAgICBBQ19TVUJTVChbR05VTElCX1NDQU5ESVJdKQorICBHTlVMSUJf QUxQSEFTT1JUPTA7ICAgQUNfU1VCU1QoW0dOVUxJQl9BTFBIQVNPUlRdKQorICBkbmwgQXNz dW1lIHByb3BlciBHTlUgYmVoYXZpb3IgdW5sZXNzIGFub3RoZXIgbW9kdWxlIHNheXMgb3Ro ZXJ3aXNlLgorICBIQVZFX09QRU5ESVI9MTsgICAgICAgQUNfU1VCU1QoW0hBVkVfT1BFTkRJ Ul0pCisgIEhBVkVfUkVBRERJUj0xOyAgICAgICBBQ19TVUJTVChbSEFWRV9SRUFERElSXSkK KyAgSEFWRV9SRVdJTkRESVI9MTsgICAgIEFDX1NVQlNUKFtIQVZFX1JFV0lORERJUl0pCisg IEhBVkVfQ0xPU0VESVI9MTsgICAgICBBQ19TVUJTVChbSEFWRV9DTE9TRURJUl0pCisgIEhB VkVfREVDTF9ESVJGRD0xOyAgICBBQ19TVUJTVChbSEFWRV9ERUNMX0RJUkZEXSkKKyAgSEFW RV9ERUNMX0ZET1BFTkRJUj0xO0FDX1NVQlNUKFtIQVZFX0RFQ0xfRkRPUEVORElSXSkKKyAg SEFWRV9GRE9QRU5ESVI9MTsgICAgIEFDX1NVQlNUKFtIQVZFX0ZET1BFTkRJUl0pCisgIEhB VkVfU0NBTkRJUj0xOyAgICAgICBBQ19TVUJTVChbSEFWRV9TQ0FORElSXSkKKyAgSEFWRV9B TFBIQVNPUlQ9MTsgICAgIEFDX1NVQlNUKFtIQVZFX0FMUEhBU09SVF0pCisgIFJFUExBQ0Vf T1BFTkRJUj0wOyAgICBBQ19TVUJTVChbUkVQTEFDRV9PUEVORElSXSkKKyAgUkVQTEFDRV9D TE9TRURJUj0wOyAgIEFDX1NVQlNUKFtSRVBMQUNFX0NMT1NFRElSXSkKKyAgUkVQTEFDRV9E SVJGRD0wOyAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0RJUkZEXSkKKyAgUkVQTEFDRV9GRE9Q RU5ESVI9MDsgIEFDX1NVQlNUKFtSRVBMQUNFX0ZET1BFTkRJUl0pCitdKQoKPT09IGFkZGVk IGZpbGUgJ200L2Zkb3BlbmRpci5tNCcKLS0tIG00L2Zkb3BlbmRpci5tNAkxOTcwLTAxLTAx IDAwOjAwOjAwICswMDAwCisrKyBtNC9mZG9wZW5kaXIubTQJMjAxMy0wMS0yNCAwNjo1MToy NSArMDAwMApAQCAtMCwwICsxLDYxIEBACisjIHNlcmlhbCAxMAorIyBTZWUgaWYgd2UgbmVl ZCB0byBwcm92aWRlIGZkb3BlbmRpci4KKworZG5sIENvcHlyaWdodCAoQykgMjAwOS0yMDEz IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVl IHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5s aW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3 aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBp cyBwcmVzZXJ2ZWQuCisKKyMgV3JpdHRlbiBieSBFcmljIEJsYWtlLgorCitBQ19ERUZVTihb Z2xfRlVOQ19GRE9QRU5ESVJdLAorWworICBBQ19SRVFVSVJFKFtnbF9ESVJFTlRfSF9ERUZB VUxUU10pCisgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgZG5sIGZvciBjcm9z cy1jb21waWxlcworCisgIEFDX1JFUVVJUkUoW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10p CisKKyAgZG5sIEZyZWVCU0QgNy4zIGhhcyB0aGUgZnVuY3Rpb24sIGJ1dCBmYWlsZWQgdG8g ZGVjbGFyZSBpdC4KKyAgQUNfQ0hFQ0tfREVDTFMoW2Zkb3BlbmRpcl0sIFtdLCBbSEFWRV9E RUNMX0ZET1BFTkRJUj0wXSwgW1sKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyAgICBdXSkKKyAg QUNfQ0hFQ0tfRlVOQ1NfT05DRShbZmRvcGVuZGlyXSkKKyAgaWYgdGVzdCAkYWNfY3ZfZnVu Y19mZG9wZW5kaXIgPSBubzsgdGhlbgorICAgIEhBVkVfRkRPUEVORElSPTAKKyAgZWxzZQor ICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGZkb3BlbmRpciB3b3Jrc10sCisgICAgICBb Z2xfY3ZfZnVuY19mZG9wZW5kaXJfd29ya3NdLAorICAgICAgW0FDX1JVTl9JRkVMU0UoW0FD X0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGZjbnRs Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaWYgIUhBVkVfREVDTF9GRE9QRU5ESVIKK2V4 dGVybgorIyBpZmRlZiBfX2NwbHVzcGx1cworIkMiCisjIGVuZGlmCitESVIgKmZkb3BlbmRp ciAoaW50KTsKKyNlbmRpZgorXV0sIFtpbnQgcmVzdWx0ID0gMDsKKyAgICAgaW50IGZkID0g b3BlbiAoImNvbmZ0ZXN0LmMiLCBPX1JET05MWSk7CisgICAgIGlmIChmZCA8IDApIHJlc3Vs dCB8PSAxOworICAgICBpZiAoZmRvcGVuZGlyIChmZCkpIHJlc3VsdCB8PSAyOworICAgICBp ZiAoY2xvc2UgKGZkKSkgcmVzdWx0IHw9IDQ7CisgICAgIHJldHVybiByZXN1bHQ7XSldLAor ICAgICAgICAgW2dsX2N2X2Z1bmNfZmRvcGVuZGlyX3dvcmtzPXllc10sCisgICAgICAgICBb Z2xfY3ZfZnVuY19mZG9wZW5kaXJfd29ya3M9bm9dLAorICAgICAgICAgW2Nhc2UgIiRob3N0 X29zIiBpbgorICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBnbGliYyBzeXN0 ZW1zLgorICAgICAgICAgICAgKi1nbnUqKSBnbF9jdl9mdW5jX2Zkb3BlbmRpcl93b3Jrcz0i Z3Vlc3NpbmcgeWVzIiA7OworICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtu b3csIGFzc3VtZSB0aGUgd29yc3QuCisgICAgICAgICAgICAqKSAgICAgIGdsX2N2X2Z1bmNf ZmRvcGVuZGlyX3dvcmtzPSJndWVzc2luZyBubyIgOzsKKyAgICAgICAgICBlc2FjCisgICAg ICAgICBdKV0pCisgICAgY2FzZSAiJGdsX2N2X2Z1bmNfZmRvcGVuZGlyX3dvcmtzIiBpbgor ICAgICAgKnllcykgOzsKKyAgICAgICopCisgICAgICAgIFJFUExBQ0VfRkRPUEVORElSPTEK KyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCitdKQoKPT09IGFkZGVkIGZpbGUgJ200L2Zz dGF0YXQubTQnCi0tLSBtNC9mc3RhdGF0Lm00CTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAK KysrIG00L2ZzdGF0YXQubTQJMjAxMy0wMS0yNCAwNjo1MToyNSArMDAwMApAQCAtMCwwICsx LDYwIEBACisjIGZzdGF0YXQubTQgc2VyaWFsIDMKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDQt MjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMg ZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVz IHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitk bmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3Rp Y2UgaXMgcHJlc2VydmVkLgorCisjIFdyaXR0ZW4gYnkgSmltIE1leWVyaW5nLgorCisjIElm IHdlIGhhdmUgdGhlIGZzdGF0YXQgZnVuY3Rpb24sIGFuZCBpdCBoYXMgdGhlIGJ1ZyAoaW4g QUlYIDcuMSkKKyMgdGhhdCBpdCBkb2VzIG5vdCBmaWxsIGluIHN0X3NpemUgY29ycmVjdGx5 LCB1c2UgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uLgorQUNfREVGVU4oW2dsX0ZVTkNfRlNU QVRBVF0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1NZU19TVEFUX0hfREVGQVVMVFNdKQorICBB Q19SRVFVSVJFKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorICBBQ19SRVFVSVJFKFtn bF9GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LXSkKKyAgQUNfUkVRVUlSRShb QUNfQ0FOT05JQ0FMX0hPU1RdKSBkbmwgZm9yIGNyb3NzLWNvbXBpbGVzCisgIEFDX0NIRUNL X0ZVTkNTX09OQ0UoW2ZzdGF0YXRdKQorCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfZnN0YXRh dCA9IG5vOyB0aGVuCisgICAgSEFWRV9GU1RBVEFUPTAKKyAgZWxzZQorICAgIGRubCBUZXN0 IGZvciBhbiBBSVggNy4xIGJ1Zzsgc2VlCisgICAgZG5sIDxodHRwOi8vbGlzdHMuZ251Lm9y Zy9hcmNoaXZlL2h0bWwvYnVnLXRhci8yMDExLTA5L21zZzAwMDE1Lmh0bWw+LgorICAgIEFD X0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGZzdGF0YXQgKC4uLiwgMCkgd29ya3NdLAorICAgICAg W2dsX2N2X2Z1bmNfZnN0YXRhdF96ZXJvX2ZsYWddLAorICAgICAgW0FDX1JVTl9JRkVMU0Uo CisgICAgICAgICBbQUNfTEFOR19TT1VSQ0UoCisgICAgICAgICAgICBbWworICAgICAgICAg ICAgICAjaW5jbHVkZSA8ZmNudGwuaD4KKyAgICAgICAgICAgICAgI2luY2x1ZGUgPHN5cy9z dGF0Lmg+CisgICAgICAgICAgICAgIGludAorICAgICAgICAgICAgICBtYWluICh2b2lkKQor ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgYTsKKyAgICAg ICAgICAgICAgICByZXR1cm4gZnN0YXRhdCAoQVRfRkRDV0QsICIuIiwgJmEsIDApICE9IDA7 CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF1dKV0sCisgICAgICAgICBbZ2xfY3Zf ZnVuY19mc3RhdGF0X3plcm9fZmxhZz15ZXNdLAorICAgICAgICAgW2dsX2N2X2Z1bmNfZnN0 YXRhdF96ZXJvX2ZsYWc9bm9dLAorICAgICAgICAgW2Nhc2UgIiRob3N0X29zIiBpbgorICAg ICAgICAgICAgYWl4KikgZ2xfY3ZfZnVuY19mc3RhdGF0X3plcm9fZmxhZz0iZ3Vlc3Npbmcg bm8iOzsKKyAgICAgICAgICAgICopICAgIGdsX2N2X2Z1bmNfZnN0YXRhdF96ZXJvX2ZsYWc9 Imd1ZXNzaW5nIHllcyI7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgIF0pCisgICAgICBd KQorCisgICAgY2FzZSAkZ2xfY3ZfZnVuY19mc3RhdGF0X3plcm9fZmxhZyskZ2xfY3ZfZnVu Y19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rIGluCisgICAgKnllcysqeWVz KSA7OworICAgICopIFJFUExBQ0VfRlNUQVRBVD0xCisgICAgICAgY2FzZSAkZ2xfY3ZfZnVu Y19mc3RhdGF0X3plcm9fZmxhZyBpbgorICAgICAgICp5ZXMpCisgICAgICAgICBBQ19ERUZJ TkUoW0hBVkVfV09SS0lOR19GU1RBVEFUX1pFUk9fRkxBR10sIFsxXSwKKyAgICAgICAgICAg W0RlZmluZSB0byAxIGlmIGZzdGF0YXQgKC4uLiwgMCkgd29ya3MuCisgICAgICAgICAgICBG b3IgZXhhbXBsZSwgaXQgZG9lcyBub3Qgd29yayBpbiBBSVggNy4xLl0pCisgICAgICAgICA7 OworICAgICAgIGVzYWMKKyAgICAgICA7OworICAgIGVzYWMKKyAgZmkKK10pCgo9PT0gbW9k aWZpZWQgZmlsZSAnbTQvZ251bGliLWNvbXAubTQnCi0tLSBtNC9nbnVsaWItY29tcC5tNAky MDEzLTAxLTA0IDAyOjE3OjQ5ICswMDAwCisrKyBtNC9nbnVsaWItY29tcC5tNAkyMDEzLTAx LTI0IDA4OjAyOjE2ICswMDAwCkBAIC00MCw2ICs0MCw3IEBACiAgIEFDX1JFUVVJUkUoW2ds X1BST0dfQVJfUkFOTElCXSkKICAgIyBDb2RlIGZyb20gbW9kdWxlIGFsbG9jYS1vcHQ6CiAg ICMgQ29kZSBmcm9tIG1vZHVsZSBhbGxvY2F0b3I6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBh dC1pbnRlcm5hbDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIGMtY3R5cGU6CiAgICMgQ29kZSBm cm9tIG1vZHVsZSBjLXN0cmNhc2U6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBjYXJlYWRsaW5r YXQ6CkBAIC00OSw2ICs1MCw3IEBACiAgICMgQ29kZSBmcm9tIG1vZHVsZSBjcnlwdG8vc2hh MToKICAgIyBDb2RlIGZyb20gbW9kdWxlIGNyeXB0by9zaGEyNTY6CiAgICMgQ29kZSBmcm9t IG1vZHVsZSBjcnlwdG8vc2hhNTEyOgorICAjIENvZGUgZnJvbSBtb2R1bGUgZGlyZW50Ogog ICAjIENvZGUgZnJvbSBtb2R1bGUgZG9zbmFtZToKICAgIyBDb2RlIGZyb20gbW9kdWxlIGR0 b2FzdHI6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBkdG90aW1lc3BlYzoKQEAgLTYxLDggKzYz LDEwIEBACiAgICMgQ29kZSBmcm9tIG1vZHVsZSBleHRlcm4taW5saW5lOgogICAjIENvZGUg ZnJvbSBtb2R1bGUgZmFjY2Vzc2F0OgogICAjIENvZGUgZnJvbSBtb2R1bGUgZmNudGwtaDoK KyAgIyBDb2RlIGZyb20gbW9kdWxlIGZkb3BlbmRpcjoKICAgIyBDb2RlIGZyb20gbW9kdWxl IGZpbGVtb2RlOgogICAjIENvZGUgZnJvbSBtb2R1bGUgZnBlbmRpbmc6CisgICMgQ29kZSBm cm9tIG1vZHVsZSBmc3RhdGF0OgogICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0Z3JvdXBzOgog ICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0bG9hZGF2ZzoKICAgIyBDb2RlIGZyb20gbW9kdWxl IGdldG9wdC1nbnU6CkBAIC04MiwxMSArODYsMTMgQEAKICAgIyBDb2RlIGZyb20gbW9kdWxl IG1rdGltZToKICAgIyBDb2RlIGZyb20gbW9kdWxlIG11bHRpYXJjaDoKICAgIyBDb2RlIGZy b20gbW9kdWxlIG5vY3Jhc2g6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBvcGVuYXQtaDoKICAg IyBDb2RlIGZyb20gbW9kdWxlIHBhdGhtYXg6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBwc2Vs ZWN0OgogICAjIENvZGUgZnJvbSBtb2R1bGUgcHRocmVhZF9zaWdtYXNrOgogICAjIENvZGUg ZnJvbSBtb2R1bGUgcHV0ZW52OgogICAjIENvZGUgZnJvbSBtb2R1bGUgcmVhZGxpbms6Cisg ICMgQ29kZSBmcm9tIG1vZHVsZSByZWFkbGlua2F0OgogICAjIENvZGUgZnJvbSBtb2R1bGUg cm9vdC11aWQ6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBzaWcyc3RyOgogICAjIENvZGUgZnJv bSBtb2R1bGUgc2lnbmFsLWg6CkBAIC0xNTksNiArMTY1LDcgQEAKICAgZ2xfU0hBMQogICBn bF9TSEEyNTYKICAgZ2xfU0hBNTEyCisgIGdsX0RJUkVOVF9ICiAgIEFDX1JFUVVJUkUoW2ds X0M5OV9TVFJUT0xEXSkKICAgZ2xfRlVOQ19EVVAyCiAgIGlmIHRlc3QgJEhBVkVfRFVQMiA9 IDAgfHwgdGVzdCAkUkVQTEFDRV9EVVAyID0gMTsgdGhlbgpAQCAtMTc4LDEyICsxODUsMjMg QEAKICAgZ2xfTU9EVUxFX0lORElDQVRPUihbZmFjY2Vzc2F0XSkKICAgZ2xfVU5JU1REX01P RFVMRV9JTkRJQ0FUT1IoW2ZhY2Nlc3NhdF0pCiAgIGdsX0ZDTlRMX0gKKyAgZ2xfRlVOQ19G RE9QRU5ESVIKKyAgaWYgdGVzdCAkSEFWRV9GRE9QRU5ESVIgPSAwIHx8IHRlc3QgJFJFUExB Q0VfRkRPUEVORElSID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbZmRvcGVuZGlyXSkKKyAg ZmkKKyAgZ2xfRElSRU5UX01PRFVMRV9JTkRJQ0FUT1IoW2Zkb3BlbmRpcl0pCisgIGdsX01P RFVMRV9JTkRJQ0FUT1IoW2Zkb3BlbmRpcl0pCiAgIGdsX0ZJTEVNT0RFCiAgIGdsX0ZVTkNf RlBFTkRJTkcKICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19fX2ZwZW5kaW5nID0gbm87IHRoZW4K ICAgICBBQ19MSUJPQkooW2ZwZW5kaW5nXSkKICAgICBnbF9QUkVSRVFfRlBFTkRJTkcKICAg ZmkKKyAgZ2xfRlVOQ19GU1RBVEFUCisgIGlmIHRlc3QgJEhBVkVfRlNUQVRBVCA9IDAgfHwg dGVzdCAkUkVQTEFDRV9GU1RBVEFUID0gMTsgdGhlbgorICAgIEFDX0xJQk9CSihbZnN0YXRh dF0pCisgIGZpCisgIGdsX1NZU19TVEFUX01PRFVMRV9JTkRJQ0FUT1IoW2ZzdGF0YXRdKQog ICBnbF9HRVRMT0FEQVZHCiAgIGlmIHRlc3QgJEhBVkVfR0VUTE9BREFWRyA9IDA7IHRoZW4K ICAgICBBQ19MSUJPQkooW2dldGxvYWRhdmddKQpAQCAtMjUzLDYgKzI3MSwxMSBAQAogICAg IGdsX1BSRVJFUV9SRUFETElOSwogICBmaQogICBnbF9VTklTVERfTU9EVUxFX0lORElDQVRP UihbcmVhZGxpbmtdKQorICBnbF9GVU5DX1JFQURMSU5LQVQKKyAgaWYgdGVzdCAkSEFWRV9S RUFETElOS0FUID0gMDsgdGhlbgorICAgIEFDX0xJQk9CSihbcmVhZGxpbmthdF0pCisgIGZp CisgIGdsX1VOSVNURF9NT0RVTEVfSU5ESUNBVE9SKFtyZWFkbGlua2F0XSkKICAgZ2xfRlVO Q19TSUcyU1RSCiAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc2lnMnN0ciA9IG5vOyB0aGVuCiAg ICAgQUNfTElCT0JKKFtzaWcyc3RyXSkKQEAgLTMxMSwxMSArMzM0LDEzIEBACiAgIGZpCiAg IGdsX1NURExJQl9NT0RVTEVfSU5ESUNBVE9SKFt1bnNldGVudl0pCiAgIGdsX1VUSU1FTlMK KyAgZ2xfZ251bGliX2VuYWJsZWRfMjYwOTQxYzBlNWRjNjdlYzllODdkMWZiMzIxYzMwMGI9 ZmFsc2UKICAgZ2xfZ251bGliX2VuYWJsZWRfZG9zbmFtZT1mYWxzZQogICBnbF9nbnVsaWJf ZW5hYmxlZF9ldWlkYWNjZXNzPWZhbHNlCiAgIGdsX2dudWxpYl9lbmFibGVkX2dldGdyb3Vw cz1mYWxzZQogICBnbF9nbnVsaWJfZW5hYmxlZF9iZTQ1M2NlYzVlZWNmNTczMWEyNzRmMmRl N2YyZGIzNj1mYWxzZQogICBnbF9nbnVsaWJfZW5hYmxlZF9hOTc4Njg1MGU5OTlhZTY1YTgz NmE2MDQxZThlNWVkMT1mYWxzZQorICBnbF9nbnVsaWJfZW5hYmxlZF8wM2UwYWFhZDRjYjg5 Y2E3NTc2NTNiZDM2N2E2Y2NiNz1mYWxzZQogICBnbF9nbnVsaWJfZW5hYmxlZF9wYXRobWF4 PWZhbHNlCiAgIGdsX2dudWxpYl9lbmFibGVkXzYwOTllOTczN2Y3NTdkYjM2YzQ3ZmE5ZDlm MDJlODhjPWZhbHNlCiAgIGdsX2dudWxpYl9lbmFibGVkX3N0YXQ9ZmFsc2UKQEAgLTMyMyw2 ICszNDgsMTMgQEAKICAgZ2xfZ251bGliX2VuYWJsZWRfc3RydG91bGw9ZmFsc2UKICAgZ2xf Z251bGliX2VuYWJsZWRfdmVyaWZ5PWZhbHNlCiAgIGdsX2dudWxpYl9lbmFibGVkXzY4MmU2 MDk2MDRjY2FhYzZiZTM4MmU0ZWUzYTRlYWVjPWZhbHNlCisgIGZ1bmNfZ2xfZ251bGliX200 Y29kZV8yNjA5NDFjMGU1ZGM2N2VjOWU4N2QxZmIzMjFjMzAwYiAoKQorICB7CisgICAgaWYg ISAkZ2xfZ251bGliX2VuYWJsZWRfMjYwOTQxYzBlNWRjNjdlYzllODdkMWZiMzIxYzMwMGI7 IHRoZW4KKyAgICAgIEFDX0xJQk9CSihbb3BlbmF0LXByb2NdKQorICAgICAgZ2xfZ251bGli X2VuYWJsZWRfMjYwOTQxYzBlNWRjNjdlYzllODdkMWZiMzIxYzMwMGI9dHJ1ZQorICAgIGZp CisgIH0KICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX2Rvc25hbWUgKCkKICAgewogICAgIGlm ICEgJGdsX2dudWxpYl9lbmFibGVkX2Rvc25hbWU7IHRoZW4KQEAgLTM4NSw2ICs0MTcsMTIg QEAKICAgICAgIGZpCiAgICAgZmkKICAgfQorICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfMDNl MGFhYWQ0Y2I4OWNhNzU3NjUzYmQzNjdhNmNjYjcgKCkKKyAgeworICAgIGlmICEgJGdsX2du dWxpYl9lbmFibGVkXzAzZTBhYWFkNGNiODljYTc1NzY1M2JkMzY3YTZjY2I3OyB0aGVuCisg ICAgICBnbF9nbnVsaWJfZW5hYmxlZF8wM2UwYWFhZDRjYjg5Y2E3NTc2NTNiZDM2N2E2Y2Ni Nz10cnVlCisgICAgZmkKKyAgfQogICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfcGF0aG1heCAo KQogICB7CiAgICAgaWYgISAkZ2xfZ251bGliX2VuYWJsZWRfcGF0aG1heDsgdGhlbgpAQCAt NDU2LDExICs0OTQsMjkgQEAKICAgICBmaQogICB9CiAgIGlmIHRlc3QgJEhBVkVfRkFDQ0VT U0FUID0gMDsgdGhlbgorICAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV8yNjA5NDFjMGU1ZGM2 N2VjOWU4N2QxZmIzMjFjMzAwYgorICBmaQorICBpZiB0ZXN0ICRIQVZFX0ZBQ0NFU1NBVCA9 IDA7IHRoZW4KICAgICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfZG9zbmFtZQogICBmaQogICBp ZiB0ZXN0ICRIQVZFX0ZBQ0NFU1NBVCA9IDA7IHRoZW4KICAgICBmdW5jX2dsX2dudWxpYl9t NGNvZGVfZXVpZGFjY2VzcwogICBmaQorICBpZiB0ZXN0ICRIQVZFX0ZBQ0NFU1NBVCA9IDA7 IHRoZW4KKyAgICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfMDNlMGFhYWQ0Y2I4OWNhNzU3NjUz YmQzNjdhNmNjYjcKKyAgZmkKKyAgaWYgdGVzdCAkSEFWRV9GRE9QRU5ESVIgPSAwOyB0aGVu CisgICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlXzI2MDk0MWMwZTVkYzY3ZWM5ZTg3ZDFmYjMy MWMzMDBiCisgIGZpCisgIGlmIHRlc3QgJEhBVkVfRlNUQVRBVCA9IDAgfHwgdGVzdCAkUkVQ TEFDRV9GU1RBVEFUID0gMTsgdGhlbgorICAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV8yNjA5 NDFjMGU1ZGM2N2VjOWU4N2QxZmIzMjFjMzAwYgorICBmaQorICBpZiB0ZXN0ICRIQVZFX0ZT VEFUQVQgPSAwIHx8IHRlc3QgJFJFUExBQ0VfRlNUQVRBVCA9IDE7IHRoZW4KKyAgICBmdW5j X2dsX2dudWxpYl9tNGNvZGVfZG9zbmFtZQorICBmaQorICBpZiB0ZXN0ICRIQVZFX0ZTVEFU QVQgPSAwIHx8IHRlc3QgJFJFUExBQ0VfRlNUQVRBVCA9IDE7IHRoZW4KKyAgICBmdW5jX2ds X2dudWxpYl9tNGNvZGVfMDNlMGFhYWQ0Y2I4OWNhNzU3NjUzYmQzNjdhNmNjYjcKKyAgZmkK ICAgaWYgdGVzdCAkUkVQTEFDRV9HRVRPUFQgPSAxOyB0aGVuCiAgICAgZnVuY19nbF9nbnVs aWJfbTRjb2RlX2JlNDUzY2VjNWVlY2Y1NzMxYTI3NGYyZGU3ZjJkYjM2CiAgIGZpCkBAIC00 NzMsNiArNTI5LDE1IEBACiAgIGlmIHRlc3QgJEhBVkVfUkVBRExJTksgPSAwIHx8IHRlc3Qg JFJFUExBQ0VfUkVBRExJTksgPSAxOyB0aGVuCiAgICAgZnVuY19nbF9nbnVsaWJfbTRjb2Rl X3N0YXQKICAgZmkKKyAgaWYgdGVzdCAkSEFWRV9SRUFETElOS0FUID0gMDsgdGhlbgorICAg IGZ1bmNfZ2xfZ251bGliX200Y29kZV8yNjA5NDFjMGU1ZGM2N2VjOWU4N2QxZmIzMjFjMzAw YgorICBmaQorICBpZiB0ZXN0ICRIQVZFX1JFQURMSU5LQVQgPSAwOyB0aGVuCisgICAgZnVu Y19nbF9nbnVsaWJfbTRjb2RlX2Rvc25hbWUKKyAgZmkKKyAgaWYgdGVzdCAkSEFWRV9SRUFE TElOS0FUID0gMDsgdGhlbgorICAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV8wM2UwYWFhZDRj Yjg5Y2E3NTc2NTNiZDM2N2E2Y2NiNworICBmaQogICBpZiB7IHRlc3QgJEhBVkVfU1RSVE9J TUFYID0gMCB8fCB0ZXN0ICRSRVBMQUNFX1NUUlRPSU1BWCA9IDE7IH0gJiYgdGVzdCAkYWNf Y3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuCiAgICAgZnVuY19nbF9nbnVsaWJf bTRjb2RlX3N0cnRvbGwKICAgZmkKQEAgLTQ4NiwxMSArNTUxLDEzIEBACiAgICAgZnVuY19n bF9nbnVsaWJfbTRjb2RlX3ZlcmlmeQogICBmaQogICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xf R05VTElCX0VOQUJMRURfXSkKKyAgQU1fQ09ORElUSU9OQUwoW2dsX0dOVUxJQl9FTkFCTEVE XzI2MDk0MWMwZTVkYzY3ZWM5ZTg3ZDFmYjMyMWMzMDBiXSwgWyRnbF9nbnVsaWJfZW5hYmxl ZF8yNjA5NDFjMGU1ZGM2N2VjOWU4N2QxZmIzMjFjMzAwYl0pCiAgIEFNX0NPTkRJVElPTkFM KFtnbF9HTlVMSUJfRU5BQkxFRF9kb3NuYW1lXSwgWyRnbF9nbnVsaWJfZW5hYmxlZF9kb3Nu YW1lXSkKICAgQU1fQ09ORElUSU9OQUwoW2dsX0dOVUxJQl9FTkFCTEVEX2V1aWRhY2Nlc3Nd LCBbJGdsX2dudWxpYl9lbmFibGVkX2V1aWRhY2Nlc3NdKQogICBBTV9DT05ESVRJT05BTChb Z2xfR05VTElCX0VOQUJMRURfZ2V0Z3JvdXBzXSwgWyRnbF9nbnVsaWJfZW5hYmxlZF9nZXRn cm91cHNdKQogICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfYmU0NTNjZWM1 ZWVjZjU3MzFhMjc0ZjJkZTdmMmRiMzZdLCBbJGdsX2dudWxpYl9lbmFibGVkX2JlNDUzY2Vj NWVlY2Y1NzMxYTI3NGYyZGU3ZjJkYjM2XSkKICAgQU1fQ09ORElUSU9OQUwoW2dsX0dOVUxJ Ql9FTkFCTEVEX2E5Nzg2ODUwZTk5OWFlNjVhODM2YTYwNDFlOGU1ZWQxXSwgWyRnbF9nbnVs aWJfZW5hYmxlZF9hOTc4Njg1MGU5OTlhZTY1YTgzNmE2MDQxZThlNWVkMV0pCisgIEFNX0NP TkRJVElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF8wM2UwYWFhZDRjYjg5Y2E3NTc2NTNiZDM2 N2E2Y2NiN10sIFskZ2xfZ251bGliX2VuYWJsZWRfMDNlMGFhYWQ0Y2I4OWNhNzU3NjUzYmQz NjdhNmNjYjddKQogICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfcGF0aG1h eF0sIFskZ2xfZ251bGliX2VuYWJsZWRfcGF0aG1heF0pCiAgIEFNX0NPTkRJVElPTkFMKFtn bF9HTlVMSUJfRU5BQkxFRF82MDk5ZTk3MzdmNzU3ZGIzNmM0N2ZhOWQ5ZjAyZTg4Y10sIFsk Z2xfZ251bGliX2VuYWJsZWRfNjA5OWU5NzM3Zjc1N2RiMzZjNDdmYTlkOWYwMmU4OGNdKQog ICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfc3RhdF0sIFskZ2xfZ251bGli X2VuYWJsZWRfc3RhdF0pCkBAIC02NTYsNiArNzIzLDcgQEAKICAgbGliL2NhcmVhZGxpbmth dC5oCiAgIGxpYi9jbG9zZS1zdHJlYW0uYwogICBsaWIvY2xvc2Utc3RyZWFtLmgKKyAgbGli L2RpcmVudC5pbi5oCiAgIGxpYi9kb3NuYW1lLmgKICAgbGliL2R0b2FzdHIuYwogICBsaWIv ZHRvdGltZXNwZWMuYwpAQCAtNjY1LDEwICs3MzMsMTIgQEAKICAgbGliL2V4ZWNpbmZvLmlu LmgKICAgbGliL2ZhY2Nlc3NhdC5jCiAgIGxpYi9mY250bC5pbi5oCisgIGxpYi9mZG9wZW5k aXIuYwogICBsaWIvZmlsZW1vZGUuYwogICBsaWIvZmlsZW1vZGUuaAogICBsaWIvZnBlbmRp bmcuYwogICBsaWIvZnBlbmRpbmcuaAorICBsaWIvZnN0YXRhdC5jCiAgIGxpYi9mdG9hc3Ry LmMKICAgbGliL2Z0b2FzdHIuaAogICBsaWIvZ2V0Z3JvdXBzLmMKQEAgLTY4OSwxMSArNzU5 LDE1IEBACiAgIGxpYi9tZDUuaAogICBsaWIvbWt0aW1lLWludGVybmFsLmgKICAgbGliL21r dGltZS5jCisgIGxpYi9vcGVuYXQtcHJpdi5oCisgIGxpYi9vcGVuYXQtcHJvYy5jCisgIGxp Yi9vcGVuYXQuaAogICBsaWIvcGF0aG1heC5oCiAgIGxpYi9wc2VsZWN0LmMKICAgbGliL3B0 aHJlYWRfc2lnbWFzay5jCiAgIGxpYi9wdXRlbnYuYwogICBsaWIvcmVhZGxpbmsuYworICBs aWIvcmVhZGxpbmthdC5jCiAgIGxpYi9yb290LXVpZC5oCiAgIGxpYi9zaGExLmMKICAgbGli L3NoYTEuaApAQCAtNzQ2LDYgKzgyMCw3IEBACiAgIG00L2Mtc3RydG9kLm00CiAgIG00L2Ns b2NrX3RpbWUubTQKICAgbTQvY2xvc2Utc3RyZWFtLm00CisgIG00L2RpcmVudF9oLm00CiAg IG00L2R1cDIubTQKICAgbTQvZW52aXJvbi5tNAogICBtNC9ldWlkYWNjZXNzLm00CkBAIC03 NTUsOCArODMwLDEwIEBACiAgIG00L2ZhY2Nlc3NhdC5tNAogICBtNC9mY250bC1vLm00CiAg IG00L2ZjbnRsX2gubTQKKyAgbTQvZmRvcGVuZGlyLm00CiAgIG00L2ZpbGVtb2RlLm00CiAg IG00L2ZwZW5kaW5nLm00CisgIG00L2ZzdGF0YXQubTQKICAgbTQvZ2V0Z3JvdXBzLm00CiAg IG00L2dldGxvYWRhdmcubTQKICAgbTQvZ2V0b3B0Lm00CkBAIC03ODAsNiArODU3LDcgQEAK ICAgbTQvcHRocmVhZF9zaWdtYXNrLm00CiAgIG00L3B1dGVudi5tNAogICBtNC9yZWFkbGlu ay5tNAorICBtNC9yZWFkbGlua2F0Lm00CiAgIG00L3NldGVudi5tNAogICBtNC9zaGExLm00 CiAgIG00L3NoYTI1Ni5tNAoKPT09IGFkZGVkIGZpbGUgJ200L3JlYWRsaW5rYXQubTQnCi0t LSBtNC9yZWFkbGlua2F0Lm00CTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIG00L3Jl YWRsaW5rYXQubTQJMjAxMy0wMS0yNCAwODowMjoxNiArMDAwMApAQCAtMCwwICsxLDE5IEBA CisjIHNlcmlhbCAzCisjIFNlZSBpZiB3ZSBuZWVkIHRvIHByb3ZpZGUgcmVhZGxpbmthdCBy ZXBsYWNlbWVudC4KKworZG5sIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1p c3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhv dXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQu CisKKyMgV3JpdHRlbiBieSBFcmljIEJsYWtlLgorCitBQ19ERUZVTihbZ2xfRlVOQ19SRUFE TElOS0FUXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfVU5JU1REX0hfREVGQVVMVFNdKQorICBB Q19SRVFVSVJFKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorICBBQ19DSEVDS19GVU5D U19PTkNFKFtyZWFkbGlua2F0XSkKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19yZWFkbGlua2F0 ID0gbm87IHRoZW4KKyAgICBIQVZFX1JFQURMSU5LQVQ9MAorICBmaQorXSkKCj09PSBtb2Rp ZmllZCBmaWxlICdudC9DaGFuZ2VMb2cnCi0tLSBudC9DaGFuZ2VMb2cJMjAxMy0wMS0yOCAx NDo0MTowOCArMDAwMAorKysgbnQvQ2hhbmdlTG9nCTIwMTMtMDEtMjkgMjE6MDM6MjUgKzAw MDAKQEAgLTEsMyArMSw5IEBACisyMDEzLTAxLTI5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBj cy51Y2xhLmVkdT4KKworCVVzZSBmZG9wZW5kaXIsIGZzdGF0YXQgYW5kIHJlYWRsaW5rYXQs IGZvciBlZmZpY2llbmN5IChCdWcjMTM1MzkpLgorCSogaW5jL3N5cy9zdGF0LmggKGZzdGF0 YXQpOgorCSogaW5jL3VuaXN0ZC5oIChyZWFkbGlua2F0KTogTmV3IGRlY2xzLgorCiAyMDEz LTAxLTI4ICBFbGkgWmFyZXRza2lpICA8ZWxpekBnbnUub3JnPgogCiAJKiBpbmMvZGlyZW50 LmggKG9wZW5kaXIpOiBVcGRhdGUgcHJvdG90eXBlLgoKPT09IG1vZGlmaWVkIGZpbGUgJ250 L2luYy9zeXMvc3RhdC5oJwotLS0gbnQvaW5jL3N5cy9zdGF0LmgJMjAxMy0wMS0wMiAxNjox MzowNCArMDAwMAorKysgbnQvaW5jL3N5cy9zdGF0LmgJMjAxMy0wMS0yOCAwODoxNToxMiAr MDAwMApAQCAtMTEwLDYgKzExMCw3IEBACiBfQ1JUSU1QIGludCBfX2NkZWNsIF9fTUlOR1df Tk9USFJPVwljaG1vZCAoY29uc3QgY2hhciosIGludCk7CiBfQ1JUSU1QIGludCBfX2NkZWNs IF9fTUlOR1dfTk9USFJPVwlzdGF0IChjb25zdCBjaGFyKiwgc3RydWN0IHN0YXQqKTsKIF9D UlRJTVAgaW50IF9fY2RlY2wgX19NSU5HV19OT1RIUk9XCWxzdGF0IChjb25zdCBjaGFyKiwg c3RydWN0IHN0YXQqKTsKK19DUlRJTVAgaW50IF9fY2RlY2wgX19NSU5HV19OT1RIUk9XCWZz dGF0YXQgKGludCwgY2hhciBjb25zdCAqLAorCQkJCQkJIHN0cnVjdCBzdGF0ICosIGludCk7 CiAKICNlbmRpZgkvKiBJTkNfU1lTX1NUQVRfSF8gKi8KLQoKPT09IG1vZGlmaWVkIGZpbGUg J250L2luYy91bmlzdGQuaCcKLS0tIG50L2luYy91bmlzdGQuaAkyMDEzLTAxLTExIDA5OjMz OjU0ICswMDAwCisrKyBudC9pbmMvdW5pc3RkLmgJMjAxMy0wMS0yOCAwODoxNToxMiArMDAw MApAQCAtMTIsNiArMTIsNyBAQAogICAgYW5kIHdob3NlIHByb3RvdHlwZXMgYXJlIHVzdWFs bHkgZm91bmQgaW4gdW5pc3RkLmggb24gUE9TSVgKICAgIHBsYXRmb3Jtcy4gICovCiBleHRl cm4gc3NpemVfdCByZWFkbGluayAoY29uc3QgY2hhciAqLCBjaGFyICosIHNpemVfdCk7Citl eHRlcm4gc3NpemVfdCByZWFkbGlua2F0IChpbnQsIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBz aXplX3QpOwogZXh0ZXJuIGludCBzeW1saW5rIChjaGFyIGNvbnN0ICosIGNoYXIgY29uc3Qg Kik7CiBleHRlcm4gaW50IHNldHBnaWQgKHBpZF90LCBwaWRfdCk7CiBleHRlcm4gcGlkX3Qg Z2V0cGdycCAodm9pZCk7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL0NoYW5nZUxvZycKLS0t IHNyYy9DaGFuZ2VMb2cJMjAxMy0wMS0yOCAxNDo0MTowOCArMDAwMAorKysgc3JjL0NoYW5n ZUxvZwkyMDEzLTAxLTMwIDAwOjQ4OjU5ICswMDAwCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTMt MDEtMjkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJVXNlIGZkb3Bl bmRpciwgZnN0YXRhdCBhbmQgcmVhZGxpbmthdCwgZm9yIGVmZmljaWVuY3kgKEJ1ZyMxMzUz OSkuCisJKiBjb25mX3Bvc3QuaCAoR05VTElCX1NVUFBPUlRfT05MWV9BVF9GRENXRCk6IFJl bW92ZS4KKwkqIGRpcmVkLmM6IEluY2x1ZGUgPGZjbnRsLmg+LgorCShvcGVuX2RpcmVjdG9y eSk6IE5ldyBmdW5jdGlvbiwgd2hpY2ggdXNlcyBvcGVuIGFuZCBmZG9wZW5kaXIKKwlyYXRo ZXIgdGhhbiBvcGVuZGlyLiAgRE9TX05UIHBsYXRmb3JtcyBzdGlsbCB1c2Ugb3BlbmRpciwg dGhvdWdoLgorCShkaXJlY3RvcnlfZmlsZXNfaW50ZXJuYWwsIGZpbGVfbmFtZV9jb21wbGV0 aW9uKTogVXNlIGl0LgorCShmaWxlX2F0dHJpYnV0ZXMpOiBOZXcgZnVuY3Rpb24sIHdpdGgg bW9zdCBvZiB0aGUgb2xkIEZmaWxlX2F0dHJpYnV0ZXMuCisJKGRpcmVjdG9yeV9maWxlc19p bnRlcm5hbCwgRmZpbGVfYXR0cmlidXRlcyk6IFVzZSBpdC4KKwkoZmlsZV9hdHRyaWJ1dGVz LCBmaWxlX25hbWVfY29tcGxldGlvbl9zdGF0KTogRmlyc3QgYXJnIGlzIG5vdyBmZCwKKwlu b3QgZGlyIG5hbWUuICBBbGwgdXNlcyBjaGFuZ2VkLiAgVXNlIGZzdGF0YXQgcmF0aGVyIHRo YW4gbHN0YXQgKworCXN0YXQuCisJKGZpbGVfYXR0cmlidXRlcyk6IFVzZSBlbWFjc19yZWFk bGlua2F0IHJhdGhlciB0aGFuIEZmaWxlX3N5bWxpbmtfcC4KKwkqIGZpbGVpby5jOiBJbmNs dWRlIDxhbGxvY2F0b3IuaD4sIDxjYXJlYWRsaW5rYXQuaD4uCisJKGVtYWNzX3JlYWRsaW5r YXQpOiBOZXcgZnVuY3Rpb24sIHdpdGggbXVjaCBvZiB0aGUgb2xkCisJRmZpbGVfc3ltbGlu a19wLCBidXQgd2l0aCBhbiBmZCBhcmd1bWVudCBmb3Igc3BlZWQuCisJSXQgdXNlcyByZWFk bGlua2F0IHJhdGhlciB0aGFuIGNhcmVhZGxpbmthdGN3ZCwgc28gdGhhdCBpdAorCW5lZWQg bm90IGFzc3VtZSB0aGUgd29ya2luZyBkaXJlY3RvcnkuCisJKEZmaWxlX3N5bWxpbmtfcCk6 IFVzZSBpdC4KKwkqIGZpbGVsb2NrLmMgKGN1cnJlbnRfbG9ja19vd25lcik6IFVzZSBlbWFj c19yZWFkbGlua2F0CisJcmF0aGVyIHRoYW4gZW1hY3NfcmVhZGxpbmsuCisJKiBsaXNwLmgg KGVtYWNzX3JlYWRsaW5rYXQpOiBOZXcgZGVjbC4KKwkoUkVBRExJTktfQlVGU0laRSwgZW1h Y3NfcmVhZGxpbmspOiBSZW1vdmUuCisJKiBzeXNkZXAuYzogRG8gbm90IGluY2x1ZGUgPGFs bG9jYXRvci5oPiwgPGNhcmVhZGxpbmthdC5oPi4KKwkoZW1hY3Nfbm9yZWFsbG9jX2FsbG9j YXRvciwgZW1hY3NfcmVhZGxpbmspOiBSZW1vdmUuCisJVGhpcyBzdHVmZiBpcyBtb3ZlZCB0 byBmaWxlaW8uYy4KKwkqIHczMi5jIChmc3RhdGF0LCByZWFkbGlua2F0KTogTmV3IGZ1bmN0 aW9ucy4KKwkoY2FyZWFkbGlua2F0KTogRG9uJ3QgY2hlY2sgdGhhdCBmZCA9PSBBVF9GRENX RC4KKwkoY2FyZWFkbGlua2F0Y3dkKTogUmVtb3ZlOyBubyBsb25nZXIgbmVlZGVkLgorCiAy MDEzLTAxLTI4ICBFbGkgWmFyZXRza2lpICA8ZWxpekBnbnUub3JnPgogCiAJKiB3MzIuYyAo b3BlbmRpcik6IE5vdyBhY2NlcHRzIGEgJ2NvbnN0IGNoYXIgKicuCgo9PT0gbW9kaWZpZWQg ZmlsZSAnc3JjL2NvbmZfcG9zdC5oJwotLS0gc3JjL2NvbmZfcG9zdC5oCTIwMTMtMDEtMDIg MTY6MTM6MDQgKzAwMDAKKysrIHNyYy9jb25mX3Bvc3QuaAkyMDEzLTAxLTI0IDA2OjUxOjI1 ICswMDAwCkBAIC0xODIsMTAgKzE4Miw2IEBACiAjZW5kaWYKICNlbmRpZgogCi0vKiBUZWxs IGdudWxpYiB0byBvbWl0IHN1cHBvcnQgZm9yIG9wZW5hdC1yZWxhdGVkIGZ1bmN0aW9ucyBo YXZpbmcgYQotICAgZmlyc3QgYXJndW1lbnQgb3RoZXIgdGhhbiBBVF9GRENXRC4gICovCi0j ZGVmaW5lIEdOVUxJQl9TVVBQT1JUX09OTFlfQVRfRkRDV0QKLQogI2luY2x1ZGUgPHN0cmlu Zy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2Rp cmVkLmMnCi0tLSBzcmMvZGlyZWQuYwkyMDEzLTAxLTE3IDA2OjI5OjQwICswMDAwCisrKyBz cmMvZGlyZWQuYwkyMDEzLTAxLTI5IDIwOjQ5OjI3ICswMDAwCkBAIC0zMCw2ICszMCw3IEBA CiAjaW5jbHVkZSA8Z3JwLmg+CiAKICNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZj bnRsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKICNpbmNsdWRlIDxkaXJlbnQuaD4KQEAg LTU0LDYgKzU1LDcgQEAKIHN0YXRpYyBMaXNwX09iamVjdCBRZmlsZV9hdHRyaWJ1dGVzX2xl c3NwOwogCiBzdGF0aWMgcHRyZGlmZl90IHNjbXAgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh ciAqLCBwdHJkaWZmX3QpOworc3RhdGljIExpc3BfT2JqZWN0IGZpbGVfYXR0cmlidXRlcyAo aW50LCBjaGFyIGNvbnN0ICosIExpc3BfT2JqZWN0KTsKIAwKIC8qIFJldHVybiB0aGUgbnVt YmVyIG9mIGJ5dGVzIGluIERQJ3MgbmFtZS4gICovCiBzdGF0aWMgcHRyZGlmZl90CkBAIC02 Niw2ICs2OCw0NCBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyBESVIgKgorb3Blbl9kaXJlY3Rv cnkgKGNoYXIgY29uc3QgKm5hbWUsIGludCAqZmRwKQoreworICBESVIgKmQ7CisgIGludCBm ZCwgb3BlbmRpcl9lcnJubzsKKworICBibG9ja19pbnB1dCAoKTsKKworI2lmZGVmIERPU19O VAorICAvKiBEaXJlY3RvcmllcyBjYW5ub3QgYmUgb3BlbmVkLiAgVGhlIGVtdWxhdGlvbiBh c3N1bWVzIHRoYXQgYW55CisgICAgIGZpbGUgZGVzY3JpcHRvciBvdGhlciB0aGFuIEFUX0ZE Q1dEIGNvcnJlc3BvbmRzIHRvIHRoZSBtb3N0CisgICAgIHJlY2VudGx5IG9wZW5lZCBkaXJl Y3RvcnkuICBUaGlzIGhhY2sgaXMgZ29vZCBlbm91Z2ggZm9yIEVtYWNzLiAgKi8KKyAgZmQg PSAwOworICBkID0gb3BlbmRpciAobmFtZSk7CisgIG9wZW5kaXJfZXJybm8gPSBlcnJubzsK KyNlbHNlCisgIGZkID0gZW1hY3Nfb3BlbiAobmFtZSwgT19SRE9OTFkgfCBPX0RJUkVDVE9S WSwgMCk7CisgIGlmIChmZCA8IDApCisgICAgeworICAgICAgb3BlbmRpcl9lcnJubyA9IGVy cm5vOworICAgICAgZCA9IDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZCA9IGZk b3BlbmRpciAoZmQpOworICAgICAgb3BlbmRpcl9lcnJubyA9IGVycm5vOworICAgICAgaWYg KCEgZCkKKwljbG9zZSAoZmQpOworICAgIH0KKyNlbmRpZgorCisgIHVuYmxvY2tfaW5wdXQg KCk7CisKKyAgKmZkcCA9IGZkOworICBlcnJubyA9IG9wZW5kaXJfZXJybm87CisgIHJldHVy biBkOworfQorCiAjaWZkZWYgV0lORE9XU05UCiBMaXNwX09iamVjdAogZGlyZWN0b3J5X2Zp bGVzX2ludGVybmFsX3czMl91bndpbmQgKExpc3BfT2JqZWN0IGFyZykKQEAgLTk2LDYgKzEz Niw3IEBACiAJCQkgIExpc3BfT2JqZWN0IGlkX2Zvcm1hdCkKIHsKICAgRElSICpkOworICBp bnQgZmQ7CiAgIHB0cmRpZmZfdCBkaXJlY3RvcnlfbmJ5dGVzOwogICBMaXNwX09iamVjdCBs aXN0LCBkaXJmaWxlbmFtZSwgZW5jb2RlZF9kaXJlY3Rvcnk7CiAgIHN0cnVjdCByZV9wYXR0 ZXJuX2J1ZmZlciAqYnVmcCA9IE5VTEw7CkBAIC0xNDIsOSArMTgzLDcgQEAKICAgLyogTm93 ICpidWZwIGlzIHRoZSBjb21waWxlZCBmb3JtIG9mIE1BVENIOyBkb24ndCBjYWxsIGFueXRo aW5nCiAgICAgIHdoaWNoIG1pZ2h0IGNvbXBpbGUgYSBuZXcgcmVnZXhwIHVudGlsIHdlJ3Jl IGRvbmUgd2l0aCB0aGUgbG9vcCEgICovCiAKLSAgYmxvY2tfaW5wdXQgKCk7Ci0gIGQgPSBv cGVuZGlyIChTU0RBVEEgKGRpcmZpbGVuYW1lKSk7Ci0gIHVuYmxvY2tfaW5wdXQgKCk7Cisg IGQgPSBvcGVuX2RpcmVjdG9yeSAoU1NEQVRBIChkaXJmaWxlbmFtZSksICZmZCk7CiAgIGlm IChkID09IE5VTEwpCiAgICAgcmVwb3J0X2ZpbGVfZXJyb3IgKCJPcGVuaW5nIGRpcmVjdG9y eSIsIEZjb25zIChkaXJlY3RvcnksIFFuaWwpKTsKIApAQCAtMjU5LDIwICsyOTgsOSBAQAog CiAJICBpZiAoYXR0cnMpCiAJICAgIHsKLQkgICAgICAvKiBDb25zdHJ1Y3QgYW4gZXhwYW5k ZWQgZmlsZW5hbWUgZm9yIHRoZSBkaXJlY3RvcnkgZW50cnkuCi0JCSBVc2UgdGhlIGRlY29k ZWQgbmFtZXMgZm9yIGlucHV0IHRvIEZmaWxlX2F0dHJpYnV0ZXMuICAqLwotCSAgICAgIExp c3BfT2JqZWN0IGRlY29kZWRfZnVsbG5hbWUsIGZpbGVhdHRyczsKLQkgICAgICBzdHJ1Y3Qg Z2Nwcm8gZ2Nwcm8xLCBnY3BybzI7Ci0KLQkgICAgICBkZWNvZGVkX2Z1bGxuYW1lID0gZmls ZWF0dHJzID0gUW5pbDsKLQkgICAgICBHQ1BSTzIgKGRlY29kZWRfZnVsbG5hbWUsIGZpbGVh dHRycyk7Ci0KLQkgICAgICAvKiBCb3RoIEZleHBhbmRfZmlsZV9uYW1lIGFuZCBGZmlsZV9h dHRyaWJ1dGVzIGNhbiBHQy4gICovCi0JICAgICAgZGVjb2RlZF9mdWxsbmFtZSA9IEZleHBh bmRfZmlsZV9uYW1lIChuYW1lLCBkaXJlY3RvcnkpOwotCSAgICAgIGZpbGVhdHRycyA9IEZm aWxlX2F0dHJpYnV0ZXMgKGRlY29kZWRfZnVsbG5hbWUsIGlkX2Zvcm1hdCk7Ci0KKwkgICAg ICBMaXNwX09iamVjdCBmaWxlYXR0cnMKKwkJPSBmaWxlX2F0dHJpYnV0ZXMgKGZkLCBkcC0+ ZF9uYW1lLCBpZF9mb3JtYXQpOwogCSAgICAgIGxpc3QgPSBGY29ucyAoRmNvbnMgKGZpbmFs bmFtZSwgZmlsZWF0dHJzKSwgbGlzdCk7Ci0JICAgICAgVU5HQ1BSTzsKIAkgICAgfQogCSAg ZWxzZQogCSAgICBsaXN0ID0gRmNvbnMgKGZpbmFsbmFtZSwgbGlzdCk7CkBAIC00MTMsOCAr NDQxLDcgQEAKICAgcmV0dXJuIGZpbGVfbmFtZV9jb21wbGV0aW9uIChmaWxlLCBkaXJlY3Rv cnksIDEsIFFuaWwpOwogfQogCi1zdGF0aWMgaW50IGZpbGVfbmFtZV9jb21wbGV0aW9uX3N0 YXQgKExpc3BfT2JqZWN0IGRpcm5hbWUsIHN0cnVjdCBkaXJlbnQgKmRwLAotCQkJCSAgICAg IHN0cnVjdCBzdGF0ICpzdF9hZGRyKTsKK3N0YXRpYyBpbnQgZmlsZV9uYW1lX2NvbXBsZXRp b25fc3RhdCAoaW50LCBzdHJ1Y3QgZGlyZW50ICosIHN0cnVjdCBzdGF0ICopOwogc3RhdGlj IExpc3BfT2JqZWN0IFFkZWZhdWx0X2RpcmVjdG9yeTsKIAogc3RhdGljIExpc3BfT2JqZWN0 CkBAIC00MjIsNiArNDQ5LDcgQEAKIAkJICAgICAgTGlzcF9PYmplY3QgcHJlZGljYXRlKQog ewogICBESVIgKmQ7CisgIGludCBmZDsKICAgcHRyZGlmZl90IGJlc3RtYXRjaHNpemUgPSAw OwogICBpbnQgbWF0Y2hjb3VudCA9IDA7CiAgIC8qIElmIEFMTF9GTEFHIGlzIDEsIEJFU1RN QVRDSCBpcyB0aGUgbGlzdCBvZiBhbGwgbWF0Y2hlcywgZGVjb2RlZC4KQEAgLTQ1OCw5ICs0 ODYsNyBAQAogCiAgIGVuY29kZWRfZGlyID0gRU5DT0RFX0ZJTEUgKGRpcm5hbWUpOwogCi0g IGJsb2NrX2lucHV0ICgpOwotICBkID0gb3BlbmRpciAoU1NEQVRBIChGZGlyZWN0b3J5X2Zp bGVfbmFtZSAoZW5jb2RlZF9kaXIpKSk7Ci0gIHVuYmxvY2tfaW5wdXQgKCk7CisgIGQgPSBv cGVuX2RpcmVjdG9yeSAoU1NEQVRBIChGZGlyZWN0b3J5X2ZpbGVfbmFtZSAoZW5jb2RlZF9k aXIpKSwgJmZkKTsKICAgaWYgKCFkKQogICAgIHJlcG9ydF9maWxlX2Vycm9yICgiT3Blbmlu ZyBkaXJlY3RvcnkiLCBGY29ucyAoZGlybmFtZSwgUW5pbCkpOwogCkBAIC00OTUsNyArNTIx LDcgQEAKIAkJCVNDSEFSUyAoZW5jb2RlZF9maWxlKSkpCiAJY29udGludWU7CiAKLSAgICAg IGlmIChmaWxlX25hbWVfY29tcGxldGlvbl9zdGF0IChlbmNvZGVkX2RpciwgZHAsICZzdCkg PCAwKQorICAgICAgaWYgKGZpbGVfbmFtZV9jb21wbGV0aW9uX3N0YXQgKGZkLCBkcCwgJnN0 KSA8IDApCiAJY29udGludWU7CiAKICAgICAgIGRpcmVjdG9yeXAgPSBTX0lTRElSIChzdC5z dF9tb2RlKSAhPSAwOwpAQCAtNzcyLDE0ICs3OTgsOSBAQAogfQogCiBzdGF0aWMgaW50Ci1m aWxlX25hbWVfY29tcGxldGlvbl9zdGF0IChMaXNwX09iamVjdCBkaXJuYW1lLCBzdHJ1Y3Qg ZGlyZW50ICpkcCwKLQkJCSAgIHN0cnVjdCBzdGF0ICpzdF9hZGRyKQorZmlsZV9uYW1lX2Nv bXBsZXRpb25fc3RhdCAoaW50IGZkLCBzdHJ1Y3QgZGlyZW50ICpkcCwgc3RydWN0IHN0YXQg KnN0X2FkZHIpCiB7Ci0gIHB0cmRpZmZfdCBsZW4gPSBkaXJlbnRfbmFtZWxlbiAoZHApOwot ICBwdHJkaWZmX3QgcG9zID0gU0NIQVJTIChkaXJuYW1lKTsKICAgaW50IHZhbHVlOwotICBV U0VfU0FGRV9BTExPQ0E7Ci0gIGNoYXIgKmZ1bGxuYW1lID0gU0FGRV9BTExPQ0EgKGxlbiAr IHBvcyArIDIpOwogCiAjaWZkZWYgTVNET1MKICAgLyogU29tZSBmaWVsZHMgb2Ygc3RydWN0 IHN0YXQgYXJlICp2ZXJ5KiBleHBlbnNpdmUgdG8gY29tcHV0ZSBvbiBNUy1ET1MsCkBAIC03 OTIsMjMgKzgxMywxNSBAQAogICBfZGpzdGF0X2ZsYWdzID0gX1NUQVRfSU5PREUgfCBfU1RB VF9FWEVDX01BR0lDIHwgX1NUQVRfRElSU0laRTsKICNlbmRpZiAvKiBNU0RPUyAqLwogCi0g IG1lbWNweSAoZnVsbG5hbWUsIFNEQVRBIChkaXJuYW1lKSwgcG9zKTsKLSAgaWYgKCFJU19E SVJFQ1RPUllfU0VQIChmdWxsbmFtZVtwb3MgLSAxXSkpCi0gICAgZnVsbG5hbWVbcG9zKytd ID0gRElSRUNUT1JZX1NFUDsKLQotICBtZW1jcHkgKGZ1bGxuYW1lICsgcG9zLCBkcC0+ZF9u YW1lLCBsZW4pOwotICBmdWxsbmFtZVtwb3MgKyBsZW5dID0gMDsKLQogICAvKiBXZSB3YW50 IHRvIHJldHVybiBzdWNjZXNzIGlmIGEgbGluayBwb2ludHMgdG8gYSBub25leGlzdGVudCBm aWxlLAogICAgICBidXQgd2Ugd2FudCB0byByZXR1cm4gdGhlIHN0YXR1cyBmb3Igd2hhdCB0 aGUgbGluayBwb2ludHMgdG8sCiAgICAgIGluIGNhc2UgaXQgaXMgYSBkaXJlY3RvcnkuICAq LwotICB2YWx1ZSA9IGxzdGF0IChmdWxsbmFtZSwgc3RfYWRkcik7CisgIHZhbHVlID0gZnN0 YXRhdCAoZmQsIGRwLT5kX25hbWUsIHN0X2FkZHIsIEFUX1NZTUxJTktfTk9GT0xMT1cpOwog ICBpZiAodmFsdWUgPT0gMCAmJiBTX0lTTE5LIChzdF9hZGRyLT5zdF9tb2RlKSkKLSAgICBz dGF0IChmdWxsbmFtZSwgc3RfYWRkcik7CisgICAgZnN0YXRhdCAoZmQsIGRwLT5kX25hbWUs IHN0X2FkZHIsIDApOwogI2lmZGVmIE1TRE9TCiAgIF9kanN0YXRfZmxhZ3MgPSBzYXZlX2Rq c3RhdF9mbGFnczsKICNlbmRpZiAvKiBNU0RPUyAqLwotICBTQUZFX0ZSRUUgKCk7CiAgIHJl dHVybiB2YWx1ZTsKIH0KIAwKQEAgLTg4NiwxOCArODk5LDggQEAKIHNvIGxhc3QgYWNjZXNz IHRpbWUgd2lsbCBhbHdheXMgYmUgbWlkbmlnaHQgb2YgdGhhdCBkYXkuICAqLykKICAgKExp c3BfT2JqZWN0IGZpbGVuYW1lLCBMaXNwX09iamVjdCBpZF9mb3JtYXQpCiB7Ci0gIExpc3Bf T2JqZWN0IHZhbHVlc1sxMl07CiAgIExpc3BfT2JqZWN0IGVuY29kZWQ7Ci0gIHN0cnVjdCBz dGF0IHM7Ci0gIGludCBsc3RhdF9yZXN1bHQ7Ci0KLSAgLyogQW4gYXJyYXkgdG8gaG9sZCB0 aGUgbW9kZSBzdHJpbmcgZ2VuZXJhdGVkIGJ5IGZpbGVtb2Rlc3RyaW5nLAotICAgICBpbmNs dWRpbmcgaXRzIHRlcm1pbmF0aW5nIHNwYWNlIGFuZCBudWxsIGJ5dGUuICAqLwotICBjaGFy IG1vZGVzW3NpemVvZiAiLXJ3eHIteHIteCAiXTsKLQogICBMaXNwX09iamVjdCBoYW5kbGVy OwotICBzdHJ1Y3QgZ2Nwcm8gZ2Nwcm8xOwotICBjaGFyICp1bmFtZSA9IE5VTEwsICpnbmFt ZSA9IE5VTEw7CiAKICAgZmlsZW5hbWUgPSBGZXhwYW5kX2ZpbGVfbmFtZSAoZmlsZW5hbWUs IFFuaWwpOwogCkBAIC05MTMsOSArOTE2LDIyIEBACiAJcmV0dXJuIGNhbGwzIChoYW5kbGVy LCBRZmlsZV9hdHRyaWJ1dGVzLCBmaWxlbmFtZSwgaWRfZm9ybWF0KTsKICAgICB9CiAKLSAg R0NQUk8xIChmaWxlbmFtZSk7CiAgIGVuY29kZWQgPSBFTkNPREVfRklMRSAoZmlsZW5hbWUp OwotICBVTkdDUFJPOworICByZXR1cm4gZmlsZV9hdHRyaWJ1dGVzIChBVF9GRENXRCwgU1NE QVRBIChlbmNvZGVkKSwgaWRfZm9ybWF0KTsKK30KKworc3RhdGljIExpc3BfT2JqZWN0Citm aWxlX2F0dHJpYnV0ZXMgKGludCBmZCwgY2hhciBjb25zdCAqbmFtZSwgTGlzcF9PYmplY3Qg aWRfZm9ybWF0KQoreworICBMaXNwX09iamVjdCB2YWx1ZXNbMTJdOworICBzdHJ1Y3Qgc3Rh dCBzOworICBpbnQgbHN0YXRfcmVzdWx0OworCisgIC8qIEFuIGFycmF5IHRvIGhvbGQgdGhl IG1vZGUgc3RyaW5nIGdlbmVyYXRlZCBieSBmaWxlbW9kZXN0cmluZywKKyAgICAgaW5jbHVk aW5nIGl0cyB0ZXJtaW5hdGluZyBzcGFjZSBhbmQgbnVsbCBieXRlLiAgKi8KKyAgY2hhciBt b2Rlc1tzaXplb2YgIi1yd3hyLXhyLXggIl07CisKKyAgY2hhciAqdW5hbWUgPSBOVUxMLCAq Z25hbWUgPSBOVUxMOwogCiAjaWZkZWYgV0lORE9XU05UCiAgIC8qIFdlIHVzdWFsbHkgZG9u J3QgcmVxdWVzdCBhY2N1cmF0ZSBvd25lciBhbmQgZ3JvdXAgaW5mbywgYmVjYXVzZQpAQCAt OTI1LDcgKzk0MSw3IEBACiAgIHczMl9zdGF0X2dldF9vd25lcl9ncm91cCA9IDE7CiAjZW5k aWYKIAotICBsc3RhdF9yZXN1bHQgPSBsc3RhdCAoU1NEQVRBIChlbmNvZGVkKSwgJnMpOwor ICBsc3RhdF9yZXN1bHQgPSBmc3RhdGF0IChmZCwgbmFtZSwgJnMsIEFUX1NZTUxJTktfTk9G T0xMT1cpOwogCiAjaWZkZWYgV0lORE9XU05UCiAgIHczMl9zdGF0X2dldF9vd25lcl9ncm91 cCA9IDA7CkBAIC05MzQsNyArOTUwLDcgQEAKICAgaWYgKGxzdGF0X3Jlc3VsdCA8IDApCiAg ICAgcmV0dXJuIFFuaWw7CiAKLSAgdmFsdWVzWzBdID0gKFNfSVNMTksgKHMuc3RfbW9kZSkg PyBGZmlsZV9zeW1saW5rX3AgKGZpbGVuYW1lKQorICB2YWx1ZXNbMF0gPSAoU19JU0xOSyAo cy5zdF9tb2RlKSA/IGVtYWNzX3JlYWRsaW5rYXQgKGZkLCBuYW1lKQogCSAgICAgICA6IFNf SVNESVIgKHMuc3RfbW9kZSkgPyBRdCA6IFFuaWwpOwogICB2YWx1ZXNbMV0gPSBtYWtlX251 bWJlciAocy5zdF9ubGluayk7CiAKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvZmlsZWlvLmMn Ci0tLSBzcmMvZmlsZWlvLmMJMjAxMy0wMS0yMyAyMDowNzoyOCArMDAwMAorKysgc3JjL2Zp bGVpby5jCTIwMTMtMDEtMjQgMDg6MDI6MTYgKzAwMDAKQEAgLTgyLDYgKzgyLDggQEAKICNl bmRpZgogCiAjaW5jbHVkZSAic3lzdGltZS5oIgorI2luY2x1ZGUgPGFsbG9jYXRvci5oPgor I2luY2x1ZGUgPGNhcmVhZGxpbmthdC5oPgogI2luY2x1ZGUgPHN0YXQtdGltZS5oPgogCiAj aWZkZWYgSFBVWApAQCAtMjc1OCw2ICsyNzYwLDI5IEBACiAgIHJldHVybiBRbmlsOwogfQog DAorLyogUmVsYXRpdmUgdG8gZGlyZWN0b3J5IEZELCByZXR1cm4gdGhlIHN5bWJvbGljIGxp bmsgdmFsdWUgb2YgRklMRU5BTUUuCisgICBPbiBmYWlsdXJlLCByZXR1cm4gbmlsLiAgKi8K K0xpc3BfT2JqZWN0CitlbWFjc19yZWFkbGlua2F0IChpbnQgZmQsIGNoYXIgY29uc3QgKmZp bGVuYW1lKQoreworICBzdGF0aWMgc3RydWN0IGFsbG9jYXRvciBjb25zdCBlbWFjc19ub3Jl YWxsb2NfYWxsb2NhdG9yID0KKyAgICB7IHhtYWxsb2MsIE5VTEwsIHhmcmVlLCBtZW1vcnlf ZnVsbCB9OworICBMaXNwX09iamVjdCB2YWw7CisgIGNoYXIgcmVhZGxpbmtfYnVmWzEwMjRd OworICBjaGFyICpidWYgPSBjYXJlYWRsaW5rYXQgKGZkLCBmaWxlbmFtZSwgcmVhZGxpbmtf YnVmLCBzaXplb2YgcmVhZGxpbmtfYnVmLAorCQkJICAgICZlbWFjc19ub3JlYWxsb2NfYWxs b2NhdG9yLCByZWFkbGlua2F0KTsKKyAgaWYgKCFidWYpCisgICAgcmV0dXJuIFFuaWw7CisK KyAgdmFsID0gYnVpbGRfc3RyaW5nIChidWYpOworICBpZiAoYnVmWzBdID09ICcvJyAmJiBz dHJjaHIgKGJ1ZiwgJzonKSkKKyAgICB2YWwgPSBjb25jYXQyIChidWlsZF9zdHJpbmcgKCIv OiIpLCB2YWwpOworICBpZiAoYnVmICE9IHJlYWRsaW5rX2J1ZikKKyAgICB4ZnJlZSAoYnVm KTsKKyAgdmFsID0gREVDT0RFX0ZJTEUgKHZhbCk7CisgIHJldHVybiB2YWw7Cit9CisKIERF RlVOICgiZmlsZS1zeW1saW5rLXAiLCBGZmlsZV9zeW1saW5rX3AsIFNmaWxlX3N5bWxpbmtf cCwgMSwgMSwgMCwKICAgICAgICBkb2M6IC8qIFJldHVybiBub24tbmlsIGlmIGZpbGUgRklM RU5BTUUgaXMgdGhlIG5hbWUgb2YgYSBzeW1ib2xpYyBsaW5rLgogVGhlIHZhbHVlIGlzIHRo ZSBsaW5rIHRhcmdldCwgYXMgYSBzdHJpbmcuCkBAIC0yNzY4LDkgKzI3OTMsNiBAQAogICAo TGlzcF9PYmplY3QgZmlsZW5hbWUpCiB7CiAgIExpc3BfT2JqZWN0IGhhbmRsZXI7Ci0gIGNo YXIgKmJ1ZjsKLSAgTGlzcF9PYmplY3QgdmFsOwotICBjaGFyIHJlYWRsaW5rX2J1ZltSRUFE TElOS19CVUZTSVpFXTsKIAogICBDSEVDS19TVFJJTkcgKGZpbGVuYW1lKTsKICAgZmlsZW5h bWUgPSBGZXhwYW5kX2ZpbGVfbmFtZSAoZmlsZW5hbWUsIFFuaWwpOwpAQCAtMjc4MywxNyAr MjgwNSw3IEBACiAKICAgZmlsZW5hbWUgPSBFTkNPREVfRklMRSAoZmlsZW5hbWUpOwogCi0g IGJ1ZiA9IGVtYWNzX3JlYWRsaW5rIChTU0RBVEEgKGZpbGVuYW1lKSwgcmVhZGxpbmtfYnVm KTsKLSAgaWYgKCEgYnVmKQotICAgIHJldHVybiBRbmlsOwotCi0gIHZhbCA9IGJ1aWxkX3N0 cmluZyAoYnVmKTsKLSAgaWYgKGJ1ZlswXSA9PSAnLycgJiYgc3RyY2hyIChidWYsICc6Jykp Ci0gICAgdmFsID0gY29uY2F0MiAoYnVpbGRfc3RyaW5nICgiLzoiKSwgdmFsKTsKLSAgaWYg KGJ1ZiAhPSByZWFkbGlua19idWYpCi0gICAgeGZyZWUgKGJ1Zik7Ci0gIHZhbCA9IERFQ09E RV9GSUxFICh2YWwpOwotICByZXR1cm4gdmFsOworICByZXR1cm4gZW1hY3NfcmVhZGxpbmth dCAoQVRfRkRDV0QsIFNTREFUQSAoZmlsZW5hbWUpKTsKIH0KIAogREVGVU4gKCJmaWxlLWRp cmVjdG9yeS1wIiwgRmZpbGVfZGlyZWN0b3J5X3AsIFNmaWxlX2RpcmVjdG9yeV9wLCAxLCAx LCAwLAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9maWxlbG9jay5jJwotLS0gc3JjL2ZpbGVs b2NrLmMJMjAxMy0wMS0wMSAwOToxMTowNSArMDAwMAorKysgc3JjL2ZpbGVsb2NrLmMJMjAx My0wMS0yNCAwNjo1MToyNSArMDAwMApAQCAtMzkwLDEyICszOTAsMTQgQEAKICAgbG9ja19p bmZvX3R5cGUgbG9jYWxfb3duZXI7CiAgIGludG1heF90IG47CiAgIGNoYXIgKmF0LCAqZG90 LCAqY29sb247Ci0gIGNoYXIgcmVhZGxpbmtfYnVmW1JFQURMSU5LX0JVRlNJWkVdOwotICBj aGFyICpsZmluZm8gPSBlbWFjc19yZWFkbGluayAobGZuYW1lLCByZWFkbGlua19idWYpOwor ICBMaXNwX09iamVjdCBsZmluZm9fb2JqZWN0ID0gZW1hY3NfcmVhZGxpbmthdCAoQVRfRkRD V0QsIGxmbmFtZSk7CisgIGNoYXIgKmxmaW5mbzsKKyAgc3RydWN0IGdjcHJvIGdjcHJvMTsK IAogICAvKiBJZiBub25leGlzdGVudCBsb2NrIGZpbGUsIGFsbCBpcyB3ZWxsOyBvdGhlcndp c2UsIGdvdCBzdHJhbmdlIGVycm9yLiAqLwotICBpZiAoIWxmaW5mbykKKyAgaWYgKE5JTFAg KGxmaW5mb19vYmplY3QpKQogICAgIHJldHVybiBlcnJubyA9PSBFTk9FTlQgPyAwIDogLTE7 CisgIGxmaW5mbyA9IFNTREFUQSAobGZpbmZvX29iamVjdCk7CiAKICAgLyogRXZlbiBpZiB0 aGUgY2FsbGVyIGRvZXNuJ3Qgd2FudCB0aGUgb3duZXIgaW5mbywgd2Ugc3RpbGwgaGF2ZSB0 bwogICAgICByZWFkIGl0IHRvIGRldGVybWluZSByZXR1cm4gdmFsdWUuICAqLwpAQCAtNDA3 LDEyICs0MDksOSBAQAogICBhdCA9IHN0cnJjaHIgKGxmaW5mbywgJ0AnKTsKICAgZG90ID0g c3RycmNociAobGZpbmZvLCAnLicpOwogICBpZiAoIWF0IHx8ICFkb3QpCi0gICAgewotICAg ICAgaWYgKGxmaW5mbyAhPSByZWFkbGlua19idWYpCi0JeGZyZWUgKGxmaW5mbyk7Ci0gICAg ICByZXR1cm4gLTE7Ci0gICAgfQorICAgIHJldHVybiAtMTsKICAgbGVuID0gYXQgLSBsZmlu Zm87CisgIEdDUFJPMSAobGZpbmZvX29iamVjdCk7CiAgIG93bmVyLT51c2VyID0geG1hbGxv YyAobGVuICsgMSk7CiAgIG1lbWNweSAob3duZXItPnVzZXIsIGxmaW5mbywgbGVuKTsKICAg b3duZXItPnVzZXJbbGVuXSA9IDA7CkBAIC00NDUsOCArNDQ0LDcgQEAKICAgb3duZXItPmhv c3RbbGVuXSA9IDA7CiAKICAgLyogV2UncmUgZG9uZSBsb29raW5nIGF0IHRoZSBsaW5rIGlu Zm8uICAqLwotICBpZiAobGZpbmZvICE9IHJlYWRsaW5rX2J1ZikKLSAgICB4ZnJlZSAobGZp bmZvKTsKKyAgVU5HQ1BSTzsKIAogICAvKiBPbiBjdXJyZW50IGhvc3Q/ICAqLwogICBpZiAo U1RSSU5HUCAoRnN5c3RlbV9uYW1lICgpKQoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9saXNw LmgnCi0tLSBzcmMvbGlzcC5oCTIwMTMtMDEtMjUgMTc6MTM6MzEgKzAwMDAKKysrIHNyYy9s aXNwLmgJMjAxMy0wMS0yOCAwMjo1MToyNSArMDAwMApAQCAtMzI5NCw2ICszMjk0LDcgQEAK IGV4dGVybiBMaXNwX09iamVjdCByZXN0b3JlX3BvaW50X3Vud2luZCAoTGlzcF9PYmplY3Qp OwogZXh0ZXJuIF9Ob3JldHVybiB2b2lkIHJlcG9ydF9maWxlX2Vycm9yIChjb25zdCBjaGFy ICosIExpc3BfT2JqZWN0KTsKIGV4dGVybiBib29sIGludGVybmFsX2RlbGV0ZV9maWxlIChM aXNwX09iamVjdCk7CitleHRlcm4gTGlzcF9PYmplY3QgZW1hY3NfcmVhZGxpbmthdCAoaW50 LCBjb25zdCBjaGFyICopOwogZXh0ZXJuIGJvb2wgZmlsZV9kaXJlY3RvcnlfcCAoY29uc3Qg Y2hhciAqKTsKIGV4dGVybiBib29sIGZpbGVfYWNjZXNzaWJsZV9kaXJlY3RvcnlfcCAoY29u c3QgY2hhciAqKTsKIGV4dGVybiB2b2lkIGluaXRfZmlsZWlvICh2b2lkKTsKQEAgLTM1NjYs OCArMzU2Nyw2IEBACiBleHRlcm4gaW50IGVtYWNzX2Nsb3NlIChpbnQpOwogZXh0ZXJuIHB0 cmRpZmZfdCBlbWFjc19yZWFkIChpbnQsIGNoYXIgKiwgcHRyZGlmZl90KTsKIGV4dGVybiBw dHJkaWZmX3QgZW1hY3Nfd3JpdGUgKGludCwgY29uc3QgY2hhciAqLCBwdHJkaWZmX3QpOwot ZW51bSB7IFJFQURMSU5LX0JVRlNJWkUgPSAxMDI0IH07Ci1leHRlcm4gY2hhciAqZW1hY3Nf cmVhZGxpbmsgKGNvbnN0IGNoYXIgKiwgY2hhciBbUkVBRExJTktfQlVGU0laRV0pOwogCiBl eHRlcm4gdm9pZCB1bmxvY2tfYWxsX2ZpbGVzICh2b2lkKTsKIGV4dGVybiB2b2lkIGxvY2tf ZmlsZSAoTGlzcF9PYmplY3QpOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9zeXNkZXAuYycK LS0tIHNyYy9zeXNkZXAuYwkyMDEzLTAxLTEzIDIwOjAzOjAxICswMDAwCisrKyBzcmMvc3lz ZGVwLmMJMjAxMy0wMS0yNCAwNjo1MToyNSArMDAwMApAQCAtMzAsOSArMzAsNyBAQAogI2lu Y2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCi0jaW5jbHVkZSA8YWxs b2NhdG9yLmg+CiAjaW5jbHVkZSA8Yy1jdHlwZS5oPgotI2luY2x1ZGUgPGNhcmVhZGxpbmth dC5oPgogI2luY2x1ZGUgPGlnbm9yZS12YWx1ZS5oPgogI2luY2x1ZGUgPHV0aW1lbnMuaD4K IApAQCAtMjI0NywyMiArMjI0NSw2IEBACiAKICAgcmV0dXJuIChieXRlc193cml0dGVuKTsK IH0KLQotc3RhdGljIHN0cnVjdCBhbGxvY2F0b3IgY29uc3QgZW1hY3Nfbm9yZWFsbG9jX2Fs bG9jYXRvciA9Ci0gIHsgeG1hbGxvYywgTlVMTCwgeGZyZWUsIG1lbW9yeV9mdWxsIH07Ci0K LS8qIEdldCB0aGUgc3ltYm9saWMgbGluayB2YWx1ZSBvZiBGSUxFTkFNRS4gIFJldHVybiBh IHBvaW50ZXIgdG8gYQotICAgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nLiAgSWYgcmVhZGxpbmsg ZmFpbHMsIHJldHVybiBOVUxMIGFuZCBzZXQKLSAgIGVycm5vLiAgSWYgdGhlIHZhbHVlIGZp dHMgaW4gSU5JVElBTF9CVUYsIHJldHVybiBJTklUSUFMX0JVRi4KLSAgIE90aGVyd2lzZSwg YWxsb2NhdGUgbWVtb3J5IGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIHRoYXQgbWVtb3J5LiAg SWYKLSAgIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLCBkaWFnbm9zZSBhbmQgZmFpbCB3aXRo b3V0IHJldHVybmluZy4gIElmCi0gICBzdWNjZXNzZnVsLCBzdG9yZSB0aGUgbGVuZ3RoIG9m IHRoZSBzeW1ib2xpYyBsaW5rIGludG8gKkxJTktMRU4uICAqLwotY2hhciAqCi1lbWFjc19y ZWFkbGluayAoY2hhciBjb25zdCAqZmlsZW5hbWUsIGNoYXIgaW5pdGlhbF9idWZbUkVBRExJ TktfQlVGU0laRV0pCi17Ci0gIHJldHVybiBjYXJlYWRsaW5rYXQgKEFUX0ZEQ1dELCBmaWxl bmFtZSwgaW5pdGlhbF9idWYsIFJFQURMSU5LX0JVRlNJWkUsCi0JCSAgICAgICAmZW1hY3Nf bm9yZWFsbG9jX2FsbG9jYXRvciwgY2FyZWFkbGlua2F0Y3dkKTsKLX0KIAwKIC8qIFJldHVy biBhIHN0cnVjdCB0aW1ldmFsIHRoYXQgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIFQuCiAg ICBVc2UgdGhlIGxlYXN0IHRpbWV2YWwgbm90IGxlc3MgdGhhbiBULgoKPT09IG1vZGlmaWVk IGZpbGUgJ3NyYy93MzIuYycKLS0tIHNyYy93MzIuYwkyMDEzLTAxLTI4IDE0OjQxOjA4ICsw MDAwCisrKyBzcmMvdzMyLmMJMjAxMy0wMS0yOSAyMToxMjowOSArMDAwMApAQCAtNDE5NCw2 ICs0MTk0LDMwIEBACiAgIHJldHVybiBzdGF0X3dvcmtlciAocGF0aCwgYnVmLCAwKTsKIH0K IAoraW50Citmc3RhdGF0IChpbnQgZmQsIGNoYXIgY29uc3QgKm5hbWUsIHN0cnVjdCBzdGF0 ICpzdCwgaW50IGZsYWdzKQoreworICAvKiBSZWx5IG9uIGEgaGFjazogYW4gb3BlbiBkaXJl Y3RvcnkgaXMgbW9kZWxlZCBhcyBmaWxlIGRlc2NyaXB0b3IgMC4KKyAgICAgVGhpcyBpcyBn b29kIGVub3VnaCBmb3IgdGhlIGN1cnJlbnQgdXNhZ2UgaW4gRW1hY3MsIGJ1dCBpcyBmcmFn aWxlLgorCisgICAgIEZJWE1FOiBBZGQgcHJvcGVyIHN1cHBvcnQgZm9yIGZkb3BlbmRpciwg ZnN0YXRhdGF0LCByZWFkbGlua2F0LgorICAgICBHbnVsaWIgZG9lcyB0aGlzIGFuZCBjYW4g c2VydmUgYXMgYSBtb2RlbC4gICovCisgIGNoYXIgZnVsbG5hbWVbTUFYX1BBVEhdOworCisg IGlmIChmZCAhPSBBVF9GRENXRCkKKyAgICB7CisgICAgICBpZiAoX3NucHJpbnRmIChmdWxs bmFtZSwgc2l6ZW9mIGZ1bGxuYW1lLCAiJXMvJXMiLCBkaXJfcGF0aG5hbWUsIG5hbWUpCisJ ICA8IDApCisJeworCSAgZXJybm8gPSBFTkFNRVRPT0xPTkc7CisJICByZXR1cm4gLTE7CisJ fQorICAgICAgbmFtZSA9IGZ1bGxuYW1lOworICAgIH0KKworICByZXR1cm4gc3RhdF93b3Jr ZXIgKG5hbWUsIHN0LCAhIChmbGFncyAmIEFUX1NZTUxJTktfTk9GT0xMT1cpKTsKK30KKwog LyogUHJvdmlkZSBmc3RhdCBhbmQgdXRpbWUgYXMgd2VsbCBhcyBzdGF0IGZvciBjb25zaXN0 ZW50IGhhbmRsaW5nIG9mCiAgICBmaWxlIHRpbWVzdGFtcHMuICovCiBpbnQKQEAgLTQ2OTcs NiArNDcyMSwyOCBAQAogICByZXR1cm4gcmV0dmFsOwogfQogCitzc2l6ZV90CityZWFkbGlu a2F0IChpbnQgZmQsIGNoYXIgY29uc3QgKm5hbWUsIGNoYXIgKmJ1ZmZlciwKKwkgICAgc2l6 ZV90IGJ1ZmZlcl9zaXplKQoreworICAvKiBSZWx5IG9uIGEgaGFjazogYW4gb3BlbiBkaXJl Y3RvcnkgaXMgbW9kZWxlZCBhcyBmaWxlIGRlc2NyaXB0b3IgMCwKKyAgICAgYXMgaW4gZnN0 YXRhdC4gIEZJWE1FOiBBZGQgcHJvcGVyIHN1cHBvcnQgZm9yIHJlYWRsaW5rYXQuICAqLwor ICBjaGFyIGZ1bGxuYW1lW01BWF9QQVRIXTsKKworICBpZiAoZmQgIT0gQVRfRkRDV0QpCisg ICAgeworICAgICAgaWYgKF9zbnByaW50ZiAoZnVsbG5hbWUsIHNpemVvZiBmdWxsbmFtZSwg IiVzLyVzIiwgZGlyX3BhdGhuYW1lLCBuYW1lKQorCSAgPCAwKQorCXsKKwkgIGVycm5vID0g RU5BTUVUT09MT05HOworCSAgcmV0dXJuIC0xOworCX0KKyAgICAgIG5hbWUgPSBmdWxsbmFt ZTsKKyAgICB9CisKKyAgcmV0dXJuIHJlYWRsaW5rIChuYW1lLCBidWZmZXIsIGJ1ZmZlcl9z aXplKTsKK30KKwogLyogSWYgRklMRSBpcyBhIHN5bWxpbmssIHJldHVybiBpdHMgdGFyZ2V0 IChzdG9yZWQgaW4gYSBzdGF0aWMKICAgIGJ1ZmZlcik7IG90aGVyd2lzZSByZXR1cm4gRklM RS4KIApAQCAtNTAyMSwxMiArNTA2Nyw2IEBACiAgIGNoYXIgbGlua25hbWVbTUFYX1BBVEhd OwogICBzc2l6ZV90IGxpbmtfc2l6ZTsKIAotICBpZiAoZmQgIT0gQVRfRkRDV0QpCi0gICAg ewotICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0K ICAgbGlua19zaXplID0gcHJlYWRsaW5rYXQgKGZkLCBmaWxlbmFtZSwgbGlua25hbWUsIHNp emVvZihsaW5rbmFtZSkpOwogCiAgIGlmIChsaW5rX3NpemUgPiAwKQpAQCAtNTA0NCwxNCAr NTA4NCw2IEBACiAgIHJldHVybiBOVUxMOwogfQogCi1zc2l6ZV90Ci1jYXJlYWRsaW5rYXRj d2QgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZW5hbWUsIGNoYXIgKmJ1ZmZlciwKLSAgICAg ICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlcl9zaXplKQotewotICAodm9pZCkgZmQ7Ci0gIHJl dHVybiByZWFkbGluayAoZmlsZW5hbWUsIGJ1ZmZlciwgYnVmZmVyX3NpemUpOwotfQotCiAM CiAvKiBTdXBwb3J0IGZvciBicm93c2luZyBvdGhlciBwcm9jZXNzZXMgYW5kIHRoZWlyIGF0 dHJpYnV0ZXMuICBTZWUKICAgIHByb2Nlc3MuYyBmb3IgdGhlIExpc3AgYmluZGluZ3MuICAq LwoK --------------080106010007000804020801--