From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tiwei Bie Subject: Re: [PATCH RFC 2/2] virtio_ring: support packed ring Date: Fri, 16 Mar 2018 14:10:47 +0800 Message-ID: <20180316061047.o2xdyuqhak3mzjyw@debian> References: <20180223111801.15240-1-tiwei.bie@intel.com> <20180223111801.15240-3-tiwei.bie@intel.com> <8f73267a-e20e-de64-d8e0-3fd608dbf368@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: mst@redhat.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, wexu@redhat.com To: Jason Wang Return-path: Content-Disposition: inline In-Reply-To: <8f73267a-e20e-de64-d8e0-3fd608dbf368@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org List-Id: netdev.vger.kernel.org T24gRnJpLCBNYXIgMTYsIDIwMTggYXQgMTI6MDM6MjVQTSArMDgwMCwgSmFzb24gV2FuZyB3cm90 ZToKPiBPbiAyMDE45bm0MDLmnIgyM+aXpSAxOToxOCwgVGl3ZWkgQmllIHdyb3RlOgo+ID4gU2ln bmVkLW9mZi1ieTogVGl3ZWkgQmllIDx0aXdlaS5iaWVAaW50ZWwuY29tPgo+ID4gLS0tCj4gPiAg IGRyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMgfCA2OTkgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tLS0tLQo+ID4gICBpbmNsdWRlL2xpbnV4L3ZpcnRpb19yaW5nLmgg IHwgICA4ICstCj4gPiAgIDIgZmlsZXMgY2hhbmdlZCwgNjE4IGluc2VydGlvbnMoKyksIDg5IGRl bGV0aW9ucygtKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3Jp bmcuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKPiA+IGluZGV4IGViMzBmM2UwOWE0 Ny4uMzkzNzc4YTJmODA5IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3Jp bmcuYwo+ID4gKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwo+ID4gQEAgLTU4LDE0 ICs1OCwxNCBAQAo+ID4gICBzdHJ1Y3QgdnJpbmdfZGVzY19zdGF0ZSB7Cj4gPiAgIAl2b2lkICpk YXRhOwkJCS8qIERhdGEgZm9yIGNhbGxiYWNrLiAqLwo+ID4gLQlzdHJ1Y3QgdnJpbmdfZGVzYyAq aW5kaXJfZGVzYzsJLyogSW5kaXJlY3QgZGVzY3JpcHRvciwgaWYgYW55LiAqLwo+ID4gKwl2b2lk ICppbmRpcl9kZXNjOwkJLyogSW5kaXJlY3QgZGVzY3JpcHRvciwgaWYgYW55LiAqLwo+ID4gKwlp bnQgbnVtOwkJCS8qIERlc2NyaXB0b3IgbGlzdCBsZW5ndGguICovCj4gPiAgIH07Cj4gPiAgIHN0 cnVjdCB2cmluZ192aXJ0cXVldWUgewo+ID4gICAJc3RydWN0IHZpcnRxdWV1ZSB2cTsKPiA+IC0J LyogQWN0dWFsIG1lbW9yeSBsYXlvdXQgZm9yIHRoaXMgcXVldWUgKi8KPiA+IC0Jc3RydWN0IHZy aW5nIHZyaW5nOwo+ID4gKwlib29sIHBhY2tlZDsKPiA+ICAgCS8qIENhbiB3ZSB1c2Ugd2VhayBi YXJyaWVycz8gKi8KPiA+ICAgCWJvb2wgd2Vha19iYXJyaWVyczsKPiA+IEBAIC04NywxMSArODcs MjggQEAgc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSB7Cj4gPiAgIAkvKiBMYXN0IHVzZWQgaW5kZXgg d2UndmUgc2Vlbi4gKi8KPiA+ICAgCXUxNiBsYXN0X3VzZWRfaWR4Owo+ID4gLQkvKiBMYXN0IHdy aXR0ZW4gdmFsdWUgdG8gYXZhaWwtPmZsYWdzICovCj4gPiAtCXUxNiBhdmFpbF9mbGFnc19zaGFk b3c7Cj4gPiAtCj4gPiAtCS8qIExhc3Qgd3JpdHRlbiB2YWx1ZSB0byBhdmFpbC0+aWR4IGluIGd1 ZXN0IGJ5dGUgb3JkZXIgKi8KPiA+IC0JdTE2IGF2YWlsX2lkeF9zaGFkb3c7Cj4gPiArCXVuaW9u IHsKPiA+ICsJCS8qIEF2YWlsYWJsZSBmb3Igc3BsaXQgcmluZyAqLwo+ID4gKwkJc3RydWN0IHsK PiA+ICsJCQkvKiBBY3R1YWwgbWVtb3J5IGxheW91dCBmb3IgdGhpcyBxdWV1ZSAqLwo+ID4gKwkJ CXN0cnVjdCB2cmluZyB2cmluZzsKPiA+ICsKPiA+ICsJCQkvKiBMYXN0IHdyaXR0ZW4gdmFsdWUg dG8gYXZhaWwtPmZsYWdzICovCj4gPiArCQkJdTE2IGF2YWlsX2ZsYWdzX3NoYWRvdzsKPiA+ICsK PiA+ICsJCQkvKiBMYXN0IHdyaXR0ZW4gdmFsdWUgdG8gYXZhaWwtPmlkeCBpbgo+ID4gKwkJCSAq IGd1ZXN0IGJ5dGUgb3JkZXIgKi8KPiA+ICsJCQl1MTYgYXZhaWxfaWR4X3NoYWRvdzsKPiA+ICsJ CX07Cj4gPiArCj4gPiArCQkvKiBBdmFpbGFibGUgZm9yIHBhY2tlZCByaW5nICovCj4gPiArCQlz dHJ1Y3Qgewo+ID4gKwkJCS8qIEFjdHVhbCBtZW1vcnkgbGF5b3V0IGZvciB0aGlzIHF1ZXVlICov Cj4gPiArCQkJc3RydWN0IHZyaW5nX3BhY2tlZCB2cmluZ19wYWNrZWQ7Cj4gPiArCQkJdTggd3Jh cF9jb3VudGVyIDogMTsKPiA+ICsJCQlib29sIGNoYWluaW5nOwo+ID4gKwkJfTsKPiA+ICsJfTsK PiA+ICAgCS8qIEhvdyB0byBub3RpZnkgb3RoZXIgc2lkZS4gRklYTUU6IGNvbW1vbmFsaXplIGhj YWxscyEgKi8KPiA+ICAgCWJvb2wgKCpub3RpZnkpKHN0cnVjdCB2aXJ0cXVldWUgKnZxKTsKPiA+ IEBAIC0yMDEsMjYgKzIxOCwzNyBAQCBzdGF0aWMgZG1hX2FkZHJfdCB2cmluZ19tYXBfc2luZ2xl KGNvbnN0IHN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxLAo+ID4gICAJCQkgICAgICBjcHVfYWRk ciwgc2l6ZSwgZGlyZWN0aW9uKTsKPiA+ICAgfQo+ID4gLXN0YXRpYyB2b2lkIHZyaW5nX3VubWFw X29uZShjb25zdCBzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSwKPiA+IC0JCQkgICAgc3RydWN0 IHZyaW5nX2Rlc2MgKmRlc2MpCj4gPiArc3RhdGljIHZvaWQgdnJpbmdfdW5tYXBfb25lKGNvbnN0 IHN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxLCB2b2lkICpfZGVzYykKPiA+ICAgewo+IAo+IExl dCdzIHNwbGl0IHRoZSBoZWxwZXJzIHRvIHBhY2tlZC9zcGxpdCB2ZXJzaW9uIGxpa2Ugb3RoZXIg aGVscGVycz8KPiAoQ29uc2lkZXIgdGhlIGNhbGxlciBoYXMgYWxyZWFkeSBrbm93biB0aGUgdHlw ZSBvZiB2cSkuCgpPa2F5LgoKPiAKPiA+ICsJdTY0IGFkZHI7Cj4gPiArCXUzMiBsZW47Cj4gPiAg IAl1MTYgZmxhZ3M7Cj4gPiAgIAlpZiAoIXZyaW5nX3VzZV9kbWFfYXBpKHZxLT52cS52ZGV2KSkK PiA+ICAgCQlyZXR1cm47Cj4gPiAtCWZsYWdzID0gdmlydGlvMTZfdG9fY3B1KHZxLT52cS52ZGV2 LCBkZXNjLT5mbGFncyk7Cj4gPiArCWlmICh2cS0+cGFja2VkKSB7Cj4gPiArCQlzdHJ1Y3QgdnJp bmdfcGFja2VkX2Rlc2MgKmRlc2MgPSBfZGVzYzsKPiA+ICsKPiA+ICsJCWFkZHIgPSB2aXJ0aW82 NF90b19jcHUodnEtPnZxLnZkZXYsIGRlc2MtPmFkZHIpOwo+ID4gKwkJbGVuID0gdmlydGlvMzJf dG9fY3B1KHZxLT52cS52ZGV2LCBkZXNjLT5sZW4pOwo+ID4gKwkJZmxhZ3MgPSB2aXJ0aW8xNl90 b19jcHUodnEtPnZxLnZkZXYsIGRlc2MtPmZsYWdzKTsKPiA+ICsJfSBlbHNlIHsKPiA+ICsJCXN0 cnVjdCB2cmluZ19kZXNjICpkZXNjID0gX2Rlc2M7Cj4gPiArCj4gPiArCQlhZGRyID0gdmlydGlv NjRfdG9fY3B1KHZxLT52cS52ZGV2LCBkZXNjLT5hZGRyKTsKPiA+ICsJCWxlbiA9IHZpcnRpbzMy X3RvX2NwdSh2cS0+dnEudmRldiwgZGVzYy0+bGVuKTsKPiA+ICsJCWZsYWdzID0gdmlydGlvMTZf dG9fY3B1KHZxLT52cS52ZGV2LCBkZXNjLT5mbGFncyk7Cj4gPiArCX0KPiA+ICAgCWlmIChmbGFn cyAmIFZSSU5HX0RFU0NfRl9JTkRJUkVDVCkgewo+ID4gICAJCWRtYV91bm1hcF9zaW5nbGUodnJp bmdfZG1hX2Rldih2cSksCj4gPiAtCQkJCSB2aXJ0aW82NF90b19jcHUodnEtPnZxLnZkZXYsIGRl c2MtPmFkZHIpLAo+ID4gLQkJCQkgdmlydGlvMzJfdG9fY3B1KHZxLT52cS52ZGV2LCBkZXNjLT5s ZW4pLAo+ID4gKwkJCQkgYWRkciwgbGVuLAo+ID4gICAJCQkJIChmbGFncyAmIFZSSU5HX0RFU0Nf Rl9XUklURSkgPwo+ID4gICAJCQkJIERNQV9GUk9NX0RFVklDRSA6IERNQV9UT19ERVZJQ0UpOwo+ ID4gICAJfSBlbHNlIHsKPiA+ICAgCQlkbWFfdW5tYXBfcGFnZSh2cmluZ19kbWFfZGV2KHZxKSwK PiA+IC0JCQkgICAgICAgdmlydGlvNjRfdG9fY3B1KHZxLT52cS52ZGV2LCBkZXNjLT5hZGRyKSwK PiA+IC0JCQkgICAgICAgdmlydGlvMzJfdG9fY3B1KHZxLT52cS52ZGV2LCBkZXNjLT5sZW4pLAo+ ID4gKwkJCSAgICAgICBhZGRyLCBsZW4sCj4gPiAgIAkJCSAgICAgICAoZmxhZ3MgJiBWUklOR19E RVNDX0ZfV1JJVEUpID8KPiA+ICAgCQkJICAgICAgIERNQV9GUk9NX0RFVklDRSA6IERNQV9UT19E RVZJQ0UpOwo+ID4gICAJfQo+ID4gQEAgLTIzNSw4ICsyNjMsOSBAQCBzdGF0aWMgaW50IHZyaW5n X21hcHBpbmdfZXJyb3IoY29uc3Qgc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEsCj4gPiAgIAly ZXR1cm4gZG1hX21hcHBpbmdfZXJyb3IodnJpbmdfZG1hX2Rldih2cSksIGFkZHIpOwo+ID4gICB9 Cj4gPiAtc3RhdGljIHN0cnVjdCB2cmluZ19kZXNjICphbGxvY19pbmRpcmVjdChzdHJ1Y3Qgdmly dHF1ZXVlICpfdnEsCj4gPiAtCQkJCQkgdW5zaWduZWQgaW50IHRvdGFsX3NnLCBnZnBfdCBnZnAp Cj4gPiArc3RhdGljIHN0cnVjdCB2cmluZ19kZXNjICphbGxvY19pbmRpcmVjdF9zcGxpdChzdHJ1 Y3QgdmlydHF1ZXVlICpfdnEsCj4gPiArCQkJCQkgICAgICAgdW5zaWduZWQgaW50IHRvdGFsX3Nn LAo+ID4gKwkJCQkJICAgICAgIGdmcF90IGdmcCkKPiA+ICAgewo+ID4gICAJc3RydWN0IHZyaW5n X2Rlc2MgKmRlc2M7Cj4gPiAgIAl1bnNpZ25lZCBpbnQgaTsKPiA+IEBAIC0yNTcsMTQgKzI4Niwz MiBAQCBzdGF0aWMgc3RydWN0IHZyaW5nX2Rlc2MgKmFsbG9jX2luZGlyZWN0KHN0cnVjdCB2aXJ0 cXVldWUgKl92cSwKPiA+ICAgCXJldHVybiBkZXNjOwo+ID4gICB9Cj4gPiAtc3RhdGljIGlubGlu ZSBpbnQgdmlydHF1ZXVlX2FkZChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEsCj4gPiAtCQkJCXN0cnVj dCBzY2F0dGVybGlzdCAqc2dzW10sCj4gPiAtCQkJCXVuc2lnbmVkIGludCB0b3RhbF9zZywKPiA+ IC0JCQkJdW5zaWduZWQgaW50IG91dF9zZ3MsCj4gPiAtCQkJCXVuc2lnbmVkIGludCBpbl9zZ3Ms Cj4gPiAtCQkJCXZvaWQgKmRhdGEsCj4gPiAtCQkJCXZvaWQgKmN0eCwKPiA+IC0JCQkJZ2ZwX3Qg Z2ZwKQo+ID4gK3N0YXRpYyBzdHJ1Y3QgdnJpbmdfcGFja2VkX2Rlc2MgKmFsbG9jX2luZGlyZWN0 X3BhY2tlZChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEsCj4gPiArCQkJCQkJICAgICAgIHVuc2lnbmVk IGludCB0b3RhbF9zZywKPiA+ICsJCQkJCQkgICAgICAgZ2ZwX3QgZ2ZwKQo+ID4gK3sKPiA+ICsJ c3RydWN0IHZyaW5nX3BhY2tlZF9kZXNjICpkZXNjOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBX ZSByZXF1aXJlIGxvd21lbSBtYXBwaW5ncyBmb3IgdGhlIGRlc2NyaXB0b3JzIGJlY2F1c2UKPiA+ ICsJICogb3RoZXJ3aXNlIHZpcnRfdG9fcGh5cyB3aWxsIGdpdmUgdXMgYm9ndXMgYWRkcmVzc2Vz IGluIHRoZQo+ID4gKwkgKiB2aXJ0cXVldWUuCj4gPiArCSAqLwo+ID4gKwlnZnAgJj0gfl9fR0ZQ X0hJR0hNRU07Cj4gPiArCj4gPiArCWRlc2MgPSBrbWFsbG9jKHRvdGFsX3NnICogc2l6ZW9mKHN0 cnVjdCB2cmluZ19wYWNrZWRfZGVzYyksIGdmcCk7Cj4gPiArCj4gPiArCXJldHVybiBkZXNjOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIGludCB2aXJ0cXVldWVfYWRkX3NwbGl0KHN0 cnVjdCB2aXJ0cXVldWUgKl92cSwKPiA+ICsJCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpz Z3NbXSwKPiA+ICsJCQkJICAgICAgdW5zaWduZWQgaW50IHRvdGFsX3NnLAo+ID4gKwkJCQkgICAg ICB1bnNpZ25lZCBpbnQgb3V0X3NncywKPiA+ICsJCQkJICAgICAgdW5zaWduZWQgaW50IGluX3Nn cywKPiA+ICsJCQkJICAgICAgdm9pZCAqZGF0YSwKPiA+ICsJCQkJICAgICAgdm9pZCAqY3R4LAo+ ID4gKwkJCQkgICAgICBnZnBfdCBnZnApCj4gPiAgIHsKPiA+ICAgCXN0cnVjdCB2cmluZ192aXJ0 cXVldWUgKnZxID0gdG9fdnZxKF92cSk7Cj4gPiAgIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwo+ ID4gQEAgLTMwMyw3ICszNTAsNyBAQCBzdGF0aWMgaW5saW5lIGludCB2aXJ0cXVldWVfYWRkKHN0 cnVjdCB2aXJ0cXVldWUgKl92cSwKPiA+ICAgCS8qIElmIHRoZSBob3N0IHN1cHBvcnRzIGluZGly ZWN0IGRlc2NyaXB0b3IgdGFibGVzLCBhbmQgd2UgaGF2ZSBtdWx0aXBsZQo+ID4gICAJICogYnVm ZmVycywgdGhlbiBnbyBpbmRpcmVjdC4gRklYTUU6IHR1bmUgdGhpcyB0aHJlc2hvbGQgKi8KPiA+ ICAgCWlmICh2cS0+aW5kaXJlY3QgJiYgdG90YWxfc2cgPiAxICYmIHZxLT52cS5udW1fZnJlZSkK PiA+IC0JCWRlc2MgPSBhbGxvY19pbmRpcmVjdChfdnEsIHRvdGFsX3NnLCBnZnApOwo+ID4gKwkJ ZGVzYyA9IGFsbG9jX2luZGlyZWN0X3NwbGl0KF92cSwgdG90YWxfc2csIGdmcCk7Cj4gPiAgIAll bHNlIHsKPiA+ICAgCQlkZXNjID0gTlVMTDsKPiA+ICAgCQlXQVJOX09OX09OQ0UodG90YWxfc2cg PiB2cS0+dnJpbmcubnVtICYmICF2cS0+aW5kaXJlY3QpOwo+ID4gQEAgLTQzNyw2ICs0ODQsMjQz IEBAIHN0YXRpYyBpbmxpbmUgaW50IHZpcnRxdWV1ZV9hZGQoc3RydWN0IHZpcnRxdWV1ZSAqX3Zx LAo+ID4gICAJcmV0dXJuIC1FSU87Cj4gPiAgIH0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2aXJ0 cXVldWVfYWRkX3BhY2tlZChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEsCj4gPiArCQkJCSAgICAgICBz dHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnc1tdLAo+ID4gKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHRv dGFsX3NnLAo+ID4gKwkJCQkgICAgICAgdW5zaWduZWQgaW50IG91dF9zZ3MsCj4gPiArCQkJCSAg ICAgICB1bnNpZ25lZCBpbnQgaW5fc2dzLAo+ID4gKwkJCQkgICAgICAgdm9pZCAqZGF0YSwKPiA+ ICsJCQkJICAgICAgIHZvaWQgKmN0eCwKPiA+ICsJCQkJICAgICAgIGdmcF90IGdmcCkKPiA+ICt7 Cj4gPiArCXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZxKF92cSk7Cj4gPiArCXN0 cnVjdCB2cmluZ19wYWNrZWRfZGVzYyAqZGVzYzsKPiA+ICsJc3RydWN0IHNjYXR0ZXJsaXN0ICpz ZzsKPiA+ICsJdW5zaWduZWQgaW50IGksIG4sIGRlc2NzX3VzZWQsIHVuaW5pdGlhbGl6ZWRfdmFy KHByZXYpLCBlcnJfaWR4Owo+ID4gKwlfX3ZpcnRpbzE2IHVuaW5pdGlhbGl6ZWRfdmFyKGhlYWRf ZmxhZ3MpLCBmbGFnczsKPiA+ICsJaW50IGhlYWQsIHdyYXBfY291bnRlcjsKPiA+ICsJYm9vbCBp bmRpcmVjdDsKPiA+ICsKPiA+ICsJU1RBUlRfVVNFKHZxKTsKPiA+ICsKPiA+ICsJQlVHX09OKGRh dGEgPT0gTlVMTCk7Cj4gPiArCUJVR19PTihjdHggJiYgdnEtPmluZGlyZWN0KTsKPiA+ICsKPiA+ ICsJaWYgKHVubGlrZWx5KHZxLT5icm9rZW4pKSB7Cj4gPiArCQlFTkRfVVNFKHZxKTsKPiA+ICsJ CXJldHVybiAtRUlPOwo+ID4gKwl9Cj4gPiArCj4gPiArCWlmICh0b3RhbF9zZyA+IDEgJiYgIXZx LT5jaGFpbmluZyAmJiAhdnEtPmluZGlyZWN0KSB7Cj4gPiArCQlFTkRfVVNFKHZxKTsKPiA+ICsJ CXJldHVybiAtRU5PVFNVUFA7Cj4gPiArCX0KPiA+ICsKPiA+ICsjaWZkZWYgREVCVUcKPiA+ICsJ ewo+ID4gKwkJa3RpbWVfdCBub3cgPSBrdGltZV9nZXQoKTsKPiA+ICsKPiA+ICsJCS8qIE5vIGtp Y2sgb3IgZ2V0LCB3aXRoIC4xIHNlY29uZCBiZXR3ZWVuPyAgV2Fybi4gKi8KPiA+ICsJCWlmICh2 cS0+bGFzdF9hZGRfdGltZV92YWxpZCkKPiA+ICsJCQlXQVJOX09OKGt0aW1lX3RvX21zKGt0aW1l X3N1Yihub3csIHZxLT5sYXN0X2FkZF90aW1lKSkKPiA+ICsJCQkJCSAgICA+IDEwMCk7Cj4gPiAr CQl2cS0+bGFzdF9hZGRfdGltZSA9IG5vdzsKPiA+ICsJCXZxLT5sYXN0X2FkZF90aW1lX3ZhbGlk ID0gdHJ1ZTsKPiA+ICsJfQo+ID4gKyNlbmRpZgo+ID4gKwo+ID4gKwlCVUdfT04odG90YWxfc2cg PT0gMCk7Cj4gPiArCj4gPiArCWhlYWQgPSB2cS0+ZnJlZV9oZWFkOwo+ID4gKwl3cmFwX2NvdW50 ZXIgPSB2cS0+d3JhcF9jb3VudGVyOwo+ID4gKwo+ID4gKwkvKiBJZiB0aGUgaG9zdCBzdXBwb3J0 cyBpbmRpcmVjdCBkZXNjcmlwdG9yIHRhYmxlcywgYW5kIHdlIGhhdmUgbXVsdGlwbGUKPiA+ICsJ ICogYnVmZmVycywgdGhlbiBnbyBpbmRpcmVjdC4gRklYTUU6IHR1bmUgdGhpcyB0aHJlc2hvbGQg Ki8KPiA+ICsJaWYgKHZxLT5pbmRpcmVjdCAmJiB0b3RhbF9zZyA+IDEgJiYgdnEtPnZxLm51bV9m cmVlKQo+ID4gKwkJZGVzYyA9IGFsbG9jX2luZGlyZWN0X3BhY2tlZChfdnEsIHRvdGFsX3NnLCBn ZnApOwo+ID4gKwllbHNlIHsKPiA+ICsJCWRlc2MgPSBOVUxMOwo+ID4gKwkJV0FSTl9PTl9PTkNF KHRvdGFsX3NnID4gdnEtPnZyaW5nLm51bSAmJiAhdnEtPmluZGlyZWN0KTsKPiA+ICsJfQo+ID4g Kwo+ID4gKwlpZiAoZGVzYykgewo+ID4gKwkJLyogVXNlIGEgc2luZ2xlIGJ1ZmZlciB3aGljaCBk b2Vzbid0IGNvbnRpbnVlICovCj4gPiArCQlpbmRpcmVjdCA9IHRydWU7Cj4gPiArCQkvKiBTZXQg dXAgcmVzdCB0byB1c2UgdGhpcyBpbmRpcmVjdCB0YWJsZS4gKi8KPiA+ICsJCWkgPSAwOwo+ID4g KwkJZGVzY3NfdXNlZCA9IDE7Cj4gPiArCX0gZWxzZSB7Cj4gPiArCQlpbmRpcmVjdCA9IGZhbHNl Owo+ID4gKwkJZGVzYyA9IHZxLT52cmluZ19wYWNrZWQuZGVzYzsKPiA+ICsJCWkgPSBoZWFkOwo+ ID4gKwkJZGVzY3NfdXNlZCA9IHRvdGFsX3NnOwo+ID4gKwo+ID4gKwkJaWYgKHRvdGFsX3NnID4g MSAmJiAhdnEtPmNoYWluaW5nKSB7Cj4gPiArCQkJRU5EX1VTRSh2cSk7Cj4gPiArCQkJcmV0dXJu IC1FTk9UU1VQUDsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAodnEtPnZxLm51bV9m cmVlIDwgZGVzY3NfdXNlZCkgewo+ID4gKwkJcHJfZGVidWcoIkNhbid0IGFkZCBidWYgbGVuICVp IC0gYXZhaWwgPSAlaVxuIiwKPiA+ICsJCQkgZGVzY3NfdXNlZCwgdnEtPnZxLm51bV9mcmVlKTsK PiA+ICsJCS8qIEZJWE1FOiBmb3IgaGlzdG9yaWNhbCByZWFzb25zLCB3ZSBmb3JjZSBhIG5vdGlm eSBoZXJlIGlmCj4gPiArCQkgKiB0aGVyZSBhcmUgb3V0Z29pbmcgcGFydHMgdG8gdGhlIGJ1ZmZl ci4gIFByZXN1bWFibHkgdGhlCj4gPiArCQkgKiBob3N0IHNob3VsZCBzZXJ2aWNlIHRoZSByaW5n IEFTQVAuICovCj4gPiArCQlpZiAob3V0X3NncykKPiA+ICsJCQl2cS0+bm90aWZ5KCZ2cS0+dnEp Owo+ID4gKwkJaWYgKGluZGlyZWN0KQo+ID4gKwkJCWtmcmVlKGRlc2MpOwo+ID4gKwkJRU5EX1VT RSh2cSk7Cj4gPiArCQlyZXR1cm4gLUVOT1NQQzsKPiA+ICsJfQo+ID4gKwo+ID4gKwlmb3IgKG4g PSAwOyBuIDwgb3V0X3NnczsgbisrKSB7Cj4gPiArCQlmb3IgKHNnID0gc2dzW25dOyBzZzsgc2cg PSBzZ19uZXh0KHNnKSkgewo+ID4gKwkJCWRtYV9hZGRyX3QgYWRkciA9IHZyaW5nX21hcF9vbmVf c2codnEsIHNnLCBETUFfVE9fREVWSUNFKTsKPiA+ICsJCQlpZiAodnJpbmdfbWFwcGluZ19lcnJv cih2cSwgYWRkcikpCj4gPiArCQkJCWdvdG8gdW5tYXBfcmVsZWFzZTsKPiA+ICsKPiA+ICsJCQlm bGFncyA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIFZSSU5HX0RFU0NfRl9ORVhUIHwKPiA+ ICsJCQkJCVZSSU5HX0RFU0NfRl9BVkFJTCh2cS0+d3JhcF9jb3VudGVyKSB8Cj4gPiArCQkJCQlW UklOR19ERVNDX0ZfVVNFRCghdnEtPndyYXBfY291bnRlcikpOwo+ID4gKwkJCWlmICghaW5kaXJl Y3QgJiYgaSA9PSBoZWFkKQo+ID4gKwkJCQloZWFkX2ZsYWdzID0gZmxhZ3M7Cj4gPiArCQkJZWxz ZQo+ID4gKwkJCQlkZXNjW2ldLmZsYWdzID0gZmxhZ3M7Cj4gPiArCj4gPiArCQkJZGVzY1tpXS5h ZGRyID0gY3B1X3RvX3ZpcnRpbzY0KF92cS0+dmRldiwgYWRkcik7Cj4gPiArCQkJZGVzY1tpXS5s ZW4gPSBjcHVfdG9fdmlydGlvMzIoX3ZxLT52ZGV2LCBzZy0+bGVuZ3RoKTsKPiA+ICsJCQlkZXNj W2ldLmlkID0gY3B1X3RvX3ZpcnRpbzMyKF92cS0+dmRldiwgaGVhZCk7Cj4gCj4gSWYgaXQncyBh IHBhcnQgb2YgY2hhaW4sIHdlIG9ubHkgbmVlZCB0byBkbyB0aGlzIGZvciBsYXN0IGJ1ZmZlciBJ IHRoaW5rLgoKSSdtIG5vdCBzdXJlIEkndmUgZ290IHlvdXIgcG9pbnQgYWJvdXQgdGhlICJsYXN0 IGJ1ZmZlciIuCkJ1dCwgeWVzLCBpZCBqdXN0IG5lZWRzIHRvIGJlIHNldCBmb3IgdGhlIGxhc3Qg ZGVzYy4KCj4gCj4gPiArCQkJcHJldiA9IGk7Cj4gPiArCQkJaSsrOwo+IAo+IEl0IGxvb2tzIHRv IG1lIHByZXYgaXMgYWx3YXlzIGkgLSAxPwoKTm8uIHByZXYgd2lsbCBiZSAodnEtPnZyaW5nX3Bh Y2tlZC5udW0gLSAxKSB3aGVuIGkgYmVjb21lcyAwLgoKPiAKPiA+ICsJCQlpZiAoIWluZGlyZWN0 ICYmIGkgPj0gdnEtPnZyaW5nX3BhY2tlZC5udW0pIHsKPiA+ICsJCQkJaSA9IDA7Cj4gPiArCQkJ CXZxLT53cmFwX2NvdW50ZXIgXj0gMTsKPiA+ICsJCQl9Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsJ Zm9yICg7IG4gPCAob3V0X3NncyArIGluX3Nncyk7IG4rKykgewo+ID4gKwkJZm9yIChzZyA9IHNn c1tuXTsgc2c7IHNnID0gc2dfbmV4dChzZykpIHsKPiA+ICsJCQlkbWFfYWRkcl90IGFkZHIgPSB2 cmluZ19tYXBfb25lX3NnKHZxLCBzZywgRE1BX0ZST01fREVWSUNFKTsKPiA+ICsJCQlpZiAodnJp bmdfbWFwcGluZ19lcnJvcih2cSwgYWRkcikpCj4gPiArCQkJCWdvdG8gdW5tYXBfcmVsZWFzZTsK PiA+ICsKPiA+ICsJCQlmbGFncyA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIFZSSU5HX0RF U0NfRl9ORVhUIHwKPiA+ICsJCQkJCVZSSU5HX0RFU0NfRl9XUklURSB8Cj4gPiArCQkJCQlWUklO R19ERVNDX0ZfQVZBSUwodnEtPndyYXBfY291bnRlcikgfAo+ID4gKwkJCQkJVlJJTkdfREVTQ19G X1VTRUQoIXZxLT53cmFwX2NvdW50ZXIpKTsKPiA+ICsJCQlpZiAoIWluZGlyZWN0ICYmIGkgPT0g aGVhZCkKPiA+ICsJCQkJaGVhZF9mbGFncyA9IGZsYWdzOwo+ID4gKwkJCWVsc2UKPiA+ICsJCQkJ ZGVzY1tpXS5mbGFncyA9IGZsYWdzOwo+ID4gKwo+ID4gKwkJCWRlc2NbaV0uYWRkciA9IGNwdV90 b192aXJ0aW82NChfdnEtPnZkZXYsIGFkZHIpOwo+ID4gKwkJCWRlc2NbaV0ubGVuID0gY3B1X3Rv X3ZpcnRpbzMyKF92cS0+dmRldiwgc2ctPmxlbmd0aCk7Cj4gPiArCQkJZGVzY1tpXS5pZCA9IGNw dV90b192aXJ0aW8zMihfdnEtPnZkZXYsIGhlYWQpOwo+ID4gKwkJCXByZXYgPSBpOwo+ID4gKwkJ CWkrKzsKPiA+ICsJCQlpZiAoIWluZGlyZWN0ICYmIGkgPj0gdnEtPnZyaW5nX3BhY2tlZC5udW0p IHsKPiA+ICsJCQkJaSA9IDA7Cj4gPiArCQkJCXZxLT53cmFwX2NvdW50ZXIgXj0gMTsKPiA+ICsJ CQl9Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsJLyogTGFzdCBvbmUgZG9lc24ndCBjb250aW51ZS4g Ki8KPiA+ICsJaWYgKCFpbmRpcmVjdCAmJiAoaGVhZCArIDEpICUgdnEtPnZyaW5nX3BhY2tlZC5u dW0gPT0gaSkKPiA+ICsJCWhlYWRfZmxhZ3MgJj0gY3B1X3RvX3ZpcnRpbzE2KF92cS0+dmRldiwg flZSSU5HX0RFU0NfRl9ORVhUKTsKPiAKPiBJIGNhbid0IGdldCB0aGUgd2h5IHdlIG5lZWQgdGhp cyBoZXJlLgoKSWYgb25seSBvbmUgZGVzYyBpcyB1c2VkLCB3ZSB3aWxsIG5lZWQgdG8gY2xlYXIg dGhlClZSSU5HX0RFU0NfRl9ORVhUIGZsYWcgZnJvbSB0aGUgaGVhZF9mbGFncy4KCj4gCj4gPiAr CWVsc2UKPiA+ICsJCWRlc2NbcHJldl0uZmxhZ3MgJj0gY3B1X3RvX3ZpcnRpbzE2KF92cS0+dmRl diwgflZSSU5HX0RFU0NfRl9ORVhUKTsKPiA+ICsKPiA+ICsJaWYgKGluZGlyZWN0KSB7Cj4gPiAr CQkvKiBGSVhNRTogdG8gYmUgaW1wbGVtZW50ZWQgKi8KPiA+ICsKPiA+ICsJCS8qIE5vdyB0aGF0 IHRoZSBpbmRpcmVjdCB0YWJsZSBpcyBmaWxsZWQgaW4sIG1hcCBpdC4gKi8KPiA+ICsJCWRtYV9h ZGRyX3QgYWRkciA9IHZyaW5nX21hcF9zaW5nbGUoCj4gPiArCQkJdnEsIGRlc2MsIHRvdGFsX3Nn ICogc2l6ZW9mKHN0cnVjdCB2cmluZ19wYWNrZWRfZGVzYyksCj4gPiArCQkJRE1BX1RPX0RFVklD RSk7Cj4gPiArCQlpZiAodnJpbmdfbWFwcGluZ19lcnJvcih2cSwgYWRkcikpCj4gPiArCQkJZ290 byB1bm1hcF9yZWxlYXNlOwo+ID4gKwo+ID4gKwkJaGVhZF9mbGFncyA9IGNwdV90b192aXJ0aW8x NihfdnEtPnZkZXYsIFZSSU5HX0RFU0NfRl9JTkRJUkVDVCB8Cj4gPiArCQkJCQkgICAgIFZSSU5H X0RFU0NfRl9BVkFJTCh3cmFwX2NvdW50ZXIpIHwKPiA+ICsJCQkJCSAgICAgVlJJTkdfREVTQ19G X1VTRUQoIXdyYXBfY291bnRlcikpOwo+ID4gKwkJdnEtPnZyaW5nX3BhY2tlZC5kZXNjW2hlYWRd LmFkZHIgPSBjcHVfdG9fdmlydGlvNjQoX3ZxLT52ZGV2LCBhZGRyKTsKPiA+ICsJCXZxLT52cmlu Z19wYWNrZWQuZGVzY1toZWFkXS5sZW4gPSBjcHVfdG9fdmlydGlvMzIoX3ZxLT52ZGV2LAo+ID4g KwkJCQl0b3RhbF9zZyAqIHNpemVvZihzdHJ1Y3QgdnJpbmdfcGFja2VkX2Rlc2MpKTsKPiA+ICsJ CXZxLT52cmluZ19wYWNrZWQuZGVzY1toZWFkXS5pZCA9IGNwdV90b192aXJ0aW8zMihfdnEtPnZk ZXYsIGhlYWQpOwo+ID4gKwl9Cj4gPiArCj4gPiArCS8qIFdlJ3JlIHVzaW5nIHNvbWUgYnVmZmVy cyBmcm9tIHRoZSBmcmVlIGxpc3QuICovCj4gPiArCXZxLT52cS5udW1fZnJlZSAtPSBkZXNjc191 c2VkOwo+ID4gKwo+ID4gKwkvKiBVcGRhdGUgZnJlZSBwb2ludGVyICovCj4gPiArCWlmIChpbmRp cmVjdCkgewo+ID4gKwkJbiA9IGhlYWQgKyAxOwo+ID4gKwkJaWYgKG4gPj0gdnEtPnZyaW5nX3Bh Y2tlZC5udW0pIHsKPiA+ICsJCQluID0gMDsKPiA+ICsJCQl2cS0+d3JhcF9jb3VudGVyIF49IDE7 Cj4gPiArCQl9Cj4gPiArCQl2cS0+ZnJlZV9oZWFkID0gbjsKPiAKPiBkZXRhY2hfYnVmX3BhY2tl ZCgpIGRvZXMgbm90IGV2ZW4gdG91Y2ggZnJlZV9oZWFkIGhlcmUsIHNvIG5lZWQgdG8gZXhwbGFp bgo+IGl0cyBtZWFuaW5nIGZvciBwYWNrZWQgcmluZy4KCkFib3ZlIGNvZGUgaXMgZm9yIGluZGly ZWN0IHN1cHBvcnQgd2hpY2ggaXNuJ3QgcmVhbGx5CmltcGxlbWVudGVkIGluIHRoaXMgcGF0Y2gg eWV0LgoKRm9yIHlvdXIgcXVlc3Rpb24sIGZyZWVfaGVhZCBzdG9yZXMgdGhlIGluZGV4IG9mIHRo ZQpuZXh0IGF2YWlsIGRlc2MuIEknbGwgYWRkIGEgY29tbWVudCBmb3IgaXQgb3IgbW92ZSBpdAp0 byB1bmlvbiBhbmQgZ2l2ZSBpdCBhIGJldHRlciBuYW1lIGluIG5leHQgdmVyc2lvbi4KCj4gCj4g PiArCX0gZWxzZQo+ID4gKwkJdnEtPmZyZWVfaGVhZCA9IGk7Cj4gCj4gSUQgaXMgb25seSB2YWxp ZCBpbiB0aGUgbGFzdCBkZXNjcmlwdG9yIGluIHRoZSBsaXN0LCBzbyBoZWFkICsgMSBzaG91bGQg YmUKPiBvayB0b28/CgpJIGRvbid0IHJlYWxseSBnZXQgeW91ciBwb2ludC4gVGhlIHZxLT5mcmVl X2hlYWQgc3RvcmVzCnRoZSBpbmRleCBvZiB0aGUgbmV4dCBhdmFpbCBkZXNjLgoKPiAKPiA+ICsK PiA+ICsJLyogU3RvcmUgdG9rZW4gYW5kIGluZGlyZWN0IGJ1ZmZlciBzdGF0ZS4gKi8KPiA+ICsJ dnEtPmRlc2Nfc3RhdGVbaGVhZF0ubnVtID0gZGVzY3NfdXNlZDsKPiA+ICsJdnEtPmRlc2Nfc3Rh dGVbaGVhZF0uZGF0YSA9IGRhdGE7Cj4gPiArCWlmIChpbmRpcmVjdCkKPiA+ICsJCXZxLT5kZXNj X3N0YXRlW2hlYWRdLmluZGlyX2Rlc2MgPSBkZXNjOwo+ID4gKwllbHNlCj4gPiArCQl2cS0+ZGVz Y19zdGF0ZVtoZWFkXS5pbmRpcl9kZXNjID0gY3R4Owo+ID4gKwo+ID4gKwl2aXJ0aW9fd21iKHZx LT53ZWFrX2JhcnJpZXJzKTsKPiAKPiBMZXQncyBhZGQgYSBjb21tZW50IHRvIGV4cGxhaW4gdGhl IGJhcnJpZXIgaGVyZS4KCk9rYXkuCgo+IAo+ID4gKwl2cS0+dnJpbmdfcGFja2VkLmRlc2NbaGVh ZF0uZmxhZ3MgPSBoZWFkX2ZsYWdzOwo+ID4gKwl2cS0+bnVtX2FkZGVkKys7Cj4gPiArCj4gPiAr CXByX2RlYnVnKCJBZGRlZCBidWZmZXIgaGVhZCAlaSB0byAlcFxuIiwgaGVhZCwgdnEpOwo+ID4g KwlFTkRfVVNFKHZxKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArCj4gPiArdW5tYXBfcmVs ZWFzZToKPiA+ICsJZXJyX2lkeCA9IGk7Cj4gPiArCWkgPSBoZWFkOwo+ID4gKwo+ID4gKwlmb3Ig KG4gPSAwOyBuIDwgdG90YWxfc2c7IG4rKykgewo+ID4gKwkJaWYgKGkgPT0gZXJyX2lkeCkKPiA+ ICsJCQlicmVhazsKPiA+ICsJCXZyaW5nX3VubWFwX29uZSh2cSwgJmRlc2NbaV0pOwo+ID4gKwkJ aSsrOwo+ID4gKwkJaWYgKCFpbmRpcmVjdCAmJiBpID49IHZxLT52cmluZ19wYWNrZWQubnVtKQo+ ID4gKwkJCWkgPSAwOwo+ID4gKwl9Cj4gPiArCj4gPiArCXZxLT53cmFwX2NvdW50ZXIgPSB3cmFw X2NvdW50ZXI7Cj4gPiArCj4gPiArCWlmIChpbmRpcmVjdCkKPiA+ICsJCWtmcmVlKGRlc2MpOwo+ ID4gKwo+ID4gKwlFTkRfVVNFKHZxKTsKPiA+ICsJcmV0dXJuIC1FSU87Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyBpbmxpbmUgaW50IHZpcnRxdWV1ZV9hZGQoc3RydWN0IHZpcnRxdWV1ZSAqX3Zx LAo+ID4gKwkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnc1tdLAo+ID4gKwkJCQl1bnNpZ25lZCBp bnQgdG90YWxfc2csCj4gPiArCQkJCXVuc2lnbmVkIGludCBvdXRfc2dzLAo+ID4gKwkJCQl1bnNp Z25lZCBpbnQgaW5fc2dzLAo+ID4gKwkJCQl2b2lkICpkYXRhLAo+ID4gKwkJCQl2b2lkICpjdHgs Cj4gPiArCQkJCWdmcF90IGdmcCkKPiA+ICt7Cj4gPiArCXN0cnVjdCB2cmluZ192aXJ0cXVldWUg KnZxID0gdG9fdnZxKF92cSk7Cj4gPiArCj4gPiArCXJldHVybiB2cS0+cGFja2VkID8gdmlydHF1 ZXVlX2FkZF9wYWNrZWQoX3ZxLCBzZ3MsIHRvdGFsX3NnLCBvdXRfc2dzLAo+ID4gKwkJCQkJCSBp bl9zZ3MsIGRhdGEsIGN0eCwgZ2ZwKSA6Cj4gPiArCQkJICAgIHZpcnRxdWV1ZV9hZGRfc3BsaXQo X3ZxLCBzZ3MsIHRvdGFsX3NnLCBvdXRfc2dzLAo+ID4gKwkJCQkJCWluX3NncywgZGF0YSwgY3R4 LCBnZnApOwo+ID4gK30KPiA+ICsKPiA+ICAgLyoqCj4gPiAgICAqIHZpcnRxdWV1ZV9hZGRfc2dz IC0gZXhwb3NlIGJ1ZmZlcnMgdG8gb3RoZXIgZW5kCj4gPiAgICAqIEB2cTogdGhlIHN0cnVjdCB2 aXJ0cXVldWUgd2UncmUgdGFsa2luZyBhYm91dC4KPiA+IEBAIC01NjEsNiArODQ1LDEyIEBAIGJv b2wgdmlydHF1ZXVlX2tpY2tfcHJlcGFyZShzdHJ1Y3QgdmlydHF1ZXVlICpfdnEpCj4gPiAgIAkg KiBldmVudC4gKi8KPiA+ICAgCXZpcnRpb19tYih2cS0+d2Vha19iYXJyaWVycyk7Cj4gPiArCWlm ICh2cS0+cGFja2VkKSB7Cj4gPiArCQkvKiBGSVhNRTogdG8gYmUgaW1wbGVtZW50ZWQgKi8KPiA+ ICsJCW5lZWRzX2tpY2sgPSB0cnVlOwo+ID4gKwkJZ290byBvdXQ7Cj4gPiArCX0KPiA+ICsKPiA+ ICAgCW9sZCA9IHZxLT5hdmFpbF9pZHhfc2hhZG93IC0gdnEtPm51bV9hZGRlZDsKPiA+ICAgCW5l dyA9IHZxLT5hdmFpbF9pZHhfc2hhZG93Owo+ID4gICAJdnEtPm51bV9hZGRlZCA9IDA7Cj4gPiBA QCAtNTc5LDYgKzg2OSw4IEBAIGJvb2wgdmlydHF1ZXVlX2tpY2tfcHJlcGFyZShzdHJ1Y3Qgdmly dHF1ZXVlICpfdnEpCj4gPiAgIAl9IGVsc2Ugewo+ID4gICAJCW5lZWRzX2tpY2sgPSAhKHZxLT52 cmluZy51c2VkLT5mbGFncyAmIGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIFZSSU5HX1VTRURf Rl9OT19OT1RJRlkpKTsKPiA+ICAgCX0KPiA+ICsKPiA+ICtvdXQ6Cj4gPiAgIAlFTkRfVVNFKHZx KTsKPiA+ICAgCXJldHVybiBuZWVkc19raWNrOwo+ID4gICB9Cj4gPiBAQCAtNjI4LDggKzkyMCw4 IEBAIGJvb2wgdmlydHF1ZXVlX2tpY2soc3RydWN0IHZpcnRxdWV1ZSAqdnEpCj4gPiAgIH0KPiA+ ICAgRVhQT1JUX1NZTUJPTF9HUEwodmlydHF1ZXVlX2tpY2spOwo+ID4gLXN0YXRpYyB2b2lkIGRl dGFjaF9idWYoc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEsIHVuc2lnbmVkIGludCBoZWFkLAo+ ID4gLQkJICAgICAgIHZvaWQgKipjdHgpCj4gPiArc3RhdGljIHZvaWQgZGV0YWNoX2J1Zl9zcGxp dChzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSwgdW5zaWduZWQgaW50IGhlYWQsCj4gPiArCQkJ ICAgICB2b2lkICoqY3R4KQo+ID4gICB7Cj4gPiAgIAl1bnNpZ25lZCBpbnQgaSwgajsKPiA+ICAg CV9fdmlydGlvMTYgbmV4dGZsYWcgPSBjcHVfdG9fdmlydGlvMTYodnEtPnZxLnZkZXYsIFZSSU5H X0RFU0NfRl9ORVhUKTsKPiA+IEBAIC02NzcsMjkgKzk2OSw4MSBAQCBzdGF0aWMgdm9pZCBkZXRh Y2hfYnVmKHN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgaGVhZCwKPiA+ ICAgCX0KPiA+ICAgfQo+ID4gLXN0YXRpYyBpbmxpbmUgYm9vbCBtb3JlX3VzZWQoY29uc3Qgc3Ry dWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEpCj4gPiArc3RhdGljIHZvaWQgZGV0YWNoX2J1Zl9wYWNr ZWQoc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEsIHVuc2lnbmVkIGludCBoZWFkLAo+ID4gKwkJ CSAgICAgIHZvaWQgKipjdHgpCj4gPiArewo+ID4gKwlzdHJ1Y3QgdnJpbmdfcGFja2VkX2Rlc2Mg KmRlc2M7Cj4gPiArCXVuc2lnbmVkIGludCBpLCBqOwo+ID4gKwo+ID4gKwkvKiBDbGVhciBkYXRh IHB0ci4gKi8KPiA+ICsJdnEtPmRlc2Nfc3RhdGVbaGVhZF0uZGF0YSA9IE5VTEw7Cj4gPiArCj4g PiArCWkgPSBoZWFkOwo+ID4gKwo+ID4gKwlmb3IgKGogPSAwOyBqIDwgdnEtPmRlc2Nfc3RhdGVb aGVhZF0ubnVtOyBqKyspIHsKPiA+ICsJCWRlc2MgPSAmdnEtPnZyaW5nX3BhY2tlZC5kZXNjW2ld Owo+ID4gKwkJdnJpbmdfdW5tYXBfb25lKHZxLCBkZXNjKTsKPiA+ICsJCWkrKzsKPiA+ICsJCWlm IChpID49IHZxLT52cmluZ19wYWNrZWQubnVtKQo+ID4gKwkJCWkgPSAwOwo+ID4gKwl9Cj4gPiAr Cj4gPiArCXZxLT52cS5udW1fZnJlZSArPSB2cS0+ZGVzY19zdGF0ZVtoZWFkXS5udW07Cj4gCj4g SXQgbG9va3MgdG8gbWUgdnEtPmZyZWVfaGVhZCBncm93cyBhbHdheXMsIGhvdyBjYW4gd2UgbWFr ZSBzdXJlIGl0IGRvZXMgbm90Cj4gZXhjZWVkcyB2cS5udW0gaGVyZT8KClRoZSB2cS0+ZnJlZV9o ZWFkIHN0b3JlcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgYXZhaWwKZGVzYy4gWW91IGNhbiBmaW5k IGl0IHdyYXBzIHRvZ2V0aGVyIHdpdGggdnEtPndyYXBfY291bnRlcgppbiB2aXJ0cXVldWVfYWRk X3BhY2tlZCgpLgoKPiAKPiA+ICsKPiA+ICsJaWYgKHZxLT5pbmRpcmVjdCkgewo+ID4gKwkJdTMy IGxlbjsKPiA+ICsKPiA+ICsJCWRlc2MgPSB2cS0+ZGVzY19zdGF0ZVtoZWFkXS5pbmRpcl9kZXNj Owo+ID4gKwkJLyogRnJlZSB0aGUgaW5kaXJlY3QgdGFibGUsIGlmIGFueSwgbm93IHRoYXQgaXQn cyB1bm1hcHBlZC4gKi8KPiA+ICsJCWlmICghZGVzYykKPiA+ICsJCQlyZXR1cm47Cj4gPiArCj4g PiArCQlsZW4gPSB2aXJ0aW8zMl90b19jcHUodnEtPnZxLnZkZXYsCj4gPiArCQkJCSAgICAgIHZx LT52cmluZ19wYWNrZWQuZGVzY1toZWFkXS5sZW4pOwo+ID4gKwo+ID4gKwkJQlVHX09OKCEodnEt PnZyaW5nX3BhY2tlZC5kZXNjW2hlYWRdLmZsYWdzICYKPiA+ICsJCQkgY3B1X3RvX3ZpcnRpbzE2 KHZxLT52cS52ZGV2LCBWUklOR19ERVNDX0ZfSU5ESVJFQ1QpKSk7Cj4gPiArCQlCVUdfT04obGVu ID09IDAgfHwgbGVuICUgc2l6ZW9mKHN0cnVjdCB2cmluZ19wYWNrZWRfZGVzYykpOwo+ID4gKwo+ ID4gKwkJZm9yIChqID0gMDsgaiA8IGxlbiAvIHNpemVvZihzdHJ1Y3QgdnJpbmdfcGFja2VkX2Rl c2MpOyBqKyspCj4gPiArCQkJdnJpbmdfdW5tYXBfb25lKHZxLCAmZGVzY1tqXSk7Cj4gPiArCj4g PiArCQlrZnJlZShkZXNjKTsKPiA+ICsJCXZxLT5kZXNjX3N0YXRlW2hlYWRdLmluZGlyX2Rlc2Mg PSBOVUxMOwo+ID4gKwl9IGVsc2UgaWYgKGN0eCkgewo+ID4gKwkJKmN0eCA9IHZxLT5kZXNjX3N0 YXRlW2hlYWRdLmluZGlyX2Rlc2M7Cj4gPiArCX0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlu bGluZSBib29sIG1vcmVfdXNlZF9zcGxpdChjb25zdCBzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2 cSkKPiA+ICAgewo+ID4gICAJcmV0dXJuIHZxLT5sYXN0X3VzZWRfaWR4ICE9IHZpcnRpbzE2X3Rv X2NwdSh2cS0+dnEudmRldiwgdnEtPnZyaW5nLnVzZWQtPmlkeCk7Cj4gPiAgIH0KPiA+IC0vKioK PiA+IC0gKiB2aXJ0cXVldWVfZ2V0X2J1ZiAtIGdldCB0aGUgbmV4dCB1c2VkIGJ1ZmZlcgo+ID4g LSAqIEB2cTogdGhlIHN0cnVjdCB2aXJ0cXVldWUgd2UncmUgdGFsa2luZyBhYm91dC4KPiA+IC0g KiBAbGVuOiB0aGUgbGVuZ3RoIHdyaXR0ZW4gaW50byB0aGUgYnVmZmVyCj4gPiAtICoKPiA+IC0g KiBJZiB0aGUgZGV2aWNlIHdyb3RlIGRhdGEgaW50byB0aGUgYnVmZmVyLCBAbGVuIHdpbGwgYmUg c2V0IHRvIHRoZQo+ID4gLSAqIGFtb3VudCB3cml0dGVuLiAgVGhpcyBtZWFucyB5b3UgZG9uJ3Qg bmVlZCB0byBjbGVhciB0aGUgYnVmZmVyCj4gPiAtICogYmVmb3JlaGFuZCB0byBlbnN1cmUgdGhl cmUncyBubyBkYXRhIGxlYWthZ2UgaW4gdGhlIGNhc2Ugb2Ygc2hvcnQKPiA+IC0gKiB3cml0ZXMu Cj4gPiAtICoKPiA+IC0gKiBDYWxsZXIgbXVzdCBlbnN1cmUgd2UgZG9uJ3QgY2FsbCB0aGlzIHdp dGggb3RoZXIgdmlydHF1ZXVlCj4gPiAtICogb3BlcmF0aW9ucyBhdCB0aGUgc2FtZSB0aW1lIChl eGNlcHQgd2hlcmUgbm90ZWQpLgo+ID4gLSAqCj4gPiAtICogUmV0dXJucyBOVUxMIGlmIHRoZXJl IGFyZSBubyB1c2VkIGJ1ZmZlcnMsIG9yIHRoZSAiZGF0YSIgdG9rZW4KPiA+IC0gKiBoYW5kZWQg dG8gdmlydHF1ZXVlX2FkZF8qKCkuCj4gPiAtICovCj4gPiAtdm9pZCAqdmlydHF1ZXVlX2dldF9i dWZfY3R4KHN0cnVjdCB2aXJ0cXVldWUgKl92cSwgdW5zaWduZWQgaW50ICpsZW4sCj4gPiAtCQkJ ICAgIHZvaWQgKipjdHgpCj4gPiArc3RhdGljIGlubGluZSBib29sIG1vcmVfdXNlZF9wYWNrZWQo Y29uc3Qgc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEpCj4gPiArewo+ID4gKwl1MTYgbGFzdF91 c2VkLCBmbGFnczsKPiA+ICsJYm9vbCBhdmFpbCwgdXNlZDsKPiA+ICsKPiA+ICsJaWYgKHZxLT52 cS5udW1fZnJlZSA9PSB2cS0+dnJpbmcubnVtKQo+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gKwo+ ID4gKwlsYXN0X3VzZWQgPSB2cS0+bGFzdF91c2VkX2lkeDsKPiA+ICsJZmxhZ3MgPSB2aXJ0aW8x Nl90b19jcHUodnEtPnZxLnZkZXYsCj4gPiArCQkJCXZxLT52cmluZ19wYWNrZWQuZGVzY1tsYXN0 X3VzZWRdLmZsYWdzKTsKPiA+ICsJYXZhaWwgPSBmbGFncyAmIFZSSU5HX0RFU0NfRl9BVkFJTCgx KTsKPiA+ICsJdXNlZCA9IGZsYWdzICYgVlJJTkdfREVTQ19GX1VTRUQoMSk7Cj4gPiArCj4gPiAr CXJldHVybiBhdmFpbCA9PSB1c2VkOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIGJv b2wgbW9yZV91c2VkKGNvbnN0IHN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxKQo+ID4gK3sKPiA+ ICsJcmV0dXJuIHZxLT5wYWNrZWQgPyBtb3JlX3VzZWRfcGFja2VkKHZxKSA6IG1vcmVfdXNlZF9z cGxpdCh2cSk7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgKnZpcnRxdWV1ZV9nZXRfYnVmX2N0eF9z cGxpdChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEsIHVuc2lnbmVkIGludCAqbGVuLAo+ID4gKwkJCQkg IHZvaWQgKipjdHgpCj4gPiAgIHsKPiA+ICAgCXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0g dG9fdnZxKF92cSk7Cj4gPiAgIAl2b2lkICpyZXQ7Cj4gPiBAQCAtNzM1LDkgKzEwNzksOSBAQCB2 b2lkICp2aXJ0cXVldWVfZ2V0X2J1Zl9jdHgoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxLCB1bnNpZ25l ZCBpbnQgKmxlbiwKPiA+ICAgCQlyZXR1cm4gTlVMTDsKPiA+ICAgCX0KPiA+IC0JLyogZGV0YWNo X2J1ZiBjbGVhcnMgZGF0YSwgc28gZ3JhYiBpdCBub3cuICovCj4gPiArCS8qIGRldGFjaF9idWZf c3BsaXQgY2xlYXJzIGRhdGEsIHNvIGdyYWIgaXQgbm93LiAqLwo+ID4gICAJcmV0ID0gdnEtPmRl c2Nfc3RhdGVbaV0uZGF0YTsKPiA+IC0JZGV0YWNoX2J1Zih2cSwgaSwgY3R4KTsKPiA+ICsJZGV0 YWNoX2J1Zl9zcGxpdCh2cSwgaSwgY3R4KTsKPiA+ICAgCXZxLT5sYXN0X3VzZWRfaWR4Kys7Cj4g PiAgIAkvKiBJZiB3ZSBleHBlY3QgYW4gaW50ZXJydXB0IGZvciB0aGUgbmV4dCBlbnRyeSwgdGVs bCBob3N0Cj4gPiAgIAkgKiBieSB3cml0aW5nIGV2ZW50IGluZGV4IGFuZCBmbHVzaCBvdXQgdGhl IHdyaXRlIGJlZm9yZQo+ID4gQEAgLTc1NCw2ICsxMDk4LDg3IEBAIHZvaWQgKnZpcnRxdWV1ZV9n ZXRfYnVmX2N0eChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEsIHVuc2lnbmVkIGludCAqbGVuLAo+ID4g ICAJRU5EX1VTRSh2cSk7Cj4gPiAgIAlyZXR1cm4gcmV0Owo+ID4gICB9Cj4gPiArCj4gPiArdm9p ZCAqdmlydHF1ZXVlX2dldF9idWZfY3R4X3BhY2tlZChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEsIHVu c2lnbmVkIGludCAqbGVuLAo+ID4gKwkJCQkgICB2b2lkICoqY3R4KQo+ID4gK3sKPiA+ICsJc3Ry dWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEgPSB0b192dnEoX3ZxKTsKPiA+ICsJdm9pZCAqcmV0Owo+ ID4gKwl1bnNpZ25lZCBpbnQgaTsKPiA+ICsJdTE2IGxhc3RfdXNlZDsKPiA+ICsKPiA+ICsJU1RB UlRfVVNFKHZxKTsKPiA+ICsKPiA+ICsJaWYgKHVubGlrZWx5KHZxLT5icm9rZW4pKSB7Cj4gPiAr CQlFTkRfVVNFKHZxKTsKPiA+ICsJCXJldHVybiBOVUxMOwo+ID4gKwl9Cj4gPiArCj4gPiArCWlm ICghbW9yZV91c2VkKHZxKSkgewo+ID4gKwkJcHJfZGVidWcoIk5vIG1vcmUgYnVmZmVycyBpbiBx dWV1ZVxuIik7Cj4gPiArCQlFTkRfVVNFKHZxKTsKPiA+ICsJCXJldHVybiBOVUxMOwo+ID4gKwl9 Cj4gPiArCj4gPiArCS8qIE9ubHkgZ2V0IHVzZWQgYXJyYXkgZW50cmllcyBhZnRlciB0aGV5IGhh dmUgYmVlbiBleHBvc2VkIGJ5IGhvc3QuICovCj4gPiArCXZpcnRpb19ybWIodnEtPndlYWtfYmFy cmllcnMpOwo+ID4gKwo+ID4gKwlsYXN0X3VzZWQgPSB2cS0+bGFzdF91c2VkX2lkeDsKPiA+ICsK PiA+ICsJaSA9IHZpcnRpbzMyX3RvX2NwdShfdnEtPnZkZXYsIHZxLT52cmluZ19wYWNrZWQuZGVz Y1tsYXN0X3VzZWRdLmlkKTsKPiA+ICsJKmxlbiA9IHZpcnRpbzMyX3RvX2NwdShfdnEtPnZkZXYs IHZxLT52cmluZ19wYWNrZWQuZGVzY1tsYXN0X3VzZWRdLmxlbik7Cj4gPiArCj4gPiArCWlmICh1 bmxpa2VseShpID49IHZxLT52cmluZ19wYWNrZWQubnVtKSkgewo+ID4gKwkJQkFEX1JJTkcodnEs ICJpZCAldSBvdXQgb2YgcmFuZ2VcbiIsIGkpOwo+ID4gKwkJcmV0dXJuIE5VTEw7Cj4gPiArCX0K PiA+ICsJaWYgKHVubGlrZWx5KCF2cS0+ZGVzY19zdGF0ZVtpXS5kYXRhKSkgewo+ID4gKwkJQkFE X1JJTkcodnEsICJpZCAldSBpcyBub3QgYSBoZWFkIVxuIiwgaSk7Cj4gPiArCQlyZXR1cm4gTlVM TDsKPiA+ICsJfQo+ID4gKwo+ID4gKwkvKiBkZXRhY2hfYnVmX3BhY2tlZCBjbGVhcnMgZGF0YSwg c28gZ3JhYiBpdCBub3cuICovCj4gPiArCXJldCA9IHZxLT5kZXNjX3N0YXRlW2ldLmRhdGE7Cj4g PiArCWRldGFjaF9idWZfcGFja2VkKHZxLCBpLCBjdHgpOwo+ID4gKwo+ID4gKwl2cS0+bGFzdF91 c2VkX2lkeCArPSB2cS0+ZGVzY19zdGF0ZVtpXS5udW07Cj4gPiArCWlmICh2cS0+bGFzdF91c2Vk X2lkeCA+PSB2cS0+dnJpbmdfcGFja2VkLm51bSkKPiA+ICsJCXZxLT5sYXN0X3VzZWRfaWR4ICU9 IHZxLT52cmluZ19wYWNrZWQubnVtOwo+IAo+ICctPScgc2hvdWxkIGJlIHN1ZmZpY2llbnQgaGVy ZT8KCkdvb2Qgc3VnZ2VzdGlvbi4gSSB0aGluayBzby4KCj4gCj4gPiArCj4gPiArCS8vIEZJWE1F OiBpbXBsZW1lbnQgdGhlIGRlc2MgZXZlbnQgc3VwcG9ydAo+ID4gKwo+ID4gKyNpZmRlZiBERUJV Rwo+ID4gKwl2cS0+bGFzdF9hZGRfdGltZV92YWxpZCA9IGZhbHNlOwo+ID4gKyNlbmRpZgo+ID4g Kwo+ID4gKwlFTkRfVVNFKHZxKTsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiAr LyoqCj4gPiArICogdmlydHF1ZXVlX2dldF9idWYgLSBnZXQgdGhlIG5leHQgdXNlZCBidWZmZXIK PiA+ICsgKiBAdnE6IHRoZSBzdHJ1Y3QgdmlydHF1ZXVlIHdlJ3JlIHRhbGtpbmcgYWJvdXQuCj4g PiArICogQGxlbjogdGhlIGxlbmd0aCB3cml0dGVuIGludG8gdGhlIGJ1ZmZlcgo+ID4gKyAqCj4g PiArICogSWYgdGhlIGRldmljZSB3cm90ZSBkYXRhIGludG8gdGhlIGJ1ZmZlciwgQGxlbiB3aWxs IGJlIHNldCB0byB0aGUKPiA+ICsgKiBhbW91bnQgd3JpdHRlbi4gIFRoaXMgbWVhbnMgeW91IGRv bid0IG5lZWQgdG8gY2xlYXIgdGhlIGJ1ZmZlcgo+ID4gKyAqIGJlZm9yZWhhbmQgdG8gZW5zdXJl IHRoZXJlJ3Mgbm8gZGF0YSBsZWFrYWdlIGluIHRoZSBjYXNlIG9mIHNob3J0Cj4gPiArICogd3Jp dGVzLgo+ID4gKyAqCj4gPiArICogQ2FsbGVyIG11c3QgZW5zdXJlIHdlIGRvbid0IGNhbGwgdGhp cyB3aXRoIG90aGVyIHZpcnRxdWV1ZQo+ID4gKyAqIG9wZXJhdGlvbnMgYXQgdGhlIHNhbWUgdGlt ZSAoZXhjZXB0IHdoZXJlIG5vdGVkKS4KPiA+ICsgKgo+ID4gKyAqIFJldHVybnMgTlVMTCBpZiB0 aGVyZSBhcmUgbm8gdXNlZCBidWZmZXJzLCBvciB0aGUgImRhdGEiIHRva2VuCj4gPiArICogaGFu ZGVkIHRvIHZpcnRxdWV1ZV9hZGRfKigpLgo+ID4gKyAqLwo+ID4gK3ZvaWQgKnZpcnRxdWV1ZV9n ZXRfYnVmX2N0eChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEsIHVuc2lnbmVkIGludCAqbGVuLAo+ID4g KwkJCSAgICB2b2lkICoqY3R4KQo+ID4gK3sKPiA+ICsJc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAq dnEgPSB0b192dnEoX3ZxKTsKPiA+ICsKPiA+ICsJcmV0dXJuIHZxLT5wYWNrZWQgPyB2aXJ0cXVl dWVfZ2V0X2J1Zl9jdHhfcGFja2VkKF92cSwgbGVuLCBjdHgpIDoKPiA+ICsJCQkgICAgdmlydHF1 ZXVlX2dldF9idWZfY3R4X3NwbGl0KF92cSwgbGVuLCBjdHgpOwo+ID4gK30KPiA+ICAgRVhQT1JU X1NZTUJPTF9HUEwodmlydHF1ZXVlX2dldF9idWZfY3R4KTsKPiA+ICAgdm9pZCAqdmlydHF1ZXVl X2dldF9idWYoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxLCB1bnNpZ25lZCBpbnQgKmxlbikKPiA+IEBA IC03NjEsNiArMTE4NiwyNCBAQCB2b2lkICp2aXJ0cXVldWVfZ2V0X2J1ZihzdHJ1Y3QgdmlydHF1 ZXVlICpfdnEsIHVuc2lnbmVkIGludCAqbGVuKQo+ID4gICAJcmV0dXJuIHZpcnRxdWV1ZV9nZXRf YnVmX2N0eChfdnEsIGxlbiwgTlVMTCk7Cj4gPiAgIH0KPiA+ICAgRVhQT1JUX1NZTUJPTF9HUEwo dmlydHF1ZXVlX2dldF9idWYpOwo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHZpcnRxdWV1ZV9kaXNh YmxlX2NiX3NwbGl0KHN0cnVjdCB2aXJ0cXVldWUgKl92cSkKPiA+ICt7Cj4gPiArCXN0cnVjdCB2 cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZxKF92cSk7Cj4gPiArCj4gPiArCWlmICghKHZxLT5h dmFpbF9mbGFnc19zaGFkb3cgJiBWUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVCkpIHsKPiA+ICsJ CXZxLT5hdmFpbF9mbGFnc19zaGFkb3cgfD0gVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQ7Cj4g PiArCQlpZiAoIXZxLT5ldmVudCkKPiA+ICsJCQl2cS0+dnJpbmcuYXZhaWwtPmZsYWdzID0gY3B1 X3RvX3ZpcnRpbzE2KF92cS0+dmRldiwKPiA+ICsJCQkJCQkJdnEtPmF2YWlsX2ZsYWdzX3NoYWRv dyk7Cj4gPiArCX0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgdmlydHF1ZXVlX2Rpc2Fi bGVfY2JfcGFja2VkKHN0cnVjdCB2aXJ0cXVldWUgKl92cSkKPiA+ICt7Cj4gPiArCS8vIEZJWE1F OiB0byBiZSBpbXBsZW1lbnRlZAo+ID4gK30KPiA+ICsKPiA+ICAgLyoqCj4gPiAgICAqIHZpcnRx dWV1ZV9kaXNhYmxlX2NiIC0gZGlzYWJsZSBjYWxsYmFja3MKPiA+ICAgICogQHZxOiB0aGUgc3Ry dWN0IHZpcnRxdWV1ZSB3ZSdyZSB0YWxraW5nIGFib3V0Lgo+ID4gQEAgLTc3NCwxMiArMTIxNywx MCBAQCB2b2lkIHZpcnRxdWV1ZV9kaXNhYmxlX2NiKHN0cnVjdCB2aXJ0cXVldWUgKl92cSkKPiA+ ICAgewo+ID4gICAJc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEgPSB0b192dnEoX3ZxKTsKPiA+ IC0JaWYgKCEodnEtPmF2YWlsX2ZsYWdzX3NoYWRvdyAmIFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJS VVBUKSkgewo+ID4gLQkJdnEtPmF2YWlsX2ZsYWdzX3NoYWRvdyB8PSBWUklOR19BVkFJTF9GX05P X0lOVEVSUlVQVDsKPiA+IC0JCWlmICghdnEtPmV2ZW50KQo+ID4gLQkJCXZxLT52cmluZy5hdmFp bC0+ZmxhZ3MgPSBjcHVfdG9fdmlydGlvMTYoX3ZxLT52ZGV2LCB2cS0+YXZhaWxfZmxhZ3Nfc2hh ZG93KTsKPiA+IC0JfQo+ID4gLQo+ID4gKwlpZiAodnEtPnBhY2tlZCkKPiA+ICsJCXZpcnRxdWV1 ZV9kaXNhYmxlX2NiX3BhY2tlZChfdnEpOwo+ID4gKwllbHNlCj4gPiArCQl2aXJ0cXVldWVfZGlz YWJsZV9jYl9zcGxpdChfdnEpOwo+ID4gICB9Cj4gPiAgIEVYUE9SVF9TWU1CT0xfR1BMKHZpcnRx dWV1ZV9kaXNhYmxlX2NiKTsKPiA+IEBAIC04MDIsNiArMTI0MywxMiBAQCB1bnNpZ25lZCB2aXJ0 cXVldWVfZW5hYmxlX2NiX3ByZXBhcmUoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxKQo+ID4gICAJU1RB UlRfVVNFKHZxKTsKPiA+ICsJaWYgKHZxLT5wYWNrZWQpIHsKPiA+ICsJCS8vIEZJWE1FOiB0byBi ZSBpbXBsZW1lbnRlZAo+ID4gKwkJbGFzdF91c2VkX2lkeCA9IHZxLT5sYXN0X3VzZWRfaWR4Owo+ ID4gKwkJZ290byBvdXQ7Cj4gPiArCX0KPiA+ICsKPiA+ICAgCS8qIFdlIG9wdGltaXN0aWNhbGx5 IHR1cm4gYmFjayBvbiBpbnRlcnJ1cHRzLCB0aGVuIGNoZWNrIGlmIHRoZXJlIHdhcwo+ID4gICAJ ICogbW9yZSB0byBkby4gKi8KPiA+ICAgCS8qIERlcGVuZGluZyBvbiB0aGUgVklSVElPX1JJTkdf Rl9FVkVOVF9JRFggZmVhdHVyZSwgd2UgbmVlZCB0bwo+ID4gQEAgLTgxMyw2ICsxMjYwLDcgQEAg dW5zaWduZWQgdmlydHF1ZXVlX2VuYWJsZV9jYl9wcmVwYXJlKHN0cnVjdCB2aXJ0cXVldWUgKl92 cSkKPiA+ICAgCQkJdnEtPnZyaW5nLmF2YWlsLT5mbGFncyA9IGNwdV90b192aXJ0aW8xNihfdnEt PnZkZXYsIHZxLT5hdmFpbF9mbGFnc19zaGFkb3cpOwo+ID4gICAJfQo+ID4gICAJdnJpbmdfdXNl ZF9ldmVudCgmdnEtPnZyaW5nKSA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIGxhc3RfdXNl ZF9pZHggPSB2cS0+bGFzdF91c2VkX2lkeCk7Cj4gPiArb3V0Ogo+ID4gICAJRU5EX1VTRSh2cSk7 Cj4gPiAgIAlyZXR1cm4gbGFzdF91c2VkX2lkeDsKPiA+ICAgfQo+ID4gQEAgLTgzMiw2ICsxMjgw LDEyIEBAIGJvb2wgdmlydHF1ZXVlX3BvbGwoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxLCB1bnNpZ25l ZCBsYXN0X3VzZWRfaWR4KQo+ID4gICAJc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEgPSB0b192 dnEoX3ZxKTsKPiA+ICAgCXZpcnRpb19tYih2cS0+d2Vha19iYXJyaWVycyk7Cj4gPiArCWlmICh2 cS0+cGFja2VkKSB7Cj4gPiArCQl1MTYgZmxhZ3MgPSB2aXJ0aW8xNl90b19jcHUodnEtPnZxLnZk ZXYsCj4gPiArCQkJCXZxLT52cmluZ19wYWNrZWQuZGVzY1tsYXN0X3VzZWRfaWR4XS5mbGFncyk7 Cj4gPiArCQlyZXR1cm4gIShmbGFncyAmIFZSSU5HX0RFU0NfRl9BVkFJTCgxKSkgPT0KPiA+ICsJ CSAgICAgICAhKGZsYWdzICYgVlJJTkdfREVTQ19GX1VTRUQoMSkpOwo+ID4gKwl9Cj4gPiAgIAly ZXR1cm4gKHUxNilsYXN0X3VzZWRfaWR4ICE9IHZpcnRpbzE2X3RvX2NwdShfdnEtPnZkZXYsIHZx LT52cmluZy51c2VkLT5pZHgpOwo+ID4gICB9Cj4gPiAgIEVYUE9SVF9TWU1CT0xfR1BMKHZpcnRx dWV1ZV9wb2xsKTsKPiA+IEBAIC04NzQsNiArMTMyOCwxMSBAQCBib29sIHZpcnRxdWV1ZV9lbmFi bGVfY2JfZGVsYXllZChzdHJ1Y3QgdmlydHF1ZXVlICpfdnEpCj4gPiAgIAlTVEFSVF9VU0UodnEp Owo+ID4gKwlpZiAodnEtPnBhY2tlZCkgewo+ID4gKwkJLy8gRklYTUU6IHRvIGJlIGltcGxlbWVu dGVkCj4gPiArCQlnb3RvIG91dDsKPiA+ICsJfQo+ID4gKwo+ID4gICAJLyogV2Ugb3B0aW1pc3Rp Y2FsbHkgdHVybiBiYWNrIG9uIGludGVycnVwdHMsIHRoZW4gY2hlY2sgaWYgdGhlcmUgd2FzCj4g PiAgIAkgKiBtb3JlIHRvIGRvLiAqLwo+ID4gICAJLyogRGVwZW5kaW5nIG9uIHRoZSBWSVJUSU9f UklOR19GX1VTRURfRVZFTlRfSURYIGZlYXR1cmUsIHdlIG5lZWQgdG8KPiA+IEBAIC04OTYsNiAr MTM1NSw3IEBAIGJvb2wgdmlydHF1ZXVlX2VuYWJsZV9jYl9kZWxheWVkKHN0cnVjdCB2aXJ0cXVl dWUgKl92cSkKPiA+ICAgCQlyZXR1cm4gZmFsc2U7Cj4gPiAgIAl9Cj4gPiArb3V0Ogo+ID4gICAJ RU5EX1VTRSh2cSk7Cj4gPiAgIAlyZXR1cm4gdHJ1ZTsKPiA+ICAgfQo+ID4gQEAgLTkyMiwxNCAr MTM4MiwyMCBAQCB2b2lkICp2aXJ0cXVldWVfZGV0YWNoX3VudXNlZF9idWYoc3RydWN0IHZpcnRx dWV1ZSAqX3ZxKQo+ID4gICAJCQljb250aW51ZTsKPiA+ICAgCQkvKiBkZXRhY2hfYnVmIGNsZWFy cyBkYXRhLCBzbyBncmFiIGl0IG5vdy4gKi8KPiA+ICAgCQlidWYgPSB2cS0+ZGVzY19zdGF0ZVtp XS5kYXRhOwo+ID4gLQkJZGV0YWNoX2J1Zih2cSwgaSwgTlVMTCk7Cj4gPiAtCQl2cS0+YXZhaWxf aWR4X3NoYWRvdy0tOwo+ID4gLQkJdnEtPnZyaW5nLmF2YWlsLT5pZHggPSBjcHVfdG9fdmlydGlv MTYoX3ZxLT52ZGV2LCB2cS0+YXZhaWxfaWR4X3NoYWRvdyk7Cj4gPiArCQlpZiAodnEtPnBhY2tl ZCkKPiA+ICsJCQlkZXRhY2hfYnVmX3BhY2tlZCh2cSwgaSwgTlVMTCk7Cj4gPiArCQllbHNlIHsK PiA+ICsJCQlkZXRhY2hfYnVmX3NwbGl0KHZxLCBpLCBOVUxMKTsKPiA+ICsJCQl2cS0+YXZhaWxf aWR4X3NoYWRvdy0tOwo+ID4gKwkJCXZxLT52cmluZy5hdmFpbC0+aWR4ID0gY3B1X3RvX3ZpcnRp bzE2KF92cS0+dmRldiwKPiA+ICsJCQkJCQkJdnEtPmF2YWlsX2lkeF9zaGFkb3cpOwo+ID4gKwkJ fQo+ID4gICAJCUVORF9VU0UodnEpOwo+ID4gICAJCXJldHVybiBidWY7Cj4gPiAgIAl9Cj4gPiAg IAkvKiBUaGF0IHNob3VsZCBoYXZlIGZyZWVkIGV2ZXJ5dGhpbmcuICovCj4gPiAtCUJVR19PTih2 cS0+dnEubnVtX2ZyZWUgIT0gdnEtPnZyaW5nLm51bSk7Cj4gPiArCUJVR19PTih2cS0+dnEubnVt X2ZyZWUgIT0gKHZxLT5wYWNrZWQgPyB2cS0+dnJpbmdfcGFja2VkLm51bSA6Cj4gPiArCQkJCQkJ dnEtPnZyaW5nLm51bSkpOwo+ID4gICAJRU5EX1VTRSh2cSk7Cj4gPiAgIAlyZXR1cm4gTlVMTDsK PiA+IEBAIC05NTcsNyArMTQyMyw4IEBAIGlycXJldHVybl90IHZyaW5nX2ludGVycnVwdChpbnQg aXJxLCB2b2lkICpfdnEpCj4gPiAgIEVYUE9SVF9TWU1CT0xfR1BMKHZyaW5nX2ludGVycnVwdCk7 Cj4gPiAgIHN0cnVjdCB2aXJ0cXVldWUgKl9fdnJpbmdfbmV3X3ZpcnRxdWV1ZSh1bnNpZ25lZCBp bnQgaW5kZXgsCj4gPiAtCQkJCQlzdHJ1Y3QgdnJpbmcgdnJpbmcsCj4gPiArCQkJCQl1bmlvbiB2 cmluZ191bmlvbiB2cmluZywKPiA+ICsJCQkJCWJvb2wgcGFja2VkLAo+ID4gICAJCQkJCXN0cnVj dCB2aXJ0aW9fZGV2aWNlICp2ZGV2LAo+ID4gICAJCQkJCWJvb2wgd2Vha19iYXJyaWVycywKPiA+ ICAgCQkJCQlib29sIGNvbnRleHQsCj4gPiBAQCAtOTY1LDE5ICsxNDMyLDIwIEBAIHN0cnVjdCB2 aXJ0cXVldWUgKl9fdnJpbmdfbmV3X3ZpcnRxdWV1ZSh1bnNpZ25lZCBpbnQgaW5kZXgsCj4gPiAg IAkJCQkJdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgdmlydHF1ZXVlICopLAo+ID4gICAJCQkJCWNv bnN0IGNoYXIgKm5hbWUpCj4gPiAgIHsKPiA+IC0JdW5zaWduZWQgaW50IGk7Cj4gPiArCXVuc2ln bmVkIGludCBudW0sIGk7Cj4gPiAgIAlzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cTsKPiA+IC0J dnEgPSBrbWFsbG9jKHNpemVvZigqdnEpICsgdnJpbmcubnVtICogc2l6ZW9mKHN0cnVjdCB2cmlu Z19kZXNjX3N0YXRlKSwKPiA+ICsJbnVtID0gcGFja2VkID8gdnJpbmcudnJpbmdfcGFja2VkLm51 bSA6IHZyaW5nLnZyaW5nX3NwbGl0Lm51bTsKPiA+ICsKPiA+ICsJdnEgPSBrbWFsbG9jKHNpemVv ZigqdnEpICsgbnVtICogc2l6ZW9mKHN0cnVjdCB2cmluZ19kZXNjX3N0YXRlKSwKPiA+ICAgCQkg ICAgIEdGUF9LRVJORUwpOwo+ID4gICAJaWYgKCF2cSkKPiA+ICAgCQlyZXR1cm4gTlVMTDsKPiA+ IC0JdnEtPnZyaW5nID0gdnJpbmc7Cj4gPiAgIAl2cS0+dnEuY2FsbGJhY2sgPSBjYWxsYmFjazsK PiA+ICAgCXZxLT52cS52ZGV2ID0gdmRldjsKPiA+ICAgCXZxLT52cS5uYW1lID0gbmFtZTsKPiA+ IC0JdnEtPnZxLm51bV9mcmVlID0gdnJpbmcubnVtOwo+ID4gKwl2cS0+dnEubnVtX2ZyZWUgPSBu dW07Cj4gPiAgIAl2cS0+dnEuaW5kZXggPSBpbmRleDsKPiA+ICAgCXZxLT53ZV9vd25fcmluZyA9 IGZhbHNlOwo+ID4gICAJdnEtPnF1ZXVlX2RtYV9hZGRyID0gMDsKPiA+IEBAIC05ODYsOSArMTQ1 NCw4IEBAIHN0cnVjdCB2aXJ0cXVldWUgKl9fdnJpbmdfbmV3X3ZpcnRxdWV1ZSh1bnNpZ25lZCBp bnQgaW5kZXgsCj4gPiAgIAl2cS0+d2Vha19iYXJyaWVycyA9IHdlYWtfYmFycmllcnM7Cj4gPiAg IAl2cS0+YnJva2VuID0gZmFsc2U7Cj4gPiAgIAl2cS0+bGFzdF91c2VkX2lkeCA9IDA7Cj4gPiAt CXZxLT5hdmFpbF9mbGFnc19zaGFkb3cgPSAwOwo+ID4gLQl2cS0+YXZhaWxfaWR4X3NoYWRvdyA9 IDA7Cj4gPiAgIAl2cS0+bnVtX2FkZGVkID0gMDsKPiA+ICsJdnEtPnBhY2tlZCA9IHBhY2tlZDsK PiA+ICAgCWxpc3RfYWRkX3RhaWwoJnZxLT52cS5saXN0LCAmdmRldi0+dnFzKTsKPiA+ICAgI2lm ZGVmIERFQlVHCj4gPiAgIAl2cS0+aW5fdXNlID0gZmFsc2U7Cj4gPiBAQCAtOTk5LDE4ICsxNDY2 LDQxIEBAIHN0cnVjdCB2aXJ0cXVldWUgKl9fdnJpbmdfbmV3X3ZpcnRxdWV1ZSh1bnNpZ25lZCBp bnQgaW5kZXgsCj4gPiAgIAkJIWNvbnRleHQ7Cj4gPiAgIAl2cS0+ZXZlbnQgPSB2aXJ0aW9faGFz X2ZlYXR1cmUodmRldiwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpOwo+ID4gKwlpZiAodnEtPnBh Y2tlZCkgewo+ID4gKwkJdnEtPnZyaW5nX3BhY2tlZCA9IHZyaW5nLnZyaW5nX3BhY2tlZDsKPiA+ ICsJCXZxLT5mcmVlX2hlYWQgPSAwOwo+ID4gKwkJdnEtPndyYXBfY291bnRlciA9IDE7Cj4gPiAr Cj4gPiArI2lmIDAKPiA+ICsJCXZxLT5jaGFpbmluZyA9IHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2 LAo+ID4gKwkJCQkJCSAgVklSVElPX1JJTkdfRl9MSVNUX0RFU0MpOwo+ID4gKyNlbHNlCj4gPiAr CQl2cS0+Y2hhaW5pbmcgPSB0cnVlOwo+IAo+IExvb2tzIGxpa2UgaW4gVjEwIHRoZXJlJ3Mgbm8g Rl9MSVNUX0RFU0MuCgpZZXMuIEkga2VwdCB0aGlzIGluIHRoaXMgcGF0Y2gganVzdCBiZWNhdXNl IHRoZQpkZXNjIGNoYWluaW5nIGlzIG9wdGlvbmFsIGluIHRoZSBvbGQgc3BlYyBkcmFmdAp3aGVu IHNlbmRpbmcgb3V0IHRoaXMgcGF0Y2ggc2V0LiBJJ2xsIHJlbW92ZSBpdAppbiBuZXh0IHZlcnNp b24uCgo+IAo+ID4gKyNlbmRpZgo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJdnEtPnZyaW5nID0gdnJp bmcudnJpbmdfc3BsaXQ7Cj4gPiArCQl2cS0+YXZhaWxfZmxhZ3Nfc2hhZG93ID0gMDsKPiA+ICsJ CXZxLT5hdmFpbF9pZHhfc2hhZG93ID0gMDsKPiA+ICsKPiA+ICsJCS8qIFB1dCBldmVyeXRoaW5n IGluIGZyZWUgbGlzdHMuICovCj4gPiArCQl2cS0+ZnJlZV9oZWFkID0gMDsKPiA+ICsJCWZvciAo aSA9IDA7IGkgPCBudW0tMTsgaSsrKQo+ID4gKwkJCXZxLT52cmluZy5kZXNjW2ldLm5leHQgPSBj cHVfdG9fdmlydGlvMTYodmRldiwgaSArIDEpOwo+ID4gKwl9Cj4gPiArCj4gPiAgIAkvKiBObyBj YWxsYmFjaz8gIFRlbGwgb3RoZXIgc2lkZSBub3QgdG8gYm90aGVyIHVzLiAqLwo+ID4gICAJaWYg KCFjYWxsYmFjaykgewo+ID4gLQkJdnEtPmF2YWlsX2ZsYWdzX3NoYWRvdyB8PSBWUklOR19BVkFJ TF9GX05PX0lOVEVSUlVQVDsKPiA+IC0JCWlmICghdnEtPmV2ZW50KQo+ID4gLQkJCXZxLT52cmlu Zy5hdmFpbC0+ZmxhZ3MgPSBjcHVfdG9fdmlydGlvMTYodmRldiwgdnEtPmF2YWlsX2ZsYWdzX3No YWRvdyk7Cj4gPiArCQlpZiAocGFja2VkKSB7Cj4gPiArCQkJLy8gRklYTUU6IHRvIGJlIGltcGxl bWVudGVkCj4gPiArCQl9IGVsc2Ugewo+ID4gKwkJCXZxLT5hdmFpbF9mbGFnc19zaGFkb3cgfD0g VlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQ7Cj4gPiArCQkJaWYgKCF2cS0+ZXZlbnQpCj4gPiAr CQkJCXZxLT52cmluZy5hdmFpbC0+ZmxhZ3MgPSBjcHVfdG9fdmlydGlvMTYodmRldiwKPiA+ICsJ CQkJCQl2cS0+YXZhaWxfZmxhZ3Nfc2hhZG93KTsKPiA+ICsJCX0KPiA+ICAgCX0KPiA+IC0JLyog UHV0IGV2ZXJ5dGhpbmcgaW4gZnJlZSBsaXN0cy4gKi8KPiA+IC0JdnEtPmZyZWVfaGVhZCA9IDA7 Cj4gPiAtCWZvciAoaSA9IDA7IGkgPCB2cmluZy5udW0tMTsgaSsrKQo+ID4gLQkJdnEtPnZyaW5n LmRlc2NbaV0ubmV4dCA9IGNwdV90b192aXJ0aW8xNih2ZGV2LCBpICsgMSk7Cj4gPiAtCW1lbXNl dCh2cS0+ZGVzY19zdGF0ZSwgMCwgdnJpbmcubnVtICogc2l6ZW9mKHN0cnVjdCB2cmluZ19kZXNj X3N0YXRlKSk7Cj4gPiArCW1lbXNldCh2cS0+ZGVzY19zdGF0ZSwgMCwgbnVtICogc2l6ZW9mKHN0 cnVjdCB2cmluZ19kZXNjX3N0YXRlKSk7Cj4gPiAgIAlyZXR1cm4gJnZxLT52cTsKPiA+ICAgfQo+ ID4gQEAgLTEwNTgsNiArMTU0OCwxNCBAQCBzdGF0aWMgdm9pZCB2cmluZ19mcmVlX3F1ZXVlKHN0 cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LCBzaXplX3Qgc2l6ZSwKPiA+ICAgCX0KPiA+ICAgfQo+ ID4gK3N0YXRpYyBpbmxpbmUgaW50Cj4gPiArX192cmluZ19zaXplKHVuc2lnbmVkIGludCBudW0s IHVuc2lnbmVkIGxvbmcgYWxpZ24sIGJvb2wgcGFja2VkKQo+ID4gK3sKPiA+ICsJaWYgKHBhY2tl ZCkKPiA+ICsJCXJldHVybiB2cmluZ19wYWNrZWRfc2l6ZShudW0sIGFsaWduKTsKPiA+ICsJcmV0 dXJuIHZyaW5nX3NpemUobnVtLCBhbGlnbik7Cj4gPiArfQo+ID4gKwo+ID4gICBzdHJ1Y3Qgdmly dHF1ZXVlICp2cmluZ19jcmVhdGVfdmlydHF1ZXVlKAo+ID4gICAJdW5zaWduZWQgaW50IGluZGV4 LAo+ID4gICAJdW5zaWduZWQgaW50IG51bSwKPiA+IEBAIC0xMDc0LDcgKzE1NzIsOCBAQCBzdHJ1 Y3QgdmlydHF1ZXVlICp2cmluZ19jcmVhdGVfdmlydHF1ZXVlKAo+ID4gICAJdm9pZCAqcXVldWUg PSBOVUxMOwo+ID4gICAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKPiA+ICAgCXNpemVfdCBxdWV1ZV9z aXplX2luX2J5dGVzOwo+ID4gLQlzdHJ1Y3QgdnJpbmcgdnJpbmc7Cj4gPiArCXVuaW9uIHZyaW5n X3VuaW9uIHZyaW5nOwo+ID4gKwlib29sIHBhY2tlZDsKPiA+ICAgCS8qIFdlIGFzc3VtZSBudW0g aXMgYSBwb3dlciBvZiAyLiAqLwo+ID4gICAJaWYgKG51bSAmIChudW0gLSAxKSkgewo+ID4gQEAg LTEwODIsOSArMTU4MSwxMyBAQCBzdHJ1Y3QgdmlydHF1ZXVlICp2cmluZ19jcmVhdGVfdmlydHF1 ZXVlKAo+ID4gICAJCXJldHVybiBOVUxMOwo+ID4gICAJfQo+ID4gKwlwYWNrZWQgPSB2aXJ0aW9f aGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0ZfUklOR19QQUNLRUQpOwo+ID4gKwo+ID4gICAJLyog VE9ETzogYWxsb2NhdGUgZWFjaCBxdWV1ZSBjaHVuayBpbmRpdmlkdWFsbHkgKi8KPiA+IC0JZm9y ICg7IG51bSAmJiB2cmluZ19zaXplKG51bSwgdnJpbmdfYWxpZ24pID4gUEFHRV9TSVpFOyBudW0g Lz0gMikgewo+ID4gLQkJcXVldWUgPSB2cmluZ19hbGxvY19xdWV1ZSh2ZGV2LCB2cmluZ19zaXpl KG51bSwgdnJpbmdfYWxpZ24pLAo+ID4gKwlmb3IgKDsgbnVtICYmIF9fdnJpbmdfc2l6ZShudW0s IHZyaW5nX2FsaWduLCBwYWNrZWQpID4gUEFHRV9TSVpFOwo+ID4gKwkJCW51bSAvPSAyKSB7Cj4g PiArCQlxdWV1ZSA9IHZyaW5nX2FsbG9jX3F1ZXVlKHZkZXYsIF9fdnJpbmdfc2l6ZShudW0sIHZy aW5nX2FsaWduLAo+ID4gKwkJCQkJCQkgICAgIHBhY2tlZCksCj4gPiAgIAkJCQkJICAmZG1hX2Fk ZHIsCj4gPiAgIAkJCQkJICBHRlBfS0VSTkVMfF9fR0ZQX05PV0FSTnxfX0dGUF9aRVJPKTsKPiA+ ICAgCQlpZiAocXVldWUpCj4gPiBAQCAtMTA5NiwxNyArMTU5OSwyMSBAQCBzdHJ1Y3QgdmlydHF1 ZXVlICp2cmluZ19jcmVhdGVfdmlydHF1ZXVlKAo+ID4gICAJaWYgKCFxdWV1ZSkgewo+ID4gICAJ CS8qIFRyeSB0byBnZXQgYSBzaW5nbGUgcGFnZS4gWW91IGFyZSBteSBvbmx5IGhvcGUhICovCj4g PiAtCQlxdWV1ZSA9IHZyaW5nX2FsbG9jX3F1ZXVlKHZkZXYsIHZyaW5nX3NpemUobnVtLCB2cmlu Z19hbGlnbiksCj4gPiArCQlxdWV1ZSA9IHZyaW5nX2FsbG9jX3F1ZXVlKHZkZXYsIF9fdnJpbmdf c2l6ZShudW0sIHZyaW5nX2FsaWduLAo+ID4gKwkJCQkJCQkgICAgIHBhY2tlZCksCj4gPiAgIAkJ CQkJICAmZG1hX2FkZHIsIEdGUF9LRVJORUx8X19HRlBfWkVSTyk7Cj4gPiAgIAl9Cj4gPiAgIAlp ZiAoIXF1ZXVlKQo+ID4gICAJCXJldHVybiBOVUxMOwo+ID4gLQlxdWV1ZV9zaXplX2luX2J5dGVz ID0gdnJpbmdfc2l6ZShudW0sIHZyaW5nX2FsaWduKTsKPiA+IC0JdnJpbmdfaW5pdCgmdnJpbmcs IG51bSwgcXVldWUsIHZyaW5nX2FsaWduKTsKPiA+ICsJcXVldWVfc2l6ZV9pbl9ieXRlcyA9IF9f dnJpbmdfc2l6ZShudW0sIHZyaW5nX2FsaWduLCBwYWNrZWQpOwo+ID4gKwlpZiAocGFja2VkKQo+ ID4gKwkJdnJpbmdfcGFja2VkX2luaXQoJnZyaW5nLnZyaW5nX3BhY2tlZCwgbnVtLCBxdWV1ZSwg dnJpbmdfYWxpZ24pOwo+ID4gKwllbHNlCj4gPiArCQl2cmluZ19pbml0KCZ2cmluZy52cmluZ19z cGxpdCwgbnVtLCBxdWV1ZSwgdnJpbmdfYWxpZ24pOwo+IAo+IExldCdzIHJlbmFtZSB2cmluZ19p bml0IHRvIHZyaW5nX2luaXRfc3BsaXQoKSBsaWtlIG90aGVyIGhlbHBlcnM/CgpUaGUgdnJpbmdf aW5pdCgpIGlzIGEgcHVibGljIEFQSSBpbiBpbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX3Jpbmcu aC4KSSBkb24ndCB0aGluayB3ZSBjYW4gcmVuYW1lIGl0LgoKPiAKPiA+IC0JdnEgPSBfX3ZyaW5n X25ld192aXJ0cXVldWUoaW5kZXgsIHZyaW5nLCB2ZGV2LCB3ZWFrX2JhcnJpZXJzLCBjb250ZXh0 LAo+ID4gLQkJCQkgICBub3RpZnksIGNhbGxiYWNrLCBuYW1lKTsKPiA+ICsJdnEgPSBfX3ZyaW5n X25ld192aXJ0cXVldWUoaW5kZXgsIHZyaW5nLCBwYWNrZWQsIHZkZXYsIHdlYWtfYmFycmllcnMs Cj4gPiArCQkJCSAgIGNvbnRleHQsIG5vdGlmeSwgY2FsbGJhY2ssIG5hbWUpOwo+ID4gICAJaWYg KCF2cSkgewo+ID4gICAJCXZyaW5nX2ZyZWVfcXVldWUodmRldiwgcXVldWVfc2l6ZV9pbl9ieXRl cywgcXVldWUsCj4gPiAgIAkJCQkgZG1hX2FkZHIpOwo+ID4gQEAgLTExMzIsMTAgKzE2MzksMTcg QEAgc3RydWN0IHZpcnRxdWV1ZSAqdnJpbmdfbmV3X3ZpcnRxdWV1ZSh1bnNpZ25lZCBpbnQgaW5k ZXgsCj4gPiAgIAkJCQkgICAgICB2b2lkICgqY2FsbGJhY2spKHN0cnVjdCB2aXJ0cXVldWUgKnZx KSwKPiA+ICAgCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCj4gPiAgIHsKPiA+IC0Jc3RydWN0 IHZyaW5nIHZyaW5nOwo+ID4gLQl2cmluZ19pbml0KCZ2cmluZywgbnVtLCBwYWdlcywgdnJpbmdf YWxpZ24pOwo+ID4gLQlyZXR1cm4gX192cmluZ19uZXdfdmlydHF1ZXVlKGluZGV4LCB2cmluZywg dmRldiwgd2Vha19iYXJyaWVycywgY29udGV4dCwKPiA+IC0JCQkJICAgICBub3RpZnksIGNhbGxi YWNrLCBuYW1lKTsKPiA+ICsJdW5pb24gdnJpbmdfdW5pb24gdnJpbmc7Cj4gPiArCWJvb2wgcGFj a2VkOwo+ID4gKwo+ID4gKwlwYWNrZWQgPSB2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElP X0ZfUklOR19QQUNLRUQpOwo+ID4gKwlpZiAocGFja2VkKQo+ID4gKwkJdnJpbmdfcGFja2VkX2lu aXQoJnZyaW5nLnZyaW5nX3BhY2tlZCwgbnVtLCBwYWdlcywgdnJpbmdfYWxpZ24pOwo+ID4gKwll bHNlCj4gPiArCQl2cmluZ19pbml0KCZ2cmluZy52cmluZ19zcGxpdCwgbnVtLCBwYWdlcywgdnJp bmdfYWxpZ24pOwo+ID4gKwo+ID4gKwlyZXR1cm4gX192cmluZ19uZXdfdmlydHF1ZXVlKGluZGV4 LCB2cmluZywgcGFja2VkLCB2ZGV2LCB3ZWFrX2JhcnJpZXJzLAo+ID4gKwkJCQkgICAgIGNvbnRl eHQsIG5vdGlmeSwgY2FsbGJhY2ssIG5hbWUpOwo+ID4gICB9Cj4gPiAgIEVYUE9SVF9TWU1CT0xf R1BMKHZyaW5nX25ld192aXJ0cXVldWUpOwo+ID4gQEAgLTExNDUsNyArMTY1OSw5IEBAIHZvaWQg dnJpbmdfZGVsX3ZpcnRxdWV1ZShzdHJ1Y3QgdmlydHF1ZXVlICpfdnEpCj4gPiAgIAlpZiAodnEt PndlX293bl9yaW5nKSB7Cj4gPiAgIAkJdnJpbmdfZnJlZV9xdWV1ZSh2cS0+dnEudmRldiwgdnEt PnF1ZXVlX3NpemVfaW5fYnl0ZXMsCj4gPiAtCQkJCSB2cS0+dnJpbmcuZGVzYywgdnEtPnF1ZXVl X2RtYV9hZGRyKTsKPiA+ICsJCQkJIHZxLT5wYWNrZWQgPyAodm9pZCAqKXZxLT52cmluZ19wYWNr ZWQuZGVzYyA6Cj4gPiArCQkJCQkgICAgICAodm9pZCAqKXZxLT52cmluZy5kZXNjLAo+ID4gKwkJ CQkgdnEtPnF1ZXVlX2RtYV9hZGRyKTsKPiA+ICAgCX0KPiA+ICAgCWxpc3RfZGVsKCZfdnEtPmxp c3QpOwo+ID4gICAJa2ZyZWUodnEpOwo+ID4gQEAgLTExNTksMTQgKzE2NzUsMTggQEAgdm9pZCB2 cmluZ190cmFuc3BvcnRfZmVhdHVyZXMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCj4gPiAg IAlmb3IgKGkgPSBWSVJUSU9fVFJBTlNQT1JUX0ZfU1RBUlQ7IGkgPCBWSVJUSU9fVFJBTlNQT1JU X0ZfRU5EOyBpKyspIHsKPiA+ICAgCQlzd2l0Y2ggKGkpIHsKPiA+ICsjaWYgMCAvLyBGSVhNRTog dG8gYmUgaW1wbGVtZW50ZWQKPiA+ICAgCQljYXNlIFZJUlRJT19SSU5HX0ZfSU5ESVJFQ1RfREVT QzoKPiA+ICAgCQkJYnJlYWs7Cj4gPiArI2VuZGlmCj4gPiAgIAkJY2FzZSBWSVJUSU9fUklOR19G X0VWRU5UX0lEWDoKPiA+ICAgCQkJYnJlYWs7Cj4gPiAgIAkJY2FzZSBWSVJUSU9fRl9WRVJTSU9O XzE6Cj4gPiAgIAkJCWJyZWFrOwo+ID4gICAJCWNhc2UgVklSVElPX0ZfSU9NTVVfUExBVEZPUk06 Cj4gPiAgIAkJCWJyZWFrOwo+ID4gKwkJY2FzZSBWSVJUSU9fRl9SSU5HX1BBQ0tFRDoKPiA+ICsJ CQlicmVhazsKPiA+ICAgCQlkZWZhdWx0Ogo+ID4gICAJCQkvKiBXZSBkb24ndCB1bmRlcnN0YW5k IHRoaXMgYml0LiAqLwo+ID4gICAJCQlfX3ZpcnRpb19jbGVhcl9iaXQodmRldiwgaSk7Cj4gPiBA QCAtMTE4Nyw3ICsxNzA3LDcgQEAgdW5zaWduZWQgaW50IHZpcnRxdWV1ZV9nZXRfdnJpbmdfc2l6 ZShzdHJ1Y3QgdmlydHF1ZXVlICpfdnEpCj4gPiAgIAlzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2 cSA9IHRvX3Z2cShfdnEpOwo+ID4gLQlyZXR1cm4gdnEtPnZyaW5nLm51bTsKPiA+ICsJcmV0dXJu IHZxLT5wYWNrZWQgPyB2cS0+dnJpbmdfcGFja2VkLm51bSA6IHZxLT52cmluZy5udW07Cj4gPiAg IH0KPiA+ICAgRVhQT1JUX1NZTUJPTF9HUEwodmlydHF1ZXVlX2dldF92cmluZ19zaXplKTsKPiA+ IEBAIC0xMjI0LDYgKzE3NDQsNyBAQCBkbWFfYWRkcl90IHZpcnRxdWV1ZV9nZXRfZGVzY19hZGRy KHN0cnVjdCB2aXJ0cXVldWUgKl92cSkKPiA+ICAgfQo+ID4gICBFWFBPUlRfU1lNQk9MX0dQTCh2 aXJ0cXVldWVfZ2V0X2Rlc2NfYWRkcik7Cj4gPiArLyogT25seSBhdmFpbGFibGUgZm9yIHNwbGl0 IHJpbmcgKi8KPiAKPiBJbnRlcmVzdGluZywgSSB0aGluayB3ZSBuZWVkIHRoaXMgZm9yIGNvcnJl Y3RseSBjb25maWd1cmUgcGNpLiBlLmcgaW4KPiBzZXR1cF92cSgpPwoKWWVzLiBUaGUgc2V0dXBf dnEoKSBzaG91bGQgYmUgdXBkYXRlZC4gQnV0IGl0IHJlcXVpcmVzClFFTVUgY2hhbmdlLCBzbyBJ IGp1c3Qga2VwdCBpdCBhcyBpcyBpbiB0aGlzIFJGQyBwYXRjaC4KCj4gCj4gPiAgIGRtYV9hZGRy X3QgdmlydHF1ZXVlX2dldF9hdmFpbF9hZGRyKHN0cnVjdCB2aXJ0cXVldWUgKl92cSkKPiA+ICAg ewo+ID4gICAJc3RydWN0IHZyaW5nX3ZpcnRxdWV1ZSAqdnEgPSB0b192dnEoX3ZxKTsKPiA+IEBA IC0xMjM1LDYgKzE3NTYsNyBAQCBkbWFfYWRkcl90IHZpcnRxdWV1ZV9nZXRfYXZhaWxfYWRkcihz dHJ1Y3QgdmlydHF1ZXVlICpfdnEpCj4gPiAgIH0KPiA+ICAgRVhQT1JUX1NZTUJPTF9HUEwodmly dHF1ZXVlX2dldF9hdmFpbF9hZGRyKTsKPiA+ICsvKiBPbmx5IGF2YWlsYWJsZSBmb3Igc3BsaXQg cmluZyAqLwo+ID4gICBkbWFfYWRkcl90IHZpcnRxdWV1ZV9nZXRfdXNlZF9hZGRyKHN0cnVjdCB2 aXJ0cXVldWUgKl92cSkKPiAKPiBNYXliZSBpdCdzIGJldHRlciB0byByZW5hbWUgdGhpcyB0byBn ZXRfZGV2aWNlX2FkZHIoKS4KCkl0J3MgYSBrZXJuZWwgQVBJIHdoaWNoIGhhcyBiZWVuIGV4cG9y dGVkIGJ5IEVYUE9SVF9TWU1CT0xfR1BMKCksCkknbSBub3Qgc3VyZSB3aGV0aGVyIGl0J3MgYSBn b29kIGlkZWEgdG8gcmVuYW1lIGl0LgoKQmVzdCByZWdhcmRzLApUaXdlaSBCaWUKCj4gCj4gVGhh bmtzCj4gCj4gPiAgIHsKPiA+ICAgCXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZx KF92cSk7Cj4gPiBAQCAtMTI0Niw2ICsxNzY4LDcgQEAgZG1hX2FkZHJfdCB2aXJ0cXVldWVfZ2V0 X3VzZWRfYWRkcihzdHJ1Y3QgdmlydHF1ZXVlICpfdnEpCj4gPiAgIH0KPiA+ICAgRVhQT1JUX1NZ TUJPTF9HUEwodmlydHF1ZXVlX2dldF91c2VkX2FkZHIpOwo+ID4gKy8qIE9ubHkgYXZhaWxhYmxl IGZvciBzcGxpdCByaW5nICovCj4gPiAgIGNvbnN0IHN0cnVjdCB2cmluZyAqdmlydHF1ZXVlX2dl dF92cmluZyhzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKPiA+ICAgewo+ID4gICAJcmV0dXJuICZ0b192 dnEodnEpLT52cmluZzsKPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19yaW5n LmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19yaW5nLmgKPiA+IGluZGV4IGJiZjMyNTI0YWIyNy4u YTAwNzU4OTRhZDE2IDEwMDY0NAo+ID4gLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fcmluZy5o Cj4gPiArKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19yaW5nLmgKPiA+IEBAIC02MCw2ICs2MCwx MSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmlydGlvX3N0b3JlX21iKGJvb2wgd2Vha19iYXJyaWVy cywKPiA+ICAgc3RydWN0IHZpcnRpb19kZXZpY2U7Cj4gPiAgIHN0cnVjdCB2aXJ0cXVldWU7Cj4g PiArdW5pb24gdnJpbmdfdW5pb24gewo+ID4gKwlzdHJ1Y3QgdnJpbmcgdnJpbmdfc3BsaXQ7Cj4g PiArCXN0cnVjdCB2cmluZ19wYWNrZWQgdnJpbmdfcGFja2VkOwo+ID4gK307Cj4gPiArCj4gPiAg IC8qCj4gPiAgICAqIENyZWF0ZXMgYSB2aXJ0cXVldWUgYW5kIGFsbG9jYXRlcyB0aGUgZGVzY3Jp cHRvciByaW5nLiAgSWYKPiA+ICAgICogbWF5X3JlZHVjZV9udW0gaXMgc2V0LCB0aGVuIHRoaXMg bWF5IGFsbG9jYXRlIGEgc21hbGxlciByaW5nIHRoYW4KPiA+IEBAIC03OSw3ICs4NCw4IEBAIHN0 cnVjdCB2aXJ0cXVldWUgKnZyaW5nX2NyZWF0ZV92aXJ0cXVldWUodW5zaWduZWQgaW50IGluZGV4 LAo+ID4gICAvKiBDcmVhdGVzIGEgdmlydHF1ZXVlIHdpdGggYSBjdXN0b20gbGF5b3V0LiAqLwo+ ID4gICBzdHJ1Y3QgdmlydHF1ZXVlICpfX3ZyaW5nX25ld192aXJ0cXVldWUodW5zaWduZWQgaW50 IGluZGV4LAo+ID4gLQkJCQkJc3RydWN0IHZyaW5nIHZyaW5nLAo+ID4gKwkJCQkJdW5pb24gdnJp bmdfdW5pb24gdnJpbmcsCj4gPiArCQkJCQlib29sIHBhY2tlZCwKPiA+ICAgCQkJCQlzdHJ1Y3Qg dmlydGlvX2RldmljZSAqdmRldiwKPiA+ICAgCQkJCQlib29sIHdlYWtfYmFycmllcnMsCj4gPiAg IAkJCQkJYm9vbCBjdHgsCj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0 cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcv bWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==