From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC v3 09/12] drm: Add API for in-kernel clients Date: Tue, 13 Mar 2018 16:11:29 +0100 Message-ID: <20180313151129.GG4788@phenom.ffwll.local> References: <20180222200653.19453-1-noralf@tronnes.org> <20180222200653.19453-10-noralf@tronnes.org> <20180306085604.GH22212@phenom.ffwll.local> <4dd894ad-c62a-418f-353b-2c04cb9325ec@tronnes.org> <20180312165148.GI8589@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Noralf Tr??nnes Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, laurent.pinchart@ideasonboard.com, dh.herrmann@gmail.com List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCBNYXIgMTIsIDIwMTggYXQgMDk6MjE6NDBQTSArMDEwMCwgTm9yYWxmIFRyPz9ubmVz IHdyb3RlOgo+IAo+IERlbiAxMi4wMy4yMDE4IDE3LjUxLCBza3JldiBEYW5pZWwgVmV0dGVyOgo+ ID4gT24gVGh1LCBNYXIgMDgsIDIwMTggYXQgMDY6MTI6MTFQTSArMDEwMCwgTm9yYWxmIFRyPz9u bmVzIHdyb3RlOgo+ID4gPiBEZW4gMDYuMDMuMjAxOCAwOS41Niwgc2tyZXYgRGFuaWVsIFZldHRl cjoKPiA+ID4gPiBPbiBUaHUsIEZlYiAyMiwgMjAxOCBhdCAwOTowNjo1MFBNICswMTAwLCBOb3Jh bGYgVHI/P25uZXMgd3JvdGU6Cj4gPiA+ID4gPiBUaGlzIGFkZHMgYW4gQVBJIGZvciB3cml0aW5n IGluLWtlcm5lbCBjbGllbnRzLgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBUT0RPOgo+ID4gPiA+ID4g LSBGbGVzaCBvdXQgYW5kIGNvbXBsZXRlIGRvY3VtZW50YXRpb24uCj4gPiA+ID4gPiAtIENsb25l ZCBkaXNwbGF5cyBpcyBub3QgdGVzdGVkLgo+ID4gPiA+ID4gLSBDb21wbGV0ZSB0aWxlZCBkaXNw bGF5IHN1cHBvcnQgYW5kIHRlc3QgaXQuCj4gPiA+ID4gPiAtIFRlc3QgcGx1Zy91bnBsdWcgZGlm ZmVyZW50IG1vbml0b3JzLgo+ID4gPiA+ID4gLSBBIHJ1bnRpbWUga25vYiB0byBwcmV2ZW50IGNs aWVudHMgZnJvbSBhdHRhY2hpbmcgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KPiA+ID4gPiA+IC0g TWF5YmUgYSB3YXkgdG8gdW5iaW5kIGluZGl2aWR1YWwgY2xpZW50IGluc3RhbmNlcy4KPiA+ID4g PiA+IC0gTWF5YmUgdGFrZSB0aGUgc3lzcnEgc3VwcG9ydCBpbiBkcm1fZmJfaGVscGVyIGFuZCBt b3ZlIGl0IGhlcmUgc29tZWhvdy4KPiA+ID4gPiA+IC0gQWRkIHN1c3BlbmQvcmVzdW1lIGNhbGxi YWNrcy4KPiA+ID4gPiA+ICAgICBEb2VzIGFueW9uZSBrbm93IHdoeSBmYmRldiByZXF1aXJlcyBz dXNwZW5kL3Jlc3VtZT8KPiA+ID4gPiA+IAo+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogTm9yYWxm IFRyPz9ubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+Cj4gPiA+ID4gVGhlIGNvcmUgY2xpZW50IGFw aSBJIGxpa2UuIFNvbWUgb2YgdGhlIG9wZW5zIEknbSBzZWVpbmc6Cj4gPiA+ID4gCj4gPiA+ID4g LSBJZiB3ZSBnbyB3aXRoIHVzaW5nIHRoZSBpbnRlcm5hbCBrbXMgYXBpIGRpcmVjdGx5IGluc3Rl YWQgb2YgSU9DVEwKPiA+ID4gPiAgICAgd3JhcHBlcnMgdGhlbiBhIGh1Z2UgcGlsZSBvZiB0aGUg ZnVuY3Rpb25zIHlvdSBoYXZlIGhlcmUgYXJlbid0IG5lZWRlZAo+ID4gPiA+ICAgICAoZS5nLiBh bGwgdGhlIGV2ZW50IHN0dWZmIHdlIGNhbiBqdXN0IGRpcmVjdGx5IHVzZSB2YmxhbmsgZXZlbnRz IGluc3RlYWQKPiA+ID4gPiAgICAgb2YgYWxsIHRoZSB3cmFwcGluZykuIEknbSBsZWFuaW5nIGV2 ZXIgbW9yZSBpbnRvIHRoYXQgZGlyZWN0aW9uLCBzaW5jZQo+ID4gPiA+ICAgICBtdWNoIGxlc3Mg Y29kZSB0byBhZGQuCj4gPiA+IExvb2tpbmcgYXQgZHJtX2ZiX2hlbHBlciBvbmNlIGFnYWluIEkg bm93IHNlZSBhbiBvcHBvcnR1bml0eSB0byBzaW1wbGlmeQo+ID4gPiB0aGUgbW9kZXNldHRpbmcg Y29kZSBieSBudWtpbmcgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IgYW5kIHN0b3AKPiA+ID4gbWFp bnRhaW5pbmcgYW4gYXJyYXkgb2YgY29ubmVjdG9ycy4gSXQgbG9va3MgdG8gYmUgcG9zc2libGUg dG8ganVzdAo+ID4gPiBjcmVhdGUgYW4gYXJyYXkgdGVtcG9yYXJpbHkgaW4gZHJtX3NldHVwX2Ny dGNzKCkgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUKPiA+ID4gZnVuY3Rpb24uIFRoZSBjb25uZWN0 b3JzIHdlIGNhcmUgYWJvdXQgYXJlIHJlZiBjb3VudGVkIGFuZCBhdHRhY2hlZCB0bwo+ID4gPiBt b2Rlc2V0cy4gVGhpcyB3b3VsZCByZW1vdmUgdGhlIG5lZWQgZm9yIGRybV9mYl9oZWxwZXJfYWRk X29uZV9jb25uZWN0b3IoKS4KPiA+ID4gCj4gPiA+IFNvIEkgbWlnaHQgYmUgYWJsZSB0byBkbyBz dHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jcnRjIC0+IGRybV9jbGllbnRfY3J0Ywo+ID4gPiBhbmQgbGV0 IHRoZSBjbGllbnQgQVBJIHRha2Ugb3ZlciBkcm1fc2V0dXBfY3J0Y3MoKS4gSSdsbCBnaXZlIGl0 IGEgdHJ5Lgo+ID4gSSdtIG1vcmUgd29uZGVyaW5nIHdoeSB3ZSBuZWVkIGRybV9jbGllbnRfY3J0 YyBhdCBhbGwsIHdoeSBpcyBkcm1fY3J0YyBub3QKPiA+IGdvb2QgZW5vdWdoLiBPciBtYXliZSBJ J20gbWlzc2luZyBzb21ldGhpbmcuIEltbyBpb2N0bCB3cmFwcGVycyBzaG91bGQgYmUKPiA+IHRo ZSBleGNlcHRpb24gd2hlcmUgd2UgcmVhbGx5LCByZWFsbHkgbmVlZCB0aGVtIChiZWNhdXNlIHRo ZSBiYWNrZW5kIG9mCj4gPiB0aGUgaW9jdGwgaXNuJ3QgaW1wbGVtZW50ZWQgaW4gYSBnZW5lcmlj IHdheSwgZS5nLiBkdW1iIGJ1ZmZlcnMpLCBub3QgZm9yCj4gPiBzdHVmZiB3aGVyZSB3ZSBhbHJl YWR5IGhhdmUgYSBwZXJmZWN0bHkgdXNlYWJsZSBpbi1rZXJuZWwgYWJpIChhbnl0aGluZwo+ID4g cmVsYXRlZCB0byBtb2Rlc2V0dGluZykuCj4gCj4gSSB3YXMgdGFsa2luZyBhYm91dCBtb3Zpbmcg dGhlIG1vZGVzZXR0aW5nIGNvZGUgZnJvbSBkcm1fZmJfaGVscGVyLmMKPiB0byBkcm1fY2xpZW50 LmMsIHdoaWNoIG1lYW50IG1vdmluZyAnc3RydWN0IGRybV9mYl9oZWxwZXJfY3J0YycgYXMgd2Vs bC4KPiAKPiBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jcnRjIHsKPiDCoMKgwqAgc3RydWN0IGRybV9t b2RlX3NldCBtb2RlX3NldDsKPiDCoMKgwqAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRlc2ly ZWRfbW9kZTsKPiDCoMKgwqAgaW50IHgsIHk7Cj4gfTsKPiAKPiBCdXQgbWF5YmUgd2UgY2FuIGdl dCByaWQgb2YgdGhhdCBzdHJ1Y3QgYXMgd2VsbC4KPiBUaGUgaW5mbyBpdCBjb250YWlucyBpcyBh bHNvIGF2YWlsYWJsZSBpbiBkcm1fbW9kZV9zZXQ6Cgpkcm1fbW9kZV9zZXQgaXMgdGhlIHVhcGkg c3RydWN0IGZvciB0aGUgbGVnYWN5IGlvY3RsLCBidXQgeWVhaCBJIGd1ZXNzIHdlCmNhbiByZWN5 Y2xlIHRoYXQuIEFuZCBJIGRpZG4ndCB1bmRlcnN0YW5kIHdoYXQgeW91IHdhbnRlZCB0byBkbywK ZXh0cmFjdGluZyB0aGUgZmJkZXYgaGVscGVyIG1pZ2h0IG1ha2Ugc2Vuc2UuIEJ1dCBtb3N0IG9m IHRoZSBjb2RlIHNlZW1zCmZiZGV2IHNwZWNpZmljLCBzbyBub3Qgc3VyZSBob3cgbXVjaCB1c2Ug dGhhdCB3b3VsZCBiZSBpbiBvdGhlciBjbGllbnRzLgoKVGhlcmUncyBhbHNvIGEgYml0IHRoZSBw cm9ibGVtIHRoYXQgaXQncyBjcnVmdHkgKGl0IHN0YXJ0ZWQgb3V0IGFzCnNvbWV0aGluZyB0aGF0 IHdhcyBmdWxseSBpbnRlZ3JhdGVkIGludG8gZHJpdmVycyBhbmQgZGlnZ2luZyBhcm91bmQgaW4K ZHJpdmVyIGludGVybmFscyBkaXJlY3RseSwgaGVuY2UgYWxzbyB0aGUgY29udm9sdXRlZCBhbGxv Y2F0aW9uIGxvZ2ljKS4KLURhbmllbAoKPiAKPiBzdGF0aWMgdm9pZCBkcm1fc2V0dXBfY3J0Y3Mo c3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKPiDCoMKgwqAgwqDCoMKgIMKgwqDCoCDC oMKgwqAgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0KQo+IHsKPiAuLi4KPiDCoMKgwqAgZHJtX2ZiX2hl bHBlcl9mb3JfZWFjaF9jb25uZWN0b3IoZmJfaGVscGVyLCBpKSB7Cj4gwqDCoMKgIMKgwqDCoCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IG1vZGVzW2ldOwo+IMKgwqDCoCDCoMKgwqAg c3RydWN0IGRybV9mYl9oZWxwZXJfY3J0YyAqZmJfY3J0YyA9IGNydGNzW2ldOwo+IMKgwqDCoCDC oMKgwqAgc3RydWN0IGRybV9mYl9vZmZzZXQgKm9mZnNldCA9ICZvZmZzZXRzW2ldOwo+IAo+IMKg wqDCoCDCoMKgwqAgaWYgKG1vZGUgJiYgZmJfY3J0Yykgewo+IMKgwqDCoCDCoMKgwqAgwqDCoMKg IHN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQgPSAmZmJfY3J0Yy0+bW9kZV9zZXQ7Cj4gCj4g wqDCoMKgIMKgwqDCoCDCoMKgwqAgZmJfY3J0Yy0+ZGVzaXJlZF9tb2RlID0gbW9kZTsKPiDCoMKg wqAgwqDCoMKgIMKgwqDCoCBmYl9jcnRjLT54ID0gb2Zmc2V0LT54Owo+IMKgwqDCoCDCoMKgwqAg wqDCoMKgIGZiX2NydGMtPnkgPSBvZmZzZXQtPnk7Cj4gwqDCoMKgIMKgwqDCoCDCoMKgwqAgbW9k ZXNldC0+bW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsCj4gwqDCoMKgIMKgwqDCoCDCoMKg wqAgwqDCoMKgIMKgwqDCoCDCoMKgwqAgwqDCoMKgIMKgwqAgZmJfY3J0Yy0+ZGVzaXJlZF9tb2Rl KTsKPiDCoMKgwqAgwqDCoMKgIMKgwqDCoCBtb2Rlc2V0LT54ID0gb2Zmc2V0LT54Owo+IMKgwqDC oCDCoMKgwqAgwqDCoMKgIG1vZGVzZXQtPnkgPSBvZmZzZXQtPnk7Cj4gwqDCoMKgIMKgwqDCoCB9 Cj4gwqDCoMKgIH0KPiAKPiBJIHRvb2sgdGhlIGhpbnQgYWJvdXQgbXkgaW9jdGwgd3JhcHBlcnMg Oi0pCj4gCj4gTm9yYWxmLgo+IAo+ID4gCj4gPiBBbmQgaW4gYSB3YXkgdGhlIGlvY3RsIHdyYXBw ZXJzIHdvdWxkbid0IHJlYWxseSBiZSBpb2N0bCB3cmFwcGVycwo+ID4gY29uY2VwdHVhbGx5LCBi dXQgc2ltcGxlIHNoYXJlIHNvbWUgb2YgdGhlIHNhbWUgY29kZSB3aXRoIHRoZSBpb2N0bCBjYWxs Cj4gPiBjaGFpbi4gVGhlIGlkZWEgaXMgdG8gcHJvdmlkZSBzb21lIG1pbmltYWwgd3JhcHBhciBh cm91bmQgdGhlIC0+ZHVtYioKPiA+IGNhbGxiYWNrcy4KPiA+IAo+ID4gQW55dGhpbmcgZWxzZSBp cyBub3QgbmVlZGVkLCBJIHRoaW5rLgo+ID4gCj4gPiA+IFRoZXJlIGlzIG9uZSBjaGFsbGVuZ2Ug SSBzZWUgdXBmcm9udCBhbmQgdGhhdCdzIHRoZSBpOTE1IGZiX2hlbHBlcgo+ID4gPiBjYWxsYmFj ayBpbiBkcm1fc2V0dXBfY3J0Y3MoKS4KPiA+ID4gCj4gPiA+ID4gLSBUaGUgcmVnaXN0ZXIvdW5y ZWdpc3RlciBtb2RlbCBuZWVkcyBtb3JlIHRob3VnaHQuIEFsbG93aW5nIGJvdGggY2xpZW50cwo+ ID4gPiA+ICAgICB0byByZWdpc3RlciB3aGVuZXZlciB0aGV5IHdhbnQgdG8sIGFuZCBkcm1fZGV2 aWNlIGluc3RhbmNlcyB0byBjb21lIGFuZAo+ID4gPiA+ICAgICBnbyBpcyB3aGF0IGZiY29uIGhh cyBkb25lLCBhbmQgdGhlIHJlc3VsdGluZyBsb2NraW5nIGlzIGEgaG9ycm9yIHNob3cuCj4gPiA+ ID4gCj4gPiA+ID4gICAgIEkgdGhpbmsgaWYgd2UgcmVxdWlyZSB0aGF0IGFsbCBpbi1rZXJuZWwg ZHJtX2NsaWVudHMgYXJlIHJlZ2lzdGVycyB3aGVuCj4gPiA+ID4gICAgIGxvYWRpbmcgZHJtLmtv IChhbmQgZW5hYmxlZC9kaXNhYmxlZCBvbmx5IHBlciBtb2R1bGUgb3B0aW9ucyBhbmQKPiA+ID4g PiAgICAgS2NvbmZpZyksIHRoZW4gd2UgY2FuIHRocm93IG91dCBhbGwgdGhlIGxvY2tpbmcuIFRo YXQgYXZvaWRzIGEgbG90IG9mCj4gPiA+ID4gICAgIHRoZSBoZWFkYWNoZXMuCj4gPiA+ID4gCj4g PiA+ID4gICAgIDJuZCwgaWYgdGhlIGxpc3Qgb2YgY2xpZW50cyBpcyBzdGF0aWMgb3ZlciB0aGUg bGlmZXRpbWUgb2YgZHJtLmtvLCB3ZQo+ID4gPiA+ICAgICBhbHNvIGRvbid0IG5lZWQgdG8gaXRl cmF0ZSBleGlzdGluZyBkcml2ZXJzLiBXaGljaCBhdm9pZHMgbWUgaGF2aW5nIHRvCj4gPiA+ID4g ICAgIHJldmlldyB0aGUgaXRlcmF0b3IgcGF0Y2ggKHRoYXQncyB0aGUgb3RoZXIgYXNwZWN0IHdo ZXJlIGZiY29uIHRvdGFsbHkKPiA+ID4gPiAgICAgZmFsbHMgb3ZlciBhbmQgZXNzZW50aWFsbHkg anVzdCBpZ25vcmVzIGEgYnVuY2ggb2YgcmFjZXMpLgo+ID4gPiBBcmUgeW91IHRhbGtpbmcgYWJv dXQgbGlua2luZyB0aGUgY2xpZW50cyBpbnRvIGRybS5rbz8KPiA+ID4gCj4gPiA+IGRyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZToKPiA+ID4gCj4gPiA+IGRybS0kKENPTkZJR19EUk1fQ0xJRU5UX0JP T1RTUExBU0gpICs9IGNsaWVudC9kcm1fYm9vdHNwbGFzaC5vCj4gPiA+IAo+ID4gPiBkcml2ZXJz L2dwdS9kcm0vZHJtX2Rydi5jOgo+ID4gPiAKPiA+ID4gPz9zdGF0aWMgaW50IF9faW5pdCBkcm1f Y29yZV9pbml0KHZvaWQpCj4gPiA+ID8/ewo+ID4gPiArPz8/Pz8/IGRybV9ib290c3BsYXNoX3Jl Z2lzdGVyKCk7Cj4gPiA+ICs/Pz8/Pz8gZHJtX2ZiZGV2X3JlZ2lzdGVyKCk7Cj4gPiA+ID8/fQo+ ID4gPiAKPiA+ID4gZHJpdmVycy9ncHUvZHJtL2RybV9pbnRlcm5hbC5oOgo+ID4gPiAKPiA+ID4g I2lmZGVmIERSTV9DTElFTlRfQk9PVFNQTEFTSAo+ID4gPiB2b2lkIGRybV9ib290c3BsYXNoX3Jl Z2lzdGVyKHZvaWQpOwo+ID4gPiAjZWxzZQo+ID4gPiBzdGF0aWMgaW5saW5lIHZvaWQgZHJtX2Jv b3RzcGxhc2hfcmVnaXN0ZXIodm9pZCkKPiA+ID4gewo+ID4gPiB9Cj4gPiA+ICNlbmRpZgo+ID4g PiAKPiA+ID4gZHJpdmVycy9ncHUvZHJtL2NsaWVudC9kcm1fYm9vdHNwbGFzaC5jOgo+ID4gPiAK PiA+ID4gc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY2xpZW50X2Z1bmNzIGRybV9ib290c3BsYXNo X2Z1bmNzID0gewo+ID4gPiA/Pz8/Pz8gLm5hbWU/Pz8/Pz8gPz8/Pz8/ID0gImRybV9ib290c3Bs YXNoIiwKPiA+ID4gPz8/Pz8/IC5uZXc/Pz8/Pz8gPz8/Pz8/ID0gZHJtX2Jvb3RzcGxhc2hfbmV3 LAo+ID4gPiA/Pz8/Pz8gLnJlbW92ZT8/Pz8/PyA/Pz8/Pz8gPSBkcm1fYm9vdHNwbGFzaF9yZW1v dmUsCj4gPiA+ID8/Pz8/PyAuaG90cGx1Zz8/Pz8/PyA9IGRybV9ib290c3BsYXNoX2hvdHBsdWcs Cj4gPiA+IH07Cj4gPiA+IAo+ID4gPiB2b2lkIGRybV9ib290c3BsYXNoX3JlZ2lzdGVyKHZvaWQp Cj4gPiA+IHsKPiA+ID4gPz8/Pz8/IGRybV9jbGllbnRfcmVnaXN0ZXIoJmRybV9ib290c3BsYXNo X2Z1bmNzKTsKPiA+ID4gfQo+ID4gPiAKPiA+ID4gZHJpdmVycy9ncHUvZHJtL2RybV9jbGllbnQu YzoKPiA+ID4gCj4gPiA+IHN0YXRpYyBMSVNUX0hFQUQoZHJtX2NsaWVudF9mdW5jc19saXN0KTsK PiA+ID4gCj4gPiA+IHZvaWQgZHJtX2NsaWVudF9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZHJtX2Ns aWVudF9mdW5jcyAqZnVuY3MpCj4gPiA+IHsKPiA+ID4gPz8/Pz8/IHN0cnVjdCBkcm1fY2xpZW50 X2Z1bmNzX2VudHJ5ICpmdW5jc19lbnRyeTsKPiA+ID4gCj4gPiA+ID8/Pz8/PyBmdW5jc19lbnRy eSA9IGt6YWxsb2Moc2l6ZW9mKCpmdW5jc19lbnRyeSksIEdGUF9LRVJORUwpOwo+ID4gPiA/Pz8/ Pz8gaWYgKCFmdW5jc19lbnRyeSkgewo+ID4gPiA/Pz8/Pz8gPz8/Pz8/IERSTV9FUlJPUigiRmFp bGVkIHRvIHJlZ2lzdGVyOiAlc1xuIiwgZnVuY3MtPm5hbWUpOwo+ID4gPiA/Pz8/Pz8gPz8/Pz8/ IHJldHVybjsKPiA+ID4gPz8/Pz8/IH0KPiA+ID4gCj4gPiA+ID8/Pz8/PyBmdW5jc19lbnRyeS0+ ZnVuY3MgPSBmdW5jczsKPiA+ID4gCj4gPiA+ID8/Pz8/PyBsaXN0X2FkZCgmZnVuY3NfZW50cnkt Pmxpc3QsICZkcm1fY2xpZW50X2Z1bmNzX2xpc3QpOwo+ID4gPiAKPiA+ID4gPz8/Pz8/IERSTV9E RUJVR19LTVMoIiVzXG4iLCBmdW5jcy0+bmFtZSk7Cj4gPiA+IH0KPiA+ID4gCj4gPiA+IAo+ID4g PiBBbmQgZWFjaCBjbGllbnQgaGF2aW5nIGEgcnVudGltZSBlbmFibGUvZGlzYWJsZSBrbm9iOgo+ ID4gPiAKPiA+ID4gZHJpdmVycy9ncHUvZHJtL2NsaWVudC9kcm1fYm9vdHNwbGFzaC5jOgo+ID4g PiAKPiA+ID4gc3RhdGljIGJvb2wgZHJtX2Jvb3RzcGxhc2hfZW5hYmxlZCA9IHRydWU7Cj4gPiA+ IG1vZHVsZV9wYXJhbV9uYW1lZChib290c3BsYXNoX2VuYWJsZWQsIGRybV9ib290c3BsYXNoX2Vu YWJsZWQsIGJvb2wsIDA2MDApOwo+ID4gPiBNT0RVTEVfUEFSTV9ERVNDKGJvb3RzcGxhc2hfZW5h YmxlZCwgIkVuYWJsZSBib290c3BsYXNoIGNsaWVudAo+ID4gPiBbZGVmYXVsdD10cnVlXSIpOwo+ ID4gCj4gPiBZdXAsIHByZXR0eSBtdWNoLgo+ID4gCj4gPiA+IFNpbXBsZSBVU0IgRGlzcGxheQo+ ID4gPiBBIGZldyBtb250aHMgYmFjayB3aGlsZSBsb29raW5nIGF0IHRoZSB1ZGwgc2htZW0gY29k ZSwgSSBnb3QgdGhlIGlkZWEKPiA+ID4gdGhhdCBJIGNvdWxkIHR1cm4gYSBSYXNwYmVycnkgUGkg WmVybyBpbnRvIGEgJDUgVVNCIHRvIEhETUkvRFNJL0RQSS9EQkkvVFYKPiA+ID4gYWRhcHRlci4g VGhlIGhvc3Qgc2lkZSB3b3VsZCBiZSBhIHNpbXBsZSB0aW55ZHJtIGRyaXZlciB1c2luZyB0aGUg a2VybmVsCj4gPiA+IGNvbXByZXNzaW9uIGxpYiB0byBzcGVlZCB1cCB0cmFuc2ZlcnMuIFRoZSBn YWRnZXQvZGV2aWNlIHNpZGUgd291bGQgYmUgYQo+ID4gPiB1c2Vyc3BhY2UgYXBwIGRlY29tcHJl c3NpbmcgdGhlIGJ1ZmZlciBpbnRvIGFuIGV4cG9ydGVkIGR1bWIgYnVmZmVyLgo+ID4gPiAKPiA+ ID4gV2hpbGUgd29ya2luZyB3aXRoIHRoaXMgY2xpZW50IEFQSSBJIHJlYWxpemVkIHRoYXQgSSBj b3VsZCB1c2UgaXQgYW5kCj4gPiA+IHdyaXRlIGEga2VybmVsIGdhZGdldCBkcml2ZXIgaW5zdGVh ZCBhdm9pZGluZyB0aGUgY2hhbGxlbmdlIG9mIGdvaW5nCj4gPiA+IGJhY2sgYW5kIGZvcnRoIHRv IHVzZXJzcGFjZSB3aXRoIHRoZSBmcmFtZWJ1ZmZlci4gRm9yIHN1Y2ggYSBjbGllbnQgSQo+ID4g PiB3b3VsZCBoYXZlIHByZWZlcnJlZCBpdCB0byBiZSBhIGxvYWRhYmxlIG1vZHVsZSBub3QgbGlu a2VkIGludG8gZHJtLmtvCj4gPiA+IHRvIGluY3JlYXNlIHRoZSBjaGFuY2UgdGhhdCBkaXN0cmli dXRpb25zIHdvdWxkIGVuYWJsZSBpdC4KPiA+IEkgdGhpbmsgdGhhdCB3ZSBjYW4gZG8gYXMgYSBs b2FkYWJsZSBjbGllbnQsIHNpbmNlIHlvdSBwcm9iYWJseSB3YW50IHNvbWUKPiA+IGNvbmZpZ2Zz IGludGVyZmFjZSB0byBkZWZpbmUgd2hpY2ggZHJtIGRyaXZlciBpdCBzaG91bGQgY29udHJvbC4g VGhlCj4gPiByZWFzb24gYmVoaW5kIHRoZSBzdGF0aWMgbGlzdCBvZiBidWlsdC1pbiBjbGllbnRz IGlzIHB1cmVseSBmb3IgdGhlCj4gPiBhdXRvLXJlZ2lzdGVyIHN0dWZmIHRoYXQgd2Ugd2FudCBm b3IgZmJkZXYgZW11bGF0aW9uIGFuZCBvdGhlciB0aGluZ3MuCj4gPiBBdXRvLXJlZ2lzdHJhdGlv biB3aGVyZSBib3RoIHNpZGVzIGNhbiBiZSBsb2FkZWQgaW4gYW55IG9yZGVyIGlzIHJlYWwgcGFp bgo+ID4gd3J0IGxvY2tpbmcuIEV4cGxpY2l0IHJlZ2lzdHJhdGlvbiB3aGVyZSB5b3UgY2FuIGxv YWQgYm90aCBzaWRlcyBpcwo+ID4gdG90YWxseSBmaW5lIGFuZCBJIHRoaW5rIHdvdWxkIGNvdmVy IHlvdXIgdXNiIGdhZGdldCBkaXNwbGF5IGRyaXZlcgo+ID4gdXNlLWNhc2UuCj4gPiAKPiA+IGJ0 dyB1c2IgZ2FkZ2V0IGRyaXZlciB0byBkcml2ZSBkcm0ga21zIGRyaXZlcnMgc291bmRzIGxpa2Ug YSByZWFsbHkgY29vbAo+ID4gdGhpbmcuCj4gPiAtRGFuaWVsCj4gPiAKPiA+ID4gTm9yYWxmLgo+ ID4gPiAKPiA+ID4gPiA+IC0tLQo+ID4gPiA+ID4gICAgZHJpdmVycy9ncHUvZHJtL0tjb25maWcg ICAgICAgICAgICAgfCAgICAyICsKPiA+ID4gPiA+ICAgIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmls ZSAgICAgICAgICAgIHwgICAgMyArLQo+ID4gPiA+ID4gICAgZHJpdmVycy9ncHUvZHJtL2NsaWVu dC9LY29uZmlnICAgICAgfCAgICA0ICsKPiA+ID4gPiA+ICAgIGRyaXZlcnMvZ3B1L2RybS9jbGll bnQvTWFrZWZpbGUgICAgIHwgICAgMSArCj4gPiA+ID4gPiAgICBkcml2ZXJzL2dwdS9kcm0vY2xp ZW50L2RybV9jbGllbnQuYyB8IDE2MTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKPiA+ID4gPiBJJ2QgbW92ZSB0aGlzIGludG8gbWFpbiBkcm0vIGRpcmVjdG9yeSwgaXQncyBm YWlybHkgY29yZSBzdHVmZi4KPiA+ID4gPiAKPiA+ID4gPiA+ICAgIGRyaXZlcnMvZ3B1L2RybS9k cm1fZHJ2LmMgICAgICAgICAgIHwgICAgNiArCj4gPiA+ID4gPiAgICBkcml2ZXJzL2dwdS9kcm0v ZHJtX2ZpbGUuYyAgICAgICAgICB8ICAgIDMgKwo+ID4gPiA+ID4gICAgZHJpdmVycy9ncHUvZHJt L2RybV9wcm9iZV9oZWxwZXIuYyAgfCAgICAzICsKPiA+ID4gPiA+ICAgIGluY2x1ZGUvZHJtL2Ry bV9jbGllbnQuaCAgICAgICAgICAgIHwgIDE5MiArKysrKwo+ID4gPiA+ID4gICAgaW5jbHVkZS9k cm0vZHJtX2RldmljZS5oICAgICAgICAgICAgfCAgICAxICsKPiA+ID4gPiA+ICAgIGluY2x1ZGUv ZHJtL2RybV9maWxlLmggICAgICAgICAgICAgIHwgICAgNyArCj4gPiA+ID4gPiAgICAxMSBmaWxl cyBjaGFuZ2VkLCAxODMzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiA+ID4gPiA+ICAg IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vY2xpZW50L0tjb25maWcKPiA+ID4g PiA+ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vY2xpZW50L01ha2VmaWxl Cj4gPiA+ID4gPiAgICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2NsaWVudC9k cm1fY2xpZW50LmMKPiA+ID4gPiA+ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2RybS9k cm1fY2xpZW50LmgKPiA+ID4gPiA+IAo+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiA+ID4gPiA+IGluZGV4IGRl ZWVmYTdhMTc3My4uZDRhZTE1ZjllZTlmIDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL0tjb25maWcKPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4g PiA+ID4gPiBAQCAtMTU0LDYgKzE1NCw4IEBAIGNvbmZpZyBEUk1fU0NIRUQKPiA+ID4gPiA+ICAg IAl0cmlzdGF0ZQo+ID4gPiA+ID4gICAgCWRlcGVuZHMgb24gRFJNCj4gPiA+ID4gPiArc291cmNl ICJkcml2ZXJzL2dwdS9kcm0vY2xpZW50L0tjb25maWciCj4gPiA+ID4gPiArCj4gPiA+ID4gPiAg ICBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9pMmMvS2NvbmZpZyIKPiA+ID4gPiA+ICAgIHNvdXJj ZSAiZHJpdmVycy9ncHUvZHJtL2FybS9LY29uZmlnIgo+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ID4gPiA+ ID4gaW5kZXggNTAwOTNmZjQ0NzliLi44ZTA2ZGM3ZWVjYTEgMTAwNjQ0Cj4gPiA+ID4gPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9NYWtlZmlsZQo+ID4gPiA+ID4gQEAgLTE4LDcgKzE4LDcgQEAgZHJtLXkgICAgICAgOj0JZHJt X2F1dGgubyBkcm1fYnVmcy5vIGRybV9jYWNoZS5vIFwKPiA+ID4gPiA+ICAgIAkJZHJtX2VuY29k ZXIubyBkcm1fbW9kZV9vYmplY3QubyBkcm1fcHJvcGVydHkubyBcCj4gPiA+ID4gPiAgICAJCWRy bV9wbGFuZS5vIGRybV9jb2xvcl9tZ210Lm8gZHJtX3ByaW50Lm8gXAo+ID4gPiA+ID4gICAgCQlk cm1fZHVtYl9idWZmZXJzLm8gZHJtX21vZGVfY29uZmlnLm8gZHJtX3ZibGFuay5vIFwKPiA+ID4g PiA+IC0JCWRybV9zeW5jb2JqLm8gZHJtX2xlYXNlLm8KPiA+ID4gPiA+ICsJCWRybV9zeW5jb2Jq Lm8gZHJtX2xlYXNlLm8gY2xpZW50L2RybV9jbGllbnQubwo+ID4gPiA+ID4gICAgZHJtLSQoQ09O RklHX0RSTV9MSUJfUkFORE9NKSArPSBsaWIvZHJtX3JhbmRvbS5vCj4gPiA+ID4gPiAgICBkcm0t JChDT05GSUdfRFJNX1ZNKSArPSBkcm1fdm0ubwo+ID4gPiA+ID4gQEAgLTEwMywzICsxMDMsNCBA QCBvYmotJChDT05GSUdfRFJNX01YU0ZCKQkrPSBteHNmYi8KPiA+ID4gPiA+ICAgIG9iai0kKENP TkZJR19EUk1fVElOWURSTSkgKz0gdGlueWRybS8KPiA+ID4gPiA+ICAgIG9iai0kKENPTkZJR19E Uk1fUEwxMTEpICs9IHBsMTExLwo+ID4gPiA+ID4gICAgb2JqLSQoQ09ORklHX0RSTV9UVkUyMDAp ICs9IHR2ZTIwMC8KPiA+ID4gPiA+ICtvYmoteQkJCSs9IGNsaWVudC8KPiA+ID4gPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vY2xpZW50L0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0v Y2xpZW50L0tjb25maWcKPiA+ID4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiA+ID4gPiBp bmRleCAwMDAwMDAwMDAwMDAuLjRiYjhlNDY1NWZmNwo+ID4gPiA+ID4gLS0tIC9kZXYvbnVsbAo+ ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2NsaWVudC9LY29uZmlnCj4gPiA+ID4gPiBA QCAtMCwwICsxLDQgQEAKPiA+ID4gPiA+ICttZW51ICJEUk0gQ2xpZW50cyIKPiA+ID4gPiA+ICsJ ZGVwZW5kcyBvbiBEUk0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtlbmRtZW51Cj4gPiA+ID4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2NsaWVudC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1 L2RybS9jbGllbnQvTWFrZWZpbGUKPiA+ID4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiA+ ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmY2NjU1NGNkNWM0NQo+ID4gPiA+ID4gLS0tIC9kZXYv bnVsbAo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2NsaWVudC9NYWtlZmlsZQo+ID4g PiA+ID4gQEAgLTAsMCArMSBAQAo+ID4gPiA+ID4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAKPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vY2xpZW50L2Ry bV9jbGllbnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9jbGllbnQvZHJtX2NsaWVudC5jCj4gPiA+ID4g PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5hNjMz YmY3NDczMTYKPiA+ID4gPiA+IC0tLSAvZGV2L251bGwKPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9jbGllbnQvZHJtX2NsaWVudC5jCj4gPiA+ID4gPiBAQCAtMCwwICsxLDE2MTIgQEAK PiA+ID4gPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ID4gPiA+ID4g Ky8vIENvcHlyaWdodCAyMDE4IE5vcmFsZiBUcj8/bm5lcwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4g KyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+Cj4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2xp c3QuaD4KPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KPiA+ID4gPiA+ICsjaW5j bHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K PiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9jbGllbnQuaD4KPiA+ID4g PiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4KPiA+ID4gPiA+ICsjaW5jbHVkZSA8 ZHJtL2RybV9kcnYuaD4KPiA+ID4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9maWxlLmg+Cj4gPiA+ ID4gPiArI2luY2x1ZGUgPGRybS9kcm1faW9jdGwuaD4KPiA+ID4gPiA+ICsjaW5jbHVkZSA8ZHJt L2RybVAuaD4KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsjaW5jbHVkZSAiZHJtX2NydGNfaW50ZXJu YWwuaCIKPiA+ID4gPiA+ICsjaW5jbHVkZSAiZHJtX2ludGVybmFsLmgiCj4gPiA+ID4gPiArCj4g PiA+ID4gPiArc3RydWN0IGRybV9jbGllbnRfZnVuY3NfZW50cnkgewo+ID4gPiA+ID4gKwlzdHJ1 Y3QgbGlzdF9oZWFkIGxpc3Q7Cj4gPiA+ID4gPiArCWNvbnN0IHN0cnVjdCBkcm1fY2xpZW50X2Z1 bmNzICpmdW5jczsKPiA+ID4gPiA+ICt9Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyBM SVNUX0hFQUQoZHJtX2NsaWVudF9saXN0KTsKPiA+ID4gPiBJIHRoaW5rIHRoZSBjbGllbnQgbGlz dCBpdHNlbGYgc2hvdWxkIGJlIG9uIHRoZSBkcm1fZGV2aWNlLCBub3QgaW4gb25lCj4gPiA+ID4g Z2xvYmFsIGxpc3QgdGhhdCBtaXhlcyB1cCBhbGwgdGhlIGNsaWVudHMgb2YgYWxsIHRoZSBkcm1f ZGV2aWNlcy4KPiA+ID4gPiAKPiA+ID4gPiBJJ2xsIHNraXAgcmV2aWV3aW5nIGRldGFpbHMgc2lu Y2Ugd2UgaGF2ZSBhIGJ1bmNoIG9mIGhpZ2gtbGV2ZWwgcXVlc3Rpb25zCj4gPiA+ID4gdG8gZmln dXJlIG91dCBmaXJzdC4KPiA+ID4gPiAtRGFuaWVsCj4gPiA+ID4gCj4gPiA+ID4gPiArc3RhdGlj IExJU1RfSEVBRChkcm1fY2xpZW50X2Z1bmNzX2xpc3QpOwo+ID4gPiA+ID4gK3N0YXRpYyBERUZJ TkVfTVVURVgoZHJtX2NsaWVudF9saXN0X2xvY2spOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0 YXRpYyB2b2lkIGRybV9jbGllbnRfbmV3KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiA+ID4g PiArCQkJICAgY29uc3Qgc3RydWN0IGRybV9jbGllbnRfZnVuY3MgKmZ1bmNzKQo+ID4gPiA+ID4g K3sKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQ7Cj4gPiA+ID4gPiAr CWludCByZXQ7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRy bV9jbGllbnRfbGlzdF9sb2NrKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJY2xpZW50ID0ga3ph bGxvYyhzaXplb2YoKmNsaWVudCksIEdGUF9LRVJORUwpOwo+ID4gPiA+ID4gKwlpZiAoIWNsaWVu dCkKPiA+ID4gPiA+ICsJCXJldHVybjsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJbXV0ZXhfaW5p dCgmY2xpZW50LT5sb2NrKTsKPiA+ID4gPiA+ICsJY2xpZW50LT5kZXYgPSBkZXY7Cj4gPiA+ID4g PiArCWNsaWVudC0+ZnVuY3MgPSBmdW5jczsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0ID0g ZnVuY3MtPm5ldyhjbGllbnQpOwo+ID4gPiA+ID4gKwlEUk1fREVWX0RFQlVHX0tNUyhkZXYtPmRl diwgIiVzOiByZXQ9JWRcbiIsIGZ1bmNzLT5uYW1lLCByZXQpOwo+ID4gPiA+ID4gKwlpZiAocmV0 KSB7Cj4gPiA+ID4gPiArCQlkcm1fY2xpZW50X2ZyZWUoY2xpZW50KTsKPiA+ID4gPiA+ICsJCXJl dHVybjsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlsaXN0X2FkZCgmY2xp ZW50LT5saXN0LCAmZHJtX2NsaWVudF9saXN0KTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiArLyoqCj4gPiA+ID4gPiArICogZHJtX2NsaWVudF9mcmVlIC0gRnJlZSBEUk0gY2xp ZW50IHJlc291cmNlcwo+ID4gPiA+ID4gKyAqIEBjbGllbnQ6IERSTSBjbGllbnQKPiA+ID4gPiA+ ICsgKgo+ID4gPiA+ID4gKyAqIFRoaXMgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgb24gY2xpZW50 IHJlbW92YWwgdW5sZXNzIHRoZSBjbGllbnQgcmV0dXJucwo+ID4gPiA+ID4gKyAqIG5vbi16ZXJv IGluIHRoZSAmZHJtX2NsaWVudF9mdW5jcy0+cmVtb3ZlIGNhbGxiYWNrLiBUaGUgZmJkZXYgY2xp ZW50IGRvZXMKPiA+ID4gPiA+ICsgKiB0aGlzIHdoZW4gaXQgY2FuJ3QgY2xvc2UgJmRybV9maWxl IGJlY2F1c2UgdXNlcnNwYWNlIGhhcyBhbiBvcGVuIGZkLgo+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ ID4gK3ZvaWQgZHJtX2NsaWVudF9mcmVlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KQo+ ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsJRFJNX0RFVl9ERUJVR19LTVMoY2xpZW50LT5kZXYtPmRl diwgIiVzXG4iLCBjbGllbnQtPmZ1bmNzLT5uYW1lKTsKPiA+ID4gPiA+ICsJaWYgKFdBUk5fT04o Y2xpZW50LT5maWxlKSkgewo+ID4gPiA+ID4gKwkJY2xpZW50LT5maWxlX3JlZl9jb3VudCA9IDE7 Cj4gPiA+ID4gPiArCQlkcm1fY2xpZW50X3B1dF9maWxlKGNsaWVudCk7Cj4gPiA+ID4gPiArCX0K PiA+ID4gPiA+ICsJbXV0ZXhfZGVzdHJveSgmY2xpZW50LT5sb2NrKTsKPiA+ID4gPiA+ICsJa2Zy ZWUoY2xpZW50LT5jcnRjcyk7Cj4gPiA+ID4gPiArCWtmcmVlKGNsaWVudCk7Cj4gPiA+ID4gPiAr fQo+ID4gPiA+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2NsaWVudF9mcmVlKTsKPiA+ID4gPiA+ICsK PiA+ID4gPiA+ICtzdGF0aWMgdm9pZCBkcm1fY2xpZW50X3JlbW92ZShzdHJ1Y3QgZHJtX2NsaWVu dF9kZXYgKmNsaWVudCkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCWxvY2tkZXBfYXNzZXJ0X2hl bGQoJmRybV9jbGllbnRfbGlzdF9sb2NrKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJbGlzdF9k ZWwoJmNsaWVudC0+bGlzdCk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWlmICghY2xpZW50LT5m dW5jcy0+cmVtb3ZlIHx8ICFjbGllbnQtPmZ1bmNzLT5yZW1vdmUoY2xpZW50KSkKPiA+ID4gPiA+ ICsJCWRybV9jbGllbnRfZnJlZShjbGllbnQpOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ICsvKioKPiA+ID4gPiA+ICsgKiBkcm1fY2xpZW50X3JlZ2lzdGVyIC0gUmVnaXN0ZXIg YSBEUk0gY2xpZW50Cj4gPiA+ID4gPiArICogQGZ1bmNzOiBDbGllbnQgY2FsbGJhY2tzCj4gPiA+ ID4gPiArICoKPiA+ID4gPiA+ICsgKiBSZXR1cm5zOgo+ID4gPiA+ID4gKyAqIFplcm8gb24gc3Vj Y2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ID4gPiA+ID4gKyAqLwo+ID4g PiA+ID4gK2ludCBkcm1fY2xpZW50X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBkcm1fY2xpZW50X2Z1 bmNzICpmdW5jcykKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fY2xpZW50X2Z1 bmNzX2VudHJ5ICpmdW5jc19lbnRyeTsKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9kZXZpY2VfbGlz dF9pdGVyIGl0ZXI7Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiArCWZ1bmNzX2VudHJ5ID0ga3phbGxvYyhzaXplb2YoKmZ1bmNzX2VudHJ5 KSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ID4gPiArCWlmICghZnVuY3NfZW50cnkpCj4gPiA+ID4gPiAr CQlyZXR1cm4gLUVOT01FTTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJZnVuY3NfZW50cnktPmZ1 bmNzID0gZnVuY3M7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCW11dGV4X2xvY2soJmRybV9nbG9i YWxfbXV0ZXgpOwo+ID4gPiA+ID4gKwltdXRleF9sb2NrKCZkcm1fY2xpZW50X2xpc3RfbG9jayk7 Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWRybV9kZXZpY2VfbGlzdF9pdGVyX2JlZ2luKCZpdGVy KTsKPiA+ID4gPiA+ICsJZHJtX2Zvcl9lYWNoX2RldmljZV9pdGVyKGRldiwgJml0ZXIpCj4gPiA+ ID4gPiArCQlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkK PiA+ID4gPiA+ICsJCQlkcm1fY2xpZW50X25ldyhkZXYsIGZ1bmNzKTsKPiA+ID4gPiA+ICsJZHJt X2RldmljZV9saXN0X2l0ZXJfZW5kKCZpdGVyKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJbGlz dF9hZGQoJmZ1bmNzX2VudHJ5LT5saXN0LCAmZHJtX2NsaWVudF9mdW5jc19saXN0KTsKPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZkcm1fY2xpZW50X2xpc3RfbG9jayk7Cj4g PiA+ID4gPiArCW11dGV4X3VubG9jaygmZHJtX2dsb2JhbF9tdXRleCk7Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiArCURSTV9ERUJVR19LTVMoIiVzXG4iLCBmdW5jcy0+bmFtZSk7Cj4gPiA+ID4gPiAr Cj4gPiA+ID4gPiArCXJldHVybiAwOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICtFWFBPUlRfU1lN Qk9MKGRybV9jbGllbnRfcmVnaXN0ZXIpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKy8qKgo+ID4g PiA+ID4gKyAqIGRybV9jbGllbnRfdW5yZWdpc3RlciAtIFVucmVnaXN0ZXIgYSBEUk0gY2xpZW50 Cj4gPiA+ID4gPiArICogQGZ1bmNzOiBDbGllbnQgY2FsbGJhY2tzCj4gPiA+ID4gPiArICovCj4g PiA+ID4gPiArdm9pZCBkcm1fY2xpZW50X3VucmVnaXN0ZXIoY29uc3Qgc3RydWN0IGRybV9jbGll bnRfZnVuY3MgKmZ1bmNzKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9jbGll bnRfZnVuY3NfZW50cnkgKmZ1bmNzX2VudHJ5Owo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2NsaWVu dF9kZXYgKmNsaWVudCwgKnRtcDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJbXV0ZXhfbG9jaygm ZHJtX2NsaWVudF9saXN0X2xvY2spOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlsaXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmUoY2xpZW50LCB0bXAsICZkcm1fY2xpZW50X2xpc3QsIGxpc3QpIHsKPiA+ ID4gPiA+ICsJCWlmIChjbGllbnQtPmZ1bmNzID09IGZ1bmNzKQo+ID4gPiA+ID4gKwkJCWRybV9j bGllbnRfcmVtb3ZlKGNsaWVudCk7Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShmdW5jc19lbnRyeSwgJmRybV9jbGllbnRfZnVuY3NfbGlz dCwgbGlzdCkgewo+ID4gPiA+ID4gKwkJaWYgKGZ1bmNzX2VudHJ5LT5mdW5jcyA9PSBmdW5jcykg ewo+ID4gPiA+ID4gKwkJCWxpc3RfZGVsKCZmdW5jc19lbnRyeS0+bGlzdCk7Cj4gPiA+ID4gPiAr CQkJa2ZyZWUoZnVuY3NfZW50cnkpOwo+ID4gPiA+ID4gKwkJCWJyZWFrOwo+ID4gPiA+ID4gKwkJ fQo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCW11dGV4X3VubG9jaygmZHJt X2NsaWVudF9saXN0X2xvY2spOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlEUk1fREVCVUdfS01T KCIlc1xuIiwgZnVuY3MtPm5hbWUpOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICtFWFBPUlRfU1lN Qk9MKGRybV9jbGllbnRfdW5yZWdpc3Rlcik7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArdm9pZCBk cm1fY2xpZW50X2Rldl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4gPiA+ID4g K3sKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9jbGllbnRfZnVuY3NfZW50cnkgKmZ1bmNzX2VudHJ5 Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkvKgo+ID4gPiA+ID4gKwkgKiBNaW5vcnMgYXJlIGNy ZWF0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBkcm1fZGV2X3JlZ2lzdGVyKCksIGJ1dCBjYW4KPiA+ ID4gPiA+ICsJICogYmUgcmVtb3ZlZCBhZ2FpbiBpZiB0aGUgZnVuY3Rpb24gZmFpbHMuIFNpbmNl IHdlIGl0ZXJhdGUgRFJNIGRldmljZXMKPiA+ID4gPiA+ICsJICogYnkgd2Fsa2luZyBEUk0gbWlu b3JzLCB3ZSBuZWVkIHRvIHN0YXkgdW5kZXIgdGhpcyBsb2NrLgo+ID4gPiA+ID4gKwkgKi8KPiA+ ID4gPiA+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZHJtX2dsb2JhbF9tdXRleCk7Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiArCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9N T0RFU0VUKSkKPiA+ID4gPiA+ICsJCXJldHVybjsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJbXV0 ZXhfbG9jaygmZHJtX2NsaWVudF9saXN0X2xvY2spOwo+ID4gPiA+ID4gKwlsaXN0X2Zvcl9lYWNo X2VudHJ5KGZ1bmNzX2VudHJ5LCAmZHJtX2NsaWVudF9mdW5jc19saXN0LCBsaXN0KQo+ID4gPiA+ ID4gKwkJZHJtX2NsaWVudF9uZXcoZGV2LCBmdW5jc19lbnRyeS0+ZnVuY3MpOwo+ID4gPiA+ID4g KwltdXRleF91bmxvY2soJmRybV9jbGllbnRfbGlzdF9sb2NrKTsKPiA+ID4gPiA+ICt9Cj4gPiA+ ID4gPiArCj4gPiA+ID4gPiArdm9pZCBkcm1fY2xpZW50X2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2NsaWVu dF9kZXYgKmNsaWVudCwgKnRtcDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJaWYgKCFkcm1fY29y ZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQo+ID4gPiA+ID4gKwkJcmV0dXJu Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwltdXRleF9sb2NrKCZkcm1fY2xpZW50X2xpc3RfbG9j ayk7Cj4gPiA+ID4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbGllbnQsIHRtcCwgJmRy bV9jbGllbnRfbGlzdCwgbGlzdCkKPiA+ID4gPiA+ICsJCWlmIChjbGllbnQtPmRldiA9PSBkZXYp Cj4gPiA+ID4gPiArCQkJZHJtX2NsaWVudF9yZW1vdmUoY2xpZW50KTsKPiA+ID4gPiA+ICsJbXV0 ZXhfdW5sb2NrKCZkcm1fY2xpZW50X2xpc3RfbG9jayk7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gK3ZvaWQgZHJtX2NsaWVudF9kZXZfaG90cGx1ZyhzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9jbGllbnRfZGV2ICpj bGllbnQ7Cj4gPiA+ID4gPiArCWludCByZXQ7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWlmICgh ZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKPiA+ID4gPiA+ICsJ CXJldHVybjsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJbXV0ZXhfbG9jaygmZHJtX2NsaWVudF9s aXN0X2xvY2spOwo+ID4gPiA+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwgJmRybV9j bGllbnRfbGlzdCwgbGlzdCkKPiA+ID4gPiA+ICsJCWlmIChjbGllbnQtPmRldiA9PSBkZXYgJiYg Y2xpZW50LT5mdW5jcy0+aG90cGx1Zykgewo+ID4gPiA+ID4gKwkJCXJldCA9IGNsaWVudC0+ZnVu Y3MtPmhvdHBsdWcoY2xpZW50KTsKPiA+ID4gPiA+ICsJCQlEUk1fREVWX0RFQlVHX0tNUyhkZXYt PmRldiwgIiVzOiByZXQ9JWRcbiIsCj4gPiA+ID4gPiArCQkJCQkgIGNsaWVudC0+ZnVuY3MtPm5h bWUsIHJldCk7Cj4gPiA+ID4gPiArCQl9Cj4gPiA+ID4gPiArCW11dGV4X3VubG9jaygmZHJtX2Ns aWVudF9saXN0X2xvY2spOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICt2b2lk IGRybV9jbGllbnRfZGV2X2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4gPiA+ ID4gK3sKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQ7Cj4gPiA+ID4g PiArCWludCByZXQ7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWlmICghZHJtX2NvcmVfY2hlY2tf ZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKPiA+ID4gPiA+ICsJCXJldHVybjsKPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICsJbXV0ZXhfbG9jaygmZHJtX2NsaWVudF9saXN0X2xvY2spOwo+ID4g PiA+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwgJmRybV9jbGllbnRfbGlzdCwgbGlz dCkKPiA+ID4gPiA+ICsJCWlmIChjbGllbnQtPmRldiA9PSBkZXYgJiYgY2xpZW50LT5mdW5jcy0+ bGFzdGNsb3NlKSB7Cj4gPiA+ID4gPiArCQkJcmV0ID0gY2xpZW50LT5mdW5jcy0+bGFzdGNsb3Nl KGNsaWVudCk7Cj4gPiA+ID4gPiArCQkJRFJNX0RFVl9ERUJVR19LTVMoZGV2LT5kZXYsICIlczog cmV0PSVkXG4iLAo+ID4gPiA+ID4gKwkJCQkJICBjbGllbnQtPmZ1bmNzLT5uYW1lLCByZXQpOwo+ ID4gPiA+ID4gKwkJfQo+ID4gPiA+ID4gKwltdXRleF91bmxvY2soJmRybV9jbGllbnRfbGlzdF9s b2NrKTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyogR2V0IHN0YXRpYyBp bmZvICovCj4gPiA+ID4gPiArc3RhdGljIGludCBkcm1fY2xpZW50X2luaXQoc3RydWN0IGRybV9j bGllbnRfZGV2ICpjbGllbnQsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiA+ID4gPiA+ICt7Cj4g PiA+ID4gPiArCXN0cnVjdCBkcm1fbW9kZV9jYXJkX3JlcyBjYXJkX3JlcyA9IHt9Owo+ID4gPiA+ ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2xpZW50LT5kZXY7Cj4gPiA+ID4gPiArCXUz MiAqY3J0Y3M7Cj4gPiA+ID4gPiArCWludCByZXQ7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXJl dCA9IGRybV9tb2RlX2dldHJlc291cmNlcyhkZXYsICZjYXJkX3JlcywgZmlsZSwgZmFsc2UpOwo+ ID4gPiA+ID4gKwlpZiAocmV0KQo+ID4gPiA+ID4gKwkJcmV0dXJuIHJldDsKPiA+ID4gPiA+ICsJ aWYgKCFjYXJkX3Jlcy5jb3VudF9jcnRjcykKPiA+ID4gPiA+ICsJCXJldHVybiAtRU5PRU5UOwo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwljcnRjcyA9IGttYWxsb2NfYXJyYXkoY2FyZF9yZXMuY291 bnRfY3J0Y3MsIHNpemVvZigqY3J0Y3MpLCBHRlBfS0VSTkVMKTsKPiA+ID4gPiA+ICsJaWYgKCFj cnRjcykKPiA+ID4gPiA+ICsJCXJldHVybiAtRU5PTUVNOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4g KwljYXJkX3Jlcy5jb3VudF9mYnMgPSAwOwo+ID4gPiA+ID4gKwljYXJkX3Jlcy5jb3VudF9jb25u ZWN0b3JzID0gMDsKPiA+ID4gPiA+ICsJY2FyZF9yZXMuY291bnRfZW5jb2RlcnMgPSAwOwo+ID4g PiA+ID4gKwljYXJkX3Jlcy5jcnRjX2lkX3B0ciA9ICh1bnNpZ25lZCBsb25nKWNydGNzOwo+ID4g PiA+ID4gKwo+ID4gPiA+ID4gKwlyZXQgPSBkcm1fbW9kZV9nZXRyZXNvdXJjZXMoZGV2LCAmY2Fy ZF9yZXMsIGZpbGUsIGZhbHNlKTsKPiA+ID4gPiA+ICsJaWYgKHJldCkgewo+ID4gPiA+ID4gKwkJ a2ZyZWUoY3J0Y3MpOwo+ID4gPiA+ID4gKwkJcmV0dXJuIHJldDsKPiA+ID4gPiA+ICsJfQo+ID4g PiA+ID4gKwo+ID4gPiA+ID4gKwljbGllbnQtPmNydGNzID0gY3J0Y3M7Cj4gPiA+ID4gPiArCWNs aWVudC0+bnVtX2NydGNzID0gY2FyZF9yZXMuY291bnRfY3J0Y3M7Cj4gPiA+ID4gPiArCWNsaWVu dC0+bWluX3dpZHRoID0gY2FyZF9yZXMubWluX3dpZHRoOwo+ID4gPiA+ID4gKwljbGllbnQtPm1h eF93aWR0aCA9IGNhcmRfcmVzLm1heF93aWR0aDsKPiA+ID4gPiA+ICsJY2xpZW50LT5taW5faGVp Z2h0ID0gY2FyZF9yZXMubWluX2hlaWdodDsKPiA+ID4gPiA+ICsJY2xpZW50LT5tYXhfaGVpZ2h0 ID0gY2FyZF9yZXMubWF4X2hlaWdodDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0dXJuIDA7 Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAqIGRy bV9jbGllbnRfZ2V0X2ZpbGUgLSBHZXQgYSBEUk0gZmlsZQo+ID4gPiA+ID4gKyAqIEBjbGllbnQ6 IERSTSBjbGllbnQKPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAqIFRoaXMgZnVuY3Rpb24gbWFr ZXMgc3VyZSB0aGUgY2xpZW50IGhhcyBhICZkcm1fZmlsZSBhdmFpbGFibGUuIFRoZSBjbGllbnQK PiA+ID4gPiA+ICsgKiBkb2Vzbid0IG5vcm1hbGx5IG5lZWQgdG8gY2FsbCB0aGlzLCBzaW5jZSBh bGwgY2xpZW50IGZ1bmN0aW9ucyB0aGF0IGRlcGVuZHMKPiA+ID4gPiA+ICsgKiBvbiBhIERSTSBm aWxlIHdpbGwgY2FsbCBpdC4gQSBtYXRjaGluZyBjYWxsIHRvIGRybV9jbGllbnRfcHV0X2ZpbGUo KSBpcwo+ID4gPiA+ID4gKyAqIG5lY2Vzc2FyeS4KPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAq IFRoZSByZWFzb24gZm9yIG5vdCBvcGVuaW5nIGEgRFJNIGZpbGUgd2hlbiBhIEBjbGllbnQgaXMg Y3JlYXRlZCBpcyBiZWNhdXNlCj4gPiA+ID4gPiArICogd2UgaGF2ZSB0byB0YWtlIGEgcmVmIG9u IHRoZSBkcml2ZXIgbW9kdWxlIGR1ZSB0byAmZHJtX2RyaXZlci0+cG9zdGNsb3NlCj4gPiA+ID4g PiArICogYmVpbmcgY2FsbGVkIGluIGRybV9maWxlX2ZyZWUoKS4gSGF2aW5nIGEgRFJNIGZpbGUg b3BlbiBmb3IgdGhlIGxpZmV0aW1lIG9mCj4gPiA+ID4gPiArICogdGhlIGNsaWVudCBpbnN0YW5j ZSB3b3VsZCBibG9jayBkcml2ZXIgbW9kdWxlIHVubG9hZC4KPiA+ID4gPiA+ICsgKgo+ID4gPiA+ ID4gKyAqIFJldHVybnM6Cj4gPiA+ID4gPiArICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBl cnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gPiA+ID4gPiArICovCj4gPiA+ID4gPiAraW50IGRybV9j bGllbnRfZ2V0X2ZpbGUoc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQpCj4gPiA+ID4gPiAr ewo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2xpZW50LT5kZXY7Cj4gPiA+ ID4gPiArCXN0cnVjdCBkcm1fZmlsZSAqZmlsZTsKPiA+ID4gPiA+ICsJaW50IHJldCA9IDA7Cj4g PiA+ID4gPiArCj4gPiA+ID4gPiArCW11dGV4X2xvY2soJmNsaWVudC0+bG9jayk7Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiArCWlmIChjbGllbnQtPmZpbGVfcmVmX2NvdW50KyspIHsKPiA+ID4gPiA+ ICsJCW11dGV4X3VubG9jaygmY2xpZW50LT5sb2NrKTsKPiA+ID4gPiA+ICsJCXJldHVybiAwOwo+ ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWlmICghdHJ5X21vZHVsZV9nZXQo ZGV2LT5kcml2ZXItPmZvcHMtPm93bmVyKSkgewo+ID4gPiA+ID4gKwkJcmV0ID0gLUVOT0RFVjsK PiA+ID4gPiA+ICsJCWdvdG8gZXJyX3VubG9jazsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gKwlkcm1fZGV2X2dldChkZXYpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlmaWxl ID0gZHJtX2ZpbGVfYWxsb2MoZGV2LT5wcmltYXJ5KTsKPiA+ID4gPiA+ICsJaWYgKElTX0VSUihm aWxlKSkgewo+ID4gPiA+ID4gKwkJcmV0ID0gUFRSX0VSUihmaWxlKTsKPiA+ID4gPiA+ICsJCWdv dG8gZXJyX3B1dDsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlpZiAoIWNs aWVudC0+Y3J0Y3MpIHsKPiA+ID4gPiA+ICsJCXJldCA9IGRybV9jbGllbnRfaW5pdChjbGllbnQs IGZpbGUpOwo+ID4gPiA+ID4gKwkJaWYgKHJldCkKPiA+ID4gPiA+ICsJCQlnb3RvIGVycl9mcmVl Owo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCW11dGV4X2xvY2soJmRldi0+ ZmlsZWxpc3RfbXV0ZXgpOwo+ID4gPiA+ID4gKwlsaXN0X2FkZCgmZmlsZS0+bGhlYWQsICZkZXYt PmZpbGVsaXN0X2ludGVybmFsKTsKPiA+ID4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZkZXYtPmZpbGVs aXN0X211dGV4KTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJY2xpZW50LT5maWxlID0gZmlsZTsK PiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZjbGllbnQtPmxvY2spOwo+ID4g PiA+ID4gKwo+ID4gPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtlcnJf ZnJlZToKPiA+ID4gPiA+ICsJZHJtX2ZpbGVfZnJlZShmaWxlKTsKPiA+ID4gPiA+ICtlcnJfcHV0 Ogo+ID4gPiA+ID4gKwlkcm1fZGV2X3B1dChkZXYpOwo+ID4gPiA+ID4gKwltb2R1bGVfcHV0KGRl di0+ZHJpdmVyLT5mb3BzLT5vd25lcik7Cj4gPiA+ID4gPiArZXJyX3VubG9jazoKPiA+ID4gPiA+ ICsJY2xpZW50LT5maWxlX3JlZl9jb3VudCA9IDA7Cj4gPiA+ID4gPiArCW11dGV4X3VubG9jaygm Y2xpZW50LT5sb2NrKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0dXJuIHJldDsKPiA+ID4g PiA+ICt9Cj4gPiA+ID4gPiArRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X2dldF9maWxlKTsKPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICt2b2lkIGRybV9jbGllbnRfcHV0X2ZpbGUoc3RydWN0IGRybV9j bGllbnRfZGV2ICpjbGllbnQpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gY2xpZW50LT5kZXY7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWlmICghY2xp ZW50KQo+ID4gPiA+ID4gKwkJcmV0dXJuOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwltdXRleF9s b2NrKCZjbGllbnQtPmxvY2spOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlpZiAoV0FSTl9PTigh Y2xpZW50LT5maWxlX3JlZl9jb3VudCkpCj4gPiA+ID4gPiArCQlnb3RvIG91dF91bmxvY2s7Cj4g PiA+ID4gPiArCj4gPiA+ID4gPiArCWlmICgtLWNsaWVudC0+ZmlsZV9yZWZfY291bnQpCj4gPiA+ ID4gPiArCQlnb3RvIG91dF91bmxvY2s7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCW11dGV4X2xv Y2soJmRldi0+ZmlsZWxpc3RfbXV0ZXgpOwo+ID4gPiA+ID4gKwlsaXN0X2RlbCgmY2xpZW50LT5m aWxlLT5saGVhZCk7Cj4gPiA+ID4gPiArCW11dGV4X3VubG9jaygmZGV2LT5maWxlbGlzdF9tdXRl eCk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWRybV9maWxlX2ZyZWUoY2xpZW50LT5maWxlKTsK PiA+ID4gPiA+ICsJY2xpZW50LT5maWxlID0gTlVMTDsKPiA+ID4gPiA+ICsJZHJtX2Rldl9wdXQo ZGV2KTsKPiA+ID4gPiA+ICsJbW9kdWxlX3B1dChkZXYtPmRyaXZlci0+Zm9wcy0+b3duZXIpOwo+ ID4gPiA+ID4gK291dF91bmxvY2s6Cj4gPiA+ID4gPiArCW11dGV4X3VubG9jaygmY2xpZW50LT5s b2NrKTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X3B1 dF9maWxlKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdGF0aWMgc3RydWN0IGRybV9wZW5kaW5n X2V2ZW50ICoKPiA+ID4gPiA+ICtkcm1fY2xpZW50X3JlYWRfZ2V0X3BlbmRpbmdfZXZlbnQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlKQo+ID4gPiA+ID4gK3sK PiA+ID4gPiA+ICsJc3RydWN0IGRybV9wZW5kaW5nX2V2ZW50ICplID0gTlVMTDsKPiA+ID4gPiA+ ICsJaW50IHJldDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0ID0gbXV0ZXhfbG9ja19pbnRl cnJ1cHRpYmxlKCZmaWxlLT5ldmVudF9yZWFkX2xvY2spOwo+ID4gPiA+ID4gKwlpZiAocmV0KQo+ ID4gPiA+ID4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJ c3Bpbl9sb2NrX2lycSgmZGV2LT5ldmVudF9sb2NrKTsKPiA+ID4gPiA+ICsJaWYgKCFsaXN0X2Vt cHR5KCZmaWxlLT5ldmVudF9saXN0KSkgewo+ID4gPiA+ID4gKwkJZSA9IGxpc3RfZmlyc3RfZW50 cnkoJmZpbGUtPmV2ZW50X2xpc3QsCj4gPiA+ID4gPiArCQkJCSAgICAgc3RydWN0IGRybV9wZW5k aW5nX2V2ZW50LCBsaW5rKTsKPiA+ID4gPiA+ICsJCWZpbGUtPmV2ZW50X3NwYWNlICs9IGUtPmV2 ZW50LT5sZW5ndGg7Cj4gPiA+ID4gPiArCQlsaXN0X2RlbCgmZS0+bGluayk7Cj4gPiA+ID4gPiAr CX0KPiA+ID4gPiA+ICsJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPmV2ZW50X2xvY2spOwo+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gKwltdXRleF91bmxvY2soJmZpbGUtPmV2ZW50X3JlYWRfbG9jayk7Cj4g PiA+ID4gPiArCj4gPiA+ID4gPiArCXJldHVybiBlOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsK PiA+ID4gPiA+ICtzdHJ1Y3QgZHJtX2V2ZW50ICoKPiA+ID4gPiA+ICtkcm1fY2xpZW50X3JlYWRf ZXZlbnQoc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQsIGJvb2wgYmxvY2spCj4gPiA+ID4g PiArewo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUgPSBjbGllbnQtPmZpbGU7Cj4g PiA+ID4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjbGllbnQtPmRldjsKPiA+ID4gPiA+ ICsJc3RydWN0IGRybV9wZW5kaW5nX2V2ZW50ICplOwo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2V2 ZW50ICpldmVudDsKPiA+ID4gPiA+ICsJaW50IHJldDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJ LyogQWxsb2NhdGUgc28gaXQgZml0cyBhbGwgZXZlbnRzLCB0aGVyZSdzIGEgc2FuaXR5IGNoZWNr IGxhdGVyICovCj4gPiA+ID4gPiArCWV2ZW50ID0ga3phbGxvYygxMjgsIEdGUF9LRVJORUwpOwo+ ID4gPiA+ID4gKwlpZiAoIWV2ZW50KQo+ID4gPiA+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWUgPSBkcm1fY2xpZW50X3JlYWRfZ2V0X3BlbmRp bmdfZXZlbnQoZGV2LCBmaWxlKTsKPiA+ID4gPiA+ICsJaWYgKElTX0VSUihlKSkgewo+ID4gPiA+ ID4gKwkJcmV0ID0gUFRSX0VSUihlKTsKPiA+ID4gPiA+ICsJCWdvdG8gZXJyX2ZyZWU7Cj4gPiA+ ID4gPiArCX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJaWYgKCFlICYmICFibG9jaykgewo+ID4g PiA+ID4gKwkJcmV0ID0gMDsKPiA+ID4gPiA+ICsJCWdvdG8gZXJyX2ZyZWU7Cj4gPiA+ID4gPiAr CX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxl X3RpbWVvdXQoZmlsZS0+ZXZlbnRfd2FpdCwKPiA+ID4gPiA+ICsJCQkJCSAgICAgICAhbGlzdF9l bXB0eSgmZmlsZS0+ZXZlbnRfbGlzdCksCj4gPiA+ID4gPiArCQkJCQkgICAgICAgNSAqIEhaKTsK PiA+ID4gPiA+ICsJaWYgKCFyZXQpCj4gPiA+ID4gPiArCQlyZXQgPSAtRVRJTUVET1VUOwo+ID4g PiA+ID4gKwlpZiAocmV0IDwgMCkKPiA+ID4gPiA+ICsJCWdvdG8gZXJyX2ZyZWU7Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiArCWUgPSBkcm1fY2xpZW50X3JlYWRfZ2V0X3BlbmRpbmdfZXZlbnQoZGV2 LCBmaWxlKTsKPiA+ID4gPiA+ICsJaWYgKElTX0VSUl9PUl9OVUxMKGUpKSB7Cj4gPiA+ID4gPiAr CQlyZXQgPSBQVFJfRVJSX09SX1pFUk8oZSk7Cj4gPiA+ID4gPiArCQlnb3RvIGVycl9mcmVlOwo+ ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWlmIChXQVJOX09OKGUtPmV2ZW50 LT5sZW5ndGggPiAxMjgpKSB7Cj4gPiA+ID4gPiArCQkvKiBJbmNyZWFzZSBidWZmZXIgaWYgdGhp cyBoYXBwZW5zICovCj4gPiA+ID4gPiArCQlyZXQgPSAtRU5PTUVNOwo+ID4gPiA+ID4gKwkJZ290 byBlcnJfZnJlZTsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwltZW1jcHko ZXZlbnQsIGUtPmV2ZW50LCBlLT5ldmVudC0+bGVuZ3RoKTsKPiA+ID4gPiA+ICsJa2ZyZWUoZSk7 Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXJldHVybiBldmVudDsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICtlcnJfZnJlZToKPiA+ID4gPiA+ICsJa2ZyZWUoZXZlbnQpOwo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gKwlyZXR1cm4gcmV0ID8gRVJSX1BUUihyZXQpIDogTlVMTDsKPiA+ID4gPiA+ICt9Cj4g PiA+ID4gPiArRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X3JlYWRfZXZlbnQpOwo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gK3N0YXRpYyB2b2lkIGRybV9jbGllbnRfY29ubmVjdG9yX2ZyZWUoc3RydWN0 IGRybV9jbGllbnRfY29ubmVjdG9yICpjb25uZWN0b3IpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4g KwlpZiAoIWNvbm5lY3RvcikKPiA+ID4gPiA+ICsJCXJldHVybjsKPiA+ID4gPiA+ICsJa2ZyZWUo Y29ubmVjdG9yLT5tb2Rlcyk7Cj4gPiA+ID4gPiArCWtmcmVlKGNvbm5lY3Rvcik7Cj4gPiA+ID4g PiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2NsaWVudF9jb25u ZWN0b3IgKgo+ID4gPiA+ID4gK2RybV9jbGllbnRfZ2V0X2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2Ns aWVudF9kZXYgKmNsaWVudCwgdW5zaWduZWQgaW50IGlkKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ ICsJc3RydWN0IGRybV9tb2RlX2dldF9jb25uZWN0b3IgcmVxID0gewo+ID4gPiA+ID4gKwkJLmNv bm5lY3Rvcl9pZCA9IGlkLAo+ID4gPiA+ID4gKwl9Owo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2Ns aWVudF9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9tb2RlX21v ZGVpbmZvICptb2RlcyA9IE5VTEw7Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBjbGllbnQtPmRldjsKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm47Cj4g PiA+ID4gPiArCWJvb2wgbm9uX2Rlc2t0b3A7Cj4gPiA+ID4gPiArCWludCByZXQ7Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiArCWNvbm5lY3RvciA9IGt6YWxsb2Moc2l6ZW9mKCpjb25uZWN0b3IpLCBH RlBfS0VSTkVMKTsKPiA+ID4gPiA+ICsJaWYgKCFjb25uZWN0b3IpCj4gPiA+ID4gPiArCQlyZXR1 cm4gRVJSX1BUUigtRU5PTUVNKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0ID0gZHJtX21v ZGVfZ2V0Y29ubmVjdG9yKGRldiwgJnJlcSwgY2xpZW50LT5maWxlLCBmYWxzZSk7Cj4gPiA+ID4g PiArCWlmIChyZXQpCj4gPiA+ID4gPiArCQlnb3RvIGVycl9mcmVlOwo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gKwljb25uZWN0b3ItPmNvbm5faWQgPSBpZDsKPiA+ID4gPiA+ICsJY29ubmVjdG9yLT5z dGF0dXMgPSByZXEuY29ubmVjdGlvbjsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJY29ubiA9IGRy bV9jb25uZWN0b3JfbG9va3VwKGRldiwgY2xpZW50LT5maWxlLCBpZCk7Cj4gPiA+ID4gPiArCWlm ICghY29ubikgewo+ID4gPiA+ID4gKwkJcmV0ID0gLUVOT0VOVDsKPiA+ID4gPiA+ICsJCWdvdG8g ZXJyX2ZyZWU7Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJbm9uX2Rlc2t0 b3AgPSBjb25uLT5kaXNwbGF5X2luZm8ubm9uX2Rlc2t0b3A7Cj4gPiA+ID4gPiArCj4gPiA+ID4g PiArCWNvbm5lY3Rvci0+aGFzX3RpbGUgPSBjb25uLT5oYXNfdGlsZTsKPiA+ID4gPiA+ICsJY29u bmVjdG9yLT50aWxlX2hfbG9jID0gY29ubi0+dGlsZV9oX2xvYzsKPiA+ID4gPiA+ICsJY29ubmVj dG9yLT50aWxlX3ZfbG9jID0gY29ubi0+dGlsZV92X2xvYzsKPiA+ID4gPiA+ICsJaWYgKGNvbm4t PnRpbGVfZ3JvdXApCj4gPiA+ID4gPiArCQljb25uZWN0b3ItPnRpbGVfZ3JvdXAgPSBjb25uLT50 aWxlX2dyb3VwLT5pZDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJZHJtX2Nvbm5lY3Rvcl9wdXQo Y29ubik7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWlmIChub25fZGVza3RvcCkgewo+ID4gPiA+ ID4gKwkJa2ZyZWUoY29ubmVjdG9yKTsKPiA+ID4gPiA+ICsJCXJldHVybiBOVUxMOwo+ID4gPiA+ ID4gKwl9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWlmICghcmVxLmNvdW50X21vZGVzKQo+ID4g PiA+ID4gKwkJcmV0dXJuIGNvbm5lY3RvcjsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJbW9kZXMg PSBrY2FsbG9jKHJlcS5jb3VudF9tb2Rlcywgc2l6ZW9mKCptb2RlcyksIEdGUF9LRVJORUwpOwo+ ID4gPiA+ID4gKwlpZiAoIW1vZGVzKSB7Cj4gPiA+ID4gPiArCQlyZXQgPSAtRU5PTUVNOwo+ID4g PiA+ID4gKwkJZ290byBlcnJfZnJlZTsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ ID4gKwljb25uZWN0b3ItPm1vZGVzID0gbW9kZXM7Cj4gPiA+ID4gPiArCWNvbm5lY3Rvci0+bnVt X21vZGVzID0gcmVxLmNvdW50X21vZGVzOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXEuY291 bnRfcHJvcHMgPSAwOwo+ID4gPiA+ID4gKwlyZXEuY291bnRfZW5jb2RlcnMgPSAwOwo+ID4gPiA+ ID4gKwlyZXEubW9kZXNfcHRyID0gKHVuc2lnbmVkIGxvbmcpbW9kZXM7Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiArCXJldCA9IGRybV9tb2RlX2dldGNvbm5lY3RvcihkZXYsICZyZXEsIGNsaWVudC0+ ZmlsZSwgZmFsc2UpOwo+ID4gPiA+ID4gKwlpZiAocmV0KQo+ID4gPiA+ID4gKwkJZ290byBlcnJf ZnJlZTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0dXJuIGNvbm5lY3RvcjsKPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ICtlcnJfZnJlZToKPiA+ID4gPiA+ICsJa2ZyZWUobW9kZXMpOwo+ID4gPiA+ ID4gKwlrZnJlZShjb25uZWN0b3IpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXR1cm4gRVJS X1BUUihyZXQpOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdGF0aWMgaW50 IGRybV9jbGllbnRfZ2V0X2Nvbm5lY3RvcnMoc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQs Cj4gPiA+ID4gPiArCQkJCSAgICAgc3RydWN0IGRybV9jbGllbnRfY29ubmVjdG9yICoqKmNvbm5l Y3RvcnMpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX21vZGVfY2FyZF9yZXMg Y2FyZF9yZXMgPSB7fTsKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNsaWVu dC0+ZGV2Owo+ID4gPiA+ID4gKwlpbnQgcmV0LCBudW1fY29ubmVjdG9yczsKPiA+ID4gPiA+ICsJ dTMyICpjb25uZWN0b3JfaWRzOwo+ID4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgaTsKPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ICsJcmV0ID0gZHJtX21vZGVfZ2V0cmVzb3VyY2VzKGRldiwgJmNhcmRfcmVz LCBjbGllbnQtPmZpbGUsIGZhbHNlKTsKPiA+ID4gPiA+ICsJaWYgKHJldCkKPiA+ID4gPiA+ICsJ CXJldHVybiByZXQ7Cj4gPiA+ID4gPiArCWlmICghY2FyZF9yZXMuY291bnRfY29ubmVjdG9ycykK PiA+ID4gPiA+ICsJCXJldHVybiAwOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwludW1fY29ubmVj dG9ycyA9IGNhcmRfcmVzLmNvdW50X2Nvbm5lY3RvcnM7Cj4gPiA+ID4gPiArCWNvbm5lY3Rvcl9p ZHMgPSBrY2FsbG9jKG51bV9jb25uZWN0b3JzLAo+ID4gPiA+ID4gKwkJCQlzaXplb2YoKmNvbm5l Y3Rvcl9pZHMpLCBHRlBfS0VSTkVMKTsKPiA+ID4gPiA+ICsJaWYgKCFjb25uZWN0b3JfaWRzKQo+ ID4gPiA+ID4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWNhcmRf cmVzLmNvdW50X2ZicyA9IDA7Cj4gPiA+ID4gPiArCWNhcmRfcmVzLmNvdW50X2NydGNzID0gMDsK PiA+ID4gPiA+ICsJY2FyZF9yZXMuY291bnRfZW5jb2RlcnMgPSAwOwo+ID4gPiA+ID4gKwljYXJk X3Jlcy5jb25uZWN0b3JfaWRfcHRyID0gKHVuc2lnbmVkIGxvbmcpY29ubmVjdG9yX2lkczsKPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0ID0gZHJtX21vZGVfZ2V0cmVzb3VyY2VzKGRldiwgJmNh cmRfcmVzLCBjbGllbnQtPmZpbGUsIGZhbHNlKTsKPiA+ID4gPiA+ICsJaWYgKHJldCkKPiA+ID4g PiA+ICsJCWdvdG8gZXJyX2ZyZWU7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCSpjb25uZWN0b3Jz ID0ga2NhbGxvYyhudW1fY29ubmVjdG9ycywgc2l6ZW9mKCoqY29ubmVjdG9ycyksIEdGUF9LRVJO RUwpOwo+ID4gPiA+ID4gKwlpZiAoISgqY29ubmVjdG9ycykpIHsKPiA+ID4gPiA+ICsJCXJldCA9 IC1FTk9NRU07Cj4gPiA+ID4gPiArCQlnb3RvIGVycl9mcmVlOwo+ID4gPiA+ID4gKwl9Cj4gPiA+ ID4gPiArCj4gPiA+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBudW1fY29ubmVjdG9yczsgaSsrKSB7 Cj4gPiA+ID4gPiArCQlzdHJ1Y3QgZHJtX2NsaWVudF9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICsJCWNvbm5lY3RvciA9IGRybV9jbGllbnRfZ2V0X2Nvbm5lY3Rv cihjbGllbnQsIGNvbm5lY3Rvcl9pZHNbaV0pOwo+ID4gPiA+ID4gKwkJaWYgKElTX0VSUihjb25u ZWN0b3IpKSB7Cj4gPiA+ID4gPiArCQkJcmV0ID0gUFRSX0VSUihjb25uZWN0b3IpOwo+ID4gPiA+ ID4gKwkJCWdvdG8gZXJyX2ZyZWU7Cj4gPiA+ID4gPiArCQl9Cj4gPiA+ID4gPiArCQlpZiAoY29u bmVjdG9yKQo+ID4gPiA+ID4gKwkJCSgqY29ubmVjdG9ycylbaV0gPSBjb25uZWN0b3I7Cj4gPiA+ ID4gPiArCQllbHNlCj4gPiA+ID4gPiArCQkJbnVtX2Nvbm5lY3RvcnMtLTsKPiA+ID4gPiA+ICsJ fQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlpZiAoIW51bV9jb25uZWN0b3JzKSB7Cj4gPiA+ID4g PiArCQlyZXQgPSAwOwo+ID4gPiA+ID4gKwkJZ290byBlcnJfZnJlZTsKPiA+ID4gPiA+ICsJfQo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXR1cm4gbnVtX2Nvbm5lY3RvcnM7Cj4gPiA+ID4gPiAr Cj4gPiA+ID4gPiArZXJyX2ZyZWU6Cj4gPiA+ID4gPiArCWlmIChjb25uZWN0b3JzKQo+ID4gPiA+ ID4gKwkJZm9yIChpID0gMDsgaSA8IG51bV9jb25uZWN0b3JzOyBpKyspCj4gPiA+ID4gPiArCQkJ ZHJtX2NsaWVudF9jb25uZWN0b3JfZnJlZSgoKmNvbm5lY3RvcnMpW2ldKTsKPiA+ID4gPiA+ICsK PiA+ID4gPiA+ICsJa2ZyZWUoY29ubmVjdG9ycyk7Cj4gPiA+ID4gPiArCWtmcmVlKGNvbm5lY3Rv cl9pZHMpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXR1cm4gcmV0Owo+ID4gPiA+ID4gK30K PiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdGF0aWMgYm9vbAo+ID4gPiA+ID4gK2RybV9jbGllbnRf Y29ubmVjdG9yX2lzX2VuYWJsZWQoc3RydWN0IGRybV9jbGllbnRfY29ubmVjdG9yICpjb25uZWN0 b3IsCj4gPiA+ID4gPiArCQkJCWJvb2wgc3RyaWN0KQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsJ aWYgKHN0cmljdCkKPiA+ID4gPiA+ICsJCXJldHVybiBjb25uZWN0b3ItPnN0YXR1cyA9PSBjb25u ZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKPiA+ID4gPiA+ICsJZWxzZQo+ID4gPiA+ID4gKwkJcmV0 dXJuIGNvbm5lY3Rvci0+c3RhdHVzICE9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwo+ ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdHJ1Y3QgZHJtX21vZGVfbW9kZWlu Zm8gKgo+ID4gPiA+ID4gK2RybV9jbGllbnRfZGlzcGxheV9maXJzdF9tb2RlKHN0cnVjdCBkcm1f Y2xpZW50X2Rpc3BsYXkgKmRpc3BsYXkpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwlpZiAoIWRp c3BsYXktPm51bV9tb2RlcykKPiA+ID4gPiA+ICsJCXJldHVybiBOVUxMOwo+ID4gPiA+ID4gKwly ZXR1cm4gZGlzcGxheS0+bW9kZXM7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gK0VYUE9SVF9TWU1C T0woZHJtX2NsaWVudF9kaXNwbGF5X2ZpcnN0X21vZGUpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4g K3N0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyAqCj4gPiA+ID4gPiArZHJtX2NsaWVudF9kaXNwbGF5 X25leHRfbW9kZShzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5LAo+ID4gPiA+ID4g KwkJCSAgICAgc3RydWN0IGRybV9tb2RlX21vZGVpbmZvICptb2RlKQo+ID4gPiA+ID4gK3sKPiA+ ID4gPiA+ICsJc3RydWN0IGRybV9tb2RlX21vZGVpbmZvICptb2RlcyA9IGRpc3BsYXktPm1vZGVz Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlpZiAoKyttb2RlIDwgJm1vZGVzW2Rpc3BsYXktPm51 bV9tb2Rlc10pCj4gPiA+ID4gPiArCQlyZXR1cm4gbW9kZTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ICsJcmV0dXJuIE5VTEw7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gK0VYUE9SVF9TWU1CT0woZHJt X2NsaWVudF9kaXNwbGF5X25leHRfbW9kZSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArc3RhdGlj IHZvaWQKPiA+ID4gPiA+ICtkcm1fY2xpZW50X2Rpc3BsYXlfZmlsbF90aWxlX21vZGVzKHN0cnVj dCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXksCj4gPiA+ID4gPiArCQkJCSAgIHN0cnVjdCBk cm1fbW9kZV9tb2RlaW5mbyAqdGlsZV9tb2RlcykKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCXVu c2lnbmVkIGludCBpLCBqLCBudW1fbW9kZXMgPSBkaXNwbGF5LT5jb25uZWN0b3JzWzBdLT5udW1f bW9kZXM7Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyAqdGlsZV9tb2RlLCAq Y29ubl9tb2RlOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlpZiAoIW51bV9tb2Rlcykgewo+ID4g PiA+ID4gKwkJa2ZyZWUodGlsZV9tb2Rlcyk7Cj4gPiA+ID4gPiArCQlrZnJlZShkaXNwbGF5LT5t b2Rlcyk7Cj4gPiA+ID4gPiArCQlkaXNwbGF5LT5tb2RlcyA9IE5VTEw7Cj4gPiA+ID4gPiArCQlk aXNwbGF5LT5udW1fbW9kZXMgPSAwOwo+ID4gPiA+ID4gKwkJcmV0dXJuOwo+ID4gPiA+ID4gKwl9 Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBudW1fbW9kZXM7IGkrKykg ewo+ID4gPiA+ID4gKwkJdGlsZV9tb2RlID0gJnRpbGVfbW9kZXNbaV07Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiArCQljb25uX21vZGUgPSAmZGlzcGxheS0+Y29ubmVjdG9yc1swXS0+bW9kZXNbaV07 Cj4gPiA+ID4gPiArCQl0aWxlX21vZGUtPmNsb2NrID0gY29ubl9tb2RlLT5jbG9jazsKPiA+ID4g PiA+ICsJCXRpbGVfbW9kZS0+dnNjYW4gPSBjb25uX21vZGUtPnZzY2FuOwo+ID4gPiA+ID4gKwkJ dGlsZV9tb2RlLT52cmVmcmVzaCA9IGNvbm5fbW9kZS0+dnJlZnJlc2g7Cj4gPiA+ID4gPiArCQl0 aWxlX21vZGUtPmZsYWdzID0gY29ubl9tb2RlLT5mbGFnczsKPiA+ID4gPiA+ICsJCXRpbGVfbW9k ZS0+dHlwZSA9IGNvbm5fbW9kZS0+dHlwZTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJCWZvciAo aiA9IDA7IGogPCBkaXNwbGF5LT5udW1fY29ubmVjdG9yczsgaisrKSB7Cj4gPiA+ID4gPiArCQkJ Y29ubl9tb2RlID0gJmRpc3BsYXktPmNvbm5lY3RvcnNbal0tPm1vZGVzW2ldOwo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gKwkJCWlmICghZGlzcGxheS0+Y29ubmVjdG9yc1tqXS0+dGlsZV9oX2xvYykg ewo+ID4gPiA+ID4gKwkJCQl0aWxlX21vZGUtPmhkaXNwbGF5ICs9IGNvbm5fbW9kZS0+aGRpc3Bs YXk7Cj4gPiA+ID4gPiArCQkJCXRpbGVfbW9kZS0+aHN5bmNfc3RhcnQgKz0gY29ubl9tb2RlLT5o c3luY19zdGFydDsKPiA+ID4gPiA+ICsJCQkJdGlsZV9tb2RlLT5oc3luY19lbmQgKz0gY29ubl9t b2RlLT5oc3luY19lbmQ7Cj4gPiA+ID4gPiArCQkJCXRpbGVfbW9kZS0+aHRvdGFsICs9IGNvbm5f bW9kZS0+aHRvdGFsOwo+ID4gPiA+ID4gKwkJCX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJCQlp ZiAoIWRpc3BsYXktPmNvbm5lY3RvcnNbal0tPnRpbGVfdl9sb2MpIHsKPiA+ID4gPiA+ICsJCQkJ dGlsZV9tb2RlLT52ZGlzcGxheSArPSBjb25uX21vZGUtPnZkaXNwbGF5Owo+ID4gPiA+ID4gKwkJ CQl0aWxlX21vZGUtPnZzeW5jX3N0YXJ0ICs9IGNvbm5fbW9kZS0+dnN5bmNfc3RhcnQ7Cj4gPiA+ ID4gPiArCQkJCXRpbGVfbW9kZS0+dnN5bmNfZW5kICs9IGNvbm5fbW9kZS0+dnN5bmNfZW5kOwo+ ID4gPiA+ID4gKwkJCQl0aWxlX21vZGUtPnZ0b3RhbCArPSBjb25uX21vZGUtPnZ0b3RhbDsKPiA+ ID4gPiA+ICsJCQl9Cj4gPiA+ID4gPiArCQl9Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ICsJa2ZyZWUoZGlzcGxheS0+bW9kZXMpOwo+ID4gPiA+ID4gKwlkaXNwbGF5LT5tb2Rl cyA9IHRpbGVfbW9kZXM7Cj4gPiA+ID4gPiArCWRpc3BsYXktPm51bV9tb2RlcyA9IG51bV9tb2Rl czsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyoqCj4gPiA+ID4gPiArICog ZHJtX2NsaWVudF9kaXNwbGF5X3VwZGF0ZV9tb2RlcyAtIEZldGNoIGRpc3BsYXkgbW9kZXMKPiA+ ID4gPiA+ICsgKiBAZGlzcGxheTogQ2xpZW50IGRpc3BsYXkKPiA+ID4gPiA+ICsgKiBAbW9kZV9j aGFuZ2VkOiBPcHRpb25hbCBwb2ludGVyIHRvIGJvb2xlbiB3aGljaCByZXR1cm4gd2hldGhlciB0 aGUgbW9kZXMKPiA+ID4gPiA+ICsgKiAgICAgICAgICAgICAgICBoYXZlIGNoYW5nZWQgb3Igbm90 Lgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBp biB0aGUgY2xpZW50IGhvdHBsdWcgY2FsbGJhY2sgdG8gY2hlY2sgaWYgdGhlCj4gPiA+ID4gPiAr ICogdmlkZW8gbW9kZXMgaGF2ZSBjaGFuZ2VkIGFuZCBnZXQgdGhlbSB1cC10by1kYXRlLgo+ID4g PiA+ID4gKyAqCj4gPiA+ID4gPiArICogUmV0dXJuczoKPiA+ID4gPiA+ICsgKiBOdW1iZXIgb2Yg bW9kZXMgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ID4gPiA+ ID4gKyAqLwo+ID4gPiA+ID4gK2ludCBkcm1fY2xpZW50X2Rpc3BsYXlfdXBkYXRlX21vZGVzKHN0 cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXksCj4gPiA+ID4gPiArCQkJCSAgICBib29s ICptb2RlX2NoYW5nZWQpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgbnVt X2Nvbm5lY3RvcnMgPSBkaXNwbGF5LT5udW1fY29ubmVjdG9yczsKPiA+ID4gPiA+ICsJc3RydWN0 IGRybV9jbGllbnRfZGV2ICpjbGllbnQgPSBkaXNwbGF5LT5jbGllbnQ7Cj4gPiA+ID4gPiArCXN0 cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyAqZGlzcGxheV90aWxlX21vZGVzOwo+ID4gPiA+ID4gKwlz dHJ1Y3QgZHJtX2NsaWVudF9jb25uZWN0b3IgKipjb25uZWN0b3JzOwo+ID4gPiA+ID4gKwl1bnNp Z25lZCBpbnQgaSwgbnVtX21vZGVzID0gMDsKPiA+ID4gPiA+ICsJYm9vbCBkdW1teV9jaGFuZ2Vk ID0gZmFsc2U7Cj4gPiA+ID4gPiArCWludCByZXQ7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWlm IChtb2RlX2NoYW5nZWQpCj4gPiA+ID4gPiArCQkqbW9kZV9jaGFuZ2VkID0gZmFsc2U7Cj4gPiA+ ID4gPiArCWVsc2UKPiA+ID4gPiA+ICsJCW1vZGVfY2hhbmdlZCA9ICZkdW1teV9jaGFuZ2VkOwo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlpZiAoZGlzcGxheS0+Y2xvbmVkKQo+ID4gPiA+ID4gKwkJ cmV0dXJuIDI7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXJldCA9IGRybV9jbGllbnRfZ2V0X2Zp bGUoY2xpZW50KTsKPiA+ID4gPiA+ICsJaWYgKHJldCkKPiA+ID4gPiA+ICsJCXJldHVybiByZXQ7 Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWNvbm5lY3RvcnMgPSBrY2FsbG9jKG51bV9jb25uZWN0 b3JzLCBzaXplb2YoKmNvbm5lY3RvcnMpLCBHRlBfS0VSTkVMKTsKPiA+ID4gPiA+ICsJaWYgKCFj b25uZWN0b3JzKSB7Cj4gPiA+ID4gPiArCQlyZXQgPSAtRU5PTUVNOwo+ID4gPiA+ID4gKwkJZ290 byBvdXRfcHV0X2ZpbGU7Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJLyog R2V0IGEgbmV3IHNldCBmb3IgY29tcGFyaXNvbiAqLwo+ID4gPiA+ID4gKwlmb3IgKGkgPSAwOyBp IDwgbnVtX2Nvbm5lY3RvcnM7IGkrKykgewo+ID4gPiA+ID4gKwkJY29ubmVjdG9yc1tpXSA9IGRy bV9jbGllbnRfZ2V0X2Nvbm5lY3RvcihjbGllbnQsIGRpc3BsYXktPmNvbm5lY3RvcnNbaV0tPmNv bm5faWQpOwo+ID4gPiA+ID4gKwkJaWYgKElTX0VSUl9PUl9OVUxMKGNvbm5lY3RvcnNbaV0pKSB7 Cj4gPiA+ID4gPiArCQkJcmV0ID0gUFRSX0VSUl9PUl9aRVJPKGNvbm5lY3RvcnNbaV0pOwo+ID4g PiA+ID4gKwkJCWlmICghcmV0KQo+ID4gPiA+ID4gKwkJCQlyZXQgPSAtRU5PRU5UOwo+ID4gPiA+ ID4gKwkJCWdvdG8gb3V0X2NsZWFudXA7Cj4gPiA+ID4gPiArCQl9Cj4gPiA+ID4gPiArCX0KPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICsJLyogQWxsIGNvbm5lY3RvcnMgc2hvdWxkIGhhdmUgdGhlIHNh bWUgbnVtYmVyIG9mIG1vZGVzICovCj4gPiA+ID4gPiArCW51bV9tb2RlcyA9IGNvbm5lY3RvcnNb MF0tPm51bV9tb2RlczsKPiA+ID4gPiA+ICsJZm9yIChpID0gMDsgaSA8IG51bV9jb25uZWN0b3Jz OyBpKyspIHsKPiA+ID4gPiA+ICsJCWlmIChudW1fbW9kZXMgIT0gY29ubmVjdG9yc1tpXS0+bnVt X21vZGVzKSB7Cj4gPiA+ID4gPiArCQkJcmV0ID0gLUVJTlZBTDsKPiA+ID4gPiA+ICsJCQlnb3Rv IG91dF9jbGVhbnVwOwo+ID4gPiA+ID4gKwkJfQo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiArCWlmIChudW1fY29ubmVjdG9ycyA+IDEpIHsKPiA+ID4gPiA+ICsJCWRpc3BsYXlf dGlsZV9tb2RlcyA9IGtjYWxsb2MobnVtX21vZGVzLCBzaXplb2YoKmRpc3BsYXlfdGlsZV9tb2Rl cyksIEdGUF9LRVJORUwpOwo+ID4gPiA+ID4gKwkJaWYgKCFkaXNwbGF5X3RpbGVfbW9kZXMpIHsK PiA+ID4gPiA+ICsJCQlyZXQgPSAtRU5PTUVNOwo+ID4gPiA+ID4gKwkJCWdvdG8gb3V0X2NsZWFu dXA7Cj4gPiA+ID4gPiArCQl9Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJ bXV0ZXhfbG9jaygmZGlzcGxheS0+bW9kZXNfbG9jayk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAr CWZvciAoaSA9IDA7IGkgPCBudW1fY29ubmVjdG9yczsgaSsrKSB7Cj4gPiA+ID4gPiArCQlkaXNw bGF5LT5jb25uZWN0b3JzW2ldLT5zdGF0dXMgPSBjb25uZWN0b3JzW2ldLT5zdGF0dXM7Cj4gPiA+ ID4gPiArCQlpZiAoZGlzcGxheS0+Y29ubmVjdG9yc1tpXS0+bnVtX21vZGVzICE9IGNvbm5lY3Rv cnNbaV0tPm51bV9tb2Rlcykgewo+ID4gPiA+ID4gKwkJCWRpc3BsYXktPmNvbm5lY3RvcnNbaV0t Pm51bV9tb2RlcyA9IGNvbm5lY3RvcnNbaV0tPm51bV9tb2RlczsKPiA+ID4gPiA+ICsJCQlrZnJl ZShkaXNwbGF5LT5jb25uZWN0b3JzW2ldLT5tb2Rlcyk7Cj4gPiA+ID4gPiArCQkJZGlzcGxheS0+ Y29ubmVjdG9yc1tpXS0+bW9kZXMgPSBjb25uZWN0b3JzW2ldLT5tb2RlczsKPiA+ID4gPiA+ICsJ CQljb25uZWN0b3JzW2ldLT5tb2RlcyA9IE5VTEw7Cj4gPiA+ID4gPiArCQkJKm1vZGVfY2hhbmdl ZCA9IHRydWU7Cj4gPiA+ID4gPiArCQl9Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICsJaWYgKG51bV9jb25uZWN0b3JzID4gMSkKPiA+ID4gPiA+ICsJCWRybV9jbGllbnRfZGlz cGxheV9maWxsX3RpbGVfbW9kZXMoZGlzcGxheSwgZGlzcGxheV90aWxlX21vZGVzKTsKPiA+ID4g PiA+ICsJZWxzZQo+ID4gPiA+ID4gKwkJZGlzcGxheS0+bW9kZXMgPSBkaXNwbGF5LT5jb25uZWN0 b3JzWzBdLT5tb2RlczsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZkaXNw bGF5LT5tb2Rlc19sb2NrKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtvdXRfY2xlYW51cDoKPiA+ ID4gPiA+ICsJZm9yIChpID0gMDsgaSA8IG51bV9jb25uZWN0b3JzOyBpKyspCj4gPiA+ID4gPiAr CQlkcm1fY2xpZW50X2Nvbm5lY3Rvcl9mcmVlKGNvbm5lY3RvcnNbaV0pOwo+ID4gPiA+ID4gKwlr ZnJlZShjb25uZWN0b3JzKTsKPiA+ID4gPiA+ICtvdXRfcHV0X2ZpbGU6Cj4gPiA+ID4gPiArCWRy bV9jbGllbnRfcHV0X2ZpbGUoY2xpZW50KTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0dXJu IHJldCA/IHJldCA6IG51bV9tb2RlczsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArRVhQT1JUX1NZ TUJPTChkcm1fY2xpZW50X2Rpc3BsYXlfdXBkYXRlX21vZGVzKTsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICt2b2lkIGRybV9jbGllbnRfZGlzcGxheV9mcmVlKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3Bs YXkgKmRpc3BsYXkpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgaTsKPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICsJaWYgKCFkaXNwbGF5KQo+ID4gPiA+ID4gKwkJcmV0dXJuOwo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkvKiB0aWxlIG1vZGVzPyAqLwo+ID4gPiA+ID4gKwlpZiAo ZGlzcGxheS0+bW9kZXMgIT0gZGlzcGxheS0+Y29ubmVjdG9yc1swXS0+bW9kZXMpCj4gPiA+ID4g PiArCQlrZnJlZShkaXNwbGF5LT5tb2Rlcyk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWZvciAo aSA9IDA7IGkgPCBkaXNwbGF5LT5udW1fY29ubmVjdG9yczsgaSsrKQo+ID4gPiA+ID4gKwkJZHJt X2NsaWVudF9jb25uZWN0b3JfZnJlZShkaXNwbGF5LT5jb25uZWN0b3JzW2ldKTsKPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ICsJa2ZyZWUoZGlzcGxheS0+Y29ubmVjdG9ycyk7Cj4gPiA+ID4gPiArCW11 dGV4X2Rlc3Ryb3koJmRpc3BsYXktPm1vZGVzX2xvY2spOwo+ID4gPiA+ID4gKwlrZnJlZShkaXNw bGF5KTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X2Rp c3BsYXlfZnJlZSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArc3RhdGljIHN0cnVjdCBkcm1fY2xp ZW50X2Rpc3BsYXkgKgo+ID4gPiA+ID4gK2RybV9jbGllbnRfZGlzcGxheV9hbGxvYyhzdHJ1Y3Qg ZHJtX2NsaWVudF9kZXYgKmNsaWVudCwKPiA+ID4gPiA+ICsJCQkgdW5zaWduZWQgaW50IG51bV9j b25uZWN0b3JzKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9jbGllbnRfZGlz cGxheSAqZGlzcGxheTsKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9jbGllbnRfY29ubmVjdG9yICoq Y29ubmVjdG9yczsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJZGlzcGxheSA9IGt6YWxsb2Moc2l6 ZW9mKCpkaXNwbGF5KSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ID4gPiArCWNvbm5lY3RvcnMgPSBrY2Fs bG9jKG51bV9jb25uZWN0b3JzLCBzaXplb2YoKmNvbm5lY3RvcnMpLCBHRlBfS0VSTkVMKTsKPiA+ ID4gPiA+ICsJaWYgKCFkaXNwbGF5IHx8ICFjb25uZWN0b3JzKSB7Cj4gPiA+ID4gPiArCQlrZnJl ZShkaXNwbGF5KTsKPiA+ID4gPiA+ICsJCWtmcmVlKGNvbm5lY3RvcnMpOwo+ID4gPiA+ID4gKwkJ cmV0dXJuIE5VTEw7Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJbXV0ZXhf aW5pdCgmZGlzcGxheS0+bW9kZXNfbG9jayk7Cj4gPiA+ID4gPiArCWRpc3BsYXktPmNsaWVudCA9 IGNsaWVudDsKPiA+ID4gPiA+ICsJZGlzcGxheS0+Y29ubmVjdG9ycyA9IGNvbm5lY3RvcnM7Cj4g PiA+ID4gPiArCWRpc3BsYXktPm51bV9jb25uZWN0b3JzID0gbnVtX2Nvbm5lY3RvcnM7Cj4gPiA+ ID4gPiArCj4gPiA+ID4gPiArCXJldHVybiBkaXNwbGF5Owo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ICsvKiBMb2dpYyBpcyBmcm9tIGRybV9mYl9oZWxwZXIgKi8KPiA+ID4gPiA+ ICtzdGF0aWMgc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqCj4gPiA+ID4gPiArZHJtX2NsaWVu dF9jb25uZWN0b3JfcGlja19jbG9uZWQoc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQsCj4g PiA+ID4gPiArCQkJCSBzdHJ1Y3QgZHJtX2NsaWVudF9jb25uZWN0b3IgKipjb25uZWN0b3JzLAo+ ID4gPiA+ID4gKwkJCQkgdW5zaWduZWQgaW50IG51bV9jb25uZWN0b3JzKQo+ID4gPiA+ID4gK3sK PiA+ID4gPiA+ICsJc3RydWN0IGRybV9tb2RlX21vZGVpbmZvIG1vZGVzWzJdLCB1ZG10X21vZGUs ICptb2RlLCAqdG1wOwo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZG10X2Rp c3BsYXlfbW9kZSA9IE5VTEw7Cj4gPiA+ID4gPiArCXVuc2lnbmVkIGludCBpLCBqLCBjb25uc1sy XSwgbnVtX2Nvbm5zID0gMDsKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9jbGllbnRfY29ubmVjdG9y ICpjb25uZWN0b3I7Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjbGllbnQt PmRldjsKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheTsKPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICsJLyogb25seSBjb250ZW1wbGF0ZSBjbG9uaW5nIGluIHRoZSBz aW5nbGUgY3J0YyBjYXNlICovCj4gPiA+ID4gPiArCWlmIChkZXYtPm1vZGVfY29uZmlnLm51bV9j cnRjID4gMSkKPiA+ID4gPiA+ICsJCXJldHVybiBOVUxMOwo+ID4gPiA+ID4gK3JldHJ5Ogo+ID4g PiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2Nvbm5lY3RvcnM7IGkrKykgewo+ID4gPiA+ID4g KwkJY29ubmVjdG9yID0gY29ubmVjdG9yc1tpXTsKPiA+ID4gPiA+ICsJCWlmICghY29ubmVjdG9y IHx8IGNvbm5lY3Rvci0+aGFzX3RpbGUgfHwgIWNvbm5lY3Rvci0+bnVtX21vZGVzKQo+ID4gPiA+ ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkJZm9yIChqID0gMDsgaiA8 IGNvbm5lY3Rvci0+bnVtX21vZGVzOyBqKyspIHsKPiA+ID4gPiA+ICsJCQltb2RlID0gJmNvbm5l Y3Rvci0+bW9kZXNbal07Cj4gPiA+ID4gPiArCQkJaWYgKGRtdF9kaXNwbGF5X21vZGUpIHsKPiA+ ID4gPiA+ICsJCQkJaWYgKGRybV91bW9kZV9lcXVhbCgmdWRtdF9tb2RlLCBtb2RlKSkgewo+ID4g PiA+ID4gKwkJCQkJY29ubnNbbnVtX2Nvbm5zXSA9IGk7Cj4gPiA+ID4gPiArCQkJCQltb2Rlc1tu dW1fY29ubnMrK10gPSAqbW9kZTsKPiA+ID4gPiA+ICsJCQkJCWJyZWFrOwo+ID4gPiA+ID4gKwkJ CQl9Cj4gPiA+ID4gPiArCQkJfSBlbHNlIHsKPiA+ID4gPiA+ICsJCQkJaWYgKG1vZGUtPnR5cGUg JiBEUk1fTU9ERV9UWVBFX1VTRVJERUYpIHsKPiA+ID4gPiA+ICsJCQkJCWNvbm5zW251bV9jb25u c10gPSBpOwo+ID4gPiA+ID4gKwkJCQkJbW9kZXNbbnVtX2Nvbm5zKytdID0gKm1vZGU7Cj4gPiA+ ID4gPiArCQkJCQlicmVhazsKPiA+ID4gPiA+ICsJCQkJfQo+ID4gPiA+ID4gKwkJCX0KPiA+ID4g PiA+ICsJCX0KPiA+ID4gPiA+ICsJCWlmIChudW1fY29ubnMgPT0gMikKPiA+ID4gPiA+ICsJCQli cmVhazsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlpZiAobnVtX2Nvbm5z ID09IDIpCj4gPiA+ID4gPiArCQlnb3RvIGZvdW5kOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlp ZiAoZG10X2Rpc3BsYXlfbW9kZSkKPiA+ID4gPiA+ICsJCXJldHVybiBOVUxMOwo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gKwlkbXRfZGlzcGxheV9tb2RlID0gZHJtX21vZGVfZmluZF9kbXQoZGV2LCAx MDI0LCA3NjgsIDYwLCBmYWxzZSk7Cj4gPiA+ID4gPiArCWRybV9tb2RlX2NvbnZlcnRfdG9fdW1v ZGUoJnVkbXRfbW9kZSwgZG10X2Rpc3BsYXlfbW9kZSk7Cj4gPiA+ID4gPiArCWRybV9tb2RlX2Rl c3Ryb3koZGV2LCBkbXRfZGlzcGxheV9tb2RlKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJZ290 byByZXRyeTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtmb3VuZDoKPiA+ID4gPiA+ICsJdG1wID0g a2NhbGxvYygyLCBzaXplb2YoKnRtcCksIEdGUF9LRVJORUwpOwo+ID4gPiA+ID4gKwlpZiAoIXRt cCkKPiA+ID4gPiA+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gKwlkaXNwbGF5ID0gZHJtX2NsaWVudF9kaXNwbGF5X2FsbG9jKGNsaWVudCwgMik7Cj4g PiA+ID4gPiArCWlmICghZGlzcGxheSkgewo+ID4gPiA+ID4gKwkJa2ZyZWUodG1wKTsKPiA+ID4g PiA+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiAr Cj4gPiA+ID4gPiArCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKPiA+ID4gPiA+ICsJCWNvbm5l Y3RvciA9IGNvbm5lY3RvcnNbY29ubnNbaV1dOwo+ID4gPiA+ID4gKwkJZGlzcGxheS0+Y29ubmVj dG9yc1tpXSA9IGNvbm5lY3RvcjsKPiA+ID4gPiA+ICsJCWNvbm5lY3RvcnNbY29ubnNbaV1dID0g TlVMTDsKPiA+ID4gPiA+ICsJCWtmcmVlKGNvbm5lY3Rvci0+bW9kZXMpOwo+ID4gPiA+ID4gKwkJ dG1wW2ldID0gbW9kZXNbaV07Cj4gPiA+ID4gPiArCQljb25uZWN0b3ItPm1vZGVzID0gJnRtcFtp XTsKPiA+ID4gPiA+ICsJCWNvbm5lY3Rvci0+bnVtX21vZGVzID0gMTsKPiA+ID4gPiA+ICsJfQo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlkaXNwbGF5LT5jbG9uZWQgPSB0cnVlOwo+ID4gPiA+ID4g KwlkaXNwbGF5LT5tb2RlcyA9ICZ0bXBbMF07Cj4gPiA+ID4gPiArCWRpc3BsYXktPm51bV9tb2Rl cyA9IDE7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXJldHVybiBkaXNwbGF5Owo+ID4gPiA+ID4g K30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdGF0aWMgc3RydWN0IGRybV9jbGllbnRfZGlzcGxh eSAqCj4gPiA+ID4gPiArZHJtX2NsaWVudF9jb25uZWN0b3JfcGlja190aWxlKHN0cnVjdCBkcm1f Y2xpZW50X2RldiAqY2xpZW50LAo+ID4gPiA+ID4gKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2NsaWVu dF9jb25uZWN0b3IgKipjb25uZWN0b3JzLAo+ID4gPiA+ID4gKwkJCSAgICAgICB1bnNpZ25lZCBp bnQgbnVtX2Nvbm5lY3RvcnMpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwl1bnNpZ25lZCBpbnQg aSwgbnVtX2Nvbm5zLCBudW1fbW9kZXMsIHRpbGVfZ3JvdXAgPSAwOwo+ID4gPiA+ID4gKwlzdHJ1 Y3QgZHJtX21vZGVfbW9kZWluZm8gKnRpbGVfbW9kZXMgPSBOVUxMOwo+ID4gPiA+ID4gKwlzdHJ1 Y3QgZHJtX2NsaWVudF9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPiA+ID4gPiA+ICsJc3RydWN0IGRy bV9jbGllbnRfZGlzcGxheSAqZGlzcGxheTsKPiA+ID4gPiA+ICsJdTE2IGNvbm5zWzMyXTsKPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICsJZm9yIChpID0gMDsgaSA8IG51bV9jb25uZWN0b3JzOyBpKysp IHsKPiA+ID4gPiA+ICsJCWNvbm5lY3RvciA9IGNvbm5lY3RvcnNbaV07Cj4gPiA+ID4gPiArCQlp ZiAoIWNvbm5lY3RvciB8fCAhY29ubmVjdG9yLT50aWxlX2dyb3VwKQo+ID4gPiA+ID4gKwkJCWNv bnRpbnVlOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkJaWYgKCF0aWxlX2dyb3VwKSB7Cj4gPiA+ ID4gPiArCQkJdGlsZV9ncm91cCA9IGNvbm5lY3Rvci0+dGlsZV9ncm91cDsKPiA+ID4gPiA+ICsJ CQludW1fbW9kZXMgPSBjb25uZWN0b3ItPm51bV9tb2RlczsKPiA+ID4gPiA+ICsJCX0KPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICsJCWlmIChjb25uZWN0b3ItPnRpbGVfZ3JvdXAgIT0gdGlsZV9ncm91 cCkKPiA+ID4gPiA+ICsJCQljb250aW51ZTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJCWlmIChu dW1fbW9kZXMgIT0gY29ubmVjdG9yLT5udW1fbW9kZXMpIHsKPiA+ID4gPiA+ICsJCQlEUk1fRVJS T1IoIlRpbGUgY29ubmVjdG9ycyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIG1vZGVzXG4i KTsKPiA+ID4gPiA+ICsJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiA+ID4gPiA+ICsJCX0K PiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJCWNvbm5zW251bV9jb25ucysrXSA9IGk7Cj4gPiA+ID4g PiArCQlpZiAoV0FSTl9PTihudW1fY29ubnMgPT0gMzMpKQo+ID4gPiA+ID4gKwkJCXJldHVybiBF UlJfUFRSKC1FSU5WQUwpOwo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWlm ICghbnVtX2Nvbm5zKQo+ID4gPiA+ID4gKwkJcmV0dXJuIE5VTEw7Cj4gPiA+ID4gPiArCj4gPiA+ ID4gPiArCWlmIChudW1fbW9kZXMpIHsKPiA+ID4gPiA+ICsJCXRpbGVfbW9kZXMgPSBrY2FsbG9j KG51bV9tb2Rlcywgc2l6ZW9mKCp0aWxlX21vZGVzKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ID4gPiAr CQlpZiAoIXRpbGVfbW9kZXMpCj4gPiA+ID4gPiArCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7 Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJZGlzcGxheSA9IGRybV9jbGll bnRfZGlzcGxheV9hbGxvYyhjbGllbnQsIG51bV9jb25ucyk7Cj4gPiA+ID4gPiArCWlmICghZGlz cGxheSkgewo+ID4gPiA+ID4gKwkJa2ZyZWUodGlsZV9tb2Rlcyk7Cj4gPiA+ID4gPiArCQlyZXR1 cm4gRVJSX1BUUigtRU5PTUVNKTsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4g KwlpZiAobnVtX21vZGVzKQo+ID4gPiA+ID4gKwkJZHJtX2NsaWVudF9kaXNwbGF5X2ZpbGxfdGls ZV9tb2RlcyhkaXNwbGF5LCB0aWxlX21vZGVzKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0 dXJuIGRpc3BsYXk7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyBz dHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICoKPiA+ID4gPiA+ICtkcm1fY2xpZW50X2Nvbm5lY3Rv cl9waWNrX25vdF90aWxlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LAo+ID4gPiA+ID4g KwkJCQkgICBzdHJ1Y3QgZHJtX2NsaWVudF9jb25uZWN0b3IgKipjb25uZWN0b3JzLAo+ID4gPiA+ ID4gKwkJCQkgICB1bnNpZ25lZCBpbnQgbnVtX2Nvbm5lY3RvcnMpCj4gPiA+ID4gPiArewo+ID4g PiA+ID4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5Owo+ID4gPiA+ID4gKwl1 bnNpZ25lZCBpbnQgaTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJZm9yIChpID0gMDsgaSA8IG51 bV9jb25uZWN0b3JzOyBpKyspIHsKPiA+ID4gPiA+ICsJCWlmICghY29ubmVjdG9yc1tpXSB8fCBj b25uZWN0b3JzW2ldLT5oYXNfdGlsZSkKPiA+ID4gPiA+ICsJCQljb250aW51ZTsKPiA+ID4gPiA+ ICsJCWJyZWFrOwo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWlmIChpID09 IG51bV9jb25uZWN0b3JzKQo+ID4gPiA+ID4gKwkJcmV0dXJuIE5VTEw7Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiArCWRpc3BsYXkgPSBkcm1fY2xpZW50X2Rpc3BsYXlfYWxsb2MoY2xpZW50LCAxKTsK PiA+ID4gPiA+ICsJaWYgKCFkaXNwbGF5KQo+ID4gPiA+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVO T01FTSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWRpc3BsYXktPmNvbm5lY3RvcnNbMF0gPSBj b25uZWN0b3JzW2ldOwo+ID4gPiA+ID4gKwljb25uZWN0b3JzW2ldID0gTlVMTDsKPiA+ID4gPiA+ ICsJZGlzcGxheS0+bW9kZXMgPSBkaXNwbGF5LT5jb25uZWN0b3JzWzBdLT5tb2RlczsKPiA+ID4g PiA+ICsJZGlzcGxheS0+bnVtX21vZGVzID0gZGlzcGxheS0+Y29ubmVjdG9yc1swXS0+bnVtX21v ZGVzOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXR1cm4gZGlzcGxheTsKPiA+ID4gPiA+ICt9 Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArLyogR2V0IGNvbm5lY3RvcnMgYW5kIGJ1bmRsZSB0aGVt IHVwIGludG8gZGlzcGxheXMgKi8KPiA+ID4gPiA+ICtzdGF0aWMgaW50IGRybV9jbGllbnRfZ2V0 X2Rpc3BsYXlzKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LAo+ID4gPiA+ID4gKwkJCQkg ICBzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICoqKmRpc3BsYXlzKQo+ID4gPiA+ID4gK3sKPiA+ ID4gPiA+ICsJaW50IHJldCwgbnVtX2Nvbm5lY3RvcnMsIG51bV9kaXNwbGF5cyA9IDA7Cj4gPiA+ ID4gPiArCXN0cnVjdCBkcm1fY2xpZW50X2Nvbm5lY3RvciAqKmNvbm5lY3RvcnM7Cj4gPiA+ID4g PiArCXN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXk7Cj4gPiA+ID4gPiArCXVuc2ln bmVkIGludCBpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXQgPSBkcm1fY2xpZW50X2dldF9m aWxlKGNsaWVudCk7Cj4gPiA+ID4gPiArCWlmIChyZXQpCj4gPiA+ID4gPiArCQlyZXR1cm4gcmV0 Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwludW1fY29ubmVjdG9ycyA9IGRybV9jbGllbnRfZ2V0 X2Nvbm5lY3RvcnMoY2xpZW50LCAmY29ubmVjdG9ycyk7Cj4gPiA+ID4gPiArCWlmIChudW1fY29u bmVjdG9ycyA8PSAwKSB7Cj4gPiA+ID4gPiArCQlyZXQgPSBudW1fY29ubmVjdG9yczsKPiA+ID4g PiA+ICsJCWdvdG8gZXJyX3B1dF9maWxlOwo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiArCj4gPiA+ ID4gPiArCSpkaXNwbGF5cyA9IGtjYWxsb2MobnVtX2Nvbm5lY3RvcnMsIHNpemVvZigqZGlzcGxh eXMpLCBHRlBfS0VSTkVMKTsKPiA+ID4gPiA+ICsJaWYgKCEoKmRpc3BsYXlzKSkgewo+ID4gPiA+ ID4gKwkJcmV0ID0gLUVOT01FTTsKPiA+ID4gPiA+ICsJCWdvdG8gZXJyX2ZyZWU7Cj4gPiA+ID4g PiArCX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJZGlzcGxheSA9IGRybV9jbGllbnRfY29ubmVj dG9yX3BpY2tfY2xvbmVkKGNsaWVudCwgY29ubmVjdG9ycywKPiA+ID4gPiA+ICsJCQkJCQkgICBu dW1fY29ubmVjdG9ycyk7Cj4gPiA+ID4gPiArCWlmIChJU19FUlIoZGlzcGxheSkpIHsKPiA+ID4g PiA+ICsJCXJldCA9IFBUUl9FUlIoZGlzcGxheSk7Cj4gPiA+ID4gPiArCQlnb3RvIGVycl9mcmVl Owo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiArCWlmIChkaXNwbGF5KQo+ID4gPiA+ID4gKwkJKCpk aXNwbGF5cylbbnVtX2Rpc3BsYXlzKytdID0gZGlzcGxheTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ICsJZm9yIChpID0gMDsgaSA8IG51bV9jb25uZWN0b3JzOyBpKyspIHsKPiA+ID4gPiA+ICsJCWRp c3BsYXkgPSBkcm1fY2xpZW50X2Nvbm5lY3Rvcl9waWNrX3RpbGUoY2xpZW50LCBjb25uZWN0b3Jz LAo+ID4gPiA+ID4gKwkJCQkJCQkgbnVtX2Nvbm5lY3RvcnMpOwo+ID4gPiA+ID4gKwkJaWYgKElT X0VSUihkaXNwbGF5KSkgewo+ID4gPiA+ID4gKwkJCXJldCA9IFBUUl9FUlIoZGlzcGxheSk7Cj4g PiA+ID4gPiArCQkJZ290byBlcnJfZnJlZTsKPiA+ID4gPiA+ICsJCX0KPiA+ID4gPiA+ICsJCWlm ICghZGlzcGxheSkKPiA+ID4gPiA+ICsJCQlicmVhazsKPiA+ID4gPiA+ICsJCSgqZGlzcGxheXMp W251bV9kaXNwbGF5cysrXSA9IGRpc3BsYXk7Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ICsJZm9yIChpID0gMDsgaSA8IG51bV9jb25uZWN0b3JzOyBpKyspIHsKPiA+ID4gPiA+ ICsJCWRpc3BsYXkgPSBkcm1fY2xpZW50X2Nvbm5lY3Rvcl9waWNrX25vdF90aWxlKGNsaWVudCwg Y29ubmVjdG9ycywKPiA+ID4gPiA+ICsJCQkJCQkJICAgICBudW1fY29ubmVjdG9ycyk7Cj4gPiA+ ID4gPiArCQlpZiAoSVNfRVJSKGRpc3BsYXkpKSB7Cj4gPiA+ID4gPiArCQkJcmV0ID0gUFRSX0VS UihkaXNwbGF5KTsKPiA+ID4gPiA+ICsJCQlnb3RvIGVycl9mcmVlOwo+ID4gPiA+ID4gKwkJfQo+ ID4gPiA+ID4gKwkJaWYgKCFkaXNwbGF5KQo+ID4gPiA+ID4gKwkJCWJyZWFrOwo+ID4gPiA+ID4g KwkJKCpkaXNwbGF5cylbbnVtX2Rpc3BsYXlzKytdID0gZGlzcGxheTsKPiA+ID4gPiA+ICsJfQo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2Nvbm5lY3RvcnM7IGkr Kykgewo+ID4gPiA+ID4gKwkJaWYgKGNvbm5lY3RvcnNbaV0pIHsKPiA+ID4gPiA+ICsJCQlEUk1f SU5GTygiQ29ubmVjdG9yICV1IGZlbGwgdGhyb3VnaCB0aGUgY3JhY2tzLlxuIiwKPiA+ID4gPiA+ ICsJCQkJIGNvbm5lY3RvcnNbaV0tPmNvbm5faWQpOwo+ID4gPiA+ID4gKwkJCWRybV9jbGllbnRf Y29ubmVjdG9yX2ZyZWUoY29ubmVjdG9yc1tpXSk7Cj4gPiA+ID4gPiArCQl9Cj4gPiA+ID4gPiAr CX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJZHJtX2NsaWVudF9wdXRfZmlsZShjbGllbnQpOwo+ ID4gPiA+ID4gKwlrZnJlZShjb25uZWN0b3JzKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0 dXJuIG51bV9kaXNwbGF5czsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtlcnJfZnJlZToKPiA+ID4g PiA+ICsJZm9yIChpID0gMDsgaSA8IG51bV9kaXNwbGF5czsgaSsrKQo+ID4gPiA+ID4gKwkJZHJt X2NsaWVudF9kaXNwbGF5X2ZyZWUoKCpkaXNwbGF5cylbaV0pOwo+ID4gPiA+ID4gKwlrZnJlZSgq ZGlzcGxheXMpOwo+ID4gPiA+ID4gKwkqZGlzcGxheXMgPSBOVUxMOwo+ID4gPiA+ID4gKwlmb3Ig KGkgPSAwOyBpIDwgbnVtX2Nvbm5lY3RvcnM7IGkrKykKPiA+ID4gPiA+ICsJCWRybV9jbGllbnRf Y29ubmVjdG9yX2ZyZWUoY29ubmVjdG9yc1tpXSk7Cj4gPiA+ID4gPiArCWtmcmVlKGNvbm5lY3Rv cnMpOwo+ID4gPiA+ID4gK2Vycl9wdXRfZmlsZToKPiA+ID4gPiA+ICsJZHJtX2NsaWVudF9wdXRf ZmlsZShjbGllbnQpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXR1cm4gcmV0Owo+ID4gPiA+ ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdGF0aWMgYm9vbAo+ID4gPiA+ID4gK2RybV9j bGllbnRfZGlzcGxheV9pc19lbmFibGVkKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3Bs YXksIGJvb2wgc3RyaWN0KQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsJdW5zaWduZWQgaW50IGk7 Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWlmICghZGlzcGxheS0+bnVtX21vZGVzKQo+ID4gPiA+ ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlmb3IgKGkgPSAwOyBp IDwgZGlzcGxheS0+bnVtX2Nvbm5lY3RvcnM7IGkrKykKPiA+ID4gPiA+ICsJCWlmICghZHJtX2Ns aWVudF9jb25uZWN0b3JfaXNfZW5hYmxlZChkaXNwbGF5LT5jb25uZWN0b3JzW2ldLCBzdHJpY3Qp KQo+ID4gPiA+ID4gKwkJCXJldHVybiBmYWxzZTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0 dXJuIHRydWU7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKy8qKgo+ID4gPiA+ ID4gKyAqIGRybV9jbGllbnRfZGlzcGxheV9nZXRfZmlyc3RfZW5hYmxlZCAtIEdldCBmaXJzdCBl bmFibGVkIGRpc3BsYXkKPiA+ID4gPiA+ICsgKiBAY2xpZW50OiBEUk0gY2xpZW50Cj4gPiA+ID4g PiArICogQHN0cmljdDogSWYgdHJ1ZSB0aGUgY29ubmVjdG9yKHMpIGhhdmUgdG8gYmUgY29ubmVj dGVkLCBpZiBmYWxzZSB0aGV5IGNhbgo+ID4gPiA+ID4gKyAqICAgICAgICAgIGFsc28gaGF2ZSB1 bmtub3duIHN0YXR1cy4KPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAqIFRoaXMgZnVuY3Rpb24g Z2V0cyBhbGwgY29ubmVjdG9ycyBhbmQgYnVuZGxlcyB0aGVtIGludG8gZGlzcGxheXMKPiA+ID4g PiA+ICsgKiAodGlsZWQvY2xvbmVkKS4gSXQgdGhlbiBwaWNrcyB0aGUgZmlyc3Qgb25lIHdpdGgg Y29ubmVjdG9ycyB0aGF0IGlzIGVuYWJsZWQKPiA+ID4gPiA+ICsgKiBhY2NvcmRpbmcgdG8gQHN0 cmljdC4KPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAqIFJldHVybnM6Cj4gPiA+ID4gPiArICog UG9pbnRlciB0byBhIGNsaWVudCBkaXNwbGF5IGlmIHN1Y2ggYSBkaXNwbGF5IHdhcyBmb3VuZCwg TlVMTCBpZiBub3QgZm91bmQKPiA+ID4gPiA+ICsgKiBvciBhbiBlcnJvciBwb2ludGVyIG9uIGZh aWx1cmUuCj4gPiA+ID4gPiArICovCj4gPiA+ID4gPiArc3RydWN0IGRybV9jbGllbnRfZGlzcGxh eSAqCj4gPiA+ID4gPiArZHJtX2NsaWVudF9kaXNwbGF5X2dldF9maXJzdF9lbmFibGVkKHN0cnVj dCBkcm1fY2xpZW50X2RldiAqY2xpZW50LCBib29sIHN0cmljdCkKPiA+ID4gPiA+ICt7Cj4gPiA+ ID4gPiArCXN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKipkaXNwbGF5cywgKmRpc3BsYXkgPSBO VUxMOwo+ID4gPiA+ID4gKwlpbnQgbnVtX2Rpc3BsYXlzOwo+ID4gPiA+ID4gKwl1bnNpZ25lZCBp bnQgaTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJbnVtX2Rpc3BsYXlzID0gZHJtX2NsaWVudF9n ZXRfZGlzcGxheXMoY2xpZW50LCAmZGlzcGxheXMpOwo+ID4gPiA+ID4gKwlpZiAobnVtX2Rpc3Bs YXlzIDwgMCkKPiA+ID4gPiA+ICsJCXJldHVybiBFUlJfUFRSKG51bV9kaXNwbGF5cyk7Cj4gPiA+ ID4gPiArCWlmICghbnVtX2Rpc3BsYXlzKQo+ID4gPiA+ID4gKwkJcmV0dXJuIE5VTEw7Cj4gPiA+ ID4gPiArCj4gPiA+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBudW1fZGlzcGxheXM7IGkrKykgewo+ ID4gPiA+ID4gKwkJaWYgKCFkaXNwbGF5ICYmCj4gPiA+ID4gPiArCQkgICAgZHJtX2NsaWVudF9k aXNwbGF5X2lzX2VuYWJsZWQoZGlzcGxheXNbaV0sIHN0cmljdCkpIHsKPiA+ID4gPiA+ICsJCQlk aXNwbGF5ID0gZGlzcGxheXNbaV07Cj4gPiA+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ID4gPiAr CQl9Cj4gPiA+ID4gPiArCQlkcm1fY2xpZW50X2Rpc3BsYXlfZnJlZShkaXNwbGF5c1tpXSk7Cj4g PiA+ID4gPiArCX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJa2ZyZWUoZGlzcGxheXMpOwo+ID4g PiA+ID4gKwo+ID4gPiA+ID4gKwlyZXR1cm4gZGlzcGxheTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4g PiArRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X2Rpc3BsYXlfZ2V0X2ZpcnN0X2VuYWJsZWQpOwo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3Vuc2lnbmVkIGludAo+ID4gPiA+ID4gK2RybV9jbGllbnRf ZGlzcGxheV9wcmVmZXJyZWRfZGVwdGgoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxh eSkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uOwo+ ID4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgcmV0Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwljb25u ID0gZHJtX2Nvbm5lY3Rvcl9sb29rdXAoZGlzcGxheS0+Y2xpZW50LT5kZXYsIE5VTEwsCj4gPiA+ ID4gPiArCQkJCSAgICBkaXNwbGF5LT5jb25uZWN0b3JzWzBdLT5jb25uX2lkKTsKPiA+ID4gPiA+ ICsJaWYgKCFjb25uKQo+ID4gPiA+ID4gKwkJcmV0dXJuIDA7Cj4gPiA+ID4gPiArCj4gPiA+ID4g PiArCWlmIChjb25uLT5jbWRsaW5lX21vZGUuYnBwX3NwZWNpZmllZCkKPiA+ID4gPiA+ICsJCXJl dCA9IGNvbm4tPmNtZGxpbmVfbW9kZS5icHA7Cj4gPiA+ID4gPiArCWVsc2UKPiA+ID4gPiA+ICsJ CXJldCA9IGRpc3BsYXktPmNsaWVudC0+ZGV2LT5tb2RlX2NvbmZpZy5wcmVmZXJyZWRfZGVwdGg7 Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWRybV9jb25uZWN0b3JfcHV0KGNvbm4pOwo+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gKwlyZXR1cm4gcmV0Owo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICtFWFBP UlRfU1lNQk9MKGRybV9jbGllbnRfZGlzcGxheV9wcmVmZXJyZWRfZGVwdGgpOwo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gK2ludCBkcm1fY2xpZW50X2Rpc3BsYXlfZHBtcyhzdHJ1Y3QgZHJtX2NsaWVu dF9kaXNwbGF5ICpkaXNwbGF5LCBpbnQgbW9kZSkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCXN0 cnVjdCBkcm1fbW9kZV9vYmpfc2V0X3Byb3BlcnR5IHByb3A7Cj4gPiA+ID4gPiArCj4gPiA+ID4g PiArCXByb3AudmFsdWUgPSBtb2RlOwo+ID4gPiA+ID4gKwlwcm9wLnByb3BfaWQgPSBkaXNwbGF5 LT5jbGllbnQtPmRldi0+bW9kZV9jb25maWcuZHBtc19wcm9wZXJ0eS0+YmFzZS5pZDsKPiA+ID4g PiA+ICsJcHJvcC5vYmpfaWQgPSBkaXNwbGF5LT5jb25uZWN0b3JzWzBdLT5jb25uX2lkOwo+ID4g PiA+ID4gKwlwcm9wLm9ial90eXBlID0gRFJNX01PREVfT0JKRUNUX0NPTk5FQ1RPUjsKPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICsJcmV0dXJuIGRybV9tb2RlX29ial9zZXRfcHJvcGVydHkoZGlzcGxh eS0+Y2xpZW50LT5kZXYsICZwcm9wLAo+ID4gPiA+ID4gKwkJCQkJIGRpc3BsYXktPmNsaWVudC0+ ZmlsZSk7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2NsaWVudF9k aXNwbGF5X2RwbXMpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK2ludCBkcm1fY2xpZW50X2Rpc3Bs YXlfd2FpdF92Ymxhbmsoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSkKPiA+ID4g PiA+ICt7Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiA+ID4gPiA+ICsJdW5p b24gZHJtX3dhaXRfdmJsYW5rIHZibGFua19yZXEgPSB7Cj4gPiA+ID4gPiArCQkucmVxdWVzdCA9 IHsKPiA+ID4gPiA+ICsJCQkudHlwZSA9IF9EUk1fVkJMQU5LX1JFTEFUSVZFLAo+ID4gPiA+ID4g KwkJCS5zZXF1ZW5jZSA9IDEsCj4gPiA+ID4gPiArCQl9LAo+ID4gPiA+ID4gKwl9Owo+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gKwljcnRjID0gZHJtX2NydGNfZmluZChkaXNwbGF5LT5jbGllbnQtPmRl diwgZGlzcGxheS0+Y2xpZW50LT5maWxlLAo+ID4gPiA+ID4gKwkJCSAgICAgZGlzcGxheS0+Y29u bmVjdG9yc1swXS0+Y3J0Y19pZCk7Cj4gPiA+ID4gPiArCWlmICghY3J0YykKPiA+ID4gPiA+ICsJ CXJldHVybiAtRU5PRU5UOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwl2YmxhbmtfcmVxLnJlcXVl c3QudHlwZSB8PSBkcm1fY3J0Y19pbmRleChjcnRjKSA8PCBfRFJNX1ZCTEFOS19ISUdIX0NSVENf U0hJRlQ7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXJldHVybiBkcm1fd2FpdF92YmxhbmsoZGlz cGxheS0+Y2xpZW50LT5kZXYsICZ2YmxhbmtfcmVxLAo+ID4gPiA+ID4gKwkJCSAgICAgICBkaXNw bGF5LT5jbGllbnQtPmZpbGUpOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICtFWFBPUlRfU1lNQk9M KGRybV9jbGllbnRfZGlzcGxheV93YWl0X3ZibGFuayk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAr c3RhdGljIGludCBkcm1fY2xpZW50X2dldF9jcnRjX2luZGV4KHN0cnVjdCBkcm1fY2xpZW50X2Rl diAqY2xpZW50LCB1MzIgaWQpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwlpbnQgaTsKPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICsJZm9yIChpID0gMDsgaSA8IGNsaWVudC0+bnVtX2NydGNzOyBpKysp Cj4gPiA+ID4gPiArCQlpZiAoY2xpZW50LT5jcnRjc1tpXSA9PSBpZCkKPiA+ID4gPiA+ICsJCQly ZXR1cm4gaTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0dXJuIC1FTk9FTlQ7Cj4gPiA+ID4g PiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0YXRpYyBpbnQgZHJtX2NsaWVudF9kaXNwbGF5 X2ZpbmRfY3J0Y3Moc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSkKPiA+ID4gPiA+ ICt7Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50ID0gZGlzcGxheS0+ Y2xpZW50Owo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2xpZW50LT5kZXY7 Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fZmlsZSAqZmlsZSA9IGNsaWVudC0+ZmlsZTsKPiA+ID4g PiA+ICsJdTMyIGVuY29kZXJfaWRzW0RSTV9DT05ORUNUT1JfTUFYX0VOQ09ERVJdOwo+ID4gPiA+ ID4gKwl1bnNpZ25lZCBpbnQgaSwgaiwgYXZhaWxhYmxlX2NydGNzID0gfjA7Cj4gPiA+ID4gPiAr CXN0cnVjdCBkcm1fbW9kZV9nZXRfY29ubmVjdG9yIGNvbm5fcmVxOwo+ID4gPiA+ID4gKwlzdHJ1 Y3QgZHJtX21vZGVfZ2V0X2VuY29kZXIgZW5jX3JlcTsKPiA+ID4gPiA+ICsJaW50IHJldDsKPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICsJLyogQWxyZWFkeSBkb25lPyAqLwo+ID4gPiA+ID4gKwlpZiAo ZGlzcGxheS0+Y29ubmVjdG9yc1swXS0+Y3J0Y19pZCkKPiA+ID4gPiA+ICsJCXJldHVybiAwOwo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+bnVtX2Nvbm5l Y3RvcnM7IGkrKykgewo+ID4gPiA+ID4gKwkJdTMyIGFjdGl2ZV9jcnRjcyA9IDAsIGNydGNzX2Zv cl9jb25uZWN0b3IgPSAwOwo+ID4gPiA+ID4gKwkJaW50IGNydGNfaWR4Owo+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gKwkJbWVtc2V0KCZjb25uX3JlcSwgMCwgc2l6ZW9mKGNvbm5fcmVxKSk7Cj4gPiA+ ID4gPiArCQljb25uX3JlcS5jb25uZWN0b3JfaWQgPSBkaXNwbGF5LT5jb25uZWN0b3JzW2ldLT5j b25uX2lkOwo+ID4gPiA+ID4gKwkJY29ubl9yZXEuZW5jb2RlcnNfcHRyID0gKHVuc2lnbmVkIGxv bmcpKGVuY29kZXJfaWRzKTsKPiA+ID4gPiA+ICsJCWNvbm5fcmVxLmNvdW50X2VuY29kZXJzID0g RFJNX0NPTk5FQ1RPUl9NQVhfRU5DT0RFUjsKPiA+ID4gPiA+ICsJCXJldCA9IGRybV9tb2RlX2dl dGNvbm5lY3RvcihkZXYsICZjb25uX3JlcSwgZmlsZSwgZmFsc2UpOwo+ID4gPiA+ID4gKwkJaWYg KHJldCkKPiA+ID4gPiA+ICsJCQlyZXR1cm4gcmV0Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkJ aWYgKGNvbm5fcmVxLmVuY29kZXJfaWQpIHsKPiA+ID4gPiA+ICsJCQltZW1zZXQoJmVuY19yZXEs IDAsIHNpemVvZihlbmNfcmVxKSk7Cj4gPiA+ID4gPiArCQkJZW5jX3JlcS5lbmNvZGVyX2lkID0g Y29ubl9yZXEuZW5jb2Rlcl9pZDsKPiA+ID4gPiA+ICsJCQlyZXQgPSBkcm1fbW9kZV9nZXRlbmNv ZGVyKGRldiwgJmVuY19yZXEsIGZpbGUpOwo+ID4gPiA+ID4gKwkJCWlmIChyZXQpCj4gPiA+ID4g PiArCQkJCXJldHVybiByZXQ7Cj4gPiA+ID4gPiArCQkJY3J0Y3NfZm9yX2Nvbm5lY3RvciB8PSBl bmNfcmVxLnBvc3NpYmxlX2NydGNzOwo+ID4gPiA+ID4gKwkJCWlmIChjcnRjc19mb3JfY29ubmVj dG9yICYgYXZhaWxhYmxlX2NydGNzKQo+ID4gPiA+ID4gKwkJCQlnb3RvIGZvdW5kOwo+ID4gPiA+ ID4gKwkJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkJZm9yIChqID0gMDsgaiA8IGNvbm5fcmVx LmNvdW50X2VuY29kZXJzOyBqKyspIHsKPiA+ID4gPiA+ICsJCQltZW1zZXQoJmVuY19yZXEsIDAs IHNpemVvZihlbmNfcmVxKSk7Cj4gPiA+ID4gPiArCQkJZW5jX3JlcS5lbmNvZGVyX2lkID0gZW5j b2Rlcl9pZHNbal07Cj4gPiA+ID4gPiArCQkJcmV0ID0gZHJtX21vZGVfZ2V0ZW5jb2RlcihkZXYs ICZlbmNfcmVxLCBmaWxlKTsKPiA+ID4gPiA+ICsJCQlpZiAocmV0KQo+ID4gPiA+ID4gKwkJCQly ZXR1cm4gcmV0Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkJCWNydGNzX2Zvcl9jb25uZWN0b3Ig fD0gZW5jX3JlcS5wb3NzaWJsZV9jcnRjczsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJCQlpZiAo ZW5jX3JlcS5jcnRjX2lkKSB7Cj4gPiA+ID4gPiArCQkJCWNydGNfaWR4ID0gZHJtX2NsaWVudF9n ZXRfY3J0Y19pbmRleChjbGllbnQsIGVuY19yZXEuY3J0Y19pZCk7Cj4gPiA+ID4gPiArCQkJCWlm IChjcnRjX2lkeCA+PSAwKQo+ID4gPiA+ID4gKwkJCQkJYWN0aXZlX2NydGNzIHw9IDEgPDwgY3J0 Y19pZHg7Cj4gPiA+ID4gPiArCQkJfQo+ID4gPiA+ID4gKwkJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ ID4gK2ZvdW5kOgo+ID4gPiA+ID4gKwkJY3J0Y3NfZm9yX2Nvbm5lY3RvciAmPSBhdmFpbGFibGVf Y3J0Y3M7Cj4gPiA+ID4gPiArCQlhY3RpdmVfY3J0Y3MgJj0gYXZhaWxhYmxlX2NydGNzOwo+ID4g PiA+ID4gKwo+ID4gPiA+ID4gKwkJaWYgKCFjcnRjc19mb3JfY29ubmVjdG9yKQo+ID4gPiA+ID4g KwkJCXJldHVybiAtRU5PRU5UOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkJaWYgKGFjdGl2ZV9j cnRjcykKPiA+ID4gPiA+ICsJCQljcnRjX2lkeCA9IGZmcyhhY3RpdmVfY3J0Y3MpIC0gMTsKPiA+ ID4gPiA+ICsJCWVsc2UKPiA+ID4gPiA+ICsJCQljcnRjX2lkeCA9IGZmcyhjcnRjc19mb3JfY29u bmVjdG9yKSAtIDE7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCQlpZiAoY3J0Y19pZHggPj0gY2xp ZW50LT5udW1fY3J0Y3MpCj4gPiA+ID4gPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gPiAr Cj4gPiA+ID4gPiArCQlkaXNwbGF5LT5jb25uZWN0b3JzW2ldLT5jcnRjX2lkID0gY2xpZW50LT5j cnRjc1tjcnRjX2lkeF07Cj4gPiA+ID4gPiArCQlhdmFpbGFibGVfY3J0Y3MgJj0gfkJJVChjcnRj X2lkeCk7Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0dXJuIDA7Cj4g PiA+ID4gPiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAqIGRybV9j bGllbnRfZGlzcGxheV9jb21taXRfbW9kZSAtIENvbW1pdCBhIG1vZGUgdG8gdGhlIGNydGMocykK PiA+ID4gPiA+ICsgKiBAZGlzcGxheTogQ2xpZW50IGRpc3BsYXkKPiA+ID4gPiA+ICsgKiBAZmJf aWQ6IEZyYW1lYnVmZmVyIGlkCj4gPiA+ID4gPiArICogQG1vZGU6IFZpZGVvIG1vZGUKPiA+ID4g PiA+ICsgKgo+ID4gPiA+ID4gKyAqIFJldHVybnM6Cj4gPiA+ID4gPiArICogWmVybyBvbiBzdWNj ZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gPiA+ID4gPiArICovCj4gPiA+ ID4gPiAraW50IGRybV9jbGllbnRfZGlzcGxheV9jb21taXRfbW9kZShzdHJ1Y3QgZHJtX2NsaWVu dF9kaXNwbGF5ICpkaXNwbGF5LAo+ID4gPiA+ID4gKwkJCQkgICB1MzIgZmJfaWQsIHN0cnVjdCBk cm1fbW9kZV9tb2RlaW5mbyAqbW9kZSkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCXN0cnVjdCBk cm1fY2xpZW50X2RldiAqY2xpZW50ID0gZGlzcGxheS0+Y2xpZW50Owo+ID4gPiA+ID4gKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gY2xpZW50LT5kZXY7Cj4gPiA+ID4gPiArCXVuc2lnbmVkIGlu dCBudW1fY3J0Y3MgPSBjbGllbnQtPm51bV9jcnRjczsKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9m aWxlICpmaWxlID0gY2xpZW50LT5maWxlOwo+ID4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgKnhvZmZz ZXRzID0gTlVMTCwgKnlvZmZzZXRzID0gTlVMTDsKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9tb2Rl X2NydGMgKmNydGNfcmVxcywgKnJlcTsKPiA+ID4gPiA+ICsJdTMyIGNsb25lZF9jb25uX2lkc1sy XTsKPiA+ID4gPiA+ICsJdW5zaWduZWQgaW50IGk7Cj4gPiA+ID4gPiArCWludCBpZHgsIHJldDsK PiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0ID0gZHJtX2NsaWVudF9kaXNwbGF5X2ZpbmRfY3J0 Y3MoZGlzcGxheSk7Cj4gPiA+ID4gPiArCWlmIChyZXQpCj4gPiA+ID4gPiArCQlyZXR1cm4gcmV0 Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwljcnRjX3JlcXMgPSBrY2FsbG9jKG51bV9jcnRjcywg c2l6ZW9mKCpjcnRjX3JlcXMpLCBHRlBfS0VSTkVMKTsKPiA+ID4gPiA+ICsJaWYgKCFjcnRjX3Jl cXMpCj4gPiA+ID4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJ Zm9yIChpID0gMDsgaSA8IG51bV9jcnRjczsgaSsrKQo+ID4gPiA+ID4gKwkJY3J0Y19yZXFzW2ld LmNydGNfaWQgPSBjbGllbnQtPmNydGNzW2ldOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlpZiAo ZHJtX2NsaWVudF9kaXNwbGF5X2lzX3RpbGVkKGRpc3BsYXkpKSB7Cj4gPiA+ID4gPiArCQkvKiBU T0RPIGNhbGN1bGF0ZSB0aWxlIGNydGMgb2Zmc2V0cyAqLwo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5udW1fY29ubmVjdG9yczsg aSsrKSB7Cj4gPiA+ID4gPiArCQlpZHggPSBkcm1fY2xpZW50X2dldF9jcnRjX2luZGV4KGNsaWVu dCwgZGlzcGxheS0+Y29ubmVjdG9yc1tpXS0+Y3J0Y19pZCk7Cj4gPiA+ID4gPiArCQlpZiAoaWR4 IDwgMCkKPiA+ID4gPiA+ICsJCQlyZXR1cm4gLUVOT0VOVDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ICsJCXJlcSA9ICZjcnRjX3JlcXNbaWR4XTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJCXJlcS0+ ZmJfaWQgPSBmYl9pZDsKPiA+ID4gPiA+ICsJCWlmICh4b2Zmc2V0cykgewo+ID4gPiA+ID4gKwkJ CXJlcS0+eCA9IHhvZmZzZXRzW2ldOwo+ID4gPiA+ID4gKwkJCXJlcS0+eSA9IHlvZmZzZXRzW2ld Owo+ID4gPiA+ID4gKwkJfQo+ID4gPiA+ID4gKwkJcmVxLT5tb2RlX3ZhbGlkID0gMTsKPiA+ID4g PiA+ICsJCXJlcS0+bW9kZSA9ICptb2RlOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkJaWYgKGRp c3BsYXktPmNsb25lZCkgewo+ID4gPiA+ID4gKwkJCWNsb25lZF9jb25uX2lkc1swXSA9IGRpc3Bs YXktPmNvbm5lY3RvcnNbMF0tPmNvbm5faWQ7Cj4gPiA+ID4gPiArCQkJY2xvbmVkX2Nvbm5faWRz WzFdID0gZGlzcGxheS0+Y29ubmVjdG9yc1sxXS0+Y29ubl9pZDsKPiA+ID4gPiA+ICsJCQlyZXEt PnNldF9jb25uZWN0b3JzX3B0ciA9ICh1bnNpZ25lZCBsb25nKShjbG9uZWRfY29ubl9pZHMpOwo+ ID4gPiA+ID4gKwkJCXJlcS0+Y291bnRfY29ubmVjdG9ycyA9IDI7Cj4gPiA+ID4gPiArCQkJYnJl YWs7Cj4gPiA+ID4gPiArCQl9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCQlyZXEtPnNldF9jb25u ZWN0b3JzX3B0ciA9ICh1bnNpZ25lZCBsb25nKSgmZGlzcGxheS0+Y29ubmVjdG9yc1tpXS0+Y29u bl9pZCk7Cj4gPiA+ID4gPiArCQlyZXEtPmNvdW50X2Nvbm5lY3RvcnMgPSAxOwo+ID4gPiA+ID4g Kwl9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBudW1fY3J0Y3M7IGkr Kykgewo+ID4gPiA+ID4gKwkJcmV0ID0gZHJtX21vZGVfc2V0Y3J0YyhkZXYsICZjcnRjX3JlcXNb aV0sIGZpbGUsIGZhbHNlKTsKPiA+ID4gPiA+ICsJCWlmIChyZXQpCj4gPiA+ID4gPiArCQkJYnJl YWs7Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJa2ZyZWUoeG9mZnNldHMp Owo+ID4gPiA+ID4gKwlrZnJlZSh5b2Zmc2V0cyk7Cj4gPiA+ID4gPiArCWtmcmVlKGNydGNfcmVx cyk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ID4gPiArfQo+ID4g PiA+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2NsaWVudF9kaXNwbGF5X2NvbW1pdF9tb2RlKTsKPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICt1bnNpZ25lZCBpbnQgZHJtX2NsaWVudF9kaXNwbGF5X2N1cnJl bnRfZmIoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSkKPiA+ID4gPiA+ICt7Cj4g PiA+ID4gPiArCXN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50ID0gZGlzcGxheS0+Y2xpZW50 Owo+ID4gPiA+ID4gKwlpbnQgcmV0Owo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX21vZGVfY3J0YyBj cnRjX3JlcSA9IHsKPiA+ID4gPiA+ICsJCS5jcnRjX2lkID0gZGlzcGxheS0+Y29ubmVjdG9yc1sw XS0+Y3J0Y19pZCwKPiA+ID4gPiA+ICsJfTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0ID0g ZHJtX21vZGVfZ2V0Y3J0YyhjbGllbnQtPmRldiwgJmNydGNfcmVxLCBjbGllbnQtPmZpbGUpOwo+ ID4gPiA+ID4gKwlpZiAocmV0KQo+ID4gPiA+ID4gKwkJcmV0dXJuIDA7Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiArCXJldHVybiBjcnRjX3JlcS5mYl9pZDsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiAr RVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X2Rpc3BsYXlfY3VycmVudF9mYik7Cj4gPiA+ID4gPiAr Cj4gPiA+ID4gPiAraW50IGRybV9jbGllbnRfZGlzcGxheV9mbHVzaChzdHJ1Y3QgZHJtX2NsaWVu dF9kaXNwbGF5ICpkaXNwbGF5LCB1MzIgZmJfaWQsCj4gPiA+ID4gPiArCQkJICAgICBzdHJ1Y3Qg ZHJtX2NsaXBfcmVjdCAqY2xpcHMsIHVuc2lnbmVkIGludCBudW1fY2xpcHMpCj4gPiA+ID4gPiAr ewo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCA9IGRpc3BsYXktPmNs aWVudDsKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9tb2RlX2ZiX2RpcnR5X2NtZCBkaXJ0eV9yZXEg PSB7Cj4gPiA+ID4gPiArCQkuZmJfaWQgPSBmYl9pZCwKPiA+ID4gPiA+ICsJCS5jbGlwc19wdHIg PSAodW5zaWduZWQgbG9uZyljbGlwcywKPiA+ID4gPiA+ICsJCS5udW1fY2xpcHMgPSBudW1fY2xp cHMsCj4gPiA+ID4gPiArCX07Cj4gPiA+ID4gPiArCWludCByZXQ7Cj4gPiA+ID4gPiArCj4gPiA+ ID4gPiArCWlmIChkaXNwbGF5LT5ub19mbHVzaGluZykKPiA+ID4gPiA+ICsJCXJldHVybiAwOwo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXQgPSBkcm1fbW9kZV9kaXJ0eWZiKGNsaWVudC0+ZGV2 LCAmZGlydHlfcmVxLCBjbGllbnQtPmZpbGUsIGZhbHNlKTsKPiA+ID4gPiA+ICsJaWYgKHJldCA9 PSAtRU5PU1lTKSB7Cj4gPiA+ID4gPiArCQlyZXQgPSAwOwo+ID4gPiA+ID4gKwkJZGlzcGxheS0+ bm9fZmx1c2hpbmcgPSB0cnVlOwo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAr CXJldHVybiByZXQ7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2Ns aWVudF9kaXNwbGF5X2ZsdXNoKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtpbnQgZHJtX2NsaWVu dF9kaXNwbGF5X3BhZ2VfZmxpcChzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5LCB1 MzIgZmJfaWQsCj4gPiA+ID4gPiArCQkJCSBib29sIGV2ZW50KQo+ID4gPiA+ID4gK3sKPiA+ID4g PiA+ICsJc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQgPSBkaXNwbGF5LT5jbGllbnQ7Cj4g PiA+ID4gPiArCXN0cnVjdCBkcm1fbW9kZV9jcnRjX3BhZ2VfZmxpcF90YXJnZXQgcGFnZV9mbGlw X3JlcSA9IHsKPiA+ID4gPiA+ICsJCS5jcnRjX2lkID0gZGlzcGxheS0+Y29ubmVjdG9yc1swXS0+ Y3J0Y19pZCwKPiA+ID4gPiA+ICsJCS5mYl9pZCA9IGZiX2lkLAo+ID4gPiA+ID4gKwl9Owo+ID4g PiA+ID4gKwo+ID4gPiA+ID4gKwlpZiAoZXZlbnQpCj4gPiA+ID4gPiArCQlwYWdlX2ZsaXBfcmVx LmZsYWdzID0gRFJNX01PREVfUEFHRV9GTElQX0VWRU5UOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4g KwlyZXR1cm4gZHJtX21vZGVfcGFnZV9mbGlwKGNsaWVudC0+ZGV2LCAmcGFnZV9mbGlwX3JlcSwg Y2xpZW50LT5maWxlKTsKPiA+ID4gPiA+ICsJLyoKPiA+ID4gPiA+ICsJICogVE9ETzoKPiA+ID4g PiA+ICsJICogV2hlcmUgZG8gd2UgZmx1c2ggb24gcGFnZSBmbGlwPyBTaG91bGQgdGhlIGRyaXZl ciBoYW5kbGUgdGhhdD8KPiA+ID4gPiA+ICsJICovCj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gK0VY UE9SVF9TWU1CT0woZHJtX2NsaWVudF9kaXNwbGF5X3BhZ2VfZmxpcCk7Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiArLyoqCj4gPiA+ID4gPiArICogZHJtX2NsaWVudF9mcmFtZWJ1ZmZlcl9jcmVhdGUg LSBDcmVhdGUgYSBjbGllbnQgZnJhbWVidWZmZXIKPiA+ID4gPiA+ICsgKiBAY2xpZW50OiBEUk0g Y2xpZW50Cj4gPiA+ID4gPiArICogQG1vZGU6IERpc3BsYXkgbW9kZSB0byBjcmVhdGUgYSBidWZm ZXIgZm9yCj4gPiA+ID4gPiArICogQGZvcm1hdDogQnVmZmVyIGZvcm1hdAo+ID4gPiA+ID4gKyAq Cj4gPiA+ID4gPiArICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgJmRybV9jbGllbnRfYnVmZmVy IHdoaWNoIGNvbnNpc3RzIG9mIGEKPiA+ID4gPiA+ICsgKiAmZHJtX2ZyYW1lYnVmZmVyIGJhY2tl ZCBieSBhIGR1bWIgYnVmZmVyLiBUaGUgZHVtYiBidWZmZXIgaXMgJmRtYV9idWYKPiA+ID4gPiA+ ICsgKiBleHBvcnRlZCB0byBhcXVpcmUgYSB2aXJ0dWFsIGFkZHJlc3Mgd2hpY2ggaXMgc3RvcmVk IGluCj4gPiA+ID4gPiArICogJmRybV9jbGllbnRfYnVmZmVyLT52YWRkci4KPiA+ID4gPiA+ICsg KiBDYWxsIGRybV9jbGllbnRfZnJhbWVidWZmZXJfZGVsZXRlKCkgdG8gZnJlZSB0aGUgYnVmZmVy Lgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogUmV0dXJuczoKPiA+ID4gPiA+ICsgKiBQb2lu dGVyIHRvIGEgY2xpZW50IGJ1ZmZlciBvciBhbiBlcnJvciBwb2ludGVyIG9uIGZhaWx1cmUuCj4g PiA+ID4gPiArICovCj4gPiA+ID4gPiArc3RydWN0IGRybV9jbGllbnRfYnVmZmVyICoKPiA+ID4g PiA+ICtkcm1fY2xpZW50X2ZyYW1lYnVmZmVyX2NyZWF0ZShzdHJ1Y3QgZHJtX2NsaWVudF9kZXYg KmNsaWVudCwKPiA+ID4gPiA+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKm1v ZGUsIHUzMiBmb3JtYXQpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2NsaWVu dF9idWZmZXIgKmJ1ZmZlcjsKPiA+ID4gPiA+ICsJaW50IHJldDsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICsJYnVmZmVyID0gZHJtX2NsaWVudF9idWZmZXJfY3JlYXRlKGNsaWVudCwgbW9kZS0+aGRp c3BsYXksCj4gPiA+ID4gPiArCQkJCQkgIG1vZGUtPnZkaXNwbGF5LCBmb3JtYXQpOwo+ID4gPiA+ ID4gKwlpZiAoSVNfRVJSKGJ1ZmZlcikpCj4gPiA+ID4gPiArCQlyZXR1cm4gYnVmZmVyOwo+ID4g PiA+ID4gKwo+ID4gPiA+ID4gKwlyZXQgPSBkcm1fY2xpZW50X2J1ZmZlcl9hZGRmYihidWZmZXIs IG1vZGUpOwo+ID4gPiA+ID4gKwlpZiAocmV0KSB7Cj4gPiA+ID4gPiArCQlkcm1fY2xpZW50X2J1 ZmZlcl9kZWxldGUoYnVmZmVyKTsKPiA+ID4gPiA+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4g PiA+ID4gPiArCX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0dXJuIGJ1ZmZlcjsKPiA+ID4g PiA+ICt9Cj4gPiA+ID4gPiArRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X2ZyYW1lYnVmZmVyX2Ny ZWF0ZSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArdm9pZCBkcm1fY2xpZW50X2ZyYW1lYnVmZmVy X2RlbGV0ZShzdHJ1Y3QgZHJtX2NsaWVudF9idWZmZXIgKmJ1ZmZlcikKPiA+ID4gPiA+ICt7Cj4g PiA+ID4gPiArCWRybV9jbGllbnRfYnVmZmVyX3JtZmIoYnVmZmVyKTsKPiA+ID4gPiA+ICsJZHJt X2NsaWVudF9idWZmZXJfZGVsZXRlKGJ1ZmZlcik7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gK0VY UE9SVF9TWU1CT0woZHJtX2NsaWVudF9mcmFtZWJ1ZmZlcl9kZWxldGUpOwo+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gK3N0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqCj4gPiA+ID4gPiArZHJtX2NsaWVu dF9idWZmZXJfY3JlYXRlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LCB1MzIgd2lkdGgs IHUzMiBoZWlnaHQsCj4gPiA+ID4gPiArCQkJIHUzMiBmb3JtYXQpCj4gPiA+ID4gPiArewo+ID4g PiA+ID4gKwlzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgZHVtYl9hcmdzID0geyAwIH07Cj4g PiA+ID4gPiArCXN0cnVjdCBkcm1fcHJpbWVfaGFuZGxlIHByaW1lX2FyZ3MgPSB7IDAgfTsKPiA+ ID4gPiA+ICsJc3RydWN0IGRybV9jbGllbnRfYnVmZmVyICpidWZmZXI7Cj4gPiA+ID4gPiArCXN0 cnVjdCBkbWFfYnVmICpkbWFfYnVmOwo+ID4gPiA+ID4gKwl2b2lkICp2YWRkcjsKPiA+ID4gPiA+ ICsJaW50IHJldDsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJYnVmZmVyID0ga3phbGxvYyhzaXpl b2YoKmJ1ZmZlciksIEdGUF9LRVJORUwpOwo+ID4gPiA+ID4gKwlpZiAoIWJ1ZmZlcikKPiA+ID4g PiA+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwly ZXQgPSBkcm1fY2xpZW50X2dldF9maWxlKGNsaWVudCk7Cj4gPiA+ID4gPiArCWlmIChyZXQpCj4g PiA+ID4gPiArCQlnb3RvIGVycl9mcmVlOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlidWZmZXIt PmNsaWVudCA9IGNsaWVudDsKPiA+ID4gPiA+ICsJYnVmZmVyLT53aWR0aCA9IHdpZHRoOwo+ID4g PiA+ID4gKwlidWZmZXItPmhlaWdodCA9IGhlaWdodDsKPiA+ID4gPiA+ICsJYnVmZmVyLT5mb3Jt YXQgPSBmb3JtYXQ7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWR1bWJfYXJncy53aWR0aCA9IGJ1 ZmZlci0+d2lkdGg7Cj4gPiA+ID4gPiArCWR1bWJfYXJncy5oZWlnaHQgPSBidWZmZXItPmhlaWdo dDsKPiA+ID4gPiA+ICsJZHVtYl9hcmdzLmJwcCA9IGRybV9mb3JtYXRfcGxhbmVfY3BwKGZvcm1h dCwgMCkgKiA4Owo+ID4gPiA+ID4gKwlyZXQgPSBkcm1fbW9kZV9jcmVhdGVfZHVtYihjbGllbnQt PmRldiwgJmR1bWJfYXJncywgY2xpZW50LT5maWxlKTsKPiA+ID4gPiA+ICsJaWYgKHJldCkKPiA+ ID4gPiA+ICsJCWdvdG8gZXJyX3B1dF9maWxlOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlidWZm ZXItPmhhbmRsZSA9IGR1bWJfYXJncy5oYW5kbGU7Cj4gPiA+ID4gPiArCWJ1ZmZlci0+cGl0Y2gg PSBkdW1iX2FyZ3MucGl0Y2g7Cj4gPiA+ID4gPiArCWJ1ZmZlci0+c2l6ZSA9IGR1bWJfYXJncy5z aXplOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlwcmltZV9hcmdzLmhhbmRsZSA9IGR1bWJfYXJn cy5oYW5kbGU7Cj4gPiA+ID4gPiArCXJldCA9IGRybV9wcmltZV9oYW5kbGVfdG9fZmQoY2xpZW50 LT5kZXYsICZwcmltZV9hcmdzLCBjbGllbnQtPmZpbGUpOwo+ID4gPiA+ID4gKwlpZiAocmV0KQo+ ID4gPiA+ID4gKwkJZ290byBlcnJfZGVsZXRlOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlkbWFf YnVmID0gZG1hX2J1Zl9nZXQocHJpbWVfYXJncy5mZCk7Cj4gPiA+ID4gPiArCWlmIChJU19FUlIo ZG1hX2J1ZikpIHsKPiA+ID4gPiA+ICsJCXJldCA9IFBUUl9FUlIoZG1hX2J1Zik7Cj4gPiA+ID4g PiArCQlnb3RvIGVycl9kZWxldGU7Cj4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ICsJYnVmZmVyLT5kbWFfYnVmID0gZG1hX2J1ZjsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJdmFk ZHIgPSBkbWFfYnVmX3ZtYXAoZG1hX2J1Zik7Cj4gPiA+ID4gPiArCWlmICghdmFkZHIpIHsKPiA+ ID4gPiA+ICsJCXJldCA9IC1FTk9NRU07Cj4gPiA+ID4gPiArCQlnb3RvIGVycl9kZWxldGU7Cj4g PiA+ID4gPiArCX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJYnVmZmVyLT52YWRkciA9IHZhZGRy Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXR1cm4gYnVmZmVyOwo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gK2Vycl9kZWxldGU6Cj4gPiA+ID4gPiArCWRybV9jbGllbnRfYnVmZmVyX2RlbGV0ZShi dWZmZXIpOwo+ID4gPiA+ID4gK2Vycl9wdXRfZmlsZToKPiA+ID4gPiA+ICsJZHJtX2NsaWVudF9w dXRfZmlsZShjbGllbnQpOwo+ID4gPiA+ID4gK2Vycl9mcmVlOgo+ID4gPiA+ID4gKwlrZnJlZShi dWZmZXIpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ID4g PiA+ID4gK30KPiA+ID4gPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9jbGllbnRfYnVmZmVyX2NyZWF0 ZSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArdm9pZCBkcm1fY2xpZW50X2J1ZmZlcl9kZWxldGUo c3RydWN0IGRybV9jbGllbnRfYnVmZmVyICpidWZmZXIpCj4gPiA+ID4gPiArewo+ID4gPiA+ID4g KwlpZiAoIWJ1ZmZlcikKPiA+ID4gPiA+ICsJCXJldHVybjsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ICsJaWYgKGJ1ZmZlci0+dmFkZHIpCj4gPiA+ID4gPiArCQlkbWFfYnVmX3Z1bm1hcChidWZmZXIt PmRtYV9idWYsIGJ1ZmZlci0+dmFkZHIpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlpZiAoYnVm ZmVyLT5kbWFfYnVmKQo+ID4gPiA+ID4gKwkJZG1hX2J1Zl9wdXQoYnVmZmVyLT5kbWFfYnVmKTsK PiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJZHJtX21vZGVfZGVzdHJveV9kdW1iKGJ1ZmZlci0+Y2xp ZW50LT5kZXYsIGJ1ZmZlci0+aGFuZGxlLAo+ID4gPiA+ID4gKwkJCSAgICAgIGJ1ZmZlci0+Y2xp ZW50LT5maWxlKTsKPiA+ID4gPiA+ICsJZHJtX2NsaWVudF9wdXRfZmlsZShidWZmZXItPmNsaWVu dCk7Cj4gPiA+ID4gPiArCWtmcmVlKGJ1ZmZlcik7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gK0VY UE9SVF9TWU1CT0woZHJtX2NsaWVudF9idWZmZXJfZGVsZXRlKTsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICtpbnQgZHJtX2NsaWVudF9idWZmZXJfYWRkZmIoc3RydWN0IGRybV9jbGllbnRfYnVmZmVy ICpidWZmZXIsCj4gPiA+ID4gPiArCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyAqbW9k ZSkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50 ID0gYnVmZmVyLT5jbGllbnQ7Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyIGZi X3JlcSA9IHsgfTsKPiA+ID4gPiA+ICsJdW5zaWduZWQgaW50IG51bV9mYnMsICpmYl9pZHM7Cj4g PiA+ID4gPiArCWludCBpLCByZXQ7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWlmIChidWZmZXIt Pm51bV9mYnMpCj4gPiA+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICsJaWYgKG1vZGUtPmhkaXNwbGF5ID4gYnVmZmVyLT53aWR0aCB8fCBtb2RlLT52ZGlzcGxh eSA+IGJ1ZmZlci0+aGVpZ2h0KQo+ID4gPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiArCW51bV9mYnMgPSBidWZmZXItPmhlaWdodCAvIG1vZGUtPnZkaXNwbGF5 Owo+ID4gPiA+ID4gKwlmYl9pZHMgPSBrY2FsbG9jKG51bV9mYnMsIHNpemVvZigqZmJfaWRzKSwg R0ZQX0tFUk5FTCk7Cj4gPiA+ID4gPiArCWlmICghZmJfaWRzKQo+ID4gPiA+ID4gKwkJcmV0dXJu IC1FTk9NRU07Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWZiX3JlcS53aWR0aCA9IG1vZGUtPmhk aXNwbGF5Owo+ID4gPiA+ID4gKwlmYl9yZXEuaGVpZ2h0ID0gbW9kZS0+dmRpc3BsYXk7Cj4gPiA+ ID4gPiArCWZiX3JlcS5waXhlbF9mb3JtYXQgPSBidWZmZXItPmZvcm1hdDsKPiA+ID4gPiA+ICsJ ZmJfcmVxLmhhbmRsZXNbMF0gPSBidWZmZXItPmhhbmRsZTsKPiA+ID4gPiA+ICsJZmJfcmVxLnBp dGNoZXNbMF0gPSBidWZmZXItPnBpdGNoOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlmb3IgKGkg PSAwOyBpIDwgbnVtX2ZiczsgaSsrKSB7Cj4gPiA+ID4gPiArCQlmYl9yZXEub2Zmc2V0c1swXSA9 IGkgKiBtb2RlLT52ZGlzcGxheSAqIGJ1ZmZlci0+cGl0Y2g7Cj4gPiA+ID4gPiArCQlyZXQgPSBk cm1fbW9kZV9hZGRmYjIoY2xpZW50LT5kZXYsICZmYl9yZXEsIGNsaWVudC0+ZmlsZSwKPiA+ID4g PiA+ICsJCQkJICAgICAgY2xpZW50LT5mdW5jcy0+bmFtZSk7Cj4gPiA+ID4gPiArCQlpZiAocmV0 KQo+ID4gPiA+ID4gKwkJCWdvdG8gZXJyX3JlbW92ZTsKPiA+ID4gPiA+ICsJCWZiX2lkc1tpXSA9 IGZiX3JlcS5mYl9pZDsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlidWZm ZXItPmZiX2lkcyA9IGZiX2lkczsKPiA+ID4gPiA+ICsJYnVmZmVyLT5udW1fZmJzID0gbnVtX2Zi czsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ID4gPiArCj4gPiA+ID4g PiArZXJyX3JlbW92ZToKPiA+ID4gPiA+ICsJZm9yIChpLS07IGkgPj0gMDsgaS0tKQo+ID4gPiA+ ID4gKwkJZHJtX21vZGVfcm1mYihjbGllbnQtPmRldiwgZmJfaWRzW2ldLCBjbGllbnQtPmZpbGUp Owo+ID4gPiA+ID4gKwlrZnJlZShmYl9pZHMpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXR1 cm4gcmV0Owo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICtFWFBPUlRfU1lNQk9MKGRybV9jbGllbnRf YnVmZmVyX2FkZGZiKTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtpbnQgZHJtX2NsaWVudF9idWZm ZXJfcm1mYihzdHJ1Y3QgZHJtX2NsaWVudF9idWZmZXIgKmJ1ZmZlcikKPiA+ID4gPiA+ICt7Cj4g PiA+ID4gPiArCXVuc2lnbmVkIGludCBpOwo+ID4gPiA+ID4gKwlpbnQgcmV0Owo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gKwlpZiAoIWJ1ZmZlciB8fCAhYnVmZmVyLT5udW1fZmJzKQo+ID4gPiA+ID4g KwkJcmV0dXJuIDA7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWZvciAoaSA9IDA7IGkgPCBidWZm ZXItPm51bV9mYnM7IGkrKykgewo+ID4gPiA+ID4gKwkJcmV0ID0gZHJtX21vZGVfcm1mYihidWZm ZXItPmNsaWVudC0+ZGV2LCBidWZmZXItPmZiX2lkc1tpXSwKPiA+ID4gPiA+ICsJCQkJICAgIGJ1 ZmZlci0+Y2xpZW50LT5maWxlKTsKPiA+ID4gPiA+ICsJCWlmIChyZXQpCj4gPiA+ID4gPiArCQkJ RFJNX0RFVl9FUlJPUihidWZmZXItPmNsaWVudC0+ZGV2LT5kZXYsCj4gPiA+ID4gPiArCQkJCSAg ICAgICJFcnJvciByZW1vdmluZyBGQjoldSAoJWQpXG4iLAo+ID4gPiA+ID4gKwkJCQkgICAgICBi dWZmZXItPmZiX2lkc1tpXSwgcmV0KTsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ ID4gKwlrZnJlZShidWZmZXItPmZiX2lkcyk7Cj4gPiA+ID4gPiArCWJ1ZmZlci0+ZmJfaWRzID0g TlVMTDsKPiA+ID4gPiA+ICsJYnVmZmVyLT5udW1fZmJzID0gMDsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICsJcmV0dXJuIDA7Cj4gPiA+ID4gPiArfQo+ID4gPiA+ID4gK0VYUE9SVF9TWU1CT0woZHJt X2NsaWVudF9idWZmZXJfcm1mYik7Cj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKPiA+ID4gPiA+IGluZGV4 IGY4NjlkZTE4NTk4Ni4uZGIxNjEzMzdkODdjIDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2RybV9kcnYuYwo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9k cnYuYwo+ID4gPiA+ID4gQEAgLTMzLDYgKzMzLDcgQEAKPiA+ID4gPiA+ICAgICNpbmNsdWRlIDxs aW51eC9tb3VudC5oPgo+ID4gPiA+ID4gICAgI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiA+ID4g PiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9jbGllbnQuaD4KPiA+ID4gPiA+ICAgICNpbmNsdWRlIDxk cm0vZHJtX2Rydi5oPgo+ID4gPiA+ID4gICAgI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gPiA+ID4g PiBAQCAtNDYzLDYgKzQ2NCw3IEBAIGludCBkcm1fZGV2X2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKPiA+ID4gPiA+ICAgIAlkZXYtPmRyaXZlciA9IGRyaXZlcjsKPiA+ID4gPiA+ICAgIAlJ TklUX0xJU1RfSEVBRCgmZGV2LT5maWxlbGlzdCk7Cj4gPiA+ID4gPiArCUlOSVRfTElTVF9IRUFE KCZkZXYtPmZpbGVsaXN0X2ludGVybmFsKTsKPiA+ID4gPiA+ICAgIAlJTklUX0xJU1RfSEVBRCgm ZGV2LT5jdHhsaXN0KTsKPiA+ID4gPiA+ICAgIAlJTklUX0xJU1RfSEVBRCgmZGV2LT52bWFsaXN0 KTsKPiA+ID4gPiA+ICAgIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5tYXBsaXN0KTsKPiA+ID4gPiA+ IEBAIC03ODcsNiArNzg5LDggQEAgaW50IGRybV9kZXZfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKPiA+ID4gPiA+ICAgIAkJIGRldi0+ZGV2ID8g ZGV2X25hbWUoZGV2LT5kZXYpIDogInZpcnR1YWwgZGV2aWNlIiwKPiA+ID4gPiA+ICAgIAkJIGRl di0+cHJpbWFyeS0+aW5kZXgpOwo+ID4gPiA+ID4gKwlkcm1fY2xpZW50X2Rldl9yZWdpc3Rlcihk ZXYpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gICAgCWdvdG8gb3V0X3VubG9jazsKPiA+ID4gPiA+ ICAgIGVycl9taW5vcnM6Cj4gPiA+ID4gPiBAQCAtODM5LDYgKzg0Myw4IEBAIHZvaWQgZHJtX2Rl dl91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPiA+ID4gPiAgICAJZHJtX21p bm9yX3VucmVnaXN0ZXIoZGV2LCBEUk1fTUlOT1JfUFJJTUFSWSk7Cj4gPiA+ID4gPiAgICAJZHJt X21pbm9yX3VucmVnaXN0ZXIoZGV2LCBEUk1fTUlOT1JfUkVOREVSKTsKPiA+ID4gPiA+ICAgIAlk cm1fbWlub3JfdW5yZWdpc3RlcihkZXYsIERSTV9NSU5PUl9DT05UUk9MKTsKPiA+ID4gPiA+ICsK PiA+ID4gPiA+ICsJZHJtX2NsaWVudF9kZXZfdW5yZWdpc3RlcihkZXYpOwo+ID4gPiA+ID4gICAg fQo+ID4gPiA+ID4gICAgRVhQT1JUX1NZTUJPTChkcm1fZGV2X3VucmVnaXN0ZXIpOwo+ID4gPiA+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmlsZS5jIGIvZHJpdmVycy9ncHUv ZHJtL2RybV9maWxlLmMKPiA+ID4gPiA+IGluZGV4IDU1NTA1Mzc4ZGY0Ny4uYmNjNjg4ZTU4Nzc2 IDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9maWxlLmMKPiA+ID4g PiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmlsZS5jCj4gPiA+ID4gPiBAQCAtMzUsNiAr MzUsNyBAQAo+ID4gPiA+ID4gICAgI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiA+ID4gPiA+ICAg ICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiA+ID4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9j bGllbnQuaD4KPiA+ID4gPiA+ICAgICNpbmNsdWRlIDxkcm0vZHJtX2ZpbGUuaD4KPiA+ID4gPiA+ ICAgICNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ID4gPiA+ID4gQEAgLTQ0Myw2ICs0NDQsOCBAQCB2 b2lkIGRybV9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCj4gPiA+ID4gPiAgICAJ aWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTEVHQUNZKSkKPiA+ID4gPiA+ ICAgIAkJZHJtX2xlZ2FjeV9kZXZfcmVpbml0KGRldik7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAr CWRybV9jbGllbnRfZGV2X2xhc3RjbG9zZShkZXYpOwo+ID4gPiA+ID4gICAgfQo+ID4gPiA+ID4g ICAgLyoqCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9iZV9o ZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYmVfaGVscGVyLmMKPiA+ID4gPiA+IGlu ZGV4IDJkMTY0M2JkYWU3OC4uNWQyYTZjNjcxN2Y1IDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2RybV9wcm9iZV9oZWxwZXIuYwo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2RybV9wcm9iZV9oZWxwZXIuYwo+ID4gPiA+ID4gQEAgLTMzLDYgKzMzLDcgQEAKPiA+ ID4gPiA+ICAgICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgo+ID4gPiA+ID4gICAgI2lu Y2x1ZGUgPGRybS9kcm1QLmg+Cj4gPiA+ID4gPiArI2luY2x1ZGUgPGRybS9kcm1fY2xpZW50Lmg+ Cj4gPiA+ID4gPiAgICAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gPiA+ID4gPiAgICAjaW5j bHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KPiA+ID4gPiA+ICAgICNpbmNsdWRlIDxkcm0vZHJtX2Ny dGNfaGVscGVyLmg+Cj4gPiA+ID4gPiBAQCAtNTYzLDYgKzU2NCw4IEBAIHZvaWQgZHJtX2ttc19o ZWxwZXJfaG90cGx1Z19ldmVudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4gPiA+ID4gICAg CWRybV9zeXNmc19ob3RwbHVnX2V2ZW50KGRldik7Cj4gPiA+ID4gPiAgICAJaWYgKGRldi0+bW9k ZV9jb25maWcuZnVuY3MtPm91dHB1dF9wb2xsX2NoYW5nZWQpCj4gPiA+ID4gPiAgICAJCWRldi0+ bW9kZV9jb25maWcuZnVuY3MtPm91dHB1dF9wb2xsX2NoYW5nZWQoZGV2KTsKPiA+ID4gPiA+ICsK PiA+ID4gPiA+ICsJZHJtX2NsaWVudF9kZXZfaG90cGx1ZyhkZXYpOwo+ID4gPiA+ID4gICAgfQo+ ID4gPiA+ID4gICAgRVhQT1JUX1NZTUJPTChkcm1fa21zX2hlbHBlcl9ob3RwbHVnX2V2ZW50KTsK PiA+ID4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY2xpZW50LmggYi9pbmNsdWRl L2RybS9kcm1fY2xpZW50LmgKPiA+ID4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiA+ID4g PiBpbmRleCAwMDAwMDAwMDAwMDAuLjg4ZjZmODc5MTljNQo+ID4gPiA+ID4gLS0tIC9kZXYvbnVs bAo+ID4gPiA+ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2NsaWVudC5oCj4gPiA+ID4gPiBAQCAt MCwwICsxLDE5MiBAQAo+ID4gPiA+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wICovCj4gPiA+ID4gPiArCj4gPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4g PiA+ID4gPiArCj4gPiA+ID4gPiArc3RydWN0IGRtYV9idWY7Cj4gPiA+ID4gPiArc3RydWN0IGRy bV9jbGlwX3JlY3Q7Cj4gPiA+ID4gPiArc3RydWN0IGRybV9kZXZpY2U7Cj4gPiA+ID4gPiArc3Ry dWN0IGRybV9maWxlOwo+ID4gPiA+ID4gK3N0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbzsKPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICtzdHJ1Y3QgZHJtX2NsaWVudF9kZXY7Cj4gPiA+ID4gPiArCj4gPiA+ ID4gPiArLyoqCj4gPiA+ID4gPiArICogc3RydWN0IGRybV9jbGllbnRfZnVuY3MgLSBEUk0gY2xp ZW50ICBjYWxsYmFja3MKPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICtzdHJ1Y3QgZHJtX2NsaWVu dF9mdW5jcyB7Cj4gPiA+ID4gPiArCS8qKgo+ID4gPiA+ID4gKwkgKiBAbmFtZToKPiA+ID4gPiA+ ICsJICoKPiA+ID4gPiA+ICsJICogTmFtZSBvZiB0aGUgY2xpZW50Lgo+ID4gPiA+ID4gKwkgKi8K PiA+ID4gPiA+ICsJY29uc3QgY2hhciAqbmFtZTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJLyoq Cj4gPiA+ID4gPiArCSAqIEBuZXc6Cj4gPiA+ID4gPiArCSAqCj4gPiA+ID4gPiArCSAqIENhbGxl ZCB3aGVuIGEgY2xpZW50IG9yIGEgJmRybV9kZXZpY2UgaXMgcmVnaXN0ZXJlZC4KPiA+ID4gPiA+ ICsJICogSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgYW55dGhpbmcgYnV0IHplcm8sIHRoZW4gdGhp cyBjbGllbnQgaW5zdGFuY2UKPiA+ID4gPiA+ICsJICogaXMgZHJvcHBlZC4KPiA+ID4gPiA+ICsJ ICoKPiA+ID4gPiA+ICsJICogVGhpcyBjYWxsYmFjayBpcyBtYW5kYXRvcnkuCj4gPiA+ID4gPiAr CSAqLwo+ID4gPiA+ID4gKwlpbnQgKCpuZXcpKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50 KTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJLyoqCj4gPiA+ID4gPiArCSAqIEByZW1vdmU6Cj4g PiA+ID4gPiArCSAqCj4gPiA+ID4gPiArCSAqIENhbGxlZCB3aGVuIGEgJmRybV9kZXZpY2UgaXMg dW5yZWdpc3RlcmVkIG9yIHRoZSBjbGllbnQgaXMKPiA+ID4gPiA+ICsJICogdW5yZWdpc3RlcmVk LiBJZiB6ZXJvIGlzIHJldHVybmVkIGRybV9jbGllbnRfZnJlZSgpIGlzIGNhbGxlZAo+ID4gPiA+ ID4gKwkgKiBhdXRvbWF0aWNhbGx5LiBJZiB0aGUgY2xpZW50IGNhbid0IGRyb3AgaXQncyByZXNv dXJjZXMgaXQgc2hvdWxkCj4gPiA+ID4gPiArCSAqIHJldHVybiBub24temVybyBhbmQgY2FsbCBk cm1fY2xpZW50X2ZyZWUoKSBsYXRlci4KPiA+ID4gPiA+ICsJICoKPiA+ID4gPiA+ICsJICogVGhp cyBjYWxsYmFjayBpcyBvcHRpb25hbC4KPiA+ID4gPiA+ICsJICovCj4gPiA+ID4gPiArCWludCAo KnJlbW92ZSkoc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQpOwo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gKwkvKioKPiA+ID4gPiA+ICsJICogQGxhc3RjbG9zZToKPiA+ID4gPiA+ICsJICoKPiA+ ID4gPiA+ICsJICogQ2FsbGVkIG9uIGRybV9sYXN0Y2xvc2UoKS4gVGhlIGZpcnN0IGNsaWVudCBp bnN0YW5jZSBpbiB0aGUgbGlzdAo+ID4gPiA+ID4gKwkgKiB0aGF0IHJldHVybnMgemVybyBnZXRz IHRoZSBwcml2aWxlZ2UgdG8gcmVzdG9yZSBhbmQgbm8gbW9yZSBjbGllbnRzCj4gPiA+ID4gPiAr CSAqIGFyZSBjYWxsZWQuCj4gPiA+ID4gPiArCSAqCj4gPiA+ID4gPiArCSAqIFRoaXMgY2FsbGJh Y2sgaXMgb3B0aW9uYWwuCj4gPiA+ID4gPiArCSAqLwo+ID4gPiA+ID4gKwlpbnQgKCpsYXN0Y2xv c2UpKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ICsJLyoqCj4gPiA+ID4gPiArCSAqIEBob3RwbHVnOgo+ID4gPiA+ID4gKwkgKgo+ID4gPiA+ID4g KwkgKiBDYWxsZWQgb24gZHJtX2ttc19oZWxwZXJfaG90cGx1Z19ldmVudCgpLgo+ID4gPiA+ID4g KwkgKgo+ID4gPiA+ID4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLgo+ID4gPiA+ID4g KwkgKi8KPiA+ID4gPiA+ICsJaW50ICgqaG90cGx1Zykoc3RydWN0IGRybV9jbGllbnRfZGV2ICpj bGllbnQpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKy8vIFRPRE8KPiA+ID4gPiA+ICsvLwl2b2lk ICgqc3VzcGVuZCkoc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQpOwo+ID4gPiA+ID4gKy8v CXZvaWQgKCpyZXN1bWUpKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KTsKPiA+ID4gPiA+ ICt9Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4gKyAqIHN0cnVjdCBkcm1f Y2xpZW50X2RldiAtIERSTSBjbGllbnQgaW5zdGFuY2UKPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ ICtzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgewo+ID4gPiA+ID4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGxp c3Q7Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Cj4gPiA+ID4gPiArCWNvbnN0 IHN0cnVjdCBkcm1fY2xpZW50X2Z1bmNzICpmdW5jczsKPiA+ID4gPiA+ICsJc3RydWN0IG11dGV4 IGxvY2s7Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fZmlsZSAqZmlsZTsKPiA+ID4gPiA+ICsJdW5z aWduZWQgaW50IGZpbGVfcmVmX2NvdW50Owo+ID4gPiA+ID4gKwl1MzIgKmNydGNzOwo+ID4gPiA+ ID4gKwl1bnNpZ25lZCBpbnQgbnVtX2NydGNzOwo+ID4gPiA+ID4gKwl1MzIgbWluX3dpZHRoOwo+ ID4gPiA+ID4gKwl1MzIgbWF4X3dpZHRoOwo+ID4gPiA+ID4gKwl1MzIgbWluX2hlaWdodDsKPiA+ ID4gPiA+ICsJdTMyIG1heF9oZWlnaHQ7Cj4gPiA+ID4gPiArCXZvaWQgKnByaXZhdGU7Cj4gPiA+ ID4gPiArfTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICt2b2lkIGRybV9jbGllbnRfZnJlZShzdHJ1 Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCk7Cj4gPiA+ID4gPiAraW50IGRybV9jbGllbnRfcmVn aXN0ZXIoY29uc3Qgc3RydWN0IGRybV9jbGllbnRfZnVuY3MgKmZ1bmNzKTsKPiA+ID4gPiA+ICt2 b2lkIGRybV9jbGllbnRfdW5yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZHJtX2NsaWVudF9mdW5jcyAq ZnVuY3MpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3ZvaWQgZHJtX2NsaWVudF9kZXZfcmVnaXN0 ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gPiA+ID4gPiArdm9pZCBkcm1fY2xpZW50X2Rl dl91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ID4gPiA+ID4gK3ZvaWQgZHJt X2NsaWVudF9kZXZfaG90cGx1ZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiA+ID4gPiA+ICt2 b2lkIGRybV9jbGllbnRfZGV2X2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICtpbnQgZHJtX2NsaWVudF9nZXRfZmlsZShzdHJ1Y3QgZHJtX2Ns aWVudF9kZXYgKmNsaWVudCk7Cj4gPiA+ID4gPiArdm9pZCBkcm1fY2xpZW50X3B1dF9maWxlKHN0 cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KTsKPiA+ID4gPiA+ICtzdHJ1Y3QgZHJtX2V2ZW50 ICoKPiA+ID4gPiA+ICtkcm1fY2xpZW50X3JlYWRfZXZlbnQoc3RydWN0IGRybV9jbGllbnRfZGV2 ICpjbGllbnQsIGJvb2wgYmxvY2spOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0cnVjdCBkcm1f Y2xpZW50X2Nvbm5lY3RvciB7Cj4gPiA+ID4gPiArCXVuc2lnbmVkIGludCBjb25uX2lkOwo+ID4g PiA+ID4gKwl1bnNpZ25lZCBpbnQgc3RhdHVzOwo+ID4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgY3J0 Y19pZDsKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9tb2RlX21vZGVpbmZvICptb2RlczsKPiA+ID4g PiA+ICsJdW5zaWduZWQgaW50IG51bV9tb2RlczsKPiA+ID4gPiA+ICsJYm9vbCBoYXNfdGlsZTsK PiA+ID4gPiA+ICsJaW50IHRpbGVfZ3JvdXA7Cj4gPiA+ID4gPiArCXU4IHRpbGVfaF9sb2MsIHRp bGVfdl9sb2M7Cj4gPiA+ID4gPiArfTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdHJ1Y3QgZHJt X2NsaWVudF9kaXNwbGF5IHsKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGll bnQ7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fY2xpZW50X2Nvbm5lY3RvciAq KmNvbm5lY3RvcnM7Cj4gPiA+ID4gPiArCXVuc2lnbmVkIGludCBudW1fY29ubmVjdG9yczsKPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICsJc3RydWN0IG11dGV4IG1vZGVzX2xvY2s7Cj4gPiA+ID4gPiAr CXN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyAqbW9kZXM7Cj4gPiA+ID4gPiArCXVuc2lnbmVkIGlu dCBudW1fbW9kZXM7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWJvb2wgY2xvbmVkOwo+ID4gPiA+ ID4gKwlib29sIG5vX2ZsdXNoaW5nOwo+ID4gPiA+ID4gK307Cj4gPiA+ID4gPiArCj4gPiA+ID4g PiArdm9pZCBkcm1fY2xpZW50X2Rpc3BsYXlfZnJlZShzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5 ICpkaXNwbGF5KTsKPiA+ID4gPiA+ICtzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICoKPiA+ID4g PiA+ICtkcm1fY2xpZW50X2Rpc3BsYXlfZ2V0X2ZpcnN0X2VuYWJsZWQoc3RydWN0IGRybV9jbGll bnRfZGV2ICpjbGllbnQsIGJvb2wgc3RyaWN0KTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtpbnQg ZHJtX2NsaWVudF9kaXNwbGF5X3VwZGF0ZV9tb2RlcyhzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5 ICpkaXNwbGF5LAo+ID4gPiA+ID4gKwkJCQkgICAgYm9vbCAqbW9kZV9jaGFuZ2VkKTsKPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICtzdGF0aWMgaW5saW5lIGJvb2wKPiA+ID4gPiA+ICtkcm1fY2xpZW50 X2Rpc3BsYXlfaXNfdGlsZWQoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSkKPiA+ ID4gPiA+ICt7Cj4gPiA+ID4gPiArCXJldHVybiAhZGlzcGxheS0+Y2xvbmVkICYmIGRpc3BsYXkt Pm51bV9jb25uZWN0b3JzID4gMTsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAr aW50IGRybV9jbGllbnRfZGlzcGxheV9kcG1zKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRp c3BsYXksIGludCBtb2RlKTsKPiA+ID4gPiA+ICtpbnQgZHJtX2NsaWVudF9kaXNwbGF5X3dhaXRf dmJsYW5rKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXkpOwo+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gK3N0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyAqCj4gPiA+ID4gPiArZHJtX2NsaWVu dF9kaXNwbGF5X2ZpcnN0X21vZGUoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSk7 Cj4gPiA+ID4gPiArc3RydWN0IGRybV9tb2RlX21vZGVpbmZvICoKPiA+ID4gPiA+ICtkcm1fY2xp ZW50X2Rpc3BsYXlfbmV4dF9tb2RlKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXks Cj4gPiA+ID4gPiArCQkJICAgICBzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKm1vZGUpOwo+ID4g PiA+ID4gKwo+ID4gPiA+ID4gKyNkZWZpbmUgZHJtX2NsaWVudF9kaXNwbGF5X2Zvcl9lYWNoX21v ZGUoZGlzcGxheSwgbW9kZSkgXAo+ID4gPiA+ID4gKwlmb3IgKG1vZGUgPSBkcm1fY2xpZW50X2Rp c3BsYXlfZmlyc3RfbW9kZShkaXNwbGF5KTsgbW9kZTsgXAo+ID4gPiA+ID4gKwkgICAgIG1vZGUg PSBkcm1fY2xpZW50X2Rpc3BsYXlfbmV4dF9tb2RlKGRpc3BsYXksIG1vZGUpKQo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gK3Vuc2lnbmVkIGludAo+ID4gPiA+ID4gK2RybV9jbGllbnRfZGlzcGxheV9w cmVmZXJyZWRfZGVwdGgoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSk7Cj4gPiA+ ID4gPiArCj4gPiA+ID4gPiAraW50IGRybV9jbGllbnRfZGlzcGxheV9jb21taXRfbW9kZShzdHJ1 Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5LAo+ID4gPiA+ID4gKwkJCQkgICB1MzIgZmJf aWQsIHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyAqbW9kZSk7Cj4gPiA+ID4gPiArdW5zaWduZWQg aW50IGRybV9jbGllbnRfZGlzcGxheV9jdXJyZW50X2ZiKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3Bs YXkgKmRpc3BsYXkpOwo+ID4gPiA+ID4gK2ludCBkcm1fY2xpZW50X2Rpc3BsYXlfZmx1c2goc3Ry dWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSwgdTMyIGZiX2lkLAo+ID4gPiA+ID4gKwkJ CSAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXBzLCB1bnNpZ25lZCBpbnQgbnVtX2NsaXBz KTsKPiA+ID4gPiA+ICtpbnQgZHJtX2NsaWVudF9kaXNwbGF5X3BhZ2VfZmxpcChzdHJ1Y3QgZHJt X2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5LCB1MzIgZmJfaWQsCj4gPiA+ID4gPiArCQkJCSBib29s IGV2ZW50KTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdHJ1Y3QgZHJtX2NsaWVudF9idWZmZXIg ewo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudDsKPiA+ID4gPiA+ICsJ dTMyIHdpZHRoOwo+ID4gPiA+ID4gKwl1MzIgaGVpZ2h0Owo+ID4gPiA+ID4gKwl1MzIgZm9ybWF0 Owo+ID4gPiA+ID4gKwl1MzIgaGFuZGxlOwo+ID4gPiA+ID4gKwl1MzIgcGl0Y2g7Cj4gPiA+ID4g PiArCXU2NCBzaXplOwo+ID4gPiA+ID4gKwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZjsKPiA+ID4g PiA+ICsJdm9pZCAqdmFkZHI7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXVuc2lnbmVkIGludCAq ZmJfaWRzOwo+ID4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgbnVtX2ZiczsKPiA+ID4gPiA+ICt9Owo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gK3N0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqCj4gPiA+ID4g PiArZHJtX2NsaWVudF9mcmFtZWJ1ZmZlcl9jcmVhdGUoc3RydWN0IGRybV9jbGllbnRfZGV2ICpj bGllbnQsCj4gPiA+ID4gPiArCQkJICAgICAgc3RydWN0IGRybV9tb2RlX21vZGVpbmZvICptb2Rl LCB1MzIgZm9ybWF0KTsKPiA+ID4gPiA+ICt2b2lkIGRybV9jbGllbnRfZnJhbWVidWZmZXJfZGVs ZXRlKHN0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqYnVmZmVyKTsKPiA+ID4gPiA+ICtzdHJ1Y3Qg ZHJtX2NsaWVudF9idWZmZXIgKgo+ID4gPiA+ID4gK2RybV9jbGllbnRfYnVmZmVyX2NyZWF0ZShz dHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0LAo+ID4g PiA+ID4gKwkJCSB1MzIgZm9ybWF0KTsKPiA+ID4gPiA+ICt2b2lkIGRybV9jbGllbnRfYnVmZmVy X2RlbGV0ZShzdHJ1Y3QgZHJtX2NsaWVudF9idWZmZXIgKmJ1ZmZlcik7Cj4gPiA+ID4gPiAraW50 IGRybV9jbGllbnRfYnVmZmVyX2FkZGZiKHN0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqYnVmZmVy LAo+ID4gPiA+ID4gKwkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKm1vZGUpOwo+ID4g PiA+ID4gK2ludCBkcm1fY2xpZW50X2J1ZmZlcl9ybWZiKHN0cnVjdCBkcm1fY2xpZW50X2J1ZmZl ciAqYnVmZmVyKTsKPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZGV2aWNl LmggYi9pbmNsdWRlL2RybS9kcm1fZGV2aWNlLmgKPiA+ID4gPiA+IGluZGV4IDdjNGZhMzJmM2Zj Ni4uMzJkZmVkM2Q1YTg2IDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2Rl dmljZS5oCj4gPiA+ID4gPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZGV2aWNlLmgKPiA+ID4gPiA+ IEBAIC02Nyw2ICs2Nyw3IEBAIHN0cnVjdCBkcm1fZGV2aWNlIHsKPiA+ID4gPiA+ICAgIAlzdHJ1 Y3QgbXV0ZXggZmlsZWxpc3RfbXV0ZXg7Cj4gPiA+ID4gPiAgICAJc3RydWN0IGxpc3RfaGVhZCBm aWxlbGlzdDsKPiA+ID4gPiA+ICsJc3RydWN0IGxpc3RfaGVhZCBmaWxlbGlzdF9pbnRlcm5hbDsK PiA+ID4gPiA+ICAgIAkvKiogXG5hbWUgTWVtb3J5IG1hbmFnZW1lbnQgKi8KPiA+ID4gPiA+ICAg IAkvKkB7ICovCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2ZpbGUuaCBi L2luY2x1ZGUvZHJtL2RybV9maWxlLmgKPiA+ID4gPiA+IGluZGV4IDUxNzZjMzc5NzY4MC4uMzlh ZjhhNGJlN2IzIDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2ZpbGUuaAo+ ID4gPiA+ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2ZpbGUuaAo+ID4gPiA+ID4gQEAgLTI0OCw2 ICsyNDgsMTMgQEAgc3RydWN0IGRybV9maWxlIHsKPiA+ID4gPiA+ICAgIAkgKi8KPiA+ID4gPiA+ ICAgIAl2b2lkICpkcml2ZXJfcHJpdjsKPiA+ID4gPiA+ICsJLyoqCj4gPiA+ID4gPiArCSAqIEB1 c2VyX3ByaXY6Cj4gPiA+ID4gPiArCSAqCj4gPiA+ID4gPiArCSAqIE9wdGlvbmFsIHBvaW50ZXIg Zm9yIHVzZXIgcHJpdmF0ZSBkYXRhLiBVc2VmdWwgZm9yIGluLWtlcm5lbCBjbGllbnRzLgo+ID4g PiA+ID4gKwkgKi8KPiA+ID4gPiA+ICsJdm9pZCAqdXNlcl9wcml2Owo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gICAgCS8qKgo+ID4gPiA+ID4gICAgCSAqIEBmYnM6Cj4gPiA+ID4gPiAgICAJICoKPiA+ ID4gPiA+IC0tIAo+ID4gPiA+ID4gMi4xNS4xCj4gPiA+ID4gPiAKPiAKCi0tIApEYW5pZWwgVmV0 dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZnds bC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK