From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jordan Crouse Subject: Re: [DPU PATCH 2/3] drm/msm/dp: add displayPort driver support Date: Wed, 10 Oct 2018 12:41:33 -0600 Message-ID: <20181010184133.GE9977@jcrouse-lnx.qualcomm.com> References: <1539191759-14836-1-git-send-email-chandanu@codeaurora.org> <1539191759-14836-3-git-send-email-chandanu@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1539191759-14836-3-git-send-email-chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Chandan Uddaraju 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 T24gV2VkLCBPY3QgMTAsIDIwMTggYXQgMTA6MTU6NThBTSAtMDcwMCwgQ2hhbmRhbiBVZGRhcmFq dSB3cm90ZToKPiBBZGQgdGhlIG5lZWRlZCBkaXNwbGF5UG9ydCBmaWxlcyB0byBlbmFibGUgRFAg ZHJpdmVyCj4gb24gbXNtIHRhcmdldC4KPiAKPiAiZHBfZGlzcGxheSIgbW9kdWxlIGlzIHRoZSBt YWluIG1vZHVsZSB0aGF0IGNhbGxzIGludG8KPiBvdGhlciBzdWItbW9kdWxlcy4gImRwX2RybSIg ZmlsZSByZXByZXNlbnRzIHRoZSBpbnRlcmZhY2UKPiBiZXR3ZWVuIERSTSBmcmFtZXdvcmsgYW5k IERQIGRyaXZlci4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaGFuZGFuIFVkZGFyYWp1IDxjaGFuZGFu dUBjb2RlYXVyb3JhLm9yZz4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9LY29uZmlnICAg ICAgICAgICAgICAgICB8ICAgIDkgKwo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlICAg ICAgICAgICAgICAgIHwgICAxNSArLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaW9fdXRpbC5jIHwgIDIwNiArKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9pb191dGlsLmggfCAgIDQ0ICsKPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXgu YyAgICAgICAgICAgICB8ICA1NzAgKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX2F1eC5oICAgICAgICAgICAgIHwgICA0NCArCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAv ZHBfY2F0YWxvZy5jICAgICAgICAgfCAxMTg4ICsrKysrKysrKysrKysrKysrKysrCj4gIGRyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5oICAgICAgICAgfCAgMTQ0ICsrKwo+ICBkcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0cmwuYyAgICAgICAgICAgIHwgMTQ3NSArKysrKysrKysr KysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5oICAgICAg ICAgICAgfCAgIDUwICsKPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kZWJ1Zy5jICAgICAg ICAgICB8ICA1MDcgKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGVidWcu aCAgICAgICAgICAgfCAgIDgxICsrCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxh eS5jICAgICAgICAgfCAgOTc3ICsrKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfZGlzcGxheS5oICAgICAgICAgfCAgIDU1ICsKPiAgZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9kcm0uYyAgICAgICAgICAgICB8ICA1NDIgKysrKysrKysrKwo+ICBkcml2ZXJzL2dw dS9kcm0vbXNtL2RwL2RwX2RybS5oICAgICAgICAgICAgIHwgICA1MiArCj4gIGRyaXZlcnMvZ3B1 L2RybS9tc20vZHAvZHBfZXh0Y29uLmMgICAgICAgICAgfCAgNDAwICsrKysrKysKPiAgZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9leHRjb24uaCAgICAgICAgICB8ICAxMTEgKysKPiAgZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9saW5rLmMgICAgICAgICAgICB8IDE1NDkgKysrKysrKysrKysr KysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfbGluay5oICAgICAg ICAgICAgfCAgMTg0ICsrKysKPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5jICAg ICAgICAgICB8ICA2MjQgKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9w YW5lbC5oICAgICAgICAgICB8ICAxMjEgKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf cGFyc2VyLmMgICAgICAgICAgfCAgNjc5ICsrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0v bXNtL2RwL2RwX3BhcnNlci5oICAgICAgICAgIHwgIDIwNSArKysrCj4gIGRyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvZHBfcG93ZXIuYyAgICAgICAgICAgfCAgNTk5ICsrKysrKysrKysrCj4gIGRyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfcG93ZXIuaCAgICAgICAgICAgfCAgIDU3ICsKPiAgZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9yZWcuaCAgICAgICAgICAgICB8ICAzNTcgKysrKysrCj4gIGRy aXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jICAgICAgICAgICAgICAgfCAgICAyICsKPiAgZHJp dmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmggICAgICAgICAgICAgICB8ICAgMjIgKwo+ICBpbmNs dWRlL2RybS9kcm1fZHBfaGVscGVyLmggICAgICAgICAgICAgICAgIHwgICAxOSArCj4gIDMwIGZp bGVzIGNoYW5nZWQsIDEwODg3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXV4LmMKPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXV4LmgKPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5jCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2NhdGFsb2cuaAo+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jdHJsLmMKPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5oCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RlYnVnLmMKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGVidWcuaAo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmMKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5oCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RybS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RybS5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2xpbmsuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL21zbS9kcC9kcF9saW5rLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vbXNtL2RwL2RwX3BhcnNlci5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vbXNtL2RwL2RwX3BhcnNlci5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tc20vZHAvZHBfcG93ZXIuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL21zbS9kcC9kcF9yZWcuaAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcKPiBpbmRleCA4NDNhOWQ0 Li5jMzYzZjI0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vS2NvbmZpZwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vS2NvbmZpZwo+IEBAIC00OSw2ICs0OSwxNSBAQCBjb25m aWcgRFJNX01TTV9IRE1JX0hEQ1AKPiAgCWhlbHAKPiAgCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRv IGVuYWJsZSBIRENQIHN0YXRlIG1hY2hpbmUKPiAgCj4gK2NvbmZpZyBEUk1fTVNNX0RQCj4gKwli b29sICJFbmFibGUgRFAgc3VwcG9ydCBpbiBNU00gRFJNIGRyaXZlciIKPiArCWRlcGVuZHMgb24g RFJNX01TTQo+ICsJZGVmYXVsdCBuCgpkZWZhdWx0IG4gc2hvdWxkIGJlIGltcGxpZWQgc28geW91 IGRvbid0IG5lZWQgdG8gYWRkIGl0LgoKPiArCWhlbHAKPiArCSAgQ29tcGlsZSBpbiBzdXBwb3J0 IGZvciBEUCBkcml2ZXIgaW4gbXNtIGRybQo+ICsJICBkcml2ZXIuIERQIGV4dGVybmFsIGRpc3Bs YXkgc3VwcG9ydCBpcyBlbmFibGVkCj4gKwkgIHRocm91Z2ggdGhpcyBjb25maWcgb3B0aW9uLiBJ dCBjYW4gYmUgcHJpbWFyeSBvcgo+ICsJICBzZWNvbmRhcnkgZGlzcGxheSBvbiBkZXZpY2UuCj4g IGNvbmZpZyBEUk1fTVNNX0RTSQo+ICAJYm9vbCAiRW5hYmxlIERTSSBzdXBwb3J0IGluIE1TTSBE Uk0gZHJpdmVyIgo+ICAJZGVwZW5kcyBvbiBEUk1fTVNNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCj4gaW5k ZXggMTlhYjUyMS4uNzY1YThkOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01h a2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQo+IEBAIC0yLDYgKzIs NyBAQAo+ICBjY2ZsYWdzLXkgOj0gLUlkcml2ZXJzL2dwdS9kcm0vbXNtCj4gIGNjZmxhZ3MteSAr PSAtSWRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxCj4gIGNjZmxhZ3MtJChDT05GSUdfRFJN X01TTV9EU0kpICs9IC1JZHJpdmVycy9ncHUvZHJtL21zbS9kc2kKPiArY2NmbGFncy0kKENPTkZJ R19EUk1fTVNNX0RQKSArPSAtSWRyaXZlcnMvZ3B1L2RybS9tc20vZHAKPiAgCj4gIG1zbS15IDo9 IFwKPiAgCWFkcmVuby9hZHJlbm9fZGV2aWNlLm8gXAo+IEBAIC05Myw3ICs5NCwxOSBAQCBtc20t eSA6PSBcCj4gIAltc21fc3VibWl0cXVldWUubwo+ICAKPiAgbXNtLSQoQ09ORklHX0RFQlVHX0ZT KSArPSBhZHJlbm8vYTV4eF9kZWJ1Z2ZzLm8gXAo+IC0JCQkgIGRpc3AvZHB1MS9kcHVfZGJnLm8K PiArCQkJICBkaXNwL2RwdTEvZHB1X2RiZy5vIFwKPiArCQkJICBkcC9kcF9kZWJ1Zy5vCj4gKwo+ ICttc20tJChDT05GSUdfRFJNX01TTV9EUCkrPSBkcC9kcF9leHRjb24ubyBcCj4gKwlkcC9kcF9w YXJzZXIubyBcCj4gKwlkcC9kcF9wb3dlci5vIFwKPiArCWRwL2RwX2NhdGFsb2cubyBcCj4gKwlk cC9kcF9hdXgubyBcCj4gKwlkcC9kcF9wYW5lbC5vIFwKPiArCWRwL2RwX2xpbmsubyBcCj4gKwlk cC9kcF9jdHJsLm8gXAo+ICsJZHAvZHBfZGlzcGxheS5vIFwKPiArCWRwL2RwX2RybS5vCj4gIAo+ ICBtc20tJChDT05GSUdfRFJNX0ZCREVWX0VNVUxBVElPTikgKz0gbXNtX2ZiZGV2Lm8KPiAgbXNt LSQoQ09ORklHX0NPTU1PTl9DTEspICs9IGRpc3AvbWRwNC9tZHA0X2x2ZHNfcGxsLm8KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2lvX3V0aWwuYyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9pb191dGlsLmMKPiBpbmRleCA3OTBkMzlm Li4wZjUzYTE1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9pb191dGlsLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9f dXRpbC5jCj4gQEAgLTE0LDEwICsxNCwyMTYgQEAKPiAgI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ ICAjaW5jbHVkZSA8bGludXgvY2xrL2Nsay1jb25mLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9lcnIu aD4KPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3Iv Y29uc3VtZXIuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gIAo+ICAjaW5jbHVkZSAi ZHB1X2lvX3V0aWwuaCIKPiAgCj4gK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKm1zbV9kc3NfZ2V0 X3Jlc19ieW5hbWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPiArCQkJCQkgICAgICAg dW5zaWduZWQgaW50IHR5cGUsCj4gKwkJCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCj4gK3sK PiArCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gTlVMTDsKPiArCj4gKwlyZXMgPSBwbGF0Zm9ybV9n ZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIHR5cGUsIG5hbWUpOwo+ICsJaWYgKCFyZXMpCj4gKwkJ REVWX0VSUigiJXM6ICclcycgcmVzb3VyY2Ugbm90IGZvdW5kXG4iLCBfX2Z1bmNfXywgbmFtZSk7 Cj4gKwo+ICsJcmV0dXJuIHJlczsKPiArfSAvKiBtc21fZHNzX2dldF9yZXNfYnluYW1lICovCj4g Kwo+ICtpbnQgbXNtX2Rzc19pb3JlbWFwX2J5bmFtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2LAo+ICsJCQkgICBzdHJ1Y3QgZHNzX2lvX2RhdGEgKmlvX2RhdGEsIGNvbnN0IGNoYXIgKm5h bWUpCj4gK3sKPiArCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gTlVMTDsKPiArCj4gKwlpZiAoIXBk ZXYgfHwgIWlvX2RhdGEpIHsKPiArCQlERVZfRVJSKCIlcFMtPiVzOiBpbnZhbGlkIGlucHV0XG4i LAo+ICsJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIF9fZnVuY19fKTsKPiArCQlyZXR1 cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXMgPSBtc21fZHNzX2dldF9yZXNfYnluYW1lKHBk ZXYsIElPUkVTT1VSQ0VfTUVNLCBuYW1lKTsKPiArCWlmICghcmVzKSB7Cj4gKwkJREVWX0VSUigi JXBTLT4lczogJyVzJyBtc21fZHNzX2dldF9yZXNfYnluYW1lIGZhaWxlZFxuIiwKPiArCQkJX19i dWlsdGluX3JldHVybl9hZGRyZXNzKDApLCBfX2Z1bmNfXywgbmFtZSk7Cj4gKwkJcmV0dXJuIC1F Tk9ERVY7Cj4gKwl9Cj4gKwo+ICsJaW9fZGF0YS0+bGVuID0gKHUzMilyZXNvdXJjZV9zaXplKHJl cyk7Cj4gKwlpb19kYXRhLT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBpb19kYXRhLT5sZW4p Owo+ICsJaWYgKCFpb19kYXRhLT5iYXNlKSB7Cj4gKwkJREVWX0VSUigiJXBTLT4lczogJyVzJyBp b3JlbWFwIGZhaWxlZFxuIiwKPiArCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCBfX2Z1 bmNfXywgbmFtZSk7Cj4gKwkJcmV0dXJuIC1FSU87Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30gLyogbXNtX2Rzc19pb3JlbWFwX2J5bmFtZSAqLwoKV2UgYWxyZWFkeSBoYXZlIGEgZnVuY3Rp b24gY2FsbGVkIG1zbV9pb3JlbWFwKCkgdGhhdCB5b3UgY2FuIHVzZSBpbnN0ZWFkIG9mCnRoaXMu IEJvbnVzLCBpdCB1c2VzIGRldm1fIHNvIHlvdSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHVu bWFwLgo+ICsKPiArdm9pZCBtc21fZHNzX2lvdW5tYXAoc3RydWN0IGRzc19pb19kYXRhICppb19k YXRhKQo+ICt7Cj4gKwlpZiAoIWlvX2RhdGEpIHsKPiArCQlERVZfRVJSKCIlcFMtPiVzOiBpbnZh bGlkIGlucHV0XG4iLAo+ICsJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIF9fZnVuY19f KTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJaWYgKGlvX2RhdGEtPmJhc2UpIHsKPiArCQlp b3VubWFwKGlvX2RhdGEtPmJhc2UpOwo+ICsJCWlvX2RhdGEtPmJhc2UgPSBOVUxMOwo+ICsJfQo+ ICsJaW9fZGF0YS0+bGVuID0gMDsKPiArfSAvKiBtc21fZHNzX2lvdW5tYXAgKi8KPgppZiB5b3Ug dXNlIHRoZSBmdW5jdGlvbiBhYm92ZSB5b3Ugc2hvdWxkbid0IG5lZWQgdGhpcyBvbmUgYW55bW9y ZS4KCj4gK2ludCBtc21fZHNzX2NvbmZpZ192cmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0 IGRzc192cmVnICppbl92cmVnLAo+ICsJCQlpbnQgbnVtX3ZyZWcsIGludCBjb25maWcpCj4gK3sK PiArCWludCBpID0gMCwgcmMgPSAwOwo+ICsJc3RydWN0IGRzc192cmVnICpjdXJyX3ZyZWcgPSBO VUxMOwo+ICsJZW51bSBkc3NfdnJlZ190eXBlIHR5cGU7Cj4gKwo+ICsJaWYgKCFpbl92cmVnIHx8 ICFudW1fdnJlZykKPiArCQlyZXR1cm4gcmM7Cj4gKwo+ICsJaWYgKGNvbmZpZykgewo+ICsJCWZv ciAoaSA9IDA7IGkgPCBudW1fdnJlZzsgaSsrKSB7Cj4gKwkJCWN1cnJfdnJlZyA9ICZpbl92cmVn W2ldOwo+ICsJCQljdXJyX3ZyZWctPnZyZWcgPSByZWd1bGF0b3JfZ2V0KGRldiwKPiArCQkJCWN1 cnJfdnJlZy0+dnJlZ19uYW1lKTsKPiArCQkJcmMgPSBQVFJfUkVUKGN1cnJfdnJlZy0+dnJlZyk7 Cj4gKwkJCWlmIChyYykgewoKVGhpcyBzaG91bGQgYmUgSVNfRVJSKHJjKSkgYW5kIHRoZW4gdXNl IFBUUl9FUlIoKSB0byB0YWtlIGl0IGFwYXJ0IGlmIHlvdSBuZWVkCml0IGZvciB5b3VyIHJldHVy biB2YWx1ZSBvciBlcnJvciBtZXNzYWdlLiAgUFRSX1JFVCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQu Cgo+ICsJCQkJREVWX0VSUigiJXBTLT4lczogJXMgZ2V0IGZhaWxlZC4gcmM9JWRcbiIsCj4gKwkJ CQkJIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgX19mdW5jX18sCj4gKwkJCQkJIGN1cnJf dnJlZy0+dnJlZ19uYW1lLCByYyk7CgpJZiB5b3UgY2FyZSBhYm91dCB0aGUgc3RhY2sgaGVyZSB0 aGVuIGNvbnNpZGVyIHVzaW5nIFdBUk4gaW5zdGVhZCBvZgpfX2J1aWx0aW5fcmV0dXJuX2FkZHJl c3MoMCkgYW5kIF9fZnVuY19fLiAgSXQgd2lsbCBnaXZlIHlvdSB3aGF0IHlvdSBuZWVkIGluIGEK c3RhbmRhcmQgd2F5LgoKPiArCQkJCWN1cnJfdnJlZy0+dnJlZyA9IE5VTEw7Cj4gKwkJCQlnb3Rv IHZyZWdfZ2V0X2ZhaWw7Cj4gKwkJCX0KPiArCQkJdHlwZSA9IChyZWd1bGF0b3JfY291bnRfdm9s dGFnZXMoY3Vycl92cmVnLT52cmVnKSA+IDApCj4gKwkJCQkJPyBEU1NfUkVHX0xETyA6IERTU19S RUdfVlM7Cj4gKwkJCWlmICh0eXBlID09IERTU19SRUdfTERPKSB7Cj4gKwkJCQlyYyA9IHJlZ3Vs YXRvcl9zZXRfdm9sdGFnZSgKPiArCQkJCQljdXJyX3ZyZWctPnZyZWcsCj4gKwkJCQkJY3Vycl92 cmVnLT5taW5fdm9sdGFnZSwKPiArCQkJCQljdXJyX3ZyZWctPm1heF92b2x0YWdlKTsKPiArCQkJ CWlmIChyYyA8IDApIHsKPiArCQkJCQlERVZfRVJSKCIlcFMtPiVzOiAlcyBzZXQgdmx0ZyBmYWls XG4iLAoKU2FtZSBhcyBhYm92ZSAtIHVzZSBXQVJOIGlmIHlvdSBjYW4uICBUcnkgbm90IHRvIHVz ZSBhYmJyZXZpYXRpb25zIGluIGxvZwptZXNzYWdlcyAtICd2b2x0YWdlJyBpc24ndCBtdWNoIGJp Z2dlciBhbmQgaXQgaXMgYSBsb3QgbW9yZSB1bmRlcnN0YW5kYWJsZQplc3BlY2lhbGx5IGZvciBu b24gbmF0aXZlIHNwZWFrZXJzLgoKPiArCQkJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDAp LAo+ICsJCQkJCQlfX2Z1bmNfXywKPiArCQkJCQkJY3Vycl92cmVnLT52cmVnX25hbWUpOwo+ICsJ CQkJCWdvdG8gdnJlZ19zZXRfdm9sdGFnZV9mYWlsOwo+ICsJCQkJfQo+ICsJCQl9Cj4gKwkJfQo+ ICsJfSBlbHNlIHsKClRoaXMgY2xhdXNlIHNoYXJlcyBub3RoaW5nIHdpdGggdGhlIHJlc3Qgb2Yg dGhlIGZ1bmN0aW9uIGFuZCBwcm92ZXMgdGhlcmUgaXMgbm8KcmVhc29uIHRvIG5vdCBoYXZlIHNl cGFyYXRlIGZ1bmN0aW9ucyBmb3Igc2V0dGluZyB1cCBhbmQgdGFraW5nIGRvd24gaW5zdGVhZCBv Zgp1c2luZyB0aGUgYm9vbGVhbiBmbGFnLgoKPiArCQlmb3IgKGkgPSBudW1fdnJlZy0xOyBpID49 IDA7IGktLSkgewo+ICsJCQljdXJyX3ZyZWcgPSAmaW5fdnJlZ1tpXTsKPiArCQkJaWYgKGN1cnJf dnJlZy0+dnJlZykgewo+ICsJCQkJdHlwZSA9IChyZWd1bGF0b3JfY291bnRfdm9sdGFnZXMoCj4g KwkJCQkJY3Vycl92cmVnLT52cmVnKSA+IDApCj4gKwkJCQkJPyBEU1NfUkVHX0xETyA6IERTU19S RUdfVlM7Cj4gKwkJCQlpZiAodHlwZSA9PSBEU1NfUkVHX0xETykgewo+ICsJCQkJCXJlZ3VsYXRv cl9zZXRfdm9sdGFnZShjdXJyX3ZyZWctPnZyZWcsCj4gKwkJCQkJCTAsIGN1cnJfdnJlZy0+bWF4 X3ZvbHRhZ2UpOwo+ICsJCQkJfQo+ICsJCQkJcmVndWxhdG9yX3B1dChjdXJyX3ZyZWctPnZyZWcp Owo+ICsJCQkJY3Vycl92cmVnLT52cmVnID0gTlVMTDsKPiArCQkJfQo+ICsJCX0KPiArCX0KPiAr CXJldHVybiAwOwo+ICsKPiArdnJlZ191bmNvbmZpZzoKPiAraWYgKHR5cGUgPT0gRFNTX1JFR19M RE8pCj4gKwlyZWd1bGF0b3Jfc2V0X2xvYWQoY3Vycl92cmVnLT52cmVnLCAwKTsKCkJvdGggcGF0 aHMgYWJvdmUgdXNlIHJlZ3VsYXRvcl9zZXRfdm9sdGFnZSgpLCBzbyBJJ20gbm90IHN1cmUgaWYK cmVndWxhdG9yX3NldF9sb2FkKCkgaXMgd2hhdCB5b3UgaW50ZW5kIGhlcmUuCgo+ICsKPiArdnJl Z19zZXRfdm9sdGFnZV9mYWlsOgo+ICsJcmVndWxhdG9yX3B1dChjdXJyX3ZyZWctPnZyZWcpOwo+ ICsJY3Vycl92cmVnLT52cmVnID0gTlVMTDsKPiArCj4gK3ZyZWdfZ2V0X2ZhaWw6Cj4gKwlmb3Ig KGktLTsgaSA+PSAwOyBpLS0pIHsKPiArCQljdXJyX3ZyZWcgPSAmaW5fdnJlZ1tpXTsKPiArCQl0 eXBlID0gKHJlZ3VsYXRvcl9jb3VudF92b2x0YWdlcyhjdXJyX3ZyZWctPnZyZWcpID4gMCkKPiAr CQkJPyBEU1NfUkVHX0xETyA6IERTU19SRUdfVlM7Cj4gKwkJZ290byB2cmVnX3VuY29uZmlnOwoK T2ggbXkgLSBqdW1waW5nIGJhY2sgb3V0IG9mIGEgbG9vcCB3aXRoIGdvdG8gaXMgbm90IG9rYXku IFRoaXMgZW50aXJlIGJsb2NrIGlzCmJhc2ljYWxseSBqdXN0IHRyeWluZyB0byB0YWtlIHRoZSBw bGFjZSBvZiB0aGUgdGFrZWRvd24gY2xhdXNlIGFib3ZlIHNvIGlmIHlvdQp1c2UgYSBzZXBhcmF0 ZSBmdW5jdGlvbiB0byBwdXQgYXdheSB0aGUgcmVndWxhdG9ycyB5b3UgY2FuIGp1c3QgY2FsbCB0 aGF0Cmluc3RlYWQuCgo+ICsJfQo+ICsJcmV0dXJuIHJjOwo+ICt9IC8qIG1zbV9kc3NfY29uZmln X3ZyZWcgKi8KCk1heWJlIGEgbml0LCBidXQgd2UgYWxsIGtub3cgaG93IHRvIHJlYWQgQyBjb2Rl LiBXZSBkb24ndCBuZWVkIGEgY29tbWVudCB0bwpsZXQgdXMga25vdyB3aGVuIGEgYnJhY2tldCBj bG9zZXMgb3V0IGEgZnVuY3Rpb24uCgo+ICsKPiAraW50IG1zbV9kc3NfZW5hYmxlX3ZyZWcoc3Ry dWN0IGRzc192cmVnICppbl92cmVnLCBpbnQgbnVtX3ZyZWcsIGludCBlbmFibGUpCj4gK3sKPiAr CWludCBpID0gMCwgcmMgPSAwOwo+ICsJYm9vbCBuZWVkX3NsZWVwOwo+ICsKPiArCWlmIChlbmFi bGUpIHsKPiArCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3ZyZWc7IGkrKykgewo+ICsJCQlyYyA9IFBU Ul9SRVQoaW5fdnJlZ1tpXS52cmVnKTsKPiArCQkJaWYgKHJjKSB7Cj4gKwkJCQlERVZfRVJSKCIl cFMtPiVzOiAlcyByZWd1bGF0b3IgZXJyb3IuIHJjPSVkXG4iLAo+ICsJCQkJCV9fYnVpbHRpbl9y ZXR1cm5fYWRkcmVzcygwKSwgX19mdW5jX18sCj4gKwkJCQkJaW5fdnJlZ1tpXS52cmVnX25hbWUs IHJjKTsKCkFzIGFib3ZlIC0gdXNlIFdBUk4gaWYgeW91IGNhbi4KCj4gKwkJCQlnb3RvIHZyZWdf c2V0X29wdF9tb2RlX2ZhaWw7Cj4gKwkJCX0KPiArCQkJbmVlZF9zbGVlcCA9ICFyZWd1bGF0b3Jf aXNfZW5hYmxlZChpbl92cmVnW2ldLnZyZWcpOwo+ICsJCQlpZiAoaW5fdnJlZ1tpXS5wcmVfb25f c2xlZXAgJiYgbmVlZF9zbGVlcCkKPiArCQkJCXVzbGVlcF9yYW5nZShpbl92cmVnW2ldLnByZV9v bl9zbGVlcCAqIDEwMDAsCj4gKwkJCQkJaW5fdnJlZ1tpXS5wcmVfb25fc2xlZXAgKiAxMDAwKTsK PiArCQkJcmMgPSByZWd1bGF0b3Jfc2V0X2xvYWQoaW5fdnJlZ1tpXS52cmVnLAo+ICsJCQkJaW5f dnJlZ1tpXS5lbmFibGVfbG9hZCk7Cj4gKwkJCWlmIChyYyA8IDApIHsKPiArCQkJCURFVl9FUlIo IiVwUy0+JXM6ICVzIHNldCBvcHQgbSBmYWlsXG4iLAo+ICsJCQkJCV9fYnVpbHRpbl9yZXR1cm5f YWRkcmVzcygwKSwgX19mdW5jX18sCj4gKwkJCQkJaW5fdnJlZ1tpXS52cmVnX25hbWUpOwo+ICsJ CQkJZ290byB2cmVnX3NldF9vcHRfbW9kZV9mYWlsOwo+ICsJCQl9Cj4gKwkJCXJjID0gcmVndWxh dG9yX2VuYWJsZShpbl92cmVnW2ldLnZyZWcpOwo+ICsJCQlpZiAoaW5fdnJlZ1tpXS5wb3N0X29u X3NsZWVwICYmIG5lZWRfc2xlZXApCj4gKwkJCQl1c2xlZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wb3N0 X29uX3NsZWVwICogMTAwMCwKPiArCQkJCQlpbl92cmVnW2ldLnBvc3Rfb25fc2xlZXAgKiAxMDAw KTsKPiArCQkJaWYgKHJjIDwgMCkgewo+ICsJCQkJREVWX0VSUigiJXBTLT4lczogJXMgZW5hYmxl IGZhaWxlZFxuIiwKPiArCQkJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIF9fZnVuY19f LAo+ICsJCQkJCWluX3ZyZWdbaV0udnJlZ19uYW1lKTsKPiArCQkJCWdvdG8gZGlzYWJsZV92cmVn Owo+ICsJCQl9Cj4gKwkJfQo+ICsJfSBlbHNlIHsKCkFsc28gYXMgYWJvdmUgLSB0aGlzIGVudGly ZSBjbGF1c2UgY2FuIHN0YW5kIGFsb25lIGluIGl0cyBvd24gZnVuY3Rpb24uIAo+ICsJCWZvciAo aSA9IG51bV92cmVnLTE7IGkgPj0gMDsgaS0tKSB7Cj4gKwkJCWlmIChpbl92cmVnW2ldLnByZV9v ZmZfc2xlZXApCj4gKwkJCQl1c2xlZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wcmVfb2ZmX3NsZWVwICog MTAwMCwKPiArCQkJCQlpbl92cmVnW2ldLnByZV9vZmZfc2xlZXAgKiAxMDAwKTsKPiArCQkJcmVn dWxhdG9yX3NldF9sb2FkKGluX3ZyZWdbaV0udnJlZywKPiArCQkJCWluX3ZyZWdbaV0uZGlzYWJs ZV9sb2FkKTsKPiArCQkJcmVndWxhdG9yX2Rpc2FibGUoaW5fdnJlZ1tpXS52cmVnKTsKPiArCQkJ aWYgKGluX3ZyZWdbaV0ucG9zdF9vZmZfc2xlZXApCj4gKwkJCQl1c2xlZXBfcmFuZ2UoaW5fdnJl Z1tpXS5wb3N0X29mZl9zbGVlcCAqIDEwMDAsCj4gKwkJCQkJaW5fdnJlZ1tpXS5wb3N0X29mZl9z bGVlcCAqIDEwMDApOwo+ICsJCX0KPiArCX0KPiArCXJldHVybiByYzsKPiArCj4gK2Rpc2FibGVf dnJlZzoKPiArCXJlZ3VsYXRvcl9zZXRfbG9hZChpbl92cmVnW2ldLnZyZWcsIGluX3ZyZWdbaV0u ZGlzYWJsZV9sb2FkKTsKPiArCj4gK3ZyZWdfc2V0X29wdF9tb2RlX2ZhaWw6Cj4gKwlmb3IgKGkt LTsgaSA+PSAwOyBpLS0pIHsKPiArCQlpZiAoaW5fdnJlZ1tpXS5wcmVfb2ZmX3NsZWVwKQo+ICsJ CQl1c2xlZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wcmVfb2ZmX3NsZWVwICogMTAwMCwKPiArCQkJCWlu X3ZyZWdbaV0ucHJlX29mZl9zbGVlcCAqIDEwMDApOwo+ICsJCXJlZ3VsYXRvcl9zZXRfbG9hZChp bl92cmVnW2ldLnZyZWcsCj4gKwkJCWluX3ZyZWdbaV0uZGlzYWJsZV9sb2FkKTsKPiArCQlyZWd1 bGF0b3JfZGlzYWJsZShpbl92cmVnW2ldLnZyZWcpOwo+ICsJCWlmIChpbl92cmVnW2ldLnBvc3Rf b2ZmX3NsZWVwKQo+ICsJCQl1c2xlZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wb3N0X29mZl9zbGVlcCAq IDEwMDAsCj4gKwkJCQlpbl92cmVnW2ldLnBvc3Rfb2ZmX3NsZWVwICogMTAwMCk7Cj4gKwl9Cj4g ClRoaXMgaXMgZXNzZW50aWFsbHkgYSByZWNyZWF0aW9uIG9mIHRoZSBjb2RlIGFib3ZlIC0geW91 IGNhbiBqdXN0IHVzZSB0aGUKc3RhbmRhbG9uZSBmdW5jdGlvbiBmb3IgdGVhcmRvd24uCgo+ICsJ cmV0dXJuIHJjOwo+ICt9IC8qIG1zbV9kc3NfZW5hYmxlX3ZyZWcgKi8KPiArCj4gKwo+ICB2b2lk IG1zbV9kc3NfcHV0X2NsayhzdHJ1Y3QgZHNzX2NsayAqY2xrX2FycnksIGludCBudW1fY2xrKQo+ ICB7Cj4gIAlpbnQgaTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2lvX3V0aWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9pb191 dGlsLmgKPiBpbmRleCBiYzA3MzgxLi41MjRiMzk0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9pb191dGlsLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5oCj4gQEAgLTE1LDYgKzE1LDcgQEAKPiAgCj4gICNp bmNsdWRlIDxsaW51eC9ncGlvLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu aD4KPiArI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgo+ICAjaW5jbHVkZSA8 bGludXgvdHlwZXMuaD4KPiAgCj4gICNkZWZpbmUgREVWX0RCRyhmbXQsIGFyZ3MuLi4pICAgcHJf ZGVidWcoZm10LCAjI2FyZ3MpCj4gQEAgLTIyLDYgKzIzLDM5IEBACj4gICNkZWZpbmUgREVWX1dB Uk4oZm10LCBhcmdzLi4uKSAgcHJfd2FybihmbXQsICMjYXJncykKPiAgI2RlZmluZSBERVZfRVJS KGZtdCwgYXJncy4uLikgICBwcl9lcnIoZm10LCAjI2FyZ3MpCgpUaGlzIGlzbid0IHBhcnQgb2Yg dGhpcyBwYXRjaCBidXQgSSB3b3VsZCBsb3ZlIHRvIHNlZSB0aGVzZSBndXlzIHR1cm4KaW50byBz dGFuZGFyZCBmdW5jdGlvbnMuCgo+ICtzdHJ1Y3QgZHNzX2lvX2RhdGEgewo+ICsJdTMyIGxlbjsK PiArCXZvaWQgX19pb21lbSAqYmFzZTsKPiArfTsKPiArCj4gKy8qCj4gK3ZvaWQgZHNzX3JlZ193 KHN0cnVjdCBkc3NfaW9fZGF0YSAqaW8sIHUzMiBvZmZzZXQsIHUzMiB2YWx1ZSwgdTMyIGRlYnVn KTsKPiArdTMyIGRzc19yZWdfcihzdHJ1Y3QgZHNzX2lvX2RhdGEgKmlvLCB1MzIgb2Zmc2V0LCB1 MzIgZGVidWcpOwo+ICt2b2lkIGRzc19yZWdfZHVtcCh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiBs ZW4sIGNvbnN0IGNoYXIgKnByZWZpeCwgdTMyIGRlYnVnKTsKPiArCj4gKyNkZWZpbmUgRFNTX1JF R19XX05EKGlvLCBvZmZzZXQsIHZhbCkgIGRzc19yZWdfdyhpbywgb2Zmc2V0LCB2YWwsIGZhbHNl KQo+ICsjZGVmaW5lIERTU19SRUdfVyhpbywgb2Zmc2V0LCB2YWwpICAgICBkc3NfcmVnX3coaW8s IG9mZnNldCwgdmFsLCB0cnVlKQo+ICsjZGVmaW5lIERTU19SRUdfUl9ORChpbywgb2Zmc2V0KSAg ICAgICBkc3NfcmVnX3IoaW8sIG9mZnNldCwgZmFsc2UpCj4gKyNkZWZpbmUgRFNTX1JFR19SKGlv LCBvZmZzZXQpICAgICAgICAgIGRzc19yZWdfcihpbywgb2Zmc2V0LCB0cnVlKQo+ICsqLwo+ICtl bnVtIGRzc192cmVnX3R5cGUgewo+ICsJRFNTX1JFR19MRE8sCj4gKwlEU1NfUkVHX1ZTLAo+ICt9 Owo+ICsKPiArc3RydWN0IGRzc192cmVnIHsKPiArCXN0cnVjdCByZWd1bGF0b3IgKnZyZWc7IC8q IHZyZWcgaGFuZGxlICovCj4gKwljaGFyIHZyZWdfbmFtZVszMl07Cj4gKwlpbnQgbWluX3ZvbHRh Z2U7Cj4gKwlpbnQgbWF4X3ZvbHRhZ2U7Cj4gKwlpbnQgZW5hYmxlX2xvYWQ7Cj4gKwlpbnQgZGlz YWJsZV9sb2FkOwo+ICsJaW50IHByZV9vbl9zbGVlcDsKPiArCWludCBwb3N0X29uX3NsZWVwOwo+ ICsJaW50IHByZV9vZmZfc2xlZXA7Cj4gKwlpbnQgcG9zdF9vZmZfc2xlZXA7Cj4gK307Cj4gKwo+ ICBzdHJ1Y3QgZHNzX2dwaW8gewo+ICAJdW5zaWduZWQgaW50IGdwaW87Cj4gIAl1bnNpZ25lZCBp bnQgdmFsdWU7Cj4gQEAgLTQyLDEyICs3NiwyMiBAQCBzdHJ1Y3QgZHNzX2NsayB7Cj4gIH07Cj4g IAo+ICBzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciB7Cj4gKwl1bnNpZ25lZCBpbnQgbnVtX3ZyZWc7 Cj4gKwlzdHJ1Y3QgZHNzX3ZyZWcgKnZyZWdfY29uZmlnOwo+ICAJdW5zaWduZWQgaW50IG51bV9n cGlvOwo+ICAJc3RydWN0IGRzc19ncGlvICpncGlvX2NvbmZpZzsKPiAgCXVuc2lnbmVkIGludCBu dW1fY2xrOwo+ICAJc3RydWN0IGRzc19jbGsgKmNsa19jb25maWc7Cj4gIH07Cj4gIAo+ICtpbnQg bXNtX2Rzc19pb3JlbWFwX2J5bmFtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ICsJ CQkgICBzdHJ1Y3QgZHNzX2lvX2RhdGEgKmlvX2RhdGEsIGNvbnN0IGNoYXIgKm5hbWUpOwo+ICt2 b2lkIG1zbV9kc3NfaW91bm1hcChzdHJ1Y3QgZHNzX2lvX2RhdGEgKmlvX2RhdGEpOwo+ICsKPiAr aW50IG1zbV9kc3NfY29uZmlnX3ZyZWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHNzX3Zy ZWcgKmluX3ZyZWcsCj4gKwkJCWludCBudW1fdnJlZywgaW50IGNvbmZpZyk7Cj4gK2ludCBtc21f ZHNzX2VuYWJsZV92cmVnKHN0cnVjdCBkc3NfdnJlZyAqaW5fdnJlZywgaW50IG51bV92cmVnLAlp bnQgZW5hYmxlKTsKPiArCj4gIGludCBtc21fZHNzX2dldF9jbGsoc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgZHNzX2NsayAqY2xrX2FycnksIGludCBudW1fY2xrKTsKPiAgdm9pZCBtc21fZHNz X3B1dF9jbGsoc3RydWN0IGRzc19jbGsgKmNsa19hcnJ5LCBpbnQgbnVtX2Nsayk7Cj4gIGludCBt c21fZHNzX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgZHNzX2NsayAqY2xrX2FycnksIGludCBudW1fY2xr KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXguYyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfYXV4LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAuLjAwYjgyYzIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kcC9kcF9hdXguYwo+IEBAIC0wLDAgKzEsNTcwIEBACj4gKy8qCj4gKyAqIENvcHlyaWdo dCAoYykgMjAxMi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4gKyAqIG9ubHkgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsg Kgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKi8KClBsZWFzZSB1c2Ug U1BEWCBoZWFkZXJzLgoKPiArI2RlZmluZSBwcl9mbXQoZm10KQkiW2RybS1kcF0gJXM6ICIgZm10 LCBfX2Z1bmNfXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gKwo+ICsjaW5jbHVk ZSAiZHBfYXV4LmgiCj4gKwo+ICsjZGVmaW5lIERQX0FVWF9FTlVNX1NUUih4KQkJI3gKCllvdSBz aG91bGQgdXNlIHRoaXMgI2RlZmluZSBjbG9zZXIgdG8gd2hlcmUgaXQgaXMgdXNlZC4KCj4gKwo+ ICtlbnVtIHsKPiArCURQX0FVWF9EQVRBX0lOREVYX1dSSVRFID0gQklUKDMxKSwKPiArfTsKClRo aXMgZW51bSBvZiBvbmUgaXMgbm90IG5lZWRlZCAtIHRoaXMgY291bGQgYXMgZWFzaWx5IGJlIGEg I2RlZmluZSBvciBCSVQoMzEpCnVzZWQgaW5saW5lLgoKPiArc3RydWN0IGRwX2F1eF9wcml2YXRl IHsKPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiArCXN0cnVjdCBkcF9hdXggZHBfYXV4Owo+ICsJ c3RydWN0IGRwX2NhdGFsb2dfYXV4ICpjYXRhbG9nOwo+ICsJc3RydWN0IGRwX2F1eF9jZmcgKmNm ZzsKPiArCj4gKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Cj4gKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21w Owo+ICsKPiArCXUzMiBhdXhfZXJyb3JfbnVtOwo+ICsJdTMyIHJldHJ5X2NudDsKPiArCWJvb2wg Y21kX2J1c3k7Cj4gKwlib29sIG5hdGl2ZTsKPiArCWJvb2wgcmVhZDsKPiArCWJvb2wgbm9fc2Vu ZF9hZGRyOwo+ICsJYm9vbCBub19zZW5kX3N0b3A7Cj4gKwl1MzIgb2Zmc2V0Owo+ICsJdTMyIHNl Z21lbnQ7Cj4gKwo+ICsJc3RydWN0IGRybV9kcF9hdXggZHJtX2F1eDsKPiArfTsKPiArCj4gK3N0 YXRpYyBjaGFyICpkcF9hdXhfZ2V0X2Vycm9yKHUzMiBhdXhfZXJyb3IpCj4gK3sKPiArCXN3aXRj aCAoYXV4X2Vycm9yKSB7Cj4gKwljYXNlIERQX0FVWF9FUlJfTk9ORToKPiArCQlyZXR1cm4gRFBf QVVYX0VOVU1fU1RSKERQX0FVWF9FUlJfTk9ORSk7Cj4gKwljYXNlIERQX0FVWF9FUlJfQUREUjoK PiArCQlyZXR1cm4gRFBfQVVYX0VOVU1fU1RSKERQX0FVWF9FUlJfQUREUik7Cj4gKwljYXNlIERQ X0FVWF9FUlJfVE9VVDoKPiArCQlyZXR1cm4gRFBfQVVYX0VOVU1fU1RSKERQX0FVWF9FUlJfVE9V VCk7Cj4gKwljYXNlIERQX0FVWF9FUlJfTkFDSzoKPiArCQlyZXR1cm4gRFBfQVVYX0VOVU1fU1RS KERQX0FVWF9FUlJfTkFDSyk7Cj4gKwljYXNlIERQX0FVWF9FUlJfREVGRVI6Cj4gKwkJcmV0dXJu IERQX0FVWF9FTlVNX1NUUihEUF9BVVhfRVJSX0RFRkVSKTsKPiArCWNhc2UgRFBfQVVYX0VSUl9O QUNLX0RFRkVSOgo+ICsJCXJldHVybiBEUF9BVVhfRU5VTV9TVFIoRFBfQVVYX0VSUl9OQUNLX0RF RkVSKTsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuICJ1bmtub3duIjsKPiArCX0KPiArfQo+ICsK PiArc3RhdGljIHUzMiBkcF9hdXhfd3JpdGUoc3RydWN0IGRwX2F1eF9wcml2YXRlICphdXgsCj4g KwkJCXN0cnVjdCBkcm1fZHBfYXV4X21zZyAqbXNnKQo+ICt7Cj4gKwl1MzIgZGF0YVs0XSwgcmVn LCBsZW47Cj4gKwl1OCAqbXNnZGF0YSA9IG1zZy0+YnVmZmVyOwo+ICsJaW50IGNvbnN0IGF1eF9j bWRfZmlmb19sZW4gPSAxMjg7CgpUaGlzIGlzbid0IHVzZWZ1bCBzaW5jZSBpdCBpcyBvbmx5IHVz ZWQgb25jZXgsIGFuZCBjb25zdGFudCB2YWx1ZXMgbGlrZSAxMjggY2FuCmJlIHNhZmVseSB1c2Vk IGlubGluZSB3aGVuIGl0IGlzIG5lZWRlZC4KCj4gKwlpbnQgaSA9IDA7Cj4gKwo+ICsJaWYgKGF1 eC0+cmVhZCkKPiArCQlsZW4gPSA0Owo+ICsJZWxzZQo+ICsJCWxlbiA9IG1zZy0+c2l6ZSArIDQ7 Cj4gKwo+ICsJLyoKPiArCSAqIGNtZCBmaWZvIG9ubHkgaGFzIGRlcHRoIG9mIDE0NCBieXRlcwo+ ICsJICogbGltaXQgYnVmIGxlbmd0aCB0byAxMjggYnl0ZXMgaGVyZQo+ICsJICovCj4gKwlpZiAo bGVuID4gYXV4X2NtZF9maWZvX2xlbikgewo+ICsJCXByX2VycigiYnVmIGxlbiBlcnJvclxuIik7 CgpJJ20gbm90IHN1cmUgaWYgaXRzIHBvc3NpYmxlLCBidXQgaWYgd2UgY291bGQgZ2V0IHRvIGRl dl9lcnIgZm9yIHRoZXNlIHRoYXQKd291bGQgYmUgZmFudGFzdGljIChidXQgZG9uJ3QgZ28gb3Zl cmJvYXJkIGlmIGl0IGlzIGhhcmQgdG8gZ2V0IHRoZSBkZXYgcG9pbnRlcgphbGwgdGhlIHdheSBk b3duIGhlcmUpLgoKVGhhdCBzYWlkLCB0aGlzIGVycm9yIG1lc3NhZ2Ugc2hvdWxkIGJlIG1vcmUg aW5mb3JtYXRpdmUgLSBpdCBzaG91bGQgYXQgbGVhc3QKc2F5IHdoYXQgdGhlIG9mZmVuZGluZyBs ZW5ndGggaXMuCgo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCS8qIFBhY2sgY21kIGFuZCB3 cml0ZSB0byBIVyAqLwo+ICsJZGF0YVswXSA9IChtc2ctPmFkZHJlc3MgPj4gMTYpICYgMHhmOyAv KiBhZGRyWzE5OjE2XSAqLwo+ICsJaWYgKGF1eC0+cmVhZCkKPiArCQlkYXRhWzBdIHw9ICBCSVQo NCk7IC8qIFIvVyAqLwo+ICsKPiArCWRhdGFbMV0gPSAobXNnLT5hZGRyZXNzID4+IDgpICYgMHhm ZjsJLyogYWRkclsxNTo4XSAqLwo+ICsJZGF0YVsyXSA9IG1zZy0+YWRkcmVzcyAmIDB4ZmY7CQkv KiBhZGRyWzc6MF0gKi8KPiArCWRhdGFbM10gPSAobXNnLT5zaXplIC0gMSkgJiAweGZmOwkvKiBs ZW5bNzowXSAqLwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewo+ICsJCXJlZyA9 IChpIDwgNCkgPyBkYXRhW2ldIDogbXNnZGF0YVtpIC0gNF07Cj4gKwkJcmVnID0gKChyZWcpIDw8 IDgpICYgMHgwMDAwZmYwMDsgLyogaW5kZXggPSAwLCB3cml0ZSAqLwo+ICsJCWlmIChpID09IDAp Cj4gKwkJCXJlZyB8PSBEUF9BVVhfREFUQV9JTkRFWF9XUklURTsKPiArCQlhdXgtPmNhdGFsb2ct PmRhdGEgPSByZWc7Cj4gKwkJYXV4LT5jYXRhbG9nLT53cml0ZV9kYXRhKGF1eC0+Y2F0YWxvZyk7 Cj4gKwl9Cj4gKwo+ICsJYXV4LT5jYXRhbG9nLT5jbGVhcl90cmFucyhhdXgtPmNhdGFsb2csIGZh bHNlKTsKPiArCj4gKwlyZWcgPSAwOyAvKiBUcmFuc2FjdGlvbiBudW1iZXIgPT0gMSAqLwo+ICsJ aWYgKCFhdXgtPm5hdGl2ZSkgeyAvKiBpMmMgKi8KPiArCQlyZWcgfD0gQklUKDgpOwo+ICsKPiAr CQlpZiAoYXV4LT5ub19zZW5kX2FkZHIpCj4gKwkJCXJlZyB8PSBCSVQoMTApOwo+ICsKPiArCQlp ZiAoYXV4LT5ub19zZW5kX3N0b3ApCj4gKwkJCXJlZyB8PSBCSVQoMTEpOwo+ICsJfQo+ICsKPiAr CXJlZyB8PSBCSVQoOSk7Cj4gKwlhdXgtPmNhdGFsb2ctPmRhdGEgPSByZWc7Cj4gKwlhdXgtPmNh dGFsb2ctPndyaXRlX3RyYW5zKGF1eC0+Y2F0YWxvZyk7Cj4gKwo+ICsJcmV0dXJuIGxlbjsKPiAr fQo+ICsKPiArc3RhdGljIGludCBkcF9hdXhfY21kX2ZpZm9fdHgoc3RydWN0IGRwX2F1eF9wcml2 YXRlICphdXgsCj4gKwkJCSAgICAgIHN0cnVjdCBkcm1fZHBfYXV4X21zZyAqbXNnKQo+ICt7Cj4g Kwl1MzIgcmV0ID0gMCwgbGVuID0gMCwgdGltZW91dDsKPiArCWludCBjb25zdCBhdXhfdGltZW91 dF9tcyA9IEhaLzQ7CgpBcyBhYm92ZS4gIEdlbmVyYWxseSBJIGRvbid0IGxpa2UgY29uc3QgdmFy aWFibGVzIG9uIHRoZSBzdGFjayBhbmQgZXNwZWNpYWxseSBpZgp0aGV5IGFyZSBhcyBzaW1wbGUg YXMgdGhpcy4gIFRoaXMgZm9yY2VzIHRoZSByZXZpZXdlciB0byBsb29rIGF0IHRoZSBsaW5lIHdo ZXJlCml0IGlzIHVzZWQsIGFuZCB0aGVuIGJhY2sgYXQgdGhlIGluaXRpYWxpemF0aW9uIHRvIHNl ZSB3aGF0IHRoZSB2YWx1ZSBpcy4KCj4gKwo+ICsJcmVpbml0X2NvbXBsZXRpb24oJmF1eC0+Y29t cCk7Cj4gKwo+ICsJbGVuID0gZHBfYXV4X3dyaXRlKGF1eCwgbXNnKTsKPiArCWlmIChsZW4gPT0g MCkgewo+ICsJCXByX2VycigiRFAgQVVYIHdyaXRlIGZhaWxlZFxuIik7CgpUaGVyZSBpcyBvbmx5 IG9uZSB3YXkgbGVuIGNhbiBiZSB6ZXJvIGFuZCB5b3UgYWxyZWFkeSBwcmludCBhbiBlcnJvciBt ZXNzYWdlIGZvcgppdC4gIFlvdSBkb24ndCBuZWVkIGFub3RoZXIgb25lLgoKPiArCQlyZXR1cm4g LUVJTlZBTDsKPiArCX0KPiArCj4gKwl0aW1lb3V0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1l b3V0KCZhdXgtPmNvbXAsIGF1eF90aW1lb3V0X21zKTsKClRoaXMgY2FuIGVhc2lseSBiZSBIWi80 IGZvciB0aGUgdGltZW91dAoKPiArCWlmICghdGltZW91dCkgewo+ICsJCXByX2VycigiYXV4ICVz IHRpbWVvdXRcbiIsIChhdXgtPnJlYWQgPyAicmVhZCIgOiAid3JpdGUiKSk7Cj4gKwkJcmV0dXJu IC1FVElNRURPVVQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKGF1eC0+YXV4X2Vycm9yX251bSA9PSBEUF9B VVhfRVJSX05PTkUpIHsKPiArCQlyZXQgPSBsZW47Cj4gKwl9IGVsc2Ugewo+ICsJCXByX2Vycl9y YXRlbGltaXRlZCgiYXV4IGVycjogJXNcbiIsCj4gKwkJCWRwX2F1eF9nZXRfZXJyb3IoYXV4LT5h dXhfZXJyb3JfbnVtKSk7Cj4gKwo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0 dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfYXV4X2NtZF9maWZvX3J4KHN0cnVj dCBkcF9hdXhfcHJpdmF0ZSAqYXV4LAo+ICsJCXN0cnVjdCBkcm1fZHBfYXV4X21zZyAqbXNnKQo+ ICt7Cj4gKwl1MzIgZGF0YTsKPiArCXU4ICpkcDsKPiArCXUzMiBpLCBhY3R1YWxfaTsKPiArCXUz MiBsZW4gPSBtc2ctPnNpemU7Cj4gKwo+ICsJYXV4LT5jYXRhbG9nLT5jbGVhcl90cmFucyhhdXgt PmNhdGFsb2csIHRydWUpOwo+ICsKPiArCWRhdGEgPSAwOwo+ICsJZGF0YSB8PSBEUF9BVVhfREFU QV9JTkRFWF9XUklURTsgLyogSU5ERVhfV1JJVEUgKi8KPiArCWRhdGEgfD0gQklUKDApOyAgLyog cmVhZCAqLwo+ICsKPiArCWF1eC0+Y2F0YWxvZy0+ZGF0YSA9IGRhdGE7Cj4gKwlhdXgtPmNhdGFs b2ctPndyaXRlX2RhdGEoYXV4LT5jYXRhbG9nKTsKPiArCj4gKwlkcCA9IG1zZy0+YnVmZmVyOwo+ ICsKPiArCS8qIGRpc2NhcmQgZmlyc3QgYnl0ZSAqLwo+ICsJZGF0YSA9IGF1eC0+Y2F0YWxvZy0+ cmVhZF9kYXRhKGF1eC0+Y2F0YWxvZyk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsr KSB7Cj4gKwkJZGF0YSA9IGF1eC0+Y2F0YWxvZy0+cmVhZF9kYXRhKGF1eC0+Y2F0YWxvZyk7Cj4g KwkJKmRwKysgPSAodTgpKChkYXRhID4+IDgpICYgMHhmZik7Cj4gKwo+ICsJCWFjdHVhbF9pID0g KGRhdGEgPj4gMTYpICYgMHhGRjsKPiArCQlpZiAoaSAhPSBhY3R1YWxfaSkKPiArCQkJcHJfd2Fy bigiSW5kZXggbWlzbWF0Y2g6IGV4cGVjdGVkICVkLCBmb3VuZCAlZFxuIiwKPiArCQkJCWksIGFj dHVhbF9pKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfYXV4X25hdGl2ZV9oYW5k bGVyKHN0cnVjdCBkcF9hdXhfcHJpdmF0ZSAqYXV4KQo+ICt7Cj4gKwl1MzIgaXNyID0gYXV4LT5j YXRhbG9nLT5pc3I7Cj4gKwo+ICsJaWYgKGlzciAmIERQX0lOVFJfQVVYX0kyQ19ET05FKQo+ICsJ CWF1eC0+YXV4X2Vycm9yX251bSA9IERQX0FVWF9FUlJfTk9ORTsKPiArCWVsc2UgaWYgKGlzciAm IERQX0lOVFJfV1JPTkdfQUREUikKPiArCQlhdXgtPmF1eF9lcnJvcl9udW0gPSBEUF9BVVhfRVJS X0FERFI7Cj4gKwllbHNlIGlmIChpc3IgJiBEUF9JTlRSX1RJTUVPVVQpCj4gKwkJYXV4LT5hdXhf ZXJyb3JfbnVtID0gRFBfQVVYX0VSUl9UT1VUOwo+ICsJaWYgKGlzciAmIERQX0lOVFJfTkFDS19E RUZFUikKPiArCQlhdXgtPmF1eF9lcnJvcl9udW0gPSBEUF9BVVhfRVJSX05BQ0s7Cj4gKwo+ICsJ Y29tcGxldGUoJmF1eC0+Y29tcCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX2F1eF9pMmNf aGFuZGxlcihzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUgKmF1eCkKPiArewo+ICsJdTMyIGlzciA9IGF1 eC0+Y2F0YWxvZy0+aXNyOwo+ICsKPiArCWlmIChpc3IgJiBEUF9JTlRSX0FVWF9JMkNfRE9ORSkg ewo+ICsJCWlmIChpc3IgJiAoRFBfSU5UUl9JMkNfTkFDSyB8IERQX0lOVFJfSTJDX0RFRkVSKSkK PiArCQkJYXV4LT5hdXhfZXJyb3JfbnVtID0gRFBfQVVYX0VSUl9OQUNLOwo+ICsJCWVsc2UKPiAr CQkJYXV4LT5hdXhfZXJyb3JfbnVtID0gRFBfQVVYX0VSUl9OT05FOwo+ICsJfSBlbHNlIHsKPiAr CQlpZiAoaXNyICYgRFBfSU5UUl9XUk9OR19BRERSKQo+ICsJCQlhdXgtPmF1eF9lcnJvcl9udW0g PSBEUF9BVVhfRVJSX0FERFI7Cj4gKwkJZWxzZSBpZiAoaXNyICYgRFBfSU5UUl9USU1FT1VUKQo+ ICsJCQlhdXgtPmF1eF9lcnJvcl9udW0gPSBEUF9BVVhfRVJSX1RPVVQ7Cj4gKwkJaWYgKGlzciAm IERQX0lOVFJfTkFDS19ERUZFUikKPiArCQkJYXV4LT5hdXhfZXJyb3JfbnVtID0gRFBfQVVYX0VS Ul9OQUNLX0RFRkVSOwo+ICsJCWlmIChpc3IgJiBEUF9JTlRSX0kyQ19OQUNLKQo+ICsJCQlhdXgt PmF1eF9lcnJvcl9udW0gPSBEUF9BVVhfRVJSX05BQ0s7Cj4gKwkJaWYgKGlzciAmIERQX0lOVFJf STJDX0RFRkVSKQo+ICsJCQlhdXgtPmF1eF9lcnJvcl9udW0gPSBEUF9BVVhfRVJSX0RFRkVSOwo+ ICsJfQo+ICsKPiArCWNvbXBsZXRlKCZhdXgtPmNvbXApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBkcF9hdXhfaXNyKHN0cnVjdCBkcF9hdXggKmRwX2F1eCkKPiArewo+ICsJc3RydWN0IGRwX2F1 eF9wcml2YXRlICphdXg7Cj4gKwo+ICsJaWYgKCFkcF9hdXgpIHsKPiArCQlwcl9lcnIoImludmFs aWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KCkknbSBub3QgMTAwJSBpZiB0aGlzIGlz IHBvc3NpYmxlIG9yIG5vdCBidXQgY29uc2lkZXIgcmVwbGFjaW5nIHRoaXMgd2l0aAoKaWYgKFdB Uk5fT04oIWRwX2F1eCkpCiAgIHJldHVybjsKClRvIGF2b2lkIHRoZSBjdXN0b20gZXJyb3IgbWVz c2FnZSB5ZXQgc3RpbGwgaGFuZGxlIHRoZSBwb3NzaWJpbGl0eSBvZgphIE5VTEwgcG9pbnRlci4g IE9mIGNvdXJzZSwgaWYgaXQgaXNuJ3QgcG9zc2libGUgdGhlbiBpdCBzaG91bGQganVzdCBiZSBy ZW1vdmVkCmVudGlyZWx5LgoKPiArCWF1eCA9IGNvbnRhaW5lcl9vZihkcF9hdXgsIHN0cnVjdCBk cF9hdXhfcHJpdmF0ZSwgZHBfYXV4KTsKPiArCj4gKwlhdXgtPmNhdGFsb2ctPmdldF9pcnEoYXV4 LT5jYXRhbG9nLCBhdXgtPmNtZF9idXN5KTsKPiArCj4gKwlpZiAoIWF1eC0+Y21kX2J1c3kpCj4g KwkJcmV0dXJuOwo+ICsKPiArCWlmIChhdXgtPm5hdGl2ZSkKPiArCQlkcF9hdXhfbmF0aXZlX2hh bmRsZXIoYXV4KTsKPiArCWVsc2UKPiArCQlkcF9hdXhfaTJjX2hhbmRsZXIoYXV4KTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgZHBfYXV4X3JlY29uZmlnKHN0cnVjdCBkcF9hdXggKmRwX2F1eCkK PiArewo+ICsJc3RydWN0IGRwX2F1eF9wcml2YXRlICphdXg7Cj4gKwo+ICsJaWYgKCFkcF9hdXgp IHsKPiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KCkFz IGFib3ZlIC0gV0FSTl9PTiBjYW4gYmUgdXNlZnVsIGhlcmUuCgo+ICsJYXV4ID0gY29udGFpbmVy X29mKGRwX2F1eCwgc3RydWN0IGRwX2F1eF9wcml2YXRlLCBkcF9hdXgpOwo+ICsKPiArCWF1eC0+ Y2F0YWxvZy0+dXBkYXRlX2F1eF9jZmcoYXV4LT5jYXRhbG9nLAo+ICsJCQlhdXgtPmNmZywgUEhZ X0FVWF9DRkcxKTsKPiArCWF1eC0+Y2F0YWxvZy0+cmVzZXQoYXV4LT5jYXRhbG9nKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgZHBfYXV4X3VwZGF0ZV9vZmZzZXRfYW5kX3NlZ21lbnQoc3RydWN0 IGRwX2F1eF9wcml2YXRlICphdXgsCj4gKwkJCQkJICAgICBzdHJ1Y3QgZHJtX2RwX2F1eF9tc2cg KmlucHV0X21zZykKPiArewo+ICsJdTMyIGNvbnN0IGVkaWRfYWRkcmVzcyA9IDB4NTA7Cj4gKwl1 MzIgY29uc3Qgc2VnbWVudF9hZGRyZXNzID0gMHgzMDsKClByZWZlciBpZiB5b3UgZGlkbid0IHVz ZSBjb25zdCB2YXJpYWJsZXMgb24gdGhlIHN0YWNrLiAgVGhleSBzZWVtIHRvIGJlIHBvcHVsYXIK aW4gdGhpcyBjb2RlIHNvIEkgd29uJ3QgcG9pbnQgdGhlbSBvdXQgZXZlcnkgdGltZS4KCj4gKwli b29sIGkyY19yZWFkID0gaW5wdXRfbXNnLT5yZXF1ZXN0ICYKPiArCQkoRFBfQVVYX0kyQ19SRUFE ICYgRFBfQVVYX05BVElWRV9SRUFEKTsKPiArCXU4ICpkYXRhID0gTlVMTDsKPiArCj4gKwlpZiAo YXV4LT5uYXRpdmUgfHwgaTJjX3JlYWQgfHwgKChpbnB1dF9tc2ctPmFkZHJlc3MgIT0gZWRpZF9h ZGRyZXNzKSAmJgo+ICsJCShpbnB1dF9tc2ctPmFkZHJlc3MgIT0gc2VnbWVudF9hZGRyZXNzKSkp Cj4gKwkJcmV0dXJuOwo+ICsKPiArCj4gKwlkYXRhID0gaW5wdXRfbXNnLT5idWZmZXI7Cj4gKwlp ZiAoaW5wdXRfbXNnLT5hZGRyZXNzID09IHNlZ21lbnRfYWRkcmVzcykKPiArCQlhdXgtPnNlZ21l bnQgPSAqZGF0YTsKPiArCWVsc2UKPiArCQlhdXgtPm9mZnNldCA9ICpkYXRhOwo+ICt9Cgo8c25p cD4KCj4gK3N0YXRpYyB2b2lkIGRwX2F1eF9pbml0KHN0cnVjdCBkcF9hdXggKmRwX2F1eCwgc3Ry dWN0IGRwX2F1eF9jZmcgKmF1eF9jZmcpCj4gK3sKPiArCXN0cnVjdCBkcF9hdXhfcHJpdmF0ZSAq YXV4Owo+ICsKPiArCWlmICghZHBfYXV4IHx8ICFhdXhfY2ZnKSB7Cj4gKwkJcHJfZXJyKCJpbnZh bGlkIGlucHV0XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9CgpQcmVmZXIgdG8gdXNlIFdBUk5fT04g aGVyZSBpbnN0ZWFkIG9mIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2UuCgo+ICsJYXV4ID0gY29udGFp bmVyX29mKGRwX2F1eCwgc3RydWN0IGRwX2F1eF9wcml2YXRlLCBkcF9hdXgpOwo+ICsKPiArCWRw X2F1eF9yZXNldF9waHlfY29uZmlnX2luZGljZXMoYXV4X2NmZyk7Cj4gKwlhdXgtPmNhdGFsb2ct PnNldHVwKGF1eC0+Y2F0YWxvZywgYXV4X2NmZyk7Cj4gKwlhdXgtPmNhdGFsb2ctPnJlc2V0KGF1 eC0+Y2F0YWxvZyk7Cj4gKwlhdXgtPmNhdGFsb2ctPmVuYWJsZShhdXgtPmNhdGFsb2csIHRydWUp Owo+ICsJYXV4LT5yZXRyeV9jbnQgPSAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9hdXhf ZGVpbml0KHN0cnVjdCBkcF9hdXggKmRwX2F1eCkKPiArewo+ICsJc3RydWN0IGRwX2F1eF9wcml2 YXRlICphdXg7Cj4gKwo+ICsJaWYgKCFkcF9hdXgpIHsKPiArCQlwcl9lcnIoImludmFsaWQgaW5w dXRcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KClBlZmVyIFdBUk5fT04uCgo+ICsJYXV4ID0gY29u dGFpbmVyX29mKGRwX2F1eCwgc3RydWN0IGRwX2F1eF9wcml2YXRlLCBkcF9hdXgpOwo+ICsKPiAr CWF1eC0+Y2F0YWxvZy0+ZW5hYmxlKGF1eC0+Y2F0YWxvZywgZmFsc2UpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGRwX2F1eF9yZWdpc3RlcihzdHJ1Y3QgZHBfYXV4ICpkcF9hdXgpCj4gK3sKPiAr CXN0cnVjdCBkcF9hdXhfcHJpdmF0ZSAqYXV4Owo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJaWYg KCFkcF9hdXgpIHsKPiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwoKUHJlZmVyIFdBUk5f T04uCgo+ICsJCXJldCA9IC1FSU5WQUw7CgpZb3UgY2FuIGp1c3QgcmV0dXJuIC1FSU5WQUw7Cgo+ ICsJCWdvdG8gZXhpdDsKPiArCX0KPiArCj4gKwlhdXggPSBjb250YWluZXJfb2YoZHBfYXV4LCBz dHJ1Y3QgZHBfYXV4X3ByaXZhdGUsIGRwX2F1eCk7Cj4gKwo+ICsJYXV4LT5kcm1fYXV4Lm5hbWUg PSAiZHB1X2RwX2F1eCI7Cj4gKwlhdXgtPmRybV9hdXguZGV2ID0gYXV4LT5kZXY7Cj4gKwlhdXgt PmRybV9hdXgudHJhbnNmZXIgPSBkcF9hdXhfdHJhbnNmZXI7Cj4gKwlyZXQgPSBkcm1fZHBfYXV4 X3JlZ2lzdGVyKCZhdXgtPmRybV9hdXgpOwo+ICsJaWYgKHJldCkgewo+ICsJCXByX2VycigiJXM6 IGZhaWxlZCB0byByZWdpc3RlciBkcm0gYXV4OiAlZFxuIiwgX19mdW5jX18sIHJldCk7CgpEb24n dCBmb3JnZXQgdGhhdCB5b3VyIHByX2ZtdCBhbHJlYWR5IHByaW50cyBfX2Z1bmNfXy4gIFlvdSBk b24ndCBuZWVkIHRvIGRvYnVsZQppdCB1cC4KCgo+ICsJCWdvdG8gZXhpdDsKClRoaXMgY2FuIGJl IHJldHVybiByZXQ7Cgo+ICsJfQo+ICsJZHBfYXV4LT5kcm1fYXV4ID0gJmF1eC0+ZHJtX2F1eDsK PiArZXhpdDoKCkxhYmVsIG5vdCBuZWVkZWQuCgo+ICsJcmV0dXJuIHJldDsKClRoaXMgY2FuIGJl IHJldHVybiAwOwoKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfYXV4X2RlcmVnaXN0ZXIoc3Ry dWN0IGRwX2F1eCAqZHBfYXV4KQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUgKmF1eDsK PiArCj4gKwlpZiAoIWRwX2F1eCkgewo+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4g KwkJcmV0dXJuOwo+ICsJfQoKUHJlZmVyIFdBUk5fT04KCj4gKwlhdXggPSBjb250YWluZXJfb2Yo ZHBfYXV4LCBzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUsIGRwX2F1eCk7Cj4gKwlkcm1fZHBfYXV4X3Vu cmVnaXN0ZXIoJmF1eC0+ZHJtX2F1eCk7Cj4gK30KPiArCj4gK3N0cnVjdCBkcF9hdXggKmRwX2F1 eF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmNhdGFsb2cs Cj4gKwkJCSAgc3RydWN0IGRwX2F1eF9jZmcgKmF1eF9jZmcpCj4gK3sKPiArCWludCByYyA9IDA7 Cj4gKwlzdHJ1Y3QgZHBfYXV4X3ByaXZhdGUgKmF1eDsKPiArCXN0cnVjdCBkcF9hdXggKmRwX2F1 eDsKPiArCj4gKwlpZiAoIWNhdGFsb2cgfHwgIWF1eF9jZmcpIHsKPiArCQlwcl9lcnIoImludmFs aWQgaW5wdXRcbiIpOwo+ICsJCXJjID0gLUVOT0RFVjsKPiArCQlnb3RvIGVycm9yOwo+ICsJfQo+ IApUaGlzIGFwcGVhcnMgdG8gb25seSBiZSBjYWxsZWQgb25jZSB3aXRoIGEga25vd24gZ29vZCB2 YWx1ZSBmb3IgY2F0YWxvZyBhbmQKYXV4X2NmZywgc28gdGhpcyBjaGVjayBkb2VzIG5vdCBhcHBl YXIgdG8gYmUgbmVlZGVkLiAgSXQgYWxzbyBpbXBsaWVzIHRoYXQgdGhlCk5VTEwgY2hlY2tzIChv ciBXQVJOX09OKSBzdWdnZXN0ZWQgZm9yIHRoZSBmdW5jdGlvbnMgYWJvdmUgYXJlIG5vdCBuZWVk ZWQgc2luY2UKYWxsIG9mIHRoZW0gYXJlIHRvIGJlIGNhbGxlZCB3aXRoIGtub3duIGdvb2QgcG9p bnRlcnMuCgpJbiBmYWN0LCBldmVuIGlmIHlvdSBrZWVwIHRoaXMgY2hlY2sgKHdpdGggYSBXQVJO X09OIGluc3RlYWQgb2YgYSBjdXN0b20gbWVzc2FnZQpvZiBjb3Vyc2UpIHlvdSBjYW4gc3RpbGwg cmVtb3ZlIHRoZSBjaGVja3MgaW4gZHBfYXV4X2lzciwgZHBfYXV4X2luaXQsCmRwX2F1eF9kZWlu aXQsIGRwX2F1eF9yZWdpc3RlciwgZHBfYXV4X2RlcmVnaXN0ZXIgYW5kIGRwX2F1eF9yZWNvbmZp ZyBiZWNhdXNlCnlvdSd2ZSBhbHJlYWR5IHZldHRlZCB0aGUgcG9pbnRlcnMuCgo+ICsJYXV4ID0g ZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCphdXgpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghYXV4 KSB7CgpUaGlzIGNhbiBqdXN0IGJlIHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwoKPiArCQlyYyA9 IC1FTk9NRU07Cj4gKwkJZ290byBlcnJvcjsKPiArCX0KPiArCj4gKwlpbml0X2NvbXBsZXRpb24o JmF1eC0+Y29tcCk7Cj4gKwlhdXgtPmNtZF9idXN5ID0gZmFsc2U7Cj4gKwltdXRleF9pbml0KCZh dXgtPm11dGV4KTsKPiArCj4gKwlhdXgtPmRldiA9IGRldjsKPiArCWF1eC0+Y2F0YWxvZyA9IGNh dGFsb2c7Cj4gKwlhdXgtPmNmZyA9IGF1eF9jZmc7Cj4gKwlkcF9hdXggPSAmYXV4LT5kcF9hdXg7 Cj4gKwlhdXgtPnJldHJ5X2NudCA9IDA7Cj4gKwo+ICsJZHBfYXV4LT5pc3IgICAgID0gZHBfYXV4 X2lzcjsKPiArCWRwX2F1eC0+aW5pdCAgICA9IGRwX2F1eF9pbml0Owo+ICsJZHBfYXV4LT5kZWlu aXQgID0gZHBfYXV4X2RlaW5pdDsKPiArCWRwX2F1eC0+ZHJtX2F1eF9yZWdpc3RlciA9IGRwX2F1 eF9yZWdpc3RlcjsKPiArCWRwX2F1eC0+ZHJtX2F1eF9kZXJlZ2lzdGVyID0gZHBfYXV4X2RlcmVn aXN0ZXI7Cj4gKwlkcF9hdXgtPnJlY29uZmlnID0gZHBfYXV4X3JlY29uZmlnOwo+ICsKPiArCXJl dHVybiBkcF9hdXg7Cj4gK2Vycm9yOgo+ICsJcmV0dXJuIEVSUl9QVFIocmMpOwpUaGlzIGxhYmVs IHNob3VsZCBub3QgYmUgbmVlZGVkLgoKPiArfQo+ICsKPiArdm9pZCBkcF9hdXhfcHV0KHN0cnVj dCBkcF9hdXggKmRwX2F1eCkKPiArewo+ICsJc3RydWN0IGRwX2F1eF9wcml2YXRlICphdXg7Cj4g Kwo+ICsJaWYgKCFkcF9hdXgpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWF1eCA9IGNvbnRhaW5lcl9v ZihkcF9hdXgsIHN0cnVjdCBkcF9hdXhfcHJpdmF0ZSwgZHBfYXV4KTsKPiArCj4gKwltdXRleF9k ZXN0cm95KCZhdXgtPm11dGV4KTsKCk11dGV4X2Rlc3Ryb3kgaXNuJ3QgbmVlZGVkIGZvciBtZW1v cnkgdGhhdCB3aWxsIG5vIGxvbmdlciBiZSB1c2VkLgoKPiArCj4gKwlkZXZtX2tmcmVlKGF1eC0+ ZGV2LCBhdXgpOwoKSWYgeW91IGFyZSB1c2luZyBkZXZtXyB5b3UgZG9uJ3QgbmVlZCB0byBjYWxs IGRldm1fa2ZyZWUuICBJZiB5b3UgZG9uJ3QgZXhwZWN0CnRvIHVzZSB0aGUgZGV2bV8gaW5mcmFz dHJ1Y3R1cmUgdG8geW91ciBhZHZhbnRhZ2UgdGhlbiBqdXN0IHVzZSBremFsbG9jKCkgaW4gdGhl CmluaXQgZnVuY3Rpb24gYW5kIG1ha2Ugc3VyZSB5b3UgYWx3YXlzIGZyZWUgaXQgYnV0IGl0IHNl ZW1zIHRvIG1lIHlvdSBjYW4ganVzdApnZXQgcmlkIG9mIGRwX2F1eF9wdXQoKSBhbmQgYmUgaGFw cHkuCgo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXV4Lmgg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2F1eC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwLi4wYzMwMGVkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZHAvZHBfYXV4LmgKPiBAQCAtMCwwICsxLDQ0IEBACj4gKy8qCj4gKyAqIENv cHlyaWdodCAoYykgMjAxMi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4gKyAqIG9u bHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u Lgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKi8KClNQRFgg aGVhZGVyIHBsZWFzZS4KCj4gKwo+ICsjaWZuZGVmIF9EUF9BVVhfSF8KPiArI2RlZmluZSBfRFBf QVVYX0hfCj4gKwo+ICsjaW5jbHVkZSAiZHBfY2F0YWxvZy5oIgo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9kcF9oZWxwZXIuaD4KPiArCj4gK2VudW0gZHBfYXV4X2Vycm9yIHsKPiArCURQX0FVWF9FUlJf Tk9ORQk9IDAsCj4gKwlEUF9BVVhfRVJSX0FERFIJPSAtMSwKPiArCURQX0FVWF9FUlJfVE9VVAk9 IC0yLAo+ICsJRFBfQVVYX0VSUl9OQUNLCT0gLTMsCj4gKwlEUF9BVVhfRVJSX0RFRkVSCT0gLTQs Cj4gKwlEUF9BVVhfRVJSX05BQ0tfREVGRVIJPSAtNSwKPiArfTsKPiArCj4gK3N0cnVjdCBkcF9h dXggewo+ICsJc3RydWN0IGRybV9kcF9hdXggKmRybV9hdXg7Cj4gKwlpbnQgKCpkcm1fYXV4X3Jl Z2lzdGVyKShzdHJ1Y3QgZHBfYXV4ICphdXgpOwo+ICsJdm9pZCAoKmRybV9hdXhfZGVyZWdpc3Rl cikoc3RydWN0IGRwX2F1eCAqYXV4KTsKPiArCXZvaWQgKCppc3IpKHN0cnVjdCBkcF9hdXggKmF1 eCk7Cj4gKwl2b2lkICgqaW5pdCkoc3RydWN0IGRwX2F1eCAqYXV4LCBzdHJ1Y3QgZHBfYXV4X2Nm ZyAqYXV4X2NmZyk7Cj4gKwl2b2lkICgqZGVpbml0KShzdHJ1Y3QgZHBfYXV4ICphdXgpOwo+ICsJ dm9pZCAoKnJlY29uZmlnKShzdHJ1Y3QgZHBfYXV4ICphdXgpOwo+ICt9Owo+ICsKPiArc3RydWN0 IGRwX2F1eCAqZHBfYXV4X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkcF9jYXRhbG9n X2F1eCAqY2F0YWxvZywKPiArCQkJICBzdHJ1Y3QgZHBfYXV4X2NmZyAqYXV4X2NmZyk7Cj4gK3Zv aWQgZHBfYXV4X3B1dChzdHJ1Y3QgZHBfYXV4ICphdXgpOwo+ICsKPiArI2VuZGlmIC8qX19EUF9B VVhfSF8qLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2NhdGFsb2cu YyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5jCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwLi41ODE4NjEyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5jCj4gQEAgLTAsMCArMSwxMTg4IEBACj4g Ky8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YW5kCj4gKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ ICsgKi8KClNQRFggaGVhZGVyIHBsZWFzZS4KCj4gKwo+ICsjZGVmaW5lIHByX2ZtdChmbXQpCSJb ZHJtLWRwXSAlczogIiBmbXQsIF9fZnVuY19fCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZGVsYXku aD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+Cj4gKwo+ICsjaW5jbHVkZSAiZHBf Y2F0YWxvZy5oIgo+ICsjaW5jbHVkZSAiZHBfcmVnLmgiCj4gKwo+ICsjZGVmaW5lIERQX0dFVF9N U0IoeCkJKHggPj4gOCkKPiArI2RlZmluZSBEUF9HRVRfTFNCKHgpCSh4ICYgMHhmZikKPiArCj4g KyNkZWZpbmUgZHBfcmVhZChvZmZzZXQpIHJlYWRsX3JlbGF4ZWQoKG9mZnNldCkpCj4gKyNkZWZp bmUgZHBfd3JpdGUob2Zmc2V0LCBkYXRhKSB3cml0ZWxfcmVsYXhlZCgoZGF0YSksIChvZmZzZXQp KQoKVGhlc2UgbWFjcm9zIGRvIG5vdCBzZXJ2ZSBhbnkgcHVycG9zZQoKPiArI2RlZmluZSBkcF9j YXRhbG9nX2dldF9wcml2KHgpIHsgXAo+ICsJc3RydWN0IGRwX2NhdGFsb2cgKmRwX2NhdGFsb2c7 IFwKPiArCWRwX2NhdGFsb2cgPSBjb250YWluZXJfb2YoeCwgc3RydWN0IGRwX2NhdGFsb2csIHgp OyBcCj4gKwljYXRhbG9nID0gY29udGFpbmVyX29mKGRwX2NhdGFsb2csIHN0cnVjdCBkcF9jYXRh bG9nX3ByaXZhdGUsIFwKPiArCQkJCWRwX2NhdGFsb2cpOyBcCj4gK30KClRoaXMgd291bGQgd29y ayBiZXR0ZXIgYXMgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIC0gaXQgd291bGRuJ3QgYmUgYXMg dWdseSBhbmQKeW91IGdldCBmcmVlIHR5cGVjaGVja2luZy4KCj4gKyNkZWZpbmUgRFBfSU5URVJS VVBUX1NUQVRVUzEgXAo+ICsJKERQX0lOVFJfQVVYX0kyQ19ET05FfCBcCj4gKwlEUF9JTlRSX1dS T05HX0FERFIgfCBEUF9JTlRSX1RJTUVPVVQgfCBcCj4gKwlEUF9JTlRSX05BQ0tfREVGRVIgfCBE UF9JTlRSX1dST05HX0RBVEFfQ05UIHwgXAo+ICsJRFBfSU5UUl9JMkNfTkFDSyB8IERQX0lOVFJf STJDX0RFRkVSIHwgXAo+ICsJRFBfSU5UUl9QTExfVU5MT0NLRUQgfCBEUF9JTlRSX0FVWF9FUlJP UikKPiArCj4gKyNkZWZpbmUgRFBfSU5UUl9NQVNLMQkJKERQX0lOVEVSUlVQVF9TVEFUVVMxIDw8 IDIpCj4gKwo+ICsjZGVmaW5lIERQX0lOVEVSUlVQVF9TVEFUVVMyIFwKPiArCShEUF9JTlRSX1JF QURZX0ZPUl9WSURFTyB8IERQX0lOVFJfSURMRV9QQVRURVJOX1NFTlQgfCBcCj4gKwlEUF9JTlRS X0ZSQU1FX0VORCB8IERQX0lOVFJfQ1JDX1VQREFURUQpCj4gKwo+ICsjZGVmaW5lIERQX0lOVFJf TUFTSzIJCShEUF9JTlRFUlJVUFRfU1RBVFVTMiA8PCAyKQo+ICsKPiArc3RhdGljIHU4IGNvbnN0 IHZtX3ByZV9lbXBoYXNpc1s0XVs0XSA9IHsKPiArCXsweDAwLCAweDBCLCAweDEyLCAweEZGfSwg ICAgICAgLyogcGUwLCAwIGRiICovCj4gKwl7MHgwMCwgMHgwQSwgMHgxMiwgMHhGRn0sICAgICAg IC8qIHBlMSwgMy41IGRiICovCj4gKwl7MHgwMCwgMHgwQywgMHhGRiwgMHhGRn0sICAgICAgIC8q IHBlMiwgNi4wIGRiICovCj4gKwl7MHhGRiwgMHhGRiwgMHhGRiwgMHhGRn0gICAgICAgIC8qIHBl MywgOS41IGRiICovCj4gK307Cj4gKwo+ICsvKiB2b2x0YWdlIHN3aW5nLCAwLjJ2IGFuZCAxLjB2 IGFyZSBub3Qgc3VwcG9ydCAqLwo+ICtzdGF0aWMgdTggY29uc3Qgdm1fdm9sdGFnZV9zd2luZ1s0 XVs0XSA9IHsKPiArCXsweDA3LCAweDBGLCAweDE0LCAweEZGfSwgLyogc3cwLCAwLjR2ICAqLwo+ ICsJezB4MTEsIDB4MUQsIDB4MUYsIDB4RkZ9LCAvKiBzdzEsIDAuNiB2ICovCj4gKwl7MHgxOCwg MHgxRiwgMHhGRiwgMHhGRn0sIC8qIHN3MSwgMC44IHYgKi8KPiArCXsweEZGLCAweEZGLCAweEZG LCAweEZGfSAgLyogc3cxLCAxLjIgdiwgb3B0aW9uYWwgKi8KPiArfTsKPiArCj4gKy8qIGF1ZGlv IHJlbGF0ZWQgY2F0YWxvZyBmdW5jdGlvbnMgKi8KPiArc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0 ZSB7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwlzdHJ1Y3QgZHBfaW8gKmlvOwo+ICsKPiAr CXUzMiAoKmF1ZGlvX21hcClbRFBfQVVESU9fU0RQX0hFQURFUl9NQVhdOwo+ICsJc3RydWN0IGRw X2NhdGFsb2cgZHBfY2F0YWxvZzsKPiArfTsKPiArCj4gKy8qIGF1eCByZWxhdGVkIGNhdGFsb2cg ZnVuY3Rpb25zICovCj4gK3N0YXRpYyB1MzIgZHBfY2F0YWxvZ19hdXhfcmVhZF9kYXRhKHN0cnVj dCBkcF9jYXRhbG9nX2F1eCAqYXV4KQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRl ICpjYXRhbG9nOwo+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+ICsKPiArCWlmICghYXV4KSB7Cj4g KwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQlnb3RvIGVuZDsKPiArCX0KCk5vdCBz dXJlIGlmIHRoaXMgY2hlY2sgaXMgbmVlZGVkIChJJ20gYXNzdW1pbmcgSSdsbCBmaWd1cmUgaXQg YXMgd2UgZ28pIGJ1dCBhcwphYm92ZSwgcmVwbGFjaW5nIHRoaXMgd2l0aCBhIGhhbmR5CgppZiAo V0FSTl9PTighYXV4KSkKICAgIHJldHVybiAwOwoKSXMgcHJlZmVycmVkIG92ZXIgYSBjdXN0b20g bG9nIG1lc3NhZ2UKCj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihhdXgpOwoKRnVuY3Rpb24g bGlrZSBtYWNyb3MgdGhhdCBzZXQgYW4gaW1wbGljaXQgdmFyaWFibGUgYXJlIHNvIHZlcnkgZGFu Z2Vyb3VzIC0KcGxlYXNlIHVzZSBhIHN0YXRpYyBpbmxpbmUgYXMgSSBzdWdnc3RlZCBhYm92ZS4K Cj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2F1eC5iYXNlOwo+ICsKPiArCXJldHVybiBkcF9y ZWFkKGJhc2UgKyBEUF9BVVhfREFUQSk7Cj4gK2VuZDoKVGhpcyBzaG91bGRuJ3QgYmUgbmVlZGVk IGlmIHlvdSByZXR1cm4gaW1tZWRpYXRlbHkgYWJvdmUuCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIGludCBkcF9jYXRhbG9nX2F1eF93cml0ZV9kYXRhKHN0cnVjdCBkcF9jYXRhbG9n X2F1eCAqYXV4KQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJp dmF0ZSAqY2F0YWxvZzsKPiArCXZvaWQgX19pb21lbSAqYmFzZTsKPiArCj4gKwlpZiAoIWF1eCkg ewo+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmMgPSAtRUlOVkFMOwo+ICsJ CWdvdG8gZW5kOwo+ICsJfQoKU2FtZSBhcyBhYm92ZQoKPiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYo YXV4KTsKPiArCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfYXV4LmJhc2U7Cj4gKwo+ICsJZHBfd3Jp dGUoYmFzZSArIERQX0FVWF9EQVRBLCBhdXgtPmRhdGEpOwo+ICtlbmQ6Cj4gKwlyZXR1cm4gcmM7 CgpTYW1lIGFzIGFib3ZlCj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfY2F0YWxvZ19hdXhfd3Jp dGVfdHJhbnMoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgpCj4gK3sKPiArCWludCByYyA9IDA7 Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsJdm9pZCBfX2lvbWVt ICpiYXNlOwo+ICsKPiArCWlmICghYXV4KSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4i KTsKPiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJZ290byBlbmQ7Cj4gKwl9Cj4gKwo+ICsJZHBfY2F0 YWxvZ19nZXRfcHJpdihhdXgpOwo+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9hdXguYmFzZTsK PiArCj4gKwlkcF93cml0ZShiYXNlICsgRFBfQVVYX1RSQU5TX0NUUkwsIGF1eC0+ZGF0YSk7Cj4g K2VuZDoKPiArCXJldHVybiByYzsKPiArfQoKZHBfY2F0YWxvZ19hdXhfd3JpdGVfZGF0YSBhbmQg ZHBfY2F0YWxvZ19hdXhfd3JpdGVfdHJhbnMgYXJlIGJhc2ljYWxseSB0aGUgc2FtZQpmdW5jdGlv biBleGNlcHQgdGhlIHJlZ2lzdGVyIG9mZnNldC4gVGhlcmUgbXVzdCBiZSBzb21lIGNvbnNsaWRh dGlvbiB0aGF0IGNhbiBiZQpkb25lLgoKPiArc3RhdGljIGludCBkcF9jYXRhbG9nX2F1eF9jbGVh cl90cmFucyhzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwgYm9vbCByZWFkKQo+ICt7Cj4gKwlp bnQgcmMgPSAwOwo+ICsJdTMyIGRhdGEgPSAwOwo+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0 ZSAqY2F0YWxvZzsKPiArCXZvaWQgX19pb21lbSAqYmFzZTsKPiArCj4gKwlpZiAoIWF1eCkgewo+ ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmMgPSAtRUlOVkFMOwo+ICsJCWdv dG8gZW5kOwo+ICsJfQoKVXNlIFdBUk5fT04oKSBoZXJlIGFuZCB0aHJvdWdob3V0IGZvciBhbGwg dGhlc2UgZHAgY2F0YWxvZyBmdW5jdGlvbiBob29rcy4KCj4gKwlkcF9jYXRhbG9nX2dldF9wcml2 KGF1eCk7Cj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2F1eC5iYXNlOwo+ICsKPiArCWlmIChy ZWFkKSB7Cj4gKwkJZGF0YSA9IGRwX3JlYWQoYmFzZSArIERQX0FVWF9UUkFOU19DVFJMKTsKPiAr CQlkYXRhICY9IH5CSVQoOSk7Cj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX0FVWF9UUkFOU19DVFJM LCBkYXRhKTsKPiArCX0gZWxzZSB7Cj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX0FVWF9UUkFOU19D VFJMLCAwKTsKPiArCX0KPiArZW5kOgo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBkcF9jYXRhbG9nX2F1eF9yZXNldChzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCkKPiAr ewo+ICsJdTMyIGF1eF9jdHJsOwo+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxv ZzsKPiArCXZvaWQgX19pb21lbSAqYmFzZTsKPiArCj4gKwlpZiAoIWF1eCkgewo+ICsJCXByX2Vy cigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRwX2NhdGFs b2dfZ2V0X3ByaXYoYXV4KTsKPiArCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfYXV4LmJhc2U7Cj4g Kwo+ICsJYXV4X2N0cmwgPSBkcF9yZWFkKGJhc2UgKyBEUF9BVVhfQ1RSTCk7Cj4gKwo+ICsJYXV4 X2N0cmwgfD0gQklUKDEpOwo+ICsJZHBfd3JpdGUoYmFzZSArIERQX0FVWF9DVFJMLCBhdXhfY3Ry bCk7Cj4gKwl1c2xlZXBfcmFuZ2UoMTAwMCwgMTAxMCk7IC8qIGgvdyByZWNvbW1lbmRlZCBkZWxh eSAqLwo+ICsKPiArCWF1eF9jdHJsICY9IH5CSVQoMSk7Cj4gKwlkcF93cml0ZShiYXNlICsgRFBf QVVYX0NUUkwsIGF1eF9jdHJsKTsKPiArCXdtYigpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBk cF9jYXRhbG9nX2F1eF9lbmFibGUoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgsIGJvb2wgZW5h YmxlKQo+ICt7Cj4gKwl1MzIgYXV4X2N0cmw7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRl ICpjYXRhbG9nOwo+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+ICsKPiArCWlmICghYXV4KSB7Cj4g KwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwlkcF9j YXRhbG9nX2dldF9wcml2KGF1eCk7Cj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2F1eC5iYXNl OwoKRXZlbiBhdCB0aGUgdmVyeSB3b3JzZSBhIGNvbW1vbiBmdW5jdGlvbiB0byBkZXJpdmUgdGhl IGJhc2Ugd291bGQgc2F2ZQpsaW5lcyBvZiBjb2RlIGdpdmVuIGhvdyBtdWNoIGl0IGdldHMgdXNl ZC4KCj4gKwo+ICsJYXV4X2N0cmwgPSBkcF9yZWFkKGJhc2UgKyBEUF9BVVhfQ1RSTCk7Cj4gKwo+ ICsJaWYgKGVuYWJsZSkgewo+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9USU1FT1VUX0NPVU5ULCAw eGZmZmYpOwo+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9BVVhfTElNSVRTLCAweGZmZmYpOwo+ICsJ CWF1eF9jdHJsIHw9IEJJVCgwKTsKPiArCX0gZWxzZSB7Cj4gKwkJYXV4X2N0cmwgJj0gfkJJVCgw KTsKPiArCX0KPiArCj4gKwlkcF93cml0ZShiYXNlICsgRFBfQVVYX0NUUkwsIGF1eF9jdHJsKTsK PiArfQoKPHNuaXA+Cgo+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2N0cmxfc3RhdGVfY3RybChz dHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCB1MzIgc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBk cF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4gKwo+ ICsJaWYgKCFjdHJsKSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQlyZXR1 cm47Cj4gKwl9Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKPiArCWJhc2UgPSBj YXRhbG9nLT5pby0+ZHBfbGluay5iYXNlOwo+ICsKPiArCWRwX3dyaXRlKGJhc2UgKyBEUF9TVEFU RV9DVFJMLCBzdGF0ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF9j b25maWdfY3RybChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCB1MzIgY2ZnKQo+ICt7Cj4g KwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsJdm9pZCBfX2lvbWVtICps aW5rX2Jhc2U7Cj4gKwo+ICsJaWYgKCFjdHJsKSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0 XG4iKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJs KTsKPiArCWxpbmtfYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJhc2U7Cj4gKwo+ICsJcHJf ZGVidWcoIkRQX0NPTkZJR1VSQVRJT05fQ1RSTD0weCV4XG4iLCBjZmcpOwo+ICsKPiArCWRwX3dy aXRlKGxpbmtfYmFzZSArIERQX0NPTkZJR1VSQVRJT05fQ1RSTCwgY2ZnKTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX2xhbmVfbWFwcGluZyhzdHJ1Y3QgZHBfY2F0YWxv Z19jdHJsICpjdHJsKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9n Owo+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+ICsKPiArCWlmICghY3RybCkgewo+ICsJCXByX2Vy cigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRwX2NhdGFs b2dfZ2V0X3ByaXYoY3RybCk7Cj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsK PiArCj4gKwlkcF93cml0ZShiYXNlICsgRFBfTE9HSUNBTDJQSFlTSUNBTF9MQU5FX01BUFBJTkcs IDB4ZTQpOwo+ICt9Cj4KQ29uc29saWRhdGlvbiBvZiBkcF9saW5rIHdyaXRlIGNvdWxkIGFsc28g YmUgZG9uZSBhbW9uZyB0aGVzZSB0aHJlZS4KCj4gK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3Ry bF9tYWlubGlua19jdHJsKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsCj4gKwkJCQkJCWJv b2wgZW5hYmxlKQo+ICt7Cj4gKwl1MzIgbWFpbmxpbmtfY3RybDsKPiArCXN0cnVjdCBkcF9jYXRh bG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4gKwo+ICsJaWYg KCFjdHJsKSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQlyZXR1cm47Cj4g Kwl9Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKPiArCWJhc2UgPSBjYXRhbG9n LT5pby0+ZHBfbGluay5iYXNlOwo+ICsKPiArCWlmIChlbmFibGUpIHsKPiArCQlkcF93cml0ZShi YXNlICsgRFBfTUFJTkxJTktfQ1RSTCwgMHgwMjAwMDAwMCk7Cj4gKwkJd21iKCk7IC8qIG1ha2Ug c3VyZSBtYWlubGluayBpcyB0dXJuZWQgb2ZmIGJlZm9yZSByZXNldCAqLwo+ICsJCWRwX3dyaXRl KGJhc2UgKyBEUF9NQUlOTElOS19DVFJMLCAweDAyMDAwMDAyKTsKPiArCQl3bWIoKTsgLyogbWFr ZSBzdXJlIG1haW5saW5rIGVudGVyZWQgcmVzZXQgKi8KPiArCQlkcF93cml0ZShiYXNlICsgRFBf TUFJTkxJTktfQ1RSTCwgMHgwMjAwMDAwMCk7Cj4gKwkJd21iKCk7IC8qIG1ha2Ugc3VyZSBtYWlu bGluayByZXNldCBkb25lICovCj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX01BSU5MSU5LX0NUUkws IDB4MDIwMDAwMDEpOwo+ICsJCXdtYigpOyAvKiBtYWtlIHN1cmUgbWFpbmxpbmsgdHVybmVkIG9u ICovCj4gKwl9IGVsc2Ugewo+ICsJCW1haW5saW5rX2N0cmwgPSBkcF9yZWFkKGJhc2UgKyBEUF9N QUlOTElOS19DVFJMKTsKPiArCQltYWlubGlua19jdHJsICY9IH5CSVQoMCk7Cj4gKwkJZHBfd3Jp dGUoYmFzZSArIERQX01BSU5MSU5LX0NUUkwsIG1haW5saW5rX2N0cmwpOwo+ICsJfQo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2N0cmxfY29uZmlnX21pc2Moc3RydWN0IGRwX2Nh dGFsb2dfY3RybCAqY3RybCwKPiArCQkJCQl1MzIgY2MsIHUzMiB0YikKPiArewo+ICsJdTMyIG1p c2NfdmFsOwo+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPiArCXZvaWQg X19pb21lbSAqYmFzZTsKPiArCj4gKwlpZiAoIWN0cmwpIHsKPiArCQlwcl9lcnIoImludmFsaWQg aW5wdXRcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlkcF9jYXRhbG9nX2dldF9wcml2 KGN0cmwpOwo+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJhc2U7Cj4gKwo+ICsJbWlz Y192YWwgPSBkcF9yZWFkKGJhc2UgKyBEUF9NSVNDMV9NSVNDMCk7Cj4gKwltaXNjX3ZhbCB8PSBj YzsKPiArCW1pc2NfdmFsIHw9ICh0YiA8PCA1KTsKPiArCW1pc2NfdmFsIHw9IEJJVCgwKTsgLyog Q29uZmlndXJlIGNsb2NrIHRvIHN5bmNocm9ub3VzIG1vZGUgKi8KPiArCj4gKwlwcl9kZWJ1Zygi bWlzYyBzZXR0aW5ncyA9IDB4JXhcbiIsIG1pc2NfdmFsKTsKPiArCWRwX3dyaXRlKGJhc2UgKyBE UF9NSVNDMV9NSVNDMCwgbWlzY192YWwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9jYXRh bG9nX2N0cmxfY29uZmlnX21zYShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLAo+ICsJCQkJ CXUzMiByYXRlLCB1MzIgc3RyZWFtX3JhdGVfa2h6LAo+ICsJCQkJCWJvb2wgZml4ZWRfbnZpZCkK PiArewo+ICsJdTMyIHBpeGVsX20sIHBpeGVsX247Cj4gKwl1MzIgbXZpZCwgbnZpZDsKPiArCXU2 NCBtdmlkX2NhbGM7Cj4gKwl1MzIgY29uc3QgbnZpZF9maXhlZCA9IDB4ODAwMDsKPiArCXUzMiBj b25zdCBsaW5rX3JhdGVfaGJyMiA9IDU0MDAwMDsKPiArCXUzMiBjb25zdCBsaW5rX3JhdGVfaGJy MyA9IDgxMDAwMDsKClB1dCB0aGVzZSBjb25zdGFudHMgaW5saW5lIHJhdGhlciB0aGFuIHVzaW5n IGEgY29uc3Qgb24gdGhlIHN0YWNrLgoKPiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNh dGFsb2c7Cj4gKwl2b2lkIF9faW9tZW0gKmJhc2VfY2MsICpiYXNlX2N0cmw7Cj4gKwo+ICsJaWYg KCFjdHJsKSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQlyZXR1cm47Cj4g Kwl9Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJsKTsKPiArCWlmIChmaXhlZF9udmlk KSB7Cj4gKwkJcHJfZGVidWcoInVzZSBmaXhlZCBOVklEPTB4JXhcbiIsIG52aWRfZml4ZWQpOwo+ ICsJCW52aWQgPSBudmlkX2ZpeGVkOwoKPiArCj4gKwkJcHJfZGVidWcoImxpbmsgcmF0ZT0lZGti cHMsIHN0cmVhbV9yYXRlX2toej0ldUtoeiIsCj4gKwkJCXJhdGUsIHN0cmVhbV9yYXRlX2toeik7 Cj4gKwo+ICsJCS8qCj4gKwkJICogRm9yIGludGVybWVkaWF0ZSByZXN1bHRzLCB1c2UgNjQgYml0 IGFyaXRobWV0aWMgdG8gYXZvaWQKPiArCQkgKiBsb3NzIG9mIHByZWNpc2lvbi4KPiArCQkgKi8K PiArCQltdmlkX2NhbGMgPSAodTY0KSBzdHJlYW1fcmF0ZV9raHogKiBudmlkOwoKWW91IHNldCBh IGNvbnN0IHZhcmlhYmxlLCB0aGVuIHlvdSBzdGUgYSBub3JtYWwgdmFyaWFibGUgYW5kIHlvdSBv bmx5IHVzZSBpdApvbmNlIC0geW91IGNvdWxkIGN1dCBvdXQgYWxsIHRoZSBtaWRkbGVtZW4gYnkg anVzdCBoYXJkY29kaW5nIDB4ODAwMCBoZXJlLgoKPiArCQltdmlkX2NhbGMgPSBkaXZfdTY0KG12 aWRfY2FsYywgcmF0ZSk7Cj4gKwo+ICsJCS8qCj4gKwkJICogdHJ1bmNhdGUgYmFjayB0byAzMiBi aXRzIGFzIHRoaXMgZmluYWwgZGl2aWRlZCB2YWx1ZSB3aWxsCj4gKwkJICogYWx3YXlzIGJlIHdp dGhpbiB0aGUgcmFuZ2Ugb2YgYSAzMiBiaXQgdW5zaWduZWQgaW50Lgo+ICsJCSAqLwo+ICsJCW12 aWQgPSAodTMyKSBtdmlkX2NhbGM7Cj4gKwl9IGVsc2Ugewo+ICsJCWJhc2VfY2MgPSBjYXRhbG9n LT5pby0+ZHBfY2NfaW8uYmFzZTsKPiArCj4gKwkJcGl4ZWxfbSA9IGRwX3JlYWQoYmFzZV9jYyAr IE1NU1NfRFBfUElYRUxfTSk7Cj4gKwkJcGl4ZWxfbiA9IGRwX3JlYWQoYmFzZV9jYyArIE1NU1Nf RFBfUElYRUxfTik7Cj4gKwkJcHJfZGVidWcoInBpeGVsX209MHgleCwgcGl4ZWxfbj0weCV4XG4i LCBwaXhlbF9tLCBwaXhlbF9uKTsKPiArCj4gKwkJbXZpZCA9IChwaXhlbF9tICYgMHhGRkZGKSAq IDU7Cj4gKwkJbnZpZCA9ICgweEZGRkYgJiAofnBpeGVsX24pKSArIChwaXhlbF9tICYgMHhGRkZG KTsKPiArCj4gKwkJcHJfZGVidWcoInJhdGUgPSAlZFxuIiwgcmF0ZSk7Cj4gKwo+ICsJCWlmIChs aW5rX3JhdGVfaGJyMiA9PSByYXRlKQo+ICsJCQludmlkICo9IDI7Cj4gKwo+ICsJCWlmIChsaW5r X3JhdGVfaGJyMyA9PSByYXRlKQo+ICsJCQludmlkICo9IDM7Cj4gKwl9Cj4gKwo+ICsJYmFzZV9j dHJsID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKPiArCXByX2RlYnVnKCJtdmlkPTB4JXgs IG52aWQ9MHgleFxuIiwgbXZpZCwgbnZpZCk7Cj4gKwlkcF93cml0ZShiYXNlX2N0cmwgKyBEUF9T T0ZUV0FSRV9NVklELCBtdmlkKTsKPiArCWRwX3dyaXRlKGJhc2VfY3RybCArIERQX1NPRlRXQVJF X05WSUQsIG52aWQpOwo+ICt9Cgo8c25pcD4KCj4gK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfYXVk aW9fZ2V0X2hlYWRlcihzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqYXVkaW8pCj4gK3sKPiArCXN0 cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwl1MzIgKCpzZHBfbWFwKVtEUF9B VURJT19TRFBfSEVBREVSX01BWF07Cj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4gKwllbnVtIGRw X2NhdGFsb2dfYXVkaW9fc2RwX3R5cGUgc2RwOwo+ICsJZW51bSBkcF9jYXRhbG9nX2F1ZGlvX2hl YWRlcl90eXBlIGhlYWRlcjsKPiArCj4gKwlpZiAoIWF1ZGlvKQo+ICsJCXJldHVybjsKPiArCj4g KwlkcF9jYXRhbG9nX2dldF9wcml2KGF1ZGlvKTsKPiArCj4gKwliYXNlICAgID0gY2F0YWxvZy0+ aW8tPmRwX2xpbmsuYmFzZTsKPiArCXNkcF9tYXAgPSBjYXRhbG9nLT5hdWRpb19tYXA7Cj4gKwlz ZHAgICAgID0gYXVkaW8tPnNkcF90eXBlOwo+ICsJaGVhZGVyICA9IGF1ZGlvLT5zZHBfaGVhZGVy OwoKSSdtIGFzc3VtaW5nIHRoYXQgd2hvZXZlciBzZXRzIHVwIHRoZSBjYXRhbG9nIGluIHRoZSBm aXJzdCBwbGFjZSBpcyB2ZXJpZnlpbmcKdGhhdCBzZHAgYW5kIGhlYWRlciBhcmUgYm90aCBpbiBi b3VuZHMgZm9yIHRoZSBhdWRpb19tYXAgYXJyYXk/Cgo+ICsJYXVkaW8tPmRhdGEgPSBkcF9yZWFk KGJhc2UgKyBzZHBfbWFwW3NkcF1baGVhZGVyXSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRw X2NhdGFsb2dfYXVkaW9fc2V0X2hlYWRlcihzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqYXVkaW8p Cj4gK3sKPiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwl1MzIgKCpz ZHBfbWFwKVtEUF9BVURJT19TRFBfSEVBREVSX01BWF07Cj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7 Cj4gKwllbnVtIGRwX2NhdGFsb2dfYXVkaW9fc2RwX3R5cGUgc2RwOwo+ICsJZW51bSBkcF9jYXRh bG9nX2F1ZGlvX2hlYWRlcl90eXBlIGhlYWRlcjsKPiArCXUzMiBkYXRhOwo+ICsKPiArCWlmICgh YXVkaW8pCj4gKwkJcmV0dXJuOwo+ICsKPiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXVkaW8pOwo+ ICsKPiArCWJhc2UgICAgPSBjYXRhbG9nLT5pby0+ZHBfbGluay5iYXNlOwo+ICsJc2RwX21hcCA9 IGNhdGFsb2ctPmF1ZGlvX21hcDsKPiArCXNkcCAgICAgPSBhdWRpby0+c2RwX3R5cGU7Cj4gKwlo ZWFkZXIgID0gYXVkaW8tPnNkcF9oZWFkZXI7Cj4gKwlkYXRhICAgID0gYXVkaW8tPmRhdGE7CgpT YW1lIHF1ZXN0aW9uLgoKPiArCj4gKwlkcF93cml0ZShiYXNlICsgc2RwX21hcFtzZHBdW2hlYWRl cl0sIGRhdGEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2F1ZGlvX2NvbmZp Z19hY3Ioc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gKmF1ZGlvKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBf Y2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+ICsJdTMy IGFjcl9jdHJsLCBzZWxlY3Q7Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihhdWRpbyk7Cj4g Kwo+ICsJc2VsZWN0ID0gYXVkaW8tPmRhdGE7Cj4gKwliYXNlICAgPSBjYXRhbG9nLT5pby0+ZHBf bGluay5iYXNlOwo+ICsKPiArCWFjcl9jdHJsID0gc2VsZWN0IDw8IDQgfCBCSVQoMzEpIHwgQklU KDgpIHwgQklUKDE0KTsKPiArCj4gKwlwcl9kZWJ1Zygic2VsZWN0ID0gMHgleCwgYWNyX2N0cmwg PSAweCV4XG4iLCBzZWxlY3QsIGFjcl9jdHJsKTsKPiArCj4gKwlkcF93cml0ZShiYXNlICsgTU1T U19EUF9BVURJT19BQ1JfQ1RSTCwgYWNyX2N0cmwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBk cF9jYXRhbG9nX2F1ZGlvX3NhZmVfdG9fZXhpdF9sZXZlbChzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRp byAqYXVkaW8pCj4gK3sKPiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4g Kwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4gKwl1MzIgbWFpbmxpbmtfbGV2ZWxzLCBzYWZlX3RvX2V4 aXRfbGV2ZWw7Cj4gKwo+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihhdWRpbyk7Cj4gKwo+ICsJYmFz ZSAgID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKPiArCXNhZmVfdG9fZXhpdF9sZXZlbCA9 IGF1ZGlvLT5kYXRhOwo+ICsKPiArCW1haW5saW5rX2xldmVscyA9IGRwX3JlYWQoYmFzZSArIERQ X01BSU5MSU5LX0xFVkVMUyk7Cj4gKwltYWlubGlua19sZXZlbHMgJj0gMHhGRTA7Cj4gKwltYWlu bGlua19sZXZlbHMgfD0gc2FmZV90b19leGl0X2xldmVsOwo+ICsKPiArCXByX2RlYnVnKCJtYWlu bGlua19sZXZlbCA9IDB4JXgsIHNhZmVfdG9fZXhpdF9sZXZlbCA9IDB4JXhcbiIsCj4gKwkJCW1h aW5saW5rX2xldmVscywgc2FmZV90b19leGl0X2xldmVsKTsKPiArCj4gKwlkcF93cml0ZShiYXNl ICsgRFBfTUFJTkxJTktfTEVWRUxTLCBtYWlubGlua19sZXZlbHMpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBkcF9jYXRhbG9nX2F1ZGlvX2VuYWJsZShzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAq YXVkaW8pCj4gK3sKPiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4gKwl2 b2lkIF9faW9tZW0gKmJhc2U7Cj4gKwlib29sIGVuYWJsZTsKPiArCXUzMiBhdWRpb19jdHJsOwo+ ICsKPiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXVkaW8pOwo+ICsKPiArCWJhc2UgICA9IGNhdGFs b2ctPmlvLT5kcF9saW5rLmJhc2U7Cj4gKwllbmFibGUgPSAhIWF1ZGlvLT5kYXRhOwo+ICsKPiAr CWF1ZGlvX2N0cmwgPSBkcF9yZWFkKGJhc2UgKyBNTVNTX0RQX0FVRElPX0NGRyk7Cj4gKwo+ICsJ aWYgKGVuYWJsZSkKPiArCQlhdWRpb19jdHJsIHw9IEJJVCgwKTsKPiArCWVsc2UKPiArCQlhdWRp b19jdHJsICY9IH5CSVQoMCk7Cj4gKwo+ICsJcHJfZGVidWcoImRwX2F1ZGlvX2NmZyA9IDB4JXhc biIsIGF1ZGlvX2N0cmwpOwo+ICsJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfQVVESU9fQ0ZHLCBh dWRpb19jdHJsKTsKPiArCj4gKwkvKiBtYWtlIHN1cmUgYXVkaW8gZW5naW5lIGlzIGRpc2FibGVk ICovCj4gKwl3bWIoKTsKPiArfQo+ICsKPiArc3RydWN0IGRwX2NhdGFsb2cgKmRwX2NhdGFsb2df Z2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRwX2lvICppbykKPiArewo+ICsJaW50IHJj ID0gMDsKPiArCXN0cnVjdCBkcF9jYXRhbG9nICpkcF9jYXRhbG9nOwo+ICsJc3RydWN0IGRwX2Nh dGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPiArCXN0cnVjdCBkcF9jYXRhbG9nX2F1eCBhdXggPSB7 Cj4gKwkJLnJlYWRfZGF0YSAgICAgPSBkcF9jYXRhbG9nX2F1eF9yZWFkX2RhdGEsCj4gKwkJLndy aXRlX2RhdGEgICAgPSBkcF9jYXRhbG9nX2F1eF93cml0ZV9kYXRhLAo+ICsJCS53cml0ZV90cmFu cyAgID0gZHBfY2F0YWxvZ19hdXhfd3JpdGVfdHJhbnMsCj4gKwkJLmNsZWFyX3RyYW5zICAgPSBk cF9jYXRhbG9nX2F1eF9jbGVhcl90cmFucywKPiArCQkucmVzZXQgICAgICAgICA9IGRwX2NhdGFs b2dfYXV4X3Jlc2V0LAo+ICsJCS51cGRhdGVfYXV4X2NmZyA9IGRwX2NhdGFsb2dfYXV4X3VwZGF0 ZV9jZmcsCj4gKwkJLmVuYWJsZSAgICAgICAgPSBkcF9jYXRhbG9nX2F1eF9lbmFibGUsCj4gKwkJ LnNldHVwICAgICAgICAgPSBkcF9jYXRhbG9nX2F1eF9zZXR1cCwKPiArCQkuZ2V0X2lycSAgICAg ICA9IGRwX2NhdGFsb2dfYXV4X2dldF9pcnEsCj4gKwl9Owo+ICsJc3RydWN0IGRwX2NhdGFsb2df Y3RybCBjdHJsID0gewo+ICsJCS5zdGF0ZV9jdHJsICAgICA9IGRwX2NhdGFsb2dfY3RybF9zdGF0 ZV9jdHJsLAo+ICsJCS5jb25maWdfY3RybCAgICA9IGRwX2NhdGFsb2dfY3RybF9jb25maWdfY3Ry bCwKPiArCQkubGFuZV9tYXBwaW5nICAgPSBkcF9jYXRhbG9nX2N0cmxfbGFuZV9tYXBwaW5nLAo+ ICsJCS5tYWlubGlua19jdHJsICA9IGRwX2NhdGFsb2dfY3RybF9tYWlubGlua19jdHJsLAo+ICsJ CS5jb25maWdfbWlzYyAgICA9IGRwX2NhdGFsb2dfY3RybF9jb25maWdfbWlzYywKPiArCQkuY29u ZmlnX21zYSAgICAgPSBkcF9jYXRhbG9nX2N0cmxfY29uZmlnX21zYSwKPiArCQkuc2V0X3BhdHRl cm4gICAgPSBkcF9jYXRhbG9nX2N0cmxfc2V0X3BhdHRlcm4sCj4gKwkJLnJlc2V0ICAgICAgICAg ID0gZHBfY2F0YWxvZ19jdHJsX3Jlc2V0LAo+ICsJCS51c2JfcmVzZXQgICAgICA9IGRwX2NhdGFs b2dfY3RybF91c2JfcmVzZXQsCj4gKwkJLm1haW5saW5rX3JlYWR5ID0gZHBfY2F0YWxvZ19jdHJs X21haW5saW5rX3JlYWR5LAo+ICsJCS5lbmFibGVfaXJxICAgICA9IGRwX2NhdGFsb2dfY3RybF9l bmFibGVfaXJxLAo+ICsJCS5ocGRfY29uZmlnICAgICA9IGRwX2NhdGFsb2dfY3RybF9ocGRfY29u ZmlnLAo+ICsJCS5waHlfcmVzZXQgICAgICA9IGRwX2NhdGFsb2dfY3RybF9waHlfcmVzZXQsCj4g KwkJLnBoeV9sYW5lX2NmZyAgID0gZHBfY2F0YWxvZ19jdHJsX3BoeV9sYW5lX2NmZywKPiArCQku dXBkYXRlX3Z4X3B4ICAgPSBkcF9jYXRhbG9nX2N0cmxfdXBkYXRlX3Z4X3B4LAo+ICsJCS5nZXRf aW50ZXJydXB0ICA9IGRwX2NhdGFsb2dfY3RybF9nZXRfaW50ZXJydXB0LAo+ICsJCS51cGRhdGVf dHJhbnNmZXJfdW5pdCA9IGRwX2NhdGFsb2dfY3RybF91cGRhdGVfdHJhbnNmZXJfdW5pdCwKPiAr CQkuc2VuZF9waHlfcGF0dGVybiAgICA9IGRwX2NhdGFsb2dfY3RybF9zZW5kX3BoeV9wYXR0ZXJu LAo+ICsJCS5yZWFkX3BoeV9wYXR0ZXJuID0gZHBfY2F0YWxvZ19jdHJsX3JlYWRfcGh5X3BhdHRl cm4sCj4gKwl9Owo+ICsJc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gYXVkaW8gPSB7Cj4gKwkJLmlu aXQgICAgICAgPSBkcF9jYXRhbG9nX2F1ZGlvX2luaXQsCj4gKwkJLmNvbmZpZ19hY3IgPSBkcF9j YXRhbG9nX2F1ZGlvX2NvbmZpZ19hY3IsCj4gKwkJLmVuYWJsZSAgICAgPSBkcF9jYXRhbG9nX2F1 ZGlvX2VuYWJsZSwKPiArCQkuY29uZmlnX3NkcCA9IGRwX2NhdGFsb2dfYXVkaW9fY29uZmlnX3Nk cCwKPiArCQkuc2V0X2hlYWRlciA9IGRwX2NhdGFsb2dfYXVkaW9fc2V0X2hlYWRlciwKPiArCQku Z2V0X2hlYWRlciA9IGRwX2NhdGFsb2dfYXVkaW9fZ2V0X2hlYWRlciwKPiArCQkuc2FmZV90b19l eGl0X2xldmVsID0gZHBfY2F0YWxvZ19hdWRpb19zYWZlX3RvX2V4aXRfbGV2ZWwsCj4gKwl9Owo+ ICsJc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgcGFuZWwgPSB7Cj4gKwkJLnRpbWluZ19jZmcgPSBk cF9jYXRhbG9nX3BhbmVsX3RpbWluZ19jZmcsCj4gKwkJLnRwZ19jb25maWcgPSBkcF9jYXRhbG9n X3BhbmVsX3RwZ19jZmcsCj4gKwl9Owo+ICsKPiArCWlmICghaW8pIHsKPiArCQlwcl9lcnIoImlu dmFsaWQgaW5wdXRcbiIpOwo+ICsJCXJjID0gLUVJTlZBTDsKPiArCQlnb3RvIGVycm9yOwo+ICsJ fQoKSXQgZG9lc24ndCBhcHBlYXIgdGhhdCBpbyBjYW4gYmUgTlVMTCBoZXJlLgoKPiArCj4gKwlj YXRhbG9nICA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY2F0YWxvZyksIEdGUF9LRVJORUwp Owo+ICsJaWYgKCFjYXRhbG9nKSB7CgpZb3UgY2FuIGp1c3QgcmV0dXJuIEVSUl9QVFIoLUVOT01F TSkgaGVyZQo+ICsJCXJjID0gLUVOT01FTTsKPiArCQlnb3RvIGVycm9yOwo+ICsJfQo+ICsKPiAr CWNhdGFsb2ctPmRldiA9IGRldjsKPiArCWNhdGFsb2ctPmlvID0gaW87Cj4gKwo+ICsJZHBfY2F0 YWxvZyA9ICZjYXRhbG9nLT5kcF9jYXRhbG9nOwo+ICsKPiArCWRwX2NhdGFsb2ctPmF1eCAgID0g YXV4Owo+ICsJZHBfY2F0YWxvZy0+Y3RybCAgPSBjdHJsOwo+ICsJZHBfY2F0YWxvZy0+YXVkaW8g PSBhdWRpbzsKPiArCWRwX2NhdGFsb2ctPnBhbmVsID0gcGFuZWw7CgpJJ2xsIHVzZSB0aGlzIGFz IGFuIGV4YW1wbGUgYmVjYXVzZSBpdCBpcyB0aGUgc2hvcnRlc3QsIGJ1dCBpdCBzaG91bGQgYXBw bHkgdG8KYWxsIHRoZXNlIG1lbWJlcnMuIFlvdSBjYW4gc2V0IHRoZSB2YWx1ZSBvZiBkcF9jYXRh bG9nLT5wYW5lbCBkaXJlY3RseSB3aXRob3V0CmFuIGludGVybWVkaWF0ZSB2YXJpYWJsZToKCmRw X2NhdGFsb2ctPnBhbmVsID0gewoJLnRpbWluZ19jZmcgPSBkcF9jYXRhbG9nX3BhbmVsX3RpbWlu Z19jZmcsCgkudHBnX2NvbmZpZyA9IGRwX2NhdGFsb2dfcGFuZWxfdHBnX2NmZywKfTsKCkl0cyBh IHNtYWxsIGNoYW5nZSBidXQgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIHVuZGVyc3RhbmQgd2hhdCBp cyBnb2luZyBvbiBpbiB0aGlzCmZ1bmN0aW9uLgoKPiArCj4gKwlyZXR1cm4gZHBfY2F0YWxvZzsK PiArZXJyb3I6Cj4gKwlyZXR1cm4gRVJSX1BUUihyYyk7CgpUaGlzIHNob3VsZG4ndCBiZSBuZWVk ZWQgYW55bW9yZS4KCj4gK30KPiArCj4gK3ZvaWQgZHBfY2F0YWxvZ19wdXQoc3RydWN0IGRwX2Nh dGFsb2cgKmRwX2NhdGFsb2cpCj4gK3sKPiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNh dGFsb2c7Cj4gKwo+ICsJaWYgKCFkcF9jYXRhbG9nKQo+ICsJCXJldHVybjsKPiArCj4gKwljYXRh bG9nID0gY29udGFpbmVyX29mKGRwX2NhdGFsb2csIHN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUs Cj4gKwkJCQlkcF9jYXRhbG9nKTsKPiArCj4gKwlkZXZtX2tmcmVlKGNhdGFsb2ctPmRldiwgY2F0 YWxvZyk7CgpZb3UgZG9uJ3QgbmVlZCB0byBkZXZtX2tmcmVlIG1hbmFnZWQgbWVtb3J5IC0ganVz dCBsZXQgaXQgZ28uCgo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAv ZHBfY2F0YWxvZy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jYXRhbG9nLmgKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjU4OTUxZGYKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jYXRhbG9nLmgKPiBAQCAtMCwwICsx LDE0NCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZv dW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4g KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFuZAo+ICsgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4g KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KPiArICoKPiArICovCgpTUERYIHBsZWFzZS4KCj4gKyNpZm5kZWYgX0RQX0NBVEFMT0dfSF8K PiArI2RlZmluZSBfRFBfQ0FUQUxPR19IXwo+ICsKPiArI2luY2x1ZGUgImRwX3BhcnNlci5oIgo+ ICsKPiArLyogaW50ZXJydXB0cyAqLwo+ICsjZGVmaW5lIERQX0lOVFJfSFBECQlCSVQoMCkKPiAr I2RlZmluZSBEUF9JTlRSX0FVWF9JMkNfRE9ORQlCSVQoMykKPiArI2RlZmluZSBEUF9JTlRSX1dS T05HX0FERFIJQklUKDYpCj4gKyNkZWZpbmUgRFBfSU5UUl9USU1FT1VUCQlCSVQoOSkKPiArI2Rl ZmluZSBEUF9JTlRSX05BQ0tfREVGRVIJQklUKDEyKQo+ICsjZGVmaW5lIERQX0lOVFJfV1JPTkdf REFUQV9DTlQJQklUKDE1KQo+ICsjZGVmaW5lIERQX0lOVFJfSTJDX05BQ0sJQklUKDE4KQo+ICsj ZGVmaW5lIERQX0lOVFJfSTJDX0RFRkVSCUJJVCgyMSkKPiArI2RlZmluZSBEUF9JTlRSX1BMTF9V TkxPQ0tFRAlCSVQoMjQpCj4gKyNkZWZpbmUgRFBfSU5UUl9BVVhfRVJST1IJQklUKDI3KQo+ICsK PiArI2RlZmluZSBEUF9JTlRSX1JFQURZX0ZPUl9WSURFTwkJQklUKDApCj4gKyNkZWZpbmUgRFBf SU5UUl9JRExFX1BBVFRFUk5fU0VOVAlCSVQoMykKPiArI2RlZmluZSBEUF9JTlRSX0ZSQU1FX0VO RAkJQklUKDYpCj4gKyNkZWZpbmUgRFBfSU5UUl9DUkNfVVBEQVRFRAkJQklUKDkpCj4gKwo+ICtz dHJ1Y3QgZHBfY2F0YWxvZ19hdXggewo+ICsJdTMyIGRhdGE7Cj4gKwl1MzIgaXNyOwo+ICsKPiAr CXUzMiAoKnJlYWRfZGF0YSkoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgpOwo+ICsJaW50ICgq d3JpdGVfZGF0YSkoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgpOwo+ICsJaW50ICgqd3JpdGVf dHJhbnMpKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4KTsKPiArCWludCAoKmNsZWFyX3RyYW5z KShzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwgYm9vbCByZWFkKTsKPiArCXZvaWQgKCpyZXNl dCkoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgpOwo+ICsJdm9pZCAoKmVuYWJsZSkoc3RydWN0 IGRwX2NhdGFsb2dfYXV4ICphdXgsIGJvb2wgZW5hYmxlKTsKPiArCXZvaWQgKCp1cGRhdGVfYXV4 X2NmZykoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgsCj4gKwkJc3RydWN0IGRwX2F1eF9jZmcg KmNmZywgZW51bSBkcF9waHlfYXV4X2NvbmZpZ190eXBlIHR5cGUpOwo+ICsJdm9pZCAoKnNldHVw KShzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwKPiArCQkJc3RydWN0IGRwX2F1eF9jZmcgKmF1 eF9jZmcpOwo+ICsJdm9pZCAoKmdldF9pcnEpKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4LCBi b29sIGNtZF9idXN5KTsKPiArfTsKPiArCj4gK3N0cnVjdCBkcF9jYXRhbG9nX2N0cmwgewo+ICsJ dTMyIGRwX3R1Owo+ICsJdTMyIHZhbGlkX2JvdW5kYXJ5Owo+ICsJdTMyIHZhbGlkX2JvdW5kYXJ5 MjsKPiArCXUzMiBpc3I7Cj4gKwo+ICsJdm9pZCAoKnN0YXRlX2N0cmwpKHN0cnVjdCBkcF9jYXRh bG9nX2N0cmwgKmN0cmwsIHUzMiBzdGF0ZSk7Cj4gKwl2b2lkICgqY29uZmlnX2N0cmwpKHN0cnVj dCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsIHUzMiBjb25maWcpOwo+ICsJdm9pZCAoKmxhbmVfbWFw cGluZykoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCk7Cj4gKwl2b2lkICgqbWFpbmxpbmtf Y3RybCkoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgYm9vbCBlbmFibGUpOwo+ICsJdm9p ZCAoKmNvbmZpZ19taXNjKShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCB1MzIgY2MsIHUz MiB0Yik7Cj4gKwl2b2lkICgqY29uZmlnX21zYSkoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3Ry bCwgdTMyIHJhdGUsCj4gKwkJCQl1MzIgc3RyZWFtX3JhdGVfa2h6LCBib29sIGZpeGVkX252aWQp Owo+ICsJdm9pZCAoKnNldF9wYXR0ZXJuKShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCB1 MzIgcGF0dGVybik7Cj4gKwl2b2lkICgqcmVzZXQpKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0 cmwpOwo+ICsJdm9pZCAoKnVzYl9yZXNldCkoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwg Ym9vbCBmbGlwKTsKPiArCWJvb2wgKCptYWlubGlua19yZWFkeSkoc3RydWN0IGRwX2NhdGFsb2df Y3RybCAqY3RybCk7Cj4gKwl2b2lkICgqZW5hYmxlX2lycSkoc3RydWN0IGRwX2NhdGFsb2dfY3Ry bCAqY3RybCwgYm9vbCBlbmFibGUpOwo+ICsJdm9pZCAoKmhwZF9jb25maWcpKHN0cnVjdCBkcF9j YXRhbG9nX2N0cmwgKmN0cmwsIGJvb2wgZW5hYmxlKTsKPiArCXZvaWQgKCpwaHlfcmVzZXQpKHN0 cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpOwo+ICsJdm9pZCAoKnBoeV9sYW5lX2NmZykoc3Ry dWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgYm9vbCBmbGlwcGVkLAo+ICsJCQkJdTggbGFuZV9j bnQpOwo+ICsJdm9pZCAoKnVwZGF0ZV92eF9weCkoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3Ry bCwgdTggdl9sZXZlbCwKPiArCQkJCXU4IHBfbGV2ZWwpOwo+ICsJdm9pZCAoKmdldF9pbnRlcnJ1 cHQpKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpOwo+ICsJdm9pZCAoKnVwZGF0ZV90cmFu c2Zlcl91bml0KShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsKTsKPiArCXZvaWQgKCpzZW5k X3BoeV9wYXR0ZXJuKShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLAo+ICsJCQl1MzIgcGF0 dGVybik7Cj4gKwl1MzIgKCpyZWFkX3BoeV9wYXR0ZXJuKShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJs ICpjdHJsKTsKPiArfTsKPiArCj4gK2VudW0gZHBfY2F0YWxvZ19hdWRpb19zZHBfdHlwZSB7Cj4g KwlEUF9BVURJT19TRFBfU1RSRUFNLAo+ICsJRFBfQVVESU9fU0RQX1RJTUVTVEFNUCwKPiArCURQ X0FVRElPX1NEUF9JTkZPRlJBTUUsCj4gKwlEUF9BVURJT19TRFBfQ09QWU1BTkFHRU1FTlQsCj4g KwlEUF9BVURJT19TRFBfSVNSQywKPiArCURQX0FVRElPX1NEUF9NQVgsCj4gK307Cj4gKwo+ICtl bnVtIGRwX2NhdGFsb2dfYXVkaW9faGVhZGVyX3R5cGUgewo+ICsJRFBfQVVESU9fU0RQX0hFQURF Ul8xLAo+ICsJRFBfQVVESU9fU0RQX0hFQURFUl8yLAo+ICsJRFBfQVVESU9fU0RQX0hFQURFUl8z LAo+ICsJRFBfQVVESU9fU0RQX0hFQURFUl9NQVgsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHBfY2F0 YWxvZ19hdWRpbyB7Cj4gKwllbnVtIGRwX2NhdGFsb2dfYXVkaW9fc2RwX3R5cGUgc2RwX3R5cGU7 Cj4gKwllbnVtIGRwX2NhdGFsb2dfYXVkaW9faGVhZGVyX3R5cGUgc2RwX2hlYWRlcjsKPiArCXUz MiBkYXRhOwo+ICsKPiArCXZvaWQgKCppbml0KShzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqYXVk aW8pOwo+ICsJdm9pZCAoKmVuYWJsZSkoc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gKmF1ZGlvKTsK PiArCXZvaWQgKCpjb25maWdfYWNyKShzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqYXVkaW8pOwo+ ICsJdm9pZCAoKmNvbmZpZ19zZHApKHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICphdWRpbyk7Cj4g Kwl2b2lkICgqc2V0X2hlYWRlcikoc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gKmF1ZGlvKTsKPiAr CXZvaWQgKCpnZXRfaGVhZGVyKShzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqYXVkaW8pOwo+ICsJ dm9pZCAoKnNhZmVfdG9fZXhpdF9sZXZlbCkoc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gKmF1ZGlv KTsKPiArfTsKPiArCj4gK3N0cnVjdCBkcF9jYXRhbG9nX3BhbmVsIHsKPiArCXUzMiB0b3RhbDsK PiArCXUzMiBzeW5jX3N0YXJ0Owo+ICsJdTMyIHdpZHRoX2JsYW5raW5nOwo+ICsJdTMyIGRwX2Fj dGl2ZTsKPiArCj4gKwkvKiBUUEcgKi8KPiArCXUzMiBoc3luY19wZXJpb2Q7Cj4gKwl1MzIgdnN5 bmNfcGVyaW9kOwo+ICsJdTMyIGRpc3BsYXlfdl9zdGFydDsKPiArCXUzMiBkaXNwbGF5X3ZfZW5k Owo+ICsJdTMyIHZfc3luY193aWR0aDsKPiArCXUzMiBoc3luY19jdGw7Cj4gKwl1MzIgZGlzcGxh eV9oY3RsOwo+ICsKPiArCWludCAoKnRpbWluZ19jZmcpKHN0cnVjdCBkcF9jYXRhbG9nX3BhbmVs ICpwYW5lbCk7Cj4gKwl2b2lkICgqdHBnX2NvbmZpZykoc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwg KnBhbmVsLCBib29sIGVuYWJsZSk7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHBfY2F0YWxvZyB7Cj4g KwlzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggYXV4Owo+ICsJc3RydWN0IGRwX2NhdGFsb2dfY3RybCBj dHJsOwo+ICsJc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gYXVkaW87Cj4gKwlzdHJ1Y3QgZHBfY2F0 YWxvZ19wYW5lbCBwYW5lbDsKPiArfTsKPiArCj4gK3N0cnVjdCBkcF9jYXRhbG9nICpkcF9jYXRh bG9nX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkcF9pbyAqaW8pOwo+ICt2b2lkIGRw X2NhdGFsb2dfcHV0KHN0cnVjdCBkcF9jYXRhbG9nICpjYXRhbG9nKTsKPiArCj4gKyNlbmRpZiAv KiBfRFBfQ0FUQUxPR19IXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX2N0cmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5jCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4wOGE1MmY1Cj4gLS0tIC9kZXYvbnVsbAo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5jCj4gQEAgLTAsMCArMSwxNDc1IEBA Cj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYW5kCj4gKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsg Kgo+ICsgKi8KClNQRFggcGxlYXNlLgoKPiArI2RlZmluZSBwcl9mbXQoZm10KQkiW2RybS1kcF0g JXM6ICIgZm10LCBfX2Z1bmNfXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ ICsKPiArI2luY2x1ZGUgImRwX2N0cmwuaCIKPiArCj4gKyNkZWZpbmUgRFBfS0haX1RPX0haIDEw MDAKPiArCj4gKyNkZWZpbmUgRFBfQ1RSTF9JTlRSX1JFQURZX0ZPUl9WSURFTyAgICAgQklUKDAp Cj4gKyNkZWZpbmUgRFBfQ1RSTF9JTlRSX0lETEVfUEFUVEVSTl9TRU5UICBCSVQoMykKPiArCj4g Ky8qIGRwIHN0YXRlIGN0cmwgKi8KPiArI2RlZmluZSBTVF9UUkFJTl9QQVRURVJOXzEJCUJJVCgw KQo+ICsjZGVmaW5lIFNUX1RSQUlOX1BBVFRFUk5fMgkJQklUKDEpCj4gKyNkZWZpbmUgU1RfVFJB SU5fUEFUVEVSTl8zCQlCSVQoMikKPiArI2RlZmluZSBTVF9UUkFJTl9QQVRURVJOXzQJCUJJVCgz KQo+ICsjZGVmaW5lIFNUX1NZTUJPTF9FUlJfUkFURV9NRUFTVVJFTUVOVAlCSVQoNCkKPiArI2Rl ZmluZSBTVF9QUkJTNwkJCUJJVCg1KQo+ICsjZGVmaW5lIFNUX0NVU1RPTV84MF9CSVRfUEFUVEVS TglCSVQoNikKPiArI2RlZmluZSBTVF9TRU5EX1ZJREVPCQkJQklUKDcpCj4gKyNkZWZpbmUgU1Rf UFVTSF9JRExFCQkJQklUKDgpCj4gKwo+ICsjZGVmaW5lIE1SX0xJTktfVFJBSU5JTkcxICAweDgK PiArI2RlZmluZSBNUl9MSU5LX1NZTUJPTF9FUk0gMHg4MAo+ICsjZGVmaW5lIE1SX0xJTktfUFJC UzcgMHgxMDAKPiArI2RlZmluZSBNUl9MSU5LX0NVU1RPTTgwIDB4MjAwCj4gKwo+ICtzdHJ1Y3Qg ZHBfdmNfdHVfbWFwcGluZ190YWJsZSB7Cj4gKwl1MzIgdmljOwo+ICsJdTggbGFuZXM7Cj4gKwl1 OCBscmF0ZTsgLyogRFBfTElOS19SQVRFIC0+IDE2Mig2KSwgMjcwKDEwKSwgNTQwKDIwKSwgODEw ICgzMCkgKi8KPiArCXU4IGJwcDsKPiArCXU4IHZhbGlkX2JvdW5kYXJ5X2xpbms7Cj4gKwl1MTYg ZGVsYXlfc3RhcnRfbGluazsKPiArCWJvb2wgYm91bmRhcnlfbW9kZXJhdGlvbl9lbjsKPiArCXU4 IHZhbGlkX2xvd2VyX2JvdW5kYXJ5X2xpbms7Cj4gKwl1OCB1cHBlcl9ib3VuZGFyeV9jb3VudDsK PiArCXU4IGxvd2VyX2JvdW5kYXJ5X2NvdW50Owo+ICsJdTggdHVfc2l6ZV9taW51czE7Cj4gK307 Cj4gKwo+ICtzdHJ1Y3QgZHBfY3RybF9wcml2YXRlIHsKPiArCXN0cnVjdCBkcF9jdHJsIGRwX2N0 cmw7Cj4gKwo+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsJc3RydWN0IGRwX2F1eCAqYXV4Owo+ ICsJc3RydWN0IGRwX3BhbmVsICpwYW5lbDsKPiArCXN0cnVjdCBkcF9saW5rICpsaW5rOwo+ICsJ c3RydWN0IGRwX3Bvd2VyICpwb3dlcjsKPiArCXN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcjsKPiAr CXN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmNhdGFsb2c7Cj4gKwo+ICsJc3RydWN0IGNvbXBsZXRp b24gaWRsZV9jb21wOwo+ICsJc3RydWN0IGNvbXBsZXRpb24gdmlkZW9fY29tcDsKPiArCj4gKwli b29sIG9yaWVudGF0aW9uOwo+ICsJYXRvbWljX3QgYWJvcnRlZDsKPiArCj4gKwl1MzIgcGl4ZWxf cmF0ZTsKPiArCXUzMiB2aWM7Cj4gK307Cj4gKwo+ICtlbnVtIG5vdGlmaWNhdGlvbl9zdGF0dXMg ewo+ICsJTk9USUZZX1VOS05PV04sCj4gKwlOT1RJRllfQ09OTkVDVCwKPiArCU5PVElGWV9ESVND T05ORUNULAo+ICsJTk9USUZZX0NPTk5FQ1RfSVJRX0hQRCwKPiArCU5PVElGWV9ESVNDT05ORUNU X0lSUV9IUEQsCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9jdHJsX2lkbGVfcGF0dGVybnNf c2VudChzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQo+ICt7Cj4gKwlwcl9kZWJ1ZygiaWRs ZV9wYXR0ZXJuc19zZW50XG4iKTsKPiArCWNvbXBsZXRlKCZjdHJsLT5pZGxlX2NvbXApOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9jdHJsX3ZpZGVvX3JlYWR5KHN0cnVjdCBkcF9jdHJsX3By aXZhdGUgKmN0cmwpCj4gK3sKPiArCXByX2RlYnVnKCJkcF92aWRlb19yZWFkeVxuIik7Cj4gKwlj b21wbGV0ZSgmY3RybC0+dmlkZW9fY29tcCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX2N0 cmxfYWJvcnQoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpCj4gK3sKPiArCXN0cnVjdCBkcF9jdHJs X3ByaXZhdGUgKmN0cmw7Cj4gKwo+ICsJaWYgKCFkcF9jdHJsKSB7Cj4gKwkJcHJfZXJyKCJJbnZh bGlkIGlucHV0IGRhdGFcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KCkNvbW1vbiB0aGVtZSAtIHBs ZWFzZSB0cnkgdG8gdXNlIFdBUk5fT04gaW5zdGVhZCAgb2YgYSBjdXN0b20gZXJyb3IgbWVzc2Fn ZS4KCj4gKwljdHJsID0gY29udGFpbmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZh dGUsIGRwX2N0cmwpOwo+ICsKPiArCWF0b21pY19zZXQoJmN0cmwtPmFib3J0ZWQsIDEpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcF9jdHJsX3N0YXRlX2N0cmwoc3RydWN0IGRwX2N0cmxfcHJp dmF0ZSAqY3RybCwgdTMyIHN0YXRlKQo+ICt7Cj4gKwljdHJsLT5jYXRhbG9nLT5zdGF0ZV9jdHJs KGN0cmwtPmNhdGFsb2csIHN0YXRlKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfY3RybF9w dXNoX2lkbGUoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpCj4gK3sKPiArCWludCBjb25zdCBpZGxl X3BhdHRlcm5fY29tcGxldGlvbl90aW1lb3V0X21zID0gMyAqIEhaIC8gMTAwOwo+ICsJc3RydWN0 IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsKPiArCj4gKwlpZiAoIWRwX2N0cmwpIHsKPiArCQlwcl9l cnIoIkludmFsaWQgaW5wdXQgZGF0YVxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWN0 cmwgPSBjb250YWluZXJfb2YoZHBfY3RybCwgc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSwgZHBfY3Ry bCk7Cj4gKwo+ICsJcmVpbml0X2NvbXBsZXRpb24oJmN0cmwtPmlkbGVfY29tcCk7Cj4gKwlkcF9j dHJsX3N0YXRlX2N0cmwoY3RybCwgU1RfUFVTSF9JRExFKTsKPiArCj4gKwlpZiAoIXdhaXRfZm9y X2NvbXBsZXRpb25fdGltZW91dCgmY3RybC0+aWRsZV9jb21wLAo+ICsJCQlpZGxlX3BhdHRlcm5f Y29tcGxldGlvbl90aW1lb3V0X21zKSkKPiArCQlwcl93YXJuKCJQVVNIX0lETEUgcGF0dGVybiB0 aW1lZG91dFxuIik7Cj4gKwo+ICsJcHJfZGVidWcoIm1haW5saW5rIG9mZiBkb25lXG4iKTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgZHBfY3RybF9jb25maWdfY3RybChzdHJ1Y3QgZHBfY3RybF9w cml2YXRlICpjdHJsKQo+ICt7Cj4gKwl1MzIgY29uZmlnID0gMCwgdGJkOwo+ICsJdTggKmRwY2Qg PSBjdHJsLT5wYW5lbC0+ZHBjZDsKPiArCj4gKwljb25maWcgfD0gKDIgPDwgMTMpOyAvKiBEZWZh dWx0LT4gTFNDTEsgRElWOiAxLzQgTENMSyAgKi8KPiArCWNvbmZpZyB8PSAoMCA8PCAxMSk7IC8q IFJHQiAqLwo+ICsKPiArCS8qIFNjcmFtYmxlciByZXNldCBlbmFibGUgKi8KPiArCWlmIChkcGNk W0RQX0VEUF9DT05GSUdVUkFUSU9OX0NBUF0gJiBEUF9BTFRFUk5BVEVfU0NSQU1CTEVSX1JFU0VU X0NBUCkKPiArCQljb25maWcgfD0gKDEgPDwgMTApOwo+ICsKPiArCXRiZCA9IGN0cmwtPmxpbmst PmdldF90ZXN0X2JpdHNfZGVwdGgoY3RybC0+bGluaywKPiArCQkJY3RybC0+cGFuZWwtPnBpbmZv LmJwcCk7Cj4gKwo+ICsJaWYgKHRiZCA9PSBEUF9URVNUX0JJVF9ERVBUSF9VTktOT1dOKQo+ICsJ CXRiZCA9IERQX1RFU1RfQklUX0RFUFRIXzg7Cj4gKwo+ICsJY29uZmlnIHw9IHRiZCA8PCA4Owo+ ICsKPiArCS8qIE51bSBvZiBMYW5lcyAqLwo+ICsJY29uZmlnIHw9ICgoY3RybC0+bGluay0+bGlu a19wYXJhbXMubGFuZV9jb3VudCAtIDEpIDw8IDQpOwo+ICsKPiArCWlmIChkcm1fZHBfZW5oYW5j ZWRfZnJhbWVfY2FwKGRwY2QpKQo+ICsJCWNvbmZpZyB8PSAweDQwOwo+ICsKPiArCWNvbmZpZyB8 PSAweDA0OyAvKiBwcm9ncmVzc2l2ZSB2aWRlbyAqLwo+ICsKPiArCWNvbmZpZyB8PSAweDAzOwkv KiBzeWNuIGNsb2NrICYgc3RhdGljIE12aWQgKi8KPiArCj4gKwljdHJsLT5jYXRhbG9nLT5jb25m aWdfY3RybChjdHJsLT5jYXRhbG9nLCBjb25maWcpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZHBf Y3RybF9jb25maWd1cmVfc291cmNlX3BhcmFtcygpIC0gY29uZmlndXJlcyBEUCB0cmFuc21pdHRl ciBzb3VyY2UgcGFyYW1zCj4gKyAqIEBjdHJsOiBEaXNwbGF5IFBvcnQgRHJpdmVyIGRhdGEKPiAr ICoKPiArICogQ29uZmlndXJlcyB0aGUgRFAgdHJhbnNtaXR0ZXIgc291cmNlIHBhcmFtcyBpbmNs dWRpbmcgZGV0YWlscyBzdWNoIGFzIGxhbmUKPiArICogY29uZmlndXJhdGlvbiwgb3V0cHV0IGZv cm1hdCBhbmQgc2luay9wYW5lbCB0aW1pbmcgaW5mb3JtYXRpb24uCj4gKyAqLwo+ICtzdGF0aWMg dm9pZCBkcF9jdHJsX2NvbmZpZ3VyZV9zb3VyY2VfcGFyYW1zKHN0cnVjdCBkcF9jdHJsX3ByaXZh dGUgKmN0cmwpCj4gK3sKPiArCXUzMiBjYywgdGI7Cj4gKwo+ICsJY3RybC0+Y2F0YWxvZy0+bGFu ZV9tYXBwaW5nKGN0cmwtPmNhdGFsb2cpOwo+ICsJY3RybC0+Y2F0YWxvZy0+bWFpbmxpbmtfY3Ry bChjdHJsLT5jYXRhbG9nLCB0cnVlKTsKPiArCj4gKwlkcF9jdHJsX2NvbmZpZ19jdHJsKGN0cmwp Owo+ICsKPiArCXRiID0gY3RybC0+bGluay0+Z2V0X3Rlc3RfYml0c19kZXB0aChjdHJsLT5saW5r LAo+ICsJCWN0cmwtPnBhbmVsLT5waW5mby5icHApOwo+ICsJY2MgPSBjdHJsLT5saW5rLT5nZXRf Y29sb3JpbWV0cnlfY29uZmlnKGN0cmwtPmxpbmspOwo+ICsJY3RybC0+Y2F0YWxvZy0+Y29uZmln X21pc2MoY3RybC0+Y2F0YWxvZywgY2MsIHRiKTsKPiArCWN0cmwtPnBhbmVsLT50aW1pbmdfY2Zn KGN0cmwtPnBhbmVsKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHBfY3RybF9nZXRfZXh0cmFf cmVxX2J5dGVzKHU2NCByZXN1bHRfdmFsaWQsCj4gKwkJCQkJaW50IHZhbGlkX2JkYXJ5X2xpbmss Cj4gKwkJCQkJdTY0IHZhbHVlMSwgdTY0IHZhbHVlMiwKPiArCQkJCQlib29sICpuZWdhdGl2ZSwg dTY0ICpyZXN1bHQsCj4gKwkJCQkJdTY0IGNvbXBhcmUpCj4gK3sKPiArCSpuZWdhdGl2ZSA9IGZh bHNlOwo+ICsJaWYgKHJlc3VsdF92YWxpZCA+PSBjb21wYXJlKSB7Cj4gKwkJaWYgKHZhbGlkX2Jk YXJ5X2xpbmsKPiArCQkJCT49IGNvbXBhcmUpCj4gKwkJCSpyZXN1bHQgPSB2YWx1ZTEgKyB2YWx1 ZTI7Cj4gKwkJZWxzZSB7Cj4gKwkJCWlmICh2YWx1ZTEgPCB2YWx1ZTIpCj4gKwkJCQkqbmVnYXRp dmUgPSB0cnVlOwo+ICsJCQkqcmVzdWx0ID0gKHZhbHVlMSA+PSB2YWx1ZTIpID8KPiArCQkJCSh2 YWx1ZTEgLSB2YWx1ZTIpIDogKHZhbHVlMiAtIHZhbHVlMSk7Cj4gKwkJfQo+ICsJfSBlbHNlIHsK PiArCQlpZiAodmFsaWRfYmRhcnlfbGluawo+ICsJCQkJPj0gY29tcGFyZSkgewo+ICsJCQlpZiAo dmFsdWUxID49IHZhbHVlMikKPiArCQkJCSpuZWdhdGl2ZSA9IHRydWU7Cj4gKwkJCSpyZXN1bHQg PSAodmFsdWUxID49IHZhbHVlMikgPwo+ICsJCQkJKHZhbHVlMSAtIHZhbHVlMikgOiAodmFsdWUy IC0gdmFsdWUxKTsKPiArCQl9IGVsc2Ugewo+ICsJCQkqcmVzdWx0ID0gdmFsdWUxICsgdmFsdWUy Owo+ICsJCQkqbmVnYXRpdmUgPSB0cnVlOwo+ICsJCX0KPiArCX0KPiArfQo+ICsKPiArc3RhdGlj IHU2NCByb3VuZHVwX3U2NCh1NjQgeCwgdTY0IHkpCj4gK3sKPiArCXggKz0gKHkgLSAxKTsKPiAr CXJldHVybiAoZGl2NjRfdWwoeCwgeSkgKiB5KTsKPiArfQoKRG9lcyByb3VuZHVwKCkgbm90IHdv cmsgZm9yIHU2ND8KCj4gKwo+ICtzdGF0aWMgdTY0IHJvdW5kZG93bl91NjQodTY0IHgsIHU2NCB5 KQo+ICt7Cj4gKwl1NjQgcmVtOwo+ICsKPiArCWRpdjY0X3U2NF9yZW0oeCwgeSwgJnJlbSk7Cj4g KwlyZXR1cm4gKHggLSByZW0pOwo+ICt9CgpTYW1lIHF1ZXN0aW9uCgo8c25pcD4KCj4gK3N0YXRp YyBpbnQgZHBfY3RybF93YWl0NHZpZGVvX3JlYWR5KHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0 cmwpCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsKPiArCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRp b25fdGltZW91dCgmY3RybC0+dmlkZW9fY29tcCwgSFogLyAyKTsKPiArCWlmIChyZXQgPD0gMCkg ewo+ICsJCXByX2VycigiTGluayBUcmFpbiB0aW1lZG91dFxuIik7Cj4gKwkJcmV0ID0gLUVJTlZB TDsKCk9uIHRpbWVvdXQgaXQgd291bGQgYmUgaGVscGZ1bCB0byByZXR1cm4gLUVUSU1FRE9VVCBi dXQgaWYgcmV0IDwgMCB5b3Ugc2hvdWxkCnJldHVybiB0aGUgdmFsdWUgdGhhdCB5b3UgZ290IGZy b20gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0IGluIGNhc2UgdGhlCmNhbGxlciB3YW50cyB0 byBrbm93IGFib3V0IGludGVycnVwdGVkIGNhbGxzLgoKPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0 Owo+ICt9Cgo8c25pcD4KCj4gK3N0YXRpYyBpbnQgZHBfY3RybF9saW5rX3RyYWluKHN0cnVjdCBk cF9jdHJsX3ByaXZhdGUgKmN0cmwpCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICsJdTggZW5jb2Rp bmcgPSAweDE7Cj4gKwlzdHJ1Y3QgZHJtX2RwX2xpbmsgbGlua19pbmZvID0gezB9Owo+ICsKPiAr CWN0cmwtPmxpbmstPnBoeV9wYXJhbXMucF9sZXZlbCA9IDA7Cj4gKwljdHJsLT5saW5rLT5waHlf cGFyYW1zLnZfbGV2ZWwgPSAwOwo+ICsKPiArCWRwX2N0cmxfY29uZmlnX2N0cmwoY3RybCk7Cj4g Kwo+ICsJbGlua19pbmZvLm51bV9sYW5lcyA9IGN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmxhbmVf Y291bnQ7Cj4gKwlsaW5rX2luZm8ucmF0ZSA9IGRybV9kcF9id19jb2RlX3RvX2xpbmtfcmF0ZSgK PiArCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5id19jb2RlKTsKPiArCWxpbmtfaW5mby5jYXBh YmlsaXRpZXMgPSBjdHJsLT5wYW5lbC0+bGlua19pbmZvLmNhcGFiaWxpdGllczsKPiArCj4gKwlk cm1fZHBfbGlua19jb25maWd1cmUoY3RybC0+YXV4LT5kcm1fYXV4LCAmbGlua19pbmZvKTsKPiAr CWRybV9kcF9kcGNkX3dyaXRlKGN0cmwtPmF1eC0+ZHJtX2F1eCwgRFBfTUFJTl9MSU5LX0NIQU5O RUxfQ09ESU5HX1NFVCwKPiArCQkJCSZlbmNvZGluZywgMSk7Cj4gKwo+ICsJcmV0ID0gZHBfY3Ry bF9saW5rX3RyYWluXzEoY3RybCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcHJfZXJyKCJsaW5rIHRy YWluaW5nICMxIGZhaWxlZFxuIik7Cj4gKwkJZ290byBlbmQ7Cj4gKwl9Cj4gKwo+ICsJLyogcHJp bnQgc3VjY2VzcyBpbmZvIGFzIHRoaXMgaXMgYSByZXN1bHQgb2YgdXNlciBpbml0aWF0ZWQgYWN0 aW9uICovCj4gKwlwcl9pbmZvKCJsaW5rIHRyYWluaW5nICMxIHN1Y2Nlc3NmdWxcbiIpOwoKVGhl c2Ugc2VlbSBsaWtlIG1heWJlIHRoZXkgYmVsb25nIGF0IHByX2RlYnVnKCkgbGV2ZWwgLSB0aGV5 IGFyZSBpbnRlcmVzdGVkCndoaWxlIGdldHRpbmcgZ29pbmcgYnV0IHByb2JhYmx5IG5vdCBpbiBh IGNvbW1lcmNpYWwgc2V0dGluZy4KCj4gKwlyZXQgPSBkcF9jdHJsX2xpbmtfdHJhaW5pbmdfMihj dHJsKTsKPiArCWlmIChyZXQpIHsKPiArCQlwcl9lcnIoImxpbmsgdHJhaW5pbmcgIzIgZmFpbGVk XG4iKTsKPiArCQlnb3RvIGVuZDsKPiArCX0KPiArCj4gKwkvKiBwcmludCBzdWNjZXNzIGluZm8g YXMgdGhpcyBpcyBhIHJlc3VsdCBvZiB1c2VyIGluaXRpYXRlZCBhY3Rpb24gKi8KPiArCXByX2lu Zm8oImxpbmsgdHJhaW5pbmcgIzIgc3VjY2Vzc2Z1bFxuIik7CgpTYW1lLgoKPiArCj4gK2VuZDoK PiArCWRwX2N0cmxfc3RhdGVfY3RybChjdHJsLCAwKTsKPiArCS8qIE1ha2Ugc3VyZSB0byBjbGVh ciB0aGUgY3VycmVudCBwYXR0ZXJuIGJlZm9yZSBzdGFydGluZyBhIG5ldyBvbmUgKi8KPiArCXdt YigpOwo+ICsKPiArCWRwX2N0cmxfY2xlYXJfdHJhaW5pbmdfcGF0dGVybihjdHJsKTsKPiArCXJl dHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBfY3RybF9zZXR1cF9tYWluX2xpbmso c3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCwgYm9vbCB0cmFpbikKPiArewo+ICsJYm9vbCBt YWlubGlua19yZWFkeSA9IGZhbHNlOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJY3RybC0+Y2F0 YWxvZy0+bWFpbmxpbmtfY3RybChjdHJsLT5jYXRhbG9nLCB0cnVlKTsKPiArCj4gKwlyZXQgPSBj dHJsLT5saW5rLT5wc21fY29uZmlnKGN0cmwtPmxpbmssCj4gKwkJJmN0cmwtPnBhbmVsLT5saW5r X2luZm8sIGZhbHNlKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlbmQ7Cj4gKwo+ICsJaWYgKGN0 cmwtPmxpbmstPnNpbmtfcmVxdWVzdCAmIERQX1RFU1RfTElOS19QSFlfVEVTVF9QQVRURVJOKQo+ ICsJCWdvdG8gZW5kOwo+ICsKPiArCWlmICghdHJhaW4pCj4gKwkJZ290byBzZW5kX3ZpZGVvOwo+ ICsKPiArCS8qCj4gKwkgKiBBcyBwYXJ0IG9mIHByZXZpb3VzIGNhbGxzLCBEUCBjb250cm9sbGVy IHN0YXRlIG1pZ2h0IGhhdmUKPiArCSAqIHRyYW5zaXRpb25lZCB0byBQVVNIX0lETEUuIEluIG9y ZGVyIHRvIHN0YXJ0IHRyYW5zbWl0dGluZyBhIGxpbmsKPiArCSAqIHRyYWluaW5nIHBhdHRlcm4s IHdlIGhhdmUgdG8gZmlyc3QgdG8gYSBEUCBzb2Z0d2FyZSByZXNldC4KPiArCSAqLwo+ICsJY3Ry bC0+Y2F0YWxvZy0+cmVzZXQoY3RybC0+Y2F0YWxvZyk7Cj4gKwo+ICsJcmV0ID0gZHBfY3RybF9s aW5rX3RyYWluKGN0cmwpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVuZDsKPiArCj4gK3NlbmRf dmlkZW86Cj4gKwkvKgo+ICsJICogU2V0IHVwIHRyYW5zZmVyIHVuaXQgdmFsdWVzIGFuZCBzZXQg Y29udHJvbGxlciBzdGF0ZSB0byBzZW5kCj4gKwkgKiB2aWRlby4KPiArCSAqLwo+ICsJZHBfY3Ry bF9zZXR1cF90cl91bml0KGN0cmwpOwo+ICsJY3RybC0+Y2F0YWxvZy0+c3RhdGVfY3RybChjdHJs LT5jYXRhbG9nLCBTVF9TRU5EX1ZJREVPKTsKPiArCj4gKwlkcF9jdHJsX3dhaXQ0dmlkZW9fcmVh ZHkoY3RybCk7Cj4gKwltYWlubGlua19yZWFkeSA9IGN0cmwtPmNhdGFsb2ctPm1haW5saW5rX3Jl YWR5KGN0cmwtPmNhdGFsb2cpOwo+ICsJcHJfZGVidWcoIm1haW5saW5rICVzXG4iLCBtYWlubGlu a19yZWFkeSA/ICJSRUFEWSIgOiAiTk9UIFJFQURZIik7Cj4gK2VuZDoKPiArCXJldHVybiByZXQ7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRwX2N0cmxfc2V0X2Nsb2NrX3JhdGUoc3RydWN0IGRw X2N0cmxfcHJpdmF0ZSAqY3RybCwKPiArCQkJCSAgIGNoYXIgKm5hbWUsIHUzMiByYXRlKQo+ICt7 Cj4gKwl1MzIgbnVtID0gY3RybC0+cGFyc2VyLT5tcFtEUF9DVFJMX1BNXS5udW1fY2xrOwo+ICsJ c3RydWN0IGRzc19jbGsgKmNmZyA9IGN0cmwtPnBhcnNlci0+bXBbRFBfQ1RSTF9QTV0uY2xrX2Nv bmZpZzsKPiArCj4gKwl3aGlsZSAobnVtICYmIHN0cmNtcChjZmctPmNsa19uYW1lLCBuYW1lKSkg ewo+ICsJCW51bS0tOwo+ICsJCWNmZysrOwo+ICsJfQo+ICsKPiArCXByX2RlYnVnKCJzZXR0aW5n IHJhdGU9JWQgb24gY2xrPSVzXG4iLCByYXRlLCBuYW1lKTsKPiArCj4gKwlpZiAobnVtKQo+ICsJ CWNmZy0+cmF0ZSA9IHJhdGU7Cj4gKwllbHNlCj4gKwkJcHJfZXJyKCIlcyBjbG9jayBjb3VsZCBu b3QgYmUgc2V0IHdpdGggcmF0ZSAlZFxuIiwgbmFtZSwgcmF0ZSk7CgpNb3JlIGFjY3VyYXRlbHks IHRoZSBjbG9jayBuYW1lIGlzbid0IGZvdW5kIGluIHRoZSBsaXN0LgoKPiArfQo+ICsKPiArc3Rh dGljIGludCBkcF9jdHJsX2VuYWJsZV9tYWlubGlua19jbG9ja3Moc3RydWN0IGRwX2N0cmxfcHJp dmF0ZSAqY3RybCkKPiArewo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJY3RybC0+cG93ZXItPnNl dF9waXhlbF9jbGtfcGFyZW50KGN0cmwtPnBvd2VyKTsKPiArCj4gKwlkcF9jdHJsX3NldF9jbG9j a19yYXRlKGN0cmwsICJjdHJsX2xpbmtfY2xrIiwKPiArCQlkcm1fZHBfYndfY29kZV90b19saW5r X3JhdGUoY3RybC0+bGluay0+bGlua19wYXJhbXMuYndfY29kZSkpOwo+ICsKPiArCWRwX2N0cmxf c2V0X2Nsb2NrX3JhdGUoY3RybCwgImN0cmxfcGl4ZWxfY2xrIiwgY3RybC0+cGl4ZWxfcmF0ZSk7 Cj4gKwo+ICsJcmV0ID0gY3RybC0+cG93ZXItPmNsa19lbmFibGUoY3RybC0+cG93ZXIsIERQX0NU UkxfUE0sIHRydWUpOwo+ICsJaWYgKHJldCkgewo+ICsJCXByX2VycigiVW5hYmxlZCB0byBzdGFy dCBsaW5rIGNsb2Nrc1xuIik7Cj4gKwkJcmV0ID0gLUVJTlZBTDsKCllvdSBzaG91bGQgdXNlIHRo ZSByZXR1cm4gdmFsdWUgZnJvbSBjdHJsLT5wb3dlci0+Y2xrX2VuYWJsZSBpbnN0ZWFkIG9mCnJl Y2xhc3NpZnlpbmcgaXQuCgo+ICsJfQo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgZHBfY3RybF9kaXNhYmxlX21haW5saW5rX2Nsb2NrcyhzdHJ1Y3QgZHBfY3RybF9w cml2YXRlICpjdHJsKQo+ICt7Cj4gKwlyZXR1cm4gY3RybC0+cG93ZXItPmNsa19lbmFibGUoY3Ry bC0+cG93ZXIsIERQX0NUUkxfUE0sIGZhbHNlKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9j dHJsX2hvc3RfaW5pdChzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCwgYm9vbCBmbGlwKQo+ICt7Cj4g KwlzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsOwo+ICsJc3RydWN0IGRwX2NhdGFsb2dfY3Ry bCAqY2F0YWxvZzsKPiArCj4gKwlpZiAoIWRwX2N0cmwpIHsKPiArCQlwcl9lcnIoIkludmFsaWQg aW5wdXQgZGF0YVxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9CgpVc2UgdGhlIFdBUk5f T04gdG8gYXZvaWQgdGhlIGN1c3RvbSBlcnJvciBtZXNzYWdlLiBUaHJvdWdob3V0LgoKPiArCWN0 cmwgPSBjb250YWluZXJfb2YoZHBfY3RybCwgc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSwgZHBfY3Ry bCk7Cj4gKwo+ICsJY3RybC0+b3JpZW50YXRpb24gPSBmbGlwOwo+ICsJY2F0YWxvZyA9IGN0cmwt PmNhdGFsb2c7Cj4gKwo+ICsJY2F0YWxvZy0+dXNiX3Jlc2V0KGN0cmwtPmNhdGFsb2csIGZsaXAp Owo+ICsJY2F0YWxvZy0+cGh5X3Jlc2V0KGN0cmwtPmNhdGFsb2cpOwo+ICsJY2F0YWxvZy0+ZW5h YmxlX2lycShjdHJsLT5jYXRhbG9nLCB0cnVlKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQoKPHNu aXA+Cgo+ICtzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybF9nZXQoc3RydWN0IGRwX2N0cmxfaW4gKmlu KQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsK PiArCXN0cnVjdCBkcF9jdHJsICpkcF9jdHJsOwo+ICsKPiArCWlmICghaW4tPmRldiB8fCAhaW4t PnBhbmVsIHx8ICFpbi0+YXV4IHx8Cj4gKwkgICAgIWluLT5saW5rIHx8ICFpbi0+Y2F0YWxvZykg ewo+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4gKwkJcmMgPSAtRUlOVkFMOwo+ICsJ CWdvdG8gZXJyb3I7Cj4gKwl9CgpOb25lIG9mIHRoZXNlIHdpbGwgYmUgTlVMTCBmcm9tIHRoZSBz aW5nbGUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgoKPiArCWN0cmwgPSBkZXZtX2t6YWxsb2MoaW4t PmRldiwgc2l6ZW9mKCpjdHJsKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWN0cmwpIHsKCllvdSBj YW4ganN1dCByZXR1cm4gRVJSX1BUUigtRU5PTUVNKSBoZXJlCgo+ICsJCXJjID0gLUVOT01FTTsK PiArCQlnb3RvIGVycm9yOwo+ICsJfQo+ICsKPiArCWluaXRfY29tcGxldGlvbigmY3RybC0+aWRs ZV9jb21wKTsKPiArCWluaXRfY29tcGxldGlvbigmY3RybC0+dmlkZW9fY29tcCk7Cj4gKwo+ICsJ LyogaW4gcGFyYW1ldGVycyAqLwo+ICsJY3RybC0+cGFyc2VyICAgPSBpbi0+cGFyc2VyOwo+ICsJ Y3RybC0+cGFuZWwgICAgPSBpbi0+cGFuZWw7Cj4gKwljdHJsLT5wb3dlciAgICA9IGluLT5wb3dl cjsKPiArCWN0cmwtPmF1eCAgICAgID0gaW4tPmF1eDsKPiArCWN0cmwtPmxpbmsgICAgID0gaW4t Pmxpbms7Cj4gKwljdHJsLT5jYXRhbG9nICA9IGluLT5jYXRhbG9nOwo+ICsJY3RybC0+ZGV2ICAg ICAgPSBpbi0+ZGV2Owo+ICsKPiArCWRwX2N0cmwgPSAmY3RybC0+ZHBfY3RybDsKPiArCj4gKwkv KiBvdXQgcGFyYW1ldGVycyAqLwo+ICsJZHBfY3RybC0+aW5pdCAgICAgID0gZHBfY3RybF9ob3N0 X2luaXQ7Cj4gKwlkcF9jdHJsLT5kZWluaXQgICAgPSBkcF9jdHJsX2hvc3RfZGVpbml0Owo+ICsJ ZHBfY3RybC0+b24gICAgICAgID0gZHBfY3RybF9vbjsKPiArCWRwX2N0cmwtPm9mZiAgICAgICA9 IGRwX2N0cmxfb2ZmOwo+ICsJZHBfY3RybC0+cHVzaF9pZGxlID0gZHBfY3RybF9wdXNoX2lkbGU7 Cj4gKwlkcF9jdHJsLT5hYm9ydCAgICAgPSBkcF9jdHJsX2Fib3J0Owo+ICsJZHBfY3RybC0+aXNy ICAgICAgID0gZHBfY3RybF9pc3I7Cj4gKwlkcF9jdHJsLT5yZXNldAkgICA9IGRwX2N0cmxfcmVz ZXQ7Cj4gKwlkcF9jdHJsLT5oYW5kbGVfc2lua19yZXF1ZXN0ID0gZHBfY3RybF9oYW5kbGVfc2lu a19yZXF1ZXN0Owo+ICsKPiArCXJldHVybiBkcF9jdHJsOwo+ICtlcnJvcjoKPiArCXJldHVybiBF UlJfUFRSKHJjKTsKClRoaXMgc2hvdWxkbid0IGJlIG5lZWRlZC4KCj4gK30KPiArCj4gK3ZvaWQg ZHBfY3RybF9wdXQoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpCj4gK3sKPiArCXN0cnVjdCBkcF9j dHJsX3ByaXZhdGUgKmN0cmw7Cj4gKwo+ICsJaWYgKCFkcF9jdHJsKQo+ICsJCXJldHVybjsKPiAr Cj4gKwljdHJsID0gY29udGFpbmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUs IGRwX2N0cmwpOwo+ICsKPiArCWRldm1fa2ZyZWUoY3RybC0+ZGV2LCBjdHJsKTsKCk5vdCBuZWVk ZWQgaWYgeW91IGFyZSB1c2luZyBkZXZtXwoKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2RwL2RwX2N0cmwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5o Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi42YWIyMjFhCj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5oCj4gQEAgLTAs MCArMSw1MCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxOCwgVGhlIExpbnV4 IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFuZAo+ICsgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Cj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KPiArICoKPiArICovCgpTUERYIHBsZWFzZS4KCj4gKyNpZm5kZWYgX0RQX0NUUkxfSF8K PiArI2RlZmluZSBfRFBfQ1RSTF9IXwo+ICsKPiArI2luY2x1ZGUgImRwX2F1eC5oIgo+ICsjaW5j bHVkZSAiZHBfcGFuZWwuaCIKPiArI2luY2x1ZGUgImRwX2xpbmsuaCIKPiArI2luY2x1ZGUgImRw X3BhcnNlci5oIgo+ICsjaW5jbHVkZSAiZHBfcG93ZXIuaCIKPiArI2luY2x1ZGUgImRwX2NhdGFs b2cuaCIKPiArCj4gK3N0cnVjdCBkcF9jdHJsIHsKPiArCWludCAoKmluaXQpKHN0cnVjdCBkcF9j dHJsICpkcF9jdHJsLCBib29sIGZsaXApOwo+ICsJdm9pZCAoKmRlaW5pdCkoc3RydWN0IGRwX2N0 cmwgKmRwX2N0cmwpOwo+ICsJaW50ICgqb24pKHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKTsKPiAr CXZvaWQgKCpvZmYpKHN0cnVjdCBkcF9jdHJsICpkcF9jdHJsKTsKPiArCXZvaWQgKCpyZXNldCko c3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpOwo+ICsJdm9pZCAoKnB1c2hfaWRsZSkoc3RydWN0IGRw X2N0cmwgKmRwX2N0cmwpOwo+ICsJdm9pZCAoKmFib3J0KShzdHJ1Y3QgZHBfY3RybCAqZHBfY3Ry bCk7Cj4gKwl2b2lkICgqaXNyKShzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCk7Cj4gKwl2b2lkICgq aGFuZGxlX3NpbmtfcmVxdWVzdCkoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpOwo+ICt9Owo+ICsK PiArc3RydWN0IGRwX2N0cmxfaW4gewo+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsJc3RydWN0 IGRwX3BhbmVsICpwYW5lbDsKPiArCXN0cnVjdCBkcF9hdXggKmF1eDsKPiArCXN0cnVjdCBkcF9s aW5rICpsaW5rOwo+ICsJc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyOwo+ICsJc3RydWN0IGRwX3Bv d2VyICpwb3dlcjsKPiArCXN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmNhdGFsb2c7Cj4gK307Cj4g Kwo+ICtzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybF9nZXQoc3RydWN0IGRwX2N0cmxfaW4gKmluKTsK PiArdm9pZCBkcF9jdHJsX3B1dChzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCk7Cj4gKwo+ICsjZW5k aWYgLyogX0RQX0NUUkxfSF8gKi8KClRoaXMgc2VlbXMgbGlrZSBhIGdvb2QgZW5kaW5nIHNwb3Qg Zm9yIG5vdy4gIEknbGwgZG8gdGhlIHJlc3QgbGF0ZXIuCgpKb3JkYW4KCi0tIApUaGUgUXVhbGNv bW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgQ29kZSBBdXJvcmEgRm9y dW0sCmEgTGludXggRm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlz dApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5vCg==