From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sibi S Subject: Re: [PATCH 2/5] drm/msm/dsi: add implementation for helper functions Date: Tue, 13 Mar 2018 12:31:23 +0530 Message-ID: References: <1520860994-23334-1-git-send-email-sibis@codeaurora.org> <1520860994-23334-3-git-send-email-sibis@codeaurora.org> <1091cdf6-7322-17ad-f156-c65cfe7df87a@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1091cdf6-7322-17ad-f156-c65cfe7df87a-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Archit Taneja , robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org SGkgQXJjaGl0LApUaGFua3MgZm9yIHRoZSByZXZpZXcuCgpPbiAwMy8xMy8yMDE4IDEwOjQ5IEFN LCBBcmNoaXQgVGFuZWphIHdyb3RlOgo+IAo+IAo+IE9uIE1vbmRheSAxMiBNYXJjaCAyMDE4IDA2 OjUzIFBNLCBTaWJpIFMgd3JvdGU6Cj4+IEFkZCBkc2kgaG9zdCBoZWxwZXIgZnVuY3Rpb24gaW1w bGVtZW50YXRpb24gZm9yIERTSSB2Mgo+PiBhbmQgRFNJIDZHIDEueCBjb250cm9sbGVycwo+Pgo+ PiBTaWduZWQtb2ZmLWJ5OiBTaWJpIFMgPHNpYmlzQGNvZGVhdXJvcmEub3JnPgo+PiAtLS0KPj4g wqAgZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvZHNpLmjCoMKgwqDCoMKgIHzCoCAxNSArKysKPj4g wqAgZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvZHNpX2NmZy5jwqAgfMKgIDQ0ICsrKysrLS0KPj4g wqAgZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvZHNpX2hvc3QuYyB8IDI1MCAKPj4gKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrLQo+PiDCoCAzIGZpbGVzIGNoYW5nZWQsIDI5OCBp bnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZHNpL2RzaS5oIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL2RzaS5o Cj4+IGluZGV4IDgwYmU4M2UuLmRmYTA0OWQgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHNpL2RzaS5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL2RzaS5oCj4+ IEBAIC0xODMsNiArMTgzLDIxIEBAIGludCBtc21fZHNpX2hvc3RfbW9kZXNldF9pbml0KHN0cnVj dCAKPj4gbWlwaV9kc2lfaG9zdCAqaG9zdCwKPj4gwqAgaW50IG1zbV9kc2lfaG9zdF9pbml0KHN0 cnVjdCBtc21fZHNpICptc21fZHNpKTsKPj4gwqAgaW50IG1zbV9kc2lfcnVudGltZV9zdXNwZW5k KHN0cnVjdCBkZXZpY2UgKmRldik7Cj4+IMKgIGludCBtc21fZHNpX3J1bnRpbWVfcmVzdW1lKHN0 cnVjdCBkZXZpY2UgKmRldik7Cj4+ICtpbnQgZHNpX2xpbmtfY2xrX2VuYWJsZV82ZyhzdHJ1Y3Qg bXNtX2RzaV9ob3N0ICptc21faG9zdCk7Cj4+ICtpbnQgZHNpX2xpbmtfY2xrX2VuYWJsZV92Mihz dHJ1Y3QgbXNtX2RzaV9ob3N0ICptc21faG9zdCk7Cj4+ICt2b2lkIGRzaV9saW5rX2Nsa19kaXNh YmxlXzZnKHN0cnVjdCBtc21fZHNpX2hvc3QgKm1zbV9ob3N0KTsKPj4gK3ZvaWQgZHNpX2xpbmtf Y2xrX2Rpc2FibGVfdjIoc3RydWN0IG1zbV9kc2lfaG9zdCAqbXNtX2hvc3QpOwo+PiAraW50IGRz aV90eF9idWZfYWxsb2NfNmcoc3RydWN0IG1zbV9kc2lfaG9zdCAqbXNtX2hvc3QsIGludCBzaXpl KTsKPj4gK2ludCBkc2lfdHhfYnVmX2FsbG9jX3YyKHN0cnVjdCBtc21fZHNpX2hvc3QgKm1zbV9o b3N0LCBpbnQgc2l6ZSk7Cj4+ICt2b2lkICpkc2lfdHhfYnVmX2dldF82ZyhzdHJ1Y3QgbXNtX2Rz aV9ob3N0ICptc21faG9zdCk7Cj4+ICt2b2lkICpkc2lfdHhfYnVmX2dldF92MihzdHJ1Y3QgbXNt X2RzaV9ob3N0ICptc21faG9zdCk7Cj4+ICt2b2lkIGRzaV90eF9idWZfcHV0XzZnKHN0cnVjdCBt c21fZHNpX2hvc3QgKm1zbV9ob3N0KTsKPj4gK2ludCBkc2lfZG1hX2Jhc2VfZ2V0XzZnKHN0cnVj dCBtc21fZHNpX2hvc3QgKm1zbV9ob3N0LCB1aW50NjRfdCAqaW92YSk7Cj4+ICtpbnQgZHNpX2Rt YV9iYXNlX2dldF92MihzdHJ1Y3QgbXNtX2RzaV9ob3N0ICptc21faG9zdCwgdWludDY0X3QgKmlv dmEpOwo+PiAraW50IGRzaV9jbGtfaW5pdF92MihzdHJ1Y3QgbXNtX2RzaV9ob3N0ICptc21faG9z dCk7Cj4+ICtpbnQgZHNpX2Nsa19pbml0XzZnX3YyKHN0cnVjdCBtc21fZHNpX2hvc3QgKm1zbV9o b3N0KTsKPj4gK2ludCBkc2lfY2FsY19jbGtfcmF0ZV92MihzdHJ1Y3QgbXNtX2RzaV9ob3N0ICpt c21faG9zdCk7Cj4+ICtpbnQgZHNpX2NhbGNfY2xrX3JhdGVfNmcoc3RydWN0IG1zbV9kc2lfaG9z dCAqbXNtX2hvc3QpOwo+PiDCoCAvKiBkc2kgcGh5ICovCj4+IMKgIHN0cnVjdCBtc21fZHNpX3Bo eTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL2RzaV9jZmcuYyAKPj4g Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9kc2lfY2ZnLmMKPj4gaW5kZXggMDMyN2JiNS4uZGM1 MWFhYSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvZHNpX2NmZy5jCj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL2RzaV9jZmcuYwo+PiBAQCAtMTM2LDIwICsx MzYsNDYgQEAKPj4gwqDCoMKgwqDCoCAubnVtX2RzaSA9IDIsCj4+IMKgIH07Cj4+ICtjb25zdCBz dGF0aWMgc3RydWN0IG1zbV9kc2lfaG9zdF9jZmdfb3BzIG1zbV9kc2lfdjJfaG9zdF9vcHMgPSB7 Cj4+ICvCoMKgwqAgLmxpbmtfY2xrX2VuYWJsZSA9IGRzaV9saW5rX2Nsa19lbmFibGVfdjIsCj4+ ICvCoMKgwqAgLmxpbmtfY2xrX2Rpc2FibGUgPSBkc2lfbGlua19jbGtfZGlzYWJsZV92MiwKPj4g K8KgwqDCoCAuY2xrX2luaXRfdmVyID0gZHNpX2Nsa19pbml0X3YyLAo+PiArwqDCoMKgIC50eF9i dWZfYWxsb2MgPSBkc2lfdHhfYnVmX2FsbG9jX3YyLAo+PiArwqDCoMKgIC50eF9idWZfZ2V0ID0g ZHNpX3R4X2J1Zl9nZXRfdjIsCj4+ICvCoMKgwqAgLnR4X2J1Zl9wdXQgPSBOVUxMLAo+PiArwqDC oMKgIC5kbWFfYmFzZV9nZXQgPSBkc2lfZG1hX2Jhc2VfZ2V0X3YyLAo+PiArwqDCoMKgIC5jYWxj X2Nsa19yYXRlID0gZHNpX2NhbGNfY2xrX3JhdGVfdjIsCj4+ICt9Owo+PiArCj4+ICtjb25zdCBz dGF0aWMgc3RydWN0IG1zbV9kc2lfaG9zdF9jZmdfb3BzIG1zbV9kc2lfNmdfaG9zdF9vcHMgPSB7 Cj4+ICvCoMKgwqAgLmxpbmtfY2xrX2VuYWJsZSA9IGRzaV9saW5rX2Nsa19lbmFibGVfNmcsCj4+ ICvCoMKgwqAgLmxpbmtfY2xrX2Rpc2FibGUgPSBkc2lfbGlua19jbGtfZGlzYWJsZV82ZywKPj4g K8KgwqDCoCAuY2xrX2luaXRfdmVyID0gTlVMTCwKPj4gK8KgwqDCoCAudHhfYnVmX2FsbG9jID0g ZHNpX3R4X2J1Zl9hbGxvY182ZywKPj4gK8KgwqDCoCAudHhfYnVmX2dldCA9IGRzaV90eF9idWZf Z2V0XzZnLAo+PiArwqDCoMKgIC50eF9idWZfcHV0ID0gZHNpX3R4X2J1Zl9wdXRfNmcsCj4+ICvC oMKgwqAgLmRtYV9iYXNlX2dldCA9IGRzaV9kbWFfYmFzZV9nZXRfNmcsCj4+ICvCoMKgwqAgLmNh bGNfY2xrX3JhdGUgPSBkc2lfY2FsY19jbGtfcmF0ZV82ZywKPj4gK307Cj4gCj4gQ291bGQgeW91 IGludHJvZHVjZSB0aGUgaG9zdCBvcHMgZm9yIFNETTg0NSAoaS5lLAo+IG1zbV9kc2lfNmdfdjJf aG9zdF9vcHMpIGluIHRoaXMgcGF0Y2ggaXRzZWxmPyBJdCB3b3VsZCBiZSBuaWNlIHRvCj4ga2Vl cCB0aGUgRFNJIGNvbW1hbmQgYnJvYWRjYXN0IGNvZGUgYXMgYSBzZXBhcmF0ZSBwYXRjaCBzaW5j ZSBpdAo+IHByb2JhYmx5IG5lZWRzIHRvIGdvIHRocm91Z2ggbW9yZSBpdGVyYXRpb25zLgo+IAo+ IFRoZSBvcHMgYXBwcm9hY2ggbG9va3MgZ29vZCBvdGhlcndpc2UuCj4gCj4gVGhhbmtzLAo+IEFy Y2hpdAo+IAoKU3VyZSBJJ2xsIHJlLW9yZGVyIHRoZW0gYW5kIHByb2JhYmx5IHNob3VsZCBzZXBh cmF0ZWx5IHBvc3QKc2VwYXJhdGUgcGF0Y2ggc2VyaWVzIGZvciBjb21tYW5kIGJyb2FkY2FzdCBv biBzZG04NDUuCgo+PiDCoCBzdGF0aWMgY29uc3Qgc3RydWN0IG1zbV9kc2lfY2ZnX2hhbmRsZXIg ZHNpX2NmZ19oYW5kbGVyc1tdID0gewo+PiAtwqDCoMKgIHtNU01fRFNJX1ZFUl9NQUpPUl9WMiwg TVNNX0RTSV9WMl9WRVJfTUlOT1JfODA2NCwgJmFwcTgwNjRfZHNpX2NmZ30sCj4+ICvCoMKgwqAg e01TTV9EU0lfVkVSX01BSk9SX1YyLCBNU01fRFNJX1YyX1ZFUl9NSU5PUl84MDY0LAo+PiArwqDC oMKgwqDCoMKgwqAgJmFwcTgwNjRfZHNpX2NmZywgJm1zbV9kc2lfdjJfaG9zdF9vcHN9LAo+PiDC oMKgwqDCoMKgIHtNU01fRFNJX1ZFUl9NQUpPUl82RywgTVNNX0RTSV82R19WRVJfTUlOT1JfVjFf MCwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJm1z bTg5NzRfYXBxODA4NF9kc2lfY2ZnfSwKPj4gK8KgwqDCoMKgwqDCoMKgICZtc204OTc0X2FwcTgw ODRfZHNpX2NmZywgJm1zbV9kc2lfNmdfaG9zdF9vcHN9LAo+PiDCoMKgwqDCoMKgIHtNU01fRFNJ X1ZFUl9NQUpPUl82RywgTVNNX0RTSV82R19WRVJfTUlOT1JfVjFfMSwKPj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJm1zbTg5NzRfYXBxODA4NF9kc2lf Y2ZnfSwKPj4gK8KgwqDCoMKgwqDCoMKgICZtc204OTc0X2FwcTgwODRfZHNpX2NmZywgJm1zbV9k c2lfNmdfaG9zdF9vcHN9LAo+PiDCoMKgwqDCoMKgIHtNU01fRFNJX1ZFUl9NQUpPUl82RywgTVNN X0RTSV82R19WRVJfTUlOT1JfVjFfMV8xLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAmbXNtODk3NF9hcHE4MDg0X2RzaV9jZmd9LAo+PiArwqDCoMKg wqDCoMKgwqAgJm1zbTg5NzRfYXBxODA4NF9kc2lfY2ZnLCAmbXNtX2RzaV82Z19ob3N0X29wc30s Cj4+IMKgwqDCoMKgwqAge01TTV9EU0lfVkVSX01BSk9SXzZHLCBNU01fRFNJXzZHX1ZFUl9NSU5P Ul9WMV8yLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAmbXNtODk3NF9hcHE4MDg0X2RzaV9jZmd9LAo+PiAtwqDCoMKgIHtNU01fRFNJX1ZFUl9NQUpP Ul82RywgTVNNX0RTSV82R19WRVJfTUlOT1JfVjFfMywgJm1zbTg5OTRfZHNpX2NmZ30sCj4+IC3C oMKgwqAge01TTV9EU0lfVkVSX01BSk9SXzZHLCBNU01fRFNJXzZHX1ZFUl9NSU5PUl9WMV8zXzEs IAo+PiAmbXNtODkxNl9kc2lfY2ZnfSwKPj4gLcKgwqDCoCB7TVNNX0RTSV9WRVJfTUFKT1JfNkcs IE1TTV9EU0lfNkdfVkVSX01JTk9SX1YxXzRfMSwgCj4+ICZtc204OTk2X2RzaV9jZmd9LAo+PiAt wqDCoMKgIHtNU01fRFNJX1ZFUl9NQUpPUl82RywgTVNNX0RTSV82R19WRVJfTUlOT1JfVjJfMl8x LCAKPj4gJnNkbTg0NV9kc2lfY2ZnfSwKPj4gK8KgwqDCoMKgwqDCoMKgICZtc204OTc0X2FwcTgw ODRfZHNpX2NmZywgJm1zbV9kc2lfNmdfaG9zdF9vcHN9LAo+PiArwqDCoMKgIHtNU01fRFNJX1ZF Ul9NQUpPUl82RywgTVNNX0RTSV82R19WRVJfTUlOT1JfVjFfMywKPj4gK8KgwqDCoMKgwqDCoMKg ICZtc204OTk0X2RzaV9jZmcsICZtc21fZHNpXzZnX2hvc3Rfb3BzfSwKPj4gK8KgwqDCoCB7TVNN X0RTSV9WRVJfTUFKT1JfNkcsIE1TTV9EU0lfNkdfVkVSX01JTk9SX1YxXzNfMSwKPj4gK8KgwqDC oMKgwqDCoMKgICZtc204OTE2X2RzaV9jZmcsICZtc21fZHNpXzZnX2hvc3Rfb3BzfSwKPj4gK8Kg wqDCoCB7TVNNX0RTSV9WRVJfTUFKT1JfNkcsIE1TTV9EU0lfNkdfVkVSX01JTk9SX1YxXzRfMSwK Pj4gK8KgwqDCoMKgwqDCoMKgICZtc204OTk2X2RzaV9jZmcsICZtc21fZHNpXzZnX2hvc3Rfb3Bz fSwKPj4gK8KgwqDCoCB7TVNNX0RTSV9WRVJfTUFKT1JfNkcsIE1TTV9EU0lfNkdfVkVSX01JTk9S X1YyXzJfMSwKPj4gK8KgwqDCoMKgwqDCoMKgICZzZG04NDVfZHNpX2NmZywgJm1zbV9kc2lfNmdf aG9zdF9vcHN9LAo+PiDCoCB9Owo+PiDCoCBjb25zdCBzdHJ1Y3QgbXNtX2RzaV9jZmdfaGFuZGxl ciAqbXNtX2RzaV9jZmdfZ2V0KHUzMiBtYWpvciwgdTMyIG1pbm9yKQo+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvZHNpX2hvc3QuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2RzaS9kc2lfaG9zdC5jCj4+IGluZGV4IDdhMDNhOTQuLmY3YTA2NmQgMTAwNjQ0Cj4+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpL2RzaV9ob3N0LmMKPj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kc2kvZHNpX2hvc3QuYwo+PiBAQCAtMzMxLDYgKzMzMSw1NCBAQCBzdGF0aWMg aW50IGRzaV9yZWd1bGF0b3JfaW5pdChzdHJ1Y3QgbXNtX2RzaV9ob3N0IAo+PiAqbXNtX2hvc3Qp Cj4+IMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+IMKgIH0KPj4gK2ludCBkc2lfY2xrX2luaXRfdjIo c3RydWN0IG1zbV9kc2lfaG9zdCAqbXNtX2hvc3QpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldiA9IG1zbV9ob3N0LT5wZGV2Owo+PiArwqDCoMKgIGludCByZXQg PSAwOwo+PiArCj4+ICvCoMKgwqAgbXNtX2hvc3QtPnNyY19jbGsgPSBtc21fY2xrX2dldChwZGV2 LCAic3JjIik7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoSVNfRVJSKG1zbV9ob3N0LT5zcmNfY2xrKSkg ewo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gUFRSX0VSUihtc21faG9zdC0+c3JjX2Nsayk7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBwcl9lcnIoIiVzOiBjYW4ndCBmaW5kIHNyYyBjbG9jay4gcmV0PSVk XG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgcmV0KTsKPj4gK8KgwqDC oMKgwqDCoMKgIG1zbV9ob3N0LT5zcmNfY2xrID0gTlVMTDsKPj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiByZXQ7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgbXNtX2hvc3QtPmVzY19jbGtf c3JjID0gY2xrX2dldF9wYXJlbnQobXNtX2hvc3QtPmVzY19jbGspOwo+PiArwqDCoMKgIGlmICgh bXNtX2hvc3QtPmVzY19jbGtfc3JjKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSAtRU5PREVW Owo+PiArwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCIlczogY2FuJ3QgZ2V0IGVzYyBjbG9jayBwYXJl bnQuIHJldD0lZFxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18sIHJldCk7 Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDC oMKgIG1zbV9ob3N0LT5kc2lfY2xrX3NyYyA9IGNsa19nZXRfcGFyZW50KG1zbV9ob3N0LT5zcmNf Y2xrKTsKPj4gK8KgwqDCoCBpZiAoIW1zbV9ob3N0LT5kc2lfY2xrX3NyYykgewo+PiArwqDCoMKg wqDCoMKgwqAgcmV0ID0gLUVOT0RFVjsKPj4gK8KgwqDCoMKgwqDCoMKgIHByX2VycigiJXM6IGNh bid0IGdldCBzcmMgY2xvY2sgcGFyZW50LiByZXQ9JWRcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIF9fZnVuY19fLCByZXQpOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHJldHVy biByZXQ7Cj4+ICt9Cj4+ICsKPj4gK2ludCBkc2lfY2xrX2luaXRfNmdfdjIoc3RydWN0IG1zbV9k c2lfaG9zdCAqbXNtX2hvc3QpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldiA9IG1zbV9ob3N0LT5wZGV2Owo+PiArwqDCoMKgIGludCByZXQgPSAwOwo+PiArCj4+ ICvCoMKgwqAgbXNtX2hvc3QtPmJ5dGVfaW50Zl9jbGsgPSBtc21fY2xrX2dldChwZGV2LCAiYnl0 ZV9pbnRmIik7Cj4+ICvCoMKgwqAgaWYgKElTX0VSUihtc21faG9zdC0+Ynl0ZV9pbnRmX2Nsaykp IHsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IFBUUl9FUlIobXNtX2hvc3QtPmJ5dGVfaW50Zl9j bGspOwo+PiArwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCIlczogY2FuJ3QgZmluZCBieXRlX2ludGYg Y2xvY2suIHJldD0lZFxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18sIHJl dCk7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+ PiDCoCBzdGF0aWMgaW50IGRzaV9jbGtfaW5pdChzdHJ1Y3QgbXNtX2RzaV9ob3N0ICptc21faG9z dCkKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBt c21faG9zdC0+cGRldjsKPj4gQEAgLTQ5Nyw3ICs1NDUsNyBAQCBpbnQgbXNtX2RzaV9ydW50aW1l X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+IMKgwqDCoMKgwqAgcmV0dXJuIGRzaV9idXNf Y2xrX2VuYWJsZShtc21faG9zdCk7Cj4+IMKgIH0KPj4gLXN0YXRpYyBpbnQgZHNpX2xpbmtfY2xr X2VuYWJsZV82ZyhzdHJ1Y3QgbXNtX2RzaV9ob3N0ICptc21faG9zdCkKPj4gK2ludCBkc2lfbGlu a19jbGtfZW5hYmxlXzZnKHN0cnVjdCBtc21fZHNpX2hvc3QgKm1zbV9ob3N0KQo+PiDCoCB7Cj4+ IMKgwqDCoMKgwqAgaW50IHJldDsKPj4gQEAgLTU2NSw3ICs2MTMsNyBAQCBzdGF0aWMgaW50IGRz aV9saW5rX2Nsa19lbmFibGVfNmcoc3RydWN0IAo+PiBtc21fZHNpX2hvc3QgKm1zbV9ob3N0KQo+ PiDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+IMKgIH0KPj4gLXN0YXRpYyBpbnQgZHNpX2xpbmtf Y2xrX2VuYWJsZV92MihzdHJ1Y3QgbXNtX2RzaV9ob3N0ICptc21faG9zdCkKPj4gK2ludCBkc2lf bGlua19jbGtfZW5hYmxlX3YyKHN0cnVjdCBtc21fZHNpX2hvc3QgKm1zbV9ob3N0KQo+PiDCoCB7 Cj4+IMKgwqDCoMKgwqAgaW50IHJldDsKPj4gQEAgLTY0Myw2ICs2OTEsMjMgQEAgc3RhdGljIGlu dCBkc2lfbGlua19jbGtfZW5hYmxlKHN0cnVjdCAKPj4gbXNtX2RzaV9ob3N0ICptc21faG9zdCkK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBkc2lfbGlua19jbGtfZW5hYmxlX3YyKG1zbV9o b3N0KTsKPj4gwqAgfQo+PiArdm9pZCBkc2lfbGlua19jbGtfZGlzYWJsZV82ZyhzdHJ1Y3QgbXNt X2RzaV9ob3N0ICptc21faG9zdCkKPj4gK3sKPj4gK8KgwqDCoCBjbGtfZGlzYWJsZV91bnByZXBh cmUobXNtX2hvc3QtPmVzY19jbGspOwo+PiArwqDCoMKgIGNsa19kaXNhYmxlX3VucHJlcGFyZSht c21faG9zdC0+cGl4ZWxfY2xrKTsKPj4gK8KgwqDCoCBpZiAobXNtX2hvc3QtPmJ5dGVfaW50Zl9j bGspCj4+ICvCoMKgwqDCoMKgwqDCoCBjbGtfZGlzYWJsZV91bnByZXBhcmUobXNtX2hvc3QtPmJ5 dGVfaW50Zl9jbGspOwo+PiArwqDCoMKgIGNsa19kaXNhYmxlX3VucHJlcGFyZShtc21faG9zdC0+ Ynl0ZV9jbGspOwo+PiArfQo+PiArCj4+ICt2b2lkIGRzaV9saW5rX2Nsa19kaXNhYmxlX3YyKHN0 cnVjdCBtc21fZHNpX2hvc3QgKm1zbV9ob3N0KQo+PiArewo+PiArwqDCoMKgIGNsa19kaXNhYmxl X3VucHJlcGFyZShtc21faG9zdC0+cGl4ZWxfY2xrKTsKPj4gK8KgwqDCoCBjbGtfZGlzYWJsZV91 bnByZXBhcmUobXNtX2hvc3QtPnNyY19jbGspOwo+PiArwqDCoMKgIGNsa19kaXNhYmxlX3VucHJl cGFyZShtc21faG9zdC0+ZXNjX2Nsayk7Cj4+ICvCoMKgwqAgY2xrX2Rpc2FibGVfdW5wcmVwYXJl KG1zbV9ob3N0LT5ieXRlX2Nsayk7Cj4+ICt9Cj4+ICsKPj4gwqAgc3RhdGljIHZvaWQgZHNpX2xp bmtfY2xrX2Rpc2FibGUoc3RydWN0IG1zbV9kc2lfaG9zdCAqbXNtX2hvc3QpCj4+IMKgIHsKPj4g wqDCoMKgwqDCoCBjb25zdCBzdHJ1Y3QgbXNtX2RzaV9jZmdfaGFuZGxlciAqY2ZnX2huZCA9IG1z bV9ob3N0LT5jZmdfaG5kOwo+PiBAQCAtNjYxLDYgKzcyNiw5NCBAQCBzdGF0aWMgdm9pZCBkc2lf bGlua19jbGtfZGlzYWJsZShzdHJ1Y3QgCj4+IG1zbV9kc2lfaG9zdCAqbXNtX2hvc3QpCj4+IMKg wqDCoMKgwqAgfQo+PiDCoCB9Cj4+ICtpbnQgZHNpX2NhbGNfY2xrX3JhdGVfNmcoc3RydWN0IG1z bV9kc2lfaG9zdCAqbXNtX2hvc3QpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGUgPSBtc21faG9zdC0+bW9kZTsKPj4gK8KgwqDCoCB1OCBsYW5lcyA9IG1zbV9o b3N0LT5sYW5lczsKPj4gK8KgwqDCoCB1MzIgYnBwID0gZHNpX2dldF9icHAobXNtX2hvc3QtPmZv cm1hdCk7Cj4+ICvCoMKgwqAgdTMyIHBjbGtfcmF0ZTsKPj4gKwo+PiArwqDCoMKgIGlmICghbW9k ZSkgewo+PiArwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCIlczogbW9kZSBub3Qgc2V0XG4iLCBfX2Z1 bmNfXyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gK8KgwqDCoCB9Cj4+ ICsKPj4gK8KgwqDCoCBwY2xrX3JhdGUgPSBtb2RlLT5jbG9jayAqIDEwMDA7Cj4+ICvCoMKgwqAg aWYgKGxhbmVzID4gMCkgewo+PiArwqDCoMKgwqDCoMKgwqAgbXNtX2hvc3QtPmJ5dGVfY2xrX3Jh dGUgPSAocGNsa19yYXRlICogYnBwKSAvICg4ICogbGFuZXMpOwo+PiArwqDCoMKgIH0gZWxzZSB7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBwcl9lcnIoIiVzOiBmb3JjaW5nIG1kc3NfZHNpIGxhbmVzIHRv IDFcbiIsIF9fZnVuY19fKTsKPj4gK8KgwqDCoMKgwqDCoMKgIG1zbV9ob3N0LT5ieXRlX2Nsa19y YXRlID0gKHBjbGtfcmF0ZSAqIGJwcCkgLyA4Owo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKg IERCRygicGNsaz0lZCwgYmNsaz0lZCIsIHBjbGtfcmF0ZSwgbXNtX2hvc3QtPmJ5dGVfY2xrX3Jh dGUpOwo+PiArCj4+ICvCoMKgwqAgbXNtX2hvc3QtPmVzY19jbGtfcmF0ZSA9IGNsa19nZXRfcmF0 ZShtc21faG9zdC0+ZXNjX2Nsayk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4g Kwo+PiAraW50IGRzaV9jYWxjX2Nsa19yYXRlX3YyKHN0cnVjdCBtc21fZHNpX2hvc3QgKm1zbV9o b3N0KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gbXNt X2hvc3QtPm1vZGU7Cj4+ICvCoMKgwqAgdTggbGFuZXMgPSBtc21faG9zdC0+bGFuZXM7Cj4+ICvC oMKgwqAgdTMyIGJwcCA9IGRzaV9nZXRfYnBwKG1zbV9ob3N0LT5mb3JtYXQpOwo+PiArwqDCoMKg IHUzMiBwY2xrX3JhdGU7Cj4+ICvCoMKgwqAgdW5zaWduZWQgaW50IGVzY19taHosIGVzY19kaXY7 Cj4+ICvCoMKgwqAgdW5zaWduZWQgbG9uZyBieXRlX21oejsKPj4gKwo+PiArwqDCoMKgIGlmICgh bW9kZSkgewo+PiArwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCIlczogbW9kZSBub3Qgc2V0XG4iLCBf X2Z1bmNfXyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gK8KgwqDCoCB9 Cj4+ICsKPj4gK8KgwqDCoCBwY2xrX3JhdGUgPSBtb2RlLT5jbG9jayAqIDEwMDA7Cj4+ICvCoMKg wqAgaWYgKGxhbmVzID4gMCkgewo+PiArwqDCoMKgwqDCoMKgwqAgbXNtX2hvc3QtPmJ5dGVfY2xr X3JhdGUgPSAocGNsa19yYXRlICogYnBwKSAvICg4ICogbGFuZXMpOwo+PiArwqDCoMKgIH0gZWxz ZSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBwcl9lcnIoIiVzOiBmb3JjaW5nIG1kc3NfZHNpIGxhbmVz IHRvIDFcbiIsIF9fZnVuY19fKTsKPj4gK8KgwqDCoMKgwqDCoMKgIG1zbV9ob3N0LT5ieXRlX2Ns a19yYXRlID0gKHBjbGtfcmF0ZSAqIGJwcCkgLyA4Owo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDC oMKgIERCRygicGNsaz0lZCwgYmNsaz0lZCIsIHBjbGtfcmF0ZSwgbXNtX2hvc3QtPmJ5dGVfY2xr X3JhdGUpOwo+PiArCj4+ICvCoMKgwqAgbXNtX2hvc3QtPnNyY19jbGtfcmF0ZSA9IChwY2xrX3Jh dGUgKiBicHApIC8gODsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIGVzYyBjbG9j ayBpcyBieXRlIGNsb2NrIGZvbGxvd2VkIGJ5IGEgNCBiaXQgZGl2aWRlciwKPj4gK8KgwqDCoMKg ICogd2UgbmVlZCB0byBmaW5kIGFuIGVzY2FwZSBjbG9jayBmcmVxdWVuY3kgd2l0aGluIHRoZQo+ PiArwqDCoMKgwqAgKiBtaXBpIERTSSBzcGVjIHJhbmdlIHdpdGhpbiB0aGUgbWF4aW11bSBkaXZp ZGVyIGxpbWl0Cj4+ICvCoMKgwqDCoCAqIFdlIGl0ZXJhdGUgaGVyZSBiZXR3ZWVuIGFuIGVzY2Fw ZSBjbG9jayBmcmVxdWVuY2V5Cj4+ICvCoMKgwqDCoCAqIGJldHdlZW4gMjAgTWh6IHRvIDUgTWh6 IGFuZCBwaWNrIHVwIHRoZSBmaXJzdCBvbmUKPj4gK8KgwqDCoMKgICogdGhhdCBjYW4gYmUgc3Vw cG9ydGVkIGJ5IG91ciBkaXZpZGVyCj4+ICvCoMKgwqDCoCAqLwo+PiArCj4+ICvCoMKgwqAgYnl0 ZV9taHogPSBtc21faG9zdC0+Ynl0ZV9jbGtfcmF0ZSAvIDEwMDAwMDA7Cj4+ICsKPj4gK8KgwqDC oCBmb3IgKGVzY19taHogPSAyMDsgZXNjX21oeiA+PSA1OyBlc2NfbWh6LS0pIHsKPj4gK8KgwqDC oMKgwqDCoMKgIGVzY19kaXYgPSBESVZfUk9VTkRfVVAoYnl0ZV9taHosIGVzY19taHopOwo+PiAr Cj4+ICvCoMKgwqDCoMKgwqDCoCAvKgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIFRPRE86IElkZWFs bHksIHdlIHNob3VsZG4ndCBrbm93IHdoYXQgc29ydCBvZiBkaXZpZGVyCj4+ICvCoMKgwqDCoMKg wqDCoMKgICogaXMgYXZhaWxhYmxlIGluIG1tc3NfY2MsIHdlJ3JlIGp1c3QgYXNzdW1pbmcgdGhh dAo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIGl0J2xsIGFsd2F5cyBiZSBhIDQgYml0IGRpdmlkZXIu IE5lZWQgdG8gY29tZSB1cCB3aXRoCj4+ICvCoMKgwqDCoMKgwqDCoMKgICogYSBiZXR0ZXIgd2F5 IGhlcmUuCj4+ICvCoMKgwqDCoMKgwqDCoMKgICovCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZXNj X2RpdiA+PSAxICYmIGVzY19kaXYgPD0gMTYpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJy ZWFrOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGlmIChlc2NfbWh6IDwgNSkKPj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+PiArCj4+ICvCoMKgwqAgbXNtX2hvc3QtPmVz Y19jbGtfcmF0ZSA9IG1zbV9ob3N0LT5ieXRlX2Nsa19yYXRlIC8gZXNjX2RpdjsKPj4gKwo+PiAr wqDCoMKgIERCRygiZXNjPSVkLCBzcmM9JWQiLCBtc21faG9zdC0+ZXNjX2Nsa19yYXRlLAo+PiAr wqDCoMKgwqDCoMKgwqAgbXNtX2hvc3QtPnNyY19jbGtfcmF0ZSk7Cj4+ICsKPj4gK8KgwqDCoCBy ZXR1cm4gMDsKPj4gK30KPj4gKwo+PiDCoCBzdGF0aWMgaW50IGRzaV9jYWxjX2Nsa19yYXRlKHN0 cnVjdCBtc21fZHNpX2hvc3QgKm1zbV9ob3N0KQo+PiDCoCB7Cj4+IMKgwqDCoMKgwqAgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBtc21faG9zdC0+bW9kZTsKPj4gQEAgLTEwMDgsNiAr MTE2MSw1OSBAQCBzdGF0aWMgdm9pZCBkc2lfd2FpdDR2aWRlb19lbmdfYnVzeShzdHJ1Y3QgCj4+ IG1zbV9kc2lfaG9zdCAqbXNtX2hvc3QpCj4+IMKgwqDCoMKgwqAgfQo+PiDCoCB9Cj4+ICtpbnQg ZHNpX3R4X2J1Zl9hbGxvY182ZyhzdHJ1Y3QgbXNtX2RzaV9ob3N0ICptc21faG9zdCwgaW50IHNp emUpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1zbV9ob3N0LT5k ZXY7Cj4+ICvCoMKgwqAgc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7Cj4+ICvCoMKgwqAgaW50IHJldDsKPj4gK8KgwqDCoCB1aW50NjRfdCBpb3ZhOwo+PiAr Cj4+ICvCoMKgwqAgbXNtX2hvc3QtPnR4X2dlbV9vYmogPSBtc21fZ2VtX25ldyhkZXYsIHNpemUs IE1TTV9CT19VTkNBQ0hFRCk7Cj4+ICvCoMKgwqAgaWYgKElTX0VSUihtc21faG9zdC0+dHhfZ2Vt X29iaikpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IFBUUl9FUlIobXNtX2hvc3QtPnR4X2dl bV9vYmopOwo+PiArwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCIlczogZmFpbGVkIHRvIGFsbG9jYXRl IGdlbSwgJWRcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLCByZXQpOwo+ PiArwqDCoMKgwqDCoMKgwqAgbXNtX2hvc3QtPnR4X2dlbV9vYmogPSBOVUxMOwo+PiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBt c21fZ2VtX2dldF9pb3ZhKG1zbV9ob3N0LT50eF9nZW1fb2JqLAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBwcml2LT5rbXMtPmFzcGFjZSwgJmlvdmEpOwo+PiArwqDCoMKgIG11dGV4X3VubG9j aygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+PiArwqDCoMKgIGlmIChyZXQpIHsKPj4gK8KgwqDCoMKg wqDCoMKgIHByX2VycigiJXM6IGZhaWxlZCB0byBnZXQgaW92YSwgJWRcbiIsIF9fZnVuY19fLCBy ZXQpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4g K8KgwqDCoCBpZiAoaW92YSAmIDB4MDcpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHByX2VycigiJXM6 IGJ1ZiBOT1QgOCBieXRlcyBhbGlnbmVkXG4iLCBfX2Z1bmNfXyk7Cj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gLUVJTlZBTDsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBtc21faG9zdC0+ dHhfc2l6ZSA9IG1zbV9ob3N0LT50eF9nZW1fb2JqLT5zaXplOwo+PiArCj4+ICvCoMKgwqAgcmV0 dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK2ludCBkc2lfdHhfYnVmX2FsbG9jX3YyKHN0cnVjdCBtc21f ZHNpX2hvc3QgKm1zbV9ob3N0LCBpbnQgc2l6ZSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gbXNtX2hvc3QtPmRldjsKPj4gK8KgwqDCoCBpbnQgcmV0Owo+PiArCj4+ ICvCoMKgwqAgbXNtX2hvc3QtPnR4X2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYtPmRldiwg c2l6ZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZtc21faG9z dC0+dHhfYnVmX3BhZGRyLCBHRlBfS0VSTkVMKTsKPj4gK8KgwqDCoCBpZiAoIW1zbV9ob3N0LT50 eF9idWYpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IC1FTk9NRU07Cj4+ICvCoMKgwqDCoMKg wqDCoCBwcl9lcnIoIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgdHggYnVmLCAlZFxuIiwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18sIHJldCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gcmV0Owo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIG1zbV9ob3N0LT50eF9zaXpl ID0gc2l6ZTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+IMKgIC8qIGRz aV9jbWQgKi8KPj4gwqAgc3RhdGljIGludCBkc2lfdHhfYnVmX2FsbG9jKHN0cnVjdCBtc21fZHNp X2hvc3QgKm1zbV9ob3N0LCBpbnQgc2l6ZSkKPj4gwqAgewo+PiBAQCAtMTA3Miw2ICsxMjc4LDIx IEBAIHN0YXRpYyB2b2lkIGRzaV90eF9idWZfZnJlZShzdHJ1Y3QgbXNtX2RzaV9ob3N0IAo+PiAq bXNtX2hvc3QpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1zbV9ob3N0LT50eF9idWZf cGFkZHIpOwo+PiDCoCB9Cj4+ICt2b2lkICpkc2lfdHhfYnVmX2dldF82ZyhzdHJ1Y3QgbXNtX2Rz aV9ob3N0ICptc21faG9zdCkKPj4gK3sKPj4gK8KgwqDCoCByZXR1cm4gbXNtX2dlbV9nZXRfdmFk ZHIobXNtX2hvc3QtPnR4X2dlbV9vYmopOwo+PiArfQo+PiArCj4+ICt2b2lkICpkc2lfdHhfYnVm X2dldF92MihzdHJ1Y3QgbXNtX2RzaV9ob3N0ICptc21faG9zdCkKPj4gK3sKPj4gK8KgwqDCoCBy ZXR1cm4gbXNtX2hvc3QtPnR4X2J1ZjsKPj4gK30KPj4gKwo+PiArdm9pZCBkc2lfdHhfYnVmX3B1 dF82ZyhzdHJ1Y3QgbXNtX2RzaV9ob3N0ICptc21faG9zdCkKPj4gK3sKPj4gK8KgwqDCoCBtc21f Z2VtX3B1dF92YWRkcihtc21faG9zdC0+dHhfZ2VtX29iaik7Cj4+ICt9Cj4+ICsKPj4gwqAgLyoK Pj4gwqDCoCAqIHByZXBhcmUgY21kIGJ1ZmZlciB0byBiZSB0eGVkCj4+IMKgwqAgKi8KPj4gQEAg LTExNzMsNiArMTM5NCwzMSBAQCBzdGF0aWMgaW50IGRzaV9sb25nX3JlYWRfcmVzcCh1OCAqYnVm LCBjb25zdCAKPj4gc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQo+PiDCoMKgwqDCoMKgIHJldHVy biBtc2ctPnJ4X2xlbjsKPj4gwqAgfQo+PiAraW50IGRzaV9kbWFfYmFzZV9nZXRfNmcoc3RydWN0 IG1zbV9kc2lfaG9zdCAqbXNtX2hvc3QsIHVpbnQ2NF90IAo+PiAqZG1hX2Jhc2UpCj4+ICt7Cj4+ ICvCoMKgwqAgc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1zbV9ob3N0LT5kZXY7Cj4+ICvCoMKg wqAgc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4+ICvC oMKgwqAgdWludDY0X3QgKippb3ZhOwo+PiArwqDCoMKgIGludCByZXQ7Cj4+ICsKPj4gK8KgwqDC oCBpZiAoIWRtYV9iYXNlKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsK Pj4gK8KgwqDCoCBpb3ZhID0gJmRtYV9iYXNlOwo+PiArwqDCoMKgIHJldCA9IG1zbV9nZW1fZ2V0 X2lvdmEobXNtX2hvc3QtPnR4X2dlbV9vYmosCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcHJpdi0+a21zLT5hc3BhY2UsICppb3ZhKTsKPj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+ PiArfQo+PiArCj4+ICtpbnQgZHNpX2RtYV9iYXNlX2dldF92MihzdHJ1Y3QgbXNtX2RzaV9ob3N0 ICptc21faG9zdCwgdWludDY0X3QgCj4+ICpkbWFfYmFzZSkKPj4gK3sKPj4gK8KgwqDCoCBpZiAo IWRtYV9iYXNlKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gK8Kg wqDCoCAqZG1hX2Jhc2UgPSBtc21faG9zdC0+dHhfYnVmX3BhZGRyOwo+PiArwqDCoMKgIHJldHVy biAwOwo+PiArfQo+PiArCj4+IMKgIHN0YXRpYyBpbnQgZHNpX2NtZF9kbWFfdHgoc3RydWN0IG1z bV9kc2lfaG9zdCAqbXNtX2hvc3QsIGludCBsZW4pCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBjb25z dCBzdHJ1Y3QgbXNtX2RzaV9jZmdfaGFuZGxlciAqY2ZnX2huZCA9IG1zbV9ob3N0LT5jZmdfaG5k Owo+Pgo+IAoKLS0gClF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuClF1YWxjb21tIElu bm92YXRpb24gQ2VudGVyLCBJbmMsIGlzIGEgbWVtYmVyIG9mIENvZGUgQXVyb3JhIEZvcnVtLAph IExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0Cl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJl ZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=