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: Peter Ujfalusi Message-Id: Date: Wed, 29 Aug 2018 19:14:24 +0300 To: Vinod Cc: dan.j.williams@intel.com, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, lars@metafoo.de, radheys@xilinx.com List-ID: Vmlub2QsCgpPbiAwOC8yOS8yMDE4IDA2OjUyIFBNLCBWaW5vZCB3cm90ZToKPiBPbiAyMy0wOC0x OCwgMTY6MDcsIFBldGVyIFVqZmFsdXNpIHdyb3RlOgo+PiBUaGUgbWV0YWRhdGEgaXMgYmVzdCBk ZXNjcmliZWQgYXMgc2lkZSBiYW5kIGRhdGEgb3IgcGFyYW1ldGVycyB0cmF2ZWxpbmcKPj4gYWxv bmdzaWRlIHRoZSBkYXRhIERNQWQgYnkgdGhlIERNQSBlbmdpbmUuIEl0IGlzIGRhdGEKPj4gd2hp Y2ggaXMgdW5kZXJzdG9vZCBieSB0aGUgcGVyaXBoZXJhbCBhbmQgdGhlIHBlcmlwaGVyYWwgZHJp dmVyIG9ubHksIHRoZQo+PiBETUEgZW5naW5lIHNlZSBpdCBvbmx5IGFzIGRhdGEgYmxvY2sgYW5k IGl0IGlzIG5vdCBpbnRlcnByZXRpbmcgaXQgaW4gYW55Cj4+IHdheS4KPj4KPj4gVGhlIG1ldGFk YXRhIGNhbiBiZSBkaWZmZXJlbnQgcGVyIGRlc2NyaXB0b3IgYXMgaXQgaXMgYSBwYXJhbWV0ZXIg Zm9yIHRoZQo+PiBkYXRhIGJlaW5nIHRyYW5zZmVycmVkLgo+Pgo+PiBJZiB0aGUgRE1BIHN1cHBv cnRzIHBlciBkZXNjcmlwdG9yIG1ldGFkYXRhIGl0IGNhbiBpbXBsZW1lbnQgdGhlIGF0dGFjaCwK Pj4gZ2V0X3B0ci9zZXRfbGVuIGNhbGxiYWNrcy4KPj4KPj4gQ2xpZW50IGRyaXZlcnMgbXVzdCBv bmx5IHVzZSBlaXRoZXIgYXR0YWNoIG9yIGdldF9wdHIvc2V0X2xlbiB0byBhdm9pZAo+PiBtaXNz IGNvbmZpZ3VyYXRpb24uCj4gCj4gbWlzY29uZmlndXJhdGlvbj8KClNvcnJ5IGZvciB0aGUgdHlw b3MsIEknbGwgZ290IHRocm91Z2ggdGhlbSBhZ2Fpbi4KCj4+IENsaWVudCBkcml2ZXIgY2FuIGNo ZWNrIGlmIGEgZ2l2ZW4gbWV0YWRhdGEgbW9kZSBpcyBzdXBwb3J0ZWQgYnkgdGhlCj4+IGNoYW5u ZWwgZHVyaW5nIHByb2JlIHRpbWUgd2l0aAo+PiBkbWFlbmdpbmVfaXNfbWV0YWRhdGFfbW9kZV9z dXBwb3J0ZWQoY2hhbiwgREVTQ19NRVRBREFUQV9DTElFTlQpOwo+PiBkbWFlbmdpbmVfaXNfbWV0 YWRhdGFfbW9kZV9zdXBwb3J0ZWQoY2hhbiwgREVTQ19NRVRBREFUQV9FTkdJTkUpOwo+Pgo+PiBh bmQgYmFzZWQgb24gdGhpcyBpbmZvcm1hdGlvbiBjYW4gdXNlIGVpdGhlciBtb2RlLgo+Pgo+PiBX cmFwcGVycyBhcmUgYWxzbyBhZGRlZCBmb3IgdGhlIG1ldGFkYXRhX29wcy4KPj4KPj4gVG8gYmUg dXNlZCBpbiBERVNDX01FVEFEQVRBX0NMSUVOVCBtb2RlOgo+PiBkbWFlbmdpbmVfZGVzY19hdHRh Y2hfbWV0YWRhdGEoKQo+Pgo+PiBUbyBiZSB1c2VkIGluIERFU0NfTUVUQURBVEFfRU5HSU5FIG1v ZGU6Cj4+IGRtYWVuZ2luZV9kZXNjX2dldF9tZXRhZGF0YV9wdHIoKQo+PiBkbWFlbmdpbmVfZGVz Y19zZXRfbWV0YWRhdGFfbGVuKCkKPj4KPj4gU2lnbmVkLW9mZi1ieTogUGV0ZXIgVWpmYWx1c2kg PHBldGVyLnVqZmFsdXNpQHRpLmNvbT4KPj4gLS0tCj4+IEhpLAo+Pgo+PiBDaGFuZ2VzIHNpbmNl IHJmYzoKPj4gLSBERVNDX01FVEFEQVRBX0VNQkVEREVEIHJlbmFtZWQgdG8gREVTQ19NRVRBREFU QV9FTkdJTkUKPj4gLSBVc2UgZmxvdyBpcyBhZGRlZCBmb3IgYm90aCBDTElFTlQgYW5kIEVOR0lO RSBtZXRhZGF0YSBtb2Rlcwo+Pgo+PiBSZWdhcmRzLAo+PiBQZXRlcgo+Pgo+PiAgaW5jbHVkZS9s aW51eC9kbWFlbmdpbmUuaCB8IDE0NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwo+PiAgMSBmaWxlIGNoYW5nZWQsIDE0NCBpbnNlcnRpb25zKCspCj4+Cj4+IGRpZmYgLS1n aXQgYS9pbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5oIGIvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUu aAo+PiBpbmRleCAzZGI4MzNhOGM1NDIuLmY4MDk2MzVjZmVhYSAxMDA2NDQKPj4gLS0tIGEvaW5j bHVkZS9saW51eC9kbWFlbmdpbmUuaAo+PiArKysgYi9pbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5o Cj4+IEBAIC0yMzEsNiArMjMxLDU3IEBAIHR5cGVkZWYgc3RydWN0IHsgREVDTEFSRV9CSVRNQVAo Yml0cywgRE1BX1RYX1RZUEVfRU5EKTsgfSBkbWFfY2FwX21hc2tfdDsKPj4gICAqIEBieXRlc190 cmFuc2ZlcnJlZDogYnl0ZSBjb3VudGVyCj4+ICAgKi8KPj4gIAo+PiArLyoqCj4+ICsgKiBlbnVt IGRtYV9kZXNjX21ldGFkYXRhX21vZGUgLSBwZXIgZGVzY3JpcHRvciBtZXRhZGF0YSBtb2RlIHR5 cGVzIHN1cHBvcnRlZAo+PiArICogQERFU0NfTUVUQURBVEFfQ0xJRU5UIC0gdGhlIG1ldGFkYXRh IGJ1ZmZlciBpcyBhbGxvY2F0ZWQvcHJvdmlkZWQgYnkgdGhlCj4+ICsgKiAgY2xpZW50IGRyaXZl ciBhbmQgaXQgaXMgYXR0YWNoZWQgKHZpYSB0aGUgZG1hZW5naW5lX2Rlc2NfYXR0YWNoX21ldGFk YXRhKCkKPj4gKyAqICBoZWxwZXIpIHRvIHRoZSBkZXNjcmlwdG9yLgo+PiArICoKPj4gKyAqIENs aWVudCBkcml2ZXJzIGludGVyZXN0ZWQgdG8gdXNlIHRoaXMgbW9kZSBjYW4gZm9sbG93Ogo+PiAr ICogLSBETUFfTUVNX1RPX0RFVjoKPj4gKyAqICAgMS4gcHJlcGFyZSB0aGUgZGVzY3JpcHRvciAo ZG1hZW5naW5lX3ByZXBfKikKPj4gKyAqCWNvbnN0cnVjdCB0aGUgbWV0YWRhdGEgaW4gdGhlIGNs aW5ldCdzIGJ1ZmZlcgo+IAo+IHR5cG8gY2xpbmV0Cj4gCj4+ICsgKiAgIDIuIHVzZSBkbWFlbmdp bmVfZGVzY19hdHRhY2hfbWV0YWRhdGEoKSB0byBhdHRhY2ggdGhlIGJ1ZmZlciB0byB0aGUKPj4g KyAqCWRlc2NyaXB0b3IKPj4gKyAqICAgMy4gc3VibWl0IHRoZSB0cmFuc2Zlcgo+PiArICogLSBE TUFfREVWX1RPX01FTToKPj4gKyAqICAgMS4gcHJlcGFyZSB0aGUgZGVzY3JpcHRvciAoZG1hZW5n aW5lX3ByZXBfKikKPj4gKyAqICAgMi4gdXNlIGRtYWVuZ2luZV9kZXNjX2F0dGFjaF9tZXRhZGF0 YSgpIHRvIGF0dGFjaCB0aGUgYnVmZmVyIHRvIHRoZQo+PiArICoJZGVzY3JpcHRvcgo+PiArICog ICAzLiBzdWJtaXQgdGhlIHRyYW5zZmVyCj4+ICsgKiAgIDQuIHdoZW4gdGhlIHRyYW5zZmVyIGlz IGNvbXBsZXRlZCwgdGhlIG1ldGFkYXRhIHNob3VsZCBiZSBhdmFpbGFibGUgaW4gdGhlCj4+ICsg KglhdHRhY2hlZCBidWZmZXIKPiAKPiBJIGd1ZXNzIHRoaXMgaXMgZ29vZCB0byBiZSBtb3ZlZCBp bnRvIERvY3VtZW50YXRpb24KClNob3VsZCBJIGNyZWF0ZSBhIG5ldyBmaWxlIGZvciBtZXRhZGF0 YT8gSSBndWVzcyBpdCB3b3VsZCBtYWtlIHNlbnNlIGFzIHRoZQppbmZvcm1hdGlvbiBpcyBmb3Ig Ym90aCBjbGllbnRzIGFuZCBlbmdpbmVzLgoKPiAKPiBhbHNvIHdlIGRvbnQgYWxsb3cgdGhpcyBm b3IgbWVtY3B5IHR4bj8KCkkgaGF2ZSBub3QgdGhvdWdodCBhYm91dCB0aGF0LCBidXQgaWYgSSB0 aGluayBhYm91dCBpdCBpdCBzaG91bGQgYmUgYWxvbmcgdGhlCnNhbWUgbGluZXMgYXMgTUVNX1RP X0RFVi4KSSdsbCBhZGQgdGhlIE1FTV9UT19NRU0gYXMgd2VsbCB0byB0aGUgZG9jdW1lbnRhdGlv bi4KCj4+ICsgKgo+PiArICogQERFU0NfTUVUQURBVEFfRU5HSU5FIC0gdGhlIG1ldGFkYXRhIGJ1 ZmZlciBpcyBhbGxvY2F0ZWQvbWFuYWdlZCBieSB0aGUgRE1BCj4+ICsgKiAgZHJpdmVyLiBUaGUg Y2xpZW50IGRyaXZlciBjYW4gYXNrIGZvciB0aGUgcG9pbnRlciwgbWF4aW11bSBzaXplIGFuZCB0 aGUKPj4gKyAqICBjdXJyZW50bHkgdXNlZCBzaXplIG9mIHRoZSBtZXRhZGF0YSBhbmQgY2FuIGRp cmVjdGx5IHVwZGF0ZSBvciByZWFkIGl0Lgo+PiArICogIGRtYWVuZ2luZV9kZXNjX2dldF9tZXRh ZGF0YV9wdHIoKSBhbmQgZG1hZW5naW5lX2Rlc2Nfc2V0X21ldGFkYXRhX2xlbigpIGlzCj4+ICsg KiAgcHJvdmlkZWQgYXMgaGVscGVyIGZ1bmN0aW9ucy4KPj4gKyAqCj4+ICsgKiBDbGllbnQgZHJp dmVycyBpbnRlcmVzdGVkIHRvIHVzZSB0aGlzIG1vZGUgY2FuIGZvbGxvdzoKPj4gKyAqIC0gRE1B X01FTV9UT19ERVY6Cj4+ICsgKiAgIDEuIHByZXBhcmUgdGhlIGRlc2NyaXB0b3IgKGRtYWVuZ2lu ZV9wcmVwXyopCj4+ICsgKiAgIDIuIHVzZSBkbWFlbmdpbmVfZGVzY19nZXRfbWV0YWRhdGFfcHRy KCkgdG8gZ2V0IHRoZSBwb2ludGVyIHRvIHRoZSBlbmdpbmUncwo+PiArICoJbWV0YWRhdGEgYXJl YQo+PiArICogICAzLiB1cGRhdGUgdGhlIG1ldGFkYXRhIGF0IHRoZSBwb2ludGVyCj4+ICsgKiAg IDQuIHVzZSBkbWFlbmdpbmVfZGVzY19zZXRfbWV0YWRhdGFfbGVuKCkgIHRvIHRlbGwgdGhlIERN QSBlbmdpbmUgdGhlIGFtb3VudAo+PiArICoJb2YgZGF0YSB0aGUgY2xpZW50IGhhcyBwbGFjZWQg aW50byB0aGUgbWV0YWRhdGEgYnVmZmVyCj4+ICsgKiAgIDUuIHN1Ym1pdCB0aGUgdHJhbnNmZXIK Pj4gKyAqIC0gRE1BX0RFVl9UT19NRU06Cj4+ICsgKiAgIDEuIHByZXBhcmUgdGhlIGRlc2NyaXB0 b3IgKGRtYWVuZ2luZV9wcmVwXyopCj4+ICsgKiAgIDIuIHN1Ym1pdCB0aGUgdHJhbnNmZXIKPj4g KyAqICAgMy4gb24gdHJhbnNmZXIgY29tcGxldGlvbiwgdXNlIGRtYWVuZ2luZV9kZXNjX2dldF9t ZXRhZGF0YV9wdHIoKSB0byBnZXQgdGhlCj4+ICsgKglwb2ludGVyIHRvIHRoZSBlbmdpbmUncyBt ZXRhZGF0YSBhcmUKPj4gKyAqICAgNC4gUmVhZCBvdXQgdGhlIG1ldGFkYXRlIGZyb20gdGhlIHBv aW50ZXIKPj4gKyAqCj4+ICsgKiBOb3RlOiB0aGUgdHdvIG1vZGUgaXMgbm90IGNvbXBhdGlibGUg YW5kIGNsaWVudHMgbXVzdCB1c2Ugb25lIG1vZGUgZm9yIGEKPj4gKyAqIGRlc2NyaXB0b3IuCj4+ ICsgKi8KPj4gK2VudW0gZG1hX2Rlc2NfbWV0YWRhdGFfbW9kZSB7Cj4+ICsJREVTQ19NRVRBREFU QV9DTElFTlQgPSAoMSA8PCAwKSwKPj4gKwlERVNDX01FVEFEQVRBX0VOR0lORSA9ICgxIDw8IDEp LAo+IAo+IEJJVCh4KQoKT0ssIEkgZm9sbG93ZWQgd2hhdCB3ZSBoYXZlIGluIHRoZSBoZWFkZXIg dG8gbm90IG1peCAoMSA8PCB4KSBhbmQgQklUKHgpCgo+IAo+PiArfTsKPj4gKwo+PiAgc3RydWN0 IGRtYV9jaGFuX3BlcmNwdSB7Cj4+ICAJLyogc3RhdHMgKi8KPj4gIAl1bnNpZ25lZCBsb25nIG1l bWNweV9jb3VudDsKPj4gQEAgLTQ5NCw2ICs1NDUsMTggQEAgc3RydWN0IGRtYWVuZ2luZV91bm1h cF9kYXRhIHsKPj4gIAlkbWFfYWRkcl90IGFkZHJbMF07Cj4+ICB9Owo+PiAgCj4+ICtzdHJ1Y3Qg ZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3I7Cj4+ICsKPj4gK3N0cnVjdCBkbWFfZGVzY3JpcHRvcl9t ZXRhZGF0YV9vcHMgewo+PiArCWludCAoKmF0dGFjaCkoc3RydWN0IGRtYV9hc3luY190eF9kZXNj cmlwdG9yICpkZXNjLCB2b2lkICpkYXRhLAo+PiArCQkgICAgICBzaXplX3QgbGVuKTsKPj4gKwo+ PiArCXZvaWQgKigqZ2V0X3B0cikoc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNj LAo+PiArCQkJIHNpemVfdCAqcGF5bG9hZF9sZW4sIHNpemVfdCAqbWF4X2xlbik7Cj4+ICsJaW50 ICgqc2V0X2xlbikoc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjLAo+PiArCQkg ICAgICAgc2l6ZV90IHBheWxvYWRfbGVuKTsKPj4gK307Cj4+ICsKPj4gIC8qKgo+PiAgICogc3Ry dWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yIC0gYXN5bmMgdHJhbnNhY3Rpb24gZGVzY3JpcHRv cgo+PiAgICogLS0tZG1hIGdlbmVyaWMgb2ZmbG9hZCBmaWVsZHMtLS0KPj4gQEAgLTUyMyw2ICs1 ODYsOCBAQCBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3Igewo+PiAgCWRtYV9hc3luY190 eF9jYWxsYmFja19yZXN1bHQgY2FsbGJhY2tfcmVzdWx0Owo+PiAgCXZvaWQgKmNhbGxiYWNrX3Bh cmFtOwo+PiAgCXN0cnVjdCBkbWFlbmdpbmVfdW5tYXBfZGF0YSAqdW5tYXA7Cj4+ICsJZW51bSBk bWFfZGVzY19tZXRhZGF0YV9tb2RlIGRlc2NfbWV0YWRhdGFfbW9kZTsKPj4gKwlzdHJ1Y3QgZG1h X2Rlc2NyaXB0b3JfbWV0YWRhdGFfb3BzICptZXRhZGF0YV9vcHM7CgpJIGZvcmdvdCB0byB1cGRh dGUgdGhlIGNvbW1lbnQgc2VjdGlvbiBmb3IgdGhlIGRtYV9hc3luY190eF9kZXNjcmlwdG9yLCBJ J2xsCmFkZHJlc3MgaXQgaW4gdjIuCgo+PiAgI2lmZGVmIENPTkZJR19BU1lOQ19UWF9FTkFCTEVf Q0hBTk5FTF9TV0lUQ0gKPj4gIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKm5leHQ7 Cj4+ICAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpwYXJlbnQ7Cj4+IEBAIC02ODUs NiArNzUwLDcgQEAgc3RydWN0IGRtYV9maWx0ZXIgewo+PiAgICogQGdsb2JhbF9ub2RlOiBsaXN0 X2hlYWQgZm9yIGdsb2JhbCBkbWFfZGV2aWNlX2xpc3QKPj4gICAqIEBmaWx0ZXI6IGluZm9ybWF0 aW9uIGZvciBkZXZpY2Uvc2xhdmUgdG8gZmlsdGVyIGZ1bmN0aW9uL3BhcmFtIG1hcHBpbmcKPj4g ICAqIEBjYXBfbWFzazogb25lIG9yIG1vcmUgZG1hX2NhcGFiaWxpdHkgZmxhZ3MKPj4gKyAqIEBk ZXNjX21ldGFkYXRhX21vZGVzOiBzdXBwb3J0ZWQgbWV0YWRhdGEgbW9kZXMgYnkgdGhlIERNQSBk ZXZpY2UKPj4gICAqIEBtYXhfeG9yOiBtYXhpbXVtIG51bWJlciBvZiB4b3Igc291cmNlcywgMCBp ZiBubyBjYXBhYmlsaXR5Cj4+ICAgKiBAbWF4X3BxOiBtYXhpbXVtIG51bWJlciBvZiBQUSBzb3Vy Y2VzIGFuZCBQUS1jb250aW51ZSBjYXBhYmlsaXR5Cj4+ICAgKiBAY29weV9hbGlnbjogYWxpZ25t ZW50IHNoaWZ0IGZvciBtZW1jcHkgb3BlcmF0aW9ucwo+PiBAQCAtNzQ5LDYgKzgxNSw3IEBAIHN0 cnVjdCBkbWFfZGV2aWNlIHsKPj4gIAlzdHJ1Y3QgbGlzdF9oZWFkIGdsb2JhbF9ub2RlOwo+PiAg CXN0cnVjdCBkbWFfZmlsdGVyIGZpbHRlcjsKPj4gIAlkbWFfY2FwX21hc2tfdCAgY2FwX21hc2s7 Cj4+ICsJZW51bSBkbWFfZGVzY19tZXRhZGF0YV9tb2RlIGRlc2NfbWV0YWRhdGFfbW9kZXM7Cj4+ ICAJdW5zaWduZWQgc2hvcnQgbWF4X3hvcjsKPj4gIAl1bnNpZ25lZCBzaG9ydCBtYXhfcHE7Cj4+ ICAJZW51bSBkbWFlbmdpbmVfYWxpZ25tZW50IGNvcHlfYWxpZ247Cj4+IEBAIC05MzUsNiArMTAw Miw4MyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZG1h ZW5naW5lX3ByZXBfZG1hX21lbWNweSgKPj4gIAkJCQkJCSAgICBsZW4sIGZsYWdzKTsKPj4gIH0K Pj4gIAo+PiArc3RhdGljIGlubGluZSBib29sIGRtYWVuZ2luZV9pc19tZXRhZGF0YV9tb2RlX3N1 cHBvcnRlZChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCj4+ICsJCWVudW0gZG1hX2Rlc2NfbWV0YWRh dGFfbW9kZSBtb2RlKQo+PiArewo+PiArCXJldHVybiAhIShjaGFuLT5kZXZpY2UtPmRlc2NfbWV0 YWRhdGFfbW9kZXMgJiBtb2RlKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSBpbnQgX2Rl c2NfY2hlY2tfYW5kX3NldF9tZXRhZGF0YV9tb2RlKAo+IAo+IHdoeSBkb2VzIHRoaXMgbmVlZCB0 byBzdGFydCB3aXRoIF8gPwoKVG8gc2NhcmUgcGVvcGxlIHRvIHVzZSBpbiBjbGllbnQgY29kZSA7 KQoKPiAKPj4gKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2MsIGVudW0gZG1h X2Rlc2NfbWV0YWRhdGFfbW9kZSBtb2RlKQo+PiArewo+PiArCS8qIE1ha2Ugc3VyZSB0aGF0IHRo ZSBtZXRhZGF0YSBtb2RlIGlzIG5vdCBtaXhlZCAqLwo+PiArCWlmICghZGVzYy0+ZGVzY19tZXRh ZGF0YV9tb2RlKSB7Cj4+ICsJCWlmIChkbWFlbmdpbmVfaXNfbWV0YWRhdGFfbW9kZV9zdXBwb3J0 ZWQoZGVzYy0+Y2hhbiwgbW9kZSkpCj4+ICsJCQlkZXNjLT5kZXNjX21ldGFkYXRhX21vZGUgPSBt b2RlOwo+PiArCQllbHNlCj4+ICsJCQlyZXR1cm4gLUVOT1RTVVBQOwo+PiArCX0gZWxzZSBpZiAo ZGVzYy0+ZGVzY19tZXRhZGF0YV9tb2RlICE9IG1vZGUpIHsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUg aW50IGRtYWVuZ2luZV9kZXNjX2F0dGFjaF9tZXRhZGF0YSgKPj4gKwkJc3RydWN0IGRtYV9hc3lu Y190eF9kZXNjcmlwdG9yICpkZXNjLCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQo+PiArewo+PiAr CWludCByZXQ7Cj4+ICsKPj4gKwlpZiAoIWRlc2MpCj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiAr Cj4+ICsJcmV0ID0gX2Rlc2NfY2hlY2tfYW5kX3NldF9tZXRhZGF0YV9tb2RlKGRlc2MsIERFU0Nf TUVUQURBVEFfQ0xJRU5UKTsKPj4gKwlpZiAocmV0KQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ ICsJaWYgKCFkZXNjLT5tZXRhZGF0YV9vcHMgfHwgIWRlc2MtPm1ldGFkYXRhX29wcy0+YXR0YWNo KQo+PiArCQlyZXR1cm4gLUVOT1RTVVBQOwo+PiArCj4+ICsJcmV0dXJuIGRlc2MtPm1ldGFkYXRh X29wcy0+YXR0YWNoKGRlc2MsIGRhdGEsIGxlbik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxp bmUgdm9pZCAqZG1hZW5naW5lX2Rlc2NfZ2V0X21ldGFkYXRhX3B0cigKPj4gKwkJc3RydWN0IGRt YV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjLCBzaXplX3QgKnBheWxvYWRfbGVuLAo+PiArCQlz aXplX3QgKm1heF9sZW4pCj4+ICt7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCWlmICghZGVzYykK Pj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4+ICsKPj4gKwlyZXQgPSBfZGVzY19jaGVj a19hbmRfc2V0X21ldGFkYXRhX21vZGUoZGVzYywgREVTQ19NRVRBREFUQV9FTkdJTkUpOwo+PiAr CWlmIChyZXQpCj4+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4+ICsKPj4gKwlpZiAoIWRlc2Mt Pm1ldGFkYXRhX29wcyB8fCAhZGVzYy0+bWV0YWRhdGFfb3BzLT5nZXRfcHRyKQo+PiArCQlyZXR1 cm4gRVJSX1BUUigtRU5PVFNVUFApOwo+PiArCj4+ICsJcmV0dXJuIGRlc2MtPm1ldGFkYXRhX29w cy0+Z2V0X3B0cihkZXNjLCBwYXlsb2FkX2xlbiwgbWF4X2xlbik7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBpbmxpbmUgaW50IGRtYWVuZ2luZV9kZXNjX3NldF9tZXRhZGF0YV9sZW4oCj4+ICsJCXN0 cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYywgc2l6ZV90IHBheWxvYWRfbGVuKQo+ PiArewo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlpZiAoIWRlc2MpCj4+ICsJCXJldHVybiAtRUlO VkFMOwo+PiArCj4+ICsJcmV0ID0gX2Rlc2NfY2hlY2tfYW5kX3NldF9tZXRhZGF0YV9tb2RlKGRl c2MsIERFU0NfTUVUQURBVEFfRU5HSU5FKTsKPj4gKwlpZiAocmV0KQo+PiArCQlyZXR1cm4gcmV0 Owo+PiArCj4+ICsJaWYgKCFkZXNjLT5tZXRhZGF0YV9vcHMgfHwgIWRlc2MtPm1ldGFkYXRhX29w cy0+c2V0X2xlbikKPj4gKwkJcmV0dXJuIC1FTk9UU1VQUDsKPj4gKwo+PiArCXJldHVybiBkZXNj LT5tZXRhZGF0YV9vcHMtPnNldF9sZW4oZGVzYywgcGF5bG9hZF9sZW4pOwo+PiArfQo+IAo+IHRo YXRzIGJpdCB0b28gbXVjaCBjb2RlIGZvciBhIGhlYWRlciBmaWxlIDooIExldHMgbW92ZSBpdCB0 byBDIGZpbGUKPiBwbGVhc2UuIFdlIGNhbiB1dGlsaXplIGxvY2FsIGRtYWVuZ2luZS5oIGFuZCBu b3QgZXhwb3NlIGFsbCB0aGVzZSBhbmQKPiBwb3NzaWJsZSBtaXN1c2UgYnkgY2xpZW50cwoKT0ss IEkgaGF2ZSB0aG91Z2h0IGFib3V0IHRoYXQgYXMgd2VsbC4KCj4gQWxzbyBJIHdvdWxkIGxpa2Ug dG8gc2VlIGEgdXNlIDotKSBiZWZvcmUgZnVydGhlciBjb21tZW50cy4KCllvdSBtZWFuIHRoZSBE TUEgZHJpdmVyIGFuZCBhdCBsZWFzdCBvbmUgY2xpZW50PwpJIGhhdmUgdGhlIERNQSBkcml2ZXIg aW4gbXkgcHVibGljIGZhY2luZyBicmFuY2ggWzFdLCBidXQgaXQgaXMgbm90IGFuIGVhc3kKcmVh ZCB3aXRoIGl0J3MgY2xvc2UgdG8gNGsgbG9jLgpUaGUgY2xpZW50IGlzIG5vdCBpbiBteSBicmFu Y2ggYW5kIGl0IGlzIGFjdHVhbGx5IHVzaW5nIGFuIG9sZGVyIHZlcnNpb24gb2YKdGhlIG1ldGFk YXRhIHN1cHBvcnQuCgpUaGUgcHJvYmxlbSBpcyB0aGF0IEkgZG9uJ3Qga25vdyB3aGVuIEkgd2ls bCBiZSBhYmxlIHRvIHNlbmQgdGhlIGRyaXZlciBmb3IKcmV2aWV3IGFzIGFsbCBvZiB0aGlzIGlz IHRhcmdldGluZyBhIGJyYW5kIG5ldyBTb0MgKEFNNjU0KSB3aXRoIGNvbXBsZXRlbHkgbmV3CmRh dGEgbW92ZW1lbnQgYXJjaGl0ZWN0dXJlLiBUaGVyZSBhcmUgbG90cyBvZiBkZXBlbmRlbmNpZXMg c3RpbGwgbmVlZCB0byBiZQp1cHN0cmVhbWVkIGJlZm9yZSBJIGNhbiBzZW5kIHNvbWV0aGluZyB3 aGljaCBhdCBsZWFzdCBjb21waWxlcy4KCkkgY2FuIG9mZmVyIHNuaXBwZXRzIGZyb20gdGhlIGNs aWVudCBkcml2ZXIsIGlmIHRoYXQgaXMgZ29vZCBlbm91Z2ggb3IgYSBsaW5rCnRvIHRoZSBwdWJs aWMgdHJlZSB3aGVyZSBpdCBjYW4gYmUgYWNjZXNzZWQsIGJ1dCBpdCBpcyBub3QgZ29pbmcgdG8g Z28KdXBzdHJlYW0gYmVmb3JlIHRoZSBETUEgZHJpdmVyLgoKWzFdCmh0dHBzOi8vZ2l0LnRpLmNv bS90aS1saW51eC1rZXJuZWwvdGktbGludXgta2VybmVsL3RyZWVzL3RpLWxpbnV4LTQuMTQueS9k cml2ZXJzL2RtYS90aS8KCmh0dHBzOi8vZ2l0aHViLmNvbS9vbWFwLWF1ZGlvL2xpbnV4LWF1ZGlv L3RyZWUvcGV0ZXIvdGktbGludXgtNC4xNC55L3dpcC9kcml2ZXJzL2RtYS90aQoKazMtdWRtYS5j L2ggaXMgdGhlIERNQWVuZ2luZSBkcml2ZXIsIGszLW5hdnNzLXByaWNhdGUuYyBrMy1uYXZzcy11 ZG1hLmMgaXMKc29tZXRoaW5nIEkgdHJ5IHRvIGdldCByaWQgb2YgKGl0IGlzIHdyYXBwZXIgZm9y IHRoZSBuZXR3b3JraW5nIGRyaXZlcnMgdG8gdXNlCkRNQSkK