From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Andrew F. Davis" Subject: Re: [RFC][PATCH 2/5 v2] dma-buf: heaps: Add heap helpers Date: Wed, 13 Mar 2019 16:48:44 -0500 Message-ID: References: <1551819273-640-1-git-send-email-john.stultz@linaro.org> <1551819273-640-3-git-send-email-john.stultz@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fllv0016.ext.ti.com (fllv0016.ext.ti.com [198.47.19.142]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0E0016E106 for ; Wed, 13 Mar 2019 21:48:51 +0000 (UTC) In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Liam Mark , John Stultz Cc: Alistair Strachan , Greg KH , Chenbo Feng , lkml , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gMy8xMy8xOSAzOjE4IFBNLCBMaWFtIE1hcmsgd3JvdGU6Cj4gT24gVHVlLCA1IE1hciAyMDE5 LCBKb2huIFN0dWx0eiB3cm90ZToKPiAKPj4gQWRkIGdlbmVyaWMgaGVscGVyIGRtYWJ1ZiBvcHMg Zm9yIGRtYSBoZWFwcywgc28gd2UgY2FuIHJlZHVjZQo+PiB0aGUgYW1vdW50IG9mIGR1cGxpY2F0 aXZlIGNvZGUgZm9yIHRoZSBleHBvcnRlZCBkbWFidWZzLgo+Pgo+PiBUaGlzIGNvZGUgaXMgYW4g ZXZvbHV0aW9uIG9mIHRoZSBBbmRyb2lkIElPTiBpbXBsZW1lbnRhdGlvbiwgc28KPj4gdGhhbmtz IHRvIGl0cyBvcmlnaW5hbCBhdXRob3JzIGFuZCBtYWludGFpbnRlcnM6Cj4+ICAgUmViZWNjYSBT Y2h1bHR6IFphdmluLCBDb2xpbiBDcm9zcywgTGF1cmEgQWJib3R0LCBhbmQgb3RoZXJzIQo+Pgo+ PiBDYzogTGF1cmEgQWJib3R0IDxsYWJib3R0QHJlZGhhdC5jb20+Cj4+IENjOiBCZW5qYW1pbiBH YWlnbmFyZCA8YmVuamFtaW4uZ2FpZ25hcmRAbGluYXJvLm9yZz4KPj4gQ2M6IEdyZWcgS0ggPGdy ZWdraEBsaW51eGZvdW5kYXRpb24ub3JnPgo+PiBDYzogU3VtaXQgU2Vtd2FsIDxzdW1pdC5zZW13 YWxAbGluYXJvLm9yZz4KPj4gQ2M6IExpYW0gTWFyayA8bG1hcmtAY29kZWF1cm9yYS5vcmc+Cj4+ IENjOiBCcmlhbiBTdGFya2V5IDxCcmlhbi5TdGFya2V5QGFybS5jb20+Cj4+IENjOiBBbmRyZXcg Ri4gRGF2aXMgPGFmZEB0aS5jb20+Cj4+IENjOiBDaGVuYm8gRmVuZyA8ZmVuZ2NAZ29vZ2xlLmNv bT4KPj4gQ2M6IEFsaXN0YWlyIFN0cmFjaGFuIDxhc3RyYWNoYW5AZ29vZ2xlLmNvbT4KPj4gQ2M6 IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPj4gU2lnbmVkLW9mZi1ieTogSm9obiBT dHVsdHogPGpvaG4uc3R1bHR6QGxpbmFyby5vcmc+Cj4+IC0tLQo+PiB2MjoKPj4gKiBSZW1vdmVk IGNhY2hlIG1hbmFnZW1lbnQgcGVyZm9ybWFuY2UgaGFjayB0aGF0IEkgaGFkCj4+ICAgYWNjaWRl bnRhbGx5IGZvbGRlZCBpbi4KPj4gKiBSZW1vdmVkIHN0YXRzIGNvZGUgdGhhdCB3YXMgaW4gaGVs cGVycwo+PiAqIExvdHMgb2YgY2hlY2twYXRjaCBjbGVhbnVwcwo+PiAtLS0KPj4gIGRyaXZlcnMv ZG1hLWJ1Zi9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMSArCj4+ICBkcml2ZXJzL2RtYS1idWYv aGVhcHMvTWFrZWZpbGUgICAgICAgfCAgIDIgKwo+PiAgZHJpdmVycy9kbWEtYnVmL2hlYXBzL2hl YXAtaGVscGVycy5jIHwgMzM1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+ ICBkcml2ZXJzL2RtYS1idWYvaGVhcHMvaGVhcC1oZWxwZXJzLmggfCAgNDggKysrKysKPj4gIDQg ZmlsZXMgY2hhbmdlZCwgMzg2IGluc2VydGlvbnMoKykKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2RtYS1idWYvaGVhcHMvTWFrZWZpbGUKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2RtYS1idWYvaGVhcHMvaGVhcC1oZWxwZXJzLmMKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2RtYS1idWYvaGVhcHMvaGVhcC1oZWxwZXJzLmgKPj4KPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZQo+PiBpbmRl eCBiMDMzMmYxLi4wOWMyZjJkIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2RtYS1idWYvTWFrZWZp bGUKPj4gKysrIGIvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlCj4+IEBAIC0xLDQgKzEsNSBAQAo+ PiAgb2JqLXkgOj0gZG1hLWJ1Zi5vIGRtYS1mZW5jZS5vIGRtYS1mZW5jZS1hcnJheS5vIHJlc2Vy dmF0aW9uLm8gc2Vxbm8tZmVuY2Uubwo+PiArb2JqLSQoQ09ORklHX0RNQUJVRl9IRUFQUykJKz0g aGVhcHMvCj4+ICBvYmotJChDT05GSUdfRE1BQlVGX0hFQVBTKQkrPSBkbWEtaGVhcC5vCj4+ICBv YmotJChDT05GSUdfU1lOQ19GSUxFKQkJKz0gc3luY19maWxlLm8KPj4gIG9iai0kKENPTkZJR19T V19TWU5DKQkJKz0gc3dfc3luYy5vIHN5bmNfZGVidWcubwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlIGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxl Cj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLmRlNDk4OTgKPj4gLS0t IC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvTWFrZWZpbGUKPj4gQEAg LTAsMCArMSwyIEBACj4+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+ICtv YmoteQkJCQkJKz0gaGVhcC1oZWxwZXJzLm8KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1 Zi9oZWFwcy9oZWFwLWhlbHBlcnMuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9oZWFwLWhlbHBl cnMuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi5hZTVlOWQwCj4+ IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL2hlYXAtaGVscGVy cy5jCj4+IEBAIC0wLDAgKzEsMzM1IEBACj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMAo+PiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4 L2RtYS1idWYuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KPj4gKyNpbmNsdWRlIDxsaW51 eC9pZHIuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgv c2xhYi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KPj4gKyNpbmNsdWRlIDx1YXBp L2xpbnV4L2RtYS1oZWFwLmg+Cj4+ICsKPj4gKyNpbmNsdWRlICJoZWFwLWhlbHBlcnMuaCIKPj4g Kwo+PiArCj4+ICtzdGF0aWMgdm9pZCAqZG1hX2hlYXBfbWFwX2tlcm5lbChzdHJ1Y3QgaGVhcF9o ZWxwZXJfYnVmZmVyICpidWZmZXIpCj4+ICt7Cj4+ICsJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsK Pj4gKwlpbnQgaSwgajsKPj4gKwl2b2lkICp2YWRkcjsKPj4gKwlwZ3Byb3RfdCBwZ3Byb3Q7Cj4+ ICsJc3RydWN0IHNnX3RhYmxlICp0YWJsZSA9IGJ1ZmZlci0+c2dfdGFibGU7Cj4+ICsJaW50IG5w YWdlcyA9IFBBR0VfQUxJR04oYnVmZmVyLT5oZWFwX2J1ZmZlci5zaXplKSAvIFBBR0VfU0laRTsK Pj4gKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gdm1hbGxvYyhhcnJheV9zaXplKG5wYWdlcywKPj4g KwkJCQkJCSBzaXplb2Yoc3RydWN0IHBhZ2UgKikpKTsKPj4gKwlzdHJ1Y3QgcGFnZSAqKnRtcCA9 IHBhZ2VzOwo+PiArCj4+ICsJaWYgKCFwYWdlcykKPj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7Cj4+ICsKPj4gKwlwZ3Byb3QgPSBQQUdFX0tFUk5FTDsKPj4gKwo+PiArCWZvcl9lYWNoX3Nn KHRhYmxlLT5zZ2wsIHNnLCB0YWJsZS0+bmVudHMsIGkpIHsKPj4gKwkJaW50IG5wYWdlc190aGlz X2VudHJ5ID0gUEFHRV9BTElHTihzZy0+bGVuZ3RoKSAvIFBBR0VfU0laRTsKPj4gKwkJc3RydWN0 IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKHNnKTsKPj4gKwo+PiArCQlXQVJOX09OKGkgPj0gbnBhZ2Vz KTsKPj4gKwkJZm9yIChqID0gMDsgaiA8IG5wYWdlc190aGlzX2VudHJ5OyBqKyspCj4+ICsJCQkq KHRtcCsrKSA9IHBhZ2UrKzsKPj4gKwl9Cj4+ICsJdmFkZHIgPSB2bWFwKHBhZ2VzLCBucGFnZXMs IFZNX01BUCwgcGdwcm90KTsKPj4gKwl2ZnJlZShwYWdlcyk7Cj4+ICsKPj4gKwlpZiAoIXZhZGRy KQo+PiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPj4gKwo+PiArCXJldHVybiB2YWRkcjsK Pj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkbWFfaGVhcF9tYXBfdXNlcihzdHJ1Y3QgaGVhcF9o ZWxwZXJfYnVmZmVyICpidWZmZXIsCj4+ICsJCQkgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEp Cj4+ICt7Cj4+ICsJc3RydWN0IHNnX3RhYmxlICp0YWJsZSA9IGJ1ZmZlci0+c2dfdGFibGU7Cj4+ ICsJdW5zaWduZWQgbG9uZyBhZGRyID0gdm1hLT52bV9zdGFydDsKPj4gKwl1bnNpZ25lZCBsb25n IG9mZnNldCA9IHZtYS0+dm1fcGdvZmYgKiBQQUdFX1NJWkU7Cj4+ICsJc3RydWN0IHNjYXR0ZXJs aXN0ICpzZzsKPj4gKwlpbnQgaTsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJZm9yX2VhY2hfc2co dGFibGUtPnNnbCwgc2csIHRhYmxlLT5uZW50cywgaSkgewo+PiArCQlzdHJ1Y3QgcGFnZSAqcGFn ZSA9IHNnX3BhZ2Uoc2cpOwo+PiArCQl1bnNpZ25lZCBsb25nIHJlbWFpbmRlciA9IHZtYS0+dm1f ZW5kIC0gYWRkcjsKPj4gKwkJdW5zaWduZWQgbG9uZyBsZW4gPSBzZy0+bGVuZ3RoOwo+PiArCj4+ ICsJCWlmIChvZmZzZXQgPj0gc2ctPmxlbmd0aCkgewo+PiArCQkJb2Zmc2V0IC09IHNnLT5sZW5n dGg7Cj4+ICsJCQljb250aW51ZTsKPj4gKwkJfSBlbHNlIGlmIChvZmZzZXQpIHsKPj4gKwkJCXBh Z2UgKz0gb2Zmc2V0IC8gUEFHRV9TSVpFOwo+PiArCQkJbGVuID0gc2ctPmxlbmd0aCAtIG9mZnNl dDsKPj4gKwkJCW9mZnNldCA9IDA7Cj4+ICsJCX0KPj4gKwkJbGVuID0gbWluKGxlbiwgcmVtYWlu ZGVyKTsKPj4gKwkJcmV0ID0gcmVtYXBfcGZuX3JhbmdlKHZtYSwgYWRkciwgcGFnZV90b19wZm4o cGFnZSksIGxlbiwKPj4gKwkJCQkgICAgICB2bWEtPnZtX3BhZ2VfcHJvdCk7Cj4+ICsJCWlmIChy ZXQpCj4+ICsJCQlyZXR1cm4gcmV0Owo+PiArCQlhZGRyICs9IGxlbjsKPj4gKwkJaWYgKGFkZHIg Pj0gdm1hLT52bV9lbmQpCj4+ICsJCQlyZXR1cm4gMDsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4g MDsKPj4gK30KPj4gKwo+PiArCj4+ICt2b2lkIGRtYV9oZWFwX2J1ZmZlcl9kZXN0cm95KHN0cnVj dCBkbWFfaGVhcF9idWZmZXIgKmhlYXBfYnVmZmVyKQo+PiArewo+PiArCXN0cnVjdCBoZWFwX2hl bHBlcl9idWZmZXIgKmJ1ZmZlciA9IHRvX2hlbHBlcl9idWZmZXIoaGVhcF9idWZmZXIpOwo+PiAr Cj4+ICsJaWYgKGJ1ZmZlci0+a21hcF9jbnQgPiAwKSB7Cj4+ICsJCXByX3dhcm5fb25jZSgiJXM6 IGJ1ZmZlciBzdGlsbCBtYXBwZWQgaW4gdGhlIGtlcm5lbFxuIiwKPj4gKwkJCSAgICAgX19mdW5j X18pOwo+PiArCQl2dW5tYXAoYnVmZmVyLT52YWRkcik7Cj4+ICsJfQo+PiArCj4+ICsJYnVmZmVy LT5mcmVlKGJ1ZmZlcik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkICpkbWFfaGVhcF9idWZm ZXJfa21hcF9nZXQoc3RydWN0IGRtYV9oZWFwX2J1ZmZlciAqaGVhcF9idWZmZXIpCj4+ICt7Cj4+ ICsJc3RydWN0IGhlYXBfaGVscGVyX2J1ZmZlciAqYnVmZmVyID0gdG9faGVscGVyX2J1ZmZlciho ZWFwX2J1ZmZlcik7Cj4+ICsJdm9pZCAqdmFkZHI7Cj4+ICsKPj4gKwlpZiAoYnVmZmVyLT5rbWFw X2NudCkgewo+PiArCQlidWZmZXItPmttYXBfY250Kys7Cj4+ICsJCXJldHVybiBidWZmZXItPnZh ZGRyOwo+PiArCX0KPj4gKwl2YWRkciA9IGRtYV9oZWFwX21hcF9rZXJuZWwoYnVmZmVyKTsKPj4g KwlpZiAoV0FSTl9PTkNFKCF2YWRkciwKPj4gKwkJICAgICAgImhlYXAtPm9wcy0+bWFwX2tlcm5l bCBzaG91bGQgcmV0dXJuIEVSUl9QVFIgb24gZXJyb3IiKSkKPj4gKwkJcmV0dXJuIEVSUl9QVFIo LUVJTlZBTCk7Cj4+ICsJaWYgKElTX0VSUih2YWRkcikpCj4+ICsJCXJldHVybiB2YWRkcjsKPj4g KwlidWZmZXItPnZhZGRyID0gdmFkZHI7Cj4+ICsJYnVmZmVyLT5rbWFwX2NudCsrOwo+PiArCXJl dHVybiB2YWRkcjsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZG1hX2hlYXBfYnVmZmVyX2tt YXBfcHV0KHN0cnVjdCBkbWFfaGVhcF9idWZmZXIgKmhlYXBfYnVmZmVyKQo+PiArewo+PiArCXN0 cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKmJ1ZmZlciA9IHRvX2hlbHBlcl9idWZmZXIoaGVhcF9i dWZmZXIpOwo+PiArCj4+ICsJYnVmZmVyLT5rbWFwX2NudC0tOwo+PiArCWlmICghYnVmZmVyLT5r bWFwX2NudCkgewo+PiArCQl2dW5tYXAoYnVmZmVyLT52YWRkcik7Cj4+ICsJCWJ1ZmZlci0+dmFk ZHIgPSBOVUxMOwo+PiArCX0KPj4gK30KPj4gKwo+PiArc3RhdGljIHN0cnVjdCBzZ190YWJsZSAq ZHVwX3NnX3RhYmxlKHN0cnVjdCBzZ190YWJsZSAqdGFibGUpCj4+ICt7Cj4+ICsJc3RydWN0IHNn X3RhYmxlICpuZXdfdGFibGU7Cj4+ICsJaW50IHJldCwgaTsKPj4gKwlzdHJ1Y3Qgc2NhdHRlcmxp c3QgKnNnLCAqbmV3X3NnOwo+PiArCj4+ICsJbmV3X3RhYmxlID0ga3phbGxvYyhzaXplb2YoKm5l d190YWJsZSksIEdGUF9LRVJORUwpOwo+PiArCWlmICghbmV3X3RhYmxlKQo+PiArCQlyZXR1cm4g RVJSX1BUUigtRU5PTUVNKTsKPj4gKwo+PiArCXJldCA9IHNnX2FsbG9jX3RhYmxlKG5ld190YWJs ZSwgdGFibGUtPm5lbnRzLCBHRlBfS0VSTkVMKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCWtmcmVl KG5ld190YWJsZSk7Cj4+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+PiArCX0KPj4gKwo+ PiArCW5ld19zZyA9IG5ld190YWJsZS0+c2dsOwo+PiArCWZvcl9lYWNoX3NnKHRhYmxlLT5zZ2ws IHNnLCB0YWJsZS0+bmVudHMsIGkpIHsKPj4gKwkJbWVtY3B5KG5ld19zZywgc2csIHNpemVvZigq c2cpKTsKPj4gKwkJbmV3X3NnLT5kbWFfYWRkcmVzcyA9IDA7Cj4+ICsJCW5ld19zZyA9IHNnX25l eHQobmV3X3NnKTsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gbmV3X3RhYmxlOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgdm9pZCBmcmVlX2R1cGVkX3RhYmxlKHN0cnVjdCBzZ190YWJsZSAqdGFibGUp Cj4+ICt7Cj4+ICsJc2dfZnJlZV90YWJsZSh0YWJsZSk7Cj4+ICsJa2ZyZWUodGFibGUpOwo+PiAr fQo+PiArCj4+ICtzdHJ1Y3QgZG1hX2hlYXBzX2F0dGFjaG1lbnQgewo+PiArCXN0cnVjdCBkZXZp Y2UgKmRldjsKPj4gKwlzdHJ1Y3Qgc2dfdGFibGUgKnRhYmxlOwo+PiArCXN0cnVjdCBsaXN0X2hl YWQgbGlzdDsKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZG1hX2hlYXBfYXR0YWNoKHN0cnVj dCBkbWFfYnVmICpkbWFidWYsCj4+ICsJCQkgICAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50 ICphdHRhY2htZW50KQo+PiArewo+PiArCXN0cnVjdCBkbWFfaGVhcHNfYXR0YWNobWVudCAqYTsK Pj4gKwlzdHJ1Y3Qgc2dfdGFibGUgKnRhYmxlOwo+PiArCXN0cnVjdCBkbWFfaGVhcF9idWZmZXIg KmhlYXBfYnVmZmVyID0gZG1hYnVmLT5wcml2Owo+PiArCXN0cnVjdCBoZWFwX2hlbHBlcl9idWZm ZXIgKmJ1ZmZlciA9IHRvX2hlbHBlcl9idWZmZXIoaGVhcF9idWZmZXIpOwo+PiArCj4+ICsJYSA9 IGt6YWxsb2Moc2l6ZW9mKCphKSwgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFhKQo+PiArCQlyZXR1 cm4gLUVOT01FTTsKPj4gKwo+PiArCXRhYmxlID0gZHVwX3NnX3RhYmxlKGJ1ZmZlci0+c2dfdGFi bGUpOwo+PiArCWlmIChJU19FUlIodGFibGUpKSB7Cj4+ICsJCWtmcmVlKGEpOwo+PiArCQlyZXR1 cm4gLUVOT01FTTsKPj4gKwl9Cj4+ICsKPj4gKwlhLT50YWJsZSA9IHRhYmxlOwo+PiArCWEtPmRl diA9IGF0dGFjaG1lbnQtPmRldjsKPj4gKwlJTklUX0xJU1RfSEVBRCgmYS0+bGlzdCk7Cj4+ICsK Pj4gKwlhdHRhY2htZW50LT5wcml2ID0gYTsKPj4gKwo+PiArCW11dGV4X2xvY2soJmJ1ZmZlci0+ bG9jayk7Cj4+ICsJbGlzdF9hZGQoJmEtPmxpc3QsICZidWZmZXItPmF0dGFjaG1lbnRzKTsKPj4g KwltdXRleF91bmxvY2soJmJ1ZmZlci0+bG9jayk7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30K Pj4gKwo+PiArc3RhdGljIHZvaWQgZG1hX2hlYXBfZGV0YXRjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1h YnVmLAo+PiArCQkJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQpCj4+ICt7 Cj4+ICsJc3RydWN0IGRtYV9oZWFwc19hdHRhY2htZW50ICphID0gYXR0YWNobWVudC0+cHJpdjsK Pj4gKwlzdHJ1Y3QgZG1hX2hlYXBfYnVmZmVyICpoZWFwX2J1ZmZlciA9IGRtYWJ1Zi0+cHJpdjsK Pj4gKwlzdHJ1Y3QgaGVhcF9oZWxwZXJfYnVmZmVyICpidWZmZXIgPSB0b19oZWxwZXJfYnVmZmVy KGhlYXBfYnVmZmVyKTsKPj4gKwo+PiArCW11dGV4X2xvY2soJmJ1ZmZlci0+bG9jayk7Cj4+ICsJ bGlzdF9kZWwoJmEtPmxpc3QpOwo+PiArCW11dGV4X3VubG9jaygmYnVmZmVyLT5sb2NrKTsKPj4g KwlmcmVlX2R1cGVkX3RhYmxlKGEtPnRhYmxlKTsKPj4gKwo+PiArCWtmcmVlKGEpOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgc3RydWN0IHNnX3RhYmxlICpkbWFfaGVhcF9tYXBfZG1hX2J1ZigKPj4g KwkJCQkJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCwKPj4gKwkJCQkJZW51 bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQo+PiArewo+PiArCXN0cnVjdCBkbWFfaGVh cHNfYXR0YWNobWVudCAqYSA9IGF0dGFjaG1lbnQtPnByaXY7Cj4+ICsJc3RydWN0IHNnX3RhYmxl ICp0YWJsZTsKPj4gKwo+PiArCXRhYmxlID0gYS0+dGFibGU7Cj4+ICsKPj4gKwlpZiAoIWRtYV9t YXBfc2coYXR0YWNobWVudC0+ZGV2LCB0YWJsZS0+c2dsLCB0YWJsZS0+bmVudHMsCj4+ICsJCQlk aXJlY3Rpb24pKQo+IAo+IFNpbmNlIHRoaXMgY29kZSBpcyB1c2VkIGZvciBzeXN0ZW0gaGVhcCBh bmQgYW5kIGFzIHRoZSByZWZlcmVuY2UuCj4gSW4gbXVsdGltZWRpYSB1c2VzIGNhc2VzIHZlcnkg bGFyZ2UgYnVmZmVycyBjYW4gYmUgYWxsb2NhdGVkIGZyb20gc3lzdGVtIAo+IGhlYXAsIGFuZCBz aW5jZSBzeXN0ZW0gaGVhcCBhbGxvY2F0aW9ucyBoYXZlIGEgY2FjaGVkIGtlcm5lbCBtYXBwaW5n IGl0IAo+IGhhcyBiZWVuIGRpZmZpY3VsdCB0byBzdXBwb3J0IHVuY2FjaGVkIGFsbG9jYXRpb25z IHNvIGNsaWVudHMgd2lsbCBsaWtlbHkgCj4gYWxsb2NhdGUgdGhlbSBhcyBjYWNoZWQgYWxsb2Nh dGlvbnMuCj4gTW9zdCBhY2Nlc3MgdG8gdGhlc2UgYnVmZmVycyB3aWxsIG9jY3VyIGZyb20gbm9u IElPLWNvaGVyZW50IGRldmljZXMsIAo+IGhvd2V2ZXIgaW4gZnJhbWV3b3JrcyBzdWNoIGFzIEFu ZHJvaWQgdGhlc2UgYnVmZmVycyB3aWxsIGJlIGRtYSBtYXBwZWQgYW5kIAo+IGRtYSB1bm1hcHBl ZCBmcmVxdWVudGx5LCBmb3IgZXZlcnkgZnJhbWUgYW5kIGZvciBlYWNoIGRldmljZSBpbiB0aGUg Cj4gImJ1ZmZlciBwaXBlbGluZSIsIHdoaWNoIGxlYWRzIHRvIGEgbG90IG9mIHVubmVjZXNzYXJ5 IGNhY2hlIG1haW50ZW5hbmNlIAo+IGluIHRoZSBkbWEgbWFwIGFuZCBkbWEgdW5tYXAgY2FsbHMu Cj4gRnJvbSBwcmV2aW91cyBkaXNjdXNzaW9ucyBpdCBkb2Vzbid0IHNlZW0gbGlrZSB0aGlzIGNv dWxkIGJlIG9wdGltaXplZCBieSAKPiBvbmx5IG1ha2luZyBjaGFuZ2VzIHRvIGRtYS1idWYgaGVh cHMgZnJhbWV3b3JrLgo+IAo+IFNvIEkgdGhpbmsgaXQgd291bGQgYmUgaGVscGZ1bCB0byB0cnkg YW5kIGFncmVlIG9uIHdoYXQgdHlwZXMgb2YgY2hhbmdlcyAKPiB3b3VsZCBiZSByZXF1aXJlZCB0 byB0aGUgQW5kcm9pZCBmcmFtZXdvcmsgYW5kIHBvc3NpYmx5IHRoZSBkbWEtYnVmIGhlYXBzIAo+ IGZyYW1ld29yayB0byByZXNvbHZlIHRoaXMuCj4gRXhhbXBsZQo+IAo+IC0gSGF2ZSBBbmRyb2lk IGZyYW1ld29yayBrZWVwIGJ1ZmZlcnMgZG1hIG1hcHBlZCBmb3IgdGhlIHdob2xlIHVzZSBjYXNl Cj4gCj4gLSBPciBwZXJoYXBzIGhhdmUgQW5kcm9pZCBrZWVwIHJlcXVpcmVkIGRldmljZXMgYXR0 YWNoZWQgdG8gdGhlIGJ1ZmZlciBhcyAKPiB0aGV5IGFyZSAicGlwZWxpbmVkIiBzbyB0aGF0IGNh Y2hlIG1haW50ZW5hbmNlIGNhbiBiZSBza2lwcGVkIGluIGRtYSBtYXAgCj4gYW5kIGRtYSB1bW5h cCBidXQgcmVsaWFibHkgYXBwbGllZCBpbiBiZWdpbi9lbmRfY3B1X2FjY2Vzcy4KPiAKCkkgZG9u J3QgaGF2ZSBhIHN0cm9uZyBvcGluaW9uIG9uIHRoZSBzb2x1dGlvbiBoZXJlIGZvciBBbmRyb2lk LCBidXQgZnJvbQprZXJuZWwvaGFyZHdhcmUgc2lkZSBJIGNhbiBzZWUgd2UgZG9uJ3QgaGF2ZSBh IGdvb2Qgb3duZXJzaGlwIG1vZGVsIGZvcgpkbWEtYnVmIGFuZCB0aGF0IGxvb2tzIHRvIGJlIGNh dXNpbmcgeW91ciB1bm5lZWRlZCBjYWNoZSBvcHMuCgpMZXQgbXkgZ2l2ZSBteSB2aXNpb24gZm9y IHRoZSBtb2RlbCB5b3UgcmVxdWVzdCBiZWxvdy4KCgo+PiArCSB0YWJsZSA9IEVSUl9QVFIoLUVO T01FTSk7IAo+PiArCSByZXR1cm4gdGFibGU7IAo+PiArfSAKPj4gKwo+PiArc3RhdGljIHZvaWQg ZG1hX2hlYXBfdW5tYXBfZG1hX2J1ZihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2ht ZW50LAo+PiArCQkJICAgICAgc3RydWN0IHNnX3RhYmxlICp0YWJsZSwKPj4gKwkJCSAgICAgIGVu dW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKPj4gK3sKPj4gKwlkbWFfdW5tYXBfc2co YXR0YWNobWVudC0+ZGV2LCB0YWJsZS0+c2dsLCB0YWJsZS0+bmVudHMsIGRpcmVjdGlvbik7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZG1hX2hlYXBfbW1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1h YnVmLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPj4gK3sKPj4gKwlzdHJ1Y3QgZG1hX2hl YXBfYnVmZmVyICpoZWFwX2J1ZmZlciA9IGRtYWJ1Zi0+cHJpdjsKPj4gKwlzdHJ1Y3QgaGVhcF9o ZWxwZXJfYnVmZmVyICpidWZmZXIgPSB0b19oZWxwZXJfYnVmZmVyKGhlYXBfYnVmZmVyKTsKPj4g KwlpbnQgcmV0ID0gMDsKPj4gKwo+PiArCW11dGV4X2xvY2soJmJ1ZmZlci0+bG9jayk7Cj4+ICsJ Lyogbm93IG1hcCBpdCB0byB1c2Vyc3BhY2UgKi8KPj4gKwlyZXQgPSBkbWFfaGVhcF9tYXBfdXNl cihidWZmZXIsIHZtYSk7Cj4gCj4gU2luY2UgdGhpcyBjb2RlIGlzIHVzZWQgZm9yIHN5c3RlbSBo ZWFwIGFuZCBhbmQgYXMgdGhlIHJlZmVyZW5jZS4KPiBDdXJyZW50bHkgaW4gQW5kcm9pZCB3aGVu IGEgc3lzdGVtIGhlYXAgYnVmZmVyIGlzIG1vdmluZyBkb3duIHRoZSAKPiAicGlwZWxpbmUiIENQ VSBhY2Nlc3MgbWF5IG9jY3VyIGFuZCB0aGVyZSBtYXkgYmUgbm8gZGV2aWNlIGF0dGFjaGVkLgo+ IEluIHRoZSBwYXN0IHBlb3BsZSBoYXZlIHJhaXNlZCBjb25jZXJucyB0aGF0IHRoaXMgc2hvdWxk IHBlcmhhcHMgbm90IGJlIAo+IHN1cHBvcnRlZCBhbmQgdGhhdCBhdCBsZWFzdCBvbmUgZGV2aWNl IHNob3VsZCBiZSBhdHRhY2hlZCB3aGVuIENQVSBhY2Nlc3MgCj4gb2NjdXJzLgo+IAo+IENhbiB3 ZSBkZWNpZGUsIGZyb20gYSBkbWEtYnVmIGNvbnRyYWN0IHBlcnNwZWN0aXZlLCBvbiB3aGV0aGVy IENQVSBhY2Nlc3MgCj4gd2l0aG91dCBhIGRldmljZSBhdHRhY2hlZCBzaG91bGQgYWxsb3dlZCBh bmQgbWFrZSBpdCBjbGVhciBpbiB0aGUgZG1hLWJ1ZiAKPiBkb2N1bWVudGF0aW9uIGVpdGhlciB3 YXk/Cj4gCj4gSWYgaXQgc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHdlIGNhbiB0cnkgdG8gd29yayB3 aXRoIEFuZHJvaWQgdG8gc2VlIGhvdyAKPiB0aGV5IGNhbiBjaGFuZ2UgdGhlaXIgZnJhbWV3b3Jr IHRvIGFsaWduIHdpdGggdGhlIGRtYS1idWYgc3BlYy4KPiAKCkFzIHlvdSBzYXksIHJpZ2h0IG5v dyBETUEtQlVGIGRvZXMgbm90IHJlYWxseSBwcm92aWRlIGd1aWRlbGluZXMgZm9yCiJ3ZWxsIGJl aGF2ZWQiIGhlYXBzLCBhbmQgYXMgc3VjaCB3ZSBhbGwgZW5kIHVwIG1ha2luZyBkaWZmZXJlbnQK YXNzdW1wdGlvbnMuIEFsdGhvdWdoIEkgZG9uJ3QgdGhpbmsgdGhleSBiZWxvdyBzaG91bGQgYmUg ZW5mb3JjZWQgZm9yCmFsbCBETUEtQlVGcyBpdCBzaG91bGQgYmUgdXNlZCBmb3Igb3VyIGZpcnN0 IHNldCBvZiByZWZlcmVuY2UgaGVhcHMuCgpTbyBmcm9tIHRoZSBzdGFydCwgbGV0cyBsb29rcyBh dCBETUEtQlVGIGJ1ZmZlciBsaWZldGltZXMuIEEgYnVmZmVyCmJlZ2lucyBieSBiZWluZyBhbGxv Y2F0ZWQsIGF0IHRoaXMgcG9pbnQgdGhlIGJhY2tpbmcgcmVzb3VyY2VzICh1c3VhbGx5CnNvbWUg cGFnZXMgaW4gcGh5c2ljYWwgQ1BVIGFkZHJlc3NhYmxlIFJBTSkgaGF2ZSAqbm90KiBiZWVuIGFs bG9jYXRlZAp0aGlzIGlzIGEgY29yZSBmZWF0dXJlIG9mIERNQS1CVUYgYWxsb3dpbmcgc21hcnQg YWxsb2NhdGlvbnMgYXQgbWFwCnRpbWUuIEF0IHRoaXMgcG9pbnQgd2Ugc2hvdWxkIGNvbnNpZGVy IHRoZSBidWZmZXIgaW4gYSBzdGF0ZSAibm9uLW93bmVkCm5vbi1iYWNrZWQiLgoKTmV4dCB3ZSBo YXZlIHRocmVlIHZhbGlkIGFjdGlvbnM6CiAqIENQVSB1c2UKICogZGV2aWNlIGF0dGFjaG1lbnRz CiAqIGZyZWUKCkNQVSB1c2Ugc3RhcnRzIHdpdGggYSBjYWxsIHRvIGJlZ2luX2NwdV9hY2Nlc3Mo KSwgdGhlIGJ1ZmZlciB3aWxsIG5vdwpib3RoIGJlY29tZSBDUFUgb3duZWQgYW5kIHdpbGwgcGlu IGl0J3MgYmFja2luZyBidWZmZXIuIFRoaXMgbGFzdCBwYXJ0CmNhbiBjYXVzZSBiZWdpbl9jcHVf YWNjZXNzKCkgdG8gZmFpbCBmb3Igc29tZSB0eXBlcyBvZiBidWZmZXJzIHRoYXQgb25seQpwaWNr IHRoZWlyIGJhY2tpbmcgcmVzb3VyY2UgYmFzZWQgb24gdGhlIHNldCBvZiBhdHRhY2hlZCBkZXZp Y2VzLCB3aGljaAphdCB0aGlzIHBvaW50IHdlIGhhdmUgbm9uZS4gRm9yIGhlYXBzIGxpa2UgInN5 c3RlbSIgaGVhcCB0aGlzIHNob3VsZCBub3QKYmUgYSBwcm9ibGVtIGFzIHRoZSBiYWNraW5nIHN0 b3JhZ2UgaXMgYWxyZWFkeSBzZWxlY3RlZCBhdCBhbGxvY2F0aW9uIHRpbWUuCgpEZXZpY2UgYXR0 YWNobWVudHMgYW5kIG1hcHBpbmcgc2hvdWxkIGJlaGF2ZSBhcyB0aGV5IGRvIG5vdy4gQWZ0ZXIK bWFwcGluZywgdGhlIGJ1ZmZlciBpcyBub3cgb3duZWQgYnkgdGhlIGF0dGFjaGVkIGRldmljZXMg YW5kIGJhY2tlZC4gVGhlCm93bmVyc2hpcCBjYW4gYmUgdHJhbnNmZXJlZCB0byB0aGUgQ1BVIGFu ZCBiYWNrIGFzIHVzdWFsIHdpdGgKe2JlZ2luLGVuZH1fY3B1X2FjY2VzcygpLgoKRnJlZSByaWdo dCBhZnRlciBhbGxvY2F0aW9uIHdpdGhvdXQgYW55b25lIHRha2luZyBvd25lcnNoaXAgaXMgdHJp dmlhbC4KCk5vdyBoZXJlIGlzIHdoZXJlIHRoaW5ncyBtYXkgZ2V0IGludGVyZXN0aW5nLCB3ZSBj YW4gbm93IGJlIGluIHRoZQpmb2xsb3dpbmcgc3RhdGVzOgoKQ1BVIG93bmVkIGJhY2tlZApEZXZp Y2Ugb3duZWQgYmFja2VkCgpXaGF0IHNob3VsZCB3ZSBkbyB3aGVuIENQVSBvd25lZCBhbmQgZW5k X2NwdV9hY2Nlc3MoKSBpcyBjYWxsZWQgb3Igd2hlbgpEZXZpY2Ugb3duZWQgYW5kIGFsbCBkZXZp Y2VzIGRldGFjaC4gV2hhdCBzdGF0ZSBkbyB3ZSBnbyBpbnRvPyBNeQpvcGluaW9uIHdvdWxkIGJl IHRvIHJldHVybiB0byAibm9uLW93bmVkIG5vbi1iYWNrZWQiIHdoaWNoIG1lYW5zIHRoZQpiYWNr aW5nIHJlc291cmNlIGNhbiBiZSBmcmVlZC4gVGhlIG90aGVyIG9wdGlvbiBpcyB0byBsZWF2ZSBp dCBiYWNrZWQuIEkKYmVsZWF2ZSB0aGlzIGlzIHdoYXQgQW5kcm9pZCBleHBlY3RzIHJpZ2h0IG5v dyBhcyBpdCByZXR1cm5zIGJ1ZmZlcnMgdG8KYSAiQnVmZmVyUXVldWUiIHRvIGxhdGVyIGJlIGRl cXVldWVkIGFuZCB1c2VkIGFnYWluIGluIHRoZSBzYW1lIHdheQp3aXRob3V0IHRpbWUgY29uc3Vt aW5nIHJlYWxsb2NhdGlvbnMuCgpGb3IgInN5c3RlbSIgaGVhcHMgdGhlIHJlc3VsdCBpcyB0aGUg c2FtZSBvdXRzaWRlIG9mIHRoZSBjYWNoZSBvcHMsIGlmCndlIG1haW50YWluIGEgYnVmZmVyIHN0 YXRlIGxpa2UgdGhlIGFib3ZlIHdlIGNhbiBhbHdheXMga25vdyB3aGVuIGEKY2FjaGUgb3Agb3Ig c2ltaWxhciBpcyBuZWVkZWQgKG9ubHkgd2hlbiB0cmFuc2l0aW9uaW5nIG93bmVycywgbm90IG9u CmV2ZXJ5IG1hcC91bm1hcCkuIEZvciBtb3JlIGNvbXBsZXggaGVhcHMgd2UgY2FuIGRvIHNvbWV0 aGluZyBzaW1pbGFyCndoZW4gdHJhbnNpdGlvbmluZyBmcm9tIGJhY2tlZCB0byBub24tYmFja2Vk IChhbmQgdmljZS12ZXJzYSkgc3VjaCBhcwptaWdyYXRpbmcgdGhlIGJhY2tpbmcgZGF0YSB0byBh IG1vcmUgYXBwcm9wcmlhdGUgcmVzb3VyY2UgZ2l2ZW4gdGhlIG5ldwpzZXQgb2YgYXR0YWNoaW5n L21hcHBpbmcgZGV2aWNlcy4KCkEgbW9yZSBjb21wbGV0ZSBzdGF0ZSB0cmFuc2l0aW9uIG1hcCB3 aWxsIHByb2JhYmx5IGJlIG5lZWRlZCB0byBmaWxsIG91dAp3aGF0IHNob3VsZCBiZSBhbGxvd2Vk IGFuZCB3aGF0IHRvIGRvIHdoZW4sIGFuZCBJIGFncmVlIGl0IHdpbGwgYmUgZ29vZAp0byBoYXZl IHRoYXQgZm9yIHRoaXMgZmlyc3Qgc2V0IG9mIHJlZmVyZW5jZSBoZWFwcy4gQnV0IGFsbCBvZiB0 aGlzIGNhbgpiZSBkb25lIG5vdyB3aXRoIERNQS1oZWFwcywgc28gSSBkb24ndCB3YW50IHRvIHRp ZSB1cCB0aGUgY29yZQpkZS1zdGFnaW5nIHRvbyBtdWNoIG9uIGdldHRpbmcgZXZlcnkgcG9zc2li bGUgaGVhcCB0byBiZWhhdmUganVzdCByaWdodAplaXRoZXIuLgoKPj4gKwltdXRleF91bmxvY2so JmJ1ZmZlci0+bG9jayk7Cj4+ICsKPj4gKwlpZiAocmV0KQo+PiArCQlwcl9lcnIoIiVzOiBmYWls dXJlIG1hcHBpbmcgYnVmZmVyIHRvIHVzZXJzcGFjZVxuIiwKPj4gKwkJICAgICAgIF9fZnVuY19f KTsKPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRtYV9o ZWFwX2RtYV9idWZfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQo+PiArewo+PiArCXN0 cnVjdCBkbWFfaGVhcF9idWZmZXIgKmJ1ZmZlciA9IGRtYWJ1Zi0+cHJpdjsKPj4gKwo+PiArCWRt YV9oZWFwX2J1ZmZlcl9kZXN0cm95KGJ1ZmZlcik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lk ICpkbWFfaGVhcF9kbWFfYnVmX2ttYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKPj4gKwkJCQkJ dW5zaWduZWQgbG9uZyBvZmZzZXQpCj4+ICt7Cj4+ICsJc3RydWN0IGRtYV9oZWFwX2J1ZmZlciAq aGVhcF9idWZmZXIgPSBkbWFidWYtPnByaXY7Cj4+ICsJc3RydWN0IGhlYXBfaGVscGVyX2J1ZmZl ciAqYnVmZmVyID0gdG9faGVscGVyX2J1ZmZlcihoZWFwX2J1ZmZlcik7Cj4+ICsKPj4gKwlyZXR1 cm4gYnVmZmVyLT52YWRkciArIG9mZnNldCAqIFBBR0VfU0laRTsKPj4gK30KPj4gKwo+PiArc3Rh dGljIHZvaWQgZG1hX2hlYXBfZG1hX2J1Zl9rdW5tYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwK Pj4gKwkJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQsCj4+ICsJCQkJCXZvaWQgKnB0cikKPj4gK3sK Pj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkbWFfaGVhcF9kbWFfYnVmX2JlZ2luX2NwdV9hY2Nl c3Moc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKPj4gKwkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rp b24gZGlyZWN0aW9uKQo+PiArewo+PiArCXN0cnVjdCBkbWFfaGVhcF9idWZmZXIgKmhlYXBfYnVm ZmVyID0gZG1hYnVmLT5wcml2Owo+PiArCXN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKmJ1ZmZl ciA9IHRvX2hlbHBlcl9idWZmZXIoaGVhcF9idWZmZXIpOwo+PiArCXZvaWQgKnZhZGRyOwo+PiAr CXN0cnVjdCBkbWFfaGVhcHNfYXR0YWNobWVudCAqYTsKPj4gKwlpbnQgcmV0ID0gMDsKPj4gKwo+ PiArCW11dGV4X2xvY2soJmJ1ZmZlci0+bG9jayk7Cj4+ICsJdmFkZHIgPSBkbWFfaGVhcF9idWZm ZXJfa21hcF9nZXQoaGVhcF9idWZmZXIpOwo+IAo+IFNpbmNlIHRoaXMgY29kZSBpcyB1c2VkIGZv ciBzeXN0ZW0gaGVhcCBhbmQgYW5kIGFzIHRoZSByZWZlcmVuY2UuCj4gQXMgaGFzIGJlZW4gZGlz Y3Vzc2VkIGluIHRoZSBwYXN0IHRoZXJlIGFyZSBzZXZlcmFsIGRpc2FkdmFudGFnZXMgdG8gCj4g Y3JlYXRpbmcgYSBrZXJuZWwgbWFwcGluZyBvbiBlYWNoIGNhbGwgdG8gYmVnaW5fY3B1X2FjY2Vz cy4KPiAKPiBUaGUgcmVzdWx0aW5nIGNhbGwgdG8gYWxsb2Nfdm1hcF9hcmVhIGlzIGV4cGVuc2l2 ZSBhbmQgY2FuIGh1cnQgY2xpZW50IAo+IEtQSXMKPiAKPiBBbGxvd2luZyB1c2Vyc3BhY2UgY2xp ZW50cyB0byBjcmVhdGUgYW5kIGRlc3Ryb3kga2VybmVsIG1hcHBpbmdzIGNhbiAKPiBwcm92aWRl IG9wcG9ydHVuaXRpZXMgdG8gY3Jhc2ggdGhlIGtlcm5lbC4KPiAKPiBDYW4gd2UgbG9vayBhdCBy ZW1vdmluZyB0aGUgY3JlYXRpb24gb2YgYSBrZXJuZWwgbWFwcGluZyBpbiAKPiBiZWdpbl9jcHVf YWNjZXNzIGFuZCBlaXRoZXIgaW50cm9kdWNlIHN1cHBvcnQgZm9yIGRtYV9idWZfdm1hcCBhbmQg aGF2ZSAKPiBjbGllbnRzIHVzZSB0aGF0IGluc3RlYWQgb3IgcGVyYWhwcyBjaGFuZ2UgCj4gdGhl IGNvbnRyYWN0IGZvciBkbWFfYnVmX2ttYXAgc28gdGhhdCBpdCBkb2Vzbid0IGFsd2F5cyBuZWVk IHRvIHN1Y2NlZWQ/Cj4gCgpBZ3JlZSwgZm9yIHRoaXMgd2Ugc2hvdWxkIGp1c3QgZmFpbCAob3Ig c3VjY2VlZCBidXQgcGVyZm9ybSBubyBhY3Rpb24/KQppZiB0aGVyZSBhcmUgbm8gYWN0aXZlIG1h cHBpbmdzIChuZWl0aGVyIGluIGtlcm5lbCAoa21hcCwgdm1hcCkgbm9yIGluCnVzZXJzcGFjZSAo bW1hcCkpLCBmb3JjaW5nIGEgbmV3IG1hcHBpbmcganVzdCB0byBrZWVwCmRtYV9zeW5jX3NnX2Zv cl9jcHUoKSBoYXBweSBpcyBub3QgdGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8gaGVyZS4KCj4+ICsJ aWYgKElTX0VSUih2YWRkcikpIHsKPj4gKwkJcmV0ID0gUFRSX0VSUih2YWRkcik7Cj4+ICsJCWdv dG8gdW5sb2NrOwo+PiArCX0KPj4gKwltdXRleF91bmxvY2soJmJ1ZmZlci0+bG9jayk7Cj4+ICsK Pj4gKwltdXRleF9sb2NrKCZidWZmZXItPmxvY2spOwo+PiArCWxpc3RfZm9yX2VhY2hfZW50cnko YSwgJmJ1ZmZlci0+YXR0YWNobWVudHMsIGxpc3QpIHsKPj4gKwkJZG1hX3N5bmNfc2dfZm9yX2Nw dShhLT5kZXYsIGEtPnRhYmxlLT5zZ2wsIGEtPnRhYmxlLT5uZW50cywKPj4gKwkJCQkgICAgZGly ZWN0aW9uKTsKPiAKPiBTaW5jZSB0aGlzIGNvZGUgaXMgdXNlZCBmb3Igc3lzdGVtIGhlYXAgYW5k IGFuZCBhcyB0aGUgcmVmZXJlbmNlLgo+IE5vdCBhIG1ham9yIGlzc3VlIGZvciBuZXdlciBrZXJu ZWxzIGJ1dCBJIHN0aWxsIGRvbid0IHRoaW5rIGl0IG1ha2VzIHNlbnNlIAo+IHRvIGFwcGx5IGNh Y2hlIG1haW50ZW5hbmNlIHdoZW4gdGhlIGJ1ZmZlciBpcyBub3QgZG1hIG1hcHBlZCwgaXQgZG9l c24ndCAKPiBtYWtlcyBzZW5zZSB0byBtZSBmcm9tIGEgbG9naWNhbCBwZXJzcGVjdGl2ZSBhbmQg ZnJvbSBhIHBlcmZvcm1hbmNlIAo+IHBlcnNwZWN0aXZlLgo+IAoKQWdyZWUgYWdhaW4sIHRoaXMg aXMgb25seSBuZWVkZWQgd2hlbiB3ZSBhcmUgdHJhbnNpdGlvbmluZyBvdXQgb2Ygc3RhdGUKImRl dmljZSBvd25lZCIgd2hpY2ggd2Ugd2lsbCBub3QgYmUgaW4gaWYgd2UgaGF2ZSBubyBhY3RpdmUK YXR0YWNoZWQvbWFwcGVkIGRldmljZXMuCgo+IAo+PiArCX0KPj4gKwo+PiArdW5sb2NrOgo+PiAr CW11dGV4X3VubG9jaygmYnVmZmVyLT5sb2NrKTsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IGRtYV9oZWFwX2RtYV9idWZfZW5kX2NwdV9hY2Nlc3Moc3RydWN0IGRt YV9idWYgKmRtYWJ1ZiwKPj4gKwkJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJl Y3Rpb24pCj4+ICt7Cj4+ICsJc3RydWN0IGRtYV9oZWFwX2J1ZmZlciAqaGVhcF9idWZmZXIgPSBk bWFidWYtPnByaXY7Cj4+ICsJc3RydWN0IGhlYXBfaGVscGVyX2J1ZmZlciAqYnVmZmVyID0gdG9f aGVscGVyX2J1ZmZlcihoZWFwX2J1ZmZlcik7Cj4+ICsJc3RydWN0IGRtYV9oZWFwc19hdHRhY2ht ZW50ICphOwo+PiArCj4+ICsJbXV0ZXhfbG9jaygmYnVmZmVyLT5sb2NrKTsKPj4gKwlkbWFfaGVh cF9idWZmZXJfa21hcF9wdXQoaGVhcF9idWZmZXIpOwo+PiArCW11dGV4X3VubG9jaygmYnVmZmVy LT5sb2NrKTsKPj4gKwo+PiArCW11dGV4X2xvY2soJmJ1ZmZlci0+bG9jayk7Cj4+ICsJbGlzdF9m b3JfZWFjaF9lbnRyeShhLCAmYnVmZmVyLT5hdHRhY2htZW50cywgbGlzdCkgewo+PiArCQlkbWFf c3luY19zZ19mb3JfZGV2aWNlKGEtPmRldiwgYS0+dGFibGUtPnNnbCwgYS0+dGFibGUtPm5lbnRz LAo+PiArCQkJCSAgICAgICBkaXJlY3Rpb24pOwo+IAo+IFRoZXJlIGFyZSB1c2UgY2FzZXMgaW4g QW5kcm9pZCB3aGljaCByZXN1bHQgaW4gb25seSBzbWFsbCBwYXJ0cyBvZiBhIGxhcmdlIAo+IGJ1 ZmZlciBhcmUgd3JpdHRlbiBkbyBkdXJpbmcgb2YgQ1BVIGFjY2Vzcy4KPiAKCldlIGhhdmUgdGhl IHNhbWUgcmVxdWlyZW1lbnRzIGZvciBzb21lIE9wZW5DTCB1c2UtY2FzZXMKKGNsQ3JlYXRlU3Vi QnVmZmVyKSwgd2hpY2ggYWxsb3dzIGZvciBjaHVua3Mgb2YgYSBsYXJnZXIgYnVmZmVyIHRvIGhh dmUKZGlmZmVyZW50IHByb3BlcnRpZXMgYW5kIHRoZXJlZm9yIGNhY2hlIG9wZXJhdGlvbnMgZGlm ZmVyZW50IGZyb20gdGhlCmxhcmdlciBwYXJyZW50IGJ1ZmZlci4KCj4gQXBwbHlpbmcgY2FjaGUg bWFpbnRlbmFuY2UgdG8gdGhlIGNvbXBsZXRlIGJ1ZmZlciByZXN1bHRzIGluIGEgbG90IG9mIAo+ IHVubmVjZXNzYXJ5IGNhY2hlIG1haW50ZW5hbmNlIHRoYXQgY2FuIGFmZmVjdCBLUElzLgo+IAo+ IEkgYmVsaWV2ZSB0aGUgQW5kcm9pZCB0ZWFtIGlzIHdvbmRlcmluZyBpZiB0aGVyZSBjb3VsZCBi ZSBhIHdheSB0byBzdXBwb3J0IAo+IHBhcnRpYWwgbWFpbnRlbmFuY2UgaW4gIHdoZXJlIHVzZXJz cGFjZSBjb3VsZCBkZXNjcmliZSB0aGUgYnVmZmVyIGNoYW5nZXMgCj4gdGhleSBoYXZlIG1hZGUu Cj4gCgpUaGUgaXNzdWUgSSBoYXZlIHdpdGggdGhhdCBpcyBpdCB3b3VsZCByZXF1aXJlIHVzZXJz cGFjZSB0byBrbm93IGFib3V0CnRoZSBjYWNoZSBsaW5lIHNpemUgb2YgYWxsIGludm9sdmVkIGRl dmljZXMsIG90aGVyd2lzZSB5b3Ugd291bGQgaGF2ZQp1c2VycyB3cml0aW5nIHRvIHRoZSBmaXJz dCA2NEIgYW5kIGludmFsaWRhdGUgdG8gcmVhZCB0aGUgc2Vjb25kIDY0Qgp3cml0dGVuIGZyb20g YSBETUEgZGV2aWNlIG91dHNpZGUgdGhlIGNhY2hlLCBpbiBhIHN5c3RlbSB3aXRoIDEyOEIKY2Fj aGUtbGluZXMgeW91IHdpbGwgYWx3YXlzIGxvc2Ugc29tZSBkYXRhIGhlcmUuCgo+IEkgdGhpbmsg aXQgd291bGQgYmUgdXNlZnVsIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGlzIGEgbGVhc3QgYSBw YXRoIAo+IGZvcndhcmQgd2l0aCB0aGUgY3VycmVudCBkbWEtYnVmIGhlYXBzIGZyYW1ld29yayB0 byBzb2x2ZSB0aGlzIGZvciBzeXN0ZW0gCj4gaGVhcCBhbGxvY2F0aW9ucy4KPiAKCkRNQS1CVUYg c3luYyBvcGVyYXRpb25zIGFsd2F5cyBhY3Qgb24gdGhlIGZ1bGwgYnVmZmVyLCBjaGFuZ2luZyB0 aGlzCndvdWxkIHJlcXVpcmUgY2hhbmdlcyB0byB0aGUgY29yZSBETUEtQlVGIGZyYW1ld29yayAo c28gb3V0c2lkZSB0aGUKc2NvcGUgb2YgdGhpcyBzZXQpIDopCgpBbmRyZXcKCj4gSSBjYW4gZ2V0 IG1vcmUgZGV0YWlscyBvbiB0aGUgc3BlY2lmaWMgdXNlIGNhc2VzIGlmIHJlcXVpcmVkLgo+IAo+ PiArCX0KPj4gKwltdXRleF91bmxvY2soJmJ1ZmZlci0+bG9jayk7Cj4+ICsKPj4gKwlyZXR1cm4g MDsKPj4gK30KPj4gKwo+PiArY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIGhlYXBfaGVscGVyX29w cyA9IHsKPj4gKwkubWFwX2RtYV9idWYgPSBkbWFfaGVhcF9tYXBfZG1hX2J1ZiwKPj4gKwkudW5t YXBfZG1hX2J1ZiA9IGRtYV9oZWFwX3VubWFwX2RtYV9idWYsCj4+ICsJLm1tYXAgPSBkbWFfaGVh cF9tbWFwLAo+PiArCS5yZWxlYXNlID0gZG1hX2hlYXBfZG1hX2J1Zl9yZWxlYXNlLAo+PiArCS5h dHRhY2ggPSBkbWFfaGVhcF9hdHRhY2gsCj4+ICsJLmRldGFjaCA9IGRtYV9oZWFwX2RldGF0Y2gs Cj4+ICsJLmJlZ2luX2NwdV9hY2Nlc3MgPSBkbWFfaGVhcF9kbWFfYnVmX2JlZ2luX2NwdV9hY2Nl c3MsCj4+ICsJLmVuZF9jcHVfYWNjZXNzID0gZG1hX2hlYXBfZG1hX2J1Zl9lbmRfY3B1X2FjY2Vz cywKPj4gKwkubWFwID0gZG1hX2hlYXBfZG1hX2J1Zl9rbWFwLAo+PiArCS51bm1hcCA9IGRtYV9o ZWFwX2RtYV9idWZfa3VubWFwLAo+PiArfTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1 Zi9oZWFwcy9oZWFwLWhlbHBlcnMuaCBiL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9oZWFwLWhlbHBl cnMuaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi4wYmQ4NjQzCj4+ IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL2hlYXAtaGVscGVy cy5oCj4+IEBAIC0wLDAgKzEsNDggQEAKPj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wICovCj4+ICsvKgo+PiArICogRE1BQlVGIEhlYXBzIGhlbHBlciBjb2RlCj4+ICsgKgo+ PiArICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSwgSW5jLgo+PiArICogQ29weXJpZ2h0IChD KSAyMDE5IExpbmFybyBMdGQuCj4+ICsgKi8KPj4gKwo+PiArI2lmbmRlZiBfSEVBUF9IRUxQRVJT X0gKPj4gKyNkZWZpbmUgX0hFQVBfSEVMUEVSU19ICj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9k bWEtaGVhcC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KPj4gKwo+PiArc3RydWN0IGhl YXBfaGVscGVyX2J1ZmZlciB7Cj4+ICsJc3RydWN0IGRtYV9oZWFwX2J1ZmZlciBoZWFwX2J1ZmZl cjsKPj4gKwo+PiArCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZV9mbGFnczsKPj4gKwl2b2lkICpwcml2 X3ZpcnQ7Cj4+ICsJc3RydWN0IG11dGV4IGxvY2s7Cj4+ICsJaW50IGttYXBfY250Owo+PiArCXZv aWQgKnZhZGRyOwo+PiArCXN0cnVjdCBzZ190YWJsZSAqc2dfdGFibGU7Cj4+ICsJc3RydWN0IGxp c3RfaGVhZCBhdHRhY2htZW50czsKPj4gKwo+PiArCXZvaWQgKCpmcmVlKShzdHJ1Y3QgaGVhcF9o ZWxwZXJfYnVmZmVyICpidWZmZXIpOwo+PiArCj4+ICt9Owo+PiArCj4+ICsjZGVmaW5lIHRvX2hl bHBlcl9idWZmZXIoeCkgXAo+PiArCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgaGVhcF9oZWxwZXJf YnVmZmVyLCBoZWFwX2J1ZmZlcikKPj4gKwo+PiArc3RhdGljIGlubGluZSB2b2lkIElOSVRfSEVB UF9IRUxQRVJfQlVGRkVSKHN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKmJ1ZmZlciwKPj4gKwkJ CQkgdm9pZCAoKmZyZWUpKHN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKikpCj4+ICt7Cj4+ICsJ YnVmZmVyLT5wcml2YXRlX2ZsYWdzID0gMDsKPj4gKwlidWZmZXItPnByaXZfdmlydCA9IE5VTEw7 Cj4+ICsJbXV0ZXhfaW5pdCgmYnVmZmVyLT5sb2NrKTsKPj4gKwlidWZmZXItPmttYXBfY250ID0g MDsKPj4gKwlidWZmZXItPnZhZGRyID0gTlVMTDsKPj4gKwlidWZmZXItPnNnX3RhYmxlID0gTlVM TDsKPj4gKwlJTklUX0xJU1RfSEVBRCgmYnVmZmVyLT5hdHRhY2htZW50cyk7Cj4+ICsJYnVmZmVy LT5mcmVlID0gZnJlZTsKPj4gK30KPj4gKwo+PiArZXh0ZXJuIGNvbnN0IHN0cnVjdCBkbWFfYnVm X29wcyBoZWFwX2hlbHBlcl9vcHM7Cj4+ICsKPj4gKyNlbmRpZiAvKiBfSEVBUF9IRUxQRVJTX0gg Ki8KPj4gLS0gCj4+IDIuNy40Cj4+Cj4+Cj4gCj4gUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIs IEluYy4gaXMgYSBtZW1iZXIgb2YgQ29kZSBBdXJvcmEgRm9ydW0sCj4gYSBMaW51eCBGb3VuZGF0 aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWw=