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#12980: 24.3.50; Zombie process left after call-process Date: Wed, 28 Nov 2012 18:30:08 -0800 Organization: UCLA Computer Science Department Message-ID: <50B6C8B0.3000403@cs.ucla.edu> References: <50B3EF71.3020805@cs.ucla.edu> <83ehjfxcg7.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------090006010900090003030103" X-Trace: ger.gmane.org 1354156274 18495 80.91.229.3 (29 Nov 2012 02:31:14 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 29 Nov 2012 02:31:14 +0000 (UTC) Cc: 9488@debbugs.gnu.org, hanche@math.ntnu.no, 12980@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Nov 29 03:31:26 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1TdtuP-0007AR-Cm for geb-bug-gnu-emacs@m.gmane.org; Thu, 29 Nov 2012 03:31:25 +0100 Original-Received: from localhost ([::1]:39628 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TdtuE-00066a-7a for geb-bug-gnu-emacs@m.gmane.org; Wed, 28 Nov 2012 21:31:14 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:59830) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tdtu8-000648-9f for bug-gnu-emacs@gnu.org; Wed, 28 Nov 2012 21:31:11 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Tdtu4-0001xN-Uj for bug-gnu-emacs@gnu.org; Wed, 28 Nov 2012 21:31:08 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:34090) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tdtu4-0001xG-Qf for bug-gnu-emacs@gnu.org; Wed, 28 Nov 2012 21:31:04 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1Tdtvx-0000bD-Nm for bug-gnu-emacs@gnu.org; Wed, 28 Nov 2012 21:33:01 -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: Thu, 29 Nov 2012 02:33:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 12980 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 12980-submit@debbugs.gnu.org id=B12980.13541563372249 (code B ref 12980); Thu, 29 Nov 2012 02:33:01 +0000 Original-Received: (at 12980) by debbugs.gnu.org; 29 Nov 2012 02:32:17 +0000 Original-Received: from localhost ([127.0.0.1]:44339 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TdtvC-0000aB-SU for submit@debbugs.gnu.org; Wed, 28 Nov 2012 21:32:16 -0500 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:58994) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Tdtv6-0000Zw-AT; Wed, 28 Nov 2012 21:32:13 -0500 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 5FB7A39E8105; Wed, 28 Nov 2012 18:30:10 -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 8Dm0DiFeRMx8; Wed, 28 Nov 2012 18:30:08 -0800 (PST) Original-Received: from [192.168.1.3] (pool-71-189-154-249.lsanca.fios.verizon.net [71.189.154.249]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 75CE139E8008; Wed, 28 Nov 2012 18:30:08 -0800 (PST) User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/17.0 Thunderbird/17.0 In-Reply-To: <83ehjfxcg7.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:67574 Archived-At: This is a multi-part message in MIME format. --------------090006010900090003030103 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Eli, thanks for your review. I'm attaching a heavily-revised patch, which tries to take your comments into account, along with several other issues I noticed in my own analysis and testing. In response to your comments: On 11/27/2012 08:00 AM, Eli Zaretskii wrote: > I'm confused by this commentary The new patch removes that function and its associated commentary. > The feature, whereby this function (call-process) could return a > description of errno, is hereby lost. That's quite nasty in the MSDOS > case That feature is supported only by MS-DOS, right? On all other platforms an error is thrown. Anyway, the new patch attempts to preserve the MS-DOS behavior. > This is wrong for MSDOS, because the temporary file is created before > attempting to launch the process, and so it needs to be cleaned up > even if we failed to launch the child process. The new patch attempts to undo that change for MSDOS. > This seem to assume that the only trouble in call-process could be > from some signal. Why is that true? By the time that part of the code is reached, any other failures (e.g., fork failure) have already been diagnosed and an error would have been thrown or call-process would have returned before getting to that location. > Why is this eassert a good idea? We don't need to enforce the Posix > spec at a price of crashing Emacs on users, do we? What bad things > can happen if you see some other errno here? It's not a question of enforcing Posix semantics. It's a question of catching potentially serious internal programming errors in Emacs. That part of the code has been completely rewritten, so the details of the comment is moot. However, the new code has an "eassert (errno == EINTR)" in the new get_child_status function. I preceded that with a comment to try to help explain why the eassert is there. > The condition testing that status is non-NULL must stay, because that > argument can be NULL, even if Emacs currently never uses that option. OK, thanks, I did that. > it would be nice to have somewhere a commentary with an > overview of how termination of child processes is handled. I added some, before handle_child_signal. --------------090006010900090003030103 Content-Type: text/plain; charset=UTF-8; name="g_spawn_sync.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="g_spawn_sync.txt" PT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9DaGFuZ2VMb2cnCi0tLSBzcmMvQ2hhbmdlTG9nCTIw MTItMTEtMjkgMDA6MzY6MjIgKzAwMDAKKysrIHNyYy9DaGFuZ2VMb2cJMjAxMi0xMS0yOSAw MjoyNDo0NSArMDAwMApAQCAtMSw1ICsxLDYyIEBACiAyMDEyLTExLTI5ICBQYXVsIEVnZ2Vy dCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KIAorCURvbid0IGxldCBjYWxsLXByb2Nlc3MgYmUg YSB6b21iaWUgZmFjdG9yeSAoQnVnIzEyOTgwKS4KKwlGaXhpbmcgdGhpcyBidWcgcmVxdWly ZWQgc29tZSBjbGVhbnVwIG9mIHRoZSBzaWduYWwtaGFuZGxpbmcgY29kZS4KKwlBcyBhIHNp ZGUgZWZmZWN0LCB0aGlzIGNoYW5nZSBhbHNvIGZpeGVzIGEgbG9uZ3N0YW5kaW5nIHJhcmUg cmFjZQorCWNvbmRpdGlvbiB3aGVyZWJ5IEVtYWNzIGNvdWxkIG1pc3Rha2VubHkga2lsbCB1 bnJlbGF0ZWQgcHJvY2Vzc2VzLAorCWFuZCBpdCBmaXhlcyBhIGJ1ZyB3aGVyZSBhIHNlY29u ZCBDLWcgZG9lcyBub3Qga2lsbCBhIHJlY2FsY2l0cmFudAorCXN5bmNocm9ub3VzIHByb2Nl c3MgaW4gR05VL0xpbnV4IGFuZCBzaW1pbGFyIHBsYXRmb3Jtcy4KKwlUaGUgcGF0Y2ggc2hv dWxkIGFsc28gZml4IHRoZSBsYXN0IHZlc3RpZ2VzIG9mIEJ1ZyM5NDg4LAorCWEgYnVnIHdo aWNoIGhhcyBtb3N0bHkgYmVlbiBmaXhlZCBvbiB0aGUgdHJ1bmsgYnkgb3RoZXIgY2hhbmdl cy4KKwkqIGNhbGxwcm9jLmMsIHByb2Nlc3MuaCAoc3luY2hfcHJvY2Vzc19hbGl2ZSwgc3lu Y2hfcHJvY2Vzc19kZWF0aCkKKwkoc3luY2hfcHJvY2Vzc190ZXJtc2lnLCBzeW5jX3Byb2Nl c3NfcmV0Y29kZSk6CisJUmVtb3ZlLiAgQWxsIHVzZXMgcmVtb3ZlZCwgdG8gc2ltcGxpZnkg YW5hbHlzaXMgYW5kIHNvIHRoYXQKKwlsZXNzIGNvbnNpbmcgaXMgZG9uZSBpbnNpZGUgY3Jp dGljYWwgc2VjdGlvbnMuCisJKiBjYWxscHJvYy5jIChjYWxsX3Byb2Nlc3NfZXhpdGVkKTog UmVtb3ZlLiAgQWxsIHVzZXMgcmVwbGFjZWQKKwl3aXRoICFzeW5jaF9wcm9jZXNzX3BpZC4K KwkqIGNhbGxwcm9jLmMgKHN5bmNoX3Byb2Nlc3NfcGlkLCBzeW5jaF9wcm9jZXNzX2ZkKTog TmV3IHN0YXRpYyB2YXJzLgorCVRoZXNlIHRha2UgdGhlIHJvbGUgb2Ygd2hhdCB1c2VkIHRv IGJlIGluIHVud2luZC1wcm90ZWN0IGFyZy4KKwlBbGwgdXNlcyBjaGFuZ2VkLgorCShibG9j a19jaGlsZF9zaWduYWwsIHVuYmxvY2tfY2hpbGRfc2lnbmFsKToKKwlOZXcgZnVuY3Rpb25z LCB0byBhdm9pZCByYWNlcyB0aGF0IGNvdWxkIGtpbGwgaW5ub2NlbnQtdmljdGltIHByb2Nl c3Nlcy4KKwkoY2FsbF9wcm9jZXNzX2tpbGwsIGNhbGxfcHJvY2Vzc19jbGVhbnVwLCBGY2Fs bF9wcm9jZXNzKTogVXNlIHRoZW0uCisJKGNhbGxfcHJvY2Vzc19raWxsKTogUmVjb3JkIGtp bGxlZCBwcm9jZXNzZXMgYXMgZGVsZXRlZCwgc28gdGhhdAorCXpvbWJpZXMgZG8gbm90IGNs dXR0ZXIgdXAgdGhlIHN5c3RlbS4gIERvIHRoaXMgaW5zaWRlIGEgY3JpdGljYWwKKwlzZWN0 aW9uLCB0byBhdm9pZCBhIHJhY2UgdGhhdCB3b3VsZCBhbGxvdyB0aGUgY2x1dHRlci4KKwko Y2FsbF9wcm9jZXNzX2NsZWFudXApOiBGaXggY29kZSBzbyB0aGF0IHRoZSBzZWNvbmQgQy1n IHdvcmtzIGFnYWluCisJb24gY29tbW9uIHBsYXRmb3JtcyBzdWNoIGFzIEdOVS9MaW51eC4K KwkoRmNhbGxfcHJvY2Vzcyk6IENyZWF0ZSB0aGUgY2hpbGQgcHJvY2VzcyBpbiBhIGNyaXRp Y2FsIHNlY3Rpb24sCisJdG8gZml4IGEgcmFjZSBjb25kaXRpb24uICBJZiBjcmVhdGluZyBh biBhc3luY2hyb25vdXMgcHJvY2VzcywKKwlyZWNvcmQgaXQgYXMgZGVsZXRlZCBzbyB0aGF0 IHpvbWJpZXMgZG8gbm90IGNsdXR0ZXIgdXAgdGhlIHN5c3RlbS4KKwlEbyB1bndpbmQtcHJv dGVjdCBmb3IgV0lORE9XU05UIHRvbywgYXMgdGhhdCdzIHNpbXBsZXIgaW4gdGhlCisJbGln aHQgb2YgdGhlc2UgY2hhbmdlcy4gIE9taXQgdW5uZWNlc3NhcnkgY2FsbCB0byBlbWFjc19j bG9zZQorCWJlZm9yZSBmYWlsdXJlLCBhcyB0aGUgdW53aW5kLXByb3RlY3QgY29kZSBkb2Vz IHRoYXQuCisJKiBjYWxscHJvYy5jIChjYWxsX3Byb2Nlc3NfY2xlYW51cCk6CisJKiB3MzJw cm9jLmMgKHdhaXRwaWQpOiBTaW1wbGlmeSBub3cgdGhhdCBzeW5jaF9wcm9jZXNzX2FsaXZl IGlzIGdvbmUuCisJKiBwcm9jZXNzLmMgKHJlY29yZF9kZWxldGVkX3BpZCk6IE5ldyBmdW5j dGlvbiwgY29udGFpbmluZworCWNvZGUgcmVmYWN0b3JlZCBvdXQgb2YgRmRlbGV0ZV9wcm9j ZXNzLgorCShGZGVsZXRlX3Byb2Nlc3MpOiBVc2UgaXQuCisJKHByb2Nlc3Nfc3RhdHVzX3Jl dHJpZXZlZCk6IFJlbW92ZS4gIEFsbCBjYWxsZXJzIGNoYW5nZWQgdG8gdXNlCisJY2hpbGRf c3RhdHVzX2NoYW5nZS4KKwkocmVjb3JkX2NoaWxkX3N0YXR1c19jaGFuZ2UpOiBSZW1vdmUs IGZvbGRpbmcgaXRzIGNvbnRlbnRzIGludG8gLi4uCisJKGhhbmRsZV9jaGlsZF9zaWduYWwp OiAuLi4gdGhpcyBzaWduYWwgaGFuZGxlci4gIE5vdywgdGhpcworCWZ1bmN0aW9uIGlzIHB1 cmVseSBhIGhhbmRsZXIgZm9yIFNJR0NITEQsIGFuZCBpcyBub3QgY2FsbGVkIGFmdGVyCisJ YSBzeW5jaHJvbm91cyB3YWl0cGlkIHJldHVybnM7IHRoZSBzeW5jaHJvbm91cyBjb2RlIGlz IG1vdmVkIHRvCisJd2FpdF9mb3JfdGVybWluYXRpb24uICBUaGVyZSBpcyBubyBuZWVkIHRv IHdvcnJ5IGFib3V0IHJlYXBpbmcKKwltb3JlIHRoYW4gb25lIGNoaWxkIG5vdy4KKwkqIHN5 c2RlcC5jIChnZXRfY2hpbGRfc3RhdHVzLCBjaGlsZF9zdGF0dXNfY2hhbmdlZCk6IE5ldyBm dW5jdGlvbnMuCisJKHdhaXRfZm9yX3Rlcm1pbmF0aW9uKTogTm93IHRha2VzIGludCAqIHN0 YXR1cyBhbmQgYm9vbAorCWludGVycnVwdGlibGUgYXJndW1lbnRzLCB0b28uICBEbyBub3Qg cmVjb3JkIGNoaWxkIHN0YXR1cyBjaGFuZ2U7CisJdGhhdCdzIG5vdyB0aGUgY2FsbGVyJ3Mg cmVzcG9uc2liaWxpdHkuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgorCVJlaW1wbGVtZW50IGlu IHRlcm1zIG9mIGdldF9jaGlsZF9zdGF0dXMuCisJKHdhaXRfZm9yX3Rlcm1pbmF0aW9uXzEs IGludGVycnVwdGlibGVfd2FpdF9mb3JfdGVybWluYXRpb24pOgorCVJlbW92ZS4gIEFsbCBj YWxsZXJzIGNoYW5nZWQgdG8gdXNlIHdhaXRfZm9yX3Rlcm1pbmF0aW9uLgorCSogc3lzd2Fp dC5oOiBJbmNsdWRlIDxzdGRib29sLmg+LCBmb3IgYm9vbC4KKwkocmVjb3JkX2NoaWxkX3N0 YXR1c19jaGFuZ2UsIGludGVycnVwdGlibGVfd2FpdF9mb3JfdGVybWluYXRpb24pOgorCVJl bW92ZSBkZWNscy4KKwkocmVjb3JkX2RlbGV0ZWRfcGlkLCBjaGlsZF9zdGF0dXNfY2hhbmdl ZCk6IE5ldyBkZWNscy4KKwkod2FpdF9mb3JfdGVybWluYXRpb24pOiBBZGp1c3QgdG8gQVBJ IGNoYW5nZXMgbm90ZWQgYWJvdmUuCisKIAkqIGNhbGxwcm9jLmMgKEZjYWxsX3Byb2Nlc3Mp OiBEb24ndCBtaXNyZXBvcnQgdmZvcmsgZmFpbHVyZS4KIAogMjAxMi0xMS0yOCAgUGF1bCBF Z2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2Nh bGxwcm9jLmMnCi0tLSBzcmMvY2FsbHByb2MuYwkyMDEyLTExLTI5IDAwOjM2OjIyICswMDAw CisrKyBzcmMvY2FsbHByb2MuYwkyMDEyLTExLTI5IDAyOjI0OjQ1ICswMDAwCkBAIC02Nyw4 OCArNjcsMTEwIEBACiAvKiBQYXR0ZXJuIHVzZWQgYnkgY2FsbC1wcm9jZXNzLXJlZ2lvbiB0 byBtYWtlIHRlbXAgZmlsZXMuICAqLwogc3RhdGljIExpc3BfT2JqZWN0IFZ0ZW1wX2ZpbGVf bmFtZV9wYXR0ZXJuOwogCi0vKiBUcnVlIGlmIHdlIGFyZSBhYm91dCB0byBmb3JrIG9mZiBh IHN5bmNocm9ub3VzIHByb2Nlc3Mgb3IgaWYgd2UKLSAgIGFyZSB3YWl0aW5nIGZvciBpdC4g ICovCi1ib29sIHN5bmNoX3Byb2Nlc3NfYWxpdmU7Ci0KLS8qIE5vbnplcm8gPT4gdGhpcyBp cyBhIHN0cmluZyBleHBsYWluaW5nIGRlYXRoIG9mIHN5bmNocm9ub3VzIHN1YnByb2Nlc3Mu ICAqLwotY29uc3QgY2hhciAqc3luY2hfcHJvY2Vzc19kZWF0aDsKLQotLyogTm9uemVybyA9 PiB0aGlzIGlzIHRoZSBzaWduYWwgbnVtYmVyIHRoYXQgdGVybWluYXRlZCB0aGUgc3VicHJv Y2Vzcy4gICovCi1pbnQgc3luY2hfcHJvY2Vzc190ZXJtc2lnOwotCi0vKiBJZiBzeW5jaF9w cm9jZXNzX2RlYXRoIGlzIHplcm8sCi0gICB0aGlzIGlzIGV4aXQgY29kZSBvZiBzeW5jaHJv bm91cyBzdWJwcm9jZXNzLiAgKi8KLWludCBzeW5jaF9wcm9jZXNzX3JldGNvZGU7Ci0KKy8q IFRoZSBuZXh0IHR3byB2YXJpYWJsZXMgYXJlIHZhbGlkIG9ubHkgd2hpbGUgcmVjb3JkLXVu d2luZC1wcm90ZWN0CisgICBpcyBpbiBwbGFjZSBkdXJpbmcgY2FsbC1wcm9jZXNzIGZvciBh IHN5bmNocm9ub3VzIHN1YnByb2Nlc3MuICBBdAorICAgb3RoZXIgdGltZXMsIHRoZWlyIGNv bnRlbnRzIGFyZSBpcnJlbGV2YW50LiAgRG9pbmcgdGhpcyB2aWEgc3RhdGljCisgICBDIHZh cmlhYmxlcyBpcyBtb3JlIGNvbnZlbmllbnQgdGhhbiBwdXR0aW5nIHRoZW0gaW50byB0aGUg YXJndW1lbnRzCisgICBvZiByZWNvcmQtdW53aW5kLXByb3RlY3QsIGFzIHRoZXkgbmVlZCB0 byBiZSB1cGRhdGVkIGF0IHJhbmRvbWlzaAorICAgdGltZXMgaW4gdGhlIGNvZGUsIGFuZCBM aXNwIGNhbm5vdCBhbHdheXMgc3RvcmUgdGhlc2UgdmFsdWVzIGFzCisgICBFbWFjcyBpbnRl Z2Vycy4gIEl0J3Mgc2FmZSB0byB1c2Ugc3RhdGljIHZhcmlhYmxlcyBoZXJlLCBhcyB0aGUK KyAgIGNvZGUgaXMgbmV2ZXIgaW52b2tlZCByZWVudHJhbnRseS4gICovCisKKy8qIElmIG5v bnplcm8sIGEgcHJvY2Vzcy1JRCB0aGF0IGhhcyBub3QgYmVlbiByZWFwZWQuICAqLworc3Rh dGljIHBpZF90IHN5bmNoX3Byb2Nlc3NfcGlkOworCisvKiBJZiBub25uZWdhdGl2ZSwgYSBm aWxlIGRlc2NyaXB0b3IgdGhhdCBoYXMgbm90IGJlZW4gY2xvc2VkLiAgKi8KK3N0YXRpYyBp bnQgc3luY2hfcHJvY2Vzc19mZDsKIAwKKy8qIEJsb2NrIFNJR0NITEQuICAqLworCitzdGF0 aWMgdm9pZAorYmxvY2tfY2hpbGRfc2lnbmFsICh2b2lkKQoreworI2lmZGVmIFNJR0NITEQK KyAgc2lnc2V0X3QgYmxvY2tlZDsKKyAgc2lnZW1wdHlzZXQgKCZibG9ja2VkKTsKKyAgc2ln YWRkc2V0ICgmYmxvY2tlZCwgU0lHQ0hMRCk7CisgIHB0aHJlYWRfc2lnbWFzayAoU0lHX0JM T0NLLCAmYmxvY2tlZCwgMCk7CisjZW5kaWYKK30KKworLyogVW5ibG9jayBTSUdDSExELiAg Ki8KKworc3RhdGljIHZvaWQKK3VuYmxvY2tfY2hpbGRfc2lnbmFsICh2b2lkKQoreworI2lm ZGVmIFNJR0NITEQKKyAgcHRocmVhZF9zaWdtYXNrIChTSUdfU0VUTUFTSywgJmVtcHR5X21h c2ssIDApOworI2VuZGlmCit9CisKKy8qIENsZWFuIHVwIHdoZW4gZXhpdGluZyBjYWxsX3By b2Nlc3NfY2xlYW51cC4gICovCisKK3N0YXRpYyBMaXNwX09iamVjdAorY2FsbF9wcm9jZXNz X2tpbGwgKExpc3BfT2JqZWN0IGlnbm9yZWQpCit7CisgIGlmICgwIDw9IHN5bmNoX3Byb2Nl c3NfZmQpCisgICAgZW1hY3NfY2xvc2UgKHN5bmNoX3Byb2Nlc3NfZmQpOworCisgIC8qIElm IFBJRCBpcyByZWFwYWJsZSwga2lsbCBpdCBhbmQgcmVjb3JkIGl0IGFzIGEgZGVsZXRlZCBw cm9jZXNzLgorICAgICBEbyB0aGlzIGluIGEgY3JpdGljYWwgc2VjdGlvbi4gIFVubGVzcyBQ SUQgaXMgd2VkZ2VkIGl0IHdpbGwgYmUKKyAgICAgcmVhcGVkIG9uIHJlY2VpcHQgb2YgdGhl IGZpcnN0IFNJR0NITEQgYWZ0ZXIgdGhlIGNyaXRpY2FsIHNlY3Rpb24uICAqLworICBpZiAo c3luY2hfcHJvY2Vzc19waWQpCisgICAgeworICAgICAgYmxvY2tfY2hpbGRfc2lnbmFsICgp OworICAgICAgcmVjb3JkX2RlbGV0ZWRfcGlkIChzeW5jaF9wcm9jZXNzX3BpZCk7CisgICAg ICBFTUFDU19LSUxMUEcgKHN5bmNoX3Byb2Nlc3NfcGlkLCBTSUdLSUxMKTsKKyAgICAgIHVu YmxvY2tfY2hpbGRfc2lnbmFsICgpOworICAgIH0KKworICByZXR1cm4gUW5pbDsKK30KKwog LyogQ2xlYW4gdXAgd2hlbiBleGl0aW5nIEZjYWxsX3Byb2Nlc3MuCiAgICBPbiBNU0RPUywg ZGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZSBvbiBhbnkga2luZCBvZiB0ZXJtaW5hdGlvbi4K ICAgIE9uIFVuaXgsIGtpbGwgdGhlIHByb2Nlc3MgYW5kIGFueSBjaGlsZHJlbiBvbiB0ZXJt aW5hdGlvbiBieSBzaWduYWwuICAqLwogCi0vKiBUcnVlIGlmIHRoaXMgaXMgdGVybWluYXRp b24gZHVlIHRvIGV4aXQuICAqLwotc3RhdGljIGJvb2wgY2FsbF9wcm9jZXNzX2V4aXRlZDsK LQotc3RhdGljIExpc3BfT2JqZWN0Ci1jYWxsX3Byb2Nlc3Nfa2lsbCAoTGlzcF9PYmplY3Qg ZmRwaWQpCi17Ci0gIGludCBmZDsKLSAgcGlkX3QgcGlkOwotICBDT05TX1RPX0lOVEVHRVIg KEZjYXIgKGZkcGlkKSwgaW50LCBmZCk7Ci0gIENPTlNfVE9fSU5URUdFUiAoRmNkciAoZmRw aWQpLCBwaWRfdCwgcGlkKTsKLSAgZW1hY3NfY2xvc2UgKGZkKTsKLSAgRU1BQ1NfS0lMTFBH IChwaWQsIFNJR0tJTEwpOwotICBzeW5jaF9wcm9jZXNzX2FsaXZlID0gMDsKLSAgcmV0dXJu IFFuaWw7Ci19Ci0KIHN0YXRpYyBMaXNwX09iamVjdAogY2FsbF9wcm9jZXNzX2NsZWFudXAg KExpc3BfT2JqZWN0IGFyZykKIHsKLSAgTGlzcF9PYmplY3QgZmRwaWQgPSBGY2RyIChhcmcp OwotICBpbnQgZmQ7Ci0jaWYgZGVmaW5lZCAoTVNET1MpCi0gIExpc3BfT2JqZWN0IGZpbGU7 CisjaWZkZWYgTVNET1MKKyAgTGlzcF9PYmplY3QgYnVmZmVyID0gRmNhciAoYXJnKTsKKyAg TGlzcF9PYmplY3QgZmlsZSA9IEZjZHIgKGFyZyk7CiAjZWxzZQotICBwaWRfdCBwaWQ7Cisg IExpc3BfT2JqZWN0IGJ1ZmZlciA9IGFyZzsKICNlbmRpZgogCi0gIEZzZXRfYnVmZmVyIChG Y2FyIChhcmcpKTsKLSAgQ09OU19UT19JTlRFR0VSIChGY2FyIChmZHBpZCksIGludCwgZmQp OwotCi0jaWYgZGVmaW5lZCAoTVNET1MpCi0gIC8qIGZvciBNU0RPUyBmZHBpZCBpcyByZWFs bHkgKGZkIC4gdGVtcGZpbGUpICAqLwotICBmaWxlID0gRmNkciAoZmRwaWQpOwotICAvKiBG RCBpcyAtMSBhbmQgRklMRSBpcyAiIiB3aGVuIHdlIGRpZG4ndCBhY3R1YWxseSBjcmVhdGUg YQotICAgICB0ZW1wb3JhcnkgZmlsZSBpbiBjYWxsLXByb2Nlc3MuICAqLwotICBpZiAoZmQg Pj0gMCkKLSAgICBlbWFjc19jbG9zZSAoZmQpOwotICBpZiAoIShzdHJjbXAgKFNEQVRBIChm aWxlKSwgTlVMTF9ERVZJQ0UpID09IDAgfHwgU1JFRiAoZmlsZSwgMCkgPT0gJ1wwJykpCi0g ICAgdW5saW5rIChTREFUQSAoZmlsZSkpOwotI2Vsc2UgLyogbm90IE1TRE9TICovCi0gIENP TlNfVE9fSU5URUdFUiAoRmNkciAoZmRwaWQpLCBwaWRfdCwgcGlkKTsKLQotICBpZiAoY2Fs bF9wcm9jZXNzX2V4aXRlZCkKLSAgICB7Ci0gICAgICBlbWFjc19jbG9zZSAoZmQpOwotICAg ICAgcmV0dXJuIFFuaWw7Ci0gICAgfQotCi0gIGlmIChFTUFDU19LSUxMUEcgKHBpZCwgU0lH SU5UKSA9PSAwKQorICBGc2V0X2J1ZmZlciAoYnVmZmVyKTsKKworI2lmbmRlZiBNU0RPUwor ICAvKiBJZiB0aGUgcHJvY2VzcyBzdGlsbCBleGlzdHMsIGtpbGwgaXRzIHByb2Nlc3MgZ3Jv dXAuICAqLworICBpZiAoc3luY2hfcHJvY2Vzc19waWQpCiAgICAgewogICAgICAgcHRyZGlm Zl90IGNvdW50ID0gU1BFQ1BETF9JTkRFWCAoKTsKLSAgICAgIHJlY29yZF91bndpbmRfcHJv dGVjdCAoY2FsbF9wcm9jZXNzX2tpbGwsIGZkcGlkKTsKKyAgICAgIEVNQUNTX0tJTExQRyAo c3luY2hfcHJvY2Vzc19waWQsIFNJR0lOVCk7CisgICAgICByZWNvcmRfdW53aW5kX3Byb3Rl Y3QgKGNhbGxfcHJvY2Vzc19raWxsLCBtYWtlX251bWJlciAoMCkpOwogICAgICAgbWVzc2Fn ZTEgKCJXYWl0aW5nIGZvciBwcm9jZXNzIHRvIGRpZS4uLih0eXBlIEMtZyBhZ2FpbiB0byBr aWxsIGl0IGluc3RhbnRseSkiKTsKICAgICAgIGltbWVkaWF0ZV9xdWl0ID0gMTsKICAgICAg IFFVSVQ7Ci0gICAgICB3YWl0X2Zvcl90ZXJtaW5hdGlvbiAocGlkKTsKKyAgICAgIHdhaXRf Zm9yX3Rlcm1pbmF0aW9uIChzeW5jaF9wcm9jZXNzX3BpZCwgMCwgMSk7CisgICAgICBzeW5j aF9wcm9jZXNzX3BpZCA9IDA7CiAgICAgICBpbW1lZGlhdGVfcXVpdCA9IDA7CiAgICAgICBz cGVjcGRsX3B0ciA9IHNwZWNwZGwgKyBjb3VudDsgLyogRGlzY2FyZCB0aGUgdW53aW5kIHBy b3RlY3QuICAqLwogICAgICAgbWVzc2FnZTEgKCJXYWl0aW5nIGZvciBwcm9jZXNzIHRvIGRp ZS4uLmRvbmUiKTsKICAgICB9Ci0gIHN5bmNoX3Byb2Nlc3NfYWxpdmUgPSAwOwotICBlbWFj c19jbG9zZSAoZmQpOwotI2VuZGlmIC8qIG5vdCBNU0RPUyAqLworI2VuZGlmCisKKyAgaWYg KDAgPD0gc3luY2hfcHJvY2Vzc19mZCkKKyAgICBlbWFjc19jbG9zZSAoc3luY2hfcHJvY2Vz c19mZCk7CisKKyNpZmRlZiBNU0RPUworICAvKiBGSUxFIGlzICIiIHdoZW4gd2UgZGlkbid0 IGFjdHVhbGx5IGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIGluCisgICAgIGNhbGwtcHJvY2Vz cy4gICovCisgIGlmICghKHN0cmNtcCAoU0RBVEEgKGZpbGUpLCBOVUxMX0RFVklDRSkgPT0g MCB8fCBTUkVGIChmaWxlLCAwKSA9PSAnXDAnKSkKKyAgICB1bmxpbmsgKFNEQVRBIChmaWxl KSk7CisjZW5kaWYKKwogICByZXR1cm4gUW5pbDsKIH0KIApAQCAtMTgxLDkgKzIwMywxMCBA QAogdXNhZ2U6IChjYWxsLXByb2Nlc3MgUFJPR1JBTSAmb3B0aW9uYWwgSU5GSUxFIEJVRkZF UiBESVNQTEFZICZyZXN0IEFSR1MpICAqLykKICAgKHB0cmRpZmZfdCBuYXJncywgTGlzcF9P YmplY3QgKmFyZ3MpCiB7Ci0gIExpc3BfT2JqZWN0IGluZmlsZSwgYnVmZmVyLCBjdXJyZW50 X2RpciwgcGF0aCwgY2xlYW51cF9pbmZvX3RhaWw7CisgIExpc3BfT2JqZWN0IGluZmlsZSwg YnVmZmVyLCBjdXJyZW50X2RpciwgcGF0aDsKICAgYm9vbCBkaXNwbGF5X3A7CiAgIGludCBm ZDAsIGZkMSwgZmlsZWZkOworICBpbnQgc3RhdHVzOwogICBwdHJkaWZmX3QgY291bnQgPSBT UEVDUERMX0lOREVYICgpOwogICBVU0VfU0FGRV9BTExPQ0E7CiAKQEAgLTE5OSw3ICsyMjIs NyBAQAogI2Vsc2UKICAgcGlkX3QgcGlkOwogI2VuZGlmCi0gIGludCB2Zm9ya19lcnJubzsK KyAgaW50IGNoaWxkX2Vycm5vOwogICBpbnQgZmRfb3V0cHV0ID0gLTE7CiAgIHN0cnVjdCBj b2Rpbmdfc3lzdGVtIHByb2Nlc3NfY29kaW5nOyAvKiBjb2Rpbmctc3lzdGVtIG9mIHByb2Nl c3Mgb3V0cHV0ICovCiAgIHN0cnVjdCBjb2Rpbmdfc3lzdGVtIGFyZ3VtZW50X2NvZGluZzsJ LyogY29kaW5nLXN5c3RlbSBvZiBhcmd1bWVudHMgKi8KQEAgLTQ5NiwxNiArNTE5LDYgQEAK ICAgICBpZiAoZmRfb3V0cHV0ID49IDApCiAgICAgICBmZDEgPSBmZF9vdXRwdXQ7CiAKLSAg ICAvKiBSZWNvcmQgdGhhdCB3ZSdyZSBhYm91dCB0byBjcmVhdGUgYSBzeW5jaHJvbm91cyBw cm9jZXNzLiAgKi8KLSAgICBzeW5jaF9wcm9jZXNzX2FsaXZlID0gMTsKLQotICAgIC8qIFRo ZXNlIHZhcnMgcmVjb3JkIGluZm9ybWF0aW9uIGZyb20gcHJvY2VzcyB0ZXJtaW5hdGlvbi4K LSAgICAgICBDbGVhciB0aGVtIG5vdyBiZWZvcmUgcHJvY2VzcyBjYW4gcG9zc2libHkgdGVy bWluYXRlLAotICAgICAgIHRvIGF2b2lkIHRpbWluZyBlcnJvciBpZiBwcm9jZXNzIHRlcm1p bmF0ZXMgc29vbi4gICovCi0gICAgc3luY2hfcHJvY2Vzc19kZWF0aCA9IDA7Ci0gICAgc3lu Y2hfcHJvY2Vzc19yZXRjb2RlID0gMDsKLSAgICBzeW5jaF9wcm9jZXNzX3Rlcm1zaWcgPSAw OwotCiAgICAgaWYgKE5JTFAgKGVycm9yX2ZpbGUpKQogICAgICAgZmRfZXJyb3IgPSBlbWFj c19vcGVuIChOVUxMX0RFVklDRSwgT19XUk9OTFksIDApOwogICAgIGVsc2UgaWYgKFNUUklO R1AgKGVycm9yX2ZpbGUpKQpAQCAtNTM4LDIzICs1NTEsMjEgQEAKIAogI2lmZGVmIE1TRE9T IC8qIE1XLCBKdWx5IDE5OTMgKi8KICAgICAvKiBOb3RlIHRoYXQgb24gTVNET1MgYGNoaWxk X3NldHVwJyBhY3R1YWxseSByZXR1cm5zIHRoZSBjaGlsZCBwcm9jZXNzCi0gICAgICAgZXhp dCBzdGF0dXMsIG5vdCBpdHMgUElELCBzbyB3ZSBhc3NpZ24gaXQgdG8gYHN5bmNoX3Byb2Nl c3NfcmV0Y29kZScKLSAgICAgICBiZWxvdy4gICovCisgICAgICAgZXhpdCBzdGF0dXMsIG5v dCBpdHMgUElELCBzbyBhc3NpZ24gaXQgdG8gc3RhdHVzIGJlbG93LiAgKi8KICAgICBwaWQg PSBjaGlsZF9zZXR1cCAoZmlsZWZkLCBvdXRmaWxlZmQsIGZkX2Vycm9yLCBuZXdfYXJndiwg MCwgY3VycmVudF9kaXIpOwotCi0gICAgLyogUmVjb3JkIHRoYXQgdGhlIHN5bmNocm9ub3Vz IHByb2Nlc3MgZXhpdGVkIGFuZCBub3RlIGl0cwotICAgICAgIHRlcm1pbmF0aW9uIHN0YXR1 cy4gICovCi0gICAgc3luY2hfcHJvY2Vzc19hbGl2ZSA9IDA7Ci0gICAgc3luY2hfcHJvY2Vz c19yZXRjb2RlID0gcGlkOwotICAgIGlmIChzeW5jaF9wcm9jZXNzX3JldGNvZGUgPCAwKSAg LyogbWVhbnMgaXQgY291bGRuJ3QgYmUgZXhlYydlZCAqLwotICAgICAgewotCXN5bmNocm9u aXplX3N5c3RlbV9tZXNzYWdlc19sb2NhbGUgKCk7Ci0Jc3luY2hfcHJvY2Vzc19kZWF0aCA9 IHN0cmVycm9yIChlcnJubyk7Ci0gICAgICB9CisgICAgY2hpbGRfZXJybm8gPSBlcnJubzsK IAogICAgIGVtYWNzX2Nsb3NlIChvdXRmaWxlZmQpOwogICAgIGlmIChmZF9lcnJvciAhPSBv dXRmaWxlZmQpCiAgICAgICBlbWFjc19jbG9zZSAoZmRfZXJyb3IpOworICAgIGlmIChwaWQg PCAwKQorICAgICAgeworCXN5bmNocm9uaXplX3N5c3RlbV9tZXNzYWdlc19sb2NhbGUgKCk7 CisJcmV0dXJuCisJICBjb2RlX2NvbnZlcnRfc3RyaW5nX25vcmVjb3JkIChidWlsZF9zdHJp bmcgKHN0cmVycm9yIChjaGlsZF9lcnJubykpLAorCQkJCQlWbG9jYWxlX2NvZGluZ19zeXN0 ZW0sIDApOworICAgICAgfQorICAgIHN0YXR1cyA9IHBpZDsKICAgICBmZDEgPSAtMTsgLyog Tm8gaGFybSBpbiBjbG9zaW5nIHRoYXQgb25lISAgKi8KICAgICBpZiAodGVtcGZpbGUpCiAg ICAgICB7CkBAIC01NzIsMTIgKzU4MywyMSBAQAogICAgIGVsc2UKICAgICAgIGZkMCA9IC0x OyAvKiBXZSBhcmUgbm90IGdvaW5nIHRvIHJlYWQgZnJvbSB0ZW1wZmlsZS4gICAqLwogI2Vs c2UgLyogbm90IE1TRE9TICovCisKKyAgICAvKiBEbyB0aGUgdW53aW5kLXByb3RlY3Qgbm93 LCBldmVuIHRob3VnaCB0aGUgcGlkIGlzIG5vdCBrbm93biwgc28KKyAgICAgICB0aGF0IG5v IHN0b3JhZ2UgYWxsb2NhdGlvbiBpcyBkb25lIGluIHRoZSBjcml0aWNhbCBzZWN0aW9uLgor ICAgICAgIFRoZSBhY3R1YWwgUElEIHdpbGwgYmUgZmlsbGVkIGluIGR1cmluZyB0aGUgY3Jp dGljYWwgc2VjdGlvbi4gICovCisgICAgc3luY2hfcHJvY2Vzc19waWQgPSAwOworICAgIHN5 bmNoX3Byb2Nlc3NfZmQgPSBmZDA7CisgICAgcmVjb3JkX3Vud2luZF9wcm90ZWN0IChjYWxs X3Byb2Nlc3NfY2xlYW51cCwgRmN1cnJlbnRfYnVmZmVyICgpKTsKKworICAgIGJsb2NrX2lu cHV0ICgpOworICAgIGJsb2NrX2NoaWxkX3NpZ25hbCAoKTsKKwogI2lmZGVmIFdJTkRPV1NO VAogICAgIHBpZCA9IGNoaWxkX3NldHVwIChmaWxlZmQsIGZkMSwgZmRfZXJyb3IsIG5ld19h cmd2LCAwLCBjdXJyZW50X2Rpcik7CiAjZWxzZSAgLyogbm90IFdJTkRPV1NOVCAqLwogCi0g ICAgYmxvY2tfaW5wdXQgKCk7Ci0KICAgICAvKiB2Zm9yaywgYW5kIHByZXZlbnQgbG9jYWwg dmFycyBmcm9tIGJlaW5nIGNsb2JiZXJlZCBieSB0aGUgdmZvcmsuICAqLwogICAgIHsKICAg ICAgIExpc3BfT2JqZWN0IHZvbGF0aWxlIGJ1ZmZlcl92b2xhdGlsZSA9IGJ1ZmZlcjsKQEAg LTU5Nyw2ICs2MTcsNyBAQAogICAgICAgY2hhciAqKnZvbGF0aWxlIG5ld19zYXZlX2Vudmly b24gPSBzYXZlX2Vudmlyb247CiAKICAgICAgIHBpZCA9IHZmb3JrICgpOworICAgICAgY2hp bGRfZXJybm8gPSBlcnJubzsKIAogICAgICAgYnVmZmVyID0gYnVmZmVyX3ZvbGF0aWxlOwog ICAgICAgY29kaW5nX3N5c3RlbXMgPSBjb2Rpbmdfc3lzdGVtc192b2xhdGlsZTsKQEAgLTYx Nyw2ICs2MzgsOCBAQAogCiAgICAgaWYgKHBpZCA9PSAwKQogICAgICAgeworCXVuYmxvY2tf Y2hpbGRfc2lnbmFsICgpOworCiAJaWYgKGZkMCA+PSAwKQogCSAgZW1hY3NfY2xvc2UgKGZk MCk7CiAKQEAgLTYyOCwxMSArNjUxLDIxIEBACiAJY2hpbGRfc2V0dXAgKGZpbGVmZCwgZmQx LCBmZF9lcnJvciwgbmV3X2FyZ3YsIDAsIGN1cnJlbnRfZGlyKTsKICAgICAgIH0KIAotICAg IHZmb3JrX2Vycm5vID0gZXJybm87CisjZW5kaWYgLyogbm90IFdJTkRPV1NOVCAqLworCisg ICAgY2hpbGRfZXJybm8gPSBlcnJubzsKKworICAgIGlmICgwIDwgcGlkKQorICAgICAgewor CWlmIChJTlRFR0VSUCAoYnVmZmVyKSkKKwkgIHJlY29yZF9kZWxldGVkX3BpZCAocGlkKTsK KwllbHNlCisJICBzeW5jaF9wcm9jZXNzX3BpZCA9IHBpZDsKKyAgICAgIH0KKworICAgIHVu YmxvY2tfY2hpbGRfc2lnbmFsICgpOwogICAgIHVuYmxvY2tfaW5wdXQgKCk7CiAKLSNlbmRp ZiAvKiBub3QgV0lORE9XU05UICovCi0KICAgICAvKiBUaGUgTVNET1MgY2FzZSBkaWQgdGhp cyBhbHJlYWR5LiAgKi8KICAgICBpZiAoZmRfZXJyb3IgPj0gMCkKICAgICAgIGVtYWNzX2Ns b3NlIChmZF9lcnJvcik7CkBAIC02NTEsOSArNjg0LDcgQEAKIAogICBpZiAocGlkIDwgMCkK ICAgICB7Ci0gICAgICBpZiAoZmQwID49IDApCi0JZW1hY3NfY2xvc2UgKGZkMCk7Ci0gICAg ICBlcnJubyA9IHZmb3JrX2Vycm5vOworICAgICAgZXJybm8gPSBjaGlsZF9lcnJubzsKICAg ICAgIHJlcG9ydF9maWxlX2Vycm9yICgiRG9pbmcgdmZvcmsiLCBRbmlsKTsKICAgICB9CiAK QEAgLTY2NCwxOSArNjk1LDEyIEBACiAgICAgICByZXR1cm4gUW5pbDsKICAgICB9CiAKLSAg LyogRW5hYmxlIHNlbmRpbmcgc2lnbmFsIGlmIHVzZXIgcXVpdHMgYmVsb3cuICAqLwotICBj YWxsX3Byb2Nlc3NfZXhpdGVkID0gMDsKLQogI2lmIGRlZmluZWQgKE1TRE9TKQogICAvKiBN U0RPUyBuZWVkcyBkaWZmZXJlbnQgY2xlYW51cCBpbmZvcm1hdGlvbi4gICovCi0gIGNsZWFu dXBfaW5mb190YWlsID0gYnVpbGRfc3RyaW5nICh0ZW1wZmlsZSA/IHRlbXBmaWxlIDogIiIp OwotI2Vsc2UKLSAgY2xlYW51cF9pbmZvX3RhaWwgPSBJTlRFR0VSX1RPX0NPTlMgKHBpZCk7 Ci0jZW5kaWYgLyogbm90IE1TRE9TICovCiAgIHJlY29yZF91bndpbmRfcHJvdGVjdCAoY2Fs bF9wcm9jZXNzX2NsZWFudXAsCiAJCQkgRmNvbnMgKEZjdXJyZW50X2J1ZmZlciAoKSwKLQkJ CQlGY29ucyAoSU5URUdFUl9UT19DT05TIChmZDApLAotCQkJCSAgICAgICBjbGVhbnVwX2lu Zm9fdGFpbCkpKTsKKwkJCQlidWlsZF9zdHJpbmcgKHRlbXBmaWxlID8gdGVtcGZpbGUgOiAi IikpKTsKKyNlbmRpZgogCiAgIGlmIChCVUZGRVJQIChidWZmZXIpKQogICAgIEZzZXRfYnVm ZmVyIChidWZmZXIpOwpAQCAtODYzLDM4ICs4ODcsMzQgQEAKIAogI2lmbmRlZiBNU0RPUwog ICAvKiBXYWl0IGZvciBpdCB0byB0ZXJtaW5hdGUsIHVubGVzcyBpdCBhbHJlYWR5IGhhcy4g ICovCi0gIGlmIChvdXRwdXRfdG9fYnVmZmVyKQotICAgIHdhaXRfZm9yX3Rlcm1pbmF0aW9u IChwaWQpOwotICBlbHNlCi0gICAgaW50ZXJydXB0aWJsZV93YWl0X2Zvcl90ZXJtaW5hdGlv biAocGlkKTsKKyAgd2FpdF9mb3JfdGVybWluYXRpb24gKHBpZCwgJnN0YXR1cywgIW91dHB1 dF90b19idWZmZXIpOwogI2VuZGlmCiAKICAgaW1tZWRpYXRlX3F1aXQgPSAwOwogCiAgIC8q IERvbid0IGtpbGwgYW55IGNoaWxkcmVuIHRoYXQgdGhlIHN1YnByb2Nlc3MgbWF5IGhhdmUg bGVmdCBiZWhpbmQKICAgICAgd2hlbiBleGl0aW5nLiAgKi8KLSAgY2FsbF9wcm9jZXNzX2V4 aXRlZCA9IDE7CisgIHN5bmNoX3Byb2Nlc3NfcGlkID0gMDsKIAogICBTQUZFX0ZSRUUgKCk7 CiAgIHVuYmluZF90byAoY291bnQsIFFuaWwpOwogCi0gIGlmIChzeW5jaF9wcm9jZXNzX3Rl cm1zaWcpCisgIGlmIChXSUZTSUdOQUxFRCAoc3RhdHVzKSkKICAgICB7CiAgICAgICBjb25z dCBjaGFyICpzaWduYW1lOwogCiAgICAgICBzeW5jaHJvbml6ZV9zeXN0ZW1fbWVzc2FnZXNf bG9jYWxlICgpOwotICAgICAgc2lnbmFtZSA9IHN0cnNpZ25hbCAoc3luY2hfcHJvY2Vzc190 ZXJtc2lnKTsKKyAgICAgIHNpZ25hbWUgPSBzdHJzaWduYWwgKFdURVJNU0lHIChzdGF0dXMp KTsKIAogICAgICAgaWYgKHNpZ25hbWUgPT0gMCkKIAlzaWduYW1lID0gInVua25vd24iOwog Ci0gICAgICBzeW5jaF9wcm9jZXNzX2RlYXRoID0gc2lnbmFtZTsKKyAgICAgIHJldHVybiBj b2RlX2NvbnZlcnRfc3RyaW5nX25vcmVjb3JkIChidWlsZF9zdHJpbmcgKHNpZ25hbWUpLAor CQkJCQkgICBWbG9jYWxlX2NvZGluZ19zeXN0ZW0sIDApOwogICAgIH0KIAotICBpZiAoc3lu Y2hfcHJvY2Vzc19kZWF0aCkKLSAgICByZXR1cm4gY29kZV9jb252ZXJ0X3N0cmluZ19ub3Jl Y29yZCAoYnVpbGRfc3RyaW5nIChzeW5jaF9wcm9jZXNzX2RlYXRoKSwKLQkJCQkJIFZsb2Nh bGVfY29kaW5nX3N5c3RlbSwgMCk7Ci0gIHJldHVybiBtYWtlX251bWJlciAoc3luY2hfcHJv Y2Vzc19yZXRjb2RlKTsKKyAgZWFzc2VydCAoV0lGRVhJVEVEIChzdGF0dXMpKTsKKyAgcmV0 dXJuIG1ha2VfbnVtYmVyIChXRVhJVFNUQVRVUyAoc3RhdHVzKSk7CiB9CiAMCiBzdGF0aWMg TGlzcF9PYmplY3QKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvcHJvY2Vzcy5jJwotLS0gc3Jj L3Byb2Nlc3MuYwkyMDEyLTExLTI3IDA1OjE3OjA3ICswMDAwCisrKyBzcmMvcHJvY2Vzcy5j CTIwMTItMTEtMjkgMDI6MjQ6NDUgKzAwMDAKQEAgLTc3NywxMCArNzc3LDIzIEBACiAvKiBG ZGVsZXRlX3Byb2Nlc3MgcHJvbWlzZXMgdG8gaW1tZWRpYXRlbHkgZm9yZ2V0IGFib3V0IHRo ZSBwcm9jZXNzLCBidXQgaW4KICAgIHJlYWxpdHksIEVtYWNzIG5lZWRzIHRvIHJlbWVtYmVy IHRob3NlIHByb2Nlc3NlcyB1bnRpbCB0aGV5IGhhdmUgYmVlbgogICAgdHJlYXRlZCBieSB0 aGUgU0lHQ0hMRCBoYW5kbGVyIGFuZCB3YWl0cGlkIGhhcyBiZWVuIGludm9rZWQgb24gdGhl bTsKLSAgIG90aGVyd2lzZSB0aGV5IG1pZ2h0IGZpbGwgdXAgdGhlIGtlcm5lbCdzIHByb2Nl c3MgdGFibGUuICAqLworICAgb3RoZXJ3aXNlIHRoZXkgbWlnaHQgZmlsbCB1cCB0aGUga2Vy bmVsJ3MgcHJvY2VzcyB0YWJsZS4KKworICAgU29tZSBwcm9jZXNzZXMgY3JlYXRlZCBieSBj YWxsLXByb2Nlc3MgYXJlIGFsc28gcHV0IG9udG8gdGhpcyBsaXN0LiAgKi8KIHN0YXRpYyBM aXNwX09iamVjdCBkZWxldGVkX3BpZF9saXN0OwogI2VuZGlmCiAKK3ZvaWQKK3JlY29yZF9k ZWxldGVkX3BpZCAocGlkX3QgcGlkKQoreworI2lmZGVmIFNJR0NITEQKKyAgZGVsZXRlZF9w aWRfbGlzdCA9IEZjb25zIChtYWtlX2ZpeG51bV9vcl9mbG9hdCAocGlkKSwKKwkJCSAgICAv KiBHQyB0cmVhdGVkIGVsZW1lbnRzIHNldCB0byBuaWwuICAqLworCQkJICAgIEZkZWxxIChR bmlsLCBkZWxldGVkX3BpZF9saXN0KSk7CisKKyNlbmRpZgorfQorCiBERUZVTiAoImRlbGV0 ZS1wcm9jZXNzIiwgRmRlbGV0ZV9wcm9jZXNzLCBTZGVsZXRlX3Byb2Nlc3MsIDEsIDEsIDAs CiAgICAgICAgZG9jOiAvKiBEZWxldGUgUFJPQ0VTUzoga2lsbCBpdCBhbmQgZm9yZ2V0IGFi b3V0IGl0IGltbWVkaWF0ZWx5LgogUFJPQ0VTUyBtYXkgYmUgYSBwcm9jZXNzLCBhIGJ1ZmZl ciwgdGhlIG5hbWUgb2YgYSBwcm9jZXNzIG9yIGJ1ZmZlciwgb3IKQEAgLTgwNyw5ICs4MjAs NyBAQAogICAgICAgcGlkX3QgcGlkID0gcC0+cGlkOwogCiAgICAgICAvKiBObyBwcm9ibGVt IHN0b3JpbmcgdGhlIHBpZCBoZXJlLCBhcyBpdCBpcyBzdGlsbCBpbiBWcHJvY2Vzc19hbGlz dC4gICovCi0gICAgICBkZWxldGVkX3BpZF9saXN0ID0gRmNvbnMgKG1ha2VfZml4bnVtX29y X2Zsb2F0IChwaWQpLAotCQkJCS8qIEdDIHRyZWF0ZWQgZWxlbWVudHMgc2V0IHRvIG5pbC4g ICovCi0JCQkJRmRlbHEgKFFuaWwsIGRlbGV0ZWRfcGlkX2xpc3QpKTsKKyAgICAgIHJlY29y ZF9kZWxldGVkX3BpZCAocGlkKTsKICAgICAgIC8qIElmIHRoZSBwcm9jZXNzIGhhcyBhbHJl YWR5IHNpZ25hbGVkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdC4gICovCiAgICAgICBpZiAo cC0+cmF3X3N0YXR1c19uZXcpCiAJdXBkYXRlX3N0YXR1cyAocCk7CkBAIC02MTYwLDM1ICs2 MTcxLDM3IEBACiAgIHJldHVybiBwcm9jZXNzOwogfQogDAotLyogSWYgdGhlIHN0YXR1cyBv ZiB0aGUgcHJvY2VzcyBERVNJUkVEIGhhcyBjaGFuZ2VkLCByZXR1cm4gdHJ1ZSBhbmQKLSAg IHNldCAqU1RBVFVTIHRvIGl0cyBleGl0IHN0YXR1czsgb3RoZXJ3aXNlLCByZXR1cm4gZmFs c2UuCi0gICBJZiBIQVZFIGlzIG5vbm5lZ2F0aXZlLCBhc3N1bWUgdGhhdCBIQVZFID0gd2Fp dHBpZCAoSEFWRSwgU1RBVFVTLCAuLi4pCi0gICBoYXMgYWxyZWFkeSBiZWVuIGludm9rZWQs IGFuZCBkbyBub3QgaW52b2tlIHdhaXRwaWQgYWdhaW4uICAqLwotCi1zdGF0aWMgYm9vbAot cHJvY2Vzc19zdGF0dXNfcmV0cmlldmVkIChwaWRfdCBkZXNpcmVkLCBwaWRfdCBoYXZlLCBp bnQgKnN0YXR1cykKLXsKLSAgaWYgKGhhdmUgPCAwKQotICAgIHsKLSAgICAgIC8qIEludm9r ZSB3YWl0cGlkIG9ubHkgd2l0aCBhIGtub3duIHByb2Nlc3MgSUQ7IGRvIG5vdCBpbnZva2UK LQkgd2FpdHBpZCB3aXRoIGEgbm9ucG9zaXRpdmUgYXJndW1lbnQuICBPdGhlcndpc2UsIEVt YWNzIG1pZ2h0Ci0JIHJlYXAgYW4gdW53YW50ZWQgcHJvY2VzcyBieSBtaXN0YWtlLiAgRm9y IGV4YW1wbGUsIGludm9raW5nCi0JIHdhaXRwaWQgKC0xLCAuLi4pIGNhbiBtZXNzIHVwIGds aWIgYnkgcmVhcGluZyBnbGliJ3Mgc3VicHJvY2Vzc2VzLAotCSBzbyB0aGF0IGFub3RoZXIg dGhyZWFkIHJ1bm5pbmcgZ2xpYiB3b24ndCBmaW5kIHRoZW0uICAqLwotICAgICAgZG8KLQlo YXZlID0gd2FpdHBpZCAoZGVzaXJlZCwgc3RhdHVzLCBXTk9IQU5HIHwgV1VOVFJBQ0VEKTsK LSAgICAgIHdoaWxlIChoYXZlIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7Ci0gICAgfQotCi0g IHJldHVybiBoYXZlID09IGRlc2lyZWQ7Ci19Ci0KLS8qIElmIFBJRCBpcyBub25uZWdhdGl2 ZSwgdGhlIGNoaWxkIHByb2Nlc3MgUElEIHdpdGggd2FpdCBzdGF0dXMgVyBoYXMKLSAgIGNo YW5nZWQgaXRzIHN0YXR1czsgcmVjb3JkIHRoaXMgYW5kIHJldHVybiB0cnVlLgotCi0gICBJ ZiBQSUQgaXMgbmVnYXRpdmUsIGlnbm9yZSBXLCBhbmQgbG9vayBmb3Iga25vd24gY2hpbGQg cHJvY2Vzc2VzCi0gICBvZiBFbWFjcyB3aG9zZSBzdGF0dXMgaGF2ZSBjaGFuZ2VkLiAgRm9y IGVhY2ggb25lIGZvdW5kLCByZWNvcmQgaXRzIG5ldwotICAgc3RhdHVzLgorI2lmZGVmIFNJ R0NITEQKKworLyogVGhlIG1haW4gRW1hY3MgdGhyZWFkIHJlY29yZHMgY2hpbGQgcHJvY2Vz c2VzIGluIHRocmVlIHBsYWNlczoKKworICAgLSBWcHJvY2Vzc19hbGlzdCwgZm9yIGFzeW5j aHJvbm91cyBzdWJwcm9jZXNzZXMsIHdoaWNoIGFyZSBjaGlsZAorICAgICBwcm9jZXNzZXMg dmlzaWJsZSB0byBMaXNwLgorCisgICAtIGRlbGV0ZWRfcGlkX2xpc3QsIGZvciBjaGlsZCBw cm9jZXNzZXMgaW52aXNpYmxlIHRvIExpc3AsCisgICAgIHR5cGljYWxseSBiZWNhdXNlIG9m IGRlbGV0ZS1wcm9jZXNzLiAgVGhlc2UgYXJlIHJlY29yZGVkIHNvIHRoYXQKKyAgICAgdGhl IHByb2Nlc3NlcyBjYW4gYmUgcmVhcGVkIHdoZW4gdGhleSBleGl0LCBzbyB0aGF0IHRoZSBv cGVyYXRpbmcKKyAgICAgc3lzdGVtJ3MgcHJvY2VzcyB0YWJsZSBpcyBub3QgY2x1dHRlcmVk IGJ5IHpvbWJpZXMuCisKKyAgIC0gdGhlIGxvY2FsIHZhcmlhYmxlIFBJRCBpbiBGY2FsbF9w cm9jZXNzLCBjYWxsX3Byb2Nlc3NfY2xlYW51cCBhbmQKKyAgICAgY2FsbF9wcm9jZXNzX2tp bGwsIGZvciBzeW5jaHJvbm91cyBzdWJwcm9jZXNzZXMuCisgICAgIHJlY29yZF91bndpbmRf cHJvdGVjdCBpcyB1c2VkIHRvIG1ha2Ugc3VyZSB0aGlzIHByb2Nlc3MgaXMgbm90CisgICAg IGZvcmdvdHRlbjogaWYgdGhlIHVzZXIgaW50ZXJydXB0cyBjYWxsLXByb2Nlc3MgYW5kIHRo ZSBjaGlsZAorICAgICBwcm9jZXNzIHJlZnVzZXMgdG8gZXhpdCBpbW1lZGlhdGVseSBldmVu IHdpdGggdHdvIEMtZydzLAorICAgICBjYWxsX3Byb2Nlc3Nfa2lsbCBhZGRzIFBJRCdzIGNv bnRlbnRzIHRvIGRlbGV0ZWRfcGlkX2xpc3QgYmVmb3JlCisgICAgIHJldHVybmluZy4KKwor ICAgVGhlIG1haW4gRW1hY3MgdGhyZWFkIGludm9rZXMgd2FpdHBpZCBvbmx5IG9uIGNoaWxk IHByb2Nlc3NlcyB0aGF0CisgICBpdCBjcmVhdGVzIGFuZCB0aGF0IGhhdmUgbm90IGJlZW4g cmVhcGVkLiAgVGhpcyBhdm9pZCByYWNlcyBvbgorICAgcGxhdGZvcm1zIHN1Y2ggYXMgR1RL LCB3aGVyZSBvdGhlciB0aHJlYWRzIGNyZWF0ZSB0aGVpciBvd24KKyAgIHN1YnByb2Nlc3Nl cyB3aGljaCB0aGUgbWFpbiB0aHJlYWQgc2hvdWxkIG5vdCByZWFwLiAgRm9yIGV4YW1wbGUs CisgICBpZiB0aGUgbWFpbiB0aHJlYWQgYXR0ZW1wdGVkIHRvIHJlYXAgYW4gYWxyZWFkeS1y ZWFwZWQgY2hpbGQsIGl0CisgICBtaWdodCBpbmFkdmVydGVudGx5IHJlYXAgYSBHVEstY3Jl YXRlZCBwcm9jZXNzIHRoYXQgaGFwcGVuZWQgdG8KKyAgIGhhdmUgdGhlIHNhbWUgcHJvY2Vz cyBJRC4gICovCisKKy8qIEhhbmRsZSBhIFNJR0NITEQgc2lnbmFsIGJ5IGxvb2tpbmcgZm9y IGtub3duIGNoaWxkIHByb2Nlc3NlcyBvZgorICAgRW1hY3Mgd2hvc2Ugc3RhdHVzIGhhdmUg Y2hhbmdlZC4gIEZvciBlYWNoIG9uZSBmb3VuZCwgcmVjb3JkIGl0cworICAgbmV3IHN0YXR1 cy4KIAogICAgQWxsIHdlIGRvIGlzIGNoYW5nZSB0aGUgc3RhdHVzOyB3ZSBkbyBub3QgcnVu IHNlbnRpbmVscyBvciBwcmludAogICAgbm90aWZpY2F0aW9ucy4gIFRoYXQgaXMgc2F2ZWQg Zm9yIHRoZSBuZXh0IHRpbWUga2V5Ym9hcmQgaW5wdXQgaXMKQEAgLTYyMTEsMjAgKzYyMjQs MTUgQEAKICAgICoqIE1hbGxvYyBXQVJOSU5HOiBUaGlzIHNob3VsZCBuZXZlciBjYWxsIG1h bGxvYyBlaXRoZXIgZGlyZWN0bHkgb3IKICAgIGluZGlyZWN0bHk7IGlmIGl0IGRvZXMsIHRo YXQgaXMgYSBidWcgICovCiAKLXZvaWQKLXJlY29yZF9jaGlsZF9zdGF0dXNfY2hhbmdlIChw aWRfdCBwaWQsIGludCB3KQorc3RhdGljIHZvaWQKK2hhbmRsZV9jaGlsZF9zaWduYWwgKGlu dCBzaWcpCiB7Ci0jaWZkZWYgU0lHQ0hMRAotCi0gIC8qIFJlY29yZCBhdCBtb3N0IG9uZSBj aGlsZCBvbmx5IGlmIHdlIGFscmVhZHkga25vdyBvbmUgY2hpbGQgdGhhdAotICAgICBoYXMg ZXhpdGVkLiAgKi8KLSAgYm9vbCByZWNvcmRfYXRfbW9zdF9vbmVfY2hpbGQgPSAwIDw9IHBp ZDsKLQogICBMaXNwX09iamVjdCB0YWlsOwogCiAgIC8qIEZpbmQgdGhlIHByb2Nlc3MgdGhh dCBzaWduYWxlZCB1cywgYW5kIHJlY29yZCBpdHMgc3RhdHVzLiAgKi8KIAotICAvKiBUaGUg cHJvY2VzcyBjYW4gaGF2ZSBiZWVuIGRlbGV0ZWQgYnkgRmRlbGV0ZV9wcm9jZXNzLiAgKi8K KyAgLyogVGhlIHByb2Nlc3MgY2FuIGhhdmUgYmVlbiBkZWxldGVkIGJ5IEZkZWxldGVfcHJv Y2Vzcywgb3IgaGF2ZQorICAgICBiZWVuIHN0YXJ0ZWQgYXN5bmNocm9ub3VzbHkgYnkgRmNh bGxfcHJvY2Vzcy4gICovCiAgIGZvciAodGFpbCA9IGRlbGV0ZWRfcGlkX2xpc3Q7IENPTlNQ ICh0YWlsKTsgdGFpbCA9IFhDRFIgKHRhaWwpKQogICAgIHsKICAgICAgIGJvb2wgYWxsX3Bp ZHNfYXJlX2ZpeG51bXMKQEAgLTYyMzgsMTIgKzYyNDYsOCBAQAogCSAgICBkZWxldGVkX3Bp ZCA9IFhJTlQgKHhwaWQpOwogCSAgZWxzZQogCSAgICBkZWxldGVkX3BpZCA9IFhGTE9BVF9E QVRBICh4cGlkKTsKLQkgIGlmIChwcm9jZXNzX3N0YXR1c19yZXRyaWV2ZWQgKGRlbGV0ZWRf cGlkLCBwaWQsICZ3KSkKLQkgICAgewotCSAgICAgIFhTRVRDQVIgKHRhaWwsIFFuaWwpOwot CSAgICAgIGlmIChyZWNvcmRfYXRfbW9zdF9vbmVfY2hpbGQpCi0JCXJldHVybjsKLQkgICAg fQorCSAgaWYgKGNoaWxkX3N0YXR1c19jaGFuZ2VkIChkZWxldGVkX3BpZCwgMCwgMCkpCisJ ICAgIFhTRVRDQVIgKHRhaWwsIFFuaWwpOwogCX0KICAgICB9CiAKQEAgLTYyNTIsMTUgKzYy NTYsMTcgQEAKICAgICB7CiAgICAgICBMaXNwX09iamVjdCBwcm9jID0gWENEUiAoWENBUiAo dGFpbCkpOwogICAgICAgc3RydWN0IExpc3BfUHJvY2VzcyAqcCA9IFhQUk9DRVNTIChwcm9j KTsKLSAgICAgIGlmIChwLT5hbGl2ZSAmJiBwcm9jZXNzX3N0YXR1c19yZXRyaWV2ZWQgKHAt PnBpZCwgcGlkLCAmdykpCisgICAgICBpbnQgc3RhdHVzOworCisgICAgICBpZiAocC0+YWxp dmUgJiYgY2hpbGRfc3RhdHVzX2NoYW5nZWQgKHAtPnBpZCwgJnN0YXR1cywgV1VOVFJBQ0VE KSkKIAl7CiAJICAvKiBDaGFuZ2UgdGhlIHN0YXR1cyBvZiB0aGUgcHJvY2VzcyB0aGF0IHdh cyBmb3VuZC4gICovCiAJICBwLT50aWNrID0gKytwcm9jZXNzX3RpY2s7Ci0JICBwLT5yYXdf c3RhdHVzID0gdzsKKwkgIHAtPnJhd19zdGF0dXMgPSBzdGF0dXM7CiAJICBwLT5yYXdfc3Rh dHVzX25ldyA9IDE7CiAKIAkgIC8qIElmIHByb2Nlc3MgaGFzIHRlcm1pbmF0ZWQsIHN0b3Ag d2FpdGluZyBmb3IgaXRzIG91dHB1dC4gICovCi0JICBpZiAoV0lGU0lHTkFMRUQgKHcpIHx8 IFdJRkVYSVRFRCAodykpCisJICBpZiAoV0lGU0lHTkFMRUQgKHN0YXR1cykgfHwgV0lGRVhJ VEVEIChzdGF0dXMpKQogCSAgICB7CiAJICAgICAgaW50IGNsZWFyX2Rlc2NfZmxhZyA9IDA7 CiAJICAgICAgcC0+YWxpdmUgPSAwOwpAQCAtNjI3NCw0NCArNjI4MCw4IEBACiAJCSAgRkRf Q0xSIChwLT5pbmZkLCAmbm9uX2tleWJvYXJkX3dhaXRfbWFzayk7CiAJCX0KIAkgICAgfQot Ci0JICAvKiBUZWxsIHdhaXRfcmVhZGluZ19wcm9jZXNzX291dHB1dCB0aGF0IGl0IG5lZWRz IHRvIHdha2UgdXAgYW5kCi0JICAgICBsb29rIGFyb3VuZC4gICovCi0JICBpZiAoaW5wdXRf YXZhaWxhYmxlX2NsZWFyX3RpbWUpCi0JICAgICppbnB1dF9hdmFpbGFibGVfY2xlYXJfdGlt ZSA9IG1ha2VfZW1hY3NfdGltZSAoMCwgMCk7Ci0KLQkgIGlmIChyZWNvcmRfYXRfbW9zdF9v bmVfY2hpbGQpCi0JICAgIHJldHVybjsKIAl9CiAgICAgfQotCi0gIGlmICgwIDw9IHBpZCkK LSAgICB7Ci0gICAgICAvKiBUaGUgY2FsbGVyIHN1Y2Nlc3NmdWxseSB3YWl0ZWQgZm9yIGEg cGlkIGJ1dCBubyBhc3luY2hyb25vdXMKLQkgcHJvY2VzcyB3YXMgZm91bmQgZm9yIGl0LCBz byB0aGlzIGlzIGEgc3luY2hyb25vdXMgcHJvY2Vzcy4gICovCi0KLSAgICAgIHN5bmNoX3By b2Nlc3NfYWxpdmUgPSAwOwotCi0gICAgICAvKiBSZXBvcnQgdGhlIHN0YXR1cyBvZiB0aGUg c3luY2hyb25vdXMgcHJvY2Vzcy4gICovCi0gICAgICBpZiAoV0lGRVhJVEVEICh3KSkKLQlz eW5jaF9wcm9jZXNzX3JldGNvZGUgPSBXRVhJVFNUQVRVUyAodyk7Ci0gICAgICBlbHNlIGlm IChXSUZTSUdOQUxFRCAodykpCi0Jc3luY2hfcHJvY2Vzc190ZXJtc2lnID0gV1RFUk1TSUcg KHcpOwotCi0gICAgICAvKiBUZWxsIHdhaXRfcmVhZGluZ19wcm9jZXNzX291dHB1dCB0aGF0 IGl0IG5lZWRzIHRvIHdha2UgdXAgYW5kCi0JIGxvb2sgYXJvdW5kLiAgKi8KLSAgICAgIGlm IChpbnB1dF9hdmFpbGFibGVfY2xlYXJfdGltZSkKLQkqaW5wdXRfYXZhaWxhYmxlX2NsZWFy X3RpbWUgPSBtYWtlX2VtYWNzX3RpbWUgKDAsIDApOwotICAgIH0KLSNlbmRpZgotfQotCi0j aWZkZWYgU0lHQ0hMRAotCi1zdGF0aWMgdm9pZAotaGFuZGxlX2NoaWxkX3NpZ25hbCAoaW50 IHNpZykKLXsKLSAgcmVjb3JkX2NoaWxkX3N0YXR1c19jaGFuZ2UgKC0xLCAwKTsKIH0KIAog c3RhdGljIHZvaWQKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvcHJvY2Vzcy5oJwotLS0gc3Jj L3Byb2Nlc3MuaAkyMDEyLTExLTI3IDAzOjEwOjMyICswMDAwCisrKyBzcmMvcHJvY2Vzcy5o CTIwMTItMTEtMjcgMTc6MDg6NTAgKzAwMDAKQEAgLTE4NSwyMyArMTg1LDYgQEAKIH0KICNl bmRpZgogCi0vKiBUcnVlIGlmIHdlIGFyZSBhYm91dCB0byBmb3JrIG9mZiBhIHN5bmNocm9u b3VzIHByb2Nlc3Mgb3IgaWYgd2UKLSAgIGFyZSB3YWl0aW5nIGZvciBpdC4gICovCi1leHRl cm4gYm9vbCBzeW5jaF9wcm9jZXNzX2FsaXZlOwotCi0vKiBDb21tdW5pY2F0ZSBleGl0IHN0 YXR1cyBvZiBzeW5jIHByb2Nlc3MgdG8gZnJvbSBzaWdjaGxkX2hhbmRsZXIKLSAgIHRvIEZj YWxsX3Byb2Nlc3MuICAqLwotCi0vKiBOb256ZXJvID0+IHRoaXMgaXMgYSBzdHJpbmcgZXhw bGFpbmluZyBkZWF0aCBvZiBzeW5jaHJvbm91cyBzdWJwcm9jZXNzLiAgKi8KLWV4dGVybiBj b25zdCBjaGFyICpzeW5jaF9wcm9jZXNzX2RlYXRoOwotCi0vKiBOb256ZXJvID0+IHRoaXMg aXMgdGhlIHNpZ25hbCBudW1iZXIgdGhhdCB0ZXJtaW5hdGVkIHRoZSBzdWJwcm9jZXNzLiAg Ki8KLWV4dGVybiBpbnQgc3luY2hfcHJvY2Vzc190ZXJtc2lnOwotCi0vKiBJZiBzeW5jaF9w cm9jZXNzX2RlYXRoIGlzIHplcm8sCi0gICB0aGlzIGlzIGV4aXQgY29kZSBvZiBzeW5jaHJv bm91cyBzdWJwcm9jZXNzLiAgKi8KLWV4dGVybiBpbnQgc3luY2hfcHJvY2Vzc19yZXRjb2Rl OwotCiAvKiBOb256ZXJvIG1lYW5zIGRvbid0IHJ1biBwcm9jZXNzIHNlbnRpbmVscy4gIFRo aXMgaXMgdXNlZAogICAgd2hlbiBleGl0aW5nLiAgKi8KIGV4dGVybiBpbnQgaW5oaWJpdF9z ZW50aW5lbHM7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3N5c2RlcC5jJwotLS0gc3JjL3N5 c2RlcC5jCTIwMTItMTEtMjcgMDM6MTA6MzIgKzAwMDAKKysrIHNyYy9zeXNkZXAuYwkyMDEy LTExLTI5IDAxOjExOjQ5ICswMDAwCkBAIC0yNjYsNDUgKzI2Niw3MSBAQAogCiAjaWZuZGVm IE1TRE9TCiAKLXN0YXRpYyB2b2lkCi13YWl0X2Zvcl90ZXJtaW5hdGlvbl8xIChwaWRfdCBw aWQsIGludCBpbnRlcnJ1cHRpYmxlKQorLyogV2FpdCBmb3IgdGhlIHN1YnByb2Nlc3Mgd2l0 aCBwcm9jZXNzIGlkIENISUxEIHRvIHRlcm1pbmF0ZSBvciBjaGFuZ2Ugc3RhdHVzLgorICAg Q0hJTEQgbXVzdCBiZSBhIGNoaWxkIHByb2Nlc3MgdGhhdCBoYXMgbm90IGJlZW4gcmVhcGVk LgorICAgSWYgU1RBVFVTIGlzIG5vbi1udWxsLCBzdG9yZSB0aGUgd2FpdHBpZC1zdHlsZSBl eGl0IHN0YXR1cyBpbnRvICpTVEFUVVMKKyAgIGFuZCB0ZWxsIHdhaXRfcmVhZGluZ19wcm9j ZXNzX291dHB1dCB0aGF0IGl0IG5lZWRzIHRvIGxvb2sgYXJvdW5kLgorICAgVXNlIHdhaXRw aWQtc3R5bGUgT1BUSU9OUyB3aGVuIHdhaXRpbmcuCisgICBJZiBJTlRFUlJVUFRJQkxFLCB0 aGlzIGZ1bmN0aW9uIGlzIGludGVycnVwdGlibGUgYnkgYSBzaWduYWwuCisKKyAgIFJldHVy biBDSElMRCBpZiBzdWNjZXNzZnVsLCAwIGlmIG5vIHN0YXR1cyBpcyBhdmFpbGFibGU7Cisg ICB0aGUgbGF0dGVyIGlzIHBvc3NpYmxlIG9ubHkgd2hlbiBvcHRpb25zICYgTk9IQU5HLiAg Ki8KK3N0YXRpYyBwaWRfdAorZ2V0X2NoaWxkX3N0YXR1cyAocGlkX3QgY2hpbGQsIGludCAq c3RhdHVzLCBpbnQgb3B0aW9ucywgYm9vbCBpbnRlcnJ1cHRpYmxlKQogewotICB3aGlsZSAo MSkKKyAgcGlkX3QgcGlkOworCisgIC8qIEludm9rZSB3YWl0cGlkIG9ubHkgd2l0aCBhIGtu b3duIHByb2Nlc3MgSUQ7IGRvIG5vdCBpbnZva2UKKyAgICAgd2FpdHBpZCB3aXRoIGEgbm9u cG9zaXRpdmUgYXJndW1lbnQuICBPdGhlcndpc2UsIEVtYWNzIG1pZ2h0CisgICAgIHJlYXAg YW4gdW53YW50ZWQgcHJvY2VzcyBieSBtaXN0YWtlLiAgRm9yIGV4YW1wbGUsIGludm9raW5n CisgICAgIHdhaXRwaWQgKC0xLCAuLi4pIGNhbiBtZXNzIHVwIGdsaWIgYnkgcmVhcGluZyBn bGliJ3Mgc3VicHJvY2Vzc2VzLAorICAgICBzbyB0aGF0IGFub3RoZXIgdGhyZWFkIHJ1bm5p bmcgZ2xpYiB3b24ndCBmaW5kIHRoZW0uICAqLworICBlYXNzZXJ0ICgwIDwgY2hpbGQpOwor CisgIHdoaWxlICgocGlkID0gd2FpdHBpZCAoY2hpbGQsIHN0YXR1cywgb3B0aW9ucykpIDwg MCkKICAgICB7Ci0gICAgICBpbnQgc3RhdHVzOwotICAgICAgaW50IHdhaXRfcmVzdWx0ID0g d2FpdHBpZCAocGlkLCAmc3RhdHVzLCAwKTsKLSAgICAgIGlmICh3YWl0X3Jlc3VsdCA8IDAp Ci0JewotCSAgaWYgKGVycm5vICE9IEVJTlRSKQotCSAgICBicmVhazsKLQl9Ci0gICAgICBl bHNlCi0JewotCSAgcmVjb3JkX2NoaWxkX3N0YXR1c19jaGFuZ2UgKHdhaXRfcmVzdWx0LCBz dGF0dXMpOwotCSAgYnJlYWs7Ci0JfQorICAgICAgLyogQ0hJTEQgbXVzdCBiZSBhIGNoaWxk IHByb2Nlc3MgdGhhdCBoYXMgbm90IGJlZW4gcmVhcGVkLCBhbmQKKwkgU1RBVFVTIGFuZCBP UFRJT05TIG11c3QgYmUgdmFsaWQuICAqLworICAgICAgZWFzc2VydCAoZXJybm8gPT0gRUlO VFIpOwogCiAgICAgICAvKiBOb3RlOiB0aGUgTVMtV2luZG93cyBlbXVsYXRpb24gb2Ygd2Fp dHBpZCBjYWxscyBRVUlUCiAJIGludGVybmFsbHkuICAqLwogICAgICAgaWYgKGludGVycnVw dGlibGUpCiAJUVVJVDsKICAgICB9Ci19Ci0KLS8qIFdhaXQgZm9yIHN1YnByb2Nlc3Mgd2l0 aCBwcm9jZXNzIGlkIGBwaWQnIHRvIHRlcm1pbmF0ZSBhbmQKLSAgIG1ha2Ugc3VyZSBpdCB3 aWxsIGdldCBlbGltaW5hdGVkIChub3QgcmVtYWluIGZvcmV2ZXIgYXMgYSB6b21iaWUpICov Ci0KLXZvaWQKLXdhaXRfZm9yX3Rlcm1pbmF0aW9uIChwaWRfdCBwaWQpCi17Ci0gIHdhaXRf Zm9yX3Rlcm1pbmF0aW9uXzEgKHBpZCwgMCk7Ci19Ci0KLS8qIExpa2UgdGhlIGFib3ZlLCBi dXQgYWxsb3cga2V5Ym9hcmQgaW50ZXJydXB0aW9uLiAqLwotdm9pZAotaW50ZXJydXB0aWJs ZV93YWl0X2Zvcl90ZXJtaW5hdGlvbiAocGlkX3QgcGlkKQotewotICB3YWl0X2Zvcl90ZXJt aW5hdGlvbl8xIChwaWQsIDEpOworCisgIC8qIElmIHN1Y2Nlc3NmdWwgYW5kIHN0YXR1cyBp cyByZXF1ZXN0ZWQsIHRlbGwgd2FpdF9yZWFkaW5nX3Byb2Nlc3Nfb3V0cHV0CisgICAgIHRo YXQgaXQgbmVlZHMgdG8gd2FrZSB1cCBhbmQgbG9vayBhcm91bmQuICAqLworICBpZiAocGlk ICYmIHN0YXR1cyAmJiBpbnB1dF9hdmFpbGFibGVfY2xlYXJfdGltZSkKKyAgICAqaW5wdXRf YXZhaWxhYmxlX2NsZWFyX3RpbWUgPSBtYWtlX2VtYWNzX3RpbWUgKDAsIDApOworCisgIHJl dHVybiBwaWQ7Cit9CisKKy8qIFdhaXQgZm9yIHRoZSBzdWJwcm9jZXNzIHdpdGggcHJvY2Vz cyBpZCBDSElMRCB0byB0ZXJtaW5hdGUuCisgICBDSElMRCBtdXN0IGJlIGEgY2hpbGQgcHJv Y2VzcyB0aGF0IGhhcyBub3QgYmVlbiByZWFwZWQuCisgICBJZiBTVEFUVVMgaXMgbm9uLW51 bGwsIHN0b3JlIHRoZSB3YWl0cGlkLXN0eWxlIGV4aXQgc3RhdHVzIGludG8gKlNUQVRVUwor ICAgYW5kIHRlbGwgd2FpdF9yZWFkaW5nX3Byb2Nlc3Nfb3V0cHV0IHRoYXQgaXQgbmVlZHMg dG8gbG9vayBhcm91bmQuCisgICBJZiBJTlRFUlJVUFRJQkxFLCB0aGlzIGZ1bmN0aW9uIGlz IGludGVycnVwdGlibGUgYnkgYSBzaWduYWwuICAqLwordm9pZAord2FpdF9mb3JfdGVybWlu YXRpb24gKHBpZF90IGNoaWxkLCBpbnQgKnN0YXR1cywgYm9vbCBpbnRlcnJ1cHRpYmxlKQor eworICBnZXRfY2hpbGRfc3RhdHVzIChjaGlsZCwgc3RhdHVzLCAwLCBpbnRlcnJ1cHRpYmxl KTsKK30KKworLyogUmVwb3J0IHdoZXRoZXIgdGhlIHN1YnByb2Nlc3Mgd2l0aCBwcm9jZXNz IGlkIENISUxEIGhhcyBjaGFuZ2VkIHN0YXR1cy4KKyAgIFRlcm1pbmF0aW9uIGNvdW50cyBh cyBhIGNoYW5nZSBvZiBzdGF0dXMuCisgICBDSElMRCBtdXN0IGJlIGEgY2hpbGQgcHJvY2Vz cyB0aGF0IGhhcyBub3QgYmVlbiByZWFwZWQuCisgICBJZiBTVEFUVVMgaXMgbm9uLW51bGws IHN0b3JlIHRoZSB3YWl0cGlkLXN0eWxlIGV4aXQgc3RhdHVzIGludG8gKlNUQVRVUworICAg YW5kIHRlbGwgd2FpdF9yZWFkaW5nX3Byb2Nlc3Nfb3V0cHV0IHRoYXQgaXQgbmVlZHMgdG8g bG9vayBhcm91bmQuCisgICBVc2Ugd2FpdHBpZC1zdHlsZSBPUFRJT05TIHRvIGNoZWNrIHN0 YXR1cywgYnV0IGRvIG5vdCB3YWl0LgorCisgICBSZXR1cm4gQ0hJTEQgaWYgc3VjY2Vzc2Z1 bCwgMCBpZiBubyBzdGF0dXMgaXMgYXZhaWxhYmxlIGJlY2F1c2UKKyAgIHRoZSBwcm9jZXNz J3Mgc3RhdGUgaGFzIG5vdCBjaGFuZ2VkLiAgKi8KK3BpZF90CitjaGlsZF9zdGF0dXNfY2hh bmdlZCAocGlkX3QgY2hpbGQsIGludCAqc3RhdHVzLCBpbnQgb3B0aW9ucykKK3sKKyAgcmV0 dXJuIGdldF9jaGlsZF9zdGF0dXMgKGNoaWxkLCBzdGF0dXMsIFdOT0hBTkcgfCBvcHRpb25z LCAwKTsKIH0KIAogLyoKQEAgLTQ1NCw2ICs0ODAsNyBAQAogICBjaGFyIG9sZHdkW01BWFBB VEhMRU4rMV07IC8qIEZpeGVkIGxlbmd0aCBpcyBzYWZlIG9uIE1TRE9TLiAgKi8KICNlbmRp ZgogICBwaWRfdCBwaWQ7CisgIGludCBzdGF0dXM7CiAgIHN0cnVjdCBzYXZlX3NpZ25hbCBz YXZlZF9oYW5kbGVyc1s1XTsKICAgTGlzcF9PYmplY3QgZGlyOwogICB1bnNpZ25lZCBjaGFy ICp2b2xhdGlsZSBzdHJfdm9sYXRpbGUgPSAwOwpAQCAtNDkxLDcgKzUxOCw2IEBACiAjaWZk ZWYgRE9TX05UCiAgIHBpZCA9IDA7CiAgIHNhdmVfc2lnbmFsX2hhbmRsZXJzIChzYXZlZF9o YW5kbGVycyk7Ci0gIHN5bmNoX3Byb2Nlc3NfYWxpdmUgPSAxOwogI2Vsc2UKICAgcGlkID0g dmZvcmsgKCk7CiAgIGlmIChwaWQgPT0gLTEpCkBAIC01NjAsMTQgKzU4NiwxMiBAQAogICAv KiBEbyB0aGlzIG5vdyBpZiB3ZSBkaWQgbm90IGRvIGl0IGJlZm9yZS4gICovCiAjaWZuZGVm IE1TRE9TCiAgIHNhdmVfc2lnbmFsX2hhbmRsZXJzIChzYXZlZF9oYW5kbGVycyk7Ci0gIHN5 bmNoX3Byb2Nlc3NfYWxpdmUgPSAxOwogI2VuZGlmCiAKICNpZm5kZWYgRE9TX05UCi0gIHdh aXRfZm9yX3Rlcm1pbmF0aW9uIChwaWQpOworICB3YWl0X2Zvcl90ZXJtaW5hdGlvbiAocGlk LCAmc3RhdHVzLCAwKTsKICNlbmRpZgogICByZXN0b3JlX3NpZ25hbF9oYW5kbGVycyAoc2F2 ZWRfaGFuZGxlcnMpOwotICBzeW5jaF9wcm9jZXNzX2FsaXZlID0gMDsKIH0KIAogc3RhdGlj IHZvaWQKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvc3lzd2FpdC5oJwotLS0gc3JjL3N5c3dh aXQuaAkyMDEyLTA5LTIzIDIyOjI1OjIyICswMDAwCisrKyBzcmMvc3lzd2FpdC5oCTIwMTIt MTEtMjkgMDE6MTE6NDkgKzAwMDAKQEAgLTIzLDYgKzIzLDcgQEAKICNpZm5kZWYgRU1BQ1Nf U1lTV0FJVF9ICiAjZGVmaW5lIEVNQUNTX1NZU1dBSVRfSAogCisjaW5jbHVkZSA8c3RkYm9v bC5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCiAjaWZkZWYgSEFWRV9TWVNfV0FJVF9I CS8qIFdlIGhhdmUgc3lzL3dhaXQuaCB3aXRoIFBPU0lYb2lkIGRlZmluaXRpb25zLiAqLwpA QCAtNTIsMTAgKzUzLDEwIEBACiAjZW5kaWYKIAogLyogRGVmaW5lZCBpbiBwcm9jZXNzLmMu ICAqLwotZXh0ZXJuIHZvaWQgcmVjb3JkX2NoaWxkX3N0YXR1c19jaGFuZ2UgKHBpZF90LCBp bnQpOworZXh0ZXJuIHZvaWQgcmVjb3JkX2RlbGV0ZWRfcGlkIChwaWRfdCk7CiAKIC8qIERl ZmluZWQgaW4gc3lzZGVwLmMuICAqLwotZXh0ZXJuIHZvaWQgd2FpdF9mb3JfdGVybWluYXRp b24gKHBpZF90KTsKLWV4dGVybiB2b2lkIGludGVycnVwdGlibGVfd2FpdF9mb3JfdGVybWlu YXRpb24gKHBpZF90KTsKK2V4dGVybiB2b2lkIHdhaXRfZm9yX3Rlcm1pbmF0aW9uIChwaWRf dCwgaW50ICosIGJvb2wpOworZXh0ZXJuIHBpZF90IGNoaWxkX3N0YXR1c19jaGFuZ2VkIChw aWRfdCwgaW50ICosIGludCk7CiAKICNlbmRpZiAvKiBFTUFDU19TWVNXQUlUX0ggKi8KCj09 PSBtb2RpZmllZCBmaWxlICdzcmMvdzMycHJvYy5jJwotLS0gc3JjL3czMnByb2MuYwkyMDEy LTExLTI3IDAzOjEwOjMyICswMDAwCisrKyBzcmMvdzMycHJvYy5jCTIwMTItMTEtMjkgMDE6 MTE6NDkgKzAwMDAKQEAgLTEyNzQsMzMgKzEyNzQsNyBAQAogI2VuZGlmCiAKICAgaWYgKHN0 YXR1cykKLSAgICB7Ci0gICAgICAqc3RhdHVzID0gcmV0dmFsOwotICAgIH0KLSAgZWxzZSBp ZiAoc3luY2hfcHJvY2Vzc19hbGl2ZSkKLSAgICB7Ci0gICAgICBzeW5jaF9wcm9jZXNzX2Fs aXZlID0gMDsKLQotICAgICAgLyogUmVwb3J0IHRoZSBzdGF0dXMgb2YgdGhlIHN5bmNocm9u b3VzIHByb2Nlc3MuICAqLwotICAgICAgaWYgKFdJRkVYSVRFRCAocmV0dmFsKSkKLQlzeW5j aF9wcm9jZXNzX3JldGNvZGUgPSBXRVhJVFNUQVRVUyAocmV0dmFsKTsKLSAgICAgIGVsc2Ug aWYgKFdJRlNJR05BTEVEIChyZXR2YWwpKQotCXsKLQkgIGludCBjb2RlID0gV1RFUk1TSUcg KHJldHZhbCk7Ci0JICBjb25zdCBjaGFyICpzaWduYW1lOwotCi0JICBzeW5jaHJvbml6ZV9z eXN0ZW1fbWVzc2FnZXNfbG9jYWxlICgpOwotCSAgc2lnbmFtZSA9IHN0cnNpZ25hbCAoY29k ZSk7Ci0KLQkgIGlmIChzaWduYW1lID09IDApCi0JICAgIHNpZ25hbWUgPSAidW5rbm93biI7 Ci0KLQkgIHN5bmNoX3Byb2Nlc3NfZGVhdGggPSBzaWduYW1lOwotCX0KLQotICAgICAgcmVh cF9zdWJwcm9jZXNzIChjcCk7Ci0gICAgfQotCisgICAgKnN0YXR1cyA9IHJldHZhbDsKICAg cmVhcF9zdWJwcm9jZXNzIChjcCk7CiAKICAgcmV0dXJuIHBpZDsKCg== --------------090006010900090003030103--