From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rafael Antognolli Subject: Re: [PATCH v6 1/2] drm/dp: Add a drm_aux-dev module for reading/writing dpcd registers. Date: Fri, 30 Oct 2015 13:59:22 -0700 Message-ID: <20151030205922.GA5932@intel.com> References: <1446161026-18708-1-git-send-email-rafael.antognolli@intel.com> <1446161026-18708-2-git-send-email-rafael.antognolli@intel.com> <20151030100417.GC4437@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: <20151030100417.GC4437@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 =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBPY3QgMzAsIDIwMTUgYXQgMTI6MDQ6MTdQTSArMDIwMCwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+IE9uIFRodSwgT2N0IDI5LCAyMDE1IGF0IDA0OjIzOjQ1UE0gLTA3MDAsIFJhZmFl bCBBbnRvZ25vbGxpIHdyb3RlOgo+ID4gVGhpcyBtb2R1bGUgaXMgaGVhdmlseSBiYXNlZCBvbiBp MmMtZGV2LiBPbmNlIGxvYWRlZCwgaXQgcHJvdmlkZXMgb25lCj4gPiBkZXYgbm9kZSBwZXIgRFAg QVVYIGNoYW5uZWwsIG5hbWVkIGRybV9kcF9hdXhOLCB3aGVyZSBOIGlzIGFuIGludGVnZXIuCj4g PiAKPiA+IEl0J3MgcG9zc2libGUgdG8ga25vdyB3aGljaCBjb25uZWN0b3Igb3ducyB0aGlzIGF1 eCBjaGFubmVsIGJ5IGxvb2tpbmcKPiA+IGF0IHRoZSByZXNwZWN0aXZlIHN5c2ZzIC9zeXMvY2xh c3MvZHJtX2F1eF9kZXYvZHJtX2RwX2F1eE4vY29ubmVjdG9yLCBpZgo+ID4gdGhlIGNvbm5lY3Rv ciBkZXZpY2UgcG9pbnRlciB3YXMgY29ycmVjdGx5IHNldCBpbiB0aGUgYXV4IGhlbHBlciBzdHJ1 Y3QuCj4gPiAKPiA+IFR3byBtYWluIG9wZXJhdGlvbnMgYXJlIHByb3ZpZGVkIG9uIHRoZSByZWdp c3RlcnMgcmVhZCBhbmQgd3JpdGUuIFRoZQo+ID4gYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIgdG8g YmUgcmVhZCBvciB3cml0dGVuIGlzIGdpdmVuIHVzaW5nIGxzZWVrLiBUaGUKPiA+IHNlZWsgcG9z aXRpb24gaXMgdXBkYXRlZCB1cG9uIHJlYWQgb3Igd3JpdGUuCj4gCj4gTm90ZSB0aGF0IHdlIChp OTE1IGZvbGtzIGF0IGxlYXN0KSBnZW5lcmFsbHkgbGlrZSB0byBoYXZlIHRoZSBjaGFuZ2Vsb2cK PiBpbiB0aGUgY29tbWl0IG1lc3NhZ2UgaXRzZWxmLiBTbyBtYXliZSBtb3ZlIGl0IGhlcmUgZm9y IHRoZSBmaW5hbAo+IHZlcnNpb24uCj4gCj4gQW55d2F5cywgdGhpcyBpcyBsb29raW5nIHJhdGhl ciBuaWNlIG5vdy4gSSBzcG90dGVkIGEgZmV3IHJlbWFpbmluZyBzdHlsZQo+IGlzc3VlcywgYW5k IHNvbWUgZXJyb3IgaGFuZGxpbmcgcHJvYmxlbXMuIE9uY2UgdGhvc2UgYXJlIGRlYWx0IHdpdGgK PiBJIHRoaW5rIHdlIHNob3VsZCBiZSBkb25lLgo+IAo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBS YWZhZWwgQW50b2dub2xsaSA8cmFmYWVsLmFudG9nbm9sbGlAaW50ZWwuY29tPgo+ID4gLS0tCj4g PiAgZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgfCAgIDggKwo+ID4gIGRyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZSAgICAgICAgIHwgICAxICsKPiA+ICBkcml2ZXJzL2dwdS9kcm0vZHJt X2RwX2F1eF9kZXYuYyB8IDM4MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKPiA+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5jICB8ICAgNSArCj4gPiAgaW5j bHVkZS9kcm0vZHJtX2RwX2F1eF9kZXYuaCAgICAgfCAgNTAgKysrKysKPiA+ICA1IGZpbGVzIGNo YW5nZWQsIDQ0NSBpbnNlcnRpb25zKCspCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9kcm1fZHBfYXV4X2Rldi5jCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUv ZHJtL2RybV9kcF9hdXhfZGV2LmgKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiA+IGluZGV4IGM0YmY5YTEuLmRh ZWZjY2UgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiA+IEBAIC0yNSw2ICsyNSwxNCBAQCBjb25maWcgRFJN X01JUElfRFNJCj4gPiAgCWJvb2wKPiA+ICAJZGVwZW5kcyBvbiBEUk0KPiA+ICAKPiA+ICtjb25m aWcgRFJNX0RQX0FVWF9DSEFSREVWCj4gPiArCWJvb2wgIkRSTSBEUCBBVVggSW50ZXJmYWNlIgo+ ID4gKwlkZXBlbmRzIG9uIERSTQo+ID4gKwloZWxwCj4gPiArCSAgQ2hvb3NlIHRoaXMgb3B0aW9u IHRvIGVuYWJsZSBhIC9kZXYvZHJtX2RwX2F1eE4gbm9kZSB0aGF0IGFsbG93cyB0bwo+ID4gKwkg IHJlYWQgYW5kIHdyaXRlIHZhbHVlcyB0byBhcmJpdHJhcnkgRFBDRCByZWdpc3RlcnMgb24gdGhl IERQIGF1eAo+ID4gKwkgIGNoYW5uZWwuCj4gPiArCj4gPiAgY29uZmlnIERSTV9LTVNfSEVMUEVS Cj4gPiAgCXRyaXN0YXRlCj4gPiAgCWRlcGVuZHMgb24gRFJNCj4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gPiBpbmRl eCAxZTlmZjRjLi5lNDhlYzhmIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+IEBAIC0yOCw2ICsyOCw3 IEBAIGRybV9rbXNfaGVscGVyLXkgOj0gZHJtX2NydGNfaGVscGVyLm8gZHJtX2RwX2hlbHBlci5v IGRybV9wcm9iZV9oZWxwZXIubyBcCj4gPiAgZHJtX2ttc19oZWxwZXItJChDT05GSUdfRFJNX0xP QURfRURJRF9GSVJNV0FSRSkgKz0gZHJtX2VkaWRfbG9hZC5vCj4gPiAgZHJtX2ttc19oZWxwZXIt JChDT05GSUdfRFJNX0ZCREVWX0VNVUxBVElPTikgKz0gZHJtX2ZiX2hlbHBlci5vCj4gPiAgZHJt X2ttc19oZWxwZXItJChDT05GSUdfRFJNX0tNU19DTUFfSEVMUEVSKSArPSBkcm1fZmJfY21hX2hl bHBlci5vCj4gPiArZHJtX2ttc19oZWxwZXItJChDT05GSUdfRFJNX0RQX0FVWF9DSEFSREVWKSAr PSBkcm1fZHBfYXV4X2Rldi5vCj4gPiAgCj4gPiAgb2JqLSQoQ09ORklHX0RSTV9LTVNfSEVMUEVS KSArPSBkcm1fa21zX2hlbHBlci5vCj4gPiAgCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2RybV9kcF9hdXhfZGV2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2F1eF9kZXYuYwo+ ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLjE2ZGJjMmUKPiA+IC0t LSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfYXV4X2Rldi5jCj4g PiBAQCAtMCwwICsxLDM4MSBAQAo+ID4gKy8qCj4gPiArICogQ29weXJpZ2h0IMKpIDIwMTUgSW50 ZWwgQ29ycG9yYXRpb24KPiA+ICsgKgo+ID4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gPiArICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwKPiA+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJl c3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gPiArICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCj4gPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiA+ICsgKgo+ ID4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiA+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1 ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gPiArICog U29mdHdhcmUuCj4gPiArICoKPiA+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ID4gKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAo+ID4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ID4gKyAqIFRIRSBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCj4gPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiA+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4g PiArICogSU4gVEhFIFNPRlRXQVJFLgo+ID4gKyAqCj4gPiArICogQXV0aG9yczoKPiA+ICsgKiAg ICBSYWZhZWwgQW50b2dub2xsaSA8cmFmYWVsLmFudG9nbm9sbGlAaW50ZWwuY29tPgo+ID4gKyAq Cj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ID4gKyNpbmNs dWRlIDxsaW51eC9mcy5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gPiArI2luY2x1 ZGUgPGxpbnV4L2luaXQuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gPiArI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Cj4g PiArI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1f Y3J0Yy5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ID4gKwo+ID4gK3N0cnVjdCBkcm1f ZHBfYXV4X2RldiB7Cj4gPiArCXVuc2lnbmVkIGluZGV4Owo+ID4gKwlzdHJ1Y3QgZHJtX2RwX2F1 eCAqYXV4Owo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gPiArCXN0cnVjdCBrcmVmIHJlZmNv dW50Owo+ID4gKwlhdG9taWNfdCB1c2Vjb3VudDsKPiA+ICt9Owo+ID4gKwo+ID4gKyNkZWZpbmUg RFJNX0FVWF9NSU5PUlMJMjU2Cj4gPiArI2RlZmluZSBBVVhfTUFYX09GRlNFVAkoMSA8PCAyMCkK PiA+ICtzdGF0aWMgREVGSU5FX0lEUihhdXhfaWRyKTsKPiA+ICtzdGF0aWMgREVGSU5FX01VVEVY KGF1eF9pZHJfbXV0ZXgpOwo+ID4gK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKmRybV9kcF9hdXhfZGV2 X2NsYXNzOwo+ID4gK3N0YXRpYyBpbnQgZHJtX2Rldl9tYWpvciA9IC0xOwo+ID4gKwo+ID4gK3N0 YXRpYyBzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmRybV9kcF9hdXhfZGV2X2dldF9ieV9taW5vcih1 bnNpZ25lZCBpbmRleCkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2Rl diA9IE5VTEw7Cj4gPiArCj4gPiArCW11dGV4X2xvY2soJmF1eF9pZHJfbXV0ZXgpOwo+ID4gKwlh dXhfZGV2ID0gaWRyX2ZpbmQoJmF1eF9pZHIsIGluZGV4KTsKPiA+ICsJaWYgKCFrcmVmX2dldF91 bmxlc3NfemVybygmYXV4X2Rldi0+cmVmY291bnQpKQo+ID4gKwkJYXV4X2RldiA9IE5VTEw7Cj4g PiArCW11dGV4X3VubG9jaygmYXV4X2lkcl9tdXRleCk7Cj4gPiArCj4gPiArCXJldHVybiBhdXhf ZGV2Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IGRybV9kcF9hdXhfZGV2ICphbGxv Y19kcm1fZHBfYXV4X2RldihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4KQo+ID4gK3sKPiA+ICsJc3Ry dWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2Owo+ID4gKwlpbnQgaW5kZXg7Cj4gPiArCj4gPiAr Cj4gCj4gc3B1cmlvdXMgbmV3bGluZQo+IAo+ID4gKwlhdXhfZGV2ID0ga3phbGxvYyhzaXplb2Yo KmF1eF9kZXYpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFhdXhfZGV2KQo+ID4gKwkJcmV0dXJu IEVSUl9QVFIoLUVOT01FTSk7Cj4gPiArCWF1eF9kZXYtPmF1eCA9IGF1eDsKPiA+ICsJYXRvbWlj X3NldCgmYXV4X2Rldi0+dXNlY291bnQsIDEpOwo+ID4gKwlrcmVmX2luaXQoJmF1eF9kZXYtPnJl ZmNvdW50KTsKPiA+ICsKPiA+ICsJbXV0ZXhfbG9jaygmYXV4X2lkcl9tdXRleCk7Cj4gPiArCWlu ZGV4ID0gaWRyX2FsbG9jX2N5Y2xpYygmYXV4X2lkciwgYXV4X2RldiwgMCwgRFJNX0FVWF9NSU5P UlMsCj4gPiArCQkJCSBHRlBfS0VSTkVMKTsKPiA+ICsJbXV0ZXhfdW5sb2NrKCZhdXhfaWRyX211 dGV4KTsKPiA+ICsJaWYgKGluZGV4IDwgMCkgewo+ID4gKwkJa2ZyZWUoYXV4X2Rldik7Cj4gPiAr CQlyZXR1cm4gRVJSX1BUUihpbmRleCk7Cj4gPiArCX0KPiA+ICsJYXV4X2Rldi0+aW5kZXggPSBp bmRleDsKPiA+ICsKPiA+ICsJcmV0dXJuIGF1eF9kZXY7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyB2b2lkIHJlbGVhc2VfZHJtX2RwX2F1eF9kZXYoc3RydWN0IGtyZWYgKnJlZikKPiA+ICt7Cj4g PiArCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldiA9Cj4gPiArCQljb250YWluZXJfb2Yo cmVmLCBzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYsIHJlZmNvdW50KTsKPiA+ICsKPiA+ICsJa2ZyZWUo YXV4X2Rldik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6ZV90IG5hbWVfc2hvdyhzdHJ1 Y3QgZGV2aWNlICpkZXYsCj4gPiArCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBj aGFyICpidWYpCj4gPiArewo+ID4gKwlzc2l6ZV90IHJlczsKPiA+ICsJc3RydWN0IGRybV9kcF9h dXhfZGV2ICphdXhfZGV2ID0KPiA+ICsJCWRybV9kcF9hdXhfZGV2X2dldF9ieV9taW5vcihNSU5P UihkZXYtPmRldnQpKTsKPiA+ICsKPiA+ICsJaWYgKCFhdXhfZGV2KQo+ID4gKwkJcmV0dXJuIC1F Tk9ERVY7Cj4gPiArCj4gPiArCXJlcyA9IHNwcmludGYoYnVmLCAiJXNcbiIsIGF1eF9kZXYtPmF1 eC0+bmFtZSk7Cj4gPiArCWtyZWZfcHV0KCZhdXhfZGV2LT5yZWZjb3VudCwgcmVsZWFzZV9kcm1f ZHBfYXV4X2Rldik7Cj4gPiArCj4gPiArCXJldHVybiByZXM7Cj4gPiArfQo+ID4gK3N0YXRpYyBE RVZJQ0VfQVRUUl9STyhuYW1lKTsKPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAq ZHJtX2RwX2F1eF9hdHRyc1tdID0gewo+ID4gKwkmZGV2X2F0dHJfbmFtZS5hdHRyLAo+ID4gKwlO VUxMLAo+ID4gK307Cj4gPiArQVRUUklCVVRFX0dST1VQUyhkcm1fZHBfYXV4KTsKPiA+ICsKPiA+ ICtzdGF0aWMgaW50IGF1eGRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxl ICpmaWxlKQo+ID4gK3sKPiA+ICsJdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsK PiA+ICsJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2Owo+ID4gKwo+ID4gKwlhdXhfZGV2 ID0gZHJtX2RwX2F1eF9kZXZfZ2V0X2J5X21pbm9yKG1pbm9yKTsKPiA+ICsJaWYgKCFhdXhfZGV2 KQo+ID4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gPiArCj4gPiArCWZpbGUtPnByaXZhdGVfZGF0YSA9 IGF1eF9kZXY7Cj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgbG9mZl90 IGF1eGRldl9sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCB3aGVu Y2UpCj4gPiArewo+ID4gKwlyZXR1cm4gZml4ZWRfc2l6ZV9sbHNlZWsoZmlsZSwgb2Zmc2V0LCB3 aGVuY2UsIEFVWF9NQVhfT0ZGU0VUKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHNzaXplX3Qg YXV4ZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBj b3VudCwKPiA+ICsJCQkgICBsb2ZmX3QgKm9mZnNldCkKPiA+ICt7Cj4gPiArCXNpemVfdCBieXRl c19wZW5kaW5nLCBudW1fYnl0ZXNfcHJvY2Vzc2VkID0gMDsKPiA+ICsJc3RydWN0IGRybV9kcF9h dXhfZGV2ICphdXhfZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwo+ID4gKwlzc2l6ZV90IHJlcyA9 IDA7Cj4gPiArCj4gPiArCWlmIChjb3VudCA8IDApCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiAK PiBzaXplX3QgaXMgdW5zaWduZWQsIHNvIHRoaXMgY2FuJ3QgaGFwcGVuLgo+IAo+ID4gKwo+ID4g KwlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJmF1eF9kZXYtPnVzZWNvdW50KSkKPiA+ICsJCXJl dHVybiAtRU5PREVWOwo+ID4gKwo+ID4gKwlieXRlc19wZW5kaW5nID0gbWluKChsb2ZmX3QpY291 bnQsIEFVWF9NQVhfT0ZGU0VUIC0gKCpvZmZzZXQpKTsKPiA+ICsKPiA+ICsJaWYgKCFhY2Nlc3Nf b2soVkVSSUZZX1dSSVRFLCBidWYsIGJ5dGVzX3BlbmRpbmcpKSB7Cj4gPiArCQlyZXMgPSAtRUZB VUxUOwo+ID4gKwkJZ290byBvdXQ7Cj4gPiArCX0KPiA+ICsKPiA+ICsJd2hpbGUgKGJ5dGVzX3Bl bmRpbmcgPiAwKSB7Cj4gPiArCQl1aW50OF90IGxvY2FsYnVmW0RQX0FVWF9NQVhfUEFZTE9BRF9C WVRFU107Cj4gPiArCQlzc2l6ZV90IHRvZG8gPSBtaW5fdChzaXplX3QsIGJ5dGVzX3BlbmRpbmcs IHNpemVvZihsb2NhbGJ1ZikpOwo+ID4gKwo+ID4gKwkJcmVzID0gZHJtX2RwX2RwY2RfcmVhZChh dXhfZGV2LT5hdXgsICpvZmZzZXQsIGxvY2FsYnVmLCB0b2RvKTsKPiA+ICsJCWlmIChyZXMgPD0g MCkgewo+ID4gKwkJCXJlcyA9IG51bV9ieXRlc19wcm9jZXNzZWQgPyBudW1fYnl0ZXNfcHJvY2Vz c2VkIDogcmVzOwo+ID4gKwkJCWdvdG8gb3V0Owo+ID4gKwkJfQo+ID4gKwkJaWYgKF9fY29weV90 b191c2VyKGJ1ZiArIG51bV9ieXRlc19wcm9jZXNzZWQsIGxvY2FsYnVmLCByZXMpKSB7Cj4gPiAr CQkJcmVzID0gbnVtX2J5dGVzX3Byb2Nlc3NlZCA/Cj4gPiArCQkJCW51bV9ieXRlc19wcm9jZXNz ZWQgOiAtRUZBVUxUOwo+ID4gKwkJCWdvdG8gb3V0Owo+ID4gKwkJfQo+ID4gKwkJYnl0ZXNfcGVu ZGluZyAtPSByZXM7Cj4gPiArCQkqb2Zmc2V0ICs9IHJlczsKPiA+ICsJCW51bV9ieXRlc19wcm9j ZXNzZWQgKz0gcmVzOwo+ID4gKwkJcmVzID0gbnVtX2J5dGVzX3Byb2Nlc3NlZDsKPiA+ICsJfQo+ ID4gKwo+ID4gK291dDoKPiA+ICsJYXRvbWljX2RlYygmYXV4X2Rldi0+dXNlY291bnQpOwo+ID4g Kwl3YWtlX3VwX2F0b21pY190KCZhdXhfZGV2LT51c2Vjb3VudCk7Cj4gCj4gSW50ZXJlc3Rpbmcu IEZpcnN0IHRpbWUgSSd2ZSBzZWVuIHRoaXMgc3R1ZmYuCj4gCj4gPiArCXJldHVybiByZXM7Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzc2l6ZV90IGF1eGRldl93cml0ZShzdHJ1Y3QgZmlsZSAq ZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKPiA+ICsJCQkgICAgc2l6ZV90IGNvdW50LCBs b2ZmX3QgKm9mZnNldCkKPiA+ICt7Cj4gPiArCXNpemVfdCBieXRlc19wZW5kaW5nLCBudW1fYnl0 ZXNfcHJvY2Vzc2VkID0gMDsKPiA+ICsJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2ID0g ZmlsZS0+cHJpdmF0ZV9kYXRhOwo+ID4gKwlzc2l6ZV90IHJlcyA9IDA7Cj4gPiArCj4gPiArCWlm IChjb3VudCA8IDApCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiAKPiBBbm90aGVyICJzaXplX3Qg aXMgdW5zaWduZWQiIGNhc2UuCj4gCj4gPiArCj4gPiArCWlmICghYXRvbWljX2luY19ub3RfemVy bygmYXV4X2Rldi0+dXNlY291bnQpKQo+ID4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gPiArCj4gPiAr CWJ5dGVzX3BlbmRpbmcgPSBtaW4oKGxvZmZfdCljb3VudCwgQVVYX01BWF9PRkZTRVQgLSAqb2Zm c2V0KTsKPiA+ICsKPiA+ICsJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZiwgYnl0ZXNf cGVuZGluZykpIHsKPiA+ICsJCXJlcyA9IC1FRkFVTFQ7Cj4gPiArCQlnb3RvIG91dDsKPiA+ICsJ fQo+ID4gKwo+ID4gKwl3aGlsZSAoYnl0ZXNfcGVuZGluZyA+IDApIHsKPiA+ICsJCXVpbnQ4X3Qg bG9jYWxidWZbRFBfQVVYX01BWF9QQVlMT0FEX0JZVEVTXTsKPiA+ICsJCXNzaXplX3QgdG9kbyA9 IG1pbl90KHNpemVfdCwgYnl0ZXNfcGVuZGluZywgc2l6ZW9mKGxvY2FsYnVmKSk7Cj4gPiArCj4g PiArCQlpZiAoX19jb3B5X2Zyb21fdXNlcihsb2NhbGJ1ZiwKPiA+ICsJCQkJICAgICBidWYgKyBu dW1fYnl0ZXNfcHJvY2Vzc2VkLCB0b2RvKSkgewo+ID4gKwkJCXJlcyA9IG51bV9ieXRlc19wcm9j ZXNzZWQgPwo+ID4gKwkJCQludW1fYnl0ZXNfcHJvY2Vzc2VkIDogLUVGQVVMVDsKPiA+ICsJCQln b3RvIG91dDsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCXJlcyA9IGRybV9kcF9kcGNkX3dyaXRlKGF1 eF9kZXYtPmF1eCwgKm9mZnNldCwgbG9jYWxidWYsIHRvZG8pOwo+ID4gKwkJaWYgKHJlcyA8PSAw KSB7Cj4gPiArCQkJcmVzID0gbnVtX2J5dGVzX3Byb2Nlc3NlZCA/IG51bV9ieXRlc19wcm9jZXNz ZWQgOiByZXM7Cj4gPiArCQkJZ290byBvdXQ7Cj4gPiArCQl9Cj4gPiArCQlieXRlc19wZW5kaW5n IC09IHJlczsKPiA+ICsJCSpvZmZzZXQgKz0gcmVzOwo+ID4gKwkJbnVtX2J5dGVzX3Byb2Nlc3Nl ZCArPSByZXM7Cj4gPiArCQlyZXMgPSBudW1fYnl0ZXNfcHJvY2Vzc2VkOwo+ID4gKwl9Cj4gPiAr Cj4gPiArb3V0Ogo+ID4gKwlhdG9taWNfZGVjKCZhdXhfZGV2LT51c2Vjb3VudCk7Cj4gPiArCXdh a2VfdXBfYXRvbWljX3QoJmF1eF9kZXYtPnVzZWNvdW50KTsKPiA+ICsJcmV0dXJuIHJlczsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBhdXhkZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlu b2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fZHBfYXV4X2Rl diAqYXV4X2RldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKPiA+ICsKPiA+ICsJa3JlZl9wdXQoJmF1 eF9kZXYtPnJlZmNvdW50LCByZWxlYXNlX2RybV9kcF9hdXhfZGV2KTsKPiA+ICsJcmV0dXJuIDA7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF1 eGRldl9mb3BzID0gewo+ID4gKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCj4gPiArCS5sbHNlZWsJ CT0gYXV4ZGV2X2xsc2VlaywKPiA+ICsJLnJlYWQJCT0gYXV4ZGV2X3JlYWQsCj4gPiArCS53cml0 ZQkJPSBhdXhkZXZfd3JpdGUsCj4gPiArCS5vcGVuCQk9IGF1eGRldl9vcGVuLAo+ID4gKwkucmVs ZWFzZQk9IGF1eGRldl9yZWxlYXNlLAo+ID4gK307Cj4gPiArCj4gPiArI2RlZmluZSB0b19hdXhk ZXYoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBkcm1fZHBfYXV4X2RldiwgYXV4KQo+ID4gKwo+ ID4gKy8qKgo+ID4gKyAqIGRybV9kcF9hdXhfcmVnaXN0ZXJfZGV2bm9kZSgpIC0gcmVnaXN0ZXIg YSBkZXZub2RlIGZvciB0aGlzIGF1eCBjaGFubmVsCj4gPiArICogQGF1eDogRGlzcGxheVBvcnQg QVVYIGNoYW5uZWwKPiA+ICsgKgo+ID4gKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGEgbmVn YXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ID4gKyAqLwo+ID4gK2ludCBkcm1fZHBfYXV4 X3JlZ2lzdGVyX2Rldm5vZGUoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiA+ICt7Cj4gPiArCXN0 cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldjsKPiA+ICsJaW50IHJlczsKPiA+ICsKPiA+ICsJ YXV4X2RldiA9IGFsbG9jX2RybV9kcF9hdXhfZGV2KGF1eCk7Cj4gPiArCWlmIChJU19FUlIoYXV4 X2RldikpCj4gPiArCQlyZXR1cm4gUFRSX0VSUihhdXhfZGV2KTsKPiA+ICsKPiA+ICsJYXV4X2Rl di0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShkcm1fZHBfYXV4X2Rldl9jbGFzcywgYXV4LT5kZXYsCj4g PiArCQkJCSAgICAgTUtERVYoZHJtX2Rldl9tYWpvciwgYXV4X2Rldi0+aW5kZXgpLCBOVUxMLAo+ ID4gKwkJCQkgICAgICJkcm1fZHBfYXV4JWQiLCBhdXhfZGV2LT5pbmRleCk7Cj4gPiArCWlmIChJ U19FUlIoYXV4X2Rldi0+ZGV2KSkgewo+ID4gKwkJcmVzID0gUFRSX0VSUihhdXhfZGV2LT5kZXYp Owo+ID4gKwkJZ290byBlcnJvcjsKPiA+ICsJfQo+ID4gKwo+ID4gKwlwcl9kZWJ1ZygiZHJtX2Rw X2F1eF9kZXY6IGF1eCBbJXNdIHJlZ2lzdGVyZWQgYXMgbWlub3IgJWRcbiIsCj4gPiArCQkgYXV4 LT5uYW1lLCBhdXhfZGV2LT5pbmRleCk7Cj4gCj4gWW91IHNob3VsZCB1c2UgRFJNX0RFQlVHIGFu ZCBEUk1fRVJST1IgYWxsIGFyb3VuZCB0byBjb25mb3JtIHRvIHN0YW5kYXJkCj4gZHJtIHN1YnN5 c3RlbSBzdHlsZS4KPiAKPiA+ICsJcmV0dXJuIDA7Cj4gPiArZXJyb3I6Cj4gPiArCWRldmljZV9k ZXN0cm95KGRybV9kcF9hdXhfZGV2X2NsYXNzLAo+ID4gKwkJICAgICAgIE1LREVWKGRybV9kZXZf bWFqb3IsIGF1eF9kZXYtPmluZGV4KSk7Cj4gPiArCWtmcmVlKGF1eF9kZXYpOwo+IAo+IEl0IHdh cyBhbHJlYWR5IGFkZGVkIHRvIHRoZSBpZHIsIHNvIHRoaXMgbmVlZHMgc29tZXRoaW5nIGEgYml0 IG1vcmUuCj4gQWxzbyBpbiB0aGVvcnkgc29tZW9uZSBtaWdodCBoYXZlIGFscmVhZHkgb3BlbmVk IHRoZSBkZXZpY2UgYnkgbm93Lgo+IAo+IEkgZ3Vlc3MgeW91IGNvdWxkIGp1c3QgZG8gYSBub3Jt YWwgdW5yZWdpc3RlciBoZXJlPyBJIGFzc3VtZSBjYWxsaW5nCj4gZGV2aWNlX2Rlc3Ryb3koKSBl dmVuIHRob3VnaCBkZXZpY2VfY3JlYXRlKCkgZmFpbGVkIHNob3VsZCBiZSBPSyBzaW5jZQo+IHlv dSdyZSBhbHJlYWR5IGRvaW5nIGl0LCBzbyBoYXZpbmcgdGhlIHVucmVnaXN0ZXIgY29kZSBkbyBp dCBpbnN0ZWFkCj4gc2hvdWxkIGJlIGVxdWFsbHkgZmluZS4KCkkgYW0gbm90IHN1cmUgbm93IHdo eSB0aGlzIGRldmljZV9kZXN0cm95KCkgaXMgaGVyZSwgc2luY2UgaWYKZGV2aWNlX2NyZWF0ZSBm YWlsZWQsIHRoZXJlIHNob3VsZCBiZSBubyBuZWVkIHRvIGRlc3Ryb3kgaXQuIE1heWJlIHRoaXMK d2FzIGxlZnQgZnJvbSBwcmV2aW91cyB2ZXJzaW9ucyBhbmQgSSBmb3Jnb3QgdG8gcmVtb3ZlIGl0 IHRvbyBkdXJpbmcKdGhvc2UgY2hhbmdlcy4KClNob3VsZG4ndCBJIGp1c3QgcmVtb3ZlIHRoaXMg cGFydCwgYW5kIGFkZCB0aGUgY29kZSB0byByZW1vdmUgZnJvbSB0aGUKaWRyPwoKPiBPaCBhbmQg SSBndWVzcyB3ZSBkb24ndCByZWFsbHkgbmVlZCB0byBzdG9yZSB0aGUgc3RydWN0IGRldmljZSBw b2ludGVyCj4gdW5kZXIgYXV4X2RldiBzaW5jZSBpdCdzIG5vdCB1c2VkIGJ5IGFueW9uZSwgbm90 IGV2ZW4gYnkgZGV2aWNlX2Rlc3Ryb3koKS4KPiAKPiA+ICsJcmV0dXJuIHJlczsKPiA+ICt9Cj4g PiArRVhQT1JUX1NZTUJPTChkcm1fZHBfYXV4X3JlZ2lzdGVyX2Rldm5vZGUpOwo+ID4gKwo+ID4g K3N0YXRpYyBzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmRybV9kcF9hdXhfZGV2X2dldF9ieV9hdXgo c3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fZHBfYXV4X2Rl diAqaXRlciwgKmF1eF9kZXYgPSBOVUxMOwo+ID4gKwlpbnQgaWQ7Cj4gPiArCj4gPiArCS8qIGRv bid0IGluY3JlYXNlIGtyZWYgY291bnQgaGVyZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gc2hvdWxk IG9ubHkgYmUKPiA+ICsJICogdXNlZCBieSBkcm1fZHBfYXV4X3VucmVnaXN0ZXJfZGV2bm9kZS4g VGh1cywgaXQgd2lsbCBhbHdheXMgaGF2ZSBhdAo+ID4gKwkgKiBsZWFzdCBvbmUgcmVmZXJlbmNl IC0gdGhlIG9uZSB0aGF0IGRybV9kcF9hdXhfcmVnaXN0ZXJfZGV2bm9kZQo+ID4gKwkgKiBjcmVh dGVkCj4gPiArCSAqLwo+ID4gKwltdXRleF9sb2NrKCZhdXhfaWRyX211dGV4KTsKPiA+ICsJaWRy X2Zvcl9lYWNoX2VudHJ5KCZhdXhfaWRyLCBpdGVyLCBpZCkgewo+ID4gKwkJaWYgKGl0ZXItPmF1 eCA9PSBhdXgpIHsKPiA+ICsJCQlhdXhfZGV2ID0gaXRlcjsKPiA+ICsJCQlicmVhazsKPiA+ICsJ CX0KPiA+ICsJfQo+ID4gKwltdXRleF91bmxvY2soJmF1eF9pZHJfbXV0ZXgpOwo+ID4gKwlyZXR1 cm4gYXV4X2RldjsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBhdXhkZXZfd2FpdF9hdG9t aWNfdChhdG9taWNfdCAqcCkKPiA+ICt7Cj4gPiArCXNjaGVkdWxlKCk7Cj4gPiArCXJldHVybiAw Owo+ID4gK30KPiA+ICsvKioKPiA+ICsgKiBkcm1fZHBfYXV4X3VucmVnaXN0ZXJfZGV2bm9kZSgp IC0gdW5yZWdpc3RlciBhIGRldm5vZGUgZm9yIHRoaXMgYXV4IGNoYW5uZWwKPiA+ICsgKiBAYXV4 OiBEaXNwbGF5UG9ydCBBVVggY2hhbm5lbAo+ID4gKyAqCj4gPiArICogUmV0dXJucyAwIG9uIHN1 Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gPiArICovCj4gPiAr aW50IGRybV9kcF9hdXhfdW5yZWdpc3Rlcl9kZXZub2RlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgp Cj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXY7Cj4gPiArCXVuc2ln bmVkIGludCBtaW5vcjsKPiA+ICsKPiA+ICsJYXV4X2RldiA9IGRybV9kcF9hdXhfZGV2X2dldF9i eV9hdXgoYXV4KTsKPiA+ICsJaWYgKCFhdXhfZGV2KSAvKiBhdHRhY2ggbXVzdCBoYXZlIGZhaWxl ZCAqLwo+ID4gKwkJcmV0dXJuIDA7Cj4gCj4gU2hvdWxkIHdlIG1heWJlIHJldHVybiBhbiBlcnJv cj8gT3IgbWF5YmUganVzdCBtYWtlIHRoZSBmdW5jdGlvbiB2b2lkCj4gc2luY2Ugbm8gb25lIGlz IGxpa2VseSB0byBiZSBpbnRlcmVzdGVkIGluIHRoZSByZXR1cm4gdmFsdWU/Cj4gCj4gPiArCj4g PiArCW11dGV4X2xvY2soJmF1eF9pZHJfbXV0ZXgpOwo+ID4gKwlpZHJfcmVtb3ZlKCZhdXhfaWRy LCBhdXhfZGV2LT5pbmRleCk7Cj4gPiArCW11dGV4X3VubG9jaygmYXV4X2lkcl9tdXRleCk7Cj4g PiArCj4gPiArCWF0b21pY19kZWMoJmF1eF9kZXYtPnVzZWNvdW50KTsKPiA+ICsJd2FpdF9vbl9h dG9taWNfdCgmYXV4X2Rldi0+dXNlY291bnQsIGF1eGRldl93YWl0X2F0b21pY190LAo+ID4gKwkJ CSBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Cj4gPiArCj4gPiArCW1pbm9yID0gYXV4X2Rldi0+aW5k ZXg7Cj4gPiArCWRldmljZV9kZXN0cm95KGRybV9kcF9hdXhfZGV2X2NsYXNzLCBNS0RFVihkcm1f ZGV2X21ham9yLCBtaW5vcikpOwo+ID4gKwo+ID4gKwlrcmVmX3B1dCgmYXV4X2Rldi0+cmVmY291 bnQsIHJlbGVhc2VfZHJtX2RwX2F1eF9kZXYpOwo+ID4gKwlwcl9kZWJ1ZygiZHJtX2RwX2F1eF9k ZXY6IGF1eCBbJXNdIHVucmVnaXN0ZXJlZFxuIiwgYXV4LT5uYW1lKTsKPiAKPiBDYW4ndCBkZXJl ZmVyZW5jZSBpdCBzYWZlbHkgYWZ0ZXIgdGhlIGtyZWZfcHV0KCkuCj4gCj4gPiArCj4gPiArCXJl dHVybiAwOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9hdXhfdW5yZWdpc3Rlcl9k ZXZub2RlKTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IF9faW5pdCBkcm1fZHBfYXV4X2Rldl9pbml0 KHZvaWQpCj4gPiArewo+ID4gKwlpbnQgcmVzOwo+ID4gKwo+ID4gKwlkcm1fZHBfYXV4X2Rldl9j bGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImRybV9kcF9hdXhfZGV2Iik7Cj4gPiAr CWlmIChJU19FUlIoZHJtX2RwX2F1eF9kZXZfY2xhc3MpKSB7Cj4gPiArCQlyZXMgPSBQVFJfRVJS KGRybV9kcF9hdXhfZGV2X2NsYXNzKTsKPiA+ICsJCWdvdG8gb3V0Owo+ID4gKwl9Cj4gPiArCWRy bV9kcF9hdXhfZGV2X2NsYXNzLT5kZXZfZ3JvdXBzID0gZHJtX2RwX2F1eF9ncm91cHM7Cj4gPiAr Cj4gPiArCXJlcyA9IHJlZ2lzdGVyX2NocmRldigwLCAiYXV4IiwgJmF1eGRldl9mb3BzKTsKPiA+ ICsJaWYgKHJlcyA8IDApCj4gPiArCQlnb3RvIG91dDsKPiAKPiBTaG91bGQgY2xhc3NfZGVzdHJv eSgpIGluIHRoaXMgZXJyb3IgcGF0aC4KPiAKPiA+ICsJZHJtX2Rldl9tYWpvciA9IHJlczsKPiA+ ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArb3V0Ogo+ID4gKwlkcm1fZXJyKCIlczogRHJpdmVyIElu aXRpYWxpc2F0aW9uIGZhaWxlZFxuIiwgX19GSUxFX18pOwo+ID4gKwlyZXR1cm4gcmVzOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBfX2V4aXQgZHJtX2RwX2F1eF9kZXZfZXhpdCh2b2lk KQo+ID4gK3sKPiA+ICsJY2xhc3NfZGVzdHJveShkcm1fZHBfYXV4X2Rldl9jbGFzcyk7Cj4gPiAr CXVucmVnaXN0ZXJfY2hyZGV2KGRybV9kZXZfbWFqb3IsICJhdXgiKTsKPiAKPiBTd2FwIHRoZXNl IGFyb3VuZCB0byBiZSB0aGUgb3Bwb3NpdGUgb2YgaW5pdD8KPiAKPiA+ICt9Cj4gPiArCj4gPiAr TU9EVUxFX0FVVEhPUigiUmFmYWVsIEFudG9nbm9sbGkgPHJhZmFlbC5hbnRvZ25vbGxpQGludGVs LmNvbT4iKTsKPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkRSTSBEUCBBVVggL2RldiBlbnRyaWVz IGRyaXZlciIpOwo+ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRz Iik7Cj4gPiArCj4gPiArbW9kdWxlX2luaXQoZHJtX2RwX2F1eF9kZXZfaW5pdCk7Cj4gPiArbW9k dWxlX2V4aXQoZHJtX2RwX2F1eF9kZXZfZXhpdCk7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2RybV9kcF9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMK PiA+IGluZGV4IDk1MzVjNWIuLmQyNTY1Y2MgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vZHJtX2RwX2hlbHBlci5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBl ci5jCj4gPiBAQCAtMjgsNiArMjgsNyBAQAo+ID4gICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgo+ ID4gICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KPiA+ICAjaW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxw ZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcF9hdXhfZGV2Lmg+Cj4gPiAgI2luY2x1ZGUg PGRybS9kcm1QLmg+Cj4gPiAgCj4gPiAgLyoqCj4gPiBAQCAtNzY4LDYgKzc2OSw5IEBAIGludCBk cm1fZHBfYXV4X3JlZ2lzdGVyKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4gPiAgCXN0cmxjcHko YXV4LT5kZGMubmFtZSwgYXV4LT5uYW1lID8gYXV4LT5uYW1lIDogZGV2X25hbWUoYXV4LT5kZXYp LAo+ID4gIAkJc2l6ZW9mKGF1eC0+ZGRjLm5hbWUpKTsKPiA+ICAKPiA+ICsJaWYgKGRybV9kcF9h dXhfcmVnaXN0ZXJfZGV2bm9kZShhdXgpKQo+ID4gKwkJZHJtX2VycigiJXM6IENvdWxkIG5vdCBy ZWdpc3RlciBkcm1fZHBfYXV4X2Rldi5cbiIsIF9fRklMRV9fKTsKPiA+ICsKPiA+ICAJcmV0dXJu IGkyY19hZGRfYWRhcHRlcigmYXV4LT5kZGMpOwo+ID4gIH0KPiA+ICBFWFBPUlRfU1lNQk9MKGRy bV9kcF9hdXhfcmVnaXN0ZXIpOwo+ID4gQEAgLTc3OCw2ICs3ODIsNyBAQCBFWFBPUlRfU1lNQk9M KGRybV9kcF9hdXhfcmVnaXN0ZXIpOwo+ID4gICAqLwo+ID4gIHZvaWQgZHJtX2RwX2F1eF91bnJl Z2lzdGVyKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4gPiAgewo+ID4gKwlkcm1fZHBfYXV4X3Vu cmVnaXN0ZXJfZGV2bm9kZShhdXgpOwo+ID4gIAlpMmNfZGVsX2FkYXB0ZXIoJmF1eC0+ZGRjKTsK PiA+ICB9Cj4gPiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfYXV4X3VucmVnaXN0ZXIpOwo+ID4gZGlm ZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9kcF9hdXhfZGV2LmggYi9pbmNsdWRlL2RybS9kcm1f ZHBfYXV4X2Rldi5oCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4u MzU0MDlhMgo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2RwX2F1 eF9kZXYuaAo+ID4gQEAgLTAsMCArMSw1MCBAQAo+ID4gKy8qCj4gPiArICogQ29weXJpZ2h0IMKp IDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KPiA+ICsgKgo+ID4gKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4g PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiA+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gPiArICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCj4gPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gPiArICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK PiA+ICsgKgo+ID4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiA+ICsgKiBwYXJhZ3JhcGgpIHNoYWxs IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl Cj4gPiArICogU29mdHdhcmUuCj4gPiArICoKPiA+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ID4g KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAo+ID4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ID4gKyAqIFRIRSBB VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SIE9USEVSCj4gPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiA+ICsgKiBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTCj4gPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ID4gKyAqCj4gPiArICogQXV0aG9yczoK PiA+ICsgKiAgICBSYWZhZWwgQW50b2dub2xsaSA8cmFmYWVsLmFudG9nbm9sbGlAaW50ZWwuY29t Pgo+ID4gKyAqCj4gPiArICovCj4gPiArCj4gPiArI2lmbmRlZiBEUk1fRFBfQVVYX0RFVgo+ID4g KyNkZWZpbmUgRFJNX0RQX0FVWF9ERVYKPiA+ICsKPiA+ICsjaWZkZWYgQ09ORklHX0RSTV9EUF9B VVhfQ0hBUkRFVgo+ID4gKwo+ID4gK2ludCBkcm1fZHBfYXV4X3JlZ2lzdGVyX2Rldm5vZGUoc3Ry dWN0IGRybV9kcF9hdXggKmF1eCk7Cj4gPiAraW50IGRybV9kcF9hdXhfdW5yZWdpc3Rlcl9kZXZu b2RlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpOwo+ID4gKwo+ID4gKyNlbHNlCj4gPiArCj4gPiAr c3RhdGljIGlubGluZSBpbnQgZHJtX2RwX2F1eF9yZWdpc3Rlcl9kZXZub2RlKHN0cnVjdCBkcm1f ZHBfYXV4ICphdXgpCj4gPiArewo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIGlubGluZSBpbnQgZHJtX2RwX2F1eF91bnJlZ2lzdGVyX2Rldm5vZGUoc3RydWN0IGRybV9k cF9hdXggKmF1eCkKPiA+ICt7Cj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICsjZW5k aWYKPiA+ICsKPiA+ICsjZW5kaWYKPiA+IC0tIAo+ID4gMi40LjMKPiA+IAo+ID4gX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiA+IGRyaS1kZXZlbCBtYWls aW5nIGxpc3QKPiA+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiA+IGh0dHA6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKPiAKPiAtLSAK PiBWaWxsZSBTeXJqw6Rsw6QKPiBJbnRlbCBPVEMKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK