From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v4 2/2] drm/dp: Add a drm_aux-dev module for reading/writing dpcd registers. Date: Tue, 29 Sep 2015 17:09:23 +0300 Message-ID: <20150929140923.GY26517@intel.com> References: <1443483936-2348-1-git-send-email-rafael.antognolli@intel.com> <1443483936-2348-3-git-send-email-rafael.antognolli@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1443483936-2348-3-git-send-email-rafael.antognolli@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Rafael Antognolli Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBTZXAgMjgsIDIwMTUgYXQgMDQ6NDU6MzZQTSAtMDcwMCwgUmFmYWVsIEFudG9nbm9s bGkgd3JvdGU6Cj4gVGhpcyBtb2R1bGUgaXMgaGVhdmlseSBiYXNlZCBvbiBpMmMtZGV2LiBPbmNl IGxvYWRlZCwgaXQgcHJvdmlkZXMgb25lCj4gZGV2IG5vZGUgcGVyIERQIEFVWCBjaGFubmVsLCBu YW1lZCBkcm1fZHBfYXV4Tiwgd2hlcmUgTiBpcyBhbiBpbnRlZ2VyLgo+IAo+IEl0J3MgcG9zc2li bGUgdG8ga25vdyB3aGljaCBjb25uZWN0b3Igb3ducyB0aGlzIGF1eCBjaGFubmVsIGJ5IGxvb2tp bmcKPiBhdCB0aGUgcmVzcGVjdGl2ZSBzeXNmcyAvc3lzL2NsYXNzL2RybV9hdXhfZGV2L2RybV9k cF9hdXhOL2Nvbm5lY3RvciwgaWYKPiB0aGUgY29ubmVjdG9yIGRldmljZSBwb2ludGVyIHdhcyBj b3JyZWN0bHkgc2V0IGluIHRoZSBhdXggaGVscGVyIHN0cnVjdC4KPiAKPiBUd28gbWFpbiBvcGVy YXRpb25zIGFyZSBwcm92aWRlZCBvbiB0aGUgcmVnaXN0ZXJzIHJlYWQgYW5kIHdyaXRlLiBUaGUK PiBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciB0byBiZSByZWFkIG9yIHdyaXR0ZW4gaXMgZ2l2ZW4g dXNpbmcgbHNlZWsuIFRoZQo+IHNlZWsgcG9zaXRpb24gaXMgdXBkYXRlZCB1cG9uIHJlYWQgb3Ig d3JpdGUuCj4gCj4gU2lnbmVkLW9mZi1ieTogUmFmYWVsIEFudG9nbm9sbGkgPHJhZmFlbC5hbnRv Z25vbGxpQGludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAg ICAgfCAgIDggKwo+ICBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICB8ICAgMSArCj4g IGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfYXV4X2Rldi5jIHwgMzU3ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5j ICB8ICAgNSArCj4gIGluY2x1ZGUvZHJtL2RybV9kcF9hdXhfZGV2LmggICAgIHwgIDUwICsrKysr Kwo+ICA1IGZpbGVzIGNoYW5nZWQsIDQyMSBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2F1eF9kZXYuYwo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgaW5jbHVkZS9kcm0vZHJtX2RwX2F1eF9kZXYuaAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gaW5kZXggMWEwYThk Zi4uNjRmYTBmNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gQEAgLTI1LDYgKzI1LDE0IEBAIGNvbmZpZyBEUk1f TUlQSV9EU0kKPiAgCWJvb2wKPiAgCWRlcGVuZHMgb24gRFJNCj4gIAo+ICtjb25maWcgRFJNX0RQ X0FVWF9DSEFSREVWCj4gKwlib29sICJEUk0gRFAgQVVYIEludGVyZmFjZSIKPiArCWRlcGVuZHMg b24gRFJNCj4gKwloZWxwCj4gKwkgIENob29zZSB0aGlzIG9wdGlvbiB0byBlbmFibGUgYSAvZGV2 L2RybV9kcF9hdXhOIG5vZGUgdGhhdCBhbGxvd3MgdG8KPiArCSAgcmVhZCBhbmQgd3JpdGUgdmFs dWVzIHRvIGFyYml0cmFyeSBEUENEIHJlZ2lzdGVycyBvbiB0aGUgRFAgYXV4Cj4gKwkgIGNoYW5u ZWwuCj4gKwo+ICBjb25maWcgRFJNX0tNU19IRUxQRVIKPiAgCXRyaXN0YXRlCj4gIAlkZXBlbmRz IG9uIERSTQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJz L2dwdS9kcm0vTWFrZWZpbGUKPiBpbmRleCA0NWU3NzE5Li5lNWFlN2YwIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmls ZQo+IEBAIC0yNSw2ICsyNSw3IEBAIGRybV9rbXNfaGVscGVyLXkgOj0gZHJtX2NydGNfaGVscGVy Lm8gZHJtX2RwX2hlbHBlci5vIGRybV9wcm9iZV9oZWxwZXIubyBcCj4gIGRybV9rbXNfaGVscGVy LSQoQ09ORklHX0RSTV9MT0FEX0VESURfRklSTVdBUkUpICs9IGRybV9lZGlkX2xvYWQubwo+ICBk cm1fa21zX2hlbHBlci0kKENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKSArPSBkcm1fZmJfaGVs cGVyLm8KPiAgZHJtX2ttc19oZWxwZXItJChDT05GSUdfRFJNX0tNU19DTUFfSEVMUEVSKSArPSBk cm1fZmJfY21hX2hlbHBlci5vCj4gK2RybV9rbXNfaGVscGVyLSQoQ09ORklHX0RSTV9EUF9BVVhf Q0hBUkRFVikgKz0gZHJtX2RwX2F1eF9kZXYubwo+ICAKPiAgb2JqLSQoQ09ORklHX0RSTV9LTVNf SEVMUEVSKSArPSBkcm1fa21zX2hlbHBlci5vCj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2RwX2F1eF9kZXYuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfYXV4X2Rldi5j Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5lMzM3MDgxCj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfYXV4X2Rldi5jCj4gQEAgLTAs MCArMSwzNTcgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29ycG9yYXRp b24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiAr ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICogQXV0aG9yczoKPiArICog ICAgUmFmYWVsIEFudG9nbm9sbGkgPHJhZmFlbC5hbnRvZ25vbGxpQGludGVsLmNvbT4KPiArICoK PiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9mcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW5p dC5oPgo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KPiArI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Rw X2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gKwo+ICtzdHJ1Y3QgZHJt X2RwX2F1eF9kZXYgewo+ICsJc3RydWN0IGxpc3RfaGVhZCBsaXN0Owo+ICsJdW5zaWduZWQgaW5k ZXg7Cj4gKwlzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4Owo+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ ICt9Owo+ICsKPiArI2RlZmluZSBEUk1fQVVYX01JTk9SUwkyNTYKPiArc3RhdGljIGludCBhdXhf bWF4X29mZnNldCA9IDEgPDwgMjA7CgpQZW9wbGUgc2VlbSB0byBwcmVmZXIgZGVmaW5lcyBmb3Ig c3VjaCB0aGluZ3MuCgo+ICtzdGF0aWMgaW50IGRybV9kcF9hdXhfZGV2X2NvdW50ID0gMDsKPiAr c3RhdGljIExJU1RfSEVBRChkcm1fZHBfYXV4X2Rldl9saXN0KTsKPiArc3RhdGljIERFRklORV9T UElOTE9DSyhkcm1fZHBfYXV4X2Rldl9saXN0X2xvY2spOwo+ICsKPiArc3RhdGljIHN0cnVjdCBk cm1fZHBfYXV4X2RldiAqZHJtX2RwX2F1eF9kZXZfZ2V0X2J5X21pbm9yKHVuc2lnbmVkIGluZGV4 KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXY7Cj4gKwo+ICsJc3Bpbl9s b2NrKCZkcm1fZHBfYXV4X2Rldl9saXN0X2xvY2spOwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShh dXhfZGV2LCAmZHJtX2RwX2F1eF9kZXZfbGlzdCwgbGlzdCkgewo+ICsJCWlmIChhdXhfZGV2LT5p bmRleCA9PSBpbmRleCkKPiArCQkJZ290byBmb3VuZDsKPiArCX0KPiArCj4gKwlhdXhfZGV2ID0g TlVMTDsKPiArZm91bmQ6Cj4gKwlzcGluX3VubG9jaygmZHJtX2RwX2F1eF9kZXZfbGlzdF9sb2Nr KTsKPiArCXJldHVybiBhdXhfZGV2Owo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9kcF9h dXhfZGV2ICpkcm1fZHBfYXV4X2Rldl9nZXRfYnlfYXV4KHN0cnVjdCBkcm1fZHBfYXV4ICphdXgp Cj4gK3sKPiArCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldjsKPiArCj4gKwlzcGluX2xv Y2soJmRybV9kcF9hdXhfZGV2X2xpc3RfbG9jayk7Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGF1 eF9kZXYsICZkcm1fZHBfYXV4X2Rldl9saXN0LCBsaXN0KSB7Cj4gKwkJaWYgKGF1eF9kZXYtPmF1 eCA9PSBhdXgpCj4gKwkJCWdvdG8gZm91bmQ7Cj4gKwl9Cj4gKwo+ICsJYXV4X2RldiA9IE5VTEw7 Cj4gK2ZvdW5kOgo+ICsJc3Bpbl91bmxvY2soJmRybV9kcF9hdXhfZGV2X2xpc3RfbG9jayk7Cj4g KwlyZXR1cm4gYXV4X2RldjsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1fZHBfYXV4X2Rl diAqZ2V0X2ZyZWVfZHJtX2RwX2F1eF9kZXYoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiArewo+ ICsJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2Owo+ICsJaW50IGluZGV4Owo+ICsKPiAr CXNwaW5fbG9jaygmZHJtX2RwX2F1eF9kZXZfbGlzdF9sb2NrKTsKPiArCWluZGV4ID0gZHJtX2Rw X2F1eF9kZXZfY291bnQ7Cj4gKwlzcGluX3VubG9jaygmZHJtX2RwX2F1eF9kZXZfbGlzdF9sb2Nr KTsKPiArCWlmIChpbmRleCA+PSBEUk1fQVVYX01JTk9SUykgewo+ICsJCXByaW50ayhLRVJOX0VS UiAiZHJtX2RwX2F1eF9kZXY6IE91dCBvZiBkZXZpY2UgbWlub3JzICglZClcbiIsCj4gKwkJICAg ICAgIGluZGV4KTsKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKPiArCX0KPiArCj4gKwlh dXhfZGV2ID0ga3phbGxvYyhzaXplb2YoKmF1eF9kZXYpLCBHRlBfS0VSTkVMKTsKPiArCWlmICgh YXV4X2RldikKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCWF1eF9kZXYtPmF1eCA9 IGF1eDsKPiArCWF1eF9kZXYtPmluZGV4ID0gaW5kZXg7Cj4gKwo+ICsJc3Bpbl9sb2NrKCZkcm1f ZHBfYXV4X2Rldl9saXN0X2xvY2spOwo+ICsJZHJtX2RwX2F1eF9kZXZfY291bnQrKzsKClRoYXQn cyByYWN5LiBTb21lb25lIGVsc2UgY291bGQgaGF2ZSBzbnVjayBpbiBhbmQgcHVzaGVkCmRybV9k cF9hdXhfZGV2X2NvdW50IG92ZXIgdGhlIGxpbWl0IGFscmVhZHkuCgpNYXliZSB3ZSB3YW50IHRv IHVzZSBhbiBpZHIgb3Igc29tZXRoaW5nIHRvIGFsbG9jYXRlIHRoZQppbmRleD8KCj4gKwlsaXN0 X2FkZF90YWlsKCZhdXhfZGV2LT5saXN0LCAmZHJtX2RwX2F1eF9kZXZfbGlzdCk7Cj4gKwlzcGlu X3VubG9jaygmZHJtX2RwX2F1eF9kZXZfbGlzdF9sb2NrKTsKPiArCXJldHVybiBhdXhfZGV2Owo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCByZXR1cm5fZHJtX2RwX2F1eF9kZXYoc3RydWN0IGRybV9k cF9hdXhfZGV2ICphdXhfZGV2KQo+ICt7Cj4gKwlzcGluX2xvY2soJmRybV9kcF9hdXhfZGV2X2xp c3RfbG9jayk7Cj4gKwlsaXN0X2RlbCgmYXV4X2Rldi0+bGlzdCk7Cj4gKwlzcGluX3VubG9jaygm ZHJtX2RwX2F1eF9kZXZfbGlzdF9sb2NrKTsKPiArCWtmcmVlKGF1eF9kZXYpOwo+ICt9CgpJJ20g bm90IGEgZmFuIG9mIHRoZSBnZXRfZnJlZSAmIHJldHVybiBuYW1lcy4gTWF5YmUganVzdCBhbGxv Yy9mcmVlPwoKPiArCj4gK3N0YXRpYyBzc2l6ZV90IG5hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpk ZXYsCj4gKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXYgPQo+ICsJCWRybV9kcF9hdXhfZGV2 X2dldF9ieV9taW5vcihNSU5PUihkZXYtPmRldnQpKTsKPiArCj4gKwlpZiAoIWF1eF9kZXYpCj4g KwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgYXV4X2Rl di0+YXV4LT5uYW1lKTsKPiArfQo+ICtzdGF0aWMgREVWSUNFX0FUVFJfUk8obmFtZSk7Cj4gKwo+ ICtzdGF0aWMgc3NpemVfdCBjb25uZWN0b3Jfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gKwkJ CSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gK3sKPiAr CXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldiA9Cj4gKwkJZHJtX2RwX2F1eF9kZXZfZ2V0 X2J5X21pbm9yKE1JTk9SKGRldi0+ZGV2dCkpOwo+ICsJc3RydWN0IGRybV9kcF9hdXggKmF1eDsK PiArCXN0cnVjdCBkZXZpY2UgKmNvbm5fZGV2Owo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciA9IE5VTEw7Cj4gKwo+ICsJaWYgKCFhdXhfZGV2KQo+ICsJCXJldHVybiAtRU5PREVW Owo+ICsJYXV4ID0gYXV4X2Rldi0+YXV4Owo+ICsJY29ubl9kZXYgPSBhdXgtPmNvbm5lY3RvcjsK PiArCWlmICghY29ubl9kZXYpCj4gKwkJcmV0dXJuIHNwcmludGYoYnVmLCAidW5rbm93blxuIik7 Cj4gKwo+ICsJY29ubmVjdG9yID0gZGV2X2dldF9kcnZkYXRhKGF1eC0+Y29ubmVjdG9yKTsKPiAr Cj4gKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgY29ubmVjdG9yLT5uYW1lKTsKPiArfQo+ ICtzdGF0aWMgREVWSUNFX0FUVFJfUk8oY29ubmVjdG9yKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3Qg YXR0cmlidXRlICpkcm1fZHBfYXV4X2F0dHJzW10gPSB7Cj4gKwkmZGV2X2F0dHJfbmFtZS5hdHRy LAo+ICsJJmRldl9hdHRyX2Nvbm5lY3Rvci5hdHRyLAo+ICsJTlVMTCwKPiArfTsKPiArQVRUUklC VVRFX0dST1VQUyhkcm1fZHBfYXV4KTsKPiArCj4gK3N0YXRpYyBpbnQgYXV4ZGV2X29wZW4oc3Ry dWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCj4gK3sKPiArCXVuc2lnbmVkIGlu dCBtaW5vciA9IGltaW5vcihpbm9kZSk7Cj4gKwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9k ZXY7Cj4gKwo+ICsJYXV4X2RldiA9IGRybV9kcF9hdXhfZGV2X2dldF9ieV9taW5vcihtaW5vcik7 Cj4gKwlpZiAoIWF1eF9kZXYpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJZmlsZS0+cHJp dmF0ZV9kYXRhID0gYXV4X2RldjsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgbG9m Zl90IGF1eGRldl9sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCB3 aGVuY2UpCj4gK3sKPiArCXJldHVybiBmaXhlZF9zaXplX2xsc2VlayhmaWxlLCBvZmZzZXQsIHdo ZW5jZSwgYXV4X21heF9vZmZzZXQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVfdCBhdXhkZXZf cmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAo+ ICsJCQkgICBsb2ZmX3QgKm9mZnNldCkKPiArewo+ICsJc3NpemVfdCBieXRlc19wZW5kaW5nLCBu dW1fYnl0ZXNfcHJvY2Vzc2VkID0gMDsKPiArCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2Rl diA9IGZpbGUtPnByaXZhdGVfZGF0YTsKPiArCj4gKwlieXRlc19wZW5kaW5nID0gYXV4X21heF9v ZmZzZXQgLSAqb2Zmc2V0Owo+ICsJYnl0ZXNfcGVuZGluZyA9IGNvdW50IDwgYnl0ZXNfcGVuZGlu ZyA/IGNvdW50IDogYnl0ZXNfcGVuZGluZzsKCkkgd291bGQgd3JpdGUgaXQgYXMKYnl0ZXNfcGVu ZGluZyA9IG1pbihjb3VudCwgYXV4X21heF9vZmZzZXQgLSAqb2Zmc2V0KTsKCj4gKwlpZiAoYnl0 ZXNfcGVuZGluZyA8IDApCj4gKwkJcmV0dXJuIC1FRkFVTFQ7CgpDYW4gdGhpcyBhY3R1YWxseSBo YXBwZW4gc29tZWhvdz8KCj4gKwo+ICsJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBidWYs IGJ5dGVzX3BlbmRpbmcpKQo+ICsJCXJldHVybiAtRUZBVUxUOwo+ICsKPiArCXdoaWxlIChieXRl c19wZW5kaW5nID4gMCkgewo+ICsJCXVpbnQ4X3QgbG9jYWxidWZbRFBfQVVYX01BWF9QQVlMT0FE X0JZVEVTXTsKPiArCQlzc2l6ZV90IHRvZG8gPSBzaXplb2YobG9jYWxidWYpOwo+ICsJCXNzaXpl X3QgcmVzOwo+ICsJCXRvZG8gPSBieXRlc19wZW5kaW5nIDwgdG9kbyA/IGJ5dGVzX3BlbmRpbmcg OiB0b2RvOwoKV291bGQgd3JpdGUgaXQgYXMKdG9kbyA9IG1pbihieXRlc19wZW5kaW5nLCBzaXpl b2YobG9jYWxidWYpKTsKCj4gKwo+ICsJCXJlcyA9IGRybV9kcF9kcGNkX3JlYWQoYXV4X2Rldi0+ YXV4LCAqb2Zmc2V0LCBsb2NhbGJ1ZiwgdG9kbyk7Cj4gKwkJaWYgKHJlcyA8PSAwKSB7Cj4gKwkJ CXJldHVybiBudW1fYnl0ZXNfcHJvY2Vzc2VkID8gbnVtX2J5dGVzX3Byb2Nlc3NlZCA6IHJlczsK PiArCQl9CgpDb3VsZCBkcm9wIHRoZSBleHRyYSB7fQoKPiArCQlpZiAoX19jb3B5X3RvX3VzZXIo YnVmICsgbnVtX2J5dGVzX3Byb2Nlc3NlZCwgbG9jYWxidWYsIHJlcykpIHsKPiArCQkJcmV0dXJu IG51bV9ieXRlc19wcm9jZXNzZWQgPwo+ICsJCQkJbnVtX2J5dGVzX3Byb2Nlc3NlZCA6IC1FRkFV TFQ7Cj4gKwkJfQoKZGl0dG8KCj4gKwkJYnl0ZXNfcGVuZGluZyAtPSByZXM7Cj4gKwkJKm9mZnNl dCArPSByZXM7Cj4gKwkJbnVtX2J5dGVzX3Byb2Nlc3NlZCArPSByZXM7Cj4gKwl9Cj4gKwo+ICsJ cmV0dXJuIG51bV9ieXRlc19wcm9jZXNzZWQ7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IGF1 eGRldl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKPiAr CQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzZXQpCj4gK3sKPiArCXNzaXplX3QgYnl0 ZXNfcGVuZGluZywgbnVtX2J5dGVzX3Byb2Nlc3NlZCA9IDA7Cj4gKwlzdHJ1Y3QgZHJtX2RwX2F1 eF9kZXYgKmF1eF9kZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Cj4gKwo+ICsJYnl0ZXNfcGVuZGlu ZyA9IGF1eF9tYXhfb2Zmc2V0IC0gKm9mZnNldDsKPiArCWJ5dGVzX3BlbmRpbmcgPSBjb3VudCA8 IGJ5dGVzX3BlbmRpbmcgPyBjb3VudCA6IGJ5dGVzX3BlbmRpbmc7Cj4gKwlpZiAoYnl0ZXNfcGVu ZGluZyA8IDApCj4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4gKwo+ICsJaWYgKCFhY2Nlc3Nfb2soVkVS SUZZX1JFQUQsIGJ1ZiwgYnl0ZXNfcGVuZGluZykpCj4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4gKwo+ ICsJd2hpbGUgKGJ5dGVzX3BlbmRpbmcgPiAwKSB7Cj4gKwkJdWludDhfdCBsb2NhbGJ1ZltEUF9B VVhfTUFYX1BBWUxPQURfQllURVNdOwo+ICsJCXNzaXplX3QgdG9kbyA9IHNpemVvZihsb2NhbGJ1 Zik7Cj4gKwkJc3NpemVfdCByZXM7Cj4gKwkJdG9kbyA9IGJ5dGVzX3BlbmRpbmcgPCB0b2RvID8g Ynl0ZXNfcGVuZGluZyA6IHRvZG87Cj4gKwkJaWYgKF9fY29weV9mcm9tX3VzZXIobG9jYWxidWYs Cj4gKwkJCQkgICAgIGJ1ZiArIG51bV9ieXRlc19wcm9jZXNzZWQsIHRvZG8pKSB7Cj4gKwkJCXJl dHVybiBudW1fYnl0ZXNfcHJvY2Vzc2VkID8KPiArCQkJCW51bV9ieXRlc19wcm9jZXNzZWQgOiAt RUZBVUxUOwo+ICsJCX0KPiArCj4gKwkJcmVzID0gZHJtX2RwX2RwY2Rfd3JpdGUoYXV4X2Rldi0+ YXV4LCAqb2Zmc2V0LCBsb2NhbGJ1ZiwgdG9kbyk7Cj4gKwkJaWYgKHJlcyA8PSAwKSB7Cj4gKwkJ CXJldHVybiBudW1fYnl0ZXNfcHJvY2Vzc2VkID8gbnVtX2J5dGVzX3Byb2Nlc3NlZCA6IHJlczsK PiArCQl9CgpzYW1lIGNvbW1lbnRzIGZvciB3cml0ZSBhcyBmb3IgcmVhZC4KCj4gKwkJYnl0ZXNf cGVuZGluZyAtPSByZXM7Cj4gKwkJKm9mZnNldCArPSByZXM7Cj4gKwkJbnVtX2J5dGVzX3Byb2Nl c3NlZCArPSByZXM7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIG51bV9ieXRlc19wcm9jZXNzZWQ7Cj4g K30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF1eGRldl9mb3Bz ID0gewo+ICsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAo+ICsJLmxsc2VlawkJPSBhdXhkZXZfbGxz ZWVrLAo+ICsJLnJlYWQJCT0gYXV4ZGV2X3JlYWQsCj4gKwkud3JpdGUJCT0gYXV4ZGV2X3dyaXRl LAo+ICsJLm9wZW4JCT0gYXV4ZGV2X29wZW4sCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGNs YXNzICpkcm1fZHBfYXV4X2Rldl9jbGFzczsKPiArc3RhdGljIGludCBkcm1fZGV2X21ham9yID0g LTE7Cj4gKwo+ICsjZGVmaW5lIHRvX2F1eGRldihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IGRy bV9kcF9hdXhfZGV2LCBhdXgpCj4gKwo+ICsvKioKPiArICogZHJtX2RwX2F1eF9yZWdpc3Rlcl9k ZXZub2RlKCkgLSByZWdpc3RlciBhIGRldm5vZGUgZm9yIHRoaXMgYXV4IGNoYW5uZWwKPiArICog QGF1eDogRGlzcGxheVBvcnQgQVVYIGNoYW5uZWwKPiArICoKPiArICogUmV0dXJucyAwIG9uIHN1 Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAqLwo+ICtpbnQg ZHJtX2RwX2F1eF9yZWdpc3Rlcl9kZXZub2RlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4gK3sK PiArCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldjsKPiArCWludCByZXM7Cj4gKwo+ICsJ YXV4X2RldiA9IGdldF9mcmVlX2RybV9kcF9hdXhfZGV2KGF1eCk7Cj4gKwlpZiAoSVNfRVJSKGF1 eF9kZXYpKQo+ICsJCXJldHVybiBQVFJfRVJSKGF1eF9kZXYpOwo+ICsKPiArCWF1eF9kZXYtPmRl diA9IGRldmljZV9jcmVhdGUoZHJtX2RwX2F1eF9kZXZfY2xhc3MsIGF1eC0+ZGV2LAo+ICsJCQkJ ICAgICBNS0RFVihkcm1fZGV2X21ham9yLCBhdXhfZGV2LT5pbmRleCksIE5VTEwsCj4gKwkJCQkg ICAgICJkcm1fZHBfYXV4JWQiLCBhdXhfZGV2LT5pbmRleCk7Cj4gKwlpZiAoSVNfRVJSKGF1eF9k ZXYtPmRldikpIHsKPiArCQlyZXMgPSBQVFJfRVJSKGF1eF9kZXYtPmRldik7Cj4gKwkJZ290byBl cnJvcjsKPiArCX0KPiArCj4gKwlwcl9kZWJ1ZygiZHJtX2RwX2F1eF9kZXY6IGF1eCBbJXNdIHJl Z2lzdGVyZWQgYXMgbWlub3IgJWRcbiIsCj4gKwkJIGF1eC0+bmFtZSwgYXV4X2Rldi0+aW5kZXgp Owo+ICsJcmV0dXJuIDA7Cj4gK2Vycm9yOgo+ICsJcmV0dXJuX2RybV9kcF9hdXhfZGV2KGF1eF9k ZXYpOwo+ICsJcmV0dXJuIHJlczsKPiArCj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcm1fZHBfYXV4 X3VucmVnaXN0ZXJfZGV2bm9kZSgpIC0gdW5yZWdpc3RlciBhIGRldm5vZGUgZm9yIHRoaXMgYXV4 IGNoYW5uZWwKPiArICogQGF1eDogRGlzcGxheVBvcnQgQVVYIGNoYW5uZWwKPiArICoKPiArICog UmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUu Cj4gKyAqLwo+ICtpbnQgZHJtX2RwX2F1eF91bnJlZ2lzdGVyX2Rldm5vZGUoc3RydWN0IGRybV9k cF9hdXggKmF1eCkKPiArewo+ICsJaW50IG1pbm9yOwo+ICsJc3RydWN0IGRybV9kcF9hdXhfZGV2 ICphdXhfZGV2Owo+ICsKPiArCWF1eF9kZXYgPSBkcm1fZHBfYXV4X2Rldl9nZXRfYnlfYXV4KGF1 eCk7Cj4gKwlpZiAoIWF1eF9kZXYpIC8qIGF0dGFjaCBtdXN0IGhhdmUgZmFpbGVkICovCj4gKwkJ cmV0dXJuIDA7Cj4gKwo+ICsJbWlub3IgPSBhdXhfZGV2LT5pbmRleDsKPiArCXJldHVybl9kcm1f ZHBfYXV4X2RldihhdXhfZGV2KTsKPiArCWRldmljZV9kZXN0cm95KGRybV9kcF9hdXhfZGV2X2Ns YXNzLCBNS0RFVihkcm1fZGV2X21ham9yLCBtaW5vcikpOwoKZGV2aWNlX2Rlc3Ryb3kgYmVmb3Jl IHlvdSBmcmVlIHRoZSBhdXhkZXYgc2VlbSBzYWZlci4KCldoYXQgaGFwcGVucyBpZiBzb21lb25l IGhhcyB0aGUgZGV2aWNlIHN0aWxsIG9wZW4/IERvIHdlIG5lZWQgdG8ga3JlZiB0aGUKYXV4X2Rl diBhbmQgYWRkIHNvbWUga2luZCBvZiBkZWFkIGZsYWcgb3Igc29tZXRoaW5nPwoKPiArCj4gKwlw cl9kZWJ1ZygiZHJtX2RwX2F1eF9kZXY6IGF1eCBbJXNdIHVucmVnaXN0ZXJlZFxuIiwgYXV4LT5u YW1lKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9faW5pdCBkcm1fZHBf YXV4X2Rldl9pbml0KHZvaWQpCj4gK3sKPiArCWludCByZXM7Cj4gKwo+ICsJcHJpbnRrKEtFUk5f SU5GTyAiZHJtIGRwIGF1eCAvZGV2IGVudHJpZXMgZHJpdmVyXG4iKTsKCkkgZG9uJ3Qgc2VlIG11 Y2ggcG9pbnQgaW4gdGhpcyBwcmludGsuCgo+ICsKPiArCXJlcyA9IHJlZ2lzdGVyX2NocmRldigw LCAiYXV4IiwgJmF1eGRldl9mb3BzKTsKPiArCWlmIChyZXMgPCAwKQo+ICsJCWdvdG8gb3V0Owo+ ICsJZHJtX2Rldl9tYWpvciA9IHJlczsKPiArCj4gKwlkcm1fZHBfYXV4X2Rldl9jbGFzcyA9IGNs YXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImRybV9kcF9hdXhfZGV2Iik7Cj4gKwlpZiAoSVNfRVJS KGRybV9kcF9hdXhfZGV2X2NsYXNzKSkgewo+ICsJCXJlcyA9IFBUUl9FUlIoZHJtX2RwX2F1eF9k ZXZfY2xhc3MpOwo+ICsJCWdvdG8gb3V0X3VucmVnX2NocmRldjsKPiArCX0KPiArCWRybV9kcF9h dXhfZGV2X2NsYXNzLT5kZXZfZ3JvdXBzID0gZHJtX2RwX2F1eF9ncm91cHM7Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gKwo+ICtvdXRfdW5yZWdfY2hyZGV2Ogo+ICsJdW5yZWdpc3Rlcl9jaHJkZXYoZHJt X2Rldl9tYWpvciwgImF1eCIpOwo+ICtvdXQ6Cj4gKwlwcmludGsoS0VSTl9FUlIgIiVzOiBEcml2 ZXIgSW5pdGlhbGlzYXRpb24gZmFpbGVkXG4iLCBfX0ZJTEVfXyk7Cj4gKwlyZXR1cm4gcmVzOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2V4aXQgZHJtX2RwX2F1eF9kZXZfZXhpdCh2b2lkKQo+ ICt7Cj4gKwlwcmludGsoS0VSTl9JTkZPICJkcm0gZHAgYXV4IC9kZXYgZW50cmllcyBkcml2ZXIg LSB1bmxvYWRpbmdcbiIpOwoKZGl0dG8KCj4gKwljbGFzc19kZXN0cm95KGRybV9kcF9hdXhfZGV2 X2NsYXNzKTsKPiArCXVucmVnaXN0ZXJfY2hyZGV2KGRybV9kZXZfbWFqb3IsICJhdXgiKTsKPiAr fQo+ICsKPiArTU9EVUxFX0FVVEhPUigiUmFmYWVsIEFudG9nbm9sbGkgPHJhZmFlbC5hbnRvZ25v bGxpQGludGVsLmNvbT4iKTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJEUk0gRFAgQVVYIC9kZXYg ZW50cmllcyBkcml2ZXIiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwoKRG9lc24ndCBtYXRj aCB5b3VyIGxpY2Vuc2UgYm9pbGVycGxhdGUuCgo+ICsKPiArbW9kdWxlX2luaXQoZHJtX2RwX2F1 eF9kZXZfaW5pdCk7Cj4gK21vZHVsZV9leGl0KGRybV9kcF9hdXhfZGV2X2V4aXQpOwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJt L2RybV9kcF9oZWxwZXIuYwo+IGluZGV4IDk1MzVjNWIuLmYzYTJlYjAgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9k cm1fZHBfaGVscGVyLmMKPiBAQCAtMjgsNiArMjgsNyBAQAo+ICAjaW5jbHVkZSA8bGludXgvc2No ZWQuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9kcF9o ZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZHBfYXV4X2Rldi5oPgo+ICAjaW5jbHVkZSA8 ZHJtL2RybVAuaD4KPiAgCj4gIC8qKgo+IEBAIC03NjgsNiArNzY5LDkgQEAgaW50IGRybV9kcF9h dXhfcmVnaXN0ZXIoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiAgCXN0cmxjcHkoYXV4LT5kZGMu bmFtZSwgYXV4LT5uYW1lID8gYXV4LT5uYW1lIDogZGV2X25hbWUoYXV4LT5kZXYpLAo+ICAJCXNp emVvZihhdXgtPmRkYy5uYW1lKSk7Cj4gIAo+ICsKPiArCWRybV9kcF9hdXhfcmVnaXN0ZXJfZGV2 bm9kZShhdXgpOwo+ICsKPiAgCXJldHVybiBpMmNfYWRkX2FkYXB0ZXIoJmF1eC0+ZGRjKTsKPiAg fQo+ICBFWFBPUlRfU1lNQk9MKGRybV9kcF9hdXhfcmVnaXN0ZXIpOwo+IEBAIC03NzgsNiArNzgy LDcgQEAgRVhQT1JUX1NZTUJPTChkcm1fZHBfYXV4X3JlZ2lzdGVyKTsKPiAgICovCj4gIHZvaWQg ZHJtX2RwX2F1eF91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4gIHsKPiArCWRy bV9kcF9hdXhfdW5yZWdpc3Rlcl9kZXZub2RlKGF1eCk7Cj4gIAlpMmNfZGVsX2FkYXB0ZXIoJmF1 eC0+ZGRjKTsKPiAgfQo+ICBFWFBPUlRfU1lNQk9MKGRybV9kcF9hdXhfdW5yZWdpc3Rlcik7Cj4g ZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9kcF9hdXhfZGV2LmggYi9pbmNsdWRlL2RybS9k cm1fZHBfYXV4X2Rldi5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi43 NzUzNGU4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9kcF9hdXhfZGV2 LmgKPiBAQCAtMCwwICsxLDUwIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE1IEludGVs IENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAq IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29u cyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBu ZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqIEF1dGhv cnM6Cj4gKyAqICAgIFJhZmFlbCBBbnRvZ25vbGxpIDxyYWZhZWwuYW50b2dub2xsaUBpbnRlbC5j b20+Cj4gKyAqCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfVUFQSV9MSU5VWF9EUk1fRFBfQVVYX0RF Vl8KPiArI2RlZmluZSBfVUFQSV9MSU5VWF9EUk1fRFBfQVVYX0RFVl8KCk5vdCB1YXBpLgoKI2lm bmRlZiBEUk1fRFBfQVVYX0RFVl9ICiNkZWZpbmUgLi4uCndvdWxkIHNlZW0gbGluZSBlbm91Z2gu Cgo+ICsKPiArI2lmZGVmIENPTkZJR19EUk1fRFBfQVVYX0NIQVJERVYKPiArCj4gK2ludCBkcm1f ZHBfYXV4X3JlZ2lzdGVyX2Rldm5vZGUoc3RydWN0IGRybV9kcF9hdXggKmF1eCk7Cj4gK2ludCBk cm1fZHBfYXV4X3VucmVnaXN0ZXJfZGV2bm9kZShzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4KTsKPiAr Cj4gKyNlbHNlCj4gKwo+ICtzdGF0aWMgaW5saW5lIGludCBkcm1fZHBfYXV4X3JlZ2lzdGVyX2Rl dm5vZGUoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbmxpbmUgaW50IGRybV9kcF9hdXhfdW5yZWdpc3Rlcl9kZXZub2RlKHN0cnVj dCBkcm1fZHBfYXV4ICphdXgpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsjZW5kaWYK PiArCj4gKyNlbmRpZgo+IC0tIAo+IDIuNC4zCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKCi0tIApWaWxsZSBTeXJqw6Rsw6QKSW50ZWwgT1RD Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdm eCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==