From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21007 invoked by alias); 5 Mar 2013 22:56:45 -0000 Received: (qmail 20996 invoked by uid 22791); 5 Mar 2013 22:56:43 -0000 X-SWARE-Spam-Status: No, hits=-5.2 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_CP X-Spam-Check-By: sourceware.org Received: from mail-vc0-f182.google.com (HELO mail-vc0-f182.google.com) (209.85.220.182) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 05 Mar 2013 22:56:26 +0000 Received: by mail-vc0-f182.google.com with SMTP id fl17so4479011vcb.41 for ; Tue, 05 Mar 2013 14:56:25 -0800 (PST) X-Received: by 10.52.99.42 with SMTP id en10mr9136992vdb.37.1362524185085; Tue, 05 Mar 2013 14:56:25 -0800 (PST) MIME-Version: 1.0 Received: by 10.58.237.1 with HTTP; Tue, 5 Mar 2013 14:55:44 -0800 (PST) In-Reply-To: References: From: Steven Bosscher Date: Tue, 05 Mar 2013 22:56:00 -0000 Message-ID: Subject: Re: [patch][RFC] bitmaps as lists *or* trees To: Michael Matz Cc: Richard Biener , GCC Patches , Jeff Law Content-Type: multipart/mixed; boundary=20cf307f3b0a0ccd5904d7356210 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2013-03/txt/msg00215.txt.bz2 --20cf307f3b0a0ccd5904d7356210 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 360 On Tue, Mar 5, 2013 at 5:16 PM, Steven Bosscher wrote: > Anyway, updated patch attached. It compiles all my cc1-i files, and > it compiles the PR55135 test case, in 410s (I terminated cc1plus > unpatched after >7200s, more than 2 hours...). Attached is a version that passes bootstrap&testing on x86_64-unknown-linux-gnu. and with a ChangeLog. Ciao! Steven --20cf307f3b0a0ccd5904d7356210 Content-Type: text/plain; charset=US-ASCII; name="tbitmap.diff.txt" Content-Disposition: attachment; filename="tbitmap.diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hdxnkkdr1 Content-length: 74994 CSogYml0bWFwLmg6IFVwZGF0ZSBkYXRhIHN0cnVjdHVyZSBkb2N1bWVudGF0 aW9uLCBpbmNsdWRpbmcgYQoJZGVzY3JpcHRpb24gb2YgYml0bWFwIHZpZXdz IGFzIGVpdGhlciBsaW5rZWQtbGlzdHMgb3Igc3BsYXkgdHJlZXMuCgkoc3Ry dWN0IGJpdG1hcF9lbGVtZW50X2RlZik6IFVwZGF0ZSBjb21tZW50cyBmb3Ig c3BsYXkgdHJlZSBiaXRtYXBzLgoJKHN0cnVjdCBiaXRtYXBfaGVhZF9kZWYp OiBMaWtld2lzZS4KCShiaXRtYXBfbGlzdF92aWV3LCBiaXRtYXBfdHJlZV92 aWV3KTogTmV3IHByb3RvdHlwZXMuCgkoZGVidWdfYml0bWFwLCBkZWJ1Z19i aXRtYXBfZmlsZSwgYml0bWFwX3ByaW50KTogVXBkYXRlIHByb3RvdHlwZXMu CgkoZHVtcF9iaXRtYXApOiBVcGRhdGUgdG8gdGFrZSBub24tY29uc3QgYml0 bWFwLgoJKGJpdG1hcF9pbml0aWFsaXplX3N0YXQpOiBJbml0aWFsaXplIGEg Yml0bWFwX2hlYWQncyBpbmR4IGFuZAoJdHJlZV9mb3JtIGZpZWxkcy4KCShi bXBfaXRlcl9zZXRfaW5pdCk6IEFzc2VydCB0aGUgaXRlcmF0ZWQgYml0bWFw cyBhcmUgaW4gbGlzdCBmb3JtLgoJKGJtcF9pdGVyX2FuZF9pbml0LCBibXBf aXRlcl9hbmRfY29tcGxfaW5pdCk6IExpa2V3aXNlLgoKCSogYml0bWFwLmMg KG5leHRfYml0bWFwX2Rlc2NfaWQpOiBNYWtlIHVuc2lnbmVkLgoJKGdldF9i aXRtYXBfZGVzY3JpcHRvcik6IE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gbW9y ZSB0aGFuIDJeMzEKCWJpdG1hcCBkZXNjcmlwdG9ycy4KCShiaXRtYXBfZWxl bV90b19mcmVlbGlzdCk6IFVucmVnaXN0ZXIgb3ZlcmhlYWQgb2YgYSByZWxl YXNlZCBiaXRtYXAKCWVsZW1lbnQgaGVyZS4KCShiaXRtYXBfZWxlbWVudF9m cmVlKTogUmVtb3ZlLgoJKGJpdG1hcF9lbHRfY2xlYXJfZnJvbSk6IFdvcmsg b24gc3BsYXkgdHJlZSBiaXRtYXBzLgoKCShiaXRtYXBfbGlzdF9saW5rX2Vs ZW1lbnQpOiBSZW5hbWVkIGZyb20gYml0bWFwX2VsZW1lbnRfbGluay4gIE1v dmUKCXRoaXMgZnVuY3Rpb24gc2ltaWxhciBvbmVzIHN1Y2ggdGhhdCBsaW5r ZWQtbGlzdCBiaXRtYXAgaW1wbGVtZW50YXRpb24KCWZ1bmN0aW9ucyBhcmUg Z3JvdXBlZC4KCShiaXRtYXBfbGlzdF91bmxpbmtfZWxlbWVudCk6IFJlbmFt ZWQgZnJvbSBiaXRtYXBfZWxlbWVudF91bmxpbmssCglhbmQgbW92ZWQgZm9y IGdyb3VwaW5nLgoJKGJpdG1hcF9saXN0X2luc2VydF9lbGVtZW50X2FmdGVy KTogUmVuYW1lZCBmcm9tCgliaXRtYXBfZWx0X2luc2VydF9hZnRlciwgYW5k IG1vdmVkIGZvciBncm91cGluZy4KCShiaXRtYXBfbGlzdF9maW5kX2VsZW1l bnQpOiBOZXcgZnVuY3Rpb24gc3BsaWNlZCBmcm9tIGJpdG1hcF9maW5kX2Jp dC4KCgkoYml0bWFwX3RyZWVfbGlua19sZWZ0LCBiaXRtYXBfdHJlZV9saW5r X3JpZ2h0LAoJYml0bWFwX3RyZWVfcm90YXRlX2xlZnQsIGJpdG1hcF90cmVl X3JvdGF0ZV9yaWdodCwgYml0bWFwX3RyZWVfc3BsYXksCgliaXRtYXBfdHJl ZV9saW5rX2VsZW1lbnQsIGJpdG1hcF90cmVlX3VubGlua19lbGVtZW50LAoJ Yml0bWFwX3RyZWVfZmluZF9lbGVtZW50KTogTmV3IGZ1bmN0aW9ucyBmb3Ig c3BsYXktdHJlZSBiaXRtYXAKCWltcGxlbWVudGF0aW9uLgoJKGJpdG1hcF9l bGVtZW50X2xpbmssIGJpdG1hcF9lbGVtZW50X3VubGluaywgYml0bWFwX2Vs dF9pbnNlcnRfYWZ0ZXIpOgoJUmVuYW1lZCBhbmQgbW92ZWQsIHNlZSBhYm92 ZSBlbnRyaWVzLgoKCShiaXRtYXBfdHJlZV9saXN0aWZ5X2Zyb20pOiBOZXcg ZnVuY3Rpb24gdG8gY29udmVydCBwYXJ0IG9mIGEgc3BsYXkKCXRyZWUgYml0 bWFwIHRvIGEgbGlua2VkLWxpc3QgYml0bWFwLgoJKGJpdG1hcF9saXN0X3Zp ZXcpOiBDb252ZXJ0IGEgc3BsYXkgdHJlZSBiaXRtYXAgdG8gbGlua2VkLWxp c3QgZm9ybS4KCShiaXRtYXBfdHJlZV92aWV3KTogQ29udmVydCBhIGxpbmtl ZC1saXN0IGJpdG1hcCB0byBzcGxheSB0cmVlIGZvcm0uCgoJKGJpdG1hcF9m aW5kX2JpdCwgYml0bWFwX2NsZWFyLCBiaXRtYXBfY2xlYXJfYml0LCBiaXRt YXBfc2V0X2JpdCwKCWJpdG1hcF9zaW5nbGVfYml0X3NldF9wLCBiaXRtYXBf Zmlyc3Rfc2V0X2JpdCwgYml0bWFwX2xhc3Rfc2V0X2JpdCk6CglIYW5kbGUg c3BsYXkgdHJlZSBiaXRtYXBzLgoKCShiaXRtYXBfY29weSwgYml0bWFwX2Nv dW50X2JpdHMsIGJpdG1hcF9hbmQsIGJpdG1hcF9hbmRfaW50bywKCWJpdG1h cF9lbHRfY29weSwgYml0bWFwX2FuZF9jb21wbCwgYml0bWFwX2FuZF9jb21w bF9pbnRvLAoJYml0bWFwX2NvbXBsX2FuZF9pbnRvLCBiaXRtYXBfZWx0X2lv ciwgYml0bWFwX2lvciwgYml0bWFwX2lvcl9pbnRvLAoJYml0bWFwX3hvciwg Yml0bWFwX3hvcl9pbnRvLCBiaXRtYXBfZXF1YWxfcCwgYml0bWFwX2ludGVy c2VjdF9wLAoJYml0bWFwX2ludGVyc2VjdF9jb21wbF9wLCBiaXRtYXBfaW9y X2FuZF9jb21wbCwKCWJpdG1hcF9pb3JfYW5kX2NvbXBsX2ludG8sIGJpdG1h cF9zZXRfcmFuZ2UsIGJpdG1hcF9jbGVhcl9yYW5nZSwKCWJpdG1hcF9oYXNo KTogUmVqZWN0IHRyeWluZyB0byBhY3Qgb24gc3BsYXkgdHJlZSBiaXRtYXBz LiAgTWFrZQoJY29ycmVzcG9uZGluZyBjaGFuZ2VzIHRvIHVzZSBsaW5rZWQt bGlzdCBzcGVjaWZpYyBiaXRtYXBfZWxlbWVudAoJbWFuaXB1bGF0aW9uIGZ1 bmN0aW9ucyBhcyBhcHBsaWNhYmxlIGZvciBlZmZpY2llbmN5LgoKCShkZWJ1 Z19iaXRtYXBfZmlsZSk6IEhhbmRsZSBzcGxheSB0cmVlIGJpdG1hcHMgYnkg Y29udmVydGluZyB0aGUKCWJpdG1hcCB0byBsaW5rZWQtbGlzdCBmb3JtIGFu ZCBiYWNrLgoJKGJpdG1hcF9wcmludCk6IExpa2V3aXNlLgoJKGRlYnVnX2Jp dG1hcCk6IFRha2UgYSBub24tY29uc3QgYml0bWFwLgoKCSogcmVnaW5mby5j IChpbml0X3N1YnJlZ3Nfb2ZfbW9kZSk6IFZpZXcgaW52YWxpZF9tb2RlX2No YW5nZXMgYW5kCglzdWJyZWdzX29mX21vZGUgYml0bWFwcyBhcyBzcGxheSB0 cmVlIGJpdG1hcHMuCgpJbmRleDogYml0bWFwLmgKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gYml0bWFwLmgJKHJldmlzaW9uIDE5NjQxMCkKKysrIGJp dG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNiArMjAsMjEgQEAgYWxv bmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4KICNpZm5kZWYg R0NDX0JJVE1BUF9ICiAjZGVmaW5lIEdDQ19CSVRNQVBfSAogCi0vKiBJbXBs ZW1lbnRhdGlvbiBvZiBzcGFyc2UgaW50ZWdlciBzZXRzIGFzIGEgbGlua2Vk IGxpc3QuCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBzcGFyc2UgaW50ZWdlciBz ZXRzIGFzIGEgbGlua2VkIGxpc3Qgb3IgdHJlZXMuCiAKICAgIFRoaXMgc3Bh cnNlIHNldCByZXByZXNlbnRhdGlvbiBpcyBzdWl0YWJsZSBmb3Igc3BhcnNl IHNldHMgd2l0aCBhbgotICAgdW5rbm93biAoYSBwcmlvcmkpIHVuaXZlcnNl LiAgVGhlIHNldCBpcyByZXByZXNlbnRlZCBhcyBhIGRvdWJsZS1saW5rZWQK LSAgIGxpc3Qgb2YgY29udGFpbmVyIG5vZGVzIChzdHJ1Y3QgYml0bWFwX2Vs ZW1lbnRfZGVmKS4gIEVhY2ggbm9kZSBjb25zaXN0cwotICAgb2YgYW4gaW5k ZXggZm9yIHRoZSBmaXJzdCBtZW1iZXIgdGhhdCBjb3VsZCBiZSBoZWxkIGlu IHRoZSBjb250YWluZXIsCi0gICBhIHNtYWxsIGFycmF5IG9mIGludGVnZXJz IHRoYXQgcmVwcmVzZW50IHRoZSBtZW1iZXJzIGluIHRoZSBjb250YWluZXIs Ci0gICBhbmQgcG9pbnRlcnMgdG8gdGhlIG5leHQgYW5kIHByZXZpb3VzIGVs ZW1lbnQgaW4gdGhlIGxpbmtlZCBsaXN0LiAgVGhlCi0gICBlbGVtZW50cyBp biB0aGUgbGlzdCBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciwgaS5l LiB0aGUgaGVhZCBvZgorICAgdW5rbm93biAoYSBwcmlvcmkpIHVuaXZlcnNl LgorICAgCisgICBTZXRzIGFyZSByZXByZXNlbnRlZCBhcyBkb3VibGUtbGlu a2VkIGxpc3RzIG9mIGNvbnRhaW5lciBub2RlcyBvZgorICAgdHlwZSAic3Ry dWN0IGJpdG1hcF9lbGVtZW50X2RlZiIgb3IgYXMgYSBiaW5hcnkgdHJlZXMg b2YgdGhlIHNhbWUKKyAgIGNvbnRhaW5lciBub2Rlcy4gIEVhY2ggY29udGFp bmVyIG5vZGUgY29uc2lzdHMgb2YgYW4gaW5kZXggZm9yIHRoZQorICAgZmly c3QgbWVtYmVyIHRoYXQgY291bGQgYmUgaGVsZCBpbiB0aGUgY29udGFpbmVy LCBhIHNtYWxsIGFycmF5IG9mCisgICBpbnRlZ2VycyB0aGF0IHJlcHJlc2Vu dCB0aGUgbWVtYmVycyBpbiB0aGUgY29udGFpbmVyLCBhbmQgcG9pbnRlcnMK KyAgIHRvIHRoZSBuZXh0IGFuZCBwcmV2aW91cyBlbGVtZW50IGluIHRoZSBs aW5rZWQgbGlzdCwgb3IgbGVmdCBhbmQKKyAgIHJpZ2h0IGNoaWxkcmVuIGlu IHRoZSB0cmVlLiAgSW4gbGlua2VkLWxpc3QgZm9ybSwgdGhlIGNvbnRhaW5l cgorICAgbm9kZXMgaW4gdGhlIGxpc3QgYXJlIHNvcnRlZCBpbiBhc2NlbmRp bmcgb3JkZXIsIGkuZS4gdGhlIGhlYWQgb2YKICAgIHRoZSBsaXN0IGhvbGRz IHRoZSBlbGVtZW50IHdpdGggdGhlIHNtYWxsZXN0IG1lbWJlciBvZiB0aGUg c2V0LgorICAgSW4gdHJlZSBmb3JtLCBub2RlcyB0byB0aGUgbGVmdCBoYXZl IGEgc21hbGxlciBjb250YWluZXIgaW5kZXguCiAKICAgIEZvciBhIGdpdmVu IG1lbWJlciBJIGluIHRoZSBzZXQ6CiAgICAgIC0gdGhlIGVsZW1lbnQgZm9y IEkgd2lsbCBoYXZlIGluZGV4IGlzIEkgLyAoYml0cyBwZXIgZWxlbWVudCkK QEAgLTQyLDE3ICs0Nyw2OCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBm aWxlIENPUFlJTkczLgogICAgaGlnaCBzdG9yYWdlIG92ZXJoZWFkICpwZXIg ZWxlbWVudCosIGJ1dCBhIHNtYWxsIG92ZXJhbGwgb3ZlcmhlYWQgaWYKICAg IHRoZSBzZXQgaXMgdmVyeSBzcGFyc2UuCiAKLSAgIFRoZSBkb3duc2lkZSBp cyB0aGF0IG1hbnkgb3BlcmF0aW9ucyBhcmUgcmVsYXRpdmVseSBzbG93IGJl Y2F1c2UgdGhlCi0gICBsaW5rZWQgbGlzdCBoYXMgdG8gYmUgdHJhdmVyc2Vk IHRvIHRlc3QgbWVtYmVyc2hpcCAoaS5lLiBtZW1iZXJfcC8KLSAgIGFkZF9t ZW1iZXIvcmVtb3ZlX21lbWJlcikuICBUbyBpbXByb3ZlIHRoZSBwZXJmb3Jt YW5jZSBvZiB0aGlzIHNldAotICAgcmVwcmVzZW50YXRpb24sIHRoZSBsYXN0 IGFjY2Vzc2VkIGVsZW1lbnQgYW5kIGl0cyBpbmRleCBhcmUgY2FjaGVkLgot ICAgRm9yIG1lbWJlcnNoaXAgdGVzdHMgb24gbWVtYmVycyBjbG9zZSB0byBy ZWNlbnRseSBhY2Nlc3NlZCBtZW1iZXJzLAotICAgdGhlIGNhY2hlZCBsYXN0 IGVsZW1lbnQgaW1wcm92ZXMgbWVtYmVyc2hpcCB0ZXN0IHRvIGEgY29uc3Rh bnQtdGltZQotICAgb3BlcmF0aW9uLgorICAgVGhlIHN0b3JhZ2UgcmVxdWly ZW1lbnRzIGZvciBsaW5rZWQtbGlzdCBzcGFyc2Ugc2V0cyBhcmUgTyhFKSwg d2l0aCBFLT5OCisgICBpbiB0aGUgd29yc3QgY2FzZSAoYSBzcGFyc2Ugc2V0 IHdpdGggbGFyZ2UgZGlzdGFuY2VzIGJldHdlZW4gdGhlIHZhbHVlcworICAg b2YgdGhlIHNldCBtZW1iZXJzKS4KKworICAgVGhpcyByZXByZXNlbnRhdGlv biBhbHNvIHdvcmtzIHdlbGwgZm9yIGRhdGEgZmxvdyBwcm9ibGVtcyB3aGVy ZSB0aGUgc2l6ZQorICAgb2YgdGhlIHNldCBtYXkgZ3JvdyBkeW5hbWljYWxs eSwgYnV0IGNhcmUgbXVzdCBiZSB0YWtlbiB0aGF0IHRoZSBtZW1iZXJfcCwK KyAgIGFkZF9tZW1iZXIsIGFuZCByZW1vdmVfbWVtYmVyIG9wZXJhdGlvbnMg b2NjdXIgd2l0aCBhIHN1aXRhYmxlIGFjY2VzcworICAgcGF0dGVybi4KKwor ICAgVGhlIGxpbmtlZC1saXN0IHNldCByZXByZXNlbnRhdGlvbiB3b3JrcyB3 ZWxsIGZvciBwcm9ibGVtcyBpbnZvbHZpbmcgdmVyeQorICAgc3BhcnNlIHNl dHMuICBUaGUgY2Fub25pY2FsIGV4YW1wbGUgaW4gR0NDIGlzLCBvZiBjb3Vy c2UsIHRoZSAic2V0IG9mCisgICBzZXRzIiBmb3Igc29tZSBDRkctYmFzZWQg ZGF0YSBmbG93IHByb2JsZW1zIChsaXZlbmVzcyBhbmFseXNpcywgZG9taW5h bmNlCisgICBmcm9udGllcnMsIGV0Yy4pLgorICAgCisgICBGb3IgcmFuZG9t LWFjY2VzcyBzcGFyc2Ugc2V0cyBvZiB1bmtub3duIHVuaXZlcnNlLCB0aGUg YmluYXJ5IHRyZWUKKyAgIHJlcHJlc2VudGF0aW9uIGlzIGxpa2VseSB0byBi ZSBhIG1vcmUgc3VpdGFibGUgY2hvaWNlLiAgVGhlb3JldGljYWwKKyAgIGFj Y2VzcyB0aW1lcyBmb3IgdGhlIGJpbmFyeSB0cmVlIHJlcHJlc2VudGF0aW9u IGFyZSBiZXR0ZXIgdGhhbiB0aG9zZQorICAgZm9yIHRoZSBsaW5rZWQtbGlz dCwgYnV0IGluIHByYWN0aWNlIHRoaXMgaXMgb25seSB0cnVlIGZvciB0cnVl bHkKKyAgIHJhbmRvbSBhY2Nlc3MuCisKKyAgIE9mdGVuIHRoZSBtb3N0IHN1 aXRhYmxlIHJlcHJlc2VudGF0aW9uIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2Yg dGhlIHNldAorICAgaXMgbm90IHRoZSBiZXN0IGNob2ljZSBmb3IgdGhlIHVz YWdlIG9mIHRoZSBzZXQuICBGb3Igc3VjaCBjYXNlcywgdGhlCisgICAidmll dyIgb2YgdGhlIHNldCBjYW4gYmUgY2hhbmdlZCBmcm9tIG9uZSByZXByZXNl bnRhdGlvbiB0byB0aGUgb3RoZXIuCisgICBUaGlzIGlzIGFuIE8oRSkgb3Bl cmF0aW9uOgorCisgICAgICogZnJvbSBsaXN0IHRvIHRyZWUgdmlldwk6IGJp dG1hcF90cmVlX3ZpZXcKKyAgICAgKiBmcm9tIHRyZWUgdG8gbGlzdCB2aWV3 CTogYml0bWFwX2xpc3RfdmlldworCisgICBUcmF2ZXJzaW5nIGxpbmtlZCBs aXN0cyBvciB0cmVlcyBjYW4gYmUgY2FjaGUtdW5mcmllbmRseS4gIFBlcmZv cm1hbmNlCisgICBjYW4gYmUgaW1wcm92ZWQgYnkga2VlcGluZyBjb250YWlu ZXIgbm9kZXMgaW4gdGhlIHNldCBncm91cGVkIHRvZ2V0aGVyCisgICBpbiAg bWVtb3J5LCB1c2luZyBhIGRlZGljYXRlZCBvYnN0YWNrIGZvciBhIHNldCAo b3IgZ3JvdXAgb2YgcmVsYXRlZAorICAgc2V0cykuICBFbGVtZW50cyBhbGxv Y2F0ZWQgb24gb2JzdGFja3MgYXJlIHJlbGVhc2VkIHRvIGEgZnJlZS1saXN0 IGFuZAorICAgdGFrZW4gb2ZmIHRoZSBmcmVlIGxpc3QuICBJZiBtdWx0aXBs ZSBzZXRzIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHNhbWUKKyAgIG9ic3RhY2ss IGVsZW1lbnRzIGZyZWVkIGZyb20gb25lIHNldCBtYXkgYmUgcmUtdXNlZCBm b3Igb25lIG9mIHRoZSBvdGhlcgorICAgc2V0cy4gIFRoaXMgdXN1YWxseSBo ZWxwcyBhdm9pZCBjYWNoZSBtaXNzZXMuCisKKyAgIEEgc2luZ2xlIGZyZWUt bGlzdCBpcyB1c2VkIGZvciBhbGwgc2V0cyBhbGxvY2F0ZWQgaW4gR0dDIHNw YWNlLiAgVGhpcyBpcworICAgYmFkIGZvciBwZXJzaXN0ZW50IHNldHMsIHNv IHBlcnNpc3RlbnQgc2V0cyBzaG91bGQgYmUgYWxsb2NhdGVkIG9uIGFuCisg ICBvYnN0YWNrIHdoZW5ldmVyIHBvc3NpYmxlLgorCisgICBGb3IgcmFuZG9t LWFjY2VzcyBzZXRzIHdpdGggYSBrbm93biwgcmVsYXRpdmVseSBzbWFsbCB1 bml2ZXJzZSBzaXplLCB0aGUKKyAgIFNwYXJzZVNldCBvciBzaW1wbGUgYml0 bWFwIHJlcHJlc2VudGF0aW9ucyBtYXkgYmUgbW9yZSBlZmZpY2llbnQgdGhh biBhCisgICBsaW5rZWQtbGlzdCBzZXQuCisKKworICAgTElOS0VEIExJU1Qg Rk9STQorICAgPT09PT09PT09PT09PT09PQorCisgICBJbiBsaW5rZWQtbGlz dCBmb3JtLCBpbi1vcmRlciBpdGVyYXRpb25zIG9mIHRoZSBzZXQgY2FuIGJl IGV4ZWN1dGVkCisgICBlZmZpY2llbnRseS4gIFRoZSBkb3duc2lkZSBpcyB0 aGF0IG1hbnkgcmFuZG9tLWFjY2VzcyBvcGVyYXRpb25zIGFyZQorICAgcmVs YXRpdmVseSBzbG93LCBiZWNhdXNlIHRoZSBsaW5rZWQgbGlzdCBoYXMgdG8g YmUgdHJhdmVyc2VkIHRvIHRlc3QKKyAgIG1lbWJlcnNoaXAgKGkuZS4gbWVt YmVyX3AvIGFkZF9tZW1iZXIvcmVtb3ZlX21lbWJlcikuCisgICAKKyAgIFRv IGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHRoaXMgc2V0IHJlcHJlc2Vu dGF0aW9uLCB0aGUgbGFzdAorICAgYWNjZXNzZWQgZWxlbWVudCBhbmQgaXRz IGluZGV4IGFyZSBjYWNoZWQuICBGb3IgbWVtYmVyc2hpcCB0ZXN0cyBvbgor ICAgbWVtYmVycyBjbG9zZSB0byByZWNlbnRseSBhY2Nlc3NlZCBtZW1iZXJz LCB0aGUgY2FjaGVkIGxhc3QgZWxlbWVudAorICAgaW1wcm92ZXMgbWVtYmVy c2hpcCB0ZXN0IHRvIGEgY29uc3RhbnQtdGltZSBvcGVyYXRpb24uCiAKICAg IFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBjYW4gYWx3YXlzIGJlIHBlcmZv cm1lZCBpbiBPKDEpIHRpbWU6CiAKICAgICAgKiBjbGVhcgkJCTogYml0bWFw X2NsZWFyCisgICAgICogc21hbGxlc3RfbWVtYmVyCQk6IGJpdG1hcF9maXJz dF9zZXRfYml0CiAgICAgICogY2hvb3NlX29uZQkJOiAobm90IGltcGxlbWVu dGVkLCBidXQgY291bGQgYmUKIAkJCQkgICBpbXBsZW1lbnRlZCBpbiBjb25z dGFudCB0aW1lKQogCkBAIC02MSwxNSArMTE3LDE2IEBAIGFsb25nIHdpdGgg R0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuCiAgICBzdWl0YWJsZSBhY2Nl c3MgcGF0dGVybnM6CiAKICAgICAgKiBtZW1iZXJfcAkJCTogYml0bWFwX2Jp dF9wCi0gICAgICogYWRkX21lbWJlcgkJOiBiaXRtYXBfc2V0X2JpdAotICAg ICAqIHJlbW92ZV9tZW1iZXIJCTogYml0bWFwX2NsZWFyX2JpdAorICAgICAq IGFkZF9tZW1iZXIJCTogYml0bWFwX3NldF9iaXQgLyBiaXRtYXBfc2V0X3Jh bmdlCisgICAgICogcmVtb3ZlX21lbWJlcgkJOiBiaXRtYXBfY2xlYXJfYml0 IC8gYml0bWFwX2NsZWFyX3JhbmdlCiAKICAgIFRoZSBmb2xsb3dpbmcgb3Bl cmF0aW9ucyBjYW4gYmUgcGVyZm9ybWVkIGluIE8oRSkgdGltZToKIAogICAg ICAqIGNhcmRpbmFsaXR5CQk6IGJpdG1hcF9jb3VudF9iaXRzCi0gICAgICog c2V0X3NpemUJCQk6IGJpdG1hcF9sYXN0X3NldF9iaXQgKGJ1dCB0aGlzIGNv dWxkCisgICAgICogbGFyZ2VzdF9tZW1iZXIJCTogYml0bWFwX2xhc3Rfc2V0 X2JpdCAoYnV0IHRoaXMgY291bGQKIAkJCQkgIGluIGNvbnN0YW50IHRpbWUg d2l0aCBhIHBvaW50ZXIgdG8KIAkJCQkgIHRoZSBsYXN0IGVsZW1lbnQgaW4g dGhlIGNoYWluKQorICAgICAqIHNldF9zaXplCQkJOiBiaXRtYXBfbGFzdF9z ZXRfYml0CiAKICAgIEFkZGl0aW9uYWxseSwgdGhlIGxpbmtlZC1saXN0IHNw YXJzZSBzZXQgcmVwcmVzZW50YXRpb24gc3VwcG9ydHMKICAgIGVudW1lcmF0 aW9uIG9mIHRoZSBtZW1iZXJzIGluIE8oRSkgdGltZToKQEAgLTkzLDM5ICsx NTAsNTMgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5H My4KICAgICAgKiBBIHwgKEIgJiB+QykJCTogYml0bWFwX2lvcl9hbmRfY29t cGwgLwogCQkJCSAgYml0bWFwX2lvcl9hbmRfY29tcGxfaW50bwogCi0gICBU aGUgc3RvcmFnZSByZXF1aXJlbWVudHMgZm9yIGxpbmtlZC1saXN0IHNwYXJz ZSBzZXRzIGFyZSBPKEUpLCB3aXRoIEUtPk4KLSAgIGluIHRoZSB3b3JzdCBj YXNlIChhIHNwYXJzZSBzZXQgd2l0aCBsYXJnZSBkaXN0YW5jZXMgYmV0d2Vl biB0aGUgdmFsdWVzCi0gICBvZiB0aGUgc2V0IG1lbWJlcnMpLgogCi0gICBU aGUgbGlua2VkLWxpc3Qgc2V0IHJlcHJlc2VudGF0aW9uIHdvcmtzIHdlbGwg Zm9yIHByb2JsZW1zIGludm9sdmluZyB2ZXJ5Ci0gICBzcGFyc2Ugc2V0cy4g IFRoZSBjYW5vbmljYWwgZXhhbXBsZSBpbiBHQ0MgaXMsIG9mIGNvdXJzZSwg dGhlICJzZXQgb2YKLSAgIHNldHMiIGZvciBzb21lIENGRy1iYXNlZCBkYXRh IGZsb3cgcHJvYmxlbXMgKGxpdmVuZXNzIGFuYWx5c2lzLCBkb21pbmFuY2UK LSAgIGZyb250aWVycywgZXRjLikuCisgICBCSU5BUlkgVFJFRSBGT1JNCisg ICA9PT09PT09PT09PT09PT09CisgICBBbiBhbHRlcm5hdGUgInZpZXciIG9m IGEgYml0bWFwIGlzIGl0cyBiaW5hcnkgdHJlZSByZXByZXNlbnRhdGlvbi4K KyAgIEZvciB0aGlzIHJlcHJlc2VudGF0aW9uLCBzcGxheSB0cmVlcyBhcmUg dXNlZCBiZWNhdXNlIHRoZXkgY2FuIGJlCisgICBpbXBsZW1lbnRlZCB1c2lu ZyB0aGUgc2FtZSBkYXRhIHN0cnVjdHVyZXMgYXMgdGhlIGxpbmtlZCBsaXN0 LCB3aXRoCisgICBubyBvdmVyaGVhZCBmb3IgbWV0YS1kYXRhIChsaWtlIGNv bG9yLCBvciByYW5rKSBvbiB0aGUgdHJlZSBub2Rlcy4KKworICAgSW4gYmlu YXJ5IHRyZWUgZm9ybSwgcmFuZG9tLWFjY2VzcyB0byB0aGUgc2V0IGlzIG11 Y2ggbW9yZSBlZmZpY2llbnQKKyAgIHRoYW4gZm9yIHRoZSBsaW5rZWQtbGlz dCByZXByZXNlbnRhdGlvbi4gIERvd25zaWRlcyBhcmUgdGhlIGhpZ2ggY29z dAorICAgb2YgY2xlYXJpbmcgdGhlIHNldCwgYW5kIHRoZSByZWxhdGl2ZWx5 IGxhcmdlIG51bWJlciBvZiBvcGVyYXRpb25zCisgICBuZWNlc3NhcnkgdG8g YmFsYW5jZSB0aGUgdHJlZS4gIEFsc28sIGl0ZXJhdGluZyB0aGUgc2V0IG1l bWJlcnMgaXMKKyAgIG5vdCBzdXBwb3J0ZWQuCiAgICAKLSAgIFRoaXMgcmVw cmVzZW50YXRpb24gYWxzbyB3b3JrcyB3ZWxsIGZvciBkYXRhIGZsb3cgcHJv YmxlbXMgd2hlcmUgdGhlIHNpemUKLSAgIG9mIHRoZSBzZXQgbWF5IGdyb3cg ZHluYW1pY2FsbHksIGJ1dCBjYXJlIG11c3QgYmUgdGFrZW4gdGhhdCB0aGUg bWVtYmVyX3AsCi0gICBhZGRfbWVtYmVyLCBhbmQgcmVtb3ZlX21lbWJlciBv cGVyYXRpb25zIG9jY3VyIHdpdGggYSBzdWl0YWJsZSBhY2Nlc3MKLSAgIHBh dHRlcm4uCi0gICAKLSAgIEZvciByYW5kb20tYWNjZXNzIHNldHMgd2l0aCBh IGtub3duLCByZWxhdGl2ZWx5IHNtYWxsIHVuaXZlcnNlIHNpemUsIHRoZQot ICAgU3BhcnNlU2V0IG9yIHNpbXBsZSBiaXRtYXAgcmVwcmVzZW50YXRpb25z IG1heSBiZSBtb3JlIGVmZmljaWVudCB0aGFuIGEKLSAgIGxpbmtlZC1saXN0 IHNldC4gIEZvciByYW5kb20tYWNjZXNzIHNldHMgb2YgdW5rbm93biB1bml2 ZXJzZSwgYSBoYXNoIHRhYmxlCi0gICBvciBhIGJhbGFuY2VkIGJpbmFyeSB0 cmVlIHJlcHJlc2VudGF0aW9uIGlzIGxpa2VseSB0byBiZSBhIG1vcmUgc3Vp dGFibGUKLSAgIGNob2ljZS4KKyAgIEFzIGZvciB0aGUgbGlua2VkLWxpc3Qg cmVwcmVzZW50YXRpb24sIHRoZSBsYXN0IGFjY2Vzc2VkIGVsZW1lbnQgYW5k CisgICBpdHMgaW5kZXggYXJlIGNhY2hlZCwgc28gdGhhdCBtZW1iZXJzaGlw IHRlc3RzIG9uIHRoZSBsYXRlc3QgYWNjZXNzZWQKKyAgIG1lbWJlcnMgaXMg YSBjb25zdGFudC10aW1lIG9wZXJhdGlvbi4gIE90aGVyIGxvb2t1cHMgdGFr ZSBPKGxvZ0UpCisgICB0aW1lIGFtb3J0aXplZCAoYnV0IE8oRSkgdGltZSB3 b3JzdC1jYXNlKS4KIAotICAgVHJhdmVyc2luZyBsaW5rZWQgbGlzdHMgaXMg dXN1YWxseSBjYWNoZS11bmZyaWVuZGx5LCBldmVuIHdpdGggdGhlIGxhc3QK LSAgIGFjY2Vzc2VkIGVsZW1lbnQgY2FjaGVkLgotICAgCi0gICBDYWNoZSBw ZXJmb3JtYW5jZSBjYW4gYmUgaW1wcm92ZWQgYnkga2VlcGluZyB0aGUgZWxl bWVudHMgaW4gdGhlIHNldAotICAgZ3JvdXBlZCB0b2dldGhlciBpbiBtZW1v cnksIHVzaW5nIGEgZGVkaWNhdGVkIG9ic3RhY2sgZm9yIGEgc2V0IChvciBn cm91cAotICAgb2YgcmVsYXRlZCBzZXRzKS4gIEVsZW1lbnRzIGFsbG9jYXRl ZCBvbiBvYnN0YWNrcyBhcmUgcmVsZWFzZWQgdG8gYQotICAgZnJlZS1saXN0 IGFuZCB0YWtlbiBvZmYgdGhlIGZyZWUgbGlzdC4gIElmIG11bHRpcGxlIHNl dHMgYXJlIGFsbG9jYXRlZCBvbgotICAgdGhlIHNhbWUgb2JzdGFjaywgZWxl bWVudHMgZnJlZWQgZnJvbSBvbmUgc2V0IG1heSBiZSByZS11c2VkIGZvciBv bmUgb2YKLSAgIHRoZSBvdGhlciBzZXRzLiAgVGhpcyB1c3VhbGx5IGhlbHBz IGF2b2lkIGNhY2hlIG1pc3Nlcy4KKyAgIFRoZSBmb2xsb3dpbmcgb3BlcmF0 aW9ucyBjYW4gYWx3YXlzIGJlIHBlcmZvcm1lZCBpbiBPKDEpIHRpbWU6CiAK LSAgIEEgc2luZ2xlIGZyZWUtbGlzdCBpcyB1c2VkIGZvciBhbGwgc2V0cyBh bGxvY2F0ZWQgaW4gR0dDIHNwYWNlLiAgVGhpcyBpcwotICAgYmFkIGZvciBw ZXJzaXN0ZW50IHNldHMsIHNvIHBlcnNpc3RlbnQgc2V0cyBzaG91bGQgYmUg YWxsb2NhdGVkIG9uIGFuCi0gICBvYnN0YWNrIHdoZW5ldmVyIHBvc3NpYmxl LiAgKi8KKyAgICAgKiBjaG9vc2Vfb25lCQk6IChub3QgaW1wbGVtZW50ZWQs IGJ1dCBjb3VsZCBiZQorCQkJCSAgIGltcGxlbWVudGVkIGluIGNvbnN0YW50 IHRpbWUpCisKKyAgIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBjYW4gYmUg cGVyZm9ybWVkIGluIE8obG9nRSkgdGltZSBhbW9ydGl6ZWQKKyAgIGJ1dCBP KEUpIHRpbWUgd29yc3QtY2FzZSwgYnV0IGluIE8oMSkgdGltZSBpZiB0aGUg c2FtZSBlbGVtZW50IGlzCisgICBhY2Nlc3NlZC4KKworICAgICAqIG1lbWJl cl9wCQkJOiBiaXRtYXBfYml0X3AKKyAgICAgKiBhZGRfbWVtYmVyCQk6IGJp dG1hcF9zZXRfYml0CisgICAgICogcmVtb3ZlX21lbWJlcgkJOiBiaXRtYXBf Y2xlYXJfYml0CisKKyAgIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBjYW4g YmUgcGVyZm9ybWVkIGluIE8obG9nRSkgdGltZSBhbW9ydGl6ZWQKKyAgIGJ1 dCBPKEUpIHRpbWUgd29yc3QtY2FzZToKKworICAgICAqIHNtYWxsZXN0X21l bWJlcgkJOiBiaXRtYXBfZmlyc3Rfc2V0X2JpdAorICAgICAqIGxhcmdlc3Rf bWVtYmVyCQk6IGJpdG1hcF9sYXN0X3NldF9iaXQKKyAgICAgKiBzZXRfc2l6 ZQkJCTogYml0bWFwX2xhc3Rfc2V0X2JpdAorCisgICBUaGUgZm9sbG93aW5n IG9wZXJhdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCBpbiBPKEUpIHRpbWU6CisK KyAgICAgKiBjbGVhcgkJCTogYml0bWFwX2NsZWFyCisKKyAgIFRoZSBiaW5h cnkgdHJlZSBzcGFyc2Ugc2V0IHJlcHJlc2VudGF0aW9uIGRvZXMgKm5vdCog c3VwcG9ydCBhbnkgZm9ybQorICAgb2YgZW51bWVyYXRpb24sIGFuZCBkb2Vz IGFsc28gKm5vdCogc3VwcG9ydCBsb2dpY2FsIG9wZXJhdGlvbnMgb24gc2V0 cy4KKyAgIFRoZSBiaW5hcnkgdHJlZSByZXByZXNlbnRhdGlvbiBpcyBvbmx5 IHN1cHBvc2VkIHRvIGJlIHVzZWQgZm9yIHNldHMKKyAgIG9uIHdoaWNoIG1h bnkgcmFuZG9tLWFjY2VzcyBtZW1iZXJzaGlwIHRlc3RzIHdpbGwgaGFwcGVu LiAgKi8KIAogI2luY2x1ZGUgImhhc2h0YWIuaCIKICNpbmNsdWRlICJzdGF0 aXN0aWNzLmgiCkBAIC0xNjgsMzEgKzIzOSw1NyBAQCB0eXBlZGVmIHN0cnVj dCBHVFkgKCgpKSBiaXRtYXBfb2JzdGFjayB7CiAgICBsaW5lYXIgaW4gdGhl IG51bWJlciBvZiBlbGVtZW50cyB0byBiZSBmcmVlZC4gICovCiAKIHR5cGVk ZWYgc3RydWN0IEdUWSgoY2hhaW5fbmV4dCAoIiVoLm5leHQiKSwgY2hhaW5f cHJldiAoIiVoLnByZXYiKSkpIGJpdG1hcF9lbGVtZW50X2RlZiB7Ci0gIHN0 cnVjdCBiaXRtYXBfZWxlbWVudF9kZWYgKm5leHQ7CS8qIE5leHQgZWxlbWVu dC4gICovCi0gIHN0cnVjdCBiaXRtYXBfZWxlbWVudF9kZWYgKnByZXY7CS8q IFByZXZpb3VzIGVsZW1lbnQuICAqLwotICB1bnNpZ25lZCBpbnQgaW5keDsJ CQkvKiByZWduby9CSVRNQVBfRUxFTUVOVF9BTExfQklUUy4gICovCi0gIEJJ VE1BUF9XT1JEIGJpdHNbQklUTUFQX0VMRU1FTlRfV09SRFNdOyAvKiBCaXRz IHRoYXQgYXJlIHNldC4gICovCisgIC8qIEluIGxpc3QgZm9ybSwgdGhlIG5l eHQgZWxlbWVudCBpbiB0aGUgbGlua2VkIGxpc3Q7CisgICAgIGluIHRyZWUg Zm9ybSwgdGhlIGxlZnQgY2hpbGQgbm9kZSBpbiB0aGUgdHJlZS4gICovCisg IHN0cnVjdCBiaXRtYXBfZWxlbWVudF9kZWYgKm5leHQ7CisKKyAgLyogSW4g bGlzdCBmb3JtLCB0aGUgcHJldmlvdXMgZWxlbWVudCBpbiB0aGUgbGlua2Vk IGxpc3Q7CisgICAgIGluIHRyZWUgZm9ybSwgdGhlIHJpZ2h0IGNoaWxkIG5v ZGUgaW4gdGhlIHRyZWUuICAqLworICBzdHJ1Y3QgYml0bWFwX2VsZW1lbnRf ZGVmICpwcmV2OworCisgIC8qIHJlZ25vL0JJVE1BUF9FTEVNRU5UX0FMTF9C SVRTLiAgKi8KKyAgdW5zaWduZWQgaW50IGluZHg7CisKKyAgLyogQml0cyB0 aGF0IGFyZSBzZXQsIGNvdW50aW5nIGZyb20gSU5EWCwgaW5jbHVzaXZlLiAg Ki8KKyAgQklUTUFQX1dPUkQgYml0c1tCSVRNQVBfRUxFTUVOVF9XT1JEU107 CiB9IGJpdG1hcF9lbGVtZW50OwogCiAvKiBIZWFkIG9mIGJpdG1hcCBsaW5r ZWQgbGlzdC4gIFRoZSAnY3VycmVudCcgbWVtYmVyIHBvaW50cyB0byBzb21l dGhpbmcKICAgIGFscmVhZHkgcG9pbnRlZCB0byBieSB0aGUgY2hhaW4gc3Rh cnRlZCBieSBmaXJzdCwgc28gR1RZKChza2lwKSkgaXQuICAqLwogCiB0eXBl ZGVmIHN0cnVjdCBHVFkoKCkpIGJpdG1hcF9oZWFkX2RlZiB7Ci0gIHVuc2ln bmVkIGludCBpbmR4OwkJCS8qIEluZGV4IG9mIGxhc3QgZWxlbWVudCBsb29r ZWQgYXQuICAqLwotICB1bnNpZ25lZCBpbnQgZGVzY3JpcHRvcl9pZDsJCS8q IFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgYWxsb2NhdGlvbgotCQkJCQkg ICBzaXRlIG9mIHRoaXMgYml0bWFwLCBmb3IgZGV0YWlsZWQKLQkJCQkJICAg c3RhdGlzdGljcyBnYXRoZXJpbmcuICAqLwotICBiaXRtYXBfZWxlbWVudCAq Zmlyc3Q7CQkvKiBGaXJzdCBlbGVtZW50IGluIGxpbmtlZCBsaXN0LiAgKi8K LSAgYml0bWFwX2VsZW1lbnQgKiBHVFkoKHNraXAoIiIpKSkgY3VycmVudDsg LyogTGFzdCBlbGVtZW50IGxvb2tlZCBhdC4gICovCi0gIGJpdG1hcF9vYnN0 YWNrICpvYnN0YWNrOwkJLyogT2JzdGFjayB0byBhbGxvY2F0ZSBlbGVtZW50 cyBmcm9tLgotCQkJCQkgICBJZiBOVUxMLCB0aGVuIHVzZSBHR0MgYWxsb2Nh dGlvbi4gICovCisgIC8qIEluZGV4IG9mIGxhc3QgZWxlbWVudCBsb29rZWQg YXQuICAqLworICB1bnNpZ25lZCBpbnQgaW5keDsKKworICAvKiBVbmlxdWUg aWRlbnRpZmllciBmb3IgdGhlIGFsbG9jYXRpb24gc2l0ZSBvZiB0aGlzIGJp dG1hcCwKKyAgICAgZm9yIGRldGFpbGVkIHN0YXRpc3RpY3MgZ2F0aGVyaW5n LiAgKi8KKyAgdW5zaWduZWQgaW50IGRlc2NyaXB0b3JfaWQgOiAzMTsKKwor ICAvKiAwIGlmIHRoZSBiaXRtYXAgaXMgaW4gbGlzdCBmb3JtOyAxIGlmIHRo ZSBiaXRtYXAgaXMgaW4gdHJlZSBmb3JtLgorICAgICBCaXRtYXAgaXRlcmF0 b3JzIG9ubHkgd29yayBvbiBiaXRtYXBzIGluIGxpc3QgZm9ybS4gICovCisg IHVuc2lnbmVkIGludCB0cmVlX2Zvcm0gOiAxOworCisgIC8qIEluIGxpc3Qg Zm9ybSwgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGxpbmtlZCBsaXN0Owor ICAgICBpbiB0cmVlIGZvcm0sIFRoZSByb290IG9mIHRoZSB0cmVlLiAgICov CisgIGJpdG1hcF9lbGVtZW50ICpmaXJzdDsKKworICAvKiBMYXN0IGVsZW1l bnQgbG9va2VkIGF0LiAgKi8KKyAgYml0bWFwX2VsZW1lbnQgKiBHVFkoKHNr aXAoIiIpKSkgY3VycmVudDsKKworICAvKiBPYnN0YWNrIHRvIGFsbG9jYXRl IGVsZW1lbnRzIGZyb20uCisgICAgIElmIE5VTEwsIHRoZW4gdXNlIEdHQyBh bGxvY2F0aW9uLiAgKi8KKyAgYml0bWFwX29ic3RhY2sgKm9ic3RhY2s7CiB9 IGJpdG1hcF9oZWFkOwogCiAvKiBHbG9iYWwgZGF0YSAqLwogZXh0ZXJuIGJp dG1hcF9lbGVtZW50IGJpdG1hcF96ZXJvX2JpdHM7CS8qIFplcm8gYml0bWFw IGVsZW1lbnQgKi8KIGV4dGVybiBiaXRtYXBfb2JzdGFjayBiaXRtYXBfZGVm YXVsdF9vYnN0YWNrOyAgIC8qIERlZmF1bHQgYml0bWFwIG9ic3RhY2sgKi8K IAotLyogQ2xlYXIgYSBiaXRtYXAgYnkgZnJlZWluZyB1cCB0aGUgbGlua2Vk IGxpc3QuICAqLworLyogQ2hhbmdlIHRoZSB2aWV3IG9mIHRoZSBiaXRtYXAg dG8gbGlzdCwgb3IgdHJlZS4gICovCit2b2lkIGJpdG1hcF9saXN0X3ZpZXcg KGJpdG1hcCk7Cit2b2lkIGJpdG1hcF90cmVlX3ZpZXcgKGJpdG1hcCk7CisK Ky8qIENsZWFyIGEgYml0bWFwIGJ5IGZyZWVpbmcgdXAgdGhlIGVsZW1lbnRz LiAgKi8KIGV4dGVybiB2b2lkIGJpdG1hcF9jbGVhciAoYml0bWFwKTsKIAog LyogQ29weSBhIGJpdG1hcCB0byBhbm90aGVyIGJpdG1hcC4gICovCkBAIC0y NTIsMTUgKzM0OSwxNSBAQCBleHRlcm4gYm9vbCBiaXRtYXBfY2xlYXJfYml0 IChiaXRtYXAsIGluCiAvKiBTZXQgYSBzaW5nbGUgYml0IGluIGEgYml0bWFw LiAgUmV0dXJuIHRydWUgaWYgdGhlIGJpdCBjaGFuZ2VkLiAgKi8KIGV4dGVy biBib29sIGJpdG1hcF9zZXRfYml0IChiaXRtYXAsIGludCk7CiAKLS8qIFJl dHVybiB0cnVlIGlmIGEgcmVnaXN0ZXIgaXMgc2V0IGluIGEgcmVnaXN0ZXIg c2V0LiAgKi8KKy8qIFJldHVybiB0cnVlIGlmIGEgYml0IGlzIHNldCBpbiBh IGJpdG1hcC4gICovCiBleHRlcm4gaW50IGJpdG1hcF9iaXRfcCAoYml0bWFw LCBpbnQpOwogCi0vKiBEZWJ1ZyBmdW5jdGlvbnMgdG8gcHJpbnQgYSBiaXRt YXAgbGlua2VkIGxpc3QuICAqLwotZXh0ZXJuIHZvaWQgZGVidWdfYml0bWFw IChjb25zdF9iaXRtYXApOwotZXh0ZXJuIHZvaWQgZGVidWdfYml0bWFwX2Zp bGUgKEZJTEUgKiwgY29uc3RfYml0bWFwKTsKKy8qIERlYnVnIGZ1bmN0aW9u cyB0byBwcmludCBhIGJpdG1hcC4gICovCitleHRlcm4gdm9pZCBkZWJ1Z19i aXRtYXAgKGJpdG1hcCk7CitleHRlcm4gdm9pZCBkZWJ1Z19iaXRtYXBfZmls ZSAoRklMRSAqLCBiaXRtYXApOwogCiAvKiBQcmludCBhIGJpdG1hcC4gICov Ci1leHRlcm4gdm9pZCBiaXRtYXBfcHJpbnQgKEZJTEUgKiwgY29uc3RfYml0 bWFwLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9p ZCBiaXRtYXBfcHJpbnQgKEZJTEUgKiwgYml0bWFwLCBjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKik7CiAKIC8qIEluaXRpYWxpemUgYW5kIHJlbGVhc2Ug YSBiaXRtYXAgb2JzdGFjay4gICovCiBleHRlcm4gdm9pZCBiaXRtYXBfb2Jz dGFja19pbml0aWFsaXplIChiaXRtYXBfb2JzdGFjayAqKTsKQEAgLTI3NSw2 ICszNzIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQKIGJpdG1hcF9pbml0aWFs aXplX3N0YXQgKGJpdG1hcCBoZWFkLCBiaXRtYXBfb2JzdGFjayAqb2JzdGFj ayBNRU1fU1RBVF9ERUNMKQogewogICBoZWFkLT5maXJzdCA9IGhlYWQtPmN1 cnJlbnQgPSBOVUxMOworICBoZWFkLT5pbmR4ID0gaGVhZC0+dHJlZV9mb3Jt ID0gMDsKICAgaGVhZC0+b2JzdGFjayA9IG9ic3RhY2s7CiAgIGlmIChHQVRI RVJfU1RBVElTVElDUykKICAgICBiaXRtYXBfcmVnaXN0ZXIgKGhlYWQgUEFT U19NRU1fU1RBVCk7CkBAIC0yODksNyArMzg3LDcgQEAgZXh0ZXJuIGJpdG1h cCBiaXRtYXBfZ2NfYWxsb2Nfc3RhdCAoQUxPTgogZXh0ZXJuIHZvaWQgYml0 bWFwX29ic3RhY2tfZnJlZSAoYml0bWFwKTsKIAogLyogQSBmZXcgY29tcGF0 aWJpbGl0eS9mdW5jdGlvbnMgbWFjcm9zIGZvciBjb21wYXRpYmlsaXR5IHdp dGggc2JpdG1hcHMgKi8KLWlubGluZSB2b2lkIGR1bXBfYml0bWFwIChGSUxF ICpmaWxlLCBjb25zdF9iaXRtYXAgbWFwKQoraW5saW5lIHZvaWQgZHVtcF9i aXRtYXAgKEZJTEUgKmZpbGUsIGJpdG1hcCBtYXApCiB7CiAgIGJpdG1hcF9w cmludCAoZmlsZSwgbWFwLCAiIiwgIlxuIik7CiB9CkBAIC0zMzksNiArNDM3 LDggQEAgYm1wX2l0ZXJfc2V0X2luaXQgKGJpdG1hcF9pdGVyYXRvciAqYmks CiAgIGJpLT5lbHQxID0gbWFwLT5maXJzdDsKICAgYmktPmVsdDIgPSBOVUxM OwogCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFtYXAtPnRyZWVfZm9ybSk7 CisKICAgLyogQWR2YW5jZSBlbHQxIHVudGlsIGl0IGlzIG5vdCBiZWZvcmUg dGhlIGJsb2NrIGNvbnRhaW5pbmcgc3RhcnRfYml0LiAgKi8KICAgd2hpbGUg KDEpCiAgICAgewpAQCAtMzgxLDYgKzQ4MSw4IEBAIGJtcF9pdGVyX2FuZF9p bml0IChiaXRtYXBfaXRlcmF0b3IgKmJpLAogICBiaS0+ZWx0MSA9IG1hcDEt PmZpcnN0OwogICBiaS0+ZWx0MiA9IG1hcDItPmZpcnN0OwogCisgIGdjY19j aGVja2luZ19hc3NlcnQgKCFtYXAxLT50cmVlX2Zvcm0gJiYgIW1hcDItPnRy ZWVfZm9ybSk7CisKICAgLyogQWR2YW5jZSBlbHQxIHVudGlsIGl0IGlzIG5v dCBiZWZvcmUgdGhlIGJsb2NrIGNvbnRhaW5pbmcKICAgICAgc3RhcnRfYml0 LiAgKi8KICAgd2hpbGUgKDEpCkBAIC00MzksOCArNTQxLDcgQEAgYm1wX2l0 ZXJfYW5kX2luaXQgKGJpdG1hcF9pdGVyYXRvciAqYmksCiAgICpiaXRfbm8g PSBzdGFydF9iaXQ7CiB9CiAKLS8qIEluaXRpYWxpemUgYW4gaXRlcmF0b3Ig dG8gaXRlcmF0ZSBvdmVyIHRoZSBiaXRzIGluIE1BUDEgJiB+TUFQMi4KLSAg ICovCisvKiBJbml0aWFsaXplIGFuIGl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3Zl ciB0aGUgYml0cyBpbiBNQVAxICYgfk1BUDIuICAqLwogCiBzdGF0aWMgaW5s aW5lIHZvaWQKIGJtcF9pdGVyX2FuZF9jb21wbF9pbml0IChiaXRtYXBfaXRl cmF0b3IgKmJpLApAQCAtNDUwLDYgKzU1MSw4IEBAIGJtcF9pdGVyX2FuZF9j b21wbF9pbml0IChiaXRtYXBfaXRlcmF0b3IKICAgYmktPmVsdDEgPSBtYXAx LT5maXJzdDsKICAgYmktPmVsdDIgPSBtYXAyLT5maXJzdDsKIAorICBnY2Nf Y2hlY2tpbmdfYXNzZXJ0ICghbWFwMS0+dHJlZV9mb3JtICYmICFtYXAyLT50 cmVlX2Zvcm0pOworCiAgIC8qIEFkdmFuY2UgZWx0MSB1bnRpbCBpdCBpcyBu b3QgYmVmb3JlIHRoZSBibG9jayBjb250YWluaW5nIHN0YXJ0X2JpdC4gICov CiAgIHdoaWxlICgxKQogICAgIHsKSW5kZXg6IGJpdG1hcC5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGJpdG1hcC5jCShyZXZpc2lvbiAxOTY0MTAp CisrKyBiaXRtYXAuYwkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsMTAg QEAgc3RydWN0IGJpdG1hcF9kZXNjcmlwdG9yX2QKIHR5cGVkZWYgc3RydWN0 IGJpdG1hcF9kZXNjcmlwdG9yX2QgKmJpdG1hcF9kZXNjcmlwdG9yOwogdHlw ZWRlZiBjb25zdCBzdHJ1Y3QgYml0bWFwX2Rlc2NyaXB0b3JfZCAqY29uc3Rf Yml0bWFwX2Rlc2NyaXB0b3I7CiAKK3N0YXRpYyBiaXRtYXBfZWxlbWVudCAq Yml0bWFwX3RyZWVfbGlzdGlmeV9mcm9tIChiaXRtYXAsIGJpdG1hcF9lbGVt ZW50ICopOworCiAvKiBOZXh0IGF2YWlsYWJsZSB1bmlxdWUgaWQgbnVtYmVy IGZvciBiaXRtYXAgZGVzY2lwdG9ycy4gICovCi1zdGF0aWMgaW50IG5leHRf Yml0bWFwX2Rlc2NfaWQgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCBuZXh0 X2JpdG1hcF9kZXNjX2lkID0gMDsKIAogLyogVmVjdG9yIG1hcHBpbmcgZGVz Y3JpcHRvciBpZHMgdG8gZGVzY3JpcHRvcnMuICAqLwogc3RhdGljIHZlYzxi aXRtYXBfZGVzY3JpcHRvcj4gYml0bWFwX2Rlc2NyaXB0b3JzOwpAQCAtOTUs NiArOTcsMTEgQEAgZ2V0X2JpdG1hcF9kZXNjcmlwdG9yIChjb25zdCBjaGFy ICpmaWxlLAogICBpZiAoKnNsb3QpCiAgICAgcmV0dXJuICpzbG90OwogCisg IC8qIFRoZSBkZXNjcmlwdG9yIElEIGNhbiBiZSBhdCBtb3N0IDMxIGJpdHMg bG9uZywgYmVjYXVzZSB0aGUgbW9zdAorICAgICBzaWduaWZpY2FudCBvZiB0 aGUgKGhhbGYpd29yZCBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2RlIG9m CisgICAgIHRoZSBiaXRtYXAsIGkuZS4gd2hldGhlciBpdHMgY3VycmVudCBm b3JtIGlzIGxpc3Qgb3IgdHJlZS4gICovCisgIGdjY19hc3NlcnQgKG5leHRf Yml0bWFwX2Rlc2NfaWQgPCAoKHVuc2lnbmVkKSAxIDw8IDMxKSAtIDEpOwor CiAgICpzbG90ID0gWENORVcgKHN0cnVjdCBiaXRtYXBfZGVzY3JpcHRvcl9k KTsKICAgYml0bWFwX2Rlc2NyaXB0b3JzLnNhZmVfcHVzaCAoKnNsb3QpOwog ICAoKnNsb3QpLT5pZCA9IG5leHRfYml0bWFwX2Rlc2NfaWQrKzsKQEAgLTEz MywyMiArMTQwLDE4IEBAIHN0YXRpYyBpbnQgYml0bWFwX2RlZmF1bHRfb2Jz dGFja19kZXB0aDsKIHN0YXRpYyBHVFkoKGRlbGV0YWJsZSkpIGJpdG1hcF9l bGVtZW50ICpiaXRtYXBfZ2djX2ZyZWU7IC8qIEZyZWVsaXN0IG9mCiAJCQkJ CQkJICAgIEdDJ2QgZWxlbWVudHMuICAqLwogCi1zdGF0aWMgdm9pZCBiaXRt YXBfZWxlbV90b19mcmVlbGlzdCAoYml0bWFwLCBiaXRtYXBfZWxlbWVudCAq KTsKLXN0YXRpYyB2b2lkIGJpdG1hcF9lbGVtZW50X2ZyZWUgKGJpdG1hcCwg Yml0bWFwX2VsZW1lbnQgKik7Ci1zdGF0aWMgYml0bWFwX2VsZW1lbnQgKmJp dG1hcF9lbGVtZW50X2FsbG9jYXRlIChiaXRtYXApOwotc3RhdGljIGludCBi aXRtYXBfZWxlbWVudF96ZXJvcCAoY29uc3QgYml0bWFwX2VsZW1lbnQgKik7 Ci1zdGF0aWMgdm9pZCBiaXRtYXBfZWxlbWVudF9saW5rIChiaXRtYXAsIGJp dG1hcF9lbGVtZW50ICopOwotc3RhdGljIGJpdG1hcF9lbGVtZW50ICpiaXRt YXBfZWx0X2luc2VydF9hZnRlciAoYml0bWFwLCBiaXRtYXBfZWxlbWVudCAq LCB1bnNpZ25lZCBpbnQpOwotc3RhdGljIHZvaWQgYml0bWFwX2VsdF9jbGVh cl9mcm9tIChiaXRtYXAsIGJpdG1hcF9lbGVtZW50ICopOwotc3RhdGljIGJp dG1hcF9lbGVtZW50ICpiaXRtYXBfZmluZF9iaXQgKGJpdG1hcCwgdW5zaWdu ZWQgaW50KTsKIAwKKy8qIEJpdG1hcCBtZW1vcnkgbWFuYWdlbWVudC4gICov CiAKLS8qIEFkZCBFTEVNIHRvIHRoZSBhcHByb3ByaWF0ZSBmcmVlbGlzdC4g ICovCisvKiBBZGQgRUxUIHRvIHRoZSBhcHByb3ByaWF0ZSBmcmVlbGlzdC4g ICovCiBzdGF0aWMgaW5saW5lIHZvaWQKIGJpdG1hcF9lbGVtX3RvX2ZyZWVs aXN0IChiaXRtYXAgaGVhZCwgYml0bWFwX2VsZW1lbnQgKmVsdCkKIHsKICAg Yml0bWFwX29ic3RhY2sgKmJpdF9vYnN0YWNrID0gaGVhZC0+b2JzdGFjazsK IAorICBpZiAoR0FUSEVSX1NUQVRJU1RJQ1MpCisgICAgcmVnaXN0ZXJfb3Zl cmhlYWQgKGhlYWQsIC0oKGludClzaXplb2YgKGJpdG1hcF9lbGVtZW50KSkp OworCiAgIGVsdC0+bmV4dCA9IE5VTEw7CiAgIGlmIChiaXRfb2JzdGFjaykK ICAgICB7CkBAIC0xNjIsNDEgKzE2NSw2IEBAIGJpdG1hcF9lbGVtX3RvX2Zy ZWVsaXN0IChiaXRtYXAgaGVhZCwgYmkKICAgICB9CiB9CiAKLS8qIEZyZWUg YSBiaXRtYXAgZWxlbWVudC4gIFNpbmNlIHRoZXNlIGFyZSBhbGxvY2F0ZWQg b2ZmIHRoZQotICAgYml0bWFwX29ic3RhY2ssICJmcmVlIiBhY3R1YWxseSBt ZWFucyAicHV0IG9udG8gdGhlIGZyZWVsaXN0Ii4gICovCi0KLXN0YXRpYyBp bmxpbmUgdm9pZAotYml0bWFwX2VsZW1lbnRfZnJlZSAoYml0bWFwIGhlYWQs IGJpdG1hcF9lbGVtZW50ICplbHQpCi17Ci0gIGJpdG1hcF9lbGVtZW50ICpu ZXh0ID0gZWx0LT5uZXh0OwotICBiaXRtYXBfZWxlbWVudCAqcHJldiA9IGVs dC0+cHJldjsKLQotICBpZiAocHJldikKLSAgICBwcmV2LT5uZXh0ID0gbmV4 dDsKLQotICBpZiAobmV4dCkKLSAgICBuZXh0LT5wcmV2ID0gcHJldjsKLQot ICBpZiAoaGVhZC0+Zmlyc3QgPT0gZWx0KQotICAgIGhlYWQtPmZpcnN0ID0g bmV4dDsKLQotICAvKiBTaW5jZSB0aGUgZmlyc3QgdGhpbmcgd2UgdHJ5IGlz IHRvIGluc2VydCBiZWZvcmUgY3VycmVudCwKLSAgICAgbWFrZSBjdXJyZW50 IHRoZSBuZXh0IGVudHJ5IGluIHByZWZlcmVuY2UgdG8gdGhlIHByZXZpb3Vz LiAgKi8KLSAgaWYgKGhlYWQtPmN1cnJlbnQgPT0gZWx0KQotICAgIHsKLSAg ICAgIGhlYWQtPmN1cnJlbnQgPSBuZXh0ICE9IDAgPyBuZXh0IDogcHJldjsK LSAgICAgIGlmIChoZWFkLT5jdXJyZW50KQotCWhlYWQtPmluZHggPSBoZWFk LT5jdXJyZW50LT5pbmR4OwotICAgICAgZWxzZQotCWhlYWQtPmluZHggPSAw OwotICAgIH0KLQotICBpZiAoR0FUSEVSX1NUQVRJU1RJQ1MpCi0gICAgcmVn aXN0ZXJfb3ZlcmhlYWQgKGhlYWQsIC0oKGludClzaXplb2YgKGJpdG1hcF9l bGVtZW50KSkpOwotCi0gIGJpdG1hcF9lbGVtX3RvX2ZyZWVsaXN0IChoZWFk LCBlbHQpOwotfQotDAogLyogQWxsb2NhdGUgYSBiaXRtYXAgZWxlbWVudC4g IFRoZSBiaXRzIGFyZSBjbGVhcmVkLCBidXQgbm90aGluZyBlbHNlIGlzLiAg Ki8KIAogc3RhdGljIGlubGluZSBiaXRtYXBfZWxlbWVudCAqCkBAIC0yNDks NyArMjE3LDggQEAgYml0bWFwX2VsZW1lbnRfYWxsb2NhdGUgKGJpdG1hcCBo ZWFkKQogICByZXR1cm4gZWxlbWVudDsKIH0KIAotLyogUmVtb3ZlIEVMVCBh bmQgYWxsIGZvbGxvd2luZyBlbGVtZW50cyBmcm9tIGJpdG1hcCBIRUFELiAg Ki8KKy8qIFJlbW92ZSBFTFQgYW5kIGFsbCBmb2xsb3dpbmcgZWxlbWVudHMg ZnJvbSBiaXRtYXAgSEVBRC4KKyAgIFB1dCB0aGUgcmVsZWFzZWQgZWxlbWVu dHMgaW4gdGhlIGZyZWVsaXN0IGZvciBIRUFELiAgKi8KIAogdm9pZAogYml0 bWFwX2VsdF9jbGVhcl9mcm9tIChiaXRtYXAgaGVhZCwgYml0bWFwX2VsZW1l bnQgKmVsdCkKQEAgLTI1Nyw3ICsyMjYsMTEgQEAgYml0bWFwX2VsdF9jbGVh cl9mcm9tIChiaXRtYXAgaGVhZCwgYml0bQogICBiaXRtYXBfZWxlbWVudCAq cHJldjsKICAgYml0bWFwX29ic3RhY2sgKmJpdF9vYnN0YWNrID0gaGVhZC0+ b2JzdGFjazsKIAotICBpZiAoIWVsdCkgcmV0dXJuOworICBpZiAoIWVsdCkK KyAgICByZXR1cm47CisKKyAgaWYgKGhlYWQtPnRyZWVfZm9ybSkKKyAgICBl bHQgPSBiaXRtYXBfdHJlZV9saXN0aWZ5X2Zyb20gKGhlYWQsIGVsdCk7CiAK ICAgaWYgKEdBVEhFUl9TVEFUSVNUSUNTKQogICAgIHsKQEAgLTI4NCw3ICsy NTcsNyBAQCBiaXRtYXBfZWx0X2NsZWFyX2Zyb20gKGJpdG1hcCBoZWFkLCBi aXRtCiAgICAgICBoZWFkLT5pbmR4ID0gMDsKICAgICB9CiAKLSAgLyogUHV0 IHRoZSBlbnRpcmUgbGlzdCBvbnRvIHRoZSBmcmVlIGxpc3QgaW4gb25lIG9w ZXJhdGlvbi4gKi8KKyAgLyogUHV0IHRoZSBlbnRpcmUgbGlzdCBvbnRvIHRo ZSBmcmVlbGlzdCBpbiBvbmUgb3BlcmF0aW9uLiAqLwogICBpZiAoYml0X29i c3RhY2spCiAgICAgewogICAgICAgZWx0LT5wcmV2ID0gYml0X29ic3RhY2st PmVsZW1lbnRzOwpAQCAtMjk2LDE0ICsyNjksNDgyIEBAIGJpdG1hcF9lbHRf Y2xlYXJfZnJvbSAoYml0bWFwIGhlYWQsIGJpdG0KICAgICAgIGJpdG1hcF9n Z2NfZnJlZSA9IGVsdDsKICAgICB9CiB9CisMCisvKiBMaW5rZWQtbGlzdCB2 aWV3IG9mIGJpdG1hcHMuCisKKyAgIEluIHRoaXMgcmVwcmVzZW50YXRpb24s IHRoZSBiaXRtYXAgZWxlbWVudHMgZm9ybSBhIGRvdWJsZS1saW5rZWQgbGlz dAorICAgd2l0aCBlbGVtZW50cyBzb3J0ZWQgYnkgaW5jcmVhc2luZyBpbmRl eC4gICovCisKKy8qIExpbmsgdGhlIGJpdG1hcCBlbGVtZW50IGludG8gdGhl IGN1cnJlbnQgYml0bWFwIGxpbmtlZCBsaXN0LiAgKi8KKworc3RhdGljIGlu bGluZSB2b2lkCitiaXRtYXBfbGlzdF9saW5rX2VsZW1lbnQgKGJpdG1hcCBo ZWFkLCBiaXRtYXBfZWxlbWVudCAqZWxlbWVudCkKK3sKKyAgdW5zaWduZWQg aW50IGluZHggPSBlbGVtZW50LT5pbmR4OworICBiaXRtYXBfZWxlbWVudCAq cHRyOworCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFoZWFkLT50cmVlX2Zv cm0pOworCisgIC8qIElmIHRoaXMgaXMgdGhlIGZpcnN0IGFuZCBvbmx5IGVs ZW1lbnQsIHNldCBpdCBpbi4gICovCisgIGlmIChoZWFkLT5maXJzdCA9PSAw KQorICAgIHsKKyAgICAgIGVsZW1lbnQtPm5leHQgPSBlbGVtZW50LT5wcmV2 ID0gMDsKKyAgICAgIGhlYWQtPmZpcnN0ID0gZWxlbWVudDsKKyAgICB9CisK KyAgLyogSWYgdGhpcyBpbmRleCBpcyBsZXNzIHRoYW4gdGhhdCBvZiB0aGUg Y3VycmVudCBlbGVtZW50LCBpdCBnb2VzIHNvbWVwbGFjZQorICAgICBiZWZv cmUgdGhlIGN1cnJlbnQgZWxlbWVudC4gICovCisgIGVsc2UgaWYgKGluZHgg PCBoZWFkLT5pbmR4KQorICAgIHsKKyAgICAgIGZvciAocHRyID0gaGVhZC0+ Y3VycmVudDsKKwkgICBwdHItPnByZXYgIT0gMCAmJiBwdHItPnByZXYtPmlu ZHggPiBpbmR4OworCSAgIHB0ciA9IHB0ci0+cHJldikKKwk7CisKKyAgICAg IGlmIChwdHItPnByZXYpCisJcHRyLT5wcmV2LT5uZXh0ID0gZWxlbWVudDsK KyAgICAgIGVsc2UKKwloZWFkLT5maXJzdCA9IGVsZW1lbnQ7CisKKyAgICAg IGVsZW1lbnQtPnByZXYgPSBwdHItPnByZXY7CisgICAgICBlbGVtZW50LT5u ZXh0ID0gcHRyOworICAgICAgcHRyLT5wcmV2ID0gZWxlbWVudDsKKyAgICB9 CisKKyAgLyogT3RoZXJ3aXNlLCBpdCBtdXN0IGdvIHNvbWVwbGFjZSBhZnRl ciB0aGUgY3VycmVudCBlbGVtZW50LiAgKi8KKyAgZWxzZQorICAgIHsKKyAg ICAgIGZvciAocHRyID0gaGVhZC0+Y3VycmVudDsKKwkgICBwdHItPm5leHQg IT0gMCAmJiBwdHItPm5leHQtPmluZHggPCBpbmR4OworCSAgIHB0ciA9IHB0 ci0+bmV4dCkKKwk7CisKKyAgICAgIGlmIChwdHItPm5leHQpCisJcHRyLT5u ZXh0LT5wcmV2ID0gZWxlbWVudDsKKworICAgICAgZWxlbWVudC0+bmV4dCA9 IHB0ci0+bmV4dDsKKyAgICAgIGVsZW1lbnQtPnByZXYgPSBwdHI7CisgICAg ICBwdHItPm5leHQgPSBlbGVtZW50OworICAgIH0KKworICAvKiBTZXQgdXAg c28gdGhpcyBpcyB0aGUgZmlyc3QgZWxlbWVudCBzZWFyY2hlZC4gICovCisg IGhlYWQtPmN1cnJlbnQgPSBlbGVtZW50OworICBoZWFkLT5pbmR4ID0gaW5k eDsKK30KKworLyogVW5saW5rIHRoZSBiaXRtYXAgZWxlbWVudCBmcm9tIHRo ZSBjdXJyZW50IGJpdG1hcCBsaW5rZWQgbGlzdCwKKyAgIGFuZCByZXR1cm4g aXQgdG8gdGhlIGZyZWVsaXN0LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lk CitiaXRtYXBfbGlzdF91bmxpbmtfZWxlbWVudCAoYml0bWFwIGhlYWQsIGJp dG1hcF9lbGVtZW50ICplbGVtZW50KQoreworICBiaXRtYXBfZWxlbWVudCAq bmV4dCA9IGVsZW1lbnQtPm5leHQ7CisgIGJpdG1hcF9lbGVtZW50ICpwcmV2 ID0gZWxlbWVudC0+cHJldjsKKworICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICgh aGVhZC0+dHJlZV9mb3JtKTsKKworICBpZiAocHJldikKKyAgICBwcmV2LT5u ZXh0ID0gbmV4dDsKKworICBpZiAobmV4dCkKKyAgICBuZXh0LT5wcmV2ID0g cHJldjsKKworICBpZiAoaGVhZC0+Zmlyc3QgPT0gZWxlbWVudCkKKyAgICBo ZWFkLT5maXJzdCA9IG5leHQ7CisKKyAgLyogU2luY2UgdGhlIGZpcnN0IHRo aW5nIHdlIHRyeSBpcyB0byBpbnNlcnQgYmVmb3JlIGN1cnJlbnQsCisgICAg IG1ha2UgY3VycmVudCB0aGUgbmV4dCBlbnRyeSBpbiBwcmVmZXJlbmNlIHRv IHRoZSBwcmV2aW91cy4gICovCisgIGlmIChoZWFkLT5jdXJyZW50ID09IGVs ZW1lbnQpCisgICAgeworICAgICAgaGVhZC0+Y3VycmVudCA9IG5leHQgIT0g MCA/IG5leHQgOiBwcmV2OworICAgICAgaWYgKGhlYWQtPmN1cnJlbnQpCisJ aGVhZC0+aW5keCA9IGhlYWQtPmN1cnJlbnQtPmluZHg7CisgICAgICBlbHNl CisJaGVhZC0+aW5keCA9IDA7CisgICAgfQorCisgIGJpdG1hcF9lbGVtX3Rv X2ZyZWVsaXN0IChoZWFkLCBlbGVtZW50KTsKK30KKworLyogSW5zZXJ0IGEg bmV3IHVuaW5pdGlhbGl6ZWQgZWxlbWVudCBpbnRvIGJpdG1hcCBIRUFEIGFm dGVyIGVsZW1lbnQKKyAgIEVMVC4gIElmIEVMVCBpcyBOVUxMLCBpbnNlcnQg dGhlIGVsZW1lbnQgYXQgdGhlIHN0YXJ0LiAgUmV0dXJuIHRoZQorICAgbmV3 IGVsZW1lbnQuICAqLworCitzdGF0aWMgYml0bWFwX2VsZW1lbnQgKgorYml0 bWFwX2xpc3RfaW5zZXJ0X2VsZW1lbnRfYWZ0ZXIgKGJpdG1hcCBoZWFkLAor CQkJCSAgYml0bWFwX2VsZW1lbnQgKmVsdCwgdW5zaWduZWQgaW50IGluZHgp Cit7CisgIGJpdG1hcF9lbGVtZW50ICpub2RlID0gYml0bWFwX2VsZW1lbnRf YWxsb2NhdGUgKGhlYWQpOworICBub2RlLT5pbmR4ID0gaW5keDsKKworICBn Y2NfY2hlY2tpbmdfYXNzZXJ0ICghaGVhZC0+dHJlZV9mb3JtKTsKKworICBp ZiAoIWVsdCkKKyAgICB7CisgICAgICBpZiAoIWhlYWQtPmN1cnJlbnQpCisJ eworCSAgaGVhZC0+Y3VycmVudCA9IG5vZGU7CisJICBoZWFkLT5pbmR4ID0g aW5keDsKKwl9CisgICAgICBub2RlLT5uZXh0ID0gaGVhZC0+Zmlyc3Q7Cisg ICAgICBpZiAobm9kZS0+bmV4dCkKKwlub2RlLT5uZXh0LT5wcmV2ID0gbm9k ZTsKKyAgICAgIGhlYWQtPmZpcnN0ID0gbm9kZTsKKyAgICAgIG5vZGUtPnBy ZXYgPSBOVUxMOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGdjY19j aGVja2luZ19hc3NlcnQgKGhlYWQtPmN1cnJlbnQpOworICAgICAgbm9kZS0+ bmV4dCA9IGVsdC0+bmV4dDsKKyAgICAgIGlmIChub2RlLT5uZXh0KQorCW5v ZGUtPm5leHQtPnByZXYgPSBub2RlOworICAgICAgZWx0LT5uZXh0ID0gbm9k ZTsKKyAgICAgIG5vZGUtPnByZXYgPSBlbHQ7CisgICAgfQorICByZXR1cm4g bm9kZTsKK30KKworLyogUmV0dXJuIHRoZSBlbGVtZW50IGZvciBJTkRYLCBv ciBOVUxMIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgZXhpc3QuICAqLworCitz dGF0aWMgaW5saW5lIGJpdG1hcF9lbGVtZW50ICoKK2JpdG1hcF9saXN0X2Zp bmRfZWxlbWVudCAoYml0bWFwIGhlYWQsIHVuc2lnbmVkIGludCBpbmR4KQor eworICBiaXRtYXBfZWxlbWVudCAqZWxlbWVudDsKKyAgaWYgKGhlYWQtPmlu ZHggPCBpbmR4KQorICAgIC8qIElORFggaXMgYmV5b25kIGhlYWQtPmluZHgu ICBTZWFyY2ggZnJvbSBoZWFkLT5jdXJyZW50CisgICAgICAgZm9yd2FyZC4g ICovCisgICAgZm9yIChlbGVtZW50ID0gaGVhZC0+Y3VycmVudDsKKwkgZWxl bWVudC0+bmV4dCAhPSAwICYmIGVsZW1lbnQtPmluZHggPCBpbmR4OworCSBl bGVtZW50ID0gZWxlbWVudC0+bmV4dCkKKyAgICAgIHsKKwlpZiAoR0FUSEVS X1NUQVRJU1RJQ1MpCisJICBiaXRtYXBfZGVzY3JpcHRvcnNbaGVhZC0+ZGVz Y3JpcHRvcl9pZF0tPnNlYXJjaF9pdGVyKys7CisgICAgICB9CisKKyAgZWxz ZSBpZiAoaGVhZC0+aW5keCAvIDIgPCBpbmR4KQorICAgIC8qIElORFggaXMg bGVzcyB0aGFuIGhlYWQtPmluZHggYW5kIGNsb3NlciB0byBoZWFkLT5pbmR4 IHRoYW4gdG8KKyAgICAgICAwLiAgU2VhcmNoIGZyb20gaGVhZC0+Y3VycmVu dCBiYWNrd2FyZC4gICovCisgICAgZm9yIChlbGVtZW50ID0gaGVhZC0+Y3Vy cmVudDsKKwkgZWxlbWVudC0+cHJldiAhPSAwICYmIGVsZW1lbnQtPmluZHgg PiBpbmR4OworCSBlbGVtZW50ID0gZWxlbWVudC0+cHJldikKKyAgICAgIHsK KwlpZiAoR0FUSEVSX1NUQVRJU1RJQ1MpCisJICBiaXRtYXBfZGVzY3JpcHRv cnNbaGVhZC0+ZGVzY3JpcHRvcl9pZF0tPnNlYXJjaF9pdGVyKys7CisgICAg ICB9CisKKyAgZWxzZQorICAgIC8qIElORFggaXMgbGVzcyB0aGFuIGhlYWQt PmluZHggYW5kIGNsb3NlciB0byAwIHRoYW4gdG8KKyAgICAgICBoZWFkLT5p bmR4LiAgU2VhcmNoIGZyb20gaGVhZC0+Zmlyc3QgZm9yd2FyZC4gICovCisg ICAgZm9yIChlbGVtZW50ID0gaGVhZC0+Zmlyc3Q7CisJIGVsZW1lbnQtPm5l eHQgIT0gMCAmJiBlbGVtZW50LT5pbmR4IDwgaW5keDsKKwkgZWxlbWVudCA9 IGVsZW1lbnQtPm5leHQpCisgICAgICBpZiAoR0FUSEVSX1NUQVRJU1RJQ1Mp CisJeworCSAgYml0bWFwX2Rlc2NyaXB0b3JzW2hlYWQtPmRlc2NyaXB0b3Jf aWRdLT5zZWFyY2hfaXRlcisrOworCX0KKworICAvKiBgZWxlbWVudCcgaXMg dGhlIG5lYXJlc3QgdG8gdGhlIG9uZSB3ZSB3YW50LiAgSWYgaXQncyBub3Qg dGhlIG9uZSB3ZQorICAgICB3YW50LCB0aGUgb25lIHdlIHdhbnQgZG9lc24n dCBleGlzdC4gICovCisgIGdjY19jaGVja2luZ19hc3NlcnQgKGVsZW1lbnQg IT0gTlVMTCk7CisgIGhlYWQtPmN1cnJlbnQgPSBlbGVtZW50OworICBoZWFk LT5pbmR4ID0gZWxlbWVudC0+aW5keDsKKyAgaWYgKGVsZW1lbnQtPmluZHgg IT0gaW5keCkKKyAgICBlbGVtZW50ID0gMDsKKyAgcmV0dXJuIGVsZW1lbnQ7 Cit9CisKKwwKKy8qIFNwbGF5LXRyZWUgdmlldyBvZiBiaXRtYXBzLgorCisg ICBUaGlzIGlzIGFuIGFsbW9zdCBvbmUtdG8tb25lIHRoZSBpbXBsZW1lbnRh dGluIG9mIHRoZSBzaW1wbGUgdG9wLWRvd24KKyAgIHNwbGF5IHRyZWUgaW4g U2xlYXRvciBhbmQgVGFyamFuJ3MgIlNlbGYtYWRqdXN0aW5nIEJpbmFyeSBT ZWFyY2ggVHJlZXMiLgorICAgSXQgaXMgcHJvYmFibHkgbm90IHRoZSBtb3N0 IGVmZmljaWVudCBmb3JtIG9mIHNwbGF5IHRyZWVzLCBidXQgaXQgc2hvdWxk CisgICBiZSBnb29kIGVub3VnaCB0byBleHBlcmltZW50IHdpdGggdGhpcyBp ZGVhIG9mIGJpdG1hcHMtYXMtdHJlZXMuCisgICAKKyAgIEZvciBhbGwgZnVu Y3Rpb25zIGJlbG93LCB0aGUgdmFyaWFibGUgb3IgZnVuY3Rpb24gYXJndW1l bnQgInQiIGlzIGEgbm9kZQorICAgaW4gdGhlIHRyZWUsIGFuZCAiZSIgaXMg YSB0ZW1wb3Jhcnkgb3IgbmV3IG5vZGUgaW4gdGhlIHRyZWUuICBUaGUgcmVz dAorICAgaXMgc3VmZmljaWVudGx5IHN0cmFpZ2gtZm9yd2FyZCAoYW5kIHZl cnkgd2VsbCBleHBsYWluZWQgaW4gdGhlIHBhcGVyKQorICAgdGhhdCBjb21t ZW50IHdvdWxkIG9ubHkgY2x1dHRlciB0aGluZ3MuICAqLworCitzdGF0aWMg aW5saW5lIHZvaWQKK2JpdG1hcF90cmVlX2xpbmtfbGVmdCAoYml0bWFwX2Vs ZW1lbnQgKiAmdCwgYml0bWFwX2VsZW1lbnQgKiAmbCkKK3sKKyAgbC0+bmV4 dCA9IHQ7CisgIGwgPSB0OworICB0ID0gdC0+bmV4dDsKK30KKworc3RhdGlj IGlubGluZSB2b2lkCitiaXRtYXBfdHJlZV9saW5rX3JpZ2h0IChiaXRtYXBf ZWxlbWVudCAqICZ0LCBiaXRtYXBfZWxlbWVudCAqICZyKQoreworICByLT5w cmV2ID0gdDsKKyAgciA9IHQ7CisgIHQgPSB0LT5wcmV2OworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQKK2JpdG1hcF90cmVlX3JvdGF0ZV9sZWZ0IChiaXRt YXBfZWxlbWVudCAqICZ0KQoreworICBiaXRtYXBfZWxlbWVudCAqZSA9IHQt Pm5leHQ7CisgIHQtPm5leHQgPSB0LT5uZXh0LT5wcmV2OworICBlLT5wcmV2 ID0gdDsKKyAgdCA9IGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYml0 bWFwX3RyZWVfcm90YXRlX3JpZ2h0IChiaXRtYXBfZWxlbWVudCAqICZ0KQor eworICBiaXRtYXBfZWxlbWVudCAqZSA9IHQtPnByZXY7CisgIHQtPnByZXYg PSB0LT5wcmV2LT5uZXh0OworICBlLT5uZXh0ID0gdDsKKyAgdCA9IGU7Cit9 CisKK3N0YXRpYyBiaXRtYXBfZWxlbWVudCAqCitiaXRtYXBfdHJlZV9zcGxh eSAoYml0bWFwIGhlYWQsIGJpdG1hcF9lbGVtZW50ICp0LCB1bnNpZ25lZCBp bnQgaW5keCkKK3sKKyAgYml0bWFwX2VsZW1lbnQgTiwgKmwsICpyOworCisg IGlmICh0ID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgTi5wcmV2 ID0gTi5uZXh0ID0gTlVMTDsKKyAgbCA9IHIgPSAmTjsKKworICB3aGlsZSAo aW5keCAhPSB0LT5pbmR4KQorICAgIHsKKyAgICAgIGlmIChHQVRIRVJfU1RB VElTVElDUykKKwliaXRtYXBfZGVzY3JpcHRvcnNbaGVhZC0+ZGVzY3JpcHRv cl9pZF0tPnNlYXJjaF9pdGVyKys7CisKKyAgICAgIGlmIChpbmR4IDwgdC0+ aW5keCkKKwl7CisJICBpZiAodC0+cHJldiAhPSBOVUxMICYmIGluZHggPCB0 LT5wcmV2LT5pbmR4KQorCSAgICBiaXRtYXBfdHJlZV9yb3RhdGVfcmlnaHQg KHQpOworCSAgaWYgKHQtPnByZXYgPT0gTlVMTCkKKwkgICAgYnJlYWs7CisJ ICBiaXRtYXBfdHJlZV9saW5rX3JpZ2h0ICh0LCByKTsKKwl9CisgICAgICBl bHNlIGlmIChpbmR4ID4gdC0+aW5keCkKKwl7CisJICBpZiAodC0+bmV4dCAh PSBOVUxMICYmIGluZHggPiB0LT5uZXh0LT5pbmR4KQorCSAgICBiaXRtYXBf dHJlZV9yb3RhdGVfbGVmdCAodCk7CisJICBpZiAodC0+bmV4dCA9PSBOVUxM KQorCSAgICBicmVhazsKKwkgIGJpdG1hcF90cmVlX2xpbmtfbGVmdCAodCwg bCk7CisJfQorICAgIH0KKworICBsLT5uZXh0ID0gdC0+cHJldjsKKyAgci0+ cHJldiA9IHQtPm5leHQ7CisgIHQtPnByZXYgPSBOLm5leHQ7CisgIHQtPm5l eHQgPSBOLnByZXY7CisgIHJldHVybiB0OworfQorCisvKiBMaW5rIGJpdG1h cCBlbGVtZW50IEUgaW50byB0aGUgY3VycmVudCBiaXRtYXAgc3BsYXkgdHJl ZS4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYml0bWFwX3RyZWVfbGlu a19lbGVtZW50IChiaXRtYXAgaGVhZCwgYml0bWFwX2VsZW1lbnQgKmUpCit7 CisgIGlmIChoZWFkLT5maXJzdCA9PSBOVUxMKQorICAgIGUtPnByZXYgPSBl LT5uZXh0ID0gTlVMTDsKKyAgZWxzZQorICAgIHsKKyAgICAgIGJpdG1hcF9l bGVtZW50ICp0ID0gYml0bWFwX3RyZWVfc3BsYXkgKGhlYWQsIGhlYWQtPmZp cnN0LCBlLT5pbmR4KTsKKyAgICAgIGlmIChlLT5pbmR4IDwgdC0+aW5keCkK Kwl7CisJICBlLT5wcmV2ID0gdC0+cHJldjsKKwkgIGUtPm5leHQgPSB0Owor CSAgdC0+cHJldiA9IE5VTEw7CisJfQorICAgICAgZWxzZSBpZiAoZS0+aW5k eCA+IHQtPmluZHgpCisJeworCSAgZS0+bmV4dCA9IHQtPm5leHQ7CisJICBl LT5wcmV2ID0gdDsKKwkgIHQtPm5leHQgPSBOVUxMOworCX0KKyAgICAgIGVs c2UKKwlnY2NfdW5yZWFjaGFibGUgKCk7CisgICAgfQorICBoZWFkLT5maXJz dCA9IGU7CisgIGhlYWQtPmN1cnJlbnQgPSBlOworICBoZWFkLT5pbmR4ID0g ZS0+aW5keDsKK30KKworLyogVW5saW5rIGJpdG1hcCBlbGVtZW50IEUgZnJv bSB0aGUgY3VycmVudCBiaXRtYXAgc3BsYXkgdHJlZSwKKyAgIGFuZCByZXR1 cm4gaXQgdG8gdGhlIGZyZWVsaXN0LiAgKi8KKworc3RhdGljIHZvaWQKK2Jp dG1hcF90cmVlX3VubGlua19lbGVtZW50IChiaXRtYXAgaGVhZCwgYml0bWFw X2VsZW1lbnQgKmUpCit7CisgIGJpdG1hcF9lbGVtZW50ICp0ID0gYml0bWFw X3RyZWVfc3BsYXkgKGhlYWQsIGhlYWQtPmZpcnN0LCBlLT5pbmR4KTsKKwor ICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICh0ID09IGUpOworCisgIGlmIChlLT5w cmV2ID09IE5VTEwpCisgICAgdCA9IGUtPm5leHQ7CisgIGVsc2UKKyAgICB7 CisgICAgICB0ID0gYml0bWFwX3RyZWVfc3BsYXkgKGhlYWQsIGUtPnByZXYs IGUtPmluZHgpOworICAgICAgdC0+bmV4dCA9IGUtPm5leHQ7CisgICAgfQor ICBoZWFkLT5maXJzdCA9IHQ7CisgIGhlYWQtPmN1cnJlbnQgPSB0OworICBo ZWFkLT5pbmR4ID0gKHQgIT0gTlVMTCkgPyB0LT5pbmR4IDogMDsKKworICBi aXRtYXBfZWxlbV90b19mcmVlbGlzdCAoaGVhZCwgZSk7Cit9CisKKy8qIFJl dHVybiB0aGUgZWxlbWVudCBmb3IgSU5EWCwgb3IgTlVMTCBpZiB0aGUgZWxl bWVudCBkb2Vzbid0IGV4aXN0LiAgKi8KKworc3RhdGljIGlubGluZSBiaXRt YXBfZWxlbWVudCAqCitiaXRtYXBfdHJlZV9maW5kX2VsZW1lbnQgKGJpdG1h cCBoZWFkLCB1bnNpZ25lZCBpbnQgaW5keCkKK3sKKyAgYml0bWFwX2VsZW1l bnQgKmVsZW1lbnQgPSBiaXRtYXBfdHJlZV9zcGxheSAoaGVhZCwgaGVhZC0+ Zmlyc3QsIGluZHgpOworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChlbGVtZW50 ICE9IE5VTEwpOworICBoZWFkLT5maXJzdCA9IGVsZW1lbnQ7CisgIGhlYWQt PmN1cnJlbnQgPSBlbGVtZW50OworICBoZWFkLT5pbmR4ID0gZWxlbWVudC0+ aW5keDsKKyAgaWYgKGVsZW1lbnQtPmluZHggIT0gaW5keCkKKyAgICBlbGVt ZW50ID0gMDsKKyAgcmV0dXJuIGVsZW1lbnQ7Cit9CisMCisvKiBDb252ZXJ0 aW5nIGJpdG1hcCB2aWV3cyBmcm9tIGxpbmtlZC1saXN0IHRvIHRyZWUgYW5k IHZpY2UgdmVyc2EuICAqLworCisvKiBTcGxpY2UgZWxlbWVudCBFIGFuZCBh bGwgZWxlbWVudHMgd2l0aCBhIGxhcmdlciBpbmRleCBmcm9tCisgICBiaXRt YXAgSEVBRCwgY29udmVydCB0aGUgc3BsaWNlZCBlbGVtZW50cyB0byB0aGUg bGlua2VkLWxpc3QKKyAgIHZpZXcsIGFuZCByZXR1cm4gdGhlIGhlYWQgb2Yg dGhlIGxpc3QgKHdoaWNoIHNob3VsZCBiZSBFIGFnYWluKSwgICovCisKK3N0 YXRpYyBiaXRtYXBfZWxlbWVudCAqCitiaXRtYXBfdHJlZV9saXN0aWZ5X2Zy b20gKGJpdG1hcCBoZWFkLCBiaXRtYXBfZWxlbWVudCAqZSkKK3sKKyAgYml0 bWFwX2VsZW1lbnQgKnQsICplcmI7CisKKyAgLyogRGV0YWNoIHRoZSByaWdo dCBicmFuY2ggZnJvbSBFIChhbGwgZWxlbWVudHMgd2l0aCBpbmR4ID4gRS0+ aW5keCksCisgICAgIGFuZCBzcGxheSBFIHRvIHRoZSByb290LiAgKi8KKyAg ZXJiID0gZS0+bmV4dDsKKyAgZS0+bmV4dCA9IE5VTEw7CisgIHQgPSBiaXRt YXBfdHJlZV9zcGxheSAoaGVhZCwgaGVhZC0+Zmlyc3QsIGUtPmluZHgpOwor ICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICh0ID09IGUpOworCisgIGlmIChlLT5w cmV2ID09IE5VTEwpCisgICAgdCA9IGUtPm5leHQ7CisgIGVsc2UKKyAgICB7 CisgICAgICB0ID0gYml0bWFwX3RyZWVfc3BsYXkgKGhlYWQsIGUtPnByZXYs IGUtPmluZHgpOworICAgICAgdC0+bmV4dCA9IGUtPm5leHQ7CisgICAgfQor ICBoZWFkLT5maXJzdCA9IHQ7CisgIGhlYWQtPmN1cnJlbnQgPSB0OworICBo ZWFkLT5pbmR4ID0gKHQgIT0gTlVMTCkgPyB0LT5pbmR4IDogMDsKKworICBn Y2NfYXNzZXJ0IChlLT5wcmV2ID09IE5VTEwpOworICBlLT5uZXh0ID0gZXJi OworCisgIC8qIFRoZSB0cmVlIGlzIG5vdyB2YWxpZCBhZ2Fpbi4gIE5vdyB3 ZSBuZWVkIHRvICJ1bi10cmVlIiBFLgorICAgICBJdCBpcyBpbXBlcmF0aXZl IHRoYXQgYSBub24tcmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIGlzIHVzZWQK KyAgICAgZm9yIHRoaXMsIGJlY2F1c2Ugc3BsYXkgdHJlZXMgaGF2ZSBhIHdv cnN0IGNhc2UgZGVwdGggb2YgTyhFKS4KKyAgICAgQSByZWN1cnNpdmUgaW1w bGVtZW50YXRpb24gd291bGQgcmVzdWx0IGluIGEgc3RhY2sgb3ZlcmZsb3cK KyAgICAgZm9yIGEgc3VmZmljaWVudGx5IGxhcmdlLCB1bmJhbGFuY2VkIGJp dG1hcCB0cmVlLiAgKi8KKyAgdmVjPGJpdG1hcF9lbGVtZW50ICo+IHN0YWNr ID0gdk5VTEw7CisgIHZlYzxiaXRtYXBfZWxlbWVudCAqPiBzb3J0ZWRfZWxl bWVudHMgPSB2TlVMTDsKKyAgYml0bWFwX2VsZW1lbnQgKm4gPSBlOworCisg IHdoaWxlICh0cnVlKQorICAgIHsKKyAgICAgIHdoaWxlIChuICE9IE5VTEwp CisJeworCSAgc3RhY2suc2FmZV9wdXNoIChuKTsKKwkgIG4gPSBuLT5wcmV2 OworCX0KKworICAgICAgaWYgKHN0YWNrLmlzX2VtcHR5ICgpKQorCWJyZWFr OworCisgICAgICBuID0gc3RhY2sucG9wICgpOworICAgICAgc29ydGVkX2Vs ZW1lbnRzLnNhZmVfcHVzaCAobik7CisgICAgICBuID0gbi0+bmV4dDsKKyAg ICB9CisgIHN0YWNrLnJlbGVhc2UgKCk7CisKKyAgZ2NjX2Fzc2VydCAoc29y dGVkX2VsZW1lbnRzWzBdID09IGUpOworCisgIGJpdG1hcF9lbGVtZW50ICpw cmV2ID0gTlVMTDsKKyAgdW5zaWduZWQgaXg7CisgIEZPUl9FQUNIX1ZFQ19F TFQgKHNvcnRlZF9lbGVtZW50cywgaXgsIG4pCisgICAgeworICAgICAgaWYg KHByZXYgIT0gTlVMTCkKKyAgICAgICAgcHJldi0+bmV4dCA9IG47CisgICAg ICBuLT5wcmV2ID0gcHJldjsKKyAgICAgIG4tPm5leHQgPSBOVUxMOworICAg IH0KKyAgc29ydGVkX2VsZW1lbnRzLnJlbGVhc2UgKCk7CisKKyAgcmV0dXJu IGU7Cit9CiAKLS8qIENsZWFyIGEgYml0bWFwIGJ5IGZyZWVpbmcgdGhlIGxp bmtlZCBsaXN0LiAgKi8KKy8qIENvbnZlcnQgYml0bWFwIEhFQUQgZnJvbSBz cGxheS10cmVlIHZpZXcgdG8gbGlua2VkLWxpc3Qgdmlldy4gICovCisKK3Zv aWQKK2JpdG1hcF9saXN0X3ZpZXcgKGJpdG1hcCBoZWFkKQoreworICBiaXRt YXBfZWxlbWVudCAqcHRyOworCisgIGhlYWQtPnRyZWVfZm9ybSA9IDA7Cisg IGlmICghIGhlYWQtPmZpcnN0KQorICAgIHJldHVybjsKKworICBwdHIgPSBo ZWFkLT5maXJzdDsKKyAgd2hpbGUgKHB0ci0+cHJldikKKyAgICBwdHIgPSBw dHItPnByZXY7CisgIGhlYWQtPmZpcnN0ID0gYml0bWFwX3RyZWVfbGlzdGlm eV9mcm9tIChoZWFkLCBwdHIpOworCisgIGhlYWQtPmN1cnJlbnQgPSBoZWFk LT5maXJzdDsKKyAgaGVhZC0+aW5keCA9IGhlYWQtPmZpcnN0LT5pbmR4Owor fQorCisvKiBDb252ZXJ0IGJpdG1hcCBIRUFEIGZyb20gbGlua2VkLWxpc3Qg dmlldyB0byBzcGxheS10cmVlIHZpZXcuCisgICBUaGlzIGlzIHNpbXBseSBh IG1hdHRlciBvZiBkcm9wcGluZyB0aGUgcHJldiBvciBuZXh0IHBvaW50ZXJz CisgICBhbmQgc2V0dGluZyB0aGUgdHJlZV9mb3JtIGZsYWcuICBUaGUgdHJl ZSB3aWxsIGJhbGFuY2UgaXRzZWxmCisgICBpZiBhbmQgd2hlbiBpdCBpcyB1 c2VkLiAgKi8KKwordm9pZAorYml0bWFwX3RyZWVfdmlldyAoYml0bWFwIGhl YWQpCit7CisgIGJpdG1hcF9lbGVtZW50ICpwdHI7CisKKyAgaGVhZC0+dHJl ZV9mb3JtID0gMTsKKyAgaWYgKCEgaGVhZC0+Zmlyc3QpCisgICAgcmV0dXJu OworCisgIHB0ciA9IGhlYWQtPmZpcnN0OworICB3aGlsZSAocHRyKQorICAg IHsKKyAgICAgIHB0ci0+cHJldiA9IE5VTEw7CisgICAgICBwdHIgPSBwdHIt Pm5leHQ7CisgICAgfQorICBoZWFkLT5jdXJyZW50ID0gaGVhZC0+Zmlyc3Q7 CisgIGhlYWQtPmluZHggPSBoZWFkLT5maXJzdC0+aW5keDsKK30KKwwKKy8q IENsZWFyIGEgYml0bWFwIGJ5IGZyZWVpbmcgYWxsIGl0cyBlbGVtZW50cy4g ICovCiAKIHZvaWQKIGJpdG1hcF9jbGVhciAoYml0bWFwIGhlYWQpCiB7Ci0g IGlmIChoZWFkLT5maXJzdCkKLSAgICBiaXRtYXBfZWx0X2NsZWFyX2Zyb20g KGhlYWQsIGhlYWQtPmZpcnN0KTsKKyAgaWYgKGhlYWQtPmZpcnN0ID09IE5V TEwpCisgICAgcmV0dXJuOworICBpZiAoaGVhZC0+dHJlZV9mb3JtKQorICAg IHsKKyAgICAgIGJpdG1hcF9lbGVtZW50ICplLCAqdDsKKyAgICAgIGZvciAo ZSA9IGhlYWQtPmZpcnN0OyBlLT5wcmV2OyBlID0gZS0+cHJldikKKwkvKiBM b29wIHRvIGZpbmQgdGhlIGVsZW1lbnQgd2l0aCB0aGUgc21hbGxlc3QgaW5k ZXguICAqLyA7CisgICAgICB0ID0gYml0bWFwX3RyZWVfc3BsYXkgKGhlYWQs IGhlYWQtPmZpcnN0LCBlLT5pbmR4KTsKKyAgICAgIGdjY19jaGVja2luZ19h c3NlcnQgKHQgPT0gZSk7CisgICAgICBoZWFkLT5maXJzdCA9IHQ7CisgICAg fQorICBiaXRtYXBfZWx0X2NsZWFyX2Zyb20gKGhlYWQsIGhlYWQtPmZpcnN0 KTsKIH0KIAwKIC8qIEluaXRpYWxpemUgYSBiaXRtYXAgb2JzdGFjay4gIElm IEJJVF9PQlNUQUNLIGlzIE5VTEwsIGluaXRpYWxpemUKQEAgLTQyNyw5NiAr ODY4LDYgQEAgYml0bWFwX2VsZW1lbnRfemVyb3AgKGNvbnN0IGJpdG1hcF9l bGVtZQogI2VuZGlmCiB9CiAMCi0vKiBMaW5rIHRoZSBiaXRtYXAgZWxlbWVu dCBpbnRvIHRoZSBjdXJyZW50IGJpdG1hcCBsaW5rZWQgbGlzdC4gICovCi0K LXN0YXRpYyBpbmxpbmUgdm9pZAotYml0bWFwX2VsZW1lbnRfbGluayAoYml0 bWFwIGhlYWQsIGJpdG1hcF9lbGVtZW50ICplbGVtZW50KQotewotICB1bnNp Z25lZCBpbnQgaW5keCA9IGVsZW1lbnQtPmluZHg7Ci0gIGJpdG1hcF9lbGVt ZW50ICpwdHI7Ci0KLSAgLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgYW5kIG9u bHkgZWxlbWVudCwgc2V0IGl0IGluLiAgKi8KLSAgaWYgKGhlYWQtPmZpcnN0 ID09IDApCi0gICAgewotICAgICAgZWxlbWVudC0+bmV4dCA9IGVsZW1lbnQt PnByZXYgPSAwOwotICAgICAgaGVhZC0+Zmlyc3QgPSBlbGVtZW50OwotICAg IH0KLQotICAvKiBJZiB0aGlzIGluZGV4IGlzIGxlc3MgdGhhbiB0aGF0IG9m IHRoZSBjdXJyZW50IGVsZW1lbnQsIGl0IGdvZXMgc29tZXBsYWNlCi0gICAg IGJlZm9yZSB0aGUgY3VycmVudCBlbGVtZW50LiAgKi8KLSAgZWxzZSBpZiAo aW5keCA8IGhlYWQtPmluZHgpCi0gICAgewotICAgICAgZm9yIChwdHIgPSBo ZWFkLT5jdXJyZW50OwotCSAgIHB0ci0+cHJldiAhPSAwICYmIHB0ci0+cHJl di0+aW5keCA+IGluZHg7Ci0JICAgcHRyID0gcHRyLT5wcmV2KQotCTsKLQot ICAgICAgaWYgKHB0ci0+cHJldikKLQlwdHItPnByZXYtPm5leHQgPSBlbGVt ZW50OwotICAgICAgZWxzZQotCWhlYWQtPmZpcnN0ID0gZWxlbWVudDsKLQot ICAgICAgZWxlbWVudC0+cHJldiA9IHB0ci0+cHJldjsKLSAgICAgIGVsZW1l bnQtPm5leHQgPSBwdHI7Ci0gICAgICBwdHItPnByZXYgPSBlbGVtZW50Owot ICAgIH0KLQotICAvKiBPdGhlcndpc2UsIGl0IG11c3QgZ28gc29tZXBsYWNl IGFmdGVyIHRoZSBjdXJyZW50IGVsZW1lbnQuICAqLwotICBlbHNlCi0gICAg ewotICAgICAgZm9yIChwdHIgPSBoZWFkLT5jdXJyZW50OwotCSAgIHB0ci0+ bmV4dCAhPSAwICYmIHB0ci0+bmV4dC0+aW5keCA8IGluZHg7Ci0JICAgcHRy ID0gcHRyLT5uZXh0KQotCTsKLQotICAgICAgaWYgKHB0ci0+bmV4dCkKLQlw dHItPm5leHQtPnByZXYgPSBlbGVtZW50OwotCi0gICAgICBlbGVtZW50LT5u ZXh0ID0gcHRyLT5uZXh0OwotICAgICAgZWxlbWVudC0+cHJldiA9IHB0cjsK LSAgICAgIHB0ci0+bmV4dCA9IGVsZW1lbnQ7Ci0gICAgfQotCi0gIC8qIFNl dCB1cCBzbyB0aGlzIGlzIHRoZSBmaXJzdCBlbGVtZW50IHNlYXJjaGVkLiAg Ki8KLSAgaGVhZC0+Y3VycmVudCA9IGVsZW1lbnQ7Ci0gIGhlYWQtPmluZHgg PSBpbmR4OwotfQotCi0vKiBJbnNlcnQgYSBuZXcgdW5pbml0aWFsaXplZCBl bGVtZW50IGludG8gYml0bWFwIEhFQUQgYWZ0ZXIgZWxlbWVudAotICAgRUxU LiAgSWYgRUxUIGlzIE5VTEwsIGluc2VydCB0aGUgZWxlbWVudCBhdCB0aGUg c3RhcnQuICBSZXR1cm4gdGhlCi0gICBuZXcgZWxlbWVudC4gICovCi0KLXN0 YXRpYyBiaXRtYXBfZWxlbWVudCAqCi1iaXRtYXBfZWx0X2luc2VydF9hZnRl ciAoYml0bWFwIGhlYWQsIGJpdG1hcF9lbGVtZW50ICplbHQsIHVuc2lnbmVk IGludCBpbmR4KQotewotICBiaXRtYXBfZWxlbWVudCAqbm9kZSA9IGJpdG1h cF9lbGVtZW50X2FsbG9jYXRlIChoZWFkKTsKLSAgbm9kZS0+aW5keCA9IGlu ZHg7Ci0KLSAgaWYgKCFlbHQpCi0gICAgewotICAgICAgaWYgKCFoZWFkLT5j dXJyZW50KQotCXsKLQkgIGhlYWQtPmN1cnJlbnQgPSBub2RlOwotCSAgaGVh ZC0+aW5keCA9IGluZHg7Ci0JfQotICAgICAgbm9kZS0+bmV4dCA9IGhlYWQt PmZpcnN0OwotICAgICAgaWYgKG5vZGUtPm5leHQpCi0Jbm9kZS0+bmV4dC0+ cHJldiA9IG5vZGU7Ci0gICAgICBoZWFkLT5maXJzdCA9IG5vZGU7Ci0gICAg ICBub2RlLT5wcmV2ID0gTlVMTDsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0g ICAgICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChoZWFkLT5jdXJyZW50KTsKLSAg ICAgIG5vZGUtPm5leHQgPSBlbHQtPm5leHQ7Ci0gICAgICBpZiAobm9kZS0+ bmV4dCkKLQlub2RlLT5uZXh0LT5wcmV2ID0gbm9kZTsKLSAgICAgIGVsdC0+ bmV4dCA9IG5vZGU7Ci0gICAgICBub2RlLT5wcmV2ID0gZWx0OwotICAgIH0K LSAgcmV0dXJuIG5vZGU7Ci19Ci0MCiAvKiBDb3B5IGEgYml0bWFwIHRvIGFu b3RoZXIgYml0bWFwLiAgKi8KIAogdm9pZApAQCAtNTI1LDYgKzg3Niw4IEBA IGJpdG1hcF9jb3B5IChiaXRtYXAgdG8sIGNvbnN0X2JpdG1hcCBmcm8KICAg Y29uc3QgYml0bWFwX2VsZW1lbnQgKmZyb21fcHRyOwogICBiaXRtYXBfZWxl bWVudCAqdG9fcHRyID0gMDsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICgh dG8tPnRyZWVfZm9ybSAmJiAhZnJvbS0+dHJlZV9mb3JtKTsKKwogICBiaXRt YXBfY2xlYXIgKHRvKTsKIAogICAvKiBDb3B5IGVsZW1lbnRzIGluIGZvcndh cmQgZGlyZWN0aW9uIG9uZSBhdCBhIHRpbWUuICAqLwpAQCAtNTM1LDggKzg4 OCw5IEBAIGJpdG1hcF9jb3B5IChiaXRtYXAgdG8sIGNvbnN0X2JpdG1hcCBm cm8KICAgICAgIHRvX2VsdC0+aW5keCA9IGZyb21fcHRyLT5pbmR4OwogICAg ICAgbWVtY3B5ICh0b19lbHQtPmJpdHMsIGZyb21fcHRyLT5iaXRzLCBzaXpl b2YgKHRvX2VsdC0+Yml0cykpOwogCi0gICAgICAvKiBIZXJlIHdlIGhhdmUg YSBzcGVjaWFsIGNhc2Ugb2YgYml0bWFwX2VsZW1lbnRfbGluaywgZm9yIHRo ZSBjYXNlCi0JIHdoZXJlIHdlIGtub3cgdGhlIGxpbmtzIGFyZSBiZWluZyBl bnRlcmVkIGluIHNlcXVlbmNlLiAgKi8KKyAgICAgIC8qIEhlcmUgd2UgaGF2 ZSBhIHNwZWNpYWwgY2FzZSBvZiBiaXRtYXBfbGlzdF9saW5rX2VsZW1lbnQs CisgICAgICAgICBmb3IgdGhlIGNhc2Ugd2hlcmUgd2Uga25vdyB0aGUgbGlu a3MgYXJlIGJlaW5nIGVudGVyZWQKKwkgaW4gc2VxdWVuY2UuICAqLwogICAg ICAgaWYgKHRvX3B0ciA9PSAwKQogCXsKIAkgIHRvLT5maXJzdCA9IHRvLT5j dXJyZW50ID0gdG9fZWx0OwpAQCAtNTcyLDQ1ICs5MjYsMTAgQEAgYml0bWFw X2ZpbmRfYml0IChiaXRtYXAgaGVhZCwgdW5zaWduZWQgaQogICBpZiAoR0FU SEVSX1NUQVRJU1RJQ1MpCiAgICAgYml0bWFwX2Rlc2NyaXB0b3JzW2hlYWQt PmRlc2NyaXB0b3JfaWRdLT5uc2VhcmNoZXMrKzsKIAotICBpZiAoaGVhZC0+ aW5keCA8IGluZHgpCi0gICAgLyogSU5EWCBpcyBiZXlvbmQgaGVhZC0+aW5k eC4gIFNlYXJjaCBmcm9tIGhlYWQtPmN1cnJlbnQKLSAgICAgICBmb3J3YXJk LiAgKi8KLSAgICBmb3IgKGVsZW1lbnQgPSBoZWFkLT5jdXJyZW50OwotCSBl bGVtZW50LT5uZXh0ICE9IDAgJiYgZWxlbWVudC0+aW5keCA8IGluZHg7Ci0J IGVsZW1lbnQgPSBlbGVtZW50LT5uZXh0KQotICAgICAgewotCWlmIChHQVRI RVJfU1RBVElTVElDUykKLQkgIGJpdG1hcF9kZXNjcmlwdG9yc1toZWFkLT5k ZXNjcmlwdG9yX2lkXS0+c2VhcmNoX2l0ZXIrKzsKLSAgICAgIH0KLQotICBl bHNlIGlmIChoZWFkLT5pbmR4IC8gMiA8IGluZHgpCi0gICAgLyogSU5EWCBp cyBsZXNzIHRoYW4gaGVhZC0+aW5keCBhbmQgY2xvc2VyIHRvIGhlYWQtPmlu ZHggdGhhbiB0bwotICAgICAgIDAuICBTZWFyY2ggZnJvbSBoZWFkLT5jdXJy ZW50IGJhY2t3YXJkLiAgKi8KLSAgICBmb3IgKGVsZW1lbnQgPSBoZWFkLT5j dXJyZW50OwotCSBlbGVtZW50LT5wcmV2ICE9IDAgJiYgZWxlbWVudC0+aW5k eCA+IGluZHg7Ci0JIGVsZW1lbnQgPSBlbGVtZW50LT5wcmV2KQotICAgICAg ewotCWlmIChHQVRIRVJfU1RBVElTVElDUykKLQkgIGJpdG1hcF9kZXNjcmlw dG9yc1toZWFkLT5kZXNjcmlwdG9yX2lkXS0+c2VhcmNoX2l0ZXIrKzsKLSAg ICAgIH0KLQorICBpZiAoIWhlYWQtPnRyZWVfZm9ybSkKKyAgICBlbGVtZW50 ID0gYml0bWFwX2xpc3RfZmluZF9lbGVtZW50IChoZWFkLCBpbmR4KTsKICAg ZWxzZQotICAgIC8qIElORFggaXMgbGVzcyB0aGFuIGhlYWQtPmluZHggYW5k IGNsb3NlciB0byAwIHRoYW4gdG8KLSAgICAgICBoZWFkLT5pbmR4LiAgU2Vh cmNoIGZyb20gaGVhZC0+Zmlyc3QgZm9yd2FyZC4gICovCi0gICAgZm9yIChl bGVtZW50ID0gaGVhZC0+Zmlyc3Q7Ci0JIGVsZW1lbnQtPm5leHQgIT0gMCAm JiBlbGVtZW50LT5pbmR4IDwgaW5keDsKLQkgZWxlbWVudCA9IGVsZW1lbnQt Pm5leHQpCi0gICAgICBpZiAoR0FUSEVSX1NUQVRJU1RJQ1MpCi0JewotCSAg Yml0bWFwX2Rlc2NyaXB0b3JzW2hlYWQtPmRlc2NyaXB0b3JfaWRdLT5zZWFy Y2hfaXRlcisrOwotCX0KLQotICAvKiBgZWxlbWVudCcgaXMgdGhlIG5lYXJl c3QgdG8gdGhlIG9uZSB3ZSB3YW50LiAgSWYgaXQncyBub3QgdGhlIG9uZSB3 ZQotICAgICB3YW50LCB0aGUgb25lIHdlIHdhbnQgZG9lc24ndCBleGlzdC4g ICovCi0gIGhlYWQtPmN1cnJlbnQgPSBlbGVtZW50OwotICBoZWFkLT5pbmR4 ID0gZWxlbWVudC0+aW5keDsKLSAgaWYgKGVsZW1lbnQgIT0gMCAmJiBlbGVt ZW50LT5pbmR4ICE9IGluZHgpCi0gICAgZWxlbWVudCA9IDA7CisgICAgZWxl bWVudCA9IGJpdG1hcF90cmVlX2ZpbmRfZWxlbWVudCAoaGVhZCwgaW5keCk7 CiAKICAgcmV0dXJuIGVsZW1lbnQ7CiB9CkBAIC02MzQsNyArOTUzLDEyIEBA IGJpdG1hcF9jbGVhcl9iaXQgKGJpdG1hcCBoZWFkLCBpbnQgYml0KQogCSAg LyogSWYgd2UgY2xlYXJlZCB0aGUgZW50aXJlIHdvcmQsIGZyZWUgdXAgdGhl IGVsZW1lbnQuICAqLwogCSAgaWYgKCFwdHItPmJpdHNbd29yZF9udW1dCiAJ ICAgICAgJiYgYml0bWFwX2VsZW1lbnRfemVyb3AgKHB0cikpCi0JICAgIGJp dG1hcF9lbGVtZW50X2ZyZWUgKGhlYWQsIHB0cik7CisJICAgIHsKKwkgICAg ICBpZiAoIWhlYWQtPnRyZWVfZm9ybSkKKwkJYml0bWFwX2xpc3RfdW5saW5r X2VsZW1lbnQgKGhlYWQsIHB0cik7CisJICAgICAgZWxzZQorCQliaXRtYXBf dHJlZV91bmxpbmtfZWxlbWVudCAoaGVhZCwgcHRyKTsKKwkgICAgfQogCX0K IAogICAgICAgcmV0dXJuIHJlczsKQEAgLTY1MywyMSArOTc3LDIyIEBAIGJp dG1hcF9zZXRfYml0IChiaXRtYXAgaGVhZCwgaW50IGJpdCkKICAgdW5zaWdu ZWQgYml0X251bSAgPSBiaXQgJSBCSVRNQVBfV09SRF9CSVRTOwogICBCSVRN QVBfV09SRCBiaXRfdmFsID0gKChCSVRNQVBfV09SRCkgMSkgPDwgYml0X251 bTsKIAotICBpZiAocHRyID09IDApCi0gICAgewotICAgICAgcHRyID0gYml0 bWFwX2VsZW1lbnRfYWxsb2NhdGUgKGhlYWQpOwotICAgICAgcHRyLT5pbmR4 ID0gYml0IC8gQklUTUFQX0VMRU1FTlRfQUxMX0JJVFM7Ci0gICAgICBwdHIt PmJpdHNbd29yZF9udW1dID0gYml0X3ZhbDsKLSAgICAgIGJpdG1hcF9lbGVt ZW50X2xpbmsgKGhlYWQsIHB0cik7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAg ICB9Ci0gIGVsc2UKKyAgaWYgKHB0ciAhPSAwKQogICAgIHsKICAgICAgIGJv b2wgcmVzID0gKHB0ci0+Yml0c1t3b3JkX251bV0gJiBiaXRfdmFsKSA9PSAw OwogICAgICAgaWYgKHJlcykKIAlwdHItPmJpdHNbd29yZF9udW1dIHw9IGJp dF92YWw7CiAgICAgICByZXR1cm4gcmVzOwogICAgIH0KKworICBwdHIgPSBi aXRtYXBfZWxlbWVudF9hbGxvY2F0ZSAoaGVhZCk7CisgIHB0ci0+aW5keCA9 IGJpdCAvIEJJVE1BUF9FTEVNRU5UX0FMTF9CSVRTOworICBwdHItPmJpdHNb d29yZF9udW1dID0gYml0X3ZhbDsKKyAgaWYgKCFoZWFkLT50cmVlX2Zvcm0p CisgICAgYml0bWFwX2xpc3RfbGlua19lbGVtZW50IChoZWFkLCBwdHIpOwor ICBlbHNlCisgICAgYml0bWFwX3RyZWVfbGlua19lbGVtZW50IChoZWFkLCBw dHIpOworICByZXR1cm4gdHJ1ZTsKIH0KIAogLyogUmV0dXJuIHdoZXRoZXIg YSBiaXQgaXMgc2V0IHdpdGhpbiBhIGJpdG1hcC4gICovCkBAIC03MjQsMTMg KzEwNDksMTQgQEAgYml0bWFwX2NvdW50X2JpdHMgKGNvbnN0X2JpdG1hcCBh KQogICBjb25zdCBiaXRtYXBfZWxlbWVudCAqZWx0OwogICB1bnNpZ25lZCBp eDsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghYS0+dHJlZV9mb3JtKTsK ICAgZm9yIChlbHQgPSBhLT5maXJzdDsgZWx0OyBlbHQgPSBlbHQtPm5leHQp CiAgICAgewogICAgICAgZm9yIChpeCA9IDA7IGl4ICE9IEJJVE1BUF9FTEVN RU5UX1dPUkRTOyBpeCsrKQogCXsKICNpZiBHQ0NfVkVSU0lPTiA+PSAzNDAw Ci0gCSAgLyogTm90ZSB0aGF0IHBvcGNvdW50bCBtYXRjaGVzIEJJVE1BUF9X T1JEIGluIHR5cGUsIHNvIHRoZSBhY3R1YWwgc2l6ZQotCSBvZiBCSVRNQVBf V09SRCBpcyBub3QgbWF0ZXJpYWwuICAqLworIAkgIC8qIE5vdGUgdGhhdCBw b3Bjb3VudGwgbWF0Y2hlcyBCSVRNQVBfV09SRCBpbiB0eXBlLAorCSAgICAg c28gdGhlIGFjdHVhbCBzaXplIG9mIEJJVE1BUF9XT1JEIGlzIG5vdCBtYXRl cmlhbC4gICovCiAJICBjb3VudCArPSBfX2J1aWx0aW5fcG9wY291bnRsIChl bHQtPmJpdHNbaXhdKTsKICNlbHNlCiAJICBjb3VudCArPSBiaXRtYXBfcG9w Y291bnQgKGVsdC0+Yml0c1tpeF0pOwpAQCAtNzU0LDkgKzEwODAsMTEgQEAg Yml0bWFwX3NpbmdsZV9iaXRfc2V0X3AgKGNvbnN0X2JpdG1hcCBhKQogICAg IHJldHVybiBmYWxzZTsKIAogICBlbHQgPSBhLT5maXJzdDsKKwogICAvKiBB cyB0aGVyZSBhcmUgbm8gY29tcGxldGVseSBlbXB0eSBiaXRtYXAgZWxlbWVu dHMsIGEgc2Vjb25kIG9uZQogICAgICBtZWFucyB3ZSBoYXZlIG1vcmUgdGhh biBvbmUgYml0IHNldC4gICovCi0gIGlmIChlbHQtPm5leHQgIT0gTlVMTCkK KyAgaWYgKGVsdC0+bmV4dCAhPSBOVUxMCisgICAgICAmJiAoIWEtPnRyZWVf Zm9ybSB8fCBlbHQtPnByZXYgIT0gTlVMTCkpCiAgICAgcmV0dXJuIGZhbHNl OwogCiAgIGZvciAoaXggPSAwOyBpeCAhPSBCSVRNQVBfRUxFTUVOVF9XT1JE UzsgaXgrKykKQEAgLTc4OCw2ICsxMTE2LDExIEBAIGJpdG1hcF9maXJzdF9z ZXRfYml0IChjb25zdF9iaXRtYXAgYSkKICAgdW5zaWduZWQgaXg7CiAKICAg Z2NjX2NoZWNraW5nX2Fzc2VydCAoZWx0KTsKKworICBpZiAoYS0+dHJlZV9m b3JtKQorICAgIHdoaWxlIChlbHQtPnByZXYpCisgICAgICBlbHQgPSBlbHQt PnByZXY7CisKICAgYml0X25vID0gZWx0LT5pbmR4ICogQklUTUFQX0VMRU1F TlRfQUxMX0JJVFM7CiAgIGZvciAoaXggPSAwOyBpeCAhPSBCSVRNQVBfRUxF TUVOVF9XT1JEUzsgaXgrKykKICAgICB7CkBAIC04MzksOCArMTE3MiwxMSBA QCBiaXRtYXBfbGFzdF9zZXRfYml0IChjb25zdF9iaXRtYXAgYSkKICAgaW50 IGl4OwogCiAgIGdjY19jaGVja2luZ19hc3NlcnQgKGVsdCk7CisKKyAgLyog VGhpcyB3b3JrcyBmb3IgbGlua2VkLWxpc3QgYW5kIGJpbmFyeSB0cmVlIHJl cHJlc2VudGF0aW9uIGFsaWtlLiAgKi8KICAgd2hpbGUgKGVsdC0+bmV4dCkK ICAgICBlbHQgPSBlbHQtPm5leHQ7CisKICAgYml0X25vID0gZWx0LT5pbmR4 ICogQklUTUFQX0VMRU1FTlRfQUxMX0JJVFM7CiAgIGZvciAoaXggPSBCSVRN QVBfRUxFTUVOVF9XT1JEUyAtIDE7IGl4ID49IDA7IGl4LS0pCiAgICAgewpA QCAtODgyLDYgKzEyMTgsNyBAQCBiaXRtYXBfYW5kIChiaXRtYXAgZHN0LCBj b25zdF9iaXRtYXAgYSwKICAgY29uc3QgYml0bWFwX2VsZW1lbnQgKmJfZWx0 ID0gYi0+Zmlyc3Q7CiAgIGJpdG1hcF9lbGVtZW50ICpkc3RfcHJldiA9IE5V TEw7CiAKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIWRzdC0+dHJlZV9mb3Jt ICYmICFhLT50cmVlX2Zvcm0gJiYgIWItPnRyZWVfZm9ybSk7CiAgIGdjY19h c3NlcnQgKGRzdCAhPSBhICYmIGRzdCAhPSBiKTsKIAogICBpZiAoYSA9PSBi KQpAQCAtOTAzLDcgKzEyNDAsOCBAQCBiaXRtYXBfYW5kIChiaXRtYXAgZHN0 LCBjb25zdF9iaXRtYXAgYSwKIAkgIEJJVE1BUF9XT1JEIGlvciA9IDA7CiAK IAkgIGlmICghZHN0X2VsdCkKLQkgICAgZHN0X2VsdCA9IGJpdG1hcF9lbHRf aW5zZXJ0X2FmdGVyIChkc3QsIGRzdF9wcmV2LCBhX2VsdC0+aW5keCk7CisJ ICAgIGRzdF9lbHQgPSBiaXRtYXBfbGlzdF9pbnNlcnRfZWxlbWVudF9hZnRl ciAoZHN0LCBkc3RfcHJldiwKKwkJCQkJCQlhX2VsdC0+aW5keCk7CiAJICBl bHNlCiAJICAgIGRzdF9lbHQtPmluZHggPSBhX2VsdC0+aW5keDsKIAkgIGZv ciAoaXggPSAwOyBpeCA8IEJJVE1BUF9FTEVNRU5UX1dPUkRTOyBpeCsrKQpA QCAtOTQwLDYgKzEyNzgsOCBAQCBiaXRtYXBfYW5kX2ludG8gKGJpdG1hcCBh LCBjb25zdF9iaXRtYXAKICAgYml0bWFwX2VsZW1lbnQgKm5leHQ7CiAgIGJv b2wgY2hhbmdlZCA9IGZhbHNlOwogCisgIGdjY19jaGVja2luZ19hc3NlcnQg KCFhLT50cmVlX2Zvcm0gJiYgIWItPnRyZWVfZm9ybSk7CisKICAgaWYgKGEg PT0gYikKICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTk0OCw3ICsxMjg4LDcg QEAgYml0bWFwX2FuZF9pbnRvIChiaXRtYXAgYSwgY29uc3RfYml0bWFwCiAg ICAgICBpZiAoYV9lbHQtPmluZHggPCBiX2VsdC0+aW5keCkKIAl7CiAJICBu ZXh0ID0gYV9lbHQtPm5leHQ7Ci0JICBiaXRtYXBfZWxlbWVudF9mcmVlIChh LCBhX2VsdCk7CisJICBiaXRtYXBfbGlzdF91bmxpbmtfZWxlbWVudCAoYSwg YV9lbHQpOwogCSAgYV9lbHQgPSBuZXh0OwogCSAgY2hhbmdlZCA9IHRydWU7 CiAJfQpAQCAtOTcwLDcgKzEzMTAsNyBAQCBiaXRtYXBfYW5kX2ludG8gKGJp dG1hcCBhLCBjb25zdF9iaXRtYXAKIAkgICAgfQogCSAgbmV4dCA9IGFfZWx0 LT5uZXh0OwogCSAgaWYgKCFpb3IpCi0JICAgIGJpdG1hcF9lbGVtZW50X2Zy ZWUgKGEsIGFfZWx0KTsKKwkgICAgYml0bWFwX2xpc3RfdW5saW5rX2VsZW1l bnQgKGEsIGFfZWx0KTsKIAkgIGFfZWx0ID0gbmV4dDsKIAkgIGJfZWx0ID0g Yl9lbHQtPm5leHQ7CiAJfQpAQCAtMTAxMiw3ICsxMzUyLDggQEAgYml0bWFw X2VsdF9jb3B5IChiaXRtYXAgZHN0LCBiaXRtYXBfZWxlbQogICAgIHsKICAg ICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgaWYgKCFkc3RfZWx0KQotCWRz dF9lbHQgPSBiaXRtYXBfZWx0X2luc2VydF9hZnRlciAoZHN0LCBkc3RfcHJl diwgc3JjX2VsdC0+aW5keCk7CisJZHN0X2VsdCA9IGJpdG1hcF9saXN0X2lu c2VydF9lbGVtZW50X2FmdGVyIChkc3QsIGRzdF9wcmV2LAorCQkJCQkJICAg IHNyY19lbHQtPmluZHgpOwogICAgICAgZWxzZQogCWRzdF9lbHQtPmluZHgg PSBzcmNfZWx0LT5pbmR4OwogICAgICAgbWVtY3B5IChkc3RfZWx0LT5iaXRz LCBzcmNfZWx0LT5iaXRzLCBzaXplb2YgKGRzdF9lbHQtPmJpdHMpKTsKQEAg LTEwMzQsNiArMTM3NSw3IEBAIGJpdG1hcF9hbmRfY29tcGwgKGJpdG1hcCBk c3QsIGNvbnN0X2JpdG0KICAgYml0bWFwX2VsZW1lbnQgKipkc3RfcHJldl9w bmV4dCA9ICZkc3QtPmZpcnN0OwogICBib29sIGNoYW5nZWQgPSBmYWxzZTsK IAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghZHN0LT50cmVlX2Zvcm0gJiYg IWEtPnRyZWVfZm9ybSAmJiAhYi0+dHJlZV9mb3JtKTsKICAgZ2NjX2Fzc2Vy dCAoZHN0ICE9IGEgJiYgZHN0ICE9IGIpOwogCiAgIGlmIChhID09IGIpCkBA IC0xMDgyLDcgKzE0MjQsOCBAQCBiaXRtYXBfYW5kX2NvbXBsIChiaXRtYXAg ZHN0LCBjb25zdF9iaXRtCiAJICAgICAgYm9vbCBuZXdfZWxlbWVudDsKIAkg ICAgICBpZiAoIWRzdF9lbHQgfHwgZHN0X2VsdC0+aW5keCA+IGFfZWx0LT5p bmR4KQogCQl7Ci0JCSAgZHN0X2VsdCA9IGJpdG1hcF9lbHRfaW5zZXJ0X2Fm dGVyIChkc3QsIGRzdF9wcmV2LCBhX2VsdC0+aW5keCk7CisJCSAgZHN0X2Vs dCA9IGJpdG1hcF9saXN0X2luc2VydF9lbGVtZW50X2FmdGVyIChkc3QsIGRz dF9wcmV2LAorCQkJCQkJCSAgICAgIGFfZWx0LT5pbmR4KTsKIAkJICBuZXdf ZWxlbWVudCA9IHRydWU7CiAJCX0KIAkgICAgICBlbHNlCkBAIC0xMTA0LDcg KzE0NDcsNyBAQCBiaXRtYXBfYW5kX2NvbXBsIChiaXRtYXAgZHN0LCBjb25z dF9iaXRtCiAJICAgICAgZWxzZQogCSAgICAgICAgewogCSAgICAgICAgICBj aGFuZ2VkIHw9ICFuZXdfZWxlbWVudDsKLQkJICBiaXRtYXBfZWxlbWVudF9m cmVlIChkc3QsIGRzdF9lbHQpOworCQkgIGJpdG1hcF9saXN0X3VubGlua19l bGVtZW50IChkc3QsIGRzdF9lbHQpOwogCQkgIGRzdF9lbHQgPSAqZHN0X3By ZXZfcG5leHQ7CiAJCX0KIAkgICAgfQpAQCAtMTE0NSw2ICsxNDg4LDggQEAg Yml0bWFwX2FuZF9jb21wbF9pbnRvIChiaXRtYXAgYSwgY29uc3RfYgogICBi aXRtYXBfZWxlbWVudCAqbmV4dDsKICAgQklUTUFQX1dPUkQgY2hhbmdlZCA9 IDA7CiAKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIWEtPnRyZWVfZm9ybSAm JiAhYi0+dHJlZV9mb3JtKTsKKwogICBpZiAoYSA9PSBiKQogICAgIHsKICAg ICAgIGlmIChiaXRtYXBfZW1wdHlfcCAoYSkpCkBAIC0xMTc5LDcgKzE1MjQs NyBAQCBiaXRtYXBfYW5kX2NvbXBsX2ludG8gKGJpdG1hcCBhLCBjb25zdF9i CiAJICAgIH0KIAkgIG5leHQgPSBhX2VsdC0+bmV4dDsKIAkgIGlmICghaW9y KQotCSAgICBiaXRtYXBfZWxlbWVudF9mcmVlIChhLCBhX2VsdCk7CisJICAg IGJpdG1hcF9saXN0X3VubGlua19lbGVtZW50IChhLCBhX2VsdCk7CiAJICBh X2VsdCA9IG5leHQ7CiAJICBiX2VsdCA9IGJfZWx0LT5uZXh0OwogCX0KQEAg LTExOTcsNiArMTU0Miw4IEBAIGJpdG1hcF9zZXRfcmFuZ2UgKGJpdG1hcCBo ZWFkLCB1bnNpZ25lZAogICBiaXRtYXBfZWxlbWVudCAqZWx0LCAqZWx0X3By ZXY7CiAgIHVuc2lnbmVkIGludCBpOwogCisgIGdjY19jaGVja2luZ19hc3Nl cnQgKCFoZWFkLT50cmVlX2Zvcm0pOworCiAgIGlmICghY291bnQpCiAgICAg cmV0dXJuOwogCkBAIC0xMjEzLDcgKzE1NjAsNyBAQCBiaXRtYXBfc2V0X3Jh bmdlIChiaXRtYXAgaGVhZCwgdW5zaWduZWQKICAgICB7CiAgICAgICBlbHQg PSBiaXRtYXBfZWxlbWVudF9hbGxvY2F0ZSAoaGVhZCk7CiAgICAgICBlbHQt PmluZHggPSBmaXJzdF9pbmRleDsKLSAgICAgIGJpdG1hcF9lbGVtZW50X2xp bmsgKGhlYWQsIGVsdCk7CisgICAgICBiaXRtYXBfbGlzdF9saW5rX2VsZW1l bnQgKGhlYWQsIGVsdCk7CiAgICAgfQogCiAgIGdjY19jaGVja2luZ19hc3Nl cnQgKGVsdC0+aW5keCA9PSBmaXJzdF9pbmRleCk7CkBAIC0xMjMwLDcgKzE1 NzcsNyBAQCBiaXRtYXBfc2V0X3JhbmdlIChiaXRtYXAgaGVhZCwgdW5zaWdu ZWQKICAgICAgIHVuc2lnbmVkIGludCBpeDsKIAogICAgICAgaWYgKCFlbHQg fHwgZWx0LT5pbmR4ICE9IGkpCi0JZWx0ID0gYml0bWFwX2VsdF9pbnNlcnRf YWZ0ZXIgKGhlYWQsIGVsdF9wcmV2LCBpKTsKKwllbHQgPSBiaXRtYXBfbGlz dF9pbnNlcnRfZWxlbWVudF9hZnRlciAoaGVhZCwgZWx0X3ByZXYsIGkpOwog CiAgICAgICBpZiAoZWx0X3N0YXJ0X2JpdCA8PSBzdGFydCkKIAl7CkBAIC0x Mjk2LDYgKzE2NDMsOCBAQCBiaXRtYXBfY2xlYXJfcmFuZ2UgKGJpdG1hcCBo ZWFkLCB1bnNpZ25lCiAgIHVuc2lnbmVkIGludCBmaXJzdF9pbmRleCwgZW5k X2JpdF9wbHVzMSwgbGFzdF9pbmRleDsKICAgYml0bWFwX2VsZW1lbnQgKmVs dDsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghaGVhZC0+dHJlZV9mb3Jt KTsKKwogICBpZiAoIWNvdW50KQogICAgIHJldHVybjsKIApAQCAtMTMzMyw3 ICsxNjgyLDcgQEAgYml0bWFwX2NsZWFyX3JhbmdlIChiaXRtYXAgaGVhZCwg dW5zaWduZQogCiAgICAgICBpZiAoZWx0X3N0YXJ0X2JpdCA+PSBzdGFydCAm JiBlbHRfZW5kX2JpdF9wbHVzMSA8PSBlbmRfYml0X3BsdXMxKQogCS8qIEdl dCByaWQgb2YgdGhlIGVudGlyZSBlbHQgYW5kIGdvIHRvIHRoZSBuZXh0IG9u ZS4gICovCi0JYml0bWFwX2VsZW1lbnRfZnJlZSAoaGVhZCwgZWx0KTsKKwli aXRtYXBfbGlzdF91bmxpbmtfZWxlbWVudCAoaGVhZCwgZWx0KTsKICAgICAg IGVsc2UKIAl7CiAJICAvKiBHb2luZyB0byBoYXZlIHRvIGtub2NrIG91dCBz b21lIGJpdHMgaW4gdGhpcyBlbHQuICAqLwpAQCAtMTQwMyw3ICsxNzUyLDcg QEAgYml0bWFwX2NsZWFyX3JhbmdlIChiaXRtYXAgaGVhZCwgdW5zaWduZQog CSAgICAgIH0KIAkgIC8qIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55 IGJpdHMgbGVmdC4gICovCiAJICBpZiAoY2xlYXIpCi0JICAgIGJpdG1hcF9l bGVtZW50X2ZyZWUgKGhlYWQsIGVsdCk7CisJICAgIGJpdG1hcF9saXN0X3Vu bGlua19lbGVtZW50IChoZWFkLCBlbHQpOwogCX0KICAgICAgIGVsdCA9IG5l eHRfZWx0OwogICAgIH0KQEAgLTE0MjUsNiArMTc3NCw3IEBAIGJpdG1hcF9j b21wbF9hbmRfaW50byAoYml0bWFwIGEsIGNvbnN0X2IKICAgYml0bWFwX2Vs ZW1lbnQgKmFfcHJldiA9IE5VTEw7CiAgIGJpdG1hcF9lbGVtZW50ICpuZXh0 OwogCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFhLT50cmVlX2Zvcm0gJiYg IWItPnRyZWVfZm9ybSk7CiAgIGdjY19hc3NlcnQgKGEgIT0gYik7CiAKICAg aWYgKGJpdG1hcF9lbXB0eV9wIChhKSkKQEAgLTE0NDUsMTMgKzE3OTUsMTMg QEAgYml0bWFwX2NvbXBsX2FuZF9pbnRvIChiaXRtYXAgYSwgY29uc3RfYgog CSAgLyogQSBpcyBiZWZvcmUgQi4gIFJlbW92ZSBBICovCiAJICBuZXh0ID0g YV9lbHQtPm5leHQ7CiAJICBhX3ByZXYgPSBhX2VsdC0+cHJldjsKLQkgIGJp dG1hcF9lbGVtZW50X2ZyZWUgKGEsIGFfZWx0KTsKKwkgIGJpdG1hcF9saXN0 X3VubGlua19lbGVtZW50IChhLCBhX2VsdCk7CiAJICBhX2VsdCA9IG5leHQ7 CiAJfQogICAgICAgZWxzZSBpZiAoIWFfZWx0IHx8IGJfZWx0LT5pbmR4IDwg YV9lbHQtPmluZHgpCiAJewogCSAgLyogQiBpcyBiZWZvcmUgQS4gIENvcHkg Qi4gKi8KLQkgIG5leHQgPSBiaXRtYXBfZWx0X2luc2VydF9hZnRlciAoYSwg YV9wcmV2LCBiX2VsdC0+aW5keCk7CisJICBuZXh0ID0gYml0bWFwX2xpc3Rf aW5zZXJ0X2VsZW1lbnRfYWZ0ZXIgKGEsIGFfcHJldiwgYl9lbHQtPmluZHgp OwogCSAgbWVtY3B5IChuZXh0LT5iaXRzLCBiX2VsdC0+Yml0cywgc2l6ZW9m IChuZXh0LT5iaXRzKSk7CiAJICBhX3ByZXYgPSBuZXh0OwogCSAgYl9lbHQg PSBiX2VsdC0+bmV4dDsKQEAgLTE0NzIsNyArMTgyMiw3IEBAIGJpdG1hcF9j b21wbF9hbmRfaW50byAoYml0bWFwIGEsIGNvbnN0X2IKIAkgICAgfQogCSAg bmV4dCA9IGFfZWx0LT5uZXh0OwogCSAgaWYgKCFpb3IpCi0JICAgIGJpdG1h cF9lbGVtZW50X2ZyZWUgKGEsIGFfZWx0KTsKKwkgICAgYml0bWFwX2xpc3Rf dW5saW5rX2VsZW1lbnQgKGEsIGFfZWx0KTsKIAkgIGVsc2UKIAkgICAgYV9w cmV2ID0gYV9lbHQ7CiAJICBhX2VsdCA9IG5leHQ7CkBAIC0xNTE3LDcgKzE4 NjcsOCBAQCBiaXRtYXBfZWx0X2lvciAoYml0bWFwIGRzdCwgYml0bWFwX2Vs ZW1lCiAJewogCSAgY2hhbmdlZCA9IHRydWU7CiAJICBpZiAoIWRzdF9lbHQp Ci0JICAgIGRzdF9lbHQgPSBiaXRtYXBfZWx0X2luc2VydF9hZnRlciAoZHN0 LCBkc3RfcHJldiwgYV9lbHQtPmluZHgpOworCSAgICBkc3RfZWx0ID0gYml0 bWFwX2xpc3RfaW5zZXJ0X2VsZW1lbnRfYWZ0ZXIgKGRzdCwgZHN0X3ByZXYs CisJCQkJCQkJYV9lbHQtPmluZHgpOwogCSAgZWxzZQogCSAgICBkc3RfZWx0 LT5pbmR4ID0gYV9lbHQtPmluZHg7CiAJICBmb3IgKGl4ID0gMDsgaXggPCBC SVRNQVBfRUxFTUVOVF9XT1JEUzsgaXgrKykKQEAgLTE1NTYsNiArMTkwNyw3 IEBAIGJpdG1hcF9pb3IgKGJpdG1hcCBkc3QsIGNvbnN0X2JpdG1hcCBhLAog ICBiaXRtYXBfZWxlbWVudCAqKmRzdF9wcmV2X3BuZXh0ID0gJmRzdC0+Zmly c3Q7CiAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogCisgIGdjY19jaGVja2lu Z19hc3NlcnQgKCFkc3QtPnRyZWVfZm9ybSAmJiAhYS0+dHJlZV9mb3JtICYm ICFiLT50cmVlX2Zvcm0pOwogICBnY2NfYXNzZXJ0IChkc3QgIT0gYSAmJiBk c3QgIT0gYik7CiAKICAgd2hpbGUgKGFfZWx0IHx8IGJfZWx0KQpAQCAtMTYw Miw2ICsxOTU0LDcgQEAgYml0bWFwX2lvcl9pbnRvIChiaXRtYXAgYSwgY29u c3RfYml0bWFwCiAgIGJpdG1hcF9lbGVtZW50ICoqYV9wcmV2X3BuZXh0ID0g JmEtPmZpcnN0OwogICBib29sIGNoYW5nZWQgPSBmYWxzZTsKIAorICBnY2Nf Y2hlY2tpbmdfYXNzZXJ0ICghYS0+dHJlZV9mb3JtICYmICFiLT50cmVlX2Zv cm0pOwogICBpZiAoYSA9PSBiKQogICAgIHJldHVybiBmYWxzZTsKIApAQCAt MTY0MCw3ICsxOTkzLDkgQEAgYml0bWFwX3hvciAoYml0bWFwIGRzdCwgY29u c3RfYml0bWFwIGEsCiAgIGNvbnN0IGJpdG1hcF9lbGVtZW50ICpiX2VsdCA9 IGItPmZpcnN0OwogICBiaXRtYXBfZWxlbWVudCAqZHN0X3ByZXYgPSBOVUxM OwogCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFkc3QtPnRyZWVfZm9ybSAm JiAhYS0+dHJlZV9mb3JtICYmICFiLT50cmVlX2Zvcm0pOwogICBnY2NfYXNz ZXJ0IChkc3QgIT0gYSAmJiBkc3QgIT0gYik7CisKICAgaWYgKGEgPT0gYikK ICAgICB7CiAgICAgICBiaXRtYXBfY2xlYXIgKGRzdCk7CkBAIC0xNjU2LDcg KzIwMTEsOCBAQCBiaXRtYXBfeG9yIChiaXRtYXAgZHN0LCBjb25zdF9iaXRt YXAgYSwKIAkgIEJJVE1BUF9XT1JEIGlvciA9IDA7CiAKIAkgIGlmICghZHN0 X2VsdCkKLQkgICAgZHN0X2VsdCA9IGJpdG1hcF9lbHRfaW5zZXJ0X2FmdGVy IChkc3QsIGRzdF9wcmV2LCBhX2VsdC0+aW5keCk7CisJICAgIGRzdF9lbHQg PSBiaXRtYXBfbGlzdF9pbnNlcnRfZWxlbWVudF9hZnRlciAoZHN0LCBkc3Rf cHJldiwKKwkJCQkJCQlhX2VsdC0+aW5keCk7CiAJICBlbHNlCiAJICAgIGRz dF9lbHQtPmluZHggPSBhX2VsdC0+aW5keDsKIAkgIGZvciAoaXggPSAwOyBp eCA8IEJJVE1BUF9FTEVNRU5UX1dPUkRTOyBpeCsrKQpAQCAtMTY5MSw3ICsy MDQ3LDggQEAgYml0bWFwX3hvciAoYml0bWFwIGRzdCwgY29uc3RfYml0bWFw IGEsCiAJICAgIH0KIAogCSAgaWYgKCFkc3RfZWx0KQotCSAgICBkc3RfZWx0 ID0gYml0bWFwX2VsdF9pbnNlcnRfYWZ0ZXIgKGRzdCwgZHN0X3ByZXYsIHNy Yy0+aW5keCk7CisJICAgIGRzdF9lbHQgPSBiaXRtYXBfbGlzdF9pbnNlcnRf ZWxlbWVudF9hZnRlciAoZHN0LCBkc3RfcHJldiwKKwkJCQkJCQlzcmMtPmlu ZHgpOwogCSAgZWxzZQogCSAgICBkc3RfZWx0LT5pbmR4ID0gc3JjLT5pbmR4 OwogCSAgbWVtY3B5IChkc3RfZWx0LT5iaXRzLCBzcmMtPmJpdHMsIHNpemVv ZiAoZHN0X2VsdC0+Yml0cykpOwpAQCAtMTcxNiw2ICsyMDczLDggQEAgYml0 bWFwX3hvcl9pbnRvIChiaXRtYXAgYSwgY29uc3RfYml0bWFwCiAgIGNvbnN0 IGJpdG1hcF9lbGVtZW50ICpiX2VsdCA9IGItPmZpcnN0OwogICBiaXRtYXBf ZWxlbWVudCAqYV9wcmV2ID0gTlVMTDsKIAorICBnY2NfY2hlY2tpbmdfYXNz ZXJ0ICghYS0+dHJlZV9mb3JtICYmICFiLT50cmVlX2Zvcm0pOworCiAgIGlm IChhID09IGIpCiAgICAgewogICAgICAgYml0bWFwX2NsZWFyIChhKTsKQEAg LTE3MjcsNyArMjA4Niw4IEBAIGJpdG1hcF94b3JfaW50byAoYml0bWFwIGEs IGNvbnN0X2JpdG1hcAogICAgICAgaWYgKCFhX2VsdCB8fCBiX2VsdC0+aW5k eCA8IGFfZWx0LT5pbmR4KQogCXsKIAkgIC8qIENvcHkgYl9lbHQuICAqLwot CSAgYml0bWFwX2VsZW1lbnQgKmRzdCA9IGJpdG1hcF9lbHRfaW5zZXJ0X2Fm dGVyIChhLCBhX3ByZXYsIGJfZWx0LT5pbmR4KTsKKwkgIGJpdG1hcF9lbGVt ZW50ICpkc3QgPSBiaXRtYXBfbGlzdF9pbnNlcnRfZWxlbWVudF9hZnRlciAo YSwgYV9wcmV2LAorCQkJCQkJCQkgIGJfZWx0LT5pbmR4KTsKIAkgIG1lbWNw eSAoZHN0LT5iaXRzLCBiX2VsdC0+Yml0cywgc2l6ZW9mIChkc3QtPmJpdHMp KTsKIAkgIGFfcHJldiA9IGRzdDsKIAkgIGJfZWx0ID0gYl9lbHQtPm5leHQ7 CkBAIC0xNzU1LDcgKzIxMTUsNyBAQCBiaXRtYXBfeG9yX2ludG8gKGJpdG1h cCBhLCBjb25zdF9iaXRtYXAKIAkgIGlmIChpb3IpCiAJICAgIGFfcHJldiA9 IGFfZWx0OwogCSAgZWxzZQotCSAgICBiaXRtYXBfZWxlbWVudF9mcmVlIChh LCBhX2VsdCk7CisJICAgIGJpdG1hcF9saXN0X3VubGlua19lbGVtZW50IChh LCBhX2VsdCk7CiAJICBhX2VsdCA9IG5leHQ7CiAJfQogICAgIH0KQEAgLTE3 NzUsNiArMjEzNSw4IEBAIGJpdG1hcF9lcXVhbF9wIChjb25zdF9iaXRtYXAg YSwgY29uc3RfYmkKICAgY29uc3QgYml0bWFwX2VsZW1lbnQgKmJfZWx0Owog ICB1bnNpZ25lZCBpeDsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghYS0+ dHJlZV9mb3JtICYmICFiLT50cmVlX2Zvcm0pOworCiAgIGZvciAoYV9lbHQg PSBhLT5maXJzdCwgYl9lbHQgPSBiLT5maXJzdDsKICAgICAgICBhX2VsdCAm JiBiX2VsdDsKICAgICAgICBhX2VsdCA9IGFfZWx0LT5uZXh0LCBiX2VsdCA9 IGJfZWx0LT5uZXh0KQpAQCAtMTc5Nyw2ICsyMTU5LDggQEAgYml0bWFwX2lu dGVyc2VjdF9wIChjb25zdF9iaXRtYXAgYSwgY29ucwogICBjb25zdCBiaXRt YXBfZWxlbWVudCAqYl9lbHQ7CiAgIHVuc2lnbmVkIGl4OwogCisgIGdjY19j aGVja2luZ19hc3NlcnQgKCFhLT50cmVlX2Zvcm0gJiYgIWItPnRyZWVfZm9y bSk7CisKICAgZm9yIChhX2VsdCA9IGEtPmZpcnN0LCBiX2VsdCA9IGItPmZp cnN0OwogICAgICAgIGFfZWx0ICYmIGJfZWx0OykKICAgICB7CkBAIC0xODI0 LDYgKzIxODgsOSBAQCBiaXRtYXBfaW50ZXJzZWN0X2NvbXBsX3AgKGNvbnN0 X2JpdG1hcCBhCiAgIGNvbnN0IGJpdG1hcF9lbGVtZW50ICphX2VsdDsKICAg Y29uc3QgYml0bWFwX2VsZW1lbnQgKmJfZWx0OwogICB1bnNpZ25lZCBpeDsK KworICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghYS0+dHJlZV9mb3JtICYmICFi LT50cmVlX2Zvcm0pOworCiAgIGZvciAoYV9lbHQgPSBhLT5maXJzdCwgYl9l bHQgPSBiLT5maXJzdDsKICAgICAgICBhX2VsdCAmJiBiX2VsdDspCiAgICAg ewpAQCAtMTg1OCw2ICsyMjI1LDkgQEAgYml0bWFwX2lvcl9hbmRfY29tcGwg KGJpdG1hcCBkc3QsIGNvbnN0XwogICBiaXRtYXBfZWxlbWVudCAqZHN0X3By ZXYgPSBOVUxMOwogICBiaXRtYXBfZWxlbWVudCAqKmRzdF9wcmV2X3BuZXh0 ID0gJmRzdC0+Zmlyc3Q7CiAKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIWRz dC0+dHJlZV9mb3JtCisJCSAgICAgICAmJiAhYS0+dHJlZV9mb3JtICYmICFi LT50cmVlX2Zvcm0KKwkJICAgICAgICYmICFraWxsLT50cmVlX2Zvcm0pOwog ICBnY2NfYXNzZXJ0IChkc3QgIT0gYSAmJiBkc3QgIT0gYiAmJiBkc3QgIT0g a2lsbCk7CiAKICAgLyogU3BlY2lhbCBjYXNlcy4gIFdlIGRvbid0IGJvdGhl ciBjaGVja2luZyBmb3IgYml0bWFwX2VxdWFsX3AgKGIsIGtpbGwpLiAgKi8K QEAgLTE5NDgsMTYgKzIzMTgsMTggQEAgYml0bWFwX2lvcl9hbmRfY29tcGwg KGJpdG1hcCBkc3QsIGNvbnN0XwogICByZXR1cm4gY2hhbmdlZDsKIH0KIAot LyogQSB8PSAoRlJPTTEgJiB+RlJPTTIpLiAgUmV0dXJuIHRydWUgaWYgQSBj aGFuZ2VzLiAgKi8KKy8qIEEgfD0gKEIgJiB+QykuICBSZXR1cm4gdHJ1ZSBp ZiBBIGNoYW5nZXMuICAqLwogCiBib29sCi1iaXRtYXBfaW9yX2FuZF9jb21w bF9pbnRvIChiaXRtYXAgYSwgY29uc3RfYml0bWFwIGZyb20xLCBjb25zdF9i aXRtYXAgZnJvbTIpCitiaXRtYXBfaW9yX2FuZF9jb21wbF9pbnRvIChiaXRt YXAgYSwgY29uc3RfYml0bWFwIGIsIGNvbnN0X2JpdG1hcCBjKQogewogICBi aXRtYXBfaGVhZCB0bXA7CiAgIGJvb2wgY2hhbmdlZDsKIAorICBnY2NfY2hl Y2tpbmdfYXNzZXJ0ICghYS0+dHJlZV9mb3JtICYmICFiLT50cmVlX2Zvcm0g JiYgIWMtPnRyZWVfZm9ybSk7CisKICAgYml0bWFwX2luaXRpYWxpemUgKCZ0 bXAsICZiaXRtYXBfZGVmYXVsdF9vYnN0YWNrKTsKLSAgYml0bWFwX2FuZF9j b21wbCAoJnRtcCwgZnJvbTEsIGZyb20yKTsKKyAgYml0bWFwX2FuZF9jb21w bCAoJnRtcCwgYiwgYyk7CiAgIGNoYW5nZWQgPSBiaXRtYXBfaW9yX2ludG8g KGEsICZ0bXApOwogICBiaXRtYXBfY2xlYXIgKCZ0bXApOwogCkBAIC0xOTc4 LDYgKzIzNTAsOCBAQCBiaXRtYXBfaW9yX2FuZF9pbnRvIChiaXRtYXAgYSwg Y29uc3RfYml0CiAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICB1bnNpZ25l ZCBpeDsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghYS0+dHJlZV9mb3Jt ICYmICFiLT50cmVlX2Zvcm0gJiYgIWMtPnRyZWVfZm9ybSk7CisKICAgaWYg KGIgPT0gYykKICAgICByZXR1cm4gYml0bWFwX2lvcl9pbnRvIChhLCBiKTsK ICAgaWYgKGJpdG1hcF9lbXB0eV9wIChiKSB8fCBiaXRtYXBfZW1wdHlfcCAo YykpCkBAIC0yMDQ0LDYgKzI0MTgsNyBAQCBiaXRtYXBfaW9yX2FuZF9pbnRv IChiaXRtYXAgYSwgY29uc3RfYml0CiB9CiAKIC8qIENvbXB1dGUgaGFzaCBv ZiBiaXRtYXAgKGZvciBwdXJwb3NlcyBvZiBoYXNoaW5nKS4gICovCisKIGhh c2h2YWxfdAogYml0bWFwX2hhc2ggKGNvbnN0X2JpdG1hcCBoZWFkKQogewpA QCAtMjA1MSw2ICsyNDI2LDggQEAgYml0bWFwX2hhc2ggKGNvbnN0X2JpdG1h cCBoZWFkKQogICBCSVRNQVBfV09SRCBoYXNoID0gMDsKICAgaW50IGl4Owog CisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFoZWFkLT50cmVlX2Zvcm0pOwor CiAgIGZvciAocHRyID0gaGVhZC0+Zmlyc3Q7IHB0cjsgcHRyID0gcHRyLT5u ZXh0KQogICAgIHsKICAgICAgIGhhc2ggXj0gcHRyLT5pbmR4OwpAQCAtMjA2 NCw5ICsyNDQxLDEzIEBAIGJpdG1hcF9oYXNoIChjb25zdF9iaXRtYXAgaGVh ZCkKIC8qIERlYnVnZ2luZyBmdW5jdGlvbiB0byBwcmludCBvdXQgdGhlIGNv bnRlbnRzIG9mIGEgYml0bWFwLiAgKi8KIAogREVCVUdfRlVOQ1RJT04gdm9p ZAotZGVidWdfYml0bWFwX2ZpbGUgKEZJTEUgKmZpbGUsIGNvbnN0X2JpdG1h cCBoZWFkKQorZGVidWdfYml0bWFwX2ZpbGUgKEZJTEUgKmZpbGUsIGJpdG1h cCBoZWFkKQogewogICBjb25zdCBiaXRtYXBfZWxlbWVudCAqcHRyOworICBi b29sIHRyZWVfZm9ybSA9IGhlYWQtPnRyZWVfZm9ybTsKKworICBpZiAodHJl ZV9mb3JtKQorICAgIGJpdG1hcF9saXN0X3ZpZXcgKGhlYWQpOwogCiAgIGZw cmludGYgKGZpbGUsICJcbmZpcnN0ID0gIiBIT1NUX1BUUl9QUklOVEYKIAkg ICAiIGN1cnJlbnQgPSAiIEhPU1RfUFRSX1BSSU5URiAiIGluZHggPSAldVxu IiwKQEAgLTIwOTgsMTMgKzI0NzksMTYgQEAgZGVidWdfYml0bWFwX2ZpbGUg KEZJTEUgKmZpbGUsIGNvbnN0X2JpdAogCiAgICAgICBmcHJpbnRmIChmaWxl LCAiIH1cbiIpOwogICAgIH0KKworICBpZiAodHJlZV9mb3JtKQorICAgIGJp dG1hcF90cmVlX3ZpZXcgKGhlYWQpOwogfQogCiAvKiBGdW5jdGlvbiB0byBi ZSBjYWxsZWQgZnJvbSB0aGUgZGVidWdnZXIgdG8gcHJpbnQgdGhlIGNvbnRl bnRzCiAgICBvZiBhIGJpdG1hcC4gICovCiAKIERFQlVHX0ZVTkNUSU9OIHZv aWQKLWRlYnVnX2JpdG1hcCAoY29uc3RfYml0bWFwIGhlYWQpCitkZWJ1Z19i aXRtYXAgKGJpdG1hcCBoZWFkKQogewogICBkZWJ1Z19iaXRtYXBfZmlsZSAo c3Rkb3V0LCBoZWFkKTsKIH0KQEAgLTIxMTMsMTEgKzI0OTcsMTUgQEAgZGVi dWdfYml0bWFwIChjb25zdF9iaXRtYXAgaGVhZCkKICAgIGl0IGRvZXMgbm90 IHByaW50IGFueXRoaW5nIGJ1dCB0aGUgYml0cy4gICovCiAKIERFQlVHX0ZV TkNUSU9OIHZvaWQKLWJpdG1hcF9wcmludCAoRklMRSAqZmlsZSwgY29uc3Rf Yml0bWFwIGhlYWQsIGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAq c3VmZml4KQorYml0bWFwX3ByaW50IChGSUxFICpmaWxlLCBiaXRtYXAgaGVh ZCwgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpzdWZmaXgpCiB7 CiAgIGNvbnN0IGNoYXIgKmNvbW1hID0gIiI7CiAgIHVuc2lnbmVkIGk7CiAg IGJpdG1hcF9pdGVyYXRvciBiaTsKKyAgYm9vbCB0cmVlX2Zvcm0gPSBoZWFk LT50cmVlX2Zvcm07CisKKyAgaWYgKHRyZWVfZm9ybSkKKyAgICBiaXRtYXBf bGlzdF92aWV3IChoZWFkKTsKIAogICBmcHV0cyAocHJlZml4LCBmaWxlKTsK ICAgRVhFQ1VURV9JRl9TRVRfSU5fQklUTUFQIChoZWFkLCAwLCBpLCBiaSkK QEAgLTIxMjYsNiArMjUxNCw5IEBAIGJpdG1hcF9wcmludCAoRklMRSAqZmls ZSwgY29uc3RfYml0bWFwIGgKICAgICAgIGNvbW1hID0gIiwgIjsKICAgICB9 CiAgIGZwdXRzIChzdWZmaXgsIGZpbGUpOworCisgIGlmICh0cmVlX2Zvcm0p CisgICAgYml0bWFwX3RyZWVfdmlldyAoaGVhZCk7CiB9CiAKIApJbmRleDog cmVnaW5mby5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlZ2luZm8u YwkocmV2aXNpb24gMTk2NDEwKQorKysgcmVnaW5mby5jCSh3b3JraW5nIGNv cHkpCkBAIC0xMjUxLDYgKzEyNTEsOCBAQCBpbml0X3N1YnJlZ3Nfb2ZfbW9k ZSAodm9pZCkKICAgaW52YWxpZF9tb2RlX2NoYW5nZXMgPSBCSVRNQVBfQUxM T0MgKE5VTEwpOwogICBiaXRtYXBfb2JzdGFja19pbml0aWFsaXplICgmc3Jv bV9vYnN0YWNrKTsKICAgc3VicmVnc19vZl9tb2RlID0gQklUTUFQX0FMTE9D ICgmc3JvbV9vYnN0YWNrKTsKKyAgYml0bWFwX3RyZWVfdmlldyAoaW52YWxp ZF9tb2RlX2NoYW5nZXMpOworICBiaXRtYXBfdHJlZV92aWV3IChzdWJyZWdz X29mX21vZGUpOwogCiAgIEZPUl9FQUNIX0JCIChiYikKICAgICBGT1JfQkJf SU5TTlMgKGJiLCBpbnNuKQo= --20cf307f3b0a0ccd5904d7356210--