From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [DPU PATCH v2 11/12] drm/msm/dpu: move dpu_power_handle to dpu folder Date: Fri, 11 May 2018 11:48:46 -0400 Message-ID: <20180511154846.GW33053@art_vandelay> References: <1526050178-31893-1-git-send-email-ryadav@codeaurora.org> <1526050178-31893-12-git-send-email-ryadav@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: <1526050178-31893-12-git-send-email-ryadav-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: Rajesh Yadav Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org T24gRnJpLCBNYXkgMTEsIDIwMTggYXQgMDg6MTk6MzdQTSArMDUzMCwgUmFqZXNoIFlhZGF2IHdy b3RlOgo+IE5vdywgc2luY2UgZHB1X3Bvd2VyX2hhbmRsZSBtYW5hZ2VzIG9ubHkgYnVzIHNjYWxp bmcKPiBhbmQgcG93ZXIgZW5hYmxlL2Rpc2FibGUgbm90aWZpY2F0aW9ucyB3aGljaCBhcmUgcmVz dHJpY3RlZAo+IHRvIGRwdSBkcml2ZXIsIG1vdmUgZHB1X3Bvd2VyX2hhbmRsZSB0byBkcHUgZm9s ZGVyLgo+IAo+IENoYW5nZXMgaW4gdjI6Cj4gCS0gcmVzb2x2ZWQgY29uZmxpY3QgaW4gZHB1X3Vu YmluZAo+IAktIGRyb3BwZWQgKFJldmlld2VkLWJ5OiBTZWFuIFBhdWwpIGR1ZSB0byBhYm92ZSBj aGFuZ2UKPiAKClJldmlld2VkLWJ5OiBTZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9taXVtLm9yZz4K Cj4gU2lnbmVkLW9mZi1ieTogUmFqZXNoIFlhZGF2IDxyeWFkYXZAY29kZWF1cm9yYS5vcmc+Cj4g LS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICB8 ICAgMiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9pcnEuYyAg ICAgfCAgIDEgLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJm LmMgICAgfCAgIDUgKy0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMu YyAgICAgICAgIHwgICA3ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9j cnRjLmggICAgICAgICB8ICAgMiArCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9lbmNvZGVyLmMgICAgICB8ICAgMSAtCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9rbXMuYyAgICAgICAgICB8ICAzOSArLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfa21zLmggICAgICAgICAgfCAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfcG93ZXJfaGFuZGxlLmMgfCA2OTMgKysrKysrKysrKysrKysrKysrKysrKysK PiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3Bvd2VyX2hhbmRsZS5oIHwgMjg4 ICsrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmMgICAg ICAgICAgIHwgNjkzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9t c20vZHB1X3Bvd2VyX2hhbmRsZS5oICAgICAgICAgICB8IDI4OCAtLS0tLS0tLS0tCj4gIGRyaXZl cnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jICAgICAgICAgICAgICAgICAgICB8ICAgOSAtCj4gIGRy aXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oICAgICAgICAgICAgICAgICAgICB8ICAgNCAtCj4g IDE0IGZpbGVzIGNoYW5nZWQsIDEwMTMgaW5zZXJ0aW9ucygrKSwgMTAyMCBkZWxldGlvbnMoLSkK PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9w b3dlcl9oYW5kbGUuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X3Bvd2VyX2hhbmRsZS5oCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vbXNtL2RwdV9wb3dlcl9oYW5kbGUuYwo+ICBkZWxldGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUK PiBpbmRleCBkOTgyNmMxLi5mNTc4ZDVhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCj4gQEAgLTgy LDEwICs4MiwxMCBAQCBtc20teSA6PSBcCj4gIAlkaXNwL2RwdTEvZHB1X3JtLm8gXAo+ICAJZGlz cC9kcHUxL2RwdV92YmlmLm8gXAo+ICAJZGlzcC9kcHUxL2RwdV9tZHNzLm8gXAo+ICsJZGlzcC9k cHUxL2RwdV9wb3dlcl9oYW5kbGUubyBcCj4gIAlkcHVfZGJnLm8gXAo+ICAJZHB1X2lvX3V0aWwu byBcCj4gIAlkcHVfZGJnX2V2dGxvZy5vIFwKPiAtCWRwdV9wb3dlcl9oYW5kbGUubyBcCj4gIAlt c21fcHJvcC5vIFwKPiAgCW1zbV9hdG9taWMubyBcCj4gIAltc21fZGVidWdmcy5vIFwKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfaXJxLmMgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9pcnEuYwo+IGluZGV4IDVjNWNj NTYuLjMzYWIyYWMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2NvcmVfaXJxLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf Y29yZV9pcnEuYwo+IEBAIC0xOCw3ICsxOCw2IEBACj4gICNpbmNsdWRlIDxsaW51eC9rdGhyZWFk Lmg+Cj4gIAo+ICAjaW5jbHVkZSAiZHB1X2NvcmVfaXJxLmgiCj4gLSNpbmNsdWRlICJkcHVfcG93 ZXJfaGFuZGxlLmgiCj4gIAo+ICAvKioKPiAgICogZHB1X2NvcmVfaXJxX2NhbGxiYWNrX2hhbmRs ZXIgLSBkaXNwYXRjaCBjb3JlIGludGVycnVwdHMKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5jCj4gaW5kZXggMmNmM2ZjYS4uZDNhMWVkOSAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMKPiBAQCAt MjU3LDcgKzI1Nyw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfY29yZV9wZXJmX2NydGNfdXBkYXRlX2J1 cyhzdHJ1Y3QgZHB1X2ttcyAqa21zLAo+ICAJCQkJCT0gZHB1X2NydGNfZ2V0X2NsaWVudF90eXBl KGNydGMpOwo+ICAJc3RydWN0IGRybV9jcnRjICp0bXBfY3J0YzsKPiAgCXN0cnVjdCBkcHVfY3J0 Y19zdGF0ZSAqZHB1X2NzdGF0ZTsKPiAtCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXYgPSBr bXMtPmRldi0+ZGV2X3ByaXZhdGU7Cj4gIAo+ICAJZHJtX2Zvcl9lYWNoX2NydGModG1wX2NydGMs IGNydGMtPmRldikgewo+ICAJCWlmIChfZHB1X2NvcmVfcGVyZl9jcnRjX2lzX3Bvd2VyX29uKHRt cF9jcnRjKSAmJgo+IEBAIC0yODcsNyArMjg2LDcgQEAgc3RhdGljIHZvaWQgX2RwdV9jb3JlX3Bl cmZfY3J0Y191cGRhdGVfYnVzKHN0cnVjdCBkcHVfa21zICprbXMsCj4gIAo+ICAJc3dpdGNoIChj dXJyX2NsaWVudF90eXBlKSB7Cj4gIAljYXNlIE5SVF9DTElFTlQ6Cj4gLQkJZHB1X3Bvd2VyX2Rh dGFfYnVzX3NldF9xdW90YSgmcHJpdi0+cGhhbmRsZSwga21zLT5jb3JlX2NsaWVudCwKPiArCQlk cHVfcG93ZXJfZGF0YV9idXNfc2V0X3F1b3RhKCZrbXMtPnBoYW5kbGUsIGttcy0+Y29yZV9jbGll bnQsCj4gIAkJCQlEUFVfUE9XRVJfSEFORExFX0RBVEFfQlVTX0NMSUVOVF9OUlQsCj4gIAkJCQli dXNfaWQsIGJ1c19hYl9xdW90YSwgYnVzX2liX3F1b3RhKTsKPiAgCQlEUFVfREVCVUcoImNsaWVu dDolcyBidXNfaWQ9JWQgYWI9JWxsdSBpYj0lbGx1XG4iLCAibnJ0IiwKPiBAQCAtMjk1LDcgKzI5 NCw3IEBAIHN0YXRpYyB2b2lkIF9kcHVfY29yZV9wZXJmX2NydGNfdXBkYXRlX2J1cyhzdHJ1Y3Qg ZHB1X2ttcyAqa21zLAo+ICAJCWJyZWFrOwo+ICAKPiAgCWNhc2UgUlRfQ0xJRU5UOgo+IC0JCWRw dV9wb3dlcl9kYXRhX2J1c19zZXRfcXVvdGEoJnByaXYtPnBoYW5kbGUsIGttcy0+Y29yZV9jbGll bnQsCj4gKwkJZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9xdW90YSgma21zLT5waGFuZGxlLCBrbXMt PmNvcmVfY2xpZW50LAo+ICAJCQkJRFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfUlQs Cj4gIAkJCQlidXNfaWQsIGJ1c19hYl9xdW90YSwgYnVzX2liX3F1b3RhKTsKPiAgCQlEUFVfREVC VUcoImNsaWVudDolcyBidXNfaWQ9JWQgYWI9JWxsdSBpYj0lbGx1XG4iLCAicnQiLAo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwo+IGluZGV4IGUyZDJlMzIuLjk5YzVl NzUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMu Ywo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKPiBAQCAt NTk4LDYgKzU5OCw3IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9j cnRjICpjcnRjKQo+ICAJX2RwdV9jcnRjX2Rlc3Ryb3lfZGVzdF9zY2FsZXIoZHB1X2NydGMpOwo+ ICAKPiAgCV9kcHVfY3J0Y19kZWluaXRfZXZlbnRzKGRwdV9jcnRjKTsKPiArCWRwdV9jcnRjLT5w aGFuZGxlID0gTlVMTDsKPiAgCj4gIAlkcm1fY3J0Y19jbGVhbnVwKGNydGMpOwo+ICAJbXV0ZXhf ZGVzdHJveSgmZHB1X2NydGMtPmNydGNfbG9jayk7Cj4gQEAgLTI1NzIsNyArMjU3Myw3IEBAIHN0 YXRpYyB2b2lkIGRwdV9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICAJfQo+ ICAKPiAgCWlmIChkcHVfY3J0Yy0+cG93ZXJfZXZlbnQpCj4gLQkJZHB1X3Bvd2VyX2hhbmRsZV91 bnJlZ2lzdGVyX2V2ZW50KCZwcml2LT5waGFuZGxlLAo+ICsJCWRwdV9wb3dlcl9oYW5kbGVfdW5y ZWdpc3Rlcl9ldmVudChkcHVfY3J0Yy0+cGhhbmRsZSwKPiAgCQkJCWRwdV9jcnRjLT5wb3dlcl9l dmVudCk7Cj4gIAo+ICAKPiBAQCAtMjY0Myw3ICsyNjQ0LDcgQEAgc3RhdGljIHZvaWQgZHB1X2Ny dGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiAgCW11dGV4X3VubG9jaygmZHB1X2Ny dGMtPmNydGNfbG9jayk7Cj4gIAo+ICAJZHB1X2NydGMtPnBvd2VyX2V2ZW50ID0gZHB1X3Bvd2Vy X2hhbmRsZV9yZWdpc3Rlcl9ldmVudCgKPiAtCQkmcHJpdi0+cGhhbmRsZSwKPiArCQlkcHVfY3J0 Yy0+cGhhbmRsZSwKPiAgCQlEUFVfUE9XRVJfRVZFTlRfUE9TVF9FTkFCTEUgfCBEUFVfUE9XRVJf RVZFTlRfUE9TVF9ESVNBQkxFIHwKPiAgCQlEUFVfUE9XRVJfRVZFTlRfUFJFX0RJU0FCTEUsCj4g IAkJZHB1X2NydGNfaGFuZGxlX3Bvd2VyX2V2ZW50LCBjcnRjLCBkcHVfY3J0Yy0+bmFtZSk7Cj4g QEAgLTM5MzgsNiArMzkzOSw4IEBAIHN0cnVjdCBkcm1fY3J0YyAqZHB1X2NydGNfaW5pdChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPiAgCWRwdV9jcF9j cnRjX2luaXQoY3J0Yyk7Cj4gIAlkcHVfY3BfY3J0Y19pbnN0YWxsX3Byb3BlcnRpZXMoY3J0Yyk7 Cj4gIAo+ICsJZHB1X2NydGMtPnBoYW5kbGUgPSAma21zLT5waGFuZGxlOwo+ICsKPiAgCURQVV9E RUJVRygiJXM6IHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBjcnRjXG4iLCBkcHVfY3J0Yy0+bmFt ZSk7Cj4gIAlyZXR1cm4gY3J0YzsKPiAgfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2NydGMuaAo+IGluZGV4IDkzMDQwNTguLjY3MWQ5MDkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKPiBAQCAtMTg0LDYgKzE4NCw3IEBAIHN0cnVjdCBk cHVfY3J0Y19ldmVudCB7Cj4gICAqIEBtaXNyX2VuYWJsZSAgIDogYm9vbGVhbiBlbnRyeSBpbmRp Y2F0ZXMgbWlzciBlbmFibGUvZGlzYWJsZSBzdGF0dXMuCj4gICAqIEBtaXNyX2ZyYW1lX2NvdW50 ICA6IG1pc3IgZnJhbWUgY291bnQgcHJvdmlkZWQgYnkgY2xpZW50Cj4gICAqIEBtaXNyX2RhdGEg ICAgIDogc3RvcmUgbWlzciBkYXRhIGJlZm9yZSB0dXJuaW5nIG9mZiB0aGUgY2xvY2tzLgo+ICsg KiBAcGhhbmRsZTogUG9pbnRlciB0byBwb3dlciBoYW5kbGVyCj4gICAqIEBwb3dlcl9ldmVudCAg IDogcmVnaXN0ZXJlZCBwb3dlciBldmVudCBoYW5kbGUKPiAgICogQGN1cl9wZXJmICAgICAgOiBj dXJyZW50IHBlcmZvcm1hbmNlIGNvbW1pdHRlZCB0byBjbG9jay9iYW5kd2lkdGggZHJpdmVyCj4g ICAqIEBycF9sb2NrICAgICAgIDogc2VyaWFsaXphdGlvbiBsb2NrIGZvciByZXNvdXJjZSBwb29s Cj4gQEAgLTI0MCw2ICsyNDEsNyBAQCBzdHJ1Y3QgZHB1X2NydGMgewo+ICAJdTMyIG1pc3JfZnJh bWVfY291bnQ7Cj4gIAl1MzIgbWlzcl9kYXRhW0NSVENfRFVBTF9NSVhFUlNdOwo+ICAKPiArCXN0 cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlOwo+ICAJc3RydWN0IGRwdV9wb3dlcl9ldmVu dCAqcG93ZXJfZXZlbnQ7Cj4gIAo+ICAJc3RydWN0IGRwdV9jb3JlX3BlcmZfcGFyYW1zIGN1cl9w ZXJmOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5j b2Rlci5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYwo+IGlu ZGV4IDI5OGE2ZWYuLjExYWU2Y2MgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2VuY29kZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9lbmNvZGVyLmMKPiBAQCAtMzEsNyArMzEsNiBAQAo+ICAjaW5jbHVkZSAiZHB1X2h3 X2N0bC5oIgo+ICAjaW5jbHVkZSAiZHB1X2Zvcm1hdHMuaCIKPiAgI2luY2x1ZGUgImRwdV9lbmNv ZGVyX3BoeXMuaCIKPiAtI2luY2x1ZGUgImRwdV9wb3dlcl9oYW5kbGUuaCIKPiAgI2luY2x1ZGUg ImRwdV9jcnRjLmgiCj4gICNpbmNsdWRlICJkcHVfdHJhY2UuaCIKPiAgI2luY2x1ZGUgImRwdV9j b3JlX2lycS5oIgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMKPiBpbmRl eCA5YzNiMjIwLi4wNTk4Y2ZiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9rbXMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9rbXMuYwo+IEBAIC0xMDE3LDI0ICsxMDE3LDE5IEBAIHN0YXRpYyBsb25nIGRwdV9rbXNfcm91 bmRfcGl4Y2xrKHN0cnVjdCBtc21fa21zICprbXMsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKPiAgc3Rh dGljIHZvaWQgX2RwdV9rbXNfaHdfZGVzdHJveShzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcykKPiAg ewo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKPiAtCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUg KnByaXY7Cj4gIAlpbnQgaTsKPiAgCj4gIAlkZXYgPSBkcHVfa21zLT5kZXY7Cj4gIAlpZiAoIWRl dikKPiAgCQlyZXR1cm47Cj4gIAo+IC0JcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gLQlpZiAo IXByaXYpCj4gLQkJcmV0dXJuOwo+IC0KPiAgCWlmIChkcHVfa21zLT5od19pbnRyKQo+ICAJCWRw dV9od19pbnRyX2Rlc3Ryb3koZHB1X2ttcy0+aHdfaW50cik7Cj4gIAlkcHVfa21zLT5od19pbnRy ID0gTlVMTDsKPiAgCj4gIAlpZiAoZHB1X2ttcy0+cG93ZXJfZXZlbnQpCj4gIAkJZHB1X3Bvd2Vy X2hhbmRsZV91bnJlZ2lzdGVyX2V2ZW50KAo+IC0JCQkJJnByaXYtPnBoYW5kbGUsIGRwdV9rbXMt PnBvd2VyX2V2ZW50KTsKPiArCQkJCSZkcHVfa21zLT5waGFuZGxlLCBkcHVfa21zLT5wb3dlcl9l dmVudCk7Cj4gIAo+ICAJLyogc2FmZSB0byBjYWxsIHRoZXNlIG1vcmUgdGhhbiBvbmNlIGR1cmlu ZyBzaHV0ZG93biAqLwo+ICAJX2RwdV9kZWJ1Z2ZzX2Rlc3Ryb3koZHB1X2ttcyk7Cj4gQEAgLTEw NjcsNyArMTA2Miw4IEBAIHN0YXRpYyB2b2lkIF9kcHVfa21zX2h3X2Rlc3Ryb3koc3RydWN0IGRw dV9rbXMgKmRwdV9rbXMpCj4gIAlkcHVfa21zLT5jYXRhbG9nID0gTlVMTDsKPiAgCj4gIAlpZiAo ZHB1X2ttcy0+Y29yZV9jbGllbnQpCj4gLQkJZHB1X3Bvd2VyX2NsaWVudF9kZXN0cm95KCZwcml2 LT5waGFuZGxlLCBkcHVfa21zLT5jb3JlX2NsaWVudCk7Cj4gKwkJZHB1X3Bvd2VyX2NsaWVudF9k ZXN0cm95KCZkcHVfa21zLT5waGFuZGxlLAo+ICsJCQlkcHVfa21zLT5jb3JlX2NsaWVudCk7Cj4g IAlkcHVfa21zLT5jb3JlX2NsaWVudCA9IE5VTEw7Cj4gIAo+ICAJaWYgKGRwdV9rbXMtPnZiaWZb VkJJRl9OUlRdKQo+IEBAIC0xNjI0LDcgKzE2MjAsOCBAQCBzdGF0aWMgaW50IGRwdV9rbXNfaHdf aW5pdChzdHJ1Y3QgbXNtX2ttcyAqa21zKQo+ICAJfQo+ICAjZW5kaWYKPiAgCj4gLQlkcHVfa21z LT5jb3JlX2NsaWVudCA9IGRwdV9wb3dlcl9jbGllbnRfY3JlYXRlKCZwcml2LT5waGFuZGxlLCAi Y29yZSIpOwo+ICsJZHB1X2ttcy0+Y29yZV9jbGllbnQgPSBkcHVfcG93ZXJfY2xpZW50X2NyZWF0 ZSgmZHB1X2ttcy0+cGhhbmRsZSwKPiArCQkJCQkiY29yZSIpOwo+ICAJaWYgKElTX0VSUl9PUl9O VUxMKGRwdV9rbXMtPmNvcmVfY2xpZW50KSkgewo+ICAJCXJjID0gUFRSX0VSUihkcHVfa21zLT5j b3JlX2NsaWVudCk7Cj4gIAkJaWYgKCFkcHVfa21zLT5jb3JlX2NsaWVudCkKPiBAQCAtMTcyMSw3 ICsxNzE4LDggQEAgc3RhdGljIGludCBkcHVfa21zX2h3X2luaXQoc3RydWN0IG1zbV9rbXMgKmtt cykKPiAgI2VuZGlmCj4gIAo+ICAJcmMgPSBkcHVfY29yZV9wZXJmX2luaXQoJmRwdV9rbXMtPnBl cmYsIGRldiwgZHB1X2ttcy0+Y2F0YWxvZywKPiAtCQkJJnByaXYtPnBoYW5kbGUsIF9kcHVfa21z X2dldF9jbGsoZHB1X2ttcywgImNvcmVfY2xrIikpOwo+ICsJCQkmZHB1X2ttcy0+cGhhbmRsZSwK PiArCQkJX2RwdV9rbXNfZ2V0X2NsayhkcHVfa21zLCAiY29yZV9jbGsiKSk7Cj4gIAlpZiAocmMp IHsKPiAgCQlEUFVfRVJST1IoImZhaWxlZCB0byBpbml0IHBlcmYgJWRcbiIsIHJjKTsKPiAgCQln b3RvIHBlcmZfZXJyOwo+IEBAIC0xNzY1LDcgKzE3NjMsOCBAQCBzdGF0aWMgaW50IGRwdV9rbXNf aHdfaW5pdChzdHJ1Y3QgbXNtX2ttcyAqa21zKQo+ICAJICogSGFuZGxlIChyZSlpbml0aWFsaXph dGlvbnMgZHVyaW5nIHBvd2VyIGVuYWJsZQo+ICAJICovCj4gIAlkcHVfa21zX2hhbmRsZV9wb3dl cl9ldmVudChEUFVfUE9XRVJfRVZFTlRfUE9TVF9FTkFCTEUsIGRwdV9rbXMpOwo+IC0JZHB1X2tt cy0+cG93ZXJfZXZlbnQgPSBkcHVfcG93ZXJfaGFuZGxlX3JlZ2lzdGVyX2V2ZW50KCZwcml2LT5w aGFuZGxlLAo+ICsJZHB1X2ttcy0+cG93ZXJfZXZlbnQgPSBkcHVfcG93ZXJfaGFuZGxlX3JlZ2lz dGVyX2V2ZW50KAo+ICsJCQkmZHB1X2ttcy0+cGhhbmRsZSwKPiAgCQkJRFBVX1BPV0VSX0VWRU5U X1BPU1RfRU5BQkxFLAo+ICAJCQlkcHVfa21zX2hhbmRsZV9wb3dlcl9ldmVudCwgZHB1X2ttcywg ImttcyIpOwo+ICAKPiBAQCAtMTg0MSw2ICsxODQwLDEyIEBAIHN0YXRpYyBpbnQgZHB1X2JpbmQo c3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCj4g IAkJZ290byBjbGtfcmF0ZV9lcnJvcjsKPiAgCX0KPiAgCj4gKwlyZXQgPSBkcHVfcG93ZXJfcmVz b3VyY2VfaW5pdChwZGV2LCAmZHB1X2ttcy0+cGhhbmRsZSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJ cHJfZXJyKCJkcHUgcG93ZXIgcmVzb3VyY2UgaW5pdCBmYWlsZWRcbiIpOwo+ICsJCWdvdG8gcG93 ZXJfaW5pdF9mYWlsOwo+ICsJfQo+ICsKPiAgCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRw dV9rbXMpOwo+ICAKPiAgCW1zbV9rbXNfaW5pdCgmZHB1X2ttcy0+YmFzZSwgJmttc19mdW5jcyk7 Cj4gQEAgLTE4NTMsNiArMTg1OCw3IEBAIHN0YXRpYyBpbnQgZHB1X2JpbmQoc3RydWN0IGRldmlj ZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRhdGEpCj4gIAlwcml2LT5rbXMg PSAmZHB1X2ttcy0+YmFzZTsKPiAgCXJldHVybiByZXQ7Cj4gIAo+ICtwb3dlcl9pbml0X2ZhaWw6 Cj4gIGNsa19yYXRlX2Vycm9yOgo+ICAJbXNtX2Rzc19wdXRfY2xrKG1wLT5jbGtfY29uZmlnLCBt cC0+bnVtX2Nsayk7Cj4gIGNsa19nZXRfZXJyb3I6Cj4gQEAgLTE4NjcsNiArMTg3Myw3IEBAIHN0 YXRpYyB2b2lkIGRwdV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpt YXN0ZXIsIHZvaWQgKmRhdGEpCj4gIAlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttcyA9IHBsYXRmb3Jt X2dldF9kcnZkYXRhKHBkZXYpOwo+ICAJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKm1wID0gJmRw dV9rbXMtPm1wOwo+ICAKPiArCWRwdV9wb3dlcl9yZXNvdXJjZV9kZWluaXQocGRldiwgJmRwdV9r bXMtPnBoYW5kbGUpOwo+ICAJbXNtX2Rzc19wdXRfY2xrKG1wLT5jbGtfY29uZmlnLCBtcC0+bnVt X2Nsayk7Cj4gIAlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIG1wLT5jbGtfY29uZmlnKTsKPiAgCW1w LT5udW1fY2xrID0gMDsKPiBAQCAtMTg5Nyw3ICsxOTA0LDYgQEAgc3RhdGljIGludCBkcHVfcnVu dGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPiAgCXN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKPiAgCXN0cnVjdCBkcHVfa21zICpk cHVfa21zID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4gIAlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGRldjsKPiAtCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7Cj4gIAlzdHJ1Y3QgZHNz X21vZHVsZV9wb3dlciAqbXAgPSAmZHB1X2ttcy0+bXA7Cj4gIAo+ICAJZGRldiA9IGRwdV9rbXMt PmRldjsKPiBAQCAtMTkwNSwxMCArMTkxMSw5IEBAIHN0YXRpYyBpbnQgZHB1X3J1bnRpbWVfc3Vz cGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gIAkJRFBVX0VSUk9SKCJpbnZhbGlkIGRybV9kZXZp Y2VcbiIpOwo+ICAJCWdvdG8gZXhpdDsKPiAgCX0KPiAtCXByaXYgPSBkZGV2LT5kZXZfcHJpdmF0 ZTsKPiAgCj4gLQlyYyA9IGRwdV9wb3dlcl9yZXNvdXJjZV9lbmFibGUoJnByaXYtPnBoYW5kbGUs Cj4gLQkJZHB1X2ttcy0+Y29yZV9jbGllbnQsIGZhbHNlKTsKPiArCXJjID0gZHB1X3Bvd2VyX3Jl c291cmNlX2VuYWJsZSgmZHB1X2ttcy0+cGhhbmRsZSwKPiArCQkJZHB1X2ttcy0+Y29yZV9jbGll bnQsIGZhbHNlKTsKPiAgCWlmIChyYykKPiAgCQlEUFVfRVJST1IoInJlc291cmNlIGRpc2FibGUg ZmFpbGVkOiAlZFxuIiwgcmMpOwo+ICAKPiBAQCAtMTkyNiw3ICsxOTMxLDYgQEAgc3RhdGljIGlu dCBkcHVfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQo+ICAJc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwo+ICAJc3RydWN0IGRw dV9rbXMgKmRwdV9rbXMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiAgCXN0cnVjdCBk cm1fZGV2aWNlICpkZGV2Owo+IC0Jc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKPiAgCXN0 cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICptcCA9ICZkcHVfa21zLT5tcDsKPiAgCj4gIAlkZGV2ID0g ZHB1X2ttcy0+ZGV2Owo+IEBAIC0xOTM0LDcgKzE5MzgsNiBAQCBzdGF0aWMgaW50IGRwdV9ydW50 aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gIAkJRFBVX0VSUk9SKCJpbnZhbGlkIGRy bV9kZXZpY2VcbiIpOwo+ICAJCWdvdG8gZXhpdDsKPiAgCX0KPiAtCXByaXYgPSBkZGV2LT5kZXZf cHJpdmF0ZTsKPiAgCj4gIAlyYyA9IG1zbV9kc3NfZW5hYmxlX2NsayhtcC0+Y2xrX2NvbmZpZywg bXAtPm51bV9jbGssIHRydWUpOwo+ICAJaWYgKHJjKSB7Cj4gQEAgLTE5NDIsOCArMTk0NSw4IEBA IHN0YXRpYyBpbnQgZHB1X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPiAgCQln b3RvIGV4aXQ7Cj4gIAl9Cj4gIAo+IC0JcmMgPSBkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKCZw cml2LT5waGFuZGxlLCBkcHVfa21zLT5jb3JlX2NsaWVudCwKPiAtCQl0cnVlKTsKPiArCXJjID0g ZHB1X3Bvd2VyX3Jlc291cmNlX2VuYWJsZSgmZHB1X2ttcy0+cGhhbmRsZSwKPiArCQkJZHB1X2tt cy0+Y29yZV9jbGllbnQsIHRydWUpOwo+ICAJaWYgKHJjKQo+ICAJCURQVV9FUlJPUigicmVzb3Vy Y2UgZW5hYmxlIGZhaWxlZDogJWRcbiIsIHJjKTsKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9rbXMuaAo+IGluZGV4IGE4MjU1ZmUuLmM0OGVkNGUgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5oCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5oCj4gQEAgLTE2NCw2ICsxNjQsNyBAQCBzdHJ1 Y3QgZHB1X2ttcyB7Cj4gIAlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXRhbG9nOwo+ICAKPiAgCXN0 cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZVtNU01fU01NVV9ET01BSU5fTUFYXTsK PiArCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlIHBoYW5kbGU7Cj4gIAlzdHJ1Y3QgZHB1X3Bvd2Vy X2NsaWVudCAqY29yZV9jbGllbnQ7Cj4gICNpZmRlZiBDT05GSUdfSU9OCj4gIAlzdHJ1Y3QgaW9u X2NsaWVudCAqaWNsaWVudDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X3Bvd2VyX2hhbmRsZS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X3Bvd2VyX2hhbmRsZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw Li43N2JlMTA2Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9wb3dlcl9oYW5kbGUuYwo+IEBAIC0wLDAgKzEsNjkzIEBACj4gKy8qIENvcHly aWdodCAoYykgMjAxNC0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4gKyAqIG9ubHkg dmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNk ZWZpbmUgcHJfZm10KGZtdCkJIltkcm06JXM6JWRdOiAiIGZtdCwgX19mdW5jX18sIF9fTElORV9f Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZi5o Pgo+ICsjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRy ZXNzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tdXRl eC5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KPiArI2lmZGVmIENPTkZJR19R Q09NX0JVU19TQ0FMSU5HCj4gKyNpbmNsdWRlIDxsaW51eC9tc20tYnVzLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9tc20tYnVzLWJvYXJkLmg+Cj4gKyNlbmRpZgo+ICsjaW5jbHVkZSA8bGludXgvZHB1 X2lvX3V0aWwuaD4KPiArCj4gKyNpbmNsdWRlICJkcHVfcG93ZXJfaGFuZGxlLmgiCj4gKyNpbmNs dWRlICJkcHVfdHJhY2UuaCIKPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyICpkYXRhX2J1c19uYW1l W0RQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVhdID0gewo+ICsJW0RQVV9QT1dFUl9IQU5ETEVf REJVU19JRF9NTk9DXSA9ICJxY29tLGRwdS1kYXRhLWJ1cyIsCj4gKwlbRFBVX1BPV0VSX0hBTkRM RV9EQlVTX0lEX0xMQ0NdID0gInFjb20sZHB1LWxsY2MtYnVzIiwKPiArCVtEUFVfUE9XRVJfSEFO RExFX0RCVVNfSURfRUJJXSA9ICJxY29tLGRwdS1lYmktYnVzIiwKPiArfTsKPiArCj4gK2NvbnN0 IGNoYXIgKmRwdV9wb3dlcl9oYW5kbGVfZ2V0X2RidXNfbmFtZSh1MzIgYnVzX2lkKQo+ICt7Cj4g KwlpZiAoYnVzX2lkIDwgRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01BWCkKPiArCQlyZXR1cm4g ZGF0YV9idXNfbmFtZVtidXNfaWRdOwo+ICsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBkcHVfcG93ZXJfZXZlbnRfdHJpZ2dlcl9sb2NrZWQoc3RydWN0IGRwdV9wb3dl cl9oYW5kbGUgKnBoYW5kbGUsCj4gKwkJdTMyIGV2ZW50X3R5cGUpCj4gK3sKPiArCXN0cnVjdCBk cHVfcG93ZXJfZXZlbnQgKmV2ZW50Owo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQs ICZwaGFuZGxlLT5ldmVudF9saXN0LCBsaXN0KSB7Cj4gKwkJaWYgKGV2ZW50LT5ldmVudF90eXBl ICYgZXZlbnRfdHlwZSkKPiArCQkJZXZlbnQtPmNiX2ZuYyhldmVudF90eXBlLCBldmVudC0+dXNy KTsKPiArCX0KPiArfQo+ICsKPiArc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmRwdV9wb3dlcl9j bGllbnRfY3JlYXRlKAo+ICsJc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsIGNoYXIg KmNsaWVudF9uYW1lKQo+ICt7Cj4gKwlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqY2xpZW50Owo+ ICsJc3RhdGljIHUzMiBpZDsKPiArCj4gKwlpZiAoIWNsaWVudF9uYW1lIHx8ICFwaGFuZGxlKSB7 Cj4gKwkJcHJfZXJyKCJjbGllbnQgbmFtZSBpcyBudWxsIG9yIGludmFsaWQgcG93ZXIgZGF0YVxu Iik7Cj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwl9Cj4gKwo+ICsJY2xpZW50ID0g a3phbGxvYyhzaXplb2Yoc3RydWN0IGRwdV9wb3dlcl9jbGllbnQpLCBHRlBfS0VSTkVMKTsKPiAr CWlmICghY2xpZW50KQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsKPiArCW11dGV4 X2xvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7Cj4gKwlzdHJsY3B5KGNsaWVudC0+bmFtZSwg Y2xpZW50X25hbWUsIE1BWF9DTElFTlRfTkFNRV9MRU4pOwo+ICsJY2xpZW50LT51c2VjYXNlX25k eCA9IFZPVEVfSU5ERVhfRElTQUJMRTsKPiArCWNsaWVudC0+aWQgPSBpZDsKPiArCWNsaWVudC0+ YWN0aXZlID0gdHJ1ZTsKPiArCXByX2RlYnVnKCJjbGllbnQgJXMgY3JlYXRlZDolcEsgaWQgOiVk XG4iLCBjbGllbnRfbmFtZSwKPiArCQljbGllbnQsIGlkKTsKPiArCWlkKys7Cj4gKwlsaXN0X2Fk ZCgmY2xpZW50LT5saXN0LCAmcGhhbmRsZS0+cG93ZXJfY2xpZW50X2NsaXN0KTsKPiArCW11dGV4 X3VubG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKPiArCj4gKwlyZXR1cm4gY2xpZW50Owo+ ICt9Cj4gKwo+ICt2b2lkIGRwdV9wb3dlcl9jbGllbnRfZGVzdHJveShzdHJ1Y3QgZHB1X3Bvd2Vy X2hhbmRsZSAqcGhhbmRsZSwKPiArCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpjbGllbnQpCj4g K3sKPiArCWlmICghY2xpZW50ICB8fCAhcGhhbmRsZSkgewo+ICsJCXByX2VycigicmVnIGJ1cyB2 b3RlOiBpbnZhbGlkIGNsaWVudCBoYW5kbGVcbiIpOwo+ICsJfSBlbHNlIGlmICghY2xpZW50LT5h Y3RpdmUpIHsKPiArCQlwcl9lcnIoImRwdSBwb3dlciBkZWluaXQgYWxyZWFkeSBkb25lXG4iKTsK PiArCQlrZnJlZShjbGllbnQpOwo+ICsJfSBlbHNlIHsKPiArCQlwcl9kZWJ1ZygiYnVzIHZvdGUg Y2xpZW50ICVzIGRlc3Ryb3llZDolcEsgaWQ6JXVcbiIsCj4gKwkJCWNsaWVudC0+bmFtZSwgY2xp ZW50LCBjbGllbnQtPmlkKTsKPiArCQltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2sp Owo+ICsJCWxpc3RfZGVsX2luaXQoJmNsaWVudC0+bGlzdCk7Cj4gKwkJbXV0ZXhfdW5sb2NrKCZw aGFuZGxlLT5waGFuZGxlX2xvY2spOwo+ICsJCWtmcmVlKGNsaWVudCk7Cj4gKwl9Cj4gK30KPiAr Cj4gKyNpZmRlZiBDT05GSUdfUUNPTV9CVVNfU0NBTElORwo+ICsKPiArI2RlZmluZSBNQVhfQVhJ X1BPUlRfQ09VTlQgMwo+ICsKPiArc3RhdGljIGludCBfZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9x dW90YSgKPiArCQlzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSAqcGRidXMsCj4gKwkJ dTY0IGFiX3F1b3RhX3J0LCB1NjQgYWJfcXVvdGFfbnJ0LAo+ICsJCXU2NCBpYl9xdW90YV9ydCwg dTY0IGliX3F1b3RhX25ydCkKPiArewo+ICsJaW50IG5ld191Y19pZHg7Cj4gKwl1NjQgYWJfcXVv dGFbTUFYX0FYSV9QT1JUX0NPVU5UXSA9IHswLCAwfTsKPiArCXU2NCBpYl9xdW90YVtNQVhfQVhJ X1BPUlRfQ09VTlRdID0gezAsIDB9Owo+ICsJaW50IHJjOwo+ICsKPiArCWlmIChwZGJ1cy0+ZGF0 YV9idXNfaGRsIDwgMSkgewo+ICsJCXByX2VycigiaW52YWxpZCBidXMgaGFuZGxlICVkXG4iLCBw ZGJ1cy0+ZGF0YV9idXNfaGRsKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlw ZGJ1cy0+YWJfcnQgPSBhYl9xdW90YV9ydDsKPiArCXBkYnVzLT5pYl9ydCA9IGliX3F1b3RhX3J0 Owo+ICsJcGRidXMtPmFiX25ydCA9IGFiX3F1b3RhX25ydDsKPiArCXBkYnVzLT5pYl9ucnQgPSBp Yl9xdW90YV9ucnQ7Cj4gKwo+ICsJaWYgKHBkYnVzLT5lbmFibGUpIHsKPiArCQlhYl9xdW90YV9y dCA9IG1heF90KHU2NCwgYWJfcXVvdGFfcnQsCj4gKwkJCQlEUFVfUE9XRVJfSEFORExFX0VOQUJM RV9CVVNfQUJfUVVPVEEpOwo+ICsJCWliX3F1b3RhX3J0ID0gbWF4X3QodTY0LCBpYl9xdW90YV9y dCwKPiArCQkJCURQVV9QT1dFUl9IQU5ETEVfRU5BQkxFX0JVU19JQl9RVU9UQSk7Cj4gKwkJYWJf cXVvdGFfbnJ0ID0gbWF4X3QodTY0LCBhYl9xdW90YV9ucnQsCj4gKwkJCQlEUFVfUE9XRVJfSEFO RExFX0VOQUJMRV9CVVNfQUJfUVVPVEEpOwo+ICsJCWliX3F1b3RhX25ydCA9IG1heF90KHU2NCwg aWJfcXVvdGFfbnJ0LAo+ICsJCQkJRFBVX1BPV0VSX0hBTkRMRV9FTkFCTEVfQlVTX0lCX1FVT1RB KTsKPiArCX0gZWxzZSB7Cj4gKwkJYWJfcXVvdGFfcnQgPSBtaW5fdCh1NjQsIGFiX3F1b3RhX3J0 LAo+ICsJCQkJRFBVX1BPV0VSX0hBTkRMRV9ESVNBQkxFX0JVU19BQl9RVU9UQSk7Cj4gKwkJaWJf cXVvdGFfcnQgPSBtaW5fdCh1NjQsIGliX3F1b3RhX3J0LAo+ICsJCQkJRFBVX1BPV0VSX0hBTkRM RV9ESVNBQkxFX0JVU19JQl9RVU9UQSk7Cj4gKwkJYWJfcXVvdGFfbnJ0ID0gbWluX3QodTY0LCBh Yl9xdW90YV9ucnQsCj4gKwkJCQlEUFVfUE9XRVJfSEFORExFX0RJU0FCTEVfQlVTX0FCX1FVT1RB KTsKPiArCQlpYl9xdW90YV9ucnQgPSBtaW5fdCh1NjQsIGliX3F1b3RhX25ydCwKPiArCQkJCURQ VV9QT1dFUl9IQU5ETEVfRElTQUJMRV9CVVNfSUJfUVVPVEEpOwo+ICsJfQo+ICsKPiArCWlmICgh YWJfcXVvdGFfcnQgJiYgIWFiX3F1b3RhX25ydCAmJiAhaWJfcXVvdGFfcnQgJiYgIWliX3F1b3Rh X25ydCkgIHsKPiArCQluZXdfdWNfaWR4ID0gMDsKPiArCX0gZWxzZSB7Cj4gKwkJaW50IGk7Cj4g KwkJc3RydWN0IG1zbV9idXNfdmVjdG9ycyAqdmVjdCA9IE5VTEw7Cj4gKwkJc3RydWN0IG1zbV9i dXNfc2NhbGVfcGRhdGEgKmJ3X3RhYmxlID0KPiArCQkJcGRidXMtPmRhdGFfYnVzX3NjYWxlX3Rh YmxlOwo+ICsJCXUzMiBucnRfYXhpX3BvcnRfY250ID0gcGRidXMtPm5ydF9heGlfcG9ydF9jbnQ7 Cj4gKwkJdTMyIHRvdGFsX2F4aV9wb3J0X2NudCA9IHBkYnVzLT5heGlfcG9ydF9jbnQ7Cj4gKwkJ dTMyIHJ0X2F4aV9wb3J0X2NudCA9IHRvdGFsX2F4aV9wb3J0X2NudCAtIG5ydF9heGlfcG9ydF9j bnQ7Cj4gKwo+ICsJCWlmICghYndfdGFibGUgfHwgIXRvdGFsX2F4aV9wb3J0X2NudCB8fAo+ICsJ CSAgICB0b3RhbF9heGlfcG9ydF9jbnQgPiBNQVhfQVhJX1BPUlRfQ09VTlQpIHsKPiArCQkJcHJf ZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsK PiArCQlpZiAocGRidXMtPmJ1c19jaGFubmVscykgewo+ICsJCQlpYl9xdW90YV9ydCA9IGRpdl91 NjQoaWJfcXVvdGFfcnQsCj4gKwkJCQkJCXBkYnVzLT5idXNfY2hhbm5lbHMpOwo+ICsJCQlpYl9x dW90YV9ucnQgPSBkaXZfdTY0KGliX3F1b3RhX25ydCwKPiArCQkJCQkJcGRidXMtPmJ1c19jaGFu bmVscyk7Cj4gKwkJfQo+ICsKPiArCQlpZiAobnJ0X2F4aV9wb3J0X2NudCkgewo+ICsKPiArCQkJ YWJfcXVvdGFfcnQgPSBkaXZfdTY0KGFiX3F1b3RhX3J0LCBydF9heGlfcG9ydF9jbnQpOwo+ICsJ CQlhYl9xdW90YV9ucnQgPSBkaXZfdTY0KGFiX3F1b3RhX25ydCwgbnJ0X2F4aV9wb3J0X2NudCk7 Cj4gKwo+ICsJCQlmb3IgKGkgPSAwOyBpIDwgdG90YWxfYXhpX3BvcnRfY250OyBpKyspIHsKPiAr CQkJCWlmIChpIDwgcnRfYXhpX3BvcnRfY250KSB7Cj4gKwkJCQkJYWJfcXVvdGFbaV0gPSBhYl9x dW90YV9ydDsKPiArCQkJCQlpYl9xdW90YVtpXSA9IGliX3F1b3RhX3J0Owo+ICsJCQkJfSBlbHNl IHsKPiArCQkJCQlhYl9xdW90YVtpXSA9IGFiX3F1b3RhX25ydDsKPiArCQkJCQlpYl9xdW90YVtp XSA9IGliX3F1b3RhX25ydDsKPiArCQkJCX0KPiArCQkJfQo+ICsJCX0gZWxzZSB7Cj4gKwkJCWFi X3F1b3RhWzBdID0gZGl2X3U2NChhYl9xdW90YV9ydCArIGFiX3F1b3RhX25ydCwKPiArCQkJCQl0 b3RhbF9heGlfcG9ydF9jbnQpOwo+ICsJCQlpYl9xdW90YVswXSA9IGliX3F1b3RhX3J0ICsgaWJf cXVvdGFfbnJ0Owo+ICsKPiArCQkJZm9yIChpID0gMTsgaSA8IHRvdGFsX2F4aV9wb3J0X2NudDsg aSsrKSB7Cj4gKwkJCQlhYl9xdW90YVtpXSA9IGFiX3F1b3RhWzBdOwo+ICsJCQkJaWJfcXVvdGFb aV0gPSBpYl9xdW90YVswXTsKPiArCQkJfQo+ICsJCX0KPiArCj4gKwkJbmV3X3VjX2lkeCA9IChw ZGJ1cy0+Y3Vycl9id191Y19pZHggJQo+ICsJCQkoYndfdGFibGUtPm51bV91c2VjYXNlcyAtIDEp KSArIDE7Cj4gKwo+ICsJCWZvciAoaSA9IDA7IGkgPCB0b3RhbF9heGlfcG9ydF9jbnQ7IGkrKykg ewo+ICsJCQl2ZWN0ID0gJmJ3X3RhYmxlLT51c2VjYXNlW25ld191Y19pZHhdLnZlY3RvcnNbaV07 Cj4gKwkJCXZlY3QtPmFiID0gYWJfcXVvdGFbaV07Cj4gKwkJCXZlY3QtPmliID0gaWJfcXVvdGFb aV07Cj4gKwo+ICsJCQlwcl9kZWJ1ZygKPiArCQkJCSIlcyB1Y19pZHg9JWQgJXMgcGF0aCBpZHg9 JWQgYWI9JWxsdSBpYj0lbGx1XG4iLAo+ICsJCQkJYndfdGFibGUtPm5hbWUsCj4gKwkJCQluZXdf dWNfaWR4LCAoaSA8IHJ0X2F4aV9wb3J0X2NudCkgPyAicnQiIDogIm5ydCIKPiArCQkJCSwgaSwg dmVjdC0+YWIsIHZlY3QtPmliKTsKPiArCQl9Cj4gKwl9Cj4gKwlwZGJ1cy0+Y3Vycl9id191Y19p ZHggPSBuZXdfdWNfaWR4Owo+ICsJcGRidXMtPmFvX2J3X3VjX2lkeCA9IG5ld191Y19pZHg7Cj4g Kwo+ICsJRFBVX0FUUkFDRV9CRUdJTigibXNtX2J1c19zY2FsZV9yZXEiKTsKPiArCXJjID0gbXNt X2J1c19zY2FsZV9jbGllbnRfdXBkYXRlX3JlcXVlc3QocGRidXMtPmRhdGFfYnVzX2hkbCwKPiAr CQkJbmV3X3VjX2lkeCk7Cj4gKwlEUFVfQVRSQUNFX0VORCgibXNtX2J1c19zY2FsZV9yZXEiKTsK PiArCj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK2ludCBkcHVfcG93ZXJfZGF0YV9idXNfc2V0 X3F1b3RhKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAo+ICsJCXN0cnVjdCBkcHVf cG93ZXJfY2xpZW50ICpwY2xpZW50LAo+ICsJCWludCBidXNfY2xpZW50LCB1MzIgYnVzX2lkLAo+ ICsJCXU2NCBhYl9xdW90YSwgdTY0IGliX3F1b3RhKQo+ICt7Cj4gKwlpbnQgcmMgPSAwOwo+ICsJ aW50IGk7Cj4gKwl1NjQgdG90YWxfYWJfcnQgPSAwLCB0b3RhbF9pYl9ydCA9IDA7Cj4gKwl1NjQg dG90YWxfYWJfbnJ0ID0gMCwgdG90YWxfaWJfbnJ0ID0gMDsKPiArCXN0cnVjdCBkcHVfcG93ZXJf Y2xpZW50ICpjbGllbnQ7Cj4gKwo+ICsJaWYgKCFwaGFuZGxlIHx8ICFwY2xpZW50IHx8Cj4gKwkJ CWJ1c19jbGllbnQgPj0gRFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTUFYIHx8Cj4g KwkJCWJ1c19pZCA+PSBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTUFYKSB7Cj4gKwkJcHJfZXJy KCJpbnZhbGlkIHBhcmFtZXRlcnNcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsK PiArCW11dGV4X2xvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7Cj4gKwo+ICsJcGNsaWVudC0+ YWJbYnVzX2NsaWVudF0gPSBhYl9xdW90YTsKPiArCXBjbGllbnQtPmliW2J1c19jbGllbnRdID0g aWJfcXVvdGE7Cj4gKwl0cmFjZV9kcHVfcGVyZl91cGRhdGVfYnVzKGJ1c19jbGllbnQsIGFiX3F1 b3RhLCBpYl9xdW90YSk7Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGllbnQsICZwaGFu ZGxlLT5wb3dlcl9jbGllbnRfY2xpc3QsIGxpc3QpIHsKPiArCQlmb3IgKGkgPSAwOyBpIDwgRFBV X1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTUFYOyBpKyspIHsKPiArCQkJaWYgKGkgPT0g RFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTlJUKSB7Cj4gKwkJCQl0b3RhbF9hYl9u cnQgKz0gY2xpZW50LT5hYltpXTsKPiArCQkJCXRvdGFsX2liX25ydCArPSBjbGllbnQtPmliW2ld Owo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJdG90YWxfYWJfcnQgKz0gY2xpZW50LT5hYltpXTsKPiAr CQkJCXRvdGFsX2liX3J0ID0gbWF4KHRvdGFsX2liX3J0LCBjbGllbnQtPmliW2ldKTsKPiArCQkJ fQo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAocGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2J1c19p ZF0uZGF0YV9idXNfaGRsKQo+ICsJCXJjID0gX2RwdV9wb3dlcl9kYXRhX2J1c19zZXRfcXVvdGEo Cj4gKwkJCSZwaGFuZGxlLT5kYXRhX2J1c19oYW5kbGVbYnVzX2lkXSwKPiArCQkJdG90YWxfYWJf cnQsIHRvdGFsX2FiX25ydCwKPiArCQkJdG90YWxfaWJfcnQsIHRvdGFsX2liX25ydCk7Cj4gKwo+ ICsJbXV0ZXhfdW5sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOwo+ICsKPiArCXJldHVybiBy YzsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHB1X3Bvd2VyX2RhdGFfYnVzX3VucmVnaXN0ZXIo Cj4gKwkJc3RydWN0IGRwdV9wb3dlcl9kYXRhX2J1c19oYW5kbGUgKnBkYnVzKQo+ICt7Cj4gKwlp ZiAocGRidXMtPmRhdGFfYnVzX2hkbCkgewo+ICsJCW1zbV9idXNfc2NhbGVfdW5yZWdpc3Rlcl9j bGllbnQocGRidXMtPmRhdGFfYnVzX2hkbCk7Cj4gKwkJcGRidXMtPmRhdGFfYnVzX2hkbCA9IDA7 Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHB1X3Bvd2VyX2RhdGFfYnVzX3BhcnNlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4gKwlzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVz X2hhbmRsZSAqcGRidXMsIGNvbnN0IGNoYXIgKm5hbWUpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2Vf bm9kZSAqbm9kZTsKPiArCWludCByYyA9IDA7Cj4gKwlpbnQgcGF0aHM7Cj4gKwo+ICsJcGRidXMt PmJ1c19jaGFubmVscyA9IDE7Cj4gKwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRl di5vZl9ub2RlLAo+ICsJCSJxY29tLGRwdS1kcmFtLWNoYW5uZWxzIiwgJnBkYnVzLT5idXNfY2hh bm5lbHMpOwo+ICsJaWYgKHJjKSB7Cj4gKwkJcHJfZGVidWcoIm51bWJlciBvZiBjaGFubmVscyBw cm9wZXJ0eSBub3Qgc3BlY2lmaWVkXG4iKTsKPiArCQlyYyA9IDA7Cj4gKwl9Cj4gKwo+ICsJcGRi dXMtPm5ydF9heGlfcG9ydF9jbnQgPSAwOwo+ICsJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihw ZGV2LT5kZXYub2Zfbm9kZSwKPiArCQkJInFjb20sZHB1LW51bS1ucnQtcGF0aHMiLAo+ICsJCQkm cGRidXMtPm5ydF9heGlfcG9ydF9jbnQpOwo+ICsJaWYgKHJjKSB7Cj4gKwkJcHJfZGVidWcoIm51 bWJlciBvZiBheGkgcG9ydCBwcm9wZXJ0eSBub3Qgc3BlY2lmaWVkXG4iKTsKPiArCQlyYyA9IDA7 Cj4gKwl9Cj4gKwo+ICsJbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKHBkZXYtPmRldi5vZl9u b2RlLCBuYW1lKTsKPiArCWlmIChub2RlKSB7Cj4gKwkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3Uz Mihub2RlLAo+ICsJCQkJInFjb20sbXNtLWJ1cyxudW0tcGF0aHMiLCAmcGF0aHMpOwo+ICsJCWlm IChyYykgewo+ICsJCQlwcl9lcnIoIkVycm9yLiBxY29tLG1zbS1idXMsbnVtLXBhdGhzIG5vdCBm b3VuZFxuIik7Cj4gKwkJCXJldHVybiByYzsKPiArCQl9Cj4gKwkJcGRidXMtPmF4aV9wb3J0X2Nu dCA9IHBhdGhzOwo+ICsKPiArCQlwZGJ1cy0+ZGF0YV9idXNfc2NhbGVfdGFibGUgPQo+ICsJCQkJ bXNtX2J1c19wZGF0YV9mcm9tX25vZGUocGRldiwgbm9kZSk7Cj4gKwkJaWYgKElTX0VSUl9PUl9O VUxMKHBkYnVzLT5kYXRhX2J1c19zY2FsZV90YWJsZSkpIHsKPiArCQkJcHJfZXJyKCJyZWcgYnVz IGhhbmRsZSBwYXJzaW5nIGZhaWxlZFxuIik7Cj4gKwkJCXJjID0gUFRSX0VSUihwZGJ1cy0+ZGF0 YV9idXNfc2NhbGVfdGFibGUpOwo+ICsJCQlpZiAoIXBkYnVzLT5kYXRhX2J1c19zY2FsZV90YWJs ZSkKPiArCQkJCXJjID0gLUVJTlZBTDsKPiArCQkJZ290byBlbmQ7Cj4gKwkJfQo+ICsJCXBkYnVz LT5kYXRhX2J1c19oZGwgPSBtc21fYnVzX3NjYWxlX3JlZ2lzdGVyX2NsaWVudCgKPiArCQkJCXBk YnVzLT5kYXRhX2J1c19zY2FsZV90YWJsZSk7Cj4gKwkJaWYgKCFwZGJ1cy0+ZGF0YV9idXNfaGRs KSB7Cj4gKwkJCXByX2VycigiZGF0YV9idXNfY2xpZW50IHJlZ2lzdGVyIGZhaWxlZFxuIik7Cj4g KwkJCXJjID0gLUVJTlZBTDsKPiArCQkJZ290byBlbmQ7Cj4gKwkJfQo+ICsJCXByX2RlYnVnKCJy ZWdpc3RlciAlcyBkYXRhX2J1c19oZGw9JXhcbiIsIG5hbWUsCj4gKwkJCQlwZGJ1cy0+ZGF0YV9i dXNfaGRsKTsKPiArCX0KPiArCj4gK2VuZDoKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiArc3Rh dGljIGludCBkcHVfcG93ZXJfcmVnX2J1c19wYXJzZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2LAo+ICsJc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUpCj4gK3sKPiArCXN0cnVj dCBkZXZpY2Vfbm9kZSAqbm9kZTsKPiArCXN0cnVjdCBtc21fYnVzX3NjYWxlX3BkYXRhICpidXNf c2NhbGVfdGFibGU7Cj4gKwlpbnQgcmMgPSAwOwo+ICsKPiArCW5vZGUgPSBvZl9nZXRfY2hpbGRf YnlfbmFtZShwZGV2LT5kZXYub2Zfbm9kZSwgInFjb20sZHB1LXJlZy1idXMiKTsKPiArCWlmIChu b2RlKSB7Cj4gKwkJYnVzX3NjYWxlX3RhYmxlID0gbXNtX2J1c19wZGF0YV9mcm9tX25vZGUocGRl diwgbm9kZSk7Cj4gKwkJaWYgKElTX0VSUl9PUl9OVUxMKGJ1c19zY2FsZV90YWJsZSkpIHsKPiAr CQkJcHJfZXJyKCJyZWcgYnVzIGhhbmRsZSBwYXJzaW5nIGZhaWxlZFxuIik7Cj4gKwkJCXJjID0g UFRSX0VSUihidXNfc2NhbGVfdGFibGUpOwo+ICsJCQlpZiAoIWJ1c19zY2FsZV90YWJsZSkKPiAr CQkJCXJjID0gLUVJTlZBTDsKPiArCQkJZ290byBlbmQ7Cj4gKwkJfQo+ICsJCXBoYW5kbGUtPnJl Z19idXNfaGRsID0gbXNtX2J1c19zY2FsZV9yZWdpc3Rlcl9jbGllbnQoCj4gKwkJCSAgICAgIGJ1 c19zY2FsZV90YWJsZSk7Cj4gKwkJaWYgKCFwaGFuZGxlLT5yZWdfYnVzX2hkbCkgewo+ICsJCQlw cl9lcnIoInJlZ19idXNfY2xpZW50IHJlZ2lzdGVyIGZhaWxlZFxuIik7Cj4gKwkJCXJjID0gLUVJ TlZBTDsKPiArCQkJZ290byBlbmQ7Cj4gKwkJfQo+ICsJCXByX2RlYnVnKCJyZWdpc3RlciByZWdf YnVzX2hkbD0leFxuIiwgcGhhbmRsZS0+cmVnX2J1c19oZGwpOwo+ICsJfQo+ICsKPiArZW5kOgo+ ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcHVfcG93ZXJfcmVnX2J1c191 bnJlZ2lzdGVyKHUzMiByZWdfYnVzX2hkbCkKPiArewo+ICsJaWYgKHJlZ19idXNfaGRsKQo+ICsJ CW1zbV9idXNfc2NhbGVfdW5yZWdpc3Rlcl9jbGllbnQocmVnX2J1c19oZGwpOwo+ICt9Cj4gKwo+ ICtpbnQgZHB1X3Bvd2VyX2RhdGFfYnVzX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hh bmRsZSAqcGhhbmRsZSwKPiArCQkJCQkJCWJvb2wgZW5hYmxlKQo+ICt7Cj4gKwlpbnQgaTsKPiAr Cj4gKwlpZiAoIXBoYW5kbGUpIHsKPiArCQlwcl9lcnIoImludmFsaWQgcGFyYW1cbiIpOwo+ICsJ CXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9IERQVV9QT1dFUl9IQU5ETEVf REJVU19JRF9NTk9DOwo+ICsJCQlpIDwgRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01BWDsgaSsr KQo+ICsJCXBoYW5kbGUtPmRhdGFfYnVzX2hhbmRsZVtpXS5lbmFibGUgPSBlbmFibGU7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHB1X3Bvd2VyX2RhdGFfYnVzX3Vw ZGF0ZShzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSAqcGRidXMsCj4gKwkJCQkJCQli b29sIGVuYWJsZSkKPiArewo+ICsJaW50IHJjID0gMDsKPiArCj4gKwlwZGJ1cy0+ZW5hYmxlID0g ZW5hYmxlOwo+ICsKPiArCWlmIChwZGJ1cy0+ZGF0YV9idXNfaGRsKQo+ICsJCXJjID0gX2RwdV9w b3dlcl9kYXRhX2J1c19zZXRfcXVvdGEocGRidXMsIHBkYnVzLT5hYl9ydCwKPiArCQkJCXBkYnVz LT5hYl9ucnQsIHBkYnVzLT5pYl9ydCwgcGRidXMtPmliX25ydCk7Cj4gKwo+ICsJaWYgKHJjKQo+ ICsJCXByX2VycigiZmFpbGVkIHRvIHNldCBkYXRhIGJ1cyB2b3RlIHJjPSVkIGVuYWJsZTolZFxu IiwKPiArCQkJCQkJCXJjLCBlbmFibGUpOwo+ICsKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiAr c3RhdGljIGludCBkcHVfcG93ZXJfcmVnX2J1c191cGRhdGUodTMyIHJlZ19idXNfaGRsLCB1MzIg dXNlY2FzZV9uZHgpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwo+ICsJaWYgKHJlZ19idXNfaGRs KQo+ICsJCXJjID0gbXNtX2J1c19zY2FsZV9jbGllbnRfdXBkYXRlX3JlcXVlc3QocmVnX2J1c19o ZGwsCj4gKwkJCQkJCQkJdXNlY2FzZV9uZHgpOwo+ICsJaWYgKHJjKQo+ICsJCXByX2VycigiZmFp bGVkIHRvIHNldCByZWcgYnVzIHZvdGUgcmM9JWRcbiIsIHJjKTsKPiArCj4gKwlyZXR1cm4gcmM7 Cj4gK30KPiArI2Vsc2UKPiArc3RhdGljIGludCBkcHVfcG93ZXJfZGF0YV9idXNfcGFyc2Uoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPiArCQlzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVz X2hhbmRsZSAqcGRidXMsIGNvbnN0IGNoYXIgKm5hbWUpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcHVfcG93ZXJfZGF0YV9idXNfdW5yZWdpc3RlcigKPiArCQlz dHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSAqcGRidXMpCj4gK3sKPiArfQo+ICsKPiAr aW50IGRwdV9wb3dlcl9kYXRhX2J1c19zZXRfcXVvdGEoc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUg KnBoYW5kbGUsCj4gKwkJc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKnBjbGllbnQsCj4gKwkJaW50 IGJ1c19jbGllbnQsIHUzMiBidXNfaWQsCj4gKwkJdTY0IGFiX3F1b3RhLCB1NjQgaWJfcXVvdGEp Cj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwdV9wb3dlcl9yZWdf YnVzX3BhcnNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4gKwlzdHJ1Y3QgZHB1X3Bv d2VyX2hhbmRsZSAqcGhhbmRsZSkKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGRwdV9wb3dlcl9yZWdfYnVzX3VucmVnaXN0ZXIodTMyIHJlZ19idXNfaGRsKQo+ICt7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHB1X3Bvd2VyX3JlZ19idXNfdXBkYXRlKHUzMiByZWdf YnVzX2hkbCwgdTMyIHVzZWNhc2VfbmR4KQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr c3RhdGljIGludCBkcHVfcG93ZXJfZGF0YV9idXNfdXBkYXRlKHN0cnVjdCBkcHVfcG93ZXJfZGF0 YV9idXNfaGFuZGxlICpwZGJ1cywKPiArCQkJCQkJCWJvb2wgZW5hYmxlKQo+ICt7Cj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiAraW50IGRwdV9wb3dlcl9kYXRhX2J1c19zdGF0ZV91cGRhdGUoc3Ry dWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCj4gKwkJCQkJCQlib29sIGVuYWJsZSkKPiAr ewo+ICsJcmV0dXJuIDA7Cj4gK30KPiArI2VuZGlmCj4gKwo+ICtpbnQgZHB1X3Bvd2VyX3Jlc291 cmNlX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPiArCXN0cnVjdCBkcHVfcG93 ZXJfaGFuZGxlICpwaGFuZGxlKQo+ICt7Cj4gKwlpbnQgcmMgPSAwLCBpOwo+ICsKPiArCWlmICgh cGhhbmRsZSB8fCAhcGRldikgewo+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dCBwYXJhbVxuIik7 Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcGhhbmRsZS0+ZGV2ID0gJnBkZXYt PmRldjsKPiArCj4gKwlyYyA9IGRwdV9wb3dlcl9yZWdfYnVzX3BhcnNlKHBkZXYsIHBoYW5kbGUp Owo+ICsJaWYgKHJjKSB7Cj4gKwkJcHJfZXJyKCJyZWdpc3RlciBidXMgcGFyc2UgZmFpbGVkIHJj PSVkXG4iLCByYyk7Cj4gKwkJcmV0dXJuIHJjOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9IERQVV9Q T1dFUl9IQU5ETEVfREJVU19JRF9NTk9DOwo+ICsJCQlpIDwgRFBVX1BPV0VSX0hBTkRMRV9EQlVT X0lEX01BWDsgaSsrKSB7Cj4gKwkJcmMgPSBkcHVfcG93ZXJfZGF0YV9idXNfcGFyc2UocGRldiwK PiArCQkJCSZwaGFuZGxlLT5kYXRhX2J1c19oYW5kbGVbaV0sCj4gKwkJCQlkYXRhX2J1c19uYW1l W2ldKTsKPiArCQlpZiAocmMpIHsKPiArCQkJcHJfZXJyKCJyZWdpc3RlciBkYXRhIGJ1cyBwYXJz ZSBmYWlsZWQgaWQ9JWQgcmM9JWRcbiIsCj4gKwkJCQkJaSwgcmMpOwo+ICsJCQlnb3RvIGRhdGFf YnVzX2VycjsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJSU5JVF9MSVNUX0hFQUQoJnBoYW5kbGUtPnBv d2VyX2NsaWVudF9jbGlzdCk7Cj4gKwlJTklUX0xJU1RfSEVBRCgmcGhhbmRsZS0+ZXZlbnRfbGlz dCk7Cj4gKwo+ICsJbXV0ZXhfaW5pdCgmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKPiArCj4gKwly ZXR1cm4gcmM7Cj4gKwo+ICtkYXRhX2J1c19lcnI6Cj4gKwlmb3IgKGktLTsgaSA+PSAwOyBpLS0p Cj4gKwkJZHB1X3Bvd2VyX2RhdGFfYnVzX3VucmVnaXN0ZXIoJnBoYW5kbGUtPmRhdGFfYnVzX2hh bmRsZVtpXSk7Cj4gKwlkcHVfcG93ZXJfcmVnX2J1c191bnJlZ2lzdGVyKHBoYW5kbGUtPnJlZ19i dXNfaGRsKTsKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiArdm9pZCBkcHVfcG93ZXJfcmVzb3Vy Y2VfZGVpbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4gKwlzdHJ1Y3QgZHB1X3Bv d2VyX2hhbmRsZSAqcGhhbmRsZSkKPiArewo+ICsJc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmN1 cnJfY2xpZW50LCAqbmV4dF9jbGllbnQ7Cj4gKwlzdHJ1Y3QgZHB1X3Bvd2VyX2V2ZW50ICpjdXJy X2V2ZW50LCAqbmV4dF9ldmVudDsKPiArCWludCBpOwo+ICsKPiArCWlmICghcGhhbmRsZSB8fCAh cGRldikgewo+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dCBwYXJhbVxuIik7Cj4gKwkJcmV0dXJu Owo+ICsJfQo+ICsKPiArCW11dGV4X2xvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7Cj4gKwls aXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3Vycl9jbGllbnQsIG5leHRfY2xpZW50LAo+ICsJCQkm cGhhbmRsZS0+cG93ZXJfY2xpZW50X2NsaXN0LCBsaXN0KSB7Cj4gKwkJcHJfZXJyKCJjbGllbmQ6 JXMtJWQgc3RpbGwgcmVnaXN0ZXJlZCB3aXRoIHJlZmNvdW50OiVkXG4iLAo+ICsJCQkJY3Vycl9j bGllbnQtPm5hbWUsIGN1cnJfY2xpZW50LT5pZCwKPiArCQkJCWN1cnJfY2xpZW50LT5yZWZjb3Vu dCk7Cj4gKwkJY3Vycl9jbGllbnQtPmFjdGl2ZSA9IGZhbHNlOwo+ICsJCWxpc3RfZGVsKCZjdXJy X2NsaWVudC0+bGlzdCk7Cj4gKwl9Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN1 cnJfZXZlbnQsIG5leHRfZXZlbnQsCj4gKwkJCSZwaGFuZGxlLT5ldmVudF9saXN0LCBsaXN0KSB7 Cj4gKwkJcHJfZXJyKCJldmVudDolZCwgY2xpZW50OiVzIHN0aWxsIHJlZ2lzdGVyZWRcbiIsCj4g KwkJCQljdXJyX2V2ZW50LT5ldmVudF90eXBlLAo+ICsJCQkJY3Vycl9ldmVudC0+Y2xpZW50X25h bWUpOwo+ICsJCWN1cnJfZXZlbnQtPmFjdGl2ZSA9IGZhbHNlOwo+ICsJCWxpc3RfZGVsKCZjdXJy X2V2ZW50LT5saXN0KTsKPiArCX0KPiArCW11dGV4X3VubG9jaygmcGhhbmRsZS0+cGhhbmRsZV9s b2NrKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01B WDsgaSsrKQo+ICsJCWRwdV9wb3dlcl9kYXRhX2J1c191bnJlZ2lzdGVyKCZwaGFuZGxlLT5kYXRh X2J1c19oYW5kbGVbaV0pOwo+ICsKPiArCWRwdV9wb3dlcl9yZWdfYnVzX3VucmVnaXN0ZXIocGhh bmRsZS0+cmVnX2J1c19oZGwpOwo+ICt9Cj4gKwo+ICtpbnQgZHB1X3Bvd2VyX3Jlc291cmNlX2Vu YWJsZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKPiArCXN0cnVjdCBkcHVfcG93 ZXJfY2xpZW50ICpwY2xpZW50LCBib29sIGVuYWJsZSkKPiArewo+ICsJaW50IHJjID0gMCwgaTsK PiArCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwo+ICsJdTMyIG1heF91c2VjYXNlX25keCA9IFZPVEVf SU5ERVhfRElTQUJMRSwgcHJldl91c2VjYXNlX25keDsKPiArCXN0cnVjdCBkcHVfcG93ZXJfY2xp ZW50ICpjbGllbnQ7Cj4gKwo+ICsJaWYgKCFwaGFuZGxlIHx8ICFwY2xpZW50KSB7Cj4gKwkJcHJf ZXJyKCJpbnZhbGlkIGlucHV0IGFyZ3VtZW50XG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiAr CX0KPiArCj4gKwltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOwo+ICsJaWYgKGVu YWJsZSkKPiArCQlwY2xpZW50LT5yZWZjb3VudCsrOwo+ICsJZWxzZSBpZiAocGNsaWVudC0+cmVm Y291bnQpCj4gKwkJcGNsaWVudC0+cmVmY291bnQtLTsKPiArCj4gKwlpZiAocGNsaWVudC0+cmVm Y291bnQpCj4gKwkJcGNsaWVudC0+dXNlY2FzZV9uZHggPSBWT1RFX0lOREVYX0xPVzsKPiArCWVs c2UKPiArCQlwY2xpZW50LT51c2VjYXNlX25keCA9IFZPVEVfSU5ERVhfRElTQUJMRTsKPiArCj4g KwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwgJnBoYW5kbGUtPnBvd2VyX2NsaWVudF9jbGlz dCwgbGlzdCkgewo+ICsJCWlmIChjbGllbnQtPnVzZWNhc2VfbmR4IDwgVk9URV9JTkRFWF9NQVgg JiYKPiArCQkgICAgY2xpZW50LT51c2VjYXNlX25keCA+IG1heF91c2VjYXNlX25keCkKPiArCQkJ bWF4X3VzZWNhc2VfbmR4ID0gY2xpZW50LT51c2VjYXNlX25keDsKPiArCX0KPiArCj4gKwlpZiAo cGhhbmRsZS0+Y3VycmVudF91c2VjYXNlX25keCAhPSBtYXhfdXNlY2FzZV9uZHgpIHsKPiArCQlj aGFuZ2VkID0gdHJ1ZTsKPiArCQlwcmV2X3VzZWNhc2VfbmR4ID0gcGhhbmRsZS0+Y3VycmVudF91 c2VjYXNlX25keDsKPiArCQlwaGFuZGxlLT5jdXJyZW50X3VzZWNhc2VfbmR4ID0gbWF4X3VzZWNh c2VfbmR4Owo+ICsJfQo+ICsKPiArCXByX2RlYnVnKCIlcFM6IGNoYW5nZWQ9JWQgY3VycmVudCBp ZHg9JWQgcmVxdWVzdCBjbGllbnQgJXMgaWQ6JXUgZW5hYmxlOiVkIHJlZmNvdW50OiVkXG4iLAo+ ICsJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgY2hhbmdlZCwgbWF4X3VzZWNhc2VfbmR4 LAo+ICsJCXBjbGllbnQtPm5hbWUsIHBjbGllbnQtPmlkLCBlbmFibGUsIHBjbGllbnQtPnJlZmNv dW50KTsKPiArCj4gKwlpZiAoIWNoYW5nZWQpCj4gKwkJZ290byBlbmQ7Cj4gKwo+ICsJaWYgKGVu YWJsZSkgewo+ICsJCWRwdV9wb3dlcl9ldmVudF90cmlnZ2VyX2xvY2tlZChwaGFuZGxlLAo+ICsJ CQkJRFBVX1BPV0VSX0VWRU5UX1BSRV9FTkFCTEUpOwo+ICsKPiArCQlmb3IgKGkgPSAwOyBpIDwg RFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01BWDsgaSsrKSB7Cj4gKwkJCXJjID0gZHB1X3Bvd2Vy X2RhdGFfYnVzX3VwZGF0ZSgKPiArCQkJCQkmcGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2ldLCBl bmFibGUpOwo+ICsJCQlpZiAocmMpIHsKPiArCQkJCXByX2VycigiZmFpbGVkIHRvIHNldCBkYXRh IGJ1cyB2b3RlIGlkPSVkIHJjPSVkXG4iLAo+ICsJCQkJCQlpLCByYyk7Cj4gKwkJCQlnb3RvIGRh dGFfYnVzX2hkbF9lcnI7Cj4gKwkJCX0KPiArCQl9Cj4gKwo+ICsJCXJjID0gZHB1X3Bvd2VyX3Jl Z19idXNfdXBkYXRlKHBoYW5kbGUtPnJlZ19idXNfaGRsLAo+ICsJCQkJCQkJbWF4X3VzZWNhc2Vf bmR4KTsKPiArCQlpZiAocmMpIHsKPiArCQkJcHJfZXJyKCJmYWlsZWQgdG8gc2V0IHJlZyBidXMg dm90ZSByYz0lZFxuIiwgcmMpOwo+ICsJCQlnb3RvIHJlZ19idXNfaGRsX2VycjsKPiArCQl9Cj4g Kwo+ICsJCWRwdV9wb3dlcl9ldmVudF90cmlnZ2VyX2xvY2tlZChwaGFuZGxlLAo+ICsJCQkJRFBV X1BPV0VSX0VWRU5UX1BPU1RfRU5BQkxFKTsKPiArCj4gKwl9IGVsc2Ugewo+ICsJCWRwdV9wb3dl cl9ldmVudF90cmlnZ2VyX2xvY2tlZChwaGFuZGxlLAo+ICsJCQkJRFBVX1BPV0VSX0VWRU5UX1BS RV9ESVNBQkxFKTsKPiArCj4gKwkJZHB1X3Bvd2VyX3JlZ19idXNfdXBkYXRlKHBoYW5kbGUtPnJl Z19idXNfaGRsLAo+ICsJCQkJCQkJbWF4X3VzZWNhc2VfbmR4KTsKPiArCj4gKwkJZm9yIChpID0g MCA7IGkgPCBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTUFYOyBpKyspCj4gKwkJCWRwdV9wb3dl cl9kYXRhX2J1c191cGRhdGUoJnBoYW5kbGUtPmRhdGFfYnVzX2hhbmRsZVtpXSwKPiArCQkJCQll bmFibGUpOwo+ICsKPiArCQlkcHVfcG93ZXJfZXZlbnRfdHJpZ2dlcl9sb2NrZWQocGhhbmRsZSwK PiArCQkJCURQVV9QT1dFUl9FVkVOVF9QT1NUX0RJU0FCTEUpOwo+ICsJfQo+ICsKPiArZW5kOgo+ ICsJbXV0ZXhfdW5sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOwo+ICsJcmV0dXJuIHJjOwo+ ICsKPiArcmVnX2J1c19oZGxfZXJyOgo+ICsJZm9yIChpID0gMCA7IGkgPCBEUFVfUE9XRVJfSEFO RExFX0RCVVNfSURfTUFYOyBpKyspCj4gKwkJZHB1X3Bvd2VyX2RhdGFfYnVzX3VwZGF0ZSgmcGhh bmRsZS0+ZGF0YV9idXNfaGFuZGxlW2ldLCAwKTsKPiArZGF0YV9idXNfaGRsX2VycjoKPiArCXBo YW5kbGUtPmN1cnJlbnRfdXNlY2FzZV9uZHggPSBwcmV2X3VzZWNhc2VfbmR4Owo+ICsJbXV0ZXhf dW5sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOwo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ ICtzdHJ1Y3QgZHB1X3Bvd2VyX2V2ZW50ICpkcHVfcG93ZXJfaGFuZGxlX3JlZ2lzdGVyX2V2ZW50 KAo+ICsJCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAo+ICsJCXUzMiBldmVudF90 eXBlLCB2b2lkICgqY2JfZm5jKSh1MzIgZXZlbnRfdHlwZSwgdm9pZCAqdXNyKSwKPiArCQl2b2lk ICp1c3IsIGNoYXIgKmNsaWVudF9uYW1lKQo+ICt7Cj4gKwlzdHJ1Y3QgZHB1X3Bvd2VyX2V2ZW50 ICpldmVudDsKPiArCj4gKwlpZiAoIXBoYW5kbGUpIHsKPiArCQlwcl9lcnIoImludmFsaWQgcG93 ZXIgaGFuZGxlXG4iKTsKPiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiArCX0gZWxzZSBp ZiAoIWNiX2ZuYyB8fCAhZXZlbnRfdHlwZSkgewo+ICsJCXByX2Vycigibm8gY2FsbGJhY2sgZm5j IG9yIGV2ZW50IHR5cGVcbiIpOwo+ICsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+ICsJfQo+ ICsKPiArCWV2ZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRwdV9wb3dlcl9ldmVudCksIEdG UF9LRVJORUwpOwo+ICsJaWYgKCFldmVudCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsK PiArCj4gKwlldmVudC0+ZXZlbnRfdHlwZSA9IGV2ZW50X3R5cGU7Cj4gKwlldmVudC0+Y2JfZm5j ID0gY2JfZm5jOwo+ICsJZXZlbnQtPnVzciA9IHVzcjsKPiArCXN0cmxjcHkoZXZlbnQtPmNsaWVu dF9uYW1lLCBjbGllbnRfbmFtZSwgTUFYX0NMSUVOVF9OQU1FX0xFTik7Cj4gKwlldmVudC0+YWN0 aXZlID0gdHJ1ZTsKPiArCj4gKwltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOwo+ ICsJbGlzdF9hZGQoJmV2ZW50LT5saXN0LCAmcGhhbmRsZS0+ZXZlbnRfbGlzdCk7Cj4gKwltdXRl eF91bmxvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7Cj4gKwo+ICsJcmV0dXJuIGV2ZW50Owo+ ICt9Cj4gKwo+ICt2b2lkIGRwdV9wb3dlcl9oYW5kbGVfdW5yZWdpc3Rlcl9ldmVudCgKPiArCQlz dHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKPiArCQlzdHJ1Y3QgZHB1X3Bvd2VyX2V2 ZW50ICpldmVudCkKPiArewo+ICsJaWYgKCFwaGFuZGxlIHx8ICFldmVudCkgewo+ICsJCXByX2Vy cigiaW52YWxpZCBwaGFuZGxlIG9yIGV2ZW50XG4iKTsKPiArCX0gZWxzZSBpZiAoIWV2ZW50LT5h Y3RpdmUpIHsKPiArCQlwcl9lcnIoInBvd2VyIGhhbmRsZSBkZWluaXQgYWxyZWFkeSBkb25lXG4i KTsKPiArCQlrZnJlZShldmVudCk7Cj4gKwl9IGVsc2Ugewo+ICsJCW11dGV4X2xvY2soJnBoYW5k bGUtPnBoYW5kbGVfbG9jayk7Cj4gKwkJbGlzdF9kZWxfaW5pdCgmZXZlbnQtPmxpc3QpOwo+ICsJ CW11dGV4X3VubG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKPiArCQlrZnJlZShldmVudCk7 Cj4gKwl9Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X3Bvd2VyX2hhbmRsZS5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3Bv d2VyX2hhbmRsZS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi45YTZk NGI5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9wb3dlcl9oYW5kbGUuaAo+IEBAIC0wLDAgKzEsMjg4IEBACj4gKy8qIENvcHlyaWdodCAo YykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K PiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4gKyAqIG9ubHkgdmVyc2lv biAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpZm5kZWYg X0RQVV9QT1dFUl9IQU5ETEVfSF8KPiArI2RlZmluZSBfRFBVX1BPV0VSX0hBTkRMRV9IXwo+ICsK PiArI2RlZmluZSBNQVhfQ0xJRU5UX05BTUVfTEVOIDEyOAo+ICsKPiArI2RlZmluZSBEUFVfUE9X RVJfSEFORExFX0VOQUJMRV9CVVNfQUJfUVVPVEEJMAo+ICsjZGVmaW5lIERQVV9QT1dFUl9IQU5E TEVfRElTQUJMRV9CVVNfQUJfUVVPVEEJMAo+ICsjZGVmaW5lIERQVV9QT1dFUl9IQU5ETEVfRU5B QkxFX0JVU19JQl9RVU9UQQkxNjAwMDAwMDAwCj4gKyNkZWZpbmUgRFBVX1BPV0VSX0hBTkRMRV9E SVNBQkxFX0JVU19JQl9RVU9UQQkwCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZHB1X2lvX3V0aWwu aD4KPiArCj4gKy8qIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkIGJlZm9yZSBwb3dlciBoYW5kbGVy IGRpc2FibGUgKi8KPiArI2RlZmluZSBEUFVfUE9XRVJfRVZFTlRfUFJFX0RJU0FCTEUJMHgxCj4g Kwo+ICsvKiBldmVudCB3aWxsIGJlIHRyaWdnZXJlZCBhZnRlciBwb3dlciBoYW5kbGVyIGRpc2Fi bGUgKi8KPiArI2RlZmluZSBEUFVfUE9XRVJfRVZFTlRfUE9TVF9ESVNBQkxFCTB4Mgo+ICsKPiAr LyogZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQgYmVmb3JlIHBvd2VyIGhhbmRsZXIgZW5hYmxlICov Cj4gKyNkZWZpbmUgRFBVX1BPV0VSX0VWRU5UX1BSRV9FTkFCTEUJMHg0Cj4gKwo+ICsvKiBldmVu dCB3aWxsIGJlIHRyaWdnZXJlZCBhZnRlciBwb3dlciBoYW5kbGVyIGVuYWJsZSAqLwo+ICsjZGVm aW5lIERQVV9QT1dFUl9FVkVOVF9QT1NUX0VOQUJMRQkweDgKPiArCj4gKy8qKgo+ICsgKiBtZHNz X2J1c192b3RlX3R5cGU6IHJlZ2lzdGVyIGJ1cyB2b3RlIHR5cGUKPiArICogVk9URV9JTkRFWF9E SVNBQkxFOiByZW1vdmVzIHRoZSBjbGllbnQgdm90ZQo+ICsgKiBWT1RFX0lOREVYX0xPVzoga2Vl cHMgdGhlIGxvd2VzdCB2b3RlIGZvciByZWdpc3RlciBidXMKPiArICogVk9URV9JTkRFWF9NQVg6 IGludmFsaWQKPiArICovCj4gK2VudW0gbWRzc19idXNfdm90ZV90eXBlIHsKPiArCVZPVEVfSU5E RVhfRElTQUJMRSwKPiArCVZPVEVfSU5ERVhfTE9XLAo+ICsJVk9URV9JTkRFWF9NQVgsCj4gK307 Cj4gKwo+ICsvKioKPiArICogZW51bSBkcHVfcG93ZXJfaGFuZGxlX2RhdGFfYnVzX2NsaWVudCAt IHR5cGUgb2YgYXhpIGJ1cyBjbGllbnRzCj4gKyAqIEBEUFVfUE9XRVJfSEFORExFX0RBVEFfQlVT X0NMSUVOVF9SVDogY29yZSByZWFsLXRpbWUgYnVzIGNsaWVudAo+ICsgKiBARFBVX1BPV0VSX0hB TkRMRV9EQVRBX0JVU19DTElFTlRfTlJUOiBjb3JlIG5vbi1yZWFsLXRpbWUgYnVzIGNsaWVudAo+ ICsgKiBARFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTUFYOiBtYXhpbXVtIG51bWJl ciBvZiBidXMgY2xpZW50IHR5cGUKPiArICovCj4gK2VudW0gZHB1X3Bvd2VyX2hhbmRsZV9kYXRh X2J1c19jbGllbnQgewo+ICsJRFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfUlQsCj4g KwlEUFVfUE9XRVJfSEFORExFX0RBVEFfQlVTX0NMSUVOVF9OUlQsCj4gKwlEUFVfUE9XRVJfSEFO RExFX0RBVEFfQlVTX0NMSUVOVF9NQVgKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBlbnVtIERQVV9Q T1dFUl9IQU5ETEVfREJVU19JRCAtIGRhdGEgYnVzIGlkZW50aWZpZXIKPiArICogQERQVV9QT1dF Ul9IQU5ETEVfREJVU19JRF9NTk9DOiBEUFUvTU5PQyBkYXRhIGJ1cwo+ICsgKiBARFBVX1BPV0VS X0hBTkRMRV9EQlVTX0lEX0xMQ0M6IE1OT0MvTExDQyBkYXRhIGJ1cwo+ICsgKiBARFBVX1BPV0VS X0hBTkRMRV9EQlVTX0lEX0VCSTogTExDQy9FQkkgZGF0YSBidXMKPiArICovCj4gK2VudW0gRFBV X1BPV0VSX0hBTkRMRV9EQlVTX0lEIHsKPiArCURQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NTk9D LAo+ICsJRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX0xMQ0MsCj4gKwlEUFVfUE9XRVJfSEFORExF X0RCVVNfSURfRUJJLAo+ICsJRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01BWCwKPiArfTsKPiAr Cj4gKy8qKgo+ICsgKiBzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudDogc3RvcmVzIHRoZSBwb3dlciBj bGllbnQgZm9yIGRwdSBkcml2ZXIKPiArICogQG5hbWU6CW5hbWUgb2YgdGhlIGNsaWVudAo+ICsg KiBAdXNlY2FzZV9uZHg6IGN1cnJlbnQgcmVncyBidXMgdm90ZSB0eXBlCj4gKyAqIEByZWZjb3Vu dDoJY3VycmVudCByZWZjb3VudCBpZiBtdWx0aXBsZSBtb2R1bGVzIGFyZSB1c2luZyBzYW1lCj4g KyAqICAgICAgICAgICAgICBzYW1lIGNsaWVudCBmb3IgZW5hYmxlL2Rpc2FibGUuIFBvd2VyIG1v ZHVsZSB3aWxsCj4gKyAqICAgICAgICAgICAgICBhZ2dyZWdhdGUgdGhlIHJlZmNvdW50IGFuZCB2 b3RlIGFjY29yZGluZ2x5IGZvciB0aGlzCj4gKyAqICAgICAgICAgICAgICBjbGllbnQuCj4gKyAq IEBpZDoJCWFzc2lnbmVkIGR1cmluZyBjcmVhdGUuIGhlbHBzIGZvciBkZWJ1Z2dpbmcuCj4gKyAq IEBsaXN0OglsaXN0IHRvIGF0dGFjaCBwb3dlciBoYW5kbGUgbWFzdGVyIGxpc3QKPiArICogQGFi OiAgICAgICAgIGFyYml0cmF0ZWQgYmFuZHdpZHRoIGZvciBlYWNoIGJ1cyBjbGllbnQKPiArICog QGliOiAgICAgICAgIGluc3RhbnRhbmVvdXMgYmFuZHdpZHRoIGZvciBlYWNoIGJ1cyBjbGllbnQK PiArICogQGFjdGl2ZToJaW5pZGNhdGVzIHRoZSBzdGF0ZSBvZiBkcHUgcG93ZXIgaGFuZGxlCj4g KyAqLwo+ICtzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCB7Cj4gKwljaGFyIG5hbWVbTUFYX0NMSUVO VF9OQU1FX0xFTl07Cj4gKwlzaG9ydCB1c2VjYXNlX25keDsKPiArCXNob3J0IHJlZmNvdW50Owo+ ICsJdTMyIGlkOwo+ICsJc3RydWN0IGxpc3RfaGVhZCBsaXN0Owo+ICsJdTY0IGFiW0RQVV9QT1dF Ul9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX01BWF07Cj4gKwl1NjQgaWJbRFBVX1BPV0VSX0hBTkRM RV9EQVRBX0JVU19DTElFTlRfTUFYXTsKPiArCWJvb2wgYWN0aXZlOwo+ICt9Owo+ICsKPiArLyoq Cj4gKyAqIHN0cnVjdCBkcHVfcG93ZXJfZGF0YV9oYW5kbGU6IHBvd2VyIGhhbmRsZSBzdHJ1Y3Qg Zm9yIGRhdGEgYnVzCj4gKyAqIEBkYXRhX2J1c19zY2FsZV90YWJsZTogcG9pbnRlciB0byBidXMg c2NhbGluZyB0YWJsZQo+ICsgKiBAZGF0YV9idXNfaGRsOiBjdXJyZW50IGRhdGEgYnVzIGhhbmRs ZQo+ICsgKiBAYXhpX3BvcnRfY250OiBudW1iZXIgb2YgcnQgYXhpIHBvcnRzCj4gKyAqIEBucnRf YXhpX3BvcnRfY250OiBudW1iZXIgb2YgbnJ0IGF4aSBwb3J0cwo+ICsgKiBAYnVzX2NoYW5uZWxz OiBudW1iZXIgb2YgbWVtb3J5IGJ1cyBjaGFubmVscwo+ICsgKiBAY3Vycl9id191Y19pZHg6IGN1 cnJlbnQgdXNlIGNhc2UgaW5kZXggb2YgZGF0YSBidXMKPiArICogQGFvX2J3X3VjX2lkeDogYWN0 aXZlIG9ubHkgdXNlIGNhc2UgaW5kZXggb2YgZGF0YSBidXMKPiArICogQGFiX3J0OiByZWFsdGlt ZSBhYiBxdW90YQo+ICsgKiBAaWJfcnQ6IHJlYWx0aW1lIGliIHF1b3RhCj4gKyAqIEBhYl9ucnQ6 IG5vbi1yZWFsdGltZSBhYiBxdW90YQo+ICsgKiBAaWJfbnJ0OiBub24tcmVhbHRpbWUgaWIgcXVv dGEKPiArICogQGVuYWJsZTogdHJ1ZSBpZiBidXMgaXMgZW5hYmxlZAo+ICsgKi8KPiArc3RydWN0 IGRwdV9wb3dlcl9kYXRhX2J1c19oYW5kbGUgewo+ICsJc3RydWN0IG1zbV9idXNfc2NhbGVfcGRh dGEgKmRhdGFfYnVzX3NjYWxlX3RhYmxlOwo+ICsJdTMyIGRhdGFfYnVzX2hkbDsKPiArCXUzMiBh eGlfcG9ydF9jbnQ7Cj4gKwl1MzIgbnJ0X2F4aV9wb3J0X2NudDsKPiArCXUzMiBidXNfY2hhbm5l bHM7Cj4gKwl1MzIgY3Vycl9id191Y19pZHg7Cj4gKwl1MzIgYW9fYndfdWNfaWR4Owo+ICsJdTY0 IGFiX3J0Owo+ICsJdTY0IGliX3J0Owo+ICsJdTY0IGFiX25ydDsKPiArCXU2NCBpYl9ucnQ7Cj4g Kwlib29sIGVuYWJsZTsKPiArfTsKPiArCj4gKy8qCj4gKyAqIHN0cnVjdCBkcHVfcG93ZXJfZXZl bnQgLSBsb2NhbCBldmVudCByZWdpc3RyYXRpb24gc3RydWN0dXJlCj4gKyAqIEBjbGllbnRfbmFt ZTogbmFtZSBvZiB0aGUgY2xpZW50IHJlZ2lzdGVyaW5nCj4gKyAqIEBjYl9mbmM6IHBvaW50ZXIg dG8gZGVzaXJlZCBjYWxsYmFjayBmdW5jdGlvbgo+ICsgKiBAdXNyOiB1c2VyIHBvaW50ZXIgdG8g cGFzcyB0byBjYWxsYmFjayBldmVudCB0cmlnZ2VyCj4gKyAqIEBldmVudDogcmVmZXIgdG8gRFBV X1BPV0VSX0hBTkRMRV9FVkVOVF8qCj4gKyAqIEBsaXN0OiBsaXN0IHRvIGF0dGFjaCBldmVudCBt YXN0ZXIgbGlzdAo+ICsgKiBAYWN0aXZlOiBpbmRpY2F0ZXMgdGhlIHN0YXRlIG9mIGRwdSBwb3dl ciBoYW5kbGUKPiArICovCj4gK3N0cnVjdCBkcHVfcG93ZXJfZXZlbnQgewo+ICsJY2hhciBjbGll bnRfbmFtZVtNQVhfQ0xJRU5UX05BTUVfTEVOXTsKPiArCXZvaWQgKCpjYl9mbmMpKHUzMiBldmVu dF90eXBlLCB2b2lkICp1c3IpOwo+ICsJdm9pZCAqdXNyOwo+ICsJdTMyIGV2ZW50X3R5cGU7Cj4g KwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cj4gKwlib29sIGFjdGl2ZTsKPiArfTsKPiArCj4gKy8q Kgo+ICsgKiBzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZTogcG93ZXIgaGFuZGxlIG1haW4gc3RydWN0 Cj4gKyAqIEBjbGllbnRfY2xpc3Q6IG1hc3RlciBsaXN0IHRvIHN0b3JlIGFsbCBjbGllbnRzCj4g KyAqIEBwaGFuZGxlX2xvY2s6IGxvY2sgdG8gc3luY2hyb25pemUgdGhlIGVuYWJsZS9kaXNhYmxl Cj4gKyAqIEBkZXY6IHBvaW50ZXIgdG8gZGV2aWNlIHN0cnVjdHVyZQo+ICsgKiBAdXNlY2FzZV9u ZHg6IGN1cnJlbnQgdXNlY2FzZSBpbmRleAo+ICsgKiBAcmVnX2J1c19oZGw6IGN1cnJlbnQgcmVn aXN0ZXIgYnVzIGhhbmRsZQo+ICsgKiBAZGF0YV9idXNfaGFuZGxlOiBjb250ZXh0IHN0cnVjdHVy ZSBmb3IgZGF0YSBidXMgY29udHJvbAo+ICsgKiBAZXZlbnRfbGlzdDogY3VycmVudCBwb3dlciBo YW5kbGUgZXZlbnQgbGlzdAo+ICsgKi8KPiArc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgewo+ICsJ c3RydWN0IGxpc3RfaGVhZCBwb3dlcl9jbGllbnRfY2xpc3Q7Cj4gKwlzdHJ1Y3QgbXV0ZXggcGhh bmRsZV9sb2NrOwo+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsJdTMyIGN1cnJlbnRfdXNlY2Fz ZV9uZHg7Cj4gKwl1MzIgcmVnX2J1c19oZGw7Cj4gKwlzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVz X2hhbmRsZSBkYXRhX2J1c19oYW5kbGUKPiArCQlbRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01B WF07Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50X2xpc3Q7Cj4gK307Cj4gKwo+ICsvKioKPiAr ICogZHB1X3Bvd2VyX3Jlc291cmNlX2luaXQoKSAtIGluaXRpYWxpemVzIHRoZSBkcHUgcG93ZXIg aGFuZGxlCj4gKyAqIEBwZGV2OiAgIHBsYXRmb3JtIGRldmljZSB0byBzZWFyY2ggdGhlIHBvd2Vy IHJlc291cmNlcwo+ICsgKiBAcGRhdGE6ICBwb3dlciBoYW5kbGUgdG8gc3RvcmUgdGhlIHBvd2Vy IHJlc291cmNlcwo+ICsgKgo+ICsgKiBSZXR1cm46IGVycm9yIGNvZGUuCj4gKyAqLwo+ICtpbnQg ZHB1X3Bvd2VyX3Jlc291cmNlX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPiAr CXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwZGF0YSk7Cj4gKwo+ICsvKioKPiArICogZHB1X3Bv d2VyX3Jlc291cmNlX2RlaW5pdCgpIC0gcmVsZWFzZSB0aGUgZHB1IHBvd2VyIGhhbmRsZQo+ICsg KiBAcGRldjogICBwbGF0Zm9ybSBkZXZpY2UgZm9yIHBvd2VyIHJlc291cmNlcwo+ICsgKiBAcGRh dGE6ICBwb3dlciBoYW5kbGUgY29udGFpbmluZyB0aGUgcmVzb3VyY2VzCj4gKyAqCj4gKyAqIFJl dHVybjogZXJyb3IgY29kZS4KPiArICovCj4gK3ZvaWQgZHB1X3Bvd2VyX3Jlc291cmNlX2RlaW5p dChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ICsJc3RydWN0IGRwdV9wb3dlcl9oYW5k bGUgKnBkYXRhKTsKPiArCj4gKy8qKgo+ICsgKiBkcHVfcG93ZXJfY2xpZW50X2NyZWF0ZSgpIC0g Y3JlYXRlIHRoZSBjbGllbnQgb24gcG93ZXIgaGFuZGxlCj4gKyAqIEBwZGF0YTogIHBvd2VyIGhh bmRsZSBjb250YWluaW5nIHRoZSByZXNvdXJjZXMKPiArICogQGNsaWVudF9uYW1lOiBuZXcgY2xp ZW50IG5hbWUgZm9yIHJlZ2lzdHJhdGlvbgo+ICsgKgo+ICsgKiBSZXR1cm46IGVycm9yIGNvZGUu Cj4gKyAqLwo+ICtzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqZHB1X3Bvd2VyX2NsaWVudF9jcmVh dGUoc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBkYXRhLAo+ICsJY2hhciAqY2xpZW50X25hbWUp Owo+ICsKPiArLyoqCj4gKyAqIGRwdV9wb3dlcl9jbGllbnRfZGVzdHJveSgpIC0gZGVzdHJveSB0 aGUgY2xpZW50IG9uIHBvd2VyIGhhbmRsZQo+ICsgKiBAcGRhdGE6ICBwb3dlciBoYW5kbGUgY29u dGFpbmluZyB0aGUgcmVzb3VyY2VzCj4gKyAqIEBjbGllbnRfbmFtZTogbmV3IGNsaWVudCBuYW1l IGZvciByZWdpc3RyYXRpb24KPiArICoKPiArICogUmV0dXJuOiBub25lCj4gKyAqLwo+ICt2b2lk IGRwdV9wb3dlcl9jbGllbnRfZGVzdHJveShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRs ZSwKPiArCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpjbGllbnQpOwo+ICsKPiArLyoqCj4gKyAq IGRwdV9wb3dlcl9yZXNvdXJjZV9lbmFibGUoKSAtIGVuYWJsZS9kaXNhYmxlIHRoZSBwb3dlciBy ZXNvdXJjZXMKPiArICogQHBkYXRhOiAgcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291 cmNlcwo+ICsgKiBAY2xpZW50OiBjbGllbnQgaW5mb3JtYXRpb24gdG8gZW5hYmxlL2Rpc2FibGUg aXRzIHZvdGUKPiArICogQGVuYWJsZTogYm9vbGVhbiByZXF1ZXN0IGZvciBlbmFibGUvZGlzYWJs ZQo+ICsgKgo+ICsgKiBSZXR1cm46IGVycm9yIGNvZGUuCj4gKyAqLwo+ICtpbnQgZHB1X3Bvd2Vy X3Jlc291cmNlX2VuYWJsZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGRhdGEsCj4gKwlzdHJ1 Y3QgZHB1X3Bvd2VyX2NsaWVudCAqcGNsaWVudCwgYm9vbCBlbmFibGUpOwo+ICsKPiArLyoqCj4g KyAqIGRwdV9wb3dlcl9kYXRhX2J1c19zdGF0ZV91cGRhdGUoKSAtIHVwZGF0ZSBkYXRhIGJ1cyBz dGF0ZQo+ICsgKiBAcGRhdGE6ICBwb3dlciBoYW5kbGUgY29udGFpbmluZyB0aGUgcmVzb3VyY2Vz Cj4gKyAqIEBlbmFibGU6IHRha2UgZW5hYmxlIHZzIGRpc2FibGUgcGF0aAo+ICsgKgo+ICsgKiBS ZXR1cm46IGVycm9yIGNvZGUuCj4gKyAqLwo+ICtpbnQgZHB1X3Bvd2VyX2RhdGFfYnVzX3N0YXRl X3VwZGF0ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKPiArCQkJCQkJCWJvb2wg ZW5hYmxlKTsKPiArCj4gKy8qKgo+ICsgKiBkcHVfcG93ZXJfZGF0YV9idXNfc2V0X3F1b3RhKCkg LSBzZXQgZGF0YSBidXMgcXVvdGEgZm9yIHBvd2VyIGNsaWVudAo+ICsgKiBAcGhhbmRsZTogIHBv d2VyIGhhbmRsZSBjb250YWluaW5nIHRoZSByZXNvdXJjZXMKPiArICogQGNsaWVudDogY2xpZW50 IGluZm9ybWF0aW9uIHRvIHNldCBxdW90YQo+ICsgKiBAYnVzX2NsaWVudDogcmVhbC10aW1lIG9y IG5vbi1yZWFsLXRpbWUgYnVzIGNsaWVudAo+ICsgKiBAYnVzX2lkOiBpZGVudGlmaWVyIG9mIGRh dGEgYnVzLCBzZWUgRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lECj4gKyAqIEBhYl9xdW90YTogYXJi aXRyYXRlZCBidXMgYmFuZHdpZHRoCj4gKyAqIEBpYl9xdW90YTogaW5zdGFudGFuZW91cyBidXMg YmFuZHdpZHRoCj4gKyAqCj4gKyAqIFJldHVybjogemVybyBpZiBzdWNjZXNzLCBvciBlcnJvciBj b2RlIG90aGVyd2lzZQo+ICsgKi8KPiAraW50IGRwdV9wb3dlcl9kYXRhX2J1c19zZXRfcXVvdGEo c3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCj4gKwkJc3RydWN0IGRwdV9wb3dlcl9j bGllbnQgKnBjbGllbnQsCj4gKwkJaW50IGJ1c19jbGllbnQsIHUzMiBidXNfaWQsCj4gKwkJdTY0 IGFiX3F1b3RhLCB1NjQgaWJfcXVvdGEpOwo+ICsKPiArLyoqCj4gKyAqIGRwdV9wb3dlcl9kYXRh X2J1c19iYW5kd2lkdGhfY3RybCgpIC0gY29udHJvbCBkYXRhIGJ1cyBiYW5kd2lkdGggZW5hYmxl Cj4gKyAqIEBwaGFuZGxlOiAgcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlcwo+ ICsgKiBAY2xpZW50OiBjbGllbnQgaW5mb3JtYXRpb24gdG8gYmFuZHdpZHRoIGNvbnRyb2wKPiAr ICogQGVuYWJsZTogdHJ1ZSB0byBlbmFibGUgYmFuZHdpZHRoIGZvciBkYXRhIGJhc2UKPiArICoK PiArICogUmV0dXJuOiBub25lCj4gKyAqLwo+ICt2b2lkIGRwdV9wb3dlcl9kYXRhX2J1c19iYW5k d2lkdGhfY3RybChzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKPiArCQlzdHJ1Y3Qg ZHB1X3Bvd2VyX2NsaWVudCAqcGNsaWVudCwgaW50IGVuYWJsZSk7Cj4gKwo+ICsvKioKPiArICog ZHB1X3Bvd2VyX2hhbmRsZV9yZWdpc3Rlcl9ldmVudCAtIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZnVu Y3Rpb24gZm9yIGFuIGV2ZW50Lgo+ICsgKglDbGllbnRzIGNhbiByZWdpc3RlciBmb3IgbXVsdGlw bGUgZXZlbnRzIHdpdGggYSBzaW5nbGUgcmVnaXN0ZXIuCj4gKyAqCUFueSBibG9jayB3aXRoIGFj Y2VzcyB0byBwaGFuZGxlIGNhbiByZWdpc3RlciBmb3IgdGhlIGV2ZW50Cj4gKyAqCW5vdGlmaWNh dGlvbi4KPiArICogQHBoYW5kbGU6CXBvd2VyIGhhbmRsZSBjb250YWluaW5nIHRoZSByZXNvdXJj ZXMKPiArICogQGV2ZW50X3R5cGU6CWV2ZW50IHR5cGUgdG8gcmVnaXN0ZXI7IHJlZmVyIERQVV9Q T1dFUl9IQU5ETEVfRVZFTlRfKgo+ICsgKiBAY2JfZm5jOglwb2ludGVyIHRvIGRlc2lyZWQgY2Fs bGJhY2sgZnVuY3Rpb24KPiArICogQHVzcjoJdXNlciBwb2ludGVyIHRvIHBhc3MgdG8gY2FsbGJh Y2sgb24gZXZlbnQgdHJpZ2dlcgo+ICsgKgo+ICsgKiBSZXR1cm46CWV2ZW50IHBvaW50ZXIgaWYg c3VjY2Vzcywgb3IgZXJyb3IgY29kZSBvdGhlcndpc2UKPiArICovCj4gK3N0cnVjdCBkcHVfcG93 ZXJfZXZlbnQgKmRwdV9wb3dlcl9oYW5kbGVfcmVnaXN0ZXJfZXZlbnQoCj4gKwkJc3RydWN0IGRw dV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCj4gKwkJdTMyIGV2ZW50X3R5cGUsIHZvaWQgKCpjYl9m bmMpKHUzMiBldmVudF90eXBlLCB2b2lkICp1c3IpLAo+ICsJCXZvaWQgKnVzciwgY2hhciAqY2xp ZW50X25hbWUpOwo+ICsvKioKPiArICogZHB1X3Bvd2VyX2hhbmRsZV91bnJlZ2lzdGVyX2V2ZW50 IC0gdW5yZWdpc3RlciBjYWxsYmFjayBmb3IgZXZlbnQocykKPiArICogQHBoYW5kbGU6CXBvd2Vy IGhhbmRsZSBjb250YWluaW5nIHRoZSByZXNvdXJjZXMKPiArICogQGV2ZW50OglldmVudCBwb2lu dGVyIHJldHVybmVkIGFmdGVyIHBvd2VyIGhhbmRsZSByZWdpc3Rlcgo+ICsgKi8KPiArdm9pZCBk cHVfcG93ZXJfaGFuZGxlX3VucmVnaXN0ZXJfZXZlbnQoc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUg KnBoYW5kbGUsCj4gKwkJc3RydWN0IGRwdV9wb3dlcl9ldmVudCAqZXZlbnQpOwo+ICsKPiArLyoq Cj4gKyAqIGRwdV9wb3dlcl9oYW5kbGVfZ2V0X2RidXNfbmFtZSAtIGdldCBuYW1lIG9mIGdpdmVu IGRhdGEgYnVzIGlkZW50aWZpZXIKPiArICogQGJ1c19pZDoJZGF0YSBidXMgaWRlbnRpZmllcgo+ ICsgKiBSZXR1cm46CVBvaW50ZXIgdG8gbmFtZSBzdHJpbmcgaWYgc3VjY2VzczsgTlVMTCBvdGhl cndpc2UKPiArICovCj4gK2NvbnN0IGNoYXIgKmRwdV9wb3dlcl9oYW5kbGVfZ2V0X2RidXNfbmFt ZSh1MzIgYnVzX2lkKTsKPiArCj4gKyNlbmRpZiAvKiBfRFBVX1BPV0VSX0hBTkRMRV9IXyAqLwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9wb3dlcl9oYW5kbGUuYyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHB1X3Bvd2VyX2hhbmRsZS5jCj4gZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggNzdiZTEwNi4uMDAwMDAwMAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZHB1X3Bvd2VyX2hhbmRsZS5jCj4gKysrIC9kZXYvbnVsbAo+IEBAIC0xLDY5MyArMCwwIEBA Cj4gLS8qIENvcHlyaWdodCAoYykgMjAxNC0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC4KPiAtICoKPiAtICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiAtICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5k Cj4gLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLgo+IC0gKgo+IC0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiAtICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiAtICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+IC0g KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+IC0gKgo+IC0g Ki8KPiAtCj4gLSNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm06JXM6JWRdOiAiIGZtdCwgX19mdW5j X18sIF9fTElORV9fCj4gLQo+IC0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gLSNpbmNsdWRl IDxsaW51eC9vZi5oPgo+IC0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Cj4gLSNpbmNsdWRlIDxs aW51eC9vZl9hZGRyZXNzLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gLSNpbmNsdWRl IDxsaW51eC9tdXRleC5oPgo+IC0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KPiAtI2lm ZGVmIENPTkZJR19RQ09NX0JVU19TQ0FMSU5HCj4gLSNpbmNsdWRlIDxsaW51eC9tc20tYnVzLmg+ Cj4gLSNpbmNsdWRlIDxsaW51eC9tc20tYnVzLWJvYXJkLmg+Cj4gLSNlbmRpZgo+IC0jaW5jbHVk ZSA8bGludXgvZHB1X2lvX3V0aWwuaD4KPiAtCj4gLSNpbmNsdWRlICJkcHVfcG93ZXJfaGFuZGxl LmgiCj4gLSNpbmNsdWRlICJkcHVfdHJhY2UuaCIKPiAtCj4gLXN0YXRpYyBjb25zdCBjaGFyICpk YXRhX2J1c19uYW1lW0RQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVhdID0gewo+IC0JW0RQVV9Q T1dFUl9IQU5ETEVfREJVU19JRF9NTk9DXSA9ICJxY29tLGRwdS1kYXRhLWJ1cyIsCj4gLQlbRFBV X1BPV0VSX0hBTkRMRV9EQlVTX0lEX0xMQ0NdID0gInFjb20sZHB1LWxsY2MtYnVzIiwKPiAtCVtE UFVfUE9XRVJfSEFORExFX0RCVVNfSURfRUJJXSA9ICJxY29tLGRwdS1lYmktYnVzIiwKPiAtfTsK PiAtCj4gLWNvbnN0IGNoYXIgKmRwdV9wb3dlcl9oYW5kbGVfZ2V0X2RidXNfbmFtZSh1MzIgYnVz X2lkKQo+IC17Cj4gLQlpZiAoYnVzX2lkIDwgRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01BWCkK PiAtCQlyZXR1cm4gZGF0YV9idXNfbmFtZVtidXNfaWRdOwo+IC0KPiAtCXJldHVybiBOVUxMOwo+ IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBkcHVfcG93ZXJfZXZlbnRfdHJpZ2dlcl9sb2NrZWQoc3Ry dWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCj4gLQkJdTMyIGV2ZW50X3R5cGUpCj4gLXsK PiAtCXN0cnVjdCBkcHVfcG93ZXJfZXZlbnQgKmV2ZW50Owo+IC0KPiAtCWxpc3RfZm9yX2VhY2hf ZW50cnkoZXZlbnQsICZwaGFuZGxlLT5ldmVudF9saXN0LCBsaXN0KSB7Cj4gLQkJaWYgKGV2ZW50 LT5ldmVudF90eXBlICYgZXZlbnRfdHlwZSkKPiAtCQkJZXZlbnQtPmNiX2ZuYyhldmVudF90eXBl LCBldmVudC0+dXNyKTsKPiAtCX0KPiAtfQo+IC0KPiAtc3RydWN0IGRwdV9wb3dlcl9jbGllbnQg KmRwdV9wb3dlcl9jbGllbnRfY3JlYXRlKAo+IC0Jc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBo YW5kbGUsIGNoYXIgKmNsaWVudF9uYW1lKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVu dCAqY2xpZW50Owo+IC0Jc3RhdGljIHUzMiBpZDsKPiAtCj4gLQlpZiAoIWNsaWVudF9uYW1lIHx8 ICFwaGFuZGxlKSB7Cj4gLQkJcHJfZXJyKCJjbGllbnQgbmFtZSBpcyBudWxsIG9yIGludmFsaWQg cG93ZXIgZGF0YVxuIik7Cj4gLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gLQl9Cj4gLQo+ IC0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRwdV9wb3dlcl9jbGllbnQpLCBHRlBf S0VSTkVMKTsKPiAtCWlmICghY2xpZW50KQo+IC0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ IC0KPiAtCW11dGV4X2xvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7Cj4gLQlzdHJsY3B5KGNs aWVudC0+bmFtZSwgY2xpZW50X25hbWUsIE1BWF9DTElFTlRfTkFNRV9MRU4pOwo+IC0JY2xpZW50 LT51c2VjYXNlX25keCA9IFZPVEVfSU5ERVhfRElTQUJMRTsKPiAtCWNsaWVudC0+aWQgPSBpZDsK PiAtCWNsaWVudC0+YWN0aXZlID0gdHJ1ZTsKPiAtCXByX2RlYnVnKCJjbGllbnQgJXMgY3JlYXRl ZDolcEsgaWQgOiVkXG4iLCBjbGllbnRfbmFtZSwKPiAtCQljbGllbnQsIGlkKTsKPiAtCWlkKys7 Cj4gLQlsaXN0X2FkZCgmY2xpZW50LT5saXN0LCAmcGhhbmRsZS0+cG93ZXJfY2xpZW50X2NsaXN0 KTsKPiAtCW11dGV4X3VubG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKPiAtCj4gLQlyZXR1 cm4gY2xpZW50Owo+IC19Cj4gLQo+IC12b2lkIGRwdV9wb3dlcl9jbGllbnRfZGVzdHJveShzdHJ1 Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKPiAtCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50 ICpjbGllbnQpCj4gLXsKPiAtCWlmICghY2xpZW50ICB8fCAhcGhhbmRsZSkgewo+IC0JCXByX2Vy cigicmVnIGJ1cyB2b3RlOiBpbnZhbGlkIGNsaWVudCBoYW5kbGVcbiIpOwo+IC0JfSBlbHNlIGlm ICghY2xpZW50LT5hY3RpdmUpIHsKPiAtCQlwcl9lcnIoImRwdSBwb3dlciBkZWluaXQgYWxyZWFk eSBkb25lXG4iKTsKPiAtCQlrZnJlZShjbGllbnQpOwo+IC0JfSBlbHNlIHsKPiAtCQlwcl9kZWJ1 ZygiYnVzIHZvdGUgY2xpZW50ICVzIGRlc3Ryb3llZDolcEsgaWQ6JXVcbiIsCj4gLQkJCWNsaWVu dC0+bmFtZSwgY2xpZW50LCBjbGllbnQtPmlkKTsKPiAtCQltdXRleF9sb2NrKCZwaGFuZGxlLT5w aGFuZGxlX2xvY2spOwo+IC0JCWxpc3RfZGVsX2luaXQoJmNsaWVudC0+bGlzdCk7Cj4gLQkJbXV0 ZXhfdW5sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOwo+IC0JCWtmcmVlKGNsaWVudCk7Cj4g LQl9Cj4gLX0KPiAtCj4gLSNpZmRlZiBDT05GSUdfUUNPTV9CVVNfU0NBTElORwo+IC0KPiAtI2Rl ZmluZSBNQVhfQVhJX1BPUlRfQ09VTlQgMwo+IC0KPiAtc3RhdGljIGludCBfZHB1X3Bvd2VyX2Rh dGFfYnVzX3NldF9xdW90YSgKPiAtCQlzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSAq cGRidXMsCj4gLQkJdTY0IGFiX3F1b3RhX3J0LCB1NjQgYWJfcXVvdGFfbnJ0LAo+IC0JCXU2NCBp Yl9xdW90YV9ydCwgdTY0IGliX3F1b3RhX25ydCkKPiAtewo+IC0JaW50IG5ld191Y19pZHg7Cj4g LQl1NjQgYWJfcXVvdGFbTUFYX0FYSV9QT1JUX0NPVU5UXSA9IHswLCAwfTsKPiAtCXU2NCBpYl9x dW90YVtNQVhfQVhJX1BPUlRfQ09VTlRdID0gezAsIDB9Owo+IC0JaW50IHJjOwo+IC0KPiAtCWlm IChwZGJ1cy0+ZGF0YV9idXNfaGRsIDwgMSkgewo+IC0JCXByX2VycigiaW52YWxpZCBidXMgaGFu ZGxlICVkXG4iLCBwZGJ1cy0+ZGF0YV9idXNfaGRsKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAt CX0KPiAtCj4gLQlwZGJ1cy0+YWJfcnQgPSBhYl9xdW90YV9ydDsKPiAtCXBkYnVzLT5pYl9ydCA9 IGliX3F1b3RhX3J0Owo+IC0JcGRidXMtPmFiX25ydCA9IGFiX3F1b3RhX25ydDsKPiAtCXBkYnVz LT5pYl9ucnQgPSBpYl9xdW90YV9ucnQ7Cj4gLQo+IC0JaWYgKHBkYnVzLT5lbmFibGUpIHsKPiAt CQlhYl9xdW90YV9ydCA9IG1heF90KHU2NCwgYWJfcXVvdGFfcnQsCj4gLQkJCQlEUFVfUE9XRVJf SEFORExFX0VOQUJMRV9CVVNfQUJfUVVPVEEpOwo+IC0JCWliX3F1b3RhX3J0ID0gbWF4X3QodTY0 LCBpYl9xdW90YV9ydCwKPiAtCQkJCURQVV9QT1dFUl9IQU5ETEVfRU5BQkxFX0JVU19JQl9RVU9U QSk7Cj4gLQkJYWJfcXVvdGFfbnJ0ID0gbWF4X3QodTY0LCBhYl9xdW90YV9ucnQsCj4gLQkJCQlE UFVfUE9XRVJfSEFORExFX0VOQUJMRV9CVVNfQUJfUVVPVEEpOwo+IC0JCWliX3F1b3RhX25ydCA9 IG1heF90KHU2NCwgaWJfcXVvdGFfbnJ0LAo+IC0JCQkJRFBVX1BPV0VSX0hBTkRMRV9FTkFCTEVf QlVTX0lCX1FVT1RBKTsKPiAtCX0gZWxzZSB7Cj4gLQkJYWJfcXVvdGFfcnQgPSBtaW5fdCh1NjQs IGFiX3F1b3RhX3J0LAo+IC0JCQkJRFBVX1BPV0VSX0hBTkRMRV9ESVNBQkxFX0JVU19BQl9RVU9U QSk7Cj4gLQkJaWJfcXVvdGFfcnQgPSBtaW5fdCh1NjQsIGliX3F1b3RhX3J0LAo+IC0JCQkJRFBV X1BPV0VSX0hBTkRMRV9ESVNBQkxFX0JVU19JQl9RVU9UQSk7Cj4gLQkJYWJfcXVvdGFfbnJ0ID0g bWluX3QodTY0LCBhYl9xdW90YV9ucnQsCj4gLQkJCQlEUFVfUE9XRVJfSEFORExFX0RJU0FCTEVf QlVTX0FCX1FVT1RBKTsKPiAtCQlpYl9xdW90YV9ucnQgPSBtaW5fdCh1NjQsIGliX3F1b3RhX25y dCwKPiAtCQkJCURQVV9QT1dFUl9IQU5ETEVfRElTQUJMRV9CVVNfSUJfUVVPVEEpOwo+IC0JfQo+ IC0KPiAtCWlmICghYWJfcXVvdGFfcnQgJiYgIWFiX3F1b3RhX25ydCAmJiAhaWJfcXVvdGFfcnQg JiYgIWliX3F1b3RhX25ydCkgIHsKPiAtCQluZXdfdWNfaWR4ID0gMDsKPiAtCX0gZWxzZSB7Cj4g LQkJaW50IGk7Cj4gLQkJc3RydWN0IG1zbV9idXNfdmVjdG9ycyAqdmVjdCA9IE5VTEw7Cj4gLQkJ c3RydWN0IG1zbV9idXNfc2NhbGVfcGRhdGEgKmJ3X3RhYmxlID0KPiAtCQkJcGRidXMtPmRhdGFf YnVzX3NjYWxlX3RhYmxlOwo+IC0JCXUzMiBucnRfYXhpX3BvcnRfY250ID0gcGRidXMtPm5ydF9h eGlfcG9ydF9jbnQ7Cj4gLQkJdTMyIHRvdGFsX2F4aV9wb3J0X2NudCA9IHBkYnVzLT5heGlfcG9y dF9jbnQ7Cj4gLQkJdTMyIHJ0X2F4aV9wb3J0X2NudCA9IHRvdGFsX2F4aV9wb3J0X2NudCAtIG5y dF9heGlfcG9ydF9jbnQ7Cj4gLQo+IC0JCWlmICghYndfdGFibGUgfHwgIXRvdGFsX2F4aV9wb3J0 X2NudCB8fAo+IC0JCSAgICB0b3RhbF9heGlfcG9ydF9jbnQgPiBNQVhfQVhJX1BPUlRfQ09VTlQp IHsKPiAtCQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPiAtCQkJcmV0dXJuIC1FSU5WQUw7 Cj4gLQkJfQo+IC0KPiAtCQlpZiAocGRidXMtPmJ1c19jaGFubmVscykgewo+IC0JCQlpYl9xdW90 YV9ydCA9IGRpdl91NjQoaWJfcXVvdGFfcnQsCj4gLQkJCQkJCXBkYnVzLT5idXNfY2hhbm5lbHMp Owo+IC0JCQlpYl9xdW90YV9ucnQgPSBkaXZfdTY0KGliX3F1b3RhX25ydCwKPiAtCQkJCQkJcGRi dXMtPmJ1c19jaGFubmVscyk7Cj4gLQkJfQo+IC0KPiAtCQlpZiAobnJ0X2F4aV9wb3J0X2NudCkg ewo+IC0KPiAtCQkJYWJfcXVvdGFfcnQgPSBkaXZfdTY0KGFiX3F1b3RhX3J0LCBydF9heGlfcG9y dF9jbnQpOwo+IC0JCQlhYl9xdW90YV9ucnQgPSBkaXZfdTY0KGFiX3F1b3RhX25ydCwgbnJ0X2F4 aV9wb3J0X2NudCk7Cj4gLQo+IC0JCQlmb3IgKGkgPSAwOyBpIDwgdG90YWxfYXhpX3BvcnRfY250 OyBpKyspIHsKPiAtCQkJCWlmIChpIDwgcnRfYXhpX3BvcnRfY250KSB7Cj4gLQkJCQkJYWJfcXVv dGFbaV0gPSBhYl9xdW90YV9ydDsKPiAtCQkJCQlpYl9xdW90YVtpXSA9IGliX3F1b3RhX3J0Owo+ IC0JCQkJfSBlbHNlIHsKPiAtCQkJCQlhYl9xdW90YVtpXSA9IGFiX3F1b3RhX25ydDsKPiAtCQkJ CQlpYl9xdW90YVtpXSA9IGliX3F1b3RhX25ydDsKPiAtCQkJCX0KPiAtCQkJfQo+IC0JCX0gZWxz ZSB7Cj4gLQkJCWFiX3F1b3RhWzBdID0gZGl2X3U2NChhYl9xdW90YV9ydCArIGFiX3F1b3RhX25y dCwKPiAtCQkJCQl0b3RhbF9heGlfcG9ydF9jbnQpOwo+IC0JCQlpYl9xdW90YVswXSA9IGliX3F1 b3RhX3J0ICsgaWJfcXVvdGFfbnJ0Owo+IC0KPiAtCQkJZm9yIChpID0gMTsgaSA8IHRvdGFsX2F4 aV9wb3J0X2NudDsgaSsrKSB7Cj4gLQkJCQlhYl9xdW90YVtpXSA9IGFiX3F1b3RhWzBdOwo+IC0J CQkJaWJfcXVvdGFbaV0gPSBpYl9xdW90YVswXTsKPiAtCQkJfQo+IC0JCX0KPiAtCj4gLQkJbmV3 X3VjX2lkeCA9IChwZGJ1cy0+Y3Vycl9id191Y19pZHggJQo+IC0JCQkoYndfdGFibGUtPm51bV91 c2VjYXNlcyAtIDEpKSArIDE7Cj4gLQo+IC0JCWZvciAoaSA9IDA7IGkgPCB0b3RhbF9heGlfcG9y dF9jbnQ7IGkrKykgewo+IC0JCQl2ZWN0ID0gJmJ3X3RhYmxlLT51c2VjYXNlW25ld191Y19pZHhd LnZlY3RvcnNbaV07Cj4gLQkJCXZlY3QtPmFiID0gYWJfcXVvdGFbaV07Cj4gLQkJCXZlY3QtPmli ID0gaWJfcXVvdGFbaV07Cj4gLQo+IC0JCQlwcl9kZWJ1ZygKPiAtCQkJCSIlcyB1Y19pZHg9JWQg JXMgcGF0aCBpZHg9JWQgYWI9JWxsdSBpYj0lbGx1XG4iLAo+IC0JCQkJYndfdGFibGUtPm5hbWUs Cj4gLQkJCQluZXdfdWNfaWR4LCAoaSA8IHJ0X2F4aV9wb3J0X2NudCkgPyAicnQiIDogIm5ydCIK PiAtCQkJCSwgaSwgdmVjdC0+YWIsIHZlY3QtPmliKTsKPiAtCQl9Cj4gLQl9Cj4gLQlwZGJ1cy0+ Y3Vycl9id191Y19pZHggPSBuZXdfdWNfaWR4Owo+IC0JcGRidXMtPmFvX2J3X3VjX2lkeCA9IG5l d191Y19pZHg7Cj4gLQo+IC0JRFBVX0FUUkFDRV9CRUdJTigibXNtX2J1c19zY2FsZV9yZXEiKTsK PiAtCXJjID0gbXNtX2J1c19zY2FsZV9jbGllbnRfdXBkYXRlX3JlcXVlc3QocGRidXMtPmRhdGFf YnVzX2hkbCwKPiAtCQkJbmV3X3VjX2lkeCk7Cj4gLQlEUFVfQVRSQUNFX0VORCgibXNtX2J1c19z Y2FsZV9yZXEiKTsKPiAtCj4gLQlyZXR1cm4gcmM7Cj4gLX0KPiAtCj4gLWludCBkcHVfcG93ZXJf ZGF0YV9idXNfc2V0X3F1b3RhKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAo+IC0J CXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpwY2xpZW50LAo+IC0JCWludCBidXNfY2xpZW50LCB1 MzIgYnVzX2lkLAo+IC0JCXU2NCBhYl9xdW90YSwgdTY0IGliX3F1b3RhKQo+IC17Cj4gLQlpbnQg cmMgPSAwOwo+IC0JaW50IGk7Cj4gLQl1NjQgdG90YWxfYWJfcnQgPSAwLCB0b3RhbF9pYl9ydCA9 IDA7Cj4gLQl1NjQgdG90YWxfYWJfbnJ0ID0gMCwgdG90YWxfaWJfbnJ0ID0gMDsKPiAtCXN0cnVj dCBkcHVfcG93ZXJfY2xpZW50ICpjbGllbnQ7Cj4gLQo+IC0JaWYgKCFwaGFuZGxlIHx8ICFwY2xp ZW50IHx8Cj4gLQkJCWJ1c19jbGllbnQgPj0gRFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElF TlRfTUFYIHx8Cj4gLQkJCWJ1c19pZCA+PSBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTUFYKSB7 Cj4gLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtZXRlcnNcbiIpOwo+IC0JCXJldHVybiAtRUlOVkFM Owo+IC0JfQo+IC0KPiAtCW11dGV4X2xvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7Cj4gLQo+ IC0JcGNsaWVudC0+YWJbYnVzX2NsaWVudF0gPSBhYl9xdW90YTsKPiAtCXBjbGllbnQtPmliW2J1 c19jbGllbnRdID0gaWJfcXVvdGE7Cj4gLQl0cmFjZV9kcHVfcGVyZl91cGRhdGVfYnVzKGJ1c19j bGllbnQsIGFiX3F1b3RhLCBpYl9xdW90YSk7Cj4gLQo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShj bGllbnQsICZwaGFuZGxlLT5wb3dlcl9jbGllbnRfY2xpc3QsIGxpc3QpIHsKPiAtCQlmb3IgKGkg PSAwOyBpIDwgRFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTUFYOyBpKyspIHsKPiAt CQkJaWYgKGkgPT0gRFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTlJUKSB7Cj4gLQkJ CQl0b3RhbF9hYl9ucnQgKz0gY2xpZW50LT5hYltpXTsKPiAtCQkJCXRvdGFsX2liX25ydCArPSBj bGllbnQtPmliW2ldOwo+IC0JCQl9IGVsc2Ugewo+IC0JCQkJdG90YWxfYWJfcnQgKz0gY2xpZW50 LT5hYltpXTsKPiAtCQkJCXRvdGFsX2liX3J0ID0gbWF4KHRvdGFsX2liX3J0LCBjbGllbnQtPmli W2ldKTsKPiAtCQkJfQo+IC0JCX0KPiAtCX0KPiAtCj4gLQlpZiAocGhhbmRsZS0+ZGF0YV9idXNf aGFuZGxlW2J1c19pZF0uZGF0YV9idXNfaGRsKQo+IC0JCXJjID0gX2RwdV9wb3dlcl9kYXRhX2J1 c19zZXRfcXVvdGEoCj4gLQkJCSZwaGFuZGxlLT5kYXRhX2J1c19oYW5kbGVbYnVzX2lkXSwKPiAt CQkJdG90YWxfYWJfcnQsIHRvdGFsX2FiX25ydCwKPiAtCQkJdG90YWxfaWJfcnQsIHRvdGFsX2li X25ydCk7Cj4gLQo+IC0JbXV0ZXhfdW5sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOwo+IC0K PiAtCXJldHVybiByYzsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZHB1X3Bvd2VyX2RhdGFfYnVz X3VucmVnaXN0ZXIoCj4gLQkJc3RydWN0IGRwdV9wb3dlcl9kYXRhX2J1c19oYW5kbGUgKnBkYnVz KQo+IC17Cj4gLQlpZiAocGRidXMtPmRhdGFfYnVzX2hkbCkgewo+IC0JCW1zbV9idXNfc2NhbGVf dW5yZWdpc3Rlcl9jbGllbnQocGRidXMtPmRhdGFfYnVzX2hkbCk7Cj4gLQkJcGRidXMtPmRhdGFf YnVzX2hkbCA9IDA7Cj4gLQl9Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgZHB1X3Bvd2VyX2RhdGFf YnVzX3BhcnNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4gLQlzdHJ1Y3QgZHB1X3Bv d2VyX2RhdGFfYnVzX2hhbmRsZSAqcGRidXMsIGNvbnN0IGNoYXIgKm5hbWUpCj4gLXsKPiAtCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKPiAtCWludCByYyA9IDA7Cj4gLQlpbnQgcGF0aHM7Cj4g LQo+IC0JcGRidXMtPmJ1c19jaGFubmVscyA9IDE7Cj4gLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRf dTMyKHBkZXYtPmRldi5vZl9ub2RlLAo+IC0JCSJxY29tLGRwdS1kcmFtLWNoYW5uZWxzIiwgJnBk YnVzLT5idXNfY2hhbm5lbHMpOwo+IC0JaWYgKHJjKSB7Cj4gLQkJcHJfZGVidWcoIm51bWJlciBv ZiBjaGFubmVscyBwcm9wZXJ0eSBub3Qgc3BlY2lmaWVkXG4iKTsKPiAtCQlyYyA9IDA7Cj4gLQl9 Cj4gLQo+IC0JcGRidXMtPm5ydF9heGlfcG9ydF9jbnQgPSAwOwo+IC0JcmMgPSBvZl9wcm9wZXJ0 eV9yZWFkX3UzMihwZGV2LT5kZXYub2Zfbm9kZSwKPiAtCQkJInFjb20sZHB1LW51bS1ucnQtcGF0 aHMiLAo+IC0JCQkmcGRidXMtPm5ydF9heGlfcG9ydF9jbnQpOwo+IC0JaWYgKHJjKSB7Cj4gLQkJ cHJfZGVidWcoIm51bWJlciBvZiBheGkgcG9ydCBwcm9wZXJ0eSBub3Qgc3BlY2lmaWVkXG4iKTsK PiAtCQlyYyA9IDA7Cj4gLQl9Cj4gLQo+IC0Jbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKHBk ZXYtPmRldi5vZl9ub2RlLCBuYW1lKTsKPiAtCWlmIChub2RlKSB7Cj4gLQkJcmMgPSBvZl9wcm9w ZXJ0eV9yZWFkX3UzMihub2RlLAo+IC0JCQkJInFjb20sbXNtLWJ1cyxudW0tcGF0aHMiLCAmcGF0 aHMpOwo+IC0JCWlmIChyYykgewo+IC0JCQlwcl9lcnIoIkVycm9yLiBxY29tLG1zbS1idXMsbnVt LXBhdGhzIG5vdCBmb3VuZFxuIik7Cj4gLQkJCXJldHVybiByYzsKPiAtCQl9Cj4gLQkJcGRidXMt PmF4aV9wb3J0X2NudCA9IHBhdGhzOwo+IC0KPiAtCQlwZGJ1cy0+ZGF0YV9idXNfc2NhbGVfdGFi bGUgPQo+IC0JCQkJbXNtX2J1c19wZGF0YV9mcm9tX25vZGUocGRldiwgbm9kZSk7Cj4gLQkJaWYg KElTX0VSUl9PUl9OVUxMKHBkYnVzLT5kYXRhX2J1c19zY2FsZV90YWJsZSkpIHsKPiAtCQkJcHJf ZXJyKCJyZWcgYnVzIGhhbmRsZSBwYXJzaW5nIGZhaWxlZFxuIik7Cj4gLQkJCXJjID0gUFRSX0VS UihwZGJ1cy0+ZGF0YV9idXNfc2NhbGVfdGFibGUpOwo+IC0JCQlpZiAoIXBkYnVzLT5kYXRhX2J1 c19zY2FsZV90YWJsZSkKPiAtCQkJCXJjID0gLUVJTlZBTDsKPiAtCQkJZ290byBlbmQ7Cj4gLQkJ fQo+IC0JCXBkYnVzLT5kYXRhX2J1c19oZGwgPSBtc21fYnVzX3NjYWxlX3JlZ2lzdGVyX2NsaWVu dCgKPiAtCQkJCXBkYnVzLT5kYXRhX2J1c19zY2FsZV90YWJsZSk7Cj4gLQkJaWYgKCFwZGJ1cy0+ ZGF0YV9idXNfaGRsKSB7Cj4gLQkJCXByX2VycigiZGF0YV9idXNfY2xpZW50IHJlZ2lzdGVyIGZh aWxlZFxuIik7Cj4gLQkJCXJjID0gLUVJTlZBTDsKPiAtCQkJZ290byBlbmQ7Cj4gLQkJfQo+IC0J CXByX2RlYnVnKCJyZWdpc3RlciAlcyBkYXRhX2J1c19oZGw9JXhcbiIsIG5hbWUsCj4gLQkJCQlw ZGJ1cy0+ZGF0YV9idXNfaGRsKTsKPiAtCX0KPiAtCj4gLWVuZDoKPiAtCXJldHVybiByYzsKPiAt fQo+IC0KPiAtc3RhdGljIGludCBkcHVfcG93ZXJfcmVnX2J1c19wYXJzZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2LAo+IC0Jc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUpCj4g LXsKPiAtCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKPiAtCXN0cnVjdCBtc21fYnVzX3NjYWxl X3BkYXRhICpidXNfc2NhbGVfdGFibGU7Cj4gLQlpbnQgcmMgPSAwOwo+IC0KPiAtCW5vZGUgPSBv Zl9nZXRfY2hpbGRfYnlfbmFtZShwZGV2LT5kZXYub2Zfbm9kZSwgInFjb20sZHB1LXJlZy1idXMi KTsKPiAtCWlmIChub2RlKSB7Cj4gLQkJYnVzX3NjYWxlX3RhYmxlID0gbXNtX2J1c19wZGF0YV9m cm9tX25vZGUocGRldiwgbm9kZSk7Cj4gLQkJaWYgKElTX0VSUl9PUl9OVUxMKGJ1c19zY2FsZV90 YWJsZSkpIHsKPiAtCQkJcHJfZXJyKCJyZWcgYnVzIGhhbmRsZSBwYXJzaW5nIGZhaWxlZFxuIik7 Cj4gLQkJCXJjID0gUFRSX0VSUihidXNfc2NhbGVfdGFibGUpOwo+IC0JCQlpZiAoIWJ1c19zY2Fs ZV90YWJsZSkKPiAtCQkJCXJjID0gLUVJTlZBTDsKPiAtCQkJZ290byBlbmQ7Cj4gLQkJfQo+IC0J CXBoYW5kbGUtPnJlZ19idXNfaGRsID0gbXNtX2J1c19zY2FsZV9yZWdpc3Rlcl9jbGllbnQoCj4g LQkJCSAgICAgIGJ1c19zY2FsZV90YWJsZSk7Cj4gLQkJaWYgKCFwaGFuZGxlLT5yZWdfYnVzX2hk bCkgewo+IC0JCQlwcl9lcnIoInJlZ19idXNfY2xpZW50IHJlZ2lzdGVyIGZhaWxlZFxuIik7Cj4g LQkJCXJjID0gLUVJTlZBTDsKPiAtCQkJZ290byBlbmQ7Cj4gLQkJfQo+IC0JCXByX2RlYnVnKCJy ZWdpc3RlciByZWdfYnVzX2hkbD0leFxuIiwgcGhhbmRsZS0+cmVnX2J1c19oZGwpOwo+IC0JfQo+ IC0KPiAtZW5kOgo+IC0JcmV0dXJuIHJjOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBkcHVfcG93 ZXJfcmVnX2J1c191bnJlZ2lzdGVyKHUzMiByZWdfYnVzX2hkbCkKPiAtewo+IC0JaWYgKHJlZ19i dXNfaGRsKQo+IC0JCW1zbV9idXNfc2NhbGVfdW5yZWdpc3Rlcl9jbGllbnQocmVnX2J1c19oZGwp Owo+IC19Cj4gLQo+IC1pbnQgZHB1X3Bvd2VyX2RhdGFfYnVzX3N0YXRlX3VwZGF0ZShzdHJ1Y3Qg ZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKPiAtCQkJCQkJCWJvb2wgZW5hYmxlKQo+IC17Cj4g LQlpbnQgaTsKPiAtCj4gLQlpZiAoIXBoYW5kbGUpIHsKPiAtCQlwcl9lcnIoImludmFsaWQgcGFy YW1cbiIpOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCWZvciAoaSA9IERQVV9Q T1dFUl9IQU5ETEVfREJVU19JRF9NTk9DOwo+IC0JCQlpIDwgRFBVX1BPV0VSX0hBTkRMRV9EQlVT X0lEX01BWDsgaSsrKQo+IC0JCXBoYW5kbGUtPmRhdGFfYnVzX2hhbmRsZVtpXS5lbmFibGUgPSBl bmFibGU7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgZHB1X3Bvd2Vy X2RhdGFfYnVzX3VwZGF0ZShzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSAqcGRidXMs Cj4gLQkJCQkJCQlib29sIGVuYWJsZSkKPiAtewo+IC0JaW50IHJjID0gMDsKPiAtCj4gLQlwZGJ1 cy0+ZW5hYmxlID0gZW5hYmxlOwo+IC0KPiAtCWlmIChwZGJ1cy0+ZGF0YV9idXNfaGRsKQo+IC0J CXJjID0gX2RwdV9wb3dlcl9kYXRhX2J1c19zZXRfcXVvdGEocGRidXMsIHBkYnVzLT5hYl9ydCwK PiAtCQkJCXBkYnVzLT5hYl9ucnQsIHBkYnVzLT5pYl9ydCwgcGRidXMtPmliX25ydCk7Cj4gLQo+ IC0JaWYgKHJjKQo+IC0JCXByX2VycigiZmFpbGVkIHRvIHNldCBkYXRhIGJ1cyB2b3RlIHJjPSVk IGVuYWJsZTolZFxuIiwKPiAtCQkJCQkJCXJjLCBlbmFibGUpOwo+IC0KPiAtCXJldHVybiByYzsK PiAtfQo+IC0KPiAtc3RhdGljIGludCBkcHVfcG93ZXJfcmVnX2J1c191cGRhdGUodTMyIHJlZ19i dXNfaGRsLCB1MzIgdXNlY2FzZV9uZHgpCj4gLXsKPiAtCWludCByYyA9IDA7Cj4gLQo+IC0JaWYg KHJlZ19idXNfaGRsKQo+IC0JCXJjID0gbXNtX2J1c19zY2FsZV9jbGllbnRfdXBkYXRlX3JlcXVl c3QocmVnX2J1c19oZGwsCj4gLQkJCQkJCQkJdXNlY2FzZV9uZHgpOwo+IC0JaWYgKHJjKQo+IC0J CXByX2VycigiZmFpbGVkIHRvIHNldCByZWcgYnVzIHZvdGUgcmM9JWRcbiIsIHJjKTsKPiAtCj4g LQlyZXR1cm4gcmM7Cj4gLX0KPiAtI2Vsc2UKPiAtc3RhdGljIGludCBkcHVfcG93ZXJfZGF0YV9i dXNfcGFyc2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPiAtCQlzdHJ1Y3QgZHB1X3Bv d2VyX2RhdGFfYnVzX2hhbmRsZSAqcGRidXMsIGNvbnN0IGNoYXIgKm5hbWUpCj4gLXsKPiAtCXJl dHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBkcHVfcG93ZXJfZGF0YV9idXNfdW5yZWdp c3RlcigKPiAtCQlzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSAqcGRidXMpCj4gLXsK PiAtfQo+IC0KPiAtaW50IGRwdV9wb3dlcl9kYXRhX2J1c19zZXRfcXVvdGEoc3RydWN0IGRwdV9w b3dlcl9oYW5kbGUgKnBoYW5kbGUsCj4gLQkJc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKnBjbGll bnQsCj4gLQkJaW50IGJ1c19jbGllbnQsIHUzMiBidXNfaWQsCj4gLQkJdTY0IGFiX3F1b3RhLCB1 NjQgaWJfcXVvdGEpCj4gLXsKPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGRw dV9wb3dlcl9yZWdfYnVzX3BhcnNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4gLQlz dHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSkKPiAtewo+IC0JcmV0dXJuIDA7Cj4gLX0K PiAtCj4gLXN0YXRpYyB2b2lkIGRwdV9wb3dlcl9yZWdfYnVzX3VucmVnaXN0ZXIodTMyIHJlZ19i dXNfaGRsKQo+IC17Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgZHB1X3Bvd2VyX3JlZ19idXNfdXBk YXRlKHUzMiByZWdfYnVzX2hkbCwgdTMyIHVzZWNhc2VfbmR4KQo+IC17Cj4gLQlyZXR1cm4gMDsK PiAtfQo+IC0KPiAtc3RhdGljIGludCBkcHVfcG93ZXJfZGF0YV9idXNfdXBkYXRlKHN0cnVjdCBk cHVfcG93ZXJfZGF0YV9idXNfaGFuZGxlICpwZGJ1cywKPiAtCQkJCQkJCWJvb2wgZW5hYmxlKQo+ IC17Cj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtaW50IGRwdV9wb3dlcl9kYXRhX2J1c19zdGF0 ZV91cGRhdGUoc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCj4gLQkJCQkJCQlib29s IGVuYWJsZSkKPiAtewo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtI2VuZGlmCj4gLQo+IC1pbnQgZHB1 X3Bvd2VyX3Jlc291cmNlX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPiAtCXN0 cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlKQo+IC17Cj4gLQlpbnQgcmMgPSAwLCBpOwo+ IC0KPiAtCWlmICghcGhhbmRsZSB8fCAhcGRldikgewo+IC0JCXByX2VycigiaW52YWxpZCBpbnB1 dCBwYXJhbVxuIik7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JcGhhbmRsZS0+ ZGV2ID0gJnBkZXYtPmRldjsKPiAtCj4gLQlyYyA9IGRwdV9wb3dlcl9yZWdfYnVzX3BhcnNlKHBk ZXYsIHBoYW5kbGUpOwo+IC0JaWYgKHJjKSB7Cj4gLQkJcHJfZXJyKCJyZWdpc3RlciBidXMgcGFy c2UgZmFpbGVkIHJjPSVkXG4iLCByYyk7Cj4gLQkJcmV0dXJuIHJjOwo+IC0JfQo+IC0KPiAtCWZv ciAoaSA9IERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NTk9DOwo+IC0JCQlpIDwgRFBVX1BPV0VS X0hBTkRMRV9EQlVTX0lEX01BWDsgaSsrKSB7Cj4gLQkJcmMgPSBkcHVfcG93ZXJfZGF0YV9idXNf cGFyc2UocGRldiwKPiAtCQkJCSZwaGFuZGxlLT5kYXRhX2J1c19oYW5kbGVbaV0sCj4gLQkJCQlk YXRhX2J1c19uYW1lW2ldKTsKPiAtCQlpZiAocmMpIHsKPiAtCQkJcHJfZXJyKCJyZWdpc3RlciBk YXRhIGJ1cyBwYXJzZSBmYWlsZWQgaWQ9JWQgcmM9JWRcbiIsCj4gLQkJCQkJaSwgcmMpOwo+IC0J CQlnb3RvIGRhdGFfYnVzX2VycjsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JSU5JVF9MSVNUX0hFQUQo JnBoYW5kbGUtPnBvd2VyX2NsaWVudF9jbGlzdCk7Cj4gLQlJTklUX0xJU1RfSEVBRCgmcGhhbmRs ZS0+ZXZlbnRfbGlzdCk7Cj4gLQo+IC0JbXV0ZXhfaW5pdCgmcGhhbmRsZS0+cGhhbmRsZV9sb2Nr KTsKPiAtCj4gLQlyZXR1cm4gcmM7Cj4gLQo+IC1kYXRhX2J1c19lcnI6Cj4gLQlmb3IgKGktLTsg aSA+PSAwOyBpLS0pCj4gLQkJZHB1X3Bvd2VyX2RhdGFfYnVzX3VucmVnaXN0ZXIoJnBoYW5kbGUt PmRhdGFfYnVzX2hhbmRsZVtpXSk7Cj4gLQlkcHVfcG93ZXJfcmVnX2J1c191bnJlZ2lzdGVyKHBo YW5kbGUtPnJlZ19idXNfaGRsKTsKPiAtCXJldHVybiByYzsKPiAtfQo+IC0KPiAtdm9pZCBkcHVf cG93ZXJfcmVzb3VyY2VfZGVpbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4gLQlz dHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSkKPiAtewo+IC0Jc3RydWN0IGRwdV9wb3dl cl9jbGllbnQgKmN1cnJfY2xpZW50LCAqbmV4dF9jbGllbnQ7Cj4gLQlzdHJ1Y3QgZHB1X3Bvd2Vy X2V2ZW50ICpjdXJyX2V2ZW50LCAqbmV4dF9ldmVudDsKPiAtCWludCBpOwo+IC0KPiAtCWlmICgh cGhhbmRsZSB8fCAhcGRldikgewo+IC0JCXByX2VycigiaW52YWxpZCBpbnB1dCBwYXJhbVxuIik7 Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCW11dGV4X2xvY2soJnBoYW5kbGUtPnBoYW5kbGVf bG9jayk7Cj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3Vycl9jbGllbnQsIG5leHRfY2xp ZW50LAo+IC0JCQkmcGhhbmRsZS0+cG93ZXJfY2xpZW50X2NsaXN0LCBsaXN0KSB7Cj4gLQkJcHJf ZXJyKCJjbGllbmQ6JXMtJWQgc3RpbGwgcmVnaXN0ZXJlZCB3aXRoIHJlZmNvdW50OiVkXG4iLAo+ IC0JCQkJY3Vycl9jbGllbnQtPm5hbWUsIGN1cnJfY2xpZW50LT5pZCwKPiAtCQkJCWN1cnJfY2xp ZW50LT5yZWZjb3VudCk7Cj4gLQkJY3Vycl9jbGllbnQtPmFjdGl2ZSA9IGZhbHNlOwo+IC0JCWxp c3RfZGVsKCZjdXJyX2NsaWVudC0+bGlzdCk7Cj4gLQl9Cj4gLQo+IC0JbGlzdF9mb3JfZWFjaF9l bnRyeV9zYWZlKGN1cnJfZXZlbnQsIG5leHRfZXZlbnQsCj4gLQkJCSZwaGFuZGxlLT5ldmVudF9s aXN0LCBsaXN0KSB7Cj4gLQkJcHJfZXJyKCJldmVudDolZCwgY2xpZW50OiVzIHN0aWxsIHJlZ2lz dGVyZWRcbiIsCj4gLQkJCQljdXJyX2V2ZW50LT5ldmVudF90eXBlLAo+IC0JCQkJY3Vycl9ldmVu dC0+Y2xpZW50X25hbWUpOwo+IC0JCWN1cnJfZXZlbnQtPmFjdGl2ZSA9IGZhbHNlOwo+IC0JCWxp c3RfZGVsKCZjdXJyX2V2ZW50LT5saXN0KTsKPiAtCX0KPiAtCW11dGV4X3VubG9jaygmcGhhbmRs ZS0+cGhhbmRsZV9sb2NrKTsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgRFBVX1BPV0VSX0hBTkRM RV9EQlVTX0lEX01BWDsgaSsrKQo+IC0JCWRwdV9wb3dlcl9kYXRhX2J1c191bnJlZ2lzdGVyKCZw aGFuZGxlLT5kYXRhX2J1c19oYW5kbGVbaV0pOwo+IC0KPiAtCWRwdV9wb3dlcl9yZWdfYnVzX3Vu cmVnaXN0ZXIocGhhbmRsZS0+cmVnX2J1c19oZGwpOwo+IC19Cj4gLQo+IC1pbnQgZHB1X3Bvd2Vy X3Jlc291cmNlX2VuYWJsZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKPiAtCXN0 cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpwY2xpZW50LCBib29sIGVuYWJsZSkKPiAtewo+IC0JaW50 IHJjID0gMCwgaTsKPiAtCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwo+IC0JdTMyIG1heF91c2VjYXNl X25keCA9IFZPVEVfSU5ERVhfRElTQUJMRSwgcHJldl91c2VjYXNlX25keDsKPiAtCXN0cnVjdCBk cHVfcG93ZXJfY2xpZW50ICpjbGllbnQ7Cj4gLQo+IC0JaWYgKCFwaGFuZGxlIHx8ICFwY2xpZW50 KSB7Cj4gLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0IGFyZ3VtZW50XG4iKTsKPiAtCQlyZXR1cm4g LUVJTlZBTDsKPiAtCX0KPiAtCj4gLQltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2sp Owo+IC0JaWYgKGVuYWJsZSkKPiAtCQlwY2xpZW50LT5yZWZjb3VudCsrOwo+IC0JZWxzZSBpZiAo cGNsaWVudC0+cmVmY291bnQpCj4gLQkJcGNsaWVudC0+cmVmY291bnQtLTsKPiAtCj4gLQlpZiAo cGNsaWVudC0+cmVmY291bnQpCj4gLQkJcGNsaWVudC0+dXNlY2FzZV9uZHggPSBWT1RFX0lOREVY X0xPVzsKPiAtCWVsc2UKPiAtCQlwY2xpZW50LT51c2VjYXNlX25keCA9IFZPVEVfSU5ERVhfRElT QUJMRTsKPiAtCj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwgJnBoYW5kbGUtPnBvd2Vy X2NsaWVudF9jbGlzdCwgbGlzdCkgewo+IC0JCWlmIChjbGllbnQtPnVzZWNhc2VfbmR4IDwgVk9U RV9JTkRFWF9NQVggJiYKPiAtCQkgICAgY2xpZW50LT51c2VjYXNlX25keCA+IG1heF91c2VjYXNl X25keCkKPiAtCQkJbWF4X3VzZWNhc2VfbmR4ID0gY2xpZW50LT51c2VjYXNlX25keDsKPiAtCX0K PiAtCj4gLQlpZiAocGhhbmRsZS0+Y3VycmVudF91c2VjYXNlX25keCAhPSBtYXhfdXNlY2FzZV9u ZHgpIHsKPiAtCQljaGFuZ2VkID0gdHJ1ZTsKPiAtCQlwcmV2X3VzZWNhc2VfbmR4ID0gcGhhbmRs ZS0+Y3VycmVudF91c2VjYXNlX25keDsKPiAtCQlwaGFuZGxlLT5jdXJyZW50X3VzZWNhc2VfbmR4 ID0gbWF4X3VzZWNhc2VfbmR4Owo+IC0JfQo+IC0KPiAtCXByX2RlYnVnKCIlcFM6IGNoYW5nZWQ9 JWQgY3VycmVudCBpZHg9JWQgcmVxdWVzdCBjbGllbnQgJXMgaWQ6JXUgZW5hYmxlOiVkIHJlZmNv dW50OiVkXG4iLAo+IC0JCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgY2hhbmdlZCwgbWF4 X3VzZWNhc2VfbmR4LAo+IC0JCXBjbGllbnQtPm5hbWUsIHBjbGllbnQtPmlkLCBlbmFibGUsIHBj bGllbnQtPnJlZmNvdW50KTsKPiAtCj4gLQlpZiAoIWNoYW5nZWQpCj4gLQkJZ290byBlbmQ7Cj4g LQo+IC0JaWYgKGVuYWJsZSkgewo+IC0JCWRwdV9wb3dlcl9ldmVudF90cmlnZ2VyX2xvY2tlZChw aGFuZGxlLAo+IC0JCQkJRFBVX1BPV0VSX0VWRU5UX1BSRV9FTkFCTEUpOwo+IC0KPiAtCQlmb3Ig KGkgPSAwOyBpIDwgRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01BWDsgaSsrKSB7Cj4gLQkJCXJj ID0gZHB1X3Bvd2VyX2RhdGFfYnVzX3VwZGF0ZSgKPiAtCQkJCQkmcGhhbmRsZS0+ZGF0YV9idXNf aGFuZGxlW2ldLCBlbmFibGUpOwo+IC0JCQlpZiAocmMpIHsKPiAtCQkJCXByX2VycigiZmFpbGVk IHRvIHNldCBkYXRhIGJ1cyB2b3RlIGlkPSVkIHJjPSVkXG4iLAo+IC0JCQkJCQlpLCByYyk7Cj4g LQkJCQlnb3RvIGRhdGFfYnVzX2hkbF9lcnI7Cj4gLQkJCX0KPiAtCQl9Cj4gLQo+IC0JCXJjID0g ZHB1X3Bvd2VyX3JlZ19idXNfdXBkYXRlKHBoYW5kbGUtPnJlZ19idXNfaGRsLAo+IC0JCQkJCQkJ bWF4X3VzZWNhc2VfbmR4KTsKPiAtCQlpZiAocmMpIHsKPiAtCQkJcHJfZXJyKCJmYWlsZWQgdG8g c2V0IHJlZyBidXMgdm90ZSByYz0lZFxuIiwgcmMpOwo+IC0JCQlnb3RvIHJlZ19idXNfaGRsX2Vy cjsKPiAtCQl9Cj4gLQo+IC0JCWRwdV9wb3dlcl9ldmVudF90cmlnZ2VyX2xvY2tlZChwaGFuZGxl LAo+IC0JCQkJRFBVX1BPV0VSX0VWRU5UX1BPU1RfRU5BQkxFKTsKPiAtCj4gLQl9IGVsc2Ugewo+ IC0JCWRwdV9wb3dlcl9ldmVudF90cmlnZ2VyX2xvY2tlZChwaGFuZGxlLAo+IC0JCQkJRFBVX1BP V0VSX0VWRU5UX1BSRV9ESVNBQkxFKTsKPiAtCj4gLQkJZHB1X3Bvd2VyX3JlZ19idXNfdXBkYXRl KHBoYW5kbGUtPnJlZ19idXNfaGRsLAo+IC0JCQkJCQkJbWF4X3VzZWNhc2VfbmR4KTsKPiAtCj4g LQkJZm9yIChpID0gMCA7IGkgPCBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTUFYOyBpKyspCj4g LQkJCWRwdV9wb3dlcl9kYXRhX2J1c191cGRhdGUoJnBoYW5kbGUtPmRhdGFfYnVzX2hhbmRsZVtp XSwKPiAtCQkJCQllbmFibGUpOwo+IC0KPiAtCQlkcHVfcG93ZXJfZXZlbnRfdHJpZ2dlcl9sb2Nr ZWQocGhhbmRsZSwKPiAtCQkJCURQVV9QT1dFUl9FVkVOVF9QT1NUX0RJU0FCTEUpOwo+IC0JfQo+ IC0KPiAtZW5kOgo+IC0JbXV0ZXhfdW5sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOwo+IC0J cmV0dXJuIHJjOwo+IC0KPiAtcmVnX2J1c19oZGxfZXJyOgo+IC0JZm9yIChpID0gMCA7IGkgPCBE UFVfUE9XRVJfSEFORExFX0RCVVNfSURfTUFYOyBpKyspCj4gLQkJZHB1X3Bvd2VyX2RhdGFfYnVz X3VwZGF0ZSgmcGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2ldLCAwKTsKPiAtZGF0YV9idXNfaGRs X2VycjoKPiAtCXBoYW5kbGUtPmN1cnJlbnRfdXNlY2FzZV9uZHggPSBwcmV2X3VzZWNhc2VfbmR4 Owo+IC0JbXV0ZXhfdW5sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOwo+IC0JcmV0dXJuIHJj Owo+IC19Cj4gLQo+IC1zdHJ1Y3QgZHB1X3Bvd2VyX2V2ZW50ICpkcHVfcG93ZXJfaGFuZGxlX3Jl Z2lzdGVyX2V2ZW50KAo+IC0JCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAo+IC0J CXUzMiBldmVudF90eXBlLCB2b2lkICgqY2JfZm5jKSh1MzIgZXZlbnRfdHlwZSwgdm9pZCAqdXNy KSwKPiAtCQl2b2lkICp1c3IsIGNoYXIgKmNsaWVudF9uYW1lKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1 X3Bvd2VyX2V2ZW50ICpldmVudDsKPiAtCj4gLQlpZiAoIXBoYW5kbGUpIHsKPiAtCQlwcl9lcnIo ImludmFsaWQgcG93ZXIgaGFuZGxlXG4iKTsKPiAtCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsK PiAtCX0gZWxzZSBpZiAoIWNiX2ZuYyB8fCAhZXZlbnRfdHlwZSkgewo+IC0JCXByX2Vycigibm8g Y2FsbGJhY2sgZm5jIG9yIGV2ZW50IHR5cGVcbiIpOwo+IC0JCXJldHVybiBFUlJfUFRSKC1FSU5W QUwpOwo+IC0JfQo+IC0KPiAtCWV2ZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRwdV9wb3dl cl9ldmVudCksIEdGUF9LRVJORUwpOwo+IC0JaWYgKCFldmVudCkKPiAtCQlyZXR1cm4gRVJSX1BU UigtRU5PTUVNKTsKPiAtCj4gLQlldmVudC0+ZXZlbnRfdHlwZSA9IGV2ZW50X3R5cGU7Cj4gLQll dmVudC0+Y2JfZm5jID0gY2JfZm5jOwo+IC0JZXZlbnQtPnVzciA9IHVzcjsKPiAtCXN0cmxjcHko ZXZlbnQtPmNsaWVudF9uYW1lLCBjbGllbnRfbmFtZSwgTUFYX0NMSUVOVF9OQU1FX0xFTik7Cj4g LQlldmVudC0+YWN0aXZlID0gdHJ1ZTsKPiAtCj4gLQltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFu ZGxlX2xvY2spOwo+IC0JbGlzdF9hZGQoJmV2ZW50LT5saXN0LCAmcGhhbmRsZS0+ZXZlbnRfbGlz dCk7Cj4gLQltdXRleF91bmxvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7Cj4gLQo+IC0JcmV0 dXJuIGV2ZW50Owo+IC19Cj4gLQo+IC12b2lkIGRwdV9wb3dlcl9oYW5kbGVfdW5yZWdpc3Rlcl9l dmVudCgKPiAtCQlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKPiAtCQlzdHJ1Y3Qg ZHB1X3Bvd2VyX2V2ZW50ICpldmVudCkKPiAtewo+IC0JaWYgKCFwaGFuZGxlIHx8ICFldmVudCkg ewo+IC0JCXByX2VycigiaW52YWxpZCBwaGFuZGxlIG9yIGV2ZW50XG4iKTsKPiAtCX0gZWxzZSBp ZiAoIWV2ZW50LT5hY3RpdmUpIHsKPiAtCQlwcl9lcnIoInBvd2VyIGhhbmRsZSBkZWluaXQgYWxy ZWFkeSBkb25lXG4iKTsKPiAtCQlrZnJlZShldmVudCk7Cj4gLQl9IGVsc2Ugewo+IC0JCW11dGV4 X2xvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7Cj4gLQkJbGlzdF9kZWxfaW5pdCgmZXZlbnQt Pmxpc3QpOwo+IC0JCW11dGV4X3VubG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKPiAtCQlr ZnJlZShldmVudCk7Cj4gLQl9Cj4gLX0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kcHVfcG93ZXJfaGFuZGxlLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9wb3dlcl9oYW5k bGUuaAo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDlhNmQ0YjkuLjAwMDAwMDAK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9wb3dlcl9oYW5kbGUuaAo+ICsrKyAvZGV2 L251bGwKPiBAQCAtMSwyODggKzAsMCBAQAo+IC0vKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwg VGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gLSAqCj4gLSAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5Cj4gLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+IC0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiAtICoKPiAtICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4g LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCj4gLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKPiAtICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KPiAtICoKPiAtICovCj4gLQo+IC0jaWZuZGVmIF9EUFVfUE9XRVJfSEFO RExFX0hfCj4gLSNkZWZpbmUgX0RQVV9QT1dFUl9IQU5ETEVfSF8KPiAtCj4gLSNkZWZpbmUgTUFY X0NMSUVOVF9OQU1FX0xFTiAxMjgKPiAtCj4gLSNkZWZpbmUgRFBVX1BPV0VSX0hBTkRMRV9FTkFC TEVfQlVTX0FCX1FVT1RBCTAKPiAtI2RlZmluZSBEUFVfUE9XRVJfSEFORExFX0RJU0FCTEVfQlVT X0FCX1FVT1RBCTAKPiAtI2RlZmluZSBEUFVfUE9XRVJfSEFORExFX0VOQUJMRV9CVVNfSUJfUVVP VEEJMTYwMDAwMDAwMAo+IC0jZGVmaW5lIERQVV9QT1dFUl9IQU5ETEVfRElTQUJMRV9CVVNfSUJf UVVPVEEJMAo+IC0KPiAtI2luY2x1ZGUgPGxpbnV4L2RwdV9pb191dGlsLmg+Cj4gLQo+IC0vKiBl dmVudCB3aWxsIGJlIHRyaWdnZXJlZCBiZWZvcmUgcG93ZXIgaGFuZGxlciBkaXNhYmxlICovCj4g LSNkZWZpbmUgRFBVX1BPV0VSX0VWRU5UX1BSRV9ESVNBQkxFCTB4MQo+IC0KPiAtLyogZXZlbnQg d2lsbCBiZSB0cmlnZ2VyZWQgYWZ0ZXIgcG93ZXIgaGFuZGxlciBkaXNhYmxlICovCj4gLSNkZWZp bmUgRFBVX1BPV0VSX0VWRU5UX1BPU1RfRElTQUJMRQkweDIKPiAtCj4gLS8qIGV2ZW50IHdpbGwg YmUgdHJpZ2dlcmVkIGJlZm9yZSBwb3dlciBoYW5kbGVyIGVuYWJsZSAqLwo+IC0jZGVmaW5lIERQ VV9QT1dFUl9FVkVOVF9QUkVfRU5BQkxFCTB4NAo+IC0KPiAtLyogZXZlbnQgd2lsbCBiZSB0cmln Z2VyZWQgYWZ0ZXIgcG93ZXIgaGFuZGxlciBlbmFibGUgKi8KPiAtI2RlZmluZSBEUFVfUE9XRVJf RVZFTlRfUE9TVF9FTkFCTEUJMHg4Cj4gLQo+IC0vKioKPiAtICogbWRzc19idXNfdm90ZV90eXBl OiByZWdpc3RlciBidXMgdm90ZSB0eXBlCj4gLSAqIFZPVEVfSU5ERVhfRElTQUJMRTogcmVtb3Zl cyB0aGUgY2xpZW50IHZvdGUKPiAtICogVk9URV9JTkRFWF9MT1c6IGtlZXBzIHRoZSBsb3dlc3Qg dm90ZSBmb3IgcmVnaXN0ZXIgYnVzCj4gLSAqIFZPVEVfSU5ERVhfTUFYOiBpbnZhbGlkCj4gLSAq Lwo+IC1lbnVtIG1kc3NfYnVzX3ZvdGVfdHlwZSB7Cj4gLQlWT1RFX0lOREVYX0RJU0FCTEUsCj4g LQlWT1RFX0lOREVYX0xPVywKPiAtCVZPVEVfSU5ERVhfTUFYLAo+IC19Owo+IC0KPiAtLyoqCj4g LSAqIGVudW0gZHB1X3Bvd2VyX2hhbmRsZV9kYXRhX2J1c19jbGllbnQgLSB0eXBlIG9mIGF4aSBi dXMgY2xpZW50cwo+IC0gKiBARFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfUlQ6IGNv cmUgcmVhbC10aW1lIGJ1cyBjbGllbnQKPiAtICogQERQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNf Q0xJRU5UX05SVDogY29yZSBub24tcmVhbC10aW1lIGJ1cyBjbGllbnQKPiAtICogQERQVV9QT1dF Ul9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX01BWDogbWF4aW11bSBudW1iZXIgb2YgYnVzIGNsaWVu dCB0eXBlCj4gLSAqLwo+IC1lbnVtIGRwdV9wb3dlcl9oYW5kbGVfZGF0YV9idXNfY2xpZW50IHsK PiAtCURQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX1JULAo+IC0JRFBVX1BPV0VSX0hB TkRMRV9EQVRBX0JVU19DTElFTlRfTlJULAo+IC0JRFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19D TElFTlRfTUFYCj4gLX07Cj4gLQo+IC0vKioKPiAtICogZW51bSBEUFVfUE9XRVJfSEFORExFX0RC VVNfSUQgLSBkYXRhIGJ1cyBpZGVudGlmaWVyCj4gLSAqIEBEUFVfUE9XRVJfSEFORExFX0RCVVNf SURfTU5PQzogRFBVL01OT0MgZGF0YSBidXMKPiAtICogQERQVV9QT1dFUl9IQU5ETEVfREJVU19J RF9MTENDOiBNTk9DL0xMQ0MgZGF0YSBidXMKPiAtICogQERQVV9QT1dFUl9IQU5ETEVfREJVU19J RF9FQkk6IExMQ0MvRUJJIGRhdGEgYnVzCj4gLSAqLwo+IC1lbnVtIERQVV9QT1dFUl9IQU5ETEVf REJVU19JRCB7Cj4gLQlEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTU5PQywKPiAtCURQVV9QT1dF Ul9IQU5ETEVfREJVU19JRF9MTENDLAo+IC0JRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX0VCSSwK PiAtCURQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVgsCj4gLX07Cj4gLQo+IC0vKioKPiAtICog c3RydWN0IGRwdV9wb3dlcl9jbGllbnQ6IHN0b3JlcyB0aGUgcG93ZXIgY2xpZW50IGZvciBkcHUg ZHJpdmVyCj4gLSAqIEBuYW1lOgluYW1lIG9mIHRoZSBjbGllbnQKPiAtICogQHVzZWNhc2VfbmR4 OiBjdXJyZW50IHJlZ3MgYnVzIHZvdGUgdHlwZQo+IC0gKiBAcmVmY291bnQ6CWN1cnJlbnQgcmVm Y291bnQgaWYgbXVsdGlwbGUgbW9kdWxlcyBhcmUgdXNpbmcgc2FtZQo+IC0gKiAgICAgICAgICAg ICAgc2FtZSBjbGllbnQgZm9yIGVuYWJsZS9kaXNhYmxlLiBQb3dlciBtb2R1bGUgd2lsbAo+IC0g KiAgICAgICAgICAgICAgYWdncmVnYXRlIHRoZSByZWZjb3VudCBhbmQgdm90ZSBhY2NvcmRpbmds eSBmb3IgdGhpcwo+IC0gKiAgICAgICAgICAgICAgY2xpZW50Lgo+IC0gKiBAaWQ6CQlhc3NpZ25l ZCBkdXJpbmcgY3JlYXRlLiBoZWxwcyBmb3IgZGVidWdnaW5nLgo+IC0gKiBAbGlzdDoJbGlzdCB0 byBhdHRhY2ggcG93ZXIgaGFuZGxlIG1hc3RlciBsaXN0Cj4gLSAqIEBhYjogICAgICAgICBhcmJp dHJhdGVkIGJhbmR3aWR0aCBmb3IgZWFjaCBidXMgY2xpZW50Cj4gLSAqIEBpYjogICAgICAgICBp bnN0YW50YW5lb3VzIGJhbmR3aWR0aCBmb3IgZWFjaCBidXMgY2xpZW50Cj4gLSAqIEBhY3RpdmU6 CWluaWRjYXRlcyB0aGUgc3RhdGUgb2YgZHB1IHBvd2VyIGhhbmRsZQo+IC0gKi8KPiAtc3RydWN0 IGRwdV9wb3dlcl9jbGllbnQgewo+IC0JY2hhciBuYW1lW01BWF9DTElFTlRfTkFNRV9MRU5dOwo+ IC0Jc2hvcnQgdXNlY2FzZV9uZHg7Cj4gLQlzaG9ydCByZWZjb3VudDsKPiAtCXUzMiBpZDsKPiAt CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiAtCXU2NCBhYltEUFVfUE9XRVJfSEFORExFX0RBVEFf QlVTX0NMSUVOVF9NQVhdOwo+IC0JdTY0IGliW0RQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJ RU5UX01BWF07Cj4gLQlib29sIGFjdGl2ZTsKPiAtfTsKPiAtCj4gLS8qKgo+IC0gKiBzdHJ1Y3Qg ZHB1X3Bvd2VyX2RhdGFfaGFuZGxlOiBwb3dlciBoYW5kbGUgc3RydWN0IGZvciBkYXRhIGJ1cwo+ IC0gKiBAZGF0YV9idXNfc2NhbGVfdGFibGU6IHBvaW50ZXIgdG8gYnVzIHNjYWxpbmcgdGFibGUK PiAtICogQGRhdGFfYnVzX2hkbDogY3VycmVudCBkYXRhIGJ1cyBoYW5kbGUKPiAtICogQGF4aV9w b3J0X2NudDogbnVtYmVyIG9mIHJ0IGF4aSBwb3J0cwo+IC0gKiBAbnJ0X2F4aV9wb3J0X2NudDog bnVtYmVyIG9mIG5ydCBheGkgcG9ydHMKPiAtICogQGJ1c19jaGFubmVsczogbnVtYmVyIG9mIG1l bW9yeSBidXMgY2hhbm5lbHMKPiAtICogQGN1cnJfYndfdWNfaWR4OiBjdXJyZW50IHVzZSBjYXNl IGluZGV4IG9mIGRhdGEgYnVzCj4gLSAqIEBhb19id191Y19pZHg6IGFjdGl2ZSBvbmx5IHVzZSBj YXNlIGluZGV4IG9mIGRhdGEgYnVzCj4gLSAqIEBhYl9ydDogcmVhbHRpbWUgYWIgcXVvdGEKPiAt ICogQGliX3J0OiByZWFsdGltZSBpYiBxdW90YQo+IC0gKiBAYWJfbnJ0OiBub24tcmVhbHRpbWUg YWIgcXVvdGEKPiAtICogQGliX25ydDogbm9uLXJlYWx0aW1lIGliIHF1b3RhCj4gLSAqIEBlbmFi bGU6IHRydWUgaWYgYnVzIGlzIGVuYWJsZWQKPiAtICovCj4gLXN0cnVjdCBkcHVfcG93ZXJfZGF0 YV9idXNfaGFuZGxlIHsKPiAtCXN0cnVjdCBtc21fYnVzX3NjYWxlX3BkYXRhICpkYXRhX2J1c19z Y2FsZV90YWJsZTsKPiAtCXUzMiBkYXRhX2J1c19oZGw7Cj4gLQl1MzIgYXhpX3BvcnRfY250Owo+ IC0JdTMyIG5ydF9heGlfcG9ydF9jbnQ7Cj4gLQl1MzIgYnVzX2NoYW5uZWxzOwo+IC0JdTMyIGN1 cnJfYndfdWNfaWR4Owo+IC0JdTMyIGFvX2J3X3VjX2lkeDsKPiAtCXU2NCBhYl9ydDsKPiAtCXU2 NCBpYl9ydDsKPiAtCXU2NCBhYl9ucnQ7Cj4gLQl1NjQgaWJfbnJ0Owo+IC0JYm9vbCBlbmFibGU7 Cj4gLX07Cj4gLQo+IC0vKgo+IC0gKiBzdHJ1Y3QgZHB1X3Bvd2VyX2V2ZW50IC0gbG9jYWwgZXZl bnQgcmVnaXN0cmF0aW9uIHN0cnVjdHVyZQo+IC0gKiBAY2xpZW50X25hbWU6IG5hbWUgb2YgdGhl IGNsaWVudCByZWdpc3RlcmluZwo+IC0gKiBAY2JfZm5jOiBwb2ludGVyIHRvIGRlc2lyZWQgY2Fs bGJhY2sgZnVuY3Rpb24KPiAtICogQHVzcjogdXNlciBwb2ludGVyIHRvIHBhc3MgdG8gY2FsbGJh Y2sgZXZlbnQgdHJpZ2dlcgo+IC0gKiBAZXZlbnQ6IHJlZmVyIHRvIERQVV9QT1dFUl9IQU5ETEVf RVZFTlRfKgo+IC0gKiBAbGlzdDogbGlzdCB0byBhdHRhY2ggZXZlbnQgbWFzdGVyIGxpc3QKPiAt ICogQGFjdGl2ZTogaW5kaWNhdGVzIHRoZSBzdGF0ZSBvZiBkcHUgcG93ZXIgaGFuZGxlCj4gLSAq Lwo+IC1zdHJ1Y3QgZHB1X3Bvd2VyX2V2ZW50IHsKPiAtCWNoYXIgY2xpZW50X25hbWVbTUFYX0NM SUVOVF9OQU1FX0xFTl07Cj4gLQl2b2lkICgqY2JfZm5jKSh1MzIgZXZlbnRfdHlwZSwgdm9pZCAq dXNyKTsKPiAtCXZvaWQgKnVzcjsKPiAtCXUzMiBldmVudF90eXBlOwo+IC0Jc3RydWN0IGxpc3Rf aGVhZCBsaXN0Owo+IC0JYm9vbCBhY3RpdmU7Cj4gLX07Cj4gLQo+IC0vKioKPiAtICogc3RydWN0 IGRwdV9wb3dlcl9oYW5kbGU6IHBvd2VyIGhhbmRsZSBtYWluIHN0cnVjdAo+IC0gKiBAY2xpZW50 X2NsaXN0OiBtYXN0ZXIgbGlzdCB0byBzdG9yZSBhbGwgY2xpZW50cwo+IC0gKiBAcGhhbmRsZV9s b2NrOiBsb2NrIHRvIHN5bmNocm9uaXplIHRoZSBlbmFibGUvZGlzYWJsZQo+IC0gKiBAZGV2OiBw b2ludGVyIHRvIGRldmljZSBzdHJ1Y3R1cmUKPiAtICogQHVzZWNhc2VfbmR4OiBjdXJyZW50IHVz ZWNhc2UgaW5kZXgKPiAtICogQHJlZ19idXNfaGRsOiBjdXJyZW50IHJlZ2lzdGVyIGJ1cyBoYW5k bGUKPiAtICogQGRhdGFfYnVzX2hhbmRsZTogY29udGV4dCBzdHJ1Y3R1cmUgZm9yIGRhdGEgYnVz IGNvbnRyb2wKPiAtICogQGV2ZW50X2xpc3Q6IGN1cnJlbnQgcG93ZXIgaGFuZGxlIGV2ZW50IGxp c3QKPiAtICovCj4gLXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlIHsKPiAtCXN0cnVjdCBsaXN0X2hl YWQgcG93ZXJfY2xpZW50X2NsaXN0Owo+IC0Jc3RydWN0IG11dGV4IHBoYW5kbGVfbG9jazsKPiAt CXN0cnVjdCBkZXZpY2UgKmRldjsKPiAtCXUzMiBjdXJyZW50X3VzZWNhc2VfbmR4Owo+IC0JdTMy IHJlZ19idXNfaGRsOwo+IC0Jc3RydWN0IGRwdV9wb3dlcl9kYXRhX2J1c19oYW5kbGUgZGF0YV9i dXNfaGFuZGxlCj4gLQkJW0RQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVhdOwo+IC0Jc3RydWN0 IGxpc3RfaGVhZCBldmVudF9saXN0Owo+IC19Owo+IC0KPiAtLyoqCj4gLSAqIGRwdV9wb3dlcl9y ZXNvdXJjZV9pbml0KCkgLSBpbml0aWFsaXplcyB0aGUgZHB1IHBvd2VyIGhhbmRsZQo+IC0gKiBA cGRldjogICBwbGF0Zm9ybSBkZXZpY2UgdG8gc2VhcmNoIHRoZSBwb3dlciByZXNvdXJjZXMKPiAt ICogQHBkYXRhOiAgcG93ZXIgaGFuZGxlIHRvIHN0b3JlIHRoZSBwb3dlciByZXNvdXJjZXMKPiAt ICoKPiAtICogUmV0dXJuOiBlcnJvciBjb2RlLgo+IC0gKi8KPiAtaW50IGRwdV9wb3dlcl9yZXNv dXJjZV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4gLQlzdHJ1Y3QgZHB1X3Bv d2VyX2hhbmRsZSAqcGRhdGEpOwo+IC0KPiAtLyoqCj4gLSAqIGRwdV9wb3dlcl9yZXNvdXJjZV9k ZWluaXQoKSAtIHJlbGVhc2UgdGhlIGRwdSBwb3dlciBoYW5kbGUKPiAtICogQHBkZXY6ICAgcGxh dGZvcm0gZGV2aWNlIGZvciBwb3dlciByZXNvdXJjZXMKPiAtICogQHBkYXRhOiAgcG93ZXIgaGFu ZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlcwo+IC0gKgo+IC0gKiBSZXR1cm46IGVycm9yIGNv ZGUuCj4gLSAqLwo+IC12b2lkIGRwdV9wb3dlcl9yZXNvdXJjZV9kZWluaXQoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldiwKPiAtCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwZGF0YSk7Cj4g LQo+IC0vKioKPiAtICogZHB1X3Bvd2VyX2NsaWVudF9jcmVhdGUoKSAtIGNyZWF0ZSB0aGUgY2xp ZW50IG9uIHBvd2VyIGhhbmRsZQo+IC0gKiBAcGRhdGE6ICBwb3dlciBoYW5kbGUgY29udGFpbmlu ZyB0aGUgcmVzb3VyY2VzCj4gLSAqIEBjbGllbnRfbmFtZTogbmV3IGNsaWVudCBuYW1lIGZvciBy ZWdpc3RyYXRpb24KPiAtICoKPiAtICogUmV0dXJuOiBlcnJvciBjb2RlLgo+IC0gKi8KPiAtc3Ry dWN0IGRwdV9wb3dlcl9jbGllbnQgKmRwdV9wb3dlcl9jbGllbnRfY3JlYXRlKHN0cnVjdCBkcHVf cG93ZXJfaGFuZGxlICpwZGF0YSwKPiAtCWNoYXIgKmNsaWVudF9uYW1lKTsKPiAtCj4gLS8qKgo+ IC0gKiBkcHVfcG93ZXJfY2xpZW50X2Rlc3Ryb3koKSAtIGRlc3Ryb3kgdGhlIGNsaWVudCBvbiBw b3dlciBoYW5kbGUKPiAtICogQHBkYXRhOiAgcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJl c291cmNlcwo+IC0gKiBAY2xpZW50X25hbWU6IG5ldyBjbGllbnQgbmFtZSBmb3IgcmVnaXN0cmF0 aW9uCj4gLSAqCj4gLSAqIFJldHVybjogbm9uZQo+IC0gKi8KPiAtdm9pZCBkcHVfcG93ZXJfY2xp ZW50X2Rlc3Ryb3koc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCj4gLQlzdHJ1Y3Qg ZHB1X3Bvd2VyX2NsaWVudCAqY2xpZW50KTsKPiAtCj4gLS8qKgo+IC0gKiBkcHVfcG93ZXJfcmVz b3VyY2VfZW5hYmxlKCkgLSBlbmFibGUvZGlzYWJsZSB0aGUgcG93ZXIgcmVzb3VyY2VzCj4gLSAq IEBwZGF0YTogIHBvd2VyIGhhbmRsZSBjb250YWluaW5nIHRoZSByZXNvdXJjZXMKPiAtICogQGNs aWVudDogY2xpZW50IGluZm9ybWF0aW9uIHRvIGVuYWJsZS9kaXNhYmxlIGl0cyB2b3RlCj4gLSAq IEBlbmFibGU6IGJvb2xlYW4gcmVxdWVzdCBmb3IgZW5hYmxlL2Rpc2FibGUKPiAtICoKPiAtICog UmV0dXJuOiBlcnJvciBjb2RlLgo+IC0gKi8KPiAtaW50IGRwdV9wb3dlcl9yZXNvdXJjZV9lbmFi bGUoc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBkYXRhLAo+IC0Jc3RydWN0IGRwdV9wb3dlcl9j bGllbnQgKnBjbGllbnQsIGJvb2wgZW5hYmxlKTsKPiAtCj4gLS8qKgo+IC0gKiBkcHVfcG93ZXJf ZGF0YV9idXNfc3RhdGVfdXBkYXRlKCkgLSB1cGRhdGUgZGF0YSBidXMgc3RhdGUKPiAtICogQHBk YXRhOiAgcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlcwo+IC0gKiBAZW5hYmxl OiB0YWtlIGVuYWJsZSB2cyBkaXNhYmxlIHBhdGgKPiAtICoKPiAtICogUmV0dXJuOiBlcnJvciBj b2RlLgo+IC0gKi8KPiAtaW50IGRwdV9wb3dlcl9kYXRhX2J1c19zdGF0ZV91cGRhdGUoc3RydWN0 IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCj4gLQkJCQkJCQlib29sIGVuYWJsZSk7Cj4gLQo+ IC0vKioKPiAtICogZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9xdW90YSgpIC0gc2V0IGRhdGEgYnVz IHF1b3RhIGZvciBwb3dlciBjbGllbnQKPiAtICogQHBoYW5kbGU6ICBwb3dlciBoYW5kbGUgY29u dGFpbmluZyB0aGUgcmVzb3VyY2VzCj4gLSAqIEBjbGllbnQ6IGNsaWVudCBpbmZvcm1hdGlvbiB0 byBzZXQgcXVvdGEKPiAtICogQGJ1c19jbGllbnQ6IHJlYWwtdGltZSBvciBub24tcmVhbC10aW1l IGJ1cyBjbGllbnQKPiAtICogQGJ1c19pZDogaWRlbnRpZmllciBvZiBkYXRhIGJ1cywgc2VlIERQ VV9QT1dFUl9IQU5ETEVfREJVU19JRAo+IC0gKiBAYWJfcXVvdGE6IGFyYml0cmF0ZWQgYnVzIGJh bmR3aWR0aAo+IC0gKiBAaWJfcXVvdGE6IGluc3RhbnRhbmVvdXMgYnVzIGJhbmR3aWR0aAo+IC0g Kgo+IC0gKiBSZXR1cm46IHplcm8gaWYgc3VjY2Vzcywgb3IgZXJyb3IgY29kZSBvdGhlcndpc2UK PiAtICovCj4gLWludCBkcHVfcG93ZXJfZGF0YV9idXNfc2V0X3F1b3RhKHN0cnVjdCBkcHVfcG93 ZXJfaGFuZGxlICpwaGFuZGxlLAo+IC0JCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpwY2xpZW50 LAo+IC0JCWludCBidXNfY2xpZW50LCB1MzIgYnVzX2lkLAo+IC0JCXU2NCBhYl9xdW90YSwgdTY0 IGliX3F1b3RhKTsKPiAtCj4gLS8qKgo+IC0gKiBkcHVfcG93ZXJfZGF0YV9idXNfYmFuZHdpZHRo X2N0cmwoKSAtIGNvbnRyb2wgZGF0YSBidXMgYmFuZHdpZHRoIGVuYWJsZQo+IC0gKiBAcGhhbmRs ZTogIHBvd2VyIGhhbmRsZSBjb250YWluaW5nIHRoZSByZXNvdXJjZXMKPiAtICogQGNsaWVudDog Y2xpZW50IGluZm9ybWF0aW9uIHRvIGJhbmR3aWR0aCBjb250cm9sCj4gLSAqIEBlbmFibGU6IHRy dWUgdG8gZW5hYmxlIGJhbmR3aWR0aCBmb3IgZGF0YSBiYXNlCj4gLSAqCj4gLSAqIFJldHVybjog bm9uZQo+IC0gKi8KPiAtdm9pZCBkcHVfcG93ZXJfZGF0YV9idXNfYmFuZHdpZHRoX2N0cmwoc3Ry dWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCj4gLQkJc3RydWN0IGRwdV9wb3dlcl9jbGll bnQgKnBjbGllbnQsIGludCBlbmFibGUpOwo+IC0KPiAtLyoqCj4gLSAqIGRwdV9wb3dlcl9oYW5k bGVfcmVnaXN0ZXJfZXZlbnQgLSByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBhbiBl dmVudC4KPiAtICoJQ2xpZW50cyBjYW4gcmVnaXN0ZXIgZm9yIG11bHRpcGxlIGV2ZW50cyB3aXRo IGEgc2luZ2xlIHJlZ2lzdGVyLgo+IC0gKglBbnkgYmxvY2sgd2l0aCBhY2Nlc3MgdG8gcGhhbmRs ZSBjYW4gcmVnaXN0ZXIgZm9yIHRoZSBldmVudAo+IC0gKglub3RpZmljYXRpb24uCj4gLSAqIEBw aGFuZGxlOglwb3dlciBoYW5kbGUgY29udGFpbmluZyB0aGUgcmVzb3VyY2VzCj4gLSAqIEBldmVu dF90eXBlOglldmVudCB0eXBlIHRvIHJlZ2lzdGVyOyByZWZlciBEUFVfUE9XRVJfSEFORExFX0VW RU5UXyoKPiAtICogQGNiX2ZuYzoJcG9pbnRlciB0byBkZXNpcmVkIGNhbGxiYWNrIGZ1bmN0aW9u Cj4gLSAqIEB1c3I6CXVzZXIgcG9pbnRlciB0byBwYXNzIHRvIGNhbGxiYWNrIG9uIGV2ZW50IHRy aWdnZXIKPiAtICoKPiAtICogUmV0dXJuOglldmVudCBwb2ludGVyIGlmIHN1Y2Nlc3MsIG9yIGVy cm9yIGNvZGUgb3RoZXJ3aXNlCj4gLSAqLwo+IC1zdHJ1Y3QgZHB1X3Bvd2VyX2V2ZW50ICpkcHVf cG93ZXJfaGFuZGxlX3JlZ2lzdGVyX2V2ZW50KAo+IC0JCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxl ICpwaGFuZGxlLAo+IC0JCXUzMiBldmVudF90eXBlLCB2b2lkICgqY2JfZm5jKSh1MzIgZXZlbnRf dHlwZSwgdm9pZCAqdXNyKSwKPiAtCQl2b2lkICp1c3IsIGNoYXIgKmNsaWVudF9uYW1lKTsKPiAt LyoqCj4gLSAqIGRwdV9wb3dlcl9oYW5kbGVfdW5yZWdpc3Rlcl9ldmVudCAtIHVucmVnaXN0ZXIg Y2FsbGJhY2sgZm9yIGV2ZW50KHMpCj4gLSAqIEBwaGFuZGxlOglwb3dlciBoYW5kbGUgY29udGFp bmluZyB0aGUgcmVzb3VyY2VzCj4gLSAqIEBldmVudDoJZXZlbnQgcG9pbnRlciByZXR1cm5lZCBh ZnRlciBwb3dlciBoYW5kbGUgcmVnaXN0ZXIKPiAtICovCj4gLXZvaWQgZHB1X3Bvd2VyX2hhbmRs ZV91bnJlZ2lzdGVyX2V2ZW50KHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAo+IC0J CXN0cnVjdCBkcHVfcG93ZXJfZXZlbnQgKmV2ZW50KTsKPiAtCj4gLS8qKgo+IC0gKiBkcHVfcG93 ZXJfaGFuZGxlX2dldF9kYnVzX25hbWUgLSBnZXQgbmFtZSBvZiBnaXZlbiBkYXRhIGJ1cyBpZGVu dGlmaWVyCj4gLSAqIEBidXNfaWQ6CWRhdGEgYnVzIGlkZW50aWZpZXIKPiAtICogUmV0dXJuOglQ b2ludGVyIHRvIG5hbWUgc3RyaW5nIGlmIHN1Y2Nlc3M7IE5VTEwgb3RoZXJ3aXNlCj4gLSAqLwo+ IC1jb25zdCBjaGFyICpkcHVfcG93ZXJfaGFuZGxlX2dldF9kYnVzX25hbWUodTMyIGJ1c19pZCk7 Cj4gLQo+IC0jZW5kaWYgLyogX0RQVV9QT1dFUl9IQU5ETEVfSF8gKi8KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9k cnYuYwo+IGluZGV4IDVjMjY3Y2QuLjYwYjY5MTkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9tc21fZHJ2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYwo+ IEBAIC0zNDAsNyArMzQwLDYgQEAgc3RhdGljIGludCBtc21fZHJtX3VuaW5pdChzdHJ1Y3QgZGV2 aWNlICpkZXYpCj4gIAljb21wb25lbnRfdW5iaW5kX2FsbChkZXYsIGRkZXYpOwo+ICAKPiAgI2lm ZGVmIENPTkZJR19EUk1fTVNNX0RQVQo+IC0JZHB1X3Bvd2VyX3Jlc291cmNlX2RlaW5pdChwZGV2 LCAmcHJpdi0+cGhhbmRsZSk7Cj4gIAlkcHVfZGJnX2Rlc3Ryb3koKTsKPiAgI2VuZGlmCj4gIAo+ IEBAIC01MTksMTIgKzUxOCw2IEBAIHN0YXRpYyBpbnQgbXNtX2RybV9pbml0KHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IGRybV9kcml2ZXIgKmRydikKPiAgCWRybV9tb2RlX2NvbmZpZ19pbml0 KGRkZXYpOwo+ICAKPiAgI2lmZGVmIENPTkZJR19EUk1fTVNNX0RQVQo+IC0JcmV0ID0gZHB1X3Bv d2VyX3Jlc291cmNlX2luaXQocGRldiwgJnByaXYtPnBoYW5kbGUpOwo+IC0JaWYgKHJldCkgewo+ IC0JCXByX2VycigiZHB1IHBvd2VyIHJlc291cmNlIGluaXQgZmFpbGVkXG4iKTsKPiAtCQlnb3Rv IHBvd2VyX2luaXRfZmFpbDsKPiAtCX0KPiAtCj4gIAlyZXQgPSBkcHVfZGJnX2luaXQoJnBkZXYt PmRldik7Cj4gIAlpZiAocmV0KSB7Cj4gIAkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdCBk cHUgZGJnOiAlZFxuIiwgcmV0KTsKPiBAQCAtNzMzLDggKzcyNiw2IEBAIHN0YXRpYyBpbnQgbXNt X2RybV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRybV9kcml2ZXIgKmRydikKPiAg I2lmZGVmIENPTkZJR19EUk1fTVNNX0RQVQo+ICAJZHB1X2RiZ19kZXN0cm95KCk7Cj4gIGRiZ19p bml0X2ZhaWw6Cj4gLQlkcHVfcG93ZXJfcmVzb3VyY2VfZGVpbml0KHBkZXYsICZwcml2LT5waGFu ZGxlKTsKPiAtcG93ZXJfaW5pdF9mYWlsOgo+ICAjZW5kaWYKPiAgCWlmIChtZHNzICYmIG1kc3Mt PmZ1bmNzKQo+ICAJCW1kc3MtPmZ1bmNzLT5kZXN0cm95KGRkZXYpOwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Ry di5oCj4gaW5kZXggZjlhZTk2Zi4uMjdhNzNhOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL21zbV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCj4g QEAgLTQ2LDggKzQ2LDYgQEAKPiAgI2luY2x1ZGUgPGRybS9tc21fZHJtLmg+Cj4gICNpbmNsdWRl IDxkcm0vZHJtX2dlbS5oPgo+ICAKPiAtI2luY2x1ZGUgImRwdV9wb3dlcl9oYW5kbGUuaCIKPiAt Cj4gICNkZWZpbmUgR0VUX01BSk9SX1JFVihyZXYpCQkoKHJldikgPj4gMjgpCj4gICNkZWZpbmUg R0VUX01JTk9SX1JFVihyZXYpCQkoKChyZXYpID4+IDE2KSAmIDB4RkZGKQo+ICAjZGVmaW5lIEdF VF9TVEVQX1JFVihyZXYpCQkoKHJldikgJiAweEZGRkYpCj4gQEAgLTM3NSw4ICszNzMsNiBAQCBz dHJ1Y3QgbXNtX2RybV9wcml2YXRlIHsKPiAgCj4gIAlzdHJ1Y3QgbXNtX2ttcyAqa21zOwo+ICAK PiAtCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlIHBoYW5kbGU7Cj4gLQo+ICAJLyogc3Vib3JkaW5h dGUgZGV2aWNlcywgaWYgcHJlc2VudDogKi8KPiAgCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmdw dV9wZGV2Owo+ICAKPiAtLSAKPiBUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4g aXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAo+IGEgTGludXggRm91bmRhdGlv biBDb2xsYWJvcmF0aXZlIFByb2plY3QKPiAKCi0tIApTZWFuIFBhdWwsIFNvZnR3YXJlIEVuZ2lu ZWVyLCBHb29nbGUgLyBDaHJvbWl1bSBPUwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9mcmVlZHJlbm8K