From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rodrigo Vivi Subject: Re: [PATCH] Revert "Merge branch 'x86-apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip" Date: Wed, 29 Nov 2017 16:07:23 -0800 Message-ID: <20171130000723.ch733474bg43xygp@intel.com> References: <20171129080543.28794-1-maarten.lankhorst@linux.intel.com> <20171129233711.bsi4d6fdj7vpog6s@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0A2406E9D1 for ; Thu, 30 Nov 2017 00:07:23 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20171129233711.bsi4d6fdj7vpog6s@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Maarten Lankhorst Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBOb3YgMjksIDIwMTcgYXQgMTE6Mzc6MTFQTSArMDAwMCwgUm9kcmlnbyBWaXZpIHdy b3RlOgo+IAo+IFdoYXQncyB0aGUgaXNzdWUgaGVyZT8KCm5ldmVybWluZC4uLiBJIGZvdW5kIHRo ZSBpbmZvIEkgd2FzIGxvb2tpbmcgZm9yIGhlcmU6CgpodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Au b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM3MTIKCjspCgo+IAo+IE9uIFdlZCwgTm92IDI5LCAyMDE3 IGF0IDA4OjA1OjQzQU0gKzAwMDAsIE1hYXJ0ZW4gTGFua2hvcnN0IHdyb3RlOgo+ID4gLS0tCj4g PiAgYXJjaC94ODYvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgLQo+ID4g IGFyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaCAgICAgICAgICAgICAgfCAgMjcwICsrKysrLS0t Cj4gPiAgYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oICAgICAgICAgICAgICB8ICAgIDIgKy0K PiA+ICBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaCAgICAgICAgICAgIHwgICAgNiArLQo+ ID4gIGFyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaCAgICAgICAgICAgfCAgICAyICsKPiA+ ICBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnEuaCAgICAgICAgICAgICAgIHwgICAgNCArCj4gPiAg YXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaCAgICAgICB8ICAgIDggKy0KPiA+ICBh cmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFkb21haW4uaCAgICAgICAgIHwgICAgMSAtCj4gPiAgYXJj aC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCAgICAgICAgICB8ICAgIDIgKy0KPiA+ICBhcmNo L3g4Ni9pbmNsdWRlL2FzbS90cmFjZS9pcnFfdmVjdG9ycy5oIHwgIDI0OCAtLS0tLS0tCj4gPiAg YXJjaC94ODYvaW5jbHVkZS9hc20veDJhcGljLmggICAgICAgICAgICB8ICAgNTAgKysKPiA+ICBh cmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oICAgICAgICAgIHwgICAgMiAtCj4gPiAgYXJj aC94ODYva2VybmVsL2FwaWMvTWFrZWZpbGUgICAgICAgICAgICB8ICAgIDIgKy0KPiA+ICBhcmNo L3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMgICAgICAgICAgICAgIHwgIDIzOSArKysrLS0tCj4gPiAg YXJjaC94ODYva2VybmVsL2FwaWMvYXBpY19jb21tb24uYyAgICAgICB8ICAgNDYgLS0KPiA+ICBh cmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYyAgICAgIHwgICAxMCArLQo+ID4gIGFy Y2gveDg2L2tlcm5lbC9hcGljL2FwaWNfbm9vcC5jICAgICAgICAgfCAgIDI1ICstCj4gPiAgYXJj aC94ODYva2VybmVsL2FwaWMvYXBpY19udW1hY2hpcC5jICAgICB8ICAgMTIgKy0KPiA+ICBhcmNo L3g4Ni9rZXJuZWwvYXBpYy9iaWdzbXBfMzIuYyAgICAgICAgIHwgICAgOCArLQo+ID4gIGFyY2gv eDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYyAgICAgICAgICAgfCAgMTMwICsrLS0KPiA+ICBhcmNo L3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV8zMi5jICAgICAgICAgIHwgICAyOSArLQo+ID4gIGFyY2gv eDg2L2tlcm5lbC9hcGljL3ZlY3Rvci5jICAgICAgICAgICAgfCAxMDk5ICsrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tLQo+ID4gIGFyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpYy5oICAgICAg ICAgICAgfCAgICA5IC0KPiA+ICBhcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfY2x1c3Rlci5j ICAgIHwgIDE5NiArKysrLS0KPiA+ICBhcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfcGh5cy5j ICAgICAgIHwgICA0NCArLQo+ID4gIGFyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMg ICAgICAgfCAgIDE3ICstCj4gPiAgYXJjaC94ODYva2VybmVsL2k4MjU5LmMgICAgICAgICAgICAg ICAgICB8ICAgIDEgLQo+ID4gIGFyY2gveDg2L2tlcm5lbC9pZHQuYyAgICAgICAgICAgICAgICAg ICAgfCAgIDEyICstCj4gPiAgYXJjaC94ODYva2VybmVsL2lycS5jICAgICAgICAgICAgICAgICAg ICB8ICAxMDEgKystCj4gPiAgYXJjaC94ODYva2VybmVsL2lycWluaXQuYyAgICAgICAgICAgICAg ICB8ICAgIDQgKy0KPiA+ICBhcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyAgICAgICAgICAgICAgICAg IHwgICAxMiArCj4gPiAgYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYyAgICAgICAgICAgICAgICB8 ICAgOTkgKystCj4gPiAgYXJjaC94ODYva2VybmVsL3RpbWUuYyAgICAgICAgICAgICAgICAgICB8 ICAgIDUgLQo+ID4gIGFyY2gveDg2L2tlcm5lbC90cmFwcy5jICAgICAgICAgICAgICAgICAgfCAg ICAyICstCj4gPiAgYXJjaC94ODYva2VybmVsL3ZzbXBfNjQuYyAgICAgICAgICAgICAgICB8ICAg MTkgKwo+ID4gIGFyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jICAgICAgICAgICAgICAgfCAgICAx IC0KPiA+ICBhcmNoL3g4Ni94ZW4vYXBpYy5jICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiAr LQo+ID4gIGFyY2gveDg2L3hlbi9lbmxpZ2h0ZW5fcHYuYyAgICAgICAgICAgICAgfCAgICAxIC0K PiA+ICBkcml2ZXJzL2lvbW11L2FtZF9pb21tdS5jICAgICAgICAgICAgICAgIHwgICAzOSArLQo+ ID4gIGRyaXZlcnMvaW9tbXUvaW50ZWxfaXJxX3JlbWFwcGluZy5jICAgICAgfCAgIDM4ICstCj4g PiAgZHJpdmVycy9wY2kvbXNpLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgLQo+ID4g IGluaXQvbWFpbi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCj4gPiAg a2VybmVsL2lycS9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgLQo+ID4gIDQz IGZpbGVzIGNoYW5nZWQsIDEzMTcgaW5zZXJ0aW9ucygrKSwgMTQ5MyBkZWxldGlvbnMoLSkKPiA+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC94ODYvaW5jbHVkZS9hc20veDJhcGljLmgKPiA+ICBk ZWxldGUgbW9kZSAxMDA2NDQgYXJjaC94ODYva2VybmVsL2FwaWMvYXBpY19jb21tb24uYwo+ID4g IGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWMuaAo+ID4gCj4g PiBkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKPiA+IGlu ZGV4IDhlZWQzZjk0YmZjNy4uMWEwNjBhZmQ5OTEzIDEwMDY0NAo+ID4gLS0tIGEvYXJjaC94ODYv S2NvbmZpZwo+ID4gKysrIGIvYXJjaC94ODYvS2NvbmZpZwo+ID4gQEAgLTkzLDEwICs5Myw4IEBA IGNvbmZpZyBYODYKPiA+ICAJc2VsZWN0IEdFTkVSSUNfRklORF9GSVJTVF9CSVQKPiA+ICAJc2Vs ZWN0IEdFTkVSSUNfSU9NQVAKPiA+ICAJc2VsZWN0IEdFTkVSSUNfSVJRX0VGRkVDVElWRV9BRkZf TUFTSwlpZiBTTVAKPiA+IC0Jc2VsZWN0IEdFTkVSSUNfSVJRX01BVFJJWF9BTExPQ0FUT1IJaWYg WDg2X0xPQ0FMX0FQSUMKPiA+ICAJc2VsZWN0IEdFTkVSSUNfSVJRX01JR1JBVElPTgkJaWYgU01Q Cj4gPiAgCXNlbGVjdCBHRU5FUklDX0lSUV9QUk9CRQo+ID4gLQlzZWxlY3QgR0VORVJJQ19JUlFf UkVTRVJWQVRJT05fTU9ERQo+ID4gIAlzZWxlY3QgR0VORVJJQ19JUlFfU0hPVwo+ID4gIAlzZWxl Y3QgR0VORVJJQ19QRU5ESU5HX0lSUQkJaWYgU01QCj4gPiAgCXNlbGVjdCBHRU5FUklDX1NNUF9J RExFX1RIUkVBRAo+ID4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaCBi L2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaAo+ID4gaW5kZXggYTllNTdmMDhiZmE2Li41ZjAx NjcxYzY4ZjIgMTAwNjQ0Cj4gPiAtLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKPiA+ ICsrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaAo+ID4gQEAgLTUzLDE1ICs1Myw2IEBA IGV4dGVybiBpbnQgbG9jYWxfYXBpY190aW1lcl9jMl9vazsKPiA+ICBleHRlcm4gaW50IGRpc2Fi bGVfYXBpYzsKPiA+ICBleHRlcm4gdW5zaWduZWQgaW50IGxhcGljX3RpbWVyX2ZyZXF1ZW5jeTsK PiA+ICAKPiA+IC1leHRlcm4gZW51bSBhcGljX2ludHJfbW9kZV9pZCBhcGljX2ludHJfbW9kZTsK PiA+IC1lbnVtIGFwaWNfaW50cl9tb2RlX2lkIHsKPiA+IC0JQVBJQ19QSUMsCj4gPiAtCUFQSUNf VklSVFVBTF9XSVJFLAo+ID4gLQlBUElDX1ZJUlRVQUxfV0lSRV9OT19DT05GSUcsCj4gPiAtCUFQ SUNfU1lNTUVUUklDX0lPLAo+ID4gLQlBUElDX1NZTU1FVFJJQ19JT19OT19ST1VUSU5HCj4gPiAt fTsKPiA+IC0KPiA+ICAjaWZkZWYgQ09ORklHX1NNUAo+ID4gIGV4dGVybiB2b2lkIF9faW5xdWly ZV9yZW1vdGVfYXBpYyhpbnQgYXBpY2lkKTsKPiA+ICAjZWxzZSAvKiBDT05GSUdfU01QICovCj4g PiBAQCAtMTM2LDEzICsxMjcsMTQgQEAgZXh0ZXJuIHZvaWQgZGlzY29ubmVjdF9ic3BfQVBJQyhp bnQgdmlydF93aXJlX3NldHVwKTsKPiA+ICBleHRlcm4gdm9pZCBkaXNhYmxlX2xvY2FsX0FQSUMo dm9pZCk7Cj4gPiAgZXh0ZXJuIHZvaWQgbGFwaWNfc2h1dGRvd24odm9pZCk7Cj4gPiAgZXh0ZXJu IHZvaWQgc3luY19BcmJfSURzKHZvaWQpOwo+ID4gLWV4dGVybiB2b2lkIGFwaWNfaW50cl9tb2Rl X2luaXQodm9pZCk7Cj4gPiArZXh0ZXJuIHZvaWQgaW5pdF9ic3BfQVBJQyh2b2lkKTsKPiA+ICBl eHRlcm4gdm9pZCBzZXR1cF9sb2NhbF9BUElDKHZvaWQpOwo+ID4gIGV4dGVybiB2b2lkIGluaXRf YXBpY19tYXBwaW5ncyh2b2lkKTsKPiA+ICB2b2lkIHJlZ2lzdGVyX2xhcGljX2FkZHJlc3ModW5z aWduZWQgbG9uZyBhZGRyZXNzKTsKPiA+ICBleHRlcm4gdm9pZCBzZXR1cF9ib290X0FQSUNfY2xv Y2sodm9pZCk7Cj4gPiAgZXh0ZXJuIHZvaWQgc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2sodm9p ZCk7Cj4gPiAgZXh0ZXJuIHZvaWQgbGFwaWNfdXBkYXRlX3RzY19mcmVxKHZvaWQpOwo+ID4gK2V4 dGVybiBpbnQgQVBJQ19pbml0X3VuaXByb2Nlc3Nvcih2b2lkKTsKPiA+ICAKPiA+ICAjaWZkZWYg Q09ORklHX1g4Nl82NAo+ID4gIHN0YXRpYyBpbmxpbmUgaW50IGFwaWNfZm9yY2VfZW5hYmxlKHVu c2lnbmVkIGxvbmcgYWRkcikKPiA+IEBAIC0xNTMsNyArMTQ1LDcgQEAgc3RhdGljIGlubGluZSBp bnQgYXBpY19mb3JjZV9lbmFibGUodW5zaWduZWQgbG9uZyBhZGRyKQo+ID4gIGV4dGVybiBpbnQg YXBpY19mb3JjZV9lbmFibGUodW5zaWduZWQgbG9uZyBhZGRyKTsKPiA+ICAjZW5kaWYKPiA+ICAK PiA+IC1leHRlcm4gdm9pZCBhcGljX2JzcF9zZXR1cChib29sIHVwbW9kZSk7Cj4gPiArZXh0ZXJu IGludCBhcGljX2JzcF9zZXR1cChib29sIHVwbW9kZSk7Cj4gPiAgZXh0ZXJuIHZvaWQgYXBpY19h cF9zZXR1cCh2b2lkKTsKPiA+ICAKPiA+ICAvKgo+ID4gQEAgLTE2OSwxMCArMTYxLDYgQEAgc3Rh dGljIGlubGluZSBpbnQgYXBpY19pc19jbHVzdGVyZWRfYm94KHZvaWQpCj4gPiAgI2VuZGlmCj4g PiAgCj4gPiAgZXh0ZXJuIGludCBzZXR1cF9BUElDX2VpbHZ0KHU4IGx2dF9vZmYsIHU4IHZlY3Rv ciwgdTggbXNnX3R5cGUsIHU4IG1hc2spOwo+ID4gLWV4dGVybiB2b2lkIGxhcGljX2Fzc2lnbl9z eXN0ZW1fdmVjdG9ycyh2b2lkKTsKPiA+IC1leHRlcm4gdm9pZCBsYXBpY19hc3NpZ25fbGVnYWN5 X3ZlY3Rvcih1bnNpZ25lZCBpbnQgaXNhaXJxLCBib29sIHJlcGxhY2UpOwo+ID4gLWV4dGVybiB2 b2lkIGxhcGljX29ubGluZSh2b2lkKTsKPiA+IC1leHRlcm4gdm9pZCBsYXBpY19vZmZsaW5lKHZv aWQpOwo+ID4gIAo+ID4gICNlbHNlIC8qICFDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KPiA+ICBz dGF0aWMgaW5saW5lIHZvaWQgbGFwaWNfc2h1dGRvd24odm9pZCkgeyB9Cj4gPiBAQCAtMTgyLDkg KzE3MCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2xvY2FsX0FQSUModm9pZCkgeyB9 Cj4gPiAgIyBkZWZpbmUgc2V0dXBfYm9vdF9BUElDX2Nsb2NrIHg4Nl9pbml0X25vb3AKPiA+ICAj IGRlZmluZSBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jayB4ODZfaW5pdF9ub29wCj4gPiAgc3Rh dGljIGlubGluZSB2b2lkIGxhcGljX3VwZGF0ZV90c2NfZnJlcSh2b2lkKSB7IH0KPiA+IC1zdGF0 aWMgaW5saW5lIHZvaWQgYXBpY19pbnRyX21vZGVfaW5pdCh2b2lkKSB7IH0KPiA+IC1zdGF0aWMg aW5saW5lIHZvaWQgbGFwaWNfYXNzaWduX3N5c3RlbV92ZWN0b3JzKHZvaWQpIHsgfQo+ID4gLXN0 YXRpYyBpbmxpbmUgdm9pZCBsYXBpY19hc3NpZ25fbGVnYWN5X3ZlY3Rvcih1bnNpZ25lZCBpbnQg aSwgYm9vbCByKSB7IH0KPiA+ICAjZW5kaWYgLyogIUNPTkZJR19YODZfTE9DQUxfQVBJQyAqLwo+ ID4gIAo+ID4gICNpZmRlZiBDT05GSUdfWDg2X1gyQVBJQwo+ID4gQEAgLTI4MCw2MyArMjY1LDcz IEBAIHN0cnVjdCBpcnFfZGF0YTsKPiA+ICAgKiBKYW1lcyBDbGV2ZXJkb24uCj4gPiAgICovCj4g PiAgc3RydWN0IGFwaWMgewo+ID4gLQkvKiBIb3RwYXRoIGZ1bmN0aW9ucyBmaXJzdCAqLwo+ID4g LQl2b2lkCSgqZW9pX3dyaXRlKSh1MzIgcmVnLCB1MzIgdik7Cj4gPiAtCXZvaWQJKCpuYXRpdmVf ZW9pX3dyaXRlKSh1MzIgcmVnLCB1MzIgdik7Cj4gPiAtCXZvaWQJKCp3cml0ZSkodTMyIHJlZywg dTMyIHYpOwo+ID4gLQl1MzIJKCpyZWFkKSh1MzIgcmVnKTsKPiA+IC0KPiA+IC0JLyogSVBJIHJl bGF0ZWQgZnVuY3Rpb25zICovCj4gPiAtCXZvaWQJKCp3YWl0X2ljcl9pZGxlKSh2b2lkKTsKPiA+ IC0JdTMyCSgqc2FmZV93YWl0X2ljcl9pZGxlKSh2b2lkKTsKPiA+IC0KPiA+IC0Jdm9pZAkoKnNl bmRfSVBJKShpbnQgY3B1LCBpbnQgdmVjdG9yKTsKPiA+IC0Jdm9pZAkoKnNlbmRfSVBJX21hc2sp KGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKTsKPiA+IC0Jdm9pZAkoKnNl bmRfSVBJX21hc2tfYWxsYnV0c2VsZikoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1zaywgaW50IHZl Yyk7Cj4gPiAtCXZvaWQJKCpzZW5kX0lQSV9hbGxidXRzZWxmKShpbnQgdmVjdG9yKTsKPiA+IC0J dm9pZAkoKnNlbmRfSVBJX2FsbCkoaW50IHZlY3Rvcik7Cj4gPiAtCXZvaWQJKCpzZW5kX0lQSV9z ZWxmKShpbnQgdmVjdG9yKTsKPiA+IC0KPiA+IC0JLyogZGVzdF9sb2dpY2FsIGlzIHVzZWQgYnkg dGhlIElQSSBmdW5jdGlvbnMgKi8KPiA+IC0JdTMyCWRlc3RfbG9naWNhbDsKPiA+IC0JdTMyCWRp c2FibGVfZXNyOwo+ID4gLQl1MzIJaXJxX2RlbGl2ZXJ5X21vZGU7Cj4gPiAtCXUzMglpcnFfZGVz dF9tb2RlOwo+ID4gLQo+ID4gLQkvKiBGdW5jdGlvbnMgYW5kIGRhdGEgcmVsYXRlZCB0byB2ZWN0 b3IgYWxsb2NhdGlvbiAqLwo+ID4gLQl2b2lkCSgqdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKShp bnQgY3B1LCBzdHJ1Y3QgY3B1bWFzayAqcmV0bWFzaywKPiA+IC0JCQkJCSAgICBjb25zdCBzdHJ1 Y3QgY3B1bWFzayAqbWFzayk7Cj4gPiAtCWludAkoKmNwdV9tYXNrX3RvX2FwaWNpZCkoY29uc3Qg c3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCj4gPiAtCQkJCSAgICAgIHN0cnVjdCBpcnFfZGF0YSAq aXJxZGF0YSwKPiA+IC0JCQkJICAgICAgdW5zaWduZWQgaW50ICphcGljaWQpOwo+ID4gLQl1MzIJ KCpjYWxjX2Rlc3RfYXBpY2lkKSh1bnNpZ25lZCBpbnQgY3B1KTsKPiA+IC0KPiA+IC0JLyogSUNS IHJlbGF0ZWQgZnVuY3Rpb25zICovCj4gPiAtCXU2NAkoKmljcl9yZWFkKSh2b2lkKTsKPiA+IC0J dm9pZAkoKmljcl93cml0ZSkodTMyIGxvdywgdTMyIGhpZ2gpOwo+ID4gLQo+ID4gLQkvKiBQcm9i ZSwgc2V0dXAgYW5kIHNtcGJvb3QgZnVuY3Rpb25zICovCj4gPiAtCWludAkoKnByb2JlKSh2b2lk KTsKPiA+IC0JaW50CSgqYWNwaV9tYWR0X29lbV9jaGVjaykoY2hhciAqb2VtX2lkLCBjaGFyICpv ZW1fdGFibGVfaWQpOwo+ID4gLQlpbnQJKCphcGljX2lkX3ZhbGlkKShpbnQgYXBpY2lkKTsKPiA+ IC0JaW50CSgqYXBpY19pZF9yZWdpc3RlcmVkKSh2b2lkKTsKPiA+IC0KPiA+IC0JYm9vbAkoKmNo ZWNrX2FwaWNpZF91c2VkKShwaHlzaWRfbWFza190ICptYXAsIGludCBhcGljaWQpOwo+ID4gLQl2 b2lkCSgqaW5pdF9hcGljX2xkcikodm9pZCk7Cj4gPiAtCXZvaWQJKCppb2FwaWNfcGh5c19pZF9t YXApKHBoeXNpZF9tYXNrX3QgKnBoeXNfbWFwLCBwaHlzaWRfbWFza190ICpyZXRtYXApOwo+ID4g LQl2b2lkCSgqc2V0dXBfYXBpY19yb3V0aW5nKSh2b2lkKTsKPiA+IC0JaW50CSgqY3B1X3ByZXNl bnRfdG9fYXBpY2lkKShpbnQgbXBzX2NwdSk7Cj4gPiAtCXZvaWQJKCphcGljaWRfdG9fY3B1X3By ZXNlbnQpKGludCBwaHlzX2FwaWNpZCwgcGh5c2lkX21hc2tfdCAqcmV0bWFwKTsKPiA+IC0JaW50 CSgqY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudCkoaW50IHBoeXNfYXBpY2lkKTsKPiA+IC0JaW50 CSgqcGh5c19wa2dfaWQpKGludCBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKTsKPiA+IC0KPiA+ IC0JdTMyCSgqZ2V0X2FwaWNfaWQpKHVuc2lnbmVkIGxvbmcgeCk7Cj4gPiAtCXUzMgkoKnNldF9h cGljX2lkKSh1bnNpZ25lZCBpbnQgaWQpOwo+ID4gKwljaGFyICpuYW1lOwo+ID4gKwo+ID4gKwlp bnQgKCpwcm9iZSkodm9pZCk7Cj4gPiArCWludCAoKmFjcGlfbWFkdF9vZW1fY2hlY2spKGNoYXIg Km9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKTsKPiA+ICsJaW50ICgqYXBpY19pZF92YWxpZCko aW50IGFwaWNpZCk7Cj4gPiArCWludCAoKmFwaWNfaWRfcmVnaXN0ZXJlZCkodm9pZCk7Cj4gPiAr Cj4gPiArCXUzMiBpcnFfZGVsaXZlcnlfbW9kZTsKPiA+ICsJdTMyIGlycV9kZXN0X21vZGU7Cj4g PiArCj4gPiArCWNvbnN0IHN0cnVjdCBjcHVtYXNrICooKnRhcmdldF9jcHVzKSh2b2lkKTsKPiA+ ICsKPiA+ICsJaW50IGRpc2FibGVfZXNyOwo+ID4gKwo+ID4gKwlpbnQgZGVzdF9sb2dpY2FsOwo+ ID4gKwl1bnNpZ25lZCBsb25nICgqY2hlY2tfYXBpY2lkX3VzZWQpKHBoeXNpZF9tYXNrX3QgKm1h cCwgaW50IGFwaWNpZCk7Cj4gPiArCj4gPiArCXZvaWQgKCp2ZWN0b3JfYWxsb2NhdGlvbl9kb21h aW4pKGludCBjcHUsIHN0cnVjdCBjcHVtYXNrICpyZXRtYXNrLAo+ID4gKwkJCQkJIGNvbnN0IHN0 cnVjdCBjcHVtYXNrICptYXNrKTsKPiA+ICsJdm9pZCAoKmluaXRfYXBpY19sZHIpKHZvaWQpOwo+ ID4gKwo+ID4gKwl2b2lkICgqaW9hcGljX3BoeXNfaWRfbWFwKShwaHlzaWRfbWFza190ICpwaHlz X21hcCwgcGh5c2lkX21hc2tfdCAqcmV0bWFwKTsKPiA+ICsKPiA+ICsJdm9pZCAoKnNldHVwX2Fw aWNfcm91dGluZykodm9pZCk7Cj4gPiArCWludCAoKmNwdV9wcmVzZW50X3RvX2FwaWNpZCkoaW50 IG1wc19jcHUpOwo+ID4gKwl2b2lkICgqYXBpY2lkX3RvX2NwdV9wcmVzZW50KShpbnQgcGh5c19h cGljaWQsIHBoeXNpZF9tYXNrX3QgKnJldG1hcCk7Cj4gPiArCWludCAoKmNoZWNrX3BoeXNfYXBp Y2lkX3ByZXNlbnQpKGludCBwaHlzX2FwaWNpZCk7Cj4gPiArCWludCAoKnBoeXNfcGtnX2lkKShp bnQgY3B1aWRfYXBpYywgaW50IGluZGV4X21zYik7Cj4gPiArCj4gPiArCXVuc2lnbmVkIGludCAo KmdldF9hcGljX2lkKSh1bnNpZ25lZCBsb25nIHgpOwo+ID4gKwkvKiBDYW4ndCBiZSBOVUxMIG9u IDY0LWJpdCAqLwo+ID4gKwl1bnNpZ25lZCBsb25nICgqc2V0X2FwaWNfaWQpKHVuc2lnbmVkIGlu dCBpZCk7Cj4gPiArCj4gPiArCWludCAoKmNwdV9tYXNrX3RvX2FwaWNpZCkoY29uc3Qgc3RydWN0 IGNwdW1hc2sgKmNwdW1hc2ssCj4gPiArCQkJCSAgc3RydWN0IGlycV9kYXRhICppcnFkYXRhLAo+ ID4gKwkJCQkgIHVuc2lnbmVkIGludCAqYXBpY2lkKTsKPiA+ICsKPiA+ICsJLyogaXBpICovCj4g PiArCXZvaWQgKCpzZW5kX0lQSSkoaW50IGNwdSwgaW50IHZlY3Rvcik7Cj4gPiArCXZvaWQgKCpz ZW5kX0lQSV9tYXNrKShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZlY3Rvcik7Cj4g PiArCXZvaWQgKCpzZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYpKGNvbnN0IHN0cnVjdCBjcHVtYXNr ICptYXNrLAo+ID4gKwkJCQkJIGludCB2ZWN0b3IpOwo+ID4gKwl2b2lkICgqc2VuZF9JUElfYWxs YnV0c2VsZikoaW50IHZlY3Rvcik7Cj4gPiArCXZvaWQgKCpzZW5kX0lQSV9hbGwpKGludCB2ZWN0 b3IpOwo+ID4gKwl2b2lkICgqc2VuZF9JUElfc2VsZikoaW50IHZlY3Rvcik7Cj4gPiAgCj4gPiAg CS8qIHdha2V1cF9zZWNvbmRhcnlfY3B1ICovCj4gPiAtCWludAkoKndha2V1cF9zZWNvbmRhcnlf Y3B1KShpbnQgYXBpY2lkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2VpcCk7Cj4gPiArCWludCAoKndh a2V1cF9zZWNvbmRhcnlfY3B1KShpbnQgYXBpY2lkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2VpcCk7 Cj4gPiAgCj4gPiAtCXZvaWQJKCppbnF1aXJlX3JlbW90ZV9hcGljKShpbnQgYXBpY2lkKTsKPiA+ ICsJdm9pZCAoKmlucXVpcmVfcmVtb3RlX2FwaWMpKGludCBhcGljaWQpOwo+ID4gKwo+ID4gKwkv KiBhcGljIG9wcyAqLwo+ID4gKwl1MzIgKCpyZWFkKSh1MzIgcmVnKTsKPiA+ICsJdm9pZCAoKndy aXRlKSh1MzIgcmVnLCB1MzIgdik7Cj4gPiArCS8qCj4gPiArCSAqIC0+ZW9pX3dyaXRlKCkgaGFz IHRoZSBzYW1lIHNpZ25hdHVyZSBhcyAtPndyaXRlKCkuCj4gPiArCSAqCj4gPiArCSAqIERyaXZl cnMgY2FuIHN1cHBvcnQgYm90aCAtPmVvaV93cml0ZSgpIGFuZCAtPndyaXRlKCkgYnkgcGFzc2lu ZyB0aGUgc2FtZQo+ID4gKwkgKiBjYWxsYmFjayB2YWx1ZS4gS2VybmVsIGNhbiBvdmVycmlkZSAt PmVvaV93cml0ZSgpIGFuZCBmYWxsIGJhY2sKPiA+ICsJICogb24gd3JpdGUgZm9yIEVPSS4KPiA+ ICsJICovCj4gPiArCXZvaWQgKCplb2lfd3JpdGUpKHUzMiByZWcsIHUzMiB2KTsKPiA+ICsJdm9p ZCAoKm5hdGl2ZV9lb2lfd3JpdGUpKHUzMiByZWcsIHUzMiB2KTsKPiA+ICsJdTY0ICgqaWNyX3Jl YWQpKHZvaWQpOwo+ID4gKwl2b2lkICgqaWNyX3dyaXRlKSh1MzIgbG93LCB1MzIgaGlnaCk7Cj4g PiArCXZvaWQgKCp3YWl0X2ljcl9pZGxlKSh2b2lkKTsKPiA+ICsJdTMyICgqc2FmZV93YWl0X2lj cl9pZGxlKSh2b2lkKTsKPiA+ICAKPiA+ICAjaWZkZWYgQ09ORklHX1g4Nl8zMgo+ID4gIAkvKgo+ ID4gQEAgLTM1MSw3ICszNDYsNiBAQCBzdHJ1Y3QgYXBpYyB7Cj4gPiAgCSAqLwo+ID4gIAlpbnQg KCp4ODZfMzJfZWFybHlfbG9naWNhbF9hcGljaWQpKGludCBjcHUpOwo+ID4gICNlbmRpZgo+ID4g LQljaGFyCSpuYW1lOwo+ID4gIH07Cj4gPiAgCj4gPiAgLyoKPiA+IEBAIC0zODYsNyArMzgwLDYg QEAgZXh0ZXJuIHN0cnVjdCBhcGljICpfX2FwaWNkcml2ZXJzW10sICpfX2FwaWNkcml2ZXJzX2Vu ZFtdOwo+ID4gICAqLwo+ID4gICNpZmRlZiBDT05GSUdfU01QCj4gPiAgZXh0ZXJuIGludCB3YWtl dXBfc2Vjb25kYXJ5X2NwdV92aWFfbm1pKGludCBhcGljaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRf ZWlwKTsKPiA+IC1leHRlcm4gaW50IGxhcGljX2Nhbl91bnBsdWdfY3B1KHZvaWQpOwo+ID4gICNl bmRpZgo+ID4gIAo+ID4gICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKPiA+IEBAIC00NzAs MzMgKzQ2Myw4NCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRlZmF1bHRfZ2V0X2FwaWNfaWQo dW5zaWduZWQgbG9uZyB4KQo+ID4gIGV4dGVybiB2b2lkIGFwaWNfc2VuZF9JUElfc2VsZihpbnQg dmVjdG9yKTsKPiA+ICAKPiA+ICBERUNMQVJFX1BFUl9DUFUoaW50LCB4MmFwaWNfZXh0cmFfYml0 cyk7Cj4gPiArCj4gPiArZXh0ZXJuIGludCBkZWZhdWx0X2NwdV9wcmVzZW50X3RvX2FwaWNpZChp bnQgbXBzX2NwdSk7Cj4gPiArZXh0ZXJuIGludCBkZWZhdWx0X2NoZWNrX3BoeXNfYXBpY2lkX3By ZXNlbnQoaW50IHBoeXNfYXBpY2lkKTsKPiA+ICAjZW5kaWYKPiA+ICAKPiA+ICBleHRlcm4gdm9p ZCBnZW5lcmljX2JpZ3NtcF9wcm9iZSh2b2lkKTsKPiA+ICAKPiA+ICsKPiA+ICAjaWZkZWYgQ09O RklHX1g4Nl9MT0NBTF9BUElDCj4gPiAgCj4gPiAgI2luY2x1ZGUgPGFzbS9zbXAuaD4KPiA+ICAK PiA+ICAjZGVmaW5lIEFQSUNfREZSX1ZBTFVFCShBUElDX0RGUl9GTEFUKQo+ID4gIAo+ID4gK3N0 YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmRlZmF1bHRfdGFyZ2V0X2NwdXModm9p ZCkKPiA+ICt7Cj4gPiArI2lmZGVmIENPTkZJR19TTVAKPiA+ICsJcmV0dXJuIGNwdV9vbmxpbmVf bWFzazsKPiA+ICsjZWxzZQo+ID4gKwlyZXR1cm4gY3B1bWFza19vZigwKTsKPiA+ICsjZW5kaWYK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqb25s aW5lX3RhcmdldF9jcHVzKHZvaWQpCj4gPiArewo+ID4gKwlyZXR1cm4gY3B1X29ubGluZV9tYXNr Owo+ID4gK30KPiA+ICsKPiA+ICBERUNMQVJFX0VBUkxZX1BFUl9DUFVfUkVBRF9NT1NUTFkodTE2 LCB4ODZfYmlvc19jcHVfYXBpY2lkKTsKPiA+ICAKPiA+IC1leHRlcm4gc3RydWN0IGFwaWMgYXBp Y19ub29wOwo+ID4gIAo+ID4gIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlYWRfYXBpY19p ZCh2b2lkKQo+ID4gIHsKPiA+IC0JdW5zaWduZWQgaW50IHJlZyA9IGFwaWNfcmVhZChBUElDX0lE KTsKPiA+ICsJdW5zaWduZWQgaW50IHJlZzsKPiA+ICsKPiA+ICsJcmVnID0gYXBpY19yZWFkKEFQ SUNfSUQpOwo+ID4gIAo+ID4gIAlyZXR1cm4gYXBpYy0+Z2V0X2FwaWNfaWQocmVnKTsKPiA+ICB9 Cj4gPiAgCj4gPiAtZXh0ZXJuIGludCBkZWZhdWx0X2FwaWNfaWRfdmFsaWQoaW50IGFwaWNpZCk7 Cj4gPiArc3RhdGljIGlubGluZSBpbnQgZGVmYXVsdF9hcGljX2lkX3ZhbGlkKGludCBhcGljaWQp Cj4gPiArewo+ID4gKwlyZXR1cm4gKGFwaWNpZCA8IDI1NSk7Cj4gPiArfQo+ID4gKwo+ID4gIGV4 dGVybiBpbnQgZGVmYXVsdF9hY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKiwgY2hhciAqKTsKPiA+ ICsKPiA+ICBleHRlcm4gdm9pZCBkZWZhdWx0X3NldHVwX2FwaWNfcm91dGluZyh2b2lkKTsKPiA+ ICAKPiA+IC1leHRlcm4gdTMyIGFwaWNfZGVmYXVsdF9jYWxjX2FwaWNpZCh1bnNpZ25lZCBpbnQg Y3B1KTsKPiA+IC1leHRlcm4gdTMyIGFwaWNfZmxhdF9jYWxjX2FwaWNpZCh1bnNpZ25lZCBpbnQg Y3B1KTsKPiA+ICtleHRlcm4gc3RydWN0IGFwaWMgYXBpY19ub29wOwo+ID4gKwo+ID4gKyNpZmRl ZiBDT05GSUdfWDg2XzMyCj4gPiArCj4gPiArc3RhdGljIGlubGluZSBpbnQgbm9vcF94ODZfMzJf ZWFybHlfbG9naWNhbF9hcGljaWQoaW50IGNwdSkKPiA+ICt7Cj4gPiArCXJldHVybiBCQURfQVBJ Q0lEOwo+ID4gK30KPiA+ICsKPiA+ICsvKgo+ID4gKyAqIFNldCB1cCB0aGUgbG9naWNhbCBkZXN0 aW5hdGlvbiBJRC4KPiA+ICsgKgo+ID4gKyAqIEludGVsIHJlY29tbWVuZHMgdG8gc2V0IERGUiwg TERSIGFuZCBUUFIgYmVmb3JlIGVuYWJsaW5nCj4gPiArICogYW4gQVBJQy4gIFNlZSBlLmcuICJB UC0zODggODI0ODlEWCBVc2VyJ3MgTWFudWFsIiAoSW50ZWwKPiA+ICsgKiBkb2N1bWVudCBudW1i ZXIgMjkyMTE2KS4gIFNvIGhlcmUgaXQgZ29lcy4uLgo+ID4gKyAqLwo+ID4gK2V4dGVybiB2b2lk IGRlZmF1bHRfaW5pdF9hcGljX2xkcih2b2lkKTsKPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIGlu dCBkZWZhdWx0X2FwaWNfaWRfcmVnaXN0ZXJlZCh2b2lkKQo+ID4gK3sKPiA+ICsJcmV0dXJuIHBo eXNpZF9pc3NldChyZWFkX2FwaWNfaWQoKSwgcGh5c19jcHVfcHJlc2VudF9tYXApOwo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIGludCBkZWZhdWx0X3BoeXNfcGtnX2lkKGludCBjcHVp ZF9hcGljLCBpbnQgaW5kZXhfbXNiKQo+ID4gK3sKPiA+ICsJcmV0dXJuIGNwdWlkX2FwaWMgPj4g aW5kZXhfbXNiOwo+ID4gK30KPiA+ICsKPiA+ICsjZW5kaWYKPiA+ICAKPiA+ICBleHRlcm4gaW50 IGZsYXRfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAo+ ID4gIAkJCQkgICBzdHJ1Y3QgaXJxX2RhdGEgKmlycWRhdGEsCj4gPiBAQCAtNTA0LDE3ICs1NDgs NzEgQEAgZXh0ZXJuIGludCBmbGF0X2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBzdHJ1Y3QgY3B1 bWFzayAqY3B1bWFzaywKPiA+ICBleHRlcm4gaW50IGRlZmF1bHRfY3B1X21hc2tfdG9fYXBpY2lk KGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAo+ID4gIAkJCQkgICAgICBzdHJ1Y3QgaXJx X2RhdGEgKmlycWRhdGEsCj4gPiAgCQkJCSAgICAgIHVuc2lnbmVkIGludCAqYXBpY2lkKTsKPiA+ IC1leHRlcm4gYm9vbCBkZWZhdWx0X2NoZWNrX2FwaWNpZF91c2VkKHBoeXNpZF9tYXNrX3QgKm1h cCwgaW50IGFwaWNpZCk7Cj4gPiAtZXh0ZXJuIHZvaWQgZmxhdF92ZWN0b3JfYWxsb2NhdGlvbl9k b21haW4oaW50IGNwdSwgc3RydWN0IGNwdW1hc2sgKnJldG1hc2ssCj4gPiAtCQkJCSAgIGNvbnN0 IHN0cnVjdCBjcHVtYXNrICptYXNrKTsKPiA+IC1leHRlcm4gdm9pZCBkZWZhdWx0X3ZlY3Rvcl9h bGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBzdHJ1Y3QgY3B1bWFzayAqcmV0bWFzaywKPiA+IC0J CQkJICAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spOwo+ID4gLWV4dGVybiB2b2lkIGRl ZmF1bHRfaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNpZF9tYXNrX3QgKnBoeXNfbWFwLCBwaHlzaWRf bWFza190ICpyZXRtYXApOwo+ID4gKwo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZAo+ID4gK2ZsYXRf dmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIHN0cnVjdCBjcHVtYXNrICpyZXRtYXNr LAo+ID4gKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQo+ID4gK3sKPiA+ICsJ LyogQ2FyZWZ1bC4gU29tZSBjcHVzIGRvIG5vdCBzdHJpY3RseSBob25vciB0aGUgc2V0IG9mIGNw dXMKPiA+ICsJICogc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzdGluYXRpb24gd2hlbiB1 c2luZyBsb3dlc3QKPiA+ICsJICogcHJpb3JpdHkgaW50ZXJydXB0IGRlbGl2ZXJ5IG1vZGUuCj4g PiArCSAqCj4gPiArCSAqIEluIHBhcnRpY3VsYXIgdGhlcmUgd2FzIGEgaHlwZXJ0aHJlYWRpbmcg Y3B1IG9ic2VydmVkIHRvCj4gPiArCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3Jvbmcg aHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQo+ID4gKwkgKiBoeXBlcnRocmVhZCB3YXMgc3BlY2lm aWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzaXRpbmF0aW9uLgo+ID4gKwkgKi8KPiA+ICsJY3B1bWFz a19jbGVhcihyZXRtYXNrKTsKPiA+ICsJY3B1bWFza19iaXRzKHJldG1hc2spWzBdID0gQVBJQ19B TExfQ1BVUzsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlubGluZSB2b2lkCj4gPiArZGVmYXVs dF92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSwgc3RydWN0IGNwdW1hc2sgKnJldG1h c2ssCj4gPiArCQkJCSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKPiA+ICt7Cj4gPiArCWNw dW1hc2tfY29weShyZXRtYXNrLCBjcHVtYXNrX29mKGNwdSkpOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGVmYXVsdF9jaGVja19hcGljaWRfdXNlZChwaHlz aWRfbWFza190ICptYXAsIGludCBhcGljaWQpCj4gPiArewo+ID4gKwlyZXR1cm4gcGh5c2lkX2lz c2V0KGFwaWNpZCwgKm1hcCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBk ZWZhdWx0X2lvYXBpY19waHlzX2lkX21hcChwaHlzaWRfbWFza190ICpwaHlzX21hcCwgcGh5c2lk X21hc2tfdCAqcmV0bWFwKQo+ID4gK3sKPiA+ICsJKnJldG1hcCA9ICpwaHlzX21hcDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGlubGluZSBpbnQgX19kZWZhdWx0X2NwdV9wcmVzZW50X3RvX2Fw aWNpZChpbnQgbXBzX2NwdSkKPiA+ICt7Cj4gPiArCWlmIChtcHNfY3B1IDwgbnJfY3B1X2lkcyAm JiBjcHVfcHJlc2VudChtcHNfY3B1KSkKPiA+ICsJCXJldHVybiAoaW50KXBlcl9jcHUoeDg2X2Jp b3NfY3B1X2FwaWNpZCwgbXBzX2NwdSk7Cj4gPiArCWVsc2UKPiA+ICsJCXJldHVybiBCQURfQVBJ Q0lEOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIGludAo+ID4gK19fZGVmYXVsdF9j aGVja19waHlzX2FwaWNpZF9wcmVzZW50KGludCBwaHlzX2FwaWNpZCkKPiA+ICt7Cj4gPiArCXJl dHVybiBwaHlzaWRfaXNzZXQocGh5c19hcGljaWQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKPiA+ ICt9Cj4gPiArCj4gPiArI2lmZGVmIENPTkZJR19YODZfMzIKPiA+ICtzdGF0aWMgaW5saW5lIGlu dCBkZWZhdWx0X2NwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSkKPiA+ICt7Cj4gPiAr CXJldHVybiBfX2RlZmF1bHRfY3B1X3ByZXNlbnRfdG9fYXBpY2lkKG1wc19jcHUpOwo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIGludAo+ID4gK2RlZmF1bHRfY2hlY2tfcGh5c19hcGlj aWRfcHJlc2VudChpbnQgcGh5c19hcGljaWQpCj4gPiArewo+ID4gKwlyZXR1cm4gX19kZWZhdWx0 X2NoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQocGh5c19hcGljaWQpOwo+ID4gK30KPiA+ICsjZWxz ZQo+ID4gIGV4dGVybiBpbnQgZGVmYXVsdF9jcHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19j cHUpOwo+ID4gIGV4dGVybiBpbnQgZGVmYXVsdF9jaGVja19waHlzX2FwaWNpZF9wcmVzZW50KGlu dCBwaHlzX2FwaWNpZCk7Cj4gPiArI2VuZGlmCj4gPiAgCj4gPiAgI2VuZGlmIC8qIENPTkZJR19Y ODZfTE9DQUxfQVBJQyAqLwo+ID4gLQo+ID4gIGV4dGVybiB2b2lkIGlycV9lbnRlcih2b2lkKTsK PiA+ICBleHRlcm4gdm9pZCBpcnFfZXhpdCh2b2lkKTsKPiA+ICAKPiA+IGRpZmYgLS1naXQgYS9h cmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmgK PiA+IGluZGV4IDQwMTFjYjAzZWYwOC4uMGEzZTgwOGI5MTIzIDEwMDY0NAo+ID4gLS0tIGEvYXJj aC94ODYvaW5jbHVkZS9hc20vZGVzYy5oCj4gPiArKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9k ZXNjLmgKPiA+IEBAIC0zOTMsNyArMzkzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9kZXNj X2xpbWl0KHN0cnVjdCBkZXNjX3N0cnVjdCAqZGVzYywgdW5zaWduZWQgbG9uZyBsaW1pdCkKPiA+ ICB2b2lkIHVwZGF0ZV9pbnRyX2dhdGUodW5zaWduZWQgaW50IG4sIGNvbnN0IHZvaWQgKmFkZHIp Owo+ID4gIHZvaWQgYWxsb2NfaW50cl9nYXRlKHVuc2lnbmVkIGludCBuLCBjb25zdCB2b2lkICph ZGRyKTsKPiA+ICAKPiA+IC1leHRlcm4gdW5zaWduZWQgbG9uZyBzeXN0ZW1fdmVjdG9yc1tdOwo+ ID4gK2V4dGVybiB1bnNpZ25lZCBsb25nIHVzZWRfdmVjdG9yc1tdOwo+ID4gIAo+ID4gICNpZmRl ZiBDT05GSUdfWDg2XzY0Cj4gPiAgREVDTEFSRV9QRVJfQ1BVKHUzMiwgZGVidWdfaWR0X2N0cik7 Cj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfaXJxLmggYi9hcmNoL3g4 Ni9pbmNsdWRlL2FzbS9od19pcnEuaAo+ID4gaW5kZXggMjg1MTA3N2I2MDUxLi4xNmQ0OGExOGMw NjkgMTAwNjQ0Cj4gPiAtLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaAo+ID4gKysr IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfaXJxLmgKPiA+IEBAIC0xNiw4ICsxNiw2IEBACj4g PiAgCj4gPiAgI2luY2x1ZGUgPGFzbS9pcnFfdmVjdG9ycy5oPgo+ID4gIAo+ID4gLSNkZWZpbmUg SVJRX01BVFJJWF9CSVRTCQlOUl9WRUNUT1JTCj4gPiAtCj4gPiAgI2lmbmRlZiBfX0FTU0VNQkxZ X18KPiA+ICAKPiA+ICAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+Cj4gPiBAQCAtMTE3LDEzICsx MTUsMTUgQEAgc3RydWN0IGlycV9hbGxvY19pbmZvIHsKPiA+ICAKPiA+ICBzdHJ1Y3QgaXJxX2Nm ZyB7Cj4gPiAgCXVuc2lnbmVkIGludAkJZGVzdF9hcGljaWQ7Cj4gPiAtCXVuc2lnbmVkIGludAkJ dmVjdG9yOwo+ID4gKwl1OAkJCXZlY3RvcjsKPiA+ICsJdTgJCQlvbGRfdmVjdG9yOwo+ID4gIH07 Cj4gPiAgCj4gPiAgZXh0ZXJuIHN0cnVjdCBpcnFfY2ZnICppcnFfY2ZnKHVuc2lnbmVkIGludCBp cnEpOwo+ID4gIGV4dGVybiBzdHJ1Y3QgaXJxX2NmZyAqaXJxZF9jZmcoc3RydWN0IGlycV9kYXRh ICppcnFfZGF0YSk7Cj4gPiAgZXh0ZXJuIHZvaWQgbG9ja192ZWN0b3JfbG9jayh2b2lkKTsKPiA+ ICBleHRlcm4gdm9pZCB1bmxvY2tfdmVjdG9yX2xvY2sodm9pZCk7Cj4gPiArZXh0ZXJuIHZvaWQg c2V0dXBfdmVjdG9yX2lycShpbnQgY3B1KTsKPiA+ICAjaWZkZWYgQ09ORklHX1NNUAo+ID4gIGV4 dGVybiB2b2lkIHNlbmRfY2xlYW51cF92ZWN0b3Ioc3RydWN0IGlycV9jZmcgKik7Cj4gPiAgZXh0 ZXJuIHZvaWQgaXJxX2NvbXBsZXRlX21vdmUoc3RydWN0IGlycV9jZmcgKmNmZyk7Cj4gPiBkaWZm IC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oIGIvYXJjaC94ODYvaW5jbHVk ZS9hc20vaW9fYXBpYy5oCj4gPiBpbmRleCBhODgzNGRkNTQ2Y2QuLjVjMjdlMTQ2YTE2NiAxMDA2 NDQKPiA+IC0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaAo+ID4gKysrIGIvYXJj aC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCj4gPiBAQCAtMTkzLDYgKzE5Myw3IEBAIHN0YXRp YyBpbmxpbmUgdW5zaWduZWQgaW50IGlvX2FwaWNfcmVhZCh1bnNpZ25lZCBpbnQgYXBpYywgdW5z aWduZWQgaW50IHJlZykKPiA+ICBleHRlcm4gdm9pZCBzZXR1cF9JT19BUElDKHZvaWQpOwo+ID4g IGV4dGVybiB2b2lkIGVuYWJsZV9JT19BUElDKHZvaWQpOwo+ID4gIGV4dGVybiB2b2lkIGRpc2Fi bGVfSU9fQVBJQyh2b2lkKTsKPiA+ICtleHRlcm4gdm9pZCBzZXR1cF9pb2FwaWNfZGVzdCh2b2lk KTsKPiA+ICBleHRlcm4gaW50IElPX0FQSUNfZ2V0X1BDSV9pcnFfdmVjdG9yKGludCBidXMsIGlu dCBkZXZmbiwgaW50IHBpbik7Cj4gPiAgZXh0ZXJuIHZvaWQgcHJpbnRfSU9fQVBJQ3Modm9pZCk7 Cj4gPiAgI2Vsc2UgIC8qICFDT05GSUdfWDg2X0lPX0FQSUMgKi8KPiA+IEBAIC0yMzIsNiArMjMz LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfaW5pdF9tYXBwaW5ncyh2b2lkKSB7IH0K PiA+ICAKPiA+ICBzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfSU9fQVBJQyh2b2lkKSB7IH0KPiA+ ICBzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX0lPX0FQSUModm9pZCkgeyB9Cj4gPiArc3RhdGlj IGlubGluZSB2b2lkIHNldHVwX2lvYXBpY19kZXN0KHZvaWQpIHsgfQo+ID4gIAo+ID4gICNlbmRp Zgo+ID4gIAo+ID4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oIGIvYXJj aC94ODYvaW5jbHVkZS9hc20vaXJxLmgKPiA+IGluZGV4IDIzOTViYjc5NGM3Yi4uZDg2MzJmOGZh MTdkIDEwMDY0NAo+ID4gLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxLmgKPiA+ICsrKyBi L2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oCj4gPiBAQCAtMjYsNyArMjYsMTEgQEAgZXh0ZXJu IHZvaWQgaXJxX2N0eF9pbml0KGludCBjcHUpOwo+ID4gIAo+ID4gIHN0cnVjdCBpcnFfZGVzYzsK PiA+ICAKPiA+ICsjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCj4gPiArI2luY2x1ZGUgPGxpbnV4 L2NwdW1hc2suaD4KPiA+ICtleHRlcm4gaW50IGNoZWNrX2lycV92ZWN0b3JzX2Zvcl9jcHVfZGlz YWJsZSh2b2lkKTsKPiA+ICBleHRlcm4gdm9pZCBmaXh1cF9pcnFzKHZvaWQpOwo+ID4gKyNlbmRp Zgo+ID4gIAo+ID4gICNpZmRlZiBDT05GSUdfSEFWRV9LVk0KPiA+ICBleHRlcm4gdm9pZCBrdm1f c2V0X3Bvc3RlZF9pbnRyX3dha2V1cF9oYW5kbGVyKHZvaWQgKCpoYW5kbGVyKSh2b2lkKSk7Cj4g PiBkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaCBiL2FyY2gv eDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmgKPiA+IGluZGV4IDY3NDIxZjY0OWNmYS4uYzIw ZmZjYThmZWYxIDEwMDY0NAo+ID4gLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3ZlY3Rv cnMuaAo+ID4gKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaAo+ID4gQEAg LTEwMiw4ICsxMDIsMTIgQEAKPiA+ICAjZGVmaW5lIFBPU1RFRF9JTlRSX05FU1RFRF9WRUNUT1IJ MHhmMAo+ID4gICNlbmRpZgo+ID4gIAo+ID4gLSNkZWZpbmUgTUFOQUdFRF9JUlFfU0hVVERPV05f VkVDVE9SCTB4ZWYKPiA+IC0jZGVmaW5lIExPQ0FMX1RJTUVSX1ZFQ1RPUgkJMHhlZQo+ID4gKy8q Cj4gPiArICogTG9jYWwgQVBJQyB0aW1lciBJUlEgdmVjdG9yIGlzIG9uIGEgZGlmZmVyZW50IHBy aW9yaXR5IGxldmVsLAo+ID4gKyAqIHRvIHdvcmsgYXJvdW5kIHRoZSAnbG9zdCBsb2NhbCBpbnRl cnJ1cHQgaWYgbW9yZSB0aGFuIDIgSVJRCj4gPiArICogc291cmNlcyBwZXIgbGV2ZWwnIGVycmF0 YS4KPiA+ICsgKi8KPiA+ICsjZGVmaW5lIExPQ0FMX1RJTUVSX1ZFQ1RPUgkJMHhlZgo+ID4gIAo+ ID4gICNkZWZpbmUgTlJfVkVDVE9SUwkJCSAyNTYKPiA+ICAKPiA+IGRpZmYgLS1naXQgYS9hcmNo L3g4Ni9pbmNsdWRlL2FzbS9pcnFkb21haW4uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycWRv bWFpbi5oCj4gPiBpbmRleCAxMzlmZWVmNDY3ZjcuLjRlNTYzODUzOTg0NiAxMDA2NDQKPiA+IC0t LSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycWRvbWFpbi5oCj4gPiArKysgYi9hcmNoL3g4Ni9p bmNsdWRlL2FzbS9pcnFkb21haW4uaAo+ID4gQEAgLTksNyArOSw2IEBACj4gPiAgZW51bSB7Cj4g PiAgCS8qIEFsbG9jYXRlIGNvbnRpZ3VvdXMgQ1BVIHZlY3RvcnMgKi8KPiA+ICAJWDg2X0lSUV9B TExPQ19DT05USUdVT1VTX1ZFQ1RPUlMJCT0gMHgxLAo+ID4gLQlYODZfSVJRX0FMTE9DX0xFR0FD WQkJCQk9IDB4MiwKPiA+ICB9Owo+ID4gIAo+ID4gIGV4dGVybiBzdHJ1Y3QgaXJxX2RvbWFpbiAq eDg2X3ZlY3Rvcl9kb21haW47Cj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20v a3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKPiA+IGluZGV4IDFi ZmI5OTc3MGMzNC4uNzIzMzQ0NWEyMGJkIDEwMDY0NAo+ID4gLS0tIGEvYXJjaC94ODYvaW5jbHVk ZS9hc20va3ZtX2hvc3QuaAo+ID4gKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3Qu aAo+ID4gQEAgLTE0MjQsNyArMTQyNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fYXJjaF92 Y3B1X2Jsb2NrX2ZpbmlzaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpIHt9Cj4gPiAgc3RhdGljIGlu bGluZSBpbnQga3ZtX2NwdV9nZXRfYXBpY2lkKGludCBtcHNfY3B1KQo+ID4gIHsKPiA+ICAjaWZk ZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCj4gPiAtCXJldHVybiBkZWZhdWx0X2NwdV9wcmVzZW50 X3RvX2FwaWNpZChtcHNfY3B1KTsKPiA+ICsJcmV0dXJuIF9fZGVmYXVsdF9jcHVfcHJlc2VudF90 b19hcGljaWQobXBzX2NwdSk7Cj4gPiAgI2Vsc2UKPiA+ICAJV0FSTl9PTl9PTkNFKDEpOwo+ID4g IAlyZXR1cm4gQkFEX0FQSUNJRDsKPiA+IGRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2Fz bS90cmFjZS9pcnFfdmVjdG9ycy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhY2UvaXJxX3Zl Y3RvcnMuaAo+ID4gaW5kZXggODRiOWVjMGMxYmMwLi44ZWIxMzllZDFhMDMgMTAwNjQ0Cj4gPiAt LS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90cmFjZS9pcnFfdmVjdG9ycy5oCj4gPiArKysgYi9h cmNoL3g4Ni9pbmNsdWRlL2FzbS90cmFjZS9pcnFfdmVjdG9ycy5oCj4gPiBAQCAtMTM4LDI1NCAr MTM4LDYgQEAgREVGSU5FX0lSUV9WRUNUT1JfRVZFTlQoZGVmZXJyZWRfZXJyb3JfYXBpYyk7Cj4g PiAgREVGSU5FX0lSUV9WRUNUT1JfRVZFTlQodGhlcm1hbF9hcGljKTsKPiA+ICAjZW5kaWYKPiA+ ICAKPiA+IC1UUkFDRV9FVkVOVCh2ZWN0b3JfY29uZmlnLAo+ID4gLQo+ID4gLQlUUF9QUk9UTyh1 bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdmVjdG9yLAo+ID4gLQkJIHVuc2lnbmVkIGlu dCBjcHUsIHVuc2lnbmVkIGludCBhcGljZGVzdCksCj4gPiAtCj4gPiAtCVRQX0FSR1MoaXJxLCB2 ZWN0b3IsIGNwdSwgYXBpY2Rlc3QpLAo+ID4gLQo+ID4gLQlUUF9TVFJVQ1RfX2VudHJ5KAo+ID4g LQkJX19maWVsZCgJdW5zaWduZWQgaW50LAlpcnEJCSkKPiA+IC0JCV9fZmllbGQoCXVuc2lnbmVk IGludCwJdmVjdG9yCQkpCj4gPiAtCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCWNwdQkJKQo+ID4g LQkJX19maWVsZCgJdW5zaWduZWQgaW50LAlhcGljZGVzdAkpCj4gPiAtCSksCj4gPiAtCj4gPiAt CVRQX2Zhc3RfYXNzaWduKAo+ID4gLQkJX19lbnRyeS0+aXJxCQk9IGlycTsKPiA+IC0JCV9fZW50 cnktPnZlY3RvcgkJPSB2ZWN0b3I7Cj4gPiAtCQlfX2VudHJ5LT5jcHUJCT0gY3B1Owo+ID4gLQkJ X19lbnRyeS0+YXBpY2Rlc3QJPSBhcGljZGVzdDsKPiA+IC0JKSwKPiA+IC0KPiA+IC0JVFBfcHJp bnRrKCJpcnE9JXUgdmVjdG9yPSV1IGNwdT0ldSBhcGljZGVzdD0weCUwOHgiLAo+ID4gLQkJICBf X2VudHJ5LT5pcnEsIF9fZW50cnktPnZlY3RvciwgX19lbnRyeS0+Y3B1LAo+ID4gLQkJICBfX2Vu dHJ5LT5hcGljZGVzdCkKPiA+IC0pOwo+ID4gLQo+ID4gLURFQ0xBUkVfRVZFTlRfQ0xBU1ModmVj dG9yX21vZCwKPiA+IC0KPiA+IC0JVFBfUFJPVE8odW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQg aW50IHZlY3RvciwKPiA+IC0JCSB1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgcHJldl92 ZWN0b3IsCj4gPiAtCQkgdW5zaWduZWQgaW50IHByZXZfY3B1KSwKPiA+IC0KPiA+IC0JVFBfQVJH UyhpcnEsIHZlY3RvciwgY3B1LCBwcmV2X3ZlY3RvciwgcHJldl9jcHUpLAo+ID4gLQo+ID4gLQlU UF9TVFJVQ1RfX2VudHJ5KAo+ID4gLQkJX19maWVsZCgJdW5zaWduZWQgaW50LAlpcnEJCSkKPiA+ IC0JCV9fZmllbGQoCXVuc2lnbmVkIGludCwJdmVjdG9yCQkpCj4gPiAtCQlfX2ZpZWxkKAl1bnNp Z25lZCBpbnQsCWNwdQkJKQo+ID4gLQkJX19maWVsZCgJdW5zaWduZWQgaW50LAlwcmV2X3ZlY3Rv cgkpCj4gPiAtCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCXByZXZfY3B1CSkKPiA+IC0JKSwKPiA+ IC0KPiA+IC0JVFBfZmFzdF9hc3NpZ24oCj4gPiAtCQlfX2VudHJ5LT5pcnEJCT0gaXJxOwo+ID4g LQkJX19lbnRyeS0+dmVjdG9yCQk9IHZlY3RvcjsKPiA+IC0JCV9fZW50cnktPmNwdQkJPSBjcHU7 Cj4gPiAtCQlfX2VudHJ5LT5wcmV2X3ZlY3Rvcgk9IHByZXZfdmVjdG9yOwo+ID4gLQkJX19lbnRy eS0+cHJldl9jcHUJPSBwcmV2X2NwdTsKPiA+IC0KPiA+IC0JKSwKPiA+IC0KPiA+IC0JVFBfcHJp bnRrKCJpcnE9JXUgdmVjdG9yPSV1IGNwdT0ldSBwcmV2X3ZlY3Rvcj0ldSBwcmV2X2NwdT0ldSIs Cj4gPiAtCQkgIF9fZW50cnktPmlycSwgX19lbnRyeS0+dmVjdG9yLCBfX2VudHJ5LT5jcHUsCj4g PiAtCQkgIF9fZW50cnktPnByZXZfdmVjdG9yLCBfX2VudHJ5LT5wcmV2X2NwdSkKPiA+IC0pOwo+ ID4gLQo+ID4gLSNkZWZpbmUgREVGSU5FX0lSUV9WRUNUT1JfTU9EX0VWRU5UKG5hbWUpCQkJCVwK PiA+IC1ERUZJTkVfRVZFTlRfRk4odmVjdG9yX21vZCwgbmFtZSwJCQkJCVwKPiA+IC0JVFBfUFJP VE8odW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHZlY3RvciwJCQlcCj4gPiAtCQkgdW5z aWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IHByZXZfdmVjdG9yLAkJXAo+ID4gLQkJIHVuc2ln bmVkIGludCBwcmV2X2NwdSksCQkJCVwKPiA+IC0JVFBfQVJHUyhpcnEsIHZlY3RvciwgY3B1LCBw cmV2X3ZlY3RvciwgcHJldl9jcHUpLCBOVUxMLCBOVUxMKTsJXAo+ID4gLQo+ID4gLURFRklORV9J UlFfVkVDVE9SX01PRF9FVkVOVCh2ZWN0b3JfdXBkYXRlKTsKPiA+IC1ERUZJTkVfSVJRX1ZFQ1RP Ul9NT0RfRVZFTlQodmVjdG9yX2NsZWFyKTsKPiA+IC0KPiA+IC1ERUNMQVJFX0VWRU5UX0NMQVNT KHZlY3Rvcl9yZXNlcnZlLAo+ID4gLQo+ID4gLQlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgaXJxLCBp bnQgcmV0KSwKPiA+IC0KPiA+IC0JVFBfQVJHUyhpcnEsIHJldCksCj4gPiAtCj4gPiAtCVRQX1NU UlVDVF9fZW50cnkoCj4gPiAtCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCWlycQkpCj4gPiAtCQlf X2ZpZWxkKAlpbnQsCQlyZXQJKQo+ID4gLQkpLAo+ID4gLQo+ID4gLQlUUF9mYXN0X2Fzc2lnbigK PiA+IC0JCV9fZW50cnktPmlycSA9IGlycTsKPiA+IC0JCV9fZW50cnktPnJldCA9IHJldDsKPiA+ IC0JKSwKPiA+IC0KPiA+IC0JVFBfcHJpbnRrKCJpcnE9JXUgcmV0PSVkIiwgX19lbnRyeS0+aXJx LCBfX2VudHJ5LT5yZXQpCj4gPiAtKTsKPiA+IC0KPiA+IC0jZGVmaW5lIERFRklORV9JUlFfVkVD VE9SX1JFU0VSVkVfRVZFTlQobmFtZSkJXAo+ID4gLURFRklORV9FVkVOVF9GTih2ZWN0b3JfcmVz ZXJ2ZSwgbmFtZSwJXAo+ID4gLQlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgcmV0KSwJ XAo+ID4gLQlUUF9BUkdTKGlycSwgcmV0KSwgTlVMTCwgTlVMTCk7CQlcCj4gPiAtCj4gPiAtREVG SU5FX0lSUV9WRUNUT1JfUkVTRVJWRV9FVkVOVCh2ZWN0b3JfcmVzZXJ2ZV9tYW5hZ2VkKTsKPiA+ IC1ERUZJTkVfSVJRX1ZFQ1RPUl9SRVNFUlZFX0VWRU5UKHZlY3Rvcl9yZXNlcnZlKTsKPiA+IC0K PiA+IC1UUkFDRV9FVkVOVCh2ZWN0b3JfYWxsb2MsCj4gPiAtCj4gPiAtCVRQX1BST1RPKHVuc2ln bmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB2ZWN0b3IsIGJvb2wgcmVzZXJ2ZWQsCj4gPiAtCQkg aW50IHJldCksCj4gPiAtCj4gPiAtCVRQX0FSR1MoaXJxLCB2ZWN0b3IsIHJldCwgcmVzZXJ2ZWQp LAo+ID4gLQo+ID4gLQlUUF9TVFJVQ1RfX2VudHJ5KAo+ID4gLQkJX19maWVsZCgJdW5zaWduZWQg aW50LAlpcnEJCSkKPiA+IC0JCV9fZmllbGQoCXVuc2lnbmVkIGludCwJdmVjdG9yCQkpCj4gPiAt CQlfX2ZpZWxkKAlib29sLAkJcmVzZXJ2ZWQJKQo+ID4gLQkJX19maWVsZCgJaW50LAkJcmV0CQkp Cj4gPiAtCSksCj4gPiAtCj4gPiAtCVRQX2Zhc3RfYXNzaWduKAo+ID4gLQkJX19lbnRyeS0+aXJx CQk9IGlycTsKPiA+IC0JCV9fZW50cnktPnZlY3RvcgkJPSByZXQgPCAwID8gMCA6IHZlY3RvcjsK PiA+IC0JCV9fZW50cnktPnJlc2VydmVkCT0gcmVzZXJ2ZWQ7Cj4gPiAtCQlfX2VudHJ5LT5yZXQJ CT0gcmV0ID4gMCA/IDAgOiByZXQ7Cj4gPiAtCSksCj4gPiAtCj4gPiAtCVRQX3ByaW50aygiaXJx PSV1IHZlY3Rvcj0ldSByZXNlcnZlZD0lZCByZXQ9JWQiLAo+ID4gLQkJICBfX2VudHJ5LT5pcnEs IF9fZW50cnktPnZlY3RvciwKPiA+IC0JCSAgX19lbnRyeS0+cmVzZXJ2ZWQsIF9fZW50cnktPnJl dCkKPiA+IC0pOwo+ID4gLQo+ID4gLVRSQUNFX0VWRU5UKHZlY3Rvcl9hbGxvY19tYW5hZ2VkLAo+ ID4gLQo+ID4gLQlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdmVjdG9y LAo+ID4gLQkJIGludCByZXQpLAo+ID4gLQo+ID4gLQlUUF9BUkdTKGlycSwgdmVjdG9yLCByZXQp LAo+ID4gLQo+ID4gLQlUUF9TVFJVQ1RfX2VudHJ5KAo+ID4gLQkJX19maWVsZCgJdW5zaWduZWQg aW50LAlpcnEJCSkKPiA+IC0JCV9fZmllbGQoCXVuc2lnbmVkIGludCwJdmVjdG9yCQkpCj4gPiAt CQlfX2ZpZWxkKAlpbnQsCQlyZXQJCSkKPiA+IC0JKSwKPiA+IC0KPiA+IC0JVFBfZmFzdF9hc3Np Z24oCj4gPiAtCQlfX2VudHJ5LT5pcnEJCT0gaXJxOwo+ID4gLQkJX19lbnRyeS0+dmVjdG9yCQk9 IHJldCA8IDAgPyAwIDogdmVjdG9yOwo+ID4gLQkJX19lbnRyeS0+cmV0CQk9IHJldCA+IDAgPyAw IDogcmV0Owo+ID4gLQkpLAo+ID4gLQo+ID4gLQlUUF9wcmludGsoImlycT0ldSB2ZWN0b3I9JXUg cmV0PSVkIiwKPiA+IC0JCSAgX19lbnRyeS0+aXJxLCBfX2VudHJ5LT52ZWN0b3IsIF9fZW50cnkt PnJldCkKPiA+IC0pOwo+ID4gLQo+ID4gLURFQ0xBUkVfRVZFTlRfQ0xBU1ModmVjdG9yX2FjdGl2 YXRlLAo+ID4gLQo+ID4gLQlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgaXJxLCBib29sIGlzX21hbmFn ZWQsIGJvb2wgY2FuX3Jlc2VydmUsCj4gPiAtCQkgYm9vbCBlYXJseSksCj4gPiAtCj4gPiAtCVRQ X0FSR1MoaXJxLCBpc19tYW5hZ2VkLCBjYW5fcmVzZXJ2ZSwgZWFybHkpLAo+ID4gLQo+ID4gLQlU UF9TVFJVQ1RfX2VudHJ5KAo+ID4gLQkJX19maWVsZCgJdW5zaWduZWQgaW50LAlpcnEJCSkKPiA+ IC0JCV9fZmllbGQoCWJvb2wsCQlpc19tYW5hZ2VkCSkKPiA+IC0JCV9fZmllbGQoCWJvb2wsCQlj YW5fcmVzZXJ2ZQkpCj4gPiAtCQlfX2ZpZWxkKAlib29sLAkJZWFybHkJCSkKPiA+IC0JKSwKPiA+ IC0KPiA+IC0JVFBfZmFzdF9hc3NpZ24oCj4gPiAtCQlfX2VudHJ5LT5pcnEJCT0gaXJxOwo+ID4g LQkJX19lbnRyeS0+aXNfbWFuYWdlZAk9IGlzX21hbmFnZWQ7Cj4gPiAtCQlfX2VudHJ5LT5jYW5f cmVzZXJ2ZQk9IGNhbl9yZXNlcnZlOwo+ID4gLQkJX19lbnRyeS0+ZWFybHkJCT0gZWFybHk7Cj4g PiAtCSksCj4gPiAtCj4gPiAtCVRQX3ByaW50aygiaXJxPSV1IGlzX21hbmFnZWQ9JWQgY2FuX3Jl c2VydmU9JWQgZWFybHk9JWQiLAo+ID4gLQkJICBfX2VudHJ5LT5pcnEsIF9fZW50cnktPmlzX21h bmFnZWQsIF9fZW50cnktPmNhbl9yZXNlcnZlLAo+ID4gLQkJICBfX2VudHJ5LT5lYXJseSkKPiA+ IC0pOwo+ID4gLQo+ID4gLSNkZWZpbmUgREVGSU5FX0lSUV9WRUNUT1JfQUNUSVZBVEVfRVZFTlQo bmFtZSkJCQkJXAo+ID4gLURFRklORV9FVkVOVF9GTih2ZWN0b3JfYWN0aXZhdGUsIG5hbWUsCQkJ CQlcCj4gPiAtCVRQX1BST1RPKHVuc2lnbmVkIGludCBpcnEsIGJvb2wgaXNfbWFuYWdlZCwJCQlc Cj4gPiAtCQkgYm9vbCBjYW5fcmVzZXJ2ZSwgYm9vbCBlYXJseSksCQkJCVwKPiA+IC0JVFBfQVJH UyhpcnEsIGlzX21hbmFnZWQsIGNhbl9yZXNlcnZlLCBlYXJseSksIE5VTEwsIE5VTEwpOwlcCj4g PiAtCj4gPiAtREVGSU5FX0lSUV9WRUNUT1JfQUNUSVZBVEVfRVZFTlQodmVjdG9yX2FjdGl2YXRl KTsKPiA+IC1ERUZJTkVfSVJRX1ZFQ1RPUl9BQ1RJVkFURV9FVkVOVCh2ZWN0b3JfZGVhY3RpdmF0 ZSk7Cj4gPiAtCj4gPiAtVFJBQ0VfRVZFTlQodmVjdG9yX3RlYXJkb3duLAo+ID4gLQo+ID4gLQlU UF9QUk9UTyh1bnNpZ25lZCBpbnQgaXJxLCBib29sIGlzX21hbmFnZWQsIGJvb2wgaGFzX3Jlc2Vy dmVkKSwKPiA+IC0KPiA+IC0JVFBfQVJHUyhpcnEsIGlzX21hbmFnZWQsIGhhc19yZXNlcnZlZCks Cj4gPiAtCj4gPiAtCVRQX1NUUlVDVF9fZW50cnkoCj4gPiAtCQlfX2ZpZWxkKAl1bnNpZ25lZCBp bnQsCWlycQkJKQo+ID4gLQkJX19maWVsZCgJYm9vbCwJCWlzX21hbmFnZWQJKQo+ID4gLQkJX19m aWVsZCgJYm9vbCwJCWhhc19yZXNlcnZlZAkpCj4gPiAtCSksCj4gPiAtCj4gPiAtCVRQX2Zhc3Rf YXNzaWduKAo+ID4gLQkJX19lbnRyeS0+aXJxCQk9IGlycTsKPiA+IC0JCV9fZW50cnktPmlzX21h bmFnZWQJPSBpc19tYW5hZ2VkOwo+ID4gLQkJX19lbnRyeS0+aGFzX3Jlc2VydmVkCT0gaGFzX3Jl c2VydmVkOwo+ID4gLQkpLAo+ID4gLQo+ID4gLQlUUF9wcmludGsoImlycT0ldSBpc19tYW5hZ2Vk PSVkIGhhc19yZXNlcnZlZD0lZCIsCj4gPiAtCQkgIF9fZW50cnktPmlycSwgX19lbnRyeS0+aXNf bWFuYWdlZCwgX19lbnRyeS0+aGFzX3Jlc2VydmVkKQo+ID4gLSk7Cj4gPiAtCj4gPiAtVFJBQ0Vf RVZFTlQodmVjdG9yX3NldHVwLAo+ID4gLQo+ID4gLQlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgaXJx LCBib29sIGlzX2xlZ2FjeSwgaW50IHJldCksCj4gPiAtCj4gPiAtCVRQX0FSR1MoaXJxLCBpc19s ZWdhY3ksIHJldCksCj4gPiAtCj4gPiAtCVRQX1NUUlVDVF9fZW50cnkoCj4gPiAtCQlfX2ZpZWxk KAl1bnNpZ25lZCBpbnQsCWlycQkJKQo+ID4gLQkJX19maWVsZCgJYm9vbCwJCWlzX2xlZ2FjeQkp Cj4gPiAtCQlfX2ZpZWxkKAlpbnQsCQlyZXQJCSkKPiA+IC0JKSwKPiA+IC0KPiA+IC0JVFBfZmFz dF9hc3NpZ24oCj4gPiAtCQlfX2VudHJ5LT5pcnEJCT0gaXJxOwo+ID4gLQkJX19lbnRyeS0+aXNf bGVnYWN5CT0gaXNfbGVnYWN5Owo+ID4gLQkJX19lbnRyeS0+cmV0CQk9IHJldDsKPiA+IC0JKSwK PiA+IC0KPiA+IC0JVFBfcHJpbnRrKCJpcnE9JXUgaXNfbGVnYWN5PSVkIHJldD0lZCIsCj4gPiAt CQkgIF9fZW50cnktPmlycSwgX19lbnRyeS0+aXNfbGVnYWN5LCBfX2VudHJ5LT5yZXQpCj4gPiAt KTsKPiA+IC0KPiA+IC1UUkFDRV9FVkVOVCh2ZWN0b3JfZnJlZV9tb3ZlZCwKPiA+IC0KPiA+IC0J VFBfUFJPVE8odW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50 IHZlY3RvciwKPiA+IC0JCSBib29sIGlzX21hbmFnZWQpLAo+ID4gLQo+ID4gLQlUUF9BUkdTKGly cSwgY3B1LCB2ZWN0b3IsIGlzX21hbmFnZWQpLAo+ID4gLQo+ID4gLQlUUF9TVFJVQ1RfX2VudHJ5 KAo+ID4gLQkJX19maWVsZCgJdW5zaWduZWQgaW50LAlpcnEJCSkKPiA+IC0JCV9fZmllbGQoCXVu c2lnbmVkIGludCwJY3B1CQkpCj4gPiAtCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCXZlY3RvcgkJ KQo+ID4gLQkJX19maWVsZCgJYm9vbCwJCWlzX21hbmFnZWQJKQo+ID4gLQkpLAo+ID4gLQo+ID4g LQlUUF9mYXN0X2Fzc2lnbigKPiA+IC0JCV9fZW50cnktPmlycQkJPSBpcnE7Cj4gPiAtCQlfX2Vu dHJ5LT5jcHUJCT0gY3B1Owo+ID4gLQkJX19lbnRyeS0+dmVjdG9yCQk9IHZlY3RvcjsKPiA+IC0J CV9fZW50cnktPmlzX21hbmFnZWQJPSBpc19tYW5hZ2VkOwo+ID4gLQkpLAo+ID4gLQo+ID4gLQlU UF9wcmludGsoImlycT0ldSBjcHU9JXUgdmVjdG9yPSV1IGlzX21hbmFnZWQ9JWQiLAo+ID4gLQkJ ICBfX2VudHJ5LT5pcnEsIF9fZW50cnktPmNwdSwgX19lbnRyeS0+dmVjdG9yLAo+ID4gLQkJICBf X2VudHJ5LT5pc19tYW5hZ2VkKQo+ID4gLSk7Cj4gPiAtCj4gPiAtCj4gPiAgI2VuZGlmIC8qIENP TkZJR19YODZfTE9DQUxfQVBJQyAqLwo+ID4gIAo+ID4gICN1bmRlZiBUUkFDRV9JTkNMVURFX1BB VEgKPiA+IGRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94MmFwaWMuaCBiL2FyY2gv eDg2L2luY2x1ZGUvYXNtL3gyYXBpYy5oCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5k ZXggMDAwMDAwMDAwMDAwLi43OGNjZjI4ZDE3ZGIKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBi L2FyY2gveDg2L2luY2x1ZGUvYXNtL3gyYXBpYy5oCj4gPiBAQCAtMCwwICsxLDUwIEBACj4gPiAr LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KPiA+ICsvKgo+ID4gKyAqIENv bW1vbiBiaXRzIGZvciBYMkFQSUMgY2x1c3Rlci9waHlzaWNhbCBtb2Rlcy4KPiA+ICsgKi8KPiA+ ICsKPiA+ICsjaWZuZGVmIF9BU01fWDg2X1gyQVBJQ19ICj4gPiArI2RlZmluZSBfQVNNX1g4Nl9Y MkFQSUNfSAo+ID4gKwo+ID4gKyNpbmNsdWRlIDxhc20vYXBpYy5oPgo+ID4gKyNpbmNsdWRlIDxh c20vaXBpLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KPiA+ICsKPiA+ICtzdGF0 aWMgaW50IHgyYXBpY19hcGljX2lkX3ZhbGlkKGludCBhcGljaWQpCj4gPiArewo+ID4gKwlyZXR1 cm4gMTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCB4MmFwaWNfYXBpY19pZF9yZWdpc3Rl cmVkKHZvaWQpCj4gPiArewo+ID4gKwlyZXR1cm4gMTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IHZvaWQKPiA+ICtfX3gyYXBpY19zZW5kX0lQSV9kZXN0KHVuc2lnbmVkIGludCBhcGljaWQsIGlu dCB2ZWN0b3IsIHVuc2lnbmVkIGludCBkZXN0KQo+ID4gK3sKPiA+ICsJdW5zaWduZWQgbG9uZyBj ZmcgPSBfX3ByZXBhcmVfSUNSKDAsIHZlY3RvciwgZGVzdCk7Cj4gPiArCW5hdGl2ZV94MmFwaWNf aWNyX3dyaXRlKGNmZywgYXBpY2lkKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHVuc2lnbmVk IGludCB4MmFwaWNfZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyBpZCkKPiA+ICt7Cj4gPiArCXJl dHVybiBpZDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgeDJhcGljX3Nl dF9hcGljX2lkKHVuc2lnbmVkIGludCBpZCkKPiA+ICt7Cj4gPiArCXJldHVybiBpZDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGludCB4MmFwaWNfcGh5c19wa2dfaWQoaW50IGluaXRpYWxfYXBp Y2lkLCBpbnQgaW5kZXhfbXNiKQo+ID4gK3sKPiA+ICsJcmV0dXJuIGluaXRpYWxfYXBpY2lkID4+ IGluZGV4X21zYjsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgeDJhcGljX3NlbmRfSVBJ X3NlbGYoaW50IHZlY3RvcikKPiA+ICt7Cj4gPiArCWFwaWNfd3JpdGUoQVBJQ19TRUxGX0lQSSwg dmVjdG9yKTsKPiA+ICt9Cj4gPiArCj4gPiArI2VuZGlmIC8qIF9BU01fWDg2X1gyQVBJQ19IICov Cj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaCBiL2FyY2gv eDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKPiA+IGluZGV4IGFhNDc0NzU2OWUyMy4uNWRkMDEx YThiNTYwIDEwMDY0NAo+ID4gLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaAo+ ID4gKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaAo+ID4gQEAgLTUxLDEzICs1 MSwxMSBAQCBzdHJ1Y3QgeDg2X2luaXRfcmVzb3VyY2VzIHsKPiA+ICAgKgkJCQlhcmUgc2V0IHVw Lgo+ID4gICAqIEBpbnRyX2luaXQ6CQkJaW50ZXJydXB0IGluaXQgY29kZQo+ID4gICAqIEB0cmFw X2luaXQ6CQkJcGxhdGZvcm0gc3BlY2lmaWMgdHJhcCBzZXR1cAo+ID4gLSAqIEBpbnRyX21vZGVf aW5pdDoJCWludGVycnVwdCBkZWxpdmVyeSBtb2RlIHNldHVwCj4gPiAgICovCj4gPiAgc3RydWN0 IHg4Nl9pbml0X2lycXMgewo+ID4gIAl2b2lkICgqcHJlX3ZlY3Rvcl9pbml0KSh2b2lkKTsKPiA+ ICAJdm9pZCAoKmludHJfaW5pdCkodm9pZCk7Cj4gPiAgCXZvaWQgKCp0cmFwX2luaXQpKHZvaWQp Owo+ID4gLQl2b2lkICgqaW50cl9tb2RlX2luaXQpKHZvaWQpOwo+ID4gIH07Cj4gPiAgCj4gPiAg LyoqCj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvTWFrZWZpbGUgYi9hcmNo L3g4Ni9rZXJuZWwvYXBpYy9NYWtlZmlsZQo+ID4gaW5kZXggYTZmY2FmMTZjZGJmLi5lNTllMzQx Zjk5MjEgMTAwNjQ0Cj4gPiAtLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9NYWtlZmlsZQo+ID4g KysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvTWFrZWZpbGUKPiA+IEBAIC03LDcgKzcsNyBAQAo+ ID4gICMgSW4gcGFydGljdWFsciwgc21wX2FwaWNfdGltZXJfaW50ZXJydXB0KCkgaXMgY2FsbGVk IGluIHJhbmRvbSBwbGFjZXMuCj4gPiAgS0NPVl9JTlNUUlVNRU5UCQk6PSBuCj4gPiAgCj4gPiAt b2JqLSQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKQkrPSBhcGljLm8gYXBpY19jb21tb24ubyBhcGlj X25vb3AubyBpcGkubyB2ZWN0b3Iubwo+ID4gK29iai0kKENPTkZJR19YODZfTE9DQUxfQVBJQykJ Kz0gYXBpYy5vIGFwaWNfbm9vcC5vIGlwaS5vIHZlY3Rvci5vCj4gPiAgb2JqLXkJCQkJKz0gaHdf bm1pLm8KPiA+ICAKPiA+ICBvYmotJChDT05GSUdfWDg2X0lPX0FQSUMpCSs9IGlvX2FwaWMubwo+ ID4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYyBiL2FyY2gveDg2L2tl cm5lbC9hcGljL2FwaWMuYwo+ID4gaW5kZXggNmUyNzJmM2VhOTg0Li5mNzJlY2Q1YzM5YTcgMTAw NjQ0Cj4gPiAtLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKPiA+ICsrKyBiL2FyY2gv eDg2L2tlcm5lbC9hcGljL2FwaWMuYwo+ID4gQEAgLTIxMSw3ICsyMTEsMTEgQEAgc3RhdGljIGlu bGluZSBpbnQgbGFwaWNfZ2V0X3ZlcnNpb24odm9pZCkKPiA+ICAgKi8KPiA+ICBzdGF0aWMgaW5s aW5lIGludCBsYXBpY19pc19pbnRlZ3JhdGVkKHZvaWQpCj4gPiAgewo+ID4gKyNpZmRlZiBDT05G SUdfWDg2XzY0Cj4gPiArCXJldHVybiAxOwo+ID4gKyNlbHNlCj4gPiAgCXJldHVybiBBUElDX0lO VEVHUkFURUQobGFwaWNfZ2V0X3ZlcnNpb24oKSk7Cj4gPiArI2VuZGlmCj4gPiAgfQo+ID4gIAo+ ID4gIC8qCj4gPiBAQCAtMjk0LDExICsyOTgsMTQgQEAgaW50IGdldF9waHlzaWNhbF9icm9hZGNh c3Qodm9pZCkKPiA+ICAgKi8KPiA+ICBpbnQgbGFwaWNfZ2V0X21heGx2dCh2b2lkKQo+ID4gIHsK PiA+ICsJdW5zaWduZWQgaW50IHY7Cj4gPiArCj4gPiArCXYgPSBhcGljX3JlYWQoQVBJQ19MVlIp Owo+ID4gIAkvKgo+ID4gIAkgKiAtIHdlIGFsd2F5cyBoYXZlIEFQSUMgaW50ZWdyYXRlZCBvbiA2 NGJpdCBtb2RlCj4gPiAgCSAqIC0gODI0ODlEWHMgZG8gbm90IHJlcG9ydCAjIG9mIExWVCBlbnRy aWVzCj4gPiAgCSAqLwo+ID4gLQlyZXR1cm4gbGFwaWNfaXNfaW50ZWdyYXRlZCgpID8gR0VUX0FQ SUNfTUFYTFZUKGFwaWNfcmVhZChBUElDX0xWUikpIDogMjsKPiA+ICsJcmV0dXJuIEFQSUNfSU5U RUdSQVRFRChHRVRfQVBJQ19WRVJTSU9OKHYpKSA/IEdFVF9BUElDX01BWExWVCh2KSA6IDI7Cj4g PiAgfQo+ID4gIAo+ID4gIC8qCj4gPiBAQCAtMTIyMiwxMDAgKzEyMjksNTMgQEAgdm9pZCBfX2lu aXQgc3luY19BcmJfSURzKHZvaWQpCj4gPiAgCQkJQVBJQ19JTlRfTEVWRUxUUklHIHwgQVBJQ19E TV9JTklUKTsKPiA+ICB9Cj4gPiAgCj4gPiAtZW51bSBhcGljX2ludHJfbW9kZV9pZCBhcGljX2lu dHJfbW9kZTsKPiA+IC0KPiA+IC1zdGF0aWMgaW50IF9faW5pdCBhcGljX2ludHJfbW9kZV9zZWxl Y3Qodm9pZCkKPiA+ICsvKgo+ID4gKyAqIEFuIGluaXRpYWwgc2V0dXAgb2YgdGhlIHZpcnR1YWwg d2lyZSBtb2RlLgo+ID4gKyAqLwo+ID4gK3ZvaWQgX19pbml0IGluaXRfYnNwX0FQSUModm9pZCkK PiA+ICB7Cj4gPiAtCS8qIENoZWNrIGtlcm5lbCBvcHRpb24gKi8KPiA+IC0JaWYgKGRpc2FibGVf YXBpYykgewo+ID4gLQkJcHJfaW5mbygiQVBJQyBkaXNhYmxlZCB2aWEga2VybmVsIGNvbW1hbmQg bGluZVxuIik7Cj4gPiAtCQlyZXR1cm4gQVBJQ19QSUM7Cj4gPiAtCX0KPiA+IC0KPiA+IC0JLyog Q2hlY2sgQklPUyAqLwo+ID4gLSNpZmRlZiBDT05GSUdfWDg2XzY0Cj4gPiAtCS8qIE9uIDY0LWJp dCwgdGhlIEFQSUMgbXVzdCBiZSBpbnRlZ3JhdGVkLCBDaGVjayBsb2NhbCBBUElDIG9ubHkgKi8K PiA+IC0JaWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVBJQykpIHsKPiA+IC0JCWRpc2Fi bGVfYXBpYyA9IDE7Cj4gPiAtCQlwcl9pbmZvKCJBUElDIGRpc2FibGVkIGJ5IEJJT1NcbiIpOwo+ ID4gLQkJcmV0dXJuIEFQSUNfUElDOwo+ID4gLQl9Cj4gPiAtI2Vsc2UKPiA+IC0JLyogT24gMzIt Yml0LCB0aGUgQVBJQyBtYXkgYmUgaW50ZWdyYXRlZCBBUElDIG9yIDgyNDg5RFggKi8KPiA+IC0K PiA+IC0JLyogTmVpdGhlciA4MjQ4OURYIG5vciBpbnRlZ3JhdGVkIEFQSUMgPyAqLwo+ID4gLQlp ZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BUElDKSAmJiAhc21wX2ZvdW5kX2NvbmZpZykg ewo+ID4gLQkJZGlzYWJsZV9hcGljID0gMTsKPiA+IC0JCXJldHVybiBBUElDX1BJQzsKPiA+IC0J fQo+ID4gKwl1bnNpZ25lZCBpbnQgdmFsdWU7Cj4gPiAgCj4gPiAtCS8qIElmIHRoZSBCSU9TIHBy ZXRlbmRzIHRoZXJlIGlzIGFuIGludGVncmF0ZWQgQVBJQyA/ICovCj4gPiAtCWlmICghYm9vdF9j cHVfaGFzKFg4Nl9GRUFUVVJFX0FQSUMpICYmCj4gPiAtCQlBUElDX0lOVEVHUkFURUQoYm9vdF9j cHVfYXBpY192ZXJzaW9uKSkgewo+ID4gLQkJZGlzYWJsZV9hcGljID0gMTsKPiA+IC0JCXByX2Vy cihGV19CVUcgIkxvY2FsIEFQSUMgJWQgbm90IGRldGVjdGVkLCBmb3JjZSBlbXVsYXRpb25cbiIs Cj4gPiAtCQkJCSAgICAgICBib290X2NwdV9waHlzaWNhbF9hcGljaWQpOwo+ID4gLQkJcmV0dXJu IEFQSUNfUElDOwo+ID4gLQl9Cj4gPiAtI2VuZGlmCj4gPiArCS8qCj4gPiArCSAqIERvbid0IGRv IHRoZSBzZXR1cCBub3cgaWYgd2UgaGF2ZSBhIFNNUCBCSU9TIGFzIHRoZQo+ID4gKwkgKiB0aHJv dWdoLUkvTy1BUElDIHZpcnR1YWwgd2lyZSBtb2RlIG1pZ2h0IGJlIGFjdGl2ZS4KPiA+ICsJICov Cj4gPiArCWlmIChzbXBfZm91bmRfY29uZmlnIHx8ICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVf QVBJQykpCj4gPiArCQlyZXR1cm47Cj4gPiAgCj4gPiAtCS8qIENoZWNrIE1QIHRhYmxlIG9yIEFD UEkgTUFEVCBjb25maWd1cmF0aW9uICovCj4gPiAtCWlmICghc21wX2ZvdW5kX2NvbmZpZykgewo+ ID4gLQkJZGlzYWJsZV9pb2FwaWNfc3VwcG9ydCgpOwo+ID4gLQkJaWYgKCFhY3BpX2xhcGljKSB7 Cj4gPiAtCQkJcHJfaW5mbygiQVBJQzogQUNQSSBNQURUIG9yIE1QIHRhYmxlcyBhcmUgbm90IGRl dGVjdGVkXG4iKTsKPiA+IC0JCQlyZXR1cm4gQVBJQ19WSVJUVUFMX1dJUkVfTk9fQ09ORklHOwo+ ID4gLQkJfQo+ID4gLQkJcmV0dXJuIEFQSUNfVklSVFVBTF9XSVJFOwo+ID4gLQl9Cj4gPiArCS8q Cj4gPiArCSAqIERvIG5vdCB0cnVzdCB0aGUgbG9jYWwgQVBJQyBiZWluZyBlbXB0eSBhdCBib290 dXAuCj4gPiArCSAqLwo+ID4gKwljbGVhcl9sb2NhbF9BUElDKCk7Cj4gPiAgCj4gPiAtI2lmZGVm IENPTkZJR19TTVAKPiA+IC0JLyogSWYgU01QIHNob3VsZCBiZSBkaXNhYmxlZCwgdGhlbiByZWFs bHkgZGlzYWJsZSBpdCEgKi8KPiA+IC0JaWYgKCFzZXR1cF9tYXhfY3B1cykgewo+ID4gLQkJcHJf aW5mbygiQVBJQzogU01QIG1vZGUgZGVhY3RpdmF0ZWRcbiIpOwo+ID4gLQkJcmV0dXJuIEFQSUNf U1lNTUVUUklDX0lPX05PX1JPVVRJTkc7Cj4gPiAtCX0KPiA+ICsJLyoKPiA+ICsJICogRW5hYmxl IEFQSUMuCj4gPiArCSAqLwo+ID4gKwl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwo+ID4g Kwl2YWx1ZSAmPSB+QVBJQ19WRUNUT1JfTUFTSzsKPiA+ICsJdmFsdWUgfD0gQVBJQ19TUElWX0FQ SUNfRU5BQkxFRDsKPiA+ICAKPiA+IC0JaWYgKHJlYWRfYXBpY19pZCgpICE9IGJvb3RfY3B1X3Bo eXNpY2FsX2FwaWNpZCkgewo+ID4gLQkJcGFuaWMoIkJvb3QgQVBJQyBJRCBpbiBsb2NhbCBBUElD IHVuZXhwZWN0ZWQgKCVkIHZzICVkKSIsCj4gPiAtCQkgICAgIHJlYWRfYXBpY19pZCgpLCBib290 X2NwdV9waHlzaWNhbF9hcGljaWQpOwo+ID4gLQkJLyogT3IgY2FuIHdlIHN3aXRjaCBiYWNrIHRv IFBJQyBoZXJlPyAqLwo+ID4gLQl9Cj4gPiArI2lmZGVmIENPTkZJR19YODZfMzIKPiA+ICsJLyog VGhpcyBiaXQgaXMgcmVzZXJ2ZWQgb24gUDQvWGVvbiBhbmQgc2hvdWxkIGJlIGNsZWFyZWQgKi8K PiA+ICsJaWYgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkg JiYKPiA+ICsJICAgIChib290X2NwdV9kYXRhLng4NiA9PSAxNSkpCj4gPiArCQl2YWx1ZSAmPSB+ QVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVEOwo+ID4gKwllbHNlCj4gPiAgI2VuZGlmCj4gPiArCQl2 YWx1ZSB8PSBBUElDX1NQSVZfRk9DVVNfRElTQUJMRUQ7Cj4gPiArCXZhbHVlIHw9IFNQVVJJT1VT X0FQSUNfVkVDVE9SOwo+ID4gKwlhcGljX3dyaXRlKEFQSUNfU1BJViwgdmFsdWUpOwo+ID4gIAo+ ID4gLQlyZXR1cm4gQVBJQ19TWU1NRVRSSUNfSU87Cj4gPiAtfQo+ID4gLQo+ID4gLS8qIEluaXQg dGhlIGludGVycnVwdCBkZWxpdmVyeSBtb2RlIGZvciB0aGUgQlNQICovCj4gPiAtdm9pZCBfX2lu aXQgYXBpY19pbnRyX21vZGVfaW5pdCh2b2lkKQo+ID4gLXsKPiA+IC0JYm9vbCB1cG1vZGUgPSBJ U19FTkFCTEVEKENPTkZJR19VUF9MQVRFX0lOSVQpOwo+ID4gLQo+ID4gLQlhcGljX2ludHJfbW9k ZSA9IGFwaWNfaW50cl9tb2RlX3NlbGVjdCgpOwo+ID4gLQo+ID4gLQlzd2l0Y2ggKGFwaWNfaW50 cl9tb2RlKSB7Cj4gPiAtCWNhc2UgQVBJQ19QSUM6Cj4gPiAtCQlwcl9pbmZvKCJBUElDOiBLZWVw IGluIFBJQyBtb2RlKDgyNTkpXG4iKTsKPiA+IC0JCXJldHVybjsKPiA+IC0JY2FzZSBBUElDX1ZJ UlRVQUxfV0lSRToKPiA+IC0JCXByX2luZm8oIkFQSUM6IFN3aXRjaCB0byB2aXJ0dWFsIHdpcmUg bW9kZSBzZXR1cFxuIik7Cj4gPiAtCQlkZWZhdWx0X3NldHVwX2FwaWNfcm91dGluZygpOwo+ID4g LQkJYnJlYWs7Cj4gPiAtCWNhc2UgQVBJQ19WSVJUVUFMX1dJUkVfTk9fQ09ORklHOgo+ID4gLQkJ cHJfaW5mbygiQVBJQzogU3dpdGNoIHRvIHZpcnR1YWwgd2lyZSBtb2RlIHNldHVwIHdpdGggbm8g Y29uZmlndXJhdGlvblxuIik7Cj4gPiAtCQl1cG1vZGUgPSB0cnVlOwo+ID4gLQkJZGVmYXVsdF9z ZXR1cF9hcGljX3JvdXRpbmcoKTsKPiA+IC0JCWJyZWFrOwo+ID4gLQljYXNlIEFQSUNfU1lNTUVU UklDX0lPOgo+ID4gLQkJcHJfaW5mbygiQVBJQzogU3dpdGNoIHRvIHN5bW1ldHJpYyBJL08gbW9k ZSBzZXR1cFxuIik7Cj4gPiAtCQlkZWZhdWx0X3NldHVwX2FwaWNfcm91dGluZygpOwo+ID4gLQkJ YnJlYWs7Cj4gPiAtCWNhc2UgQVBJQ19TWU1NRVRSSUNfSU9fTk9fUk9VVElORzoKPiA+IC0JCXBy X2luZm8oIkFQSUM6IFN3aXRjaCB0byBzeW1tZXRyaWMgSS9PIG1vZGUgc2V0dXAgaW4gbm8gU01Q IHJvdXRpbmVcbiIpOwo+ID4gLQkJYnJlYWs7Cj4gPiAtCX0KPiA+IC0KPiA+IC0JYXBpY19ic3Bf c2V0dXAodXBtb2RlKTsKPiA+ICsJLyoKPiA+ICsJICogU2V0IHVwIHRoZSB2aXJ0dWFsIHdpcmUg bW9kZS4KPiA+ICsJICovCj4gPiArCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX0VYVElO VCk7Cj4gPiArCXZhbHVlID0gQVBJQ19ETV9OTUk7Cj4gPiArCWlmICghbGFwaWNfaXNfaW50ZWdy YXRlZCgpKQkJLyogODI0ODlEWCAqLwo+ID4gKwkJdmFsdWUgfD0gQVBJQ19MVlRfTEVWRUxfVFJJ R0dFUjsKPiA+ICsJaWYgKGFwaWNfZXh0bm1pID09IEFQSUNfRVhUTk1JX05PTkUpCj4gPiArCQl2 YWx1ZSB8PSBBUElDX0xWVF9NQVNLRUQ7Cj4gPiArCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2YWx1 ZSk7Cj4gPiAgfQo+ID4gIAo+ID4gIHN0YXRpYyB2b2lkIGxhcGljX3NldHVwX2Vzcih2b2lkKQo+ ID4gQEAgLTE1MzksOSArMTQ5OSw3IEBAIHZvaWQgc2V0dXBfbG9jYWxfQVBJQyh2b2lkKQo+ID4g IAkJdmFsdWUgPSBBUElDX0RNX05NSTsKPiA+ICAJZWxzZQo+ID4gIAkJdmFsdWUgPSBBUElDX0RN X05NSSB8IEFQSUNfTFZUX01BU0tFRDsKPiA+IC0KPiA+IC0JLyogSXMgODI0ODlEWCA/ICovCj4g PiAtCWlmICghbGFwaWNfaXNfaW50ZWdyYXRlZCgpKQo+ID4gKwlpZiAoIWxhcGljX2lzX2ludGVn cmF0ZWQoKSkJCS8qIDgyNDg5RFggKi8KPiA+ICAJCXZhbHVlIHw9IEFQSUNfTFZUX0xFVkVMX1RS SUdHRVI7Cj4gPiAgCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2YWx1ZSk7Cj4gPiAgCj4gPiBAQCAt MTkyNyw4ICsxODg1LDggQEAgdm9pZCBfX2luaXQgaW5pdF9hcGljX21hcHBpbmdzKHZvaWQpCj4g PiAgCQkgKiB5ZWFoIC0tIHdlIGxpZSBhYm91dCBhcGljX3ZlcnNpb24KPiA+ICAJCSAqIGluIGNh c2UgaWYgYXBpYyB3YXMgZGlzYWJsZWQgdmlhIGJvb3Qgb3B0aW9uCj4gPiAgCQkgKiBidXQgaXQn cyBub3QgYSBwcm9ibGVtIGZvciBTTVAgY29tcGlsZWQga2VybmVsCj4gPiAtCQkgKiBzaW5jZSBh cGljX2ludHJfbW9kZV9zZWxlY3QgaXMgcHJlcGFyZWQgZm9yIHN1Y2gKPiA+IC0JCSAqIGEgY2Fz ZSBhbmQgZGlzYWJsZSBzbXAgbW9kZQo+ID4gKwkJICogc2luY2Ugc21wX3Nhbml0eV9jaGVjayBp cyBwcmVwYXJlZCBmb3Igc3VjaCBhIGNhc2UKPiA+ICsJCSAqIGFuZCBkaXNhYmxlIHNtcCBtb2Rl Cj4gPiAgCQkgKi8KPiA+ICAJCWJvb3RfY3B1X2FwaWNfdmVyc2lvbiA9IEdFVF9BUElDX1ZFUlNJ T04oYXBpY19yZWFkKEFQSUNfTFZSKSk7Cj4gPiAgCX0KPiA+IEBAIC0yMjg0LDYgKzIyNDIsNDQg QEAgaW50IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQo+ID4gIAlyZXR1cm4gcmVhZF9hcGlj X2lkKCk7Cj4gPiAgfQo+ID4gIAo+ID4gK3ZvaWQgZGVmYXVsdF9pbml0X2FwaWNfbGRyKHZvaWQp Cj4gPiArewo+ID4gKwl1bnNpZ25lZCBsb25nIHZhbDsKPiA+ICsKPiA+ICsJYXBpY193cml0ZShB UElDX0RGUiwgQVBJQ19ERlJfVkFMVUUpOwo+ID4gKwl2YWwgPSBhcGljX3JlYWQoQVBJQ19MRFIp ICYgfkFQSUNfTERSX01BU0s7Cj4gPiArCXZhbCB8PSBTRVRfQVBJQ19MT0dJQ0FMX0lEKDFVTCA8 PCBzbXBfcHJvY2Vzc29yX2lkKCkpOwo+ID4gKwlhcGljX3dyaXRlKEFQSUNfTERSLCB2YWwpOwo+ ID4gK30KPiA+ICsKPiA+ICtpbnQgZGVmYXVsdF9jcHVfbWFza190b19hcGljaWQoY29uc3Qgc3Ry dWN0IGNwdW1hc2sgKm1hc2ssCj4gPiArCQkJICAgICAgIHN0cnVjdCBpcnFfZGF0YSAqaXJxZGF0 YSwKPiA+ICsJCQkgICAgICAgdW5zaWduZWQgaW50ICphcGljaWQpCj4gPiArewo+ID4gKwl1bnNp Z25lZCBpbnQgY3B1ID0gY3B1bWFza19maXJzdChtYXNrKTsKPiA+ICsKPiA+ICsJaWYgKGNwdSA+ PSBucl9jcHVfaWRzKQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCSphcGljaWQgPSBwZXJf Y3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOwo+ID4gKwlpcnFfZGF0YV91cGRhdGVfZWZmZWN0 aXZlX2FmZmluaXR5KGlycWRhdGEsIGNwdW1hc2tfb2YoY3B1KSk7Cj4gPiArCXJldHVybiAwOwo+ ID4gK30KPiA+ICsKPiA+ICtpbnQgZmxhdF9jcHVfbWFza190b19hcGljaWQoY29uc3Qgc3RydWN0 IGNwdW1hc2sgKm1hc2ssCj4gPiArCQkJICAgIHN0cnVjdCBpcnFfZGF0YSAqaXJxZGF0YSwKPiA+ ICsJCQkgICAgdW5zaWduZWQgaW50ICphcGljaWQpCj4gPiArCj4gPiArewo+ID4gKwlzdHJ1Y3Qg Y3B1bWFzayAqZWZmbXNrID0gaXJxX2RhdGFfZ2V0X2VmZmVjdGl2ZV9hZmZpbml0eV9tYXNrKGly cWRhdGEpOwo+ID4gKwl1bnNpZ25lZCBsb25nIGNwdV9tYXNrID0gY3B1bWFza19iaXRzKG1hc2sp WzBdICYgQVBJQ19BTExfQ1BVUzsKPiA+ICsKPiA+ICsJaWYgKCFjcHVfbWFzaykKPiA+ICsJCXJl dHVybiAtRUlOVkFMOwo+ID4gKwkqYXBpY2lkID0gKHVuc2lnbmVkIGludCljcHVfbWFzazsKPiA+ ICsJY3B1bWFza19iaXRzKGVmZm1zaylbMF0gPSBjcHVfbWFzazsKPiA+ICsJcmV0dXJuIDA7Cj4g PiArfQo+ID4gKwo+ID4gIC8qCj4gPiAgICogT3ZlcnJpZGUgdGhlIGdlbmVyaWMgRU9JIGltcGxl bWVudGF0aW9uIHdpdGggYW4gb3B0aW1pemVkIHZlcnNpb24uCj4gPiAgICogT25seSBjYWxsZWQg ZHVyaW5nIGVhcmx5IGJvb3Qgd2hlbiBvbmx5IG9uZSBDUFUgaXMgYWN0aXZlIGFuZCB3aXRoCj4g PiBAQCAtMjMyNiwyNyArMjMyMiw3MiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgYXBpY19ic3BfdXBf c2V0dXAodm9pZCkKPiA+ICAgKiBSZXR1cm5zOgo+ID4gICAqIGFwaWNfaWQgb2YgQlNQIEFQSUMK PiA+ICAgKi8KPiA+IC12b2lkIF9faW5pdCBhcGljX2JzcF9zZXR1cChib29sIHVwbW9kZSkKPiA+ ICtpbnQgX19pbml0IGFwaWNfYnNwX3NldHVwKGJvb2wgdXBtb2RlKQo+ID4gIHsKPiA+ICsJaW50 IGlkOwo+ID4gKwo+ID4gIAljb25uZWN0X2JzcF9BUElDKCk7Cj4gPiAgCWlmICh1cG1vZGUpCj4g PiAgCQlhcGljX2JzcF91cF9zZXR1cCgpOwo+ID4gIAlzZXR1cF9sb2NhbF9BUElDKCk7Cj4gPiAg Cj4gPiArCWlmICh4MmFwaWNfbW9kZSkKPiA+ICsJCWlkID0gYXBpY19yZWFkKEFQSUNfTERSKTsK PiA+ICsJZWxzZQo+ID4gKwkJaWQgPSBHRVRfQVBJQ19MT0dJQ0FMX0lEKGFwaWNfcmVhZChBUElD X0xEUikpOwo+ID4gKwo+ID4gIAllbmFibGVfSU9fQVBJQygpOwo+ID4gIAllbmRfbG9jYWxfQVBJ Q19zZXR1cCgpOwo+ID4gIAlpcnFfcmVtYXBfZW5hYmxlX2ZhdWx0X2hhbmRsaW5nKCk7Cj4gPiAg CXNldHVwX0lPX0FQSUMoKTsKPiA+ICsJLyogU2V0dXAgbG9jYWwgdGltZXIgKi8KPiA+ICsJeDg2 X2luaXQudGltZXJzLnNldHVwX3BlcmNwdV9jbG9ja2V2KCk7Cj4gPiArCXJldHVybiBpZDsKPiA+ ICt9Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBUaGlzIGluaXRpYWxpemVzIHRoZSBJTy1BUElDIGFu ZCBBUElDIGhhcmR3YXJlIGlmIHRoaXMgaXMKPiA+ICsgKiBhIFVQIGtlcm5lbC4KPiA+ICsgKi8K PiA+ICtpbnQgX19pbml0IEFQSUNfaW5pdF91bmlwcm9jZXNzb3Iodm9pZCkKPiA+ICt7Cj4gPiAr CWlmIChkaXNhYmxlX2FwaWMpIHsKPiA+ICsJCXByX2luZm8oIkFwaWMgZGlzYWJsZWRcbiIpOwo+ ID4gKwkJcmV0dXJuIC0xOwo+ID4gKwl9Cj4gPiArI2lmZGVmIENPTkZJR19YODZfNjQKPiA+ICsJ aWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVBJQykpIHsKPiA+ICsJCWRpc2FibGVfYXBp YyA9IDE7Cj4gPiArCQlwcl9pbmZvKCJBcGljIGRpc2FibGVkIGJ5IEJJT1NcbiIpOwo+ID4gKwkJ cmV0dXJuIC0xOwo+ID4gKwl9Cj4gPiArI2Vsc2UKPiA+ICsJaWYgKCFzbXBfZm91bmRfY29uZmln ICYmICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVBJQykpCj4gPiArCQlyZXR1cm4gLTE7Cj4g PiArCj4gPiArCS8qCj4gPiArCSAqIENvbXBsYWluIGlmIHRoZSBCSU9TIHByZXRlbmRzIHRoZXJl IGlzIG9uZS4KPiA+ICsJICovCj4gPiArCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FQ SUMpICYmCj4gPiArCSAgICBBUElDX0lOVEVHUkFURUQoYm9vdF9jcHVfYXBpY192ZXJzaW9uKSkg ewo+ID4gKwkJcHJfZXJyKCJCSU9TIGJ1ZywgbG9jYWwgQVBJQyAweCV4IG5vdCBkZXRlY3RlZCEu Li5cbiIsCj4gPiArCQkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKPiA+ICsJCXJldHVybiAt MTsKPiA+ICsJfQo+ID4gKyNlbmRpZgo+ID4gKwo+ID4gKwlpZiAoIXNtcF9mb3VuZF9jb25maWcp Cj4gPiArCQlkaXNhYmxlX2lvYXBpY19zdXBwb3J0KCk7Cj4gPiArCj4gPiArCWRlZmF1bHRfc2V0 dXBfYXBpY19yb3V0aW5nKCk7Cj4gPiArCWFwaWNfYnNwX3NldHVwKHRydWUpOwo+ID4gKwlyZXR1 cm4gMDsKPiA+ICB9Cj4gPiAgCj4gPiAgI2lmZGVmIENPTkZJR19VUF9MQVRFX0lOSVQKPiA+ICB2 b2lkIF9faW5pdCB1cF9sYXRlX2luaXQodm9pZCkKPiA+ICB7Cj4gPiAtCWlmIChhcGljX2ludHJf bW9kZSA9PSBBUElDX1BJQykKPiA+IC0JCXJldHVybjsKPiA+IC0KPiA+IC0JLyogU2V0dXAgbG9j YWwgdGltZXIgKi8KPiA+IC0JeDg2X2luaXQudGltZXJzLnNldHVwX3BlcmNwdV9jbG9ja2V2KCk7 Cj4gPiArCUFQSUNfaW5pdF91bmlwcm9jZXNzb3IoKTsKPiA+ICB9Cj4gPiAgI2VuZGlmCj4gPiAg Cj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpY19jb21tb24uYyBiL2Fy Y2gveDg2L2tlcm5lbC9hcGljL2FwaWNfY29tbW9uLmMKPiA+IGRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAo+ID4gaW5kZXggYTM2MDgwMTc3OWFlLi4wMDAwMDAwMDAwMDAKPiA+IC0tLSBhL2FyY2gv eDg2L2tlcm5lbC9hcGljL2FwaWNfY29tbW9uLmMKPiA+ICsrKyAvZGV2L251bGwKPiA+IEBAIC0x LDQ2ICswLDAgQEAKPiA+IC0vKgo+ID4gLSAqIENvbW1vbiBmdW5jdGlvbnMgc2hhcmVkIGJldHdl ZW4gdGhlIHZhcmlvdXMgQVBJQyBmbGF2b3Vycwo+ID4gLSAqCj4gPiAtICogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAKPiA+IC0gKi8KPiA+IC0jaW5jbHVkZSA8bGludXgvaXJxLmg+ Cj4gPiAtI2luY2x1ZGUgPGFzbS9hcGljLmg+Cj4gPiAtCj4gPiAtdTMyIGFwaWNfZGVmYXVsdF9j YWxjX2FwaWNpZCh1bnNpZ25lZCBpbnQgY3B1KQo+ID4gLXsKPiA+IC0JcmV0dXJuIHBlcl9jcHUo eDg2X2NwdV90b19hcGljaWQsIGNwdSk7Cj4gPiAtfQo+ID4gLQo+ID4gLXUzMiBhcGljX2ZsYXRf Y2FsY19hcGljaWQodW5zaWduZWQgaW50IGNwdSkKPiA+IC17Cj4gPiAtCXJldHVybiAxVSA8PCBj cHU7Cj4gPiAtfQo+ID4gLQo+ID4gLWJvb2wgZGVmYXVsdF9jaGVja19hcGljaWRfdXNlZChwaHlz aWRfbWFza190ICptYXAsIGludCBhcGljaWQpCj4gPiAtewo+ID4gLQlyZXR1cm4gcGh5c2lkX2lz c2V0KGFwaWNpZCwgKm1hcCk7Cj4gPiAtfQo+ID4gLQo+ID4gLXZvaWQgZGVmYXVsdF9pb2FwaWNf cGh5c19pZF9tYXAocGh5c2lkX21hc2tfdCAqcGh5c19tYXAsIHBoeXNpZF9tYXNrX3QgKnJldG1h cCkKPiA+IC17Cj4gPiAtCSpyZXRtYXAgPSAqcGh5c19tYXA7Cj4gPiAtfQo+ID4gLQo+ID4gLWlu dCBkZWZhdWx0X2NwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSkKPiA+IC17Cj4gPiAt CWlmIChtcHNfY3B1IDwgbnJfY3B1X2lkcyAmJiBjcHVfcHJlc2VudChtcHNfY3B1KSkKPiA+IC0J CXJldHVybiAoaW50KXBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgbXBzX2NwdSk7Cj4gPiAt CWVsc2UKPiA+IC0JCXJldHVybiBCQURfQVBJQ0lEOwo+ID4gLX0KPiA+IC1FWFBPUlRfU1lNQk9M X0dQTChkZWZhdWx0X2NwdV9wcmVzZW50X3RvX2FwaWNpZCk7Cj4gPiAtCj4gPiAtaW50IGRlZmF1 bHRfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgcGh5c19hcGljaWQpCj4gPiAtewo+ID4g LQlyZXR1cm4gcGh5c2lkX2lzc2V0KHBoeXNfYXBpY2lkLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7 Cj4gPiAtfQo+ID4gLQo+ID4gLWludCBkZWZhdWx0X2FwaWNfaWRfdmFsaWQoaW50IGFwaWNpZCkK PiA+IC17Cj4gPiAtCXJldHVybiAoYXBpY2lkIDwgMjU1KTsKPiA+IC19Cj4gPiBkaWZmIC0tZ2l0 IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpY19mbGF0XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwv YXBpYy9hcGljX2ZsYXRfNjQuYwo+ID4gaW5kZXggYWE4NTY5MGU5YjY0Li5kZWRkNWE0MWJhNDgg MTAwNjQ0Cj4gPiAtLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYwo+ID4g KysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpY19mbGF0XzY0LmMKPiA+IEBAIC0xMTksNyAr MTE5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmbGF0X2dldF9hcGljX2lkKHVuc2lnbmVkIGxv bmcgeCkKPiA+ICAJcmV0dXJuICh4ID4+IDI0KSAmIDB4RkY7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0 YXRpYyB1MzIgc2V0X2FwaWNfaWQodW5zaWduZWQgaW50IGlkKQo+ID4gK3N0YXRpYyB1bnNpZ25l ZCBsb25nIHNldF9hcGljX2lkKHVuc2lnbmVkIGludCBpZCkKPiA+ICB7Cj4gPiAgCXJldHVybiAo aWQgJiAweEZGKSA8PCAyNDsKPiA+ICB9Cj4gPiBAQCAtMTU0LDEwICsxNTQsMTIgQEAgc3RhdGlj IHN0cnVjdCBhcGljIGFwaWNfZmxhdCBfX3JvX2FmdGVyX2luaXQgPSB7Cj4gPiAgCS5pcnFfZGVs aXZlcnlfbW9kZQkJPSBkZXN0X0xvd2VzdFByaW8sCj4gPiAgCS5pcnFfZGVzdF9tb2RlCQkJPSAx LCAvKiBsb2dpY2FsICovCj4gPiAgCj4gPiArCS50YXJnZXRfY3B1cwkJCT0gb25saW5lX3Rhcmdl dF9jcHVzLAo+ID4gIAkuZGlzYWJsZV9lc3IJCQk9IDAsCj4gPiAgCS5kZXN0X2xvZ2ljYWwJCQk9 IEFQSUNfREVTVF9MT0dJQ0FMLAo+ID4gIAkuY2hlY2tfYXBpY2lkX3VzZWQJCT0gTlVMTCwKPiA+ ICAKPiA+ICsJLnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbgk9IGZsYXRfdmVjdG9yX2FsbG9jYXRp b25fZG9tYWluLAo+ID4gIAkuaW5pdF9hcGljX2xkcgkJCT0gZmxhdF9pbml0X2FwaWNfbGRyLAo+ ID4gIAo+ID4gIAkuaW9hcGljX3BoeXNfaWRfbWFwCQk9IE5VTEwsCj4gPiBAQCAtMTcwLDcgKzE3 Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgYXBpYyBhcGljX2ZsYXQgX19yb19hZnRlcl9pbml0ID0gewo+ ID4gIAkuZ2V0X2FwaWNfaWQJCQk9IGZsYXRfZ2V0X2FwaWNfaWQsCj4gPiAgCS5zZXRfYXBpY19p ZAkJCT0gc2V0X2FwaWNfaWQsCj4gPiAgCj4gPiAtCS5jYWxjX2Rlc3RfYXBpY2lkCQk9IGFwaWNf ZmxhdF9jYWxjX2FwaWNpZCwKPiA+ICsJLmNwdV9tYXNrX3RvX2FwaWNpZAkJPSBmbGF0X2NwdV9t YXNrX3RvX2FwaWNpZCwKPiA+ICAKPiA+ICAJLnNlbmRfSVBJCQkJPSBkZWZhdWx0X3NlbmRfSVBJ X3NpbmdsZSwKPiA+ICAJLnNlbmRfSVBJX21hc2sJCQk9IGZsYXRfc2VuZF9JUElfbWFzaywKPiA+ IEBAIC0yNDcsMTAgKzI0OSwxMiBAQCBzdGF0aWMgc3RydWN0IGFwaWMgYXBpY19waHlzZmxhdCBf X3JvX2FmdGVyX2luaXQgPSB7Cj4gPiAgCS5pcnFfZGVsaXZlcnlfbW9kZQkJPSBkZXN0X0ZpeGVk LAo+ID4gIAkuaXJxX2Rlc3RfbW9kZQkJCT0gMCwgLyogcGh5c2ljYWwgKi8KPiA+ICAKPiA+ICsJ LnRhcmdldF9jcHVzCQkJPSBvbmxpbmVfdGFyZ2V0X2NwdXMsCj4gPiAgCS5kaXNhYmxlX2VzcgkJ CT0gMCwKPiA+ICAJLmRlc3RfbG9naWNhbAkJCT0gMCwKPiA+ICAJLmNoZWNrX2FwaWNpZF91c2Vk CQk9IE5VTEwsCj4gPiAgCj4gPiArCS52ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4JPSBkZWZhdWx0 X3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiwKPiA+ICAJLyogbm90IG5lZWRlZCwgYnV0IHNob3Vs ZG4ndCBodXJ0OiAqLwo+ID4gIAkuaW5pdF9hcGljX2xkcgkJCT0gZmxhdF9pbml0X2FwaWNfbGRy LAo+ID4gIAo+ID4gQEAgLTI2NCw3ICsyNjgsNyBAQCBzdGF0aWMgc3RydWN0IGFwaWMgYXBpY19w aHlzZmxhdCBfX3JvX2FmdGVyX2luaXQgPSB7Cj4gPiAgCS5nZXRfYXBpY19pZAkJCT0gZmxhdF9n ZXRfYXBpY19pZCwKPiA+ICAJLnNldF9hcGljX2lkCQkJPSBzZXRfYXBpY19pZCwKPiA+ICAKPiA+ IC0JLmNhbGNfZGVzdF9hcGljaWQJCT0gYXBpY19kZWZhdWx0X2NhbGNfYXBpY2lkLAo+ID4gKwku Y3B1X21hc2tfdG9fYXBpY2lkCQk9IGRlZmF1bHRfY3B1X21hc2tfdG9fYXBpY2lkLAo+ID4gIAo+ ID4gIAkuc2VuZF9JUEkJCQk9IGRlZmF1bHRfc2VuZF9JUElfc2luZ2xlX3BoeXMsCj4gPiAgCS5z ZW5kX0lQSV9tYXNrCQkJPSBkZWZhdWx0X3NlbmRfSVBJX21hc2tfc2VxdWVuY2VfcGh5cywKPiA+ IGRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX25vb3AuYyBiL2FyY2gveDg2 L2tlcm5lbC9hcGljL2FwaWNfbm9vcC5jCj4gPiBpbmRleCA3YjY1OWM0NDgwYzkuLmM4ZDIxMTI3 NzMxNSAxMDA2NDQKPiA+IC0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfbm9vcC5jCj4g PiArKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX25vb3AuYwo+ID4gQEAgLTg0LDYgKzg0 LDIwIEBAIHN0YXRpYyBpbnQgbm9vcF9hcGljX2lkX3JlZ2lzdGVyZWQodm9pZCkKPiA+ICAJcmV0 dXJuIHBoeXNpZF9pc3NldCgwLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7Cj4gPiAgfQo+ID4gIAo+ ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbm9vcF90YXJnZXRfY3B1cyh2b2lkKQo+ ID4gK3sKPiA+ICsJLyogb25seSBCU1AgaGVyZSAqLwo+ID4gKwlyZXR1cm4gY3B1bWFza19vZigw KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbm9vcF92ZWN0b3JfYWxsb2NhdGlvbl9k b21haW4oaW50IGNwdSwgc3RydWN0IGNwdW1hc2sgKnJldG1hc2ssCj4gPiArCQkJCQkgIGNvbnN0 IHN0cnVjdCBjcHVtYXNrICptYXNrKQo+ID4gK3sKPiA+ICsJaWYgKGNwdSAhPSAwKQo+ID4gKwkJ cHJfd2FybmluZygiQVBJQzogVmVjdG9yIGFsbG9jYXRlZCBmb3Igbm9uLUJTUCBjcHVcbiIpOwo+ ID4gKwljcHVtYXNrX2NvcHkocmV0bWFzaywgY3B1bWFza19vZihjcHUpKTsKPiA+ICt9Cj4gPiAr Cj4gPiAgc3RhdGljIHUzMiBub29wX2FwaWNfcmVhZCh1MzIgcmVnKQo+ID4gIHsKPiA+ICAJV0FS Tl9PTl9PTkNFKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BUElDKSAmJiAhZGlzYWJsZV9hcGlj KTsKPiA+IEBAIC05NSwxMyArMTA5LDYgQEAgc3RhdGljIHZvaWQgbm9vcF9hcGljX3dyaXRlKHUz MiByZWcsIHUzMiB2KQo+ID4gIAlXQVJOX09OX09OQ0UoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJF X0FQSUMpICYmICFkaXNhYmxlX2FwaWMpOwo+ID4gIH0KPiA+ICAKPiA+IC0jaWZkZWYgQ09ORklH X1g4Nl8zMgo+ID4gLXN0YXRpYyBpbnQgbm9vcF94ODZfMzJfZWFybHlfbG9naWNhbF9hcGljaWQo aW50IGNwdSkKPiA+IC17Cj4gPiAtCXJldHVybiBCQURfQVBJQ0lEOwo+ID4gLX0KPiA+IC0jZW5k aWYKPiA+IC0KPiA+ICBzdHJ1Y3QgYXBpYyBhcGljX25vb3AgX19yb19hZnRlcl9pbml0ID0gewo+ ID4gIAkubmFtZQkJCQk9ICJub29wIiwKPiA+ICAJLnByb2JlCQkJCT0gbm9vcF9wcm9iZSwKPiA+ IEBAIC0xMTQsMTAgKzEyMSwxMiBAQCBzdHJ1Y3QgYXBpYyBhcGljX25vb3AgX19yb19hZnRlcl9p bml0ID0gewo+ID4gIAkvKiBsb2dpY2FsIGRlbGl2ZXJ5IGJyb2FkY2FzdCB0byBhbGwgQ1BVczog Ki8KPiA+ICAJLmlycV9kZXN0X21vZGUJCQk9IDEsCj4gPiAgCj4gPiArCS50YXJnZXRfY3B1cwkJ CT0gbm9vcF90YXJnZXRfY3B1cywKPiA+ICAJLmRpc2FibGVfZXNyCQkJPSAwLAo+ID4gIAkuZGVz dF9sb2dpY2FsCQkJPSBBUElDX0RFU1RfTE9HSUNBTCwKPiA+ICAJLmNoZWNrX2FwaWNpZF91c2Vk CQk9IGRlZmF1bHRfY2hlY2tfYXBpY2lkX3VzZWQsCj4gPiAgCj4gPiArCS52ZWN0b3JfYWxsb2Nh dGlvbl9kb21haW4JPSBub29wX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiwKPiA+ICAJLmluaXRf YXBpY19sZHIJCQk9IG5vb3BfaW5pdF9hcGljX2xkciwKPiA+ICAKPiA+ICAJLmlvYXBpY19waHlz X2lkX21hcAkJPSBkZWZhdWx0X2lvYXBpY19waHlzX2lkX21hcCwKPiA+IEBAIC0xMzMsNyArMTQy LDcgQEAgc3RydWN0IGFwaWMgYXBpY19ub29wIF9fcm9fYWZ0ZXJfaW5pdCA9IHsKPiA+ICAJLmdl dF9hcGljX2lkCQkJPSBub29wX2dldF9hcGljX2lkLAo+ID4gIAkuc2V0X2FwaWNfaWQJCQk9IE5V TEwsCj4gPiAgCj4gPiAtCS5jYWxjX2Rlc3RfYXBpY2lkCQk9IGFwaWNfZmxhdF9jYWxjX2FwaWNp ZCwKPiA+ICsJLmNwdV9tYXNrX3RvX2FwaWNpZAkJPSBmbGF0X2NwdV9tYXNrX3RvX2FwaWNpZCwK PiA+ICAKPiA+ICAJLnNlbmRfSVBJCQkJPSBub29wX3NlbmRfSVBJLAo+ID4gIAkuc2VuZF9JUElf bWFzawkJCT0gbm9vcF9zZW5kX0lQSV9tYXNrLAo+ID4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tl cm5lbC9hcGljL2FwaWNfbnVtYWNoaXAuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfbnVt YWNoaXAuYwo+ID4gaW5kZXggMTM0ZTA0NTA2YWI0Li4yZmRhOTEyMjE5YTYgMTAwNjQ0Cj4gPiAt LS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX251bWFjaGlwLmMKPiA+ICsrKyBiL2FyY2gv eDg2L2tlcm5lbC9hcGljL2FwaWNfbnVtYWNoaXAuYwo+ID4gQEAgLTM4LDcgKzM4LDcgQEAgc3Rh dGljIHVuc2lnbmVkIGludCBudW1hY2hpcDFfZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KQo+ ID4gIAlyZXR1cm4gaWQ7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyB1MzIgbnVtYWNoaXAxX3Nl dF9hcGljX2lkKHVuc2lnbmVkIGludCBpZCkKPiA+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBudW1h Y2hpcDFfc2V0X2FwaWNfaWQodW5zaWduZWQgaW50IGlkKQo+ID4gIHsKPiA+ICAJcmV0dXJuIChp ZCAmIDB4ZmYpIDw8IDI0Owo+ID4gIH0KPiA+IEBAIC01MSw3ICs1MSw3IEBAIHN0YXRpYyB1bnNp Z25lZCBpbnQgbnVtYWNoaXAyX2dldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKPiA+ICAJcmV0 dXJuICgobWNmZyA+PiAoMjggLSA4KSkgJiAweGZmZjAwKSB8ICh4ID4+IDI0KTsKPiA+ICB9Cj4g PiAgCj4gPiAtc3RhdGljIHUzMiBudW1hY2hpcDJfc2V0X2FwaWNfaWQodW5zaWduZWQgaW50IGlk KQo+ID4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIG51bWFjaGlwMl9zZXRfYXBpY19pZCh1bnNpZ25l ZCBpbnQgaWQpCj4gPiAgewo+ID4gIAlyZXR1cm4gaWQgPDwgMjQ7Cj4gPiAgfQo+ID4gQEAgLTI0 OSwxMCArMjQ5LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXBpYyBhcGljX251bWFjaGlwMSBf X3JlZmNvbnN0ID0gewo+ID4gIAkuaXJxX2RlbGl2ZXJ5X21vZGUJCT0gZGVzdF9GaXhlZCwKPiA+ ICAJLmlycV9kZXN0X21vZGUJCQk9IDAsIC8qIHBoeXNpY2FsICovCj4gPiAgCj4gPiArCS50YXJn ZXRfY3B1cwkJCT0gb25saW5lX3RhcmdldF9jcHVzLAo+ID4gIAkuZGlzYWJsZV9lc3IJCQk9IDAs Cj4gPiAgCS5kZXN0X2xvZ2ljYWwJCQk9IDAsCj4gPiAgCS5jaGVja19hcGljaWRfdXNlZAkJPSBO VUxMLAo+ID4gIAo+ID4gKwkudmVjdG9yX2FsbG9jYXRpb25fZG9tYWluCT0gZGVmYXVsdF92ZWN0 b3JfYWxsb2NhdGlvbl9kb21haW4sCj4gPiAgCS5pbml0X2FwaWNfbGRyCQkJPSBmbGF0X2luaXRf YXBpY19sZHIsCj4gPiAgCj4gPiAgCS5pb2FwaWNfcGh5c19pZF9tYXAJCT0gTlVMTCwKPiA+IEBA IC0yNjUsNyArMjY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcGljIGFwaWNfbnVtYWNoaXAx IF9fcmVmY29uc3QgPSB7Cj4gPiAgCS5nZXRfYXBpY19pZAkJCT0gbnVtYWNoaXAxX2dldF9hcGlj X2lkLAo+ID4gIAkuc2V0X2FwaWNfaWQJCQk9IG51bWFjaGlwMV9zZXRfYXBpY19pZCwKPiA+ICAK PiA+IC0JLmNhbGNfZGVzdF9hcGljaWQJCT0gYXBpY19kZWZhdWx0X2NhbGNfYXBpY2lkLAo+ID4g KwkuY3B1X21hc2tfdG9fYXBpY2lkCQk9IGRlZmF1bHRfY3B1X21hc2tfdG9fYXBpY2lkLAo+ID4g IAo+ID4gIAkuc2VuZF9JUEkJCQk9IG51bWFjaGlwX3NlbmRfSVBJX29uZSwKPiA+ICAJLnNlbmRf SVBJX21hc2sJCQk9IG51bWFjaGlwX3NlbmRfSVBJX21hc2ssCj4gPiBAQCAtMjk4LDEwICszMDAs MTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcGljIGFwaWNfbnVtYWNoaXAyIF9fcmVmY29uc3Qg PSB7Cj4gPiAgCS5pcnFfZGVsaXZlcnlfbW9kZQkJPSBkZXN0X0ZpeGVkLAo+ID4gIAkuaXJxX2Rl c3RfbW9kZQkJCT0gMCwgLyogcGh5c2ljYWwgKi8KPiA+ICAKPiA+ICsJLnRhcmdldF9jcHVzCQkJ PSBvbmxpbmVfdGFyZ2V0X2NwdXMsCj4gPiAgCS5kaXNhYmxlX2VzcgkJCT0gMCwKPiA+ICAJLmRl c3RfbG9naWNhbAkJCT0gMCwKPiA+ICAJLmNoZWNrX2FwaWNpZF91c2VkCQk9IE5VTEwsCj4gPiAg Cj4gPiArCS52ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4JPSBkZWZhdWx0X3ZlY3Rvcl9hbGxvY2F0 aW9uX2RvbWFpbiwKPiA+ICAJLmluaXRfYXBpY19sZHIJCQk9IGZsYXRfaW5pdF9hcGljX2xkciwK PiA+ICAKPiA+ICAJLmlvYXBpY19waHlzX2lkX21hcAkJPSBOVUxMLAo+ID4gQEAgLTMxNCw3ICsz MTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFwaWMgYXBpY19udW1hY2hpcDIgX19yZWZjb25z dCA9IHsKPiA+ICAJLmdldF9hcGljX2lkCQkJPSBudW1hY2hpcDJfZ2V0X2FwaWNfaWQsCj4gPiAg CS5zZXRfYXBpY19pZAkJCT0gbnVtYWNoaXAyX3NldF9hcGljX2lkLAo+ID4gIAo+ID4gLQkuY2Fs Y19kZXN0X2FwaWNpZAkJPSBhcGljX2RlZmF1bHRfY2FsY19hcGljaWQsCj4gPiArCS5jcHVfbWFz a190b19hcGljaWQJCT0gZGVmYXVsdF9jcHVfbWFza190b19hcGljaWQsCj4gPiAgCj4gPiAgCS5z ZW5kX0lQSQkJCT0gbnVtYWNoaXBfc2VuZF9JUElfb25lLAo+ID4gIAkuc2VuZF9JUElfbWFzawkJ CT0gbnVtYWNoaXBfc2VuZF9JUElfbWFzaywKPiA+IGRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJu ZWwvYXBpYy9iaWdzbXBfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2JpZ3NtcF8zMi5jCj4g PiBpbmRleCBhZmVlMzg2ZmY3MTEuLmUxMmZiY2ZjOTU3MSAxMDA2NDQKPiA+IC0tLSBhL2FyY2gv eDg2L2tlcm5lbC9hcGljL2JpZ3NtcF8zMi5jCj4gPiArKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBp Yy9iaWdzbXBfMzIuYwo+ID4gQEAgLTI3LDkgKzI3LDkgQEAgc3RhdGljIGludCBiaWdzbXBfYXBp Y19pZF9yZWdpc3RlcmVkKHZvaWQpCj4gPiAgCXJldHVybiAxOwo+ID4gIH0KPiA+ICAKPiA+IC1z dGF0aWMgYm9vbCBiaWdzbXBfY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCAqbWFwLCBp bnQgYXBpY2lkKQo+ID4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJpZ3NtcF9jaGVja19hcGljaWRf dXNlZChwaHlzaWRfbWFza190ICptYXAsIGludCBhcGljaWQpCj4gPiAgewo+ID4gLQlyZXR1cm4g ZmFsc2U7Cj4gPiArCXJldHVybiAwOwo+ID4gIH0KPiA+ICAKPiA+ICBzdGF0aWMgaW50IGJpZ3Nt cF9lYXJseV9sb2dpY2FsX2FwaWNpZChpbnQgY3B1KQo+ID4gQEAgLTE1NSwxMCArMTU1LDEyIEBA IHN0YXRpYyBzdHJ1Y3QgYXBpYyBhcGljX2JpZ3NtcCBfX3JvX2FmdGVyX2luaXQgPSB7Cj4gPiAg CS8qIHBoeXMgZGVsaXZlcnkgdG8gdGFyZ2V0IENQVTogKi8KPiA+ICAJLmlycV9kZXN0X21vZGUJ CQk9IDAsCj4gPiAgCj4gPiArCS50YXJnZXRfY3B1cwkJCT0gZGVmYXVsdF90YXJnZXRfY3B1cywK PiA+ICAJLmRpc2FibGVfZXNyCQkJPSAxLAo+ID4gIAkuZGVzdF9sb2dpY2FsCQkJPSAwLAo+ID4g IAkuY2hlY2tfYXBpY2lkX3VzZWQJCT0gYmlnc21wX2NoZWNrX2FwaWNpZF91c2VkLAo+ID4gIAo+ ID4gKwkudmVjdG9yX2FsbG9jYXRpb25fZG9tYWluCT0gZGVmYXVsdF92ZWN0b3JfYWxsb2NhdGlv bl9kb21haW4sCj4gPiAgCS5pbml0X2FwaWNfbGRyCQkJPSBiaWdzbXBfaW5pdF9hcGljX2xkciwK PiA+ICAKPiA+ICAJLmlvYXBpY19waHlzX2lkX21hcAkJPSBiaWdzbXBfaW9hcGljX3BoeXNfaWRf bWFwLAo+ID4gQEAgLTE3MSw3ICsxNzMsNyBAQCBzdGF0aWMgc3RydWN0IGFwaWMgYXBpY19iaWdz bXAgX19yb19hZnRlcl9pbml0ID0gewo+ID4gIAkuZ2V0X2FwaWNfaWQJCQk9IGJpZ3NtcF9nZXRf YXBpY19pZCwKPiA+ICAJLnNldF9hcGljX2lkCQkJPSBOVUxMLAo+ID4gIAo+ID4gLQkuY2FsY19k ZXN0X2FwaWNpZAkJPSBhcGljX2RlZmF1bHRfY2FsY19hcGljaWQsCj4gPiArCS5jcHVfbWFza190 b19hcGljaWQJCT0gZGVmYXVsdF9jcHVfbWFza190b19hcGljaWQsCj4gPiAgCj4gPiAgCS5zZW5k X0lQSQkJCT0gZGVmYXVsdF9zZW5kX0lQSV9zaW5nbGVfcGh5cywKPiA+ICAJLnNlbmRfSVBJX21h c2sJCQk9IGRlZmF1bHRfc2VuZF9JUElfbWFza19zZXF1ZW5jZV9waHlzLAo+ID4gZGlmZiAtLWdp dCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGlj L2lvX2FwaWMuYwo+ID4gaW5kZXggMjAxNTc5ZGM1MjQyLi4xOGM4YWNhNWJhZTcgMTAwNjQ0Cj4g PiAtLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKPiA+ICsrKyBiL2FyY2gveDg2 L2tlcm5lbC9hcGljL2lvX2FwaWMuYwo+ID4gQEAgLTEwMTQsNyArMTAxNCw2IEBAIHN0YXRpYyBp bnQgYWxsb2NfaXNhX2lycV9mcm9tX2RvbWFpbihzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAo+ ID4gIAkJCQkJICBpbmZvLT5pb2FwaWNfcGluKSkKPiA+ICAJCQlyZXR1cm4gLUVOT01FTTsKPiA+ ICAJfSBlbHNlIHsKPiA+IC0JCWluZm8tPmZsYWdzIHw9IFg4Nl9JUlFfQUxMT0NfTEVHQUNZOwo+ ID4gIAkJaXJxID0gX19pcnFfZG9tYWluX2FsbG9jX2lycXMoZG9tYWluLCBpcnEsIDEsIG5vZGUs IGluZm8sIHRydWUsCj4gPiAgCQkJCQkgICAgICBOVUxMKTsKPiA+ICAJCWlmIChpcnEgPj0gMCkg ewo+ID4gQEAgLTE1ODcsNDMgKzE1ODYsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBub3RpbWVyY2hl Y2soY2hhciAqcykKPiA+ICB9Cj4gPiAgX19zZXR1cCgibm9fdGltZXJfY2hlY2siLCBub3RpbWVy Y2hlY2spOwo+ID4gIAo+ID4gLXN0YXRpYyB2b2lkIF9faW5pdCBkZWxheV93aXRoX3RzYyh2b2lk KQo+ID4gLXsKPiA+IC0JdW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0LCBub3c7Cj4gPiAtCXVuc2ln bmVkIGxvbmcgZW5kID0gamlmZmllcyArIDQ7Cj4gPiAtCj4gPiAtCXN0YXJ0ID0gcmR0c2MoKTsK PiA+IC0KPiA+IC0JLyoKPiA+IC0JICogV2UgZG9uJ3Qga25vdyB0aGUgVFNDIGZyZXF1ZW5jeSB5 ZXQsIGJ1dCB3YWl0aW5nIGZvcgo+ID4gLQkgKiA0MDAwMDAwMDAwMC9IWiBUU0MgY3ljbGVzIGlz IHNhZmU6Cj4gPiAtCSAqIDQgR0h6ID09IDEwIGppZmZpZXMKPiA+IC0JICogMSBHSHogPT0gNDAg amlmZmllcwo+ID4gLQkgKi8KPiA+IC0JZG8gewo+ID4gLQkJcmVwX25vcCgpOwo+ID4gLQkJbm93 ID0gcmR0c2MoKTsKPiA+IC0JfSB3aGlsZSAoKG5vdyAtIHN0YXJ0KSA8IDQwMDAwMDAwMDAwVUwg LyBIWiAmJgo+ID4gLQkJdGltZV9iZWZvcmVfZXEoamlmZmllcywgZW5kKSk7Cj4gPiAtfQo+ID4g LQo+ID4gLXN0YXRpYyB2b2lkIF9faW5pdCBkZWxheV93aXRob3V0X3RzYyh2b2lkKQo+ID4gLXsK PiA+IC0JdW5zaWduZWQgbG9uZyBlbmQgPSBqaWZmaWVzICsgNDsKPiA+IC0JaW50IGJhbmQgPSAx Owo+ID4gLQo+ID4gLQkvKgo+ID4gLQkgKiBXZSBkb24ndCBrbm93IGFueSBmcmVxdWVuY3kgeWV0 LCBidXQgd2FpdGluZyBmb3IKPiA+IC0JICogNDA5NDAwMDAwMDAvSFogY3ljbGVzIGlzIHNhZmU6 Cj4gPiAtCSAqIDQgR0h6ID09IDEwIGppZmZpZXMKPiA+IC0JICogMSBHSHogPT0gNDAgamlmZmll cwo+ID4gLQkgKiAxIDw8IDEgKyAxIDw8IDIgKy4uLisgMSA8PCAxMSA9IDQwOTQKPiA+IC0JICov Cj4gPiAtCWRvIHsKPiA+IC0JCV9fZGVsYXkoKCgxVSA8PCBiYW5kKyspICogMTAwMDAwMDBVTCkg LyBIWik7Cj4gPiAtCX0gd2hpbGUgKGJhbmQgPCAxMiAmJiB0aW1lX2JlZm9yZV9lcShqaWZmaWVz LCBlbmQpKTsKPiA+IC19Cj4gPiAtCj4gPiAgLyoKPiA+ICAgKiBUaGVyZSBpcyBhIG5hc3R5IGJ1 ZyBpbiBzb21lIG9sZGVyIFNNUCBib2FyZHMsIHRoZWlyIG1wdGFibGUgbGllcwo+ID4gICAqIGFi b3V0IHRoZSB0aW1lciBJUlEuIFdlIGRvIHRoZSBmb2xsb3dpbmcgdG8gd29yayBhcm91bmQgdGhl IHNpdHVhdGlvbjoKPiA+IEBAIC0xNjQyLDEyICsxNjA0LDggQEAgc3RhdGljIGludCBfX2luaXQg dGltZXJfaXJxX3dvcmtzKHZvaWQpCj4gPiAgCj4gPiAgCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3Mp Owo+ID4gIAlsb2NhbF9pcnFfZW5hYmxlKCk7Cj4gPiAtCj4gPiAtCWlmIChib290X2NwdV9oYXMo WDg2X0ZFQVRVUkVfVFNDKSkKPiA+IC0JCWRlbGF5X3dpdGhfdHNjKCk7Cj4gPiAtCWVsc2UKPiA+ IC0JCWRlbGF5X3dpdGhvdXRfdHNjKCk7Cj4gPiAtCj4gPiArCS8qIExldCB0ZW4gdGlja3MgcGFz cy4uLiAqLwo+ID4gKwltZGVsYXkoKDEwICogMTAwMCkgLyBIWik7Cj4gPiAgCWxvY2FsX2lycV9y ZXN0b3JlKGZsYWdzKTsKPiA+ICAKPiA+ICAJLyoKPiA+IEBAIC0xODYzLDM2ICsxODIxLDI2IEBA IHN0YXRpYyB2b2lkIGlvYXBpY19pcl9hY2tfbGV2ZWwoc3RydWN0IGlycV9kYXRhICppcnFfZGF0 YSkKPiA+ICAJZW9pX2lvYXBpY19waW4oZGF0YS0+ZW50cnkudmVjdG9yLCBkYXRhKTsKPiA+ICB9 Cj4gPiAgCj4gPiAtc3RhdGljIHZvaWQgaW9hcGljX2NvbmZpZ3VyZV9lbnRyeShzdHJ1Y3QgaXJx X2RhdGEgKmlycWQpCj4gPiAtewo+ID4gLQlzdHJ1Y3QgbXBfY2hpcF9kYXRhICptcGQgPSBpcnFk LT5jaGlwX2RhdGE7Cj4gPiAtCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFkX2NmZyhpcnFkKTsK PiA+IC0Jc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7Cj4gPiAtCj4gPiAtCS8qCj4gPiAtCSAq IE9ubHkgdXBkYXRlIHdoZW4gdGhlIHBhcmVudCBpcyB0aGUgdmVjdG9yIGRvbWFpbiwgZG9uJ3Qg dG91Y2ggaXQKPiA+IC0JICogaWYgdGhlIHBhcmVudCBpcyB0aGUgcmVtYXBwaW5nIGRvbWFpbi4g Q2hlY2sgdGhlIGluc3RhbGxlZAo+ID4gLQkgKiBpb2FwaWMgY2hpcCB0byB2ZXJpZnkgdGhhdC4K PiA+IC0JICovCj4gPiAtCWlmIChpcnFkLT5jaGlwID09ICZpb2FwaWNfY2hpcCkgewo+ID4gLQkJ bXBkLT5lbnRyeS5kZXN0ID0gY2ZnLT5kZXN0X2FwaWNpZDsKPiA+IC0JCW1wZC0+ZW50cnkudmVj dG9yID0gY2ZnLT52ZWN0b3I7Cj4gPiAtCX0KPiA+IC0JZm9yX2VhY2hfaXJxX3BpbihlbnRyeSwg bXBkLT5pcnFfMl9waW4pCj4gPiAtCQlfX2lvYXBpY193cml0ZV9lbnRyeShlbnRyeS0+YXBpYywg ZW50cnktPnBpbiwgbXBkLT5lbnRyeSk7Cj4gPiAtfQo+ID4gLQo+ID4gIHN0YXRpYyBpbnQgaW9h cGljX3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kYXRhLAo+ID4gIAkJCSAgICAg ICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgYm9vbCBmb3JjZSkKPiA+ICB7Cj4gPiAgCXN0 cnVjdCBpcnFfZGF0YSAqcGFyZW50ID0gaXJxX2RhdGEtPnBhcmVudF9kYXRhOwo+ID4gKwlzdHJ1 Y3QgbXBfY2hpcF9kYXRhICpkYXRhID0gaXJxX2RhdGEtPmNoaXBfZGF0YTsKPiA+ICsJc3RydWN0 IGlycV9waW5fbGlzdCAqZW50cnk7Cj4gPiArCXN0cnVjdCBpcnFfY2ZnICpjZmc7Cj4gPiAgCXVu c2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiAgCWludCByZXQ7Cj4gPiAgCj4gPiAgCXJldCA9IHBhcmVu dC0+Y2hpcC0+aXJxX3NldF9hZmZpbml0eShwYXJlbnQsIG1hc2ssIGZvcmNlKTsKPiA+ICAJcmF3 X3NwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwo+ID4gLQlpZiAocmV0ID49 IDAgJiYgcmV0ICE9IElSUV9TRVRfTUFTS19PS19ET05FKQo+ID4gLQkJaW9hcGljX2NvbmZpZ3Vy ZV9lbnRyeShpcnFfZGF0YSk7Cj4gPiArCWlmIChyZXQgPj0gMCAmJiByZXQgIT0gSVJRX1NFVF9N QVNLX09LX0RPTkUpIHsKPiA+ICsJCWNmZyA9IGlycWRfY2ZnKGlycV9kYXRhKTsKPiA+ICsJCWRh dGEtPmVudHJ5LmRlc3QgPSBjZmctPmRlc3RfYXBpY2lkOwo+ID4gKwkJZGF0YS0+ZW50cnkudmVj dG9yID0gY2ZnLT52ZWN0b3I7Cj4gPiArCQlmb3JfZWFjaF9pcnFfcGluKGVudHJ5LCBkYXRhLT5p cnFfMl9waW4pCj4gPiArCQkJX19pb2FwaWNfd3JpdGVfZW50cnkoZW50cnktPmFwaWMsIGVudHJ5 LT5waW4sCj4gPiArCQkJCQkgICAgIGRhdGEtPmVudHJ5KTsKPiA+ICsJfQo+ID4gIAlyYXdfc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKPiA+ICAKPiA+ICAJcmV0 dXJuIHJldDsKPiA+IEBAIC0yNTY1LDkgKzI1MTMsNTIgQEAgaW50IGFjcGlfZ2V0X292ZXJyaWRl X2lycSh1MzIgZ3NpLCBpbnQgKnRyaWdnZXIsIGludCAqcG9sYXJpdHkpCj4gPiAgfQo+ID4gIAo+ ID4gIC8qCj4gPiAtICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRhcmdldCBhZmZpbml0eSBvZiBJ T0FQSUMgaW50ZXJydXB0cyB0byBpbmNsdWRlCj4gPiAtICogdGhlIENQVXMgd2hpY2ggY2FtZSBv bmxpbmUgZHVyaW5nIFNNUCBicmluZ3VwLgo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gY3VycmVudGx5 IGlzIG9ubHkgYSBoZWxwZXIgZm9yIHRoZSBpMzg2IHNtcCBib290IHByb2Nlc3Mgd2hlcmUKPiA+ ICsgKiB3ZSBuZWVkIHRvIHJlcHJvZ3JhbSB0aGUgaW9yZWR0YmxzIHRvIGNhdGVyIGZvciB0aGUg Y3B1cyB3aGljaCBoYXZlIGNvbWUgb25saW5lCj4gPiArICogc28gbWFzayBpbiBhbGwgY2FzZXMg c2hvdWxkIHNpbXBseSBiZSBhcGljLT50YXJnZXRfY3B1cygpCj4gPiAgICovCj4gPiArI2lmZGVm IENPTkZJR19TTVAKPiA+ICt2b2lkIF9faW5pdCBzZXR1cF9pb2FwaWNfZGVzdCh2b2lkKQo+ID4g K3sKPiA+ICsJaW50IHBpbiwgaW9hcGljLCBpcnEsIGlycV9lbnRyeTsKPiA+ICsJY29uc3Qgc3Ry dWN0IGNwdW1hc2sgKm1hc2s7Cj4gPiArCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKPiA+ICsJc3Ry dWN0IGlycV9kYXRhICppZGF0YTsKPiA+ICsJc3RydWN0IGlycV9jaGlwICpjaGlwOwo+ID4gKwo+ ID4gKwlpZiAoc2tpcF9pb2FwaWNfc2V0dXAgPT0gMSkKPiA+ICsJCXJldHVybjsKPiA+ICsKPiA+ ICsJZm9yX2VhY2hfaW9hcGljX3Bpbihpb2FwaWMsIHBpbikgewo+ID4gKwkJaXJxX2VudHJ5ID0g ZmluZF9pcnFfZW50cnkoaW9hcGljLCBwaW4sIG1wX0lOVCk7Cj4gPiArCQlpZiAoaXJxX2VudHJ5 ID09IC0xKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwo+ID4gKwkJaXJxID0gcGluXzJfaXJxKGly cV9lbnRyeSwgaW9hcGljLCBwaW4sIDApOwo+ID4gKwkJaWYgKGlycSA8IDAgfHwgIW1wX2luaXRf aXJxX2F0X2Jvb3QoaW9hcGljLCBpcnEpKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwo+ID4gKwkJ ZGVzYyA9IGlycV90b19kZXNjKGlycSk7Cj4gPiArCQlyYXdfc3Bpbl9sb2NrX2lycSgmZGVzYy0+ bG9jayk7Cj4gPiArCQlpZGF0YSA9IGlycV9kZXNjX2dldF9pcnFfZGF0YShkZXNjKTsKPiA+ICsK PiA+ICsJCS8qCj4gPiArCQkgKiBIb25vdXIgYWZmaW5pdGllcyB3aGljaCBoYXZlIGJlZW4gc2V0 IGluIGVhcmx5IGJvb3QKPiA+ICsJCSAqLwo+ID4gKwkJaWYgKCFpcnFkX2Nhbl9iYWxhbmNlKGlk YXRhKSB8fCBpcnFkX2FmZmluaXR5X3dhc19zZXQoaWRhdGEpKQo+ID4gKwkJCW1hc2sgPSBpcnFf ZGF0YV9nZXRfYWZmaW5pdHlfbWFzayhpZGF0YSk7Cj4gPiArCQllbHNlCj4gPiArCQkJbWFzayA9 IGFwaWMtPnRhcmdldF9jcHVzKCk7Cj4gPiArCj4gPiArCQljaGlwID0gaXJxX2RhdGFfZ2V0X2ly cV9jaGlwKGlkYXRhKTsKPiA+ICsJCS8qIE1pZ2h0IGJlIGxhcGljX2NoaXAgZm9yIGlycSAwICov Cj4gPiArCQlpZiAoY2hpcC0+aXJxX3NldF9hZmZpbml0eSkKPiA+ICsJCQljaGlwLT5pcnFfc2V0 X2FmZmluaXR5KGlkYXRhLCBtYXNrLCBmYWxzZSk7Cj4gPiArCQlyYXdfc3Bpbl91bmxvY2tfaXJx KCZkZXNjLT5sb2NrKTsKPiA+ICsJfQo+ID4gK30KPiA+ICsjZW5kaWYKPiA+ICsKPiA+ICAjZGVm aW5lIElPQVBJQ19SRVNPVVJDRV9OQU1FX1NJWkUgMTEKPiA+ICAKPiA+ICBzdGF0aWMgc3RydWN0 IHJlc291cmNlICppb2FwaWNfcmVzb3VyY2VzOwo+ID4gQEAgLTI5OTEsOSArMjk4MiwxMiBAQCBp bnQgbXBfaXJxZG9tYWluX2FjdGl2YXRlKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCj4gPiAg CQkJICBzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kYXRhLCBib29sIGVhcmx5KQo+ID4gIHsKPiA+ICAJ dW5zaWduZWQgbG9uZyBmbGFnczsKPiA+ICsJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7Cj4g PiArCXN0cnVjdCBtcF9jaGlwX2RhdGEgKmRhdGEgPSBpcnFfZGF0YS0+Y2hpcF9kYXRhOwo+ID4g IAo+ID4gIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Cj4gPiAt CWlvYXBpY19jb25maWd1cmVfZW50cnkoaXJxX2RhdGEpOwo+ID4gKwlmb3JfZWFjaF9pcnFfcGlu KGVudHJ5LCBkYXRhLT5pcnFfMl9waW4pCj4gPiArCQlfX2lvYXBpY193cml0ZV9lbnRyeShlbnRy eS0+YXBpYywgZW50cnktPnBpbiwgZGF0YS0+ZW50cnkpOwo+ID4gIAlyYXdfc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKPiA+ICAJcmV0dXJuIDA7Cj4gPiAgfQo+ ID4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzMyLmMgYi9hcmNoL3g4 Ni9rZXJuZWwvYXBpYy9wcm9iZV8zMi5jCj4gPiBpbmRleCBmYTIyMDE3ZGU4MDYuLjYzMjg3NjU5 YWRiNiAxMDA2NDQKPiA+IC0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzMyLmMKPiA+ ICsrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzMyLmMKPiA+IEBAIC02NiwzMSArNjYs NiBAQCBzdGF0aWMgdm9pZCBzZXR1cF9hcGljX2ZsYXRfcm91dGluZyh2b2lkKQo+ID4gICNlbmRp Zgo+ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMgaW50IGRlZmF1bHRfYXBpY19pZF9yZWdpc3RlcmVk KHZvaWQpCj4gPiAtewo+ID4gLQlyZXR1cm4gcGh5c2lkX2lzc2V0KHJlYWRfYXBpY19pZCgpLCBw aHlzX2NwdV9wcmVzZW50X21hcCk7Cj4gPiAtfQo+ID4gLQo+ID4gLS8qCj4gPiAtICogU2V0IHVw IHRoZSBsb2dpY2FsIGRlc3RpbmF0aW9uIElELiAgSW50ZWwgcmVjb21tZW5kcyB0byBzZXQgREZS LCBMRFIgYW5kCj4gPiAtICogVFBSIGJlZm9yZSBlbmFibGluZyBhbiBBUElDLiAgU2VlIGUuZy4g IkFQLTM4OCA4MjQ4OURYIFVzZXIncyBNYW51YWwiCj4gPiAtICogKEludGVsIGRvY3VtZW50IG51 bWJlciAyOTIxMTYpLgo+ID4gLSAqLwo+ID4gLXN0YXRpYyB2b2lkIGRlZmF1bHRfaW5pdF9hcGlj X2xkcih2b2lkKQo+ID4gLXsKPiA+IC0JdW5zaWduZWQgbG9uZyB2YWw7Cj4gPiAtCj4gPiAtCWFw aWNfd3JpdGUoQVBJQ19ERlIsIEFQSUNfREZSX1ZBTFVFKTsKPiA+IC0JdmFsID0gYXBpY19yZWFk KEFQSUNfTERSKSAmIH5BUElDX0xEUl9NQVNLOwo+ID4gLQl2YWwgfD0gU0VUX0FQSUNfTE9HSUNB TF9JRCgxVUwgPDwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKPiA+IC0JYXBpY193cml0ZShBUElDX0xE UiwgdmFsKTsKPiA+IC19Cj4gPiAtCj4gPiAtc3RhdGljIGludCBkZWZhdWx0X3BoeXNfcGtnX2lk KGludCBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQo+ID4gLXsKPiA+IC0JcmV0dXJuIGNwdWlk X2FwaWMgPj4gaW5kZXhfbXNiOwo+ID4gLX0KPiA+IC0KPiA+ICAvKiBzaG91bGQgYmUgY2FsbGVk IGxhc3QuICovCj4gPiAgc3RhdGljIGludCBwcm9iZV9kZWZhdWx0KHZvaWQpCj4gPiAgewo+ID4g QEAgLTEwOSwxMCArODQsMTIgQEAgc3RhdGljIHN0cnVjdCBhcGljIGFwaWNfZGVmYXVsdCBfX3Jv X2FmdGVyX2luaXQgPSB7Cj4gPiAgCS8qIGxvZ2ljYWwgZGVsaXZlcnkgYnJvYWRjYXN0IHRvIGFs bCBDUFVzOiAqLwo+ID4gIAkuaXJxX2Rlc3RfbW9kZQkJCT0gMSwKPiA+ICAKPiA+ICsJLnRhcmdl dF9jcHVzCQkJPSBkZWZhdWx0X3RhcmdldF9jcHVzLAo+ID4gIAkuZGlzYWJsZV9lc3IJCQk9IDAs Cj4gPiAgCS5kZXN0X2xvZ2ljYWwJCQk9IEFQSUNfREVTVF9MT0dJQ0FMLAo+ID4gIAkuY2hlY2tf YXBpY2lkX3VzZWQJCT0gZGVmYXVsdF9jaGVja19hcGljaWRfdXNlZCwKPiA+ICAKPiA+ICsJLnZl Y3Rvcl9hbGxvY2F0aW9uX2RvbWFpbgk9IGZsYXRfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluLAo+ ID4gIAkuaW5pdF9hcGljX2xkcgkJCT0gZGVmYXVsdF9pbml0X2FwaWNfbGRyLAo+ID4gIAo+ID4g IAkuaW9hcGljX3BoeXNfaWRfbWFwCQk9IGRlZmF1bHRfaW9hcGljX3BoeXNfaWRfbWFwLAo+ID4g QEAgLTEyNSw3ICsxMDIsNyBAQCBzdGF0aWMgc3RydWN0IGFwaWMgYXBpY19kZWZhdWx0IF9fcm9f YWZ0ZXJfaW5pdCA9IHsKPiA+ICAJLmdldF9hcGljX2lkCQkJPSBkZWZhdWx0X2dldF9hcGljX2lk LAo+ID4gIAkuc2V0X2FwaWNfaWQJCQk9IE5VTEwsCj4gPiAgCj4gPiAtCS5jYWxjX2Rlc3RfYXBp Y2lkCQk9IGFwaWNfZmxhdF9jYWxjX2FwaWNpZCwKPiA+ICsJLmNwdV9tYXNrX3RvX2FwaWNpZAkJ PSBmbGF0X2NwdV9tYXNrX3RvX2FwaWNpZCwKPiA+ICAKPiA+ICAJLnNlbmRfSVBJCQkJPSBkZWZh dWx0X3NlbmRfSVBJX3NpbmdsZSwKPiA+ICAJLnNlbmRfSVBJX21hc2sJCQk9IGRlZmF1bHRfc2Vu ZF9JUElfbWFza19sb2dpY2FsLAo+ID4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGlj L3ZlY3Rvci5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvdmVjdG9yLmMKPiA+IGluZGV4IDZhODIz YTI1ZWFmZi4uZTQyZmRkNDQ5NzJmIDEwMDY0NAo+ID4gLS0tIGEvYXJjaC94ODYva2VybmVsL2Fw aWMvdmVjdG9yLmMKPiA+ICsrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3ZlY3Rvci5jCj4gPiBA QCAtMTEsNyArMTEsNiBAQAo+ID4gICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLgo+ID4gICAqLwo+ID4gICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPiA+ IC0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KPiA+ICAjaW5jbHVkZSA8bGludXgvaW5pdC5o Pgo+ID4gICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgo+ID4gICNpbmNsdWRlIDxsaW51eC9z bGFiLmg+Cj4gPiBAQCAtMjIsMzAgKzIxLDIwIEBACj4gPiAgI2luY2x1ZGUgPGFzbS9kZXNjLmg+ Cj4gPiAgI2luY2x1ZGUgPGFzbS9pcnFfcmVtYXBwaW5nLmg+Cj4gPiAgCj4gPiAtI2luY2x1ZGUg PGFzbS90cmFjZS9pcnFfdmVjdG9ycy5oPgo+ID4gLQo+ID4gIHN0cnVjdCBhcGljX2NoaXBfZGF0 YSB7Cj4gPiAtCXN0cnVjdCBpcnFfY2ZnCQlod19pcnFfY2ZnOwo+ID4gLQl1bnNpZ25lZCBpbnQJ CXZlY3RvcjsKPiA+IC0JdW5zaWduZWQgaW50CQlwcmV2X3ZlY3RvcjsKPiA+IC0JdW5zaWduZWQg aW50CQljcHU7Cj4gPiAtCXVuc2lnbmVkIGludAkJcHJldl9jcHU7Cj4gPiAtCXVuc2lnbmVkIGlu dAkJaXJxOwo+ID4gLQlzdHJ1Y3QgaGxpc3Rfbm9kZQljbGlzdDsKPiA+IC0JdW5zaWduZWQgaW50 CQltb3ZlX2luX3Byb2dyZXNzCTogMSwKPiA+IC0JCQkJaXNfbWFuYWdlZAkJOiAxLAo+ID4gLQkJ CQljYW5fcmVzZXJ2ZQkJOiAxLAo+ID4gLQkJCQloYXNfcmVzZXJ2ZWQJCTogMTsKPiA+ICsJc3Ry dWN0IGlycV9jZmcJCWNmZzsKPiA+ICsJY3B1bWFza192YXJfdAkJZG9tYWluOwo+ID4gKwljcHVt YXNrX3Zhcl90CQlvbGRfZG9tYWluOwo+ID4gKwl1OAkJCW1vdmVfaW5fcHJvZ3Jlc3MgOiAxOwo+ ID4gIH07Cj4gPiAgCj4gPiAgc3RydWN0IGlycV9kb21haW4gKng4Nl92ZWN0b3JfZG9tYWluOwo+ ID4gIEVYUE9SVF9TWU1CT0xfR1BMKHg4Nl92ZWN0b3JfZG9tYWluKTsKPiA+ICBzdGF0aWMgREVG SU5FX1JBV19TUElOTE9DSyh2ZWN0b3JfbG9jayk7Cj4gPiAtc3RhdGljIGNwdW1hc2tfdmFyX3Qg dmVjdG9yX3NlYXJjaG1hc2s7Cj4gPiArc3RhdGljIGNwdW1hc2tfdmFyX3QgdmVjdG9yX2NwdW1h c2ssIHZlY3Rvcl9zZWFyY2htYXNrLCBzZWFyY2hlZF9jcHVtYXNrOwo+ID4gIHN0YXRpYyBzdHJ1 Y3QgaXJxX2NoaXAgbGFwaWNfY29udHJvbGxlcjsKPiA+IC1zdGF0aWMgc3RydWN0IGlycV9tYXRy aXggKnZlY3Rvcl9tYXRyaXg7Cj4gPiAtI2lmZGVmIENPTkZJR19TTVAKPiA+IC1zdGF0aWMgREVG SU5FX1BFUl9DUFUoc3RydWN0IGhsaXN0X2hlYWQsIGNsZWFudXBfbGlzdCk7Cj4gPiArI2lmZGVm CUNPTkZJR19YODZfSU9fQVBJQwo+ID4gK3N0YXRpYyBzdHJ1Y3QgYXBpY19jaGlwX2RhdGEgKmxl Z2FjeV9pcnFfZGF0YVtOUl9JUlFTX0xFR0FDWV07Cj4gPiAgI2VuZGlmCj4gPiAgCj4gPiAgdm9p ZCBsb2NrX3ZlY3Rvcl9sb2NrKHZvaWQpCj4gPiBAQCAtNjEsMzcgKzUwLDIyIEBAIHZvaWQgdW5s b2NrX3ZlY3Rvcl9sb2NrKHZvaWQpCj4gPiAgCXJhd19zcGluX3VubG9jaygmdmVjdG9yX2xvY2sp Owo+ID4gIH0KPiA+ICAKPiA+IC12b2lkIGluaXRfaXJxX2FsbG9jX2luZm8oc3RydWN0IGlycV9h bGxvY19pbmZvICppbmZvLAo+ID4gLQkJCSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKPiA+ IC17Cj4gPiAtCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKPiA+IC0JaW5mby0+bWFz ayA9IG1hc2s7Cj4gPiAtfQo+ID4gLQo+ID4gLXZvaWQgY29weV9pcnFfYWxsb2NfaW5mbyhzdHJ1 Y3QgaXJxX2FsbG9jX2luZm8gKmRzdCwgc3RydWN0IGlycV9hbGxvY19pbmZvICpzcmMpCj4gPiAr c3RhdGljIHN0cnVjdCBhcGljX2NoaXBfZGF0YSAqYXBpY19jaGlwX2RhdGEoc3RydWN0IGlycV9k YXRhICppcnFfZGF0YSkKPiA+ICB7Cj4gPiAtCWlmIChzcmMpCj4gPiAtCQkqZHN0ID0gKnNyYzsK PiA+IC0JZWxzZQo+ID4gLQkJbWVtc2V0KGRzdCwgMCwgc2l6ZW9mKCpkc3QpKTsKPiA+IC19Cj4g PiAtCj4gPiAtc3RhdGljIHN0cnVjdCBhcGljX2NoaXBfZGF0YSAqYXBpY19jaGlwX2RhdGEoc3Ry dWN0IGlycV9kYXRhICppcnFkKQo+ID4gLXsKPiA+IC0JaWYgKCFpcnFkKQo+ID4gKwlpZiAoIWly cV9kYXRhKQo+ID4gIAkJcmV0dXJuIE5VTEw7Cj4gPiAgCj4gPiAtCXdoaWxlIChpcnFkLT5wYXJl bnRfZGF0YSkKPiA+IC0JCWlycWQgPSBpcnFkLT5wYXJlbnRfZGF0YTsKPiA+ICsJd2hpbGUgKGly cV9kYXRhLT5wYXJlbnRfZGF0YSkKPiA+ICsJCWlycV9kYXRhID0gaXJxX2RhdGEtPnBhcmVudF9k YXRhOwo+ID4gIAo+ID4gLQlyZXR1cm4gaXJxZC0+Y2hpcF9kYXRhOwo+ID4gKwlyZXR1cm4gaXJx X2RhdGEtPmNoaXBfZGF0YTsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RydWN0IGlycV9jZmcgKmlycWRf Y2ZnKHN0cnVjdCBpcnFfZGF0YSAqaXJxZCkKPiA+ICtzdHJ1Y3QgaXJxX2NmZyAqaXJxZF9jZmco c3RydWN0IGlycV9kYXRhICppcnFfZGF0YSkKPiA+ICB7Cj4gPiAtCXN0cnVjdCBhcGljX2NoaXBf ZGF0YSAqYXBpY2QgPSBhcGljX2NoaXBfZGF0YShpcnFkKTsKPiA+ICsJc3RydWN0IGFwaWNfY2hp cF9kYXRhICpkYXRhID0gYXBpY19jaGlwX2RhdGEoaXJxX2RhdGEpOwo+ID4gIAo+ID4gLQlyZXR1 cm4gYXBpY2QgPyAmYXBpY2QtPmh3X2lycV9jZmcgOiBOVUxMOwo+ID4gKwlyZXR1cm4gZGF0YSA/ ICZkYXRhLT5jZmcgOiBOVUxMOwo+ID4gIH0KPiA+ICBFWFBPUlRfU1lNQk9MX0dQTChpcnFkX2Nm Zyk7Cj4gPiAgCj4gPiBAQCAtMTAyLDM5NSArNzYsMjcwIEBAIHN0cnVjdCBpcnFfY2ZnICppcnFf Y2ZnKHVuc2lnbmVkIGludCBpcnEpCj4gPiAgCj4gPiAgc3RhdGljIHN0cnVjdCBhcGljX2NoaXBf ZGF0YSAqYWxsb2NfYXBpY19jaGlwX2RhdGEoaW50IG5vZGUpCj4gPiAgewo+ID4gLQlzdHJ1Y3Qg YXBpY19jaGlwX2RhdGEgKmFwaWNkOwo+ID4gLQo+ID4gLQlhcGljZCA9IGt6YWxsb2Nfbm9kZShz aXplb2YoKmFwaWNkKSwgR0ZQX0tFUk5FTCwgbm9kZSk7Cj4gPiAtCWlmIChhcGljZCkKPiA+IC0J CUlOSVRfSExJU1RfTk9ERSgmYXBpY2QtPmNsaXN0KTsKPiA+IC0JcmV0dXJuIGFwaWNkOwo+ID4g LX0KPiA+IC0KPiA+IC1zdGF0aWMgdm9pZCBmcmVlX2FwaWNfY2hpcF9kYXRhKHN0cnVjdCBhcGlj X2NoaXBfZGF0YSAqYXBpY2QpCj4gPiAtewo+ID4gLQlrZnJlZShhcGljZCk7Cj4gPiAtfQo+ID4g LQo+ID4gLXN0YXRpYyB2b2lkIGFwaWNfdXBkYXRlX2lycV9jZmcoc3RydWN0IGlycV9kYXRhICpp cnFkLCB1bnNpZ25lZCBpbnQgdmVjdG9yLAo+ID4gLQkJCQl1bnNpZ25lZCBpbnQgY3B1KQo+ID4g LXsKPiA+IC0Jc3RydWN0IGFwaWNfY2hpcF9kYXRhICphcGljZCA9IGFwaWNfY2hpcF9kYXRhKGly cWQpOwo+ID4gKwlzdHJ1Y3QgYXBpY19jaGlwX2RhdGEgKmRhdGE7Cj4gPiAgCj4gPiAtCWxvY2tk ZXBfYXNzZXJ0X2hlbGQoJnZlY3Rvcl9sb2NrKTsKPiA+IC0KPiA+IC0JYXBpY2QtPmh3X2lycV9j ZmcudmVjdG9yID0gdmVjdG9yOwo+ID4gLQlhcGljZC0+aHdfaXJxX2NmZy5kZXN0X2FwaWNpZCA9 IGFwaWMtPmNhbGNfZGVzdF9hcGljaWQoY3B1KTsKPiA+IC0JaXJxX2RhdGFfdXBkYXRlX2VmZmVj dGl2ZV9hZmZpbml0eShpcnFkLCBjcHVtYXNrX29mKGNwdSkpOwo+ID4gLQl0cmFjZV92ZWN0b3Jf Y29uZmlnKGlycWQtPmlycSwgdmVjdG9yLCBjcHUsCj4gPiAtCQkJICAgIGFwaWNkLT5od19pcnFf Y2ZnLmRlc3RfYXBpY2lkKTsKPiA+IC19Cj4gPiAtCj4gPiAtc3RhdGljIHZvaWQgYXBpY191cGRh dGVfdmVjdG9yKHN0cnVjdCBpcnFfZGF0YSAqaXJxZCwgdW5zaWduZWQgaW50IG5ld3ZlYywKPiA+ IC0JCQkgICAgICAgdW5zaWduZWQgaW50IG5ld2NwdSkKPiA+IC17Cj4gPiAtCXN0cnVjdCBhcGlj X2NoaXBfZGF0YSAqYXBpY2QgPSBhcGljX2NoaXBfZGF0YShpcnFkKTsKPiA+IC0Jc3RydWN0IGly cV9kZXNjICpkZXNjID0gaXJxX2RhdGFfdG9fZGVzYyhpcnFkKTsKPiA+IC0KPiA+IC0JbG9ja2Rl cF9hc3NlcnRfaGVsZCgmdmVjdG9yX2xvY2spOwo+ID4gLQo+ID4gLQl0cmFjZV92ZWN0b3JfdXBk YXRlKGlycWQtPmlycSwgbmV3dmVjLCBuZXdjcHUsIGFwaWNkLT52ZWN0b3IsCj4gPiAtCQkJICAg IGFwaWNkLT5jcHUpOwo+ID4gLQo+ID4gLQkvKiBTZXR1cCB0aGUgdmVjdG9yIG1vdmUsIGlmIHJl cXVpcmVkICAqLwo+ID4gLQlpZiAoYXBpY2QtPnZlY3RvciAmJiBjcHVfb25saW5lKGFwaWNkLT5j cHUpKSB7Cj4gPiAtCQlhcGljZC0+bW92ZV9pbl9wcm9ncmVzcyA9IHRydWU7Cj4gPiAtCQlhcGlj ZC0+cHJldl92ZWN0b3IgPSBhcGljZC0+dmVjdG9yOwo+ID4gLQkJYXBpY2QtPnByZXZfY3B1ID0g YXBpY2QtPmNwdTsKPiA+IC0JfSBlbHNlIHsKPiA+IC0JCWFwaWNkLT5wcmV2X3ZlY3RvciA9IDA7 Cj4gPiArCWRhdGEgPSBremFsbG9jX25vZGUoc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCwgbm9k ZSk7Cj4gPiArCWlmICghZGF0YSkKPiA+ICsJCXJldHVybiBOVUxMOwo+ID4gKwlpZiAoIXphbGxv Y19jcHVtYXNrX3Zhcl9ub2RlKCZkYXRhLT5kb21haW4sIEdGUF9LRVJORUwsIG5vZGUpKQo+ID4g KwkJZ290byBvdXRfZGF0YTsKPiA+ICsJaWYgKCF6YWxsb2NfY3B1bWFza192YXJfbm9kZSgmZGF0 YS0+b2xkX2RvbWFpbiwgR0ZQX0tFUk5FTCwgbm9kZSkpCj4gPiArCQlnb3RvIG91dF9kb21haW47 Cj4gPiArCXJldHVybiBkYXRhOwo+ID4gK291dF9kb21haW46Cj4gPiArCWZyZWVfY3B1bWFza192 YXIoZGF0YS0+ZG9tYWluKTsKPiA+ICtvdXRfZGF0YToKPiA+ICsJa2ZyZWUoZGF0YSk7Cj4gPiAr CXJldHVybiBOVUxMOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBmcmVlX2FwaWNfY2hp cF9kYXRhKHN0cnVjdCBhcGljX2NoaXBfZGF0YSAqZGF0YSkKPiA+ICt7Cj4gPiArCWlmIChkYXRh KSB7Cj4gPiArCQlmcmVlX2NwdW1hc2tfdmFyKGRhdGEtPmRvbWFpbik7Cj4gPiArCQlmcmVlX2Nw dW1hc2tfdmFyKGRhdGEtPm9sZF9kb21haW4pOwo+ID4gKwkJa2ZyZWUoZGF0YSk7Cj4gPiAgCX0K PiA+IC0KPiA+IC0JYXBpY2QtPnZlY3RvciA9IG5ld3ZlYzsKPiA+IC0JYXBpY2QtPmNwdSA9IG5l d2NwdTsKPiA+IC0JQlVHX09OKCFJU19FUlJfT1JfTlVMTChwZXJfY3B1KHZlY3Rvcl9pcnEsIG5l d2NwdSlbbmV3dmVjXSkpOwo+ID4gLQlwZXJfY3B1KHZlY3Rvcl9pcnEsIG5ld2NwdSlbbmV3dmVj XSA9IGRlc2M7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyB2b2lkIHZlY3Rvcl9hc3NpZ25fbWFu YWdlZF9zaHV0ZG93bihzdHJ1Y3QgaXJxX2RhdGEgKmlycWQpCj4gPiArc3RhdGljIGludCBfX2Fz c2lnbl9pcnFfdmVjdG9yKGludCBpcnEsIHN0cnVjdCBhcGljX2NoaXBfZGF0YSAqZCwKPiA+ICsJ CQkgICAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssCj4gPiArCQkJICAgICAgIHN0cnVj dCBpcnFfZGF0YSAqaXJxZGF0YSkKPiA+ICB7Cj4gPiAtCXVuc2lnbmVkIGludCBjcHUgPSBjcHVt YXNrX2ZpcnN0KGNwdV9vbmxpbmVfbWFzayk7Cj4gPiAtCj4gPiAtCWFwaWNfdXBkYXRlX2lycV9j ZmcoaXJxZCwgTUFOQUdFRF9JUlFfU0hVVERPV05fVkVDVE9SLCBjcHUpOwo+ID4gLX0KPiA+ICsJ LyoKPiA+ICsJICogTk9URSEgVGhlIGxvY2FsIEFQSUMgaXNuJ3QgdmVyeSBnb29kIGF0IGhhbmRs aW5nCj4gPiArCSAqIG11bHRpcGxlIGludGVycnVwdHMgYXQgdGhlIHNhbWUgaW50ZXJydXB0IGxl dmVsLgo+ID4gKwkgKiBBcyB0aGUgaW50ZXJydXB0IGxldmVsIGlzIGRldGVybWluZWQgYnkgdGFr aW5nIHRoZQo+ID4gKwkgKiB2ZWN0b3IgbnVtYmVyIGFuZCBzaGlmdGluZyB0aGF0IHJpZ2h0IGJ5 IDQsIHdlCj4gPiArCSAqIHdhbnQgdG8gc3ByZWFkIHRoZXNlIG91dCBhIGJpdCBzbyB0aGF0IHRo ZXkgZG9uJ3QKPiA+ICsJICogYWxsIGZhbGwgaW4gdGhlIHNhbWUgaW50ZXJydXB0IGxldmVsLgo+ ID4gKwkgKgo+ID4gKwkgKiBBbHNvLCB3ZSd2ZSBnb3QgdG8gYmUgY2FyZWZ1bCBub3QgdG8gdHJh c2ggZ2F0ZQo+ID4gKwkgKiAweDgwLCBiZWNhdXNlIGludCAweDgwIGlzIGhtLCBraW5kIG9mIGlt cG9ydGFudGlzaC4gOykKPiA+ICsJICovCj4gPiArCXN0YXRpYyBpbnQgY3VycmVudF92ZWN0b3Ig PSBGSVJTVF9FWFRFUk5BTF9WRUNUT1IgKyBWRUNUT1JfT0ZGU0VUX1NUQVJUOwo+ID4gKwlzdGF0 aWMgaW50IGN1cnJlbnRfb2Zmc2V0ID0gVkVDVE9SX09GRlNFVF9TVEFSVCAlIDE2Owo+ID4gKwlp bnQgY3B1LCB2ZWN0b3I7Cj4gPiAgCj4gPiAtc3RhdGljIGludCByZXNlcnZlX21hbmFnZWRfdmVj dG9yKHN0cnVjdCBpcnFfZGF0YSAqaXJxZCkKPiA+IC17Cj4gPiAtCWNvbnN0IHN0cnVjdCBjcHVt YXNrICphZmZtc2sgPSBpcnFfZGF0YV9nZXRfYWZmaW5pdHlfbWFzayhpcnFkKTsKPiA+IC0Jc3Ry dWN0IGFwaWNfY2hpcF9kYXRhICphcGljZCA9IGFwaWNfY2hpcF9kYXRhKGlycWQpOwo+ID4gLQl1 bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4gLQlpbnQgcmV0Owo+ID4gKwkvKgo+ID4gKwkgKiBJZiB0 aGVyZSBpcyBzdGlsbCBhIG1vdmUgaW4gcHJvZ3Jlc3Mgb3IgdGhlIHByZXZpb3VzIG1vdmUgaGFz IG5vdAo+ID4gKwkgKiBiZWVuIGNsZWFuZWQgdXAgY29tcGxldGVseSwgdGVsbCB0aGUgY2FsbGVy IHRvIGNvbWUgYmFjayBsYXRlci4KPiA+ICsJICovCj4gPiArCWlmIChkLT5tb3ZlX2luX3Byb2dy ZXNzIHx8Cj4gPiArCSAgICBjcHVtYXNrX2ludGVyc2VjdHMoZC0+b2xkX2RvbWFpbiwgY3B1X29u bGluZV9tYXNrKSkKPiA+ICsJCXJldHVybiAtRUJVU1k7Cj4gPiAgCj4gPiAtCXJhd19zcGluX2xv Y2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKPiA+IC0JYXBpY2QtPmlzX21hbmFnZWQg PSB0cnVlOwo+ID4gLQlyZXQgPSBpcnFfbWF0cml4X3Jlc2VydmVfbWFuYWdlZCh2ZWN0b3JfbWF0 cml4LCBhZmZtc2spOwo+ID4gLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xv Y2ssIGZsYWdzKTsKPiA+IC0JdHJhY2VfdmVjdG9yX3Jlc2VydmVfbWFuYWdlZChpcnFkLT5pcnEs IHJldCk7Cj4gPiAtCXJldHVybiByZXQ7Cj4gPiAtfQo+ID4gKwkvKiBPbmx5IHRyeSBhbmQgYWxs b2NhdGUgaXJxcyBvbiBjcHVzIHRoYXQgYXJlIHByZXNlbnQgKi8KPiA+ICsJY3B1bWFza19jbGVh cihkLT5vbGRfZG9tYWluKTsKPiA+ICsJY3B1bWFza19jbGVhcihzZWFyY2hlZF9jcHVtYXNrKTsK PiA+ICsJY3B1ID0gY3B1bWFza19maXJzdF9hbmQobWFzaywgY3B1X29ubGluZV9tYXNrKTsKPiA+ ICsJd2hpbGUgKGNwdSA8IG5yX2NwdV9pZHMpIHsKPiA+ICsJCWludCBuZXdfY3B1LCBvZmZzZXQ7 Cj4gPiAgCj4gPiAtc3RhdGljIHZvaWQgcmVzZXJ2ZV9pcnFfdmVjdG9yX2xvY2tlZChzdHJ1Y3Qg aXJxX2RhdGEgKmlycWQpCj4gPiAtewo+ID4gLQlzdHJ1Y3QgYXBpY19jaGlwX2RhdGEgKmFwaWNk ID0gYXBpY19jaGlwX2RhdGEoaXJxZCk7Cj4gPiArCQkvKiBHZXQgdGhlIHBvc3NpYmxlIHRhcmdl dCBjcHVzIGZvciBAbWFzay9AY3B1IGZyb20gdGhlIGFwaWMgKi8KPiA+ICsJCWFwaWMtPnZlY3Rv cl9hbGxvY2F0aW9uX2RvbWFpbihjcHUsIHZlY3Rvcl9jcHVtYXNrLCBtYXNrKTsKPiA+ICAKPiA+ IC0JaXJxX21hdHJpeF9yZXNlcnZlKHZlY3Rvcl9tYXRyaXgpOwo+ID4gLQlhcGljZC0+Y2FuX3Jl c2VydmUgPSB0cnVlOwo+ID4gLQlhcGljZC0+aGFzX3Jlc2VydmVkID0gdHJ1ZTsKPiA+IC0JdHJh Y2VfdmVjdG9yX3Jlc2VydmUoaXJxZC0+aXJxLCAwKTsKPiA+IC0JdmVjdG9yX2Fzc2lnbl9tYW5h Z2VkX3NodXRkb3duKGlycWQpOwo+ID4gLX0KPiA+ICsJCS8qCj4gPiArCQkgKiBDbGVhciB0aGUg b2ZmbGluZSBjcHVzIGZyb20gQHZlY3Rvcl9jcHVtYXNrIGZvciBzZWFyY2hpbmcKPiA+ICsJCSAq IGFuZCB2ZXJpZnkgd2hldGhlciB0aGUgcmVzdWx0IG92ZXJsYXBzIHdpdGggQG1hc2suIElmIHRy dWUsCj4gPiArCQkgKiB0aGVuIHRoZSBjYWxsIHRvIGFwaWMtPmNwdV9tYXNrX3RvX2FwaWNpZCgp IHdpbGwKPiA+ICsJCSAqIHN1Y2NlZWQgYXMgd2VsbC4gSWYgbm90LCBubyBwb2ludCBpbiB0cnlp bmcgdG8gZmluZCBhCj4gPiArCQkgKiB2ZWN0b3IgaW4gdGhpcyBtYXNrLgo+ID4gKwkJICovCj4g PiArCQljcHVtYXNrX2FuZCh2ZWN0b3Jfc2VhcmNobWFzaywgdmVjdG9yX2NwdW1hc2ssIGNwdV9v bmxpbmVfbWFzayk7Cj4gPiArCQlpZiAoIWNwdW1hc2tfaW50ZXJzZWN0cyh2ZWN0b3Jfc2VhcmNo bWFzaywgbWFzaykpCj4gPiArCQkJZ290byBuZXh0X2NwdTsKPiA+ICsKPiA+ICsJCWlmIChjcHVt YXNrX3N1YnNldCh2ZWN0b3JfY3B1bWFzaywgZC0+ZG9tYWluKSkgewo+ID4gKwkJCWlmIChjcHVt YXNrX2VxdWFsKHZlY3Rvcl9jcHVtYXNrLCBkLT5kb21haW4pKQo+ID4gKwkJCQlnb3RvIHN1Y2Nl c3M7Cj4gPiArCQkJLyoKPiA+ICsJCQkgKiBNYXJrIHRoZSBjcHVzIHdoaWNoIGFyZSBub3QgbG9u Z2VyIGluIHRoZSBtYXNrIGZvcgo+ID4gKwkJCSAqIGNsZWFudXAuCj4gPiArCQkJICovCj4gPiAr CQkJY3B1bWFza19hbmRub3QoZC0+b2xkX2RvbWFpbiwgZC0+ZG9tYWluLCB2ZWN0b3JfY3B1bWFz ayk7Cj4gPiArCQkJdmVjdG9yID0gZC0+Y2ZnLnZlY3RvcjsKPiA+ICsJCQlnb3RvIHVwZGF0ZTsK PiA+ICsJCX0KPiA+ICAKPiA+IC1zdGF0aWMgaW50IHJlc2VydmVfaXJxX3ZlY3RvcihzdHJ1Y3Qg aXJxX2RhdGEgKmlycWQpCj4gPiAtewo+ID4gLQl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4gKwkJ dmVjdG9yID0gY3VycmVudF92ZWN0b3I7Cj4gPiArCQlvZmZzZXQgPSBjdXJyZW50X29mZnNldDsK PiA+ICtuZXh0Ogo+ID4gKwkJdmVjdG9yICs9IDE2Owo+ID4gKwkJaWYgKHZlY3RvciA+PSBGSVJT VF9TWVNURU1fVkVDVE9SKSB7Cj4gPiArCQkJb2Zmc2V0ID0gKG9mZnNldCArIDEpICUgMTY7Cj4g PiArCQkJdmVjdG9yID0gRklSU1RfRVhURVJOQUxfVkVDVE9SICsgb2Zmc2V0Owo+ID4gKwkJfQo+ ID4gIAo+ID4gLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Cj4g PiAtCXJlc2VydmVfaXJxX3ZlY3Rvcl9sb2NrZWQoaXJxZCk7Cj4gPiAtCXJhd19zcGluX3VubG9j a19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwo+ID4gLQlyZXR1cm4gMDsKPiA+IC19 Cj4gPiArCQkvKiBJZiB0aGUgc2VhcmNoIHdyYXBwZWQgYXJvdW5kLCB0cnkgdGhlIG5leHQgY3B1 ICovCj4gPiArCQlpZiAodW5saWtlbHkoY3VycmVudF92ZWN0b3IgPT0gdmVjdG9yKSkKPiA+ICsJ CQlnb3RvIG5leHRfY3B1Owo+ID4gIAo+ID4gLXN0YXRpYyBpbnQgYWxsb2NhdGVfdmVjdG9yKHN0 cnVjdCBpcnFfZGF0YSAqaXJxZCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmRlc3QpCj4gPiAtewo+ ID4gLQlzdHJ1Y3QgYXBpY19jaGlwX2RhdGEgKmFwaWNkID0gYXBpY19jaGlwX2RhdGEoaXJxZCk7 Cj4gPiAtCWJvb2wgcmVzdmQgPSBhcGljZC0+aGFzX3Jlc2VydmVkOwo+ID4gLQl1bnNpZ25lZCBp bnQgY3B1ID0gYXBpY2QtPmNwdTsKPiA+IC0JaW50IHZlY3RvciA9IGFwaWNkLT52ZWN0b3I7Cj4g PiArCQlpZiAodGVzdF9iaXQodmVjdG9yLCB1c2VkX3ZlY3RvcnMpKQo+ID4gKwkJCWdvdG8gbmV4 dDsKPiA+ICAKPiA+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmdmVjdG9yX2xvY2spOwo+ID4gKwkJ Zm9yX2VhY2hfY3B1KG5ld19jcHUsIHZlY3Rvcl9zZWFyY2htYXNrKSB7Cj4gPiArCQkJaWYgKCFJ U19FUlJfT1JfTlVMTChwZXJfY3B1KHZlY3Rvcl9pcnEsIG5ld19jcHUpW3ZlY3Rvcl0pKQo+ID4g KwkJCQlnb3RvIG5leHQ7Cj4gPiArCQl9Cj4gPiArCQkvKiBGb3VuZCBvbmUhICovCj4gPiArCQlj dXJyZW50X3ZlY3RvciA9IHZlY3RvcjsKPiA+ICsJCWN1cnJlbnRfb2Zmc2V0ID0gb2Zmc2V0Owo+ ID4gKwkJLyogU2NoZWR1bGUgdGhlIG9sZCB2ZWN0b3IgZm9yIGNsZWFudXAgb24gYWxsIGNwdXMg Ki8KPiA+ICsJCWlmIChkLT5jZmcudmVjdG9yKQo+ID4gKwkJCWNwdW1hc2tfY29weShkLT5vbGRf ZG9tYWluLCBkLT5kb21haW4pOwo+ID4gKwkJZm9yX2VhY2hfY3B1KG5ld19jcHUsIHZlY3Rvcl9z ZWFyY2htYXNrKQo+ID4gKwkJCXBlcl9jcHUodmVjdG9yX2lycSwgbmV3X2NwdSlbdmVjdG9yXSA9 IGlycV90b19kZXNjKGlycSk7Cj4gPiArCQlnb3RvIHVwZGF0ZTsKPiA+ICsKPiA+ICtuZXh0X2Nw dToKPiA+ICsJCS8qCj4gPiArCQkgKiBXZSBleGNsdWRlIHRoZSBjdXJyZW50IEB2ZWN0b3JfY3B1 bWFzayBmcm9tIHRoZSByZXF1ZXN0ZWQKPiA+ICsJCSAqIEBtYXNrIGFuZCB0cnkgYWdhaW4gd2l0 aCB0aGUgbmV4dCBvbmxpbmUgY3B1IGluIHRoZQo+ID4gKwkJICogcmVzdWx0LiBXZSBjYW5ub3Qg bW9kaWZ5IEBtYXNrLCBzbyB3ZSB1c2UgQHZlY3Rvcl9jcHVtYXNrCj4gPiArCQkgKiBhcyBhIHRl bXBvcmFyeSBidWZmZXIgaGVyZSBhcyBpdCB3aWxsIGJlIHJlYXNzaWduZWQgd2hlbgo+ID4gKwkJ ICogY2FsbGluZyBhcGljLT52ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oKSBhYm92ZS4KPiA+ICsJ CSAqLwo+ID4gKwkJY3B1bWFza19vcihzZWFyY2hlZF9jcHVtYXNrLCBzZWFyY2hlZF9jcHVtYXNr LCB2ZWN0b3JfY3B1bWFzayk7Cj4gPiArCQljcHVtYXNrX2FuZG5vdCh2ZWN0b3JfY3B1bWFzaywg bWFzaywgc2VhcmNoZWRfY3B1bWFzayk7Cj4gPiArCQljcHUgPSBjcHVtYXNrX2ZpcnN0X2FuZCh2 ZWN0b3JfY3B1bWFzaywgY3B1X29ubGluZV9tYXNrKTsKPiA+ICsJCWNvbnRpbnVlOwo+ID4gKwl9 Cj4gPiArCXJldHVybiAtRU5PU1BDOwo+ID4gIAo+ID4gK3VwZGF0ZToKPiA+ICAJLyoKPiA+IC0J ICogSWYgdGhlIGN1cnJlbnQgdGFyZ2V0IENQVSBpcyBvbmxpbmUgYW5kIGluIHRoZSBuZXcgcmVx dWVzdGVkCj4gPiAtCSAqIGFmZmluaXR5IG1hc2ssIHRoZXJlIGlzIG5vIHBvaW50IGluIG1vdmlu ZyB0aGUgaW50ZXJydXB0IGZyb20KPiA+IC0JICogb25lIENQVSB0byBhbm90aGVyLgo+ID4gKwkg KiBFeGNsdWRlIG9mZmxpbmUgY3B1cyBmcm9tIHRoZSBjbGVhbnVwIG1hc2sgYW5kIHNldCB0aGUK PiA+ICsJICogbW92ZV9pbl9wcm9ncmVzcyBmbGFnIHdoZW4gdGhlIHJlc3VsdCBpcyBub3QgZW1w dHkuCj4gPiAgCSAqLwo+ID4gLQlpZiAodmVjdG9yICYmIGNwdV9vbmxpbmUoY3B1KSAmJiBjcHVt YXNrX3Rlc3RfY3B1KGNwdSwgZGVzdCkpCj4gPiAtCQlyZXR1cm4gMDsKPiA+IC0KPiA+IC0JdmVj dG9yID0gaXJxX21hdHJpeF9hbGxvYyh2ZWN0b3JfbWF0cml4LCBkZXN0LCByZXN2ZCwgJmNwdSk7 Cj4gPiAtCWlmICh2ZWN0b3IgPiAwKQo+ID4gLQkJYXBpY191cGRhdGVfdmVjdG9yKGlycWQsIHZl Y3RvciwgY3B1KTsKPiA+IC0JdHJhY2VfdmVjdG9yX2FsbG9jKGlycWQtPmlycSwgdmVjdG9yLCBy ZXN2ZCwgdmVjdG9yKTsKPiA+IC0JcmV0dXJuIHZlY3RvcjsKPiA+IC19Cj4gPiAtCj4gPiAtc3Rh dGljIGludCBhc3NpZ25fdmVjdG9yX2xvY2tlZChzdHJ1Y3QgaXJxX2RhdGEgKmlycWQsCj4gPiAt CQkJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQo+ID4gLXsKPiA+IC0Jc3RydWN0IGFwaWNf Y2hpcF9kYXRhICphcGljZCA9IGFwaWNfY2hpcF9kYXRhKGlycWQpOwo+ID4gLQlpbnQgdmVjdG9y ID0gYWxsb2NhdGVfdmVjdG9yKGlycWQsIGRlc3QpOwo+ID4gLQo+ID4gLQlpZiAodmVjdG9yIDwg MCkKPiA+IC0JCXJldHVybiB2ZWN0b3I7Cj4gPiAtCj4gPiAtCWFwaWNfdXBkYXRlX2lycV9jZmco aXJxZCwgYXBpY2QtPnZlY3RvciwgYXBpY2QtPmNwdSk7Cj4gPiArCWNwdW1hc2tfYW5kKGQtPm9s ZF9kb21haW4sIGQtPm9sZF9kb21haW4sIGNwdV9vbmxpbmVfbWFzayk7Cj4gPiArCWQtPm1vdmVf aW5fcHJvZ3Jlc3MgPSAhY3B1bWFza19lbXB0eShkLT5vbGRfZG9tYWluKTsKPiA+ICsJZC0+Y2Zn Lm9sZF92ZWN0b3IgPSBkLT5tb3ZlX2luX3Byb2dyZXNzID8gZC0+Y2ZnLnZlY3RvciA6IDA7Cj4g PiArCWQtPmNmZy52ZWN0b3IgPSB2ZWN0b3I7Cj4gPiArCWNwdW1hc2tfY29weShkLT5kb21haW4s IHZlY3Rvcl9jcHVtYXNrKTsKPiA+ICtzdWNjZXNzOgo+ID4gKwkvKgo+ID4gKwkgKiBDYWNoZSBk ZXN0aW5hdGlvbiBBUElDIElEcyBpbnRvIGNmZy0+ZGVzdF9hcGljaWQuIFRoaXMgY2Fubm90IGZh aWwKPiA+ICsJICogYXMgd2UgYWxyZWFkeSBlc3RhYmxpc2hlZCwgdGhhdCBtYXNrICYgZC0+ZG9t YWluICYgY3B1X29ubGluZV9tYXNrCj4gPiArCSAqIGlzIG5vdCBlbXB0eS4KPiA+ICsJICoKPiA+ ICsJICogdmVjdG9yX3NlYXJjaG1hc2sgaXMgYSBzdWJzZXQgb2YgZC0+ZG9tYWluIGFuZCBoYXMg dGhlIG9mZmxpbmUKPiA+ICsJICogY3B1cyBtYXNrZWQgb3V0Lgo+ID4gKwkgKi8KPiA+ICsJY3B1 bWFza19hbmQodmVjdG9yX3NlYXJjaG1hc2ssIHZlY3Rvcl9zZWFyY2htYXNrLCBtYXNrKTsKPiA+ ICsJQlVHX09OKGFwaWMtPmNwdV9tYXNrX3RvX2FwaWNpZCh2ZWN0b3Jfc2VhcmNobWFzaywgaXJx ZGF0YSwKPiA+ICsJCQkJCSZkLT5jZmcuZGVzdF9hcGljaWQpKTsKPiA+ICAJcmV0dXJuIDA7Cj4g PiAgfQo+ID4gIAo+ID4gLXN0YXRpYyBpbnQgYXNzaWduX2lycV92ZWN0b3Ioc3RydWN0IGlycV9k YXRhICppcnFkLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqZGVzdCkKPiA+ICtzdGF0aWMgaW50IGFz c2lnbl9pcnFfdmVjdG9yKGludCBpcnEsIHN0cnVjdCBhcGljX2NoaXBfZGF0YSAqZGF0YSwKPiA+ ICsJCQkgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAo+ID4gKwkJCSAgICAgc3RydWN0 IGlycV9kYXRhICppcnFkYXRhKQo+ID4gIHsKPiA+ICsJaW50IGVycjsKPiA+ICAJdW5zaWduZWQg bG9uZyBmbGFnczsKPiA+IC0JaW50IHJldDsKPiA+ICAKPiA+ICAJcmF3X3NwaW5fbG9ja19pcnFz YXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwo+ID4gLQljcHVtYXNrX2FuZCh2ZWN0b3Jfc2VhcmNo bWFzaywgZGVzdCwgY3B1X29ubGluZV9tYXNrKTsKPiA+IC0JcmV0ID0gYXNzaWduX3ZlY3Rvcl9s b2NrZWQoaXJxZCwgdmVjdG9yX3NlYXJjaG1hc2spOwo+ID4gKwllcnIgPSBfX2Fzc2lnbl9pcnFf dmVjdG9yKGlycSwgZGF0YSwgbWFzaywgaXJxZGF0YSk7Cj4gPiAgCXJhd19zcGluX3VubG9ja19p cnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwo+ID4gLQlyZXR1cm4gcmV0Owo+ID4gLX0K PiA+IC0KPiA+IC1zdGF0aWMgaW50IGFzc2lnbl9pcnFfdmVjdG9yX2FueV9sb2NrZWQoc3RydWN0 IGlycV9kYXRhICppcnFkKQo+ID4gLXsKPiA+IC0JLyogR2V0IHRoZSBhZmZpbml0eSBtYXNrIC0g ZWl0aGVyIGlycV9kZWZhdWx0X2FmZmluaXR5IG9yICh1c2VyKSBzZXQgKi8KPiA+IC0JY29uc3Qg c3RydWN0IGNwdW1hc2sgKmFmZm1zayA9IGlycV9kYXRhX2dldF9hZmZpbml0eV9tYXNrKGlycWQp Owo+ID4gLQlpbnQgbm9kZSA9IGlycV9kYXRhX2dldF9ub2RlKGlycWQpOwo+ID4gLQo+ID4gLQlp ZiAobm9kZSA9PSBOVU1BX05PX05PREUpCj4gPiAtCQlnb3RvIGFsbDsKPiA+IC0JLyogVHJ5IHRo ZSBpbnRlcnNlY3Rpb24gb2YgQGFmZm1zayBhbmQgbm9kZSBtYXNrICovCj4gPiAtCWNwdW1hc2tf YW5kKHZlY3Rvcl9zZWFyY2htYXNrLCBjcHVtYXNrX29mX25vZGUobm9kZSksIGFmZm1zayk7Cj4g PiAtCWlmICghYXNzaWduX3ZlY3Rvcl9sb2NrZWQoaXJxZCwgdmVjdG9yX3NlYXJjaG1hc2spKQo+ ID4gLQkJcmV0dXJuIDA7Cj4gPiAtCS8qIFRyeSB0aGUgbm9kZSBtYXNrICovCj4gPiAtCWlmICgh YXNzaWduX3ZlY3Rvcl9sb2NrZWQoaXJxZCwgY3B1bWFza19vZl9ub2RlKG5vZGUpKSkKPiA+IC0J CXJldHVybiAwOwo+ID4gLWFsbDoKPiA+IC0JLyogVHJ5IHRoZSBmdWxsIGFmZmluaXR5IG1hc2sg Ki8KPiA+IC0JY3B1bWFza19hbmQodmVjdG9yX3NlYXJjaG1hc2ssIGFmZm1zaywgY3B1X29ubGlu ZV9tYXNrKTsKPiA+IC0JaWYgKCFhc3NpZ25fdmVjdG9yX2xvY2tlZChpcnFkLCB2ZWN0b3Jfc2Vh cmNobWFzaykpCj4gPiAtCQlyZXR1cm4gMDsKPiA+IC0JLyogVHJ5IHRoZSBmdWxsIG9ubGluZSBt YXNrICovCj4gPiAtCXJldHVybiBhc3NpZ25fdmVjdG9yX2xvY2tlZChpcnFkLCBjcHVfb25saW5l X21hc2spOwo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgaW50Cj4gPiAtYXNzaWduX2lycV92ZWN0 b3JfcG9saWN5KHN0cnVjdCBpcnFfZGF0YSAqaXJxZCwgc3RydWN0IGlycV9hbGxvY19pbmZvICpp bmZvKQo+ID4gLXsKPiA+IC0JaWYgKGlycWRfYWZmaW5pdHlfaXNfbWFuYWdlZChpcnFkKSkKPiA+ IC0JCXJldHVybiByZXNlcnZlX21hbmFnZWRfdmVjdG9yKGlycWQpOwo+ID4gLQlpZiAoaW5mby0+ bWFzaykKPiA+IC0JCXJldHVybiBhc3NpZ25faXJxX3ZlY3RvcihpcnFkLCBpbmZvLT5tYXNrKTsK PiA+IC0JLyoKPiA+IC0JICogTWFrZSBvbmx5IGEgZ2xvYmFsIHJlc2VydmF0aW9uIHdpdGggbm8g Z3VhcmFudGVlLiBBIHJlYWwgdmVjdG9yCj4gPiAtCSAqIGlzIGFzc29jaWF0ZWQgYXQgYWN0aXZh dGlvbiB0aW1lLgo+ID4gLQkgKi8KPiA+IC0JcmV0dXJuIHJlc2VydmVfaXJxX3ZlY3RvcihpcnFk KTsKPiA+ICsJcmV0dXJuIGVycjsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIGludAo+ID4gLWFz c2lnbl9tYW5hZ2VkX3ZlY3RvcihzdHJ1Y3QgaXJxX2RhdGEgKmlycWQsIGNvbnN0IHN0cnVjdCBj cHVtYXNrICpkZXN0KQo+ID4gK3N0YXRpYyBpbnQgYXNzaWduX2lycV92ZWN0b3JfcG9saWN5KGlu dCBpcnEsIGludCBub2RlLAo+ID4gKwkJCQkgICAgc3RydWN0IGFwaWNfY2hpcF9kYXRhICpkYXRh LAo+ID4gKwkJCQkgICAgc3RydWN0IGlycV9hbGxvY19pbmZvICppbmZvLAo+ID4gKwkJCQkgICAg c3RydWN0IGlycV9kYXRhICppcnFkYXRhKQo+ID4gIHsKPiA+IC0JY29uc3Qgc3RydWN0IGNwdW1h c2sgKmFmZm1zayA9IGlycV9kYXRhX2dldF9hZmZpbml0eV9tYXNrKGlycWQpOwo+ID4gLQlzdHJ1 Y3QgYXBpY19jaGlwX2RhdGEgKmFwaWNkID0gYXBpY19jaGlwX2RhdGEoaXJxZCk7Cj4gPiAtCWlu dCB2ZWN0b3IsIGNwdTsKPiA+IC0KPiA+IC0JY3B1bWFza19hbmQodmVjdG9yX3NlYXJjaG1hc2ss IHZlY3Rvcl9zZWFyY2htYXNrLCBhZmZtc2spOwo+ID4gLQljcHUgPSBjcHVtYXNrX2ZpcnN0KHZl Y3Rvcl9zZWFyY2htYXNrKTsKPiA+IC0JaWYgKGNwdSA+PSBucl9jcHVfaWRzKQo+ID4gLQkJcmV0 dXJuIC1FSU5WQUw7Cj4gPiAtCS8qIHNldF9hZmZpbml0eSBtaWdodCBjYWxsIGhlcmUgZm9yIG5v dGhpbmcgKi8KPiA+IC0JaWYgKGFwaWNkLT52ZWN0b3IgJiYgY3B1bWFza190ZXN0X2NwdShhcGlj ZC0+Y3B1LCB2ZWN0b3Jfc2VhcmNobWFzaykpCj4gPiArCWlmIChpbmZvICYmIGluZm8tPm1hc2sp Cj4gPiArCQlyZXR1cm4gYXNzaWduX2lycV92ZWN0b3IoaXJxLCBkYXRhLCBpbmZvLT5tYXNrLCBp cnFkYXRhKTsKPiA+ICsJaWYgKG5vZGUgIT0gTlVNQV9OT19OT0RFICYmCj4gPiArCSAgICBhc3Np Z25faXJxX3ZlY3RvcihpcnEsIGRhdGEsIGNwdW1hc2tfb2Zfbm9kZShub2RlKSwgaXJxZGF0YSkg PT0gMCkKPiA+ICAJCXJldHVybiAwOwo+ID4gLQl2ZWN0b3IgPSBpcnFfbWF0cml4X2FsbG9jX21h bmFnZWQodmVjdG9yX21hdHJpeCwgY3B1KTsKPiA+IC0JdHJhY2VfdmVjdG9yX2FsbG9jX21hbmFn ZWQoaXJxZC0+aXJxLCB2ZWN0b3IsIHZlY3Rvcik7Cj4gPiAtCWlmICh2ZWN0b3IgPCAwKQo+ID4g LQkJcmV0dXJuIHZlY3RvcjsKPiA+IC0JYXBpY191cGRhdGVfdmVjdG9yKGlycWQsIHZlY3Rvciwg Y3B1KTsKPiA+IC0JYXBpY191cGRhdGVfaXJxX2NmZyhpcnFkLCB2ZWN0b3IsIGNwdSk7Cj4gPiAt CXJldHVybiAwOwo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgdm9pZCBjbGVhcl9pcnFfdmVjdG9y KHN0cnVjdCBpcnFfZGF0YSAqaXJxZCkKPiA+IC17Cj4gPiAtCXN0cnVjdCBhcGljX2NoaXBfZGF0 YSAqYXBpY2QgPSBhcGljX2NoaXBfZGF0YShpcnFkKTsKPiA+IC0JYm9vbCBtYW5hZ2VkID0gaXJx ZF9hZmZpbml0eV9pc19tYW5hZ2VkKGlycWQpOwo+ID4gLQl1bnNpZ25lZCBpbnQgdmVjdG9yID0g YXBpY2QtPnZlY3RvcjsKPiA+IC0KPiA+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmdmVjdG9yX2xv Y2spOwo+ID4gLQo+ID4gLQlpZiAoIXZlY3RvcikKPiA+IC0JCXJldHVybjsKPiA+IC0KPiA+IC0J dHJhY2VfdmVjdG9yX2NsZWFyKGlycWQtPmlycSwgdmVjdG9yLCBhcGljZC0+Y3B1LCBhcGljZC0+ cHJldl92ZWN0b3IsCj4gPiAtCQkJICAgYXBpY2QtPnByZXZfY3B1KTsKPiA+IC0KPiA+IC0JcGVy X2NwdSh2ZWN0b3JfaXJxLCBhcGljZC0+Y3B1KVt2ZWN0b3JdID0gVkVDVE9SX1VOVVNFRDsKPiA+ IC0JaXJxX21hdHJpeF9mcmVlKHZlY3Rvcl9tYXRyaXgsIGFwaWNkLT5jcHUsIHZlY3RvciwgbWFu YWdlZCk7Cj4gPiAtCWFwaWNkLT52ZWN0b3IgPSAwOwo+ID4gLQo+ID4gLQkvKiBDbGVhbiB1cCBt b3ZlIGluIHByb2dyZXNzICovCj4gPiAtCXZlY3RvciA9IGFwaWNkLT5wcmV2X3ZlY3RvcjsKPiA+ IC0JaWYgKCF2ZWN0b3IpCj4gPiAtCQlyZXR1cm47Cj4gPiAtCj4gPiAtCXBlcl9jcHUodmVjdG9y X2lycSwgYXBpY2QtPnByZXZfY3B1KVt2ZWN0b3JdID0gVkVDVE9SX1VOVVNFRDsKPiA+IC0JaXJx X21hdHJpeF9mcmVlKHZlY3Rvcl9tYXRyaXgsIGFwaWNkLT5wcmV2X2NwdSwgdmVjdG9yLCBtYW5h Z2VkKTsKPiA+IC0JYXBpY2QtPnByZXZfdmVjdG9yID0gMDsKPiA+IC0JYXBpY2QtPm1vdmVfaW5f cHJvZ3Jlc3MgPSAwOwo+ID4gLQlobGlzdF9kZWxfaW5pdCgmYXBpY2QtPmNsaXN0KTsKPiA+ICsJ cmV0dXJuIGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgZGF0YSwgYXBpYy0+dGFyZ2V0X2NwdXMoKSwg aXJxZGF0YSk7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyB2b2lkIHg4Nl92ZWN0b3JfZGVhY3Rp dmF0ZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tLCBzdHJ1Y3QgaXJxX2RhdGEgKmlycWQpCj4gPiAr c3RhdGljIHZvaWQgY2xlYXJfaXJxX3ZlY3RvcihpbnQgaXJxLCBzdHJ1Y3QgYXBpY19jaGlwX2Rh dGEgKmRhdGEpCj4gPiAgewo+ID4gLQlzdHJ1Y3QgYXBpY19jaGlwX2RhdGEgKmFwaWNkID0gYXBp Y19jaGlwX2RhdGEoaXJxZCk7Cj4gPiAtCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiArCXN0cnVj dCBpcnFfZGVzYyAqZGVzYzsKPiA+ICsJaW50IGNwdSwgdmVjdG9yOwo+ID4gIAo+ID4gLQl0cmFj ZV92ZWN0b3JfZGVhY3RpdmF0ZShpcnFkLT5pcnEsIGFwaWNkLT5pc19tYW5hZ2VkLAo+ID4gLQkJ CQlhcGljZC0+Y2FuX3Jlc2VydmUsIGZhbHNlKTsKPiA+IC0KPiA+IC0JLyogUmVndWxhciBmaXhl ZCBhc3NpZ25lZCBpbnRlcnJ1cHQgKi8KPiA+IC0JaWYgKCFhcGljZC0+aXNfbWFuYWdlZCAmJiAh YXBpY2QtPmNhbl9yZXNlcnZlKQo+ID4gLQkJcmV0dXJuOwo+ID4gLQkvKiBJZiB0aGUgaW50ZXJy dXB0IGhhcyBhIGdsb2JhbCByZXNlcnZhdGlvbiwgbm90aGluZyB0byBkbyAqLwo+ID4gLQlpZiAo YXBpY2QtPmhhc19yZXNlcnZlZCkKPiA+ICsJaWYgKCFkYXRhLT5jZmcudmVjdG9yKQo+ID4gIAkJ cmV0dXJuOwo+ID4gIAo+ID4gLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBm bGFncyk7Cj4gPiAtCWNsZWFyX2lycV92ZWN0b3IoaXJxZCk7Cj4gPiAtCWlmIChhcGljZC0+Y2Fu X3Jlc2VydmUpCj4gPiAtCQlyZXNlcnZlX2lycV92ZWN0b3JfbG9ja2VkKGlycWQpOwo+ID4gLQll bHNlCj4gPiAtCQl2ZWN0b3JfYXNzaWduX21hbmFnZWRfc2h1dGRvd24oaXJxZCk7Cj4gPiAtCXJh d19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwo+ID4gLX0KPiA+ IC0KPiA+IC1zdGF0aWMgaW50IGFjdGl2YXRlX3Jlc2VydmVkKHN0cnVjdCBpcnFfZGF0YSAqaXJx ZCkKPiA+IC17Cj4gPiAtCXN0cnVjdCBhcGljX2NoaXBfZGF0YSAqYXBpY2QgPSBhcGljX2NoaXBf ZGF0YShpcnFkKTsKPiA+IC0JaW50IHJldDsKPiA+IC0KPiA+IC0JcmV0ID0gYXNzaWduX2lycV92 ZWN0b3JfYW55X2xvY2tlZChpcnFkKTsKPiA+IC0JaWYgKCFyZXQpCj4gPiAtCQlhcGljZC0+aGFz X3Jlc2VydmVkID0gZmFsc2U7Cj4gPiAtCXJldHVybiByZXQ7Cj4gPiAtfQo+ID4gKwl2ZWN0b3Ig PSBkYXRhLT5jZmcudmVjdG9yOwo+ID4gKwlmb3JfZWFjaF9jcHVfYW5kKGNwdSwgZGF0YS0+ZG9t YWluLCBjcHVfb25saW5lX21hc2spCj4gPiArCQlwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbdmVj dG9yXSA9IFZFQ1RPUl9VTlVTRUQ7Cj4gPiAgCj4gPiAtc3RhdGljIGludCBhY3RpdmF0ZV9tYW5h Z2VkKHN0cnVjdCBpcnFfZGF0YSAqaXJxZCkKPiA+IC17Cj4gPiAtCWNvbnN0IHN0cnVjdCBjcHVt YXNrICpkZXN0ID0gaXJxX2RhdGFfZ2V0X2FmZmluaXR5X21hc2soaXJxZCk7Cj4gPiAtCWludCBy ZXQ7Cj4gPiAtCj4gPiAtCWNwdW1hc2tfYW5kKHZlY3Rvcl9zZWFyY2htYXNrLCBkZXN0LCBjcHVf b25saW5lX21hc2spOwo+ID4gLQlpZiAoV0FSTl9PTl9PTkNFKGNwdW1hc2tfZW1wdHkodmVjdG9y X3NlYXJjaG1hc2spKSkgewo+ID4gLQkJLyogU29tZXRoaW5nIGluIHRoZSBjb3JlIGNvZGUgYnJv a2UhIFN1cnZpdmUgZ3JhY2VmdWxseSAqLwo+ID4gLQkJcHJfZXJyKCJNYW5hZ2VkIHN0YXJ0dXAg Zm9yIGlycSAldSwgYnV0IG5vIENQVVxuIiwgaXJxZC0+aXJxKTsKPiA+IC0JCXJldHVybiBFSU5W QUw7Cj4gPiAtCX0KPiA+ICsJZGF0YS0+Y2ZnLnZlY3RvciA9IDA7Cj4gPiArCWNwdW1hc2tfY2xl YXIoZGF0YS0+ZG9tYWluKTsKPiA+ICAKPiA+IC0JcmV0ID0gYXNzaWduX21hbmFnZWRfdmVjdG9y KGlycWQsIHZlY3Rvcl9zZWFyY2htYXNrKTsKPiA+ICAJLyoKPiA+IC0JICogVGhpcyBzaG91bGQg bm90IGhhcHBlbi4gVGhlIHZlY3RvciByZXNlcnZhdGlvbiBnb3QgYnVnZ2VyZWQuICBIYW5kbGUK PiA+IC0JICogaXQgZ3JhY2VmdWxseS4KPiA+ICsJICogSWYgbW92ZSBpcyBpbiBwcm9ncmVzcyBv ciB0aGUgb2xkX2RvbWFpbiBtYXNrIGlzIG5vdCBlbXB0eSwKPiA+ICsJICogaS5lLiB0aGUgY2xl YW51cCBJUEkgaGFzIG5vdCBiZWVuIHByb2Nlc3NlZCB5ZXQsIHdlIG5lZWQgdG8gcmVtb3ZlCj4g PiArCSAqIHRoZSBvbGQgcmVmZXJlbmNlcyB0byBkZXNjIGZyb20gYWxsIGNwdXMgdmVjdG9yIHRh Ymxlcy4KPiA+ICAJICovCj4gPiAtCWlmIChXQVJOX09OX09OQ0UocmV0IDwgMCkpIHsKPiA+IC0J CXByX2VycigiTWFuYWdlZCBzdGFydHVwIGlycSAldSwgbm8gdmVjdG9yIGF2YWlsYWJsZVxuIiwK PiA+IC0JCSAgICAgICBpcnFkLT5pcnEpOwo+ID4gKwlpZiAoIWRhdGEtPm1vdmVfaW5fcHJvZ3Jl c3MgJiYgY3B1bWFza19lbXB0eShkYXRhLT5vbGRfZG9tYWluKSkKPiA+ICsJCXJldHVybjsKPiA+ ICsKPiA+ICsJZGVzYyA9IGlycV90b19kZXNjKGlycSk7Cj4gPiArCWZvcl9lYWNoX2NwdV9hbmQo Y3B1LCBkYXRhLT5vbGRfZG9tYWluLCBjcHVfb25saW5lX21hc2spIHsKPiA+ICsJCWZvciAodmVj dG9yID0gRklSU1RfRVhURVJOQUxfVkVDVE9SOyB2ZWN0b3IgPCBOUl9WRUNUT1JTOwo+ID4gKwkJ ICAgICB2ZWN0b3IrKykgewo+ID4gKwkJCWlmIChwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbdmVj dG9yXSAhPSBkZXNjKQo+ID4gKwkJCQljb250aW51ZTsKPiA+ICsJCQlwZXJfY3B1KHZlY3Rvcl9p cnEsIGNwdSlbdmVjdG9yXSA9IFZFQ1RPUl9VTlVTRUQ7Cj4gPiArCQkJYnJlYWs7Cj4gPiArCQl9 Cj4gPiAgCX0KPiA+IC0gICAgICAgcmV0dXJuIHJldDsKPiA+ICsJZGF0YS0+bW92ZV9pbl9wcm9n cmVzcyA9IDA7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyBpbnQgeDg2X3ZlY3Rvcl9hY3RpdmF0 ZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tLCBzdHJ1Y3QgaXJxX2RhdGEgKmlycWQsCj4gPiAtCQkJ ICAgICAgIGJvb2wgZWFybHkpCj4gPiArdm9pZCBpbml0X2lycV9hbGxvY19pbmZvKHN0cnVjdCBp cnFfYWxsb2NfaW5mbyAqaW5mbywKPiA+ICsJCQkgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2sp Cj4gPiAgewo+ID4gLQlzdHJ1Y3QgYXBpY19jaGlwX2RhdGEgKmFwaWNkID0gYXBpY19jaGlwX2Rh dGEoaXJxZCk7Cj4gPiAtCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiAtCWludCByZXQgPSAwOwo+ ID4gLQo+ID4gLQl0cmFjZV92ZWN0b3JfYWN0aXZhdGUoaXJxZC0+aXJxLCBhcGljZC0+aXNfbWFu YWdlZCwKPiA+IC0JCQkgICAgICBhcGljZC0+Y2FuX3Jlc2VydmUsIGVhcmx5KTsKPiA+IC0KPiA+ IC0JLyogTm90aGluZyB0byBkbyBmb3IgZml4ZWQgYXNzaWduZWQgdmVjdG9ycyAqLwo+ID4gLQlp ZiAoIWFwaWNkLT5jYW5fcmVzZXJ2ZSAmJiAhYXBpY2QtPmlzX21hbmFnZWQpCj4gPiAtCQlyZXR1 cm4gMDsKPiA+IC0KPiA+IC0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxh Z3MpOwo+ID4gLQlpZiAoZWFybHkgfHwgaXJxZF9pc19tYW5hZ2VkX2FuZF9zaHV0ZG93bihpcnFk KSkKPiA+IC0JCXZlY3Rvcl9hc3NpZ25fbWFuYWdlZF9zaHV0ZG93bihpcnFkKTsKPiA+IC0JZWxz ZSBpZiAoYXBpY2QtPmlzX21hbmFnZWQpCj4gPiAtCQlyZXQgPSBhY3RpdmF0ZV9tYW5hZ2VkKGly cWQpOwo+ID4gLQllbHNlIGlmIChhcGljZC0+aGFzX3Jlc2VydmVkKQo+ID4gLQkJcmV0ID0gYWN0 aXZhdGVfcmVzZXJ2ZWQoaXJxZCk7Cj4gPiAtCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2 ZWN0b3JfbG9jaywgZmxhZ3MpOwo+ID4gLQlyZXR1cm4gcmV0Owo+ID4gKwltZW1zZXQoaW5mbywg MCwgc2l6ZW9mKCppbmZvKSk7Cj4gPiArCWluZm8tPm1hc2sgPSBtYXNrOwo+ID4gIH0KPiA+ICAK PiA+IC1zdGF0aWMgdm9pZCB2ZWN0b3JfZnJlZV9yZXNlcnZlZF9hbmRfbWFuYWdlZChzdHJ1Y3Qg aXJxX2RhdGEgKmlycWQpCj4gPiArdm9pZCBjb3B5X2lycV9hbGxvY19pbmZvKHN0cnVjdCBpcnFf YWxsb2NfaW5mbyAqZHN0LCBzdHJ1Y3QgaXJxX2FsbG9jX2luZm8gKnNyYykKPiA+ICB7Cj4gPiAt CWNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0ID0gaXJxX2RhdGFfZ2V0X2FmZmluaXR5X21hc2so aXJxZCk7Cj4gPiAtCXN0cnVjdCBhcGljX2NoaXBfZGF0YSAqYXBpY2QgPSBhcGljX2NoaXBfZGF0 YShpcnFkKTsKPiA+IC0KPiA+IC0JdHJhY2VfdmVjdG9yX3RlYXJkb3duKGlycWQtPmlycSwgYXBp Y2QtPmlzX21hbmFnZWQsCj4gPiAtCQkJICAgICAgYXBpY2QtPmhhc19yZXNlcnZlZCk7Cj4gPiAt Cj4gPiAtCWlmIChhcGljZC0+aGFzX3Jlc2VydmVkKQo+ID4gLQkJaXJxX21hdHJpeF9yZW1vdmVf cmVzZXJ2ZWQodmVjdG9yX21hdHJpeCk7Cj4gPiAtCWlmIChhcGljZC0+aXNfbWFuYWdlZCkKPiA+ IC0JCWlycV9tYXRyaXhfcmVtb3ZlX21hbmFnZWQodmVjdG9yX21hdHJpeCwgZGVzdCk7Cj4gPiAr CWlmIChzcmMpCj4gPiArCQkqZHN0ID0gKnNyYzsKPiA+ICsJZWxzZQo+ID4gKwkJbWVtc2V0KGRz dCwgMCwgc2l6ZW9mKCpkc3QpKTsKPiA+ICB9Cj4gPiAgCj4gPiAgc3RhdGljIHZvaWQgeDg2X3Zl Y3Rvcl9mcmVlX2lycXMoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwKPiA+ICAJCQkJIHVuc2ln bmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgbnJfaXJxcykKPiA+ICB7Cj4gPiAtCXN0cnVjdCBh cGljX2NoaXBfZGF0YSAqYXBpY2Q7Cj4gPiAtCXN0cnVjdCBpcnFfZGF0YSAqaXJxZDsKPiA+ICsJ c3RydWN0IGFwaWNfY2hpcF9kYXRhICphcGljX2RhdGE7Cj4gPiArCXN0cnVjdCBpcnFfZGF0YSAq aXJxX2RhdGE7Cj4gPiAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiAgCWludCBpOwo+ID4gIAo+ ID4gIAlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKSB7Cj4gPiAtCQlpcnFkID0gaXJxX2Rv bWFpbl9nZXRfaXJxX2RhdGEoeDg2X3ZlY3Rvcl9kb21haW4sIHZpcnEgKyBpKTsKPiA+IC0JCWlm IChpcnFkICYmIGlycWQtPmNoaXBfZGF0YSkgewo+ID4gKwkJaXJxX2RhdGEgPSBpcnFfZG9tYWlu X2dldF9pcnFfZGF0YSh4ODZfdmVjdG9yX2RvbWFpbiwgdmlycSArIGkpOwo+ID4gKwkJaWYgKGly cV9kYXRhICYmIGlycV9kYXRhLT5jaGlwX2RhdGEpIHsKPiA+ICAJCQlyYXdfc3Bpbl9sb2NrX2ly cXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Cj4gPiAtCQkJY2xlYXJfaXJxX3ZlY3RvcihpcnFk KTsKPiA+IC0JCQl2ZWN0b3JfZnJlZV9yZXNlcnZlZF9hbmRfbWFuYWdlZChpcnFkKTsKPiA+IC0J CQlhcGljZCA9IGlycWQtPmNoaXBfZGF0YTsKPiA+IC0JCQlpcnFfZG9tYWluX3Jlc2V0X2lycV9k YXRhKGlycWQpOwo+ID4gKwkJCWNsZWFyX2lycV92ZWN0b3IodmlycSArIGksIGlycV9kYXRhLT5j aGlwX2RhdGEpOwo+ID4gKwkJCWFwaWNfZGF0YSA9IGlycV9kYXRhLT5jaGlwX2RhdGE7Cj4gPiAr CQkJaXJxX2RvbWFpbl9yZXNldF9pcnFfZGF0YShpcnFfZGF0YSk7Cj4gPiAgCQkJcmF3X3NwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Cj4gPiAtCQkJZnJlZV9hcGlj X2NoaXBfZGF0YShhcGljZCk7Cj4gPiArCQkJZnJlZV9hcGljX2NoaXBfZGF0YShhcGljX2RhdGEp Owo+ID4gKyNpZmRlZglDT05GSUdfWDg2X0lPX0FQSUMKPiA+ICsJCQlpZiAodmlycSArIGkgPCBu cl9sZWdhY3lfaXJxcygpKQo+ID4gKwkJCQlsZWdhY3lfaXJxX2RhdGFbdmlycSArIGldID0gTlVM TDsKPiA+ICsjZW5kaWYKPiA+ICAJCX0KPiA+ICAJfQo+ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMg Ym9vbCB2ZWN0b3JfY29uZmlndXJlX2xlZ2FjeSh1bnNpZ25lZCBpbnQgdmlycSwgc3RydWN0IGly cV9kYXRhICppcnFkLAo+ID4gLQkJCQkgICAgc3RydWN0IGFwaWNfY2hpcF9kYXRhICphcGljZCkK PiA+IC17Cj4gPiAtCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiAtCWJvb2wgcmVhbGxvYyA9IGZh bHNlOwo+ID4gLQo+ID4gLQlhcGljZC0+dmVjdG9yID0gSVNBX0lSUV9WRUNUT1IodmlycSk7Cj4g PiAtCWFwaWNkLT5jcHUgPSAwOwo+ID4gLQo+ID4gLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnZl Y3Rvcl9sb2NrLCBmbGFncyk7Cj4gPiAtCS8qCj4gPiAtCSAqIElmIHRoZSBpbnRlcnJ1cHQgaXMg YWN0aXZhdGVkLCB0aGVuIGl0IG11c3Qgc3RheSBhdCB0aGlzIHZlY3Rvcgo+ID4gLQkgKiBwb3Np dGlvbi4gVGhhdCdzIHVzdWFsbHkgdGhlIHRpbWVyIGludGVycnVwdCAoMCkuCj4gPiAtCSAqLwo+ ID4gLQlpZiAoaXJxZF9pc19hY3RpdmF0ZWQoaXJxZCkpIHsKPiA+IC0JCXRyYWNlX3ZlY3Rvcl9z ZXR1cCh2aXJxLCB0cnVlLCAwKTsKPiA+IC0JCWFwaWNfdXBkYXRlX2lycV9jZmcoaXJxZCwgYXBp Y2QtPnZlY3RvciwgYXBpY2QtPmNwdSk7Cj4gPiAtCX0gZWxzZSB7Cj4gPiAtCQkvKiBSZWxlYXNl IHRoZSB2ZWN0b3IgKi8KPiA+IC0JCWFwaWNkLT5jYW5fcmVzZXJ2ZSA9IHRydWU7Cj4gPiAtCQlj bGVhcl9pcnFfdmVjdG9yKGlycWQpOwo+ID4gLQkJcmVhbGxvYyA9IHRydWU7Cj4gPiAtCX0KPiA+ IC0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Cj4gPiAt CXJldHVybiByZWFsbG9jOwo+ID4gLX0KPiA+IC0KPiA+ICBzdGF0aWMgaW50IHg4Nl92ZWN0b3Jf YWxsb2NfaXJxcyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgdmlycSwK PiA+ICAJCQkJIHVuc2lnbmVkIGludCBucl9pcnFzLCB2b2lkICphcmcpCj4gPiAgewo+ID4gIAlz dHJ1Y3QgaXJxX2FsbG9jX2luZm8gKmluZm8gPSBhcmc7Cj4gPiAtCXN0cnVjdCBhcGljX2NoaXBf ZGF0YSAqYXBpY2Q7Cj4gPiAtCXN0cnVjdCBpcnFfZGF0YSAqaXJxZDsKPiA+ICsJc3RydWN0IGFw aWNfY2hpcF9kYXRhICpkYXRhOwo+ID4gKwlzdHJ1Y3QgaXJxX2RhdGEgKmlycV9kYXRhOwo+ID4g IAlpbnQgaSwgZXJyLCBub2RlOwo+ID4gIAo+ID4gIAlpZiAoZGlzYWJsZV9hcGljKQo+ID4gQEAg LTUwMSwzNyArMzUwLDM0IEBAIHN0YXRpYyBpbnQgeDg2X3ZlY3Rvcl9hbGxvY19pcnFzKHN0cnVj dCBpcnFfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCB2aXJxLAo+ID4gIAkJcmV0dXJuIC1F Tk9TWVM7Cj4gPiAgCj4gPiAgCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspIHsKPiA+IC0J CWlycWQgPSBpcnFfZG9tYWluX2dldF9pcnFfZGF0YShkb21haW4sIHZpcnEgKyBpKTsKPiA+IC0J CUJVR19PTighaXJxZCk7Cj4gPiAtCQlub2RlID0gaXJxX2RhdGFfZ2V0X25vZGUoaXJxZCk7Cj4g PiAtCQlXQVJOX09OX09OQ0UoaXJxZC0+Y2hpcF9kYXRhKTsKPiA+IC0JCWFwaWNkID0gYWxsb2Nf YXBpY19jaGlwX2RhdGEobm9kZSk7Cj4gPiAtCQlpZiAoIWFwaWNkKSB7Cj4gPiArCQlpcnFfZGF0 YSA9IGlycV9kb21haW5fZ2V0X2lycV9kYXRhKGRvbWFpbiwgdmlycSArIGkpOwo+ID4gKwkJQlVH X09OKCFpcnFfZGF0YSk7Cj4gPiArCQlub2RlID0gaXJxX2RhdGFfZ2V0X25vZGUoaXJxX2RhdGEp Owo+ID4gKyNpZmRlZglDT05GSUdfWDg2X0lPX0FQSUMKPiA+ICsJCWlmICh2aXJxICsgaSA8IG5y X2xlZ2FjeV9pcnFzKCkgJiYgbGVnYWN5X2lycV9kYXRhW3ZpcnEgKyBpXSkKPiA+ICsJCQlkYXRh ID0gbGVnYWN5X2lycV9kYXRhW3ZpcnEgKyBpXTsKPiA+ICsJCWVsc2UKPiA+ICsjZW5kaWYKPiA+ ICsJCQlkYXRhID0gYWxsb2NfYXBpY19jaGlwX2RhdGEobm9kZSk7Cj4gPiArCQlpZiAoIWRhdGEp IHsKPiA+ICAJCQllcnIgPSAtRU5PTUVNOwo+ID4gIAkJCWdvdG8gZXJyb3I7Cj4gPiAgCQl9Cj4g PiAgCj4gPiAtCQlhcGljZC0+aXJxID0gdmlycSArIGk7Cj4gPiAtCQlpcnFkLT5jaGlwID0gJmxh cGljX2NvbnRyb2xsZXI7Cj4gPiAtCQlpcnFkLT5jaGlwX2RhdGEgPSBhcGljZDsKPiA+IC0JCWly cWQtPmh3aXJxID0gdmlycSArIGk7Cj4gPiAtCQlpcnFkX3NldF9zaW5nbGVfdGFyZ2V0KGlycWQp Owo+ID4gLQkJLyoKPiA+IC0JCSAqIExlZ2FjeSB2ZWN0b3JzIGFyZSBhbHJlYWR5IGFzc2lnbmVk IHdoZW4gdGhlIElPQVBJQwo+ID4gLQkJICogdGFrZXMgdGhlbSBvdmVyLiBUaGV5IHN0YXkgb24g dGhlIHNhbWUgdmVjdG9yLiBUaGlzIGlzCj4gPiAtCQkgKiByZXF1aXJlZCBmb3IgY2hlY2tfdGlt ZXIoKSB0byB3b3JrIGNvcnJlY3RseSBhcyBpdCBtaWdodAo+ID4gLQkJICogc3dpdGNoIGJhY2sg dG8gbGVnYWN5IG1vZGUuIE9ubHkgdXBkYXRlIHRoZSBoYXJkd2FyZQo+ID4gLQkJICogY29uZmln Lgo+ID4gLQkJICovCj4gPiAtCQlpZiAoaW5mby0+ZmxhZ3MgJiBYODZfSVJRX0FMTE9DX0xFR0FD WSkgewo+ID4gLQkJCWlmICghdmVjdG9yX2NvbmZpZ3VyZV9sZWdhY3kodmlycSArIGksIGlycWQs IGFwaWNkKSkKPiA+IC0JCQkJY29udGludWU7Cj4gPiAtCQl9Cj4gPiAtCj4gPiAtCQllcnIgPSBh c3NpZ25faXJxX3ZlY3Rvcl9wb2xpY3koaXJxZCwgaW5mbyk7Cj4gPiAtCQl0cmFjZV92ZWN0b3Jf c2V0dXAodmlycSArIGksIGZhbHNlLCBlcnIpOwo+ID4gKwkJaXJxX2RhdGEtPmNoaXAgPSAmbGFw aWNfY29udHJvbGxlcjsKPiA+ICsJCWlycV9kYXRhLT5jaGlwX2RhdGEgPSBkYXRhOwo+ID4gKwkJ aXJxX2RhdGEtPmh3aXJxID0gdmlycSArIGk7Cj4gPiArCQllcnIgPSBhc3NpZ25faXJxX3ZlY3Rv cl9wb2xpY3kodmlycSArIGksIG5vZGUsIGRhdGEsIGluZm8sCj4gPiArCQkJCQkgICAgICAgaXJx X2RhdGEpOwo+ID4gIAkJaWYgKGVycikKPiA+ICAJCQlnb3RvIGVycm9yOwo+ID4gKwkJLyoKPiA+ ICsJCSAqIElmIHRoZSBhcGljIGRlc3RpbmF0aW9uIG1vZGUgaXMgcGh5c2ljYWwsIHRoZW4gdGhl Cj4gPiArCQkgKiBlZmZlY3RpdmUgYWZmaW5pdHkgaXMgcmVzdHJpY3RlZCB0byBhIHNpbmdsZSB0 YXJnZXQKPiA+ICsJCSAqIENQVS4gTWFyayB0aGUgaW50ZXJydXB0IGFjY29yZGluZ2x5Lgo+ID4g KwkJICovCj4gPiArCQlpZiAoIWFwaWMtPmlycV9kZXN0X21vZGUpCj4gPiArCQkJaXJxZF9zZXRf c2luZ2xlX3RhcmdldChpcnFfZGF0YSk7Cj4gPiAgCX0KPiA+ICAKPiA+ICAJcmV0dXJuIDA7Cj4g PiBAQCAtNTQxLDU2ICszODcsOSBAQCBzdGF0aWMgaW50IHg4Nl92ZWN0b3JfYWxsb2NfaXJxcyhz dHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgdmlycSwKPiA+ICAJcmV0dXJu IGVycjsKPiA+ICB9Cj4gPiAgCj4gPiAtI2lmZGVmIENPTkZJR19HRU5FUklDX0lSUV9ERUJVR0ZT Cj4gPiAtdm9pZCB4ODZfdmVjdG9yX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCBzdHJ1 Y3QgaXJxX2RvbWFpbiAqZCwKPiA+IC0JCQkgICBzdHJ1Y3QgaXJxX2RhdGEgKmlycWQsIGludCBp bmQpCj4gPiAtewo+ID4gLQl1bnNpZ25lZCBpbnQgY3B1LCB2ZWN0b3IsIHByZXZfY3B1LCBwcmV2 X3ZlY3RvcjsKPiA+IC0Jc3RydWN0IGFwaWNfY2hpcF9kYXRhICphcGljZDsKPiA+IC0JdW5zaWdu ZWQgbG9uZyBmbGFnczsKPiA+IC0JaW50IGlycTsKPiA+IC0KPiA+IC0JaWYgKCFpcnFkKSB7Cj4g PiAtCQlpcnFfbWF0cml4X2RlYnVnX3Nob3cobSwgdmVjdG9yX21hdHJpeCwgaW5kKTsKPiA+IC0J CXJldHVybjsKPiA+IC0JfQo+ID4gLQo+ID4gLQlpcnEgPSBpcnFkLT5pcnE7Cj4gPiAtCWlmIChp cnEgPCBucl9sZWdhY3lfaXJxcygpICYmICF0ZXN0X2JpdChpcnEsICZpb19hcGljX2lycXMpKSB7 Cj4gPiAtCQlzZXFfcHJpbnRmKG0sICIlKnNWZWN0b3I6ICU1ZFxuIiwgaW5kLCAiIiwgSVNBX0lS UV9WRUNUT1IoaXJxKSk7Cj4gPiAtCQlzZXFfcHJpbnRmKG0sICIlKnNUYXJnZXQ6IExlZ2FjeSBQ SUMgYWxsIENQVXNcbiIsIGluZCwgIiIpOwo+ID4gLQkJcmV0dXJuOwo+ID4gLQl9Cj4gPiAtCj4g PiAtCWFwaWNkID0gaXJxZC0+Y2hpcF9kYXRhOwo+ID4gLQlpZiAoIWFwaWNkKSB7Cj4gPiAtCQlz ZXFfcHJpbnRmKG0sICIlKnNWZWN0b3I6IE5vdCBhc3NpZ25lZFxuIiwgaW5kLCAiIik7Cj4gPiAt CQlyZXR1cm47Cj4gPiAtCX0KPiA+IC0KPiA+IC0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0 b3JfbG9jaywgZmxhZ3MpOwo+ID4gLQljcHUgPSBhcGljZC0+Y3B1Owo+ID4gLQl2ZWN0b3IgPSBh cGljZC0+dmVjdG9yOwo+ID4gLQlwcmV2X2NwdSA9IGFwaWNkLT5wcmV2X2NwdTsKPiA+IC0JcHJl dl92ZWN0b3IgPSBhcGljZC0+cHJldl92ZWN0b3I7Cj4gPiAtCXJhd19zcGluX3VubG9ja19pcnFy ZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwo+ID4gLQlzZXFfcHJpbnRmKG0sICIlKnNWZWN0 b3I6ICU1dVxuIiwgaW5kLCAiIiwgdmVjdG9yKTsKPiA+IC0Jc2VxX3ByaW50ZihtLCAiJSpzVGFy Z2V0OiAlNXVcbiIsIGluZCwgIiIsIGNwdSk7Cj4gPiAtCWlmIChwcmV2X3ZlY3Rvcikgewo+ID4g LQkJc2VxX3ByaW50ZihtLCAiJSpzUHJldmlvdXMgdmVjdG9yOiAlNXVcbiIsIGluZCwgIiIsIHBy ZXZfdmVjdG9yKTsKPiA+IC0JCXNlcV9wcmludGYobSwgIiUqc1ByZXZpb3VzIHRhcmdldDogJTV1 XG4iLCBpbmQsICIiLCBwcmV2X2NwdSk7Cj4gPiAtCX0KPiA+IC19Cj4gPiAtI2VuZGlmCj4gPiAt Cj4gPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyB4ODZfdmVjdG9yX2RvbWFp bl9vcHMgPSB7Cj4gPiAtCS5hbGxvYwkJPSB4ODZfdmVjdG9yX2FsbG9jX2lycXMsCj4gPiAtCS5m cmVlCQk9IHg4Nl92ZWN0b3JfZnJlZV9pcnFzLAo+ID4gLQkuYWN0aXZhdGUJPSB4ODZfdmVjdG9y X2FjdGl2YXRlLAo+ID4gLQkuZGVhY3RpdmF0ZQk9IHg4Nl92ZWN0b3JfZGVhY3RpdmF0ZSwKPiA+ IC0jaWZkZWYgQ09ORklHX0dFTkVSSUNfSVJRX0RFQlVHRlMKPiA+IC0JLmRlYnVnX3Nob3cJPSB4 ODZfdmVjdG9yX2RlYnVnX3Nob3csCj4gPiAtI2VuZGlmCj4gPiArCS5hbGxvYwk9IHg4Nl92ZWN0 b3JfYWxsb2NfaXJxcywKPiA+ICsJLmZyZWUJPSB4ODZfdmVjdG9yX2ZyZWVfaXJxcywKPiA+ICB9 Owo+ID4gIAo+ID4gIGludCBfX2luaXQgYXJjaF9wcm9iZV9ucl9pcnFzKHZvaWQpCj4gPiBAQCAt NjIwLDQwICs0MTksMzUgQEAgaW50IF9faW5pdCBhcmNoX3Byb2JlX25yX2lycXModm9pZCkKPiA+ ICAJcmV0dXJuIGxlZ2FjeV9waWMtPnByb2JlKCk7Cj4gPiAgfQo+ID4gIAo+ID4gLXZvaWQgbGFw aWNfYXNzaWduX2xlZ2FjeV92ZWN0b3IodW5zaWduZWQgaW50IGlycSwgYm9vbCByZXBsYWNlKQo+ ID4gKyNpZmRlZglDT05GSUdfWDg2X0lPX0FQSUMKPiA+ICtzdGF0aWMgdm9pZCBfX2luaXQgaW5p dF9sZWdhY3lfaXJxcyh2b2lkKQo+ID4gIHsKPiA+ICsJaW50IGksIG5vZGUgPSBjcHVfdG9fbm9k ZSgwKTsKPiA+ICsJc3RydWN0IGFwaWNfY2hpcF9kYXRhICpkYXRhOwo+ID4gKwo+ID4gIAkvKgo+ ID4gLQkgKiBVc2UgYXNzaWduIHN5c3RlbSBoZXJlIHNvIGl0IHdvbnQgZ2V0IGFjY291bnRlZCBh cyBhbGxvY2F0ZWQKPiA+IC0JICogYW5kIG1vdmVhYmxlIGluIHRoZSBjcHUgaG90cGx1ZyBjaGVj ayBhbmQgaXQgcHJldmVudHMgbWFuYWdlZAo+ID4gLQkgKiBpcnEgcmVzZXJ2YXRpb24gZnJvbSB0 b3VjaGluZyBpdC4KPiA+ICsJICogRm9yIGxlZ2FjeSBJUlEncywgc3RhcnQgd2l0aCBhc3NpZ25p bmcgaXJxMCB0byBpcnExNSB0bwo+ID4gKwkgKiBJU0FfSVJRX1ZFQ1RPUihpKSBmb3IgYWxsIGNw dSdzLgo+ID4gIAkgKi8KPiA+IC0JaXJxX21hdHJpeF9hc3NpZ25fc3lzdGVtKHZlY3Rvcl9tYXRy aXgsIElTQV9JUlFfVkVDVE9SKGlycSksIHJlcGxhY2UpOwo+ID4gLX0KPiA+IC0KPiA+IC12b2lk IF9faW5pdCBsYXBpY19hc3NpZ25fc3lzdGVtX3ZlY3RvcnModm9pZCkKPiA+IC17Cj4gPiAtCXVu c2lnbmVkIGludCBpLCB2ZWN0b3IgPSAwOwo+ID4gLQo+ID4gLQlmb3JfZWFjaF9zZXRfYml0X2Zy b20odmVjdG9yLCBzeXN0ZW1fdmVjdG9ycywgTlJfVkVDVE9SUykKPiA+IC0JCWlycV9tYXRyaXhf YXNzaWduX3N5c3RlbSh2ZWN0b3JfbWF0cml4LCB2ZWN0b3IsIGZhbHNlKTsKPiA+IC0KPiA+IC0J aWYgKG5yX2xlZ2FjeV9pcnFzKCkgPiAxKQo+ID4gLQkJbGFwaWNfYXNzaWduX2xlZ2FjeV92ZWN0 b3IoUElDX0NBU0NBREVfSVIsIGZhbHNlKTsKPiA+IC0KPiA+IC0JLyogU3lzdGVtIHZlY3RvcnMg YXJlIHJlc2VydmVkLCBvbmxpbmUgaXQgKi8KPiA+IC0JaXJxX21hdHJpeF9vbmxpbmUodmVjdG9y X21hdHJpeCk7Cj4gPiAtCj4gPiAtCS8qIE1hcmsgdGhlIHByZWFsbG9jYXRlZCBsZWdhY3kgaW50 ZXJydXB0cyAqLwo+ID4gIAlmb3IgKGkgPSAwOyBpIDwgbnJfbGVnYWN5X2lycXMoKTsgaSsrKSB7 Cj4gPiAtCQlpZiAoaSAhPSBQSUNfQ0FTQ0FERV9JUikKPiA+IC0JCQlpcnFfbWF0cml4X2Fzc2ln bih2ZWN0b3JfbWF0cml4LCBJU0FfSVJRX1ZFQ1RPUihpKSk7Cj4gPiArCQlkYXRhID0gbGVnYWN5 X2lycV9kYXRhW2ldID0gYWxsb2NfYXBpY19jaGlwX2RhdGEobm9kZSk7Cj4gPiArCQlCVUdfT04o IWRhdGEpOwo+ID4gKwo+ID4gKwkJZGF0YS0+Y2ZnLnZlY3RvciA9IElTQV9JUlFfVkVDVE9SKGkp Owo+ID4gKwkJY3B1bWFza19zZXRhbGwoZGF0YS0+ZG9tYWluKTsKPiA+ICsJCWlycV9zZXRfY2hp cF9kYXRhKGksIGRhdGEpOwo+ID4gIAl9Cj4gPiAgfQo+ID4gKyNlbHNlCj4gPiArc3RhdGljIGlu bGluZSB2b2lkIGluaXRfbGVnYWN5X2lycXModm9pZCkgeyB9Cj4gPiArI2VuZGlmCj4gPiAgCj4g PiAgaW50IF9faW5pdCBhcmNoX2Vhcmx5X2lycV9pbml0KHZvaWQpCj4gPiAgewo+ID4gIAlzdHJ1 Y3QgZndub2RlX2hhbmRsZSAqZm47Cj4gPiAgCj4gPiArCWluaXRfbGVnYWN5X2lycXMoKTsKPiA+ ICsKPiA+ICAJZm4gPSBpcnFfZG9tYWluX2FsbG9jX25hbWVkX2Z3bm9kZSgiVkVDVE9SIik7Cj4g PiAgCUJVR19PTighZm4pOwo+ID4gIAl4ODZfdmVjdG9yX2RvbWFpbiA9IGlycV9kb21haW5fY3Jl YXRlX3RyZWUoZm4sICZ4ODZfdmVjdG9yX2RvbWFpbl9vcHMsCj4gPiBAQCAtNjY0LDExNSArNDU4 LDEwMCBAQCBpbnQgX19pbml0IGFyY2hfZWFybHlfaXJxX2luaXQodm9pZCkKPiA+ICAKPiA+ICAJ YXJjaF9pbml0X21zaV9kb21haW4oeDg2X3ZlY3Rvcl9kb21haW4pOwo+ID4gIAo+ID4gKwlCVUdf T04oIWFsbG9jX2NwdW1hc2tfdmFyKCZ2ZWN0b3JfY3B1bWFzaywgR0ZQX0tFUk5FTCkpOwo+ID4g IAlCVUdfT04oIWFsbG9jX2NwdW1hc2tfdmFyKCZ2ZWN0b3Jfc2VhcmNobWFzaywgR0ZQX0tFUk5F TCkpOwo+ID4gLQo+ID4gLQkvKgo+ID4gLQkgKiBBbGxvY2F0ZSB0aGUgdmVjdG9yIG1hdHJpeCBh bGxvY2F0b3IgZGF0YSBzdHJ1Y3R1cmUgYW5kIGxpbWl0IHRoZQo+ID4gLQkgKiBzZWFyY2ggYXJl YS4KPiA+IC0JICovCj4gPiAtCXZlY3Rvcl9tYXRyaXggPSBpcnFfYWxsb2NfbWF0cml4KE5SX1ZF Q1RPUlMsIEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUiwKPiA+IC0JCQkJCSBGSVJTVF9TWVNURU1fVkVD VE9SKTsKPiA+IC0JQlVHX09OKCF2ZWN0b3JfbWF0cml4KTsKPiA+ICsJQlVHX09OKCFhbGxvY19j cHVtYXNrX3Zhcigmc2VhcmNoZWRfY3B1bWFzaywgR0ZQX0tFUk5FTCkpOwo+ID4gIAo+ID4gIAly ZXR1cm4gYXJjaF9lYXJseV9pb2FwaWNfaW5pdCgpOwo+ID4gIH0KPiA+ICAKPiA+IC0jaWZkZWYg Q09ORklHX1NNUAo+ID4gLQo+ID4gLXN0YXRpYyBzdHJ1Y3QgaXJxX2Rlc2MgKl9fc2V0dXBfdmVj dG9yX2lycShpbnQgdmVjdG9yKQo+ID4gKy8qIEluaXRpYWxpemUgdmVjdG9yX2lycSBvbiBhIG5l dyBjcHUgKi8KPiA+ICtzdGF0aWMgdm9pZCBfX3NldHVwX3ZlY3Rvcl9pcnEoaW50IGNwdSkKPiA+ ICB7Cj4gPiAtCWludCBpc2FpcnEgPSB2ZWN0b3IgLSBJU0FfSVJRX1ZFQ1RPUigwKTsKPiA+IC0K PiA+IC0JLyogQ2hlY2sgd2hldGhlciB0aGUgaXJxIGlzIGluIHRoZSBsZWdhY3kgc3BhY2UgKi8K PiA+IC0JaWYgKGlzYWlycSA8IDAgfHwgaXNhaXJxID49IG5yX2xlZ2FjeV9pcnFzKCkpCj4gPiAt CQlyZXR1cm4gVkVDVE9SX1VOVVNFRDsKPiA+IC0JLyogQ2hlY2sgd2hldGhlciB0aGUgaXJxIGlz IGhhbmRsZWQgYnkgdGhlIElPQVBJQyAqLwo+ID4gLQlpZiAodGVzdF9iaXQoaXNhaXJxLCAmaW9f YXBpY19pcnFzKSkKPiA+IC0JCXJldHVybiBWRUNUT1JfVU5VU0VEOwo+ID4gLQlyZXR1cm4gaXJx X3RvX2Rlc2MoaXNhaXJxKTsKPiA+IC19Cj4gPiArCXN0cnVjdCBhcGljX2NoaXBfZGF0YSAqZGF0 YTsKPiA+ICsJc3RydWN0IGlycV9kZXNjICpkZXNjOwo+ID4gKwlpbnQgaXJxLCB2ZWN0b3I7Cj4g PiAgCj4gPiAtLyogT25saW5lIHRoZSBsb2NhbCBBUElDIGluZnJhc3RydWN0dXJlIGFuZCBpbml0 aWFsaXplIHRoZSB2ZWN0b3JzICovCj4gPiAtdm9pZCBsYXBpY19vbmxpbmUodm9pZCkKPiA+IC17 Cj4gPiAtCXVuc2lnbmVkIGludCB2ZWN0b3I7Cj4gPiArCS8qIE1hcmsgdGhlIGludXNlIHZlY3Rv cnMgKi8KPiA+ICsJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7Cj4gPiArCQlzdHJ1Y3Qg aXJxX2RhdGEgKmlkYXRhID0gaXJxX2Rlc2NfZ2V0X2lycV9kYXRhKGRlc2MpOwo+ID4gIAo+ID4g LQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2ZWN0b3JfbG9jayk7Cj4gPiAtCj4gPiAtCS8qIE9ubGlu ZSB0aGUgdmVjdG9yIG1hdHJpeCBhcnJheSBmb3IgdGhpcyBDUFUgKi8KPiA+IC0JaXJxX21hdHJp eF9vbmxpbmUodmVjdG9yX21hdHJpeCk7Cj4gPiAtCj4gPiAtCS8qCj4gPiAtCSAqIFRoZSBpbnRl cnJ1cHQgYWZmaW5pdHkgbG9naWMgbmV2ZXIgdGFyZ2V0cyBpbnRlcnJ1cHRzIHRvIG9mZmxpbmUK PiA+IC0JICogQ1BVcy4gVGhlIGV4Y2VwdGlvbiBhcmUgdGhlIGxlZ2FjeSBQSUMgaW50ZXJydXB0 cy4gSW4gZ2VuZXJhbAo+ID4gLQkgKiB0aGV5IGFyZSBvbmx5IHRhcmdldGVkIHRvIENQVTAsIGJ1 dCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtCj4gPiAtCSAqIHRoZXkgY2FuIGJlIGRpc3RyaWJ1 dGVkIHRvIGFueSBvbmxpbmUgQ1BVIGluIGhhcmR3YXJlLiBUaGUKPiA+IC0JICoga2VybmVsIGhh cyBubyBpbmZsdWVuY2Ugb24gdGhhdC4gU28gYWxsIGFjdGl2ZSBsZWdhY3kgdmVjdG9ycwo+ID4g LQkgKiBtdXN0IGJlIGluc3RhbGxlZCBvbiBhbGwgQ1BVcy4gQWxsIG5vbiBsZWdhY3kgaW50ZXJy dXB0cyBjYW4gYmUKPiA+IC0JICogY2xlYXJlZC4KPiA+IC0JICovCj4gPiAtCWZvciAodmVjdG9y ID0gMDsgdmVjdG9yIDwgTlJfVkVDVE9SUzsgdmVjdG9yKyspCj4gPiAtCQl0aGlzX2NwdV93cml0 ZSh2ZWN0b3JfaXJxW3ZlY3Rvcl0sIF9fc2V0dXBfdmVjdG9yX2lycSh2ZWN0b3IpKTsKPiA+IC19 Cj4gPiArCQlkYXRhID0gYXBpY19jaGlwX2RhdGEoaWRhdGEpOwo+ID4gKwkJaWYgKCFkYXRhIHx8 ICFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgZGF0YS0+ZG9tYWluKSkKPiA+ICsJCQljb250aW51ZTsK PiA+ICsJCXZlY3RvciA9IGRhdGEtPmNmZy52ZWN0b3I7Cj4gPiArCQlwZXJfY3B1KHZlY3Rvcl9p cnEsIGNwdSlbdmVjdG9yXSA9IGRlc2M7Cj4gPiArCX0KPiA+ICsJLyogTWFyayB0aGUgZnJlZSB2 ZWN0b3JzICovCj4gPiArCWZvciAodmVjdG9yID0gMDsgdmVjdG9yIDwgTlJfVkVDVE9SUzsgKyt2 ZWN0b3IpIHsKPiA+ICsJCWRlc2MgPSBwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbdmVjdG9yXTsK PiA+ICsJCWlmIChJU19FUlJfT1JfTlVMTChkZXNjKSkKPiA+ICsJCQljb250aW51ZTsKPiA+ICAK PiA+IC12b2lkIGxhcGljX29mZmxpbmUodm9pZCkKPiA+IC17Cj4gPiAtCWxvY2tfdmVjdG9yX2xv Y2soKTsKPiA+IC0JaXJxX21hdHJpeF9vZmZsaW5lKHZlY3Rvcl9tYXRyaXgpOwo+ID4gLQl1bmxv Y2tfdmVjdG9yX2xvY2soKTsKPiA+ICsJCWRhdGEgPSBhcGljX2NoaXBfZGF0YShpcnFfZGVzY19n ZXRfaXJxX2RhdGEoZGVzYykpOwo+ID4gKwkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgZGF0 YS0+ZG9tYWluKSkKPiA+ICsJCQlwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbdmVjdG9yXSA9IFZF Q1RPUl9VTlVTRUQ7Cj4gPiArCX0KPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIGludCBhcGljX3Nl dF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmlycWQsCj4gPiAtCQkJICAgICBjb25zdCBzdHJ1 Y3QgY3B1bWFzayAqZGVzdCwgYm9vbCBmb3JjZSkKPiA+ICsvKgo+ID4gKyAqIFNldHVwIHRoZSB2 ZWN0b3IgdG8gaXJxIG1hcHBpbmdzLiBNdXN0IGJlIGNhbGxlZCB3aXRoIHZlY3Rvcl9sb2NrIGhl bGQuCj4gPiArICovCj4gPiArdm9pZCBzZXR1cF92ZWN0b3JfaXJxKGludCBjcHUpCj4gPiAgewo+ ID4gLQlzdHJ1Y3QgYXBpY19jaGlwX2RhdGEgKmFwaWNkID0gYXBpY19jaGlwX2RhdGEoaXJxZCk7 Cj4gPiAtCWludCBlcnI7Cj4gPiArCWludCBpcnE7Cj4gPiAgCj4gPiArCWxvY2tkZXBfYXNzZXJ0 X2hlbGQoJnZlY3Rvcl9sb2NrKTsKPiA+ICAJLyoKPiA+IC0JICogQ29yZSBjb2RlIGNhbiBjYWxs IGhlcmUgZm9yIGluYWN0aXZlIGludGVycnVwdHMuIEZvciBpbmFjdGl2ZQo+ID4gLQkgKiBpbnRl cnJ1cHRzIHdoaWNoIHVzZSBtYW5hZ2VkIG9yIHJlc2VydmF0aW9uIG1vZGUgdGhlcmUgaXMgbm8K PiA+IC0JICogcG9pbnQgaW4gZ29pbmcgdGhyb3VnaCB0aGUgdmVjdG9yIGFzc2lnbm1lbnQgcmln aHQgbm93IGFzIHRoZQo+ID4gLQkgKiBhY3RpdmF0aW9uIHdpbGwgYXNzaWduIGEgdmVjdG9yIHdo aWNoIGZpdHMgdGhlIGRlc3RpbmF0aW9uCj4gPiAtCSAqIGNwdW1hc2suIExldCB0aGUgY29yZSBj b2RlIHN0b3JlIHRoZSBkZXN0aW5hdGlvbiBtYXNrIGFuZCBiZQo+ID4gLQkgKiBkb25lIHdpdGgg aXQuCj4gPiArCSAqIE9uIG1vc3Qgb2YgdGhlIHBsYXRmb3JtcywgbGVnYWN5IFBJQyBkZWxpdmVy cyB0aGUgaW50ZXJydXB0cyBvbiB0aGUKPiA+ICsJICogYm9vdCBjcHUuIEJ1dCB0aGVyZSBhcmUg Y2VydGFpbiBwbGF0Zm9ybXMgd2hlcmUgUElDIGludGVycnVwdHMgYXJlCj4gPiArCSAqIGRlbGl2 ZXJlZCB0byBtdWx0aXBsZSBjcHUncy4gSWYgdGhlIGxlZ2FjeSBJUlEgaXMgaGFuZGxlZCBieSB0 aGUKPiA+ICsJICogbGVnYWN5IFBJQywgZm9yIHRoZSBuZXcgY3B1IHRoYXQgaXMgY29taW5nIG9u bGluZSwgc2V0dXAgdGhlIHN0YXRpYwo+ID4gKwkgKiBsZWdhY3kgdmVjdG9yIHRvIGlycSBtYXBw aW5nOgo+ID4gIAkgKi8KPiA+IC0JaWYgKCFpcnFkX2lzX2FjdGl2YXRlZChpcnFkKSAmJgo+ID4g LQkgICAgKGFwaWNkLT5pc19tYW5hZ2VkIHx8IGFwaWNkLT5jYW5fcmVzZXJ2ZSkpCj4gPiAtCQly ZXR1cm4gSVJRX1NFVF9NQVNLX09LOwo+ID4gKwlmb3IgKGlycSA9IDA7IGlycSA8IG5yX2xlZ2Fj eV9pcnFzKCk7IGlycSsrKQo+ID4gKwkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW0lTQV9JUlFf VkVDVE9SKGlycSldID0gaXJxX3RvX2Rlc2MoaXJxKTsKPiA+ICAKPiA+IC0JcmF3X3NwaW5fbG9j aygmdmVjdG9yX2xvY2spOwo+ID4gLQljcHVtYXNrX2FuZCh2ZWN0b3Jfc2VhcmNobWFzaywgZGVz dCwgY3B1X29ubGluZV9tYXNrKTsKPiA+IC0JaWYgKGlycWRfYWZmaW5pdHlfaXNfbWFuYWdlZChp cnFkKSkKPiA+IC0JCWVyciA9IGFzc2lnbl9tYW5hZ2VkX3ZlY3RvcihpcnFkLCB2ZWN0b3Jfc2Vh cmNobWFzayk7Cj4gPiAtCWVsc2UKPiA+IC0JCWVyciA9IGFzc2lnbl92ZWN0b3JfbG9ja2VkKGly cWQsIHZlY3Rvcl9zZWFyY2htYXNrKTsKPiA+IC0JcmF3X3NwaW5fdW5sb2NrKCZ2ZWN0b3JfbG9j ayk7Cj4gPiAtCXJldHVybiBlcnIgPyBlcnIgOiBJUlFfU0VUX01BU0tfT0s7Cj4gPiArCV9fc2V0 dXBfdmVjdG9yX2lycShjcHUpOwo+ID4gIH0KPiA+ICAKPiA+IC0jZWxzZQo+ID4gLSMgZGVmaW5l IGFwaWNfc2V0X2FmZmluaXR5CU5VTEwKPiA+IC0jZW5kaWYKPiA+IC0KPiA+IC1zdGF0aWMgaW50 IGFwaWNfcmV0cmlnZ2VyX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmlycWQpCj4gPiArc3RhdGljIGlu dCBhcGljX3JldHJpZ2dlcl9pcnEoc3RydWN0IGlycV9kYXRhICppcnFfZGF0YSkKPiA+ICB7Cj4g PiAtCXN0cnVjdCBhcGljX2NoaXBfZGF0YSAqYXBpY2QgPSBhcGljX2NoaXBfZGF0YShpcnFkKTsK PiA+ICsJc3RydWN0IGFwaWNfY2hpcF9kYXRhICpkYXRhID0gYXBpY19jaGlwX2RhdGEoaXJxX2Rh dGEpOwo+ID4gIAl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4gKwlpbnQgY3B1Owo+ID4gIAo+ID4g IAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Cj4gPiAtCWFwaWMt PnNlbmRfSVBJKGFwaWNkLT5jcHUsIGFwaWNkLT52ZWN0b3IpOwo+ID4gKwljcHUgPSBjcHVtYXNr X2ZpcnN0X2FuZChkYXRhLT5kb21haW4sIGNwdV9vbmxpbmVfbWFzayk7Cj4gPiArCWFwaWMtPnNl bmRfSVBJX21hc2soY3B1bWFza19vZihjcHUpLCBkYXRhLT5jZmcudmVjdG9yKTsKPiA+ICAJcmF3 X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Cj4gPiAgCj4gPiAg CXJldHVybiAxOwo+ID4gIH0KPiA+ICAKPiA+IC12b2lkIGFwaWNfYWNrX2VkZ2Uoc3RydWN0IGly cV9kYXRhICppcnFkKQo+ID4gK3ZvaWQgYXBpY19hY2tfZWRnZShzdHJ1Y3QgaXJxX2RhdGEgKmRh dGEpCj4gPiAgewo+ID4gLQlpcnFfY29tcGxldGVfbW92ZShpcnFkX2NmZyhpcnFkKSk7Cj4gPiAt CWlycV9tb3ZlX2lycShpcnFkKTsKPiA+ICsJaXJxX2NvbXBsZXRlX21vdmUoaXJxZF9jZmcoZGF0 YSkpOwo+ID4gKwlpcnFfbW92ZV9pcnEoZGF0YSk7Cj4gPiAgCWFja19BUElDX2lycSgpOwo+ID4g IH0KPiA+ICAKPiA+ICtzdGF0aWMgaW50IGFwaWNfc2V0X2FmZmluaXR5KHN0cnVjdCBpcnFfZGF0 YSAqaXJxX2RhdGEsCj4gPiArCQkJICAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqZGVzdCwgYm9v bCBmb3JjZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBhcGljX2NoaXBfZGF0YSAqZGF0YSA9IGlycV9k YXRhLT5jaGlwX2RhdGE7Cj4gPiArCWludCBlcnIsIGlycSA9IGlycV9kYXRhLT5pcnE7Cj4gPiAr Cj4gPiArCWlmICghSVNfRU5BQkxFRChDT05GSUdfU01QKSkKPiA+ICsJCXJldHVybiAtRVBFUk07 Cj4gPiArCj4gPiArCWlmICghY3B1bWFza19pbnRlcnNlY3RzKGRlc3QsIGNwdV9vbmxpbmVfbWFz aykpCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICsJZXJyID0gYXNzaWduX2lycV92 ZWN0b3IoaXJxLCBkYXRhLCBkZXN0LCBpcnFfZGF0YSk7Cj4gPiArCXJldHVybiBlcnIgPyBlcnIg OiBJUlFfU0VUX01BU0tfT0s7Cj4gPiArfQo+ID4gKwo+ID4gIHN0YXRpYyBzdHJ1Y3QgaXJxX2No aXAgbGFwaWNfY29udHJvbGxlciA9IHsKPiA+ICAJLm5hbWUJCQk9ICJBUElDIiwKPiA+ICAJLmly cV9hY2sJCT0gYXBpY19hY2tfZWRnZSwKPiA+IEBAIC03ODEsOTggKzU2MCwxMTUgQEAgc3RhdGlj IHN0cnVjdCBpcnFfY2hpcCBsYXBpY19jb250cm9sbGVyID0gewo+ID4gIH07Cj4gPiAgCj4gPiAg I2lmZGVmIENPTkZJR19TTVAKPiA+ICtzdGF0aWMgdm9pZCBfX3NlbmRfY2xlYW51cF92ZWN0b3Io c3RydWN0IGFwaWNfY2hpcF9kYXRhICpkYXRhKQo+ID4gK3sKPiA+ICsJcmF3X3NwaW5fbG9jaygm dmVjdG9yX2xvY2spOwo+ID4gKwljcHVtYXNrX2FuZChkYXRhLT5vbGRfZG9tYWluLCBkYXRhLT5v bGRfZG9tYWluLCBjcHVfb25saW5lX21hc2spOwo+ID4gKwlkYXRhLT5tb3ZlX2luX3Byb2dyZXNz ID0gMDsKPiA+ICsJaWYgKCFjcHVtYXNrX2VtcHR5KGRhdGEtPm9sZF9kb21haW4pKQo+ID4gKwkJ YXBpYy0+c2VuZF9JUElfbWFzayhkYXRhLT5vbGRfZG9tYWluLCBJUlFfTU9WRV9DTEVBTlVQX1ZF Q1RPUik7Cj4gPiArCXJhd19zcGluX3VubG9jaygmdmVjdG9yX2xvY2spOwo+ID4gK30KPiA+ICAK PiA+IC1zdGF0aWMgdm9pZCBmcmVlX21vdmVkX3ZlY3RvcihzdHJ1Y3QgYXBpY19jaGlwX2RhdGEg KmFwaWNkKQo+ID4gK3ZvaWQgc2VuZF9jbGVhbnVwX3ZlY3RvcihzdHJ1Y3QgaXJxX2NmZyAqY2Zn KQo+ID4gIHsKPiA+IC0JdW5zaWduZWQgaW50IHZlY3RvciA9IGFwaWNkLT5wcmV2X3ZlY3RvcjsK PiA+IC0JdW5zaWduZWQgaW50IGNwdSA9IGFwaWNkLT5wcmV2X2NwdTsKPiA+IC0JYm9vbCBtYW5h Z2VkID0gYXBpY2QtPmlzX21hbmFnZWQ7Cj4gPiArCXN0cnVjdCBhcGljX2NoaXBfZGF0YSAqZGF0 YTsKPiA+ICAKPiA+IC0JLyoKPiA+IC0JICogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiBNYW5h Z2VkIGludGVycnVwdHMgYXJlIG5vdAo+ID4gLQkgKiBtaWdyYXRlZCBleGNlcHQgb24gQ1BVIGRv d24sIHdoaWNoIGRvZXMgbm90IGludm9sdmUgdGhlCj4gPiAtCSAqIGNsZWFudXAgdmVjdG9yLiBC dXQgdHJ5IHRvIGtlZXAgdGhlIGFjY291bnRpbmcgY29ycmVjdAo+ID4gLQkgKiBuZXZlcnRoZWxl c3MuCj4gPiAtCSAqLwo+ID4gLQlXQVJOX09OX09OQ0UobWFuYWdlZCk7Cj4gPiAtCj4gPiAtCXRy YWNlX3ZlY3Rvcl9mcmVlX21vdmVkKGFwaWNkLT5pcnEsIGNwdSwgdmVjdG9yLCBtYW5hZ2VkKTsK PiA+IC0JaXJxX21hdHJpeF9mcmVlKHZlY3Rvcl9tYXRyaXgsIGNwdSwgdmVjdG9yLCBtYW5hZ2Vk KTsKPiA+IC0JcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZlY3Rvcl0gPSBWRUNUT1JfVU5VU0VE Owo+ID4gLQlobGlzdF9kZWxfaW5pdCgmYXBpY2QtPmNsaXN0KTsKPiA+IC0JYXBpY2QtPnByZXZf dmVjdG9yID0gMDsKPiA+IC0JYXBpY2QtPm1vdmVfaW5fcHJvZ3Jlc3MgPSAwOwo+ID4gKwlkYXRh ID0gY29udGFpbmVyX29mKGNmZywgc3RydWN0IGFwaWNfY2hpcF9kYXRhLCBjZmcpOwo+ID4gKwlp ZiAoZGF0YS0+bW92ZV9pbl9wcm9ncmVzcykKPiA+ICsJCV9fc2VuZF9jbGVhbnVwX3ZlY3Rvcihk YXRhKTsKPiA+ICB9Cj4gPiAgCj4gPiAgYXNtbGlua2FnZSBfX3Zpc2libGUgdm9pZCBfX2lycV9l bnRyeSBzbXBfaXJxX21vdmVfY2xlYW51cF9pbnRlcnJ1cHQodm9pZCkKPiA+ICB7Cj4gPiAtCXN0 cnVjdCBobGlzdF9oZWFkICpjbGhlYWQgPSB0aGlzX2NwdV9wdHIoJmNsZWFudXBfbGlzdCk7Cj4g PiAtCXN0cnVjdCBhcGljX2NoaXBfZGF0YSAqYXBpY2Q7Cj4gPiAtCXN0cnVjdCBobGlzdF9ub2Rl ICp0bXA7Cj4gPiArCXVuc2lnbmVkIHZlY3RvciwgbWU7Cj4gPiAgCj4gPiAgCWVudGVyaW5nX2Fj a19pcnEoKTsKPiA+ICsKPiA+ICAJLyogUHJldmVudCB2ZWN0b3JzIHZhbmlzaGluZyB1bmRlciB1 cyAqLwo+ID4gIAlyYXdfc3Bpbl9sb2NrKCZ2ZWN0b3JfbG9jayk7Cj4gPiAgCj4gPiAtCWhsaXN0 X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYXBpY2QsIHRtcCwgY2xoZWFkLCBjbGlzdCkgewo+ID4gLQkJ dW5zaWduZWQgaW50IGlyciwgdmVjdG9yID0gYXBpY2QtPnByZXZfdmVjdG9yOwo+ID4gKwltZSA9 IHNtcF9wcm9jZXNzb3JfaWQoKTsKPiA+ICsJZm9yICh2ZWN0b3IgPSBGSVJTVF9FWFRFUk5BTF9W RUNUT1I7IHZlY3RvciA8IE5SX1ZFQ1RPUlM7IHZlY3RvcisrKSB7Cj4gPiArCQlzdHJ1Y3QgYXBp Y19jaGlwX2RhdGEgKmRhdGE7Cj4gPiArCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Cj4gPiArCQl1 bnNpZ25lZCBpbnQgaXJyOwo+ID4gKwo+ID4gKwlyZXRyeToKPiA+ICsJCWRlc2MgPSBfX3RoaXNf Y3B1X3JlYWQodmVjdG9yX2lycVt2ZWN0b3JdKTsKPiA+ICsJCWlmIChJU19FUlJfT1JfTlVMTChk ZXNjKSkKPiA+ICsJCQljb250aW51ZTsKPiA+ICsKPiA+ICsJCWlmICghcmF3X3NwaW5fdHJ5bG9j aygmZGVzYy0+bG9jaykpIHsKPiA+ICsJCQlyYXdfc3Bpbl91bmxvY2soJnZlY3Rvcl9sb2NrKTsK PiA+ICsJCQljcHVfcmVsYXgoKTsKPiA+ICsJCQlyYXdfc3Bpbl9sb2NrKCZ2ZWN0b3JfbG9jayk7 Cj4gPiArCQkJZ290byByZXRyeTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWRhdGEgPSBhcGljX2No aXBfZGF0YShpcnFfZGVzY19nZXRfaXJxX2RhdGEoZGVzYykpOwo+ID4gKwkJaWYgKCFkYXRhKQo+ ID4gKwkJCWdvdG8gdW5sb2NrOwo+ID4gIAo+ID4gIAkJLyoKPiA+IC0JCSAqIFBhcmFub2lhOiBD aGVjayBpZiB0aGUgdmVjdG9yIHRoYXQgbmVlZHMgdG8gYmUgY2xlYW5lZAo+ID4gLQkJICogdXAg aXMgcmVnaXN0ZXJlZCBhdCB0aGUgQVBJQ3MgSVJSLiBJZiBzbywgdGhlbiB0aGlzIGlzCj4gPiAt CQkgKiBub3QgdGhlIGJlc3QgdGltZSB0byBjbGVhbiBpdCB1cC4gQ2xlYW4gaXQgdXAgaW4gdGhl Cj4gPiAtCQkgKiBuZXh0IGF0dGVtcHQgYnkgc2VuZGluZyBhbm90aGVyIElSUV9NT1ZFX0NMRUFO VVBfVkVDVE9SCj4gPiAtCQkgKiB0byB0aGlzIENQVS4gSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1Ig aXMgdGhlIGxvd2VzdAo+ID4gLQkJICogcHJpb3JpdHkgZXh0ZXJuYWwgdmVjdG9yLCBzbyBvbiBy ZXR1cm4gZnJvbSB0aGlzCj4gPiAtCQkgKiBpbnRlcnJ1cHQgdGhlIGRldmljZSBpbnRlcnJ1cHQg d2lsbCBoYXBwZW4gZmlyc3QuCj4gPiArCQkgKiBOb3RoaW5nIHRvIGNsZWFudXAgaWYgaXJxIG1p Z3JhdGlvbiBpcyBpbiBwcm9ncmVzcwo+ID4gKwkJICogb3IgdGhpcyBjcHUgaXMgbm90IHNldCBp biB0aGUgY2xlYW51cCBtYXNrLgo+ID4gKwkJICovCj4gPiArCQlpZiAoZGF0YS0+bW92ZV9pbl9w cm9ncmVzcyB8fAo+ID4gKwkJICAgICFjcHVtYXNrX3Rlc3RfY3B1KG1lLCBkYXRhLT5vbGRfZG9t YWluKSkKPiA+ICsJCQlnb3RvIHVubG9jazsKPiA+ICsKPiA+ICsJCS8qCj4gPiArCQkgKiBXZSBo YXZlIHR3byBjYXNlcyB0byBoYW5kbGUgaGVyZToKPiA+ICsJCSAqIDEpIHZlY3RvciBpcyB1bmNo YW5nZWQgYnV0IHRoZSB0YXJnZXQgbWFzayBnb3QgcmVkdWNlZAo+ID4gKwkJICogMikgdmVjdG9y IGFuZCB0aGUgdGFyZ2V0IG1hc2sgaGFzIGNoYW5nZWQKPiA+ICsJCSAqCj4gPiArCQkgKiAjMSBp cyBvYnZpb3VzLCBidXQgaW4gIzIgd2UgaGF2ZSB0d28gdmVjdG9ycyB3aXRoIHRoZSBzYW1lCj4g PiArCQkgKiBpcnEgZGVzY3JpcHRvcjogdGhlIG9sZCBhbmQgdGhlIG5ldyB2ZWN0b3IuIFNvIHdl IG5lZWQgdG8KPiA+ICsJCSAqIG1ha2Ugc3VyZSB0aGF0IHdlIG9ubHkgY2xlYW51cCB0aGUgb2xk IHZlY3Rvci4gVGhlIG5ldwo+ID4gKwkJICogdmVjdG9yIGhhcyB0aGUgY3VycmVudCBAdmVjdG9y IG51bWJlciBpbiB0aGUgY29uZmlnIGFuZAo+ID4gKwkJICogdGhpcyBjcHUgaXMgcGFydCBvZiB0 aGUgdGFyZ2V0IG1hc2suIFdlIGJldHRlciBsZWF2ZSB0aGF0Cj4gPiArCQkgKiBvbmUgYWxvbmUu Cj4gPiAgCQkgKi8KPiA+ICsJCWlmICh2ZWN0b3IgPT0gZGF0YS0+Y2ZnLnZlY3RvciAmJgo+ID4g KwkJICAgIGNwdW1hc2tfdGVzdF9jcHUobWUsIGRhdGEtPmRvbWFpbikpCj4gPiArCQkJZ290byB1 bmxvY2s7Cj4gPiArCj4gPiAgCQlpcnIgPSBhcGljX3JlYWQoQVBJQ19JUlIgKyAodmVjdG9yIC8g MzIgKiAweDEwKSk7Cj4gPiAtCQlpZiAoaXJyICYgKDFVIDw8ICh2ZWN0b3IgJSAzMikpKSB7Cj4g PiArCQkvKgo+ID4gKwkJICogQ2hlY2sgaWYgdGhlIHZlY3RvciB0aGF0IG5lZWRzIHRvIGJlIGNs ZWFuZWR1cCBpcwo+ID4gKwkJICogcmVnaXN0ZXJlZCBhdCB0aGUgY3B1J3MgSVJSLiBJZiBzbywg dGhlbiB0aGlzIGlzIG5vdAo+ID4gKwkJICogdGhlIGJlc3QgdGltZSB0byBjbGVhbiBpdCB1cC4g TGV0cyBjbGVhbiBpdCB1cCBpbiB0aGUKPiA+ICsJCSAqIG5leHQgYXR0ZW1wdCBieSBzZW5kaW5n IGFub3RoZXIgSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1IKPiA+ICsJCSAqIHRvIG15c2VsZi4KPiA+ ICsJCSAqLwo+ID4gKwkJaWYgKGlyciAgJiAoMSA8PCAodmVjdG9yICUgMzIpKSkgewo+ID4gIAkJ CWFwaWMtPnNlbmRfSVBJX3NlbGYoSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1IpOwo+ID4gLQkJCWNv bnRpbnVlOwo+ID4gKwkJCWdvdG8gdW5sb2NrOwo+ID4gIAkJfQo+ID4gLQkJZnJlZV9tb3ZlZF92 ZWN0b3IoYXBpY2QpOwo+ID4gKwkJX190aGlzX2NwdV93cml0ZSh2ZWN0b3JfaXJxW3ZlY3Rvcl0s IFZFQ1RPUl9VTlVTRUQpOwo+ID4gKwkJY3B1bWFza19jbGVhcl9jcHUobWUsIGRhdGEtPm9sZF9k b21haW4pOwo+ID4gK3VubG9jazoKPiA+ICsJCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7 Cj4gPiAgCX0KPiA+ICAKPiA+ICAJcmF3X3NwaW5fdW5sb2NrKCZ2ZWN0b3JfbG9jayk7Cj4gPiAt CWV4aXRpbmdfaXJxKCk7Cj4gPiAtfQo+ID4gIAo+ID4gLXN0YXRpYyB2b2lkIF9fc2VuZF9jbGVh bnVwX3ZlY3RvcihzdHJ1Y3QgYXBpY19jaGlwX2RhdGEgKmFwaWNkKQo+ID4gLXsKPiA+IC0JdW5z aWduZWQgaW50IGNwdTsKPiA+IC0KPiA+IC0JcmF3X3NwaW5fbG9jaygmdmVjdG9yX2xvY2spOwo+ ID4gLQlhcGljZC0+bW92ZV9pbl9wcm9ncmVzcyA9IDA7Cj4gPiAtCWNwdSA9IGFwaWNkLT5wcmV2 X2NwdTsKPiA+IC0JaWYgKGNwdV9vbmxpbmUoY3B1KSkgewo+ID4gLQkJaGxpc3RfYWRkX2hlYWQo JmFwaWNkLT5jbGlzdCwgcGVyX2NwdV9wdHIoJmNsZWFudXBfbGlzdCwgY3B1KSk7Cj4gPiAtCQlh cGljLT5zZW5kX0lQSShjcHUsIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SKTsKPiA+IC0JfSBlbHNl IHsKPiA+IC0JCWFwaWNkLT5wcmV2X3ZlY3RvciA9IDA7Cj4gPiAtCX0KPiA+IC0JcmF3X3NwaW5f dW5sb2NrKCZ2ZWN0b3JfbG9jayk7Cj4gPiAtfQo+ID4gLQo+ID4gLXZvaWQgc2VuZF9jbGVhbnVw X3ZlY3RvcihzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQo+ID4gLXsKPiA+IC0Jc3RydWN0IGFwaWNfY2hp cF9kYXRhICphcGljZDsKPiA+IC0KPiA+IC0JYXBpY2QgPSBjb250YWluZXJfb2YoY2ZnLCBzdHJ1 Y3QgYXBpY19jaGlwX2RhdGEsIGh3X2lycV9jZmcpOwo+ID4gLQlpZiAoYXBpY2QtPm1vdmVfaW5f cHJvZ3Jlc3MpCj4gPiAtCQlfX3NlbmRfY2xlYW51cF92ZWN0b3IoYXBpY2QpOwo+ID4gKwlleGl0 aW5nX2lycSgpOwo+ID4gIH0KPiA+ICAKPiA+ICBzdGF0aWMgdm9pZCBfX2lycV9jb21wbGV0ZV9t b3ZlKHN0cnVjdCBpcnFfY2ZnICpjZmcsIHVuc2lnbmVkIHZlY3RvcikKPiA+ICB7Cj4gPiAtCXN0 cnVjdCBhcGljX2NoaXBfZGF0YSAqYXBpY2Q7Cj4gPiArCXVuc2lnbmVkIG1lOwo+ID4gKwlzdHJ1 Y3QgYXBpY19jaGlwX2RhdGEgKmRhdGE7Cj4gPiAgCj4gPiAtCWFwaWNkID0gY29udGFpbmVyX29m KGNmZywgc3RydWN0IGFwaWNfY2hpcF9kYXRhLCBod19pcnFfY2ZnKTsKPiA+IC0JaWYgKGxpa2Vs eSghYXBpY2QtPm1vdmVfaW5fcHJvZ3Jlc3MpKQo+ID4gKwlkYXRhID0gY29udGFpbmVyX29mKGNm Zywgc3RydWN0IGFwaWNfY2hpcF9kYXRhLCBjZmcpOwo+ID4gKwlpZiAobGlrZWx5KCFkYXRhLT5t b3ZlX2luX3Byb2dyZXNzKSkKPiA+ICAJCXJldHVybjsKPiA+ICAKPiA+IC0JaWYgKHZlY3RvciA9 PSBhcGljZC0+dmVjdG9yICYmIGFwaWNkLT5jcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQo+ID4g LQkJX19zZW5kX2NsZWFudXBfdmVjdG9yKGFwaWNkKTsKPiA+ICsJbWUgPSBzbXBfcHJvY2Vzc29y X2lkKCk7Cj4gPiArCWlmICh2ZWN0b3IgPT0gZGF0YS0+Y2ZnLnZlY3RvciAmJiBjcHVtYXNrX3Rl c3RfY3B1KG1lLCBkYXRhLT5kb21haW4pKQo+ID4gKwkJX19zZW5kX2NsZWFudXBfdmVjdG9yKGRh dGEpOwo+ID4gIH0KPiA+ICAKPiA+ICB2b2lkIGlycV9jb21wbGV0ZV9tb3ZlKHN0cnVjdCBpcnFf Y2ZnICpjZmcpCj4gPiBAQCAtODg1LDkgKzY4MSwxMCBAQCB2b2lkIGlycV9jb21wbGV0ZV9tb3Zl KHN0cnVjdCBpcnFfY2ZnICpjZmcpCj4gPiAgICovCj4gPiAgdm9pZCBpcnFfZm9yY2VfY29tcGxl dGVfbW92ZShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCj4gPiAgewo+ID4gLQlzdHJ1Y3QgYXBpY19j aGlwX2RhdGEgKmFwaWNkOwo+ID4gLQlzdHJ1Y3QgaXJxX2RhdGEgKmlycWQ7Cj4gPiAtCXVuc2ln bmVkIGludCB2ZWN0b3I7Cj4gPiArCXN0cnVjdCBpcnFfZGF0YSAqaXJxZGF0YTsKPiA+ICsJc3Ry dWN0IGFwaWNfY2hpcF9kYXRhICpkYXRhOwo+ID4gKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwo+ID4g Kwl1bnNpZ25lZCBpbnQgY3B1Owo+ID4gIAo+ID4gIAkvKgo+ID4gIAkgKiBUaGUgZnVuY3Rpb24g aXMgY2FsbGVkIGZvciBhbGwgZGVzY3JpcHRvcnMgcmVnYXJkbGVzcyBvZiB3aGljaAo+ID4gQEAg LTg5OCwzMSArNjk1LDQzIEBAIHZvaWQgaXJxX2ZvcmNlX2NvbXBsZXRlX21vdmUoc3RydWN0IGly cV9kZXNjICpkZXNjKQo+ID4gIAkgKiBDaGVjayBmaXJzdCB0aGF0IHRoZSBjaGlwX2RhdGEgaXMg d2hhdCB3ZSBleHBlY3QKPiA+ICAJICogKGFwaWNfY2hpcF9kYXRhKSBiZWZvcmUgdG91Y2hpbmcg aXQgYW55IGZ1cnRoZXIuCj4gPiAgCSAqLwo+ID4gLQlpcnFkID0gaXJxX2RvbWFpbl9nZXRfaXJx X2RhdGEoeDg2X3ZlY3Rvcl9kb21haW4sCj4gPiAtCQkJCSAgICAgICBpcnFfZGVzY19nZXRfaXJx KGRlc2MpKTsKPiA+IC0JaWYgKCFpcnFkKQo+ID4gKwlpcnFkYXRhID0gaXJxX2RvbWFpbl9nZXRf aXJxX2RhdGEoeDg2X3ZlY3Rvcl9kb21haW4sCj4gPiArCQkJCQkgIGlycV9kZXNjX2dldF9pcnEo ZGVzYykpOwo+ID4gKwlpZiAoIWlycWRhdGEpCj4gPiAgCQlyZXR1cm47Cj4gPiAgCj4gPiAtCXJh d19zcGluX2xvY2soJnZlY3Rvcl9sb2NrKTsKPiA+IC0JYXBpY2QgPSBhcGljX2NoaXBfZGF0YShp cnFkKTsKPiA+IC0JaWYgKCFhcGljZCkKPiA+IC0JCWdvdG8gdW5sb2NrOwo+ID4gKwlkYXRhID0g YXBpY19jaGlwX2RhdGEoaXJxZGF0YSk7Cj4gPiArCWNmZyA9IGRhdGEgPyAmZGF0YS0+Y2ZnIDog TlVMTDsKPiA+ICAKPiA+IC0JLyoKPiA+IC0JICogSWYgcHJldl92ZWN0b3IgaXMgZW1wdHksIG5v IGFjdGlvbiByZXF1aXJlZC4KPiA+IC0JICovCj4gPiAtCXZlY3RvciA9IGFwaWNkLT5wcmV2X3Zl Y3RvcjsKPiA+IC0JaWYgKCF2ZWN0b3IpCj4gPiAtCQlnb3RvIHVubG9jazsKPiA+ICsJaWYgKCFj ZmcpCj4gPiArCQlyZXR1cm47Cj4gPiAgCj4gPiAgCS8qCj4gPiAtCSAqIFRoaXMgaXMgdHJpY2t5 LiBJZiB0aGUgY2xlYW51cCBvZiB0aGUgb2xkIHZlY3RvciBoYXMgbm90IGJlZW4KPiA+ICsJICog VGhpcyBpcyB0cmlja3kuIElmIHRoZSBjbGVhbnVwIG9mIEBkYXRhLT5vbGRfZG9tYWluIGhhcyBu b3QgYmVlbgo+ID4gIAkgKiBkb25lIHlldCwgdGhlbiB0aGUgZm9sbG93aW5nIHNldGFmZmluaXR5 IGNhbGwgd2lsbCBmYWlsIHdpdGgKPiA+ICAJICogLUVCVVNZLiBUaGlzIGNhbiBsZWF2ZSB0aGUg aW50ZXJydXB0IGluIGEgc3RhbGUgc3RhdGUuCj4gPiAgCSAqCj4gPiAgCSAqIEFsbCBDUFVzIGFy ZSBzdHVjayBpbiBzdG9wIG1hY2hpbmUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIHNvCj4gPiAg CSAqIGNhbGxpbmcgX19pcnFfY29tcGxldGVfbW92ZSgpIHdvdWxkIGJlIGNvbXBsZXRlbHkgcG9p bnRsZXNzLgo+ID4gLQkgKgo+ID4gKwkgKi8KPiA+ICsJcmF3X3NwaW5fbG9jaygmdmVjdG9yX2xv Y2spOwo+ID4gKwkvKgo+ID4gKwkgKiBDbGVhbiBvdXQgYWxsIG9mZmxpbmUgY3B1cyAoaW5jbHVk aW5nIHRoZSBvdXRnb2luZyBvbmUpIGZyb20gdGhlCj4gPiArCSAqIG9sZF9kb21haW4gbWFzay4K PiA+ICsJICovCj4gPiArCWNwdW1hc2tfYW5kKGRhdGEtPm9sZF9kb21haW4sIGRhdGEtPm9sZF9k b21haW4sIGNwdV9vbmxpbmVfbWFzayk7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIElmIG1vdmVf aW5fcHJvZ3Jlc3MgaXMgY2xlYXJlZCBhbmQgdGhlIG9sZF9kb21haW4gbWFzayBpcyBlbXB0eSwK PiA+ICsJICogdGhlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGNsZWFudXAuIGZpeHVwX2lycXMoKSB3 aWxsIHRha2UgY2FyZSBvZgo+ID4gKwkgKiB0aGUgc3RhbGUgdmVjdG9ycyBvbiB0aGUgb3V0Z29p bmcgY3B1Lgo+ID4gKwkgKi8KPiA+ICsJaWYgKCFkYXRhLT5tb3ZlX2luX3Byb2dyZXNzICYmIGNw dW1hc2tfZW1wdHkoZGF0YS0+b2xkX2RvbWFpbikpIHsKPiA+ICsJCXJhd19zcGluX3VubG9jaygm dmVjdG9yX2xvY2spOwo+ID4gKwkJcmV0dXJuOwo+ID4gKwl9Cj4gPiArCj4gPiArCS8qCj4gPiAg CSAqIDEpIFRoZSBpbnRlcnJ1cHQgaXMgaW4gbW92ZV9pbl9wcm9ncmVzcyBzdGF0ZS4gVGhhdCBt ZWFucyB0aGF0IHdlCj4gPiAgCSAqICAgIGhhdmUgbm90IHNlZW4gYW4gaW50ZXJydXB0IHNpbmNl IHRoZSBpb19hcGljIHdhcyByZXByb2dyYW1tZWQgdG8KPiA+ICAJICogICAgdGhlIG5ldyB2ZWN0 b3IuCj4gPiBAQCAtOTMwLDcgKzczOSw3IEBAIHZvaWQgaXJxX2ZvcmNlX2NvbXBsZXRlX21vdmUo c3RydWN0IGlycV9kZXNjICpkZXNjKQo+ID4gIAkgKiAyKSBUaGUgaW50ZXJydXB0IGhhcyBmaXJl ZCBvbiB0aGUgbmV3IHZlY3RvciwgYnV0IHRoZSBjbGVhbnVwIElQSXMKPiA+ICAJICogICAgaGF2 ZSBub3QgYmVlbiBwcm9jZXNzZWQgeWV0Lgo+ID4gIAkgKi8KPiA+IC0JaWYgKGFwaWNkLT5tb3Zl X2luX3Byb2dyZXNzKSB7Cj4gPiArCWlmIChkYXRhLT5tb3ZlX2luX3Byb2dyZXNzKSB7Cj4gPiAg CQkvKgo+ID4gIAkJICogSW4gdGhlb3J5IHRoZXJlIGlzIGEgcmFjZToKPiA+ICAJCSAqCj4gPiBA QCAtOTY0LDQzICs3NzMsMjEgQEAgdm9pZCBpcnFfZm9yY2VfY29tcGxldGVfbW92ZShzdHJ1Y3Qg aXJxX2Rlc2MgKmRlc2MpCj4gPiAgCQkgKiBhcmVhIGFyaXNlcy4KPiA+ICAJCSAqLwo+ID4gIAkJ cHJfd2FybigiSVJRIGZpeHVwOiBpcnEgJWQgbW92ZSBpbiBwcm9ncmVzcywgb2xkIHZlY3RvciAl ZFxuIiwKPiA+IC0JCQlpcnFkLT5pcnEsIHZlY3Rvcik7Cj4gPiArCQkJaXJxZGF0YS0+aXJxLCBj ZmctPm9sZF92ZWN0b3IpOwo+ID4gIAl9Cj4gPiAtCWZyZWVfbW92ZWRfdmVjdG9yKGFwaWNkKTsK PiA+IC11bmxvY2s6Cj4gPiAtCXJhd19zcGluX3VubG9jaygmdmVjdG9yX2xvY2spOwo+ID4gLX0K PiA+IC0KPiA+IC0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCj4gPiAtLyoKPiA+IC0gKiBOb3Rl LCB0aGlzIGlzIG5vdCBhY2N1cmF0ZSBhY2NvdW50aW5nLCBidXQgYXQgbGVhc3QgZ29vZCBlbm91 Z2ggdG8KPiA+IC0gKiBwcmV2ZW50IHRoYXQgdGhlIGFjdHVhbCBpbnRlcnJ1cHQgbW92ZSB3aWxs IHJ1biBvdXQgb2YgdmVjdG9ycy4KPiA+IC0gKi8KPiA+IC1pbnQgbGFwaWNfY2FuX3VucGx1Z19j cHUodm9pZCkKPiA+IC17Cj4gPiAtCXVuc2lnbmVkIGludCByc3ZkLCBhdmwsIHRvbW92ZSwgY3B1 ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwo+ID4gLQlpbnQgcmV0ID0gMDsKPiA+ICsJLyoKPiA+ICsJ ICogSWYgb2xkX2RvbWFpbiBpcyBub3QgZW1wdHksIHRoZW4gb3RoZXIgY3B1cyBzdGlsbCBoYXZl IHRoZSBpcnEKPiA+ICsJICogZGVzY3JpcHRvciBzZXQgaW4gdGhlaXIgdmVjdG9yIGFycmF5LiBD bGVhbiBpdCB1cC4KPiA+ICsJICovCj4gPiArCWZvcl9lYWNoX2NwdShjcHUsIGRhdGEtPm9sZF9k b21haW4pCj4gPiArCQlwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbY2ZnLT5vbGRfdmVjdG9yXSA9 IFZFQ1RPUl9VTlVTRUQ7Cj4gPiAgCj4gPiAtCXJhd19zcGluX2xvY2soJnZlY3Rvcl9sb2NrKTsK PiA+IC0JdG9tb3ZlID0gaXJxX21hdHJpeF9hbGxvY2F0ZWQodmVjdG9yX21hdHJpeCk7Cj4gPiAt CWF2bCA9IGlycV9tYXRyaXhfYXZhaWxhYmxlKHZlY3Rvcl9tYXRyaXgsIHRydWUpOwo+ID4gLQlp ZiAoYXZsIDwgdG9tb3ZlKSB7Cj4gPiAtCQlwcl93YXJuKCJDUFUgJXUgaGFzICV1IHZlY3RvcnMs ICV1IGF2YWlsYWJsZS4gQ2Fubm90IGRpc2FibGUgQ1BVXG4iLAo+ID4gLQkJCWNwdSwgdG9tb3Zl LCBhdmwpOwo+ID4gLQkJcmV0ID0gLUVOT1NQQzsKPiA+IC0JCWdvdG8gb3V0Owo+ID4gLQl9Cj4g PiAtCXJzdmQgPSBpcnFfbWF0cml4X3Jlc2VydmVkKHZlY3Rvcl9tYXRyaXgpOwo+ID4gLQlpZiAo YXZsIDwgcnN2ZCkgewo+ID4gLQkJcHJfd2FybigiUmVzZXJ2ZWQgdmVjdG9ycyAldSA+IGF2YWls YWJsZSAldS4gSVJRIHJlcXVlc3QgbWF5IGZhaWxcbiIsCj4gPiAtCQkJcnN2ZCwgYXZsKTsKPiA+ IC0JfQo+ID4gLW91dDoKPiA+ICsJLyogQ2xlYW51cCB0aGUgbGVmdCBvdmVycyBvZiB0aGUgKGhh bGYgZmluaXNoZWQpIG1vdmUgKi8KPiA+ICsJY3B1bWFza19jbGVhcihkYXRhLT5vbGRfZG9tYWlu KTsKPiA+ICsJZGF0YS0+bW92ZV9pbl9wcm9ncmVzcyA9IDA7Cj4gPiAgCXJhd19zcGluX3VubG9j aygmdmVjdG9yX2xvY2spOwo+ID4gLQlyZXR1cm4gcmV0Owo+ID4gIH0KPiA+IC0jZW5kaWYgLyog SE9UUExVR19DUFUgKi8KPiA+IC0jZW5kaWYgLyogU01QICovCj4gPiArI2VuZGlmCj4gPiAgCj4g PiAgc3RhdGljIHZvaWQgX19pbml0IHByaW50X0FQSUNfZmllbGQoaW50IGJhc2UpCj4gPiAgewo+ ID4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpYy5oIGIvYXJjaC94ODYv a2VybmVsL2FwaWMveDJhcGljLmgKPiA+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5k ZXggYjEwN2RlMzgxY2I1Li4wMDAwMDAwMDAwMDAKPiA+IC0tLSBhL2FyY2gveDg2L2tlcm5lbC9h cGljL3gyYXBpYy5oCj4gPiArKysgL2Rldi9udWxsCj4gPiBAQCAtMSw5ICswLDAgQEAKPiA+IC0v KiBDb21tb24gYml0cyBmb3IgWDJBUElDIGNsdXN0ZXIvcGh5c2ljYWwgbW9kZXMuICovCj4gPiAt Cj4gPiAtaW50IHgyYXBpY19hcGljX2lkX3ZhbGlkKGludCBhcGljaWQpOwo+ID4gLWludCB4MmFw aWNfYXBpY19pZF9yZWdpc3RlcmVkKHZvaWQpOwo+ID4gLXZvaWQgX194MmFwaWNfc2VuZF9JUElf ZGVzdCh1bnNpZ25lZCBpbnQgYXBpY2lkLCBpbnQgdmVjdG9yLCB1bnNpZ25lZCBpbnQgZGVzdCk7 Cj4gPiAtdW5zaWduZWQgaW50IHgyYXBpY19nZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIGlkKTsK PiA+IC11MzIgeDJhcGljX3NldF9hcGljX2lkKHVuc2lnbmVkIGludCBpZCk7Cj4gPiAtaW50IHgy YXBpY19waHlzX3BrZ19pZChpbnQgaW5pdGlhbF9hcGljaWQsIGludCBpbmRleF9tc2IpOwo+ID4g LXZvaWQgeDJhcGljX3NlbmRfSVBJX3NlbGYoaW50IHZlY3Rvcik7Cj4gPiBkaWZmIC0tZ2l0IGEv YXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX2NsdXN0ZXIuYyBiL2FyY2gveDg2L2tlcm5lbC9h cGljL3gyYXBpY19jbHVzdGVyLmMKPiA+IGluZGV4IDYyMmYxM2NhOGE5NC4uZTIxNmNmM2Q2NGQy IDEwMDY0NAo+ID4gLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX2NsdXN0ZXIuYwo+ ID4gKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX2NsdXN0ZXIuYwo+ID4gQEAgLTks MjQgKzksMjIgQEAKPiA+ICAjaW5jbHVkZSA8bGludXgvY3B1Lmg+Cj4gPiAgCj4gPiAgI2luY2x1 ZGUgPGFzbS9zbXAuaD4KPiA+IC0jaW5jbHVkZSAieDJhcGljLmgiCj4gPiAtCj4gPiAtc3RydWN0 IGNsdXN0ZXJfbWFzayB7Cj4gPiAtCXVuc2lnbmVkIGludAljbHVzdGVyaWQ7Cj4gPiAtCWludAkJ bm9kZTsKPiA+IC0Jc3RydWN0IGNwdW1hc2sJbWFzazsKPiA+IC19Owo+ID4gKyNpbmNsdWRlIDxh c20veDJhcGljLmg+Cj4gPiAgCj4gPiAgc3RhdGljIERFRklORV9QRVJfQ1BVKHUzMiwgeDg2X2Nw dV90b19sb2dpY2FsX2FwaWNpZCk7Cj4gPiArc3RhdGljIERFRklORV9QRVJfQ1BVKGNwdW1hc2tf dmFyX3QsIGNwdXNfaW5fY2x1c3Rlcik7Cj4gPiAgc3RhdGljIERFRklORV9QRVJfQ1BVKGNwdW1h c2tfdmFyX3QsIGlwaV9tYXNrKTsKPiA+IC1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNs dXN0ZXJfbWFzayAqLCBjbHVzdGVyX21hc2tzKTsKPiA+IC1zdGF0aWMgc3RydWN0IGNsdXN0ZXJf bWFzayAqY2x1c3Rlcl9ob3RwbHVnX21hc2s7Cj4gPiAgCj4gPiAgc3RhdGljIGludCB4MmFwaWNf YWNwaV9tYWR0X29lbV9jaGVjayhjaGFyICpvZW1faWQsIGNoYXIgKm9lbV90YWJsZV9pZCkKPiA+ ICB7Cj4gPiAgCXJldHVybiB4MmFwaWNfZW5hYmxlZCgpOwo+ID4gIH0KPiA+ICAKPiA+ICtzdGF0 aWMgaW5saW5lIHUzMiB4MmFwaWNfY2x1c3RlcihpbnQgY3B1KQo+ID4gK3sKPiA+ICsJcmV0dXJu IHBlcl9jcHUoeDg2X2NwdV90b19sb2dpY2FsX2FwaWNpZCwgY3B1KSA+PiAxNjsKPiA+ICt9Cj4g PiArCj4gPiAgc3RhdGljIHZvaWQgeDJhcGljX3NlbmRfSVBJKGludCBjcHUsIGludCB2ZWN0b3Ip Cj4gPiAgewo+ID4gIAl1MzIgZGVzdCA9IHBlcl9jcHUoeDg2X2NwdV90b19sb2dpY2FsX2FwaWNp ZCwgY3B1KTsKPiA+IEBAIC0zOCwzNCArMzYsNDkgQEAgc3RhdGljIHZvaWQgeDJhcGljX3NlbmRf SVBJKGludCBjcHUsIGludCB2ZWN0b3IpCj4gPiAgc3RhdGljIHZvaWQKPiA+ICBfX3gyYXBpY19z ZW5kX0lQSV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yLCBpbnQg YXBpY19kZXN0KQo+ID4gIHsKPiA+IC0JdW5zaWduZWQgaW50IGNwdSwgY2x1c3RlcmNwdTsKPiA+ IC0Jc3RydWN0IGNwdW1hc2sgKnRtcG1zazsKPiA+ICsJc3RydWN0IGNwdW1hc2sgKmNwdXNfaW5f Y2x1c3Rlcl9wdHI7Cj4gPiArCXN0cnVjdCBjcHVtYXNrICppcGlfbWFza19wdHI7Cj4gPiArCXVu c2lnbmVkIGludCBjcHUsIHRoaXNfY3B1Owo+ID4gIAl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4g IAl1MzIgZGVzdDsKPiA+ICAKPiA+ICAJeDJhcGljX3dybXNyX2ZlbmNlKCk7Cj4gPiArCj4gPiAg CWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKPiA+ICAKPiA+IC0JdG1wbXNrID0gdGhpc19jcHVfY3B1 bWFza192YXJfcHRyKGlwaV9tYXNrKTsKPiA+IC0JY3B1bWFza19jb3B5KHRtcG1zaywgbWFzayk7 Cj4gPiAtCS8qIElmIElQSSBzaG91bGQgbm90IGJlIHNlbnQgdG8gc2VsZiwgY2xlYXIgY3VycmVu dCBDUFUgKi8KPiA+IC0JaWYgKGFwaWNfZGVzdCAhPSBBUElDX0RFU1RfQUxMSU5DKQo+ID4gLQkJ Y3B1bWFza19jbGVhcl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCB0bXBtc2spOwo+ID4gKwl0aGlz X2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKPiA+ICAKPiA+IC0JLyogQ29sbGFwc2UgY3B1cyBp biBhIGNsdXN0ZXIgc28gYSBzaW5nbGUgSVBJIHBlciBjbHVzdGVyIGlzIHNlbnQgKi8KPiA+IC0J Zm9yX2VhY2hfY3B1KGNwdSwgdG1wbXNrKSB7Cj4gPiAtCQlzdHJ1Y3QgY2x1c3Rlcl9tYXNrICpj bXNrID0gcGVyX2NwdShjbHVzdGVyX21hc2tzLCBjcHUpOwo+ID4gKwkvKgo+ID4gKwkgKiBXZSBh cmUgdG8gbW9kaWZ5IG1hc2ssIHNvIHdlIG5lZWQgYW4gb3duIGNvcHkKPiA+ICsJICogYW5kIGJl IHN1cmUgaXQncyBtYW5pcHVsYXRlZCB3aXRoIGlycSBvZmYuCj4gPiArCSAqLwo+ID4gKwlpcGlf bWFza19wdHIgPSB0aGlzX2NwdV9jcHVtYXNrX3Zhcl9wdHIoaXBpX21hc2spOwo+ID4gKwljcHVt YXNrX2NvcHkoaXBpX21hc2tfcHRyLCBtYXNrKTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogVGhl IGlkZWEgaXMgdG8gc2VuZCBvbmUgSVBJIHBlciBjbHVzdGVyLgo+ID4gKwkgKi8KPiA+ICsJZm9y X2VhY2hfY3B1KGNwdSwgaXBpX21hc2tfcHRyKSB7Cj4gPiArCQl1bnNpZ25lZCBsb25nIGk7Cj4g PiAgCj4gPiArCQljcHVzX2luX2NsdXN0ZXJfcHRyID0gcGVyX2NwdShjcHVzX2luX2NsdXN0ZXIs IGNwdSk7Cj4gPiAgCQlkZXN0ID0gMDsKPiA+IC0JCWZvcl9lYWNoX2NwdV9hbmQoY2x1c3RlcmNw dSwgdG1wbXNrLCAmY21zay0+bWFzaykKPiA+IC0JCQlkZXN0IHw9IHBlcl9jcHUoeDg2X2NwdV90 b19sb2dpY2FsX2FwaWNpZCwgY2x1c3RlcmNwdSk7Cj4gPiArCj4gPiArCQkvKiBDb2xsZWN0IGNw dXMgaW4gY2x1c3Rlci4gKi8KPiA+ICsJCWZvcl9lYWNoX2NwdV9hbmQoaSwgaXBpX21hc2tfcHRy LCBjcHVzX2luX2NsdXN0ZXJfcHRyKSB7Cj4gPiArCQkJaWYgKGFwaWNfZGVzdCA9PSBBUElDX0RF U1RfQUxMSU5DIHx8IGkgIT0gdGhpc19jcHUpCj4gPiArCQkJCWRlc3QgfD0gcGVyX2NwdSh4ODZf Y3B1X3RvX2xvZ2ljYWxfYXBpY2lkLCBpKTsKPiA+ICsJCX0KPiA+ICAKPiA+ICAJCWlmICghZGVz dCkKPiA+ICAJCQljb250aW51ZTsKPiA+ICAKPiA+ICAJCV9feDJhcGljX3NlbmRfSVBJX2Rlc3Qo ZGVzdCwgdmVjdG9yLCBhcGljLT5kZXN0X2xvZ2ljYWwpOwo+ID4gLQkJLyogUmVtb3ZlIGNsdXN0 ZXIgQ1BVcyBmcm9tIHRtcG1hc2sgKi8KPiA+IC0JCWNwdW1hc2tfYW5kbm90KHRtcG1zaywgdG1w bXNrLCAmY21zay0+bWFzayk7Cj4gPiArCQkvKgo+ID4gKwkJICogQ2x1c3RlciBzaWJsaW5nIGNw dXMgc2hvdWxkIGJlIGRpc2NhcmVkIG5vdyBzbwo+ID4gKwkJICogd2Ugd291bGQgbm90IHNlbmQg SVBJIHRoZW0gc2Vjb25kIHRpbWUuCj4gPiArCQkgKi8KPiA+ICsJCWNwdW1hc2tfYW5kbm90KGlw aV9tYXNrX3B0ciwgaXBpX21hc2tfcHRyLCBjcHVzX2luX2NsdXN0ZXJfcHRyKTsKPiA+ICAJfQo+ ID4gIAo+ID4gIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cj4gPiBAQCAtOTIsOTAgKzEwNSwx MjUgQEAgc3RhdGljIHZvaWQgeDJhcGljX3NlbmRfSVBJX2FsbChpbnQgdmVjdG9yKQo+ID4gIAlf X3gyYXBpY19zZW5kX0lQSV9tYXNrKGNwdV9vbmxpbmVfbWFzaywgdmVjdG9yLCBBUElDX0RFU1Rf QUxMSU5DKTsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIHUzMiB4MmFwaWNfY2FsY19hcGljaWQo dW5zaWduZWQgaW50IGNwdSkKPiA+ICtzdGF0aWMgaW50Cj4gPiAreDJhcGljX2NwdV9tYXNrX3Rv X2FwaWNpZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgc3RydWN0IGlycV9kYXRhICppcnFk YXRhLAo+ID4gKwkJCSAgdW5zaWduZWQgaW50ICphcGljaWQpCj4gPiAgewo+ID4gLQlyZXR1cm4g cGVyX2NwdSh4ODZfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkLCBjcHUpOwo+ID4gLX0KPiA+IC0KPiA+ IC1zdGF0aWMgdm9pZCBpbml0X3gyYXBpY19sZHIodm9pZCkKPiA+IC17Cj4gPiAtCXN0cnVjdCBj bHVzdGVyX21hc2sgKmNtc2sgPSB0aGlzX2NwdV9yZWFkKGNsdXN0ZXJfbWFza3MpOwo+ID4gLQl1 MzIgY2x1c3RlciwgYXBpY2lkID0gYXBpY19yZWFkKEFQSUNfTERSKTsKPiA+ICsJc3RydWN0IGNw dW1hc2sgKmVmZm1zayA9IGlycV9kYXRhX2dldF9lZmZlY3RpdmVfYWZmaW5pdHlfbWFzayhpcnFk YXRhKTsKPiA+ICAJdW5zaWduZWQgaW50IGNwdTsKPiA+ICsJdTMyIGRlc3QgPSAwOwo+ID4gKwl1 MTYgY2x1c3RlcjsKPiA+ICAKPiA+IC0JdGhpc19jcHVfd3JpdGUoeDg2X2NwdV90b19sb2dpY2Fs X2FwaWNpZCwgYXBpY2lkKTsKPiA+ICsJY3B1ID0gY3B1bWFza19maXJzdChtYXNrKTsKPiA+ICsJ aWYgKGNwdSA+PSBucl9jcHVfaWRzKQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiAgCj4gPiAt CWlmIChjbXNrKQo+ID4gLQkJZ290byB1cGRhdGU7Cj4gPiArCWRlc3QgPSBwZXJfY3B1KHg4Nl9j cHVfdG9fbG9naWNhbF9hcGljaWQsIGNwdSk7Cj4gPiArCWNsdXN0ZXIgPSB4MmFwaWNfY2x1c3Rl cihjcHUpOwo+ID4gIAo+ID4gLQljbHVzdGVyID0gYXBpY2lkID4+IDE2Owo+ID4gLQlmb3JfZWFj aF9vbmxpbmVfY3B1KGNwdSkgewo+ID4gLQkJY21zayA9IHBlcl9jcHUoY2x1c3Rlcl9tYXNrcywg Y3B1KTsKPiA+IC0JCS8qIE1hdGNoaW5nIGNsdXN0ZXIgZm91bmQuIExpbmsgYW5kIHVwZGF0ZSBp dC4gKi8KPiA+IC0JCWlmIChjbXNrICYmIGNtc2stPmNsdXN0ZXJpZCA9PSBjbHVzdGVyKQo+ID4g LQkJCWdvdG8gdXBkYXRlOwo+ID4gKwljcHVtYXNrX2NsZWFyKGVmZm1zayk7Cj4gPiArCWZvcl9l YWNoX2NwdShjcHUsIG1hc2spIHsKPiA+ICsJCWlmIChjbHVzdGVyICE9IHgyYXBpY19jbHVzdGVy KGNwdSkpCj4gPiArCQkJY29udGludWU7Cj4gPiArCQlkZXN0IHw9IHBlcl9jcHUoeDg2X2NwdV90 b19sb2dpY2FsX2FwaWNpZCwgY3B1KTsKPiA+ICsJCWNwdW1hc2tfc2V0X2NwdShjcHUsIGVmZm1z ayk7Cj4gPiAgCX0KPiA+IC0JY21zayA9IGNsdXN0ZXJfaG90cGx1Z19tYXNrOwo+ID4gLQljbHVz dGVyX2hvdHBsdWdfbWFzayA9IE5VTEw7Cj4gPiAtdXBkYXRlOgo+ID4gLQl0aGlzX2NwdV93cml0 ZShjbHVzdGVyX21hc2tzLCBjbXNrKTsKPiA+IC0JY3B1bWFza19zZXRfY3B1KHNtcF9wcm9jZXNz b3JfaWQoKSwgJmNtc2stPm1hc2spOwo+ID4gKwo+ID4gKwkqYXBpY2lkID0gZGVzdDsKPiA+ICsJ cmV0dXJuIDA7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyBpbnQgYWxsb2NfY2x1c3Rlcm1hc2so dW5zaWduZWQgaW50IGNwdSwgaW50IG5vZGUpCj4gPiArc3RhdGljIHZvaWQgaW5pdF94MmFwaWNf bGRyKHZvaWQpCj4gPiAgewo+ID4gLQlpZiAocGVyX2NwdShjbHVzdGVyX21hc2tzLCBjcHUpKQo+ ID4gLQkJcmV0dXJuIDA7Cj4gPiAtCS8qCj4gPiAtCSAqIElmIGEgaG90cGx1ZyBzcGFyZSBtYXNr IGV4aXN0cywgY2hlY2sgd2hldGhlciBpdCdzIG9uIHRoZSByaWdodAo+ID4gLQkgKiBub2RlLiBJ ZiBub3QsIGZyZWUgaXQgYW5kIGFsbG9jYXRlIGEgbmV3IG9uZS4KPiA+IC0JICovCj4gPiAtCWlm IChjbHVzdGVyX2hvdHBsdWdfbWFzaykgewo+ID4gLQkJaWYgKGNsdXN0ZXJfaG90cGx1Z19tYXNr LT5ub2RlID09IG5vZGUpCj4gPiAtCQkJcmV0dXJuIDA7Cj4gPiAtCQlrZnJlZShjbHVzdGVyX2hv dHBsdWdfbWFzayk7Cj4gPiAtCX0KPiA+ICsJdW5zaWduZWQgaW50IHRoaXNfY3B1ID0gc21wX3By b2Nlc3Nvcl9pZCgpOwo+ID4gKwl1bnNpZ25lZCBpbnQgY3B1Owo+ID4gIAo+ID4gLQljbHVzdGVy X2hvdHBsdWdfbWFzayA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKmNsdXN0ZXJfaG90cGx1Z19tYXNr KSwKPiA+IC0JCQkJCSAgICBHRlBfS0VSTkVMLCBub2RlKTsKPiA+IC0JaWYgKCFjbHVzdGVyX2hv dHBsdWdfbWFzaykKPiA+IC0JCXJldHVybiAtRU5PTUVNOwo+ID4gLQljbHVzdGVyX2hvdHBsdWdf bWFzay0+bm9kZSA9IG5vZGU7Cj4gPiAtCXJldHVybiAwOwo+ID4gKwlwZXJfY3B1KHg4Nl9jcHVf dG9fbG9naWNhbF9hcGljaWQsIHRoaXNfY3B1KSA9IGFwaWNfcmVhZChBUElDX0xEUik7Cj4gPiAr Cj4gPiArCWNwdW1hc2tfc2V0X2NwdSh0aGlzX2NwdSwgcGVyX2NwdShjcHVzX2luX2NsdXN0ZXIs IHRoaXNfY3B1KSk7Cj4gPiArCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7Cj4gPiArCQlpZiAo eDJhcGljX2NsdXN0ZXIodGhpc19jcHUpICE9IHgyYXBpY19jbHVzdGVyKGNwdSkpCj4gPiArCQkJ Y29udGludWU7Cj4gPiArCQljcHVtYXNrX3NldF9jcHUodGhpc19jcHUsIHBlcl9jcHUoY3B1c19p bl9jbHVzdGVyLCBjcHUpKTsKPiA+ICsJCWNwdW1hc2tfc2V0X2NwdShjcHUsIHBlcl9jcHUoY3B1 c19pbl9jbHVzdGVyLCB0aGlzX2NwdSkpOwo+ID4gKwl9Cj4gPiAgfQo+ID4gIAo+ID4gKy8qCj4g PiArICogQXQgQ1BVIHN0YXRlIGNoYW5nZXMsIHVwZGF0ZSB0aGUgeDJhcGljIGNsdXN0ZXIgc2li bGluZyBpbmZvLgo+ID4gKyAqLwo+ID4gIHN0YXRpYyBpbnQgeDJhcGljX3ByZXBhcmVfY3B1KHVu c2lnbmVkIGludCBjcHUpCj4gPiAgewo+ID4gLQlpZiAoYWxsb2NfY2x1c3Rlcm1hc2soY3B1LCBj cHVfdG9fbm9kZShjcHUpKSA8IDApCj4gPiArCWlmICghemFsbG9jX2NwdW1hc2tfdmFyKCZwZXJf Y3B1KGNwdXNfaW5fY2x1c3RlciwgY3B1KSwgR0ZQX0tFUk5FTCkpCj4gPiAgCQlyZXR1cm4gLUVO T01FTTsKPiA+IC0JaWYgKCF6YWxsb2NfY3B1bWFza192YXIoJnBlcl9jcHUoaXBpX21hc2ssIGNw dSksIEdGUF9LRVJORUwpKQo+ID4gKwo+ID4gKwlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmcGVy X2NwdShpcGlfbWFzaywgY3B1KSwgR0ZQX0tFUk5FTCkpIHsKPiA+ICsJCWZyZWVfY3B1bWFza192 YXIocGVyX2NwdShjcHVzX2luX2NsdXN0ZXIsIGNwdSkpOwo+ID4gIAkJcmV0dXJuIC1FTk9NRU07 Cj4gPiArCX0KPiA+ICsKPiA+ICAJcmV0dXJuIDA7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyBp bnQgeDJhcGljX2RlYWRfY3B1KHVuc2lnbmVkIGludCBkZWFkX2NwdSkKPiA+ICtzdGF0aWMgaW50 IHgyYXBpY19kZWFkX2NwdSh1bnNpZ25lZCBpbnQgdGhpc19jcHUpCj4gPiAgewo+ID4gLQlzdHJ1 Y3QgY2x1c3Rlcl9tYXNrICpjbXNrID0gcGVyX2NwdShjbHVzdGVyX21hc2tzLCBkZWFkX2NwdSk7 Cj4gPiArCWludCBjcHU7Cj4gPiAgCj4gPiAtCWNwdW1hc2tfY2xlYXJfY3B1KGRlYWRfY3B1LCAm Y21zay0+bWFzayk7Cj4gPiAtCWZyZWVfY3B1bWFza192YXIocGVyX2NwdShpcGlfbWFzaywgZGVh ZF9jcHUpKTsKPiA+ICsJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKPiA+ICsJCWlmICh4MmFw aWNfY2x1c3Rlcih0aGlzX2NwdSkgIT0geDJhcGljX2NsdXN0ZXIoY3B1KSkKPiA+ICsJCQljb250 aW51ZTsKPiA+ICsJCWNwdW1hc2tfY2xlYXJfY3B1KHRoaXNfY3B1LCBwZXJfY3B1KGNwdXNfaW5f Y2x1c3RlciwgY3B1KSk7Cj4gPiArCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIHBlcl9jcHUoY3B1 c19pbl9jbHVzdGVyLCB0aGlzX2NwdSkpOwo+ID4gKwl9Cj4gPiArCWZyZWVfY3B1bWFza192YXIo cGVyX2NwdShjcHVzX2luX2NsdXN0ZXIsIHRoaXNfY3B1KSk7Cj4gPiArCWZyZWVfY3B1bWFza192 YXIocGVyX2NwdShpcGlfbWFzaywgdGhpc19jcHUpKTsKPiA+ICAJcmV0dXJuIDA7Cj4gPiAgfQo+ ID4gIAo+ID4gIHN0YXRpYyBpbnQgeDJhcGljX2NsdXN0ZXJfcHJvYmUodm9pZCkKPiA+ICB7Cj4g PiArCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4g PiAgCWlmICgheDJhcGljX21vZGUpCj4gPiAgCQlyZXR1cm4gMDsKPiA+ICAKPiA+IC0JaWYgKGNw dWhwX3NldHVwX3N0YXRlKENQVUhQX1gyQVBJQ19QUkVQQVJFLCAieDg2L3gyYXBpYzpwcmVwYXJl IiwKPiA+IC0JCQkgICAgICB4MmFwaWNfcHJlcGFyZV9jcHUsIHgyYXBpY19kZWFkX2NwdSkgPCAw KSB7Cj4gPiArCXJldCA9IGNwdWhwX3NldHVwX3N0YXRlKENQVUhQX1gyQVBJQ19QUkVQQVJFLCAi eDg2L3gyYXBpYzpwcmVwYXJlIiwKPiA+ICsJCQkJeDJhcGljX3ByZXBhcmVfY3B1LCB4MmFwaWNf ZGVhZF9jcHUpOwo+ID4gKwlpZiAocmV0IDwgMCkgewo+ID4gIAkJcHJfZXJyKCJGYWlsZWQgdG8g cmVnaXN0ZXIgWDJBUElDX1BSRVBBUkVcbiIpOwo+ID4gIAkJcmV0dXJuIDA7Cj4gPiAgCX0KPiA+ IC0JaW5pdF94MmFwaWNfbGRyKCk7Cj4gPiArCWNwdW1hc2tfc2V0X2NwdShjcHUsIHBlcl9jcHUo Y3B1c19pbl9jbHVzdGVyLCBjcHUpKTsKPiA+ICAJcmV0dXJuIDE7Cj4gPiAgfQo+ID4gIAo+ID4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqeDJhcGljX2NsdXN0ZXJfdGFyZ2V0X2NwdXMo dm9pZCkKPiA+ICt7Cj4gPiArCXJldHVybiBjcHVfYWxsX21hc2s7Cj4gPiArfQo+ID4gKwo+ID4g Ky8qCj4gPiArICogRWFjaCB4MmFwaWMgY2x1c3RlciBpcyBhbiBhbGxvY2F0aW9uIGRvbWFpbi4K PiA+ICsgKi8KPiA+ICtzdGF0aWMgdm9pZCBjbHVzdGVyX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFp bihpbnQgY3B1LCBzdHJ1Y3QgY3B1bWFzayAqcmV0bWFzaywKPiA+ICsJCQkJCSAgICAgY29uc3Qg c3RydWN0IGNwdW1hc2sgKm1hc2spCj4gPiArewo+ID4gKwkvKgo+ID4gKwkgKiBUbyBtaW5pbWl6 ZSB2ZWN0b3IgcHJlc3N1cmUsIGRlZmF1bHQgY2FzZSBvZiBib290LCBkZXZpY2UgYnJpbmd1cAo+ ID4gKwkgKiBldGMgd2lsbCB1c2UgYSBzaW5nbGUgY3B1IGZvciB0aGUgaW50ZXJydXB0IGRlc3Rp bmF0aW9uLgo+ID4gKwkgKgo+ID4gKwkgKiBPbiBleHBsaWNpdCBtaWdyYXRpb24gcmVxdWVzdHMg Y29taW5nIGZyb20gaXJxYmFsYW5jZSBldGMsCj4gPiArCSAqIGludGVycnVwdHMgd2lsbCBiZSBy b3V0ZWQgdG8gdGhlIHgyYXBpYyBjbHVzdGVyIChjbHVzdGVyLWlkCj4gPiArCSAqIGRlcml2ZWQg ZnJvbSB0aGUgZmlyc3QgY3B1IGluIHRoZSBtYXNrKSBtZW1iZXJzIHNwZWNpZmllZAo+ID4gKwkg KiBpbiB0aGUgbWFzay4KPiA+ICsJICovCj4gPiArCWlmIChtYXNrID09IHgyYXBpY19jbHVzdGVy X3RhcmdldF9jcHVzKCkpCj4gPiArCQljcHVtYXNrX2NvcHkocmV0bWFzaywgY3B1bWFza19vZihj cHUpKTsKPiA+ICsJZWxzZQo+ID4gKwkJY3B1bWFza19hbmQocmV0bWFzaywgbWFzaywgcGVyX2Nw dShjcHVzX2luX2NsdXN0ZXIsIGNwdSkpOwo+ID4gK30KPiA+ICsKPiA+ICBzdGF0aWMgc3RydWN0 IGFwaWMgYXBpY194MmFwaWNfY2x1c3RlciBfX3JvX2FmdGVyX2luaXQgPSB7Cj4gPiAgCj4gPiAg CS5uYW1lCQkJCT0gImNsdXN0ZXIgeDJhcGljIiwKPiA+IEBAIC0xODcsMTAgKzIzNSwxMiBAQCBz dGF0aWMgc3RydWN0IGFwaWMgYXBpY194MmFwaWNfY2x1c3RlciBfX3JvX2FmdGVyX2luaXQgPSB7 Cj4gPiAgCS5pcnFfZGVsaXZlcnlfbW9kZQkJPSBkZXN0X0xvd2VzdFByaW8sCj4gPiAgCS5pcnFf ZGVzdF9tb2RlCQkJPSAxLCAvKiBsb2dpY2FsICovCj4gPiAgCj4gPiArCS50YXJnZXRfY3B1cwkJ CT0geDJhcGljX2NsdXN0ZXJfdGFyZ2V0X2NwdXMsCj4gPiAgCS5kaXNhYmxlX2VzcgkJCT0gMCwK PiA+ICAJLmRlc3RfbG9naWNhbAkJCT0gQVBJQ19ERVNUX0xPR0lDQUwsCj4gPiAgCS5jaGVja19h cGljaWRfdXNlZAkJPSBOVUxMLAo+ID4gIAo+ID4gKwkudmVjdG9yX2FsbG9jYXRpb25fZG9tYWlu CT0gY2x1c3Rlcl92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4sCj4gPiAgCS5pbml0X2FwaWNfbGRy CQkJPSBpbml0X3gyYXBpY19sZHIsCj4gPiAgCj4gPiAgCS5pb2FwaWNfcGh5c19pZF9tYXAJCT0g TlVMTCwKPiA+IEBAIC0yMDMsNyArMjUzLDcgQEAgc3RhdGljIHN0cnVjdCBhcGljIGFwaWNfeDJh cGljX2NsdXN0ZXIgX19yb19hZnRlcl9pbml0ID0gewo+ID4gIAkuZ2V0X2FwaWNfaWQJCQk9IHgy YXBpY19nZXRfYXBpY19pZCwKPiA+ICAJLnNldF9hcGljX2lkCQkJPSB4MmFwaWNfc2V0X2FwaWNf aWQsCj4gPiAgCj4gPiAtCS5jYWxjX2Rlc3RfYXBpY2lkCQk9IHgyYXBpY19jYWxjX2FwaWNpZCwK PiA+ICsJLmNwdV9tYXNrX3RvX2FwaWNpZAkJPSB4MmFwaWNfY3B1X21hc2tfdG9fYXBpY2lkLAo+ ID4gIAo+ID4gIAkuc2VuZF9JUEkJCQk9IHgyYXBpY19zZW5kX0lQSSwKPiA+ICAJLnNlbmRfSVBJ X21hc2sJCQk9IHgyYXBpY19zZW5kX0lQSV9tYXNrLAo+ID4gZGlmZiAtLWdpdCBhL2FyY2gveDg2 L2tlcm5lbC9hcGljL3gyYXBpY19waHlzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNf cGh5cy5jCj4gPiBpbmRleCBmOGQ5ZDY5OTk0ZTYuLmI5NGQzNTMyMGY4NSAxMDA2NDQKPiA+IC0t LSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19waHlzLmMKPiA+ICsrKyBiL2FyY2gveDg2 L2tlcm5lbC9hcGljL3gyYXBpY19waHlzLmMKPiA+IEBAIC03LDggKzcsNyBAQAo+ID4gICNpbmNs dWRlIDxsaW51eC9kbWFyLmg+Cj4gPiAgCj4gPiAgI2luY2x1ZGUgPGFzbS9zbXAuaD4KPiA+IC0j aW5jbHVkZSA8YXNtL2lwaS5oPgo+ID4gLSNpbmNsdWRlICJ4MmFwaWMuaCIKPiA+ICsjaW5jbHVk ZSA8YXNtL3gyYXBpYy5oPgo+ID4gIAo+ID4gIGludCB4MmFwaWNfcGh5czsKPiA+ICAKPiA+IEBA IC0xMDAsNDMgKzk5LDYgQEAgc3RhdGljIGludCB4MmFwaWNfcGh5c19wcm9iZSh2b2lkKQo+ID4g IAlyZXR1cm4gYXBpYyA9PSAmYXBpY194MmFwaWNfcGh5czsKPiA+ICB9Cj4gPiAgCj4gPiAtLyog Q29tbW9uIHgyYXBpYyBmdW5jdGlvbnMsIGFsc28gdXNlZCBieSB4MmFwaWNfY2x1c3RlciAqLwo+ ID4gLWludCB4MmFwaWNfYXBpY19pZF92YWxpZChpbnQgYXBpY2lkKQo+ID4gLXsKPiA+IC0JcmV0 dXJuIDE7Cj4gPiAtfQo+ID4gLQo+ID4gLWludCB4MmFwaWNfYXBpY19pZF9yZWdpc3RlcmVkKHZv aWQpCj4gPiAtewo+ID4gLQlyZXR1cm4gMTsKPiA+IC19Cj4gPiAtCj4gPiAtdm9pZCBfX3gyYXBp Y19zZW5kX0lQSV9kZXN0KHVuc2lnbmVkIGludCBhcGljaWQsIGludCB2ZWN0b3IsIHVuc2lnbmVk IGludCBkZXN0KQo+ID4gLXsKPiA+IC0JdW5zaWduZWQgbG9uZyBjZmcgPSBfX3ByZXBhcmVfSUNS KDAsIHZlY3RvciwgZGVzdCk7Cj4gPiAtCW5hdGl2ZV94MmFwaWNfaWNyX3dyaXRlKGNmZywgYXBp Y2lkKTsKPiA+IC19Cj4gPiAtCj4gPiAtdW5zaWduZWQgaW50IHgyYXBpY19nZXRfYXBpY19pZCh1 bnNpZ25lZCBsb25nIGlkKQo+ID4gLXsKPiA+IC0JcmV0dXJuIGlkOwo+ID4gLX0KPiA+IC0KPiA+ IC11MzIgeDJhcGljX3NldF9hcGljX2lkKHVuc2lnbmVkIGludCBpZCkKPiA+IC17Cj4gPiAtCXJl dHVybiBpZDsKPiA+IC19Cj4gPiAtCj4gPiAtaW50IHgyYXBpY19waHlzX3BrZ19pZChpbnQgaW5p dGlhbF9hcGljaWQsIGludCBpbmRleF9tc2IpCj4gPiAtewo+ID4gLQlyZXR1cm4gaW5pdGlhbF9h cGljaWQgPj4gaW5kZXhfbXNiOwo+ID4gLX0KPiA+IC0KPiA+IC12b2lkIHgyYXBpY19zZW5kX0lQ SV9zZWxmKGludCB2ZWN0b3IpCj4gPiAtewo+ID4gLQlhcGljX3dyaXRlKEFQSUNfU0VMRl9JUEks IHZlY3Rvcik7Cj4gPiAtfQo+ID4gLQo+ID4gIHN0YXRpYyBzdHJ1Y3QgYXBpYyBhcGljX3gyYXBp Y19waHlzIF9fcm9fYWZ0ZXJfaW5pdCA9IHsKPiA+ICAKPiA+ICAJLm5hbWUJCQkJPSAicGh5c2lj YWwgeDJhcGljIiwKPiA+IEBAIC0xNDgsMTAgKzExMCwxMiBAQCBzdGF0aWMgc3RydWN0IGFwaWMg YXBpY194MmFwaWNfcGh5cyBfX3JvX2FmdGVyX2luaXQgPSB7Cj4gPiAgCS5pcnFfZGVsaXZlcnlf bW9kZQkJPSBkZXN0X0ZpeGVkLAo+ID4gIAkuaXJxX2Rlc3RfbW9kZQkJCT0gMCwgLyogcGh5c2lj YWwgKi8KPiA+ICAKPiA+ICsJLnRhcmdldF9jcHVzCQkJPSBvbmxpbmVfdGFyZ2V0X2NwdXMsCj4g PiAgCS5kaXNhYmxlX2VzcgkJCT0gMCwKPiA+ICAJLmRlc3RfbG9naWNhbAkJCT0gMCwKPiA+ICAJ LmNoZWNrX2FwaWNpZF91c2VkCQk9IE5VTEwsCj4gPiAgCj4gPiArCS52ZWN0b3JfYWxsb2NhdGlv bl9kb21haW4JPSBkZWZhdWx0X3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiwKPiA+ICAJLmluaXRf YXBpY19sZHIJCQk9IGluaXRfeDJhcGljX2xkciwKPiA+ICAKPiA+ICAJLmlvYXBpY19waHlzX2lk X21hcAkJPSBOVUxMLAo+ID4gQEAgLTE2NCw3ICsxMjgsNyBAQCBzdGF0aWMgc3RydWN0IGFwaWMg YXBpY194MmFwaWNfcGh5cyBfX3JvX2FmdGVyX2luaXQgPSB7Cj4gPiAgCS5nZXRfYXBpY19pZAkJ CT0geDJhcGljX2dldF9hcGljX2lkLAo+ID4gIAkuc2V0X2FwaWNfaWQJCQk9IHgyYXBpY19zZXRf YXBpY19pZCwKPiA+ICAKPiA+IC0JLmNhbGNfZGVzdF9hcGljaWQJCT0gYXBpY19kZWZhdWx0X2Nh bGNfYXBpY2lkLAo+ID4gKwkuY3B1X21hc2tfdG9fYXBpY2lkCQk9IGRlZmF1bHRfY3B1X21hc2tf dG9fYXBpY2lkLAo+ID4gIAo+ID4gIAkuc2VuZF9JUEkJCQk9IHgyYXBpY19zZW5kX0lQSSwKPiA+ ICAJLnNlbmRfSVBJX21hc2sJCQk9IHgyYXBpY19zZW5kX0lQSV9tYXNrLAo+ID4gZGlmZiAtLWdp dCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMgYi9hcmNoL3g4Ni9rZXJuZWwv YXBpYy94MmFwaWNfdXZfeC5jCj4gPiBpbmRleCBlMWI4ZThiZjZiM2MuLjI5MTVjNmQwNjgyMSAx MDA2NDQKPiA+IC0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKPiA+ICsr KyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKPiA+IEBAIC01NjgsOSArNTY4 LDE2IEBAIHN0YXRpYyB2b2lkIHV2X2luaXRfYXBpY19sZHIodm9pZCkKPiA+ICB7Cj4gPiAgfQo+ ID4gIAo+ID4gLXN0YXRpYyB1MzIgYXBpY191dl9jYWxjX2FwaWNpZCh1bnNpZ25lZCBpbnQgY3B1 KQo+ID4gK3N0YXRpYyBpbnQKPiA+ICt1dl9jcHVfbWFza190b19hcGljaWQoY29uc3Qgc3RydWN0 IGNwdW1hc2sgKm1hc2ssIHN0cnVjdCBpcnFfZGF0YSAqaXJxZGF0YSwKPiA+ICsJCSAgICAgIHVu c2lnbmVkIGludCAqYXBpY2lkKQo+ID4gIHsKPiA+IC0JcmV0dXJuIGFwaWNfZGVmYXVsdF9jYWxj X2FwaWNpZChjcHUpIHwgdXZfYXBpY2lkX2hpYml0czsKPiA+ICsJaW50IHJldCA9IGRlZmF1bHRf Y3B1X21hc2tfdG9fYXBpY2lkKG1hc2ssIGlycWRhdGEsIGFwaWNpZCk7Cj4gPiArCj4gPiArCWlm ICghcmV0KQo+ID4gKwkJKmFwaWNpZCB8PSB1dl9hcGljaWRfaGliaXRzOwo+ID4gKwo+ID4gKwly ZXR1cm4gcmV0Owo+ID4gIH0KPiA+ICAKPiA+ICBzdGF0aWMgdW5zaWduZWQgaW50IHgyYXBpY19n ZXRfYXBpY19pZCh1bnNpZ25lZCBsb25nIHgpCj4gPiBAQCAtNTgzLDcgKzU5MCw3IEBAIHN0YXRp YyB1bnNpZ25lZCBpbnQgeDJhcGljX2dldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKPiA+ICAJ cmV0dXJuIGlkOwo+ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMgdTMyIHNldF9hcGljX2lkKHVuc2ln bmVkIGludCBpZCkKPiA+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBzZXRfYXBpY19pZCh1bnNpZ25l ZCBpbnQgaWQpCj4gPiAgewo+ID4gIAkvKiBDSEVDS01FOiBEbyB3ZSBuZWVkIHRvIG1hc2sgb3V0 IHRoZSB4YXBpYyBleHRyYSBiaXRzPyAqLwo+ID4gIAlyZXR1cm4gaWQ7Cj4gPiBAQCAtNjIwLDEw ICs2MjcsMTIgQEAgc3RhdGljIHN0cnVjdCBhcGljIGFwaWNfeDJhcGljX3V2X3ggX19yb19hZnRl cl9pbml0ID0gewo+ID4gIAkuaXJxX2RlbGl2ZXJ5X21vZGUJCT0gZGVzdF9GaXhlZCwKPiA+ICAJ LmlycV9kZXN0X21vZGUJCQk9IDAsIC8qIFBoeXNpY2FsICovCj4gPiAgCj4gPiArCS50YXJnZXRf Y3B1cwkJCT0gb25saW5lX3RhcmdldF9jcHVzLAo+ID4gIAkuZGlzYWJsZV9lc3IJCQk9IDAsCj4g PiAgCS5kZXN0X2xvZ2ljYWwJCQk9IEFQSUNfREVTVF9MT0dJQ0FMLAo+ID4gIAkuY2hlY2tfYXBp Y2lkX3VzZWQJCT0gTlVMTCwKPiA+ICAKPiA+ICsJLnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbgk9 IGRlZmF1bHRfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluLAo+ID4gIAkuaW5pdF9hcGljX2xkcgkJ CT0gdXZfaW5pdF9hcGljX2xkciwKPiA+ICAKPiA+ICAJLmlvYXBpY19waHlzX2lkX21hcAkJPSBO VUxMLAo+ID4gQEAgLTYzNiw3ICs2NDUsNyBAQCBzdGF0aWMgc3RydWN0IGFwaWMgYXBpY194MmFw aWNfdXZfeCBfX3JvX2FmdGVyX2luaXQgPSB7Cj4gPiAgCS5nZXRfYXBpY19pZAkJCT0geDJhcGlj X2dldF9hcGljX2lkLAo+ID4gIAkuc2V0X2FwaWNfaWQJCQk9IHNldF9hcGljX2lkLAo+ID4gIAo+ ID4gLQkuY2FsY19kZXN0X2FwaWNpZAkJPSBhcGljX3V2X2NhbGNfYXBpY2lkLAo+ID4gKwkuY3B1 X21hc2tfdG9fYXBpY2lkCQk9IHV2X2NwdV9tYXNrX3RvX2FwaWNpZCwKPiA+ICAKPiA+ICAJLnNl bmRfSVBJCQkJPSB1dl9zZW5kX0lQSV9vbmUsCj4gPiAgCS5zZW5kX0lQSV9tYXNrCQkJPSB1dl9z ZW5kX0lQSV9tYXNrLAo+ID4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pODI1OS5jIGIv YXJjaC94ODYva2VybmVsL2k4MjU5LmMKPiA+IGluZGV4IDg2YzQ0MzlmOWQ3NC4uOGY1Y2IyYzcw NjBjIDEwMDY0NAo+ID4gLS0tIGEvYXJjaC94ODYva2VybmVsL2k4MjU5LmMKPiA+ICsrKyBiL2Fy Y2gveDg2L2tlcm5lbC9pODI1OS5jCj4gPiBAQCAtMTE0LDcgKzExNCw2IEBAIHN0YXRpYyB2b2lk IG1ha2VfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpCj4gPiAgCWlvX2FwaWNfaXJxcyAmPSB+ KDE8PGlycSk7Cj4gPiAgCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZpODI1OUFfY2hp cCwgaGFuZGxlX2xldmVsX2lycSk7Cj4gPiAgCWVuYWJsZV9pcnEoaXJxKTsKPiA+IC0JbGFwaWNf YXNzaWduX2xlZ2FjeV92ZWN0b3IoaXJxLCB0cnVlKTsKPiA+ICB9Cj4gPiAgCj4gPiAgLyoKPiA+ IGRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaWR0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaWR0 LmMKPiA+IGluZGV4IGQ5ODVjZWYzOTg0Zi4uMDE0Y2IyZmM0N2ZmIDEwMDY0NAo+ID4gLS0tIGEv YXJjaC94ODYva2VybmVsL2lkdC5jCj4gPiArKysgYi9hcmNoL3g4Ni9rZXJuZWwvaWR0LmMKPiA+ IEBAIC0yMjMsNyArMjIzLDcgQEAgaWR0X3NldHVwX2Zyb21fdGFibGUoZ2F0ZV9kZXNjICppZHQs IGNvbnN0IHN0cnVjdCBpZHRfZGF0YSAqdCwgaW50IHNpemUsIGJvb2wgc3kKPiA+ICAJCWlkdF9p bml0X2Rlc2MoJmRlc2MsIHQpOwo+ID4gIAkJd3JpdGVfaWR0X2VudHJ5KGlkdCwgdC0+dmVjdG9y LCAmZGVzYyk7Cj4gPiAgCQlpZiAoc3lzKQo+ID4gLQkJCXNldF9iaXQodC0+dmVjdG9yLCBzeXN0 ZW1fdmVjdG9ycyk7Cj4gPiArCQkJc2V0X2JpdCh0LT52ZWN0b3IsIHVzZWRfdmVjdG9ycyk7Cj4g PiAgCX0KPiA+ICB9Cj4gPiAgCj4gPiBAQCAtMzExLDE0ICszMTEsMTQgQEAgdm9pZCBfX2luaXQg aWR0X3NldHVwX2FwaWNfYW5kX2lycV9nYXRlcyh2b2lkKQo+ID4gIAo+ID4gIAlpZHRfc2V0dXBf ZnJvbV90YWJsZShpZHRfdGFibGUsIGFwaWNfaWR0cywgQVJSQVlfU0laRShhcGljX2lkdHMpLCB0 cnVlKTsKPiA+ICAKPiA+IC0JZm9yX2VhY2hfY2xlYXJfYml0X2Zyb20oaSwgc3lzdGVtX3ZlY3Rv cnMsIEZJUlNUX1NZU1RFTV9WRUNUT1IpIHsKPiA+ICsJZm9yX2VhY2hfY2xlYXJfYml0X2Zyb20o aSwgdXNlZF92ZWN0b3JzLCBGSVJTVF9TWVNURU1fVkVDVE9SKSB7Cj4gPiAgCQllbnRyeSA9IGly cV9lbnRyaWVzX3N0YXJ0ICsgOCAqIChpIC0gRklSU1RfRVhURVJOQUxfVkVDVE9SKTsKPiA+ICAJ CXNldF9pbnRyX2dhdGUoaSwgZW50cnkpOwo+ID4gIAl9Cj4gPiAgCj4gPiAtCWZvcl9lYWNoX2Ns ZWFyX2JpdF9mcm9tKGksIHN5c3RlbV92ZWN0b3JzLCBOUl9WRUNUT1JTKSB7Cj4gPiArCWZvcl9l YWNoX2NsZWFyX2JpdF9mcm9tKGksIHVzZWRfdmVjdG9ycywgTlJfVkVDVE9SUykgewo+ID4gICNp ZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKPiA+IC0JCXNldF9iaXQoaSwgc3lzdGVtX3ZlY3Rv cnMpOwo+ID4gKwkJc2V0X2JpdChpLCB1c2VkX3ZlY3RvcnMpOwo+ID4gIAkJc2V0X2ludHJfZ2F0 ZShpLCBzcHVyaW91c19pbnRlcnJ1cHQpOwo+ID4gICNlbHNlCj4gPiAgCQllbnRyeSA9IGlycV9l bnRyaWVzX3N0YXJ0ICsgOCAqIChpIC0gRklSU1RfRVhURVJOQUxfVkVDVE9SKTsKPiA+IEBAIC0z NTYsNyArMzU2LDcgQEAgdm9pZCBpZHRfaW52YWxpZGF0ZSh2b2lkICphZGRyKQo+ID4gIAo+ID4g IHZvaWQgX19pbml0IHVwZGF0ZV9pbnRyX2dhdGUodW5zaWduZWQgaW50IG4sIGNvbnN0IHZvaWQg KmFkZHIpCj4gPiAgewo+ID4gLQlpZiAoV0FSTl9PTl9PTkNFKCF0ZXN0X2JpdChuLCBzeXN0ZW1f dmVjdG9ycykpKQo+ID4gKwlpZiAoV0FSTl9PTl9PTkNFKCF0ZXN0X2JpdChuLCB1c2VkX3ZlY3Rv cnMpKSkKPiA+ICAJCXJldHVybjsKPiA+ICAJc2V0X2ludHJfZ2F0ZShuLCBhZGRyKTsKPiA+ICB9 Cj4gPiBAQCAtMzY0LDYgKzM2NCw2IEBAIHZvaWQgX19pbml0IHVwZGF0ZV9pbnRyX2dhdGUodW5z aWduZWQgaW50IG4sIGNvbnN0IHZvaWQgKmFkZHIpCj4gPiAgdm9pZCBhbGxvY19pbnRyX2dhdGUo dW5zaWduZWQgaW50IG4sIGNvbnN0IHZvaWQgKmFkZHIpCj4gPiAgewo+ID4gIAlCVUdfT04obiA8 IEZJUlNUX1NZU1RFTV9WRUNUT1IpOwo+ID4gLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQobiwgc3lz dGVtX3ZlY3RvcnMpKQo+ID4gKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQobiwgdXNlZF92ZWN0b3Jz KSkKPiA+ICAJCXNldF9pbnRyX2dhdGUobiwgYWRkcik7Cj4gPiAgfQo+ID4gZGlmZiAtLWdpdCBh L2FyY2gveDg2L2tlcm5lbC9pcnEuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwo+ID4gaW5kZXgg NDljZmQ5ZmU3NTg5Li41MjA4OWMwNDMxNjAgMTAwNjQ0Cj4gPiAtLS0gYS9hcmNoL3g4Ni9rZXJu ZWwvaXJxLmMKPiA+ICsrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwo+ID4gQEAgLTEzNCw3ICsx MzQsNyBAQCBpbnQgYXJjaF9zaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCBpbnQg cHJlYykKPiA+ICAJc2VxX3B1dHMocCwgIiAgTWFjaGluZSBjaGVjayBwb2xsc1xuIik7Cj4gPiAg I2VuZGlmCj4gPiAgI2lmIElTX0VOQUJMRUQoQ09ORklHX0hZUEVSVikgfHwgZGVmaW5lZChDT05G SUdfWEVOKQo+ID4gLQlpZiAodGVzdF9iaXQoSFlQRVJWSVNPUl9DQUxMQkFDS19WRUNUT1IsIHN5 c3RlbV92ZWN0b3JzKSkgewo+ID4gKwlpZiAodGVzdF9iaXQoSFlQRVJWSVNPUl9DQUxMQkFDS19W RUNUT1IsIHVzZWRfdmVjdG9ycykpIHsKPiA+ICAJCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJl YywgIkhZUCIpOwo+ID4gIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQo+ID4gIAkJCXNlcV9wcmlu dGYocCwgIiUxMHUgIiwKPiA+IEBAIC0zMzMsNiArMzMzLDEwNSBAQCBfX3Zpc2libGUgdm9pZCBz bXBfa3ZtX3Bvc3RlZF9pbnRyX25lc3RlZF9pcGkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCj4gPiAg Cj4gPiAgCj4gPiAgI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQo+ID4gKwo+ID4gKy8qIFRoZXNl IHR3byBkZWNsYXJhdGlvbnMgYXJlIG9ubHkgdXNlZCBpbiBjaGVja19pcnFfdmVjdG9yc19mb3Jf Y3B1X2Rpc2FibGUoKQo+ID4gKyAqIGJlbG93LCB3aGljaCBpcyBwcm90ZWN0ZWQgYnkgc3RvcF9t YWNoaW5lKCkuICBQdXR0aW5nIHRoZW0gb24gdGhlIHN0YWNrCj4gPiArICogcmVzdWx0cyBpbiBh IHN0YWNrIGZyYW1lIG92ZXJmbG93LiAgRHluYW1pY2FsbHkgYWxsb2NhdGluZyBjb3VsZCByZXN1 bHQgaW4gYQo+ID4gKyAqIGZhaWx1cmUgc28gZGVjbGFyZSB0aGVzZSB0d28gY3B1bWFza3MgYXMg Z2xvYmFsLgo+ID4gKyAqLwo+ID4gK3N0YXRpYyBzdHJ1Y3QgY3B1bWFzayBhZmZpbml0eV9uZXcs IG9ubGluZV9uZXc7Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBUaGlzIGNwdSBpcyBnb2luZyB0byBi ZSByZW1vdmVkIGFuZCBpdHMgdmVjdG9ycyBtaWdyYXRlZCB0byB0aGUgcmVtYWluaW5nCj4gPiAr ICogb25saW5lIGNwdXMuICBDaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGVub3VnaCB2ZWN0b3Jz IGluIHRoZSByZW1haW5pbmcgY3B1cy4KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3RlY3Rl ZCBieSBzdG9wX21hY2hpbmUoKS4KPiA+ICsgKi8KPiA+ICtpbnQgY2hlY2tfaXJxX3ZlY3RvcnNf Zm9yX2NwdV9kaXNhYmxlKHZvaWQpCj4gPiArewo+ID4gKwl1bnNpZ25lZCBpbnQgdGhpc19jcHUs IHZlY3RvciwgdGhpc19jb3VudCwgY291bnQ7Cj4gPiArCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsK PiA+ICsJc3RydWN0IGlycV9kYXRhICpkYXRhOwo+ID4gKwlpbnQgY3B1Owo+ID4gKwo+ID4gKwl0 aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKPiA+ICsJY3B1bWFza19jb3B5KCZvbmxpbmVf bmV3LCBjcHVfb25saW5lX21hc2spOwo+ID4gKwljcHVtYXNrX2NsZWFyX2NwdSh0aGlzX2NwdSwg Jm9ubGluZV9uZXcpOwo+ID4gKwo+ID4gKwl0aGlzX2NvdW50ID0gMDsKPiA+ICsJZm9yICh2ZWN0 b3IgPSBGSVJTVF9FWFRFUk5BTF9WRUNUT1I7IHZlY3RvciA8IE5SX1ZFQ1RPUlM7IHZlY3Rvcisr KSB7Cj4gPiArCQlkZXNjID0gX190aGlzX2NwdV9yZWFkKHZlY3Rvcl9pcnFbdmVjdG9yXSk7Cj4g PiArCQlpZiAoSVNfRVJSX09SX05VTEwoZGVzYykpCj4gPiArCQkJY29udGludWU7Cj4gPiArCQkv Kgo+ID4gKwkJICogUHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgYWN0aW9uIHJlbW92YWwsIGFm ZmluaXR5Cj4gPiArCQkgKiBjaGFuZ2VzIGV0Yy4KPiA+ICsJCSAqLwo+ID4gKwkJcmF3X3NwaW5f bG9jaygmZGVzYy0+bG9jayk7Cj4gPiArCQlkYXRhID0gaXJxX2Rlc2NfZ2V0X2lycV9kYXRhKGRl c2MpOwo+ID4gKwkJY3B1bWFza19jb3B5KCZhZmZpbml0eV9uZXcsCj4gPiArCQkJICAgICBpcnFf ZGF0YV9nZXRfYWZmaW5pdHlfbWFzayhkYXRhKSk7Cj4gPiArCQljcHVtYXNrX2NsZWFyX2NwdSh0 aGlzX2NwdSwgJmFmZmluaXR5X25ldyk7Cj4gPiArCj4gPiArCQkvKiBEbyBub3QgY291bnQgaW5h Y3RpdmUgb3IgcGVyLWNwdSBpcnFzLiAqLwo+ID4gKwkJaWYgKCFpcnFfZGVzY19oYXNfYWN0aW9u KGRlc2MpIHx8IGlycWRfaXNfcGVyX2NwdShkYXRhKSkgewo+ID4gKwkJCXJhd19zcGluX3VubG9j aygmZGVzYy0+bG9jayk7Cj4gPiArCQkJY29udGludWU7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQly YXdfc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwo+ID4gKwkJLyoKPiA+ICsJCSAqIEEgc2luZ2xl IGlycSBtYXkgYmUgbWFwcGVkIHRvIG11bHRpcGxlIGNwdSdzCj4gPiArCQkgKiB2ZWN0b3JfaXJx W10gKGZvciBleGFtcGxlIElPQVBJQyBjbHVzdGVyIG1vZGUpLiAgSW4KPiA+ICsJCSAqIHRoaXMg Y2FzZSB3ZSBoYXZlIHR3byBwb3NzaWJpbGl0aWVzOgo+ID4gKwkJICoKPiA+ICsJCSAqIDEpIHRo ZSByZXN1bHRpbmcgYWZmaW5pdHkgbWFzayBpcyBlbXB0eTsgdGhhdCBpcwo+ID4gKwkJICogdGhp cyB0aGUgZG93bidkIGNwdSBpcyB0aGUgbGFzdCBjcHUgaW4gdGhlIGlycSdzCj4gPiArCQkgKiBh ZmZpbml0eSBtYXNrLCBvcgo+ID4gKwkJICoKPiA+ICsJCSAqIDIpIHRoZSByZXN1bHRpbmcgYWZm aW5pdHkgbWFzayBpcyBubyBsb25nZXIgYQo+ID4gKwkJICogc3Vic2V0IG9mIHRoZSBvbmxpbmUg Y3B1cyBidXQgdGhlIGFmZmluaXR5IG1hc2sgaXMKPiA+ICsJCSAqIG5vdCB6ZXJvOyB0aGF0IGlz IHRoZSBkb3duJ2QgY3B1IGlzIHRoZSBsYXN0IG9ubGluZQo+ID4gKwkJICogY3B1IGluIGEgdXNl ciBzZXQgYWZmaW5pdHkgbWFzay4KPiA+ICsJCSAqLwo+ID4gKwkJaWYgKGNwdW1hc2tfZW1wdHko JmFmZmluaXR5X25ldykgfHwKPiA+ICsJCSAgICAhY3B1bWFza19zdWJzZXQoJmFmZmluaXR5X25l dywgJm9ubGluZV9uZXcpKQo+ID4gKwkJCXRoaXNfY291bnQrKzsKPiA+ICsJfQo+ID4gKwkvKiBO byBuZWVkIHRvIGNoZWNrIGFueSBmdXJ0aGVyLiAqLwo+ID4gKwlpZiAoIXRoaXNfY291bnQpCj4g PiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJY291bnQgPSAwOwo+ID4gKwlmb3JfZWFjaF9vbmxp bmVfY3B1KGNwdSkgewo+ID4gKwkJaWYgKGNwdSA9PSB0aGlzX2NwdSkKPiA+ICsJCQljb250aW51 ZTsKPiA+ICsJCS8qCj4gPiArCQkgKiBXZSBzY2FuIGZyb20gRklSU1RfRVhURVJOQUxfVkVDVE9S IHRvIGZpcnN0IHN5c3RlbQo+ID4gKwkJICogdmVjdG9yLiBJZiB0aGUgdmVjdG9yIGlzIG1hcmtl ZCBpbiB0aGUgdXNlZCB2ZWN0b3JzCj4gPiArCQkgKiBiaXRtYXAgb3IgYW4gaXJxIGlzIGFzc2ln bmVkIHRvIGl0LCB3ZSBkb24ndCBjb3VudAo+ID4gKwkJICogaXQgYXMgYXZhaWxhYmxlLgo+ID4g KwkJICoKPiA+ICsJCSAqIEFzIHRoaXMgaXMgYW4gaW5hY2N1cmF0ZSBzbmFwc2hvdCBhbnl3YXks IHdlIGNhbiBkbwo+ID4gKwkJICogdGhpcyB3L28gaG9sZGluZyB2ZWN0b3JfbG9jay4KPiA+ICsJ CSAqLwo+ID4gKwkJZm9yICh2ZWN0b3IgPSBGSVJTVF9FWFRFUk5BTF9WRUNUT1I7Cj4gPiArCQkg ICAgIHZlY3RvciA8IEZJUlNUX1NZU1RFTV9WRUNUT1I7IHZlY3RvcisrKSB7Cj4gPiArCQkJaWYg KCF0ZXN0X2JpdCh2ZWN0b3IsIHVzZWRfdmVjdG9ycykgJiYKPiA+ICsJCQkgICAgSVNfRVJSX09S X05VTEwocGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZlY3Rvcl0pKSB7Cj4gPiArCQkJCWlmICgr K2NvdW50ID09IHRoaXNfY291bnQpCj4gPiArCQkJCQlyZXR1cm4gMDsKPiA+ICsJCQl9Cj4gPiAr CQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKGNvdW50IDwgdGhpc19jb3VudCkgewo+ID4gKwkJ cHJfd2FybigiQ1BVICVkIGRpc2FibGUgZmFpbGVkOiBDUFUgaGFzICV1IHZlY3RvcnMgYXNzaWdu ZWQgYW5kIHRoZXJlIGFyZSBvbmx5ICV1IGF2YWlsYWJsZS5cbiIsCj4gPiArCQkJdGhpc19jcHUs IHRoaXNfY291bnQsIGNvdW50KTsKPiA+ICsJCXJldHVybiAtRVJBTkdFOwo+ID4gKwl9Cj4gPiAr CXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICAvKiBBIGNwdSBoYXMgYmVlbiByZW1vdmVkIGZy b20gY3B1X29ubGluZV9tYXNrLiAgUmVzZXQgaXJxIGFmZmluaXRpZXMuICovCj4gPiAgdm9pZCBm aXh1cF9pcnFzKHZvaWQpCj4gPiAgewo+ID4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9p cnFpbml0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdC5jCj4gPiBpbmRleCA4ZGEzZTkwOWU5 NjcuLjFlNDA5NGViYTE1ZSAxMDA2NDQKPiA+IC0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0 LmMKPiA+ICsrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0LmMKPiA+IEBAIC02MSw2ICs2MSw5 IEBAIHZvaWQgX19pbml0IGluaXRfSVNBX2lycXModm9pZCkKPiA+ICAJc3RydWN0IGlycV9jaGlw ICpjaGlwID0gbGVnYWN5X3BpYy0+Y2hpcDsKPiA+ICAJaW50IGk7Cj4gPiAgCj4gPiArI2lmIGRl ZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpCj4g PiArCWluaXRfYnNwX0FQSUMoKTsKPiA+ICsjZW5kaWYKPiA+ICAJbGVnYWN5X3BpYy0+aW5pdCgw KTsKPiA+ICAKPiA+ICAJZm9yIChpID0gMDsgaSA8IG5yX2xlZ2FjeV9pcnFzKCk7IGkrKykKPiA+ IEBAIC05MSw3ICs5NCw2IEBAIHZvaWQgX19pbml0IG5hdGl2ZV9pbml0X0lSUSh2b2lkKQo+ID4g IAl4ODZfaW5pdC5pcnFzLnByZV92ZWN0b3JfaW5pdCgpOwo+ID4gIAo+ID4gIAlpZHRfc2V0dXBf YXBpY19hbmRfaXJxX2dhdGVzKCk7Cj4gPiAtCWxhcGljX2Fzc2lnbl9zeXN0ZW1fdmVjdG9ycygp Owo+ID4gIAo+ID4gIAlpZiAoIWFjcGlfaW9hcGljICYmICFvZl9pb2FwaWMgJiYgbnJfbGVnYWN5 X2lycXMoKSkKPiA+ICAJCXNldHVwX2lycSgyLCAmaXJxMik7Cj4gPiBkaWZmIC0tZ2l0IGEvYXJj aC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwo+ID4gaW5kZXgg OGFmMmU4ZDBjMGExLi5iZTMzYTVjNjNkMjAgMTAwNjQ0Cj4gPiAtLS0gYS9hcmNoL3g4Ni9rZXJu ZWwvc2V0dXAuYwo+ID4gKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKPiA+IEBAIC0xMzYs NiArMTM2LDE4IEBAIFJFU0VSVkVfQlJLKGRtaV9hbGxvYywgNjU1MzYpOwo+ID4gIHN0YXRpYyBf X2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgX2Jya19zdGFydCA9ICh1bnNpZ25lZCBsb25nKV9fYnJr X2Jhc2U7Cj4gPiAgdW5zaWduZWQgbG9uZyBfYnJrX2VuZCA9ICh1bnNpZ25lZCBsb25nKV9fYnJr X2Jhc2U7Cj4gPiAgCj4gPiArI2lmZGVmIENPTkZJR19YODZfNjQKPiA+ICtpbnQgZGVmYXVsdF9j cHVfcHJlc2VudF90b19hcGljaWQoaW50IG1wc19jcHUpCj4gPiArewo+ID4gKwlyZXR1cm4gX19k ZWZhdWx0X2NwdV9wcmVzZW50X3RvX2FwaWNpZChtcHNfY3B1KTsKPiA+ICt9Cj4gPiArCj4gPiAr aW50IGRlZmF1bHRfY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudChpbnQgcGh5c19hcGljaWQpCj4g PiArewo+ID4gKwlyZXR1cm4gX19kZWZhdWx0X2NoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQocGh5 c19hcGljaWQpOwo+ID4gK30KPiA+ICsjZW5kaWYKPiA+ICsKPiA+ICBzdHJ1Y3QgYm9vdF9wYXJh bXMgYm9vdF9wYXJhbXM7Cj4gPiAgCj4gPiAgLyoKPiA+IGRpZmYgLS1naXQgYS9hcmNoL3g4Ni9r ZXJuZWwvc21wYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwo+ID4gaW5kZXggM2Qw MWRmN2Q3Y2Y2Li4xM2JkOTg2YjdmOTAgMTAwNjQ0Cj4gPiAtLS0gYS9hcmNoL3g4Ni9rZXJuZWwv c21wYm9vdC5jCj4gPiArKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCj4gPiBAQCAtMjUz LDE0ICsyNTMsMTQgQEAgc3RhdGljIHZvaWQgbm90cmFjZSBzdGFydF9zZWNvbmRhcnkodm9pZCAq dW51c2VkKQo+ID4gIAljaGVja190c2Nfc3luY190YXJnZXQoKTsKPiA+ICAKPiA+ICAJLyoKPiA+ IC0JICogTG9jayB2ZWN0b3JfbG9jaywgc2V0IENQVSBvbmxpbmUgYW5kIGJyaW5nIHRoZSB2ZWN0 b3IKPiA+IC0JICogYWxsb2NhdG9yIG9ubGluZS4gT25saW5lIG11c3QgYmUgc2V0IHdpdGggdmVj dG9yX2xvY2sgaGVsZAo+ID4gLQkgKiB0byBwcmV2ZW50IGEgY29uY3VycmVudCBpcnEgc2V0dXAv dGVhcmRvd24gZnJvbSBzZWVpbmcgYQo+ID4gLQkgKiBoYWxmIHZhbGlkIHZlY3RvciBzcGFjZS4K PiA+ICsJICogTG9jayB2ZWN0b3JfbG9jayBhbmQgaW5pdGlhbGl6ZSB0aGUgdmVjdG9ycyBvbiB0 aGlzIGNwdQo+ID4gKwkgKiBiZWZvcmUgc2V0dGluZyB0aGUgY3B1IG9ubGluZS4gV2UgbXVzdCBz ZXQgaXQgb25saW5lIHdpdGgKPiA+ICsJICogdmVjdG9yX2xvY2sgaGVsZCB0byBwcmV2ZW50IGEg Y29uY3VycmVudCBzZXR1cC90ZWFyZG93bgo+ID4gKwkgKiBmcm9tIHNlZWluZyBhIGhhbGYgdmFs aWQgdmVjdG9yIHNwYWNlLgo+ID4gIAkgKi8KPiA+ICAJbG9ja192ZWN0b3JfbG9jaygpOwo+ID4g KwlzZXR1cF92ZWN0b3JfaXJxKHNtcF9wcm9jZXNzb3JfaWQoKSk7Cj4gPiAgCXNldF9jcHVfb25s aW5lKHNtcF9wcm9jZXNzb3JfaWQoKSwgdHJ1ZSk7Cj4gPiAtCWxhcGljX29ubGluZSgpOwo+ID4g IAl1bmxvY2tfdmVjdG9yX2xvY2soKTsKPiA+ICAJY3B1X3NldF9zdGF0ZV9vbmxpbmUoc21wX3By b2Nlc3Nvcl9pZCgpKTsKPiA+ICAJeDg2X3BsYXRmb3JtLm5taV9pbml0KCk7Cj4gPiBAQCAtMTEz MiwxMCArMTEzMiwxNyBAQCBzdGF0aWMgX19pbml0IHZvaWQgZGlzYWJsZV9zbXAodm9pZCkKPiA+ ICAJY3B1bWFza19zZXRfY3B1KDAsIHRvcG9sb2d5X2NvcmVfY3B1bWFzaygwKSk7Cj4gPiAgfQo+ ID4gIAo+ID4gK2VudW0gewo+ID4gKwlTTVBfT0ssCj4gPiArCVNNUF9OT19DT05GSUcsCj4gPiAr CVNNUF9OT19BUElDLAo+ID4gKwlTTVBfRk9SQ0VfVVAsCj4gPiArfTsKPiA+ICsKPiA+ICAvKgo+ ID4gICAqIFZhcmlvdXMgc2FuaXR5IGNoZWNrcy4KPiA+ICAgKi8KPiA+IC1zdGF0aWMgdm9pZCBf X2luaXQgc21wX3Nhbml0eV9jaGVjayh2b2lkKQo+ID4gK3N0YXRpYyBpbnQgX19pbml0IHNtcF9z YW5pdHlfY2hlY2sodW5zaWduZWQgbWF4X2NwdXMpCj4gPiAgewo+ID4gIAlwcmVlbXB0X2Rpc2Fi bGUoKTsKPiA+ICAKPiA+IEBAIC0xMTcyLDYgKzExNzksMTYgQEAgc3RhdGljIHZvaWQgX19pbml0 IHNtcF9zYW5pdHlfY2hlY2sodm9pZCkKPiA+ICAJCXBoeXNpZF9zZXQoaGFyZF9zbXBfcHJvY2Vz c29yX2lkKCksIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKPiA+ICAJfQo+ID4gIAo+ID4gKwkvKgo+ ID4gKwkgKiBJZiB3ZSBjb3VsZG4ndCBmaW5kIGFuIFNNUCBjb25maWd1cmF0aW9uIGF0IGJvb3Qg dGltZSwKPiA+ICsJICogZ2V0IG91dCBvZiBoZXJlIG5vdyEKPiA+ICsJICovCj4gPiArCWlmICgh c21wX2ZvdW5kX2NvbmZpZyAmJiAhYWNwaV9sYXBpYykgewo+ID4gKwkJcHJlZW1wdF9lbmFibGUo KTsKPiA+ICsJCXByX25vdGljZSgiU01QIG1vdGhlcmJvYXJkIG5vdCBkZXRlY3RlZFxuIik7Cj4g PiArCQlyZXR1cm4gU01QX05PX0NPTkZJRzsKPiA+ICsJfQo+ID4gKwo+ID4gIAkvKgo+ID4gIAkg KiBTaG91bGQgbm90IGJlIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBNUCB0YWJsZSBzaG91bGQgbGlz dCB0aGUgYm9vdAo+ID4gIAkgKiBDUFUgdG9vLCBidXQgd2UgZG8gaXQgZm9yIHRoZSBzYWtlIG9m IHJvYnVzdG5lc3MgYW55d2F5Lgo+ID4gQEAgLTExODIsNiArMTE5OSwyOSBAQCBzdGF0aWMgdm9p ZCBfX2luaXQgc21wX3Nhbml0eV9jaGVjayh2b2lkKQo+ID4gIAkJcGh5c2lkX3NldChoYXJkX3Nt cF9wcm9jZXNzb3JfaWQoKSwgcGh5c19jcHVfcHJlc2VudF9tYXApOwo+ID4gIAl9Cj4gPiAgCXBy ZWVtcHRfZW5hYmxlKCk7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIElmIHdlIGNvdWxkbid0IGZp bmQgYSBsb2NhbCBBUElDLCB0aGVuIGdldCBvdXQgb2YgaGVyZSBub3chCj4gPiArCSAqLwo+ID4g KwlpZiAoQVBJQ19JTlRFR1JBVEVEKGJvb3RfY3B1X2FwaWNfdmVyc2lvbikgJiYKPiA+ICsJICAg ICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVBJQykpIHsKPiA+ICsJCWlmICghZGlzYWJsZV9h cGljKSB7Cj4gPiArCQkJcHJfZXJyKCJCSU9TIGJ1ZywgbG9jYWwgQVBJQyAjJWQgbm90IGRldGVj dGVkIS4uLlxuIiwKPiA+ICsJCQkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKPiA+ICsJCQlw cl9lcnIoIi4uLiBmb3JjaW5nIHVzZSBvZiBkdW1teSBBUElDIGVtdWxhdGlvbiAodGVsbCB5b3Vy IGh3IHZlbmRvcilcbiIpOwo+ID4gKwkJfQo+ID4gKwkJcmV0dXJuIFNNUF9OT19BUElDOwo+ID4g Kwl9Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIElmIFNNUCBzaG91bGQgYmUgZGlzYWJsZWQsIHRo ZW4gcmVhbGx5IGRpc2FibGUgaXQhCj4gPiArCSAqLwo+ID4gKwlpZiAoIW1heF9jcHVzKSB7Cj4g PiArCQlwcl9pbmZvKCJTTVAgbW9kZSBkZWFjdGl2YXRlZFxuIik7Cj4gPiArCQlyZXR1cm4gU01Q X0ZPUkNFX1VQOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiBTTVBfT0s7Cj4gPiAgfQo+ID4g IAo+ID4gIHN0YXRpYyB2b2lkIF9faW5pdCBzbXBfY3B1X2luZGV4X2RlZmF1bHQodm9pZCkKPiA+ IEBAIC0xMTk2LDE4ICsxMjM2LDkgQEAgc3RhdGljIHZvaWQgX19pbml0IHNtcF9jcHVfaW5kZXhf ZGVmYXVsdCh2b2lkKQo+ID4gIAl9Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyB2b2lkIF9faW5p dCBzbXBfZ2V0X2xvZ2ljYWxfYXBpY2lkKHZvaWQpCj4gPiAtewo+ID4gLQlpZiAoeDJhcGljX21v ZGUpCj4gPiAtCQljcHUwX2xvZ2ljYWxfYXBpY2lkID0gYXBpY19yZWFkKEFQSUNfTERSKTsKPiA+ IC0JZWxzZQo+ID4gLQkJY3B1MF9sb2dpY2FsX2FwaWNpZCA9IEdFVF9BUElDX0xPR0lDQUxfSUQo YXBpY19yZWFkKEFQSUNfTERSKSk7Cj4gPiAtfQo+ID4gLQo+ID4gIC8qCj4gPiAtICogUHJlcGFy ZSBmb3IgU01QIGJvb3R1cC4KPiA+IC0gKiBAbWF4X2NwdXM6IGNvbmZpZ3VyZWQgbWF4aW11bSBu dW1iZXIgb2YgQ1BVcywgSXQgaXMgYSBsZWdhY3kgcGFyYW1ldGVyCj4gPiAtICogICAgICAgICAg ICBmb3IgY29tbW9uIGludGVyZmFjZSBzdXBwb3J0Lgo+ID4gKyAqIFByZXBhcmUgZm9yIFNNUCBi b290dXAuICBUaGUgTVAgdGFibGUgb3IgQUNQSSBoYXMgYmVlbiByZWFkCj4gPiArICogZWFybGll ci4gIEp1c3QgZG8gc29tZSBzYW5pdHkgY2hlY2tpbmcgaGVyZSBhbmQgZW5hYmxlIEFQSUMgbW9k ZS4KPiA+ICAgKi8KPiA+ICB2b2lkIF9faW5pdCBuYXRpdmVfc21wX3ByZXBhcmVfY3B1cyh1bnNp Z25lZCBpbnQgbWF4X2NwdXMpCj4gPiAgewo+ID4gQEAgLTEyMzksMjcgKzEyNzAsMzEgQEAgdm9p ZCBfX2luaXQgbmF0aXZlX3NtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQo+ ID4gIAo+ID4gIAlzZXRfY3B1X3NpYmxpbmdfbWFwKDApOwo+ID4gIAo+ID4gLQlzbXBfc2FuaXR5 X2NoZWNrKCk7Cj4gPiAtCj4gPiAtCXN3aXRjaCAoYXBpY19pbnRyX21vZGUpIHsKPiA+IC0JY2Fz ZSBBUElDX1BJQzoKPiA+IC0JY2FzZSBBUElDX1ZJUlRVQUxfV0lSRV9OT19DT05GSUc6Cj4gPiAr CXN3aXRjaCAoc21wX3Nhbml0eV9jaGVjayhtYXhfY3B1cykpIHsKPiA+ICsJY2FzZSBTTVBfTk9f Q09ORklHOgo+ID4gIAkJZGlzYWJsZV9zbXAoKTsKPiA+ICsJCWlmIChBUElDX2luaXRfdW5pcHJv Y2Vzc29yKCkpCj4gPiArCQkJcHJfbm90aWNlKCJMb2NhbCBBUElDIG5vdCBkZXRlY3RlZC4gVXNp bmcgZHVtbXkgQVBJQyBlbXVsYXRpb24uXG4iKTsKPiA+ICAJCXJldHVybjsKPiA+IC0JY2FzZSBB UElDX1NZTU1FVFJJQ19JT19OT19ST1VUSU5HOgo+ID4gKwljYXNlIFNNUF9OT19BUElDOgo+ID4g IAkJZGlzYWJsZV9zbXAoKTsKPiA+IC0JCS8qIFNldHVwIGxvY2FsIHRpbWVyICovCj4gPiAtCQl4 ODZfaW5pdC50aW1lcnMuc2V0dXBfcGVyY3B1X2Nsb2NrZXYoKTsKPiA+ICAJCXJldHVybjsKPiA+ IC0JY2FzZSBBUElDX1ZJUlRVQUxfV0lSRToKPiA+IC0JY2FzZSBBUElDX1NZTU1FVFJJQ19JTzoK PiA+ICsJY2FzZSBTTVBfRk9SQ0VfVVA6Cj4gPiArCQlkaXNhYmxlX3NtcCgpOwo+ID4gKwkJYXBp Y19ic3Bfc2V0dXAoZmFsc2UpOwo+ID4gKwkJcmV0dXJuOwo+ID4gKwljYXNlIFNNUF9PSzoKPiA+ ICAJCWJyZWFrOwo+ID4gIAl9Cj4gPiAgCj4gPiAtCS8qIFNldHVwIGxvY2FsIHRpbWVyICovCj4g PiAtCXg4Nl9pbml0LnRpbWVycy5zZXR1cF9wZXJjcHVfY2xvY2tldigpOwo+ID4gKwlpZiAocmVh ZF9hcGljX2lkKCkgIT0gYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKSB7Cj4gPiArCQlwYW5pYygi Qm9vdCBBUElDIElEIGluIGxvY2FsIEFQSUMgdW5leHBlY3RlZCAoJWQgdnMgJWQpIiwKPiA+ICsJ CSAgICAgcmVhZF9hcGljX2lkKCksIGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7Cj4gPiArCQkv KiBPciBjYW4gd2Ugc3dpdGNoIGJhY2sgdG8gUElDIGhlcmU/ICovCj4gPiArCX0KPiA+ICAKPiA+ IC0Jc21wX2dldF9sb2dpY2FsX2FwaWNpZCgpOwo+ID4gKwlkZWZhdWx0X3NldHVwX2FwaWNfcm91 dGluZygpOwo+ID4gKwljcHUwX2xvZ2ljYWxfYXBpY2lkID0gYXBpY19ic3Bfc2V0dXAoZmFsc2Up Owo+ID4gIAo+ID4gIAlwcl9pbmZvKCJDUFUwOiAiKTsKPiA+ICAJcHJpbnRfY3B1X2luZm8oJmNw dV9kYXRhKDApKTsKPiA+IEBAIC0xMzEzLDYgKzEzNDgsNyBAQCB2b2lkIF9faW5pdCBuYXRpdmVf c21wX2NwdXNfZG9uZSh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCj4gPiAgCj4gPiAgCW5taV9zZWxm dGVzdCgpOwo+ID4gIAlpbXByZXNzX2ZyaWVuZHMoKTsKPiA+ICsJc2V0dXBfaW9hcGljX2Rlc3Qo KTsKPiA+ICAJbXRycl9hcHNfaW5pdCgpOwo+ID4gIH0KPiA+ICAKPiA+IEBAIC0xNDcxLDE0ICsx NTA3LDEzIEBAIHZvaWQgY3B1X2Rpc2FibGVfY29tbW9uKHZvaWQpCj4gPiAgCXJlbW92ZV9jcHVf ZnJvbV9tYXBzKGNwdSk7Cj4gPiAgCXVubG9ja192ZWN0b3JfbG9jaygpOwo+ID4gIAlmaXh1cF9p cnFzKCk7Cj4gPiAtCWxhcGljX29mZmxpbmUoKTsKPiA+ICB9Cj4gPiAgCj4gPiAgaW50IG5hdGl2 ZV9jcHVfZGlzYWJsZSh2b2lkKQo+ID4gIHsKPiA+ICAJaW50IHJldDsKPiA+ICAKPiA+IC0JcmV0 ID0gbGFwaWNfY2FuX3VucGx1Z19jcHUoKTsKPiA+ICsJcmV0ID0gY2hlY2tfaXJxX3ZlY3RvcnNf Zm9yX2NwdV9kaXNhYmxlKCk7Cj4gPiAgCWlmIChyZXQpCj4gPiAgCQlyZXR1cm4gcmV0Owo+ID4g IAo+ID4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90aW1lLmMgYi9hcmNoL3g4Ni9rZXJu ZWwvdGltZS5jCj4gPiBpbmRleCA3NDlkMTg5ZjhjZDQuLjg3OWFmODY0ZDk5YSAxMDA2NDQKPiA+ IC0tLSBhL2FyY2gveDg2L2tlcm5lbC90aW1lLmMKPiA+ICsrKyBiL2FyY2gveDg2L2tlcm5lbC90 aW1lLmMKPiA+IEBAIC04NSwxMSArODUsNiBAQCB2b2lkIF9faW5pdCBocGV0X3RpbWVfaW5pdCh2 b2lkKQo+ID4gIHN0YXRpYyBfX2luaXQgdm9pZCB4ODZfbGF0ZV90aW1lX2luaXQodm9pZCkKPiA+ ICB7Cj4gPiAgCXg4Nl9pbml0LnRpbWVycy50aW1lcl9pbml0KCk7Cj4gPiAtCS8qCj4gPiAtCSAq IEFmdGVyIFBJVC9IUEVUIHRpbWVycyBpbml0LCBzZWxlY3QgYW5kIHNldHVwCj4gPiAtCSAqIHRo ZSBmaW5hbCBpbnRlcnJ1cHQgbW9kZSBmb3IgZGVsaXZlcmluZyBJUlFzLgo+ID4gLQkgKi8KPiA+ IC0JeDg2X2luaXQuaXJxcy5pbnRyX21vZGVfaW5pdCgpOwo+ID4gIAl0c2NfaW5pdCgpOwo+ID4g IH0KPiA+ICAKPiA+IGRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYyBiL2FyY2gv eDg2L2tlcm5lbC90cmFwcy5jCj4gPiBpbmRleCA5ODk1MTRjOTRhNTUuLjRlMmViMDFjYjNiZiAx MDA2NDQKPiA+IC0tLSBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jCj4gPiArKysgYi9hcmNoL3g4 Ni9rZXJuZWwvdHJhcHMuYwo+ID4gQEAgLTcxLDcgKzcxLDcgQEAKPiA+ICAjaW5jbHVkZSA8YXNt L3Byb3RvLmg+Cj4gPiAgI2VuZGlmCj4gPiAgCj4gPiAtREVDTEFSRV9CSVRNQVAoc3lzdGVtX3Zl Y3RvcnMsIE5SX1ZFQ1RPUlMpOwo+ID4gK0RFQ0xBUkVfQklUTUFQKHVzZWRfdmVjdG9ycywgTlJf VkVDVE9SUyk7Cj4gPiAgCj4gPiAgc3RhdGljIGlubGluZSB2b2lkIGNvbmRfbG9jYWxfaXJxX2Vu YWJsZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKPiA+ICB7Cj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC94 ODYva2VybmVsL3ZzbXBfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC92c21wXzY0LmMKPiA+IGluZGV4 IDQ0Njg1ZmIyYTE5Mi4uYjAzNGIxYjE0YjljIDEwMDY0NAo+ID4gLS0tIGEvYXJjaC94ODYva2Vy bmVsL3ZzbXBfNjQuYwo+ID4gKysrIGIvYXJjaC94ODYva2VybmVsL3ZzbXBfNjQuYwo+ID4gQEAg LTI2LDYgKzI2LDkgQEAKPiA+ICAKPiA+ICAjZGVmaW5lIFRPUE9MT0dZX1JFR0lTVEVSX09GRlNF VCAweDEwCj4gPiAgCj4gPiArLyogRmxhZyBiZWxvdyBpcyBpbml0aWFsaXplZCBvbmNlIGR1cmlu ZyB2U01QIFBDSSBpbml0aWFsaXphdGlvbi4gKi8KPiA+ICtzdGF0aWMgaW50IGlycV9yb3V0aW5n X2NvbXBseSA9IDE7Cj4gPiArCj4gPiAgI2lmIGRlZmluZWQgQ09ORklHX1BDSSAmJiBkZWZpbmVk IENPTkZJR19QQVJBVklSVAo+ID4gIC8qCj4gPiAgICogSW50ZXJydXB0IGNvbnRyb2wgb24gdlNN UG93ZXJlZCBzeXN0ZW1zOgo+ID4gQEAgLTEwMiw2ICsxMDUsOSBAQCBzdGF0aWMgdm9pZCBfX2lu aXQgc2V0X3ZzbXBfcHZfb3BzKHZvaWQpCj4gPiAgCWlmIChjYXAgJiBjdGwgJiBCSVQoOCkpIHsK PiA+ICAJCWN0bCAmPSB+QklUKDgpOwo+ID4gIAo+ID4gKwkJLyogSW50ZXJydXB0IHJvdXRpbmcg c2V0IHRvIGlnbm9yZSAqLwo+ID4gKwkJaXJxX3JvdXRpbmdfY29tcGx5ID0gMDsKPiA+ICsKPiA+ ICAjaWZkZWYgQ09ORklHX1BST0NfRlMKPiA+ICAJCS8qIERvbid0IGxldCB1c2VycyBjaGFuZ2Ug aXJxIGFmZmluaXR5IHZpYSBwcm9jZnMgKi8KPiA+ICAJCW5vX2lycV9hZmZpbml0eSA9IDE7Cj4g PiBAQCAtMjA1LDEwICsyMTEsMjMgQEAgc3RhdGljIGludCBhcGljaWRfcGh5c19wa2dfaWQoaW50 IGluaXRpYWxfYXBpY19pZCwgaW50IGluZGV4X21zYikKPiA+ICAJcmV0dXJuIGhhcmRfc21wX3By b2Nlc3Nvcl9pZCgpID4+IGluZGV4X21zYjsKPiA+ICB9Cj4gPiAgCj4gPiArLyoKPiA+ICsgKiBJ biB2U01QLCBhbGwgY3B1cyBzaG91bGQgYmUgY2FwYWJsZSBvZiBoYW5kbGluZyBpbnRlcnJ1cHRz LCByZWdhcmRsZXNzIG9mCj4gPiArICogdGhlIEFQSUMgdXNlZC4KPiA+ICsgKi8KPiA+ICtzdGF0 aWMgdm9pZCBmaWxsX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBzdHJ1Y3QgY3B1 bWFzayAqcmV0bWFzaywKPiA+ICsJCQkJCSAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCj4g PiArewo+ID4gKwljcHVtYXNrX3NldGFsbChyZXRtYXNrKTsKPiA+ICt9Cj4gPiArCj4gPiAgc3Rh dGljIHZvaWQgdnNtcF9hcGljX3Bvc3RfaW5pdCh2b2lkKQo+ID4gIHsKPiA+ICAJLyogbmVlZCB0 byB1cGRhdGUgcGh5c19wa2dfaWQgKi8KPiA+ICAJYXBpYy0+cGh5c19wa2dfaWQgPSBhcGljaWRf cGh5c19wa2dfaWQ7Cj4gPiArCj4gPiArCWlmICghaXJxX3JvdXRpbmdfY29tcGx5KQo+ID4gKwkJ YXBpYy0+dmVjdG9yX2FsbG9jYXRpb25fZG9tYWluID0gZmlsbF92ZWN0b3JfYWxsb2NhdGlvbl9k b21haW47Cj4gPiAgfQo+ID4gIAo+ID4gIHZvaWQgX19pbml0IHZzbXBfaW5pdCh2b2lkKQo+ID4g ZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jIGIvYXJjaC94ODYva2VybmVs L3g4Nl9pbml0LmMKPiA+IGluZGV4IDExNTFjY2Q3MmNlOS4uYzhmYTRjZDMxOTAzIDEwMDY0NAo+ ID4gLS0tIGEvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMKPiA+ICsrKyBiL2FyY2gveDg2L2tl cm5lbC94ODZfaW5pdC5jCj4gPiBAQCAtNTcsNyArNTcsNiBAQCBzdHJ1Y3QgeDg2X2luaXRfb3Bz IHg4Nl9pbml0IF9faW5pdGRhdGEgPSB7Cj4gPiAgCQkucHJlX3ZlY3Rvcl9pbml0CT0gaW5pdF9J U0FfaXJxcywKPiA+ICAJCS5pbnRyX2luaXQJCT0gbmF0aXZlX2luaXRfSVJRLAo+ID4gIAkJLnRy YXBfaW5pdAkJPSB4ODZfaW5pdF9ub29wLAo+ID4gLQkJLmludHJfbW9kZV9pbml0CQk9IGFwaWNf aW50cl9tb2RlX2luaXQKPiA+ICAJfSwKPiA+ICAKPiA+ICAJLm9lbSA9IHsKPiA+IGRpZmYgLS1n aXQgYS9hcmNoL3g4Ni94ZW4vYXBpYy5jIGIvYXJjaC94ODYveGVuL2FwaWMuYwo+ID4gaW5kZXgg NmI4MzBkNGNiNGM4Li4zMDQzNGI4NzA4ZjIgMTAwNjQ0Cj4gPiAtLS0gYS9hcmNoL3g4Ni94ZW4v YXBpYy5jCj4gPiArKysgYi9hcmNoL3g4Ni94ZW4vYXBpYy5jCj4gPiBAQCAtMzEsNyArMzEsNyBA QCBzdGF0aWMgdW5zaWduZWQgaW50IHhlbl9pb19hcGljX3JlYWQodW5zaWduZWQgYXBpYywgdW5z aWduZWQgcmVnKQo+ID4gIAlyZXR1cm4gMHhmZDsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIHUz MiB4ZW5fc2V0X2FwaWNfaWQodW5zaWduZWQgaW50IHgpCj4gPiArc3RhdGljIHVuc2lnbmVkIGxv bmcgeGVuX3NldF9hcGljX2lkKHVuc2lnbmVkIGludCB4KQo+ID4gIHsKPiA+ICAJV0FSTl9PTigx KTsKPiA+ICAJcmV0dXJuIHg7Cj4gPiBAQCAtMTYxLDEwICsxNjEsMTIgQEAgc3RhdGljIHN0cnVj dCBhcGljIHhlbl9wdl9hcGljID0gewo+ID4gIAkvKiAuaXJxX2RlbGl2ZXJ5X21vZGUgLSB1c2Vk IGluIG5hdGl2ZV9jb21wb3NlX21zaV9tc2cgb25seSAqLwo+ID4gIAkvKiAuaXJxX2Rlc3RfbW9k ZSAgICAgLSB1c2VkIGluIG5hdGl2ZV9jb21wb3NlX21zaV9tc2cgb25seSAqLwo+ID4gIAo+ID4g KwkudGFyZ2V0X2NwdXMJCQk9IGRlZmF1bHRfdGFyZ2V0X2NwdXMsCj4gPiAgCS5kaXNhYmxlX2Vz cgkJCT0gMCwKPiA+ICAJLyogLmRlc3RfbG9naWNhbCAgICAgIC0gIGRlZmF1bHRfc2VuZF9JUElf IHVzZSBpdCBidXQgd2UgdXNlIG91ciBvd24uICovCj4gPiAgCS5jaGVja19hcGljaWRfdXNlZAkJ PSBkZWZhdWx0X2NoZWNrX2FwaWNpZF91c2VkLCAvKiBVc2VkIG9uIDMyLWJpdCAqLwo+ID4gIAo+ ID4gKwkudmVjdG9yX2FsbG9jYXRpb25fZG9tYWluCT0gZmxhdF92ZWN0b3JfYWxsb2NhdGlvbl9k b21haW4sCj4gPiAgCS5pbml0X2FwaWNfbGRyCQkJPSB4ZW5fbm9vcCwgLyogc2V0dXBfbG9jYWxf QVBJQyBjYWxscyBpdCAqLwo+ID4gIAo+ID4gIAkuaW9hcGljX3BoeXNfaWRfbWFwCQk9IGRlZmF1 bHRfaW9hcGljX3BoeXNfaWRfbWFwLCAvKiBVc2VkIG9uIDMyLWJpdCAqLwo+ID4gQEAgLTE3Nyw3 ICsxNzksNyBAQCBzdGF0aWMgc3RydWN0IGFwaWMgeGVuX3B2X2FwaWMgPSB7Cj4gPiAgCS5nZXRf YXBpY19pZCAJCQk9IHhlbl9nZXRfYXBpY19pZCwKPiA+ICAJLnNldF9hcGljX2lkIAkJCT0geGVu X3NldF9hcGljX2lkLCAvKiBDYW4gYmUgTlVMTCBvbiAzMi1iaXQuICovCj4gPiAgCj4gPiAtCS5j YWxjX2Rlc3RfYXBpY2lkCQk9IGFwaWNfZmxhdF9jYWxjX2FwaWNpZCwKPiA+ICsJLmNwdV9tYXNr X3RvX2FwaWNpZAkJPSBmbGF0X2NwdV9tYXNrX3RvX2FwaWNpZCwKPiA+ICAKPiA+ICAjaWZkZWYg Q09ORklHX1NNUAo+ID4gIAkuc2VuZF9JUElfbWFzayAJCQk9IHhlbl9zZW5kX0lQSV9tYXNrLAo+ ID4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW5fcHYuYyBiL2FyY2gveDg2L3hl bi9lbmxpZ2h0ZW5fcHYuYwo+ID4gaW5kZXggNWIyYjNmM2Y2NTMxLi5mYmQwNTRkNmFjOTcgMTAw NjQ0Cj4gPiAtLS0gYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuX3B2LmMKPiA+ICsrKyBiL2FyY2gv eDg2L3hlbi9lbmxpZ2h0ZW5fcHYuYwo+ID4gQEAgLTEyMzAsNyArMTIzMCw2IEBAIGFzbWxpbmth Z2UgX192aXNpYmxlIHZvaWQgX19pbml0IHhlbl9zdGFydF9rZXJuZWwodm9pZCkKPiA+ICAJeDg2 X3BsYXRmb3JtLmdldF9ubWlfcmVhc29uID0geGVuX2dldF9ubWlfcmVhc29uOwo+ID4gIAo+ID4g IAl4ODZfaW5pdC5yZXNvdXJjZXMubWVtb3J5X3NldHVwID0geGVuX21lbW9yeV9zZXR1cDsKPiA+ IC0JeDg2X2luaXQuaXJxcy5pbnRyX21vZGVfaW5pdAk9IHg4Nl9pbml0X25vb3A7Cj4gPiAgCXg4 Nl9pbml0Lm9lbS5hcmNoX3NldHVwID0geGVuX2FyY2hfc2V0dXA7Cj4gPiAgCXg4Nl9pbml0Lm9l bS5iYW5uZXIgPSB4ZW5fYmFubmVyOwo+ID4gIAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9t bXUvYW1kX2lvbW11LmMgYi9kcml2ZXJzL2lvbW11L2FtZF9pb21tdS5jCj4gPiBpbmRleCA3ZDVl YjAwNDA5MWQuLmUyYTczOTAwMWM4YSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvaW9tbXUvYW1k X2lvbW11LmMKPiA+ICsrKyBiL2RyaXZlcnMvaW9tbXUvYW1kX2lvbW11LmMKPiA+IEBAIC00MTc4 LDI1ICs0MTc4LDE2IEBAIHN0YXRpYyB2b2lkIGlycV9yZW1hcHBpbmdfZnJlZShzdHJ1Y3QgaXJx X2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgdmlycSwKPiA+ICAJaXJxX2RvbWFpbl9mcmVl X2lycXNfY29tbW9uKGRvbWFpbiwgdmlycSwgbnJfaXJxcyk7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0 YXRpYyB2b2lkIGFtZF9pcl91cGRhdGVfaXJ0ZShzdHJ1Y3QgaXJxX2RhdGEgKmlycWQsIHN0cnVj dCBhbWRfaW9tbXUgKmlvbW11LAo+ID4gLQkJCSAgICAgICBzdHJ1Y3QgYW1kX2lyX2RhdGEgKmly X2RhdGEsCj4gPiAtCQkJICAgICAgIHN0cnVjdCBpcnFfMl9pcnRlICppcnRlX2luZm8sCj4gPiAt CQkJICAgICAgIHN0cnVjdCBpcnFfY2ZnICpjZmcpOwo+ID4gLQo+ID4gIHN0YXRpYyBpbnQgaXJx X3JlbWFwcGluZ19hY3RpdmF0ZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAo+ID4gIAkJCQkg IHN0cnVjdCBpcnFfZGF0YSAqaXJxX2RhdGEsIGJvb2wgZWFybHkpCj4gPiAgewo+ID4gIAlzdHJ1 Y3QgYW1kX2lyX2RhdGEgKmRhdGEgPSBpcnFfZGF0YS0+Y2hpcF9kYXRhOwo+ID4gIAlzdHJ1Y3Qg aXJxXzJfaXJ0ZSAqaXJ0ZV9pbmZvID0gJmRhdGEtPmlycV8yX2lydGU7Cj4gPiAgCXN0cnVjdCBh bWRfaW9tbXUgKmlvbW11ID0gYW1kX2lvbW11X3Jsb29rdXBfdGFibGVbaXJ0ZV9pbmZvLT5kZXZp ZF07Cj4gPiAtCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFkX2NmZyhpcnFfZGF0YSk7Cj4gPiAt Cj4gPiAtCWlmICghaW9tbXUpCj4gPiAtCQlyZXR1cm4gMDsKPiA+ICAKPiA+IC0JaW9tbXUtPmly dGVfb3BzLT5hY3RpdmF0ZShkYXRhLT5lbnRyeSwgaXJ0ZV9pbmZvLT5kZXZpZCwKPiA+IC0JCQkJ ICBpcnRlX2luZm8tPmluZGV4KTsKPiA+IC0JYW1kX2lyX3VwZGF0ZV9pcnRlKGlycV9kYXRhLCBp b21tdSwgZGF0YSwgaXJ0ZV9pbmZvLCBjZmcpOwo+ID4gKwlpZiAoaW9tbXUpCj4gPiArCQlpb21t dS0+aXJ0ZV9vcHMtPmFjdGl2YXRlKGRhdGEtPmVudHJ5LCBpcnRlX2luZm8tPmRldmlkLAo+ID4g KwkJCQkJICBpcnRlX2luZm8tPmluZGV4KTsKPiA+ICAJcmV0dXJuIDA7Cj4gPiAgfQo+ID4gIAo+ ID4gQEAgLTQyODQsMjIgKzQyNzUsNiBAQCBzdGF0aWMgaW50IGFtZF9pcl9zZXRfdmNwdV9hZmZp bml0eShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHZvaWQgKnZjcHVfaW5mbykKPiA+ICAJcmV0dXJu IG1vZGlmeV9pcnRlX2dhKGlydGVfaW5mby0+ZGV2aWQsIGlydGVfaW5mby0+aW5kZXgsIGlydGUs IGlyX2RhdGEpOwo+ID4gIH0KPiA+ICAKPiA+IC0KPiA+IC1zdGF0aWMgdm9pZCBhbWRfaXJfdXBk YXRlX2lydGUoc3RydWN0IGlycV9kYXRhICppcnFkLCBzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwK PiA+IC0JCQkgICAgICAgc3RydWN0IGFtZF9pcl9kYXRhICppcl9kYXRhLAo+ID4gLQkJCSAgICAg ICBzdHJ1Y3QgaXJxXzJfaXJ0ZSAqaXJ0ZV9pbmZvLAo+ID4gLQkJCSAgICAgICBzdHJ1Y3QgaXJx X2NmZyAqY2ZnKQo+ID4gLXsKPiA+IC0KPiA+IC0JLyoKPiA+IC0JICogQXRvbWljYWxseSB1cGRh dGVzIHRoZSBJUlRFIHdpdGggdGhlIG5ldyBkZXN0aW5hdGlvbiwgdmVjdG9yCj4gPiAtCSAqIGFu ZCBmbHVzaGVzIHRoZSBpbnRlcnJ1cHQgZW50cnkgY2FjaGUuCj4gPiAtCSAqLwo+ID4gLQlpb21t dS0+aXJ0ZV9vcHMtPnNldF9hZmZpbml0eShpcl9kYXRhLT5lbnRyeSwgaXJ0ZV9pbmZvLT5kZXZp ZCwKPiA+IC0JCQkJICAgICAgaXJ0ZV9pbmZvLT5pbmRleCwgY2ZnLT52ZWN0b3IsCj4gPiAtCQkJ CSAgICAgIGNmZy0+ZGVzdF9hcGljaWQpOwo+ID4gLX0KPiA+IC0KPiA+ICBzdGF0aWMgaW50IGFt ZF9pcl9zZXRfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkYXRhLAo+ID4gIAkJCSAgICAgICBj b25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgYm9vbCBmb3JjZSkKPiA+ICB7Cj4gPiBAQCAtNDMx Nyw3ICs0MjkyLDEzIEBAIHN0YXRpYyBpbnQgYW1kX2lyX3NldF9hZmZpbml0eShzdHJ1Y3QgaXJx X2RhdGEgKmRhdGEsCj4gPiAgCWlmIChyZXQgPCAwIHx8IHJldCA9PSBJUlFfU0VUX01BU0tfT0tf RE9ORSkKPiA+ICAJCXJldHVybiByZXQ7Cj4gPiAgCj4gPiAtCWFtZF9pcl91cGRhdGVfaXJ0ZShk YXRhLCBpb21tdSwgaXJfZGF0YSwgaXJ0ZV9pbmZvLCBjZmcpOwo+ID4gKwkvKgo+ID4gKwkgKiBB dG9taWNhbGx5IHVwZGF0ZXMgdGhlIElSVEUgd2l0aCB0aGUgbmV3IGRlc3RpbmF0aW9uLCB2ZWN0 b3IKPiA+ICsJICogYW5kIGZsdXNoZXMgdGhlIGludGVycnVwdCBlbnRyeSBjYWNoZS4KPiA+ICsJ ICovCj4gPiArCWlvbW11LT5pcnRlX29wcy0+c2V0X2FmZmluaXR5KGlyX2RhdGEtPmVudHJ5LCBp cnRlX2luZm8tPmRldmlkLAo+ID4gKwkJCSAgICBpcnRlX2luZm8tPmluZGV4LCBjZmctPnZlY3Rv ciwgY2ZnLT5kZXN0X2FwaWNpZCk7Cj4gPiArCj4gPiAgCS8qCj4gPiAgCSAqIEFmdGVyIHRoaXMg cG9pbnQsIGFsbCB0aGUgaW50ZXJydXB0cyB3aWxsIHN0YXJ0IGFycml2aW5nCj4gPiAgCSAqIGF0 IHRoZSBuZXcgZGVzdGluYXRpb24uIFNvLCB0aW1lIHRvIGNsZWFudXAgdGhlIHByZXZpb3VzCj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9pbnRlbF9pcnFfcmVtYXBwaW5nLmMgYi9kcml2 ZXJzL2lvbW11L2ludGVsX2lycV9yZW1hcHBpbmcuYwo+ID4gaW5kZXggNzZhMTkzYzdmY2ZjLi4z MjQxNjMzMzBlYWEgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2lvbW11L2ludGVsX2lycV9yZW1h cHBpbmcuYwo+ID4gKysrIGIvZHJpdmVycy9pb21tdS9pbnRlbF9pcnFfcmVtYXBwaW5nLmMKPiA+ IEBAIC0xMTIyLDI0ICsxMTIyLDYgQEAgc3RydWN0IGlycV9yZW1hcF9vcHMgaW50ZWxfaXJxX3Jl bWFwX29wcyA9IHsKPiA+ICAJLmdldF9pcnFfZG9tYWluCQk9IGludGVsX2dldF9pcnFfZG9tYWlu LAo+ID4gIH07Cj4gPiAgCj4gPiAtc3RhdGljIHZvaWQgaW50ZWxfaXJfcmVjb25maWd1cmVfaXJ0 ZShzdHJ1Y3QgaXJxX2RhdGEgKmlycWQsIGJvb2wgZm9yY2UpCj4gPiAtewo+ID4gLQlzdHJ1Y3Qg aW50ZWxfaXJfZGF0YSAqaXJfZGF0YSA9IGlycWQtPmNoaXBfZGF0YTsKPiA+IC0Jc3RydWN0IGly dGUgKmlydGUgPSAmaXJfZGF0YS0+aXJ0ZV9lbnRyeTsKPiA+IC0Jc3RydWN0IGlycV9jZmcgKmNm ZyA9IGlycWRfY2ZnKGlycWQpOwo+ID4gLQo+ID4gLQkvKgo+ID4gLQkgKiBBdG9taWNhbGx5IHVw ZGF0ZXMgdGhlIElSVEUgd2l0aCB0aGUgbmV3IGRlc3RpbmF0aW9uLCB2ZWN0b3IKPiA+IC0JICog YW5kIGZsdXNoZXMgdGhlIGludGVycnVwdCBlbnRyeSBjYWNoZS4KPiA+IC0JICovCj4gPiAtCWly dGUtPnZlY3RvciA9IGNmZy0+dmVjdG9yOwo+ID4gLQlpcnRlLT5kZXN0X2lkID0gSVJURV9ERVNU KGNmZy0+ZGVzdF9hcGljaWQpOwo+ID4gLQo+ID4gLQkvKiBVcGRhdGUgdGhlIGhhcmR3YXJlIG9u bHkgaWYgdGhlIGludGVycnVwdCBpcyBpbiByZW1hcHBlZCBtb2RlLiAqLwo+ID4gLQlpZiAoIWZv cmNlIHx8IGlyX2RhdGEtPmlycV8yX2lvbW11Lm1vZGUgPT0gSVJRX1JFTUFQUElORykKPiA+IC0J CW1vZGlmeV9pcnRlKCZpcl9kYXRhLT5pcnFfMl9pb21tdSwgaXJ0ZSk7Cj4gPiAtfQo+ID4gLQo+ ID4gIC8qCj4gPiAgICogTWlncmF0ZSB0aGUgSU8tQVBJQyBpcnEgaW4gdGhlIHByZXNlbmNlIG9m IGludHItcmVtYXBwaW5nLgo+ID4gICAqCj4gPiBAQCAtMTE1OCwxNSArMTE0MCwyNyBAQCBzdGF0 aWMgaW50Cj4gPiAgaW50ZWxfaXJfc2V0X2FmZmluaXR5KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwg Y29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssCj4gPiAgCQkgICAgICBib29sIGZvcmNlKQo+ID4g IHsKPiA+IC0Jc3RydWN0IGlycV9kYXRhICpwYXJlbnQgPSBkYXRhLT5wYXJlbnRfZGF0YTsKPiA+ ICsJc3RydWN0IGludGVsX2lyX2RhdGEgKmlyX2RhdGEgPSBkYXRhLT5jaGlwX2RhdGE7Cj4gPiAr CXN0cnVjdCBpcnRlICppcnRlID0gJmlyX2RhdGEtPmlydGVfZW50cnk7Cj4gPiAgCXN0cnVjdCBp cnFfY2ZnICpjZmcgPSBpcnFkX2NmZyhkYXRhKTsKPiA+ICsJc3RydWN0IGlycV9kYXRhICpwYXJl bnQgPSBkYXRhLT5wYXJlbnRfZGF0YTsKPiA+ICAJaW50IHJldDsKPiA+ICAKPiA+ICAJcmV0ID0g cGFyZW50LT5jaGlwLT5pcnFfc2V0X2FmZmluaXR5KHBhcmVudCwgbWFzaywgZm9yY2UpOwo+ID4g IAlpZiAocmV0IDwgMCB8fCByZXQgPT0gSVJRX1NFVF9NQVNLX09LX0RPTkUpCj4gPiAgCQlyZXR1 cm4gcmV0Owo+ID4gIAo+ID4gLQlpbnRlbF9pcl9yZWNvbmZpZ3VyZV9pcnRlKGRhdGEsIGZhbHNl KTsKPiA+ICsJLyoKPiA+ICsJICogQXRvbWljYWxseSB1cGRhdGVzIHRoZSBJUlRFIHdpdGggdGhl IG5ldyBkZXN0aW5hdGlvbiwgdmVjdG9yCj4gPiArCSAqIGFuZCBmbHVzaGVzIHRoZSBpbnRlcnJ1 cHQgZW50cnkgY2FjaGUuCj4gPiArCSAqLwo+ID4gKwlpcnRlLT52ZWN0b3IgPSBjZmctPnZlY3Rv cjsKPiA+ICsJaXJ0ZS0+ZGVzdF9pZCA9IElSVEVfREVTVChjZmctPmRlc3RfYXBpY2lkKTsKPiA+ ICsKPiA+ICsJLyogVXBkYXRlIHRoZSBoYXJkd2FyZSBvbmx5IGlmIHRoZSBpbnRlcnJ1cHQgaXMg aW4gcmVtYXBwZWQgbW9kZS4gKi8KPiA+ICsJaWYgKGlyX2RhdGEtPmlycV8yX2lvbW11Lm1vZGUg PT0gSVJRX1JFTUFQUElORykKPiA+ICsJCW1vZGlmeV9pcnRlKCZpcl9kYXRhLT5pcnFfMl9pb21t dSwgaXJ0ZSk7Cj4gPiArCj4gPiAgCS8qCj4gPiAgCSAqIEFmdGVyIHRoaXMgcG9pbnQsIGFsbCB0 aGUgaW50ZXJydXB0cyB3aWxsIHN0YXJ0IGFycml2aW5nCj4gPiAgCSAqIGF0IHRoZSBuZXcgZGVz dGluYXRpb24uIFNvLCB0aW1lIHRvIGNsZWFudXAgdGhlIHByZXZpb3VzCj4gPiBAQCAtMTM5OSw3 ICsxMzkzLDkgQEAgc3RhdGljIHZvaWQgaW50ZWxfaXJxX3JlbWFwcGluZ19mcmVlKHN0cnVjdCBp cnFfZG9tYWluICpkb21haW4sCj4gPiAgc3RhdGljIGludCBpbnRlbF9pcnFfcmVtYXBwaW5nX2Fj dGl2YXRlKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCj4gPiAgCQkJCQlzdHJ1Y3QgaXJxX2Rh dGEgKmlycV9kYXRhLCBib29sIGVhcmx5KQo+ID4gIHsKPiA+IC0JaW50ZWxfaXJfcmVjb25maWd1 cmVfaXJ0ZShpcnFfZGF0YSwgdHJ1ZSk7Cj4gPiArCXN0cnVjdCBpbnRlbF9pcl9kYXRhICpkYXRh ID0gaXJxX2RhdGEtPmNoaXBfZGF0YTsKPiA+ICsKPiA+ICsJbW9kaWZ5X2lydGUoJmRhdGEtPmly cV8yX2lvbW11LCAmZGF0YS0+aXJ0ZV9lbnRyeSk7Cj4gPiAgCXJldHVybiAwOwo+ID4gIH0KPiA+ ICAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9tc2kuYyBiL2RyaXZlcnMvcGNpL21zaS5j Cj4gPiBpbmRleCBlMDY2MDcxNjc4NTguLjQ5NmVkOTEzMDYwMCAxMDA2NDQKPiA+IC0tLSBhL2Ry aXZlcnMvcGNpL21zaS5jCj4gPiArKysgYi9kcml2ZXJzL3BjaS9tc2kuYwo+ID4gQEAgLTE0NDEs OCArMTQ0MSw2IEBAIHN0cnVjdCBpcnFfZG9tYWluICpwY2lfbXNpX2NyZWF0ZV9pcnFfZG9tYWlu KHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsCj4gPiAgCQlwY2lfbXNpX2RvbWFpbl91cGRh dGVfY2hpcF9vcHMoaW5mbyk7Cj4gPiAgCj4gPiAgCWluZm8tPmZsYWdzIHw9IE1TSV9GTEFHX0FD VElWQVRFX0VBUkxZOwo+ID4gLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfR0VORVJJQ19JUlFfUkVT RVJWQVRJT05fTU9ERSkpCj4gPiAtCQlpbmZvLT5mbGFncyB8PSBNU0lfRkxBR19NVVNUX1JFQUNU SVZBVEU7Cj4gPiAgCj4gPiAgCWRvbWFpbiA9IG1zaV9jcmVhdGVfaXJxX2RvbWFpbihmd25vZGUs IGluZm8sIHBhcmVudCk7Cj4gPiAgCWlmICghZG9tYWluKQo+ID4gZGlmZiAtLWdpdCBhL2luaXQv bWFpbi5jIGIvaW5pdC9tYWluLmMKPiA+IGluZGV4IGRmZWMzODA5ZTc0MC4uNjQyYjg4YmQzYzli IDEwMDY0NAo+ID4gLS0tIGEvaW5pdC9tYWluLmMKPiA+ICsrKyBiL2luaXQvbWFpbi5jCj4gPiBA QCAtNjY0LDEyICs2NjQsMTIgQEAgYXNtbGlua2FnZSBfX3Zpc2libGUgdm9pZCBfX2luaXQgc3Rh cnRfa2VybmVsKHZvaWQpCj4gPiAgCWRlYnVnX29iamVjdHNfbWVtX2luaXQoKTsKPiA+ICAJc2V0 dXBfcGVyX2NwdV9wYWdlc2V0KCk7Cj4gPiAgCW51bWFfcG9saWN5X2luaXQoKTsKPiA+IC0JYWNw aV9lYXJseV9pbml0KCk7Cj4gPiAgCWlmIChsYXRlX3RpbWVfaW5pdCkKPiA+ICAJCWxhdGVfdGlt ZV9pbml0KCk7Cj4gPiAgCWNhbGlicmF0ZV9kZWxheSgpOwo+ID4gIAlwaWRfaWRyX2luaXQoKTsK PiA+ICAJYW5vbl92bWFfaW5pdCgpOwo+ID4gKwlhY3BpX2Vhcmx5X2luaXQoKTsKPiA+ICAjaWZk ZWYgQ09ORklHX1g4Ngo+ID4gIAlpZiAoZWZpX2VuYWJsZWQoRUZJX1JVTlRJTUVfU0VSVklDRVMp KQo+ID4gIAkJZWZpX2VudGVyX3ZpcnR1YWxfbW9kZSgpOwo+ID4gZGlmZiAtLWdpdCBhL2tlcm5l bC9pcnEvS2NvbmZpZyBiL2tlcm5lbC9pcnEvS2NvbmZpZwo+ID4gaW5kZXggODllMzU1ODY2NDUw Li5hYzFhM2UyOWQzYjkgMTAwNjQ0Cj4gPiAtLS0gYS9rZXJuZWwvaXJxL0tjb25maWcKPiA+ICsr KyBiL2tlcm5lbC9pcnEvS2NvbmZpZwo+ID4gQEAgLTEwMCw5ICsxMDAsNiBAQCBjb25maWcgSVJR X1RJTUlOR1MKPiA+ICBjb25maWcgR0VORVJJQ19JUlFfTUFUUklYX0FMTE9DQVRPUgo+ID4gIAli b29sCj4gPiAgCj4gPiAtY29uZmlnIEdFTkVSSUNfSVJRX1JFU0VSVkFUSU9OX01PREUKPiA+IC0J Ym9vbAo+ID4gLQo+ID4gIGNvbmZpZyBJUlFfRE9NQUlOX0RFQlVHCj4gPiAgCWJvb2wgIkV4cG9z ZSBoYXJkd2FyZS92aXJ0dWFsIElSUSBtYXBwaW5nIHZpYSBkZWJ1Z2ZzIgo+ID4gIAlkZXBlbmRz IG9uIElSUV9ET01BSU4gJiYgREVCVUdfRlMKPiA+IC0tIAo+ID4gMi4xNS4wCj4gPiAKPiA+IF9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPiBJbnRlbC1n ZnggbWFpbGluZyBsaXN0Cj4gPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gPiBo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeApf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK