From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v6 3/6] drm/dp_mst: Start tracking per-port VCPI allocations Date: Wed, 28 Nov 2018 09:17:08 +0100 Message-ID: <20181128081708.GG4266@phenom.ffwll.local> References: <20181116005008.7243-1-lyude@redhat.com> <20181116005008.7243-4-lyude@redhat.com> <20181126210421.GQ4266@phenom.ffwll.local> <20181126212250.GS4266@phenom.ffwll.local> <8fe9a5708b2cafc74635688848ee082e54f739d5.camel@redhat.com> <20181127194452.GE4266@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: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Lyude Paul Cc: nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBOb3YgMjcsIDIwMTggYXQgMDg6NDQ6MTRQTSAtMDUwMCwgTHl1ZGUgUGF1bCB3cm90 ZToKPiBPbiBUdWUsIDIwMTgtMTEtMjcgYXQgMjA6NDQgKzAxMDAsIERhbmllbCBWZXR0ZXIgd3Jv dGU6Cj4gPiBPbiBUdWUsIE5vdiAyNywgMjAxOCBhdCAxMjo0ODo1OVBNIC0wNTAwLCBMeXVkZSBQ YXVsIHdyb3RlOgo+ID4gPiBPbiBNb24sIDIwMTgtMTEtMjYgYXQgMjI6MjIgKzAxMDAsIERhbmll bCBWZXR0ZXIgd3JvdGU6Cj4gPiA+ID4gT24gTW9uLCBOb3YgMjYsIDIwMTggYXQgMTA6MDQ6MjFQ TSArMDEwMCwgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+ID4gPiA+IE9uIFRodSwgTm92IDE1LCAy MDE4IGF0IDA3OjUwOjA1UE0gLTA1MDAsIEx5dWRlIFBhdWwgd3JvdGU6Cj4gPiA+ID4gPiA+IFRo ZXJlIGhhcyBiZWVuIGEgVE9ETyB3YWl0aW5nIGZvciBxdWl0ZSBhIGxvbmcgdGltZSBpbgo+ID4g PiA+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5LmM6Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IAkv KiBXZSBjYW5ub3QgcmVseSBvbiBwb3J0LT52Y3BpLm51bV9zbG90cyB0byB1cGRhdGUKPiA+ID4g PiA+ID4gCSAqIHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyBhcyB0aGUgcG9ydCBtYXkgbm90 IGV4aXN0IGlmCj4gPiA+ID4gPiA+IHRoZSBwYXJlbnQKPiA+ID4gPiA+ID4gCSAqIGJyYW5jaCBk ZXZpY2Ugd2FzIHVucGx1Z2dlZC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnkKPiA+ID4gPiA+ID4g dHJhY2tpbmcKPiA+ID4gPiA+ID4gCSAqIHBlci1wb3J0IHNsb3QgYWxsb2NhdGlvbiBpbiBkcm1f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlCj4gPiA+ID4gPiA+IGluc3RlYWQgb2YKPiA+ID4gPiA+ID4g CSAqIGRlcGVuZGluZyBvbiB0aGUgY2FsbGVyIHRvIHRlbGwgdXMgaG93IG1hbnkgc2xvdHMgdG8K PiA+ID4gPiA+ID4gcmVsZWFzZS4KPiA+ID4gPiA+ID4gCSAqLwo+ID4gPiA+ID4gPgo+ID4gPiA+ ID4gPiBUaGF0J3Mgbm90IHRoZSBvbmx5IHJlYXNvbiB3ZSBzaG91bGQgZml4IHRoaXM6IGZvcmNp bmcgdGhlIGRyaXZlciB0bwo+ID4gPiA+ID4gPiB0cmFjayB0aGUgVkNQSSBhbGxvY2F0aW9ucyB0 aHJvdWdob3V0IGEgc3RhdGUncyBhdG9taWMgY2hlY2sgaXMKPiA+ID4gPiA+ID4gZXJyb3IgcHJv bmUsIGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBleHRyYSBjYXJlIGhhcyB0byBiZSB0YWtlbiB3aXRo Cj4gPiA+ID4gPiA+IHRoZQo+ID4gPiA+ID4gPiBvcmRlciB0aGF0IGRybV9kcF9hdG9taWNfZmlu ZF92Y3BpX3Nsb3RzKCkgYW5kCj4gPiA+ID4gPiA+IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3Bp X3Nsb3RzKCkgYXJlIGNhbGxlZCBpbiBpbiBvcmRlciB0byBlbnN1cmUKPiA+ID4gPiA+ID4gaWRl bXBvdGVuY3kuIEN1cnJlbnRseSB0aGUgb25seSBkcml2ZXIgYWN0dWFsbHkgdXNpbmcgdGhlc2Ug aGVscGVycywKPiA+ID4gPiA+ID4gaTkxNSwgZG9lc24ndCBldmVuIGRvIHRoaXMgY29ycmVjdGx5 OiBtdWx0aXBsZSAtPmJlc3RfZW5jb2RlcigpCj4gPiA+ID4gPiA+IGNoZWNrcwo+ID4gPiA+ID4g PiB3aXRoIGk5MTUncyBjdXJyZW50IGltcGxlbWVudGF0aW9uIHdvdWxkIG5vdCBiZSBpZGVtcG90 ZW50IGFuZCB3b3VsZAo+ID4gPiA+ID4gPiBvdmVyLWFsbG9jYXRlIFZDUEkgc2xvdHMsIHNvbWV0 aGluZyBJIGxlYXJuZWQgdHJ5aW5nIHRvIGltcGxlbWVudAo+ID4gPiA+ID4gPiBmYWxsYmFjayBy ZXRyYWluaW5nIGluIE1TVC4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gU286IHNpbXBsaWZ5IHRo aXMgd2hvbGUgbWVzcywgYW5kIHRlYWNoCj4gPiA+ID4gPiA+IGRybV9kcF9hdG9taWNfZmluZF92 Y3BpX3Nsb3RzKCkKPiA+ID4gPiA+ID4gYW5kIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Ns b3RzKCkgdG8gdHJhY2sgdGhlIFZDUEkgYWxsb2NhdGlvbnMKPiA+ID4gPiA+ID4gZm9yCj4gPiA+ ID4gPiA+IGVhY2ggcG9ydC4gVGhpcyBhbGxvd3MgdXMgdG8gZW5zdXJlIGlkZW1wb3RlbmN5IHdp dGhvdXQgaGF2aW5nIHRvCj4gPiA+ID4gPiA+IHJlbHkKPiA+ID4gPiA+ID4gb24gdGhlIGRyaXZl ciBhcyBtdWNoLiBBZGRpdGlvbmFsbHk6IHRoZSBkcml2ZXIgZG9lc24ndCBuZWVkIHRvIGRvCj4g PiA+ID4gPiA+IGFueQo+ID4gPiA+ID4gPiBraW5kIG9mIFZDUEkgc2xvdCB0cmFja2luZyBhbnlt b3JlIGlmIGl0IGRvZXNuJ3QgbmVlZCBpdCBmb3IgaXQncwo+ID4gPiA+ID4gPiBvd24KPiA+ID4g PiA+ID4gaW50ZXJuYWwgc3RhdGUuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IEFkZGl0aW9uYWxs eTsgdGhpcyBhZGRzIGEgbmV3IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkgaGVscGVyIHdoaWNo Cj4gPiA+ID4gPiA+IG11c3QgYmUgdXNlZCBieSBhdG9taWMgZHJpdmVycyB0byBwZXJmb3JtIHZh bGlkaXR5IGNoZWNrcyBmb3IgdGhlCj4gPiA+ID4gPiA+IG5ldwo+ID4gPiA+ID4gPiBWQ1BJIGFs bG9jYXRpb25zIGluY3VycmVkIGJ5IGEgc3RhdGUuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IEFs c286IHVwZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgbWFrZSBpdCBtb3JlIG9idmlvdXMgdGhh dCB0aGVzZQo+ID4gPiA+ID4gPiAvbXVzdC8gYmUgY2FsbGVkIGJ5IC9hbGwvIGF0b21pYyBkcml2 ZXJzIHN1cHBvcnRpbmcgTVNULgo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBDaGFuZ2VzIHNpbmNl IHY2Ogo+ID4gPiA+ID4gPiAgLSBLZWVwIGEga3JlZiB0byBhbGwgb2YgdGhlIHBvcnRzIHdlIGhh dmUgYWxsb2NhdGlvbnMgb24uIFRoaXMKPiA+ID4gPiA+ID4gcmVxdWlyZWQKPiA+ID4gPiA+ID4g ICAgYSBnb29kIGJpdCBvZiBjaGFuZ2luZyB0byB3aGVuIHdlIGNhbGwgZHJtX2RwX2ZpbmRfdmNw aV9zbG90cygpLAo+ID4gPiA+ID4gPiAgICBtYWlubHkgdGhhdCB3ZSBuZWVkIHRvIGVuc3VyZSB0 aGF0IHdlIG9ubHkgcmVkbyBWQ1BJIGFsbG9jYXRpb25zCj4gPiA+ID4gPiA+IG9uCj4gPiA+ID4g PiA+ICAgIGFjdHVhbCBtb2RlIG9yIENSVEMgY2hhbmdlcywgbm90IGNydGNfc3RhdGUtPmFjdGl2 ZSBjaGFuZ2VzLgo+ID4gPiA+ID4gPiAgICBBZGRpdGlvbmFsbHksIHdlIG5vIGxvbmdlciB0YWtl IHRoZSByZWdpc3RyYXRpb24gb2YgdGhlIERSTQo+ID4gPiA+ID4gPiBjb25uZWN0b3IKPiA+ID4g PiA+ID4gICAgZm9yIGVhY2ggcG9ydCBpbnRvIGFjY291bnQgYmVjYXVzZSBzbyBsb25nIGFzIHdl IGhhdmUgYSBrcmVmIHRvCj4gPiA+ID4gPiA+IHRoZQo+ID4gPiA+ID4gPiAgICBwb3J0IGluIHRo ZSBuZXcgb3IgcHJldmlvdXMgYXRvbWljIHN0YXRlLCB0aGUgY29ubmVjdG9yIHdpbGwgc3RheQo+ ID4gPiA+ID4gPiAgICByZWdpc3RlcmVkLgo+ID4gPiA+ID4KPiA+ID4gPiA+IEkgd3JpdGUgYW4g ZW50aXJlIHBpbGUgb2Ygc21hbGwgbml0cGl0cyAoc3RpbGwgaW5jbHVkZWQgbW9zdCBvZiB0aGVt Cj4gPiA+ID4gPiBiZWxvdyksIHVudGlsIEkgcmVhbGl6ZWQgdGhpcyBoZXJlIHdvbnQgd29yay4g RGVsYXlpbmcgdGhlIGNhbGwgdG8KPiA+ID4gPiA+IGRlc3Ryb3kKPiA+ID4gPiA+IHRoZSBjb25u ZWN0b3IgKHdlbGwsIHVucmVnaXN0ZXIgaXQgcmVhbGx5KSB3cmVha3MgdGhlIGRlc2lnbiB3ZSd2 ZQo+ID4gPiA+ID4gY29tZSB1cAo+ID4gPiA+ID4gd2l0aCB0aHVzIGZhciwgcmVzdWx0aW5nIGlu IG1vc3Qgb2YgbXkgY29tbWVudHMgaGVyZS4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBJbnN0ZWFkLCBh bGwgd2UgbmVlZCB0byBkbyBpcyBkZWxheSB0aGUga2ZyZWUocG9ydCkgYXQgdGhlIGJvdHRvbSBv Zgo+ID4gPiA+ID4gZHJtX2RwX2Rlc3Ryb3lfcG9ydCgpLiBUaGUgdmNwaSBhbGxvY2F0aW9uIHN0 cnVjdHVyZSBfb25seV8gbmVlZHMgdGhlCj4gPiA+ID4gPiBwb2ludGVyIHZhbHVlIHRvIHN0YXkg dmFsaWQsIGFzIGEgbG9va3VwIGtleS4gSXQgZG9lc24ndCBjYXJlIGF0IGFsbAo+ID4gPiA+ID4g YWJvdXQKPiA+ID4gPiA+IGFueXRoaW5nIGFjdHVhbGx5IHN0b3JlZCBpbiB0aGVyZS4gU28gdGhl IG9ubHkgdGhpbmcgd2UgbmVlZCB0byBkZWxheQo+ID4gPiA+ID4gaXMKPiA+ID4gPiA+IHRoZSBr ZnJlZS4gSSB0aGluayB0aGUgc2ltcGxlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBhZGQg YSAybmQKPiA+ID4gPiA+IGtyZWYKPiA+ID4gPiA+IChwb3J0LT5rZnJlZV9yZWYgb3Igc29tZXRo aW5nIGxpa2UgdGhhdCksIHdpdGggb24gcmVmZXJlbmNlIGhlbGQgYnkKPiA+ID4gPiA+IHRoZQo+ ID4gPiA+ID4gcG9ydCBpdHNlbGYgKHJlbGVhc2VkIGluIGRybV9kcF9kZXN0cm95X3BvcnQpLCBh bmQgdGhlIG90aGVyIG9uZSBoZWxkCj4gPiA+ID4gPiBhcy1uZWVkZWQgYnkgdGhlIHZjcGkgYWxs b2NhdGlvbiBsaXN0cy4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBJIHRoaW5rIGlmIHdlIGdvIHdpdGgg dGhpcyBkZXNpZ24gaW5zdGVhZCBvZiByZXRyb2ZpdHRpbmcgYSBzZW1hbnRpYwo+ID4gPiA+ID4g Y2hhbmdlIG9mIHRoZSBwb3J0IGxpZmV0aW1lIGl0c2VsZiwgYWxsIHRoZSBjb21wbGljYXRpb25z IEkgY29tcGxhaW4KPiA+ID4gPiA+IGFib3V0Cj4gPiA+ID4gPiBiZWxvdyBzaG91bGQgZGlzYXBw ZWFyLgo+ID4gPiA+Cj4gPiA+ID4gSW4gdGhlIGFib3ZlIEkgbWVhbnQgZHJtX2RwX2Rlc3Ryb3lf cG9ydCBvcgo+ID4gPiA+IGRybV9kcF9kZXN0cm95X2Nvbm5lY3Rvcl93b3JrLgo+ID4gPiA+Cj4g PiA+ID4gQXNpZGU6IEkgdGhpbmsgY3JlYXRpbmcgYSBrcmVmIGZvciB0aGUgZmluYWwga2ZyZWUg d291bGQgYWxzbyBzb2x2ZSBhCj4gPiA+ID4gYnVuY2ggb2Ygb3RoZXIgaXNzdWVzIGluIGEgbXVj aCBuZWF0ZXIgd2F5OiBJbgo+ID4gPiA+Cj4gPiA+ID4gY29tbWl0IGYwMzhjNWI5OWZjMTMzMmY1 NThiNDk1ZDEzNmQ0ZjQzM2VlNjVjYWEKPiA+ID4gPiBBdXRob3I6IEx5dWRlIFBhdWwgPGx5dWRl QHJlZGhhdC5jb20+Cj4gPiA+ID4gRGF0ZTogICBUdWUgTm92IDEzIDE3OjQ2OjE0IDIwMTggLTA1 MDAKPiA+ID4gPgo+ID4gPiA+ICAgICBkcm0vZHBfbXN0OiBTa2lwIHZhbGlkYXRpbmcgcG9ydHMg ZHVyaW5nIGRlc3RydWN0aW9uLCBqdXN0IHJlZgo+ID4gPiA+Cj4gPiA+ID4gd2UgY291bGQgdXNl IHRoYXQga2ZyZWUgcmVmZXJlbmNlIHRvIG1ha2Ugc3VyZSB0aGUgcG9ydCBwb2ludGVyIGlzCj4g PiA+ID4gYWxpdmUuCj4gPiA+ID4gVGhpcyBvZiBjb3Vyc2UgbWVhbnMgdGhhdCBkcm1fZHBfdXBk YXRlX3BheWxvYWRfcGFydDEoKSB3b3VsZCBhbHNvIG5lZWQKPiA+ID4gPiB0bwo+ID4gPiA+IHVz ZSB0aGUga2ZyZWUgcmVmZXJlbmNlIGZvciB0aGUgdmNwaSBhbGxvY2F0aW9ucy4gQW5kIHByb2Jh Ymx5Cj4gPiA+ID4gZXZlcnl3aGVyZQo+ID4gPiA+IGVsc2UgKGUuZy4gaW4geW91ciBub3V2ZWF1 IHNlcmllcyBmb3IgcGF5bG9hZCBpbmZvcm1hdGlvbikuCj4gPiA+ID4KPiA+ID4gPiBUaGF0IHdv dWxkIGdpdmUgdXMgYSB2ZXJ5IGNsZWFyIHNlcGFyYXRpb24gb3ZlcmFsbCBiZXR3ZWVuICJwb3J0 IGNhbgo+ID4gPiA+IHN0aWxsCj4gPiA+ID4gYmUgdXNlZCBiZWNhdXNlIGl0J3Mgbm90IHlldCB1 bnBsdWdnZWQiIHZzLiAicG9ydCBvbmx5IGhhbmdzIGFyb3VuZAo+ID4gPiA+IGJlY2F1c2UgYSBi dW5jaCBvZiB2Y3BpIGFsbG9jYXRpb25zIGFuZCBvdGhlciBwYXlsb2FkIHRoaW5ncyB1cHN0cmVh bSBvZgo+ID4gPiA+IHRoZSBwb3J0IG1pZ2h0IHN0aWxsIG5lZWQgdGhlIHBvcnQgbG9va3VwIGtl eSB0byBmcmVlIHJlc291cmNlcyIuCj4gPiA+ID4gSW5zdGVhZAo+ID4gPiA+IG9mIGFnYWluIHNw cmlua2xpbmcgY29tcGxpY2F0ZWQgY29uZGl0aW9ucyBhbmQgbWFnaWMgdHJpY2tzIGFsbCBvdmVy IHRoZQo+ID4gPiA+IGNvZGUgdG8gZmlndXJlIG91dCB3aGV0aGUgd2Ugc2hvdWxkIGFsbG93IHRo ZSBnZXRfdmFsaWRhdGVfcG9ydCB0bwo+ID4gPiA+IHN1Y2NlZWQKPiA+ID4gPiBvciBub3QsIG9y IHRoZSBtb2Rlc2V0IHRvIHN1Y2NlZWQgb3Igbm90Lgo+ID4gPgo+ID4gPiBtaG0sIEkndmUgYmVl biBleHBlcmltZW50aW5nIHdpdGggdGhpcyBhbmQgSSB0aGluayBJIGFncmVlIHRoaXMgaXMKPiA+ ID4gZGVmaW5pdGVseQo+ID4gPiB0aGUgcmlnaHQgc29sdXRpb24gdG8gZ28gd2l0aC4gSXQnbGwg ZW5kIHVwIGRlY29tcGxpY2F0aW5nIGEgbG90IG9mIHRoaXMKPiA+ID4gOikKPiA+Cj4gPiBTaW5j ZSBpdCBsb29rcyBsaWtlIHdlJ2xsIHVzZSB0aGUga2ZyZWVfcmVmIHF1aXRlIGEgYml0LCB3cmFw cGVycyBmb3IgdGhhdAo+ID4gd291bGQgYmUgdXNlZnVsLiBTdGlsbCBub3Qgc3VyZSB3aGF0IHRv IGNhbGwgdGhvc2UsIGJlc3QgSSBjb3VsZCBjb21lIHVwCj4gPiB3aXRoIGlzIGRwX3BvcnRfbWFs bG9jX2dldC9wdXQuIFBsdXMgYSBjb21tZW50IGV4cGxhaW5pbmcgd2hhdCBpdCBkb2VzLgo+ID4g SXQncyBnb2luZyB0byBiZSBhIGJpdCBvZiB3dGYtaXMtdGhpcyBubyBtYXR0ZXIgd2hhdCA6LS8K PiA+IC1EYW5pZWwKPiAKPiBXZSBjb3VsZCBkbyB0aGlzIHRoZSBvdGhlciB3YXkgYXJvdW5kIHNv IGl0IGxvb2tzIGxpa2UgdGhpcyBtYXliZQo+IAo+IHN0cnVjdCBrcmVmOyAvKiBtYW5hZ2VzIGtm cmVlKCkgKi8KPiBzdHJ1Y3QgdG9wb2xvZ3lfa3JlZjsgLyogY29ycmVzb25kcyB0byBsaWZldGlt ZSBpbiB0b3BvbG9neSAqLwo+IAo+IFRoZW4gb25seSBleHBvc2UgZnVuY3Rpb25zIGZvciB0aGUg bm9ybWFsIGtyZWYgdG8gZHJpdmVycywgc28gdGhhdCBhbnkKPiBwb3NzaWJsZSBjb25mdXNpb24g aXMgc3RpbGwgbGltaXRlZCB0byBkcm1fZHBfbXN0X3RvcG9sb2d5LmMKCkkgbGlrZSB0aGlzIGJp a2VzaGVkIGEgbG90LiBTaW5jZSB3ZSBuZWVkIGEgYnVuY2ggb2YgdGhlIHBsYWluCmtyZWZfZ2V0 L3B1dCBpbnRlcm5hbGx5LCBwcm9iYWJseSBzdGlsbCBnb29kIHRvIGhhdmUgYSB3cmFwcGVyLiBG b3IgdGhhdAp0aGUgcG9ydF9tYWxsb2NfZ2V0L3B1dCgpIHN0aWxsIHNvdW5kcyBnb29kIHRvIG1l IC0gcG9ydF9rZnJlZV9nZXQvcHV0CnNvdW5kcyBjb25mdXNpbmcsIHNpbmNlIGl0J3Mgbm90IHRo ZSBrZnJlZSB3ZSdyZSByZWZjb3VudGluZywgYnV0IHRoZQptZW1vcnkgYWxsb2NhdGlvbi4KCkFu b3RoZXIgb3B0aW9uIHdvdWxkIGJlIHRvIGFkZCBfdG9wb2xvZ3kgdG8gdGhlIHB1YmxpYyBnZXQv cHV0IGZ1bmN0aW9ucywKYnV0IHRoYXQgbWFrZXMgZm9yIGEgZmFpcmx5IGxvbmcgZnVuY3Rpb24g bmFtZSA6LS8KLURhbmllbAoKPiAKPiA+Cj4gPiA+ID4gLURhbmllbAo+ID4gPiA+Cj4gPiA+ID4g PiBQaWxlcyBvZiBjb21tZW50cyBiZWxvdy4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBDaGVlcnMsIERh bmllbAo+ID4gPiA+ID4KPiA+ID4gPiA+ID4gIC0gVXNlIHRoZSBzbWFsbCBjaGFuZ2VzIHRvIGRy bV9kcF9wdXRfcG9ydCgpIHRvIGFkZCBldmVuIG1vcmUgZXJyb3IKPiA+ID4gPiA+ID4gICAgY2hl Y2tpbmcgdG8gbWFrZSBtaXN1c2FnZSBvZiB0aGUgaGVscGVycyBtb3JlIG9idmlvdXMuIEkgYWRk ZWQKPiA+ID4gPiA+ID4gdGhpcwo+ID4gPiA+ID4gPiAgICBhZnRlciBoYXZpbmcgdG8gY2hhc2Ug ZG93biB2YXJpb3VzIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgdGhhdAo+ID4gPiA+ID4gPiAg ICBzdGFydGVkIHBvcHBpbmcgdXAgZnJvbSB0aGUgbmV3IGhlbHBlcnMgc28gbm8gb25lIGVsc2Ug aGFzIHRvCj4gPiA+ID4gPiA+ICAgIHRyb3VibGVzaG9vdCB0aGF0Lgo+ID4gPiA+ID4gPiAgLSBN b3ZlIHNvbWUgYWNjaWRlbnRhbCBEUk1fREVCVUdfS01TKCkgY2FsbHMgdG8gRFJNX0RFQlVHX0FU T01JQygpCj4gPiA+ID4gPiA+ICAtIFVwZGF0ZSBkb2N1bWVudGF0aW9uIGFnYWluLCBub3RlIHRo YXQgZmluZC9yZWxlYXNlKCkgc2hvdWxkIGJvdGgKPiA+ID4gPiA+ID4gbm90Cj4gPiA+ID4gPiA+ IGJlCj4gPiA+ID4gPiA+ICAgIGNhbGxlZCBvbiB0aGUgc2FtZSBwb3J0IGluIGEgc2luZ2xlIGF0 b21pYyBjaGVjayBwaGFzZSAoYnV0Cj4gPiA+ID4gPiA+IG11bHRpcGxlCj4gPiA+ID4gPiA+ICAg IGNhbGxzIHRvIG9uZSBvciB0aGUgb3RoZXIgaXMgT0spCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ IENoYW5nZXMgc2luY2UgdjQ6Cj4gPiA+ID4gPiA+ICAtIERvbid0IHNraXAgdGhlIGF0b21pYyBj aGVja3MgZm9yIFZDUEkgYWxsb2NhdGlvbnMgaWYgbm8gbmV3IFZDUEkKPiA+ID4gPiA+ID4gICAg YWxsb2NhdGlvbnMgaGFwcGVuIGluIGEgc3RhdGUuIFRoaXMgbWFrZXMgdGhlIG5leHQgY2hhbmdl IEknbQo+ID4gPiA+ID4gPiBhYm91dAo+ID4gPiA+ID4gPiAgICB0byBsaXN0IGhlcmUgYSBsb3Qg ZWFzaWVyIHRvIGltcGxlbWVudC4KPiA+ID4gPiA+ID4gIC0gRG9uJ3QgaWdub3JlIFZDUEkgYWxs b2NhdGlvbnMgb24gZGVzdHJveWVkIHBvcnRzLCBpbnN0ZWFkIGVuc3VyZQo+ID4gPiA+ID4gPiB0 aGF0Cj4gPiA+ID4gPiA+ICAgIHdoZW4gcG9ydHMgYXJlIGRlc3Ryb3llZCBhbmQgc3RpbGwgaGF2 ZSBWQ1BJIGFsbG9jYXRpb25zIGluIHRoZQo+ID4gPiA+ID4gPiAgICB0b3BvbG9neSBzdGF0ZSwg dGhlIG9ubHkgc3RhdGUgY2hhbmdlcyBhbGxvd2VkIGFyZSByZWxlYXNpbmcgc2FpZAo+ID4gPiA+ ID4gPiAgICBwb3J0cycgVkNQSS4gVGhpcyBwcmV2ZW50cyBhIHN0YXRlIHdpdGggYSBtaXggb2Yg VkNQSSBhbGxvY2F0aW9ucwo+ID4gPiA+ID4gPiAgICBmcm9tIGRlc3Ryb3llZCBwb3J0cywgYW5k IGFsbG9jYXRpb25zIGZyb20gdmFsaWQgcG9ydHMuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IENo YW5nZXMgc2luY2UgdjM6Cj4gPiA+ID4gPiA+ICAtIERvbid0IHJlbGVhc2UgVkNQSSBhbGxvY2F0 aW9ucyBpbiB0aGUgdG9wb2xvZ3kgc3RhdGUgaW1tZWRpYXRlbHkKPiA+ID4gPiA+ID4gaW4KPiA+ ID4gPiA+ID4gICAgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSwgaW5zdGVhZCBt YXJrIHRoZW0gYXMgMCBhbmQKPiA+ID4gPiA+ID4gc2tpcAo+ID4gPiA+ID4gPiAgICBvdmVyIHRo ZW0gaW4gZHJtX2RwX21zdF9kdXBsaWNhdGVfc3RhdGUoKS4gVGhpcyBtYWtlcyBpdCBzbwo+ID4g PiA+ID4gPiAgICBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIGlzIHN0aWxsIGlk ZW1wb3RlbnQgd2hpbGUgYWxzbwo+ID4gPiA+ID4gPiAgICB0aHJvd2luZyB3YXJuaW5ncyBpZiB0 aGUgZHJpdmVyIG1lc3NlcyB1cCBpdCdzIGJvb2sga2VlcGluZyBhbmQKPiA+ID4gPiA+ID4gdHJp ZXMKPiA+ID4gPiA+ID4gICAgdG8gcmVsZWFzZSBWQ1BJIHNsb3RzIG9uIGEgcG9ydCB0aGF0IGRv ZXNuJ3QgaGF2ZSBhbnkgcHJlLQo+ID4gPiA+ID4gPiBleGlzdGluZwo+ID4gPiA+ID4gPiAgICBW Q1BJIGFsbG9jYXRpb24gLSBkYW52ZXQKPiA+ID4gPiA+ID4gIC0gQ2hhbmdlIG1zdF9zdGF0ZS9z dGF0ZSBpbiBzb21lIGRlYnVnZ2luZyBtZXNzYWdlcyB0byAibXN0IHN0YXRlIgo+ID4gPiA+ID4g Pgo+ID4gPiA+ID4gPiBDaGFuZ2VzIHNpbmNlIHYyOgo+ID4gPiA+ID4gPiAgLSBVc2Uga21lbWR1 cCgpIGZvciBkdXBsaWNhdGluZyBNU1Qgc3RhdGUgLSBkYW52ZXQKPiA+ID4gPiA+ID4gIC0gTW92 ZSBwb3J0IHZhbGlkYXRpb24gb3V0IG9mIGR1cGxpY2F0ZSBzdGF0ZSBjYWxsYmFjayAtIGRhbnZl dAo+ID4gPiA+ID4gPiAgLSBIYW5kbGUgbG9vcGluZyB0aHJvdWdoIE1TVCB0b3BvbG9neSBzdGF0 ZXMgaW4KPiA+ID4gPiA+ID4gICAgZHJtX2RwX21zdF9hdG9taWNfY2hlY2soKSBzbyB0aGUgZHJp dmVyIGRvZXNuJ3QgaGF2ZSB0byBkbyBpdAo+ID4gPiA+ID4gPiAgLSBGaXggZG9jdW1lbnRhdGlv biBpbiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpCj4gPiA+ID4gPiA+ICAtIE1vdmUg dGhlIGF0b21pYyBjaGVjayBmb3IgZWFjaCBpbmRpdmlkdWFsIHRvcG9sb2d5IHN0YXRlIGludG8K PiA+ID4gPiA+ID4gaXQncwo+ID4gPiA+ID4gPiAgICBvd24gZnVuY3Rpb24sIHJlZHVjZXMgaW5k ZW50aW5nCj4gPiA+ID4gPiA+ICAtIERvbid0IGNvbnNpZGVyICJzdGFsZSIgTVNUIHBvcnRzIHdo ZW4gY2FsY3VsYXRpbmcgdGhlIGJhbmR3aWR0aAo+ID4gPiA+ID4gPiAgICByZXF1aXJlbWVudHMu IFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugb3JpZ2luYWxseSB3ZSByZWxpZWQgb24gdGhlCj4gPiA+ ID4gPiA+ICAgIHN0YXRlIGR1cGxpY2F0aW9uIGZ1bmN0aW9ucyB0byBwcnVuZSBhbnkgc3RhbGUg cG9ydHMgZnJvbSB0aGUgbmV3Cj4gPiA+ID4gPiA+ICAgIHN0YXRlLCB3aGljaCB3b3VsZCBwcmV2 ZW50IHVzIGZyb20gaW5jb3JyZWN0bHkgY29uc2lkZXJpbmcgdGhlaXIKPiA+ID4gPiA+ID4gICAg YmFuZHdpZHRoIHJlcXVpcmVtZW50cyBhbG9uZ3NpZGUgbGVnaXRpbWF0ZSBuZXcgcGF5bG9hZHMu Cj4gPiA+ID4gPiA+ICAtIEFkZCBmdW5jdGlvbiByZWZlcmVuY2VzIGluIGRybV9kcF9hdG9taWNf cmVsZWFzZV92Y3BpX3Nsb3RzKCkgLQo+ID4gPiA+ID4gPiBkYW52ZXQKPiA+ID4gPiA+ID4gIC0g QW5ub3RhdGUgYXRvbWljIFZDUEkgYW5kIGF0b21pYyBjaGVjayBmdW5jdGlvbnMgd2l0aCBfX211 c3RfY2hlY2sKPiA+ID4gPiA+ID4gICAgLSBkYW52ZXQKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4g Q2hhbmdlcyBzaW5jZSB2MToKPiA+ID4gPiA+ID4gIC0gRG9uJ3QgdXNlIHRoZSBub3ctcmVtb3Zl ZCAtPmF0b21pY19jaGVjaygpIGZvciBwcml2YXRlIG9iamVjdHMKPiA+ID4gPiA+ID4gaG9vaywK PiA+ID4gPiA+ID4gICAganVzdCBnaXZlIGRyaXZlcnMgYSBmdW5jdGlvbiB0byBjYWxsIHRoZW1z ZWx2ZXMKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogTHl1ZGUgUGF1bCA8 bHl1ZGVAcmVkaGF0LmNvbT4KPiA+ID4gPiA+ID4gQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52 ZXR0ZXJAZmZ3bGwuY2g+Cj4gPiA+ID4gPiA+IC0tLQo+ID4gPiA+ID4gPiAgZHJpdmVycy9ncHUv ZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYyB8IDI5NAo+ID4gPiA+ID4gPiArKysrKysrKysrKysr KysrKysrKysrKy0tLQo+ID4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlz cGxheS5jICB8ICAgNCArCj4gPiA+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cF9tc3QuYyAgIHwgIDY0ICsrKy0tLQo+ID4gPiA+ID4gPiAgaW5jbHVkZS9kcm0vZHJtX2RwX21z dF9oZWxwZXIuaCAgICAgICB8ICAyNCArKy0KPiA+ID4gPiA+ID4gIDQgZmlsZXMgY2hhbmdlZCwg MzE5IGluc2VydGlvbnMoKyksIDY3IGRlbGV0aW9ucygtKQo+ID4gPiA+ID4gPgo+ID4gPiA+ID4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwo+ID4g PiA+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKPiA+ID4gPiA+ ID4gaW5kZXggMDBmYmU3YTI2OTlkLi4xODNkMGU4MzJjZWQgMTAwNjQ0Cj4gPiA+ID4gPiA+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKPiA+ID4gPiA+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwo+ID4gPiA+ID4gPiBAQCAt MjYxNywyMSArMjYxNyw0MiBAQCBzdGF0aWMgaW50IGRybV9kcF9pbml0X3ZjcGkoc3RydWN0Cj4g PiA+ID4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ID4gPiA+ICB9Cj4g PiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICAvKioKPiA+ID4gPiA+ID4gLSAqIGRybV9kcF9hdG9taWNf ZmluZF92Y3BpX3Nsb3RzKCkgLSBGaW5kIGFuZCBhZGQgdmNwaSBzbG90cyB0byB0aGUKPiA+ID4g PiA+ID4gc3RhdGUKPiA+ID4gPiA+ID4gKyAqIGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3Rz KCkgLSBGaW5kIGFuZCBhZGQgVkNQSSBzbG90cyB0byB0aGUKPiA+ID4gPiA+ID4gc3RhdGUKPiA+ ID4gPiA+ID4gICAqIEBzdGF0ZTogZ2xvYmFsIGF0b21pYyBzdGF0ZQo+ID4gPiA+ID4gPiAgICog QG1ncjogTVNUIHRvcG9sb2d5IG1hbmFnZXIgZm9yIHRoZSBwb3J0Cj4gPiA+ID4gPiA+ICAgKiBA cG9ydDogcG9ydCB0byBmaW5kIHZjcGkgc2xvdHMgZm9yCj4gPiA+ID4gPiA+ICAgKiBAcGJuOiBi YW5kd2lkdGggcmVxdWlyZWQgZm9yIHRoZSBtb2RlIGluIFBCTgo+ID4gPiA+ID4gPiAgICoKPiA+ ID4gPiA+ID4gLSAqIFJFVFVSTlM6Cj4gPiA+ID4gPiA+IC0gKiBUb3RhbCBzbG90cyBpbiB0aGUg YXRvbWljIHN0YXRlIGFzc2lnbmVkIGZvciB0aGlzIHBvcnQgb3IgZXJyb3IKPiA+ID4gPiA+ID4g KyAqIEFsbG9jYXRlcyBWQ1BJIHNsb3RzIHRvIEBwb3J0LCByZXBsYWNpbmcgYW55IHByZXZpb3Vz IFZDUEkKPiA+ID4gPiA+ID4gYWxsb2NhdGlvbnMgaXQKPiA+ID4gPiA+ID4gKyAqIG1heSBoYXZl IGhhZC4gQW55IGF0b21pYyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbAo+ID4g PiA+ID4gPiB0aGlzCj4gPiA+ID4gPiA+IGZ1bmN0aW9uCj4gPiA+ID4gPiA+ICsgKiBpbiB0aGVp ciAmZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzLmF0b21pY19jaGVjaygpIGNhbGxiYWNrIHRvCj4g PiA+ID4gPiA+IGNoYW5nZQo+ID4gPiA+ID4gPiB0aGUKPiA+ID4gPiA+ID4gKyAqIGN1cnJlbnQg VkNQSSBhbGxvY2F0aW9uIGZvciB0aGUgbmV3IHN0YXRlLCBidXQgb25seSB3aGVuCj4gPiA+ID4g PiA+ICsgKiAmZHJtX2NydGNfc3RhdGUubW9kZV9jaGFuZ2VkIG9yCj4gPiA+ID4gPiA+ICZkcm1f Y3J0Y19zdGF0ZS5jb25uZWN0b3JzX2NoYW5nZWQKPiA+ID4gPiA+ID4gaXMgc2V0Cj4gPiA+ID4g PiA+ICsgKiB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIHVzZXJzcGFjZSBhcHBsaWNhdGlv bnMgdGhhdCBzdGlsbAo+ID4gPiA+ID4gPiB1c2UKPiA+ID4gPiA+ID4gdGhlCj4gPiA+ID4gPiA+ ICsgKiBsZWdhY3kgbW9kZXNldHRpbmcgVUFQSS4KPiA+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiA+ ICsgKiBBbGxvY2F0aW9ucyBzZXQgYnkgdGhpcyBmdW5jdGlvbiBhcmUgbm90IGNoZWNrZWQgYWdh aW5zdCB0aGUKPiA+ID4gPiA+ID4gYmFuZHdpZHRoCj4gPiA+ID4gPiA+ICsgKiByZXN0cmFpbnRz IG9mIEBtZ3IgdW50aWwgdGhlIGRyaXZlciBjYWxscwo+ID4gPiA+ID4gPiBkcm1fZHBfbXN0X2F0 b21pY19jaGVjaygpLgo+ID4gPiA+ID4gPiArICoKPiA+ID4gPiA+ID4gKyAqIEFkZGl0aW9uYWxs eSwgaXQgaXMgT0sgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIG11bHRpcGxlIHRpbWVzIG9uCj4gPiA+ ID4gPiA+IHRoZQo+ID4gPiA+ID4gPiBzYW1lCj4gPiA+ID4gPiA+ICsgKiBAcG9ydCBhcyBuZWVk ZWQuIEl0IGlzIG5vdCBPSyBob3dldmVyLCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gYW5kCj4gPiA+ ID4gPiA+ICsgKiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIGluIHRoZSBzYW1l IGF0b21pYyBjaGVjawo+ID4gPiA+ID4gPiBwaGFzZS4KPiA+ID4gPiA+ID4gKyAqCj4gPiA+ID4g PiA+ICsgKiBTZWUgYWxzbzoKPiA+ID4gPiA+ID4gKyAqIGRybV9kcF9hdG9taWNfcmVsZWFzZV92 Y3BpX3Nsb3RzKCkKPiA+ID4gPiA+ID4gKyAqIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkKPiA+ ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiA+ICsgKiBSZXR1cm5zOgo+ID4gPiA+ID4gPiArICogVG90 YWwgc2xvdHMgaW4gdGhlIGF0b21pYyBzdGF0ZSBhc3NpZ25lZCBmb3IgdGhpcyBwb3J0LCBvciBh Cj4gPiA+ID4gPiA+IG5lZ2F0aXZlIGVycm9yCj4gPiA+ID4gPiA+ICsgKiBjb2RlIGlmIHRoZSBw b3J0IG5vIGxvbmdlciBleGlzdHMKPiA+ID4gPiA+ID4gICAqLwo+ID4gPiA+ID4gPiAgaW50IGRy bV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSwKPiA+ID4gPiA+ID4gIAkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdy LAo+ID4gPiA+ID4gPiAgCQkJCSAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50Cj4g PiA+ID4gPiA+IHBibikKPiA+ID4gPiA+ID4gIHsKPiA+ID4gPiA+ID4gIAlzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9zdGF0ZSAqdG9wb2xvZ3lfc3RhdGU7Cj4gPiA+ID4gPiA+IC0JaW50IHJl cV9zbG90czsKPiA+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqcG9z LCAqdmNwaSA9IE5VTEw7Cj4gPiA+ID4gPiA+ICsJaW50IHByZXZfc2xvdHMsIHJlcV9zbG90cywg cmV0Owo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAgCXRvcG9sb2d5X3N0YXRlID0gZHJtX2F0b21p Y19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlLAo+ID4gPiA+ID4gPiBtZ3IpOwo+ID4gPiA+ ID4gPiAgCWlmIChJU19FUlIodG9wb2xvZ3lfc3RhdGUpKQo+ID4gPiA+ID4gPiBAQCAtMjY0MCwy MCArMjY2MSw2MCBAQCBpbnQgZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoc3RydWN0Cj4g PiA+ID4gPiA+IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiA+ID4gPiAgCXBvcnQgPSBk cm1fZHBfZ2V0X3ZhbGlkYXRlZF9wb3J0X3JlZihtZ3IsIHBvcnQpOwo+ID4gPiA+ID4gPiAgCWlm IChwb3J0ID09IE5VTEwpCj4gPiA+ID4gPiA+ICAJCXJldHVybiAtRUlOVkFMOwo+ID4gPiA+ID4g PiAtCXJlcV9zbG90cyA9IERJVl9ST1VORF9VUChwYm4sIG1nci0+cGJuX2Rpdik7Cj4gPiA+ID4g PiA+IC0JRFJNX0RFQlVHX0tNUygidmNwaSBzbG90cyByZXE9JWQsIGF2YWlsPSVkXG4iLAo+ID4g PiA+ID4gPiAtCQkJcmVxX3Nsb3RzLCB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMpOwo+ID4g PiA+ID4gPgo+ID4gPiA+ID4gPiAtCWlmIChyZXFfc2xvdHMgPiB0b3BvbG9neV9zdGF0ZS0+YXZh aWxfc2xvdHMpIHsKPiA+ID4gPiA+ID4gLQkJZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+ID4gPiA+ ID4gPiAtCQlyZXR1cm4gLUVOT1NQQzsKPiA+ID4gPiA+ID4gKwl0b3BvbG9neV9zdGF0ZS0+dmNw aV9hbGxvY2F0ZWQgPSB0cnVlOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJLyogRmluZCB0 aGUgY3VycmVudCBhbGxvY2F0aW9uIGZvciB0aGlzIHBvcnQsIGlmIGFueSAqLwo+ID4gPiA+ID4g PiArCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmdG9wb2xvZ3lfc3RhdGUtPnZjcGlzLCBuZXh0 KSB7Cj4gPiA+ID4gPiA+ICsJCWlmIChwb3MtPnBvcnQgPT0gcG9ydCkgewo+ID4gPiA+ID4gPiAr CQkJdmNwaSA9IHBvczsKPiA+ID4gPiA+ID4gKwkJCXByZXZfc2xvdHMgPSB2Y3BpLT52Y3BpOwo+ ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJCQkvKgo+ID4gPiA+ID4gPiArCQkJICogVGhpcyBz aG91bGQgbmV2ZXIgaGFwcGVuLCB1bmxlc3MgdGhlIGRyaXZlcgo+ID4gPiA+ID4gPiB0cmllcwo+ ID4gPiA+ID4gPiArCQkJICogcmVsZWFzaW5nIGFuZCBhbGxvY2F0aW5nIHRoZSBzYW1lIFZDUEkK PiA+ID4gPiA+ID4gYWxsb2NhdGlvbiwKPiA+ID4gPiA+ID4gKwkJCSAqIHdoaWNoIGlzIGFuIGVy cm9yCj4gPiA+ID4gPiA+ICsJCQkgKi8KPiA+ID4gPiA+ID4gKwkJCWlmIChXQVJOX09OKCFwcmV2 X3Nsb3RzKSkgewo+ID4gPiA+ID4gPiArCQkJCURSTV9FUlJPUigiY2Fubm90IGFsbG9jYXRlIGFu ZCByZWxlYXNlCj4gPiA+ID4gPiA+IFZDUEkgb24KPiA+ID4gPiA+ID4gW01TVCBQT1JUOiVwXSBp biB0aGUgc2FtZSBzdGF0ZVxuIiwKPiA+ID4gPiA+ID4gKwkJCQkJICBwb3J0KTsKPiA+ID4gPiA+ ID4gKwkJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiA+ID4gKwkJCX0KPiA+ID4gPiA+Cj4gPiA+ ID4gPiBBbGxvd2luZyBhdG9taWMgY2hhbmdlcyB0byBvdXRwdXQgc3RhdGUgKGxpa2UgZGlzYWJs aW5nIGl0IG9uIG9uZQo+ID4gPiA+ID4gY3J0YywKPiA+ID4gPiA+IGFuZCB0aGVuIGVuYWJsaW5n IG9uIHRoZSBvdGhlciwgdGh1cyBib3RoIHJlbGVhc2luZyBhbmQgcmUtYWxsb2NhdGluZwo+ID4g PiA+ID4gdGhlCj4gPiA+ID4gPiB2Y3BpIGluIG9uZSBnbykgaXMga2luZGEgdGhlIHBvaW50IG9m IGF0b21pYy4gU28gZGVmaW5pdGVseSBjYW4ndAo+ID4gPiA+ID4gRUlOVkFMCj4gPiA+ID4gPiBo ZXJlLgo+ID4gPiA+ID4KPiA+ID4gPiA+IFNvdW5kcyBsaWtlIHdlIG5lZWQgbW9yZSB0ZXN0Y2Fz ZXMgaW4gaWd0Pwo+ID4gPiA+ID4KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCQkJYnJlYWs7 Cj4gPiA+ID4gPiA+ICsJCX0KPiA+ID4gPiA+ID4gIAl9Cj4gPiA+ID4gPiA+ICsJaWYgKCF2Y3Bp KQo+ID4gPiA+ID4gPiArCQlwcmV2X3Nsb3RzID0gMDsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4g LQl0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMgLT0gcmVxX3Nsb3RzOwo+ID4gPiA+ID4gPiAt CURSTV9ERUJVR19LTVMoInZjcGkgc2xvdHMgYXZhaWw9JWQiLCB0b3BvbG9neV9zdGF0ZS0KPiA+ ID4gPiA+ID4gPmF2YWlsX3Nsb3RzKTsKPiA+ID4gPiA+ID4gKwlyZXFfc2xvdHMgPSBESVZfUk9V TkRfVVAocGJuLCBtZ3ItPnBibl9kaXYpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJRFJN X0RFQlVHX0FUT01JQygiW0NPTk5FQ1RPUjolZDolc10gW01TVCBQT1JUOiVwXSBWQ1BJICVkIC0+ Cj4gPiA+ID4gPiA+ICVkXG4iLAo+ID4gPiA+ID4gPiArCQkJIHBvcnQtPmNvbm5lY3Rvci0+YmFz ZS5pZCwgcG9ydC0+Y29ubmVjdG9yLQo+ID4gPiA+ID4gPiA+bmFtZSwKPiA+ID4gPiA+ID4gKwkJ CSBwb3J0LCBwcmV2X3Nsb3RzLCByZXFfc2xvdHMpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ ICsJLyogQWRkIHRoZSBuZXcgYWxsb2NhdGlvbiB0byB0aGUgc3RhdGUgKi8KPiA+ID4gPiA+ID4g KwlpZiAoIXZjcGkpIHsKPiA+ID4gPiA+ID4gKwkJdmNwaSA9IGt6YWxsb2Moc2l6ZW9mKCp2Y3Bp KSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ID4gPiA+ICsJCWlmICghdmNwaSkgewo+ID4gPiA+ID4gPiAr CQkJcmV0ID0gLUVOT01FTTsKPiA+ID4gPiA+ID4gKwkJCWdvdG8gb3V0Owo+ID4gPiA+ID4gPiAr CQl9Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICsJCXZjcGktPnBvcnQgPSBkcm1fZHBfZ2V0X3Zh bGlkYXRlZF9wb3J0X3JlZihtZ3IsIHBvcnQpOwo+ID4gPiA+ID4gPiArCQlpZiAoIXZjcGktPnBv cnQpIHsKPiA+ID4gPiA+ID4gKwkJCXJldCA9IC1FSU5WQUw7Cj4gPiA+ID4gPiA+ICsJCQlrZnJl ZSh2Y3BpKTsKPiA+ID4gPiA+ID4gKwkJCWdvdG8gb3V0Owo+ID4gPiA+ID4gPiArCQl9Cj4gPiA+ ID4gPiA+ICsJCWxpc3RfYWRkKCZ2Y3BpLT5uZXh0LCAmdG9wb2xvZ3lfc3RhdGUtPnZjcGlzKTsK PiA+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiA+ICsJdmNwaS0+dmNwaSA9IHJlcV9zbG90czsKPiA+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCXJldCA9IHJlcV9zbG90czsKPiA+ID4gPiA+ID4gK291 dDoKPiA+ID4gPiA+ID4gIAlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gPiA+ID4gPiA+IC0JcmV0 dXJuIHJlcV9zbG90czsKPiA+ID4gPiA+ID4gKwlyZXR1cm4gcmV0Owo+ID4gPiA+ID4gPiAgfQo+ ID4gPiA+ID4gPiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyk7 Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IEBAIC0yNjYxLDMxICsyNzIyLDY2IEBACj4gPiA+ID4g PiA+IEVYUE9SVF9TWU1CT0woZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMpOwo+ID4gPiA+ ID4gPiAgICogZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSAtIFJlbGVhc2UgYWxs b2NhdGVkIHZjcGkKPiA+ID4gPiA+ID4gc2xvdHMKPiA+ID4gPiA+ID4gICAqIEBzdGF0ZTogZ2xv YmFsIGF0b21pYyBzdGF0ZQo+ID4gPiA+ID4gPiAgICogQG1ncjogTVNUIHRvcG9sb2d5IG1hbmFn ZXIgZm9yIHRoZSBwb3J0Cj4gPiA+ID4gPiA+IC0gKiBAc2xvdHM6IG51bWJlciBvZiB2Y3BpIHNs b3RzIHRvIHJlbGVhc2UKPiA+ID4gPiA+ID4gKyAqIEBwb3J0OiBUaGUgcG9ydCB0byByZWxlYXNl IHRoZSBWQ1BJIHNsb3RzIGZyb20KPiA+ID4gPiA+ID4gICAqCj4gPiA+ID4gPiA+IC0gKiBSRVRV Uk5TOgo+ID4gPiA+ID4gPiAtICogMCBpZiBAc2xvdHMgd2VyZSBhZGRlZCBiYWNrIHRvICZkcm1f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlLQo+ID4gPiA+ID4gPiA+IGF2YWlsX3Nsb3RzIG9yCj4gPiA+ ID4gPiA+IC0gKiBuZWdhdGl2ZSBlcnJvciBjb2RlCj4gPiA+ID4gPiA+ICsgKiBSZWxlYXNlcyBh bnkgVkNQSSBzbG90cyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgdG8gYSBwb3J0IGluCj4gPiA+ ID4gPiA+IHRoZQo+ID4gPiA+ID4gPiBhdG9taWMKPiA+ID4gPiA+ID4gKyAqIHN0YXRlLiBBbnkg YXRvbWljIGRyaXZlcnMgd2hpY2ggc3VwcG9ydCBNU1QgbXVzdCBjYWxsIHRoaXMKPiA+ID4gPiA+ ID4gZnVuY3Rpb24KPiA+ID4gPiA+ID4gaW4KPiA+ID4gPiA+ID4gKyAqIHRoZWlyICZkcm1fY29u bmVjdG9yX2hlbHBlcl9mdW5jcy5hdG9taWNfY2hlY2soKSBjYWxsYmFjayB3aGVuCj4gPiA+ID4g PiA+IHRoZQo+ID4gPiA+ID4gPiArICogY29ubmVjdG9yIHdpbGwgbm8gbG9uZ2VyIGhhdmUgVkNQ SSBhbGxvY2F0ZWQgKGUuZy4gYmVjYXVzZSBpdCdzCj4gPiA+ID4gPiA+IENSVEMKPiA+ID4gPiA+ ID4gd2FzCj4gPiA+ID4gPiA+ICsgKiByZW1vdmVkKSB3aGVuIGl0IGhhZCBWQ1BJIGFsbG9jYXRl ZCBpbiB0aGUgcHJldmlvdXMgYXRvbWljCj4gPiA+ID4gPiA+IHN0YXRlLgo+ID4gPiA+ID4gPiAr ICoKPiA+ID4gPiA+ID4gKyAqIEl0IGlzIE9LIHRvIGNhbGwgdGhpcyBldmVuIGlmIEBwb3J0IGhh cyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUKPiA+ID4gPiA+ID4gc3lzdGVtLgo+ID4gPiA+ID4gPiAr ICogQWRkaXRpb25hbGx5LCBpdCBpcyBPSyB0byBjYWxsIHRoaXMgZnVuY3Rpb24gbXVsdGlwbGUg dGltZXMgb24KPiA+ID4gPiA+ID4gdGhlCj4gPiA+ID4gPiA+IHNhbWUKPiA+ID4gPiA+ID4gKyAq IEBwb3J0IGFzIG5lZWRlZC4gSXQgaXMgbm90IE9LIGhvd2V2ZXIsIHRvIGNhbGwgdGhpcyBmdW5j dGlvbiBhbmQKPiA+ID4gPiA+ID4gKyAqIGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkg b24gdGhlIHNhbWUgQHBvcnQgaW4gYSBzaW5nbGUKPiA+ID4gPiA+ID4gYXRvbWljCj4gPiA+ID4g PiA+IGNoZWNrCj4gPiA+ID4gPiA+ICsgKiBwaGFzZS4KPiA+ID4gPiA+ID4gKyAqCj4gPiA+ID4g PiA+ICsgKiBTZWUgYWxzbzoKPiA+ID4gPiA+ID4gKyAqIGRybV9kcF9hdG9taWNfZmluZF92Y3Bp X3Nsb3RzKCkKPiA+ID4gPiA+ID4gKyAqIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkKPiA+ID4g PiA+ID4gKyAqCj4gPiA+ID4gPiA+ICsgKiBSZXR1cm5zOgo+ID4gPiA+ID4gPiArICogMCBpZiBh bGwgc2xvdHMgZm9yIHRoaXMgcG9ydCB3ZXJlIGFkZGVkIGJhY2sgdG8KPiA+ID4gPiA+ID4gKyAq ICZkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlLmF2YWlsX3Nsb3RzIG9yIG5lZ2F0aXZlIGVycm9y IGNvZGUKPiA+ID4gPiA+ID4gICAqLwo+ID4gPiA+ID4gPiAgaW50IGRybV9kcF9hdG9taWNfcmVs ZWFzZV92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlCj4gPiA+ID4gPiA+ICpzdGF0 ZSwKPiA+ID4gPiA+ID4gIAkJCQkgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncgo+ ID4gPiA+ID4gPiAqbWdyLAo+ID4gPiA+ID4gPiAtCQkJCSAgICAgaW50IHNsb3RzKQo+ID4gPiA+ ID4gPiArCQkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkKPiA+ID4gPiA+ID4g IHsKPiA+ID4gPiA+ID4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqdG9wb2xv Z3lfc3RhdGU7Cj4gPiA+ID4gPiA+ICsJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gKnBv czsKPiA+ID4gPiA+ID4gKwlib29sIGZvdW5kID0gZmFsc2U7Cj4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+ICAJdG9wb2xvZ3lfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUo c3RhdGUsCj4gPiA+ID4gPiA+IG1ncik7Cj4gPiA+ID4gPiA+ICAJaWYgKElTX0VSUih0b3BvbG9n eV9zdGF0ZSkpCj4gPiA+ID4gPiA+ICAJCXJldHVybiBQVFJfRVJSKHRvcG9sb2d5X3N0YXRlKTsK PiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gLQkvKiBXZSBjYW5ub3QgcmVseSBvbiBwb3J0LT52Y3Bp Lm51bV9zbG90cyB0byB1cGRhdGUKPiA+ID4gPiA+ID4gLQkgKiB0b3BvbG9neV9zdGF0ZS0+YXZh aWxfc2xvdHMgYXMgdGhlIHBvcnQgbWF5IG5vdCBleGlzdCBpZgo+ID4gPiA+ID4gPiB0aGUgcGFy ZW50Cj4gPiA+ID4gPiA+IC0JICogYnJhbmNoIGRldmljZSB3YXMgdW5wbHVnZ2VkLiBUaGlzIHNo b3VsZCBiZSBmaXhlZCBieQo+ID4gPiA+ID4gPiB0cmFja2luZwo+ID4gPiA+ID4gPiAtCSAqIHBl ci1wb3J0IHNsb3QgYWxsb2NhdGlvbiBpbiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlCj4gPiA+ ID4gPiA+IGluc3RlYWQgb2YKPiA+ID4gPiA+ID4gLQkgKiBkZXBlbmRpbmcgb24gdGhlIGNhbGxl ciB0byB0ZWxsIHVzIGhvdyBtYW55IHNsb3RzIHRvCj4gPiA+ID4gPiA+IHJlbGVhc2UuCj4gPiA+ ID4gPiA+IC0JICovCj4gPiA+ID4gPiA+IC0JdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzICs9 IHNsb3RzOwo+ID4gPiA+ID4gPiAtCURSTV9ERUJVR19LTVMoInZjcGkgc2xvdHMgcmVsZWFzZWQ9 JWQsIGF2YWlsPSVkXG4iLAo+ID4gPiA+ID4gPiAtCQkJc2xvdHMsIHRvcG9sb2d5X3N0YXRlLT5h dmFpbF9zbG90cyk7Cj4gPiA+ID4gPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZ0b3Bv bG9neV9zdGF0ZS0+dmNwaXMsIG5leHQpIHsKPiA+ID4gPiA+ID4gKwkJaWYgKHBvcy0+cG9ydCA9 PSBwb3J0KSB7Cj4gPiA+ID4gPiA+ICsJCQlmb3VuZCA9IHRydWU7Cj4gPiA+ID4gPiA+ICsJCQli cmVhazsKPiA+ID4gPiA+ID4gKwkJfQo+ID4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ID4gKwlpZiAo V0FSTl9PTighZm91bmQpKSB7Cj4gPiA+ID4gPiA+ICsJCURSTV9FUlJPUigibm8gVkNQSSBmb3Ig W01TVCBQT1JUOiVwXSBmb3VuZCBpbiBtc3QKPiA+ID4gPiA+ID4gc3RhdGUgJXBcbiIsCj4gPiA+ ID4gPiA+ICsJCQkgIHBvcnQsICZ0b3BvbG9neV9zdGF0ZS0+YmFzZSk7Cj4gPiA+ID4gPiA+ICsJ CXJldHVybiAtRUlOVkFMOwo+ID4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4g PiArCURSTV9ERUJVR19BVE9NSUMoIltNU1QgUE9SVDolcF0gVkNQSSAlZCAtPiAwXG4iLCBwb3J0 LCBwb3MtCj4gPiA+ID4gPiA+ID52Y3BpKTsKPiA+ID4gPiA+ID4gKwlpZiAocG9zLT52Y3BpKSB7 Cj4gPiA+ID4gPiA+ICsJCS8qCj4gPiA+ID4gPiA+ICsJCSAqIFRoaXMgc2hvdWxkIGJlIHNhZmUt YXMgdGhlIHByZXZpb3VzIHN0YXRlIHdpbGwKPiA+ID4gPiA+ID4gc3RpbGwgaG9sZCBhCj4gPiA+ ID4gPiA+ICsJCSAqIHJlZmVyZW5jZSB0byB0aGlzIHBvcnQgdW50aWwgd2Ugc3dhcCBzdGF0ZXMu IElmCj4gPiA+ID4gPiA+IGl0J3Mgbm90LAo+ID4gPiA+ID4gPiArCQkgKiB0aGUgZHJpdmVyIGhh cyBhIGJvb2trZWVwaW5nIGVycm9yCj4gPiA+ID4gPiA+ICsJCSAqLwo+ID4gPiA+ID4gPiArCQlp ZiAoV0FSTl9PTihkcm1fZHBfcHV0X3BvcnQocG9ydCkpKSB7Cj4gPiA+ID4gPgo+ID4gPiA+ID4g VGhlIHVzdWFsIHdheSB0byBkbyB0aGlzIChpbnN0ZWFkIG9mIGFkZGluZyBhIHJldHVybiB2YWx1 ZSB0byB0aGUKPiA+ID4gPiA+IG5vcm1hbAo+ID4gPiA+ID4gX3B1dCBmdW5jdGlvbikgaXMgc29t ZXRoaW5nIGxpa2UKPiA+ID4gPiA+Cj4gPiA+ID4gPiAJa3JlZl9wdXQocG9ydCwgZnVuY3Rpb25f dGhhdF93aXRoX2p1c3RfYV9XQVJOSU5HX0RSTV9FUlJPUikKPiA+ID4gPiA+Cj4gPiA+ID4gPiBh dm9pZHMgdGhlIG5lZWQgZm9yIHBhdGNoIDIuCj4gPiA+ID4gPgo+ID4gPiA+ID4gPiArCQkJRFJN X0VSUk9SKCJjYW5ub3QgYWxsb2NhdGUgYW5kIHJlbGVhc2UgVkNQSSBvbgo+ID4gPiA+ID4gPiBb TVNUCj4gPiA+ID4gPiA+IFBPUlQ6JXBdIGluIHRoZSBzYW1lIHN0YXRlXG4iLAo+ID4gPiA+ID4g PiArCQkJCSAgcG9ydCk7Cj4gPiA+ID4gPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiA+ ID4gKwkJfQo+ID4gPiA+ID4gPiArCQlwb3MtPnZjcGkgPSAwOwo+ID4gPiA+ID4gPiArCX0KPiA+ ID4gPiA+ID4KPiA+ID4gPiA+ID4gIAlyZXR1cm4gMDsKPiA+ID4gPiA+ID4gIH0KPiA+ID4gPiA+ ID4gQEAgLTMxMTUsMTUgKzMyMTEsNDUgQEAgc3RhdGljIHZvaWQKPiA+ID4gPiA+ID4gZHJtX2Rw X2Rlc3Ryb3lfY29ubmVjdG9yX3dvcmsoc3RydWN0Cj4gPiA+ID4gPiA+IHdvcmtfc3RydWN0ICp3 b3JrKQo+ID4gPiA+ID4gPiAgc3RhdGljIHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSAqCj4gPiA+ ID4gPiA+ICBkcm1fZHBfbXN0X2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfb2Jq ICpvYmopCj4gPiA+ID4gPiA+ICB7Cj4gPiA+ID4gPiA+IC0Jc3RydWN0IGRybV9kcF9tc3RfdG9w b2xvZ3lfc3RhdGUgKnN0YXRlOwo+ID4gPiA+ID4gPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlICpzdGF0ZSwgKm9sZF9zdGF0ZSA9Cj4gPiA+ID4gPiA+ICsJCXRvX2RwX21zdF90 b3BvbG9neV9zdGF0ZShvYmotPnN0YXRlKTsKPiA+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX3Zj cGlfYWxsb2NhdGlvbiAqcG9zLCAqdmNwaTsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gLQlzdGF0 ZSA9IGttZW1kdXAob2JqLT5zdGF0ZSwgc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOwo+ID4g PiA+ID4gPiArCXN0YXRlID0ga21lbWR1cChvbGRfc3RhdGUsIHNpemVvZigqc3RhdGUpLCBHRlBf S0VSTkVMKTsKPiA+ID4gPiA+ID4gIAlpZiAoIXN0YXRlKQo+ID4gPiA+ID4gPiAgCQlyZXR1cm4g TlVMTDsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gIAlfX2RybV9hdG9taWNfaGVscGVyX3ByaXZh dGVfb2JqX2R1cGxpY2F0ZV9zdGF0ZShvYmosICZzdGF0ZS0KPiA+ID4gPiA+ID4gPmJhc2UpOwo+ ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiArCUlOSVRfTElTVF9IRUFEKCZzdGF0ZS0+dmNwaXMpOwo+ ID4gPiA+ID4gPiArCXN0YXRlLT52Y3BpX2FsbG9jYXRlZCA9IGZhbHNlOwo+ID4gPiA+ID4gPiAr Cj4gPiA+ID4gPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZvbGRfc3RhdGUtPnZjcGlz LCBuZXh0KSB7Cj4gPiA+ID4gPiA+ICsJCS8qIFBydW5lIGxlZnRvdmVyIGZyZWVkIFZDUEkgYWxs b2NhdGlvbnMgKi8KPiA+ID4gPiA+ID4gKwkJaWYgKCFwb3MtPnZjcGkpCj4gPiA+ID4gPiA+ICsJ CQljb250aW51ZTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCQl2Y3BpID0ga21lbWR1cChw b3MsIHNpemVvZigqdmNwaSksIEdGUF9LRVJORUwpOwo+ID4gPiA+ID4gPiArCQlpZiAoIXZjcGkp Cj4gPiA+ID4gPiA+ICsJCQlnb3RvIGZhaWw7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKwkJ LyogVGFrZSBhIHBsYWluIG9sZCBrcmVmIGhlcmUgYW5kIGRvbid0IHZhbGlkYXRlIHRoZQo+ID4g PiA+ID4gPiBwb3J0LCBhcwo+ID4gPiA+ID4gPiArCQkgKiBpdCdzIHRvcG9sb2d5IG1pZ2h0IG5v dCBldmVuIGV4aXN0IGFueW1vcmUKPiA+ID4gPiA+ID4gKwkJICovCj4gPiA+ID4gPiA+ICsJCWty ZWZfZ2V0KCZ2Y3BpLT5wb3J0LT5rcmVmKTsKPiA+ID4gPiA+ID4gKwkJbGlzdF9hZGQoJnZjcGkt Pm5leHQsICZzdGF0ZS0+dmNwaXMpOwo+ID4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ID4gKwo+ID4g PiA+ID4gPiAgCXJldHVybiAmc3RhdGUtPmJhc2U7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4g K2ZhaWw6Cj4gPiA+ID4gPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgdmNwaSwg JnN0YXRlLT52Y3BpcywgbmV4dCkgewo+ID4gPiA+ID4gPiArCQlkcm1fZHBfcHV0X3BvcnQocG9z LT5wb3J0KTsKPiA+ID4gPiA+ID4gKwkJa2ZyZWUocG9zKTsKPiA+ID4gPiA+ID4gKwl9Cj4gPiA+ ID4gPiA+ICsJa2ZyZWUoc3RhdGUpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJcmV0dXJu IE5VTEw7Cj4gPiA+ID4gPiA+ICB9Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICBzdGF0aWMgdm9p ZCBkcm1fZHBfbXN0X2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wcml2YXRlX29iaiAqb2JqLAo+ ID4gPiA+ID4gPiBAQCAtMzEzMSwxNCArMzI1NywxMTYgQEAgc3RhdGljIHZvaWQgZHJtX2RwX21z dF9kZXN0cm95X3N0YXRlKHN0cnVjdAo+ID4gPiA+ID4gPiBkcm1fcHJpdmF0ZV9vYmogKm9iaiwK PiA+ID4gPiA+ID4gIHsKPiA+ID4gPiA+ID4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9z dGF0ZSAqbXN0X3N0YXRlID0KPiA+ID4gPiA+ID4gIAkJdG9fZHBfbXN0X3RvcG9sb2d5X3N0YXRl KHN0YXRlKTsKPiA+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqcG9z LCAqdG1wOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9z YWZlKHBvcywgdG1wLCAmbXN0X3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ID4gPiA+ID4gPiArCQkv KiBXZSBvbmx5IGtlZXAgcmVmZXJlbmNlcyB0byBwb3J0cyB3aXRoIG5vbi16ZXJvCj4gPiA+ID4g PiA+IFZDUElzICovCj4gPiA+ID4gPiA+ICsJCWlmIChwb3MtPnZjcGkpCj4gPiA+ID4gPiA+ICsJ CQlkcm1fZHBfcHV0X3BvcnQocG9zLT5wb3J0KTsKPiA+ID4gPiA+ID4gKwkJa2ZyZWUocG9zKTsK PiA+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICAJa2ZyZWUobXN0X3N0YXRl KTsKPiA+ID4gPiA+ID4gIH0KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gLXN0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGVfZnVuY3MgbXN0X3N0YXRlX2Z1bmNzID0gewo+ID4gPiA+ ID4gPiArc3RhdGljIGlubGluZSBpbnQKPiA+ID4gPiA+ID4gK2RybV9kcF9tc3RfYXRvbWljX2No ZWNrX3RvcG9sb2d5X3N0YXRlKHN0cnVjdAo+ID4gPiA+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5 X21ncgo+ID4gPiA+ID4gPiAqbWdyLAo+ID4gPiA+ID4gPiArCQkJCSAgICAgICBzdHJ1Y3QKPiA+ ID4gPiA+ID4gZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZQo+ID4gPiA+ID4gPiAqbXN0X3N0YXRl KQo+ID4gPiA+ID4gPiArewo+ID4gPiA+ID4gPiArCXN0cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0 aW9uICp2Y3BpOwo+ID4gPiA+ID4gPiArCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQ7Cj4g PiA+ID4gPiA+ICsJaW50IGF2YWlsX3Nsb3RzID0gNjMsIHJldDsKPiA+ID4gPiA+ID4gKwo+ID4g PiA+ID4gPiArCS8qIFRoZXJlJ3Mgbm8gcG9zc2libGUgc2NlbmFyaW8gd2hlcmUgcmVsZWFzaW5n IFZDUEkgb3IKPiA+ID4gPiA+ID4ga2VlcGluZyBpdCB0aGUKPiA+ID4gPiA+ID4gKwkgKiBzYW1l IHdvdWxkIG1ha2UgdGhlIHN0YXRlIGludmFsaWQKPiA+ID4gPiA+ID4gKwkgKi8KPiA+ID4gPiA+ ID4gKwlpZiAoIW1zdF9zdGF0ZS0+dmNwaV9hbGxvY2F0ZWQpIHsKPiA+ID4gPiA+Cj4gPiA+ID4g PiBEbyB3ZSBuZWVkIHRoaXM/IElmIG5vdCBJJ20gYWx3YXlzIGluIGZhdm91ciBvZiByZW1vdmlu ZyBjb2RlIGlmIGl0J3MKPiA+ID4gPiA+IG5vdAo+ID4gPiA+ID4gbmVlZGVkIDotKQo+ID4gPiA+ ID4KPiA+ID4gPiA+ID4gKwkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBNR1I6JXBdIHN0YXRlICVw IGFsbG9jYXRlcyBubwo+ID4gPiA+ID4gPiBWQ1BJLAo+ID4gPiA+ID4gPiBjaGVjayBza2lwcGVk XG4iLAo+ID4gPiA+ID4gPiArCQkJCSBtZ3IsICZtc3Rfc3RhdGUtPmJhc2UpOwo+ID4gPiA+ID4g PiArCQlyZXR1cm4gMDsKPiA+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4g KwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZjcGksICZtc3Rfc3RhdGUtPnZjcGlzLCBuZXh0KSB7Cj4g PiA+ID4gPiA+ICsJCS8qIFJlbGVhc2luZyBWQ1BJIGlzIGFsd2F5cyBPSy1ldmVuIGlmIHRoZSBw b3J0IGlzCj4gPiA+ID4gPiA+IGdvbmUgKi8KPiA+ID4gPiA+ID4gKwkJaWYgKCF2Y3BpLT52Y3Bp KSB7Cj4gPiA+ID4gPiA+ICsJCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIFBPUlQ6JXBdIHJlbGVh c2VzIGFsbAo+ID4gPiA+ID4gPiBWQ1BJCj4gPiA+ID4gPiA+IHNsb3RzXG4iLAo+ID4gPiA+ID4g PiArCQkJCQkgdmNwaS0+cG9ydCk7Cj4gPiA+ID4gPiA+ICsJCQljb250aW51ZTsKPiA+ID4gPiA+ ID4gKwkJfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJCXBvcnQgPSBkcm1fZHBfZ2V0X3Zh bGlkYXRlZF9wb3J0X3JlZihtZ3IsIHZjcGktPnBvcnQpOwo+ID4gPiA+ID4gPiArCQlpZiAoIXBv cnQpIHsKPiA+ID4gPiA+ID4gKwkJCURSTV9ERUJVR19BVE9NSUMoIltNU1QgUE9SVDolcF0gaXMg Z29uZSBidXQKPiA+ID4gPiA+ID4gc3RpbGwgaGFzCj4gPiA+ID4gPiA+IFZDUEksIGNhbm5vdCBh ZGQgbmV3IFZDUElcbiIsCj4gPiA+ID4gPiA+ICsJCQkJCSB2Y3BpLT5wb3J0KTsKPiA+ID4gPiA+ ID4gKwkJCXJldHVybiAtRUlOVkFMOwo+ID4gPiA+ID4gPiArCQl9Cj4gPiA+ID4gPgo+ID4gPiA+ ID4gRm9yIGZpbmRfdmNwaSB3ZSd2ZSBhbHJlYWR5IGRvbmUgdGhpcy4gRm9yIHVucGx1Z2dlZCB2 Y3BpLCB3ZSBjYW4ndCBkbwo+ID4gPiA+ID4gdGhpcyBoZXJlIEkgdGhpbmsgLSBvdGhlcndpc2Ug aWYgeW91IGVuYWJsZSAyIG1zdCBvdXRwdXRzIG9uIHRoZSBzYW1lCj4gPiA+ID4gPiBicmFuY2gs IGFuZCB1bnBsdWcgYm90aCwgb2xkIG5vbi1hdG9taWMgdXNlcnNwYWNlIGNhbiBuZXZlciBldmVy IGFnYWluCj4gPiA+ID4gPiBkaXNhYmxlIHRoZW0gYmVjYXVzZSBpdCBjYW4ndCBkaXNhYmxlIGJv dGguIFRoZSBjaGVjayAodG8gc2tpcCBhbHJlYWR5Cj4gPiA+ID4gPiBkZWFsbG9jYXRlZCBwb3J0 cykgYWJvdmUgaXNuJ3QgZW5vdWdoIHRvIGhhbmRsZSB0aGF0Lgo+ID4gPiA+ID4KPiA+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gPiArCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIFBPUlQ6JXBdIHJlcXVp cmVzICVkIHZjcGkKPiA+ID4gPiA+ID4gc2xvdHNcbiIsCj4gPiA+ID4gPiA+ICsJCQkJIHZjcGkt PnBvcnQsIHZjcGktPnZjcGkpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJCWF2YWlsX3Ns b3RzIC09IHZjcGktPnZjcGk7Cj4gPiA+ID4gPiA+ICsJCWlmIChhdmFpbF9zbG90cyA8IDApIHsK PiA+ID4gPiA+ID4gKwkJCURSTV9ERUJVR19BVE9NSUMoIltNU1QgUE9SVDolcF0gbm90IGVub3Vn aAo+ID4gPiA+ID4gPiBWQ1BJIHNsb3RzCj4gPiA+ID4gPiA+IGluIG1zdCBzdGF0ZSAlcCAoYXZh aWw9JWQpXG4iLAo+ID4gPiA+ID4gPiArCQkJCQkgdmNwaS0+cG9ydCwgbXN0X3N0YXRlLAo+ID4g PiA+ID4gPiArCQkJCQkgYXZhaWxfc2xvdHMgKyB2Y3BpLT52Y3BpKTsKPiA+ID4gPiA+ID4gKwkJ CXJldCA9IC1FTk9TUEM7Cj4gPiA+ID4gPiA+ICsJCQlnb3RvIHBvcnRfZmFpbDsKPiA+ID4gPiA+ ID4gKwkJfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJCWRybV9kcF9wdXRfcG9ydChwb3J0 KTsKPiA+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiA+ICsJRFJNX0RFQlVHX0FUT01JQygiW01TVCBN R1I6JXBdIG1zdCBzdGF0ZSAlcCBWQ1BJIGF2YWlsPSVkCj4gPiA+ID4gPiA+IHVzZWQ9JWRcbiIs Cj4gPiA+ID4gPiA+ICsJCQkgbWdyLCBtc3Rfc3RhdGUsIGF2YWlsX3Nsb3RzLAo+ID4gPiA+ID4g PiArCQkJIDYzIC0gYXZhaWxfc2xvdHMpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJcmV0 dXJuIDA7Cj4gPiA+ID4gPiA+ICtwb3J0X2ZhaWw6Cj4gPiA+ID4gPiA+ICsJZHJtX2RwX3B1dF9w b3J0KHBvcnQpOwo+ID4gPiA+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ID4gPiA+ICt9Cj4gPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ID4gKy8qKgo+ID4gPiA+ID4gPiArICogZHJtX2RwX21zdF9hdG9t aWNfY2hlY2sgLSBDaGVjayB0aGF0IHRoZSBuZXcgc3RhdGUgb2YgYW4gTVNUCj4gPiA+ID4gPiA+ IHRvcG9sb2d5IGluIGFuCj4gPiA+ID4gPiA+ICsgKiBhdG9taWMgdXBkYXRlIGlzIHZhbGlkCj4g PiA+ID4gPiA+ICsgKiBAc3RhdGU6IFBvaW50ZXIgdG8gdGhlIG5ldyAmc3RydWN0IGRybV9kcF9t c3RfdG9wb2xvZ3lfc3RhdGUKPiA+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiA+ICsgKiBDaGVja3Mg dGhlIGdpdmVuIHRvcG9sb2d5IHN0YXRlIGZvciBhbiBhdG9taWMgdXBkYXRlIHRvIGVuc3VyZQo+ ID4gPiA+ID4gPiB0aGF0Cj4gPiA+ID4gPiA+IGl0J3MKPiA+ID4gPiA+ID4gKyAqIHZhbGlkLiBU aGlzIGluY2x1ZGVzIGNoZWNraW5nIHdoZXRoZXIgdGhlcmUncyBlbm91Z2ggYmFuZHdpZHRoCj4g PiA+ID4gPiA+IHRvCj4gPiA+ID4gPiA+IHN1cHBvcnQKPiA+ID4gPiA+ID4gKyAqIHRoZSBuZXcg VkNQSSBhbGxvY2F0aW9ucyBpbiB0aGUgYXRvbWljIHVwZGF0ZS4KPiA+ID4gPiA+ID4gKyAqCj4g PiA+ID4gPiA+ICsgKiBBbnkgYXRvbWljIGRyaXZlcnMgc3VwcG9ydGluZyBEUCBNU1QgbXVzdCBt YWtlIHN1cmUgdG8gY2FsbCB0aGlzCj4gPiA+ID4gPiA+IGFmdGVyCj4gPiA+ID4gPiA+ICsgKiBj aGVja2luZyB0aGUgcmVzdCBvZiB0aGVpciBzdGF0ZSBpbiB0aGVpcgo+ID4gPiA+ID4gPiArICog JmRybV9tb2RlX2NvbmZpZ19mdW5jcy5hdG9taWNfY2hlY2soKSBjYWxsYmFjay4KPiA+ID4gPiA+ ID4gKyAqCj4gPiA+ID4gPiA+ICsgKiBTZWUgYWxzbzoKPiA+ID4gPiA+ID4gKyAqIGRybV9kcF9h dG9taWNfZmluZF92Y3BpX3Nsb3RzKCkKPiA+ID4gPiA+ID4gKyAqIGRybV9kcF9hdG9taWNfcmVs ZWFzZV92Y3BpX3Nsb3RzKCkKPiA+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiA+ICsgKiBSZXR1cm5z Ogo+ID4gPiA+ID4gPiArICoKPiA+ID4gPiA+ID4gKyAqIDAgaWYgdGhlIG5ldyBzdGF0ZSBpcyB2 YWxpZCwgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCj4gPiA+ID4gPiA+ICsgKi8KPiA+ ID4gPiA+ID4gK2ludCBkcm1fZHBfbXN0X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2F0b21pY19z dGF0ZSAqc3RhdGUpCj4gPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiA+ICsJc3RydWN0IGRybV9kcF9t c3RfdG9wb2xvZ3lfbWdyICptZ3I7Cj4gPiA+ID4gPiA+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9w b2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZTsKPiA+ID4gPiA+ID4gKwlpbnQgaSwgcmV0ID0gMDsKPiA+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCWZvcl9lYWNoX25ld19tc3RfbWdyX2luX3N0YXRlKHN0 YXRlLCBtZ3IsIG1zdF9zdGF0ZSwgaSkgewo+ID4gPiA+ID4gPiArCQlyZXQgPSBkcm1fZHBfbXN0 X2F0b21pY19jaGVja190b3BvbG9neV9zdGF0ZShtZ3IsCj4gPiA+ID4gPiA+IG1zdF9zdGF0ZSk7 Cj4gPiA+ID4gPiA+ICsJCWlmIChyZXQpCj4gPiA+ID4gPiA+ICsJCQlicmVhazsKPiA+ID4gPiA+ ID4gKwl9Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKwlyZXR1cm4gcmV0Owo+ID4gPiA+ID4g PiArfQo+ID4gPiA+ID4gPiArRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X2F0b21pY19jaGVjayk7 Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gK2NvbnN0IHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0 ZV9mdW5jcwo+ID4gPiA+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1bmNzID0KPiA+ ID4gPiA+ID4gewo+ID4gPiA+ID4gPiAgCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2Rw X21zdF9kdXBsaWNhdGVfc3RhdGUsCj4gPiA+ID4gPiA+ICAJLmF0b21pY19kZXN0cm95X3N0YXRl ID0gZHJtX2RwX21zdF9kZXN0cm95X3N0YXRlLAo+ID4gPiA+ID4gPiAgfTsKPiA+ID4gPiA+ID4g K0VYUE9SVF9TWU1CT0woZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZV9mdW5jcyk7Cj4gPiA+ID4g PiA+Cj4gPiA+ID4gPiA+ICAvKioKPiA+ID4gPiA+ID4gICAqIGRybV9hdG9taWNfZ2V0X21zdF90 b3BvbG9neV9zdGF0ZTogZ2V0IE1TVCB0b3BvbG9neSBzdGF0ZQo+ID4gPiA+ID4gPiBAQCAtMzIx NiwxMyArMzQ0NCwxMSBAQCBpbnQgZHJtX2RwX21zdF90b3BvbG9neV9tZ3JfaW5pdChzdHJ1Y3QK PiA+ID4gPiA+ID4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ID4gPiA+ID4gIAkJ cmV0dXJuIC1FTk9NRU07Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICAJbXN0X3N0YXRlLT5tZ3Ig PSBtZ3I7Cj4gPiA+ID4gPiA+IC0KPiA+ID4gPiA+ID4gLQkvKiBtYXguIHRpbWUgc2xvdHMgLSBv bmUgc2xvdCBmb3IgTVRQIGhlYWRlciAqLwo+ID4gPiA+ID4gPiAtCW1zdF9zdGF0ZS0+YXZhaWxf c2xvdHMgPSA2MzsKPiA+ID4gPiA+ID4gKwlJTklUX0xJU1RfSEVBRCgmbXN0X3N0YXRlLT52Y3Bp cyk7Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICAJZHJtX2F0b21pY19wcml2YXRlX29ial9pbml0 KCZtZ3ItPmJhc2UsCj4gPiA+ID4gPiA+ICAJCQkJICAgICZtc3Rfc3RhdGUtPmJhc2UsCj4gPiA+ ID4gPiA+IC0JCQkJICAgICZtc3Rfc3RhdGVfZnVuY3MpOwo+ID4gPiA+ID4gPiArCQkJCSAgICAm ZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZV9mdW5jcyk7Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ ICAJcmV0dXJuIDA7Cj4gPiA+ID4gPiA+ICB9Cj4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ID4gPiA+ID4gYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ID4gPiA+ID4gaW5kZXggMTMyZTk3ODIyN2Zi Li44ZTg1ZTA0YTU5NDggMTAwNjQ0Cj4gPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kaXNwbGF5LmMKPiA+ID4gPiA+ID4gQEAgLTEyNTkyLDYgKzEyNTkyLDEwIEBAIHN0 YXRpYyBpbnQgaW50ZWxfYXRvbWljX2NoZWNrKHN0cnVjdAo+ID4gPiA+ID4gPiBkcm1fZGV2aWNl Cj4gPiA+ID4gPiA+ICpkZXYsCj4gPiA+ID4gPiA+ICAJCQkJICAgICAgICJbbW9kZXNldF0iIDog IltmYXN0c2V0XSIpOwo+ID4gPiA+ID4gPiAgCX0KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gKwly ZXQgPSBkcm1fZHBfbXN0X2F0b21pY19jaGVjayhzdGF0ZSk7Cj4gPiA+ID4gPiA+ICsJaWYgKHJl dCkKPiA+ID4gPiA+ID4gKwkJcmV0dXJuIHJldDsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiAg CWlmIChhbnlfbXMpIHsKPiA+ID4gPiA+ID4gIAkJcmV0ID0gaW50ZWxfbW9kZXNldF9jaGVja3Mo c3RhdGUpOwo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMKPiA+ID4gPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcF9tc3QuYwo+ID4gPiA+ID4gPiBpbmRleCA0ZGUyNDdkZGYwNWYuLmJlMmQxYWM3 ZDg3ZCAxMDA2NDQKPiA+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHBfbXN0LmMKPiA+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBf bXN0LmMKPiA+ID4gPiA+ID4gQEAgLTQxLDggKzQxLDEzIEBAIHN0YXRpYyBib29sIGludGVsX2Rw X21zdF9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QKPiA+ID4gPiA+ID4gaW50ZWxfZW5jb2RlciAqZW5j b2RlciwKPiA+ID4gPiA+ID4gIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gY29u bl9zdGF0ZS0+Y29ubmVjdG9yOwo+ID4gPiA+ID4gPiAgCXZvaWQgKnBvcnQgPSB0b19pbnRlbF9j b25uZWN0b3IoY29ubmVjdG9yKS0+cG9ydDsKPiA+ID4gPiA+ID4gIAlzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUgPSBwaXBlX2NvbmZpZy0+YmFzZS5zdGF0ZTsKPiA+ID4gPiA+ID4gKwlz dHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBwaXBlX2NvbmZpZy0+YmFzZS5jcnRjOwo+ID4gPiA+ID4g PiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUgPQo+ID4gPiA+ID4gPiAr CQlkcm1fYXRvbWljX2dldF9vbGRfY3J0Y19zdGF0ZShzdGF0ZSwgY3J0Yyk7Cj4gPiA+ID4gPiA+ ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSA9ICZwaXBlX2NvbmZpZy0+ YmFzZTsKPiA+ID4gPiA+ID4gIAlpbnQgYnBwOwo+ID4gPiA+ID4gPiAtCWludCBsYW5lX2NvdW50 LCBzbG90cyA9IDA7Cj4gPiA+ID4gPiA+ICsJaW50IGxhbmVfY291bnQsIHNsb3RzID0KPiA+ID4g PiA+ID4gKwkJdG9faW50ZWxfY3J0Y19zdGF0ZShvbGRfY3J0Y19zdGF0ZSktPmRwX21fbi50dTsK PiA+ID4gPiA+ID4gIAljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9k ZSA9ICZwaXBlX2NvbmZpZy0KPiA+ID4gPiA+ID4gPiBiYXNlLmFkanVzdGVkX21vZGU7Cj4gPiA+ ID4gPiA+ICAJaW50IG1zdF9wYm47Cj4gPiA+ID4gPiA+ICAJYm9vbCBjb25zdGFudF9uID0gZHJt X2RwX2hhc19xdWlyaygmaW50ZWxfZHAtPmRlc2MsCj4gPiA+ID4gPiA+IEBAIC03Nyw4ICs4Miwx MiBAQCBzdGF0aWMgYm9vbCBpbnRlbF9kcF9tc3RfY29tcHV0ZV9jb25maWcoc3RydWN0Cj4gPiA+ ID4gPiA+IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gPiA+ID4gPiA+ICAJbXN0X3BibiA9IGRy bV9kcF9jYWxjX3Bibl9tb2RlKGFkanVzdGVkX21vZGUtPmNydGNfY2xvY2ssCj4gPiA+ID4gPiA+ IGJwcCk7Cj4gPiA+ID4gPiA+ICAJcGlwZV9jb25maWctPnBibiA9IG1zdF9wYm47Cj4gPiA+ID4g PiA+Cj4gPiA+ID4gPiA+IC0JLyogWm9tYmllIGNvbm5lY3RvcnMgY2FuJ3QgaGF2ZSBWQ1BJIHNs b3RzICovCj4gPiA+ID4gPiA+IC0JaWYgKCFkcm1fY29ubmVjdG9yX2lzX3VucmVnaXN0ZXJlZChj b25uZWN0b3IpKSB7Cj4gPiA+ID4gPiA+ICsJLyogT25seSBjaGFuZ2UgVkNQSSBhbGxvY2F0aW9u IG9uIGFjdHVhbCBtb2RlIGNoYW5nZXMsIHRvCj4gPiA+ID4gPiA+IHByZXZlbnQgdXMKPiA+ID4g PiA+ID4gKwkgKiBmcm9tIHRyeWluZyB0byBhbGxvY2F0ZSBWQ1BJIHRvIHBvcnRzIHRoYXQgbm8g bG9uZ2VyIGV4aXN0Cj4gPiA+ID4gPiA+IHdoZW4gd2UKPiA+ID4gPiA+ID4gKwkgKiBtYXkganVz dCBiZSB0cnlpbmcgdG8gZGlzYWJsZSBEUE1TIG9uIHRoZW0KPiA+ID4gPiA+ID4gKwkgKi8KPiA+ ID4gPiA+ID4gKwlpZiAobmV3X2NydGNfc3RhdGUtPm1vZGVfY2hhbmdlZCB8fAo+ID4gPiA+ID4g PiArCSAgICBuZXdfY3J0Y19zdGF0ZS0+Y29ubmVjdG9yc19jaGFuZ2VkKSB7Cj4gPiA+ID4gPgo+ ID4gPiA+ID4gV2h5IGV4YWN0bHkgaXMgdGhpcyBuZWVkZWQ/IFdlIG9ubHkgY2FsbCBjb21wdXRl X2NvbmZpZyBvbiB0aGUKPiA+ID4gPiA+IGVub2NvZGVyCj4gPiA+ID4gPiB3aGVuIGVuYWJsaW5n IGFuIG91dHB1dC4gTm90IHdoZW4gZGlzYWJsaW5nIG9uZS4gU2ltaWxhciBmb3IgdGhlCj4gPiA+ ID4gPiBhdG9taWMKPiA+ID4gPiA+IGhlbHBlcnMgYW5kIHRoZSB2YXJpb3VzIGVuY29kZXIgY2Fs bGJhY2tzICh5b3UgaGF2ZSB0aGUgc2FtZSBjaGFuZ2UgaW4KPiA+ID4gPiA+IHRoZQo+ID4gPiA+ ID4gbm91dmVhdSBjb2RlKS4gRGlkIHRoaXMgYWN0dWFsbHkgYmxvdyB1cCB3aGlsZSB0ZXN0aW5n Pwo+ID4gPiA+ID4KPiA+ID4gPiA+ID4gIAkJc2xvdHMgPSBkcm1fZHBfYXRvbWljX2ZpbmRfdmNw aV9zbG90cyhzdGF0ZSwKPiA+ID4gPiA+ID4gIAkJCQkJCSAgICAgICZpbnRlbF9kcC0KPiA+ID4g PiA+ID4gPm1zdF9tZ3IsCj4gPiA+ID4gPiA+ICAJCQkJCQkgICAgICBwb3J0LAo+ID4gPiA+ID4g PiBAQCAtMTA3LDM2ICsxMTYsMzkgQEAgc3RhdGljIGJvb2wgaW50ZWxfZHBfbXN0X2NvbXB1dGVf Y29uZmlnKHN0cnVjdAo+ID4gPiA+ID4gPiBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ID4gPiA+ ID4gPiAgCXJldHVybiB0cnVlOwo+ID4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gPgo+ID4gPiA+ID4g PiAtc3RhdGljIGludCBpbnRlbF9kcF9tc3RfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY29ubmVj dG9yCj4gPiA+ID4gPiA+ICpjb25uZWN0b3IsCj4gPiA+ID4gPiA+IC0JCXN0cnVjdCBkcm1fY29u bmVjdG9yX3N0YXRlICpuZXdfY29ubl9zdGF0ZSkKPiA+ID4gPiA+ID4gK3N0YXRpYyBpbnQKPiA+ ID4gPiA+ID4gK2ludGVsX2RwX21zdF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvciwKPiA+ID4gPiA+ID4gKwkJCSAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUg Km5ld19jb25uX3N0YXRlKQo+ID4gPiA+ID4gPiAgewo+ID4gPiA+ID4gPiArCXN0cnVjdCBpbnRl bF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvciA9Cj4gPiA+ID4gPiA+ICsJCXRvX2ludGVsX2Nv bm5lY3Rvcihjb25uZWN0b3IpOwo+ID4gPiA+ID4gPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X21nciAqbWdyID0KPiA+ID4gPiA+ID4gKwkJJmludGVsX2Nvbm5lY3Rvci0+bXN0X3BvcnQt Pm1zdF9tZ3I7Cj4gPiA+ID4gPiA+ICsJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCA9IGlu dGVsX2Nvbm5lY3Rvci0+cG9ydDsKPiA+ID4gPiA+ID4gIAlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUgPSBuZXdfY29ubl9zdGF0ZS0+c3RhdGU7Cj4gPiA+ID4gPiA+IC0Jc3RydWN0IGRy bV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlOwo+ID4gPiA+ID4gPiAtCXN0cnVjdCBk cm1fY3J0YyAqb2xkX2NydGM7Cj4gPiA+ID4gPiA+IC0Jc3RydWN0IGRybV9jcnRjX3N0YXRlICpj cnRjX3N0YXRlOwo+ID4gPiA+ID4gPiAtCWludCBzbG90cywgcmV0ID0gMDsKPiA+ID4gPiA+ID4g KwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGUgPQo+ID4gPiA+ID4g PiArCQlkcm1fYXRvbWljX2dldF9vbGRfY29ubmVjdG9yX3N0YXRlKHN0YXRlLCBjb25uZWN0b3Ip Owo+ID4gPiA+ID4gPiArCXN0cnVjdCBkcm1fY3J0YyAqb2xkX2NydGMgPSBvbGRfY29ubl9zdGF0 ZS0+Y3J0YywKPiA+ID4gPiA+ID4gKwkJCSpuZXdfY3J0YyA9IG5ld19jb25uX3N0YXRlLT5jcnRj Owo+ID4gPiA+ID4gPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUsICpu ZXdfY3J0Y19zdGF0ZTsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gLQlvbGRfY29ubl9zdGF0ZSA9 IGRybV9hdG9taWNfZ2V0X29sZF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUsCj4gPiA+ID4gPiA+IGNv bm5lY3Rvcik7Cj4gPiA+ID4gPiA+IC0Jb2xkX2NydGMgPSBvbGRfY29ubl9zdGF0ZS0+Y3J0YzsK PiA+ID4gPiA+Cj4gPiA+ID4gPiBCaWtlc2hlZDogUmV3b3JraW5nIGFsbCB0aGUgYWJvdmUgaGlk ZXMgdGhlIHJlYWwgY2hhbmdlcyBxdWl0ZSBhIGJpdC4KPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICAJ aWYgKCFvbGRfY3J0YykKPiA+ID4gPiA+ID4gLQkJcmV0dXJuIHJldDsKPiA+ID4gPiA+ID4gKwkJ cmV0dXJuIDA7Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IC0JY3J0Y19zdGF0ZSA9IGRybV9hdG9t aWNfZ2V0X25ld19jcnRjX3N0YXRlKHN0YXRlLCBvbGRfY3J0Yyk7Cj4gPiA+ID4gPiA+IC0Jc2xv dHMgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNydGNfc3RhdGUpLT5kcF9tX24udHU7Cj4gPiA+ID4g PiA+IC0JaWYgKGRybV9hdG9taWNfY3J0Y19uZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUpICYmIHNs b3RzID4gMCkgewo+ID4gPiA+ID4gPiAtCQlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3Ig Km1ncjsKPiA+ID4gPiA+ID4gLQkJc3RydWN0IGRybV9lbmNvZGVyICpvbGRfZW5jb2RlcjsKPiA+ ID4gPiA+ID4gKwlvbGRfY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X29sZF9jcnRjX3N0YXRl KHN0YXRlLAo+ID4gPiA+ID4gPiBvbGRfY3J0Yyk7Cj4gPiA+ID4gPiA+ICsJaWYgKCFvbGRfY3J0 Y19zdGF0ZSB8fAo+ID4gPiA+ID4KPiA+ID4gPiA+ICFvbGRfY3J0Y19zdGF0ZSB3b3VsZCBiZSBh IGZyYW1ld29yayBidWcuIEp1c3QgcmVtb3ZlIHRoYXQgY2hlY2suCj4gPiA+ID4gPgo+ID4gPiA+ ID4gPiArCSAgICAhdG9faW50ZWxfY3J0Y19zdGF0ZShvbGRfY3J0Y19zdGF0ZSktPmRwX21fbi50 dSkKPiA+ID4gPiA+ID4gKwkJcmV0dXJuIDA7Cj4gPiA+ID4gPgo+ID4gPiA+ID4gSG0sIHdoeSBk byB3ZSBuZWVkIHRoaXM/IEhhdmluZyBhIERQIHBvcnQgcHJldmlvdXNseSBlbmFibGVkIHdpdGgg YSAwCj4gPiA+ID4gPiB0dQo+ID4gPiA+ID4gc291bmRzIGxpa2UgYSBwcmV0dHkgYmlnIGRyaXZl ciBidWcuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IC0JCW9sZF9lbmNvZGVyID0gb2xkX2Nvbm5f c3RhdGUtPmJlc3RfZW5jb2RlcjsKPiA+ID4gPiA+ID4gLQkJbWdyID0gJmVuY190b19tc3Qob2xk X2VuY29kZXIpLT5wcmltYXJ5LT5kcC5tc3RfbWdyOwo+ID4gPiA+ID4gPiArCS8qIElmIHdlIHN3 aXRjaGVkIENSVENzLCBjbGVhciB0aGUgcHJldmlvdXMgb25lJ3MgYWxsb2NhdGlvbgo+ID4gPiA+ ID4gPiAqLwo+ID4gPiA+ID4gPiArCW5ld19jcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3 X2NydGNfc3RhdGUoc3RhdGUsCj4gPiA+ID4gPiA+IG9sZF9jcnRjKTsKPiA+ID4gPiA+ID4gKwlp ZiAobmV3X2NydGNfc3RhdGUtPmNvbm5lY3RvcnNfY2hhbmdlZCAmJiAhbmV3X2NydGNfc3RhdGUt Cj4gPiA+ID4gPiA+ID5lbmFibGUpCj4gPiA+ID4gPiA+ICsJCXRvX2ludGVsX2NydGNfc3RhdGUo bmV3X2NydGNfc3RhdGUpLT5kcF9tX24udHUgPSAwOwo+ID4gPiA+ID4KPiA+ID4gPiA+IE5vIGlk ZWEgd2h5IHdlIG5lZWQgdG8gY2xlYXIgdGhpcyBoZXJlPyBTaG91bGRuJ3Qgd2UganVzdCBjbGVh ciB0aGlzCj4gPiA+ID4gPiB1bmNvbmRpdGlvbmFsbHkgaWYgd2UgcmVsZWFzZSB0aGUgYWxsb2Nh dGlvbi4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBBbHNvIG5hbWluZyBjb252ZW50aW9uLCBJJ2QgY2Fs bCB0aGlzIG9sZF9jcnRjX25ld19zdGF0ZSwgYW5kIG1heWJlCj4gPiA+ID4gPiBvbGRfY3J0Y19v bGRfc3RhdGUuIFRvIG1ha2UgaXQgY2xlYXIgdGhlc2UgYXJlIHRoZSBvbGQvbmV3IHN0YXRlcyBm b3IKPiA+ID4gPiA+IG9sZF9jcnRjLiBJbnN0ZWFkIG9mIG9sZC9uZXcgc3RhdGUgZm9yIHRoZSBu ZXcgY3J0Yy4KPiA+ID4gPiA+Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IC0JCXJldCA9IGRybV9k cF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKHN0YXRlLCBtZ3IsCj4gPiA+ID4gPiA+IHNsb3Rz KTsKPiA+ID4gPiA+ID4gLQkJaWYgKHJldCkKPiA+ID4gPiA+ID4gLQkJCURSTV9ERUJVR19LTVMo ImZhaWxlZCByZWxlYXNpbmcgJWQgdmNwaQo+ID4gPiA+ID4gPiBzbG90czolZFxuIiwKPiA+ID4g PiA+ID4gc2xvdHMsIHJldCk7Cj4gPiA+ID4gPiA+IC0JCWVsc2UKPiA+ID4gPiA+ID4gLQkJCXRv X2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0ZSktPmRwX21fbi50dSA9Cj4gPiA+ID4gPiA+IDA7 Cj4gPiA+ID4gPiA+IC0JfQo+ID4gPiA+ID4gPiAtCXJldHVybiByZXQ7Cj4gPiA+ID4gPiA+ICsJ aWYgKG5ld19jcnRjKQo+ID4gPiA+ID4gPiArCQlyZXR1cm4gMDsKPiA+ID4gPiA+Cj4gPiA+ID4g PiBOb3Qgc3VyZSB3aHkgd2Ugc2hvdWxkbid0IHJlbGVhc2UgdGhpcz8gSWYgd2UgaGFuZGxlIHRo aXMgaW4gaGVscGVycywKPiA+ID4gPiA+IGl0Cj4gPiA+ID4gPiB3b3VsZCByZW1vdmUgcGlsZXMg b2Ygc3BlY2lhbCBjYXNpbmcgY29kZSBoZXJlIEkgdGhpbmsuIFBsdXMgcmVtb3ZlCj4gPiA+ID4g PiBzcGVjaWFsIGNvZGUgaW4gdGhlIGhscGVycy4KPiA+ID4gPiA+Cj4gPiA+ID4gPgo+ID4gPiA+ ID4gPiArCj4gPiA+ID4gPiA+ICsJcmV0dXJuIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Ns b3RzKHN0YXRlLCBtZ3IsIHBvcnQpOwo+ID4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gPgo+ID4gPiA+ ID4gPiAgc3RhdGljIHZvaWQgaW50ZWxfbXN0X2Rpc2FibGVfZHAoc3RydWN0IGludGVsX2VuY29k ZXIgKmVuY29kZXIsCj4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZHBf bXN0X2hlbHBlci5oCj4gPiA+ID4gPiA+IGIvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIu aAo+ID4gPiA+ID4gPiBpbmRleCAzZmFjZWI2NmY1Y2IuLjIzOTJlMTJiNmJjZSAxMDA2NDQKPiA+ ID4gPiA+ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+ID4gPiA+ID4g PiArKysgYi9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oCj4gPiA+ID4gPiA+IEBAIC00 MDYsOSArNDA2LDE2IEBAIHN0cnVjdCBkcm1fZHBfcGF5bG9hZCB7Cj4gPiA+ID4gPiA+Cj4gPiA+ ID4gPiA+ICAjZGVmaW5lIHRvX2RwX21zdF90b3BvbG9neV9zdGF0ZSh4KSBjb250YWluZXJfb2Yo eCwgc3RydWN0Cj4gPiA+ID4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUsIGJhc2UpCj4g PiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICtzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiB7Cj4g PiA+ID4gPgo+ID4gPiA+ID4gSSB0aGluayBhIGNvbW1lbnQgaGVyZSB0aGF0IHRoaXMgcG9pbnRl ciBob2xkcyBhIGZ1bGwgcmVmZXJlbmNlIChldmVuCj4gPiA+ID4gPiBwYXN0Cj4gPiA+ID4gPiB3 aGVuIHRoZSBjb25uZWN0b3IgaXMgdW5wbHVnZ2VkKSB3b3VsZCBiZSBnb29kLiBPdGhlcndpc2Ug dGhlIGxvb3AgaW4KPiA+ID4gPiA+IHJlbGVhc2VfdmNwaSB3b3VsZCBiZSBidWdneS4KPiA+ID4g PiA+Cj4gPiA+ID4gPiA+ICsJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydDsKPiA+ID4gPiA+ ID4gKwlpbnQgdmNwaTsKPiA+ID4gPiA+ID4gKwlzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7Cj4gPiA+ ID4gPiA+ICt9Owo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICBzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9zdGF0ZSB7Cj4gPiA+ID4gPiA+ICAJc3RydWN0IGRybV9wcml2YXRlX3N0YXRlIGJh c2U7Cj4gPiA+ID4gPiA+IC0JaW50IGF2YWlsX3Nsb3RzOwo+ID4gPiA+ID4gPiArCXN0cnVjdCBs aXN0X2hlYWQgdmNwaXM7Cj4gPiA+ID4gPiA+ICsJdTggdmNwaV9hbGxvY2F0ZWQ7Cj4gPiA+ID4g PiA+ICAJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7Cj4gPiA+ID4gPiA+ICB9 Owo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBAQCAtNjE5LDE0ICs2MjYsMTcgQEAgdm9pZCBkcm1f ZHBfbXN0X3RvcG9sb2d5X21ncl9zdXNwZW5kKHN0cnVjdAo+ID4gPiA+ID4gPiBkcm1fZHBfbXN0 X3RvcG9sb2d5X21nciAqbWdyKTsKPiA+ID4gPiA+ID4gIGludCBkcm1fZHBfbXN0X3RvcG9sb2d5 X21ncl9yZXN1bWUoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyCj4gPiA+ID4gPiA+ICpt Z3IpOwo+ID4gPiA+ID4gPiAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUKPiA+ID4g PiA+ID4gKmRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUsCj4gPiA+ID4gPiA+ICAJCQkJCQkJCSAgICBzdAo+ID4gPiA+ID4gPiBy dWN0Cj4gPiA+ID4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpOwo+ID4gPiA+ID4g PiAtaW50IGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZSwKPiA+ID4gPiA+ID4gLQkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X21nciAqbWdyLAo+ID4gPiA+ID4gPiAtCQkJCSAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9y dCwgaW50Cj4gPiA+ID4gPiA+IHBibik7Cj4gPiA+ID4gPiA+IC1pbnQgZHJtX2RwX2F0b21pY19y ZWxlYXNlX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUKPiA+ID4gPiA+ID4gKnN0 YXRlLAo+ID4gPiA+ID4gPiAtCQkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdy Cj4gPiA+ID4gPiA+ICptZ3IsCj4gPiA+ID4gPiA+IC0JCQkJICAgICBpbnQgc2xvdHMpOwo+ID4g PiA+ID4gPiAraW50IF9fbXVzdF9jaGVjawo+ID4gPiA+ID4gPiArZHJtX2RwX2F0b21pY19maW5k X3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiA+ID4gPiAr CQkJICAgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ID4gPiA+ ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBpbnQgcGJuKTsKPiA+ID4g PiA+ID4gK2ludCBfX211c3RfY2hlY2sKPiA+ID4gPiA+ID4gK2RybV9kcF9hdG9taWNfcmVsZWFz ZV92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ID4gPiA+ID4g KwkJCQkgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ID4gPiA+ICsJ CQkJIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOwo+ID4gPiA+ID4gPiAgaW50IGRybV9k cF9zZW5kX3Bvd2VyX3VwZG93bl9waHkoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyCj4g PiA+ID4gPiA+ICptZ3IsCj4gPiA+ID4gPiA+ICAJCQkJIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQg KnBvcnQsIGJvb2wKPiA+ID4gPiA+ID4gcG93ZXJfdXApOwo+ID4gPiA+ID4gPiAraW50IF9fbXVz dF9jaGVjayBkcm1fZHBfbXN0X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZQo+ ID4gPiA+ID4gPiAqc3RhdGUpOwo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAgZXh0ZXJuIGNvbnN0 IHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcwo+ID4gPiA+ID4gPiBkcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlX2Z1bmNzOwo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAtLQo+ID4gPiA+ID4g PiAyLjE5LjEKPiA+ID4gPiA+ID4KPiA+ID4gPiA+Cj4gPiA+ID4gPiAtLQo+ID4gPiA+ID4gRGFu aWVsIFZldHRlcgo+ID4gPiA+ID4gU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9u Cj4gPiA+ID4gPiBodHRwOi8vYmxvZy5mZndsbC5jaAo+ID4gPiAtLQo+ID4gPiBDaGVlcnMsCj4g PiA+IAlMeXVkZSBQYXVsCj4gPiA+Cj4gLS0KPiBDaGVlcnMsCj4gCUx5dWRlIFBhdWwKPiAKCi0t IApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRw Oi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmkt ZGV2ZWwK