From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: dmaengine: Add metadata_ops for dma_async_tx_descriptor From: Vinod Koul Message-Id: <20180829155212.GG2388@vkoul-mobl> Date: Wed, 29 Aug 2018 21:22:12 +0530 To: Peter Ujfalusi Cc: dan.j.williams@intel.com, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, lars@metafoo.de, radheys@xilinx.com List-ID: T24gMjMtMDgtMTgsIDE2OjA3LCBQZXRlciBVamZhbHVzaSB3cm90ZToKPiBUaGUgbWV0YWRhdGEg aXMgYmVzdCBkZXNjcmliZWQgYXMgc2lkZSBiYW5kIGRhdGEgb3IgcGFyYW1ldGVycyB0cmF2ZWxp bmcKPiBhbG9uZ3NpZGUgdGhlIGRhdGEgRE1BZCBieSB0aGUgRE1BIGVuZ2luZS4gSXQgaXMgZGF0 YQo+IHdoaWNoIGlzIHVuZGVyc3Rvb2QgYnkgdGhlIHBlcmlwaGVyYWwgYW5kIHRoZSBwZXJpcGhl cmFsIGRyaXZlciBvbmx5LCB0aGUKPiBETUEgZW5naW5lIHNlZSBpdCBvbmx5IGFzIGRhdGEgYmxv Y2sgYW5kIGl0IGlzIG5vdCBpbnRlcnByZXRpbmcgaXQgaW4gYW55Cj4gd2F5Lgo+IAo+IFRoZSBt ZXRhZGF0YSBjYW4gYmUgZGlmZmVyZW50IHBlciBkZXNjcmlwdG9yIGFzIGl0IGlzIGEgcGFyYW1l dGVyIGZvciB0aGUKPiBkYXRhIGJlaW5nIHRyYW5zZmVycmVkLgo+IAo+IElmIHRoZSBETUEgc3Vw cG9ydHMgcGVyIGRlc2NyaXB0b3IgbWV0YWRhdGEgaXQgY2FuIGltcGxlbWVudCB0aGUgYXR0YWNo LAo+IGdldF9wdHIvc2V0X2xlbiBjYWxsYmFja3MuCj4gCj4gQ2xpZW50IGRyaXZlcnMgbXVzdCBv bmx5IHVzZSBlaXRoZXIgYXR0YWNoIG9yIGdldF9wdHIvc2V0X2xlbiB0byBhdm9pZAo+IG1pc3Mg Y29uZmlndXJhdGlvbi4KCm1pc2NvbmZpZ3VyYXRpb24/CgoKPiBDbGllbnQgZHJpdmVyIGNhbiBj aGVjayBpZiBhIGdpdmVuIG1ldGFkYXRhIG1vZGUgaXMgc3VwcG9ydGVkIGJ5IHRoZQo+IGNoYW5u ZWwgZHVyaW5nIHByb2JlIHRpbWUgd2l0aAo+IGRtYWVuZ2luZV9pc19tZXRhZGF0YV9tb2RlX3N1 cHBvcnRlZChjaGFuLCBERVNDX01FVEFEQVRBX0NMSUVOVCk7Cj4gZG1hZW5naW5lX2lzX21ldGFk YXRhX21vZGVfc3VwcG9ydGVkKGNoYW4sIERFU0NfTUVUQURBVEFfRU5HSU5FKTsKPiAKPiBhbmQg YmFzZWQgb24gdGhpcyBpbmZvcm1hdGlvbiBjYW4gdXNlIGVpdGhlciBtb2RlLgo+IAo+IFdyYXBw ZXJzIGFyZSBhbHNvIGFkZGVkIGZvciB0aGUgbWV0YWRhdGFfb3BzLgo+IAo+IFRvIGJlIHVzZWQg aW4gREVTQ19NRVRBREFUQV9DTElFTlQgbW9kZToKPiBkbWFlbmdpbmVfZGVzY19hdHRhY2hfbWV0 YWRhdGEoKQo+IAo+IFRvIGJlIHVzZWQgaW4gREVTQ19NRVRBREFUQV9FTkdJTkUgbW9kZToKPiBk bWFlbmdpbmVfZGVzY19nZXRfbWV0YWRhdGFfcHRyKCkKPiBkbWFlbmdpbmVfZGVzY19zZXRfbWV0 YWRhdGFfbGVuKCkKPiAKPiBTaWduZWQtb2ZmLWJ5OiBQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpm YWx1c2lAdGkuY29tPgo+IC0tLQo+IEhpLAo+IAo+IENoYW5nZXMgc2luY2UgcmZjOgo+IC0gREVT Q19NRVRBREFUQV9FTUJFRERFRCByZW5hbWVkIHRvIERFU0NfTUVUQURBVEFfRU5HSU5FCj4gLSBV c2UgZmxvdyBpcyBhZGRlZCBmb3IgYm90aCBDTElFTlQgYW5kIEVOR0lORSBtZXRhZGF0YSBtb2Rl cwo+IAo+IFJlZ2FyZHMsCj4gUGV0ZXIKPiAKPiAgaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaCB8 IDE0NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAxIGZpbGUgY2hh bmdlZCwgMTQ0IGluc2VydGlvbnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9k bWFlbmdpbmUuaCBiL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKPiBpbmRleCAzZGI4MzNhOGM1 NDIuLmY4MDk2MzVjZmVhYSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5o Cj4gKysrIGIvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaAo+IEBAIC0yMzEsNiArMjMxLDU3IEBA IHR5cGVkZWYgc3RydWN0IHsgREVDTEFSRV9CSVRNQVAoYml0cywgRE1BX1RYX1RZUEVfRU5EKTsg fSBkbWFfY2FwX21hc2tfdDsKPiAgICogQGJ5dGVzX3RyYW5zZmVycmVkOiBieXRlIGNvdW50ZXIK PiAgICovCj4gIAo+ICsvKioKPiArICogZW51bSBkbWFfZGVzY19tZXRhZGF0YV9tb2RlIC0gcGVy IGRlc2NyaXB0b3IgbWV0YWRhdGEgbW9kZSB0eXBlcyBzdXBwb3J0ZWQKPiArICogQERFU0NfTUVU QURBVEFfQ0xJRU5UIC0gdGhlIG1ldGFkYXRhIGJ1ZmZlciBpcyBhbGxvY2F0ZWQvcHJvdmlkZWQg YnkgdGhlCj4gKyAqICBjbGllbnQgZHJpdmVyIGFuZCBpdCBpcyBhdHRhY2hlZCAodmlhIHRoZSBk bWFlbmdpbmVfZGVzY19hdHRhY2hfbWV0YWRhdGEoKQo+ICsgKiAgaGVscGVyKSB0byB0aGUgZGVz Y3JpcHRvci4KPiArICoKPiArICogQ2xpZW50IGRyaXZlcnMgaW50ZXJlc3RlZCB0byB1c2UgdGhp cyBtb2RlIGNhbiBmb2xsb3c6Cj4gKyAqIC0gRE1BX01FTV9UT19ERVY6Cj4gKyAqICAgMS4gcHJl cGFyZSB0aGUgZGVzY3JpcHRvciAoZG1hZW5naW5lX3ByZXBfKikKPiArICoJY29uc3RydWN0IHRo ZSBtZXRhZGF0YSBpbiB0aGUgY2xpbmV0J3MgYnVmZmVyCgp0eXBvIGNsaW5ldAoKPiArICogICAy LiB1c2UgZG1hZW5naW5lX2Rlc2NfYXR0YWNoX21ldGFkYXRhKCkgdG8gYXR0YWNoIHRoZSBidWZm ZXIgdG8gdGhlCj4gKyAqCWRlc2NyaXB0b3IKPiArICogICAzLiBzdWJtaXQgdGhlIHRyYW5zZmVy Cj4gKyAqIC0gRE1BX0RFVl9UT19NRU06Cj4gKyAqICAgMS4gcHJlcGFyZSB0aGUgZGVzY3JpcHRv ciAoZG1hZW5naW5lX3ByZXBfKikKPiArICogICAyLiB1c2UgZG1hZW5naW5lX2Rlc2NfYXR0YWNo X21ldGFkYXRhKCkgdG8gYXR0YWNoIHRoZSBidWZmZXIgdG8gdGhlCj4gKyAqCWRlc2NyaXB0b3IK PiArICogICAzLiBzdWJtaXQgdGhlIHRyYW5zZmVyCj4gKyAqICAgNC4gd2hlbiB0aGUgdHJhbnNm ZXIgaXMgY29tcGxldGVkLCB0aGUgbWV0YWRhdGEgc2hvdWxkIGJlIGF2YWlsYWJsZSBpbiB0aGUK PiArICoJYXR0YWNoZWQgYnVmZmVyCgpJIGd1ZXNzIHRoaXMgaXMgZ29vZCB0byBiZSBtb3ZlZCBp bnRvIERvY3VtZW50YXRpb24KCmFsc28gd2UgZG9udCBhbGxvdyB0aGlzIGZvciBtZW1jcHkgdHhu PwoKCj4gKyAqCj4gKyAqIEBERVNDX01FVEFEQVRBX0VOR0lORSAtIHRoZSBtZXRhZGF0YSBidWZm ZXIgaXMgYWxsb2NhdGVkL21hbmFnZWQgYnkgdGhlIERNQQo+ICsgKiAgZHJpdmVyLiBUaGUgY2xp ZW50IGRyaXZlciBjYW4gYXNrIGZvciB0aGUgcG9pbnRlciwgbWF4aW11bSBzaXplIGFuZCB0aGUK PiArICogIGN1cnJlbnRseSB1c2VkIHNpemUgb2YgdGhlIG1ldGFkYXRhIGFuZCBjYW4gZGlyZWN0 bHkgdXBkYXRlIG9yIHJlYWQgaXQuCj4gKyAqICBkbWFlbmdpbmVfZGVzY19nZXRfbWV0YWRhdGFf cHRyKCkgYW5kIGRtYWVuZ2luZV9kZXNjX3NldF9tZXRhZGF0YV9sZW4oKSBpcwo+ICsgKiAgcHJv dmlkZWQgYXMgaGVscGVyIGZ1bmN0aW9ucy4KPiArICoKPiArICogQ2xpZW50IGRyaXZlcnMgaW50 ZXJlc3RlZCB0byB1c2UgdGhpcyBtb2RlIGNhbiBmb2xsb3c6Cj4gKyAqIC0gRE1BX01FTV9UT19E RVY6Cj4gKyAqICAgMS4gcHJlcGFyZSB0aGUgZGVzY3JpcHRvciAoZG1hZW5naW5lX3ByZXBfKikK PiArICogICAyLiB1c2UgZG1hZW5naW5lX2Rlc2NfZ2V0X21ldGFkYXRhX3B0cigpIHRvIGdldCB0 aGUgcG9pbnRlciB0byB0aGUgZW5naW5lJ3MKPiArICoJbWV0YWRhdGEgYXJlYQo+ICsgKiAgIDMu IHVwZGF0ZSB0aGUgbWV0YWRhdGEgYXQgdGhlIHBvaW50ZXIKPiArICogICA0LiB1c2UgZG1hZW5n aW5lX2Rlc2Nfc2V0X21ldGFkYXRhX2xlbigpICB0byB0ZWxsIHRoZSBETUEgZW5naW5lIHRoZSBh bW91bnQKPiArICoJb2YgZGF0YSB0aGUgY2xpZW50IGhhcyBwbGFjZWQgaW50byB0aGUgbWV0YWRh dGEgYnVmZmVyCj4gKyAqICAgNS4gc3VibWl0IHRoZSB0cmFuc2Zlcgo+ICsgKiAtIERNQV9ERVZf VE9fTUVNOgo+ICsgKiAgIDEuIHByZXBhcmUgdGhlIGRlc2NyaXB0b3IgKGRtYWVuZ2luZV9wcmVw XyopCj4gKyAqICAgMi4gc3VibWl0IHRoZSB0cmFuc2Zlcgo+ICsgKiAgIDMuIG9uIHRyYW5zZmVy IGNvbXBsZXRpb24sIHVzZSBkbWFlbmdpbmVfZGVzY19nZXRfbWV0YWRhdGFfcHRyKCkgdG8gZ2V0 IHRoZQo+ICsgKglwb2ludGVyIHRvIHRoZSBlbmdpbmUncyBtZXRhZGF0YSBhcmUKPiArICogICA0 LiBSZWFkIG91dCB0aGUgbWV0YWRhdGUgZnJvbSB0aGUgcG9pbnRlcgo+ICsgKgo+ICsgKiBOb3Rl OiB0aGUgdHdvIG1vZGUgaXMgbm90IGNvbXBhdGlibGUgYW5kIGNsaWVudHMgbXVzdCB1c2Ugb25l IG1vZGUgZm9yIGEKPiArICogZGVzY3JpcHRvci4KPiArICovCj4gK2VudW0gZG1hX2Rlc2NfbWV0 YWRhdGFfbW9kZSB7Cj4gKwlERVNDX01FVEFEQVRBX0NMSUVOVCA9ICgxIDw8IDApLAo+ICsJREVT Q19NRVRBREFUQV9FTkdJTkUgPSAoMSA8PCAxKSwKCkJJVCh4KQoKPiArfTsKPiArCj4gIHN0cnVj dCBkbWFfY2hhbl9wZXJjcHUgewo+ICAJLyogc3RhdHMgKi8KPiAgCXVuc2lnbmVkIGxvbmcgbWVt Y3B5X2NvdW50Owo+IEBAIC00OTQsNiArNTQ1LDE4IEBAIHN0cnVjdCBkbWFlbmdpbmVfdW5tYXBf ZGF0YSB7Cj4gIAlkbWFfYWRkcl90IGFkZHJbMF07Cj4gIH07Cj4gIAo+ICtzdHJ1Y3QgZG1hX2Fz eW5jX3R4X2Rlc2NyaXB0b3I7Cj4gKwo+ICtzdHJ1Y3QgZG1hX2Rlc2NyaXB0b3JfbWV0YWRhdGFf b3BzIHsKPiArCWludCAoKmF0dGFjaCkoc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpk ZXNjLCB2b2lkICpkYXRhLAo+ICsJCSAgICAgIHNpemVfdCBsZW4pOwo+ICsKPiArCXZvaWQgKigq Z2V0X3B0cikoc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjLAo+ICsJCQkgc2l6 ZV90ICpwYXlsb2FkX2xlbiwgc2l6ZV90ICptYXhfbGVuKTsKPiArCWludCAoKnNldF9sZW4pKHN0 cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYywKPiArCQkgICAgICAgc2l6ZV90IHBh eWxvYWRfbGVuKTsKPiArfTsKPiArCj4gIC8qKgo+ICAgKiBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rl c2NyaXB0b3IgLSBhc3luYyB0cmFuc2FjdGlvbiBkZXNjcmlwdG9yCj4gICAqIC0tLWRtYSBnZW5l cmljIG9mZmxvYWQgZmllbGRzLS0tCj4gQEAgLTUyMyw2ICs1ODYsOCBAQCBzdHJ1Y3QgZG1hX2Fz eW5jX3R4X2Rlc2NyaXB0b3Igewo+ICAJZG1hX2FzeW5jX3R4X2NhbGxiYWNrX3Jlc3VsdCBjYWxs YmFja19yZXN1bHQ7Cj4gIAl2b2lkICpjYWxsYmFja19wYXJhbTsKPiAgCXN0cnVjdCBkbWFlbmdp bmVfdW5tYXBfZGF0YSAqdW5tYXA7Cj4gKwllbnVtIGRtYV9kZXNjX21ldGFkYXRhX21vZGUgZGVz Y19tZXRhZGF0YV9tb2RlOwo+ICsJc3RydWN0IGRtYV9kZXNjcmlwdG9yX21ldGFkYXRhX29wcyAq bWV0YWRhdGFfb3BzOwo+ICAjaWZkZWYgQ09ORklHX0FTWU5DX1RYX0VOQUJMRV9DSEFOTkVMX1NX SVRDSAo+ICAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpuZXh0Owo+ICAJc3RydWN0 IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpwYXJlbnQ7Cj4gQEAgLTY4NSw2ICs3NTAsNyBAQCBz dHJ1Y3QgZG1hX2ZpbHRlciB7Cj4gICAqIEBnbG9iYWxfbm9kZTogbGlzdF9oZWFkIGZvciBnbG9i YWwgZG1hX2RldmljZV9saXN0Cj4gICAqIEBmaWx0ZXI6IGluZm9ybWF0aW9uIGZvciBkZXZpY2Uv c2xhdmUgdG8gZmlsdGVyIGZ1bmN0aW9uL3BhcmFtIG1hcHBpbmcKPiAgICogQGNhcF9tYXNrOiBv bmUgb3IgbW9yZSBkbWFfY2FwYWJpbGl0eSBmbGFncwo+ICsgKiBAZGVzY19tZXRhZGF0YV9tb2Rl czogc3VwcG9ydGVkIG1ldGFkYXRhIG1vZGVzIGJ5IHRoZSBETUEgZGV2aWNlCj4gICAqIEBtYXhf eG9yOiBtYXhpbXVtIG51bWJlciBvZiB4b3Igc291cmNlcywgMCBpZiBubyBjYXBhYmlsaXR5Cj4g ICAqIEBtYXhfcHE6IG1heGltdW0gbnVtYmVyIG9mIFBRIHNvdXJjZXMgYW5kIFBRLWNvbnRpbnVl IGNhcGFiaWxpdHkKPiAgICogQGNvcHlfYWxpZ246IGFsaWdubWVudCBzaGlmdCBmb3IgbWVtY3B5 IG9wZXJhdGlvbnMKPiBAQCAtNzQ5LDYgKzgxNSw3IEBAIHN0cnVjdCBkbWFfZGV2aWNlIHsKPiAg CXN0cnVjdCBsaXN0X2hlYWQgZ2xvYmFsX25vZGU7Cj4gIAlzdHJ1Y3QgZG1hX2ZpbHRlciBmaWx0 ZXI7Cj4gIAlkbWFfY2FwX21hc2tfdCAgY2FwX21hc2s7Cj4gKwllbnVtIGRtYV9kZXNjX21ldGFk YXRhX21vZGUgZGVzY19tZXRhZGF0YV9tb2RlczsKPiAgCXVuc2lnbmVkIHNob3J0IG1heF94b3I7 Cj4gIAl1bnNpZ25lZCBzaG9ydCBtYXhfcHE7Cj4gIAllbnVtIGRtYWVuZ2luZV9hbGlnbm1lbnQg Y29weV9hbGlnbjsKPiBAQCAtOTM1LDYgKzEwMDIsODMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qg ZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRtYWVuZ2luZV9wcmVwX2RtYV9tZW1jcHkoCj4gIAkJ CQkJCSAgICBsZW4sIGZsYWdzKTsKPiAgfQo+ICAKPiArc3RhdGljIGlubGluZSBib29sIGRtYWVu Z2luZV9pc19tZXRhZGF0YV9tb2RlX3N1cHBvcnRlZChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCj4g KwkJZW51bSBkbWFfZGVzY19tZXRhZGF0YV9tb2RlIG1vZGUpCj4gK3sKPiArCXJldHVybiAhIShj aGFuLT5kZXZpY2UtPmRlc2NfbWV0YWRhdGFfbW9kZXMgJiBtb2RlKTsKPiArfQo+ICsKPiArc3Rh dGljIGlubGluZSBpbnQgX2Rlc2NfY2hlY2tfYW5kX3NldF9tZXRhZGF0YV9tb2RlKAoKd2h5IGRv ZXMgdGhpcyBuZWVkIHRvIHN0YXJ0IHdpdGggXyA/Cgo+ICsJc3RydWN0IGRtYV9hc3luY190eF9k ZXNjcmlwdG9yICpkZXNjLCBlbnVtIGRtYV9kZXNjX21ldGFkYXRhX21vZGUgbW9kZSkKPiArewo+ ICsJLyogTWFrZSBzdXJlIHRoYXQgdGhlIG1ldGFkYXRhIG1vZGUgaXMgbm90IG1peGVkICovCj4g KwlpZiAoIWRlc2MtPmRlc2NfbWV0YWRhdGFfbW9kZSkgewo+ICsJCWlmIChkbWFlbmdpbmVfaXNf bWV0YWRhdGFfbW9kZV9zdXBwb3J0ZWQoZGVzYy0+Y2hhbiwgbW9kZSkpCj4gKwkJCWRlc2MtPmRl c2NfbWV0YWRhdGFfbW9kZSA9IG1vZGU7Cj4gKwkJZWxzZQo+ICsJCQlyZXR1cm4gLUVOT1RTVVBQ Owo+ICsJfSBlbHNlIGlmIChkZXNjLT5kZXNjX21ldGFkYXRhX21vZGUgIT0gbW9kZSkgewo+ICsJ CXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW5saW5lIGludCBkbWFlbmdpbmVfZGVzY19hdHRhY2hfbWV0YWRhdGEoCj4gKwkJc3RydWN0 IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjLCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQo+ ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmICghZGVzYykKPiArCQlyZXR1cm4gLUVJTlZBTDsK PiArCj4gKwlyZXQgPSBfZGVzY19jaGVja19hbmRfc2V0X21ldGFkYXRhX21vZGUoZGVzYywgREVT Q19NRVRBREFUQV9DTElFTlQpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiAr CWlmICghZGVzYy0+bWV0YWRhdGFfb3BzIHx8ICFkZXNjLT5tZXRhZGF0YV9vcHMtPmF0dGFjaCkK PiArCQlyZXR1cm4gLUVOT1RTVVBQOwo+ICsKPiArCXJldHVybiBkZXNjLT5tZXRhZGF0YV9vcHMt PmF0dGFjaChkZXNjLCBkYXRhLCBsZW4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQg KmRtYWVuZ2luZV9kZXNjX2dldF9tZXRhZGF0YV9wdHIoCj4gKwkJc3RydWN0IGRtYV9hc3luY190 eF9kZXNjcmlwdG9yICpkZXNjLCBzaXplX3QgKnBheWxvYWRfbGVuLAo+ICsJCXNpemVfdCAqbWF4 X2xlbikKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoIWRlc2MpCj4gKwkJcmV0dXJuIEVS Ul9QVFIoLUVJTlZBTCk7Cj4gKwo+ICsJcmV0ID0gX2Rlc2NfY2hlY2tfYW5kX3NldF9tZXRhZGF0 YV9tb2RlKGRlc2MsIERFU0NfTUVUQURBVEFfRU5HSU5FKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0 dXJuIEVSUl9QVFIocmV0KTsKPiArCj4gKwlpZiAoIWRlc2MtPm1ldGFkYXRhX29wcyB8fCAhZGVz Yy0+bWV0YWRhdGFfb3BzLT5nZXRfcHRyKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9UU1VQUCk7 Cj4gKwo+ICsJcmV0dXJuIGRlc2MtPm1ldGFkYXRhX29wcy0+Z2V0X3B0cihkZXNjLCBwYXlsb2Fk X2xlbiwgbWF4X2xlbik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IGRtYWVuZ2luZV9k ZXNjX3NldF9tZXRhZGF0YV9sZW4oCj4gKwkJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9y ICpkZXNjLCBzaXplX3QgcGF5bG9hZF9sZW4pCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYg KCFkZXNjKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCXJldCA9IF9kZXNjX2NoZWNrX2Fu ZF9zZXRfbWV0YWRhdGFfbW9kZShkZXNjLCBERVNDX01FVEFEQVRBX0VOR0lORSk7Cj4gKwlpZiAo cmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaWYgKCFkZXNjLT5tZXRhZGF0YV9vcHMgfHwg IWRlc2MtPm1ldGFkYXRhX29wcy0+c2V0X2xlbikKPiArCQlyZXR1cm4gLUVOT1RTVVBQOwo+ICsK PiArCXJldHVybiBkZXNjLT5tZXRhZGF0YV9vcHMtPnNldF9sZW4oZGVzYywgcGF5bG9hZF9sZW4p Owo+ICt9Cgp0aGF0cyBiaXQgdG9vIG11Y2ggY29kZSBmb3IgYSBoZWFkZXIgZmlsZSA6KCBMZXRz IG1vdmUgaXQgdG8gQyBmaWxlCnBsZWFzZS4gV2UgY2FuIHV0aWxpemUgbG9jYWwgZG1hZW5naW5l LmggYW5kIG5vdCBleHBvc2UgYWxsIHRoZXNlIGFuZApwb3NzaWJsZSBtaXN1c2UgYnkgY2xpZW50 cwoKQWxzbyBJIHdvdWxkIGxpa2UgdG8gc2VlIGEgdXNlIDotKSBiZWZvcmUgZnVydGhlciBjb21t ZW50cy4K