From mboxrd@z Thu Jan 1 00:00:00 1970 From: chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org Subject: Re: [DPU PATCH 2/3] drm/msm/dp: add displayPort driver support Date: Mon, 19 Nov 2018 14:34:53 -0800 Message-ID: <84612eefebedc1eae1756505d6639b01@codeaurora.org> References: <1539191759-14836-1-git-send-email-chandanu@codeaurora.org> <1539191759-14836-3-git-send-email-chandanu@codeaurora.org> <20181023162821.GE154160@art_vandelay> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181023162821.GE154160@art_vandelay> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Sean Paul Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org T24gMjAxOC0xMC0yMyAwOToyOCwgU2VhbiBQYXVsIHdyb3RlOgo+IE9uIFdlZCwgT2N0IDEwLCAy MDE4IGF0IDEwOjE1OjU4QU0gLTA3MDAsIENoYW5kYW4gVWRkYXJhanUgd3JvdGU6Cj4+IEFkZCB0 aGUgbmVlZGVkIGRpc3BsYXlQb3J0IGZpbGVzIHRvIGVuYWJsZSBEUCBkcml2ZXIKPj4gb24gbXNt IHRhcmdldC4KPj4gCj4+ICJkcF9kaXNwbGF5IiBtb2R1bGUgaXMgdGhlIG1haW4gbW9kdWxlIHRo YXQgY2FsbHMgaW50bwo+PiBvdGhlciBzdWItbW9kdWxlcy4gImRwX2RybSIgZmlsZSByZXByZXNl bnRzIHRoZSBpbnRlcmZhY2UKPj4gYmV0d2VlbiBEUk0gZnJhbWV3b3JrIGFuZCBEUCBkcml2ZXIu Cj4+IAo+IAoKSGVsbG8gU2VhbiwKSSBoYWQgZmV3IHF1ZXJpZXMgcmVnYXJkaW5nIHlvdXIgY29t bWVudHMuIFNoYXJlZCBteSBxdWVyaWVzIGJlbG93LiAKUGxlYXNlIHNoYXJlIHlvdXIgZmVlZGJh Y2suCgoKPiBIaSBDaGFuZGFuLAo+IEEgZmV3IHRoZW1lcyB3aGljaCBJJ3ZlIHBvaW50ZWQgb3V0 IGJlbG93LCBidXQgd2FudCB0byBjYWxsIG91dCBhdCB0aGUgCj4gdG9wIHNvCj4gaXQncyBvYnZp b3VzLgo+IAo+IC0gUGxlYXNlIHJlbW92ZSBhbGwgc3VwZXJmbHVvdXMgTlVMTCBjaGVja3MgYXQg dGhlIGJlZ2lubmluZyBvZiAKPiBmdW5jdGlvbnMuCj4gICBJbmNsdWRlZCBpbiB0aGlzIGlzIHJl Zmxvd2luZyBpbml0aWFsaXphdGlvbiBvZiB2YXJpYWJsZXMgYW5kIAo+IGNoZWNraW5nIHRoYXQK PiAgIHJldHVybiB0eXBlcyBzdGlsbCBtYWtlIHNlbnNlIChpZTogaWYgYSBmdW5jdGlvbidzIG9u bHkgZXJyb3IgcGF0aCBpcyAKPiB0aGUgTlVMTAo+ICAgY2hlY2ssIG1ha2UgaXQgdm9pZCkuCj4g LSBQbGVhc2UgcmVtb3ZlIGFsbCBvZiB0aGUgbmV3IGNhbGxiYWNrcyBhbmQganVzdCBjYWxsIGZ1 bmN0aW9ucyAKPiBkaXJlY3RseS4gVGhpcwo+ICAgc2hvdWxkIGFsc28gZ2V0IHJpZCBvZiB0aGUg X2dldC9fcHV0IGZ1bmN0aW9ucyB0aGF0IGFsbG9jYXRlL3NldCB0aGVtIAo+IHVwCj4gLSBQbGVh c2UgY29uc29saWRhdGUgc3RhdGUgc3RydWN0cyBpbnRvIG9uZSBzdHJ1Y3Qgd2l0aCBhIGZldyAK PiBzdWJzdHJ1Y3RzLAo+ICAgdGhlcmUncyB0b28gbXVjaCBzdGF0ZSByaWdodCBub3cuCj4gLSBQ bGVhc2UgI2RlZmluZSBoYXJkY29kZWQgdmFsdWVzCj4gLSBJbnN0ZWFkIG9mIHNwcmlua2xpbmcg d21iKCkgZXZlcnl3aGVyZSwgdXNlIHJlYWRsL3dyaXRlbCBpbnN0ZWFkIG9mIAo+ICpfcmVsYXhl ZAo+IC0gVGhlcmUgYXJlIGEgYnVuY2ggb2YgcmFjZXMgdGhhdCBJIGZvdW5kLCBwbGVhc2UgYXVk aXQgdGhlIGNvZGUgYW5kIAo+IHJlbW92ZQo+ICAgcmFjZXMgd2l0aCBsb2NrcyBhcyBuZWNlc3Nh cnkKPiAtIEkgdHJpZWQgdG8gY2F0Y2ggYXMgbXVjaCBkZWFkIGNvZGUgYXMgcG9zc2libGUsIHBs ZWFzZSBhdWRpdCB0aGUgcmVzdCAKPiBmb3IKPiAgIHVudXNlZCBzdHJ1Y3RzL3ZhcmlhYmxlcy9m dW5jdGlvbnMvZXRjCj4gLSBVc2UgZHJtIGRwIGhlbHBlciBzdHJ1Y3RzIGZvciBsaW5rIHBhcmFt ZXRlciBzdG9yYWdlCj4gCj4gCj4+IFNpZ25lZC1vZmYtYnk6IENoYW5kYW4gVWRkYXJhanUgPGNo YW5kYW51QGNvZGVhdXJvcmEub3JnPgo+PiAtLS0KPj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vS2Nv bmZpZyAgICAgICAgICAgICAgICAgfCAgICA5ICsKPj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vTWFr ZWZpbGUgICAgICAgICAgICAgICAgfCAgIDE1ICstCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfaW9fdXRpbC5jIHwgIDIwNiArKysrCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5oIHwgICA0NCArCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNt L2RwL2RwX2F1eC5jICAgICAgICAgICAgIHwgIDU3MCArKysrKysrKysrCj4+ICBkcml2ZXJzL2dw dS9kcm0vbXNtL2RwL2RwX2F1eC5oICAgICAgICAgICAgIHwgICA0NCArCj4+ICBkcml2ZXJzL2dw dS9kcm0vbXNtL2RwL2RwX2NhdGFsb2cuYyAgICAgICAgIHwgMTE4OCAKPj4gKysrKysrKysrKysr KysrKysrKysKPj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5oICAgICAgICAg fCAgMTQ0ICsrKwo+PiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jdHJsLmMgICAgICAgICAg ICB8IDE0NzUgCj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysKPj4gIGRyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvZHBfY3RybC5oICAgICAgICAgICAgfCAgIDUwICsKPj4gIGRyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvZHBfZGVidWcuYyAgICAgICAgICAgfCAgNTA3ICsrKysrKysrKwo+PiAgZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9kZWJ1Zy5oICAgICAgICAgICB8ICAgODEgKysKPj4gIGRyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5jICAgICAgICAgfCAgOTc3ICsrKysrKysrKysr KysrKysrCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuaCAgICAgICAgIHwg ICA1NSArCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RybS5jICAgICAgICAgICAgIHwg IDU0MiArKysrKysrKysrCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RybS5oICAgICAg ICAgICAgIHwgICA1MiArCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5jICAg ICAgICAgIHwgIDQwMCArKysrKysrCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2V4dGNv bi5oICAgICAgICAgIHwgIDExMSArKwo+PiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9saW5r LmMgICAgICAgICAgICB8IDE1NDkgCj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwo+PiAg ZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9saW5rLmggICAgICAgICAgICB8ICAxODQgKysrKwo+ PiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5jICAgICAgICAgICB8ICA2MjQgKysr KysrKysrKysKPj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuaCAgICAgICAgICAg fCAgMTIxICsrKwo+PiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYXJzZXIuYyAgICAgICAg ICB8ICA2NzkgKysrKysrKysrKysrCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhcnNl ci5oICAgICAgICAgIHwgIDIwNSArKysrCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bv d2VyLmMgICAgICAgICAgIHwgIDU5OSArKysrKysrKysrKwo+PiAgZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9wb3dlci5oICAgICAgICAgICB8ICAgNTcgKwo+PiAgZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9yZWcuaCAgICAgICAgICAgICB8ICAzNTcgKysrKysrCj4+ICBkcml2ZXJzL2dwdS9k cm0vbXNtL21zbV9kcnYuYyAgICAgICAgICAgICAgIHwgICAgMiArCj4+ICBkcml2ZXJzL2dwdS9k cm0vbXNtL21zbV9kcnYuaCAgICAgICAgICAgICAgIHwgICAyMiArCj4+ICBpbmNsdWRlL2RybS9k cm1fZHBfaGVscGVyLmggICAgICAgICAgICAgICAgIHwgICAxOSArCj4+ICAzMCBmaWxlcyBjaGFu Z2VkLCAxMDg4NyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXguYwo+PiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXV4LmgKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2NhdGFsb2cuYwo+PiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5oCj4+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jdHJsLmMKPj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0cmwuaAo+PiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGVidWcuYwo+PiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGVidWcuaAo+PiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5jCj4+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmgKPj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RybS5jCj4+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kcm0uaAo+PiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZXh0Y29uLmMKPj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5oCj4+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9saW5rLmMKPj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2xpbmsuaAo+PiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuYwo+PiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuaAo+PiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFyc2VyLmMKPj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhcnNlci5oCj4+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wb3dlci5jCj4+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wb3dlci5oCj4+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9yZWcuaAo+PiAKPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vS2NvbmZp Zwo+PiBpbmRleCA4NDNhOWQ0Li5jMzYzZjI0IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL0tjb25maWcKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9LY29uZmlnCj4+IEBA IC00OSw2ICs0OSwxNSBAQCBjb25maWcgRFJNX01TTV9IRE1JX0hEQ1AKPj4gIAloZWxwCj4+ICAJ ICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gZW5hYmxlIEhEQ1Agc3RhdGUgbWFjaGluZQo+PiAKPj4g K2NvbmZpZyBEUk1fTVNNX0RQCj4+ICsJYm9vbCAiRW5hYmxlIERQIHN1cHBvcnQgaW4gTVNNIERS TSBkcml2ZXIiCj4+ICsJZGVwZW5kcyBvbiBEUk1fTVNNCj4+ICsJZGVmYXVsdCBuCj4+ICsJaGVs cAo+PiArCSAgQ29tcGlsZSBpbiBzdXBwb3J0IGZvciBEUCBkcml2ZXIgaW4gbXNtIGRybQo+PiAr CSAgZHJpdmVyLiBEUCBleHRlcm5hbCBkaXNwbGF5IHN1cHBvcnQgaXMgZW5hYmxlZAo+PiArCSAg dGhyb3VnaCB0aGlzIGNvbmZpZyBvcHRpb24uIEl0IGNhbiBiZSBwcmltYXJ5IG9yCj4+ICsJICBz ZWNvbmRhcnkgZGlzcGxheSBvbiBkZXZpY2UuCj4gCj4gV2h5IGFyZSB0aGVzZSBsaW5lIGxlbmd0 aHMgc28gc2hvcnQ/IFlvdSBjYW4gZ28gdG8gODAgY29sdW1ucy4gUGxlYXNlIAo+IGFsc28gYWRk Cj4gYW4gZW1wdHkgbGluZSBoZXJlLgo+IAo+PiAgY29uZmlnIERSTV9NU01fRFNJCj4+ICAJYm9v bCAiRW5hYmxlIERTSSBzdXBwb3J0IGluIE1TTSBEUk0gZHJpdmVyIgo+PiAgCWRlcGVuZHMgb24g RFJNX01TTQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSAKPj4g Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCj4+IGluZGV4IDE5YWI1MjEuLjc2NWE4ZDgg MTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKPj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQo+PiBAQCAtMiw2ICsyLDcgQEAKPj4gIGNjZmxhZ3Mt eSA6PSAtSWRyaXZlcnMvZ3B1L2RybS9tc20KPj4gIGNjZmxhZ3MteSArPSAtSWRyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxCj4+ICBjY2ZsYWdzLSQoQ09ORklHX0RSTV9NU01fRFNJKSArPSAt SWRyaXZlcnMvZ3B1L2RybS9tc20vZHNpCj4+ICtjY2ZsYWdzLSQoQ09ORklHX0RSTV9NU01fRFAp ICs9IC1JZHJpdmVycy9ncHUvZHJtL21zbS9kcAo+PiAKPj4gIG1zbS15IDo9IFwKPj4gIAlhZHJl bm8vYWRyZW5vX2RldmljZS5vIFwKPj4gQEAgLTkzLDcgKzk0LDE5IEBAIG1zbS15IDo9IFwKPj4g IAltc21fc3VibWl0cXVldWUubwo+PiAKPj4gIG1zbS0kKENPTkZJR19ERUJVR19GUykgKz0gYWRy ZW5vL2E1eHhfZGVidWdmcy5vIFwKPj4gLQkJCSAgZGlzcC9kcHUxL2RwdV9kYmcubwo+PiArCQkJ ICBkaXNwL2RwdTEvZHB1X2RiZy5vIFwKPj4gKwkJCSAgZHAvZHBfZGVidWcubwo+IAo+IERvZXMg dGhpcyBjb21waWxlIGlmIENPTkZJR19ERUJVR19GUyBpcyBzZWxlY3RlZCwgYnV0IG5vdCAKPiBD T05GSUdfRFJNX01TTV9EUD8KPiAKPj4gKwo+PiArbXNtLSQoQ09ORklHX0RSTV9NU01fRFApKz0g ZHAvZHBfZXh0Y29uLm8gXAo+PiArCWRwL2RwX3BhcnNlci5vIFwKPj4gKwlkcC9kcF9wb3dlci5v IFwKPj4gKwlkcC9kcF9jYXRhbG9nLm8gXAo+PiArCWRwL2RwX2F1eC5vIFwKPj4gKwlkcC9kcF9w YW5lbC5vIFwKPj4gKwlkcC9kcF9saW5rLm8gXAo+PiArCWRwL2RwX2N0cmwubyBcCj4+ICsJZHAv ZHBfZGlzcGxheS5vIFwKPj4gKwlkcC9kcF9kcm0ubwo+IAo+IFRoZSByZXN0IG9mIHRoZSBmaWxl IGhhcyBmaWxlcyBpbiBhbHBoYWJldGljYWwgb3JkZXIsIHRoaXMgc2hvdWxkIHRvby4KPiAKPj4g Cj4+ICBtc20tJChDT05GSUdfRFJNX0ZCREVWX0VNVUxBVElPTikgKz0gbXNtX2ZiZGV2Lm8KPj4g IG1zbS0kKENPTkZJR19DT01NT05fQ0xLKSArPSBkaXNwL21kcDQvbWRwNF9sdmRzX3BsbC5vCj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5j IAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9pb191dGlsLmMKPj4gaW5k ZXggNzkwZDM5Zi4uMGY1M2ExNSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2lvX3V0aWwuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaW9fdXRpbC5jCj4+IEBAIC0xNCwxMCArMTQsMjE2IEBACj4+ICAjaW5jbHVkZSA8 bGludXgvY2xrLmg+Cj4+ICAjaW5jbHVkZSA8bGludXgvY2xrL2Nsay1jb25mLmg+Cj4+ICAjaW5j bHVkZSA8bGludXgvZXJyLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4KPj4gKyNpbmNsdWRl IDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KPj4gICNpbmNsdWRlIDxsaW51eC9kZWxheS5o Pgo+PiAKPj4gICNpbmNsdWRlICJkcHVfaW9fdXRpbC5oIgo+PiAKPj4gK3N0YXRpYyBzdHJ1Y3Qg cmVzb3VyY2UgKm1zbV9kc3NfZ2V0X3Jlc19ieW5hbWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAK Pj4gKnBkZXYsCj4+ICsJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwKPj4gKwkJCQkJICAg ICAgIGNvbnN0IGNoYXIgKm5hbWUpCj4+ICt7Cj4+ICsJc3RydWN0IHJlc291cmNlICpyZXMgPSBO VUxMOwo+PiArCj4+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCB0 eXBlLCBuYW1lKTsKPj4gKwlpZiAoIXJlcykKPj4gKwkJREVWX0VSUigiJXM6ICclcycgcmVzb3Vy Y2Ugbm90IGZvdW5kXG4iLCBfX2Z1bmNfXywgbmFtZSk7Cj4+ICsKPj4gKwlyZXR1cm4gcmVzOwo+ PiArfSAvKiBtc21fZHNzX2dldF9yZXNfYnluYW1lICovCj4gCj4gV2h5IGRvbid0IHlvdSBqdXN0 IGNhbGwgcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZSBkaXJlY3RseT8KPiAKPj4gKwo+PiAr aW50IG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwK Pj4gKwkJCSAgIHN0cnVjdCBkc3NfaW9fZGF0YSAqaW9fZGF0YSwgY29uc3QgY2hhciAqbmFtZSkK Pj4gK3sKPj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IE5VTEw7Cj4+ICsKPj4gKwlpZiAoIXBk ZXYgfHwgIWlvX2RhdGEpIHsKPiAKPiBHaXZlbiB0aGF0IHdlJ3ZlIGJlZW4gYWdncmVzc2l2ZWx5 IHRyeWluZyB0byBnZXQgcmlkIG9mIHRoZXNlIAo+IHN1cGVyZmx1b3VzCj4gY2hlY2tzLCBJJ20g bm90IHRocmlsbGVkIHRoYXQgdGhleSdyZSBiZWluZyByZS1pbnRyb2R1Y2VkLiBDYW4geW91IAo+ IHBsZWFzZSBnbwo+IHRocm91Z2ggdGhlIHBhdGNoIGFuZCByZW1vdmUgYWxsIG9mIHRoZSB1bm5l Y2Vzc2FyeSBjaGVja3M/Cj4gCj4+ICsJCURFVl9FUlIoIiVwUy0+JXM6IGludmFsaWQgaW5wdXRc biIsCj4+ICsJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIF9fZnVuY19fKTsKPj4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJcmVzID0gbXNtX2Rzc19nZXRfcmVzX2J5 bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgbmFtZSk7Cj4+ICsJaWYgKCFyZXMpIHsKPj4gKwkJ REVWX0VSUigiJXBTLT4lczogJyVzJyBtc21fZHNzX2dldF9yZXNfYnluYW1lIGZhaWxlZFxuIiwK Pj4gKwkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgX19mdW5jX18sIG5hbWUpOwo+IAo+ IFlldCBhbm90aGVyIGVycm9yIGZvcm1hdCA6KSBDb3VsZCB3ZSBwbGVhc2Ugc3RpY2sgd2l0aCBv bmUgb2YgCj4gRFBVX0VSUk9SLAo+IERSTV9FUlJPUiwgb3IgRFJNX0RFVl9FUlJPUj8KPiAKPj4g KwkJcmV0dXJuIC1FTk9ERVY7Cj4+ICsJfQo+PiArCj4+ICsJaW9fZGF0YS0+bGVuID0gKHUzMily ZXNvdXJjZV9zaXplKHJlcyk7Cj4+ICsJaW9fZGF0YS0+YmFzZSA9IGlvcmVtYXAocmVzLT5zdGFy dCwgaW9fZGF0YS0+bGVuKTsKPj4gKwlpZiAoIWlvX2RhdGEtPmJhc2UpIHsKPj4gKwkJREVWX0VS UigiJXBTLT4lczogJyVzJyBpb3JlbWFwIGZhaWxlZFxuIiwKPj4gKwkJCV9fYnVpbHRpbl9yZXR1 cm5fYWRkcmVzcygwKSwgX19mdW5jX18sIG5hbWUpOwo+PiArCQlyZXR1cm4gLUVJTzsKPj4gKwl9 Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30gLyogbXNtX2Rzc19pb3JlbWFwX2J5bmFtZSAqLwo+ PiArCj4+ICt2b2lkIG1zbV9kc3NfaW91bm1hcChzdHJ1Y3QgZHNzX2lvX2RhdGEgKmlvX2RhdGEp Cj4+ICt7Cj4+ICsJaWYgKCFpb19kYXRhKSB7Cj4+ICsJCURFVl9FUlIoIiVwUy0+JXM6IGludmFs aWQgaW5wdXRcbiIsCj4+ICsJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIF9fZnVuY19f KTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWlmIChpb19kYXRhLT5iYXNlKSB7Cj4+ ICsJCWlvdW5tYXAoaW9fZGF0YS0+YmFzZSk7Cj4+ICsJCWlvX2RhdGEtPmJhc2UgPSBOVUxMOwo+ PiArCX0KPj4gKwlpb19kYXRhLT5sZW4gPSAwOwo+PiArfSAvKiBtc21fZHNzX2lvdW5tYXAgKi8K PiAKPiBUaGVzZSB0d28gZnVuY3Rpb25zIGFyZSBvbmx5IHVzZWQgaW4gZHBfcGFyc2VyLmMsIHdo eSBub3QganVzdCBtYWtlIAo+IHRoZW0gc3RhdGljCj4gZnVuY3Rpb25zIHRoZXJlPwo+IAo+PiAr Cj4+ICtpbnQgbXNtX2Rzc19jb25maWdfdnJlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBk c3NfdnJlZyAqaW5fdnJlZywKPj4gKwkJCWludCBudW1fdnJlZywgaW50IGNvbmZpZykKPiAKPiBU aGlzIHNob3VsZCBiZSAyIGZ1bmN0aW9ucywgb25lIGZvciBpbml0aWFsaXphdGlvbiBhbmQgb25l IGZvciAKPiBkZWluaXRpYWxpemluZywKPiB0aGUgMiBwYXRocyBkb24ndCBzaGFyZSBhbnkgY29k ZSwgc28gdGhlcmUncyBubyBuZWVkIHRvIGNvbWJpbmUgdGhlbS4KPiAKPj4gK3sKPj4gKwlpbnQg aSA9IDAsIHJjID0gMDsKPj4gKwlzdHJ1Y3QgZHNzX3ZyZWcgKmN1cnJfdnJlZyA9IE5VTEw7Cj4+ ICsJZW51bSBkc3NfdnJlZ190eXBlIHR5cGU7Cj4+ICsKPj4gKwlpZiAoIWluX3ZyZWcgfHwgIW51 bV92cmVnKQo+PiArCQlyZXR1cm4gcmM7Cj4+ICsKPj4gKwlpZiAoY29uZmlnKSB7Cj4+ICsJCWZv ciAoaSA9IDA7IGkgPCBudW1fdnJlZzsgaSsrKSB7Cj4+ICsJCQljdXJyX3ZyZWcgPSAmaW5fdnJl Z1tpXTsKPj4gKwkJCWN1cnJfdnJlZy0+dnJlZyA9IHJlZ3VsYXRvcl9nZXQoZGV2LAo+IAo+IFVz ZSBkZXZtXyogcGxlYXNlCj4gCj4+ICsJCQkJY3Vycl92cmVnLT52cmVnX25hbWUpOwo+PiArCQkJ cmMgPSBQVFJfUkVUKGN1cnJfdnJlZy0+dnJlZyk7Cj4gCj4gUFRSX1JFVCBpcyBkZXByZWNhdGVk LiBUaGUgcGF0dGVybiBmb3IgdGhpcyBpcyB1c3VhbGx5Ogo+IAo+ICAgICAgICAgICAgICAgICAg ICAgICAgIHB0ciA9IHNvbWVfZnVuYygpOwo+ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJ U19FUlJfT1JfTlVMTChwdHIpKSB7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu Li4KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gUFRSX0VSUihwdHIpOwo+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsX2xhYmVsOgo+ICAgICAg ICAgICAgICAgICAgICAgICAgIH0KPiAKPj4gKwkJCWlmIChyYykgewo+PiArCQkJCURFVl9FUlIo IiVwUy0+JXM6ICVzIGdldCBmYWlsZWQuIHJjPSVkXG4iLAo+PiArCQkJCQkgX19idWlsdGluX3Jl dHVybl9hZGRyZXNzKDApLCBfX2Z1bmNfXywKPj4gKwkJCQkJIGN1cnJfdnJlZy0+dnJlZ19uYW1l LCByYyk7Cj4+ICsJCQkJY3Vycl92cmVnLT52cmVnID0gTlVMTDsKPj4gKwkJCQlnb3RvIHZyZWdf Z2V0X2ZhaWw7Cj4+ICsJCQl9Cj4+ICsJCQl0eXBlID0gKHJlZ3VsYXRvcl9jb3VudF92b2x0YWdl cyhjdXJyX3ZyZWctPnZyZWcpID4gMCkKPj4gKwkJCQkJPyBEU1NfUkVHX0xETyA6IERTU19SRUdf VlM7Cj4+ICsJCQlpZiAodHlwZSA9PSBEU1NfUkVHX0xETykgewo+PiArCQkJCXJjID0gcmVndWxh dG9yX3NldF92b2x0YWdlKAo+PiArCQkJCQljdXJyX3ZyZWctPnZyZWcsCj4+ICsJCQkJCWN1cnJf dnJlZy0+bWluX3ZvbHRhZ2UsCj4+ICsJCQkJCWN1cnJfdnJlZy0+bWF4X3ZvbHRhZ2UpOwo+PiAr CQkJCWlmIChyYyA8IDApIHsKPj4gKwkJCQkJREVWX0VSUigiJXBTLT4lczogJXMgc2V0IHZsdGcg ZmFpbFxuIiwKPj4gKwkJCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwKPj4gKwkJCQkJ CV9fZnVuY19fLAo+PiArCQkJCQkJY3Vycl92cmVnLT52cmVnX25hbWUpOwo+PiArCQkJCQlnb3Rv IHZyZWdfc2V0X3ZvbHRhZ2VfZmFpbDsKPj4gKwkJCQl9Cj4+ICsJCQl9Cj4+ICsJCX0KPj4gKwl9 IGVsc2Ugewo+PiArCQlmb3IgKGkgPSBudW1fdnJlZy0xOyBpID49IDA7IGktLSkgewo+PiArCQkJ Y3Vycl92cmVnID0gJmluX3ZyZWdbaV07Cj4+ICsJCQlpZiAoY3Vycl92cmVnLT52cmVnKSB7Cj4+ ICsJCQkJdHlwZSA9IChyZWd1bGF0b3JfY291bnRfdm9sdGFnZXMoCj4+ICsJCQkJCWN1cnJfdnJl Zy0+dnJlZykgPiAwKQo+PiArCQkJCQk/IERTU19SRUdfTERPIDogRFNTX1JFR19WUzsKPj4gKwkJ CQlpZiAodHlwZSA9PSBEU1NfUkVHX0xETykgewo+PiArCQkJCQlyZWd1bGF0b3Jfc2V0X3ZvbHRh Z2UoY3Vycl92cmVnLT52cmVnLAo+PiArCQkJCQkJMCwgY3Vycl92cmVnLT5tYXhfdm9sdGFnZSk7 Cj4+ICsJCQkJfQo+PiArCQkJCXJlZ3VsYXRvcl9wdXQoY3Vycl92cmVnLT52cmVnKTsKPj4gKwkJ CQljdXJyX3ZyZWctPnZyZWcgPSBOVUxMOwo+PiArCQkJfQo+PiArCQl9Cj4+ICsJfQo+PiArCXJl dHVybiAwOwo+PiArCj4+ICt2cmVnX3VuY29uZmlnOgo+PiAraWYgKHR5cGUgPT0gRFNTX1JFR19M RE8pCj4+ICsJcmVndWxhdG9yX3NldF9sb2FkKGN1cnJfdnJlZy0+dnJlZywgMCk7Cj4+ICsKPj4g K3ZyZWdfc2V0X3ZvbHRhZ2VfZmFpbDoKPj4gKwlyZWd1bGF0b3JfcHV0KGN1cnJfdnJlZy0+dnJl Zyk7Cj4+ICsJY3Vycl92cmVnLT52cmVnID0gTlVMTDsKPj4gKwo+PiArdnJlZ19nZXRfZmFpbDoK Pj4gKwlmb3IgKGktLTsgaSA+PSAwOyBpLS0pIHsKPj4gKwkJY3Vycl92cmVnID0gJmluX3ZyZWdb aV07Cj4+ICsJCXR5cGUgPSAocmVndWxhdG9yX2NvdW50X3ZvbHRhZ2VzKGN1cnJfdnJlZy0+dnJl ZykgPiAwKQo+PiArCQkJPyBEU1NfUkVHX0xETyA6IERTU19SRUdfVlM7Cj4+ICsJCWdvdG8gdnJl Z191bmNvbmZpZzsKPj4gKwl9Cj4+ICsJcmV0dXJuIHJjOwo+PiArfSAvKiBtc21fZHNzX2NvbmZp Z192cmVnICovCj4+ICsKPj4gK2ludCBtc21fZHNzX2VuYWJsZV92cmVnKHN0cnVjdCBkc3NfdnJl ZyAqaW5fdnJlZywgaW50IG51bV92cmVnLCBpbnQgCj4+IGVuYWJsZSkKPj4gK3sKPj4gKwlpbnQg aSA9IDAsIHJjID0gMDsKPj4gKwlib29sIG5lZWRfc2xlZXA7Cj4+ICsKPj4gKwlpZiAoZW5hYmxl KSB7Cj4+ICsJCWZvciAoaSA9IDA7IGkgPCBudW1fdnJlZzsgaSsrKSB7Cj4+ICsJCQlyYyA9IFBU Ul9SRVQoaW5fdnJlZ1tpXS52cmVnKTsKPj4gKwkJCWlmIChyYykgewo+PiArCQkJCURFVl9FUlIo IiVwUy0+JXM6ICVzIHJlZ3VsYXRvciBlcnJvci4gcmM9JWRcbiIsCj4+ICsJCQkJCV9fYnVpbHRp bl9yZXR1cm5fYWRkcmVzcygwKSwgX19mdW5jX18sCj4+ICsJCQkJCWluX3ZyZWdbaV0udnJlZ19u YW1lLCByYyk7Cj4+ICsJCQkJZ290byB2cmVnX3NldF9vcHRfbW9kZV9mYWlsOwo+PiArCQkJfQo+ PiArCQkJbmVlZF9zbGVlcCA9ICFyZWd1bGF0b3JfaXNfZW5hYmxlZChpbl92cmVnW2ldLnZyZWcp Owo+PiArCQkJaWYgKGluX3ZyZWdbaV0ucHJlX29uX3NsZWVwICYmIG5lZWRfc2xlZXApCj4+ICsJ CQkJdXNsZWVwX3JhbmdlKGluX3ZyZWdbaV0ucHJlX29uX3NsZWVwICogMTAwMCwKPj4gKwkJCQkJ aW5fdnJlZ1tpXS5wcmVfb25fc2xlZXAgKiAxMDAwKTsKPj4gKwkJCXJjID0gcmVndWxhdG9yX3Nl dF9sb2FkKGluX3ZyZWdbaV0udnJlZywKPj4gKwkJCQlpbl92cmVnW2ldLmVuYWJsZV9sb2FkKTsK Pj4gKwkJCWlmIChyYyA8IDApIHsKPj4gKwkJCQlERVZfRVJSKCIlcFMtPiVzOiAlcyBzZXQgb3B0 IG0gZmFpbFxuIiwKPj4gKwkJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCBfX2Z1bmNf XywKPj4gKwkJCQkJaW5fdnJlZ1tpXS52cmVnX25hbWUpOwo+PiArCQkJCWdvdG8gdnJlZ19zZXRf b3B0X21vZGVfZmFpbDsKPj4gKwkJCX0KPj4gKwkJCXJjID0gcmVndWxhdG9yX2VuYWJsZShpbl92 cmVnW2ldLnZyZWcpOwo+PiArCQkJaWYgKGluX3ZyZWdbaV0ucG9zdF9vbl9zbGVlcCAmJiBuZWVk X3NsZWVwKQo+PiArCQkJCXVzbGVlcF9yYW5nZShpbl92cmVnW2ldLnBvc3Rfb25fc2xlZXAgKiAx MDAwLAo+PiArCQkJCQlpbl92cmVnW2ldLnBvc3Rfb25fc2xlZXAgKiAxMDAwKTsKPj4gKwkJCWlm IChyYyA8IDApIHsKPj4gKwkJCQlERVZfRVJSKCIlcFMtPiVzOiAlcyBlbmFibGUgZmFpbGVkXG4i LAo+PiArCQkJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIF9fZnVuY19fLAo+PiArCQkJ CQlpbl92cmVnW2ldLnZyZWdfbmFtZSk7Cj4+ICsJCQkJZ290byBkaXNhYmxlX3ZyZWc7Cj4+ICsJ CQl9Cj4+ICsJCX0KPj4gKwl9IGVsc2Ugewo+PiArCQlmb3IgKGkgPSBudW1fdnJlZy0xOyBpID49 IDA7IGktLSkgewo+PiArCQkJaWYgKGluX3ZyZWdbaV0ucHJlX29mZl9zbGVlcCkKPj4gKwkJCQl1 c2xlZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wcmVfb2ZmX3NsZWVwICogMTAwMCwKPj4gKwkJCQkJaW5f dnJlZ1tpXS5wcmVfb2ZmX3NsZWVwICogMTAwMCk7Cj4+ICsJCQlyZWd1bGF0b3Jfc2V0X2xvYWQo aW5fdnJlZ1tpXS52cmVnLAo+PiArCQkJCWluX3ZyZWdbaV0uZGlzYWJsZV9sb2FkKTsKPj4gKwkJ CXJlZ3VsYXRvcl9kaXNhYmxlKGluX3ZyZWdbaV0udnJlZyk7Cj4+ICsJCQlpZiAoaW5fdnJlZ1tp XS5wb3N0X29mZl9zbGVlcCkKPj4gKwkJCQl1c2xlZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wb3N0X29m Zl9zbGVlcCAqIDEwMDAsCj4+ICsJCQkJCWluX3ZyZWdbaV0ucG9zdF9vZmZfc2xlZXAgKiAxMDAw KTsKPj4gKwkJfQo+PiArCX0KPj4gKwlyZXR1cm4gcmM7Cj4+ICsKPj4gK2Rpc2FibGVfdnJlZzoK Pj4gKwlyZWd1bGF0b3Jfc2V0X2xvYWQoaW5fdnJlZ1tpXS52cmVnLCBpbl92cmVnW2ldLmRpc2Fi bGVfbG9hZCk7Cj4+ICsKPj4gK3ZyZWdfc2V0X29wdF9tb2RlX2ZhaWw6Cj4+ICsJZm9yIChpLS07 IGkgPj0gMDsgaS0tKSB7Cj4+ICsJCWlmIChpbl92cmVnW2ldLnByZV9vZmZfc2xlZXApCj4+ICsJ CQl1c2xlZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wcmVfb2ZmX3NsZWVwICogMTAwMCwKPj4gKwkJCQlp bl92cmVnW2ldLnByZV9vZmZfc2xlZXAgKiAxMDAwKTsKPj4gKwkJcmVndWxhdG9yX3NldF9sb2Fk KGluX3ZyZWdbaV0udnJlZywKPj4gKwkJCWluX3ZyZWdbaV0uZGlzYWJsZV9sb2FkKTsKPj4gKwkJ cmVndWxhdG9yX2Rpc2FibGUoaW5fdnJlZ1tpXS52cmVnKTsKPj4gKwkJaWYgKGluX3ZyZWdbaV0u cG9zdF9vZmZfc2xlZXApCj4+ICsJCQl1c2xlZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wb3N0X29mZl9z bGVlcCAqIDEwMDAsCj4+ICsJCQkJaW5fdnJlZ1tpXS5wb3N0X29mZl9zbGVlcCAqIDEwMDApOwo+ PiArCX0KPj4gKwo+PiArCXJldHVybiByYzsKPj4gK30gLyogbXNtX2Rzc19lbmFibGVfdnJlZyAq Lwo+PiArCj4gCj4gU2FtZSBxdWVzdGlvbiBoZXJlLCBidXQgd2l0aCBkcF9wb3dlci4KPiAKPj4g Kwo+PiAgdm9pZCBtc21fZHNzX3B1dF9jbGsoc3RydWN0IGRzc19jbGsgKmNsa19hcnJ5LCBpbnQg bnVtX2NsaykKPj4gIHsKPj4gIAlpbnQgaTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9pb191dGlsLmggCj4+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2lvX3V0aWwuaAo+PiBpbmRleCBiYzA3MzgxLi41MjRiMzk0IDEwMDY0NAo+ PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5oCj4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9pb191dGlsLmgKPj4gQEAgLTE1 LDYgKzE1LDcgQEAKPj4gCj4+ICAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgo+PiAgI2luY2x1ZGUg PGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9j b25zdW1lci5oPgo+PiAgI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4+IAo+PiAgI2RlZmluZSBE RVZfREJHKGZtdCwgYXJncy4uLikgICBwcl9kZWJ1ZyhmbXQsICMjYXJncykKPj4gQEAgLTIyLDYg KzIzLDM5IEBACj4+ICAjZGVmaW5lIERFVl9XQVJOKGZtdCwgYXJncy4uLikgIHByX3dhcm4oZm10 LCAjI2FyZ3MpCj4+ICAjZGVmaW5lIERFVl9FUlIoZm10LCBhcmdzLi4uKSAgIHByX2VycihmbXQs ICMjYXJncykKPj4gCj4+ICtzdHJ1Y3QgZHNzX2lvX2RhdGEgewo+PiArCXUzMiBsZW47Cj4+ICsJ dm9pZCBfX2lvbWVtICpiYXNlOwo+PiArfTsKPiAKPiBsZW4gaXNuJ3QgdXNlZCBhbnl3aGVyZSwg c28gdGhpcyBzdHJ1Y3QgY2FuIGdvIGF3YXkuIElmIHRoZSBzdHJ1Y3QgZ29lcyAKPiBhd2F5LAo+ IHlvdSBjYW4gcmVhbGx5IHNpbXBsaWZ5IChvciBlbGltaW5hdGUgbXNtX2Rzc19pb3JlbWFwX2J5 bmFtZSgpKQo+IAo+PiArCj4+ICsvKgo+PiArdm9pZCBkc3NfcmVnX3coc3RydWN0IGRzc19pb19k YXRhICppbywgdTMyIG9mZnNldCwgdTMyIHZhbHVlLCB1MzIgCj4+IGRlYnVnKTsKPj4gK3UzMiBk c3NfcmVnX3Ioc3RydWN0IGRzc19pb19kYXRhICppbywgdTMyIG9mZnNldCwgdTMyIGRlYnVnKTsK Pj4gK3ZvaWQgZHNzX3JlZ19kdW1wKHZvaWQgX19pb21lbSAqYmFzZSwgdTMyIGxlbiwgY29uc3Qg Y2hhciAqcHJlZml4LCAKPj4gdTMyIGRlYnVnKTsKPj4gKwo+PiArI2RlZmluZSBEU1NfUkVHX1df TkQoaW8sIG9mZnNldCwgdmFsKSAgZHNzX3JlZ193KGlvLCBvZmZzZXQsIHZhbCwgCj4+IGZhbHNl KQo+PiArI2RlZmluZSBEU1NfUkVHX1coaW8sIG9mZnNldCwgdmFsKSAgICAgZHNzX3JlZ193KGlv LCBvZmZzZXQsIHZhbCwgCj4+IHRydWUpCj4+ICsjZGVmaW5lIERTU19SRUdfUl9ORChpbywgb2Zm c2V0KSAgICAgICBkc3NfcmVnX3IoaW8sIG9mZnNldCwgZmFsc2UpCj4+ICsjZGVmaW5lIERTU19S RUdfUihpbywgb2Zmc2V0KSAgICAgICAgICBkc3NfcmVnX3IoaW8sIG9mZnNldCwgdHJ1ZSkKPj4g KyovCj4gCj4gTm9uZSBvZiB0aGUgZHNzX3JlZ18qL0RTU19SRUdfKiBmdW5jdGlvbnMvbWFjcm9z IGFyZSB1c2VkLiBQbGVhc2UgCj4gcmVtb3ZlLgo+IAo+IAo+PiArZW51bSBkc3NfdnJlZ190eXBl IHsKPj4gKwlEU1NfUkVHX0xETywKPj4gKwlEU1NfUkVHX1ZTLAo+PiArfTsKPiAKPiBUaGVzZSBh cmUgb25seSB1c2VkIGluIG1zbV9kc3NfY29uZmlnX3ZyZWcoKS4gUGxlYXNlIHJlbW92ZS4KPiAK Pj4gKwo+PiArc3RydWN0IGRzc192cmVnIHsKPj4gKwlzdHJ1Y3QgcmVndWxhdG9yICp2cmVnOyAv KiB2cmVnIGhhbmRsZSAqLwo+PiArCWNoYXIgdnJlZ19uYW1lWzMyXTsKPj4gKwlpbnQgbWluX3Zv bHRhZ2U7Cj4+ICsJaW50IG1heF92b2x0YWdlOwo+IAo+IENhbid0IHdlIGRlZHVjZSB0aGVzZSBm cm9tIHRoZSByZWd1bGF0b3Igc3Vic3lzdGVtIHdpdGgKPiByZWd1bGF0b3JfbGlzdF92b2x0YWdl KCk/Cj4gCj4+ICsJaW50IGVuYWJsZV9sb2FkOwo+PiArCWludCBkaXNhYmxlX2xvYWQ7Cj4gCj4g VGhlc2UgYXJlIHJlYWxseSBhIGZ1bmN0aW9uIG9mIHRoZSBkcCBkZXZpY2UgdGhhbiB0aGUgcmVn dWxhdG9yLgo+IAo+PiArCWludCBwcmVfb25fc2xlZXA7Cj4+ICsJaW50IHBvc3Rfb25fc2xlZXA7 Cj4+ICsJaW50IHByZV9vZmZfc2xlZXA7Cj4+ICsJaW50IHBvc3Rfb2ZmX3NsZWVwOwo+IAo+IE5v bmUgb2YgdGhlc2Ugc2xlZXAgdmFsdWVzIGFyZSBzZXQ/IEFsc28sIHNob3VsZG4ndCB0aGVzZSBj b25zdHJhaW50cyAKPiB1c3VhbGx5Cj4gZXhwcmVzc2VkL2FjdGVkIHVwb24gaW4gdGhlIHJlZ3Vs YXRvciBkcml2ZXI/Cj4gCj4+ICt9Owo+IAo+IFNvIGlmIHdlIGNhbiByZW1vdmUgYWxsIG9mIHRo ZSBleHRyYSBnb29wIGFyb3VuZCB0aGUgcmVndWxhdG9yLCB0aGVuIHdlIAo+IGNhbiBnZXQKPiBy aWQgb2YgZHNzX3ZyZWcuCj4gCj4+ICsKPj4gIHN0cnVjdCBkc3NfZ3BpbyB7Cj4+ICAJdW5zaWdu ZWQgaW50IGdwaW87Cj4+ICAJdW5zaWduZWQgaW50IHZhbHVlOwo+PiBAQCAtNDIsMTIgKzc2LDIy IEBAIHN0cnVjdCBkc3NfY2xrIHsKPj4gIH07Cj4+IAo+PiAgc3RydWN0IGRzc19tb2R1bGVfcG93 ZXIgewo+PiArCXVuc2lnbmVkIGludCBudW1fdnJlZzsKPj4gKwlzdHJ1Y3QgZHNzX3ZyZWcgKnZy ZWdfY29uZmlnOwo+PiAgCXVuc2lnbmVkIGludCBudW1fZ3BpbzsKPj4gIAlzdHJ1Y3QgZHNzX2dw aW8gKmdwaW9fY29uZmlnOwo+PiAgCXVuc2lnbmVkIGludCBudW1fY2xrOwo+PiAgCXN0cnVjdCBk c3NfY2xrICpjbGtfY29uZmlnOwo+PiAgfTsKPj4gCj4+ICtpbnQgbXNtX2Rzc19pb3JlbWFwX2J5 bmFtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+PiArCQkJICAgc3RydWN0IGRzc19p b19kYXRhICppb19kYXRhLCBjb25zdCBjaGFyICpuYW1lKTsKPj4gK3ZvaWQgbXNtX2Rzc19pb3Vu bWFwKHN0cnVjdCBkc3NfaW9fZGF0YSAqaW9fZGF0YSk7Cj4+ICsKPj4gK2ludCBtc21fZHNzX2Nv bmZpZ192cmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRzc192cmVnICppbl92cmVnLAo+ PiArCQkJaW50IG51bV92cmVnLCBpbnQgY29uZmlnKTsKPj4gK2ludCBtc21fZHNzX2VuYWJsZV92 cmVnKHN0cnVjdCBkc3NfdnJlZyAqaW5fdnJlZywgaW50IG51bV92cmVnLAlpbnQgCj4+IGVuYWJs ZSk7Cj4+ICsKPj4gIGludCBtc21fZHNzX2dldF9jbGsoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QgZHNzX2NsayAqY2xrX2FycnksIGludCAKPj4gbnVtX2Nsayk7Cj4+ICB2b2lkIG1zbV9kc3Nf cHV0X2NsayhzdHJ1Y3QgZHNzX2NsayAqY2xrX2FycnksIGludCBudW1fY2xrKTsKPiAKPiAKPiBX aHkgYXJlIHRoZXNlIG1zbV9kc3MqIGZ1bmN0aW9ucyBpbiBkcHVfaW9fdXRpbC5oPwo+IAo+PiAg aW50IG1zbV9kc3NfY2xrX3NldF9yYXRlKHN0cnVjdCBkc3NfY2xrICpjbGtfYXJyeSwgaW50IG51 bV9jbGspOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXguYyAK Pj4gYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2F1eC5jCj4+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjAwYjgyYzIKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2F1eC5jCj4+IEBAIC0wLDAgKzEsNTcwIEBACj4gCj4g L3NuaXAKPiAKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXV4Lmgg Cj4+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXguaAo+PiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+PiBpbmRleCAwMDAwMDAwLi4wYzMwMGVkCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXguaAo+IAo+IC9zbmlwCj4gCj4gSSBkaWRuJ3Qg cmVhbGx5IHJldmlldyB0aGUgZHBfYXV4LiogZmlsZXMgYXMtaXMuIFBsZWFzZSBjb252ZXJ0IHRv IAo+IHVzaW5nCj4gZHJtX2RwX2F1eCBhbmQgSSdsbCB0YWtlIGFub3RoZXIgbG9vay4KPiAKClBs ZWFzZSBjb3JyZWN0IG1lIGlmIEkgYW0gd3JvbmcuIExvb2tzIGxpa2UgeW91IGFyZSBzdWdnZXN0 aW5nIHRvIHVzZSAKbW9zdCBvZiB0aGUgZHJtX2RwX2F1eCBzdHJ1Y3QgdmFyaWFibGUKaW5zdGVh ZCBvZiB3aGF0IHdlIGhhdmUgZGVmaW5lZCBsb2NhbGx5LgoKPiAKPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfY2F0YWxvZy5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAw MDAuLjU4MTg2MTIKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2RwL2RwX2NhdGFsb2cuYwo+PiBAQCAtMCwwICsxLDExODggQEAKPj4gKy8qCj4+ICsgKiBDb3B5 cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgCj4+ IHJlc2VydmVkLgo+PiArICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCj4+IG1vZGlmeQo+PiArICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5k Cj4+ICsgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ICsgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl Cj4+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiAr ICoKPj4gKyAqLwo+PiArCj4+ICsjZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtLWRwXSAlczogIiBm bXQsIF9fZnVuY19fCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+PiArI2luY2x1 ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+Cj4+ICsKPj4gKyNpbmNsdWRlICJkcF9jYXRhbG9nLmgi Cj4+ICsjaW5jbHVkZSAiZHBfcmVnLmgiCj4+ICsKPj4gKyNkZWZpbmUgRFBfR0VUX01TQih4KQko eCA+PiA4KQo+PiArI2RlZmluZSBEUF9HRVRfTFNCKHgpCSh4ICYgMHhmZikKPiAKPiBUaGVzZSBh cmVuJ3QgdXNlZCBhbnl3aGVyZQo+IAo+PiArCj4+ICsjZGVmaW5lIGRwX3JlYWQob2Zmc2V0KSBy ZWFkbF9yZWxheGVkKChvZmZzZXQpKQo+PiArI2RlZmluZSBkcF93cml0ZShvZmZzZXQsIGRhdGEp IHdyaXRlbF9yZWxheGVkKChkYXRhKSwgKG9mZnNldCkpCj4gCj4gVGhlc2UgbWFjcm9zIGFyZW4n dCB1c2VmdWwuIEkgdGhpbmsgeW91J2QgYmUgbXVjaCBiZXR0ZXIgaGF2aW5nIGEgCj4gcmVhZF8v d3JpdGVfCj4gZm9yIHRoZSBkaWZmZXJlbnQgaW8gdHlwZXMsIGllOgo+IAo+IHN0YXRpYyBpbmxp bmUgdTMyIGRwX3JlYWRfYXVkaW8oc3RydWN0IGRwX2NhdGFsb2cgKmNhdGFsb2csIHUzMiBvZmZz ZXQpCj4gewo+ICAgICAgICAgcmV0dXJuIHJlYWRsX3JlbGF4ZWQoY2F0YWxvZy0+aW8tPmRwX2xp bmsuYmFzZSArIG9mZnNldCk7Cj4gfQo+IAo+IFRoZW4geW91IGNhbiByZW1vdmUgYSB0b24gb2Yg Ym9pbGVycGxhdGUgY29kZSBiZWxvdyBnZXR0aW5nIGJhc2U7Cj4gCj4+ICsKPj4gKyNkZWZpbmUg ZHBfY2F0YWxvZ19nZXRfcHJpdih4KSB7IFwKPiAKPiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkcF9j YXRhbG9nX3ByaXZhdGUgKmRwX2NhdGFsb2dfZ2V0X3ByaXYoLi4uKQo+IHsKPiAgICAgICAgIC4u Lgo+IH0KPiAKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZyAqZHBfY2F0YWxvZzsgXAo+PiArCWRwX2Nh dGFsb2cgPSBjb250YWluZXJfb2YoeCwgc3RydWN0IGRwX2NhdGFsb2csIHgpOyBcCj4+ICsJY2F0 YWxvZyA9IGNvbnRhaW5lcl9vZihkcF9jYXRhbG9nLCBzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRl LCBcCj4+ICsJCQkJZHBfY2F0YWxvZyk7IFwKPj4gK30KPj4gKwo+PiArI2RlZmluZSBEUF9JTlRF UlJVUFRfU1RBVFVTMSBcCj4+ICsJKERQX0lOVFJfQVVYX0kyQ19ET05FfCBcCj4+ICsJRFBfSU5U Ul9XUk9OR19BRERSIHwgRFBfSU5UUl9USU1FT1VUIHwgXAo+PiArCURQX0lOVFJfTkFDS19ERUZF UiB8IERQX0lOVFJfV1JPTkdfREFUQV9DTlQgfCBcCj4+ICsJRFBfSU5UUl9JMkNfTkFDSyB8IERQ X0lOVFJfSTJDX0RFRkVSIHwgXAo+PiArCURQX0lOVFJfUExMX1VOTE9DS0VEIHwgRFBfSU5UUl9B VVhfRVJST1IpCj4+ICsKPj4gKyNkZWZpbmUgRFBfSU5UUl9NQVNLMQkJKERQX0lOVEVSUlVQVF9T VEFUVVMxIDw8IDIpCj4+ICsKPj4gKyNkZWZpbmUgRFBfSU5URVJSVVBUX1NUQVRVUzIgXAo+PiAr CShEUF9JTlRSX1JFQURZX0ZPUl9WSURFTyB8IERQX0lOVFJfSURMRV9QQVRURVJOX1NFTlQgfCBc Cj4+ICsJRFBfSU5UUl9GUkFNRV9FTkQgfCBEUF9JTlRSX0NSQ19VUERBVEVEKQo+PiArCj4+ICsj ZGVmaW5lIERQX0lOVFJfTUFTSzIJCShEUF9JTlRFUlJVUFRfU1RBVFVTMiA8PCAyKQo+IAo+IENh biB5b3UgcGxlYXNlIHJlbmFtZSB0aGVzZSB0byBiZSBjb25zaXN0ZW50IHdpdGggZWFjaCBvdGhl cj8KPiBEUF9JTlRFUlJVUFRfU1RBVFVTMl9NQVNLIHBlcmhhcHM/Cj4gCj4+ICsKPj4gK3N0YXRp YyB1OCBjb25zdCB2bV9wcmVfZW1waGFzaXNbNF1bNF0gPSB7Cj4+ICsJezB4MDAsIDB4MEIsIDB4 MTIsIDB4RkZ9LCAgICAgICAvKiBwZTAsIDAgZGIgKi8KPj4gKwl7MHgwMCwgMHgwQSwgMHgxMiwg MHhGRn0sICAgICAgIC8qIHBlMSwgMy41IGRiICovCj4+ICsJezB4MDAsIDB4MEMsIDB4RkYsIDB4 RkZ9LCAgICAgICAvKiBwZTIsIDYuMCBkYiAqLwo+PiArCXsweEZGLCAweEZGLCAweEZGLCAweEZG fSAgICAgICAgLyogcGUzLCA5LjUgZGIgKi8KPj4gK307Cj4+ICsKPj4gKy8qIHZvbHRhZ2Ugc3dp bmcsIDAuMnYgYW5kIDEuMHYgYXJlIG5vdCBzdXBwb3J0ICovCj4+ICtzdGF0aWMgdTggY29uc3Qg dm1fdm9sdGFnZV9zd2luZ1s0XVs0XSA9IHsKPj4gKwl7MHgwNywgMHgwRiwgMHgxNCwgMHhGRn0s IC8qIHN3MCwgMC40diAgKi8KPj4gKwl7MHgxMSwgMHgxRCwgMHgxRiwgMHhGRn0sIC8qIHN3MSwg MC42IHYgKi8KPj4gKwl7MHgxOCwgMHgxRiwgMHhGRiwgMHhGRn0sIC8qIHN3MSwgMC44IHYgKi8K Pj4gKwl7MHhGRiwgMHhGRiwgMHhGRiwgMHhGRn0gIC8qIHN3MSwgMS4yIHYsIG9wdGlvbmFsICov Cj4+ICt9Owo+PiArCj4+ICsvKiBhdWRpbyByZWxhdGVkIGNhdGFsb2cgZnVuY3Rpb25zICovCj4+ ICtzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlIHsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+ ICsJc3RydWN0IGRwX2lvICppbzsKPj4gKwo+PiArCXUzMiAoKmF1ZGlvX21hcClbRFBfQVVESU9f U0RQX0hFQURFUl9NQVhdOwo+PiArCXN0cnVjdCBkcF9jYXRhbG9nIGRwX2NhdGFsb2c7Cj4+ICt9 Owo+PiArCj4+ICsvKiBhdXggcmVsYXRlZCBjYXRhbG9nIGZ1bmN0aW9ucyAqLwo+PiArc3RhdGlj IHUzMiBkcF9jYXRhbG9nX2F1eF9yZWFkX2RhdGEoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgp Cj4+ICt7Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl2b2lk IF9faW9tZW0gKmJhc2U7Cj4+ICsKPj4gKwlpZiAoIWF1eCkgewo+PiArCQlwcl9lcnIoImludmFs aWQgaW5wdXRcbiIpOwo+IAo+IEFuZCBhbm90aGVyIGxvZ2dpbmcgdHlwZSwgcGxlYXNlIHJlbW92 ZSBwcl8qIGFuZCB1c2UgYSAKPiBEUFVfL0RSTV8vRFJNX0RFVl8KPiB2YXJpYW50Lgo+IAo+PiAr CQlnb3RvIGVuZDsKPj4gKwl9Cj4+ICsKPj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGF1eCk7Cj4+ ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9hdXguYmFzZTsKPj4gKwo+PiArCXJldHVybiBkcF9y ZWFkKGJhc2UgKyBEUF9BVVhfREFUQSk7Cj4+ICtlbmQ6Cj4+ICsJcmV0dXJuIDA7Cj4gCj4gLi4u IG9yIHlvdSBjb3VsZCBqdXN0IHJldHVybiBkaXJlY3RseSBpbiB0aGUgaWYgYWJvdmUgYW5kIHJl bW92ZSB0aGUgCj4gbGFiZWwgOikKPiBTYW1lIGNvbW1lbnQgYXBwbGllcyBiZWxvdy4KPiAKPiBB bHNvLCBwcm9iYWJseSBzaG91bGRuJ3QgcmV0dXJuIDAgaW4gYW4gZXJyb3IgY2FzZS4KPiAKPiBU aGVuIGFnYWluLCBJJ20gZ3Vlc3NpbmcgaGl0dGluZyB0aGUgTlVMTCBjYXNlIGlzIGxpa2VseSBp bXBvc3NpYmxlLCBzbyAKPiB5b3UgY2FuCj4gcHJvYmFibHkgcmVtb3ZlIGFsbCBvZiB0aGUgbWFj aGluZXJ5IGFyb3VuZCBjaGVja2luZyAhYXV4Lgo+IAo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IGRwX2NhdGFsb2dfYXV4X3dyaXRlX2RhdGEoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgpCj4+ ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRh bG9nOwo+PiArCXZvaWQgX19pb21lbSAqYmFzZTsKPj4gKwo+PiArCWlmICghYXV4KSB7Cj4+ICsJ CXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJZ290 byBlbmQ7Cj4+ICsJfQo+PiArCj4+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihhdXgpOwo+PiArCWJh c2UgPSBjYXRhbG9nLT5pby0+ZHBfYXV4LmJhc2U7Cj4+ICsKPj4gKwlkcF93cml0ZShiYXNlICsg RFBfQVVYX0RBVEEsIGF1eC0+ZGF0YSk7Cj4+ICtlbmQ6Cj4+ICsJcmV0dXJuIHJjOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW50IGRwX2NhdGFsb2dfYXV4X3dyaXRlX3RyYW5zKHN0cnVjdCBkcF9j YXRhbG9nX2F1eCAqYXV4KQo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJc3RydWN0IGRwX2Nh dGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4+ICsKPj4g KwlpZiAoIWF1eCkgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQlyYyA9 IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+PiArCWRwX2NhdGFsb2dfZ2V0 X3ByaXYoYXV4KTsKPj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2F1eC5iYXNlOwo+PiArCj4+ ICsJZHBfd3JpdGUoYmFzZSArIERQX0FVWF9UUkFOU19DVFJMLCBhdXgtPmRhdGEpOwo+PiArZW5k Ogo+PiArCXJldHVybiByYzsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9jYXRhbG9nX2F1 eF9jbGVhcl90cmFucyhzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwgCj4+IGJvb2wgcmVhZCkK Pj4gK3sKPj4gKwlpbnQgcmMgPSAwOwo+PiArCXUzMiBkYXRhID0gMDsKPj4gKwlzdHJ1Y3QgZHBf Y2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+PiArCXZvaWQgX19pb21lbSAqYmFzZTsKPj4gKwo+ PiArCWlmICghYXV4KSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJj ID0gLUVJTlZBTDsKPj4gKwkJZ290byBlbmQ7Cj4+ICsJfQo+PiArCj4+ICsJZHBfY2F0YWxvZ19n ZXRfcHJpdihhdXgpOwo+PiArCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfYXV4LmJhc2U7Cj4+ICsK Pj4gKwlpZiAocmVhZCkgewo+PiArCQlkYXRhID0gZHBfcmVhZChiYXNlICsgRFBfQVVYX1RSQU5T X0NUUkwpOwo+PiArCQlkYXRhICY9IH5CSVQoOSk7Cj4+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9B VVhfVFJBTlNfQ1RSTCwgZGF0YSk7Cj4+ICsJfSBlbHNlIHsKPj4gKwkJZHBfd3JpdGUoYmFzZSAr IERQX0FVWF9UUkFOU19DVFJMLCAwKTsKPj4gKwl9Cj4+ICtlbmQ6Cj4+ICsJcmV0dXJuIHJjOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2F1eF9yZXNldChzdHJ1Y3QgZHBf Y2F0YWxvZ19hdXggKmF1eCkKPj4gK3sKPj4gKwl1MzIgYXV4X2N0cmw7Cj4+ICsJc3RydWN0IGRw X2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4+ICsK Pj4gKwlpZiAoIWF1eCkgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQly ZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihhdXgpOwo+PiArCWJh c2UgPSBjYXRhbG9nLT5pby0+ZHBfYXV4LmJhc2U7Cj4+ICsKPj4gKwlhdXhfY3RybCA9IGRwX3Jl YWQoYmFzZSArIERQX0FVWF9DVFJMKTsKPj4gKwo+PiArCWF1eF9jdHJsIHw9IEJJVCgxKTsKPiAK PiBXaGF0J3MgQklUKDEpPyBDYW4geW91IHBsZWFzZSAjZGVmaW5lIGl0Pwo+IAo+PiArCWRwX3dy aXRlKGJhc2UgKyBEUF9BVVhfQ1RSTCwgYXV4X2N0cmwpOwo+PiArCXVzbGVlcF9yYW5nZSgxMDAw LCAxMDEwKTsgLyogaC93IHJlY29tbWVuZGVkIGRlbGF5ICovCj4gCj4gMTB1cyBkaWZmIGlzIHJp Z2h0IG9uIHRoZSBsaW5lIG9mIGVub3VnaCBkZWxheSB0byBtYWtlIHVzbGVlcF9yYW5nZSAKPiB3 b3J0aCBpdC4KPiBJJ2QgcmVjb21tZW5kIGluY3JlYXNpbmcgdG8gMTAwdXMgdG8gaW5jcmVhc2Ug dGhlIGNoYW5jZSBvZiB0aGUgCj4gc2NoZWR1bGVyIGJlaW5nCj4gYWJsZSB0byBiYXRjaCB0aGlz IHdha2V1cCB3aXRoIGFub3RoZXIuCj4gCj4+ICsKPj4gKwlhdXhfY3RybCAmPSB+QklUKDEpOwo+ PiArCWRwX3dyaXRlKGJhc2UgKyBEUF9BVVhfQ1RSTCwgYXV4X2N0cmwpOwo+PiArCXdtYigpOwo+ IAo+IENhbiB5b3UganVzdCB1c2Ugd3JpdGVsIGZvciB0aGVzZSBjYXNlcyBpbnN0ZWFkIG9mIHVz aW5nIF9yZWxheGVkIGFuZCAKPiB0aGVuCj4gd21iKCk/IFRoaXMgYXBwbGllcyBlbHNld2hlcmUg dG9vLgo+IAo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2F1eF9lbmFibGUo c3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgsIGJvb2wgCj4+IGVuYWJsZSkKPj4gK3sKPj4gKwl1 MzIgYXV4X2N0cmw7Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4g Kwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4+ICsKPj4gKwlpZiAoIWF1eCkgewo+PiArCQlwcl9lcnIo ImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJZHBfY2F0 YWxvZ19nZXRfcHJpdihhdXgpOwo+PiArCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfYXV4LmJhc2U7 Cj4+ICsKPj4gKwlhdXhfY3RybCA9IGRwX3JlYWQoYmFzZSArIERQX0FVWF9DVFJMKTsKPj4gKwo+ PiArCWlmIChlbmFibGUpIHsKPj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX1RJTUVPVVRfQ09VTlQs IDB4ZmZmZik7Cj4+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9BVVhfTElNSVRTLCAweGZmZmYpOwo+ PiArCQlhdXhfY3RybCB8PSBCSVQoMCk7Cj4gCj4gUGxlYXNlICNkZWZpbmUgQklUKDApCj4gCj4+ ICsJfSBlbHNlIHsKPj4gKwkJYXV4X2N0cmwgJj0gfkJJVCgwKTsKPj4gKwl9Cj4+ICsKPj4gKwlk cF93cml0ZShiYXNlICsgRFBfQVVYX0NUUkwsIGF1eF9jdHJsKTsKPj4gK30KPj4gKwo+PiArc3Rh dGljIHZvaWQgZHBfY2F0YWxvZ19hdXhfdXBkYXRlX2NmZyhzdHJ1Y3QgZHBfY2F0YWxvZ19hdXgg KmF1eCwKPj4gKwkJc3RydWN0IGRwX2F1eF9jZmcgKmNmZywgZW51bSBkcF9waHlfYXV4X2NvbmZp Z190eXBlIHR5cGUpCj4+ICt7Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxv ZzsKPj4gKwl1MzIgbmV3X2luZGV4ID0gMCwgY3VycmVudF9pbmRleCA9IDA7Cj4+ICsKPj4gKwlp ZiAoIWF1eCB8fCAhY2ZnIHx8ICh0eXBlID49IFBIWV9BVVhfQ0ZHX01BWCkpIHsKPj4gKwkJcHJf ZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWRw X2NhdGFsb2dfZ2V0X3ByaXYoYXV4KTsKPj4gKwo+PiArCWN1cnJlbnRfaW5kZXggPSBjZmdbdHlw ZV0uY3VycmVudF9pbmRleDsKPj4gKwluZXdfaW5kZXggPSAoY3VycmVudF9pbmRleCArIDEpICUg Y2ZnW3R5cGVdLmNmZ19jbnQ7Cj4+ICsJcHJfZGVidWcoIlVwZGF0aW5nICVzIGZyb20gMHglMDh4 IHRvIDB4JTA4eFxuIiwKPj4gKwkJZHBfcGh5X2F1eF9jb25maWdfdHlwZV90b19zdHJpbmcodHlw ZSksCj4+ICsJY2ZnW3R5cGVdLmx1dFtjdXJyZW50X2luZGV4XSwgY2ZnW3R5cGVdLmx1dFtuZXdf aW5kZXhdKTsKPj4gKwo+PiArCWRwX3dyaXRlKGNhdGFsb2ctPmlvLT5waHlfaW8uYmFzZSArIGNm Z1t0eXBlXS5vZmZzZXQsCj4+ICsJCQljZmdbdHlwZV0ubHV0W25ld19pbmRleF0pOwo+PiArCWNm Z1t0eXBlXS5jdXJyZW50X2luZGV4ID0gbmV3X2luZGV4Owo+PiArfQo+PiArCj4+ICtzdGF0aWMg dm9pZCBkcF9jYXRhbG9nX2F1eF9zZXR1cChzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwKPj4g KwkJc3RydWN0IGRwX2F1eF9jZmcgKmNmZykKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19w cml2YXRlICpjYXRhbG9nOwo+PiArCWludCBpID0gMDsKPj4gKwo+PiArCWlmICghYXV4IHx8ICFj ZmcpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuOwo+PiAr CX0KPj4gKwo+PiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXV4KTsKPj4gKwo+PiArCWRwX3dyaXRl KGNhdGFsb2ctPmlvLT5waHlfaW8uYmFzZSArIERQX1BIWV9QRF9DVEwsIDB4NjUpOwo+IAo+IFdo YXQncyAweDY1PyBQbGVhc2UgI2RlZmluZQo+IAo+PiArCXdtYigpOyAvKiBtYWtlIHN1cmUgUEQg cHJvZ3JhbW1pbmcgaGFwcGVuZWQgKi8KPj4gKwo+PiArCS8qIFR1cm4gb24gQklBUyBjdXJyZW50 IGZvciBQSFkvUExMICovCj4+ICsJZHBfd3JpdGUoY2F0YWxvZy0+aW8tPmRwX3BsbF9pby5iYXNl ICsKPj4gKwkJUVNFUkRFU19DT01fQklBU19FTl9DTEtCVUZMUl9FTiwgMHgxYik7Cj4gCj4gU2Ft ZSBoZXJlIGZvciAweDFiLiBJJ20gZ29pbmcgdG8gc3RvcCBtZW50aW9uaW5nIHRoaXMsIHBsZWFz ZSBhdWRpdCB0aGUgCj4gZHJpdmVyCj4gZm9yIG90aGVyIGluc3RhbmNlcyBvZiBoYXJkY29kZWQg dmFsdWVzIChsaWtlIHRoaXMgYW5kIHRoZSBvbmUgYXQgdGhlIAo+IGVuZCBvZgo+IHRoaXMgZnVu Y3Rpb24pIGFuZCBicmVhayB0aGVtIG91dCBpbnRvIG1lYW5pbmdmdWwgI2RlZmluZXMuCj4gCj4+ ICsKPj4gKwkvKiBEUCBBVVggQ0ZHIHJlZ2lzdGVyIHByb2dyYW1taW5nICovCj4+ICsJZm9yIChp ID0gMDsgaSA8IFBIWV9BVVhfQ0ZHX01BWDsgaSsrKSB7Cj4+ICsJCXByX2RlYnVnKCIlczogb2Zm c2V0PTB4JTA4eCwgdmFsdWU9MHglMDh4XG4iLAo+PiArCQkJZHBfcGh5X2F1eF9jb25maWdfdHlw ZV90b19zdHJpbmcoaSksCj4+ICsJCQljZmdbaV0ub2Zmc2V0LCBjZmdbaV0ubHV0W2NmZ1tpXS5j dXJyZW50X2luZGV4XSk7Cj4+ICsJCWRwX3dyaXRlKGNhdGFsb2ctPmlvLT5waHlfaW8uYmFzZSAr IGNmZ1tpXS5vZmZzZXQsCj4+ICsJCQljZmdbaV0ubHV0W2NmZ1tpXS5jdXJyZW50X2luZGV4XSk7 Cj4+ICsJfQo+PiArCj4+ICsJZHBfd3JpdGUoY2F0YWxvZy0+aW8tPnBoeV9pby5iYXNlICsgRFBf UEhZX0FVWF9JTlRFUlJVUFRfTUFTSywgCj4+IDB4MUYpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg dm9pZCBkcF9jYXRhbG9nX2F1eF9nZXRfaXJxKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4LCBi b29sIAo+PiBjbWRfYnVzeSkKPj4gK3sKPj4gKwl1MzIgYWNrOwo+PiArCXN0cnVjdCBkcF9jYXRh bG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4+ICsJdm9pZCBfX2lvbWVtICphaGJfYmFzZTsKPj4gKwo+ PiArCWlmICghYXV4KSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJl dHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGF1eCk7Cj4+ICsJYWhi X2Jhc2UgPSBjYXRhbG9nLT5pby0+ZHBfYWhiLmJhc2U7Cj4+ICsKPj4gKwlhdXgtPmlzciA9IGRw X3JlYWQoYWhiX2Jhc2UgKyBEUF9JTlRSX1NUQVRVUyk7Cj4+ICsJYXV4LT5pc3IgJj0gfkRQX0lO VFJfTUFTSzE7Cj4+ICsJYWNrID0gYXV4LT5pc3IgJiBEUF9JTlRFUlJVUFRfU1RBVFVTMTsKPj4g KwlhY2sgPDw9IDE7Cj4+ICsJYWNrIHw9IERQX0lOVFJfTUFTSzE7Cj4+ICsJZHBfd3JpdGUoYWhi X2Jhc2UgKyBEUF9JTlRSX1NUQVRVUywgYWNrKTsKPj4gK30KPj4gKwo+PiArLyogY29udHJvbGxl ciByZWxhdGVkIGNhdGFsb2cgZnVuY3Rpb25zICovCj4+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9n X2N0cmxfdXBkYXRlX3RyYW5zZmVyX3VuaXQoc3RydWN0IAo+PiBkcF9jYXRhbG9nX2N0cmwgKmN0 cmwpCj4+ICt7Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl2 b2lkIF9faW9tZW0gKmJhc2U7Cj4+ICsKPj4gKwlpZiAoIWN0cmwpIHsKPj4gKwkJcHJfZXJyKCJp bnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWRwX2NhdGFs b2dfZ2V0X3ByaXYoY3RybCk7Cj4+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJhc2U7 Cj4+ICsKPj4gKwlkcF93cml0ZShiYXNlICsgRFBfVkFMSURfQk9VTkRBUlksIGN0cmwtPnZhbGlk X2JvdW5kYXJ5KTsKPj4gKwlkcF93cml0ZShiYXNlICsgRFBfVFUsIGN0cmwtPmRwX3R1KTsKPj4g KwlkcF93cml0ZShiYXNlICsgRFBfVkFMSURfQk9VTkRBUllfMiwgY3RybC0+dmFsaWRfYm91bmRh cnkyKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX3N0YXRlX2N0 cmwoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgCj4+IHUzMiBzdGF0ZSkKPj4gK3sKPj4g KwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+PiArCXZvaWQgX19pb21lbSAq YmFzZTsKPj4gKwo+PiArCWlmICghY3RybCkgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRc biIpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihj dHJsKTsKPj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKPj4gKwo+PiArCWRw X3dyaXRlKGJhc2UgKyBEUF9TVEFURV9DVFJMLCBzdGF0ZSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyB2b2lkIGRwX2NhdGFsb2dfY3RybF9jb25maWdfY3RybChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJs ICpjdHJsLCAKPj4gdTMyIGNmZykKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRl ICpjYXRhbG9nOwo+PiArCXZvaWQgX19pb21lbSAqbGlua19iYXNlOwo+PiArCj4+ICsJaWYgKCFj dHJsKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVybjsKPj4g Kwl9Cj4+ICsKPj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwo+PiArCWxpbmtfYmFzZSA9 IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJhc2U7Cj4+ICsKPj4gKwlwcl9kZWJ1ZygiRFBfQ09ORklH VVJBVElPTl9DVFJMPTB4JXhcbiIsIGNmZyk7Cj4+ICsKPj4gKwlkcF93cml0ZShsaW5rX2Jhc2Ug KyBEUF9DT05GSUdVUkFUSU9OX0NUUkwsIGNmZyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lk IGRwX2NhdGFsb2dfY3RybF9sYW5lX21hcHBpbmcoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAKPj4g KmN0cmwpCj4+ICt7Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4g Kwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4+ICsKPj4gKwlpZiAoIWN0cmwpIHsKPj4gKwkJcHJfZXJy KCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWRwX2Nh dGFsb2dfZ2V0X3ByaXYoY3RybCk7Cj4+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJh c2U7Cj4+ICsKPj4gKwlkcF93cml0ZShiYXNlICsgRFBfTE9HSUNBTDJQSFlTSUNBTF9MQU5FX01B UFBJTkcsIDB4ZTQpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2N0cmxf bWFpbmxpbmtfY3RybChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsIAo+PiAqY3RybCwKPj4gKwkJCQkJ CWJvb2wgZW5hYmxlKQo+PiArewo+PiArCXUzMiBtYWlubGlua19jdHJsOwo+PiArCXN0cnVjdCBk cF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+PiAr Cj4+ICsJaWYgKCFjdHJsKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJ CXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwo+PiAr CWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfbGluay5iYXNlOwo+PiArCj4+ICsJaWYgKGVuYWJsZSkg ewo+PiArCQlkcF93cml0ZShiYXNlICsgRFBfTUFJTkxJTktfQ1RSTCwgMHgwMjAwMDAwMCk7Cj4+ ICsJCXdtYigpOyAvKiBtYWtlIHN1cmUgbWFpbmxpbmsgaXMgdHVybmVkIG9mZiBiZWZvcmUgcmVz ZXQgKi8KPj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX01BSU5MSU5LX0NUUkwsIDB4MDIwMDAwMDIp Owo+PiArCQl3bWIoKTsgLyogbWFrZSBzdXJlIG1haW5saW5rIGVudGVyZWQgcmVzZXQgKi8KPj4g KwkJZHBfd3JpdGUoYmFzZSArIERQX01BSU5MSU5LX0NUUkwsIDB4MDIwMDAwMDApOwo+PiArCQl3 bWIoKTsgLyogbWFrZSBzdXJlIG1haW5saW5rIHJlc2V0IGRvbmUgKi8KPj4gKwkJZHBfd3JpdGUo YmFzZSArIERQX01BSU5MSU5LX0NUUkwsIDB4MDIwMDAwMDEpOwo+PiArCQl3bWIoKTsgLyogbWFr ZSBzdXJlIG1haW5saW5rIHR1cm5lZCBvbiAqLwo+IAo+IFNhbWUgY29tbWVudHMgaGVyZSByZTog cmVhZGwgdnMgcmVhZGxfcmVsYXhlZCArIHdtYgo+IAo+IFBsZWFzZSAjZGVmaW5lIHRoZSBiaXRz IHlvdSdyZSBzZXR0aW5nLgo+IAo+IAo+PiArCX0gZWxzZSB7Cj4+ICsJCW1haW5saW5rX2N0cmwg PSBkcF9yZWFkKGJhc2UgKyBEUF9NQUlOTElOS19DVFJMKTsKPj4gKwkJbWFpbmxpbmtfY3RybCAm PSB+QklUKDApOwo+PiArCQlkcF93cml0ZShiYXNlICsgRFBfTUFJTkxJTktfQ1RSTCwgbWFpbmxp bmtfY3RybCk7Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2N0 cmxfY29uZmlnX21pc2Moc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwKPj4gKwkJCQkJdTMy IGNjLCB1MzIgdGIpCj4+ICt7Cj4+ICsJdTMyIG1pc2NfdmFsOwo+PiArCXN0cnVjdCBkcF9jYXRh bG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+PiArCj4+ICsJ aWYgKCFjdHJsKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVy bjsKPj4gKwl9Cj4+ICsKPj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwo+PiArCWJhc2Ug PSBjYXRhbG9nLT5pby0+ZHBfbGluay5iYXNlOwo+PiArCj4+ICsJbWlzY192YWwgPSBkcF9yZWFk KGJhc2UgKyBEUF9NSVNDMV9NSVNDMCk7Cj4+ICsJbWlzY192YWwgfD0gY2M7Cj4gCj4gU2hvdWxk IHlvdSBtYXNrIHRoaXMgc28gaXQgZG9lc24ndCBzdG9tcCBhcmVhcyBpdCBzaG91bGRuJ3Q/Cj4g Cj4+ICsJbWlzY192YWwgfD0gKHRiIDw8IDUpOwo+IAo+IFBhcmVudGhlc2VzIGFyZSB1bm5lY2Vz c2FyeQo+IAo+PiArCW1pc2NfdmFsIHw9IEJJVCgwKTsgLyogQ29uZmlndXJlIGNsb2NrIHRvIHN5 bmNocm9ub3VzIG1vZGUgKi8KPj4gKwo+PiArCXByX2RlYnVnKCJtaXNjIHNldHRpbmdzID0gMHgl eFxuIiwgbWlzY192YWwpOwo+PiArCWRwX3dyaXRlKGJhc2UgKyBEUF9NSVNDMV9NSVNDMCwgbWlz Y192YWwpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2N0cmxfY29uZmln X21zYShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLAo+PiArCQkJCQl1MzIgcmF0ZSwgdTMy IHN0cmVhbV9yYXRlX2toeiwKPj4gKwkJCQkJYm9vbCBmaXhlZF9udmlkKQo+PiArewo+PiArCXUz MiBwaXhlbF9tLCBwaXhlbF9uOwo+PiArCXUzMiBtdmlkLCBudmlkOwo+PiArCXU2NCBtdmlkX2Nh bGM7Cj4+ICsJdTMyIGNvbnN0IG52aWRfZml4ZWQgPSAweDgwMDA7Cj4gCj4gWW91IHNob3VsZCBw dWxsIHRoaXMgb3V0IGludG8gYSAjZGVmaW5lIGluIGRybV9kcF9oZWxwZXIuaCBhbmQgdXNlIHRo ZSAKPiBuZXcKPiBkZWZpbmUgaW4gdGhlIGk5MTUgZHJpdmVyIChpbiBhIHNlcGFyYXRlIHBhdGNo KSBhcyB3ZWxsIGFzIGhlcmUuCj4gCj4+ICsJdTMyIGNvbnN0IGxpbmtfcmF0ZV9oYnIyID0gNTQw MDAwOwo+PiArCXUzMiBjb25zdCBsaW5rX3JhdGVfaGJyMyA9IDgxMDAwMDsKPj4gKwlzdHJ1Y3Qg ZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+PiArCXZvaWQgX19pb21lbSAqYmFzZV9jYywg KmJhc2VfY3RybDsKPj4gKwo+PiArCWlmICghY3RybCkgewo+PiArCQlwcl9lcnIoImludmFsaWQg aW5wdXRcbiIpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJZHBfY2F0YWxvZ19nZXRf cHJpdihjdHJsKTsKPj4gKwlpZiAoZml4ZWRfbnZpZCkgewo+PiArCQlwcl9kZWJ1ZygidXNlIGZp eGVkIE5WSUQ9MHgleFxuIiwgbnZpZF9maXhlZCk7Cj4+ICsJCW52aWQgPSBudmlkX2ZpeGVkOwo+ PiArCj4+ICsJCXByX2RlYnVnKCJsaW5rIHJhdGU9JWRrYnBzLCBzdHJlYW1fcmF0ZV9raHo9JXVL aHoiLAo+PiArCQkJcmF0ZSwgc3RyZWFtX3JhdGVfa2h6KTsKPj4gKwo+PiArCQkvKgo+PiArCQkg KiBGb3IgaW50ZXJtZWRpYXRlIHJlc3VsdHMsIHVzZSA2NCBiaXQgYXJpdGhtZXRpYyB0byBhdm9p ZAo+PiArCQkgKiBsb3NzIG9mIHByZWNpc2lvbi4KPj4gKwkJICovCj4+ICsJCW12aWRfY2FsYyA9 ICh1NjQpIHN0cmVhbV9yYXRlX2toeiAqIG52aWQ7Cj4+ICsJCW12aWRfY2FsYyA9IGRpdl91NjQo bXZpZF9jYWxjLCByYXRlKTsKPj4gKwo+PiArCQkvKgo+PiArCQkgKiB0cnVuY2F0ZSBiYWNrIHRv IDMyIGJpdHMgYXMgdGhpcyBmaW5hbCBkaXZpZGVkIHZhbHVlIHdpbGwKPj4gKwkJICogYWx3YXlz IGJlIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgYSAzMiBiaXQgdW5zaWduZWQgaW50Lgo+PiArCQkgKi8K Pj4gKwkJbXZpZCA9ICh1MzIpIG12aWRfY2FsYzsKPj4gKwl9IGVsc2Ugewo+PiArCQliYXNlX2Nj ID0gY2F0YWxvZy0+aW8tPmRwX2NjX2lvLmJhc2U7Cj4+ICsKPj4gKwkJcGl4ZWxfbSA9IGRwX3Jl YWQoYmFzZV9jYyArIE1NU1NfRFBfUElYRUxfTSk7Cj4+ICsJCXBpeGVsX24gPSBkcF9yZWFkKGJh c2VfY2MgKyBNTVNTX0RQX1BJWEVMX04pOwo+PiArCQlwcl9kZWJ1ZygicGl4ZWxfbT0weCV4LCBw aXhlbF9uPTB4JXhcbiIsIHBpeGVsX20sIHBpeGVsX24pOwo+PiArCj4+ICsJCW12aWQgPSAocGl4 ZWxfbSAmIDB4RkZGRikgKiA1Owo+PiArCQludmlkID0gKDB4RkZGRiAmICh+cGl4ZWxfbikpICsg KHBpeGVsX20gJiAweEZGRkYpOwo+PiArCj4+ICsJCXByX2RlYnVnKCJyYXRlID0gJWRcbiIsIHJh dGUpOwo+PiArCj4+ICsJCWlmIChsaW5rX3JhdGVfaGJyMiA9PSByYXRlKQo+PiArCQkJbnZpZCAq PSAyOwo+PiArCj4+ICsJCWlmIChsaW5rX3JhdGVfaGJyMyA9PSByYXRlKQo+PiArCQkJbnZpZCAq PSAzOwo+IAo+ICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRybV9kcF9id19jb2RlX3RvX2xpbmtf cmF0ZShyYXRlKSkgewo+ICAgICAgICAgICAgICAgICBjYXNlIERQX0xJTktfQldfNV80Ogo+ICAg ICAgICAgICAgICAgICAgICAgICAgIG52aWQgKj0gMjsKPiAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKPiAgICAgICAgICAgICAgICAgY2FzZSBEUF9MSU5LX0JXXzhfMToKPiAgICAgICAg ICAgICAgICAgICAgICAgICBudmlkICo9IDM7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Cj4gICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cj4gICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Cj4gICAgICAgICAgICAgICAgIH0KPiAKPiBBbmQgcmVtb3ZlIGxpbmtfcmF0ZV9oYnIq IGFib3ZlLgo+IAo+IAo+PiArCX0KPj4gKwo+PiArCWJhc2VfY3RybCA9IGNhdGFsb2ctPmlvLT5k cF9saW5rLmJhc2U7Cj4+ICsJcHJfZGVidWcoIm12aWQ9MHgleCwgbnZpZD0weCV4XG4iLCBtdmlk LCBudmlkKTsKPj4gKwlkcF93cml0ZShiYXNlX2N0cmwgKyBEUF9TT0ZUV0FSRV9NVklELCBtdmlk KTsKPj4gKwlkcF93cml0ZShiYXNlX2N0cmwgKyBEUF9TT0ZUV0FSRV9OVklELCBudmlkKTsKPj4g K30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX3NldF9wYXR0ZXJuKHN0cnVj dCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsCj4+ICsJCQkJCXUzMiBwYXR0ZXJuKQo+PiArewo+PiAr CWludCBiaXQsIGNudCA9IDEwOwo+PiArCXUzMiBkYXRhOwo+PiArCXN0cnVjdCBkcF9jYXRhbG9n X3ByaXZhdGUgKmNhdGFsb2c7Cj4+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+PiArCj4+ICsJaWYg KCFjdHJsKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVybjsK Pj4gKwl9Cj4+ICsKPj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwo+PiArCWJhc2UgPSBj YXRhbG9nLT5pby0+ZHBfbGluay5iYXNlOwo+PiArCj4+ICsJYml0ID0gMTsKPj4gKwliaXQgPDw9 IChwYXR0ZXJuIC0gMSk7Cj4gCj4gICAgICAgICBiaXQgPSBCSVQocGF0dGVybiAtIDEpOwo+IAo+ PiArCXByX2RlYnVnKCJodzogYml0PSVkIHRyYWluPSVkXG4iLCBiaXQsIHBhdHRlcm4pOwo+PiAr CWRwX3dyaXRlKGJhc2UgKyBEUF9TVEFURV9DVFJMLCBiaXQpOwo+PiArCj4+ICsJYml0ID0gODsK Pj4gKwliaXQgPDw9IChwYXR0ZXJuIC0gMSk7Cj4gCj4gICAgICAgICBiaXQgPSBCSVQocGF0dGVy biAtIDEpIDw8IDM7Cj4+ICsKPj4gKwl3aGlsZSAoY250LS0pIHsKPj4gKwkJZGF0YSA9IGRwX3Jl YWQoYmFzZSArIERQX01BSU5MSU5LX1JFQURZKTsKPj4gKwkJaWYgKGRhdGEgJiBiaXQpCj4+ICsJ CQlicmVhazsKPiAKPiBTaG91bGQgdGhlcmUgYmUgYSBzbGVlcCBpbiBoZXJlPyBBbHNvLCBjb25z aWRlciB1c2luZyAKPiByZWFkeF9wb2xsX3RpbWVvdXQgaW5zdGVhZAo+IG9mIHJvbGxpbmcgeW91 ciBvd24gcG9sbGluZy4KPiAKPj4gKwl9Cj4+ICsKPj4gKwlpZiAoY250ID09IDApCj4+ICsJCXBy X2Vycigic2V0IGxpbmtfdHJhaW49JWQgZmFpbGVkXG4iLCBwYXR0ZXJuKTsKPiAKPiBUaGlzIGZ1 bmN0aW9uIHNob3VsZCByZXR1cm4gYW4gaW50IGFuZCByZXBvcnQgdGhpcyBmYWlsdXJlIGluc3Rl YWQgb2YgCj4gaWdub3JpbmcKPiBpdC4KPiAKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBf Y2F0YWxvZ19jdHJsX3VzYl9yZXNldChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCAKPj4g Ym9vbCBmbGlwKQo+PiArewo+PiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7 Cj4+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+PiArCj4+ICsJaWYgKCFjdHJsKSB7Cj4+ICsJCXBy X2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlk cF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwo+PiArCj4+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT51 c2IzX2RwX2NvbS5iYXNlOwo+PiArCj4+ICsJZHBfd3JpdGUoYmFzZSArIFVTQjNfRFBfQ09NX1JF U0VUX09WUkRfQ1RSTCwgMHgwYSk7Cj4gCj4gQWdhaW4sIGFsbCBvZiB0aGVzZSBtYWdpYyB2YWx1 ZXMgbmVlZCB0byBiZSBwdWxsZWQgb3V0IGludG8gI2RlZmluZXMgc28gCj4gd2Uga25vdwo+IHdo YXQgdGhlIHZhbHVlcyBtZWFuLgo+IAo+PiArCWRwX3dyaXRlKGJhc2UgKyBVU0IzX0RQX0NPTV9Q SFlfTU9ERV9DVFJMLCAweDAyKTsKPj4gKwlkcF93cml0ZShiYXNlICsgVVNCM19EUF9DT01fU1df UkVTRVQsIDB4MDEpOwo+PiArCS8qIG1ha2Ugc3VyZSB1c2IzIGNvbSBwaHkgc29mdHdhcmUgcmVz ZXQgaXMgZG9uZSAqLwo+PiArCXdtYigpOwo+IAo+IFNhbWUgY29tbWVudHMgaGVyZSB3cnQgd21i KCkKPiAKPj4gKwo+PiArCWlmICghZmxpcCkgLyogQ0MxICovCj4+ICsJCWRwX3dyaXRlKGJhc2Ug KyBVU0IzX0RQX0NPTV9UWVBFQ19DVFJMLCAweDAyKTsKPj4gKwllbHNlIC8qIENDMiAqLwo+PiAr CQlkcF93cml0ZShiYXNlICsgVVNCM19EUF9DT01fVFlQRUNfQ1RSTCwgMHgwMyk7Cj4gCj4gCj4g ICAgICAgICB1MzIgdmFsOwo+ICAgICAgICAgLi4uCj4gICAgICAgICB2YWwgPSBTT01FX0RFRklO RV9USEFUX01BS0VTX1NFTlNFOwo+ICAgICAgICAgaWYgKGZsaXApCj4gICAgICAgICAgICAgICAg IHZhbCB8PSBBTk9USEVSX0RFRklORV9USEFUX01FQU5TX0ZMSVA7Cj4gCj4gICAgICAgICBkcF9p b193cml0ZShVU0IzX0RQX0NPTV9UWVBFQ19DVFJMLCB2YWwpOwo+IAo+PiArCj4+ICsJZHBfd3Jp dGUoYmFzZSArIFVTQjNfRFBfQ09NX1NXSV9DVFJMLCAweDAwKTsKPj4gKwlkcF93cml0ZShiYXNl ICsgVVNCM19EUF9DT01fU1dfUkVTRVQsIDB4MDApOwo+PiArCS8qIG1ha2Ugc3VyZSB0aGUgc29m dHdhcmUgcmVzZXQgaXMgZG9uZSAqLwo+PiArCXdtYigpOwo+PiArCj4+ICsJZHBfd3JpdGUoYmFz ZSArIFVTQjNfRFBfQ09NX1BPV0VSX0RPV05fQ1RSTCwgMHgwMSk7Cj4+ICsJZHBfd3JpdGUoYmFz ZSArIFVTQjNfRFBfQ09NX1JFU0VUX09WUkRfQ1RSTCwgMHgwMCk7Cj4+ICsJLyogbWFrZSBzdXJl IHBoeSBpcyBicm91Z2h0IG91dCBvZiByZXNldCAqLwo+PiArCXdtYigpOwo+PiArCj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfcGFuZWxfdHBnX2NmZyhzdHJ1Y3QgZHBfY2F0 YWxvZ19wYW5lbCAqcGFuZWwsCj4+ICsJYm9vbCBlbmFibGUpCj4+ICt7Cj4+ICsJc3RydWN0IGRw X2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4+ICsK Pj4gKwlpZiAoIXBhbmVsKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJ CXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KHBhbmVsKTsKPj4g KwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX3AwLmJhc2U7Cj4+ICsKPj4gKwlpZiAoIWVuYWJsZSkg ewo+PiArCQlkcF93cml0ZShiYXNlICsgTU1TU19EUF9UUEdfTUFJTl9DT05UUk9MLCAweDApOwo+ PiArCQlkcF93cml0ZShiYXNlICsgTU1TU19EUF9CSVNUX0VOQUJMRSwgMHgwKTsKPj4gKwkJZHBf d3JpdGUoYmFzZSArIE1NU1NfRFBfVElNSU5HX0VOR0lORV9FTiwgMHgwKTsKPj4gKwkJd21iKCk7 IC8qIGVuc3VyZSBUaW1pbmcgZ2VuZXJhdG9yIGlzIHR1cm5lZCBvZmYgKi8KPj4gKwkJcmV0dXJu Owo+PiArCX0KPiAKPiBUaGVyZSdzIHJlYWxseSBubyByZWFzb24gdG8gaGF2ZSBib3RoIHRoZSBl bmFibGUgKyBkaXNhYmxlIHBhdGggaW4gdGhlIAo+IHNhbWUKPiBmdW5jdGlvbiwgdGhleSBkb24n dCBzaGFyZSBhbnkgY29kZSAoYXNpZGUgZnJvbSB3cml0aW5nIGEgZmV3IGRpZmZlcmVudCAKPiB2 YWx1ZXMKPiB0byB0aGUgc2FtZSByZWdpc3RlcnMpLiBDb3VsZCB5b3UgcGxlYXNlIHNwbGl0IHRo aXMgZnVuY3Rpb24gaW50byBhCj4gdGltaW5nX2dlbmVyYXRvcl9kaXNhYmxlIGFuZCB0aW1pbmdf Z2VuZXJhdG9yX2VuYWJsZT8KPiAKPj4gKwo+PiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX0lO VEZfQ09ORklHLCAweDApOwo+PiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX0lOVEZfSFNZTkNf Q1RMLCBwYW5lbC0+aHN5bmNfY3RsKTsKPj4gKwlkcF93cml0ZShiYXNlICsgTU1TU19EUF9JTlRG X1ZTWU5DX1BFUklPRF9GMCwgcGFuZWwtPnZzeW5jX3BlcmlvZCAqCj4+ICsJCQlwYW5lbC0+aHN5 bmNfcGVyaW9kKTsKPj4gKwlkcF93cml0ZShiYXNlICsgTU1TU19EUF9JTlRGX1ZTWU5DX1BVTFNF X1dJRFRIX0YwLCAKPj4gcGFuZWwtPnZfc3luY193aWR0aCAqCj4+ICsJCQlwYW5lbC0+aHN5bmNf cGVyaW9kKTsKPj4gKwlkcF93cml0ZShiYXNlICsgTU1TU19EUF9JTlRGX1ZTWU5DX1BFUklPRF9G MSwgMCk7Cj4+ICsJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfSU5URl9WU1lOQ19QVUxTRV9XSURU SF9GMSwgMCk7Cj4+ICsJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfSU5URl9ESVNQTEFZX0hDVEws IHBhbmVsLT5kaXNwbGF5X2hjdGwpOwo+PiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX0lOVEZf QUNUSVZFX0hDVEwsIDApOwo+PiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0lOVEZfRElTUExBWV9W X1NUQVJUX0YwLCAKPj4gcGFuZWwtPmRpc3BsYXlfdl9zdGFydCk7Cj4+ICsJZHBfd3JpdGUoYmFz ZSArIE1NU1NfRFBfSU5URl9ESVNQTEFZX1ZfRU5EX0YwLCAKPj4gcGFuZWwtPmRpc3BsYXlfdl9l bmQpOwo+PiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0lOVEZfRElTUExBWV9WX1NUQVJUX0YxLCAw KTsKPj4gKwlkcF93cml0ZShiYXNlICsgTU1TU19EUF9JTlRGX0RJU1BMQVlfVl9FTkRfRjEsIDAp Owo+PiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX0lOVEZfQUNUSVZFX1ZfU1RBUlRfRjAsIDAp Owo+PiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX0lOVEZfQUNUSVZFX1ZfRU5EX0YwLCAwKTsK Pj4gKwlkcF93cml0ZShiYXNlICsgTU1TU19EUF9JTlRGX0FDVElWRV9WX1NUQVJUX0YxLCAwKTsK Pj4gKwlkcF93cml0ZShiYXNlICsgTU1TU19EUF9JTlRGX0FDVElWRV9WX0VORF9GMSwgMCk7Cj4+ ICsJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfSU5URl9QT0xBUklUWV9DVEwsIDApOwo+PiArCXdt YigpOyAvKiBlbnN1cmUgVFBHIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZCAqLwo+PiArCj4+ICsJ ZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfVFBHX01BSU5fQ09OVFJPTCwgMHgxMDApOwo+PiArCWRw X3dyaXRlKGJhc2UgKyBNTVNTX0RQX1RQR19WSURFT19DT05GSUcsIDB4NSk7Cj4+ICsJd21iKCk7 IC8qIGVuc3VyZSBUUEcgY29uZmlnIGlzIHByb2dyYW1tZWQgKi8KPj4gKwlkcF93cml0ZShiYXNl ICsgTU1TU19EUF9CSVNUX0VOQUJMRSwgMHgxKTsKPj4gKwlkcF93cml0ZShiYXNlICsgTU1TU19E UF9USU1JTkdfRU5HSU5FX0VOLCAweDEpOwo+PiArCXdtYigpOyAvKiBlbnN1cmUgVGltaW5nIGdl bmVyYXRvciBpcyB0dXJuZWQgb24gKi8KPj4gKwlwcl9kZWJ1ZygiJXM6IGVuYWJsZWQgdHBnXG4i LCBfX2Z1bmNfXyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF9y ZXNldChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsKQo+PiArewo+PiArCXUzMiBzd19yZXNl dDsKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+PiArCXZvaWQgX19p b21lbSAqYmFzZTsKPj4gKwo+PiArCWlmICghY3RybCkgewo+PiArCQlwcl9lcnIoImludmFsaWQg aW5wdXRcbiIpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJZHBfY2F0YWxvZ19nZXRf cHJpdihjdHJsKTsKPj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2FoYi5iYXNlOwo+PiArCj4+ ICsJc3dfcmVzZXQgPSBkcF9yZWFkKGJhc2UgKyBEUF9TV19SRVNFVCk7Cj4+ICsKPj4gKwlzd19y ZXNldCB8PSBCSVQoMCk7Cj4gCj4gU2hvdWxkIGJlIGEgI2RlZmluZQo+IAo+PiArCWRwX3dyaXRl KGJhc2UgKyBEUF9TV19SRVNFVCwgc3dfcmVzZXQpOwo+PiArCXVzbGVlcF9yYW5nZSgxMDAwLCAx MDEwKTsgLyogaC93IHJlY29tbWVuZGVkIGRlbGF5ICovCj4gCj4gU2FtZSBjb21tZW50IGhlcmUg cmVnYXJkaW5nIHRoZSAxMHVzIHJhbmdlCj4gCj4+ICsKPj4gKwlzd19yZXNldCAmPSB+QklUKDAp Owo+PiArCWRwX3dyaXRlKGJhc2UgKyBEUF9TV19SRVNFVCwgc3dfcmVzZXQpOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgYm9vbCBkcF9jYXRhbG9nX2N0cmxfbWFpbmxpbmtfcmVhZHkoc3RydWN0IGRw X2NhdGFsb2dfY3RybCAKPj4gKmN0cmwpCj4+ICt7Cj4+ICsJdTMyIGRhdGE7Cj4+ICsJaW50IGNu dCA9IDEwOwo+PiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4+ICsJdm9p ZCBfX2lvbWVtICpiYXNlOwo+PiArCj4+ICsJaWYgKCFjdHJsKSB7Cj4+ICsJCXByX2VycigiaW52 YWxpZCBpbnB1dFxuIik7Cj4+ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+PiArCWRwX2NhdGFs b2dfZ2V0X3ByaXYoY3RybCk7Cj4+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJhc2U7 Cj4+ICsKPj4gKwl3aGlsZSAoLS1jbnQpIHsKPj4gKwkJLyogRFBfTUFJTkxJTktfUkVBRFkgKi8K Pj4gKwkJZGF0YSA9IGRwX3JlYWQoYmFzZSArIERQX01BSU5MSU5LX1JFQURZKTsKPj4gKwkJaWYg KGRhdGEgJiBCSVQoMCkpCj4+ICsJCQlyZXR1cm4gdHJ1ZTsKPj4gKwo+PiArCQl1c2xlZXBfcmFu Z2UoMTAwMCwgMTAxMCk7IC8qIDFtcyB3YWl0IGJlZm9yZSBuZXh0IHJlZyByZWFkICovCj4gCj4g U2FtZSBjb21tZW50IGhlcmUgcmVnYXJkaW5nIHVzaW5nIHJlYWR4X3BvbGxfdGltZW91dCB3cmFw cGVkIGluIGEgCj4gaGVscGVyLCBhbHNvCj4gMTB1cyBjb21tZW50Lgo+IAo+PiArCX0KPj4gKwlw cl9lcnIoIm1haW5saW5rIG5vdCByZWFkeVxuIik7Cj4+ICtlbmQ6Cj4+ICsJcmV0dXJuIGZhbHNl Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2N0cmxfZW5hYmxlX2lycShz dHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLAo+PiArCQkJCQkJYm9vbCBlbmFibGUpCj4+ICt7 Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl2b2lkIF9faW9t ZW0gKmJhc2U7Cj4+ICsKPj4gKwlpZiAoIWN0cmwpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlu cHV0XG4iKTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWRwX2NhdGFsb2dfZ2V0X3By aXYoY3RybCk7Cj4+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9haGIuYmFzZTsKPj4gKwo+PiAr CWlmIChlbmFibGUpIHsKPj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX0lOVFJfU1RBVFVTLCBEUF9J TlRSX01BU0sxKTsKPj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX0lOVFJfU1RBVFVTMiwgRFBfSU5U Ul9NQVNLMik7Cj4+ICsJfSBlbHNlIHsKPj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX0lOVFJfU1RB VFVTLCAweDAwKTsKPj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX0lOVFJfU1RBVFVTMiwgMHgwMCk7 Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2N0cmxfaHBkX2Nv bmZpZyhzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCAKPj4gYm9vbCBlbikKPj4gK3sKPj4g KwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+PiArCXZvaWQgX19pb21lbSAq YmFzZTsKPj4gKwo+PiArCWlmICghY3RybCkgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRc biIpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihj dHJsKTsKPj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2F1eC5iYXNlOwo+PiArCj4+ICsJaWYg KGVuKSB7Cj4+ICsJCXUzMiByZWZ0aW1lciA9IGRwX3JlYWQoYmFzZSArIERQX0RQX0hQRF9SRUZU SU1FUik7Cj4+ICsKPj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX0RQX0hQRF9JTlRfQUNLLCAweEYp Owo+PiArCQlkcF93cml0ZShiYXNlICsgRFBfRFBfSFBEX0lOVF9NQVNLLCAweEYpOwo+PiArCj4+ ICsJCS8qIEVuYWJsaW5nIFJFRlRJTUVSICovCj4+ICsJCXJlZnRpbWVyIHw9IEJJVCgxNik7Cj4g Cj4gWW91IGRvbid0IHVzZSB0aGlzIGFueXdoZXJlPwo+IAo+PiArCQlkcF93cml0ZShiYXNlICsg RFBfRFBfSFBEX1JFRlRJTUVSLCAweEYpOwo+PiArCQkvKiBFbmFibGUgSFBEICovCj4+ICsJCWRw X3dyaXRlKGJhc2UgKyBEUF9EUF9IUERfQ1RSTCwgMHgxKTsKPj4gKwl9IGVsc2Ugewo+PiArCQkv KkRpc2FibGUgSFBEICovCj4gCj4gU3BhY2UgYWZ0ZXIgKgo+IAo+PiArCQlkcF93cml0ZShiYXNl ICsgRFBfRFBfSFBEX0NUUkwsIDB4MCk7Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9p ZCBkcF9jYXRhbG9nX2N0cmxfZ2V0X2ludGVycnVwdChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsIAo+ PiAqY3RybCkKPj4gK3sKPj4gKwl1MzIgYWNrID0gMDsKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19w cml2YXRlICpjYXRhbG9nOwo+PiArCXZvaWQgX19pb21lbSAqYmFzZTsKPj4gKwo+PiArCWlmICgh Y3RybCkgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQlyZXR1cm47Cj4+ ICsJfQo+PiArCj4+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKPj4gKwliYXNlID0gY2F0 YWxvZy0+aW8tPmRwX2FoYi5iYXNlOwo+PiArCj4+ICsJY3RybC0+aXNyID0gZHBfcmVhZChiYXNl ICsgRFBfSU5UUl9TVEFUVVMyKTsKPiAKPiBUaGlzIHZhbHVlIHNob3VsZCBqdXN0IGdldCByZXR1 cm5lZCBpbnN0ZWFkIG9mIGJlaW5nIHN0b3JlZC4KPiAKPj4gKwljdHJsLT5pc3IgJj0gfkRQX0lO VFJfTUFTSzI7Cj4gCj4gVW5tYXNraW5nIHRoZSBpbnRlcnJ1cHRzIHNob3VsZCBub3QgYmUgcmV0 dXJuZWQgZnJvbSB0aGlzIGZ1bmN0aW9uLCBpdCAKPiBzaG91bGQKPiBiZSBwYXJ0IG9mIHRoZSBh Y2sgYmVsb3cuCj4gCj4+ICsJYWNrID0gY3RybC0+aXNyICYgRFBfSU5URVJSVVBUX1NUQVRVUzI7 Cj4gCj4gQW5kIHRoaXMgZG9lcyB0aGUgYWJvdmUgdW5tYXNrIGFscmVhZHksIHNvIHlvdSBjYW4g anVzdCB0dXJmIGl0Lgo+IAo+PiArCWFjayA8PD0gMTsKPj4gKwlhY2sgfD0gRFBfSU5UUl9NQVNL MjsKPiAKPiBJbnN0ZWFkIG9mIHJvbGxpbmcgdGhlIGFjayBjb2RlIHlvdXJzZWxmLCBJJ2QgcHJl ZmVyIHdoYXQgeW91IGRpZCB3aXRoIAo+IF9NQVNLLAo+IHdoZXJlIHlvdSBkZWZpbmUgRFBfSU5U RVJSVVBUX1NUQVRVUzJfQUNLIGFib3ZlIGFuZCBqdXN0IGRvIGEgCj4gYml0d2lzZS1PUiB0byBh ZGQKPiB0aGUgYWNrcyBoZXJlLiBXaXRob3V0IHRoZSByZWdpc3RlciBtYXAgaW4gZnJvbnQgb2Yg bWUsIGl0IHdvdWxkIHRha2UgYSAKPiB3aGlsZQo+IHRvIGZpZ3VyZSBvdXQgd2hhdCB5b3UncmUg dHJ5aW5nIHRvIGFjY29tcGxpc2guCj4gCj4+ICsJZHBfd3JpdGUoYmFzZSArIERQX0lOVFJfU1RB VFVTMiwgYWNrKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX3Bo eV9yZXNldChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsKQo+PiArewo+PiArCXN0cnVjdCBk cF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+PiAr Cj4+ICsJaWYgKCFjdHJsKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJ CXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwo+PiAr CWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfYWhiLmJhc2U7Cj4+ICsKPj4gKwlkcF93cml0ZShiYXNl ICsgRFBfUEhZX0NUUkwsIDB4NSk7IC8qIGJpdCAwICYgMiAqLwo+IAo+IFRoZSBjb21tZW50IGRv ZXNuJ3QgaGVscCBoZXJlLCBwbGVhc2UgI2RlZmluZSB0aGVzZSBiaXRzCj4gCj4+ICsJdXNsZWVw X3JhbmdlKDEwMDAsIDEwMTApOyAvKiBoL3cgcmVjb21tZW5kZWQgZGVsYXkgKi8KPiAKPiBTYW1l IGNvbW1lbnQgcmU6IGRlbGF5IHJhbmdlCj4gCj4+ICsJZHBfd3JpdGUoYmFzZSArIERQX1BIWV9D VFJMLCAweDApOwo+PiArCXdtYigpOyAvKiBtYWtlIHN1cmUgUEhZIHJlc2V0IGRvbmUgKi8KPiAK PiBTYW1lIGNvbW1lbnQgcmU6IHdtYgo+IAo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9j YXRhbG9nX2N0cmxfcGh5X2xhbmVfY2ZnKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgCj4+ICpjdHJs LAo+PiArCQlib29sIGZsaXBwZWQsIHU4IGxuX2NudCkKPj4gK3sKPj4gKwl1MzIgaW5mbyA9IDB4 MDsKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+PiArCXU4IG9yaWVu dGF0aW9uID0gQklUKCEhZmxpcHBlZCk7Cj4+ICsKPj4gKwlpZiAoIWN0cmwpIHsKPj4gKwkJcHJf ZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWRw X2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7Cj4+ICsKPj4gKwlpbmZvIHw9IChsbl9jbnQgJiAweDBG KTsKPiAKPiBSZW1vdmUgdGhlIHwgYW5kIGp1c3QgbWFrZSB0aGlzIGFuIGFzc2lnbm1lbnQgKGFu ZCB5b3UgY2FuIHJlbW92ZSB0aGUKPiBpbml0aWFsaXphdGlvbiB0byAwIGFib3ZlKQo+IAo+PiAr CWluZm8gfD0gKChvcmllbnRhdGlvbiAmIDB4MEYpIDw8IDQpOwo+PiArCXByX2RlYnVnKCJTaGFy ZWQgSW5mbyA9IDB4JXhcbiIsIGluZm8pOwo+PiArCj4+ICsJZHBfd3JpdGUoY2F0YWxvZy0+aW8t PnBoeV9pby5iYXNlICsgRFBfUEhZX1NQQVJFMCwgaW5mbyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyB2b2lkIGRwX2NhdGFsb2dfY3RybF91cGRhdGVfdnhfcHgoc3RydWN0IGRwX2NhdGFsb2dfY3Ry bCAKPj4gKmN0cmwsCj4+ICsJCXU4IHZfbGV2ZWwsIHU4IHBfbGV2ZWwpCj4+ICt7Cj4+ICsJc3Ry dWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl2b2lkIF9faW9tZW0gKmJhc2Uw LCAqYmFzZTE7Cj4+ICsJdTggdmFsdWUwLCB2YWx1ZTE7Cj4gCj4gQ2FuIHdlIHBsZWFzZSBwaWNr IGJldHRlciBuYW1lcyBmb3IgdGhlc2U/IQo+IAo+PiArCj4+ICsJaWYgKCFjdHJsKSB7Cj4+ICsJ CXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4g KwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwo+PiArCWJhc2UwID0gY2F0YWxvZy0+aW8tPmxu X3R4MF9pby5iYXNlOwo+PiArCWJhc2UxID0gY2F0YWxvZy0+aW8tPmxuX3R4MV9pby5iYXNlOwo+ PiArCj4+ICsJcHJfZGVidWcoImh3OiB2PSVkIHA9JWRcbiIsIHZfbGV2ZWwsIHBfbGV2ZWwpOwo+ PiArCj4+ICsJdmFsdWUwID0gdm1fdm9sdGFnZV9zd2luZ1t2X2xldmVsXVtwX2xldmVsXTsKPj4g Kwl2YWx1ZTEgPSB2bV9wcmVfZW1waGFzaXNbdl9sZXZlbF1bcF9sZXZlbF07Cj4+ICsKPj4gKwkv KiBwcm9ncmFtIGRlZmF1bHQgc2V0dGluZyBmaXJzdCAqLwo+IAo+IFdoeSBkbyB5b3UgbmVlZCB0 byBkbyB0aGlzPwo+IAo+PiArCWRwX3dyaXRlKGJhc2UwICsgVFhuX1RYX0RSVl9MVkwsIDB4MkEp Owo+PiArCWRwX3dyaXRlKGJhc2UxICsgVFhuX1RYX0RSVl9MVkwsIDB4MkEpOwo+PiArCWRwX3dy aXRlKGJhc2UwICsgVFhuX1RYX0VNUF9QT1NUMV9MVkwsIDB4MjApOwo+PiArCWRwX3dyaXRlKGJh c2UxICsgVFhuX1RYX0VNUF9QT1NUMV9MVkwsIDB4MjApOwo+IAo+ICNkZWZpbmUgdGhlc2UgbWFn aWMgdmFsdWVzCj4gCj4+ICsKPj4gKwkvKiBFbmFibGUgTVVYIHRvIHVzZSBDdXJzb3IgdmFsdWVz IGZyb20gdGhlc2UgcmVnaXN0ZXJzICovCj4+ICsJdmFsdWUwIHw9IEJJVCg1KTsKPj4gKwl2YWx1 ZTEgfD0gQklUKDUpOwo+IAo+ICNkZWZpbmUgdGhlc2UgYml0cyBwbGVhc2UKPiAKPj4gKwo+PiAr CS8qIENvbmZpZ3VyZSBob3N0IGFuZCBwYW5lbCBvbmx5IGlmIGJvdGggdmFsdWVzIGFyZSBhbGxv d2VkICovCj4+ICsJaWYgKHZhbHVlMCAhPSAweEZGICYmIHZhbHVlMSAhPSAweEZGKSB7Cj4gCj4g WW91IGNhbiBjaGVjayB0aGlzIGEgbG90IGVhcmxpZXIgaW4gdGhlIGZ1bmN0aW9uLgo+IAo+PiAr CQlkcF93cml0ZShiYXNlMCArIFRYbl9UWF9EUlZfTFZMLCB2YWx1ZTApOwo+PiArCQlkcF93cml0 ZShiYXNlMSArIFRYbl9UWF9EUlZfTFZMLCB2YWx1ZTApOwo+PiArCQlkcF93cml0ZShiYXNlMCAr IFRYbl9UWF9FTVBfUE9TVDFfTFZMLCB2YWx1ZTEpOwo+PiArCQlkcF93cml0ZShiYXNlMSArIFRY bl9UWF9FTVBfUE9TVDFfTFZMLCB2YWx1ZTEpOwo+PiArCj4+ICsJCXByX2RlYnVnKCJodzogdnhf dmFsdWU9MHgleCBweF92YWx1ZT0weCV4XG4iLAo+PiArCQkJdmFsdWUwLCB2YWx1ZTEpOwo+PiAr CX0gZWxzZSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCB2eCAoMHgleD0weCV4KSwgcHggKDB4JXg9 MHgleFxuIiwKPj4gKwkJCXZfbGV2ZWwsIHZhbHVlMCwgcF9sZXZlbCwgdmFsdWUxKTsKPiAKPiBT ZWVtcyBsaWtlIHJldHVybmluZyBhbiBlcnJvciBpbiB0aGlzIGNhc2Ugd291bGQgYmUgdXNlZnVs Cj4gCj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2N0cmxfc2Vu ZF9waHlfcGF0dGVybihzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsIAo+PiAqY3RybCwKPj4gKwkJCXUz MiBwYXR0ZXJuKQo+PiArewo+PiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7 Cj4+ICsJdTMyIHZhbHVlID0gMHgwOwo+PiArCXZvaWQgX19pb21lbSAqYmFzZSA9IE5VTEw7Cj4+ ICsKPj4gKwlpZiAoIWN0cmwpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4g KwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7Cj4+ ICsKPj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKPj4gKwo+PiArCWRwX3dy aXRlKGJhc2UgKyBEUF9TVEFURV9DVFJMLCAweDApOwo+IAo+IERvIHlvdSByZWFsbHkgbmVlZCB0 byBkbyB0aGlzPwo+IAo+PiArCj4+ICsJc3dpdGNoIChwYXR0ZXJuKSB7Cj4+ICsJY2FzZSBEUF9U RVNUX1BIWV9QQVRURVJOX0QxMF8yX05PX1NDUkFNQkxJTkc6Cj4+ICsJCWRwX3dyaXRlKGJhc2Ug KyBEUF9TVEFURV9DVFJMLCAweDEpOwo+PiArCQlicmVhazsKPj4gKwljYXNlIERQX1RFU1RfUEhZ X1BBVFRFUk5fU1lNQk9MX0VSUl9NRUFTVVJFTUVOVF9DTlQ6Cj4+ICsJCXZhbHVlICY9IH4oMSA8 PCAxNik7Cj4+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9IQlIyX0NPTVBMSUFOQ0VfU0NSQU1CTEVS X1JFU0VULCB2YWx1ZSk7Cj4+ICsJCXZhbHVlIHw9IDB4RkM7Cj4+ICsJCWRwX3dyaXRlKGJhc2Ug KyBEUF9IQlIyX0NPTVBMSUFOQ0VfU0NSQU1CTEVSX1JFU0VULCB2YWx1ZSk7Cj4+ICsJCWRwX3dy aXRlKGJhc2UgKyBEUF9NQUlOTElOS19MRVZFTFMsIDB4Mik7Cj4+ICsJCWRwX3dyaXRlKGJhc2Ug KyBEUF9TVEFURV9DVFJMLCAweDEwKTsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBEUF9URVNUX1BI WV9QQVRURVJOX1BSQlM3Ogo+PiArCQlkcF93cml0ZShiYXNlICsgRFBfU1RBVEVfQ1RSTCwgMHgy MCk7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgRFBfVEVTVF9QSFlfUEFUVEVSTl84MF9CSVRfQ1VT VE9NX1BBVFRFUk46Cj4+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9TVEFURV9DVFJMLCAweDQwKTsK Pj4gKwkJLyogMDAxMTExMTAwMDAwMTExMTEwMDAwMDExMTExMDAwMDAgKi8KPj4gKwkJZHBfd3Jp dGUoYmFzZSArIERQX1RFU1RfODBCSVRfQ1VTVE9NX1BBVFRFUk5fUkVHMCwgMHgzRTBGODNFMCk7 Cj4+ICsJCS8qIDAwMDAxMTExMTAwMDAwMTExMTEwMDAwMDExMTExMDAwICovCj4+ICsJCWRwX3dy aXRlKGJhc2UgKyBEUF9URVNUXzgwQklUX0NVU1RPTV9QQVRURVJOX1JFRzEsIDB4MEY4M0UwRjgp Owo+PiArCQkvKiAxMTExMTAwMDAwMTExMTEwICovCj4+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9U RVNUXzgwQklUX0NVU1RPTV9QQVRURVJOX1JFRzIsIDB4MDAwMEY4M0UpOwo+PiArCQlicmVhazsK Pj4gKwljYXNlIERQX1RFU1RfUEhZX1BBVFRFUk5fSEJSMl9DVFNfRVlFX1BBVFRFUk46Cj4+ICsJ CXZhbHVlID0gQklUKDE2KTsKPj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX0hCUjJfQ09NUExJQU5D RV9TQ1JBTUJMRVJfUkVTRVQsIHZhbHVlKTsKPj4gKwkJdmFsdWUgfD0gMHhGQzsKPj4gKwkJZHBf d3JpdGUoYmFzZSArIERQX0hCUjJfQ09NUExJQU5DRV9TQ1JBTUJMRVJfUkVTRVQsIHZhbHVlKTsK Pj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX01BSU5MSU5LX0xFVkVMUywgMHgyKTsKPj4gKwkJZHBf d3JpdGUoYmFzZSArIERQX1NUQVRFX0NUUkwsIDB4MTApOwo+IAo+IFRoaXMgY29kZSBpcyB0aGUg ZXhhY3Qgc2FtZSBhcyB0aGUgY2FzZSBmb3IKPiBEUF9URVNUX1BIWV9QQVRURVJOX1NZTUJPTF9F UlJfTUVBU1VSRU1FTlRfQ05ULCBhc2lkZSBmcm9tIEJJVCgxNikgdnMKPiB+QklUKDE2KS4gQ2Fu IHlvdSBwbGVhc2UgY29tYmluZSB0aGVzZSBjYXNlcwo+IGFuZCBzaGFyZSBjb2RlPwo+IAo+PiAr CQlicmVhazsKPj4gKwlkZWZhdWx0Ogo+PiArCQlwcl9kZWJ1ZygiTm8gdmFsaWQgdGVzdCBwYXR0 ZXJuIHJlcXVlc3RlZDogMHgleFxuIiwgcGF0dGVybik7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4g Cj4gQWxsIG9mIHRoZSBEUF9TVEFURV9DVFJMIHZhbHVlcyBzaG91bGQgYmUgI2RlZmluZWQsIGFu ZCB5b3UgY2FuIG1vdmUgCj4gdGhlIHdyaXRlCj4gZG93biBoZXJlIGluc3RlYWQgb2YgZHVwbGlj YXRpbmcgaXQgZXZlcnl3aGVyZSAod2l0aAo+IERQX1RFU1RfUEhZX1BBVFRFUk5fODBfQklUX0NV U1RPTV9QQVRURVJOIHdyaXRpbmcgYSAwKS4KPiAKPj4gKwo+PiArCS8qIE1ha2Ugc3VyZSB0aGUg dGVzdCBwYXR0ZXJuIGlzIHByb2dyYW1tZWQgaW4gdGhlIGhhcmR3YXJlICovCj4+ICsJd21iKCk7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1MzIgZHBfY2F0YWxvZ19jdHJsX3JlYWRfcGh5X3BhdHRl cm4oc3RydWN0IGRwX2NhdGFsb2dfY3RybCAKPj4gKmN0cmwpCj4+ICt7Cj4+ICsJc3RydWN0IGRw X2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBOVUxM Owo+PiArCj4+ICsJaWYgKCFjdHJsKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7 Cj4+ICsJCXJldHVybiAwOwo+PiArCX0KPj4gKwo+PiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3Ry bCk7Cj4+ICsKPj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKPj4gKwo+PiAr CXJldHVybiBkcF9yZWFkKGJhc2UgKyBEUF9NQUlOTElOS19SRUFEWSk7Cj4+ICt9Cj4+ICsKPj4g Ky8qIHBhbmVsIHJlbGF0ZWQgY2F0YWxvZyBmdW5jdGlvbnMgKi8KPj4gK3N0YXRpYyBpbnQgZHBf Y2F0YWxvZ19wYW5lbF90aW1pbmdfY2ZnKHN0cnVjdCBkcF9jYXRhbG9nX3BhbmVsIAo+PiAqcGFu ZWwpCj4+ICt7Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl2 b2lkIF9faW9tZW0gKmJhc2U7Cj4+ICsKPj4gKwlpZiAoIXBhbmVsKSB7Cj4+ICsJCXByX2Vycigi aW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+PiArCWRwX2Nh dGFsb2dfZ2V0X3ByaXYocGFuZWwpOwo+PiArCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfbGluay5i YXNlOwo+PiArCj4+ICsJZHBfd3JpdGUoYmFzZSArIERQX1RPVEFMX0hPUl9WRVIsIHBhbmVsLT50 b3RhbCk7Cj4+ICsJZHBfd3JpdGUoYmFzZSArIERQX1NUQVJUX0hPUl9WRVJfRlJPTV9TWU5DLCBw YW5lbC0+c3luY19zdGFydCk7Cj4+ICsJZHBfd3JpdGUoYmFzZSArIERQX0hTWU5DX1ZTWU5DX1dJ RFRIX1BPTEFSSVRZLCAKPj4gcGFuZWwtPndpZHRoX2JsYW5raW5nKTsKPj4gKwlkcF93cml0ZShi YXNlICsgRFBfQUNUSVZFX0hPUl9WRVIsIHBhbmVsLT5kcF9hY3RpdmUpOwo+PiArZW5kOgo+IAo+ IHVzZWxlc3MgbGFiZWwsIGJ1dCBpdCdsbCBwcm9iYWJseSBnbyBhd2F5IHdoZW4geW91IHN0cmlw IG91dCBhbGwgb2YgdGhlCj4gdW5uZWNlc3NhcnkgTlVMTCBjaGVja3MgZnJvbSB0aGUgZHJpdmVy Lgo+IAo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9n X2F1ZGlvX2luaXQoc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gKmF1ZGlvKQo+PiArewo+PiArCXN0 cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4+ICsJc3RhdGljIHUzMiBzZHBfbWFw W11bRFBfQVVESU9fU0RQX0hFQURFUl9NQVhdID0gewo+PiArCQl7Cj4+ICsJCQlNTVNTX0RQX0FV RElPX1NUUkVBTV8wLAo+PiArCQkJTU1TU19EUF9BVURJT19TVFJFQU1fMSwKPj4gKwkJCU1NU1Nf RFBfQVVESU9fU1RSRUFNXzEsCj4+ICsJCX0sCj4+ICsJCXsKPj4gKwkJCU1NU1NfRFBfQVVESU9f VElNRVNUQU1QXzAsCj4+ICsJCQlNTVNTX0RQX0FVRElPX1RJTUVTVEFNUF8xLAo+PiArCQkJTU1T U19EUF9BVURJT19USU1FU1RBTVBfMSwKPj4gKwkJfSwKPj4gKwkJewo+PiArCQkJTU1TU19EUF9B VURJT19JTkZPRlJBTUVfMCwKPj4gKwkJCU1NU1NfRFBfQVVESU9fSU5GT0ZSQU1FXzEsCj4+ICsJ CQlNTVNTX0RQX0FVRElPX0lORk9GUkFNRV8xLAo+PiArCQl9LAo+PiArCQl7Cj4+ICsJCQlNTVNT X0RQX0FVRElPX0NPUFlNQU5BR0VNRU5UXzAsCj4+ICsJCQlNTVNTX0RQX0FVRElPX0NPUFlNQU5B R0VNRU5UXzEsCj4+ICsJCQlNTVNTX0RQX0FVRElPX0NPUFlNQU5BR0VNRU5UXzEsCj4+ICsJCX0s Cj4+ICsJCXsKPj4gKwkJCU1NU1NfRFBfQVVESU9fSVNSQ18wLAo+PiArCQkJTU1TU19EUF9BVURJ T19JU1JDXzEsCj4+ICsJCQlNTVNTX0RQX0FVRElPX0lTUkNfMSwKPj4gKwkJfSwKPj4gKwl9Owo+ PiArCj4+ICsJaWYgKCFhdWRpbykKPj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJZHBfY2F0YWxvZ19n ZXRfcHJpdihhdWRpbyk7Cj4+ICsKPj4gKwljYXRhbG9nLT5hdWRpb19tYXAgPSBzZHBfbWFwOwo+ IAo+IEhtbSwgdGhpcyBpcyBhIGJpdCBzcG9va3ksIHdlJ3JlIHN0b3JpbmcgYSAobm9uLWNvbnN0 KSBwb2ludGVyIHRvIGEgCj4gc3RhdGljCj4gc3RhY2sgdmFyaWFibGUuIEZvcnR1bmF0ZWx5IHRo aXMgbG9va3MgbGlrZSBpdCdsbCBiZSBlYXN5IHRvIGZpeCBzaW5jZSAKPiB0aGlzCj4gZGF0YSBp cyBvbmx5IGFjY2Vzc2VkIGluIHRoaXMgZmlsZS4gU28gbW92ZSB0aGUgbWFwIGludG8gYSBzdGF0 aWMgY29uc3QgCj4gZ2xvYmFsCj4gYW5kIHJlZmVyZW5jZSBpdCBkaXJlY3RseSB3aGVuIG5lZWRl ZCAoYW5kIGRyb3AgYXVkaW9fbWFwKS4KPiAKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBf Y2F0YWxvZ19hdWRpb19jb25maWdfc2RwKHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvIAo+PiAqYXVk aW8pCj4+ICt7Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl2 b2lkIF9faW9tZW0gKmJhc2U7Cj4+ICsJdTMyIHNkcF9jZmcgPSAwOwo+PiArCXUzMiBzZHBfY2Zn MiA9IDA7Cj4+ICsKPj4gKwlpZiAoIWF1ZGlvKQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwlkcF9j YXRhbG9nX2dldF9wcml2KGF1ZGlvKTsKPj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsu YmFzZTsKPj4gKwo+PiArCXNkcF9jZmcgPSBkcF9yZWFkKGJhc2UgKyBNTVNTX0RQX1NEUF9DRkcp Owo+PiArCj4+ICsJLyogQVVESU9fVElNRVNUQU1QX1NEUF9FTiAqLwo+PiArCXNkcF9jZmcgfD0g QklUKDEpOwo+PiArCS8qIEFVRElPX1NUUkVBTV9TRFBfRU4gKi8KPj4gKwlzZHBfY2ZnIHw9IEJJ VCgyKTsKPj4gKwkvKiBBVURJT19DT1BZX01BTkFHRU1FTlRfU0RQX0VOICovCj4+ICsJc2RwX2Nm ZyB8PSBCSVQoNSk7Cj4+ICsJLyogQVVESU9fSVNSQ19TRFBfRU4gICovCj4+ICsJc2RwX2NmZyB8 PSBCSVQoNik7Cj4+ICsJLyogQVVESU9fSU5GT0ZSQU1FX1NEUF9FTiAgKi8KPj4gKwlzZHBfY2Zn IHw9IEJJVCgyMCk7Cj4gCj4gI2RlZmluZSB0aGUgdmFsdWVzIGFuZCBjb21iaW5lIHRoZSBhc3Np Z25tZW50Cj4gCj4+ICsKPj4gKwlwcl9kZWJ1Zygic2RwX2NmZyA9IDB4JXhcbiIsIHNkcF9jZmcp Owo+PiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX1NEUF9DRkcsIHNkcF9jZmcpOwo+PiArCj4+ ICsJc2RwX2NmZzIgPSBkcF9yZWFkKGJhc2UgKyBNTVNTX0RQX1NEUF9DRkcyKTsKPj4gKwkvKiBJ RlJNX1JFR1NSQyAtPiBEbyBub3QgdXNlIHJlZyB2YWx1ZXMgKi8KPj4gKwlzZHBfY2ZnMiAmPSB+ QklUKDApOwo+PiArCS8qIEFVRElPX1NUUkVBTV9IQjNfUkVHU1JDLT4gRG8gbm90IHVzZSByZWcg dmFsdWVzICovCj4+ICsJc2RwX2NmZzIgJj0gfkJJVCgxKTsKPiAKPiBUaGUgcmVzZXQgdmFsdWUg b2YgdGhpcyByZWdpc3RlciBpcyAweDQsIHNvIGhvdyBjYW4gdGhlIGJpdHMgaW4gCj4gcG9zaXRp b24gMC8xCj4gZ2V0IGZsaXBwZWQ/IFdlIHNob3VsZG4ndCBuZWVkIHRoaXMgY29kZSwgYWZhaWN0 Lgo+IAo+IElmIHdlIGRvLCB0aGUgc2FtZSBjb21tZW50cyByZWdhcmRpbmcgI2RlZmluZSBhbmQg Y29tYmluYXRpb24gYXMgYWJvdmUuCj4gCj4+ICsKPj4gKwlwcl9kZWJ1Zygic2RwX2NmZzIgPSAw eCV4XG4iLCBzZHBfY2ZnMik7Cj4+ICsJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfU0RQX0NGRzIs IHNkcF9jZmcyKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19hdWRpb19n ZXRfaGVhZGVyKHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvIAo+PiAqYXVkaW8pCj4+ICt7Cj4+ICsJ c3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl1MzIgKCpzZHBfbWFwKVtE UF9BVURJT19TRFBfSEVBREVSX01BWF07Cj4+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+PiArCWVu dW0gZHBfY2F0YWxvZ19hdWRpb19zZHBfdHlwZSBzZHA7Cj4+ICsJZW51bSBkcF9jYXRhbG9nX2F1 ZGlvX2hlYWRlcl90eXBlIGhlYWRlcjsKPj4gKwo+PiArCWlmICghYXVkaW8pCj4+ICsJCXJldHVy bjsKPj4gKwo+PiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXVkaW8pOwo+PiArCj4+ICsJYmFzZSAg ICA9IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJhc2U7Cj4+ICsJc2RwX21hcCA9IGNhdGFsb2ctPmF1 ZGlvX21hcDsKPj4gKwlzZHAgICAgID0gYXVkaW8tPnNkcF90eXBlOwo+PiArCWhlYWRlciAgPSBh dWRpby0+c2RwX2hlYWRlcjsKPj4gKwo+PiArCWF1ZGlvLT5kYXRhID0gZHBfcmVhZChiYXNlICsg c2RwX21hcFtzZHBdW2hlYWRlcl0pOwo+PiArfQo+IAo+IFRoaXMgZnVuY3Rpb24gaXMgdW51c2Vk LCBwbGVhc2UgcmVtb3ZlLgo+IAo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2F1ZGlv X3NldF9oZWFkZXIoc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gCj4+ICphdWRpbykKPj4gK3sKPj4g KwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+PiArCXUzMiAoKnNkcF9tYXAp W0RQX0FVRElPX1NEUF9IRUFERVJfTUFYXTsKPj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4+ICsJ ZW51bSBkcF9jYXRhbG9nX2F1ZGlvX3NkcF90eXBlIHNkcDsKPj4gKwllbnVtIGRwX2NhdGFsb2df YXVkaW9faGVhZGVyX3R5cGUgaGVhZGVyOwo+PiArCXUzMiBkYXRhOwo+PiArCj4+ICsJaWYgKCFh dWRpbykKPj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihhdWRpbyk7 Cj4+ICsKPj4gKwliYXNlICAgID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKPj4gKwlzZHBf bWFwID0gY2F0YWxvZy0+YXVkaW9fbWFwOwo+PiArCXNkcCAgICAgPSBhdWRpby0+c2RwX3R5cGU7 Cj4+ICsJaGVhZGVyICA9IGF1ZGlvLT5zZHBfaGVhZGVyOwo+PiArCWRhdGEgICAgPSBhdWRpby0+ ZGF0YTsKPj4gKwo+PiArCWRwX3dyaXRlKGJhc2UgKyBzZHBfbWFwW3NkcF1baGVhZGVyXSwgZGF0 YSk7Cj4+ICt9Cj4gCj4gVGhpcyBmdW5jdGlvbiBpcyB1bnVzZWQsIHBsZWFzZSByZW1vdmUuCj4g Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfYXVkaW9fY29uZmlnX2FjcihzdHJ1Y3Qg ZHBfY2F0YWxvZ19hdWRpbyAKPj4gKmF1ZGlvKQo+PiArewo+PiArCXN0cnVjdCBkcF9jYXRhbG9n X3ByaXZhdGUgKmNhdGFsb2c7Cj4+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+PiArCXUzMiBhY3Jf Y3RybCwgc2VsZWN0Owo+PiArCj4+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihhdWRpbyk7Cj4+ICsK Pj4gKwlzZWxlY3QgPSBhdWRpby0+ZGF0YTsKPj4gKwliYXNlICAgPSBjYXRhbG9nLT5pby0+ZHBf bGluay5iYXNlOwo+PiArCj4+ICsJYWNyX2N0cmwgPSBzZWxlY3QgPDwgNCB8IEJJVCgzMSkgfCBC SVQoOCkgfCBCSVQoMTQpOwo+PiArCj4+ICsJcHJfZGVidWcoInNlbGVjdCA9IDB4JXgsIGFjcl9j dHJsID0gMHgleFxuIiwgc2VsZWN0LCBhY3JfY3RybCk7Cj4+ICsKPj4gKwlkcF93cml0ZShiYXNl ICsgTU1TU19EUF9BVURJT19BQ1JfQ1RSTCwgYWNyX2N0cmwpOwo+PiArfQo+IAo+IFRoaXMgZnVu Y3Rpb24gaXMgdW51c2VkLCBwbGVhc2UgcmVtb3ZlLgo+IAo+PiArCj4+ICtzdGF0aWMgdm9pZCBk cF9jYXRhbG9nX2F1ZGlvX3NhZmVfdG9fZXhpdF9sZXZlbChzdHJ1Y3QgCj4+IGRwX2NhdGFsb2df YXVkaW8gKmF1ZGlvKQo+PiArewo+PiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFs b2c7Cj4+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+PiArCXUzMiBtYWlubGlua19sZXZlbHMsIHNh ZmVfdG9fZXhpdF9sZXZlbDsKPj4gKwo+PiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXVkaW8pOwo+ PiArCj4+ICsJYmFzZSAgID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKPj4gKwlzYWZlX3Rv X2V4aXRfbGV2ZWwgPSBhdWRpby0+ZGF0YTsKPj4gKwo+PiArCW1haW5saW5rX2xldmVscyA9IGRw X3JlYWQoYmFzZSArIERQX01BSU5MSU5LX0xFVkVMUyk7Cj4+ICsJbWFpbmxpbmtfbGV2ZWxzICY9 IDB4RkUwOwo+PiArCW1haW5saW5rX2xldmVscyB8PSBzYWZlX3RvX2V4aXRfbGV2ZWw7Cj4+ICsK Pj4gKwlwcl9kZWJ1ZygibWFpbmxpbmtfbGV2ZWwgPSAweCV4LCBzYWZlX3RvX2V4aXRfbGV2ZWwg PSAweCV4XG4iLAo+PiArCQkJbWFpbmxpbmtfbGV2ZWxzLCBzYWZlX3RvX2V4aXRfbGV2ZWwpOwo+ PiArCj4+ICsJZHBfd3JpdGUoYmFzZSArIERQX01BSU5MSU5LX0xFVkVMUywgbWFpbmxpbmtfbGV2 ZWxzKTsKPj4gK30KPiAKPiBUaGlzIGZ1bmN0aW9uIGlzIHVudXNlZCwgcGxlYXNlIHJlbW92ZS4K PiAKPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19hdWRpb19lbmFibGUoc3RydWN0IGRw X2NhdGFsb2dfYXVkaW8gKmF1ZGlvKQo+PiArewo+PiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZh dGUgKmNhdGFsb2c7Cj4+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+PiArCWJvb2wgZW5hYmxlOwo+ PiArCXUzMiBhdWRpb19jdHJsOwo+PiArCj4+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihhdWRpbyk7 Cj4+ICsKPj4gKwliYXNlICAgPSBjYXRhbG9nLT5pby0+ZHBfbGluay5iYXNlOwo+PiArCWVuYWJs ZSA9ICEhYXVkaW8tPmRhdGE7Cj4+ICsKPj4gKwlhdWRpb19jdHJsID0gZHBfcmVhZChiYXNlICsg TU1TU19EUF9BVURJT19DRkcpOwo+PiArCj4+ICsJaWYgKGVuYWJsZSkKPj4gKwkJYXVkaW9fY3Ry bCB8PSBCSVQoMCk7Cj4+ICsJZWxzZQo+PiArCQlhdWRpb19jdHJsICY9IH5CSVQoMCk7Cj4+ICsK Pj4gKwlwcl9kZWJ1ZygiZHBfYXVkaW9fY2ZnID0gMHgleFxuIiwgYXVkaW9fY3RybCk7Cj4+ICsJ ZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfQVVESU9fQ0ZHLCBhdWRpb19jdHJsKTsKPj4gKwo+PiAr CS8qIG1ha2Ugc3VyZSBhdWRpbyBlbmdpbmUgaXMgZGlzYWJsZWQgKi8KPj4gKwl3bWIoKTsKPj4g K30KPiAKPiBUaGlzIGZ1bmN0aW9uIGlzIHVudXNlZCwgcGxlYXNlIHJlbW92ZS4KPiAKPj4gKwo+ PiArc3RydWN0IGRwX2NhdGFsb2cgKmRwX2NhdGFsb2dfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwg c3RydWN0IGRwX2lvIAo+PiAqaW8pCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1Y3Qg ZHBfY2F0YWxvZyAqZHBfY2F0YWxvZzsKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpj YXRhbG9nOwo+PiArCXN0cnVjdCBkcF9jYXRhbG9nX2F1eCBhdXggPSB7Cj4+ICsJCS5yZWFkX2Rh dGEgICAgID0gZHBfY2F0YWxvZ19hdXhfcmVhZF9kYXRhLAo+PiArCQkud3JpdGVfZGF0YSAgICA9 IGRwX2NhdGFsb2dfYXV4X3dyaXRlX2RhdGEsCj4+ICsJCS53cml0ZV90cmFucyAgID0gZHBfY2F0 YWxvZ19hdXhfd3JpdGVfdHJhbnMsCj4+ICsJCS5jbGVhcl90cmFucyAgID0gZHBfY2F0YWxvZ19h dXhfY2xlYXJfdHJhbnMsCj4+ICsJCS5yZXNldCAgICAgICAgID0gZHBfY2F0YWxvZ19hdXhfcmVz ZXQsCj4+ICsJCS51cGRhdGVfYXV4X2NmZyA9IGRwX2NhdGFsb2dfYXV4X3VwZGF0ZV9jZmcsCj4+ ICsJCS5lbmFibGUgICAgICAgID0gZHBfY2F0YWxvZ19hdXhfZW5hYmxlLAo+PiArCQkuc2V0dXAg ICAgICAgICA9IGRwX2NhdGFsb2dfYXV4X3NldHVwLAo+PiArCQkuZ2V0X2lycSAgICAgICA9IGRw X2NhdGFsb2dfYXV4X2dldF9pcnEsCj4gCj4gT3V0IG9mIHRoZXNlLCBpdCBzZWVtcyBsaWtlIHdy aXRlX3RyYW5zLCBjbGVhcl90cmFucywgdXBkYXRlX2F1eF9jZmcsIAo+IHNldHVwIGFuZAo+IGdl dF9pcnEgYXJlIGFsbCB1bnVzZWQuIFBsZWFzZSByZW1vdmUgdGhlbS4KPiAKPiBQbGVhc2UgYWxz byBjaGVjayB0aGUgb3RoZXIgZnVuY3Rpb25zIHRvIGVuc3VyZSB0aGV5J3JlIHVzZWQuCj4gCj4+ ICsJfTsKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsIGN0cmwgPSB7Cj4+ICsJCS5zdGF0ZV9j dHJsICAgICA9IGRwX2NhdGFsb2dfY3RybF9zdGF0ZV9jdHJsLAo+PiArCQkuY29uZmlnX2N0cmwg ICAgPSBkcF9jYXRhbG9nX2N0cmxfY29uZmlnX2N0cmwsCj4+ICsJCS5sYW5lX21hcHBpbmcgICA9 IGRwX2NhdGFsb2dfY3RybF9sYW5lX21hcHBpbmcsCj4+ICsJCS5tYWlubGlua19jdHJsICA9IGRw X2NhdGFsb2dfY3RybF9tYWlubGlua19jdHJsLAo+PiArCQkuY29uZmlnX21pc2MgICAgPSBkcF9j YXRhbG9nX2N0cmxfY29uZmlnX21pc2MsCj4+ICsJCS5jb25maWdfbXNhICAgICA9IGRwX2NhdGFs b2dfY3RybF9jb25maWdfbXNhLAo+PiArCQkuc2V0X3BhdHRlcm4gICAgPSBkcF9jYXRhbG9nX2N0 cmxfc2V0X3BhdHRlcm4sCj4+ICsJCS5yZXNldCAgICAgICAgICA9IGRwX2NhdGFsb2dfY3RybF9y ZXNldCwKPj4gKwkJLnVzYl9yZXNldCAgICAgID0gZHBfY2F0YWxvZ19jdHJsX3VzYl9yZXNldCwK Pj4gKwkJLm1haW5saW5rX3JlYWR5ID0gZHBfY2F0YWxvZ19jdHJsX21haW5saW5rX3JlYWR5LAo+ PiArCQkuZW5hYmxlX2lycSAgICAgPSBkcF9jYXRhbG9nX2N0cmxfZW5hYmxlX2lycSwKPj4gKwkJ LmhwZF9jb25maWcgICAgID0gZHBfY2F0YWxvZ19jdHJsX2hwZF9jb25maWcsCj4+ICsJCS5waHlf cmVzZXQgICAgICA9IGRwX2NhdGFsb2dfY3RybF9waHlfcmVzZXQsCj4+ICsJCS5waHlfbGFuZV9j ZmcgICA9IGRwX2NhdGFsb2dfY3RybF9waHlfbGFuZV9jZmcsCj4+ICsJCS51cGRhdGVfdnhfcHgg ICA9IGRwX2NhdGFsb2dfY3RybF91cGRhdGVfdnhfcHgsCj4+ICsJCS5nZXRfaW50ZXJydXB0ICA9 IGRwX2NhdGFsb2dfY3RybF9nZXRfaW50ZXJydXB0LAo+PiArCQkudXBkYXRlX3RyYW5zZmVyX3Vu aXQgPSBkcF9jYXRhbG9nX2N0cmxfdXBkYXRlX3RyYW5zZmVyX3VuaXQsCj4+ICsJCS5zZW5kX3Bo eV9wYXR0ZXJuICAgID0gZHBfY2F0YWxvZ19jdHJsX3NlbmRfcGh5X3BhdHRlcm4sCj4+ICsJCS5y ZWFkX3BoeV9wYXR0ZXJuID0gZHBfY2F0YWxvZ19jdHJsX3JlYWRfcGh5X3BhdHRlcm4sCj4gCj4g U28sIHdoYXQncyB0aGUgYmVuZWZpdCBvZiBhZGRpbmcgdGhlIGNhdGFsb2cgYWJzdHJhY3Rpb25z PyBEbyB5b3UgZXZlciAKPiBoYXZlCj4gbXVsdGlwbGUvYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9u cyBvZiBhIGNhdGFsb2c/IEl0IGRvZXNuJ3Qgc2VlbSBsaWtlIAo+IGl0LiBZb3UKPiBzaG91bGQg anVzdCByZW1vdmUgYWxsIG9mIHRoZSBjYXRhbG9nIG92ZXJoZWFkIGFuZCBjYWxsIHRoZSBmdW5j dGlvbnMgCj4gZGlyZWN0bHkuCgpXZSB1c2UgY2F0YWxvZyBhYnN0cmFjdGlvbnMgZm9yIHR3byBk aWZmZXJlbnQgcmVhc29uczoKMS4gVG8gc3VwcG9ydCBtdWx0aXBsZSBoYXJkd2FyZSBzaW5jZSB0 aGVzZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGhhcmR3YXJlIApzcGVjaWZpYy4KMi4gVG8gdmlydHVh bGl6ZSBEUCBoYXJkd2FyZS4KCk91ciBpbnRlcm5hbCBoYXJkd2FyZSBhbHJlYWR5IHN1cHBvcnRz IG11bHRpcGxlIGNoaXBzLiBXZSB3YW50IHRvIGtlZXAgCnRoZXNlIGFic3RyYWN0aW9ucyB0bwpt YWtlIHRoZSBjb2RlIGNvbnNpc3RlbnQgYmV0d2VlbiB1cHN0cmVhbSBhbmQgaW50ZXJuYWwgaW1w bGVtZW50YXRpb24uCgo+IAo+PiArCX07Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gYXVk aW8gPSB7Cj4+ICsJCS5pbml0ICAgICAgID0gZHBfY2F0YWxvZ19hdWRpb19pbml0LAo+PiArCQku Y29uZmlnX2FjciA9IGRwX2NhdGFsb2dfYXVkaW9fY29uZmlnX2FjciwKPj4gKwkJLmVuYWJsZSAg ICAgPSBkcF9jYXRhbG9nX2F1ZGlvX2VuYWJsZSwKPj4gKwkJLmNvbmZpZ19zZHAgPSBkcF9jYXRh bG9nX2F1ZGlvX2NvbmZpZ19zZHAsCj4+ICsJCS5zZXRfaGVhZGVyID0gZHBfY2F0YWxvZ19hdWRp b19zZXRfaGVhZGVyLAo+PiArCQkuZ2V0X2hlYWRlciA9IGRwX2NhdGFsb2dfYXVkaW9fZ2V0X2hl YWRlciwKPj4gKwkJLnNhZmVfdG9fZXhpdF9sZXZlbCA9IGRwX2NhdGFsb2dfYXVkaW9fc2FmZV90 b19leGl0X2xldmVsLAo+PiArCX07Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgcGFuZWwg PSB7Cj4+ICsJCS50aW1pbmdfY2ZnID0gZHBfY2F0YWxvZ19wYW5lbF90aW1pbmdfY2ZnLAo+PiAr CQkudHBnX2NvbmZpZyA9IGRwX2NhdGFsb2dfcGFuZWxfdHBnX2NmZywKPj4gKwl9Owo+PiArCj4+ ICsJaWYgKCFpbykgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQlyYyA9 IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZXJyb3I7Cj4+ICsJfQo+PiArCj4+ICsJY2F0YWxvZyAgPSBk ZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmNhdGFsb2cpLCBHRlBfS0VSTkVMKTsKPj4gKwlpZiAo IWNhdGFsb2cpIHsKPj4gKwkJcmMgPSAtRU5PTUVNOwo+PiArCQlnb3RvIGVycm9yOwo+PiArCX0K Pj4gKwo+PiArCWNhdGFsb2ctPmRldiA9IGRldjsKPj4gKwljYXRhbG9nLT5pbyA9IGlvOwo+PiAr Cj4+ICsJZHBfY2F0YWxvZyA9ICZjYXRhbG9nLT5kcF9jYXRhbG9nOwo+PiArCj4+ICsJZHBfY2F0 YWxvZy0+YXV4ICAgPSBhdXg7Cj4+ICsJZHBfY2F0YWxvZy0+Y3RybCAgPSBjdHJsOwo+PiArCWRw X2NhdGFsb2ctPmF1ZGlvID0gYXVkaW87Cj4+ICsJZHBfY2F0YWxvZy0+cGFuZWwgPSBwYW5lbDsK Pj4gKwo+PiArCXJldHVybiBkcF9jYXRhbG9nOwo+PiArZXJyb3I6Cj4+ICsJcmV0dXJuIEVSUl9Q VFIocmMpOwo+PiArfQo+PiArCj4+ICt2b2lkIGRwX2NhdGFsb2dfcHV0KHN0cnVjdCBkcF9jYXRh bG9nICpkcF9jYXRhbG9nKQo+PiArewo+PiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNh dGFsb2c7Cj4+ICsKPj4gKwlpZiAoIWRwX2NhdGFsb2cpCj4+ICsJCXJldHVybjsKPj4gKwo+PiAr CWNhdGFsb2cgPSBjb250YWluZXJfb2YoZHBfY2F0YWxvZywgc3RydWN0IGRwX2NhdGFsb2dfcHJp dmF0ZSwKPj4gKwkJCQlkcF9jYXRhbG9nKTsKPj4gKwo+PiArCWRldm1fa2ZyZWUoY2F0YWxvZy0+ ZGV2LCBjYXRhbG9nKTsKPj4gK30KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHAvZHBfY2F0YWxvZy5oIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5o Cj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjU4OTUxZGYKPj4gLS0t IC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2NhdGFsb2cuaAo+ PiBAQCAtMCwwICsxLDE0NCBAQAo+PiArLyoKPj4gKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE4 LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyAKPj4gcmVzZXJ2ZWQuCj4+ICsgKgo+ PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciAKPj4gbW9kaWZ5Cj4+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKPj4gKyAqIG9ubHkgdmVyc2lv biAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+PiArICoK Pj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAo+PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPj4gKyAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ICsgKgo+PiArICovCj4+ICsKPj4g KyNpZm5kZWYgX0RQX0NBVEFMT0dfSF8KPj4gKyNkZWZpbmUgX0RQX0NBVEFMT0dfSF8KPj4gKwo+ PiArI2luY2x1ZGUgImRwX3BhcnNlci5oIgo+PiArCj4+ICsvKiBpbnRlcnJ1cHRzICovCj4+ICsj ZGVmaW5lIERQX0lOVFJfSFBECQlCSVQoMCkKPj4gKyNkZWZpbmUgRFBfSU5UUl9BVVhfSTJDX0RP TkUJQklUKDMpCj4+ICsjZGVmaW5lIERQX0lOVFJfV1JPTkdfQUREUglCSVQoNikKPj4gKyNkZWZp bmUgRFBfSU5UUl9USU1FT1VUCQlCSVQoOSkKPj4gKyNkZWZpbmUgRFBfSU5UUl9OQUNLX0RFRkVS CUJJVCgxMikKPj4gKyNkZWZpbmUgRFBfSU5UUl9XUk9OR19EQVRBX0NOVAlCSVQoMTUpCj4+ICsj ZGVmaW5lIERQX0lOVFJfSTJDX05BQ0sJQklUKDE4KQo+PiArI2RlZmluZSBEUF9JTlRSX0kyQ19E RUZFUglCSVQoMjEpCj4+ICsjZGVmaW5lIERQX0lOVFJfUExMX1VOTE9DS0VECUJJVCgyNCkKPj4g KyNkZWZpbmUgRFBfSU5UUl9BVVhfRVJST1IJQklUKDI3KQo+PiArCj4+ICsjZGVmaW5lIERQX0lO VFJfUkVBRFlfRk9SX1ZJREVPCQlCSVQoMCkKPj4gKyNkZWZpbmUgRFBfSU5UUl9JRExFX1BBVFRF Uk5fU0VOVAlCSVQoMykKPj4gKyNkZWZpbmUgRFBfSU5UUl9GUkFNRV9FTkQJCUJJVCg2KQo+PiAr I2RlZmluZSBEUF9JTlRSX0NSQ19VUERBVEVECQlCSVQoOSkKPj4gKwo+PiArc3RydWN0IGRwX2Nh dGFsb2dfYXV4IHsKPj4gKwl1MzIgZGF0YTsKPj4gKwl1MzIgaXNyOwo+PiArCj4+ICsJdTMyICgq cmVhZF9kYXRhKShzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCk7Cj4+ICsJaW50ICgqd3JpdGVf ZGF0YSkoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgpOwo+PiArCWludCAoKndyaXRlX3RyYW5z KShzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCk7Cj4+ICsJaW50ICgqY2xlYXJfdHJhbnMpKHN0 cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4LCBib29sIHJlYWQpOwo+PiArCXZvaWQgKCpyZXNldCko c3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgpOwo+PiArCXZvaWQgKCplbmFibGUpKHN0cnVjdCBk cF9jYXRhbG9nX2F1eCAqYXV4LCBib29sIGVuYWJsZSk7Cj4+ICsJdm9pZCAoKnVwZGF0ZV9hdXhf Y2ZnKShzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwKPj4gKwkJc3RydWN0IGRwX2F1eF9jZmcg KmNmZywgZW51bSBkcF9waHlfYXV4X2NvbmZpZ190eXBlIHR5cGUpOwo+PiArCXZvaWQgKCpzZXR1 cCkoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgsCj4+ICsJCQlzdHJ1Y3QgZHBfYXV4X2NmZyAq YXV4X2NmZyk7Cj4+ICsJdm9pZCAoKmdldF9pcnEpKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4 LCBib29sIGNtZF9idXN5KTsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBkcF9jYXRhbG9nX2N0cmwg ewo+PiArCXUzMiBkcF90dTsKPj4gKwl1MzIgdmFsaWRfYm91bmRhcnk7Cj4+ICsJdTMyIHZhbGlk X2JvdW5kYXJ5MjsKPj4gKwl1MzIgaXNyOwo+PiArCj4+ICsJdm9pZCAoKnN0YXRlX2N0cmwpKHN0 cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsIHUzMiBzdGF0ZSk7Cj4+ICsJdm9pZCAoKmNvbmZp Z19jdHJsKShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCB1MzIgY29uZmlnKTsKPj4gKwl2 b2lkICgqbGFuZV9tYXBwaW5nKShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsKTsKPj4gKwl2 b2lkICgqbWFpbmxpbmtfY3RybCkoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgYm9vbCBl bmFibGUpOwo+PiArCXZvaWQgKCpjb25maWdfbWlzYykoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAq Y3RybCwgdTMyIGNjLCB1MzIgdGIpOwo+PiArCXZvaWQgKCpjb25maWdfbXNhKShzdHJ1Y3QgZHBf Y2F0YWxvZ19jdHJsICpjdHJsLCB1MzIgcmF0ZSwKPj4gKwkJCQl1MzIgc3RyZWFtX3JhdGVfa2h6 LCBib29sIGZpeGVkX252aWQpOwo+PiArCXZvaWQgKCpzZXRfcGF0dGVybikoc3RydWN0IGRwX2Nh dGFsb2dfY3RybCAqY3RybCwgdTMyIHBhdHRlcm4pOwo+PiArCXZvaWQgKCpyZXNldCkoc3RydWN0 IGRwX2NhdGFsb2dfY3RybCAqY3RybCk7Cj4+ICsJdm9pZCAoKnVzYl9yZXNldCkoc3RydWN0IGRw X2NhdGFsb2dfY3RybCAqY3RybCwgYm9vbCBmbGlwKTsKPj4gKwlib29sICgqbWFpbmxpbmtfcmVh ZHkpKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpOwo+PiArCXZvaWQgKCplbmFibGVfaXJx KShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCBib29sIGVuYWJsZSk7Cj4+ICsJdm9pZCAo KmhwZF9jb25maWcpKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsIGJvb2wgZW5hYmxlKTsK Pj4gKwl2b2lkICgqcGh5X3Jlc2V0KShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsKTsKPj4g Kwl2b2lkICgqcGh5X2xhbmVfY2ZnKShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCBib29s IGZsaXBwZWQsCj4+ICsJCQkJdTggbGFuZV9jbnQpOwo+PiArCXZvaWQgKCp1cGRhdGVfdnhfcHgp KHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsIHU4IHZfbGV2ZWwsCj4+ICsJCQkJdTggcF9s ZXZlbCk7Cj4+ICsJdm9pZCAoKmdldF9pbnRlcnJ1cHQpKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwg KmN0cmwpOwo+PiArCXZvaWQgKCp1cGRhdGVfdHJhbnNmZXJfdW5pdCkoc3RydWN0IGRwX2NhdGFs b2dfY3RybCAqY3RybCk7Cj4+ICsJdm9pZCAoKnNlbmRfcGh5X3BhdHRlcm4pKHN0cnVjdCBkcF9j YXRhbG9nX2N0cmwgKmN0cmwsCj4+ICsJCQl1MzIgcGF0dGVybik7Cj4+ICsJdTMyICgqcmVhZF9w aHlfcGF0dGVybikoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCk7Cj4+ICt9Owo+PiArCj4+ ICtlbnVtIGRwX2NhdGFsb2dfYXVkaW9fc2RwX3R5cGUgewo+PiArCURQX0FVRElPX1NEUF9TVFJF QU0sCj4+ICsJRFBfQVVESU9fU0RQX1RJTUVTVEFNUCwKPj4gKwlEUF9BVURJT19TRFBfSU5GT0ZS QU1FLAo+PiArCURQX0FVRElPX1NEUF9DT1BZTUFOQUdFTUVOVCwKPj4gKwlEUF9BVURJT19TRFBf SVNSQywKPj4gKwlEUF9BVURJT19TRFBfTUFYLAo+PiArfTsKPj4gKwo+PiArZW51bSBkcF9jYXRh bG9nX2F1ZGlvX2hlYWRlcl90eXBlIHsKPj4gKwlEUF9BVURJT19TRFBfSEVBREVSXzEsCj4+ICsJ RFBfQVVESU9fU0RQX0hFQURFUl8yLAo+PiArCURQX0FVRElPX1NEUF9IRUFERVJfMywKPj4gKwlE UF9BVURJT19TRFBfSEVBREVSX01BWCwKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBkcF9jYXRhbG9n X2F1ZGlvIHsKPj4gKwllbnVtIGRwX2NhdGFsb2dfYXVkaW9fc2RwX3R5cGUgc2RwX3R5cGU7Cj4+ ICsJZW51bSBkcF9jYXRhbG9nX2F1ZGlvX2hlYWRlcl90eXBlIHNkcF9oZWFkZXI7Cj4+ICsJdTMy IGRhdGE7Cj4+ICsKPj4gKwl2b2lkICgqaW5pdCkoc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gKmF1 ZGlvKTsKPj4gKwl2b2lkICgqZW5hYmxlKShzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqYXVkaW8p Owo+PiArCXZvaWQgKCpjb25maWdfYWNyKShzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqYXVkaW8p Owo+PiArCXZvaWQgKCpjb25maWdfc2RwKShzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqYXVkaW8p Owo+PiArCXZvaWQgKCpzZXRfaGVhZGVyKShzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqYXVkaW8p Owo+PiArCXZvaWQgKCpnZXRfaGVhZGVyKShzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqYXVkaW8p Owo+PiArCXZvaWQgKCpzYWZlX3RvX2V4aXRfbGV2ZWwpKHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlv ICphdWRpbyk7Cj4gCj4gTm9uZSBvZiB0aGVzZSBhcmUgY2FsbGVkPyBTbyBnZXQgcmlkIG9mIHRo aXMgZW50aXJlIHN0cnVjdHVyZSwgdGhlIAo+IGZ1bmN0aW9ucwo+IHRoYXQgYXJlbid0IGNhbGxl ZCwgYW5kIHRoZSBhdWRpbyBlbnVtcyBhYm92ZS4KPiAKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBk cF9jYXRhbG9nX3BhbmVsIHsKPj4gKwl1MzIgdG90YWw7Cj4+ICsJdTMyIHN5bmNfc3RhcnQ7Cj4+ ICsJdTMyIHdpZHRoX2JsYW5raW5nOwo+PiArCXUzMiBkcF9hY3RpdmU7Cj4+ICsKPj4gKwkvKiBU UEcgKi8KPj4gKwl1MzIgaHN5bmNfcGVyaW9kOwo+PiArCXUzMiB2c3luY19wZXJpb2Q7Cj4+ICsJ dTMyIGRpc3BsYXlfdl9zdGFydDsKPj4gKwl1MzIgZGlzcGxheV92X2VuZDsKPj4gKwl1MzIgdl9z eW5jX3dpZHRoOwo+PiArCXUzMiBoc3luY19jdGw7Cj4+ICsJdTMyIGRpc3BsYXlfaGN0bDsKPiAK PiBBbGwgb2YgdGhpcyBpbmZvcm1hdGlvbiBpcyBhbHJlYWR5IGF2YWlsYWJsZSBmcm9tIGRybSBj b3JlLCBzbyBpdCBjYW4gCj4gZ28uCj4gCj4+ICsKPj4gKwlpbnQgKCp0aW1pbmdfY2ZnKShzdHJ1 Y3QgZHBfY2F0YWxvZ19wYW5lbCAqcGFuZWwpOwo+PiArCXZvaWQgKCp0cGdfY29uZmlnKShzdHJ1 Y3QgZHBfY2F0YWxvZ19wYW5lbCAqcGFuZWwsIGJvb2wgZW5hYmxlKTsKPiAKPiBBcyBzdWdnZXN0 ZWQgZWxzZXdoZXJlLCB0aGVzZSBmdW5jdGlvbnMgc2hvdWxkIGp1c3QgYmUgY2FsbGVkIGRpcmVj dGx5IAo+IHdoZXJldmVyCj4gYXBwbGljYWJsZS4gU28gd2UgY2FuIGdldCByaWQgb2YgdGhpcyBz dHJ1Y3QuCj4gCj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgZHBfY2F0YWxvZyB7Cj4+ICsJc3RydWN0 IGRwX2NhdGFsb2dfYXV4IGF1eDsKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsIGN0cmw7Cj4+ ICsJc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gYXVkaW87Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2df cGFuZWwgcGFuZWw7Cj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgZHBfY2F0YWxvZyAqZHBfY2F0YWxv Z19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHBfaW8gCj4+ICppbyk7Cj4+ICt2b2lk IGRwX2NhdGFsb2dfcHV0KHN0cnVjdCBkcF9jYXRhbG9nICpjYXRhbG9nKTsKPiAKPiBBcyBtZW50 aW9uZWQgYWJvdmUsIGFsbCBvZiB0aGlzIHNob3VsZCBiZSByZW1vdmVkLiBXZSBjYW4ganVzdCBj YWxsIHRoZQo+IGZ1bmN0aW9ucyBkaXJlY3RseS4KPiAKPj4gKwo+PiArI2VuZGlmIC8qIF9EUF9D QVRBTE9HX0hfICovCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0 cmwuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0cmwuYwo+PiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi4wOGE1MmY1Cj4+IC0tLSAvZGV2L251bGwKPj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jdHJsLmMKPj4gQEAgLTAsMCArMSwxNDc1 IEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTgsIFRoZSBMaW51eCBGb3Vu ZGF0aW9uLiBBbGwgcmlnaHRzIAo+PiByZXNlcnZlZC4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAo+PiBt b2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+PiArICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4+ICsgKgo+PiArICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+ ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgo+PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+PiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KPj4gKyAqCj4+ICsgKi8KPj4gKwo+PiArI2RlZmluZSBwcl9mbXQo Zm10KQkiW2RybS1kcF0gJXM6ICIgZm10LCBfX2Z1bmNfXwo+PiArCj4+ICsjaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Cj4+ICsjaW5jbHVk ZSA8bGludXgvZGVsYXkuaD4KPj4gKwo+PiArI2luY2x1ZGUgImRwX2N0cmwuaCIKPj4gKwo+PiAr I2RlZmluZSBEUF9LSFpfVE9fSFogMTAwMAo+PiArCj4+ICsjZGVmaW5lIERQX0NUUkxfSU5UUl9S RUFEWV9GT1JfVklERU8gICAgIEJJVCgwKQo+PiArI2RlZmluZSBEUF9DVFJMX0lOVFJfSURMRV9Q QVRURVJOX1NFTlQgIEJJVCgzKQo+PiArCj4+ICsvKiBkcCBzdGF0ZSBjdHJsICovCj4+ICsjZGVm aW5lIFNUX1RSQUlOX1BBVFRFUk5fMQkJQklUKDApCj4+ICsjZGVmaW5lIFNUX1RSQUlOX1BBVFRF Uk5fMgkJQklUKDEpCj4+ICsjZGVmaW5lIFNUX1RSQUlOX1BBVFRFUk5fMwkJQklUKDIpCj4+ICsj ZGVmaW5lIFNUX1RSQUlOX1BBVFRFUk5fNAkJQklUKDMpCj4+ICsjZGVmaW5lIFNUX1NZTUJPTF9F UlJfUkFURV9NRUFTVVJFTUVOVAlCSVQoNCkKPj4gKyNkZWZpbmUgU1RfUFJCUzcJCQlCSVQoNSkK Pj4gKyNkZWZpbmUgU1RfQ1VTVE9NXzgwX0JJVF9QQVRURVJOCUJJVCg2KQo+PiArI2RlZmluZSBT VF9TRU5EX1ZJREVPCQkJQklUKDcpCj4+ICsjZGVmaW5lIFNUX1BVU0hfSURMRQkJCUJJVCg4KQo+ IAo+IEknZCBsaWtlIHRvIHNlZSB0aGVzZSBkZWZpbmVkIHdpdGggRFBfU1RBVEVfQ1RSTCAoYW5k IAo+IHMvU1QvRFBfU1RBVEVfQ1RSTC8pLgo+IAo+PiArCj4+ICsjZGVmaW5lIE1SX0xJTktfVFJB SU5JTkcxICAweDgKPj4gKyNkZWZpbmUgTVJfTElOS19TWU1CT0xfRVJNIDB4ODAKPj4gKyNkZWZp bmUgTVJfTElOS19QUkJTNyAweDEwMAo+PiArI2RlZmluZSBNUl9MSU5LX0NVU1RPTTgwIDB4MjAw Cj4+ICsKPj4gK3N0cnVjdCBkcF92Y190dV9tYXBwaW5nX3RhYmxlIHsKPj4gKwl1MzIgdmljOwo+ PiArCXU4IGxhbmVzOwo+PiArCXU4IGxyYXRlOyAvKiBEUF9MSU5LX1JBVEUgLT4gMTYyKDYpLCAy NzAoMTApLCA1NDAoMjApLCA4MTAgKDMwKSAqLwo+PiArCXU4IGJwcDsKPj4gKwl1OCB2YWxpZF9i b3VuZGFyeV9saW5rOwo+PiArCXUxNiBkZWxheV9zdGFydF9saW5rOwo+PiArCWJvb2wgYm91bmRh cnlfbW9kZXJhdGlvbl9lbjsKPj4gKwl1OCB2YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5rOwo+PiAr CXU4IHVwcGVyX2JvdW5kYXJ5X2NvdW50Owo+PiArCXU4IGxvd2VyX2JvdW5kYXJ5X2NvdW50Owo+ PiArCXU4IHR1X3NpemVfbWludXMxOwo+IAo+IFBsZWFzZSBjaGVjayB0aGlzIHN0cnVjdCBmb3Ig dW51c2VkIG1lbWJlcnMsIHRoZXJlIGFyZSBhdCBsZWFzdCBhIAo+IGNvdXBsZS4KPiAKPj4gK307 Cj4+ICsKPj4gK3N0cnVjdCBkcF9jdHJsX3ByaXZhdGUgewo+PiArCXN0cnVjdCBkcF9jdHJsIGRw X2N0cmw7Cj4+ICsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+ICsJc3RydWN0IGRwX2F1eCAq YXV4Owo+PiArCXN0cnVjdCBkcF9wYW5lbCAqcGFuZWw7Cj4+ICsJc3RydWN0IGRwX2xpbmsgKmxp bms7Cj4+ICsJc3RydWN0IGRwX3Bvd2VyICpwb3dlcjsKPj4gKwlzdHJ1Y3QgZHBfcGFyc2VyICpw YXJzZXI7Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY2F0YWxvZzsKPiAKPiBPbmNlIHlv dSByZW1vdmUgc3RydWN0IGRwX2N0cmwgYW5kIGNhbGwgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSwg SSAKPiBzdXNwZWN0IHlvdQo+IGNhbiBnZXQgcmlkIG9mIGFsbCBvZiB0aGVzZS4KPiAKPj4gKwo+ PiArCXN0cnVjdCBjb21wbGV0aW9uIGlkbGVfY29tcDsKPj4gKwlzdHJ1Y3QgY29tcGxldGlvbiB2 aWRlb19jb21wOwo+PiArCj4+ICsJYm9vbCBvcmllbnRhdGlvbjsKPj4gKwlhdG9taWNfdCBhYm9y dGVkOwo+PiArCj4+ICsJdTMyIHBpeGVsX3JhdGU7Cj4+ICsJdTMyIHZpYzsKPiAKPiAndTMyIHZp Yycgc2hvd3MgdXAgaW4gMyBwbGFjZXMgaW4gdGhpcyBkcml2ZXIsIGJ1dCB0aGVyZSBpcyBub3Qg b25lIHVzZSAKPiBvZiBhbnkKPiB2aWMgOikgUGxlYXNlIHJlbW92ZSBmcm9tIGhlcmUgYW5kIGVs c2V3aGVyZS4KPiAKPj4gK307Cj4+ICsKPj4gK2VudW0gbm90aWZpY2F0aW9uX3N0YXR1cyB7Cj4+ ICsJTk9USUZZX1VOS05PV04sCj4+ICsJTk9USUZZX0NPTk5FQ1QsCj4+ICsJTk9USUZZX0RJU0NP Tk5FQ1QsCj4+ICsJTk9USUZZX0NPTk5FQ1RfSVJRX0hQRCwKPj4gKwlOT1RJRllfRElTQ09OTkVD VF9JUlFfSFBELAo+PiArfTsKPiAKPiBVbnVzZWQsIHBsZWFzZSByZW1vdmUuCj4gCj4+ICsKPj4g K3N0YXRpYyB2b2lkIGRwX2N0cmxfaWRsZV9wYXR0ZXJuc19zZW50KHN0cnVjdCBkcF9jdHJsX3By aXZhdGUgKmN0cmwpCj4+ICt7Cj4+ICsJcHJfZGVidWcoImlkbGVfcGF0dGVybnNfc2VudFxuIik7 Cj4+ICsJY29tcGxldGUoJmN0cmwtPmlkbGVfY29tcCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2 b2lkIGRwX2N0cmxfdmlkZW9fcmVhZHkoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKPj4g K3sKPj4gKwlwcl9kZWJ1ZygiZHBfdmlkZW9fcmVhZHlcbiIpOwo+PiArCWNvbXBsZXRlKCZjdHJs LT52aWRlb19jb21wKTsKPj4gK30KPiAKPiBUaGVzZSBmdW5jdGlvbnMgZG9uJ3QgcHJvdmlkZSB2 YWx1ZSwgcGxlYXNlIHJlbW92ZSBhbmQganVzdCBjYWxsIAo+IGNvbXBsZXRlKCkKPiBkaXJlY3Rs eS4KPiAKPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfY3RybF9hYm9ydChzdHJ1Y3QgZHBfY3RybCAq ZHBfY3RybCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsOwo+PiArCj4+ ICsJaWYgKCFkcF9jdHJsKSB7Cj4+ICsJCXByX2VycigiSW52YWxpZCBpbnB1dCBkYXRhXG4iKTsK Pj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWN0cmwgPSBjb250YWluZXJfb2YoZHBfY3Ry bCwgc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSwgZHBfY3RybCk7Cj4gCj4gSkZZSSwgdGhpcyBpcyBz cHJpbmtsZWQgZXZlcnl3aGVyZSwgd291bGQgYmUgYSBnb29kIGNhbmRpZGF0ZSBmb3IgYW4gCj4g aW5saW5lCj4gZnVuY3Rpb24uIFNpbmNlIGRwX2N0cmwgY2FuIGJlIHJlbW92ZWQsIGl0J3Mga2lu ZCBvZiBhIG1vb3QgcG9pbnQgbm93Lgo+IAo+PiArCj4+ICsJYXRvbWljX3NldCgmY3RybC0+YWJv cnRlZCwgMSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2N0cmxfc3RhdGVfY3RybChz dHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsLCB1MzIgCj4+IHN0YXRlKQo+PiArewo+PiArCWN0 cmwtPmNhdGFsb2ctPnN0YXRlX2N0cmwoY3RybC0+Y2F0YWxvZywgc3RhdGUpOwo+IAo+IE5vIG5l ZWQgdG8gd3JhcCB0aGlzIGluIGEgZnVuY3Rpb24KPiAKPj4gK30KPj4gKwo+PiArc3RhdGljIHZv aWQgZHBfY3RybF9wdXNoX2lkbGUoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpCj4+ICt7Cj4+ICsJ aW50IGNvbnN0IGlkbGVfcGF0dGVybl9jb21wbGV0aW9uX3RpbWVvdXRfbXMgPSAzICogSFogLyAx MDA7Cj4gCj4gVGhpcyBzaG91bGQgYmUgI2RlZmluZSdkIG91dHNpZGUgb2YgdGhlIGZ1bmN0aW9u aW5zdGVhZC4gQWxzbywgd2h5IHRoZSAKPiAnX21zXycKPiBzdWZmaXg/IFRoZSB1bml0cyBhcmUg aW4gamlmZmllcy4KPiAKPiBJIHRoaW5rIHNvbWV0aGluZyBsaWtlCj4gCj4gI2RlZmluZSBJRExF X1BBVFRFUk5fQ09NUExFVElPTl9USU1FT1VUX0pJRkZJRVMgKDMwICogSFogLyAxMDAwKSAvKiAz MCAKPiBtcyAqLwo+IAo+IHdvdWxkIGJlIGNsZWFyZXIuCj4gCj4+ICsJc3RydWN0IGRwX2N0cmxf cHJpdmF0ZSAqY3RybDsKPj4gKwo+PiArCWlmICghZHBfY3RybCkgewo+PiArCQlwcl9lcnIoIklu dmFsaWQgaW5wdXQgZGF0YVxuIik7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwljdHJs ID0gY29udGFpbmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUsIGRwX2N0cmwp Owo+PiArCj4+ICsJcmVpbml0X2NvbXBsZXRpb24oJmN0cmwtPmlkbGVfY29tcCk7Cj4gCj4gVGhp cyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBhIGJ1bmNoIG9mIHBsYWNlcywgYW5kIGlkbGVfY29t cCBpcyBhbHNvIAo+IHVzZWQgaW4gYQo+IGJ1bmNoIG9mIHBsYWNlcy4gQXJlIHlvdSBjZXJ0YWlu IHRoaXMgaXMgdGhyZWFkLXNhZmUgaWYgeW91IGhhdmUgCj4gY29uY3VycmVudAo+IGNhbGxlcnMg b3IgdXNlcnMgb2YgaWRsZV9jb21wPwo+IAo+PiArCWRwX2N0cmxfc3RhdGVfY3RybChjdHJsLCBT VF9QVVNIX0lETEUpOwo+PiArCj4+ICsJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQo JmN0cmwtPmlkbGVfY29tcCwKPj4gKwkJCWlkbGVfcGF0dGVybl9jb21wbGV0aW9uX3RpbWVvdXRf bXMpKQo+PiArCQlwcl93YXJuKCJQVVNIX0lETEUgcGF0dGVybiB0aW1lZG91dFxuIik7Cj4gCj4g UmV0dXJuIGFuIGVycm9yPwo+IAo+PiArCj4+ICsJcHJfZGVidWcoIm1haW5saW5rIG9mZiBkb25l XG4iKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfY3RybF9jb25maWdfY3RybChzdHJ1 Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQo+PiArewo+PiArCXUzMiBjb25maWcgPSAwLCB0YmQ7 Cj4+ICsJdTggKmRwY2QgPSBjdHJsLT5wYW5lbC0+ZHBjZDsKPj4gKwo+PiArCWNvbmZpZyB8PSAo MiA8PCAxMyk7IC8qIERlZmF1bHQtPiBMU0NMSyBESVY6IDEvNCBMQ0xLICAqLwo+IAo+ICNkZWZp bmUgdmFsdWUKPiAKPj4gKwljb25maWcgfD0gKDAgPDwgMTEpOyAvKiBSR0IgKi8KPiAKPiBUaGlz IGlzIGEgbm8tb3AsIGNhbiBiZSByZW1vdmVkCj4gCj4+ICsKPj4gKwkvKiBTY3JhbWJsZXIgcmVz ZXQgZW5hYmxlICovCj4+ICsJaWYgKGRwY2RbRFBfRURQX0NPTkZJR1VSQVRJT05fQ0FQXSAmIAo+ PiBEUF9BTFRFUk5BVEVfU0NSQU1CTEVSX1JFU0VUX0NBUCkKPj4gKwkJY29uZmlnIHw9ICgxIDw8 IDEwKTsKPj4gKwo+PiArCXRiZCA9IGN0cmwtPmxpbmstPmdldF90ZXN0X2JpdHNfZGVwdGgoY3Ry bC0+bGluaywKPj4gKwkJCWN0cmwtPnBhbmVsLT5waW5mby5icHApOwo+PiArCj4+ICsJaWYgKHRi ZCA9PSBEUF9URVNUX0JJVF9ERVBUSF9VTktOT1dOKQo+IAo+IFNob3VsZCB3ZSBwcmludCBhIGRl YnVnIG1lc3NhZ2UgaGVyZT8KPiAKPj4gKwkJdGJkID0gRFBfVEVTVF9CSVRfREVQVEhfODsKPj4g Kwo+PiArCWNvbmZpZyB8PSB0YmQgPDwgODsKPj4gKwo+PiArCS8qIE51bSBvZiBMYW5lcyAqLwo+ PiArCWNvbmZpZyB8PSAoKGN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmxhbmVfY291bnQgLSAxKSA8 PCA0KTsKPiAKPiBUaGVzZSBzaGlmdCB2YWx1ZXMgc2hvdWxkIGJlICNkZWZpbmVkCj4gCj4+ICsK Pj4gKwlpZiAoZHJtX2RwX2VuaGFuY2VkX2ZyYW1lX2NhcChkcGNkKSkKPj4gKwkJY29uZmlnIHw9 IDB4NDA7Cj4gCj4gI2RlZmluZSAweDQwCj4gCj4+ICsKPj4gKwljb25maWcgfD0gMHgwNDsgLyog cHJvZ3Jlc3NpdmUgdmlkZW8gKi8KPj4gKwo+PiArCWNvbmZpZyB8PSAweDAzOwkvKiBzeWNuIGNs b2NrICYgc3RhdGljIE12aWQgKi8KPiAKPiBBbmQgdGhlc2UsIHBsdXMgcy9zeWNuL3N5bmMvCj4g Cj4+ICsKPj4gKwljdHJsLT5jYXRhbG9nLT5jb25maWdfY3RybChjdHJsLT5jYXRhbG9nLCBjb25m aWcpOwo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGRwX2N0cmxfY29uZmlndXJlX3NvdXJjZV9w YXJhbXMoKSAtIGNvbmZpZ3VyZXMgRFAgdHJhbnNtaXR0ZXIgCj4+IHNvdXJjZSBwYXJhbXMKPj4g KyAqIEBjdHJsOiBEaXNwbGF5IFBvcnQgRHJpdmVyIGRhdGEKPj4gKyAqCj4+ICsgKiBDb25maWd1 cmVzIHRoZSBEUCB0cmFuc21pdHRlciBzb3VyY2UgcGFyYW1zIGluY2x1ZGluZyBkZXRhaWxzIHN1 Y2ggCj4+IGFzIGxhbmUKPj4gKyAqIGNvbmZpZ3VyYXRpb24sIG91dHB1dCBmb3JtYXQgYW5kIHNp bmsvcGFuZWwgdGltaW5nIGluZm9ybWF0aW9uLgo+PiArICovCj4+ICtzdGF0aWMgdm9pZCBkcF9j dHJsX2NvbmZpZ3VyZV9zb3VyY2VfcGFyYW1zKHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgCj4+ICpj dHJsKQo+PiArewo+PiArCXUzMiBjYywgdGI7Cj4+ICsKPj4gKwljdHJsLT5jYXRhbG9nLT5sYW5l X21hcHBpbmcoY3RybC0+Y2F0YWxvZyk7Cj4+ICsJY3RybC0+Y2F0YWxvZy0+bWFpbmxpbmtfY3Ry bChjdHJsLT5jYXRhbG9nLCB0cnVlKTsKPiAKPiBXZSBnbyB0aHJvdWdoIGN0cmwtPmNhdGFsb2ct PmNhbGxiYWNrX2hvb2sgdG8gY2FsbCBhIGZ1bmN0aW9uIHRoYXQgaXMgCj4gc3BlY2lmaWMKPiB0 byBjdHJsIGFuZCBvbmx5IGNhbGxlZCBpbiB0aGlzIGZpbGUuIEl0IGNvdWxkIGVhc2lseSBqdXN0 IGJlIGEgc3RhdGljIAo+IGZ1bmN0aW9uCj4gd2l0aG91dCBoYXZpbmcgdG8gZ28gdGhyb3VnaCAy IHN0cnVjdHMgYW5kIGEgY2FsbGJhY2sgaG9vay4KPiAKPj4gKwo+PiArCWRwX2N0cmxfY29uZmln X2N0cmwoY3RybCk7Cj4+ICsKPj4gKwl0YiA9IGN0cmwtPmxpbmstPmdldF90ZXN0X2JpdHNfZGVw dGgoY3RybC0+bGluaywKPj4gKwkJY3RybC0+cGFuZWwtPnBpbmZvLmJwcCk7Cj4+ICsJY2MgPSBj dHJsLT5saW5rLT5nZXRfY29sb3JpbWV0cnlfY29uZmlnKGN0cmwtPmxpbmspOwo+PiArCWN0cmwt PmNhdGFsb2ctPmNvbmZpZ19taXNjKGN0cmwtPmNhdGFsb2csIGNjLCB0Yik7Cj4gCj4gU2FtZSBj b21tZW50cyB3aXRoIHRoZXNlIGhvb2tzLCB0aGV5J3JlIG9ubHkgY2FsbGVkIGZyb20gdGhpcyBm aWxlLiAKPiBJJ2xsIHN0b3AKPiBoYXJwaW5nIG9uIHRoaXMsIGJ1dCBjb3VsZCB3ZSBwbGVhc2Ug cmVtb3ZlIHRoZSBsYXllcnMgb2YgaW5kaXJlY3Rpb24gCj4gYW5kIGp1c3QKPiBlbWJlZCBhbmQg Y2FsbCBmdW5jdGlvbnMgYXMgYXBwcm9wcmlhdGU/Cj4gCj4+ICsJY3RybC0+cGFuZWwtPnRpbWlu Z19jZmcoY3RybC0+cGFuZWwpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jdHJsX2dl dF9leHRyYV9yZXFfYnl0ZXModTY0IHJlc3VsdF92YWxpZCwKPj4gKwkJCQkJaW50IHZhbGlkX2Jk YXJ5X2xpbmssCj4+ICsJCQkJCXU2NCB2YWx1ZTEsIHU2NCB2YWx1ZTIsCj4+ICsJCQkJCWJvb2wg Km5lZ2F0aXZlLCB1NjQgKnJlc3VsdCwKPj4gKwkJCQkJdTY0IGNvbXBhcmUpCj4+ICt7Cj4+ICsJ Km5lZ2F0aXZlID0gZmFsc2U7Cj4+ICsJaWYgKHJlc3VsdF92YWxpZCA+PSBjb21wYXJlKSB7Cj4+ ICsJCWlmICh2YWxpZF9iZGFyeV9saW5rCj4+ICsJCQkJPj0gY29tcGFyZSkKPj4gKwkJCSpyZXN1 bHQgPSB2YWx1ZTEgKyB2YWx1ZTI7Cj4+ICsJCWVsc2Ugewo+PiArCQkJaWYgKHZhbHVlMSA8IHZh bHVlMikKPj4gKwkJCQkqbmVnYXRpdmUgPSB0cnVlOwo+PiArCQkJKnJlc3VsdCA9ICh2YWx1ZTEg Pj0gdmFsdWUyKSA/Cj4+ICsJCQkJKHZhbHVlMSAtIHZhbHVlMikgOiAodmFsdWUyIC0gdmFsdWUx KTsKPj4gKwkJfQo+PiArCX0gZWxzZSB7Cj4+ICsJCWlmICh2YWxpZF9iZGFyeV9saW5rCj4+ICsJ CQkJPj0gY29tcGFyZSkgewo+PiArCQkJaWYgKHZhbHVlMSA+PSB2YWx1ZTIpCj4+ICsJCQkJKm5l Z2F0aXZlID0gdHJ1ZTsKPj4gKwkJCSpyZXN1bHQgPSAodmFsdWUxID49IHZhbHVlMikgPwo+PiAr CQkJCSh2YWx1ZTEgLSB2YWx1ZTIpIDogKHZhbHVlMiAtIHZhbHVlMSk7Cj4+ICsJCX0gZWxzZSB7 Cj4+ICsJCQkqcmVzdWx0ID0gdmFsdWUxICsgdmFsdWUyOwo+PiArCQkJKm5lZ2F0aXZlID0gdHJ1 ZTsKPj4gKwkJfQo+PiArCX0KPiAKPiBJIHRoaW5rIHRoaXMgY2FuIGJlIHNpbXBsaWZpZWQgdG8g dGhlIGZvbGxvd2luZywgaXQncyBzdGlsbCBzdXBlciBoYXJkIAo+IHRvCj4gZm9sbG93LCBidXQg SSdtIG5vdCBzdXJlIGlmIHRoYXQgY2FuIGJlIGhlbHBlZC4KPiAKPiAgICAgICAgIGJvb2wgcmVz dWx0X2JpZ2dlciA9IHJlc3VsdF92YWxpZCA+PSBjb21wYXJlOwo+ICAgICAgICAgYm9vbCB2YWxp ZF9iZGFyeV9iaWdnZXIgPSB2YWxpZF9iZGFyeV9saW5rID49IGNvbXBhcmU7Cj4gCj4gCWlmIChy ZXN1bHRfYmlnZ2VyICYmIHZhbGlkX2JkYXJ5X2JpZ2dlciB8fAo+ICAgICAgICAgICAgICFyZXN1 bHRfYmlnZ2VyICYmICF2YWxpZF9iZGFyeV9iaWdnZXIpIHsKPiAgICAgICAgICAgICAgICAgKm5l Z2F0aXZlID0gIXZhbGlkX2JkYXJ5X2JpZ2dlcjsKPiAgICAgICAgICAgICAgICAgcmV0dXJuIHZh bHVlMSArIHZhbHVlMjsKPiAgICAgICAgIH0KPiAKPiAgICAgICAgICpuZWdhdGl2ZSA9IChyZXN1 bHRfYmlnZ2VyICYmICF2YWxpZF9iZGFyeV9iaWdnZXIgJiYgdmFsdWUxIDwgCj4gdmFsdWUyKSB8 fAo+ICAgICAgICAgICAgICAgICAgICAgKCFyZXN1bHRfYmlnZ2VyICYmIHZhbGlkX2JkYXJ5X2Jp Z2dlciAmJiB2YWx1ZTEgPj0gCj4gdmFsdWUyKTsKPiAgICAgICAgIHJldHVybiBtYXgodmFsdWUx LCB2YWx1ZTIpIC0gbWluKHZhbHVlMSwgdmFsdWUyKTsKPiAKPiBJIGRvbid0IGtub3cuIFRoZSBt b3JlIEkgc3RhcmUgYXQgdGhpcyB0aGUgbGVzcyBjb252aW5jZWQgSSBiZWNvbWUgdGhhdCAKPiBp dCdzCj4gYmV0dGVyLiBTbyB0YWtlIGl0IG9yIGxlYXZlIGl0LiBBdCB0aGUgdmVyeSBsZWFzdCB5 b3UgY2FuIGNvbGxhcHNlIHRoZQo+IAo+IGlmIChjb25kKQo+ICAgICAgICAgKm5lZ2F0aXZlID0g dHJ1ZTsKPiAKPiB0bwo+IAo+ICpuZWdhdGl2ZSA9IGNvbmQ7Cj4gCj4gYW5kIGRvIHRoZSBtYXgo dix2KSAtIG1pbih2LHYpIHRyaWNrIHRvIHNoYXZlIG9mZiBzb21lIG9mIHRoZSAKPiBjb25kaXRp b25hbHMgaW4KPiB0aGUgb3JpZ2luYWwuCj4gCj4gCj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1NjQg cm91bmR1cF91NjQodTY0IHgsIHU2NCB5KQo+PiArewo+PiArCXggKz0gKHkgLSAxKTsKPj4gKwly ZXR1cm4gKGRpdjY0X3VsKHgsIHkpICogeSk7Cj4+ICt9Cj4gCj4gUGxlYXNlIHJlcGxhY2UgYWxs IHVzYWdlIHdpdGggRElWX1JPVU5EX1VQX1VMTAo+IAo+PiArCj4+ICtzdGF0aWMgdTY0IHJvdW5k ZG93bl91NjQodTY0IHgsIHU2NCB5KQo+PiArewo+PiArCXU2NCByZW07Cj4+ICsKPj4gKwlkaXY2 NF91NjRfcmVtKHgsIHksICZyZW0pOwo+PiArCXJldHVybiAoeCAtIHJlbSk7Cj4+ICt9Cj4gCj4g UGxlYXNlIHJlcGxhY2UgYWxsIHVzYWdlIHdpdGggRElWX1JPVU5EX0RPV05fVUxMCj4gCj4+ICsK Pj4gK3N0YXRpYyB2b2lkIGRwX2N0cmxfY2FsY190dV9wYXJhbWV0ZXJzKHN0cnVjdCBkcF9jdHJs X3ByaXZhdGUgKmN0cmwsCj4+ICsJCQkJICAgICAgIHN0cnVjdCBkcF92Y190dV9tYXBwaW5nX3Rh YmxlICp0dV90YWJsZSkKPj4gK3sKPj4gKwl1MzIgbXVsdGlwbGllciA9IDEwMDAwMDA7Cj4+ICsJ dTY0IHBjbGssIGxjbGs7Cj4+ICsJdTggYnBwLCBsbl9jbnQ7Cj4+ICsJaW50IHJ1bl9pZHggPSAw Owo+PiArCXUzMiBsd2lkdGgsIGhfYmxhbms7Cj4+ICsJdTMyIGZpZm9fZW1wdHkgPSAwOwo+PiAr CXUzMiByYXRpb19zY2FsZSA9IDEwMDE7Cj4+ICsJdTY0IHRlbXAsIHJhdGlvLCBvcmlnaW5hbF9y YXRpbzsKPj4gKwl1NjQgdGVtcDIsIHJlbWluZGVyOwo+PiArCXU2NCB0ZW1wMywgdGVtcDQsIHJl c3VsdCA9IDA7Cj4+ICsKPj4gKwl1NjQgZXJyID0gbXVsdGlwbGllcjsKPj4gKwl1NjQgbl9lcnIg PSAwLCBuX25fZXJyID0gMDsKPj4gKwlib29sIG5fZXJyX25lZywgbm5fZXJyX25lZzsKPj4gKwl1 OCBoYmxhbmtfbWFyZ2luID0gMTY7Cj4+ICsKPj4gKwl1OCB0dV9zaXplLCB0dV9zaXplX2Rlc2ly ZWQgPSAwLCB0dV9zaXplX21pbnVzMTsKPj4gKwlpbnQgdmFsaWRfYm91bmRhcnlfbGluazsKPj4g Kwl1NjQgcmVzdWx0aW5nX3ZhbGlkOwo+PiArCXU2NCB0b3RhbF92YWxpZDsKPj4gKwl1NjQgZWZm ZWN0aXZlX3ZhbGlkOwo+PiArCXU2NCBlZmZlY3RpdmVfdmFsaWRfcmVjb3JkZWQ7Cj4+ICsJaW50 IG5fdHVzOwo+PiArCWludCBuX3R1c19wZXJfbGFuZTsKPj4gKwlpbnQgcGFpcmVkX3R1czsKPj4g KwlpbnQgcmVtYWluZGVyX3R1czsKPj4gKwlpbnQgcmVtYWluZGVyX3R1c191cHBlciwgcmVtYWlu ZGVyX3R1c19sb3dlcjsKPj4gKwlpbnQgZXh0cmFfYnl0ZXM7Cj4+ICsJaW50IGZpbGxlcl9zaXpl Owo+PiArCWludCBkZWxheV9zdGFydF9saW5rOwo+PiArCWludCBib3VuZGFyeV9tb2RlcmF0aW9u X2VuID0gMDsKPj4gKwlpbnQgdXBwZXJfYmRyeV9jbnQgPSAwOwo+PiArCWludCBsb3dlcl9iZHJ5 X2NudCA9IDA7Cj4+ICsJaW50IGlfdXBwZXJfYmRyeV9jbnQgPSAwOwo+PiArCWludCBpX2xvd2Vy X2JkcnlfY250ID0gMDsKPj4gKwlpbnQgdmFsaWRfbG93ZXJfYm91bmRhcnlfbGluayA9IDA7Cj4+ ICsJaW50IGV2ZW5fZGlzdHJpYnV0aW9uX2JmID0gMDsKPj4gKwlpbnQgZXZlbl9kaXN0cmlidXRp b25fbGVnYWN5ID0gMDsKPj4gKwlpbnQgZXZlbl9kaXN0cmlidXRpb24gPSAwOwo+PiArCWludCBt aW5faGJsYW5rID0gMDsKPj4gKwlpbnQgZXh0cmFfcGNsa19jeWNsZXM7Cj4+ICsJdTggZXh0cmFf cGNsa19jeWNsZV9kZWxheSA9IDQ7Cj4+ICsJaW50IGV4dHJhX3BjbGtfY3ljbGVzX2luX2xpbmtf Y2xrOwo+PiArCXU2NCByYXRpb19ieV90dTsKPj4gKwl1NjQgYXZlcmFnZV92YWxpZDI7Cj4+ICsJ dTY0IGV4dHJhX2J1ZmZlcl9tYXJnaW47Cj4+ICsJaW50IG5ld192YWxpZF9ib3VuZGFyeV9saW5r Owo+PiArCj4+ICsJdTY0IHJlc3VsdGluZ192YWxpZF90bXA7Cj4+ICsJdTY0IHJhdGlvX2J5X3R1 X3RtcDsKPj4gKwlpbnQgbl90dXNfdG1wOwo+PiArCWludCBleHRyYV9wY2xrX2N5Y2xlc190bXA7 Cj4+ICsJaW50IGV4dHJhX3BjbGtfY3ljbGVzX2luX2xjbGtfdG1wOwo+PiArCWludCBleHRyYV9y ZXFfYnl0ZXNfbmV3X3RtcDsKPj4gKwlpbnQgZmlsbGVyX3NpemVfdG1wOwo+PiArCWludCBsb3dl cl9maWxsZXJfc2l6ZV90bXA7Cj4+ICsJaW50IGRlbGF5X3N0YXJ0X2xpbmtfdG1wOwo+PiArCWlu dCBtaW5faGJsYW5rX3RtcCA9IDA7Cj4+ICsJYm9vbCBleHRyYV9yZXFfYnl0ZXNfaXNfbmVnID0g ZmFsc2U7Cj4+ICsJc3RydWN0IGRwX3BhbmVsX2luZm8gKnBpbmZvID0gJmN0cmwtPnBhbmVsLT5w aW5mbzsKPj4gKwo+PiArCXU4IGRwX2JydXRlX2ZvcmNlID0gMTsKPj4gKwl1NjQgYnJ1dGVfZm9y Y2VfdGhyZXNob2xkID0gMTA7Cj4+ICsJdTY0IGRpZmZfYWJzOwo+IAo+IAo+IDc2IHN0YWNrIHZh cnMgYW5kIH40NTAgbGluZXMgbXVzdCBiZSBhIG5ldyByZWNvcmQgc29tZXdoZXJlIDopCj4gCj4g SSdtIGdvaW5nIHRvIHNraXAgcmV2aWV3aW5nIHRoaXMgZnVuY3Rpb24gYW5kIGxldCB5b3UgCj4g c3BsaXQvc2ltcGxpZnkvcmVkdWNlIGl0Lgo+IFBsZWFzZSBqdXN0IG1ha2UgaXQgbW9yZSByZWFk YWJsZSAoY29tbWVudHMsIGRvY3MsIGhlbHBlciBmdW5jdGlvbnMsIAo+IGV0YykuCgpZZXMsIHdp bGwgdHJ5IHRvIHNwbGl0IHRoaXMgZnVuY3Rpb24gYXMgbW9kdWxhciBhcyBwb3NzaWJsZS4KSkZZ SSwgdGhpcyBmdW5jdGlvbiBpcyBJUC9oYXJkd2FyZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4g SXQgbWlnaHQgbm90IApiZSBwb3NzaWJsZQp0byBwcm92aWRlIGxvdCBvZiBjb21tZW50cyB0byBt YWtlIGlzIHVuZGVyc3RhbmRhYmxlLgo+IAo+PiArCj4+ICsJbG5fY250ID0gIGN0cmwtPmxpbmst PmxpbmtfcGFyYW1zLmxhbmVfY291bnQ7Cj4+ICsKPj4gKwlicHAgPSBwaW5mby0+YnBwOwo+PiAr CWx3aWR0aCA9IHBpbmZvLT5oX2FjdGl2ZTsKPj4gKwloX2JsYW5rID0gcGluZm8tPmhfYmFja19w b3JjaCArIHBpbmZvLT5oX2Zyb250X3BvcmNoICsKPj4gKwkJCQlwaW5mby0+aF9zeW5jX3dpZHRo Owo+PiArCXBjbGsgPSBwaW5mby0+cGl4ZWxfY2xrX2toeiAqIDEwMDA7Cj4+ICsKPj4gKwlib3Vu ZGFyeV9tb2RlcmF0aW9uX2VuID0gMDsKPj4gKwl1cHBlcl9iZHJ5X2NudCA9IDA7Cj4+ICsJbG93 ZXJfYmRyeV9jbnQgPSAwOwo+PiArCWlfdXBwZXJfYmRyeV9jbnQgPSAwOwo+PiArCWlfbG93ZXJf YmRyeV9jbnQgPSAwOwo+PiArCXZhbGlkX2xvd2VyX2JvdW5kYXJ5X2xpbmsgPSAwOwo+PiArCWV2 ZW5fZGlzdHJpYnV0aW9uX2JmID0gMDsKPj4gKwlldmVuX2Rpc3RyaWJ1dGlvbl9sZWdhY3kgPSAw Owo+PiArCWV2ZW5fZGlzdHJpYnV0aW9uID0gMDsKPj4gKwltaW5faGJsYW5rID0gMDsKPj4gKwo+ PiArCWxjbGsgPSBkcm1fZHBfYndfY29kZV90b19saW5rX3JhdGUoCj4+ICsJCWN0cmwtPmxpbmst PmxpbmtfcGFyYW1zLmJ3X2NvZGUpICogRFBfS0haX1RPX0haOwo+PiArCj4+ICsJcHJfZGVidWco InBjbGs9JWxsZCwgYWN0aXZlX3dpZHRoPSVkLCBoX2JsYW5rPSVkXG4iLAo+PiArCQkJCQkJcGNs aywgbHdpZHRoLCBoX2JsYW5rKTsKPj4gKwlwcl9kZWJ1ZygibGNsayA9ICVsbGQsIGxuX2NudCA9 ICVkXG4iLCBsY2xrLCBsbl9jbnQpOwo+PiArCXJhdGlvID0gZGl2NjRfdTY0X3JlbShwY2xrICog YnBwICogbXVsdGlwbGllciwKPj4gKwkJCQk4ICogbG5fY250ICogbGNsaywgJnJlbWluZGVyKTsK Pj4gKwlyYXRpbyA9IGRpdjY0X3U2NCgocGNsayAqIGJwcCAqIG11bHRpcGxpZXIpLCAoOCAqIGxu X2NudCAqIGxjbGspKTsKPj4gKwlvcmlnaW5hbF9yYXRpbyA9IHJhdGlvOwo+PiArCj4+ICsJZXh0 cmFfYnVmZmVyX21hcmdpbiA9IHJvdW5kdXBfdTY0KGRpdjY0X3U2NChleHRyYV9wY2xrX2N5Y2xl X2RlbGF5Cj4+ICsJCQkJKiBsY2xrICogbXVsdGlwbGllciwgcGNsayksIG11bHRpcGxpZXIpOwo+ PiArCWV4dHJhX2J1ZmZlcl9tYXJnaW4gPSBkaXY2NF91NjQoZXh0cmFfYnVmZmVyX21hcmdpbiwg bXVsdGlwbGllcik7Cj4+ICsKPj4gKwkvKiBUbyBkZWFsIHdpdGggY2FzZXMgd2hlcmUgbGluZXMg YXJlIG5vdCBkaXN0cmlidXRhYmxlICovCj4+ICsJaWYgKCgobHdpZHRoICUgbG5fY250KSAhPSAw KSAmJiByYXRpbyA8IG11bHRpcGxpZXIpIHsKPj4gKwkJcmF0aW8gPSByYXRpbyAqIHJhdGlvX3Nj YWxlOwo+PiArCQlyYXRpbyA9IHJhdGlvIDwgKDEwMDAgKiBtdWx0aXBsaWVyKQo+PiArCQkJCT8g cmF0aW8gOiAoMTAwMCAqIG11bHRpcGxpZXIpOwo+PiArCX0KPj4gKwlwcl9kZWJ1ZygicmF0aW8g PSAlbGxkXG4iLCByYXRpbyk7Cj4+ICsKPj4gKwlmb3IgKHR1X3NpemUgPSAzMjsgdHVfc2l6ZSA8 PSA2NDsgdHVfc2l6ZSsrKSB7Cj4+ICsJCXRlbXAgPSByYXRpbyAqIHR1X3NpemU7Cj4+ICsJCXRl bXAyID0gKCh0ZW1wIC8gbXVsdGlwbGllcikgKyAxKSAqIG11bHRpcGxpZXI7Cj4+ICsJCW5fZXJy ID0gcm91bmR1cF91NjQodGVtcCwgbXVsdGlwbGllcikgLSB0ZW1wOwo+PiArCj4+ICsJCWlmIChu X2VyciA8IGVycikgewo+PiArCQkJZXJyID0gbl9lcnI7Cj4+ICsJCQl0dV9zaXplX2Rlc2lyZWQg PSB0dV9zaXplOwo+PiArCQl9Cj4+ICsJfQo+PiArCXByX2RlYnVnKCJJbmZvOiB0dV9zaXplX2Rl c2lyZWQgPSAlZFxuIiwgdHVfc2l6ZV9kZXNpcmVkKTsKPj4gKwo+PiArCXR1X3NpemVfbWludXMx ID0gdHVfc2l6ZV9kZXNpcmVkIC0gMTsKPj4gKwo+PiArCXZhbGlkX2JvdW5kYXJ5X2xpbmsgPSBy b3VuZHVwX3U2NChyYXRpbyAqIHR1X3NpemVfZGVzaXJlZCwgCj4+IG11bHRpcGxpZXIpOwo+PiAr CXZhbGlkX2JvdW5kYXJ5X2xpbmsgLz0gbXVsdGlwbGllcjsKPj4gKwluX3R1cyA9IHJvdW5kZG93 bigobHdpZHRoICogYnBwICogbXVsdGlwbGllcikKPj4gKwkJCS8gKDggKiB2YWxpZF9ib3VuZGFy eV9saW5rKSwgbXVsdGlwbGllcikgLyBtdWx0aXBsaWVyOwo+PiArCWV2ZW5fZGlzdHJpYnV0aW9u X2xlZ2FjeSA9IG5fdHVzICUgbG5fY250ID09IDAgPyAxIDogMDsKPj4gKwlwcl9kZWJ1ZygiSW5m bzogbl9zeW1ib2xfcGVyX3R1PSVkLCBudW1iZXJfb2ZfdHVzPSVkXG4iLAo+PiArCQkJCQl2YWxp ZF9ib3VuZGFyeV9saW5rLCBuX3R1cyk7Cj4+ICsKPj4gKwlleHRyYV9ieXRlcyA9IHJvdW5kdXBf dTY0KChuX3R1cyArIDEpCj4+ICsJCQkqICgodmFsaWRfYm91bmRhcnlfbGluayAqIG11bHRpcGxp ZXIpCj4+ICsJCQktIChvcmlnaW5hbF9yYXRpbyAqIHR1X3NpemVfZGVzaXJlZCkpLCBtdWx0aXBs aWVyKTsKPj4gKwlleHRyYV9ieXRlcyAvPSBtdWx0aXBsaWVyOwo+PiArCWV4dHJhX3BjbGtfY3lj bGVzID0gcm91bmR1cChleHRyYV9ieXRlcyAqIDggKiBtdWx0aXBsaWVyIC8gYnBwLAo+PiArCQkJ bXVsdGlwbGllcik7Cj4+ICsJZXh0cmFfcGNsa19jeWNsZXMgLz0gbXVsdGlwbGllcjsKPj4gKwll eHRyYV9wY2xrX2N5Y2xlc19pbl9saW5rX2NsayA9IAo+PiByb3VuZHVwX3U2NChkaXY2NF91NjQo ZXh0cmFfcGNsa19jeWNsZXMKPj4gKwkJCQkqIGxjbGsgKiBtdWx0aXBsaWVyLCBwY2xrKSwgbXVs dGlwbGllcik7Cj4+ICsJZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGsgLz0gbXVsdGlwbGll cjsKPj4gKwlmaWxsZXJfc2l6ZSA9IHJvdW5kdXBfdTY0KCh0dV9zaXplX2Rlc2lyZWQgLSB2YWxp ZF9ib3VuZGFyeV9saW5rKQo+PiArCQkJCQkJKiBtdWx0aXBsaWVyLCBtdWx0aXBsaWVyKTsKPj4g KwlmaWxsZXJfc2l6ZSAvPSBtdWx0aXBsaWVyOwo+PiArCXJhdGlvX2J5X3R1ID0gZGl2NjRfdTY0 KHJhdGlvICogdHVfc2l6ZV9kZXNpcmVkLCBtdWx0aXBsaWVyKTsKPj4gKwo+PiArCXByX2RlYnVn KCJleHRyYV9wY2xrX2N5Y2xlc19pbl9saW5rX2Nsaz0lZCwgZXh0cmFfYnl0ZXM9JWRcbiIsCj4+ ICsJCQkJZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGssIGV4dHJhX2J5dGVzKTsKPj4gKwlw cl9kZWJ1ZygiZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGs9JWRcbiIsCj4+ICsJCQkJZXh0 cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGspOwo+PiArCXByX2RlYnVnKCJmaWxsZXJfc2l6ZT0l ZCwgZXh0cmFfYnVmZmVyX21hcmdpbj0lbGxkXG4iLAo+PiArCQkJCWZpbGxlcl9zaXplLCBleHRy YV9idWZmZXJfbWFyZ2luKTsKPj4gKwo+PiArCWRlbGF5X3N0YXJ0X2xpbmsgPSAoKGV4dHJhX2J5 dGVzID4gZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGspCj4+ICsJCQk/IGV4dHJhX2J5dGVz Cj4+ICsJCQk6IGV4dHJhX3BjbGtfY3ljbGVzX2luX2xpbmtfY2xrKQo+PiArCQkJCSsgZmlsbGVy X3NpemUgKyBleHRyYV9idWZmZXJfbWFyZ2luOwo+PiArCXJlc3VsdGluZ192YWxpZCA9IHZhbGlk X2JvdW5kYXJ5X2xpbms7Cj4+ICsJcHJfZGVidWcoIkluZm86IGRlbGF5X3N0YXJ0X2xpbms9JWQs IGZpbGxlcl9zaXplPSVkXG4iLAo+PiArCQkJCWRlbGF5X3N0YXJ0X2xpbmssIGZpbGxlcl9zaXpl KTsKPj4gKwlwcl9kZWJ1ZygidmFsaWRfYm91bmRhcnlfbGluaz0lZCByYXRpb19ieV90dT0lbGxk XG4iLAo+PiArCQkJCXZhbGlkX2JvdW5kYXJ5X2xpbmssIHJhdGlvX2J5X3R1KTsKPj4gKwo+PiAr CWRpZmZfYWJzID0gKHJlc3VsdGluZ192YWxpZCA+PSByYXRpb19ieV90dSkKPj4gKwkJCQk/IChy ZXN1bHRpbmdfdmFsaWQgLSByYXRpb19ieV90dSkKPj4gKwkJCQk6IChyYXRpb19ieV90dSAtIHJl c3VsdGluZ192YWxpZCk7Cj4+ICsKPj4gKwlpZiAoZXJyICE9IDAgJiYgKChkaWZmX2FicyA+IGJy dXRlX2ZvcmNlX3RocmVzaG9sZCkKPj4gKwkJCXx8IChldmVuX2Rpc3RyaWJ1dGlvbl9sZWdhY3kg PT0gMCkKPj4gKwkJCXx8IChkcF9icnV0ZV9mb3JjZSA9PSAxKSkpIHsKPj4gKwkJZXJyID0gbXVs dGlwbGllcjsKPj4gKwkJZm9yICh0dV9zaXplID0gMzI7IHR1X3NpemUgPD0gNjQ7IHR1X3NpemUr Kykgewo+PiArCQkJZm9yIChpX3VwcGVyX2JkcnlfY250ID0gMTsgaV91cHBlcl9iZHJ5X2NudCA8 PSAxNTsKPj4gKwkJCQkJCWlfdXBwZXJfYmRyeV9jbnQrKykgewo+PiArCQkJCWZvciAoaV9sb3dl cl9iZHJ5X2NudCA9IDE7Cj4+ICsJCQkJCWlfbG93ZXJfYmRyeV9jbnQgPD0gMTU7Cj4+ICsJCQkJ CWlfbG93ZXJfYmRyeV9jbnQrKykgewo+PiArCQkJCQluZXdfdmFsaWRfYm91bmRhcnlfbGluayA9 Cj4+ICsJCQkJCQlyb3VuZHVwX3U2NChyYXRpbwo+PiArCQkJCQkJKiB0dV9zaXplLCBtdWx0aXBs aWVyKTsKPj4gKwkJCQkJYXZlcmFnZV92YWxpZDIgPSAoaV91cHBlcl9iZHJ5X2NudAo+PiArCQkJ CQkJKiBuZXdfdmFsaWRfYm91bmRhcnlfbGluawo+PiArCQkJCQkJKyBpX2xvd2VyX2JkcnlfY250 Cj4+ICsJCQkJCQkqIChuZXdfdmFsaWRfYm91bmRhcnlfbGluawo+PiArCQkJCQkJCS0gbXVsdGlw bGllcikpCj4+ICsJCQkJCQkvIChpX3VwcGVyX2JkcnlfY250Cj4+ICsJCQkJCQkJKyBpX2xvd2Vy X2JkcnlfY250KTsKPj4gKwkJCQkJbl90dXMgPSByb3VuZGRvd25fdTY0KGRpdjY0X3U2NChsd2lk dGgKPj4gKwkJCQkJCSogbXVsdGlwbGllciAqIG11bHRpcGxpZXIKPj4gKwkJCQkJCSogKGJwcCAv IDgpLCBhdmVyYWdlX3ZhbGlkMiksCj4+ICsJCQkJCQkJbXVsdGlwbGllcik7Cj4+ICsJCQkJCW5f dHVzIC89IG11bHRpcGxpZXI7Cj4+ICsJCQkJCW5fdHVzX3Blcl9sYW5lCj4+ICsJCQkJCQk9IHJv dW5kZG93bihuX3R1cwo+PiArCQkJCQkJCSogbXVsdGlwbGllcgo+PiArCQkJCQkJCS8gbG5fY250 LCBtdWx0aXBsaWVyKTsKPj4gKwkJCQkJbl90dXNfcGVyX2xhbmUgLz0gbXVsdGlwbGllcjsKPj4g KwkJCQkJcGFpcmVkX3R1cyA9Cj4+ICsJCQkJCQlyb3VuZGRvd24oKG5fdHVzX3Blcl9sYW5lKQo+ PiArCQkJCQkJCSogbXVsdGlwbGllcgo+PiArCQkJCQkJCS8gKGlfdXBwZXJfYmRyeV9jbnQKPj4g KwkJCQkJCQkrIGlfbG93ZXJfYmRyeV9jbnQpLAo+PiArCQkJCQkJCW11bHRpcGxpZXIpOwo+PiAr CQkJCQlwYWlyZWRfdHVzIC89IG11bHRpcGxpZXI7Cj4+ICsJCQkJCXJlbWFpbmRlcl90dXMgPSBu X3R1c19wZXJfbGFuZQo+PiArCQkJCQkJCS0gcGFpcmVkX3R1cwo+PiArCQkJCQkJKiAoaV91cHBl cl9iZHJ5X2NudAo+PiArCQkJCQkJCSsgaV9sb3dlcl9iZHJ5X2NudCk7Cj4+ICsJCQkJCWlmICgo cmVtYWluZGVyX3R1cwo+PiArCQkJCQkJLSBpX3VwcGVyX2JkcnlfY250KSA+IDApIHsKPj4gKwkJ CQkJCXJlbWFpbmRlcl90dXNfdXBwZXIKPj4gKwkJCQkJCQk9IGlfdXBwZXJfYmRyeV9jbnQ7Cj4+ ICsJCQkJCQlyZW1haW5kZXJfdHVzX2xvd2VyID0KPj4gKwkJCQkJCQlyZW1haW5kZXJfdHVzCj4+ ICsJCQkJCQkJLSBpX3VwcGVyX2JkcnlfY250Owo+PiArCQkJCQl9IGVsc2Ugewo+PiArCQkJCQkJ cmVtYWluZGVyX3R1c191cHBlcgo+PiArCQkJCQkJCT0gcmVtYWluZGVyX3R1czsKPj4gKwkJCQkJ CXJlbWFpbmRlcl90dXNfbG93ZXIgPSAwOwo+PiArCQkJCQl9Cj4+ICsJCQkJCXRvdGFsX3ZhbGlk ID0gcGFpcmVkX3R1cwo+PiArCQkJCQkJKiAoaV91cHBlcl9iZHJ5X2NudAo+PiArCQkJCQkJKiBu ZXdfdmFsaWRfYm91bmRhcnlfbGluawo+PiArCQkJCQkJCSsgaV9sb3dlcl9iZHJ5X2NudAo+PiAr CQkJCQkJKiAobmV3X3ZhbGlkX2JvdW5kYXJ5X2xpbmsKPj4gKwkJCQkJCQktIG11bHRpcGxpZXIp KQo+PiArCQkJCQkJKyAocmVtYWluZGVyX3R1c191cHBlcgo+PiArCQkJCQkJKiBuZXdfdmFsaWRf Ym91bmRhcnlfbGluaykKPj4gKwkJCQkJCSsgKHJlbWFpbmRlcl90dXNfbG93ZXIKPj4gKwkJCQkJ CSogKG5ld192YWxpZF9ib3VuZGFyeV9saW5rCj4+ICsJCQkJCQkJLSBtdWx0aXBsaWVyKSk7Cj4+ ICsJCQkJCW5fZXJyX25lZyA9IG5uX2Vycl9uZWcgPSBmYWxzZTsKPj4gKwkJCQkJZWZmZWN0aXZl X3ZhbGlkCj4+ICsJCQkJCQk9IGRpdl91NjQodG90YWxfdmFsaWQsCj4+ICsJCQkJCQkJbl90dXNf cGVyX2xhbmUpOwo+PiArCQkJCQluX25fZXJyID0gKGVmZmVjdGl2ZV92YWxpZAo+PiArCQkJCQkJ CT49IChyYXRpbyAqIHR1X3NpemUpKQo+PiArCQkJCQkJPyAoZWZmZWN0aXZlX3ZhbGlkCj4+ICsJ CQkJCQkJLSAocmF0aW8gKiB0dV9zaXplKSkKPj4gKwkJCQkJCTogKChyYXRpbyAqIHR1X3NpemUp Cj4+ICsJCQkJCQkJLSBlZmZlY3RpdmVfdmFsaWQpOwo+PiArCQkJCQlpZiAoZWZmZWN0aXZlX3Zh bGlkIDwgKHJhdGlvICogdHVfc2l6ZSkpCj4+ICsJCQkJCQlubl9lcnJfbmVnID0gdHJ1ZTsKPj4g KwkJCQkJbl9lcnIgPSAoYXZlcmFnZV92YWxpZDIKPj4gKwkJCQkJCT49IChyYXRpbyAqIHR1X3Np emUpKQo+PiArCQkJCQkJPyAoYXZlcmFnZV92YWxpZDIKPj4gKwkJCQkJCQktIChyYXRpbyAqIHR1 X3NpemUpKQo+PiArCQkJCQkJOiAoKHJhdGlvICogdHVfc2l6ZSkKPj4gKwkJCQkJCQktIGF2ZXJh Z2VfdmFsaWQyKTsKPj4gKwkJCQkJaWYgKGF2ZXJhZ2VfdmFsaWQyIDwgKHJhdGlvICogdHVfc2l6 ZSkpCj4+ICsJCQkJCQluX2Vycl9uZWcgPSB0cnVlOwo+PiArCQkJCQlldmVuX2Rpc3RyaWJ1dGlv biA9Cj4+ICsJCQkJCQluX3R1cyAlIGxuX2NudCA9PSAwID8gMSA6IDA7Cj4+ICsJCQkJCWRpZmZf YWJzID0KPj4gKwkJCQkJCXJlc3VsdGluZ192YWxpZCA+PSByYXRpb19ieV90dQo+PiArCQkJCQkJ PyAocmVzdWx0aW5nX3ZhbGlkCj4+ICsJCQkJCQkJLSByYXRpb19ieV90dSkKPj4gKwkJCQkJCTog KHJhdGlvX2J5X3R1Cj4+ICsJCQkJCQkJLSByZXN1bHRpbmdfdmFsaWQpOwo+PiArCj4+ICsJCQkJ CXJlc3VsdGluZ192YWxpZF90bXAgPSBkaXY2NF91NjQoCj4+ICsJCQkJCQkoaV91cHBlcl9iZHJ5 X2NudAo+PiArCQkJCQkJKiBuZXdfdmFsaWRfYm91bmRhcnlfbGluawo+PiArCQkJCQkJKyBpX2xv d2VyX2JkcnlfY250Cj4+ICsJCQkJCQkqIChuZXdfdmFsaWRfYm91bmRhcnlfbGluawo+PiArCQkJ CQkJCS0gbXVsdGlwbGllcikpLAo+PiArCQkJCQkJKGlfdXBwZXJfYmRyeV9jbnQKPj4gKwkJCQkJ CQkrIGlfbG93ZXJfYmRyeV9jbnQpKTsKPj4gKwkJCQkJcmF0aW9fYnlfdHVfdG1wID0KPj4gKwkJ CQkJCW9yaWdpbmFsX3JhdGlvICogdHVfc2l6ZTsKPj4gKwkJCQkJcmF0aW9fYnlfdHVfdG1wIC89 IG11bHRpcGxpZXI7Cj4+ICsJCQkJCW5fdHVzX3RtcCA9IHJvdW5kZG93bl91NjQoCj4+ICsJCQkJ CQlkaXY2NF91NjQobHdpZHRoCj4+ICsJCQkJCQkqIG11bHRpcGxpZXIgKiBtdWx0aXBsaWVyCj4+ ICsJCQkJCQkqIGJwcCAvIDgsCj4+ICsJCQkJCQlyZXN1bHRpbmdfdmFsaWRfdG1wKSwKPj4gKwkJ CQkJCW11bHRpcGxpZXIpOwo+PiArCQkJCQluX3R1c190bXAgLz0gbXVsdGlwbGllcjsKPj4gKwo+ PiArCQkJCQl0ZW1wMyA9IChyZXN1bHRpbmdfdmFsaWRfdG1wCj4+ICsJCQkJCQk+PSAob3JpZ2lu YWxfcmF0aW8gKiB0dV9zaXplKSkKPj4gKwkJCQkJCT8gKHJlc3VsdGluZ192YWxpZF90bXAKPj4g KwkJCQkJCS0gb3JpZ2luYWxfcmF0aW8gKiB0dV9zaXplKQo+PiArCQkJCQkJOiAob3JpZ2luYWxf cmF0aW8gKiB0dV9zaXplKQo+PiArCQkJCQkJLSByZXN1bHRpbmdfdmFsaWRfdG1wOwo+PiArCQkJ CQl0ZW1wMyA9IChuX3R1c190bXAgKyAxKSAqIHRlbXAzOwo+PiArCQkJCQl0ZW1wNCA9IChuZXdf dmFsaWRfYm91bmRhcnlfbGluawo+PiArCQkJCQkJPj0gKG9yaWdpbmFsX3JhdGlvICogdHVfc2l6 ZSkpCj4+ICsJCQkJCQk/IChuZXdfdmFsaWRfYm91bmRhcnlfbGluawo+PiArCQkJCQkJCS0gb3Jp Z2luYWxfcmF0aW8KPj4gKwkJCQkJCQkqIHR1X3NpemUpCj4+ICsJCQkJCQk6IChvcmlnaW5hbF9y YXRpbyAqIHR1X3NpemUpCj4+ICsJCQkJCQktIG5ld192YWxpZF9ib3VuZGFyeV9saW5rOwo+PiAr CQkJCQl0ZW1wNCA9IChpX3VwcGVyX2JkcnlfY250Cj4+ICsJCQkJCQkJKiBsbl9jbnQgKiB0ZW1w NCk7Cj4+ICsKPj4gKwkJCQkJdGVtcDMgPSByb3VuZHVwX3U2NCh0ZW1wMywgbXVsdGlwbGllcik7 Cj4+ICsJCQkJCXRlbXA0ID0gcm91bmR1cF91NjQodGVtcDQsIG11bHRpcGxpZXIpOwo+PiArCQkJ CQlkcF9jdHJsX2dldF9leHRyYV9yZXFfYnl0ZXMKPj4gKwkJCQkJCShyZXN1bHRpbmdfdmFsaWRf dG1wLAo+PiArCQkJCQkJbmV3X3ZhbGlkX2JvdW5kYXJ5X2xpbmssCj4+ICsJCQkJCQl0ZW1wMywg dGVtcDQsCj4+ICsJCQkJCQkmZXh0cmFfcmVxX2J5dGVzX2lzX25lZywKPj4gKwkJCQkJCSZyZXN1 bHQsCj4+ICsJCQkJCQkob3JpZ2luYWxfcmF0aW8gKiB0dV9zaXplKSk7Cj4+ICsJCQkJCWV4dHJh X3JlcV9ieXRlc19uZXdfdG1wCj4+ICsJCQkJCQk9IGRpdjY0X3VsKHJlc3VsdCwgbXVsdGlwbGll cik7Cj4+ICsJCQkJCWlmICgoZXh0cmFfcmVxX2J5dGVzX2lzX25lZykKPj4gKwkJCQkJCSYmIChl eHRyYV9yZXFfYnl0ZXNfbmV3X3RtcAo+PiArCQkJCQkJCT4gMSkpCj4+ICsJCQkJCQlleHRyYV9y ZXFfYnl0ZXNfbmV3X3RtcAo+PiArCQkJCQkJPSBleHRyYV9yZXFfYnl0ZXNfbmV3X3RtcCAtIDE7 Cj4+ICsJCQkJCWlmIChleHRyYV9yZXFfYnl0ZXNfbmV3X3RtcCA9PSAwKQo+PiArCQkJCQkJZXh0 cmFfcmVxX2J5dGVzX25ld190bXAgPSAxOwo+PiArCQkJCQlleHRyYV9wY2xrX2N5Y2xlc190bXAg PQo+PiArCQkJCQkJKHU2NCkoZXh0cmFfcmVxX2J5dGVzX25ld190bXAKPj4gKwkJCQkJCSAgICAg ICogOCAqIG11bHRpcGxpZXIpIC8gYnBwOwo+PiArCQkJCQlleHRyYV9wY2xrX2N5Y2xlc190bXAg Lz0gbXVsdGlwbGllcjsKPj4gKwo+PiArCQkJCQlpZiAoZXh0cmFfcGNsa19jeWNsZXNfdG1wIDw9 IDApCj4+ICsJCQkJCQlleHRyYV9wY2xrX2N5Y2xlc190bXAgPSAxOwo+PiArCQkJCQlleHRyYV9w Y2xrX2N5Y2xlc19pbl9sY2xrX3RtcCA9Cj4+ICsJCQkJCQlyb3VuZHVwX3U2NChkaXY2NF91NjQo Cj4+ICsJCQkJCQkJZXh0cmFfcGNsa19jeWNsZXNfdG1wCj4+ICsJCQkJCQkJKiBsY2xrICogbXVs dGlwbGllciwKPj4gKwkJCQkJCQlwY2xrKSwgbXVsdGlwbGllcik7Cj4+ICsJCQkJCWV4dHJhX3Bj bGtfY3ljbGVzX2luX2xjbGtfdG1wCj4+ICsJCQkJCQkvPSBtdWx0aXBsaWVyOwo+PiArCQkJCQlm aWxsZXJfc2l6ZV90bXAgPSByb3VuZHVwX3U2NCgKPj4gKwkJCQkJCSh0dV9zaXplICogbXVsdGlw bGllciAqCj4+ICsJCQkJCQluZXdfdmFsaWRfYm91bmRhcnlfbGluayksCj4+ICsJCQkJCQltdWx0 aXBsaWVyKTsKPj4gKwkJCQkJZmlsbGVyX3NpemVfdG1wIC89IG11bHRpcGxpZXI7Cj4+ICsJCQkJ CWxvd2VyX2ZpbGxlcl9zaXplX3RtcCA9Cj4+ICsJCQkJCQlmaWxsZXJfc2l6ZV90bXAgKyAxOwo+ PiArCQkJCQlpZiAoZXh0cmFfcmVxX2J5dGVzX2lzX25lZykKPj4gKwkJCQkJCXRlbXAzID0gKGV4 dHJhX3JlcV9ieXRlc19uZXdfdG1wCj4+ICsJCQkJCQk+IGV4dHJhX3BjbGtfY3ljbGVzX2luX2xj bGtfdG1wCj4+ICsJCQkJCQk/IGV4dHJhX3BjbGtfY3ljbGVzX2luX2xjbGtfdG1wCj4+ICsJCQkJ CQk6IGV4dHJhX3JlcV9ieXRlc19uZXdfdG1wKTsKPj4gKwkJCQkJZWxzZQo+PiArCQkJCQkJdGVt cDMgPSAoZXh0cmFfcmVxX2J5dGVzX25ld190bXAKPj4gKwkJCQkJCT4gZXh0cmFfcGNsa19jeWNs ZXNfaW5fbGNsa190bXAKPj4gKwkJCQkJCT8gZXh0cmFfcmVxX2J5dGVzX25ld190bXAgOgo+PiAr CQkJCQkJZXh0cmFfcGNsa19jeWNsZXNfaW5fbGNsa190bXApOwo+PiArCj4+ICsJCQkJCXRlbXA0 ID0gbG93ZXJfZmlsbGVyX3NpemVfdG1wCj4+ICsJCQkJCQkrIGV4dHJhX2J1ZmZlcl9tYXJnaW47 Cj4+ICsJCQkJCWlmIChleHRyYV9yZXFfYnl0ZXNfaXNfbmVnKQo+PiArCQkJCQkJZGVsYXlfc3Rh cnRfbGlua190bXAKPj4gKwkJCQkJCQk9ICh0ZW1wMyA+PSB0ZW1wNCkKPj4gKwkJCQkJCQk/ICh0 ZW1wMyAtIHRlbXA0KQo+PiArCQkJCQkJCTogKHRlbXA0IC0gdGVtcDMpOwo+PiArCQkJCQllbHNl Cj4+ICsJCQkJCQlkZWxheV9zdGFydF9saW5rX3RtcAo+PiArCQkJCQkJCT0gdGVtcDMgKyB0ZW1w NDsKPj4gKwo+PiArCQkJCQltaW5faGJsYW5rX3RtcCA9IChpbnQpZGl2NjRfdTY0KAo+PiArCQkJ CQkJcm91bmR1cF91NjQoCj4+ICsJCQkJCQlkaXY2NF91NjQoZGVsYXlfc3RhcnRfbGlua190bXAK Pj4gKwkJCQkJCSogcGNsayAqIG11bHRpcGxpZXIsIGxjbGspLAo+PiArCQkJCQkJbXVsdGlwbGll ciksIG11bHRpcGxpZXIpCj4+ICsJCQkJCQkrIGhibGFua19tYXJnaW47Cj4+ICsKPj4gKwkJCQkJ aWYgKCgoZXZlbl9kaXN0cmlidXRpb24gPT0gMSkKPj4gKwkJCQkJCXx8ICgoZXZlbl9kaXN0cmli dXRpb25fYmYgPT0gMCkKPj4gKwkJCQkJCSYmIChldmVuX2Rpc3RyaWJ1dGlvbl9sZWdhY3kKPj4g KwkJCQkJCQkJPT0gMCkpKQo+PiArCQkJCQkJJiYgIW5fZXJyX25lZyAmJiAhbm5fZXJyX25lZwo+ PiArCQkJCQkJJiYgbl9uX2VyciA8IGVycgo+PiArCQkJCQkJJiYgKG5fbl9lcnIgPCBkaWZmX2Fi cwo+PiArCQkJCQkJfHwgKGRwX2JydXRlX2ZvcmNlID09IDEpKQo+PiArCQkJCQkJJiYgKG5ld192 YWxpZF9ib3VuZGFyeV9saW5rCj4+ICsJCQkJCQkJCQktIDEpID4gMAo+PiArCQkJCQkJJiYgKGhf YmxhbmsgPj0KPj4gKwkJCQkJCQkodTMyKW1pbl9oYmxhbmtfdG1wKSkgewo+PiArCQkJCQkJdXBw ZXJfYmRyeV9jbnQgPQo+PiArCQkJCQkJCWlfdXBwZXJfYmRyeV9jbnQ7Cj4+ICsJCQkJCQlsb3dl cl9iZHJ5X2NudCA9Cj4+ICsJCQkJCQkJaV9sb3dlcl9iZHJ5X2NudDsKPj4gKwkJCQkJCWVyciA9 IG5fbl9lcnI7Cj4+ICsJCQkJCQlib3VuZGFyeV9tb2RlcmF0aW9uX2VuID0gMTsKPj4gKwkJCQkJ CXR1X3NpemVfZGVzaXJlZCA9IHR1X3NpemU7Cj4+ICsJCQkJCQl2YWxpZF9ib3VuZGFyeV9saW5r ID0KPj4gKwkJCQkJCQluZXdfdmFsaWRfYm91bmRhcnlfbGluazsKPj4gKwkJCQkJCWVmZmVjdGl2 ZV92YWxpZF9yZWNvcmRlZAo+PiArCQkJCQkJCT0gZWZmZWN0aXZlX3ZhbGlkOwo+PiArCQkJCQkJ ZGVsYXlfc3RhcnRfbGluawo+PiArCQkJCQkJCT0gZGVsYXlfc3RhcnRfbGlua190bXA7Cj4+ICsJ CQkJCQlmaWxsZXJfc2l6ZSA9IGZpbGxlcl9zaXplX3RtcDsKPj4gKwkJCQkJCW1pbl9oYmxhbmsg PSBtaW5faGJsYW5rX3RtcDsKPj4gKwkJCQkJCW5fdHVzID0gbl90dXNfdG1wOwo+PiArCQkJCQkJ ZXZlbl9kaXN0cmlidXRpb25fYmYgPSAxOwo+PiArCj4+ICsJCQkJCQlwcl9kZWJ1ZygidXBwZXJf YmRyeV9jbnQ9JWQsIGxvd2VyX2JvdW5kYXJ5X2NudD0lZCwgZXJyPSVsbGQsIAo+PiB0dV9zaXpl X2Rlc2lyZWQ9JWQsIHZhbGlkX2JvdW5kYXJ5X2xpbms9JWQsIGVmZmVjdGl2ZV92YWxpZD0lbGxk XG4iLAo+PiArCQkJCQkJCXVwcGVyX2JkcnlfY250LAo+PiArCQkJCQkJCWxvd2VyX2JkcnlfY250 LCBlcnIsCj4+ICsJCQkJCQkJdHVfc2l6ZV9kZXNpcmVkLAo+PiArCQkJCQkJCXZhbGlkX2JvdW5k YXJ5X2xpbmssCj4+ICsJCQkJCQkJZWZmZWN0aXZlX3ZhbGlkKTsKPj4gKwkJCQkJfQo+PiArCQkJ CX0KPj4gKwkJCX0KPj4gKwkJfQo+PiArCj4+ICsJCWlmIChib3VuZGFyeV9tb2RlcmF0aW9uX2Vu ID09IDEpIHsKPj4gKwkJCXJlc3VsdGluZ192YWxpZCA9ICh1NjQpKHVwcGVyX2JkcnlfY250Cj4+ ICsJCQkJCSp2YWxpZF9ib3VuZGFyeV9saW5rICsgbG93ZXJfYmRyeV9jbnQKPj4gKwkJCQkJKiAo dmFsaWRfYm91bmRhcnlfbGluayAtIDEpKQo+PiArCQkJCQkvICh1cHBlcl9iZHJ5X2NudCArIGxv d2VyX2JkcnlfY250KTsKPj4gKwkJCXJhdGlvX2J5X3R1ID0gb3JpZ2luYWxfcmF0aW8gKiB0dV9z aXplX2Rlc2lyZWQ7Cj4+ICsJCQl2YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5rID0KPj4gKwkJCQko dmFsaWRfYm91bmRhcnlfbGluayAvIG11bHRpcGxpZXIpIC0gMTsKPj4gKwo+PiArCQkJdHVfc2l6 ZV9taW51czEgPSB0dV9zaXplX2Rlc2lyZWQgLSAxOwo+PiArCQkJZXZlbl9kaXN0cmlidXRpb25f YmYgPSAxOwo+PiArCQkJdmFsaWRfYm91bmRhcnlfbGluayAvPSBtdWx0aXBsaWVyOwo+PiArCQkJ cHJfZGVidWcoIkluZm86IEJvdW5kYXJ5X21vZGVyYXRpb24gZW5hYmxlZFxuIik7Cj4+ICsJCX0K Pj4gKwl9Cj4+ICsKPj4gKwltaW5faGJsYW5rID0gKChpbnQpIHJvdW5kdXBfdTY0KGRpdjY0X3U2 NChkZWxheV9zdGFydF9saW5rICogcGNsawo+PiArCQkJKiBtdWx0aXBsaWVyLCBsY2xrKSwgbXVs dGlwbGllcikpCj4+ICsJCQkvIG11bHRpcGxpZXIgKyBoYmxhbmtfbWFyZ2luOwo+PiArCWlmICho X2JsYW5rIDwgKHUzMiltaW5faGJsYW5rKSB7Cj4+ICsJCXByX2RlYnVnKCIgV0FSTklORzogcnVu X2lkeD0lZCBQcm9ncmFtbWVkIGhfYmxhbmsgJWQgaXMgc21hbGxlciAKPj4gdGhhbiB0aGUgbWlu X2hibGFuayAlZCBzdXBwb3J0ZWQuXG4iLAo+PiArCQkJCQlydW5faWR4LCBoX2JsYW5rLCBtaW5f aGJsYW5rKTsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAoZmlmb19lbXB0eSkJewo+PiArCQl0dV9zaXpl X21pbnVzMSA9IDMxOwo+PiArCQl2YWxpZF9ib3VuZGFyeV9saW5rID0gMzI7Cj4+ICsJCWRlbGF5 X3N0YXJ0X2xpbmsgPSAwOwo+PiArCQlib3VuZGFyeV9tb2RlcmF0aW9uX2VuID0gMDsKPj4gKwl9 Cj4+ICsKPj4gKwlwcl9kZWJ1ZygidHVfc2l6ZV9taW51czE9JWQgdmFsaWRfYm91bmRhcnlfbGlu az0lZCAKPj4gZGVsYXlfc3RhcnRfbGluaz0lZCBib3VuZGFyeV9tb2RlcmF0aW9uX2VuPSVkXG4g dXBwZXJfYm91bmRhcnlfY250PSVkIAo+PiBsb3dlcl9ib3VuZGFyeV9jbnQ9JWQgdmFsaWRfbG93 ZXJfYm91bmRhcnlfbGluaz0lZCBtaW5faGJsYW5rPSVkXG4iLAo+PiArCQl0dV9zaXplX21pbnVz MSwgdmFsaWRfYm91bmRhcnlfbGluaywgZGVsYXlfc3RhcnRfbGluaywKPj4gKwkJYm91bmRhcnlf bW9kZXJhdGlvbl9lbiwgdXBwZXJfYmRyeV9jbnQsIGxvd2VyX2JkcnlfY250LAo+PiArCQl2YWxp ZF9sb3dlcl9ib3VuZGFyeV9saW5rLCBtaW5faGJsYW5rKTsKPj4gKwo+PiArCXR1X3RhYmxlLT52 YWxpZF9ib3VuZGFyeV9saW5rID0gdmFsaWRfYm91bmRhcnlfbGluazsKPj4gKwl0dV90YWJsZS0+ ZGVsYXlfc3RhcnRfbGluayA9IGRlbGF5X3N0YXJ0X2xpbms7Cj4+ICsJdHVfdGFibGUtPmJvdW5k YXJ5X21vZGVyYXRpb25fZW4gPSBib3VuZGFyeV9tb2RlcmF0aW9uX2VuOwo+PiArCXR1X3RhYmxl LT52YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5rID0gdmFsaWRfbG93ZXJfYm91bmRhcnlfbGluazsK Pj4gKwl0dV90YWJsZS0+dXBwZXJfYm91bmRhcnlfY291bnQgPSB1cHBlcl9iZHJ5X2NudDsKPj4g Kwl0dV90YWJsZS0+bG93ZXJfYm91bmRhcnlfY291bnQgPSBsb3dlcl9iZHJ5X2NudDsKPj4gKwl0 dV90YWJsZS0+dHVfc2l6ZV9taW51czEgPSB0dV9zaXplX21pbnVzMTsKPj4gK30KPj4gKwo+PiAr c3RhdGljIHZvaWQgZHBfY3RybF9zZXR1cF90cl91bml0KHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUg KmN0cmwpCj4+ICt7Cj4+ICsJdTMyIGRwX3R1ID0gMHgwOwo+PiArCXUzMiB2YWxpZF9ib3VuZGFy eSA9IDB4MDsKPj4gKwl1MzIgdmFsaWRfYm91bmRhcnkyID0gMHgwOwo+PiArCXN0cnVjdCBkcF92 Y190dV9tYXBwaW5nX3RhYmxlIHR1X2NhbGNfdGFibGU7Cj4+ICsKPj4gKwlkcF9jdHJsX2NhbGNf dHVfcGFyYW1ldGVycyhjdHJsLCAmdHVfY2FsY190YWJsZSk7Cj4+ICsKPj4gKwlkcF90dSB8PSB0 dV9jYWxjX3RhYmxlLnR1X3NpemVfbWludXMxOwo+PiArCXZhbGlkX2JvdW5kYXJ5IHw9IHR1X2Nh bGNfdGFibGUudmFsaWRfYm91bmRhcnlfbGluazsKPj4gKwl2YWxpZF9ib3VuZGFyeSB8PSAodHVf Y2FsY190YWJsZS5kZWxheV9zdGFydF9saW5rIDw8IDE2KTsKPj4gKwo+PiArCXZhbGlkX2JvdW5k YXJ5MiB8PSAodHVfY2FsY190YWJsZS52YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5rIDw8IDEpOwo+ PiArCXZhbGlkX2JvdW5kYXJ5MiB8PSAodHVfY2FsY190YWJsZS51cHBlcl9ib3VuZGFyeV9jb3Vu dCA8PCAxNik7Cj4+ICsJdmFsaWRfYm91bmRhcnkyIHw9ICh0dV9jYWxjX3RhYmxlLmxvd2VyX2Jv dW5kYXJ5X2NvdW50IDw8IDIwKTsKPj4gKwo+PiArCWlmICh0dV9jYWxjX3RhYmxlLmJvdW5kYXJ5 X21vZGVyYXRpb25fZW4pCj4+ICsJCXZhbGlkX2JvdW5kYXJ5MiB8PSBCSVQoMCk7Cj4+ICsKPj4g Kwlwcl9kZWJ1ZygiZHBfdHU9MHgleCwgdmFsaWRfYm91bmRhcnk9MHgleCwgdmFsaWRfYm91bmRh cnkyPTB4JXhcbiIsCj4+ICsJCQlkcF90dSwgdmFsaWRfYm91bmRhcnksIHZhbGlkX2JvdW5kYXJ5 Mik7Cj4+ICsKPj4gKwljdHJsLT5jYXRhbG9nLT5kcF90dSA9IGRwX3R1Owo+PiArCWN0cmwtPmNh dGFsb2ctPnZhbGlkX2JvdW5kYXJ5ID0gdmFsaWRfYm91bmRhcnk7Cj4+ICsJY3RybC0+Y2F0YWxv Zy0+dmFsaWRfYm91bmRhcnkyID0gdmFsaWRfYm91bmRhcnkyOwo+PiArCj4+ICsJY3RybC0+Y2F0 YWxvZy0+dXBkYXRlX3RyYW5zZmVyX3VuaXQoY3RybC0+Y2F0YWxvZyk7Cj4gCj4gQWdhaW4gaGVy ZSwgaWYgeW91IGp1c3QgY2FsbCB0aGUgZnVuY3Rpb24gZGlyZWN0bHksIHlvdSBjYW4gYXZvaWQg dGhlIAo+IGNhbGxiYWNrLgo+IElmIHlvdSBhZGQgZnVuY3Rpb24gYXJndW1lbnRzLCB5b3UgY2Fu IGF2b2lkIGhhdmluZyB0byBzdG9yZQo+IGRwX3R1L3ZhbGlkX2JvdW5kYXJ5Lwo+IHZhbGlkX2Jv dW5kYXJ5MiBlbnRpcmVseS4KPiAKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9jdHJsX3dh aXQ0dmlkZW9fcmVhZHkoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKPj4gK3sKPj4gKwlp bnQgcmV0ID0gMDsKPj4gKwo+PiArCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgm Y3RybC0+dmlkZW9fY29tcCwgSFogLyAyKTsKPiAKPiBCcmVhayBvdXQgdGhlIHRpbWVvdXQgaW50 byBhICNkZWZpbmUKPiAKPj4gKwlpZiAocmV0IDw9IDApIHsKPj4gKwkJcHJfZXJyKCJMaW5rIFRy YWluIHRpbWVkb3V0XG4iKTsKPj4gKwkJcmV0ID0gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwly ZXR1cm4gcmV0Owo+IAo+IFlvdSdyZSBub3QgY2hlY2tpbmcgdGhlIHJldHVybiB2YWx1ZSBhdCB0 aGUgY2FsbHNpdGUuCj4gCj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfY3RybF91cGRhdGVf c2lua192eF9weChzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsLAo+PiArCQkJCSAgICAgdTMy IHZvbHRhZ2VfbGV2ZWwsIHUzMiBwcmVfZW1waGFzaXNfbGV2ZWwpCj4gCj4gSSBkb24ndCB0aGlu ayB0aGlzIG5lZWRzIHRvIGJlIGEgZnVuY3Rpb24sIGp1c3QgbW92ZSBpdCBhbGwgaW50bwo+IGRw X2N0cmxfdXBkYXRlX3Z4X3B4Lgo+IAo+PiArewo+PiArCWludCBpOwo+PiArCXU4IGJ1Zls0XTsK Pj4gKwl1MzIgbWF4X2xldmVsX3JlYWNoZWQgPSAwOwo+PiArCj4+ICsJaWYgKHZvbHRhZ2VfbGV2 ZWwgPT0gRFBfTElOS19WT0xUQUdFX01BWCkgewo+PiArCQlwcl9kZWJ1ZygibWF4LiB2b2x0YWdl IHN3aW5nIGxldmVsIHJlYWNoZWQgJWRcbiIsCj4+ICsJCQkJdm9sdGFnZV9sZXZlbCk7Cj4+ICsJ CW1heF9sZXZlbF9yZWFjaGVkIHw9IEJJVCgyKTsKPiAKPiAgICAgICAgIERQX1RSQUlOX01BWF9T V0lOR19SRUFDSEVECj4gCj4+ICsJfQo+PiArCj4+ICsJaWYgKHByZV9lbXBoYXNpc19sZXZlbCA9 PSBEUF9MSU5LX1BSRV9FTVBIQVNJU19NQVgpIHsKPj4gKwkJcHJfZGVidWcoIm1heC4gcHJlLWVt cGhhc2lzIGxldmVsIHJlYWNoZWQgJWRcbiIsCj4+ICsJCQkJcHJlX2VtcGhhc2lzX2xldmVsKTsK Pj4gKwkJbWF4X2xldmVsX3JlYWNoZWQgIHw9IEJJVCg1KTsKPiAKPiAgICAgICAgIERQX1RSQUlO X01BWF9QUkVfRU1QSEFTSVNfUkVBQ0hFRAo+IAo+PiArCX0KPj4gKwo+PiArCXByZV9lbXBoYXNp c19sZXZlbCA8PD0gMzsKPiAKPiBUaGlzIGlzIERQX1RSQUlOX1BSRV9FTVBIQVNJU19TSElGVCwg YnV0IEknbSBndWVzc2luZyB5b3UgYXJlbid0IHVzaW5nIAo+IHRoZQo+IERQX1RSQUlOX1BSRV9F TVBIX0xFVkVMXyogdmFsdWVzIHdoZW4geW91IHNldCBwX2xldmVsLiBTbyB0aGUgcmlnaHQgd2F5 IAo+IHRvIGZpeAo+IHRoaXMgaXMgdG8gdXNlIHRob3NlICNkZWZpbmVzIGFuZCBnZXQgcmlkIG9m IHRoaXMgc2hpZnQuCj4gCj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQo+IAo+IFlv dSBzaG91bGRuJ3QgYXNzdW1lIDQgbGFuZXMgaGVyZSwgdXNlIGRybV9kcF9saW5rLT5udW1fbGFu ZXMKPiAKPj4gKwkJYnVmW2ldID0gdm9sdGFnZV9sZXZlbCB8IHByZV9lbXBoYXNpc19sZXZlbCB8 IG1heF9sZXZlbF9yZWFjaGVkOwo+PiArCj4+ICsJcHJfZGVidWcoInNpbms6IHB8dj0weCV4XG4i LCB2b2x0YWdlX2xldmVsIHwgcHJlX2VtcGhhc2lzX2xldmVsKTsKPj4gKwlyZXR1cm4gZHJtX2Rw X2RwY2Rfd3JpdGUoY3RybC0+YXV4LT5kcm1fYXV4LCAweDEwMywgYnVmLCA0KTsKPiAKPiBzLzB4 MTAzL0RQX1RSQUlOSU5HX0xBTkUwX1NFVC8gYW5kIHMvNC9kcm1fZHBfbGluay0+bnVtX2xhbmVz Lwo+IAo+IEFsc28sIHRoaXMgd2lsbCByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHRyYW5zbWl0dGVk LCBub3QgKDAgfHwgLWVycm5vKS4KPiAKPiAKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBf Y3RybF91cGRhdGVfdnhfcHgoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKPj4gK3sKPj4g KwlzdHJ1Y3QgZHBfbGluayAqbGluayA9IGN0cmwtPmxpbms7Cj4+ICsKPj4gKwljdHJsLT5jYXRh bG9nLT51cGRhdGVfdnhfcHgoY3RybC0+Y2F0YWxvZywKPj4gKwkJbGluay0+cGh5X3BhcmFtcy52 X2xldmVsLCBsaW5rLT5waHlfcGFyYW1zLnBfbGV2ZWwpOwo+PiArCj4+ICsJZHBfY3RybF91cGRh dGVfc2lua192eF9weChjdHJsLCBsaW5rLT5waHlfcGFyYW1zLnZfbGV2ZWwsCj4+ICsJCWxpbmst PnBoeV9wYXJhbXMucF9sZXZlbCk7Cj4gCj4gRm9ydHVuYXRlbHkgKG9yIHVuZm9ydHVuYXRlbHkp LCB0aGUgcmV0dXJuIHZhbHVlIGlzbid0IGNoZWNrZWQuIFNvIAo+IHBsZWFzZSBjaGVjawo+IHRo ZSByZXR1cm4gdmFsdWUuCj4gCj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2N0cmxfdHJh aW5fcGF0dGVybl9zZXQoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCwKPj4gKwkJdTggcGF0 dGVybikKPj4gK3sKPj4gKwl1OCBidWZbNF07Cj4gCj4gV2h5IDQ/Cj4gCj4+ICsKPj4gKwlwcl9k ZWJ1Zygic2luazogcGF0dGVybj0leFxuIiwgcGF0dGVybik7Cj4+ICsKPj4gKwlidWZbMF0gPSBw YXR0ZXJuOwo+PiArCWRybV9kcF9kcGNkX3dyaXRlKGN0cmwtPmF1eC0+ZHJtX2F1eCwgRFBfVFJB SU5JTkdfUEFUVEVSTl9TRVQsIGJ1ZiwgCj4+IDEpOwo+IAo+IENoZWNrIHRoZSByZXR1cm4gdmFs dWUgb2YgdGhpcyBhbmQgYWxsbCBkcm1fZHBfZHBjZF8ocmVhZHx3cml0ZSkgY2FsbHMuCj4gCj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfY3RybF9yZWFkX2xpbmtfc3RhdHVzKHN0cnVjdCBk cF9jdHJsX3ByaXZhdGUgKmN0cmwsCj4+ICsJCQkJICAgIHU4ICpsaW5rX3N0YXR1cykKPj4gK3sK Pj4gKwlpbnQgcmV0ID0gMCwgbGVuOwo+PiArCXUzMiBjb25zdCBvZmZzZXQgPSBEUF9MQU5FX0FM SUdOX1NUQVRVU19VUERBVEVEIC0gRFBfTEFORTBfMV9TVEFUVVM7Cj4+ICsJdTMyIGxpbmtfc3Rh dHVzX3JlYWRfbWF4X3JldHJpZXMgPSAxMDA7Cj4+ICsKPj4gKwl3aGlsZSAoLS1saW5rX3N0YXR1 c19yZWFkX21heF9yZXRyaWVzKSB7Cj4+ICsJCWxlbiA9IGRybV9kcF9kcGNkX3JlYWRfbGlua19z dGF0dXMoY3RybC0+YXV4LT5kcm1fYXV4LAo+PiArCQkJbGlua19zdGF0dXMpOwo+PiArCQlpZiAo bGVuICE9IERQX0xJTktfU1RBVFVTX1NJWkUpIHsKPj4gKwkJCXByX2VycigiRFAgbGluayBzdGF0 dXMgcmVhZCBmYWlsZWQsIGVycjogJWRcbiIsIGxlbik7Cj4+ICsJCQlyZXQgPSBsZW47Cj4+ICsJ CQlicmVhazsKPiAKPiBKdXN0IHJldHVybiBkaXJlY3RseSBoZXJlLiBZb3UgY2FuIGFsc28ganVz dCBkcm9wIGxlbiBhbmQgdXNlIHJldCAob3IgCj4gZHJvcCByZXQKPiBhbmQgdXNlIGxlbikuCj4g Cj4+ICsJCX0KPj4gKwo+PiArCQlpZiAoIShsaW5rX3N0YXR1c1tvZmZzZXRdICYgRFBfTElOS19T VEFUVVNfVVBEQVRFRCkpCj4+ICsJCQlicmVhazsKPiAKPiBBbmQgcmV0dXJuIDAgZGlyZWN0bHkg aGVyZQo+IAo+PiArCX0KPj4gKwo+PiArCXJldHVybiByZXQ7Cj4gCj4gSGVyZSB5b3UncmUgcmV0 dXJuaW5nIHN1Y2Nlc3NmdWwgaW4gdGhlIHRpbWVvdXQgY2FzZSA6KCBPbmNlIHlvdQo+IGNvbnZl cnQgdGhlIGFib3ZlCj4gdG8gZGlyZWN0IHJldHVybnMsIHRoaXMgY2FuIGJlY29tZSByZXR1cm4g LUVUSU1FRE9VVDsKPiAKPiBJIHRoaW5rIHlvdSBzaG91bGQgYWxzbyBkcm9wIHRoZSBudW1iZXIg b2YgcmV0cmllcyBkcmFzdGljYWxseS4KPiAKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9j dHJsX2xpbmtfdHJhaW5fMShzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQo+PiArewo+PiAr CWludCB0cmllcywgb2xkX3ZfbGV2ZWwsIHJldCA9IDA7Cj4+ICsJdTggbGlua19zdGF0dXNbRFBf TElOS19TVEFUVVNfU0laRV07Cj4+ICsJaW50IGNvbnN0IG1heGltdW1fcmV0cmllcyA9IDU7Cj4+ ICsKPj4gKwlkcF9jdHJsX3N0YXRlX2N0cmwoY3RybCwgMCk7Cj4+ICsJLyogTWFrZSBzdXJlIHRv IGNsZWFyIHRoZSBjdXJyZW50IHBhdHRlcm4gYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IG9uZSAKPj4g Ki8KPj4gKwl3bWIoKTsKPj4gKwo+PiArCWN0cmwtPmNhdGFsb2ctPnNldF9wYXR0ZXJuKGN0cmwt PmNhdGFsb2csIDB4MDEpOwo+IAo+ICNkZWZpbmUgdGhhdCBiaXQgcGxlYXNlCj4gCj4+ICsJZHBf Y3RybF90cmFpbl9wYXR0ZXJuX3NldChjdHJsLCBEUF9UUkFJTklOR19QQVRURVJOXzEgfAo+PiAr CQlEUF9MSU5LX1NDUkFNQkxJTkdfRElTQUJMRSk7IC8qIHRyYWluXzEgKi8KPiAKPiB0aGUgdHJh aW5fMSBjb21tZW50IGlzbid0IG5lZWRlZC4KPiAKPj4gKwlkcF9jdHJsX3VwZGF0ZV92eF9weChj dHJsKTsKPj4gKwo+PiArCXRyaWVzID0gMDsKPj4gKwlvbGRfdl9sZXZlbCA9IGN0cmwtPmxpbmst PnBoeV9wYXJhbXMudl9sZXZlbDsKPj4gKwl3aGlsZSAoMSkgewo+IAo+IEluc3RlYWQgb2YgdW5i b3VuZGVkLCB0aGlzIHNob3VsZCBiZToKPiAgICAgICAgIGZvciAodHJpZXMgPSAwOyB0cmllcyA8 IG1heGltdW1fcmV0cmllczsgdHJpZXMrKykgewo+IAo+IFlvdSdsbCBuZWVkIHRvIHMvYnJlYWsv cmV0dXJuIHJldC8gaW4gdGhlIHJlc3Qgb2YgdGhlIGxvb3AgYW5kIG1vdmUgdGhlIAo+IHRpbWVv dXQKPiBlcnJvciB0byB0aGUgYm90dG9tIG9mIHRoZSBmdW5jdGlvbgo+IAo+PiArCQlkcm1fZHBf bGlua190cmFpbl9jbG9ja19yZWNvdmVyeV9kZWxheShjdHJsLT5wYW5lbC0+ZHBjZCk7Cj4+ICsK Pj4gKwkJcmV0ID0gZHBfY3RybF9yZWFkX2xpbmtfc3RhdHVzKGN0cmwsIGxpbmtfc3RhdHVzKTsK Pj4gKwkJaWYgKHJldCkKPj4gKwkJCWJyZWFrOwo+PiArCj4+ICsJCWlmIChkcm1fZHBfY2xvY2tf cmVjb3Zlcnlfb2sobGlua19zdGF0dXMsCj4+ICsJCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5s YW5lX2NvdW50KSkgewo+PiArCQkJYnJlYWs7Cj4+ICsJCX0KPj4gKwo+PiArCQlpZiAoY3RybC0+ bGluay0+cGh5X3BhcmFtcy52X2xldmVsID09IERQX0xJTktfVk9MVEFHRV9NQVgpIHsKPiAKPiBT aW5jZSBEUF9MSU5LX1ZPTFRBR0VfTUFYID09IERQX0xJTktfVk9MVEFHRV9MRVZFTF8yLCB5b3Un bGwgZW5kIHVwIG5vdCAKPiByZXRyeWluZwo+IExFVkVMXzIgYXQgYWxsLgo+IAo+PiArCQkJcHJf ZXJyX3JhdGVsaW1pdGVkKCJtYXggdl9sZXZlbCByZWFjaGVkXG4iKTsKPj4gKwkJCXJldCA9IC1F QUdBSU47Cj4+ICsJCQlicmVhazsKPj4gKwkJfQo+PiArCj4+ICsJCWlmIChvbGRfdl9sZXZlbCA9 PSBjdHJsLT5saW5rLT5waHlfcGFyYW1zLnZfbGV2ZWwpIHsKPj4gKwkJCXRyaWVzKys7Cj4+ICsJ CQlpZiAodHJpZXMgPj0gbWF4aW11bV9yZXRyaWVzKSB7Cj4+ICsJCQkJcHJfZXJyKCJtYXggdHJp ZXMgcmVhY2hlZFxuIik7Cj4+ICsJCQkJcmV0ID0gLUVUSU1FRE9VVDsKPj4gKwkJCQlicmVhazsK Pj4gKwkJCX0KPj4gKwkJfSBlbHNlIHsKPj4gKwkJCXRyaWVzID0gMDsKPj4gKwkJCW9sZF92X2xl dmVsID0gY3RybC0+bGluay0+cGh5X3BhcmFtcy52X2xldmVsOwo+PiArCQl9Cj4+ICsKPj4gKwkJ cHJfZGVidWcoImNsb2NrIHJlY292ZXJ5IG5vdCBkb25lLCBhZGp1c3RpbmcgdnggcHhcbiIpOwo+ PiArCj4+ICsJCWN0cmwtPmxpbmstPmFkanVzdF9sZXZlbHMoY3RybC0+bGluaywgbGlua19zdGF0 dXMpOwo+PiArCQlkcF9jdHJsX3VwZGF0ZV92eF9weChjdHJsKTsKPj4gKwl9Cj4+ICsKPj4gKwly ZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGRwX2N0cmxfbGlua19yYXRlX2Rv d25fc2hpZnQoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKPj4gK3sKPj4gKwlpbnQgcmV0 ID0gMDsKPj4gKwo+PiArCWlmICghY3RybCkKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4g Kwlzd2l0Y2ggKGN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmJ3X2NvZGUpIHsKPj4gKwljYXNlIERQ X0xJTktfQldfOF8xOgo+PiArCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5id19jb2RlID0gRFBf TElOS19CV181XzQ7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgRFBfTElOS19CV181XzQ6Cj4+ICsJ CWN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmJ3X2NvZGUgPSBEUF9MSU5LX0JXXzJfNzsKPj4gKwkJ YnJlYWs7Cj4+ICsJY2FzZSBEUF9MSU5LX0JXXzJfNzoKPj4gKwljYXNlIERQX0xJTktfQldfMV82 MjoKPj4gKwlkZWZhdWx0Ogo+PiArCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5id19jb2RlID0g RFBfTElOS19CV18xXzYyOwo+PiArCQlicmVhazsKPj4gKwl9Owo+PiArCj4+ICsJcHJfZGVidWco Im5ldyBidyBjb2RlPTB4JXhcbiIsIGN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmJ3X2NvZGUpOwo+ PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfY3RybF9j bGVhcl90cmFpbmluZ19wYXR0ZXJuKHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgCj4+ICpjdHJsKQo+ PiArewo+PiArCWRwX2N0cmxfdHJhaW5fcGF0dGVybl9zZXQoY3RybCwgMCk7Cj4gCj4gCj4gRFBf VFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFCj4gCj4gCj4+ICsJZHJtX2RwX2xpbmtfdHJhaW5fY2hh bm5lbF9lcV9kZWxheShjdHJsLT5wYW5lbC0+ZHBjZCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bnQgZHBfY3RybF9saW5rX3RyYWluaW5nXzIoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkK Pj4gK3sKPj4gKwlpbnQgdHJpZXMgPSAwLCByZXQgPSAwOwo+PiArCWNoYXIgcGF0dGVybjsKPj4g KwlpbnQgY29uc3QgbWF4aW11bV9yZXRyaWVzID0gNTsKPj4gKwl1OCBsaW5rX3N0YXR1c1tEUF9M SU5LX1NUQVRVU19TSVpFXTsKPj4gKwo+PiArCWRwX2N0cmxfc3RhdGVfY3RybChjdHJsLCAwKTsK Pj4gKwkvKiBNYWtlIHN1cmUgdG8gY2xlYXIgdGhlIGN1cnJlbnQgcGF0dGVybiBiZWZvcmUgc3Rh cnRpbmcgYSBuZXcgb25lIAo+PiAqLwo+PiArCXdtYigpOwo+PiArCj4+ICsJaWYgKGRybV9kcF90 cHMzX3N1cHBvcnRlZChjdHJsLT5wYW5lbC0+ZHBjZCkpCj4+ICsJCXBhdHRlcm4gPSBEUF9UUkFJ TklOR19QQVRURVJOXzM7Cj4+ICsJZWxzZQo+PiArCQlwYXR0ZXJuID0gRFBfVFJBSU5JTkdfUEFU VEVSTl8yOwo+PiArCj4+ICsJZHBfY3RybF91cGRhdGVfdnhfcHgoY3RybCk7Cj4+ICsJY3RybC0+ Y2F0YWxvZy0+c2V0X3BhdHRlcm4oY3RybC0+Y2F0YWxvZywgcGF0dGVybik7Cj4+ICsJZHBfY3Ry bF90cmFpbl9wYXR0ZXJuX3NldChjdHJsLCBwYXR0ZXJuIHwgCj4+IERQX1JFQ09WRVJFRF9DTE9D S19PVVRfRU4pOwo+PiArCj4+ICsJZG8gIHsKPiAKPiAgICAgICAgIGZvciAodHJpZXMgPSAwOyB0 cmllcyA8IG1heGltdW1fcmV0cmllczsgdHJpZXMrKykKPiAKPj4gKwkJZHJtX2RwX2xpbmtfdHJh aW5fY2hhbm5lbF9lcV9kZWxheShjdHJsLT5wYW5lbC0+ZHBjZCk7Cj4+ICsKPj4gKwkJcmV0ID0g ZHBfY3RybF9yZWFkX2xpbmtfc3RhdHVzKGN0cmwsIGxpbmtfc3RhdHVzKTsKPj4gKwkJaWYgKHJl dCkKPj4gKwkJCWJyZWFrOwo+PiArCj4+ICsJCWlmIChkcm1fZHBfY2hhbm5lbF9lcV9vayhsaW5r X3N0YXR1cywKPj4gKwkJCWN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmxhbmVfY291bnQpKQo+PiAr CQkJYnJlYWs7Cj4+ICsKPj4gKwkJaWYgKHRyaWVzID4gbWF4aW11bV9yZXRyaWVzKSB7Cj4+ICsJ CQlyZXQgPSAtRVRJTUVET1VUOwo+PiArCQkJYnJlYWs7Cj4+ICsJCX0KPj4gKwkJdHJpZXMrKzsK Pj4gKwo+PiArCQljdHJsLT5saW5rLT5hZGp1c3RfbGV2ZWxzKGN0cmwtPmxpbmssIGxpbmtfc3Rh dHVzKTsKPj4gKwkJZHBfY3RybF91cGRhdGVfdnhfcHgoY3RybCk7Cj4+ICsJfSB3aGlsZSAoMSk7 Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGRwX2N0cmxf bGlua190cmFpbihzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQo+PiArewo+PiArCWludCBy ZXQgPSAwOwo+PiArCXU4IGVuY29kaW5nID0gMHgxOwo+IAo+IERQX1NFVF9BTlNJXzhCMTBCCj4g Cj4+ICsJc3RydWN0IGRybV9kcF9saW5rIGxpbmtfaW5mbyA9IHswfTsKPj4gKwo+PiArCWN0cmwt PmxpbmstPnBoeV9wYXJhbXMucF9sZXZlbCA9IDA7Cj4+ICsJY3RybC0+bGluay0+cGh5X3BhcmFt cy52X2xldmVsID0gMDsKPj4gKwo+PiArCWRwX2N0cmxfY29uZmlnX2N0cmwoY3RybCk7Cj4+ICsK Pj4gKwlsaW5rX2luZm8ubnVtX2xhbmVzID0gY3RybC0+bGluay0+bGlua19wYXJhbXMubGFuZV9j b3VudDsKPj4gKwlsaW5rX2luZm8ucmF0ZSA9IGRybV9kcF9id19jb2RlX3RvX2xpbmtfcmF0ZSgK Pj4gKwkJY3RybC0+bGluay0+bGlua19wYXJhbXMuYndfY29kZSk7Cj4+ICsJbGlua19pbmZvLmNh cGFiaWxpdGllcyA9IGN0cmwtPnBhbmVsLT5saW5rX2luZm8uY2FwYWJpbGl0aWVzOwo+IAo+IERy b3AgdGhlIGhhbmQtcm9sbGVkIGN0cmwtPnBhbmVsLT5saW5rX2luZm8gYW5kIHVzZSBkcm1fZHBf bGlua19wcm9iZSAKPiB0byBmaWxsIGluCj4gZHJtX2RwX2xpbmsuCj4gCj4+ICsKPj4gKwlkcm1f ZHBfbGlua19jb25maWd1cmUoY3RybC0+YXV4LT5kcm1fYXV4LCAmbGlua19pbmZvKTsKPj4gKwlk cm1fZHBfZHBjZF93cml0ZShjdHJsLT5hdXgtPmRybV9hdXgsIAo+PiBEUF9NQUlOX0xJTktfQ0hB Tk5FTF9DT0RJTkdfU0VULAo+PiArCQkJCSZlbmNvZGluZywgMSk7Cj4+ICsKPj4gKwlyZXQgPSBk cF9jdHJsX2xpbmtfdHJhaW5fMShjdHJsKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCXByX2Vycigi bGluayB0cmFpbmluZyAjMSBmYWlsZWRcbiIpOwo+IAo+IHByaW50IHJldAo+IAo+PiArCQlnb3Rv IGVuZDsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBwcmludCBzdWNjZXNzIGluZm8gYXMgdGhpcyBpcyBh IHJlc3VsdCBvZiB1c2VyIGluaXRpYXRlZCBhY3Rpb24gCj4+ICovCj4+ICsJcHJfaW5mbygibGlu ayB0cmFpbmluZyAjMSBzdWNjZXNzZnVsXG4iKTsKPiAKPiB0aGlzIHNob3VsZCBiZSBkZWJ1ZyBs b2dsZXZlbAo+IAo+PiArCj4+ICsJcmV0ID0gZHBfY3RybF9saW5rX3RyYWluaW5nXzIoY3RybCk7 Cj4+ICsJaWYgKHJldCkgewo+PiArCQlwcl9lcnIoImxpbmsgdHJhaW5pbmcgIzIgZmFpbGVkXG4i KTsKPiAKPiBwcmludCByZXQKPiAKPj4gKwkJZ290byBlbmQ7Cj4+ICsJfQo+PiArCj4+ICsJLyog cHJpbnQgc3VjY2VzcyBpbmZvIGFzIHRoaXMgaXMgYSByZXN1bHQgb2YgdXNlciBpbml0aWF0ZWQg YWN0aW9uIAo+PiAqLwo+PiArCXByX2luZm8oImxpbmsgdHJhaW5pbmcgIzIgc3VjY2Vzc2Z1bFxu Iik7Cj4gCj4gZGVidWcgbG9nbGV2ZWwKPiAKPj4gKwo+PiArZW5kOgo+PiArCWRwX2N0cmxfc3Rh dGVfY3RybChjdHJsLCAwKTsKPj4gKwkvKiBNYWtlIHN1cmUgdG8gY2xlYXIgdGhlIGN1cnJlbnQg cGF0dGVybiBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgb25lIAo+PiAqLwo+PiArCXdtYigpOwo+IAo+ IFNhbWUgY29tbWVudHMgcmU6IHdtYgo+IAo+PiArCj4+ICsJZHBfY3RybF9jbGVhcl90cmFpbmlu Z19wYXR0ZXJuKGN0cmwpOwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bnQgZHBfY3RybF9zZXR1cF9tYWluX2xpbmsoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCwg Ym9vbCAKPj4gdHJhaW4pCj4+ICt7Cj4+ICsJYm9vbCBtYWlubGlua19yZWFkeSA9IGZhbHNlOwo+ PiArCWludCByZXQgPSAwOwo+PiArCj4+ICsJY3RybC0+Y2F0YWxvZy0+bWFpbmxpbmtfY3RybChj dHJsLT5jYXRhbG9nLCB0cnVlKTsKPj4gKwo+PiArCXJldCA9IGN0cmwtPmxpbmstPnBzbV9jb25m aWcoY3RybC0+bGluaywKPj4gKwkJJmN0cmwtPnBhbmVsLT5saW5rX2luZm8sIGZhbHNlKTsKPiAK PiBUaGlzIGNhbiBmaXQgb24gb25lIGxpbmUKPiAKPj4gKwlpZiAocmV0KQo+PiArCQlnb3RvIGVu ZDsKPiAKPiBBbGwgb2YgdGhlICJnb3RvIGVuZCIncyBjYW4gYmUgcmVwbGFjZWQgd2l0aCAicmV0 dXJuIHJldCIsIHRoZW4gZGVsZXRlIAo+IHRoZSBlbmQKPiBsYWJlbC4KPiAKPj4gKwo+PiArCWlm IChjdHJsLT5saW5rLT5zaW5rX3JlcXVlc3QgJiBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVS TikKPiAKPiBZb3Ugc2hvdWxkIHJlYWxseSBwcm90ZWN0IHNpbmtfcmVxdWVzdCB3aXRoIGEgbG9j aywgaXQncyByYWN5LiBJJ20gCj4gdHJ5aW5nCj4gdG8gY2F0Y2ggdGhlIHJhY2UgY29uZGl0aW9u cyB3aGlsZSBJIHJldmlldywgYnV0IEknZCB1cmdlIHlvdSB0byBhdWRpdCAKPiB0aGUKPiBkcml2 ZXIgZm9yIG90aGVyIHBsYWNlcyB0aGF0IG5lZWQgbG9ja2luZy4KPiAKPj4gKwkJZ290byBlbmQ7 Cj4+ICsKPj4gKwlpZiAoIXRyYWluKQo+PiArCQlnb3RvIHNlbmRfdmlkZW87Cj4gCj4gSW5zdGVh ZCBvZiBhZGRpbmcgdGhlIGxhYmVsLCBqdXN0IHdyYXAgdGhlIHJlc2V0IGFuZCB0cmFpbiBjYWxs cyBpbiBhbgo+IGlmICh0cmFpbikge30gYmxvY2suCj4gCj4gCj4+ICsKPj4gKwkvKgo+PiArCSAq IEFzIHBhcnQgb2YgcHJldmlvdXMgY2FsbHMsIERQIGNvbnRyb2xsZXIgc3RhdGUgbWlnaHQgaGF2 ZQo+PiArCSAqIHRyYW5zaXRpb25lZCB0byBQVVNIX0lETEUuIEluIG9yZGVyIHRvIHN0YXJ0IHRy YW5zbWl0dGluZyBhIGxpbmsKPj4gKwkgKiB0cmFpbmluZyBwYXR0ZXJuLCB3ZSBoYXZlIHRvIGZp cnN0IHRvIGEgRFAgc29mdHdhcmUgcmVzZXQuCj4gCj4gIndlIGhhdmUgdG8gZmlyc3QgX2RvXyBh Li4uIgo+IAo+PiArCSAqLwo+PiArCWN0cmwtPmNhdGFsb2ctPnJlc2V0KGN0cmwtPmNhdGFsb2cp Owo+PiArCj4+ICsJcmV0ID0gZHBfY3RybF9saW5rX3RyYWluKGN0cmwpOwo+PiArCWlmIChyZXQp Cj4+ICsJCWdvdG8gZW5kOwo+PiArCj4+ICtzZW5kX3ZpZGVvOgo+PiArCS8qCj4+ICsJICogU2V0 IHVwIHRyYW5zZmVyIHVuaXQgdmFsdWVzIGFuZCBzZXQgY29udHJvbGxlciBzdGF0ZSB0byBzZW5k Cj4+ICsJICogdmlkZW8uCj4+ICsJICovCj4+ICsJZHBfY3RybF9zZXR1cF90cl91bml0KGN0cmwp Owo+PiArCWN0cmwtPmNhdGFsb2ctPnN0YXRlX2N0cmwoY3RybC0+Y2F0YWxvZywgU1RfU0VORF9W SURFTyk7Cj4+ICsKPj4gKwlkcF9jdHJsX3dhaXQ0dmlkZW9fcmVhZHkoY3RybCk7Cj4gCj4gQ2hl Y2sgcmV0dXJuIHZhbHVlIHBsZWFzZQo+IAo+PiArCW1haW5saW5rX3JlYWR5ID0gY3RybC0+Y2F0 YWxvZy0+bWFpbmxpbmtfcmVhZHkoY3RybC0+Y2F0YWxvZyk7Cj4+ICsJcHJfZGVidWcoIm1haW5s aW5rICVzXG4iLCBtYWlubGlua19yZWFkeSA/ICJSRUFEWSIgOiAiTk9UIFJFQURZIik7Cj4+ICtl bmQ6Cj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfY3RybF9z ZXRfY2xvY2tfcmF0ZShzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsLAo+PiArCQkJCSAgIGNo YXIgKm5hbWUsIHUzMiByYXRlKQo+PiArewo+PiArCXUzMiBudW0gPSBjdHJsLT5wYXJzZXItPm1w W0RQX0NUUkxfUE1dLm51bV9jbGs7Cj4+ICsJc3RydWN0IGRzc19jbGsgKmNmZyA9IGN0cmwtPnBh cnNlci0+bXBbRFBfQ1RSTF9QTV0uY2xrX2NvbmZpZzsKPj4gKwo+PiArCXdoaWxlIChudW0gJiYg c3RyY21wKGNmZy0+Y2xrX25hbWUsIG5hbWUpKSB7Cj4+ICsJCW51bS0tOwo+PiArCQljZmcrKzsK Pj4gKwl9Cj4+ICsKPj4gKwlwcl9kZWJ1Zygic2V0dGluZyByYXRlPSVkIG9uIGNsaz0lc1xuIiwg cmF0ZSwgbmFtZSk7Cj4+ICsKPj4gKwlpZiAobnVtKQo+PiArCQljZmctPnJhdGUgPSByYXRlOwo+ PiArCWVsc2UKPj4gKwkJcHJfZXJyKCIlcyBjbG9jayBjb3VsZCBub3QgYmUgc2V0IHdpdGggcmF0 ZSAlZFxuIiwgbmFtZSwgcmF0ZSk7Cj4+ICt9Cj4gCj4gSW5zdGVhZCBvZiBkb2luZyBhbGwgb2Yg dGhpcyB3b3JrLCBqdXN0IHN0b3JlIHBvaW50ZXJzIHRvIHRoZSBsaW5rIGFuZCAKPiBwaXhlbAo+ IGNsb2NrIHdoZW4geW91IHBhcnNlIHRoZSBkdC4gVGhhdCB3YXkgeW91IGNhbiBqdXN0IGFjY2Vz cyB0aGVtIGRpcmVjdGx5IAo+IGluCj4gZHBfY3RybF9lbmFibGVfbWFpbmxpbmtfY2xvY2tzLgo+ IAo+PiArCj4+ICtzdGF0aWMgaW50IGRwX2N0cmxfZW5hYmxlX21haW5saW5rX2Nsb2NrcyhzdHJ1 Y3QgZHBfY3RybF9wcml2YXRlIAo+PiAqY3RybCkKPj4gK3sKPj4gKwlpbnQgcmV0ID0gMDsKPj4g Kwo+PiArCWN0cmwtPnBvd2VyLT5zZXRfcGl4ZWxfY2xrX3BhcmVudChjdHJsLT5wb3dlcik7Cj4+ ICsKPj4gKwlkcF9jdHJsX3NldF9jbG9ja19yYXRlKGN0cmwsICJjdHJsX2xpbmtfY2xrIiwKPj4g KwkJZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKGN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmJ3 X2NvZGUpKTsKPj4gKwo+PiArCWRwX2N0cmxfc2V0X2Nsb2NrX3JhdGUoY3RybCwgImN0cmxfcGl4 ZWxfY2xrIiwgY3RybC0+cGl4ZWxfcmF0ZSk7Cj4+ICsKPj4gKwlyZXQgPSBjdHJsLT5wb3dlci0+ Y2xrX2VuYWJsZShjdHJsLT5wb3dlciwgRFBfQ1RSTF9QTSwgdHJ1ZSk7Cj4+ICsJaWYgKHJldCkg ewo+PiArCQlwcl9lcnIoIlVuYWJsZWQgdG8gc3RhcnQgbGluayBjbG9ja3NcbiIpOwo+PiArCQly ZXQgPSAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBpbnQgZHBfY3RybF9kaXNhYmxlX21haW5saW5rX2Nsb2NrcyhzdHJ1Y3QgZHBfY3Ry bF9wcml2YXRlIAo+PiAqY3RybCkKPj4gK3sKPj4gKwlyZXR1cm4gY3RybC0+cG93ZXItPmNsa19l bmFibGUoY3RybC0+cG93ZXIsIERQX0NUUkxfUE0sIGZhbHNlKTsKPj4gK30KPiAKPiBUaGlzIGZ1 bmN0aW9uIGlzbid0IG5lY2VzYXJ5IChldmVuIGxlc3Mgc28gd2hlbiBhbGwgb2YgdGhlIGNhdGFs b2cgCj4gYWJzdHJhY3Rpb25zCj4gYXJlIGdvbmUpLgo+IAo+PiArCj4+ICtzdGF0aWMgaW50IGRw X2N0cmxfaG9zdF9pbml0KHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsLCBib29sIGZsaXApCj4+ICt7 Cj4+ICsJc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxv Z19jdHJsICpjYXRhbG9nOwo+PiArCj4+ICsJaWYgKCFkcF9jdHJsKSB7Cj4+ICsJCXByX2Vycigi SW52YWxpZCBpbnB1dCBkYXRhXG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiAr Cj4+ICsJY3RybCA9IGNvbnRhaW5lcl9vZihkcF9jdHJsLCBzdHJ1Y3QgZHBfY3RybF9wcml2YXRl LCBkcF9jdHJsKTsKPj4gKwo+PiArCWN0cmwtPm9yaWVudGF0aW9uID0gZmxpcDsKPj4gKwljYXRh bG9nID0gY3RybC0+Y2F0YWxvZzsKPj4gKwo+PiArCWNhdGFsb2ctPnVzYl9yZXNldChjdHJsLT5j YXRhbG9nLCBmbGlwKTsKPj4gKwljYXRhbG9nLT5waHlfcmVzZXQoY3RybC0+Y2F0YWxvZyk7Cj4+ ICsJY2F0YWxvZy0+ZW5hYmxlX2lycShjdHJsLT5jYXRhbG9nLCB0cnVlKTsKPj4gKwo+PiArCXJl dHVybiAwOwo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGRwX2N0cmxfaG9zdF9kZWluaXQoKSAt IFVuaW5pdGlhbGl6ZSBEUCBjb250cm9sbGVyCj4+ICsgKiBAY3RybDogRGlzcGxheSBQb3J0IERy aXZlciBkYXRhCj4+ICsgKgo+PiArICogUGVyZm9ybSByZXF1aXJlZCBzdGVwcyB0byB1bmluaXRp YWxpemUgRFAgY29udHJvbGxlcgo+PiArICogYW5kIGl0cyByZXNvdXJjZXMuCj4+ICsgKi8KPj4g K3N0YXRpYyB2b2lkIGRwX2N0cmxfaG9zdF9kZWluaXQoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwp Cj4+ICt7Cj4+ICsJc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsKPj4gKwo+PiArCWlmICgh ZHBfY3RybCkgewo+PiArCQlwcl9lcnIoIkludmFsaWQgaW5wdXQgZGF0YVxuIik7Cj4+ICsJCXJl dHVybjsKPj4gKwl9Cj4+ICsKPj4gKwljdHJsID0gY29udGFpbmVyX29mKGRwX2N0cmwsIHN0cnVj dCBkcF9jdHJsX3ByaXZhdGUsIGRwX2N0cmwpOwo+PiArCj4+ICsJY3RybC0+Y2F0YWxvZy0+ZW5h YmxlX2lycShjdHJsLT5jYXRhbG9nLCBmYWxzZSk7Cj4+ICsKPj4gKwlwcl9kZWJ1ZygiSG9zdCBk ZWluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseVxuIik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBib29s IGRwX2N0cmxfdXNlX2ZpeGVkX252aWQoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCkKPj4g K3sKPj4gKwl1OCAqZHBjZCA9IGN0cmwtPnBhbmVsLT5kcGNkOwo+PiArCj4+ICsJLyoKPj4gKwkg KiBGb3IgYmV0dGVyIGludGVyb3AgZXhwZXJpZW5jZSwgdXNlZCBhIGZpeGVkIE5WSUQ9MHg4MDAw Cj4+ICsJICogd2hlbmV2ZXIgY29ubmVjdGVkIHRvIGEgVkdBIGRvbmdsZSBkb3duc3RyZWFtLgo+ PiArCSAqLwo+PiArCWlmIChkcGNkW0RQX0RPV05TVFJFQU1QT1JUX1BSRVNFTlRdICYgRFBfRFdO X1NUUk1fUE9SVF9QUkVTRU5UKSB7Cj4+ICsJCXU4IHR5cGUgPSBkcGNkW0RQX0RPV05TVFJFQU1Q T1JUX1BSRVNFTlRdICYKPj4gKwkJCURQX0RXTl9TVFJNX1BPUlRfVFlQRV9NQVNLOwo+PiArCQlp ZiAodHlwZSA9PSBEUF9EV05fU1RSTV9QT1JUX1RZUEVfQU5BTE9HKQo+PiArCQkJcmV0dXJuIHRy dWU7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIGZhbHNlOwo+PiArfQo+IAo+IEZvciB0aGlzLCB5 b3Ugc2hvdWxkIHVzZSB0aGUgRFBfRFBDRF9RVUlSS19DT05TVEFOVF9OIHF1aXJrIGFuZAo+IGRy bV9kcF9oYXNfcXVpcmsoKSBpbnN0ZWFkLgo+IAo+IAo+PiArCj4+ICtzdGF0aWMgaW50IGRwX2N0 cmxfbGlua19tYWludGVuYW5jZShzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQo+PiArewo+ PiArCWludCByZXQgPSAwOwo+PiArCj4+ICsJY3RybC0+ZHBfY3RybC5wdXNoX2lkbGUoJmN0cmwt PmRwX2N0cmwpOwo+PiArCWN0cmwtPmRwX2N0cmwucmVzZXQoJmN0cmwtPmRwX2N0cmwpOwo+PiAr Cj4+ICsJY3RybC0+cGl4ZWxfcmF0ZSA9IGN0cmwtPnBhbmVsLT5waW5mby5waXhlbF9jbGtfa2h6 Owo+PiArCj4+ICsJZG8gewo+PiArCQlpZiAocmV0ID09IC1FQUdBSU4pIHsKPj4gKwkJCS8qIHRy eSB3aXRoIGxvd2VyIGxpbmsgcmF0ZSAqLwo+PiArCQkJZHBfY3RybF9saW5rX3JhdGVfZG93bl9z aGlmdChjdHJsKTsKPj4gKwo+PiArCQkJY3RybC0+Y2F0YWxvZy0+bWFpbmxpbmtfY3RybChjdHJs LT5jYXRhbG9nLCBmYWxzZSk7Cj4+ICsJCX0KPj4gKwo+PiArCQljdHJsLT5jYXRhbG9nLT5waHlf bGFuZV9jZmcoY3RybC0+Y2F0YWxvZywKPj4gKwkJCWN0cmwtPm9yaWVudGF0aW9uLCBjdHJsLT5s aW5rLT5saW5rX3BhcmFtcy5sYW5lX2NvdW50KTsKPj4gKwo+PiArCQkvKgo+PiArCQkgKiBEaXNh YmxlIGFuZCByZS1lbmFibGUgdGhlIG1haW5saW5rIGNsb2NrIHNpbmNlIHRoZQo+PiArCQkgKiBs aW5rIGNsb2NrIG1pZ2h0IGhhdmUgYmVlbiBhZGp1c3RlZCBhcyBwYXJ0IG9mIHRoZQo+PiArCQkg KiBsaW5rIG1haW50ZW5hbmNlLgo+PiArCQkgKi8KPj4gKwkJZHBfY3RybF9kaXNhYmxlX21haW5s aW5rX2Nsb2NrcyhjdHJsKTsKPiAKPiBSZXR1cm4gdmFsdWUgc2hvdWxkIGJlIGNoZWNrZWQKPiAK PiAKPiBCZWxvdyB5b3UgaGF2ZToKPiAKPiArCQkvKiBodyByZWNvbW1lbmRlZCBkZWxheSBiZWZv cmUgcmUtZW5hYmxpbmcgY2xvY2tzICovCj4gKwkJbXNsZWVwKDIwKTsKPiAKPiBCZXR3ZWVuIHRo ZSBkaXNhYmxlIGFuZCBlbmFibGUsIHNvIHlvdSBzaG91bGQgcHJvYmFibHkgaGF2ZSB0aGF0IGhl cmUgCj4gdG9vPwo+IAo+PiArCj4+ICsJCXJldCA9IGRwX2N0cmxfZW5hYmxlX21haW5saW5rX2Ns b2NrcyhjdHJsKTsKPj4gKwkJaWYgKHJldCkKPj4gKwkJCWNvbnRpbnVlOwo+IAo+IERvIHlvdSBy ZWFsbHkgd2FudCB0byBjb250aW51ZSBoZXJlPyBTZWVtcyBsaWtlIHlvdSBjb3VsZCBnZXQgaW50 byBhbiAKPiBpbmZpbml0ZQo+IGxvb3AgcHJldHR5IGVhc2lseSBpbiB0aGUgLUVJTlZBTCBjYXNl Lgo+IAo+PiArCj4+ICsJCWRwX2N0cmxfY29uZmlndXJlX3NvdXJjZV9wYXJhbXMoY3RybCk7Cj4+ ICsKPj4gKwkJY3RybC0+Y2F0YWxvZy0+Y29uZmlnX21zYShjdHJsLT5jYXRhbG9nLAo+PiArCQkJ ZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKAo+PiArCQkJY3RybC0+bGluay0+bGlua19wYXJh bXMuYndfY29kZSksCj4+ICsJCQljdHJsLT5waXhlbF9yYXRlLCBkcF9jdHJsX3VzZV9maXhlZF9u dmlkKGN0cmwpKTsKPj4gKwo+PiArCQlyZWluaXRfY29tcGxldGlvbigmY3RybC0+aWRsZV9jb21w KTsKPiAKPiBBcmUgeW91IGd1YXJhbnRlZWQgdGhhdCB0aGlzIGRvZXNuJ3QgcmFjZSB3aXRoIG90 aGVyIGlkbGVfY29tcCB1c2VzPwo+IAo+PiArCj4+ICsJCXJldCA9IGRwX2N0cmxfc2V0dXBfbWFp bl9saW5rKGN0cmwsIHRydWUpOwo+PiArCX0gd2hpbGUgKHJldCA9PSAtRUFHQUlOKTsKPiAKPiBU aGUgZG8vd2hpbGUgaXMgYSBiaXQgYXdrd2FyZCwgZXNwZWNpYWxseSBzaW5jZSBpdCBzdGFydHMg d2l0aCBhIAo+IGNvbmRpdGlvbmFsCj4gYmxvY2sgdGhhdCBjYW4ndCBwb3NzaWJseSBiZSB0cnVl IG9uIHRoZSBmaXJzdCBpdGVyYXRpb24uIEhvdyBhYm91dDoKPiAKPiAJZm9yICh0cmllcyA9IDA7 IHRyaWVzIDwgbWF4X3RyaWVzOyB0cmllcysrKSB7Cj4gCQljdHJsLT5jYXRhbG9nLT5waHlfbGFu ZV9jZmcoY3RybC0+Y2F0YWxvZywKPiAJCQljdHJsLT5vcmllbnRhdGlvbiwgY3RybC0+bGluay0+ bGlua19wYXJhbXMubGFuZV9jb3VudCk7Cj4gCj4gCQkvKgo+IAkJICogRGlzYWJsZSBhbmQgcmUt ZW5hYmxlIHRoZSBtYWlubGluayBjbG9jayBzaW5jZSB0aGUKPiAJCSAqIGxpbmsgY2xvY2sgbWln aHQgaGF2ZSBiZWVuIGFkanVzdGVkIGFzIHBhcnQgb2YgdGhlCj4gCQkgKiBsaW5rIG1haW50ZW5h bmNlLgo+IAkJICovCj4gCQlyZXQgPSBkcF9jdHJsX2Rpc2FibGVfbWFpbmxpbmtfY2xvY2tzKGN0 cmwpOwo+ICAgICAgICAgICAgICAgICBpZiAocmV0KQo+ICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiByZXQ7Cj4gCj4gCQlyZXQgPSBkcF9jdHJsX2VuYWJsZV9tYWlubGlua19jbG9ja3Mo Y3RybCk7Cj4gCQlpZiAocmV0KQo+IAkJCXJldHVybiByZXQ7Cj4gCj4gCQlkcF9jdHJsX2NvbmZp Z3VyZV9zb3VyY2VfcGFyYW1zKGN0cmwpOwo+IAo+IAkJY3RybC0+Y2F0YWxvZy0+Y29uZmlnX21z YShjdHJsLT5jYXRhbG9nLAo+IAkJCWRybV9kcF9id19jb2RlX3RvX2xpbmtfcmF0ZSgKPiAJCQlj dHJsLT5saW5rLT5saW5rX3BhcmFtcy5id19jb2RlKSwKPiAJCQljdHJsLT5waXhlbF9yYXRlLCBk cF9jdHJsX3VzZV9maXhlZF9udmlkKGN0cmwpKTsKPiAKPiAJCXJlaW5pdF9jb21wbGV0aW9uKCZj dHJsLT5pZGxlX2NvbXApOwo+IAo+IAkJcmV0ID0gZHBfY3RybF9zZXR1cF9tYWluX2xpbmsoY3Ry bCwgdHJ1ZSk7Cj4gCQlpZiAocmV0ICE9IC1FQUdBSU4pCj4gICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIHJldDsKPiAKPiAgICAgICAgICAgICAgICAgLyogdHJ5IHdpdGggbG93ZXIgbGlu ayByYXRlICovCj4gICAgICAgICAgICAgICAgIGRwX2N0cmxfbGlua19yYXRlX2Rvd25fc2hpZnQo Y3RybCk7Cj4gCj4gICAgICAgICAgICAgICAgIGN0cmwtPmNhdGFsb2ctPm1haW5saW5rX2N0cmwo Y3RybC0+Y2F0YWxvZywgZmFsc2UpOwo+IAl9Cj4gCj4gICAgICAgICByZXR1cm4gLUVUSU1FRE9V VDsKPiAKPiAKPiBUaGVyZSdzIGEgbG90IG9mIHNpbWlsYXJpdHkgYmV0d2VlbiB0aGlzIGNvZGUg YW5kIGRwX2N0cmxfb24uIElmIHRoZSAKPiBjb2RlIHdlcmUKPiBzaGFyZWQsIHdlIHdvdWxkbid0 IGhhdmUgdGhlIG1pc3NpbmcgMjBtcyBkZWxheSBhYm92ZS4gU28gY2FuIHlvdSAKPiBwbGVhc2Ug cHVsbAo+IHRoZSBjb21tb24gYml0cyB3aGljaCBbcmUtXWluaXRpYWxpemUgdGhlIGxpbmsgaW50 byBhIGhlbHBlciBmdW5jdGlvbiAKPiB0aGF0IHlvdQo+IGNhbGwgZnJvbSBib3RoIGZ1bmN0aW9u cz8KPiAKPj4gKwo+PiArCXJldHVybiByZXQ7Cj4gCj4gSXQncyBuaWNlIHRoYXQgd2UgcmV0dXJu IGEgdmFsdWUgaGVyZSwgYnV0IGl0J3MgbmV2ZXIgY2hlY2tlZCBieSBvdXIgCj4gY2FsbGVycyA6 KAo+IAo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jdHJsX3Byb2Nlc3NfcGh5X3Rlc3Rf cmVxdWVzdChzdHJ1Y3QgZHBfY3RybF9wcml2YXRlIAo+PiAqY3RybCkKPj4gK3sKPj4gKwlpbnQg cmV0ID0gMDsKPj4gKwo+PiArCWlmICghY3RybC0+bGluay0+cGh5X3BhcmFtcy5waHlfdGVzdF9w YXR0ZXJuX3NlbCkgewo+PiArCQlwcl9kZWJ1Zygibm8gdGVzdCBwYXR0ZXJuIHNlbGVjdGVkIGJ5 IHNpbmtcbiIpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJcHJfZGVidWcoInN0YXJ0 XG4iKTsKPiAKPiBUaGlzIGFuZCB0aGUgImVuZCIgZGVidWcgc3RhdGVtZW50cyBzaG91bGQgYmUg cmVtb3ZlZAo+IAo+PiArCj4+ICsJY3RybC0+ZHBfY3RybC5wdXNoX2lkbGUoJmN0cmwtPmRwX2N0 cmwpOwo+PiArCS8qCj4+ICsJICogVGhlIGdsb2JhbCByZXNldCB3aWxsIG5lZWQgRFAgbGluayBy YWxhdGVkIGNsb2NrcyB0byBiZQo+IAo+IHMvcmVsYXRlZC9yYWxhdGVkLwo+IAo+PiArCSAqIHJ1 bm5pbmcuIEFkZCB0aGUgZ2xvYmFsIHJlc2V0IGp1c3QgYmVmb3JlIGRpc2FibGluZyB0aGUKPj4g KwkgKiBsaW5rIGNsb2NrcyBhbmQgY29yZSBjbG9ja3MuCj4+ICsJICovCj4+ICsJY3RybC0+ZHBf Y3RybC5yZXNldCgmY3RybC0+ZHBfY3RybCk7Cj4+ICsJY3RybC0+ZHBfY3RybC5vZmYoJmN0cmwt PmRwX2N0cmwpOwo+PiArCj4+ICsJcmV0ID0gY3RybC0+ZHBfY3RybC5vbigmY3RybC0+ZHBfY3Ry bCk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gZW5hYmxlIERQIGNvbnRy b2xsZXJcbiIpOwo+IAo+IFBsZWFzZSBwcm9wYWdhdGUgZXJyb3JzIGluc3RlYWQgb2Ygc3dhbGxv d2luZyB0aGVtLgo+IAo+PiArCj4+ICsJcHJfZGVidWcoImVuZFxuIik7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyB2b2lkIGRwX2N0cmxfc2VuZF9waHlfdGVzdF9wYXR0ZXJuKHN0cnVjdCBkcF9jdHJs X3ByaXZhdGUgCj4+ICpjdHJsKQo+PiArewo+PiArCWJvb2wgc3VjY2VzcyA9IGZhbHNlOwo+PiAr CXUzMiBwYXR0ZXJuX3NlbnQgPSAweDA7Cj4+ICsJdTMyIHBhdHRlcm5fcmVxdWVzdGVkID0gY3Ry bC0+bGluay0+cGh5X3BhcmFtcy5waHlfdGVzdF9wYXR0ZXJuX3NlbDsKPj4gKwo+PiArCXByX2Rl YnVnKCJyZXF1ZXN0OiAlc1xuIiwKPj4gKwkJCWRwX2xpbmtfZ2V0X3BoeV90ZXN0X3BhdHRlcm4o cGF0dGVybl9yZXF1ZXN0ZWQpKTsKPj4gKwo+PiArCWN0cmwtPmNhdGFsb2ctPnVwZGF0ZV92eF9w eChjdHJsLT5jYXRhbG9nLAo+PiArCQkJY3RybC0+bGluay0+cGh5X3BhcmFtcy52X2xldmVsLAo+ PiArCQkJY3RybC0+bGluay0+cGh5X3BhcmFtcy5wX2xldmVsKTsKPj4gKwljdHJsLT5jYXRhbG9n LT5zZW5kX3BoeV9wYXR0ZXJuKGN0cmwtPmNhdGFsb2csIHBhdHRlcm5fcmVxdWVzdGVkKTsKPj4g KwljdHJsLT5saW5rLT5zZW5kX3Rlc3RfcmVzcG9uc2UoY3RybC0+bGluayk7Cj4+ICsKPj4gKwlw YXR0ZXJuX3NlbnQgPSBjdHJsLT5jYXRhbG9nLT5yZWFkX3BoeV9wYXR0ZXJuKGN0cmwtPmNhdGFs b2cpOwo+PiArCj4+ICsJc3dpdGNoIChwYXR0ZXJuX3NlbnQpIHsKPj4gKwljYXNlIE1SX0xJTktf VFJBSU5JTkcxOgo+PiArCQlpZiAocGF0dGVybl9yZXF1ZXN0ZWQgPT0KPj4gKwkJCQlEUF9URVNU X1BIWV9QQVRURVJOX0QxMF8yX05PX1NDUkFNQkxJTkcpCj4+ICsJCQlzdWNjZXNzID0gdHJ1ZTsK PiAKPiAKPiBzdWNjZXNzID0gcGF0dGVybl9yZXF1ZXN0ZWQgPT0gRFBfTElOS19RVUFMX1BBVFRF Uk5fMTFfRDEwXzI7Cj4gCj4gU2FtZSBjYW4gYmUgZG9uZSBiZWxvdy4KPiAKPiAKPj4gKwkJYnJl YWs7Cj4+ICsJY2FzZSBNUl9MSU5LX1NZTUJPTF9FUk06Cj4+ICsJCWlmICgocGF0dGVybl9yZXF1 ZXN0ZWQgPT0KPj4gKwkJCQlEUF9URVNUX1BIWV9QQVRURVJOX1NZTUJPTF9FUlJfTUVBU1VSRU1F TlRfQ05UKQo+PiArCQkJfHwgKHBhdHRlcm5fcmVxdWVzdGVkID09Cj4+ICsJCQkJRFBfVEVTVF9Q SFlfUEFUVEVSTl9IQlIyX0NUU19FWUVfUEFUVEVSTikpCj4+ICsJCQlzdWNjZXNzID0gdHJ1ZTsK Pj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBNUl9MSU5LX1BSQlM3Ogo+PiArCQlpZiAocGF0dGVybl9y ZXF1ZXN0ZWQgPT0gRFBfVEVTVF9QSFlfUEFUVEVSTl9QUkJTNykKPj4gKwkJCXN1Y2Nlc3MgPSB0 cnVlOwo+PiArCQlicmVhazsKPj4gKwljYXNlIE1SX0xJTktfQ1VTVE9NODA6Cj4+ICsJCWlmIChw YXR0ZXJuX3JlcXVlc3RlZCA9PQo+PiArCQkJCURQX1RFU1RfUEhZX1BBVFRFUk5fODBfQklUX0NV U1RPTV9QQVRURVJOKQo+PiArCQkJc3VjY2VzcyA9IHRydWU7Cj4+ICsJCWJyZWFrOwo+PiArCWRl ZmF1bHQ6Cj4+ICsJCXN1Y2Nlc3MgPSBmYWxzZTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPiAKPiBJ IGZlZWwgbGlrZSB5b3Ugc2hvdWxkIHJldHVybiBzdWNjZXNzIChvciBhIHJldCkuIEFzIGl0IGlz LCB0aGlzCj4gZG9lc24ndCBkbyBtdWNoLgo+IAo+PiArCj4+ICsJcHJfZGVidWcoIiVzOiAlc1xu Iiwgc3VjY2VzcyA/ICJzdWNjZXNzIiA6ICJmYWlsZWQiLAo+PiArCQkJZHBfbGlua19nZXRfcGh5 X3Rlc3RfcGF0dGVybihwYXR0ZXJuX3JlcXVlc3RlZCkpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg dm9pZCBkcF9jdHJsX2hhbmRsZV9zaW5rX3JlcXVlc3Qoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwp Cj4+ICt7Cj4+ICsJc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsKPj4gKwl1MzIgc2lua19y ZXF1ZXN0ID0gMHgwOwo+PiArCj4+ICsJaWYgKCFkcF9jdHJsKSB7Cj4+ICsJCXByX2VycigiaW52 YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwljdHJsID0gY29u dGFpbmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUsIGRwX2N0cmwpOwo+PiAr CXNpbmtfcmVxdWVzdCA9IGN0cmwtPmxpbmstPnNpbmtfcmVxdWVzdDsKPj4gKwo+PiArCWlmIChz aW5rX3JlcXVlc3QgJiBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTikgewo+PiArCQlwcl9p bmZvKCJQSFlfVEVTVF9QQVRURVJOIHJlcXVlc3RcbiIpOwo+IAo+IERvd25ncmFkZSB0byBERUJV RyBsZXZlbCBwbGVhc2UKPiAKPj4gKwkJZHBfY3RybF9wcm9jZXNzX3BoeV90ZXN0X3JlcXVlc3Qo Y3RybCk7Cj4+ICsJfQo+PiArCj4+ICsJaWYgKHNpbmtfcmVxdWVzdCAmIERQX0xJTktfU1RBVFVT X1VQREFURUQpCj4+ICsJCWRwX2N0cmxfbGlua19tYWludGVuYW5jZShjdHJsKTsKPiAKPiBDaGVj ayByZXR1cm4gdmFsdWUKPiAKPj4gKwo+PiArCWlmIChzaW5rX3JlcXVlc3QgJiBEUF9URVNUX0xJ TktfVFJBSU5JTkcpIHsKPj4gKwkJY3RybC0+bGluay0+c2VuZF90ZXN0X3Jlc3BvbnNlKGN0cmwt PmxpbmspOwo+PiArCQlkcF9jdHJsX2xpbmtfbWFpbnRlbmFuY2UoY3RybCk7Cj4gCj4gQ2hlY2sg cmV0dXJuIHZhbHVlCj4gCj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jdHJs X3Jlc2V0KHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKQo+PiArewo+PiArCXN0cnVjdCBkcF9jdHJs X3ByaXZhdGUgKmN0cmw7Cj4+ICsKPj4gKwlpZiAoIWRwX2N0cmwpIHsKPj4gKwkJcHJfZXJyKCJp bnZhbGlkIHBhcmFtc1xuIik7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwljdHJsID0g Y29udGFpbmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUsIGRwX2N0cmwpOwo+ PiArCWN0cmwtPmNhdGFsb2ctPnJlc2V0KGN0cmwtPmNhdGFsb2cpOwo+PiArfQo+IAo+IEkgdGhp bmsgdGhpcyBmdW5jdGlvbiBnb2VzIGF3YXkgd2l0aCBhbGwgb2YgdGhlIGNhdGFsb2cgc3R1ZmYg cmVtb3ZlZC4KPiAKPj4gKwo+PiArc3RhdGljIGludCBkcF9jdHJsX29uKHN0cnVjdCBkcF9jdHJs ICpkcF9jdHJsKQo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJc3RydWN0IGRwX2N0cmxfcHJp dmF0ZSAqY3RybDsKPj4gKwl1MzIgcmF0ZSA9IDA7Cj4+ICsJdTMyIGxpbmtfdHJhaW5fbWF4X3Jl dHJpZXMgPSAxMDA7Cj4gCj4gVGhpcyBhbW91bnQgaXMgZXhjZXNzaXZlLCA1IHRpbWVzIHNob3Vs ZCBzdWZmaWNlICh1bmxlc3MgeW91IGhhdmUgZGF0YSAKPiB0aGF0Cj4gc3VnZ2VzdHMgb3RoZXJ3 aXNlKS4KPiAKPj4gKwl1MzIgY29uc3QgcGh5X2N0c19waXhlbF9jbGtfa2h6ID0gMTQ4NTAwOwo+ IAo+IFNob3VsZCB0aGlzIGJlIGEgI2RlZmluZSBpbiBkcm1fZHBfaGVscGVyPwo+IAo+PiArCj4+ ICsJaWYgKCFkcF9jdHJsKSB7Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJZ290byBlbmQ7Cj4+ ICsJfQo+PiArCj4+ICsJY3RybCA9IGNvbnRhaW5lcl9vZihkcF9jdHJsLCBzdHJ1Y3QgZHBfY3Ry bF9wcml2YXRlLCBkcF9jdHJsKTsKPj4gKwo+PiArCWF0b21pY19zZXQoJmN0cmwtPmFib3J0ZWQs IDApOwo+IAo+IFdoeSBpcyB0aGlzIG5lZWRlZCBvdmVyIGlzX2Nvbm5lY3RlZD8gSXQgc2VlbXMg bGlrZSBpZiB5b3UgaGFkIHByb3BlciAKPiBsb2NraW5nCj4gYXJvdW5kIGlzX2Nvbm5lY3RlZCAo d2hpY2ggSSB0aGluayBpcyBuZWNlc3NhcnkpLCB5b3UgY291bGQganVzdAo+IGFjcXVpcmUgdGhl IGxvY2sKPiBhbmQgdHJ5IHRoZSB0cmFpbmluZy4gSWYgaXQgZmFpbHMgYi9jIHNvbWVvbmUgdW5w bHVnZ2VkIHRoZSBjYWJsZSwgCj4gdGhhdCdzIHF1aXRlCj4gT2suCj4gCj4+ICsJcmF0ZSA9IGN0 cmwtPnBhbmVsLT5saW5rX2luZm8ucmF0ZTsKPj4gKwo+PiArCWN0cmwtPnBvd2VyLT5jbGtfZW5h YmxlKGN0cmwtPnBvd2VyLCBEUF9DT1JFX1BNLCB0cnVlKTsKPj4gKwljdHJsLT5jYXRhbG9nLT5o cGRfY29uZmlnKGN0cmwtPmNhdGFsb2csIHRydWUpOwo+PiArCj4+ICsJaWYgKGN0cmwtPmxpbmst PnNpbmtfcmVxdWVzdCAmIERQX1RFU1RfTElOS19QSFlfVEVTVF9QQVRURVJOKSB7Cj4+ICsJCXBy X2RlYnVnKCJ1c2luZyBwaHkgdGVzdCBsaW5rIHBhcmFtZXRlcnNcbiIpOwo+PiArCQlpZiAoIWN0 cmwtPnBhbmVsLT5waW5mby5waXhlbF9jbGtfa2h6KQo+PiArCQkJY3RybC0+cGl4ZWxfcmF0ZSA9 IHBoeV9jdHNfcGl4ZWxfY2xrX2toejsKPj4gKwl9IGVsc2Ugewo+PiArCQljdHJsLT5saW5rLT5s aW5rX3BhcmFtcy5id19jb2RlID0KPj4gKwkJCWRybV9kcF9saW5rX3JhdGVfdG9fYndfY29kZShy YXRlKTsKPj4gKwkJY3RybC0+bGluay0+bGlua19wYXJhbXMubGFuZV9jb3VudCA9Cj4+ICsJCQlj dHJsLT5wYW5lbC0+bGlua19pbmZvLm51bV9sYW5lczsKPj4gKwkJY3RybC0+cGl4ZWxfcmF0ZSA9 IGN0cmwtPnBhbmVsLT5waW5mby5waXhlbF9jbGtfa2h6Owo+PiArCX0KPj4gKwo+PiArCXByX2Rl YnVnKCJid19jb2RlPSVkLCBsYW5lX2NvdW50PSVkLCBwaXhlbF9yYXRlPSVkXG4iLAo+PiArCQlj dHJsLT5saW5rLT5saW5rX3BhcmFtcy5id19jb2RlLAo+PiArCQljdHJsLT5saW5rLT5saW5rX3Bh cmFtcy5sYW5lX2NvdW50LCBjdHJsLT5waXhlbF9yYXRlKTsKPj4gKwo+PiArCWN0cmwtPmNhdGFs b2ctPnBoeV9sYW5lX2NmZyhjdHJsLT5jYXRhbG9nLAo+PiArCQkJY3RybC0+b3JpZW50YXRpb24s IGN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmxhbmVfY291bnQpOwo+PiArCj4+ICsJcmMgPSBkcF9j dHJsX2VuYWJsZV9tYWlubGlua19jbG9ja3MoY3RybCk7Cj4+ICsJaWYgKHJjKQo+PiArCQlnb3Rv IGVuZDsKPj4gKwo+PiArCXJlaW5pdF9jb21wbGV0aW9uKCZjdHJsLT5pZGxlX2NvbXApOwo+IAo+ IEFyZSB5b3UgZ3VhcmFudGVlZCB0aGF0IHRoaXMgZG9lc24ndCByYWNlIHdpdGggb3RoZXIgaWRs ZV9jb21wIHVzZXMgKG9yIAo+IG90aGVyCj4gZHBfY3RybF9vbiBjYWxsZXJzKT8KPiAKPj4gKwo+ PiArCWRwX2N0cmxfY29uZmlndXJlX3NvdXJjZV9wYXJhbXMoY3RybCk7Cj4+ICsKPj4gKwl3aGls ZSAoLS1saW5rX3RyYWluX21heF9yZXRyaWVzICYmICFhdG9taWNfcmVhZCgmY3RybC0+YWJvcnRl ZCkpIHsKPj4gKwkJY3RybC0+Y2F0YWxvZy0+Y29uZmlnX21zYShjdHJsLT5jYXRhbG9nLAo+PiAr CQkJZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKAo+PiArCQkJY3RybC0+bGluay0+bGlua19w YXJhbXMuYndfY29kZSksCj4+ICsJCQljdHJsLT5waXhlbF9yYXRlLCBkcF9jdHJsX3VzZV9maXhl ZF9udmlkKGN0cmwpKTsKPj4gKwo+PiArCQlyYyA9IGRwX2N0cmxfc2V0dXBfbWFpbl9saW5rKGN0 cmwsIHRydWUpOwo+PiArCQlpZiAoIXJjKQo+PiArCQkJYnJlYWs7Cj4+ICsKPj4gKwkJLyogdHJ5 IHdpdGggbG93ZXIgbGluayByYXRlICovCj4+ICsJCWRwX2N0cmxfbGlua19yYXRlX2Rvd25fc2hp ZnQoY3RybCk7Cj4+ICsKPj4gKwkJY3RybC0+Y2F0YWxvZy0+bWFpbmxpbmtfY3RybChjdHJsLT5j YXRhbG9nLCBmYWxzZSk7Cj4+ICsKPj4gKwkJZHBfY3RybF9kaXNhYmxlX21haW5saW5rX2Nsb2Nr cyhjdHJsKTsKPiAKPiBDaGVjayByZXR1cm4gY29kZQo+IAo+PiArCQkvKiBodyByZWNvbW1lbmRl ZCBkZWxheSBiZWZvcmUgcmUtZW5hYmxpbmcgY2xvY2tzICovCj4+ICsJCW1zbGVlcCgyMCk7Cj4+ ICsKPj4gKwkJZHBfY3RybF9lbmFibGVfbWFpbmxpbmtfY2xvY2tzKGN0cmwpOwo+IAo+IENoZWNr IHJldHVybiBjb2RlCj4gCj4+ICsJfQo+IAo+IFNhbWUgY29tbWVudCBoZXJlIGFzIGluIGRwX2N0 cmxfbGlua19tYWludGVuYW5jZSgpLCB3ZSBzaG91bGQgcHVsbCBvdXQgCj4gdGhlCj4gY29tbW9u IGNvZGUgYW5kIHB1dCBpdCBpbiBhIGhlbHBlci4KPiAKPj4gKwo+PiArCWlmIChjdHJsLT5saW5r LT5zaW5rX3JlcXVlc3QgJiBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTikKPiAKPiBUaGlz IGlzIHJhY3ksIHNpbmtfcmVxdWVzdCBjb3VsZCBjaGFuZ2UgYmV0d2VlbiB0aGUgY2hlY2sgYWJv dmUgYW5kIAo+IGhlcmUuCj4gCj4+ICsJCWRwX2N0cmxfc2VuZF9waHlfdGVzdF9wYXR0ZXJuKGN0 cmwpOwo+PiArCj4+ICsJcHJfZGVidWcoIkVuZC1cbiIpOwo+IAo+IFBsZWFzZSByZW1vdmUKPiAK Pj4gKwo+PiArZW5kOgo+PiArCXJldHVybiByYzsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQg ZHBfY3RybF9vZmYoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpCj4+ICt7Cj4+ICsJc3RydWN0IGRw X2N0cmxfcHJpdmF0ZSAqY3RybDsKPj4gKwo+PiArCWlmICghZHBfY3RybCkKPj4gKwkJcmV0dXJu Owo+PiArCj4+ICsJY3RybCA9IGNvbnRhaW5lcl9vZihkcF9jdHJsLCBzdHJ1Y3QgZHBfY3RybF9w cml2YXRlLCBkcF9jdHJsKTsKPj4gKwo+PiArCWN0cmwtPmNhdGFsb2ctPm1haW5saW5rX2N0cmwo Y3RybC0+Y2F0YWxvZywgZmFsc2UpOwo+PiArCWN0cmwtPmNhdGFsb2ctPnJlc2V0KGN0cmwtPmNh dGFsb2cpOwo+PiArCj4+ICsJLyogTWFrZSBzdXJlIERQIGlzIGRpc2FibGVkIGJlZm9yZSBjbGsg ZGlzYWJsZSAqLwo+PiArCXdtYigpOwo+IAo+IHJlYWRsL3dtYiBuaXQKPiAKPj4gKwo+PiArCWRw X2N0cmxfZGlzYWJsZV9tYWlubGlua19jbG9ja3MoY3RybCk7Cj4gCj4gQ2hlY2sgYW5kIHByb3Bh Z2F0ZSByZXR1cm4gdmFsdWUKPiAKPj4gKwo+PiArCXByX2RlYnVnKCJEUCBvZmYgZG9uZVxuIik7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2N0cmxfaXNyKHN0cnVjdCBkcF9jdHJsICpk cF9jdHJsKQo+PiArewo+PiArCXN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmw7Cj4+ICsKPj4g KwlpZiAoIWRwX2N0cmwpCj4+ICsJCXJldHVybjsKPj4gKwo+PiArCWN0cmwgPSBjb250YWluZXJf b2YoZHBfY3RybCwgc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSwgZHBfY3RybCk7Cj4+ICsKPj4gKwlj dHJsLT5jYXRhbG9nLT5nZXRfaW50ZXJydXB0KGN0cmwtPmNhdGFsb2cpOwo+IAo+IFRoaXMgc2hv dWxkIHJldHVybiB0aGUgaXNyIGluc3RlYWQgb2Ygc3RvcmUgaXQgaW4gY3RybC0+Y2F0YWxvZy0+ aXNyLCAKPiBzaW5jZSB0aGF0Cj4gY291bGQgcG90ZW50aWFsbHkgYmUgb3ZlcndyaXR0ZW4gYWZ0 ZXIgdGhpcyBmdW5jdGlvbiBhY2tzIHRoZSBjdXJyZW50Cj4gaW50ZXJydXB0cy4KPiAKPiAoQWxz bywgaXQncyBvbmx5IHVzZWQgaW4gdGhpcyBmdW5jdGlvbiwgc28gdGhlcmUncyBubyBuZWVkIHRv IHN0b3JlIAo+IGl0KS4gT25lIHlvdQo+IHJlbW92ZSB0aGUgY2F0YWxvZyBpbmRpcmVjdGlvbiwg aG9wZWZ1bGx5IHRoZXJlIHdpbGwgYmUgYSBidW5jaCBvZiAKPiB0aGVzZSBjYXNlcwo+IHRoYXQg YmVjb21lIGNsZWFyLgo+IAo+IAo+PiArCj4+ICsJaWYgKGN0cmwtPmNhdGFsb2ctPmlzciAmIERQ X0NUUkxfSU5UUl9SRUFEWV9GT1JfVklERU8pCj4+ICsJCWRwX2N0cmxfdmlkZW9fcmVhZHkoY3Ry bCk7Cj4+ICsKPj4gKwlpZiAoY3RybC0+Y2F0YWxvZy0+aXNyICYgRFBfQ1RSTF9JTlRSX0lETEVf UEFUVEVSTl9TRU5UKQo+PiArCQlkcF9jdHJsX2lkbGVfcGF0dGVybnNfc2VudChjdHJsKTsKPiAK PiBBcyBtZW50aW9uZWQgYWJvdmUsIGp1c3QgY2FsbCB0aGUgY29tcGxldGlvbnMgZGlyZWN0bHku Cj4gCj4+ICt9Cj4+ICsKPj4gK3N0cnVjdCBkcF9jdHJsICpkcF9jdHJsX2dldChzdHJ1Y3QgZHBf Y3RybF9pbiAqaW4pCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1Y3QgZHBfY3RybF9w cml2YXRlICpjdHJsOwo+PiArCXN0cnVjdCBkcF9jdHJsICpkcF9jdHJsOwo+PiArCj4+ICsJaWYg KCFpbi0+ZGV2IHx8ICFpbi0+cGFuZWwgfHwgIWluLT5hdXggfHwKPj4gKwkgICAgIWluLT5saW5r IHx8ICFpbi0+Y2F0YWxvZykgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiAr CQlyYyA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZXJyb3I7Cj4+ICsJfQo+PiArCj4+ICsJY3RybCA9 IGRldm1fa3phbGxvYyhpbi0+ZGV2LCBzaXplb2YoKmN0cmwpLCBHRlBfS0VSTkVMKTsKPj4gKwlp ZiAoIWN0cmwpIHsKPj4gKwkJcmMgPSAtRU5PTUVNOwo+PiArCQlnb3RvIGVycm9yOwo+PiArCX0K Pj4gKwo+PiArCWluaXRfY29tcGxldGlvbigmY3RybC0+aWRsZV9jb21wKTsKPj4gKwlpbml0X2Nv bXBsZXRpb24oJmN0cmwtPnZpZGVvX2NvbXApOwo+PiArCj4+ICsJLyogaW4gcGFyYW1ldGVycyAq Lwo+PiArCWN0cmwtPnBhcnNlciAgID0gaW4tPnBhcnNlcjsKPj4gKwljdHJsLT5wYW5lbCAgICA9 IGluLT5wYW5lbDsKPj4gKwljdHJsLT5wb3dlciAgICA9IGluLT5wb3dlcjsKPj4gKwljdHJsLT5h dXggICAgICA9IGluLT5hdXg7Cj4+ICsJY3RybC0+bGluayAgICAgPSBpbi0+bGluazsKPj4gKwlj dHJsLT5jYXRhbG9nICA9IGluLT5jYXRhbG9nOwo+PiArCWN0cmwtPmRldiAgICAgID0gaW4tPmRl djsKPj4gKwo+PiArCWRwX2N0cmwgPSAmY3RybC0+ZHBfY3RybDsKPj4gKwo+PiArCS8qIG91dCBw YXJhbWV0ZXJzICovCj4+ICsJZHBfY3RybC0+aW5pdCAgICAgID0gZHBfY3RybF9ob3N0X2luaXQ7 Cj4+ICsJZHBfY3RybC0+ZGVpbml0ICAgID0gZHBfY3RybF9ob3N0X2RlaW5pdDsKPj4gKwlkcF9j dHJsLT5vbiAgICAgICAgPSBkcF9jdHJsX29uOwo+PiArCWRwX2N0cmwtPm9mZiAgICAgICA9IGRw X2N0cmxfb2ZmOwo+PiArCWRwX2N0cmwtPnB1c2hfaWRsZSA9IGRwX2N0cmxfcHVzaF9pZGxlOwo+ PiArCWRwX2N0cmwtPmFib3J0ICAgICA9IGRwX2N0cmxfYWJvcnQ7Cj4+ICsJZHBfY3RybC0+aXNy ICAgICAgID0gZHBfY3RybF9pc3I7Cj4+ICsJZHBfY3RybC0+cmVzZXQJICAgPSBkcF9jdHJsX3Jl c2V0Owo+PiArCWRwX2N0cmwtPmhhbmRsZV9zaW5rX3JlcXVlc3QgPSBkcF9jdHJsX2hhbmRsZV9z aW5rX3JlcXVlc3Q7Cj4+ICsKPj4gKwlyZXR1cm4gZHBfY3RybDsKPj4gK2Vycm9yOgo+PiArCXJl dHVybiBFUlJfUFRSKHJjKTsKPj4gK30KPj4gKwo+PiArdm9pZCBkcF9jdHJsX3B1dChzdHJ1Y3Qg ZHBfY3RybCAqZHBfY3RybCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJs Owo+PiArCj4+ICsJaWYgKCFkcF9jdHJsKQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwljdHJsID0g Y29udGFpbmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUsIGRwX2N0cmwpOwo+ PiArCj4+ICsJZGV2bV9rZnJlZShjdHJsLT5kZXYsIGN0cmwpOwo+PiArfQo+IAo+IE9uY2UgYWdh aW4sIHRoZXNlIGZ1bmN0aW9ucyBjYW4gYmUgZGVsZXRlZC4gSnVzdCBzdG9yZSB0aGUgX25lY2Vz c2FyeV8gCj4gZGF0YSBpbiBhCj4gY2VudHJhbCBzdHJ1Y3QgKHdpdGggc3Vic3RydWN0cyBhcyBu ZWNlc3NhcnkpIGFuZCBjYWxsIGZ1bmN0aW9ucyAKPiBkaXJlY3RseS4KPiAKPiAKPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5oIAo+PiBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHAvZHBfY3RybC5oCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAw MDAwMDAuLjZhYjIyMWEKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2RwL2RwX2N0cmwuaAo+PiBAQCAtMCwwICsxLDUwIEBACj4+ICsvKgo+PiArICogQ29weXJp Z2h0IChjKSAyMDEyLTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIAo+PiBy ZXNlcnZlZC4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAo+PiBtb2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+ PiArICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCj4+ICsgKgo+PiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+PiArICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ PiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4gKyAq Cj4+ICsgKi8KPj4gKwo+PiArI2lmbmRlZiBfRFBfQ1RSTF9IXwo+PiArI2RlZmluZSBfRFBfQ1RS TF9IXwo+PiArCj4+ICsjaW5jbHVkZSAiZHBfYXV4LmgiCj4+ICsjaW5jbHVkZSAiZHBfcGFuZWwu aCIKPj4gKyNpbmNsdWRlICJkcF9saW5rLmgiCj4+ICsjaW5jbHVkZSAiZHBfcGFyc2VyLmgiCj4+ ICsjaW5jbHVkZSAiZHBfcG93ZXIuaCIKPj4gKyNpbmNsdWRlICJkcF9jYXRhbG9nLmgiCj4+ICsK Pj4gK3N0cnVjdCBkcF9jdHJsIHsKPj4gKwlpbnQgKCppbml0KShzdHJ1Y3QgZHBfY3RybCAqZHBf Y3RybCwgYm9vbCBmbGlwKTsKPj4gKwl2b2lkICgqZGVpbml0KShzdHJ1Y3QgZHBfY3RybCAqZHBf Y3RybCk7Cj4+ICsJaW50ICgqb24pKHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKTsKPj4gKwl2b2lk ICgqb2ZmKShzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCk7Cj4+ICsJdm9pZCAoKnJlc2V0KShzdHJ1 Y3QgZHBfY3RybCAqZHBfY3RybCk7Cj4+ICsJdm9pZCAoKnB1c2hfaWRsZSkoc3RydWN0IGRwX2N0 cmwgKmRwX2N0cmwpOwo+PiArCXZvaWQgKCphYm9ydCkoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwp Owo+PiArCXZvaWQgKCppc3IpKHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKTsKPj4gKwl2b2lkICgq aGFuZGxlX3NpbmtfcmVxdWVzdCkoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpOwo+PiArfTsKPiAK PiBTYW1lIGNvbW1lbnQgYXMgY2F0YWxvZywgdGhlc2Ugc2hvdWxkIGp1c3QgYmUgZnVuY3Rpb25z IHRvIGJlIGNhbGxlZCAKPiBkaXJlY3RseS4KPiAKPj4gKwo+PiArc3RydWN0IGRwX2N0cmxfaW4g ewo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4gKwlzdHJ1Y3QgZHBfcGFuZWwgKnBhbmVsOwo+ PiArCXN0cnVjdCBkcF9hdXggKmF1eDsKPj4gKwlzdHJ1Y3QgZHBfbGluayAqbGluazsKPj4gKwlz dHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXI7Cj4+ICsJc3RydWN0IGRwX3Bvd2VyICpwb3dlcjsKPj4g KwlzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjYXRhbG9nOwo+PiArfTsKPiAKPiBUaGlzIHN0cnVj dCBpcyBub3QgbmVlZGVkLCBmdW5jdGlvbiBhcmd1bWVudHMgd29yayBqdXN0IGFzIHdlbGwuCj4g Cj4+ICsKPj4gK3N0cnVjdCBkcF9jdHJsICpkcF9jdHJsX2dldChzdHJ1Y3QgZHBfY3RybF9pbiAq aW4pOwo+PiArdm9pZCBkcF9jdHJsX3B1dChzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCk7Cj4+ICsK Pj4gKyNlbmRpZiAvKiBfRFBfQ1RSTF9IXyAqLwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9kZWJ1Zy5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGVi dWcuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi41YzBhOGNlCj4+ IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kZWJ1Zy5j Cj4+IEBAIC0wLDAgKzEsNTA3IEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0IChjKSAyMDE3LTIw MTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIAo+PiByZXNlcnZlZC4KPj4gKyAq Cj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIAo+PiBtb2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+PiArICogb25seSB2ZXJz aW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4+ICsg Kgo+PiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCj4+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+PiArICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4gKyAqCj4+ICsgKi8KPj4gKwo+ PiArI2RlZmluZSBwcl9mbXQoZm10KQkiW2RybS1kcF0gJXM6ICIgZm10LCBfX2Z1bmNfXwo+PiAr Cj4+ICsjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgo+PiArI2luY2x1ZGUgPGRybS9kcm1fY29u bmVjdG9yLmg+Cj4+ICsKPj4gKyNpbmNsdWRlICJkcF9wYXJzZXIuaCIKPj4gKyNpbmNsdWRlICJk cF9wb3dlci5oIgo+PiArI2luY2x1ZGUgImRwX2NhdGFsb2cuaCIKPj4gKyNpbmNsdWRlICJkcF9h dXguaCIKPj4gKyNpbmNsdWRlICJkcF9jdHJsLmgiCj4+ICsjaW5jbHVkZSAiZHBfZGVidWcuaCIK Pj4gKyNpbmNsdWRlICJkcF9kaXNwbGF5LmgiCj4+ICsKPj4gKyNkZWZpbmUgREVCVUdfTkFNRSAi ZHJtX2RwIgo+PiArCj4+ICtzdHJ1Y3QgZHBfZGVidWdfcHJpdmF0ZSB7Cj4+ICsJc3RydWN0IGRl bnRyeSAqcm9vdDsKPj4gKwo+PiArCXN0cnVjdCBkcF91c2JwZCAqdXNicGQ7Cj4+ICsJc3RydWN0 IGRwX2xpbmsgKmxpbms7Cj4+ICsJc3RydWN0IGRwX3BhbmVsICpwYW5lbDsKPj4gKwlzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqKmNvbm5lY3RvcjsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+ICsK Pj4gKwlzdHJ1Y3QgZHBfZGVidWcgZHBfZGVidWc7Cj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgc3Np emVfdCBkcF9kZWJ1Z193cml0ZV9ocGQoc3RydWN0IGZpbGUgKmZpbGUsCj4+ICsJCWNvbnN0IGNo YXIgX191c2VyICp1c2VyX2J1ZmYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQo+PiArewo+ PiArCXN0cnVjdCBkcF9kZWJ1Z19wcml2YXRlICpkZWJ1ZyA9IGZpbGUtPnByaXZhdGVfZGF0YTsK Pj4gKwljaGFyIGJ1ZltTWl84XTsKPj4gKwlzaXplX3QgbGVuID0gMDsKPj4gKwlpbnQgaHBkOwo+ PiArCj4+ICsJaWYgKCFkZWJ1ZykKPj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4+ICsKPj4gKwlpZiAo KnBwb3MpCj4+ICsJCXJldHVybiAwOwo+PiArCj4+ICsJLyogTGVhdmUgcm9vbSBmb3IgdGVybWlu YXRpb24gY2hhciAqLwo+PiArCWxlbiA9IG1pbl90KHNpemVfdCwgY291bnQsIFNaXzggLSAxKTsK Pj4gKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZmYsIGxlbikpCj4+ICsJCWdvdG8g ZW5kOwo+PiArCj4+ICsJYnVmW2xlbl0gPSAnXDAnOwo+PiArCj4+ICsJaWYgKGtzdHJ0b2ludChi dWYsIDEwLCAmaHBkKSAhPSAwKQo+PiArCQlnb3RvIGVuZDsKPj4gKwo+PiArCWlmIChkZWJ1Zy0+ dXNicGQgJiYgZGVidWctPnVzYnBkLT5jb25uZWN0KQo+PiArCQlkZWJ1Zy0+dXNicGQtPmNvbm5l Y3QoZGVidWctPnVzYnBkLCBocGQpOwo+PiArCj4+ICtlbmQ6Cj4+ICsJcmV0dXJuIC1sZW47Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBzc2l6ZV90IGRwX2RlYnVnX3dyaXRlX2VkaWRfbW9kZXMoc3Ry dWN0IGZpbGUgKmZpbGUsCj4+ICsJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZmYsIHNpemVf dCBjb3VudCwgbG9mZl90ICpwcG9zKQo+PiArewo+PiArCXN0cnVjdCBkcF9kZWJ1Z19wcml2YXRl ICpkZWJ1ZyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKPj4gKwljaGFyIGJ1ZltTWl8zMl07Cj4+ICsJ c2l6ZV90IGxlbiA9IDA7Cj4+ICsJaW50IGhkaXNwbGF5ID0gMCwgdmRpc3BsYXkgPSAwLCB2cmVm cmVzaCA9IDA7Cj4+ICsKPj4gKwlpZiAoIWRlYnVnKQo+PiArCQlyZXR1cm4gLUVOT0RFVjsKPj4g Kwo+PiArCWlmICgqcHBvcykKPj4gKwkJZ290byBlbmQ7Cj4+ICsKPj4gKwkvKiBMZWF2ZSByb29t IGZvciB0ZXJtaW5hdGlvbiBjaGFyICovCj4+ICsJbGVuID0gbWluX3Qoc2l6ZV90LCBjb3VudCwg U1pfMzIgLSAxKTsKPj4gKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZmYsIGxlbikp Cj4+ICsJCWdvdG8gY2xlYXI7Cj4+ICsKPj4gKwlidWZbbGVuXSA9ICdcMCc7Cj4+ICsKPj4gKwlp ZiAoc3NjYW5mKGJ1ZiwgIiVkICVkICVkIiwgJmhkaXNwbGF5LCAmdmRpc3BsYXksICZ2cmVmcmVz aCkgIT0gMykKPj4gKwkJZ290byBjbGVhcjsKPj4gKwo+PiArCWlmICghaGRpc3BsYXkgfHwgIXZk aXNwbGF5IHx8ICF2cmVmcmVzaCkKPj4gKwkJZ290byBjbGVhcjsKPj4gKwo+PiArCWRlYnVnLT5k cF9kZWJ1Zy5kZWJ1Z19lbiA9IHRydWU7Cj4+ICsJZGVidWctPmRwX2RlYnVnLmhkaXNwbGF5ID0g aGRpc3BsYXk7Cj4+ICsJZGVidWctPmRwX2RlYnVnLnZkaXNwbGF5ID0gdmRpc3BsYXk7Cj4+ICsJ ZGVidWctPmRwX2RlYnVnLnZyZWZyZXNoID0gdnJlZnJlc2g7Cj4+ICsJZ290byBlbmQ7Cj4+ICtj bGVhcjoKPj4gKwlwcl9kZWJ1ZygiY2xlYXJpbmcgZGVidWcgbW9kZXNcbiIpOwo+PiArCWRlYnVn LT5kcF9kZWJ1Zy5kZWJ1Z19lbiA9IGZhbHNlOwo+PiArZW5kOgo+PiArCXJldHVybiBsZW47Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBzc2l6ZV90IGRwX2RlYnVnX3JlYWRfY29ubmVjdGVkKHN0cnVj dCBmaWxlICpmaWxlLAo+PiArCQljaGFyIF9fdXNlciAqdXNlcl9idWZmLCBzaXplX3QgY291bnQs IGxvZmZfdCAqcHBvcykKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfZGVidWdfcHJpdmF0ZSAqZGVidWcg PSBmaWxlLT5wcml2YXRlX2RhdGE7Cj4+ICsJY2hhciBidWZbU1pfOF07Cj4+ICsJdTMyIGxlbiA9 IDA7Cj4+ICsKPj4gKwlpZiAoIWRlYnVnKQo+PiArCQlyZXR1cm4gLUVOT0RFVjsKPj4gKwo+PiAr CWlmICgqcHBvcykKPj4gKwkJcmV0dXJuIDA7Cj4+ICsKPj4gKwlpZiAoIWRlYnVnLT51c2JwZCkK Pj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4+ICsKPj4gKwlsZW4gKz0gc25wcmludGYoYnVmLCBTWl84 LCAiJWRcbiIsIGRlYnVnLT51c2JwZC0+aHBkX2hpZ2gpOwo+PiArCj4+ICsJaWYgKGNvcHlfdG9f dXNlcih1c2VyX2J1ZmYsIGJ1ZiwgbGVuKSkKPj4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4+ICsKPj4g KwkqcHBvcyArPSBsZW47Cj4+ICsJcmV0dXJuIGxlbjsKPj4gK30KPj4gKwo+PiArc3RhdGljIHNz aXplX3QgZHBfZGVidWdfcmVhZF9lZGlkX21vZGVzKHN0cnVjdCBmaWxlICpmaWxlLAo+PiArCQlj aGFyIF9fdXNlciAqdXNlcl9idWZmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKPj4gK3sK Pj4gKwlzdHJ1Y3QgZHBfZGVidWdfcHJpdmF0ZSAqZGVidWcgPSBmaWxlLT5wcml2YXRlX2RhdGE7 Cj4+ICsJY2hhciAqYnVmOwo+PiArCXUzMiBsZW4gPSAwOwo+PiArCWludCByYyA9IDA7Cj4+ICsJ c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZTsKPj4gKwo+PiArCWlmICghZGVidWcpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlk IGRhdGFcbiIpOwo+PiArCQlyYyA9IC1FTk9ERVY7Cj4+ICsJCWdvdG8gZXJyb3I7Cj4+ICsJfQo+ PiArCj4+ICsJY29ubmVjdG9yID0gKmRlYnVnLT5jb25uZWN0b3I7Cj4+ICsKPj4gKwlpZiAoIWNv bm5lY3Rvcikgewo+PiArCQlwcl9lcnIoImNvbm5lY3RvciBpcyBOVUxMXG4iKTsKPj4gKwkJcmMg PSAtRUlOVkFMOwo+PiArCQlnb3RvIGVycm9yOwo+PiArCX0KPj4gKwo+PiArCWlmICgqcHBvcykK Pj4gKwkJZ290byBlcnJvcjsKPj4gKwo+PiArCWJ1ZiA9IGt6YWxsb2MoU1pfNEssIEdGUF9LRVJO RUwpOwo+PiArCWlmICghYnVmKSB7Cj4+ICsJCXJjID0gLUVOT01FTTsKPj4gKwkJZ290byBlcnJv cjsKPj4gKwl9Cj4+ICsKPj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGUsICZjb25uZWN0b3It Pm1vZGVzLCBoZWFkKSB7Cj4+ICsJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFNaXzRLIC0g bGVuLAo+PiArCQkiJXMgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgMHgleFxuIiwKPj4gKwkJ bW9kZS0+bmFtZSwgbW9kZS0+dnJlZnJlc2gsIG1vZGUtPmhkaXNwbGF5LAo+PiArCQltb2RlLT5o c3luY19zdGFydCwgbW9kZS0+aHN5bmNfZW5kLCBtb2RlLT5odG90YWwsCj4+ICsJCW1vZGUtPnZk aXNwbGF5LCBtb2RlLT52c3luY19zdGFydCwgbW9kZS0+dnN5bmNfZW5kLAo+PiArCQltb2RlLT52 dG90YWwsIG1vZGUtPmZsYWdzKTsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAoY29weV90b191c2VyKHVz ZXJfYnVmZiwgYnVmLCBsZW4pKSB7Cj4+ICsJCWtmcmVlKGJ1Zik7Cj4+ICsJCXJjID0gLUVGQVVM VDsKPj4gKwkJZ290byBlcnJvcjsKPj4gKwl9Cj4+ICsKPj4gKwkqcHBvcyArPSBsZW47Cj4+ICsJ a2ZyZWUoYnVmKTsKPj4gKwo+PiArCXJldHVybiBsZW47Cj4+ICtlcnJvcjoKPj4gKwlyZXR1cm4g cmM7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJm bG93KGludCByYywgaW50ICptYXhfc2l6ZSwgaW50IAo+PiAqbGVuKQo+PiArewo+PiArCWlmIChy YyA+PSAqbWF4X3NpemUpIHsKPj4gKwkJcHJfZXJyKCJidWZmZXIgb3ZlcmZsb3dcbiIpOwo+PiAr CQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsJKmxlbiArPSByYzsKPj4gKwkqbWF4X3NpemUg PSBTWl80SyAtICpsZW47Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGlj IHNzaXplX3QgZHBfZGVidWdfcmVhZF9pbmZvKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNl ciAKPj4gKnVzZXJfYnVmZiwKPj4gKwkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCj4+ICt7 Cj4+ICsJc3RydWN0IGRwX2RlYnVnX3ByaXZhdGUgKmRlYnVnID0gZmlsZS0+cHJpdmF0ZV9kYXRh Owo+PiArCWNoYXIgKmJ1ZjsKPj4gKwl1MzIgbGVuID0gMCwgcmMgPSAwOwo+PiArCXU2NCBsY2xr ID0gMDsKPj4gKwl1MzIgbWF4X3NpemUgPSBTWl80SzsKPj4gKwo+PiArCWlmICghZGVidWcpCj4+ ICsJCXJldHVybiAtRU5PREVWOwo+PiArCj4+ICsJaWYgKCpwcG9zKQo+PiArCQlyZXR1cm4gMDsK Pj4gKwo+PiArCWJ1ZiA9IGt6YWxsb2MoU1pfNEssIEdGUF9LRVJORUwpOwo+PiArCWlmICghYnVm KQo+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArCXJjID0gc25wcmludGYoYnVmICsgbGVu LCBtYXhfc2l6ZSwgIlx0bmFtZSA9ICVzXG4iLCBERUJVR19OQU1FKTsKPj4gKwlpZiAoZHBfZGVi dWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KHJjLCAmbWF4X3NpemUsICZsZW4pKQo+PiArCQlnb3Rv IGVycm9yOwo+PiArCj4+ICsJcmMgPSBzbnByaW50ZihidWYgKyBsZW4sIG1heF9zaXplLAo+PiAr CQkiXHRkcF9wYW5lbFxuXHRcdG1heF9wY2xrX2toeiA9ICVkXG4iLAo+PiArCQlkZWJ1Zy0+cGFu ZWwtPm1heF9wY2xrX2toeik7Cj4+ICsJaWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxv dyhyYywgJm1heF9zaXplLCAmbGVuKSkKPj4gKwkJZ290byBlcnJvcjsKPj4gKwo+PiArCXJjID0g c25wcmludGYoYnVmICsgbGVuLCBtYXhfc2l6ZSwKPj4gKwkJIlx0ZHJtX2RwX2xpbmtcblx0XHRy YXRlID0gJXVcbiIsCj4+ICsJCWRlYnVnLT5wYW5lbC0+bGlua19pbmZvLnJhdGUpOwo+PiArCWlm IChkcF9kZWJ1Z19jaGVja19idWZmZXJfb3ZlcmZsb3cocmMsICZtYXhfc2l6ZSwgJmxlbikpCj4+ ICsJCWdvdG8gZXJyb3I7Cj4+ICsKPj4gKwlyYyA9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4X3Np emUsCj4+ICsJCSJcdFx0bnVtX2xhbmVzID0gJXVcbiIsCj4+ICsJCWRlYnVnLT5wYW5lbC0+bGlu a19pbmZvLm51bV9sYW5lcyk7Cj4+ICsJaWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxv dyhyYywgJm1heF9zaXplLCAmbGVuKSkKPj4gKwkJZ290byBlcnJvcjsKPj4gKwo+PiArCXJjID0g c25wcmludGYoYnVmICsgbGVuLCBtYXhfc2l6ZSwKPj4gKwkJIlx0XHRjYXBhYmlsaXRpZXMgPSAl bHVcbiIsCj4+ICsJCWRlYnVnLT5wYW5lbC0+bGlua19pbmZvLmNhcGFiaWxpdGllcyk7Cj4+ICsJ aWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywgJm1heF9zaXplLCAmbGVuKSkK Pj4gKwkJZ290byBlcnJvcjsKPj4gKwo+PiArCXJjID0gc25wcmludGYoYnVmICsgbGVuLCBtYXhf c2l6ZSwKPj4gKwkJIlx0ZHBfcGFuZWxfaW5mbzpcblx0XHRhY3RpdmUgPSAlZHglZFxuIiwKPj4g KwkJZGVidWctPnBhbmVsLT5waW5mby5oX2FjdGl2ZSwKPj4gKwkJZGVidWctPnBhbmVsLT5waW5m by52X2FjdGl2ZSk7Cj4+ICsJaWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywg Jm1heF9zaXplLCAmbGVuKSkKPj4gKwkJZ290byBlcnJvcjsKPj4gKwo+PiArCXJjID0gc25wcmlu dGYoYnVmICsgbGVuLCBtYXhfc2l6ZSwKPj4gKwkJIlx0XHRiYWNrX3BvcmNoID0gJWR4JWRcbiIs Cj4+ICsJCWRlYnVnLT5wYW5lbC0+cGluZm8uaF9iYWNrX3BvcmNoLAo+PiArCQlkZWJ1Zy0+cGFu ZWwtPnBpbmZvLnZfYmFja19wb3JjaCk7Cj4+ICsJaWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9v dmVyZmxvdyhyYywgJm1heF9zaXplLCAmbGVuKSkKPj4gKwkJZ290byBlcnJvcjsKPj4gKwo+PiAr CXJjID0gc25wcmludGYoYnVmICsgbGVuLCBtYXhfc2l6ZSwKPj4gKwkJIlx0XHRmcm9udF9wb3Jj aCA9ICVkeCVkXG4iLAo+PiArCQlkZWJ1Zy0+cGFuZWwtPnBpbmZvLmhfZnJvbnRfcG9yY2gsCj4+ ICsJCWRlYnVnLT5wYW5lbC0+cGluZm8udl9mcm9udF9wb3JjaCk7Cj4+ICsJaWYgKGRwX2RlYnVn X2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywgJm1heF9zaXplLCAmbGVuKSkKPj4gKwkJZ290byBl cnJvcjsKPj4gKwo+PiArCXJjID0gc25wcmludGYoYnVmICsgbGVuLCBtYXhfc2l6ZSwKPj4gKwkJ Ilx0XHRzeW5jX3dpZHRoID0gJWR4JWRcbiIsCj4+ICsJCWRlYnVnLT5wYW5lbC0+cGluZm8uaF9z eW5jX3dpZHRoLAo+PiArCQlkZWJ1Zy0+cGFuZWwtPnBpbmZvLnZfc3luY193aWR0aCk7Cj4+ICsJ aWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywgJm1heF9zaXplLCAmbGVuKSkK Pj4gKwkJZ290byBlcnJvcjsKPj4gKwo+PiArCXJjID0gc25wcmludGYoYnVmICsgbGVuLCBtYXhf c2l6ZSwKPj4gKwkJIlx0XHRhY3RpdmVfbG93ID0gJWR4JWRcbiIsCj4+ICsJCWRlYnVnLT5wYW5l bC0+cGluZm8uaF9hY3RpdmVfbG93LAo+PiArCQlkZWJ1Zy0+cGFuZWwtPnBpbmZvLnZfYWN0aXZl X2xvdyk7Cj4+ICsJaWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywgJm1heF9z aXplLCAmbGVuKSkKPj4gKwkJZ290byBlcnJvcjsKPj4gKwo+PiArCXJjID0gc25wcmludGYoYnVm ICsgbGVuLCBtYXhfc2l6ZSwKPj4gKwkJIlx0XHRoX3NrZXcgPSAlZFxuIiwKPj4gKwkJZGVidWct PnBhbmVsLT5waW5mby5oX3NrZXcpOwo+PiArCWlmIChkcF9kZWJ1Z19jaGVja19idWZmZXJfb3Zl cmZsb3cocmMsICZtYXhfc2l6ZSwgJmxlbikpCj4+ICsJCWdvdG8gZXJyb3I7Cj4+ICsKPj4gKwly YyA9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4X3NpemUsCj4+ICsJCSJcdFx0cmVmcmVzaCByYXRl ID0gJWRcbiIsCj4+ICsJCWRlYnVnLT5wYW5lbC0+cGluZm8ucmVmcmVzaF9yYXRlKTsKPj4gKwlp ZiAoZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KHJjLCAmbWF4X3NpemUsICZsZW4pKQo+ PiArCQlnb3RvIGVycm9yOwo+PiArCj4+ICsJcmMgPSBzbnByaW50ZihidWYgKyBsZW4sIG1heF9z aXplLAo+PiArCQkiXHRcdHBpeGVsIGNsb2NrIGtoeiA9ICVkXG4iLAo+PiArCQlkZWJ1Zy0+cGFu ZWwtPnBpbmZvLnBpeGVsX2Nsa19raHopOwo+PiArCWlmIChkcF9kZWJ1Z19jaGVja19idWZmZXJf b3ZlcmZsb3cocmMsICZtYXhfc2l6ZSwgJmxlbikpCj4+ICsJCWdvdG8gZXJyb3I7Cj4+ICsKPj4g KwlyYyA9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4X3NpemUsCj4+ICsJCSJcdFx0YnBwID0gJWRc biIsCj4+ICsJCWRlYnVnLT5wYW5lbC0+cGluZm8uYnBwKTsKPj4gKwlpZiAoZHBfZGVidWdfY2hl Y2tfYnVmZmVyX292ZXJmbG93KHJjLCAmbWF4X3NpemUsICZsZW4pKQo+PiArCQlnb3RvIGVycm9y Owo+PiArCj4+ICsJLyogTGluayBJbmZvcm1hdGlvbiAqLwo+PiArCXJjID0gc25wcmludGYoYnVm ICsgbGVuLCBtYXhfc2l6ZSwKPj4gKwkJIlx0ZHBfbGluazpcblx0XHR0ZXN0X3JlcXVlc3RlZCA9 ICVkXG4iLAo+PiArCQlkZWJ1Zy0+bGluay0+c2lua19yZXF1ZXN0KTsKPj4gKwlpZiAoZHBfZGVi dWdfY2hlY2tfYnVmZmVyX292ZXJmbG93KHJjLCAmbWF4X3NpemUsICZsZW4pKQo+PiArCQlnb3Rv IGVycm9yOwo+PiArCj4+ICsJcmMgPSBzbnByaW50ZihidWYgKyBsZW4sIG1heF9zaXplLAo+PiAr CQkiXHRcdGxhbmVfY291bnQgPSAlZFxuIiwgZGVidWctPmxpbmstPmxpbmtfcGFyYW1zLmxhbmVf Y291bnQpOwo+PiArCWlmIChkcF9kZWJ1Z19jaGVja19idWZmZXJfb3ZlcmZsb3cocmMsICZtYXhf c2l6ZSwgJmxlbikpCj4+ICsJCWdvdG8gZXJyb3I7Cj4+ICsKPj4gKwlyYyA9IHNucHJpbnRmKGJ1 ZiArIGxlbiwgbWF4X3NpemUsCj4+ICsJCSJcdFx0YndfY29kZSA9ICVkXG4iLCBkZWJ1Zy0+bGlu ay0+bGlua19wYXJhbXMuYndfY29kZSk7Cj4+ICsJaWYgKGRwX2RlYnVnX2NoZWNrX2J1ZmZlcl9v dmVyZmxvdyhyYywgJm1heF9zaXplLCAmbGVuKSkKPj4gKwkJZ290byBlcnJvcjsKPj4gKwo+PiAr CWxjbGsgPSBkcm1fZHBfYndfY29kZV90b19saW5rX3JhdGUoCj4+ICsJCQlkZWJ1Zy0+bGluay0+ bGlua19wYXJhbXMuYndfY29kZSkgKiAxMDAwOwo+PiArCXJjID0gc25wcmludGYoYnVmICsgbGVu LCBtYXhfc2l6ZSwKPj4gKwkJIlx0XHRsY2xrID0gJWxsZFxuIiwgbGNsayk7Cj4+ICsJaWYgKGRw X2RlYnVnX2NoZWNrX2J1ZmZlcl9vdmVyZmxvdyhyYywgJm1heF9zaXplLCAmbGVuKSkKPj4gKwkJ Z290byBlcnJvcjsKPj4gKwo+PiArCXJjID0gc25wcmludGYoYnVmICsgbGVuLCBtYXhfc2l6ZSwK Pj4gKwkJIlx0XHR2X2xldmVsID0gJWRcbiIsIGRlYnVnLT5saW5rLT5waHlfcGFyYW1zLnZfbGV2 ZWwpOwo+PiArCWlmIChkcF9kZWJ1Z19jaGVja19idWZmZXJfb3ZlcmZsb3cocmMsICZtYXhfc2l6 ZSwgJmxlbikpCj4+ICsJCWdvdG8gZXJyb3I7Cj4+ICsKPj4gKwlyYyA9IHNucHJpbnRmKGJ1ZiAr IGxlbiwgbWF4X3NpemUsCj4+ICsJCSJcdFx0cF9sZXZlbCA9ICVkXG4iLCBkZWJ1Zy0+bGluay0+ cGh5X3BhcmFtcy5wX2xldmVsKTsKPj4gKwlpZiAoZHBfZGVidWdfY2hlY2tfYnVmZmVyX292ZXJm bG93KHJjLCAmbWF4X3NpemUsICZsZW4pKQo+PiArCQlnb3RvIGVycm9yOwo+PiArCj4+ICsJaWYg KGNvcHlfdG9fdXNlcih1c2VyX2J1ZmYsIGJ1ZiwgbGVuKSkKPj4gKwkJZ290byBlcnJvcjsKPj4g Kwo+PiArCSpwcG9zICs9IGxlbjsKPj4gKwo+PiArCWtmcmVlKGJ1Zik7Cj4+ICsJcmV0dXJuIGxl bjsKPj4gK2Vycm9yOgo+PiArCWtmcmVlKGJ1Zik7Cj4+ICsJcmV0dXJuIC1FSU5WQUw7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRwX2RlYnVnX2Zv cHMgPSB7Cj4+ICsJLm9wZW4gPSBzaW1wbGVfb3BlbiwKPj4gKwkucmVhZCA9IGRwX2RlYnVnX3Jl YWRfaW5mbywKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIGVkaWRfbW9kZXNfZm9wcyA9IHsKPj4gKwkub3BlbiA9IHNpbXBsZV9vcGVuLAo+PiArCS5y ZWFkID0gZHBfZGVidWdfcmVhZF9lZGlkX21vZGVzLAo+PiArCS53cml0ZSA9IGRwX2RlYnVnX3dy aXRlX2VkaWRfbW9kZXMsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVf b3BlcmF0aW9ucyBocGRfZm9wcyA9IHsKPj4gKwkub3BlbiA9IHNpbXBsZV9vcGVuLAo+PiArCS53 cml0ZSA9IGRwX2RlYnVnX3dyaXRlX2hwZCwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbm5lY3RlZF9mb3BzID0gewo+PiArCS5vcGVuID0gc2lt cGxlX29wZW4sCj4+ICsJLnJlYWQgPSBkcF9kZWJ1Z19yZWFkX2Nvbm5lY3RlZCwKPj4gK307Cj4g Cj4gZWRpZCwgaHBkLCBhbmQgY29ubmVjdGVkIGNhbiBhbGwgYmUgZGVsZXRlZC4gVGhleSdyZSBw cm92aWRlZCBieSBjb3JlLgo+IAo+IEFGQUlDVCwgeW91IGNhbiBhbHNvIGluZmVyIHRoZSBpbmZv cm1hdGlvbiBmcm9tIGRwX2RlYnVnLCBzbyBJIHRoaW5rIAo+IHlvdSBjYW4KPiBqdXN0IGRyb3Ag dGhpcyBlbnRpcmUgZmlsZS4KPiAKPj4gKwo+PiArc3RhdGljIGludCBkcF9kZWJ1Z19pbml0KHN0 cnVjdCBkcF9kZWJ1ZyAqZHBfZGVidWcpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1 Y3QgZHBfZGVidWdfcHJpdmF0ZSAqZGVidWcgPSBjb250YWluZXJfb2YoZHBfZGVidWcsCj4+ICsJ CXN0cnVjdCBkcF9kZWJ1Z19wcml2YXRlLCBkcF9kZWJ1Zyk7Cj4+ICsJc3RydWN0IGRlbnRyeSAq ZGlyLCAqZmlsZSwgKmVkaWRfbW9kZXM7Cj4+ICsJc3RydWN0IGRlbnRyeSAqaHBkLCAqY29ubmVj dGVkOwo+PiArCj4+ICsJZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKERFQlVHX05BTUUsIE5VTEwp Owo+PiArCWlmIChJU19FUlJfT1JfTlVMTChkaXIpKSB7Cj4+ICsJCXJjID0gUFRSX0VSUihkaXIp Owo+PiArCQlwcl9lcnIoIlslc10gZGVidWdmcyBjcmVhdGUgZGlyIGZhaWxlZCwgcmMgPSAlZFxu IiwKPj4gKwkJICAgICAgIERFQlVHX05BTUUsIHJjKTsKPj4gKwkJZ290byBlcnJvcjsKPj4gKwl9 Cj4+ICsKPj4gKwlmaWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZHBfZGVidWciLCAwNDQ0LCBk aXIsCj4+ICsJCQkJZGVidWcsICZkcF9kZWJ1Z19mb3BzKTsKPj4gKwlpZiAoSVNfRVJSX09SX05V TEwoZmlsZSkpIHsKPj4gKwkJcmMgPSBQVFJfRVJSKGZpbGUpOwo+PiArCQlwcl9lcnIoIlslc10g ZGVidWdmcyBjcmVhdGUgZmlsZSBmYWlsZWQsIHJjPSVkXG4iLAo+PiArCQkgICAgICAgREVCVUdf TkFNRSwgcmMpOwo+PiArCQlnb3RvIGVycm9yX3JlbW92ZV9kaXI7Cj4+ICsJfQo+PiArCj4+ICsJ ZWRpZF9tb2RlcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImVkaWRfbW9kZXMiLCAwNjQ0LCBkaXIs Cj4+ICsJCQkJCWRlYnVnLCAmZWRpZF9tb2Rlc19mb3BzKTsKPj4gKwlpZiAoSVNfRVJSX09SX05V TEwoZWRpZF9tb2RlcykpIHsKPj4gKwkJcmMgPSBQVFJfRVJSKGVkaWRfbW9kZXMpOwo+PiArCQlw cl9lcnIoIlslc10gZGVidWdmcyBjcmVhdGUgZWRpZF9tb2RlcyBmYWlsZWQsIHJjPSVkXG4iLAo+ PiArCQkgICAgICAgREVCVUdfTkFNRSwgcmMpOwo+PiArCQlnb3RvIGVycm9yX3JlbW92ZV9kaXI7 Cj4+ICsJfQo+PiArCj4+ICsJaHBkID0gZGVidWdmc19jcmVhdGVfZmlsZSgiaHBkIiwgMDY0NCwg ZGlyLAo+PiArCQkJCQlkZWJ1ZywgJmhwZF9mb3BzKTsKPj4gKwlpZiAoSVNfRVJSX09SX05VTEwo aHBkKSkgewo+PiArCQlyYyA9IFBUUl9FUlIoaHBkKTsKPj4gKwkJcHJfZXJyKCJbJXNdIGRlYnVn ZnMgaHBkIGZhaWxlZCwgcmM9JWRcbiIsCj4+ICsJCQlERUJVR19OQU1FLCByYyk7Cj4+ICsJCWdv dG8gZXJyb3JfcmVtb3ZlX2RpcjsKPj4gKwl9Cj4+ICsKPj4gKwljb25uZWN0ZWQgPSBkZWJ1Z2Zz X2NyZWF0ZV9maWxlKCJjb25uZWN0ZWQiLCAwNDQ0LCBkaXIsCj4+ICsJCQkJCWRlYnVnLCAmY29u bmVjdGVkX2ZvcHMpOwo+PiArCWlmIChJU19FUlJfT1JfTlVMTChjb25uZWN0ZWQpKSB7Cj4+ICsJ CXJjID0gUFRSX0VSUihjb25uZWN0ZWQpOwo+PiArCQlwcl9lcnIoIlslc10gZGVidWdmcyBjb25u ZWN0ZWQgZmFpbGVkLCByYz0lZFxuIiwKPj4gKwkJCURFQlVHX05BTUUsIHJjKTsKPj4gKwkJZ290 byBlcnJvcl9yZW1vdmVfZGlyOwo+PiArCX0KPj4gKwo+PiArCWRlYnVnLT5yb290ID0gZGlyOwo+ PiArCXJldHVybiByYzsKPj4gK2Vycm9yX3JlbW92ZV9kaXI6Cj4+ICsJZGVidWdmc19yZW1vdmUo ZGlyKTsKPj4gK2Vycm9yOgo+PiArCXJldHVybiByYzsKPj4gK30KPj4gKwo+PiArc3RydWN0IGRw X2RlYnVnICpkcF9kZWJ1Z19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHBfcGFuZWwg Cj4+ICpwYW5lbCwKPj4gKwkJCXN0cnVjdCBkcF91c2JwZCAqdXNicGQsIHN0cnVjdCBkcF9saW5r ICpsaW5rLAo+PiArCQkJc3RydWN0IGRybV9jb25uZWN0b3IgKipjb25uZWN0b3IpCj4+ICt7Cj4+ ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1Y3QgZHBfZGVidWdfcHJpdmF0ZSAqZGVidWc7Cj4+ICsJ c3RydWN0IGRwX2RlYnVnICpkcF9kZWJ1ZzsKPj4gKwo+PiArCWlmICghZGV2IHx8ICFwYW5lbCB8 fCAhdXNicGQgfHwgIWxpbmspIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4g KwkJcmMgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGVycm9yOwo+PiArCX0KPj4gKwo+PiArCWRlYnVn ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkZWJ1ZyksIEdGUF9LRVJORUwpOwo+PiArCWlm ICghZGVidWcpIHsKPj4gKwkJcmMgPSAtRU5PTUVNOwo+PiArCQlnb3RvIGVycm9yOwo+PiArCX0K Pj4gKwo+PiArCWRlYnVnLT5kcF9kZWJ1Zy5kZWJ1Z19lbiA9IGZhbHNlOwo+PiArCWRlYnVnLT51 c2JwZCA9IHVzYnBkOwo+PiArCWRlYnVnLT5saW5rID0gbGluazsKPj4gKwlkZWJ1Zy0+cGFuZWwg PSBwYW5lbDsKPj4gKwlkZWJ1Zy0+ZGV2ID0gZGV2Owo+PiArCWRlYnVnLT5jb25uZWN0b3IgPSBj b25uZWN0b3I7Cj4+ICsKPj4gKwlkcF9kZWJ1ZyA9ICZkZWJ1Zy0+ZHBfZGVidWc7Cj4+ICsJZHBf ZGVidWctPnZkaXNwbGF5ID0gMDsKPj4gKwlkcF9kZWJ1Zy0+aGRpc3BsYXkgPSAwOwo+PiArCWRw X2RlYnVnLT52cmVmcmVzaCA9IDA7Cj4+ICsKPj4gKwlyYyA9IGRwX2RlYnVnX2luaXQoZHBfZGVi dWcpOwo+PiArCWlmIChyYykgewo+PiArCQlkZXZtX2tmcmVlKGRldiwgZGVidWcpOwo+PiArCQln b3RvIGVycm9yOwo+PiArCX0KPj4gKwo+PiArCXJldHVybiBkcF9kZWJ1ZzsKPj4gK2Vycm9yOgo+ PiArCXJldHVybiBFUlJfUFRSKHJjKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9kZWJ1 Z19kZWluaXQoc3RydWN0IGRwX2RlYnVnICpkcF9kZWJ1ZykKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBf ZGVidWdfcHJpdmF0ZSAqZGVidWc7Cj4+ICsKPj4gKwlpZiAoIWRwX2RlYnVnKQo+PiArCQlyZXR1 cm4gLUVJTlZBTDsKPj4gKwo+PiArCWRlYnVnID0gY29udGFpbmVyX29mKGRwX2RlYnVnLCBzdHJ1 Y3QgZHBfZGVidWdfcHJpdmF0ZSwgZHBfZGVidWcpOwo+PiArCj4+ICsJZGVidWdmc19yZW1vdmVf cmVjdXJzaXZlKGRlYnVnLT5yb290KTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ ICt2b2lkIGRwX2RlYnVnX3B1dChzdHJ1Y3QgZHBfZGVidWcgKmRwX2RlYnVnKQo+PiArewo+PiAr CXN0cnVjdCBkcF9kZWJ1Z19wcml2YXRlICpkZWJ1ZzsKPj4gKwo+PiArCWlmICghZHBfZGVidWcp Cj4+ICsJCXJldHVybjsKPj4gKwo+PiArCWRlYnVnID0gY29udGFpbmVyX29mKGRwX2RlYnVnLCBz dHJ1Y3QgZHBfZGVidWdfcHJpdmF0ZSwgZHBfZGVidWcpOwo+PiArCj4+ICsJZHBfZGVidWdfZGVp bml0KGRwX2RlYnVnKTsKPj4gKwo+PiArCWRldm1fa2ZyZWUoZGVidWctPmRldiwgZGVidWcpOwo+ PiArfQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kZWJ1Zy5oIAo+ PiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGVidWcuaAo+PiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+PiBpbmRleCAwMDAwMDAwLi5hNjQ4MGUxCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kZWJ1Zy5oCj4+IEBAIC0wLDAgKzEsODEgQEAKPj4g Ky8qCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24u IEFsbCByaWdodHMgCj4+IHJlc2VydmVkLgo+PiArICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCj4+IG1vZGlmeQo+ PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSB2ZXJzaW9uIDIgYW5kCj4+ICsgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4gKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCj4+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCj4+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgo+PiArICoKPj4gKyAqLwo+PiArCj4+ICsjaWZuZGVmIF9EUF9ERUJVR19IXwo+ PiArI2RlZmluZSBfRFBfREVCVUdfSF8KPj4gKwo+PiArI2luY2x1ZGUgImRwX3BhbmVsLmgiCj4+ ICsjaW5jbHVkZSAiZHBfbGluay5oIgo+PiArI2luY2x1ZGUgImRwX2V4dGNvbi5oIgo+PiArCj4+ ICsvKioKPj4gKyAqIHN0cnVjdCBkcF9kZWJ1Zwo+PiArICogQGRlYnVnX2VuOiBzcGVjaWZpZXMg d2hldGhlciBkZWJ1ZyBtb2RlIGVuYWJsZWQKPj4gKyAqIEB2ZGlzcGxheTogdXNlZCB0byBmaWx0 ZXIgb3V0IHZkaXNwbGF5IHZhbHVlCj4+ICsgKiBAaGRpc3BsYXk6IHVzZWQgdG8gZmlsdGVyIG91 dCBoZGlzcGxheSB2YWx1ZQo+PiArICogQHZyZWZyZXNoOiB1c2VkIHRvIGZpbHRlciBvdXQgdnJl ZnJlc2ggdmFsdWUKPj4gKyAqIEB0cGdfc3RhdGU6IHNwZWNpZmllcyB3aGV0aGVyIHRwZyBmZWF0 dXJlIGlzIGVuYWJsZWQKPj4gKyAqLwo+PiArc3RydWN0IGRwX2RlYnVnIHsKPj4gKwlib29sIGRl YnVnX2VuOwo+PiArCWludCBhc3BlY3RfcmF0aW87Cj4+ICsJaW50IHZkaXNwbGF5Owo+PiArCWlu dCBoZGlzcGxheTsKPj4gKwlpbnQgdnJlZnJlc2g7Cj4+ICt9Owo+PiArCj4+ICsjaWYgZGVmaW5l ZChDT05GSUdfREVCVUdfRlMpCj4+ICsKPj4gKy8qKgo+PiArICogZHBfZGVidWdfZ2V0KCkgLSBj b25maWd1cmUgYW5kIGdldCB0aGUgRGlzcGxheVBsb3QgZGVidWcgbW9kdWxlIAo+PiBkYXRhCj4+ ICsgKgo+PiArICogQGRldjogZGV2aWNlIGluc3RhbmNlIG9mIHRoZSBjYWxsZXIKPj4gKyAqIEBw YW5lbDogaW5zdGFuY2Ugb2YgcGFuZWwgbW9kdWxlCj4+ICsgKiBAdXNicGQ6IGluc3RhbmNlIG9m IHVzYnBkIG1vZHVsZQo+PiArICogQGxpbms6IGluc3RhbmNlIG9mIGxpbmsgbW9kdWxlCj4+ICsg KiBAY29ubmVjdG9yOiBkb3VibGUgcG9pbnRlciB0byBkaXNwbGF5IGNvbm5lY3Rvcgo+PiArICog cmV0dXJuOiBwb2ludGVyIHRvIGFsbG9jYXRlZCBkZWJ1ZyBtb2R1bGUgZGF0YQo+PiArICoKPj4g KyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCB0aGUgZGVidWcgbW9kdWxlIGFuZCBwcm92aWRlcyBh IHdheQo+PiArICogZm9yIGRlYnVnZnMgaW5wdXQgdG8gYmUgY29tbXVuaWNhdGVkIHdpdGggZXhp c3RpbmcgbW9kdWxlcwo+PiArICovCj4+ICtzdHJ1Y3QgZHBfZGVidWcgKmRwX2RlYnVnX2dldChz dHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkcF9wYW5lbCAKPj4gKnBhbmVsLAo+PiArCQkJc3Ry dWN0IGRwX3VzYnBkICp1c2JwZCwgc3RydWN0IGRwX2xpbmsgKmxpbmssCj4+ICsJCQlzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqKmNvbm5lY3Rvcik7Cj4+ICsvKioKPj4gKyAqIGRwX2RlYnVnX3B1dCgp Cj4+ICsgKgo+PiArICogQ2xlYW5zIHVwIGRwX2RlYnVnIGluc3RhbmNlCj4+ICsgKgo+PiArICog QGRwX2RlYnVnOiBpbnN0YW5jZSBvZiBkcF9kZWJ1Zwo+PiArICovCj4+ICt2b2lkIGRwX2RlYnVn X3B1dChzdHJ1Y3QgZHBfZGVidWcgKmRwX2RlYnVnKTsKPj4gKwo+PiArI2Vsc2UKPj4gKwo+PiAr c3RhdGljIGlubGluZQo+PiArc3RydWN0IGRwX2RlYnVnICpkcF9kZWJ1Z19nZXQoc3RydWN0IGRl dmljZSAqZGV2LCBzdHJ1Y3QgZHBfcGFuZWwgCj4+ICpwYW5lbCwKPj4gKwkJCXN0cnVjdCBkcF91 c2JwZCAqdXNicGQsIHN0cnVjdCBkcF9saW5rICpsaW5rLAo+PiArCQkJc3RydWN0IGRybV9jb25u ZWN0b3IgKipjb25uZWN0b3IpCj4+ICt7Cj4+ICsJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBkcF9kZWJ1Z19wdXQoc3RydWN0IGRwX2Rl YnVnICpkcF9kZWJ1ZykKPj4gK3sKPj4gK30KPj4gKwo+PiArI2VuZGlmIC8qIGRlZmluZWQoQ09O RklHX0RFQlVHX0ZTKSAqLwo+IAo+IERyb3AgdGhpcyB0b28KPiAKPj4gKwo+PiArI2VuZGlmIC8q IF9EUF9ERUJVR19IXyAqLwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9kaXNwbGF5LmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmMKPj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uOGM5ODM5OQo+PiAtLS0gL2Rl di9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5jCj4+IEBA IC0wLDAgKzEsOTc3IEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRo ZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIAo+PiByZXNlcnZlZC4KPj4gKyAqCj4+ICsg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIAo+PiBtb2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+PiArICogb25seSB2ZXJzaW9uIDIg YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4+ICsgKgo+PiAr ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCj4+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+PiArICogR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4gKyAqCj4+ICsgKi8KPj4gKwo+PiArI2Rl ZmluZSBwcl9mbXQoZm10KQkiW2RybS1kcF0gJXM6ICIgZm10LCBfX2Z1bmNfXwo+PiArCj4+ICsj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+PiAr I2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+ Cj4+ICsjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvb2Zf aXJxLmg+Cj4+ICsKPj4gKyNpbmNsdWRlICJtc21fZHJ2LmgiCj4+ICsjaW5jbHVkZSAiZHBfZXh0 Y29uLmgiCj4+ICsjaW5jbHVkZSAiZHBfcGFyc2VyLmgiCj4+ICsjaW5jbHVkZSAiZHBfcG93ZXIu aCIKPj4gKyNpbmNsdWRlICJkcF9jYXRhbG9nLmgiCj4+ICsjaW5jbHVkZSAiZHBfYXV4LmgiCj4+ ICsjaW5jbHVkZSAiZHBfbGluay5oIgo+PiArI2luY2x1ZGUgImRwX3BhbmVsLmgiCj4+ICsjaW5j bHVkZSAiZHBfY3RybC5oIgo+PiArI2luY2x1ZGUgImRwX2Rpc3BsYXkuaCIKPj4gKyNpbmNsdWRl ICJkcF9kcm0uaCIKPj4gKyNpbmNsdWRlICJkcF9kZWJ1Zy5oIgo+PiArCj4+ICtzdGF0aWMgc3Ry dWN0IG1zbV9kcCAqZ19kcF9kaXNwbGF5Owo+PiArI2RlZmluZSBIUERfU1RSSU5HX1NJWkUgMzAK Pj4gKwo+PiArc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSB7Cj4+ICsJY2hhciAqbmFtZTsKPj4g KwlpbnQgaXJxOwo+PiArCj4+ICsJLyogc3RhdGUgdmFyaWFibGVzICovCj4+ICsJYm9vbCBjb3Jl X2luaXRpYWxpemVkOwo+PiArCWJvb2wgcG93ZXJfb247Cj4+ICsJYm9vbCBocGRfaXJxX29uOwo+ PiArCWJvb2wgYXVkaW9fc3VwcG9ydGVkOwo+PiArCj4+ICsJc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldjsKPj4gKwlzdHJ1Y3QgZGVudHJ5ICpyb290Owo+PiArCXN0cnVjdCBjb21wbGV0aW9u IG5vdGlmaWNhdGlvbl9jb21wOwo+PiArCj4+ICsJc3RydWN0IGRwX3VzYnBkICAgKnVzYnBkOwo+ PiArCXN0cnVjdCBkcF9wYXJzZXIgICpwYXJzZXI7Cj4+ICsJc3RydWN0IGRwX3Bvd2VyICAgKnBv d2VyOwo+PiArCXN0cnVjdCBkcF9jYXRhbG9nICpjYXRhbG9nOwo+PiArCXN0cnVjdCBkcF9hdXgg ICAgICphdXg7Cj4+ICsJc3RydWN0IGRwX2xpbmsgICAgKmxpbms7Cj4+ICsJc3RydWN0IGRwX3Bh bmVsICAgKnBhbmVsOwo+PiArCXN0cnVjdCBkcF9jdHJsICAgICpjdHJsOwo+PiArCXN0cnVjdCBk cF9kZWJ1ZyAgICpkZWJ1ZzsKPj4gKwo+PiArCXN0cnVjdCBkcF91c2JwZF9jYiB1c2JwZF9jYjsK Pj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlIG1vZGU7Cj4+ICsJc3RydWN0IG1zbV9kcCBkcF9k aXNwbGF5Owo+PiArCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCBkcF9kdF9tYXRjaFtdID0gewo+PiArCXsuY29tcGF0aWJsZSA9ICJxY29tLGRwLWRpc3Bs YXkifSwKPj4gKwl7fQo+PiArfTsKPj4gKwo+PiArc3RhdGljIGlycXJldHVybl90IGRwX2Rpc3Bs YXlfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfZGlzcGxh eV9wcml2YXRlICpkcCA9IGRldl9pZDsKPj4gKwo+PiArCWlmICghZHApIHsKPj4gKwkJcHJfZXJy KCJpbnZhbGlkIGRhdGFcbiIpOwo+PiArCQlyZXR1cm4gSVJRX05PTkU7Cj4+ICsJfQo+PiArCj4+ ICsJLyogRFAgY29udHJvbGxlciBpc3IgKi8KPj4gKwlkcC0+Y3RybC0+aXNyKGRwLT5jdHJsKTsK Pj4gKwo+PiArCS8qIERQIGF1eCBpc3IgKi8KPj4gKwlkcC0+YXV4LT5pc3IoZHAtPmF1eCk7Cj4+ ICsKPj4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBf ZGlzcGxheV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAo+ PiArCQkJICAgdm9pZCAqZGF0YSkKPj4gK3sKPj4gKwlpbnQgcmMgPSAwOwo+PiArCXN0cnVjdCBk cF9kaXNwbGF5X3ByaXZhdGUgKmRwOwo+PiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07Cj4+ICsJ c3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKPj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Cj4+ICsKPj4gKwlpZiAoIWRldiB8fCAh cGRldiB8fCAhbWFzdGVyKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBwYXJhbShzKSwgZGV2ICVw SywgcGRldiAlcEssIG1hc3RlciAlcEtcbiIsCj4+ICsJCQkJZGV2LCBwZGV2LCBtYXN0ZXIpOwo+ PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+PiArCWRybSA9 IGRldl9nZXRfZHJ2ZGF0YShtYXN0ZXIpOwo+PiArCWRwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEo cGRldik7Cj4+ICsJaWYgKCFkcm0gfHwgIWRwKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBwYXJh bShzKSwgZHJtICVwSywgZHAgJXBLXG4iLAo+PiArCQkJCWRybSwgZHApOwo+PiArCQlyYyA9IC1F SU5WQUw7Cj4+ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+PiArCWRwLT5kcF9kaXNwbGF5LmRy bV9kZXYgPSBkcm07Cj4+ICsJcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4+ICsJcHJpdi0+ZHAg PSAmKGRwLT5kcF9kaXNwbGF5KTsKPj4gKwo+PiArCXJjID0gZHAtPnBhcnNlci0+cGFyc2UoZHAt PnBhcnNlcik7Cj4+ICsJaWYgKHJjKSB7Cj4+ICsJCXByX2VycigiZGV2aWNlIHRyZWUgcGFyc2lu ZyBmYWlsZWRcbiIpOwo+PiArCQlnb3RvIGVuZDsKPj4gKwl9Cj4+ICsKPj4gKwlyYyA9IGRwLT5h dXgtPmRybV9hdXhfcmVnaXN0ZXIoZHAtPmF1eCk7Cj4+ICsJaWYgKHJjKSB7Cj4+ICsJCXByX2Vy cigiRFJNIERQIEFVWCByZWdpc3RlciBmYWlsZWRcbiIpOwo+PiArCQlnb3RvIGVuZDsKPj4gKwl9 Cj4+ICsKPj4gKwlyYyA9IGRwLT5wb3dlci0+cG93ZXJfY2xpZW50X2luaXQoZHAtPnBvd2VyKTsK Pj4gKwlpZiAocmMpIHsKPj4gKwkJcHJfZXJyKCJQb3dlciBjbGllbnQgY3JlYXRlIGZhaWxlZFxu Iik7Cj4+ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+PiArZW5kOgo+PiArCXJldHVybiByYzsK Pj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfZGlzcGxheV91bmJpbmQoc3RydWN0IGRldmlj ZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlIAo+PiAqbWFzdGVyLAo+PiArCQkJICAgICAgdm9pZCAqZGF0 YSkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcDsKPj4gKwlzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Cj4+ICsJc3Ry dWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShtYXN0ZXIpOwo+PiArCXN0cnVj dCBtc21fZHJtX3ByaXZhdGUgKnByaXYgPSBkcm0tPmRldl9wcml2YXRlOwo+PiArCj4+ICsJaWYg KCFkZXYgfHwgIXBkZXYpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtKHMpXG4iKTsKPj4g KwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWRwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRl dik7Cj4+ICsJaWYgKCFkcCkgewo+PiArCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKPj4g KwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCSh2b2lkKWRwLT5wb3dlci0+cG93ZXJfY2xpZW50 X2RlaW5pdChkcC0+cG93ZXIpOwo+PiArCSh2b2lkKWRwLT5hdXgtPmRybV9hdXhfZGVyZWdpc3Rl cihkcC0+YXV4KTsKPj4gKwlwcml2LT5kcCA9IE5VTEw7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBkcF9kaXNwbGF5X2NvbXBfb3BzID0gewo+PiArCS5i aW5kID0gZHBfZGlzcGxheV9iaW5kLAo+PiArCS51bmJpbmQgPSBkcF9kaXNwbGF5X3VuYmluZCwK Pj4gK307Cj4+ICsKPj4gK3N0YXRpYyBib29sIGRwX2Rpc3BsYXlfaXNfZHNfYnJpZGdlKHN0cnVj dCBkcF9wYW5lbCAqcGFuZWwpCj4+ICt7Cj4+ICsJcmV0dXJuIChwYW5lbC0+ZHBjZFtEUF9ET1dO U1RSRUFNUE9SVF9QUkVTRU5UXSAmCj4+ICsJCURQX0RXTl9TVFJNX1BPUlRfUFJFU0VOVCk7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBib29sIGRwX2Rpc3BsYXlfaXNfc2lua19jb3VudF96ZXJvKHN0 cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgCj4+ICpkcCkKPj4gK3sKPj4gKwlyZXR1cm4gZHBfZGlz cGxheV9pc19kc19icmlkZ2UoZHAtPnBhbmVsKSAmJgo+PiArCQkoZHAtPmxpbmstPnNpbmtfY291 bnQuY291bnQgPT0gMCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2Rpc3BsYXlfc2Vu ZF9ocGRfZXZlbnQoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSkKPj4gK3sKPj4gKwlzdHJ1Y3Qg ZHBfZGlzcGxheV9wcml2YXRlICpkcDsKPj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yOwo+PiArCj4+ICsJaWYgKCFkcF9kaXNwbGF5KSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBp bnB1dFxuIik7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlkcCA9IGNvbnRhaW5lcl9v ZihkcF9kaXNwbGF5LCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlLCAKPj4gZHBfZGlzcGxheSk7 Cj4+ICsJaWYgKCFkcCkgewo+PiArCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKPj4gKwkJ cmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWNvbm5lY3RvciA9IGRwLT5kcF9kaXNwbGF5LmNvbm5l Y3RvcjsKPj4gKwlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoY29ubmVjdG9yLT5kZXYpOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW50IGRwX2Rpc3BsYXlfc2VuZF9ocGRfbm90aWZpY2F0aW9uKHN0 cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgCj4+ICpkcCwKPj4gKwkJCQkJICAgIGJvb2wgaHBkKQo+ IAo+IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYSBmZXcgZGlmZmVyZW50IHRocmVhZHMg d2l0aCBubyBsb2NraW5nLiAKPiBJdCBzZWVtcwo+IGxpa2UgdGhlcmUncyBnb29kIG9wcG9ydHVu aXR5IGZvciBpc19jb25uZWN0ZWQgYW5kIG5vdGlmaWNhdGlvbl9jb21wIHRvIAo+IGdldCBvdXQK PiBvZiBzeW5jLgo+IAo+IEFkZGl0aW9uYWxseSwgaXNfY29ubmVjdGVkIGlzIHNldCB0byB0cnVl IGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucyAKPiAoYW5kCj4gZW5hYmxlIGhhcyBiZWVuIGNv bXBsZXRlZCkuIFNvIGlzIHRoYXQgZ29pbmcgdG8gY2F1c2UgcHJvYmxlbXMgd2hlbiB3ZSAKPiBj YWxsCj4gZGV0ZWN0L2dldF9tb2RlcyB3aGVyZSBpc19jb25uZWN0ZWQgPT0gdHJ1ZSBhbmQgdGhl IGh3IGlzIG5vdCB1cD8KPiAKPiBQZXJoYXBzIEknbSBtaXNyZWFkaW5nIHRoaXMgZnVuY3Rpb24s IGJ1dCBpdCBzZWVtcyBsaWtlIHRoZSBwbGFuIGlzIHRvIAo+IGJsb2NrCj4gdW50aWwgdXNlcnNw YWNlIGhhcyBiZWVuIG5vdGlmaWVkIGFuZCBkb2VzIGEgZnVsbCBtb2Rlc2V0IChpZTogZW5hYmxl KT8gCj4gSWYgdGhhdAo+IGlzIHRoZSBjYXNlLCB3ZSB1c3VhbGx5IGRvbid0IHdhbnQgdG8gaGF2 ZSB0aGUgaGFyZHdhcmUgbGl0IHVwIHVudGlsIAo+IGl0J3MKPiBhY3R1YWxseSBnb2luZyB0byBi ZSB1c2VkLiBJbiB0aGVzZSBjYXNlcywgd2UnbGwgd3JhcCBnZXRfbW9kZXMgaW4KPiBlbmFibGUv ZGlzYWJsZSAod2l0aCBwcm9wZXIgbG9ja2luZyksIGFuZCB3YWl0IGZvciBtb2Rlc2V0IHRvIGxl YXZlIGl0IAo+IG9uLgo+IAo+PiArewo+PiArCWlmICgoaHBkICYmIGRwLT5kcF9kaXNwbGF5Lmlz X2Nvbm5lY3RlZCkgfHwKPj4gKwkJCSghaHBkICYmICFkcC0+ZHBfZGlzcGxheS5pc19jb25uZWN0 ZWQpKSB7Cj4+ICsJCXByX2luZm8oIkhQRCBhbHJlYWR5ICVzXG4iLCAoaHBkID8gIm9uIiA6ICJv ZmYiKSk7Cj4+ICsJCXJldHVybiAwOwo+PiArCX0KPj4gKwo+PiArCS8qIHJlc2V0IHZpZGVvIHBh dHRlcm4gZmxhZyBvbiBkaXNjb25uZWN0ICovCj4+ICsJaWYgKCFocGQpCj4+ICsJCWRwLT5wYW5l bC0+dmlkZW9fdGVzdCA9IGZhbHNlOwo+PiArCj4+ICsJZHAtPmRwX2Rpc3BsYXkuaXNfY29ubmVj dGVkID0gaHBkOwo+PiArCXJlaW5pdF9jb21wbGV0aW9uKCZkcC0+bm90aWZpY2F0aW9uX2NvbXAp Owo+PiArCWRwX2Rpc3BsYXlfc2VuZF9ocGRfZXZlbnQoJmRwLT5kcF9kaXNwbGF5KTsKPj4gKwo+ PiArCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkcC0+bm90aWZpY2F0aW9uX2Nv bXAsIEhaICogMikpIHsKPj4gKwkJcHJfd2FybigiJXMgdGltZW91dFxuIiwgaHBkID8gImNvbm5l Y3QiIDogImRpc2Nvbm5lY3QiKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfZGlzcGxheV9wcm9jZXNz X2hwZF9oaWdoKHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwKQo+PiArewo+PiArCWludCBy YyA9IDA7Cj4+ICsJc3RydWN0IGVkaWQgKmVkaWQ7Cj4+ICsKPj4gKwlkcC0+YXV4LT5pbml0KGRw LT5hdXgsIGRwLT5wYXJzZXItPmF1eF9jZmcpOwo+PiArCj4+ICsJaWYgKGRwLT5saW5rLT5wc21f ZW5hYmxlZCkKPj4gKwkJZ290byBub3RpZnk7Cj4+ICsKPj4gKwlyYyA9IGRwLT5wYW5lbC0+cmVh ZF9zaW5rX2NhcHMoZHAtPnBhbmVsLCBkcC0+ZHBfZGlzcGxheS5jb25uZWN0b3IpOwo+PiArCWlm IChyYykKPj4gKwkJZ290byBub3RpZnk7Cj4+ICsKPj4gKwlkcC0+bGluay0+cHJvY2Vzc19yZXF1 ZXN0KGRwLT5saW5rKTsKPj4gKwo+PiArCWlmIChkcF9kaXNwbGF5X2lzX3NpbmtfY291bnRfemVy byhkcCkpIHsKPj4gKwkJcHJfZGVidWcoIm5vIGRvd25zdHJlYW0gZGV2aWNlcyBjb25uZWN0ZWRc biIpOwo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+PiAr CWVkaWQgPSBkcC0+cGFuZWwtPmVkaWQ7Cj4+ICsKPj4gKwlkcC0+YXVkaW9fc3VwcG9ydGVkID0g ZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKGVkaWQpOwo+PiArCj4+ICsJZHAtPnBhbmVsLT5oYW5k bGVfc2lua19yZXF1ZXN0KGRwLT5wYW5lbCk7Cj4+ICsKPj4gKwlkcC0+ZHBfZGlzcGxheS5tYXhf cGNsa19raHogPSBkcC0+cGFyc2VyLT5tYXhfcGNsa19raHo7Cj4+ICtub3RpZnk6Cj4+ICsJZHBf ZGlzcGxheV9zZW5kX2hwZF9ub3RpZmljYXRpb24oZHAsIHRydWUpOwo+PiArCj4+ICtlbmQ6Cj4+ ICsJcmV0dXJuIHJjOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9kaXNwbGF5X2hvc3Rf aW5pdChzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcCkKPj4gK3sKPj4gKwlib29sIGZsaXAg PSBmYWxzZTsKPj4gKwo+PiArCWlmIChkcC0+Y29yZV9pbml0aWFsaXplZCkgewo+PiArCQlwcl9k ZWJ1ZygiRFAgY29yZSBhbHJlYWR5IGluaXRpYWxpemVkXG4iKTsKPj4gKwkJcmV0dXJuOwo+PiAr CX0KPj4gKwo+PiArCWlmIChkcC0+dXNicGQtPm9yaWVudGF0aW9uID09IE9SSUVOVEFUSU9OX0ND MikKPj4gKwkJZmxpcCA9IHRydWU7Cj4+ICsKPj4gKwlkcC0+cG93ZXItPmluaXQoZHAtPnBvd2Vy LCBmbGlwKTsKPj4gKwlkcC0+Y3RybC0+aW5pdChkcC0+Y3RybCwgZmxpcCk7Cj4+ICsJZW5hYmxl X2lycShkcC0+aXJxKTsKPj4gKwlkcC0+Y29yZV9pbml0aWFsaXplZCA9IHRydWU7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2Rpc3BsYXlfaG9zdF9kZWluaXQoc3RydWN0IGRwX2Rpc3Bs YXlfcHJpdmF0ZSAqZHApCj4+ICt7Cj4+ICsJaWYgKCFkcC0+Y29yZV9pbml0aWFsaXplZCkgewo+ PiArCQlwcl9kZWJ1ZygiRFAgY29yZSBhbHJlYWR5IG9mZlxuIik7Cj4+ICsJCXJldHVybjsKPj4g Kwl9Cj4+ICsKPj4gKwlkcC0+Y3RybC0+ZGVpbml0KGRwLT5jdHJsKTsKPj4gKwlkcC0+cG93ZXIt PmRlaW5pdChkcC0+cG93ZXIpOwo+PiArCWRpc2FibGVfaXJxKGRwLT5pcnEpOwo+PiArCWRwLT5j b3JlX2luaXRpYWxpemVkID0gZmFsc2U7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2Rp c3BsYXlfcHJvY2Vzc19ocGRfbG93KHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwKQo+PiAr ewo+PiArCS8qIGNhbmNlbCBhbnkgcGVuZGluZyByZXF1ZXN0ICovCj4+ICsJZHAtPmN0cmwtPmFi b3J0KGRwLT5jdHJsKTsKPj4gKwo+PiArCWRwX2Rpc3BsYXlfc2VuZF9ocGRfbm90aWZpY2F0aW9u KGRwLCBmYWxzZSk7Cj4+ICsKPj4gKwlkcC0+YXV4LT5kZWluaXQoZHAtPmF1eCk7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBpbnQgZHBfZGlzcGxheV91c2JwZF9jb25maWd1cmVfY2Ioc3RydWN0IGRl dmljZSAqZGV2KQo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJc3RydWN0IGRwX2Rpc3BsYXlf cHJpdmF0ZSAqZHA7Cj4+ICsKPj4gKwlpZiAoIWRldikgewo+PiArCQlwcl9lcnIoImludmFsaWQg ZGV2XG4iKTsKPj4gKwkJcmMgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGVuZDsKPj4gKwl9Cj4+ICsK Pj4gKwlkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+PiArCWlmICghZHApIHsKPj4gKwkJcHJf ZXJyKCJubyBkcml2ZXIgZGF0YSBmb3VuZFxuIik7Cj4+ICsJCXJjID0gLUVOT0RFVjsKPj4gKwkJ Z290byBlbmQ7Cj4+ICsJfQo+PiArCj4+ICsJZHBfZGlzcGxheV9ob3N0X2luaXQoZHApOwo+PiAr Cj4+ICsJaWYgKGRwLT51c2JwZC0+aHBkX2hpZ2gpCj4+ICsJCWRwX2Rpc3BsYXlfcHJvY2Vzc19o cGRfaGlnaChkcCk7Cj4+ICtlbmQ6Cj4+ICsJcmV0dXJuIHJjOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgdm9pZCBkcF9kaXNwbGF5X2NsZWFuKHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwKQo+ PiArewo+PiArCWRwLT5jdHJsLT5wdXNoX2lkbGUoZHAtPmN0cmwpOwo+PiArCWRwLT5jdHJsLT5v ZmYoZHAtPmN0cmwpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGRwX2Rpc3BsYXlfdXNicGRf ZGlzY29ubmVjdF9jYihzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsK Pj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcDsKPj4gKwo+PiArCWlmICghZGV2KSB7 Cj4+ICsJCXByX2VycigiaW52YWxpZCBkZXZcbiIpOwo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJ CWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+PiArCWRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4+ ICsJaWYgKCFkcCkgewo+PiArCQlwcl9lcnIoIm5vIGRyaXZlciBkYXRhIGZvdW5kXG4iKTsKPj4g KwkJcmMgPSAtRU5PREVWOwo+PiArCQlnb3RvIGVuZDsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBjYW5j ZWwgYW55IHBlbmRpbmcgcmVxdWVzdCAqLwo+PiArCWRwLT5jdHJsLT5hYm9ydChkcC0+Y3RybCk7 Cj4+ICsKPj4gKwlyYyA9IGRwX2Rpc3BsYXlfc2VuZF9ocGRfbm90aWZpY2F0aW9uKGRwLCBmYWxz ZSk7Cj4+ICsKPj4gKwkvKiBpZiBjYWJsZSBpcyBkaXNjb25uZWN0ZWQsIHJlc2V0IHBzbV9lbmFi bGVkIGZsYWcgKi8KPj4gKwlpZiAoIWRwLT51c2JwZC0+YWx0X21vZGVfY2ZnX2RvbmUpCj4+ICsJ CWRwLT5saW5rLT5wc21fZW5hYmxlZCA9IGZhbHNlOwo+PiArCj4+ICsJaWYgKChyYyA8IDApICYm IGRwLT5wb3dlcl9vbikKPj4gKwkJZHBfZGlzcGxheV9jbGVhbihkcCk7Cj4+ICsKPj4gKwlkcF9k aXNwbGF5X2hvc3RfZGVpbml0KGRwKTsKPj4gK2VuZDoKPj4gKwlyZXR1cm4gcmM7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2Rpc3BsYXlfaGFuZGxlX3ZpZGVvX3JlcXVlc3Qoc3RydWN0 IGRwX2Rpc3BsYXlfcHJpdmF0ZSAKPj4gKmRwKQo+PiArewo+PiArCWlmIChkcC0+bGluay0+c2lu a19yZXF1ZXN0ICYgRFBfVEVTVF9MSU5LX1ZJREVPX1BBVFRFUk4pIHsKPj4gKwkJLyogZm9yY2Ug ZGlzY29ubmVjdCBmb2xsb3dlZCBieSBjb25uZWN0ICovCj4+ICsJCWRwLT51c2JwZC0+Y29ubmVj dChkcC0+dXNicGQsIGZhbHNlKTsKPj4gKwkJZHAtPnBhbmVsLT52aWRlb190ZXN0ID0gdHJ1ZTsK Pj4gKwkJZHAtPnVzYnBkLT5jb25uZWN0KGRwLT51c2JwZCwgdHJ1ZSk7Cj4+ICsJCWRwLT5saW5r LT5zZW5kX3Rlc3RfcmVzcG9uc2UoZHAtPmxpbmspOwo+PiArCX0KPj4gK30KPj4gKwo+PiArc3Rh dGljIGludCBkcF9kaXNwbGF5X2hhbmRsZV9ocGRfaXJxKHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZh dGUgKmRwKQo+PiArewo+PiArCWlmIChkcC0+bGluay0+c2lua19yZXF1ZXN0ICYgRFNfUE9SVF9T VEFUVVNfQ0hBTkdFRCkgewo+PiArCQlkcF9kaXNwbGF5X3NlbmRfaHBkX25vdGlmaWNhdGlvbihk cCwgZmFsc2UpOwo+PiArCj4+ICsJCWlmIChkcF9kaXNwbGF5X2lzX3NpbmtfY291bnRfemVybyhk cCkpIHsKPj4gKwkJCXByX2RlYnVnKCJzaW5rIGNvdW50IGlzIHplcm8sIG5vdGhpbmcgdG8gZG9c biIpOwo+PiArCQkJcmV0dXJuIDA7Cj4+ICsJCX0KPj4gKwo+PiArCQlyZXR1cm4gZHBfZGlzcGxh eV9wcm9jZXNzX2hwZF9oaWdoKGRwKTsKPj4gKwl9Cj4+ICsKPj4gKwlkcC0+Y3RybC0+aGFuZGxl X3NpbmtfcmVxdWVzdChkcC0+Y3RybCk7Cj4+ICsKPj4gKwlkcF9kaXNwbGF5X2hhbmRsZV92aWRl b19yZXF1ZXN0KGRwKTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IGRwX2Rpc3BsYXlfdXNicGRfYXR0ZW50aW9uX2NiKHN0cnVjdCBkZXZpY2UgKmRldikKPj4g K3sKPj4gKwlpbnQgcmMgPSAwOwo+PiArCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwOwo+ PiArCj4+ICsJaWYgKCFkZXYpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGRldlxuIik7Cj4+ICsJ CXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCWRwID0gZGV2X2dldF9kcnZkYXRhKGRl dik7Cj4+ICsJaWYgKCFkcCkgewo+PiArCQlwcl9lcnIoIm5vIGRyaXZlciBkYXRhIGZvdW5kXG4i KTsKPj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4+ICsJfQo+PiArCj4+ICsJaWYgKGRwLT51c2JwZC0+ aHBkX2lycSkgewo+PiArCQlkcC0+aHBkX2lycV9vbiA9IHRydWU7Cj4+ICsKPj4gKwkJcmMgPSBk cC0+bGluay0+cHJvY2Vzc19yZXF1ZXN0KGRwLT5saW5rKTsKPj4gKwkJLyogY2hlY2sgZm9yIGFu eSB0ZXN0IHJlcXVlc3QgaXNzdWVkIGJ5IHNpbmsgKi8KPj4gKwkJaWYgKCFyYykKPj4gKwkJCWRw X2Rpc3BsYXlfaGFuZGxlX2hwZF9pcnEoZHApOwo+PiArCj4+ICsJCWRwLT5ocGRfaXJxX29uID0g ZmFsc2U7Cj4+ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+PiArCWlmICghZHAtPnVzYnBkLT5o cGRfaGlnaCkgewo+PiArCQlkcF9kaXNwbGF5X3Byb2Nlc3NfaHBkX2xvdyhkcCk7Cj4+ICsJCWdv dG8gZW5kOwo+PiArCX0KPj4gKwo+PiArCWlmIChkcC0+dXNicGQtPmFsdF9tb2RlX2NmZ19kb25l KQo+PiArCQlkcF9kaXNwbGF5X3Byb2Nlc3NfaHBkX2hpZ2goZHApOwo+PiArZW5kOgo+PiArCXJl dHVybiByYzsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfZGlzcGxheV9kZWluaXRfc3Vi X21vZHVsZXMoc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAKPj4gKmRwKQo+PiArewo+PiArCWRw X2N0cmxfcHV0KGRwLT5jdHJsKTsKPj4gKwlkcF9saW5rX3B1dChkcC0+bGluayk7Cj4+ICsJZHBf cGFuZWxfcHV0KGRwLT5wYW5lbCk7Cj4+ICsJZHBfYXV4X3B1dChkcC0+YXV4KTsKPj4gKwlkcF9w b3dlcl9wdXQoZHAtPnBvd2VyKTsKPj4gKwlkcF9jYXRhbG9nX3B1dChkcC0+Y2F0YWxvZyk7Cj4+ ICsJZHBfcGFyc2VyX3B1dChkcC0+cGFyc2VyKTsKPj4gKwlkcF9kZWJ1Z19wdXQoZHAtPmRlYnVn KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9pbml0X3N1Yl9tb2R1bGVzKHN0cnVjdCBk cF9kaXNwbGF5X3ByaXZhdGUgKmRwKQo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJc3RydWN0 IGRldmljZSAqZGV2ID0gJmRwLT5wZGV2LT5kZXY7Cj4+ICsJc3RydWN0IGRwX3VzYnBkX2NiICpj YiA9ICZkcC0+dXNicGRfY2I7Cj4+ICsJc3RydWN0IGRwX2N0cmxfaW4gY3RybF9pbiA9IHsKPj4g KwkJLmRldiA9IGRldiwKPj4gKwl9Owo+PiArCXN0cnVjdCBkcF9wYW5lbF9pbiBwYW5lbF9pbiA9 IHsKPj4gKwkJLmRldiA9IGRldiwKPj4gKwl9Owo+PiArCj4+ICsJLyogQ2FsbGJhY2sgQVBJcyB1 c2VkIGZvciBjYWJsZSBzdGF0dXMgY2hhbmdlIGV2ZW50ICovCj4+ICsJY2ItPmNvbmZpZ3VyZSAg PSBkcF9kaXNwbGF5X3VzYnBkX2NvbmZpZ3VyZV9jYjsKPj4gKwljYi0+ZGlzY29ubmVjdCA9IGRw X2Rpc3BsYXlfdXNicGRfZGlzY29ubmVjdF9jYjsKPj4gKwljYi0+YXR0ZW50aW9uICA9IGRwX2Rp c3BsYXlfdXNicGRfYXR0ZW50aW9uX2NiOwo+PiArCj4+ICsJZHAtPnBhcnNlciA9IGRwX3BhcnNl cl9nZXQoZHAtPnBkZXYpOwo+PiArCWlmIChJU19FUlIoZHAtPnBhcnNlcikpIHsKPj4gKwkJcmMg PSBQVFJfRVJSKGRwLT5wYXJzZXIpOwo+PiArCQlwcl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXpl IHBhcnNlciwgcmMgPSAlZFxuIiwgcmMpOwo+PiArCQlkcC0+cGFyc2VyID0gTlVMTDsKPj4gKwkJ Z290byBlcnJvcl9wYXJzZXI7Cj4+ICsJfQo+PiArCj4+ICsJZHAtPmNhdGFsb2cgPSBkcF9jYXRh bG9nX2dldChkZXYsICZkcC0+cGFyc2VyLT5pbyk7Cj4+ICsJaWYgKElTX0VSUihkcC0+Y2F0YWxv ZykpIHsKPj4gKwkJcmMgPSBQVFJfRVJSKGRwLT5jYXRhbG9nKTsKPj4gKwkJcHJfZXJyKCJmYWls ZWQgdG8gaW5pdGlhbGl6ZSBjYXRhbG9nLCByYyA9ICVkXG4iLCByYyk7Cj4+ICsJCWRwLT5jYXRh bG9nID0gTlVMTDsKPj4gKwkJZ290byBlcnJvcl9jYXRhbG9nOwo+PiArCX0KPj4gKwo+PiArCWRw LT5wb3dlciA9IGRwX3Bvd2VyX2dldChkcC0+cGFyc2VyKTsKPj4gKwlpZiAoSVNfRVJSKGRwLT5w b3dlcikpIHsKPj4gKwkJcmMgPSBQVFJfRVJSKGRwLT5wb3dlcik7Cj4+ICsJCXByX2VycigiZmFp bGVkIHRvIGluaXRpYWxpemUgcG93ZXIsIHJjID0gJWRcbiIsIHJjKTsKPj4gKwkJZHAtPnBvd2Vy ID0gTlVMTDsKPj4gKwkJZ290byBlcnJvcl9wb3dlcjsKPj4gKwl9Cj4+ICsKPj4gKwlkcC0+YXV4 ID0gZHBfYXV4X2dldChkZXYsICZkcC0+Y2F0YWxvZy0+YXV4LCBkcC0+cGFyc2VyLT5hdXhfY2Zn KTsKPj4gKwlpZiAoSVNfRVJSKGRwLT5hdXgpKSB7Cj4+ICsJCXJjID0gUFRSX0VSUihkcC0+YXV4 KTsKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBhdXgsIHJjID0gJWRcbiIsIHJj KTsKPj4gKwkJZHAtPmF1eCA9IE5VTEw7Cj4+ICsJCWdvdG8gZXJyb3JfYXV4Owo+PiArCX0KPj4g Kwo+PiArCWRwLT5saW5rID0gZHBfbGlua19nZXQoZGV2LCBkcC0+YXV4KTsKPj4gKwlpZiAoSVNf RVJSKGRwLT5saW5rKSkgewo+PiArCQlyYyA9IFBUUl9FUlIoZHAtPmxpbmspOwo+PiArCQlwcl9l cnIoImZhaWxlZCB0byBpbml0aWFsaXplIGxpbmssIHJjID0gJWRcbiIsIHJjKTsKPj4gKwkJZHAt PmxpbmsgPSBOVUxMOwo+PiArCQlnb3RvIGVycm9yX2xpbms7Cj4+ICsJfQo+PiArCj4+ICsJcGFu ZWxfaW4uYXV4ID0gZHAtPmF1eDsKPj4gKwlwYW5lbF9pbi5jYXRhbG9nID0gJmRwLT5jYXRhbG9n LT5wYW5lbDsKPj4gKwlwYW5lbF9pbi5saW5rID0gZHAtPmxpbms7Cj4+ICsKPj4gKwlkcC0+cGFu ZWwgPSBkcF9wYW5lbF9nZXQoJnBhbmVsX2luKTsKPj4gKwlpZiAoSVNfRVJSKGRwLT5wYW5lbCkp IHsKPj4gKwkJcmMgPSBQVFJfRVJSKGRwLT5wYW5lbCk7Cj4+ICsJCXByX2VycigiZmFpbGVkIHRv IGluaXRpYWxpemUgcGFuZWwsIHJjID0gJWRcbiIsIHJjKTsKPj4gKwkJZHAtPnBhbmVsID0gTlVM TDsKPj4gKwkJZ290byBlcnJvcl9wYW5lbDsKPj4gKwl9Cj4+ICsKPj4gKwljdHJsX2luLmxpbmsg PSBkcC0+bGluazsKPj4gKwljdHJsX2luLnBhbmVsID0gZHAtPnBhbmVsOwo+PiArCWN0cmxfaW4u YXV4ID0gZHAtPmF1eDsKPj4gKwljdHJsX2luLnBvd2VyID0gZHAtPnBvd2VyOwo+PiArCWN0cmxf aW4uY2F0YWxvZyA9ICZkcC0+Y2F0YWxvZy0+Y3RybDsKPj4gKwljdHJsX2luLnBhcnNlciA9IGRw LT5wYXJzZXI7Cj4+ICsKPj4gKwlkcC0+Y3RybCA9IGRwX2N0cmxfZ2V0KCZjdHJsX2luKTsKPj4g KwlpZiAoSVNfRVJSKGRwLT5jdHJsKSkgewo+PiArCQlyYyA9IFBUUl9FUlIoZHAtPmN0cmwpOwo+ PiArCQlwcl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXplIGN0cmwsIHJjID0gJWRcbiIsIHJjKTsK Pj4gKwkJZHAtPmN0cmwgPSBOVUxMOwo+PiArCQlnb3RvIGVycm9yX2N0cmw7Cj4+ICsJfQo+PiAr Cj4+ICsJZHAtPmRlYnVnID0gZHBfZGVidWdfZ2V0KGRldiwgZHAtPnBhbmVsLCBkcC0+dXNicGQs Cj4+ICsJCQkJZHAtPmxpbmssICZkcC0+ZHBfZGlzcGxheS5jb25uZWN0b3IpOwo+PiArCWlmIChJ U19FUlIoZHAtPmRlYnVnKSkgewo+PiArCQlyYyA9IFBUUl9FUlIoZHAtPmRlYnVnKTsKPj4gKwkJ cHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBkZWJ1ZywgcmMgPSAlZFxuIiwgcmMpOwo+PiAr CQlkcC0+ZGVidWcgPSBOVUxMOwo+PiArCQlnb3RvIGVycm9yX2RlYnVnOwo+PiArCX0KPj4gKwo+ PiArCXJldHVybiByYzsKPj4gK2Vycm9yX2RlYnVnOgo+PiArCWRwX2N0cmxfcHV0KGRwLT5jdHJs KTsKPj4gK2Vycm9yX2N0cmw6Cj4+ICsJZHBfcGFuZWxfcHV0KGRwLT5wYW5lbCk7Cj4+ICtlcnJv cl9wYW5lbDoKPj4gKwlkcF9saW5rX3B1dChkcC0+bGluayk7Cj4+ICtlcnJvcl9saW5rOgo+PiAr CWRwX2F1eF9wdXQoZHAtPmF1eCk7Cj4+ICtlcnJvcl9hdXg6Cj4+ICsJZHBfcG93ZXJfcHV0KGRw LT5wb3dlcik7Cj4+ICtlcnJvcl9wb3dlcjoKPj4gKwlkcF9jYXRhbG9nX3B1dChkcC0+Y2F0YWxv Zyk7Cj4+ICtlcnJvcl9jYXRhbG9nOgo+PiArCWRwX3BhcnNlcl9wdXQoZHAtPnBhcnNlcik7Cj4+ ICtlcnJvcl9wYXJzZXI6Cj4+ICsJcmV0dXJuIHJjOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IGRwX2Rpc3BsYXlfc2V0X21vZGUoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSwKPj4gKwkJCSAg ICAgICBzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlICptb2RlKQo+PiArewo+PiArCWludCByYyA9IDA7 Cj4+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7Cj4+ICsKPj4gKwlpZiAoIWRwX2Rp c3BsYXkpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmMgPSAtRUlO VkFMOwo+PiArCQlnb3RvIGVycm9yOwo+PiArCX0KPj4gKwlkcCA9IGNvbnRhaW5lcl9vZihkcF9k aXNwbGF5LCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlLCAKPj4gZHBfZGlzcGxheSk7Cj4+ICsK Pj4gKwlkcC0+cGFuZWwtPnBpbmZvID0gbW9kZS0+dGltaW5nOwo+PiArCWRwLT5wYW5lbC0+aW5p dF9pbmZvKGRwLT5wYW5lbCk7Cj4+ICtlcnJvcjoKPj4gKwlyZXR1cm4gcmM7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyBpbnQgZHBfZGlzcGxheV9wcmVwYXJlKHN0cnVjdCBtc21fZHAgKmRwKQo+PiAr ewo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGRwX2Rpc3BsYXlfZW5h YmxlKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4g KwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcDsKPj4gKwo+PiArCWlmICghZHBfZGlzcGxh eSkgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQlyYyA9IC1FSU5WQUw7 Cj4+ICsJCWdvdG8gZXJyb3I7Cj4+ICsJfQo+PiArCj4+ICsJZHAgPSBjb250YWluZXJfb2YoZHBf ZGlzcGxheSwgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSwgCj4+IGRwX2Rpc3BsYXkpOwo+PiAr Cj4+ICsJaWYgKGRwLT5wb3dlcl9vbikgewo+PiArCQlwcl9kZWJ1ZygiTGluayBhbHJlYWR5IHNl dHVwLCByZXR1cm5cbiIpOwo+PiArCQlyZXR1cm4gMDsKPj4gKwl9Cj4+ICsKPj4gKwlkcC0+YXV4 LT5pbml0KGRwLT5hdXgsIGRwLT5wYXJzZXItPmF1eF9jZmcpOwo+PiArCj4+ICsJcmMgPSBkcC0+ Y3RybC0+b24oZHAtPmN0cmwpOwo+PiArCWlmICghcmMpCj4+ICsJCWRwLT5wb3dlcl9vbiA9IHRy dWU7Cj4+ICtlcnJvcjoKPj4gKwlyZXR1cm4gcmM7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQg ZHBfZGlzcGxheV9wb3N0X2VuYWJsZShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KQo+PiArewo+ PiArCWludCByYyA9IDA7Cj4+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7Cj4+ICsK Pj4gKwlpZiAoIWRwX2Rpc3BsYXkpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsK Pj4gKwkJcmMgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGVuZDsKPj4gKwl9Cj4+ICsKPj4gKwlkcCA9 IGNvbnRhaW5lcl9vZihkcF9kaXNwbGF5LCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlLCAKPj4g ZHBfZGlzcGxheSk7Cj4+ICsKPj4gKwljb21wbGV0ZV9hbGwoJmRwLT5ub3RpZmljYXRpb25fY29t cCk7Cj4+ICsKPj4gK2VuZDoKPj4gKwlyZXR1cm4gcmM7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bnQgZHBfZGlzcGxheV9wcmVfZGlzYWJsZShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KQo+PiAr ewo+PiArCWludCByYyA9IDA7Cj4+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7Cj4+ ICsKPj4gKwlpZiAoIWRwX2Rpc3BsYXkpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4i KTsKPj4gKwkJcmMgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGVycm9yOwo+PiArCX0KPj4gKwo+PiAr CWRwID0gY29udGFpbmVyX29mKGRwX2Rpc3BsYXksIHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUs IAo+PiBkcF9kaXNwbGF5KTsKPj4gKwo+PiArCWlmIChkcC0+dXNicGQtPmFsdF9tb2RlX2NmZ19k b25lICYmIChkcC0+dXNicGQtPmhwZF9oaWdoIHx8Cj4+ICsJCWRwLT51c2JwZC0+Zm9yY2VkX2Rp c2Nvbm5lY3QpKQo+PiArCQlkcC0+bGluay0+cHNtX2NvbmZpZyhkcC0+bGluaywgJmRwLT5wYW5l bC0+bGlua19pbmZvLCB0cnVlKTsKPj4gKwo+PiArCWRwLT5jdHJsLT5wdXNoX2lkbGUoZHAtPmN0 cmwpOwo+PiArZXJyb3I6Cj4+ICsJcmV0dXJuIHJjOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IGRwX2Rpc3BsYXlfZGlzYWJsZShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KQo+PiArewo+PiAr CWludCByYyA9IDA7Cj4+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7Cj4+ICsKPj4g KwlpZiAoIWRwX2Rpc3BsYXkpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4g KwkJcmMgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGVycm9yOwo+PiArCX0KPj4gKwo+PiArCWRwID0g Y29udGFpbmVyX29mKGRwX2Rpc3BsYXksIHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUsIAo+PiBk cF9kaXNwbGF5KTsKPj4gKwo+PiArCWlmICghZHAtPnBvd2VyX29uIHx8ICFkcC0+Y29yZV9pbml0 aWFsaXplZCkKPj4gKwkJZ290byBlcnJvcjsKPj4gKwo+PiArCWRwLT5jdHJsLT5vZmYoZHAtPmN0 cmwpOwo+PiArCj4+ICsJZHAtPnBvd2VyX29uID0gZmFsc2U7Cj4+ICsKPj4gKwljb21wbGV0ZV9h bGwoJmRwLT5ub3RpZmljYXRpb25fY29tcCk7Cj4+ICtlcnJvcjoKPj4gKwlyZXR1cm4gcmM7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfcmVxdWVzdF9pcnEoc3RydWN0IG1zbV9kcCAqZHBf ZGlzcGxheSkKPj4gK3sKPj4gKwlpbnQgcmMgPSAwOwo+PiArCXN0cnVjdCBkcF9kaXNwbGF5X3By aXZhdGUgKmRwOwo+PiArCj4+ICsJaWYgKCFkcF9kaXNwbGF5KSB7Cj4+ICsJCXByX2VycigiaW52 YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCWRw ID0gY29udGFpbmVyX29mKGRwX2Rpc3BsYXksIHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUsIAo+ PiBkcF9kaXNwbGF5KTsKPj4gKwo+PiArCWRwLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChk cC0+cGRldi0+ZGV2Lm9mX25vZGUsIDApOwo+PiArCWlmIChkcC0+aXJxIDwgMCkgewo+PiArCQly YyA9IGRwLT5pcnE7Cj4+ICsJCXByX2VycigiZmFpbGVkIHRvIGdldCBpcnE6ICVkXG4iLCByYyk7 Cj4+ICsJCXJldHVybiByYzsKPj4gKwl9Cj4+ICsKPj4gKwlyYyA9IGRldm1fcmVxdWVzdF9pcnEo JmRwLT5wZGV2LT5kZXYsIGRwLT5pcnEsIGRwX2Rpc3BsYXlfaXJxLAo+PiArCQlJUlFGX1RSSUdH RVJfSElHSCwgImRwX2Rpc3BsYXlfaXNyIiwgZHApOwo+PiArCWlmIChyYyA8IDApIHsKPj4gKwkJ cHJfZXJyKCJmYWlsZWQgdG8gcmVxdWVzdCBJUlEldTogJWRcbiIsCj4+ICsJCQkJZHAtPmlycSwg cmMpOwo+PiArCQlyZXR1cm4gcmM7Cj4+ICsJfQo+PiArCWRpc2FibGVfaXJxKGRwLT5pcnEpOwo+ PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgZHBfZGVidWcg KmRwX2dldF9kZWJ1ZyhzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KQo+PiArewo+PiArCXN0cnVj dCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwOwo+PiArCj4+ICsJaWYgKCFkcF9kaXNwbGF5KSB7Cj4+ ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVybiBFUlJfUFRSKC1FSU5W QUwpOwo+PiArCX0KPj4gKwo+PiArCWRwID0gY29udGFpbmVyX29mKGRwX2Rpc3BsYXksIHN0cnVj dCBkcF9kaXNwbGF5X3ByaXZhdGUsIAo+PiBkcF9kaXNwbGF5KTsKPj4gKwo+PiArCXJldHVybiBk cC0+ZGVidWc7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfZGlzcGxheV91bnByZXBhcmUo c3RydWN0IG1zbV9kcCAqZHApCj4+ICt7Cj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBpbnQgZHBfZGlzcGxheV92YWxpZGF0ZV9tb2RlKHN0cnVjdCBtc21fZHAgKmRwLCB1MzIg Cj4+IG1vZGVfcGNsa19raHopCj4+ICt7Cj4+ICsJY29uc3QgdTMyIG51bV9jb21wb25lbnRzID0g MywgZGVmYXVsdF9icHAgPSAyNDsKPj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcF9k aXNwbGF5Owo+PiArCXN0cnVjdCBkcm1fZHBfbGluayAqbGlua19pbmZvOwo+PiArCXUzMiBtb2Rl X3JhdGVfa2h6ID0gMCwgc3VwcG9ydGVkX3JhdGVfa2h6ID0gMCwgbW9kZV9icHAgPSAwOwo+PiAr Cj4+ICsJaWYgKCFkcCB8fCAhbW9kZV9wY2xrX2toeiB8fCAhZHAtPmNvbm5lY3Rvcikgewo+PiAr CQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJ fQo+PiArCj4+ICsJZHBfZGlzcGxheSA9IGNvbnRhaW5lcl9vZihkcCwgc3RydWN0IGRwX2Rpc3Bs YXlfcHJpdmF0ZSwgCj4+IGRwX2Rpc3BsYXkpOwo+PiArCWxpbmtfaW5mbyA9ICZkcF9kaXNwbGF5 LT5wYW5lbC0+bGlua19pbmZvOwo+PiArCj4+ICsJbW9kZV9icHAgPSBkcC0+Y29ubmVjdG9yLT5k aXNwbGF5X2luZm8uYnBjICogbnVtX2NvbXBvbmVudHM7Cj4+ICsJaWYgKCFtb2RlX2JwcCkKPj4g KwkJbW9kZV9icHAgPSBkZWZhdWx0X2JwcDsKPj4gKwo+PiArCW1vZGVfYnBwID0gZHBfZGlzcGxh eS0+cGFuZWwtPmdldF9tb2RlX2JwcChkcF9kaXNwbGF5LT5wYW5lbCwKPj4gKwkJCW1vZGVfYnBw LCBtb2RlX3BjbGtfa2h6KTsKPj4gKwo+PiArCW1vZGVfcmF0ZV9raHogPSBtb2RlX3BjbGtfa2h6 ICogbW9kZV9icHA7Cj4+ICsJc3VwcG9ydGVkX3JhdGVfa2h6ID0gbGlua19pbmZvLT5udW1fbGFu ZXMgKiBsaW5rX2luZm8tPnJhdGUgKiA4Owo+PiArCj4+ICsJaWYgKG1vZGVfcmF0ZV9raHogPiBz dXBwb3J0ZWRfcmF0ZV9raHopCj4+ICsJCXJldHVybiBNT0RFX0JBRDsKPj4gKwo+PiArCXJldHVy biBNT0RFX09LOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGRwX2Rpc3BsYXlfZ2V0X21vZGVz KHN0cnVjdCBtc21fZHAgKmRwLAo+PiArCQkJCXN0cnVjdCBkcF9kaXNwbGF5X21vZGUgKmRwX21v ZGUpCj4+ICt7Cj4+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHBfZGlzcGxheTsKPj4g KwlpbnQgcmV0ID0gMDsKPj4gKwo+PiArCWlmICghZHApIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlk IHBhcmFtc1xuIik7Cj4+ICsJCXJldHVybiAwOwo+PiArCX0KPj4gKwo+PiArCWRwX2Rpc3BsYXkg PSBjb250YWluZXJfb2YoZHAsIHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUsIAo+PiBkcF9kaXNw bGF5KTsKPj4gKwo+PiArCXJldCA9IGRwX2Rpc3BsYXktPnBhbmVsLT5nZXRfbW9kZXMoZHBfZGlz cGxheS0+cGFuZWwsCj4+ICsJCWRwLT5jb25uZWN0b3IsIGRwX21vZGUpOwo+PiArCWlmIChkcF9t b2RlLT50aW1pbmcucGl4ZWxfY2xrX2toeikKPj4gKwkJZHAtPm1heF9wY2xrX2toeiA9IGRwX21v ZGUtPnRpbWluZy5waXhlbF9jbGtfa2h6Owo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBib29sIGRwX2Rpc3BsYXlfY2hlY2tfdmlkZW9fdGVzdChzdHJ1Y3QgbXNtX2RwICpk cCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcF9kaXNwbGF5Owo+PiAr Cj4+ICsJaWYgKCFkcCkgewo+PiArCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKPj4gKwkJ cmV0dXJuIGZhbHNlOwo+PiArCX0KPj4gKwo+PiArCWRwX2Rpc3BsYXkgPSBjb250YWluZXJfb2Yo ZHAsIHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUsIAo+PiBkcF9kaXNwbGF5KTsKPj4gKwo+PiAr CWlmIChkcF9kaXNwbGF5LT5wYW5lbC0+dmlkZW9fdGVzdCkKPj4gKwkJcmV0dXJuIHRydWU7Cj4+ ICsKPj4gKwlyZXR1cm4gZmFsc2U7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfZGlzcGxh eV9nZXRfdGVzdF9icHAoc3RydWN0IG1zbV9kcCAqZHApCj4+ICt7Cj4+ICsJc3RydWN0IGRwX2Rp c3BsYXlfcHJpdmF0ZSAqZHBfZGlzcGxheTsKPj4gKwo+PiArCWlmICghZHApIHsKPj4gKwkJcHJf ZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Cj4+ICsJCXJldHVybiAwOwo+PiArCX0KPj4gKwo+PiAr CWRwX2Rpc3BsYXkgPSBjb250YWluZXJfb2YoZHAsIHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUs IAo+PiBkcF9kaXNwbGF5KTsKPj4gKwo+PiArCXJldHVybiBkcF9saW5rX2JpdF9kZXB0aF90b19i cHAoCj4+ICsJCWRwX2Rpc3BsYXktPmxpbmstPnRlc3RfdmlkZW8udGVzdF9iaXRfZGVwdGgpOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGRwX2Rpc3BsYXlfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKPj4gK3sKPj4gKwlpbnQgcmMgPSAwOwo+PiArCXN0cnVjdCBkcF9kaXNw bGF5X3ByaXZhdGUgKmRwOwo+PiArCj4+ICsJaWYgKCFwZGV2IHx8ICFwZGV2LT5kZXYub2Zfbm9k ZSkgewo+PiArCQlwcl9lcnIoInBkZXYgbm90IGZvdW5kXG4iKTsKPj4gKwkJcmV0dXJuIC1FTk9E RVY7Cj4+ICsJfQo+PiArCj4+ICsJZHAgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9m KCpkcCksIEdGUF9LRVJORUwpOwo+PiArCWlmICghZHApCj4+ICsJCXJldHVybiAtRU5PTUVNOwo+ PiArCj4+ICsJaW5pdF9jb21wbGV0aW9uKCZkcC0+bm90aWZpY2F0aW9uX2NvbXApOwo+PiArCj4+ ICsJZHAtPnBkZXYgPSBwZGV2Owo+PiArCWRwLT5uYW1lID0gImRybV9kcCI7Cj4+ICsKPj4gKwly YyA9IGRwX2luaXRfc3ViX21vZHVsZXMoZHApOwo+PiArCWlmIChyYykgewo+PiArCQlwcl9lcnIo ImluaXQgc3ViIG1vZHVsZSBmYWlsZWRcbiIpOwo+PiArCQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYs IGRwKTsKPj4gKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7Cj4+ICsJfQo+PiArCj4+ICsJcGxhdGZv cm1fc2V0X2RydmRhdGEocGRldiwgZHApOwo+PiArCj4+ICsJZ19kcF9kaXNwbGF5ID0gJmRwLT5k cF9kaXNwbGF5Owo+PiArCj4+ICsJZ19kcF9kaXNwbGF5LT5lbmFibGUgICAgICAgID0gZHBfZGlz cGxheV9lbmFibGU7Cj4+ICsJZ19kcF9kaXNwbGF5LT5wb3N0X2VuYWJsZSAgID0gZHBfZGlzcGxh eV9wb3N0X2VuYWJsZTsKPj4gKwlnX2RwX2Rpc3BsYXktPnByZV9kaXNhYmxlICAgPSBkcF9kaXNw bGF5X3ByZV9kaXNhYmxlOwo+PiArCWdfZHBfZGlzcGxheS0+ZGlzYWJsZSAgICAgICA9IGRwX2Rp c3BsYXlfZGlzYWJsZTsKPj4gKwlnX2RwX2Rpc3BsYXktPnNldF9tb2RlICAgICAgPSBkcF9kaXNw bGF5X3NldF9tb2RlOwo+PiArCWdfZHBfZGlzcGxheS0+dmFsaWRhdGVfbW9kZSA9IGRwX2Rpc3Bs YXlfdmFsaWRhdGVfbW9kZTsKPj4gKwlnX2RwX2Rpc3BsYXktPmdldF9tb2RlcyAgICAgPSBkcF9k aXNwbGF5X2dldF9tb2RlczsKPj4gKwlnX2RwX2Rpc3BsYXktPnByZXBhcmUgICAgICAgPSBkcF9k aXNwbGF5X3ByZXBhcmU7Cj4+ICsJZ19kcF9kaXNwbGF5LT51bnByZXBhcmUgICAgID0gZHBfZGlz cGxheV91bnByZXBhcmU7Cj4+ICsJZ19kcF9kaXNwbGF5LT5yZXF1ZXN0X2lycSAgID0gZHBfcmVx dWVzdF9pcnE7Cj4+ICsJZ19kcF9kaXNwbGF5LT5nZXRfZGVidWcgICAgID0gZHBfZ2V0X2RlYnVn Owo+PiArCWdfZHBfZGlzcGxheS0+c2VuZF9ocGRfZXZlbnQgICAgPSBkcF9kaXNwbGF5X3NlbmRf aHBkX2V2ZW50Owo+PiArCWdfZHBfZGlzcGxheS0+aXNfdmlkZW9fdGVzdCA9IGRwX2Rpc3BsYXlf Y2hlY2tfdmlkZW9fdGVzdDsKPj4gKwlnX2RwX2Rpc3BsYXktPmdldF90ZXN0X2JwcCA9IGRwX2Rp c3BsYXlfZ2V0X3Rlc3RfYnBwOwo+PiArCj4+ICsJcmMgPSBjb21wb25lbnRfYWRkKCZwZGV2LT5k ZXYsICZkcF9kaXNwbGF5X2NvbXBfb3BzKTsKPj4gKwlpZiAocmMpIHsKPj4gKwkJcHJfZXJyKCJj b21wb25lbnQgYWRkIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKPj4gKwkJZHBfZGlzcGxheV9kZWlu aXRfc3ViX21vZHVsZXMoZHApOwo+PiArCQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIGRwKTsKPj4g Kwl9Cj4+ICsKPj4gKwlyZXR1cm4gcmM7Cj4+ICt9Cj4+ICsKPj4gK2ludCBkcF9kaXNwbGF5X2dl dF9kaXNwbGF5cyh2b2lkICoqZGlzcGxheXMsIGludCBjb3VudCkKPj4gK3sKPj4gKwlpZiAoIWRp c3BsYXlzKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBkYXRhXG4iKTsKPj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJaWYgKGNvdW50ICE9IDEpIHsKPj4gKwkJcHJfZXJyKCJp bnZhbGlkIG51bWJlciBvZiBkaXNwbGF5c1xuIik7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiAr CX0KPj4gKwo+PiArCWRpc3BsYXlzWzBdID0gZ19kcF9kaXNwbGF5Owo+PiArCXJldHVybiBjb3Vu dDsKPj4gK30KPj4gKwo+PiAraW50IGRwX2Rpc3BsYXlfZ2V0X251bV9vZl9kaXNwbGF5cyh2b2lk KQo+PiArewo+PiArCXJldHVybiAxOwo+PiArfQo+IAo+IFRoZXNlIDIgZnVuY3Rpb25zIGFyZSBu ZXZlciB1c2VkLCBhbmQgYXMgc3VjaCBnX2RwX2Rpc3BsYXkgaXMgbmV2ZXIgCj4gdXNlZC4KPiBB RkFJQ1QsIHRoZSBjYWxsYmFjayBob29rcyBsaW5rZWQgZnJvbSBnX2RwX2Rpc3BsYXkgYWxzbyBh cmVuJ3QgY2FsbGVkIAo+IGZyb20KPiBhbnl3aGVyZSBlbHNlLiBTbyBjYW4geW91IGp1c3QgZHVt cCB0aGVzZSBmdW5jdGlvbnMsIHRoZSBzdHJ1Y3QsIGFuZCAKPiBhbGwgb2YgdGhlCj4gdW51c2Vk IGNhbGxiYWNrIGhvb2tzPwo+IAo+PiArCj4+ICtzdGF0aWMgaW50IGRwX2Rpc3BsYXlfcmVtb3Zl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICt7Cj4+ICsJc3RydWN0IGRwX2Rpc3Bs YXlfcHJpdmF0ZSAqZHA7Cj4+ICsKPj4gKwlpZiAoIXBkZXYpCj4+ICsJCXJldHVybiAtRUlOVkFM Owo+PiArCj4+ICsJZHAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPj4gKwo+PiArCWRw X2Rpc3BsYXlfZGVpbml0X3N1Yl9tb2R1bGVzKGRwKTsKPj4gKwo+PiArCXBsYXRmb3JtX3NldF9k cnZkYXRhKHBkZXYsIE5VTEwpOwo+PiArCWRldm1fa2ZyZWUoJnBkZXYtPmRldiwgZHApOwo+PiAr Cj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJp dmVyIGRwX2Rpc3BsYXlfZHJpdmVyID0gewo+PiArCS5wcm9iZSAgPSBkcF9kaXNwbGF5X3Byb2Jl LAo+PiArCS5yZW1vdmUgPSBkcF9kaXNwbGF5X3JlbW92ZSwKPj4gKwkuZHJpdmVyID0gewo+PiAr CQkubmFtZSA9ICJtc20tZHAtZGlzcGxheSIsCj4+ICsJCS5vZl9tYXRjaF90YWJsZSA9IGRwX2R0 X21hdGNoLAo+PiArCX0sCj4+ICt9Owo+PiArCj4+ICtpbnQgX19pbml0IG1zbV9kcF9yZWdpc3Rl cih2b2lkKQo+PiArewo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlyZXQgPSBwbGF0Zm9ybV9kcml2 ZXJfcmVnaXN0ZXIoJmRwX2Rpc3BsYXlfZHJpdmVyKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCXBy X2VycigiZHJpdmVyIHJlZ2lzdGVyIGZhaWxlZCIpOwo+PiArCQlyZXR1cm4gcmV0Owo+PiArCX0K Pj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgX19leGl0IG1zbV9kcF91 bnJlZ2lzdGVyKHZvaWQpCj4+ICt7Cj4+ICsJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRw X2Rpc3BsYXlfZHJpdmVyKTsKPj4gK30KPj4gKwo+PiAraW50IG1zbV9kcF9tb2Rlc2V0X2luaXQo c3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSwgc3RydWN0IGRybV9kZXZpY2UgCj4+ICpkZXYsCj4+ ICsJCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCj4gCj4gV2hlcmUgaXMgdGhpcyBjYWxs ZWQ/CgpUaGlzIGlzIGNhbGxlZCBmcm9tIGRwdV9rbXMuYy4gVGhlIGNoYW5nZXMgZnJvbSBEUFUg d2lsbCBiZSBkZXBlbmRlbnQgb24gCnRoZXNlIGNoYW5nZXMuCgo+IAo+PiArewo+PiArCXN0cnVj dCBtc21fZHJtX3ByaXZhdGUgKnByaXY7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCWlmIChXQVJO X09OKCFlbmNvZGVyKSB8fCBXQVJOX09OKCFkcF9kaXNwbGF5KSB8fCBXQVJOX09OKCFkZXYpKQo+ PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArCXByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ PiArCWRwX2Rpc3BsYXktPmRybV9kZXYgPSBkZXY7Cj4+ICsKPj4gKwlyZXQgPSBkcF9kcm1fYnJp ZGdlX2luaXQoZHBfZGlzcGxheSwgZW5jb2Rlcik7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlkZXZf ZXJyKGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBkcCBicmlkZ2U6ICVkXG4iLCByZXQpOwo+ PiArCQlkcF9kaXNwbGF5LT5icmlkZ2UgPSBOVUxMOwo+PiArCQlyZXR1cm4gcmV0Owo+PiArCX0K Pj4gKwlkcF9kaXNwbGF5LT5lbmNvZGVyID0gZW5jb2RlcjsKPj4gKwo+PiArCWRwX2Rpc3BsYXkt PmNvbm5lY3RvciA9IGRwX2RybV9jb25uZWN0b3JfaW5pdChkcF9kaXNwbGF5KTsKPj4gKwlpZiAo SVNfRVJSKGRwX2Rpc3BsYXktPmNvbm5lY3RvcikpIHsKPj4gKwkJcmV0ID0gUFRSX0VSUihkcF9k aXNwbGF5LT5jb25uZWN0b3IpOwo+PiArCQlkZXZfZXJyKGRldi0+ZGV2LAo+PiArCQkJImZhaWxl ZCB0byBjcmVhdGUgZHAgY29ubmVjdG9yOiAlZFxuIiwgcmV0KTsKPj4gKwkJZHBfZGlzcGxheS0+ Y29ubmVjdG9yID0gTlVMTDsKPj4gKwkJZ290byBjb25uX2ZhaWw7Cj4+ICsJfQo+PiArCj4+ICsJ cHJpdi0+YnJpZGdlc1twcml2LT5udW1fYnJpZGdlcysrXSA9IGRwX2Rpc3BsYXktPmJyaWRnZTsK Pj4gKwlwcml2LT5jb25uZWN0b3JzW3ByaXYtPm51bV9jb25uZWN0b3JzKytdID0gZHBfZGlzcGxh eS0+Y29ubmVjdG9yOwo+PiArCXJldHVybiAwOwo+PiArCj4+ICtjb25uX2ZhaWw6Cj4+ICsJaWYg KGRwX2Rpc3BsYXktPmJyaWRnZSkgewo+PiArCQlkcF9kcm1fYnJpZGdlX2RlaW5pdChkcF9kaXNw bGF5KTsKPj4gKwkJZHBfZGlzcGxheS0+YnJpZGdlID0gTlVMTDsKPj4gKwl9Cj4+ICsJcmV0dXJu IHJldDsKPj4gK30KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlz cGxheS5oIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5oCj4+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLmNhNWVhZTUKPj4gLS0tIC9kZXYvbnVs bAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuaAo+PiBAQCAtMCww ICsxLDU1IEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51 eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIAo+PiByZXNlcnZlZC4KPj4gKyAqCj4+ICsgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IAo+PiBtb2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+PiArICogb25seSB2ZXJzaW9uIDIgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4+ICsgKgo+PiArICogVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCj4+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgo+PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+PiArICogR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4gKyAqCj4+ICsgKi8KPj4gKwo+PiArI2lmbmRlZiBf RFBfRElTUExBWV9IXwo+PiArI2RlZmluZSBfRFBfRElTUExBWV9IXwo+PiArCj4+ICsjaW5jbHVk ZSA8ZHJtL2RybVAuaD4KPj4gKwo+PiArI2luY2x1ZGUgImRwX3BhbmVsLmgiCj4+ICsKPj4gK3N0 cnVjdCBtc21fZHAgewo+PiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2Owo+PiArCXN0cnVj dCBkcF9icmlkZ2UgKmRwX2JyaWRnZTsKPj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yOwo+PiArCXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2U7Cj4+ICsKPj4gKwkvKiB0aGUgZW5j b2RlciB3ZSBhcmUgaG9va2VkIHRvIChvdXRzaWRlIG9mIGRzaSBibG9jaykgKi8KPj4gKwlzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7Cj4+ICsJYm9vbCBpc19jb25uZWN0ZWQ7Cj4+ICsJdTMy IG1heF9wY2xrX2toejsKPj4gKwo+PiArCWludCAoKmVuYWJsZSkoc3RydWN0IG1zbV9kcCAqZHBf ZGlzcGxheSk7Cj4+ICsJaW50ICgqcG9zdF9lbmFibGUpKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3Bs YXkpOwo+PiArCj4+ICsJaW50ICgqcHJlX2Rpc2FibGUpKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3Bs YXkpOwo+PiArCWludCAoKmRpc2FibGUpKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpOwo+PiAr Cj4+ICsJaW50ICgqc2V0X21vZGUpKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXksCj4+ICsJCQlz dHJ1Y3QgZHBfZGlzcGxheV9tb2RlICptb2RlKTsKPj4gKwlpbnQgKCp2YWxpZGF0ZV9tb2RlKShz dHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5LCB1MzIgbW9kZV9wY2xrX2toeik7Cj4+ICsJaW50ICgq Z2V0X21vZGVzKShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5LAo+PiArCQlzdHJ1Y3QgZHBfZGlz cGxheV9tb2RlICpkcF9tb2RlKTsKPj4gKwlpbnQgKCpwcmVwYXJlKShzdHJ1Y3QgbXNtX2RwICpk cF9kaXNwbGF5KTsKPj4gKwlpbnQgKCp1bnByZXBhcmUpKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3Bs YXkpOwo+PiArCWludCAoKnJlcXVlc3RfaXJxKShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KTsK Pj4gKwlzdHJ1Y3QgZHBfZGVidWcgKigqZ2V0X2RlYnVnKShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNw bGF5KTsKPj4gKwl2b2lkICgqc2VuZF9ocGRfZXZlbnQpKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3Bs YXkpOwo+PiArCWJvb2wgKCppc192aWRlb190ZXN0KShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5 KTsKPj4gKwlpbnQgKCpnZXRfdGVzdF9icHApKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpOwo+ PiArfTsKPj4gKwo+PiAraW50IGRwX2Rpc3BsYXlfZ2V0X251bV9vZl9kaXNwbGF5cyh2b2lkKTsK Pj4gK2ludCBkcF9kaXNwbGF5X2dldF9kaXNwbGF5cyh2b2lkICoqZGlzcGxheXMsIGludCBjb3Vu dCk7Cj4+ICsjZW5kaWYgLyogX0RQX0RJU1BMQVlfSF8gKi8KPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfZHJtLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9kcm0uYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi42NGQ2NDQ5 Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kcm0u Ywo+PiBAQCAtMCwwICsxLDU0MiBAQAo+PiArLyoKPj4gKyAqIENvcHlyaWdodCAoYykgMjAxNy0y MDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyAKPj4gcmVzZXJ2ZWQuCj4+ICsg Kgo+PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciAKPj4gbW9kaWZ5Cj4+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKPj4gKyAqIG9ubHkgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+PiAr ICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAo+PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPj4gKyAqIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ICsgKgo+PiArICovCj4+ICsK Pj4gKyNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm0tZHBdOiAlczogIiBmbXQsIF9fZnVuY19fCj4+ ICsKPj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPj4gKyNpbmNsdWRlIDxk cm0vZHJtX2F0b21pYy5oPgo+PiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+PiArCj4+ICsj aW5jbHVkZSAibXNtX2Rydi5oIgo+PiArI2luY2x1ZGUgIm1zbV9rbXMuaCIKPj4gKy8vI2luY2x1 ZGUgImRwdV9jb25uZWN0b3IuaCIKPj4gKyNpbmNsdWRlICJkcF9kcm0uaCIKPj4gKyNpbmNsdWRl ICJkcF9kZWJ1Zy5oIgo+PiArCj4+ICtzdHJ1Y3QgZHBfY29ubmVjdG9yIHsKPj4gKwlzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciBiYXNlOwo+PiArCXN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXk7Cj4+ICt9 Owo+PiArI2RlZmluZSB0b19kcF9jb25uZWN0b3IoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBk cF9jb25uZWN0b3IsIGJhc2UpCj4+ICsjZGVmaW5lIHRvX2RwX2JyaWRnZSh4KSAgICAgY29udGFp bmVyX29mKCh4KSwgc3RydWN0IGRwX2JyaWRnZSwgYmFzZSkKPj4gKwo+PiArc3RhdGljIHZvaWQg Y29udmVydF90b19kcF9tb2RlKGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIAo+PiAqZHJt X21vZGUsCj4+ICsJCQlzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlICpkcF9tb2RlLCBzdHJ1Y3QgbXNt X2RwICpkcCkKPj4gK3sKPj4gKwljb25zdCB1MzIgbnVtX2NvbXBvbmVudHMgPSAzOwo+PiArCj4+ ICsJbWVtc2V0KGRwX21vZGUsIDAsIHNpemVvZigqZHBfbW9kZSkpOwo+PiArCj4+ICsJZHBfbW9k ZS0+dGltaW5nLmhfYWN0aXZlID0gZHJtX21vZGUtPmhkaXNwbGF5Owo+PiArCWRwX21vZGUtPnRp bWluZy5oX2JhY2tfcG9yY2ggPSBkcm1fbW9kZS0+aHRvdGFsIC0gCj4+IGRybV9tb2RlLT5oc3lu Y19lbmQ7Cj4+ICsJZHBfbW9kZS0+dGltaW5nLmhfc3luY193aWR0aCA9IGRybV9tb2RlLT5odG90 YWwgLQo+PiArCQkJKGRybV9tb2RlLT5oc3luY19zdGFydCArIGRwX21vZGUtPnRpbWluZy5oX2Jh Y2tfcG9yY2gpOwo+PiArCWRwX21vZGUtPnRpbWluZy5oX2Zyb250X3BvcmNoID0gZHJtX21vZGUt PmhzeW5jX3N0YXJ0IC0KPj4gKwkJCQkJIGRybV9tb2RlLT5oZGlzcGxheTsKPj4gKwlkcF9tb2Rl LT50aW1pbmcuaF9za2V3ID0gZHJtX21vZGUtPmhza2V3Owo+PiArCj4+ICsJZHBfbW9kZS0+dGlt aW5nLnZfYWN0aXZlID0gZHJtX21vZGUtPnZkaXNwbGF5Owo+PiArCWRwX21vZGUtPnRpbWluZy52 X2JhY2tfcG9yY2ggPSBkcm1fbW9kZS0+dnRvdGFsIC0gCj4+IGRybV9tb2RlLT52c3luY19lbmQ7 Cj4+ICsJZHBfbW9kZS0+dGltaW5nLnZfc3luY193aWR0aCA9IGRybV9tb2RlLT52dG90YWwgLQo+ PiArCQkoZHJtX21vZGUtPnZzeW5jX3N0YXJ0ICsgZHBfbW9kZS0+dGltaW5nLnZfYmFja19wb3Jj aCk7Cj4+ICsKPj4gKwlkcF9tb2RlLT50aW1pbmcudl9mcm9udF9wb3JjaCA9IGRybV9tb2RlLT52 c3luY19zdGFydCAtCj4+ICsJCQkJCSBkcm1fbW9kZS0+dmRpc3BsYXk7Cj4+ICsKPj4gKwlpZiAo ZHAtPmlzX3ZpZGVvX3Rlc3QoZHApKQo+PiArCQlkcF9tb2RlLT50aW1pbmcuYnBwID0gZHAtPmdl dF90ZXN0X2JwcChkcCk7Cj4+ICsJZWxzZQo+PiArCQlkcF9tb2RlLT50aW1pbmcuYnBwID0gZHAt PmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJwYyAqCj4+ICsJCW51bV9jb21wb25lbnRzOwo+PiAr Cj4+ICsJaWYgKCFkcF9tb2RlLT50aW1pbmcuYnBwKQo+PiArCQlkcF9tb2RlLT50aW1pbmcuYnBw ID0gMjQ7Cj4+ICsKPj4gKwlkcF9tb2RlLT50aW1pbmcucmVmcmVzaF9yYXRlID0gZHJtX21vZGUt PnZyZWZyZXNoOwo+PiArCj4+ICsJZHBfbW9kZS0+dGltaW5nLnBpeGVsX2Nsa19raHogPSBkcm1f bW9kZS0+Y2xvY2s7Cj4+ICsKPj4gKwlkcF9tb2RlLT50aW1pbmcudl9hY3RpdmVfbG93ID0KPj4g KwkJISEoZHJtX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZTkMpOwo+PiArCj4+ICsJ ZHBfbW9kZS0+dGltaW5nLmhfYWN0aXZlX2xvdyA9Cj4+ICsJCSEhKGRybV9tb2RlLT5mbGFncyAm IERSTV9NT0RFX0ZMQUdfTkhTWU5DKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgY29udmVy dF90b19kcm1fbW9kZShjb25zdCBzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlIAo+PiAqZHBfbW9kZSwK Pj4gKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX21vZGUpCj4+ICt7Cj4+ICsJdTMy IGZsYWdzID0gMDsKPj4gKwo+PiArCW1lbXNldChkcm1fbW9kZSwgMCwgc2l6ZW9mKCpkcm1fbW9k ZSkpOwo+PiArCj4+ICsJZHJtX21vZGUtPmhkaXNwbGF5ID0gZHBfbW9kZS0+dGltaW5nLmhfYWN0 aXZlOwo+PiArCWRybV9tb2RlLT5oc3luY19zdGFydCA9IGRybV9tb2RlLT5oZGlzcGxheSArCj4+ ICsJCQkJZHBfbW9kZS0+dGltaW5nLmhfZnJvbnRfcG9yY2g7Cj4+ICsJZHJtX21vZGUtPmhzeW5j X2VuZCA9IGRybV9tb2RlLT5oc3luY19zdGFydCArCj4+ICsJCQkgICAgICBkcF9tb2RlLT50aW1p bmcuaF9zeW5jX3dpZHRoOwo+PiArCWRybV9tb2RlLT5odG90YWwgPSBkcm1fbW9kZS0+aHN5bmNf ZW5kICsgCj4+IGRwX21vZGUtPnRpbWluZy5oX2JhY2tfcG9yY2g7Cj4+ICsJZHJtX21vZGUtPmhz a2V3ID0gZHBfbW9kZS0+dGltaW5nLmhfc2tldzsKPj4gKwo+PiArCWRybV9tb2RlLT52ZGlzcGxh eSA9IGRwX21vZGUtPnRpbWluZy52X2FjdGl2ZTsKPj4gKwlkcm1fbW9kZS0+dnN5bmNfc3RhcnQg PSBkcm1fbW9kZS0+dmRpc3BsYXkgKwo+PiArCQkJCWRwX21vZGUtPnRpbWluZy52X2Zyb250X3Bv cmNoOwo+PiArCWRybV9tb2RlLT52c3luY19lbmQgPSBkcm1fbW9kZS0+dnN5bmNfc3RhcnQgKwo+ PiArCQkJICAgICAgZHBfbW9kZS0+dGltaW5nLnZfc3luY193aWR0aDsKPj4gKwlkcm1fbW9kZS0+ dnRvdGFsID0gZHJtX21vZGUtPnZzeW5jX2VuZCArIAo+PiBkcF9tb2RlLT50aW1pbmcudl9iYWNr X3BvcmNoOwo+PiArCj4+ICsJZHJtX21vZGUtPnZyZWZyZXNoID0gZHBfbW9kZS0+dGltaW5nLnJl ZnJlc2hfcmF0ZTsKPj4gKwlkcm1fbW9kZS0+Y2xvY2sgPSBkcF9tb2RlLT50aW1pbmcucGl4ZWxf Y2xrX2toejsKPj4gKwo+PiArCWlmIChkcF9tb2RlLT50aW1pbmcuaF9hY3RpdmVfbG93KQo+PiAr CQlmbGFncyB8PSBEUk1fTU9ERV9GTEFHX05IU1lOQzsKPj4gKwllbHNlCj4+ICsJCWZsYWdzIHw9 IERSTV9NT0RFX0ZMQUdfUEhTWU5DOwo+PiArCj4+ICsJaWYgKGRwX21vZGUtPnRpbWluZy52X2Fj dGl2ZV9sb3cpCj4+ICsJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfTlZTWU5DOwo+PiArCWVsc2UK Pj4gKwkJZmxhZ3MgfD0gRFJNX01PREVfRkxBR19QVlNZTkM7Cj4+ICsKPj4gKwlkcm1fbW9kZS0+ ZmxhZ3MgPSBmbGFnczsKPj4gKwo+PiArCWRybV9tb2RlLT50eXBlID0gMHg0ODsKPj4gKwlkcm1f bW9kZV9zZXRfbmFtZShkcm1fbW9kZSk7Cj4+ICt9Cj4gCj4gSnVzdCB1c2UgdGhlIGRybSBtb2Rl cyBkaXJlY3RseSBhbmQgZGVsZXRlIHRoZXNlIGZ1bmN0aW9ucy4KPiAKPj4gKwo+PiArc3RhdGlj IHZvaWQgZHBfYnJpZGdlX3ByZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmRybV9icmlkZ2Up Cj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1Y3QgZHBfYnJpZGdlICpicmlkZ2U7Cj4+ ICsJc3RydWN0IG1zbV9kcCAqZHA7Cj4+ICsKPj4gKwlpZiAoIWRybV9icmlkZ2UpIHsKPj4gKwkJ cHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4g KwlicmlkZ2UgPSB0b19kcF9icmlkZ2UoZHJtX2JyaWRnZSk7Cj4+ICsJZHAgPSBicmlkZ2UtPmRp c3BsYXk7Cj4+ICsKPj4gKwkvKiBCeSB0aGlzIHBvaW50IG1vZGUgc2hvdWxkIGhhdmUgYmVlbiB2 YWxpZGF0ZWQgdGhyb3VnaCBtb2RlX2ZpeHVwIAo+PiAqLwo+PiArCXJjID0gZHAtPnNldF9tb2Rl KGRwLCAmYnJpZGdlLT5kcF9tb2RlKTsKPj4gKwlpZiAocmMpIHsKPj4gKwkJcHJfZXJyKCJbJWRd IGZhaWxlZCB0byBwZXJmb3JtIGEgbW9kZSBzZXQsIHJjPSVkXG4iLAo+PiArCQkgICAgICAgYnJp ZGdlLT5pZCwgcmMpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJcmMgPSBkcC0+cHJl cGFyZShkcCk7Cj4+ICsJaWYgKHJjKSB7Cj4+ICsJCXByX2VycigiWyVkXSBEUCBkaXNwbGF5IHBy ZXBhcmUgZmFpbGVkLCByYz0lZFxuIiwKPj4gKwkJICAgICAgIGJyaWRnZS0+aWQsIHJjKTsKPj4g KwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCXJjID0gZHAtPmVuYWJsZShkcCk7Cj4+ICsJaWYg KHJjKSB7Cj4+ICsJCXByX2VycigiWyVkXSBEUCBkaXNwbGF5IGVuYWJsZSBmYWlsZWQsIHJjPSVk XG4iLAo+PiArCQkgICAgICAgYnJpZGdlLT5pZCwgcmMpOwo+PiArCQlkcC0+dW5wcmVwYXJlKGRw KTsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2JyaWRnZV9lbmFibGUoc3Ry dWN0IGRybV9icmlkZ2UgKmRybV9icmlkZ2UpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlz dHJ1Y3QgZHBfYnJpZGdlICpicmlkZ2U7Cj4+ICsJc3RydWN0IG1zbV9kcCAqZHA7Cj4+ICsKPj4g KwlpZiAoIWRybV9icmlkZ2UpIHsKPj4gKwkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Cj4+ ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlicmlkZ2UgPSB0b19kcF9icmlkZ2UoZHJtX2Jy aWRnZSk7Cj4+ICsJZHAgPSBicmlkZ2UtPmRpc3BsYXk7Cj4+ICsKPj4gKwlyYyA9IGRwLT5wb3N0 X2VuYWJsZShkcCk7Cj4+ICsJaWYgKHJjKQo+PiArCQlwcl9lcnIoIlslZF0gRFAgZGlzcGxheSBw b3N0IGVuYWJsZSBmYWlsZWQsIHJjPSVkXG4iLAo+PiArCQkgICAgICAgYnJpZGdlLT5pZCwgcmMp Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9icmlkZ2VfZGlzYWJsZShzdHJ1Y3QgZHJt X2JyaWRnZSAqZHJtX2JyaWRnZSkKPj4gK3sKPj4gKwlpbnQgcmMgPSAwOwo+PiArCXN0cnVjdCBk cF9icmlkZ2UgKmJyaWRnZTsKPj4gKwlzdHJ1Y3QgbXNtX2RwICpkcDsKPj4gKwo+PiArCWlmICgh ZHJtX2JyaWRnZSkgewo+PiArCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKPj4gKwkJcmV0 dXJuOwo+PiArCX0KPj4gKwo+PiArCWJyaWRnZSA9IHRvX2RwX2JyaWRnZShkcm1fYnJpZGdlKTsK Pj4gKwlkcCA9IGJyaWRnZS0+ZGlzcGxheTsKPj4gKwo+PiArCXJjID0gZHAtPnByZV9kaXNhYmxl KGRwKTsKPj4gKwlpZiAocmMpIHsKPj4gKwkJcHJfZXJyKCJbJWRdIERQIGRpc3BsYXkgcHJlIGRp c2FibGUgZmFpbGVkLCByYz0lZFxuIiwKPj4gKwkJICAgICAgIGJyaWRnZS0+aWQsIHJjKTsKPj4g Kwl9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2JyaWRnZV9wb3N0X2Rpc2FibGUoc3Ry dWN0IGRybV9icmlkZ2UgKmRybV9icmlkZ2UpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlz dHJ1Y3QgZHBfYnJpZGdlICpicmlkZ2U7Cj4+ICsJc3RydWN0IG1zbV9kcCAqZHA7Cj4+ICsKPj4g KwlpZiAoIWRybV9icmlkZ2UpIHsKPj4gKwkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Cj4+ ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlicmlkZ2UgPSB0b19kcF9icmlkZ2UoZHJtX2Jy aWRnZSk7Cj4+ICsJZHAgPSBicmlkZ2UtPmRpc3BsYXk7Cj4+ICsKPj4gKwlyYyA9IGRwLT5kaXNh YmxlKGRwKTsKPj4gKwlpZiAocmMpIHsKPj4gKwkJcHJfZXJyKCJbJWRdIERQIGRpc3BsYXkgZGlz YWJsZSBmYWlsZWQsIHJjPSVkXG4iLAo+PiArCQkgICAgICAgYnJpZGdlLT5pZCwgcmMpOwo+PiAr CQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJcmMgPSBkcC0+dW5wcmVwYXJlKGRwKTsKPj4gKwlp ZiAocmMpIHsKPj4gKwkJcHJfZXJyKCJbJWRdIERQIGRpc3BsYXkgdW5wcmVwYXJlIGZhaWxlZCwg cmM9JWRcbiIsCj4+ICsJCSAgICAgICBicmlkZ2UtPmlkLCByYyk7Cj4+ICsJCXJldHVybjsKPj4g Kwl9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2JyaWRnZV9tb2RlX3NldChzdHJ1Y3Qg ZHJtX2JyaWRnZSAqZHJtX2JyaWRnZSwKPj4gKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSwKPj4gKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKPj4g K3sKPj4gKwlzdHJ1Y3QgZHBfYnJpZGdlICpicmlkZ2U7Cj4+ICsJc3RydWN0IG1zbV9kcCAqZHA7 Cj4+ICsKPj4gKwlpZiAoIWRybV9icmlkZ2UgfHwgIW1vZGUgfHwgIWFkanVzdGVkX21vZGUpIHsK Pj4gKwkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ ICsKPj4gKwlicmlkZ2UgPSB0b19kcF9icmlkZ2UoZHJtX2JyaWRnZSk7Cj4+ICsJZHAgPSBicmlk Z2UtPmRpc3BsYXk7Cj4+ICsKPj4gKwltZW1zZXQoJmJyaWRnZS0+ZHBfbW9kZSwgMHgwLCBzaXpl b2Yoc3RydWN0IGRwX2Rpc3BsYXlfbW9kZSkpOwo+PiArCWNvbnZlcnRfdG9fZHBfbW9kZShhZGp1 c3RlZF9tb2RlLCAmYnJpZGdlLT5kcF9tb2RlLCBkcCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBi b29sIGRwX2JyaWRnZV9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fYnJpZGdlICpkcm1fYnJpZGdlLAo+ PiArCQkJCSAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4+ICsJCQkJICBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKPj4gK3sKPj4gKwlib29sIHJl dCA9IHRydWU7Cj4+ICsJc3RydWN0IGRwX2Rpc3BsYXlfbW9kZSBkcF9tb2RlOwo+PiArCXN0cnVj dCBkcF9icmlkZ2UgKmJyaWRnZTsKPj4gKwlzdHJ1Y3QgbXNtX2RwICpkcDsKPj4gKwo+PiArCWlm ICghZHJtX2JyaWRnZSB8fCAhbW9kZSB8fCAhYWRqdXN0ZWRfbW9kZSkgewo+PiArCQlwcl9lcnIo IkludmFsaWQgcGFyYW1zXG4iKTsKPj4gKwkJcmV0ID0gZmFsc2U7Cj4+ICsJCWdvdG8gZW5kOwo+ PiArCX0KPj4gKwo+PiArCWJyaWRnZSA9IHRvX2RwX2JyaWRnZShkcm1fYnJpZGdlKTsKPj4gKwlk cCA9IGJyaWRnZS0+ZGlzcGxheTsKPj4gKwo+PiArCWNvbnZlcnRfdG9fZHBfbW9kZShtb2RlLCAm ZHBfbW9kZSwgZHApOwo+PiArCWNvbnZlcnRfdG9fZHJtX21vZGUoJmRwX21vZGUsIGFkanVzdGVk X21vZGUpOwo+PiArZW5kOgo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyBkcF9icmlkZ2Vfb3BzID0gewo+PiArCS5tb2Rl X2ZpeHVwICAgPSBkcF9icmlkZ2VfbW9kZV9maXh1cCwKPj4gKwkucHJlX2VuYWJsZSAgID0gZHBf YnJpZGdlX3ByZV9lbmFibGUsCj4+ICsJLmVuYWJsZSAgICAgICA9IGRwX2JyaWRnZV9lbmFibGUs Cj4+ICsJLmRpc2FibGUgICAgICA9IGRwX2JyaWRnZV9kaXNhYmxlLAo+PiArCS5wb3N0X2Rpc2Fi bGUgPSBkcF9icmlkZ2VfcG9zdF9kaXNhYmxlLAo+PiArCS5tb2RlX3NldCAgICAgPSBkcF9icmlk Z2VfbW9kZV9zZXQsCj4+ICt9Owo+IAo+IEknbSBub3QgY29udmluY2VkIHlvdSBuZWVkIGFueSBv ZiB0aGlzLiBUaGUgb25seSBhZHZhbnRhZ2UgYSBicmlkZ2UgCj4gZ2V0cyB5b3UgaXMKPiB0byBi ZSBpbnZvbHZlZCBpbiBtb2Rlc2V0LiBIb3dldmVyIHRoZSBvbmx5IHRoaW5nIHlvdSBkbyBpbiBt b2Rlc2V0IGlzIAo+IHNhdmUgdGhlCj4gbW9kZSAod2hpY2ggaXMgb25seSB1c2VkIGluIGVuYWJs ZSkuIFNvIHdoeSBub3QganVzdCB1c2UgdGhlIG1vZGUgZnJvbSAKPiB0aGUKPiBjcnRjJ3Mgc3Rh dGUgd2hlbiBlbmNvZGVyLT5lbmFibGUgaXMgY2FsbGVkPwo+IAo+IFRoYXQgYWxsb3dzIHlvdSB0 byBkZWxldGUgYWxsIG9mIHRoZSBicmlkZ2Ugc3R1ZmYgaGVyZS4KPiAKV2lsbCBrZWVwIGVuYWJs ZSwgZGlzYWJsZSBhbmQgbW9kZV9zZXQgZnVuYyBvcHMgYW5kIHJlbW92ZSB0aGUgcmVtYWluaW5n IApvcHMuClBsZWFzZSBsZXQgbWUga25vdyBpZiB5b3Ugc3RpbGwgaGF2ZSBjb25jZXJucyB3aXRo IHRoZXNlIGZ1bmMgb3BzLgoKPj4gKwo+PiAraW50IGRwX2Nvbm5lY3Rvcl9wb3N0X2luaXQoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgdm9pZCAKPj4gKmRpc3BsYXkpCj4+ICt7Cj4+ ICsJc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSA9IGRpc3BsYXk7Cj4+ICsKPj4gKwlpZiAoIWRw X2Rpc3BsYXkpCj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCj4+ICsJZHBfZGlzcGxheS0+Y29u bmVjdG9yID0gY29ubmVjdG9yOwo+PiArCXJldHVybiAwOwo+PiArfQo+IAo+IFRoaXMgaXNuJ3Qg Y2FsbGVkIGZyb20gYW55dGhpbmc/Cj4gCj4+ICsKPj4gKy8qKgo+PiArICogZHBfY29ubmVjdG9y X2RldGVjdCAtIGNhbGxiYWNrIHRvIGRldGVybWluZSBpZiBjb25uZWN0b3IgaXMgCj4+IGNvbm5l Y3RlZAo+PiArICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVy ZQo+PiArICogQGZvcmNlOiBGb3JjZSBkZXRlY3Qgc2V0dGluZyBmcm9tIGRybSBmcmFtZXdvcmsK Pj4gKyAqIFJldHVybnM6IENvbm5lY3RvciAnaXMgY29ubmVjdGVkJyBzdGF0dXMKPj4gKyAqLwo+ PiArc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgZHBfY29ubmVjdG9yX2RldGVjdChz dHJ1Y3QgCj4+IGRybV9jb25uZWN0b3IgKmNvbm4sCj4+ICsJCWJvb2wgZm9yY2UpCj4+ICt7Cj4+ ICsJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX3Vu a25vd247Cj4+ICsJc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgY3VycmVudF9zdGF0 dXMgPSAKPj4gY29ubmVjdG9yX3N0YXR1c191bmtub3duOwo+PiArCXN0cnVjdCBtc21fZHAgKmRw Owo+PiArCXN0cnVjdCBkcF9jb25uZWN0b3IgKmRwX2Nvbm47Cj4+ICsJc3RydWN0IG1zbV9kcm1f cHJpdmF0ZSAqcHJpdiA9IGNvbm4tPmRldi0+ZGV2X3ByaXZhdGU7Cj4+ICsJc3RydWN0IG1zbV9r bXMgKmttcyA9IHByaXYtPmttczsKPj4gKwo+PiArCWRwX2Nvbm4gPSB0b19kcF9jb25uZWN0b3Io Y29ubik7Cj4+ICsJZHAgPSBkcF9jb25uLT5kcF9kaXNwbGF5Owo+IAo+IG5vIG5lZWQgZm9yIGRw X2Nvbm4sIGp1c3QgZG8KPiAKPiAgICAgICAgIGRwID0gdG9fZHBfY29ubmVjdG9yKGNvbm4pLT5k cF9kaXNwbGF5Owo+IAo+PiArCj4+ICsJcHJfZXJyKCJpc19jb25uZWN0ZWQgPSAlc1xuIiwKPj4g KwkJKGRwLT5pc19jb25uZWN0ZWQpID8gInRydWUiIDogImZhbHNlIik7Cj4+ICsKPj4gKwlzdGF0 dXMgPSAoZHAtPmlzX2Nvbm5lY3RlZCkgPyBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6Cj4+ ICsJCQkJCWNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwo+PiArCj4+ICsJaWYgKGRwLT5p c19jb25uZWN0ZWQgJiYgZHAtPmJyaWRnZS0+ZW5jb2Rlcgo+PiArCQkJCSYmIChjdXJyZW50X3N0 YXR1cyAhPSBzdGF0dXMpCj4gCj4gVGhpcyBpcyBhbHdheXMgdHJ1ZS4KPiAKPj4gKwkJCQkmJiBr bXMtPmZ1bmNzLT5zZXRfZW5jb2Rlcl9tb2RlKSB7Cj4+ICsJCWttcy0+ZnVuY3MtPnNldF9lbmNv ZGVyX21vZGUoa21zLAo+PiArCQkJCWRwLT5icmlkZ2UtPmVuY29kZXIsIGZhbHNlKTsKPj4gKwkJ cHJfZXJyKCJjYWxsIHNldF9lbmNvZGVyX21vZGVcbiIpOwo+IAo+IGRldGVjdCgpIHNob3VsZCBu ZXZlciBkbyB3b3JrLCBwbGVhc2UgcmVtb3ZlLgo+IAo+PiArCX0KPj4gKwljdXJyZW50X3N0YXR1 cyA9IHN0YXR1czsKPiAKPiBXaHk/Cj4gCj4+ICsJcmV0dXJuIHN0YXR1czsKPj4gK30KPj4gKwo+ PiArc3RhdGljIHZvaWQgZHBfY29ubmVjdG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvcikKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfY29ubmVjdG9yICpkcF9jb25uID0gdG9f ZHBfY29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4+ICsKPj4gKwlEQkcoIiIpOwo+PiArCj4+ICsJZHJt X2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cj4+ICsKPj4gKwlrZnJlZShkcF9jb25uKTsK PiAKPiBPbmNlIGRwX2Nvbm4gaXMgZGV2bSBtYW5hZ2VkLCB5b3UgY2FuIGp1c3QgcmVtb3ZlIHRo aXMgZnVuY3Rpb24gYW5kIHNldCAKPiAuZGVzdHJveQo+IHRvIGRybV9jb25uZWN0b3JfY2xlYW51 cAo+IAo+PiArfQo+PiArCj4+ICt2b2lkIGRwX2Nvbm5lY3Rvcl9zZW5kX2hwZF9ldmVudCh2b2lk ICpkaXNwbGF5KQo+IAo+IFdoZXJlIGlzIHRoaXMgY2FsbGVkPwo+IAo+PiArewo+PiArCXN0cnVj dCBtc21fZHAgKmRwOwo+PiArCj4+ICsJaWYgKCFkaXNwbGF5KSB7Cj4+ICsJCXByX2VycigiaW52 YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlkcCA9IGRpc3Bs YXk7Cj4+ICsKPj4gKwlpZiAoZHAtPnNlbmRfaHBkX2V2ZW50KQo+PiArCQlkcC0+c2VuZF9ocGRf ZXZlbnQoZHApOwo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGRwX2Nvbm5lY3Rvcl9nZXRfbW9k ZXMgLSBjYWxsYmFjayB0byBhZGQgZHJtIG1vZGVzIHZpYSAKPj4gZHJtX21vZGVfcHJvYmVkX2Fk ZCgpCj4+ICsgKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJl Cj4+ICsgKiBSZXR1cm5zOiBOdW1iZXIgb2YgbW9kZXMgYWRkZWQKPj4gKyAqLwo+PiArc3RhdGlj IGludCBkcF9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1Y3QgbXNtX2RwICpkcDsKPj4gKwlz dHJ1Y3QgZHBfZGlzcGxheV9tb2RlICpkcF9tb2RlID0gTlVMTDsKPj4gKwlzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbSwgZHJtX21vZGU7Cj4+ICsJc3RydWN0IGRwX2Nvbm5lY3RvciAqZHBfY29u bjsKPj4gKwo+PiArCWlmICghY29ubmVjdG9yKQo+PiArCQlyZXR1cm4gMDsKPj4gKwo+PiArCWRw X2Nvbm4gPSB0b19kcF9jb25uZWN0b3IoY29ubmVjdG9yKTsKPj4gKwlkcCA9IGRwX2Nvbm4tPmRw X2Rpc3BsYXk7Cj4+ICsKPj4gKwlkcF9tb2RlID0ga3phbGxvYyhzaXplb2YoKmRwX21vZGUpLCAg R0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFkcF9tb2RlKQo+PiArCQlyZXR1cm4gMDsKPiAKPiBXaGVu IHlvdSBnZXQgcmlkIG9mIGRwX2Rpc3BsYXlfbW9kZSwgcGxlYXNlIHVzZSB0aGUgc3RhY2sgZm9y IHRoZSBuZXcKPiBkcm1fZGlzcGxheV9tb2RlCj4gCj4+ICsKPj4gKwkvKiBwbHVnZ2FibGUgY2Fz ZSBhc3N1bWVzIEVESUQgaXMgcmVhZCB3aGVuIEhQRCAqLwo+PiArCWlmIChkcC0+aXNfY29ubmVj dGVkKSB7Cj4+ICsJCXJjID0gZHAtPmdldF9tb2RlcyhkcCwgZHBfbW9kZSk7Cj4gCj4gV2h5IGlz IG9ubHkgb25lIG1vZGUgcmV0dXJuZWQ/Cj4gCj4+ICsJCWlmICghcmMpCj4gCj4gVGhpcyBjYW4g YWxzbyByZXR1cm4gLWVycm5vLCB5b3Ugc2hvdWxkIGNoZWNrIGZvciB0aGF0IHRvby4KPiAKPj4g KwkJCXByX2VycigiZmFpbGVkIHRvIGdldCBEUCBzaW5rIG1vZGVzLCByYz0lZFxuIiwgcmMpOwo+ IAo+IFdoeSBjb250aW51ZSBpZiB5b3Uga25vdyB5b3UgZmFpbGVkPwo+IAo+PiArCj4+ICsJCWlm IChkcF9tb2RlLT50aW1pbmcucGl4ZWxfY2xrX2toeikgeyAvKiB2YWxpZCBEUCBtb2RlICovCj4+ ICsJCQltZW1zZXQoJmRybV9tb2RlLCAweDAsIHNpemVvZihkcm1fbW9kZSkpOwo+PiArCQkJY29u dmVydF90b19kcm1fbW9kZShkcF9tb2RlLCAmZHJtX21vZGUpOwo+PiArCQkJbSA9IGRybV9tb2Rl X2R1cGxpY2F0ZShjb25uZWN0b3ItPmRldiwgJmRybV9tb2RlKTsKPj4gKwkJCWlmICghbSkgewo+ PiArCQkJCXByX2VycigiZmFpbGVkIHRvIGFkZCBtb2RlICV1eCV1XG4iLAo+PiArCQkJCSAgICAg ICBkcm1fbW9kZS5oZGlzcGxheSwKPj4gKwkJCQkgICAgICAgZHJtX21vZGUudmRpc3BsYXkpOwo+ PiArCQkJCWtmcmVlKGRwX21vZGUpOwo+PiArCQkJCXJldHVybiAwOwo+PiArCQkJfQo+PiArCQkJ bS0+d2lkdGhfbW0gPSBjb25uZWN0b3ItPmRpc3BsYXlfaW5mby53aWR0aF9tbTsKPj4gKwkJCW0t PmhlaWdodF9tbSA9IGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbTsKPiAKPiBZb3Ug c2hvdWxkbid0IG92ZXJ3cml0ZSB0aGVzZS4KPiAKPj4gKwkJCWRybV9tb2RlX3Byb2JlZF9hZGQo Y29ubmVjdG9yLCBtKTsKPj4gKwkJfQo+PiArCX0gZWxzZSB7Cj4+ICsJCXByX2VycigiTm8gc2lu ayBjb25uZWN0ZWRcbiIpOwo+IAo+IFRoaXMgc2hvdWxkbid0IGJlIGFuIGVycm9yCj4gCj4+ICsJ fQo+PiArCWtmcmVlKGRwX21vZGUpOwo+PiArCj4+ICsJcmV0dXJuIHJjOwo+PiArfQo+PiArCj4+ ICtpbnQgZHBfZHJtX2JyaWRnZV9pbml0KHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZW5jb2RlciAq ZW5jb2RlcikKPj4gK3sKPj4gKwlpbnQgcmMgPSAwOwo+PiArCXN0cnVjdCBkcF9icmlkZ2UgKmRw X2JyaWRnZTsKPj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2Owo+PiArCXN0cnVjdCBtc21fZHAg KmRwX2Rpc3BsYXkgPSBkYXRhOwo+PiArCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXYgPSBO VUxMOwo+PiArCj4+ICsJZHBfYnJpZGdlID0ga3phbGxvYyhzaXplb2YoKmRwX2JyaWRnZSksIEdG UF9LRVJORUwpOwo+PiArCWlmICghZHBfYnJpZGdlKSB7Cj4+ICsJCXJjID0gLUVOT01FTTsKPj4g KwkJZ290byBlcnJvcjsKPj4gKwl9Cj4+ICsKPj4gKwlkZXYgPSBkcF9kaXNwbGF5LT5kcm1fZGV2 Owo+PiArCWRwX2JyaWRnZS0+ZGlzcGxheSA9IGRwX2Rpc3BsYXk7Cj4+ICsJZHBfYnJpZGdlLT5i YXNlLmZ1bmNzID0gJmRwX2JyaWRnZV9vcHM7Cj4+ICsJZHBfYnJpZGdlLT5iYXNlLmVuY29kZXIg PSBlbmNvZGVyOwo+PiArCj4+ICsJcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4+ICsKPj4gKwly YyA9IGRybV9icmlkZ2VfYXR0YWNoKGVuY29kZXIsICZkcF9icmlkZ2UtPmJhc2UsIE5VTEwpOwo+ PiArCWlmIChyYykgewo+PiArCQlwcl9lcnIoImZhaWxlZCB0byBhdHRhY2ggYnJpZGdlLCByYz0l ZFxuIiwgcmMpOwo+PiArCQlnb3RvIGVycm9yX2ZyZWVfYnJpZGdlOwo+PiArCX0KPj4gKwo+PiAr CXJjID0gZHBfZGlzcGxheS0+cmVxdWVzdF9pcnEoZHBfZGlzcGxheSk7Cj4+ICsJaWYgKHJjKSB7 Cj4+ICsJCXByX2VycigicmVxdWVzdF9pcnEgZmFpbGVkLCByYz0lZFxuIiwgcmMpOwo+PiArCQln b3RvIGVycm9yX2ZyZWVfYnJpZGdlOwo+PiArCX0KPj4gKwo+PiArCWVuY29kZXItPmJyaWRnZSA9 ICZkcF9icmlkZ2UtPmJhc2U7Cj4+ICsJZHBfZGlzcGxheS0+ZHBfYnJpZGdlID0gZHBfYnJpZGdl Owo+PiArCWRwX2Rpc3BsYXktPmJyaWRnZSA9ICZkcF9icmlkZ2UtPmJhc2U7Cj4+ICsKPj4gKwly ZXR1cm4gMDsKPj4gK2Vycm9yX2ZyZWVfYnJpZGdlOgo+PiArCWtmcmVlKGRwX2JyaWRnZSk7Cj4+ ICtlcnJvcjoKPj4gKwlyZXR1cm4gcmM7Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgZHBfZHJtX2JyaWRn ZV9kZWluaXQodm9pZCAqZGF0YSkKPj4gK3sKPj4gKwlzdHJ1Y3QgbXNtX2RwICpkaXNwbGF5ID0g ZGF0YTsKPj4gKwlzdHJ1Y3QgZHBfYnJpZGdlICpicmlkZ2UgPSBkaXNwbGF5LT5kcF9icmlkZ2U7 Cj4+ICsKPj4gKwlpZiAoYnJpZGdlICYmIGJyaWRnZS0+YmFzZS5lbmNvZGVyKQo+PiArCQlicmlk Z2UtPmJhc2UuZW5jb2Rlci0+YnJpZGdlID0gTlVMTDsKPj4gKwo+PiArCWtmcmVlKGJyaWRnZSk7 Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogZHBfY29ubmVjdG9yX21vZGVfdmFsaWQgLSBjYWxs YmFjayB0byBkZXRlcm1pbmUgaWYgc3BlY2lmaWVkIG1vZGUgCj4+IGlzIHZhbGlkCj4+ICsgKiBA Y29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCj4+ICsgKiBAbW9k ZTogUG9pbnRlciB0byBkcm0gbW9kZSBzdHJ1Y3R1cmUKPj4gKyAqIFJldHVybnM6IFZhbGlkaXR5 IHN0YXR1cyBmb3Igc3BlY2lmaWVkIG1vZGUKPj4gKyAqLwo+PiArc3RhdGljIGVudW0gZHJtX21v ZGVfc3RhdHVzIGRwX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0cnVjdCAKPj4gZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLAo+PiArCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPj4gK3sK Pj4gKwlzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwOwo+PiArCXN0cnVjdCBkcF9kZWJ1ZyAqZGVidWc7 Cj4+ICsJc3RydWN0IGRwX2Nvbm5lY3RvciAqZHBfY29ubjsKPj4gKwo+PiArCWlmICghbW9kZSB8 fCAhY29ubmVjdG9yKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwo+PiArCQly ZXR1cm4gTU9ERV9FUlJPUjsKPj4gKwl9Cj4+ICsKPj4gKwlkcF9jb25uID0gdG9fZHBfY29ubmVj dG9yKGNvbm5lY3Rvcik7Cj4+ICsJZHBfZGlzcCA9IGRwX2Nvbm4tPmRwX2Rpc3BsYXk7Cj4+ICsJ ZGVidWcgPSBkcF9kaXNwLT5nZXRfZGVidWcoZHBfZGlzcCk7Cj4+ICsKPj4gKwltb2RlLT52cmVm cmVzaCA9IGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpOwo+PiArCj4+ICsJaWYgKG1vZGUtPmNsb2Nr ID4gZHBfZGlzcC0+bWF4X3BjbGtfa2h6KQo+IAo+IEkgdGhpbmsgdGhlIHZhbHVlIG9mIG1heF9w Y2xrX2toeiBpcyByYWN5LCB5b3UnbGwgcHJvYmFibHkgd2FudCB0byAKPiBhdWRpdCBpdHMKPiB1 c2UuCj4gCj4gCj4+ICsJCXJldHVybiBNT0RFX0JBRDsKPj4gKwo+PiArCWlmIChkZWJ1Zy0+ZGVi dWdfZW4gJiYgKG1vZGUtPmhkaXNwbGF5ICE9IGRlYnVnLT5oZGlzcGxheSB8fAo+PiArCQkJbW9k ZS0+dmRpc3BsYXkgIT0gZGVidWctPnZkaXNwbGF5IHx8Cj4+ICsJCQltb2RlLT52cmVmcmVzaCAh PSBkZWJ1Zy0+dnJlZnJlc2ggfHwKPj4gKwkJCW1vZGUtPnBpY3R1cmVfYXNwZWN0X3JhdGlvICE9 IGRlYnVnLT5hc3BlY3RfcmF0aW8pKQo+PiArCQlyZXR1cm4gTU9ERV9CQUQ7Cj4gCj4gUGxlYXNl IGRyb3AgdGhpcy4KPiAKPj4gKwo+PiArCXJldHVybiBkcF9kaXNwLT52YWxpZGF0ZV9tb2RlKGRw X2Rpc3AsIG1vZGUtPmNsb2NrKTsKPiAKPiBTbyBJIGd1ZXNzIEkgd2FzIHdyb25nIHdoZW4gSSBz YWlkIG5vbmUgb2YgdGhlIGdfZHBfZGlzcGxheSBmdW5jdGlvbnMgCj4gYXJlIGJlaW5nCj4gdXNl ZC4gSSdtIHN0aWxsIHVuc3VyZSB3aGVyZSB0aGV5J3JlIHNldCwgcGVyaGFwcyB0aGVyZSdzIHNv bWUgbWlzc2luZyAKPiBjb2RlLiBBdAo+IGFueSByYXRlLCB3aGF0J3MgdGhlIGJlbmVmaXQgb2Yg c3RpY2tpbmcgYWxsIG9mIHRoYXQgd29yayBpbnRvIGFuIAo+IGFic3RyYWN0Cj4gY2FsbGJhY2sg aG9vayB3aGVuIGl0IG9ubHkgaGFzIG9uZSBpbXBsZW1lbnRhdGlvbiBhbmQgb25lIGNhbGxzaXRl Lgo+IAo+IEFsbCBvZiB0aGF0IGNvZGUgY2FuIG1vdmUgaW4gaGVyZSAoYW5kIHRoZSBzYW1lIGdv ZXMgZm9yIHRoZSBvdGhlciAKPiBjYWxsYmFja3MKPiAobW92ZSB0aGUgY29kZSB3aGVyZSBpdCdz IHVzZWQpLgo+IAo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0 b3JfZnVuY3MgZHBfY29ubmVjdG9yX2Z1bmNzID0gewo+PiArCS5kZXRlY3QgPSBkcF9jb25uZWN0 b3JfZGV0ZWN0LAo+PiArCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29u bmVjdG9yX21vZGVzLAo+PiArCS5kZXN0cm95ID0gZHBfY29ubmVjdG9yX2Rlc3Ryb3ksCj4+ICsJ LnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAo+PiArCS5hdG9taWNf ZHVwbGljYXRlX3N0YXRlID0gCj4+IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNh dGVfc3RhdGUsCj4+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJf Y29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIAo+PiBkcF9jb25uZWN0b3JfaGVscGVyX2Z1 bmNzID0gewo+PiArCS5nZXRfbW9kZXMgPSBkcF9jb25uZWN0b3JfZ2V0X21vZGVzLAo+PiArCS5t b2RlX3ZhbGlkID0gZHBfY29ubmVjdG9yX21vZGVfdmFsaWQsCj4+ICt9Owo+PiArCj4+ICsvKiBj b25uZWN0b3IgaW5pdGlhbGl6YXRpb24gKi8KPj4gK3N0cnVjdCBkcm1fY29ubmVjdG9yICpkcF9k cm1fY29ubmVjdG9yX2luaXQoc3RydWN0IG1zbV9kcCAKPj4gKmRwX2Rpc3BsYXkpCj4+ICt7Cj4+ ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IE5VTEw7Cj4+ICsJc3RydWN0IGRw X2Nvbm5lY3RvciAqZHBfY29ubmVjdG9yOwo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlkcF9jb25u ZWN0b3IgPSBremFsbG9jKHNpemVvZigqZHBfY29ubmVjdG9yKSwgR0ZQX0tFUk5FTCk7Cj4gCj4g VXNlIGRldm1fa3phbGxvYyAoeW91J3ZlIGFscmVhZHkgZ290IGEgbWVtb3J5IGxlYWsgaWYgCj4g ZHJtX2Nvbm5lY3Rvcl9pbml0IGZhaWxzCj4gYmVsb3cpLgo+IAo+PiArCWlmICghZHBfY29ubmVj dG9yKQo+PiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPj4gKwo+PiArCWRwX2Nvbm5lY3Rv ci0+ZHBfZGlzcGxheSA9IGRwX2Rpc3BsYXk7Cj4+ICsKPj4gKwljb25uZWN0b3IgPSAmZHBfY29u bmVjdG9yLT5iYXNlOwo+PiArCj4+ICsJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGRwX2Rpc3Bs YXktPmRybV9kZXYsIGNvbm5lY3RvciwgCj4+ICZkcF9jb25uZWN0b3JfZnVuY3MsCj4+ICsJCQlE Uk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpOwo+PiArCWlmIChyZXQpCj4+ICsJCXJldHVy biBFUlJfUFRSKHJldCk7Cj4+ICsKPj4gKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29ubmVj dG9yLCAmZHBfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7Cj4+ICsKPj4gKwkvKgo+PiArCSAqIEVu YWJsZSBIUEQgdG8gbGV0IGhwZCBldmVudCBpcyBoYW5kbGVkCj4+ICsJICogd2hlbiBjYWJsZSBp cyBhdHRhY2hlZCB0byB0aGUgaG9zdC4KPiAKPiBUaGVzZSBsaW5lcyBkb24ndCBleHRlbmQgdG8g ODAgY2hhcnMKPiAKPj4gKwkgKi8KPj4gKwljb25uZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNU T1JfUE9MTF9IUEQ7Cj4+ICsKPj4gKwkvKiBEaXNwbGF5IGRyaXZlciBkb2Vzbid0IHN1cHBvcnQg aW50ZXJsYWNlIG5vdy4gKi8KPj4gKwljb25uZWN0b3ItPmludGVybGFjZV9hbGxvd2VkID0gZmFs c2U7Cj4+ICsJY29ubmVjdG9yLT5kb3VibGVzY2FuX2FsbG93ZWQgPSBmYWxzZTsKPiAKPiBUaGVz ZSBhcmUgYWxyZWFkeSBmYWxzZSBieSB2aXJ0dWUgb2Yga3phbGxvYwo+IAo+PiArCj4+ICsJZHJt X2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGRwX2Rpc3BsYXktPmVuY29kZXIp Owo+PiArCj4+ICsJcmV0dXJuIGNvbm5lY3RvcjsKPj4gK30KPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfZHJtLmggCj4+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9kcm0uaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi5lZmJjMWJl Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kcm0u aAo+PiBAQCAtMCwwICsxLDUyIEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0IChjKSAyMDE3LTIw MTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIAo+PiByZXNlcnZlZC4KPj4gKyAq Cj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIAo+PiBtb2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+PiArICogb25seSB2ZXJz aW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4+ICsg Kgo+PiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCj4+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+PiArICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4gKyAqCj4+ICsgKi8KPj4gKwo+ PiArI2lmbmRlZiBfRFBfRFJNX0hfCj4+ICsjZGVmaW5lIF9EUF9EUk1fSF8KPj4gKwo+PiArI2lu Y2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPj4gKyNpbmNs dWRlIDxkcm0vZHJtX2NydGMuaD4KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+ Cj4+ICsKPj4gKyNpbmNsdWRlICJtc21fZHJ2LmgiCj4+ICsjaW5jbHVkZSAiZHBfZGlzcGxheS5o Igo+PiArCj4+ICtzdHJ1Y3QgZHBfYnJpZGdlIHsKPj4gKwlzdHJ1Y3QgZHJtX2JyaWRnZSBiYXNl Owo+PiArCXUzMiBpZDsKPj4gKwo+PiArCXN0cnVjdCBtc21fZHAgKmRpc3BsYXk7Cj4+ICsJc3Ry dWN0IGRwX2Rpc3BsYXlfbW9kZSBkcF9tb2RlOwo+PiArfTsKPj4gKwo+PiArLyoqCj4+ICsgKiBk cF9jb25uZWN0b3JfcG9zdF9pbml0IC0gY2FsbGJhY2sgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIAo+ PiBpbml0aWFsaXphdGlvbiBzdGVwcwo+PiArICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0g Y29ubmVjdG9yIHN0cnVjdHVyZQo+PiArICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBk aXNwbGF5IGhhbmRsZQo+PiArICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCj4+ICsgKi8KPj4g K2ludCBkcF9jb25uZWN0b3JfcG9zdF9pbml0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IsIHZvaWQgCj4+ICpkaXNwbGF5KTsKPj4gKwo+PiArdm9pZCBkcF9jb25uZWN0b3Jfc2VuZF9o cGRfZXZlbnQodm9pZCAqZGlzcGxheSk7Cj4+ICsKPj4gK2ludCBkcF9kcm1fYnJpZGdlX2luaXQo dm9pZCAqZGlzcGxheSwKPj4gKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwo+PiArCj4+ ICt2b2lkIGRwX2RybV9icmlkZ2VfZGVpbml0KHZvaWQgKmRpc3BsYXkpOwo+PiArCj4+ICtzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqZHBfZHJtX2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBtc21fZHAgCj4+ ICpkcF9kaXNwbGF5KTsKPj4gKwo+PiArI2VuZGlmIC8qIF9EUF9EUk1fSF8gKi8KPj4gKwo+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9leHRjb24uYyAKPj4gYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+ IGluZGV4IDAwMDAwMDAuLjYzNWMxM2IKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5jCj4+IEBAIC0wLDAgKzEsNDAwIEBACj4+ICsvKgo+ PiArICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwg cmlnaHRzIAo+PiByZXNlcnZlZC4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAo+PiBtb2RpZnkKPj4gKyAq IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFuZAo+PiArICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCj4+ICsgKgo+PiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+ICsgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQo+PiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KPj4gKyAqCj4+ICsgKi8KPj4gKwo+PiArI2RlZmluZSBwcl9mbXQoZm10KQkiW2RybS1k cF0gJXM6ICIgZm10LCBfX2Z1bmNfXwo+PiArCj4+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ PiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2V4dGNvbi5o Pgo+PiArCj4+ICsjaW5jbHVkZSAiZHBfZXh0Y29uLmgiCj4+ICsKPj4gKy8qIERQIHNwZWNpZmlj IFZETSBjb21tYW5kcyAqLwo+PiArI2RlZmluZSBEUF9VU0JQRF9WRE1fU1RBVFVTCTB4MTAKPj4g KyNkZWZpbmUgRFBfVVNCUERfVkRNX0NPTkZJR1VSRQkweDExCj4+ICsKPj4gKy8qIFVTQlBELVR5 cGVDIHNwZWNpZmljIE1hY3JvcyAqLwo+PiArI2RlZmluZSBWRE1fVkVSU0lPTgkJMHgwCj4+ICsj ZGVmaW5lIFVTQl9DX0RQX1NJRAkJMHhGRjAxCj4+ICsKPj4gK2VudW0gZHBfdXNicGRfcGluX2Fz c2lnbm1lbnQgewo+PiArCURQX1VTQlBEX1BJTl9BLAo+PiArCURQX1VTQlBEX1BJTl9CLAo+PiAr CURQX1VTQlBEX1BJTl9DLAo+PiArCURQX1VTQlBEX1BJTl9ELAo+PiArCURQX1VTQlBEX1BJTl9F LAo+PiArCURQX1VTQlBEX1BJTl9GLAo+PiArCURQX1VTQlBEX1BJTl9NQVgsCj4+ICt9Owo+PiAr Cj4+ICtzdHJ1Y3QgZHBfdXNicGRfY2FwYWJpbGl0aWVzIHsKPj4gKwllbnVtIGRwX3VzYnBkX3Bv cnQgcG9ydDsKPj4gKwlib29sIHJlY2VwdGFjbGVfc3RhdGU7Cj4+ICsJdTggdWxpbmtfcGluX2Nv bmZpZzsKPj4gKwl1OCBkbGlua19waW5fY29uZmlnOwo+PiArfTsKPiAKPiBXaGVyZSBpcyB0aGlz IHVzZWQ/Cj4gCj4+ICsKPj4gK3N0cnVjdCBkcF9leHRjb25fcHJpdmF0ZSB7Cj4+ICsJdTMyIHZk bzsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+ICsJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGV4 dGNvbl9uYjsKPj4gKwlzdHJ1Y3QgZXh0Y29uX2RldiAqZXh0Y29uOwo+PiArCXN0cnVjdCB3b3Jr cXVldWVfc3RydWN0ICpleHRjb25fd3E7Cj4+ICsJc3RydWN0IHdvcmtfc3RydWN0IGV2ZW50X3dv cms7Cj4+ICsJc3RydWN0IHVzYnBkICpwZDsKPj4gKwlzdHJ1Y3QgZHBfdXNicGRfY2IgKmRwX2Ni Owo+PiArCXN0cnVjdCBkcF91c2JwZF9jYXBhYmlsaXRpZXMgY2FwOwo+PiArCXN0cnVjdCBkcF91 c2JwZCBkcF91c2JwZDsKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBjaGFyICpkcF91c2Jw ZF9waW5fbmFtZSh1OCBwaW4pCj4+ICt7Cj4+ICsJc3dpdGNoIChwaW4pIHsKPj4gKwljYXNlIERQ X1VTQlBEX1BJTl9BOiByZXR1cm4gIkRQX1VTQlBEX1BJTl9BU1NJR05NRU5UX0EiOwo+PiArCWNh c2UgRFBfVVNCUERfUElOX0I6IHJldHVybiAiRFBfVVNCUERfUElOX0FTU0lHTk1FTlRfQiI7Cj4+ ICsJY2FzZSBEUF9VU0JQRF9QSU5fQzogcmV0dXJuICJEUF9VU0JQRF9QSU5fQVNTSUdOTUVOVF9D IjsKPj4gKwljYXNlIERQX1VTQlBEX1BJTl9EOiByZXR1cm4gIkRQX1VTQlBEX1BJTl9BU1NJR05N RU5UX0QiOwo+PiArCWNhc2UgRFBfVVNCUERfUElOX0U6IHJldHVybiAiRFBfVVNCUERfUElOX0FT U0lHTk1FTlRfRSI7Cj4+ICsJY2FzZSBEUF9VU0JQRF9QSU5fRjogcmV0dXJuICJEUF9VU0JQRF9Q SU5fQVNTSUdOTUVOVF9GIjsKPj4gKwlkZWZhdWx0OiByZXR1cm4gIlVOS05PV04iOwo+PiArCX0K Pj4gK30KPiAKPiBObyBuZWVkIHRvIGhhdmUgdGhpcyBqdXN0IGZvciBvbmUgZGVidWcgc3RhdGVt ZW50LCBqdXN0IHByaW50IHRoZSBlbnVtIAo+IHZhbHVlCj4gd2l0aCAlZCBiZWxvdy4KPiAKPj4g Kwo+PiArc3RhdGljIGNvbnN0IGNoYXIgKmRwX3VzYnBkX3BvcnRfbmFtZShlbnVtIGRwX3VzYnBk X3BvcnQgcG9ydCkKPj4gK3sKPj4gKwlzd2l0Y2ggKHBvcnQpIHsKPj4gKwljYXNlIERQX1VTQlBE X1BPUlRfTk9ORTogcmV0dXJuICJEUF9VU0JQRF9QT1JUX05PTkUiOwo+PiArCWNhc2UgRFBfVVNC UERfUE9SVF9VRlBfRDogcmV0dXJuICJEUF9VU0JQRF9QT1JUX1VGUF9EIjsKPj4gKwljYXNlIERQ X1VTQlBEX1BPUlRfREZQX0Q6IHJldHVybiAiRFBfVVNCUERfUE9SVF9ERlBfRCI7Cj4+ICsJY2Fz ZSBEUF9VU0JQRF9QT1JUX0RfVUZQX0Q6IHJldHVybiAiRFBfVVNCUERfUE9SVF9EX1VGUF9EIjsK Pj4gKwlkZWZhdWx0OiByZXR1cm4gIkRQX1VTQlBEX1BPUlRfTk9ORSI7Cj4+ICsJfQo+PiArfQo+ IAo+IFNhbWUgaGVyZS4KPiAKPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfdXNicGRfaW5pdF9wb3J0 KGVudW0gZHBfdXNicGRfcG9ydCAqcG9ydCwgdTMyIGluX3BvcnQpCj4+ICt7Cj4+ICsJc3dpdGNo IChpbl9wb3J0KSB7Cj4+ICsJY2FzZSAwOgo+PiArCQkqcG9ydCA9IERQX1VTQlBEX1BPUlRfTk9O RTsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSAxOgo+PiArCQkqcG9ydCA9IERQX1VTQlBEX1BPUlRf VUZQX0Q7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgMjoKPj4gKwkJKnBvcnQgPSBEUF9VU0JQRF9Q T1JUX0RGUF9EOwo+PiArCQlicmVhazsKPj4gKwljYXNlIDM6Cj4+ICsJCSpwb3J0ID0gRFBfVVNC UERfUE9SVF9EX1VGUF9EOwo+PiArCQlicmVhazsKPj4gKwlkZWZhdWx0Ogo+PiArCQkqcG9ydCA9 IERQX1VTQlBEX1BPUlRfTk9ORTsKPj4gKwl9Cj4+ICsJcHJfZGVidWcoInBvcnQ6JXNcbiIsIGRw X3VzYnBkX3BvcnRfbmFtZSgqcG9ydCkpOwo+PiArfQo+PiArCj4+ICt2b2lkIGRwX3VzYnBkX2dl dF9jYXBhYmlsaXRpZXMoc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlICpwZCkKPiAKPiBXaGVyZSBp cyB0aGlzIGNhbGxlZCBmcm9tPwo+IAo+PiArewo+PiArCXN0cnVjdCBkcF91c2JwZF9jYXBhYmls aXRpZXMgKmNhcCA9ICZwZC0+Y2FwOwo+PiArCXUzMiBidWYgPSBwZC0+dmRvOwo+PiArCWludCBw b3J0ID0gYnVmICYgMHgzOwo+PiArCj4+ICsJY2FwLT5yZWNlcHRhY2xlX3N0YXRlID0gKGJ1ZiAm IEJJVCg2KSkgPyB0cnVlIDogZmFsc2U7Cj4+ICsJY2FwLT5kbGlua19waW5fY29uZmlnID0gKGJ1 ZiA+PiA4KSAmIDB4ZmY7Cj4+ICsJY2FwLT51bGlua19waW5fY29uZmlnID0gKGJ1ZiA+PiAxNikg JiAweGZmOwo+IAo+IFBsZWFzZSAjZGVmaW5lIGhhcmRjb2RlZCB2YWx1ZXMKPiAKPj4gKwo+PiAr CWRwX3VzYnBkX2luaXRfcG9ydCgmY2FwLT5wb3J0LCBwb3J0KTsKPiAKPiBBbGwgb2YgdGhlIHZh bHVlcyBpbiBjYXAtPnBvcnQgc2VlbSB0byBiZSBoYXJkY29kZWQsIHNvIHdoeSBub3QganVzdCAK PiB1c2UgdGhlCj4gI2RlZmluZSdzIGRpcmVjdGx5IHdoZXJlIGFwcGxpY2FibGU/Cj4gCj4+ICt9 Cj4+ICsKPj4gK3ZvaWQgZHBfdXNicGRfZ2V0X3N0YXR1cyhzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZh dGUgKnBkKQo+IAo+IFdoZXJlIGlzIHRoaXMgY2FsbGVkPwo+IAo+PiArewo+PiArCXN0cnVjdCBk cF91c2JwZCAqc3RhdHVzID0gJnBkLT5kcF91c2JwZDsKPj4gKwl1MzIgYnVmID0gcGQtPnZkbzsK Pj4gKwlpbnQgcG9ydCA9IGJ1ZiAmIDB4MzsKPj4gKwo+PiArCXN0YXR1cy0+bG93X3Bvd19zdCAg ICAgPSAoYnVmICYgQklUKDIpKSA/IHRydWUgOiBmYWxzZTsKPj4gKwlzdGF0dXMtPmFkYXB0b3Jf ZHBfZW4gID0gKGJ1ZiAmIEJJVCgzKSkgPyB0cnVlIDogZmFsc2U7Cj4+ICsJc3RhdHVzLT5tdWx0 aV9mdW5jICAgICA9IChidWYgJiBCSVQoNCkpID8gdHJ1ZSA6IGZhbHNlOwo+PiArCXN0YXR1cy0+ dXNiX2NvbmZpZ19yZXEgPSAoYnVmICYgQklUKDUpKSA/IHRydWUgOiBmYWxzZTsKPj4gKwlzdGF0 dXMtPmV4aXRfZHBfbW9kZSAgID0gKGJ1ZiAmIEJJVCg2KSkgPyB0cnVlIDogZmFsc2U7Cj4+ICsJ c3RhdHVzLT5ocGRfaGlnaCAgICAgICA9IChidWYgJiBCSVQoNykpID8gdHJ1ZSA6IGZhbHNlOwo+ PiArCXN0YXR1cy0+aHBkX2lycSAgICAgICAgPSAoYnVmICYgQklUKDgpKSA/IHRydWUgOiBmYWxz ZTsKPj4gKwo+PiArCXByX2RlYnVnKCJsb3dfcG93X3N0ID0gJWQsIGFkYXB0b3JfZHBfZW4gPSAl ZCwgbXVsdGlfZnVuYyA9ICVkXG4iLAo+PiArCQkJc3RhdHVzLT5sb3dfcG93X3N0LCBzdGF0dXMt PmFkYXB0b3JfZHBfZW4sCj4+ICsJCQlzdGF0dXMtPm11bHRpX2Z1bmMpOwo+PiArCXByX2RlYnVn KCJ1c2JfY29uZmlnX3JlcSA9ICVkLCBleGl0X2RwX21vZGUgPSAlZCwgaHBkX2hpZ2ggPSVkXG4i LAo+PiArCQkJc3RhdHVzLT51c2JfY29uZmlnX3JlcSwKPj4gKwkJCXN0YXR1cy0+ZXhpdF9kcF9t b2RlLCBzdGF0dXMtPmhwZF9oaWdoKTsKPj4gKwlwcl9kZWJ1ZygiaHBkX2lycSA9ICVkXG4iLCBz dGF0dXMtPmhwZF9pcnEpOwo+PiArCj4+ICsJZHBfdXNicGRfaW5pdF9wb3J0KCZzdGF0dXMtPnBv cnQsIHBvcnQpOwo+IAo+IE9ubHkgbXVsdGlfZnVuYywgaHBkX2hpZ2gsIGFuZCBocGRfaXJxIGFy ZSB1c2VkIG91dCBvZiB0aGlzIHN0cnVjdC4gQ2FuIAo+IHlvdSBjdWxsCj4gdGhlIHZhbHVlcyBk b3duPyBocGRfaXJxIGlzIGFsc28gb25seSBzZXQgdG8gaXRzIGhhcmRjb2RlZCB2YWx1ZSwgc28g Cj4ganVzdCB1c2UKPiB0aGF0IHZhbHVlIGRpcmVjdGx5IHdoZXJlIGFwcGxpY2FibGUuCj4gCj4g Cj4+ICt9Cj4+ICsKPj4gK3UzMiBkcF91c2JwZF9nZW5fY29uZmlnX3BrdChzdHJ1Y3QgZHBfZXh0 Y29uX3ByaXZhdGUgKnBkKQo+IAo+IFRoaXMgZnVuY3Rpb24gaXMgYWxzbyB1bnVzZWQKPiAKPj4g K3sKPj4gKwl1OCBwaW5fY2ZnLCBwaW47Cj4+ICsJdTMyIGNvbmZpZyA9IDA7Cj4+ICsJY29uc3Qg dTMyIHVmcF9kX2NvbmZpZyA9IDB4MiwgZHBfdmVyID0gMHgxOwo+PiArCj4+ICsJaWYgKHBkLT5j YXAucmVjZXB0YWNsZV9zdGF0ZSkKPj4gKwkJcGluX2NmZyA9IHBkLT5jYXAudWxpbmtfcGluX2Nv bmZpZzsKPj4gKwllbHNlCj4+ICsJCXBpbl9jZmcgPSBwZC0+Y2FwLmRsaW5rX3Bpbl9jb25maWc7 Cj4+ICsKPj4gKwlmb3IgKHBpbiA9IERQX1VTQlBEX1BJTl9BOyBwaW4gPCBEUF9VU0JQRF9QSU5f TUFYOyBwaW4rKykgewo+PiArCQlpZiAocGluX2NmZyAmIEJJVChwaW4pKSB7Cj4+ICsJCQlpZiAo cGQtPmRwX3VzYnBkLm11bHRpX2Z1bmMpIHsKPj4gKwkJCQlpZiAocGluID09IERQX1VTQlBEX1BJ Tl9EKQo+PiArCQkJCQlicmVhazsKPj4gKwkJCX0gZWxzZSB7Cj4+ICsJCQkJYnJlYWs7Cj4+ICsJ CQl9Cj4+ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwlpZiAocGluID09IERQX1VTQlBEX1BJTl9NQVgp Cj4+ICsJCXBpbiA9IERQX1VTQlBEX1BJTl9DOwo+PiArCj4+ICsJcHJfZGVidWcoInBpbiBhc3Np Z25tZW50OiAlc1xuIiwgZHBfdXNicGRfcGluX25hbWUocGluKSk7Cj4+ICsKPj4gKwljb25maWcg fD0gQklUKHBpbikgPDwgODsKPj4gKwo+PiArCWNvbmZpZyB8PSAoZHBfdmVyIDw8IDIpOwo+PiAr CWNvbmZpZyB8PSB1ZnBfZF9jb25maWc7Cj4+ICsKPj4gKwlwcl9kZWJ1ZygiY29uZmlnID0gMHgl eFxuIiwgY29uZmlnKTsKPj4gKwlyZXR1cm4gY29uZmlnOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IGRwX2V4dGNvbl9jb25uZWN0KHN0cnVjdCBkcF91c2JwZCAqZHBfdXNicGQsIGJvb2wgaHBk KQo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlICpl eHRjb247Cj4+ICsKPj4gKwlpZiAoIWRwX3VzYnBkKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBp bnB1dFxuIik7Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJZ290byBlcnJvcjsKPiAKPiBKdXN0 IHJldHVybiAtRUlOVkFMIGFuZCBnZXQgcmlkIG9mIHRoZSBlcnJvciBsYWJlbCBhbmQgcmMuCj4g Cj4+ICsJfQo+PiArCj4+ICsJZXh0Y29uID0gY29udGFpbmVyX29mKGRwX3VzYnBkLCBzdHJ1Y3Qg ZHBfZXh0Y29uX3ByaXZhdGUsIGRwX3VzYnBkKTsKPj4gKwo+PiArCWRwX3VzYnBkLT5ocGRfaGln aCA9IGhwZDsKPj4gKwlkcF91c2JwZC0+Zm9yY2VkX2Rpc2Nvbm5lY3QgPSAhaHBkOwo+IAo+IElm IGZvcmNlZF9kaXNjb25uZWN0IGlzIGFsd2F5cyAhZHBfdXNicGQtPmhwZF9oaWdoLCB3aHkgbm90 IGp1c3QgdXNlCj4gIWRwX3VzYnBkLT5ocGRfaGlnaCBkaXJlY3RseT8KPiAKPj4gKwo+PiArCWlm IChocGQpCj4+ICsJCWV4dGNvbi0+ZHBfY2ItPmNvbmZpZ3VyZShleHRjb24tPmRldik7Cj4+ICsJ ZWxzZQo+PiArCQlleHRjb24tPmRwX2NiLT5kaXNjb25uZWN0KGV4dGNvbi0+ZGV2KTsKPiAKPiBE byB5b3UgbmVlZCBsb2NraW5nIGluIHRoaXMgZnVuY3Rpb24vZmlsZT8KPiAKPj4gKwo+PiArZXJy b3I6Cj4+ICsJcmV0dXJuIHJjOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGRwX2V4dGNvbl9n ZXRfbGFuZXMoc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlICpleHRjb25fcHJpdikKPj4gK3sKPj4g Kwl1bmlvbiBleHRjb25fcHJvcGVydHlfdmFsdWUgcHJvcGVydHk7Cj4+ICsJdTggbGFuZXM7Cj4+ ICsKPj4gKwlpZiAoIWV4dGNvbl9wcml2IHx8ICFleHRjb25fcHJpdi0+ZXh0Y29uKSB7Cj4+ICsJ CXByX2VycigiSW52YWxpZCBpbnB1dCBhcmd1bWVudHNcbiIpOwo+PiArCQlyZXR1cm4gMDsKPj4g Kwl9Cj4+ICsKPj4gKwlleHRjb25fZ2V0X3Byb3BlcnR5KGV4dGNvbl9wcml2LT5leHRjb24sCj4+ ICsJCQkJCUVYVENPTl9ESVNQX0RQLAo+PiArCQkJCQlFWFRDT05fUFJPUF9VU0JfU1MsCj4+ICsJ CQkJCSZwcm9wZXJ0eSk7Cj4+ICsJbGFuZXMgPSAoKTsKPj4gKwo+PiArCXJldHVybiBsYW5lczsK PiAKPiAgICAgICAgIHJldHVybiAocHJvcGVydHkuaW50dmFsKSA/IDIgOiA0Owo+IAo+IGFuZCBk ZWxldGUgbGFuZXMKPiAKPiAKPj4gK30KPj4gKwo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9leHRj b25fZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4+ICt7Cj4+ICsJc3RydWN0 IGRwX2V4dGNvbl9wcml2YXRlICpleHRjb25fcHJpdjsKPj4gKwlpbnQgZHBfc3RhdGUsIHJldDsK Pj4gKwlpbnQgbGFuZXM7Cj4+ICsJdW5pb24gZXh0Y29uX3Byb3BlcnR5X3ZhbHVlIHByb3BlcnR5 Owo+PiArCj4+ICsJZXh0Y29uX3ByaXYgPSBjb250YWluZXJfb2Yod29yaywKPj4gKwkJCXN0cnVj dCBkcF9leHRjb25fcHJpdmF0ZSwgZXZlbnRfd29yayk7Cj4+ICsKPj4gKwlpZiAoIWV4dGNvbl9w cml2IHx8ICFleHRjb25fcHJpdi0+ZXh0Y29uKSB7Cj4+ICsJCXByX2VycigiSW52YWxpZCBleHRj b24gZGV2aWNlIGhhbmRsZXJcbiIpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJZHBf c3RhdGUgPSBleHRjb25fZ2V0X3N0YXRlKGV4dGNvbl9wcml2LT5leHRjb24sCj4+ICsJCQkJCQlF WFRDT05fRElTUF9EUCk7Cj4gCj4gQ2FuIGZpdCBvbiAxIGxpbmUKPiAKPj4gKwo+PiArCWlmIChk cF9zdGF0ZSA+IDApIHsKPj4gKwkJcmV0ID0gZXh0Y29uX2dldF9wcm9wZXJ0eShleHRjb25fcHJp di0+ZXh0Y29uLAo+PiArCQkJCQlFWFRDT05fRElTUF9EUCwKPj4gKwkJCQkJRVhUQ09OX1BST1Bf VVNCX1RZUEVDX1BPTEFSSVRZLAo+PiArCQkJCQkmcHJvcGVydHkpOwo+PiArCQlpZiAocmV0KSB7 Cj4+ICsJCQlwcl9lcnIoIkdldCBQb2xhcml0eSBwcm9wZXJ0eSBmYWlsZWRcbiIpOwo+PiArCQkJ cmV0dXJuOwo+PiArCQl9Cj4+ICsJCWV4dGNvbl9wcml2LT5kcF91c2JwZC5vcmllbnRhdGlvbiA9 Cj4+ICsJCQkoKHByb3BlcnR5LmludHZhbCkgPwo+IAo+IENhbiBmaXQgb24gMSBsaW5lLCBwbHVz IHJlbW92ZSBhbGwgKCkgZnJvbSB0aGlzLCB0aGV5J3JlIG5vdCBuZWVkZWQuCj4gCj4+ICsJCQkJ T1JJRU5UQVRJT05fQ0MyIDogT1JJRU5UQVRJT05fQ0MxKTsKPj4gKwo+PiArCQlsYW5lcyA9IGRw X2V4dGNvbl9nZXRfbGFuZXMoZXh0Y29uX3ByaXYpOwo+PiArCQlpZiAoIWxhbmVzKQo+PiArCQkJ cmV0dXJuOwo+PiArCQlleHRjb25fcHJpdi0+ZHBfdXNicGQubXVsdGlfZnVuYyA9Cj4+ICsJCQkJ CSgobGFuZXMgPT0gMikgPyBmYWxzZSA6IHRydWUpOwo+IAo+IFRoaXMgcGFydCBpcyBhIGJpdCBj b25mdXNpbmcsIHlvdSBhZGQgYSBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSAKPiBsYW5lcywg YW5kCj4gaW50ZXJwcmV0IHRoZSBVU0JfU1MgcHJvcGVydHkgdG8gcmV0dXJuIDIgdnMuIDQsIGJ1 dCB0aGVuIGltbWVkaWF0ZWx5IAo+IGNvbnZlcnQKPiB0aGF0IGJhY2sgaW50byB3aGF0IHRoZSBV U0JfU1MgcHJvcGVydHkgcmV0dXJucy4gSW5zdGVhZCwgcmVtb3ZlIHRoZSAKPiBoZWxwZXIKPiBm dW5jdGlvbiBhbmQgcmVhZCBVU0JfU1MgZGlyZWN0bHkgaGVyZS4KPiAKPj4gKwo+PiArCQlpZiAo ZXh0Y29uX3ByaXYtPmRwX2NiICYmIGV4dGNvbl9wcml2LT5kcF9jYi0+Y29uZmlndXJlKQo+IAo+ IEkgZmVlbCBsaWtlIHRoaXMgY2FuIG5ldmVyIGJlIGZhbHNlIGFueXdheXMsIGJ1dCB5b3UncmUg bm90IHVzaW5nIAo+IGVpdGhlciBvZgo+IHRoZXNlIG1lbWJlcnMgaW4gdGhlIGNvbmRpdGlvbmFs IGJsb2NrLiBTbyB3aHkgbm90IGp1c3QgY2FsbCAKPiBkcF9leHRjb25fY29ubmVjdAo+IHVuY29u ZGl0aW9uYWxseT8KPiAKPj4gKwkJCWRwX2V4dGNvbl9jb25uZWN0KCZleHRjb25fcHJpdi0+ZHBf dXNicGQsIHRydWUpOwo+IAo+IENoZWNrIHJldHVybiB2YWx1ZQo+IAo+PiArCX0gZWxzZSB7Cj4+ ICsJCWlmIChleHRjb25fcHJpdi0+ZHBfY2IgJiYgZXh0Y29uX3ByaXYtPmRwX2NiLT5kaXNjb25u ZWN0KQo+IAo+IFNhbWUgaGVyZS4KPiAKPj4gKwkJCWRwX2V4dGNvbl9jb25uZWN0KCZleHRjb25f cHJpdi0+ZHBfdXNicGQsIGZhbHNlKTsKPiAKPiBDaGVjayByZXR1cm4gdmFsdWUKPiAKPj4gKwl9 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfZXh0Y29uX2NyZWF0ZV93b3JrcXVldWUoc3Ry dWN0IGRwX2V4dGNvbl9wcml2YXRlIAo+PiAqZXh0Y29uX3ByaXYpCj4+ICt7Cj4+ICsJZXh0Y29u X3ByaXYtPmV4dGNvbl93cSA9IAo+PiBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiZHJt X2RwX2V4dGNvbiIpOwo+IAo+IFdoYXQncyB0aGUgYmVuZWZpdCBvZiB1c2luZyBhIGRlZGljYXRl ZCB3b3JrcXVldWUgaW5zdGVhZCBvZiB0aGUgc3lzdGVtIAo+IHdxPwo+IAo+PiArCWlmIChJU19F UlJfT1JfTlVMTChleHRjb25fcHJpdi0+ZXh0Y29uX3dxKSkgewo+PiArCQlwcl9lcnIoIkVycm9y IGNyZWF0aW5nIGV4dGNvbiB3cVxuIik7Cj4+ICsJCXJldHVybiAtRVBFUk07Cj4+ICsJfQo+PiAr Cj4+ICsJSU5JVF9XT1JLKCZleHRjb25fcHJpdi0+ZXZlbnRfd29yaywgZHBfZXh0Y29uX2V2ZW50 X3dvcmspOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4gCj4gVGhpcyBmdW5jdGlvbiBjYW4ndCBmYWls LCBzbyBpdCBzaG91bGQgcmV0dXJuIHZvaWQuIEluIGZhY3QsIHRoaXMgCj4gcmVhbGx5IGRvZXNu J3QKPiBuZWVkIHRvIGJlIGEgc2VwYXJhdGUgZnVuY3Rpb24sIHJvbGwgaXQgaW50byBkcF9leHRj b25fcmVnaXN0ZXIoKS4KPiAKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9leHRjb25fZXZl bnRfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCj4+ICsJCQkJICB1bnNpZ25lZCBs b25nIGV2ZW50LCB2b2lkICpwcml2KQo+PiArewo+PiArCXN0cnVjdCBkcF9leHRjb25fcHJpdmF0 ZSAqZXh0Y29uX3ByaXY7Cj4+ICsKPj4gKwlleHRjb25fcHJpdiA9IGNvbnRhaW5lcl9vZihuYiwg c3RydWN0IGRwX2V4dGNvbl9wcml2YXRlLAo+PiArCQkJCQkJZXh0Y29uX25iKTsKPj4gKwo+PiAr CXF1ZXVlX3dvcmsoZXh0Y29uX3ByaXYtPmV4dGNvbl93cSwgJmV4dGNvbl9wcml2LT5ldmVudF93 b3JrKTsKPj4gKwlyZXR1cm4gTk9USUZZX0RPTkU7Cj4+ICt9Cj4+ICsKPj4gK2ludCBkcF9leHRj b25fcmVnaXN0ZXIoc3RydWN0IGRwX3VzYnBkICpkcF91c2JwZCkKPj4gK3sKPj4gKwlzdHJ1Y3Qg ZHBfZXh0Y29uX3ByaXZhdGUgKmV4dGNvbl9wcml2Owo+PiArCWludCByZXQgPSAwOwo+PiArCj4+ ICsJaWYgKCFkcF91c2JwZCkKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKwlwcl9lcnIo IlN0YXJ0KysrKyIpOwo+IAo+IFlpa2VzLCB0aGlzIGRvZXNuJ3QgbG9vayBsaWtlIGFuIGVycm9y IQo+IAo+PiArCWV4dGNvbl9wcml2ID0gY29udGFpbmVyX29mKGRwX3VzYnBkLCBzdHJ1Y3QgZHBf ZXh0Y29uX3ByaXZhdGUsIAo+PiBkcF91c2JwZCk7Cj4+ICsKPj4gKwlleHRjb25fcHJpdi0+ZXh0 Y29uX25iLm5vdGlmaWVyX2NhbGwgPSBkcF9leHRjb25fZXZlbnRfbm90aWZ5Owo+PiArCXJldCA9 IGRldm1fZXh0Y29uX3JlZ2lzdGVyX25vdGlmaWVyKGV4dGNvbl9wcml2LT5kZXYsIAo+PiBleHRj b25fcHJpdi0+ZXh0Y29uLAo+PiArCQkJCQkgICAgRVhUQ09OX0RJU1BfRFAsCj4+ICsJCQkJCSAg ICAmZXh0Y29uX3ByaXYtPmV4dGNvbl9uYik7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlkZXZfZXJy KGV4dGNvbl9wcml2LT5kZXYsCj4+ICsJCQkicmVnaXN0ZXIgRVhUQ09OX0RJU1BfRFAgbm90aWZp ZXIgZXJyXG4iKTsKPj4gKwkJcmV0ID0gLUVJTlZBTDsKPiAKPiBXaHkga2VlcCBnb2luZyBhbmQg Y3JlYXRlIHRoZSB3b3JrcXVldWUgaWYgd2UgaGF2ZSBubyBub3RpZmllcj8gVGhpcyAKPiBzaG91 bGQKPiBwcm9iYWJseSBiZSBhIHJldHVybi4KPiAKPj4gKwl9Cj4+ICsKPj4gKwlyZXQgPSBkcF9l eHRjb25fY3JlYXRlX3dvcmtxdWV1ZShleHRjb25fcHJpdik7Cj4+ICsJaWYgKHJldCkgewo+PiAr CQlwcl9lcnIoIkZhaWxlZCB0byBjcmVhdGUgd29ya3F1ZXVlXG4iKTsKPj4gKwkJZHBfZXh0Y29u X3VucmVnaXN0ZXIoZHBfdXNicGQpOwo+IAo+IHJldHVybiByZXQ/Cj4gCj4+ICsJfQo+PiArCj4+ ICsJcHJfZXJyKCJFbmQtLS0tIik7Cj4gCj4gU2FtZSBoZXJlCj4gCj4+ICsJcmV0dXJuIHJldDsK Pj4gK30KPj4gKwo+PiArdm9pZCBkcF9leHRjb25fdW5yZWdpc3RlcihzdHJ1Y3QgZHBfdXNicGQg KmRwX3VzYnBkKQo+PiArewo+PiArCXN0cnVjdCBkcF9leHRjb25fcHJpdmF0ZSAqZXh0Y29uX3By aXY7Cj4+ICsKPj4gKwlpZiAoIWRwX3VzYnBkKSB7Cj4+ICsJCXByX2VycigiSW52YWxpZCBpbnB1 dFxuIik7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlwcl9lcnIoIlN0YXJ0KysrKyIp Owo+IAo+IHJlbW92ZS4KPiAKPj4gKwlleHRjb25fcHJpdiA9IGNvbnRhaW5lcl9vZihkcF91c2Jw ZCwgc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlLCAKPj4gZHBfdXNicGQpOwo+PiArCj4+ICsJZGV2 bV9leHRjb25fdW5yZWdpc3Rlcl9ub3RpZmllcihleHRjb25fcHJpdi0+ZGV2LCAKPj4gZXh0Y29u X3ByaXYtPmV4dGNvbiwKPj4gKwkJCQkJICAgIEVYVENPTl9ESVNQX0RQLAo+PiArCQkJCQkgICAg JmV4dGNvbl9wcml2LT5leHRjb25fbmIpOwo+PiArCj4+ICsJaWYgKGV4dGNvbl9wcml2LT5leHRj b25fd3EpCj4+ICsJCWRlc3Ryb3lfd29ya3F1ZXVlKGV4dGNvbl9wcml2LT5leHRjb25fd3EpOwo+ PiArCj4+ICsJcHJfZXJyKCJFbmQtLS0tIik7Cj4gCj4gcmVtb3ZlLgo+IAo+PiArCXJldHVybjsK Pj4gK30KPj4gKwo+PiArc3RydWN0IGRwX3VzYnBkICpkcF9leHRjb25fZ2V0KHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IGRwX3VzYnBkX2NiIAo+PiAqY2IpCj4+ICt7Cj4+ICsJaW50IHJjID0g MDsKPj4gKwlzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUgKmRwX2V4dGNvbjsKPj4gKwlzdHJ1Y3Qg ZHBfdXNicGQgKmRwX3VzYnBkOwo+PiArCj4+ICsJaWYgKCFjYikgewo+PiArCQlwcl9lcnIoImlu dmFsaWQgY2IgZGF0YVxuIik7Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJZ290byBlcnJvcjsK Pj4gKwl9Cj4+ICsKPj4gKwlwcl9lcnIoIiVzOiBTdGFydCIsIF9fZnVuY19fKTsKPiAKPiByZW1v dmUuCj4gCj4+ICsJZHBfZXh0Y29uID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkcF9leHRj b24pLCBHRlBfS0VSTkVMKTsKPj4gKwlpZiAoIWRwX2V4dGNvbikgewo+PiArCQlyYyA9IC1FTk9N RU07Cj4+ICsJCWdvdG8gZXJyb3I7Cj4+ICsJfQo+PiArCj4+ICsJZHBfZXh0Y29uLT5leHRjb24g PSBleHRjb25fZ2V0X2VkZXZfYnlfcGhhbmRsZShkZXYsIDApOwo+PiArCWlmICghZHBfZXh0Y29u LT5leHRjb24pIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGV4dGNvbiBkYXRhXG4iKTsKPj4gKwkJ cmMgPSAtRUlOVkFMOwo+PiArCQlkZXZtX2tmcmVlKGRldiwgZHBfZXh0Y29uKTsKPj4gKwkJZ290 byBlcnJvcjsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsJZHBfZXh0Y29uLT5kZXYgPSBkZXY7Cj4+ ICsJZHBfZXh0Y29uLT5kcF9jYiA9IGNiOwo+PiArCj4+ICsJZHBfZXh0Y29uLT5kcF91c2JwZC5j b25uZWN0ID0gZHBfZXh0Y29uX2Nvbm5lY3Q7Cj4+ICsJZHBfdXNicGQgPSAmZHBfZXh0Y29uLT5k cF91c2JwZDsKPj4gKwo+PiArCXByX2VycigiJXM6IGVuZCIsIF9fZnVuY19fKTsKPiAKPiByZW1v dmUuCj4gCj4+ICsJcmV0dXJuIGRwX3VzYnBkOwo+PiArZXJyb3I6Cj4gCj4gVGhpcyBsYWJlbCBp c24ndCB1c2VmdWwsIHJldHVybiBkaXJlY3RseSB3aGVyZSBhcHBsaWNhYmxlLgo+IAo+PiArCXJl dHVybiBFUlJfUFRSKHJjKTsKPj4gK30KPj4gKwo+PiArdm9pZCBkcF9leHRjb25fcHV0KHN0cnVj dCBkcF91c2JwZCAqZHBfdXNicGQpCj4+ICt7Cj4+ICsJc3RydWN0IGRwX2V4dGNvbl9wcml2YXRl ICpleHRjb247Cj4+ICsKPj4gKwlpZiAoIWRwX3VzYnBkKQo+PiArCQlyZXR1cm47Cj4+ICsKPj4g KwlleHRjb24gPSBjb250YWluZXJfb2YoZHBfdXNicGQsIHN0cnVjdCBkcF9leHRjb25fcHJpdmF0 ZSwgZHBfdXNicGQpOwo+PiArCj4+ICsJZGV2bV9rZnJlZShleHRjb24tPmRldiwgZXh0Y29uKTsK Pj4gKwo+PiArCXByX2VycigiJXM6IGVuZCIsIF9fZnVuY19fKTsKPj4gK30KPj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZXh0Y29uLmggCj4+IGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9leHRjb24uaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAw MDAwMDAwLi4xZjgzYTE4Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kcC9kcF9leHRjb24uaAo+PiBAQCAtMCwwICsxLDExMSBAQAo+PiArLyoKPj4gKyAqIENv cHlyaWdodCAoYykgMjAxMi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyAK Pj4gcmVzZXJ2ZWQuCj4+ICsgKgo+PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKPj4gbW9kaWZ5Cj4+ICsgKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh bmQKPj4gKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgo+PiArICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+PiArICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4gKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKPj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ ICsgKgo+PiArICovCj4+ICsKPj4gKyNpZm5kZWYgX0RQX0VYVENPTl9IXwo+PiArI2RlZmluZSBf RFBfRVhUQ09OX0hfCj4+ICsKPj4gKy8vI2luY2x1ZGUgPGxpbnV4L3VzYi91c2JwZC5oPgo+PiAr Cj4+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2Uu aD4KPj4gKwo+PiArLyoqCj4+ICsgKiBlbnVtIGRwX3VzYnBkX3BvcnQgLSB1c2IvZHAgcG9ydCB0 eXBlCj4+ICsgKiBARFBfVVNCUERfUE9SVF9OT05FOiBwb3J0IG5vdCBjb25maWd1cmVkCj4+ICsg KiBARFBfVVNCUERfUE9SVF9VRlBfRDogVXBzdHJlYW0gRmFjaW5nIFBvcnQgLSBEaXNwbGF5UG9y dAo+PiArICogQERQX1VTQlBEX1BPUlRfREZQX0Q6IERvd25zdHJlYW0gRmFjaW5nIFBvcnQgLSBE aXNwbGF5UG9ydAo+PiArICogQERQX1VTQlBEX1BPUlRfRF9VRlBfRDogQm90aCBVRlAgJiBERlAg LSBEaXNwbGF5UG9ydAo+PiArICovCj4+ICsKPj4gK2VudW0gZHBfdXNicGRfcG9ydCB7Cj4+ICsJ RFBfVVNCUERfUE9SVF9OT05FLAo+PiArCURQX1VTQlBEX1BPUlRfVUZQX0QsCj4+ICsJRFBfVVNC UERfUE9SVF9ERlBfRCwKPj4gKwlEUF9VU0JQRF9QT1JUX0RfVUZQX0QsCj4+ICt9Owo+PiArCj4+ ICtlbnVtIHBsdWdfb3JpZW50YXRpb24gewo+PiArCU9SSUVOVEFUSU9OX05PTkUsCj4+ICsJT1JJ RU5UQVRJT05fQ0MxLAo+PiArCU9SSUVOVEFUSU9OX0NDMiwKPj4gK307Cj4+ICsKPj4gKy8qKgo+ PiArICogc3RydWN0IGRwX3VzYnBkIC0gRGlzcGxheVBvcnQgc3RhdHVzCj4+ICsgKgo+PiArICog QHBvcnQ6IHBvcnQgY29uZmlndXJlZAo+PiArICogb3JpZW50YXRpb246IHBsdWcgb3JpZW50YXRp b24gY29uZmlndXJhdGlvbgo+PiArICogQGxvd19wb3dfc3Q6IGxvdyBwb3dlciBzdGF0ZQo+PiAr ICogQGFkYXB0b3JfZHBfZW46IGFkYXB0b3IgZnVuY3Rpb25hbGl0eSBlbmFibGVkCj4+ICsgKiBA bXVsdGlfZnVuYzogbXVsdGktZnVuY3Rpb24gcHJlZmVycmVkCj4+ICsgKiBAdXNiX2NvbmZpZ19y ZXE6IHJlcXVlc3QgdG8gc3dpdGNoIHRvIHVzYgo+PiArICogQGV4aXRfZHBfbW9kZTogcmVxdWVz dCBleGl0IGZyb20gZGlzcGxheXBvcnQgbW9kZQo+PiArICogQGhwZF9oaWdoOiBIb3QgUGx1ZyBE ZXRlY3Qgc2lnbmFsIGlzIGhpZ2guCj4+ICsgKiBAaHBkX2lycTogQ2hhbmdlIGluIHRoZSBzdGF0 dXMgc2luY2UgbGFzdCBtZXNzYWdlCj4+ICsgKiBAYWx0X21vZGVfY2ZnX2RvbmU6IGJvb2wgdG8g c3BlY2lmeSBhbHQgbW9kZSBzdGF0dXMKPj4gKyAqIEBkZWJ1Z19lbjogYm9vbCB0byBzcGVjaWZ5 IGRlYnVnIG1vZGUKPj4gKyAqIEBjb25uZWN0OiBzaW11bGF0ZSBkaXNjb25uZWN0IG9yIGNvbm5l Y3QgZm9yIGRlYnVnIG1vZGUKPj4gKyAqLwo+PiArc3RydWN0IGRwX3VzYnBkIHsKPj4gKwllbnVt IGRwX3VzYnBkX3BvcnQgcG9ydDsKPj4gKwllbnVtIHBsdWdfb3JpZW50YXRpb24gb3JpZW50YXRp b247Cj4+ICsJYm9vbCBsb3dfcG93X3N0Owo+PiArCWJvb2wgYWRhcHRvcl9kcF9lbjsKPj4gKwli b29sIG11bHRpX2Z1bmM7Cj4+ICsJYm9vbCB1c2JfY29uZmlnX3JlcTsKPj4gKwlib29sIGV4aXRf ZHBfbW9kZTsKPj4gKwlib29sIGhwZF9oaWdoOwo+PiArCWJvb2wgaHBkX2lycTsKPj4gKwlib29s IGFsdF9tb2RlX2NmZ19kb25lOwo+PiArCWJvb2wgZGVidWdfZW47Cj4+ICsJYm9vbCBmb3JjZWRf ZGlzY29ubmVjdDsKPj4gKwo+PiArCWludCAoKmNvbm5lY3QpKHN0cnVjdCBkcF91c2JwZCAqZHBf dXNicGQsIGJvb2wgaHBkKTsKPj4gK307Cj4+ICsKPj4gKy8qKgo+PiArICogc3RydWN0IGRwX3Vz YnBkX2NiIC0gY2FsbGJhY2sgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQKPj4gKyAq Cj4+ICsgKiBAY29uZmlndXJlOiBjYWxsZWQgYnkgdXNicGQgbW9kdWxlIHdoZW4gUEQgY29tbXVu aWNhdGlvbiBoYXMKPj4gKyAqIGJlZW4gY29tcGxldGVkIGFuZCB0aGUgdXNiIHBlcmlwaGVyYWwg aGFzIGJlZW4gY29uZmlndXJlZCBvbgo+PiArICogZHAgbW9kZS4KPj4gKyAqIEBkaXNjb25uZWN0 OiBub3RpZnkgdGhlIGNhYmxlIGRpc2Nvbm5lY3QgaXNzdWVkIGJ5IHVzYi4KPj4gKyAqIEBhdHRl bnRpb246IG5vdGlmeSBhbnkgYXR0ZW50aW9uIG1lc3NhZ2UgaXNzdWVkIGJ5IHVzYi4KPj4gKyAq Lwo+PiArc3RydWN0IGRwX3VzYnBkX2NiIHsKPj4gKwlpbnQgKCpjb25maWd1cmUpKHN0cnVjdCBk ZXZpY2UgKmRldik7Cj4+ICsJaW50ICgqZGlzY29ubmVjdCkoc3RydWN0IGRldmljZSAqZGV2KTsK Pj4gKwlpbnQgKCphdHRlbnRpb24pKHN0cnVjdCBkZXZpY2UgKmRldik7Cj4+ICt9Owo+PiArCj4+ ICsvKioKPj4gKyAqIGRwX2V4dGNvbl9nZXQoKSAtIHNldHVwIHVzYnBkIG1vZHVsZQo+PiArICoK Pj4gKyAqIEBkZXY6IGRldmljZSBpbnN0YW5jZSBvZiB0aGUgY2FsbGVyCj4+ICsgKiBAY2I6IHN0 cnVjdCBjb250YWluaW5nIGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXJzLgo+PiArICoKPj4gKyAq IFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRoZSBjbGllbnQgdG8gaW5pdGlhbGl6ZSB0aGUgdXNicGQK Pj4gKyAqIG1vZHVsZS4gVGhlIG1vZHVsZSB3aWxsIGNvbW11bmljYXRlIHdpdGggdXNiIGRyaXZl ciBhbmQKPj4gKyAqIGhhbmRsZXMgdGhlIHBvd2VyIGRlbGl2ZXJ5IChQRCkgY29tbXVuaWNhdGlv biB3aXRoIHRoZQo+PiArICogc2luay91c2IgZGV2aWNlLiBUaGlzIG1vZHVsZSB3aWxsIG5vdGlm eSB0aGUgY2xpZW50IHVzaW5nCj4+ICsgKiB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIGFib3V0IHRo ZSBjb25uZWN0aW9uIGFuZCBzdGF0dXMuCj4+ICsgKi8KPj4gK3N0cnVjdCBkcF91c2JwZCAqZHBf ZXh0Y29uX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkcF91c2JwZF9jYiAKPj4gKmNi KTsKPj4gKwo+PiArdm9pZCBkcF9leHRjb25fcHV0KHN0cnVjdCBkcF91c2JwZCAqcGQpOwo+PiAr Cj4+ICtpbnQgZHBfZXh0Y29uX3JlZ2lzdGVyKHN0cnVjdCBkcF91c2JwZCAqZHBfdXNicGQpOwo+ PiArdm9pZCBkcF9leHRjb25fdW5yZWdpc3RlcihzdHJ1Y3QgZHBfdXNicGQgKmRwX3VzYnBkKTsK Pj4gKwo+PiArI2VuZGlmIC8qIF9EUF9FWFRDT05fSF8gKi8KPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfbGluay5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAv ZHBfbGluay5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjVhYjFl ZmMKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2xp bmsuYwo+PiBAQCAtMCwwICsxLDE1NDkgQEAKPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIw MTItMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgCj4+IHJlc2VydmVkLgo+ PiArICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgCj4+IG1vZGlmeQo+PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4+ICsgKiBvbmx5 IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K Pj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ICsgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4+ICsgKiBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiArICoKPj4gKyAqLwo+ PiArCj4+ICsjZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtLWRwXSAlczogIiBmbXQsIF9fZnVuY19f Cj4+ICsKPj4gKyNpbmNsdWRlICJkcF9saW5rLmgiCj4+ICsjaW5jbHVkZSAiZHBfcGFuZWwuaCIK Pj4gKwo+PiArZW51bSBkeW5hbWljX3JhbmdlIHsKPj4gKwlEUF9EWU5BTUlDX1JBTkdFX1JHQl9W RVNBID0gMHgwMCwKPj4gKwlEUF9EWU5BTUlDX1JBTkdFX1JHQl9DRUEgPSAweDAxLAo+PiArCURQ X0RZTkFNSUNfUkFOR0VfVU5LTk9XTiA9IDB4RkZGRkZGRkYsCj4+ICt9Owo+IAo+IFRoZXNlIHNo b3VsZCBiZSBpbiBkcm1fZHBfaGVscGVyLmgKPiAKPj4gKwo+PiArZW51bSBhdWRpb19zYW1wbGVf cmF0ZSB7Cj4+ICsJQVVESU9fU0FNUExFX1JBVEVfMzJfS0haCT0gMHgwMCwKPj4gKwlBVURJT19T QU1QTEVfUkFURV80NF8xX0tIWgk9IDB4MDEsCj4+ICsJQVVESU9fU0FNUExFX1JBVEVfNDhfS0ha CT0gMHgwMiwKPj4gKwlBVURJT19TQU1QTEVfUkFURV84OF8yX0tIWgk9IDB4MDMsCj4+ICsJQVVE SU9fU0FNUExFX1JBVEVfOTZfS0haCT0gMHgwNCwKPj4gKwlBVURJT19TQU1QTEVfUkFURV8xNzZf NF9LSFoJPSAweDA1LAo+PiArCUFVRElPX1NBTVBMRV9SQVRFXzE5Ml9LSFoJPSAweDA2LAo+PiAr fTsKPj4gKwo+PiArZW51bSBhdWRpb19wYXR0ZXJuX3R5cGUgewo+PiArCUFVRElPX1RFU1RfUEFU VEVSTl9PUEVSQVRPUl9ERUZJTkVECT0gMHgwMCwKPj4gKwlBVURJT19URVNUX1BBVFRFUk5fU0FX VE9PVEgJCT0gMHgwMSwKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBkcF9saW5rX3JlcXVlc3Qgewo+ PiArCXUzMiB0ZXN0X3JlcXVlc3RlZDsKPj4gKwl1MzIgdGVzdF9saW5rX3JhdGU7Cj4+ICsJdTMy IHRlc3RfbGFuZV9jb3VudDsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBkcF9saW5rX3ByaXZhdGUg ewo+PiArCXUzMiBwcmV2X3NpbmtfY291bnQ7Cj4+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+PiAr CXN0cnVjdCBkcF9hdXggKmF1eDsKPj4gKwlzdHJ1Y3QgZHBfbGluayBkcF9saW5rOwo+PiArCj4+ ICsJc3RydWN0IGRwX2xpbmtfcmVxdWVzdCByZXF1ZXN0Owo+PiArCXU4IGxpbmtfc3RhdHVzW0RQ X0xJTktfU1RBVFVTX1NJWkVdOwo+PiArfTsKPj4gKwo+PiArc3RhdGljIGNoYXIgKmRwX2xpbmtf Z2V0X2F1ZGlvX3Rlc3RfcGF0dGVybih1MzIgcGF0dGVybikKPj4gK3sKPj4gKwlzd2l0Y2ggKHBh dHRlcm4pIHsKPj4gKwljYXNlIEFVRElPX1RFU1RfUEFUVEVSTl9PUEVSQVRPUl9ERUZJTkVEOgo+ PiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihBVURJT19URVNUX1BBVFRFUk5fT1BFUkFUT1Jf REVGSU5FRCk7Cj4+ICsJY2FzZSBBVURJT19URVNUX1BBVFRFUk5fU0FXVE9PVEg6Cj4+ICsJCXJl dHVybiBEUF9MSU5LX0VOVU1fU1RSKEFVRElPX1RFU1RfUEFUVEVSTl9TQVdUT09USCk7Cj4+ICsJ ZGVmYXVsdDoKPj4gKwkJcmV0dXJuICJ1bmtub3duIjsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBjaGFyICpkcF9saW5rX2dldF9hdWRpb19zYW1wbGVfcmF0ZSh1MzIgcmF0ZSkKPj4gK3sK Pj4gKwlzd2l0Y2ggKHJhdGUpIHsKPj4gKwljYXNlIEFVRElPX1NBTVBMRV9SQVRFXzMyX0tIWjoK Pj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoQVVESU9fU0FNUExFX1JBVEVfMzJfS0haKTsK Pj4gKwljYXNlIEFVRElPX1NBTVBMRV9SQVRFXzQ0XzFfS0haOgo+PiArCQlyZXR1cm4gRFBfTElO S19FTlVNX1NUUihBVURJT19TQU1QTEVfUkFURV80NF8xX0tIWik7Cj4+ICsJY2FzZSBBVURJT19T QU1QTEVfUkFURV80OF9LSFo6Cj4+ICsJCXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKEFVRElPX1NB TVBMRV9SQVRFXzQ4X0tIWik7Cj4+ICsJY2FzZSBBVURJT19TQU1QTEVfUkFURV84OF8yX0tIWjoK Pj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoQVVESU9fU0FNUExFX1JBVEVfODhfMl9LSFop Owo+PiArCWNhc2UgQVVESU9fU0FNUExFX1JBVEVfOTZfS0haOgo+PiArCQlyZXR1cm4gRFBfTElO S19FTlVNX1NUUihBVURJT19TQU1QTEVfUkFURV85Nl9LSFopOwo+PiArCWNhc2UgQVVESU9fU0FN UExFX1JBVEVfMTc2XzRfS0haOgo+PiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihBVURJT19T QU1QTEVfUkFURV8xNzZfNF9LSFopOwo+PiArCWNhc2UgQVVESU9fU0FNUExFX1JBVEVfMTkyX0tI WjoKPj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoQVVESU9fU0FNUExFX1JBVEVfMTkyX0tI Wik7Cj4+ICsJZGVmYXVsdDoKPj4gKwkJcmV0dXJuICJ1bmtub3duIjsKPj4gKwl9Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBpbnQgZHBfbGlua19nZXRfcGVyaW9kKHN0cnVjdCBkcF9saW5rX3ByaXZh dGUgKmxpbmssIGludCBjb25zdCAKPj4gYWRkcikKPj4gK3sKPj4gKwlpbnQgcmV0ID0gMDsKPj4g Kwl1OCBicDsKPj4gKwl1OCBkYXRhOwo+PiArCXUzMiBjb25zdCBwYXJhbV9sZW4gPSAweDE7Cj4+ ICsJdTMyIGNvbnN0IG1heF9hdWRpb19wZXJpb2QgPSAweEE7Cj4+ICsKPj4gKwkvKiBURVNUX0FV RElPX1BFUklPRF9DSF9YWCAqLwo+PiArCWlmIChkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ ZHJtX2F1eCwgYWRkciwgJmJwLAo+PiArCQlwYXJhbV9sZW4pIDwgcGFyYW1fbGVuKSB7Cj4+ICsJ CXByX2VycigiZmFpbGVkIHRvIHJlYWQgdGVzdF9hdWRpb19wZXJpb2QgKDB4JXgpXG4iLCBhZGRy KTsKPj4gKwkJcmV0ID0gLUVJTlZBTDsKPj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4gKwo+PiAr CWRhdGEgPSBicDsKPj4gKwo+PiArCS8qIFBlcmlvZCAtIEJpdHMgMzowICovCj4+ICsJZGF0YSA9 IGRhdGEgJiAweEY7Cj4+ICsJaWYgKChpbnQpZGF0YSA+IG1heF9hdWRpb19wZXJpb2QpIHsKPj4g KwkJcHJfZXJyKCJpbnZhbGlkIHRlc3RfYXVkaW9fcGVyaW9kX2NoXzEgPSAweCV4XG4iLCBkYXRh KTsKPj4gKwkJcmV0ID0gLUVJTlZBTDsKPj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4gKwo+PiAr CXJldCA9IGRhdGE7Cj4+ICtleGl0Ogo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBpbnQgZHBfbGlua19wYXJzZV9hdWRpb19jaGFubmVsX3BlcmlvZChzdHJ1Y3QgZHBfbGlu a19wcml2YXRlIAo+PiAqbGluaykKPj4gK3sKPj4gKwlpbnQgcmV0ID0gMDsKPj4gKwlzdHJ1Y3Qg ZHBfbGlua190ZXN0X2F1ZGlvICpyZXEgPSAmbGluay0+ZHBfbGluay50ZXN0X2F1ZGlvOwo+PiAr Cj4+ICsJcmV0ID0gZHBfbGlua19nZXRfcGVyaW9kKGxpbmssIERQX1RFU1RfQVVESU9fUEVSSU9E X0NIMSk7Cj4+ICsJaWYgKHJldCA9PSAtRUlOVkFMKQo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsKPj4g KwlyZXEtPnRlc3RfYXVkaW9fcGVyaW9kX2NoXzEgPSByZXQ7Cj4+ICsJcHJfZGVidWcoInRlc3Rf YXVkaW9fcGVyaW9kX2NoXzEgPSAweCV4XG4iLCByZXQpOwo+PiArCj4+ICsJcmV0ID0gZHBfbGlu a19nZXRfcGVyaW9kKGxpbmssIERQX1RFU1RfQVVESU9fUEVSSU9EX0NIMik7Cj4+ICsJaWYgKHJl dCA9PSAtRUlOVkFMKQo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsKPj4gKwlyZXEtPnRlc3RfYXVkaW9f cGVyaW9kX2NoXzIgPSByZXQ7Cj4+ICsJcHJfZGVidWcoInRlc3RfYXVkaW9fcGVyaW9kX2NoXzIg PSAweCV4XG4iLCByZXQpOwo+PiArCj4+ICsJLyogVEVTVF9BVURJT19QRVJJT0RfQ0hfMyAoQnl0 ZSAweDI3NSkgKi8KPj4gKwlyZXQgPSBkcF9saW5rX2dldF9wZXJpb2QobGluaywgRFBfVEVTVF9B VURJT19QRVJJT0RfQ0gzKTsKPj4gKwlpZiAocmV0ID09IC1FSU5WQUwpCj4+ICsJCWdvdG8gZXhp dDsKPj4gKwo+PiArCXJlcS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfMyA9IHJldDsKPj4gKwlwcl9k ZWJ1ZygidGVzdF9hdWRpb19wZXJpb2RfY2hfMyA9IDB4JXhcbiIsIHJldCk7Cj4+ICsKPj4gKwly ZXQgPSBkcF9saW5rX2dldF9wZXJpb2QobGluaywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g0KTsK Pj4gKwlpZiAocmV0ID09IC1FSU5WQUwpCj4+ICsJCWdvdG8gZXhpdDsKPj4gKwo+PiArCXJlcS0+ dGVzdF9hdWRpb19wZXJpb2RfY2hfNCA9IHJldDsKPj4gKwlwcl9kZWJ1ZygidGVzdF9hdWRpb19w ZXJpb2RfY2hfNCA9IDB4JXhcbiIsIHJldCk7Cj4+ICsKPj4gKwlyZXQgPSBkcF9saW5rX2dldF9w ZXJpb2QobGluaywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g1KTsKPj4gKwlpZiAocmV0ID09IC1F SU5WQUwpCj4+ICsJCWdvdG8gZXhpdDsKPj4gKwo+PiArCXJlcS0+dGVzdF9hdWRpb19wZXJpb2Rf Y2hfNSA9IHJldDsKPj4gKwlwcl9kZWJ1ZygidGVzdF9hdWRpb19wZXJpb2RfY2hfNSA9IDB4JXhc biIsIHJldCk7Cj4+ICsKPj4gKwlyZXQgPSBkcF9saW5rX2dldF9wZXJpb2QobGluaywgRFBfVEVT VF9BVURJT19QRVJJT0RfQ0g2KTsKPj4gKwlpZiAocmV0ID09IC1FSU5WQUwpCj4+ICsJCWdvdG8g ZXhpdDsKPj4gKwo+PiArCXJlcS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfNiA9IHJldDsKPj4gKwlw cl9kZWJ1ZygidGVzdF9hdWRpb19wZXJpb2RfY2hfNiA9IDB4JXhcbiIsIHJldCk7Cj4+ICsKPj4g KwlyZXQgPSBkcF9saW5rX2dldF9wZXJpb2QobGluaywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g3 KTsKPj4gKwlpZiAocmV0ID09IC1FSU5WQUwpCj4+ICsJCWdvdG8gZXhpdDsKPj4gKwo+PiArCXJl cS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfNyA9IHJldDsKPj4gKwlwcl9kZWJ1ZygidGVzdF9hdWRp b19wZXJpb2RfY2hfNyA9IDB4JXhcbiIsIHJldCk7Cj4+ICsKPj4gKwlyZXQgPSBkcF9saW5rX2dl dF9wZXJpb2QobGluaywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g4KTsKPj4gKwlpZiAocmV0ID09 IC1FSU5WQUwpCj4+ICsJCWdvdG8gZXhpdDsKPj4gKwo+PiArCXJlcS0+dGVzdF9hdWRpb19wZXJp b2RfY2hfOCA9IHJldDsKPj4gKwlwcl9kZWJ1ZygidGVzdF9hdWRpb19wZXJpb2RfY2hfOCA9IDB4 JXhcbiIsIHJldCk7Cj4+ICtleGl0Ogo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBpbnQgZHBfbGlua19wYXJzZV9hdWRpb19wYXR0ZXJuX3R5cGUoc3RydWN0IGRwX2xpbmtf cHJpdmF0ZSAKPj4gKmxpbmspCj4+ICt7Cj4+ICsJaW50IHJldCA9IDA7Cj4+ICsJdTggYnA7Cj4+ ICsJdTggZGF0YTsKPj4gKwlpbnQgcmxlbjsKPj4gKwlpbnQgY29uc3QgcGFyYW1fbGVuID0gMHgx Owo+PiArCWludCBjb25zdCBtYXhfYXVkaW9fcGF0dGVybl90eXBlID0gMHgxOwo+PiArCj4+ICsJ cmxlbiA9IGRybV9kcF9kcGNkX3JlYWQobGluay0+YXV4LT5kcm1fYXV4LAo+PiArCQlEUF9URVNU X0FVRElPX1BBVFRFUk5fVFlQRSwgJmJwLCBwYXJhbV9sZW4pOwo+PiArCWlmIChybGVuIDwgcGFy YW1fbGVuKSB7Cj4+ICsJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgbGluayBhdWRpbyBtb2RlIGRh dGFcbiIpOwo+PiArCQlyZXQgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsJfQo+PiAr CWRhdGEgPSBicDsKPj4gKwo+PiArCS8qIEF1ZGlvIFBhdHRlcm4gVHlwZSAtIEJpdHMgNzowICov Cj4+ICsJaWYgKChpbnQpZGF0YSA+IG1heF9hdWRpb19wYXR0ZXJuX3R5cGUpIHsKPj4gKwkJcHJf ZXJyKCJpbnZhbGlkIGF1ZGlvIHBhdHRlcm4gdHlwZSA9IDB4JXhcbiIsIGRhdGEpOwo+PiArCQly ZXQgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsJfQo+PiArCj4+ICsJbGluay0+ZHBf bGluay50ZXN0X2F1ZGlvLnRlc3RfYXVkaW9fcGF0dGVybl90eXBlID0gZGF0YTsKPj4gKwlwcl9k ZWJ1ZygiYXVkaW8gcGF0dGVybiB0eXBlID0gJXNcbiIsCj4+ICsJCQlkcF9saW5rX2dldF9hdWRp b190ZXN0X3BhdHRlcm4oZGF0YSkpOwo+PiArZXhpdDoKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW50IGRwX2xpbmtfcGFyc2VfYXVkaW9fbW9kZShzdHJ1Y3QgZHBfbGlu a19wcml2YXRlICpsaW5rKQo+PiArewo+PiArCWludCByZXQgPSAwOwo+PiArCXU4IGJwOwo+PiAr CXU4IGRhdGE7Cj4+ICsJaW50IHJsZW47Cj4+ICsJaW50IGNvbnN0IHBhcmFtX2xlbiA9IDB4MTsK Pj4gKwlpbnQgY29uc3QgbWF4X2F1ZGlvX3NhbXBsaW5nX3JhdGUgPSAweDY7Cj4+ICsJaW50IGNv bnN0IG1heF9hdWRpb19jaGFubmVsX2NvdW50ID0gMHg4Owo+PiArCWludCBzYW1wbGluZ19yYXRl ID0gMHgwOwo+PiArCWludCBjaGFubmVsX2NvdW50ID0gMHgwOwo+PiArCj4+ICsJcmxlbiA9IGRy bV9kcF9kcGNkX3JlYWQobGluay0+YXV4LT5kcm1fYXV4LCBEUF9URVNUX0FVRElPX01PREUsCj4+ ICsJCQkmYnAsIHBhcmFtX2xlbik7Cj4+ICsJaWYgKHJsZW4gPCBwYXJhbV9sZW4pIHsKPj4gKwkJ cHJfZXJyKCJmYWlsZWQgdG8gcmVhZCBsaW5rIGF1ZGlvIG1vZGUgZGF0YVxuIik7Cj4+ICsJCXJl dCA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZXhpdDsKPj4gKwl9Cj4+ICsJZGF0YSA9IGJwOwo+PiAr Cj4+ICsJLyogU2FtcGxpbmcgUmF0ZSAtIEJpdHMgMzowICovCj4+ICsJc2FtcGxpbmdfcmF0ZSA9 IGRhdGEgJiAweEY7Cj4+ICsJaWYgKHNhbXBsaW5nX3JhdGUgPiBtYXhfYXVkaW9fc2FtcGxpbmdf cmF0ZSkgewo+PiArCQlwcl9lcnIoInNhbXBsaW5nIHJhdGUgKDB4JXgpIGdyZWF0ZXIgdGhhbiBt YXggKDB4JXgpXG4iLAo+PiArCQkJCXNhbXBsaW5nX3JhdGUsIG1heF9hdWRpb19zYW1wbGluZ19y YXRlKTsKPj4gKwkJcmV0ID0gLUVJTlZBTDsKPj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4gKwo+ PiArCS8qIENoYW5uZWwgQ291bnQgLSBCaXRzIDc6NCAqLwo+PiArCWNoYW5uZWxfY291bnQgPSAo KGRhdGEgJiAweEYwKSA+PiA0KSArIDE7Cj4+ICsJaWYgKGNoYW5uZWxfY291bnQgPiBtYXhfYXVk aW9fY2hhbm5lbF9jb3VudCkgewo+PiArCQlwcl9lcnIoImNoYW5uZWxfY291bnQgKDB4JXgpIGdy ZWF0ZXIgdGhhbiBtYXggKDB4JXgpXG4iLAo+PiArCQkJCWNoYW5uZWxfY291bnQsIG1heF9hdWRp b19jaGFubmVsX2NvdW50KTsKPj4gKwkJcmV0ID0gLUVJTlZBTDsKPj4gKwkJZ290byBleGl0Owo+ PiArCX0KPj4gKwo+PiArCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50ZXN0X2F1ZGlvX3NhbXBs aW5nX3JhdGUgPSBzYW1wbGluZ19yYXRlOwo+PiArCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50 ZXN0X2F1ZGlvX2NoYW5uZWxfY291bnQgPSBjaGFubmVsX2NvdW50Owo+PiArCXByX2RlYnVnKCJz YW1wbGluZ19yYXRlID0gJXMsIGNoYW5uZWxfY291bnQgPSAweCV4XG4iLAo+PiArCQlkcF9saW5r X2dldF9hdWRpb19zYW1wbGVfcmF0ZShzYW1wbGluZ19yYXRlKSwgY2hhbm5lbF9jb3VudCk7Cj4+ ICtleGl0Ogo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogZHBfcGFy c2VfYXVkaW9fcGF0dGVybl9wYXJhbXMoKSAtIHBhcnNlcyBhdWRpbyBwYXR0ZXJuIHBhcmFtZXRl cnMgCj4+IGZyb20gRFBDRAo+PiArICogQGxpbms6IERpc3BsYXkgUG9ydCBEcml2ZXIgZGF0YQo+ PiArICoKPj4gKyAqIFJldHVybnMgMCBpZiBpdCBzdWNjZXNzZnVsbHkgcGFyc2VzIHRoZSBhdWRp byBsaW5rIHBhdHRlcm4gCj4+IHBhcmFtZXRlcnMuCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgZHBf bGlua19wYXJzZV9hdWRpb19wYXR0ZXJuX3BhcmFtcyhzdHJ1Y3QgZHBfbGlua19wcml2YXRlIAo+ PiAqbGluaykKPj4gK3sKPj4gKwlpbnQgcmV0ID0gMDsKPj4gKwo+PiArCXJldCA9IGRwX2xpbmtf cGFyc2VfYXVkaW9fbW9kZShsaW5rKTsKPj4gKwlpZiAocmV0KQo+PiArCQlnb3RvIGV4aXQ7Cj4+ ICsKPj4gKwlyZXQgPSBkcF9saW5rX3BhcnNlX2F1ZGlvX3BhdHRlcm5fdHlwZShsaW5rKTsKPj4g KwlpZiAocmV0KQo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsKPj4gKwlyZXQgPSBkcF9saW5rX3BhcnNl X2F1ZGlvX2NoYW5uZWxfcGVyaW9kKGxpbmspOwo+PiArCj4+ICtleGl0Ogo+PiArCXJldHVybiBy ZXQ7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogZHBfbGlua19pc192aWRlb19wYXR0ZXJuX3Zh bGlkKCkgLSB2YWxpZGF0ZXMgdGhlIHZpZGVvIHBhdHRlcm4KPj4gKyAqIEBwYXR0ZXJuOiB2aWRl byBwYXR0ZXJuIHJlcXVlc3RlZCBieSB0aGUgc2luawo+PiArICoKPj4gKyAqIFJldHVybnMgdHJ1 ZSBpZiB0aGUgcmVxdWVzdGVkIHZpZGVvIHBhdHRlcm4gaXMgc3VwcG9ydGVkLgo+PiArICovCj4+ ICtzdGF0aWMgYm9vbCBkcF9saW5rX2lzX3ZpZGVvX3BhdHRlcm5fdmFsaWQodTMyIHBhdHRlcm4p Cj4+ICt7Cj4+ICsJc3dpdGNoIChwYXR0ZXJuKSB7Cj4+ICsJY2FzZSBEUF9OT19URVNUX1BBVFRF Uk46Cj4+ICsJY2FzZSBEUF9DT0xPUl9SQU1QOgo+PiArCWNhc2UgRFBfQkxBQ0tfQU5EX1dISVRF X1ZFUlRJQ0FMX0xJTkVTOgo+PiArCWNhc2UgRFBfQ09MT1JfU1FVQVJFOgo+PiArCQlyZXR1cm4g dHJ1ZTsKPj4gKwlkZWZhdWx0Ogo+PiArCQlyZXR1cm4gZmFsc2U7Cj4+ICsJfQo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgY2hhciAqZHBfbGlua192aWRlb19wYXR0ZXJuX3RvX3N0cmluZyh1MzIgdGVz dF92aWRlb19wYXR0ZXJuKQo+PiArewo+PiArCXN3aXRjaCAodGVzdF92aWRlb19wYXR0ZXJuKSB7 Cj4+ICsJY2FzZSBEUF9OT19URVNUX1BBVFRFUk46Cj4+ICsJCXJldHVybiBEUF9MSU5LX0VOVU1f U1RSKERQX05PX1RFU1RfUEFUVEVSTik7Cj4+ICsJY2FzZSBEUF9DT0xPUl9SQU1QOgo+PiArCQly ZXR1cm4gRFBfTElOS19FTlVNX1NUUihEUF9DT0xPUl9SQU1QKTsKPj4gKwljYXNlIERQX0JMQUNL X0FORF9XSElURV9WRVJUSUNBTF9MSU5FUzoKPj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIo RFBfQkxBQ0tfQU5EX1dISVRFX1ZFUlRJQ0FMX0xJTkVTKTsKPj4gKwljYXNlIERQX0NPTE9SX1NR VUFSRToKPj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoRFBfQ09MT1JfU1FVQVJFKTsKPj4g KwlkZWZhdWx0Ogo+PiArCQlyZXR1cm4gInVua25vd24iOwo+PiArCX0KPj4gK30KPj4gKwo+PiAr LyoqCj4+ICsgKiBkcF9saW5rX2lzX2R5bmFtaWNfcmFuZ2VfdmFsaWQoKSAtIHZhbGlkYXRlcyB0 aGUgZHluYW1pYyByYW5nZQo+PiArICogQGJpdF9kZXB0aDogdGhlIGR5bmFtaWMgcmFuZ2UgdmFs dWUgdG8gYmUgY2hlY2tlZAo+PiArICoKPj4gKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZHluYW1p YyByYW5nZSB2YWx1ZSBpcyBzdXBwb3J0ZWQuCj4+ICsgKi8KPj4gK3N0YXRpYyBib29sIGRwX2xp bmtfaXNfZHluYW1pY19yYW5nZV92YWxpZCh1MzIgZHIpCj4+ICt7Cj4+ICsJc3dpdGNoIChkcikg ewo+PiArCWNhc2UgRFBfRFlOQU1JQ19SQU5HRV9SR0JfVkVTQToKPj4gKwljYXNlIERQX0RZTkFN SUNfUkFOR0VfUkdCX0NFQToKPj4gKwkJcmV0dXJuIHRydWU7Cj4+ICsJZGVmYXVsdDoKPj4gKwkJ cmV0dXJuIGZhbHNlOwo+PiArCX0KPj4gK30KPj4gKwo+PiArc3RhdGljIGNoYXIgKmRwX2xpbmtf ZHluYW1pY19yYW5nZV90b19zdHJpbmcodTMyIGRyKQo+PiArewo+PiArCXN3aXRjaCAoZHIpIHsK Pj4gKwljYXNlIERQX0RZTkFNSUNfUkFOR0VfUkdCX1ZFU0E6Cj4+ICsJCXJldHVybiBEUF9MSU5L X0VOVU1fU1RSKERQX0RZTkFNSUNfUkFOR0VfUkdCX1ZFU0EpOwo+PiArCWNhc2UgRFBfRFlOQU1J Q19SQU5HRV9SR0JfQ0VBOgo+PiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihEUF9EWU5BTUlD X1JBTkdFX1JHQl9DRUEpOwo+PiArCWNhc2UgRFBfRFlOQU1JQ19SQU5HRV9VTktOT1dOOgo+PiAr CWRlZmF1bHQ6Cj4+ICsJCXJldHVybiAidW5rbm93biI7Cj4+ICsJfQo+PiArfQo+IAo+IE5vIG5l ZWQgZm9yIHRoaXMsIGp1c3QgcHJpbnQgdGhlIHZhbHVlIGluIHRoZSBkZWJ1ZyBzdGF0ZW1lbnQu Cj4gCj4+ICsKPj4gKy8qKgo+PiArICogZHBfbGlua19pc19iaXRfZGVwdGhfdmFsaWQoKSAtIHZh bGlkYXRlcyB0aGUgYml0IGRlcHRoIHJlcXVlc3RlZAo+PiArICogQGJpdF9kZXB0aDogYml0IGRl cHRoIHJlcXVlc3RlZCBieSB0aGUgc2luawo+PiArICoKPj4gKyAqIFJldHVybnMgdHJ1ZSBpZiB0 aGUgcmVxdWVzdGVkIGJpdCBkZXB0aCBpcyBzdXBwb3J0ZWQuCj4+ICsgKi8KPj4gK3N0YXRpYyBi b29sIGRwX2xpbmtfaXNfYml0X2RlcHRoX3ZhbGlkKHUzMiB0YmQpCj4+ICt7Cj4+ICsJLyogRFBf VEVTVF9WSURFT19QQVRURVJOX05PTkUgaXMgdHJlYXRlZCBhcyBpbnZhbGlkICovCj4+ICsJc3dp dGNoICh0YmQpIHsKPj4gKwljYXNlIERQX1RFU1RfQklUX0RFUFRIXzY6Cj4+ICsJY2FzZSBEUF9U RVNUX0JJVF9ERVBUSF84Ogo+PiArCWNhc2UgRFBfVEVTVF9CSVRfREVQVEhfMTA6Cj4+ICsJCXJl dHVybiB0cnVlOwo+PiArCWRlZmF1bHQ6Cj4+ICsJCXJldHVybiBmYWxzZTsKPj4gKwl9Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBjaGFyICpkcF9saW5rX2JpdF9kZXB0aF90b19zdHJpbmcodTMyIHRi ZCkKPj4gK3sKPj4gKwlzd2l0Y2ggKHRiZCkgewo+PiArCWNhc2UgRFBfVEVTVF9CSVRfREVQVEhf NjoKPj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoRFBfVEVTVF9CSVRfREVQVEhfNik7Cj4+ ICsJY2FzZSBEUF9URVNUX0JJVF9ERVBUSF84Ogo+PiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NU UihEUF9URVNUX0JJVF9ERVBUSF84KTsKPj4gKwljYXNlIERQX1RFU1RfQklUX0RFUFRIXzEwOgo+ PiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihEUF9URVNUX0JJVF9ERVBUSF8xMCk7Cj4+ICsJ Y2FzZSBEUF9URVNUX0JJVF9ERVBUSF9VTktOT1dOOgo+PiArCWRlZmF1bHQ6Cj4+ICsJCXJldHVy biAidW5rbm93biI7Cj4+ICsJfQo+PiArfQo+IAo+IFNhbWUgdGhpbmcgaGVyZSwganVzdCByZW1v dmUgdGhpcyBhbmQgcHJpbnQgdGhlIGVudW0gdmFsdWUuCj4gCj4+ICsKPj4gK3N0YXRpYyBpbnQg ZHBfbGlua19wYXJzZV90aW1pbmdfcGFyYW1zMShzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5r LAo+PiArCQkJCQlpbnQgY29uc3QgYWRkciwgaW50IGNvbnN0IGxlbiwgdTMyICp2YWwpCj4gCj4g cGFzcy1ieS12YWx1ZSBkb2Vzbid0IG5lZWQgY29uc3Qgc2FtZSBjb21tZW50IGFwcGxpZXMgZWxz ZXdoZXJlLCBwbGVhc2UgCj4gc3dlZXAKPiB0aGUgY29kZSBmb3Igb3RoZXIgaW5zdGFuY2VzLgo+ IAo+PiArewo+PiArCXU4IGJwWzJdOwo+PiArCWludCBybGVuOwo+PiArCj4+ICsJaWYgKGxlbiA8 IDIpCj4gCj4gSWYgeW91J3JlIGdvaW5nIHRvIGNoZWNrIGxlbiA8IDIsIHlvdSBzaG91bGQgcHJv YmFibHkgYWxzbyBjaGVjayBsZW4gPiAKPiAyIHRvCj4gcHJldmVudCBvdmVyZmxvdy4gQXQgdGhp cyBwb2ludCwgbGVuIGNhbiByZWFsbHkgb25seSBiZSAyLCBzbyB5b3UgY2FuCj4ganVzdCByZW1v dmUKPiBpdCBlbnRpcmVseSBhcyBhbiBhcmd1bWVudC4KPiAKPj4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4+ICsKPj4gKwkvKiBSZWFkIHRoZSByZXF1ZXN0ZWQgdmlkZW8gbGluayBwYXR0ZXJuIChCeXRl IDB4MjIxKS4gKi8KPj4gKwlybGVuID0gZHJtX2RwX2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9h dXgsIGFkZHIsIGJwLCBsZW4pOwo+PiArCWlmIChybGVuIDwgbGVuKSB7Cj4+ICsJCXByX2Vycigi ZmFpbGVkIHRvIHJlYWQgMHgleFxuIiwgYWRkcik7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiAr CX0KPj4gKwo+PiArCSp2YWwgPSBicFsxXSB8IChicFswXSA8PCA4KTsKPj4gKwo+PiArCXJldHVy biAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFt czIoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaywKPj4gKwkJCQkJaW50IGNvbnN0IGFkZHIs IGludCBjb25zdCBsZW4sCj4+ICsJCQkJCXUzMiAqdmFsMSwgdTMyICp2YWwyKQo+PiArewo+PiAr CXU4IGJwWzJdOwo+PiArCWludCBybGVuOwo+PiArCj4+ICsJaWYgKGxlbiA8IDIpCj4gCj4gU2Ft ZSBjb21tZW50IGhlcmUgcnQgYm91bmRzIGNoZWNraW5nCj4gCj4+ICsJCXJldHVybiAtRUlOVkFM Owo+PiArCj4+ICsJLyogUmVhZCB0aGUgcmVxdWVzdGVkIHZpZGVvIGxpbmsgcGF0dGVybiAoQnl0 ZSAweDIyMSkuICovCj4+ICsJcmxlbiA9IGRybV9kcF9kcGNkX3JlYWQobGluay0+YXV4LT5kcm1f YXV4LCBhZGRyLCBicCwgbGVuKTsKPj4gKwlpZiAocmxlbiA8IGxlbikgewo+PiArCQlwcl9lcnIo ImZhaWxlZCB0byByZWFkIDB4JXhcbiIsIGFkZHIpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4g Kwl9Cj4+ICsKPj4gKwkqdmFsMSA9IChicFswXSAmIEJJVCg3KSkgPj4gNzsKPj4gKwkqdmFsMiA9 IGJwWzFdIHwgKChicFswXSAmIDB4N0YpIDw8IDgpOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV90aW1pbmdfcGFyYW1zMyhzdHJ1Y3Qg ZHBfbGlua19wcml2YXRlICpsaW5rLAo+PiArCQkJCQlpbnQgY29uc3QgYWRkciwgdTMyICp2YWwp Cj4+ICt7Cj4+ICsJdTggYnA7Cj4+ICsJdTMyIGxlbiA9IDE7Cj4+ICsJaW50IHJsZW47Cj4+ICsK Pj4gKwlybGVuID0gZHJtX2RwX2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9hdXgsIGFkZHIsICZi cCwgbGVuKTsKPj4gKwlpZiAocmxlbiA8IDEpIHsKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gcmVh ZCAweCV4XG4iLCBhZGRyKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCSp2YWwg PSBicDsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+IAo+IFB1dHRpbmcgYXNpZGUgdGhlIHVu aW5mb3JtYXRpdmUgbmFtZXMsIHRoZXNlIAo+IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtcyoK PiBjYW4gYmUgY29tYmluZWQgaW50byBvbmUgcHJldHR5IGVhc2lseSwgbGlrZToKPiAKPiBzdGF0 aWMgaW50IGRwX2xpbmtfcmVhZF91MzIoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAqbGluaywgdW5z aWduZWQgaW50IAo+IG9mZnNldCwKPiAJCSAgICAgICAgICAgIHUzMiAqdmFsLCBpbnQgbnVtX2J5 dGVzKQo+IHsKPiAgICAgICAgIGludCBpOwo+ICAgICAgICAgc3NpemVfdCByZXQ7Cj4gICAgICAg ICBfX2JlMzIgdG1wX3ZhbDsKPiAKPiAgICAgICAgIGZvciAoaSA9IDA7IG51bV9ieXRlcyA+IDA7 IGkgKz0gc2l6ZW9mKCp2YWwpKSB7Cj4gICAgICAgICAgICAgICAgIGludCB0b19yZWFkID0gbWlu KHNpemVvZih0bXBfdmFsKSwgbnVtX2J5dGVzKTsKPiAKPiAgICAgICAgICAgICAgICAgdG1wX3Zh bCA9IDA7Cj4gICAgICAgICAgICAgICAgIHJldCA9IGRybV9kcF9kcGNkX3JlYWQobGluay0+YXV4 LT5kcm1fYXV4LCBvZmZzZXQgKyBpLCAKPiAmdG1wX3ZhbCwKPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0b19yZWFkKTsKPiAgICAgICAgICAgICAgICAgaWYgKHJsZW4g PCAwKSB7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJpbnQgZXJyb3IgbWVzc2FnZSBo ZXJlICovCj4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJsZW47Cj4gICAgICAgICAg ICAgICAgIH0KPiAgICAgICAgICAgICAgICAgdmFsW2ldID0gYmUzMl90b19jcHUodG1wX3ZhbCk7 Cj4gICAgICAgICAgICAgICAgIG51bV9ieXRlcyAtPSB0b19yZWFkOwo+ICAgICAgICAgfQo+ICAg ICAgICAgcmV0dXJuIDA7Cj4gfQo+IAo+IElmIHlvdSBuZWVkIHRvIHN0cmlwIG9mZiB0aGUgZmly c3QgYml0LCBkbyBpdCBmcm9tIHRoZSBjYWxsZXIuCj4gCj4gSSBkaWRuJ3QgY29tcGlsZSBvciB0 ZXN0IHRoaXMsIHNvIGl0IG1pZ2h0IG5lZWQgdHdlYWtpbmcsIGJ1dCB5b3UgZ2V0IAo+IHRoZSBp ZGVhLgo+IAo+IAo+PiArCj4+ICsvKioKPj4gKyAqIGRwX3BhcnNlX3ZpZGVvX3BhdHRlcm5fcGFy YW1zKCkgLSBwYXJzZXMgdmlkZW8gcGF0dGVybiBwYXJhbWV0ZXJzIAo+PiBmcm9tIERQQ0QKPj4g KyAqIEBsaW5rOiBEaXNwbGF5IFBvcnQgRHJpdmVyIGRhdGEKPj4gKyAqCj4+ICsgKiBSZXR1cm5z IDAgaWYgaXQgc3VjY2Vzc2Z1bGx5IHBhcnNlcyB0aGUgdmlkZW8gbGluayBwYXR0ZXJuIGFuZCB0 aGUgCj4+IGxpbmsKPj4gKyAqIGJpdCBkZXB0aCByZXF1ZXN0ZWQgYnkgdGhlIHNpbmsgYW5kLCBh bmQgaWYgdGhlIHZhbHVlcyBwYXJzZWQgYXJlIAo+PiB2YWxpZC4KPj4gKyAqLwo+PiArc3RhdGlj IGludCBkcF9saW5rX3BhcnNlX3ZpZGVvX3BhdHRlcm5fcGFyYW1zKHN0cnVjdCBkcF9saW5rX3By aXZhdGUgCj4+ICpsaW5rKQo+PiArewo+PiArCWludCByZXQgPSAwOwo+PiArCWludCBybGVuOwo+ IAo+IHNzaXplX3QKPiAKPj4gKwl1OCBicDsKPj4gKwl1OCBkYXRhOwo+IAo+IFdoeSBkbyB5b3Ug bmVlZCBkYXRhIGFuZCBicD8gSSB0aGluayB5b3Ugb25seSBuZWVkIG9uZS4KPiAKPj4gKwl1MzIg ZHluX3JhbmdlOwo+PiArCWludCBjb25zdCBwYXJhbV9sZW4gPSAweDE7Cj4+ICsKPj4gKwlybGVu ID0gZHJtX2RwX2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9hdXgsIERQX1RFU1RfUEFUVEVSTiwK Pj4gKwkJCSZicCwgcGFyYW1fbGVuKTsKPj4gKwlpZiAocmxlbiA8IHBhcmFtX2xlbikgewo+PiAr CQlwcl9lcnIoImZhaWxlZCB0byByZWFkIGxpbmsgdmlkZW8gcGF0dGVyblxuIik7Cj4+ICsJCXJl dCA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZXhpdDsKPj4gKwl9Cj4+ICsJZGF0YSA9IGJwOwo+PiAr Cj4+ICsJaWYgKCFkcF9saW5rX2lzX3ZpZGVvX3BhdHRlcm5fdmFsaWQoZGF0YSkpIHsKPj4gKwkJ cHJfZXJyKCJpbnZhbGlkIGxpbmsgdmlkZW8gcGF0dGVybiA9IDB4JXhcbiIsIGRhdGEpOwo+PiAr CQlyZXQgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsJfQo+PiArCj4+ICsJbGluay0+ ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfdmlkZW9fcGF0dGVybiA9IGRhdGE7Cj4+ICsJcHJfZGVi dWcoImxpbmsgdmlkZW8gcGF0dGVybiA9IDB4JXggKCVzKVxuIiwKPj4gKwkJbGluay0+ZHBfbGlu ay50ZXN0X3ZpZGVvLnRlc3RfdmlkZW9fcGF0dGVybiwKPj4gKwkJZHBfbGlua192aWRlb19wYXR0 ZXJuX3RvX3N0cmluZygKPj4gKwkJCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3ZpZGVv X3BhdHRlcm4pKTsKPj4gKwo+PiArCS8qIFJlYWQgdGhlIHJlcXVlc3RlZCBjb2xvciBiaXQgZGVw dGggYW5kIGR5bmFtaWMgcmFuZ2UgKEJ5dGUgMHgyMzIpIAo+PiAqLwo+PiArCXJsZW4gPSBkcm1f ZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBfVEVTVF9NSVNDMCwKPj4gKwkJCSZi cCwgcGFyYW1fbGVuKTsKPj4gKwlpZiAocmxlbiA8IHBhcmFtX2xlbikgewo+PiArCQlwcl9lcnIo ImZhaWxlZCB0byByZWFkIGxpbmsgYml0IGRlcHRoXG4iKTsKPj4gKwkJcmV0ID0gLUVJTlZBTDsK Pj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4gKwlkYXRhID0gYnA7Cj4+ICsKPj4gKwkvKiBEeW5h bWljIFJhbmdlICovCj4+ICsJZHluX3JhbmdlID0gKGRhdGEgJiBEUF9URVNUX0RZTkFNSUNfUkFO R0VfQ0VBKSA+PiAzOwo+IAo+IFRoaXMgbWFzayBpc29sYXRlcyBvbmUgYml0IGZyb20gZGF0YQo+ IAo+PiArCWlmICghZHBfbGlua19pc19keW5hbWljX3JhbmdlX3ZhbGlkKGR5bl9yYW5nZSkpIHsK PiAKPiBhbmQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIGlucHV0IGlzIDAgfHwg MQo+IAo+IFNvIHJlbW92ZSB0aGlzIGNvZGUsIGFuZCByZW1vdmUgZHBfbGlua19pc19keW5hbWlj X3JhbmdlX3ZhbGlkLgo+IAo+PiArCQlwcl9lcnIoImludmFsaWQgbGluayBkeW5hbWljIHJhbmdl ID0gMHgleCIsIGR5bl9yYW5nZSk7Cj4+ICsJCXJldCA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZXhp dDsKPj4gKwl9Cj4+ICsJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfZHluX3JhbmdlID0g ZHluX3JhbmdlOwo+IAo+IEFuZCBub3cgeW91IGNhbiBqdXN0IGFzc2lnbiB0aGlzIGRpcmVjdGx5 LiBZb3Ugc2hvdWxkIHByb2JhYmx5IHN0YXkgCj4gY29uc2lzdGVudAo+IGFuZCBzdG9yZSB0aGUg dmFsdWUgc2hpZnRlZCBsaWtlIHRoZSBvdGhlciB2YWx1ZXMgeW91J3JlIHN0b3JpbmcuCj4gCj4+ ICsJcHJfZGVidWcoImxpbmsgZHluYW1pYyByYW5nZSA9IDB4JXggKCVzKVxuIiwKPj4gKwkJbGlu ay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfZHluX3JhbmdlLAo+PiArCQlkcF9saW5rX2R5bmFt aWNfcmFuZ2VfdG9fc3RyaW5nKAo+PiArCQkJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3Rf ZHluX3JhbmdlKSk7Cj4+ICsKPj4gKwkvKiBDb2xvciBiaXQgZGVwdGggKi8KPj4gKwlkYXRhICY9 IERQX1RFU1RfQklUX0RFUFRIX01BU0s7Cj4+ICsJaWYgKCFkcF9saW5rX2lzX2JpdF9kZXB0aF92 YWxpZChkYXRhKSkgewo+PiArCQlwcl9lcnIoImludmFsaWQgbGluayBiaXQgZGVwdGggPSAweCV4 XG4iLCBkYXRhKTsKPj4gKwkJcmV0ID0gLUVJTlZBTDsKPj4gKwkJZ290byBleGl0Owo+PiArCX0K Pj4gKwo+PiArCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2JpdF9kZXB0aCA9IGRhdGE7 Cj4+ICsJcHJfZGVidWcoImxpbmsgYml0IGRlcHRoID0gMHgleCAoJXMpXG4iLAo+PiArCQlsaW5r LT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9iaXRfZGVwdGgsCj4+ICsJCWRwX2xpbmtfYml0X2Rl cHRoX3RvX3N0cmluZygKPj4gKwkJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfYml0X2Rl cHRoKSk7Cj4+ICsKPj4gKwkvKiByZXNvbHV0aW9uIHRpbWluZyBwYXJhbXMgKi8KPj4gKwlyZXQg PSBkcF9saW5rX3BhcnNlX3RpbWluZ19wYXJhbXMxKGxpbmssIERQX1RFU1RfSF9UT1RBTF9ISSwg MiwKPj4gKwkJCSZsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9oX3RvdGFsKTsKPj4gKwlp ZiAocmV0KSB7Cj4+ICsJCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHRlc3RfaF90b3RhbCAoRFBf VEVTVF9IX1RPVEFMX0hJKVxuIik7Cj4+ICsJCWdvdG8gZXhpdDsKPj4gKwl9Cj4+ICsJcHJfZGVi dWcoIlRFU1RfSF9UT1RBTCA9ICVkXG4iLCAKPj4gbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRl c3RfaF90b3RhbCk7Cj4+ICsKPj4gKwlyZXQgPSBkcF9saW5rX3BhcnNlX3RpbWluZ19wYXJhbXMx KGxpbmssIERQX1RFU1RfVl9UT1RBTF9ISSwgMiwKPj4gKwkJCSZsaW5rLT5kcF9saW5rLnRlc3Rf dmlkZW8udGVzdF92X3RvdGFsKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCXByX2VycigiZmFpbGVk IHRvIHBhcnNlIHRlc3Rfdl90b3RhbCAoRFBfVEVTVF9WX1RPVEFMX0hJKVxuIik7Cj4+ICsJCWdv dG8gZXhpdDsKPj4gKwl9Cj4+ICsJcHJfZGVidWcoIlRFU1RfVl9UT1RBTCA9ICVkXG4iLCAKPj4g bGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3Rfdl90b3RhbCk7Cj4+ICsKPj4gKwlyZXQgPSBk cF9saW5rX3BhcnNlX3RpbWluZ19wYXJhbXMxKGxpbmssIERQX1RFU1RfSF9TVEFSVF9ISSwgMiwK Pj4gKwkJCSZsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9oX3N0YXJ0KTsKPj4gKwlpZiAo cmV0KSB7Cj4+ICsJCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHRlc3RfaF9zdGFydCAoRFBfVEVT VF9IX1NUQVJUX0hJKVxuIik7Cj4+ICsJCWdvdG8gZXhpdDsKPj4gKwl9Cj4+ICsJcHJfZGVidWco IlRFU1RfSF9TVEFSVCA9ICVkXG4iLCAKPj4gbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3Rf aF9zdGFydCk7Cj4+ICsKPj4gKwlyZXQgPSBkcF9saW5rX3BhcnNlX3RpbWluZ19wYXJhbXMxKGxp bmssIERQX1RFU1RfVl9TVEFSVF9ISSwgMiwKPj4gKwkJCSZsaW5rLT5kcF9saW5rLnRlc3Rfdmlk ZW8udGVzdF92X3N0YXJ0KTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCXByX2VycigiZmFpbGVkIHRv IHBhcnNlIHRlc3Rfdl9zdGFydCAoRFBfVEVTVF9WX1NUQVJUX0hJKVxuIik7Cj4+ICsJCWdvdG8g ZXhpdDsKPj4gKwl9Cj4+ICsJcHJfZGVidWcoIlRFU1RfVl9TVEFSVCA9ICVkXG4iLCAKPj4gbGlu ay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3Rfdl9zdGFydCk7Cj4+ICsKPj4gKwlyZXQgPSBkcF9s aW5rX3BhcnNlX3RpbWluZ19wYXJhbXMyKGxpbmssIERQX1RFU1RfSFNZTkNfSEksIDIsCj4+ICsJ CQkmbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfaHN5bmNfcG9sLAo+PiArCQkJJmxpbmst PmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hzeW5jX3dpZHRoKTsKPj4gKwlpZiAocmV0KSB7Cj4+ ICsJCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIChEUF9URVNUX0hTWU5DX0hJKVxuIik7Cj4+ICsJ CWdvdG8gZXhpdDsKPj4gKwl9Cj4+ICsJcHJfZGVidWcoIlRFU1RfSFNZTkNfUE9MID0gJWRcbiIs Cj4+ICsJCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hzeW5jX3BvbCk7Cj4+ICsJcHJf ZGVidWcoIlRFU1RfSFNZTkNfV0lEVEggPSAlZFxuIiwKPj4gKwkJbGluay0+ZHBfbGluay50ZXN0 X3ZpZGVvLnRlc3RfaHN5bmNfd2lkdGgpOwo+PiArCj4+ICsJcmV0ID0gZHBfbGlua19wYXJzZV90 aW1pbmdfcGFyYW1zMihsaW5rLCBEUF9URVNUX1ZTWU5DX0hJLCAyLAo+PiArCQkJJmxpbmstPmRw X2xpbmsudGVzdF92aWRlby50ZXN0X3ZzeW5jX3BvbCwKPj4gKwkJCSZsaW5rLT5kcF9saW5rLnRl c3RfdmlkZW8udGVzdF92c3luY193aWR0aCk7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlwcl9lcnIo ImZhaWxlZCB0byBwYXJzZSAoRFBfVEVTVF9WU1lOQ19ISSlcbiIpOwo+PiArCQlnb3RvIGV4aXQ7 Cj4+ICsJfQo+PiArCXByX2RlYnVnKCJURVNUX1ZTWU5DX1BPTCA9ICVkXG4iLAo+PiArCQlsaW5r LT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92c3luY19wb2wpOwo+PiArCXByX2RlYnVnKCJURVNU X1ZTWU5DX1dJRFRIID0gJWRcbiIsCj4+ICsJCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0 X3ZzeW5jX3dpZHRoKTsKPj4gKwo+PiArCXJldCA9IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFt czEobGluaywgRFBfVEVTVF9IX1dJRFRIX0hJLCAyLAo+PiArCQkJJmxpbmstPmRwX2xpbmsudGVz dF92aWRlby50ZXN0X2hfd2lkdGgpOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJcHJfZXJyKCJmYWls ZWQgdG8gcGFyc2UgdGVzdF9oX3dpZHRoIChEUF9URVNUX0hfV0lEVEhfSEkpXG4iKTsKPj4gKwkJ Z290byBleGl0Owo+PiArCX0KPj4gKwlwcl9kZWJ1ZygiVEVTVF9IX1dJRFRIID0gJWRcbiIsIAo+ PiBsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9oX3dpZHRoKTsKPj4gKwo+PiArCXJldCA9 IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczEobGluaywgRFBfVEVTVF9WX0hFSUdIVF9ISSwg MiwKPj4gKwkJCSZsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92X2hlaWdodCk7Cj4+ICsJ aWYgKHJldCkgewo+PiArCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSB0ZXN0X3ZfaGVpZ2h0IChE UF9URVNUX1ZfSEVJR0hUX0hJKVxuIik7Cj4+ICsJCWdvdG8gZXhpdDsKPj4gKwl9Cj4+ICsJcHJf ZGVidWcoIlRFU1RfVl9IRUlHSFQgPSAlZFxuIiwKPj4gKwkJbGluay0+ZHBfbGluay50ZXN0X3Zp ZGVvLnRlc3Rfdl9oZWlnaHQpOwo+PiArCj4+ICsJcmV0ID0gZHBfbGlua19wYXJzZV90aW1pbmdf cGFyYW1zMyhsaW5rLCBEUF9URVNUX01JU0MxLAo+PiArCQkmbGluay0+ZHBfbGluay50ZXN0X3Zp ZGVvLnRlc3RfcnJfZCk7Cj4+ICsJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfcnJfZCAm PSBEUF9URVNUX1JFRlJFU0hfREVOT01JTkFUT1I7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlwcl9l cnIoImZhaWxlZCB0byBwYXJzZSB0ZXN0X3JyX2QgKERQX1RFU1RfTUlTQzEpXG4iKTsKPj4gKwkJ Z290byBleGl0Owo+PiArCX0KPj4gKwlwcl9kZWJ1ZygiVEVTVF9SRUZSRVNIX0RFTk9NSU5BVE9S ID0gJWRcbiIsCj4+ICsJCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3JyX2QpOwo+PiAr Cj4+ICsJcmV0ID0gZHBfbGlua19wYXJzZV90aW1pbmdfcGFyYW1zMyhsaW5rLCAKPj4gRFBfVEVT VF9SRUZSRVNIX1JBVEVfTlVNRVJBVE9SLAo+PiArCQkmbGluay0+ZHBfbGluay50ZXN0X3ZpZGVv LnRlc3RfcnJfbik7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlwcl9lcnIoImZhaWxlZCB0byBwYXJz ZSB0ZXN0X3JyX24gCj4+IChEUF9URVNUX1JFRlJFU0hfUkFURV9OVU1FUkFUT1IpXG4iKTsKPj4g KwkJZ290byBleGl0Owo+PiArCX0KPj4gKwlwcl9kZWJ1ZygiVEVTVF9SRUZSRVNIX05VTUVSQVRP UiA9ICVkXG4iLAo+PiArCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9ycl9uKTsKPiAK PiBJbnN0ZWFkIG9mIHNwcmlua2xpbmcgYWxsIG9mIHRoZXNlIHByX2RlYnVnIG1lc3NhZ2VzIGFy b3VuZCwganVzdCBoYXZlIAo+IG9uZSBiaWcKPiBkZWJ1ZyBhdCB0aGUgZW5kIHRvIHByaW50IGV2 ZXJ5dGhpbmcuCj4gCj4+ICtleGl0Ogo+IAo+IFRoaXMgbGFiZWwgaXNuJ3QgdXNlZnVsLCBqdXN0 IHJldHVybiBkaXJlY3RseSBhYm92ZQo+IAo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4g Ky8qKgo+PiArICogZHBfbGlua19wYXJzZV9saW5rX3RyYWluaW5nX3BhcmFtcygpIC0gcGFyc2Vz IGxpbmsgdHJhaW5pbmcgCj4+IHBhcmFtZXRlcnMgZnJvbQo+PiArICogRFBDRAo+PiArICogQGxp bms6IERpc3BsYXkgUG9ydCBEcml2ZXIgZGF0YQo+PiArICoKPj4gKyAqIFJldHVybnMgMCBpZiBp dCBzdWNjZXNzZnVsbHkgcGFyc2VzIHRoZSBsaW5rIHJhdGUgKEJ5dGUgMHgyMTkpIGFuZCAKPj4g bGFuZQo+PiArICogY291bnQgKEJ5dGUgMHgyMjApLCBhbmQgaWYgdGhlc2UgdmFsdWVzIHBhcnNl IGFyZSB2YWxpZC4KPj4gKyAqLwo+PiArc3RhdGljIGludCBkcF9saW5rX3BhcnNlX2xpbmtfdHJh aW5pbmdfcGFyYW1zKHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgCj4+ICpsaW5rKQo+PiArewo+PiAr CXU4IGJwOwo+PiArCXU4IGRhdGE7Cj4gCj4gWW91IGRvbid0IG5lZWQgYm90aCBicCBhbmQgZGF0 YQo+IAo+PiArCWludCByZXQgPSAwOwo+PiArCWludCBybGVuOwo+IAo+IHNzaXplX3QKPiAKPj4g KwlpbnQgY29uc3QgcGFyYW1fbGVuID0gMHgxOwo+IAo+IEp1c3QgdXNlIDEgZGlyZWN0bHkgYmVs b3cuCj4gCj4+ICsKPj4gKwlybGVuID0gZHJtX2RwX2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9h dXgsIERQX1RFU1RfTElOS19SQVRFLAo+PiArCQkJJmJwLCBwYXJhbV9sZW4pOwo+PiArCWlmIChy bGVuIDwgcGFyYW1fbGVuKSB7Cj4+ICsJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgbGluayByYXRl XG4iKTsKPj4gKwkJcmV0ID0gLUVJTlZBTDsKPj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4gKwlk YXRhID0gYnA7Cj4+ICsKPj4gKwlpZiAoIWlzX2xpbmtfcmF0ZV92YWxpZChkYXRhKSkgewo+PiAr CQlwcl9lcnIoImludmFsaWQgbGluayByYXRlID0gMHgleFxuIiwgZGF0YSk7Cj4+ICsJCXJldCA9 IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZXhpdDsKPj4gKwl9Cj4+ICsKPj4gKwlsaW5rLT5yZXF1ZXN0 LnRlc3RfbGlua19yYXRlID0gZGF0YTsKPj4gKwlwcl9kZWJ1ZygibGluayByYXRlID0gMHgleFxu IiwgbGluay0+cmVxdWVzdC50ZXN0X2xpbmtfcmF0ZSk7Cj4+ICsKPj4gKwlybGVuID0gZHJtX2Rw X2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9hdXgsIERQX1RFU1RfTEFORV9DT1VOVCwKPj4gKwkJ CSZicCwgcGFyYW1fbGVuKTsKPj4gKwlpZiAocmxlbiA8IHBhcmFtX2xlbikgewo+PiArCQlwcl9l cnIoImZhaWxlZCB0byByZWFkIGxhbmUgY291bnRcbiIpOwo+PiArCQlyZXQgPSAtRUlOVkFMOwo+ PiArCQlnb3RvIGV4aXQ7Cj4+ICsJfQo+PiArCWRhdGEgPSBicDsKPj4gKwlkYXRhICY9IDB4MUY7 Cj4gCj4gRFBfTUFYX0xBTkVfQ09VTlRfTUFTSwo+IAo+PiArCj4+ICsJaWYgKCFpc19sYW5lX2Nv dW50X3ZhbGlkKGRhdGEpKSB7Cj4gCj4gWW91IG1pZ2h0IGFsc28gd2FudCB0byBkYXRhIGFnYWlu c3QgbWF4IGxhbmVzCj4gCj4+ICsJCXByX2VycigiaW52YWxpZCBsYW5lIGNvdW50ID0gMHgleFxu IiwgZGF0YSk7Cj4+ICsJCXJldCA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZXhpdDsKPj4gKwl9Cj4+ ICsKPj4gKwlsaW5rLT5yZXF1ZXN0LnRlc3RfbGFuZV9jb3VudCA9IGRhdGE7Cj4+ICsJcHJfZGVi dWcoImxhbmUgY291bnQgPSAweCV4XG4iLCBsaW5rLT5yZXF1ZXN0LnRlc3RfbGFuZV9jb3VudCk7 Cj4+ICtleGl0Ogo+PiArCXJldHVybiByZXQ7Cj4gCj4gcmV0dXJuIGRpcmVjdGx5IGFib3ZlIGFu ZCByZW1vdmUgZXhpdCArIHJldDsKPiAKPj4gK30KPj4gKwo+PiArc3RhdGljIGJvb2wgZHBfbGlu a19pc19waHlfdGVzdF9wYXR0ZXJuX3N1cHBvcnRlZCh1MzIgCj4+IHBoeV90ZXN0X3BhdHRlcm5f c2VsKQo+PiArewo+PiArCXN3aXRjaCAocGh5X3Rlc3RfcGF0dGVybl9zZWwpIHsKPj4gKwljYXNl IERQX1RFU1RfUEhZX1BBVFRFUk5fTk9ORToKPj4gKwljYXNlIERQX1RFU1RfUEhZX1BBVFRFUk5f RDEwXzJfTk9fU0NSQU1CTElORzoKPj4gKwljYXNlIERQX1RFU1RfUEhZX1BBVFRFUk5fU1lNQk9M X0VSUl9NRUFTVVJFTUVOVF9DTlQ6Cj4+ICsJY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOX1BSQlM3 Ogo+PiArCWNhc2UgRFBfVEVTVF9QSFlfUEFUVEVSTl84MF9CSVRfQ1VTVE9NX1BBVFRFUk46Cj4+ ICsJY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOX0hCUjJfQ1RTX0VZRV9QQVRURVJOOgo+PiArCQly ZXR1cm4gdHJ1ZTsKPj4gKwlkZWZhdWx0Ogo+PiArCQlyZXR1cm4gZmFsc2U7Cj4+ICsJfQo+PiAr fQo+PiArCj4+ICsvKioKPj4gKyAqIGRwX3BhcnNlX3BoeV90ZXN0X3BhcmFtcygpIC0gcGFyc2Vz IHRoZSBwaHkgbGluayBwYXJhbWV0ZXJzCj4+ICsgKiBAbGluazogRGlzcGxheSBQb3J0IERyaXZl ciBkYXRhCj4+ICsgKgo+PiArICogUGFyc2VzIHRoZSBEUENEIChCeXRlIDB4MjQ4KSBmb3IgdGhl IERQIFBIWSBsaW5rIHBhdHRlcm4gdGhhdCBpcyAKPj4gYmVpbmcKPj4gKyAqIHJlcXVlc3RlZC4K Pj4gKyAqLwo+PiArc3RhdGljIGludCBkcF9saW5rX3BhcnNlX3BoeV90ZXN0X3BhcmFtcyhzdHJ1 Y3QgZHBfbGlua19wcml2YXRlIAo+PiAqbGluaykKPj4gK3sKPj4gKwl1OCBicDsKPj4gKwl1OCBk YXRhOwo+IAo+IE9ubHkgbmVlZCBvbmUgb2YgdGhlc2UuCj4gCj4+ICsJaW50IHJsZW47Cj4gCj4g c3NpemVfdAo+IAo+PiArCWludCBjb25zdCBwYXJhbV9sZW4gPSAweDE7Cj4gCj4gSnVzdCB1c2Ug MSBiZWxvdwo+IAo+PiArCWludCByZXQgPSAwOwo+PiArCj4+ICsJcmxlbiA9IGRybV9kcF9kcGNk X3JlYWQobGluay0+YXV4LT5kcm1fYXV4LCBEUF9URVNUX1BIWV9QQVRURVJOLAo+PiArCQkJJmJw LCBwYXJhbV9sZW4pOwo+PiArCWlmIChybGVuIDwgcGFyYW1fbGVuKSB7Cj4gCj4gRldJVywgZHJt X2RwX2RwY2RfcmVhZCB3aWxsIHJldHVybiBlaXRoZXIgbGVuIG9yIGFuIC1lcnJuby4gUGFydGlh bCAKPiByZWFkcyByZXR1cm4KPiAtRVBST1RPLiBTbyBpbnN0ZWFkIG9mIGNoZWNraW5nIHRoYXQg cmxlbiA8IHBhcmFtX2xlbiwgeW91IGNhbiBqdXN0IGRvIAo+IHJsZW4gPCAwLgo+IAo+IFBsZWFz ZSBhbHNvIGNoYW5nZSBhbGwgb2YgdGhlIDEtYnl0ZSByZWFkcyBvdmVyIHRvIHVzaW5nIAo+IGRy bV9kcF9kcGNkX3JlYWRiKCkuCj4gCj4gCj4+ICsJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgcGh5 IGxpbmsgcGF0dGVyblxuIik7Cj4gCj4gcHJpbnQgYW5kIHJldHVybiBybGVuLgo+IAo+PiArCQly ZXQgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGVuZDsKPj4gKwl9Cj4+ICsKPj4gKwlkYXRhID0gYnA7 Cj4+ICsKPj4gKwlsaW5rLT5kcF9saW5rLnBoeV9wYXJhbXMucGh5X3Rlc3RfcGF0dGVybl9zZWwg PSBkYXRhOwo+PiArCj4+ICsJcHJfZGVidWcoInBoeV90ZXN0X3BhdHRlcm5fc2VsID0gJXNcbiIs Cj4+ICsJCQlkcF9saW5rX2dldF9waHlfdGVzdF9wYXR0ZXJuKGRhdGEpKTsKPj4gKwo+PiArCWlm ICghZHBfbGlua19pc19waHlfdGVzdF9wYXR0ZXJuX3N1cHBvcnRlZChkYXRhKSkKPiAKPiBKdXN0 IGVtYmVkIHRoYXQgY29kZSBoZXJlLgo+IAo+PiArCQlyZXQgPSAtRUlOVkFMOwo+PiArZW5kOgo+ IAo+IFJlbW92ZSBsYWJlbC9yZXQgYW5kIHJldHVybiBkaXJlY3RseQo+IAo+PiArCXJldHVybiBy ZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjaGFyICpkcF9saW5rX2dldF90ZXN0X25hbWUodTMy IHRlc3RfcmVxdWVzdGVkKQo+PiArewo+PiArCXN3aXRjaCAodGVzdF9yZXF1ZXN0ZWQpIHsKPj4g KwljYXNlIERQX1RFU1RfTElOS19UUkFJTklORzoKPj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9T VFIoRFBfVEVTVF9MSU5LX1RSQUlOSU5HKTsKPj4gKwljYXNlIERQX1RFU1RfTElOS19WSURFT19Q QVRURVJOOgo+PiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihEUF9URVNUX0xJTktfVklERU9f UEFUVEVSTik7Cj4+ICsJY2FzZSBEUF9URVNUX0xJTktfRURJRF9SRUFEOgo+PiArCQlyZXR1cm4g RFBfTElOS19FTlVNX1NUUihEUF9URVNUX0xJTktfRURJRF9SRUFEKTsKPj4gKwljYXNlIERQX1RF U1RfTElOS19QSFlfVEVTVF9QQVRURVJOOgo+PiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihE UF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTik7Cj4+ICsJY2FzZSBEUF9URVNUX0xJTktfQVVE SU9fUEFUVEVSTjoKPj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoRFBfVEVTVF9MSU5LX0FV RElPX1BBVFRFUk4pOwo+PiArCWRlZmF1bHQ6Cj4+ICsJCXJldHVybiAidW5rbm93biI7Cj4+ICsJ fQo+PiArfQo+IAo+IFJlbW92ZSB0aGlzIGFuZCBqdXN0IHByaW50IHRoZSBlbnVtLgo+IAo+PiAr Cj4+ICsvKioKPj4gKyAqIGRwX2xpbmtfaXNfdmlkZW9fYXVkaW9fdGVzdF9yZXF1ZXN0ZWQoKSAt IGNoZWNrcyBmb3IgYXVkaW8vdmlkZW8gCj4+IGxpbmsgcmVxdWVzdAo+PiArICogQGxpbms6IGxp bmsgcmVxdWVzdGVkIGJ5IHRoZSBzaW5rCj4+ICsgKgo+PiArICogUmV0dXJucyB0cnVlIGlmIHRo ZSByZXF1ZXN0ZWQgbGluayBpcyBhIHBlcm1pdHRlZCBhdWRpby92aWRlbyAKPj4gbGluay4KPj4g KyAqLwo+PiArc3RhdGljIGJvb2wgZHBfbGlua19pc192aWRlb19hdWRpb190ZXN0X3JlcXVlc3Rl ZCh1MzIgbGluaykKPj4gK3sKPiAKPiBTaG91bGQgeW91IGJlIG1hc2tpbmcgbGluayB0byBpc29s YXRlIHRoZXNlIGJpdHM/Cj4gCj4+ICsJcmV0dXJuIChsaW5rID09IERQX1RFU1RfTElOS19WSURF T19QQVRURVJOKSB8fAo+PiArCQkobGluayA9PSAoRFBfVEVTVF9MSU5LX0FVRElPX1BBVFRFUk4g fAo+PiArCQlEUF9URVNUX0xJTktfVklERU9fUEFUVEVSTikpIHx8Cj4+ICsJCShsaW5rID09IERQ X1RFU1RfTElOS19BVURJT19QQVRURVJOKSB8fAo+PiArCQkobGluayA9PSAoRFBfVEVTVF9MSU5L X0FVRElPX1BBVFRFUk4gfAo+PiArCQlEUF9URVNUX0xJTktfQVVESU9fRElTQUJMRURfVklERU8p KTsKPiAKPiBBbmQgb25jZSB5b3UgbWFzayB0aGUgdmFsdWUsIGp1c3QgY2hlY2sgaWYgYW55IG9m IHRoZSBiaXRzIGFyZSBzZXQgCj4gaW5zdGVhZCBvZgo+IGVudW1lcmF0aW5nIGFsbCBwb3NzaWJs ZSB2YWx1ZXMuCj4gCj4gCj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogZHBfbGlua19zdXBwb3J0 ZWQoKSAtIGNoZWNrcyBpZiBsaW5rIHJlcXVlc3RlZCBieSBzaW5rIGlzIAo+PiBzdXBwb3J0ZWQK Pj4gKyAqIEB0ZXN0X3JlcXVlc3RlZDogbGluayByZXF1ZXN0ZWQgYnkgdGhlIHNpbmsKPj4gKyAq Cj4+ICsgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlcXVlc3RlZCBsaW5rIGlzIHN1cHBvcnRlZC4K Pj4gKyAqLwo+PiArc3RhdGljIGJvb2wgZHBfbGlua19pc190ZXN0X3N1cHBvcnRlZCh1MzIgdGVz dF9yZXF1ZXN0ZWQpCj4+ICt7Cj4+ICsJcmV0dXJuICh0ZXN0X3JlcXVlc3RlZCA9PSBEUF9URVNU X0xJTktfVFJBSU5JTkcpIHx8Cj4+ICsJCSh0ZXN0X3JlcXVlc3RlZCA9PSBEUF9URVNUX0xJTktf RURJRF9SRUFEKSB8fAo+PiArCQkodGVzdF9yZXF1ZXN0ZWQgPT0gRFBfVEVTVF9MSU5LX1BIWV9U RVNUX1BBVFRFUk4pIHx8Cj4+ICsJCWRwX2xpbmtfaXNfdmlkZW9fYXVkaW9fdGVzdF9yZXF1ZXN0 ZWQodGVzdF9yZXF1ZXN0ZWQpOwo+IAo+IEkgdGhpbmsgdGhpcyBhbGwgZXF1YXRlcyB0bzoKPiAK PiAJcmV0dXJuIHRlc3RfcmVxdWVzdGVkICE9IERQX1RFU1RfTElOS19GQVVYX1BBVFRFUk47Cj4g Cj4gYW5kIGluIHRoYXQgY2FzZSwgeW91IGNhbiBqdXN0IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIGFu ZCBpbnNlcnQgdGhhdCAKPiBjb25kaXRpb24gaW4KPiB0aGUgaWYgc3RhdGVtZW50IGJlbG93Lgo+ IAo+PiArfQo+PiArCj4+ICtzdGF0aWMgYm9vbCBkcF9saW5rX2lzX3Rlc3RfZWRpZF9yZWFkKHN0 cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmspCj4+ICt7Cj4+ICsJcmV0dXJuIChsaW5rLT5yZXF1 ZXN0LnRlc3RfcmVxdWVzdGVkID09IERQX1RFU1RfTElOS19FRElEX1JFQUQpOwo+PiArfQo+IAo+ IFRoaXMgZG9lc24ndCB3YXJyYW50IGl0cyBvd24gZnVuY3Rpb24uIEFsc28sIHNob3VsZCB0aGlz IGJlICYgaW5zdGVhZCAKPiBvZiA9PT8KPiAKPj4gKwo+PiArLyoqCj4+ICsgKiBkcF9zaW5rX3Bh cnNlX3Rlc3RfcmVxdWVzdCgpIC0gcGFyc2VzIGxpbmsgcmVxdWVzdCBwYXJhbWV0ZXJzIGZyb20g Cj4+IHNpbmsKPj4gKyAqIEBsaW5rOiBEaXNwbGF5IFBvcnQgRHJpdmVyIGRhdGEKPj4gKyAqCj4+ ICsgKiBQYXJzZXMgdGhlIERQQ0QgdG8gY2hlY2sgaWYgYW4gYXV0b21hdGVkIGxpbmsgaXMgcmVx dWVzdGVkIChCeXRlIAo+PiAweDIwMSksCj4+ICsgKiBhbmQgd2hhdCB0eXBlIG9mIGxpbmsgYXV0 b21hdGlvbiBpcyBiZWluZyByZXF1ZXN0ZWQgKEJ5dGUgMHgyMTgpLgo+PiArICovCj4+ICtzdGF0 aWMgaW50IGRwX2xpbmtfcGFyc2VfcmVxdWVzdChzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5r KQo+PiArewo+PiArCWludCByZXQgPSAwOwo+PiArCXU4IGJwOwo+PiArCXU4IGRhdGE7Cj4gCj4g T25seSBuZWVkIDEgb2YgYnAvZGF0YQo+IAo+PiArCWludCBybGVuOwo+IAo+IHNzaXplX3QKPiAK Pj4gKwl1MzIgY29uc3QgcGFyYW1fbGVuID0gMHgxOwo+IAo+IE5vdCBuZWVkZWQsIHVzZSBkcm1f ZHBfZHBjZF9yZWFkYigpCj4gCj4+ICsKPj4gKwkvKioKPj4gKwkgKiBSZWFkIHRoZSBkZXZpY2Ug c2VydmljZSBJUlEgdmVjdG9yIChCeXRlIDB4MjAxKSB0byBkZXRlcm1pbmUKPj4gKwkgKiB3aGV0 aGVyIGFuIGF1dG9tYXRlZCBsaW5rIGhhcyBiZWVuIHJlcXVlc3RlZCBieSB0aGUgc2luay4KPj4g KwkgKi8KPj4gKwlybGVuID0gZHJtX2RwX2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9hdXgsCj4+ ICsJCURQX0RFVklDRV9TRVJWSUNFX0lSUV9WRUNUT1IsICZicCwgcGFyYW1fbGVuKTsKPj4gKwlp ZiAocmxlbiA8IHBhcmFtX2xlbikgewo+PiArCQlwcl9lcnIoImF1eCByZWFkIGZhaWxlZFxuIik7 Cj4gCj4gUHJpbnQgZXJyb3IuIFRoaXMgZ29lcyBmb3Igb3RoZXIgZmFpbHVyZSBtZXNzYWdlcyBp biB0aGlzIGZpbGUuCj4gCj4+ICsJCXJldCA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZW5kOwo+PiAr CX0KPj4gKwo+PiArCWRhdGEgPSBicDsKPj4gKwo+PiArCXByX2RlYnVnKCJkZXZpY2Ugc2Vydmlj ZSBpcnEgdmVjdG9yID0gMHgleFxuIiwgZGF0YSk7Cj4+ICsKPj4gKwlpZiAoIShkYXRhICYgRFBf QVVUT01BVEVEX1RFU1RfUkVRVUVTVCkpIHsKPj4gKwkJcHJfZGVidWcoIm5vIHRlc3QgcmVxdWVz dGVkXG4iKTsKPj4gKwkJcmV0dXJuIDA7Cj4+ICsJfQo+PiArCj4+ICsJLyoqCj4+ICsJICogUmVh ZCB0aGUgbGluayByZXF1ZXN0IGJ5dGUgKEJ5dGUgMHgyMTgpIHRvIGRldGVybWluZSB3aGF0IHR5 cGUKPj4gKwkgKiBvZiBhdXRvbWF0ZWQgbGluayBoYXMgYmVlbiByZXF1ZXN0ZWQgYnkgdGhlIHNp bmsuCj4+ICsJICovCj4+ICsJcmxlbiA9IGRybV9kcF9kcGNkX3JlYWQobGluay0+YXV4LT5kcm1f YXV4LCBEUF9URVNUX1JFUVVFU1QsCj4+ICsJCQkmYnAsIHBhcmFtX2xlbik7Cj4+ICsJaWYgKHJs ZW4gPCBwYXJhbV9sZW4pIHsKPj4gKwkJcHJfZXJyKCJhdXggcmVhZCBmYWlsZWRcbiIpOwo+PiAr CQlyZXQgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGVuZDsKPj4gKwl9Cj4+ICsKPj4gKwlkYXRhID0g YnA7Cj4+ICsKPj4gKwlpZiAoIWRwX2xpbmtfaXNfdGVzdF9zdXBwb3J0ZWQoZGF0YSkpIHsKPj4g KwkJcHJfZGVidWcoImxpbmsgMHgleCBub3Qgc3VwcG9ydGVkXG4iLCBkYXRhKTsKPj4gKwkJZ290 byBlbmQ7Cj4+ICsJfQo+PiArCj4+ICsJcHJfZGVidWcoIiVzICgweCV4KSByZXF1ZXN0ZWRcbiIs IGRwX2xpbmtfZ2V0X3Rlc3RfbmFtZShkYXRhKSwgCj4+IGRhdGEpOwo+PiArCWxpbmstPnJlcXVl c3QudGVzdF9yZXF1ZXN0ZWQgPSBkYXRhOwo+IAo+IElmIHRlc3RfcmVxdWVzdGVkIGlzIG9ubHkg dXNlZCBpbiB0aGUgc2NvcGUgb2YgdGhpcyBmdW5jdGlvbiwganVzdCB1c2UgCj4gYSBsb2NhbAo+ IGFuZCBwYXNzIGl0IGFyb3VuZC4gSWYgdGVzdF9yZXF1ZXN0ZWQgaXMgdXNlZCBvdXRzaWRlIHRo ZSBzY29wZSBvZiB0aGlzCj4gZnVuY3Rpb24sIHlvdSBuZWVkIGxvY2tpbmcuCj4gCj4+ICsKPj4g KwlpZiAobGluay0+cmVxdWVzdC50ZXN0X3JlcXVlc3RlZCA9PSBEUF9URVNUX0xJTktfUEhZX1RF U1RfUEFUVEVSTikgewo+PiArCQlyZXQgPSBkcF9saW5rX3BhcnNlX3BoeV90ZXN0X3BhcmFtcyhs aW5rKTsKPj4gKwkJaWYgKHJldCkKPj4gKwkJCWdvdG8gZW5kOwo+PiArCQlyZXQgPSBkcF9saW5r X3BhcnNlX2xpbmtfdHJhaW5pbmdfcGFyYW1zKGxpbmspOwo+IAo+IENoZWNrIHRoZSByZXR1cm4g aGVyZSBvciBpdCBjb3VsZCBnZXQgc3RvbXBlZAo+IAo+PiArCX0KPj4gKwo+PiArCWlmIChsaW5r LT5yZXF1ZXN0LnRlc3RfcmVxdWVzdGVkID09IERQX1RFU1RfTElOS19UUkFJTklORykKPj4gKwkJ cmV0ID0gZHBfbGlua19wYXJzZV9saW5rX3RyYWluaW5nX3BhcmFtcyhsaW5rKTsKPiAKPiBDaGVj ayB0aGUgcmV0dXJuIGhlcmUgb3IgaXQgY291bGQgZ2V0IHN0b21wZWQKPiAKPj4gKwo+PiArCWlm IChkcF9saW5rX2lzX3ZpZGVvX2F1ZGlvX3Rlc3RfcmVxdWVzdGVkKAo+PiArCQkJbGluay0+cmVx dWVzdC50ZXN0X3JlcXVlc3RlZCkpIHsKPiAKPiBTaG91bGQgZml0IG9uIDEgbGluZSwgSSB0aGlu awo+IAo+PiArCQlyZXQgPSBkcF9saW5rX3BhcnNlX3ZpZGVvX3BhdHRlcm5fcGFyYW1zKGxpbmsp Owo+PiArCQlpZiAocmV0KQo+PiArCQkJZ290byBlbmQ7Cj4+ICsKPj4gKwkJcmV0ID0gZHBfbGlu a19wYXJzZV9hdWRpb19wYXR0ZXJuX3BhcmFtcyhsaW5rKTsKPiAKPiBDaGVjayB0aGUgcmV0dXJu IGhlcmUgb3IgaXQgY291bGQgZ2V0IHN0b21wZWQKPiAKPj4gKwl9Cj4+ICtlbmQ6Cj4+ICsJLyoq Cj4gCj4gLyoKPiAKPj4gKwkgKiBTZW5kIGEgRFBfVEVTVF9BQ0sgaWYgYWxsIGxpbmsgcGFyYW1l dGVycyBhcmUgdmFsaWQsIG90aGVyd2lzZSAKPj4gc2VuZAo+PiArCSAqIGEgRFBfVEVTVF9OQUsu Cj4+ICsJICovCj4+ICsJaWYgKHJldCkgewo+PiArCQlsaW5rLT5kcF9saW5rLnRlc3RfcmVzcG9u c2UgPSBEUF9URVNUX05BSzsKPj4gKwl9IGVsc2Ugewo+PiArCQlpZiAoIWRwX2xpbmtfaXNfdGVz dF9lZGlkX3JlYWQobGluaykpCj4+ICsJCQlsaW5rLT5kcF9saW5rLnRlc3RfcmVzcG9uc2UgPSBE UF9URVNUX0FDSzsKPj4gKwkJZWxzZQo+PiArCQkJbGluay0+ZHBfbGluay50ZXN0X3Jlc3BvbnNl ID0KPj4gKwkJCQlEUF9URVNUX0VESURfQ0hFQ0tTVU1fV1JJVEU7Cj4+ICsJfQo+PiArCj4+ICsJ cmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBkcF9saW5rX3BhcnNlX3Npbmtf Y291bnQoKSAtIHBhcnNlcyB0aGUgc2luayBjb3VudAo+PiArICoKPj4gKyAqIFBhcnNlcyB0aGUg RFBDRCB0byBjaGVjayBpZiB0aGVyZSBpcyBhbiB1cGRhdGUgdG8gdGhlIHNpbmsgY291bnQKPj4g KyAqIChCeXRlIDB4MjAwKSwgYW5kIHdoZXRoZXIgYWxsIHRoZSBzaW5rIGRldmljZXMgY29ubmVj dGVkIGhhdmUgCj4+IENvbnRlbnQKPj4gKyAqIFByb3RlY3Rpb24gZW5hYmxlZC4KPj4gKyAqLwo+ PiArc3RhdGljIGludCBkcF9saW5rX3BhcnNlX3NpbmtfY291bnQoc3RydWN0IGRwX2xpbmsgKmRw X2xpbmspCj4+ICt7Cj4+ICsJaW50IHJsZW47Cj4+ICsJaW50IGNvbnN0IHBhcmFtX2xlbiA9IDB4 MTsKPiAKPiBkcm1fZHBfZHBjZF9yZWFkYgo+IAo+PiArCXN0cnVjdCBkcF9saW5rX3ByaXZhdGUg KmxpbmsgPSBjb250YWluZXJfb2YoZHBfbGluaywKPj4gKwkJCXN0cnVjdCBkcF9saW5rX3ByaXZh dGUsIGRwX2xpbmspOwo+PiArCj4+ICsJcmxlbiA9IGRybV9kcF9kcGNkX3JlYWQobGluay0+YXV4 LT5kcm1fYXV4LCBEUF9TSU5LX0NPVU5ULAo+PiArCQkJJmxpbmstPmRwX2xpbmsuc2lua19jb3Vu dC5jb3VudCwgcGFyYW1fbGVuKTsKPj4gKwlpZiAocmxlbiA8IHBhcmFtX2xlbikgewo+PiArCQlw cl9lcnIoImZhaWxlZCB0byByZWFkIHNpbmsgY291bnRcbiIpOwo+IAo+IHByaW50IHJldAo+IAo+ PiArCQlyZXR1cm4gLUVJTlZBTDsKPiAKPiByZXR1cm4gcmV0Cj4gCj4+ICsJfQo+PiArCj4+ICsJ bGluay0+ZHBfbGluay5zaW5rX2NvdW50LmNwX3JlYWR5ID0KPj4gKwkJbGluay0+ZHBfbGluay5z aW5rX2NvdW50LmNvdW50ICYgRFBfU0lOS19DUF9SRUFEWTsKPiAKPiBjcF9yZWFkeSBpcyBvbmx5 IHVzZWQgaW4gdGhpcyBmdW5jdGlvbiwgcGxlYXNlIGRvbid0IHN0b3JlIHN0dWZmIGxpa2UgCj4g dGhpcwo+IGJleW9uZCBpdHMgc2NvcGUuCj4gCj4+ICsJLyogQklUIDcsIEJJVCA1OjAgKi8KPiAK PiBEb24ndCBuZWVkIHRoaXMgY29tbWVudAo+IAo+PiArCWxpbmstPmRwX2xpbmsuc2lua19jb3Vu dC5jb3VudCA9Cj4+ICsJCURQX0dFVF9TSU5LX0NPVU5UKGxpbmstPmRwX2xpbmsuc2lua19jb3Vu dC5jb3VudCk7Cj4+ICsKPj4gKwlwcl9kZWJ1Zygic2lua19jb3VudCA9IDB4JXgsIGNwX3JlYWR5 ID0gMHgleFxuIiwKPj4gKwkJbGluay0+ZHBfbGluay5zaW5rX2NvdW50LmNvdW50LAo+PiArCQls aW5rLT5kcF9saW5rLnNpbmtfY291bnQuY3BfcmVhZHkpOwo+PiArCXJldHVybiAwOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9saW5rX3BhcnNlX3Npbmtfc3RhdHVzX2ZpZWxkKHN0cnVj dCBkcF9saW5rX3ByaXZhdGUgCj4+ICpsaW5rKQo+PiArewo+PiArCWludCBsZW4gPSAwOwo+PiAr Cj4+ICsJbGluay0+cHJldl9zaW5rX2NvdW50ID0gbGluay0+ZHBfbGluay5zaW5rX2NvdW50LmNv dW50Owo+PiArCWRwX2xpbmtfcGFyc2Vfc2lua19jb3VudCgmbGluay0+ZHBfbGluayk7Cj4+ICsK Pj4gKwlsZW4gPSBkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKGxpbmstPmF1eC0+ZHJtX2F1 eCwKPj4gKwkJbGluay0+bGlua19zdGF0dXMpOwo+PiArCWlmIChsZW4gPCBEUF9MSU5LX1NUQVRV U19TSVpFKQo+PiArCQlwcl9lcnIoIkRQIGxpbmsgc3RhdHVzIHJlYWQgZmFpbGVkXG4iKTsKPj4g KwlkcF9saW5rX3BhcnNlX3JlcXVlc3QobGluayk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBib29s IGRwX2xpbmtfaXNfbGlua190cmFpbmluZ19yZXF1ZXN0ZWQoc3RydWN0IGRwX2xpbmtfcHJpdmF0 ZSAKPj4gKmxpbmspCj4+ICt7Cj4+ICsJcmV0dXJuIChsaW5rLT5yZXF1ZXN0LnRlc3RfcmVxdWVz dGVkID09IERQX1RFU1RfTElOS19UUkFJTklORyk7Cj4+ICt9Cj4gCj4gTm8gbmVlZCBmb3IgZGVk aWNhdGVkIGZ1bmN0aW9uCj4gCj4+ICsKPj4gKy8qKgo+PiArICogZHBfbGlua19wcm9jZXNzX2xp bmtfdHJhaW5pbmdfcmVxdWVzdCgpIC0gcHJvY2Vzc2VzIG5ldyB0cmFpbmluZyAKPj4gcmVxdWVz dHMKPj4gKyAqIEBsaW5rOiBEaXNwbGF5IFBvcnQgbGluayBkYXRhCj4+ICsgKgo+PiArICogVGhp cyBmdW5jdGlvbiB3aWxsIGhhbmRsZSBuZXcgbGluayB0cmFpbmluZyByZXF1ZXN0cyB0aGF0IGFy ZSAKPj4gaW5pdGlhdGVkIGJ5Cj4+ICsgKiB0aGUgc2luay4gSW4gcGFydGljdWxhciwgaXQgd2ls bCB1cGRhdGUgdGhlIHJlcXVlc3RlZCBsYW5lIGNvdW50IAo+PiBhbmQgbGluawo+PiArICogbGlu ayByYXRlLCBhbmQgdGhlbiB0cmlnZ2VyIHRoZSBsaW5rIHJldHJhaW5pbmcgcHJvY2VkdXJlLgo+ PiArICoKPj4gKyAqIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAwIGlmIGEgbGluayB0cmFpbmlu ZyByZXF1ZXN0IGhhcyBiZWVuIAo+PiBwcm9jZXNzZWQsCj4+ICsgKiBvdGhlcndpc2UgaXQgd2ls bCByZXR1cm4gLUVJTlZBTC4KPj4gKyAqLwo+PiArc3RhdGljIGludCBkcF9saW5rX3Byb2Nlc3Nf bGlua190cmFpbmluZ19yZXF1ZXN0KHN0cnVjdCAKPj4gZHBfbGlua19wcml2YXRlICpsaW5rKQo+ PiArewo+PiArCWlmICghZHBfbGlua19pc19saW5rX3RyYWluaW5nX3JlcXVlc3RlZChsaW5rKSkK Pj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKwlwcl9kZWJ1ZygiJXMgbGluayByYXRlID0g MHgleCwgbGFuZSBjb3VudCA9IDB4JXhcbiIsCj4+ICsJCQlkcF9saW5rX2dldF90ZXN0X25hbWUo RFBfVEVTVF9MSU5LX1RSQUlOSU5HKSwKPj4gKwkJCWxpbmstPnJlcXVlc3QudGVzdF9saW5rX3Jh dGUsCj4+ICsJCQlsaW5rLT5yZXF1ZXN0LnRlc3RfbGFuZV9jb3VudCk7Cj4+ICsKPj4gKwlsaW5r LT5kcF9saW5rLmxpbmtfcGFyYW1zLmxhbmVfY291bnQgPSAKPj4gbGluay0+cmVxdWVzdC50ZXN0 X2xhbmVfY291bnQ7Cj4+ICsJbGluay0+ZHBfbGluay5saW5rX3BhcmFtcy5id19jb2RlID0gbGlu ay0+cmVxdWVzdC50ZXN0X2xpbmtfcmF0ZTsKPiAKPiBTaG91bGQgYmUgdXNpbmcgZHAgaGVscGVy IHN0cnVjdHMgZm9yIHRoaXMgc3R1ZmYKPiAKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgdm9pZCBkcF9saW5rX3NlbmRfdGVzdF9yZXNwb25zZShzdHJ1Y3QgZHBfbGlu ayAqZHBfbGluaykKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rID0gTlVM TDsKPj4gKwl1MzIgY29uc3QgcmVzcG9uc2VfbGVuID0gMHgxOwo+PiArCj4+ICsJaWYgKCFkcF9s aW5rKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVybjsKPj4g Kwl9Cj4+ICsKPj4gKwlsaW5rID0gY29udGFpbmVyX29mKGRwX2xpbmssIHN0cnVjdCBkcF9saW5r X3ByaXZhdGUsIGRwX2xpbmspOwo+PiArCj4+ICsJZHJtX2RwX2RwY2Rfd3JpdGUobGluay0+YXV4 LT5kcm1fYXV4LCBEUF9URVNUX1JFU1BPTlNFLAo+PiArCQkJJmRwX2xpbmstPnRlc3RfcmVzcG9u c2UsIHJlc3BvbnNlX2xlbik7Cj4gCj4gSSBzdHJvbmdseSBzdXNwZWN0IHlvdSBzaG91bGQgaGF2 ZSBsb2NraW5nIHByb3RlY3RpbmcgdGVzdF9yZXNwb25zZS4KPiAKPj4gK30KPj4gKwo+PiArc3Rh dGljIGludCBkcF9saW5rX3BzbV9jb25maWcoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmssCj4+ICsJ CQkgICAgICBzdHJ1Y3QgZHJtX2RwX2xpbmsgKmxpbmtfaW5mbywgYm9vbCBlbmFibGUpCj4gCj4g VGhpcyBpcyBhbm90aGVyIHJhY3kgZnVuY3Rpb24gd2hlcmUgeW91IGNvdWxkIGJlIHNpbXVsdGFu ZW91c2x5IAo+IHBvd2VyaW5nIHVwIGFuZAo+IHBvd2VyaW5nIGRvd24gdGhlIGxpbmsuIFNvIHlv dSBtaWdodCB3YW50IHNvbWUgbG9ja2luZy4KPiAKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfbGlua19w cml2YXRlICpsaW5rID0gTlVMTDsKPj4gKwlpbnQgcmV0ID0gMDsKPj4gKwo+PiArCWlmICghZHBf bGluaykgewo+PiArCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKPj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJbGluayA9IGNvbnRhaW5lcl9vZihkcF9saW5rLCBzdHJ1 Y3QgZHBfbGlua19wcml2YXRlLCBkcF9saW5rKTsKPj4gKwo+PiArCWlmIChlbmFibGUpCj4+ICsJ CXJldCA9IGRybV9kcF9saW5rX3Bvd2VyX2Rvd24obGluay0+YXV4LT5kcm1fYXV4LCBsaW5rX2lu Zm8pOwo+PiArCWVsc2UKPj4gKwkJcmV0ID0gZHJtX2RwX2xpbmtfcG93ZXJfdXAobGluay0+YXV4 LT5kcm1fYXV4LCBsaW5rX2luZm8pOwo+PiArCj4+ICsJaWYgKHJldCkKPj4gKwkJcHJfZXJyKCJG YWlsZWQgdG8gJXMgbG93IHBvd2VyIG1vZGVcbiIsCj4+ICsJCQkoZW5hYmxlID8gImVudGVyIiA6 ICJleGl0IikpOwo+IAo+IHVubmVlZGVkICgpLiBZb3UgY291bGQgcHJvYmFibHkgcmV3b3JkIHRv IGZpdCBvbiBvbmUgbGluZSB0b28KPiAKPj4gKwllbHNlCj4+ICsJCWRwX2xpbmstPnBzbV9lbmFi bGVkID0gZW5hYmxlOwo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGlj IHZvaWQgZHBfbGlua19zZW5kX2VkaWRfY2hlY2tzdW0oc3RydWN0IGRwX2xpbmsgKmRwX2xpbmss IHU4IAo+PiBjaGVja3N1bSkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5r ID0gTlVMTDsKPj4gKwl1MzIgY29uc3QgcmVzcG9uc2VfbGVuID0gMHgxOwo+IAo+IGRybV9kcF9k cGNkX3JlYWRiLiBJJ2xsIHN0b3AgY29tbWVudGluZyBvbiB0aGVzZSwganVzdCBwbGVhc2UgZ28g Cj4gdGhyb3VnaCBhbmQKPiBjb252ZXJ0IGFsbCAxLWJ5dGUgcmVhZHMvd3JpdGVzCj4gCj4+ICsK Pj4gKwlpZiAoIWRwX2xpbmspIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4g KwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWxpbmsgPSBjb250YWluZXJfb2YoZHBfbGluaywg c3RydWN0IGRwX2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7Cj4+ICsKPj4gKwlkcm1fZHBfZHBjZF93 cml0ZShsaW5rLT5hdXgtPmRybV9hdXgsIERQX1RFU1RfRURJRF9DSEVDS1NVTSwKPj4gKwkJCSZj aGVja3N1bSwgcmVzcG9uc2VfbGVuKTsKPiAKPiBDaGVjayBhbmQgcmV0dXJuIHRoZSByZXN1bHQK PiAKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9saW5rX3BhcnNlX3Z4X3B4KHN0cnVjdCBk cF9saW5rX3ByaXZhdGUgKmxpbmspCj4+ICt7Cj4+ICsJdTggYnA7Cj4+ICsJdTggZGF0YTsKPiAK PiBPbmx5IG5lZWQgb25lIG9mIHRoZXNlCj4gCj4+ICsJaW50IGNvbnN0IHBhcmFtX2xlbiA9IDB4 MTsKPiAKPiBkcm1fZHBfZHBjZF9yZWFkYgo+IAo+PiArCWludCByZXQgPSAwOwo+PiArCXUzMiB2 MCwgcDAsIHYxLCBwMSwgdjIsIHAyLCB2MywgcDM7Cj4+ICsJaW50IHJsZW47Cj4gCj4gc3NpemVf dAo+IAo+PiArCj4+ICsJcHJfZGVidWcoIlxuIik7Cj4gCj4gcmVtb3ZlCj4gCj4+ICsKPj4gKwly bGVuID0gZHJtX2RwX2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9hdXgsIAo+PiBEUF9BREpVU1Rf UkVRVUVTVF9MQU5FMF8xLAo+PiArCQkJJmJwLCBwYXJhbV9sZW4pOwo+PiArCWlmIChybGVuIDwg cGFyYW1fbGVuKSB7Cj4+ICsJCXByX2VycigiZmFpbGVkIHJlYWRpbmcgbGFuZXMgMC8xXG4iKTsK PiAKPiBwcmludCBlcnJvcgo+IAo+PiArCQlyZXQgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGVuZDsK Pj4gKwl9Cj4+ICsKPj4gKwlkYXRhID0gYnA7Cj4+ICsKPj4gKwlwcl9kZWJ1ZygibGFuZXMgMC8x IChCeXRlIDB4MjA2KTogMHgleFxuIiwgZGF0YSk7Cj4+ICsKPj4gKwl2MCA9IGRhdGEgJiAweDM7 Cj4+ICsJZGF0YSA9IGRhdGEgPj4gMjsKPj4gKwlwMCA9IGRhdGEgJiAweDM7Cj4+ICsJZGF0YSA9 IGRhdGEgPj4gMjsKPj4gKwo+PiArCXYxID0gZGF0YSAmIDB4MzsKPj4gKwlkYXRhID0gZGF0YSA+ PiAyOwo+PiArCXAxID0gZGF0YSAmIDB4MzsKPj4gKwlkYXRhID0gZGF0YSA+PiAyOwo+PiArCj4+ ICsJcmxlbiA9IGRybV9kcF9kcGNkX3JlYWQobGluay0+YXV4LT5kcm1fYXV4LCAKPj4gRFBfQURK VVNUX1JFUVVFU1RfTEFORTJfMywKPj4gKwkJCSZicCwgcGFyYW1fbGVuKTsKPj4gKwlpZiAocmxl biA8IHBhcmFtX2xlbikgewo+PiArCQlwcl9lcnIoImZhaWxlZCByZWFkaW5nIGxhbmVzIDIvM1xu Iik7Cj4+ICsJCXJldCA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+PiAr CWRhdGEgPSBicDsKPj4gKwo+PiArCXByX2RlYnVnKCJsYW5lcyAyLzMgKEJ5dGUgMHgyMDcpOiAw eCV4XG4iLCBkYXRhKTsKPj4gKwo+PiArCXYyID0gZGF0YSAmIDB4MzsKPj4gKwlkYXRhID0gZGF0 YSA+PiAyOwo+PiArCXAyID0gZGF0YSAmIDB4MzsKPj4gKwlkYXRhID0gZGF0YSA+PiAyOwo+PiAr Cj4+ICsJdjMgPSBkYXRhICYgMHgzOwo+PiArCWRhdGEgPSBkYXRhID4+IDI7Cj4+ICsJcDMgPSBk YXRhICYgMHgzOwo+PiArCWRhdGEgPSBkYXRhID4+IDI7Cj4gCj4gSSB0aGluayB5b3UgY2FuIHVz ZSBkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ZvbHRhZ2UoKSBmb3IgYWxsIG9mIAo+IHRoaXMu Cj4gCj4+ICsKPj4gKwlwcl9kZWJ1Zygidng6IDA9JWQsIDE9JWQsIDI9JWQsIDM9JWRcbiIsIHYw LCB2MSwgdjIsIHYzKTsKPj4gKwlwcl9kZWJ1ZygicHg6IDA9JWQsIDE9JWQsIDI9JWQsIDM9JWRc biIsIHAwLCBwMSwgcDIsIHAzKTsKPj4gKwo+PiArCS8qKgo+PiArCSAqIFVwZGF0ZSB0aGUgdm9s dGFnZSBhbmQgcHJlLWVtcGhhc2lzIGxldmVscyBhcyBwZXIgRFBDRCByZXF1ZXN0Cj4+ICsJICog dmVjdG9yLgo+PiArCSAqLwo+PiArCXByX2RlYnVnKCJDdXJyZW50OiB2X2xldmVsID0gMHgleCwg cF9sZXZlbCA9IDB4JXhcbiIsCj4+ICsJCQlsaW5rLT5kcF9saW5rLnBoeV9wYXJhbXMudl9sZXZl bCwKPj4gKwkJCWxpbmstPmRwX2xpbmsucGh5X3BhcmFtcy5wX2xldmVsKTsKPj4gKwlwcl9kZWJ1 ZygiUmVxdWVzdGVkOiB2X2xldmVsID0gMHgleCwgcF9sZXZlbCA9IDB4JXhcbiIsIHYwLCBwMCk7 Cj4+ICsJbGluay0+ZHBfbGluay5waHlfcGFyYW1zLnZfbGV2ZWwgPSB2MDsKPj4gKwlsaW5rLT5k cF9saW5rLnBoeV9wYXJhbXMucF9sZXZlbCA9IHAwOwo+PiArCj4+ICsJcHJfZGVidWcoIlN1Y2Nl c3NcbiIpOwo+IAo+IFJlbW92ZQo+IAo+PiArZW5kOgo+IAo+IHJldHVybiBkaXJlY3RseSBldmVy eXdoZXJlIGFuZCByZW1vdmUgZW5kICYgcmV0Cj4gCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4g Kwo+PiArLyoqCj4+ICsgKiBkcF9saW5rX3Byb2Nlc3NfcGh5X3Rlc3RfcGF0dGVybl9yZXF1ZXN0 KCkgLSBwcm9jZXNzIG5ldyBwaHkgbGluayAKPj4gcmVxdWVzdHMKPj4gKyAqIEBsaW5rOiBEaXNw bGF5IFBvcnQgRHJpdmVyIGRhdGEKPj4gKyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgaGFu ZGxlIG5ldyBwaHkgbGluayBwYXR0ZXJuIHJlcXVlc3RzIHRoYXQgYXJlIAo+PiBpbml0aWF0ZWQK Pj4gKyAqIGJ5IHRoZSBzaW5rLiBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gMCBpZiBhIHBoeSBs aW5rIHBhdHRlcm4gaGFzIAo+PiBiZWVuCj4+ICsgKiBwcm9jZXNzZWQsIG90aGVyd2lzZSBpdCB3 aWxsIHJldHVybiAtRUlOVkFMLgo+PiArICovCj4+ICtzdGF0aWMgaW50IGRwX2xpbmtfcHJvY2Vz c19waHlfdGVzdF9wYXR0ZXJuX3JlcXVlc3QoCj4+ICsJCXN0cnVjdCBkcF9saW5rX3ByaXZhdGUg KmxpbmspCj4+ICt7Cj4+ICsJdTMyIHRlc3RfbGlua19yYXRlID0gMCwgdGVzdF9sYW5lX2NvdW50 ID0gMDsKPj4gKwo+PiArCWlmICghKGxpbmstPnJlcXVlc3QudGVzdF9yZXF1ZXN0ZWQgJiBEUF9U RVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTikpIAo+PiB7Cj4gCj4gSXMgdGVzdF9yZXF1ZXN0ZWQg YWx3YXlzIGV4cGVjdGVkIHRvIGhhdmUgdGhpcyB2YWx1ZSBwb3B1bGF0ZWQgd2hlbgo+IGRwX2xp bmtfcHJvY2Vzc19yZXF1ZXN0KCk/Cj4gCj4+ICsJCXByX2RlYnVnKCJubyBwaHkgdGVzdFxuIik7 Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCXRlc3RfbGlua19yYXRlID0g bGluay0+cmVxdWVzdC50ZXN0X2xpbmtfcmF0ZTsKPj4gKwl0ZXN0X2xhbmVfY291bnQgPSBsaW5r LT5yZXF1ZXN0LnRlc3RfbGFuZV9jb3VudDsKPiAKPiBKdXN0IHVzZSB0aGVzZSB2YWx1ZXMgZGly ZWN0bHkgaW5zdGVhZCBvZiBhZGRpbmcgbW9yZSBsb2NhbHMuCj4gCj4+ICsKPj4gKwlpZiAoIWlz X2xpbmtfcmF0ZV92YWxpZCh0ZXN0X2xpbmtfcmF0ZSkgfHwKPj4gKwkJIWlzX2xhbmVfY291bnRf dmFsaWQodGVzdF9sYW5lX2NvdW50KSkgewo+PiArCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zOiBs aW5rIHJhdGUgPSAweCV4LCBsYW5lIGNvdW50ID0gMHgleFxuIiwKPj4gKwkJCQl0ZXN0X2xpbmtf cmF0ZSwgdGVzdF9sYW5lX2NvdW50KTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiAr Cj4+ICsJcHJfZGVidWcoInN0YXJ0XG4iKTsKPiAKPiBSZW1vdmUKPiAKPj4gKwo+PiArCXByX2lu Zm8oIkN1cnJlbnQ6IGJ3X2NvZGUgPSAweCV4LCBsYW5lIGNvdW50ID0gMHgleFxuIiwKPj4gKwkJ CWxpbmstPmRwX2xpbmsubGlua19wYXJhbXMuYndfY29kZSwKPj4gKwkJCWxpbmstPmRwX2xpbmsu bGlua19wYXJhbXMubGFuZV9jb3VudCk7Cj4+ICsKPj4gKwlwcl9pbmZvKCJSZXF1ZXN0ZWQ6IGJ3 X2NvZGUgPSAweCV4LCBsYW5lIGNvdW50ID0gMHgleFxuIiwKPj4gKwkJCXRlc3RfbGlua19yYXRl LCB0ZXN0X2xhbmVfY291bnQpOwo+IAo+IFRoZXNlIHNob3VsZCBiZSBkZWJ1ZyBsZXZlbCBwcmlu dHMKPiAKPj4gKwo+PiArCWxpbmstPmRwX2xpbmsubGlua19wYXJhbXMubGFuZV9jb3VudCA9IAo+ PiBsaW5rLT5yZXF1ZXN0LnRlc3RfbGFuZV9jb3VudDsKPj4gKwlsaW5rLT5kcF9saW5rLmxpbmtf cGFyYW1zLmJ3X2NvZGUgPSBsaW5rLT5yZXF1ZXN0LnRlc3RfbGlua19yYXRlOwo+PiArCj4+ICsJ ZHBfbGlua19wYXJzZV92eF9weChsaW5rKTsKPiAKPiBDaGVjayByZXR1cm4gdmFsdWUgYW5kIHBy b3BhZ2F0ZSBpdC4KPiAKPj4gKwo+PiArCXByX2RlYnVnKCJlbmRcbiIpOwo+IAo+IFJlbW92ZQo+ IAo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1OCBnZXRfbGlua19z dGF0dXMoY29uc3QgdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0sIAo+PiBpbnQg cikKPj4gK3sKPj4gKwlyZXR1cm4gbGlua19zdGF0dXNbciAtIERQX0xBTkUwXzFfU1RBVFVTXTsK PiAKPiBJIGRvbid0IHRoaW5rIHlvdSdyZSByZWFsbHkgc3VwcG9zZWQgdG8gcmVhY2ggaW50byB0 aGUgbGlua19zdGF0dXMgbGlrZSAKPiB0aGlzLgo+IEhvdyBhYm91dCBhZGRpbmcgYSBuZXcgaGVs cGVyIHRvIGNoZWNrIGZvciBEUF9MSU5LX1NUQVRVU19VUERBVEVEIGFuZCAKPiBvbmUgZm9yCj4g RFBfRE9XTlNUUkVBTV9QT1JUX1NUQVRVU19DSEFOR0VEPwo+IAo+PiArfQo+PiArCj4+ICsvKioK Pj4gKyAqIGRwX2xpbmtfcHJvY2Vzc19saW5rX3N0YXR1c191cGRhdGUoKSAtIHByb2Nlc3NlcyBs aW5rIHN0YXR1cyAKPj4gdXBkYXRlcwo+PiArICogQGxpbms6IERpc3BsYXkgUG9ydCBsaW5rIG1v ZHVsZSBkYXRhCj4+ICsgKgo+PiArICogVGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNrIGZvciBjaGFu Z2VzIGluIHRoZSBsaW5rIHN0YXR1cywgZS5nLiAKPj4gY2xvY2sKPj4gKyAqIHJlY292ZXJ5IGRv bmUgb24gYWxsIGxhbmVzLCBhbmQgdHJpZ2dlciBsaW5rIHRyYWluaW5nIGlmIHRoZXJlIGlzIAo+ PiBhCj4+ICsgKiBmYWlsdXJlL2Vycm9yIG9uIHRoZSBsaW5rLgo+PiArICoKPj4gKyAqIFRoZSBm dW5jdGlvbiB3aWxsIHJldHVybiAwIGlmIHRoZSBhIGxpbmsgc3RhdHVzIHVwZGF0ZSBoYXMgYmVl biAKPj4gcHJvY2Vzc2VkLAo+PiArICogb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIC1FSU5WQUwu Cj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgZHBfbGlua19wcm9jZXNzX2xpbmtfc3RhdHVzX3VwZGF0 ZShzdHJ1Y3QgZHBfbGlua19wcml2YXRlIAo+PiAqbGluaykKPj4gK3sKPj4gKwlpZiAoIShnZXRf bGlua19zdGF0dXMobGluay0+bGlua19zdGF0dXMsIAo+PiBEUF9MQU5FX0FMSUdOX1NUQVRVU19V UERBVEVEKSAmCj4+ICsJCURQX0xJTktfU1RBVFVTX1VQREFURUQpIHx8IC8qIGxpbmsgc3RhdHVz IHVwZGF0ZWQgKi8KPj4gKwkJKGRybV9kcF9jbG9ja19yZWNvdmVyeV9vayhsaW5rLT5saW5rX3N0 YXR1cywKPj4gKwkJCWxpbmstPmRwX2xpbmsubGlua19wYXJhbXMubGFuZV9jb3VudCkgJiYKPj4g KwkgICAgIGRybV9kcF9jaGFubmVsX2VxX29rKGxpbmstPmxpbmtfc3RhdHVzLAo+PiArCQkJbGlu ay0+ZHBfbGluay5saW5rX3BhcmFtcy5sYW5lX2NvdW50KSkpCj4gCj4gQ2FuIHlvdSBwbGVhc2Ug Zml4IHRoZSBhbGlnbm1lbnQgaGVyZSwgaXQncyB0b3VnaCB0byByZWFkLgo+IAo+PiArCQlyZXR1 cm4gLUVJTlZBTDsKPj4gKwo+PiArCXByX2RlYnVnKCJjaGFubmVsX2VxX2RvbmUgPSAlZCwgY2xv Y2tfcmVjb3ZlcnlfZG9uZSA9ICVkXG4iLAo+PiArCQkJZHJtX2RwX2Nsb2NrX3JlY292ZXJ5X29r KGxpbmstPmxpbmtfc3RhdHVzLAo+PiArCQkJbGluay0+ZHBfbGluay5saW5rX3BhcmFtcy5sYW5l X2NvdW50KSwKPj4gKwkJCWRybV9kcF9jbG9ja19yZWNvdmVyeV9vayhsaW5rLT5saW5rX3N0YXR1 cywKPj4gKwkJCWxpbmstPmRwX2xpbmsubGlua19wYXJhbXMubGFuZV9jb3VudCkpOwo+PiArCj4+ ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBib29sIGRwX2xpbmtfaXNfZHNfcG9y dF9zdGF0dXNfY2hhbmdlZChzdHJ1Y3QgZHBfbGlua19wcml2YXRlIAo+PiAqbGluaykKPj4gK3sK Pj4gKwlpZiAoZ2V0X2xpbmtfc3RhdHVzKGxpbmstPmxpbmtfc3RhdHVzLCBEUF9MQU5FX0FMSUdO X1NUQVRVU19VUERBVEVEKSAKPj4gJgo+PiArCQlEUF9ET1dOU1RSRUFNX1BPUlRfU1RBVFVTX0NI QU5HRUQpIC8qIHBvcnQgc3RhdHVzIGNoYW5nZWQgKi8KPj4gKwkJcmV0dXJuIHRydWU7Cj4+ICsK Pj4gKwlpZiAobGluay0+cHJldl9zaW5rX2NvdW50ICE9IGxpbmstPmRwX2xpbmsuc2lua19jb3Vu dC5jb3VudCkKPiAKPiBJdCBzZWVtcyBsaWtlIHRoaXMgaXMgcnVubmluZyBpbiBhIHNlcGFyYXRl IHRocmVhZCBmcm9tIHdoZXJlIAo+IHByZXZfc2lua19jb3VudCBpcwo+IHNldCwgcG90ZW50aWFs IHJhY2UgaGVyZT8KPiAKPj4gKwkJcmV0dXJuIHRydWU7Cj4+ICsKPj4gKwlyZXR1cm4gZmFsc2U7 Cj4gCj4gCXJldHVybiBsaW5rLT5wcmV2X3NpbmtfY291bnQgIT0gbGluay0+ZHBfbGluay5zaW5r X2NvdW50LmNvdW50Owo+IAo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGRwX2xpbmtfcHJvY2Vz c19kb3duc3RyZWFtX3BvcnRfc3RhdHVzX2NoYW5nZSgpIC0gcHJvY2VzcyBwb3J0IAo+PiBzdGF0 dXMgY2hhbmdlcwo+PiArICogQGxpbms6IERpc3BsYXkgUG9ydCBEcml2ZXIgZGF0YQo+PiArICoK Pj4gKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBoYW5kbGUgZG93bnN0cmVhbSBwb3J0IHVwZGF0ZXMg dGhhdCBhcmUgCj4+IGluaXRpYXRlZCBieQo+PiArICogdGhlIHNpbmsuIElmIHRoZSBkb3duc3Ry ZWFtIHBvcnQgc3RhdHVzIGhhcyBjaGFuZ2VkLCB0aGUgRURJRCBpcyAKPj4gcmVhZCB2aWEKPj4g KyAqIEFVWC4KPj4gKyAqCj4+ICsgKiBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gMCBpZiBhIGRv d25zdHJlYW0gcG9ydCB1cGRhdGUgaGFzIGJlZW4KPj4gKyAqIHByb2Nlc3NlZCwgb3RoZXJ3aXNl IGl0IHdpbGwgcmV0dXJuIC1FSU5WQUwuCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgZHBfbGlua19w cm9jZXNzX2RzX3BvcnRfc3RhdHVzX2NoYW5nZShzdHJ1Y3QgCj4+IGRwX2xpbmtfcHJpdmF0ZSAq bGluaykKPj4gK3sKPj4gKwlpZiAoIWRwX2xpbmtfaXNfZHNfcG9ydF9zdGF0dXNfY2hhbmdlZChs aW5rKSkKPiAKPiBKdXN0IGVtYmVkIHRoZSBjb250ZW50cyBvZiBpc19kc19wb3J0X3N0YXR1c19j aGFuZ2VkIGhlcmUsIG5vIG5lZWQgZm9yIAo+IDIgZnVuY3MKPiAKPj4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4+ICsKPj4gKwkvKiByZXNldCBwcmV2X3NpbmtfY291bnQgKi8KPj4gKwlsaW5rLT5wcmV2 X3NpbmtfY291bnQgPSBsaW5rLT5kcF9saW5rLnNpbmtfY291bnQuY291bnQ7Cj4+ICsKPj4gKwly ZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGJvb2wgZHBfbGlua19pc192aWRlb19wYXR0 ZXJuX3JlcXVlc3RlZChzdHJ1Y3QgZHBfbGlua19wcml2YXRlIAo+PiAqbGluaykKPj4gK3sKPj4g KwlyZXR1cm4gKGxpbmstPnJlcXVlc3QudGVzdF9yZXF1ZXN0ZWQgJiBEUF9URVNUX0xJTktfVklE RU9fUEFUVEVSTikKPj4gKwkJJiYgIShsaW5rLT5yZXF1ZXN0LnRlc3RfcmVxdWVzdGVkICYKPj4g KwkJRFBfVEVTVF9MSU5LX0FVRElPX0RJU0FCTEVEX1ZJREVPKTsKPj4gK30KPj4gKwo+PiArc3Rh dGljIGJvb2wgZHBfbGlua19pc19hdWRpb19wYXR0ZXJuX3JlcXVlc3RlZChzdHJ1Y3QgZHBfbGlu a19wcml2YXRlIAo+PiAqbGluaykKPj4gK3sKPj4gKwlyZXR1cm4gKGxpbmstPnJlcXVlc3QudGVz dF9yZXF1ZXN0ZWQgJiBEUF9URVNUX0xJTktfQVVESU9fUEFUVEVSTik7Cj4+ICt9Cj4+ICsKPj4g Ky8qKgo+PiArICogZHBfbGlua19wcm9jZXNzX3ZpZGVvX3BhdHRlcm5fcmVxdWVzdCgpIC0gcHJv Y2VzcyBuZXcgdmlkZW8gCj4+IHBhdHRlcm4gcmVxdWVzdAo+PiArICogQGxpbms6IERpc3BsYXkg UG9ydCBsaW5rIG1vZHVsZSdzIGRhdGEKPj4gKyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwg aGFuZGxlIGEgbmV3IHZpZGVvIHBhdHRlcm4gcmVxdWVzdCB0aGF0IGFyZSAKPj4gaW5pdGlhdGVk IGJ5Cj4+ICsgKiB0aGUgc2luay4gVGhpcyBpcyBhY2hlaWV2ZWQgYnkgZmlyc3Qgc2VuZGluZyBh IGRpc2Nvbm5lY3QgCj4+IG5vdGlmaWNhdGlvbiB0bwo+PiArICogdGhlIHNpbmsgZm9sbG93ZWQg YnkgYSBzdWJzZXF1ZW50IGNvbm5lY3Qgbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyIAo+PiBtb2R1 bGVzLAo+PiArICogd2hlcmUgaXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgdXNlciBtb2R1bGVzIHdv dWxkIGRyYXcgdGhlIHJlcXVpcmVkIAo+PiBsaW5rCj4+ICsgKiBwYXR0ZXJuLgo+PiArICovCj4+ ICtzdGF0aWMgaW50IGRwX2xpbmtfcHJvY2Vzc192aWRlb19wYXR0ZXJuX3JlcXVlc3Qoc3RydWN0 IAo+PiBkcF9saW5rX3ByaXZhdGUgKmxpbmspCj4+ICt7Cj4+ICsJaWYgKCFkcF9saW5rX2lzX3Zp ZGVvX3BhdHRlcm5fcmVxdWVzdGVkKGxpbmspKQo+IAo+IEp1c3QgZG8gdGhpcyBkaXJlY3RseSBp biBkcF9saW5rX3Byb2Nlc3NfcmVxdWVzdCBhbmQgZ2V0IHJpZCBvZiB0aGlzIAo+IGZ1bmN0aW9u Cj4gCj4+ICsJCWdvdG8gZW5kOwo+PiArCj4+ICsJcHJfZGVidWcoIiVzOiBiaXQgZGVwdGg9JWQo JWQgYnBwKSBwYXR0ZXJuPSVzXG4iLAo+PiArCQlkcF9saW5rX2dldF90ZXN0X25hbWUoRFBfVEVT VF9MSU5LX1ZJREVPX1BBVFRFUk4pLAo+PiArCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVz dF9iaXRfZGVwdGgsCj4+ICsJCWRwX2xpbmtfYml0X2RlcHRoX3RvX2JwcCgKPj4gKwkJbGluay0+ ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfYml0X2RlcHRoKSwKPj4gKwkJZHBfbGlua192aWRlb19w YXR0ZXJuX3RvX3N0cmluZygKPj4gKwkJCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3Zp ZGVvX3BhdHRlcm4pKTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArZW5kOgo+PiArCXJldHVybiAt RUlOVkFMOwo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGRwX2xpbmtfcHJvY2Vzc19hdWRpb19w YXR0ZXJuX3JlcXVlc3QoKSAtIHByb2Nlc3MgbmV3IGF1ZGlvIAo+PiBwYXR0ZXJuIHJlcXVlc3QK Pj4gKyAqIEBsaW5rOiBEaXNwbGF5IFBvcnQgbGluayBtb2R1bGUgZGF0YQo+PiArICoKPj4gKyAq IFRoaXMgZnVuY3Rpb24gd2lsbCBoYW5kbGUgYSBuZXcgYXVkaW8gcGF0dGVybiByZXF1ZXN0IHRo YXQgaXMgCj4+IGluaXRpYXRlZCBieQo+PiArICogdGhlIHNpbmsuIFRoaXMgaXMgYWNoZWlldmVk IGJ5IHNlbmRpbmcgdGhlIG5lY2Vzc2FyeSBzZWNvbmRhcnkgCj4+IGRhdGEgcGFja2V0cwo+PiAr ICogdG8gdGhlIHNpbmsuIEl0IGlzIGV4cGVjdGVkIHRoYXQgYW55IHNpbXVsYXRlbm91cyByZXF1 ZXN0cyBmb3IgCj4+IHZpZGVvCj4+ICsgKiBwYXR0ZXJucyB3aWxsIGJlIGhhbmRsZWQgYmVmb3Jl IHRoZSBhdWRpbyBwYXR0ZXJuIGlzIHNlbnQgdG8gdGhlIAo+PiBzaW5rLgo+PiArICovCj4+ICtz dGF0aWMgaW50IGRwX2xpbmtfcHJvY2Vzc19hdWRpb19wYXR0ZXJuX3JlcXVlc3Qoc3RydWN0IAo+ PiBkcF9saW5rX3ByaXZhdGUgKmxpbmspCj4+ICt7Cj4+ICsJaWYgKCFkcF9saW5rX2lzX2F1ZGlv X3BhdHRlcm5fcmVxdWVzdGVkKGxpbmspKQo+IAo+IFNhbWUgaGVyZQo+IAo+PiArCQlyZXR1cm4g LUVJTlZBTDsKPj4gKwo+PiArCXByX2RlYnVnKCJzYW1wbGluZ19yYXRlPSVzLCBjaGFubmVsX2Nv dW50PSVkLCBwYXR0ZXJuX3R5cGU9JXNcbiIsCj4+ICsJCWRwX2xpbmtfZ2V0X2F1ZGlvX3NhbXBs ZV9yYXRlKAo+PiArCQkJbGluay0+ZHBfbGluay50ZXN0X2F1ZGlvLnRlc3RfYXVkaW9fc2FtcGxp bmdfcmF0ZSksCj4+ICsJCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50ZXN0X2F1ZGlvX2NoYW5u ZWxfY291bnQsCj4+ICsJCWRwX2xpbmtfZ2V0X2F1ZGlvX3Rlc3RfcGF0dGVybigKPj4gKwkJCWxp bmstPmRwX2xpbmsudGVzdF9hdWRpby50ZXN0X2F1ZGlvX3BhdHRlcm5fdHlwZSkpOwo+PiArCj4+ ICsJcHJfZGVidWcoImF1ZGlvX3BlcmlvZDogY2gxPTB4JXgsIGNoMj0weCV4LCBjaDM9MHgleCwg Y2g0PTB4JXhcbiIsCj4+ICsJCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50ZXN0X2F1ZGlvX3Bl cmlvZF9jaF8xLAo+PiArCQlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8udGVzdF9hdWRpb19wZXJp b2RfY2hfMiwKPj4gKwkJbGluay0+ZHBfbGluay50ZXN0X2F1ZGlvLnRlc3RfYXVkaW9fcGVyaW9k X2NoXzMsCj4+ICsJCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50ZXN0X2F1ZGlvX3BlcmlvZF9j aF80KTsKPj4gKwo+PiArCXByX2RlYnVnKCJhdWRpb19wZXJpb2Q6IGNoNT0weCV4LCBjaDY9MHgl eCwgY2g3PTB4JXgsIGNoOD0weCV4XG4iLAo+PiArCQlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8u dGVzdF9hdWRpb19wZXJpb2RfY2hfNSwKPj4gKwkJbGluay0+ZHBfbGluay50ZXN0X2F1ZGlvLnRl c3RfYXVkaW9fcGVyaW9kX2NoXzYsCj4+ICsJCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50ZXN0 X2F1ZGlvX3BlcmlvZF9jaF83LAo+PiArCQlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8udGVzdF9h dWRpb19wZXJpb2RfY2hfOCk7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3Rh dGljIHZvaWQgZHBfbGlua19yZXNldF9kYXRhKHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmsp Cj4+ICt7Cj4+ICsJbGluay0+cmVxdWVzdCA9IChjb25zdCBzdHJ1Y3QgZHBfbGlua19yZXF1ZXN0 KXsgMCB9Owo+PiArCWxpbmstPmRwX2xpbmsudGVzdF92aWRlbyA9IChjb25zdCBzdHJ1Y3QgZHBf bGlua190ZXN0X3ZpZGVvKXsgMCB9Owo+PiArCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0 X2JpdF9kZXB0aCA9IERQX1RFU1RfQklUX0RFUFRIX1VOS05PV047Cj4+ICsJbGluay0+ZHBfbGlu ay50ZXN0X2F1ZGlvID0gKGNvbnN0IHN0cnVjdCBkcF9saW5rX3Rlc3RfYXVkaW8peyAwIH07Cj4+ ICsJbGluay0+ZHBfbGluay5waHlfcGFyYW1zLnBoeV90ZXN0X3BhdHRlcm5fc2VsID0gMDsKPj4g KwlsaW5rLT5kcF9saW5rLnNpbmtfcmVxdWVzdCA9IDA7Cj4+ICsJbGluay0+ZHBfbGluay50ZXN0 X3Jlc3BvbnNlID0gMDsKPiAKPiAJbWVtc2V0Pwo+IAo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAq IGRwX2xpbmtfcHJvY2Vzc19yZXF1ZXN0KCkgLSBoYW5kbGUgSFBEIElSUSB0cmFuc2l0aW9uIHRv IEhJR0gKPj4gKyAqIEBsaW5rOiBwb2ludGVyIHRvIGxpbmsgbW9kdWxlIGRhdGEKPj4gKyAqCj4+ ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgaGFuZGxlIHRoZSBIUEQgSVJRIHN0YXRlIHRyYW5zaXRp b25zIGZyb20gTE9XIAo+PiB0byBISUdICj4+ICsgKiAoaW5jbHVkaW5nIGNhc2VzIHdoZW4gdGhl cmUgYXJlIGJhY2sgdG8gYmFjayBIUEQgSVJRIEhJR0gpIAo+PiBpbmRpY2F0aW5nCj4+ICsgKiB0 aGUgc3RhcnQgb2YgYSBuZXcgbGluayB0cmFpbmluZyByZXF1ZXN0IG9yIHNpbmsgc3RhdHVzIHVw ZGF0ZS4KPj4gKyAqLwo+PiArc3RhdGljIGludCBkcF9saW5rX3Byb2Nlc3NfcmVxdWVzdChzdHJ1 Y3QgZHBfbGluayAqZHBfbGluaykKPj4gK3sKPj4gKwlpbnQgcmV0ID0gMDsKPj4gKwlzdHJ1Y3Qg ZHBfbGlua19wcml2YXRlICpsaW5rOwo+PiArCj4+ICsJaWYgKCFkcF9saW5rKSB7Cj4+ICsJCXBy X2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4g Kwo+PiArCWxpbmsgPSBjb250YWluZXJfb2YoZHBfbGluaywgc3RydWN0IGRwX2xpbmtfcHJpdmF0 ZSwgZHBfbGluayk7Cj4+ICsKPj4gKwlwcl9kZWJ1Zygic3RhcnRcbiIpOwo+PiArCj4+ICsJZHBf bGlua19yZXNldF9kYXRhKGxpbmspOwo+PiArCj4+ICsJZHBfbGlua19wYXJzZV9zaW5rX3N0YXR1 c19maWVsZChsaW5rKTsKPj4gKwo+PiArCWlmIChkcF9saW5rX2lzX3Rlc3RfZWRpZF9yZWFkKGxp bmspKSB7Cj4+ICsJCWRwX2xpbmstPnNpbmtfcmVxdWVzdCB8PSBEUF9URVNUX0xJTktfRURJRF9S RUFEOwo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsJfQo+PiArCj4+ICsJcmV0ID0gZHBfbGlua19wcm9j ZXNzX2RzX3BvcnRfc3RhdHVzX2NoYW5nZShsaW5rKTsKPj4gKwlpZiAoIXJldCkgewo+PiArCQlk cF9saW5rLT5zaW5rX3JlcXVlc3QgfD0gRFNfUE9SVF9TVEFUVVNfQ0hBTkdFRDsKPj4gKwkJZ290 byBleGl0Owo+PiArCX0KPj4gKwo+PiArCXJldCA9IGRwX2xpbmtfcHJvY2Vzc19saW5rX3RyYWlu aW5nX3JlcXVlc3QobGluayk7Cj4+ICsJaWYgKCFyZXQpIHsKPj4gKwkJZHBfbGluay0+c2lua19y ZXF1ZXN0IHw9IERQX1RFU1RfTElOS19UUkFJTklORzsKPj4gKwkJZ290byBleGl0Owo+PiArCX0K Pj4gKwo+PiArCXJldCA9IGRwX2xpbmtfcHJvY2Vzc19waHlfdGVzdF9wYXR0ZXJuX3JlcXVlc3Qo bGluayk7Cj4+ICsJaWYgKCFyZXQpIHsKPj4gKwkJZHBfbGluay0+c2lua19yZXF1ZXN0IHw9IERQ X1RFU1RfTElOS19QSFlfVEVTVF9QQVRURVJOOwo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsJfQo+PiAr Cj4+ICsJcmV0ID0gZHBfbGlua19wcm9jZXNzX2xpbmtfc3RhdHVzX3VwZGF0ZShsaW5rKTsKPj4g KwlpZiAoIXJldCkgewo+PiArCQlkcF9saW5rLT5zaW5rX3JlcXVlc3QgfD0gRFBfTElOS19TVEFU VVNfVVBEQVRFRDsKPj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4gKwo+PiArCXJldCA9IGRwX2xp bmtfcHJvY2Vzc192aWRlb19wYXR0ZXJuX3JlcXVlc3QobGluayk7Cj4+ICsJaWYgKCFyZXQpIHsK Pj4gKwkJZHBfbGluay0+c2lua19yZXF1ZXN0IHw9IERQX1RFU1RfTElOS19WSURFT19QQVRURVJO Owo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsJfQo+PiArCj4+ICsJcmV0ID0gZHBfbGlua19wcm9jZXNz X2F1ZGlvX3BhdHRlcm5fcmVxdWVzdChsaW5rKTsKPj4gKwlpZiAoIXJldCkgewo+PiArCQlkcF9s aW5rLT5zaW5rX3JlcXVlc3QgfD0gRFBfVEVTVF9MSU5LX0FVRElPX1BBVFRFUk47Cj4+ICsJCWdv dG8gZXhpdDsKPj4gKwl9Cj4+ICsKPj4gKwlwcl9kZWJ1ZygiZG9uZVxuIik7Cj4+ICtleGl0Ogo+ IAo+IHJlbW92ZSBleGl0ICYgcmV0LCBqdXN0IHJldHVybiB2YWx1ZXMgZGlyZWN0bHkKPiAKPj4g KwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGRwX2xpbmtfZ2V0X2NvbG9y aW1ldHJ5X2NvbmZpZyhzdHJ1Y3QgZHBfbGluayAqZHBfbGluaykKPj4gK3sKPj4gKwl1MzIgY2M7 Cj4+ICsJZW51bSBkeW5hbWljX3JhbmdlIGRyOwo+PiArCXN0cnVjdCBkcF9saW5rX3ByaXZhdGUg Kmxpbms7Cj4+ICsKPj4gKwlpZiAoIWRwX2xpbmspIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlu cHV0XG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJbGluayA9IGNv bnRhaW5lcl9vZihkcF9saW5rLCBzdHJ1Y3QgZHBfbGlua19wcml2YXRlLCBkcF9saW5rKTsKPj4g Kwo+PiArCS8qIHVubGVzcyBhIHZpZGVvIHBhdHRlcm4gQ1RTIHRlc3QgaXMgb25nb2luZywgdXNl IENFQV9WRVNBICovCj4gCj4gcy9DRUFfVkVTQS9SR0JfVkVTQT8KPiAKPj4gKwlpZiAoZHBfbGlu a19pc192aWRlb19wYXR0ZXJuX3JlcXVlc3RlZChsaW5rKSkKPj4gKwkJZHIgPSBsaW5rLT5kcF9s aW5rLnRlc3RfdmlkZW8udGVzdF9keW5fcmFuZ2U7Cj4+ICsJZWxzZQo+PiArCQlkciA9IERQX0RZ TkFNSUNfUkFOR0VfUkdCX1ZFU0E7Cj4+ICsKPj4gKwkvKiBPbmx5IFJHQl9WRVNBIG5kIFJHQl9D RUEgc3VwcG9ydGVkIGZvciBub3cgKi8KPiAKPiBzL25kL2FuZC8KPiAKPj4gKwlzd2l0Y2ggKGRy KSB7Cj4+ICsJY2FzZSBEUF9EWU5BTUlDX1JBTkdFX1JHQl9DRUE6Cj4+ICsJCWNjID0gQklUKDMp Owo+PiArCQlicmVhazsKPj4gKwljYXNlIERQX0RZTkFNSUNfUkFOR0VfUkdCX1ZFU0E6Cj4+ICsJ ZGVmYXVsdDoKPj4gKwkJY2MgPSAwOwo+PiArCX0KPiAKPiBJZiB5b3Ugc3RvcmUgdGhlIHZhbHVl IHNoaWZ0ZWQgbGlrZSBJIHN1Z2dlc3RlZCwgeW91IGRvbid0IGhhdmUgdG8gZG8gCj4gdGhpcwo+ IHN3aXRjaCAod2hpY2ggcmVhbGx5IHNob3VsZCBiZSBhbiBpZiBhbnl3YXlzIHNpbmNlIHRoZSBy YW5nZSBpcyAwOjEpLgo+IAo+PiArCj4+ICsJcmV0dXJuIGNjOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgaW50IGRwX2xpbmtfYWRqdXN0X2xldmVscyhzdHJ1Y3QgZHBfbGluayAqZHBfbGluaywgdTgg Cj4+ICpsaW5rX3N0YXR1cykKPj4gK3sKPj4gKwlpbnQgaTsKPj4gKwlpbnQgbWF4ID0gMDsKPj4g Kwl1OCBkYXRhOwo+PiArCXN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbms7Cj4+ICsKPj4gKwlp ZiAoIWRwX2xpbmspIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJbGluayA9IGNvbnRhaW5lcl9vZihkcF9saW5r LCBzdHJ1Y3QgZHBfbGlua19wcml2YXRlLCBkcF9saW5rKTsKPj4gKwo+PiArCS8qIHVzZSB0aGUg bWF4IGxldmVsIGFjcm9zcyBsYW5lcyAqLwo+PiArCWZvciAoaSA9IDA7IGkgPCBkcF9saW5rLT5s aW5rX3BhcmFtcy5sYW5lX2NvdW50OyBpKyspIHsKPj4gKwkJZGF0YSA9IGRybV9kcF9nZXRfYWRq dXN0X3JlcXVlc3Rfdm9sdGFnZShsaW5rX3N0YXR1cywgaSk7Cj4+ICsJCXByX2RlYnVnKCJsYW5l PSVkIHJlcV92b2x0YWdlX3N3aW5nPSVkXG4iLCBpLCBkYXRhKTsKPj4gKwkJaWYgKG1heCA8IGRh dGEpCj4+ICsJCQltYXggPSBkYXRhOwo+PiArCX0KPj4gKwo+PiArCWRwX2xpbmstPnBoeV9wYXJh bXMudl9sZXZlbCA9IG1heCA+PiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX1NISUZUOwo+PiArCj4+ ICsJLyogdXNlIHRoZSBtYXggbGV2ZWwgYWNyb3NzIGxhbmVzICovCj4+ICsJbWF4ID0gMDsKPj4g Kwlmb3IgKGkgPSAwOyBpIDwgZHBfbGluay0+bGlua19wYXJhbXMubGFuZV9jb3VudDsgaSsrKSB7 Cj4+ICsJCWRhdGEgPSBkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ByZV9lbXBoYXNpcyhsaW5r X3N0YXR1cywgaSk7Cj4+ICsJCXByX2RlYnVnKCJsYW5lPSVkIHJlcV9wcmVfZW1waGFzaXM9JWRc biIsIGksIGRhdGEpOwo+PiArCQlpZiAobWF4IDwgZGF0YSkKPj4gKwkJCW1heCA9IGRhdGE7Cj4+ ICsJfQo+IAo+IFlvdSBjYW4gY29tYmluZSB0aGVzZSBsb29wcyBhbmQgZG8gdGhlIHdvcmsgYXQg b25jZSAoY2hlY2sgb3V0Cj4gaW50ZWxfZ2V0X2FkanVzdF90cmFpbikKPiAKPj4gKwo+PiArCWRw X2xpbmstPnBoeV9wYXJhbXMucF9sZXZlbCA9IG1heCA+PiBEUF9UUkFJTl9QUkVfRU1QSEFTSVNf U0hJRlQ7Cj4+ICsKPj4gKwkvKioKPj4gKwkgKiBBZGp1c3QgdGhlIHZvbHRhZ2Ugc3dpbmcgYW5k IHByZS1lbXBoYXNpcyBsZXZlbCBjb21iaW5hdGlvbiB0byAKPj4gd2l0aGluCj4+ICsJICogdGhl IGFsbG93YWJsZSByYW5nZS4KPj4gKwkgKi8KPj4gKwlpZiAoZHBfbGluay0+cGh5X3BhcmFtcy52 X2xldmVsID4gRFBfTElOS19WT0xUQUdFX01BWCkgewo+PiArCQlwcl9kZWJ1ZygiUmVxdWVzdGVk IHZTd2luZ0xldmVsPSVkLCBjaGFuZ2UgdG8gJWRcbiIsCj4+ICsJCQlkcF9saW5rLT5waHlfcGFy YW1zLnZfbGV2ZWwsIERQX0xJTktfVk9MVEFHRV9NQVgpOwo+PiArCQlkcF9saW5rLT5waHlfcGFy YW1zLnZfbGV2ZWwgPSBEUF9MSU5LX1ZPTFRBR0VfTUFYOwo+PiArCX0KPj4gKwo+PiArCWlmIChk cF9saW5rLT5waHlfcGFyYW1zLnBfbGV2ZWwgPiBEUF9MSU5LX1BSRV9FTVBIQVNJU19NQVgpIHsK Pj4gKwkJcHJfZGVidWcoIlJlcXVlc3RlZCBwcmVFbXBoYXNpc0xldmVsPSVkLCBjaGFuZ2UgdG8g JWRcbiIsCj4+ICsJCQlkcF9saW5rLT5waHlfcGFyYW1zLnBfbGV2ZWwsIERQX0xJTktfUFJFX0VN UEhBU0lTX01BWCk7Cj4+ICsJCWRwX2xpbmstPnBoeV9wYXJhbXMucF9sZXZlbCA9IERQX0xJTktf UFJFX0VNUEhBU0lTX01BWDsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAoKGRwX2xpbmstPnBoeV9wYXJh bXMucF9sZXZlbCA+IERQX0xJTktfUFJFX0VNUEhBU0lTX0xFVkVMXzEpCj4+ICsJCSYmIChkcF9s aW5rLT5waHlfcGFyYW1zLnZfbGV2ZWwgPT0gRFBfTElOS19WT0xUQUdFX0xFVkVMXzIpKSB7Cj4+ ICsJCXByX2RlYnVnKCJSZXF1ZXN0ZWQgcHJlRW1waGFzaXNMZXZlbD0lZCwgY2hhbmdlIHRvICVk XG4iLAo+PiArCQkJZHBfbGluay0+cGh5X3BhcmFtcy5wX2xldmVsLAo+PiArCQkJRFBfTElOS19Q UkVfRU1QSEFTSVNfTEVWRUxfMSk7Cj4+ICsJCWRwX2xpbmstPnBoeV9wYXJhbXMucF9sZXZlbCA9 IERQX0xJTktfUFJFX0VNUEhBU0lTX0xFVkVMXzE7Cj4+ICsJfQo+PiArCj4+ICsJcHJfZGVidWco ImFkanVzdGVkOiB2X2xldmVsPSVkLCBwX2xldmVsPSVkXG4iLAo+PiArCQlkcF9saW5rLT5waHlf cGFyYW1zLnZfbGV2ZWwsIGRwX2xpbmstPnBoeV9wYXJhbXMucF9sZXZlbCk7Cj4+ICsKPj4gKwly ZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9saW5rX3NlbmRfcHNtX3JlcXVl c3Qoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmssIGJvb2wgCj4+IHJlcSkKPj4gK3sKPj4gKwlzdHJ1 Y3QgZHBfbGlua19wcml2YXRlICpsaW5rOwo+PiArCj4+ICsJaWYgKCFkcF9saW5rKSB7Cj4+ICsJ CXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0K Pj4gKwo+PiArCWxpbmsgPSBjb250YWluZXJfb2YoZHBfbGluaywgc3RydWN0IGRwX2xpbmtfcHJp dmF0ZSwgZHBfbGluayk7Cj4gCj4gVGhpcyBpcyBhIHN0dWIsIHdoeSBkbyB0aGlzPwo+IAo+PiAr Cj4+ICsJcmV0dXJuIDA7Cj4gCj4gRnVydGhlciwgd2h5IGhhdmUgYSBzdHViIGF0IGFsbD8gVGhl IGhvb2sgaXMgbmV2ZXIgY2FsbGVkLCBzbyBkZWxldGUgaXQgCj4gYWxsCj4gcGxlYXNlLgo+IAo+ PiArfQo+PiArCj4+ICtzdGF0aWMgdTMyIGRwX2xpbmtfZ2V0X3Rlc3RfYml0c19kZXB0aChzdHJ1 Y3QgZHBfbGluayAqZHBfbGluaywgdTMyIAo+PiBicHApCj4+ICt7Cj4+ICsJdTMyIHRiZDsKPj4g Kwo+PiArCS8qCj4+ICsJICogRmV3IHNpbXBsaXN0aWMgcnVsZXMgYW5kIGFzc3VtcHRpb25zIG1h ZGUgaGVyZToKPj4gKwkgKiAgICAxLiBUZXN0IGJpdCBkZXB0aCBpcyBiaXQgZGVwdGggcGVyIGNv bG9yIGNvbXBvbmVudAo+PiArCSAqICAgIDIuIEFzc3VtZSAzIGNvbG9yIGNvbXBvbmVudHMKPj4g KwkgKi8KPj4gKwlzd2l0Y2ggKGJwcCkgewo+PiArCWNhc2UgMTg6Cj4+ICsJCXRiZCA9IERQX1RF U1RfQklUX0RFUFRIXzY7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgMjQ6Cj4+ICsJCXRiZCA9IERQ X1RFU1RfQklUX0RFUFRIXzg7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgMzA6Cj4+ICsJCXRiZCA9 IERQX1RFU1RfQklUX0RFUFRIXzEwOwo+PiArCQlicmVhazsKPj4gKwlkZWZhdWx0Ogo+PiArCQl0 YmQgPSBEUF9URVNUX0JJVF9ERVBUSF9VTktOT1dOOwo+PiArCQlicmVhazsKPj4gKwl9Cj4+ICsK Pj4gKwlpZiAodGJkICE9IERQX1RFU1RfQklUX0RFUFRIX1VOS05PV04pCj4+ICsJCXRiZCA9ICh0 YmQgPj4gRFBfVEVTVF9CSVRfREVQVEhfU0hJRlQpOwo+IAo+IEFGQUlDVCB0YmQgY29ycmVzcG9u ZHMgdG8gYSBTb0MgcmVnaXN0ZXIgdmFsdWUsIGFzIG9wcG9zZWQgdG8gdGhlIERQQ0QgCj4gdmFs dWUuCj4gSXQncyBhIGhhcHB5IGNvaW5jaWRlbmNlIHRoYXQgdGhleSdyZSB0aGUgc2FtZSwgaG93 ZXZlciBJIHRoaW5rIHlvdSAKPiBzaG91bGQgdXNlIGEKPiBzZXBhcmF0ZSBtc20tc3BlY2lmaWMg I2RlZmluZSBpbnN0ZWFkIG9mIHRoZSBkcm1fZHBfaGVscGVyIHZhbHVlcy4KPiAKPj4gKwo+PiAr CXJldHVybiB0YmQ7Cj4+ICt9Cj4+ICsKPj4gK3N0cnVjdCBkcF9saW5rICpkcF9saW5rX2dldChz dHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkcF9hdXggKmF1eCkKPj4gK3sKPj4gKwlpbnQgcmMg PSAwOwo+PiArCXN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbms7Cj4+ICsJc3RydWN0IGRwX2xp bmsgKmRwX2xpbms7Cj4+ICsKPj4gKwlpZiAoIWRldiB8fCAhYXV4KSB7Cj4+ICsJCXByX2Vycigi aW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJZ290byBlcnJvcjsK Pj4gKwl9Cj4+ICsKPj4gKwlsaW5rID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsaW5rKSwg R0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFsaW5rKSB7Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJ Z290byBlcnJvcjsKPj4gKwl9Cj4+ICsKPj4gKwlsaW5rLT5kZXYgICA9IGRldjsKPj4gKwlsaW5r LT5hdXggICA9IGF1eDsKPj4gKwo+PiArCWRwX2xpbmsgPSAmbGluay0+ZHBfbGluazsKPj4gKwo+ PiArCWRwX2xpbmstPnByb2Nlc3NfcmVxdWVzdCAgICAgICAgPSBkcF9saW5rX3Byb2Nlc3NfcmVx dWVzdDsKPj4gKwlkcF9saW5rLT5nZXRfdGVzdF9iaXRzX2RlcHRoICAgID0gZHBfbGlua19nZXRf dGVzdF9iaXRzX2RlcHRoOwo+PiArCWRwX2xpbmstPmdldF9jb2xvcmltZXRyeV9jb25maWcgPSBk cF9saW5rX2dldF9jb2xvcmltZXRyeV9jb25maWc7Cj4+ICsJZHBfbGluay0+YWRqdXN0X2xldmVs cyAgICAgICAgICA9IGRwX2xpbmtfYWRqdXN0X2xldmVsczsKPj4gKwlkcF9saW5rLT5zZW5kX3Bz bV9yZXF1ZXN0ICAgICAgID0gZHBfbGlua19zZW5kX3BzbV9yZXF1ZXN0Owo+PiArCWRwX2xpbmst PnNlbmRfdGVzdF9yZXNwb25zZSAgICAgPSBkcF9saW5rX3NlbmRfdGVzdF9yZXNwb25zZTsKPj4g KwlkcF9saW5rLT5wc21fY29uZmlnICAgICAgICAgICAgID0gZHBfbGlua19wc21fY29uZmlnOwo+ PiArCWRwX2xpbmstPnNlbmRfZWRpZF9jaGVja3N1bSAgICAgPSBkcF9saW5rX3NlbmRfZWRpZF9j aGVja3N1bTsKPj4gKwo+PiArCXJldHVybiBkcF9saW5rOwo+PiArZXJyb3I6Cj4+ICsJcmV0dXJu IEVSUl9QVFIocmMpOwo+PiArfQo+PiArCj4+ICt2b2lkIGRwX2xpbmtfcHV0KHN0cnVjdCBkcF9s aW5rICpkcF9saW5rKQo+PiArewo+PiArCXN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbms7Cj4+ ICsKPj4gKwlpZiAoIWRwX2xpbmspCj4+ICsJCXJldHVybjsKPj4gKwo+PiArCWxpbmsgPSBjb250 YWluZXJfb2YoZHBfbGluaywgc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7Cj4+ICsK Pj4gKwlkZXZtX2tmcmVlKGxpbmstPmRldiwgbGluayk7Cj4+ICt9Cj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2xpbmsuaCAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2RwL2RwX2xpbmsuaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi42 ZDZlZjQzCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9saW5rLmgKPj4gQEAgLTAsMCArMSwxODQgQEAKPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgKGMp IDIwMTItMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgCj4+IHJlc2VydmVk Lgo+PiArICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCj4+IG1vZGlmeQo+PiArICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4+ICsgKiBv bmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ICsgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4+ICsgKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiArICoKPj4gKyAq Lwo+PiArCj4+ICsjaWZuZGVmIF9EUF9MSU5LX0hfCj4+ICsjZGVmaW5lIF9EUF9MSU5LX0hfCj4+ ICsKPj4gKyNpbmNsdWRlICJkcF9hdXguaCIKPj4gKwo+PiArI2RlZmluZSBEU19QT1JUX1NUQVRV U19DSEFOR0VEIDB4MjAwCj4+ICsjZGVmaW5lIERQX1RFU1RfQklUX0RFUFRIX1VOS05PV04gMHhG RkZGRkZGRgo+PiArI2RlZmluZSBEUF9MSU5LX0VOVU1fU1RSKHgpCQkjeAo+PiArCj4+ICtlbnVt IGRwX2xpbmtfdm9sdGFnZV9sZXZlbCB7Cj4+ICsJRFBfTElOS19WT0xUQUdFX0xFVkVMXzAJPSAw LAo+PiArCURQX0xJTktfVk9MVEFHRV9MRVZFTF8xCT0gMSwKPj4gKwlEUF9MSU5LX1ZPTFRBR0Vf TEVWRUxfMgk9IDIsCj4+ICsJRFBfTElOS19WT0xUQUdFX01BWAk9IERQX0xJTktfVk9MVEFHRV9M RVZFTF8yLAo+PiArfTsKPiAKPiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HXyoKPiAKPj4gKwo+PiAr ZW51bSBkcF9saW5rX3ByZWVtYXBoYXNpc19sZXZlbCB7Cj4+ICsJRFBfTElOS19QUkVfRU1QSEFT SVNfTEVWRUxfMAk9IDAsCj4+ICsJRFBfTElOS19QUkVfRU1QSEFTSVNfTEVWRUxfMQk9IDEsCj4+ ICsJRFBfTElOS19QUkVfRU1QSEFTSVNfTEVWRUxfMgk9IDIsCj4+ICsJRFBfTElOS19QUkVfRU1Q SEFTSVNfTUFYCT0gRFBfTElOS19QUkVfRU1QSEFTSVNfTEVWRUxfMiwKPj4gK307Cj4gCj4gRFBf VFJBSU5fUFJFX0VNUEgqCj4gCj4+ICsKPj4gK3N0cnVjdCBkcF9saW5rX3NpbmtfY291bnQgewo+ PiArCXUzMiBjb3VudDsKPj4gKwlib29sIGNwX3JlYWR5Owo+PiArfTsKPj4gKwo+PiArc3RydWN0 IGRwX2xpbmtfdGVzdF92aWRlbyB7Cj4+ICsJdTMyIHRlc3RfdmlkZW9fcGF0dGVybjsKPj4gKwl1 MzIgdGVzdF9iaXRfZGVwdGg7Cj4+ICsJdTMyIHRlc3RfZHluX3JhbmdlOwo+PiArCXUzMiB0ZXN0 X2hfdG90YWw7Cj4+ICsJdTMyIHRlc3Rfdl90b3RhbDsKPj4gKwl1MzIgdGVzdF9oX3N0YXJ0Owo+ PiArCXUzMiB0ZXN0X3Zfc3RhcnQ7Cj4+ICsJdTMyIHRlc3RfaHN5bmNfcG9sOwo+PiArCXUzMiB0 ZXN0X2hzeW5jX3dpZHRoOwo+PiArCXUzMiB0ZXN0X3ZzeW5jX3BvbDsKPj4gKwl1MzIgdGVzdF92 c3luY193aWR0aDsKPj4gKwl1MzIgdGVzdF9oX3dpZHRoOwo+PiArCXUzMiB0ZXN0X3ZfaGVpZ2h0 Owo+PiArCXUzMiB0ZXN0X3JyX2Q7Cj4+ICsJdTMyIHRlc3RfcnJfbjsKPj4gK307Cj4+ICsKPj4g K3N0cnVjdCBkcF9saW5rX3Rlc3RfYXVkaW8gewo+PiArCXUzMiB0ZXN0X2F1ZGlvX3NhbXBsaW5n X3JhdGU7Cj4+ICsJdTMyIHRlc3RfYXVkaW9fY2hhbm5lbF9jb3VudDsKPj4gKwl1MzIgdGVzdF9h dWRpb19wYXR0ZXJuX3R5cGU7Cj4+ICsJdTMyIHRlc3RfYXVkaW9fcGVyaW9kX2NoXzE7Cj4+ICsJ dTMyIHRlc3RfYXVkaW9fcGVyaW9kX2NoXzI7Cj4+ICsJdTMyIHRlc3RfYXVkaW9fcGVyaW9kX2No XzM7Cj4+ICsJdTMyIHRlc3RfYXVkaW9fcGVyaW9kX2NoXzQ7Cj4+ICsJdTMyIHRlc3RfYXVkaW9f cGVyaW9kX2NoXzU7Cj4+ICsJdTMyIHRlc3RfYXVkaW9fcGVyaW9kX2NoXzY7Cj4+ICsJdTMyIHRl c3RfYXVkaW9fcGVyaW9kX2NoXzc7Cj4+ICsJdTMyIHRlc3RfYXVkaW9fcGVyaW9kX2NoXzg7Cj4+ ICt9Owo+PiArCj4+ICtzdHJ1Y3QgZHBfbGlua19waHlfcGFyYW1zIHsKPj4gKwl1MzIgcGh5X3Rl c3RfcGF0dGVybl9zZWw7Cj4+ICsJdTggdl9sZXZlbDsKPj4gKwl1OCBwX2xldmVsOwo+PiArfTsK Pj4gKwo+PiArc3RydWN0IGRwX2xpbmtfcGFyYW1zIHsKPj4gKwl1MzIgbGFuZV9jb3VudDsKPj4g Kwl1MzIgYndfY29kZTsKPj4gK307Cj4gCj4gVXNlIGRybV9kcF9saW5rCj4gCj4+ICsKPj4gK3N0 cnVjdCBkcF9saW5rIHsKPj4gKwl1MzIgc2lua19yZXF1ZXN0Owo+PiArCXUzMiB0ZXN0X3Jlc3Bv bnNlOwo+PiArCWJvb2wgcHNtX2VuYWJsZWQ7Cj4+ICsKPj4gKwlzdHJ1Y3QgZHBfbGlua19zaW5r X2NvdW50IHNpbmtfY291bnQ7Cj4+ICsJc3RydWN0IGRwX2xpbmtfdGVzdF92aWRlbyB0ZXN0X3Zp ZGVvOwo+PiArCXN0cnVjdCBkcF9saW5rX3Rlc3RfYXVkaW8gdGVzdF9hdWRpbzsKPj4gKwlzdHJ1 Y3QgZHBfbGlua19waHlfcGFyYW1zIHBoeV9wYXJhbXM7Cj4+ICsJc3RydWN0IGRwX2xpbmtfcGFy YW1zIGxpbmtfcGFyYW1zOwo+PiArCj4+ICsJdTMyICgqZ2V0X3Rlc3RfYml0c19kZXB0aCkoc3Ry dWN0IGRwX2xpbmsgKmRwX2xpbmssIHUzMiBicHApOwo+PiArCWludCAoKnByb2Nlc3NfcmVxdWVz dCkoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmspOwo+PiArCWludCAoKmdldF9jb2xvcmltZXRyeV9j b25maWcpKHN0cnVjdCBkcF9saW5rICpkcF9saW5rKTsKPj4gKwlpbnQgKCphZGp1c3RfbGV2ZWxz KShzdHJ1Y3QgZHBfbGluayAqZHBfbGluaywgdTggKmxpbmtfc3RhdHVzKTsKPj4gKwlpbnQgKCpz ZW5kX3BzbV9yZXF1ZXN0KShzdHJ1Y3QgZHBfbGluayAqZHBfbGluaywgYm9vbCByZXEpOwo+PiAr CXZvaWQgKCpzZW5kX3Rlc3RfcmVzcG9uc2UpKHN0cnVjdCBkcF9saW5rICpkcF9saW5rKTsKPj4g KwlpbnQgKCpwc21fY29uZmlnKShzdHJ1Y3QgZHBfbGluayAqZHBfbGluaywKPj4gKwkJc3RydWN0 IGRybV9kcF9saW5rICpsaW5rX2luZm8sIGJvb2wgZW5hYmxlKTsKPj4gKwl2b2lkICgqc2VuZF9l ZGlkX2NoZWNrc3VtKShzdHJ1Y3QgZHBfbGluayAqZHBfbGluaywgdTggY2hlY2tzdW0pOwo+PiAr fTsKPj4gKwo+PiArc3RhdGljIGlubGluZSBjaGFyICpkcF9saW5rX2dldF9waHlfdGVzdF9wYXR0 ZXJuKHUzMiAKPj4gcGh5X3Rlc3RfcGF0dGVybl9zZWwpCj4+ICt7Cj4+ICsJc3dpdGNoIChwaHlf dGVzdF9wYXR0ZXJuX3NlbCkgewo+PiArCWNhc2UgRFBfVEVTVF9QSFlfUEFUVEVSTl9OT05FOgo+ PiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihEUF9URVNUX1BIWV9QQVRURVJOX05PTkUpOwo+ PiArCWNhc2UgRFBfVEVTVF9QSFlfUEFUVEVSTl9EMTBfMl9OT19TQ1JBTUJMSU5HOgo+PiArCQly ZXR1cm4gRFBfTElOS19FTlVNX1NUUigKPj4gKwkJCURQX1RFU1RfUEhZX1BBVFRFUk5fRDEwXzJf Tk9fU0NSQU1CTElORyk7Cj4+ICsJY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOX1NZTUJPTF9FUlJf TUVBU1VSRU1FTlRfQ05UOgo+PiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUigKPj4gKwkJCURQ X1RFU1RfUEhZX1BBVFRFUk5fU1lNQk9MX0VSUl9NRUFTVVJFTUVOVF9DTlQpOwo+PiArCWNhc2Ug RFBfVEVTVF9QSFlfUEFUVEVSTl9QUkJTNzoKPj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIo RFBfVEVTVF9QSFlfUEFUVEVSTl9QUkJTNyk7Cj4+ICsJY2FzZSBEUF9URVNUX1BIWV9QQVRURVJO XzgwX0JJVF9DVVNUT01fUEFUVEVSTjoKPj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoCj4+ ICsJCQlEUF9URVNUX1BIWV9QQVRURVJOXzgwX0JJVF9DVVNUT01fUEFUVEVSTik7Cj4+ICsJY2Fz ZSBEUF9URVNUX1BIWV9QQVRURVJOX0hCUjJfQ1RTX0VZRV9QQVRURVJOOgo+PiArCQlyZXR1cm4g RFBfTElOS19FTlVNX1NUUigKPj4gKwkJCURQX1RFU1RfUEhZX1BBVFRFUk5fSEJSMl9DVFNfRVlF X1BBVFRFUk4pOwo+PiArCWRlZmF1bHQ6Cj4+ICsJCXJldHVybiAidW5rbm93biI7Cj4+ICsJfQo+ PiArfQo+IAo+IFRoaXMgaXMgb25seSB1c2VkIGZvciBkZWJ1ZyBzdGF0ZW1lbnRzLCBqdXN0IHJl bW92ZSBpdCBhbmQgcHJpbnQgdGhlIAo+IGVudW0gYXMgYW4KPiBpbnQuIFRoaXMgd2lsbCBsZXQg eW91IHJlbW92ZSBEUF9MSU5LX0VOVU1fU1RSIGFzIHdlbGwuCj4gCj4+ICsKPj4gKy8qKgo+PiAr ICogbWRzc19kcF90ZXN0X2JpdF9kZXB0aF90b19icHAoKSAtIGNvbnZlcnQgdGVzdCBiaXQgZGVw dGggdG8gYnBwCj4+ICsgKiBAdGJkOiB0ZXN0IGJpdCBkZXB0aAo+PiArICoKPj4gKyAqIFJldHVy bnMgdGhlIGJpdHMgcGVyIHBpeGVsIChicHApIHRvIGJlIHVzZWQgY29ycmVzcG9uZGluZyB0byB0 aGUKPj4gKyAqIGdpdCBiaXQgZGVwdGggdmFsdWUuIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0 IGJpdCBkZXB0aCBoYXMKPj4gKyAqIGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQuCj4+ICsgKi8KPj4g K3N0YXRpYyBpbmxpbmUgdTMyIGRwX2xpbmtfYml0X2RlcHRoX3RvX2JwcCh1MzIgdGJkKQo+PiAr ewo+PiArCXUzMiBicHA7Cj4+ICsKPj4gKwkvKgo+PiArCSAqIEZldyBzaW1wbGlzdGljIHJ1bGVz IGFuZCBhc3N1bXB0aW9ucyBtYWRlIGhlcmU6Cj4+ICsJICogICAgMS4gQml0IGRlcHRoIGlzIHBl ciBjb2xvciBjb21wb25lbnQKPj4gKwkgKiAgICAyLiBJZiBiaXQgZGVwdGggaXMgdW5rbm93biBy ZXR1cm4gMAo+PiArCSAqICAgIDMuIEFzc3VtZSAzIGNvbG9yIGNvbXBvbmVudHMKPj4gKwkgKi8K Pj4gKwlzd2l0Y2ggKHRiZCkgewo+PiArCWNhc2UgRFBfVEVTVF9CSVRfREVQVEhfNjoKPj4gKwkJ YnBwID0gMTg7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgRFBfVEVTVF9CSVRfREVQVEhfODoKPj4g KwkJYnBwID0gMjQ7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgRFBfVEVTVF9CSVRfREVQVEhfMTA6 Cj4+ICsJCWJwcCA9IDMwOwo+PiArCQlicmVhazsKPj4gKwljYXNlIERQX1RFU1RfQklUX0RFUFRI X1VOS05PV046Cj4+ICsJZGVmYXVsdDoKPj4gKwkJYnBwID0gMDsKPj4gKwl9Cj4+ICsKPj4gKwly ZXR1cm4gYnBwOwo+IAo+IEp1c3QgcmV0dXJuIGRpcmVjdGx5IGZyb20gZWFjaCBjYXNlLgo+IAo+ PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGRwX2xpbmtfZ2V0KCkgLSBnZXQgdGhlIGZ1bmN0aW9u YWxpdGllcyBvZiBkcCB0ZXN0IG1vZHVsZQo+PiArICoKPj4gKyAqCj4+ICsgKiByZXR1cm46IGEg cG9pbnRlciB0byBkcF9saW5rIHN0cnVjdAo+PiArICovCj4+ICtzdHJ1Y3QgZHBfbGluayAqZHBf bGlua19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHBfYXV4ICphdXgpOwo+PiArCj4+ ICsvKioKPj4gKyAqIGRwX2xpbmtfcHV0KCkgLSByZWxlYXNlcyB0aGUgZHAgdGVzdCBtb2R1bGUn cyByZXNvdXJjZXMKPj4gKyAqCj4+ICsgKiBAZHBfbGluazogYW4gaW5zdGFuY2Ugb2YgZHBfbGlu ayBtb2R1bGUKPj4gKyAqCj4+ICsgKi8KPj4gK3ZvaWQgZHBfbGlua19wdXQoc3RydWN0IGRwX2xp bmsgKmRwX2xpbmspOwo+PiArCj4+ICsjZW5kaWYgLyogX0RQX0xJTktfSF8gKi8KPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuYyAKPj4gYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2RwL2RwX3BhbmVsLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXgg MDAwMDAwMC4uZTQ5N2I0NAo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvZHBfcGFuZWwuYwo+PiBAQCAtMCwwICsxLDYyNCBAQAo+PiArLyoKPj4gKyAqIENv cHlyaWdodCAoYykgMjAxMi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyAK Pj4gcmVzZXJ2ZWQuCj4+ICsgKgo+PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKPj4gbW9kaWZ5Cj4+ICsgKiBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh bmQKPj4gKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgo+PiArICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+PiArICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4gKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKPj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ ICsgKgo+PiArICovCj4+ICsKPj4gKyNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm0tZHBdICVzOiAi IGZtdCwgX19mdW5jX18KPj4gKwo+PiArI2luY2x1ZGUgImRwX3BhbmVsLmgiCj4+ICsKPj4gKyNp bmNsdWRlIDxkcm0vZHJtX2Nvbm5lY3Rvci5oPgo+PiArI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5o Pgo+PiArCj4+ICsjZGVmaW5lIERQX1BBTkVMX0RFRkFVTFRfQlBQIDI0Cj4gCj4gdW51c2VkCj4g Cj4+ICsjZGVmaW5lIERQX01BWF9EU19QT1JUX0NPVU5UIDEKPj4gKwo+PiArZW51bSB7Cj4+ICsJ RFBfTElOS19SQVRFX01VTFRJUExJRVIgPSAyNzAwMDAwMCwKPj4gK307Cj4gCj4gdW51c2VkCj4g Cj4+ICsKPj4gK3N0cnVjdCBkcF9wYW5lbF9wcml2YXRlIHsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpk ZXY7Cj4+ICsJc3RydWN0IGRwX3BhbmVsIGRwX3BhbmVsOwo+PiArCXN0cnVjdCBkcF9hdXggKmF1 eDsKPj4gKwlzdHJ1Y3QgZHBfbGluayAqbGluazsKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wYW5l bCAqY2F0YWxvZzsKPj4gKwlib29sIHBhbmVsX29uOwo+PiArCWJvb2wgYXV4X2NmZ191cGRhdGVf ZG9uZTsKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBfcGFuZWxfaW5mbyBm YWlsX3NhZmUgPSB7Cj4+ICsJLmhfYWN0aXZlID0gNjQwLAo+PiArCS52X2FjdGl2ZSA9IDQ4MCwK Pj4gKwkuaF9iYWNrX3BvcmNoID0gNDgsCj4+ICsJLmhfZnJvbnRfcG9yY2ggPSAxNiwKPj4gKwku aF9zeW5jX3dpZHRoID0gOTYsCj4+ICsJLmhfYWN0aXZlX2xvdyA9IDAsCj4+ICsJLnZfYmFja19w b3JjaCA9IDMzLAo+PiArCS52X2Zyb250X3BvcmNoID0gMTAsCj4+ICsJLnZfc3luY193aWR0aCA9 IDIsCj4+ICsJLnZfYWN0aXZlX2xvdyA9IDAsCj4+ICsJLmhfc2tldyA9IDAsCj4+ICsJLnJlZnJl c2hfcmF0ZSA9IDYwLAo+PiArCS5waXhlbF9jbGtfa2h6ID0gMjUyMDAsCj4+ICsJLmJwcCA9IDI0 LAo+PiArfTsKPiAKPiBEcm9wIHRoaXMsIHVzZXJzcGFjZSBjYW4gYWRkIGEgbW9kZSBpZiBhcHBy b3ByaWF0ZQo+IAo+PiArCj4+ICtzdGF0aWMgaW50IGRwX3BhbmVsX3JlYWRfZHBjZChzdHJ1Y3Qg ZHBfcGFuZWwgKmRwX3BhbmVsKQo+PiArewo+PiArCWludCBybGVuLCByYyA9IDA7Cj4+ICsJc3Ry dWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVsOwo+PiArCXN0cnVjdCBkcm1fZHBfbGluayAqbGlu a19pbmZvOwo+PiArCXU4ICpkcGNkLCBtYWpvciA9IDAsIG1pbm9yID0gMDsKPj4gKwl1MzIgZGZw X2NvdW50ID0gMDsKPj4gKwl1bnNpZ25lZCBsb25nIGNhcHMgPSBEUF9MSU5LX0NBUF9FTkhBTkNF RF9GUkFNSU5HOwo+PiArCj4+ICsJaWYgKCFkcF9wYW5lbCkgewo+PiArCQlwcl9lcnIoImludmFs aWQgaW5wdXRcbiIpOwo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZW5kOwo+PiArCX0K Pj4gKwo+PiArCWRwY2QgPSBkcF9wYW5lbC0+ZHBjZDsKPj4gKwo+PiArCXBhbmVsID0gY29udGFp bmVyX29mKGRwX3BhbmVsLCBzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOwo+PiAr CWxpbmtfaW5mbyA9ICZkcF9wYW5lbC0+bGlua19pbmZvOwo+PiArCj4+ICsJcmxlbiA9IGRybV9k cF9kcGNkX3JlYWQocGFuZWwtPmF1eC0+ZHJtX2F1eCwgRFBfRFBDRF9SRVYsCj4+ICsJCWRwY2Qs IChEUF9SRUNFSVZFUl9DQVBfU0laRSArIDEpKTsKPj4gKwlpZiAocmxlbiA8IChEUF9SRUNFSVZF Ul9DQVBfU0laRSArIDEpKSB7Cj4+ICsJCXByX2VycigiZHBjZCByZWFkIGZhaWxlZCwgcmxlbj0l ZFxuIiwgcmxlbik7Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJZ290byBlbmQ7Cj4+ICsJfQo+ PiArCj4+ICsJbGlua19pbmZvLT5yZXZpc2lvbiA9IGRwX3BhbmVsLT5kcGNkW0RQX0RQQ0RfUkVW XTsKPj4gKwo+PiArCW1ham9yID0gKGxpbmtfaW5mby0+cmV2aXNpb24gPj4gNCkgJiAweDBmOwo+ PiArCW1pbm9yID0gbGlua19pbmZvLT5yZXZpc2lvbiAmIDB4MGY7Cj4+ICsJcHJfZGVidWcoInZl cnNpb246ICVkLiVkXG4iLCBtYWpvciwgbWlub3IpOwo+PiArCj4+ICsJbGlua19pbmZvLT5yYXRl ID0KPj4gKwkJZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKGRwX3BhbmVsLT5kcGNkW0RQX01B WF9MSU5LX1JBVEVdKTsKPj4gKwlwcl9kZWJ1ZygibGlua19yYXRlPSVkXG4iLCBsaW5rX2luZm8t PnJhdGUpOwo+PiArCj4+ICsJbGlua19pbmZvLT5udW1fbGFuZXMgPSBkcF9wYW5lbC0+ZHBjZFtE UF9NQVhfTEFORV9DT1VOVF0gJgo+PiArCQkJCURQX01BWF9MQU5FX0NPVU5UX01BU0s7Cj4+ICsK Pj4gKwlwcl9kZWJ1ZygibGFuZV9jb3VudD0lZFxuIiwgbGlua19pbmZvLT5udW1fbGFuZXMpOwo+ PiArCj4+ICsJaWYgKGRybV9kcF9lbmhhbmNlZF9mcmFtZV9jYXAoZHBjZCkpCj4+ICsJCWxpbmtf aW5mby0+Y2FwYWJpbGl0aWVzIHw9IGNhcHM7Cj4gCj4gQWxsIG9mIHRoZSBsaW5rX2luZm8gaW5p dGlhbGl6YXRpb24gc2hvdWxkIGJlIGRvbmUgYnkgCj4gZHJtX2RwX2xpbmtfcHJvYmUoKS4KPiAK Pj4gKwo+PiArCWRmcF9jb3VudCA9IGRwY2RbRFBfRE9XTl9TVFJFQU1fUE9SVF9DT1VOVF0gJgo+ PiArCQkJCQkJRFBfRE9XTl9TVFJFQU1fUE9SVF9DT1VOVDsKPiAKPiBNb3ZlIHRoaXMgZG93biB0 byB3aGVyZSBpdCdzIHVzZWQKPiAKPj4gKwo+PiArCWlmICgoZHBjZFtEUF9ET1dOU1RSRUFNUE9S VF9QUkVTRU5UXSAmIERQX0RXTl9TVFJNX1BPUlRfUFJFU0VOVCkKPj4gKwkJJiYgKGRwY2RbRFBf RFBDRF9SRVZdID4gMHgxMCkpIHsKPj4gKwkJcmxlbiA9IGRybV9kcF9kcGNkX3JlYWQocGFuZWwt PmF1eC0+ZHJtX2F1eCwKPj4gKwkJCURQX0RPV05TVFJFQU1fUE9SVF8wLCBkcF9wYW5lbC0+ZHNf cG9ydHMsCj4+ICsJCQlEUF9NQVhfRE9XTlNUUkVBTV9QT1JUUyk7Cj4+ICsJCWlmIChybGVuIDwg RFBfTUFYX0RPV05TVFJFQU1fUE9SVFMpIHsKPj4gKwkJCXByX2VycigiZHMgcG9ydCBzdGF0dXMg ZmFpbGVkLCBybGVuPSVkXG4iLCBybGVuKTsKPj4gKwkJCXJjID0gLUVJTlZBTDsKPj4gKwkJCWdv dG8gZW5kOwo+PiArCQl9Cj4+ICsJfQo+IAo+IFlvdSBkb24ndCB1c2UgZHNfcG9ydHMgYW55d2hl cmUsIHNvIHJlbW92ZSB0aGlzIGFuZCByZW1vdmUgZHNfcG9ydHMKPiAKPj4gKwo+PiArCWlmIChk ZnBfY291bnQgPiBEUF9NQVhfRFNfUE9SVF9DT1VOVCkKPj4gKwkJcHJfZGVidWcoIkRTIHBvcnQg Y291bnQgJWQgZ3JlYXRlciB0aGF0IG1heCAoJWQpIHN1cHBvcnRlZFxuIiwKPj4gKwkJCWRmcF9j b3VudCwgRFBfTUFYX0RTX1BPUlRfQ09VTlQpOwo+IAo+IFNob3VsZCB0aGlzIGJlIGFuIGVycm9y Pwo+IAo+PiArCj4+ICtlbmQ6Cj4+ICsJcmV0dXJuIHJjOwo+IAo+IFNhbWUgZHJpbGwgYXMgYmVm b3JlCj4gCj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfcGFuZWxfc2V0X2RlZmF1bHRfbGlu a19wYXJhbXMoc3RydWN0IGRwX3BhbmVsIAo+PiAqZHBfcGFuZWwpCj4+ICt7Cj4gCj4gTGV0J3Mg anVzdCBmYWlsIGluc3RlYWQgb2YgZG9pbmcgdGhpcy4KPiAKPj4gKwlzdHJ1Y3QgZHJtX2RwX2xp bmsgKmxpbmtfaW5mbzsKPj4gKwljb25zdCBpbnQgZGVmYXVsdF9id19jb2RlID0gMTYyMDAwOwo+ PiArCWNvbnN0IGludCBkZWZhdWx0X251bV9sYW5lcyA9IDE7Cj4+ICsKPj4gKwlpZiAoIWRwX3Bh bmVsKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVybiAtRUlO VkFMOwo+PiArCX0KPj4gKwlsaW5rX2luZm8gPSAmZHBfcGFuZWwtPmxpbmtfaW5mbzsKPj4gKwls aW5rX2luZm8tPnJhdGUgPSBkZWZhdWx0X2J3X2NvZGU7Cj4+ICsJbGlua19pbmZvLT5udW1fbGFu ZXMgPSBkZWZhdWx0X251bV9sYW5lczsKPj4gKwlwcl9kZWJ1ZygibGlua19yYXRlPSVkIG51bV9s YW5lcz0lZFxuIiwKPj4gKwkJbGlua19pbmZvLT5yYXRlLCBsaW5rX2luZm8tPm51bV9sYW5lcyk7 Cj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfcGFuZWxfcmVhZF9l ZGlkKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwsCj4+ICsJc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvcikKPj4gK3sKPj4gKwlpbnQgcmV0cnlfY250ID0gMDsKPj4gKwljb25zdCBpbnQg bWF4X3JldHJ5ID0gMTA7Cj4+ICsJc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVsOwo+PiAr Cj4+ICsJaWYgKCFkcF9wYW5lbCkgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+ PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwlwYW5lbCA9IGNvbnRhaW5lcl9v ZihkcF9wYW5lbCwgc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUsIGRwX3BhbmVsKTsKPj4gKwo+PiAr CWRvIHsKPj4gKwkJa2ZyZWUoZHBfcGFuZWwtPmVkaWQpOwo+PiArCQlkcF9wYW5lbC0+ZWRpZCA9 IGRybV9nZXRfZWRpZChjb25uZWN0b3IsCj4+ICsJCQkJCSAgICAgICZwYW5lbC0+YXV4LT5kcm1f YXV4LT5kZGMpOwo+PiArCQlpZiAoIWRwX3BhbmVsLT5lZGlkKSB7Cj4+ICsJCQlwcl9lcnIoIkVE SUQgcmVhZCBmYWlsZWRcbiIpOwo+PiArCQkJcmV0cnlfY250Kys7Cj4+ICsJCQlwYW5lbC0+YXV4 LT5yZWNvbmZpZyhwYW5lbC0+YXV4KTsKPj4gKwkJCXBhbmVsLT5hdXhfY2ZnX3VwZGF0ZV9kb25l ID0gdHJ1ZTsKPj4gKwkJfSBlbHNlIHsKPj4gKwkJCXJldHVybiAwOwo+PiArCQl9Cj4+ICsJfSB3 aGlsZSAocmV0cnlfY250IDwgbWF4X3JldHJ5KTsKPiAKPiBUaGUgY29yZSB3aWxsIGRvIHJldHJ5 cyB3aGVuIGF1eCByZWFkcyBmYWlsLCBzbyB5b3UgZG9uJ3QgbmVlZCB0by4gV2l0aCAKPiB0aGF0 LAo+IHlvdSBjYW4ganVzdCByZW1vdmUgdGhpcyBmdW5jdGlvbiBhbmQgY2FsbCBkcm1fZ2V0X2Vk aWQgaW4gCj4gcmVhZF9zaW5rX2NhcHMKPiAKPj4gKwo+PiArCXJldHVybiAtRUlOVkFMOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW50IGRwX3BhbmVsX3JlYWRfc2lua19jYXBzKHN0cnVjdCBkcF9w YW5lbCAqZHBfcGFuZWwsCj4+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPj4g K3sKPj4gKwlpbnQgcmMgPSAwOwo+PiArCXN0cnVjdCBkcF9wYW5lbF9wcml2YXRlICpwYW5lbDsK Pj4gKwo+PiArCWlmICghZHBfcGFuZWwgfHwgIWNvbm5lY3Rvcikgewo+PiArCQlwcl9lcnIoImlu dmFsaWQgaW5wdXRcbiIpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwlw YW5lbCA9IGNvbnRhaW5lcl9vZihkcF9wYW5lbCwgc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUsIGRw X3BhbmVsKTsKPj4gKwo+PiArCXJjID0gZHBfcGFuZWxfcmVhZF9kcGNkKGRwX3BhbmVsKTsKPj4g KwlpZiAocmMgfHwgIWlzX2xpbmtfcmF0ZV92YWxpZChkcm1fZHBfbGlua19yYXRlX3RvX2J3X2Nv ZGUoCj4+ICsJCWRwX3BhbmVsLT5saW5rX2luZm8ucmF0ZSkpIHx8ICFpc19sYW5lX2NvdW50X3Zh bGlkKAo+PiArCQlkcF9wYW5lbC0+bGlua19pbmZvLm51bV9sYW5lcykgfHwKPj4gKwkJKChkcm1f ZHBfbGlua19yYXRlX3RvX2J3X2NvZGUoZHBfcGFuZWwtPmxpbmtfaW5mby5yYXRlKSkgPgo+PiAr CQlkcF9wYW5lbC0+bWF4X2J3X2NvZGUpKSB7Cj4+ICsJCWlmICgocmMgPT0gLUVUSU1FRE9VVCkg fHwgKHJjID09IC1FTk9ERVYpKSB7Cj4+ICsJCQlwcl9lcnIoIkRQQ0QgcmVhZCBmYWlsZWQsIHJl dHVybiBlYXJseVxuIik7Cj4+ICsJCQlyZXR1cm4gcmM7Cj4+ICsJCX0KPj4gKwkJcHJfZXJyKCJw YW5lbCBkcGNkIHJlYWQgZmFpbGVkL2luY29ycmVjdCwgc2V0IGRlZmF1bHQgcGFyYW1zXG4iKTsK Pj4gKwkJZHBfcGFuZWxfc2V0X2RlZmF1bHRfbGlua19wYXJhbXMoZHBfcGFuZWwpOwo+PiArCX0K PiAKPiBTaW5jZSB0aGUgZGVmYXVsdHMgYXJlIGdvaW5nIGF3YXksIHRoaXMgZ2V0cyBzaW1wbGVy IChhbmQgZXZlbiBzaW1wbGVyIAo+IGlmIHlvdQo+IHN0YXNoIGJ3X2NvZGUpOgo+IAo+IAlid19j b2RlID0gZHJtX2RwX2xpbmtfcmF0ZV90b19id19jb2RlKGRwX3BhbmVsLT5saW5rX2luZm8ucmF0 ZSk7Cj4gCWlmIChyYyB8fCAhaXNfbGlua19yYXRlX3ZhbGlkKGJ3X2NvZGUpIHx8Cj4gICAgICAg ICAgICAgIWlzX2xhbmVfY291bnRfdmFsaWQoZHBfcGFuZWwtPmxpbmtfaW5mby5udW1fbGFuZXMp IHx8Cj4gCSAgICBid19jb2RlID4gZHBfcGFuZWwtPm1heF9id19jb2RlKSB7Cj4gCQlwcl9lcnIo InJlYWRfZHBjZCBmYWlsZWQgJWRcbiIsIHJjKTsKPiAJCXJldHVybiByYzsKPiAJfQo+IAo+PiAr Cj4+ICsJcmMgPSBkcF9wYW5lbF9yZWFkX2VkaWQoZHBfcGFuZWwsIGNvbm5lY3Rvcik7Cj4gCj4g V2h5IHJlYWQgdGhlIGVkaWQgc28gZWFybHk/IENhbid0IHlvdSB3YWl0IHVudGlsIGdldF9tb2Rl cyBpcyBjYWxsZWQgCj4gKHlvdSdsbAo+IGhhdmUgdG8gcmUtcmVhZCBhbnl3YXlzKS4KPiAKPj4g KwlpZiAocmMpIHsKPj4gKwkJcHJfZXJyKCJwYW5lbCBlZGlkIHJlYWQgZmFpbGVkLCBzZXQgZmFp bHNhZmUgbW9kZVxuIik7Cj4+ICsJCXJldHVybiByYzsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAocGFu ZWwtPmF1eF9jZmdfdXBkYXRlX2RvbmUpIHsKPj4gKwkJcHJfZGVidWcoInJlYWQgRFBDRCB3aXRo IHVwZGF0ZWQgQVVYIGNvbmZpZ1xuIik7Cj4+ICsJCWRwX3BhbmVsX3JlYWRfZHBjZChkcF9wYW5l bCk7Cj4gCj4gQ2hlY2sgcmV0dXJuIHZhbHVlLiBTaG91bGQgeW91IGFsc28gY2hlY2sgdGhlIHJh dGUvbGFuZV9jb3VudCB2YWxpZGl0eQo+IGFnYWluIHRvbz8KPiAKPj4gKwkJcGFuZWwtPmF1eF9j ZmdfdXBkYXRlX2RvbmUgPSBmYWxzZTsKPiAKPiBTaG91bGQgeW91IGhhdmUgbG9ja2luZyBmb3Ig YXV4X2NmZ191cGRhdGVfZG9uZT8KPiAKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30K Pj4gKwo+PiArc3RhdGljIHUzMiBkcF9wYW5lbF9nZXRfc3VwcG9ydGVkX2JwcChzdHJ1Y3QgZHBf cGFuZWwgKmRwX3BhbmVsLAo+PiArCQl1MzIgbW9kZV9lZGlkX2JwcCwgdTMyIG1vZGVfcGNsa19r aHopCj4+ICt7Cj4+ICsJc3RydWN0IGRybV9kcF9saW5rICpsaW5rX2luZm87Cj4+ICsJY29uc3Qg dTMyIG1heF9zdXBwb3J0ZWRfYnBwID0gMzAsIG1pbl9zdXBwb3J0ZWRfYnBwID0gMTg7Cj4+ICsJ dTMyIGJwcCA9IDAsIGRhdGFfcmF0ZV9raHogPSAwOwo+PiArCj4+ICsJYnBwID0gbWluX3QodTMy LCBtb2RlX2VkaWRfYnBwLCBtYXhfc3VwcG9ydGVkX2JwcCk7Cj4+ICsKPj4gKwlsaW5rX2luZm8g PSAmZHBfcGFuZWwtPmxpbmtfaW5mbzsKPj4gKwlkYXRhX3JhdGVfa2h6ID0gbGlua19pbmZvLT5u dW1fbGFuZXMgKiBsaW5rX2luZm8tPnJhdGUgKiA4Owo+PiArCj4+ICsJd2hpbGUgKGJwcCA+IG1p bl9zdXBwb3J0ZWRfYnBwKSB7Cj4+ICsJCWlmIChtb2RlX3BjbGtfa2h6ICogYnBwIDw9IGRhdGFf cmF0ZV9raHopCj4+ICsJCQlicmVhazsKPj4gKwkJYnBwIC09IDY7Cj4gCj4gV2F0Y2ggb3V0IGZv ciB1bmRlcmZsb3cgaGVyZS4KPiAKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gYnBwOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgdTMyIGRwX3BhbmVsX2dldF9tb2RlX2JwcChzdHJ1Y3QgZHBfcGFuZWwg KmRwX3BhbmVsLAo+PiArCQl1MzIgbW9kZV9lZGlkX2JwcCwgdTMyIG1vZGVfcGNsa19raHopCj4+ ICt7Cj4+ICsJc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVsOwo+PiArCXUzMiBicHAgPSBt b2RlX2VkaWRfYnBwOwo+PiArCj4+ICsJaWYgKCFkcF9wYW5lbCB8fCAhbW9kZV9lZGlkX2JwcCB8 fCAhbW9kZV9wY2xrX2toeikgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiAr CQlyZXR1cm4gMDsKPj4gKwl9Cj4+ICsKPj4gKwlwYW5lbCA9IGNvbnRhaW5lcl9vZihkcF9wYW5l bCwgc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUsIGRwX3BhbmVsKTsKPj4gKwo+PiArCWlmIChkcF9w YW5lbC0+dmlkZW9fdGVzdCkKPj4gKwkJYnBwID0gZHBfbGlua19iaXRfZGVwdGhfdG9fYnBwKAo+ PiArCQkJCXBhbmVsLT5saW5rLT50ZXN0X3ZpZGVvLnRlc3RfYml0X2RlcHRoKTsKPj4gKwllbHNl Cj4+ICsJCWJwcCA9IGRwX3BhbmVsX2dldF9zdXBwb3J0ZWRfYnBwKGRwX3BhbmVsLCBtb2RlX2Vk aWRfYnBwLAo+PiArCQkJCW1vZGVfcGNsa19raHopOwo+PiArCj4+ICsJcmV0dXJuIGJwcDsKPj4g K30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfcGFuZWxfc2V0X3Rlc3RfbW9kZShzdHJ1Y3QgZHBf cGFuZWxfcHJpdmF0ZSAqcGFuZWwsCj4+ICsJCXN0cnVjdCBkcF9kaXNwbGF5X21vZGUgKm1vZGUp Cj4+ICt7Cj4+ICsJc3RydWN0IGRwX3BhbmVsX2luZm8gKnBpbmZvID0gTlVMTDsKPiAKPiAKPiBB cyBtZW50aW9uZWQgZWFybGllciwgbm8gbmVlZCB0byBkdXBsaWNhdGUgZHJtX2Rpc3BsYXlfbW9k ZSBpbnRvCj4gZHBfZGlzcGxheV9tb2RlLCBzYW1lIGdvZXMgZm9yIGRwX3BhbmVsX2luZm8sIHBs ZWFzZSBqdXN0IHVzZSAKPiBkcm1fZGlzcGxheV9tb2RlLgo+IAo+PiArCXN0cnVjdCBkcF9saW5r X3Rlc3RfdmlkZW8gKnRlc3RfaW5mbyA9IE5VTEw7Cj4+ICsKPj4gKwlpZiAoIXBhbmVsKSB7Cj4+ ICsJCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiAr Cj4+ICsJcGluZm8gPSAmbW9kZS0+dGltaW5nOwo+PiArCXRlc3RfaW5mbyA9ICZwYW5lbC0+bGlu ay0+dGVzdF92aWRlbzsKPj4gKwo+PiArCXBpbmZvLT5oX2FjdGl2ZSA9IHRlc3RfaW5mby0+dGVz dF9oX3dpZHRoOwo+PiArCXBpbmZvLT5oX3N5bmNfd2lkdGggPSB0ZXN0X2luZm8tPnRlc3RfaHN5 bmNfd2lkdGg7Cj4+ICsJcGluZm8tPmhfYmFja19wb3JjaCA9IHRlc3RfaW5mby0+dGVzdF9oX3N0 YXJ0IC0KPj4gKwkJdGVzdF9pbmZvLT50ZXN0X2hzeW5jX3dpZHRoOwo+PiArCXBpbmZvLT5oX2Zy b250X3BvcmNoID0gdGVzdF9pbmZvLT50ZXN0X2hfdG90YWwgLQo+PiArCQkodGVzdF9pbmZvLT50 ZXN0X2hfc3RhcnQgKyB0ZXN0X2luZm8tPnRlc3RfaF93aWR0aCk7Cj4+ICsKPj4gKwlwaW5mby0+ dl9hY3RpdmUgPSB0ZXN0X2luZm8tPnRlc3Rfdl9oZWlnaHQ7Cj4+ICsJcGluZm8tPnZfc3luY193 aWR0aCA9IHRlc3RfaW5mby0+dGVzdF92c3luY193aWR0aDsKPj4gKwlwaW5mby0+dl9iYWNrX3Bv cmNoID0gdGVzdF9pbmZvLT50ZXN0X3Zfc3RhcnQgLQo+PiArCQl0ZXN0X2luZm8tPnRlc3RfdnN5 bmNfd2lkdGg7Cj4+ICsJcGluZm8tPnZfZnJvbnRfcG9yY2ggPSB0ZXN0X2luZm8tPnRlc3Rfdl90 b3RhbCAtCj4+ICsJCSh0ZXN0X2luZm8tPnRlc3Rfdl9zdGFydCArIHRlc3RfaW5mby0+dGVzdF92 X2hlaWdodCk7Cj4+ICsKPj4gKwlwaW5mby0+YnBwID0gZHBfbGlua19iaXRfZGVwdGhfdG9fYnBw KHRlc3RfaW5mby0+dGVzdF9iaXRfZGVwdGgpOwo+PiArCXBpbmZvLT5oX2FjdGl2ZV9sb3cgPSB0 ZXN0X2luZm8tPnRlc3RfaHN5bmNfcG9sOwo+PiArCXBpbmZvLT52X2FjdGl2ZV9sb3cgPSB0ZXN0 X2luZm8tPnRlc3RfdnN5bmNfcG9sOwo+PiArCj4+ICsJcGluZm8tPnJlZnJlc2hfcmF0ZSA9IHRl c3RfaW5mby0+dGVzdF9ycl9uOwo+PiArCXBpbmZvLT5waXhlbF9jbGtfa2h6ID0gdGVzdF9pbmZv LT50ZXN0X2hfdG90YWwgKgo+PiArCQl0ZXN0X2luZm8tPnRlc3Rfdl90b3RhbCAqIHBpbmZvLT5y ZWZyZXNoX3JhdGU7Cj4+ICsKPj4gKwlpZiAodGVzdF9pbmZvLT50ZXN0X3JyX2QgPT0gMCkKPj4g KwkJcGluZm8tPnBpeGVsX2Nsa19raHogLz0gMTAwMDsKPj4gKwllbHNlCj4+ICsJCXBpbmZvLT5w aXhlbF9jbGtfa2h6IC89IDEwMDE7Cj4+ICsKPj4gKwlpZiAodGVzdF9pbmZvLT50ZXN0X2hfd2lk dGggPT0gNjQwKQo+PiArCQlwaW5mby0+cGl4ZWxfY2xrX2toeiA9IDI1MTcwOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IGRwX3BhbmVsX3VwZGF0ZV9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLAo+PiArCXN0cnVjdCBlZGlkICplZGlkKQo+PiArewo+PiArCWludCByYyA9 IDA7Cj4+ICsKPj4gKwlwcl9kZWJ1ZygiJXMgKyIsIF9fZnVuY19fKTsKPiAKPiByZW1vdmUKPiAK PiBPaywgc28gdGhpcyBpcyB3aGVyZSB5b3Ugc2hvdWxkIGJlIHJlYWRpbmcgZWRpZC4KPiAKPj4g KwlpZiAoZWRpZCkgewo+PiArCQlkcm1fY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNv bm5lY3RvciwKPj4gKwkJCWVkaWQpOwo+IAo+IEpvaW4gb24gb25lIGxpbmUgYW5kIGNoZWNrIHJl dHVybiB2YWx1ZQo+IAo+PiArCQlyYyA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVk aWQpOwo+PiArCQlwcl9kZWJ1ZygiJXMgLSIsIF9fZnVuY19fKTsKPj4gKwkJcmV0dXJuIHJjOwo+ PiArCX0KPj4gKwo+PiArCWRybV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVj dG9yLCBOVUxMKTsKPiAKPiBDaGVjayByZXR1cm4gdmFsdWUKPiAKPj4gKwlwcl9kZWJ1ZygiJXMg bnVsbCBlZGlkIC0iLCBfX2Z1bmNfXyk7Cj4+ICsJcmV0dXJuIHJjOwo+IAo+IFRoaXMgaXMgYWx3 YXlzIDAKPiAKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9wYW5lbF9nZXRfbW9kZXMoc3Ry dWN0IGRwX3BhbmVsICpkcF9wYW5lbCwKPj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLCBzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlICptb2RlKQo+PiArewo+PiArCXN0cnVjdCBkcF9w YW5lbF9wcml2YXRlICpwYW5lbDsKPj4gKwo+PiArCWlmICghZHBfcGFuZWwpIHsKPj4gKwkJcHJf ZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiAr Cj4+ICsJcGFuZWwgPSBjb250YWluZXJfb2YoZHBfcGFuZWwsIHN0cnVjdCBkcF9wYW5lbF9wcml2 YXRlLCBkcF9wYW5lbCk7Cj4+ICsKPj4gKwlpZiAoZHBfcGFuZWwtPnZpZGVvX3Rlc3QpIHsKPj4g KwkJZHBfcGFuZWxfc2V0X3Rlc3RfbW9kZShwYW5lbCwgbW9kZSk7Cj4+ICsJCXJldHVybiAxOwo+ PiArCX0gZWxzZSBpZiAoZHBfcGFuZWwtPmVkaWQpIHsKPj4gKwkgIHJldHVybiBkcF9wYW5lbF91 cGRhdGVfbW9kZXMoY29ubmVjdG9yLCBkcF9wYW5lbC0+ZWRpZCk7Cj4gCj4gSW5kZW50YXRpb24g aXMgd3JvbmcKPiAKPj4gKwl9Cj4+ICsKPj4gKwkvKiBmYWlsLXNhZmUgbW9kZSAqLwo+PiArCW1l bWNweSgmbW9kZS0+dGltaW5nLCAmZmFpbF9zYWZlLAo+PiArCQlzaXplb2YoZmFpbF9zYWZlKSk7 Cj4+ICsJcmV0dXJuIDE7Cj4gCj4gRGVsZXRlIGZhaWwgc2FmZSBhbmQgcmV0dXJuIDA7Cj4gCj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyB1OCBkcF9wYW5lbF9nZXRfZWRpZF9jaGVja3N1bShzdHJ1Y3Qg ZWRpZCAqZWRpZCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZWRpZCAqbGFzdF9ibG9jayA9IE5VTEw7Cj4+ ICsJdTggKnJhd19lZGlkID0gTlVMTDsKPiAKPiBObyBuZWVkIHRvIGluaXRpYWxpemUgdGhlc2Uu Cj4gCj4+ICsKPj4gKwlpZiAoIWVkaWQpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGVkaWQgaW5w dXRcbiIpOwo+PiArCQlyZXR1cm4gMDsKPj4gKwl9Cj4+ICsKPj4gKwlyYXdfZWRpZCA9ICh1OCAq KWVkaWQ7Cj4+ICsJcmF3X2VkaWQgKz0gKGVkaWQtPmV4dGVuc2lvbnMgKiBFRElEX0xFTkdUSCk7 Cj4+ICsJbGFzdF9ibG9jayA9IChzdHJ1Y3QgZWRpZCAqKXJhd19lZGlkOwo+PiArCj4+ICsJaWYg KGxhc3RfYmxvY2spCj4gCj4gSSBkb3VidCBsYXN0X2Jsb2NrIHdpbGwgZXZlciBiZSBOVUxMLCBz byB0aGlzIGNoZWNrIGlzIGtpbmQgb2YgCj4gcG9pbnRsZXNzLgo+IFBlcmhhcHMgY2FsbCBkcm1f ZWRpZF9ibG9ja192YWxpZCgpIGluc3RlYWQuCj4gCj4+ICsJCXJldHVybiBsYXN0X2Jsb2NrLT5j aGVja3N1bTsKPj4gKwo+PiArCXByX2VycigiSW52YWxpZCBibG9jaywgbm8gY2hlY2tzdW1cbiIp Owo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9wYW5lbF9oYW5k bGVfc2lua19yZXF1ZXN0KHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpCj4+ICt7Cj4+ICsJc3Ry dWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVsOwo+PiArCj4+ICsJaWYgKCFkcF9wYW5lbCkgewo+ PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiAr Cj4+ICsJcGFuZWwgPSBjb250YWluZXJfb2YoZHBfcGFuZWwsIHN0cnVjdCBkcF9wYW5lbF9wcml2 YXRlLCBkcF9wYW5lbCk7Cj4+ICsKPj4gKwlpZiAocGFuZWwtPmxpbmstPnNpbmtfcmVxdWVzdCAm IERQX1RFU1RfTElOS19FRElEX1JFQUQpIHsKPj4gKwkJdTggY2hlY2tzdW0gPSBkcF9wYW5lbF9n ZXRfZWRpZF9jaGVja3N1bShkcF9wYW5lbC0+ZWRpZCk7Cj4+ICsKPj4gKwkJcGFuZWwtPmxpbmst PnNlbmRfZWRpZF9jaGVja3N1bShwYW5lbC0+bGluaywgY2hlY2tzdW0pOwo+PiArCQlwYW5lbC0+ bGluay0+c2VuZF90ZXN0X3Jlc3BvbnNlKHBhbmVsLT5saW5rKTsKPj4gKwl9Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyB2b2lkIGRwX3BhbmVsX3RwZ19jb25maWcoc3RydWN0IGRwX3BhbmVsICpkcF9w YW5lbCwgYm9vbCAKPj4gZW5hYmxlKQo+PiArewo+PiArCXUzMiBoc3luY19zdGFydF94LCBoc3lu Y19lbmRfeDsKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wYW5lbCAqY2F0YWxvZzsKPj4gKwlzdHJ1 Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFuZWw7Cj4+ICsJc3RydWN0IGRwX3BhbmVsX2luZm8gKnBp bmZvOwo+PiArCj4+ICsJaWYgKCFkcF9wYW5lbCkgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5w dXRcbiIpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJcGFuZWwgPSBjb250YWluZXJf b2YoZHBfcGFuZWwsIHN0cnVjdCBkcF9wYW5lbF9wcml2YXRlLCBkcF9wYW5lbCk7Cj4+ICsJY2F0 YWxvZyA9IHBhbmVsLT5jYXRhbG9nOwo+PiArCXBpbmZvID0gJnBhbmVsLT5kcF9wYW5lbC5waW5m bzsKPj4gKwo+PiArCWlmICghcGFuZWwtPnBhbmVsX29uKSB7Cj4+ICsJCXByX2RlYnVnKCJEUCBw YW5lbCBub3QgZW5hYmxlZCwgaGFuZGxlIFRQRyBvbiBuZXh0IHBhbmVsIG9uXG4iKTsKPj4gKwkJ cmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWlmICghZW5hYmxlKSB7Cj4+ICsJCXBhbmVsLT5jYXRh bG9nLT50cGdfY29uZmlnKGNhdGFsb2csIGZhbHNlKTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4g Kwo+PiArCS8qIFRQRyBjb25maWcgKi8KPj4gKwljYXRhbG9nLT5oc3luY19wZXJpb2QgPSBwaW5m by0+aF9zeW5jX3dpZHRoICsgcGluZm8tPmhfYmFja19wb3JjaCArCj4+ICsJCQlwaW5mby0+aF9h Y3RpdmUgKyBwaW5mby0+aF9mcm9udF9wb3JjaDsKPj4gKwljYXRhbG9nLT52c3luY19wZXJpb2Qg PSBwaW5mby0+dl9zeW5jX3dpZHRoICsgcGluZm8tPnZfYmFja19wb3JjaCArCj4+ICsJCQlwaW5m by0+dl9hY3RpdmUgKyBwaW5mby0+dl9mcm9udF9wb3JjaDsKPj4gKwo+PiArCWNhdGFsb2ctPmRp c3BsYXlfdl9zdGFydCA9ICgocGluZm8tPnZfc3luY193aWR0aCArCj4+ICsJCQlwaW5mby0+dl9i YWNrX3BvcmNoKSAqIGNhdGFsb2ctPmhzeW5jX3BlcmlvZCk7Cj4+ICsJY2F0YWxvZy0+ZGlzcGxh eV92X2VuZCA9ICgoY2F0YWxvZy0+dnN5bmNfcGVyaW9kIC0KPj4gKwkJCXBpbmZvLT52X2Zyb250 X3BvcmNoKSAqIGNhdGFsb2ctPmhzeW5jX3BlcmlvZCkgLSAxOwo+PiArCj4+ICsJY2F0YWxvZy0+ ZGlzcGxheV92X3N0YXJ0ICs9IHBpbmZvLT5oX3N5bmNfd2lkdGggKyAKPj4gcGluZm8tPmhfYmFj a19wb3JjaDsKPj4gKwljYXRhbG9nLT5kaXNwbGF5X3ZfZW5kIC09IHBpbmZvLT5oX2Zyb250X3Bv cmNoOwo+PiArCj4+ICsJaHN5bmNfc3RhcnRfeCA9IHBpbmZvLT5oX2JhY2tfcG9yY2ggKyBwaW5m by0+aF9zeW5jX3dpZHRoOwo+PiArCWhzeW5jX2VuZF94ID0gY2F0YWxvZy0+aHN5bmNfcGVyaW9k IC0gcGluZm8tPmhfZnJvbnRfcG9yY2ggLSAxOwo+PiArCj4+ICsJY2F0YWxvZy0+dl9zeW5jX3dp ZHRoID0gcGluZm8tPnZfc3luY193aWR0aDsKPj4gKwo+PiArCWNhdGFsb2ctPmhzeW5jX2N0bCA9 IChjYXRhbG9nLT5oc3luY19wZXJpb2QgPDwgMTYpIHwKPj4gKwkJCXBpbmZvLT5oX3N5bmNfd2lk dGg7Cj4+ICsJY2F0YWxvZy0+ZGlzcGxheV9oY3RsID0gKGhzeW5jX2VuZF94IDw8IDE2KSB8IGhz eW5jX3N0YXJ0X3g7Cj4gCj4gTW9yZSBtb2RlIHRpbWluZyBwYXJhbWV0ZXJzIHRvIGRlbGV0ZSEK PiAKPj4gKwo+PiArCXByX2VycigiJXM6IGNhbGxpbmcgY2F0YWxvZyB0cGdfY29uZmlnXG4iLCBf X2Z1bmNfXyk7Cj4+ICsJcGFuZWwtPmNhdGFsb2ctPnRwZ19jb25maWcoY2F0YWxvZywgdHJ1ZSk7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfcGFuZWxfdGltaW5nX2NmZyhzdHJ1Y3QgZHBf cGFuZWwgKmRwX3BhbmVsKQo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJdTMyIGRhdGEsIHRv dGFsX3ZlciwgdG90YWxfaG9yOwo+PiArCXN0cnVjdCBkcF9jYXRhbG9nX3BhbmVsICpjYXRhbG9n Owo+PiArCXN0cnVjdCBkcF9wYW5lbF9wcml2YXRlICpwYW5lbDsKPj4gKwlzdHJ1Y3QgZHBfcGFu ZWxfaW5mbyAqcGluZm87Cj4+ICsKPj4gKwlpZiAoIWRwX3BhbmVsKSB7Cj4+ICsJCXByX2Vycigi aW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJZ290byBlbmQ7Cj4+ ICsJfQo+PiArCj4gVGhpcyBpcyBjYWxsZWQgZnJvbSAyIGRpZmZlcmVudCBwbGFjZXMsIGRvIHlv dSBuZWVkIGxvY2tpbmc/Cj4gCj4+ICsJcGFuZWwgPSBjb250YWluZXJfb2YoZHBfcGFuZWwsIHN0 cnVjdCBkcF9wYW5lbF9wcml2YXRlLCBkcF9wYW5lbCk7Cj4+ICsJY2F0YWxvZyA9IHBhbmVsLT5j YXRhbG9nOwo+PiArCXBpbmZvID0gJnBhbmVsLT5kcF9wYW5lbC5waW5mbzsKPj4gKwo+PiArCXBy X2RlYnVnKCJ3aWR0aD0lZCBocG9yY2g9ICVkICVkICVkXG4iLAo+PiArCQlwaW5mby0+aF9hY3Rp dmUsIHBpbmZvLT5oX2JhY2tfcG9yY2gsCj4+ICsJCXBpbmZvLT5oX2Zyb250X3BvcmNoLCBwaW5m by0+aF9zeW5jX3dpZHRoKTsKPj4gKwo+PiArCXByX2RlYnVnKCJoZWlnaHQ9JWQgdnBvcmNoPSAl ZCAlZCAlZFxuIiwKPj4gKwkJcGluZm8tPnZfYWN0aXZlLCBwaW5mby0+dl9iYWNrX3BvcmNoLAo+ PiArCQlwaW5mby0+dl9mcm9udF9wb3JjaCwgcGluZm8tPnZfc3luY193aWR0aCk7Cj4+ICsKPj4g Kwl0b3RhbF9ob3IgPSBwaW5mby0+aF9hY3RpdmUgKyBwaW5mby0+aF9iYWNrX3BvcmNoICsKPj4g KwkJcGluZm8tPmhfZnJvbnRfcG9yY2ggKyBwaW5mby0+aF9zeW5jX3dpZHRoOwo+PiArCj4+ICsJ dG90YWxfdmVyID0gcGluZm8tPnZfYWN0aXZlICsgcGluZm8tPnZfYmFja19wb3JjaCArCj4+ICsJ CQlwaW5mby0+dl9mcm9udF9wb3JjaCArIHBpbmZvLT52X3N5bmNfd2lkdGg7Cj4+ICsKPj4gKwlk YXRhID0gdG90YWxfdmVyOwo+PiArCWRhdGEgPDw9IDE2Owo+PiArCWRhdGEgfD0gdG90YWxfaG9y Owo+PiArCj4+ICsJY2F0YWxvZy0+dG90YWwgPSBkYXRhOwo+PiArCj4+ICsJZGF0YSA9IChwaW5m by0+dl9iYWNrX3BvcmNoICsgcGluZm8tPnZfc3luY193aWR0aCk7Cj4+ICsJZGF0YSA8PD0gMTY7 Cj4+ICsJZGF0YSB8PSAocGluZm8tPmhfYmFja19wb3JjaCArIHBpbmZvLT5oX3N5bmNfd2lkdGgp Owo+PiArCj4+ICsJY2F0YWxvZy0+c3luY19zdGFydCA9IGRhdGE7Cj4+ICsKPj4gKwlkYXRhID0g cGluZm8tPnZfc3luY193aWR0aDsKPj4gKwlkYXRhIDw8PSAxNjsKPj4gKwlkYXRhIHw9IChwaW5m by0+dl9hY3RpdmVfbG93IDw8IDMxKTsKPj4gKwlkYXRhIHw9IHBpbmZvLT5oX3N5bmNfd2lkdGg7 Cj4+ICsJZGF0YSB8PSAocGluZm8tPmhfYWN0aXZlX2xvdyA8PCAxNSk7Cj4+ICsKPj4gKwljYXRh bG9nLT53aWR0aF9ibGFua2luZyA9IGRhdGE7Cj4+ICsKPj4gKwlkYXRhID0gcGluZm8tPnZfYWN0 aXZlOwo+PiArCWRhdGEgPDw9IDE2Owo+PiArCWRhdGEgfD0gcGluZm8tPmhfYWN0aXZlOwo+PiAr Cj4+ICsJY2F0YWxvZy0+ZHBfYWN0aXZlID0gZGF0YTsKPj4gKwo+PiArCXBhbmVsLT5jYXRhbG9n LT50aW1pbmdfY2ZnKGNhdGFsb2cpOwo+PiArCXBhbmVsLT5wYW5lbF9vbiA9IHRydWU7Cj4gCj4g QWdhaW4sIGFsbCBvZiB0aGlzIHNob3VsZCBiZSBkZXJpdmVkIGZyb20gYSBkcm1fZGlzcGxheV9t b2RlIGF0IHRoZSAKPiBwb2ludCB3aGVyZQo+IGl0IGlzIGNvbW1pdHRlZCB0byBoYXJkd2FyZS4g Tm8gbmVlZCB0byBzdG9yZSBpdCBpbiBhbm90aGVyIGZvcm0gaW4gdGhlIAo+IGludGVyaW0KPiAK PiAKPj4gK2VuZDoKPj4gKwlyZXR1cm4gcmM7Cj4gCj4gUmVtb3ZlIGVuZC9yYyBhbmQgcmV0dXJu IGRpcmVjdGx5Cj4gCj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfcGFuZWxfaW5pdF9wYW5l bF9pbmZvKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsK Pj4gKwlzdHJ1Y3QgZHBfcGFuZWxfaW5mbyAqcGluZm87Cj4+ICsKPj4gKwlpZiAoIWRwX3BhbmVs KSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJjID0gLUVJTlZBTDsK Pj4gKwkJZ290byBlbmQ7Cj4+ICsJfQo+PiArCj4+ICsJcGluZm8gPSAmZHBfcGFuZWwtPnBpbmZv Owo+PiArCj4+ICsJLyoKPj4gKwkgKiBwcmludCByZXNvbHV0aW9uIGluZm8gYXMgdGhpcyBpcyBh IHJlc3VsdAo+PiArCSAqIG9mIHVzZXIgaW5pdGlhdGVkIGFjdGlvbiBvZiBjYWJsZSBjb25uZWN0 aW9uCj4+ICsJICovCj4+ICsJcHJfaW5mbygiU0VUIE5FVyBSRVNPTFVUSU9OOlxuIik7Cj4+ICsJ cHJfaW5mbygiJWR4JWRAJWRmcHNcbiIsIHBpbmZvLT5oX2FjdGl2ZSwKPj4gKwkJcGluZm8tPnZf YWN0aXZlLCBwaW5mby0+cmVmcmVzaF9yYXRlKTsKPj4gKwlwcl9pbmZvKCJoX3BvcmNoZXMoYmFj a3xmcm9udHx3aWR0aCkgPSAoJWR8JWR8JWQpXG4iLAo+PiArCQkJcGluZm8tPmhfYmFja19wb3Jj aCwKPj4gKwkJCXBpbmZvLT5oX2Zyb250X3BvcmNoLAo+PiArCQkJcGluZm8tPmhfc3luY193aWR0 aCk7Cj4+ICsJcHJfaW5mbygidl9wb3JjaGVzKGJhY2t8ZnJvbnR8d2lkdGgpID0gKCVkfCVkfCVk KVxuIiwKPj4gKwkJCXBpbmZvLT52X2JhY2tfcG9yY2gsCj4+ICsJCQlwaW5mby0+dl9mcm9udF9w b3JjaCwKPj4gKwkJCXBpbmZvLT52X3N5bmNfd2lkdGgpOwo+PiArCXByX2luZm8oInBpeGVsIGNs b2NrIChLSHopPSglZClcbiIsIHBpbmZvLT5waXhlbF9jbGtfa2h6KTsKPj4gKwlwcl9pbmZvKCJi cHAgPSAlZFxuIiwgcGluZm8tPmJwcCk7Cj4+ICsJcHJfaW5mbygiYWN0aXZlIGxvdyAoaHx2KT0o JWR8JWQpXG4iLCBwaW5mby0+aF9hY3RpdmVfbG93LAo+PiArCQlwaW5mby0+dl9hY3RpdmVfbG93 KTsKPj4gKwo+PiArCXBpbmZvLT5icHAgPSBtYXhfdCh1MzIsIDE4LCBtaW5fdCh1MzIsIHBpbmZv LT5icHAsIDMwKSk7Cj4+ICsJcHJfaW5mbygidXBkYXRlZCBicHAgPSAlZFxuIiwgcGluZm8tPmJw cCk7Cj4gCj4gCj4gTm8gaW5mbyBsZXZlbCBsb2dzLCBwbGVhc2UuCj4gCj4+ICtlbmQ6Cj4+ICsJ cmV0dXJuIHJjOwo+IAo+IFJlbW92ZSBlbmQvcmMgYW5kIHJldHVybiBkaXJlY3RseQo+IAo+PiAr fQo+PiArCj4+ICtzdGF0aWMgdTMyIGRwX3BhbmVsX2dldF9taW5fcmVxX2xpbmtfcmF0ZShzdHJ1 Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKQo+PiArewo+PiArCWNvbnN0IHUzMiBlbmNvZGluZ19mYWN0 eDEwID0gODsKPj4gKwl1MzIgbWluX2xpbmtfcmF0ZV9raHogPSAwLCBsYW5lX2NudDsKPj4gKwlz dHJ1Y3QgZHBfcGFuZWxfaW5mbyAqcGluZm87Cj4+ICsKPj4gKwlpZiAoIWRwX3BhbmVsKSB7Cj4g Cj4gVGhlIG9ubHkgd2F5IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBpcyB0aHJvdWdoIGEgZHBfcGFu ZWwgY2FsbGJhY2ssIGFuZCAKPiB5ZXQgd2UKPiBjaGVjayBpZiBkcF9wYW5lbCBpcyBOVUxMIDop Cj4gCj4gVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgbW9zdCBmdW5jdGlvbnMgaW4gdGhpcyBwYXRjaC4g VGhpbmdzIHdpbGwgYmUgYSBsb3QgCj4gc2ltcGxlcgo+IHdoZW4gYWxsIG9mIHRoZXNlIGFyZSBy ZW1vdmVkLiBUaGlzIGZ1bmN0aW9uIHdpbGwgbm8gbG9uZ2VyIGhhdmUgYW4gCj4gZXJyb3IgcGF0 aAo+IGFuZCBsYW5lX2NudC9waW5mbyBjYW4gYmUgaW5pdGlhbGl6ZWQgZGlyZWN0bHkgYWJvdmUu Cj4gCj4gCj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCWdvdG8gZW5kOwo+ PiArCX0KPj4gKwo+PiArCWxhbmVfY250ID0gZHBfcGFuZWwtPmxpbmtfaW5mby5udW1fbGFuZXM7 Cj4+ICsJcGluZm8gPSAmZHBfcGFuZWwtPnBpbmZvOwo+PiArCj4+ICsJLyogbnVtX2xhbmVzICog bGFuZV9jb3VudCAqIDggPj0gcGNsayAqIGJwcCAqIDEwICovCj4+ICsJbWluX2xpbmtfcmF0ZV9r aHogPSBwaW5mby0+cGl4ZWxfY2xrX2toeiAvCj4+ICsJCQkJKGxhbmVfY250ICogZW5jb2Rpbmdf ZmFjdHgxMCk7Cj4+ICsJbWluX2xpbmtfcmF0ZV9raHogKj0gcGluZm8tPmJwcDsKPj4gKwo+PiAr CXByX2RlYnVnKCJtaW4gbGNsayByZXE9JWQga2h6IGZvciBwY2xrPSVkIGtoeiwgbGFuZXM9JWQs IGJwcD0lZFxuIiwKPj4gKwkJbWluX2xpbmtfcmF0ZV9raHosIHBpbmZvLT5waXhlbF9jbGtfa2h6 LCBsYW5lX2NudCwKPj4gKwkJcGluZm8tPmJwcCk7Cj4+ICtlbmQ6Cj4+ICsJcmV0dXJuIG1pbl9s aW5rX3JhdGVfa2h6Owo+IAo+IFJlbW92ZSBlbmQgYW5kIHJldHVybiBkaXJlY3RseSBhYm92ZQo+ IAo+PiArfQo+PiArCj4+ICtzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsX2dldChzdHJ1Y3QgZHBf cGFuZWxfaW4gKmluKQo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJc3RydWN0IGRwX3BhbmVs X3ByaXZhdGUgKnBhbmVsOwo+PiArCXN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWw7Cj4+ICsKPj4g KwlpZiAoIWluLT5kZXYgfHwgIWluLT5jYXRhbG9nIHx8ICFpbi0+YXV4IHx8ICFpbi0+bGluaykg ewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ ICsJCWdvdG8gZXJyb3I7Cj4+ICsJfQo+PiArCj4+ICsJcGFuZWwgPSBkZXZtX2t6YWxsb2MoaW4t PmRldiwgc2l6ZW9mKCpwYW5lbCksIEdGUF9LRVJORUwpOwo+PiArCWlmICghcGFuZWwpIHsKPj4g KwkJcmMgPSAtRU5PTUVNOwo+PiArCQlnb3RvIGVycm9yOwo+PiArCX0KPj4gKwo+PiArCXBhbmVs LT5kZXYgPSBpbi0+ZGV2Owo+PiArCXBhbmVsLT5hdXggPSBpbi0+YXV4Owo+PiArCXBhbmVsLT5j YXRhbG9nID0gaW4tPmNhdGFsb2c7Cj4+ICsJcGFuZWwtPmxpbmsgPSBpbi0+bGluazsKPj4gKwo+ PiArCWRwX3BhbmVsID0gJnBhbmVsLT5kcF9wYW5lbDsKPj4gKwlkcF9wYW5lbC0+bWF4X2J3X2Nv ZGUgPSBEUF9MSU5LX0JXXzhfMTsKPj4gKwlwYW5lbC0+YXV4X2NmZ191cGRhdGVfZG9uZSA9IGZh bHNlOwo+PiArCj4+ICsJZHBfcGFuZWwtPmluaXRfaW5mbyA9IGRwX3BhbmVsX2luaXRfcGFuZWxf aW5mbzsKPj4gKwlkcF9wYW5lbC0+dGltaW5nX2NmZyA9IGRwX3BhbmVsX3RpbWluZ19jZmc7Cj4+ ICsJZHBfcGFuZWwtPnJlYWRfc2lua19jYXBzID0gZHBfcGFuZWxfcmVhZF9zaW5rX2NhcHM7Cj4+ ICsJZHBfcGFuZWwtPmdldF9taW5fcmVxX2xpbmtfcmF0ZSA9IGRwX3BhbmVsX2dldF9taW5fcmVx X2xpbmtfcmF0ZTsKPj4gKwlkcF9wYW5lbC0+Z2V0X21vZGVfYnBwID0gZHBfcGFuZWxfZ2V0X21v ZGVfYnBwOwo+PiArCWRwX3BhbmVsLT5nZXRfbW9kZXMgPSBkcF9wYW5lbF9nZXRfbW9kZXM7Cj4+ ICsJZHBfcGFuZWwtPmhhbmRsZV9zaW5rX3JlcXVlc3QgPSBkcF9wYW5lbF9oYW5kbGVfc2lua19y ZXF1ZXN0Owo+PiArCWRwX3BhbmVsLT50cGdfY29uZmlnID0gZHBfcGFuZWxfdHBnX2NvbmZpZzsK Pj4gKwo+PiArCXJldHVybiBkcF9wYW5lbDsKPj4gK2Vycm9yOgo+PiArCXJldHVybiBFUlJfUFRS KHJjKTsKPj4gK30KPj4gKwo+PiArdm9pZCBkcF9wYW5lbF9wdXQoc3RydWN0IGRwX3BhbmVsICpk cF9wYW5lbCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFuZWw7Cj4+ICsK Pj4gKwlpZiAoIWRwX3BhbmVsKQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwlwYW5lbCA9IGNvbnRh aW5lcl9vZihkcF9wYW5lbCwgc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUsIGRwX3BhbmVsKTsKPj4g Kwo+PiArCWtmcmVlKGRwX3BhbmVsLT5lZGlkKTsKPj4gKwlkcF9wYW5lbC0+ZWRpZCA9IE5VTEw7 Cj4+ICsJZGV2bV9rZnJlZShwYW5lbC0+ZGV2LCBwYW5lbCk7Cj4+ICt9Cj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmggCj4+IGIvZHJpdmVycy9ncHUvZHJt L21zbS9kcC9kcF9wYW5lbC5oCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAw MDAuLmJmODAyZGYKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2RwL2RwX3BhbmVsLmgKPj4gQEAgLTAsMCArMSwxMjEgQEAKPj4gKy8qCj4+ICsgKiBDb3B5cmln aHQgKGMpIDIwMTItMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgCj4+IHJl c2VydmVkLgo+PiArICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCj4+IG1vZGlmeQo+PiArICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4+ ICsgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ICsgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4+ ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiArICoK Pj4gKyAqLwo+PiArCj4+ICsjaWZuZGVmIF9EUF9QQU5FTF9IXwo+PiArI2RlZmluZSBfRFBfUEFO RUxfSF8KPj4gKwo+PiArI2luY2x1ZGUgPGRybS9tc21fZHJtLmg+Cj4+ICsKPj4gKyNpbmNsdWRl ICJkcF9hdXguaCIKPj4gKyNpbmNsdWRlICJkcF9saW5rLmgiCj4+ICsjaW5jbHVkZSAiZHBfZXh0 Y29uLmgiCj4+ICsKPj4gK3N0cnVjdCBlZGlkOwo+PiArCj4+ICtlbnVtIGRwX2xhbmVfY291bnQg ewo+PiArCURQX0xBTkVfQ09VTlRfMQk9IDEsCj4+ICsJRFBfTEFORV9DT1VOVF8yCT0gMiwKPj4g KwlEUF9MQU5FX0NPVU5UXzQJPSA0LAo+PiArfTsKPiAKPiBZb3UgZG9uJ3QgbmVlZCBhbiBlbnVt IGZvciB0aGlzLCB0aGUgdmFsdWUgY29taW5nIGZyb20gZHBjZCBpcyBqdXN0IGFuCj4gaW50ZWdl ciBhbmQKPiBjYW4gYmUgdXNlZCBhcyBzdWNoLgo+IAo+PiArCj4+ICsjZGVmaW5lIERQX01BWF9E T1dOU1RSRUFNX1BPUlRTIDB4MTAKPj4gKwo+PiArc3RydWN0IGRwX3BhbmVsX2luZm8gewo+PiAr CXUzMiBoX2FjdGl2ZTsKPj4gKwl1MzIgdl9hY3RpdmU7Cj4+ICsJdTMyIGhfYmFja19wb3JjaDsK Pj4gKwl1MzIgaF9mcm9udF9wb3JjaDsKPj4gKwl1MzIgaF9zeW5jX3dpZHRoOwo+PiArCXUzMiBo X2FjdGl2ZV9sb3c7Cj4+ICsJdTMyIHZfYmFja19wb3JjaDsKPj4gKwl1MzIgdl9mcm9udF9wb3Jj aDsKPj4gKwl1MzIgdl9zeW5jX3dpZHRoOwo+PiArCXUzMiB2X2FjdGl2ZV9sb3c7Cj4+ICsJdTMy IGhfc2tldzsKPj4gKwl1MzIgcmVmcmVzaF9yYXRlOwo+PiArCXUzMiBwaXhlbF9jbGtfa2h6Owo+ PiArCXUzMiBicHA7Cj4+ICt9Owo+IAo+IERyb3AgdGhpcyBzdHJ1Y3QgYW5kIHVzZSBkcm1fZGlz cGxheV9tb2RlCj4gCj4gCj4+ICsKPj4gK3N0cnVjdCBkcF9kaXNwbGF5X21vZGUgewo+PiArCXN0 cnVjdCBkcF9wYW5lbF9pbmZvIHRpbWluZzsKPj4gKwl1MzIgY2FwYWJpbGl0aWVzOwo+PiArfTsK Pj4gKwo+PiArc3RydWN0IGRwX3BhbmVsX2luIHsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+ ICsJc3RydWN0IGRwX2F1eCAqYXV4Owo+PiArCXN0cnVjdCBkcF9saW5rICpsaW5rOwo+PiArCXN0 cnVjdCBkcF9jYXRhbG9nX3BhbmVsICpjYXRhbG9nOwo+PiArfTsKPj4gKwo+PiArc3RydWN0IGRw X3BhbmVsIHsKPj4gKwkvKiBkcGNkIHJhdyBkYXRhICovCj4+ICsJdTggZHBjZFtEUF9SRUNFSVZF Ul9DQVBfU0laRSArIDFdOwo+IAo+IFdoeSArIDE/Cj4gCj4+ICsJdTggZHNfcG9ydHNbRFBfTUFY X0RPV05TVFJFQU1fUE9SVFNdOwo+PiArCj4+ICsJc3RydWN0IGRybV9kcF9saW5rIGxpbmtfaW5m bzsKPj4gKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKPj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yOwo+PiArCXN0cnVjdCBkcF9wYW5lbF9pbmZvIHBpbmZvOwo+PiArCWJvb2wgdmlkZW9f dGVzdDsKPj4gKwo+PiArCXUzMiB2aWM7Cj4+ICsJdTMyIG1heF9wY2xrX2toejsKPj4gKwo+PiAr CXUzMiBtYXhfYndfY29kZTsKPj4gKwlpbnQgKCppbml0X2luZm8pKHN0cnVjdCBkcF9wYW5lbCAq ZHBfcGFuZWwpOwo+PiArCWludCAoKmRlaW5pdCkoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCk7 Cj4+ICsJaW50ICgqdGltaW5nX2NmZykoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCk7Cj4+ICsJ aW50ICgqcmVhZF9zaW5rX2NhcHMpKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwsCj4+ICsJCXN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwo+PiArCXUzMiAoKmdldF9taW5fcmVxX2xp bmtfcmF0ZSkoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCk7Cj4gCj4gVGhpcyBmdW5jdGlvbiBp c24ndCBjYWxsZWQgYW55d2hlcmUKPiAKPj4gKwl1MzIgKCpnZXRfbW9kZV9icHApKHN0cnVjdCBk cF9wYW5lbCAqZHBfcGFuZWwsIHUzMiBtb2RlX21heF9icHAsCj4+ICsJCQl1MzIgbW9kZV9wY2xr X2toeik7Cj4+ICsJaW50ICgqZ2V0X21vZGVzKShzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLAo+ PiArCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZHBfZGlzcGxheV9t b2RlICptb2RlKTsKPj4gKwl2b2lkICgqaGFuZGxlX3NpbmtfcmVxdWVzdCkoc3RydWN0IGRwX3Bh bmVsICpkcF9wYW5lbCk7Cj4+ICsJdm9pZCAoKnRwZ19jb25maWcpKHN0cnVjdCBkcF9wYW5lbCAq ZHBfcGFuZWwsIGJvb2wgZW5hYmxlKTsKPj4gK307Cj4+ICsKPj4gKy8qKgo+PiArICogaXNfbGlu a19yYXRlX3ZhbGlkKCkgLSB2YWxpZGF0ZXMgdGhlIGxpbmsgcmF0ZQo+PiArICogQGxhbmVfcmF0 ZTogbGluayByYXRlIHJlcXVlc3RlZCBieSB0aGUgc2luawo+PiArICoKPj4gKyAqIFJldHVybnMg dHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIGxpbmsgcmF0ZSBpcyBzdXBwb3J0ZWQuCj4+ICsgKi8KPj4g K3N0YXRpYyBpbmxpbmUgYm9vbCBpc19saW5rX3JhdGVfdmFsaWQodTMyIGJ3X2NvZGUpCj4+ICt7 Cj4+ICsJcmV0dXJuICgoYndfY29kZSA9PSBEUF9MSU5LX0JXXzFfNjIpIHx8Cj4+ICsJCShid19j b2RlID09IERQX0xJTktfQldfMl83KSB8fAo+PiArCQkoYndfY29kZSA9PSBEUF9MSU5LX0JXXzVf NCkgfHwKPj4gKwkJKGJ3X2NvZGUgPT0gRFBfTElOS19CV184XzEpKTsKPiAKPiBFYWNoIG9mIHRo ZXNlIGNvbmRpdGlvbnMgaGFzIHVubmVlZGVkICgpCj4gCj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiAr ICogZHBfbGlua19pc19sYW5lX2NvdW50X3ZhbGlkKCkgLSB2YWxpZGF0ZXMgdGhlIGxhbmUgY291 bnQKPj4gKyAqIEBsYW5lX2NvdW50OiBsYW5lIGNvdW50IHJlcXVlc3RlZCBieSB0aGUgc2luawo+ PiArICoKPj4gKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIGxhbmUgY291bnQgaXMg c3VwcG9ydGVkLgo+PiArICovCj4+ICtzdGF0aWMgaW5saW5lIGJvb2wgaXNfbGFuZV9jb3VudF92 YWxpZCh1MzIgbGFuZV9jb3VudCkKPj4gK3sKPj4gKwlyZXR1cm4gKGxhbmVfY291bnQgPT0gRFBf TEFORV9DT1VOVF8xKSB8fAo+PiArCQkobGFuZV9jb3VudCA9PSBEUF9MQU5FX0NPVU5UXzIpIHx8 Cj4+ICsJCShsYW5lX2NvdW50ID09IERQX0xBTkVfQ09VTlRfNCk7Cj4+ICt9Cj4+ICsKPj4gK3N0 cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWxfZ2V0KHN0cnVjdCBkcF9wYW5lbF9pbiAqaW4pOwo+PiAr dm9pZCBkcF9wYW5lbF9wdXQoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCk7Cj4+ICsjZW5kaWYg LyogX0RQX1BBTkVMX0hfICovCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX3BhcnNlci5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFyc2VyLmMKPj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uYTM2NmRjNQo+PiAtLS0gL2Rl di9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFyc2VyLmMKPj4gQEAg LTAsMCArMSw2NzkgQEAKPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxOCwgVGhl IExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgCj4+IHJlc2VydmVkLgo+PiArICoKPj4gKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgCj4+IG1vZGlmeQo+PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4+ICsgKiBvbmx5IHZlcnNpb24gMiBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPj4gKyAqCj4+ICsg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKPj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4+ICsgKiBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiArICoKPj4gKyAqLwo+PiArCj4+ICsjZGVm aW5lIHByX2ZtdChmbXQpCSJbZHJtLWRwXSAlczogIiBmbXQsIF9fZnVuY19fCj4+ICsKPj4gKyNp bmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+Cj4+ICsKPj4gKyNpbmNsdWRlICJkcF9wYXJzZXIuaCIK Pj4gKwo+PiArc3RhdGljIHZvaWQgZHBfcGFyc2VyX3VubWFwX2lvX3Jlc291cmNlcyhzdHJ1Y3Qg ZHBfcGFyc2VyICpwYXJzZXIpCj4+ICt7Cj4+ICsJc3RydWN0IGRwX2lvICppbyA9ICZwYXJzZXIt PmlvOwo+PiArCj4+ICsJbXNtX2Rzc19pb3VubWFwKCZpby0+ZHBfYWhiKTsKPj4gKwltc21fZHNz X2lvdW5tYXAoJmlvLT5kcF9hdXgpOwo+PiArCW1zbV9kc3NfaW91bm1hcCgmaW8tPmRwX2xpbmsp Owo+PiArCW1zbV9kc3NfaW91bm1hcCgmaW8tPmRwX3AwKTsKPj4gKwltc21fZHNzX2lvdW5tYXAo JmlvLT5waHlfaW8pOwo+PiArCW1zbV9kc3NfaW91bm1hcCgmaW8tPmxuX3R4MF9pbyk7Cj4+ICsJ bXNtX2Rzc19pb3VubWFwKCZpby0+bG5fdHgwX2lvKTsKPj4gKwltc21fZHNzX2lvdW5tYXAoJmlv LT5kcF9wbGxfaW8pOwo+PiArCW1zbV9kc3NfaW91bm1hcCgmaW8tPmRwX2NjX2lvKTsKPj4gKwlt c21fZHNzX2lvdW5tYXAoJmlvLT51c2IzX2RwX2NvbSk7Cj4+ICsJbXNtX2Rzc19pb3VubWFwKCZp by0+cWZwcm9tX2lvKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9wYXJzZXJfY3RybF9y ZXMoc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyKQo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJ dTMyIGluZGV4Owo+PiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBwYXJzZXItPnBk ZXY7Cj4+ICsJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlID0gcGFyc2VyLT5wZGV2LT5kZXYu b2Zfbm9kZTsKPj4gKwlzdHJ1Y3QgZHBfaW8gKmlvID0gJnBhcnNlci0+aW87Cj4+ICsKPj4gKwly YyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJjZWxsLWluZGV4IiwgJmluZGV4KTsK Pj4gKwlpZiAocmMpIHsKPj4gKwkJcHJfZXJyKCJjZWxsLWluZGV4IG5vdCBzcGVjaWZpZWQsIHJj PSVkXG4iLCByYyk7Cj4+ICsJCWdvdG8gZXJyOwo+IAo+IFRoaXMgY2FuIGJlIGEgZGlyZWN0IHJl dHVybiBvZiByYy4KPiAKPj4gKwl9Cj4+ICsKPj4gKwlyYyA9IG1zbV9kc3NfaW9yZW1hcF9ieW5h bWUocGRldiwgJmlvLT5kcF9haGIsICJkcF9haGIiKTsKPj4gKwlpZiAocmMpIHsKPj4gKwkJcHJf ZXJyKCJ1bmFibGUgdG8gcmVtYXAgZHAgaW8gcmVzb3VyY2VzXG4iKTsKPiAKPiBQcmludCByYyBo ZXJlIGFuZCBiZWxvdy4KPiAKPj4gKwkJZ290byBlcnI7Cj4+ICsJfQo+PiArCj4+ICsJcmMgPSBt c21fZHNzX2lvcmVtYXBfYnluYW1lKHBkZXYsICZpby0+ZHBfYXV4LCAiZHBfYXV4Iik7Cj4+ICsJ aWYgKHJjKSB7Cj4+ICsJCXByX2VycigidW5hYmxlIHRvIHJlbWFwIGRwIGlvIHJlc291cmNlc1xu Iik7Cj4+ICsJCWdvdG8gZXJyOwo+PiArCX0KPj4gKwo+PiArCXJjID0gbXNtX2Rzc19pb3JlbWFw X2J5bmFtZShwZGV2LCAmaW8tPmRwX2xpbmssICJkcF9saW5rIik7Cj4+ICsJaWYgKHJjKSB7Cj4+ ICsJCXByX2VycigidW5hYmxlIHRvIHJlbWFwIGRwIGlvIHJlc291cmNlc1xuIik7Cj4+ICsJCWdv dG8gZXJyOwo+PiArCX0KPj4gKwo+PiArCXJjID0gbXNtX2Rzc19pb3JlbWFwX2J5bmFtZShwZGV2 LCAmaW8tPmRwX3AwLCAiZHBfcDAiKTsKPj4gKwlpZiAocmMpIHsKPj4gKwkJcHJfZXJyKCJ1bmFi bGUgdG8gcmVtYXAgZHAgaW8gcmVzb3VyY2VzXG4iKTsKPj4gKwkJZ290byBlcnI7Cj4+ICsJfQo+ PiArCj4+ICsJcmMgPSBtc21fZHNzX2lvcmVtYXBfYnluYW1lKHBkZXYsICZpby0+cGh5X2lvLCAi ZHBfcGh5Iik7Cj4+ICsJaWYgKHJjKSB7Cj4+ICsJCXByX2VycigidW5hYmxlIHRvIHJlbWFwIGRw IFBIWSByZXNvdXJjZXNcbiIpOwo+PiArCQlnb3RvIGVycjsKPj4gKwl9Cj4+ICsKPj4gKwlyYyA9 IG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUocGRldiwgJmlvLT5sbl90eDBfaW8sICJkcF9sbl90eDAi KTsKPj4gKwlpZiAocmMpIHsKPj4gKwkJcHJfZXJyKCJ1bmFibGUgdG8gcmVtYXAgZHAgVFgwIHJl c291cmNlc1xuIik7Cj4+ICsJCWdvdG8gZXJyOwo+PiArCX0KPj4gKwo+PiArCXJjID0gbXNtX2Rz c19pb3JlbWFwX2J5bmFtZShwZGV2LCAmaW8tPmxuX3R4MV9pbywgImRwX2xuX3R4MSIpOwo+PiAr CWlmIChyYykgewo+PiArCQlwcl9lcnIoInVuYWJsZSB0byByZW1hcCBkcCBUWDEgcmVzb3VyY2Vz XG4iKTsKPj4gKwkJZ290byBlcnI7Cj4+ICsJfQo+PiArCj4+ICsJcmMgPSBtc21fZHNzX2lvcmVt YXBfYnluYW1lKHBkZXYsICZpby0+ZHBfcGxsX2lvLCAiZHBfcGxsIik7Cj4+ICsJaWYgKHJjKSB7 Cj4+ICsJCXByX2VycigidW5hYmxlIHRvIHJlbWFwIERQIFBMTCByZXNvdXJjZXNcbiIpOwo+PiAr CQlnb3RvIGVycjsKPj4gKwl9Cj4+ICsKPj4gKwlyYyA9IG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUo cGRldiwgJmlvLT51c2IzX2RwX2NvbSwgInVzYjNfZHBfY29tIik7Cj4+ICsJaWYgKHJjKSB7Cj4+ ICsJCXByX2VycigidW5hYmxlIHRvIHJlbWFwIFVTQjMgRFAgY29tIHJlc291cmNlc1xuIik7Cj4+ ICsJCWdvdG8gZXJyOwo+PiArCX0KPj4gKwo+PiArCWlmIChtc21fZHNzX2lvcmVtYXBfYnluYW1l KHBkZXYsICZpby0+ZHBfY2NfaW8sICJkcF9tbXNzX2NjIikpIHsKPj4gKwkJcHJfZXJyKCJ1bmFi bGUgdG8gcmVtYXAgZHAgTU1TU19DQyByZXNvdXJjZXNcbiIpOwo+PiArCQlnb3RvIGVycjsKPj4g Kwl9Cj4+ICsKPj4gKwlpZiAobXNtX2Rzc19pb3JlbWFwX2J5bmFtZShwZGV2LCAmaW8tPnFmcHJv bV9pbywgInFmcHJvbV9waHlzaWNhbCIpKQo+PiArCQlwcl93YXJuKCJ1bmFibGUgdG8gcmVtYXAg ZHAgcWZwcm9tIHJlc291cmNlc1xuIik7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK2VycjoKPj4g KwlkcF9wYXJzZXJfdW5tYXBfaW9fcmVzb3VyY2VzKHBhcnNlcik7Cj4+ICsJcmV0dXJuIHJjOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3QgY2hhciAqZHBfZ2V0X3BoeV9hdXhfY29uZmlnX3By b3BlcnR5KHUzMiBjZmdfdHlwZSkKPj4gK3sKPj4gKwlzd2l0Y2ggKGNmZ190eXBlKSB7Cj4+ICsJ Y2FzZSBQSFlfQVVYX0NGRzA6Cj4+ICsJCXJldHVybiAicWNvbSxhdXgtY2ZnMC1zZXR0aW5ncyI7 Cj4+ICsJY2FzZSBQSFlfQVVYX0NGRzE6Cj4+ICsJCXJldHVybiAicWNvbSxhdXgtY2ZnMS1zZXR0 aW5ncyI7Cj4+ICsJY2FzZSBQSFlfQVVYX0NGRzI6Cj4+ICsJCXJldHVybiAicWNvbSxhdXgtY2Zn Mi1zZXR0aW5ncyI7Cj4+ICsJY2FzZSBQSFlfQVVYX0NGRzM6Cj4+ICsJCXJldHVybiAicWNvbSxh dXgtY2ZnMy1zZXR0aW5ncyI7Cj4+ICsJY2FzZSBQSFlfQVVYX0NGRzQ6Cj4+ICsJCXJldHVybiAi cWNvbSxhdXgtY2ZnNC1zZXR0aW5ncyI7Cj4+ICsJY2FzZSBQSFlfQVVYX0NGRzU6Cj4+ICsJCXJl dHVybiAicWNvbSxhdXgtY2ZnNS1zZXR0aW5ncyI7Cj4+ICsJY2FzZSBQSFlfQVVYX0NGRzY6Cj4+ ICsJCXJldHVybiAicWNvbSxhdXgtY2ZnNi1zZXR0aW5ncyI7Cj4+ICsJY2FzZSBQSFlfQVVYX0NG Rzc6Cj4+ICsJCXJldHVybiAicWNvbSxhdXgtY2ZnNy1zZXR0aW5ncyI7Cj4+ICsJY2FzZSBQSFlf QVVYX0NGRzg6Cj4+ICsJCXJldHVybiAicWNvbSxhdXgtY2ZnOC1zZXR0aW5ncyI7Cj4+ICsJY2Fz ZSBQSFlfQVVYX0NGRzk6Cj4+ICsJCXJldHVybiAicWNvbSxhdXgtY2ZnOS1zZXR0aW5ncyI7Cj4+ ICsJZGVmYXVsdDoKPj4gKwkJcmV0dXJuICJ1bmtub3duIjsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyB2b2lkIGRwX3BhcnNlcl9waHlfYXV4X2NmZ19yZXNldChzdHJ1Y3QgZHBfcGFyc2Vy ICpwYXJzZXIpCj4+ICt7Cj4+ICsJaW50IGkgPSAwOwo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8 IFBIWV9BVVhfQ0ZHX01BWDsgaSsrKQo+PiArCQlwYXJzZXItPmF1eF9jZmdbaV0gPSAoY29uc3Qg c3RydWN0IGRwX2F1eF9jZmcpeyAwIH07Cj4+ICt9Cj4gCj4gTm8gbmVlZCBmb3IgYSBzZXBhcmF0 ZSBmdW5jdGlvbiwganVzdCBwdXQgdGhlIGxvb3AgaW4gdGhlIGVycm9yIGxhYmVsIAo+IGJlbG93 Lgo+IAo+PiArCj4+ICtzdGF0aWMgaW50IGRwX3BhcnNlcl9hdXgoc3RydWN0IGRwX3BhcnNlciAq cGFyc2VyKQo+PiArewo+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSA9IHBhcnNlci0+ cGRldi0+ZGV2Lm9mX25vZGU7Cj4+ICsJaW50IGxlbiA9IDAsIGkgPSAwLCBqID0gMCwgY29uZmln X2NvdW50ID0gMDsKPj4gKwljb25zdCBjaGFyICpkYXRhOwo+PiArCWludCBjb25zdCBtaW5pbXVt X2NvbmZpZ19jb3VudCA9IDE7Cj4gCj4gSnVzdCB1c2UgMSBkaXJlY3RseQo+IAo+PiArCj4+ICsJ Zm9yIChpID0gMDsgaSA8IFBIWV9BVVhfQ0ZHX01BWDsgaSsrKSB7Cj4+ICsJCWNvbnN0IGNoYXIg KnByb3BlcnR5ID0gZHBfZ2V0X3BoeV9hdXhfY29uZmlnX3Byb3BlcnR5KGkpOwo+PiArCj4+ICsJ CWRhdGEgPSBvZl9nZXRfcHJvcGVydHkob2Zfbm9kZSwgcHJvcGVydHksICZsZW4pOwo+PiArCQlp ZiAoIWRhdGEpIHsKPiAKPiBZb3Ugc2hvdWxkIHVzZSBvZl9wcm9wZXJ0eV9yZWFkX3UzMigpIGlu c3RlYWQgb2YgcmVhZGluZyBhcyBhIHN0cmluZwo+IAo+PiArCQkJcHJfZXJyKCJVbmFibGUgdG8g cmVhZCAlc1xuIiwgcHJvcGVydHkpOwo+PiArCQkJZ290byBlcnJvcjsKPj4gKwkJfQo+PiArCj4+ ICsJCWNvbmZpZ19jb3VudCA9IGxlbiAtIDE7Cj4+ICsJCWlmICgoY29uZmlnX2NvdW50IDwgbWlu aW11bV9jb25maWdfY291bnQpIHx8Cj4+ICsJCQkoY29uZmlnX2NvdW50ID4gRFBfQVVYX0NGR19N QVhfVkFMVUVfQ05UKSkgewo+IAo+IFJlbW92ZSBleHRyYSAoKQo+IAo+PiArCQkJcHJfZXJyKCJJ bnZhbGlkIGNvbmZpZyBjb3VudCAoJWQpIGNvbmZpZ3MgZm9yICVzXG4iLAo+PiArCQkJCQljb25m aWdfY291bnQsIHByb3BlcnR5KTsKPj4gKwkJCWdvdG8gZXJyb3I7Cj4+ICsJCX0KPj4gKwo+PiAr CQlwYXJzZXItPmF1eF9jZmdbaV0ub2Zmc2V0ID0gZGF0YVswXTsKPj4gKwkJcGFyc2VyLT5hdXhf Y2ZnW2ldLmNmZ19jbnQgPSBjb25maWdfY291bnQ7Cj4+ICsJCXByX2RlYnVnKCIlcyBvZmZzZXQ9 MHgleCwgY2ZnX2NudD0lZFxuIiwKPj4gKwkJCQlwcm9wZXJ0eSwKPj4gKwkJCQlwYXJzZXItPmF1 eF9jZmdbaV0ub2Zmc2V0LAo+PiArCQkJCXBhcnNlci0+YXV4X2NmZ1tpXS5jZmdfY250KTsKPj4g KwkJZm9yIChqID0gMTsgaiA8IGxlbjsgaisrKSB7Cj4+ICsJCQlwYXJzZXItPmF1eF9jZmdbaV0u bHV0W2ogLSAxXSA9IGRhdGFbal07Cj4gCj4gQW5kIHRoaXMgY291bGQgdXNlIG9mX3Byb3BlcnR5 X3JlYWRfdTMyX2FycmF5KCkKPiAKPj4gKwkJCXByX2RlYnVnKCIlcyBsdXRbJWRdPTB4JXhcbiIs Cj4+ICsJCQkJCXByb3BlcnR5LAo+PiArCQkJCQlpLAo+PiArCQkJCQlwYXJzZXItPmF1eF9jZmdb aV0ubHV0W2ogLSAxXSk7Cj4+ICsJCX0KPj4gKwl9Cj4+ICsJCXJldHVybiAwOwo+PiArCj4+ICtl cnJvcjoKPj4gKwlkcF9wYXJzZXJfcGh5X2F1eF9jZmdfcmVzZXQocGFyc2VyKTsKPj4gKwlyZXR1 cm4gLUVJTlZBTDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9wYXJzZXJfbWlzYyhzdHJ1 Y3QgZHBfcGFyc2VyICpwYXJzZXIpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm9mX25vZGUgPSBwYXJzZXItPnBkZXYtPmRldi5vZl9ub2RlOwo+PiArCj4+ ICsJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLAo+PiArCQkicWNvbSxtYXgtcGNs ay1mcmVxdWVuY3kta2h6IiwgJnBhcnNlci0+bWF4X3BjbGtfa2h6KTsKPj4gKwlpZiAocmMpCj4+ ICsJCXBhcnNlci0+bWF4X3BjbGtfa2h6ID0gRFBfTUFYX1BJWEVMX0NMS19LSFo7Cj4+ICsKPj4g KwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9wYXJzZXJfcGluY3RybChz dHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1 Y3QgZHBfcGluY3RybCAqcGluY3RybCA9ICZwYXJzZXItPnBpbmN0cmw7Cj4+ICsKPj4gKwlwaW5j dHJsLT5waW4gPSBkZXZtX3BpbmN0cmxfZ2V0KCZwYXJzZXItPnBkZXYtPmRldik7Cj4+ICsKPj4g KwlpZiAoSVNfRVJSX09SX05VTEwocGluY3RybC0+cGluKSkgewo+PiArCQlyYyA9IFBUUl9FUlIo cGluY3RybC0+cGluKTsKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHBpbmN0cmwsIHJjPSVk XG4iLCByYyk7Cj4+ICsJCWdvdG8gZXJyb3I7Cj4+ICsJfQo+PiArCj4+ICsJcGluY3RybC0+c3Rh dGVfYWN0aXZlID0gcGluY3RybF9sb29rdXBfc3RhdGUocGluY3RybC0+cGluLAo+PiArCQkJCQki bWRzc19kcF9hY3RpdmUiKTsKPj4gKwlpZiAoSVNfRVJSX09SX05VTEwocGluY3RybC0+c3RhdGVf YWN0aXZlKSkgewo+PiArCQlyYyA9IFBUUl9FUlIocGluY3RybC0+c3RhdGVfYWN0aXZlKTsKPiAK PiBXaGF0IGlmIGl0J3MgTlVMTD8KPiAKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHBpbmN0 cmwgYWN0aXZlIHN0YXRlLCByYz0lZFxuIiwgcmMpOwo+PiArCQlnb3RvIGVycm9yOwo+PiArCX0K Pj4gKwo+PiArCXBpbmN0cmwtPnN0YXRlX3N1c3BlbmQgPSBwaW5jdHJsX2xvb2t1cF9zdGF0ZShw aW5jdHJsLT5waW4sCj4+ICsJCQkJCSJtZHNzX2RwX3NsZWVwIik7Cj4+ICsJaWYgKElTX0VSUl9P Ul9OVUxMKHBpbmN0cmwtPnN0YXRlX3N1c3BlbmQpKSB7Cj4+ICsJCXJjID0gUFRSX0VSUihwaW5j dHJsLT5zdGF0ZV9zdXNwZW5kKTsKPiAKPiBXaGF0IGlmIGl0J3MgTlVMTD8KPiAKPj4gKwkJcHJf ZXJyKCJmYWlsZWQgdG8gZ2V0IHBpbmN0cmwgc3VzcGVuZCBzdGF0ZSwgcmM9JWRcbiIsIHJjKTsK Pj4gKwkJZ290byBlcnJvcjsKPj4gKwl9Cj4+ICtlcnJvcjoKPj4gKwlyZXR1cm4gcmM7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfcGFyc2VyX2dwaW8oc3RydWN0IGRwX3BhcnNlciAqcGFy c2VyKQo+PiArewo+PiArCWludCBpID0gMDsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGFy c2VyLT5wZGV2LT5kZXY7Cj4+ICsJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlID0gZGV2LT5v Zl9ub2RlOwo+PiArCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICptcCA9ICZwYXJzZXItPm1wW0RQ X0NPUkVfUE1dOwo+PiArCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZHBfZ3Bpb3NbXSA9IHsK Pj4gKwkJInFjb20sYXV4LWVuLWdwaW8iLAo+PiArCQkicWNvbSxhdXgtc2VsLWdwaW8iLAo+PiAr CQkicWNvbSx1c2JwbHVnLWNjLWdwaW8iLAo+PiArCX07Cj4+ICsKPj4gKwltcC0+Z3Bpb19jb25m aWcgPSBkZXZtX2t6YWxsb2MoZGV2LAo+PiArCQlzaXplb2Yoc3RydWN0IGRzc19ncGlvKSAqIEFS UkFZX1NJWkUoZHBfZ3Bpb3MpLCBHRlBfS0VSTkVMKTsKPj4gKwlpZiAoIW1wLT5ncGlvX2NvbmZp ZykKPj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4+ICsKPj4gKwltcC0+bnVtX2dwaW8gPSBBUlJBWV9T SVpFKGRwX2dwaW9zKTsKPiAKPiBJZiB5b3UgZG8gdGhpcyBmaXJzdCwgeW91IGNhbiBzL0FSUkFZ X1NJWkUoZHBfZ3Bpb3MpL21wLT5udW1fZ3Bpby8gaW4gCj4gdGhlIHJlc3QKPiBvZiB0aGUgZnVu Y3Rpb24uCj4gCj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcF9ncGlvcyk7 IGkrKykgewo+PiArCQltcC0+Z3Bpb19jb25maWdbaV0uZ3BpbyA9IG9mX2dldF9uYW1lZF9ncGlv KG9mX25vZGUsCj4+ICsJCQlkcF9ncGlvc1tpXSwgMCk7Cj4+ICsKPj4gKwkJaWYgKCFncGlvX2lz X3ZhbGlkKG1wLT5ncGlvX2NvbmZpZ1tpXS5ncGlvKSkgewo+PiArCQkJcHJfZXJyKCIlcyBncGlv IG5vdCBzcGVjaWZpZWRcbiIsIGRwX2dwaW9zW2ldKTsKPj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ PiArCQl9Cj4+ICsKPj4gKwkJc3RybGNweShtcC0+Z3Bpb19jb25maWdbaV0uZ3Bpb19uYW1lLCBk cF9ncGlvc1tpXSwKPj4gKwkJCXNpemVvZihtcC0+Z3Bpb19jb25maWdbaV0uZ3Bpb19uYW1lKSk7 Cj4gCj4gQXMgbWVudGlvbmVkIGVhcmxpZXIsIHBsZWFzZSBkb24ndCBpbXBsZW1lbnQgeW91ciBv d24gc3RyaW5nIAo+IHN0b3JlL2xvb2t1cCwganVzdAo+IHByb3ZpZGUgYWNjZXNzIHRvIHRoZSBn cGlvcyBpbiBhIG1vcmUgZGlyZWN0IG1hbm5lciAocG9pbnRlciBvciAKPiBmdW5jdGlvbikuCj4g Cj4+ICsKPj4gKwkJbXAtPmdwaW9fY29uZmlnW2ldLnZhbHVlID0gMDsKPj4gKwl9Cj4+ICsKPj4g KwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IGNoYXIgKmRwX3BhcnNlcl9z dXBwbHlfbm9kZV9uYW1lKGVudW0gZHBfcG1fdHlwZSBtb2R1bGUpCj4+ICt7Cj4+ICsJc3dpdGNo IChtb2R1bGUpIHsKPj4gKwljYXNlIERQX0NPUkVfUE06CXJldHVybiAicWNvbSxjb3JlLXN1cHBs eS1lbnRyaWVzIjsKPj4gKwljYXNlIERQX0NUUkxfUE06CXJldHVybiAicWNvbSxjdHJsLXN1cHBs eS1lbnRyaWVzIjsKPj4gKwljYXNlIERQX1BIWV9QTToJCXJldHVybiAicWNvbSxwaHktc3VwcGx5 LWVudHJpZXMiOwo+PiArCWRlZmF1bHQ6CQlyZXR1cm4gIj8/PyI7Cj4+ICsJfQo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IGRwX3BhcnNlcl9nZXRfdnJlZyhzdHJ1Y3QgZHBfcGFyc2VyICpwYXJz ZXIsCj4+ICsJCWVudW0gZHBfcG1fdHlwZSBtb2R1bGUpCj4+ICt7Cj4+ICsJaW50IGkgPSAwLCBy YyA9IDA7Cj4+ICsJdTMyIHRtcCA9IDA7Cj4+ICsJY29uc3QgY2hhciAqcG1fc3VwcGx5X25hbWUg PSBOVUxMOwo+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc3VwcGx5X25vZGUgPSBOVUxMOwo+PiAr CXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSA9IHBhcnNlci0+cGRldi0+ZGV2Lm9mX25vZGU7 Cj4+ICsJc3RydWN0IGRldmljZV9ub2RlICpzdXBwbHlfcm9vdF9ub2RlID0gTlVMTDsKPj4gKwlz dHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXAgPSAmcGFyc2VyLT5tcFttb2R1bGVdOwo+PiArCj4+ ICsJbXAtPm51bV92cmVnID0gMDsKPj4gKwlwbV9zdXBwbHlfbmFtZSA9IGRwX3BhcnNlcl9zdXBw bHlfbm9kZV9uYW1lKG1vZHVsZSk7Cj4+ICsJc3VwcGx5X3Jvb3Rfbm9kZSA9IG9mX2dldF9jaGls ZF9ieV9uYW1lKG9mX25vZGUsIHBtX3N1cHBseV9uYW1lKTsKPj4gKwlpZiAoIXN1cHBseV9yb290 X25vZGUpIHsKPj4gKwkJcHJfZXJyKCJubyBzdXBwbHkgZW50cnkgcHJlc2VudDogJXNcbiIsIHBt X3N1cHBseV9uYW1lKTsKPj4gKwkJZ290byBub3ZyZWc7Cj4+ICsJfQo+PiArCj4+ICsJbXAtPm51 bV92cmVnID0gb2ZfZ2V0X2F2YWlsYWJsZV9jaGlsZF9jb3VudChzdXBwbHlfcm9vdF9ub2RlKTsK Pj4gKwo+PiArCWlmIChtcC0+bnVtX3ZyZWcgPT0gMCkgewo+PiArCQlwcl9kZWJ1Zygibm8gdnJl Z1xuIik7Cj4+ICsJCWdvdG8gbm92cmVnOwo+PiArCX0gZWxzZSB7Cj4+ICsJCXByX2RlYnVnKCJ2 cmVnIGZvdW5kLiBjb3VudD0lZFxuIiwgbXAtPm51bV92cmVnKTsKPiAKPiBUaGlzIGRvZXNuJ3Qg bmVlZCB0byBiZSB3cmFwcGVkIGluIGFuIGVsc2UKPiAKPj4gKwl9Cj4+ICsKPj4gKwltcC0+dnJl Z19jb25maWcgPSBkZXZtX2t6YWxsb2MoJnBhcnNlci0+cGRldi0+ZGV2LAo+PiArCQlzaXplb2Yo c3RydWN0IGRzc192cmVnKSAqIG1wLT5udW1fdnJlZywgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFt cC0+dnJlZ19jb25maWcpIHsKPj4gKwkJcmMgPSAtRU5PTUVNOwo+PiArCQlnb3RvIGVycm9yOwo+ PiArCX0KPj4gKwo+PiArCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoc3VwcGx5X3Jvb3Rfbm9kZSwg c3VwcGx5X25vZGUpIHsKPj4gKwkJY29uc3QgY2hhciAqc3QgPSBOVUxMOwo+PiArCQkvKiB2cmVn LW5hbWUgKi8KPj4gKwkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhzdXBwbHlfbm9kZSwK Pj4gKwkJCSJxY29tLHN1cHBseS1uYW1lIiwgJnN0KTsKPj4gKwkJaWYgKHJjKSB7Cj4+ICsJCQlw cl9lcnIoImVycm9yIHJlYWRpbmcgbmFtZS4gcmM9JWRcbiIsCj4+ICsJCQkJIHJjKTsKPj4gKwkJ CWdvdG8gZXJyb3I7Cj4+ICsJCX0KPj4gKwkJc25wcmludGYobXAtPnZyZWdfY29uZmlnW2ldLnZy ZWdfbmFtZSwKPj4gKwkJCUFSUkFZX1NJWkUoKG1wLT52cmVnX2NvbmZpZ1tpXS52cmVnX25hbWUp KSwgIiVzIiwgc3QpOwo+IAo+IEluc3RlYWQgb2Ygc3RvcmluZyB0aGUgbmFtZSBqdXN0IHRvIGdl dCBhIHJlZ3VsYXRvciByZWZlcmVuY2UgbGF0ZXIsIAo+IHdoeSBkb24ndAo+IHlvdSBqdXN0IGdy YWIgdGhlIHJlZmVyZW5jZSBub3cgYW5kIGF2b2lkIHRoZSBzdHJpbmcgb3BzPwo+IAo+PiArCQkv KiB2cmVnLW1pbi12b2x0YWdlICovCj4+ICsJCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoc3Vw cGx5X25vZGUsCj4+ICsJCQkicWNvbSxzdXBwbHktbWluLXZvbHRhZ2UiLCAmdG1wKTsKPj4gKwkJ aWYgKHJjKSB7Cj4+ICsJCQlwcl9lcnIoImVycm9yIHJlYWRpbmcgbWluIHZvbHQuIHJjPSVkXG4i LAo+PiArCQkJCXJjKTsKPj4gKwkJCWdvdG8gZXJyb3I7Cj4+ICsJCX0KPj4gKwkJbXAtPnZyZWdf Y29uZmlnW2ldLm1pbl92b2x0YWdlID0gdG1wOwo+PiArCj4+ICsJCS8qIHZyZWctbWF4LXZvbHRh Z2UgKi8KPj4gKwkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihzdXBwbHlfbm9kZSwKPj4gKwkJ CSJxY29tLHN1cHBseS1tYXgtdm9sdGFnZSIsICZ0bXApOwo+PiArCQlpZiAocmMpIHsKPj4gKwkJ CXByX2VycigiZXJyb3IgcmVhZGluZyBtYXggdm9sdC4gcmM9JWRcbiIsCj4+ICsJCQkJcmMpOwo+ PiArCQkJZ290byBlcnJvcjsKPj4gKwkJfQo+PiArCQltcC0+dnJlZ19jb25maWdbaV0ubWF4X3Zv bHRhZ2UgPSB0bXA7Cj4+ICsKPj4gKwkJLyogZW5hYmxlLWxvYWQgKi8KPj4gKwkJcmMgPSBvZl9w cm9wZXJ0eV9yZWFkX3UzMihzdXBwbHlfbm9kZSwKPj4gKwkJCSJxY29tLHN1cHBseS1lbmFibGUt bG9hZCIsICZ0bXApOwo+PiArCQlpZiAocmMpIHsKPj4gKwkJCXByX2VycigiZXJyb3IgcmVhZGlu ZyBlbmFibGUgbG9hZC4gcmM9JWRcbiIsCj4+ICsJCQkJcmMpOwo+PiArCQkJZ290byBlcnJvcjsK Pj4gKwkJfQo+PiArCQltcC0+dnJlZ19jb25maWdbaV0uZW5hYmxlX2xvYWQgPSB0bXA7Cj4+ICsK Pj4gKwkJLyogZGlzYWJsZS1sb2FkICovCj4+ICsJCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIo c3VwcGx5X25vZGUsCj4+ICsJCQkicWNvbSxzdXBwbHktZGlzYWJsZS1sb2FkIiwgJnRtcCk7Cj4+ ICsJCWlmIChyYykgewo+PiArCQkJcHJfZXJyKCJlcnJvciByZWFkaW5nIGRpc2FibGUgbG9hZC4g cmM9JWRcbiIsCj4+ICsJCQkJcmMpOwo+PiArCQkJZ290byBlcnJvcjsKPj4gKwkJfQo+PiArCQlt cC0+dnJlZ19jb25maWdbaV0uZGlzYWJsZV9sb2FkID0gdG1wOwo+PiArCj4+ICsJCXByX2RlYnVn KCIlcyBtaW49JWQsIG1heD0lZCwgZW5hYmxlPSVkLCBkaXNhYmxlPSVkXG4iLAo+PiArCQkJbXAt PnZyZWdfY29uZmlnW2ldLnZyZWdfbmFtZSwKPj4gKwkJCW1wLT52cmVnX2NvbmZpZ1tpXS5taW5f dm9sdGFnZSwKPj4gKwkJCW1wLT52cmVnX2NvbmZpZ1tpXS5tYXhfdm9sdGFnZSwKPj4gKwkJCW1w LT52cmVnX2NvbmZpZ1tpXS5lbmFibGVfbG9hZCwKPj4gKwkJCW1wLT52cmVnX2NvbmZpZ1tpXS5k aXNhYmxlX2xvYWQKPj4gKwkJCSk7Cj4+ICsJCSsraTsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4g cmM7Cj4+ICsKPj4gK2Vycm9yOgo+PiArCWlmIChtcC0+dnJlZ19jb25maWcpIHsKPj4gKwkJZGV2 bV9rZnJlZSgmcGFyc2VyLT5wZGV2LT5kZXYsIG1wLT52cmVnX2NvbmZpZyk7Cj4+ICsJCW1wLT52 cmVnX2NvbmZpZyA9IE5VTEw7Cj4+ICsJfQo+IAo+IFRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2Fy eSwgdGhhdCdzIHRoZSBuaWNlIHRoaW5nIGFib3V0IGRldmljZSBtYW5hZ2VkCj4gcmVzb3VyY2Vz Lgo+IAo+PiArbm92cmVnOgo+PiArCW1wLT5udW1fdnJlZyA9IDA7Cj4+ICsKPj4gKwlyZXR1cm4g cmM7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX3BhcnNlcl9wdXRfdnJlZ19kYXRhKHN0 cnVjdCBkZXZpY2UgKmRldiwKPj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXApCj4+ICt7 Cj4+ICsJaWYgKCFtcCkgewo+PiArCQlERVZfRVJSKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJ cmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWlmIChtcC0+dnJlZ19jb25maWcpIHsKPj4gKwkJZGV2 bV9rZnJlZShkZXYsIG1wLT52cmVnX2NvbmZpZyk7Cj4+ICsJCW1wLT52cmVnX2NvbmZpZyA9IE5V TEw7Cj4+ICsJfQo+IAo+IFNhbWUgaGVyZSwgdGhpcyBmdW5jdGlvbiBjYW4gZ28gYXdheSBvbmNl IHlvdSB0YWtlIG91dCB0aGUgZHBfcGFyc2VyCj4gYWJzdHJhY3Rpb24gbGF5ZXIuCj4gCj4+ICsJ bXAtPm51bV92cmVnID0gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9wYXJzZXJfcmVn dWxhdG9yKHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikKPj4gK3sKPj4gKwlpbnQgaSwgcmMgPSAw Owo+PiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBwYXJzZXItPnBkZXY7Cj4+ICsK Pj4gKwkvKiBQYXJzZSB0aGUgcmVndWxhdG9yIGluZm9ybWF0aW9uICovCj4+ICsJZm9yIChpID0g RFBfQ09SRV9QTTsgaSA8IERQX01BWF9QTTsgaSsrKSB7Cj4+ICsJCXJjID0gZHBfcGFyc2VyX2dl dF92cmVnKHBhcnNlciwgaSk7Cj4+ICsJCWlmIChyYykgewo+PiArCQkJcHJfZXJyKCJnZXRfZHRf dnJlZ19kYXRhIGZhaWxlZCBmb3IgJXMuIHJjPSVkXG4iLAo+PiArCQkJCWRwX3BhcnNlcl9wbV9u YW1lKGkpLCByYyk7Cj4+ICsJCQlpLS07Cj4+ICsJCQlmb3IgKDsgaSA+PSBEUF9DT1JFX1BNOyBp LS0pCj4+ICsJCQkJZHBfcGFyc2VyX3B1dF92cmVnX2RhdGEoJnBkZXYtPmRldiwKPj4gKwkJCQkJ JnBhcnNlci0+bXBbaV0pOwo+PiArCQkJYnJlYWs7Cj4gCj4gQW5kIGhlcmUgeW91IGNhbiBqdXN0 IHJldHVybiB0aGUgZXJyb3IgZGlyZWN0bHkgYW5kIHRoZSByZXNvdXJjZXMgd2lsbCAKPiBiZSBm cmVlZAo+IG1hZ2ljYWxseS4KPiAKPj4gKwkJfQo+PiArCX0KPj4gKwo+PiArCXJldHVybiByYzsK PiAKPiBBbmQgdGhpcyBiZWNvbWVzIHJldHVybiAwOwo+IAo+PiArfQo+PiArCj4+ICtzdGF0aWMg Ym9vbCBkcF9wYXJzZXJfY2hlY2tfcHJlZml4KGNvbnN0IGNoYXIgKmNsa19wcmVmaXgsIGNvbnN0 IGNoYXIgCj4+ICpjbGtfbmFtZSkKPj4gK3sKPj4gKwlyZXR1cm4gISFzdHJuc3RyKGNsa19uYW1l LCBjbGtfcHJlZml4LCBzdHJsZW4oY2xrX25hbWUpKTsKPiAKPiBUaGlzIGlzIGxpa2VseSBub3Qg d2hhdCB5b3Ugd2FudCBzaW5jZSB0aGlzIHdpbGwgbG9vayBmb3IgcHJlZml4IAo+IF9hbnl3aGVy ZV8gaW4KPiBjbGsgbmFtZS4gQW4gZXhhbXBsZSBvZiBob3cgdGhpcyBjb3VsZCBnbyBzaWRld2F5 czoKPiAKPiAJZHBfcGFyc2VyX2NoZWNrX3ByZWZpeCgiY29yZSIsICJjb3JlLWRwLXBvd2VyLWN0 cmwiKTsKPiAJZHBfcGFyc2VyX2NoZWNrX3ByZWZpeCgiY3RybCIsICJjb3JlLWRwLXBvd2VyLWN0 cmwiKTsKPiAKPiBCb3RoIHJldHVybiB0cnVlLgo+IAo+IEFueXdheXMsIHN0cm5jbXAgaXMgYSBi ZXR0ZXIgY2hvaWNlIGhlcmUgKGlmIHdlIG11c3QgZG8gc3RyaW5nIAo+IG9wZXJhdGlvbnMpLgo+ IAo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9wYXJzZXJfcHV0X2Nsa19kYXRhKHN0cnVj dCBkZXZpY2UgKmRldiwKPj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXApCj4+ICt7Cj4+ ICsJaWYgKCFtcCkgewo+PiArCQlERVZfRVJSKCIlczogaW52YWxpZCBpbnB1dFxuIiwgX19mdW5j X18pOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJaWYgKG1wLT5jbGtfY29uZmlnKSB7 Cj4+ICsJCWRldm1fa2ZyZWUoZGV2LCBtcC0+Y2xrX2NvbmZpZyk7Cj4+ICsJCW1wLT5jbGtfY29u ZmlnID0gTlVMTDsKPj4gKwl9Cj4+ICsKPj4gKwltcC0+bnVtX2NsayA9IDA7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyB2b2lkIGRwX3BhcnNlcl9wdXRfZ3Bpb19kYXRhKHN0cnVjdCBkZXZpY2UgKmRl diwKPj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXApCj4+ICt7Cj4+ICsJaWYgKCFtcCkg ewo+PiArCQlERVZfRVJSKCIlczogaW52YWxpZCBpbnB1dFxuIiwgX19mdW5jX18pOwo+PiArCQly ZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJaWYgKG1wLT5ncGlvX2NvbmZpZykgewo+PiArCQlkZXZt X2tmcmVlKGRldiwgbXAtPmdwaW9fY29uZmlnKTsKPj4gKwkJbXAtPmdwaW9fY29uZmlnID0gTlVM TDsKPj4gKwl9Cj4+ICsKPj4gKwltcC0+bnVtX2dwaW8gPSAwOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgaW50IGRwX3BhcnNlcl9pbml0X2Nsa19kYXRhKHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikK Pj4gK3sKPj4gKwlpbnQgbnVtX2NsayA9IDAsIGkgPSAwLCByYyA9IDA7Cj4+ICsJaW50IGNvcmVf Y2xrX2NvdW50ID0gMCwgY3RybF9jbGtfY291bnQgPSAwOwo+PiArCWNvbnN0IGNoYXIgKmNvcmVf Y2xrID0gImNvcmUiOwo+PiArCWNvbnN0IGNoYXIgKmN0cmxfY2xrID0gImN0cmwiOwo+PiArCWNv bnN0IGNoYXIgKmNsa19uYW1lOwo+PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwYXJzZXItPnBk ZXYtPmRldjsKPj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqY29yZV9wb3dlciA9ICZwYXJz ZXItPm1wW0RQX0NPUkVfUE1dOwo+PiArCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICpjdHJsX3Bv d2VyID0gJnBhcnNlci0+bXBbRFBfQ1RSTF9QTV07Cj4+ICsKPj4gKwludW1fY2xrID0gb2ZfcHJv cGVydHlfY291bnRfc3RyaW5ncyhkZXYtPm9mX25vZGUsICJjbG9jay1uYW1lcyIpOwo+PiArCWlm IChudW1fY2xrIDw9IDApIHsKPj4gKwkJcHJfZXJyKCJubyBjbG9ja3MgYXJlIGRlZmluZWRcbiIp Owo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZXhpdDsKPj4gKwl9Cj4+ICsKPj4gKwlm b3IgKGkgPSAwOyBpIDwgbnVtX2NsazsgaSsrKSB7Cj4+ICsJCW9mX3Byb3BlcnR5X3JlYWRfc3Ry aW5nX2luZGV4KGRldi0+b2Zfbm9kZSwKPj4gKwkJCQkiY2xvY2stbmFtZXMiLCBpLCAmY2xrX25h bWUpOwo+IAo+IENoZWNrIHJldHVybiB2YWx1ZQo+IAo+PiArCj4+ICsJCWlmIChkcF9wYXJzZXJf Y2hlY2tfcHJlZml4KGNvcmVfY2xrLCBjbGtfbmFtZSkpCj4+ICsJCQljb3JlX2Nsa19jb3VudCsr Owo+PiArCj4+ICsJCWlmIChkcF9wYXJzZXJfY2hlY2tfcHJlZml4KGN0cmxfY2xrLCBjbGtfbmFt ZSkpCj4+ICsJCQljdHJsX2Nsa19jb3VudCsrOwo+IAo+IEp1c3QgdXNlICJjb3JlIi8iY3RybCIg ZGlyZWN0bHkgaGVyZS4KPiAKPiBIYXZlIHlvdSBjb25zaWRlcmVkIGp1c3QgaGF2aW5nIDIgY2xv Y2sgbGlzdHM/IFRoYXQgd291bGQgYXZvaWQgaGF2aW5nIAo+IHRvIGRvCj4gdGhpcy4KSSBhbSBu b3QgY2xlYXIgb24gd2hhdCB5b3UgYXJlIHN1Z2dlc3Rpbmc/IFdlIGN1cnJlbnRseSBoYXZlIHR3 byAKY2xvY2stbGlzdHMgKGNvcmUgJiBjdHJsKS4KCgo+IAo+PiArCX0KPj4gKwo+PiArCS8qIElu aXRpYWxpemUgdGhlIENPUkUgcG93ZXIgbW9kdWxlICovCj4+ICsJaWYgKGNvcmVfY2xrX2NvdW50 IDw9IDApIHsKPiAKPiBIb3cgZG9lcyB0aGlzIGdldCBiZWxvdyAwPwo+IAo+PiArCQlwcl9lcnIo Im5vIGNvcmUgY2xvY2tzIGFyZSBkZWZpbmVkXG4iKTsKPj4gKwkJcmMgPSAtRUlOVkFMOwo+PiAr CQlnb3RvIGV4aXQ7Cj4+ICsJfQo+PiArCj4+ICsJY29yZV9wb3dlci0+bnVtX2NsayA9IGNvcmVf Y2xrX2NvdW50Owo+PiArCWNvcmVfcG93ZXItPmNsa19jb25maWcgPSBkZXZtX2t6YWxsb2MoZGV2 LAo+PiArCQkJc2l6ZW9mKHN0cnVjdCBkc3NfY2xrKSAqIGNvcmVfcG93ZXItPm51bV9jbGssCj4+ ICsJCQlHRlBfS0VSTkVMKTsKPj4gKwlpZiAoIWNvcmVfcG93ZXItPmNsa19jb25maWcpIHsKPj4g KwkJcmMgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsJfQo+PiArCj4+ICsJLyogSW5p dGlhbGl6ZSB0aGUgQ1RSTCBwb3dlciBtb2R1bGUgKi8KPj4gKwlpZiAoY3RybF9jbGtfY291bnQg PD0gMCkgewo+IAo+IEhvdyBkb2VzIHRoaXMgZ2V0IGJlbG93IDA/Cj4gCj4+ICsJCXByX2Vycigi bm8gY3RybCBjbG9ja3MgYXJlIGRlZmluZWRcbiIpOwo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJ CWdvdG8gY3RybF9jbG9ja19lcnJvcjsKPj4gKwl9Cj4+ICsKPj4gKwljdHJsX3Bvd2VyLT5udW1f Y2xrID0gY3RybF9jbGtfY291bnQ7Cj4+ICsJY3RybF9wb3dlci0+Y2xrX2NvbmZpZyA9IGRldm1f a3phbGxvYyhkZXYsCj4+ICsJCQlzaXplb2Yoc3RydWN0IGRzc19jbGspICogY3RybF9wb3dlci0+ bnVtX2NsaywKPj4gKwkJCUdGUF9LRVJORUwpOwo+PiArCWlmICghY3RybF9wb3dlci0+Y2xrX2Nv bmZpZykgewo+PiArCQljdHJsX3Bvd2VyLT5udW1fY2xrID0gMDsKPj4gKwkJcmMgPSAtRUlOVkFM Owo+PiArCQlnb3RvIGN0cmxfY2xvY2tfZXJyb3I7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIHJj Owo+PiArCj4+ICtjdHJsX2Nsb2NrX2Vycm9yOgo+PiArCWRwX3BhcnNlcl9wdXRfY2xrX2RhdGEo ZGV2LCBjb3JlX3Bvd2VyKTsKPj4gK2V4aXQ6Cj4+ICsJcmV0dXJuIHJjOwo+IAo+IEp1c3QgcmV0 dXJuIGRpcmVjdGx5IGFuZCBkZWxldGUgZXhpdAo+IAo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IGRwX3BhcnNlcl9jbG9jayhzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpCj4+ICt7Cj4+ICsJaW50 IHJjID0gMCwgaSA9IDA7Cj4+ICsJaW50IG51bV9jbGsgPSAwOwo+PiArCWludCBjb3JlX2Nsa19p bmRleCA9IDAsIGN0cmxfY2xrX2luZGV4ID0gMDsKPj4gKwlpbnQgY29yZV9jbGtfY291bnQgPSAw LCBjdHJsX2Nsa19jb3VudCA9IDA7Cj4+ICsJY29uc3QgY2hhciAqY2xrX25hbWU7Cj4+ICsJY29u c3QgY2hhciAqY29yZV9jbGsgPSAiY29yZSI7Cj4+ICsJY29uc3QgY2hhciAqY3RybF9jbGsgPSAi Y3RybCI7Cj4+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBhcnNlci0+cGRldi0+ZGV2Owo+IAo+ IC0tLS0gU1RBUlQgaG1tbW0KSSBkaWRuJ3QgdW5kZXJzdGFuZCwgY2FuIHlvdSBwbGVhc2UgcHJv dmlkZSBtb3JlIGRldGFpbHMgcmVnYXJkaW5nIAoiU1RBUlQiIGFuZCAiRU5EIi4KPiAKPj4gKwlz dHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqY29yZV9wb3dlciA9ICZwYXJzZXItPm1wW0RQX0NPUkVf UE1dOwo+PiArCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICpjdHJsX3Bvd2VyID0gJnBhcnNlci0+ bXBbRFBfQ1RSTF9QTV07Cj4+ICsKPj4gKwljb3JlX3Bvd2VyID0gJnBhcnNlci0+bXBbRFBfQ09S RV9QTV07Cj4+ICsJY3RybF9wb3dlciA9ICZwYXJzZXItPm1wW0RQX0NUUkxfUE1dOwo+IAo+IC0t LS0gRU5EIGhtbW1tCj4gCj4+ICsKPj4gKwlyYyA9ICBkcF9wYXJzZXJfaW5pdF9jbGtfZGF0YShw YXJzZXIpOwo+PiArCWlmIChyYykgewo+PiArCQlwcl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXpl IHBvd2VyIGRhdGFcbiIpOwo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZXhpdDsKPj4g Kwl9Cj4+ICsKPj4gKwljb3JlX2Nsa19jb3VudCA9IGNvcmVfcG93ZXItPm51bV9jbGs7Cj4+ICsJ Y3RybF9jbGtfY291bnQgPSBjdHJsX3Bvd2VyLT5udW1fY2xrOwo+PiArCj4+ICsJbnVtX2NsayA9 IGNvcmVfY2xrX2NvdW50ICsgY3RybF9jbGtfY291bnQ7Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBp IDwgbnVtX2NsazsgaSsrKSB7Cj4+ICsJCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KGRl di0+b2Zfbm9kZSwgImNsb2NrLW5hbWVzIiwKPj4gKwkJCQlpLCAmY2xrX25hbWUpOwo+IAo+IENo ZWNrIHJldHVybiB2YWx1ZQo+IAo+PiArCj4+ICsJCWlmIChkcF9wYXJzZXJfY2hlY2tfcHJlZml4 KGNvcmVfY2xrLCBjbGtfbmFtZSkgJiYKPj4gKwkJCQljb3JlX2Nsa19pbmRleCA8IGNvcmVfY2xr X2NvdW50KSB7Cj4+ICsJCQlzdHJ1Y3QgZHNzX2NsayAqY2xrID0KPj4gKwkJCQkmY29yZV9wb3dl ci0+Y2xrX2NvbmZpZ1tjb3JlX2Nsa19pbmRleF07Cj4+ICsJCQlzdHJsY3B5KGNsay0+Y2xrX25h bWUsIGNsa19uYW1lLCBzaXplb2YoY2xrLT5jbGtfbmFtZSkpOwo+PiArCQkJY2xrLT50eXBlID0g RFNTX0NMS19BSEI7Cj4+ICsJCQljb3JlX2Nsa19pbmRleCsrOwo+PiArCQl9IGVsc2UgaWYgKGRw X3BhcnNlcl9jaGVja19wcmVmaXgoY3RybF9jbGssIGNsa19uYW1lKSAmJgo+PiArCQkJICAgY3Ry bF9jbGtfaW5kZXggPCBjdHJsX2Nsa19jb3VudCkgewo+PiArCQkJc3RydWN0IGRzc19jbGsgKmNs ayA9Cj4+ICsJCQkJJmN0cmxfcG93ZXItPmNsa19jb25maWdbY3RybF9jbGtfaW5kZXhdOwo+PiAr CQkJc3RybGNweShjbGstPmNsa19uYW1lLCBjbGtfbmFtZSwgc2l6ZW9mKGNsay0+Y2xrX25hbWUp KTsKPj4gKwkJCWN0cmxfY2xrX2luZGV4Kys7Cj4+ICsKPj4gKwkJCWlmICghc3RyY21wKGNsa19u YW1lLCAiY3RybF9saW5rX2NsayIpIHx8Cj4+ICsJCQkgICAgIXN0cmNtcChjbGtfbmFtZSwgImN0 cmxfcGl4ZWxfY2xrIikpCj4gCj4gc3RybmNtcAo+IAo+PiArCQkJCWNsay0+dHlwZSA9IERTU19D TEtfUENMSzsKPj4gKwkJCWVsc2UKPj4gKwkJCQljbGstPnR5cGUgPSBEU1NfQ0xLX0FIQjsKPj4g KwkJfQo+PiArCX0KPj4gKwo+PiArCXByX2RlYnVnKCJjbG9jayBwYXJzaW5nIHN1Y2Nlc3NmdWxc biIpOwo+PiArCj4+ICtleGl0Ogo+IAo+IERlbGV0ZSB0aGUgbGFiZWwgYW5kIHJldHVybiBkaXJl Y3RseQo+IAo+PiArCXJldHVybiByYzsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9wYXJz ZXJfcGFyc2Uoc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyKQo+PiArewo+PiArCWludCByYyA9IDA7 Cj4+ICsKPj4gKwlpZiAoIXBhcnNlcikgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIp Owo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZXJyOwo+PiArCX0KPj4gKwo+PiArCXJj ID0gZHBfcGFyc2VyX2N0cmxfcmVzKHBhcnNlcik7Cj4+ICsJaWYgKHJjKQo+PiArCQlnb3RvIGVy cjsKPj4gKwo+PiArCXJjID0gZHBfcGFyc2VyX2F1eChwYXJzZXIpOwo+PiArCWlmIChyYykKPj4g KwkJZ290byBlcnI7Cj4+ICsKPj4gKwlyYyA9IGRwX3BhcnNlcl9taXNjKHBhcnNlcik7Cj4+ICsJ aWYgKHJjKQo+PiArCQlnb3RvIGVycjsKPj4gKwo+PiArCXJjID0gZHBfcGFyc2VyX2Nsb2NrKHBh cnNlcik7Cj4+ICsJaWYgKHJjKQo+PiArCQlnb3RvIGVycjsKPj4gKwo+PiArCXJjID0gZHBfcGFy c2VyX3JlZ3VsYXRvcihwYXJzZXIpOwo+PiArCWlmIChyYykKPj4gKwkJZ290byBlcnI7Cj4+ICsK Pj4gKwlyYyA9IGRwX3BhcnNlcl9ncGlvKHBhcnNlcik7Cj4+ICsJaWYgKHJjKQo+PiArCQlnb3Rv IGVycjsKPj4gKwo+PiArCXJjID0gZHBfcGFyc2VyX3BpbmN0cmwocGFyc2VyKTsKPj4gK2VycjoK PiAKPiBEZWxldGUgdGhlIGxhYmVsIGFuZCByZXR1cm4gZGlyZWN0bHkKPiAKPj4gKwlyZXR1cm4g cmM7Cj4+ICt9Cj4+ICsKPj4gK3N0cnVjdCBkcF9wYXJzZXIgKmRwX3BhcnNlcl9nZXQoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfcGFyc2VyICpwYXJz ZXI7Cj4+ICsKPj4gKwlwYXJzZXIgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpw YXJzZXIpLCBHRlBfS0VSTkVMKTsKPj4gKwlpZiAoIXBhcnNlcikKPj4gKwkJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7Cj4+ICsKPj4gKwlwYXJzZXItPnBhcnNlID0gZHBfcGFyc2VyX3BhcnNlOwo+ PiArCXBhcnNlci0+cGRldiA9IHBkZXY7Cj4+ICsKPj4gKwlyZXR1cm4gcGFyc2VyOwo+PiArfQo+ PiArCj4+ICt2b2lkIGRwX3BhcnNlcl9wdXQoc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyKQo+PiAr ewo+PiArCWludCBpID0gMDsKPj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqcG93ZXIgPSBO VUxMOwo+PiArCj4+ICsJaWYgKCFwYXJzZXIpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIHBhcnNl ciBtb2R1bGVcbiIpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJcG93ZXIgPSBwYXJz ZXItPm1wOwo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IERQX01BWF9QTTsgaSsrKSB7Cj4+ICsJ CWRwX3BhcnNlcl9wdXRfY2xrX2RhdGEoJnBhcnNlci0+cGRldi0+ZGV2LCAmcG93ZXJbaV0pOwo+ PiArCQlkcF9wYXJzZXJfcHV0X3ZyZWdfZGF0YSgmcGFyc2VyLT5wZGV2LT5kZXYsICZwb3dlcltp XSk7Cj4+ICsJCWRwX3BhcnNlcl9wdXRfZ3Bpb19kYXRhKCZwYXJzZXItPnBkZXYtPmRldiwgJnBv d2VyW2ldKTsKPj4gKwl9Cj4+ICsKPj4gKwlkZXZtX2tmcmVlKCZwYXJzZXItPnBkZXYtPmRldiwg cGFyc2VyKTsKPj4gK30KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf cGFyc2VyLmggCj4+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYXJzZXIuaAo+PiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi5iMzllYTAyCj4+IC0tLSAvZGV2L251 bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYXJzZXIuaAo+PiBAQCAtMCww ICsxLDIwNSBAQAo+PiArLyoKPj4gKyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE4LCBUaGUgTGlu dXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyAKPj4gcmVzZXJ2ZWQuCj4+ICsgKgo+PiArICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciAKPj4gbW9kaWZ5Cj4+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKPj4gKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+PiArICoKPj4gKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAo+PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKPj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ICsgKgo+PiArICovCj4+ICsKPj4gKyNpZm5kZWYg X0RQX1BBUlNFUl9IXwo+PiArI2RlZmluZSBfRFBfUEFSU0VSX0hfCj4+ICsKPj4gKyNpbmNsdWRl ICJkcHVfaW9fdXRpbC5oIgo+PiArCj4+ICsjZGVmaW5lIERQX0xBQkVMICJNRFNTIERQIERJU1BM QVkiCj4+ICsjZGVmaW5lIEFVWF9DRkdfTEVOCTEwCj4+ICsjZGVmaW5lIERQX01BWF9QSVhFTF9D TEtfS0haCTY3NTAwMAo+PiArCj4+ICtlbnVtIGRwX3BtX3R5cGUgewo+PiArCURQX0NPUkVfUE0s Cj4+ICsJRFBfQ1RSTF9QTSwKPj4gKwlEUF9QSFlfUE0sCj4+ICsJRFBfTUFYX1BNCj4+ICt9Owo+ PiArCj4+ICtzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmRwX3BhcnNlcl9wbV9uYW1lKGVudW0g ZHBfcG1fdHlwZSBtb2R1bGUpCj4+ICt7Cj4+ICsJc3dpdGNoIChtb2R1bGUpIHsKPj4gKwljYXNl IERQX0NPUkVfUE06CXJldHVybiAiRFBfQ09SRV9QTSI7Cj4+ICsJY2FzZSBEUF9DVFJMX1BNOgly ZXR1cm4gIkRQX0NUUkxfUE0iOwo+PiArCWNhc2UgRFBfUEhZX1BNOgkJcmV0dXJuICJEUF9QSFlf UE0iOwo+PiArCWRlZmF1bHQ6CQlyZXR1cm4gIj8/PyI7Cj4+ICsJfQo+PiArfQo+IAo+IERlbGV0 ZSB0aGUgZnVuY3Rpb24gYW5kIGp1c3QgcHJpbnQgdGhlIGVudW0gdmFsdWUKPiAKPj4gKwo+PiAr LyoqCj4+ICsgKiBzdHJ1Y3QgZHBfZGlzcGxheV9kYXRhICAtIGRpc3BsYXkgcmVsYXRlZCBkZXZp Y2UgdHJlZSBkYXRhLgo+PiArICoKPj4gKyAqIEBjdHJsX25vZGU6IHJlZmVyZWNlIHRvIGNvbnRy b2xsZXIgZGV2aWNlCj4+ICsgKiBAcGh5X25vZGU6ICByZWZlcmVuY2UgdG8gcGh5IGRldmljZQo+ PiArICogQGlzX2FjdGl2ZTogaXMgdGhlIGNvbnRyb2xsZXIgY3VycmVudGx5IGFjdGl2ZQo+PiAr ICogQG5hbWU6IG5hbWUgb2YgdGhlIGRpc3BsYXkKPj4gKyAqIEBkaXNwbGF5X3R5cGU6IHR5cGUg b2YgdGhlIGRpc3BsYXkKPj4gKyAqLwo+PiArc3RydWN0IGRwX2Rpc3BsYXlfZGF0YSB7Cj4+ICsJ c3RydWN0IGRldmljZV9ub2RlICpjdHJsX25vZGU7Cj4+ICsJc3RydWN0IGRldmljZV9ub2RlICpw aHlfbm9kZTsKPj4gKwlib29sIGlzX2FjdGl2ZTsKPj4gKwljb25zdCBjaGFyICpuYW1lOwo+PiAr CWNvbnN0IGNoYXIgKmRpc3BsYXlfdHlwZTsKPj4gK307Cj4+ICsKPj4gKy8qKgo+PiArICogc3Ry dWN0IGRwX2N0cmxfcmVzb3VyY2UgLSBjb250cm9sbGVyJ3MgSU8gcmVsYXRlZCBkYXRhCj4+ICsg Kgo+PiArICogQGRwX2FoYjogY29udHJvbGxlcidzIGFoYiBtYXBwZWQgbWVtb3J5IGFkZHJlc3MK Pj4gKyAqIEBkcF9hdXg6IGNvbnRyb2xsZXIncyBhdXggbWFwcGVkIG1lbW9yeSBhZGRyZXNzCj4+ ICsgKiBAZHBfbGluazogY29udHJvbGxlcidzIGxpbmsgbWFwcGVkIG1lbW9yeSBhZGRyZXNzCj4+ ICsgKiBAZHBfcDA6IGNvbnRyb2xsZXIncyBwMCBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKPj4gKyAq IEBwaHlfaW86IHBoeSdzIG1hcHBlZCBtZW1vcnkgYWRkcmVzcwo+PiArICogQGxuX3R4MF9pbzog VVNCLURQIGxhbmUgVFgwJ3MgbWFwcGVkIG1lbW9yeSBhZGRyZXNzCj4+ICsgKiBAbG5fdHgxX2lv OiBVU0ItRFAgbGFuZSBUWDEncyBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKPj4gKyAqIEBkcF9jY19p bzogRFAgY2MncyBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKPj4gKyAqIEBxZnByb21faW86IHFmcHJv bSdzIG1hcHBlZCBtZW1vcnkgYWRkcmVzcwo+PiArICogQGRwX3BsbF9pbzogRFAgUExMIG1hcHBl ZCBtZW1vcnkgYWRkcmVzcwo+PiArICogQHVzYjNfZHBfY29tOiBVU0IzIERQIFBIWSBjb21ibyBt YXBwZWQgbWVtb3J5IGFkZHJlc3MKPj4gKyAqLwo+PiArc3RydWN0IGRwX2lvIHsKPj4gKwlzdHJ1 Y3QgZHNzX2lvX2RhdGEgY3RybF9pbzsKPj4gKwlzdHJ1Y3QgZHNzX2lvX2RhdGEgZHBfYWhiOwo+ PiArCXN0cnVjdCBkc3NfaW9fZGF0YSBkcF9hdXg7Cj4+ICsJc3RydWN0IGRzc19pb19kYXRhIGRw X2xpbms7Cj4+ICsJc3RydWN0IGRzc19pb19kYXRhIGRwX3AwOwo+PiArCXN0cnVjdCBkc3NfaW9f ZGF0YSBwaHlfaW87Cj4+ICsJc3RydWN0IGRzc19pb19kYXRhIGxuX3R4MF9pbzsKPj4gKwlzdHJ1 Y3QgZHNzX2lvX2RhdGEgbG5fdHgxX2lvOwo+PiArCXN0cnVjdCBkc3NfaW9fZGF0YSBkcF9jY19p bzsKPj4gKwlzdHJ1Y3QgZHNzX2lvX2RhdGEgcWZwcm9tX2lvOwo+PiArCXN0cnVjdCBkc3NfaW9f ZGF0YSBkcF9wbGxfaW87Cj4+ICsJc3RydWN0IGRzc19pb19kYXRhIHVzYjNfZHBfY29tOwo+PiAr fTsKPj4gKwo+PiArLyoqCj4+ICsgKiBzdHJ1Y3QgZHBfcGluY3RybCAtIERQJ3MgcGluIGNvbnRy b2wKPj4gKyAqCj4+ICsgKiBAcGluOiBwaW4tY29udHJvbGxlcidzIGluc3RhbmNlCj4+ICsgKiBA c3RhdGVfYWN0aXZlOiBhY3RpdmUgc3RhdGUgcGluIGNvbnRyb2wKPj4gKyAqIEBzdGF0ZV9ocGRf YWN0aXZlOiBocGQgYWN0aXZlIHN0YXRlIHBpbiBjb250cm9sCj4+ICsgKiBAc3RhdGVfc3VzcGVu ZDogc3VzcGVuZCBzdGF0ZSBwaW4gY29udHJvbAo+PiArICovCj4+ICtzdHJ1Y3QgZHBfcGluY3Ry bCB7Cj4+ICsJc3RydWN0IHBpbmN0cmwgKnBpbjsKPj4gKwlzdHJ1Y3QgcGluY3RybF9zdGF0ZSAq c3RhdGVfYWN0aXZlOwo+PiArCXN0cnVjdCBwaW5jdHJsX3N0YXRlICpzdGF0ZV9ocGRfYWN0aXZl Owo+PiArCXN0cnVjdCBwaW5jdHJsX3N0YXRlICpzdGF0ZV9zdXNwZW5kOwo+PiArfTsKPj4gKwo+ PiArI2RlZmluZSBEUF9FTlVNX1NUUih4KQkjeAo+IAo+IE9uY2UgeW91IGdldCByaWQgb2YgYWxs IG9mIHRoZSBlbnVtLT5zdHJpbmcgZnVuY3Rpb25zIHRoYXQgYXJlIHVzZWQgZm9yCj4gZGVidWdn aW5nLCB5b3UgY2FuIGRlbGV0ZSB0aGlzLgo+IAo+PiArI2RlZmluZSBEUF9BVVhfQ0ZHX01BWF9W QUxVRV9DTlQgMwo+PiArLyoqCj4+ICsgKiBzdHJ1Y3QgZHBfYXV4X2NmZyAtIERQJ3MgQVVYIGNv bmZpZ3VyYXRpb24gc2V0dGluZ3MKPj4gKyAqCj4+ICsgKiBAY2ZnX2NudDogY291bnQgb2YgdGhl IGNvbmZpZ3VyYWJsZSBzZXR0aW5ncyBmb3IgdGhlIEFVWCByZWdpc3Rlcgo+PiArICogQGN1cnJl bnRfaW5kZXg6IGN1cnJlbnQgaW5kZXggb2YgdGhlIEFVWCBjb25maWcgbHV0Cj4+ICsgKiBAb2Zm c2V0OiByZWdpc3RlciBvZmZzZXQgb2YgdGhlIEFVWCBjb25maWcgcmVnaXN0ZXIKPj4gKyAqIEBs dXQ6IGxvb2sgdXAgdGFibGUgZm9yIHRoZSBBVVggY29uZmlnIHZhbHVlcyBmb3IgdGhpcyByZWdp c3Rlcgo+PiArICovCj4+ICtzdHJ1Y3QgZHBfYXV4X2NmZyB7Cj4+ICsJdTMyIGNmZ19jbnQ7Cj4+ ICsJdTMyIGN1cnJlbnRfaW5kZXg7Cj4+ICsJdTMyIG9mZnNldDsKPj4gKwl1MzIgbHV0W0RQX0FV WF9DRkdfTUFYX1ZBTFVFX0NOVF07Cj4+ICt9Owo+PiArCj4+ICsvKiBQSFkgQVVYIGNvbmZpZyBy ZWdpc3RlcnMgKi8KPj4gK2VudW0gZHBfcGh5X2F1eF9jb25maWdfdHlwZSB7Cj4+ICsJUEhZX0FV WF9DRkcwLAo+PiArCVBIWV9BVVhfQ0ZHMSwKPj4gKwlQSFlfQVVYX0NGRzIsCj4+ICsJUEhZX0FV WF9DRkczLAo+PiArCVBIWV9BVVhfQ0ZHNCwKPj4gKwlQSFlfQVVYX0NGRzUsCj4+ICsJUEhZX0FV WF9DRkc2LAo+PiArCVBIWV9BVVhfQ0ZHNywKPj4gKwlQSFlfQVVYX0NGRzgsCj4+ICsJUEhZX0FV WF9DRkc5LAo+PiArCVBIWV9BVVhfQ0ZHX01BWCwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbmxp bmUgY2hhciAqZHBfcGh5X2F1eF9jb25maWdfdHlwZV90b19zdHJpbmcodTMyIGNmZ190eXBlKQo+ PiArewo+PiArCXN3aXRjaCAoY2ZnX3R5cGUpIHsKPj4gKwljYXNlIFBIWV9BVVhfQ0ZHMDoKPj4g KwkJcmV0dXJuIERQX0VOVU1fU1RSKFBIWV9BVVhfQ0ZHMCk7Cj4+ICsJY2FzZSBQSFlfQVVYX0NG RzE6Cj4+ICsJCXJldHVybiBEUF9FTlVNX1NUUihQSFlfQVVYX0NGRzEpOwo+PiArCWNhc2UgUEhZ X0FVWF9DRkcyOgo+PiArCQlyZXR1cm4gRFBfRU5VTV9TVFIoUEhZX0FVWF9DRkcyKTsKPj4gKwlj YXNlIFBIWV9BVVhfQ0ZHMzoKPj4gKwkJcmV0dXJuIERQX0VOVU1fU1RSKFBIWV9BVVhfQ0ZHMyk7 Cj4+ICsJY2FzZSBQSFlfQVVYX0NGRzQ6Cj4+ICsJCXJldHVybiBEUF9FTlVNX1NUUihQSFlfQVVY X0NGRzQpOwo+PiArCWNhc2UgUEhZX0FVWF9DRkc1Ogo+PiArCQlyZXR1cm4gRFBfRU5VTV9TVFIo UEhZX0FVWF9DRkc1KTsKPj4gKwljYXNlIFBIWV9BVVhfQ0ZHNjoKPj4gKwkJcmV0dXJuIERQX0VO VU1fU1RSKFBIWV9BVVhfQ0ZHNik7Cj4+ICsJY2FzZSBQSFlfQVVYX0NGRzc6Cj4+ICsJCXJldHVy biBEUF9FTlVNX1NUUihQSFlfQVVYX0NGRzcpOwo+PiArCWNhc2UgUEhZX0FVWF9DRkc4Ogo+PiAr CQlyZXR1cm4gRFBfRU5VTV9TVFIoUEhZX0FVWF9DRkc4KTsKPj4gKwljYXNlIFBIWV9BVVhfQ0ZH OToKPj4gKwkJcmV0dXJuIERQX0VOVU1fU1RSKFBIWV9BVVhfQ0ZHOSk7Cj4+ICsJZGVmYXVsdDoK Pj4gKwkJcmV0dXJuICJ1bmtub3duIjsKPj4gKwl9Cj4+ICt9Cj4gCj4gU2FtZSBkZWFsIGFzIHRo ZSBvdGhlcnMsIHJlbW92ZSBhbmQgcHJpbnQgdGhlIGVudW0gdmFsdWUgaW5zdGVhZC4KPiAKPj4g Kwo+PiArLyoqCj4+ICsgKiBzdHJ1Y3QgZHBfcGFyc2VyIC0gRFAgcGFyc2VyJ3MgZGF0YSBleHBv c2VkIHRvIGNsaWVudHMKPj4gKyAqCj4+ICsgKiBAcGRldjogcGxhdGZvcm0gZGF0YSBvZiB0aGUg Y2xpZW50Cj4+ICsgKiBAbXA6IGdwaW8sIHJlZ3VsYXRvciBhbmQgY2xvY2sgcmVsYXRlZCBkYXRh Cj4+ICsgKiBAcGluY3RybDogcGluLWNvbnRyb2wgcmVsYXRlZCBkYXRhCj4+ICsgKiBAZGlzcF9k YXRhOiBjb250cm9sbGVyJ3MgZGlzcGxheSByZWxhdGVkIGRhdGEKPj4gKyAqIEBwYXJzZTogZnVu Y3Rpb24gdG8gYmUgY2FsbGVkIGJ5IGNsaWVudCB0byBwYXJzZSBkZXZpY2UgdHJlZS4KPj4gKyAq Lwo+PiArc3RydWN0IGRwX3BhcnNlciB7Cj4+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl djsKPj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciBtcFtEUF9NQVhfUE1dOwo+PiArCXN0cnVj dCBkcF9waW5jdHJsIHBpbmN0cmw7Cj4+ICsJc3RydWN0IGRwX2lvIGlvOwo+PiArCXN0cnVjdCBk cF9kaXNwbGF5X2RhdGEgZGlzcF9kYXRhOwo+PiArCj4+ICsJdTggbF9tYXBbNF07Cj4+ICsJc3Ry dWN0IGRwX2F1eF9jZmcgYXV4X2NmZ1tBVVhfQ0ZHX0xFTl07Cj4+ICsJdTMyIG1heF9wY2xrX2to ejsKPj4gKwo+PiArCWludCAoKnBhcnNlKShzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpOwo+PiAr fTsKPj4gKwo+PiArLyoqCj4+ICsgKiBkcF9wYXJzZXJfZ2V0KCkgLSBnZXQgdGhlIERQJ3MgZGV2 aWNlIHRyZWUgcGFyc2VyIG1vZHVsZQo+PiArICoKPj4gKyAqIEBwZGV2OiBwbGF0Zm9ybSBkYXRh IG9mIHRoZSBjbGllbnQKPj4gKyAqIHJldHVybjogcG9pbnRlciB0byBkcF9wYXJzZXIgc3RydWN0 dXJlLgo+PiArICoKPj4gKyAqIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgY2xpZW50IGNhcGFiaWxp dHkgdG8gcGFyc2UgdGhlCj4+ICsgKiBkZXZpY2UgdHJlZSBhbmQgcG9wdWxhdGUgdGhlIGRhdGEg c3RydWN0dXJlcy4gVGhlIGRhdGEKPj4gKyAqIHJlbGF0ZWQgdG8gY2xvY2ssIHJlZ3VsYXRvcnMs IHBpbi1jb250cm9sIGFuZCBvdGhlcgo+PiArICogY2FuIGJlIHBhcnNlZCB1c2luZyB0aGlzIG1v ZHVsZS4KPj4gKyAqLwo+PiArc3RydWN0IGRwX3BhcnNlciAqZHBfcGFyc2VyX2dldChzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKPj4gKwo+PiArLyoqCj4+ICsgKiBkcF9wYXJzZXJfcHV0 KCkgLSBjbGVhbnMgdGhlIGRwX3BhcnNlciBtb2R1bGUKPj4gKyAqCj4+ICsgKiBAcGFyc2VyOiBw b2ludGVyIHRvIHRoZSBwYXJzZXIncyBkYXRhLgo+PiArICovCj4+ICt2b2lkIGRwX3BhcnNlcl9w dXQoc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyKTsKPj4gKyNlbmRpZgo+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wb3dlci5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfcG93ZXIuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAw Li4xZDU4NDgwCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k cC9kcF9wb3dlci5jCj4+IEBAIC0wLDAgKzEsNTk5IEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0 IChjKSAyMDEyLTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIAo+PiByZXNl cnZlZC4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAo+PiBtb2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+PiAr ICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCj4+ICsgKgo+PiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+PiArICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+PiAr ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4gKyAqCj4+ ICsgKi8KPj4gKwo+PiArI2RlZmluZSBwcl9mbXQoZm10KQkiW2RybS1kcF0gJXM6ICIgZm10LCBf X2Z1bmNfXwo+PiArCj4+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4+ICsjaW5jbHVkZSAiZHBf cG93ZXIuaCIKPj4gKwo+PiArI2RlZmluZSBEUF9DTElFTlRfTkFNRV9TSVpFCTIwCj4gCj4gVW51 c2VkCj4gCj4+ICsKPj4gK3N0cnVjdCBkcF9wb3dlcl9wcml2YXRlIHsKPj4gKwlzdHJ1Y3QgZHBf cGFyc2VyICpwYXJzZXI7Cj4+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKPj4gKwlz dHJ1Y3QgY2xrICpwaXhlbF9jbGtfcmNnOwo+PiArCXN0cnVjdCBjbGsgKnBpeGVsX3BhcmVudDsK Pj4gKwo+PiArCXN0cnVjdCBkcF9wb3dlciBkcF9wb3dlcjsKPj4gKwo+PiArCWJvb2wgY29yZV9j bGtzX29uOwo+PiArCWJvb2wgbGlua19jbGtzX29uOwo+PiArfTsKPj4gKwo+PiArc3RhdGljIGlu dCBkcF9wb3dlcl9yZWd1bGF0b3JfaW5pdChzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXIp Cj4+ICt7Cj4+ICsJaW50IHJjID0gMCwgaSA9IDAsIGogPSAwOwo+PiArCXN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXY7Cj4+ICsJc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyOwo+PiArCj4+ICsJ cGFyc2VyID0gcG93ZXItPnBhcnNlcjsKPj4gKwlwZGV2ID0gcG93ZXItPnBkZXY7Cj4gCj4gTW92 ZSB0aGVzZSBpbml0aWFsaXphdGlvbnMgdXAgdG8gdGhlIGRlY2xhcmF0aW9uLiBQbGVhc2UgYXBw bHkgdGhpcyB0byAKPiB0aGUgcmVzdAo+IG9mIHRoZSBjb2RlIGFzIHdlbGwuCj4gCj4gCj4+ICsK Pj4gKwlmb3IgKGkgPSBEUF9DT1JFX1BNOyAhcmMgJiYgKGkgPCBEUF9NQVhfUE0pOyBpKyspIHsK PiAKPiBObyBuZWVkIHRvIGNoZWNrIHJjIHdoZW4gdGhlIG9ubHkgcGxhY2UgaXQgY2FuIGdvIG5v bi16ZXJvIGlzIHRoZSBwbGFjZSAKPiB0aGF0Cj4gaGFzIGEgYnJlYWs7Cj4gCj4+ICsJCXJjID0g bXNtX2Rzc19jb25maWdfdnJlZygmcGRldi0+ZGV2LAo+PiArCQkJcGFyc2VyLT5tcFtpXS52cmVn X2NvbmZpZywKPj4gKwkJCXBhcnNlci0+bXBbaV0ubnVtX3ZyZWcsIDEpOwo+PiArCQlpZiAocmMp IHsKPj4gKwkJCXByX2VycigiZmFpbGVkIHRvIGluaXQgdnJlZ3MgZm9yICVzXG4iLAo+PiArCQkJ CWRwX3BhcnNlcl9wbV9uYW1lKGkpKTsKPj4gKwkJCWZvciAoaiA9IGkgLSAxOyBqID49IERQX0NP UkVfUE07IGotLSkgewo+PiArCQkJCW1zbV9kc3NfY29uZmlnX3ZyZWcoJnBkZXYtPmRldiwKPj4g KwkJCQlwYXJzZXItPm1wW2pdLnZyZWdfY29uZmlnLAo+PiArCQkJCXBhcnNlci0+bXBbal0ubnVt X3ZyZWcsIDApOwo+PiArCQkJfQo+IAo+IFB1dCB0aGlzIGxvb3AgaW4gdGhlIGVycm9yIGxhYmVs IGFuZCByZXR1cm4gMCBhYm92ZSBpdC4gQmV0dGVyIHlldCwgCj4ganVzdCBjYWxsCj4gdGhlIGRw X3Bvd2VyX3JlZ3VsYXRvcl9kZWluaXQgaW4gZXJyb3IuCj4gCj4+ICsKPj4gKwkJCWdvdG8gZXJy b3I7Cj4+ICsJCX0KPj4gKwl9Cj4+ICtlcnJvcjoKPj4gKwlyZXR1cm4gcmM7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyB2b2lkIGRwX3Bvd2VyX3JlZ3VsYXRvcl9kZWluaXQoc3RydWN0IGRwX3Bvd2Vy X3ByaXZhdGUgKnBvd2VyKQo+PiArewo+PiArCWludCByYyA9IDAsIGkgPSAwOwo+PiArCXN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Cj4+ICsJc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyOwo+ PiArCj4+ICsJcGFyc2VyID0gcG93ZXItPnBhcnNlcjsKPj4gKwlwZGV2ID0gcG93ZXItPnBkZXY7 Cj4+ICsKPj4gKwlmb3IgKGkgPSBEUF9DT1JFX1BNOyAoaSA8IERQX01BWF9QTSk7IGkrKykgewo+ IAo+IFVubmVjZXNzYXJ5ICgpLCBhcHBsaWVzIGVsc2V3aGVyZSB0b28sIHBsZWFzZSBtYWtlIGEg cGFzcwo+IAo+PiArCQlyYyA9IG1zbV9kc3NfY29uZmlnX3ZyZWcoJnBkZXYtPmRldiwKPj4gKwkJ CXBhcnNlci0+bXBbaV0udnJlZ19jb25maWcsCj4+ICsJCQlwYXJzZXItPm1wW2ldLm51bV92cmVn LCAwKTsKPj4gKwkJaWYgKHJjKQo+PiArCQkJcHJfZXJyKCJmYWlsZWQgdG8gZGVpbml0IHZyZWdz IGZvciAlc1xuIiwKPj4gKwkJCQlkcF9wYXJzZXJfcG1fbmFtZShpKSk7Cj4+ICsJfQo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW50IGRwX3Bvd2VyX3JlZ3VsYXRvcl9jdHJsKHN0cnVjdCBkcF9wb3dl cl9wcml2YXRlICpwb3dlciwgCj4+IGJvb2wgZW5hYmxlKQo+PiArewo+PiArCWludCByYyA9IDAs IGkgPSAwLCBqID0gMDsKPj4gKwlzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXI7Cj4+ICsKPj4gKwlw YXJzZXIgPSBwb3dlci0+cGFyc2VyOwo+PiArCj4+ICsJZm9yIChpID0gRFBfQ09SRV9QTTsgaSA8 IERQX01BWF9QTTsgaSsrKSB7Cj4+ICsJCXJjID0gbXNtX2Rzc19lbmFibGVfdnJlZygKPj4gKwkJ CXBhcnNlci0+bXBbaV0udnJlZ19jb25maWcsCj4+ICsJCQlwYXJzZXItPm1wW2ldLm51bV92cmVn LCBlbmFibGUpOwo+PiArCQlpZiAocmMpIHsKPj4gKwkJCXByX2VycigiZmFpbGVkIHRvICclcycg dnJlZ3MgZm9yICVzXG4iLAo+PiArCQkJCQllbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIiwK Pj4gKwkJCQkJZHBfcGFyc2VyX3BtX25hbWUoaSkpOwo+PiArCQkJaWYgKGVuYWJsZSkgewo+PiAr CQkJCWZvciAoaiA9IGktMTsgaiA+PSBEUF9DT1JFX1BNOyBqLS0pIHsKPj4gKwkJCQkJbXNtX2Rz c19lbmFibGVfdnJlZygKPj4gKwkJCQkJcGFyc2VyLT5tcFtqXS52cmVnX2NvbmZpZywKPj4gKwkJ CQkJcGFyc2VyLT5tcFtqXS5udW1fdnJlZywgMCk7Cj4+ICsJCQkJfQo+PiArCQkJfQo+PiArCQkJ Z290byBlcnJvcjsKPj4gKwkJfQo+PiArCX0KPj4gK2Vycm9yOgo+PiArCXJldHVybiByYzsKPj4g K30KPiAKPiBUaGlzIGZ1bmN0aW9uIGlzIGJhc2ljYWxseSBpZGVudGljYWwgdG8gZHBfcG93ZXJf cmVndWxhdG9yX2luaXQoKSwgCj4gcGxlYXNlCj4gZGVsZXRlIHRoaXMgZnVuY3Rpb24gYW5kIHVz ZSBkcF9wb3dlcl9yZWd1bGF0b3JfaW5pdCgpLgo+IAoKPiAKPj4gKwo+PiArc3RhdGljIGludCBk cF9wb3dlcl9waW5jdHJsX3NldChzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXIsIGJvb2wg Cj4+IGFjdGl2ZSkKPj4gK3sKPj4gKwlpbnQgcmMgPSAtRUZBVUxUOwo+PiArCXN0cnVjdCBwaW5j dHJsX3N0YXRlICpwaW5fc3RhdGU7Cj4+ICsJc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyOwo+PiAr Cj4+ICsJcGFyc2VyID0gcG93ZXItPnBhcnNlcjsKPj4gKwo+PiArCWlmIChJU19FUlJfT1JfTlVM TChwYXJzZXItPnBpbmN0cmwucGluKSkKPj4gKwkJcmV0dXJuIFBUUl9FUlIocGFyc2VyLT5waW5j dHJsLnBpbik7Cj4+ICsKPj4gKwlwaW5fc3RhdGUgPSBhY3RpdmUgPyBwYXJzZXItPnBpbmN0cmwu c3RhdGVfYWN0aXZlCj4+ICsJCQkJOiBwYXJzZXItPnBpbmN0cmwuc3RhdGVfc3VzcGVuZDsKPj4g KwlpZiAoIUlTX0VSUl9PUl9OVUxMKHBpbl9zdGF0ZSkpIHsKPiAKPiBIb3cgaXMgdGhpcyBub3Qg cG9zc2libGU/IFlvdSBjaGVjayB0aGVzZSBvbiBpbml0aWFsaXphdGlvbi4KPiAKPj4gKwkJcmMg PSBwaW5jdHJsX3NlbGVjdF9zdGF0ZShwYXJzZXItPnBpbmN0cmwucGluLAo+PiArCQkJCXBpbl9z dGF0ZSk7Cj4gCj4gQ29tYmluZSBvbiAxIGxpbmUKPiAKPj4gKwkJaWYgKHJjKQo+PiArCQkJcHJf ZXJyKCJjYW4gbm90IHNldCAlcyBwaW5zXG4iLAo+PiArCQkJICAgICAgIGFjdGl2ZSA/ICJkcF9h Y3RpdmUiCj4+ICsJCQkgICAgICAgOiAiZHBfc2xlZXAiKTsKPiAKPiAKPiBDb21iaW5lIG9uIG9u ZSBsaW5lLiBBbHNvIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGlzIGlzIHRoZSBjYXNlLgo+IAo+ PiArCX0gZWxzZSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCAnJXMnIHBpbnN0YXRlXG4iLAo+PiAr CQkgICAgICAgYWN0aXZlID8gImRwX2FjdGl2ZSIKPj4gKwkJICAgICAgIDogImRwX3NsZWVwIik7 Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIHJjOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGRw X3Bvd2VyX2Nsa19pbml0KHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlciwgYm9vbCAKPj4g ZW5hYmxlKQo+IAo+IFNwbGl0IHRoaXMgaW50byBpbml0L2RlaW5pdCwgdGhlIHBhdGhzIGRvbid0 IHNoYXJlIGNvZGUuCj4gCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1Y3QgZHNzX21v ZHVsZV9wb3dlciAqY29yZSwgKmN0cmw7Cj4+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+PiArCj4+ ICsJY29yZSA9ICZwb3dlci0+cGFyc2VyLT5tcFtEUF9DT1JFX1BNXTsKPj4gKwljdHJsID0gJnBv d2VyLT5wYXJzZXItPm1wW0RQX0NUUkxfUE1dOwo+PiArCj4+ICsJZGV2ID0gJnBvd2VyLT5wZGV2 LT5kZXY7Cj4+ICsKPj4gKwlpZiAoIWNvcmUgfHwgIWN0cmwpIHsKPj4gKwkJcHJfZXJyKCJpbnZh bGlkIHBvd2VyX2RhdGFcbiIpOwo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZXhpdDsK Pj4gKwl9Cj4+ICsKPj4gKwlpZiAoZW5hYmxlKSB7Cj4+ICsJCXJjID0gbXNtX2Rzc19nZXRfY2xr KGRldiwgY29yZS0+Y2xrX2NvbmZpZywgY29yZS0+bnVtX2Nsayk7Cj4+ICsJCWlmIChyYykgewo+ PiArCQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0ICVzIGNsay4gZXJyPSVkXG4iLAo+PiArCQkJCWRw X3BhcnNlcl9wbV9uYW1lKERQX0NPUkVfUE0pLCByYyk7Cj4+ICsJCQlnb3RvIGV4aXQ7Cj4+ICsJ CX0KPj4gKwo+PiArCQlyYyA9IG1zbV9kc3NfZ2V0X2NsayhkZXYsIGN0cmwtPmNsa19jb25maWcs IGN0cmwtPm51bV9jbGspOwo+PiArCQlpZiAocmMpIHsKPj4gKwkJCXByX2VycigiZmFpbGVkIHRv IGdldCAlcyBjbGsuIGVycj0lZFxuIiwKPj4gKwkJCQlkcF9wYXJzZXJfcG1fbmFtZShEUF9DVFJM X1BNKSwgcmMpOwo+PiArCQkJZ290byBjdHJsX2dldF9lcnJvcjsKPj4gKwkJfQo+PiArCj4+ICsJ CXBvd2VyLT5waXhlbF9jbGtfcmNnID0gZGV2bV9jbGtfZ2V0KGRldiwgInBpeGVsX2Nsa19yY2ci KTsKPj4gKwkJaWYgKElTX0VSUihwb3dlci0+cGl4ZWxfY2xrX3JjZykpIHsKPj4gKwkJCXByX2Rl YnVnKCJVbmFibGUgdG8gZ2V0IERQIHBpeGVsIGNsayBSQ0dcbiIpOwo+PiArCQkJcG93ZXItPnBp eGVsX2Nsa19yY2cgPSBOVUxMOwo+PiArCQl9Cj4+ICsKPj4gKwkJcG93ZXItPnBpeGVsX3BhcmVu dCA9IGRldm1fY2xrX2dldChkZXYsICJwaXhlbF9wYXJlbnQiKTsKPj4gKwkJaWYgKElTX0VSUihw b3dlci0+cGl4ZWxfcGFyZW50KSkgewo+PiArCQkJcHJfZGVidWcoIlVuYWJsZSB0byBnZXQgRFAg cGl4ZWwgUkNHIHBhcmVudFxuIik7Cj4+ICsJCQlwb3dlci0+cGl4ZWxfcGFyZW50ID0gTlVMTDsK Pj4gKwkJfQo+PiArCX0gZWxzZSB7Cj4+ICsJCWlmIChwb3dlci0+cGl4ZWxfcGFyZW50KQo+PiAr CQkJZGV2bV9jbGtfcHV0KGRldiwgcG93ZXItPnBpeGVsX3BhcmVudCk7Cj4+ICsKPj4gKwkJaWYg KHBvd2VyLT5waXhlbF9jbGtfcmNnKQo+PiArCQkJZGV2bV9jbGtfcHV0KGRldiwgcG93ZXItPnBp eGVsX2Nsa19yY2cpOwo+IAo+IGRldmljZSBtYW5hZ2VkIHJlc291cmNlcyBkb24ndCBuZWVkIHRv IGJlIGZyZWVkCj4gCj4+ICsKPj4gKwkJbXNtX2Rzc19wdXRfY2xrKGN0cmwtPmNsa19jb25maWcs IGN0cmwtPm51bV9jbGspOwo+PiArCQltc21fZHNzX3B1dF9jbGsoY29yZS0+Y2xrX2NvbmZpZywg Y29yZS0+bnVtX2Nsayk7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIHJjOwo+PiArCj4+ICtjdHJs X2dldF9lcnJvcjoKPj4gKwltc21fZHNzX3B1dF9jbGsoY29yZS0+Y2xrX2NvbmZpZywgY29yZS0+ bnVtX2Nsayk7Cj4gCj4gU2luY2UgdGhpcyBpcyBvbmx5IHVzZWQgaW4gb25lIHBsYWNlLCBqdXN0 IGRvIGl0IGFib3ZlIGFuZCByZXR1cm4gCj4gZGlyZWN0bHkuCj4gCj4+ICtleGl0Ogo+IAo+IERl bGV0ZSBleGl0IGxhYmVsIGFuZCByZXR1cm4gZGlyZWN0bHkKPiAKPj4gKwlyZXR1cm4gcmM7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfcG93ZXJfY2xrX3NldF9yYXRlKHN0cnVjdCBkcF9w b3dlcl9wcml2YXRlICpwb3dlciwKPj4gKwkJZW51bSBkcF9wbV90eXBlIG1vZHVsZSwgYm9vbCBl bmFibGUpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dl ciAqbXA7Cj4+ICsKPj4gKwlpZiAoIXBvd2VyKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBwb3dl ciBkYXRhXG4iKTsKPj4gKwkJcmMgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsJfQo+ PiArCj4+ICsJbXAgPSAmcG93ZXItPnBhcnNlci0+bXBbbW9kdWxlXTsKPj4gKwo+PiArCWlmIChl bmFibGUpIHsKPj4gKwkJcmMgPSBtc21fZHNzX2Nsa19zZXRfcmF0ZShtcC0+Y2xrX2NvbmZpZywg bXAtPm51bV9jbGspOwo+PiArCQlpZiAocmMpIHsKPj4gKwkJCXByX2VycigiZmFpbGVkIHRvIHNl dCBjbGtzIHJhdGUuXG4iKTsKPj4gKwkJCWdvdG8gZXhpdDsKPj4gKwkJfQo+PiArCj4+ICsJCXJj ID0gbXNtX2Rzc19lbmFibGVfY2xrKG1wLT5jbGtfY29uZmlnLCBtcC0+bnVtX2NsaywgMSk7Cj4+ ICsJCWlmIChyYykgewo+PiArCQkJcHJfZXJyKCJmYWlsZWQgdG8gZW5hYmxlIGNsa3NcbiIpOwo+ PiArCQkJZ290byBleGl0Owo+PiArCQl9Cj4+ICsJfSBlbHNlIHsKPj4gKwkJcmMgPSBtc21fZHNz X2VuYWJsZV9jbGsobXAtPmNsa19jb25maWcsIG1wLT5udW1fY2xrLCAwKTsKPj4gKwkJaWYgKHJj KSB7Cj4+ICsJCQlwcl9lcnIoImZhaWxlZCB0byBkaXNhYmxlIGNsa3NcbiIpOwo+PiArCQkJCWdv dG8gZXhpdDsKPj4gKwkJfQo+IAo+IFRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgY2FuIHNoYXJlIGNv ZGUsIGJ1dCBpdCBkb2Vzbid0IDooIFBsZWFzZSBwdWxsIAo+IHRoaXMgb3V0Cj4gZm9yIGJvdGgg cGF0aHMKPiAKPj4gKwl9Cj4+ICtleGl0Ogo+IAo+IERlbGV0ZSBleGl0IGxhYmVsIGFuZCByZXR1 cm4gZGlyZWN0bHkKPiAKPj4gKwlyZXR1cm4gcmM7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQg ZHBfcG93ZXJfY2xrX2VuYWJsZShzdHJ1Y3QgZHBfcG93ZXIgKmRwX3Bvd2VyLAo+PiArCQllbnVt IGRwX3BtX3R5cGUgcG1fdHlwZSwgYm9vbCBlbmFibGUpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsK Pj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXA7Cj4+ICsJc3RydWN0IGRwX3Bvd2VyX3By aXZhdGUgKnBvd2VyOwo+PiArCj4+ICsJaWYgKCFkcF9wb3dlcikgewo+PiArCQlwcl9lcnIoImlu dmFsaWQgcG93ZXIgZGF0YVxuIik7Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJZ290byBlcnJv cjsKPj4gKwl9Cj4+ICsKPj4gKwlwb3dlciA9IGNvbnRhaW5lcl9vZihkcF9wb3dlciwgc3RydWN0 IGRwX3Bvd2VyX3ByaXZhdGUsIGRwX3Bvd2VyKTsKPj4gKwo+PiArCW1wID0gJnBvd2VyLT5wYXJz ZXItPm1wW3BtX3R5cGVdOwo+PiArCj4+ICsJaWYgKChwbV90eXBlICE9IERQX0NPUkVfUE0pICYm IChwbV90eXBlICE9IERQX0NUUkxfUE0pKSB7Cj4gCj4gU3RyaXAgb3V0IHVubmVjZXNzYXJ5ICgp Cj4gCj4+ICsJCXByX2VycigidW5zdXBwb3J0ZWQgcG93ZXIgbW9kdWxlOiAlc1xuIiwKPj4gKwkJ CQlkcF9wYXJzZXJfcG1fbmFtZShwbV90eXBlKSk7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiAr CX0KPj4gKwo+PiArCWlmIChlbmFibGUpIHsKPj4gKwkJaWYgKChwbV90eXBlID09IERQX0NPUkVf UE0pCj4+ICsJCQkmJiAocG93ZXItPmNvcmVfY2xrc19vbikpIHsKPiAKPiBIZXJlIHRvbwo+IAo+ IENvbWJpbmUgb24gb25lIGxpbmUgYXMgd2VsbAo+IAo+PiArCQkJcHJfZGVidWcoImNvcmUgY2xr cyBhbHJlYWR5IGVuYWJsZWRcbiIpOwo+PiArCQkJcmV0dXJuIDA7Cj4+ICsJCX0KPj4gKwo+PiAr CQlpZiAoKHBtX3R5cGUgPT0gRFBfQ1RSTF9QTSkKPj4gKwkJCSYmIChwb3dlci0+bGlua19jbGtz X29uKSkgewo+IAo+IGFuZCBoZXJlCj4gCj4+ICsJCQlwcl9kZWJ1ZygibGlua3MgY2xrcyBhbHJl YWR5IGVuYWJsZWRcbiIpOwo+PiArCQkJcmV0dXJuIDA7Cj4+ICsJCX0KPj4gKwo+PiArCQlpZiAo KHBtX3R5cGUgPT0gRFBfQ1RSTF9QTSkgJiYgKCFwb3dlci0+Y29yZV9jbGtzX29uKSkgewo+IAo+ IGFuZCBoZXJlCj4gCj4+ICsJCQlwcl9kZWJ1ZygiTmVlZCB0byBlbmFibGUgY29yZSBjbGtzIGJl Zm9yZSBsaW5rIGNsa3NcbiIpOwo+PiArCj4+ICsJCQlyYyA9IGRwX3Bvd2VyX2Nsa19zZXRfcmF0 ZShwb3dlciwgRFBfQ09SRV9QTSwgZW5hYmxlKTsKPj4gKwkJCWlmIChyYykgewo+PiArCQkJCXBy X2VycigiZmFpbGVkIHRvIGVuYWJsZSBjbGtzOiAlcy4gZXJyPSVkXG4iLAo+PiArCQkJCQlkcF9w YXJzZXJfcG1fbmFtZShEUF9DT1JFX1BNKSwgcmMpOwo+PiArCQkJCWdvdG8gZXJyb3I7Cj4+ICsJ CQl9IGVsc2Ugewo+PiArCQkJCXBvd2VyLT5jb3JlX2Nsa3Nfb24gPSB0cnVlOwo+IAo+IFRoaXMg ZG9lc24ndCBuZWVkIHRvIGJlIHdyYXBwZWQgaW4gdGhlIGVsc2UKPiAKPj4gKwkJCX0KPj4gKwkJ fQo+PiArCX0KPj4gKwo+PiArCXJjID0gZHBfcG93ZXJfY2xrX3NldF9yYXRlKHBvd2VyLCBwbV90 eXBlLCBlbmFibGUpOwo+PiArCWlmIChyYykgewo+PiArCQlwcl9lcnIoImZhaWxlZCB0byAnJXMn IGNsa3MgZm9yOiAlcy4gZXJyPSVkXG4iLAo+PiArCQkJZW5hYmxlID8gImVuYWJsZSIgOiAiZGlz YWJsZSIsCj4+ICsJCQlkcF9wYXJzZXJfcG1fbmFtZShwbV90eXBlKSwgcmMpOwo+PiArCQkJZ290 byBlcnJvcjsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAocG1fdHlwZSA9PSBEUF9DT1JFX1BNKQo+PiAr CQlwb3dlci0+Y29yZV9jbGtzX29uID0gZW5hYmxlOwo+PiArCWVsc2UKPj4gKwkJcG93ZXItPmxp bmtfY2xrc19vbiA9IGVuYWJsZTsKPj4gKwo+PiArCXByX2RlYnVnKCIlcyBjbG9ja3MgZm9yICVz XG4iLAo+PiArCQkJZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIsCj4+ICsJCQlkcF9wYXJz ZXJfcG1fbmFtZShwbV90eXBlKSk7Cj4+ICsJcHJfZGVidWcoImxpbmtfY2xrczolcyBjb3JlX2Ns a3M6JXNcbiIsCj4+ICsJCXBvd2VyLT5saW5rX2Nsa3Nfb24gPyAib24iIDogIm9mZiIsCj4+ICsJ CXBvd2VyLT5jb3JlX2Nsa3Nfb24gPyAib24iIDogIm9mZiIpOwo+PiArZXJyb3I6Cj4gCj4gRGVs ZXRlIGVycm9yIGxhYmVsIGFuZCByZXR1cm4gZGlyZWN0bHkKPiAKPj4gKwlyZXR1cm4gcmM7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfcG93ZXJfcmVxdWVzdF9ncGlvcyhzdHJ1Y3QgZHBf cG93ZXJfcHJpdmF0ZSAqcG93ZXIpCj4+ICt7Cj4+ICsJaW50IHJjID0gMCwgaTsKPj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXY7Cj4+ICsJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKm1wOwo+PiArCXN0 YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3Bpb19uYW1lc1tdID0gewo+PiArCQkiYXV4X2VuYWJs ZSIsICJhdXhfc2VsIiwgInVzYnBsdWdfY2MiLAo+PiArCX07Cj4+ICsKPj4gKwlpZiAoIXBvd2Vy KSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBwb3dlciBkYXRhXG4iKTsKPj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJZGV2ID0gJnBvd2VyLT5wZGV2LT5kZXY7Cj4+ICsJbXAg PSAmcG93ZXItPnBhcnNlci0+bXBbRFBfQ09SRV9QTV07Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShncGlvX25hbWVzKTsgaSsrKSB7Cj4+ICsJCXVuc2lnbmVkIGludCBncGlv ID0gbXAtPmdwaW9fY29uZmlnW2ldLmdwaW87Cj4+ICsKPj4gKwkJaWYgKGdwaW9faXNfdmFsaWQo Z3BpbykpIHsKPiAKPiBpZiAoIWdwaW9faXNfdmFsaWQoZ3BpbykpCj4gCWNvbnRpbnVlOwo+IAo+ IGFuZCBzYXZlIHlvdXJzZWxmIHNvbWUgaW5kZW50IHNwYWNlCj4gCj4+ICsJCQlyYyA9IGRldm1f Z3Bpb19yZXF1ZXN0KGRldiwgZ3BpbywgZ3Bpb19uYW1lc1tpXSk7Cj4+ICsJCQlpZiAocmMpIHsK Pj4gKwkJCQlwcl9lcnIoInJlcXVlc3QgJXMgZ3BpbyBmYWlsZWQsIHJjPSVkXG4iLAo+PiArCQkJ CQkgICAgICAgZ3Bpb19uYW1lc1tpXSwgcmMpOwo+PiArCQkJCWdvdG8gZXJyb3I7Cj4+ICsJCQl9 Cj4+ICsJCX0KPj4gKwl9Cj4+ICsJcmV0dXJuIDA7Cj4+ICtlcnJvcjoKPj4gKwlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRShncGlvX25hbWVzKTsgaSsrKSB7Cj4+ICsJCXVuc2lnbmVkIGludCBn cGlvID0gbXAtPmdwaW9fY29uZmlnW2ldLmdwaW87Cj4+ICsKPj4gKwkJaWYgKGdwaW9faXNfdmFs aWQoZ3BpbykpCj4+ICsJCQlncGlvX2ZyZWUoZ3Bpbyk7Cj4+ICsJfQo+IAo+IGdwaW9zIGFyZSBk ZXZpY2UgbWFuYWdlZCwgc28geW91IHNob3VsZG4ndCBuZWVkIHRoaXMuCj4gCj4+ICsJcmV0dXJu IHJjOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgYm9vbCBkcF9wb3dlcl9maW5kX2dwaW8oY29uc3Qg Y2hhciAqZ3BpbzEsIGNvbnN0IGNoYXIgKmdwaW8yKQo+PiArewo+PiArCXJldHVybiAhIXN0cm5z dHIoZ3BpbzEsIGdwaW8yLCBzdHJsZW4oZ3BpbzEpKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZv aWQgZHBfcG93ZXJfc2V0X2dwaW8oc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyLCBib29s IAo+PiBmbGlwKQo+PiArewo+PiArCWludCBpOwo+PiArCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2Vy ICptcCA9ICZwb3dlci0+cGFyc2VyLT5tcFtEUF9DT1JFX1BNXTsKPj4gKwlzdHJ1Y3QgZHNzX2dw aW8gKmNvbmZpZyA9IG1wLT5ncGlvX2NvbmZpZzsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBt cC0+bnVtX2dwaW87IGkrKykgewo+PiArCQlpZiAoZHBfcG93ZXJfZmluZF9ncGlvKGNvbmZpZy0+ Z3Bpb19uYW1lLCAiYXV4LXNlbCIpKQo+PiArCQkJY29uZmlnLT52YWx1ZSA9IGZsaXA7Cj4+ICsK Pj4gKwkJaWYgKGdwaW9faXNfdmFsaWQoY29uZmlnLT5ncGlvKSkgewo+PiArCQkJcHJfZGVidWco ImdwaW8gJXMsIHZhbHVlICVkXG4iLCBjb25maWctPmdwaW9fbmFtZSwKPj4gKwkJCQljb25maWct PnZhbHVlKTsKPj4gKwo+PiArCQkJaWYgKGRwX3Bvd2VyX2ZpbmRfZ3Bpbyhjb25maWctPmdwaW9f bmFtZSwgImF1eC1lbiIpIHx8Cj4+ICsJCQkgICAgZHBfcG93ZXJfZmluZF9ncGlvKGNvbmZpZy0+ Z3Bpb19uYW1lLCAiYXV4LXNlbCIpKQo+PiArCQkJCWdwaW9fZGlyZWN0aW9uX291dHB1dChjb25m aWctPmdwaW8sCj4+ICsJCQkJCWNvbmZpZy0+dmFsdWUpOwo+PiArCQkJZWxzZQo+PiArCQkJCWdw aW9fc2V0X3ZhbHVlKGNvbmZpZy0+Z3BpbywgY29uZmlnLT52YWx1ZSk7Cj4+ICsKPj4gKwkJfQo+ PiArCQljb25maWcrKzsKPj4gKwl9Cj4gCj4gSW5zdGVhZCBvZiBhbGwgb2YgdGhlc2Ugc3RyaW5n IG9wcywgcGxlYXNlIGp1c3QgbWFrZSBwb2ludGVycyAKPiBhY2Nlc3NpYmxlIHNvIHlvdQo+IGNh biBnZXQgYXQgdGhlIGdwaW8gZGlyZWN0bHkuCj4gCj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQg ZHBfcG93ZXJfY29uZmlnX2dwaW9zKHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlciwgYm9v bCAKPj4gZmxpcCwKPj4gKwkJCQkJYm9vbCBlbmFibGUpCj4gCj4gU3BsaXQgaW50byAyIGZ1bmN0 aW9ucwo+IAo+PiArewo+PiArCWludCByYyA9IDAsIGk7Cj4+ICsJc3RydWN0IGRzc19tb2R1bGVf cG93ZXIgKm1wOwo+PiArCXN0cnVjdCBkc3NfZ3BpbyAqY29uZmlnOwo+PiArCj4+ICsJbXAgPSAm cG93ZXItPnBhcnNlci0+bXBbRFBfQ09SRV9QTV07Cj4+ICsJY29uZmlnID0gbXAtPmdwaW9fY29u ZmlnOwo+PiArCj4+ICsJaWYgKGVuYWJsZSkgewo+PiArCQlyYyA9IGRwX3Bvd2VyX3JlcXVlc3Rf Z3Bpb3MocG93ZXIpOwo+PiArCQlpZiAocmMpIHsKPj4gKwkJCXByX2VycigiZ3BpbyByZXF1ZXN0 IGZhaWxlZFxuIik7Cj4+ICsJCQlyZXR1cm4gcmM7Cj4+ICsJCX0KPj4gKwo+PiArCQlkcF9wb3dl cl9zZXRfZ3Bpbyhwb3dlciwgZmxpcCk7Cj4+ICsJfSBlbHNlIHsKPj4gKwkJZm9yIChpID0gMDsg aSA8IG1wLT5udW1fZ3BpbzsgaSsrKSB7Cj4+ICsJCQlncGlvX3NldF92YWx1ZShjb25maWdbaV0u Z3BpbywgMCk7Cj4+ICsJCQlncGlvX2ZyZWUoY29uZmlnW2ldLmdwaW8pOwo+PiArCQl9Cj4+ICsJ fQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfcG93ZXJf Y2xpZW50X2luaXQoc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlcikKPj4gK3sKPj4gKwlpbnQgcmMg PSAwOwo+PiArCXN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlcjsKPj4gKwo+PiArCWlmICgh ZHBfcG93ZXIpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIHBvd2VyIGRhdGFcbiIpOwo+PiArCQly ZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwlwb3dlciA9IGNvbnRhaW5lcl9vZihkcF9w b3dlciwgc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUsIGRwX3Bvd2VyKTsKPj4gKwo+PiArCXBtX3J1 bnRpbWVfZW5hYmxlKCZwb3dlci0+cGRldi0+ZGV2KTsKPj4gKwo+PiArCXJjID0gZHBfcG93ZXJf cmVndWxhdG9yX2luaXQocG93ZXIpOwo+PiArCWlmIChyYykgewo+PiArCQlwcl9lcnIoImZhaWxl ZCB0byBpbml0IHJlZ3VsYXRvcnNcbiIpOwo+IAo+IFByaW50IHJjCj4gCj4+ICsJCWdvdG8gZXJy b3JfcG93ZXI7Cj4+ICsJfQo+PiArCj4+ICsJcmMgPSBkcF9wb3dlcl9jbGtfaW5pdChwb3dlciwg dHJ1ZSk7Cj4+ICsJaWYgKHJjKSB7Cj4+ICsJCXByX2VycigiZmFpbGVkIHRvIGluaXQgY2xvY2tz XG4iKTsKPiAKPiBQcmludCByYwo+IAo+PiArCQlnb3RvIGVycm9yX2NsazsKPj4gKwl9Cj4+ICsJ cmV0dXJuIDA7Cj4+ICsKPj4gK2Vycm9yX2NsazoKPj4gKwlkcF9wb3dlcl9yZWd1bGF0b3JfZGVp bml0KHBvd2VyKTsKPj4gK2Vycm9yX3Bvd2VyOgo+PiArCXBtX3J1bnRpbWVfZGlzYWJsZSgmcG93 ZXItPnBkZXYtPmRldik7Cj4+ICsJcmV0dXJuIHJjOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9p ZCBkcF9wb3dlcl9jbGllbnRfZGVpbml0KHN0cnVjdCBkcF9wb3dlciAqZHBfcG93ZXIpCj4+ICt7 Cj4+ICsJc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyOwo+PiArCj4+ICsJaWYgKCFkcF9w b3dlcikgewo+PiArCQlwcl9lcnIoImludmFsaWQgcG93ZXIgZGF0YVxuIik7Cj4+ICsJCXJldHVy bjsKPj4gKwl9Cj4+ICsKPj4gKwlwb3dlciA9IGNvbnRhaW5lcl9vZihkcF9wb3dlciwgc3RydWN0 IGRwX3Bvd2VyX3ByaXZhdGUsIGRwX3Bvd2VyKTsKPj4gKwo+PiArCWRwX3Bvd2VyX2Nsa19pbml0 KHBvd2VyLCBmYWxzZSk7Cj4+ICsJZHBfcG93ZXJfcmVndWxhdG9yX2RlaW5pdChwb3dlcik7Cj4+ ICsJcG1fcnVudGltZV9kaXNhYmxlKCZwb3dlci0+cGRldi0+ZGV2KTsKPj4gKwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IGRwX3Bvd2VyX3NldF9waXhlbF9jbGtfcGFyZW50KHN0cnVjdCBkcF9w b3dlciAqZHBfcG93ZXIpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1Y3QgZHBfcG93 ZXJfcHJpdmF0ZSAqcG93ZXI7Cj4+ICsKPj4gKwlpZiAoIWRwX3Bvd2VyKSB7Cj4+ICsJCXByX2Vy cigiaW52YWxpZCBwb3dlciBkYXRhXG4iKTsKPj4gKwkJcmMgPSAtRUlOVkFMOwo+PiArCQlnb3Rv IGV4aXQ7Cj4+ICsJfQo+PiArCj4+ICsJcG93ZXIgPSBjb250YWluZXJfb2YoZHBfcG93ZXIsIHN0 cnVjdCBkcF9wb3dlcl9wcml2YXRlLCBkcF9wb3dlcik7Cj4+ICsKPj4gKwlpZiAocG93ZXItPnBp eGVsX2Nsa19yY2cgJiYgcG93ZXItPnBpeGVsX3BhcmVudCkKPj4gKwkJY2xrX3NldF9wYXJlbnQo cG93ZXItPnBpeGVsX2Nsa19yY2csIHBvd2VyLT5waXhlbF9wYXJlbnQpOwo+IAo+IENoZWNrIHJl dHVybiB2YWx1ZQo+IAo+PiArZXhpdDoKPiAKPiBEZWxldGUgbGFiZWwvcmMsIHJldHVybiBpbW1l ZGlhdGVseS4KPiAKPj4gKwlyZXR1cm4gcmM7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBf cG93ZXJfaW5pdChzdHJ1Y3QgZHBfcG93ZXIgKmRwX3Bvd2VyLCBib29sIGZsaXApCj4+ICt7Cj4+ ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXI7Cj4+ICsK Pj4gKwlpZiAoIWRwX3Bvd2VyKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBwb3dlciBkYXRhXG4i KTsKPj4gKwkJcmMgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsJfQo+PiArCj4+ICsJ cG93ZXIgPSBjb250YWluZXJfb2YoZHBfcG93ZXIsIHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlLCBk cF9wb3dlcik7Cj4+ICsKPj4gKwlwbV9ydW50aW1lX2dldF9zeW5jKCZwb3dlci0+cGRldi0+ZGV2 KTsKPj4gKwlyYyA9IGRwX3Bvd2VyX3JlZ3VsYXRvcl9jdHJsKHBvd2VyLCB0cnVlKTsKPj4gKwlp ZiAocmMpIHsKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gZW5hYmxlIHJlZ3VsYXRvcnNcbiIpOwo+ IAo+IFByaW50IHJjCj4gCj4+ICsJCWdvdG8gZXhpdDsKPj4gKwl9Cj4+ICsKPj4gKwlyYyA9IGRw X3Bvd2VyX3BpbmN0cmxfc2V0KHBvd2VyLCB0cnVlKTsKPj4gKwlpZiAocmMpIHsKPiAKPiBQcmlu dCByYwo+IAo+PiArCQlwcl9lcnIoImZhaWxlZCB0byBzZXQgcGluY3RybCBzdGF0ZVxuIik7Cj4+ ICsJCWdvdG8gZXJyX3BpbmN0cmw7Cj4+ICsJfQo+PiArCj4+ICsJcmMgPSBkcF9wb3dlcl9jb25m aWdfZ3Bpb3MocG93ZXIsIGZsaXAsIHRydWUpOwo+PiArCWlmIChyYykgewo+IAo+IFByaW50IHJj Cj4gCj4+ICsJCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSBncGlvc1xuIik7Cj4+ICsJCWdvdG8g ZXJyX2dwaW87Cj4+ICsJfQo+PiArCj4+ICsJcmMgPSBkcF9wb3dlcl9jbGtfZW5hYmxlKGRwX3Bv d2VyLCBEUF9DT1JFX1BNLCB0cnVlKTsKPj4gKwlpZiAocmMpIHsKPiAKPiBQcmludCByYwo+IAo+ PiArCQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUgRFAgY29yZSBjbG9ja3NcbiIpOwo+PiArCQln b3RvIGVycl9jbGs7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICsKPj4gK2Vycl9jbGs6 Cj4+ICsJZHBfcG93ZXJfY29uZmlnX2dwaW9zKHBvd2VyLCBmbGlwLCBmYWxzZSk7Cj4+ICtlcnJf Z3BpbzoKPj4gKwlkcF9wb3dlcl9waW5jdHJsX3NldChwb3dlciwgZmFsc2UpOwo+PiArZXJyX3Bp bmN0cmw6Cj4+ICsJZHBfcG93ZXJfcmVndWxhdG9yX2N0cmwocG93ZXIsIGZhbHNlKTsKPj4gK2V4 aXQ6Cj4+ICsJcG1fcnVudGltZV9wdXRfc3luYygmcG93ZXItPnBkZXYtPmRldik7Cj4+ICsJcmV0 dXJuIHJjOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGRwX3Bvd2VyX2RlaW5pdChzdHJ1Y3Qg ZHBfcG93ZXIgKmRwX3Bvd2VyKQo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJc3RydWN0IGRw X3Bvd2VyX3ByaXZhdGUgKnBvd2VyOwo+PiArCj4+ICsJaWYgKCFkcF9wb3dlcikgewo+PiArCQlw cl9lcnIoImludmFsaWQgcG93ZXIgZGF0YVxuIik7Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJ Z290byBleGl0Owo+PiArCX0KPj4gKwo+PiArCXBvd2VyID0gY29udGFpbmVyX29mKGRwX3Bvd2Vy LCBzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSwgZHBfcG93ZXIpOwo+PiArCj4+ICsJZHBfcG93ZXJf Y2xrX2VuYWJsZShkcF9wb3dlciwgRFBfQ09SRV9QTSwgZmFsc2UpOwo+PiArCWRwX3Bvd2VyX2Nv bmZpZ19ncGlvcyhwb3dlciwgZmFsc2UsIGZhbHNlKTsKPj4gKwlkcF9wb3dlcl9waW5jdHJsX3Nl dChwb3dlciwgZmFsc2UpOwo+PiArCWRwX3Bvd2VyX3JlZ3VsYXRvcl9jdHJsKHBvd2VyLCBmYWxz ZSk7Cj4+ICsJcG1fcnVudGltZV9wdXRfc3luYygmcG93ZXItPnBkZXYtPmRldik7Cj4+ICtleGl0 Ogo+IAo+IERlbGV0ZSBleGl0IGxhYmVsL3JjIGFuZCByZXR1cm4gZGlyZWN0bHkKPiAKPj4gKwly ZXR1cm4gcmM7Cj4+ICt9Cj4+ICsKPj4gK3N0cnVjdCBkcF9wb3dlciAqZHBfcG93ZXJfZ2V0KHN0 cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikKPj4gK3sKPj4gKwlpbnQgcmMgPSAwOwo+PiArCXN0cnVj dCBkcF9wb3dlcl9wcml2YXRlICpwb3dlcjsKPj4gKwlzdHJ1Y3QgZHBfcG93ZXIgKmRwX3Bvd2Vy Owo+PiArCj4+ICsJaWYgKCFwYXJzZXIpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4i KTsKPj4gKwkJcmMgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGVycm9yOwo+PiArCX0KPj4gKwo+PiAr CXBvd2VyID0gZGV2bV9remFsbG9jKCZwYXJzZXItPnBkZXYtPmRldiwgc2l6ZW9mKCpwb3dlciks IAo+PiBHRlBfS0VSTkVMKTsKPj4gKwlpZiAoIXBvd2VyKSB7Cj4+ICsJCXJjID0gLUVOT01FTTsK Pj4gKwkJZ290byBlcnJvcjsKPj4gKwl9Cj4+ICsKPj4gKwlwb3dlci0+cGFyc2VyID0gcGFyc2Vy Owo+PiArCXBvd2VyLT5wZGV2ID0gcGFyc2VyLT5wZGV2Owo+PiArCj4+ICsJZHBfcG93ZXIgPSAm cG93ZXItPmRwX3Bvd2VyOwo+PiArCj4+ICsJZHBfcG93ZXItPmluaXQgPSBkcF9wb3dlcl9pbml0 Owo+PiArCWRwX3Bvd2VyLT5kZWluaXQgPSBkcF9wb3dlcl9kZWluaXQ7Cj4+ICsJZHBfcG93ZXIt PmNsa19lbmFibGUgPSBkcF9wb3dlcl9jbGtfZW5hYmxlOwo+PiArCWRwX3Bvd2VyLT5zZXRfcGl4 ZWxfY2xrX3BhcmVudCA9IGRwX3Bvd2VyX3NldF9waXhlbF9jbGtfcGFyZW50Owo+PiArCWRwX3Bv d2VyLT5wb3dlcl9jbGllbnRfaW5pdCA9IGRwX3Bvd2VyX2NsaWVudF9pbml0Owo+PiArCWRwX3Bv d2VyLT5wb3dlcl9jbGllbnRfZGVpbml0ID0gZHBfcG93ZXJfY2xpZW50X2RlaW5pdDsKPj4gKwo+ PiArCXJldHVybiBkcF9wb3dlcjsKPj4gK2Vycm9yOgo+PiArCXJldHVybiBFUlJfUFRSKHJjKTsK Pj4gK30KPj4gKwo+PiArdm9pZCBkcF9wb3dlcl9wdXQoc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dl cikKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXIgPSBOVUxMOwo+PiAr Cj4+ICsJaWYgKCFkcF9wb3dlcikKPj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJcG93ZXIgPSBjb250 YWluZXJfb2YoZHBfcG93ZXIsIHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlLCBkcF9wb3dlcik7Cj4+ ICsKPj4gKwlkZXZtX2tmcmVlKCZwb3dlci0+cGRldi0+ZGV2LCBwb3dlcik7Cj4+ICt9Cj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmggCj4+IGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9wb3dlci5oCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGlu ZGV4IDAwMDAwMDAuLmQxYWRhYWYKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmgKPj4gQEAgLTAsMCArMSw1NyBAQAo+PiArLyoKPj4gKyAq IENvcHlyaWdodCAoYykgMjAxMi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0 cyAKPj4gcmVzZXJ2ZWQuCj4+ICsgKgo+PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKPj4gbW9kaWZ5Cj4+ICsgKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MiBhbmQKPj4gKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLgo+PiArICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+PiArICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4gKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKPj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Cj4+ICsgKgo+PiArICovCj4+ICsKPj4gKyNpZm5kZWYgX0RQX1BPV0VSX0hfCj4+ICsjZGVmaW5l IF9EUF9QT1dFUl9IXwo+PiArCj4+ICsjaW5jbHVkZSAiZHBfcGFyc2VyLmgiCj4+ICsjaW5jbHVk ZSAiZHB1X3Bvd2VyX2hhbmRsZS5oIgo+PiArCj4+ICsvKioKPj4gKyAqIHNydWN0IGRwX3Bvd2Vy IC0gRGlzcGxheVBvcnQncyBwb3dlciByZWxhdGVkIGRhdGEKPj4gKyAqCj4+ICsgKiBAaW5pdDog aW5pdGlhbGl6ZXMgdGhlIHJlZ3VsYXRvcnMvY29yZSBjbG9ja3MvR1BJT3MvcGluY3RybAo+PiAr ICogQGRlaW5pdDogdHVybnMgb2ZmIHRoZSByZWd1bGF0b3JzL2NvcmUgY2xvY2tzL0dQSU9zL3Bp bmN0cmwKPj4gKyAqIEBjbGtfZW5hYmxlOiBlbmFibGUvZGlzYWJsZSB0aGUgRFAgY2xvY2tzCj4+ ICsgKiBAc2V0X3BpeGVsX2Nsa19wYXJlbnQ6IHNldCB0aGUgcGFyZW50IG9mIERQIHBpeGVsIGNs b2NrCj4+ICsgKi8KPj4gK3N0cnVjdCBkcF9wb3dlciB7Cj4+ICsJaW50ICgqaW5pdCkoc3RydWN0 IGRwX3Bvd2VyICpwb3dlciwgYm9vbCBmbGlwKTsKPj4gKwlpbnQgKCpkZWluaXQpKHN0cnVjdCBk cF9wb3dlciAqcG93ZXIpOwo+PiArCWludCAoKmNsa19lbmFibGUpKHN0cnVjdCBkcF9wb3dlciAq cG93ZXIsIGVudW0gZHBfcG1fdHlwZSBwbV90eXBlLAo+PiArCQkJCWJvb2wgZW5hYmxlKTsKPj4g KwlpbnQgKCpzZXRfcGl4ZWxfY2xrX3BhcmVudCkoc3RydWN0IGRwX3Bvd2VyICpwb3dlcik7Cj4+ ICsJaW50ICgqcG93ZXJfY2xpZW50X2luaXQpKHN0cnVjdCBkcF9wb3dlciAqcG93ZXIpOwo+PiAr CXZvaWQgKCpwb3dlcl9jbGllbnRfZGVpbml0KShzdHJ1Y3QgZHBfcG93ZXIgKnBvd2VyKTsKPj4g K307Cj4+ICsKPj4gKy8qKgo+PiArICogZHBfcG93ZXJfZ2V0KCkgLSBjb25maWd1cmUgYW5kIGdl dCB0aGUgRGlzcGxheVBvcnQgcG93ZXIgbW9kdWxlIAo+PiBkYXRhCj4+ICsgKgo+PiArICogQHBh cnNlcjogaW5zdGFuY2Ugb2YgcGFyc2VyIG1vZHVsZQo+PiArICogcmV0dXJuOiBwb2ludGVyIHRv IGFsbG9jYXRlZCBwb3dlciBtb2R1bGUgZGF0YQo+PiArICoKPj4gKyAqIFRoaXMgQVBJIHdpbGwg Y29uZmlndXJlIHRoZSBEaXNwbGF5UG9ydCdzIHBvd2VyIG1vZHVsZSBhbmQgCj4+IHByb3ZpZGVz Cj4+ICsgKiBtZXRob2RzIHRvIGJlIGNhbGxlZCBieSB0aGUgY2xpZW50IHRvIGNvbmZpZ3VyZSB0 aGUgcG93ZXIgcmVsYXRlZAo+PiArICogbW9kdWVsZXMuCj4+ICsgKi8KPj4gK3N0cnVjdCBkcF9w b3dlciAqZHBfcG93ZXJfZ2V0KHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcik7Cj4+ICsKPj4gKy8q Kgo+PiArICogZHBfcG93ZXJfcHV0KCkgLSByZWxlYXNlIHRoZSBwb3dlciByZWxhdGVkIHJlc291 cmNlcwo+PiArICoKPj4gKyAqIEBwb3dlcjogcG9pbnRlciB0byB0aGUgcG93ZXIgbW9kdWxlJ3Mg ZGF0YQo+PiArICovCj4+ICt2b2lkIGRwX3Bvd2VyX3B1dChzdHJ1Y3QgZHBfcG93ZXIgKnBvd2Vy KTsKPj4gKyNlbmRpZiAvKiBfRFBfUE9XRVJfSF8gKi8KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZHAvZHBfcmVnLmggCj4+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9y ZWcuaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi43N2I1YzBlCj4+ IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9yZWcuaAo+ PiBAQCAtMCwwICsxLDM1NyBAQAo+PiArLyoKPj4gKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE4 LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyAKPj4gcmVzZXJ2ZWQuCj4+ICsgKgo+ PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciAKPj4gbW9kaWZ5Cj4+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKPj4gKyAqIG9ubHkgdmVyc2lv biAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+PiArICoK Pj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAo+PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPj4gKyAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ICsgKgo+PiArICovCj4+ICsKPj4g KyNpZm5kZWYgX0RQX1JFR19IXwo+PiArI2RlZmluZSBfRFBfUkVHX0hfCj4+ICsKPj4gKy8qIERQ X1RYIFJlZ2lzdGVycyAqLwo+PiArI2RlZmluZSBEUF9IV19WRVJTSU9OCQkJCSgweDAwMDAwMDAw KQo+PiArI2RlZmluZSBEUF9TV19SRVNFVAkJCQkoMHgwMDAwMDAxMCkKPj4gKyNkZWZpbmUgRFBf UEhZX0NUUkwJCQkJKDB4MDAwMDAwMTQpCj4+ICsjZGVmaW5lIERQX0NMS19DVFJMCQkJCSgweDAw MDAwMDE4KQo+PiArI2RlZmluZSBEUF9DTEtfQUNUSVZFCQkJCSgweDAwMDAwMDFDKQo+PiArI2Rl ZmluZSBEUF9JTlRSX1NUQVRVUwkJCQkoMHgwMDAwMDAyMCkKPj4gKyNkZWZpbmUgRFBfSU5UUl9T VEFUVVMyCQkJCSgweDAwMDAwMDI0KQo+PiArI2RlZmluZSBEUF9JTlRSX1NUQVRVUzMJCQkJKDB4 MDAwMDAwMjgpCj4+ICsKPj4gKyNkZWZpbmUgRFBfRFBfSFBEX0NUUkwJCQkJKDB4MDAwMDAwMDAp Cj4+ICsjZGVmaW5lIERQX0RQX0hQRF9JTlRfU1RBVFVTCQkJKDB4MDAwMDAwMDQpCj4+ICsjZGVm aW5lIERQX0RQX0hQRF9JTlRfQUNLCQkJKDB4MDAwMDAwMDgpCj4+ICsjZGVmaW5lIERQX0RQX0hQ RF9JTlRfTUFTSwkJCSgweDAwMDAwMDBDKQo+PiArI2RlZmluZSBEUF9EUF9IUERfUkVGVElNRVIJ CQkoMHgwMDAwMDAxOCkKPj4gKyNkZWZpbmUgRFBfRFBfSFBEX0VWRU5UX1RJTUVfMAkJCSgweDAw MDAwMDFDKQo+PiArI2RlZmluZSBEUF9EUF9IUERfRVZFTlRfVElNRV8xCQkJKDB4MDAwMDAwMjAp Cj4+ICsjZGVmaW5lIERQX0FVWF9DVFJMCQkJCSgweDAwMDAwMDMwKQo+PiArI2RlZmluZSBEUF9B VVhfREFUQQkJCQkoMHgwMDAwMDAzNCkKPj4gKyNkZWZpbmUgRFBfQVVYX1RSQU5TX0NUUkwJCQko MHgwMDAwMDAzOCkKPj4gKyNkZWZpbmUgRFBfVElNRU9VVF9DT1VOVAkJCSgweDAwMDAwMDNDKQo+ PiArI2RlZmluZSBEUF9BVVhfTElNSVRTCQkJCSgweDAwMDAwMDQwKQo+PiArI2RlZmluZSBEUF9B VVhfU1RBVFVTCQkJCSgweDAwMDAwMDQ0KQo+PiArCj4+ICsjZGVmaW5lIERQX0RQQ0RfQ1BfSVJR CQkJCSgweDIwMSkKPj4gKyNkZWZpbmUgRFBfRFBDRF9SWFNUQVRVUwkJCSgweDY5NDkzKQo+PiAr Cj4+ICsjZGVmaW5lIERQX0lOVEVSUlVQVF9UUkFOU19OVU0JCQkoMHgwMDAwMDBBMCkKPj4gKwo+ PiArI2RlZmluZSBEUF9NQUlOTElOS19DVFJMCQkJKDB4MDAwMDAwMDApCj4+ICsjZGVmaW5lIERQ X1NUQVRFX0NUUkwJCQkJKDB4MDAwMDAwMDQpCj4+ICsjZGVmaW5lIERQX0NPTkZJR1VSQVRJT05f Q1RSTAkJCSgweDAwMDAwMDA4KQo+PiArI2RlZmluZSBEUF9TT0ZUV0FSRV9NVklECQkJKDB4MDAw MDAwMTApCj4+ICsjZGVmaW5lIERQX1NPRlRXQVJFX05WSUQJCQkoMHgwMDAwMDAxOCkKPj4gKyNk ZWZpbmUgRFBfVE9UQUxfSE9SX1ZFUgkJCSgweDAwMDAwMDFDKQo+PiArI2RlZmluZSBEUF9TVEFS VF9IT1JfVkVSX0ZST01fU1lOQwkJKDB4MDAwMDAwMjApCj4+ICsjZGVmaW5lIERQX0hTWU5DX1ZT WU5DX1dJRFRIX1BPTEFSSVRZCQkoMHgwMDAwMDAyNCkKPj4gKyNkZWZpbmUgRFBfQUNUSVZFX0hP Ul9WRVIJCQkoMHgwMDAwMDAyOCkKPj4gKyNkZWZpbmUgRFBfTUlTQzFfTUlTQzAJCQkJKDB4MDAw MDAwMkMpCj4+ICsjZGVmaW5lIERQX1ZBTElEX0JPVU5EQVJZCQkJKDB4MDAwMDAwMzApCj4+ICsj ZGVmaW5lIERQX1ZBTElEX0JPVU5EQVJZXzIJCQkoMHgwMDAwMDAzNCkKPj4gKyNkZWZpbmUgRFBf TE9HSUNBTDJQSFlTSUNBTF9MQU5FX01BUFBJTkcJKDB4MDAwMDAwMzgpCj4+ICsKPj4gKyNkZWZp bmUgRFBfTUFJTkxJTktfUkVBRFkJCQkoMHgwMDAwMDA0MCkKPj4gKyNkZWZpbmUgRFBfTUFJTkxJ TktfTEVWRUxTCQkJKDB4MDAwMDAwNDQpCj4+ICsjZGVmaW5lIERQX1RVCQkJCQkoMHgwMDAwMDA0 QykKPj4gKwo+PiArI2RlZmluZSBEUF9IQlIyX0NPTVBMSUFOQ0VfU0NSQU1CTEVSX1JFU0VUCSgw eDAwMDAwMDU0KQo+PiArI2RlZmluZSBEUF9URVNUXzgwQklUX0NVU1RPTV9QQVRURVJOX1JFRzAJ KDB4MDAwMDAwQzApCj4+ICsjZGVmaW5lIERQX1RFU1RfODBCSVRfQ1VTVE9NX1BBVFRFUk5fUkVH MQkoMHgwMDAwMDBDNCkKPj4gKyNkZWZpbmUgRFBfVEVTVF84MEJJVF9DVVNUT01fUEFUVEVSTl9S RUcyCSgweDAwMDAwMEM4KQo+PiArCj4+ICsjZGVmaW5lIE1NU1NfRFBfTUlTQzFfTUlTQzAJCQko MHgwMDAwMDAyQykKPj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19USU1JTkdfR0VOCQkoMHgwMDAw MDA4MCkKPj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19USU1JTkdfUkJSXzMyCQkoMHgwMDAwMDA4 NCkKPj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19USU1JTkdfSEJSXzMyCQkoMHgwMDAwMDA4OCkK Pj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19USU1JTkdfUkJSXzQ0CQkoMHgwMDAwMDA4QykKPj4g KyNkZWZpbmUgTU1TU19EUF9BVURJT19USU1JTkdfSEJSXzQ0CQkoMHgwMDAwMDA5MCkKPj4gKyNk ZWZpbmUgTU1TU19EUF9BVURJT19USU1JTkdfUkJSXzQ4CQkoMHgwMDAwMDA5NCkKPj4gKyNkZWZp bmUgTU1TU19EUF9BVURJT19USU1JTkdfSEJSXzQ4CQkoMHgwMDAwMDA5OCkKPj4gKwo+PiArI2Rl ZmluZSBNTVNTX0RQX1BTUl9DUkNfUkcJCQkoMHgwMDAwMDE1NCkKPj4gKyNkZWZpbmUgTU1TU19E UF9QU1JfQ1JDX0IJCQkoMHgwMDAwMDE1OCkKPj4gKwo+PiArI2RlZmluZSBEUF9DT01QUkVTU0lP Tl9NT0RFX0NUUkwJCSgweDAwMDAwMTgwKQo+PiArCj4+ICsjZGVmaW5lIE1NU1NfRFBfQVVESU9f Q0ZHCQkJKDB4MDAwMDAyMDApCj4+ICsjZGVmaW5lIE1NU1NfRFBfQVVESU9fU1RBVFVTCQkJKDB4 MDAwMDAyMDQpCj4+ICsjZGVmaW5lIE1NU1NfRFBfQVVESU9fUEtUX0NUUkwJCQkoMHgwMDAwMDIw OCkKPj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19QS1RfQ1RSTDIJCQkoMHgwMDAwMDIwQykKPj4g KyNkZWZpbmUgTU1TU19EUF9BVURJT19BQ1JfQ1RSTAkJCSgweDAwMDAwMjEwKQo+PiArI2RlZmlu ZSBNTVNTX0RQX0FVRElPX0NUUkxfUkVTRVQJCSgweDAwMDAwMjE0KQo+PiArCj4+ICsjZGVmaW5l IE1NU1NfRFBfU0RQX0NGRwkJCQkoMHgwMDAwMDIyOCkKPj4gKyNkZWZpbmUgTU1TU19EUF9TRFBf Q0ZHMgkJCSgweDAwMDAwMjJDKQo+PiArI2RlZmluZSBNTVNTX0RQX0FVRElPX1RJTUVTVEFNUF8w CQkoMHgwMDAwMDIzMCkKPj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19USU1FU1RBTVBfMQkJKDB4 MDAwMDAyMzQpCj4+ICsKPj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19TVFJFQU1fMAkJCSgweDAw MDAwMjQwKQo+PiArI2RlZmluZSBNTVNTX0RQX0FVRElPX1NUUkVBTV8xCQkJKDB4MDAwMDAyNDQp Cj4+ICsKPj4gKyNkZWZpbmUgTU1TU19EUF9FWFRFTlNJT05fMAkJCSgweDAwMDAwMjUwKQo+PiAr I2RlZmluZSBNTVNTX0RQX0VYVEVOU0lPTl8xCQkJKDB4MDAwMDAyNTQpCj4+ICsjZGVmaW5lIE1N U1NfRFBfRVhURU5TSU9OXzIJCQkoMHgwMDAwMDI1OCkKPj4gKyNkZWZpbmUgTU1TU19EUF9FWFRF TlNJT05fMwkJCSgweDAwMDAwMjVDKQo+PiArI2RlZmluZSBNTVNTX0RQX0VYVEVOU0lPTl80CQkJ KDB4MDAwMDAyNjApCj4+ICsjZGVmaW5lIE1NU1NfRFBfRVhURU5TSU9OXzUJCQkoMHgwMDAwMDI2 NCkKPj4gKyNkZWZpbmUgTU1TU19EUF9FWFRFTlNJT05fNgkJCSgweDAwMDAwMjY4KQo+PiArI2Rl ZmluZSBNTVNTX0RQX0VYVEVOU0lPTl83CQkJKDB4MDAwMDAyNkMpCj4+ICsjZGVmaW5lIE1NU1Nf RFBfRVhURU5TSU9OXzgJCQkoMHgwMDAwMDI3MCkKPj4gKyNkZWZpbmUgTU1TU19EUF9FWFRFTlNJ T05fOQkJCSgweDAwMDAwMjc0KQo+PiArI2RlZmluZSBNTVNTX0RQX0FVRElPX0NPUFlNQU5BR0VN RU5UXzAJCSgweDAwMDAwMjc4KQo+PiArI2RlZmluZSBNTVNTX0RQX0FVRElPX0NPUFlNQU5BR0VN RU5UXzEJCSgweDAwMDAwMjdDKQo+PiArI2RlZmluZSBNTVNTX0RQX0FVRElPX0NPUFlNQU5BR0VN RU5UXzIJCSgweDAwMDAwMjgwKQo+PiArI2RlZmluZSBNTVNTX0RQX0FVRElPX0NPUFlNQU5BR0VN RU5UXzMJCSgweDAwMDAwMjg0KQo+PiArI2RlZmluZSBNTVNTX0RQX0FVRElPX0NPUFlNQU5BR0VN RU5UXzQJCSgweDAwMDAwMjg4KQo+PiArI2RlZmluZSBNTVNTX0RQX0FVRElPX0NPUFlNQU5BR0VN RU5UXzUJCSgweDAwMDAwMjhDKQo+PiArI2RlZmluZSBNTVNTX0RQX0FVRElPX0lTUkNfMAkJCSgw eDAwMDAwMjkwKQo+PiArI2RlZmluZSBNTVNTX0RQX0FVRElPX0lTUkNfMQkJCSgweDAwMDAwMjk0 KQo+PiArI2RlZmluZSBNTVNTX0RQX0FVRElPX0lTUkNfMgkJCSgweDAwMDAwMjk4KQo+PiArI2Rl ZmluZSBNTVNTX0RQX0FVRElPX0lTUkNfMwkJCSgweDAwMDAwMjlDKQo+PiArI2RlZmluZSBNTVNT X0RQX0FVRElPX0lTUkNfNAkJCSgweDAwMDAwMkEwKQo+PiArI2RlZmluZSBNTVNTX0RQX0FVRElP X0lTUkNfNQkJCSgweDAwMDAwMkE0KQo+PiArI2RlZmluZSBNTVNTX0RQX0FVRElPX0lORk9GUkFN RV8wCQkoMHgwMDAwMDJBOCkKPj4gKyNkZWZpbmUgTU1TU19EUF9BVURJT19JTkZPRlJBTUVfMQkJ KDB4MDAwMDAyQUMpCj4+ICsjZGVmaW5lIE1NU1NfRFBfQVVESU9fSU5GT0ZSQU1FXzIJCSgweDAw MDAwMkIwKQo+PiArCj4+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfMAkJCSgweDAwMDAwMzAw KQo+PiArI2RlZmluZSBNTVNTX0RQX0dFTkVSSUMwXzEJCQkoMHgwMDAwMDMwNCkKPj4gKyNkZWZp bmUgTU1TU19EUF9HRU5FUklDMF8yCQkJKDB4MDAwMDAzMDgpCj4+ICsjZGVmaW5lIE1NU1NfRFBf R0VORVJJQzBfMwkJCSgweDAwMDAwMzBDKQo+PiArI2RlZmluZSBNTVNTX0RQX0dFTkVSSUMwXzQJ CQkoMHgwMDAwMDMxMCkKPj4gKyNkZWZpbmUgTU1TU19EUF9HRU5FUklDMF81CQkJKDB4MDAwMDAz MTQpCj4+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBfNgkJCSgweDAwMDAwMzE4KQo+PiArI2Rl ZmluZSBNTVNTX0RQX0dFTkVSSUMwXzcJCQkoMHgwMDAwMDMxQykKPj4gKyNkZWZpbmUgTU1TU19E UF9HRU5FUklDMF84CQkJKDB4MDAwMDAzMjApCj4+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzBf OQkJCSgweDAwMDAwMzI0KQo+PiArI2RlZmluZSBNTVNTX0RQX0dFTkVSSUMxXzAJCQkoMHgwMDAw MDMyOCkKPj4gKyNkZWZpbmUgTU1TU19EUF9HRU5FUklDMV8xCQkJKDB4MDAwMDAzMkMpCj4+ICsj ZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfMgkJCSgweDAwMDAwMzMwKQo+PiArI2RlZmluZSBNTVNT X0RQX0dFTkVSSUMxXzMJCQkoMHgwMDAwMDMzNCkKPj4gKyNkZWZpbmUgTU1TU19EUF9HRU5FUklD MV80CQkJKDB4MDAwMDAzMzgpCj4+ICsjZGVmaW5lIE1NU1NfRFBfR0VORVJJQzFfNQkJCSgweDAw MDAwMzNDKQo+PiArI2RlZmluZSBNTVNTX0RQX0dFTkVSSUMxXzYJCQkoMHgwMDAwMDM0MCkKPj4g KyNkZWZpbmUgTU1TU19EUF9HRU5FUklDMV83CQkJKDB4MDAwMDAzNDQpCj4+ICsjZGVmaW5lIE1N U1NfRFBfR0VORVJJQzFfOAkJCSgweDAwMDAwMzQ4KQo+PiArI2RlZmluZSBNTVNTX0RQX0dFTkVS SUMxXzkJCQkoMHgwMDAwMDM0QykKPj4gKwo+PiArI2RlZmluZSBNTVNTX0RQX1ZTQ0VYVF8wCQkJ KDB4MDAwMDAyRDApCj4+ICsjZGVmaW5lIE1NU1NfRFBfVlNDRVhUXzEJCQkoMHgwMDAwMDJENCkK Pj4gKyNkZWZpbmUgTU1TU19EUF9WU0NFWFRfMgkJCSgweDAwMDAwMkQ4KQo+PiArI2RlZmluZSBN TVNTX0RQX1ZTQ0VYVF8zCQkJKDB4MDAwMDAyREMpCj4+ICsjZGVmaW5lIE1NU1NfRFBfVlNDRVhU XzQJCQkoMHgwMDAwMDJFMCkKPj4gKyNkZWZpbmUgTU1TU19EUF9WU0NFWFRfNQkJCSgweDAwMDAw MkU0KQo+PiArI2RlZmluZSBNTVNTX0RQX1ZTQ0VYVF82CQkJKDB4MDAwMDAyRTgpCj4+ICsjZGVm aW5lIE1NU1NfRFBfVlNDRVhUXzcJCQkoMHgwMDAwMDJFQykKPj4gKyNkZWZpbmUgTU1TU19EUF9W U0NFWFRfOAkJCSgweDAwMDAwMkYwKQo+PiArI2RlZmluZSBNTVNTX0RQX1ZTQ0VYVF85CQkJKDB4 MDAwMDAyRjQpCj4+ICsKPj4gKyNkZWZpbmUgTU1TU19EUF9CSVNUX0VOQUJMRQkJCSgweDAwMDAw MDAwKQo+PiArI2RlZmluZSBNTVNTX0RQX1RJTUlOR19FTkdJTkVfRU4JCSgweDAwMDAwMDEwKQo+ PiArI2RlZmluZSBNTVNTX0RQX0lOVEZfQ09ORklHCQkJKDB4MDAwMDAwMTQpCj4+ICsjZGVmaW5l IE1NU1NfRFBfSU5URl9IU1lOQ19DVEwJCQkoMHgwMDAwMDAxOCkKPj4gKyNkZWZpbmUgTU1TU19E UF9JTlRGX1ZTWU5DX1BFUklPRF9GMAkJKDB4MDAwMDAwMUMpCj4+ICsjZGVmaW5lIE1NU1NfRFBf SU5URl9WU1lOQ19QRVJJT0RfRjEJCSgweDAwMDAwMDIwKQo+PiArI2RlZmluZSBNTVNTX0RQX0lO VEZfVlNZTkNfUFVMU0VfV0lEVEhfRjAJKDB4MDAwMDAwMjQpCj4+ICsjZGVmaW5lIE1NU1NfRFBf SU5URl9WU1lOQ19QVUxTRV9XSURUSF9GMQkoMHgwMDAwMDAyOCkKPj4gKyNkZWZpbmUgTU1TU19J TlRGX0RJU1BMQVlfVl9TVEFSVF9GMAkJKDB4MDAwMDAwMkMpCj4+ICsjZGVmaW5lIE1NU1NfSU5U Rl9ESVNQTEFZX1ZfU1RBUlRfRjEJCSgweDAwMDAwMDMwKQo+PiArI2RlZmluZSBNTVNTX0RQX0lO VEZfRElTUExBWV9WX0VORF9GMAkJKDB4MDAwMDAwMzQpCj4+ICsjZGVmaW5lIE1NU1NfRFBfSU5U Rl9ESVNQTEFZX1ZfRU5EX0YxCQkoMHgwMDAwMDAzOCkKPj4gKyNkZWZpbmUgTU1TU19EUF9JTlRG X0FDVElWRV9WX1NUQVJUX0YwCQkoMHgwMDAwMDAzQykKPj4gKyNkZWZpbmUgTU1TU19EUF9JTlRG X0FDVElWRV9WX1NUQVJUX0YxCQkoMHgwMDAwMDA0MCkKPj4gKyNkZWZpbmUgTU1TU19EUF9JTlRG X0FDVElWRV9WX0VORF9GMAkJKDB4MDAwMDAwNDQpCj4+ICsjZGVmaW5lIE1NU1NfRFBfSU5URl9B Q1RJVkVfVl9FTkRfRjEJCSgweDAwMDAwMDQ4KQo+PiArI2RlZmluZSBNTVNTX0RQX0lOVEZfRElT UExBWV9IQ1RMCQkoMHgwMDAwMDA0QykKPj4gKyNkZWZpbmUgTU1TU19EUF9JTlRGX0FDVElWRV9I Q1RMCQkoMHgwMDAwMDA1MCkKPj4gKyNkZWZpbmUgTU1TU19EUF9JTlRGX1BPTEFSSVRZX0NUTAkJ KDB4MDAwMDAwNTgpCj4+ICsjZGVmaW5lIE1NU1NfRFBfVFBHX01BSU5fQ09OVFJPTAkJKDB4MDAw MDAwNjApCj4+ICsjZGVmaW5lIE1NU1NfRFBfVFBHX1ZJREVPX0NPTkZJRwkJKDB4MDAwMDAwNjQp Cj4+ICsjZGVmaW5lIE1NU1NfRFBfQVNZTkNfRklGT19DT05GSUcJCSgweDAwMDAwMDg4KQo+PiAr Cj4+ICsvKkRQIFBIWSBSZWdpc3RlciBvZmZzZXRzICovCj4+ICsjZGVmaW5lIERQX1BIWV9SRVZJ U0lPTl9JRDAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKPj4gKyNkZWZpbmUgRFBf UEhZX1JFVklTSU9OX0lEMSAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDA0KQo+PiArI2Rl ZmluZSBEUF9QSFlfUkVWSVNJT05fSUQyICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDgp Cj4+ICsjZGVmaW5lIERQX1BIWV9SRVZJU0lPTl9JRDMgICAgICAgICAgICAgICAgICAgICAoMHgw MDAwMDAwQykKPj4gKwo+PiArI2RlZmluZSBEUF9QSFlfQ0ZHICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKDB4MDAwMDAwMTApCj4+ICsjZGVmaW5lIERQX1BIWV9QRF9DVEwgICAgICAgICAg ICAgICAgICAgICAgICAgICAoMHgwMDAwMDAxOCkKPj4gKyNkZWZpbmUgRFBfUEhZX01PREUgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDFDKQo+PiArCj4+ICsjZGVmaW5lIERQ X1BIWV9BVVhfQ0ZHMCAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAyMCkKPj4gKyNk ZWZpbmUgRFBfUEhZX0FVWF9DRkcxICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDI0 KQo+PiArI2RlZmluZSBEUF9QSFlfQVVYX0NGRzIgICAgICAgICAgICAgICAgICAgICAgICAgKDB4 MDAwMDAwMjgpCj4+ICsjZGVmaW5lIERQX1BIWV9BVVhfQ0ZHMyAgICAgICAgICAgICAgICAgICAg ICAgICAoMHgwMDAwMDAyQykKPj4gKyNkZWZpbmUgRFBfUEhZX0FVWF9DRkc0ICAgICAgICAgICAg ICAgICAgICAgICAgICgweDAwMDAwMDMwKQo+PiArI2RlZmluZSBEUF9QSFlfQVVYX0NGRzUgICAg ICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMzQpCj4+ICsjZGVmaW5lIERQX1BIWV9BVVhf Q0ZHNiAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAzOCkKPj4gKyNkZWZpbmUgRFBf UEhZX0FVWF9DRkc3ICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDNDKQo+PiArI2Rl ZmluZSBEUF9QSFlfQVVYX0NGRzggICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwNDAp Cj4+ICsjZGVmaW5lIERQX1BIWV9BVVhfQ0ZHOSAgICAgICAgICAgICAgICAgICAgICAgICAoMHgw MDAwMDA0NCkKPj4gKyNkZWZpbmUgRFBfUEhZX0FVWF9JTlRFUlJVUFRfTUFTSyAgICAgICAgICAg ICAgICgweDAwMDAwMDQ4KQo+PiArI2RlZmluZSBEUF9QSFlfQVVYX0lOVEVSUlVQVF9DTEVBUiAg ICAgICAgICAgICAgKDB4MDAwMDAwNEMpCj4+ICsjZGVmaW5lIERQX1BIWV9BVVhfQklTVF9DRkcJ CQkoMHgwMDAwMDA1MCkKPj4gKwo+PiArI2RlZmluZSBEUF9QSFlfVkNPX0RJVgkJCQkweDAwNjQK Pj4gKyNkZWZpbmUgRFBfUEhZX1RYMF9UWDFfTEFORV9DVEwJCQkweDAwNkMKPj4gKyNkZWZpbmUg RFBfUEhZX1RYMl9UWDNfTEFORV9DVEwJCQkweDAwODgKPj4gKwo+PiArI2RlZmluZSBEUF9QSFlf U1BBUkUwCQkJCSgweDAwQUMpCj4+ICsjZGVmaW5lIERQX1BIWV9TVEFUVVMJCQkJKDB4MDBDMCkK Pj4gKwo+PiArLyogVHggcmVnaXN0ZXJzICovCj4+ICsjZGVmaW5lIFRYbl9CSVNUX01PREVfTEFO RU5PCQkJMHgwMDAwCj4+ICsjZGVmaW5lIFRYbl9DTEtCVUZfRU5BQkxFCQkJMHgwMDA4Cj4+ICsj ZGVmaW5lIFRYbl9UWF9FTVBfUE9TVDFfTFZMCQkJMHgwMDBDCj4+ICsKPj4gKyNkZWZpbmUgVFhu X1RYX0RSVl9MVkwJCQkJMHgwMDFDCj4+ICsKPj4gKyNkZWZpbmUgVFhuX1JFU0VUX1RTWU5DX0VO CQkJMHgwMDI0Cj4+ICsjZGVmaW5lIFRYbl9QUkVfU1RBTExfTERPX0JPT1NUX0VOCQkweDAwMjgK Pj4gKyNkZWZpbmUgVFhuX1RYX0JBTkQJCQkJMHgwMDJDCj4+ICsjZGVmaW5lIFRYbl9TTEVXX0NO VEwJCQkJMHgwMDMwCj4+ICsjZGVmaW5lIFRYbl9JTlRFUkZBQ0VfU0VMRUNUCQkJMHgwMDM0Cj4+ ICsKPj4gKyNkZWZpbmUgVFhuX1JFU19DT0RFX0xBTkVfVFgJCQkweDAwM0MKPj4gKyNkZWZpbmUg VFhuX1JFU19DT0RFX0xBTkVfUlgJCQkweDAwNDAKPj4gKyNkZWZpbmUgVFhuX1JFU19DT0RFX0xB TkVfT0ZGU0VUX1RYCQkweDAwNDQKPj4gKyNkZWZpbmUgVFhuX1JFU19DT0RFX0xBTkVfT0ZGU0VU X1JYCQkweDAwNDgKPj4gKwo+PiArI2RlZmluZSBUWG5fREVCVUdfQlVTX1NFTAkJCTB4MDA1OAo+ PiArI2RlZmluZSBUWG5fVFJBTlNDRUlWRVJfQklBU19FTgkJCTB4MDA1Qwo+PiArI2RlZmluZSBU WG5fSElHSFpfRFJWUl9FTgkJCTB4MDA2MAo+PiArI2RlZmluZSBUWG5fVFhfUE9MX0lOVgkJCQkw eDAwNjQKPj4gKyNkZWZpbmUgVFhuX1BBUlJBVEVfUkVDX0RFVEVDVF9JRExFX0VOCQkweDAwNjgK Pj4gKwo+PiArI2RlZmluZSBUWG5fTEFORV9NT0RFXzEJCQkJMHgwMDhDCj4+ICsKPj4gKyNkZWZp bmUgVFhuX1RSQU5fRFJWUl9FTVBfRU4JCQkweDAwQzAKPj4gKyNkZWZpbmUgVFhuX1RYX0lOVEVS RkFDRV9NT0RFCQkJMHgwMEM0Cj4+ICsKPj4gKyNkZWZpbmUgVFhuX1ZNT0RFX0NUUkwxCQkJCTB4 MDBGMAo+PiArCj4+ICsvKiBQTEwgcmVnaXN0ZXIgb2Zmc2V0ICovCj4+ICsjZGVmaW5lIFFTRVJE RVNfQ09NX0FUQl9TRUwxCQkJMHgwMDAwCj4+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0FUQl9TRUwy CQkJMHgwMDA0Cj4+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0ZSRVFfVVBEQVRFCQkJMHgwMDA4Cj4+ ICsjZGVmaW5lIFFTRVJERVNfQ09NX0JHX1RJTUVSCQkJMHgwMDBDCj4+ICsjZGVmaW5lIFFTRVJE RVNfQ09NX1NTQ19FTl9DRU5URVIJCTB4MDAxMAo+PiArI2RlZmluZSBRU0VSREVTX0NPTV9TU0Nf QURKX1BFUjEJCTB4MDAxNAo+PiArI2RlZmluZSBRU0VSREVTX0NPTV9TU0NfQURKX1BFUjIJCTB4 MDAxOAo+PiArI2RlZmluZSBRU0VSREVTX0NPTV9TU0NfUEVSMQkJCTB4MDAxQwo+PiArI2RlZmlu ZSBRU0VSREVTX0NPTV9TU0NfUEVSMgkJCTB4MDAyMAo+PiArI2RlZmluZSBRU0VSREVTX0NPTV9T U0NfU1RFUF9TSVpFMQkJMHgwMDI0Cj4+ICsjZGVmaW5lIFFTRVJERVNfQ09NX1NTQ19TVEVQX1NJ WkUyCQkweDAwMjgKPj4gKyNkZWZpbmUgUVNFUkRFU19DT01fUE9TVF9ESVYJCQkweDAwMkMKPj4g KyNkZWZpbmUgUVNFUkRFU19DT01fUE9TVF9ESVZfTVVYCQkweDAwMzAKPj4gKyNkZWZpbmUgUVNF UkRFU19DT01fQklBU19FTl9DTEtCVUZMUl9FTgkJMHgwMDM0Cj4+ICsjZGVmaW5lIFFTRVJERVNf Q09NX0NMS19FTkFCTEUxCQkJMHgwMDM4Cj4+ICsjZGVmaW5lIFFTRVJERVNfQ09NX1NZU19DTEtf Q1RSTAkJMHgwMDNDCj4+ICsjZGVmaW5lIFFTRVJERVNfQ09NX1NZU0NMS19CVUZfRU5BQkxFCQkw eDAwNDAKPj4gKyNkZWZpbmUgUVNFUkRFU19DT01fUExMX0VOCQkJMHgwMDQ0Cj4+ICsjZGVmaW5l IFFTRVJERVNfQ09NX1BMTF9JVkNPCQkJMHgwMDQ4Cj4+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0NN Tl9JRVRSSU0JCQkweDAwNEMKPj4gKyNkZWZpbmUgUVNFUkRFU19DT01fQ01OX0lQVFJJTQkJCTB4 MDA1MAo+PiArCj4+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0NQX0NUUkxfTU9ERTAJCTB4MDA2MAo+ PiArI2RlZmluZSBRU0VSREVTX0NPTV9DUF9DVFJMX01PREUxCQkweDAwNjQKPj4gKyNkZWZpbmUg UVNFUkRFU19DT01fUExMX1JDVFJMX01PREUwCQkweDAwNjgKPj4gKyNkZWZpbmUgUVNFUkRFU19D T01fUExMX1JDVFJMX01PREUxCQkweDAwNkMKPj4gKyNkZWZpbmUgUVNFUkRFU19DT01fUExMX0ND VFJMX01PREUwCQkweDAwNzAKPj4gKyNkZWZpbmUgUVNFUkRFU19DT01fUExMX0NDVFJMX01PREUx CQkweDAwNzQKPj4gKyNkZWZpbmUgUVNFUkRFU19DT01fUExMX0NOVFJMCQkJMHgwMDc4Cj4+ICsj ZGVmaW5lIFFTRVJERVNfQ09NX0JJQVNfRU5fQ1RSTF9CWV9QU00JCTB4MDA3Qwo+PiArI2RlZmlu ZSBRU0VSREVTX0NPTV9TWVNDTEtfRU5fU0VMCQkweDAwODAKPj4gKyNkZWZpbmUgUVNFUkRFU19D T01fQ01MX1NZU0NMS19TRUwJCTB4MDA4NAo+PiArI2RlZmluZSBRU0VSREVTX0NPTV9SRVNFVFNN X0NOVFJMCQkweDAwODgKPj4gKyNkZWZpbmUgUVNFUkRFU19DT01fUkVTRVRTTV9DTlRSTDIJCTB4 MDA4Qwo+PiArI2RlZmluZSBRU0VSREVTX0NPTV9MT0NLX0NNUF9FTgkJCTB4MDA5MAo+PiArI2Rl ZmluZSBRU0VSREVTX0NPTV9MT0NLX0NNUF9DRkcJCTB4MDA5NAo+PiArI2RlZmluZSBRU0VSREVT X0NPTV9MT0NLX0NNUDFfTU9ERTAJCTB4MDA5OAo+PiArI2RlZmluZSBRU0VSREVTX0NPTV9MT0NL X0NNUDJfTU9ERTAJCTB4MDA5Qwo+PiArI2RlZmluZSBRU0VSREVTX0NPTV9MT0NLX0NNUDNfTU9E RTAJCTB4MDBBMAo+PiArCj4+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0RFQ19TVEFSVF9NT0RFMAkJ MHgwMEIwCj4+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0RFQ19TVEFSVF9NT0RFMQkJMHgwMEI0Cj4+ ICsjZGVmaW5lIFFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUMV9NT0RFMAkweDAwQjgKPj4gKyNk ZWZpbmUgUVNFUkRFU19DT01fRElWX0ZSQUNfU1RBUlQyX01PREUwCTB4MDBCQwo+PiArI2RlZmlu ZSBRU0VSREVTX0NPTV9ESVZfRlJBQ19TVEFSVDNfTU9ERTAJMHgwMEMwCj4+ICsjZGVmaW5lIFFT RVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUMV9NT0RFMQkweDAwQzQKPj4gKyNkZWZpbmUgUVNFUkRF U19DT01fRElWX0ZSQUNfU1RBUlQyX01PREUxCTB4MDBDOAo+PiArI2RlZmluZSBRU0VSREVTX0NP TV9ESVZfRlJBQ19TVEFSVDNfTU9ERTEJMHgwMENDCj4+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0lO VEVHTE9PUF9JTklUVkFMCQkweDAwRDAKPj4gKyNkZWZpbmUgUVNFUkRFU19DT01fSU5URUdMT09Q X0VOCQkweDAwRDQKPj4gKyNkZWZpbmUgUVNFUkRFU19DT01fSU5URUdMT09QX0dBSU4wX01PREUw CTB4MDBEOAo+PiArI2RlZmluZSBRU0VSREVTX0NPTV9JTlRFR0xPT1BfR0FJTjFfTU9ERTAJMHgw MERDCj4+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0lOVEVHTE9PUF9HQUlOMF9NT0RFMQkweDAwRTAK Pj4gKyNkZWZpbmUgUVNFUkRFU19DT01fSU5URUdMT09QX0dBSU4xX01PREUxCTB4MDBFNAo+PiAr I2RlZmluZSBRU0VSREVTX0NPTV9WQ09DQUxfREVBRE1BTl9DVFJMCQkweDAwRTgKPj4gKyNkZWZp bmUgUVNFUkRFU19DT01fVkNPX1RVTkVfQ1RSTAkJMHgwMEVDCj4+ICsjZGVmaW5lIFFTRVJERVNf Q09NX1ZDT19UVU5FX01BUAkJMHgwMEYwCj4+ICsKPj4gKyNkZWZpbmUgUVNFUkRFU19DT01fQ01O X1NUQVRVUwkJCTB4MDEyNAo+PiArI2RlZmluZSBRU0VSREVTX0NPTV9SRVNFVF9TTV9TVEFUVVMJ CTB4MDEyOAo+PiArCj4+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0NMS19TRUwJCQkweDAxMzgKPj4g KyNkZWZpbmUgUVNFUkRFU19DT01fSFNDTEtfU0VMCQkJMHgwMTNDCj4+ICsKPj4gKyNkZWZpbmUg UVNFUkRFU19DT01fQ09SRUNMS19ESVZfTU9ERTAJCTB4MDE0OAo+PiArCj4+ICsjZGVmaW5lIFFT RVJERVNfQ09NX1NXX1JFU0VUCQkJMHgwMTUwCj4+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0NPUkVf Q0xLX0VOCQkJMHgwMTU0Cj4+ICsjZGVmaW5lIFFTRVJERVNfQ09NX0NfUkVBRFlfU1RBVFVTCQkw eDAxNTgKPj4gKyNkZWZpbmUgUVNFUkRFU19DT01fQ01OX0NPTkZJRwkJCTB4MDE1Qwo+PiArCj4+ ICsjZGVmaW5lIFFTRVJERVNfQ09NX1NWU19NT0RFX0NMS19TRUwJCTB4MDE2NAo+PiArCj4+ICsv KiBEUCBNTVNTX0NDIHJlZ2lzdGVycyAqLwo+PiArI2RlZmluZSBNTVNTX0RQX0xJTktfQ01EX1JD R1IJCQkoMHgwMTM4KQo+PiArI2RlZmluZSBNTVNTX0RQX0xJTktfQ0ZHX1JDR1IJCQkoMHgwMTND KQo+PiArI2RlZmluZSBNTVNTX0RQX1BJWEVMX00JCQkJKDB4MDE3NCkKPj4gKyNkZWZpbmUgTU1T U19EUF9QSVhFTF9OCQkJCSgweDAxNzgpCj4+ICsKPj4gKy8qIERQIEhEQ1AgMS4zIHJlZ2lzdGVy cyAqLwo+PiArI2RlZmluZSBEUF9IRENQX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgweDBBMCkKPj4gKyNkZWZpbmUgRFBfSERDUF9TVEFUVVMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoMHgwQTQpCj4+ICsjZGVmaW5lIERQX0hEQ1BfU1dfVVBQRVJfQUtT ViAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDk4KQo+PiArI2RlZmluZSBEUF9IRENQX1NX X0xPV0VSX0FLU1YgICAgICAgICAgICAgICAgICAgICAgICAgICgweDA5QykKPj4gKyNkZWZpbmUg RFBfSERDUF9FTlRST1BZX0NUUkwwICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgzNTApCj4+ ICsjZGVmaW5lIERQX0hEQ1BfRU5UUk9QWV9DVFJMMSAgICAgICAgICAgICAgICAgICAgICAgICAg KDB4MzVDKQo+PiArI2RlZmluZSBEUF9IRENQX1NIQV9TVEFUVVMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgweDBDOCkKPj4gKyNkZWZpbmUgRFBfSERDUF9SQ1ZQT1JUX0RBVEEyXzAgICAg ICAgICAgICAgICAgICAgICAgICAoMHgwQjApCj4+ICsjZGVmaW5lIERQX0hEQ1BfUkNWUE9SVF9E QVRBMyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEE0KQo+PiArI2RlZmluZSBEUF9IRENQ X1JDVlBPUlRfREFUQTQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDBBOCkKPj4gKyNkZWZp bmUgRFBfSERDUF9SQ1ZQT1JUX0RBVEE1ICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwQzAp Cj4+ICsjZGVmaW5lIERQX0hEQ1BfUkNWUE9SVF9EQVRBNiAgICAgICAgICAgICAgICAgICAgICAg ICAgKDB4MEM0KQo+PiArCj4+ICsjZGVmaW5lIEhEQ1BfU0VDX0RQX1RaX0hWX0hMT1NfSERDUF9T SEFfQ1RSTCAgICAgICAgICAgKDB4MDI0KQo+PiArI2RlZmluZSBIRENQX1NFQ19EUF9UWl9IVl9I TE9TX0hEQ1BfU0hBX0RBVEEgICAgICAgICAgICgweDAyOCkKPj4gKyNkZWZpbmUgSERDUF9TRUNf RFBfVFpfSFZfSExPU19IRENQX1JDVlBPUlRfREFUQTAgICAgICAoMHgwMDQpCj4+ICsjZGVmaW5l IEhEQ1BfU0VDX0RQX1RaX0hWX0hMT1NfSERDUF9SQ1ZQT1JUX0RBVEExICAgICAgKDB4MDA4KQo+ PiArI2RlZmluZSBIRENQX1NFQ19EUF9UWl9IVl9ITE9TX0hEQ1BfUkNWUE9SVF9EQVRBNyAgICAg ICgweDAwQykKPj4gKyNkZWZpbmUgSERDUF9TRUNfRFBfVFpfSFZfSExPU19IRENQX1JDVlBPUlRf REFUQTggICAgICAoMHgwMTApCj4+ICsjZGVmaW5lIEhEQ1BfU0VDX0RQX1RaX0hWX0hMT1NfSERD UF9SQ1ZQT1JUX0RBVEE5ICAgICAgKDB4MDE0KQo+PiArI2RlZmluZSBIRENQX1NFQ19EUF9UWl9I Vl9ITE9TX0hEQ1BfUkNWUE9SVF9EQVRBMTAgICAgICgweDAxOCkKPj4gKyNkZWZpbmUgSERDUF9T RUNfRFBfVFpfSFZfSExPU19IRENQX1JDVlBPUlRfREFUQTExICAgICAoMHgwMUMpCj4+ICsjZGVm aW5lIEhEQ1BfU0VDX0RQX1RaX0hWX0hMT1NfSERDUF9SQ1ZQT1JUX0RBVEExMiAgICAgKDB4MDIw KQo+PiArCj4+ICsvKiBVU0IzIERQIENPTSByZWdpc3RlcnMgKi8KPj4gKyNkZWZpbmUgVVNCM19E UF9DT01fUkVTRVRfT1ZSRF9DVFJMICgweDFDKQo+PiArI2RlZmluZSBVU0IzX0RQX0NPTV9QSFlf TU9ERV9DVFJMICAgKDB4MDApCj4+ICsjZGVmaW5lIFVTQjNfRFBfQ09NX1NXX1JFU0VUICAgICAg ICAoMHgwNCkKPj4gKyNkZWZpbmUgVVNCM19EUF9DT01fVFlQRUNfQ1RSTCAgICAgICgweDEwKQo+ PiArI2RlZmluZSBVU0IzX0RQX0NPTV9TV0lfQ1RSTCAgICAgICAgKDB4MGMpCj4+ICsjZGVmaW5l IFVTQjNfRFBfQ09NX1BPV0VSX0RPV05fQ1RSTCAoMHgwOCkKPj4gKwo+PiArCj4+ICsKPj4gKyNl bmRpZiAvKiBfRFBfUkVHX0hfICovCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L21zbV9kcnYuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYwo+PiBpbmRleCBm NWNkN2Y2Li5iZTgwMWJlIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9k cnYuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYwo+PiBAQCAtMTM2Nyw2 ICsxMzY3LDcgQEAgc3RhdGljIGludCBfX2luaXQgbXNtX2RybV9yZWdpc3Rlcih2b2lkKQo+PiAg CW1zbV9kc2lfcmVnaXN0ZXIoKTsKPj4gIAltc21fZWRwX3JlZ2lzdGVyKCk7Cj4+ICAJbXNtX2hk bWlfcmVnaXN0ZXIoKTsKPj4gKwltc21fZHBfcmVnaXN0ZXIoKTsKPj4gIAlhZHJlbm9fcmVnaXN0 ZXIoKTsKPj4gIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtc21fcGxhdGZvcm1f ZHJpdmVyKTsKPj4gIH0KPj4gQEAgLTEzNzUsNiArMTM3Niw3IEBAIHN0YXRpYyB2b2lkIF9fZXhp dCBtc21fZHJtX3VucmVnaXN0ZXIodm9pZCkKPj4gIHsKPj4gIAlEQkcoImZpbmkiKTsKPj4gIAlw bGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXNtX3BsYXRmb3JtX2RyaXZlcik7Cj4+ICsJbXNt X2RwX3VucmVnaXN0ZXIoKTsKPj4gIAltc21faGRtaV91bnJlZ2lzdGVyKCk7Cj4+ICAJYWRyZW5v X3VucmVnaXN0ZXIoKTsKPj4gIAltc21fZWRwX3VucmVnaXN0ZXIoKTsKPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9tc20v bXNtX2Rydi5oCj4+IGluZGV4IDlkMTFmMzIuLmZiMWU2ZjQgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNt X2Rydi5oCj4+IEBAIC0xNzYsNiArMTc2LDcgQEAgc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSB7Cj4+ ICAJLyogRFNJIGlzIHNoYXJlZCBieSBtZHA0IGFuZCBtZHA1ICovCj4+ICAJc3RydWN0IG1zbV9k c2kgKmRzaVsyXTsKPj4gCj4+ICsJc3RydWN0IG1zbV9kcCAqZHA7Cj4gCj4gQ2FuIHlvdSBwbGVh c2UgYWRkIGFuIGV4dHJhIGxpbmUgaGVyZT8KPiAKPj4gIAkvKiB3aGVuIHdlIGhhdmUgbW9yZSB0 aGFuIG9uZSAnbXNtX2dwdScgdGhlc2UgbmVlZCB0byBiZSBhbiBhcnJheTogCj4+ICovCj4+ICAJ c3RydWN0IG1zbV9ncHUgKmdwdTsKPj4gIAlzdHJ1Y3QgbXNtX2ZpbGVfcHJpdmF0ZSAqbGFzdGN0 eDsKPj4gQEAgLTM2NCw2ICszNjUsMjcgQEAgc3RhdGljIGlubGluZSBpbnQgbXNtX2RzaV9tb2Rl c2V0X2luaXQoc3RydWN0IAo+PiBtc21fZHNpICptc21fZHNpLAo+PiAgfQo+PiAgI2VuZGlmCj4+ IAo+PiArI2lmZGVmIENPTkZJR19EUk1fTVNNX0RQCj4+ICtpbnQgX19pbml0IG1zbV9kcF9yZWdp c3Rlcih2b2lkKTsKPj4gK3ZvaWQgX19leGl0IG1zbV9kcF91bnJlZ2lzdGVyKHZvaWQpOwo+PiAr aW50IG1zbV9kcF9tb2Rlc2V0X2luaXQoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSwgc3RydWN0 IGRybV9kZXZpY2UgCj4+ICpkZXYsCj4+ICsJCQkgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy KTsKPj4gKyNlbHNlCj4+ICtzdGF0aWMgaW5saW5lIGludCBfX2luaXQgbXNtX2RwX3JlZ2lzdGVy KHZvaWQpCj4+ICt7Cj4+ICsJcmV0dXJuIC1FSU5WQUw7Cj4+ICt9Cj4+ICtzdGF0aWMgaW5saW5l IHZvaWQgX19leGl0IG1zbV9kcF91bnJlZ2lzdGVyKHZvaWQpCj4+ICt7Cj4+ICt9Cj4+ICtzdGF0 aWMgaW5saW5lIGludCBtc21fZHBfbW9kZXNldF9pbml0KHN0cnVjdCBtc21fZHAgKmRwX2Rpc3Bs YXksCj4+ICsJCQkJICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+ICsJCQkJICAgICAg IHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPj4gK3sKPj4gKwlyZXR1cm4gLUVJTlZBTDsK Pj4gK30KPj4gKyNlbmRpZgo+PiArCj4+ICB2b2lkIF9faW5pdCBtc21fbWRwX3JlZ2lzdGVyKHZv aWQpOwo+PiAgdm9pZCBfX2V4aXQgbXNtX21kcF91bnJlZ2lzdGVyKHZvaWQpOwo+PiAgdm9pZCBf X2luaXQgbXNtX2RwdV9yZWdpc3Rlcih2b2lkKTsKPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJt L2RybV9kcF9oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9kcF9oZWxwZXIuaAo+PiBpbmRleCAy YTM4NDNmLi5iMDgxNmY1IDEwMDY0NAo+PiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fZHBfaGVscGVy LmgKPj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2RwX2hlbHBlci5oCj4gCj4gU3BsaXQgdGhlc2Ug Y2hhbmdlcyBvdXQgaW50byBhIHNlcGFyYXRlIHBhdGNoLCBwbGVhc2UKPiAKPj4gQEAgLTU1MSw2 ICs1NTEsOCBAQAo+PiAgIyBkZWZpbmUgRFBfVEVTVF9MSU5LX0VESURfUkVBRAkJICAgICgxIDw8 IDIpCj4+ICAjIGRlZmluZSBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTgkgICAgKDEgPDwg MykgLyogRFBDRCA+PSAxLjEgKi8KPj4gICMgZGVmaW5lIERQX1RFU1RfTElOS19GQVVYX1BBVFRF Uk4JICAgICgxIDw8IDQpIC8qIERQQ0QgPj0gMS4yICovCj4+ICsjIGRlZmluZSBEUF9URVNUX0xJ TktfQVVESU9fUEFUVEVSTiAgICAgKDEgPDwgNSkKPj4gKyMgZGVmaW5lIERQX1RFU1RfTElOS19B VURJT19ESVNBQkxFRF9WSURFTyAoMSA8PCA2KQo+IAo+IEFkZCBEUENEIHZlcnNpb24gaW4gY29t bWVudHMgZm9yIHRoZXNlIGxpa2UgYWJvdmUuCj4gCj4+IAo+PiAgI2RlZmluZSBEUF9URVNUX0xJ TktfUkFURQkJICAgIDB4MjE5Cj4+ICAjIGRlZmluZSBEUF9MSU5LX1JBVEVfMTYyCQkgICAgKDB4 NikKPj4gQEAgLTYzOSw2ICs2NDEsMTMgQEAKPj4gICNkZWZpbmUJRFBfVEVTVF84MEJJVF9DVVNU T01fUEFUVEVSTl83MV82NCAgMHgyNTgKPj4gICNkZWZpbmUJRFBfVEVTVF84MEJJVF9DVVNUT01f UEFUVEVSTl83OV83MiAgMHgyNTkKPj4gCj4+ICsjZGVmaW5lIERQX1RFU1RfUEhZX1BBVFRFUk5f Tk9ORQkJCTB4MAo+PiArI2RlZmluZSBEUF9URVNUX1BIWV9QQVRURVJOX0QxMF8yX05PX1NDUkFN QkxJTkcJMHgxCj4+ICsjZGVmaW5lIERQX1RFU1RfUEhZX1BBVFRFUk5fU1lNQk9MX0VSUl9NRUFT VVJFTUVOVF9DTlQgMHgyCj4+ICsjZGVmaW5lIERQX1RFU1RfUEhZX1BBVFRFUk5fUFJCUzcJCQkw eDMKPj4gKyNkZWZpbmUgRFBfVEVTVF9QSFlfUEFUVEVSTl84MF9CSVRfQ1VTVE9NX1BBVFRFUk4J MHg0Cj4+ICsjZGVmaW5lIERQX1RFU1RfUEhZX1BBVFRFUk5fSEJSMl9DVFNfRVlFX1BBVFRFUk4J MHg1Cj4gCj4gVGhlc2UgYXJlIGFscmVhZHkgaW4gZHJtX2RwX2hlbHBlciB1bmRlciBEUF9MSU5L X1FVQUxfUEFUVEVSTl8qCj4gCj4+ICsKPj4gICNkZWZpbmUgRFBfVEVTVF9SRVNQT05TRQkJICAg IDB4MjYwCj4+ICAjIGRlZmluZSBEUF9URVNUX0FDSwkJCSAgICAoMSA8PCAwKQo+PiAgIyBkZWZp bmUgRFBfVEVTVF9OQUsJCQkgICAgKDEgPDwgMSkKPj4gQEAgLTY0OCw2ICs2NTcsMTYgQEAKPj4g Cj4+ICAjZGVmaW5lIERQX1RFU1RfU0lOSwkJCSAgICAweDI3MAo+PiAgIyBkZWZpbmUgRFBfVEVT VF9TSU5LX1NUQVJUCQkgICAgKDEgPDwgMCkKPj4gKyNkZWZpbmUgRFBfVEVTVF9BVURJT19NT0RF CQkgICAgMHgyNzEKPj4gKyNkZWZpbmUgRFBfVEVTVF9BVURJT19QQVRURVJOX1RZUEUJICAgIDB4 MjcyCj4+ICsjZGVmaW5lIERQX1RFU1RfQVVESU9fUEVSSU9EX0NIMQkgICAgMHgyNzMKPj4gKyNk ZWZpbmUgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0gyCSAgICAweDI3NAo+PiArI2RlZmluZSBEUF9U RVNUX0FVRElPX1BFUklPRF9DSDMJICAgIDB4Mjc1Cj4+ICsjZGVmaW5lIERQX1RFU1RfQVVESU9f UEVSSU9EX0NINAkgICAgMHgyNzYKPj4gKyNkZWZpbmUgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g1 CSAgICAweDI3Nwo+PiArI2RlZmluZSBEUF9URVNUX0FVRElPX1BFUklPRF9DSDYJICAgIDB4Mjc4 Cj4+ICsjZGVmaW5lIERQX1RFU1RfQVVESU9fUEVSSU9EX0NINwkgICAgMHgyNzkKPj4gKyNkZWZp bmUgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g4CSAgICAweDI3QQo+PiAKPj4gICNkZWZpbmUgRFBf RkVDX1NUQVRVUwkJCSAgICAweDI4MCAgICAvKiAxLjQgKi8KPj4gICMgZGVmaW5lIERQX0ZFQ19E RUNPREVfRU5fREVURUNURUQJICAgICgxIDw8IDApCj4+IC0tCj4+IFRoZSBRdWFsY29tbSBJbm5v dmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgCj4+IEZv cnVtLAo+PiBhIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0Cj4+IAo+PiBf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+PiBGcmVlZHJl bm8gbWFpbGluZyBsaXN0Cj4+IEZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKPj4gaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8KX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1h aWxpbmcgbGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5vCg==