From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: martin rudalics Newsgroups: gmane.emacs.devel Subject: Re: Tooltips GC overhead Date: Sun, 06 Mar 2016 10:21:35 +0100 Message-ID: <56DBF69F.5000508@gmx.at> References: <55B7796B.3070005@gmx.at> <55B87E3F.80708@gmx.at> <55B8E367.9020201@cs.ucla.edu> <55B8F3E9.5000707@gmx.at> <833806yld0.fsf@gnu.org> <55B915CE.7070803@gmx.at> <55B94267.5050208@cs.ucla.edu> <55B9CD5D.8040302@gmx.at> <55B9D017.1000109@cs.ucla.edu> <55B9E8EB.5090402@gmx.at> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------000504090303070108080007" X-Trace: ger.gmane.org 1457256138 27808 80.91.229.3 (6 Mar 2016 09:22:18 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 6 Mar 2016 09:22:18 +0000 (UTC) Cc: emacs-devel@gnu.org To: Paul Eggert Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Mar 06 10:22:10 2016 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1acUt6-0001sa-42 for ged-emacs-devel@m.gmane.org; Sun, 06 Mar 2016 10:22:08 +0100 Original-Received: from localhost ([::1]:49727 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1acUt5-0008FU-I8 for ged-emacs-devel@m.gmane.org; Sun, 06 Mar 2016 04:22:07 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:42545) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1acUsw-0008FE-W3 for emacs-devel@gnu.org; Sun, 06 Mar 2016 04:22:03 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1acUss-0007fl-4u for emacs-devel@gnu.org; Sun, 06 Mar 2016 04:21:58 -0500 Original-Received: from mout.gmx.net ([212.227.15.15]:59333) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1acUsr-0007fe-Jc for emacs-devel@gnu.org; Sun, 06 Mar 2016 04:21:54 -0500 Original-Received: from [192.168.1.100] ([212.95.7.72]) by mail.gmx.com (mrgmx001) with ESMTPSA (Nemesis) id 0M4nt7-1Zfhvy3g9V-00yzq3; Sun, 06 Mar 2016 10:21:40 +0100 In-Reply-To: <55B9E8EB.5090402@gmx.at> X-Provags-ID: V03:K0:2VRUxlTprk7NDaqFuQjq50g0/+F79FO/CH6Yz3+i/nSqQkMHqSH eoYpzuxJ+2e+kNbUqpror37lzZI2oyL2CXU8u/2U4iEiaarPYCfrLnzNm8keMy5hXyUPeOF 38Y3Amb/As10FLCqgzdt32dwyoRroyv5zNuXkkeb/UoxtHPlzBtFqoDTbZvXRXU39k0C8Cm 33LWACsHMNNBspn0qQWOw== X-UI-Out-Filterresults: notjunk:1;V01:K0:rn3mysSGkHg=:5/+B5qqiIeuoJie1JHN7uQ AFW//Kc15W/L7Aq3G5okJANuYhQlSFU3F3jFYVXIttMekYIh9GALPCjNay/wt3jnLGm7QINnw OPoPvsEvnOiVTDlZC9N3EcUNCpiyRbrtQ1+xunRPrPvsoAaNNnR1DCos+MfusJrow9j+sRNV2 alTITWBeyMzCMso3WAy/DutkrlYRA+Xk0N00fjXx6ZuOAMnl7me4OUxbDoyZ9eJqIVa67XBKz OTumMzZmG4yxhII8jzD8A022NsuJ3eezHTZRxLHtAUsdhqvWFqbz62JQjXcu00/zQbGMIpnbg NhOxI8yq1I8PUgQzKfzimUsT4kvfmqiuaM9uEppkGZnt1AU38B5zELWIRE65F4aQnCK35FYAL Axb35MTB/96n4zf/4FyIRrXx5cHbZ9tQ2cnqg4Z7jh8cTH5Jo0GkL8lheOTLlv9YRcLpDYBAt Nv71njFyBCC5I7tInuWFTF7wiuCDK/anQV2NbEVzSc9Ycpt8evKyt4gNXi3dZ0656pvwE68Eg AX7tsU7fvpuNuVgBMYfYBT+WE9gIt0yPK9oglOPQN6HHDHQH+ZBKYHg0SbeVcHg+KzaKAHCwP 4RncCk7twBg+hqCYTGmHYNoktdtF2gETH95QANyUKUtI24HdAKqsdmqrQ5R20yws4L7WJ2lrV 1H1uvf3lO8cr7LU32IDCWKN7kUHRHrQlxoT6N98PFlDYfoBEOYK2s+Lhb4TNZL0dn21FTrHiX 5IEtRJvU2xkQWKS57l+CSUahva2IWk3+Sr1scr6cpep6HAYjPtpZpGK7aXenxb4gqrdHDyHW X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 212.227.15.15 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:200990 Archived-At: This is a multi-part message in MIME format. --------------000504090303070108080007 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit > I suppose most of the overhead goes to x_create_tip_frame - a normal > `make-frame' here gets me "cons: 37464 vector: 33018". Calculating the > tooltip position doesn't seem to add much overhead. So the only way to > fix this is to hide tooltip frames instead of deleting and re-creating > them. If this can be done properly. I now tweaked the code to do that. If nobody objects I intend to apply the attached patch in the next days. Optionally reuse tooltip frames instead of deleting/recreating them. * src/frame.c (tooltip_reuse_hidden_frame): New option. * src/w32fns.c (x_create_tip_frame): Remove argument TEXT. Fix handling of dividers. (x_hide_tip): New function. (Fx_show_tip): Try to reuse old tooltip frame when `tooltip-reuse-hidden-frame' is non-nil and frame parameters have not changed. Insert STRING here instead of passing it to x_create_tip_frame. Compute size of tooltip window with Fwindow_text_pixel_size. Obey Vw32_tooltip_extra_pixels when padding tooltip window. (Fx_hide_tip): Call x_hide_tip. (Vw32_tooltip_extra_pixels): New variable. * src/xdisp.c (Fwindow_text_pixel_size): Don't return negative y value. Fix doc-string. * src/xfns.c (x_create_tip_frame): Remove argument TEXT. Call make_frame with mini_p argument false. (x_hide_tip): New function. (Fx_show_tip): Try to reuse old tooltip frame when `tooltip-reuse-hidden-frame' is non-nil and frame parameters have not changed. Insert STRING here instead of passing it to x_create_tip_frame. Compute size of tooltip window with Fwindow_text_pixel_size. Obey Vw32_tooltip_extra_pixels when padding tooltip window. (Fx_hide_tip): Call x_hide_tip. * lisp/cus-start.el (tooltip-reuse-hidden-frame): Add customization entry. martin --------------000504090303070108080007 Content-Type: text/plain; charset=windows-1252; name="lightweight-tooltips.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="lightweight-tooltips.diff" ZGlmZiAtLWdpdCBhL2xpc3AvY3VzLXN0YXJ0LmVsIGIvbGlzcC9jdXMtc3RhcnQuZWwKaW5k ZXggNWJlNjFjZS4uMWMxMGJmNyAxMDA2NDQKLS0tIGEvbGlzcC9jdXMtc3RhcnQuZWwKKysr IGIvbGlzcC9jdXMtc3RhcnQuZWwKQEAgLTMxMSw2ICszMTEsNyBAQCBtaW5pYnVmZmVyLXBy b21wdC1wcm9wZXJ0aWVzLS1zZXR0ZXIKIAkJCQkJICAgIChjb25zdCA6dGFnICJBbHdheXMi IHQpCiAJCQkJCSAgICAocmVwZWF0IChzeW1ib2wgOnRhZyAiUGFyYW1ldGVyIikpKQogCQkJ CQkgICAiMjUuMSIpCisJICAgICAodG9vbHRpcC1yZXVzZS1oaWRkZW4tZnJhbWUgdG9vbHRp cCBib29sZWFuICIyNi4xIikKIAkgICAgIDs7IGZyaW5nZS5jCiAJICAgICAob3ZlcmZsb3ct bmV3bGluZS1pbnRvLWZyaW5nZSBmcmluZ2UgYm9vbGVhbikKIAkgICAgIDs7IGltYWdlLmMK ZGlmZiAtLWdpdCBhL3NyYy9mcmFtZS5jIGIvc3JjL2ZyYW1lLmMKaW5kZXggZmQ5ZjNjZS4u ZDUzNjQ2OCAxMDA2NDQKLS0tIGEvc3JjL2ZyYW1lLmMKKysrIGIvc3JjL2ZyYW1lLmMKQEAg LTUyNjIsNiArNTI2MiwyMSBAQCBUaGUgZnVuY3Rpb24gYGZyYW1lLS1zaXplLWhpc3Rvcnkn IGRpc3BsYXlzIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlCiBpbiBhIG1vcmUgcmVhZGFi bGUgZm9ybS4gICovKTsKICAgICBmcmFtZV9zaXplX2hpc3RvcnkgPSBRbmlsOwoKKyAgREVG VkFSX0JPT0wgKCJ0b29sdGlwLXJldXNlLWhpZGRlbi1mcmFtZSIsIHRvb2x0aXBfcmV1c2Vf aGlkZGVuX2ZyYW1lLAorCSAgICAgICBkb2M6IC8qIE5vbi1uaWwgbWVhbnMgcmV1c2UgaGlk ZGVuIHRvb2x0aXAgZnJhbWVzLgorV2hlbiB0aGlzIGlzIG5pbCwgZGVsZXRlIGEgdG9vbHRp cCBmcmFtZSB3aGVuIGhpZGluZyB0aGUgYXNzb2NpYXRlZAordG9vbHRpcC4gIFdoZW4gdGhp cyBpcyBub24tbmlsLCBtYWtlIHRoZSB0b29sdGlwIGZyYW1lIGludmlzaWJsZSBvbmx5LAor c28gaXQgY2FuIGJlIHJldXNlZCB3aGVuIHRoZSBuZXh0IHRvb2x0aXAgaXMgc2hvd24uCisK K1NldHRpbmcgdGhpcyB0byBub24tbmlsIG1heSBkcmFzdGljYWxseSByZWR1Y2UgdGhlIGNv bnNpbmcgb3ZlcmhlYWQKK2luY3VycmVkIGJ5IGNyZWF0aW5nIG5ldyB0b29sdGlwIGZyYW1l cy4gIEhvd2V2ZXIsIGEgdmFsdWUgb2Ygbm9uLW5pbAorbWVhbnMgYWxzbyB0aGF0IGludGVy bWl0dGVudCBjaGFuZ2VzIG9mIGZhY2VzIG9yIGBkZWZhdWx0LWZyYW1lLWFsaXN0JworYXJl IG5vdCBhcHBsaWVkIHdoZW4gc2hvd2luZyBhIHRvb2x0aXAgaW4gYSByZXVzZWQgZnJhbWUu CisKK1RoaXMgdmFyaWFibGUgaXMgZWZmZWN0aXZlIG9ubHkgd2l0aCB0aGUgWCB0b29sa2l0 IChhbmQgdGhlcmUgb25seSB3aGVuCitHdGsrIHRvb2x0aXBzIGFyZSBub3QgdXNlZCkgYW5k IG9uIFdpbmRvd3MuICAqLyk7CisgIHRvb2x0aXBfcmV1c2VfaGlkZGVuX2ZyYW1lID0gZmFs c2U7CisKICAgc3RhdGljcHJvICgmVmZyYW1lX2xpc3QpOwoKICAgZGVmc3ViciAoJlNmcmFt ZXApOwpkaWZmIC0tZ2l0IGEvc3JjL3czMmZucy5jIGIvc3JjL3czMmZucy5jCmluZGV4IDEw YzhhZjcuLjJkZmJkYzMgMTAwNjQ0Ci0tLSBhL3NyYy93MzJmbnMuYworKysgYi9zcmMvdzMy Zm5zLmMKQEAgLTY0MTYsOCArNjQxNiw2IEBAIG5vIHZhbHVlIG9mIFRZUEUgKGFsd2F5cyBz dHJpbmcgaW4gdGhlIE1TIFdpbmRvd3MgY2FzZSkuICAqLykKIAkJCQlUb29sIHRpcHMKICAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KCi1zdGF0aWMgTGlzcF9PYmplY3QgeF9jcmVhdGVfdGlwX2Zy YW1lIChzdHJ1Y3QgdzMyX2Rpc3BsYXlfaW5mbyAqLAotCQkJCSAgICAgICBMaXNwX09iamVj dCwgTGlzcF9PYmplY3QpOwogc3RhdGljIHZvaWQgY29tcHV0ZV90aXBfeHkgKHN0cnVjdCBm cmFtZSAqLCBMaXNwX09iamVjdCwgTGlzcF9PYmplY3QsCiAJCQkgICAgTGlzcF9PYmplY3Qs IGludCwgaW50LCBpbnQgKiwgaW50ICopOwoKQEAgLTY0NTIsOCArNjQ1MCw3IEBAIHVud2lu ZF9jcmVhdGVfdGlwX2ZyYW1lIChMaXNwX09iamVjdCBmcmFtZSkKCgogLyogQ3JlYXRlIGEg ZnJhbWUgZm9yIGEgdG9vbHRpcCBvbiB0aGUgZGlzcGxheSBkZXNjcmliZWQgYnkgRFBZSU5G Ty4KLSAgIFBBUk1TIGlzIGEgbGlzdCBvZiBmcmFtZSBwYXJhbWV0ZXJzLiAgVEVYVCBpcyB0 aGUgc3RyaW5nIHRvCi0gICBkaXNwbGF5IGluIHRoZSB0aXAgZnJhbWUuICBWYWx1ZSBpcyB0 aGUgZnJhbWUuCisgICBQQVJNUyBpcyBhIGxpc3Qgb2YgZnJhbWUgcGFyYW1ldGVycy4gIFZh bHVlIGlzIHRoZSBmcmFtZS4KCiAgICBOb3RlIHRoYXQgZnVuY3Rpb25zIGNhbGxlZCBoZXJl LCBlc3AuIHhfZGVmYXVsdF9wYXJhbWV0ZXIgY2FuCiAgICBzaWduYWwgZXJyb3JzLCBmb3Ig aW5zdGFuY2Ugd2hlbiBhIHNwZWNpZmllZCBjb2xvciBuYW1lIGlzCkBAIC02NDYxLDggKzY0 NTgsNyBAQCB1bndpbmRfY3JlYXRlX3RpcF9mcmFtZSAoTGlzcF9PYmplY3QgZnJhbWUpCiAg ICB3aGVuIHRoaXMgaGFwcGVucy4gICovCgogc3RhdGljIExpc3BfT2JqZWN0Ci14X2NyZWF0 ZV90aXBfZnJhbWUgKHN0cnVjdCB3MzJfZGlzcGxheV9pbmZvICpkcHlpbmZvLAotCQkgICAg TGlzcF9PYmplY3QgcGFybXMsIExpc3BfT2JqZWN0IHRleHQpCit4X2NyZWF0ZV90aXBfZnJh bWUgKHN0cnVjdCB3MzJfZGlzcGxheV9pbmZvICpkcHlpbmZvLCBMaXNwX09iamVjdCBwYXJt cykKIHsKICAgc3RydWN0IGZyYW1lICpmOwogICBMaXNwX09iamVjdCBmcmFtZTsKQEAgLTY0 NzEsOCArNjQ2Nyw2IEBAIHhfY3JlYXRlX3RpcF9mcmFtZSAoc3RydWN0IHczMl9kaXNwbGF5 X2luZm8gKmRweWluZm8sCiAgIHB0cmRpZmZfdCBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7 CiAgIHN0cnVjdCBrYm9hcmQgKmtiOwogICBib29sIGZhY2VfY2hhbmdlX2JlZm9yZSA9IGZh Y2VfY2hhbmdlOwotICBMaXNwX09iamVjdCBidWZmZXI7Ci0gIHN0cnVjdCBidWZmZXIgKm9s ZF9idWZmZXI7CiAgIGludCB4X3dpZHRoID0gMCwgeF9oZWlnaHQgPSAwOwoKICAgLyogVXNl IHRoaXMgZ2VuZXJhbCBkZWZhdWx0IHZhbHVlIHRvIHN0YXJ0IHdpdGggdW50aWwgd2Uga25v dyBpZgpAQCAtNjQ5NiwyMyArNjQ5MCw5IEBAIHhfY3JlYXRlX3RpcF9mcmFtZSAoc3RydWN0 IHczMl9kaXNwbGF5X2luZm8gKmRweWluZm8sCiAgIGZyYW1lID0gUW5pbDsKICAgLyogTWFr ZSBhIGZyYW1lIHdpdGhvdXQgbWluaWJ1ZmZlciBub3IgbW9kZS1saW5lLiAgKi8KICAgZiA9 IG1ha2VfZnJhbWUgKGZhbHNlKTsKLSAgZi0+d2FudHNfbW9kZWxpbmUgPSAwOworICBmLT53 YW50c19tb2RlbGluZSA9IGZhbHNlOwogICBYU0VURlJBTUUgKGZyYW1lLCBmKTsKCi0gIEFV VE9fU1RSSU5HICh0aXAsICIgKnRpcCoiKTsKLSAgYnVmZmVyID0gRmdldF9idWZmZXJfY3Jl YXRlICh0aXApOwotICAvKiBVc2Ugc2V0X3dpbmRvd19idWZmZXIgaW5zdGVhZCBvZiBGc2V0 X3dpbmRvd19idWZmZXIgKHNlZQotICAgICBkaXNjdXNzaW9uIG9mIGJ1ZyMxMTk4NCwgYnVn IzEyMDI1LCBidWcjMTIwMjYpLiAgKi8KLSAgc2V0X3dpbmRvd19idWZmZXIgKEZSQU1FX1JP T1RfV0lORE9XIChmKSwgYnVmZmVyLCBmYWxzZSwgZmFsc2UpOwotICBvbGRfYnVmZmVyID0g Y3VycmVudF9idWZmZXI7Ci0gIHNldF9idWZmZXJfaW50ZXJuYWxfMSAoWEJVRkZFUiAoYnVm ZmVyKSk7Ci0gIGJzZXRfdHJ1bmNhdGVfbGluZXMgKGN1cnJlbnRfYnVmZmVyLCBRbmlsKTsK LSAgc3BlY2JpbmQgKFFpbmhpYml0X3JlYWRfb25seSwgUXQpOwotICBzcGVjYmluZCAoUWlu aGliaXRfbW9kaWZpY2F0aW9uX2hvb2tzLCBRdCk7Ci0gIEZlcmFzZV9idWZmZXIgKCk7Ci0g IEZpbnNlcnQgKDEsICZ0ZXh0KTsKLSAgc2V0X2J1ZmZlcl9pbnRlcm5hbF8xIChvbGRfYnVm ZmVyKTsKLQogICByZWNvcmRfdW53aW5kX3Byb3RlY3QgKHVud2luZF9jcmVhdGVfdGlwX2Zy YW1lLCBmcmFtZSk7CgogICAvKiBCeSBzZXR0aW5nIHRoZSBvdXRwdXQgbWV0aG9kLCB3ZSdy ZSBlc3NlbnRpYWxseSBzYXlpbmcgdGhhdApAQCAtNjU0Niw3ICs2NTI2LDcgQEAgeF9jcmVh dGVfdGlwX2ZyYW1lIChzdHJ1Y3QgdzMyX2Rpc3BsYXlfaW5mbyAqZHB5aW5mbywKICAgICB7 CiAgICAgICBmc2V0X25hbWUgKGYsIG5hbWUpOwogICAgICAgZi0+ZXhwbGljaXRfbmFtZSA9 IHRydWU7Ci0gICAgICAvKiB1c2UgdGhlIGZyYW1lJ3MgdGl0bGUgd2hlbiBnZXR0aW5nIHJl c291cmNlcyBmb3IgdGhpcyBmcmFtZS4gICovCisgICAgICAvKiBVc2UgdGhlIGZyYW1lJ3Mg dGl0bGUgd2hlbiBnZXR0aW5nIHJlc291cmNlcyBmb3IgdGhpcyBmcmFtZS4gICovCiAgICAg ICBzcGVjYmluZCAoUXhfcmVzb3VyY2VfbmFtZSwgbmFtZSk7CiAgICAgfQoKQEAgLTY1NzYs MTQgKzY1NTYsMTAgQEAgeF9jcmVhdGVfdGlwX2ZyYW1lIChzdHJ1Y3QgdzMyX2Rpc3BsYXlf aW5mbyAqZHB5aW5mbywKIAlwYXJtcyA9IEZjb25zIChGY29ucyAoUWludGVybmFsX2JvcmRl cl93aWR0aCwgdmFsdWUpLAogCQkgICAgICAgcGFybXMpOwogICAgIH0KKwogICB4X2RlZmF1 bHRfcGFyYW1ldGVyIChmLCBwYXJtcywgUWludGVybmFsX2JvcmRlcl93aWR0aCwgbWFrZV9u dW1iZXIgKDEpLAogCQkgICAgICAgImludGVybmFsQm9yZGVyV2lkdGgiLCAiaW50ZXJuYWxC b3JkZXJXaWR0aCIsCiAJCSAgICAgICBSRVNfVFlQRV9OVU1CRVIpOwotICB4X2RlZmF1bHRf cGFyYW1ldGVyIChmLCBwYXJtcywgUXJpZ2h0X2RpdmlkZXJfd2lkdGgsIG1ha2VfbnVtYmVy ICgwKSwKLQkJICAgICAgIE5VTEwsIE5VTEwsIFJFU19UWVBFX05VTUJFUik7Ci0gIHhfZGVm YXVsdF9wYXJhbWV0ZXIgKGYsIHBhcm1zLCBRYm90dG9tX2RpdmlkZXJfd2lkdGgsIG1ha2Vf bnVtYmVyICgwKSwKLQkJICAgICAgIE5VTEwsIE5VTEwsIFJFU19UWVBFX05VTUJFUik7Ci0K ICAgLyogQWxzbyBkbyB0aGUgc3R1ZmYgd2hpY2ggbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSB3 aW5kb3cgZXhpc3RzLiAgKi8KICAgeF9kZWZhdWx0X3BhcmFtZXRlciAoZiwgcGFybXMsIFFm b3JlZ3JvdW5kX2NvbG9yLCBidWlsZF9zdHJpbmcgKCJibGFjayIpLAogCQkgICAgICAgImZv cmVncm91bmQiLCAiRm9yZWdyb3VuZCIsIFJFU19UWVBFX1NUUklORyk7CkBAIC02NjEwLDYg KzY1ODYsOSBAQCB4X2NyZWF0ZV90aXBfZnJhbWUgKHN0cnVjdCB3MzJfZGlzcGxheV9pbmZv ICpkcHlpbmZvLAogICBmLT5mcmluZ2VfY29scyA9IDA7CiAgIGYtPmxlZnRfZnJpbmdlX3dp ZHRoID0gMDsKICAgZi0+cmlnaHRfZnJpbmdlX3dpZHRoID0gMDsKKyAgLyogTm8gZGl2aWRl cnMgb24gdGlwIGZyYW1lLiAgKi8KKyAgZi0+cmlnaHRfZGl2aWRlcl93aWR0aCA9IDA7Cisg IGYtPmJvdHRvbV9kaXZpZGVyX3dpZHRoID0gMDsKCiAgIGJsb2NrX2lucHV0ICgpOwogICBt eV9jcmVhdGVfdGlwX3dpbmRvdyAoZik7CkBAIC02NjM2LDcgKzY2MTUsNiBAQCB4X2NyZWF0 ZV90aXBfZnJhbWUgKHN0cnVjdCB3MzJfZGlzcGxheV9pbmZvICpkcHlpbmZvLAogICBTRVRf RlJBTUVfTElORVMgKGYsIDApOwogICBhZGp1c3RfZnJhbWVfc2l6ZSAoZiwgd2lkdGggKiBG UkFNRV9DT0xVTU5fV0lEVEggKGYpLAogCQkgICAgIGhlaWdodCAqIEZSQU1FX0xJTkVfSEVJ R0hUIChmKSwgMCwgdHJ1ZSwgUXRpcF9mcmFtZSk7Ci0KICAgLyogQWRkIGB0b29sdGlwJyBm cmFtZSBwYXJhbWV0ZXIncyBkZWZhdWx0IHZhbHVlLiAqLwogICBpZiAoTklMUCAoRmZyYW1l X3BhcmFtZXRlciAoZnJhbWUsIFF0b29sdGlwKSkpCiAgICAgRm1vZGlmeV9mcmFtZV9wYXJh bWV0ZXJzIChmcmFtZSwgRmNvbnMgKEZjb25zIChRdG9vbHRpcCwgUXQpLCBRbmlsKSk7CkBA IC02NjU0LDggKzY2MzIsNiBAQCB4X2NyZWF0ZV90aXBfZnJhbWUgKHN0cnVjdCB3MzJfZGlz cGxheV9pbmZvICpkcHlpbmZvLAogICAgIExpc3BfT2JqZWN0IGZnID0gRmZyYW1lX3BhcmFt ZXRlciAoZnJhbWUsIFFmb3JlZ3JvdW5kX2NvbG9yKTsKICAgICBMaXNwX09iamVjdCBjb2xv cnMgPSBRbmlsOwoKLSAgICAvKiBTZXQgdGlwX2ZyYW1lIGhlcmUsIHNvIHRoYXQgKi8KLSAg ICB0aXBfZnJhbWUgPSBmcmFtZTsKICAgICBjYWxsMiAoUWZhY2Vfc2V0X2FmdGVyX2ZyYW1l X2RlZmF1bHQsIGZyYW1lLCBRbmlsKTsKCiAgICAgaWYgKCFFUSAoYmcsIEZmcmFtZV9wYXJh bWV0ZXIgKGZyYW1lLCBRYmFja2dyb3VuZF9jb2xvcikpKQpAQCAtNjc4Nyw2ICs2NzYzLDQ4 IEBAIGNvbXB1dGVfdGlwX3h5IChzdHJ1Y3QgZnJhbWUgKmYsCiAgICAgKnJvb3RfeCA9IG1p bl94OwogfQoKKy8qIEhpZGUgdG9vbHRpcC4gIERlbGV0ZSBpdHMgZnJhbWUgaWYgREVMRVRF IGlzIHRydWUuICAqLworc3RhdGljIExpc3BfT2JqZWN0Cit4X2hpZGVfdGlwIChib29sIGRl bGV0ZSkKK3sKKyAgaWYgKCFOSUxQICh0aXBfdGltZXIpKQorICAgIHsKKyAgICAgIGNhbGwx IChRY2FuY2VsX3RpbWVyLCB0aXBfdGltZXIpOworICAgICAgdGlwX3RpbWVyID0gUW5pbDsK KyAgICB9CisKKyAgaWYgKE5JTFAgKHRpcF9mcmFtZSkKKyAgICAgIHx8ICghZGVsZXRlICYm IEZSQU1FUCAodGlwX2ZyYW1lKQorCSAgJiYgIUZSQU1FX1ZJU0lCTEVfUCAoWEZSQU1FICh0 aXBfZnJhbWUpKSkpCisgICAgcmV0dXJuIFFuaWw7CisgIGVsc2UKKyAgICB7CisgICAgICBw dHJkaWZmX3QgY291bnQ7CisgICAgICBMaXNwX09iamVjdCB3YXNfb3BlbiA9IFFuaWw7CisK KyAgICAgIGNvdW50ID0gU1BFQ1BETF9JTkRFWCAoKTsKKyAgICAgIHNwZWNiaW5kIChRaW5o aWJpdF9yZWRpc3BsYXksIFF0KTsKKyAgICAgIHNwZWNiaW5kIChRaW5oaWJpdF9xdWl0LCBR dCk7CisKKyAgICAgIGlmIChGUkFNRVAgKHRpcF9mcmFtZSkpCisJeworCSAgaWYgKGRlbGV0 ZSkKKwkgICAgeworCSAgICAgIGRlbGV0ZV9mcmFtZSAodGlwX2ZyYW1lLCBRbmlsKTsKKwkg ICAgICB0aXBfZnJhbWUgPSBRbmlsOworCSAgICB9CisJICBlbHNlCisJICAgIHhfbWFrZV9m cmFtZV9pbnZpc2libGUgKFhGUkFNRSAodGlwX2ZyYW1lKSk7CisKKwkgIHdhc19vcGVuID0g UXQ7CisJfQorICAgICAgZWxzZQorCXRpcF9mcmFtZSA9IFFuaWw7CisKKyAgICAgIHJldHVy biB1bmJpbmRfdG8gKGNvdW50LCB3YXNfb3Blbik7CisgICAgfQorfQorCgogREVGVU4gKCJ4 LXNob3ctdGlwIiwgRnhfc2hvd190aXAsIFN4X3Nob3dfdGlwLCAxLCA2LCAwLAogICAgICAg IGRvYzogLyogU2hvdyBTVFJJTkcgaW4gYSBcInRvb2x0aXBcIiB3aW5kb3cgb24gZnJhbWUg RlJBTUUuCkBAIC02ODIwLDE1ICs2ODM4LDE2IEBAIEEgdG9vbHRpcCdzIG1heGltdW0gc2l6 ZSBpcyBzcGVjaWZpZWQgYnkgYHgtbWF4LXRvb2x0aXAtc2l6ZScuCiBUZXh0IGxhcmdlciB0 aGFuIHRoZSBzcGVjaWZpZWQgc2l6ZSBpcyBjbGlwcGVkLiAgKi8pCiAgIChMaXNwX09iamVj dCBzdHJpbmcsIExpc3BfT2JqZWN0IGZyYW1lLCBMaXNwX09iamVjdCBwYXJtcywgTGlzcF9P YmplY3QgdGltZW91dCwgTGlzcF9PYmplY3QgZHgsIExpc3BfT2JqZWN0IGR5KQogewotICBz dHJ1Y3QgZnJhbWUgKmY7CisgIHN0cnVjdCBmcmFtZSAqZiwgKnRpcF9mOwogICBzdHJ1Y3Qg d2luZG93ICp3OwogICBpbnQgcm9vdF94LCByb290X3k7CiAgIHN0cnVjdCBidWZmZXIgKm9s ZF9idWZmZXI7CiAgIHN0cnVjdCB0ZXh0X3BvcyBwb3M7CiAgIGludCBpLCB3aWR0aCwgaGVp Z2h0OwotICBib29sIHNlZW5fcmV2ZXJzZWRfcDsKICAgaW50IG9sZF93aW5kb3dzX29yX2J1 ZmZlcnNfY2hhbmdlZCA9IHdpbmRvd3Nfb3JfYnVmZmVyc19jaGFuZ2VkOwogICBwdHJkaWZm X3QgY291bnQgPSBTUEVDUERMX0lOREVYICgpOworICBwdHJkaWZmX3QgY291bnRfMTsKKyAg TGlzcF9PYmplY3Qgd2luZG93LCBzaXplOwoKICAgc3BlY2JpbmQgKFFpbmhpYml0X3JlZGlz cGxheSwgUXQpOwoKQEAgLTY4NTIsOTEgKzY4NzEsMTU1IEBAIFRleHQgbGFyZ2VyIHRoYW4g dGhlIHNwZWNpZmllZCBzaXplIGlzIGNsaXBwZWQuICAqLykKICAgaWYgKE5JTFAgKGxhc3Rf c2hvd190aXBfYXJncykpCiAgICAgbGFzdF9zaG93X3RpcF9hcmdzID0gRm1ha2VfdmVjdG9y IChtYWtlX251bWJlciAoMyksIFFuaWwpOwoKLSAgaWYgKCFOSUxQICh0aXBfZnJhbWUpKQor ICBpZiAoRlJBTUVQICh0aXBfZnJhbWUpICYmIEZSQU1FX0xJVkVfUCAoWEZSQU1FICh0aXBf ZnJhbWUpKSkKICAgICB7CiAgICAgICBMaXNwX09iamVjdCBsYXN0X3N0cmluZyA9IEFSRUYg KGxhc3Rfc2hvd190aXBfYXJncywgMCk7CiAgICAgICBMaXNwX09iamVjdCBsYXN0X2ZyYW1l ID0gQVJFRiAobGFzdF9zaG93X3RpcF9hcmdzLCAxKTsKICAgICAgIExpc3BfT2JqZWN0IGxh c3RfcGFybXMgPSBBUkVGIChsYXN0X3Nob3dfdGlwX2FyZ3MsIDIpOwoKLSAgICAgIGlmIChF USAoZnJhbWUsIGxhc3RfZnJhbWUpCi0JICAmJiAhTklMUCAoRmVxdWFsIChsYXN0X3N0cmlu Zywgc3RyaW5nKSkKKyAgICAgIGlmIChGUkFNRV9WSVNJQkxFX1AgKFhGUkFNRSAodGlwX2Zy YW1lKSkKKwkgICYmIEVRIChmcmFtZSwgbGFzdF9mcmFtZSkKKwkgICYmICFOSUxQIChGZXF1 YWxfaW5jbHVkaW5nX3Byb3BlcnRpZXMgKGxhc3Rfc3RyaW5nLCBzdHJpbmcpKQogCSAgJiYg IU5JTFAgKEZlcXVhbCAobGFzdF9wYXJtcywgcGFybXMpKSkKIAl7Ci0JICBzdHJ1Y3QgZnJh bWUgKmYgPSBYRlJBTUUgKHRpcF9mcmFtZSk7Ci0KIAkgIC8qIE9ubHkgRFggYW5kIERZIGhh dmUgY2hhbmdlZC4gICovCisJICB0aXBfZiA9IFhGUkFNRSAodGlwX2ZyYW1lKTsKIAkgIGlm ICghTklMUCAodGlwX3RpbWVyKSkKIAkgICAgewogCSAgICAgIExpc3BfT2JqZWN0IHRpbWVy ID0gdGlwX3RpbWVyOworCiAJICAgICAgdGlwX3RpbWVyID0gUW5pbDsKIAkgICAgICBjYWxs MSAoUWNhbmNlbF90aW1lciwgdGltZXIpOwogCSAgICB9CgogCSAgYmxvY2tfaW5wdXQgKCk7 Ci0JICBjb21wdXRlX3RpcF94eSAoZiwgcGFybXMsIGR4LCBkeSwgRlJBTUVfUElYRUxfV0lE VEggKGYpLAotCQkJICBGUkFNRV9QSVhFTF9IRUlHSFQgKGYpLCAmcm9vdF94LCAmcm9vdF95 KTsKKwkgIGNvbXB1dGVfdGlwX3h5ICh0aXBfZiwgcGFybXMsIGR4LCBkeSwgRlJBTUVfUElY RUxfV0lEVEggKHRpcF9mKSwKKwkJCSAgRlJBTUVfUElYRUxfSEVJR0hUICh0aXBfZiksICZy b290X3gsICZyb290X3kpOwoKIAkgIC8qIFB1dCB0b29sdGlwIGluIHRvcG1vc3QgZ3JvdXAg YW5kIGluIHBvc2l0aW9uLiAgKi8KLQkgIFNldFdpbmRvd1BvcyAoRlJBTUVfVzMyX1dJTkRP VyAoZiksIEhXTkRfVE9QTU9TVCwKKwkgIFNldFdpbmRvd1BvcyAoRlJBTUVfVzMyX1dJTkRP VyAodGlwX2YpLCBIV05EX1RPUE1PU1QsCiAJCQlyb290X3gsIHJvb3RfeSwgMCwgMCwKIAkJ CVNXUF9OT1NJWkUgfCBTV1BfTk9BQ1RJVkFURSB8IFNXUF9OT09XTkVSWk9SREVSKTsKCiAJ ICAvKiBFbnN1cmUgdG9vbHRpcCBpcyBvbiB0b3Agb2Ygb3RoZXIgdG9wbW9zdCB3aW5kb3dz IChlZyBtZW51cykuICAqLwotCSAgU2V0V2luZG93UG9zIChGUkFNRV9XMzJfV0lORE9XIChm KSwgSFdORF9UT1AsCisJICBTZXRXaW5kb3dQb3MgKEZSQU1FX1czMl9XSU5ET1cgKHRpcF9m KSwgSFdORF9UT1AsCiAJCQkwLCAwLCAwLCAwLAogCQkJU1dQX05PTU9WRSB8IFNXUF9OT1NJ WkUKIAkJCXwgU1dQX05PQUNUSVZBVEUgfCBTV1BfTk9PV05FUlpPUkRFUik7CgorCSAgLyog TGV0IHJlZGlzcGxheSBrbm93IHRoYXQgd2UgaGF2ZSBtYWRlIHRoZSBmcmFtZSB2aXNpYmxl IGFscmVhZHkuICAqLworCSAgU0VUX0ZSQU1FX1ZJU0lCTEUgKHRpcF9mLCAxKTsKKwkgIFNo b3dXaW5kb3cgKEZSQU1FX1czMl9XSU5ET1cgKHRpcF9mKSwgU1dfU0hPV05PQUNUSVZBVEUp OwogCSAgdW5ibG9ja19pbnB1dCAoKTsKKwogCSAgZ290byBzdGFydF90aW1lcjsKIAl9Ci0g ICAgfQorICAgICAgZWxzZSBpZiAodG9vbHRpcF9yZXVzZV9oaWRkZW5fZnJhbWUgJiYgRVEg KGZyYW1lLCBsYXN0X2ZyYW1lKSkKKwl7CisJICBib29sIGRlbGV0ZSA9IGZhbHNlOworCSAg TGlzcF9PYmplY3QgdGFpbCwgZWx0LCBwYXJtLCBsYXN0OwoKLSAgLyogSGlkZSBhIHByZXZp b3VzIHRpcCwgaWYgYW55LiAgKi8KLSAgRnhfaGlkZV90aXAgKCk7CisJICAvKiBDaGVjayBp ZiBldmVyeSBwYXJhbWV0ZXIgaW4gUEFSTVMgaGFzIHRoZSBzYW1lIHZhbHVlIGluCisJICAg ICBsYXN0X3Bhcm1zLiAgVGhpcyBtYXkgZGVzdHJ1Y3QgbGFzdF9wYXJtcyB3aGljaCwgaG93 ZXZlciwKKwkgICAgIHdpbGwgYmUgcmVjcmVhdGVkIGJlbG93LiAgKi8KKwkgIGZvciAodGFp bCA9IHBhcm1zOyBDT05TUCAodGFpbCk7IHRhaWwgPSBYQ0RSICh0YWlsKSkKKwkgICAgewor CSAgICAgIGVsdCA9IFhDQVIgKHRhaWwpOworCSAgICAgIHBhcm0gPSBGY2FyIChlbHQpOwor CSAgICAgIC8qIFRoZSBsZWZ0LCB0b3AsIHJpZ2h0IGFuZCBib3R0b20gcGFyYW1ldGVycyBh cmUgaGFuZGxlZAorCQkgYnkgY29tcHV0ZV90aXBfeHkgc28gdGhleSBjYW4gYmUgaWdub3Jl ZCBoZXJlLiAgKi8KKwkgICAgICBpZiAoIUVRIChwYXJtLCBRbGVmdCkgJiYgIUVRIChwYXJt LCBRdG9wKQorCQkgICYmICFFUSAocGFybSwgUXJpZ2h0KSAmJiAhRVEgKHBhcm0sIFFib3R0 b20pKQorCQl7CisJCSAgbGFzdCA9IEZhc3NxIChwYXJtLCBsYXN0X3Bhcm1zKTsKKwkJICBp ZiAoTklMUCAoRmVxdWFsIChGY2RyIChlbHQpLCBGY2RyIChsYXN0KSkpKQorCQkgICAgewor CQkgICAgICAvKiBXZSBsb3N0LCBkZWxldGUgdGhlIG9sZCB0b29sdGlwLiAgKi8KKwkJICAg ICAgZGVsZXRlID0gdHJ1ZTsKKwkJICAgICAgYnJlYWs7CisJCSAgICB9CisJCSAgZWxzZQor CQkgICAgbGFzdF9wYXJtcyA9IGNhbGwyIChRYXNzcV9kZWxldGVfYWxsLCBwYXJtLCBsYXN0 X3Bhcm1zKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJbGFzdF9wYXJtcyA9IGNhbGwyIChRYXNz cV9kZWxldGVfYWxsLCBwYXJtLCBsYXN0X3Bhcm1zKTsKKwkgICAgfQorCisJICAvKiBOb3cg Y2hlY2sgaWYgdGhlcmUncyBhIHBhcmFtZXRlciBsZWZ0IGluIGxhc3RfcGFybXMgd2l0aCBh CisJICAgICBub24tbmlsIHZhbHVlLiAgKi8KKwkgIGZvciAodGFpbCA9IGxhc3RfcGFybXM7 IENPTlNQICh0YWlsKTsgdGFpbCA9IFhDRFIgKHRhaWwpKQorCSAgICB7CisJICAgICAgZWx0 ID0gWENBUiAodGFpbCk7CisJICAgICAgcGFybSA9IEZjYXIgKGVsdCk7CisJICAgICAgaWYg KCFFUSAocGFybSwgUWxlZnQpICYmICFFUSAocGFybSwgUXRvcCkgJiYgIUVRIChwYXJtLCBR cmlnaHQpCisJCSAgJiYgIUVRIChwYXJtLCBRYm90dG9tKSAmJiAhTklMUCAoRmNkciAoZWx0 KSkpCisJCXsKKwkJICAvKiBXZSBsb3N0LCBkZWxldGUgdGhlIG9sZCB0b29sdGlwLiAgKi8K KwkJICBkZWxldGUgPSB0cnVlOworCQkgIGJyZWFrOworCQl9CisJICAgIH0KKworCSAgeF9o aWRlX3RpcCAoZGVsZXRlKTsKKwl9CisgICAgICBlbHNlCisJeF9oaWRlX3RpcCAodHJ1ZSk7 CisgICAgfQorICBlbHNlCisgICAgeF9oaWRlX3RpcCAodHJ1ZSk7CgogICBBU0VUIChsYXN0 X3Nob3dfdGlwX2FyZ3MsIDAsIHN0cmluZyk7CiAgIEFTRVQgKGxhc3Rfc2hvd190aXBfYXJn cywgMSwgZnJhbWUpOwogICBBU0VUIChsYXN0X3Nob3dfdGlwX2FyZ3MsIDIsIHBhcm1zKTsK Ci0gIC8qIEFkZCBkZWZhdWx0IHZhbHVlcyB0byBmcmFtZSBwYXJhbWV0ZXJzLiAgKi8KLSAg aWYgKE5JTFAgKEZhc3NxIChRbmFtZSwgcGFybXMpKSkKLSAgICBwYXJtcyA9IEZjb25zIChG Y29ucyAoUW5hbWUsIGJ1aWxkX3N0cmluZyAoInRvb2x0aXAiKSksIHBhcm1zKTsKLSAgaWYg KE5JTFAgKEZhc3NxIChRaW50ZXJuYWxfYm9yZGVyX3dpZHRoLCBwYXJtcykpKQotICAgIHBh cm1zID0gRmNvbnMgKEZjb25zIChRaW50ZXJuYWxfYm9yZGVyX3dpZHRoLCBtYWtlX251bWJl ciAoMykpLCBwYXJtcyk7Ci0gIGlmIChOSUxQIChGYXNzcSAoUXJpZ2h0X2RpdmlkZXJfd2lk dGgsIHBhcm1zKSkpCi0gICAgcGFybXMgPSBGY29ucyAoRmNvbnMgKFFyaWdodF9kaXZpZGVy X3dpZHRoLCBtYWtlX251bWJlciAoMCkpLCBwYXJtcyk7Ci0gIGlmIChOSUxQIChGYXNzcSAo UWJvdHRvbV9kaXZpZGVyX3dpZHRoLCBwYXJtcykpKQotICAgIHBhcm1zID0gRmNvbnMgKEZj b25zIChRYm90dG9tX2RpdmlkZXJfd2lkdGgsIG1ha2VfbnVtYmVyICgwKSksIHBhcm1zKTsK LSAgaWYgKE5JTFAgKEZhc3NxIChRYm9yZGVyX3dpZHRoLCBwYXJtcykpKQotICAgIHBhcm1z ID0gRmNvbnMgKEZjb25zIChRYm9yZGVyX3dpZHRoLCBtYWtlX251bWJlciAoMSkpLCBwYXJt cyk7Ci0gIGlmIChOSUxQIChGYXNzcSAoUWJvcmRlcl9jb2xvciwgcGFybXMpKSkKLSAgICBw YXJtcyA9IEZjb25zIChGY29ucyAoUWJvcmRlcl9jb2xvciwgYnVpbGRfc3RyaW5nICgibGln aHR5ZWxsb3ciKSksIHBhcm1zKTsKLSAgaWYgKE5JTFAgKEZhc3NxIChRYmFja2dyb3VuZF9j b2xvciwgcGFybXMpKSkKLSAgICBwYXJtcyA9IEZjb25zIChGY29ucyAoUWJhY2tncm91bmRf Y29sb3IsIGJ1aWxkX3N0cmluZyAoImxpZ2h0eWVsbG93IikpLAotCQkgICBwYXJtcyk7Ci0K ICAgLyogQmxvY2sgaW5wdXQgdW50aWwgdGhlIHRpcCBoYXMgYmVlbiBmdWxseSBkcmF3biwg dG8gYXZvaWQgY3Jhc2hlcwogICAgICB3aGVuIGRyYXdpbmcgdGlwcyBpbiBtZW51cy4gICov CiAgIGJsb2NrX2lucHV0ICgpOwoKLSAgLyogQ3JlYXRlIGEgZnJhbWUgZm9yIHRoZSB0b29s dGlwLCBhbmQgcmVjb3JkIGl0IGluIHRoZSBnbG9iYWwKLSAgICAgdmFyaWFibGUgdGlwX2Zy YW1lLiAgKi8KLSAgZnJhbWUgPSB4X2NyZWF0ZV90aXBfZnJhbWUgKEZSQU1FX0RJU1BMQVlf SU5GTyAoZiksIHBhcm1zLCBzdHJpbmcpOwotICBmID0gWEZSQU1FIChmcmFtZSk7CisgIGlm ICghRlJBTUVQICh0aXBfZnJhbWUpIHx8ICFGUkFNRV9MSVZFX1AgKFhGUkFNRSAodGlwX2Zy YW1lKSkpCisgICAgeworICAgICAgLyogQWRkIGRlZmF1bHQgdmFsdWVzIHRvIGZyYW1lIHBh cmFtZXRlcnMuICAqLworICAgICAgaWYgKE5JTFAgKEZhc3NxIChRbmFtZSwgcGFybXMpKSkK KwlwYXJtcyA9IEZjb25zIChGY29ucyAoUW5hbWUsIGJ1aWxkX3N0cmluZyAoInRvb2x0aXAi KSksIHBhcm1zKTsKKyAgICAgIGlmIChOSUxQIChGYXNzcSAoUWludGVybmFsX2JvcmRlcl93 aWR0aCwgcGFybXMpKSkKKwlwYXJtcyA9IEZjb25zIChGY29ucyAoUWludGVybmFsX2JvcmRl cl93aWR0aCwgbWFrZV9udW1iZXIgKDMpKSwgcGFybXMpOworICAgICAgaWYgKE5JTFAgKEZh c3NxIChRYm9yZGVyX3dpZHRoLCBwYXJtcykpKQorCXBhcm1zID0gRmNvbnMgKEZjb25zIChR Ym9yZGVyX3dpZHRoLCBtYWtlX251bWJlciAoMSkpLCBwYXJtcyk7CisgICAgICBpZiAoTklM UCAoRmFzc3EgKFFib3JkZXJfY29sb3IsIHBhcm1zKSkpCisJcGFybXMgPSBGY29ucyAoRmNv bnMgKFFib3JkZXJfY29sb3IsIGJ1aWxkX3N0cmluZyAoImxpZ2h0eWVsbG93IikpLCBwYXJt cyk7CisgICAgICBpZiAoTklMUCAoRmFzc3EgKFFiYWNrZ3JvdW5kX2NvbG9yLCBwYXJtcykp KQorCXBhcm1zID0gRmNvbnMgKEZjb25zIChRYmFja2dyb3VuZF9jb2xvciwgYnVpbGRfc3Ry aW5nICgibGlnaHR5ZWxsb3ciKSksCisJCSAgICAgICBwYXJtcyk7CisKKyAgICAgIC8qIENy ZWF0ZSBhIGZyYW1lIGZvciB0aGUgdG9vbHRpcCwgYW5kIHJlY29yZCBpdCBpbiB0aGUgZ2xv YmFsCisJIHZhcmlhYmxlIHRpcF9mcmFtZS4gICovCisgICAgICBpZiAoTklMUCAodGlwX2Zy YW1lID0geF9jcmVhdGVfdGlwX2ZyYW1lIChGUkFNRV9ESVNQTEFZX0lORk8gKGYpLCBwYXJt cykpKQorCXsKKwkgIC8qIENyZWF0aW5nIHRoZSB0aXAgZnJhbWUgZmFpbGVkLiAgKi8KKwkg IHVuYmxvY2tfaW5wdXQgKCk7CisJICByZXR1cm4gdW5iaW5kX3RvIChjb3VudCwgUW5pbCk7 CisJfQorICAgIH0KKworICB0aXBfZiA9IFhGUkFNRSAodGlwX2ZyYW1lKTsKKyAgd2luZG93 ID0gRlJBTUVfUk9PVF9XSU5ET1cgKHRpcF9mKTsKKyAgQVVUT19TVFJJTkcgKHRpcCwgIiAq dGlwKiIpOworICBzZXRfd2luZG93X2J1ZmZlciAod2luZG93LCBGZ2V0X2J1ZmZlcl9jcmVh dGUgKHRpcCksIGZhbHNlLCBmYWxzZSk7CisgIHcgPSBYV0lORE9XICh3aW5kb3cpOworICB3 LT5wc2V1ZG9fd2luZG93X3AgPSB0cnVlOwoKLSAgLyogU2V0IHVwIHRoZSBmcmFtZSdzIHJv b3Qgd2luZG93LiAgKi8KLSAgdyA9IFhXSU5ET1cgKEZSQU1FX1JPT1RfV0lORE9XIChmKSk7 CisgIC8qIFNldCB1cCB0aGUgZnJhbWUncyByb290IHdpbmRvdy4gIE5vdGU6IFRoZSBmb2xs b3dpbmcgY29kZSBkb2VzIG5vdAorICAgICB0cnkgdG8gc2l6ZSB0aGUgd2luZG93IG9yIGl0 cyBmcmFtZSBjb3JyZWN0bHkuICBJdHMgb25seSBwdXJwb3NlIGlzCisgICAgIHRvIG1ha2Ug dGhlIHN1YnNlcXVlbnQgdGV4dCBzaXplIGNhbGN1bGF0aW9ucyB3b3JrLiAgVGhlIHJpZ2h0 CisgICAgIHNpemVzIHNob3VsZCBnZXQgaW5zdGFsbGVkIHdoZW4gdGhlIHRvb2xraXQgZ2V0 cyBiYWNrIHRvIHVzLiAgKi8KICAgdy0+bGVmdF9jb2wgPSAwOwogICB3LT50b3BfbGluZSA9 IDA7CiAgIHctPnBpeGVsX2xlZnQgPSAwOwogICB3LT5waXhlbF90b3AgPSAwOwoKICAgaWYg KENPTlNQIChWeF9tYXhfdG9vbHRpcF9zaXplKQotICAgICAgJiYgSU5URUdFUlAgKFhDQVIg KFZ4X21heF90b29sdGlwX3NpemUpKQotICAgICAgJiYgWElOVCAoWENBUiAoVnhfbWF4X3Rv b2x0aXBfc2l6ZSkpID4gMAotICAgICAgJiYgSU5URUdFUlAgKFhDRFIgKFZ4X21heF90b29s dGlwX3NpemUpKQotICAgICAgJiYgWElOVCAoWENEUiAoVnhfbWF4X3Rvb2x0aXBfc2l6ZSkp ID4gMCkKKyAgICAgICYmIFJBTkdFRF9JTlRFR0VSUCAoMSwgWENBUiAoVnhfbWF4X3Rvb2x0 aXBfc2l6ZSksIElOVF9NQVgpCisgICAgICAmJiBSQU5HRURfSU5URUdFUlAgKDEsIFhDRFIg KFZ4X21heF90b29sdGlwX3NpemUpLCBJTlRfTUFYKSkKICAgICB7CiAgICAgICB3LT50b3Rh bF9jb2xzID0gWEZBU1RJTlQgKFhDQVIgKFZ4X21heF90b29sdGlwX3NpemUpKTsKICAgICAg IHctPnRvdGFsX2xpbmVzID0gWEZBU1RJTlQgKFhDRFIgKFZ4X21heF90b29sdGlwX3NpemUp KTsKQEAgLTY5NDcsMTY0ICs3MDMwLDcxIEBAIFRleHQgbGFyZ2VyIHRoYW4gdGhlIHNwZWNp ZmllZCBzaXplIGlzIGNsaXBwZWQuICAqLykKICAgICAgIHctPnRvdGFsX2xpbmVzID0gNDA7 CiAgICAgfQoKLSAgdy0+cGl4ZWxfd2lkdGggPSB3LT50b3RhbF9jb2xzICogRlJBTUVfQ09M VU1OX1dJRFRIIChmKTsKLSAgdy0+cGl4ZWxfaGVpZ2h0ID0gdy0+dG90YWxfbGluZXMgKiBG UkFNRV9MSU5FX0hFSUdIVCAoZik7Ci0KLSAgRlJBTUVfVE9UQUxfQ09MUyAoZikgPSBXSU5E T1dfVE9UQUxfQ09MUyAodyk7Ci0gIGFkanVzdF9mcmFtZV9nbHlwaHMgKGYpOwotICB3LT5w c2V1ZG9fd2luZG93X3AgPSB0cnVlOworICB3LT5waXhlbF93aWR0aCA9IHctPnRvdGFsX2Nv bHMgKiBGUkFNRV9DT0xVTU5fV0lEVEggKHRpcF9mKTsKKyAgdy0+cGl4ZWxfaGVpZ2h0ID0g dy0+dG90YWxfbGluZXMgKiBGUkFNRV9MSU5FX0hFSUdIVCAodGlwX2YpOworICBGUkFNRV9U T1RBTF9DT0xTICh0aXBfZikgPSBXSU5ET1dfVE9UQUxfQ09MUyAodyk7CisgIGFkanVzdF9m cmFtZV9nbHlwaHMgKHRpcF9mKTsKCi0gIC8qIERpc3BsYXkgdGhlIHRvb2x0aXAgdGV4dCBp biBhIHRlbXBvcmFyeSBidWZmZXIuICAqLworICAvKiBJbnNlcnQgU1RSSU5HIGludG8gdGhl IHJvb3Qgd2luZG93J3MgYnVmZmVyIGFuZCBmaXQgdGhlIGZyYW1lIHRvCisgICAgIHRoZSBi dWZmZXIuICAqLworICBjb3VudF8xID0gU1BFQ1BETF9JTkRFWCAoKTsKICAgb2xkX2J1ZmZl ciA9IGN1cnJlbnRfYnVmZmVyOwotICBzZXRfYnVmZmVyX2ludGVybmFsXzEgKFhCVUZGRVIg KFhXSU5ET1cgKEZSQU1FX1JPT1RfV0lORE9XIChmKSktPmNvbnRlbnRzKSk7CisgIHNldF9i dWZmZXJfaW50ZXJuYWxfMSAoWEJVRkZFUiAody0+Y29udGVudHMpKTsKICAgYnNldF90cnVu Y2F0ZV9saW5lcyAoY3VycmVudF9idWZmZXIsIFFuaWwpOworICBzcGVjYmluZCAoUWluaGli aXRfcmVhZF9vbmx5LCBRdCk7CisgIHNwZWNiaW5kIChRaW5oaWJpdF9tb2RpZmljYXRpb25f aG9va3MsIFF0KTsKKyAgc3BlY2JpbmQgKFFpbmhpYml0X3BvaW50X21vdGlvbl9ob29rcywg UXQpOworICBGZXJhc2VfYnVmZmVyICgpOworICBGaW5zZXJ0ICgxLCAmc3RyaW5nKTsKICAg Y2xlYXJfZ2x5cGhfbWF0cml4ICh3LT5kZXNpcmVkX21hdHJpeCk7CiAgIGNsZWFyX2dseXBo X21hdHJpeCAody0+Y3VycmVudF9tYXRyaXgpOwogICBTRVRfVEVYVF9QT1MgKHBvcywgQkVH ViwgQkVHVl9CWVRFKTsKLSAgdHJ5X3dpbmRvdyAoRlJBTUVfUk9PVF9XSU5ET1cgKGYpLCBw b3MsIFRSWV9XSU5ET1dfSUdOT1JFX0ZPTlRTX0NIQU5HRSk7Ci0KLSAgLyogQ29tcHV0ZSB3 aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSB0b29sdGlwLiAgKi8KLSAgd2lkdGggPSBoZWlnaHQg PSAwOwotICBzZWVuX3JldmVyc2VkX3AgPSBmYWxzZTsKLSAgZm9yIChpID0gMDsgaSA8IHct PmRlc2lyZWRfbWF0cml4LT5ucm93czsgKytpKQotICAgIHsKLSAgICAgIHN0cnVjdCBnbHlw aF9yb3cgKnJvdyA9ICZ3LT5kZXNpcmVkX21hdHJpeC0+cm93c1tpXTsKLSAgICAgIHN0cnVj dCBnbHlwaCAqbGFzdDsKLSAgICAgIGludCByb3dfd2lkdGg7Ci0KLSAgICAgIC8qIFN0b3Ag YXQgdGhlIGZpcnN0IGVtcHR5IHJvdyBhdCB0aGUgZW5kLiAgKi8KLSAgICAgIGlmICghcm93 LT5lbmFibGVkX3AgfHwgIU1BVFJJWF9ST1dfRElTUExBWVNfVEVYVF9QIChyb3cpKQotCWJy ZWFrOwotCi0gICAgICAvKiBMZXQgdGhlIHJvdyBnbyBvdmVyIHRoZSBmdWxsIHdpZHRoIG9m IHRoZSBmcmFtZS4gICovCi0gICAgICByb3ctPmZ1bGxfd2lkdGhfcCA9IHRydWU7Ci0KLSAg ICAgIHJvd193aWR0aCA9IHJvdy0+cGl4ZWxfd2lkdGg7Ci0gICAgICBpZiAocm93LT51c2Vk W1RFWFRfQVJFQV0pCi0JewotCSAgaWYgKCFyb3ctPnJldmVyc2VkX3ApCi0JICAgIHsKLQkg ICAgICAvKiBUaGVyZSdzIGEgZ2x5cGggYXQgdGhlIGVuZCBvZiByb3dzIHRoYXQgaXMgdXNl ZCB0bwotCQkgcGxhY2UgdGhlIGN1cnNvciB0aGVyZS4gIERvbid0IGluY2x1ZGUgdGhlIHdp ZHRoIG9mCi0JCSB0aGlzIGdseXBoLiAgKi8KLQkgICAgICBsYXN0ID0gJnJvdy0+Z2x5cGhz W1RFWFRfQVJFQV1bcm93LT51c2VkW1RFWFRfQVJFQV0gLSAxXTsKLQkgICAgICBpZiAoTklM UCAobGFzdC0+b2JqZWN0KSkKLQkJcm93X3dpZHRoIC09IGxhc3QtPnBpeGVsX3dpZHRoOwot CSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICAvKiBUaGVyZSBjb3VsZCBiZSBhIHN0 cmV0Y2ggZ2x5cGggYXQgdGhlIGJlZ2lubmluZyBvZiBSMkwKLQkJIHJvd3MgdGhhdCBpcyBw cm9kdWNlZCBieSBleHRlbmRfZmFjZV90b19lbmRfb2ZfbGluZS4KLQkJIERvbid0IGNvdW50 IHRoYXQgZ2x5cGguICAqLwotCSAgICAgIHN0cnVjdCBnbHlwaCAqZyA9IHJvdy0+Z2x5cGhz W1RFWFRfQVJFQV07Ci0KLQkgICAgICBpZiAoZy0+dHlwZSA9PSBTVFJFVENIX0dMWVBIICYm IE5JTFAgKGctPm9iamVjdCkpCi0JCXsKLQkJICByb3dfd2lkdGggLT0gZy0+cGl4ZWxfd2lk dGg7Ci0JCSAgc2Vlbl9yZXZlcnNlZF9wID0gdHJ1ZTsKLQkJfQotCSAgICB9Ci0JfQotCi0g ICAgICBoZWlnaHQgKz0gcm93LT5oZWlnaHQ7Ci0gICAgICB3aWR0aCA9IG1heCAod2lkdGgs IHJvd193aWR0aCk7Ci0gICAgfQotCi0gIC8qIElmIHdlJ3ZlIHNlZW4gcGFydGlhbC1sZW5n dGggUjJMIHJvd3MsIHdlIG5lZWQgdG8gcmUtYWRqdXN0IHRoZQotICAgICB0b29sLXRpcCBm cmFtZSB3aWR0aCBhbmQgcmVkaXNwbGF5IGl0IGFnYWluLCB0byBhdm9pZCBvdmVyLXdpZGUK LSAgICAgdGlwcyBkdWUgdG8gdGhlIHN0cmV0Y2ggZ2x5cGggdGhhdCBleHRlbmRzIFIyTCBs aW5lcyB0byBmdWxsCi0gICAgIHdpZHRoIG9mIHRoZSBmcmFtZS4gICovCi0gIGlmIChzZWVu X3JldmVyc2VkX3ApCi0gICAgewotICAgICAgLyogUFhXOiBXaHkgZG8gd2UgZG8gdGhlIHBp eGVsLXRvLWNvbHMgY29udmVyc2lvbiBvbmx5IGlmCi0JIHNlZW5fcmV2ZXJzZWRfcCBob2xk cz8gIERvbid0IHdlIGhhdmUgdG8gc2V0IG90aGVyIGZpZWxkcyBvZgotCSB0aGUgd2luZG93 L2ZyYW1lIHN0cnVjdHVyZT8KLQotCSB3LT50b3RhbF9jb2xzIGFuZCBGUkFNRV9UT1RBTF9D T0xTIHdhbnQgdGhlIHdpZHRoIGluIGNvbHVtbnMsCi0JIG5vdCBpbiBwaXhlbHMuICAqLwot ICAgICAgdy0+cGl4ZWxfd2lkdGggPSB3aWR0aDsKLSAgICAgIHdpZHRoIC89IFdJTkRPV19G UkFNRV9DT0xVTU5fV0lEVEggKHcpOwotICAgICAgdy0+dG90YWxfY29scyA9IHdpZHRoOwot ICAgICAgRlJBTUVfVE9UQUxfQ09MUyAoZikgPSB3aWR0aDsKLSAgICAgIFNFVF9GUkFNRV9X SURUSCAoZiwgd2lkdGgpOwotICAgICAgYWRqdXN0X2ZyYW1lX2dseXBocyAoZik7Ci0gICAg ICB3LT5wc2V1ZG9fd2luZG93X3AgPSAxOwotICAgICAgY2xlYXJfZ2x5cGhfbWF0cml4ICh3 LT5kZXNpcmVkX21hdHJpeCk7Ci0gICAgICBjbGVhcl9nbHlwaF9tYXRyaXggKHctPmN1cnJl bnRfbWF0cml4KTsKLSAgICAgIHRyeV93aW5kb3cgKEZSQU1FX1JPT1RfV0lORE9XIChmKSwg cG9zLCBUUllfV0lORE9XX0lHTk9SRV9GT05UU19DSEFOR0UpOwotICAgICAgd2lkdGggPSBo ZWlnaHQgPSAwOwotICAgICAgLyogUmVjb21wdXRlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhl IHRvb2x0aXAuICAqLwotICAgICAgZm9yIChpID0gMDsgaSA8IHctPmRlc2lyZWRfbWF0cml4 LT5ucm93czsgKytpKQotCXsKLQkgIHN0cnVjdCBnbHlwaF9yb3cgKnJvdyA9ICZ3LT5kZXNp cmVkX21hdHJpeC0+cm93c1tpXTsKLQkgIHN0cnVjdCBnbHlwaCAqbGFzdDsKLQkgIGludCBy b3dfd2lkdGg7Ci0KLQkgIGlmICghcm93LT5lbmFibGVkX3AgfHwgIU1BVFJJWF9ST1dfRElT UExBWVNfVEVYVF9QIChyb3cpKQotCSAgICBicmVhazsKLQkgIHJvdy0+ZnVsbF93aWR0aF9w ID0gdHJ1ZTsKLQkgIHJvd193aWR0aCA9IHJvdy0+cGl4ZWxfd2lkdGg7Ci0JICBpZiAocm93 LT51c2VkW1RFWFRfQVJFQV0gJiYgIXJvdy0+cmV2ZXJzZWRfcCkKLQkgICAgewotCSAgICAg IGxhc3QgPSAmcm93LT5nbHlwaHNbVEVYVF9BUkVBXVtyb3ctPnVzZWRbVEVYVF9BUkVBXSAt IDFdOwotCSAgICAgIGlmIChOSUxQIChsYXN0LT5vYmplY3QpKQotCQlyb3dfd2lkdGggLT0g bGFzdC0+cGl4ZWxfd2lkdGg7Ci0JICAgIH0KLQotCSAgaGVpZ2h0ICs9IHJvdy0+aGVpZ2h0 OwotCSAgd2lkdGggPSBtYXggKHdpZHRoLCByb3dfd2lkdGgpOwotCX0KLSAgICB9Ci0KLSAg LyogQWRkIHRoZSBmcmFtZSdzIGludGVybmFsIGJvcmRlciB0byB0aGUgd2lkdGggYW5kIGhl aWdodCB0aGUgdzMyCi0gICAgIHdpbmRvdyBzaG91bGQgaGF2ZS4gICovCi0gIGhlaWdodCAr PSAyICogRlJBTUVfSU5URVJOQUxfQk9SREVSX1dJRFRIIChmKTsKLSAgd2lkdGggKz0gMiAq IEZSQU1FX0lOVEVSTkFMX0JPUkRFUl9XSURUSCAoZik7Ci0KLSAgLyogTW92ZSB0aGUgdG9v bHRpcCB3aW5kb3cgd2hlcmUgdGhlIG1vdXNlIHBvaW50ZXIgaXMuICBSZXNpemUgYW5kCi0g ICAgIHNob3cgaXQuCi0KLSAgICAgUFhXOiBUaGlzIHNob3VsZCB1c2UgdGhlIGZyYW1lJ3Mg cGl4ZWwgY29vcmRpbmF0ZXMuICAqLwotICBjb21wdXRlX3RpcF94eSAoZiwgcGFybXMsIGR4 LCBkeSwgd2lkdGgsIGhlaWdodCwgJnJvb3RfeCwgJnJvb3RfeSk7Ci0KKyAgdHJ5X3dpbmRv dyAod2luZG93LCBwb3MsIFRSWV9XSU5ET1dfSUdOT1JFX0ZPTlRTX0NIQU5HRSk7CisgIC8q IENhbGN1bGF0ZSBzaXplIG9mIHRvb2x0aXAgd2luZG93LiAgKi8KKyAgc2l6ZSA9IEZ3aW5k b3dfdGV4dF9waXhlbF9zaXplICh3aW5kb3csIFFuaWwsIFFuaWwsIFFuaWwsCisJCQkJICBt YWtlX251bWJlciAody0+cGl4ZWxfaGVpZ2h0KSwgUW5pbCk7CisgIC8qIEFkZCB0aGUgZnJh bWUncyBpbnRlcm5hbCBib3JkZXIgdG8gY2FsY3VsYXRlZCBzaXplLiAgKi8KKyAgd2lkdGgg PSBYSU5UIChGY2FyIChzaXplKSkgKyAyICogRlJBTUVfSU5URVJOQUxfQk9SREVSX1dJRFRI ICh0aXBfZik7CisgIGhlaWdodCA9IFhJTlQgKEZjZHIgKHNpemUpKSArIDIgKiBGUkFNRV9J TlRFUk5BTF9CT1JERVJfV0lEVEggKHRpcF9mKTsKKyAgLyogQ2FsY3VsYXRlIHBvc2l0aW9u IG9mIHRvb2x0aXAgZnJhbWUuICAqLworICBjb21wdXRlX3RpcF94eSAodGlwX2YsIHBhcm1z LCBkeCwgZHksIHdpZHRoLCBoZWlnaHQsICZyb290X3gsICZyb290X3kpOworCisgIC8qIFNo b3cgdG9vbHRpcCBmcmFtZS4gICovCiAgIHsKLSAgICAvKiBBZGp1c3QgV2luZG93IHNpemUg dG8gdGFrZSBib3JkZXIgaW50byBhY2NvdW50LiAgKi8KICAgICBSRUNUIHJlY3Q7CisgICAg aW50IHBhZCA9IChOVU1CRVJQIChWdzMyX3Rvb2x0aXBfZXh0cmFfcGl4ZWxzKQorCSAgICAg ICA/IG1heCAoMCwgWElOVCAoVnczMl90b29sdGlwX2V4dHJhX3BpeGVscykpCisJICAgICAg IDogRlJBTUVfQ09MVU1OX1dJRFRIICh0aXBfZikpOworCiAgICAgcmVjdC5sZWZ0ID0gcmVj dC50b3AgPSAwOwogICAgIHJlY3QucmlnaHQgPSB3aWR0aDsKICAgICByZWN0LmJvdHRvbSA9 IGhlaWdodDsKLSAgICBBZGp1c3RXaW5kb3dSZWN0ICgmcmVjdCwgZi0+b3V0cHV0X2RhdGEu dzMyLT5kd1N0eWxlLCBmYWxzZSk7Ci0KLSAgICAvKiBQb3NpdGlvbiBhbmQgc2l6ZSB0b29s dGlwLCBhbmQgcHV0IGl0IGluIHRoZSB0b3Btb3N0IGdyb3VwLgotICAgICAgIFRoZSBhZGQt b24gb2YgRlJBTUVfQ09MVU1OX1dJRFRIIHRvIHRoZSA1dGggYXJndW1lbnQgaXMgYQotICAg ICAgIHBlY3VsaWFyaXR5IG9mIHczMiBkaXNwbGF5OiB3aXRob3V0IGl0LCBzb21lIGZvbnRz IGNhdXNlIHRoZQotICAgICAgIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSB0aXAgdG8gYmUgdHJ1 bmNhdGVkIG9yIHdyYXBwZWQgYXJvdW5kIHRvCi0gICAgICAgdGhlIG5leHQgbGluZS4gICov Ci0gICAgU2V0V2luZG93UG9zIChGUkFNRV9XMzJfV0lORE9XIChmKSwgSFdORF9UT1BNT1NU LAorICAgIEFkanVzdFdpbmRvd1JlY3QgKCZyZWN0LCB0aXBfZi0+b3V0cHV0X2RhdGEudzMy LT5kd1N0eWxlLAorCQkgICAgICBGUkFNRV9FWFRFUk5BTF9NRU5VX0JBUiAodGlwX2YpKTsK KworICAgIC8qIFBvc2l0aW9uIGFuZCBzaXplIHRvb2x0aXAgYW5kIHB1dCBpdCBpbiB0aGUg dG9wbW9zdCBncm91cC4gICovCisgICAgU2V0V2luZG93UG9zIChGUkFNRV9XMzJfV0lORE9X ICh0aXBfZiksIEhXTkRfVE9QTU9TVCwKIAkJICByb290X3gsIHJvb3RfeSwKLQkJICByZWN0 LnJpZ2h0IC0gcmVjdC5sZWZ0ICsgRlJBTUVfQ09MVU1OX1dJRFRIIChmKSwKKwkJICByZWN0 LnJpZ2h0IC0gcmVjdC5sZWZ0ICsgcGFkLAogCQkgIHJlY3QuYm90dG9tIC0gcmVjdC50b3As IFNXUF9OT0FDVElWQVRFIHwgU1dQX05PT1dORVJaT1JERVIpOwoKICAgICAvKiBFbnN1cmUg dG9vbHRpcCBpcyBvbiB0b3Agb2Ygb3RoZXIgdG9wbW9zdCB3aW5kb3dzIChlZyBtZW51cyku ICAqLwotICAgIFNldFdpbmRvd1BvcyAoRlJBTUVfVzMyX1dJTkRPVyAoZiksIEhXTkRfVE9Q LAorICAgIFNldFdpbmRvd1BvcyAoRlJBTUVfVzMyX1dJTkRPVyAodGlwX2YpLCBIV05EX1RP UCwKIAkJICAwLCAwLCAwLCAwLAogCQkgIFNXUF9OT01PVkUgfCBTV1BfTk9TSVpFCiAJCSAg fCBTV1BfTk9BQ1RJVkFURSB8IFNXUF9OT09XTkVSWk9SREVSKTsKCiAgICAgLyogTGV0IHJl ZGlzcGxheSBrbm93IHRoYXQgd2UgaGF2ZSBtYWRlIHRoZSBmcmFtZSB2aXNpYmxlIGFscmVh ZHkuICAqLwotICAgIFNFVF9GUkFNRV9WSVNJQkxFIChmLCAxKTsKKyAgICBTRVRfRlJBTUVf VklTSUJMRSAodGlwX2YsIDEpOwoKLSAgICBTaG93V2luZG93IChGUkFNRV9XMzJfV0lORE9X IChmKSwgU1dfU0hPV05PQUNUSVZBVEUpOworICAgIFNob3dXaW5kb3cgKEZSQU1FX1czMl9X SU5ET1cgKHRpcF9mKSwgU1dfU0hPV05PQUNUSVZBVEUpOwogICB9CgotICAvKiBEcmF3IGlu dG8gdGhlIHdpbmRvdy4gICovCiAgIHctPm11c3RfYmVfdXBkYXRlZF9wID0gdHJ1ZTsKICAg dXBkYXRlX3NpbmdsZV93aW5kb3cgKHcpOwotCi0gIHVuYmxvY2tfaW5wdXQgKCk7Ci0KLSAg LyogUmVzdG9yZSBvcmlnaW5hbCBjdXJyZW50IGJ1ZmZlci4gICovCiAgIHNldF9idWZmZXJf aW50ZXJuYWxfMSAob2xkX2J1ZmZlcik7CisgIHVuYmluZF90byAoY291bnRfMSwgUW5pbCk7 CisgIHVuYmxvY2tfaW5wdXQgKCk7CiAgIHdpbmRvd3Nfb3JfYnVmZmVyc19jaGFuZ2VkID0g b2xkX3dpbmRvd3Nfb3JfYnVmZmVyc19jaGFuZ2VkOwoKICBzdGFydF90aW1lcjoKQEAgLTcx MjEsMzEgKzcxMTEsNyBAQCBERUZVTiAoIngtaGlkZS10aXAiLCBGeF9oaWRlX3RpcCwgU3hf aGlkZV90aXAsIDAsIDAsIDAsCiBWYWx1ZSBpcyB0IGlmIHRvb2x0aXAgd2FzIG9wZW4sIG5p bCBvdGhlcndpc2UuICAqLykKICAgKHZvaWQpCiB7Ci0gIHB0cmRpZmZfdCBjb3VudDsKLSAg TGlzcF9PYmplY3QgZGVsZXRlZCwgZnJhbWUsIHRpbWVyOwotCi0gIC8qIFJldHVybiBxdWlj a2x5IGlmIG5vdGhpbmcgdG8gZG8uICAqLwotICBpZiAoTklMUCAodGlwX3RpbWVyKSAmJiBO SUxQICh0aXBfZnJhbWUpKQotICAgIHJldHVybiBRbmlsOwotCi0gIGZyYW1lID0gdGlwX2Zy YW1lOwotICB0aW1lciA9IHRpcF90aW1lcjsKLSAgdGlwX2ZyYW1lID0gdGlwX3RpbWVyID0g ZGVsZXRlZCA9IFFuaWw7Ci0KLSAgY291bnQgPSBTUEVDUERMX0lOREVYICgpOwotICBzcGVj YmluZCAoUWluaGliaXRfcmVkaXNwbGF5LCBRdCk7Ci0gIHNwZWNiaW5kIChRaW5oaWJpdF9x dWl0LCBRdCk7Ci0KLSAgaWYgKCFOSUxQICh0aW1lcikpCi0gICAgY2FsbDEgKFFjYW5jZWxf dGltZXIsIHRpbWVyKTsKLQotICBpZiAoRlJBTUVQIChmcmFtZSkpCi0gICAgewotICAgICAg ZGVsZXRlX2ZyYW1lIChmcmFtZSwgUW5pbCk7Ci0gICAgICBkZWxldGVkID0gUXQ7Ci0gICAg fQotCi0gIHJldHVybiB1bmJpbmRfdG8gKGNvdW50LCBkZWxldGVkKTsKKyAgcmV0dXJuIHhf aGlkZV90aXAgKCF0b29sdGlwX3JldXNlX2hpZGRlbl9mcmFtZSk7CiB9CiAMCiAvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKQEAgLTk3NDUsNiArOTcxMSw3IEBAIHN5bXNfb2ZfdzMyZm5zICh2b2lk KQogICBERUZTWU0gKFFtbV9zaXplLCAibW0tc2l6ZSIpOwogICBERUZTWU0gKFFmcmFtZXMs ICJmcmFtZXMiKTsKICAgREVGU1lNIChRdGlwX2ZyYW1lLCAidGlwLWZyYW1lIik7CisgIERF RlNZTSAoUWFzc3FfZGVsZXRlX2FsbCwgImFzc3EtZGVsZXRlLWFsbCIpOwogICBERUZTWU0g KFF1bmljb2RlX3NpcCwgInVuaWNvZGUtc2lwIik7CiAjaWYgZGVmaW5lZCBXSU5ET1dTTlQg JiYgIWRlZmluZWQgSEFWRV9EQlVTCiAgIERFRlNZTSAoUUNpY29uLCAiOmljb24iKTsKQEAg LTEwMDU3LDYgKzEwMDI0LDE4IEBAIERlZmF1bHQgaXMgbmlsLgogVGhpcyB2YXJpYWJsZSBo YXMgZWZmZWN0IG9ubHkgb24gV2luZG93cyBWaXN0YSBhbmQgbGF0ZXIuICAqLyk7CiAgIHcz Ml9kaXNhYmxlX25ld191bmlzY3JpYmVfYXBpcyA9IDA7CgorICBERUZWQVJfTElTUCAoIncz Mi10b29sdGlwLWV4dHJhLXBpeGVscyIsCisJICAgICAgIFZ3MzJfdG9vbHRpcF9leHRyYV9w aXhlbHMsCisJICAgICAgIGRvYzogLyogTnVtYmVyIG9mIHBpeGVscyBhZGRlZCBhZnRlciB0 b29sdGlwIHRleHQuCitPbiBXaW5kb3dzIHNvbWUgZm9udHMgbWF5IGNhdXNlIHRoZSBsYXN0 IGNoYXJhY3RlciBvZiBhIHRvb2x0aXAgYmUKK3RydW5jYXRlZCBvciB3cmFwcGVkIGFyb3Vu ZCB0byB0aGUgbmV4dCBsaW5lLiAgQWRkaW5nIHNvbWUgZXh0cmEgc3BhY2UKK2F0IHRoZSBl bmQgb2YgdGhlIHRvb29sdGlwIHdvcmtzIGFyb3VuZCB0aGlzIHByb2JsZW0uCisKK1RoaXMg dmFyaWFibGUgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcGl4ZWxzIHRoYXQgc2hhbGwgYmUg YWRkZWQuICBUaGUKK2RlZmF1bHQgdmFsdWUgdCBtZWFucyB0byBhZGQgdGhlIHdpZHRoIG9m IG9uZSBjYW5vbmljYWwgY2hhcmFjdGVyIG9mIHRoZQordGlwIGZyYW1lLiAgKi8pOworICBW dzMyX3Rvb2x0aXBfZXh0cmFfcGl4ZWxzID0gUXQ7CisKICNpZiAwIC8qIFRPRE86IFBvcnQg dG8gVzMyICovCiAgIGRlZnN1YnIgKCZTeF9jaGFuZ2Vfd2luZG93X3Byb3BlcnR5KTsKICAg ZGVmc3ViciAoJlN4X2RlbGV0ZV93aW5kb3dfcHJvcGVydHkpOwpkaWZmIC0tZ2l0IGEvc3Jj L3hkaXNwLmMgYi9zcmMveGRpc3AuYwppbmRleCBiOWQ0OTZlLi41Yjk2MTQ0IDEwMDY0NAot LS0gYS9zcmMveGRpc3AuYworKysgYi9zcmMveGRpc3AuYwpAQCAtOTc5NCwyNiArOTc5NCwy OCBAQCB0aGUgbWF4aW11bSBwaXhlbC1oZWlnaHQgb2YgYWxsIHRleHQgbGluZXMuCgogVGhl IG9wdGlvbmFsIGFyZ3VtZW50IEZST00sIGlmIG5vbi1uaWwsIHNwZWNpZmllcyB0aGUgZmly c3QgdGV4dAogcG9zaXRpb24gYW5kIGRlZmF1bHRzIHRvIHRoZSBtaW5pbXVtIGFjY2Vzc2li bGUgcG9zaXRpb24gb2YgdGhlIGJ1ZmZlci4KLUlmIEZST00gaXMgdCwgdXNlIHRoZSBtaW5p bXVtIGFjY2Vzc2libGUgcG9zaXRpb24gdGhhdCBpcyBub3QgYSBuZXdsaW5lCi1jaGFyYWN0 ZXIuICBUTywgaWYgbm9uLW5pbCwgc3BlY2lmaWVzIHRoZSBsYXN0IHRleHQgcG9zaXRpb24g YW5kCitJZiBGUk9NIGlzIHQsIHVzZSB0aGUgbWluaW11bSBhY2Nlc3NpYmxlIHBvc2l0aW9u IHRoYXQgc3RhcnRzIGEKK25vbi1lbXB0eSBsaW5lLiAgVE8sIGlmIG5vbi1uaWwsIHNwZWNp ZmllcyB0aGUgbGFzdCB0ZXh0IHBvc2l0aW9uIGFuZAogZGVmYXVsdHMgdG8gdGhlIG1heGlt dW0gYWNjZXNzaWJsZSBwb3NpdGlvbiBvZiB0aGUgYnVmZmVyLiAgSWYgVE8gaXMgdCwKLXVz ZSB0aGUgbWF4aW11bSBhY2Nlc3NpYmxlIHBvc2l0aW9uIHRoYXQgaXMgbm90IGEgbmV3bGlu ZSBjaGFyYWN0ZXIuCit1c2UgdGhlIG1heGltdW0gYWNjZXNzaWJsZSBwb3NpdGlvbiB0aGF0 IGVuZHMgYSBub24tZW1wdHkgbGluZS4KCiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgWC1MSU1J VCwgaWYgbm9uLW5pbCwgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIHRleHQKIHdpZHRoIHRoYXQg Y2FuIGJlIHJldHVybmVkLiAgWC1MSU1JVCBuaWwgb3Igb21pdHRlZCwgbWVhbnMgdG8gdXNl IHRoZQotcGl4ZWwtd2lkdGggb2YgV0lORE9XJ3MgYm9keTsgdXNlIHRoaXMgaWYgeW91IGRv IG5vdCBpbnRlbmQgdG8gY2hhbmdlCi10aGUgd2lkdGggb2YgV0lORE9XLiAgVXNlIHRoZSBt YXhpbXVtIHdpZHRoIFdJTkRPVyBtYXkgYXNzdW1lIGlmIHlvdQotaW50ZW5kIHRvIGNoYW5n ZSBXSU5ET1cncyB3aWR0aC4gIEluIGFueSBjYXNlLCB0ZXh0IHdob3NlIHgtY29vcmRpbmF0 ZQotaXMgYmV5b25kIFgtTElNSVQgaXMgaWdub3JlZC4gIFNpbmNlIGNhbGN1bGF0aW5nIHRo ZSB3aWR0aCBvZiBsb25nIGxpbmVzCi1jYW4gdGFrZSBzb21lIHRpbWUsIGl0J3MgYWx3YXlz IGEgZ29vZCBpZGVhIHRvIG1ha2UgdGhpcyBhcmd1bWVudCBhcwotc21hbGwgYXMgcG9zc2li bGU7IGluIHBhcnRpY3VsYXIsIGlmIHRoZSBidWZmZXIgY29udGFpbnMgbG9uZyBsaW5lcyB0 aGF0Ci1zaGFsbCBiZSB0cnVuY2F0ZWQgYW55d2F5LgorcGl4ZWwtd2lkdGggb2YgV0lORE9X J3MgYm9keTsgdXNlIHRoaXMgaWYgeW91IHdhbnQgdG8ga25vdyBob3cgaGlnaAorV0lORE9X IHNob3VsZCBiZSBiZWNvbWUgaW4gb3JkZXIgdG8gZml0IGFsbCBvZiBpdHMgYnVmZmVyJ3Mg dGV4dCB3aXRoCit0aGUgd2lkdGggb2YgV0lORE9XIHVuYWx0ZXJlZC4gIFVzZSB0aGUgbWF4 aW11bSB3aWR0aCBXSU5ET1cgbWF5IGFzc3VtZQoraWYgeW91IGludGVuZCB0byBjaGFuZ2Ug V0lORE9XJ3Mgd2lkdGguICBJbiBhbnkgY2FzZSwgdGV4dCB3aG9zZQoreC1jb29yZGluYXRl IGlzIGJleW9uZCBYLUxJTUlUIGlzIGlnbm9yZWQuICBTaW5jZSBjYWxjdWxhdGluZyB0aGUg d2lkdGgKK29mIGxvbmcgbGluZXMgY2FuIHRha2Ugc29tZSB0aW1lLCBpdCdzIGFsd2F5cyBh IGdvb2QgaWRlYSB0byBtYWtlIHRoaXMKK2FyZ3VtZW50IGFzIHNtYWxsIGFzIHBvc3NpYmxl OyBpbiBwYXJ0aWN1bGFyLCBpZiB0aGUgYnVmZmVyIGNvbnRhaW5zCitsb25nIGxpbmVzIHRo YXQgc2hhbGwgYmUgdHJ1bmNhdGVkIGFueXdheS4KCiBUaGUgb3B0aW9uYWwgYXJndW1lbnQg WS1MSU1JVCwgaWYgbm9uLW5pbCwgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIHRleHQKLWhlaWdo dCB0aGF0IGNhbiBiZSByZXR1cm5lZC4gIFRleHQgbGluZXMgd2hvc2UgeS1jb29yZGluYXRl IGlzIGJleW9uZAotWS1MSU1JVCBhcmUgaWdub3JlZC4gIFNpbmNlIGNhbGN1bGF0aW5nIHRo ZSB0ZXh0IGhlaWdodCBvZiBhIGxhcmdlCi1idWZmZXIgY2FuIHRha2Ugc29tZSB0aW1lLCBp dCBtYWtlcyBzZW5zZSB0byBzcGVjaWZ5IHRoaXMgYXJndW1lbnQgaWYKLXRoZSBzaXplIG9m IHRoZSBidWZmZXIgaXMgdW5rbm93bi4KK2hlaWdodCAoZXhsdWRpbmcgdGhlIGhlaWdodCBv ZiB0aGUgbW9kZS0gb3IgaGVhZGVyLWxpbmUsIGlmIGFueSkgdGhhdAorY2FuIGJlIHJldHVy bmVkLiAgVGV4dCBsaW5lcyB3aG9zZSB5LWNvb3JkaW5hdGUgaXMgYmV5b25kIFktTElNSVQg YXJlCitpZ25vcmVkLiAgU2luY2UgY2FsY3VsYXRpbmcgdGhlIHRleHQgaGVpZ2h0IG9mIGEg bGFyZ2UgYnVmZmVyIGNhbiB0YWtlCitzb21lIHRpbWUsIGl0IG1ha2VzIHNlbnNlIHRvIHNw ZWNpZnkgdGhpcyBhcmd1bWVudCBpZiB0aGUgc2l6ZSBvZiB0aGUKK2J1ZmZlciBpcyBsYXJn ZSBvciB1bmtub3duLgoKIE9wdGlvbmFsIGFyZ3VtZW50IE1PREUtQU5ELUhFQURFUi1MSU5F IG5pbCBvciBvbWl0dGVkIG1lYW5zIGRvIG5vdAogaW5jbHVkZSB0aGUgaGVpZ2h0IG9mIHRo ZSBtb2RlLSBvciBoZWFkZXItbGluZSBvZiBXSU5ET1cgaW4gdGhlIHJldHVybgpAQCAtOTgz MSw3ICs5ODMzLDcgQEAgaW5jbHVkZSB0aGUgaGVpZ2h0IG9mIGJvdGgsIGlmIHByZXNlbnQs IGluIHRoZSByZXR1cm4gdmFsdWUuICAqLykKICAgcHRyZGlmZl90IHN0YXJ0LCBlbmQsIHBv czsKICAgc3RydWN0IHRleHRfcG9zIHN0YXJ0cDsKICAgdm9pZCAqaXRkYXRhID0gTlVMTDsK LSAgaW50IGMsIG1heF95ID0gLTEsIHggPSAwLCB5ID0gMDsKKyAgaW50IGMsIG1heF94ID0g MCwgbWF4X3kgPSAwLCB4ID0gMCwgeSA9IDA7CgogICBDSEVDS19CVUZGRVIgKGJ1ZmZlcik7 CiAgIGIgPSBYQlVGRkVSIChidWZmZXIpOwpAQCAtOTg3NiwxMSArOTg3OCwxMyBAQCBpbmNs dWRlIHRoZSBoZWlnaHQgb2YgYm90aCwgaWYgcHJlc2VudCwgaW4gdGhlIHJldHVybiB2YWx1 ZS4gICovKQogICAgICAgZW5kID0gbWF4IChzdGFydCwgbWluIChYSU5UICh0byksIFpWKSk7 CiAgICAgfQoKLSAgaWYgKCFOSUxQICh5X2xpbWl0KSkKLSAgICB7Ci0gICAgICBDSEVDS19O VU1CRVIgKHlfbGltaXQpOwotICAgICAgbWF4X3kgPSBtaW4gKFhJTlQgKHlfbGltaXQpLCBJ TlRfTUFYKTsKLSAgICB9CisgIGlmICghTklMUCAoeF9saW1pdCkgJiYgUkFOR0VEX0lOVEVH RVJQICgwLCB4X2xpbWl0LCBJTlRfTUFYKSkKKyAgICBtYXhfeCA9IFhJTlQgKHhfbGltaXQp OworCisgIGlmIChOSUxQICh5X2xpbWl0KSkKKyAgICBtYXhfeSA9IElOVF9NQVg7CisgIGVs c2UgaWYgKFJBTkdFRF9JTlRFR0VSUCAoMCwgeV9saW1pdCwgSU5UX01BWCkpCisgICAgbWF4 X3kgPSBYSU5UICh5X2xpbWl0KTsKCiAgIGl0ZGF0YSA9IGJpZGlfc2hlbHZlX2NhY2hlICgp OwogICBTRVRfVEVYVF9QT1MgKHN0YXJ0cCwgc3RhcnQsIENIQVJfVE9fQllURSAoc3RhcnQp KTsKQEAgLTk4OTAsMjcgKzk4OTQsMzAgQEAgaW5jbHVkZSB0aGUgaGVpZ2h0IG9mIGJvdGgs IGlmIHByZXNlbnQsIGluIHRoZSByZXR1cm4gdmFsdWUuICAqLykKICAgICB4ID0gbW92ZV9p dF90byAoJml0LCBlbmQsIC0xLCBtYXhfeSwgLTEsIE1PVkVfVE9fUE9TIHwgTU9WRV9UT19Z KTsKICAgZWxzZQogICAgIHsKLSAgICAgIENIRUNLX05VTUJFUiAoeF9saW1pdCk7Ci0gICAg ICBpdC5sYXN0X3Zpc2libGVfeCA9IG1pbiAoWElOVCAoeF9saW1pdCksIElORklOSVRZKTsK KyAgICAgIGl0Lmxhc3RfdmlzaWJsZV94ID0gbWF4X3g7CiAgICAgICAvKiBBY3R1YWxseSwg d2UgbmV2ZXIgd2FudCBtb3ZlX2l0X3RvIHN0b3AgYXQgdG9feC4gIEJ1dCB0byBtYWtlCiAJ IHN1cmUgdGhhdCBtb3ZlX2l0X2luX2Rpc3BsYXlfbGluZV90byBhbHdheXMgbW92ZXMgZmFy IGVub3VnaCwKLQkgd2Ugc2V0IGl0IHRvIElOVF9NQVggYW5kIHNwZWNpZnkgTU9WRV9UT19Y LiAgKi8KLSAgICAgIHggPSBtb3ZlX2l0X3RvICgmaXQsIGVuZCwgSU5UX01BWCwgbWF4X3ks IC0xLAotCQkgICAgICBNT1ZFX1RPX1BPUyB8IE1PVkVfVE9fWCB8IE1PVkVfVE9fWSk7CisJ IHdlIHNldCBpdCB0byBJTlRfTUFYIGFuZCBzcGVjaWZ5IE1PVkVfVE9fWC4gIEFsc28gYm91 bmQgd2lkdGgKKwkgdmFsdWUgYnkgWC1MSU1JVC4gICovCisgICAgICB4ID0gbWluIChtb3Zl X2l0X3RvICgmaXQsIGVuZCwgSU5UX01BWCwgbWF4X3ksIC0xLAorCQkJICAgTU9WRV9UT19Q T1MgfCBNT1ZFX1RPX1ggfCBNT1ZFX1RPX1kpLAorCSAgICAgICBtYXhfeCk7CiAgICAgfQoK LSAgeSA9IGl0LmN1cnJlbnRfeSArIGl0Lm1heF9hc2NlbnQgKyBpdC5tYXhfZGVzY2VudDsK KyAgLyogU3VidHJhY3QgaGVpZ2h0IG9mIGhlYWRlci1saW5lIHdoaWNoIHdhcyBjb3VudGVk IGF1dG9tYXRpY2FsbHkgYnkKKyAgICAgc3RhcnRfZGlzcGxheS4gICovCisgIHkgPSBtaW4g KGl0LmN1cnJlbnRfeSArIGl0Lm1heF9hc2NlbnQgKyBpdC5tYXhfZGVzY2VudAorCSAgIC0g V0lORE9XX0hFQURFUl9MSU5FX0hFSUdIVCAodyksCisJICAgbWF4X3kpOwoKLSAgaWYgKCFF USAobW9kZV9hbmRfaGVhZGVyX2xpbmUsIFFoZWFkZXJfbGluZSkKLSAgICAgICYmICFFUSAo bW9kZV9hbmRfaGVhZGVyX2xpbmUsIFF0KSkKLSAgICAvKiBEbyBub3QgY291bnQgdGhlIGhl YWRlci1saW5lIHdoaWNoIHdhcyBjb3VudGVkIGF1dG9tYXRpY2FsbHkgYnkKLSAgICAgICBz dGFydF9kaXNwbGF5LiAgKi8KLSAgICB5ID0geSAtIFdJTkRPV19IRUFERVJfTElORV9IRUlH SFQgKHcpOworICBpZiAoRVEgKG1vZGVfYW5kX2hlYWRlcl9saW5lLCBRaGVhZGVyX2xpbmUp CisgICAgICB8fCBFUSAobW9kZV9hbmRfaGVhZGVyX2xpbmUsIFF0KSkKKyAgICAvKiBSZS1h ZGQgaGVpZ2h0IG9mIGhlYWRlci1saW5lIGFzIHJlcXVlc3RlZC4gICovCisgICAgeSA9IHkg KyBXSU5ET1dfSEVBREVSX0xJTkVfSEVJR0hUICh3KTsKCiAgIGlmIChFUSAobW9kZV9hbmRf aGVhZGVyX2xpbmUsIFFtb2RlX2xpbmUpCiAgICAgICB8fCBFUSAobW9kZV9hbmRfaGVhZGVy X2xpbmUsIFF0KSkKLSAgICAvKiBEbyBjb3VudCB0aGUgbW9kZS1saW5lIHdoaWNoIGlzIG5v dCBpbmNsdWRlZCBhdXRvbWF0aWNhbGx5IGJ5Ci0gICAgICAgc3RhcnRfZGlzcGxheS4gICov CisgICAgLyogQWRkIGhlaWdodCBvZiBtb2RlLWxpbmUgYXMgcmVxdWVzdGVkLiAgKi8KICAg ICB5ID0geSArIFdJTkRPV19NT0RFX0xJTkVfSEVJR0hUICh3KTsKCiAgIGJpZGlfdW5zaGVs dmVfY2FjaGUgKGl0ZGF0YSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvc3JjL3hmbnMuYyBiL3Ny Yy94Zm5zLmMKaW5kZXggMmE1MGE1YS4uYzFjZTFiNyAxMDA2NDQKLS0tIGEvc3JjL3hmbnMu YworKysgYi9zcmMveGZucy5jCkBAIC01MzAzLDggKzUzMDMsNiBAQCBubyB2YWx1ZSBvZiBU WVBFIChhbHdheXMgc3RyaW5nIGluIHRoZSBNUyBXaW5kb3dzIGNhc2UpLiAgKi8pCiAJCQkJ VG9vbCB0aXBzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgotc3RhdGljIExpc3BfT2JqZWN0IHhf Y3JlYXRlX3RpcF9mcmFtZSAoc3RydWN0IHhfZGlzcGxheV9pbmZvICosCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXNwX09iamVjdCwgTGlzcF9PYmplY3Qp Owogc3RhdGljIHZvaWQgY29tcHV0ZV90aXBfeHkgKHN0cnVjdCBmcmFtZSAqLCBMaXNwX09i amVjdCwgTGlzcF9PYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzcF9P YmplY3QsIGludCwgaW50LCBpbnQgKiwgaW50ICopOwoKQEAgLTUzNDgsOSArNTM0Niw3IEBA IHVud2luZF9jcmVhdGVfdGlwX2ZyYW1lIChMaXNwX09iamVjdCBmcmFtZSkKICAgIHdoZW4g dGhpcyBoYXBwZW5zLiAgKi8KCiBzdGF0aWMgTGlzcF9PYmplY3QKLXhfY3JlYXRlX3RpcF9m cmFtZSAoc3RydWN0IHhfZGlzcGxheV9pbmZvICpkcHlpbmZvLAotICAgICAgICAgICAgICAg ICAgICBMaXNwX09iamVjdCBwYXJtcywKLSAgICAgICAgICAgICAgICAgICAgTGlzcF9PYmpl Y3QgdGV4dCkKK3hfY3JlYXRlX3RpcF9mcmFtZSAoc3RydWN0IHhfZGlzcGxheV9pbmZvICpk cHlpbmZvLCBMaXNwX09iamVjdCBwYXJtcykKIHsKICAgc3RydWN0IGZyYW1lICpmOwogICBM aXNwX09iamVjdCBmcmFtZTsKQEAgLTUzNTksNyArNTM1NSw2IEBAIHhfY3JlYXRlX3RpcF9m cmFtZSAoc3RydWN0IHhfZGlzcGxheV9pbmZvICpkcHlpbmZvLAogICBwdHJkaWZmX3QgY291 bnQgPSBTUEVDUERMX0lOREVYICgpOwogICBib29sIGZhY2VfY2hhbmdlX2JlZm9yZSA9IGZh Y2VfY2hhbmdlOwogICBMaXNwX09iamVjdCBidWZmZXI7Ci0gIHN0cnVjdCBidWZmZXIgKm9s ZF9idWZmZXI7CiAgIGludCB4X3dpZHRoID0gMCwgeF9oZWlnaHQgPSAwOwoKICAgaWYgKCFk cHlpbmZvLT50ZXJtaW5hbC0+bmFtZSkKQEAgLTUzNzUsMjMgKzUzNzAsOSBAQCB4X2NyZWF0 ZV90aXBfZnJhbWUgKHN0cnVjdCB4X2Rpc3BsYXlfaW5mbyAqZHB5aW5mbywKICAgICBlcnJv ciAoIkludmFsaWQgZnJhbWUgbmFtZS0tbm90IGEgc3RyaW5nIG9yIG5pbCIpOwoKICAgZnJh bWUgPSBRbmlsOwotICBmID0gbWFrZV9mcmFtZSAodHJ1ZSk7CisgIGYgPSBtYWtlX2ZyYW1l IChmYWxzZSk7CisgIGYtPndhbnRzX21vZGVsaW5lID0gZmFsc2U7CiAgIFhTRVRGUkFNRSAo ZnJhbWUsIGYpOwotCi0gIEFVVE9fU1RSSU5HICh0aXAsICIgKnRpcCoiKTsKLSAgYnVmZmVy ID0gRmdldF9idWZmZXJfY3JlYXRlICh0aXApOwotICAvKiBVc2Ugc2V0X3dpbmRvd19idWZm ZXIgaW5zdGVhZCBvZiBGc2V0X3dpbmRvd19idWZmZXIgKHNlZQotICAgICBkaXNjdXNzaW9u IG9mIGJ1ZyMxMTk4NCwgYnVnIzEyMDI1LCBidWcjMTIwMjYpLiAgKi8KLSAgc2V0X3dpbmRv d19idWZmZXIgKEZSQU1FX1JPT1RfV0lORE9XIChmKSwgYnVmZmVyLCBmYWxzZSwgZmFsc2Up OwotICBvbGRfYnVmZmVyID0gY3VycmVudF9idWZmZXI7Ci0gIHNldF9idWZmZXJfaW50ZXJu YWxfMSAoWEJVRkZFUiAoYnVmZmVyKSk7Ci0gIGJzZXRfdHJ1bmNhdGVfbGluZXMgKGN1cnJl bnRfYnVmZmVyLCBRbmlsKTsKLSAgc3BlY2JpbmQgKFFpbmhpYml0X3JlYWRfb25seSwgUXQp OwotICBzcGVjYmluZCAoUWluaGliaXRfbW9kaWZpY2F0aW9uX2hvb2tzLCBRdCk7Ci0gIEZl cmFzZV9idWZmZXIgKCk7Ci0gIEZpbnNlcnQgKDEsICZ0ZXh0KTsKLSAgc2V0X2J1ZmZlcl9p bnRlcm5hbF8xIChvbGRfYnVmZmVyKTsKLQogICByZWNvcmRfdW53aW5kX3Byb3RlY3QgKHVu d2luZF9jcmVhdGVfdGlwX2ZyYW1lLCBmcmFtZSk7CgogICBmLT50ZXJtaW5hbCA9IGRweWlu Zm8tPnRlcm1pbmFsOwpAQCAtNTYzMyw4ICs1NjE0LDYgQEAgeF9jcmVhdGVfdGlwX2ZyYW1l IChzdHJ1Y3QgeF9kaXNwbGF5X2luZm8gKmRweWluZm8sCiAgIHsKICAgICBMaXNwX09iamVj dCBiZyA9IEZmcmFtZV9wYXJhbWV0ZXIgKGZyYW1lLCBRYmFja2dyb3VuZF9jb2xvcik7Cgot ICAgIC8qIFNldCB0aXBfZnJhbWUgaGVyZSwgc28gdGhhdCAqLwotICAgIHRpcF9mcmFtZSA9 IGZyYW1lOwogICAgIGNhbGwyIChRZmFjZV9zZXRfYWZ0ZXJfZnJhbWVfZGVmYXVsdCwgZnJh bWUsIFFuaWwpOwoKICAgICBpZiAoIUVRIChiZywgRmZyYW1lX3BhcmFtZXRlciAoZnJhbWUs IFFiYWNrZ3JvdW5kX2NvbG9yKSkpCkBAIC01NzczLDYgKzU3NTIsODUgQEAgY29tcHV0ZV90 aXBfeHkgKHN0cnVjdCBmcmFtZSAqZiwgTGlzcF9PYmplY3QgcGFybXMsIExpc3BfT2JqZWN0 IGR4LCBMaXNwX09iamVjdAogfQoKCisvKiBIaWRlIHRvb2x0aXAuICBEZWxldGUgaXRzIGZy YW1lIGlmIERFTEVURSBpcyB0cnVlLiAgKi8KK3N0YXRpYyBMaXNwX09iamVjdAoreF9oaWRl X3RpcCAoYm9vbCBkZWxldGUpCit7CisgIGlmICghTklMUCAodGlwX3RpbWVyKSkKKyAgICB7 CisgICAgICBjYWxsMSAoUWNhbmNlbF90aW1lciwgdGlwX3RpbWVyKTsKKyAgICAgIHRpcF90 aW1lciA9IFFuaWw7CisgICAgfQorCisKKyAgaWYgKE5JTFAgKHRpcF9mcmFtZSkKKyAgICAg IHx8ICghZGVsZXRlICYmIEZSQU1FUCAodGlwX2ZyYW1lKQorCSAgJiYgIUZSQU1FX1ZJU0lC TEVfUCAoWEZSQU1FICh0aXBfZnJhbWUpKSkpCisgICAgcmV0dXJuIFFuaWw7CisgIGVsc2UK KyAgICB7CisgICAgICBwdHJkaWZmX3QgY291bnQ7CisgICAgICBMaXNwX09iamVjdCB3YXNf b3BlbiA9IFFuaWw7CisKKyAgICAgIGNvdW50ID0gU1BFQ1BETF9JTkRFWCAoKTsKKyAgICAg IHNwZWNiaW5kIChRaW5oaWJpdF9yZWRpc3BsYXksIFF0KTsKKyAgICAgIHNwZWNiaW5kIChR aW5oaWJpdF9xdWl0LCBRdCk7CisKKyNpZmRlZiBVU0VfR1RLCisgICAgICB7CisJLyogV2hl biB1c2luZyBzeXN0ZW0gdG9vbHRpcCwgdGlwX2ZyYW1lIGlzIHRoZSBFbWFjcyBmcmFtZSBv bgorCSAgIHdoaWNoIHRoZSB0aXAgaXMgc2hvd24uICAqLworCXN0cnVjdCBmcmFtZSAqZiA9 IFhGUkFNRSAodGlwX2ZyYW1lKTsKKworCWlmIChGUkFNRV9MSVZFX1AgKGYpICYmIHhnX2hp ZGVfdG9vbHRpcCAoZikpCisJICB7CisJICAgIHRpcF9mcmFtZSA9IFFuaWw7CisJICAgIHdh c19vcGVuID0gUXQ7CisJICB9CisgICAgICB9CisjZW5kaWYKKworICAgICAgaWYgKEZSQU1F UCAodGlwX2ZyYW1lKSkKKwl7CisJICBpZiAoZGVsZXRlKQorCSAgICB7CisJICAgICAgZGVs ZXRlX2ZyYW1lICh0aXBfZnJhbWUsIFFuaWwpOworCSAgICAgIHRpcF9mcmFtZSA9IFFuaWw7 CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeF9tYWtlX2ZyYW1lX2ludmlzaWJsZSAoWEZSQU1F ICh0aXBfZnJhbWUpKTsKKworCSAgd2FzX29wZW4gPSBRdDsKKworI2lmZGVmIFVTRV9MVUNJ RAorCSAgLyogQmxvb2RjdXJkbGluZyBoYWNrIGFsZXJ0OiBUaGUgTHVjaWQgbWVudSBiYXIg d2lkZ2V0J3MKKwkgICAgIHJlZGlzcGxheSBwcm9jZWR1cmUgaXMgbm90IGNhbGxlZCB3aGVu IGEgdGlwIGZyYW1lIG92ZXIKKwkgICAgIG1lbnUgaXRlbXMgaXMgdW5tYXBwZWQuICBSZWRp c3BsYXkgdGhlIG1lbnUgbWFudWFsbHkuLi4gICovCisJICB7CisJICAgIFdpZGdldCB3Owor CSAgICBzdHJ1Y3QgZnJhbWUgKmYgPSBTRUxFQ1RFRF9GUkFNRSAoKTsKKwkgICAgaWYgKEZS QU1FX1hfUCAoZikgJiYgRlJBTUVfTElWRV9QIChmKSkKKwkgICAgICB7CisJCXcgPSBmLT5v dXRwdXRfZGF0YS54LT5tZW51YmFyX3dpZGdldDsKKworCQlpZiAoIURvZXNTYXZlVW5kZXJz IChGUkFNRV9ESVNQTEFZX0lORk8gKGYpLT5zY3JlZW4pCisJCSAgICAmJiB3ICE9IE5VTEwp CisJCSAgeworCQkgICAgYmxvY2tfaW5wdXQgKCk7CisJCSAgICB4bHdtZW51X3JlZGlzcGxh eSAodyk7CisJCSAgICB1bmJsb2NrX2lucHV0ICgpOworCQkgIH0KKwkgICAgICB9CisJICB9 CisjZW5kaWYgLyogVVNFX0xVQ0lEICovCisJfQorICAgICAgZWxzZQorCXRpcF9mcmFtZSA9 IFFuaWw7CisKKyAgICAgIHJldHVybiB1bmJpbmRfdG8gKGNvdW50LCB3YXNfb3Blbik7Cisg ICAgfQorfQorCiBERUZVTiAoIngtc2hvdy10aXAiLCBGeF9zaG93X3RpcCwgU3hfc2hvd190 aXAsIDEsIDYsIDAsCiAgICAgICAgZG9jOiAvKiBTaG93IFNUUklORyBpbiBhICJ0b29sdGlw IiB3aW5kb3cgb24gZnJhbWUgRlJBTUUuCiBBIHRvb2x0aXAgd2luZG93IGlzIGEgc21hbGwg WCB3aW5kb3cgZGlzcGxheWluZyBhIHN0cmluZy4KQEAgLTU4MDUsMTUgKzU4NjMsMTYgQEAg QSB0b29sdGlwJ3MgbWF4aW11bSBzaXplIGlzIHNwZWNpZmllZCBieSBgeC1tYXgtdG9vbHRp cC1zaXplJy4KIFRleHQgbGFyZ2VyIHRoYW4gdGhlIHNwZWNpZmllZCBzaXplIGlzIGNsaXBw ZWQuICAqLykKICAgKExpc3BfT2JqZWN0IHN0cmluZywgTGlzcF9PYmplY3QgZnJhbWUsIExp c3BfT2JqZWN0IHBhcm1zLCBMaXNwX09iamVjdCB0aW1lb3V0LCBMaXNwX09iamVjdCBkeCwg TGlzcF9PYmplY3QgZHkpCiB7Ci0gIHN0cnVjdCBmcmFtZSAqZjsKKyAgc3RydWN0IGZyYW1l ICpmLCAqdGlwX2Y7CiAgIHN0cnVjdCB3aW5kb3cgKnc7CiAgIGludCByb290X3gsIHJvb3Rf eTsKICAgc3RydWN0IGJ1ZmZlciAqb2xkX2J1ZmZlcjsKICAgc3RydWN0IHRleHRfcG9zIHBv czsKLSAgaW50IGksIHdpZHRoLCBoZWlnaHQ7Ci0gIGJvb2wgc2Vlbl9yZXZlcnNlZF9wOwor ICBpbnQgd2lkdGgsIGhlaWdodDsKICAgaW50IG9sZF93aW5kb3dzX29yX2J1ZmZlcnNfY2hh bmdlZCA9IHdpbmRvd3Nfb3JfYnVmZmVyc19jaGFuZ2VkOwogICBwdHJkaWZmX3QgY291bnQg PSBTUEVDUERMX0lOREVYICgpOworICBwdHJkaWZmX3QgY291bnRfMTsKKyAgTGlzcF9PYmpl Y3Qgd2luZG93LCBzaXplOwoKICAgc3BlY2JpbmQgKFFpbmhpYml0X3JlZGlzcGxheSwgUXQp OwoKQEAgLTU4NjIsMjIgKzU5MjEsMjMgQEAgVGV4dCBsYXJnZXIgdGhhbiB0aGUgc3BlY2lm aWVkIHNpemUgaXMgY2xpcHBlZC4gICovKQogICBpZiAoTklMUCAobGFzdF9zaG93X3RpcF9h cmdzKSkKICAgICBsYXN0X3Nob3dfdGlwX2FyZ3MgPSBGbWFrZV92ZWN0b3IgKG1ha2VfbnVt YmVyICgzKSwgUW5pbCk7CgotICBpZiAoIU5JTFAgKHRpcF9mcmFtZSkpCisgIGlmIChGUkFN RVAgKHRpcF9mcmFtZSkgJiYgRlJBTUVfTElWRV9QIChYRlJBTUUgKHRpcF9mcmFtZSkpKQog ICAgIHsKICAgICAgIExpc3BfT2JqZWN0IGxhc3Rfc3RyaW5nID0gQVJFRiAobGFzdF9zaG93 X3RpcF9hcmdzLCAwKTsKICAgICAgIExpc3BfT2JqZWN0IGxhc3RfZnJhbWUgPSBBUkVGIChs YXN0X3Nob3dfdGlwX2FyZ3MsIDEpOwogICAgICAgTGlzcF9PYmplY3QgbGFzdF9wYXJtcyA9 IEFSRUYgKGxhc3Rfc2hvd190aXBfYXJncywgMik7CgotICAgICAgaWYgKEVRIChmcmFtZSwg bGFzdF9mcmFtZSkKLQkgICYmICFOSUxQIChGZXF1YWwgKGxhc3Rfc3RyaW5nLCBzdHJpbmcp KQorICAgICAgaWYgKEZSQU1FX1ZJU0lCTEVfUCAoWEZSQU1FICh0aXBfZnJhbWUpKQorCSAg JiYgRVEgKGZyYW1lLCBsYXN0X2ZyYW1lKQorCSAgJiYgIU5JTFAgKEZlcXVhbF9pbmNsdWRp bmdfcHJvcGVydGllcyAobGFzdF9zdHJpbmcsIHN0cmluZykpCiAJICAmJiAhTklMUCAoRmVx dWFsIChsYXN0X3Bhcm1zLCBwYXJtcykpKQogCXsKLQkgIHN0cnVjdCBmcmFtZSAqdGlwX2Yg PSBYRlJBTUUgKHRpcF9mcmFtZSk7Ci0KIAkgIC8qIE9ubHkgRFggYW5kIERZIGhhdmUgY2hh bmdlZC4gICovCisJICB0aXBfZiA9IFhGUkFNRSAodGlwX2ZyYW1lKTsKIAkgIGlmICghTklM UCAodGlwX3RpbWVyKSkKIAkgICAgewogCSAgICAgIExpc3BfT2JqZWN0IHRpbWVyID0gdGlw X3RpbWVyOworCiAJICAgICAgdGlwX3RpbWVyID0gUW5pbDsKIAkgICAgICBjYWxsMSAoUWNh bmNlbF90aW1lciwgdGltZXIpOwogCSAgICB9CkBAIC01ODg4LDQxICs1OTQ4LDEwMyBAQCBU ZXh0IGxhcmdlciB0aGFuIHRoZSBzcGVjaWZpZWQgc2l6ZSBpcyBjbGlwcGVkLiAgKi8pCiAJ ICBYTW92ZVdpbmRvdyAoRlJBTUVfWF9ESVNQTEFZICh0aXBfZiksIEZSQU1FX1hfV0lORE9X ICh0aXBfZiksCiAJCSAgICAgICByb290X3gsIHJvb3RfeSk7CiAJICB1bmJsb2NrX2lucHV0 ICgpOworCiAJICBnb3RvIHN0YXJ0X3RpbWVyOwogCX0KLSAgICB9CisgICAgICBlbHNlIGlm ICh0b29sdGlwX3JldXNlX2hpZGRlbl9mcmFtZSAmJiBFUSAoZnJhbWUsIGxhc3RfZnJhbWUp KQorCXsKKwkgIGJvb2wgZGVsZXRlID0gZmFsc2U7CisJICBMaXNwX09iamVjdCB0YWlsLCBl bHQsIHBhcm0sIGxhc3Q7CisKKwkgIC8qIENoZWNrIGlmIGV2ZXJ5IHBhcmFtZXRlciBpbiBQ QVJNUyBoYXMgdGhlIHNhbWUgdmFsdWUgaW4KKwkgICAgIGxhc3RfcGFybXMgdW5sZXNzIGl0 IHNob3VsZCBiZSBpZ25vcmVkIGJ5IG1lYW5zIG9mCisJICAgICBWdG9vbHRpcF9yZXVzZV9o aWRkZW5fZnJhbWVfcGFyYW1ldGVycy4gIFRoaXMgbWF5IGRlc3RydWN0CisJICAgICBsYXN0 X3Bhcm1zIHdoaWNoLCBob3dldmVyLCB3aWxsIGJlIHJlY3JlYXRlZCBiZWxvdy4gICovCisJ ICBmb3IgKHRhaWwgPSBwYXJtczsgQ09OU1AgKHRhaWwpOyB0YWlsID0gWENEUiAodGFpbCkp CisJICAgIHsKKwkgICAgICBlbHQgPSBYQ0FSICh0YWlsKTsKKwkgICAgICBwYXJtID0gRmNh ciAoZWx0KTsKKwkgICAgICAvKiBUaGUgbGVmdCwgdG9wLCByaWdodCBhbmQgYm90dG9tIHBh cmFtZXRlcnMgYXJlIGhhbmRsZWQKKwkJIGJ5IGNvbXB1dGVfdGlwX3h5IHNvIHRoZXkgY2Fu IGJlIGlnbm9yZWQgaGVyZS4gICovCisJICAgICAgaWYgKCFFUSAocGFybSwgUWxlZnQpICYm ICFFUSAocGFybSwgUXRvcCkKKwkJICAmJiAhRVEgKHBhcm0sIFFyaWdodCkgJiYgIUVRIChw YXJtLCBRYm90dG9tKSkKKwkJeworCQkgIGxhc3QgPSBGYXNzcSAocGFybSwgbGFzdF9wYXJt cyk7CisJCSAgaWYgKE5JTFAgKEZlcXVhbCAoRmNkciAoZWx0KSwgRmNkciAobGFzdCkpKSkK KwkJICAgIHsKKwkJICAgICAgLyogV2UgbG9zdCwgZGVsZXRlIHRoZSBvbGQgdG9vbHRpcC4g ICovCisJCSAgICAgIGRlbGV0ZSA9IHRydWU7CisJCSAgICAgIGJyZWFrOworCQkgICAgfQor CQkgIGVsc2UKKwkJICAgIGxhc3RfcGFybXMgPSBjYWxsMiAoUWFzc3FfZGVsZXRlX2FsbCwg cGFybSwgbGFzdF9wYXJtcyk7CisJCX0KKwkgICAgICBlbHNlCisJCWxhc3RfcGFybXMgPSBj YWxsMiAoUWFzc3FfZGVsZXRlX2FsbCwgcGFybSwgbGFzdF9wYXJtcyk7CisJICAgIH0KCi0g IC8qIEhpZGUgYSBwcmV2aW91cyB0aXAsIGlmIGFueS4gICovCi0gIEZ4X2hpZGVfdGlwICgp OworCSAgLyogTm93IGNoZWNrIGlmIGV2ZXJ5IHBhcmFtZXRlciBpbiB3aGF0IGlzIGxlZnQg b2YgbGFzdF9wYXJtcworCSAgICAgd2l0aCBhIG5vbi1uaWwgdmFsdWUgaGFzIGFuIGFzc29j aWF0aW9uIGluIFBBUk1TIHVubGVzcyBpdAorCSAgICAgc2hvdWxkIGJlIGlnbm9yZWQgYnkg bWVhbnMgb2YKKwkgICAgIFZ0b29sdGlwX3JldXNlX2hpZGRlbl9mcmFtZV9wYXJhbWV0ZXJz LiAgKi8KKwkgIGZvciAodGFpbCA9IGxhc3RfcGFybXM7IENPTlNQICh0YWlsKTsgdGFpbCA9 IFhDRFIgKHRhaWwpKQorCSAgICB7CisJICAgICAgZWx0ID0gWENBUiAodGFpbCk7CisJICAg ICAgcGFybSA9IEZjYXIgKGVsdCk7CisJICAgICAgaWYgKCFFUSAocGFybSwgUWxlZnQpICYm ICFFUSAocGFybSwgUXRvcCkgJiYgIUVRIChwYXJtLCBRcmlnaHQpCisJCSAgJiYgIUVRIChw YXJtLCBRYm90dG9tKSAmJiAhTklMUCAoRmNkciAoZWx0KSkpCisJCXsKKwkJICAvKiBXZSBs b3N0LCBkZWxldGUgdGhlIG9sZCB0b29sdGlwLiAgKi8KKwkJICBkZWxldGUgPSB0cnVlOwor CQkgIGJyZWFrOworCQl9CisJICAgIH0KKworCSAgeF9oaWRlX3RpcCAoZGVsZXRlKTsKKwl9 CisgICAgICBlbHNlCisJeF9oaWRlX3RpcCAodHJ1ZSk7CisgICAgfQorICBlbHNlCisgICAg eF9oaWRlX3RpcCAodHJ1ZSk7CgogICBBU0VUIChsYXN0X3Nob3dfdGlwX2FyZ3MsIDAsIHN0 cmluZyk7CiAgIEFTRVQgKGxhc3Rfc2hvd190aXBfYXJncywgMSwgZnJhbWUpOwogICBBU0VU IChsYXN0X3Nob3dfdGlwX2FyZ3MsIDIsIHBhcm1zKTsKCi0gIC8qIEFkZCBkZWZhdWx0IHZh bHVlcyB0byBmcmFtZSBwYXJhbWV0ZXJzLiAgKi8KLSAgaWYgKE5JTFAgKEZhc3NxIChRbmFt ZSwgcGFybXMpKSkKLSAgICBwYXJtcyA9IEZjb25zIChGY29ucyAoUW5hbWUsIGJ1aWxkX3N0 cmluZyAoInRvb2x0aXAiKSksIHBhcm1zKTsKLSAgaWYgKE5JTFAgKEZhc3NxIChRaW50ZXJu YWxfYm9yZGVyX3dpZHRoLCBwYXJtcykpKQotICAgIHBhcm1zID0gRmNvbnMgKEZjb25zIChR aW50ZXJuYWxfYm9yZGVyX3dpZHRoLCBtYWtlX251bWJlciAoMykpLCBwYXJtcyk7Ci0gIGlm IChOSUxQIChGYXNzcSAoUWJvcmRlcl93aWR0aCwgcGFybXMpKSkKLSAgICBwYXJtcyA9IEZj b25zIChGY29ucyAoUWJvcmRlcl93aWR0aCwgbWFrZV9udW1iZXIgKDEpKSwgcGFybXMpOwot ICBpZiAoTklMUCAoRmFzc3EgKFFib3R0b21fZGl2aWRlcl93aWR0aCwgcGFybXMpKSkKLSAg ICBwYXJtcyA9IEZjb25zIChGY29ucyAoUWJvdHRvbV9kaXZpZGVyX3dpZHRoLCBtYWtlX251 bWJlciAoMCkpLCBwYXJtcyk7Ci0gIGlmIChOSUxQIChGYXNzcSAoUXJpZ2h0X2RpdmlkZXJf d2lkdGgsIHBhcm1zKSkpCi0gICAgcGFybXMgPSBGY29ucyAoRmNvbnMgKFFyaWdodF9kaXZp ZGVyX3dpZHRoLCBtYWtlX251bWJlciAoMCkpLCBwYXJtcyk7Ci0gIGlmIChOSUxQIChGYXNz cSAoUWJvcmRlcl9jb2xvciwgcGFybXMpKSkKLSAgICBwYXJtcyA9IEZjb25zIChGY29ucyAo UWJvcmRlcl9jb2xvciwgYnVpbGRfc3RyaW5nICgibGlnaHR5ZWxsb3ciKSksIHBhcm1zKTsK LSAgaWYgKE5JTFAgKEZhc3NxIChRYmFja2dyb3VuZF9jb2xvciwgcGFybXMpKSkKLSAgICBw YXJtcyA9IEZjb25zIChGY29ucyAoUWJhY2tncm91bmRfY29sb3IsIGJ1aWxkX3N0cmluZyAo ImxpZ2h0eWVsbG93IikpLAotCQkgICBwYXJtcyk7Ci0KLSAgLyogQ3JlYXRlIGEgZnJhbWUg Zm9yIHRoZSB0b29sdGlwLCBhbmQgcmVjb3JkIGl0IGluIHRoZSBnbG9iYWwKLSAgICAgdmFy aWFibGUgdGlwX2ZyYW1lLiAgKi8KLSAgZnJhbWUgPSB4X2NyZWF0ZV90aXBfZnJhbWUgKEZS QU1FX0RJU1BMQVlfSU5GTyAoZiksIHBhcm1zLCBzdHJpbmcpOwotICBmID0gWEZSQU1FIChm cmFtZSk7Ci0KLSAgLyogU2V0IHVwIHRoZSBmcmFtZSdzIHJvb3Qgd2luZG93LiAgKi8KLSAg dyA9IFhXSU5ET1cgKEZSQU1FX1JPT1RfV0lORE9XIChmKSk7CisgIGlmICghRlJBTUVQICh0 aXBfZnJhbWUpIHx8ICFGUkFNRV9MSVZFX1AgKFhGUkFNRSAodGlwX2ZyYW1lKSkpCisgICAg eworICAgICAgLyogQWRkIGRlZmF1bHQgdmFsdWVzIHRvIGZyYW1lIHBhcmFtZXRlcnMuICAq LworICAgICAgaWYgKE5JTFAgKEZhc3NxIChRbmFtZSwgcGFybXMpKSkKKwlwYXJtcyA9IEZj b25zIChGY29ucyAoUW5hbWUsIGJ1aWxkX3N0cmluZyAoInRvb2x0aXAiKSksIHBhcm1zKTsK KyAgICAgIGlmIChOSUxQIChGYXNzcSAoUWludGVybmFsX2JvcmRlcl93aWR0aCwgcGFybXMp KSkKKwlwYXJtcyA9IEZjb25zIChGY29ucyAoUWludGVybmFsX2JvcmRlcl93aWR0aCwgbWFr ZV9udW1iZXIgKDMpKSwgcGFybXMpOworICAgICAgaWYgKE5JTFAgKEZhc3NxIChRYm9yZGVy X3dpZHRoLCBwYXJtcykpKQorCXBhcm1zID0gRmNvbnMgKEZjb25zIChRYm9yZGVyX3dpZHRo LCBtYWtlX251bWJlciAoMSkpLCBwYXJtcyk7CisgICAgICBpZiAoTklMUCAoRmFzc3EgKFFi b3JkZXJfY29sb3IsIHBhcm1zKSkpCisJcGFybXMgPSBGY29ucyAoRmNvbnMgKFFib3JkZXJf Y29sb3IsIGJ1aWxkX3N0cmluZyAoImxpZ2h0eWVsbG93IikpLCBwYXJtcyk7CisgICAgICBp ZiAoTklMUCAoRmFzc3EgKFFiYWNrZ3JvdW5kX2NvbG9yLCBwYXJtcykpKQorCXBhcm1zID0g RmNvbnMgKEZjb25zIChRYmFja2dyb3VuZF9jb2xvciwgYnVpbGRfc3RyaW5nICgibGlnaHR5 ZWxsb3ciKSksCisJCSAgICAgICBwYXJtcyk7CisKKyAgICAgIC8qIENyZWF0ZSBhIGZyYW1l IGZvciB0aGUgdG9vbHRpcCwgYW5kIHJlY29yZCBpdCBpbiB0aGUgZ2xvYmFsCisJIHZhcmlh YmxlIHRpcF9mcmFtZS4gICovCisgICAgICBpZiAoTklMUCAodGlwX2ZyYW1lID0geF9jcmVh dGVfdGlwX2ZyYW1lIChGUkFNRV9ESVNQTEFZX0lORk8gKGYpLCBwYXJtcykpKQorCS8qIENy ZWF0aW5nIHRoZSB0aXAgZnJhbWUgZmFpbGVkLiAgKi8KKwlyZXR1cm4gdW5iaW5kX3RvIChj b3VudCwgUW5pbCk7CisgICAgfQorCisgIHRpcF9mID0gWEZSQU1FICh0aXBfZnJhbWUpOwor ICB3aW5kb3cgPSBGUkFNRV9ST09UX1dJTkRPVyAodGlwX2YpOworICBBVVRPX1NUUklORyAo dGlwLCAiICp0aXAqIik7CisgIHNldF93aW5kb3dfYnVmZmVyICh3aW5kb3csIEZnZXRfYnVm ZmVyX2NyZWF0ZSAodGlwKSwgZmFsc2UsIGZhbHNlKTsKKyAgdyA9IFhXSU5ET1cgKHdpbmRv dyk7CisgIHctPnBzZXVkb193aW5kb3dfcCA9IHRydWU7CisKKyAgLyogU2V0IHVwIHRoZSBm cmFtZSdzIHJvb3Qgd2luZG93LiAgTm90ZTogVGhlIGZvbGxvd2luZyBjb2RlIGRvZXMgbm90 CisgICAgIHRyeSB0byBzaXplIHRoZSB3aW5kb3cgb3IgaXRzIGZyYW1lIGNvcnJlY3RseS4g IEl0cyBvbmx5IHB1cnBvc2UgaXMKKyAgICAgdG8gbWFrZSB0aGUgc3Vic2VxdWVudCB0ZXh0 IHNpemUgY2FsY3VsYXRpb25zIHdvcmsuICBUaGUgcmlnaHQKKyAgICAgc2l6ZXMgc2hvdWxk IGdldCBpbnN0YWxsZWQgd2hlbiB0aGUgdG9vbGtpdCBnZXRzIGJhY2sgdG8gdXMuICAqLwog ICB3LT5sZWZ0X2NvbCA9IDA7CiAgIHctPnRvcF9saW5lID0gMDsKICAgdy0+cGl4ZWxfbGVm dCA9IDA7CkBAIC01OTQxLDEzMCArNjA2Myw0NyBAQCBUZXh0IGxhcmdlciB0aGFuIHRoZSBz cGVjaWZpZWQgc2l6ZSBpcyBjbGlwcGVkLiAgKi8pCiAgICAgICB3LT50b3RhbF9saW5lcyA9 IDQwOwogICAgIH0KCi0gIHctPnBpeGVsX3dpZHRoID0gdy0+dG90YWxfY29scyAqIEZSQU1F X0NPTFVNTl9XSURUSCAoZik7Ci0gIHctPnBpeGVsX2hlaWdodCA9IHctPnRvdGFsX2xpbmVz ICogRlJBTUVfTElORV9IRUlHSFQgKGYpOwotCi0gIEZSQU1FX1RPVEFMX0NPTFMgKGYpID0g dy0+dG90YWxfY29sczsKLSAgYWRqdXN0X2ZyYW1lX2dseXBocyAoZik7Ci0gIHctPnBzZXVk b193aW5kb3dfcCA9IHRydWU7CisgIHctPnBpeGVsX3dpZHRoID0gdy0+dG90YWxfY29scyAq IEZSQU1FX0NPTFVNTl9XSURUSCAodGlwX2YpOworICB3LT5waXhlbF9oZWlnaHQgPSB3LT50 b3RhbF9saW5lcyAqIEZSQU1FX0xJTkVfSEVJR0hUICh0aXBfZik7CisgIEZSQU1FX1RPVEFM X0NPTFMgKHRpcF9mKSA9IHctPnRvdGFsX2NvbHM7CisgIGFkanVzdF9mcmFtZV9nbHlwaHMg KHRpcF9mKTsKCi0gIC8qIERpc3BsYXkgdGhlIHRvb2x0aXAgdGV4dCBpbiBhIHRlbXBvcmFy eSBidWZmZXIuICAqLworICAvKiBJbnNlcnQgU1RSSU5HIGludG8gcm9vdCB3aW5kb3cncyBi dWZmZXIgYW5kIGZpdCB0aGUgZnJhbWUgdG8gdGhlCisgICAgIGJ1ZmZlci4gICovCisgIGNv dW50XzEgPSBTUEVDUERMX0lOREVYICgpOwogICBvbGRfYnVmZmVyID0gY3VycmVudF9idWZm ZXI7Ci0gIHNldF9idWZmZXJfaW50ZXJuYWxfMSAoWEJVRkZFUiAoWFdJTkRPVyAoRlJBTUVf Uk9PVF9XSU5ET1cgKGYpKS0+Y29udGVudHMpKTsKKyAgc2V0X2J1ZmZlcl9pbnRlcm5hbF8x IChYQlVGRkVSICh3LT5jb250ZW50cykpOwogICBic2V0X3RydW5jYXRlX2xpbmVzIChjdXJy ZW50X2J1ZmZlciwgUW5pbCk7CisgIHNwZWNiaW5kIChRaW5oaWJpdF9yZWFkX29ubHksIFF0 KTsKKyAgc3BlY2JpbmQgKFFpbmhpYml0X21vZGlmaWNhdGlvbl9ob29rcywgUXQpOworICBz cGVjYmluZCAoUWluaGliaXRfcG9pbnRfbW90aW9uX2hvb2tzLCBRdCk7CisgIEZlcmFzZV9i dWZmZXIgKCk7CisgIEZpbnNlcnQgKDEsICZzdHJpbmcpOwogICBjbGVhcl9nbHlwaF9tYXRy aXggKHctPmRlc2lyZWRfbWF0cml4KTsKICAgY2xlYXJfZ2x5cGhfbWF0cml4ICh3LT5jdXJy ZW50X21hdHJpeCk7CiAgIFNFVF9URVhUX1BPUyAocG9zLCBCRUdWLCBCRUdWX0JZVEUpOwot ICB0cnlfd2luZG93IChGUkFNRV9ST09UX1dJTkRPVyAoZiksIHBvcywgVFJZX1dJTkRPV19J R05PUkVfRk9OVFNfQ0hBTkdFKTsKLQotICAvKiBDb21wdXRlIHdpZHRoIGFuZCBoZWlnaHQg b2YgdGhlIHRvb2x0aXAuICAqLwotICB3aWR0aCA9IGhlaWdodCA9IDA7Ci0gIHNlZW5fcmV2 ZXJzZWRfcCA9IGZhbHNlOwotICBmb3IgKGkgPSAwOyBpIDwgdy0+ZGVzaXJlZF9tYXRyaXgt Pm5yb3dzOyArK2kpCi0gICAgewotICAgICAgc3RydWN0IGdseXBoX3JvdyAqcm93ID0gJnct PmRlc2lyZWRfbWF0cml4LT5yb3dzW2ldOwotICAgICAgc3RydWN0IGdseXBoICpsYXN0Owot ICAgICAgaW50IHJvd193aWR0aDsKLQotICAgICAgLyogU3RvcCBhdCB0aGUgZmlyc3QgZW1w dHkgcm93IGF0IHRoZSBlbmQuICAqLwotICAgICAgaWYgKCFyb3ctPmVuYWJsZWRfcCB8fCAh TUFUUklYX1JPV19ESVNQTEFZU19URVhUX1AgKHJvdykpCi0JYnJlYWs7Ci0KLSAgICAgIC8q IExldCB0aGUgcm93IGdvIG92ZXIgdGhlIGZ1bGwgd2lkdGggb2YgdGhlIGZyYW1lLiAgKi8K LSAgICAgIHJvdy0+ZnVsbF93aWR0aF9wID0gdHJ1ZTsKLQotICAgICAgcm93X3dpZHRoID0g cm93LT5waXhlbF93aWR0aDsKLSAgICAgIGlmIChyb3ctPnVzZWRbVEVYVF9BUkVBXSkKLQl7 Ci0JICAvKiBUaGVyZSdzIGEgZ2x5cGggYXQgdGhlIGVuZCBvZiByb3dzIHRoYXQgaXMgdXNl ZCB0byBwbGFjZQotCSAgICAgdGhlIGN1cnNvciB0aGVyZS4gIERvbid0IGluY2x1ZGUgdGhl IHdpZHRoIG9mIHRoaXMgZ2x5cGguICAqLwotCSAgaWYgKCFyb3ctPnJldmVyc2VkX3ApCi0J ICAgIHsKLQkgICAgICBsYXN0ID0gJnJvdy0+Z2x5cGhzW1RFWFRfQVJFQV1bcm93LT51c2Vk W1RFWFRfQVJFQV0gLSAxXTsKLQkgICAgICBpZiAoTklMUCAobGFzdC0+b2JqZWN0KSkKLQkJ cm93X3dpZHRoIC09IGxhc3QtPnBpeGVsX3dpZHRoOwotCSAgICB9Ci0JICBlbHNlCi0JICAg IHsKLQkgICAgICAvKiBUaGVyZSBjb3VsZCBiZSBhIHN0cmV0Y2ggZ2x5cGggYXQgdGhlIGJl Z2lubmluZyBvZiBSMkwKLQkJIHJvd3MgdGhhdCBpcyBwcm9kdWNlZCBieSBleHRlbmRfZmFj ZV90b19lbmRfb2ZfbGluZS4KLQkJIERvbid0IGNvdW50IHRoYXQgZ2x5cGguICAqLwotCSAg ICAgIHN0cnVjdCBnbHlwaCAqZyA9IHJvdy0+Z2x5cGhzW1RFWFRfQVJFQV07Ci0KLQkgICAg ICBpZiAoZy0+dHlwZSA9PSBTVFJFVENIX0dMWVBIICYmIE5JTFAgKGctPm9iamVjdCkpCi0J CXsKLQkJICByb3dfd2lkdGggLT0gZy0+cGl4ZWxfd2lkdGg7Ci0JCSAgc2Vlbl9yZXZlcnNl ZF9wID0gdHJ1ZTsKLQkJfQotCSAgICB9Ci0JfQotCi0gICAgICBoZWlnaHQgKz0gcm93LT5o ZWlnaHQ7Ci0gICAgICB3aWR0aCA9IG1heCAod2lkdGgsIHJvd193aWR0aCk7Ci0gICAgfQot Ci0gIC8qIElmIHdlJ3ZlIHNlZW4gcGFydGlhbC1sZW5ndGggUjJMIHJvd3MsIHdlIG5lZWQg dG8gcmUtYWRqdXN0IHRoZQotICAgICB0b29sLXRpcCBmcmFtZSB3aWR0aCBhbmQgcmVkaXNw bGF5IGl0IGFnYWluLCB0byBhdm9pZCBvdmVyLXdpZGUKLSAgICAgdGlwcyBkdWUgdG8gdGhl IHN0cmV0Y2ggZ2x5cGggdGhhdCBleHRlbmRzIFIyTCBsaW5lcyB0byBmdWxsCi0gICAgIHdp ZHRoIG9mIHRoZSBmcmFtZS4gICovCi0gIGlmIChzZWVuX3JldmVyc2VkX3ApCi0gICAgewot ICAgICAgLyogdy0+dG90YWxfY29scyBhbmQgRlJBTUVfVE9UQUxfQ09MUyB3YW50IHRoZSB3 aWR0aCBpbiBjb2x1bW5zLAotCSBub3QgaW4gcGl4ZWxzLiAgKi8KLSAgICAgIHctPnBpeGVs X3dpZHRoID0gd2lkdGg7Ci0gICAgICB3aWR0aCAvPSBXSU5ET1dfRlJBTUVfQ09MVU1OX1dJ RFRIICh3KTsKLSAgICAgIHctPnRvdGFsX2NvbHMgPSB3aWR0aDsKLSAgICAgIEZSQU1FX1RP VEFMX0NPTFMgKGYpID0gd2lkdGg7Ci0gICAgICBTRVRfRlJBTUVfV0lEVEggKGYsIHdpZHRo KTsKLSAgICAgIGFkanVzdF9mcmFtZV9nbHlwaHMgKGYpOwotICAgICAgY2xlYXJfZ2x5cGhf bWF0cml4ICh3LT5kZXNpcmVkX21hdHJpeCk7Ci0gICAgICBjbGVhcl9nbHlwaF9tYXRyaXgg KHctPmN1cnJlbnRfbWF0cml4KTsKLSAgICAgIHRyeV93aW5kb3cgKEZSQU1FX1JPT1RfV0lO RE9XIChmKSwgcG9zLCAwKTsKLSAgICAgIHdpZHRoID0gaGVpZ2h0ID0gMDsKLSAgICAgIC8q IFJlY29tcHV0ZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSB0b29sdGlwLiAgKi8KLSAgICAg IGZvciAoaSA9IDA7IGkgPCB3LT5kZXNpcmVkX21hdHJpeC0+bnJvd3M7ICsraSkKLQl7Ci0J ICBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3cgPSAmdy0+ZGVzaXJlZF9tYXRyaXgtPnJvd3NbaV07 Ci0JICBzdHJ1Y3QgZ2x5cGggKmxhc3Q7Ci0JICBpbnQgcm93X3dpZHRoOwotCi0JICBpZiAo IXJvdy0+ZW5hYmxlZF9wIHx8ICFNQVRSSVhfUk9XX0RJU1BMQVlTX1RFWFRfUCAocm93KSkK LQkgICAgYnJlYWs7Ci0JICByb3ctPmZ1bGxfd2lkdGhfcCA9IHRydWU7Ci0JICByb3dfd2lk dGggPSByb3ctPnBpeGVsX3dpZHRoOwotCSAgaWYgKHJvdy0+dXNlZFtURVhUX0FSRUFdICYm ICFyb3ctPnJldmVyc2VkX3ApCi0JICAgIHsKLQkgICAgICBsYXN0ID0gJnJvdy0+Z2x5cGhz W1RFWFRfQVJFQV1bcm93LT51c2VkW1RFWFRfQVJFQV0gLSAxXTsKLQkgICAgICBpZiAoTklM UCAobGFzdC0+b2JqZWN0KSkKLQkJcm93X3dpZHRoIC09IGxhc3QtPnBpeGVsX3dpZHRoOwot CSAgICB9Ci0KLQkgIGhlaWdodCArPSByb3ctPmhlaWdodDsKLQkgIHdpZHRoID0gbWF4ICh3 aWR0aCwgcm93X3dpZHRoKTsKLQl9Ci0gICAgfQotCi0gIC8qIEFkZCB0aGUgZnJhbWUncyBp bnRlcm5hbCBib3JkZXIgdG8gdGhlIHdpZHRoIGFuZCBoZWlnaHQgdGhlIFgKLSAgICAgd2lu ZG93IHNob3VsZCBoYXZlLiAgKi8KLSAgaGVpZ2h0ICs9IDIgKiBGUkFNRV9JTlRFUk5BTF9C T1JERVJfV0lEVEggKGYpOwotICB3aWR0aCArPSAyICogRlJBTUVfSU5URVJOQUxfQk9SREVS X1dJRFRIIChmKTsKLQotICAvKiBNb3ZlIHRoZSB0b29sdGlwIHdpbmRvdyB3aGVyZSB0aGUg bW91c2UgcG9pbnRlciBpcy4gIFJlc2l6ZSBhbmQKLSAgICAgc2hvdyBpdC4gICovCi0gIGNv bXB1dGVfdGlwX3h5IChmLCBwYXJtcywgZHgsIGR5LCB3aWR0aCwgaGVpZ2h0LCAmcm9vdF94 LCAmcm9vdF95KTsKLQorICB0cnlfd2luZG93ICh3aW5kb3csIHBvcywgVFJZX1dJTkRPV19J R05PUkVfRk9OVFNfQ0hBTkdFKTsKKyAgLyogQ2FsY3VsYXRlIHNpemUgb2YgdG9vbHRpcCB3 aW5kb3cuICAqLworICBzaXplID0gRndpbmRvd190ZXh0X3BpeGVsX3NpemUgKHdpbmRvdywg UW5pbCwgUW5pbCwgUW5pbCwKKwkJCQkgIG1ha2VfbnVtYmVyICh3LT5waXhlbF9oZWlnaHQp LCBRbmlsKTsKKyAgLyogQWRkIHRoZSBmcmFtZSdzIGludGVybmFsIGJvcmRlciB0byBjYWxj dWxhdGVkIHNpemUuICAqLworICB3aWR0aCA9IFhJTlQgKEZjYXIgKHNpemUpKSArIDIgKiBG UkFNRV9JTlRFUk5BTF9CT1JERVJfV0lEVEggKHRpcF9mKTsKKyAgaGVpZ2h0ID0gWElOVCAo RmNkciAoc2l6ZSkpICsgMiAqIEZSQU1FX0lOVEVSTkFMX0JPUkRFUl9XSURUSCAodGlwX2Yp OworCisgIC8qIENhbGN1bGF0ZSBwb3NpdGlvbiBvZiB0b29sdGlwIGZyYW1lLiAgKi8KKyAg Y29tcHV0ZV90aXBfeHkgKHRpcF9mLCBwYXJtcywgZHgsIGR5LCB3aWR0aCwgaGVpZ2h0LCAm cm9vdF94LCAmcm9vdF95KTsKKworICAvKiBTaG93IHRvb2x0aXAgZnJhbWUuICAqLwogICBi bG9ja19pbnB1dCAoKTsKLSAgWE1vdmVSZXNpemVXaW5kb3cgKEZSQU1FX1hfRElTUExBWSAo ZiksIEZSQU1FX1hfV0lORE9XIChmKSwKKyAgWE1vdmVSZXNpemVXaW5kb3cgKEZSQU1FX1hf RElTUExBWSAodGlwX2YpLCBGUkFNRV9YX1dJTkRPVyAodGlwX2YpLAogCQkgICAgIHJvb3Rf eCwgcm9vdF95LCB3aWR0aCwgaGVpZ2h0KTsKLSAgWE1hcFJhaXNlZCAoRlJBTUVfWF9ESVNQ TEFZIChmKSwgRlJBTUVfWF9XSU5ET1cgKGYpKTsKKyAgWE1hcFJhaXNlZCAoRlJBTUVfWF9E SVNQTEFZICh0aXBfZiksIEZSQU1FX1hfV0lORE9XICh0aXBfZikpOwogICB1bmJsb2NrX2lu cHV0ICgpOwoKLSAgLyogRHJhdyBpbnRvIHRoZSB3aW5kb3cuICAqLwogICB3LT5tdXN0X2Jl X3VwZGF0ZWRfcCA9IHRydWU7CiAgIHVwZGF0ZV9zaW5nbGVfd2luZG93ICh3KTsKLQotICAv KiBSZXN0b3JlIG9yaWdpbmFsIGN1cnJlbnQgYnVmZmVyLiAgKi8KICAgc2V0X2J1ZmZlcl9p bnRlcm5hbF8xIChvbGRfYnVmZmVyKTsKKyAgdW5iaW5kX3RvIChjb3VudF8xLCBRbmlsKTsK ICAgd2luZG93c19vcl9idWZmZXJzX2NoYW5nZWQgPSBvbGRfd2luZG93c19vcl9idWZmZXJz X2NoYW5nZWQ7CgogIHN0YXJ0X3RpbWVyOgpAQCAtNjA4MSw2NiArNjEyMCw5IEBAIERFRlVO ICgieC1oaWRlLXRpcCIsIEZ4X2hpZGVfdGlwLCBTeF9oaWRlX3RpcCwgMCwgMCwgMCwKIFZh bHVlIGlzIHQgaWYgdG9vbHRpcCB3YXMgb3BlbiwgbmlsIG90aGVyd2lzZS4gICovKQogICAo dm9pZCkKIHsKLSAgcHRyZGlmZl90IGNvdW50OwotICBMaXNwX09iamVjdCBkZWxldGVkLCBm cmFtZSwgdGltZXI7Ci0KLSAgLyogUmV0dXJuIHF1aWNrbHkgaWYgbm90aGluZyB0byBkby4g ICovCi0gIGlmIChOSUxQICh0aXBfdGltZXIpICYmIE5JTFAgKHRpcF9mcmFtZSkpCi0gICAg cmV0dXJuIFFuaWw7Ci0KLSAgZnJhbWUgPSB0aXBfZnJhbWU7Ci0gIHRpbWVyID0gdGlwX3Rp bWVyOwotICB0aXBfZnJhbWUgPSB0aXBfdGltZXIgPSBkZWxldGVkID0gUW5pbDsKLQotICBj b3VudCA9IFNQRUNQRExfSU5ERVggKCk7Ci0gIHNwZWNiaW5kIChRaW5oaWJpdF9yZWRpc3Bs YXksIFF0KTsKLSAgc3BlY2JpbmQgKFFpbmhpYml0X3F1aXQsIFF0KTsKLQotICBpZiAoIU5J TFAgKHRpbWVyKSkKLSAgICBjYWxsMSAoUWNhbmNlbF90aW1lciwgdGltZXIpOwotCi0jaWZk ZWYgVVNFX0dUSwotICB7Ci0gICAgLyogV2hlbiB1c2luZyBzeXN0ZW0gdG9vbHRpcCwgdGlw X2ZyYW1lIGlzIHRoZSBFbWFjcyBmcmFtZSBvbiB3aGljaAotICAgICAgIHRoZSB0aXAgaXMg c2hvd24uICAqLwotICAgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoZnJhbWUpOwotICAg IGlmIChGUkFNRV9MSVZFX1AgKGYpICYmIHhnX2hpZGVfdG9vbHRpcCAoZikpCi0gICAgICBm cmFtZSA9IFFuaWw7Ci0gIH0KLSNlbmRpZgotCi0gIGlmIChGUkFNRVAgKGZyYW1lKSkKLSAg ICB7Ci0gICAgICBkZWxldGVfZnJhbWUgKGZyYW1lLCBRbmlsKTsKLSAgICAgIGRlbGV0ZWQg PSBRdDsKLQotI2lmZGVmIFVTRV9MVUNJRAotICAgICAgLyogQmxvb2RjdXJkbGluZyBoYWNr IGFsZXJ0OiBUaGUgTHVjaWQgbWVudSBiYXIgd2lkZ2V0J3MKLQkgcmVkaXNwbGF5IHByb2Nl ZHVyZSBpcyBub3QgY2FsbGVkIHdoZW4gYSB0aXAgZnJhbWUgb3ZlciBtZW51Ci0JIGl0ZW1z IGlzIHVubWFwcGVkLiAgUmVkaXNwbGF5IHRoZSBtZW51IG1hbnVhbGx5Li4uICAqLwotICAg ICAgewotICAgICAgICBXaWRnZXQgdzsKLSAgICAgICAgc3RydWN0IGZyYW1lICpmID0gU0VM RUNURURfRlJBTUUgKCk7Ci0gICAgICAgIGlmIChGUkFNRV9YX1AgKGYpICYmIEZSQU1FX0xJ VkVfUCAoZikpCi0gICAgICAgICAgewotICAgICAgICAgIHcgPSBmLT5vdXRwdXRfZGF0YS54 LT5tZW51YmFyX3dpZGdldDsKLQotICAgICAgICAgIGlmICghRG9lc1NhdmVVbmRlcnMgKEZS QU1FX0RJU1BMQVlfSU5GTyAoZiktPnNjcmVlbikKLSAgICAgICAgICAgICAgJiYgdyAhPSBO VUxMKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBibG9ja19pbnB1dCAoKTsKLSAg ICAgICAgICAgICAgeGx3bWVudV9yZWRpc3BsYXkgKHcpOwotICAgICAgICAgICAgICB1bmJs b2NrX2lucHV0ICgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0jZW5k aWYgLyogVVNFX0xVQ0lEICovCi0gICAgfQotCi0gIHJldHVybiB1bmJpbmRfdG8gKGNvdW50 LCBkZWxldGVkKTsKKyAgcmV0dXJuIHhfaGlkZV90aXAgKCF0b29sdGlwX3JldXNlX2hpZGRl bl9mcmFtZSk7CiB9CgotCiAMCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkJCUZpbGUgc2VsZWN0 aW9uIGRpYWxvZwpAQCAtNjgwMiw2ICs2Nzg0LDcgQEAgc3ltc19vZl94Zm5zICh2b2lkKQog ICBERUZTWU0gKFFjYW5jZWxfdGltZXIsICJjYW5jZWwtdGltZXIiKTsKICAgREVGU1lNIChR Zm9udF9wYXJhbSwgImZvbnQtcGFyYW1ldGVyIik7CiAgIERFRlNZTSAoUW1vbm8sICJtb25v Iik7CisgIERFRlNZTSAoUWFzc3FfZGVsZXRlX2FsbCwgImFzc3EtZGVsZXRlLWFsbCIpOwoK ICNpZmRlZiBVU0VfQ0FJUk8KICAgREVGU1lNIChRcGRmLCAicGRmIik7Cgo= --------------000504090303070108080007--