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#13807: updated version to avoid MS-Windows vs non-MS-Windows clashes Date: Sun, 03 Mar 2013 15:56:03 -0800 Organization: UCLA Computer Science Department Message-ID: <5133E313.5040701@cs.ucla.edu> References: <512A98D5.7080000@cs.ucla.edu> <512D3508.1000906@cs.ucla.edu> <83txoxwq0p.fsf@gnu.org> <51326459.4030001@cs.ucla.edu> <83vc99tsbm.fsf@gnu.org> <51327F29.5000600@cs.ucla.edu> <83ppzgtp2c.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------060107000305030307010009" X-Trace: ger.gmane.org 1362355027 27772 80.91.229.3 (3 Mar 2013 23:57:07 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 3 Mar 2013 23:57:07 +0000 (UTC) Cc: 13807@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Mar 04 00:57:28 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 1UCImU-00087t-RA for geb-bug-gnu-emacs@m.gmane.org; Mon, 04 Mar 2013 00:57:27 +0100 Original-Received: from localhost ([::1]:53847 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UCIm9-0000lW-FD for geb-bug-gnu-emacs@m.gmane.org; Sun, 03 Mar 2013 18:57:05 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:37211) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UCIm0-0000lC-Jd for bug-gnu-emacs@gnu.org; Sun, 03 Mar 2013 18:57:02 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UCIlv-0006w7-Rw for bug-gnu-emacs@gnu.org; Sun, 03 Mar 2013 18:56:56 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:53620) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UCIlv-0006vh-Ne for bug-gnu-emacs@gnu.org; Sun, 03 Mar 2013 18:56:51 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1UCIm6-0008Pu-Dh for bug-gnu-emacs@gnu.org; Sun, 03 Mar 2013 18:57: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: Sun, 03 Mar 2013 23:57:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 13807 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 13807-submit@debbugs.gnu.org id=B13807.136235500032321 (code B ref 13807); Sun, 03 Mar 2013 23:57:02 +0000 Original-Received: (at 13807) by debbugs.gnu.org; 3 Mar 2013 23:56:40 +0000 Original-Received: from localhost ([127.0.0.1]:57729 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UCIlg-0008P9-7u for submit@debbugs.gnu.org; Sun, 03 Mar 2013 18:56:40 -0500 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:48152) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UCIlX-0008Oh-Sg for 13807@debbugs.gnu.org; Sun, 03 Mar 2013 18:56:34 -0500 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 62576A60045; Sun, 3 Mar 2013 15:56: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 cNWN2lSnBYnn; Sun, 3 Mar 2013 15:56:05 -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 9A02FA6003D; Sun, 3 Mar 2013 15:56:03 -0800 (PST) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130221 Thunderbird/17.0.3 In-Reply-To: <83ppzgtp2c.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:72053 Archived-At: This is a multi-part message in MIME format. --------------060107000305030307010009 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 03/03/2013 08:39 AM, Eli Zaretskii wrote: > the primitives you used in your suggested patch have problems on Windows: > 'rename' is not atomic when it needs to delete the target ... > and hard links are only supported on NTFS Thanks for mentioning these problems. The latter issue affects GNU/Linux, too, since it also can mount FAT32 file systems. Attached is a revised patch that tries to address these problems. > My testing indicates that 'readdir' does return the file's name, but > every other system call I tried, including even 'lstat', fails with > EPERM. (I don't know whether all NFS servers behave that way.) They don't. Traditional NFS servers are stateless, and do not have a state where a file exists and its parent directory is accessible but you cannot stat the file. I'd even call that behavior a bug: file servers with that behavior will cause problems with many GNU programs, including Emacs. It would not be wise for Emacs to rely on or encourage that behavior. > with the changes you installed, I think even if .#FILE > _can_ be accessed, Emacs on a Posix host will refrain from > locking it, because 'readlink' will fail for it, right? That's correct: the existence of a regular-file .#FILE prevents Emacs from locking FILE, and Emacs goes ahead and accesses FILE without bothering to lock it. The assumption is that .#FILE was created for some other reason and should not be messed with. > these issues are unrelated to the MS-Windows build of Emacs. I don't see why they're unrelated. If an MS-Windows Emacs uses regular files for locks, these files get in the way of GNU/Linux Emacs lock files, and that makes these issues pop up. > They existed since about forever, and we never cared. > Why is it suddenly so important that this feature works It's important because the MS-Windows code was recently changed to create lock files, the existence of which could break GNU/Linux Emacs's locking. > with 110% reliability, something it never did? Even with the attached patch, lock files are not 100% reliable. The main point of my patches have been to prevent lock files from being significantly less reliable than they already were. If we easily can make them more reliable, so much the better, but that's not the main goal. --------------060107000305030307010009 Content-Type: text/plain; charset=UTF-8; name="filelock2.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="filelock2.txt" PT09IG1vZGlmaWVkIGZpbGUgJ2V0Yy9DaGFuZ2VMb2cnCi0tLSBldGMvQ2hhbmdlTG9nCTIw MTMtMDMtMDMgMDA6MDI6MTkgKzAwMDAKKysrIGV0Yy9DaGFuZ2VMb2cJMjAxMy0wMy0wMyAw MDoxOTo0NyArMDAwMApAQCAtMSwzICsxLDggQEAKKzIwMTMtMDMtMDMgIFBhdWwgRWdnZXJ0 ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJRklMRSdzIGxvY2sgaXMgbm93IGFsd2F5cyAu I0ZJTEUgYW5kIG1heSBiZSBhIHJlZ3VsYXIgZmlsZSAoQnVnIzEzODA3KS4KKwkqIE5FV1M6 IERvY3VtZW50IHRoaXMuCisKIDIwMTMtMDMtMDIgIEJpbGwgV29obGVyICA8d29obGVyQG5l d3QuY29tPgogCiAJUmVsZWFzZSBNSC1FIHZlcnNpb24gOC41LgoKPT09IG1vZGlmaWVkIGZp bGUgJ2V0Yy9ORVdTJwotLS0gZXRjL05FV1MJMjAxMy0wMy0wMyAwMDowMjoxOSArMDAwMAor KysgZXRjL05FV1MJMjAxMy0wMy0wMyAwMDoxODoxMyArMDAwMApAQCAtMzIwLDcgKzMyMCw3 IEBACiAqKiBUaGUgYGRlZmFsaWFzLWZzZXQtZnVuY3Rpb24nIHByb3BlcnR5IGxldHMgeW91 IGNhdGNoIGNhbGxzIHRvIGRlZmFsaWFzCiBhbmQgcmVkaXJlY3QgdGhlbSB0byB5b3VyIG93 biBmdW5jdGlvbiBpbnN0ZWFkIG9mIGBmc2V0Jy4KIAotKiogVGhlIGxvY2sgZm9yICdESVIv RklMRScgaXMgbm93ICdESVIvLiNGSUxFJyBvciAnRElSLy4jLUZJTEUnLgorKiogVGhlIGxv Y2sgZm9yICdESVIvRklMRScgaXMgbm93ICdESVIvLiNGSUxFJyBhbmQgbWF5IGJlIGEgcmVn dWxhciBmaWxlLgogV2hlbiB5b3UgZWRpdCBESVIvRklMRSwgRW1hY3Mgbm9ybWFsbHkgY3Jl YXRlcyBhIHN5bWJvbGljIGxpbmsKIERJUi8uI0ZJTEUgYXMgYSBsb2NrIHRoYXQgd2FybnMg b3RoZXIgaW5zdGFuY2VzIG9mIEVtYWNzIHRoYXQgRElSL0ZJTEUKIGlzIGJlaW5nIGVkaXRl ZC4gIEZvcm1lcmx5LCBpZiB0aGVyZSB3YXMgYWxyZWFkeSBhIG5vbi1zeW1saW5rIGZpbGUK QEAgLTMyOCw5ICszMjgsOCBAQAogdGhyb3VnaCBESVIvLiNGSUxFLjkuICBUaGVzZSBmYWxs YmFja3MgaGF2ZSBiZWVuIHJlbW92ZWQsIHNvIHRoYXQKIEVtYWNzIG5vdyBubyBsb25nZXIg bG9ja3MgRElSL0ZJTEUgaW4gdGhhdCBjYXNlLgogCi1PbiBNUy1XaW5kb3dzIHRoZSBsb2Nr IGlzIGEgcmVndWxhciBmaWxlIERJUi8uIy1GSUxFLCBub3QgYSBzeW1saW5rLgotTVMtV2lu ZG93cyBhbmQgbm9uLU1TLVdpbmRvd3MgaW1wbGVtZW50YXRpb25zIG9mIEVtYWNzIGlnbm9y ZSBlYWNoCi1vdGhlcidzIGxvY2tzLgorT24gZmlsZSBzeXN0ZW1zIHRoYXQgZG8gbm90IHN1 cHBvcnQgc3ltYm9saWMgbGlua3MsIHRoZSBsb2NrIGlzIG5vdyBhCityZWd1bGFyIGZpbGUg d2l0aCBjb250ZW50cyBiZWluZyB3aGF0IHdvdWxkIGhhdmUgYmVlbiBpbiB0aGUgc3ltbGlu ay4KIAogKiogVGhlIDl0aCBlbGVtZW50IHJldHVybmVkIGJ5IGBmaWxlLWF0dHJpYnV0ZXMn IGlzIG5vdyB1bnNwZWNpZmllZC4KIEZvcm1lcmx5LCBpdCB3YXMgdCBpZiB0aGUgZmlsZSdz IGdpZCB3b3VsZCBjaGFuZ2UgaWYgZmlsZSB3ZXJlIGRlbGV0ZWQKCj09PSBtb2RpZmllZCBm aWxlICdzcmMvQ2hhbmdlTG9nJwotLS0gc3JjL0NoYW5nZUxvZwkyMDEzLTAzLTAyIDIxOjA1 OjUyICswMDAwCisrKyBzcmMvQ2hhbmdlTG9nCTIwMTMtMDMtMDMgMjM6MTI6NTQgKzAwMDAK QEAgLTEsNSArMSw1NyBAQAorMjAxMy0wMy0wMyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3Mu dWNsYS5lZHU+CisKKwlGSUxFJ3MgbG9jayBpcyBub3cgYWx3YXlzIC4jRklMRSBhbmQgbWF5 IGJlIGEgcmVndWxhciBmaWxlIChCdWcjMTM4MDcpLgorCSogZmlsZWxvY2suYzogSW5jbHVk ZSA8Yy1jdHlwZS5oPi4KKwkoTUFYX0xGSU5GTyk6IE5ldyB0b3AtbGV2ZWwgY29uc3RhbnQu CisJKGxvY2tfaW5mb190eXBlKTogUmVtb3ZlIG1lbWJlcnMgcGlkLCBib290X3RpbWUuICBB ZGQgbWVtYmVycyBhdCwKKwlkb3QsIGNvbG9uLiAgQ2hhbmdlIHVzZXIgbWVtYmVyIHRvIGJl IHRoZSBlbnRpcmUgYnVmZmVyLCBub3QgYQorCXBvaW50ZXIuICBUaGlzIGFsbG93cyB1cyB0 byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBmb3JlaWduCisJcGlkIG9yIGJvb3QgdGltZSBl eGNlZWRzIHRoZSBsb2NhbCByYW5nZS4gIEFsbCB1c2VzIGNoYW5nZWQuCisJKExJTktTX01J R0hUX05PVF9XT1JLKTogTmV3IGNvbnN0YW50LgorCShGUkVFX0xPQ0tfSU5GTyk6IFJlbW92 ZSwgYXMgdGhlIHBpZWNlcyBubyBsb25nZXIgbmVlZCBmcmVlaW5nLgorCShkZWZpbmVkX1dJ TkRPV1NOVCk6IFJlbW92ZS4KKwkoTUFLRV9MT0NLX05BTUUsIGZpbGVfaW5fbG9ja19maWxl X25hbWUpOgorCUFsd2F5cyB1c2UgLiNGSUxFIChub3QgLiMtRklMRSkgZm9yIHRoZSBmaWxl IGxvY2ssCisJZXZlbiBpZiBpdCBpcyBhIHJlZ3VsYXIgZmlsZS4KKwkocmVuYW1lX2xvY2tf ZmlsZSk6IE5ldyBmdW5jdGlvbi4KKwkoY3JlYXRlX2xvY2tfZmlsZSk6IFVzZSBpdC4KKwko Y3JlYXRlX2xvY2tfZmlsZSwgcmVhZF9sb2NrX2RhdGEpOgorCVByZWZlciBhIHN5bWJvbGlj IGxpbmsgZm9yIHRoZSBsb2NrIGZpbGUsIGZhbGxpbmcgYmFjayBvbiBhCisJcmVndWxhciBm aWxlIGlmIHN5bWxpbmtzIGRvbid0IHdvcmsuICBEbyBub3QgdHJ5IHRvIGNyZWF0ZQorCXN5 bWxpbmtzIG9uIE1TLVdpbmRvd3MsIGR1ZSB0byBzZWN1cml0eSBoYXNzbGVzLiAgU3RpY2sg d2l0aAorCVBPU0lYaXNoIGZ1bmN0aW9ucyAob3BlbiwgcmVhZCwgd3JpdGUsIGNsb3NlLCBy ZWFkbGluaywgc3ltbGluaywKKwlsaW5rLCByZW5hbWUsIHVubGluaywgbWtzdGVtcCkgd2hl biBjcmVhdGluZyBsb2NrcywgYXMgYSBHTlVpc2gKKwlob3N0IG1heSBiZSB1c2luZyBhIFdp bmRvd3Npc2ggZmlsZSBzeXN0ZW0sIGFuZCBjYW5ub3QgdXNlCisJTVMtV2luZG93cy1vbmx5 IHN5c3RlbSBjYWxscy4gIEZhbGwgYmFjayBvbiBta3RlbXAgaWYgbWtzdGVtcAorCWRvZXNu J3Qgd29yay4gIERvbid0IGZhaWwgbWVyZWx5IGJlY2F1c2Ugb2YgYSBzeW1saW5rLWNvbnRl bnRzCisJbGVuZ3RoIGxpbWl0IGluIHRoZSBjdXJyZW50IGZpbGUgc3lzdGVtOyBmYWxsIGJh Y2sgb24gcmVndWxhcgorCWZpbGVzLiAgSW5jcmVhc2UgdGhlIHN5bWxpbmsgY29udGVudHMg bGVuZ3RoIGxpbWl0IHRvIDggS2lCLCB0aGlzCisJc2hvdWxkIGJlIGJpZyBlbm91Z2ggZm9y IGFueSByZWFsIHVzZSBhbmQgZG9lc24ndCBjcnVuY2ggdGhlCisJc3RhY2suCisJKGNyZWF0 ZV9sb2NrX2ZpbGUsIGxvY2tfZmlsZV8xLCByZWFkX2xvY2tfZGF0YSk6CisJU2ltcGxpZnkg YWxsb2NhdGlvbiBvZiBsb2NrIGZpbGUgYnVmZmVycyBub3cgdGhhdCB0aGV5IGZpdCBpbiA4 IEtpQi4KKwkobG9ja19maWxlXzEpOiBSZXR1cm4gZXJyb3IgbnVtYmVyLCBub3QgYm9vbC4g IEFsbCBjYWxsZXJzIGNoYW5nZWQuCisJKHJlYWRfbG9ja19kYXRhKTogUmV0dXJuIHNpemUg b2YgbG9jayBmaWxlIGNvbnRlbnRzLCBub3QgTGlzcCBvYmplY3QuCisJQWxsIGNhbGxlcnMg Y2hhbmdlZC4gIENoZWNrIHRoZSBjb250ZW50cyBvZiBhIHJlZ3VsYXItZmlsZSBsb2NrCisJ Zm9yIG51bGwgYnl0ZXMuICBIYW5kbGUgYSByYWNlIGNvbmRpdGlvbiBpZiBzb21lIG90aGVy IHByb2Nlc3MKKwlyZXBsYWNlcyBhIHJlZ3VsYXItZmlsZSBsb2NrIHdpdGggYSBzeW1saW5r IGxvY2sgb3IgdmljZSB2ZXJzYSwKKwl3aGlsZSB3ZSdyZSB0cnlpbmcgdG8gcmVhZCB0aGUg bG9jay4KKwkoY3VycmVudF9sb2NrX293bmVyKTogUGFyc2UgY29udGVudHMgbW9yZSBjYXJl ZnVsbHksIHRvIGhlbHAgYXZvaWQKKwljb25mdXNpbmcgYSByZWd1bGFyLWZpbGUgbG9jayB3 aXRoIHNvbWUgb3RoZXIgYXBwbGljYXRpb24ncyB1c2UKKwlvZiB0aGUgZmlsZS4gIENoZWNr IGZvciBsb2NrIGZpbGUgY29udGVudHMgYmVpbmcgdG9vIGxvbmcsIG9yCisJbm90IHBhcnNp bmcgY29ycmVjdGx5LgorCShjdXJyZW50X2xvY2tfb3duZXIsIGxvY2tfZmlsZSk6CisJQWxs b3cgZm9yZWlnbiBwaWQgYW5kIGJvb3QgdGltZXMgdGhhdCBleGNlZWQgdGhlIGxvY2FsIHJh bmdlLgorCShjdXJyZW50X2xvY2tfb3duZXIsIGxvY2tfaWZfZnJlZSwgbG9ja19maWxlKToK KwlTaW1wbGlmeSBhbGxvY2F0aW9uIG9mIGxvY2sgZmlsZSBjb250ZW50cy4KKwkqIHczMi5j IChzeXNfcmVuYW1lX3JlcGxhY2UpOiBOZXcgZnVuY3Rpb24sIGNvbnRhaW5pbmcgbW9zdCBv ZgorCXRoZSBjb250ZW50cyBvZiB0aGUgb2xkIHN5c19yZW5hbWUuCisJKHN5c19yZW5hbWUp OiBVc2UgaXQuCisJKiB3MzIuaCAoc3lzX3JlbmFtZV9yZXBsYWNlKTogTmV3IGRlY2wuCisK IDIwMTMtMDMtMDIgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgogCisKIAlU aGUgbG9jayBmb3IgRklMRSBpcyBub3cgLiNGSUxFIG9yIC4jLUZJTEUgKEJ1ZyMxMzgwNyku CiAJVGhlIG9sZCBhcHByb2FjaCwgd2hpY2ggZmVsbCBiYWNrIG9uIERJUi8uI0ZJTEUuMCB0 aHJvdWdoCiAJRElSLy4jRklMRS45LCBoYWQgcmFjZSBjb25kaXRpb25zIHRoYXQgY291bGQg bm90IGJlIGVhc2lseSBmaXhlZC4KCj09PSBtb2RpZmllZCBmaWxlICdzcmMvZmlsZWxvY2su YycKLS0tIHNyYy9maWxlbG9jay5jCTIwMTMtMDMtMDIgMjE6MDU6NTIgKzAwMDAKKysrIHNy Yy9maWxlbG9jay5jCTIwMTMtMDMtMDMgMjM6MzU6NDAgKzAwMDAKQEAgLTM4LDYgKzM4LDgg QEAKIAogI2luY2x1ZGUgPGVycm5vLmg+CiAKKyNpbmNsdWRlIDxjLWN0eXBlLmg+CisKICNp bmNsdWRlICJsaXNwLmgiCiAjaW5jbHVkZSAiY2hhcmFjdGVyLmgiCiAjaW5jbHVkZSAiYnVm ZmVyLmgiCkBAIC02NCw3ICs2Niw3IEBACiAjZGVmaW5lIFdUTVBfRklMRSAiL3Zhci9sb2cv d3RtcCIKICNlbmRpZgogCi0vKiBPbiBub24tTVMtV2luZG93cyBzeXN0ZW1zLCB1c2UgYSBz eW1ib2xpYyBsaW5rIHRvIHJlcHJlc2VudCBhIGxvY2suCisvKiBOb3JtYWxseSB1c2UgYSBz eW1ib2xpYyBsaW5rIHRvIHJlcHJlc2VudCBhIGxvY2suCiAgICBUaGUgc3RyYXRlZ3k6IHRv IGxvY2sgYSBmaWxlIEZOLCBjcmVhdGUgYSBzeW1saW5rIC4jRk4gaW4gRk4ncwogICAgZGly ZWN0b3J5LCB3aXRoIGxpbmsgZGF0YSBgdXNlckBob3N0LnBpZCcuICBUaGlzIGF2b2lkcyBh IHNpbmdsZQogICAgbW91bnQgKD09IGZhaWx1cmUpIHBvaW50IGZvciBsb2NrIGZpbGVzLgpA QCAtMTAwLDEwICsxMDIsMjEgQEAKIAogICAgLS1rYXJsQGNzLnVtYi5lZHUva2FybEBocS5p bGVhZi5jb20uCiAKLSAgIE9uIE1TLVdpbmRvd3MsIHN5bWJvbGljIGxpbmtzIGRvIG5vdCB3 b3JrIHdlbGwsIHNvIGluc3RlYWQgb2YgYQotICAgc3ltbGluayAuI0ZOIC0+ICd1c2VyQGhv c3QucGlkJywgdGhlIGxvY2sgaXMgYSByZWd1bGFyIGZpbGUgLiMtRk4KLSAgIHdpdGggY29u dGVudHMgJ3VzZXJAaG9zdC5waWQnLiAgTVMtV2luZG93cyBhbmQgbm9uLU1TLVdpbmRvd3MK LSAgIHZlcnNpb25zIG9mIEVtYWNzIGlnbm9yZSBlYWNoIG90aGVyJ3MgbG9ja3MuICAqLwor ICAgT24gc29tZSBmaWxlIHN5c3RlbXMsIG5vdGFibHkgdGhvc2Ugb2YgTVMtV2luZG93cywg c3ltYm9saWMgbGlua3MKKyAgIGRvIG5vdCB3b3JrIHdlbGwsIHNvIGluc3RlYWQgb2YgYSBz eW1saW5rIC4jRk4gLT4gJ3VzZXJAaG9zdC5waWQnLAorICAgdGhlIGxvY2sgaXMgYSByZWd1 bGFyIGZpbGUgLiNGTiB3aXRoIGNvbnRlbnRzICd1c2VyQGhvc3QucGlkJy4gIFRvCisgICBl c3RhYmxpc2ggYSBsb2NrLCBhIG5vbmNlIGZpbGUgaXMgY3JlYXRlZCBhbmQgdGhlbiByZW5h bWVkIHRvIC4jRk4uCisgICBPbiBNUy1XaW5kb3dzIHRoaXMgcmVuYW1pbmcgaXMgYXRvbWlj IHVubGVzcyB0aGUgbG9jayBpcyBmb3JjaWJseQorICAgYWNxdWlyZWQuICBPbiBvdGhlciBz eXN0ZW1zIHRoZSByZW5hbWluZyBpcyBhdG9taWMgaWYgdGhlIGxvY2sgaXMKKyAgIGZvcmNp Ymx5IGFjcXVpcmVkOyBpZiBub3QsIHRoZSByZW5hbWluZyBpcyBkb25lIHZpYSBoYXJkIGxp bmtzLAorICAgd2hpY2ggaXMgZ29vZCBlbm91Z2ggZm9yIGxvY2stZmlsZSBwdXJwb3Nlcy4K KworICAgVG8gc3VtbWFyaXplLCByYWNlIGNvbmRpdGlvbnMgY2FuIG9jY3VyIHdpdGggZWl0 aGVyOgorCisgICAqIEZvcmNlZCBsb2NrcyBvbiBNUy1XaW5kb3dzIHN5c3RlbXMuCisKKyAg ICogTm9uLWZvcmNlZCBsb2NrcyBvbiBub24tTVMtV2luZG93cyBzeXN0ZW1zIHRoYXQgc3Vw cG9ydCBuZWl0aGVyCisgICAgIGhhcmQgbm9yIHN5bWJvbGljIGxpbmtzLiAgKi8KIAogDAog LyogUmV0dXJuIHRoZSB0aW1lIG9mIHRoZSBsYXN0IHN5c3RlbSBib290LiAgKi8KQEAgLTI4 NCwzMCArMjk3LDMxIEBACiB9CiAjZW5kaWYgLyogQk9PVF9USU1FICovCiAMCisvKiBBbiBh cmJpdHJhcnkgbGltaXQgb24gbG9jayBjb250ZW50cyBsZW5ndGguICA4IEsgc2hvdWxkIGJl IHBsZW50eQorICAgYmlnIGVub3VnaCBpbiBwcmFjdGljZS4gICovCitlbnVtIHsgTUFYX0xG SU5GTyA9IDggKiAxMDI0IH07CisKIC8qIEhlcmUgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IHN0 b3JlcyBpbmZvcm1hdGlvbiBhYm91dCBhIGxvY2suICAqLwogCiB0eXBlZGVmIHN0cnVjdAog ewotICBjaGFyICp1c2VyOwotICBjaGFyICpob3N0OwotICBwaWRfdCBwaWQ7Ci0gIHRpbWVf dCBib290X3RpbWU7CisgIC8qIExvY2F0aW9uIG9mICdAJywgJy4nLCAnOicgaW4gVVNFUi4g IElmIHRoZXJlJ3Mgbm8gY29sb24sIENPTE9OCisgICAgIHBvaW50cyB0byB0aGUgZW5kIG9m IFVTRVIuICAqLworICBjaGFyICphdCwgKmRvdCwgKmNvbG9uOworCisgIC8qIExvY2sgZmls ZSBjb250ZW50cyBVU0VSQEhPU1QuUElEIHdpdGggYW4gb3B0aW9uYWwgOkJPT1RfVElNRQor ICAgICBhcHBlbmRlZC4gIFRoaXMgbWVtb3J5IGlzIHVzZWQgYXMgYSBsb2NrIGZpbGUgY29u dGVudHMgYnVmZmVyLCBzbworICAgICBpdCBuZWVkcyByb29tIGZvciBNQVhfTEZJTkZPICsg MSBieXRlcy4gIEEgc3RyaW5nICIgKHBpZCBOTk5OKSIKKyAgICAgbWF5IGJlIGFwcGVuZGVk IHRvIHRoZSBVU0VSQEhPU1Qgd2hpbGUgZ2VuZXJhdGluZyBhIGRpYWdub3N0aWMsCisgICAg IHNvIG1ha2Ugcm9vbSBmb3IgaXRzIGV4dHJhIGJ5dGVzIChhcyBvcHBvc2VkIHRvICIuTk5O TiIpIHRvby4gICovCisgIGNoYXIgdXNlcltNQVhfTEZJTkZPICsgMSArIHNpemVvZiAiIChw aWQgKSIgLSBzaXplb2YgIi4iXTsKIH0gbG9ja19pbmZvX3R5cGU7CiAKLS8qIEZyZWUgdGhl IHR3byBkeW5hbWljYWxseS1hbGxvY2F0ZWQgcGllY2VzIGluIFBUUi4gICovCi0jZGVmaW5l IEZSRUVfTE9DS19JTkZPKGkpIGRvIHsgeGZyZWUgKChpKS51c2VyKTsgeGZyZWUgKChpKS5o b3N0KTsgfSB3aGlsZSAoMCkKLQotI2lmZGVmIFdJTkRPV1NOVAotZW51bSB7IGRlZmluZWRf V0lORE9XU05UID0gMSB9OwotI2Vsc2UKLWVudW0geyBkZWZpbmVkX1dJTkRPV1NOVCA9IDAg fTsKLSNlbmRpZgotCiAvKiBXcml0ZSB0aGUgbmFtZSBvZiB0aGUgbG9jayBmaWxlIGZvciBG TkFNRSBpbnRvIExPQ0tOQU1FLiAgTGVuZ3RoCi0gICB3aWxsIGJlIHRoYXQgb2YgRk5BTUUg cGx1cyB0d28gbW9yZSBmb3IgdGhlIGxlYWRpbmcgIi4jIiwKLSAgIHBsdXMgb25lIGZvciAi LSIgaWYgTVMtV2luZG93cywgcGx1cyBvbmUgZm9yIHRoZSBudWxsLiAgKi8KKyAgIHdpbGwg YmUgdGhhdCBvZiBGTkFNRSBwbHVzIHR3byBtb3JlIGZvciB0aGUgbGVhZGluZyAiLiMiLCBw bHVzIG9uZQorICAgZm9yIHRoZSBudWxsLiAgKi8KICNkZWZpbmUgTUFLRV9MT0NLX05BTUUo bG9ja25hbWUsIGZuYW1lKSBcCi0gIChsb2NrbmFtZSA9IFNBRkVfQUxMT0NBIChTQllURVMg KGZuYW1lKSArIDIgKyBkZWZpbmVkX1dJTkRPV1NOVCArIDEpLCBcCisgIChsb2NrbmFtZSA9 IFNBRkVfQUxMT0NBIChTQllURVMgKGZuYW1lKSArIDIgKyAxKSwgXAogICAgZmlsbF9pbl9s b2NrX2ZpbGVfbmFtZSAobG9ja25hbWUsIGZuYW1lKSkKIAogc3RhdGljIHZvaWQKQEAgLTMx OSw3MCArMzMzLDEyMSBAQAogICBtZW1jcHkgKGxvY2tmaWxlLCBTU0RBVEEgKGZuKSwgZGly bGVuKTsKICAgbG9ja2ZpbGVbZGlybGVuXSA9ICcuJzsKICAgbG9ja2ZpbGVbZGlybGVuICsg MV0gPSAnIyc7Ci0gIGlmIChkZWZpbmVkX1dJTkRPV1NOVCkKLSAgICBsb2NrZmlsZVtkaXJs ZW4gKyAyXSA9ICctJzsKLSAgc3RyY3B5IChsb2NrZmlsZSArIGRpcmxlbiArIDIgKyBkZWZp bmVkX1dJTkRPV1NOVCwgYmFzZSk7Ci19CisgIHN0cmNweSAobG9ja2ZpbGUgKyBkaXJsZW4g KyAyLCBiYXNlKTsKK30KKworLyogRm9yIHNvbWUgcmVhc29uIExpbnV4IGtlcm5lbHMgcmV0 dXJuIEVQRVJNIG9uIGZpbGUgc3lzdGVtcyB0aGF0IGRvCisgICBub3Qgc3VwcG9ydCBoYXJk IG9yIHN5bWJvbGljIGxpbmtzLiAgVGhpcyBzeW1ib2wgZG9jdW1lbnRzIHRoZSBxdWlyay4K KyAgIFRoZXJlIGlzIG5vIHdheSB0byB0ZWxsIHdoZXRoZXIgYSBzeW1saW5rIGNhbGwgZmFp bHMgZHVlIHRvCisgICBwZXJtaXNzaW9ucyBpc3N1ZXMgb3IgYmVjYXVzZSBsaW5rcyBhcmUg bm90IHN1cHBvcnRlZCwgYnV0IGx1Y2tpbHkKKyAgIHRoZSBsb2NrIGZpbGUgY29kZSBzaG91 bGQgd29yayBlaXRoZXIgd2F5LiAgKi8KK2VudW0geyBMSU5LU19NSUdIVF9OT1RfV09SSyA9 IEVQRVJNIH07CisKKy8qIFJlbmFtZSBPTEQgdG8gTkVXLiAgSWYgRk9SQ0UsIHJlcGxhY2Ug YW55IGV4aXN0aW5nIE5FVy4KKyAgIEl0IGlzIE9LIGlmIHRoZXJlIGFyZSB0ZW1wb3Jhcmls eSB0d28gaGFyZCBsaW5rcyB0byBPTEQuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCAt MSAoc2V0dGluZyBlcnJubykgb3RoZXJ3aXNlLiAgKi8KK3N0YXRpYyBpbnQKK3JlbmFtZV9s b2NrX2ZpbGUgKGNoYXIgY29uc3QgKm9sZCwgY2hhciBjb25zdCAqbmV3LCBib29sIGZvcmNl KQoreworI2lmZGVmIFdJTkRPV1NOVAorICByZXR1cm4gc3lzX3JlbmFtZV9yZXBsYWNlIChv bGQsIG5ldywgZm9yY2UpOworI2Vsc2UKKyAgaWYgKCEgZm9yY2UpCisgICAgeworICAgICAg aWYgKGxpbmsgKG9sZCwgbmV3KSA9PSAwKQorCXJldHVybiB1bmxpbmsgKG9sZCkgPT0gMCB8 fCBlcnJubyA9PSBFTk9FTlQgPyAwIDogLTE7CisgICAgICBpZiAoZXJybm8gIT0gRU5PU1lT ICYmIGVycm5vICE9IExJTktTX01JR0hUX05PVF9XT1JLKQorCXJldHVybiAtMTsKKworICAg ICAgLyogJ2xpbmsnIGRvZXMgbm90IHdvcmsgb24gdGhpcyBmaWxlIHN5c3RlbS4gIFRoaXMg Y2FuIG9jY3VyIG9uCisJIGEgR05VL0xpbnV4IGhvc3QgbW91bnRpbmcgYSBGQVQzMiBmaWxl IHN5c3RlbS4gIEZhbGwgYmFjayBvbgorCSAncmVuYW1lJyBhZnRlciBjaGVja2luZyB0aGF0 IE5FVyBkb2VzIG5vdCBleGlzdC4gIFRoZXJlIGlzIGEKKwkgcG90ZW50aWFsIHJhY2UgY29u ZGl0aW9uIHNpbmNlIHNvbWUgb3RoZXIgcHJvY2VzcyBtYXkgY3JlYXRlCisJIE5FVyBpbW1l ZGlhdGVseSBhZnRlciB0aGUgZXhpc3RlbmNlIGNoZWNrLCBidXQgaXQncyB0aGUgYmVzdAor CSB3ZSBjYW4gcG9ydGFibHkgZG8gaGVyZS4gICovCisgICAgICBpZiAoY2hlY2tfZXhpc3Rp bmcgKG5ldykpCisJeworCSAgZXJybm8gPSBFRVhJU1Q7CisJICByZXR1cm4gLTE7CisJfQor ICAgIH0KKworICByZXR1cm4gcmVuYW1lIChvbGQsIG5ldyk7CisjZW5kaWYKK30KKworLyog Q3JlYXRlIHRoZSBsb2NrIGZpbGUgRklMRSB3aXRoIGNvbnRlbnRzIENPTlRFTlRTLiAgUmV0 dXJuIDAgaWYKKyAgIHN1Y2Nlc3NmdWwsIGFuIGVycm5vIHZhbHVlIG9uIGZhaWx1cmUuICBJ ZiBGT1JDRSwgcmVtb3ZlIGFueQorICAgZXhpc3RpbmcgRklMRSBpZiBuZWNlc3NhcnkuICAq LwogCiBzdGF0aWMgaW50CiBjcmVhdGVfbG9ja19maWxlIChjaGFyICpsZm5hbWUsIGNoYXIg KmxvY2tfaW5mb19zdHIsIGJvb2wgZm9yY2UpCiB7Ci0gIGludCBlcnI7Ci0KICNpZmRlZiBX SU5ET1dTTlQKLSAgLyogU3ltbGlua3MgYXJlIHN1cHBvcnRlZCBvbmx5IGJ5IGxhdGVzdCB2 ZXJzaW9ucyBvZiBXaW5kb3dzLCBhbmQKLSAgICAgY3JlYXRpbmcgdGhlbSBpcyBhIHByaXZp bGVnZWQgb3BlcmF0aW9uIHRoYXQgb2Z0ZW4gdHJpZ2dlcnMgVUFDCi0gICAgIGVsZXZhdGlv biBwcm9tcHRzLiAgVGhlcmVmb3JlLCBpbnN0ZWFkIG9mIHVzaW5nIHN5bWxpbmtzLCB3ZQot ICAgICBjcmVhdGUgYSByZWd1bGFyIGZpbGUgd2l0aCB0aGUgbG9jayBpbmZvIHdyaXR0ZW4g YXMgaXRzCi0gICAgIGNvbnRlbnRzLiAgKi8KLSAgewotICAgIC8qIERlbnkgZXZlcnlib2R5 IGVsc2UgYW55IGtpbmQgb2YgYWNjZXNzIHRvIHRoZSBmaWxlIHVudGlsIHdlIGFyZQotICAg ICAgIGRvbmUgd3JpdGluZyBpdCBhbmQgY2xvc2UgdGhlIGhhbmRsZS4gIFRoaXMgbWFrZXMg dGhlIGVudGlyZQotICAgICAgIG9wZW4vd3JpdGUvY2xvc2Ugb3BlcmF0aW9uIGF0b21pYywg YXMgZmFyIGFzIG90aGVyIFdJTkRPV1NOVAotICAgICAgIHByb2Nlc3NlcyBhcmUgY29uY2Vy bmVkLiAgKi8KLSAgICBpbnQgZmQgPSBfc29wZW4gKGxmbmFtZSwKLQkJICAgICBfT19XUk9O TFkgfCBfT19CSU5BUlkgfCBfT19DUkVBVCB8IF9PX0VYQ0wgfCBfT19OT0lOSEVSSVQsCi0J CSAgICAgX1NIX0RFTllSVywgU19JUkVBRCB8IFNfSVdSSVRFKTsKLQotICAgIGlmIChmZCA8 IDAgJiYgZXJybm8gPT0gRUVYSVNUICYmIGZvcmNlKQotICAgICAgZmQgPSBfc29wZW4gKGxm bmFtZSwgX09fV1JPTkxZIHwgX09fQklOQVJZIHwgX09fVFJVTkMgfF9PX05PSU5IRVJJVCwK LQkJICAgX1NIX0RFTllSVywgU19JUkVBRCB8IFNfSVdSSVRFKTsKLSAgICBpZiAoZmQgPj0g MCkKLSAgICAgIHsKLQlzc2l6ZV90IGxvY2tfaW5mb19sZW4gPSBzdHJsZW4gKGxvY2tfaW5m b19zdHIpOwotCi0JZXJyID0gMDsKLQlpZiAoZW1hY3Nfd3JpdGUgKGZkLCBsb2NrX2luZm9f c3RyLCBsb2NrX2luZm9fbGVuKSAhPSBsb2NrX2luZm9fbGVuKQotCSAgZXJyID0gLTE7Ci0J aWYgKGVtYWNzX2Nsb3NlIChmZCkpCi0JICBlcnIgPSAtMTsKLSAgICAgIH0KLSAgICBlbHNl Ci0gICAgICBlcnIgPSAtMTsKLSAgfQorICAvKiBTeW1saW5rcyBhcmUgc3VwcG9ydGVkIG9u bHkgYnkgbGF0ZXIgdmVyc2lvbnMgb2YgV2luZG93cywgYW5kCisgICAgIGNyZWF0aW5nIHRo ZW0gaXMgYSBwcml2aWxlZ2VkIG9wZXJhdGlvbiB0aGF0IG9mdGVuIHRyaWdnZXJzCisgICAg IFVzZXIgQWNjb3VudCBDb250cm9sIGVsZXZhdGlvbiBwcm9tcHRzLiAgQXZvaWQgdGhlIHBy b2JsZW0gYnkKKyAgICAgcHJldGVuZGluZyB0aGF0ICdzeW1saW5rJyBkb2VzIG5vdCB3b3Jr LiAgKi8KKyAgaW50IGVyciA9IEVOT1NZUzsKICNlbHNlCi0gIGVyciA9IHN5bWxpbmsgKGxv Y2tfaW5mb19zdHIsIGxmbmFtZSk7Ci0gIGlmIChlcnIgIT0gMCAmJiBlcnJubyA9PSBFRVhJ U1QgJiYgZm9yY2UpCisgIGludCBlcnIgPSBzeW1saW5rIChsb2NrX2luZm9fc3RyLCBsZm5h bWUpID09IDAgPyAwIDogZXJybm87CisjZW5kaWYKKworICBpZiAoZXJyID09IEVFWElTVCAm JiBmb3JjZSkKICAgICB7CiAgICAgICB1bmxpbmsgKGxmbmFtZSk7Ci0gICAgICBlcnIgPSBz eW1saW5rIChsb2NrX2luZm9fc3RyLCBsZm5hbWUpOworICAgICAgZXJyID0gc3ltbGluayAo bG9ja19pbmZvX3N0ciwgbGZuYW1lKSA9PSAwID8gMCA6IGVycm5vOwogICAgIH0KKworICBp ZiAoZXJyID09IEVOT1NZUyB8fCBlcnIgPT0gTElOS1NfTUlHSFRfTk9UX1dPUksgfHwgZXJy ID09IEVOQU1FVE9PTE9ORykKKyAgICB7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCBub25j ZV9iYXNlW10gPSAiLiMtZW1hY3NYWFhYWFgiOworICAgICAgY2hhciAqbGFzdF9zbGFzaCA9 IHN0cnJjaHIgKGxmbmFtZSwgJy8nKTsKKyAgICAgIHB0cmRpZmZfdCBsZmRpcmxlbiA9IGxh c3Rfc2xhc2ggKyAxIC0gbGZuYW1lOworICAgICAgVVNFX1NBRkVfQUxMT0NBOworICAgICAg Y2hhciAqbm9uY2UgPSBTQUZFX0FMTE9DQSAobGZkaXJsZW4gKyBzaXplb2Ygbm9uY2VfYmFz ZSk7CisgICAgICBpbnQgZmQ7CisgICAgICBtZW1jcHkgKG5vbmNlLCBsZm5hbWUsIGxmZGly bGVuKTsKKyAgICAgIHN0cmNweSAobm9uY2UgKyBsZmRpcmxlbiwgbm9uY2VfYmFzZSk7CisK KyNpZiBIQVZFX01LU1RFTVAKKyAgICAgIGZkID0gbWtzdGVtcCAobm9uY2UpOworI2Vsc2UK KyAgICAgIG1rdGVtcCAobm9uY2UpOworICAgICAgZmQgPSBlbWFjc19vcGVuIChub25jZSwg T19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMIHwgT19CSU5BUlksCisJCSAgICAgICBTX0lS VVNSIHwgU19JV1VTUik7CiAjZW5kaWYKIAorICAgICAgaWYgKGZkIDwgMCkKKwllcnIgPSBl cnJubzsKKyAgICAgIGVsc2UKKwl7CisJICBwdHJkaWZmX3QgbG9ja19pbmZvX2xlbiA9IHN0 cmxlbiAobG9ja19pbmZvX3N0cik7CisJICBlcnIgPSAwOworCSAgaWYgKGVtYWNzX3dyaXRl IChmZCwgbG9ja19pbmZvX3N0ciwgbG9ja19pbmZvX2xlbikgIT0gbG9ja19pbmZvX2xlbgor CSAgICAgIHx8IGZjaG1vZCAoZmQsIFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JUk9USCkgIT0g MCkKKwkgICAgZXJyID0gZXJybm87CisJICBpZiAoZW1hY3NfY2xvc2UgKGZkKSAhPSAwKQor CSAgICBlcnIgPSBlcnJubzsKKwkgIGlmICghZXJyICYmIHJlbmFtZV9sb2NrX2ZpbGUgKG5v bmNlLCBsZm5hbWUsIGZvcmNlKSAhPSAwKQorCSAgICBlcnIgPSBlcnJubzsKKwkgIGlmIChl cnIpCisJICAgIHVubGluayAobm9uY2UpOworCX0KKworICAgICAgU0FGRV9GUkVFICgpOwor ICAgIH0KKwogICByZXR1cm4gZXJyOwogfQogCiAvKiBMb2NrIHRoZSBsb2NrIGZpbGUgbmFt ZWQgTEZOQU1FLgogICAgSWYgRk9SQ0UsIGRvIHNvIGV2ZW4gaWYgaXQgaXMgYWxyZWFkeSBs b2NrZWQuCi0gICBSZXR1cm4gdHJ1ZSBpZiBzdWNjZXNzZnVsLiAgKi8KKyAgIFJldHVybiAw IGlmIHN1Y2Nlc3NmdWwsIGFuIGVycm9yIG51bWJlciBvbiBmYWlsdXJlLiAgKi8KIAotc3Rh dGljIGJvb2wKK3N0YXRpYyBpbnQKIGxvY2tfZmlsZV8xIChjaGFyICpsZm5hbWUsIGJvb2wg Zm9yY2UpCiB7Ci0gIGludCBlcnI7Ci0gIGludCBzeW1saW5rX2Vycm5vOwotICBVU0VfU0FG RV9BTExPQ0E7Ci0KICAgLyogQ2FsbCB0aGlzIGZpcnN0IGJlY2F1c2UgaXQgY2FuIEdDLiAg Ki8KICAgcHJpbnRtYXhfdCBib290ID0gZ2V0X2Jvb3RfdGltZSAoKTsKIApAQCAtMzkwLDIw ICs0NTUsMTYgQEAKICAgY2hhciBjb25zdCAqdXNlcl9uYW1lID0gU1RSSU5HUCAobHVzZXJf bmFtZSkgPyBTU0RBVEEgKGx1c2VyX25hbWUpIDogIiI7CiAgIExpc3BfT2JqZWN0IGxob3N0 X25hbWUgPSBGc3lzdGVtX25hbWUgKCk7CiAgIGNoYXIgY29uc3QgKmhvc3RfbmFtZSA9IFNU UklOR1AgKGxob3N0X25hbWUpID8gU1NEQVRBIChsaG9zdF9uYW1lKSA6ICIiOwotICBwdHJk aWZmX3QgbG9ja19pbmZvX3NpemUgPSAoc3RybGVuICh1c2VyX25hbWUpICsgc3RybGVuICho b3N0X25hbWUpCi0JCQkgICAgICArIDIgKiBJTlRfU1RSTEVOX0JPVU5EIChwcmludG1heF90 KQotCQkJICAgICAgKyBzaXplb2YgIkAuOiIpOwotICBjaGFyICpsb2NrX2luZm9fc3RyID0g U0FGRV9BTExPQ0EgKGxvY2tfaW5mb19zaXplKTsKKyAgY2hhciBsb2NrX2luZm9fc3RyW01B WF9MRklORk8gKyAxXTsKICAgcHJpbnRtYXhfdCBwaWQgPSBnZXRwaWQgKCk7CiAKLSAgZXNw cmludGYgKGxvY2tfaW5mb19zdHIsIGJvb3QgPyAiJXNAJXMuJSJwTWQiOiUicE1kIDogIiVz QCVzLiUicE1kLAotCSAgICB1c2VyX25hbWUsIGhvc3RfbmFtZSwgcGlkLCBib290KTsKLSAg ZXJyID0gY3JlYXRlX2xvY2tfZmlsZSAobGZuYW1lLCBsb2NrX2luZm9fc3RyLCBmb3JjZSk7 CisgIGlmIChzaXplb2YgbG9ja19pbmZvX3N0cgorICAgICAgPD0gc25wcmludGYgKGxvY2tf aW5mb19zdHIsIHNpemVvZiBsb2NrX2luZm9fc3RyLAorCQkgICBib290ID8gIiVzQCVzLiUi cE1kIjolInBNZCA6ICIlc0Alcy4lInBNZCwKKwkJICAgdXNlcl9uYW1lLCBob3N0X25hbWUs IHBpZCwgYm9vdCkpCisgICAgcmV0dXJuIEVOQU1FVE9PTE9ORzsKIAotICBzeW1saW5rX2Vy cm5vID0gZXJybm87Ci0gIFNBRkVfRlJFRSAoKTsKLSAgZXJybm8gPSBzeW1saW5rX2Vycm5v OwotICByZXR1cm4gZXJyID09IDA7CisgIHJldHVybiBjcmVhdGVfbG9ja19maWxlIChsZm5h bWUsIGxvY2tfaW5mb19zdHIsIGZvcmNlKTsKIH0KIAogLyogUmV0dXJuIHRydWUgaWYgdGlt ZXMgQSBhbmQgQiBhcmUgbm8gbW9yZSB0aGFuIG9uZSBzZWNvbmQgYXBhcnQuICAqLwpAQCAt NDE0LDMyICs0NzUsNDYgQEAKICAgcmV0dXJuIChhIC0gYiA+PSAtMSAmJiBhIC0gYiA8PSAx KTsKIH0KIAwKLXN0YXRpYyBMaXNwX09iamVjdAotcmVhZF9sb2NrX2RhdGEgKGNoYXIgKmxm bmFtZSkKKy8qIFJlYWQgdGhlIGRhdGEgZm9yIHRoZSBsb2NrIGZpbGUgTEZOQU1FIGludG8g TEZJTkZPLiAgUmVhZCBhdCBtb3N0CisgICBNQVhfTEZJTkZPICsgMSBieXRlcy4gIFJldHVy biB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQsIG9yIC0xCisgICAoc2V0dGluZyBlcnJubykg b24gZXJyb3IuICAqLworCitzdGF0aWMgcHRyZGlmZl90CityZWFkX2xvY2tfZGF0YSAoY2hh ciAqbGZuYW1lLCBjaGFyIGxmaW5mb1tNQVhfTEZJTkZPICsgMV0pCiB7Ci0jaWZuZGVmIFdJ TkRPV1NOVAotICByZXR1cm4gZW1hY3NfcmVhZGxpbmthdCAoQVRfRkRDV0QsIGxmbmFtZSk7 Ci0jZWxzZQotICBpbnQgZmQgPSBlbWFjc19vcGVuIChsZm5hbWUsIE9fUkRPTkxZIHwgT19C SU5BUlksIFNfSVJFQUQpOwotICBzc2l6ZV90IG5ieXRlczsKLSAgLyogMjU2IGNoYXJzIGZv ciB1c2VyLCAxMDI0IGNoYXJzIGZvciBob3N0LCAxMCBkaWdpdHMgZm9yIGVhY2ggb2YgMiBp bnQncy4gICovCi0gIGVudW0geyBNQVhfTEZJTkZPID0gMjU2ICsgMTAyNCArIDEwICsgMTAg KyAyIH07Ci0gIGNoYXIgbGZpbmZvW01BWF9MRklORk8gKyAxXTsKLQotICBpZiAoZmQgPCAw KQotICAgIHJldHVybiBRbmlsOwotCi0gIG5ieXRlcyA9IGVtYWNzX3JlYWQgKGZkLCBsZmlu Zm8sIE1BWF9MRklORk8pOwotICBlbWFjc19jbG9zZSAoZmQpOwotCi0gIGlmIChuYnl0ZXMg PiAwKQorICBwdHJkaWZmX3QgbmJ5dGVzOworCisgIHdoaWxlICgobmJ5dGVzID0gcmVhZGxp bmthdCAoQVRfRkRDV0QsIGxmbmFtZSwgbGZpbmZvLCBNQVhfTEZJTkZPICsgMSkpIDwgMAor CSAmJiBlcnJubyA9PSBFSU5WQUwpCiAgICAgewotICAgICAgbGZpbmZvW25ieXRlc10gPSAn XDAnOwotICAgICAgcmV0dXJuIGJ1aWxkX3N0cmluZyAobGZpbmZvKTsKKyAgICAgIGludCBm ZCA9IGVtYWNzX29wZW4gKGxmbmFtZSwgT19SRE9OTFkgfCBPX0JJTkFSWSB8IE9fTk9GT0xM T1csIDApOworICAgICAgaWYgKDAgPD0gZmQpCisJeworCSAgaW50IHJlYWRfZXJybm87CisJ ICBuYnl0ZXMgPSBlbWFjc19yZWFkIChmZCwgbGZpbmZvLCBNQVhfTEZJTkZPICsgMSk7CisJ ICByZWFkX2Vycm5vID0gZXJybm87CisKKwkgIGlmIChlbWFjc19jbG9zZSAoZmQpICE9IDAp CisJICAgIHJldHVybiAtMTsKKwkgIGlmICgwIDwgbmJ5dGVzICYmIG1lbWNociAobGZpbmZv LCAwLCBuYnl0ZXMpKQorCSAgICB7CisJICAgICAgZXJybm8gPSBFSU5WQUw7CisJICAgICAg cmV0dXJuIC0xOworCSAgICB9CisJICBlcnJubyA9IHJlYWRfZXJybm87CisJICByZXR1cm4g bmJ5dGVzOworCX0KKworICAgICAgaWYgKGVycm5vICE9IEVMT09QKQorCXJldHVybiAtMTsK KworICAgICAgLyogcmVhZGxpbmthdCBzYXcgYSBub24tc3ltbGluaywgYnV0IGVtYWNzX29w ZW4gc2F3IGEgc3ltbGluay4KKwkgVGhlIGZvcm1lciBtdXN0IGhhdmUgYmVlbiByZW1vdmVk IGFuZCByZXBsYWNlZCBieSB0aGUgbGF0dGVyLgorCSBUcnkgYWdhaW4uICAqLworICAgICAg UVVJVDsKICAgICB9Ci0gIGVsc2UKLSAgICByZXR1cm4gUW5pbDsKLSNlbmRpZgorCisgIHJl dHVybiBuYnl0ZXM7CiB9CiAKIC8qIFJldHVybiAwIGlmIG5vYm9keSBvd25zIHRoZSBsb2Nr IGZpbGUgTEZOQU1FIG9yIHRoZSBsb2NrIGlzIG9ic29sZXRlLApAQCAtNDUxLDgzICs1MjYs NzggQEAKIGN1cnJlbnRfbG9ja19vd25lciAobG9ja19pbmZvX3R5cGUgKm93bmVyLCBjaGFy ICpsZm5hbWUpCiB7CiAgIGludCByZXQ7Ci0gIHB0cmRpZmZfdCBsZW47CiAgIGxvY2tfaW5m b190eXBlIGxvY2FsX293bmVyOwotICBpbnRtYXhfdCBuOwotICBjaGFyICphdCwgKmRvdCwg KmNvbG9uOwotICBMaXNwX09iamVjdCBsZmluZm9fb2JqZWN0ID0gcmVhZF9sb2NrX2RhdGEg KGxmbmFtZSk7Ci0gIGNoYXIgKmxmaW5mbzsKLSAgc3RydWN0IGdjcHJvIGdjcHJvMTsKLQot ICAvKiBJZiBub25leGlzdGVudCBsb2NrIGZpbGUsIGFsbCBpcyB3ZWxsOyBvdGhlcndpc2Us IGdvdCBzdHJhbmdlIGVycm9yLiAqLwotICBpZiAoTklMUCAobGZpbmZvX29iamVjdCkpCi0g ICAgcmV0dXJuIGVycm5vID09IEVOT0VOVCA/IDAgOiAtMTsKLSAgbGZpbmZvID0gU1NEQVRB IChsZmluZm9fb2JqZWN0KTsKKyAgcHRyZGlmZl90IGxmaW5mb2xlbjsKKyAgaW50bWF4X3Qg cGlkLCBib290X3RpbWU7CisgIGNoYXIgKmF0LCAqZG90LCAqY29sb24sICpsZmluZm9fZW5k OwogCiAgIC8qIEV2ZW4gaWYgdGhlIGNhbGxlciBkb2Vzbid0IHdhbnQgdGhlIG93bmVyIGlu Zm8sIHdlIHN0aWxsIGhhdmUgdG8KICAgICAgcmVhZCBpdCB0byBkZXRlcm1pbmUgcmV0dXJu IHZhbHVlLiAgKi8KICAgaWYgKCFvd25lcikKICAgICBvd25lciA9ICZsb2NhbF9vd25lcjsK IAorICAvKiBJZiBub25leGlzdGVudCBsb2NrIGZpbGUsIGFsbCBpcyB3ZWxsOyBvdGhlcndp c2UsIGdvdCBzdHJhbmdlIGVycm9yLiAqLworICBsZmluZm9sZW4gPSByZWFkX2xvY2tfZGF0 YSAobGZuYW1lLCBvd25lci0+dXNlcik7CisgIGlmIChsZmluZm9sZW4gPCAwKQorICAgIHJl dHVybiBlcnJubyA9PSBFTk9FTlQgPyAwIDogLTE7CisgIGlmIChNQVhfTEZJTkZPIDwgbGZp bmZvbGVuKQorICAgIHJldHVybiAtMTsKKyAgb3duZXItPnVzZXJbbGZpbmZvbGVuXSA9IDA7 CisKICAgLyogUGFyc2UgVVNFUkBIT1NULlBJRDpCT09UX1RJTUUuICBJZiBjYW4ndCBwYXJz ZSwgcmV0dXJuIC0xLiAgKi8KICAgLyogVGhlIFVTRVIgaXMgZXZlcnl0aGluZyBiZWZvcmUg dGhlIGxhc3QgQC4gICovCi0gIGF0ID0gc3RycmNociAobGZpbmZvLCAnQCcpOwotICBkb3Qg PSBzdHJyY2hyIChsZmluZm8sICcuJyk7Ci0gIGlmICghYXQgfHwgIWRvdCkKLSAgICByZXR1 cm4gLTE7Ci0gIGxlbiA9IGF0IC0gbGZpbmZvOwotICBHQ1BSTzEgKGxmaW5mb19vYmplY3Qp OwotICBvd25lci0+dXNlciA9IHhtYWxsb2MgKGxlbiArIDEpOwotICBtZW1jcHkgKG93bmVy LT51c2VyLCBsZmluZm8sIGxlbik7Ci0gIG93bmVyLT51c2VyW2xlbl0gPSAwOworICBvd25l ci0+YXQgPSBhdCA9IG1lbXJjaHIgKG93bmVyLT51c2VyLCAnQCcsIGxmaW5mb2xlbik7Cisg IGlmICghYXQpCisgICAgcmV0dXJuIC0xOworICBvd25lci0+ZG90ID0gZG90ID0gc3RycmNo ciAoYXQsICcuJyk7CisgIGlmICghZG90KQorICAgIHJldHVybiAtMTsKIAogICAvKiBUaGUg UElEIGlzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgbGFzdCBgLicgdG8gdGhlIGA6Jy4gICovCisg IGlmICghIGNfaXNkaWdpdCAoZG90WzFdKSkKKyAgICByZXR1cm4gLTE7CiAgIGVycm5vID0g MDsKLSAgbiA9IHN0cnRvaW1heCAoZG90ICsgMSwgTlVMTCwgMTApOwotICBvd25lci0+cGlk ID0KLSAgICAoKDAgPD0gbiAmJiBuIDw9IFRZUEVfTUFYSU1VTSAocGlkX3QpCi0gICAgICAm JiAoVFlQRV9NQVhJTVVNIChwaWRfdCkgPCBJTlRNQVhfTUFYIHx8IGVycm5vICE9IEVSQU5H RSkpCi0gICAgID8gbiA6IDApOworICBwaWQgPSBzdHJ0b2ltYXggKGRvdCArIDEsICZvd25l ci0+Y29sb24sIDEwKTsKKyAgaWYgKGVycm5vID09IEVSQU5HRSkKKyAgICBwaWQgPSAtMTsK IAotICBjb2xvbiA9IHN0cmNociAoZG90ICsgMSwgJzonKTsKICAgLyogQWZ0ZXIgdGhlIGA6 JywgaWYgdGhlcmUgaXMgb25lLCBjb21lcyB0aGUgYm9vdCB0aW1lLiAgKi8KLSAgbiA9IDA7 Ci0gIGlmIChjb2xvbikKKyAgc3dpdGNoIChvd25lci0+Y29sb25bMF0pCiAgICAgewotICAg ICAgZXJybm8gPSAwOwotICAgICAgbiA9IHN0cnRvaW1heCAoY29sb24gKyAxLCBOVUxMLCAx MCk7CisgICAgY2FzZSAwOgorICAgICAgYm9vdF90aW1lID0gMDsKKyAgICAgIGxmaW5mb19l bmQgPSBvd25lci0+Y29sb247CisgICAgICBicmVhazsKKworICAgIGNhc2UgJzonOgorICAg ICAgaWYgKCEgY19pc2RpZ2l0IChvd25lci0+Y29sb25bMV0pKQorCXJldHVybiAtMTsKKyAg ICAgIGJvb3RfdGltZSA9IHN0cnRvaW1heCAob3duZXItPmNvbG9uICsgMSwgJmxmaW5mb19l bmQsIDEwKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiAt MTsKICAgICB9Ci0gIG93bmVyLT5ib290X3RpbWUgPQotICAgICgoMCA8PSBuICYmIG4gPD0g VFlQRV9NQVhJTVVNICh0aW1lX3QpCi0gICAgICAmJiAoVFlQRV9NQVhJTVVNICh0aW1lX3Qp IDwgSU5UTUFYX01BWCB8fCBlcnJubyAhPSBFUkFOR0UpKQotICAgICA/IG4gOiAwKTsKLQot ICAvKiBUaGUgaG9zdCBpcyBldmVyeXRoaW5nIGluIGJldHdlZW4uICAqLwotICBsZW4gPSBk b3QgLSBhdCAtIDE7Ci0gIG93bmVyLT5ob3N0ID0geG1hbGxvYyAobGVuICsgMSk7Ci0gIG1l bWNweSAob3duZXItPmhvc3QsIGF0ICsgMSwgbGVuKTsKLSAgb3duZXItPmhvc3RbbGVuXSA9 IDA7Ci0KLSAgLyogV2UncmUgZG9uZSBsb29raW5nIGF0IHRoZSBsaW5rIGluZm8uICAqLwot ICBVTkdDUFJPOworICBpZiAobGZpbmZvX2VuZCAhPSBvd25lci0+dXNlciArIGxmaW5mb2xl bikKKyAgICByZXR1cm4gLTE7CiAKICAgLyogT24gY3VycmVudCBob3N0PyAgKi8KLSAgaWYg KFNUUklOR1AgKEZzeXN0ZW1fbmFtZSAoKSkKLSAgICAgICYmIHN0cmNtcCAob3duZXItPmhv c3QsIFNTREFUQSAoRnN5c3RlbV9uYW1lICgpKSkgPT0gMCkKKyAgaWYgKFNUUklOR1AgKFZz eXN0ZW1fbmFtZSkKKyAgICAgICYmIGRvdCAtIChhdCArIDEpID09IFNCWVRFUyAoVnN5c3Rl bV9uYW1lKQorICAgICAgJiYgbWVtY21wIChhdCArIDEsIFNTREFUQSAoVnN5c3RlbV9uYW1l KSwgU0JZVEVTIChWc3lzdGVtX25hbWUpKSA9PSAwKQogICAgIHsKLSAgICAgIGlmIChvd25l ci0+cGlkID09IGdldHBpZCAoKSkKKyAgICAgIGlmIChwaWQgPT0gZ2V0cGlkICgpKQogICAg ICAgICByZXQgPSAyOyAvKiBXZSBvd24gaXQuICAqLwotICAgICAgZWxzZSBpZiAob3duZXIt PnBpZCA+IDAKLSAgICAgICAgICAgICAgICYmIChraWxsIChvd25lci0+cGlkLCAwKSA+PSAw IHx8IGVycm5vID09IEVQRVJNKQotCSAgICAgICAmJiAob3duZXItPmJvb3RfdGltZSA9PSAw Ci0JCSAgIHx8IHdpdGhpbl9vbmVfc2Vjb25kIChvd25lci0+Ym9vdF90aW1lLCBnZXRfYm9v dF90aW1lICgpKSkpCisgICAgICBlbHNlIGlmICgwIDwgcGlkICYmIHBpZCA8PSBUWVBFX01B WElNVU0gKHBpZF90KQorICAgICAgICAgICAgICAgJiYgKGtpbGwgKHBpZCwgMCkgPj0gMCB8 fCBlcnJubyA9PSBFUEVSTSkKKwkgICAgICAgJiYgKGJvb3RfdGltZSA9PSAwCisJCSAgIHx8 IChib290X3RpbWUgPD0gVFlQRV9NQVhJTVVNICh0aW1lX3QpCisJCSAgICAgICAmJiB3aXRo aW5fb25lX3NlY29uZCAoYm9vdF90aW1lLCBnZXRfYm9vdF90aW1lICgpKSkpKQogICAgICAg ICByZXQgPSAxOyAvKiBBbiBleGlzdGluZyBwcm9jZXNzIG9uIHRoaXMgbWFjaGluZSBvd25z IGl0LiAgKi8KLSAgICAgIC8qIFRoZSBvd25lciBwcm9jZXNzIGlzIGRlYWQgb3IgaGFzIGEg c3RyYW5nZSBwaWQgKDw9MCksIHNvIHRyeSB0bworICAgICAgLyogVGhlIG93bmVyIHByb2Nl c3MgaXMgZGVhZCBvciBoYXMgYSBzdHJhbmdlIHBpZCwgc28gdHJ5IHRvCiAgICAgICAgICB6 YXAgdGhlIGxvY2tmaWxlLiAgKi8KLSAgICAgIGVsc2UgaWYgKHVubGluayAobGZuYW1lKSA8 IDApCi0gICAgICAgIHJldCA9IC0xOwogICAgICAgZWxzZQotCXJldCA9IDA7CisgICAgICAg IHJldHVybiB1bmxpbmsgKGxmbmFtZSk7CiAgICAgfQogICBlbHNlCiAgICAgeyAvKiBJZiB3 ZSB3YW50ZWQgdG8gc3VwcG9ydCB0aGUgY2hlY2sgZm9yIHN0YWxlIGxvY2tzIG9uIHJlbW90 ZSBtYWNoaW5lcywKQEAgLTUzNSwxMSArNjA1LDYgQEAKICAgICAgIHJldCA9IDE7CiAgICAg fQogCi0gIC8qIEF2b2lkIGdhcmJhZ2UuICAqLwotICBpZiAob3duZXIgPT0gJmxvY2FsX293 bmVyIHx8IHJldCA8PSAwKQotICAgIHsKLSAgICAgIEZSRUVfTE9DS19JTkZPICgqb3duZXIp OwotICAgIH0KICAgcmV0dXJuIHJldDsKIH0KIApAQCAtNTUxLDI5ICs2MTYsMjUgQEAKICAg IFJldHVybiAtMSBpZiBjYW5ub3QgbG9jayBmb3IgYW55IG90aGVyIHJlYXNvbi4gICovCiAK IHN0YXRpYyBpbnQKLWxvY2tfaWZfZnJlZSAobG9ja19pbmZvX3R5cGUgKmNsYXNoZXIsIHJl Z2lzdGVyIGNoYXIgKmxmbmFtZSkKK2xvY2tfaWZfZnJlZSAobG9ja19pbmZvX3R5cGUgKmNs YXNoZXIsIGNoYXIgKmxmbmFtZSkKIHsKLSAgd2hpbGUgKCEgbG9ja19maWxlXzEgKGxmbmFt ZSwgMCkpCisgIGludCBlcnI7CisgIHdoaWxlICgoZXJyID0gbG9ja19maWxlXzEgKGxmbmFt ZSwgMCkpID09IEVFWElTVCkKICAgICB7Ci0gICAgICBpbnQgbG9ja2VyOwotCi0gICAgICBp ZiAoZXJybm8gIT0gRUVYSVNUKQotCXJldHVybiAtMTsKLQotICAgICAgbG9ja2VyID0gY3Vy cmVudF9sb2NrX293bmVyIChjbGFzaGVyLCBsZm5hbWUpOwotICAgICAgaWYgKGxvY2tlciA9 PSAyKQotICAgICAgICB7Ci0gICAgICAgICAgRlJFRV9MT0NLX0lORk8gKCpjbGFzaGVyKTsK LSAgICAgICAgICByZXR1cm4gMDsgICAvKiBXZSBvdXJzZWx2ZXMgbG9ja2VkIGl0LiAgKi8K LSAgICAgICAgfQotICAgICAgZWxzZSBpZiAobG9ja2VyID09IDEpCi0gICAgICAgIHJldHVy biAxOyAgLyogU29tZW9uZSBlbHNlIGhhcyBpdC4gICovCi0gICAgICBlbHNlIGlmIChsb2Nr ZXIgPT0gLTEpCi0JcmV0dXJuIC0xOyAgIC8qIGN1cnJlbnRfbG9ja19vd25lciByZXR1cm5l ZCBzdHJhbmdlIGVycm9yLiAgKi8KKyAgICAgIHN3aXRjaCAoY3VycmVudF9sb2NrX293bmVy IChjbGFzaGVyLCBsZm5hbWUpKQorCXsKKwljYXNlIDI6CisJICByZXR1cm4gMDsgICAvKiBX ZSBvdXJzZWx2ZXMgbG9ja2VkIGl0LiAgKi8KKwljYXNlIDE6CisJICByZXR1cm4gMTsgICAv KiBTb21lb25lIGVsc2UgaGFzIGl0LiAgKi8KKwljYXNlIC0xOgorCSAgcmV0dXJuIC0xOyAg LyogY3VycmVudF9sb2NrX293bmVyIHJldHVybmVkIHN0cmFuZ2UgZXJyb3IuICAqLworCX0K IAogICAgICAgLyogV2UgZGVsZXRlZCBhIHN0YWxlIGxvY2s7IHRyeSBhZ2FpbiB0byBsb2Nr IHRoZSBmaWxlLiAgKi8KICAgICB9Ci0gIHJldHVybiAwOworCisgIHJldHVybiBlcnIgPyAt MSA6IDA7CiB9CiAKIC8qIGxvY2tfZmlsZSBsb2NrcyBmaWxlIEZOLApAQCAtNjQ1LDE3ICs3 MDYsMTYgQEAKICAgaWYgKDAgPCBsb2NrX2lmX2ZyZWUgKCZsb2NrX2luZm8sIGxmbmFtZSkp CiAgICAgewogICAgICAgLyogU29tZW9uZSBlbHNlIGhhcyB0aGUgbG9jay4gIENvbnNpZGVy IGJyZWFraW5nIGl0LiAgKi8KLSAgICAgIHB0cmRpZmZfdCBsb2NrZXJfc2l6ZSA9IChzdHJs ZW4gKGxvY2tfaW5mby51c2VyKSArIHN0cmxlbiAobG9ja19pbmZvLmhvc3QpCi0JCQkgICAg ICAgKyBJTlRfU1RSTEVOX0JPVU5EIChwcmludG1heF90KQotCQkJICAgICAgICsgc2l6ZW9m ICJAIChwaWQgKSIpOwotICAgICAgY2hhciAqbG9ja2VyID0gU0FGRV9BTExPQ0EgKGxvY2tl cl9zaXplKTsKLSAgICAgIHByaW50bWF4X3QgcGlkID0gbG9ja19pbmZvLnBpZDsKICAgICAg IExpc3BfT2JqZWN0IGF0dGFjazsKLSAgICAgIGVzcHJpbnRmIChsb2NrZXIsICIlc0AlcyAo cGlkICUicE1kIikiLAotCQlsb2NrX2luZm8udXNlciwgbG9ja19pbmZvLmhvc3QsIHBpZCk7 Ci0gICAgICBGUkVFX0xPQ0tfSU5GTyAobG9ja19pbmZvKTsKLQotICAgICAgYXR0YWNrID0g Y2FsbDIgKGludGVybiAoImFzay11c2VyLWFib3V0LWxvY2siKSwgZm4sIGJ1aWxkX3N0cmlu ZyAobG9ja2VyKSk7CisgICAgICBjaGFyICpkb3QgPSBsb2NrX2luZm8uZG90OworICAgICAg cHRyZGlmZl90IHBpZGxlbiA9IGxvY2tfaW5mby5jb2xvbiAtIChkb3QgKyAxKTsKKyAgICAg IHN0YXRpYyBjaGFyIGNvbnN0IHJlcGxhY2VtZW50W10gPSAiIChwaWQgIjsKKyAgICAgIGlu dCByZXBsYWNlbWVudGxlbiA9IHNpemVvZiByZXBsYWNlbWVudCAtIDE7CisgICAgICBtZW1t b3ZlIChkb3QgKyByZXBsYWNlbWVudGxlbiwgZG90ICsgMSwgcGlkbGVuKTsKKyAgICAgIHN0 cmNweSAoZG90ICsgcmVwbGFjZW1lbnRsZW4gKyBwaWRsZW4sICIpIik7CisgICAgICBtZW1j cHkgKGRvdCwgcmVwbGFjZW1lbnQsIHJlcGxhY2VtZW50bGVuKTsKKyAgICAgIGF0dGFjayA9 IGNhbGwyIChpbnRlcm4gKCJhc2stdXNlci1hYm91dC1sb2NrIiksIGZuLAorCQkgICAgICBi dWlsZF9zdHJpbmcgKGxvY2tfaW5mby51c2VyKSk7CiAgICAgICAvKiBUYWtlIHRoZSBsb2Nr IGlmIHRoZSB1c2VyIHNhaWQgc28uICAqLwogICAgICAgaWYgKCFOSUxQIChhdHRhY2spKQog CWxvY2tfZmlsZV8xIChsZm5hbWUsIDEpOwpAQCAtNzYwLDEwICs4MjAsNyBAQAogICBlbHNl IGlmIChvd25lciA9PSAyKQogICAgIHJldCA9IFF0OwogICBlbHNlCi0gICAgcmV0ID0gYnVp bGRfc3RyaW5nIChsb2NrZXIudXNlcik7Ci0KLSAgaWYgKG93bmVyID4gMCkKLSAgICBGUkVF X0xPQ0tfSU5GTyAobG9ja2VyKTsKKyAgICByZXQgPSBtYWtlX3N0cmluZyAobG9ja2VyLnVz ZXIsIGxvY2tlci5hdCAtIGxvY2tlci51c2VyKTsKIAogICBTQUZFX0ZSRUUgKCk7CiAgIHJl dHVybiByZXQ7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3czMi5jJwotLS0gc3JjL3czMi5j CTIwMTMtMDItMjggMDY6MzA6NDggKzAwMDAKKysrIHNyYy93MzIuYwkyMDEzLTAzLTAzIDIz OjEyOjU0ICswMDAwCkBAIC0zNDE2LDcgKzM0MTYsNyBAQAogfQogCiBpbnQKLXN5c19yZW5h bWUgKGNvbnN0IGNoYXIgKiBvbGRuYW1lLCBjb25zdCBjaGFyICogbmV3bmFtZSkKK3N5c19y ZW5hbWVfcmVwbGFjZSAoY29uc3QgY2hhciAqb2xkbmFtZSwgY29uc3QgY2hhciAqbmV3bmFt ZSwgQk9PTCBmb3JjZSkKIHsKICAgQk9PTCByZXN1bHQ7CiAgIGNoYXIgdGVtcFtNQVhfUEFU SF07CkBAIC0zNDcyLDcgKzM0NzIsNyBAQAogCXJldHVybiAtMTsKICAgICB9CiAKLSAgLyog RW11bGF0ZSBVbml4IGJlaGF2aW9yIC0gbmV3bmFtZSBpcyBkZWxldGVkIGlmIGl0IGFscmVh ZHkgZXhpc3RzCisgIC8qIElmIEZPUkNFLCBlbXVsYXRlIFVuaXggYmVoYXZpb3IgLSBuZXdu YW1lIGlzIGRlbGV0ZWQgaWYgaXQgYWxyZWFkeSBleGlzdHMKICAgICAgKGF0IGxlYXN0IGlm IGl0IGlzIGEgZmlsZTsgZG9uJ3QgZG8gdGhpcyBmb3IgZGlyZWN0b3JpZXMpLgogCiAgICAg IFNpbmNlIHdlIG11c3RuJ3QgZG8gdGhpcyBpZiB3ZSBhcmUganVzdCBjaGFuZ2luZyB0aGUg Y2FzZSBvZiB0aGUKQEAgLTM0OTAsNyArMzQ5MCw3IEBACiAKICAgcmVzdWx0ID0gcmVuYW1l ICh0ZW1wLCBuZXduYW1lKTsKIAotICBpZiAocmVzdWx0IDwgMCkKKyAgaWYgKHJlc3VsdCA8 IDAgJiYgZm9yY2UpCiAgICAgewogICAgICAgRFdPUkQgdzMyZXJyID0gR2V0TGFzdEVycm9y ICgpOwogCkBAIC0zNTMwLDYgKzM1MzAsMTIgQEAKIH0KIAogaW50CitzeXNfcmVuYW1lIChj aGFyIGNvbnN0ICpvbGQsIGNoYXIgY29uc3QgKm5ldykKK3sKKyAgcmV0dXJuIHN5c19yZW5h bWVfcmVwbGFjZSAob2xkLCBuZXcsIFRSVUUpOworfQorCitpbnQKIHN5c19ybWRpciAoY29u c3QgY2hhciAqIHBhdGgpCiB7CiAgIHJldHVybiBfcm1kaXIgKG1hcF93MzJfZmlsZW5hbWUg KHBhdGgsIE5VTEwpKTsKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvdzMyLmgnCi0tLSBzcmMv dzMyLmgJMjAxMy0wMi0wMiAxNzoxNDoyNCArMDAwMAorKysgc3JjL3czMi5oCTIwMTMtMDMt MDMgMjM6MTI6NTQgKzAwMDAKQEAgLTE4Niw2ICsxODYsNyBAQAogZXh0ZXJuIHZvaWQgc3Jh bmRvbSAoaW50KTsKIGV4dGVybiBpbnQgcmFuZG9tICh2b2lkKTsKIAorZXh0ZXJuIGludCBz eXNfcmVuYW1lX3JlcGxhY2UgKGNoYXIgY29uc3QgKiwgY2hhciBjb25zdCAqLCBCT09MKTsK IGV4dGVybiBpbnQgc3lzX3BpcGUgKGludCAqKTsKIAogZXh0ZXJuIHZvaWQgc2V0X3Byb2Nl c3NfZGlyIChjaGFyICopOwoK --------------060107000305030307010009--