From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH 03/23] drm/i915: Move the TypeC port handling code to a separate file Date: Thu, 06 Jun 2019 11:42:46 +0300 Message-ID: <87sgsn14vt.fsf@intel.com> References: <20190604145826.16424-1-imre.deak@intel.com> <20190604145826.16424-4-imre.deak@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7D12189804 for ; Thu, 6 Jun 2019 08:39:43 +0000 (UTC) In-Reply-To: <20190604145826.16424-4-imre.deak@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Imre Deak , intel-gfx@lists.freedesktop.org Cc: Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCAwNCBKdW4gMjAxOSwgSW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPiB3cm90 ZToKPiBNb3ZlIHRoZSBUeXBlQyBwb3J0IGhhbmRsaW5nIGZ1bmN0aW9ucyB0byBhIG5ldyBmaWxl IGZvciBjbGFyaXR5Lgo+Cj4gV2hpbGUgYXQgaXQ6Cj4gLSBzL2ljbF90Y19wb3J0X2Nvbm5lY3Rl ZCgpL2ludGVsX3RjX3BvcnRfY29ubmVjdGVkKCkvCj4gICBpY2xfdGNfcGh5X2Rpc2Nvbm5lY3Qo KSwgd2lsbCBiZSB1bmV4cG9ydGVkIGxhdGVyLgo+Cj4gLSBzL2ludGVsX2RwX2dldF9maWFfc3Vw cG9ydGVkX2xhbmVfY291bnQoKS9pbnRlbF90Y19wb3J0X2ZpYV9tYXhfbGFuZV9jb3VudCgpLwo+ ICAgSXQncyB1c2VkIGZvciBIRE1JIGxlZ2FjeSBtb2RlIHRvby4KPgo+IC0gU2ltcGxpZnkgZnVu Y3Rpb24gaW50ZXJmYWNlcyBieSBwYXNzaW5nIG9ubHkgZGlnX3BvcnQgdG8gdGhlbS4KPgo+IE5v IGZ1bmN0aW9uYWwgY2hhbmdlcy4KClNvbWUgbml0cGlja3MgYmVsb3cuCgpCUiwKSmFuaS4KCgo+ Cj4gQ2M6IEFuaW1lc2ggTWFubmEgPGFuaW1lc2gubWFubmFAaW50ZWwuY29tPgo+IENjOiBQYXVs byBaYW5vbmkgPHBhdWxvLnIuemFub25pQGludGVsLmNvbT4KPiBDYzogSm9zw6kgUm9iZXJ0byBk ZSBTb3V6YSA8am9zZS5zb3V6YUBpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogSW1yZSBEZWFr IDxpbXJlLmRlYWtAaW50ZWwuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtl ZmlsZSAgICAgICAgICAgICB8ICAgMyArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZS5oZWFkZXItdGVzdCB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5j ICAgICAgICAgIHwgICA2ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgICAg ICAgICAgIHwgMjI3ICstLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcC5oICAgICAgICAgICB8ICAgMiAtCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3RjLmMgICAgICAgICAgIHwgMjMwICsrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfdGMuaCAgICAgICAgICAgfCAgMTMgKysKPiAgNyBmaWxlcyBj aGFuZ2VkLCAyNTIgaW5zZXJ0aW9ucygrKSwgMjMwIGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdGMuYwo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdGMuaAo+Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZp bGUKPiBpbmRleCBjMGE3YjI5OTQwNzcuLjc0YzRkMTFkODNlYiAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlCj4gQEAgLTE3MSw3ICsxNzEsOCBAQCBpOTE1LXkgKz0gaW50ZWxfYXVkaW8ubyBcCj4g IAkgIGludGVsX3Bzci5vIFwKPiAgCSAgaW50ZWxfcXVpcmtzLm8gXAo+ICAJICBpbnRlbF9zaWRl YmFuZC5vIFwKPiAtCSAgaW50ZWxfc3ByaXRlLm8KPiArCSAgaW50ZWxfc3ByaXRlLm8gXAo+ICsJ ICBpbnRlbF90Yy5vCj4gIGk5MTUtJChDT05GSUdfQUNQSSkJCSs9IGludGVsX2FjcGkubyBpbnRl bF9vcHJlZ2lvbi5vCj4gIGk5MTUtJChDT05GSUdfRFJNX0ZCREVWX0VNVUxBVElPTikJKz0gaW50 ZWxfZmJkZXYubwo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZp bGUuaGVhZGVyLXRlc3QgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZS5oZWFkZXItdGVz dAo+IGluZGV4IDZlZjNiNjQ3YWM2NS4uZTgwZThlNDViMDljIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLmhlYWRlci10ZXN0Cj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvTWFrZWZpbGUuaGVhZGVyLXRlc3QKPiBAQCAtNTgsNiArNTgsNyBAQCBoZWFkZXJf dGVzdCA6PSBcCj4gIAlpbnRlbF9zZHZvLmggXAo+ICAJaW50ZWxfc2lkZWJhbmQuaCBcCj4gIAlp bnRlbF9zcHJpdGUuaCBcCj4gKwlpbnRlbF90Yy5oIFwKPiAgCWludGVsX3R2LmggXAo+ICAJaW50 ZWxfdW5jb3JlLmggXAo+ICAJaW50ZWxfdmRzYy5oIFwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGku Ywo+IGluZGV4IDM1MGVhZjU0ZjAxZi4uNWExYzk4NDM4Mzc1IDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZGRpLmMKPiBAQCAtNDUsNiArNDUsNyBAQAo+ICAjaW5jbHVkZSAiaW50ZWxfbHNwY29u LmgiCj4gICNpbmNsdWRlICJpbnRlbF9wYW5lbC5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfcHNyLmgi Cj4gKyNpbmNsdWRlICJpbnRlbF90Yy5oIgo+ICAjaW5jbHVkZSAiaW50ZWxfdmRzYy5oIgo+ICAK PiAgc3RydWN0IGRkaV9idWZfdHJhbnMgewo+IEBAIC0zOTA0LDcgKzM5MDUsNiBAQCBzdGF0aWMg aW50IGludGVsX2RkaV9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2Rl ciwKPiAgc3RhdGljIHZvaWQgaW50ZWxfZGRpX2VuY29kZXJfc3VzcGVuZChzdHJ1Y3QgaW50ZWxf ZW5jb2RlciAqZW5jb2RlcikKPiAgewo+ICAJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGln X3BvcnQgPSBlbmNfdG9fZGlnX3BvcnQoJmVuY29kZXItPmJhc2UpOwo+IC0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKPiAgCj4gIAlp bnRlbF9kcF9lbmNvZGVyX3N1c3BlbmQoZW5jb2Rlcik7Cj4gIAo+IEBAIC0zOTE0LDcgKzM5MTQs NyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9kZGlfZW5jb2Rlcl9zdXNwZW5kKHN0cnVjdCBpbnRlbF9l bmNvZGVyICplbmNvZGVyKQo+ICAJICogZXZlbiBpZiB0aGUgc2luayBoYXMgZGlzYXBwZWFyZWQg d2hpbGUgYmVpbmcgc3VzcGVuZGVkLgo+ICAJICovCj4gIAlpZiAoZGlnX3BvcnQtPnRjX2xlZ2Fj eV9wb3J0KQo+IC0JCWljbF90Y19waHlfZGlzY29ubmVjdChpOTE1LCBkaWdfcG9ydCk7Cj4gKwkJ aWNsX3RjX3BoeV9kaXNjb25uZWN0KGRpZ19wb3J0KTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQg aW50ZWxfZGRpX2VuY29kZXJfcmVzZXQoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jb2RlcikK PiBAQCAtMzkzNiw3ICszOTM2LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfZGRpX2VuY29kZXJfZGVz dHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCj4gIAlpbnRlbF9kcF9lbmNvZGVyX2Zs dXNoX3dvcmsoZW5jb2Rlcik7Cj4gIAo+ICAJaWYgKGludGVsX3BvcnRfaXNfdGMoaTkxNSwgZGln X3BvcnQtPmJhc2UucG9ydCkpCj4gLQkJaWNsX3RjX3BoeV9kaXNjb25uZWN0KGk5MTUsIGRpZ19w b3J0KTsKPiArCQlpY2xfdGNfcGh5X2Rpc2Nvbm5lY3QoZGlnX3BvcnQpOwo+ICAKPiAgCWRybV9l bmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7Cj4gIAlrZnJlZShkaWdfcG9ydCk7Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcC5jCj4gaW5kZXggMjRiNTZiMmE3NmM4Li5iNjkzMTBiZDk5MTQgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2RwLmMKPiBAQCAtNjIsNiArNjIsNyBAQAo+ICAjaW5jbHVkZSAiaW50 ZWxfcGFuZWwuaCIKPiAgI2luY2x1ZGUgImludGVsX3Bzci5oIgo+ICAjaW5jbHVkZSAiaW50ZWxf c2lkZWJhbmQuaCIKPiArI2luY2x1ZGUgImludGVsX3RjLmgiCj4gICNpbmNsdWRlICJpbnRlbF92 ZHNjLmgiCj4gIAo+ICAjZGVmaW5lIERQX0RQUlhfRVNJX0xFTiAxNAo+IEBAIC0yMTEsNDYgKzIx MiwxMyBAQCBzdGF0aWMgaW50IGludGVsX2RwX21heF9jb21tb25fcmF0ZShzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwKQo+ICAJcmV0dXJuIGludGVsX2RwLT5jb21tb25fcmF0ZXNbaW50ZWxfZHAt Pm51bV9jb21tb25fcmF0ZXMgLSAxXTsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBpbnRlbF9kcF9n ZXRfZmlhX3N1cHBvcnRlZF9sYW5lX2NvdW50KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4g LXsKPiAtCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGlnX3Bv cnQoaW50ZWxfZHApOwo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShkaWdfcG9ydC0+YmFzZS5iYXNlLmRldik7Cj4gLQllbnVtIHRjX3BvcnQgdGNfcG9ydCA9 IGludGVsX3BvcnRfdG9fdGMoZGV2X3ByaXYsIGRpZ19wb3J0LT5iYXNlLnBvcnQpOwo+IC0JaW50 ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gLQl1MzIgbGFuZV9pbmZvOwo+IC0KPiAtCWlmICh0Y19w b3J0ID09IFBPUlRfVENfTk9ORSB8fCBkaWdfcG9ydC0+dGNfdHlwZSAhPSBUQ19QT1JUX1RZUEVD KQo+IC0JCXJldHVybiA0Owo+IC0KPiAtCWxhbmVfaW5mbyA9IDA7Cj4gLQl3aXRoX2ludGVsX2Rp c3BsYXlfcG93ZXIoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9ESVNQTEFZX0NPUkUsIHdha2VyZWYp Cj4gLQkJbGFuZV9pbmZvID0gKEk5MTVfUkVBRChQT1JUX1RYX0RGTEVYRFBTUCkgJgo+IC0JCQkg ICAgIERQX0xBTkVfQVNTSUdOTUVOVF9NQVNLKHRjX3BvcnQpKSA+Pgo+IC0JCQkJRFBfTEFORV9B U1NJR05NRU5UX1NISUZUKHRjX3BvcnQpOwo+IC0KPiAtCXN3aXRjaCAobGFuZV9pbmZvKSB7Cj4g LQlkZWZhdWx0Ogo+IC0JCU1JU1NJTkdfQ0FTRShsYW5lX2luZm8pOwo+IC0JY2FzZSAxOgo+IC0J Y2FzZSAyOgo+IC0JY2FzZSA0Ogo+IC0JY2FzZSA4Ogo+IC0JCXJldHVybiAxOwo+IC0JY2FzZSAz Ogo+IC0JY2FzZSAxMjoKPiAtCQlyZXR1cm4gMjsKPiAtCWNhc2UgMTU6Cj4gLQkJcmV0dXJuIDQ7 Cj4gLQl9Cj4gLX0KPiAtCj4gIC8qIFRoZW9yZXRpY2FsIG1heCBiZXR3ZWVuIHNvdXJjZSBhbmQg c2luayAqLwo+ICBzdGF0aWMgaW50IGludGVsX2RwX21heF9jb21tb25fbGFuZV9jb3VudChzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICB7Cj4gIAlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0 ICppbnRlbF9kaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKPiAgCWludCBzb3Vy Y2VfbWF4ID0gaW50ZWxfZGlnX3BvcnQtPm1heF9sYW5lczsKPiAgCWludCBzaW5rX21heCA9IGRy bV9kcF9tYXhfbGFuZV9jb3VudChpbnRlbF9kcC0+ZHBjZCk7Cj4gLQlpbnQgZmlhX21heCA9IGlu dGVsX2RwX2dldF9maWFfc3VwcG9ydGVkX2xhbmVfY291bnQoaW50ZWxfZHApOwo+ICsJaW50IGZp YV9tYXggPSBpbnRlbF90Y19wb3J0X2ZpYV9tYXhfbGFuZV9jb3VudChpbnRlbF9kaWdfcG9ydCk7 Cj4gIAo+ICAJcmV0dXJuIG1pbjMoc291cmNlX21heCwgc2lua19tYXgsIGZpYV9tYXgpOwo+ICB9 Cj4gQEAgLTUyMzEsMTk1ICs1MTk5LDYgQEAgc3RhdGljIGJvb2wgaWNsX2NvbWJvX3BvcnRfY29u bmVjdGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgCXJldHVybiBJOTE1 X1JFQUQoU0RFSVNSKSAmIFNERV9ERElfSE9UUExVR19JQ1AocG9ydCk7Cj4gIH0KPiAgCj4gLXN0 YXRpYyBjb25zdCBjaGFyICp0Y190eXBlX25hbWUoZW51bSB0Y19wb3J0X3R5cGUgdHlwZSkKPiAt ewo+IC0Jc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuYW1lc1tdID0gewo+IC0JCVtUQ19QT1JU X1VOS05PV05dID0gInVua25vd24iLAo+IC0JCVtUQ19QT1JUX0xFR0FDWV0gPSAibGVnYWN5IiwK PiAtCQlbVENfUE9SVF9UWVBFQ10gPSAidHlwZWMiLAo+IC0JCVtUQ19QT1JUX1RCVF0gPSAidGJ0 IiwKPiAtCX07Cj4gLQo+IC0JaWYgKFdBUk5fT04odHlwZSA+PSBBUlJBWV9TSVpFKG5hbWVzKSkp Cj4gLQkJdHlwZSA9IFRDX1BPUlRfVU5LTk9XTjsKPiAtCj4gLQlyZXR1cm4gbmFtZXNbdHlwZV07 Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGljbF91cGRhdGVfdGNfcG9ydF90eXBlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJCSAgICBzdHJ1Y3QgaW50ZWxfZGlnaXRh bF9wb3J0ICppbnRlbF9kaWdfcG9ydCwKPiAtCQkJCSAgICBib29sIGlzX2xlZ2FjeSwgYm9vbCBp c190eXBlYywgYm9vbCBpc190YnQpCj4gLXsKPiAtCWVudW0gcG9ydCBwb3J0ID0gaW50ZWxfZGln X3BvcnQtPmJhc2UucG9ydDsKPiAtCWVudW0gdGNfcG9ydF90eXBlIG9sZF90eXBlID0gaW50ZWxf ZGlnX3BvcnQtPnRjX3R5cGU7Cj4gLQo+IC0JV0FSTl9PTihpc19sZWdhY3kgKyBpc190eXBlYyAr IGlzX3RidCAhPSAxKTsKPiAtCj4gLQlpZiAoaXNfbGVnYWN5KQo+IC0JCWludGVsX2RpZ19wb3J0 LT50Y190eXBlID0gVENfUE9SVF9MRUdBQ1k7Cj4gLQllbHNlIGlmIChpc190eXBlYykKPiAtCQlp bnRlbF9kaWdfcG9ydC0+dGNfdHlwZSA9IFRDX1BPUlRfVFlQRUM7Cj4gLQllbHNlIGlmIChpc190 YnQpCj4gLQkJaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGUgPSBUQ19QT1JUX1RCVDsKPiAtCWVsc2UK PiAtCQlyZXR1cm47Cj4gLQo+IC0JLyogVHlwZXMgYXJlIG5vdCBzdXBwb3NlZCB0byBiZSBjaGFu Z2VkIGF0IHJ1bnRpbWUuICovCj4gLQlXQVJOX09OKG9sZF90eXBlICE9IFRDX1BPUlRfVU5LTk9X TiAmJgo+IC0JCW9sZF90eXBlICE9IGludGVsX2RpZ19wb3J0LT50Y190eXBlKTsKPiAtCj4gLQlp ZiAob2xkX3R5cGUgIT0gaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGUpCj4gLQkJRFJNX0RFQlVHX0tN UygiUG9ydCAlYyBoYXMgVEMgdHlwZSAlc1xuIiwgcG9ydF9uYW1lKHBvcnQpLAo+IC0JCQkgICAg ICB0Y190eXBlX25hbWUoaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGUpKTsKPiAtfQo+IC0KPiAtLyoK PiAtICogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBDb25u ZWN0IEZsb3cgZGVzY3JpYmVkIGJ5IG91cgo+IC0gKiBzcGVjaWZpY2F0aW9uLCBHZW4xMSBUeXBl QyBQcm9ncmFtbWluZyBjaGFwdGVyLiBUaGUgcmVzdCBvZiB0aGUgZmxvdyAocmVhZGluZwo+IC0g KiBsYW5lcywgRURJRCwgZXRjKSBpcyBkb25lIGFzIG5lZWRlZCBpbiB0aGUgdHlwaWNhbCBwbGFj ZXMuCj4gLSAqCj4gLSAqIFVubGlrZSB0aGUgb3RoZXIgcG9ydHMsIHR5cGUtQyBwb3J0cyBhcmUg bm90IGF2YWlsYWJsZSB0byB1c2UgYXMgc29vbiBhcyB3ZQo+IC0gKiBnZXQgYSBob3RwbHVnLiBU aGUgdHlwZS1DIFBIWXMgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIGNvbnRyb2xsZXJz Ogo+IC0gKiBkaXNwbGF5LCBVU0IsIGV0Yy4gQXMgYSByZXN1bHQsIGhhbmRzaGFraW5nIHRocm91 Z2ggRklBIGlzIHJlcXVpcmVkIGFyb3VuZAo+IC0gKiBjb25uZWN0IGFuZCBkaXNjb25uZWN0IHRv IGNsZWFubHkgdHJhbnNmZXIgb3duZXJzaGlwIHdpdGggdGhlIGNvbnRyb2xsZXIgYW5kCj4gLSAq IHNldCB0aGUgdHlwZS1DIHBvd2VyIHN0YXRlLgo+IC0gKgo+IC0gKiBXZSBjb3VsZCBvcHQgdG8g b25seSBkbyB0aGUgY29ubmVjdCBmbG93IHdoZW4gd2UgYWN0dWFsbHkgdHJ5IHRvIHVzZSB0aGUg QVVYCj4gLSAqIGNoYW5uZWxzIG9yIGRvIGEgbW9kZXNldCwgdGhlbiBpbW1lZGlhdGVseSBydW4g dGhlIGRpc2Nvbm5lY3QgZmxvdyBhZnRlcgo+IC0gKiB1c2FnZSwgYnV0IHRoZXJlIGFyZSBzb21l IGltcGxpY2F0aW9ucyBvbiB0aGlzIGZvciBhIGR5bmFtaWMgZW52aXJvbm1lbnQ6Cj4gLSAqIHRo aW5ncyBtYXkgZ28gYXdheSBvciBjaGFuZ2UgYmVoaW5kIG91ciBiYWNrcy4gU28gZm9yIG5vdyBv dXIgZHJpdmVyIGlzCj4gLSAqIGFsd2F5cyB0cnlpbmcgdG8gYWNxdWlyZSBvd25lcnNoaXAgb2Yg dGhlIGNvbnRyb2xsZXIgYXMgc29vbiBhcyBpdCBnZXRzIGFuCj4gLSAqIGludGVycnVwdCAob3Ig cG9sbHMgc3RhdGUgYW5kIHNlZXMgYSBwb3J0IGlzIGNvbm5lY3RlZCkgYW5kIG9ubHkgZ2l2ZXMg aXQKPiAtICogYmFjayB3aGVuIGl0IHNlZXMgYSBkaXNjb25uZWN0LiBJbXBsZW1lbnRhdGlvbiBv ZiBhIG1vcmUgZmluZS1ncmFpbmVkIG1vZGVsCj4gLSAqIHdpbGwgcmVxdWlyZSBhIGxvdCBvZiBj b29yZGluYXRpb24gd2l0aCB1c2VyIHNwYWNlIGFuZCB0aG9yb3VnaCB0ZXN0aW5nIGZvcgo+IC0g KiB0aGUgZXh0cmEgcG9zc2libGUgY2FzZXMuCj4gLSAqLwo+IC1zdGF0aWMgYm9vbCBpY2xfdGNf cGh5X2Nvbm5lY3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkgICAg ICAgc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQpCj4gLXsKPiAtCWVudW0gdGNf cG9ydCB0Y19wb3J0ID0gaW50ZWxfcG9ydF90b190YyhkZXZfcHJpdiwgZGlnX3BvcnQtPmJhc2Uu cG9ydCk7Cj4gLQl1MzIgdmFsOwo+IC0KPiAtCWlmIChkaWdfcG9ydC0+dGNfdHlwZSAhPSBUQ19Q T1JUX0xFR0FDWSAmJgo+IC0JICAgIGRpZ19wb3J0LT50Y190eXBlICE9IFRDX1BPUlRfVFlQRUMp Cj4gLQkJcmV0dXJuIHRydWU7Cj4gLQo+IC0JdmFsID0gSTkxNV9SRUFEKFBPUlRfVFhfREZMRVhE UFBNUyk7Cj4gLQlpZiAoISh2YWwgJiBEUF9QSFlfTU9ERV9TVEFUVVNfQ09NUExFVEVEKHRjX3Bv cnQpKSkgewo+IC0JCURSTV9ERUJVR19LTVMoIkRQIFBIWSBmb3IgVEMgcG9ydCAlZCBub3QgcmVh ZHlcbiIsIHRjX3BvcnQpOwo+IC0JCVdBUk5fT04oZGlnX3BvcnQtPnRjX2xlZ2FjeV9wb3J0KTsK PiAtCQlyZXR1cm4gZmFsc2U7Cj4gLQl9Cj4gLQo+IC0JLyoKPiAtCSAqIFRoaXMgZnVuY3Rpb24g bWF5IGJlIGNhbGxlZCBtYW55IHRpbWVzIGluIGEgcm93IHdpdGhvdXQgYW4gSFBEIGV2ZW50Cj4g LQkgKiBpbiBiZXR3ZWVuLCBzbyB0cnkgdG8gYXZvaWQgdGhlIHdyaXRlIHdoZW4gd2UgY2FuLgo+ IC0JICovCj4gLQl2YWwgPSBJOTE1X1JFQUQoUE9SVF9UWF9ERkxFWERQQ1NTUyk7Cj4gLQlpZiAo ISh2YWwgJiBEUF9QSFlfTU9ERV9TVEFUVVNfTk9UX1NBRkUodGNfcG9ydCkpKSB7Cj4gLQkJdmFs IHw9IERQX1BIWV9NT0RFX1NUQVRVU19OT1RfU0FGRSh0Y19wb3J0KTsKPiAtCQlJOTE1X1dSSVRF KFBPUlRfVFhfREZMRVhEUENTU1MsIHZhbCk7Cj4gLQl9Cj4gLQo+IC0JLyoKPiAtCSAqIE5vdyB3 ZSBoYXZlIHRvIHJlLWNoZWNrIHRoZSBsaXZlIHN0YXRlLCBpbiBjYXNlIHRoZSBwb3J0IHJlY2Vu dGx5Cj4gLQkgKiBiZWNhbWUgZGlzY29ubmVjdGVkLiBOb3QgbmVjZXNzYXJ5IGZvciBsZWdhY3kg bW9kZS4KPiAtCSAqLwo+IC0JaWYgKGRpZ19wb3J0LT50Y190eXBlID09IFRDX1BPUlRfVFlQRUMg JiYKPiAtCSAgICAhKEk5MTVfUkVBRChQT1JUX1RYX0RGTEVYRFBTUCkgJiBUQ19MSVZFX1NUQVRF X1RDKHRjX3BvcnQpKSkgewo+IC0JCURSTV9ERUJVR19LTVMoIlRDIFBIWSAlZCBzdWRkZW4gZGlz Y29ubmVjdC5cbiIsIHRjX3BvcnQpOwo+IC0JCWljbF90Y19waHlfZGlzY29ubmVjdChkZXZfcHJp diwgZGlnX3BvcnQpOwo+IC0JCXJldHVybiBmYWxzZTsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gdHJ1 ZTsKPiAtfQo+IC0KPiAtLyoKPiAtICogU2VlIHRoZSBjb21tZW50IGF0IHRoZSBjb25uZWN0IGZ1 bmN0aW9uLiBUaGlzIGltcGxlbWVudHMgdGhlIERpc2Nvbm5lY3QKPiAtICogRmxvdy4KPiAtICov Cj4gLXZvaWQgaWNsX3RjX3BoeV9kaXNjb25uZWN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiAtCQkJICAgc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQpCj4g LXsKPiAtCWVudW0gdGNfcG9ydCB0Y19wb3J0ID0gaW50ZWxfcG9ydF90b190YyhkZXZfcHJpdiwg ZGlnX3BvcnQtPmJhc2UucG9ydCk7Cj4gLQo+IC0JaWYgKGRpZ19wb3J0LT50Y190eXBlID09IFRD X1BPUlRfVU5LTk9XTikKPiAtCQlyZXR1cm47Cj4gLQo+IC0JLyoKPiAtCSAqIFRCVCBkaXNjb25u ZWN0aW9uIGZsb3cgaXMgcmVhZCB0aGUgbGl2ZSBzdGF0dXMsIHdoYXQgd2FzIGRvbmUgaW4KPiAt CSAqIGNhbGxlci4KPiAtCSAqLwo+IC0JaWYgKGRpZ19wb3J0LT50Y190eXBlID09IFRDX1BPUlRf VFlQRUMgfHwKPiAtCSAgICBkaWdfcG9ydC0+dGNfdHlwZSA9PSBUQ19QT1JUX0xFR0FDWSkgewo+ IC0JCXUzMiB2YWw7Cj4gLQo+IC0JCXZhbCA9IEk5MTVfUkVBRChQT1JUX1RYX0RGTEVYRFBDU1NT KTsKPiAtCQl2YWwgJj0gfkRQX1BIWV9NT0RFX1NUQVRVU19OT1RfU0FGRSh0Y19wb3J0KTsKPiAt CQlJOTE1X1dSSVRFKFBPUlRfVFhfREZMRVhEUENTU1MsIHZhbCk7Cj4gLQl9Cj4gLQo+IC0JRFJN X0RFQlVHX0tNUygiUG9ydCAlYyBUQyB0eXBlICVzIGRpc2Nvbm5lY3RlZFxuIiwKPiAtCQkgICAg ICBwb3J0X25hbWUoZGlnX3BvcnQtPmJhc2UucG9ydCksCj4gLQkJICAgICAgdGNfdHlwZV9uYW1l KGRpZ19wb3J0LT50Y190eXBlKSk7Cj4gLQo+IC0JZGlnX3BvcnQtPnRjX3R5cGUgPSBUQ19QT1JU X1VOS05PV047Cj4gLX0KPiAtCj4gLS8qCj4gLSAqIFRoZSB0eXBlLUMgcG9ydHMgYXJlIGRpZmZl cmVudCBiZWNhdXNlIGV2ZW4gd2hlbiB0aGV5IGFyZSBjb25uZWN0ZWQsIHRoZXkgbWF5Cj4gLSAq IG5vdCBiZSBhdmFpbGFibGUvdXNhYmxlIGJ5IHRoZSBncmFwaGljcyBkcml2ZXI6IHNlZSB0aGUg Y29tbWVudCBvbgo+IC0gKiBpY2xfdGNfcGh5X2Nvbm5lY3QoKS4gU28gaW4gb3VyIGRyaXZlciBp bnN0ZWFkIG9mIGFkZGluZyB0aGUgYWRkaXRpb25hbAo+IC0gKiBjb25jZXB0IG9mICJ1c2FibGUi IGFuZCBtYWtlIGV2ZXJ5dGhpbmcgY2hlY2sgZm9yICJjb25uZWN0ZWQgYW5kIHVzYWJsZSIgd2UK PiAtICogZGVmaW5lIGEgcG9ydCBhcyAiY29ubmVjdGVkIiB3aGVuIGl0IGlzIG5vdCBvbmx5IGNv bm5lY3RlZCwgYnV0IGFsc28gd2hlbiBpdAo+IC0gKiBpcyB1c2FibGUgYnkgdGhlIHJlc3Qgb2Yg dGhlIGRyaXZlci4gVGhhdCBtYWludGFpbnMgdGhlIG9sZCBhc3N1bXB0aW9uIHRoYXQKPiAtICog Y29ubmVjdGVkIHBvcnRzIGFyZSB1c2FibGUsIGFuZCBhdm9pZHMgZXhwb3NpbmcgdG8gdGhlIHVz ZXJzIG9iamVjdHMgdGhleQo+IC0gKiBjYW4ndCByZWFsbHkgdXNlLgo+IC0gKi8KPiAtc3RhdGlj IGJvb2wgaWNsX3RjX3BvcnRfY29ubmVjdGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiAtCQkJCSAgc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQp Cj4gLXsKPiAtCWVudW0gcG9ydCBwb3J0ID0gaW50ZWxfZGlnX3BvcnQtPmJhc2UucG9ydDsKPiAt CWVudW0gdGNfcG9ydCB0Y19wb3J0ID0gaW50ZWxfcG9ydF90b190YyhkZXZfcHJpdiwgcG9ydCk7 Cj4gLQlib29sIGlzX2xlZ2FjeSwgaXNfdHlwZWMsIGlzX3RidDsKPiAtCXUzMiBkcHNwOwo+IC0K PiAtCS8qCj4gLQkgKiBDb21wbGFpbiBpZiB3ZSBnb3QgYSBsZWdhY3kgcG9ydCBIUEQsIGJ1dCBW QlQgZGlkbid0IG1hcmsgdGhlIHBvcnQgYXMKPiAtCSAqIGxlZ2FjeS4gVHJlYXQgdGhlIHBvcnQg YXMgbGVnYWN5IGZyb20gbm93IG9uLgo+IC0JICovCj4gLQlpZiAoIWludGVsX2RpZ19wb3J0LT50 Y19sZWdhY3lfcG9ydCAmJgo+IC0JICAgIEk5MTVfUkVBRChTREVJU1IpICYgU0RFX1RDX0hPVFBM VUdfSUNQKHRjX3BvcnQpKSB7Cj4gLQkJRFJNX0VSUk9SKCJWQlQgaW5jb3JyZWN0bHkgY2xhaW1z IHBvcnQgJWMgaXMgbm90IFR5cGVDIGxlZ2FjeVxuIiwKPiAtCQkJICBwb3J0X25hbWUocG9ydCkp Owo+IC0JCWludGVsX2RpZ19wb3J0LT50Y19sZWdhY3lfcG9ydCA9IHRydWU7Cj4gLQl9Cj4gLQlp c19sZWdhY3kgPSBpbnRlbF9kaWdfcG9ydC0+dGNfbGVnYWN5X3BvcnQ7Cj4gLQo+IC0JLyoKPiAt CSAqIFRoZSBzcGVjIHNheXMgd2Ugc2hvdWxkbid0IGJlIHVzaW5nIHRoZSBJU1IgYml0cyBmb3Ig ZGV0ZWN0aW5nCj4gLQkgKiBiZXR3ZWVuIFRDIGFuZCBUQlQuIFdlIHNob3VsZCB1c2UgREZMRVhE UFNQLgo+IC0JICovCj4gLQlkcHNwID0gSTkxNV9SRUFEKFBPUlRfVFhfREZMRVhEUFNQKTsKPiAt CWlzX3R5cGVjID0gZHBzcCAmIFRDX0xJVkVfU1RBVEVfVEModGNfcG9ydCk7Cj4gLQlpc190YnQg PSBkcHNwICYgVENfTElWRV9TVEFURV9UQlQodGNfcG9ydCk7Cj4gLQo+IC0JaWYgKCFpc19sZWdh Y3kgJiYgIWlzX3R5cGVjICYmICFpc190YnQpIHsKPiAtCQlpY2xfdGNfcGh5X2Rpc2Nvbm5lY3Qo ZGV2X3ByaXYsIGludGVsX2RpZ19wb3J0KTsKPiAtCj4gLQkJcmV0dXJuIGZhbHNlOwo+IC0JfQo+ IC0KPiAtCWljbF91cGRhdGVfdGNfcG9ydF90eXBlKGRldl9wcml2LCBpbnRlbF9kaWdfcG9ydCwg aXNfbGVnYWN5LCBpc190eXBlYywKPiAtCQkJCWlzX3RidCk7Cj4gLQo+IC0JaWYgKCFpY2xfdGNf cGh5X2Nvbm5lY3QoZGV2X3ByaXYsIGludGVsX2RpZ19wb3J0KSkKPiAtCQlyZXR1cm4gZmFsc2U7 Cj4gLQo+IC0JcmV0dXJuIHRydWU7Cj4gLX0KPiAtCj4gIHN0YXRpYyBib29sIGljbF9kaWdpdGFs X3BvcnRfY29ubmVjdGVkKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKQo+ICB7Cj4gIAlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2Uu ZGV2KTsKPiBAQCAtNTQyOCw3ICs1MjA3LDcgQEAgc3RhdGljIGJvb2wgaWNsX2RpZ2l0YWxfcG9y dF9jb25uZWN0ZWQoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCj4gIAlpZiAoaW50ZWxf cG9ydF9pc19jb21ib3BoeShkZXZfcHJpdiwgZW5jb2Rlci0+cG9ydCkpCj4gIAkJcmV0dXJuIGlj bF9jb21ib19wb3J0X2Nvbm5lY3RlZChkZXZfcHJpdiwgZGlnX3BvcnQpOwo+ICAJZWxzZSBpZiAo aW50ZWxfcG9ydF9pc190YyhkZXZfcHJpdiwgZW5jb2Rlci0+cG9ydCkpCj4gLQkJcmV0dXJuIGlj bF90Y19wb3J0X2Nvbm5lY3RlZChkZXZfcHJpdiwgZGlnX3BvcnQpOwo+ICsJCXJldHVybiBpbnRl bF90Y19wb3J0X2Nvbm5lY3RlZChkaWdfcG9ydCk7Cj4gIAllbHNlCj4gIAkJTUlTU0lOR19DQVNF KGVuY29kZXItPmhwZF9waW4pOwo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZHAuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmgKPiBpbmRleCBk YTcwYjFhNDFjODMuLjY1N2JiYjFmNWVkMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuaAo+ IEBAIC0xMTIsOCArMTEyLDYgQEAgYm9vbCBpbnRlbF9kcF9nZXRfY29sb3JpbWV0cnlfc3RhdHVz KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ICBpbnQgaW50ZWxfZHBfbGlua19yZXF1aXJl ZChpbnQgcGl4ZWxfY2xvY2ssIGludCBicHApOwo+ICBpbnQgaW50ZWxfZHBfbWF4X2RhdGFfcmF0 ZShpbnQgbWF4X2xpbmtfY2xvY2ssIGludCBtYXhfbGFuZXMpOwo+ICBib29sIGludGVsX2RpZ2l0 YWxfcG9ydF9jb25uZWN0ZWQoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpOwo+IC12b2lk IGljbF90Y19waHlfZGlzY29ubmVjdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs Cj4gLQkJCSAgIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0KTsKPiAgCj4gIHN0 YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGludGVsX2RwX3VudXNlZF9sYW5lX21hc2soaW50IGxh bmVfY291bnQpCj4gIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf dGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3RjLmMKPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uN2ExYjU4NzA5NDVmCj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3RjLmMKPiBAQCAtMCwwICsxLDIzMCBA QAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCj4gKy8qCj4gKyAqIENvcHlyaWdo dCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCj4gKyAqLwoKRnJvbSB0aGUgTml0cGlja3MgRGVw YXJ0bWVudCwgcGxlYXNlIGFkZCBhIGJsYW5rIGxpbmUgaGVyZS4KCj4gKyNpbmNsdWRlICJpbnRl bF9kaXNwbGF5LmgiCj4gKyNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ICsjaW5jbHVkZSAiaW50ZWxf dGMuaCIKCkFuZCBzb3J0IHRoZSBpbmNsdWRlcy4KCj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAq dGNfdHlwZV9uYW1lKGVudW0gdGNfcG9ydF90eXBlIHR5cGUpCj4gK3sKPiArCXN0YXRpYyBjb25z dCBjaGFyICogY29uc3QgbmFtZXNbXSA9IHsKPiArCQlbVENfUE9SVF9VTktOT1dOXSA9ICJ1bmtu b3duIiwKPiArCQlbVENfUE9SVF9MRUdBQ1ldID0gImxlZ2FjeSIsCj4gKwkJW1RDX1BPUlRfVFlQ RUNdID0gInR5cGVjIiwKPiArCQlbVENfUE9SVF9UQlRdID0gInRidCIsCj4gKwl9Owo+ICsKPiAr CWlmIChXQVJOX09OKHR5cGUgPj0gQVJSQVlfU0laRShuYW1lcykpKQo+ICsJCXR5cGUgPSBUQ19Q T1JUX1VOS05PV047Cj4gKwo+ICsJcmV0dXJuIG5hbWVzW3R5cGVdOwo+ICt9Cj4gKwo+ICtpbnQg aW50ZWxfdGNfcG9ydF9maWFfbWF4X2xhbmVfY291bnQoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9y dCAqZGlnX3BvcnQpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXYpOwo+ICsJZW51bSB0Y19wb3J0IHRjX3Bv cnQgPSBpbnRlbF9wb3J0X3RvX3RjKGRldl9wcml2LCBkaWdfcG9ydC0+YmFzZS5wb3J0KTsKPiAr CWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ICsJdTMyIGxhbmVfaW5mbzsKPiArCj4gKwlpZiAo dGNfcG9ydCA9PSBQT1JUX1RDX05PTkUgfHwgZGlnX3BvcnQtPnRjX3R5cGUgIT0gVENfUE9SVF9U WVBFQykKPiArCQlyZXR1cm4gNDsKPiArCj4gKwlsYW5lX2luZm8gPSAwOwo+ICsJd2l0aF9pbnRl bF9kaXNwbGF5X3Bvd2VyKGRldl9wcml2LCBQT1dFUl9ET01BSU5fRElTUExBWV9DT1JFLCB3YWtl cmVmKQo+ICsJCWxhbmVfaW5mbyA9IChJOTE1X1JFQUQoUE9SVF9UWF9ERkxFWERQU1ApICYKPiAr CQkJICAgICBEUF9MQU5FX0FTU0lHTk1FTlRfTUFTSyh0Y19wb3J0KSkgPj4KPiArCQkJCURQX0xB TkVfQVNTSUdOTUVOVF9TSElGVCh0Y19wb3J0KTsKPiArCj4gKwlzd2l0Y2ggKGxhbmVfaW5mbykg ewo+ICsJZGVmYXVsdDoKPiArCQlNSVNTSU5HX0NBU0UobGFuZV9pbmZvKTsKPiArCWNhc2UgMToK PiArCWNhc2UgMjoKPiArCWNhc2UgNDoKPiArCWNhc2UgODoKPiArCQlyZXR1cm4gMTsKPiArCWNh c2UgMzoKPiArCWNhc2UgMTI6Cj4gKwkJcmV0dXJuIDI7Cj4gKwljYXNlIDE1Ogo+ICsJCXJldHVy biA0Owo+ICsJfQo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMg dGhlIGZpcnN0IHBhcnQgb2YgdGhlIENvbm5lY3QgRmxvdyBkZXNjcmliZWQgYnkgb3VyCj4gKyAq IHNwZWNpZmljYXRpb24sIEdlbjExIFR5cGVDIFByb2dyYW1taW5nIGNoYXB0ZXIuIFRoZSByZXN0 IG9mIHRoZSBmbG93IChyZWFkaW5nCj4gKyAqIGxhbmVzLCBFRElELCBldGMpIGlzIGRvbmUgYXMg bmVlZGVkIGluIHRoZSB0eXBpY2FsIHBsYWNlcy4KPiArICoKPiArICogVW5saWtlIHRoZSBvdGhl ciBwb3J0cywgdHlwZS1DIHBvcnRzIGFyZSBub3QgYXZhaWxhYmxlIHRvIHVzZSBhcyBzb29uIGFz IHdlCj4gKyAqIGdldCBhIGhvdHBsdWcuIFRoZSB0eXBlLUMgUEhZcyBjYW4gYmUgc2hhcmVkIGJl dHdlZW4gbXVsdGlwbGUgY29udHJvbGxlcnM6Cj4gKyAqIGRpc3BsYXksIFVTQiwgZXRjLiBBcyBh IHJlc3VsdCwgaGFuZHNoYWtpbmcgdGhyb3VnaCBGSUEgaXMgcmVxdWlyZWQgYXJvdW5kCj4gKyAq IGNvbm5lY3QgYW5kIGRpc2Nvbm5lY3QgdG8gY2xlYW5seSB0cmFuc2ZlciBvd25lcnNoaXAgd2l0 aCB0aGUgY29udHJvbGxlciBhbmQKPiArICogc2V0IHRoZSB0eXBlLUMgcG93ZXIgc3RhdGUuCj4g KyAqCj4gKyAqIFdlIGNvdWxkIG9wdCB0byBvbmx5IGRvIHRoZSBjb25uZWN0IGZsb3cgd2hlbiB3 ZSBhY3R1YWxseSB0cnkgdG8gdXNlIHRoZSBBVVgKPiArICogY2hhbm5lbHMgb3IgZG8gYSBtb2Rl c2V0LCB0aGVuIGltbWVkaWF0ZWx5IHJ1biB0aGUgZGlzY29ubmVjdCBmbG93IGFmdGVyCj4gKyAq IHVzYWdlLCBidXQgdGhlcmUgYXJlIHNvbWUgaW1wbGljYXRpb25zIG9uIHRoaXMgZm9yIGEgZHlu YW1pYyBlbnZpcm9ubWVudDoKPiArICogdGhpbmdzIG1heSBnbyBhd2F5IG9yIGNoYW5nZSBiZWhp bmQgb3VyIGJhY2tzLiBTbyBmb3Igbm93IG91ciBkcml2ZXIgaXMKPiArICogYWx3YXlzIHRyeWlu ZyB0byBhY3F1aXJlIG93bmVyc2hpcCBvZiB0aGUgY29udHJvbGxlciBhcyBzb29uIGFzIGl0IGdl dHMgYW4KPiArICogaW50ZXJydXB0IChvciBwb2xscyBzdGF0ZSBhbmQgc2VlcyBhIHBvcnQgaXMg Y29ubmVjdGVkKSBhbmQgb25seSBnaXZlcyBpdAo+ICsgKiBiYWNrIHdoZW4gaXQgc2VlcyBhIGRp c2Nvbm5lY3QuIEltcGxlbWVudGF0aW9uIG9mIGEgbW9yZSBmaW5lLWdyYWluZWQgbW9kZWwKPiAr ICogd2lsbCByZXF1aXJlIGEgbG90IG9mIGNvb3JkaW5hdGlvbiB3aXRoIHVzZXIgc3BhY2UgYW5k IHRob3JvdWdoIHRlc3RpbmcgZm9yCj4gKyAqIHRoZSBleHRyYSBwb3NzaWJsZSBjYXNlcy4KPiAr ICovCj4gK3N0YXRpYyBib29sIGljbF90Y19waHlfY29ubmVjdChzdHJ1Y3QgaW50ZWxfZGlnaXRh bF9wb3J0ICpkaWdfcG9ydCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShkaWdfcG9ydC0+YmFzZS5iYXNlLmRldik7Cj4gKwllbnVtIHRjX3BvcnQg dGNfcG9ydCA9IGludGVsX3BvcnRfdG9fdGMoZGV2X3ByaXYsIGRpZ19wb3J0LT5iYXNlLnBvcnQp Owo+ICsJdTMyIHZhbDsKPiArCj4gKwlpZiAoZGlnX3BvcnQtPnRjX3R5cGUgIT0gVENfUE9SVF9M RUdBQ1kgJiYKPiArCSAgICBkaWdfcG9ydC0+dGNfdHlwZSAhPSBUQ19QT1JUX1RZUEVDKQo+ICsJ CXJldHVybiB0cnVlOwo+ICsKPiArCXZhbCA9IEk5MTVfUkVBRChQT1JUX1RYX0RGTEVYRFBQTVMp Owo+ICsJaWYgKCEodmFsICYgRFBfUEhZX01PREVfU1RBVFVTX0NPTVBMRVRFRCh0Y19wb3J0KSkp IHsKPiArCQlEUk1fREVCVUdfS01TKCJEUCBQSFkgZm9yIFRDIHBvcnQgJWQgbm90IHJlYWR5XG4i LCB0Y19wb3J0KTsKPiArCQlXQVJOX09OKGRpZ19wb3J0LT50Y19sZWdhY3lfcG9ydCk7Cj4gKwkJ cmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBUaGlzIGZ1bmN0aW9uIG1heSBi ZSBjYWxsZWQgbWFueSB0aW1lcyBpbiBhIHJvdyB3aXRob3V0IGFuIEhQRCBldmVudAo+ICsJICog aW4gYmV0d2Vlbiwgc28gdHJ5IHRvIGF2b2lkIHRoZSB3cml0ZSB3aGVuIHdlIGNhbi4KPiArCSAq Lwo+ICsJdmFsID0gSTkxNV9SRUFEKFBPUlRfVFhfREZMRVhEUENTU1MpOwo+ICsJaWYgKCEodmFs ICYgRFBfUEhZX01PREVfU1RBVFVTX05PVF9TQUZFKHRjX3BvcnQpKSkgewo+ICsJCXZhbCB8PSBE UF9QSFlfTU9ERV9TVEFUVVNfTk9UX1NBRkUodGNfcG9ydCk7Cj4gKwkJSTkxNV9XUklURShQT1JU X1RYX0RGTEVYRFBDU1NTLCB2YWwpOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBOb3cgd2UgaGF2 ZSB0byByZS1jaGVjayB0aGUgbGl2ZSBzdGF0ZSwgaW4gY2FzZSB0aGUgcG9ydCByZWNlbnRseQo+ ICsJICogYmVjYW1lIGRpc2Nvbm5lY3RlZC4gTm90IG5lY2Vzc2FyeSBmb3IgbGVnYWN5IG1vZGUu Cj4gKwkgKi8KPiArCWlmIChkaWdfcG9ydC0+dGNfdHlwZSA9PSBUQ19QT1JUX1RZUEVDICYmCj4g KwkgICAgIShJOTE1X1JFQUQoUE9SVF9UWF9ERkxFWERQU1ApICYgVENfTElWRV9TVEFURV9UQyh0 Y19wb3J0KSkpIHsKPiArCQlEUk1fREVCVUdfS01TKCJUQyBQSFkgJWQgc3VkZGVuIGRpc2Nvbm5l Y3QuXG4iLCB0Y19wb3J0KTsKPiArCQlpY2xfdGNfcGh5X2Rpc2Nvbm5lY3QoZGlnX3BvcnQpOwo+ ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiAr LyoKPiArICogU2VlIHRoZSBjb21tZW50IGF0IHRoZSBjb25uZWN0IGZ1bmN0aW9uLiBUaGlzIGlt cGxlbWVudHMgdGhlIERpc2Nvbm5lY3QKPiArICogRmxvdy4KPiArICovCj4gK3ZvaWQgaWNsX3Rj X3BoeV9kaXNjb25uZWN0KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0KQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRpZ19wb3J0 LT5iYXNlLmJhc2UuZGV2KTsKPiArCWVudW0gdGNfcG9ydCB0Y19wb3J0ID0gaW50ZWxfcG9ydF90 b190YyhkZXZfcHJpdiwgZGlnX3BvcnQtPmJhc2UucG9ydCk7Cj4gKwo+ICsJaWYgKGRpZ19wb3J0 LT50Y190eXBlID09IFRDX1BPUlRfVU5LTk9XTikKPiArCQlyZXR1cm47Cj4gKwo+ICsJLyoKPiAr CSAqIFRCVCBkaXNjb25uZWN0aW9uIGZsb3cgaXMgcmVhZCB0aGUgbGl2ZSBzdGF0dXMsIHdoYXQg d2FzIGRvbmUgaW4KPiArCSAqIGNhbGxlci4KPiArCSAqLwo+ICsJaWYgKGRpZ19wb3J0LT50Y190 eXBlID09IFRDX1BPUlRfVFlQRUMgfHwKPiArCSAgICBkaWdfcG9ydC0+dGNfdHlwZSA9PSBUQ19Q T1JUX0xFR0FDWSkgewo+ICsJCXUzMiB2YWw7Cj4gKwo+ICsJCXZhbCA9IEk5MTVfUkVBRChQT1JU X1RYX0RGTEVYRFBDU1NTKTsKPiArCQl2YWwgJj0gfkRQX1BIWV9NT0RFX1NUQVRVU19OT1RfU0FG RSh0Y19wb3J0KTsKPiArCQlJOTE1X1dSSVRFKFBPUlRfVFhfREZMRVhEUENTU1MsIHZhbCk7Cj4g Kwl9Cj4gKwo+ICsJRFJNX0RFQlVHX0tNUygiUG9ydCAlYyBUQyB0eXBlICVzIGRpc2Nvbm5lY3Rl ZFxuIiwKPiArCQkgICAgICBwb3J0X25hbWUoZGlnX3BvcnQtPmJhc2UucG9ydCksCj4gKwkJICAg ICAgdGNfdHlwZV9uYW1lKGRpZ19wb3J0LT50Y190eXBlKSk7Cj4gKwo+ICsJZGlnX3BvcnQtPnRj X3R5cGUgPSBUQ19QT1JUX1VOS05PV047Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGljbF91cGRh dGVfdGNfcG9ydF90eXBlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArCQkJ CSAgICBzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwKPiArCQkJCSAg ICBib29sIGlzX2xlZ2FjeSwgYm9vbCBpc190eXBlYywgYm9vbCBpc190YnQpCj4gK3sKPiArCWVu dW0gcG9ydCBwb3J0ID0gaW50ZWxfZGlnX3BvcnQtPmJhc2UucG9ydDsKPiArCWVudW0gdGNfcG9y dF90eXBlIG9sZF90eXBlID0gaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGU7Cj4gKwo+ICsJV0FSTl9P Tihpc19sZWdhY3kgKyBpc190eXBlYyArIGlzX3RidCAhPSAxKTsKPiArCj4gKwlpZiAoaXNfbGVn YWN5KQo+ICsJCWludGVsX2RpZ19wb3J0LT50Y190eXBlID0gVENfUE9SVF9MRUdBQ1k7Cj4gKwll bHNlIGlmIChpc190eXBlYykKPiArCQlpbnRlbF9kaWdfcG9ydC0+dGNfdHlwZSA9IFRDX1BPUlRf VFlQRUM7Cj4gKwllbHNlIGlmIChpc190YnQpCj4gKwkJaW50ZWxfZGlnX3BvcnQtPnRjX3R5cGUg PSBUQ19QT1JUX1RCVDsKPiArCWVsc2UKPiArCQlyZXR1cm47Cj4gKwo+ICsJLyogVHlwZXMgYXJl IG5vdCBzdXBwb3NlZCB0byBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUuICovCj4gKwlXQVJOX09OKG9s ZF90eXBlICE9IFRDX1BPUlRfVU5LTk9XTiAmJgo+ICsJCW9sZF90eXBlICE9IGludGVsX2RpZ19w b3J0LT50Y190eXBlKTsKPiArCj4gKwlpZiAob2xkX3R5cGUgIT0gaW50ZWxfZGlnX3BvcnQtPnRj X3R5cGUpCj4gKwkJRFJNX0RFQlVHX0tNUygiUG9ydCAlYyBoYXMgVEMgdHlwZSAlc1xuIiwgcG9y dF9uYW1lKHBvcnQpLAo+ICsJCQkgICAgICB0Y190eXBlX25hbWUoaW50ZWxfZGlnX3BvcnQtPnRj X3R5cGUpKTsKPiArfQo+ICsKPiArCj4gKy8qCj4gKyAqIFRoZSB0eXBlLUMgcG9ydHMgYXJlIGRp ZmZlcmVudCBiZWNhdXNlIGV2ZW4gd2hlbiB0aGV5IGFyZSBjb25uZWN0ZWQsIHRoZXkgbWF5Cj4g KyAqIG5vdCBiZSBhdmFpbGFibGUvdXNhYmxlIGJ5IHRoZSBncmFwaGljcyBkcml2ZXI6IHNlZSB0 aGUgY29tbWVudCBvbgo+ICsgKiBpY2xfdGNfcGh5X2Nvbm5lY3QoKS4gU28gaW4gb3VyIGRyaXZl ciBpbnN0ZWFkIG9mIGFkZGluZyB0aGUgYWRkaXRpb25hbAo+ICsgKiBjb25jZXB0IG9mICJ1c2Fi bGUiIGFuZCBtYWtlIGV2ZXJ5dGhpbmcgY2hlY2sgZm9yICJjb25uZWN0ZWQgYW5kIHVzYWJsZSIg d2UKPiArICogZGVmaW5lIGEgcG9ydCBhcyAiY29ubmVjdGVkIiB3aGVuIGl0IGlzIG5vdCBvbmx5 IGNvbm5lY3RlZCwgYnV0IGFsc28gd2hlbiBpdAo+ICsgKiBpcyB1c2FibGUgYnkgdGhlIHJlc3Qg b2YgdGhlIGRyaXZlci4gVGhhdCBtYWludGFpbnMgdGhlIG9sZCBhc3N1bXB0aW9uIHRoYXQKPiAr ICogY29ubmVjdGVkIHBvcnRzIGFyZSB1c2FibGUsIGFuZCBhdm9pZHMgZXhwb3NpbmcgdG8gdGhl IHVzZXJzIG9iamVjdHMgdGhleQo+ICsgKiBjYW4ndCByZWFsbHkgdXNlLgo+ICsgKi8KPiArYm9v bCBpbnRlbF90Y19wb3J0X2Nvbm5lY3RlZChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdf cG9ydCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShkaWdfcG9ydC0+YmFzZS5iYXNlLmRldik7Cj4gKwllbnVtIHBvcnQgcG9ydCA9IGRpZ19wb3J0 LT5iYXNlLnBvcnQ7Cj4gKwllbnVtIHRjX3BvcnQgdGNfcG9ydCA9IGludGVsX3BvcnRfdG9fdGMo ZGV2X3ByaXYsIHBvcnQpOwo+ICsJYm9vbCBpc19sZWdhY3ksIGlzX3R5cGVjLCBpc190YnQ7Cj4g Kwl1MzIgZHBzcDsKPiArCj4gKwkvKgo+ICsJICogQ29tcGxhaW4gaWYgd2UgZ290IGEgbGVnYWN5 IHBvcnQgSFBELCBidXQgVkJUIGRpZG4ndCBtYXJrIHRoZSBwb3J0IGFzCj4gKwkgKiBsZWdhY3ku IFRyZWF0IHRoZSBwb3J0IGFzIGxlZ2FjeSBmcm9tIG5vdyBvbi4KPiArCSAqLwo+ICsJaWYgKCFk aWdfcG9ydC0+dGNfbGVnYWN5X3BvcnQgJiYKPiArCSAgICBJOTE1X1JFQUQoU0RFSVNSKSAmIFNE RV9UQ19IT1RQTFVHX0lDUCh0Y19wb3J0KSkgewo+ICsJCURSTV9FUlJPUigiVkJUIGluY29ycmVj dGx5IGNsYWltcyBwb3J0ICVjIGlzIG5vdCBUeXBlQyBsZWdhY3lcbiIsCj4gKwkJCSAgcG9ydF9u YW1lKHBvcnQpKTsKPiArCQlkaWdfcG9ydC0+dGNfbGVnYWN5X3BvcnQgPSB0cnVlOwo+ICsJfQo+ ICsJaXNfbGVnYWN5ID0gZGlnX3BvcnQtPnRjX2xlZ2FjeV9wb3J0Owo+ICsKPiArCS8qCj4gKwkg KiBUaGUgc3BlYyBzYXlzIHdlIHNob3VsZG4ndCBiZSB1c2luZyB0aGUgSVNSIGJpdHMgZm9yIGRl dGVjdGluZwo+ICsJICogYmV0d2VlbiBUQyBhbmQgVEJULiBXZSBzaG91bGQgdXNlIERGTEVYRFBT UC4KPiArCSAqLwo+ICsJZHBzcCA9IEk5MTVfUkVBRChQT1JUX1RYX0RGTEVYRFBTUCk7Cj4gKwlp c190eXBlYyA9IGRwc3AgJiBUQ19MSVZFX1NUQVRFX1RDKHRjX3BvcnQpOwo+ICsJaXNfdGJ0ID0g ZHBzcCAmIFRDX0xJVkVfU1RBVEVfVEJUKHRjX3BvcnQpOwo+ICsKPiArCWlmICghaXNfbGVnYWN5 ICYmICFpc190eXBlYyAmJiAhaXNfdGJ0KSB7Cj4gKwkJaWNsX3RjX3BoeV9kaXNjb25uZWN0KGRp Z19wb3J0KTsKPiArCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiArCWljbF91cGRhdGVf dGNfcG9ydF90eXBlKGRldl9wcml2LCBkaWdfcG9ydCwgaXNfbGVnYWN5LCBpc190eXBlYywKPiAr CQkJCWlzX3RidCk7Cj4gKwo+ICsJaWYgKCFpY2xfdGNfcGh5X2Nvbm5lY3QoZGlnX3BvcnQpKQo+ ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3RjLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAw MC4uOTRjNjJhYzRhMTYyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3RjLmgKPiBAQCAtMCwwICsxLDEzIEBACgpTUERYIGhlYWRlciBoZXJlIHBsZWFz ZS4KCj4gKyNpZm5kZWYgX19JTlRFTF9UQ19IX18KPiArI2RlZmluZSBfX0lOVEVMX1RDX0hfXwo+ ICsKPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gKwo+ICtzdHJ1Y3QgaW50ZWxfZGlnaXRh bF9wb3J0Owo+ICsKPiArdm9pZCBpY2xfdGNfcGh5X2Rpc2Nvbm5lY3Qoc3RydWN0IGludGVsX2Rp Z2l0YWxfcG9ydCAqZGlnX3BvcnQpOwoKSSdkIGxpa2UgdG8gc2VlIHRoaXMgbmFtZWQgaW50ZWxf dGNfKiBpbiB0aGUgZnV0dXJlLgoKQlIsCkphbmkuCgoKPiArCj4gK2Jvb2wgaW50ZWxfdGNfcG9y dF9jb25uZWN0ZWQoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQpOwo+ICtpbnQg aW50ZWxfdGNfcG9ydF9maWFfbWF4X2xhbmVfY291bnQoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9y dCAqZGlnX3BvcnQpOwo+ICsKPiArI2VuZGlmIC8qIF9fSU5URUxfVENfSF9fICovCgotLSAKSmFu aSBOaWt1bGEsIEludGVsIE9wZW4gU291cmNlIEdyYXBoaWNzIENlbnRlcgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=