From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH] drm/i915: Remove support for legacy debugfs crc interface Date: Thu, 02 Nov 2017 17:19:07 +0200 Message-ID: <87inesd7ys.fsf@intel.com> References: <20171102135651.9329-1-maarten.lankhorst@linux.intel.com> <20171102142712.GO10981@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id ECA906E938 for ; Thu, 2 Nov 2017 15:17:43 +0000 (UTC) In-Reply-To: <20171102142712.GO10981@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville =?utf-8?B?U3lyasOkbMOk?= , Maarten Lankhorst Cc: Tomi Sarvela , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCAwMiBOb3YgMjAxNywgVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4 LmludGVsLmNvbT4gd3JvdGU6Cj4gT24gVGh1LCBOb3YgMDIsIDIwMTcgYXQgMDI6NTY6NTFQTSAr MDEwMCwgTWFhcnRlbiBMYW5raG9yc3Qgd3JvdGU6Cj4+IFRoaXMgaW50ZXJmYWNlIGlzIGRlcHJl Y2F0ZWQsIGFuZCBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgdXBzdHJlYW0KPj4gZHJtIGNyYyBp bnRlcmZhY2UuCj4KPiBCZWZvcmUgd2UgbnVrZSB0aGlzIEkgd291bGQgbGlrZSB0byBzZWUgYW4g b3B0aW9uIGluIHRoZSBuZXcgaW50ZXJmYWNlCj4gdG8gbm90IGZpbHRlciBvdXQgdGhlICJiYWQi IENSQ3MuIFdoZW4gYW5hbHl6aW5nIGhvdyB0aGUgaGFyZHdhcmUKPiBiZWhhdmVzIHNlZWluZyBl dmVyeSBDUkMgY2FuIGJlIHZhbHVhYmxlLiBBbmQgSSdtIG5vdCBhdCBhbGwgY29udmluY2VkCj4g d2Ugc2hvdWxkIGJlIGRyb3BwaW5nIGFzIG1hbnkgQ1JDcyBhcyB3ZSBhcmUgY3VycmVudGx5LgoK SSdtIG5vdCBhZ2FpbnN0IGl0LCBidXQgZG8geW91IGhhdmUgYSBjb25jcmV0ZSBwcm9wb3NhbCBv biBob3cgdGhhdApvcHRpb24gd291bGQgbG9vayBsaWtlPwoKQlIsCkphbmkuCgo+Cj4+IAo+PiBT aWduZWQtb2ZmLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXgu aW50ZWwuY29tPgo+PiBDYzogVG9taSBTYXJ2ZWxhIDx0b21pLnAuc2FydmVsYUBpbnRlbC5jb20+ Cj4+IENjOiBQZXRyaSBMYXR2YWxhIDxwZXRyaS5sYXR2YWxhQGludGVsLmNvbT4KPj4gQ2M6IEph bmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBpbnRlbC5jb20+Cj4+IC0tLQo+PiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgICB8ICAgNyArLQo+PiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaCAgICAgICB8ICAxMCAtCj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2lycS5jICAgICAgIHwgIDc5ICsrLS0tLQo+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHJ2LmggICAgICB8ICAgMiAtCj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9waXBlX2Ny Yy5jIHwgNDQ2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPj4gIDUgZmlsZXMg Y2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKSwgNTIxIGRlbGV0aW9ucygtKQo+PiAKPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPj4gaW5kZXggN2VmZTU3YzA3MDNlLi5hMzYyMzcwZTVh NjggMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4+IEBAIC00OTkxLDcg KzQ5OTEsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfZGVidWdmc19maWxlcyB7Cj4+ICAJ eyJpOTE1X2dwdV9pbmZvIiwgJmk5MTVfZ3B1X2luZm9fZm9wc30sCj4+ICAjZW5kaWYKPj4gIAl7 Imk5MTVfbmV4dF9zZXFubyIsICZpOTE1X25leHRfc2Vxbm9fZm9wc30sCj4+IC0JeyJpOTE1X2Rp c3BsYXlfY3JjX2N0bCIsICZpOTE1X2Rpc3BsYXlfY3JjX2N0bF9mb3BzfSwKPj4gIAl7Imk5MTVf cHJpX3dtX2xhdGVuY3kiLCAmaTkxNV9wcmlfd21fbGF0ZW5jeV9mb3BzfSwKPj4gIAl7Imk5MTVf c3ByX3dtX2xhdGVuY3kiLCAmaTkxNV9zcHJfd21fbGF0ZW5jeV9mb3BzfSwKPj4gIAl7Imk5MTVf Y3VyX3dtX2xhdGVuY3kiLCAmaTkxNV9jdXJfd21fbGF0ZW5jeV9mb3BzfSwKPj4gQEAgLTUwMDgs NyArNTAwNyw3IEBAIGludCBpOTE1X2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+PiAgewo+PiAgCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gZGV2 X3ByaXYtPmRybS5wcmltYXJ5Owo+PiAgCXN0cnVjdCBkZW50cnkgKmVudDsKPj4gLQlpbnQgcmV0 LCBpOwo+PiArCWludCBpOwo+PiAgCj4+ICAJZW50ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiaTkx NV9mb3JjZXdha2VfdXNlciIsIFNfSVJVU1IsCj4+ICAJCQkJICBtaW5vci0+ZGVidWdmc19yb290 LCB0b19pOTE1KG1pbm9yLT5kZXYpLAo+PiBAQCAtNTAxNiwxMCArNTAxNSw2IEBAIGludCBpOTE1 X2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiAg CWlmICghZW50KQo+PiAgCQlyZXR1cm4gLUVOT01FTTsKPj4gIAo+PiAtCXJldCA9IGludGVsX3Bp cGVfY3JjX2NyZWF0ZShtaW5vcik7Cj4+IC0JaWYgKHJldCkKPj4gLQkJcmV0dXJuIHJldDsKPj4g LQo+PiAgCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGk5MTVfZGVidWdmc19maWxlcyk7IGkr Kykgewo+PiAgCQllbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGk5MTVfZGVidWdmc19maWxlc1tp XS5uYW1lLAo+PiAgCQkJCQkgIFNfSVJVR08gfCBTX0lXVVNSLAo+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmgKPj4gaW5kZXggZDM3ZmQxMTkwOGQwLi5mNDI5MGM5NzM5ZTEgMTAwNjQ0Cj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaAo+PiBAQCAtMTk0OCwxOSArMTk0OCw5IEBAIGVudW0gaW50ZWxfcGlw ZV9jcmNfc291cmNlIHsKPj4gIAlJTlRFTF9QSVBFX0NSQ19TT1VSQ0VfTUFYLAo+PiAgfTsKPj4g IAo+PiAtc3RydWN0IGludGVsX3BpcGVfY3JjX2VudHJ5IHsKPj4gLQl1aW50MzJfdCBmcmFtZTsK Pj4gLQl1aW50MzJfdCBjcmNbNV07Cj4+IC19Owo+PiAtCj4+ICAjZGVmaW5lIElOVEVMX1BJUEVf Q1JDX0VOVFJJRVNfTlIJMTI4Cj4+ICBzdHJ1Y3QgaW50ZWxfcGlwZV9jcmMgewo+PiAgCXNwaW5s b2NrX3QgbG9jazsKPj4gLQlib29sIG9wZW5lZDsJCS8qIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhl IHJlc3VsdCBmaWxlICovCj4+IC0Jc3RydWN0IGludGVsX3BpcGVfY3JjX2VudHJ5ICplbnRyaWVz Owo+PiAtCWVudW0gaW50ZWxfcGlwZV9jcmNfc291cmNlIHNvdXJjZTsKPj4gLQlpbnQgaGVhZCwg dGFpbDsKPj4gLQl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKPj4gIAlpbnQgc2tpcHBlZDsKPj4gIH07 Cj4+ICAKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCj4+IGluZGV4IGZmMDBlNDYyNjk3YS4uYmUx MTljYjU2N2E0IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5j Cj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKPj4gQEAgLTE2MTMsNjkg KzE2MTMsMzQgQEAgc3RhdGljIHZvaWQgZGlzcGxheV9waXBlX2NyY19pcnFfaGFuZGxlcihzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+ICAJCQkJCSB1aW50MzJfdCBjcmM0KQo+ PiAgewo+PiAgCXN0cnVjdCBpbnRlbF9waXBlX2NyYyAqcGlwZV9jcmMgPSAmZGV2X3ByaXYtPnBp cGVfY3JjW3BpcGVdOwo+PiAtCXN0cnVjdCBpbnRlbF9waXBlX2NyY19lbnRyeSAqZW50cnk7Cj4+ ICAJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSBpbnRlbF9nZXRfY3J0Y19mb3JfcGlwZShkZXZf cHJpdiwgcGlwZSk7Cj4+IC0Jc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlciA9IGRldl9wcml2LT5k cm0uZHJpdmVyOwo+PiAgCXVpbnQzMl90IGNyY3NbNV07Cj4+IC0JaW50IGhlYWQsIHRhaWw7Cj4+ ICAKPj4gIAlzcGluX2xvY2soJnBpcGVfY3JjLT5sb2NrKTsKPj4gLQlpZiAocGlwZV9jcmMtPnNv dXJjZSkgewo+PiAtCQlpZiAoIXBpcGVfY3JjLT5lbnRyaWVzKSB7Cj4+IC0JCQlzcGluX3VubG9j aygmcGlwZV9jcmMtPmxvY2spOwo+PiAtCQkJRFJNX0RFQlVHX0tNUygic3B1cmlvdXMgaW50ZXJy dXB0XG4iKTsKPj4gLQkJCXJldHVybjsKPj4gLQkJfQo+PiAtCj4+IC0JCWhlYWQgPSBwaXBlX2Ny Yy0+aGVhZDsKPj4gLQkJdGFpbCA9IHBpcGVfY3JjLT50YWlsOwo+PiAtCj4+IC0JCWlmIChDSVJD X1NQQUNFKGhlYWQsIHRhaWwsIElOVEVMX1BJUEVfQ1JDX0VOVFJJRVNfTlIpIDwgMSkgewo+PiAt CQkJc3Bpbl91bmxvY2soJnBpcGVfY3JjLT5sb2NrKTsKPj4gLQkJCURSTV9FUlJPUigiQ1JDIGJ1 ZmZlciBvdmVyZmxvd2luZ1xuIik7Cj4+IC0JCQlyZXR1cm47Cj4+IC0JCX0KPj4gLQo+PiAtCQll bnRyeSA9ICZwaXBlX2NyYy0+ZW50cmllc1toZWFkXTsKPj4gLQo+PiAtCQllbnRyeS0+ZnJhbWUg PSBkcml2ZXItPmdldF92YmxhbmtfY291bnRlcigmZGV2X3ByaXYtPmRybSwgcGlwZSk7Cj4+IC0J CWVudHJ5LT5jcmNbMF0gPSBjcmMwOwo+PiAtCQllbnRyeS0+Y3JjWzFdID0gY3JjMTsKPj4gLQkJ ZW50cnktPmNyY1syXSA9IGNyYzI7Cj4+IC0JCWVudHJ5LT5jcmNbM10gPSBjcmMzOwo+PiAtCQll bnRyeS0+Y3JjWzRdID0gY3JjNDsKPj4gLQo+PiAtCQloZWFkID0gKGhlYWQgKyAxKSAmIChJTlRF TF9QSVBFX0NSQ19FTlRSSUVTX05SIC0gMSk7Cj4+IC0JCXBpcGVfY3JjLT5oZWFkID0gaGVhZDsK Pj4gLQo+PiAtCQlzcGluX3VubG9jaygmcGlwZV9jcmMtPmxvY2spOwo+PiAtCj4+IC0JCXdha2Vf dXBfaW50ZXJydXB0aWJsZSgmcGlwZV9jcmMtPndxKTsKPj4gLQl9IGVsc2Ugewo+PiAtCQkvKgo+ PiAtCQkgKiBGb3Igc29tZSBub3QgeWV0IGlkZW50aWZpZWQgcmVhc29uLCB0aGUgZmlyc3QgQ1JD IGlzCj4+IC0JCSAqIGJvbmtlcnMuIFNvIGxldCdzIGp1c3Qgd2FpdCBmb3IgdGhlIG5leHQgdmJs YW5rIGFuZCByZWFkCj4+IC0JCSAqIG91dCB0aGUgYnVnZ3kgcmVzdWx0Lgo+PiAtCQkgKgo+PiAt CQkgKiBPbiBHRU44KyBzb21ldGltZXMgdGhlIHNlY29uZCBDUkMgaXMgYm9ua2VycyBhcyB3ZWxs LCBzbwo+PiAtCQkgKiBkb24ndCB0cnVzdCB0aGF0IG9uZSBlaXRoZXIuCj4+IC0JCSAqLwo+PiAt CQlpZiAocGlwZV9jcmMtPnNraXBwZWQgPT0gMCB8fAo+PiAtCQkgICAgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gOCAmJiBwaXBlX2NyYy0+c2tpcHBlZCA9PSAxKSkgewo+PiAtCQkJcGlwZV9jcmMt PnNraXBwZWQrKzsKPj4gLQkJCXNwaW5fdW5sb2NrKCZwaXBlX2NyYy0+bG9jayk7Cj4+IC0JCQly ZXR1cm47Cj4+IC0JCX0KPj4gKwkvKgo+PiArCSAqIEZvciBzb21lIG5vdCB5ZXQgaWRlbnRpZmll ZCByZWFzb24sIHRoZSBmaXJzdCBDUkMgaXMKPj4gKwkgKiBib25rZXJzLiBTbyBsZXQncyBqdXN0 IHdhaXQgZm9yIHRoZSBuZXh0IHZibGFuayBhbmQgcmVhZAo+PiArCSAqIG91dCB0aGUgYnVnZ3kg cmVzdWx0Lgo+PiArCSAqCj4+ICsJICogT24gR0VOOCsgc29tZXRpbWVzIHRoZSBzZWNvbmQgQ1JD IGlzIGJvbmtlcnMgYXMgd2VsbCwgc28KPj4gKwkgKiBkb24ndCB0cnVzdCB0aGF0IG9uZSBlaXRo ZXIuCj4+ICsJICovCj4+ICsJaWYgKHBpcGVfY3JjLT5za2lwcGVkID09IDAgfHwKPj4gKwkgICAg KElOVEVMX0dFTihkZXZfcHJpdikgPj0gOCAmJiBwaXBlX2NyYy0+c2tpcHBlZCA9PSAxKSkgewo+ PiArCQlwaXBlX2NyYy0+c2tpcHBlZCsrOwo+PiAgCQlzcGluX3VubG9jaygmcGlwZV9jcmMtPmxv Y2spOwo+PiAtCQljcmNzWzBdID0gY3JjMDsKPj4gLQkJY3Jjc1sxXSA9IGNyYzE7Cj4+IC0JCWNy Y3NbMl0gPSBjcmMyOwo+PiAtCQljcmNzWzNdID0gY3JjMzsKPj4gLQkJY3Jjc1s0XSA9IGNyYzQ7 Cj4+IC0JCWRybV9jcnRjX2FkZF9jcmNfZW50cnkoJmNydGMtPmJhc2UsIHRydWUsCj4+IC0JCQkJ ICAgICAgIGRybV9jcnRjX2FjY3VyYXRlX3ZibGFua19jb3VudCgmY3J0Yy0+YmFzZSksCj4+IC0J CQkJICAgICAgIGNyY3MpOwo+PiArCQlyZXR1cm47Cj4+ICAJfQo+PiArCXNwaW5fdW5sb2NrKCZw aXBlX2NyYy0+bG9jayk7Cj4+ICsKPj4gKwljcmNzWzBdID0gY3JjMDsKPj4gKwljcmNzWzFdID0g Y3JjMTsKPj4gKwljcmNzWzJdID0gY3JjMjsKPj4gKwljcmNzWzNdID0gY3JjMzsKPj4gKwljcmNz WzRdID0gY3JjNDsKPj4gKwlkcm1fY3J0Y19hZGRfY3JjX2VudHJ5KCZjcnRjLT5iYXNlLCB0cnVl LAo+PiArCQkJCWRybV9jcnRjX2FjY3VyYXRlX3ZibGFua19jb3VudCgmY3J0Yy0+YmFzZSksCj4+ ICsJCQkJY3Jjcyk7Cj4+ICB9Cj4+ICAjZWxzZQo+PiAgc3RhdGljIGlubGluZSB2b2lkCj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rydi5oCj4+IGluZGV4IDJmOGI5YWYyMjVlZi4uNmIwMzBiNmZiNzAw IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+PiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+PiBAQCAtMjAxMywxMiArMjAxMywx MCBAQCB2b2lkIGxzcGNvbl9yZXN1bWUoc3RydWN0IGludGVsX2xzcGNvbiAqbHNwY29uKTsKPj4g IHZvaWQgbHNwY29uX3dhaXRfcGNvbl9tb2RlKHN0cnVjdCBpbnRlbF9sc3Bjb24gKmxzcGNvbik7 Cj4+ICAKPj4gIC8qIGludGVsX3BpcGVfY3JjLmMgKi8KPj4gLWludCBpbnRlbF9waXBlX2NyY19j cmVhdGUoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwo+PiAgI2lmZGVmIENPTkZJR19ERUJVR19G Uwo+PiAgaW50IGludGVsX2NydGNfc2V0X2NyY19zb3VyY2Uoc3RydWN0IGRybV9jcnRjICpjcnRj LCBjb25zdCBjaGFyICpzb3VyY2VfbmFtZSwKPj4gIAkJCSAgICAgIHNpemVfdCAqdmFsdWVzX2Nu dCk7Cj4+ICAjZWxzZQo+PiAgI2RlZmluZSBpbnRlbF9jcnRjX3NldF9jcmNfc291cmNlIE5VTEwK Pj4gICNlbmRpZgo+PiAtZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTkxNV9k aXNwbGF5X2NyY19jdGxfZm9wczsKPj4gICNlbmRpZiAvKiBfX0lOVEVMX0RSVl9IX18gKi8KPj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BpcGVfY3JjLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9waXBlX2NyYy5jCj4+IGluZGV4IDg5OTgzOWYyZjdjNi4u NGNhNGJhNWExNDViIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9w aXBlX2NyYy5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BpcGVfY3JjLmMK Pj4gQEAgLTMwLDE2MCArMzAsNiBAQAo+PiAgI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KPj4g ICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKPj4gIAo+PiAtc3RydWN0IHBpcGVfY3JjX2luZm8gewo+ PiAtCWNvbnN0IGNoYXIgKm5hbWU7Cj4+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2Owo+PiAtCWVudW0gcGlwZSBwaXBlOwo+PiAtfTsKPj4gLQo+PiAtc3RhdGljIGludCBpOTE1 X3BpcGVfY3JjX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKQo+ PiAtewo+PiAtCXN0cnVjdCBwaXBlX2NyY19pbmZvICppbmZvID0gaW5vZGUtPmlfcHJpdmF0ZTsK Pj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBpbmZvLT5kZXZfcHJpdjsK Pj4gLQlzdHJ1Y3QgaW50ZWxfcGlwZV9jcmMgKnBpcGVfY3JjID0gJmRldl9wcml2LT5waXBlX2Ny Y1tpbmZvLT5waXBlXTsKPj4gLQo+PiAtCWlmIChpbmZvLT5waXBlID49IElOVEVMX0lORk8oZGV2 X3ByaXYpLT5udW1fcGlwZXMpCj4+IC0JCXJldHVybiAtRU5PREVWOwo+PiAtCj4+IC0Jc3Bpbl9s b2NrX2lycSgmcGlwZV9jcmMtPmxvY2spOwo+PiAtCj4+IC0JaWYgKHBpcGVfY3JjLT5vcGVuZWQp IHsKPj4gLQkJc3Bpbl91bmxvY2tfaXJxKCZwaXBlX2NyYy0+bG9jayk7Cj4+IC0JCXJldHVybiAt RUJVU1k7IC8qIGFscmVhZHkgb3BlbiAqLwo+PiAtCX0KPj4gLQo+PiAtCXBpcGVfY3JjLT5vcGVu ZWQgPSB0cnVlOwo+PiAtCWZpbGVwLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOwo+ PiAtCj4+IC0Jc3Bpbl91bmxvY2tfaXJxKCZwaXBlX2NyYy0+bG9jayk7Cj4+IC0KPj4gLQlyZXR1 cm4gMDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGludCBpOTE1X3BpcGVfY3JjX3JlbGVhc2Uoc3Ry dWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKQo+PiAtewo+PiAtCXN0cnVjdCBw aXBlX2NyY19pbmZvICppbmZvID0gaW5vZGUtPmlfcHJpdmF0ZTsKPj4gLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBpbmZvLT5kZXZfcHJpdjsKPj4gLQlzdHJ1Y3QgaW50ZWxf cGlwZV9jcmMgKnBpcGVfY3JjID0gJmRldl9wcml2LT5waXBlX2NyY1tpbmZvLT5waXBlXTsKPj4g LQo+PiAtCXNwaW5fbG9ja19pcnEoJnBpcGVfY3JjLT5sb2NrKTsKPj4gLQlwaXBlX2NyYy0+b3Bl bmVkID0gZmFsc2U7Cj4+IC0Jc3Bpbl91bmxvY2tfaXJxKCZwaXBlX2NyYy0+bG9jayk7Cj4+IC0K Pj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAtLyogKDYgZmllbGRzLCA4IGNoYXJzIGVhY2gs IHNwYWNlIHNlcGFyYXRlZCAoNSkgKyAnXG4nKSAqLwo+PiAtI2RlZmluZSBQSVBFX0NSQ19MSU5F X0xFTgkoNiAqIDggKyA1ICsgMSkKPj4gLS8qIGFjY291bnQgZm9yIFwnMCcgKi8KPj4gLSNkZWZp bmUgUElQRV9DUkNfQlVGRkVSX0xFTgkoUElQRV9DUkNfTElORV9MRU4gKyAxKQo+PiAtCj4+IC1z dGF0aWMgaW50IHBpcGVfY3JjX2RhdGFfY291bnQoc3RydWN0IGludGVsX3BpcGVfY3JjICpwaXBl X2NyYykKPj4gLXsKPj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZwaXBlX2NyYy0+bG9jayk7Cj4+ IC0JcmV0dXJuIENJUkNfQ05UKHBpcGVfY3JjLT5oZWFkLCBwaXBlX2NyYy0+dGFpbCwKPj4gLQkJ CUlOVEVMX1BJUEVfQ1JDX0VOVFJJRVNfTlIpOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgc3NpemVf dAo+PiAtaTkxNV9waXBlX2NyY19yZWFkKHN0cnVjdCBmaWxlICpmaWxlcCwgY2hhciBfX3VzZXIg KnVzZXJfYnVmLCBzaXplX3QgY291bnQsCj4+IC0JCSAgIGxvZmZfdCAqcG9zKQo+PiAtewo+PiAt CXN0cnVjdCBwaXBlX2NyY19pbmZvICppbmZvID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKPj4gLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBpbmZvLT5kZXZfcHJpdjsKPj4gLQlz dHJ1Y3QgaW50ZWxfcGlwZV9jcmMgKnBpcGVfY3JjID0gJmRldl9wcml2LT5waXBlX2NyY1tpbmZv LT5waXBlXTsKPj4gLQljaGFyIGJ1ZltQSVBFX0NSQ19CVUZGRVJfTEVOXTsKPj4gLQlpbnQgbl9l bnRyaWVzOwo+PiAtCXNzaXplX3QgYnl0ZXNfcmVhZDsKPj4gLQo+PiAtCS8qCj4+IC0JICogRG9u J3QgYWxsb3cgdXNlciBzcGFjZSB0byBwcm92aWRlIGJ1ZmZlcnMgbm90IGJpZyBlbm91Z2ggdG8g aG9sZAo+PiAtCSAqIGEgbGluZSBvZiBkYXRhLgo+PiAtCSAqLwo+PiAtCWlmIChjb3VudCA8IFBJ UEVfQ1JDX0xJTkVfTEVOKQo+PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQo+PiAtCWlmIChwaXBl X2NyYy0+c291cmNlID09IElOVEVMX1BJUEVfQ1JDX1NPVVJDRV9OT05FKQo+PiAtCQlyZXR1cm4g MDsKPj4gLQo+PiAtCS8qIG5vdGhpbmcgdG8gcmVhZCAqLwo+PiAtCXNwaW5fbG9ja19pcnEoJnBp cGVfY3JjLT5sb2NrKTsKPj4gLQl3aGlsZSAocGlwZV9jcmNfZGF0YV9jb3VudChwaXBlX2NyYykg PT0gMCkgewo+PiAtCQlpbnQgcmV0Owo+PiAtCj4+IC0JCWlmIChmaWxlcC0+Zl9mbGFncyAmIE9f Tk9OQkxPQ0spIHsKPj4gLQkJCXNwaW5fdW5sb2NrX2lycSgmcGlwZV9jcmMtPmxvY2spOwo+PiAt CQkJcmV0dXJuIC1FQUdBSU47Cj4+IC0JCX0KPj4gLQo+PiAtCQlyZXQgPSB3YWl0X2V2ZW50X2lu dGVycnVwdGlibGVfbG9ja19pcnEocGlwZV9jcmMtPndxLAo+PiAtCQkJCXBpcGVfY3JjX2RhdGFf Y291bnQocGlwZV9jcmMpLCBwaXBlX2NyYy0+bG9jayk7Cj4+IC0JCWlmIChyZXQpIHsKPj4gLQkJ CXNwaW5fdW5sb2NrX2lycSgmcGlwZV9jcmMtPmxvY2spOwo+PiAtCQkJcmV0dXJuIHJldDsKPj4g LQkJfQo+PiAtCX0KPj4gLQo+PiAtCS8qIFdlIG5vdyBoYXZlIG9uZSBvciBtb3JlIGVudHJpZXMg dG8gcmVhZCAqLwo+PiAtCW5fZW50cmllcyA9IGNvdW50IC8gUElQRV9DUkNfTElORV9MRU47Cj4+ IC0KPj4gLQlieXRlc19yZWFkID0gMDsKPj4gLQl3aGlsZSAobl9lbnRyaWVzID4gMCkgewo+PiAt CQlzdHJ1Y3QgaW50ZWxfcGlwZV9jcmNfZW50cnkgKmVudHJ5ID0KPj4gLQkJCSZwaXBlX2NyYy0+ ZW50cmllc1twaXBlX2NyYy0+dGFpbF07Cj4+IC0KPj4gLQkJaWYgKENJUkNfQ05UKHBpcGVfY3Jj LT5oZWFkLCBwaXBlX2NyYy0+dGFpbCwKPj4gLQkJCSAgICAgSU5URUxfUElQRV9DUkNfRU5UUklF U19OUikgPCAxKQo+PiAtCQkJYnJlYWs7Cj4+IC0KPj4gLQkJQlVJTERfQlVHX09OX05PVF9QT1dF Ul9PRl8yKElOVEVMX1BJUEVfQ1JDX0VOVFJJRVNfTlIpOwo+PiAtCQlwaXBlX2NyYy0+dGFpbCA9 IChwaXBlX2NyYy0+dGFpbCArIDEpICYKPj4gLQkJCQkgKElOVEVMX1BJUEVfQ1JDX0VOVFJJRVNf TlIgLSAxKTsKPj4gLQo+PiAtCQlieXRlc19yZWFkICs9IHNucHJpbnRmKGJ1ZiwgUElQRV9DUkNf QlVGRkVSX0xFTiwKPj4gLQkJCQkgICAgICAgIiU4dSAlOHggJTh4ICU4eCAlOHggJTh4XG4iLAo+ PiAtCQkJCSAgICAgICBlbnRyeS0+ZnJhbWUsIGVudHJ5LT5jcmNbMF0sCj4+IC0JCQkJICAgICAg IGVudHJ5LT5jcmNbMV0sIGVudHJ5LT5jcmNbMl0sCj4+IC0JCQkJICAgICAgIGVudHJ5LT5jcmNb M10sIGVudHJ5LT5jcmNbNF0pOwo+PiAtCj4+IC0JCXNwaW5fdW5sb2NrX2lycSgmcGlwZV9jcmMt PmxvY2spOwo+PiAtCj4+IC0JCWlmIChjb3B5X3RvX3VzZXIodXNlcl9idWYsIGJ1ZiwgUElQRV9D UkNfTElORV9MRU4pKQo+PiAtCQkJcmV0dXJuIC1FRkFVTFQ7Cj4+IC0KPj4gLQkJdXNlcl9idWYg Kz0gUElQRV9DUkNfTElORV9MRU47Cj4+IC0JCW5fZW50cmllcy0tOwo+PiAtCj4+IC0JCXNwaW5f bG9ja19pcnEoJnBpcGVfY3JjLT5sb2NrKTsKPj4gLQl9Cj4+IC0KPj4gLQlzcGluX3VubG9ja19p cnEoJnBpcGVfY3JjLT5sb2NrKTsKPj4gLQo+PiAtCXJldHVybiBieXRlc19yZWFkOwo+PiAtfQo+ PiAtCj4+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpOTE1X3BpcGVfY3Jj X2ZvcHMgPSB7Cj4+IC0JLm93bmVyID0gVEhJU19NT0RVTEUsCj4+IC0JLm9wZW4gPSBpOTE1X3Bp cGVfY3JjX29wZW4sCj4+IC0JLnJlYWQgPSBpOTE1X3BpcGVfY3JjX3JlYWQsCj4+IC0JLnJlbGVh c2UgPSBpOTE1X3BpcGVfY3JjX3JlbGVhc2UsCj4+IC19Owo+PiAtCj4+IC1zdGF0aWMgc3RydWN0 IHBpcGVfY3JjX2luZm8gaTkxNV9waXBlX2NyY19kYXRhW0k5MTVfTUFYX1BJUEVTXSA9IHsKPj4g LQl7Cj4+IC0JCS5uYW1lID0gImk5MTVfcGlwZV9BX2NyYyIsCj4+IC0JCS5waXBlID0gUElQRV9B LAo+PiAtCX0sCj4+IC0Jewo+PiAtCQkubmFtZSA9ICJpOTE1X3BpcGVfQl9jcmMiLAo+PiAtCQku cGlwZSA9IFBJUEVfQiwKPj4gLQl9LAo+PiAtCXsKPj4gLQkJLm5hbWUgPSAiaTkxNV9waXBlX0Nf Y3JjIiwKPj4gLQkJLnBpcGUgPSBQSVBFX0MsCj4+IC0JfSwKPj4gLX07Cj4+IC0KPj4gIHN0YXRp YyBjb25zdCBjaGFyICogY29uc3QgcGlwZV9jcmNfc291cmNlc1tdID0gewo+PiAgCSJub25lIiwK Pj4gIAkicGxhbmUxIiwKPj4gQEAgLTE5NywyOSArNDMsNiBAQCBzdGF0aWMgY29uc3QgY2hhciAq IGNvbnN0IHBpcGVfY3JjX3NvdXJjZXNbXSA9IHsKPj4gIAkiYXV0byIsCj4+ICB9Owo+PiAgCj4+ IC1zdGF0aWMgY29uc3QgY2hhciAqcGlwZV9jcmNfc291cmNlX25hbWUoZW51bSBpbnRlbF9waXBl X2NyY19zb3VyY2Ugc291cmNlKQo+PiAtewo+PiAtCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHBp cGVfY3JjX3NvdXJjZXMpICE9IElOVEVMX1BJUEVfQ1JDX1NPVVJDRV9NQVgpOwo+PiAtCXJldHVy biBwaXBlX2NyY19zb3VyY2VzW3NvdXJjZV07Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgZGlz cGxheV9jcmNfY3RsX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+PiAtewo+ PiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG0tPnByaXZhdGU7Cj4+IC0J ZW51bSBwaXBlIHBpcGU7Cj4+IC0KPj4gLQlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBwaXBlKQo+ PiAtCQlzZXFfcHJpbnRmKG0sICIlYyAlc1xuIiwgcGlwZV9uYW1lKHBpcGUpLAo+PiAtCQkJICAg cGlwZV9jcmNfc291cmNlX25hbWUoZGV2X3ByaXYtPnBpcGVfY3JjW3BpcGVdLnNvdXJjZSkpOwo+ PiAtCj4+IC0JcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBpbnQgZGlzcGxheV9jcmNf Y3RsX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCj4+IC17Cj4+ IC0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRpc3BsYXlfY3JjX2N0bF9zaG93LCBpbm9kZS0+ aV9wcml2YXRlKTsKPj4gLX0KPj4gLQo+PiAgc3RhdGljIGludCBpOHh4X3BpcGVfY3JjX2N0bF9y ZWcoZW51bSBpbnRlbF9waXBlX2NyY19zb3VyY2UgKnNvdXJjZSwKPj4gIAkJCQkgdWludDMyX3Qg KnZhbCkKPj4gIHsKPj4gQEAgLTYxNiwxNzggKzQzOSw2IEBAIHN0YXRpYyBpbnQgZ2V0X25ld19j cmNfY3RsX3JlZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+ICAJCXJldHVy biBpdmJfcGlwZV9jcmNfY3RsX3JlZyhkZXZfcHJpdiwgcGlwZSwgc291cmNlLCB2YWwpOwo+PiAg fQo+PiAgCj4+IC1zdGF0aWMgaW50IHBpcGVfY3JjX3NldF9zb3VyY2Uoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAo+PiAtCQkJICAgICAgIGVudW0gcGlwZSBwaXBlLAo+PiAtCQkJ ICAgICAgIGVudW0gaW50ZWxfcGlwZV9jcmNfc291cmNlIHNvdXJjZSkKPj4gLXsKPj4gLQlzdHJ1 Y3QgaW50ZWxfcGlwZV9jcmMgKnBpcGVfY3JjID0gJmRldl9wcml2LT5waXBlX2NyY1twaXBlXTsK Pj4gLQllbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIHBvd2VyX2RvbWFpbjsKPj4gLQl1 MzIgdmFsID0gMDsgLyogc2h1dCB1cCBnY2MgKi8KPj4gLQlpbnQgcmV0Owo+PiAtCj4+IC0JaWYg KHBpcGVfY3JjLT5zb3VyY2UgPT0gc291cmNlKQo+PiAtCQlyZXR1cm4gMDsKPj4gLQo+PiAtCS8q IGZvcmJpZCBjaGFuZ2luZyB0aGUgc291cmNlIHdpdGhvdXQgZ29pbmcgYmFjayB0byAnbm9uZScg Ki8KPj4gLQlpZiAocGlwZV9jcmMtPnNvdXJjZSAmJiBzb3VyY2UpCj4+IC0JCXJldHVybiAtRUlO VkFMOwo+PiAtCj4+IC0JcG93ZXJfZG9tYWluID0gUE9XRVJfRE9NQUlOX1BJUEUocGlwZSk7Cj4+ IC0JaWYgKCFpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9pZl9lbmFibGVkKGRldl9wcml2LCBwb3dl cl9kb21haW4pKSB7Cj4+IC0JCURSTV9ERUJVR19LTVMoIlRyeWluZyB0byBjYXB0dXJlIENSQyB3 aGlsZSBwaXBlIGlzIG9mZlxuIik7Cj4+IC0JCXJldHVybiAtRUlPOwo+PiAtCX0KPj4gLQo+PiAt CXJldCA9IGdldF9uZXdfY3JjX2N0bF9yZWcoZGV2X3ByaXYsIHBpcGUsICZzb3VyY2UsICZ2YWwp Owo+PiAtCWlmIChyZXQgIT0gMCkKPj4gLQkJZ290byBvdXQ7Cj4+IC0KPj4gLQkvKiBub25lIC0+ IHJlYWwgc291cmNlIHRyYW5zaXRpb24gKi8KPj4gLQlpZiAoc291cmNlKSB7Cj4+IC0JCXN0cnVj dCBpbnRlbF9waXBlX2NyY19lbnRyeSAqZW50cmllczsKPj4gLQo+PiAtCQlEUk1fREVCVUdfRFJJ VkVSKCJjb2xsZWN0aW5nIENSQ3MgZm9yIHBpcGUgJWMsICVzXG4iLAo+PiAtCQkJCSBwaXBlX25h bWUocGlwZSksIHBpcGVfY3JjX3NvdXJjZV9uYW1lKHNvdXJjZSkpOwo+PiAtCj4+IC0JCWVudHJp ZXMgPSBrY2FsbG9jKElOVEVMX1BJUEVfQ1JDX0VOVFJJRVNfTlIsCj4+IC0JCQkJICBzaXplb2Yo cGlwZV9jcmMtPmVudHJpZXNbMF0pLAo+PiAtCQkJCSAgR0ZQX0tFUk5FTCk7Cj4+IC0JCWlmICgh ZW50cmllcykgewo+PiAtCQkJcmV0ID0gLUVOT01FTTsKPj4gLQkJCWdvdG8gb3V0Owo+PiAtCQl9 Cj4+IC0KPj4gLQkJc3Bpbl9sb2NrX2lycSgmcGlwZV9jcmMtPmxvY2spOwo+PiAtCQlrZnJlZShw aXBlX2NyYy0+ZW50cmllcyk7Cj4+IC0JCXBpcGVfY3JjLT5lbnRyaWVzID0gZW50cmllczsKPj4g LQkJcGlwZV9jcmMtPmhlYWQgPSAwOwo+PiAtCQlwaXBlX2NyYy0+dGFpbCA9IDA7Cj4+IC0JCXNw aW5fdW5sb2NrX2lycSgmcGlwZV9jcmMtPmxvY2spOwo+PiAtCX0KPj4gLQo+PiAtCXBpcGVfY3Jj LT5zb3VyY2UgPSBzb3VyY2U7Cj4+IC0KPj4gLQlJOTE1X1dSSVRFKFBJUEVfQ1JDX0NUTChwaXBl KSwgdmFsKTsKPj4gLQlQT1NUSU5HX1JFQUQoUElQRV9DUkNfQ1RMKHBpcGUpKTsKPj4gLQo+PiAt CS8qIHJlYWwgc291cmNlIC0+IG5vbmUgdHJhbnNpdGlvbiAqLwo+PiAtCWlmICghc291cmNlKSB7 Cj4+IC0JCXN0cnVjdCBpbnRlbF9waXBlX2NyY19lbnRyeSAqZW50cmllczsKPj4gLQkJc3RydWN0 IGludGVsX2NydGMgKmNydGMgPSBpbnRlbF9nZXRfY3J0Y19mb3JfcGlwZShkZXZfcHJpdiwKPj4g LQkJCQkJCQkJICBwaXBlKTsKPj4gLQo+PiAtCQlEUk1fREVCVUdfRFJJVkVSKCJzdG9wcGluZyBD UkNzIGZvciBwaXBlICVjXG4iLAo+PiAtCQkJCSBwaXBlX25hbWUocGlwZSkpOwo+PiAtCj4+IC0J CWRybV9tb2Rlc2V0X2xvY2soJmNydGMtPmJhc2UubXV0ZXgsIE5VTEwpOwo+PiAtCQlpZiAoY3J0 Yy0+YmFzZS5zdGF0ZS0+YWN0aXZlKQo+PiAtCQkJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldl9w cml2LCBwaXBlKTsKPj4gLQkJZHJtX21vZGVzZXRfdW5sb2NrKCZjcnRjLT5iYXNlLm11dGV4KTsK Pj4gLQo+PiAtCQlzcGluX2xvY2tfaXJxKCZwaXBlX2NyYy0+bG9jayk7Cj4+IC0JCWVudHJpZXMg PSBwaXBlX2NyYy0+ZW50cmllczsKPj4gLQkJcGlwZV9jcmMtPmVudHJpZXMgPSBOVUxMOwo+PiAt CQlwaXBlX2NyYy0+aGVhZCA9IDA7Cj4+IC0JCXBpcGVfY3JjLT50YWlsID0gMDsKPj4gLQkJc3Bp bl91bmxvY2tfaXJxKCZwaXBlX2NyYy0+bG9jayk7Cj4+IC0KPj4gLQkJa2ZyZWUoZW50cmllcyk7 Cj4+IC0KPj4gLQkJaWYgKElTX0c0WChkZXZfcHJpdikpCj4+IC0JCQlnNHhfdW5kb19waXBlX3Nj cmFtYmxlX3Jlc2V0KGRldl9wcml2LCBwaXBlKTsKPj4gLQkJZWxzZSBpZiAoSVNfVkFMTEVZVklF VyhkZXZfcHJpdikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpCj4+IC0JCQl2bHZfdW5kb19w aXBlX3NjcmFtYmxlX3Jlc2V0KGRldl9wcml2LCBwaXBlKTsKPj4gLQkJZWxzZSBpZiAoKElTX0hB U1dFTEwoZGV2X3ByaXYpIHx8Cj4+IC0JCQkgIElTX0JST0FEV0VMTChkZXZfcHJpdikpICYmIHBp cGUgPT0gUElQRV9BKQo+PiAtCQkJaHN3X3BpcGVfQV9jcmNfd2EoZGV2X3ByaXYsIGZhbHNlKTsK Pj4gLQl9Cj4+IC0KPj4gLQlyZXQgPSAwOwo+PiAtCj4+IC1vdXQ6Cj4+IC0JaW50ZWxfZGlzcGxh eV9wb3dlcl9wdXQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbik7Cj4+IC0KPj4gLQlyZXR1cm4gcmV0 Owo+PiAtfQo+PiAtCj4+IC0vKgo+PiAtICogUGFyc2UgcGlwZSBDUkMgY29tbWFuZCBzdHJpbmdz Ogo+PiAtICogICBjb21tYW5kOiB3c3AqIG9iamVjdCB3c3ArIG5hbWUgd3NwKyBzb3VyY2Ugd3Nw Kgo+PiAtICogICBvYmplY3Q6ICdwaXBlJwo+PiAtICogICBuYW1lOiAoQSB8IEIgfCBDKQo+PiAt ICogICBzb3VyY2U6IChub25lIHwgcGxhbmUxIHwgcGxhbmUyIHwgcGYpCj4+IC0gKiAgIHdzcDog KCMweDIwIHwgIzB4OSB8ICMweEEpKwo+PiAtICoKPj4gLSAqIGVnLjoKPj4gLSAqICAicGlwZSBB IHBsYW5lMSIgIC0+ICBTdGFydCBDUkMgY29tcHV0YXRpb25zIG9uIHBsYW5lMSBvZiBwaXBlIEEK Pj4gLSAqICAicGlwZSBBIG5vbmUiICAgIC0+ICBTdG9wIENSQwo+PiAtICovCj4+IC1zdGF0aWMg aW50IGRpc3BsYXlfY3JjX2N0bF90b2tlbml6ZShjaGFyICpidWYsIGNoYXIgKndvcmRzW10sIGlu dCBtYXhfd29yZHMpCj4+IC17Cj4+IC0JaW50IG5fd29yZHMgPSAwOwo+PiAtCj4+IC0Jd2hpbGUg KCpidWYpIHsKPj4gLQkJY2hhciAqZW5kOwo+PiAtCj4+IC0JCS8qIHNraXAgbGVhZGluZyB3aGl0 ZSBzcGFjZSAqLwo+PiAtCQlidWYgPSBza2lwX3NwYWNlcyhidWYpOwo+PiAtCQlpZiAoISpidWYp Cj4+IC0JCQlicmVhazsJLyogZW5kIG9mIGJ1ZmZlciAqLwo+PiAtCj4+IC0JCS8qIGZpbmQgZW5k IG9mIHdvcmQgKi8KPj4gLQkJZm9yIChlbmQgPSBidWY7ICplbmQgJiYgIWlzc3BhY2UoKmVuZCk7 IGVuZCsrKQo+PiAtCQkJOwo+PiAtCj4+IC0JCWlmIChuX3dvcmRzID09IG1heF93b3Jkcykgewo+ PiAtCQkJRFJNX0RFQlVHX0RSSVZFUigidG9vIG1hbnkgd29yZHMsIGFsbG93ZWQgPD0gJWRcbiIs Cj4+IC0JCQkJCSBtYXhfd29yZHMpOwo+PiAtCQkJcmV0dXJuIC1FSU5WQUw7CS8qIHJhbiBvdXQg b2Ygd29yZHNbXSBiZWZvcmUgYnl0ZXMgKi8KPj4gLQkJfQo+PiAtCj4+IC0JCWlmICgqZW5kKQo+ PiAtCQkJKmVuZCsrID0gJ1wwJzsKPj4gLQkJd29yZHNbbl93b3JkcysrXSA9IGJ1ZjsKPj4gLQkJ YnVmID0gZW5kOwo+PiAtCX0KPj4gLQo+PiAtCXJldHVybiBuX3dvcmRzOwo+PiAtfQo+PiAtCj4+ IC1lbnVtIGludGVsX3BpcGVfY3JjX29iamVjdCB7Cj4+IC0JUElQRV9DUkNfT0JKRUNUX1BJUEUs Cj4+IC19Owo+PiAtCj4+IC1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBpcGVfY3JjX29iamVj dHNbXSA9IHsKPj4gLQkicGlwZSIsCj4+IC19Owo+PiAtCj4+IC1zdGF0aWMgaW50Cj4+IC1kaXNw bGF5X2NyY19jdGxfcGFyc2Vfb2JqZWN0KGNvbnN0IGNoYXIgKmJ1ZiwgZW51bSBpbnRlbF9waXBl X2NyY19vYmplY3QgKm8pCj4+IC17Cj4+IC0JaW50IGk7Cj4+IC0KPj4gLQlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShwaXBlX2NyY19vYmplY3RzKTsgaSsrKQo+PiAtCQlpZiAoIXN0cmNtcChi dWYsIHBpcGVfY3JjX29iamVjdHNbaV0pKSB7Cj4+IC0JCQkqbyA9IGk7Cj4+IC0JCQlyZXR1cm4g MDsKPj4gLQkJfQo+PiAtCj4+IC0JcmV0dXJuIC1FSU5WQUw7Cj4+IC19Cj4+IC0KPj4gLXN0YXRp YyBpbnQgZGlzcGxheV9jcmNfY3RsX3BhcnNlX3BpcGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAo+PiAtCQkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1ZiwgZW51bSBwaXBlICpwaXBl KQo+PiAtewo+PiAtCWNvbnN0IGNoYXIgbmFtZSA9IGJ1ZlswXTsKPj4gLQo+PiAtCWlmIChuYW1l IDwgJ0EnIHx8IG5hbWUgPj0gcGlwZV9uYW1lKElOVEVMX0lORk8oZGV2X3ByaXYpLT5udW1fcGlw ZXMpKQo+PiAtCQlyZXR1cm4gLUVJTlZBTDsKPj4gLQo+PiAtCSpwaXBlID0gbmFtZSAtICdBJzsK Pj4gLQo+PiAtCXJldHVybiAwOwo+PiAtfQo+PiAtCj4+ICBzdGF0aWMgaW50Cj4+ICBkaXNwbGF5 X2NyY19jdGxfcGFyc2Vfc291cmNlKGNvbnN0IGNoYXIgKmJ1ZiwgZW51bSBpbnRlbF9waXBlX2Ny Y19zb3VyY2UgKnMpCj4+ICB7Cj4+IEBAIC04MDcsODEgKzQ1OCw2IEBAIGRpc3BsYXlfY3JjX2N0 bF9wYXJzZV9zb3VyY2UoY29uc3QgY2hhciAqYnVmLCBlbnVtIGludGVsX3BpcGVfY3JjX3NvdXJj ZSAqcykKPj4gIAlyZXR1cm4gLUVJTlZBTDsKPj4gIH0KPj4gIAo+PiAtc3RhdGljIGludCBkaXNw bGF5X2NyY19jdGxfcGFyc2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+PiAt CQkJCSBjaGFyICpidWYsIHNpemVfdCBsZW4pCj4+IC17Cj4+IC0jZGVmaW5lIE5fV09SRFMgMwo+ PiAtCWludCBuX3dvcmRzOwo+PiAtCWNoYXIgKndvcmRzW05fV09SRFNdOwo+PiAtCWVudW0gcGlw ZSBwaXBlOwo+PiAtCWVudW0gaW50ZWxfcGlwZV9jcmNfb2JqZWN0IG9iamVjdDsKPj4gLQllbnVt IGludGVsX3BpcGVfY3JjX3NvdXJjZSBzb3VyY2U7Cj4+IC0KPj4gLQluX3dvcmRzID0gZGlzcGxh eV9jcmNfY3RsX3Rva2VuaXplKGJ1Ziwgd29yZHMsIE5fV09SRFMpOwo+PiAtCWlmIChuX3dvcmRz ICE9IE5fV09SRFMpIHsKPj4gLQkJRFJNX0RFQlVHX0RSSVZFUigidG9rZW5pemUgZmFpbGVkLCBh IGNvbW1hbmQgaXMgJWQgd29yZHNcbiIsCj4+IC0JCQkJIE5fV09SRFMpOwo+PiAtCQlyZXR1cm4g LUVJTlZBTDsKPj4gLQl9Cj4+IC0KPj4gLQlpZiAoZGlzcGxheV9jcmNfY3RsX3BhcnNlX29iamVj dCh3b3Jkc1swXSwgJm9iamVjdCkgPCAwKSB7Cj4+IC0JCURSTV9ERUJVR19EUklWRVIoInVua25v d24gb2JqZWN0ICVzXG4iLCB3b3Jkc1swXSk7Cj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCX0K Pj4gLQo+PiAtCWlmIChkaXNwbGF5X2NyY19jdGxfcGFyc2VfcGlwZShkZXZfcHJpdiwgd29yZHNb MV0sICZwaXBlKSA8IDApIHsKPj4gLQkJRFJNX0RFQlVHX0RSSVZFUigidW5rbm93biBwaXBlICVz XG4iLCB3b3Jkc1sxXSk7Cj4+IC0JCXJldHVybiAtRUlOVkFMOwo+PiAtCX0KPj4gLQo+PiAtCWlm IChkaXNwbGF5X2NyY19jdGxfcGFyc2Vfc291cmNlKHdvcmRzWzJdLCAmc291cmNlKSA8IDApIHsK Pj4gLQkJRFJNX0RFQlVHX0RSSVZFUigidW5rbm93biBzb3VyY2UgJXNcbiIsIHdvcmRzWzJdKTsK Pj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4+IC0JfQo+PiAtCj4+IC0JcmV0dXJuIHBpcGVfY3JjX3Nl dF9zb3VyY2UoZGV2X3ByaXYsIHBpcGUsIHNvdXJjZSk7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyBz c2l6ZV90IGRpc3BsYXlfY3JjX2N0bF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hh ciBfX3VzZXIgKnVidWYsCj4+IC0JCQkJICAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKm9mZnApCj4+ IC17Cj4+IC0Jc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwo+PiAtCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG0tPnByaXZhdGU7Cj4+IC0JY2hhciAq dG1wYnVmOwo+PiAtCWludCByZXQ7Cj4+IC0KPj4gLQlpZiAobGVuID09IDApCj4+IC0JCXJldHVy biAwOwo+PiAtCj4+IC0JaWYgKGxlbiA+IFBBR0VfU0laRSAtIDEpIHsKPj4gLQkJRFJNX0RFQlVH X0RSSVZFUigiZXhwZWN0ZWQgPCVsdSBieXRlcyBpbnRvIHBpcGUgY3JjIGNvbnRyb2xcbiIsCj4+ IC0JCQkJIFBBR0VfU0laRSk7Cj4+IC0JCXJldHVybiAtRTJCSUc7Cj4+IC0JfQo+PiAtCj4+IC0J dG1wYnVmID0gbWVtZHVwX3VzZXJfbnVsKHVidWYsIGxlbik7Cj4+IC0JaWYgKElTX0VSUih0bXBi dWYpKQo+PiAtCQlyZXR1cm4gUFRSX0VSUih0bXBidWYpOwo+PiAtCj4+IC0JcmV0ID0gZGlzcGxh eV9jcmNfY3RsX3BhcnNlKGRldl9wcml2LCB0bXBidWYsIGxlbik7Cj4+IC0KPj4gLQlrZnJlZSh0 bXBidWYpOwo+PiAtCWlmIChyZXQgPCAwKQo+PiAtCQlyZXR1cm4gcmV0Owo+PiAtCj4+IC0JKm9m ZnAgKz0gbGVuOwo+PiAtCXJldHVybiBsZW47Cj4+IC19Cj4+IC0KPj4gLWNvbnN0IHN0cnVjdCBm aWxlX29wZXJhdGlvbnMgaTkxNV9kaXNwbGF5X2NyY19jdGxfZm9wcyA9IHsKPj4gLQkub3duZXIg PSBUSElTX01PRFVMRSwKPj4gLQkub3BlbiA9IGRpc3BsYXlfY3JjX2N0bF9vcGVuLAo+PiAtCS5y ZWFkID0gc2VxX3JlYWQsCj4+IC0JLmxsc2VlayA9IHNlcV9sc2VlaywKPj4gLQkucmVsZWFzZSA9 IHNpbmdsZV9yZWxlYXNlLAo+PiAtCS53cml0ZSA9IGRpc3BsYXlfY3JjX2N0bF93cml0ZQo+PiAt fTsKPj4gLQo+PiAgdm9pZCBpbnRlbF9kaXNwbGF5X2NyY19pbml0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPj4gIHsKPj4gIAllbnVtIHBpcGUgcGlwZTsKPj4gQEAgLTg4OSwz MiArNDY1LDEwIEBAIHZvaWQgaW50ZWxfZGlzcGxheV9jcmNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCj4+ICAJZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcGlwZSkgewo+ PiAgCQlzdHJ1Y3QgaW50ZWxfcGlwZV9jcmMgKnBpcGVfY3JjID0gJmRldl9wcml2LT5waXBlX2Ny Y1twaXBlXTsKPj4gIAo+PiAtCQlwaXBlX2NyYy0+b3BlbmVkID0gZmFsc2U7Cj4+ICAJCXNwaW5f bG9ja19pbml0KCZwaXBlX2NyYy0+bG9jayk7Cj4+IC0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBp cGVfY3JjLT53cSk7Cj4+ICAJfQo+PiAgfQo+PiAgCj4+IC1pbnQgaW50ZWxfcGlwZV9jcmNfY3Jl YXRlKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQo+PiAtewo+PiAtCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUobWlub3ItPmRldik7Cj4+IC0Jc3RydWN0IGRlbnRy eSAqZW50Owo+PiAtCWludCBpOwo+PiAtCj4+IC0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo aTkxNV9waXBlX2NyY19kYXRhKTsgaSsrKSB7Cj4+IC0JCXN0cnVjdCBwaXBlX2NyY19pbmZvICpp bmZvID0gJmk5MTVfcGlwZV9jcmNfZGF0YVtpXTsKPj4gLQo+PiAtCQlpbmZvLT5kZXZfcHJpdiA9 IGRldl9wcml2Owo+PiAtCQllbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGluZm8tPm5hbWUsIFNf SVJVR08sCj4+IC0JCQkJCSAgbWlub3ItPmRlYnVnZnNfcm9vdCwgaW5mbywKPj4gLQkJCQkJICAm aTkxNV9waXBlX2NyY19mb3BzKTsKPj4gLQkJaWYgKCFlbnQpCj4+IC0JCQlyZXR1cm4gLUVOT01F TTsKPj4gLQl9Cj4+IC0KPj4gLQlyZXR1cm4gMDsKPj4gLX0KPj4gLQo+PiAgaW50IGludGVsX2Ny dGNfc2V0X2NyY19zb3VyY2Uoc3RydWN0IGRybV9jcnRjICpjcnRjLCBjb25zdCBjaGFyICpzb3Vy Y2VfbmFtZSwKPj4gIAkJCSAgICAgIHNpemVfdCAqdmFsdWVzX2NudCkKPj4gIHsKPj4gLS0gCj4+ IDIuMTQuMQo+PiAKPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KPj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+PiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCj4+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4CgotLSAKSmFuaSBOaWt1bGEsIEludGVsIE9wZW4gU291cmNlIFRlY2hub2xv Z3kgQ2VudGVyCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=