From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 03/18] drm: Extract drm_atomic_state_helper.[hc] Date: Wed, 3 Oct 2018 11:10:05 +0200 Message-ID: <20181003091005.GC23685@phenom.ffwll.local> References: <20181002133526.13685-1-daniel.vetter@ffwll.ch> <20181002133526.13685-4-daniel.vetter@ffwll.ch> <20181002154052.GB9144@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20181002154052.GB9144@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: Daniel Vetter , Intel Graphics Development , DRI Development , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBPY3QgMDIsIDIwMTggYXQgMDY6NDA6NTJQTSArMDMwMCwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+IE9uIFR1ZSwgT2N0IDAyLCAyMDE4IGF0IDAzOjM1OjExUE0gKzAyMDAsIERhbmll bCBWZXR0ZXIgd3JvdGU6Cj4gPiBXZSBhbHJlYWR5IGhhdmUgYSBzZXBhcmF0ZSBvdmVydmlldyBk b2MgZm9yIHRoaXMsIG1ha2VzIHNlbnNlIHRvCj4gPiB1bnRhbmdsZSBpdCBmcm9tIHRoZSBvdmVy YWxsIGF0b21pYyBoZWxwZXJzLgo+ID4gCj4gPiB2MjogUmViYXNlCj4gPiAKPiA+IHYzOiBSZWJh c2UgbW9yZS4KPiAKPiBIb3BlZnVsbHkgdGhlIHJlYmFzZXMgZGlkbid0IGxlYXZlIGFueSBjb2Rl IGNoYW5nZXMgYmVoaW5kLi4uCgpJJ3ZlIHJlZG9uZSB0aGUgbW92ZSBvbiBldmVyeSByZWJhc2Ug Oi0vCgo+IFRvbyBsYXp5IHRvIHJlYWQgaW4gZnVsbCBkZXRhaWwgc28KPiBBY2tlZC1ieTogVmls bGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KClRoYW5rcywgSSds bCBwaWNrIHRoaXMgb25lIHJpZ2h0IHVwIChqdXN0IG5lZWQgdG8gZG91YmxlLWNoZWNrIENJKS4K LURhbmllbAoKPiAKPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVs LnZldHRlckBpbnRlbC5jb20+Cj4gPiAtLS0KPiA+ICBEb2N1bWVudGF0aW9uL2dwdS9kcm0ta21z LWhlbHBlcnMucnN0ICAgICB8ICAxOSArLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgIHwgICAzICstCj4gPiAgZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNf aGVscGVyLmMgICAgICAgfCA1NjYgLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ICBkcml2ZXJzL2dw dS9kcm0vZHJtX2F0b21pY19zdGF0ZV9oZWxwZXIuYyB8IDYwMSArKysrKysrKysrKysrKysrKysr KysrCj4gPiAgaW5jbHVkZS9kcm0vZHJtX2F0b21pY19oZWxwZXIuaCAgICAgICAgICAgfCAgNDQg Ky0KPiA+ICBpbmNsdWRlL2RybS9kcm1fYXRvbWljX3N0YXRlX2hlbHBlci5oICAgICB8ICA4MCAr KysKPiA+ICA2IGZpbGVzIGNoYW5nZWQsIDY5OCBpbnNlcnRpb25zKCspLCA2MTUgZGVsZXRpb25z KC0pCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX3N0 YXRlX2hlbHBlci5jCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvZHJtL2RybV9hdG9t aWNfc3RhdGVfaGVscGVyLmgKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1 L2RybS1rbXMtaGVscGVycy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBlcnMu cnN0Cj4gPiBpbmRleCBmOWNmY2RjZGYwMjQuLjRiNGRjMjM2ZWY2ZiAxMDA2NDQKPiA+IC0tLSBh L0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMtaGVscGVycy5yc3QKPiA+ICsrKyBiL0RvY3VtZW50 YXRpb24vZ3B1L2RybS1rbXMtaGVscGVycy5yc3QKPiA+IEBAIC01OSwxOSArNTksMjggQEAgSW1w bGVtZW50aW5nIEFzeW5jaHJvbm91cyBBdG9taWMgQ29tbWl0Cj4gPiAgLi4ga2VybmVsLWRvYzo6 IGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jCj4gPiAgICAgOmRvYzogaW1wbGVt ZW50aW5nIG5vbmJsb2NraW5nIGNvbW1pdAo+ID4gIAo+ID4gK0hlbHBlciBGdW5jdGlvbnMgUmVm ZXJlbmNlCj4gPiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ICsKPiA+ICsuLiBrZXJu ZWwtZG9jOjogaW5jbHVkZS9kcm0vZHJtX2F0b21pY19oZWxwZXIuaAo+ID4gKyAgIDppbnRlcm5h bDoKPiA+ICsKPiA+ICsuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNf aGVscGVyLmMKPiA+ICsgICA6ZXhwb3J0Ogo+ID4gKwo+ID4gIEF0b21pYyBTdGF0ZSBSZXNldCBh bmQgSW5pdGlhbGl6YXRpb24KPiA+ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCj4gPiAgCj4gPiAtLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWlj X2hlbHBlci5jCj4gPiArLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWlj X3N0YXRlX2hlbHBlci5jCj4gPiAgICAgOmRvYzogYXRvbWljIHN0YXRlIHJlc2V0IGFuZCBpbml0 aWFsaXphdGlvbgo+ID4gIAo+ID4gLUhlbHBlciBGdW5jdGlvbnMgUmVmZXJlbmNlCj4gPiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ICtBdG9taWMgU3RhdGUgSGVscGVyIFJlZmVyZW5j ZQo+ID4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiAgCj4gPiAtLi4ga2VybmVs LWRvYzo6IGluY2x1ZGUvZHJtL2RybV9hdG9taWNfaGVscGVyLmgKPiA+ICsuLiBrZXJuZWwtZG9j OjogaW5jbHVkZS9kcm0vZHJtX2F0b21pY19zdGF0ZV9oZWxwZXIuaAo+ID4gICAgIDppbnRlcm5h bDoKPiA+ICAKPiA+IC0uLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNf aGVscGVyLmMKPiA+ICsuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNf c3RhdGVfaGVscGVyLmMKPiA+ICAgICA6ZXhwb3J0Ogo+ID4gIAo+ID4gIFNpbXBsZSBLTVMgSGVs cGVyIFJlZmVyZW5jZQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ID4gaW5kZXggYmM2YTE2YTNjMzZlLi41NzZiYTk4 NWUxMzggMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ID4gQEAgLTM2LDcgKzM2LDggQEAgZHJtX2ttc19o ZWxwZXIteSA6PSBkcm1fY3J0Y19oZWxwZXIubyBkcm1fZHBfaGVscGVyLm8gZHJtX3Byb2JlX2hl bHBlci5vIFwKPiA+ICAJCWRybV9wbGFuZV9oZWxwZXIubyBkcm1fZHBfbXN0X3RvcG9sb2d5Lm8g ZHJtX2F0b21pY19oZWxwZXIubyBcCj4gPiAgCQlkcm1fa21zX2hlbHBlcl9jb21tb24ubyBkcm1f ZHBfZHVhbF9tb2RlX2hlbHBlci5vIFwKPiA+ICAJCWRybV9zaW1wbGVfa21zX2hlbHBlci5vIGRy bV9tb2Rlc2V0X2hlbHBlci5vIFwKPiA+IC0JCWRybV9zY2RjX2hlbHBlci5vIGRybV9nZW1fZnJh bWVidWZmZXJfaGVscGVyLm8KPiA+ICsJCWRybV9zY2RjX2hlbHBlci5vIGRybV9nZW1fZnJhbWVi dWZmZXJfaGVscGVyLm8gXAo+ID4gKwkJZHJtX2F0b21pY19zdGF0ZV9oZWxwZXIubwo+ID4gIAo+ ID4gIGRybV9rbXNfaGVscGVyLSQoQ09ORklHX0RSTV9QQU5FTF9CUklER0UpICs9IGJyaWRnZS9w YW5lbC5vCj4gPiAgZHJtX2ttc19oZWxwZXItJChDT05GSUdfRFJNX0ZCREVWX0VNVUxBVElPTikg Kz0gZHJtX2ZiX2hlbHBlci5vCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9h dG9taWNfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYwo+ID4g aW5kZXggOGM5M2YzM2ZlOTJmLi5hNWVkYzg3NTcwNTYgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9hdG9taWNfaGVscGVyLmMKPiA+IEBAIC0zMzgyLDU2OSArMzM4MiwzIEBAIGludCBkcm1fYXRv bWljX2hlbHBlcl9wYWdlX2ZsaXBfdGFyZ2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICAJ cmV0dXJuIHJldDsKPiA+ICB9Cj4gPiAgRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9w YWdlX2ZsaXBfdGFyZ2V0KTsKPiA+IC0KPiA+IC0vKioKPiA+IC0gKiBET0M6IGF0b21pYyBzdGF0 ZSByZXNldCBhbmQgaW5pdGlhbGl6YXRpb24KPiA+IC0gKgo+ID4gLSAqIEJvdGggdGhlIGRybSBj b3JlIGFuZCB0aGUgYXRvbWljIGhlbHBlcnMgYXNzdW1lIHRoYXQgdGhlcmUgaXMgYWx3YXlzIHRo ZSBmdWxsCj4gPiAtICogYW5kIGNvcnJlY3QgYXRvbWljIHNvZnR3YXJlIHN0YXRlIGZvciBhbGwg Y29ubmVjdG9ycywgQ1JUQ3MgYW5kIHBsYW5lcwo+ID4gLSAqIGF2YWlsYWJsZS4gV2hpY2ggaXMg YSBiaXQgYSBwcm9ibGVtIG9uIGRyaXZlciBsb2FkIGFuZCBhbHNvIGFmdGVyIHN5c3RlbQo+ID4g LSAqIHN1c3BlbmQuIE9uZSB3YXkgdG8gc29sdmUgdGhpcyBpcyB0byBoYXZlIGEgaGFyZHdhcmUg c3RhdGUgcmVhZC1vdXQKPiA+IC0gKiBpbmZyYXN0cnVjdHVyZSB3aGljaCByZWNvbnN0cnVjdHMg dGhlIGZ1bGwgc29mdHdhcmUgc3RhdGUgKGUuZy4gdGhlIGk5MTUKPiA+IC0gKiBkcml2ZXIpLgo+ ID4gLSAqCj4gPiAtICogVGhlIHNpbXBsZXIgc29sdXRpb24gaXMgdG8ganVzdCByZXNldCB0aGUg c29mdHdhcmUgc3RhdGUgdG8gZXZlcnl0aGluZyBvZmYsCj4gPiAtICogd2hpY2ggaXMgZWFzaWVz dCB0byBkbyBieSBjYWxsaW5nIGRybV9tb2RlX2NvbmZpZ19yZXNldCgpLiBUbyBmYWNpbGl0YXRl IHRoaXMKPiA+IC0gKiB0aGUgYXRvbWljIGhlbHBlcnMgcHJvdmlkZSBkZWZhdWx0IHJlc2V0IGlt cGxlbWVudGF0aW9ucyBmb3IgYWxsIGhvb2tzLgo+ID4gLSAqCj4gPiAtICogT24gdGhlIHVwc2lk ZSB0aGUgcHJlY2lzZSBzdGF0ZSB0cmFja2luZyBvZiBhdG9taWMgc2ltcGxpZmllcyBzeXN0ZW0g c3VzcGVuZAo+ID4gLSAqIGFuZCByZXN1bWUgYSBsb3QuIEZvciBkcml2ZXJzIHVzaW5nIGRybV9t b2RlX2NvbmZpZ19yZXNldCgpIGEgY29tcGxldGUgcmVjaXBlCj4gPiAtICogaXMgaW1wbGVtZW50 ZWQgaW4gZHJtX2F0b21pY19oZWxwZXJfc3VzcGVuZCgpIGFuZCBkcm1fYXRvbWljX2hlbHBlcl9y ZXN1bWUoKS4KPiA+IC0gKiBGb3Igb3RoZXIgZHJpdmVycyB0aGUgYnVpbGRpbmcgYmxvY2tzIGFy ZSBzcGxpdCBvdXQsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbgo+ID4gLSAqIGZvciB0aGVzZSBmdW5j dGlvbnMuCj4gPiAtICovCj4gPiAtCj4gPiAtLyoqCj4gPiAtICogZHJtX2F0b21pY19oZWxwZXJf Y3J0Y19yZXNldCAtIGRlZmF1bHQgJmRybV9jcnRjX2Z1bmNzLnJlc2V0IGhvb2sgZm9yIENSVENz Cj4gPiAtICogQGNydGM6IGRybSBDUlRDCj4gPiAtICoKPiA+IC0gKiBSZXNldHMgdGhlIGF0b21p YyBzdGF0ZSBmb3IgQGNydGMgYnkgZnJlZWluZyB0aGUgc3RhdGUgcG9pbnRlciAod2hpY2ggbWln aHQKPiA+IC0gKiBiZSBOVUxMLCBlLmcuIGF0IGRyaXZlciBsb2FkIHRpbWUpIGFuZCBhbGxvY2F0 aW5nIGEgbmV3IGVtcHR5IHN0YXRlIG9iamVjdC4KPiA+IC0gKi8KPiA+IC12b2lkIGRybV9hdG9t aWNfaGVscGVyX2NydGNfcmVzZXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ID4gLXsKPiA+IC0J aWYgKGNydGMtPnN0YXRlKQo+ID4gLQkJX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lf c3RhdGUoY3J0Yy0+c3RhdGUpOwo+ID4gLQo+ID4gLQlrZnJlZShjcnRjLT5zdGF0ZSk7Cj4gPiAt CWNydGMtPnN0YXRlID0ga3phbGxvYyhzaXplb2YoKmNydGMtPnN0YXRlKSwgR0ZQX0tFUk5FTCk7 Cj4gPiAtCj4gPiAtCWlmIChjcnRjLT5zdGF0ZSkKPiA+IC0JCWNydGMtPnN0YXRlLT5jcnRjID0g Y3J0YzsKPiA+IC19Cj4gPiAtRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9jcnRjX3Jl c2V0KTsKPiA+IC0KPiA+IC0vKioKPiA+IC0gKiBfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZHVw bGljYXRlX3N0YXRlIC0gY29weSBhdG9taWMgQ1JUQyBzdGF0ZQo+ID4gLSAqIEBjcnRjOiBDUlRD IG9iamVjdAo+ID4gLSAqIEBzdGF0ZTogYXRvbWljIENSVEMgc3RhdGUKPiA+IC0gKgo+ID4gLSAq IENvcGllcyBhdG9taWMgc3RhdGUgZnJvbSBhIENSVEMncyBjdXJyZW50IHN0YXRlIGFuZCByZXNl dHMgaW5mZXJyZWQgdmFsdWVzLgo+ID4gLSAqIFRoaXMgaXMgdXNlZnVsIGZvciBkcml2ZXJzIHRo YXQgc3ViY2xhc3MgdGhlIENSVEMgc3RhdGUuCj4gPiAtICovCj4gPiAtdm9pZCBfX2RybV9hdG9t aWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ IC0JCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCj4gPiAtewo+ID4gLQlt ZW1jcHkoc3RhdGUsIGNydGMtPnN0YXRlLCBzaXplb2YoKnN0YXRlKSk7Cj4gPiAtCj4gPiAtCWlm IChzdGF0ZS0+bW9kZV9ibG9iKQo+ID4gLQkJZHJtX3Byb3BlcnR5X2Jsb2JfZ2V0KHN0YXRlLT5t b2RlX2Jsb2IpOwo+ID4gLQlpZiAoc3RhdGUtPmRlZ2FtbWFfbHV0KQo+ID4gLQkJZHJtX3Byb3Bl cnR5X2Jsb2JfZ2V0KHN0YXRlLT5kZWdhbW1hX2x1dCk7Cj4gPiAtCWlmIChzdGF0ZS0+Y3RtKQo+ ID4gLQkJZHJtX3Byb3BlcnR5X2Jsb2JfZ2V0KHN0YXRlLT5jdG0pOwo+ID4gLQlpZiAoc3RhdGUt PmdhbW1hX2x1dCkKPiA+IC0JCWRybV9wcm9wZXJ0eV9ibG9iX2dldChzdGF0ZS0+Z2FtbWFfbHV0 KTsKPiA+IC0Jc3RhdGUtPm1vZGVfY2hhbmdlZCA9IGZhbHNlOwo+ID4gLQlzdGF0ZS0+YWN0aXZl X2NoYW5nZWQgPSBmYWxzZTsKPiA+IC0Jc3RhdGUtPnBsYW5lc19jaGFuZ2VkID0gZmFsc2U7Cj4g PiAtCXN0YXRlLT5jb25uZWN0b3JzX2NoYW5nZWQgPSBmYWxzZTsKPiA+IC0Jc3RhdGUtPmNvbG9y X21nbXRfY2hhbmdlZCA9IGZhbHNlOwo+ID4gLQlzdGF0ZS0+enBvc19jaGFuZ2VkID0gZmFsc2U7 Cj4gPiAtCXN0YXRlLT5jb21taXQgPSBOVUxMOwo+ID4gLQlzdGF0ZS0+ZXZlbnQgPSBOVUxMOwo+ ID4gLQlzdGF0ZS0+cGFnZWZsaXBfZmxhZ3MgPSAwOwo+ID4gLX0KPiA+IC1FWFBPUlRfU1lNQk9M KF9fZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUpOwo+ID4gLQo+ID4gLS8q Kgo+ID4gLSAqIGRybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlIC0gZGVmYXVs dCBzdGF0ZSBkdXBsaWNhdGUgaG9vawo+ID4gLSAqIEBjcnRjOiBkcm0gQ1JUQwo+ID4gLSAqCj4g PiAtICogRGVmYXVsdCBDUlRDIHN0YXRlIGR1cGxpY2F0ZSBob29rIGZvciBkcml2ZXJzIHdoaWNo IGRvbid0IGhhdmUgdGhlaXIgb3duCj4gPiAtICogc3ViY2xhc3NlZCBDUlRDIHN0YXRlIHN0cnVj dHVyZS4KPiA+IC0gKi8KPiA+IC1zdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKgo+ID4gLWRybV9hdG9t aWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+ IC17Cj4gPiAtCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGU7Cj4gPiAtCj4gPiAtCWlmIChX QVJOX09OKCFjcnRjLT5zdGF0ZSkpCj4gPiAtCQlyZXR1cm4gTlVMTDsKPiA+IC0KPiA+IC0Jc3Rh dGUgPSBrbWFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKPiA+IC0JaWYgKHN0YXRl KQo+ID4gLQkJX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShjcnRjLCBz dGF0ZSk7Cj4gPiAtCj4gPiAtCXJldHVybiBzdGF0ZTsKPiA+IC19Cj4gPiAtRVhQT1JUX1NZTUJP TChkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSk7Cj4gPiAtCj4gPiAtLyoq Cj4gPiAtICogX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUgLSByZWxlYXNl IENSVEMgc3RhdGUKPiA+IC0gKiBAc3RhdGU6IENSVEMgc3RhdGUgb2JqZWN0IHRvIHJlbGVhc2UK PiA+IC0gKgo+ID4gLSAqIFJlbGVhc2VzIGFsbCByZXNvdXJjZXMgc3RvcmVkIGluIHRoZSBDUlRD IHN0YXRlIHdpdGhvdXQgYWN0dWFsbHkgZnJlZWluZwo+ID4gLSAqIHRoZSBtZW1vcnkgb2YgdGhl IENSVEMgc3RhdGUuIFRoaXMgaXMgdXNlZnVsIGZvciBkcml2ZXJzIHRoYXQgc3ViY2xhc3MgdGhl Cj4gPiAtICogQ1JUQyBzdGF0ZS4KPiA+IC0gKi8KPiA+IC12b2lkIF9fZHJtX2F0b21pY19oZWxw ZXJfY3J0Y19kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCj4gPiAt ewo+ID4gLQlpZiAoc3RhdGUtPmNvbW1pdCkgewo+ID4gLQkJLyoKPiA+IC0JCSAqIEluIHRoZSBl dmVudCB0aGF0IGEgbm9uLWJsb2NraW5nIGNvbW1pdCByZXR1cm5zCj4gPiAtCQkgKiAtRVJFU1RB UlRTWVMgYmVmb3JlIHRoZSBjb21taXRfdGFpbCB3b3JrIGlzIHF1ZXVlZCwgd2Ugd2lsbAo+ID4g LQkJICogaGF2ZSBhbiBleHRyYSByZWZlcmVuY2UgdG8gdGhlIGNvbW1pdCBvYmplY3QuIFJlbGVh c2UgaXQsIGlmCj4gPiAtCQkgKiB0aGUgZXZlbnQgaGFzIG5vdCBiZWVuIGNvbnN1bWVkIGJ5IHRo ZSB3b3JrZXIuCj4gPiAtCQkgKgo+ID4gLQkJICogc3RhdGUtPmV2ZW50IG1heSBiZSBmcmVlZCwg c28gd2UgY2FuJ3QgZGlyZWN0bHkgbG9vayBhdAo+ID4gLQkJICogc3RhdGUtPmV2ZW50LT5iYXNl LmNvbXBsZXRpb24uCj4gPiAtCQkgKi8KPiA+IC0JCWlmIChzdGF0ZS0+ZXZlbnQgJiYgc3RhdGUt PmNvbW1pdC0+YWJvcnRfY29tcGxldGlvbikKPiA+IC0JCQlkcm1fY3J0Y19jb21taXRfcHV0KHN0 YXRlLT5jb21taXQpOwo+ID4gLQo+ID4gLQkJa2ZyZWUoc3RhdGUtPmNvbW1pdC0+ZXZlbnQpOwo+ ID4gLQkJc3RhdGUtPmNvbW1pdC0+ZXZlbnQgPSBOVUxMOwo+ID4gLQo+ID4gLQkJZHJtX2NydGNf Y29tbWl0X3B1dChzdGF0ZS0+Y29tbWl0KTsKPiA+IC0JfQo+ID4gLQo+ID4gLQlkcm1fcHJvcGVy dHlfYmxvYl9wdXQoc3RhdGUtPm1vZGVfYmxvYik7Cj4gPiAtCWRybV9wcm9wZXJ0eV9ibG9iX3B1 dChzdGF0ZS0+ZGVnYW1tYV9sdXQpOwo+ID4gLQlkcm1fcHJvcGVydHlfYmxvYl9wdXQoc3RhdGUt PmN0bSk7Cj4gPiAtCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChzdGF0ZS0+Z2FtbWFfbHV0KTsKPiA+ IC19Cj4gPiAtRVhQT1JUX1NZTUJPTChfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9z dGF0ZSk7Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICogZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0 cm95X3N0YXRlIC0gZGVmYXVsdCBzdGF0ZSBkZXN0cm95IGhvb2sKPiA+IC0gKiBAY3J0YzogZHJt IENSVEMKPiA+IC0gKiBAc3RhdGU6IENSVEMgc3RhdGUgb2JqZWN0IHRvIHJlbGVhc2UKPiA+IC0g Kgo+ID4gLSAqIERlZmF1bHQgQ1JUQyBzdGF0ZSBkZXN0cm95IGhvb2sgZm9yIGRyaXZlcnMgd2hp Y2ggZG9uJ3QgaGF2ZSB0aGVpciBvd24KPiA+IC0gKiBzdWJjbGFzc2VkIENSVEMgc3RhdGUgc3Ry dWN0dXJlLgo+ID4gLSAqLwo+ID4gLXZvaWQgZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0cm95 X3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+IC0JCQkJCSAgc3RydWN0IGRybV9jcnRj X3N0YXRlICpzdGF0ZSkKPiA+IC17Cj4gPiAtCV9fZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0 cm95X3N0YXRlKHN0YXRlKTsKPiA+IC0Ja2ZyZWUoc3RhdGUpOwo+ID4gLX0KPiA+IC1FWFBPUlRf U1lNQk9MKGRybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZSk7Cj4gPiAtCj4gPiAt LyoqCj4gPiAtICogX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9yZXNldCAtIHJlc2V0cyBwbGFu ZXMgc3RhdGUgdG8gZGVmYXVsdCB2YWx1ZXMKPiA+IC0gKiBAcGxhbmU6IHBsYW5lIG9iamVjdCwg bXVzdCBub3QgYmUgTlVMTAo+ID4gLSAqIEBzdGF0ZTogYXRvbWljIHBsYW5lIHN0YXRlLCBtdXN0 IG5vdCBiZSBOVUxMCj4gPiAtICoKPiA+IC0gKiBJbml0aWFsaXplcyBwbGFuZSBzdGF0ZSB0byBk ZWZhdWx0LiBUaGlzIGlzIHVzZWZ1bCBmb3IgZHJpdmVycyB0aGF0IHN1YmNsYXNzCj4gPiAtICog dGhlIHBsYW5lIHN0YXRlLgo+ID4gLSAqLwo+ID4gLXZvaWQgX19kcm1fYXRvbWljX2hlbHBlcl9w bGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+IC0JCQkJICAgICBzdHJ1Y3Qg ZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiA+IC17Cj4gPiAtCXN0YXRlLT5wbGFuZSA9IHBsYW5l Owo+ID4gLQlzdGF0ZS0+cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMDsKPiA+IC0KPiA+IC0J c3RhdGUtPmFscGhhID0gRFJNX0JMRU5EX0FMUEhBX09QQVFVRTsKPiA+IC0Jc3RhdGUtPnBpeGVs X2JsZW5kX21vZGUgPSBEUk1fTU9ERV9CTEVORF9QUkVNVUxUSTsKPiA+IC0KPiA+IC0JcGxhbmUt PnN0YXRlID0gc3RhdGU7Cj4gPiAtfQo+ID4gLUVYUE9SVF9TWU1CT0woX19kcm1fYXRvbWljX2hl bHBlcl9wbGFuZV9yZXNldCk7Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICogZHJtX2F0b21pY19oZWxw ZXJfcGxhbmVfcmVzZXQgLSBkZWZhdWx0ICZkcm1fcGxhbmVfZnVuY3MucmVzZXQgaG9vayBmb3Ig cGxhbmVzCj4gPiAtICogQHBsYW5lOiBkcm0gcGxhbmUKPiA+IC0gKgo+ID4gLSAqIFJlc2V0cyB0 aGUgYXRvbWljIHN0YXRlIGZvciBAcGxhbmUgYnkgZnJlZWluZyB0aGUgc3RhdGUgcG9pbnRlciAo d2hpY2ggbWlnaHQKPiA+IC0gKiBiZSBOVUxMLCBlLmcuIGF0IGRyaXZlciBsb2FkIHRpbWUpIGFu ZCBhbGxvY2F0aW5nIGEgbmV3IGVtcHR5IHN0YXRlIG9iamVjdC4KPiA+IC0gKi8KPiA+IC12b2lk IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQo+ ID4gLXsKPiA+IC0JaWYgKHBsYW5lLT5zdGF0ZSkKPiA+IC0JCV9fZHJtX2F0b21pY19oZWxwZXJf cGxhbmVfZGVzdHJveV9zdGF0ZShwbGFuZS0+c3RhdGUpOwo+ID4gLQo+ID4gLQlrZnJlZShwbGFu ZS0+c3RhdGUpOwo+ID4gLQlwbGFuZS0+c3RhdGUgPSBremFsbG9jKHNpemVvZigqcGxhbmUtPnN0 YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gPiAtCWlmIChwbGFuZS0+c3RhdGUpCj4gPiAtCQlfX2RybV9h dG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0KHBsYW5lLCBwbGFuZS0+c3RhdGUpOwo+ID4gLX0KPiA+ IC1FWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0KTsKPiA+IC0KPiA+ IC0vKioKPiA+IC0gKiBfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSAt IGNvcHkgYXRvbWljIHBsYW5lIHN0YXRlCj4gPiAtICogQHBsYW5lOiBwbGFuZSBvYmplY3QKPiA+ IC0gKiBAc3RhdGU6IGF0b21pYyBwbGFuZSBzdGF0ZQo+ID4gLSAqCj4gPiAtICogQ29waWVzIGF0 b21pYyBzdGF0ZSBmcm9tIGEgcGxhbmUncyBjdXJyZW50IHN0YXRlLiBUaGlzIGlzIHVzZWZ1bCBm b3IKPiA+IC0gKiBkcml2ZXJzIHRoYXQgc3ViY2xhc3MgdGhlIHBsYW5lIHN0YXRlLgo+ID4gLSAq Lwo+ID4gLXZvaWQgX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUoc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gPiAtCQkJCQkgICAgICAgc3RydWN0IGRybV9wbGFuZV9z dGF0ZSAqc3RhdGUpCj4gPiAtewo+ID4gLQltZW1jcHkoc3RhdGUsIHBsYW5lLT5zdGF0ZSwgc2l6 ZW9mKCpzdGF0ZSkpOwo+ID4gLQo+ID4gLQlpZiAoc3RhdGUtPmZiKQo+ID4gLQkJZHJtX2ZyYW1l YnVmZmVyX2dldChzdGF0ZS0+ZmIpOwo+ID4gLQo+ID4gLQlzdGF0ZS0+ZmVuY2UgPSBOVUxMOwo+ ID4gLQlzdGF0ZS0+Y29tbWl0ID0gTlVMTDsKPiA+IC19Cj4gPiAtRVhQT1JUX1NZTUJPTChfX2Ry bV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSk7Cj4gPiAtCj4gPiAtLyoqCj4g PiAtICogZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlIC0gZGVmYXVsdCBz dGF0ZSBkdXBsaWNhdGUgaG9vawo+ID4gLSAqIEBwbGFuZTogZHJtIHBsYW5lCj4gPiAtICoKPiA+ IC0gKiBEZWZhdWx0IHBsYW5lIHN0YXRlIGR1cGxpY2F0ZSBob29rIGZvciBkcml2ZXJzIHdoaWNo IGRvbid0IGhhdmUgdGhlaXIgb3duCj4gPiAtICogc3ViY2xhc3NlZCBwbGFuZSBzdGF0ZSBzdHJ1 Y3R1cmUuCj4gPiAtICovCj4gPiAtc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqCj4gPiAtZHJtX2F0 b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l KQo+ID4gLXsKPiA+IC0Jc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGU7Cj4gPiAtCj4gPiAt CWlmIChXQVJOX09OKCFwbGFuZS0+c3RhdGUpKQo+ID4gLQkJcmV0dXJuIE5VTEw7Cj4gPiAtCj4g PiAtCXN0YXRlID0ga21hbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gPiAtCWlm IChzdGF0ZSkKPiA+IC0JCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRl KHBsYW5lLCBzdGF0ZSk7Cj4gPiAtCj4gPiAtCXJldHVybiBzdGF0ZTsKPiA+IC19Cj4gPiAtRVhQ T1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUpOwo+ID4g LQo+ID4gLS8qKgo+ID4gLSAqIF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0 ZSAtIHJlbGVhc2UgcGxhbmUgc3RhdGUKPiA+IC0gKiBAc3RhdGU6IHBsYW5lIHN0YXRlIG9iamVj dCB0byByZWxlYXNlCj4gPiAtICoKPiA+IC0gKiBSZWxlYXNlcyBhbGwgcmVzb3VyY2VzIHN0b3Jl ZCBpbiB0aGUgcGxhbmUgc3RhdGUgd2l0aG91dCBhY3R1YWxseSBmcmVlaW5nCj4gPiAtICogdGhl IG1lbW9yeSBvZiB0aGUgcGxhbmUgc3RhdGUuIFRoaXMgaXMgdXNlZnVsIGZvciBkcml2ZXJzIHRo YXQgc3ViY2xhc3MgdGhlCj4gPiAtICogcGxhbmUgc3RhdGUuCj4gPiAtICovCj4gPiAtdm9pZCBf X2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wbGFuZV9z dGF0ZSAqc3RhdGUpCj4gPiAtewo+ID4gLQlpZiAoc3RhdGUtPmZiKQo+ID4gLQkJZHJtX2ZyYW1l YnVmZmVyX3B1dChzdGF0ZS0+ZmIpOwo+ID4gLQo+ID4gLQlpZiAoc3RhdGUtPmZlbmNlKQo+ID4g LQkJZG1hX2ZlbmNlX3B1dChzdGF0ZS0+ZmVuY2UpOwo+ID4gLQo+ID4gLQlpZiAoc3RhdGUtPmNv bW1pdCkKPiA+IC0JCWRybV9jcnRjX2NvbW1pdF9wdXQoc3RhdGUtPmNvbW1pdCk7Cj4gPiAtfQo+ ID4gLUVYUE9SVF9TWU1CT0woX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRl KTsKPiA+IC0KPiA+IC0vKioKPiA+IC0gKiBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95 X3N0YXRlIC0gZGVmYXVsdCBzdGF0ZSBkZXN0cm95IGhvb2sKPiA+IC0gKiBAcGxhbmU6IGRybSBw bGFuZQo+ID4gLSAqIEBzdGF0ZTogcGxhbmUgc3RhdGUgb2JqZWN0IHRvIHJlbGVhc2UKPiA+IC0g Kgo+ID4gLSAqIERlZmF1bHQgcGxhbmUgc3RhdGUgZGVzdHJveSBob29rIGZvciBkcml2ZXJzIHdo aWNoIGRvbid0IGhhdmUgdGhlaXIgb3duCj4gPiAtICogc3ViY2xhc3NlZCBwbGFuZSBzdGF0ZSBz dHJ1Y3R1cmUuCj4gPiAtICovCj4gPiAtdm9pZCBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0 cm95X3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ID4gLQkJCQkJICAgc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4gPiAtewo+ID4gLQlfX2RybV9hdG9taWNfaGVscGVyX3Bs YW5lX2Rlc3Ryb3lfc3RhdGUoc3RhdGUpOwo+ID4gLQlrZnJlZShzdGF0ZSk7Cj4gPiAtfQo+ID4g LUVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZSk7Cj4g PiAtCj4gPiAtLyoqCj4gPiAtICogX19kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQg LSByZXNldCBzdGF0ZSBvbiBjb25uZWN0b3IKPiA+IC0gKiBAY29ubmVjdG9yOiBkcm0gY29ubmVj dG9yCj4gPiAtICogQGNvbm5fc3RhdGU6IGNvbm5lY3RvciBzdGF0ZSB0byBhc3NpZ24KPiA+IC0g Kgo+ID4gLSAqIEluaXRpYWxpemVzIHRoZSBuZXdseSBhbGxvY2F0ZWQgQGNvbm5fc3RhdGUgYW5k IGFzc2lnbnMgaXQgdG8KPiA+IC0gKiB0aGUgJmRybV9jb25lY3Rvci0+c3RhdGUgcG9pbnRlciBv ZiBAY29ubmVjdG9yLCB1c3VhbGx5IHJlcXVpcmVkIHdoZW4KPiA+IC0gKiBpbml0aWFsaXppbmcg dGhlIGRyaXZlcnMgb3Igd2hlbiBjYWxsZWQgZnJvbSB0aGUgJmRybV9jb25uZWN0b3JfZnVuY3Mu cmVzZXQKPiA+IC0gKiBob29rLgo+ID4gLSAqCj4gPiAtICogVGhpcyBpcyB1c2VmdWwgZm9yIGRy aXZlcnMgdGhhdCBzdWJjbGFzcyB0aGUgY29ubmVjdG9yIHN0YXRlLgo+ID4gLSAqLwo+ID4gLXZv aWQKPiA+IC1fX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldChzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLAo+ID4gLQkJCQkgICAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3Rh dGUgKmNvbm5fc3RhdGUpCj4gPiAtewo+ID4gLQlpZiAoY29ubl9zdGF0ZSkKPiA+IC0JCWNvbm5f c3RhdGUtPmNvbm5lY3RvciA9IGNvbm5lY3RvcjsKPiA+IC0KPiA+IC0JY29ubmVjdG9yLT5zdGF0 ZSA9IGNvbm5fc3RhdGU7Cj4gPiAtfQo+ID4gLUVYUE9SVF9TWU1CT0woX19kcm1fYXRvbWljX2hl bHBlcl9jb25uZWN0b3JfcmVzZXQpOwo+ID4gLQo+ID4gLS8qKgo+ID4gLSAqIGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9yZXNldCAtIGRlZmF1bHQgJmRybV9jb25uZWN0b3JfZnVuY3MucmVz ZXQgaG9vayBmb3IgY29ubmVjdG9ycwo+ID4gLSAqIEBjb25uZWN0b3I6IGRybSBjb25uZWN0b3IK PiA+IC0gKgo+ID4gLSAqIFJlc2V0cyB0aGUgYXRvbWljIHN0YXRlIGZvciBAY29ubmVjdG9yIGJ5 IGZyZWVpbmcgdGhlIHN0YXRlIHBvaW50ZXIgKHdoaWNoCj4gPiAtICogbWlnaHQgYmUgTlVMTCwg ZS5nLiBhdCBkcml2ZXIgbG9hZCB0aW1lKSBhbmQgYWxsb2NhdGluZyBhIG5ldyBlbXB0eSBzdGF0 ZQo+ID4gLSAqIG9iamVjdC4KPiA+IC0gKi8KPiA+IC12b2lkIGRybV9hdG9taWNfaGVscGVyX2Nv bm5lY3Rvcl9yZXNldChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ID4gLXsKPiA+ IC0Jc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUgPQo+ID4gLQkJa3phbGxv YyhzaXplb2YoKmNvbm5fc3RhdGUpLCBHRlBfS0VSTkVMKTsKPiA+IC0KPiA+IC0JaWYgKGNvbm5l Y3Rvci0+c3RhdGUpCj4gPiAtCQlfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95 X3N0YXRlKGNvbm5lY3Rvci0+c3RhdGUpOwo+ID4gLQo+ID4gLQlrZnJlZShjb25uZWN0b3ItPnN0 YXRlKTsKPiA+IC0JX19kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQoY29ubmVjdG9y LCBjb25uX3N0YXRlKTsKPiA+IC19Cj4gPiAtRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBl cl9jb25uZWN0b3JfcmVzZXQpOwo+ID4gLQo+ID4gLS8qKgo+ID4gLSAqIF9fZHJtX2F0b21pY19o ZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSAtIGNvcHkgYXRvbWljIGNvbm5lY3RvciBz dGF0ZQo+ID4gLSAqIEBjb25uZWN0b3I6IGNvbm5lY3RvciBvYmplY3QKPiA+IC0gKiBAc3RhdGU6 IGF0b21pYyBjb25uZWN0b3Igc3RhdGUKPiA+IC0gKgo+ID4gLSAqIENvcGllcyBhdG9taWMgc3Rh dGUgZnJvbSBhIGNvbm5lY3RvcidzIGN1cnJlbnQgc3RhdGUuIFRoaXMgaXMgdXNlZnVsIGZvcgo+ ID4gLSAqIGRyaXZlcnMgdGhhdCBzdWJjbGFzcyB0aGUgY29ubmVjdG9yIHN0YXRlLgo+ID4gLSAq Lwo+ID4gLXZvaWQKPiA+IC1fX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVf c3RhdGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+IC0JCQkJCSAgICBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUpCj4gPiAtewo+ID4gLQltZW1jcHkoc3RhdGUs IGNvbm5lY3Rvci0+c3RhdGUsIHNpemVvZigqc3RhdGUpKTsKPiA+IC0JaWYgKHN0YXRlLT5jcnRj KQo+ID4gLQkJZHJtX2Nvbm5lY3Rvcl9nZXQoY29ubmVjdG9yKTsKPiA+IC0Jc3RhdGUtPmNvbW1p dCA9IE5VTEw7Cj4gPiAtCj4gPiAtCS8qIERvbid0IGNvcHkgb3ZlciBhIHdyaXRlYmFjayBqb2Is IHRoZXkgYXJlIHVzZWQgb25seSBvbmNlICovCj4gPiAtCXN0YXRlLT53cml0ZWJhY2tfam9iID0g TlVMTDsKPiA+IC19Cj4gPiAtRVhQT1JUX1NZTUJPTChfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5l Y3Rvcl9kdXBsaWNhdGVfc3RhdGUpOwo+ID4gLQo+ID4gLS8qKgo+ID4gLSAqIGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUgLSBkZWZhdWx0IHN0YXRlIGR1cGxpY2F0 ZSBob29rCj4gPiAtICogQGNvbm5lY3RvcjogZHJtIGNvbm5lY3Rvcgo+ID4gLSAqCj4gPiAtICog RGVmYXVsdCBjb25uZWN0b3Igc3RhdGUgZHVwbGljYXRlIGhvb2sgZm9yIGRyaXZlcnMgd2hpY2gg ZG9uJ3QgaGF2ZSB0aGVpciBvd24KPiA+IC0gKiBzdWJjbGFzc2VkIGNvbm5lY3RvciBzdGF0ZSBz dHJ1Y3R1cmUuCj4gPiAtICovCj4gPiAtc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKgo+ID4g LWRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcikKPiA+IC17Cj4gPiAtCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0 YXRlICpzdGF0ZTsKPiA+IC0KPiA+IC0JaWYgKFdBUk5fT04oIWNvbm5lY3Rvci0+c3RhdGUpKQo+ ID4gLQkJcmV0dXJuIE5VTEw7Cj4gPiAtCj4gPiAtCXN0YXRlID0ga21hbGxvYyhzaXplb2YoKnN0 YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gPiAtCWlmIChzdGF0ZSkKPiA+IC0JCV9fZHJtX2F0b21pY19o ZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZShjb25uZWN0b3IsIHN0YXRlKTsKPiA+IC0K PiA+IC0JcmV0dXJuIHN0YXRlOwo+ID4gLX0KPiA+IC1FWFBPUlRfU1lNQk9MKGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUpOwo+ID4gLQo+ID4gLS8qKgo+ID4gLSAq IGRybV9hdG9taWNfaGVscGVyX2R1cGxpY2F0ZV9zdGF0ZSAtIGR1cGxpY2F0ZSBhbiBhdG9taWMg c3RhdGUgb2JqZWN0Cj4gPiAtICogQGRldjogRFJNIGRldmljZQo+ID4gLSAqIEBjdHg6IGxvY2sg YWNxdWlzaXRpb24gY29udGV4dAo+ID4gLSAqCj4gPiAtICogTWFrZXMgYSBjb3B5IG9mIHRoZSBj dXJyZW50IGF0b21pYyBzdGF0ZSBieSBsb29waW5nIG92ZXIgYWxsIG9iamVjdHMgYW5kCj4gPiAt ICogZHVwbGljYXRpbmcgdGhlaXIgcmVzcGVjdGl2ZSBzdGF0ZXMuIFRoaXMgaXMgdXNlZCBmb3Ig ZXhhbXBsZSBieSBzdXNwZW5kLwo+ID4gLSAqIHJlc3VtZSBzdXBwb3J0IGNvZGUgdG8gc2F2ZSB0 aGUgc3RhdGUgcHJpb3IgdG8gc3VzcGVuZCBzdWNoIHRoYXQgaXQgY2FuCj4gPiAtICogYmUgcmVz dG9yZWQgdXBvbiByZXN1bWUuCj4gPiAtICoKPiA+IC0gKiBOb3RlIHRoYXQgdGhpcyB0cmVhdHMg YXRvbWljIHN0YXRlIGFzIHBlcnNpc3RlbnQgYmV0d2VlbiBzYXZlIGFuZCByZXN0b3JlLgo+ID4g LSAqIERyaXZlcnMgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGlzIGlzIHBvc3NpYmxlIGFuZCB3b24n dCByZXN1bHQgaW4gY29uZnVzaW9uCj4gPiAtICogb3IgZXJyb25lb3VzIGJlaGF2aW91ci4KPiA+ IC0gKgo+ID4gLSAqIE5vdGUgdGhhdCBpZiBjYWxsZXJzIGhhdmVuJ3QgYWxyZWFkeSBhY3F1aXJl ZCBhbGwgbW9kZXNldCBsb2NrcyB0aGlzIG1pZ2h0Cj4gPiAtICogcmV0dXJuIC1FREVBRExLLCB3 aGljaCBtdXN0IGJlIGhhbmRsZWQgYnkgY2FsbGluZyBkcm1fbW9kZXNldF9iYWNrb2ZmKCkuCj4g PiAtICoKPiA+IC0gKiBSZXR1cm5zOgo+ID4gLSAqIEEgcG9pbnRlciB0byB0aGUgY29weSBvZiB0 aGUgYXRvbWljIHN0YXRlIG9iamVjdCBvbiBzdWNjZXNzIG9yIGFuCj4gPiAtICogRVJSX1BUUigp LWVuY29kZWQgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ID4gLSAqCj4gPiAtICogU2VlIGFsc286 Cj4gPiAtICogZHJtX2F0b21pY19oZWxwZXJfc3VzcGVuZCgpLCBkcm1fYXRvbWljX2hlbHBlcl9y ZXN1bWUoKQo+ID4gLSAqLwo+ID4gLXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICoKPiA+IC1kcm1f YXRvbWljX2hlbHBlcl9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ IC0JCQkJICBzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggKmN0eCkKPiA+IC17Cj4gPiAt CXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKPiA+IC0Jc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm47Cj4gPiAtCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3RfaXRlciBjb25uX2l0ZXI7 Cj4gPiAtCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ID4gLQlzdHJ1Y3QgZHJtX2NydGMgKmNy dGM7Cj4gPiAtCWludCBlcnIgPSAwOwo+ID4gLQo+ID4gLQlzdGF0ZSA9IGRybV9hdG9taWNfc3Rh dGVfYWxsb2MoZGV2KTsKPiA+IC0JaWYgKCFzdGF0ZSkKPiA+IC0JCXJldHVybiBFUlJfUFRSKC1F Tk9NRU0pOwo+ID4gLQo+ID4gLQlzdGF0ZS0+YWNxdWlyZV9jdHggPSBjdHg7Cj4gPiAtCj4gPiAt CWRybV9mb3JfZWFjaF9jcnRjKGNydGMsIGRldikgewo+ID4gLQkJc3RydWN0IGRybV9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlOwo+ID4gLQo+ID4gLQkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0 X2NydGNfc3RhdGUoc3RhdGUsIGNydGMpOwo+ID4gLQkJaWYgKElTX0VSUihjcnRjX3N0YXRlKSkg ewo+ID4gLQkJCWVyciA9IFBUUl9FUlIoY3J0Y19zdGF0ZSk7Cj4gPiAtCQkJZ290byBmcmVlOwo+ ID4gLQkJfQo+ID4gLQl9Cj4gPiAtCj4gPiAtCWRybV9mb3JfZWFjaF9wbGFuZShwbGFuZSwgZGV2 KSB7Cj4gPiAtCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKPiA+IC0KPiA+ IC0JCXBsYW5lX3N0YXRlID0gZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUoc3RhdGUsIHBsYW5l KTsKPiA+IC0JCWlmIChJU19FUlIocGxhbmVfc3RhdGUpKSB7Cj4gPiAtCQkJZXJyID0gUFRSX0VS UihwbGFuZV9zdGF0ZSk7Cj4gPiAtCQkJZ290byBmcmVlOwo+ID4gLQkJfQo+ID4gLQl9Cj4gPiAt Cj4gPiAtCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2JlZ2luKGRldiwgJmNvbm5faXRlcik7Cj4g PiAtCWRybV9mb3JfZWFjaF9jb25uZWN0b3JfaXRlcihjb25uLCAmY29ubl9pdGVyKSB7Cj4gPiAt CQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZTsKPiA+IC0KPiA+IC0JCWNv bm5fc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUsIGNvbm4pOwo+ ID4gLQkJaWYgKElTX0VSUihjb25uX3N0YXRlKSkgewo+ID4gLQkJCWVyciA9IFBUUl9FUlIoY29u bl9zdGF0ZSk7Cj4gPiAtCQkJZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfZW5kKCZjb25uX2l0ZXIp Owo+ID4gLQkJCWdvdG8gZnJlZTsKPiA+IC0JCX0KPiA+IC0JfQo+ID4gLQlkcm1fY29ubmVjdG9y X2xpc3RfaXRlcl9lbmQoJmNvbm5faXRlcik7Cj4gPiAtCj4gPiAtCS8qIGNsZWFyIHRoZSBhY3F1 aXJlIGNvbnRleHQgc28gdGhhdCBpdCBpc24ndCBhY2NpZGVudGFsbHkgcmV1c2VkICovCj4gPiAt CXN0YXRlLT5hY3F1aXJlX2N0eCA9IE5VTEw7Cj4gPiAtCj4gPiAtZnJlZToKPiA+IC0JaWYgKGVy ciA8IDApIHsKPiA+IC0JCWRybV9hdG9taWNfc3RhdGVfcHV0KHN0YXRlKTsKPiA+IC0JCXN0YXRl ID0gRVJSX1BUUihlcnIpOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCXJldHVybiBzdGF0ZTsKPiA+IC19 Cj4gPiAtRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9kdXBsaWNhdGVfc3RhdGUpOwo+ ID4gLQo+ID4gLS8qKgo+ID4gLSAqIF9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ry b3lfc3RhdGUgLSByZWxlYXNlIGNvbm5lY3RvciBzdGF0ZQo+ID4gLSAqIEBzdGF0ZTogY29ubmVj dG9yIHN0YXRlIG9iamVjdCB0byByZWxlYXNlCj4gPiAtICoKPiA+IC0gKiBSZWxlYXNlcyBhbGwg cmVzb3VyY2VzIHN0b3JlZCBpbiB0aGUgY29ubmVjdG9yIHN0YXRlIHdpdGhvdXQgYWN0dWFsbHkK PiA+IC0gKiBmcmVlaW5nIHRoZSBtZW1vcnkgb2YgdGhlIGNvbm5lY3RvciBzdGF0ZS4gVGhpcyBp cyB1c2VmdWwgZm9yIGRyaXZlcnMgdGhhdAo+ID4gLSAqIHN1YmNsYXNzIHRoZSBjb25uZWN0b3Ig c3RhdGUuCj4gPiAtICovCj4gPiAtdm9pZAo+ID4gLV9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVj dG9yX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlKQo+ID4g LXsKPiA+IC0JaWYgKHN0YXRlLT5jcnRjKQo+ID4gLQkJZHJtX2Nvbm5lY3Rvcl9wdXQoc3RhdGUt PmNvbm5lY3Rvcik7Cj4gPiAtCj4gPiAtCWlmIChzdGF0ZS0+Y29tbWl0KQo+ID4gLQkJZHJtX2Ny dGNfY29tbWl0X3B1dChzdGF0ZS0+Y29tbWl0KTsKPiA+IC19Cj4gPiAtRVhQT1JUX1NZTUJPTChf X2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlKTsKPiA+IC0KPiA+IC0v KioKPiA+IC0gKiBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSAtIGRl ZmF1bHQgc3RhdGUgZGVzdHJveSBob29rCj4gPiAtICogQGNvbm5lY3RvcjogZHJtIGNvbm5lY3Rv cgo+ID4gLSAqIEBzdGF0ZTogY29ubmVjdG9yIHN0YXRlIG9iamVjdCB0byByZWxlYXNlCj4gPiAt ICoKPiA+IC0gKiBEZWZhdWx0IGNvbm5lY3RvciBzdGF0ZSBkZXN0cm95IGhvb2sgZm9yIGRyaXZl cnMgd2hpY2ggZG9uJ3QgaGF2ZSB0aGVpciBvd24KPiA+IC0gKiBzdWJjbGFzc2VkIGNvbm5lY3Rv ciBzdGF0ZSBzdHJ1Y3R1cmUuCj4gPiAtICovCj4gPiAtdm9pZCBkcm1fYXRvbWljX2hlbHBlcl9j b25uZWN0b3JfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ ID4gLQkJCQkJICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUpCj4gPiAtewo+ID4g LQlfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlKHN0YXRlKTsKPiA+ IC0Ja2ZyZWUoc3RhdGUpOwo+ID4gLX0KPiA+IC1FWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVs cGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlKTsKPiA+IC0KPiA+IC0vKioKPiA+IC0gKiBkcm1f YXRvbWljX2hlbHBlcl9sZWdhY3lfZ2FtbWFfc2V0IC0gc2V0IHRoZSBsZWdhY3kgZ2FtbWEgY29y cmVjdGlvbiB0YWJsZQo+ID4gLSAqIEBjcnRjOiBDUlRDIG9iamVjdAo+ID4gLSAqIEByZWQ6IHJl ZCBjb3JyZWN0aW9uIHRhYmxlCj4gPiAtICogQGdyZWVuOiBncmVlbiBjb3JyZWN0aW9uIHRhYmxl Cj4gPiAtICogQGJsdWU6IGdyZWVuIGNvcnJlY3Rpb24gdGFibGUKPiA+IC0gKiBAc2l6ZTogc2l6 ZSBvZiB0aGUgdGFibGVzCj4gPiAtICogQGN0eDogbG9jayBhY3F1aXJlIGNvbnRleHQKPiA+IC0g Kgo+ID4gLSAqIEltcGxlbWVudHMgc3VwcG9ydCBmb3IgbGVnYWN5IGdhbW1hIGNvcnJlY3Rpb24g dGFibGUgZm9yIGRyaXZlcnMKPiA+IC0gKiB0aGF0IHN1cHBvcnQgY29sb3IgbWFuYWdlbWVudCB0 aHJvdWdoIHRoZSBERUdBTU1BX0xVVC9HQU1NQV9MVVQKPiA+IC0gKiBwcm9wZXJ0aWVzLiBTZWUg ZHJtX2NydGNfZW5hYmxlX2NvbG9yX21nbXQoKSBhbmQgdGhlIGNvbnRhaW5pbmcgY2hhcHRlciBm b3IKPiA+IC0gKiBob3cgdGhlIGF0b21pYyBjb2xvciBtYW5hZ2VtZW50IGFuZCBnYW1tYSB0YWJs ZXMgd29yay4KPiA+IC0gKi8KPiA+IC1pbnQgZHJtX2F0b21pY19oZWxwZXJfbGVnYWN5X2dhbW1h X3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiAtCQkJCSAgICAgICB1MTYgKnJlZCwgdTE2 ICpncmVlbiwgdTE2ICpibHVlLAo+ID4gLQkJCQkgICAgICAgdWludDMyX3Qgc2l6ZSwKPiA+IC0J CQkJICAgICAgIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4KQo+ID4gLXsKPiA+ IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiA+IC0Jc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlOwo+ID4gLQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3Rh dGU7Cj4gPiAtCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYiA9IE5VTEw7Cj4gPiAtCXN0 cnVjdCBkcm1fY29sb3JfbHV0ICpibG9iX2RhdGE7Cj4gPiAtCWludCBpLCByZXQgPSAwOwo+ID4g LQlib29sIHJlcGxhY2VkOwo+ID4gLQo+ID4gLQlzdGF0ZSA9IGRybV9hdG9taWNfc3RhdGVfYWxs b2MoY3J0Yy0+ZGV2KTsKPiA+IC0JaWYgKCFzdGF0ZSkKPiA+IC0JCXJldHVybiAtRU5PTUVNOwo+ ID4gLQo+ID4gLQlibG9iID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9ibG9iKGRldiwKPiA+IC0JCQkJ CXNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2x1dCkgKiBzaXplLAo+ID4gLQkJCQkJTlVMTCk7Cj4g PiAtCWlmIChJU19FUlIoYmxvYikpIHsKPiA+IC0JCXJldCA9IFBUUl9FUlIoYmxvYik7Cj4gPiAt CQlibG9iID0gTlVMTDsKPiA+IC0JCWdvdG8gZmFpbDsKPiA+IC0JfQo+ID4gLQo+ID4gLQkvKiBQ cmVwYXJlIEdBTU1BX0xVVCB3aXRoIHRoZSBsZWdhY3kgdmFsdWVzLiAqLwo+ID4gLQlibG9iX2Rh dGEgPSBibG9iLT5kYXRhOwo+ID4gLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Cj4gPiAt CQlibG9iX2RhdGFbaV0ucmVkID0gcmVkW2ldOwo+ID4gLQkJYmxvYl9kYXRhW2ldLmdyZWVuID0g Z3JlZW5baV07Cj4gPiAtCQlibG9iX2RhdGFbaV0uYmx1ZSA9IGJsdWVbaV07Cj4gPiAtCX0KPiA+ IC0KPiA+IC0Jc3RhdGUtPmFjcXVpcmVfY3R4ID0gY3R4Owo+ID4gLQljcnRjX3N0YXRlID0gZHJt X2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdGF0ZSwgY3J0Yyk7Cj4gPiAtCWlmIChJU19FUlIoY3J0 Y19zdGF0ZSkpIHsKPiA+IC0JCXJldCA9IFBUUl9FUlIoY3J0Y19zdGF0ZSk7Cj4gPiAtCQlnb3Rv IGZhaWw7Cj4gPiAtCX0KPiA+IC0KPiA+IC0JLyogUmVzZXQgREVHQU1NQV9MVVQgYW5kIENUTSBw cm9wZXJ0aWVzLiAqLwo+ID4gLQlyZXBsYWNlZCAgPSBkcm1fcHJvcGVydHlfcmVwbGFjZV9ibG9i KCZjcnRjX3N0YXRlLT5kZWdhbW1hX2x1dCwgTlVMTCk7Cj4gPiAtCXJlcGxhY2VkIHw9IGRybV9w cm9wZXJ0eV9yZXBsYWNlX2Jsb2IoJmNydGNfc3RhdGUtPmN0bSwgTlVMTCk7Cj4gPiAtCXJlcGxh Y2VkIHw9IGRybV9wcm9wZXJ0eV9yZXBsYWNlX2Jsb2IoJmNydGNfc3RhdGUtPmdhbW1hX2x1dCwg YmxvYik7Cj4gPiAtCWNydGNfc3RhdGUtPmNvbG9yX21nbXRfY2hhbmdlZCB8PSByZXBsYWNlZDsK PiA+IC0KPiA+IC0JcmV0ID0gZHJtX2F0b21pY19jb21taXQoc3RhdGUpOwo+ID4gLQo+ID4gLWZh aWw6Cj4gPiAtCWRybV9hdG9taWNfc3RhdGVfcHV0KHN0YXRlKTsKPiA+IC0JZHJtX3Byb3BlcnR5 X2Jsb2JfcHV0KGJsb2IpOwo+ID4gLQlyZXR1cm4gcmV0Owo+ID4gLX0KPiA+IC1FWFBPUlRfU1lN Qk9MKGRybV9hdG9taWNfaGVscGVyX2xlZ2FjeV9nYW1tYV9zZXQpOwo+ID4gLQo+ID4gLS8qKgo+ ID4gLSAqIF9fZHJtX2F0b21pY19oZWxwZXJfcHJpdmF0ZV9kdXBsaWNhdGVfc3RhdGUgLSBjb3B5 IGF0b21pYyBwcml2YXRlIHN0YXRlCj4gPiAtICogQG9iajogQ1JUQyBvYmplY3QKPiA+IC0gKiBA c3RhdGU6IG5ldyBwcml2YXRlIG9iamVjdCBzdGF0ZQo+ID4gLSAqCj4gPiAtICogQ29waWVzIGF0 b21pYyBzdGF0ZSBmcm9tIGEgcHJpdmF0ZSBvYmplY3RzJ3MgY3VycmVudCBzdGF0ZSBhbmQgcmVz ZXRzIGluZmVycmVkIHZhbHVlcy4KPiA+IC0gKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZHJpdmVycyB0 aGF0IHN1YmNsYXNzIHRoZSBwcml2YXRlIHN0YXRlLgo+ID4gLSAqLwo+ID4gLXZvaWQgX19kcm1f YXRvbWljX2hlbHBlcl9wcml2YXRlX29ial9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wcml2 YXRlX29iaiAqb2JqLAo+ID4gLQkJCQkJCSAgICAgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlICpz dGF0ZSkKPiA+IC17Cj4gPiAtCW1lbWNweShzdGF0ZSwgb2JqLT5zdGF0ZSwgc2l6ZW9mKCpzdGF0 ZSkpOwo+ID4gLX0KPiA+IC1FWFBPUlRfU1lNQk9MKF9fZHJtX2F0b21pY19oZWxwZXJfcHJpdmF0 ZV9vYmpfZHVwbGljYXRlX3N0YXRlKTsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v ZHJtX2F0b21pY19zdGF0ZV9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX3N0 YXRlX2hlbHBlci5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAw MDAwLi4zYmE5OTYwNjlkNjkKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9kcm1fYXRvbWljX3N0YXRlX2hlbHBlci5jCj4gPiBAQCAtMCwwICsxLDYwMSBAQAo+ID4g Ky8qCj4gPiArICogQ29weXJpZ2h0IChDKSAyMDE4IEludGVsIENvcnAuCj4gPiArICoKPiA+ICsg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQo+ID4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gPiArICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgo+ID4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ID4gKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ ID4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6Cj4gPiArICoKPiA+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgo+ID4g KyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgo+ ID4gKyAqCj4gPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiA+ICsgKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK PiA+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiA+ICsgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBP UiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKPiA+ICsgKiBP VEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwKPiA+ICsgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPiA+ICsgKiBPVEhFUiBERUFMSU5HUyBJ TiBUSEUgU09GVFdBUkUuCj4gPiArICoKPiA+ICsgKiBBdXRob3JzOgo+ID4gKyAqIFJvYiBDbGFy ayA8cm9iZGNsYXJrQGdtYWlsLmNvbT4KPiA+ICsgKiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0 dGVyQGZmd2xsLmNoPgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21p Y19zdGF0ZV9oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gPiArI2lu Y2x1ZGUgPGRybS9kcm1fcGxhbmUuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3Iu aD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9kZXZpY2UuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ID4gKyNpbmNs dWRlIDxsaW51eC9kbWEtZmVuY2UuaD4KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBET0M6IGF0b21p YyBzdGF0ZSByZXNldCBhbmQgaW5pdGlhbGl6YXRpb24KPiA+ICsgKgo+ID4gKyAqIEJvdGggdGhl IGRybSBjb3JlIGFuZCB0aGUgYXRvbWljIGhlbHBlcnMgYXNzdW1lIHRoYXQgdGhlcmUgaXMgYWx3 YXlzIHRoZSBmdWxsCj4gPiArICogYW5kIGNvcnJlY3QgYXRvbWljIHNvZnR3YXJlIHN0YXRlIGZv ciBhbGwgY29ubmVjdG9ycywgQ1JUQ3MgYW5kIHBsYW5lcwo+ID4gKyAqIGF2YWlsYWJsZS4gV2hp Y2ggaXMgYSBiaXQgYSBwcm9ibGVtIG9uIGRyaXZlciBsb2FkIGFuZCBhbHNvIGFmdGVyIHN5c3Rl bQo+ID4gKyAqIHN1c3BlbmQuIE9uZSB3YXkgdG8gc29sdmUgdGhpcyBpcyB0byBoYXZlIGEgaGFy ZHdhcmUgc3RhdGUgcmVhZC1vdXQKPiA+ICsgKiBpbmZyYXN0cnVjdHVyZSB3aGljaCByZWNvbnN0 cnVjdHMgdGhlIGZ1bGwgc29mdHdhcmUgc3RhdGUgKGUuZy4gdGhlIGk5MTUKPiA+ICsgKiBkcml2 ZXIpLgo+ID4gKyAqCj4gPiArICogVGhlIHNpbXBsZXIgc29sdXRpb24gaXMgdG8ganVzdCByZXNl dCB0aGUgc29mdHdhcmUgc3RhdGUgdG8gZXZlcnl0aGluZyBvZmYsCj4gPiArICogd2hpY2ggaXMg ZWFzaWVzdCB0byBkbyBieSBjYWxsaW5nIGRybV9tb2RlX2NvbmZpZ19yZXNldCgpLiBUbyBmYWNp bGl0YXRlIHRoaXMKPiA+ICsgKiB0aGUgYXRvbWljIGhlbHBlcnMgcHJvdmlkZSBkZWZhdWx0IHJl c2V0IGltcGxlbWVudGF0aW9ucyBmb3IgYWxsIGhvb2tzLgo+ID4gKyAqCj4gPiArICogT24gdGhl IHVwc2lkZSB0aGUgcHJlY2lzZSBzdGF0ZSB0cmFja2luZyBvZiBhdG9taWMgc2ltcGxpZmllcyBz eXN0ZW0gc3VzcGVuZAo+ID4gKyAqIGFuZCByZXN1bWUgYSBsb3QuIEZvciBkcml2ZXJzIHVzaW5n IGRybV9tb2RlX2NvbmZpZ19yZXNldCgpIGEgY29tcGxldGUgcmVjaXBlCj4gPiArICogaXMgaW1w bGVtZW50ZWQgaW4gZHJtX2F0b21pY19oZWxwZXJfc3VzcGVuZCgpIGFuZCBkcm1fYXRvbWljX2hl bHBlcl9yZXN1bWUoKS4KPiA+ICsgKiBGb3Igb3RoZXIgZHJpdmVycyB0aGUgYnVpbGRpbmcgYmxv Y2tzIGFyZSBzcGxpdCBvdXQsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbgo+ID4gKyAqIGZvciB0aGVz ZSBmdW5jdGlvbnMuCj4gPiArICovCj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2F0b21pY19o ZWxwZXJfY3J0Y19yZXNldCAtIGRlZmF1bHQgJmRybV9jcnRjX2Z1bmNzLnJlc2V0IGhvb2sgZm9y IENSVENzCj4gPiArICogQGNydGM6IGRybSBDUlRDCj4gPiArICoKPiA+ICsgKiBSZXNldHMgdGhl IGF0b21pYyBzdGF0ZSBmb3IgQGNydGMgYnkgZnJlZWluZyB0aGUgc3RhdGUgcG9pbnRlciAod2hp Y2ggbWlnaHQKPiA+ICsgKiBiZSBOVUxMLCBlLmcuIGF0IGRyaXZlciBsb2FkIHRpbWUpIGFuZCBh bGxvY2F0aW5nIGEgbmV3IGVtcHR5IHN0YXRlIG9iamVjdC4KPiA+ICsgKi8KPiA+ICt2b2lkIGRy bV9hdG9taWNfaGVscGVyX2NydGNfcmVzZXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ID4gK3sK PiA+ICsJaWYgKGNydGMtPnN0YXRlKQo+ID4gKwkJX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rl c3Ryb3lfc3RhdGUoY3J0Yy0+c3RhdGUpOwo+ID4gKwo+ID4gKwlrZnJlZShjcnRjLT5zdGF0ZSk7 Cj4gPiArCWNydGMtPnN0YXRlID0ga3phbGxvYyhzaXplb2YoKmNydGMtPnN0YXRlKSwgR0ZQX0tF Uk5FTCk7Cj4gPiArCj4gPiArCWlmIChjcnRjLT5zdGF0ZSkKPiA+ICsJCWNydGMtPnN0YXRlLT5j cnRjID0gY3J0YzsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9j cnRjX3Jlc2V0KTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBfX2RybV9hdG9taWNfaGVscGVyX2Ny dGNfZHVwbGljYXRlX3N0YXRlIC0gY29weSBhdG9taWMgQ1JUQyBzdGF0ZQo+ID4gKyAqIEBjcnRj OiBDUlRDIG9iamVjdAo+ID4gKyAqIEBzdGF0ZTogYXRvbWljIENSVEMgc3RhdGUKPiA+ICsgKgo+ ID4gKyAqIENvcGllcyBhdG9taWMgc3RhdGUgZnJvbSBhIENSVEMncyBjdXJyZW50IHN0YXRlIGFu ZCByZXNldHMgaW5mZXJyZWQgdmFsdWVzLgo+ID4gKyAqIFRoaXMgaXMgdXNlZnVsIGZvciBkcml2 ZXJzIHRoYXQgc3ViY2xhc3MgdGhlIENSVEMgc3RhdGUuCj4gPiArICovCj4gPiArdm9pZCBfX2Ry bV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKPiA+ICsJCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCj4gPiArewo+ ID4gKwltZW1jcHkoc3RhdGUsIGNydGMtPnN0YXRlLCBzaXplb2YoKnN0YXRlKSk7Cj4gPiArCj4g PiArCWlmIChzdGF0ZS0+bW9kZV9ibG9iKQo+ID4gKwkJZHJtX3Byb3BlcnR5X2Jsb2JfZ2V0KHN0 YXRlLT5tb2RlX2Jsb2IpOwo+ID4gKwlpZiAoc3RhdGUtPmRlZ2FtbWFfbHV0KQo+ID4gKwkJZHJt X3Byb3BlcnR5X2Jsb2JfZ2V0KHN0YXRlLT5kZWdhbW1hX2x1dCk7Cj4gPiArCWlmIChzdGF0ZS0+ Y3RtKQo+ID4gKwkJZHJtX3Byb3BlcnR5X2Jsb2JfZ2V0KHN0YXRlLT5jdG0pOwo+ID4gKwlpZiAo c3RhdGUtPmdhbW1hX2x1dCkKPiA+ICsJCWRybV9wcm9wZXJ0eV9ibG9iX2dldChzdGF0ZS0+Z2Ft bWFfbHV0KTsKPiA+ICsJc3RhdGUtPm1vZGVfY2hhbmdlZCA9IGZhbHNlOwo+ID4gKwlzdGF0ZS0+ YWN0aXZlX2NoYW5nZWQgPSBmYWxzZTsKPiA+ICsJc3RhdGUtPnBsYW5lc19jaGFuZ2VkID0gZmFs c2U7Cj4gPiArCXN0YXRlLT5jb25uZWN0b3JzX2NoYW5nZWQgPSBmYWxzZTsKPiA+ICsJc3RhdGUt PmNvbG9yX21nbXRfY2hhbmdlZCA9IGZhbHNlOwo+ID4gKwlzdGF0ZS0+enBvc19jaGFuZ2VkID0g ZmFsc2U7Cj4gPiArCXN0YXRlLT5jb21taXQgPSBOVUxMOwo+ID4gKwlzdGF0ZS0+ZXZlbnQgPSBO VUxMOwo+ID4gKwlzdGF0ZS0+cGFnZWZsaXBfZmxhZ3MgPSAwOwo+ID4gK30KPiA+ICtFWFBPUlRf U1lNQk9MKF9fZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUpOwo+ID4gKwo+ ID4gKy8qKgo+ID4gKyAqIGRybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlIC0g ZGVmYXVsdCBzdGF0ZSBkdXBsaWNhdGUgaG9vawo+ID4gKyAqIEBjcnRjOiBkcm0gQ1JUQwo+ID4g KyAqCj4gPiArICogRGVmYXVsdCBDUlRDIHN0YXRlIGR1cGxpY2F0ZSBob29rIGZvciBkcml2ZXJz IHdoaWNoIGRvbid0IGhhdmUgdGhlaXIgb3duCj4gPiArICogc3ViY2xhc3NlZCBDUlRDIHN0YXRl IHN0cnVjdHVyZS4KPiA+ICsgKi8KPiA+ICtzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKgo+ID4gK2Ry bV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGU7Cj4gPiArCj4gPiAr CWlmIChXQVJOX09OKCFjcnRjLT5zdGF0ZSkpCj4gPiArCQlyZXR1cm4gTlVMTDsKPiA+ICsKPiA+ ICsJc3RhdGUgPSBrbWFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYg KHN0YXRlKQo+ID4gKwkJX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShj cnRjLCBzdGF0ZSk7Cj4gPiArCj4gPiArCXJldHVybiBzdGF0ZTsKPiA+ICt9Cj4gPiArRVhQT1JU X1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSk7Cj4gPiArCj4g PiArLyoqCj4gPiArICogX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUgLSBy ZWxlYXNlIENSVEMgc3RhdGUKPiA+ICsgKiBAc3RhdGU6IENSVEMgc3RhdGUgb2JqZWN0IHRvIHJl bGVhc2UKPiA+ICsgKgo+ID4gKyAqIFJlbGVhc2VzIGFsbCByZXNvdXJjZXMgc3RvcmVkIGluIHRo ZSBDUlRDIHN0YXRlIHdpdGhvdXQgYWN0dWFsbHkgZnJlZWluZwo+ID4gKyAqIHRoZSBtZW1vcnkg b2YgdGhlIENSVEMgc3RhdGUuIFRoaXMgaXMgdXNlZnVsIGZvciBkcml2ZXJzIHRoYXQgc3ViY2xh c3MgdGhlCj4gPiArICogQ1JUQyBzdGF0ZS4KPiA+ICsgKi8KPiA+ICt2b2lkIF9fZHJtX2F0b21p Y19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUp Cj4gPiArewo+ID4gKwlpZiAoc3RhdGUtPmNvbW1pdCkgewo+ID4gKwkJLyoKPiA+ICsJCSAqIElu IHRoZSBldmVudCB0aGF0IGEgbm9uLWJsb2NraW5nIGNvbW1pdCByZXR1cm5zCj4gPiArCQkgKiAt RVJFU1RBUlRTWVMgYmVmb3JlIHRoZSBjb21taXRfdGFpbCB3b3JrIGlzIHF1ZXVlZCwgd2Ugd2ls bAo+ID4gKwkJICogaGF2ZSBhbiBleHRyYSByZWZlcmVuY2UgdG8gdGhlIGNvbW1pdCBvYmplY3Qu IFJlbGVhc2UgaXQsIGlmCj4gPiArCQkgKiB0aGUgZXZlbnQgaGFzIG5vdCBiZWVuIGNvbnN1bWVk IGJ5IHRoZSB3b3JrZXIuCj4gPiArCQkgKgo+ID4gKwkJICogc3RhdGUtPmV2ZW50IG1heSBiZSBm cmVlZCwgc28gd2UgY2FuJ3QgZGlyZWN0bHkgbG9vayBhdAo+ID4gKwkJICogc3RhdGUtPmV2ZW50 LT5iYXNlLmNvbXBsZXRpb24uCj4gPiArCQkgKi8KPiA+ICsJCWlmIChzdGF0ZS0+ZXZlbnQgJiYg c3RhdGUtPmNvbW1pdC0+YWJvcnRfY29tcGxldGlvbikKPiA+ICsJCQlkcm1fY3J0Y19jb21taXRf cHV0KHN0YXRlLT5jb21taXQpOwo+ID4gKwo+ID4gKwkJa2ZyZWUoc3RhdGUtPmNvbW1pdC0+ZXZl bnQpOwo+ID4gKwkJc3RhdGUtPmNvbW1pdC0+ZXZlbnQgPSBOVUxMOwo+ID4gKwo+ID4gKwkJZHJt X2NydGNfY29tbWl0X3B1dChzdGF0ZS0+Y29tbWl0KTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlkcm1f cHJvcGVydHlfYmxvYl9wdXQoc3RhdGUtPm1vZGVfYmxvYik7Cj4gPiArCWRybV9wcm9wZXJ0eV9i bG9iX3B1dChzdGF0ZS0+ZGVnYW1tYV9sdXQpOwo+ID4gKwlkcm1fcHJvcGVydHlfYmxvYl9wdXQo c3RhdGUtPmN0bSk7Cj4gPiArCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChzdGF0ZS0+Z2FtbWFfbHV0 KTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZGVz dHJveV9zdGF0ZSk7Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2F0b21pY19oZWxwZXJfY3J0 Y19kZXN0cm95X3N0YXRlIC0gZGVmYXVsdCBzdGF0ZSBkZXN0cm95IGhvb2sKPiA+ICsgKiBAY3J0 YzogZHJtIENSVEMKPiA+ICsgKiBAc3RhdGU6IENSVEMgc3RhdGUgb2JqZWN0IHRvIHJlbGVhc2UK PiA+ICsgKgo+ID4gKyAqIERlZmF1bHQgQ1JUQyBzdGF0ZSBkZXN0cm95IGhvb2sgZm9yIGRyaXZl cnMgd2hpY2ggZG9uJ3QgaGF2ZSB0aGVpciBvd24KPiA+ICsgKiBzdWJjbGFzc2VkIENSVEMgc3Rh dGUgc3RydWN0dXJlLgo+ID4gKyAqLwo+ID4gK3ZvaWQgZHJtX2F0b21pY19oZWxwZXJfY3J0Y19k ZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICsJCQkJCSAgc3RydWN0IGRy bV9jcnRjX3N0YXRlICpzdGF0ZSkKPiA+ICt7Cj4gPiArCV9fZHJtX2F0b21pY19oZWxwZXJfY3J0 Y19kZXN0cm95X3N0YXRlKHN0YXRlKTsKPiA+ICsJa2ZyZWUoc3RhdGUpOwo+ID4gK30KPiA+ICtF WFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZSk7Cj4gPiAr Cj4gPiArLyoqCj4gPiArICogX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9yZXNldCAtIHJlc2V0 cyBwbGFuZXMgc3RhdGUgdG8gZGVmYXVsdCB2YWx1ZXMKPiA+ICsgKiBAcGxhbmU6IHBsYW5lIG9i amVjdCwgbXVzdCBub3QgYmUgTlVMTAo+ID4gKyAqIEBzdGF0ZTogYXRvbWljIHBsYW5lIHN0YXRl LCBtdXN0IG5vdCBiZSBOVUxMCj4gPiArICoKPiA+ICsgKiBJbml0aWFsaXplcyBwbGFuZSBzdGF0 ZSB0byBkZWZhdWx0LiBUaGlzIGlzIHVzZWZ1bCBmb3IgZHJpdmVycyB0aGF0IHN1YmNsYXNzCj4g PiArICogdGhlIHBsYW5lIHN0YXRlLgo+ID4gKyAqLwo+ID4gK3ZvaWQgX19kcm1fYXRvbWljX2hl bHBlcl9wbGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+ICsJCQkJICAgICBz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiA+ICt7Cj4gPiArCXN0YXRlLT5wbGFuZSA9 IHBsYW5lOwo+ID4gKwlzdGF0ZS0+cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMDsKPiA+ICsK PiA+ICsJc3RhdGUtPmFscGhhID0gRFJNX0JMRU5EX0FMUEhBX09QQVFVRTsKPiA+ICsJc3RhdGUt PnBpeGVsX2JsZW5kX21vZGUgPSBEUk1fTU9ERV9CTEVORF9QUkVNVUxUSTsKPiA+ICsKPiA+ICsJ cGxhbmUtPnN0YXRlID0gc3RhdGU7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0woX19kcm1fYXRv bWljX2hlbHBlcl9wbGFuZV9yZXNldCk7Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2F0b21p Y19oZWxwZXJfcGxhbmVfcmVzZXQgLSBkZWZhdWx0ICZkcm1fcGxhbmVfZnVuY3MucmVzZXQgaG9v ayBmb3IgcGxhbmVzCj4gPiArICogQHBsYW5lOiBkcm0gcGxhbmUKPiA+ICsgKgo+ID4gKyAqIFJl c2V0cyB0aGUgYXRvbWljIHN0YXRlIGZvciBAcGxhbmUgYnkgZnJlZWluZyB0aGUgc3RhdGUgcG9p bnRlciAod2hpY2ggbWlnaHQKPiA+ICsgKiBiZSBOVUxMLCBlLmcuIGF0IGRyaXZlciBsb2FkIHRp bWUpIGFuZCBhbGxvY2F0aW5nIGEgbmV3IGVtcHR5IHN0YXRlIG9iamVjdC4KPiA+ICsgKi8KPiA+ ICt2b2lkIGRybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lKQo+ID4gK3sKPiA+ICsJaWYgKHBsYW5lLT5zdGF0ZSkKPiA+ICsJCV9fZHJtX2F0b21pY19o ZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZShwbGFuZS0+c3RhdGUpOwo+ID4gKwo+ID4gKwlrZnJl ZShwbGFuZS0+c3RhdGUpOwo+ID4gKwlwbGFuZS0+c3RhdGUgPSBremFsbG9jKHNpemVvZigqcGxh bmUtPnN0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gPiArCWlmIChwbGFuZS0+c3RhdGUpCj4gPiArCQlf X2RybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0KHBsYW5lLCBwbGFuZS0+c3RhdGUpOwo+ID4g K30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0KTsKPiA+ ICsKPiA+ICsvKioKPiA+ICsgKiBfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9z dGF0ZSAtIGNvcHkgYXRvbWljIHBsYW5lIHN0YXRlCj4gPiArICogQHBsYW5lOiBwbGFuZSBvYmpl Y3QKPiA+ICsgKiBAc3RhdGU6IGF0b21pYyBwbGFuZSBzdGF0ZQo+ID4gKyAqCj4gPiArICogQ29w aWVzIGF0b21pYyBzdGF0ZSBmcm9tIGEgcGxhbmUncyBjdXJyZW50IHN0YXRlLiBUaGlzIGlzIHVz ZWZ1bCBmb3IKPiA+ICsgKiBkcml2ZXJzIHRoYXQgc3ViY2xhc3MgdGhlIHBsYW5lIHN0YXRlLgo+ ID4gKyAqLwo+ID4gK3ZvaWQgX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3Rh dGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gPiArCQkJCQkgICAgICAgc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqc3RhdGUpCj4gPiArewo+ID4gKwltZW1jcHkoc3RhdGUsIHBsYW5lLT5zdGF0 ZSwgc2l6ZW9mKCpzdGF0ZSkpOwo+ID4gKwo+ID4gKwlpZiAoc3RhdGUtPmZiKQo+ID4gKwkJZHJt X2ZyYW1lYnVmZmVyX2dldChzdGF0ZS0+ZmIpOwo+ID4gKwo+ID4gKwlzdGF0ZS0+ZmVuY2UgPSBO VUxMOwo+ID4gKwlzdGF0ZS0+Y29tbWl0ID0gTlVMTDsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJP TChfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSk7Cj4gPiArCj4gPiAr LyoqCj4gPiArICogZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlIC0gZGVm YXVsdCBzdGF0ZSBkdXBsaWNhdGUgaG9vawo+ID4gKyAqIEBwbGFuZTogZHJtIHBsYW5lCj4gPiAr ICoKPiA+ICsgKiBEZWZhdWx0IHBsYW5lIHN0YXRlIGR1cGxpY2F0ZSBob29rIGZvciBkcml2ZXJz IHdoaWNoIGRvbid0IGhhdmUgdGhlaXIgb3duCj4gPiArICogc3ViY2xhc3NlZCBwbGFuZSBzdGF0 ZSBzdHJ1Y3R1cmUuCj4gPiArICovCj4gPiArc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqCj4gPiAr ZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGU7Cj4gPiAr Cj4gPiArCWlmIChXQVJOX09OKCFwbGFuZS0+c3RhdGUpKQo+ID4gKwkJcmV0dXJuIE5VTEw7Cj4g PiArCj4gPiArCXN0YXRlID0ga21hbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4g PiArCWlmIChzdGF0ZSkKPiA+ICsJCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRl X3N0YXRlKHBsYW5lLCBzdGF0ZSk7Cj4gPiArCj4gPiArCXJldHVybiBzdGF0ZTsKPiA+ICt9Cj4g PiArRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUp Owo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJv eV9zdGF0ZSAtIHJlbGVhc2UgcGxhbmUgc3RhdGUKPiA+ICsgKiBAc3RhdGU6IHBsYW5lIHN0YXRl IG9iamVjdCB0byByZWxlYXNlCj4gPiArICoKPiA+ICsgKiBSZWxlYXNlcyBhbGwgcmVzb3VyY2Vz IHN0b3JlZCBpbiB0aGUgcGxhbmUgc3RhdGUgd2l0aG91dCBhY3R1YWxseSBmcmVlaW5nCj4gPiAr ICogdGhlIG1lbW9yeSBvZiB0aGUgcGxhbmUgc3RhdGUuIFRoaXMgaXMgdXNlZnVsIGZvciBkcml2 ZXJzIHRoYXQgc3ViY2xhc3MgdGhlCj4gPiArICogcGxhbmUgc3RhdGUuCj4gPiArICovCj4gPiAr dm9pZCBfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqc3RhdGUpCj4gPiArewo+ID4gKwlpZiAoc3RhdGUtPmZiKQo+ID4gKwkJZHJt X2ZyYW1lYnVmZmVyX3B1dChzdGF0ZS0+ZmIpOwo+ID4gKwo+ID4gKwlpZiAoc3RhdGUtPmZlbmNl KQo+ID4gKwkJZG1hX2ZlbmNlX3B1dChzdGF0ZS0+ZmVuY2UpOwo+ID4gKwo+ID4gKwlpZiAoc3Rh dGUtPmNvbW1pdCkKPiA+ICsJCWRybV9jcnRjX2NvbW1pdF9wdXQoc3RhdGUtPmNvbW1pdCk7Cj4g PiArfQo+ID4gK0VYUE9SVF9TWU1CT0woX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95 X3N0YXRlKTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9k ZXN0cm95X3N0YXRlIC0gZGVmYXVsdCBzdGF0ZSBkZXN0cm95IGhvb2sKPiA+ICsgKiBAcGxhbmU6 IGRybSBwbGFuZQo+ID4gKyAqIEBzdGF0ZTogcGxhbmUgc3RhdGUgb2JqZWN0IHRvIHJlbGVhc2UK PiA+ICsgKgo+ID4gKyAqIERlZmF1bHQgcGxhbmUgc3RhdGUgZGVzdHJveSBob29rIGZvciBkcml2 ZXJzIHdoaWNoIGRvbid0IGhhdmUgdGhlaXIgb3duCj4gPiArICogc3ViY2xhc3NlZCBwbGFuZSBz dGF0ZSBzdHJ1Y3R1cmUuCj4gPiArICovCj4gPiArdm9pZCBkcm1fYXRvbWljX2hlbHBlcl9wbGFu ZV9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ID4gKwkJCQkJICAgc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4gPiArewo+ID4gKwlfX2RybV9hdG9taWNfaGVs cGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUoc3RhdGUpOwo+ID4gKwlrZnJlZShzdGF0ZSk7Cj4gPiAr fQo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0 ZSk7Cj4gPiArCj4gPiArLyoqCj4gPiArICogX19kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3Jf cmVzZXQgLSByZXNldCBzdGF0ZSBvbiBjb25uZWN0b3IKPiA+ICsgKiBAY29ubmVjdG9yOiBkcm0g Y29ubmVjdG9yCj4gPiArICogQGNvbm5fc3RhdGU6IGNvbm5lY3RvciBzdGF0ZSB0byBhc3NpZ24K PiA+ICsgKgo+ID4gKyAqIEluaXRpYWxpemVzIHRoZSBuZXdseSBhbGxvY2F0ZWQgQGNvbm5fc3Rh dGUgYW5kIGFzc2lnbnMgaXQgdG8KPiA+ICsgKiB0aGUgJmRybV9jb25lY3Rvci0+c3RhdGUgcG9p bnRlciBvZiBAY29ubmVjdG9yLCB1c3VhbGx5IHJlcXVpcmVkIHdoZW4KPiA+ICsgKiBpbml0aWFs aXppbmcgdGhlIGRyaXZlcnMgb3Igd2hlbiBjYWxsZWQgZnJvbSB0aGUgJmRybV9jb25uZWN0b3Jf ZnVuY3MucmVzZXQKPiA+ICsgKiBob29rLgo+ID4gKyAqCj4gPiArICogVGhpcyBpcyB1c2VmdWwg Zm9yIGRyaXZlcnMgdGhhdCBzdWJjbGFzcyB0aGUgY29ubmVjdG9yIHN0YXRlLgo+ID4gKyAqLwo+ ID4gK3ZvaWQKPiA+ICtfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldChzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gKwkJCQkgICAgc3RydWN0IGRybV9jb25uZWN0 b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCj4gPiArewo+ID4gKwlpZiAoY29ubl9zdGF0ZSkKPiA+ICsJ CWNvbm5fc3RhdGUtPmNvbm5lY3RvciA9IGNvbm5lY3RvcjsKPiA+ICsKPiA+ICsJY29ubmVjdG9y LT5zdGF0ZSA9IGNvbm5fc3RhdGU7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0woX19kcm1fYXRv bWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQpOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCAtIGRlZmF1bHQgJmRybV9jb25uZWN0b3JfZnVu Y3MucmVzZXQgaG9vayBmb3IgY29ubmVjdG9ycwo+ID4gKyAqIEBjb25uZWN0b3I6IGRybSBjb25u ZWN0b3IKPiA+ICsgKgo+ID4gKyAqIFJlc2V0cyB0aGUgYXRvbWljIHN0YXRlIGZvciBAY29ubmVj dG9yIGJ5IGZyZWVpbmcgdGhlIHN0YXRlIHBvaW50ZXIgKHdoaWNoCj4gPiArICogbWlnaHQgYmUg TlVMTCwgZS5nLiBhdCBkcml2ZXIgbG9hZCB0aW1lKSBhbmQgYWxsb2NhdGluZyBhIG5ldyBlbXB0 eSBzdGF0ZQo+ID4gKyAqIG9iamVjdC4KPiA+ICsgKi8KPiA+ICt2b2lkIGRybV9hdG9taWNfaGVs cGVyX2Nvbm5lY3Rvcl9yZXNldChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ID4g K3sKPiA+ICsJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUgPQo+ID4gKwkJ a3phbGxvYyhzaXplb2YoKmNvbm5fc3RhdGUpLCBHRlBfS0VSTkVMKTsKPiA+ICsKPiA+ICsJaWYg KGNvbm5lY3Rvci0+c3RhdGUpCj4gPiArCQlfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9k ZXN0cm95X3N0YXRlKGNvbm5lY3Rvci0+c3RhdGUpOwo+ID4gKwo+ID4gKwlrZnJlZShjb25uZWN0 b3ItPnN0YXRlKTsKPiA+ICsJX19kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQoY29u bmVjdG9yLCBjb25uX3N0YXRlKTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fYXRvbWlj X2hlbHBlcl9jb25uZWN0b3JfcmVzZXQpOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIF9fZHJtX2F0 b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSAtIGNvcHkgYXRvbWljIGNvbm5l Y3RvciBzdGF0ZQo+ID4gKyAqIEBjb25uZWN0b3I6IGNvbm5lY3RvciBvYmplY3QKPiA+ICsgKiBA c3RhdGU6IGF0b21pYyBjb25uZWN0b3Igc3RhdGUKPiA+ICsgKgo+ID4gKyAqIENvcGllcyBhdG9t aWMgc3RhdGUgZnJvbSBhIGNvbm5lY3RvcidzIGN1cnJlbnQgc3RhdGUuIFRoaXMgaXMgdXNlZnVs IGZvcgo+ID4gKyAqIGRyaXZlcnMgdGhhdCBzdWJjbGFzcyB0aGUgY29ubmVjdG9yIHN0YXRlLgo+ ID4gKyAqLwo+ID4gK3ZvaWQKPiA+ICtfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBs aWNhdGVfc3RhdGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ICsJCQkJCSAg ICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUpCj4gPiArewo+ID4gKwltZW1jcHko c3RhdGUsIGNvbm5lY3Rvci0+c3RhdGUsIHNpemVvZigqc3RhdGUpKTsKPiA+ICsJaWYgKHN0YXRl LT5jcnRjKQo+ID4gKwkJZHJtX2Nvbm5lY3Rvcl9nZXQoY29ubmVjdG9yKTsKPiA+ICsJc3RhdGUt PmNvbW1pdCA9IE5VTEw7Cj4gPiArCj4gPiArCS8qIERvbid0IGNvcHkgb3ZlciBhIHdyaXRlYmFj ayBqb2IsIHRoZXkgYXJlIHVzZWQgb25seSBvbmNlICovCj4gPiArCXN0YXRlLT53cml0ZWJhY2tf am9iID0gTlVMTDsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChfX2RybV9hdG9taWNfaGVscGVy X2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUpOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUgLSBkZWZhdWx0IHN0YXRlIGR1 cGxpY2F0ZSBob29rCj4gPiArICogQGNvbm5lY3RvcjogZHJtIGNvbm5lY3Rvcgo+ID4gKyAqCj4g PiArICogRGVmYXVsdCBjb25uZWN0b3Igc3RhdGUgZHVwbGljYXRlIGhvb2sgZm9yIGRyaXZlcnMg d2hpY2ggZG9uJ3QgaGF2ZSB0aGVpciBvd24KPiA+ICsgKiBzdWJjbGFzc2VkIGNvbm5lY3RvciBz dGF0ZSBzdHJ1Y3R1cmUuCj4gPiArICovCj4gPiArc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUg Kgo+ID4gK2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fY29ubmVj dG9yX3N0YXRlICpzdGF0ZTsKPiA+ICsKPiA+ICsJaWYgKFdBUk5fT04oIWNvbm5lY3Rvci0+c3Rh dGUpKQo+ID4gKwkJcmV0dXJuIE5VTEw7Cj4gPiArCj4gPiArCXN0YXRlID0ga21hbGxvYyhzaXpl b2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gPiArCWlmIChzdGF0ZSkKPiA+ICsJCV9fZHJtX2F0 b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZShjb25uZWN0b3IsIHN0YXRlKTsK PiA+ICsKPiA+ICsJcmV0dXJuIHN0YXRlOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUpOwo+ID4gKwo+ID4gKy8qKgo+ ID4gKyAqIGRybV9hdG9taWNfaGVscGVyX2R1cGxpY2F0ZV9zdGF0ZSAtIGR1cGxpY2F0ZSBhbiBh dG9taWMgc3RhdGUgb2JqZWN0Cj4gPiArICogQGRldjogRFJNIGRldmljZQo+ID4gKyAqIEBjdHg6 IGxvY2sgYWNxdWlzaXRpb24gY29udGV4dAo+ID4gKyAqCj4gPiArICogTWFrZXMgYSBjb3B5IG9m IHRoZSBjdXJyZW50IGF0b21pYyBzdGF0ZSBieSBsb29waW5nIG92ZXIgYWxsIG9iamVjdHMgYW5k Cj4gPiArICogZHVwbGljYXRpbmcgdGhlaXIgcmVzcGVjdGl2ZSBzdGF0ZXMuIFRoaXMgaXMgdXNl ZCBmb3IgZXhhbXBsZSBieSBzdXNwZW5kLwo+ID4gKyAqIHJlc3VtZSBzdXBwb3J0IGNvZGUgdG8g c2F2ZSB0aGUgc3RhdGUgcHJpb3IgdG8gc3VzcGVuZCBzdWNoIHRoYXQgaXQgY2FuCj4gPiArICog YmUgcmVzdG9yZWQgdXBvbiByZXN1bWUuCj4gPiArICoKPiA+ICsgKiBOb3RlIHRoYXQgdGhpcyB0 cmVhdHMgYXRvbWljIHN0YXRlIGFzIHBlcnNpc3RlbnQgYmV0d2VlbiBzYXZlIGFuZCByZXN0b3Jl Lgo+ID4gKyAqIERyaXZlcnMgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGlzIGlzIHBvc3NpYmxlIGFu ZCB3b24ndCByZXN1bHQgaW4gY29uZnVzaW9uCj4gPiArICogb3IgZXJyb25lb3VzIGJlaGF2aW91 ci4KPiA+ICsgKgo+ID4gKyAqIE5vdGUgdGhhdCBpZiBjYWxsZXJzIGhhdmVuJ3QgYWxyZWFkeSBh Y3F1aXJlZCBhbGwgbW9kZXNldCBsb2NrcyB0aGlzIG1pZ2h0Cj4gPiArICogcmV0dXJuIC1FREVB RExLLCB3aGljaCBtdXN0IGJlIGhhbmRsZWQgYnkgY2FsbGluZyBkcm1fbW9kZXNldF9iYWNrb2Zm KCkuCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOgo+ID4gKyAqIEEgcG9pbnRlciB0byB0aGUgY29w eSBvZiB0aGUgYXRvbWljIHN0YXRlIG9iamVjdCBvbiBzdWNjZXNzIG9yIGFuCj4gPiArICogRVJS X1BUUigpLWVuY29kZWQgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ID4gKyAqCj4gPiArICogU2Vl IGFsc286Cj4gPiArICogZHJtX2F0b21pY19oZWxwZXJfc3VzcGVuZCgpLCBkcm1fYXRvbWljX2hl bHBlcl9yZXN1bWUoKQo+ID4gKyAqLwo+ID4gK3N0cnVjdCBkcm1fYXRvbWljX3N0YXRlICoKPiA+ ICtkcm1fYXRvbWljX2hlbHBlcl9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKPiA+ICsJCQkJICBzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggKmN0eCkKPiA+ICt7 Cj4gPiArCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKPiA+ICsJc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm47Cj4gPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3RfaXRlciBjb25u X2l0ZXI7Cj4gPiArCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ID4gKwlzdHJ1Y3QgZHJtX2Ny dGMgKmNydGM7Cj4gPiArCWludCBlcnIgPSAwOwo+ID4gKwo+ID4gKwlzdGF0ZSA9IGRybV9hdG9t aWNfc3RhdGVfYWxsb2MoZGV2KTsKPiA+ICsJaWYgKCFzdGF0ZSkKPiA+ICsJCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOwo+ID4gKwo+ID4gKwlzdGF0ZS0+YWNxdWlyZV9jdHggPSBjdHg7Cj4gPiAr Cj4gPiArCWRybV9mb3JfZWFjaF9jcnRjKGNydGMsIGRldikgewo+ID4gKwkJc3RydWN0IGRybV9j cnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ID4gKwo+ID4gKwkJY3J0Y19zdGF0ZSA9IGRybV9hdG9t aWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsIGNydGMpOwo+ID4gKwkJaWYgKElTX0VSUihjcnRjX3N0 YXRlKSkgewo+ID4gKwkJCWVyciA9IFBUUl9FUlIoY3J0Y19zdGF0ZSk7Cj4gPiArCQkJZ290byBm cmVlOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWRybV9mb3JfZWFjaF9wbGFuZShwbGFu ZSwgZGV2KSB7Cj4gPiArCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKPiA+ ICsKPiA+ICsJCXBsYW5lX3N0YXRlID0gZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUoc3RhdGUs IHBsYW5lKTsKPiA+ICsJCWlmIChJU19FUlIocGxhbmVfc3RhdGUpKSB7Cj4gPiArCQkJZXJyID0g UFRSX0VSUihwbGFuZV9zdGF0ZSk7Cj4gPiArCQkJZ290byBmcmVlOwo+ID4gKwkJfQo+ID4gKwl9 Cj4gPiArCj4gPiArCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2JlZ2luKGRldiwgJmNvbm5faXRl cik7Cj4gPiArCWRybV9mb3JfZWFjaF9jb25uZWN0b3JfaXRlcihjb25uLCAmY29ubl9pdGVyKSB7 Cj4gPiArCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZTsKPiA+ICsKPiA+ ICsJCWNvbm5fc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUsIGNv bm4pOwo+ID4gKwkJaWYgKElTX0VSUihjb25uX3N0YXRlKSkgewo+ID4gKwkJCWVyciA9IFBUUl9F UlIoY29ubl9zdGF0ZSk7Cj4gPiArCQkJZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfZW5kKCZjb25u X2l0ZXIpOwo+ID4gKwkJCWdvdG8gZnJlZTsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwlkcm1fY29u bmVjdG9yX2xpc3RfaXRlcl9lbmQoJmNvbm5faXRlcik7Cj4gPiArCj4gPiArCS8qIGNsZWFyIHRo ZSBhY3F1aXJlIGNvbnRleHQgc28gdGhhdCBpdCBpc24ndCBhY2NpZGVudGFsbHkgcmV1c2VkICov Cj4gPiArCXN0YXRlLT5hY3F1aXJlX2N0eCA9IE5VTEw7Cj4gPiArCj4gPiArZnJlZToKPiA+ICsJ aWYgKGVyciA8IDApIHsKPiA+ICsJCWRybV9hdG9taWNfc3RhdGVfcHV0KHN0YXRlKTsKPiA+ICsJ CXN0YXRlID0gRVJSX1BUUihlcnIpOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiBzdGF0ZTsK PiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9kdXBsaWNhdGVfc3Rh dGUpOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIF9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9y X2Rlc3Ryb3lfc3RhdGUgLSByZWxlYXNlIGNvbm5lY3RvciBzdGF0ZQo+ID4gKyAqIEBzdGF0ZTog Y29ubmVjdG9yIHN0YXRlIG9iamVjdCB0byByZWxlYXNlCj4gPiArICoKPiA+ICsgKiBSZWxlYXNl cyBhbGwgcmVzb3VyY2VzIHN0b3JlZCBpbiB0aGUgY29ubmVjdG9yIHN0YXRlIHdpdGhvdXQgYWN0 dWFsbHkKPiA+ICsgKiBmcmVlaW5nIHRoZSBtZW1vcnkgb2YgdGhlIGNvbm5lY3RvciBzdGF0ZS4g VGhpcyBpcyB1c2VmdWwgZm9yIGRyaXZlcnMgdGhhdAo+ID4gKyAqIHN1YmNsYXNzIHRoZSBjb25u ZWN0b3Igc3RhdGUuCj4gPiArICovCj4gPiArdm9pZAo+ID4gK19fZHJtX2F0b21pY19oZWxwZXJf Y29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRl KQo+ID4gK3sKPiA+ICsJaWYgKHN0YXRlLT5jcnRjKQo+ID4gKwkJZHJtX2Nvbm5lY3Rvcl9wdXQo c3RhdGUtPmNvbm5lY3Rvcik7Cj4gPiArCj4gPiArCWlmIChzdGF0ZS0+Y29tbWl0KQo+ID4gKwkJ ZHJtX2NydGNfY29tbWl0X3B1dChzdGF0ZS0+Y29tbWl0KTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZ TUJPTChfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlKTsKPiA+ICsK PiA+ICsvKioKPiA+ICsgKiBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0 ZSAtIGRlZmF1bHQgc3RhdGUgZGVzdHJveSBob29rCj4gPiArICogQGNvbm5lY3RvcjogZHJtIGNv bm5lY3Rvcgo+ID4gKyAqIEBzdGF0ZTogY29ubmVjdG9yIHN0YXRlIG9iamVjdCB0byByZWxlYXNl Cj4gPiArICoKPiA+ICsgKiBEZWZhdWx0IGNvbm5lY3RvciBzdGF0ZSBkZXN0cm95IGhvb2sgZm9y IGRyaXZlcnMgd2hpY2ggZG9uJ3QgaGF2ZSB0aGVpciBvd24KPiA+ICsgKiBzdWJjbGFzc2VkIGNv bm5lY3RvciBzdGF0ZSBzdHJ1Y3R1cmUuCj4gPiArICovCj4gPiArdm9pZCBkcm1fYXRvbWljX2hl bHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLAo+ID4gKwkJCQkJICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUpCj4gPiAr ewo+ID4gKwlfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlKHN0YXRl KTsKPiA+ICsJa2ZyZWUoc3RhdGUpOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9hdG9t aWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlKTsKPiA+ICsKPiA+ICsvKioKPiA+ICsg KiBkcm1fYXRvbWljX2hlbHBlcl9sZWdhY3lfZ2FtbWFfc2V0IC0gc2V0IHRoZSBsZWdhY3kgZ2Ft bWEgY29ycmVjdGlvbiB0YWJsZQo+ID4gKyAqIEBjcnRjOiBDUlRDIG9iamVjdAo+ID4gKyAqIEBy ZWQ6IHJlZCBjb3JyZWN0aW9uIHRhYmxlCj4gPiArICogQGdyZWVuOiBncmVlbiBjb3JyZWN0aW9u IHRhYmxlCj4gPiArICogQGJsdWU6IGdyZWVuIGNvcnJlY3Rpb24gdGFibGUKPiA+ICsgKiBAc2l6 ZTogc2l6ZSBvZiB0aGUgdGFibGVzCj4gPiArICogQGN0eDogbG9jayBhY3F1aXJlIGNvbnRleHQK PiA+ICsgKgo+ID4gKyAqIEltcGxlbWVudHMgc3VwcG9ydCBmb3IgbGVnYWN5IGdhbW1hIGNvcnJl Y3Rpb24gdGFibGUgZm9yIGRyaXZlcnMKPiA+ICsgKiB0aGF0IHN1cHBvcnQgY29sb3IgbWFuYWdl bWVudCB0aHJvdWdoIHRoZSBERUdBTU1BX0xVVC9HQU1NQV9MVVQKPiA+ICsgKiBwcm9wZXJ0aWVz LiBTZWUgZHJtX2NydGNfZW5hYmxlX2NvbG9yX21nbXQoKSBhbmQgdGhlIGNvbnRhaW5pbmcgY2hh cHRlciBmb3IKPiA+ICsgKiBob3cgdGhlIGF0b21pYyBjb2xvciBtYW5hZ2VtZW50IGFuZCBnYW1t YSB0YWJsZXMgd29yay4KPiA+ICsgKi8KPiA+ICtpbnQgZHJtX2F0b21pY19oZWxwZXJfbGVnYWN5 X2dhbW1hX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiArCQkJCSAgICAgICB1MTYgKnJl ZCwgdTE2ICpncmVlbiwgdTE2ICpibHVlLAo+ID4gKwkJCQkgICAgICAgdWludDMyX3Qgc2l6ZSwK PiA+ICsJCQkJICAgICAgIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4KQo+ID4g K3sKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiA+ICsJc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOwo+ID4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNy dGNfc3RhdGU7Cj4gPiArCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYiA9IE5VTEw7Cj4g PiArCXN0cnVjdCBkcm1fY29sb3JfbHV0ICpibG9iX2RhdGE7Cj4gPiArCWludCBpLCByZXQgPSAw Owo+ID4gKwlib29sIHJlcGxhY2VkOwo+ID4gKwo+ID4gKwlzdGF0ZSA9IGRybV9hdG9taWNfc3Rh dGVfYWxsb2MoY3J0Yy0+ZGV2KTsKPiA+ICsJaWYgKCFzdGF0ZSkKPiA+ICsJCXJldHVybiAtRU5P TUVNOwo+ID4gKwo+ID4gKwlibG9iID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9ibG9iKGRldiwKPiA+ ICsJCQkJCXNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2x1dCkgKiBzaXplLAo+ID4gKwkJCQkJTlVM TCk7Cj4gPiArCWlmIChJU19FUlIoYmxvYikpIHsKPiA+ICsJCXJldCA9IFBUUl9FUlIoYmxvYik7 Cj4gPiArCQlibG9iID0gTlVMTDsKPiA+ICsJCWdvdG8gZmFpbDsKPiA+ICsJfQo+ID4gKwo+ID4g KwkvKiBQcmVwYXJlIEdBTU1BX0xVVCB3aXRoIHRoZSBsZWdhY3kgdmFsdWVzLiAqLwo+ID4gKwli bG9iX2RhdGEgPSBibG9iLT5kYXRhOwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7 Cj4gPiArCQlibG9iX2RhdGFbaV0ucmVkID0gcmVkW2ldOwo+ID4gKwkJYmxvYl9kYXRhW2ldLmdy ZWVuID0gZ3JlZW5baV07Cj4gPiArCQlibG9iX2RhdGFbaV0uYmx1ZSA9IGJsdWVbaV07Cj4gPiAr CX0KPiA+ICsKPiA+ICsJc3RhdGUtPmFjcXVpcmVfY3R4ID0gY3R4Owo+ID4gKwljcnRjX3N0YXRl ID0gZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdGF0ZSwgY3J0Yyk7Cj4gPiArCWlmIChJU19F UlIoY3J0Y19zdGF0ZSkpIHsKPiA+ICsJCXJldCA9IFBUUl9FUlIoY3J0Y19zdGF0ZSk7Cj4gPiAr CQlnb3RvIGZhaWw7Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyogUmVzZXQgREVHQU1NQV9MVVQgYW5k IENUTSBwcm9wZXJ0aWVzLiAqLwo+ID4gKwlyZXBsYWNlZCAgPSBkcm1fcHJvcGVydHlfcmVwbGFj ZV9ibG9iKCZjcnRjX3N0YXRlLT5kZWdhbW1hX2x1dCwgTlVMTCk7Cj4gPiArCXJlcGxhY2VkIHw9 IGRybV9wcm9wZXJ0eV9yZXBsYWNlX2Jsb2IoJmNydGNfc3RhdGUtPmN0bSwgTlVMTCk7Cj4gPiAr CXJlcGxhY2VkIHw9IGRybV9wcm9wZXJ0eV9yZXBsYWNlX2Jsb2IoJmNydGNfc3RhdGUtPmdhbW1h X2x1dCwgYmxvYik7Cj4gPiArCWNydGNfc3RhdGUtPmNvbG9yX21nbXRfY2hhbmdlZCB8PSByZXBs YWNlZDsKPiA+ICsKPiA+ICsJcmV0ID0gZHJtX2F0b21pY19jb21taXQoc3RhdGUpOwo+ID4gKwo+ ID4gK2ZhaWw6Cj4gPiArCWRybV9hdG9taWNfc3RhdGVfcHV0KHN0YXRlKTsKPiA+ICsJZHJtX3By b3BlcnR5X2Jsb2JfcHV0KGJsb2IpOwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICtFWFBP UlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX2xlZ2FjeV9nYW1tYV9zZXQpOwo+ID4gKwo+ID4g Ky8qKgo+ID4gKyAqIF9fZHJtX2F0b21pY19oZWxwZXJfcHJpdmF0ZV9kdXBsaWNhdGVfc3RhdGUg LSBjb3B5IGF0b21pYyBwcml2YXRlIHN0YXRlCj4gPiArICogQG9iajogQ1JUQyBvYmplY3QKPiA+ ICsgKiBAc3RhdGU6IG5ldyBwcml2YXRlIG9iamVjdCBzdGF0ZQo+ID4gKyAqCj4gPiArICogQ29w aWVzIGF0b21pYyBzdGF0ZSBmcm9tIGEgcHJpdmF0ZSBvYmplY3RzJ3MgY3VycmVudCBzdGF0ZSBh bmQgcmVzZXRzIGluZmVycmVkIHZhbHVlcy4KPiA+ICsgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZHJp dmVycyB0aGF0IHN1YmNsYXNzIHRoZSBwcml2YXRlIHN0YXRlLgo+ID4gKyAqLwo+ID4gK3ZvaWQg X19kcm1fYXRvbWljX2hlbHBlcl9wcml2YXRlX29ial9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRy bV9wcml2YXRlX29iaiAqb2JqLAo+ID4gKwkJCQkJCSAgICAgc3RydWN0IGRybV9wcml2YXRlX3N0 YXRlICpzdGF0ZSkKPiA+ICt7Cj4gPiArCW1lbWNweShzdGF0ZSwgb2JqLT5zdGF0ZSwgc2l6ZW9m KCpzdGF0ZSkpOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKF9fZHJtX2F0b21pY19oZWxwZXJf cHJpdmF0ZV9vYmpfZHVwbGljYXRlX3N0YXRlKTsKPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2Ry bS9kcm1fYXRvbWljX2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2F0b21pY19oZWxwZXIuaAo+ ID4gaW5kZXggZTYwYzRmMGY4ODI3Li4yNWNhMDA5NzU2M2UgMTAwNjQ0Cj4gPiAtLS0gYS9pbmNs dWRlL2RybS9kcm1fYXRvbWljX2hlbHBlci5oCj4gPiArKysgYi9pbmNsdWRlL2RybS9kcm1fYXRv bWljX2hlbHBlci5oCj4gPiBAQCAtMzEsNiArMzEsNyBAQAo+ID4gICNpbmNsdWRlIDxkcm0vZHJt X2NydGMuaD4KPiA+ICAjaW5jbHVkZSA8ZHJtL2RybV9tb2Rlc2V0X2hlbHBlcl92dGFibGVzLmg+ Cj4gPiAgI2luY2x1ZGUgPGRybS9kcm1fbW9kZXNldF9oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8 ZHJtL2RybV9hdG9taWNfc3RhdGVfaGVscGVyLmg+Cj4gPiAgI2luY2x1ZGUgPGRybS9kcm1fdXRp bC5oPgo+ID4gIAo+ID4gIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlOwo+ID4gQEAgLTE0NSw0OSAr MTQ2LDYgQEAgaW50IGRybV9hdG9taWNfaGVscGVyX3BhZ2VfZmxpcF90YXJnZXQoCj4gPiAgCQkJ CXVpbnQzMl90IHRhcmdldCwKPiA+ICAJCQkJc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4 ICpjdHgpOwo+ID4gIAo+ID4gLS8qIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBzdGF0ZSBo YW5kbGluZyAqLwo+ID4gLXZvaWQgZHJtX2F0b21pY19oZWxwZXJfY3J0Y19yZXNldChzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpOwo+ID4gLXZvaWQgX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxp Y2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiAtCQkJCQkgICAgICBzdHJ1Y3Qg ZHJtX2NydGNfc3RhdGUgKnN0YXRlKTsKPiA+IC1zdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKgo+ID4g LWRybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAq Y3J0Yyk7Cj4gPiAtdm9pZCBfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZShz dHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKTsKPiA+IC12b2lkIGRybV9hdG9taWNfaGVscGVy X2NydGNfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiAtCQkJCQkgIHN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpOwo+ID4gLQo+ID4gLXZvaWQgX19kcm1fYXRvbWlj X2hlbHBlcl9wbGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+IC0JCQkJICAg ICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSk7Cj4gPiAtdm9pZCBkcm1fYXRvbWljX2hl bHBlcl9wbGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSk7Cj4gPiAtdm9pZCBfX2Ry bV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKPiA+IC0JCQkJCSAgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSk7Cj4g PiAtc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqCj4gPiAtZHJtX2F0b21pY19oZWxwZXJfcGxhbmVf ZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKTsKPiA+IC12b2lkIF9fZHJt X2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpzdGF0ZSk7Cj4gPiAtdm9pZCBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRl KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ID4gLQkJCQkJICBzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpzdGF0ZSk7Cj4gPiAtCj4gPiAtdm9pZCBfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rv cl9yZXNldChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gLQkJCQkJIHN0cnVj dCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKTsKPiA+IC12b2lkIGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9yZXNldChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsK PiA+IC12b2lkCj4gPiAtX19kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0 YXRlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiAtCQkJCQkgICBzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUpOwo+ID4gLXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0 YXRlICoKPiA+IC1kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwo+ID4gLXN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICoKPiA+IC1kcm1fYXRvbWljX2hlbHBlcl9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKPiA+IC0JCQkJICBzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggKmN0 eCk7Cj4gPiAtdm9pZAo+ID4gLV9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lf c3RhdGUoc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlKTsKPiA+IC12b2lkIGRybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsCj4gPiAtCQkJCQkgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0 ZSk7Cj4gPiAtaW50IGRybV9hdG9taWNfaGVscGVyX2xlZ2FjeV9nYW1tYV9zZXQoc3RydWN0IGRy bV9jcnRjICpjcnRjLAo+ID4gLQkJCQkgICAgICAgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sIHUxNiAq Ymx1ZSwKPiA+IC0JCQkJICAgICAgIHVpbnQzMl90IHNpemUsCj4gPiAtCQkJCSAgICAgICBzdHJ1 Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggKmN0eCk7Cj4gPiAtdm9pZCBfX2RybV9hdG9taWNf aGVscGVyX3ByaXZhdGVfb2JqX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfb2Jq ICpvYmosCj4gPiAtCQkJCQkJICAgICBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKnN0YXRlKTsK PiA+IC0KPiA+ICAvKioKPiA+ICAgKiBkcm1fYXRvbWljX2NydGNfZm9yX2VhY2hfcGxhbmUgLSBp dGVyYXRlIG92ZXIgcGxhbmVzIGN1cnJlbnRseSBhdHRhY2hlZCB0byBDUlRDCj4gPiAgICogQHBs YW5lOiB0aGUgbG9vcCBjdXJzb3IKPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fYXRv bWljX3N0YXRlX2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2F0b21pY19zdGF0ZV9oZWxwZXIu aAo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNWI4MmNj ZmRiNTAyCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9pbmNsdWRlL2RybS9kcm1fYXRvbWlj X3N0YXRlX2hlbHBlci5oCj4gPiBAQCAtMCwwICsxLDgwIEBACj4gPiArLyoKPiA+ICsgKiBDb3B5 cmlnaHQgKEMpIDIwMTggSW50ZWwgQ29ycC4KPiA+ICsgKgo+ID4gKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh Cj4gPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiA+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gPiAr ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsCj4gPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gPiArICogU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u czoKPiA+ICsgKgo+ID4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCj4gPiArICogYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCj4gPiArICoKPiA+ICsgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgo+ID4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ID4gKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAo+ID4gKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgo+ID4gKyAqIE9USEVSIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAo+ID4g KyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUgo+ID4gKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K PiA+ICsgKgo+ID4gKyAqIEF1dGhvcnM6Cj4gPiArICogUm9iIENsYXJrIDxyb2JkY2xhcmtAZ21h aWwuY29tPgo+ID4gKyAqIERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4g PiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gPiArCj4gPiArc3Ry dWN0IGRybV9jcnRjOwo+ID4gK3N0cnVjdCBkcm1fY3J0Y19zdGF0ZTsKPiA+ICtzdHJ1Y3QgZHJt X3BsYW5lOwo+ID4gK3N0cnVjdCBkcm1fcGxhbmVfc3RhdGU7Cj4gPiArc3RydWN0IGRybV9jb25u ZWN0b3I7Cj4gPiArc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGU7Cj4gPiArc3RydWN0IGRybV9w cml2YXRlX29iajsKPiA+ICtzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGU7Cj4gPiArc3RydWN0IGRy bV9tb2Rlc2V0X2FjcXVpcmVfY3R4Owo+ID4gK3N0cnVjdCBkcm1fZGV2aWNlOwo+ID4gKwo+ID4g K3ZvaWQgZHJtX2F0b21pY19oZWxwZXJfY3J0Y19yZXNldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMp Owo+ID4gK3ZvaWQgX19kcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1 Y3QgZHJtX2NydGMgKmNydGMsCj4gPiArCQkJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg KnN0YXRlKTsKPiA+ICtzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKgo+ID4gK2RybV9hdG9taWNfaGVs cGVyX2NydGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gPiArdm9p ZCBfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGNf c3RhdGUgKnN0YXRlKTsKPiA+ICt2b2lkIGRybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9z dGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiArCQkJCQkgIHN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqc3RhdGUpOwo+ID4gKwo+ID4gK3ZvaWQgX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9y ZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+ICsJCQkJICAgICBzdHJ1Y3QgZHJtX3Bs YW5lX3N0YXRlICpzdGF0ZSk7Cj4gPiArdm9pZCBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9yZXNl dChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSk7Cj4gPiArdm9pZCBfX2RybV9hdG9taWNfaGVscGVy X3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+ICsJCQkJ CSAgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSk7Cj4gPiArc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqCj4gPiArZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRl KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKTsKPiA+ICt2b2lkIF9fZHJtX2F0b21pY19oZWxwZXJf cGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSk7Cj4gPiAr dm9pZCBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAo+ID4gKwkJCQkJICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSk7Cj4g PiArCj4gPiArdm9pZCBfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldChzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gKwkJCQkJIHN0cnVjdCBkcm1fY29ubmVjdG9y X3N0YXRlICpjb25uX3N0YXRlKTsKPiA+ICt2b2lkIGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rv cl9yZXNldChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPiA+ICt2b2lkCj4gPiAr X19kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiArCQkJCQkgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z dGF0ZSAqc3RhdGUpOwo+ID4gK3N0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICoKPiA+ICtkcm1f YXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IpOwo+ID4gK3N0cnVjdCBkcm1fYXRvbWljX3N0YXRlICoKPiA+ICtkcm1f YXRvbWljX2hlbHBlcl9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ ICsJCQkJICBzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggKmN0eCk7Cj4gPiArdm9pZAo+ ID4gK19fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRy bV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlKTsKPiA+ICt2b2lkIGRybV9hdG9taWNfaGVscGVyX2Nv bm5lY3Rvcl9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4g PiArCQkJCQkgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSk7Cj4gPiAraW50IGRy bV9hdG9taWNfaGVscGVyX2xlZ2FjeV9nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ ID4gKwkJCQkgICAgICAgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sIHUxNiAqYmx1ZSwKPiA+ICsJCQkJ ICAgICAgIHVpbnQzMl90IHNpemUsCj4gPiArCQkJCSAgICAgICBzdHJ1Y3QgZHJtX21vZGVzZXRf YWNxdWlyZV9jdHggKmN0eCk7Cj4gPiArdm9pZCBfX2RybV9hdG9taWNfaGVscGVyX3ByaXZhdGVf b2JqX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqICpvYmosCj4gPiArCQkJ CQkJICAgICBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKnN0YXRlKTsKPiA+IC0tIAo+ID4gMi4x OS4wLnJjMgo+ID4gCj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwo+ID4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+ID4gSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwo+ID4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngKPiAKPiAtLSAKPiBWaWxsZSBTeXJqw6Rsw6QKPiBJbnRlbAoKLS0g CkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6 Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAo=