From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Gregory Heytings Newsgroups: gmane.emacs.bugs Subject: bug#56682: feature/improved-locked-narrowing 9dee6df39c: Reworked locked narrowing. Date: Thu, 04 May 2023 15:45:29 +0000 Message-ID: <221c67168567a20a89c1@heytings.org> References: <166939872890.18950.12581667269687468681@vcs2.savannah.gnu.org> <83ttzsk6v4.fsf@gnu.org> <83wn4le8s3.fsf@gnu.org> <0f053182b02103503c26@heytings.org> <83pmaccnz7.fsf@gnu.org> <0f053182b04357300cb1@heytings.org> <83lel0chku.fsf@gnu.org> <0f053182b00a59a41caa@heytings.org> <835yc3cdhk.fsf@gnu.org> <9e9ed8043fc8bfe49bfe@heytings.org> <83h6vnaukn.fsf@gnu.org> <9e9ed8043f4ff9316461@heytings.org> <83k00exj56.fsf@gnu.org> <10ececa33f0a4af46fd2@heytings.org> <83edp3zwjk.fsf@gnu.org> <83r0t3y6yy.fsf@gnu.org> <83lejby3nk.fsf@gnu.org> <83h6tzy19k.fsf@gnu.org> <83bkk6yicv.fsf@gnu.org> <83jzxoll20.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="kzK5kwWOtk" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="5248"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 56682@debbugs.gnu.org, monnier@iro.umontreal.ca To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Thu May 04 17:47:37 2023 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pubBB-00016h-Do for geb-bug-gnu-emacs@m.gmane-mx.org; Thu, 04 May 2023 17:47:37 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pubAm-0006Ro-MI; Thu, 04 May 2023 11:47:12 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pub9e-0006MU-R1 for bug-gnu-emacs@gnu.org; Thu, 04 May 2023 11:46:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pub9e-0004fl-HM for bug-gnu-emacs@gnu.org; Thu, 04 May 2023 11:46:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1pub9d-0005P3-Va for bug-gnu-emacs@gnu.org; Thu, 04 May 2023 11:46:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Gregory Heytings Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 04 May 2023 15:46:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 56682 X-GNU-PR-Package: emacs Original-Received: via spool by 56682-submit@debbugs.gnu.org id=B56682.168321513620724 (code B ref 56682); Thu, 04 May 2023 15:46:01 +0000 Original-Received: (at 56682) by debbugs.gnu.org; 4 May 2023 15:45:36 +0000 Original-Received: from localhost ([127.0.0.1]:51860 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pub9C-0005O6-6J for submit@debbugs.gnu.org; Thu, 04 May 2023 11:45:36 -0400 Original-Received: from heytings.org ([95.142.160.155]:48524) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pub99-0005Nu-7f for 56682@debbugs.gnu.org; Thu, 04 May 2023 11:45:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=heytings.org; s=20220101; t=1683215130; bh=vlTgxrZdLu+GSnME1b1BtSKzQCSCfFR/2v55epipIPM=; h=Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:From; b=fdj7n6Q/xklFRDbqcj/HrNCDeT4YaN9soOSFAGOoExK5xKvc7UaimyI5kqBK1Tvaf uDB27Sy/MWau4j9n/Opr4tsiHpsDiDcX80ufPSCIyNDAOWq6SKoWZLaZ5r+yp5qO9U SeZRrKLpl9BcDwYd4bRjM/mZko7X87n/ZdTXJv8RMnDQA7KbC5Wohz4KKK75xPWXmx 5A9Za4P1cf/6OFGQmFRIFcnZOlEKxuzEWADUR/gr+v2w97BC6LBh8rNvRvLuv/BxuM Fn7oMsgfpXaYSUYw5n0EZL/H8t/Vne+lWYpnGetew1eE2KLE9J1qvVK3RgTfoveppy b4zRlp5oA8M4w== In-Reply-To: <83jzxoll20.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list 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-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:261025 Archived-At: --kzK5kwWOtk Content-Type: text/plain; format=flowed; charset=us-ascii >> Eli, I've been away for a month, and apparently I forgot to push the >> merge. Sorry for that. Is this still okay now? > > You've got to be kidding! I was thinking about releasing Emacs 29.1 > soon! > Sorry again. > > Please show the full diffs of the proposed merge, I will have to think > about this again, and think hard. > You can get them by checking out the scratch/long-lines-cleanup and doing "git diff emacs-29..." Just in case, I attach the full diff. Most of it are renamings and documentation improvements. The main code change is the function 'get_nearby_bol_pos' used by 'get_small_narrowing_begv'. >> By the way, I think we should add a hook and run it when long line >> optimizations are activated, so that users can, for example, >> automatically turn modes that are known to be problematic off. WDYT? > > I don't think we should add hooks without real-life use cases that we > understand and consider important. Hooks called by redisplay are > especially problematic, and should be added very sparingly. > Okay. --kzK5kwWOtk Content-Type: text/x-diff; name=long-lines-cleanup.diff Content-Transfer-Encoding: base64 Content-ID: <221c6716858d4b581294@heytings.org> Content-Disposition: attachment; filename=long-lines-cleanup.diff ZGlmZiAtLWdpdCBhL2RvYy9saXNwcmVmL3Bvc2l0aW9ucy50ZXhpIGIvZG9j L2xpc3ByZWYvcG9zaXRpb25zLnRleGkNCmluZGV4IDFiMzJmMTg5MjJjLi5l MDlmZDRlN2NhNSAxMDA2NDQNCi0tLSBhL2RvYy9saXNwcmVmL3Bvc2l0aW9u cy50ZXhpDQorKysgYi9kb2MvbGlzcHJlZi9wb3NpdGlvbnMudGV4aQ0KQEAg LTExNTQsNiArMTE1NCw3IEBAIHNhdmVkIGJvdW5kcy4gIEluIHRoYXQgY2Fz ZSBpdCBpcyBlcXVpdmFsZW50IHRvDQogQGVuZCBleGFtcGxlDQogDQogQGNp bmRleCBsYWJlbGVkIG5hcnJvd2luZw0KK0BjaW5kZXggbGFiZWxlZCByZXN0 cmljdGlvbg0KIFdoZW4gdGhlIG9wdGlvbmFsIGFyZ3VtZW50IEB2YXJ7bGFi ZWx9LCBhIHN5bWJvbCwgaXMgcHJlc2VudCwgdGhlDQogbmFycm93aW5nIGlz IEBkZm57bGFiZWxlZH0uICBBIGxhYmVsZWQgbmFycm93aW5nIGRpZmZlcnMg ZnJvbSBhDQogbm9uLWxhYmVsZWQgb25lIGluIHNldmVyYWwgd2F5czoNCmRp ZmYgLS1naXQgYS9saXNwL3N1YnIuZWwgYi9saXNwL3N1YnIuZWwNCmluZGV4 IGY4MjgyNmU4MTljLi5jYTFmYzI4ODZiNCAxMDA2NDQNCi0tLSBhL2xpc3Av c3Vici5lbA0KKysrIGIvbGlzcC9zdWJyLmVsDQpAQCAtMzk3NSw3ICszOTc1 LDcgQEAgc2FtZSBMQUJFTCBhcmd1bWVudC4NCiAgICJIZWxwZXIgZnVuY3Rp b24gZm9yIGB3aXRoLXJlc3RyaWN0aW9uJywgd2hpY2ggc2VlLiINCiAgIChz YXZlLXJlc3RyaWN0aW9uDQogICAgIChuYXJyb3ctdG8tcmVnaW9uIHN0YXJ0 IGVuZCkNCi0gICAgKGlmIGxhYmVsIChpbnRlcm5hbC0tbG9jay1uYXJyb3dp bmcgbGFiZWwpKQ0KKyAgICAoaWYgbGFiZWwgKGludGVybmFsLS1sYWJlbC1y ZXN0cmljdGlvbiBsYWJlbCkpDQogICAgIChmdW5jYWxsIGJvZHkpKSkNCiAN CiAoZGVmbWFjcm8gd2l0aG91dC1yZXN0cmljdGlvbiAoJnJlc3QgcmVzdCkN CkBAIC0zOTk3LDcgKzM5OTcsNyBAQCBhcmUgbGlmdGVkLg0KIChkZWZ1biBp bnRlcm5hbC0td2l0aG91dC1yZXN0cmljdGlvbiAoYm9keSAmb3B0aW9uYWwg bGFiZWwpDQogICAiSGVscGVyIGZ1bmN0aW9uIGZvciBgd2l0aG91dC1yZXN0 cmljdGlvbicsIHdoaWNoIHNlZS4iDQogICAoc2F2ZS1yZXN0cmljdGlvbg0K LSAgICAoaWYgbGFiZWwgKGludGVybmFsLS11bmxvY2stbmFycm93aW5nIGxh YmVsKSkNCisgICAgKGlmIGxhYmVsIChpbnRlcm5hbC0tdW5sYWJlbC1yZXN0 cmljdGlvbiBsYWJlbCkpDQogICAgICh3aWRlbikNCiAgICAgKGZ1bmNhbGwg Ym9keSkpKQ0KIA0KZGlmZiAtLWdpdCBhL3NyYy9idWZmZXIuYyBiL3NyYy9i dWZmZXIuYw0KaW5kZXggMGM3NDA3NzVlNWIuLjI1MjIzMTM1N2JjIDEwMDY0 NA0KLS0tIGEvc3JjL2J1ZmZlci5jDQorKysgYi9zcmMvYnVmZmVyLmMNCkBA IC0yMzg2LDYgKzIzODYsNyBAQCBBbnkgbmFycm93aW5nIHJlc3RyaWN0aW9u IGluIGVmZmVjdCAoc2VlIGBuYXJyb3ctdG8tcmVnaW9uJykgaXMgcmVtb3Zl ZCwNCiBzbyB0aGUgYnVmZmVyIGlzIHRydWx5IGVtcHR5IGFmdGVyIHRoaXMu ICAqLykNCiAgICh2b2lkKQ0KIHsNCisgIGxhYmVsZWRfcmVzdHJpY3Rpb25z X3JlbW92ZV9pbl9jdXJyZW50X2J1ZmZlciAoKTsNCiAgIEZ3aWRlbiAoKTsN CiANCiAgIGRlbF9yYW5nZSAoQkVHLCBaKTsNCmRpZmYgLS1naXQgYS9zcmMv Y2FsbHByb2MuYyBiL3NyYy9jYWxscHJvYy5jDQppbmRleCA1ZTFlMWE4Y2Mw YS4uNmYzZDRmYWQ5YmUgMTAwNjQ0DQotLS0gYS9zcmMvY2FsbHByb2MuYw0K KysrIGIvc3JjL2NhbGxwcm9jLmMNCkBAIC0xMTEzLDYgKzExMTMsNyBAQCB1 c2FnZTogKGNhbGwtcHJvY2Vzcy1yZWdpb24gU1RBUlQgRU5EIFBST0dSQU0g Jm9wdGlvbmFsIERFTEVURSBCVUZGRVIgRElTUExBWSAmcg0KICAgICAgICAg ew0KICAgICAgICAgICAvKiBObyBuZWVkIHRvIHNhdmUgcmVzdHJpY3Rpb25z IHNpbmNlIHdlIGRlbGV0ZSBldmVyeXRoaW5nDQogICAgICAgICAgICAgIGFu eXdheS4gICovDQorICAgICAgICAgIGxhYmVsZWRfcmVzdHJpY3Rpb25zX3Jl bW92ZV9pbl9jdXJyZW50X2J1ZmZlciAoKTsNCiAgICAgICAgICAgRndpZGVu ICgpOw0KICAgICAgICAgICBkZWxfcmFuZ2UgKEJFRywgWik7DQogICAgICAg ICB9DQpkaWZmIC0tZ2l0IGEvc3JjL2NvbXBvc2l0ZS5jIGIvc3JjL2NvbXBv c2l0ZS5jDQppbmRleCAxNjRlZWIzOTU5OC4uODg1ZGIyNGRmMDEgMTAwNjQ0 DQotLS0gYS9zcmMvY29tcG9zaXRlLmMNCisrKyBiL3NyYy9jb21wb3NpdGUu Yw0KQEAgLTEwNzUsNyArMTA3NSw3IEBAIGNvbXBvc2l0aW9uX2NvbXB1dGVf c3RvcF9wb3MgKHN0cnVjdCBjb21wb3NpdGlvbl9pdCAqY21wX2l0LCBwdHJk aWZmX3QgY2hhcnBvcywNCiAJICAgICB3aXRoIGxvbmcgbGluZXMsIGhvd2V2 ZXIsIE5MIG1pZ2h0IGJlIGZhciBhd2F5LCBzbw0KIAkgICAgIHByZXRlbmQg dGhhdCB0aGUgYnVmZmVyIGlzIHNtYWxsZXIuICAqLw0KIAkgIGlmIChjdXJy ZW50X2J1ZmZlci0+bG9uZ19saW5lX29wdGltaXphdGlvbnNfcCkNCi0JICAg IGVuZHBvcyA9IGdldF9jbG9zZXJfbmFycm93ZWRfYmVndiAoY21wX2l0LT5w YXJlbnRfaXQtPncsIGNoYXJwb3MpOw0KKwkgICAgZW5kcG9zID0gZ2V0X3Nt YWxsX25hcnJvd2luZ19iZWd2IChjbXBfaXQtPnBhcmVudF9pdC0+dywgY2hh cnBvcyk7DQogCX0NCiAgICAgfQ0KICAgY21wX2l0LT5pZCA9IC0xOw0KQEAg LTE2NTQsNyArMTY1NCw3IEBAIGZpbmRfYXV0b21hdGljX2NvbXBvc2l0aW9u IChwdHJkaWZmX3QgcG9zLCBwdHJkaWZmX3QgbGltaXQsIHB0cmRpZmZfdCBi YWNrbGltLA0KIAl7DQogCSAgLyogSW4gYnVmZmVycyB3aXRoIHZlcnkgbG9u ZyBsaW5lcywgdGhpcyBmdW5jdGlvbiBiZWNvbWVzIHZlcnkNCiAJICAgICBz bG93LiAgUHJldGVuZCB0aGF0IHRoZSBidWZmZXIgaXMgbmFycm93ZWQgdG8g bWFrZSBpdCBmYXN0LiAgKi8NCi0JICBwdHJkaWZmX3QgYmVndiA9IGdldF9j bG9zZXJfbmFycm93ZWRfYmVndiAodywgd2luZG93X3BvaW50ICh3KSk7DQor CSAgcHRyZGlmZl90IGJlZ3YgPSBnZXRfc21hbGxfbmFycm93aW5nX2JlZ3Yg KHcsIHdpbmRvd19wb2ludCAodykpOw0KIAkgIGlmIChwb3MgPiBiZWd2KQ0K IAkgICAgaGVhZCA9IGJlZ3Y7DQogCX0NCmRpZmYgLS1naXQgYS9zcmMvZGlz cGV4dGVybi5oIGIvc3JjL2Rpc3BleHRlcm4uaA0KaW5kZXggNGRjYWIxMTNl YTIuLmVjZTEyODk0OWY1IDEwMDY0NA0KLS0tIGEvc3JjL2Rpc3BleHRlcm4u aA0KKysrIGIvc3JjL2Rpc3BleHRlcm4uaA0KQEAgLTIzMzQsMjEgKzIzMzQs MjAgQEAgc3RydWN0IGl0DQogICAgICB3aXRoIHdoaWNoIGRpc3BsYXlfc3Ry aW5nIHdhcyBjYWxsZWQuICAqLw0KICAgcHRyZGlmZl90IGVuZF9jaGFycG9z Ow0KIA0KLSAgLyogQWx0ZXJuYXRlIGJlZ2luIHBvc2l0aW9uIG9mIHRoZSBi dWZmZXIgdGhhdCBtYXkgYmUgdXNlZCB0bw0KLSAgICAgb3B0aW1pemUgZGlz cGxheSAoc2VlIHRoZSBTRVRfV0lUSF9OQVJST1dFRF9CRUdWIG1hY3JvKS4g ICovDQotICBwdHJkaWZmX3QgbmFycm93ZWRfYmVndjsNCi0NCi0gIC8qIEFs dGVybmF0ZSBlbmQgcG9zaXRpb24gb2YgdGhlIGJ1ZmZlciB0aGF0IG1heSBi ZSB1c2VkIHRvDQotICAgICBvcHRpbWl6ZSBkaXNwbGF5LiAgKi8NCi0gIHB0 cmRpZmZfdCBuYXJyb3dlZF96djsNCi0NCi0gIC8qIEJlZ2luIHBvc2l0aW9u IG9mIHRoZSBidWZmZXIgZm9yIHRoZSBsb2NrZWQgbmFycm93aW5nIGFyb3Vu ZA0KLSAgICAgbG93LWxldmVsIGhvb2tzLiAgKi8NCi0gIHB0cmRpZmZfdCBs b2NrZWRfbmFycm93aW5nX2JlZ3Y7DQotDQotICAvKiBFbmQgcG9zaXRpb24g b2YgdGhlIGJ1ZmZlciBmb3IgdGhlIGxvY2tlZCBuYXJyb3dpbmcgYXJvdW5k DQotICAgICBsb3ctbGV2ZWwgaG9va3MuICAqLw0KLSAgcHRyZGlmZl90IGxv Y2tlZF9uYXJyb3dpbmdfenY7DQorICAvKiBBbHRlcm5hdGUgYmVnaW4gYW5k IGVuZCBwb3NpdGlvbnMgb2YgdGhlIGJ1ZmZlciB0aGF0IGFyZSB1c2VkIHRv DQorICAgICBvcHRpbWl6ZSBkaXNwbGF5IG9mIGJ1ZmZlcnMgd2l0aCBsb25n IGxpbmVzLiAgVGhlc2UgdHdvIGZpZWxkcw0KKyAgICAgaG9sZCB0aGUgcmV0 dXJuIHZhbHVlIG9mIHRoZSAnZ2V0X21lZGl1bV9uYXJyb3dpbmdfYmVndicg YW5kDQorICAgICAnZ2V0X21lZGl1bV9uYXJyb3dpbmdfenYnIGZ1bmN0aW9u cy4gICovDQorICBwdHJkaWZmX3QgbWVkaXVtX25hcnJvd2luZ19iZWd2Ow0K KyAgcHRyZGlmZl90IG1lZGl1bV9uYXJyb3dpbmdfenY7DQorDQorICAvKiBB bHRlcm5hdGUgYmVnaW4gYW5kIGVuZCBwb3NpdGlvbnMgb2YgdGhlIGJ1ZmZl ciB0aGF0IGFyZSB1c2VkIGZvcg0KKyAgICAgbGFiZWxlZCBuYXJyb3dpbmdz IGFyb3VuZCBsb3ctbGV2ZWwgaG9va3MgaW4gYnVmZmVycyB3aXRoIGxvbmcN CisgICAgIGxpbmVzLiAgVGhlc2UgdHdvIGZpZWxkcyBob2xkIHRoZSByZXR1 cm4gdmFsdWUgb2YgdGhlDQorICAgICAnZ2V0X2xhcmdlX25hcnJvd2luZ19i ZWd2JyBhbmQgJ2dldF9sYXJnZV9uYXJyb3dpbmdfenYnDQorICAgICBmdW5j dGlvbnMuICAqLw0KKyAgcHRyZGlmZl90IGxhcmdlX25hcnJvd2luZ19iZWd2 Ow0KKyAgcHRyZGlmZl90IGxhcmdlX25hcnJvd2luZ196djsNCiANCiAgIC8q IEMgc3RyaW5nIHRvIGl0ZXJhdGUgb3Zlci4gIE5vbi1udWxsIG1lYW5zIGdl dCBjaGFyYWN0ZXJzIGZyb20NCiAgICAgIHRoaXMgc3RyaW5nLCBvdGhlcndp c2UgY2hhcmFjdGVycyBhcmUgcmVhZCBmcm9tIGN1cnJlbnRfYnVmZmVyDQpA QCAtMzQxMCwxMSArMzQwOSw5IEBAIHZvaWQgbWFya193aW5kb3dfZGlzcGxh eV9hY2N1cmF0ZSAoTGlzcF9PYmplY3QsIGJvb2wpOw0KIHZvaWQgcmVkaXNw bGF5X3ByZXNlcnZlX2VjaG9fYXJlYSAoaW50KTsNCiB2b2lkIGluaXRfaXRl cmF0b3IgKHN0cnVjdCBpdCAqLCBzdHJ1Y3Qgd2luZG93ICosIHB0cmRpZmZf dCwNCiAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCwgc3RydWN0IGds eXBoX3JvdyAqLCBlbnVtIGZhY2VfaWQpOw0KLXB0cmRpZmZfdCBnZXRfbmFy cm93ZWRfYmVndiAoc3RydWN0IHdpbmRvdyAqLCBwdHJkaWZmX3QpOw0KLXB0 cmRpZmZfdCBnZXRfbmFycm93ZWRfenYgKHN0cnVjdCB3aW5kb3cgKiwgcHRy ZGlmZl90KTsNCi1wdHJkaWZmX3QgZ2V0X2Nsb3Nlcl9uYXJyb3dlZF9iZWd2 IChzdHJ1Y3Qgd2luZG93ICosIHB0cmRpZmZfdCk7DQotcHRyZGlmZl90IGdl dF9sb2NrZWRfbmFycm93aW5nX2JlZ3YgKHB0cmRpZmZfdCk7DQotcHRyZGlm Zl90IGdldF9sb2NrZWRfbmFycm93aW5nX3p2IChwdHJkaWZmX3QpOw0KK3B0 cmRpZmZfdCBnZXRfc21hbGxfbmFycm93aW5nX2JlZ3YgKHN0cnVjdCB3aW5k b3cgKiwgcHRyZGlmZl90KTsNCitwdHJkaWZmX3QgZ2V0X2xhcmdlX25hcnJv d2luZ19iZWd2IChwdHJkaWZmX3QpOw0KK3B0cmRpZmZfdCBnZXRfbGFyZ2Vf bmFycm93aW5nX3p2IChwdHJkaWZmX3QpOw0KIHZvaWQgaW5pdF9pdGVyYXRv cl90b19yb3dfc3RhcnQgKHN0cnVjdCBpdCAqLCBzdHJ1Y3Qgd2luZG93ICos DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGds eXBoX3JvdyAqKTsNCiB2b2lkIHN0YXJ0X2Rpc3BsYXkgKHN0cnVjdCBpdCAq LCBzdHJ1Y3Qgd2luZG93ICosIHN0cnVjdCB0ZXh0X3Bvcyk7DQpkaWZmIC0t Z2l0IGEvc3JjL2VkaXRmbnMuYyBiL3NyYy9lZGl0Zm5zLmMNCmluZGV4IGY4 M2M1YzcyNTliLi40YzViNjkxZWI1MCAxMDA2NDQNCi0tLSBhL3NyYy9lZGl0 Zm5zLmMNCisrKyBiL3NyYy9lZGl0Zm5zLmMNCkBAIC0yNjUzLDE4MiArMjY1 MywyMDQgQEAgREVGVU4gKCJkZWxldGUtYW5kLWV4dHJhY3QtcmVnaW9uIiwg RmRlbGV0ZV9hbmRfZXh0cmFjdF9yZWdpb24sDQogICByZXR1cm4gZGVsX3Jh bmdlXzEgKFhGSVhOVU0gKHN0YXJ0KSwgWEZJWE5VTSAoZW5kKSwgMSwgMSk7 DQogfQ0KIAwNCi0vKiBBbGlzdCBvZiBidWZmZXJzIGluIHdoaWNoIGxvY2tl ZCBuYXJyb3dpbmcgaXMgdXNlZC4gIFRoZSBjYXIgb2YNCi0gICBlYWNoIGxp c3QgZWxlbWVudCBpcyBhIGJ1ZmZlciwgdGhlIGNkciBpcyBhIGxpc3Qgb2Yg dHJpcGxldHMgKHRhZw0KLSAgIGJlZ3YtbWFya2VyIHp2LW1hcmtlcikuICBU aGUgbGFzdCBlbGVtZW50IG9mIHRoYXQgbGlzdCBhbHdheXMgdXNlcw0KLSAg IHRoZSAodW5pbnRlcm5lZCkgUW91dGVybW9zdF9uYXJyb3dpbmcgdGFnIGFu ZCByZWNvcmRzIHRoZSBuYXJyb3dpbmcNCi0gICBib3VuZHMgdGhhdCB3ZXJl IHNldCBieSB0aGUgdXNlciBhbmQgdGhhdCBhcmUgdmlzaWJsZSBvbiBkaXNw bGF5Lg0KLSAgIFRoaXMgYWxpc3QgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IG5h cnJvdy10by1yZWdpb24sIHdpZGVuLA0KLSAgIGludGVybmFsLS1sb2NrLW5h cnJvd2luZywgaW50ZXJuYWwtLXVubG9jay1uYXJyb3dpbmcgYW5kDQotICAg c2F2ZS1yZXN0cmljdGlvbi4gIEZvciBlZmZpY2llbmN5IHJlYXNvbnMsIGFu IGFsaXN0IGlzIHVzZWQgaW5zdGVhZA0KLSAgIG9mIGEgYnVmZmVyLWxvY2Fs IHZhcmlhYmxlOiBvdGhlcndpc2UgcmVzZXRfb3V0ZXJtb3N0X25hcnJvd2lu Z3MsDQotICAgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBlYWNoIHJlZGlzcGxh eSBjeWNsZSwgd291bGQgaGF2ZSB0byBsb29wDQotICAgdGhyb3VnaCBhbGwg bGl2ZSBidWZmZXJzLiAgKi8NCi1zdGF0aWMgTGlzcF9PYmplY3QgbmFycm93 aW5nX2xvY2tzOw0KLQ0KLS8qIEFkZCBCVUYgd2l0aCBpdHMgTE9DS1MgaW4g dGhlIG5hcnJvd2luZ19sb2NrcyBhbGlzdC4gICovDQorLyogQWxpc3Qgb2Yg YnVmZmVycyBpbiB3aGljaCBsYWJlbGVkIHJlc3RyaWN0aW9ucyBhcmUgdXNl ZC4gIFRoZSBjYXINCisgICBvZiBlYWNoIGxpc3QgZWxlbWVudCBpcyBhIGJ1 ZmZlciwgdGhlIGNkciBpcyBhIGxpc3Qgb2YgdHJpcGxldHMNCisgICAobGFi ZWwgYmVndi1tYXJrZXIgenYtbWFya2VyKS4gIFRoZSBsYXN0IHRyaXBsZXQg b2YgdGhhdCBsaXN0DQorICAgYWx3YXlzIHVzZXMgdGhlICh1bmludGVybmVk KSBRb3V0ZXJtb3N0X3Jlc3RyaWN0aW9uIGxhYmVsLCBhbmQNCisgICByZWNv cmRzIHRoZSByZXN0cmljdGlvbiBib3VuZHMgdGhhdCB3ZXJlIGN1cnJlbnQg d2hlbiB0aGUgZmlyc3QNCisgICBsYWJlbGVkIHJlc3RyaWN0aW9uIHdhcyBl bnRlcmVkICh3aGljaCBtYXkgYmUgYSBuYXJyb3dpbmcgdGhhdCB3YXMNCisg ICBzZXQgYnkgdGhlIHVzZXIgYW5kIGlzIHZpc2libGUgb24gZGlzcGxheSku ICBUaGlzIGFsaXN0IGlzIHVzZWQNCisgICBpbnRlcm5hbGx5IGJ5IG5hcnJv dy10by1yZWdpb24sIHdpZGVuLCBpbnRlcm5hbC0tbGFiZWwtcmVzdHJpY3Rp b24sDQorICAgaW50ZXJuYWwtLXVubGFiZWwtcmVzdHJpY3Rpb24gYW5kIHNh dmUtcmVzdHJpY3Rpb24uICBGb3IgZWZmaWNpZW5jeQ0KKyAgIHJlYXNvbnMs IGFuIGFsaXN0IGlzIHVzZWQgaW5zdGVhZCBvZiBhIGJ1ZmZlci1sb2NhbCB2 YXJpYWJsZToNCisgICBvdGhlcndpc2UgcmVzZXRfb3V0ZXJtb3N0X3Jlc3Ry aWN0aW9ucywgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBlYWNoDQorICAgcmVk aXNwbGF5IGN5Y2xlLCB3b3VsZCBoYXZlIHRvIGxvb3AgdGhyb3VnaCBhbGwg bGl2ZSBidWZmZXJzLiAgKi8NCitzdGF0aWMgTGlzcF9PYmplY3QgbGFiZWxl ZF9yZXN0cmljdGlvbnM7DQorDQorLyogQWRkIEJVRiB3aXRoIGl0cyBsaXN0 IG9mIGxhYmVsZWQgUkVTVFJJQ1RJT05TIGluIHRoZQ0KKyAgIGxhYmVsZWRf cmVzdHJpY3Rpb25zIGFsaXN0LiAgKi8NCiBzdGF0aWMgdm9pZA0KLW5hcnJv d2luZ19sb2Nrc19hZGQgKExpc3BfT2JqZWN0IGJ1ZiwgTGlzcF9PYmplY3Qg bG9ja3MpDQorbGFiZWxlZF9yZXN0cmljdGlvbnNfYWRkIChMaXNwX09iamVj dCBidWYsIExpc3BfT2JqZWN0IHJlc3RyaWN0aW9ucykNCiB7DQotICBuYXJy b3dpbmdfbG9ja3MgPSBuY29uYzIgKGxpc3QxIChsaXN0MiAoYnVmLCBsb2Nr cykpLCBuYXJyb3dpbmdfbG9ja3MpOw0KKyAgbGFiZWxlZF9yZXN0cmljdGlv bnMgPSBuY29uYzIgKGxpc3QxIChsaXN0MiAoYnVmLCByZXN0cmljdGlvbnMp KSwNCisJCQkJIGxhYmVsZWRfcmVzdHJpY3Rpb25zKTsNCiB9DQogDQotLyog UmVtb3ZlIEJVRiBhbmQgaXRzIGxvY2tzIGZyb20gdGhlIG5hcnJvd2luZ19s b2NrcyBhbGlzdC4gIERvDQotICAgbm90aGluZyBpZiBCVUYgaXMgbm90IHBy ZXNlbnQgaW4gbmFycm93aW5nX2xvY2tzLiAgKi8NCisvKiBSZW1vdmUgQlVG IGFuZCBpdHMgbGlzdCBvZiBsYWJlbGVkIHJlc3RyaWN0aW9ucyBmcm9tIHRo ZQ0KKyAgIGxhYmVsZWRfcmVzdHJpY3Rpb25zIGFsaXN0LiAgRG8gbm90aGlu ZyBpZiBCVUYgaXMgbm90IHByZXNlbnQgaW4NCisgICBsYWJlbGVkX3Jlc3Ry aWN0aW9ucy4gICovDQogc3RhdGljIHZvaWQNCi1uYXJyb3dpbmdfbG9ja3Nf cmVtb3ZlIChMaXNwX09iamVjdCBidWYpDQorbGFiZWxlZF9yZXN0cmljdGlv bnNfcmVtb3ZlIChMaXNwX09iamVjdCBidWYpDQogew0KLSAgbmFycm93aW5n X2xvY2tzID0gRmRlbHEgKEZhc3NvYyAoYnVmLCBuYXJyb3dpbmdfbG9ja3Ms IFFuaWwpLA0KLQkJCSAgIG5hcnJvd2luZ19sb2Nrcyk7DQorICBsYWJlbGVk X3Jlc3RyaWN0aW9ucyA9IEZkZWxxIChGYXNzb2MgKGJ1ZiwgbGFiZWxlZF9y ZXN0cmljdGlvbnMsIFFuaWwpLA0KKwkJCQlsYWJlbGVkX3Jlc3RyaWN0aW9u cyk7DQogfQ0KIA0KLS8qIFJldHJpZXZlIG9uZSBvZiB0aGUgQkVHVi9aViBi b3VuZHMgb2YgYSBuYXJyb3dpbmcgaW4gQlVGIGZyb20gdGhlDQotICAgbmFy cm93aW5nX2xvY2tzIGFsaXN0LCBhcyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3Qg TGlzcF9NYXJrZXIsIG9yDQotICAgTlVMTCBpZiBCVUYgaXMgbm90IGluIG5h cnJvd2luZ19sb2NrcyBvciBpcyBhIGtpbGxlZCBidWZmZXIuICBXaGVuDQot ICAgT1VURVJNT1NUIGlzIHRydWUsIHRoZSBib3VuZHMgdGhhdCB3ZXJlIHNl dCBieSB0aGUgdXNlciBhbmQgdGhhdA0KLSAgIGFyZSB2aXNpYmxlIG9uIGRp c3BsYXkgYXJlIHJldHVybmVkLiAgT3RoZXJ3aXNlIHRoZSBpbm5lcm1vc3QN Ci0gICBsb2NrZWQgbmFycm93aW5nIGJvdW5kcyBhcmUgcmV0dXJuZWQuICAq Lw0KKy8qIFJldHJpZXZlIG9uZSBvZiB0aGUgbGFiZWxlZCByZXN0cmljdGlv biBib3VuZHMgaW4gQlVGIGZyb20gdGhlDQorICAgbGFiZWxlZF9yZXN0cmlj dGlvbnMgYWxpc3QsIGFzIGEgcG9pbnRlciB0byBhIHN0cnVjdCBMaXNwX01h cmtlciwNCisgICBvciByZXR1cm4gTlVMTCBpZiBCVUYgaXMgbm90IGluIGxh YmVsZWRfcmVzdHJpY3Rpb25zIG9yIGlzIGEga2lsbGVkDQorICAgYnVmZmVy LiAgV2hlbiBPVVRFUk1PU1QgaXMgdHJ1ZSwgdGhlIHJlc3RyaWN0aW9uIGJv dW5kcyB0aGF0IHdlcmUNCisgICBjdXJyZW50IHdoZW4gdGhlIGZpcnN0IGxh YmVsZWQgcmVzdHJpY3Rpb24gd2FzIGVudGVyZWQgYXJlDQorICAgcmV0dXJu ZWQuICBPdGhlcndpc2UgdGhlIGJvdW5kcyBvZiB0aGUgaW5uZXJtb3N0IGxh YmVsZWQNCisgICByZXN0cmljdGlvbiBhcmUgcmV0dXJuZWQuICAqLw0KIHN0 YXRpYyBzdHJ1Y3QgTGlzcF9NYXJrZXIgKg0KLW5hcnJvd2luZ19sb2NrX2dl dF9ib3VuZCAoTGlzcF9PYmplY3QgYnVmLCBib29sIGJlZ3YsIGJvb2wgb3V0 ZXJtb3N0KQ0KK2xhYmVsZWRfcmVzdHJpY3Rpb25zX2dldF9ib3VuZCAoTGlz cF9PYmplY3QgYnVmLCBib29sIGJlZ3YsIGJvb2wgb3V0ZXJtb3N0KQ0KIHsN CiAgIGlmIChOSUxQIChGYnVmZmVyX2xpdmVfcCAoYnVmKSkpDQogICAgIHJl dHVybiBOVUxMOw0KLSAgTGlzcF9PYmplY3QgYnVmZmVyX2xvY2tzID0gYXNz cV9ub19xdWl0IChidWYsIG5hcnJvd2luZ19sb2Nrcyk7DQotICBpZiAoTklM UCAoYnVmZmVyX2xvY2tzKSkNCisgIExpc3BfT2JqZWN0IHJlc3RyaWN0aW9u cyA9IGFzc3Ffbm9fcXVpdCAoYnVmLCBsYWJlbGVkX3Jlc3RyaWN0aW9ucyk7 DQorICBpZiAoTklMUCAocmVzdHJpY3Rpb25zKSkNCiAgICAgcmV0dXJuIE5V TEw7DQotICBidWZmZXJfbG9ja3MgPSBYQ0FSIChYQ0RSIChidWZmZXJfbG9j a3MpKTsNCisgIHJlc3RyaWN0aW9ucyA9IFhDQVIgKFhDRFIgKHJlc3RyaWN0 aW9ucykpOw0KICAgTGlzcF9PYmplY3QgYm91bmRzDQogICAgID0gb3V0ZXJt b3N0DQotICAgICAgPyBYQ0RSIChhc3NxX25vX3F1aXQgKFFvdXRlcm1vc3Rf bmFycm93aW5nLCBidWZmZXJfbG9ja3MpKQ0KLSAgICAgIDogWENEUiAoWENB UiAoYnVmZmVyX2xvY2tzKSk7DQorICAgICAgPyBYQ0RSIChhc3NxX25vX3F1 aXQgKFFvdXRlcm1vc3RfcmVzdHJpY3Rpb24sIHJlc3RyaWN0aW9ucykpDQor ICAgICAgOiBYQ0RSIChYQ0FSIChyZXN0cmljdGlvbnMpKTsNCiAgIGVhc3Nl cnQgKCEgTklMUCAoYm91bmRzKSk7DQogICBMaXNwX09iamVjdCBtYXJrZXIg PSBiZWd2ID8gWENBUiAoYm91bmRzKSA6IFhDQVIgKFhDRFIgKGJvdW5kcykp Ow0KICAgZWFzc2VydCAoRVEgKEZtYXJrZXJfYnVmZmVyIChtYXJrZXIpLCBi dWYpKTsNCiAgIHJldHVybiBYTUFSS0VSIChtYXJrZXIpOw0KIH0NCiANCi0v KiBSZXRyaWV2ZSB0aGUgdGFnIG9mIHRoZSBpbm5lcm1vc3QgbmFycm93aW5n IGluIEJVRi4gIFJldHVybiBuaWwgaWYNCi0gICBCVUYgaXMgbm90IGluIG5h cnJvd2luZ19sb2NrcyBvciBpcyBhIGtpbGxlZCBidWZmZXIuICAqLw0KKy8q IFJldHJpZXZlIHRoZSBsYWJlbCBvZiB0aGUgaW5uZXJtb3N0IGxhYmVsZWQg cmVzdHJpY3Rpb24gaW4gQlVGLg0KKyAgIFJldHVybiBuaWwgaWYgQlVGIGlz IG5vdCBpbiBsYWJlbGVkX3Jlc3RyaWN0aW9ucyBvciBpcyBhIGtpbGxlZA0K KyAgIGJ1ZmZlci4gICovDQogc3RhdGljIExpc3BfT2JqZWN0DQotbmFycm93 aW5nX2xvY2tfcGVla190YWcgKExpc3BfT2JqZWN0IGJ1ZikNCitsYWJlbGVk X3Jlc3RyaWN0aW9uc19wZWVrX2xhYmVsIChMaXNwX09iamVjdCBidWYpDQog ew0KICAgaWYgKE5JTFAgKEZidWZmZXJfbGl2ZV9wIChidWYpKSkNCiAgICAg cmV0dXJuIFFuaWw7DQotICBMaXNwX09iamVjdCBidWZmZXJfbG9ja3MgPSBh c3NxX25vX3F1aXQgKGJ1ZiwgbmFycm93aW5nX2xvY2tzKTsNCi0gIGlmIChO SUxQIChidWZmZXJfbG9ja3MpKQ0KKyAgTGlzcF9PYmplY3QgcmVzdHJpY3Rp b25zID0gYXNzcV9ub19xdWl0IChidWYsIGxhYmVsZWRfcmVzdHJpY3Rpb25z KTsNCisgIGlmIChOSUxQIChyZXN0cmljdGlvbnMpKQ0KICAgICByZXR1cm4g UW5pbDsNCi0gIExpc3BfT2JqZWN0IHRhZyA9IFhDQVIgKFhDQVIgKFhDQVIg KFhDRFIgKGJ1ZmZlcl9sb2NrcykpKSk7DQotICBlYXNzZXJ0ICghIE5JTFAg KHRhZykpOw0KLSAgcmV0dXJuIHRhZzsNCisgIExpc3BfT2JqZWN0IGxhYmVs ID0gWENBUiAoWENBUiAoWENBUiAoWENEUiAocmVzdHJpY3Rpb25zKSkpKTsN CisgIGVhc3NlcnQgKCEgTklMUCAobGFiZWwpKTsNCisgIHJldHVybiBsYWJl bDsNCiB9DQogDQotLyogQWRkIGEgTE9DSyBmb3IgQlVGIGluIHRoZSBuYXJy b3dpbmdfbG9ja3MgYWxpc3QuICAqLw0KKy8qIEFkZCBhIGxhYmVsZWQgUkVT VFJJQ1RJT04gZm9yIEJVRiBpbiB0aGUgbGFiZWxlZF9yZXN0cmljdGlvbnMN CisgICBhbGlzdC4gICovDQogc3RhdGljIHZvaWQNCi1uYXJyb3dpbmdfbG9j a19wdXNoIChMaXNwX09iamVjdCBidWYsIExpc3BfT2JqZWN0IGxvY2spDQor bGFiZWxlZF9yZXN0cmljdGlvbnNfcHVzaCAoTGlzcF9PYmplY3QgYnVmLCBM aXNwX09iamVjdCByZXN0cmljdGlvbikNCiB7DQotICBMaXNwX09iamVjdCBi dWZmZXJfbG9ja3MgPSBhc3NxX25vX3F1aXQgKGJ1ZiwgbmFycm93aW5nX2xv Y2tzKTsNCi0gIGlmIChOSUxQIChidWZmZXJfbG9ja3MpKQ0KLSAgICBuYXJy b3dpbmdfbG9ja3NfYWRkIChidWYsIGxpc3QxIChsb2NrKSk7DQorICBMaXNw X09iamVjdCByZXN0cmljdGlvbnMgPSBhc3NxX25vX3F1aXQgKGJ1ZiwgbGFi ZWxlZF9yZXN0cmljdGlvbnMpOw0KKyAgaWYgKE5JTFAgKHJlc3RyaWN0aW9u cykpDQorICAgIGxhYmVsZWRfcmVzdHJpY3Rpb25zX2FkZCAoYnVmLCBsaXN0 MSAocmVzdHJpY3Rpb24pKTsNCiAgIGVsc2UNCi0gICAgWFNFVENEUiAoYnVm ZmVyX2xvY2tzLCBsaXN0MSAobmNvbmMyIChsaXN0MSAobG9jayksDQotCQkJ CQkgIFhDQVIgKFhDRFIgKGJ1ZmZlcl9sb2NrcykpKSkpOw0KKyAgICBYU0VU Q0RSIChyZXN0cmljdGlvbnMsIGxpc3QxIChuY29uYzIgKGxpc3QxIChyZXN0 cmljdGlvbiksDQorCQkJCQkgIFhDQVIgKFhDRFIgKHJlc3RyaWN0aW9ucykp KSkpOw0KIH0NCiANCi0vKiBSZW1vdmUgdGhlIGlubmVybW9zdCBsb2NrIGlu IEJVRiBmcm9tIHRoZSBuYXJyb3dpbmdfbG9ja3MgYWxpc3QuDQotICAgRG8g bm90aGluZyBpZiBCVUYgaXMgbm90IHByZXNlbnQgaW4gbmFycm93aW5nX2xv Y2tzLiAgKi8NCisvKiBSZW1vdmUgdGhlIGlubmVybW9zdCBsYWJlbGVkIHJl c3RyaWN0aW9uIGluIEJVRiBmcm9tIHRoZQ0KKyAgIGxhYmVsZWRfcmVzdHJp Y3Rpb25zIGFsaXN0LiAgRG8gbm90aGluZyBpZiBCVUYgaXMgbm90IHByZXNl bnQgaW4NCisgICBsYWJlbGVkX3Jlc3RyaWN0aW9ucy4gICovDQogc3RhdGlj IHZvaWQNCi1uYXJyb3dpbmdfbG9ja19wb3AgKExpc3BfT2JqZWN0IGJ1ZikN CitsYWJlbGVkX3Jlc3RyaWN0aW9uc19wb3AgKExpc3BfT2JqZWN0IGJ1ZikN CiB7DQotICBMaXNwX09iamVjdCBidWZmZXJfbG9ja3MgPSBhc3NxX25vX3F1 aXQgKGJ1ZiwgbmFycm93aW5nX2xvY2tzKTsNCi0gIGlmIChOSUxQIChidWZm ZXJfbG9ja3MpKQ0KKyAgTGlzcF9PYmplY3QgcmVzdHJpY3Rpb25zID0gYXNz cV9ub19xdWl0IChidWYsIGxhYmVsZWRfcmVzdHJpY3Rpb25zKTsNCisgIGlm IChOSUxQIChyZXN0cmljdGlvbnMpKQ0KICAgICByZXR1cm47DQotICBpZiAo RVEgKG5hcnJvd2luZ19sb2NrX3BlZWtfdGFnIChidWYpLCBRb3V0ZXJtb3N0 X25hcnJvd2luZykpDQotICAgIG5hcnJvd2luZ19sb2Nrc19yZW1vdmUgKGJ1 Zik7DQorICBpZiAoRVEgKGxhYmVsZWRfcmVzdHJpY3Rpb25zX3BlZWtfbGFi ZWwgKGJ1ZiksIFFvdXRlcm1vc3RfcmVzdHJpY3Rpb24pKQ0KKyAgICBsYWJl bGVkX3Jlc3RyaWN0aW9uc19yZW1vdmUgKGJ1Zik7DQogICBlbHNlDQotICAg IFhTRVRDRFIgKGJ1ZmZlcl9sb2NrcywgbGlzdDEgKFhDRFIgKFhDQVIgKFhD RFIgKGJ1ZmZlcl9sb2NrcykpKSkpOw0KKyAgICBYU0VUQ0RSIChyZXN0cmlj dGlvbnMsIGxpc3QxIChYQ0RSIChYQ0FSIChYQ0RSIChyZXN0cmljdGlvbnMp KSkpKTsNCit9DQorDQorLyogVW5jb25kaXRpb25hbGx5IHJlbW92ZSBhbGwg bGFiZWxlZCByZXN0cmljdGlvbnMgaW4gY3VycmVudF9idWZmZXIuICAqLw0K K3ZvaWQNCitsYWJlbGVkX3Jlc3RyaWN0aW9uc19yZW1vdmVfaW5fY3VycmVu dF9idWZmZXIgKHZvaWQpDQorew0KKyAgbGFiZWxlZF9yZXN0cmljdGlvbnNf cmVtb3ZlIChGY3VycmVudF9idWZmZXIgKCkpOw0KIH0NCiANCiBzdGF0aWMg dm9pZA0KLXVud2luZF9yZXNldF9vdXRlcm1vc3RfbmFycm93aW5nIChMaXNw X09iamVjdCBidWYpDQordW53aW5kX3Jlc2V0X291dGVybW9zdF9yZXN0cmlj dGlvbiAoTGlzcF9PYmplY3QgYnVmKQ0KIHsNCi0gIHN0cnVjdCBMaXNwX01h cmtlciAqYmVndiA9IG5hcnJvd2luZ19sb2NrX2dldF9ib3VuZCAoYnVmLCB0 cnVlLCBmYWxzZSk7DQotICBzdHJ1Y3QgTGlzcF9NYXJrZXIgKnp2ID0gbmFy cm93aW5nX2xvY2tfZ2V0X2JvdW5kIChidWYsIGZhbHNlLCBmYWxzZSk7DQor ICBzdHJ1Y3QgTGlzcF9NYXJrZXIgKmJlZ3YNCisgICAgPSBsYWJlbGVkX3Jl c3RyaWN0aW9uc19nZXRfYm91bmQgKGJ1ZiwgdHJ1ZSwgZmFsc2UpOw0KKyAg c3RydWN0IExpc3BfTWFya2VyICp6dg0KKyAgICA9IGxhYmVsZWRfcmVzdHJp Y3Rpb25zX2dldF9ib3VuZCAoYnVmLCBmYWxzZSwgZmFsc2UpOw0KICAgaWYg KGJlZ3YgIT0gTlVMTCAmJiB6diAhPSBOVUxMKQ0KICAgICB7DQogICAgICAg U0VUX0JVRl9CRUdWX0JPVEggKFhCVUZGRVIgKGJ1ZiksIGJlZ3YtPmNoYXJw b3MsIGJlZ3YtPmJ5dGVwb3MpOw0KICAgICAgIFNFVF9CVUZfWlZfQk9USCAo WEJVRkZFUiAoYnVmKSwgenYtPmNoYXJwb3MsIHp2LT5ieXRlcG9zKTsNCiAg ICAgfQ0KICAgZWxzZQ0KLSAgICBuYXJyb3dpbmdfbG9ja3NfcmVtb3ZlIChi dWYpOw0KKyAgICBsYWJlbGVkX3Jlc3RyaWN0aW9uc19yZW1vdmUgKGJ1Zik7 DQogfQ0KIA0KLS8qIFJlc3RvcmUgdGhlIG5hcnJvd2luZyBib3VuZHMgdGhh dCB3ZXJlIHNldCBieSB0aGUgdXNlciwgYW5kIHJlc3RvcmUNCi0gICB0aGUg Ym91bmRzIG9mIHRoZSBsb2NrZWQgbmFycm93aW5nIHVwb24gcmV0dXJuLg0K Ky8qIFJlc3RvcmUgdGhlIHJlc3RyaWN0aW9uIGJvdW5kcyB0aGF0IHdlcmUg Y3VycmVudCB3aGVuIHRoZSBmaXJzdA0KKyAgIGxhYmVsZWQgcmVzdHJpY3Rp b24gd2FzIGVudGVyZWQsIGFuZCByZXN0b3JlIHRoZSBib3VuZHMgb2YgdGhl DQorICAgaW5uZXJtb3N0IGxhYmVsZWQgcmVzdHJpY3Rpb24gdXBvbiByZXR1 cm4uDQogICAgSW4gcGFydGljdWxhciwgdGhpcyBmdW5jdGlvbiBpcyBjYWxs ZWQgd2hlbiByZWRpc3BsYXkgc3RhcnRzLCBzbw0KICAgIHRoYXQgaWYgYSBM aXNwIGZ1bmN0aW9uIGV4ZWN1dGVkIGR1cmluZyByZWRpc3BsYXkgY2FsbHMg KHJlZGlzcGxheSkNCi0gICB3aGlsZSBhIGxvY2tlZCBuYXJyb3dpbmcgaXMg aW4gZWZmZWN0LCB0aGUgbG9ja2VkIG5hcnJvd2luZyB3aWxsDQotICAgbm90 IGJlIHZpc2libGUgb24gZGlzcGxheS4NCisgICB3aGlsZSBsYWJlbGVkIHJl c3RyaWN0aW9ucyBhcmUgaW4gZWZmZWN0LCB0aGVzZSByZXN0cmljdGlvbnMg d2lsbA0KKyAgIG5vdCBiZWNvbWUgdmlzaWJsZSBvbiBkaXNwbGF5Lg0KICAg IFNlZSBodHRwczovL2RlYmJ1Z3MuZ251Lm9yZy9jZ2kvYnVncmVwb3J0LmNn aT9idWc9NTcyMDcjMTQwIGFuZA0KICAgIGh0dHBzOi8vZGViYnVncy5nbnUu b3JnL2NnaS9idWdyZXBvcnQuY2dpP2J1Zz01NzIwNyMyNTQgZm9yIGV4YW1w bGUNCiAgICByZWNpcGVzIHRoYXQgZGVtb25zdHJhdGUgd2h5IHRoaXMgaXMg bmVjZXNzYXJ5LiAgKi8NCiB2b2lkDQotcmVzZXRfb3V0ZXJtb3N0X25hcnJv d2luZ3MgKHZvaWQpDQorcmVzZXRfb3V0ZXJtb3N0X3Jlc3RyaWN0aW9ucyAo dm9pZCkNCiB7DQogICBMaXNwX09iamVjdCB2YWwsIGJ1ZjsNCi0gIGZvciAo dmFsID0gbmFycm93aW5nX2xvY2tzOyBDT05TUCAodmFsKTsgdmFsID0gWENE UiAodmFsKSkNCisgIGZvciAodmFsID0gbGFiZWxlZF9yZXN0cmljdGlvbnM7 IENPTlNQICh2YWwpOyB2YWwgPSBYQ0RSICh2YWwpKQ0KICAgICB7DQogICAg ICAgYnVmID0gWENBUiAoWENBUiAodmFsKSk7DQogICAgICAgZWFzc2VydCAo QlVGRkVSUCAoYnVmKSk7DQotICAgICAgc3RydWN0IExpc3BfTWFya2VyICpi ZWd2ID0gbmFycm93aW5nX2xvY2tfZ2V0X2JvdW5kIChidWYsIHRydWUsIHRy dWUpOw0KLSAgICAgIHN0cnVjdCBMaXNwX01hcmtlciAqenYgPSBuYXJyb3dp bmdfbG9ja19nZXRfYm91bmQgKGJ1ZiwgZmFsc2UsIHRydWUpOw0KKyAgICAg IHN0cnVjdCBMaXNwX01hcmtlciAqYmVndg0KKwk9IGxhYmVsZWRfcmVzdHJp Y3Rpb25zX2dldF9ib3VuZCAoYnVmLCB0cnVlLCB0cnVlKTsNCisgICAgICBz dHJ1Y3QgTGlzcF9NYXJrZXIgKnp2DQorCT0gbGFiZWxlZF9yZXN0cmljdGlv bnNfZ2V0X2JvdW5kIChidWYsIGZhbHNlLCB0cnVlKTsNCiAgICAgICBpZiAo YmVndiAhPSBOVUxMICYmIHp2ICE9IE5VTEwpDQogCXsNCiAJICBTRVRfQlVG X0JFR1ZfQk9USCAoWEJVRkZFUiAoYnVmKSwgYmVndi0+Y2hhcnBvcywgYmVn di0+Ynl0ZXBvcyk7DQogCSAgU0VUX0JVRl9aVl9CT1RIIChYQlVGRkVSIChi dWYpLCB6di0+Y2hhcnBvcywgenYtPmJ5dGVwb3MpOw0KLQkgIHJlY29yZF91 bndpbmRfcHJvdGVjdCAodW53aW5kX3Jlc2V0X291dGVybW9zdF9uYXJyb3dp bmcsIGJ1Zik7DQorCSAgcmVjb3JkX3Vud2luZF9wcm90ZWN0ICh1bndpbmRf cmVzZXRfb3V0ZXJtb3N0X3Jlc3RyaWN0aW9uLCBidWYpOw0KIAl9DQogICAg ICAgZWxzZQ0KLQluYXJyb3dpbmdfbG9ja3NfcmVtb3ZlIChidWYpOw0KKwls YWJlbGVkX3Jlc3RyaWN0aW9uc19yZW1vdmUgKGJ1Zik7DQogICAgIH0NCiB9 DQogDQotLyogSGVscGVyIGZ1bmN0aW9ucyB0byBzYXZlIGFuZCByZXN0b3Jl IHRoZSBuYXJyb3dpbmcgbG9ja3Mgb2YgdGhlDQotICAgY3VycmVudCBidWZm ZXIgaW4gRnNhdmVfcmVzdHJpY3Rpb24uICAqLw0KKy8qIEhlbHBlciBmdW5j dGlvbnMgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgbGFiZWxlZCByZXN0cmlj dGlvbnMgb2YNCisgICB0aGUgY3VycmVudCBidWZmZXIgaW4gRnNhdmVfcmVz dHJpY3Rpb24uICAqLw0KIHN0YXRpYyBMaXNwX09iamVjdA0KLW5hcnJvd2lu Z19sb2Nrc19zYXZlICh2b2lkKQ0KK2xhYmVsZWRfcmVzdHJpY3Rpb25zX3Nh dmUgKHZvaWQpDQogew0KICAgTGlzcF9PYmplY3QgYnVmID0gRmN1cnJlbnRf YnVmZmVyICgpOw0KLSAgTGlzcF9PYmplY3QgbG9ja3MgPSBhc3NxX25vX3F1 aXQgKGJ1ZiwgbmFycm93aW5nX2xvY2tzKTsNCi0gIGlmICghTklMUCAobG9j a3MpKQ0KLSAgICBsb2NrcyA9IFhDQVIgKFhDRFIgKGxvY2tzKSk7DQotICBy ZXR1cm4gRmNvbnMgKGJ1ZiwgRmNvcHlfc2VxdWVuY2UgKGxvY2tzKSk7DQor ICBMaXNwX09iamVjdCByZXN0cmljdGlvbnMgPSBhc3NxX25vX3F1aXQgKGJ1 ZiwgbGFiZWxlZF9yZXN0cmljdGlvbnMpOw0KKyAgaWYgKCEgTklMUCAocmVz dHJpY3Rpb25zKSkNCisgICAgcmVzdHJpY3Rpb25zID0gWENBUiAoWENEUiAo cmVzdHJpY3Rpb25zKSk7DQorICByZXR1cm4gRmNvbnMgKGJ1ZiwgRmNvcHlf c2VxdWVuY2UgKHJlc3RyaWN0aW9ucykpOw0KIH0NCiANCiBzdGF0aWMgdm9p ZA0KLW5hcnJvd2luZ19sb2Nrc19yZXN0b3JlIChMaXNwX09iamVjdCBidWZf YW5kX3NhdmVkX2xvY2tzKQ0KK2xhYmVsZWRfcmVzdHJpY3Rpb25zX3Jlc3Rv cmUgKExpc3BfT2JqZWN0IGJ1Zl9hbmRfcmVzdHJpY3Rpb25zKQ0KIHsNCi0g IExpc3BfT2JqZWN0IGJ1ZiA9IFhDQVIgKGJ1Zl9hbmRfc2F2ZWRfbG9ja3Mp Ow0KLSAgTGlzcF9PYmplY3Qgc2F2ZWRfbG9ja3MgPSBYQ0RSIChidWZfYW5k X3NhdmVkX2xvY2tzKTsNCi0gIG5hcnJvd2luZ19sb2Nrc19yZW1vdmUgKGJ1 Zik7DQotICBpZiAoIU5JTFAgKHNhdmVkX2xvY2tzKSkNCi0gICAgbmFycm93 aW5nX2xvY2tzX2FkZCAoYnVmLCBzYXZlZF9sb2Nrcyk7DQorICBMaXNwX09i amVjdCBidWYgPSBYQ0FSIChidWZfYW5kX3Jlc3RyaWN0aW9ucyk7DQorICBM aXNwX09iamVjdCByZXN0cmljdGlvbnMgPSBYQ0RSIChidWZfYW5kX3Jlc3Ry aWN0aW9ucyk7DQorICBsYWJlbGVkX3Jlc3RyaWN0aW9uc19yZW1vdmUgKGJ1 Zik7DQorICBpZiAoISBOSUxQIChyZXN0cmljdGlvbnMpKQ0KKyAgICBsYWJl bGVkX3Jlc3RyaWN0aW9uc19hZGQgKGJ1ZiwgcmVzdHJpY3Rpb25zKTsNCiB9 DQogDQogc3RhdGljIHZvaWQNCi11bndpbmRfbmFycm93X3RvX3JlZ2lvbl9s b2NrZWQgKExpc3BfT2JqZWN0IHRhZykNCit1bndpbmRfbGFiZWxlZF9uYXJy b3dfdG9fcmVnaW9uIChMaXNwX09iamVjdCBsYWJlbCkNCiB7DQotICBGaW50 ZXJuYWxfX3VubG9ja19uYXJyb3dpbmcgKHRhZyk7DQorICBGaW50ZXJuYWxf X3VubGFiZWxfcmVzdHJpY3Rpb24gKGxhYmVsKTsNCiAgIEZ3aWRlbiAoKTsN CiB9DQogDQotLyogTmFycm93IGN1cnJlbnRfYnVmZmVyIHRvIEJFR1YtWlYg d2l0aCBhIG5hcnJvd2luZyBsb2NrZWQgd2l0aCBUQUcuICAqLw0KKy8qIE5h cnJvdyBjdXJyZW50X2J1ZmZlciB0byBCRUdWLVpWIHdpdGggYSByZXN0cmlj dGlvbiBsYWJlbGVkIHdpdGgNCisgICBMQUJFTC4gICovDQogdm9pZA0KLW5h cnJvd190b19yZWdpb25fbG9ja2VkIChMaXNwX09iamVjdCBiZWd2LCBMaXNw X09iamVjdCB6diwgTGlzcF9PYmplY3QgdGFnKQ0KK2xhYmVsZWRfbmFycm93 X3RvX3JlZ2lvbiAoTGlzcF9PYmplY3QgYmVndiwgTGlzcF9PYmplY3QgenYs DQorCQkJICBMaXNwX09iamVjdCBsYWJlbCkNCiB7DQogICBGbmFycm93X3Rv X3JlZ2lvbiAoYmVndiwgenYpOw0KLSAgRmludGVybmFsX19sb2NrX25hcnJv d2luZyAodGFnKTsNCisgIEZpbnRlcm5hbF9fbGFiZWxfcmVzdHJpY3Rpb24g KGxhYmVsKTsNCiAgIHJlY29yZF91bndpbmRfcHJvdGVjdCAocmVzdG9yZV9w b2ludF91bndpbmQsIEZwb2ludF9tYXJrZXIgKCkpOw0KLSAgcmVjb3JkX3Vu d2luZF9wcm90ZWN0ICh1bndpbmRfbmFycm93X3RvX3JlZ2lvbl9sb2NrZWQs IHRhZyk7DQorICByZWNvcmRfdW53aW5kX3Byb3RlY3QgKHVud2luZF9sYWJl bGVkX25hcnJvd190b19yZWdpb24sIGxhYmVsKTsNCiB9DQogDQogREVGVU4g KCJ3aWRlbiIsIEZ3aWRlbiwgU3dpZGVuLCAwLCAwLCAiIiwNCkBAIC0yODQy LDExICsyODY0LDExIEBAIFRvIGdhaW4gYWNjZXNzIHRvIG90aGVyIHBvcnRp b25zIG9mIHRoZSBidWZmZXIsIHVzZQ0KIGB3aXRob3V0LXJlc3RyaWN0aW9u JyB3aXRoIHRoZSBzYW1lIGxhYmVsLiAgKi8pDQogICAodm9pZCkNCiB7DQot ICBGc2V0IChRb3V0ZXJtb3N0X25hcnJvd2luZywgUW5pbCk7DQorICBGc2V0 IChRb3V0ZXJtb3N0X3Jlc3RyaWN0aW9uLCBRbmlsKTsNCiAgIExpc3BfT2Jq ZWN0IGJ1ZiA9IEZjdXJyZW50X2J1ZmZlciAoKTsNCi0gIExpc3BfT2JqZWN0 IHRhZyA9IG5hcnJvd2luZ19sb2NrX3BlZWtfdGFnIChidWYpOw0KKyAgTGlz cF9PYmplY3QgbGFiZWwgPSBsYWJlbGVkX3Jlc3RyaWN0aW9uc19wZWVrX2xh YmVsIChidWYpOw0KIA0KLSAgaWYgKE5JTFAgKHRhZykpDQorICBpZiAoTklM UCAobGFiZWwpKQ0KICAgICB7DQogICAgICAgaWYgKEJFRyAhPSBCRUdWIHx8 IFogIT0gWlYpDQogCWN1cnJlbnRfYnVmZmVyLT5jbGlwX2NoYW5nZWQgPSAx Ow0KQEAgLTI4NTYsMTkgKzI4NzgsMjEgQEAgVG8gZ2FpbiBhY2Nlc3MgdG8g b3RoZXIgcG9ydGlvbnMgb2YgdGhlIGJ1ZmZlciwgdXNlDQogICAgIH0NCiAg IGVsc2UNCiAgICAgew0KLSAgICAgIHN0cnVjdCBMaXNwX01hcmtlciAqYmVn diA9IG5hcnJvd2luZ19sb2NrX2dldF9ib3VuZCAoYnVmLCB0cnVlLCBmYWxz ZSk7DQotICAgICAgc3RydWN0IExpc3BfTWFya2VyICp6diA9IG5hcnJvd2lu Z19sb2NrX2dldF9ib3VuZCAoYnVmLCBmYWxzZSwgZmFsc2UpOw0KKyAgICAg IHN0cnVjdCBMaXNwX01hcmtlciAqYmVndg0KKwk9IGxhYmVsZWRfcmVzdHJp Y3Rpb25zX2dldF9ib3VuZCAoYnVmLCB0cnVlLCBmYWxzZSk7DQorICAgICAg c3RydWN0IExpc3BfTWFya2VyICp6dg0KKwk9IGxhYmVsZWRfcmVzdHJpY3Rp b25zX2dldF9ib3VuZCAoYnVmLCBmYWxzZSwgZmFsc2UpOw0KICAgICAgIGVh c3NlcnQgKGJlZ3YgIT0gTlVMTCAmJiB6diAhPSBOVUxMKTsNCiAgICAgICBp ZiAoYmVndi0+Y2hhcnBvcyAhPSBCRUdWIHx8IHp2LT5jaGFycG9zICE9IFpW KQ0KIAljdXJyZW50X2J1ZmZlci0+Y2xpcF9jaGFuZ2VkID0gMTsNCiAgICAg ICBTRVRfQlVGX0JFR1ZfQk9USCAoY3VycmVudF9idWZmZXIsIGJlZ3YtPmNo YXJwb3MsIGJlZ3YtPmJ5dGVwb3MpOw0KICAgICAgIFNFVF9CVUZfWlZfQk9U SCAoY3VycmVudF9idWZmZXIsIHp2LT5jaGFycG9zLCB6di0+Ynl0ZXBvcyk7 DQotICAgICAgLyogSWYgdGhlIG9ubHkgcmVtYWluaW5nIGJvdW5kcyBpbiBu YXJyb3dpbmdfbG9ja3MgZm9yDQorICAgICAgLyogSWYgdGhlIG9ubHkgcmVt YWluaW5nIGJvdW5kcyBpbiBsYWJlbGVkX3Jlc3RyaWN0aW9ucyBmb3INCiAJ IGN1cnJlbnRfYnVmZmVyIGFyZSB0aGUgYm91bmRzIHRoYXQgd2VyZSBzZXQg YnkgdGhlIHVzZXIsIG5vDQotCSBsb2NrZWQgbmFycm93aW5nIGlzIGluIGVm ZmVjdCBpbiBjdXJyZW50X2J1ZmZlciBhbnltb3JlOg0KLQkgcmVtb3ZlIGl0 IGZyb20gdGhlIG5hcnJvd2luZ19sb2NrcyBhbGlzdC4gICovDQotICAgICAg aWYgKEVRICh0YWcsIFFvdXRlcm1vc3RfbmFycm93aW5nKSkNCi0JbmFycm93 aW5nX2xvY2tfcG9wIChidWYpOw0KKwkgbGFiZWxlZCByZXN0cmljdGlvbiBp cyBpbiBlZmZlY3QgaW4gY3VycmVudF9idWZmZXIgYW55bW9yZToNCisJIHJl bW92ZSBpdCBmcm9tIHRoZSBsYWJlbGVkX3Jlc3RyaWN0aW9ucyBhbGlzdC4g ICovDQorICAgICAgaWYgKEVRIChsYWJlbCwgUW91dGVybW9zdF9yZXN0cmlj dGlvbikpDQorCWxhYmVsZWRfcmVzdHJpY3Rpb25zX3BvcCAoYnVmKTsNCiAg ICAgfQ0KICAgLyogQ2hhbmdpbmcgdGhlIGJ1ZmZlciBib3VuZHMgaW52YWxp ZGF0ZXMgYW55IHJlY29yZGVkIGN1cnJlbnQgY29sdW1uLiAgKi8NCiAgIGlu dmFsaWRhdGVfY3VycmVudF9jb2x1bW4gKCk7DQpAQCAtMjkwNSwxMyArMjky OSwxNSBAQCBhcmd1bWVudC4gIFRvIGdhaW4gYWNjZXNzIHRvIG90aGVyIHBv cnRpb25zIG9mIHRoZSBidWZmZXIsIHVzZQ0KICAgICBhcmdzX291dF9vZl9y YW5nZSAoc3RhcnQsIGVuZCk7DQogDQogICBMaXNwX09iamVjdCBidWYgPSBG Y3VycmVudF9idWZmZXIgKCk7DQotICBpZiAoISBOSUxQIChuYXJyb3dpbmdf bG9ja19wZWVrX3RhZyAoYnVmKSkpDQorICBpZiAoISBOSUxQIChsYWJlbGVk X3Jlc3RyaWN0aW9uc19wZWVrX2xhYmVsIChidWYpKSkNCiAgICAgew0KLSAg ICAgIHN0cnVjdCBMaXNwX01hcmtlciAqYmVndiA9IG5hcnJvd2luZ19sb2Nr X2dldF9ib3VuZCAoYnVmLCB0cnVlLCBmYWxzZSk7DQotICAgICAgc3RydWN0 IExpc3BfTWFya2VyICp6diA9IG5hcnJvd2luZ19sb2NrX2dldF9ib3VuZCAo YnVmLCBmYWxzZSwgZmFsc2UpOw0KKyAgICAgIC8qIExpbWl0IHRoZSBzdGFy dCBhbmQgZW5kIHBvc2l0aW9ucyB0byB0aG9zZSBvZiB0aGUgaW5uZXJtb3N0 DQorCSBsYWJlbGVkIHJlc3RyaWN0aW9uLiAgKi8NCisgICAgICBzdHJ1Y3Qg TGlzcF9NYXJrZXIgKmJlZ3YNCisJPSBsYWJlbGVkX3Jlc3RyaWN0aW9uc19n ZXRfYm91bmQgKGJ1ZiwgdHJ1ZSwgZmFsc2UpOw0KKyAgICAgIHN0cnVjdCBM aXNwX01hcmtlciAqenYNCisJPSBsYWJlbGVkX3Jlc3RyaWN0aW9uc19nZXRf Ym91bmQgKGJ1ZiwgZmFsc2UsIGZhbHNlKTsNCiAgICAgICBlYXNzZXJ0IChi ZWd2ICE9IE5VTEwgJiYgenYgIT0gTlVMTCk7DQotICAgICAgLyogTGltaXQg dGhlIHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zIHRvIHRob3NlIG9mIHRoZSBs b2NrZWQNCi0JIG5hcnJvd2luZy4gICovDQogICAgICAgaWYgKHMgPCBiZWd2 LT5jaGFycG9zKSBzID0gYmVndi0+Y2hhcnBvczsNCiAgICAgICBpZiAocyA+ IHp2LT5jaGFycG9zKSBzID0genYtPmNoYXJwb3M7DQogICAgICAgaWYgKGUg PCBiZWd2LT5jaGFycG9zKSBlID0gYmVndi0+Y2hhcnBvczsNCkBAIC0yOTE5 LDExICsyOTQ1LDExIEBAIGFyZ3VtZW50LiAgVG8gZ2FpbiBhY2Nlc3MgdG8g b3RoZXIgcG9ydGlvbnMgb2YgdGhlIGJ1ZmZlciwgdXNlDQogICAgIH0NCiAN CiAgIC8qIFJlY29yZCB0aGUgYWNjZXNzaWJsZSByYW5nZSBvZiB0aGUgYnVm ZmVyIHdoZW4gbmFycm93LXRvLXJlZ2lvbg0KLSAgICAgaXMgY2FsbGVkLCB0 aGF0IGlzLCBiZWZvcmUgYXBwbHlpbmcgdGhlIG5hcnJvd2luZy4gIEl0IGlz IHVzZWQNCi0gICAgIG9ubHkgYnkgaW50ZXJuYWwtLWxvY2stbmFycm93aW5n LiAgKi8NCi0gIEZzZXQgKFFvdXRlcm1vc3RfbmFycm93aW5nLCBsaXN0MyAo UW91dGVybW9zdF9uYXJyb3dpbmcsDQotCQkJCSAgICAgRnBvaW50X21pbl9t YXJrZXIgKCksDQotCQkJCSAgICAgRnBvaW50X21heF9tYXJrZXIgKCkpKTsN CisgICAgIGlzIGNhbGxlZCwgdGhhdCBpcywgYmVmb3JlIGFwcGx5aW5nIHRo ZSBuYXJyb3dpbmcuICBUaGF0DQorICAgICBpbmZvcm1hdGlvbiBpcyB1c2Vk IG9ubHkgYnkgaW50ZXJuYWwtLWxhYmVsLXJlc3RyaWN0aW9uLiAgKi8NCisg IEZzZXQgKFFvdXRlcm1vc3RfcmVzdHJpY3Rpb24sIGxpc3QzIChRb3V0ZXJt b3N0X3Jlc3RyaWN0aW9uLA0KKwkJCQkgICAgICAgRnBvaW50X21pbl9tYXJr ZXIgKCksDQorCQkJCSAgICAgICBGcG9pbnRfbWF4X21hcmtlciAoKSkpOw0K IA0KICAgaWYgKEJFR1YgIT0gcyB8fCBaViAhPSBlKQ0KICAgICBjdXJyZW50 X2J1ZmZlci0+Y2xpcF9jaGFuZ2VkID0gMTsNCkBAIC0yOTQwLDM4ICsyOTY2 LDM4IEBAIGFyZ3VtZW50LiAgVG8gZ2FpbiBhY2Nlc3MgdG8gb3RoZXIgcG9y dGlvbnMgb2YgdGhlIGJ1ZmZlciwgdXNlDQogICByZXR1cm4gUW5pbDsNCiB9 DQogDQotREVGVU4gKCJpbnRlcm5hbC0tbG9jay1uYXJyb3dpbmciLCBGaW50 ZXJuYWxfX2xvY2tfbmFycm93aW5nLA0KLSAgICAgICBTaW50ZXJuYWxfX2xv Y2tfbmFycm93aW5nLCAxLCAxLCAwLA0KLSAgICAgICBkb2M6IC8qIExvY2sg dGhlIGN1cnJlbnQgbmFycm93aW5nIHdpdGggTEFCRUwuDQorREVGVU4gKCJp bnRlcm5hbC0tbGFiZWwtcmVzdHJpY3Rpb24iLCBGaW50ZXJuYWxfX2xhYmVs X3Jlc3RyaWN0aW9uLA0KKyAgICAgICBTaW50ZXJuYWxfX2xhYmVsX3Jlc3Ry aWN0aW9uLCAxLCAxLCAwLA0KKyAgICAgICBkb2M6IC8qIExhYmVsIHRoZSBj dXJyZW50IHJlc3RyaWN0aW9uIHdpdGggTEFCRUwuDQogDQogVGhpcyBpcyBh biBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGJ5IGB3aXRoLXJlc3RyaWN0aW9u Jy4gICovKQ0KLSAgKExpc3BfT2JqZWN0IHRhZykNCisgIChMaXNwX09iamVj dCBsYWJlbCkNCiB7DQogICBMaXNwX09iamVjdCBidWYgPSBGY3VycmVudF9i dWZmZXIgKCk7DQotICBMaXNwX09iamVjdCBvdXRlcm1vc3RfbmFycm93aW5n DQotICAgID0gYnVmZmVyX2xvY2FsX3ZhbHVlIChRb3V0ZXJtb3N0X25hcnJv d2luZywgYnVmKTsNCi0gIC8qIElmIGludGVybmFsLS1sb2NrLW5hcnJvd2lu ZyBpcyBldmVyIGNhbGxlZCB3aXRob3V0IGJlaW5nIHByZWNlZGVkDQotICAg ICBieSBuYXJyb3ctdG8tcmVnaW9uLCBkbyBub3RoaW5nLiAgKi8NCi0gIGlm IChOSUxQIChvdXRlcm1vc3RfbmFycm93aW5nKSkNCisgIExpc3BfT2JqZWN0 IG91dGVybW9zdF9yZXN0cmljdGlvbg0KKyAgICA9IGJ1ZmZlcl9sb2NhbF92 YWx1ZSAoUW91dGVybW9zdF9yZXN0cmljdGlvbiwgYnVmKTsNCisgIC8qIElm IGludGVybmFsLS1sYWJlbC1yZXN0cmljdGlvbiBpcyBldmVyIGNhbGxlZCB3 aXRob3V0IGJlaW5nDQorICAgICBwcmVjZWRlZCBieSBuYXJyb3ctdG8tcmVn aW9uLCBkbyBub3RoaW5nLiAgKi8NCisgIGlmIChOSUxQIChvdXRlcm1vc3Rf cmVzdHJpY3Rpb24pKQ0KICAgICByZXR1cm4gUW5pbDsNCi0gIGlmIChOSUxQ IChuYXJyb3dpbmdfbG9ja19wZWVrX3RhZyAoYnVmKSkpDQotICAgIG5hcnJv d2luZ19sb2NrX3B1c2ggKGJ1Ziwgb3V0ZXJtb3N0X25hcnJvd2luZyk7DQot ICBuYXJyb3dpbmdfbG9ja19wdXNoIChidWYsIGxpc3QzICh0YWcsDQotCQkJ CSAgIEZwb2ludF9taW5fbWFya2VyICgpLA0KLQkJCQkgICBGcG9pbnRfbWF4 X21hcmtlciAoKSkpOw0KKyAgaWYgKE5JTFAgKGxhYmVsZWRfcmVzdHJpY3Rp b25zX3BlZWtfbGFiZWwgKGJ1ZikpKQ0KKyAgICBsYWJlbGVkX3Jlc3RyaWN0 aW9uc19wdXNoIChidWYsIG91dGVybW9zdF9yZXN0cmljdGlvbik7DQorICBs YWJlbGVkX3Jlc3RyaWN0aW9uc19wdXNoIChidWYsIGxpc3QzIChsYWJlbCwN CisJCQkJCSBGcG9pbnRfbWluX21hcmtlciAoKSwNCisJCQkJCSBGcG9pbnRf bWF4X21hcmtlciAoKSkpOw0KICAgcmV0dXJuIFFuaWw7DQogfQ0KIA0KLURF RlVOICgiaW50ZXJuYWwtLXVubG9jay1uYXJyb3dpbmciLCBGaW50ZXJuYWxf X3VubG9ja19uYXJyb3dpbmcsDQotICAgICAgIFNpbnRlcm5hbF9fdW5sb2Nr X25hcnJvd2luZywgMSwgMSwgMCwNCi0gICAgICAgZG9jOiAvKiBVbmxvY2sg YSBuYXJyb3dpbmcgbG9ja2VkIHdpdGggTEFCRUwuDQorREVGVU4gKCJpbnRl cm5hbC0tdW5sYWJlbC1yZXN0cmljdGlvbiIsIEZpbnRlcm5hbF9fdW5sYWJl bF9yZXN0cmljdGlvbiwNCisgICAgICAgU2ludGVybmFsX191bmxhYmVsX3Jl c3RyaWN0aW9uLCAxLCAxLCAwLA0KKyAgICAgICBkb2M6IC8qIElmIHRoZSBj dXJyZW50IHJlc3RyaWN0aW9uIGlzIGxhYmVsZWQgd2l0aCBMQUJFTCwgcmVt b3ZlIGl0cyBsYWJlbC4NCiANCiBUaGlzIGlzIGFuIGludGVybmFsIGZ1bmN0 aW9uIHVzZWQgYnkgYHdpdGhvdXQtcmVzdHJpY3Rpb24nLiAgKi8pDQotICAo TGlzcF9PYmplY3QgdGFnKQ0KKyAgKExpc3BfT2JqZWN0IGxhYmVsKQ0KIHsN CiAgIExpc3BfT2JqZWN0IGJ1ZiA9IEZjdXJyZW50X2J1ZmZlciAoKTsNCi0g IGlmIChFUSAobmFycm93aW5nX2xvY2tfcGVla190YWcgKGJ1ZiksIHRhZykp DQotICAgIG5hcnJvd2luZ19sb2NrX3BvcCAoYnVmKTsNCisgIGlmIChFUSAo bGFiZWxlZF9yZXN0cmljdGlvbnNfcGVla19sYWJlbCAoYnVmKSwgbGFiZWwp KQ0KKyAgICBsYWJlbGVkX3Jlc3RyaWN0aW9uc19wb3AgKGJ1Zik7DQogICBy ZXR1cm4gUW5pbDsNCiB9DQogDQpAQCAtMzA3MSwxNSArMzA5NywxNSBAQCBz YXZlX3Jlc3RyaWN0aW9uX3Jlc3RvcmVfMSAoTGlzcF9PYmplY3QgZGF0YSkN CiBMaXNwX09iamVjdA0KIHNhdmVfcmVzdHJpY3Rpb25fc2F2ZSAodm9pZCkN CiB7DQotICBMaXNwX09iamVjdCByZXN0ciA9IHNhdmVfcmVzdHJpY3Rpb25f c2F2ZV8xICgpOw0KLSAgTGlzcF9PYmplY3QgbG9ja3MgPSBuYXJyb3dpbmdf bG9ja3Nfc2F2ZSAoKTsNCi0gIHJldHVybiBGY29ucyAocmVzdHIsIGxvY2tz KTsNCisgIExpc3BfT2JqZWN0IHJlc3RyaWN0aW9uID0gc2F2ZV9yZXN0cmlj dGlvbl9zYXZlXzEgKCk7DQorICBMaXNwX09iamVjdCBsYWJlbGVkX3Jlc3Ry aWN0aW9ucyA9IGxhYmVsZWRfcmVzdHJpY3Rpb25zX3NhdmUgKCk7DQorICBy ZXR1cm4gRmNvbnMgKHJlc3RyaWN0aW9uLCBsYWJlbGVkX3Jlc3RyaWN0aW9u cyk7DQogfQ0KIA0KIHZvaWQNCiBzYXZlX3Jlc3RyaWN0aW9uX3Jlc3RvcmUg KExpc3BfT2JqZWN0IGRhdGEpDQogew0KLSAgbmFycm93aW5nX2xvY2tzX3Jl c3RvcmUgKFhDRFIgKGRhdGEpKTsNCisgIGxhYmVsZWRfcmVzdHJpY3Rpb25z X3Jlc3RvcmUgKFhDRFIgKGRhdGEpKTsNCiAgIHNhdmVfcmVzdHJpY3Rpb25f cmVzdG9yZV8xIChYQ0FSIChkYXRhKSk7DQogfQ0KIA0KQEAgLTQ3NDgsNyAr NDc3NCw3IEBAIHN5bXNfb2ZfZWRpdGZucyAodm9pZCkNCiAgIERFRlNZTSAo UXdhbGwsICJ3YWxsIik7DQogICBERUZTWU0gKFFwcm9wZXJ0aXplLCAicHJv cGVydGl6ZSIpOw0KIA0KLSAgc3RhdGljcHJvICgmbmFycm93aW5nX2xvY2tz KTsNCisgIHN0YXRpY3BybyAoJmxhYmVsZWRfcmVzdHJpY3Rpb25zKTsNCiAN CiAgIERFRlZBUl9MSVNQICgiaW5oaWJpdC1maWVsZC10ZXh0LW1vdGlvbiIs IFZpbmhpYml0X2ZpZWxkX3RleHRfbW90aW9uLA0KIAkgICAgICAgZG9jOiAv KiBOb24tbmlsIG1lYW5zIHRleHQgbW90aW9uIGNvbW1hbmRzIGRvbid0IG5v dGljZSBmaWVsZHMuICAqLyk7DQpAQCAtNDgwOSwxMiArNDgzNSwxMiBAQCBU aGlzIHZhcmlhYmxlIGlzIGV4cGVyaW1lbnRhbDsgZW1haWwgMzIyNTJAZGVi YnVncy5nbnUub3JnIGlmIHlvdSBuZWVkDQogaXQgdG8gYmUgbm9uLW5pbC4g ICovKTsNCiAgIGJpbmFyeV9hc191bnNpZ25lZCA9IGZhbHNlOw0KIA0KLSAg REVGVkFSX0xJU1AgKCJvdXRlcm1vc3QtbmFycm93aW5nIiwgVm91dGVybW9z dF9uYXJyb3dpbmcsDQorICBERUZWQVJfTElTUCAoIm91dGVybW9zdC1yZXN0 cmljdGlvbiIsIFZvdXRlcm1vc3RfcmVzdHJpY3Rpb24sDQogCSAgICAgICBk b2M6IC8qIE91dGVybW9zdCBuYXJyb3dpbmcgYm91bmRzLCBpZiBhbnkuICBJ bnRlcm5hbCB1c2Ugb25seS4gICovKTsNCi0gIFZvdXRlcm1vc3RfbmFycm93 aW5nID0gUW5pbDsNCi0gIEZtYWtlX3ZhcmlhYmxlX2J1ZmZlcl9sb2NhbCAo UW91dGVybW9zdF9uYXJyb3dpbmcpOw0KLSAgREVGU1lNIChRb3V0ZXJtb3N0 X25hcnJvd2luZywgIm91dGVybW9zdC1uYXJyb3dpbmciKTsNCi0gIEZ1bmlu dGVybiAoUW91dGVybW9zdF9uYXJyb3dpbmcsIFFuaWwpOw0KKyAgVm91dGVy bW9zdF9yZXN0cmljdGlvbiA9IFFuaWw7DQorICBGbWFrZV92YXJpYWJsZV9i dWZmZXJfbG9jYWwgKFFvdXRlcm1vc3RfcmVzdHJpY3Rpb24pOw0KKyAgREVG U1lNIChRb3V0ZXJtb3N0X3Jlc3RyaWN0aW9uLCAib3V0ZXJtb3N0LXJlc3Ry aWN0aW9uIik7DQorICBGdW5pbnRlcm4gKFFvdXRlcm1vc3RfcmVzdHJpY3Rp b24sIFFuaWwpOw0KIA0KICAgZGVmc3ViciAoJlNwcm9wZXJ0aXplKTsNCiAg IGRlZnN1YnIgKCZTY2hhcl9lcXVhbCk7DQpAQCAtNDkwNyw4ICs0OTMzLDgg QEAgaXQgdG8gYmUgbm9uLW5pbC4gICovKTsNCiAgIGRlZnN1YnIgKCZTZGVs ZXRlX2FuZF9leHRyYWN0X3JlZ2lvbik7DQogICBkZWZzdWJyICgmU3dpZGVu KTsNCiAgIGRlZnN1YnIgKCZTbmFycm93X3RvX3JlZ2lvbik7DQotICBkZWZz dWJyICgmU2ludGVybmFsX19sb2NrX25hcnJvd2luZyk7DQotICBkZWZzdWJy ICgmU2ludGVybmFsX191bmxvY2tfbmFycm93aW5nKTsNCisgIGRlZnN1YnIg KCZTaW50ZXJuYWxfX2xhYmVsX3Jlc3RyaWN0aW9uKTsNCisgIGRlZnN1YnIg KCZTaW50ZXJuYWxfX3VubGFiZWxfcmVzdHJpY3Rpb24pOw0KICAgZGVmc3Vi ciAoJlNzYXZlX3Jlc3RyaWN0aW9uKTsNCiAgIGRlZnN1YnIgKCZTdHJhbnNw b3NlX3JlZ2lvbnMpOw0KIH0NCmRpZmYgLS1naXQgYS9zcmMvZmlsZWlvLmMg Yi9zcmMvZmlsZWlvLmMNCmluZGV4IGYwMGMzODlhNTIwLi5iNTBiM2M2Yjkz NSAxMDA2NDQNCi0tLSBhL3NyYy9maWxlaW8uYw0KKysrIGIvc3JjL2ZpbGVp by5jDQpAQCAtNTI2OSw2ICs1MjY5LDcgQEAgd3JpdGVfcmVnaW9uIChMaXNw X09iamVjdCBzdGFydCwgTGlzcF9PYmplY3QgZW5kLCBMaXNwX09iamVjdCBm aWxlbmFtZSwNCiAgICAgfQ0KIA0KICAgcmVjb3JkX3Vud2luZF9wcm90ZWN0 IChzYXZlX3Jlc3RyaWN0aW9uX3Jlc3RvcmUsIHNhdmVfcmVzdHJpY3Rpb25f c2F2ZSAoKSk7DQorICBsYWJlbGVkX3Jlc3RyaWN0aW9uc19yZW1vdmVfaW5f Y3VycmVudF9idWZmZXIgKCk7DQogDQogICAvKiBTcGVjaWFsIGtsdWRnZSB0 byBzaW1wbGlmeSBhdXRvLXNhdmluZy4gICovDQogICBpZiAoTklMUCAoc3Rh cnQpKQ0KZGlmZiAtLWdpdCBhL3NyYy9pbmRlbnQuYyBiL3NyYy9pbmRlbnQu Yw0KaW5kZXggMDhkMmJmNWVhMjguLmFlZjM5NGRhYjg4IDEwMDY0NA0KLS0t IGEvc3JjL2luZGVudC5jDQorKysgYi9zcmMvaW5kZW50LmMNCkBAIC0yMDY1 LDYgKzIwNjUsNyBAQCBsaW5lX251bWJlcl9kaXNwbGF5X3dpZHRoIChzdHJ1 Y3Qgd2luZG93ICp3LCBpbnQgKndpZHRoLCBpbnQgKnBpeGVsX3dpZHRoKQ0K IAl7DQogCSAgcmVjb3JkX3Vud2luZF9wcm90ZWN0IChzYXZlX3Jlc3RyaWN0 aW9uX3Jlc3RvcmUsDQogCQkJCSBzYXZlX3Jlc3RyaWN0aW9uX3NhdmUgKCkp Ow0KKwkgIGxhYmVsZWRfcmVzdHJpY3Rpb25zX3JlbW92ZV9pbl9jdXJyZW50 X2J1ZmZlciAoKTsNCiAJICBGd2lkZW4gKCk7DQogCSAgc2F2ZWRfcmVzdHJp Y3Rpb24gPSB0cnVlOw0KIAl9DQpkaWZmIC0tZ2l0IGEvc3JjL2tleWJvYXJk LmMgYi9zcmMva2V5Ym9hcmQuYw0KaW5kZXggZjdhYTQ5NmJiODEuLmIxY2Nm NGFjZGU0IDEwMDY0NA0KLS0tIGEvc3JjL2tleWJvYXJkLmMNCisrKyBiL3Ny Yy9rZXlib2FyZC5jDQpAQCAtMzE4LDYgKzMxOCw4IEBAIHN0YXRpYyBMaXNw X09iamVjdCBjb21tYW5kX2xvb3AgKHZvaWQpOw0KIHN0YXRpYyB2b2lkIGVj aG9fbm93ICh2b2lkKTsNCiBzdGF0aWMgcHRyZGlmZl90IGVjaG9fbGVuZ3Ro ICh2b2lkKTsNCiANCitzdGF0aWMgdm9pZCBzYWZlX3J1bl9ob29rc19tYXli ZV9uYXJyb3dlZCAoTGlzcF9PYmplY3QsIHN0cnVjdCB3aW5kb3cgKik7DQor DQogLyogSW5jcmVtZW50ZWQgd2hlbmV2ZXIgYSB0aW1lciBpcyBydW4uICAq Lw0KIHVuc2lnbmVkIHRpbWVyc19ydW47DQogDQpAQCAtMTkwOSw3ICsxOTEx LDcgQEAgc2FmZV9ydW5faG9va3MgKExpc3BfT2JqZWN0IGhvb2spDQogICB1 bmJpbmRfdG8gKGNvdW50LCBRbmlsKTsNCiB9DQogDQotdm9pZA0KK3N0YXRp YyB2b2lkDQogc2FmZV9ydW5faG9va3NfbWF5YmVfbmFycm93ZWQgKExpc3Bf T2JqZWN0IGhvb2ssIHN0cnVjdCB3aW5kb3cgKncpDQogew0KICAgc3BlY3Bk bF9yZWYgY291bnQgPSBTUEVDUERMX0lOREVYICgpOw0KQEAgLTE5MTksMTEg KzE5MjEsMTEgQEAgc2FmZV9ydW5faG9va3NfbWF5YmVfbmFycm93ZWQgKExp c3BfT2JqZWN0IGhvb2ssIHN0cnVjdCB3aW5kb3cgKncpDQogICBpZiAoY3Vy cmVudF9idWZmZXItPmxvbmdfbGluZV9vcHRpbWl6YXRpb25zX3ANCiAgICAg ICAmJiBsb25nX2xpbmVfb3B0aW1pemF0aW9uc19yZWdpb25fc2l6ZSA+IDAp DQogICAgIHsNCi0gICAgICBwdHJkaWZmX3QgYmVndiA9IGdldF9sb2NrZWRf bmFycm93aW5nX2JlZ3YgKFBUKTsNCi0gICAgICBwdHJkaWZmX3QgenYgPSBn ZXRfbG9ja2VkX25hcnJvd2luZ196diAoUFQpOw0KKyAgICAgIHB0cmRpZmZf dCBiZWd2ID0gZ2V0X2xhcmdlX25hcnJvd2luZ19iZWd2IChQVCk7DQorICAg ICAgcHRyZGlmZl90IHp2ID0gZ2V0X2xhcmdlX25hcnJvd2luZ196diAoUFQp Ow0KICAgICAgIGlmIChiZWd2ICE9IEJFRyB8fCB6diAhPSBaKQ0KLQluYXJy b3dfdG9fcmVnaW9uX2xvY2tlZCAobWFrZV9maXhudW0gKGJlZ3YpLCBtYWtl X2ZpeG51bSAoenYpLA0KLQkJCQkgUWxvbmdfbGluZV9vcHRpbWl6YXRpb25z X2luX2NvbW1hbmRfaG9va3MpOw0KKwlsYWJlbGVkX25hcnJvd190b19yZWdp b24gKG1ha2VfZml4bnVtIChiZWd2KSwgbWFrZV9maXhudW0gKHp2KSwNCisJ CQkJICBRbG9uZ19saW5lX29wdGltaXphdGlvbnNfaW5fY29tbWFuZF9ob29r cyk7DQogICAgIH0NCiANCiAgIHJ1bl9ob29rX3dpdGhfYXJncyAoMiwgKChM aXNwX09iamVjdCBbXSkge2hvb2ssIGhvb2t9KSwNCmRpZmYgLS1naXQgYS9z cmMvbGlzcC5oIGIvc3JjL2xpc3AuaA0KaW5kZXggMTI3NjI4NWUyZjIuLjlj MDJkOTc1YTc0IDEwMDY0NA0KLS0tIGEvc3JjL2xpc3AuaA0KKysrIGIvc3Jj L2xpc3AuaA0KQEAgLTQ2ODcsOCArNDY4Nyw5IEBAIGV4dGVybiB2b2lkIHNh dmVfcmVzdHJpY3Rpb25fcmVzdG9yZSAoTGlzcF9PYmplY3QpOw0KIGV4dGVy biBMaXNwX09iamVjdCBtYWtlX2J1ZmZlcl9zdHJpbmcgKHB0cmRpZmZfdCwg cHRyZGlmZl90LCBib29sKTsNCiBleHRlcm4gTGlzcF9PYmplY3QgbWFrZV9i dWZmZXJfc3RyaW5nX2JvdGggKHB0cmRpZmZfdCwgcHRyZGlmZl90LCBwdHJk aWZmX3QsDQogCQkJCQkgICAgcHRyZGlmZl90LCBib29sKTsNCi1leHRlcm4g dm9pZCBuYXJyb3dfdG9fcmVnaW9uX2xvY2tlZCAoTGlzcF9PYmplY3QsIExp c3BfT2JqZWN0LCBMaXNwX09iamVjdCk7DQotZXh0ZXJuIHZvaWQgcmVzZXRf b3V0ZXJtb3N0X25hcnJvd2luZ3MgKHZvaWQpOw0KK2V4dGVybiB2b2lkIGxh YmVsZWRfbmFycm93X3RvX3JlZ2lvbiAoTGlzcF9PYmplY3QsIExpc3BfT2Jq ZWN0LCBMaXNwX09iamVjdCk7DQorZXh0ZXJuIHZvaWQgcmVzZXRfb3V0ZXJt b3N0X3Jlc3RyaWN0aW9ucyAodm9pZCk7DQorZXh0ZXJuIHZvaWQgbGFiZWxl ZF9yZXN0cmljdGlvbnNfcmVtb3ZlX2luX2N1cnJlbnRfYnVmZmVyICh2b2lk KTsNCiBleHRlcm4gdm9pZCBpbml0X2VkaXRmbnMgKHZvaWQpOw0KIGV4dGVy biB2b2lkIHN5bXNfb2ZfZWRpdGZucyAodm9pZCk7DQogDQpAQCAtNDg1Nyw3 ICs0ODU4LDYgQEAgZXh0ZXJuIGJvb2wgZGV0ZWN0X2lucHV0X3BlbmRpbmcg KHZvaWQpOw0KIGV4dGVybiBib29sIGRldGVjdF9pbnB1dF9wZW5kaW5nX2ln bm9yZV9zcXVlZXphYmxlcyAodm9pZCk7DQogZXh0ZXJuIGJvb2wgZGV0ZWN0 X2lucHV0X3BlbmRpbmdfcnVuX3RpbWVycyAoYm9vbCk7DQogZXh0ZXJuIHZv aWQgc2FmZV9ydW5faG9va3MgKExpc3BfT2JqZWN0KTsNCi1leHRlcm4gdm9p ZCBzYWZlX3J1bl9ob29rc19tYXliZV9uYXJyb3dlZCAoTGlzcF9PYmplY3Qs IHN0cnVjdCB3aW5kb3cgKik7DQogZXh0ZXJuIHZvaWQgc2FmZV9ydW5faG9v a3NfMiAoTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCk7 DQogZXh0ZXJuIHZvaWQgY21kX2Vycm9yX2ludGVybmFsIChMaXNwX09iamVj dCwgY29uc3QgY2hhciAqKTsNCiBleHRlcm4gTGlzcF9PYmplY3QgY29tbWFu ZF9sb29wXzIgKExpc3BfT2JqZWN0KTsNCmRpZmYgLS1naXQgYS9zcmMvbHJl YWQuYyBiL3NyYy9scmVhZC5jDQppbmRleCBkMGRjODVmNTFjOC4uMzQyZDM2 N2Q5ODUgMTAwNjQ0DQotLS0gYS9zcmMvbHJlYWQuYw0KKysrIGIvc3JjL2xy ZWFkLmMNCkBAIC0yMjU1LDYgKzIyNTUsNyBAQCByZWFkZXZhbGxvb3AgKExp c3BfT2JqZWN0IHJlYWRjaGFyZnVuLA0KIAkgIHJlY29yZF91bndpbmRfcHJv dGVjdF9leGN1cnNpb24gKCk7DQogCSAgLyogU2F2ZSBaViBpbiBpdC4gICov DQogCSAgcmVjb3JkX3Vud2luZF9wcm90ZWN0IChzYXZlX3Jlc3RyaWN0aW9u X3Jlc3RvcmUsIHNhdmVfcmVzdHJpY3Rpb25fc2F2ZSAoKSk7DQorCSAgbGFi ZWxlZF9yZXN0cmljdGlvbnNfcmVtb3ZlX2luX2N1cnJlbnRfYnVmZmVyICgp Ow0KIAkgIC8qIFRob3NlIGdldCB1bmJvdW5kIGFmdGVyIHdlIHJlYWQgb25l IGV4cHJlc3Npb24uICAqLw0KIA0KIAkgIC8qIFNldCBwb2ludCBhbmQgWlYg YXJvdW5kIHN0dWZmIHRvIGJlIHJlYWQuICAqLw0KZGlmZiAtLWdpdCBhL3Ny Yy94ZGlzcC5jIGIvc3JjL3hkaXNwLmMNCmluZGV4IDBiMTkwNTI5NDA0Li4z MGEzMjg5NmFiYSAxMDA2NDQNCi0tLSBhL3NyYy94ZGlzcC5jDQorKysgYi9z cmMveGRpc3AuYw0KQEAgLTM0ODIsNyArMzQ4Miw3IEBAIGluaXRfaXRlcmF0 b3IgKHN0cnVjdCBpdCAqaXQsIHN0cnVjdCB3aW5kb3cgKncsDQogDQogICAg ICAgLyogVGhpcyBpcyBzZXQgb25seSB3aGVuIGxvbmdfbGluZV9vcHRpbWl6 YXRpb25zX3AgaXMgbm9uLXplcm8NCiAJIGZvciB0aGUgY3VycmVudCBidWZm ZXIuICAqLw0KLSAgICAgIGl0LT5uYXJyb3dlZF9iZWd2ID0gMDsNCisgICAg ICBpdC0+bWVkaXVtX25hcnJvd2luZ19iZWd2ID0gMDsNCiANCiAgICAgICAv KiBDb21wdXRlIGZhY2VzIGV0Yy4gICovDQogICAgICAgcmVzZWF0IChpdCwg aXQtPmN1cnJlbnQucG9zLCB0cnVlKTsNCkBAIC0zNDkxLDE3ICszNDkxLDEw NCBAQCBpbml0X2l0ZXJhdG9yIChzdHJ1Y3QgaXQgKml0LCBzdHJ1Y3Qgd2lu ZG93ICp3LA0KICAgQ0hFQ0tfSVQgKGl0KTsNCiB9DQogDQotLyogQ29tcHV0 ZSBhIHN1aXRhYmxlIGFsdGVybmF0ZSB2YWx1ZSBmb3IgQkVHViBhbmQgWlYg dGhhdCBtYXkgYmUgdXNlZA0KLSAgIHRlbXBvcmFyaWx5IHRvIG9wdGltaXpl IGRpc3BsYXkgaWYgdGhlIGJ1ZmZlciBpbiB3aW5kb3cgVyBjb250YWlucw0K LSAgIGxvbmcgbGluZXMuICAqLw0KKy8qIEhvdyBFbWFjcyBkZWFscyB3aXRo IGxvbmcgbGluZXMuDQorDQorICAgKDEpIFdoZW4gYSBidWZmZXIgaXMgYWJv dXQgdG8gYmUgKHJlKWRpc3BsYXllZCwgJ3JlZGlzcGxheV93aW5kb3cnDQor ICAgZGV0ZWN0cywgd2l0aCBhIGhldXJpc3RpYywgd2hldGhlciBpdCBjb250 YWlucyBsb25nIGxpbmVzLg0KKw0KKyAgIFRoaXMgaGFwcGVucyBpbiAncmVk aXNwbGF5X3dpbmRvdycgYmVjYXVzZSBpdCBpcyBvbmx5IGRpc3BsYXlpbmcN CisgICBidWZmZXJzIHdpdGggbG9uZyBsaW5lcyB0aGF0IGlzIHByb2JsZW1h dGljLiAgSW4gb3RoZXIgd29yZHMsIG5vbmUNCisgICBvZiB0aGUgb3B0aW1p emF0aW9ucyBkZXNjcmliZWQgYmVsb3cgaXMgZXZlciB1c2VkIGluIGJ1ZmZl cnMgdGhhdA0KKyAgIGFyZSBuZXZlciBkaXNwbGF5ZWQuDQorDQorICAgVGhp cyBoYXBwZW5zIHdpdGggYSBoZXVyaXN0aWMsIHdoaWNoIGNoZWNrcyB3aGV0 aGVyIGEgYnVmZmVyDQorICAgY29udGFpbnMgbG9uZyBsaW5lcywgZWFjaCB0 aW1lIGl0cyBjb250ZW50cyBoYXZlIGNoYW5nZWQgImVub3VnaCINCisgICBi ZXR3ZWVuIHR3byByZWRpc3BsYXkgY3ljbGVzLCBiZWNhdXNlIGEgYnVmZmVy IHdpdGhvdXQgbG9uZyBsaW5lcw0KKyAgIGNhbiBiZWNvbWUgYSBidWZmZXIg d2l0aCBsb25nIGxpbmVzIGF0IGFueSB0aW1lLCBmb3IgZXhhbXBsZSBhZnRl cg0KKyAgIGEgeWFuayBjb21tYW5kLCBvciBhZnRlciBhIHJlcGxhY2UgY29t bWFuZCwgb3Igd2hpbGUgdGhlIG91dHB1dCBvZg0KKyAgIGFuIGV4dGVybmFs IHByb2Nlc3MgaXMgaW5zZXJ0ZWQgaW4gYSBidWZmZXIuDQorDQorICAgV2hl biBFbWFjcyBoYXMgZGV0ZWN0ZWQgdGhhdCBhIGJ1ZmZlciBjb250YWlucyBs b25nIGxpbmVzLCB0aGUNCisgICBidWZmZXItbG9jYWwgdmFyaWFibGUgJ2xv bmdfbGluZV9vcHRpbWl6YXRpb25zX3AnIChpbiAnc3RydWN0DQorICAgYnVm ZmVyJykgaXMgc2V0LCBhbmQgRW1hY3MgZG9lcyBub3QgdHJ5IHRvIGRldGVj dCB3aGV0aGVyIHRoZQ0KKyAgIGJ1ZmZlciBkb2VzIG9yIGRvZXMgbm90IGNv bnRhaW4gbG9uZyBsaW5lcyBhbnltb3JlLg0KKw0KKyAgIFdoYXQgYSBsb25n IGxpbmUgaXMgZGVwZW5kcyBvbiB0aGUgdmFyaWFibGUgJ2xvbmctbGluZS10 aHJlc2hvbGQnLA0KKyAgIHdob3NlIGRlZmF1bHQgdmFsdWUgaXMgNTAwMDAg KGNoYXJhY3RlcnMpLg0KKw0KKyAgICgyKSBXaGVuIGEgYnVmZmVyIHdpdGgg bG9uZyBsaW5lcyBpcyAocmUpZGlzcGxheWVkLCB0aGUgYW1vdW50IG9mDQor ICAgZGF0YSB0aGF0IHRoZSBkaXNwbGF5IHJvdXRpbmVzIGNvbnNpZGVyIGlz LCBpbiBhIGZldyB3ZWxsLWNob3Nlbg0KKyAgIHBsYWNlcywgbGltaXRlZCB3 aXRoIGEgdGVtcG9yYXJ5IHJlc3RyaWN0aW9uLCB3aG9zZSBib3VuZHMgYXJl DQorICAgY2FsY3VsYXRlZCB3aXRoIHRoZSBmdW5jdGlvbnMgYmVsb3cuDQor DQorICAgKDIuMSkgJ2dldF9zbWFsbF9uYXJyb3dpbmdfYmVndicgaXMgdXNl ZCB0byBjcmVhdGUgYSByZXN0cmljdGlvbg0KKyAgIHdoaWNoIHN0YXJ0cyBh IGZldyBodW5kcmVkIGNoYXJhY3RlcnMgYmVmb3JlIHBvaW50LiAgVGhlIGV4 YWN0DQorICAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZGVwZW5kcyBvbiB0aGUg d2lkdGggb2YgdGhlIHdpbmRvdyBpbiB3aGljaA0KKyAgIHRoZSBidWZmZXIg aXMgZGlzcGxheWVkLg0KKw0KKyAgIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRp bmcgJ2dldF9zbWFsbF9uYXJyb3dpbmdfenYnIGZ1bmN0aW9uLA0KKyAgIGJl Y2F1c2UgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBzZXQgdGhlIGVuZCBsaW1p dCBvZiB0aGF0DQorICAgcmVzdHJpY3Rpb24uDQorDQorICAgVGhpcyByZXN0 cmljdGlvbiBpcyB1c2VkIGluIGZvdXIgcGxhY2VzLCBuYW1lbHk6DQorICAg J2JhY2tfdG9fcHJldmlvdXNfbGluZV9zdGFydCcgYW5kICdtb3ZlX2l0X3Zl cnRpY2FsbHlfYmFja3dhcmQnDQorICAgKHdpdGggdGhlICdTRVRfV0lUSF9O QVJST1dFRF9CRUdWJyBtYWNybyksIGFuZCBpbg0KKyAgICdjb21wb3NpdGlv bl9jb21wdXRlX3N0b3BfcG9zJyBhbmQgJ2ZpbmRfYXV0b21hdGljX2NvbXBv c2l0aW9uJyAoaW4NCisgICBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCBkZXBl bmRpbmcgb24gJ2xvbmdfbGluZV9vcHRpbWl6YXRpb25zX3AnKS4NCisNCisg ICAoMi4yKSAnZ2V0X21lZGl1bV9uYXJyb3dpbmdfYmVndicgaXMgdXNlZCB0 byBjcmVhdGUgYSByZXN0cmljdGlvbg0KKyAgIHdoaWNoIHN0YXJ0cyBhIGZl dyB0aG91c2FuZCBjaGFyYWN0ZXJzIGJlZm9yZSBwb2ludC4gIFRoZSBleGFj dA0KKyAgIG51bWJlciBvZiBjaGFyYWN0ZXJzIGRlcGVuZHMgb24gdGhlIHNp emUgKHdpZHRoIGFuZCBoZWlnaHQpIG9mIHRoZQ0KKyAgIHdpbmRvdyBpbiB3 aGljaCB0aGUgYnVmZmVyIGlzIGRpc3BsYXllZC4gIEZvciBwZXJmb3JtYW5j ZSByZWFzb25zLA0KKyAgIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhhdCBmdW5j dGlvbiBpcyBjYWNoZWQgaW4gJ3N0cnVjdCBpdCcsIGluIHRoZQ0KKyAgICdt ZWRpdW1fbmFycm93aW5nX2JlZ3YnIGZpZWxkLg0KKw0KKyAgIFRoZSBjb3Jy ZXNwb25kaW5nIGZ1bmN0aW9uICdnZXRfbWVkaXVtX25hcnJvd2luZ196dicg KGFuZA0KKyAgICdtZWRpdW1fbmFycm93aW5nX3p2JyBmaWVsZCBpbiAnc3Ry dWN0IGl0JykgaXMgbm90IHVzZWQgdG8gc2V0IHRoZQ0KKyAgIGVuZCBsaW1p dCBvZiBhIHRoZSByZXN0cmljdGlvbiwgd2hpY2ggaXMgYWdhaW4gdW5uZWNl c3NhcnksIGJ1dCB0bw0KKyAgIGRldGVybWluZSwgaW4gJ3Jlc2VhdCcsIHdo ZXRoZXIgdGhlIGl0ZXJhdG9yIGhhcyBtb3ZlZCBmYXIgZW5vdWdoDQorICAg ZnJvbSBpdHMgb3JpZ2luYWwgcG9zaXRpb24sIGFuZCB3aGV0aGVyIHRoZSBz dGFydCBwb3NpdGlvbiBvZiB0aGUNCisgICByZXN0cmljdGlvbiBtdXN0IGJl IGNvbXB1dGVkIGFuZXcuDQorDQorICAgVGhpcyByZXN0cmljdGlvbiBpcyB1 c2VkIGluIGEgc2luZ2xlIHBsYWNlOg0KKyAgICdnZXRfdmlzdWFsbHlfZmly c3RfZWxlbWVudCcsIHdpdGggdGhlICdTRVRfV0lUSF9OQVJST1dFRF9CRUdW Jw0KKyAgIG1hY3JvLg0KKw0KKyAgICgyLjMpICdnZXRfbGFyZ2VfbmFycm93 aW5nX2JlZ3YnIGFuZCAnZ2V0X2xhcmdlX25hcnJvd2luZ196dicgYXJlDQor ICAgdXNlZCB0byBjcmVhdGUgYSByZXN0cmljdGlvbiB3aGljaCBzdGFydHMg YSBmZXcgaHVuZHJlZCB0aG91c2FuZA0KKyAgIGNoYXJhY3RlcnMgYmVmb3Jl IHBvaW50IGFuZCBlbmRzIGEgZmV3IGh1bmRyZWQgdGhvdXNhbmQgY2hhcmFj dGVycw0KKyAgIGFmdGVyIHBvaW50LiAgVGhlIHNpemUgb2YgdGhhdCByZXN0 cmljdGlvbiBkZXBlbmRzIG9uIHRoZSB2YXJpYWJsZQ0KKyAgICdsb25nLWxp bmUtb3B0aW1pemF0aW9ucy1yZWdpb24tc2l6ZScsIHdob3NlIGRlZmF1bHQg dmFsdWUgaXMNCisgICA1MDAwMDAgKGNoYXJhY3RlcnMpOyBpdCBjYW4gYmUg YWRqdXN0ZWQgYnkgYSBmZXcgaHVuZHJlZCBjaGFyYWN0ZXJzDQorICAgZGVw ZW5kaW5nIG9uICdsb25nLWxpbmUtb3B0aW1pemF0aW9ucy1ib2wtc2VhcmNo LWxpbWl0Jywgd2hvc2UNCisgICBkZWZhdWx0IHZhbHVlIGlzIDEyOCAoY2hh cmFjdGVycykuDQorDQorICAgRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgYWdh aW4sIHRoZSByZXR1cm4gdmFsdWVzIG9mIHRoZXNlIGZ1bmN0aW9ucw0KKyAg IGFyZSBzdG9yZWQgaW4gdGhlICdsYXJnZV9uYXJyb3dpbmdfYmVndicgYW5k ICdsYXJnZV9uYXJyb3dpbmdfenYnDQorICAgZmllbGRzIGluICdzdHJ1Y3Qg aXQnLg0KKw0KKyAgIFRoZSByZXN0cmljdGlvbiBkZWZpbmVkIGJ5IHRoZXNl IHZhbHVlcyBpcyB1c2VkIGFyb3VuZCB0aHJlZQ0KKyAgIGxvdy1sZXZlbCBo b29rczogYXJvdW5kICdmb250aWZpY2F0aW9uLWZ1bmN0aW9ucycsIGluDQor ICAgJ2hhbmRsZV9mb250aWZpZWRfcHJvcCcsIGFuZCBhcm91bmQgJ3ByZS1j b21tYW5kLWhvb2snIGFuZA0KKyAgICdwb3N0LWNvbW1hbmQtaG9vaycsIGlu ICdzYWZlX3J1bl9ob29rc19tYXliZV9uYXJyb3dlZCcsIHdoaWNoIGlzDQor ICAgY2FsbGVkIGluICdjb21tYW5kX2xvb3BfMScuICBUaGVzZSByZXN0cmlj dGlvbnMgYXJlIHNldCBhcm91bmQNCisgICB0aGVzZSBob29rcyB3aXRoICds YWJlbGVkX25hcnJvd190b19yZWdpb24nOyB0aGUgcmVzdHJpY3Rpb25zIGFy ZQ0KKyAgIGxhYmVsZWQsIGFuZCBjYW5ub3QgYmUgcmVtb3ZlZCB3aXRoIGEg Y2FsbCB0byAnd2lkZW4nLCBidXQgY2FuIGJlDQorICAgcmVtb3ZlZCB3aXRo ICd3aXRob3V0LXJlc3RyaWN0aW9uJyB3aXRoIGEgOmxhYmVsIGFyZ3VtZW50 Lg0KKyovDQogDQogc3RhdGljIGludA0KIGdldF9uYXJyb3dlZF93aWR0aCAo c3RydWN0IHdpbmRvdyAqdykNCiB7DQogICAvKiBJbiBhIGNoYXJhY3Rlci1v bmx5IHRlcm1pbmFsLCBvbmx5IG9uZSBmb250IHNpemUgaXMgdXNlZCwgc28g d2UNCiAgICAgIGNhbiB1c2UgYSBzbWFsbGVyIGZhY3Rvci4gICovDQotICBp bnQgZmFjdCA9IEVRIChGdGVybWluYWxfbGl2ZV9wIChRbmlsKSwgUXQpID8g MiA6IDM7DQotICBpbnQgd2lkdGggPSB3aW5kb3dfYm9keV93aWR0aCAodywg V0lORE9XX0JPRFlfSU5fQ0FOT05JQ0FMX0NIQVJTKTsNCisgIGludCBmYWN0 ID0gRlJBTUVfV0lORE9XX1AgKFhGUkFNRSAody0+ZnJhbWUpKSA/IDMgOiAy Ow0KKyAgLyogSWYgdGhlIHdpbmRvdyBoYXMgbm8gZnJpbmdlcyAoaW4gYSBj aGFyYWN0ZXItb25seSB0ZXJtaW5hbCBvciBpbg0KKyAgICAgYSBHVUkgZnJh bWUgd2l0aG91dCBmcmluZ2VzKSwgc3VidHJhY3QgMSBmcm9tIHRoZSB3aWR0 aCBmb3IgdGhlDQorICAgICAnXCcgbGluZSB3cmFwcGluZyBjaGFyYWN0ZXIu ICAqLw0KKyAgaW50IHdpZHRoID0gd2luZG93X2JvZHlfd2lkdGggKHcsIFdJ TkRPV19CT0RZX0lOX0NBTk9OSUNBTF9DSEFSUykNCisgICAgLSAoKFdJTkRP V19SSUdIVF9GUklOR0VfV0lEVEggKHcpID09IDANCisJfHwgV0lORE9XX0xF RlRfRlJJTkdFX1dJRFRIICh3KSA9PSAwKSA/IDEgOiAwKTsNCiAgIHJldHVy biBmYWN0ICogbWF4ICgxLCB3aWR0aCk7DQogfQ0KIA0KQEAgLTM1MTIsMjkg KzM1OTksNTcgQEAgZ2V0X25hcnJvd2VkX2xlbiAoc3RydWN0IHdpbmRvdyAq dykNCiAgIHJldHVybiBnZXRfbmFycm93ZWRfd2lkdGggKHcpICogbWF4ICgx LCBoZWlnaHQpOw0KIH0NCiANCi1wdHJkaWZmX3QNCi1nZXRfbmFycm93ZWRf YmVndiAoc3RydWN0IHdpbmRvdyAqdywgcHRyZGlmZl90IHBvcykNCitzdGF0 aWMgcHRyZGlmZl90DQorZ2V0X21lZGl1bV9uYXJyb3dpbmdfYmVndiAoc3Ry dWN0IHdpbmRvdyAqdywgcHRyZGlmZl90IHBvcykNCiB7DQogICBpbnQgbGVu ID0gZ2V0X25hcnJvd2VkX2xlbiAodyk7DQogICByZXR1cm4gbWF4ICgocG9z IC8gbGVuIC0gMSkgKiBsZW4sIEJFR1YpOw0KIH0NCiANCi1wdHJkaWZmX3QN Ci1nZXRfbmFycm93ZWRfenYgKHN0cnVjdCB3aW5kb3cgKncsIHB0cmRpZmZf dCBwb3MpDQorc3RhdGljIHB0cmRpZmZfdA0KK2dldF9tZWRpdW1fbmFycm93 aW5nX3p2IChzdHJ1Y3Qgd2luZG93ICp3LCBwdHJkaWZmX3QgcG9zKQ0KIHsN CiAgIGludCBsZW4gPSBnZXRfbmFycm93ZWRfbGVuICh3KTsNCiAgIHJldHVy biBtaW4gKChwb3MgLyBsZW4gKyAxKSAqIGxlbiwgWlYpOw0KIH0NCiANCitz dGF0aWMgcHRyZGlmZl90DQorZ2V0X25lYXJieV9ib2xfcG9zIChwdHJkaWZm X3QgcG9zKQ0KK3sNCisgIHB0cmRpZmZfdCBzdGFydCwgcG9zX2J5dGVwb3Ms IGN1ciwgbmV4dCwgZm91bmQsIGJvbCA9IEJFR1YgLSAxOw0KKyAgaW50IGRp c3Q7DQorICBmb3IgKGRpc3QgPSA1MDA7IGRpc3QgPD0gNTAwMDAwOyBkaXN0 ICo9IDEwKQ0KKyAgICB7DQorICAgICAgcG9zX2J5dGVwb3MgPSBwb3MgPT0g QkVHViA/IEJFR1ZfQllURSA6IENIQVJfVE9fQllURSAocG9zKTsNCisgICAg ICBzdGFydCA9IHBvcyAtIGRpc3QgPCBCRUdWID8gQkVHViA6IHBvcyAtIGRp c3Q7DQorICAgICAgZm9yIChjdXIgPSBzdGFydDsgY3VyIDwgcG9zOyBjdXIg PSBuZXh0KQ0KKwl7DQorCSAgbmV4dCA9IGZpbmRfbmV3bGluZTEgKGN1ciwg Q0hBUl9UT19CWVRFIChjdXIpLA0KKwkJCQlwb3MsIHBvc19ieXRlcG9zLA0K KwkJCQkxLCAmZm91bmQsIE5VTEwsIGZhbHNlKTsNCisJICBpZiAoZm91bmQp DQorCSAgICBib2wgPSBuZXh0Ow0KKwkgIGVsc2UNCisJICAgIGJyZWFrOw0K Kwl9DQorICAgICAgaWYgKGJvbCA+PSBCRUdWIHx8IHN0YXJ0ID09IEJFR1Yp DQorCXJldHVybiBib2w7DQorICAgICAgZWxzZQ0KKwlwb3MgPSBwb3MgLSBk aXN0IDwgQkVHViA/IEJFR1YgOiBwb3MgLSBkaXN0Ow0KKyAgICB9DQorICBy ZXR1cm4gYm9sOw0KK30NCisNCiBwdHJkaWZmX3QNCi1nZXRfY2xvc2VyX25h cnJvd2VkX2JlZ3YgKHN0cnVjdCB3aW5kb3cgKncsIHB0cmRpZmZfdCBwb3Mp DQorZ2V0X3NtYWxsX25hcnJvd2luZ19iZWd2IChzdHJ1Y3Qgd2luZG93ICp3 LCBwdHJkaWZmX3QgcG9zKQ0KIHsNCiAgIGludCBsZW4gPSBnZXRfbmFycm93 ZWRfd2lkdGggKHcpOw0KLSAgcmV0dXJuIG1heCAoKHBvcyAvIGxlbiAtIDEp ICogbGVuLCBCRUdWKTsNCisgIHB0cmRpZmZfdCBib2xfcG9zID0gbWF4IChn ZXRfbmVhcmJ5X2JvbF9wb3MgKHBvcyksIEJFR1YpOw0KKyAgcmV0dXJuIG1h eCAoYm9sX3BvcyArICgocG9zIC0gYm9sX3BvcykgLyBsZW4gLSAxKSAqIGxl biwgQkVHVik7DQogfQ0KIA0KIHB0cmRpZmZfdA0KLWdldF9sb2NrZWRfbmFy cm93aW5nX2JlZ3YgKHB0cmRpZmZfdCBwb3MpDQorZ2V0X2xhcmdlX25hcnJv d2luZ19iZWd2IChwdHJkaWZmX3QgcG9zKQ0KIHsNCiAgIGlmIChsb25nX2xp bmVfb3B0aW1pemF0aW9uc19yZWdpb25fc2l6ZSA8PSAwKQ0KICAgICByZXR1 cm4gQkVHVjsNCkBAIC0zNTUyLDcgKzM2NjcsNyBAQCBnZXRfbG9ja2VkX25h cnJvd2luZ19iZWd2IChwdHJkaWZmX3QgcG9zKQ0KIH0NCiANCiBwdHJkaWZm X3QNCi1nZXRfbG9ja2VkX25hcnJvd2luZ196diAocHRyZGlmZl90IHBvcykN CitnZXRfbGFyZ2VfbmFycm93aW5nX3p2IChwdHJkaWZmX3QgcG9zKQ0KIHsN CiAgIGlmIChsb25nX2xpbmVfb3B0aW1pemF0aW9uc19yZWdpb25fc2l6ZSA8 PSAwKQ0KICAgICByZXR1cm4gWlY7DQpAQCAtMzU3MSw3ICszNjg2LDcgQEAg dW53aW5kX25hcnJvd2VkX2JlZ3YgKExpc3BfT2JqZWN0IHBvaW50X21pbikN CiANCiAjZGVmaW5lIFNFVF9XSVRIX05BUlJPV0VEX0JFR1YoSVQsRFNULEVY UFIsQlYpCQkJCVwNCiAgIGRvIHsJCQkJCQkJCQlcDQotICAgIGlmIChJVC0+ bmFycm93ZWRfYmVndikJCQkJCQlcDQorICAgIGlmIChJVC0+bWVkaXVtX25h cnJvd2luZ19iZWd2KQkJCQkJXA0KICAgICAgIHsJCQkJCQkJCQlcDQogCXNw ZWNwZGxfcmVmIGNvdW50ID0gU1BFQ1BETF9JTkRFWCAoKTsJCQkJXA0KIAly ZWNvcmRfdW53aW5kX3Byb3RlY3QgKHVud2luZF9uYXJyb3dlZF9iZWd2LCBG cG9pbnRfbWluICgpKTsJXA0KQEAgLTQzOTYsMTcgKzQ1MTEsMTcgQEAgaGFu ZGxlX2ZvbnRpZmllZF9wcm9wIChzdHJ1Y3QgaXQgKml0KQ0KICAgICAgIGlm IChjdXJyZW50X2J1ZmZlci0+bG9uZ19saW5lX29wdGltaXphdGlvbnNfcA0K IAkgICYmIGxvbmdfbGluZV9vcHRpbWl6YXRpb25zX3JlZ2lvbl9zaXplID4g MCkNCiAJew0KLQkgIHB0cmRpZmZfdCBiZWd2ID0gaXQtPmxvY2tlZF9uYXJy b3dpbmdfYmVndjsNCi0JICBwdHJkaWZmX3QgenYgPSBpdC0+bG9ja2VkX25h cnJvd2luZ196djsNCisJICBwdHJkaWZmX3QgYmVndiA9IGl0LT5sYXJnZV9u YXJyb3dpbmdfYmVndjsNCisJICBwdHJkaWZmX3QgenYgPSBpdC0+bGFyZ2Vf bmFycm93aW5nX3p2Ow0KIAkgIHB0cmRpZmZfdCBjaGFycG9zID0gSVRfQ0hB UlBPUyAoKml0KTsNCiAJICBpZiAoY2hhcnBvcyA8IGJlZ3YgfHwgY2hhcnBv cyA+IHp2KQ0KIAkgICAgew0KLQkgICAgICBiZWd2ID0gZ2V0X2xvY2tlZF9u YXJyb3dpbmdfYmVndiAoY2hhcnBvcyk7DQotCSAgICAgIHp2ID0gZ2V0X2xv Y2tlZF9uYXJyb3dpbmdfenYgKGNoYXJwb3MpOw0KKwkgICAgICBiZWd2ID0g Z2V0X2xhcmdlX25hcnJvd2luZ19iZWd2IChjaGFycG9zKTsNCisJICAgICAg enYgPSBnZXRfbGFyZ2VfbmFycm93aW5nX3p2IChjaGFycG9zKTsNCiAJICAg IH0NCiAJICBpZiAoYmVndiAhPSBCRUcgfHwgenYgIT0gWikNCi0JICAgIG5h cnJvd190b19yZWdpb25fbG9ja2VkIChtYWtlX2ZpeG51bSAoYmVndiksIG1h a2VfZml4bnVtICh6diksDQotCQkJCSAgICAgUWxvbmdfbGluZV9vcHRpbWl6 YXRpb25zX2luX2ZvbnRpZmljYXRpb25fZnVuY3Rpb25zKTsNCisJICAgIGxh YmVsZWRfbmFycm93X3RvX3JlZ2lvbiAobWFrZV9maXhudW0gKGJlZ3YpLCBt YWtlX2ZpeG51bSAoenYpLA0KKwkJCQkgICAgICBRbG9uZ19saW5lX29wdGlt aXphdGlvbnNfaW5fZm9udGlmaWNhdGlvbl9mdW5jdGlvbnMpOw0KIAl9DQog DQogICAgICAgLyogRG9uJ3QgYWxsb3cgTGlzcCB0aGF0IHJ1bnMgZnJvbSAn Zm9udGlmaWNhdGlvbi1mdW5jdGlvbnMnDQpAQCAtNzA0MSw3ICs3MTU2LDcg QEAgYmFja190b19wcmV2aW91c19saW5lX3N0YXJ0IChzdHJ1Y3QgaXQgKml0 KQ0KICAgZGVjX2JvdGggKCZjcCwgJmJwKTsNCiAgIFNFVF9XSVRIX05BUlJP V0VEX0JFR1YgKGl0LCBJVF9DSEFSUE9TICgqaXQpLA0KIAkJCSAgZmluZF9u ZXdsaW5lX25vX3F1aXQgKGNwLCBicCwgLTEsICZJVF9CWVRFUE9TICgqaXQp KSwNCi0JCQkgIGdldF9jbG9zZXJfbmFycm93ZWRfYmVndiAoaXQtPncsIElU X0NIQVJQT1MgKCppdCkpKTsNCisJCQkgIGdldF9zbWFsbF9uYXJyb3dpbmdf YmVndiAoaXQtPncsIElUX0NIQVJQT1MgKCppdCkpKTsNCiB9DQogDQogLyog RmluZCBpbiB0aGUgY3VycmVudCBidWZmZXIgdGhlIGZpcnN0IGRpc3BsYXkg b3Igb3ZlcmxheSBzdHJpbmcNCkBAIC03MzQ1LDcgKzc0NjAsNyBAQCBiYWNr X3RvX3ByZXZpb3VzX3Zpc2libGVfbGluZV9zdGFydCAoc3RydWN0IGl0ICpp dCkNCiAgIGl0LT5jb250aW51YXRpb25fbGluZXNfd2lkdGggPSAwOw0KIA0K ICAgZWFzc2VydCAoSVRfQ0hBUlBPUyAoKml0KSA+PSBCRUdWKTsNCi0gIGVh c3NlcnQgKGl0LT5uYXJyb3dlZF9iZWd2ID4gMCAvKiBsb25nLWxpbmUgb3B0 aW1pemF0aW9uczogYWxsIGJldHMgb2ZmICovDQorICBlYXNzZXJ0IChpdC0+ bWVkaXVtX25hcnJvd2luZ19iZWd2ID4gMCAvKiBsb25nLWxpbmUgb3B0aW1p emF0aW9uczogYWxsIGJldHMgb2ZmICovDQogCSAgIHx8IElUX0NIQVJQT1Mg KCppdCkgPT0gQkVHVg0KIAkgICB8fCBGRVRDSF9CWVRFIChJVF9CWVRFUE9T ICgqaXQpIC0gMSkgPT0gJ1xuJyk7DQogICBDSEVDS19JVCAoaXQpOw0KQEAg LTc0NjMsMjQgKzc1NzgsMjkgQEAgcmVzZWF0IChzdHJ1Y3QgaXQgKml0LCBz dHJ1Y3QgdGV4dF9wb3MgcG9zLCBib29sIGZvcmNlX3ApDQogDQogICBpZiAo Y3VycmVudF9idWZmZXItPmxvbmdfbGluZV9vcHRpbWl6YXRpb25zX3ApDQog ICAgIHsNCi0gICAgICBpZiAoIWl0LT5uYXJyb3dlZF9iZWd2KQ0KKyAgICAg IGlmICghaXQtPm1lZGl1bV9uYXJyb3dpbmdfYmVndikNCiAJew0KLQkgIGl0 LT5uYXJyb3dlZF9iZWd2ID0gZ2V0X25hcnJvd2VkX2JlZ3YgKGl0LT53LCB3 aW5kb3dfcG9pbnQgKGl0LT53KSk7DQotCSAgaXQtPm5hcnJvd2VkX3p2ID0g Z2V0X25hcnJvd2VkX3p2IChpdC0+dywgd2luZG93X3BvaW50IChpdC0+dykp Ow0KLQkgIGl0LT5sb2NrZWRfbmFycm93aW5nX2JlZ3YNCi0JICAgID0gZ2V0 X2xvY2tlZF9uYXJyb3dpbmdfYmVndiAod2luZG93X3BvaW50IChpdC0+dykp Ow0KLQkgIGl0LT5sb2NrZWRfbmFycm93aW5nX3p2DQotCSAgICA9IGdldF9s b2NrZWRfbmFycm93aW5nX3p2ICh3aW5kb3dfcG9pbnQgKGl0LT53KSk7DQor CSAgaXQtPm1lZGl1bV9uYXJyb3dpbmdfYmVndg0KKwkgICAgPSBnZXRfbWVk aXVtX25hcnJvd2luZ19iZWd2IChpdC0+dywgd2luZG93X3BvaW50IChpdC0+ dykpOw0KKwkgIGl0LT5tZWRpdW1fbmFycm93aW5nX3p2DQorCSAgICA9IGdl dF9tZWRpdW1fbmFycm93aW5nX3p2IChpdC0+dywgd2luZG93X3BvaW50IChp dC0+dykpOw0KKwkgIGl0LT5sYXJnZV9uYXJyb3dpbmdfYmVndg0KKwkgICAg PSBnZXRfbGFyZ2VfbmFycm93aW5nX2JlZ3YgKHdpbmRvd19wb2ludCAoaXQt PncpKTsNCisJICBpdC0+bGFyZ2VfbmFycm93aW5nX3p2DQorCSAgICA9IGdl dF9sYXJnZV9uYXJyb3dpbmdfenYgKHdpbmRvd19wb2ludCAoaXQtPncpKTsN CiAJfQ0KLSAgICAgIGVsc2UgaWYgKChwb3MuY2hhcnBvcyA8IGl0LT5uYXJy b3dlZF9iZWd2IHx8IHBvcy5jaGFycG9zID4gaXQtPm5hcnJvd2VkX3p2KQ0K KyAgICAgIGVsc2UgaWYgKChwb3MuY2hhcnBvcyA8IGl0LT5tZWRpdW1fbmFy cm93aW5nX2JlZ3YNCisJCXx8IHBvcy5jaGFycG9zID4gaXQtPm1lZGl1bV9u YXJyb3dpbmdfenYpDQogCQkmJiAoIXJlZGlzcGxheWluZ19wIHx8IGl0LT5s aW5lX3dyYXAgPT0gVFJVTkNBVEUpKQ0KIAl7DQotCSAgaXQtPm5hcnJvd2Vk X2JlZ3YgPSBnZXRfbmFycm93ZWRfYmVndiAoaXQtPncsIHBvcy5jaGFycG9z KTsNCi0JICBpdC0+bmFycm93ZWRfenYgPSBnZXRfbmFycm93ZWRfenYgKGl0 LT53LCBwb3MuY2hhcnBvcyk7DQotCSAgaXQtPmxvY2tlZF9uYXJyb3dpbmdf YmVndg0KLQkgICAgPSBnZXRfbG9ja2VkX25hcnJvd2luZ19iZWd2ICh3aW5k b3dfcG9pbnQgKGl0LT53KSk7DQotCSAgaXQtPmxvY2tlZF9uYXJyb3dpbmdf enYNCi0JICAgID0gZ2V0X2xvY2tlZF9uYXJyb3dpbmdfenYgKHdpbmRvd19w b2ludCAoaXQtPncpKTsNCisJICBpdC0+bWVkaXVtX25hcnJvd2luZ19iZWd2 DQorCSAgICA9IGdldF9tZWRpdW1fbmFycm93aW5nX2JlZ3YgKGl0LT53LCBw b3MuY2hhcnBvcyk7DQorCSAgaXQtPm1lZGl1bV9uYXJyb3dpbmdfenYNCisJ ICAgID0gZ2V0X21lZGl1bV9uYXJyb3dpbmdfenYgKGl0LT53LCBwb3MuY2hh cnBvcyk7DQorCSAgaXQtPmxhcmdlX25hcnJvd2luZ19iZWd2DQorCSAgICA9 IGdldF9sYXJnZV9uYXJyb3dpbmdfYmVndiAod2luZG93X3BvaW50IChpdC0+ dykpOw0KKwkgIGl0LT5sYXJnZV9uYXJyb3dpbmdfenYNCisJICAgID0gZ2V0 X2xhcmdlX25hcnJvd2luZ196diAod2luZG93X3BvaW50IChpdC0+dykpOw0K IAl9DQogICAgIH0NCiANCkBAIC04Nzg5LDcgKzg5MDksNyBAQCBnZXRfdmlz dWFsbHlfZmlyc3RfZWxlbWVudCAoc3RydWN0IGl0ICppdCkNCiAgIFNFVF9X SVRIX05BUlJPV0VEX0JFR1YgKGl0LCBib2IsDQogCQkJICBzdHJpbmdfcCA/ IDAgOg0KIAkJCSAgSVRfQ0hBUlBPUyAoKml0KSA8IEJFR1YgPyBvYmVndiA6 IEJFR1YsDQotCQkJICBpdC0+bmFycm93ZWRfYmVndik7DQorCQkJICBpdC0+ bWVkaXVtX25hcnJvd2luZ19iZWd2KTsNCiANCiAgIGlmIChTVFJJTkdQIChp dC0+c3RyaW5nKSkNCiAgICAgew0KQEAgLTg4MzMsNyArODk1Myw3IEBAIGdl dF92aXN1YWxseV9maXJzdF9lbGVtZW50IChzdHJ1Y3QgaXQgKml0KQ0KIAkJ CQlmaW5kX25ld2xpbmVfbm9fcXVpdCAoSVRfQ0hBUlBPUyAoKml0KSwNCiAJ CQkJCQkgICAgICBJVF9CWVRFUE9TICgqaXQpLCAtMSwNCiAJCQkJCQkgICAg ICAmaXQtPmJpZGlfaXQuYnl0ZXBvcyksDQotCQkJCWl0LT5uYXJyb3dlZF9i ZWd2KTsNCisJCQkJaXQtPm1lZGl1bV9uYXJyb3dpbmdfYmVndik7DQogICAg ICAgYmlkaV9wYXJhZ3JhcGhfaW5pdCAoaXQtPnBhcmFncmFwaF9lbWJlZGRp bmcsICZpdC0+YmlkaV9pdCwgdHJ1ZSk7DQogICAgICAgZG8NCiAJew0KQEAg LTEwNzIyLDcgKzEwODQyLDcgQEAgbW92ZV9pdF92ZXJ0aWNhbGx5X2JhY2t3 YXJkIChzdHJ1Y3QgaXQgKml0LCBpbnQgZHkpDQogCSAgZGVjX2JvdGggKCZj cCwgJmJwKTsNCiAJICBTRVRfV0lUSF9OQVJST1dFRF9CRUdWIChpdCwgY3As DQogCQkJCSAgZmluZF9uZXdsaW5lX25vX3F1aXQgKGNwLCBicCwgLTEsIE5V TEwpLA0KLQkJCQkgIGdldF9jbG9zZXJfbmFycm93ZWRfYmVndiAoaXQtPncs IElUX0NIQVJQT1MgKCppdCkpKTsNCisJCQkJICBnZXRfc21hbGxfbmFycm93 aW5nX2JlZ3YgKGl0LT53LCBJVF9DSEFSUE9TICgqaXQpKSk7DQogCSAgbW92 ZV9pdF90byAoaXQsIGNwLCAtMSwgLTEsIC0xLCBNT1ZFX1RPX1BPUyk7DQog CX0NCiAgICAgICBiaWRpX3Vuc2hlbHZlX2NhY2hlIChpdDNkYXRhLCB0cnVl KTsNCkBAIC0xNjM5NCw3ICsxNjUxNCw3IEBAIHJlZGlzcGxheV9pbnRlcm5h bCAodm9pZCkNCiAgIEZPUl9FQUNIX0ZSQU1FICh0YWlsLCBmcmFtZSkNCiAg ICAgWEZSQU1FIChmcmFtZSktPmFscmVhZHlfaHNjcm9sbGVkX3AgPSBmYWxz ZTsNCiANCi0gIHJlc2V0X291dGVybW9zdF9uYXJyb3dpbmdzICgpOw0KKyAg cmVzZXRfb3V0ZXJtb3N0X3Jlc3RyaWN0aW9ucyAoKTsNCiANCiAgcmV0cnk6 DQogICAvKiBSZW1lbWJlciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHdpbmRv dy4gICovDQpAQCAtMjQxMTIsNiArMjQyMzIsNyBAQCBkaXNwbGF5X2NvdW50 X2xpbmVzX2xvZ2ljYWxseSAocHRyZGlmZl90IHN0YXJ0X2J5dGUsIHB0cmRp ZmZfdCBsaW1pdF9ieXRlLA0KICAgcHRyZGlmZl90IHZhbDsNCiAgIHNwZWNw ZGxfcmVmIHBkbF9jb3VudCA9IFNQRUNQRExfSU5ERVggKCk7DQogICByZWNv cmRfdW53aW5kX3Byb3RlY3QgKHNhdmVfcmVzdHJpY3Rpb25fcmVzdG9yZSwg c2F2ZV9yZXN0cmljdGlvbl9zYXZlICgpKTsNCisgIGxhYmVsZWRfcmVzdHJp Y3Rpb25zX3JlbW92ZV9pbl9jdXJyZW50X2J1ZmZlciAoKTsNCiAgIEZ3aWRl biAoKTsNCiAgIHZhbCA9IGRpc3BsYXlfY291bnRfbGluZXMgKHN0YXJ0X2J5 dGUsIGxpbWl0X2J5dGUsIGNvdW50LCBieXRlX3Bvc19wdHIpOw0KICAgdW5i aW5kX3RvIChwZGxfY291bnQsIFFuaWwpOw0K --kzK5kwWOtk--