From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v7 1/2] drm/dp: Add a drm_aux-dev module for reading/writing dpcd registers. Date: Sat, 31 Oct 2015 02:21:37 +0200 Message-ID: <20151031002137.GI4437@intel.com> References: <1446244589-4387-1-git-send-email-rafael.antognolli@intel.com> <1446244589-4387-2-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: <1446244589-4387-2-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 T24gRnJpLCBPY3QgMzAsIDIwMTUgYXQgMDM6MzY6MjhQTSAtMDcwMCwgUmFmYWVsIEFudG9nbm9s bGkgd3JvdGU6Cj4gVGhpcyBtb2R1bGUgaXMgaGVhdmlseSBiYXNlZCBvbiBpMmMtZGV2LiBPbmNl IGxvYWRlZCwgaXQgcHJvdmlkZXMgb25lCj4gZGV2IG5vZGUgcGVyIERQIEFVWCBjaGFubmVsLCBu YW1lZCBkcm1fZHBfYXV4Tiwgd2hlcmUgTiBpcyBhbiBpbnRlZ2VyLgo+IAo+IEl0J3MgcG9zc2li bGUgdG8ga25vdyB3aGljaCBjb25uZWN0b3Igb3ducyB0aGlzIGF1eCBjaGFubmVsIGJ5IGxvb2tp bmcKPiBhdCB0aGUgcmVzcGVjdGl2ZSBzeXNmcyAvc3lzL2NsYXNzL2RybV9hdXhfZGV2L2RybV9k cF9hdXhOL2Nvbm5lY3RvciwgaWYKPiB0aGUgY29ubmVjdG9yIGRldmljZSBwb2ludGVyIHdhcyBj b3JyZWN0bHkgc2V0IGluIHRoZSBhdXggaGVscGVyIHN0cnVjdC4KPiAKPiBUd28gbWFpbiBvcGVy YXRpb25zIGFyZSBwcm92aWRlZCBvbiB0aGUgcmVnaXN0ZXJzIHJlYWQgYW5kIHdyaXRlLiBUaGUK PiBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciB0byBiZSByZWFkIG9yIHdyaXR0ZW4gaXMgZ2l2ZW4g dXNpbmcgbHNlZWsuIFRoZQo+IHNlZWsgcG9zaXRpb24gaXMgdXBkYXRlZCB1cG9uIHJlYWQgb3Ig d3JpdGUuCj4gCj4gdjI6Cj4gIC0gbHNlZWsgaXMgdXNlZCB0byBzZWxlY3QgdGhlIHJlZ2lzdGVy IHRvIHJlYWQvd3JpdGUKPiAgLSByZWFkL3dyaXRlIGFyZSB1c2VkIGluc3RlYWQgb2YgaW9jdGwK PiAgLSBubyBibG9ja2luZ19ub3RpZmllciBpcyB1c2VkLCBqdXN0IGEgZGlyZWN0IGNhbGxiYWNr Cj4gCj4gdjM6Cj4gIC0gdXNlIGRybV9kcF9hdXhfZGV2IHByZWZpeCBmb3IgcHVibGljIGZ1bmN0 aW9ucwo+ICAtIGNoYXJkZXYgaXMgbmFtZWQgZHJtX2RwX2F1eE4KPiAgLSByZWFkL3dyaXRlIGRv bid0IGFsbG9jYXRlIGEgYnVmZmVyIGFueW1vcmUsIGFuZCB0cmFuc2ZlciB1cCB0byAxNiBieXRl cyBhCj4gICAgdGltZQo+ICAtIHJlbW92ZSBub3RpZmllciBsaXN0IGZyb20gdGhlIGltcGxlbWVu dGF0aW9uCj4gIC0gb3B0aW9uIG9uIG1lbnVjb25maWcgaXMgbm93IGEgYm9vbGVhbgo+ICAtIGFk ZCBpbmxpbmUgc3R1YiBmdW5jdGlvbnMgdG8gYXZvaWQgYnJlYWthZ2Ugd2hlbiB0aGlzIG9wdGlv biBpcyBkaXNhYmxlZAo+IAo+IHY0Ogo+ICAtIGZpeCBidWlsZCBzeXN0ZW0gY2hhbmdlcyAtIGFj dHVhbGx5IGRpc2FibGUgdGhpcyBtb2R1bGUgd2hlbiBub3Qgc2VsZWN0ZWQuCj4gCj4gdjU6Cj4g IC0gVXNlIGtyZWYgdG8gYXZvaWQgZGV2aWNlIGNsb3Npbmcgd2hpbGUgc3RpbGwgaW4gdXNlIAo+ ICAtIERvbid0IHVzZSBsaXN0LCB1c2UgYW4gaWRyIGZvciBzdG9yaW5nIGF1eF9kZXYKPiAgLSBS ZW1vdmUgImNvbm5lY3RvciIgYXR0cmlidXRlCj4gIC0gc2V0IGF1eC5kZXYgdG8gdGhlIGNvbm5l Y3RvciBkcm1fY29ubmVjdG9yIGRldmljZSwgaW5zdGVhZCBvZgo+ICAgIGRybV9kZXZpY2UKPiAK PiB2NjoKPiAgLSBVc2UgYXRvbWljX3QgZm9yIHVzYWdlIGNvdW50Cj4gIC0gVXNlIGEgbXV0ZXgg aW5zdGVhZCBvZiBzcGlubG9jayBmb3IgaWRyIGxvY2sKPiAgLSBEZXN0cm95IGNoYXJkZXYgaW1t ZWRpYXRlbHkgb24gdW5yZWdpc3Rlcgo+ICAtIG90aGVyIG1pbm9yIHN1Z2dlc3Rpb25zIGZyb20g VmlsbGUKPiAKPiB2NzoKPiAgLSBzdHlsZSBmaXhlcwo+ICAtIGVycm9yIGhhbmRsaW5nIGZpeGVz Cj4gCj4gU2lnbmVkLW9mZi1ieTogUmFmYWVsIEFudG9nbm9sbGkgPHJhZmFlbC5hbnRvZ25vbGxp QGludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgfCAg IDggKwo+ICBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICB8ICAgMSArCj4gIGRyaXZl cnMvZ3B1L2RybS9kcm1fZHBfYXV4X2Rldi5jIHwgMzc0ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5jICB8ICAg NSArCj4gIGluY2x1ZGUvZHJtL2RybV9kcF9hdXhfZGV2LmggICAgIHwgIDUwICsrKysrKwo+ICA1 IGZpbGVzIGNoYW5nZWQsIDQzOCBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vZHJtX2RwX2F1eF9kZXYuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5j bHVkZS9kcm0vZHJtX2RwX2F1eF9kZXYuaAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gaW5kZXggYzRiZjlhMS4uZGFl ZmNjZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9LY29uZmlnCj4gQEAgLTI1LDYgKzI1LDE0IEBAIGNvbmZpZyBEUk1fTUlQSV9E U0kKPiAgCWJvb2wKPiAgCWRlcGVuZHMgb24gRFJNCj4gIAo+ICtjb25maWcgRFJNX0RQX0FVWF9D SEFSREVWCj4gKwlib29sICJEUk0gRFAgQVVYIEludGVyZmFjZSIKPiArCWRlcGVuZHMgb24gRFJN Cj4gKwloZWxwCj4gKwkgIENob29zZSB0aGlzIG9wdGlvbiB0byBlbmFibGUgYSAvZGV2L2RybV9k cF9hdXhOIG5vZGUgdGhhdCBhbGxvd3MgdG8KPiArCSAgcmVhZCBhbmQgd3JpdGUgdmFsdWVzIHRv IGFyYml0cmFyeSBEUENEIHJlZ2lzdGVycyBvbiB0aGUgRFAgYXV4Cj4gKwkgIGNoYW5uZWwuCj4g Kwo+ICBjb25maWcgRFJNX0tNU19IRUxQRVIKPiAgCXRyaXN0YXRlCj4gIAlkZXBlbmRzIG9uIERS TQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9k cm0vTWFrZWZpbGUKPiBpbmRleCAxZTlmZjRjLi5lNDhlYzhmIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+IEBA IC0yOCw2ICsyOCw3IEBAIGRybV9rbXNfaGVscGVyLXkgOj0gZHJtX2NydGNfaGVscGVyLm8gZHJt X2RwX2hlbHBlci5vIGRybV9wcm9iZV9oZWxwZXIubyBcCj4gIGRybV9rbXNfaGVscGVyLSQoQ09O RklHX0RSTV9MT0FEX0VESURfRklSTVdBUkUpICs9IGRybV9lZGlkX2xvYWQubwo+ICBkcm1fa21z X2hlbHBlci0kKENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKSArPSBkcm1fZmJfaGVscGVyLm8K PiAgZHJtX2ttc19oZWxwZXItJChDT05GSUdfRFJNX0tNU19DTUFfSEVMUEVSKSArPSBkcm1fZmJf Y21hX2hlbHBlci5vCj4gK2RybV9rbXNfaGVscGVyLSQoQ09ORklHX0RSTV9EUF9BVVhfQ0hBUkRF VikgKz0gZHJtX2RwX2F1eF9kZXYubwo+ICAKPiAgb2JqLSQoQ09ORklHX0RSTV9LTVNfSEVMUEVS KSArPSBkcm1fa21zX2hlbHBlci5vCj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v ZHJtX2RwX2F1eF9kZXYuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfYXV4X2Rldi5jCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4xYTNjYTM5Cj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfYXV4X2Rldi5jCj4gQEAgLTAsMCArMSwz NzQgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KPiAr ICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4g KyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdy YXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp b25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK PiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVU SE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT Cj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICogQXV0aG9yczoKPiArICogICAgUmFm YWVsIEFudG9nbm9sbGkgPHJhZmFlbC5hbnRvZ25vbGxpQGludGVsLmNvbT4KPiArICoKPiArICov Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9mcy5o Pgo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+ ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K PiArI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVs cGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1Q Lmg+Cj4gKwo+ICtzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgewo+ICsJdW5zaWduZWQgaW5kZXg7Cj4g KwlzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4Owo+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsJc3Ry dWN0IGtyZWYgcmVmY291bnQ7Cj4gKwlhdG9taWNfdCB1c2Vjb3VudDsKPiArfTsKPiArCj4gKyNk ZWZpbmUgRFJNX0FVWF9NSU5PUlMJMjU2Cj4gKyNkZWZpbmUgQVVYX01BWF9PRkZTRVQJKDEgPDwg MjApCj4gK3N0YXRpYyBERUZJTkVfSURSKGF1eF9pZHIpOwo+ICtzdGF0aWMgREVGSU5FX01VVEVY KGF1eF9pZHJfbXV0ZXgpOwo+ICtzdGF0aWMgc3RydWN0IGNsYXNzICpkcm1fZHBfYXV4X2Rldl9j bGFzczsKPiArc3RhdGljIGludCBkcm1fZGV2X21ham9yID0gLTE7Cj4gKwo+ICtzdGF0aWMgc3Ry dWN0IGRybV9kcF9hdXhfZGV2ICpkcm1fZHBfYXV4X2Rldl9nZXRfYnlfbWlub3IodW5zaWduZWQg aW5kZXgpCj4gK3sKPiArCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldiA9IE5VTEw7Cj4g Kwo+ICsJbXV0ZXhfbG9jaygmYXV4X2lkcl9tdXRleCk7Cj4gKwlhdXhfZGV2ID0gaWRyX2ZpbmQo JmF1eF9pZHIsIGluZGV4KTsKPiArCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmF1eF9kZXYt PnJlZmNvdW50KSkKPiArCQlhdXhfZGV2ID0gTlVMTDsKPiArCW11dGV4X3VubG9jaygmYXV4X2lk cl9tdXRleCk7Cj4gKwo+ICsJcmV0dXJuIGF1eF9kZXY7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1 Y3QgZHJtX2RwX2F1eF9kZXYgKmFsbG9jX2RybV9kcF9hdXhfZGV2KHN0cnVjdCBkcm1fZHBfYXV4 ICphdXgpCj4gK3sKPiArCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldjsKPiArCWludCBp bmRleDsKPiArCj4gKwlhdXhfZGV2ID0ga3phbGxvYyhzaXplb2YoKmF1eF9kZXYpLCBHRlBfS0VS TkVMKTsKPiArCWlmICghYXV4X2RldikKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAr CWF1eF9kZXYtPmF1eCA9IGF1eDsKPiArCWF0b21pY19zZXQoJmF1eF9kZXYtPnVzZWNvdW50LCAx KTsKPiArCWtyZWZfaW5pdCgmYXV4X2Rldi0+cmVmY291bnQpOwo+ICsKPiArCW11dGV4X2xvY2so JmF1eF9pZHJfbXV0ZXgpOwo+ICsJaW5kZXggPSBpZHJfYWxsb2NfY3ljbGljKCZhdXhfaWRyLCBh dXhfZGV2LCAwLCBEUk1fQVVYX01JTk9SUywKPiArCQkJCSBHRlBfS0VSTkVMKTsKPiArCW11dGV4 X3VubG9jaygmYXV4X2lkcl9tdXRleCk7Cj4gKwlpZiAoaW5kZXggPCAwKSB7Cj4gKwkJa2ZyZWUo YXV4X2Rldik7Cj4gKwkJcmV0dXJuIEVSUl9QVFIoaW5kZXgpOwo+ICsJfQo+ICsJYXV4X2Rldi0+ aW5kZXggPSBpbmRleDsKPiArCj4gKwlyZXR1cm4gYXV4X2RldjsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgcmVsZWFzZV9kcm1fZHBfYXV4X2RldihzdHJ1Y3Qga3JlZiAqcmVmKQo+ICt7Cj4gKwlz dHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXYgPQo+ICsJCWNvbnRhaW5lcl9vZihyZWYsIHN0 cnVjdCBkcm1fZHBfYXV4X2RldiwgcmVmY291bnQpOwo+ICsKPiArCWtmcmVlKGF1eF9kZXYpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVfdCBuYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAo+ ICsJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKPiArewo+ICsJ c3NpemVfdCByZXM7Cj4gKwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXYgPQo+ICsJCWRy bV9kcF9hdXhfZGV2X2dldF9ieV9taW5vcihNSU5PUihkZXYtPmRldnQpKTsKPiArCj4gKwlpZiAo IWF1eF9kZXYpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJcmVzID0gc3ByaW50ZihidWYs ICIlc1xuIiwgYXV4X2Rldi0+YXV4LT5uYW1lKTsKPiArCWtyZWZfcHV0KCZhdXhfZGV2LT5yZWZj b3VudCwgcmVsZWFzZV9kcm1fZHBfYXV4X2Rldik7Cj4gKwo+ICsJcmV0dXJuIHJlczsKPiArfQo+ ICtzdGF0aWMgREVWSUNFX0FUVFJfUk8obmFtZSk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGF0dHJp YnV0ZSAqZHJtX2RwX2F1eF9hdHRyc1tdID0gewo+ICsJJmRldl9hdHRyX25hbWUuYXR0ciwKPiAr CU5VTEwsCj4gK307Cj4gK0FUVFJJQlVURV9HUk9VUFMoZHJtX2RwX2F1eCk7Cj4gKwo+ICtzdGF0 aWMgaW50IGF1eGRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxl KQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwo+ICsJc3RydWN0 IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2Owo+ICsKPiArCWF1eF9kZXYgPSBkcm1fZHBfYXV4X2Rl dl9nZXRfYnlfbWlub3IobWlub3IpOwo+ICsJaWYgKCFhdXhfZGV2KQo+ICsJCXJldHVybiAtRU5P REVWOwo+ICsKPiArCWZpbGUtPnByaXZhdGVfZGF0YSA9IGF1eF9kZXY7Cj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGxvZmZfdCBhdXhkZXZfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxl LCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQo+ICt7Cj4gKwlyZXR1cm4gZml4ZWRfc2l6ZV9s bHNlZWsoZmlsZSwgb2Zmc2V0LCB3aGVuY2UsIEFVWF9NQVhfT0ZGU0VUKTsKPiArfQo+ICsKPiAr c3RhdGljIHNzaXplX3QgYXV4ZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2Vy ICpidWYsIHNpemVfdCBjb3VudCwKPiArCQkJICAgbG9mZl90ICpvZmZzZXQpCj4gK3sKPiArCXNp emVfdCBieXRlc19wZW5kaW5nLCBudW1fYnl0ZXNfcHJvY2Vzc2VkID0gMDsKPiArCXN0cnVjdCBk cm1fZHBfYXV4X2RldiAqYXV4X2RldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKPiArCXNzaXplX3Qg cmVzID0gMDsKPiArCj4gKwlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJmF1eF9kZXYtPnVzZWNv dW50KSkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwlieXRlc19wZW5kaW5nID0gbWluKChs b2ZmX3QpY291bnQsIEFVWF9NQVhfT0ZGU0VUIC0gKCpvZmZzZXQpKTsKPiArCj4gKwlpZiAoIWFj Y2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZiwgYnl0ZXNfcGVuZGluZykpIHsKPiArCQlyZXMgPSAt RUZBVUxUOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCXdoaWxlIChieXRlc19wZW5kaW5n ID4gMCkgewo+ICsJCXVpbnQ4X3QgbG9jYWxidWZbRFBfQVVYX01BWF9QQVlMT0FEX0JZVEVTXTsK PiArCQlzc2l6ZV90IHRvZG8gPSBtaW5fdChzaXplX3QsIGJ5dGVzX3BlbmRpbmcsIHNpemVvZihs b2NhbGJ1ZikpOwo+ICsKPiArCQlyZXMgPSBkcm1fZHBfZHBjZF9yZWFkKGF1eF9kZXYtPmF1eCwg Km9mZnNldCwgbG9jYWxidWYsIHRvZG8pOwo+ICsJCWlmIChyZXMgPD0gMCkgewo+ICsJCQlyZXMg PSBudW1fYnl0ZXNfcHJvY2Vzc2VkID8gbnVtX2J5dGVzX3Byb2Nlc3NlZCA6IHJlczsKPiArCQkJ Z290byBvdXQ7Cj4gKwkJfQo+ICsJCWlmIChfX2NvcHlfdG9fdXNlcihidWYgKyBudW1fYnl0ZXNf cHJvY2Vzc2VkLCBsb2NhbGJ1ZiwgcmVzKSkgewo+ICsJCQlyZXMgPSBudW1fYnl0ZXNfcHJvY2Vz c2VkID8KPiArCQkJCW51bV9ieXRlc19wcm9jZXNzZWQgOiAtRUZBVUxUOwo+ICsJCQlnb3RvIG91 dDsKPiArCQl9Cj4gKwkJYnl0ZXNfcGVuZGluZyAtPSByZXM7Cj4gKwkJKm9mZnNldCArPSByZXM7 Cj4gKwkJbnVtX2J5dGVzX3Byb2Nlc3NlZCArPSByZXM7Cj4gKwkJcmVzID0gbnVtX2J5dGVzX3By b2Nlc3NlZDsKPiArCX0KPiArCj4gK291dDoKPiArCWF0b21pY19kZWMoJmF1eF9kZXYtPnVzZWNv dW50KTsKPiArCXdha2VfdXBfYXRvbWljX3QoJmF1eF9kZXYtPnVzZWNvdW50KTsKPiArCXJldHVy biByZXM7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IGF1eGRldl93cml0ZShzdHJ1Y3QgZmls ZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKPiArCQkJICAgIHNpemVfdCBjb3VudCwg bG9mZl90ICpvZmZzZXQpCj4gK3sKPiArCXNpemVfdCBieXRlc19wZW5kaW5nLCBudW1fYnl0ZXNf cHJvY2Vzc2VkID0gMDsKPiArCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldiA9IGZpbGUt PnByaXZhdGVfZGF0YTsKPiArCXNzaXplX3QgcmVzID0gMDsKPiArCj4gKwlpZiAoIWF0b21pY19p bmNfbm90X3plcm8oJmF1eF9kZXYtPnVzZWNvdW50KSkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiAr Cj4gKwlieXRlc19wZW5kaW5nID0gbWluKChsb2ZmX3QpY291bnQsIEFVWF9NQVhfT0ZGU0VUIC0g Km9mZnNldCk7Cj4gKwo+ICsJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZiwgYnl0ZXNf cGVuZGluZykpIHsKPiArCQlyZXMgPSAtRUZBVUxUOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsK PiArCXdoaWxlIChieXRlc19wZW5kaW5nID4gMCkgewo+ICsJCXVpbnQ4X3QgbG9jYWxidWZbRFBf QVVYX01BWF9QQVlMT0FEX0JZVEVTXTsKPiArCQlzc2l6ZV90IHRvZG8gPSBtaW5fdChzaXplX3Qs IGJ5dGVzX3BlbmRpbmcsIHNpemVvZihsb2NhbGJ1ZikpOwo+ICsKPiArCQlpZiAoX19jb3B5X2Zy b21fdXNlcihsb2NhbGJ1ZiwKPiArCQkJCSAgICAgYnVmICsgbnVtX2J5dGVzX3Byb2Nlc3NlZCwg dG9kbykpIHsKPiArCQkJcmVzID0gbnVtX2J5dGVzX3Byb2Nlc3NlZCA/Cj4gKwkJCQludW1fYnl0 ZXNfcHJvY2Vzc2VkIDogLUVGQVVMVDsKPiArCQkJZ290byBvdXQ7Cj4gKwkJfQo+ICsKPiArCQly ZXMgPSBkcm1fZHBfZHBjZF93cml0ZShhdXhfZGV2LT5hdXgsICpvZmZzZXQsIGxvY2FsYnVmLCB0 b2RvKTsKPiArCQlpZiAocmVzIDw9IDApIHsKPiArCQkJcmVzID0gbnVtX2J5dGVzX3Byb2Nlc3Nl ZCA/IG51bV9ieXRlc19wcm9jZXNzZWQgOiByZXM7Cj4gKwkJCWdvdG8gb3V0Owo+ICsJCX0KPiAr CQlieXRlc19wZW5kaW5nIC09IHJlczsKPiArCQkqb2Zmc2V0ICs9IHJlczsKPiArCQludW1fYnl0 ZXNfcHJvY2Vzc2VkICs9IHJlczsKPiArCQlyZXMgPSBudW1fYnl0ZXNfcHJvY2Vzc2VkOwo+ICsJ fQo+ICsKPiArb3V0Ogo+ICsJYXRvbWljX2RlYygmYXV4X2Rldi0+dXNlY291bnQpOwo+ICsJd2Fr ZV91cF9hdG9taWNfdCgmYXV4X2Rldi0+dXNlY291bnQpOwo+ICsJcmV0dXJuIHJlczsKPiArfQo+ ICsKPiArc3RhdGljIGludCBhdXhkZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1 Y3QgZmlsZSAqZmlsZSkKPiArewo+ICsJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2ID0g ZmlsZS0+cHJpdmF0ZV9kYXRhOwo+ICsKPiArCWtyZWZfcHV0KCZhdXhfZGV2LT5yZWZjb3VudCwg cmVsZWFzZV9kcm1fZHBfYXV4X2Rldik7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXV4ZGV2X2ZvcHMgPSB7Cj4gKwkub3duZXIJ CT0gVEhJU19NT0RVTEUsCj4gKwkubGxzZWVrCQk9IGF1eGRldl9sbHNlZWssCj4gKwkucmVhZAkJ PSBhdXhkZXZfcmVhZCwKPiArCS53cml0ZQkJPSBhdXhkZXZfd3JpdGUsCj4gKwkub3BlbgkJPSBh dXhkZXZfb3BlbiwKPiArCS5yZWxlYXNlCT0gYXV4ZGV2X3JlbGVhc2UsCj4gK307Cj4gKwo+ICsj ZGVmaW5lIHRvX2F1eGRldihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IGRybV9kcF9hdXhfZGV2 LCBhdXgpCj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9kcF9hdXhfZGV2ICpkcm1fZHBfYXV4X2Rl dl9nZXRfYnlfYXV4KHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4gK3sKPiArCXN0cnVjdCBkcm1f ZHBfYXV4X2RldiAqaXRlciwgKmF1eF9kZXYgPSBOVUxMOwo+ICsJaW50IGlkOwo+ICsKPiArCS8q IGRvbid0IGluY3JlYXNlIGtyZWYgY291bnQgaGVyZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gc2hv dWxkIG9ubHkgYmUKPiArCSAqIHVzZWQgYnkgZHJtX2RwX2F1eF91bnJlZ2lzdGVyX2Rldm5vZGUu IFRodXMsIGl0IHdpbGwgYWx3YXlzIGhhdmUgYXQKPiArCSAqIGxlYXN0IG9uZSByZWZlcmVuY2Ug LSB0aGUgb25lIHRoYXQgZHJtX2RwX2F1eF9yZWdpc3Rlcl9kZXZub2RlCj4gKwkgKiBjcmVhdGVk Cj4gKwkgKi8KPiArCW11dGV4X2xvY2soJmF1eF9pZHJfbXV0ZXgpOwo+ICsJaWRyX2Zvcl9lYWNo X2VudHJ5KCZhdXhfaWRyLCBpdGVyLCBpZCkgewo+ICsJCWlmIChpdGVyLT5hdXggPT0gYXV4KSB7 Cj4gKwkJCWF1eF9kZXYgPSBpdGVyOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwltdXRl eF91bmxvY2soJmF1eF9pZHJfbXV0ZXgpOwo+ICsJcmV0dXJuIGF1eF9kZXY7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgYXV4ZGV2X3dhaXRfYXRvbWljX3QoYXRvbWljX3QgKnApCj4gK3sKPiArCXNj aGVkdWxlKCk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsvKioKPiArICogZHJtX2RwX2F1eF91bnJl Z2lzdGVyX2Rldm5vZGUoKSAtIHVucmVnaXN0ZXIgYSBkZXZub2RlIGZvciB0aGlzIGF1eCBjaGFu bmVsCj4gKyAqIEBhdXg6IERpc3BsYXlQb3J0IEFVWCBjaGFubmVsCj4gKyAqCj4gKyAqIFJldHVy bnMgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ICsg Ki8KPiArdm9pZCBkcm1fZHBfYXV4X3VucmVnaXN0ZXJfZGV2bm9kZShzdHJ1Y3QgZHJtX2RwX2F1 eCAqYXV4KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXY7Cj4gKwl1bnNp Z25lZCBpbnQgbWlub3I7Cj4gKwo+ICsJYXV4X2RldiA9IGRybV9kcF9hdXhfZGV2X2dldF9ieV9h dXgoYXV4KTsKPiArCWlmICghYXV4X2RldikgLyogYXR0YWNoIG11c3QgaGF2ZSBmYWlsZWQgKi8K PiArCQlyZXR1cm47Cj4gKwo+ICsJbXV0ZXhfbG9jaygmYXV4X2lkcl9tdXRleCk7Cj4gKwlpZHJf cmVtb3ZlKCZhdXhfaWRyLCBhdXhfZGV2LT5pbmRleCk7Cj4gKwltdXRleF91bmxvY2soJmF1eF9p ZHJfbXV0ZXgpOwo+ICsKPiArCWF0b21pY19kZWMoJmF1eF9kZXYtPnVzZWNvdW50KTsKPiArCXdh aXRfb25fYXRvbWljX3QoJmF1eF9kZXYtPnVzZWNvdW50LCBhdXhkZXZfd2FpdF9hdG9taWNfdCwK PiArCQkJIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKPiArCj4gKwltaW5vciA9IGF1eF9kZXYtPmlu ZGV4Owo+ICsJaWYgKGF1eF9kZXYtPmRldikKPiArCQlkZXZpY2VfZGVzdHJveShkcm1fZHBfYXV4 X2Rldl9jbGFzcywKPiArCQkJICAgICAgIE1LREVWKGRybV9kZXZfbWFqb3IsIG1pbm9yKSk7Cj4g Kwo+ICsJRFJNX0RFQlVHKCJkcm1fZHBfYXV4X2RldjogYXV4IFslc10gdW5yZWdpc3RlcmluZ1xu IiwgYXV4LT5uYW1lKTsKPiArCWtyZWZfcHV0KCZhdXhfZGV2LT5yZWZjb3VudCwgcmVsZWFzZV9k cm1fZHBfYXV4X2Rldik7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fZHBfYXV4X3VucmVnaXN0 ZXJfZGV2bm9kZSk7Cj4gKwo+ICsvKioKPiArICogZHJtX2RwX2F1eF9yZWdpc3Rlcl9kZXZub2Rl KCkgLSByZWdpc3RlciBhIGRldm5vZGUgZm9yIHRoaXMgYXV4IGNoYW5uZWwKPiArICogQGF1eDog RGlzcGxheVBvcnQgQVVYIGNoYW5uZWwKPiArICoKPiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mg b3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAqLwo+ICtpbnQgZHJtX2Rw X2F1eF9yZWdpc3Rlcl9kZXZub2RlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4gK3sKPiArCXN0 cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldjsKPiArCWludCByZXM7Cj4gKwo+ICsJYXV4X2Rl diA9IGFsbG9jX2RybV9kcF9hdXhfZGV2KGF1eCk7Cj4gKwlpZiAoSVNfRVJSKGF1eF9kZXYpKQo+ ICsJCXJldHVybiBQVFJfRVJSKGF1eF9kZXYpOwo+ICsKPiArCWF1eF9kZXYtPmRldiA9IGRldmlj ZV9jcmVhdGUoZHJtX2RwX2F1eF9kZXZfY2xhc3MsIGF1eC0+ZGV2LAo+ICsJCQkJICAgICBNS0RF Vihkcm1fZGV2X21ham9yLCBhdXhfZGV2LT5pbmRleCksIE5VTEwsCj4gKwkJCQkgICAgICJkcm1f ZHBfYXV4JWQiLCBhdXhfZGV2LT5pbmRleCk7Cj4gKwlpZiAoSVNfRVJSKGF1eF9kZXYtPmRldikp IHsKPiArCQlyZXMgPSBQVFJfRVJSKGF1eF9kZXYtPmRldik7Cj4gKwkJYXV4X2Rldi0+ZGV2ID0g TlVMTDsKPiArCQlnb3RvIGVycm9yOwo+ICsJfQo+ICsKPiArCURSTV9ERUJVRygiZHJtX2RwX2F1 eF9kZXY6IGF1eCBbJXNdIHJlZ2lzdGVyZWQgYXMgbWlub3IgJWRcbiIsCj4gKwkJICBhdXgtPm5h bWUsIGF1eF9kZXYtPmluZGV4KTsKPiArCXJldHVybiAwOwo+ICtlcnJvcjoKPiArCWRybV9kcF9h dXhfdW5yZWdpc3Rlcl9kZXZub2RlKGF1eCk7Cj4gKwlyZXR1cm4gcmVzOwo+ICt9Cj4gK0VYUE9S VF9TWU1CT0woZHJtX2RwX2F1eF9yZWdpc3Rlcl9kZXZub2RlKTsKPiArCj4gK3N0YXRpYyBpbnQg X19pbml0IGRybV9kcF9hdXhfZGV2X2luaXQodm9pZCkKPiArewo+ICsJaW50IHJlczsKPiArCj4g Kwlkcm1fZHBfYXV4X2Rldl9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImRybV9k cF9hdXhfZGV2Iik7Cj4gKwlpZiAoSVNfRVJSKGRybV9kcF9hdXhfZGV2X2NsYXNzKSkgewo+ICsJ CXJlcyA9IFBUUl9FUlIoZHJtX2RwX2F1eF9kZXZfY2xhc3MpOwo+ICsJCWdvdG8gb3V0Owo+ICsJ fQo+ICsJZHJtX2RwX2F1eF9kZXZfY2xhc3MtPmRldl9ncm91cHMgPSBkcm1fZHBfYXV4X2dyb3Vw czsKPiArCj4gKwlyZXMgPSByZWdpc3Rlcl9jaHJkZXYoMCwgImF1eCIsICZhdXhkZXZfZm9wcyk7 Cj4gKwlpZiAocmVzIDwgMCkKPiArCQlnb3RvIG91dDsKPiArCWRybV9kZXZfbWFqb3IgPSByZXM7 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK291dDoKPiArCURSTV9FUlJPUigiJXM6IERyaXZlciBJbml0 aWFsaXNhdGlvbiBmYWlsZWRcbiIsIF9fRklMRV9fKTsKCkknbSBub3Qgc3VyZSB0aGlzIGVycm9y IG1lc3NhZ2UgcHJvdmlkZXMgbXVjaCB2YWx1ZSwgc28gbWF5YmUganVzdApkcm9wIGl0PyBCdXQg aWYgeW91IHdhbnQgdG8ga2VlcCBpdCwgYXQgbGVhc3QgeW91IHNob3VsZCBkcm9wIHRoZQpfX0ZJ TEVfXyBzaW5jZSBEUk1fRVJST1Igd2lsbCBzcGV3IG91dCB0aGUgZnVuY3Rpb24gbmFtZSBhbnl3 YXkuCgo+ICsJY2xhc3NfZGVzdHJveShkcm1fZHBfYXV4X2Rldl9jbGFzcyk7Cj4gKwlyZXR1cm4g cmVzOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2V4aXQgZHJtX2RwX2F1eF9kZXZfZXhpdCh2 b2lkKQo+ICt7Cj4gKwl1bnJlZ2lzdGVyX2NocmRldihkcm1fZGV2X21ham9yLCAiYXV4Iik7Cj4g KwljbGFzc19kZXN0cm95KGRybV9kcF9hdXhfZGV2X2NsYXNzKTsKPiArfQo+ICsKPiArTU9EVUxF X0FVVEhPUigiUmFmYWVsIEFudG9nbm9sbGkgPHJhZmFlbC5hbnRvZ25vbGxpQGludGVsLmNvbT4i KTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJEUk0gRFAgQVVYIC9kZXYgZW50cmllcyBkcml2ZXIi KTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRpb25hbCByaWdodHMiKTsKPiArCj4g K21vZHVsZV9pbml0KGRybV9kcF9hdXhfZGV2X2luaXQpOwo+ICttb2R1bGVfZXhpdChkcm1fZHBf YXV4X2Rldl9leGl0KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxw ZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMKPiBpbmRleCA5NTM1YzViLi5k MjU2NWNjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5jCj4gQEAgLTI4LDYgKzI4LDcgQEAK PiAgI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KPiAg I2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2RwX2F1 eF9kZXYuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gIAo+ICAvKioKPiBAQCAtNzY4LDYg Kzc2OSw5IEBAIGludCBkcm1fZHBfYXV4X3JlZ2lzdGVyKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgp Cj4gIAlzdHJsY3B5KGF1eC0+ZGRjLm5hbWUsIGF1eC0+bmFtZSA/IGF1eC0+bmFtZSA6IGRldl9u YW1lKGF1eC0+ZGV2KSwKPiAgCQlzaXplb2YoYXV4LT5kZGMubmFtZSkpOwo+ICAKPiArCWlmIChk cm1fZHBfYXV4X3JlZ2lzdGVyX2Rldm5vZGUoYXV4KSkKPiArCQlkcm1fZXJyKCIlczogQ291bGQg bm90IHJlZ2lzdGVyIGRybV9kcF9hdXhfZGV2LlxuIiwgX19GSUxFX18pOwoKU2hvdWxkIGJlIERS TV9FUlJPUiwgYW5kIF9fRklMRV9fIG5vdCBuZWVkZWQgYWdhaW4uCgpIbW0uIEFjdHVhbGx5IHRo ZSBlcnJvciBoYW5kbGluZyBoZXJlIHNlZW1zIGZpc2h5LiBJZiB0aGUgaTJjX2FkZF9hZGFwdGVy KCkKZmFpbHMsIHdlIHdpbGwgc2lnbmFsIGFuIGVycm9yIHRvIHRoZSBjYWxsZXIgd2hvIHdpbGwg YXNzdW1lIHRoZSBvcGVyYXRpb24KZmFpbGVkLCBidXQgd2UndmUgYWxyZWFkeSByZWdpc3RlcmVk IHRoZSBhdXhfZGV2LiBTbyBJIHN1Z2dlc3QganVzdCBkZWFsaW5nCndpdGggZXJyb3JzIHRoZSBy aWdodCB3YXksIGVnOgoKCS4uLgoJcmV0ID0gZHJtX2RwX2F1eF9yZWdpc3Rlcl9kZXZub2RlKCkK CWlmIChyZXQpCgkJcmV0dXJuIHJldDsKCglyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoKTsKCWlmIChy ZXQpIHsKCQlkcm1fZHBfYXV4X3VucmVnaXN0ZXJfZGV2bm9kZSgpOwoJCXJldHVybiByZXQKCX0K CglyZXR1cm4gMDsKfQoKV2l0aCB0aG9zZSwgdGhpcyBpcwpSZXZpZXdlZC1ieTogVmlsbGUgU3ly asOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCj4gKwo+ICAJcmV0dXJuIGky Y19hZGRfYWRhcHRlcigmYXV4LT5kZGMpOwo+ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX2RwX2F1 eF9yZWdpc3Rlcik7Cj4gQEAgLTc3OCw2ICs3ODIsNyBAQCBFWFBPUlRfU1lNQk9MKGRybV9kcF9h dXhfcmVnaXN0ZXIpOwo+ICAgKi8KPiAgdm9pZCBkcm1fZHBfYXV4X3VucmVnaXN0ZXIoc3RydWN0 IGRybV9kcF9hdXggKmF1eCkKPiAgewo+ICsJZHJtX2RwX2F1eF91bnJlZ2lzdGVyX2Rldm5vZGUo YXV4KTsKPiAgCWkyY19kZWxfYWRhcHRlcigmYXV4LT5kZGMpOwo+ICB9Cj4gIEVYUE9SVF9TWU1C T0woZHJtX2RwX2F1eF91bnJlZ2lzdGVyKTsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJt X2RwX2F1eF9kZXYuaCBiL2luY2x1ZGUvZHJtL2RybV9kcF9hdXhfZGV2LmgKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjM5MWEyY2YKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvaW5jbHVkZS9kcm0vZHJtX2RwX2F1eF9kZXYuaAo+IEBAIC0wLDAgKzEsNTAgQEAKPiArLyoK PiArICogQ29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUg U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv bgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBi ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZ UklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRI RSBTT0ZUV0FSRS4KPiArICoKPiArICogQXV0aG9yczoKPiArICogICAgUmFmYWVsIEFudG9nbm9s bGkgPHJhZmFlbC5hbnRvZ25vbGxpQGludGVsLmNvbT4KPiArICoKPiArICovCj4gKwo+ICsjaWZu ZGVmIERSTV9EUF9BVVhfREVWCj4gKyNkZWZpbmUgRFJNX0RQX0FVWF9ERVYKPiArCj4gKyNpZmRl ZiBDT05GSUdfRFJNX0RQX0FVWF9DSEFSREVWCj4gKwo+ICtpbnQgZHJtX2RwX2F1eF9yZWdpc3Rl cl9kZXZub2RlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpOwo+ICt2b2lkIGRybV9kcF9hdXhfdW5y ZWdpc3Rlcl9kZXZub2RlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpOwo+ICsKPiArI2Vsc2UKPiAr Cj4gK3N0YXRpYyBpbmxpbmUgaW50IGRybV9kcF9hdXhfcmVnaXN0ZXJfZGV2bm9kZShzdHJ1Y3Qg ZHJtX2RwX2F1eCAqYXV4KQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlu bGluZSB2b2lkIGRybV9kcF9hdXhfdW5yZWdpc3Rlcl9kZXZub2RlKHN0cnVjdCBkcm1fZHBfYXV4 ICphdXgpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsjZW5kaWYKPiArCj4gKyNlbmRp Zgo+IC0tIAo+IDIuNC4zCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KPiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZHJpLWRldmVsQGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwKCi0tIApWaWxsZSBTeXJqw6Rsw6QKSW50ZWwgT1RDCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxp c3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==