From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v3 2/5] drm/dp_mst: Start tracking per-port VCPI allocations Date: Wed, 7 Nov 2018 22:59:39 +0100 Message-ID: <20181107215939.GA21967@phenom.ffwll.local> References: <20181107012116.17332-1-lyude@redhat.com> <20181107012116.17332-3-lyude@redhat.com> <20181107205930.GY21967@phenom.ffwll.local> <9c305aef6e30926b45e41ebdc5ae1c40b6089bd7.camel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Lyude Paul Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Daniel Vetter List-Id: nouveau.vger.kernel.org T24gV2VkLCBOb3YgMDcsIDIwMTggYXQgMDQ6Mzk6NTdQTSAtMDUwMCwgTHl1ZGUgUGF1bCB3cm90 ZToKPiBPbiBXZWQsIDIwMTgtMTEtMDcgYXQgMTY6MjMgLTA1MDAsIEx5dWRlIFBhdWwgd3JvdGU6 Cj4gPiBPbiBXZWQsIDIwMTgtMTEtMDcgYXQgMjE6NTkgKzAxMDAsIERhbmllbCBWZXR0ZXIgd3Jv dGU6Cj4gPiA+IE9uIFR1ZSwgTm92IDA2LCAyMDE4IGF0IDA4OjIxOjE0UE0gLTA1MDAsIEx5dWRl IFBhdWwgd3JvdGU6Cj4gPiA+ID4gVGhlcmUgaGFzIGJlZW4gYSBUT0RPIHdhaXRpbmcgZm9yIHF1 aXRlIGEgbG9uZyB0aW1lIGluCj4gPiA+ID4gZHJtX2RwX21zdF90b3BvbG9neS5jOgo+ID4gPiA+ IAo+ID4gPiA+IAkvKiBXZSBjYW5ub3QgcmVseSBvbiBwb3J0LT52Y3BpLm51bV9zbG90cyB0byB1 cGRhdGUKPiA+ID4gPiAJICogdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzIGFzIHRoZSBwb3J0 IG1heSBub3QgZXhpc3QgaWYgdGhlIHBhcmVudAo+ID4gPiA+IAkgKiBicmFuY2ggZGV2aWNlIHdh cyB1bnBsdWdnZWQuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGJ5IHRyYWNraW5nCj4gPiA+ID4gCSAq IHBlci1wb3J0IHNsb3QgYWxsb2NhdGlvbiBpbiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlIGlu c3RlYWQgb2YKPiA+ID4gPiAJICogZGVwZW5kaW5nIG9uIHRoZSBjYWxsZXIgdG8gdGVsbCB1cyBo b3cgbWFueSBzbG90cyB0byByZWxlYXNlLgo+ID4gPiA+IAkgKi8KPiA+ID4gPiAKPiA+ID4gPiBU aGF0J3Mgbm90IHRoZSBvbmx5IHJlYXNvbiB3ZSBzaG91bGQgZml4IHRoaXM6IGZvcmNpbmcgdGhl IGRyaXZlciB0bwo+ID4gPiA+IHRyYWNrIHRoZSBWQ1BJIGFsbG9jYXRpb25zIHRocm91Z2hvdXQg YSBzdGF0ZSdzIGF0b21pYyBjaGVjayBpcwo+ID4gPiA+IGVycm9yIHByb25lLCBiZWNhdXNlIGl0 IG1lYW5zIHRoYXQgZXh0cmEgY2FyZSBoYXMgdG8gYmUgdGFrZW4gd2l0aCB0aGUKPiA+ID4gPiBv cmRlciB0aGF0IGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkgYW5kCj4gPiA+ID4gZHJt X2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSBhcmUgY2FsbGVkIGluIGluIG9yZGVyIHRv IGVuc3VyZQo+ID4gPiA+IGlkZW1wb3RlbmN5LiBDdXJyZW50bHkgdGhlIG9ubHkgZHJpdmVyIGFj dHVhbGx5IHVzaW5nIHRoZXNlIGhlbHBlcnMsCj4gPiA+ID4gaTkxNSwgZG9lc24ndCBldmVuIGRv IHRoaXMgY29ycmVjdGx5OiBtdWx0aXBsZSAtPmJlc3RfZW5jb2RlcigpIGNoZWNrcwo+ID4gPiA+ IHdpdGggaTkxNSdzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gd291bGQgbm90IGJlIGlkZW1wb3Rl bnQgYW5kIHdvdWxkCj4gPiA+ID4gb3Zlci1hbGxvY2F0ZSBWQ1BJIHNsb3RzLCBzb21ldGhpbmcg SSBsZWFybmVkIHRyeWluZyB0byBpbXBsZW1lbnQKPiA+ID4gPiBmYWxsYmFjayByZXRyYWluaW5n IGluIE1TVC4KPiA+ID4gPiAKPiA+ID4gPiBTbzogc2ltcGxpZnkgdGhpcyB3aG9sZSBtZXNzLCBh bmQgdGVhY2ggZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKQo+ID4gPiA+IGFuZCBkcm1f ZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIHRvIHRyYWNrIHRoZSBWQ1BJIGFsbG9jYXRp b25zIGZvcgo+ID4gPiA+IGVhY2ggcG9ydC4gVGhpcyBhbGxvd3MgdXMgdG8gZW5zdXJlIGlkZW1w b3RlbmN5IHdpdGhvdXQgaGF2aW5nIHRvIHJlbHkKPiA+ID4gPiBvbiB0aGUgZHJpdmVyIGFzIG11 Y2guIEFkZGl0aW9uYWxseTogdGhlIGRyaXZlciBkb2Vzbid0IG5lZWQgdG8gZG8gYW55Cj4gPiA+ ID4ga2luZCBvZiBWQ1BJIHNsb3QgdHJhY2tpbmcgYW55bW9yZSBpZiBpdCBkb2Vzbid0IG5lZWQg aXQgZm9yIGl0J3Mgb3duCj4gPiA+ID4gaW50ZXJuYWwgc3RhdGUuCj4gPiA+ID4gCj4gPiA+ID4g QWRkaXRpb25hbGx5OyB0aGlzIGFkZHMgYSBuZXcgZHJtX2RwX21zdF9hdG9taWNfY2hlY2soKSBo ZWxwZXIgd2hpY2gKPiA+ID4gPiBtdXN0IGJlIHVzZWQgYnkgYXRvbWljIGRyaXZlcnMgdG8gcGVy Zm9ybSB2YWxpZGl0eSBjaGVja3MgZm9yIHRoZSBuZXcKPiA+ID4gPiBWQ1BJIGFsbG9jYXRpb25z IGluY3VycmVkIGJ5IGEgc3RhdGUuCj4gPiA+ID4gCj4gPiA+ID4gQWxzbzogdXBkYXRlIHRoZSBk b2N1bWVudGF0aW9uIGFuZCBtYWtlIGl0IG1vcmUgb2J2aW91cyB0aGF0IHRoZXNlCj4gPiA+ID4g L211c3QvIGJlIGNhbGxlZCBieSAvYWxsLyBhdG9taWMgZHJpdmVycyBzdXBwb3J0aW5nIE1TVC4K PiA+ID4gPiAKPiA+ID4gPiBDaGFuZ2VzIHNpbmNlIHYyOgo+ID4gPiA+ICAtIFVzZSBrbWVtZHVw KCkgZm9yIGR1cGxpY2F0aW5nIE1TVCBzdGF0ZSAtIGRhbnZldAo+ID4gPiA+ICAtIE1vdmUgcG9y dCB2YWxpZGF0aW9uIG91dCBvZiBkdXBsaWNhdGUgc3RhdGUgY2FsbGJhY2sgLSBkYW52ZXQKPiA+ ID4gPiAgLSBIYW5kbGUgbG9vcGluZyB0aHJvdWdoIE1TVCB0b3BvbG9neSBzdGF0ZXMgaW4KPiA+ ID4gPiAgICBkcm1fZHBfbXN0X2F0b21pY19jaGVjaygpIHNvIHRoZSBkcml2ZXIgZG9lc24ndCBo YXZlIHRvIGRvIGl0Cj4gPiA+ID4gIC0gRml4IGRvY3VtZW50YXRpb24gaW4gZHJtX2RwX2F0b21p Y19maW5kX3ZjcGlfc2xvdHMoKQo+ID4gPiA+ICAtIE1vdmUgdGhlIGF0b21pYyBjaGVjayBmb3Ig ZWFjaCBpbmRpdmlkdWFsIHRvcG9sb2d5IHN0YXRlIGludG8gaXQncwo+ID4gPiA+ICAgIG93biBm dW5jdGlvbiwgcmVkdWNlcyBpbmRlbnRpbmcKPiA+ID4gPiAgLSBEb24ndCBjb25zaWRlciAic3Rh bGUiIE1TVCBwb3J0cyB3aGVuIGNhbGN1bGF0aW5nIHRoZSBiYW5kd2lkdGgKPiA+ID4gPiAgICBy ZXF1aXJlbWVudHMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugb3JpZ2luYWxseSB3ZSByZWxpZWQg b24gdGhlCj4gPiA+ID4gICAgc3RhdGUgZHVwbGljYXRpb24gZnVuY3Rpb25zIHRvIHBydW5lIGFu eSBzdGFsZSBwb3J0cyBmcm9tIHRoZSBuZXcKPiA+ID4gPiAgICBzdGF0ZSwgd2hpY2ggd291bGQg cHJldmVudCB1cyBmcm9tIGluY29ycmVjdGx5IGNvbnNpZGVyaW5nIHRoZWlyCj4gPiA+ID4gICAg YmFuZHdpZHRoIHJlcXVpcmVtZW50cyBhbG9uZ3NpZGUgbGVnaXRpbWF0ZSBuZXcgcGF5bG9hZHMu Cj4gPiA+ID4gIC0gQWRkIGZ1bmN0aW9uIHJlZmVyZW5jZXMgaW4gZHJtX2RwX2F0b21pY19yZWxl YXNlX3ZjcGlfc2xvdHMoKSAtCj4gPiA+ID4gZGFudmV0Cj4gPiA+ID4gIC0gQW5ub3RhdGUgYXRv bWljIFZDUEkgYW5kIGF0b21pYyBjaGVjayBmdW5jdGlvbnMgd2l0aCBfX211c3RfY2hlY2sKPiA+ ID4gPiAgICAtIGRhbnZldAo+ID4gPiA+IAo+ID4gPiA+IENoYW5nZXMgc2luY2UgdjE6Cj4gPiA+ ID4gIC0gRG9uJ3QgdXNlIHRoZSBub3ctcmVtb3ZlZCAtPmF0b21pY19jaGVjaygpIGZvciBwcml2 YXRlIG9iamVjdHMgaG9vaywKPiA+ID4gPiAgICBqdXN0IGdpdmUgZHJpdmVycyBhIGZ1bmN0aW9u IHRvIGNhbGwgdGhlbXNlbHZlcwo+ID4gPiA+IAo+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IEx5dWRl IFBhdWwgPGx5dWRlQHJlZGhhdC5jb20+Cj4gPiA+ID4gQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmll bC52ZXR0ZXJAZmZ3bGwuY2g+Cj4gPiA+ID4gLS0tCj4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9k cm1fZHBfbXN0X3RvcG9sb2d5LmMgfCAyMjIgKysrKysrKysrKysrKysrKysrKysrKy0tLS0KPiA+ ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jICB8ICAgNCArCj4gPiA+ ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX21zdC5jICAgfCAgMzEgKystLQo+ID4g PiA+ICBpbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oICAgICAgIHwgIDIzICsrLQo+ID4g PiA+ICA0IGZpbGVzIGNoYW5nZWQsIDIyNSBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMoLSkK PiA+ID4gPiAKPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3Rf dG9wb2xvZ3kuYwo+ID4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3ku Ywo+ID4gPiA+IGluZGV4IDhjM2NmYWM0MzdmNC4uNzQ4MjNhZmIyNjJlIDEwMDY0NAo+ID4gPiA+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKPiA+ID4gPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCj4gPiA+ID4gQEAgLTI2MTQs MjEgKzI2MTQsMzQgQEAgc3RhdGljIGludCBkcm1fZHBfaW5pdF92Y3BpKHN0cnVjdAo+ID4gPiA+ IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ID4gIH0KPiA+ID4gPiAgCj4gPiA+ ID4gIC8qKgo+ID4gPiA+IC0gKiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpIC0gRmlu ZCBhbmQgYWRkIHZjcGkgc2xvdHMgdG8gdGhlCj4gPiA+ID4gc3RhdGUKPiA+ID4gPiArICogZHJt X2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKSAtIEZpbmQgYW5kIGFkZCBWQ1BJIHNsb3RzIHRv IHRoZQo+ID4gPiA+IHN0YXRlCj4gPiA+ID4gICAqIEBzdGF0ZTogZ2xvYmFsIGF0b21pYyBzdGF0 ZQo+ID4gPiA+ICAgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciBmb3IgdGhlIHBvcnQKPiA+ ID4gPiAgICogQHBvcnQ6IHBvcnQgdG8gZmluZCB2Y3BpIHNsb3RzIGZvcgo+ID4gPiA+ICAgKiBA cGJuOiBiYW5kd2lkdGggcmVxdWlyZWQgZm9yIHRoZSBtb2RlIGluIFBCTgo+ID4gPiA+ICAgKgo+ ID4gPiA+IC0gKiBSRVRVUk5TOgo+ID4gPiA+IC0gKiBUb3RhbCBzbG90cyBpbiB0aGUgYXRvbWlj IHN0YXRlIGFzc2lnbmVkIGZvciB0aGlzIHBvcnQgb3IgZXJyb3IKPiA+ID4gPiArICogQWxsb2Nh dGVzIFZDUEkgc2xvdHMgdG8gQHBvcnQsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMgVkNQSQo+ID4g PiA+IGFsbG9jYXRpb25zCj4gPiA+ID4gaXQKPiA+ID4gPiArICogbWF5IGhhdmUgaGFkLiBBbnkg YXRvbWljIGRyaXZlcnMgd2hpY2ggc3VwcG9ydCBNU1QgbXVzdCBjYWxsIHRoaXMKPiA+ID4gPiBm dW5jdGlvbgo+ID4gPiA+ICsgKiBpbiB0aGVpciAmZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzLmF0 b21pY19jaGVjaygpIGNhbGxiYWNrIHRvIGNoYW5nZQo+ID4gPiA+IHRoZQo+ID4gPiA+ICsgKiBj dXJyZW50IFZDUEkgYWxsb2NhdGlvbiBmb3IgdGhlIG5ldyBzdGF0ZS4gVGhlIGFsbG9jYXRpb25z IGFyZSBub3QKPiA+ID4gPiBjaGVja2VkCj4gPiA+ID4gKyAqIGFnYWluc3QgdGhlIGJhbmR3aWR0 aCByZXN0cmFpbnRzIG9mIEBtZ3IgdW50aWwgdGhlIGRyaXZlciBjYWxscwo+ID4gPiA+ICsgKiBk cm1fZHBfbXN0X2F0b21pY19jaGVjaygpLgo+ID4gPiA+ICsgKgo+ID4gPiA+ICsgKiBTZWUgYWxz bzoKPiA+ID4gPiArICogZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKQo+ID4gPiA+ ICsgKiBkcm1fZHBfbXN0X2F0b21pY19jaGVjaygpCj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAqIFJl dHVybnM6Cj4gPiA+ID4gKyAqIFRvdGFsIHNsb3RzIGluIHRoZSBhdG9taWMgc3RhdGUgYXNzaWdu ZWQgZm9yIHRoaXMgcG9ydCwgb3IgYQo+ID4gPiA+IG5lZ2F0aXZlCj4gPiA+ID4gZXJyb3IKPiA+ ID4gPiArICogY29kZSBpZiB0aGUgcG9ydCBubyBsb25nZXIgZXhpc3RzCj4gPiA+ID4gICAqLwo+ ID4gPiA+ICBpbnQgZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlLAo+ID4gPiA+ICAJCQkJICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9n eV9tZ3IgKm1nciwKPiA+ID4gPiAgCQkJCSAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwg aW50IHBibikKPiA+ID4gPiAgewo+ID4gPiA+ICAJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf c3RhdGUgKnRvcG9sb2d5X3N0YXRlOwo+ID4gPiA+IC0JaW50IHJlcV9zbG90czsKPiA+ID4gPiAr CXN0cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0aW9uICpwb3MsICp2Y3BpID0gTlVMTDsKPiA+ID4g PiArCWludCBwcmV2X3Nsb3RzLCByZXFfc2xvdHMsIHJldDsKPiA+ID4gPiAgCj4gPiA+ID4gIAl0 b3BvbG9neV9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSwg bWdyKTsKPiA+ID4gPiAgCWlmIChJU19FUlIodG9wb2xvZ3lfc3RhdGUpKQo+ID4gPiA+IEBAIC0y NjM3LDIwICsyNjUwLDQxIEBAIGludCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyhzdHJ1 Y3QKPiA+ID4gPiBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ID4gPiAgCXBvcnQgPSBkcm1f ZHBfZ2V0X3ZhbGlkYXRlZF9wb3J0X3JlZihtZ3IsIHBvcnQpOwo+ID4gPiA+ICAJaWYgKHBvcnQg PT0gTlVMTCkKPiA+ID4gPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiAtCXJlcV9zbG90cyA9 IERJVl9ST1VORF9VUChwYm4sIG1nci0+cGJuX2Rpdik7Cj4gPiA+ID4gLQlEUk1fREVCVUdfS01T KCJ2Y3BpIHNsb3RzIHJlcT0lZCwgYXZhaWw9JWRcbiIsCj4gPiA+ID4gLQkJCXJlcV9zbG90cywg dG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzKTsKPiA+ID4gPiAgCj4gPiA+ID4gLQlpZiAocmVx X3Nsb3RzID4gdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzKSB7Cj4gPiA+ID4gLQkJZHJtX2Rw X3B1dF9wb3J0KHBvcnQpOwo+ID4gPiA+IC0JCXJldHVybiAtRU5PU1BDOwo+ID4gPiA+ICsJLyog RmluZCB0aGUgY3VycmVudCBhbGxvY2F0aW9uIGZvciB0aGlzIHBvcnQsIGlmIGFueSAqLwo+ID4g PiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZ0b3BvbG9neV9zdGF0ZS0+dmNwaXMsIG5l eHQpIHsKPiA+ID4gPiArCQlpZiAocG9zLT5wb3J0ID09IHBvcnQpIHsKPiA+ID4gPiArCQkJdmNw aSA9IHBvczsKPiA+ID4gPiArCQkJcHJldl9zbG90cyA9IHZjcGktPnZjcGk7Cj4gPiA+ID4gKwkJ CWJyZWFrOwo+ID4gPiA+ICsJCX0KPiA+ID4gPiAgCX0KPiA+ID4gPiArCWlmICghdmNwaSkKPiA+ ID4gPiArCQlwcmV2X3Nsb3RzID0gMDsKPiA+ID4gPiArCj4gPiA+ID4gKwlyZXFfc2xvdHMgPSBE SVZfUk9VTkRfVVAocGJuLCBtZ3ItPnBibl9kaXYpOwo+ID4gPiA+ICAKPiA+ID4gPiAtCXRvcG9s b2d5X3N0YXRlLT5hdmFpbF9zbG90cyAtPSByZXFfc2xvdHM7Cj4gPiA+ID4gLQlEUk1fREVCVUdf S01TKCJ2Y3BpIHNsb3RzIGF2YWlsPSVkIiwgdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzKTsK PiA+ID4gPiArCURSTV9ERUJVR19LTVMoIltDT05ORUNUT1I6JWQ6JXNdIFtNU1QgUE9SVDolcF0g dmNwaSAlZCAtPiAlZFxuIiwKPiA+ID4gPiArCQkgICAgICBwb3J0LT5jb25uZWN0b3ItPmJhc2Uu aWQsIHBvcnQtPmNvbm5lY3Rvci0+bmFtZSwgcG9ydCwKPiA+ID4gPiArCQkgICAgICBwcmV2X3Ns b3RzLCByZXFfc2xvdHMpOwo+ID4gPiA+ICAKPiA+ID4gPiArCS8qIEFkZCB0aGUgbmV3IGFsbG9j YXRpb24gdG8gdGhlIHN0YXRlICovCj4gPiA+ID4gKwlpZiAoIXZjcGkpIHsKPiA+ID4gPiArCQl2 Y3BpID0ga3phbGxvYyhzaXplb2YoKnZjcGkpLCBHRlBfS0VSTkVMKTsKPiA+ID4gPiArCQlpZiAo IXZjcGkpIHsKPiA+ID4gPiArCQkJcmV0ID0gLUVOT01FTTsKPiA+ID4gPiArCQkJZ290byBvdXQ7 Cj4gPiA+ID4gKwkJfQo+ID4gPiA+ICsKPiA+ID4gPiArCQl2Y3BpLT5wb3J0ID0gcG9ydDsKPiA+ ID4gPiArCQlsaXN0X2FkZCgmdmNwaS0+bmV4dCwgJnRvcG9sb2d5X3N0YXRlLT52Y3Bpcyk7Cj4g PiA+ID4gKwl9Cj4gPiA+ID4gKwl2Y3BpLT52Y3BpID0gcmVxX3Nsb3RzOwo+ID4gPiA+ICsKPiA+ ID4gPiArCXJldCA9IHJlcV9zbG90czsKPiA+ID4gPiArb3V0Ogo+ID4gPiA+ICAJZHJtX2RwX3B1 dF9wb3J0KHBvcnQpOwo+ID4gPiA+IC0JcmV0dXJuIHJlcV9zbG90czsKPiA+ID4gPiArCXJldHVy biByZXQ7Cj4gPiA+ID4gIH0KPiA+ID4gPiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfYXRvbWljX2Zp bmRfdmNwaV9zbG90cyk7Cj4gPiA+ID4gIAo+ID4gPiA+IEBAIC0yNjU4LDMyICsyNjkyLDUwIEBA IEVYUE9SVF9TWU1CT0woZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMpOwo+ID4gPiA+ICAg KiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIC0gUmVsZWFzZSBhbGxvY2F0ZWQg dmNwaSBzbG90cwo+ID4gPiA+ICAgKiBAc3RhdGU6IGdsb2JhbCBhdG9taWMgc3RhdGUKPiA+ID4g PiAgICogQG1ncjogTVNUIHRvcG9sb2d5IG1hbmFnZXIgZm9yIHRoZSBwb3J0Cj4gPiA+ID4gLSAq IEBzbG90czogbnVtYmVyIG9mIHZjcGkgc2xvdHMgdG8gcmVsZWFzZQo+ID4gPiA+ICsgKiBAcG9y dDogVGhlIHBvcnQgdG8gcmVsZWFzZSB0aGUgVkNQSSBzbG90cyBmcm9tCj4gPiA+ID4gICAqCj4g PiA+ID4gLSAqIFJFVFVSTlM6Cj4gPiA+ID4gLSAqIDAgaWYgQHNsb3RzIHdlcmUgYWRkZWQgYmFj ayB0byAmZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZS0KPiA+ID4gYXZhaWxfc2xvdHMgCj4gPiA+ ID4gb3IKPiA+ID4gPiAtICogbmVnYXRpdmUgZXJyb3IgY29kZQo+ID4gPiA+ICsgKiBSZWxlYXNl cyBhbnkgVkNQSSBzbG90cyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgdG8gYSBwb3J0IGluIHRo ZQo+ID4gPiA+IGF0b21pYwo+ID4gPiA+ICsgKiBzdGF0ZS4gQW55IGF0b21pYyBkcml2ZXJzIHdo aWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uCj4gPiA+ID4gaW4KPiA+ID4g PiArICogdGhlaXIgJmRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzLmF0b21pY19jaGVjaygpIGNh bGxiYWNrIHdoZW4gdGhlCj4gPiA+ID4gKyAqIGNvbm5lY3RvciB3aWxsIG5vIGxvbmdlciBoYXZl IFZDUEkgYWxsb2NhdGVkIChlLmcuIGJlY2F1c2UgaXQncyBDUlRDCj4gPiA+ID4gd2FzCj4gPiA+ ID4gKyAqIHJlbW92ZWQpLgo+ID4gPiA+ICsgKgo+ID4gPiA+ICsgKiBJdCBpcyBPSyB0byBjYWxs IHRoaXMgZXZlbiBpZiBAcG9ydCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlCj4gPiA+ID4gc3lz dGVtLAo+ID4gPiA+IGluCj4gPiA+ID4gKyAqIHdoaWNoIGNhc2UgaXQgd2lsbCBqdXN0IGFtb3Vu dCB0byBhIG5vLW9wLgo+ID4gPiA+ICsgKgo+ID4gPiA+ICsgKiBTZWUgYWxzbzoKPiA+ID4gPiAr ICogZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKQo+ID4gPiA+ICsgKiBkcm1fZHBfbXN0 X2F0b21pY19jaGVjaygpCj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAqIFJldHVybnM6Cj4gPiA+ID4g KyAqIDAgaWYgYWxsIHNsb3RzIGZvciB0aGlzIHBvcnQgd2VyZSBhZGRlZCBiYWNrIHRvCj4gPiA+ ID4gKyAqICZkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlLmF2YWlsX3Nsb3RzIG9yIG5lZ2F0aXZl IGVycm9yIGNvZGUKPiA+ID4gPiAgICovCj4gPiA+ID4gIGludCBkcm1fZHBfYXRvbWljX3JlbGVh c2VfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiA+ID4gIAkJ CQkgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gPiA+IC0JCQkJ ICAgICBpbnQgc2xvdHMpCj4gPiA+ID4gKwkJCQkgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQg KnBvcnQpCj4gPiA+ID4gIHsKPiA+ID4gPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0 YXRlICp0b3BvbG9neV9zdGF0ZTsKPiA+ID4gPiArCXN0cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0 aW9uICp0bXAsICpwb3M7Cj4gPiA+ID4gIAo+ID4gPiA+ICAJdG9wb2xvZ3lfc3RhdGUgPSBkcm1f YXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUoc3RhdGUsIG1ncik7Cj4gPiA+ID4gIAlpZiAo SVNfRVJSKHRvcG9sb2d5X3N0YXRlKSkKPiA+ID4gPiAgCQlyZXR1cm4gUFRSX0VSUih0b3BvbG9n eV9zdGF0ZSk7Cj4gPiA+ID4gIAo+ID4gPiA+IC0JLyogV2UgY2Fubm90IHJlbHkgb24gcG9ydC0+ dmNwaS5udW1fc2xvdHMgdG8gdXBkYXRlCj4gPiA+ID4gLQkgKiB0b3BvbG9neV9zdGF0ZS0+YXZh aWxfc2xvdHMgYXMgdGhlIHBvcnQgbWF5IG5vdCBleGlzdCBpZiB0aGUgcGFyZW50Cj4gPiA+ID4g LQkgKiBicmFuY2ggZGV2aWNlIHdhcyB1bnBsdWdnZWQuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGJ5 IHRyYWNraW5nCj4gPiA+ID4gLQkgKiBwZXItcG9ydCBzbG90IGFsbG9jYXRpb24gaW4gZHJtX2Rw X21zdF90b3BvbG9neV9zdGF0ZSBpbnN0ZWFkIG9mCj4gPiA+ID4gLQkgKiBkZXBlbmRpbmcgb24g dGhlIGNhbGxlciB0byB0ZWxsIHVzIGhvdyBtYW55IHNsb3RzIHRvIHJlbGVhc2UuCj4gPiA+ID4g LQkgKi8KPiA+ID4gPiAtCXRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyArPSBzbG90czsKPiA+ ID4gPiAtCURSTV9ERUJVR19LTVMoInZjcGkgc2xvdHMgcmVsZWFzZWQ9JWQsIGF2YWlsPSVkXG4i LAo+ID4gPiA+IC0JCQlzbG90cywgdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzKTsKPiA+ID4g PiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIHRtcCwgJnRvcG9sb2d5X3N0YXRlLT52 Y3BpcywgbmV4dCkgewo+ID4gPiA+ICsJCWlmIChwb3MtPnBvcnQgPT0gcG9ydCkgewo+ID4gPiA+ ICsJCQlsaXN0X2RlbCgmcG9zLT5uZXh0KTsKPiA+ID4gPiArCQkJRFJNX0RFQlVHX0tNUygiW01T VCBQT1JUOiVwXSB2Y3BpICVkIC0+IDBcbiIsCj4gPiA+ID4gKwkJCQkgICAgICBwb3J0LCBwb3Mt PnZjcGkpOwo+ID4gPiA+ICAKPiA+ID4gPiArCQkJa2ZyZWUocG9zKTsKPiA+ID4gPiArCQkJcmV0 dXJuIDA7Cj4gPiA+ID4gKwkJfQo+ID4gPiA+ICsJfQo+ID4gPiA+ICsKPiA+ID4gPiArCS8qIElm IG5vIGFsbG9jYXRpb24gd2FzIGZvdW5kLCBhbGwgdGhhdCBtZWFucyBpcyB0aGF0IHRoZSBwb3J0 IHdhcwo+ID4gPiA+ICsJICogZGVzdHJveWVkIHNpbmNlIHRoZSBsYXN0IGF0b21pYyBjb21taXQu IFRoYXQncyBPSyEKPiA+ID4gPiArCSAqLwo+ID4gPiAKPiA+ID4gVGhpcyBjYXNlIGhlcmUgaGFz IG1lIGEgYml0IHdvcnJpZWQuIEkgdGhvdWdodCB3aXRoIHlvdXIgY2hhbmdlcyB3ZSdsbAo+ID4g PiBhbHdheXMgaGF2ZSB0aGUgcG9ydCBwb2ludGVyIHN0aWxsIGFyb3VuZCwgdG8gYmUgYWJsZSB0 byBjbGVhbiB0aGluZ3MgdXAKPiA+ID4gcHJvcGVybHkuIElmIHRoaXMgaXMgbm90IHRoZSBjYXNl IHRoZW4gd2UnZCBwb3RlbnRpYWxseSBsZWFrIHRoZSB2Y3BpCj4gPiA+IGFsbG9jYXRpb24gZm9y IGFuIHVucGx1Z2dlZCBwb3J0Lgo+ID4gPiAKPiA+ID4gT3RvaCBpZiB0aGUgZHJpdmVyIHJlbGVh c2VzIHRoZSBhbGxvY2F0aW9uIGZvciBhIHBvcnQgdHdpY2UgaXQncyBwcm9iYWJseQo+ID4gPiBt aXhlZCB1cCBpdCdzIG93biBib29rLWtlZXBpbmcuIFdlIHNob3VsZCBXQVJOIGFib3V0IHRoYXQg Y2FzZS4KPiA+ID4gCj4gPiA+IFRoaXMgaXMga2luZGEgZmFsbG91dCBmcm9tIHlvdXIgY2hhbmdl IHRvIG5vdCBwcnVuZSBhbGxvY2F0aW9ucyBvbgo+ID4gPiBkdXBsaWNhdGUsIGFuZCBJIHRoaW5r IHdpbGwgZnVydGhlciBjbGVhbiB1cCBob3cgdGhpcyBpcyBoYW5kbGVkLgo+ID4gPiAKPiA+ID4g U28gd2l0aCB0aGUgY29tbWVudCByZW1vdmVkIGFuZCByZXBsYWNlZCBieSBhIFdBUk5JTkcoMSwi bm8gdmNwaQo+ID4gPiBhbGxvY2F0aW9uIGZvdW5kIGZvciBwb3J0ICVwXG4iLCBwb3J0KSBvciBz b21ldGhpbmcgbGlrZSB0aGF0IHRoaXMgc2hvdWxkCj4gPiA+IGJlIHNvbGlkLgo+ID4gCj4gPiBI bTsgdGhhdCBjb21tZW50IGlzIGxlZnRvdmVyIGZyb20gdGhlIGZhbGxvdXQgb2YgbW92aW5nIHRo ZSBwb3J0Cj4gPiB2ZXJpZmljYXRpb24KPiA+IGxvZ2ljIG91dCBvZiB0aGUgc3RhdGUgZHVwbGlj YXRlIGZ1bmN0aW9ucywgYnV0IEkgZG9uJ3QgdGhpbmsgdGhpcyB3b3VsZAo+ID4gbmVzc2VjYXJp bHkgYmUgYSBib29ra2VlcGluZyBlcnJvci4gSWYgd2UncmUgZ29pbmcgdG8gc3VwcG9ydCBmYWxs YmFjawo+ID4gbGluayByZXRyYWluaW5nLCB3ZSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGV2 ZXJ5IGRyaXZlcidzCj4gPiBkcm1fY29ubmVjdG9yLT5hdG9taWNfY2hlY2soKSBmdW5jdGlvbiBp cyBpZGVtcG90ZW50IHNvIHRoYXQgaWYgdGhlCj4gPiBhdG9taWMgaGVscGVycyBoYXZlIHRvIHB1 bGwgaW4gbW9yZSBDUlRDcyB0byBwZXJmb3JtIG1vZGVzZXRzIG9uIHRoZW4KPiA+IHVzZXJzcGFj ZSBvcmlnaW5hbGx5IGFkZGVkLCB0aGUgc2Vjb25kIGNoZWNrIG9uIHRoZSBEUk0gY29ubmVjdG9y Cj4gPiBkb2Vzbid0IGNhdXNlIGFueSBpc3N1ZXMuIFJlbWVtYmVyOiBpZiB3ZSdyZSB0cnlpbmcg dG8gcmV0cmFpbiBhbiBNU1QKPiA+IHRvcG9sb2d5IGF0IGEgbG93ZXIgbGluayByYXRlIHRoZW4g YmVmb3JlLCB0aGF0IG1lYW5zIGNoYW5naW5nIHRoZSBQQk4KPiA+IGRpdmlzb3Igd2hpY2ggaW4g dHVybiBtZWFucyB0aGF0IHRoZSBvbmx5IHZhbGlkIGFjdGlvbnMgdGhhdCBjYW4gYmUKPiA+IHRh a2VuIGFyZSByZWNhbGN1bGF0aW5nIGV2ZXJ5IGFjdGl2ZSBWQ1BJIGFsbG9jYXRpb24gYXQgb25j ZSBpbiBvcmRlciB0bwo+ID4gcHJldmVudCBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIG9yIGRpc2Fi bGluZyBhbGwgb2YgdGhlIGRpc3BsYXlzIChzaW5jZQo+ID4gZ29pbmcgZnJvbSA+MCBWQ1BJIHRv IDAgVkNQSSBzaG91bGQgYWx3YXlzIGJlIHNhZmUpLgo+ID4gCj4gPiBXZSAvY291bGQvIGp1c3Qg bGVhdmUgdGhpcyB1cCB0byB0aGUgZHJpdmVyIHRvIGRvIHRoZSBib29ra2VlcGluZyBvbgo+ID4g dGhpcywgYnV0IHRoYXQgc2VlbXMgcmF0aGVyIHJlZHVuZGFudC4gV2UgY291bGQgYWRkIGV4dHJh IGJvb2trZWVwaW5nIGluCj4gPiB0aGUgYXRvbWljIGNoZWNrIHRob3VnaCBzbyB0aGF0IGluc3Rl YWQgb2YganVzdCBkZWxldGluZyB0aGUgc3RydWN0cyBmb3IKPiA+IGVhY2ggVkNQSSBhbGxvY2F0 aW9uIHdoZW4gdGhleSBnbyB0byAwLCB3ZSBpbnN0ZWFkIGp1c3Qgc2V0IHRoZW0gdG8gMAo+ID4g dGhlbiBmcmVlIHRoZW0gc29tZXdoZXJlIGVsc2UuCj4gCj4gamZ5aTsgSSB0aGluayBpdCB3b3Vs ZCBnbyBzb21ldGhpbmcgbGlrZSB0aGlzOgo+IAo+IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3Bp X3Nsb3RzKCk6Cj4gCj4gZm9yIGVhY2ggdmNwaToKPiAgIGlmIHZjcGkucG9ydCA9PSBwb3J0Ogo+ ICAgICB2Y3BpLnZjcGkgPSAwCj4gICAgIHJldHVybiAwOwo+IAo+IGRybV9lcnJvcigiTm8gcHJl dmlvdXMgVkNQSSBhbGxvY2F0aW9uIGZvdW5kISBIZWxwISEhXG4iKTsKPiByZXR1cm4gLUVJTlZB TDsKPiAKPiBUaGVuIHdlJ2QgbmVlZCB0byBhZGQgc29tZXRoaW5nIHRvIHBydW5lIHRoZSBWQ1BJ IGFsbG9jYXRpb25zIGluIHRoZSBzdGF0ZSwKPiB3aGljaCB0aGUgZHJpdmVyIHdvdWxkIGNhbGwg YWZ0ZXIgYWxsIGF0b21pYyBjaGVja3MvbW9kZSB2YWxpZGF0aW9ucyBoYXZlIGJlZW4KPiBwZXJm b3JtZWQsIGluY2x1ZGluZyBkcm1fZHBfbXN0X2F0b21pY19jaGVjaygpCj4gCj4gZHJtX2RwX21z dF9hdG9taWNfY2hlY2tfZmluaXNoKCk6Cj4gICBmb3IgZWFjaCB2Y3BpOgo+ICAgICBpZiB2Y3Bp LnZjcGkgPT0gMDoKPiAgICAgICBkZWwgdmNwaQo+IAo+IFRoZW4sIHRoYXQgd2F5IHdlJ3ZlIG1h ZGUgc3VyZSB0aGF0IG11bHRpcGxlIFZDUEkgZnJlZXMgaW4gdGhlIHNhbWUgY2hlY2sgYXJlCj4g T0ssIGJ1dCBmcmVlaW5nIFZDUEkgdGhhdCBuZXZlciBleGlzdGVkIGFjdHVhbGx5IHRocm93cyBl cnJvcnMKCk5vdCBzdXJlIHRoYXQncyBuZWVkZWQgYXQgYWxsLiBUaGUgd2F5IGxpbmsgdHJhaW5p bmcgd29ya3MgaXMgd2UganVzdCBhc2sKdXNlcnNwYWNlIHRvIGRvIHRoZSBoZWF2eSBsaWZ0aW5n IGZvciB1cywgYnkgaXNzdWluZyBhIG5ldyBtb2Rlc2V0LiBJZgp0aGF0IG1lYW5zIG1vZGUgcHJ1 bmluZywgd2UgYWxzbyBhc2sgdXNlcnNwYWNlIHRvIGRvIHRoZSBoZWF2eSBsaWZ0aW5nIGZvcgp1 cywgYWdhaW4gYnkgaXNzdWluZyBhIG5ldyBtb2Rlc2V0LiBLZXJuZWwgbmV2ZXIgbmVlZHMgdG8g cmV0cmFpbiBpZiB0aGF0Cm1lYW5zIHJlY29tcHV0aW5nIHN0YXRlIHN0dWZmIG9yIHBydW5pbmcg bW9kZXMgb3Igb3RoZXIgZnVuIHByb2JsZW1zLiBJdApkb2Vzbid0IGV2ZW4gbmVlZCB0byByZXRy YWluIGlmIHRoYXQgbWVhbnMgc2h1dHRpbmcgZG93biBhIGJ1bmNoIG9mIGxpbmtzLAppdCBjYW4g anVzdCBwdW50IHRoYXQgdG8gdXNlcnNwYWNlIGFuZCBsZXQgaXQgcmV0cmFpbiBhdCBhIGNvbnZl bmllbnQKdGltZS4KCk9mIGNvdXJzZSB0aGF0IHJldHJhaW4gbWlnaHQgdGhlbiByZXN1bHQgaW4g YSBtb2Rlc2V0LCB3aGljaCBtaWdodCBmYWlsIGlmCnRoZSBjb25uZWN0b3IgaXMgZW50aXJlbHkg Z29uZSBieSB0aGVuLgoKT3RvaCBJIG1pZ2h0IGp1c3QgYmUgdGFsa2luZyBub25zZW5zZSByaWdo dCBub3csIGl0J3MgYSBiaXQgbGF0ZSA6LSkKCkNoZWVycywgRGFuaWVsCgoKPiA+IAo+ID4gPiAK PiA+ID4gPiAgCXJldHVybiAwOwo+ID4gPiA+ICB9Cj4gPiA+ID4gIEVYUE9SVF9TWU1CT0woZHJt X2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMpOwo+ID4gPiA+IEBAIC0zMTEyLDE1ICszMTY0 LDM0IEBAIHN0YXRpYyB2b2lkIGRybV9kcF9kZXN0cm95X2Nvbm5lY3Rvcl93b3JrKHN0cnVjdAo+ ID4gPiA+IHdvcmtfc3RydWN0ICp3b3JrKQo+ID4gPiA+ICBzdGF0aWMgc3RydWN0IGRybV9wcml2 YXRlX3N0YXRlICoKPiA+ID4gPiAgZHJtX2RwX21zdF9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRy bV9wcml2YXRlX29iaiAqb2JqKQo+ID4gPiA+ICB7Cj4gPiA+ID4gLQlzdHJ1Y3QgZHJtX2RwX21z dF90b3BvbG9neV9zdGF0ZSAqc3RhdGU7Cj4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9zdGF0ZSAqc3RhdGUsICpvbGRfc3RhdGUgPQo+ID4gPiA+ICsJCXRvX2RwX21zdF90b3Bv bG9neV9zdGF0ZShvYmotPnN0YXRlKTsKPiA+ID4gPiArCXN0cnVjdCBkcm1fZHBfdmNwaV9hbGxv Y2F0aW9uICpwb3MsICp2Y3BpOwo+ID4gPiA+ICAKPiA+ID4gPiAtCXN0YXRlID0ga21lbWR1cChv YmotPnN0YXRlLCBzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ID4gKwlzdGF0ZSA9 IGttZW1kdXAob2xkX3N0YXRlLCBzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ID4g IAlpZiAoIXN0YXRlKQo+ID4gPiA+ICAJCXJldHVybiBOVUxMOwo+ID4gPiA+ICAKPiA+ID4gPiAg CV9fZHJtX2F0b21pY19oZWxwZXJfcHJpdmF0ZV9vYmpfZHVwbGljYXRlX3N0YXRlKG9iaiwgJnN0 YXRlLT5iYXNlKTsKPiA+ID4gPiAgCj4gPiA+ID4gKwlJTklUX0xJU1RfSEVBRCgmc3RhdGUtPnZj cGlzKTsKPiA+ID4gPiArCj4gPiA+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJm9sZF9z dGF0ZS0+dmNwaXMsIG5leHQpIHsKPiA+ID4gPiArCQl2Y3BpID0ga21lbWR1cChwb3MsIHNpemVv ZigqdmNwaSksIEdGUF9LRVJORUwpOwo+ID4gPiA+ICsJCWlmICghdmNwaSkKPiA+ID4gPiArCQkJ Z290byBmYWlsX2FsbG9jOwo+ID4gPiA+ICsKPiA+ID4gPiArCQlsaXN0X2FkZCgmdmNwaS0+bmV4 dCwgJnN0YXRlLT52Y3Bpcyk7Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gKwo+ID4gPiA+ICAJcmV0dXJu ICZzdGF0ZS0+YmFzZTsKPiA+ID4gPiArCj4gPiA+ID4gK2ZhaWxfYWxsb2M6Cj4gPiA+ID4gKwls aXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCB2Y3BpLCAmc3RhdGUtPnZjcGlzLCBuZXh0KQo+ ID4gPiA+ICsJCWtmcmVlKHBvcyk7Cj4gPiA+ID4gKwlrZnJlZShzdGF0ZSk7Cj4gPiA+ID4gKwo+ ID4gPiA+ICsJcmV0dXJuIE5VTEw7Cj4gPiA+ID4gIH0KPiA+ID4gPiAgCj4gPiA+ID4gIHN0YXRp YyB2b2lkIGRybV9kcF9tc3RfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqICpv YmosCj4gPiA+ID4gQEAgLTMxMjgsMTQgKzMxOTksOTkgQEAgc3RhdGljIHZvaWQgZHJtX2RwX21z dF9kZXN0cm95X3N0YXRlKHN0cnVjdAo+ID4gPiA+IGRybV9wcml2YXRlX29iaiAqb2JqLAo+ID4g PiA+ICB7Cj4gPiA+ID4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0 YXRlID0KPiA+ID4gPiAgCQl0b19kcF9tc3RfdG9wb2xvZ3lfc3RhdGUoc3RhdGUpOwo+ID4gPiA+ ICsJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gKnBvcywgKnRtcDsKPiA+ID4gPiArCj4g PiA+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCB0bXAsICZtc3Rfc3RhdGUtPnZj cGlzLCBuZXh0KQo+ID4gPiA+ICsJCWtmcmVlKHBvcyk7Cj4gPiA+ID4gIAo+ID4gPiA+ICAJa2Zy ZWUobXN0X3N0YXRlKTsKPiA+ID4gPiAgfQo+ID4gPiA+ICAKPiA+ID4gPiAtc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcyBtc3Rfc3RhdGVfZnVuY3MgPSB7Cj4gPiA+ ID4gK3N0YXRpYyBpbmxpbmUgaW50Cj4gPiA+ID4gK2RybV9kcF9tc3RfYXRvbWljX2NoZWNrX3Rv cG9sb2d5X3N0YXRlKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncgo+ID4gPiA+ICptZ3Is Cj4gPiA+ID4gKwkJCQkgICAgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUKPiA+ ID4gPiAqbXN0X3N0YXRlKQo+ID4gPiA+ICt7Cj4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlf YWxsb2NhdGlvbiAqdmNwaTsKPiA+ID4gPiArCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQ7 Cj4gPiA+ID4gKwlpbnQgYXZhaWxfc2xvdHMgPSA2MywgcmV0Owo+ID4gPiA+ICsKPiA+ID4gPiAr CWxpc3RfZm9yX2VhY2hfZW50cnkodmNwaSwgJm1zdF9zdGF0ZS0+dmNwaXMsIG5leHQpIHsKPiA+ ID4gPiArCQkvKiBQb3J0cyB0aGF0IG5vIGxvbmdlciBleGlzdCBzaG91bGRuJ3QgYmUgY291bnRl ZCB0b3dhcmRzIHRoZQo+ID4gPiA+ICsJCSAqIGJhbmR3aWR0aCByZXF1aXJlbWVudHMgZm9yIHRo ZSBzdGF0ZSwgc28gc2tpcCB0aGVtCj4gPiA+ID4gKwkJICovCj4gPiA+IAo+ID4gPiBTY2VuYXJp bzoKPiA+ID4gLSAyIG1zdCBzaW5rcyBvbiBhIHNpbmdsZSBob3N0IHNpZGUgcG9ydC4KPiA+ID4g LSAxc3QgY29ubmVjdG9yIGlzIGFjdGl2ZSwgMm5kIGNvbm5lY3RvciBpcyBvZmYuCj4gPiA+IC0g MXN0IGNvbm5lY3RvciBpcyBob3QtdW5wbHVnZ2VkLCBidXQgdXNlcnNwYWNlIGhhc24ndCByZWFs aXplZCB0aGlzIHlldCwKPiA+ID4gICBzbyBub3QgeWV0IGNvbWUgYXJvdW5kIHRvIGRvIHRoZSBk aXNhYmxpbmcgbW9kZXNldC4KPiA+ID4gLSBBdCB0aGUgc2FtZSB0aW1lIHVzZXJzcGFjZSBkZWNp ZGVzIHRvIGVuYWJsZSB0aGUgMm5kIG91dHB1dCwgd2hpY2gKPiA+ID4gICBmb3JjZXMgYSBtb2Rl c2V0IGFuZCBwdWxscyB0aGUgdG9wb2xvZ3kgc3RhdGUgaW4uCj4gPiA+IC0gVGhpcyBmdW5jdGlv biBoZXJlIGRlY2lkZXMgdG8gb25seSBsb29rIGF0IHRoZSB2Y3BpIGFsbG9jYXRpb24gZm9yIHRo ZQo+ID4gPiAgIDJuZCBjb25uZWN0b3IgYmVjYXVzZSB0aGUgZmlyc3Qgb25lIGlzIGdvbmUgYWxy ZWFkeS4KPiA+ID4gLSBVbmZvcnR1bmF0ZWx5IGxpZ2h0aW5nIHVwIGJvdGggY29ubmVjdG9ycyBh dCB0aGUgc2FtZSB0aW1lIGlzbid0Cj4gPiA+ICAgcG9zc2libGUsIGJlY2F1c2UgdG9vIG1hbnkg dmNwaS4gQnV0IHNpbmNlIHVzZXJzcGFjZSBkaWRuJ3QgYXNrIGZvciBhCj4gPiA+ICAgbW9kZXNl dCBvbiB0aGUgbm93IHVucGx1Z2dlZCBmaXJzdCBjb25uZWN0b3IuCj4gPiA+IC0+IE1vZGVzZXQg Z29lcyBib29tIGJlY2F1c2Ugd2UgZW5hYmxlIHRvbyBtYW55IHZjcGkuCj4gPiA+IAo+ID4gPiBC dXQgd2l0aCB0aGUgY2hhbmdlIGluIGhvdyB3ZSByZWxlYXNlIHZjcGkgYWxsb2NhdGlvbnMgdGhl cmUncyBubyBuZWVkIHRvCj4gPiA+IGlnbm9yZSBkaXNjb25uZWN0ZWQgc3R1ZmYgaGVyZSwgYW5k IHdlIHNob3VsZCBiZSBhYmxlIHRvIGNoZWNrIHZjcGkgbGltaXRzCj4gPiA+IGJ5IGp1c3QgY2hl Y2tpbmcgYWxsIG9mIHRoZW0uCj4gPiA+IAo+ID4gPiBJIGRpZG4ndCBzZWUgYW55dGhpbmcgZWxz ZSBzZXJpb3VzLCBzbyB3aXRoIHRoZSBhYm92ZSB0d28gdGhpbmdzIHJlc29sdmVkCj4gPiA+IHRo aXMgaGFzIG15IFJldmlld2VkLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xs LmNoPgo+ID4gPiAKPiA+ID4gT25lIGJpa2VzaGVkIGJlbG93LCBiZWNhdXNlIEkgbmVlZCB0byBw cm92ZSBJIHNjcm9sbGVkIHRvIHRoZSBlbmQgOi0pCj4gPiA+IAo+ID4gPiA+ICsJCXBvcnQgPSBk cm1fZHBfZ2V0X3ZhbGlkYXRlZF9wb3J0X3JlZihtZ3IsIHZjcGktPnBvcnQpOwo+ID4gPiA+ICsJ CWlmICghcG9ydCkgewo+ID4gPiA+ICsJCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIFBPUlQ6JXBd IGlzIHN0YWxlLCBza2lwcGluZwo+ID4gPiA+IGNoZWNrc1xuIiwKPiA+ID4gPiArCQkJCQkgdmNw aS0+cG9ydCk7Cj4gPiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiA+ICsJCX0KPiA+ID4gPiArCj4g PiA+ID4gKwkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JUOiVwXSByZXF1aXJlcyAlZCB2Y3Bp IHNsb3RzXG4iLAo+ID4gPiA+ICsJCQkJIHZjcGktPnBvcnQsIHZjcGktPnZjcGkpOwo+ID4gPiA+ ICsKPiA+ID4gPiArCQlhdmFpbF9zbG90cyAtPSB2Y3BpLT52Y3BpOwo+ID4gPiA+ICsJCWlmIChh dmFpbF9zbG90cyA8IDApIHsKPiA+ID4gPiArCQkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JU OiVwXSBub3QgZW5vdWdoIHZjcGkgc2xvdHMKPiA+ID4gPiBpbiBtc3Rfc3RhdGUgJXAgKGF2YWls PSVkKVxuIiwKPiA+ID4gPiArCQkJCQkgdmNwaS0+cG9ydCwgbXN0X3N0YXRlLAo+ID4gPiA+ICsJ CQkJCSBhdmFpbF9zbG90cyArIHZjcGktPnZjcGkpOwo+ID4gPiA+ICsJCQlyZXQgPSAtRU5PU1BD Owo+ID4gPiA+ICsJCQlnb3RvIHBvcnRfZmFpbDsKPiA+ID4gPiArCQl9Cj4gPiA+ID4gKwo+ID4g PiA+ICsJCWRybV9kcF9wdXRfcG9ydChwb3J0KTsKPiA+ID4gPiArCX0KPiA+ID4gPiArCURSTV9E RUJVR19BVE9NSUMoIltNU1QgTUdSOiVwXSBtc3Rfc3RhdGUgJXAgdmNwaSBhdmFpbD0lZCB1c2Vk PSVkXG4iLAo+ID4gPiA+ICsJCQkgbWdyLCBtc3Rfc3RhdGUsIGF2YWlsX3Nsb3RzLAo+ID4gPiA+ ICsJCQkgNjMgLSBhdmFpbF9zbG90cyk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJcmV0dXJuIDA7Cj4g PiA+ID4gK3BvcnRfZmFpbDoKPiA+ID4gPiArCWRybV9kcF9wdXRfcG9ydChwb3J0KTsKPiA+ID4g PiArCXJldHVybiByZXQ7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gKy8qKgo+ID4gPiA+ ICsgKiBkcm1fZHBfbXN0X2F0b21pY19jaGVjayAtIENoZWNrIHRoYXQgdGhlIG5ldyBzdGF0ZSBv ZiBhbiBNU1QKPiA+ID4gPiB0b3BvbG9neQo+ID4gPiA+IGluIGFuCj4gPiA+ID4gKyAqIGF0b21p YyB1cGRhdGUgaXMgdmFsaWQKPiA+ID4gPiArICogQHN0YXRlOiBQb2ludGVyIHRvIHRoZSBuZXcg JnN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlCj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAq IENoZWNrcyB0aGUgZ2l2ZW4gdG9wb2xvZ3kgc3RhdGUgZm9yIGFuIGF0b21pYyB1cGRhdGUgdG8g ZW5zdXJlIHRoYXQKPiA+ID4gPiBpdCdzCj4gPiA+ID4gKyAqIHZhbGlkLiBUaGlzIGluY2x1ZGVz IGNoZWNraW5nIHdoZXRoZXIgdGhlcmUncyBlbm91Z2ggYmFuZHdpZHRoIHRvCj4gPiA+ID4gc3Vw cG9ydAo+ID4gPiA+ICsgKiB0aGUgbmV3IFZDUEkgYWxsb2NhdGlvbnMgaW4gdGhlIGF0b21pYyB1 cGRhdGUuCj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAqIEFueSBhdG9taWMgZHJpdmVycyBzdXBwb3J0 aW5nIERQIE1TVCBtdXN0IG1ha2Ugc3VyZSB0byBjYWxsIHRoaXMKPiA+ID4gPiBhZnRlcgo+ID4g PiA+ICsgKiBjaGVja2luZyB0aGUgcmVzdCBvZiB0aGVpciBzdGF0ZSBpbiB0aGVpcgo+ID4gPiA+ ICsgKiAmZHJtX21vZGVfY29uZmlnX2Z1bmNzLmF0b21pY19jaGVjaygpIGNhbGxiYWNrLgo+ID4g PiA+ICsgKgo+ID4gPiA+ICsgKiBTZWUgYWxzbzoKPiA+ID4gPiArICogZHJtX2RwX2F0b21pY19m aW5kX3ZjcGlfc2xvdHMoKQo+ID4gPiA+ICsgKiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9z bG90cygpCj4gPiA+ID4gKyAqCj4gPiA+ID4gKyAqIFJldHVybnM6Cj4gPiA+ID4gKyAqCj4gPiA+ ID4gKyAqIDAgaWYgdGhlIG5ldyBzdGF0ZSBpcyB2YWxpZCwgbmVnYXRpdmUgZXJyb3IgY29kZSBv dGhlcndpc2UuCj4gPiA+ID4gKyAqLwo+ID4gPiA+ICtpbnQgZHJtX2RwX21zdF9hdG9taWNfY2hl Y2soc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ID4gPiA+ICt7Cj4gPiA+ID4gKwlz dHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncjsKPiA+ID4gPiArCXN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGU7Cj4gPiA+ID4gKwlpbnQgaSwgcmV0ID0g MDsKPiA+ID4gPiArCj4gPiA+ID4gKwlmb3JfZWFjaF9uZXdfbXN0X21ncl9pbl9zdGF0ZShzdGF0 ZSwgbWdyLCBtc3Rfc3RhdGUsIGkpIHsKPiA+ID4gPiArCQlyZXQgPSBkcm1fZHBfbXN0X2F0b21p Y19jaGVja190b3BvbG9neV9zdGF0ZShtZ3IsIG1zdF9zdGF0ZSk7Cj4gPiA+ID4gKwkJaWYgKHJl dCkKPiA+ID4gPiArCQkJYnJlYWs7Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gKwo+ID4gPiA+ICsJcmV0 dXJuIHJldDsKPiA+ID4gPiArfQo+ID4gPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfYXRv bWljX2NoZWNrKTsKPiA+ID4gPiArCj4gPiA+ID4gK2NvbnN0IHN0cnVjdCBkcm1fcHJpdmF0ZV9z dGF0ZV9mdW5jcyBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1bmNzID0KPiA+ID4gPiB7Cj4g PiA+ID4gIAkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9kcF9tc3RfZHVwbGljYXRlX3N0 YXRlLAo+ID4gPiA+ICAJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2RwX21zdF9kZXN0cm95 X3N0YXRlLAo+ID4gPiA+ICB9Owo+ID4gPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfdG9w b2xvZ3lfc3RhdGVfZnVuY3MpOwo+ID4gPiA+ICAKPiA+ID4gPiAgLyoqCj4gPiA+ID4gICAqIGRy bV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZTogZ2V0IE1TVCB0b3BvbG9neSBzdGF0ZQo+ ID4gPiA+IEBAIC0zMjEzLDEzICszMzY5LDExIEBAIGludCBkcm1fZHBfbXN0X3RvcG9sb2d5X21n cl9pbml0KHN0cnVjdAo+ID4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ ID4gIAkJcmV0dXJuIC1FTk9NRU07Cj4gPiA+ID4gIAo+ID4gPiA+ICAJbXN0X3N0YXRlLT5tZ3Ig PSBtZ3I7Cj4gPiA+ID4gLQo+ID4gPiA+IC0JLyogbWF4LiB0aW1lIHNsb3RzIC0gb25lIHNsb3Qg Zm9yIE1UUCBoZWFkZXIgKi8KPiA+ID4gPiAtCW1zdF9zdGF0ZS0+YXZhaWxfc2xvdHMgPSA2MzsK PiA+ID4gPiArCUlOSVRfTElTVF9IRUFEKCZtc3Rfc3RhdGUtPnZjcGlzKTsKPiA+ID4gPiAgCj4g PiA+ID4gIAlkcm1fYXRvbWljX3ByaXZhdGVfb2JqX2luaXQoJm1nci0+YmFzZSwKPiA+ID4gPiAg CQkJCSAgICAmbXN0X3N0YXRlLT5iYXNlLAo+ID4gPiA+IC0JCQkJICAgICZtc3Rfc3RhdGVfZnVu Y3MpOwo+ID4gPiA+ICsJCQkJICAgICZkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1bmNzKTsK PiA+ID4gPiAgCj4gPiA+ID4gIAlyZXR1cm4gMDsKPiA+ID4gPiAgfQo+ID4gPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ID4gPiBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gPiA+IGluZGV4IGJiZjhjYTIxYTdh Mi4uODc0OWNmNjFhNmFjIDEwMDY0NAo+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rpc3BsYXkuYwo+ID4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rpc3BsYXkuYwo+ID4gPiA+IEBAIC0xMjU1Myw2ICsxMjU1MywxMCBAQCBzdGF0aWMgaW50IGlu dGVsX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2RldmljZQo+ID4gPiA+ICpkZXYsCj4gPiA+ID4g IAkJCQkgICAgICAgIlttb2Rlc2V0XSIgOiAiW2Zhc3RzZXRdIik7Cj4gPiA+ID4gIAl9Cj4gPiA+ ID4gIAo+ID4gPiA+ICsJcmV0ID0gZHJtX2RwX21zdF9hdG9taWNfY2hlY2soc3RhdGUpOwo+ID4g PiA+ICsJaWYgKHJldCkKPiA+ID4gPiArCQlyZXR1cm4gcmV0Owo+ID4gPiAKPiA+ID4gQ29tcGxl dGUgYmlrZXNoZWQsIHNvIGZlZWwgZnJlZSB0byBpZ25vcmU6IEknZCBzdHVmZiB0aGlzIGludG8K PiA+ID4gaW50ZWxfbW9kZXNldF9jaGVja3MoKS4gRmVlbCBmcmVlIHRvIGlnbm9yZS4KPiA+ID4g Cj4gPiA+IENoZWVycywgRGFuaWVsCj4gPiA+IAo+ID4gPiA+ICsKPiA+ID4gPiAgCWlmIChhbnlf bXMpIHsKPiA+ID4gPiAgCQlyZXQgPSBpbnRlbF9tb2Rlc2V0X2NoZWNrcyhzdGF0ZSk7Cj4gPiA+ ID4gIAo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9t c3QuYwo+ID4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMKPiA+ID4g PiBpbmRleCA4YjcxZDY0ZWJkOWQuLmFhZjkwNDczOGI3OCAxMDA2NDQKPiA+ID4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYwo+ID4gPiA+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2RwX21zdC5jCj4gPiA+ID4gQEAgLTExNCwyOCArMTE0LDMxIEBA IHN0YXRpYyBpbnQgaW50ZWxfZHBfbXN0X2F0b21pY19jaGVjayhzdHJ1Y3QKPiA+ID4gPiBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiA+ID4gIAlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0 ZSAqb2xkX2Nvbm5fc3RhdGU7Cj4gPiA+ID4gIAlzdHJ1Y3QgZHJtX2NydGMgKm9sZF9jcnRjOwo+ ID4gPiA+ICAJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ID4gPiA+IC0JaW50 IHNsb3RzLCByZXQgPSAwOwo+ID4gPiA+ICsJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxf Y29ubmVjdG9yID0KPiA+ID4gPiArCQl0b19pbnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKTsKPiA+ ID4gPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyID0KPiA+ID4gPiArCQkm aW50ZWxfY29ubmVjdG9yLT5tc3RfcG9ydC0+bXN0X21ncjsKPiA+ID4gPiArCXN0cnVjdCBkcm1f ZHBfbXN0X3BvcnQgKnBvcnQgPSBpbnRlbF9jb25uZWN0b3ItPnBvcnQ7Cj4gPiA+ID4gKwlpbnQg cmV0ID0gMDsKPiA+ID4gPiAgCj4gPiA+ID4gIAlvbGRfY29ubl9zdGF0ZSA9IGRybV9hdG9taWNf Z2V0X29sZF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUsIGNvbm5lY3Rvcik7Cj4gPiA+ID4gIAlvbGRf Y3J0YyA9IG9sZF9jb25uX3N0YXRlLT5jcnRjOwo+ID4gPiA+ICAJaWYgKCFvbGRfY3J0YykKPiA+ ID4gPiAgCQlyZXR1cm4gcmV0Owo+ID4gPiA+ICAKPiA+ID4gPiAtCWNydGNfc3RhdGUgPSBkcm1f YXRvbWljX2dldF9uZXdfY3J0Y19zdGF0ZShzdGF0ZSwgb2xkX2NydGMpOwo+ID4gPiA+IC0Jc2xv dHMgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNydGNfc3RhdGUpLT5kcF9tX24udHU7Cj4gPiA+ID4g LQlpZiAoZHJtX2F0b21pY19jcnRjX25lZWRzX21vZGVzZXQoY3J0Y19zdGF0ZSkgJiYgc2xvdHMg PiAwKSB7Cj4gPiA+ID4gLQkJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7Cj4g PiA+ID4gLQkJc3RydWN0IGRybV9lbmNvZGVyICpvbGRfZW5jb2RlcjsKPiA+ID4gPiArCS8qIEZy ZWUgVkNQSSwgc2luY2UgY29tcHV0ZV9jb25maWcoKSB3b24ndCBiZSBydW4gKi8KPiA+ID4gPiAr CWlmICghbmV3X2Nvbm5fc3RhdGUtPmNydGMpIHsKPiA+ID4gPiArCQljcnRjX3N0YXRlID0gZHJt X2F0b21pY19nZXRfbmV3X2NydGNfc3RhdGUoc3RhdGUsIG9sZF9jcnRjKTsKPiA+ID4gPiAgCj4g PiA+ID4gLQkJb2xkX2VuY29kZXIgPSBvbGRfY29ubl9zdGF0ZS0+YmVzdF9lbmNvZGVyOwo+ID4g PiA+IC0JCW1nciA9ICZlbmNfdG9fbXN0KG9sZF9lbmNvZGVyKS0+cHJpbWFyeS0+ZHAubXN0X21n cjsKPiA+ID4gPiAtCj4gPiA+ID4gLQkJcmV0ID0gZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlf c2xvdHMoc3RhdGUsIG1nciwgc2xvdHMpOwo+ID4gPiA+IC0JCWlmIChyZXQpCj4gPiA+ID4gLQkJ CURSTV9ERUJVR19LTVMoImZhaWxlZCByZWxlYXNpbmcgJWQgdmNwaSBzbG90czolZFxuIiwKPiA+ ID4gPiBzbG90cywgcmV0KTsKPiA+ID4gPiAtCQllbHNlCj4gPiA+ID4gLQkJCXRvX2ludGVsX2Ny dGNfc3RhdGUoY3J0Y19zdGF0ZSktPmRwX21fbi50dSA9IDA7Cj4gPiA+ID4gKwkJcmV0ID0gZHJt X2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RhdGUsIG1nciwgcG9ydCk7Cj4gPiA+ID4g KwkJaWYgKHJldCkgewo+ID4gPiA+ICsJCQlEUk1fREVCVUdfS01TKCJmYWlsZWQgcmVsZWFzaW5n IHZjcGkgc2xvdHM6ICVkXG4iLAo+ID4gPiA+ICsJCQkJICAgICAgcmV0KTsKPiA+ID4gPiArCQkJ cmV0dXJuIHJldDsKPiA+ID4gPiArCQl9Cj4gPiA+ID4gKwkJdG9faW50ZWxfY3J0Y19zdGF0ZShj cnRjX3N0YXRlKS0+ZHBfbV9uLnR1ID0gMDsKPiA+ID4gPiAgCX0KPiA+ID4gPiArCj4gPiA+ID4g IAlyZXR1cm4gcmV0Owo+ID4gPiA+ICB9Cj4gPiA+ID4gIAo+ID4gPiA+IGRpZmYgLS1naXQgYS9p bmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oCj4gPiA+ID4gYi9pbmNsdWRlL2RybS9kcm1f ZHBfbXN0X2hlbHBlci5oCj4gPiA+ID4gaW5kZXggM2ZhY2ViNjZmNWNiLi4wOGI2Nzk0OGI4Zjkg MTAwNjQ0Cj4gPiA+ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+ID4g PiA+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgKPiA+ID4gPiBAQCAtNDA2 LDkgKzQwNiwxNSBAQCBzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgewo+ID4gPiA+ICAKPiA+ID4gPiAg I2RlZmluZSB0b19kcF9tc3RfdG9wb2xvZ3lfc3RhdGUoeCkgY29udGFpbmVyX29mKHgsIHN0cnVj dAo+ID4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUsIGJhc2UpCj4gPiA+ID4gIAo+ID4g PiA+ICtzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiB7Cj4gPiA+ID4gKwlzdHJ1Y3QgZHJt X2RwX21zdF9wb3J0ICpwb3J0Owo+ID4gPiA+ICsJaW50IHZjcGk7Cj4gPiA+ID4gKwlzdHJ1Y3Qg bGlzdF9oZWFkIG5leHQ7Cj4gPiA+ID4gK307Cj4gPiA+ID4gKwo+ID4gPiA+ICBzdHJ1Y3QgZHJt X2RwX21zdF90b3BvbG9neV9zdGF0ZSB7Cj4gPiA+ID4gIAlzdHJ1Y3QgZHJtX3ByaXZhdGVfc3Rh dGUgYmFzZTsKPiA+ID4gPiAtCWludCBhdmFpbF9zbG90czsKPiA+ID4gPiArCXN0cnVjdCBsaXN0 X2hlYWQgdmNwaXM7Cj4gPiA+ID4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1n cjsKPiA+ID4gPiAgfTsKPiA+ID4gPiAgCj4gPiA+ID4gQEAgLTYxOSwxNCArNjI1LDE3IEBAIHZv aWQgZHJtX2RwX21zdF90b3BvbG9neV9tZ3Jfc3VzcGVuZChzdHJ1Y3QKPiA+ID4gPiBkcm1fZHBf bXN0X3RvcG9sb2d5X21nciAqbWdyKTsKPiA+ID4gPiAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyX3Jlc3VtZShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IKPiA+ID4gPiAqbWdyKTsK PiA+ID4gPiAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUKPiA+ID4gPiAqZHJtX2F0 b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSwKPiA+ID4gPiAgCQkJCQkJCQkgICAgc3RydWN0Cj4gPiA+ID4gZHJtX2RwX21zdF90b3BvbG9n eV9tZ3IgKm1ncik7Cj4gPiA+ID4gLWludCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyhz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiA+ID4gLQkJCQkgIHN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gPiA+IC0JCQkJICBzdHJ1Y3QgZHJtX2RwX21z dF9wb3J0ICpwb3J0LCBpbnQgcGJuKTsKPiA+ID4gPiAtaW50IGRybV9kcF9hdG9taWNfcmVsZWFz ZV92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ID4gPiAtCQkJ CSAgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ID4gLQkJCQkg ICAgIGludCBzbG90cyk7Cj4gPiA+ID4gK2ludCBfX211c3RfY2hlY2sKPiA+ID4gPiArZHJtX2Rw X2F0b21pY19maW5kX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ ID4gPiA+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ ID4gPiArCQkJICAgICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50IHBibik7Cj4g PiA+ID4gK2ludCBfX211c3RfY2hlY2sKPiA+ID4gPiArZHJtX2RwX2F0b21pY19yZWxlYXNlX3Zj cGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiA+ICsJCQkJIHN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gPiA+ICsJCQkJIHN0cnVjdCBk cm1fZHBfbXN0X3BvcnQgKnBvcnQpOwo+ID4gPiA+ICBpbnQgZHJtX2RwX3NlbmRfcG93ZXJfdXBk b3duX3BoeShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ID4gPiAgCQkJ CSBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBib29sIHBvd2VyX3VwKTsKPiA+ID4gPiAr aW50IF9fbXVzdF9jaGVjayBkcm1fZHBfbXN0X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZQo+ID4gPiA+ICpzdGF0ZSk7Cj4gPiA+ID4gIAo+ID4gPiA+ICBleHRlcm4gY29uc3Qg c3RydWN0IGRybV9wcml2YXRlX3N0YXRlX2Z1bmNzCj4gPiA+ID4gZHJtX2RwX21zdF90b3BvbG9n eV9zdGF0ZV9mdW5jczsKPiA+ID4gPiAgCj4gPiA+ID4gLS0gCj4gPiA+ID4gMi4xOS4xCj4gPiA+ ID4gCj4gLS0gCj4gQ2hlZXJzLAo+IAlMeXVkZSBQYXVsCj4gCgotLSAKRGFuaWVsIFZldHRlcgpT b2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTm91dmVhdSBt YWlsaW5nIGxpc3QKTm91dmVhdUBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9ub3V2ZWF1Cg==