From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: Re: [PATCH v6 3/6] drm/dp_mst: Start tracking per-port VCPI allocations Date: Tue, 27 Nov 2018 20:44:14 -0500 Message-ID: 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: In-Reply-To: <20181127194452.GE4266@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCAyMDE4LTExLTI3IGF0IDIwOjQ0ICswMTAwLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ IE9uIFR1ZSwgTm92IDI3LCAyMDE4IGF0IDEyOjQ4OjU5UE0gLTA1MDAsIEx5dWRlIFBhdWwgd3Jv dGU6Cj4gPiBPbiBNb24sIDIwMTgtMTEtMjYgYXQgMjI6MjIgKzAxMDAsIERhbmllbCBWZXR0ZXIg d3JvdGU6Cj4gPiA+IE9uIE1vbiwgTm92IDI2LCAyMDE4IGF0IDEwOjA0OjIxUE0gKzAxMDAsIERh bmllbCBWZXR0ZXIgd3JvdGU6Cj4gPiA+ID4gT24gVGh1LCBOb3YgMTUsIDIwMTggYXQgMDc6NTA6 MDVQTSAtMDUwMCwgTHl1ZGUgUGF1bCB3cm90ZToKPiA+ID4gPiA+IFRoZXJlIGhhcyBiZWVuIGEg VE9ETyB3YWl0aW5nIGZvciBxdWl0ZSBhIGxvbmcgdGltZSBpbgo+ID4gPiA+ID4gZHJtX2RwX21z dF90b3BvbG9neS5jOgo+ID4gPiA+ID4KPiA+ID4gPiA+IAkvKiBXZSBjYW5ub3QgcmVseSBvbiBw b3J0LT52Y3BpLm51bV9zbG90cyB0byB1cGRhdGUKPiA+ID4gPiA+IAkgKiB0b3BvbG9neV9zdGF0 ZS0+YXZhaWxfc2xvdHMgYXMgdGhlIHBvcnQgbWF5IG5vdCBleGlzdCBpZgo+ID4gPiA+ID4gdGhl IHBhcmVudAo+ID4gPiA+ID4gCSAqIGJyYW5jaCBkZXZpY2Ugd2FzIHVucGx1Z2dlZC4gVGhpcyBz aG91bGQgYmUgZml4ZWQgYnkKPiA+ID4gPiA+IHRyYWNraW5nCj4gPiA+ID4gPiAJICogcGVyLXBv cnQgc2xvdCBhbGxvY2F0aW9uIGluIGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUKPiA+ID4gPiA+ IGluc3RlYWQgb2YKPiA+ID4gPiA+IAkgKiBkZXBlbmRpbmcgb24gdGhlIGNhbGxlciB0byB0ZWxs IHVzIGhvdyBtYW55IHNsb3RzIHRvCj4gPiA+ID4gPiByZWxlYXNlLgo+ID4gPiA+ID4gCSAqLwo+ ID4gPiA+ID4KPiA+ID4gPiA+IFRoYXQncyBub3QgdGhlIG9ubHkgcmVhc29uIHdlIHNob3VsZCBm aXggdGhpczogZm9yY2luZyB0aGUgZHJpdmVyIHRvCj4gPiA+ID4gPiB0cmFjayB0aGUgVkNQSSBh bGxvY2F0aW9ucyB0aHJvdWdob3V0IGEgc3RhdGUncyBhdG9taWMgY2hlY2sgaXMKPiA+ID4gPiA+ IGVycm9yIHByb25lLCBiZWNhdXNlIGl0IG1lYW5zIHRoYXQgZXh0cmEgY2FyZSBoYXMgdG8gYmUg dGFrZW4gd2l0aAo+ID4gPiA+ID4gdGhlCj4gPiA+ID4gPiBvcmRlciB0aGF0IGRybV9kcF9hdG9t aWNfZmluZF92Y3BpX3Nsb3RzKCkgYW5kCj4gPiA+ID4gPiBkcm1fZHBfYXRvbWljX3JlbGVhc2Vf dmNwaV9zbG90cygpIGFyZSBjYWxsZWQgaW4gaW4gb3JkZXIgdG8gZW5zdXJlCj4gPiA+ID4gPiBp ZGVtcG90ZW5jeS4gQ3VycmVudGx5IHRoZSBvbmx5IGRyaXZlciBhY3R1YWxseSB1c2luZyB0aGVz ZSBoZWxwZXJzLAo+ID4gPiA+ID4gaTkxNSwgZG9lc24ndCBldmVuIGRvIHRoaXMgY29ycmVjdGx5 OiBtdWx0aXBsZSAtPmJlc3RfZW5jb2RlcigpCj4gPiA+ID4gPiBjaGVja3MKPiA+ID4gPiA+IHdp dGggaTkxNSdzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gd291bGQgbm90IGJlIGlkZW1wb3RlbnQg YW5kIHdvdWxkCj4gPiA+ID4gPiBvdmVyLWFsbG9jYXRlIFZDUEkgc2xvdHMsIHNvbWV0aGluZyBJ IGxlYXJuZWQgdHJ5aW5nIHRvIGltcGxlbWVudAo+ID4gPiA+ID4gZmFsbGJhY2sgcmV0cmFpbmlu ZyBpbiBNU1QuCj4gPiA+ID4gPgo+ID4gPiA+ID4gU286IHNpbXBsaWZ5IHRoaXMgd2hvbGUgbWVz cywgYW5kIHRlYWNoCj4gPiA+ID4gPiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpCj4g PiA+ID4gPiBhbmQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSB0byB0cmFjayB0 aGUgVkNQSSBhbGxvY2F0aW9ucwo+ID4gPiA+ID4gZm9yCj4gPiA+ID4gPiBlYWNoIHBvcnQuIFRo aXMgYWxsb3dzIHVzIHRvIGVuc3VyZSBpZGVtcG90ZW5jeSB3aXRob3V0IGhhdmluZyB0bwo+ID4g PiA+ID4gcmVseQo+ID4gPiA+ID4gb24gdGhlIGRyaXZlciBhcyBtdWNoLiBBZGRpdGlvbmFsbHk6 IHRoZSBkcml2ZXIgZG9lc24ndCBuZWVkIHRvIGRvCj4gPiA+ID4gPiBhbnkKPiA+ID4gPiA+IGtp bmQgb2YgVkNQSSBzbG90IHRyYWNraW5nIGFueW1vcmUgaWYgaXQgZG9lc24ndCBuZWVkIGl0IGZv ciBpdCdzCj4gPiA+ID4gPiBvd24KPiA+ID4gPiA+IGludGVybmFsIHN0YXRlLgo+ID4gPiA+ID4K PiA+ID4gPiA+IEFkZGl0aW9uYWxseTsgdGhpcyBhZGRzIGEgbmV3IGRybV9kcF9tc3RfYXRvbWlj X2NoZWNrKCkgaGVscGVyIHdoaWNoCj4gPiA+ID4gPiBtdXN0IGJlIHVzZWQgYnkgYXRvbWljIGRy aXZlcnMgdG8gcGVyZm9ybSB2YWxpZGl0eSBjaGVja3MgZm9yIHRoZQo+ID4gPiA+ID4gbmV3Cj4g PiA+ID4gPiBWQ1BJIGFsbG9jYXRpb25zIGluY3VycmVkIGJ5IGEgc3RhdGUuCj4gPiA+ID4gPgo+ ID4gPiA+ID4gQWxzbzogdXBkYXRlIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBtYWtlIGl0IG1vcmUg b2J2aW91cyB0aGF0IHRoZXNlCj4gPiA+ID4gPiAvbXVzdC8gYmUgY2FsbGVkIGJ5IC9hbGwvIGF0 b21pYyBkcml2ZXJzIHN1cHBvcnRpbmcgTVNULgo+ID4gPiA+ID4KPiA+ID4gPiA+IENoYW5nZXMg c2luY2UgdjY6Cj4gPiA+ID4gPiAgLSBLZWVwIGEga3JlZiB0byBhbGwgb2YgdGhlIHBvcnRzIHdl IGhhdmUgYWxsb2NhdGlvbnMgb24uIFRoaXMKPiA+ID4gPiA+IHJlcXVpcmVkCj4gPiA+ID4gPiAg ICBhIGdvb2QgYml0IG9mIGNoYW5naW5nIHRvIHdoZW4gd2UgY2FsbCBkcm1fZHBfZmluZF92Y3Bp X3Nsb3RzKCksCj4gPiA+ID4gPiAgICBtYWlubHkgdGhhdCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0 IHdlIG9ubHkgcmVkbyBWQ1BJIGFsbG9jYXRpb25zCj4gPiA+ID4gPiBvbgo+ID4gPiA+ID4gICAg YWN0dWFsIG1vZGUgb3IgQ1JUQyBjaGFuZ2VzLCBub3QgY3J0Y19zdGF0ZS0+YWN0aXZlIGNoYW5n ZXMuCj4gPiA+ID4gPiAgICBBZGRpdGlvbmFsbHksIHdlIG5vIGxvbmdlciB0YWtlIHRoZSByZWdp c3RyYXRpb24gb2YgdGhlIERSTQo+ID4gPiA+ID4gY29ubmVjdG9yCj4gPiA+ID4gPiAgICBmb3Ig ZWFjaCBwb3J0IGludG8gYWNjb3VudCBiZWNhdXNlIHNvIGxvbmcgYXMgd2UgaGF2ZSBhIGtyZWYg dG8KPiA+ID4gPiA+IHRoZQo+ID4gPiA+ID4gICAgcG9ydCBpbiB0aGUgbmV3IG9yIHByZXZpb3Vz IGF0b21pYyBzdGF0ZSwgdGhlIGNvbm5lY3RvciB3aWxsIHN0YXkKPiA+ID4gPiA+ICAgIHJlZ2lz dGVyZWQuCj4gPiA+ID4KPiA+ID4gPiBJIHdyaXRlIGFuIGVudGlyZSBwaWxlIG9mIHNtYWxsIG5p dHBpdHMgKHN0aWxsIGluY2x1ZGVkIG1vc3Qgb2YgdGhlbQo+ID4gPiA+IGJlbG93KSwgdW50aWwg SSByZWFsaXplZCB0aGlzIGhlcmUgd29udCB3b3JrLiBEZWxheWluZyB0aGUgY2FsbCB0bwo+ID4g PiA+IGRlc3Ryb3kKPiA+ID4gPiB0aGUgY29ubmVjdG9yICh3ZWxsLCB1bnJlZ2lzdGVyIGl0IHJl YWxseSkgd3JlYWtzIHRoZSBkZXNpZ24gd2UndmUKPiA+ID4gPiBjb21lIHVwCj4gPiA+ID4gd2l0 aCB0aHVzIGZhciwgcmVzdWx0aW5nIGluIG1vc3Qgb2YgbXkgY29tbWVudHMgaGVyZS4KPiA+ID4g Pgo+ID4gPiA+IEluc3RlYWQsIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIGRlbGF5IHRoZSBrZnJlZShw b3J0KSBhdCB0aGUgYm90dG9tIG9mCj4gPiA+ID4gZHJtX2RwX2Rlc3Ryb3lfcG9ydCgpLiBUaGUg dmNwaSBhbGxvY2F0aW9uIHN0cnVjdHVyZSBfb25seV8gbmVlZHMgdGhlCj4gPiA+ID4gcG9pbnRl ciB2YWx1ZSB0byBzdGF5IHZhbGlkLCBhcyBhIGxvb2t1cCBrZXkuIEl0IGRvZXNuJ3QgY2FyZSBh dCBhbGwKPiA+ID4gPiBhYm91dAo+ID4gPiA+IGFueXRoaW5nIGFjdHVhbGx5IHN0b3JlZCBpbiB0 aGVyZS4gU28gdGhlIG9ubHkgdGhpbmcgd2UgbmVlZCB0byBkZWxheQo+ID4gPiA+IGlzCj4gPiA+ ID4gdGhlIGtmcmVlLiBJIHRoaW5rIHRoZSBzaW1wbGVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlz IHRvIGFkZCBhIDJuZAo+ID4gPiA+IGtyZWYKPiA+ID4gPiAocG9ydC0+a2ZyZWVfcmVmIG9yIHNv bWV0aGluZyBsaWtlIHRoYXQpLCB3aXRoIG9uIHJlZmVyZW5jZSBoZWxkIGJ5Cj4gPiA+ID4gdGhl Cj4gPiA+ID4gcG9ydCBpdHNlbGYgKHJlbGVhc2VkIGluIGRybV9kcF9kZXN0cm95X3BvcnQpLCBh bmQgdGhlIG90aGVyIG9uZSBoZWxkCj4gPiA+ID4gYXMtbmVlZGVkIGJ5IHRoZSB2Y3BpIGFsbG9j YXRpb24gbGlzdHMuCj4gPiA+ID4KPiA+ID4gPiBJIHRoaW5rIGlmIHdlIGdvIHdpdGggdGhpcyBk ZXNpZ24gaW5zdGVhZCBvZiByZXRyb2ZpdHRpbmcgYSBzZW1hbnRpYwo+ID4gPiA+IGNoYW5nZSBv ZiB0aGUgcG9ydCBsaWZldGltZSBpdHNlbGYsIGFsbCB0aGUgY29tcGxpY2F0aW9ucyBJIGNvbXBs YWluCj4gPiA+ID4gYWJvdXQKPiA+ID4gPiBiZWxvdyBzaG91bGQgZGlzYXBwZWFyLgo+ID4gPgo+ ID4gPiBJbiB0aGUgYWJvdmUgSSBtZWFudCBkcm1fZHBfZGVzdHJveV9wb3J0IG9yCj4gPiA+IGRy bV9kcF9kZXN0cm95X2Nvbm5lY3Rvcl93b3JrLgo+ID4gPgo+ID4gPiBBc2lkZTogSSB0aGluayBj cmVhdGluZyBhIGtyZWYgZm9yIHRoZSBmaW5hbCBrZnJlZSB3b3VsZCBhbHNvIHNvbHZlIGEKPiA+ ID4gYnVuY2ggb2Ygb3RoZXIgaXNzdWVzIGluIGEgbXVjaCBuZWF0ZXIgd2F5OiBJbgo+ID4gPgo+ ID4gPiBjb21taXQgZjAzOGM1Yjk5ZmMxMzMyZjU1OGI0OTVkMTM2ZDRmNDMzZWU2NWNhYQo+ID4g PiBBdXRob3I6IEx5dWRlIFBhdWwgPGx5dWRlQHJlZGhhdC5jb20+Cj4gPiA+IERhdGU6ICAgVHVl IE5vdiAxMyAxNzo0NjoxNCAyMDE4IC0wNTAwCj4gPiA+Cj4gPiA+ICAgICBkcm0vZHBfbXN0OiBT a2lwIHZhbGlkYXRpbmcgcG9ydHMgZHVyaW5nIGRlc3RydWN0aW9uLCBqdXN0IHJlZgo+ID4gPgo+ ID4gPiB3ZSBjb3VsZCB1c2UgdGhhdCBrZnJlZSByZWZlcmVuY2UgdG8gbWFrZSBzdXJlIHRoZSBw b3J0IHBvaW50ZXIgaXMKPiA+ID4gYWxpdmUuCj4gPiA+IFRoaXMgb2YgY291cnNlIG1lYW5zIHRo YXQgZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQxKCkgd291bGQgYWxzbyBuZWVkCj4gPiA+IHRv Cj4gPiA+IHVzZSB0aGUga2ZyZWUgcmVmZXJlbmNlIGZvciB0aGUgdmNwaSBhbGxvY2F0aW9ucy4g QW5kIHByb2JhYmx5Cj4gPiA+IGV2ZXJ5d2hlcmUKPiA+ID4gZWxzZSAoZS5nLiBpbiB5b3VyIG5v dXZlYXUgc2VyaWVzIGZvciBwYXlsb2FkIGluZm9ybWF0aW9uKS4KPiA+ID4KPiA+ID4gVGhhdCB3 b3VsZCBnaXZlIHVzIGEgdmVyeSBjbGVhciBzZXBhcmF0aW9uIG92ZXJhbGwgYmV0d2VlbiAicG9y dCBjYW4KPiA+ID4gc3RpbGwKPiA+ID4gYmUgdXNlZCBiZWNhdXNlIGl0J3Mgbm90IHlldCB1bnBs dWdnZWQiIHZzLiAicG9ydCBvbmx5IGhhbmdzIGFyb3VuZAo+ID4gPiBiZWNhdXNlIGEgYnVuY2gg b2YgdmNwaSBhbGxvY2F0aW9ucyBhbmQgb3RoZXIgcGF5bG9hZCB0aGluZ3MgdXBzdHJlYW0gb2YK PiA+ID4gdGhlIHBvcnQgbWlnaHQgc3RpbGwgbmVlZCB0aGUgcG9ydCBsb29rdXAga2V5IHRvIGZy ZWUgcmVzb3VyY2VzIi4KPiA+ID4gSW5zdGVhZAo+ID4gPiBvZiBhZ2FpbiBzcHJpbmtsaW5nIGNv bXBsaWNhdGVkIGNvbmRpdGlvbnMgYW5kIG1hZ2ljIHRyaWNrcyBhbGwgb3ZlciB0aGUKPiA+ID4g Y29kZSB0byBmaWd1cmUgb3V0IHdoZXRoZSB3ZSBzaG91bGQgYWxsb3cgdGhlIGdldF92YWxpZGF0 ZV9wb3J0IHRvCj4gPiA+IHN1Y2NlZWQKPiA+ID4gb3Igbm90LCBvciB0aGUgbW9kZXNldCB0byBz dWNjZWVkIG9yIG5vdC4KPiA+Cj4gPiBtaG0sIEkndmUgYmVlbiBleHBlcmltZW50aW5nIHdpdGgg dGhpcyBhbmQgSSB0aGluayBJIGFncmVlIHRoaXMgaXMKPiA+IGRlZmluaXRlbHkKPiA+IHRoZSBy aWdodCBzb2x1dGlvbiB0byBnbyB3aXRoLiBJdCdsbCBlbmQgdXAgZGVjb21wbGljYXRpbmcgYSBs b3Qgb2YgdGhpcwo+ID4gOikKPgo+IFNpbmNlIGl0IGxvb2tzIGxpa2Ugd2UnbGwgdXNlIHRoZSBr ZnJlZV9yZWYgcXVpdGUgYSBiaXQsIHdyYXBwZXJzIGZvciB0aGF0Cj4gd291bGQgYmUgdXNlZnVs LiBTdGlsbCBub3Qgc3VyZSB3aGF0IHRvIGNhbGwgdGhvc2UsIGJlc3QgSSBjb3VsZCBjb21lIHVw Cj4gd2l0aCBpcyBkcF9wb3J0X21hbGxvY19nZXQvcHV0LiBQbHVzIGEgY29tbWVudCBleHBsYWlu aW5nIHdoYXQgaXQgZG9lcy4KPiBJdCdzIGdvaW5nIHRvIGJlIGEgYml0IG9mIHd0Zi1pcy10aGlz IG5vIG1hdHRlciB3aGF0IDotLwo+IC1EYW5pZWwKCldlIGNvdWxkIGRvIHRoaXMgdGhlIG90aGVy IHdheSBhcm91bmQgc28gaXQgbG9va3MgbGlrZSB0aGlzIG1heWJlCgpzdHJ1Y3Qga3JlZjsgLyog bWFuYWdlcyBrZnJlZSgpICovCnN0cnVjdCB0b3BvbG9neV9rcmVmOyAvKiBjb3JyZXNvbmRzIHRv IGxpZmV0aW1lIGluIHRvcG9sb2d5ICovCgpUaGVuIG9ubHkgZXhwb3NlIGZ1bmN0aW9ucyBmb3Ig dGhlIG5vcm1hbCBrcmVmIHRvIGRyaXZlcnMsIHNvIHRoYXQgYW55CnBvc3NpYmxlIGNvbmZ1c2lv biBpcyBzdGlsbCBsaW1pdGVkIHRvIGRybV9kcF9tc3RfdG9wb2xvZ3kuYwoKPgo+ID4gPiAtRGFu aWVsCj4gPiA+Cj4gPiA+ID4gUGlsZXMgb2YgY29tbWVudHMgYmVsb3cuCj4gPiA+ID4KPiA+ID4g PiBDaGVlcnMsIERhbmllbAo+ID4gPiA+Cj4gPiA+ID4gPiAgLSBVc2UgdGhlIHNtYWxsIGNoYW5n ZXMgdG8gZHJtX2RwX3B1dF9wb3J0KCkgdG8gYWRkIGV2ZW4gbW9yZSBlcnJvcgo+ID4gPiA+ID4g ICAgY2hlY2tpbmcgdG8gbWFrZSBtaXN1c2FnZSBvZiB0aGUgaGVscGVycyBtb3JlIG9idmlvdXMu IEkgYWRkZWQKPiA+ID4gPiA+IHRoaXMKPiA+ID4gPiA+ICAgIGFmdGVyIGhhdmluZyB0byBjaGFz ZSBkb3duIHZhcmlvdXMgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB0aGF0Cj4gPiA+ID4gPiAg ICBzdGFydGVkIHBvcHBpbmcgdXAgZnJvbSB0aGUgbmV3IGhlbHBlcnMgc28gbm8gb25lIGVsc2Ug aGFzIHRvCj4gPiA+ID4gPiAgICB0cm91Ymxlc2hvb3QgdGhhdC4KPiA+ID4gPiA+ICAtIE1vdmUg c29tZSBhY2NpZGVudGFsIERSTV9ERUJVR19LTVMoKSBjYWxscyB0byBEUk1fREVCVUdfQVRPTUlD KCkKPiA+ID4gPiA+ICAtIFVwZGF0ZSBkb2N1bWVudGF0aW9uIGFnYWluLCBub3RlIHRoYXQgZmlu ZC9yZWxlYXNlKCkgc2hvdWxkIGJvdGgKPiA+ID4gPiA+IG5vdAo+ID4gPiA+ID4gYmUKPiA+ID4g PiA+ICAgIGNhbGxlZCBvbiB0aGUgc2FtZSBwb3J0IGluIGEgc2luZ2xlIGF0b21pYyBjaGVjayBw aGFzZSAoYnV0Cj4gPiA+ID4gPiBtdWx0aXBsZQo+ID4gPiA+ID4gICAgY2FsbHMgdG8gb25lIG9y IHRoZSBvdGhlciBpcyBPSykKPiA+ID4gPiA+Cj4gPiA+ID4gPiBDaGFuZ2VzIHNpbmNlIHY0Ogo+ ID4gPiA+ID4gIC0gRG9uJ3Qgc2tpcCB0aGUgYXRvbWljIGNoZWNrcyBmb3IgVkNQSSBhbGxvY2F0 aW9ucyBpZiBubyBuZXcgVkNQSQo+ID4gPiA+ID4gICAgYWxsb2NhdGlvbnMgaGFwcGVuIGluIGEg c3RhdGUuIFRoaXMgbWFrZXMgdGhlIG5leHQgY2hhbmdlIEknbQo+ID4gPiA+ID4gYWJvdXQKPiA+ ID4gPiA+ICAgIHRvIGxpc3QgaGVyZSBhIGxvdCBlYXNpZXIgdG8gaW1wbGVtZW50Lgo+ID4gPiA+ ID4gIC0gRG9uJ3QgaWdub3JlIFZDUEkgYWxsb2NhdGlvbnMgb24gZGVzdHJveWVkIHBvcnRzLCBp bnN0ZWFkIGVuc3VyZQo+ID4gPiA+ID4gdGhhdAo+ID4gPiA+ID4gICAgd2hlbiBwb3J0cyBhcmUg ZGVzdHJveWVkIGFuZCBzdGlsbCBoYXZlIFZDUEkgYWxsb2NhdGlvbnMgaW4gdGhlCj4gPiA+ID4g PiAgICB0b3BvbG9neSBzdGF0ZSwgdGhlIG9ubHkgc3RhdGUgY2hhbmdlcyBhbGxvd2VkIGFyZSBy ZWxlYXNpbmcgc2FpZAo+ID4gPiA+ID4gICAgcG9ydHMnIFZDUEkuIFRoaXMgcHJldmVudHMgYSBz dGF0ZSB3aXRoIGEgbWl4IG9mIFZDUEkgYWxsb2NhdGlvbnMKPiA+ID4gPiA+ICAgIGZyb20gZGVz dHJveWVkIHBvcnRzLCBhbmQgYWxsb2NhdGlvbnMgZnJvbSB2YWxpZCBwb3J0cy4KPiA+ID4gPiA+ Cj4gPiA+ID4gPiBDaGFuZ2VzIHNpbmNlIHYzOgo+ID4gPiA+ID4gIC0gRG9uJ3QgcmVsZWFzZSBW Q1BJIGFsbG9jYXRpb25zIGluIHRoZSB0b3BvbG9neSBzdGF0ZSBpbW1lZGlhdGVseQo+ID4gPiA+ ID4gaW4KPiA+ID4gPiA+ICAgIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCksIGlu c3RlYWQgbWFyayB0aGVtIGFzIDAgYW5kCj4gPiA+ID4gPiBza2lwCj4gPiA+ID4gPiAgICBvdmVy IHRoZW0gaW4gZHJtX2RwX21zdF9kdXBsaWNhdGVfc3RhdGUoKS4gVGhpcyBtYWtlcyBpdCBzbwo+ ID4gPiA+ID4gICAgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSBpcyBzdGlsbCBp ZGVtcG90ZW50IHdoaWxlIGFsc28KPiA+ID4gPiA+ICAgIHRocm93aW5nIHdhcm5pbmdzIGlmIHRo ZSBkcml2ZXIgbWVzc2VzIHVwIGl0J3MgYm9vayBrZWVwaW5nIGFuZAo+ID4gPiA+ID4gdHJpZXMK PiA+ID4gPiA+ICAgIHRvIHJlbGVhc2UgVkNQSSBzbG90cyBvbiBhIHBvcnQgdGhhdCBkb2Vzbid0 IGhhdmUgYW55IHByZS0KPiA+ID4gPiA+IGV4aXN0aW5nCj4gPiA+ID4gPiAgICBWQ1BJIGFsbG9j YXRpb24gLSBkYW52ZXQKPiA+ID4gPiA+ICAtIENoYW5nZSBtc3Rfc3RhdGUvc3RhdGUgaW4gc29t ZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG8gIm1zdCBzdGF0ZSIKPiA+ID4gPiA+Cj4gPiA+ID4gPiBD aGFuZ2VzIHNpbmNlIHYyOgo+ID4gPiA+ID4gIC0gVXNlIGttZW1kdXAoKSBmb3IgZHVwbGljYXRp bmcgTVNUIHN0YXRlIC0gZGFudmV0Cj4gPiA+ID4gPiAgLSBNb3ZlIHBvcnQgdmFsaWRhdGlvbiBv dXQgb2YgZHVwbGljYXRlIHN0YXRlIGNhbGxiYWNrIC0gZGFudmV0Cj4gPiA+ID4gPiAgLSBIYW5k bGUgbG9vcGluZyB0aHJvdWdoIE1TVCB0b3BvbG9neSBzdGF0ZXMgaW4KPiA+ID4gPiA+ICAgIGRy bV9kcF9tc3RfYXRvbWljX2NoZWNrKCkgc28gdGhlIGRyaXZlciBkb2Vzbid0IGhhdmUgdG8gZG8g aXQKPiA+ID4gPiA+ICAtIEZpeCBkb2N1bWVudGF0aW9uIGluIGRybV9kcF9hdG9taWNfZmluZF92 Y3BpX3Nsb3RzKCkKPiA+ID4gPiA+ICAtIE1vdmUgdGhlIGF0b21pYyBjaGVjayBmb3IgZWFjaCBp bmRpdmlkdWFsIHRvcG9sb2d5IHN0YXRlIGludG8KPiA+ID4gPiA+IGl0J3MKPiA+ID4gPiA+ICAg IG93biBmdW5jdGlvbiwgcmVkdWNlcyBpbmRlbnRpbmcKPiA+ID4gPiA+ICAtIERvbid0IGNvbnNp ZGVyICJzdGFsZSIgTVNUIHBvcnRzIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGJhbmR3aWR0aAo+ID4g PiA+ID4gICAgcmVxdWlyZW1lbnRzLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIG9yaWdpbmFsbHkg d2UgcmVsaWVkIG9uIHRoZQo+ID4gPiA+ID4gICAgc3RhdGUgZHVwbGljYXRpb24gZnVuY3Rpb25z IHRvIHBydW5lIGFueSBzdGFsZSBwb3J0cyBmcm9tIHRoZSBuZXcKPiA+ID4gPiA+ICAgIHN0YXRl LCB3aGljaCB3b3VsZCBwcmV2ZW50IHVzIGZyb20gaW5jb3JyZWN0bHkgY29uc2lkZXJpbmcgdGhl aXIKPiA+ID4gPiA+ICAgIGJhbmR3aWR0aCByZXF1aXJlbWVudHMgYWxvbmdzaWRlIGxlZ2l0aW1h dGUgbmV3IHBheWxvYWRzLgo+ID4gPiA+ID4gIC0gQWRkIGZ1bmN0aW9uIHJlZmVyZW5jZXMgaW4g ZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSAtCj4gPiA+ID4gPiBkYW52ZXQKPiA+ ID4gPiA+ICAtIEFubm90YXRlIGF0b21pYyBWQ1BJIGFuZCBhdG9taWMgY2hlY2sgZnVuY3Rpb25z IHdpdGggX19tdXN0X2NoZWNrCj4gPiA+ID4gPiAgICAtIGRhbnZldAo+ID4gPiA+ID4KPiA+ID4g PiA+IENoYW5nZXMgc2luY2UgdjE6Cj4gPiA+ID4gPiAgLSBEb24ndCB1c2UgdGhlIG5vdy1yZW1v dmVkIC0+YXRvbWljX2NoZWNrKCkgZm9yIHByaXZhdGUgb2JqZWN0cwo+ID4gPiA+ID4gaG9vaywK PiA+ID4gPiA+ICAgIGp1c3QgZ2l2ZSBkcml2ZXJzIGEgZnVuY3Rpb24gdG8gY2FsbCB0aGVtc2Vs dmVzCj4gPiA+ID4gPgo+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogTHl1ZGUgUGF1bCA8bHl1ZGVA cmVkaGF0LmNvbT4KPiA+ID4gPiA+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZm d2xsLmNoPgo+ID4gPiA+ID4gLS0tCj4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2RybV9kcF9t c3RfdG9wb2xvZ3kuYyB8IDI5NAo+ID4gPiA+ID4gKysrKysrKysrKysrKysrKysrKysrKystLS0K PiA+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgIHwgICA0ICsK PiA+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYyAgIHwgIDY0ICsr Ky0tLQo+ID4gPiA+ID4gIGluY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmggICAgICAgfCAg MjQgKystCj4gPiA+ID4gPiAgNCBmaWxlcyBjaGFuZ2VkLCAzMTkgaW5zZXJ0aW9ucygrKSwgNjcg ZGVsZXRpb25zKC0pCj4gPiA+ID4gPgo+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKPiA+ID4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9kcF9tc3RfdG9wb2xvZ3kuYwo+ID4gPiA+ID4gaW5kZXggMDBmYmU3YTI2OTlkLi4xODNkMGU4 MzJjZWQgMTAwNjQ0Cj4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90 b3BvbG9neS5jCj4gPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3Bv bG9neS5jCj4gPiA+ID4gPiBAQCAtMjYxNywyMSArMjYxNyw0MiBAQCBzdGF0aWMgaW50IGRybV9k cF9pbml0X3ZjcGkoc3RydWN0Cj4gPiA+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdy LAo+ID4gPiA+ID4gIH0KPiA+ID4gPiA+Cj4gPiA+ID4gPiAgLyoqCj4gPiA+ID4gPiAtICogZHJt X2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKSAtIEZpbmQgYW5kIGFkZCB2Y3BpIHNsb3RzIHRv IHRoZQo+ID4gPiA+ID4gc3RhdGUKPiA+ID4gPiA+ICsgKiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNw aV9zbG90cygpIC0gRmluZCBhbmQgYWRkIFZDUEkgc2xvdHMgdG8gdGhlCj4gPiA+ID4gPiBzdGF0 ZQo+ID4gPiA+ID4gICAqIEBzdGF0ZTogZ2xvYmFsIGF0b21pYyBzdGF0ZQo+ID4gPiA+ID4gICAq IEBtZ3I6IE1TVCB0b3BvbG9neSBtYW5hZ2VyIGZvciB0aGUgcG9ydAo+ID4gPiA+ID4gICAqIEBw b3J0OiBwb3J0IHRvIGZpbmQgdmNwaSBzbG90cyBmb3IKPiA+ID4gPiA+ICAgKiBAcGJuOiBiYW5k d2lkdGggcmVxdWlyZWQgZm9yIHRoZSBtb2RlIGluIFBCTgo+ID4gPiA+ID4gICAqCj4gPiA+ID4g PiAtICogUkVUVVJOUzoKPiA+ID4gPiA+IC0gKiBUb3RhbCBzbG90cyBpbiB0aGUgYXRvbWljIHN0 YXRlIGFzc2lnbmVkIGZvciB0aGlzIHBvcnQgb3IgZXJyb3IKPiA+ID4gPiA+ICsgKiBBbGxvY2F0 ZXMgVkNQSSBzbG90cyB0byBAcG9ydCwgcmVwbGFjaW5nIGFueSBwcmV2aW91cyBWQ1BJCj4gPiA+ ID4gPiBhbGxvY2F0aW9ucyBpdAo+ID4gPiA+ID4gKyAqIG1heSBoYXZlIGhhZC4gQW55IGF0b21p YyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbAo+ID4gPiA+ID4gdGhpcwo+ID4g PiA+ID4gZnVuY3Rpb24KPiA+ID4gPiA+ICsgKiBpbiB0aGVpciAmZHJtX2VuY29kZXJfaGVscGVy X2Z1bmNzLmF0b21pY19jaGVjaygpIGNhbGxiYWNrIHRvCj4gPiA+ID4gPiBjaGFuZ2UKPiA+ID4g PiA+IHRoZQo+ID4gPiA+ID4gKyAqIGN1cnJlbnQgVkNQSSBhbGxvY2F0aW9uIGZvciB0aGUgbmV3 IHN0YXRlLCBidXQgb25seSB3aGVuCj4gPiA+ID4gPiArICogJmRybV9jcnRjX3N0YXRlLm1vZGVf Y2hhbmdlZCBvcgo+ID4gPiA+ID4gJmRybV9jcnRjX3N0YXRlLmNvbm5lY3RvcnNfY2hhbmdlZAo+ ID4gPiA+ID4gaXMgc2V0Cj4gPiA+ID4gPiArICogdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0 aCB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIHRoYXQgc3RpbGwKPiA+ID4gPiA+IHVzZQo+ID4gPiA+ ID4gdGhlCj4gPiA+ID4gPiArICogbGVnYWN5IG1vZGVzZXR0aW5nIFVBUEkuCj4gPiA+ID4gPiAr ICoKPiA+ID4gPiA+ICsgKiBBbGxvY2F0aW9ucyBzZXQgYnkgdGhpcyBmdW5jdGlvbiBhcmUgbm90 IGNoZWNrZWQgYWdhaW5zdCB0aGUKPiA+ID4gPiA+IGJhbmR3aWR0aAo+ID4gPiA+ID4gKyAqIHJl c3RyYWludHMgb2YgQG1nciB1bnRpbCB0aGUgZHJpdmVyIGNhbGxzCj4gPiA+ID4gPiBkcm1fZHBf bXN0X2F0b21pY19jaGVjaygpLgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogQWRkaXRpb25h bGx5LCBpdCBpcyBPSyB0byBjYWxsIHRoaXMgZnVuY3Rpb24gbXVsdGlwbGUgdGltZXMgb24KPiA+ ID4gPiA+IHRoZQo+ID4gPiA+ID4gc2FtZQo+ID4gPiA+ID4gKyAqIEBwb3J0IGFzIG5lZWRlZC4g SXQgaXMgbm90IE9LIGhvd2V2ZXIsIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBhbmQKPiA+ID4gPiA+ ICsgKiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIGluIHRoZSBzYW1lIGF0b21p YyBjaGVjawo+ID4gPiA+ID4gcGhhc2UuCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBTZWUg YWxzbzoKPiA+ID4gPiA+ICsgKiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpCj4g PiA+ID4gPiArICogZHJtX2RwX21zdF9hdG9taWNfY2hlY2soKQo+ID4gPiA+ID4gKyAqCj4gPiA+ ID4gPiArICogUmV0dXJuczoKPiA+ID4gPiA+ICsgKiBUb3RhbCBzbG90cyBpbiB0aGUgYXRvbWlj IHN0YXRlIGFzc2lnbmVkIGZvciB0aGlzIHBvcnQsIG9yIGEKPiA+ID4gPiA+IG5lZ2F0aXZlIGVy cm9yCj4gPiA+ID4gPiArICogY29kZSBpZiB0aGUgcG9ydCBubyBsb25nZXIgZXhpc3RzCj4gPiA+ ID4gPiAgICovCj4gPiA+ID4gPiAgaW50IGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ID4gPiA+ICAJCQkJICBzdHJ1Y3QgZHJt X2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ID4gPiA+ICAJCQkJICBzdHJ1Y3QgZHJtX2Rw X21zdF9wb3J0ICpwb3J0LCBpbnQKPiA+ID4gPiA+IHBibikKPiA+ID4gPiA+ICB7Cj4gPiA+ID4g PiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICp0b3BvbG9neV9zdGF0ZTsKPiA+ ID4gPiA+IC0JaW50IHJlcV9zbG90czsKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9kcF92Y3BpX2Fs bG9jYXRpb24gKnBvcywgKnZjcGkgPSBOVUxMOwo+ID4gPiA+ID4gKwlpbnQgcHJldl9zbG90cywg cmVxX3Nsb3RzLCByZXQ7Cj4gPiA+ID4gPgo+ID4gPiA+ID4gIAl0b3BvbG9neV9zdGF0ZSA9IGRy bV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSwKPiA+ID4gPiA+IG1ncik7Cj4g PiA+ID4gPiAgCWlmIChJU19FUlIodG9wb2xvZ3lfc3RhdGUpKQo+ID4gPiA+ID4gQEAgLTI2NDAs MjAgKzI2NjEsNjAgQEAgaW50IGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKHN0cnVjdAo+ ID4gPiA+ID4gZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiA+ID4gPiAgCXBvcnQgPSBkcm1f ZHBfZ2V0X3ZhbGlkYXRlZF9wb3J0X3JlZihtZ3IsIHBvcnQpOwo+ID4gPiA+ID4gIAlpZiAocG9y dCA9PSBOVUxMKQo+ID4gPiA+ID4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gPiAtCXJlcV9z bG90cyA9IERJVl9ST1VORF9VUChwYm4sIG1nci0+cGJuX2Rpdik7Cj4gPiA+ID4gPiAtCURSTV9E RUJVR19LTVMoInZjcGkgc2xvdHMgcmVxPSVkLCBhdmFpbD0lZFxuIiwKPiA+ID4gPiA+IC0JCQly ZXFfc2xvdHMsIHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyk7Cj4gPiA+ID4gPgo+ID4gPiA+ ID4gLQlpZiAocmVxX3Nsb3RzID4gdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzKSB7Cj4gPiA+ ID4gPiAtCQlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gPiA+ID4gPiAtCQlyZXR1cm4gLUVOT1NQ QzsKPiA+ID4gPiA+ICsJdG9wb2xvZ3lfc3RhdGUtPnZjcGlfYWxsb2NhdGVkID0gdHJ1ZTsKPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICsJLyogRmluZCB0aGUgY3VycmVudCBhbGxvY2F0aW9uIGZvciB0 aGlzIHBvcnQsIGlmIGFueSAqLwo+ID4gPiA+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywg JnRvcG9sb2d5X3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ID4gPiA+ID4gKwkJaWYgKHBvcy0+cG9y dCA9PSBwb3J0KSB7Cj4gPiA+ID4gPiArCQkJdmNwaSA9IHBvczsKPiA+ID4gPiA+ICsJCQlwcmV2 X3Nsb3RzID0gdmNwaS0+dmNwaTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJCQkvKgo+ID4gPiA+ ID4gKwkJCSAqIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgdW5sZXNzIHRoZSBkcml2ZXIKPiA+ ID4gPiA+IHRyaWVzCj4gPiA+ID4gPiArCQkJICogcmVsZWFzaW5nIGFuZCBhbGxvY2F0aW5nIHRo ZSBzYW1lIFZDUEkKPiA+ID4gPiA+IGFsbG9jYXRpb24sCj4gPiA+ID4gPiArCQkJICogd2hpY2gg aXMgYW4gZXJyb3IKPiA+ID4gPiA+ICsJCQkgKi8KPiA+ID4gPiA+ICsJCQlpZiAoV0FSTl9PTigh cHJldl9zbG90cykpIHsKPiA+ID4gPiA+ICsJCQkJRFJNX0VSUk9SKCJjYW5ub3QgYWxsb2NhdGUg YW5kIHJlbGVhc2UKPiA+ID4gPiA+IFZDUEkgb24KPiA+ID4gPiA+IFtNU1QgUE9SVDolcF0gaW4g dGhlIHNhbWUgc3RhdGVcbiIsCj4gPiA+ID4gPiArCQkJCQkgIHBvcnQpOwo+ID4gPiA+ID4gKwkJ CQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiA+ICsJCQl9Cj4gPiA+ID4KPiA+ID4gPiBBbGxvd2lu ZyBhdG9taWMgY2hhbmdlcyB0byBvdXRwdXQgc3RhdGUgKGxpa2UgZGlzYWJsaW5nIGl0IG9uIG9u ZQo+ID4gPiA+IGNydGMsCj4gPiA+ID4gYW5kIHRoZW4gZW5hYmxpbmcgb24gdGhlIG90aGVyLCB0 aHVzIGJvdGggcmVsZWFzaW5nIGFuZCByZS1hbGxvY2F0aW5nCj4gPiA+ID4gdGhlCj4gPiA+ID4g dmNwaSBpbiBvbmUgZ28pIGlzIGtpbmRhIHRoZSBwb2ludCBvZiBhdG9taWMuIFNvIGRlZmluaXRl bHkgY2FuJ3QKPiA+ID4gPiBFSU5WQUwKPiA+ID4gPiBoZXJlLgo+ID4gPiA+Cj4gPiA+ID4gU291 bmRzIGxpa2Ugd2UgbmVlZCBtb3JlIHRlc3RjYXNlcyBpbiBpZ3Q/Cj4gPiA+ID4KPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ICsJCQlicmVhazsKPiA+ID4gPiA+ICsJCX0KPiA+ID4gPiA+ICAJfQo+ID4g PiA+ID4gKwlpZiAoIXZjcGkpCj4gPiA+ID4gPiArCQlwcmV2X3Nsb3RzID0gMDsKPiA+ID4gPiA+ Cj4gPiA+ID4gPiAtCXRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyAtPSByZXFfc2xvdHM7Cj4g PiA+ID4gPiAtCURSTV9ERUJVR19LTVMoInZjcGkgc2xvdHMgYXZhaWw9JWQiLCB0b3BvbG9neV9z dGF0ZS0KPiA+ID4gPiA+ID5hdmFpbF9zbG90cyk7Cj4gPiA+ID4gPiArCXJlcV9zbG90cyA9IERJ Vl9ST1VORF9VUChwYm4sIG1nci0+cGJuX2Rpdik7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCURS TV9ERUJVR19BVE9NSUMoIltDT05ORUNUT1I6JWQ6JXNdIFtNU1QgUE9SVDolcF0gVkNQSSAlZCAt Pgo+ID4gPiA+ID4gJWRcbiIsCj4gPiA+ID4gPiArCQkJIHBvcnQtPmNvbm5lY3Rvci0+YmFzZS5p ZCwgcG9ydC0+Y29ubmVjdG9yLQo+ID4gPiA+ID4gPm5hbWUsCj4gPiA+ID4gPiArCQkJIHBvcnQs IHByZXZfc2xvdHMsIHJlcV9zbG90cyk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCS8qIEFkZCB0 aGUgbmV3IGFsbG9jYXRpb24gdG8gdGhlIHN0YXRlICovCj4gPiA+ID4gPiArCWlmICghdmNwaSkg ewo+ID4gPiA+ID4gKwkJdmNwaSA9IGt6YWxsb2Moc2l6ZW9mKCp2Y3BpKSwgR0ZQX0tFUk5FTCk7 Cj4gPiA+ID4gPiArCQlpZiAoIXZjcGkpIHsKPiA+ID4gPiA+ICsJCQlyZXQgPSAtRU5PTUVNOwo+ ID4gPiA+ID4gKwkJCWdvdG8gb3V0Owo+ID4gPiA+ID4gKwkJfQo+ID4gPiA+ID4KPiA+ID4gPiA+ ICsJCXZjcGktPnBvcnQgPSBkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9wb3J0X3JlZihtZ3IsIHBvcnQp Owo+ID4gPiA+ID4gKwkJaWYgKCF2Y3BpLT5wb3J0KSB7Cj4gPiA+ID4gPiArCQkJcmV0ID0gLUVJ TlZBTDsKPiA+ID4gPiA+ICsJCQlrZnJlZSh2Y3BpKTsKPiA+ID4gPiA+ICsJCQlnb3RvIG91dDsK PiA+ID4gPiA+ICsJCX0KPiA+ID4gPiA+ICsJCWxpc3RfYWRkKCZ2Y3BpLT5uZXh0LCAmdG9wb2xv Z3lfc3RhdGUtPnZjcGlzKTsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwl2Y3BpLT52Y3BpID0g cmVxX3Nsb3RzOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXQgPSByZXFfc2xvdHM7Cj4gPiA+ ID4gPiArb3V0Ogo+ID4gPiA+ID4gIAlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gPiA+ID4gPiAt CXJldHVybiByZXFfc2xvdHM7Cj4gPiA+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ID4gPiAgfQo+ ID4gPiA+ID4gIEVYUE9SVF9TWU1CT0woZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMpOwo+ ID4gPiA+ID4KPiA+ID4gPiA+IEBAIC0yNjYxLDMxICsyNzIyLDY2IEBACj4gPiA+ID4gPiBFWFBP UlRfU1lNQk9MKGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKTsKPiA+ID4gPiA+ICAgKiBk cm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIC0gUmVsZWFzZSBhbGxvY2F0ZWQgdmNw aQo+ID4gPiA+ID4gc2xvdHMKPiA+ID4gPiA+ICAgKiBAc3RhdGU6IGdsb2JhbCBhdG9taWMgc3Rh dGUKPiA+ID4gPiA+ICAgKiBAbWdyOiBNU1QgdG9wb2xvZ3kgbWFuYWdlciBmb3IgdGhlIHBvcnQK PiA+ID4gPiA+IC0gKiBAc2xvdHM6IG51bWJlciBvZiB2Y3BpIHNsb3RzIHRvIHJlbGVhc2UKPiA+ ID4gPiA+ICsgKiBAcG9ydDogVGhlIHBvcnQgdG8gcmVsZWFzZSB0aGUgVkNQSSBzbG90cyBmcm9t Cj4gPiA+ID4gPiAgICoKPiA+ID4gPiA+IC0gKiBSRVRVUk5TOgo+ID4gPiA+ID4gLSAqIDAgaWYg QHNsb3RzIHdlcmUgYWRkZWQgYmFjayB0byAmZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZS0KPiA+ ID4gPiA+ID4gYXZhaWxfc2xvdHMgb3IKPiA+ID4gPiA+IC0gKiBuZWdhdGl2ZSBlcnJvciBjb2Rl Cj4gPiA+ID4gPiArICogUmVsZWFzZXMgYW55IFZDUEkgc2xvdHMgdGhhdCBoYXZlIGJlZW4gYWxs b2NhdGVkIHRvIGEgcG9ydCBpbgo+ID4gPiA+ID4gdGhlCj4gPiA+ID4gPiBhdG9taWMKPiA+ID4g PiA+ICsgKiBzdGF0ZS4gQW55IGF0b21pYyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3Qg Y2FsbCB0aGlzCj4gPiA+ID4gPiBmdW5jdGlvbgo+ID4gPiA+ID4gaW4KPiA+ID4gPiA+ICsgKiB0 aGVpciAmZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MuYXRvbWljX2NoZWNrKCkgY2FsbGJhY2sg d2hlbgo+ID4gPiA+ID4gdGhlCj4gPiA+ID4gPiArICogY29ubmVjdG9yIHdpbGwgbm8gbG9uZ2Vy IGhhdmUgVkNQSSBhbGxvY2F0ZWQgKGUuZy4gYmVjYXVzZSBpdCdzCj4gPiA+ID4gPiBDUlRDCj4g PiA+ID4gPiB3YXMKPiA+ID4gPiA+ICsgKiByZW1vdmVkKSB3aGVuIGl0IGhhZCBWQ1BJIGFsbG9j YXRlZCBpbiB0aGUgcHJldmlvdXMgYXRvbWljCj4gPiA+ID4gPiBzdGF0ZS4KPiA+ID4gPiA+ICsg Kgo+ID4gPiA+ID4gKyAqIEl0IGlzIE9LIHRvIGNhbGwgdGhpcyBldmVuIGlmIEBwb3J0IGhhcyBi ZWVuIHJlbW92ZWQgZnJvbSB0aGUKPiA+ID4gPiA+IHN5c3RlbS4KPiA+ID4gPiA+ICsgKiBBZGRp dGlvbmFsbHksIGl0IGlzIE9LIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcyBv bgo+ID4gPiA+ID4gdGhlCj4gPiA+ID4gPiBzYW1lCj4gPiA+ID4gPiArICogQHBvcnQgYXMgbmVl ZGVkLiBJdCBpcyBub3QgT0sgaG93ZXZlciwgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGFuZAo+ID4g PiA+ID4gKyAqIGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkgb24gdGhlIHNhbWUgQHBv cnQgaW4gYSBzaW5nbGUKPiA+ID4gPiA+IGF0b21pYwo+ID4gPiA+ID4gY2hlY2sKPiA+ID4gPiA+ ICsgKiBwaGFzZS4KPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAqIFNlZSBhbHNvOgo+ID4gPiA+ ID4gKyAqIGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkKPiA+ID4gPiA+ICsgKiBkcm1f ZHBfbXN0X2F0b21pY19jaGVjaygpCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsgKiBSZXR1cm5z Ogo+ID4gPiA+ID4gKyAqIDAgaWYgYWxsIHNsb3RzIGZvciB0aGlzIHBvcnQgd2VyZSBhZGRlZCBi YWNrIHRvCj4gPiA+ID4gPiArICogJmRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUuYXZhaWxfc2xv dHMgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQo+ID4gPiA+ID4gICAqLwo+ID4gPiA+ID4gIGludCBk cm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZQo+ ID4gPiA+ID4gKnN0YXRlLAo+ID4gPiA+ID4gIAkJCQkgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21ncgo+ID4gPiA+ID4gKm1nciwKPiA+ID4gPiA+IC0JCQkJICAgICBpbnQgc2xvdHMp Cj4gPiA+ID4gPiArCQkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkKPiA+ID4g PiA+ICB7Cj4gPiA+ID4gPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICp0b3Bv bG9neV9zdGF0ZTsKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gKnBv czsKPiA+ID4gPiA+ICsJYm9vbCBmb3VuZCA9IGZhbHNlOwo+ID4gPiA+ID4KPiA+ID4gPiA+ICAJ dG9wb2xvZ3lfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUoc3RhdGUs Cj4gPiA+ID4gPiBtZ3IpOwo+ID4gPiA+ID4gIAlpZiAoSVNfRVJSKHRvcG9sb2d5X3N0YXRlKSkK PiA+ID4gPiA+ICAJCXJldHVybiBQVFJfRVJSKHRvcG9sb2d5X3N0YXRlKTsKPiA+ID4gPiA+Cj4g PiA+ID4gPiAtCS8qIFdlIGNhbm5vdCByZWx5IG9uIHBvcnQtPnZjcGkubnVtX3Nsb3RzIHRvIHVw ZGF0ZQo+ID4gPiA+ID4gLQkgKiB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMgYXMgdGhlIHBv cnQgbWF5IG5vdCBleGlzdCBpZgo+ID4gPiA+ID4gdGhlIHBhcmVudAo+ID4gPiA+ID4gLQkgKiBi cmFuY2ggZGV2aWNlIHdhcyB1bnBsdWdnZWQuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGJ5Cj4gPiA+ ID4gPiB0cmFja2luZwo+ID4gPiA+ID4gLQkgKiBwZXItcG9ydCBzbG90IGFsbG9jYXRpb24gaW4g ZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZQo+ID4gPiA+ID4gaW5zdGVhZCBvZgo+ID4gPiA+ID4g LQkgKiBkZXBlbmRpbmcgb24gdGhlIGNhbGxlciB0byB0ZWxsIHVzIGhvdyBtYW55IHNsb3RzIHRv Cj4gPiA+ID4gPiByZWxlYXNlLgo+ID4gPiA+ID4gLQkgKi8KPiA+ID4gPiA+IC0JdG9wb2xvZ3lf c3RhdGUtPmF2YWlsX3Nsb3RzICs9IHNsb3RzOwo+ID4gPiA+ID4gLQlEUk1fREVCVUdfS01TKCJ2 Y3BpIHNsb3RzIHJlbGVhc2VkPSVkLCBhdmFpbD0lZFxuIiwKPiA+ID4gPiA+IC0JCQlzbG90cywg dG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzKTsKPiA+ID4gPiA+ICsJbGlzdF9mb3JfZWFjaF9l bnRyeShwb3MsICZ0b3BvbG9neV9zdGF0ZS0+dmNwaXMsIG5leHQpIHsKPiA+ID4gPiA+ICsJCWlm IChwb3MtPnBvcnQgPT0gcG9ydCkgewo+ID4gPiA+ID4gKwkJCWZvdW5kID0gdHJ1ZTsKPiA+ID4g PiA+ICsJCQlicmVhazsKPiA+ID4gPiA+ICsJCX0KPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwlp ZiAoV0FSTl9PTighZm91bmQpKSB7Cj4gPiA+ID4gPiArCQlEUk1fRVJST1IoIm5vIFZDUEkgZm9y IFtNU1QgUE9SVDolcF0gZm91bmQgaW4gbXN0Cj4gPiA+ID4gPiBzdGF0ZSAlcFxuIiwKPiA+ID4g PiA+ICsJCQkgIHBvcnQsICZ0b3BvbG9neV9zdGF0ZS0+YmFzZSk7Cj4gPiA+ID4gPiArCQlyZXR1 cm4gLUVJTlZBTDsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlEUk1fREVC VUdfQVRPTUlDKCJbTVNUIFBPUlQ6JXBdIFZDUEkgJWQgLT4gMFxuIiwgcG9ydCwgcG9zLQo+ID4g PiA+ID4gPnZjcGkpOwo+ID4gPiA+ID4gKwlpZiAocG9zLT52Y3BpKSB7Cj4gPiA+ID4gPiArCQkv Kgo+ID4gPiA+ID4gKwkJICogVGhpcyBzaG91bGQgYmUgc2FmZS1hcyB0aGUgcHJldmlvdXMgc3Rh dGUgd2lsbAo+ID4gPiA+ID4gc3RpbGwgaG9sZCBhCj4gPiA+ID4gPiArCQkgKiByZWZlcmVuY2Ug dG8gdGhpcyBwb3J0IHVudGlsIHdlIHN3YXAgc3RhdGVzLiBJZgo+ID4gPiA+ID4gaXQncyBub3Qs Cj4gPiA+ID4gPiArCQkgKiB0aGUgZHJpdmVyIGhhcyBhIGJvb2trZWVwaW5nIGVycm9yCj4gPiA+ ID4gPiArCQkgKi8KPiA+ID4gPiA+ICsJCWlmIChXQVJOX09OKGRybV9kcF9wdXRfcG9ydChwb3J0 KSkpIHsKPiA+ID4gPgo+ID4gPiA+IFRoZSB1c3VhbCB3YXkgdG8gZG8gdGhpcyAoaW5zdGVhZCBv ZiBhZGRpbmcgYSByZXR1cm4gdmFsdWUgdG8gdGhlCj4gPiA+ID4gbm9ybWFsCj4gPiA+ID4gX3B1 dCBmdW5jdGlvbikgaXMgc29tZXRoaW5nIGxpa2UKPiA+ID4gPgo+ID4gPiA+IAlrcmVmX3B1dChw b3J0LCBmdW5jdGlvbl90aGF0X3dpdGhfanVzdF9hX1dBUk5JTkdfRFJNX0VSUk9SKQo+ID4gPiA+ Cj4gPiA+ID4gYXZvaWRzIHRoZSBuZWVkIGZvciBwYXRjaCAyLgo+ID4gPiA+Cj4gPiA+ID4gPiAr CQkJRFJNX0VSUk9SKCJjYW5ub3QgYWxsb2NhdGUgYW5kIHJlbGVhc2UgVkNQSSBvbgo+ID4gPiA+ ID4gW01TVAo+ID4gPiA+ID4gUE9SVDolcF0gaW4gdGhlIHNhbWUgc3RhdGVcbiIsCj4gPiA+ID4g PiArCQkJCSAgcG9ydCk7Cj4gPiA+ID4gPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gPiAr CQl9Cj4gPiA+ID4gPiArCQlwb3MtPnZjcGkgPSAwOwo+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPgo+ ID4gPiA+ID4gIAlyZXR1cm4gMDsKPiA+ID4gPiA+ICB9Cj4gPiA+ID4gPiBAQCAtMzExNSwxNSAr MzIxMSw0NSBAQCBzdGF0aWMgdm9pZAo+ID4gPiA+ID4gZHJtX2RwX2Rlc3Ryb3lfY29ubmVjdG9y X3dvcmsoc3RydWN0Cj4gPiA+ID4gPiB3b3JrX3N0cnVjdCAqd29yaykKPiA+ID4gPiA+ICBzdGF0 aWMgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlICoKPiA+ID4gPiA+ICBkcm1fZHBfbXN0X2R1cGxp Y2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqICpvYmopCj4gPiA+ID4gPiAgewo+ID4g PiA+ID4gLQlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqc3RhdGU7Cj4gPiA+ID4g PiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICpzdGF0ZSwgKm9sZF9zdGF0ZSA9 Cj4gPiA+ID4gPiArCQl0b19kcF9tc3RfdG9wb2xvZ3lfc3RhdGUob2JqLT5zdGF0ZSk7Cj4gPiA+ ID4gPiArCXN0cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0aW9uICpwb3MsICp2Y3BpOwo+ID4gPiA+ ID4KPiA+ID4gPiA+IC0Jc3RhdGUgPSBrbWVtZHVwKG9iai0+c3RhdGUsIHNpemVvZigqc3RhdGUp LCBHRlBfS0VSTkVMKTsKPiA+ID4gPiA+ICsJc3RhdGUgPSBrbWVtZHVwKG9sZF9zdGF0ZSwgc2l6 ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOwo+ID4gPiA+ID4gIAlpZiAoIXN0YXRlKQo+ID4gPiA+ ID4gIAkJcmV0dXJuIE5VTEw7Cj4gPiA+ID4gPgo+ID4gPiA+ID4gIAlfX2RybV9hdG9taWNfaGVs cGVyX3ByaXZhdGVfb2JqX2R1cGxpY2F0ZV9zdGF0ZShvYmosICZzdGF0ZS0KPiA+ID4gPiA+ID5i YXNlKTsKPiA+ID4gPiA+Cj4gPiA+ID4gPiArCUlOSVRfTElTVF9IRUFEKCZzdGF0ZS0+dmNwaXMp Owo+ID4gPiA+ID4gKwlzdGF0ZS0+dmNwaV9hbGxvY2F0ZWQgPSBmYWxzZTsKPiA+ID4gPiA+ICsK PiA+ID4gPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZvbGRfc3RhdGUtPnZjcGlzLCBu ZXh0KSB7Cj4gPiA+ID4gPiArCQkvKiBQcnVuZSBsZWZ0b3ZlciBmcmVlZCBWQ1BJIGFsbG9jYXRp b25zICovCj4gPiA+ID4gPiArCQlpZiAoIXBvcy0+dmNwaSkKPiA+ID4gPiA+ICsJCQljb250aW51 ZTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJCXZjcGkgPSBrbWVtZHVwKHBvcywgc2l6ZW9mKCp2 Y3BpKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ID4gPiArCQlpZiAoIXZjcGkpCj4gPiA+ID4gPiArCQkJ Z290byBmYWlsOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkJLyogVGFrZSBhIHBsYWluIG9sZCBr cmVmIGhlcmUgYW5kIGRvbid0IHZhbGlkYXRlIHRoZQo+ID4gPiA+ID4gcG9ydCwgYXMKPiA+ID4g PiA+ICsJCSAqIGl0J3MgdG9wb2xvZ3kgbWlnaHQgbm90IGV2ZW4gZXhpc3QgYW55bW9yZQo+ID4g PiA+ID4gKwkJICovCj4gPiA+ID4gPiArCQlrcmVmX2dldCgmdmNwaS0+cG9ydC0+a3JlZik7Cj4g PiA+ID4gPiArCQlsaXN0X2FkZCgmdmNwaS0+bmV4dCwgJnN0YXRlLT52Y3Bpcyk7Cj4gPiA+ID4g PiArCX0KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICAJcmV0dXJuICZzdGF0ZS0+YmFzZTsKPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICtmYWlsOgo+ID4gPiA+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUocG9zLCB2Y3BpLCAmc3RhdGUtPnZjcGlzLCBuZXh0KSB7Cj4gPiA+ID4gPiArCQlkcm1fZHBf cHV0X3BvcnQocG9zLT5wb3J0KTsKPiA+ID4gPiA+ICsJCWtmcmVlKHBvcyk7Cj4gPiA+ID4gPiAr CX0KPiA+ID4gPiA+ICsJa2ZyZWUoc3RhdGUpOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXR1 cm4gTlVMTDsKPiA+ID4gPiA+ICB9Cj4gPiA+ID4gPgo+ID4gPiA+ID4gIHN0YXRpYyB2b2lkIGRy bV9kcF9tc3RfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqICpvYmosCj4gPiA+ ID4gPiBAQCAtMzEzMSwxNCArMzI1NywxMTYgQEAgc3RhdGljIHZvaWQgZHJtX2RwX21zdF9kZXN0 cm95X3N0YXRlKHN0cnVjdAo+ID4gPiA+ID4gZHJtX3ByaXZhdGVfb2JqICpvYmosCj4gPiA+ID4g PiAgewo+ID4gPiA+ID4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0 YXRlID0KPiA+ID4gPiA+ICAJCXRvX2RwX21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSk7Cj4gPiA+ ID4gPiArCXN0cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0aW9uICpwb3MsICp0bXA7Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIHRtcCwgJm1zdF9z dGF0ZS0+dmNwaXMsIG5leHQpIHsKPiA+ID4gPiA+ICsJCS8qIFdlIG9ubHkga2VlcCByZWZlcmVu Y2VzIHRvIHBvcnRzIHdpdGggbm9uLXplcm8KPiA+ID4gPiA+IFZDUElzICovCj4gPiA+ID4gPiAr CQlpZiAocG9zLT52Y3BpKQo+ID4gPiA+ID4gKwkJCWRybV9kcF9wdXRfcG9ydChwb3MtPnBvcnQp Owo+ID4gPiA+ID4gKwkJa2ZyZWUocG9zKTsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4KPiA+ID4g PiA+ICAJa2ZyZWUobXN0X3N0YXRlKTsKPiA+ID4gPiA+ICB9Cj4gPiA+ID4gPgo+ID4gPiA+ID4g LXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGVfZnVuY3MgbXN0X3N0YXRlX2Z1 bmNzID0gewo+ID4gPiA+ID4gK3N0YXRpYyBpbmxpbmUgaW50Cj4gPiA+ID4gPiArZHJtX2RwX21z dF9hdG9taWNfY2hlY2tfdG9wb2xvZ3lfc3RhdGUoc3RydWN0Cj4gPiA+ID4gPiBkcm1fZHBfbXN0 X3RvcG9sb2d5X21ncgo+ID4gPiA+ID4gKm1nciwKPiA+ID4gPiA+ICsJCQkJICAgICAgIHN0cnVj dAo+ID4gPiA+ID4gZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZQo+ID4gPiA+ID4gKm1zdF9zdGF0 ZSkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0aW9u ICp2Y3BpOwo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0Owo+ID4gPiA+ ID4gKwlpbnQgYXZhaWxfc2xvdHMgPSA2MywgcmV0Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkv KiBUaGVyZSdzIG5vIHBvc3NpYmxlIHNjZW5hcmlvIHdoZXJlIHJlbGVhc2luZyBWQ1BJIG9yCj4g PiA+ID4gPiBrZWVwaW5nIGl0IHRoZQo+ID4gPiA+ID4gKwkgKiBzYW1lIHdvdWxkIG1ha2UgdGhl IHN0YXRlIGludmFsaWQKPiA+ID4gPiA+ICsJICovCj4gPiA+ID4gPiArCWlmICghbXN0X3N0YXRl LT52Y3BpX2FsbG9jYXRlZCkgewo+ID4gPiA+Cj4gPiA+ID4gRG8gd2UgbmVlZCB0aGlzPyBJZiBu b3QgSSdtIGFsd2F5cyBpbiBmYXZvdXIgb2YgcmVtb3ZpbmcgY29kZSBpZiBpdCdzCj4gPiA+ID4g bm90Cj4gPiA+ID4gbmVlZGVkIDotKQo+ID4gPiA+Cj4gPiA+ID4gPiArCQlEUk1fREVCVUdfQVRP TUlDKCJbTVNUIE1HUjolcF0gc3RhdGUgJXAgYWxsb2NhdGVzIG5vCj4gPiA+ID4gPiBWQ1BJLAo+ ID4gPiA+ID4gY2hlY2sgc2tpcHBlZFxuIiwKPiA+ID4gPiA+ICsJCQkJIG1nciwgJm1zdF9zdGF0 ZS0+YmFzZSk7Cj4gPiA+ID4gPiArCQlyZXR1cm4gMDsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZjcGksICZtc3Rfc3RhdGUtPnZjcGlz LCBuZXh0KSB7Cj4gPiA+ID4gPiArCQkvKiBSZWxlYXNpbmcgVkNQSSBpcyBhbHdheXMgT0stZXZl biBpZiB0aGUgcG9ydCBpcwo+ID4gPiA+ID4gZ29uZSAqLwo+ID4gPiA+ID4gKwkJaWYgKCF2Y3Bp LT52Y3BpKSB7Cj4gPiA+ID4gPiArCQkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JUOiVwXSBy ZWxlYXNlcyBhbGwKPiA+ID4gPiA+IFZDUEkKPiA+ID4gPiA+IHNsb3RzXG4iLAo+ID4gPiA+ID4g KwkJCQkJIHZjcGktPnBvcnQpOwo+ID4gPiA+ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiA+ID4gKwkJ fQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkJcG9ydCA9IGRybV9kcF9nZXRfdmFsaWRhdGVkX3Bv cnRfcmVmKG1nciwgdmNwaS0+cG9ydCk7Cj4gPiA+ID4gPiArCQlpZiAoIXBvcnQpIHsKPiA+ID4g PiA+ICsJCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIFBPUlQ6JXBdIGlzIGdvbmUgYnV0Cj4gPiA+ ID4gPiBzdGlsbCBoYXMKPiA+ID4gPiA+IFZDUEksIGNhbm5vdCBhZGQgbmV3IFZDUElcbiIsCj4g PiA+ID4gPiArCQkJCQkgdmNwaS0+cG9ydCk7Cj4gPiA+ID4gPiArCQkJcmV0dXJuIC1FSU5WQUw7 Cj4gPiA+ID4gPiArCQl9Cj4gPiA+ID4KPiA+ID4gPiBGb3IgZmluZF92Y3BpIHdlJ3ZlIGFscmVh ZHkgZG9uZSB0aGlzLiBGb3IgdW5wbHVnZ2VkIHZjcGksIHdlIGNhbid0IGRvCj4gPiA+ID4gdGhp cyBoZXJlIEkgdGhpbmsgLSBvdGhlcndpc2UgaWYgeW91IGVuYWJsZSAyIG1zdCBvdXRwdXRzIG9u IHRoZSBzYW1lCj4gPiA+ID4gYnJhbmNoLCBhbmQgdW5wbHVnIGJvdGgsIG9sZCBub24tYXRvbWlj IHVzZXJzcGFjZSBjYW4gbmV2ZXIgZXZlciBhZ2Fpbgo+ID4gPiA+IGRpc2FibGUgdGhlbSBiZWNh dXNlIGl0IGNhbid0IGRpc2FibGUgYm90aC4gVGhlIGNoZWNrICh0byBza2lwIGFscmVhZHkKPiA+ ID4gPiBkZWFsbG9jYXRlZCBwb3J0cykgYWJvdmUgaXNuJ3QgZW5vdWdoIHRvIGhhbmRsZSB0aGF0 Lgo+ID4gPiA+Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNU IFBPUlQ6JXBdIHJlcXVpcmVzICVkIHZjcGkKPiA+ID4gPiA+IHNsb3RzXG4iLAo+ID4gPiA+ID4g KwkJCQkgdmNwaS0+cG9ydCwgdmNwaS0+dmNwaSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCQlh dmFpbF9zbG90cyAtPSB2Y3BpLT52Y3BpOwo+ID4gPiA+ID4gKwkJaWYgKGF2YWlsX3Nsb3RzIDwg MCkgewo+ID4gPiA+ID4gKwkJCURSTV9ERUJVR19BVE9NSUMoIltNU1QgUE9SVDolcF0gbm90IGVu b3VnaAo+ID4gPiA+ID4gVkNQSSBzbG90cwo+ID4gPiA+ID4gaW4gbXN0IHN0YXRlICVwIChhdmFp bD0lZClcbiIsCj4gPiA+ID4gPiArCQkJCQkgdmNwaS0+cG9ydCwgbXN0X3N0YXRlLAo+ID4gPiA+ ID4gKwkJCQkJIGF2YWlsX3Nsb3RzICsgdmNwaS0+dmNwaSk7Cj4gPiA+ID4gPiArCQkJcmV0ID0g LUVOT1NQQzsKPiA+ID4gPiA+ICsJCQlnb3RvIHBvcnRfZmFpbDsKPiA+ID4gPiA+ICsJCX0KPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICsJCWRybV9kcF9wdXRfcG9ydChwb3J0KTsKPiA+ID4gPiA+ICsJ fQo+ID4gPiA+ID4gKwlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIE1HUjolcF0gbXN0IHN0YXRlICVw IFZDUEkgYXZhaWw9JWQKPiA+ID4gPiA+IHVzZWQ9JWRcbiIsCj4gPiA+ID4gPiArCQkJIG1nciwg bXN0X3N0YXRlLCBhdmFpbF9zbG90cywKPiA+ID4gPiA+ICsJCQkgNjMgLSBhdmFpbF9zbG90cyk7 Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXJldHVybiAwOwo+ID4gPiA+ID4gK3BvcnRfZmFpbDoK PiA+ID4gPiA+ICsJZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+ID4gPiA+ID4gKwlyZXR1cm4gcmV0 Owo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsvKioKPiA+ID4gPiA+ICsgKiBk cm1fZHBfbXN0X2F0b21pY19jaGVjayAtIENoZWNrIHRoYXQgdGhlIG5ldyBzdGF0ZSBvZiBhbiBN U1QKPiA+ID4gPiA+IHRvcG9sb2d5IGluIGFuCj4gPiA+ID4gPiArICogYXRvbWljIHVwZGF0ZSBp cyB2YWxpZAo+ID4gPiA+ID4gKyAqIEBzdGF0ZTogUG9pbnRlciB0byB0aGUgbmV3ICZzdHJ1Y3Qg ZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZQo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICogQ2hl Y2tzIHRoZSBnaXZlbiB0b3BvbG9neSBzdGF0ZSBmb3IgYW4gYXRvbWljIHVwZGF0ZSB0byBlbnN1 cmUKPiA+ID4gPiA+IHRoYXQKPiA+ID4gPiA+IGl0J3MKPiA+ID4gPiA+ICsgKiB2YWxpZC4gVGhp cyBpbmNsdWRlcyBjaGVja2luZyB3aGV0aGVyIHRoZXJlJ3MgZW5vdWdoIGJhbmR3aWR0aAo+ID4g PiA+ID4gdG8KPiA+ID4gPiA+IHN1cHBvcnQKPiA+ID4gPiA+ICsgKiB0aGUgbmV3IFZDUEkgYWxs b2NhdGlvbnMgaW4gdGhlIGF0b21pYyB1cGRhdGUuCj4gPiA+ID4gPiArICoKPiA+ID4gPiA+ICsg KiBBbnkgYXRvbWljIGRyaXZlcnMgc3VwcG9ydGluZyBEUCBNU1QgbXVzdCBtYWtlIHN1cmUgdG8g Y2FsbCB0aGlzCj4gPiA+ID4gPiBhZnRlcgo+ID4gPiA+ID4gKyAqIGNoZWNraW5nIHRoZSByZXN0 IG9mIHRoZWlyIHN0YXRlIGluIHRoZWlyCj4gPiA+ID4gPiArICogJmRybV9tb2RlX2NvbmZpZ19m dW5jcy5hdG9taWNfY2hlY2soKSBjYWxsYmFjay4KPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gKyAq IFNlZSBhbHNvOgo+ID4gPiA+ID4gKyAqIGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkK PiA+ID4gPiA+ICsgKiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpCj4gPiA+ID4g PiArICoKPiA+ID4gPiA+ICsgKiBSZXR1cm5zOgo+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiArICog MCBpZiB0aGUgbmV3IHN0YXRlIGlzIHZhbGlkLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lz ZS4KPiA+ID4gPiA+ICsgKi8KPiA+ID4gPiA+ICtpbnQgZHJtX2RwX21zdF9hdG9taWNfY2hlY2so c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsJ c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7Cj4gPiA+ID4gPiArCXN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGU7Cj4gPiA+ID4gPiArCWludCBpLCBy ZXQgPSAwOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlmb3JfZWFjaF9uZXdfbXN0X21ncl9pbl9z dGF0ZShzdGF0ZSwgbWdyLCBtc3Rfc3RhdGUsIGkpIHsKPiA+ID4gPiA+ICsJCXJldCA9IGRybV9k cF9tc3RfYXRvbWljX2NoZWNrX3RvcG9sb2d5X3N0YXRlKG1nciwKPiA+ID4gPiA+IG1zdF9zdGF0 ZSk7Cj4gPiA+ID4gPiArCQlpZiAocmV0KQo+ID4gPiA+ID4gKwkJCWJyZWFrOwo+ID4gPiA+ID4g Kwl9Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ID4gPiArfQo+ID4g PiA+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9hdG9taWNfY2hlY2spOwo+ID4gPiA+ID4g Kwo+ID4gPiA+ID4gK2NvbnN0IHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcwo+ID4gPiA+ ID4gZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZV9mdW5jcyA9Cj4gPiA+ID4gPiB7Cj4gPiA+ID4g PiAgCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2RwX21zdF9kdXBsaWNhdGVfc3RhdGUs Cj4gPiA+ID4gPiAgCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9kcF9tc3RfZGVzdHJveV9z dGF0ZSwKPiA+ID4gPiA+ICB9Owo+ID4gPiA+ID4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX21zdF90 b3BvbG9neV9zdGF0ZV9mdW5jcyk7Cj4gPiA+ID4gPgo+ID4gPiA+ID4gIC8qKgo+ID4gPiA+ID4g ICAqIGRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZTogZ2V0IE1TVCB0b3BvbG9neSBz dGF0ZQo+ID4gPiA+ID4gQEAgLTMyMTYsMTMgKzM0NDQsMTEgQEAgaW50IGRybV9kcF9tc3RfdG9w b2xvZ3lfbWdyX2luaXQoc3RydWN0Cj4gPiA+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAq bWdyLAo+ID4gPiA+ID4gIAkJcmV0dXJuIC1FTk9NRU07Cj4gPiA+ID4gPgo+ID4gPiA+ID4gIAlt c3Rfc3RhdGUtPm1nciA9IG1ncjsKPiA+ID4gPiA+IC0KPiA+ID4gPiA+IC0JLyogbWF4LiB0aW1l IHNsb3RzIC0gb25lIHNsb3QgZm9yIE1UUCBoZWFkZXIgKi8KPiA+ID4gPiA+IC0JbXN0X3N0YXRl LT5hdmFpbF9zbG90cyA9IDYzOwo+ID4gPiA+ID4gKwlJTklUX0xJU1RfSEVBRCgmbXN0X3N0YXRl LT52Y3Bpcyk7Cj4gPiA+ID4gPgo+ID4gPiA+ID4gIAlkcm1fYXRvbWljX3ByaXZhdGVfb2JqX2lu aXQoJm1nci0+YmFzZSwKPiA+ID4gPiA+ICAJCQkJICAgICZtc3Rfc3RhdGUtPmJhc2UsCj4gPiA+ ID4gPiAtCQkJCSAgICAmbXN0X3N0YXRlX2Z1bmNzKTsKPiA+ID4gPiA+ICsJCQkJICAgICZkcm1f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1bmNzKTsKPiA+ID4gPiA+Cj4gPiA+ID4gPiAgCXJldHVy biAwOwo+ID4gPiA+ID4gIH0KPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ID4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZGlzcGxheS5jCj4gPiA+ID4gPiBpbmRleCAxMzJlOTc4MjI3ZmIuLjhlODVlMDRhNTk0OCAx MDA2NDQKPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXku Ywo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4g PiA+ID4gPiBAQCAtMTI1OTIsNiArMTI1OTIsMTAgQEAgc3RhdGljIGludCBpbnRlbF9hdG9taWNf Y2hlY2soc3RydWN0Cj4gPiA+ID4gPiBkcm1fZGV2aWNlCj4gPiA+ID4gPiAqZGV2LAo+ID4gPiA+ ID4gIAkJCQkgICAgICAgIlttb2Rlc2V0XSIgOiAiW2Zhc3RzZXRdIik7Cj4gPiA+ID4gPiAgCX0K PiA+ID4gPiA+Cj4gPiA+ID4gPiArCXJldCA9IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0YXRl KTsKPiA+ID4gPiA+ICsJaWYgKHJldCkKPiA+ID4gPiA+ICsJCXJldHVybiByZXQ7Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiAgCWlmIChhbnlfbXMpIHsKPiA+ID4gPiA+ICAJCXJldCA9IGludGVsX21v ZGVzZXRfY2hlY2tzKHN0YXRlKTsKPiA+ID4gPiA+Cj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMKPiA+ID4gPiA+IGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMKPiA+ID4gPiA+IGluZGV4IDRkZTI0N2RkZjA1Zi4uYmUy ZDFhYzdkODdkIDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZHBfbXN0LmMKPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rw X21zdC5jCj4gPiA+ID4gPiBAQCAtNDEsOCArNDEsMTMgQEAgc3RhdGljIGJvb2wgaW50ZWxfZHBf bXN0X2NvbXB1dGVfY29uZmlnKHN0cnVjdAo+ID4gPiA+ID4gaW50ZWxfZW5jb2RlciAqZW5jb2Rl ciwKPiA+ID4gPiA+ICAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IGNvbm5fc3Rh dGUtPmNvbm5lY3RvcjsKPiA+ID4gPiA+ICAJdm9pZCAqcG9ydCA9IHRvX2ludGVsX2Nvbm5lY3Rv cihjb25uZWN0b3IpLT5wb3J0Owo+ID4gPiA+ID4gIAlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUgPSBwaXBlX2NvbmZpZy0+YmFzZS5zdGF0ZTsKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9j cnRjICpjcnRjID0gcGlwZV9jb25maWctPmJhc2UuY3J0YzsKPiA+ID4gPiA+ICsJc3RydWN0IGRy bV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSA9Cj4gPiA+ID4gPiArCQlkcm1fYXRvbWljX2dl dF9vbGRfY3J0Y19zdGF0ZShzdGF0ZSwgY3J0Yyk7Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGUgPSAmcGlwZV9jb25maWctPmJhc2U7Cj4gPiA+ID4gPiAg CWludCBicHA7Cj4gPiA+ID4gPiAtCWludCBsYW5lX2NvdW50LCBzbG90cyA9IDA7Cj4gPiA+ID4g PiArCWludCBsYW5lX2NvdW50LCBzbG90cyA9Cj4gPiA+ID4gPiArCQl0b19pbnRlbF9jcnRjX3N0 YXRlKG9sZF9jcnRjX3N0YXRlKS0+ZHBfbV9uLnR1Owo+ID4gPiA+ID4gIAljb25zdCBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSA9ICZwaXBlX2NvbmZpZy0KPiA+ID4gPiA+ ID4gYmFzZS5hZGp1c3RlZF9tb2RlOwo+ID4gPiA+ID4gIAlpbnQgbXN0X3BibjsKPiA+ID4gPiA+ ICAJYm9vbCBjb25zdGFudF9uID0gZHJtX2RwX2hhc19xdWlyaygmaW50ZWxfZHAtPmRlc2MsCj4g PiA+ID4gPiBAQCAtNzcsOCArODIsMTIgQEAgc3RhdGljIGJvb2wgaW50ZWxfZHBfbXN0X2NvbXB1 dGVfY29uZmlnKHN0cnVjdAo+ID4gPiA+ID4gaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+ID4g PiA+ICAJbXN0X3BibiA9IGRybV9kcF9jYWxjX3Bibl9tb2RlKGFkanVzdGVkX21vZGUtPmNydGNf Y2xvY2ssCj4gPiA+ID4gPiBicHApOwo+ID4gPiA+ID4gIAlwaXBlX2NvbmZpZy0+cGJuID0gbXN0 X3BibjsKPiA+ID4gPiA+Cj4gPiA+ID4gPiAtCS8qIFpvbWJpZSBjb25uZWN0b3JzIGNhbid0IGhh dmUgVkNQSSBzbG90cyAqLwo+ID4gPiA+ID4gLQlpZiAoIWRybV9jb25uZWN0b3JfaXNfdW5yZWdp c3RlcmVkKGNvbm5lY3RvcikpIHsKPiA+ID4gPiA+ICsJLyogT25seSBjaGFuZ2UgVkNQSSBhbGxv Y2F0aW9uIG9uIGFjdHVhbCBtb2RlIGNoYW5nZXMsIHRvCj4gPiA+ID4gPiBwcmV2ZW50IHVzCj4g PiA+ID4gPiArCSAqIGZyb20gdHJ5aW5nIHRvIGFsbG9jYXRlIFZDUEkgdG8gcG9ydHMgdGhhdCBu byBsb25nZXIgZXhpc3QKPiA+ID4gPiA+IHdoZW4gd2UKPiA+ID4gPiA+ICsJICogbWF5IGp1c3Qg YmUgdHJ5aW5nIHRvIGRpc2FibGUgRFBNUyBvbiB0aGVtCj4gPiA+ID4gPiArCSAqLwo+ID4gPiA+ ID4gKwlpZiAobmV3X2NydGNfc3RhdGUtPm1vZGVfY2hhbmdlZCB8fAo+ID4gPiA+ID4gKwkgICAg bmV3X2NydGNfc3RhdGUtPmNvbm5lY3RvcnNfY2hhbmdlZCkgewo+ID4gPiA+Cj4gPiA+ID4gV2h5 IGV4YWN0bHkgaXMgdGhpcyBuZWVkZWQ/IFdlIG9ubHkgY2FsbCBjb21wdXRlX2NvbmZpZyBvbiB0 aGUKPiA+ID4gPiBlbm9jb2Rlcgo+ID4gPiA+IHdoZW4gZW5hYmxpbmcgYW4gb3V0cHV0LiBOb3Qg d2hlbiBkaXNhYmxpbmcgb25lLiBTaW1pbGFyIGZvciB0aGUKPiA+ID4gPiBhdG9taWMKPiA+ID4g PiBoZWxwZXJzIGFuZCB0aGUgdmFyaW91cyBlbmNvZGVyIGNhbGxiYWNrcyAoeW91IGhhdmUgdGhl IHNhbWUgY2hhbmdlIGluCj4gPiA+ID4gdGhlCj4gPiA+ID4gbm91dmVhdSBjb2RlKS4gRGlkIHRo aXMgYWN0dWFsbHkgYmxvdyB1cCB3aGlsZSB0ZXN0aW5nPwo+ID4gPiA+Cj4gPiA+ID4gPiAgCQlz bG90cyA9IGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKHN0YXRlLAo+ID4gPiA+ID4gIAkJ CQkJCSAgICAgICZpbnRlbF9kcC0KPiA+ID4gPiA+ID5tc3RfbWdyLAo+ID4gPiA+ID4gIAkJCQkJ CSAgICAgIHBvcnQsCj4gPiA+ID4gPiBAQCAtMTA3LDM2ICsxMTYsMzkgQEAgc3RhdGljIGJvb2wg aW50ZWxfZHBfbXN0X2NvbXB1dGVfY29uZmlnKHN0cnVjdAo+ID4gPiA+ID4gaW50ZWxfZW5jb2Rl ciAqZW5jb2RlciwKPiA+ID4gPiA+ICAJcmV0dXJuIHRydWU7Cj4gPiA+ID4gPiAgfQo+ID4gPiA+ ID4KPiA+ID4gPiA+IC1zdGF0aWMgaW50IGludGVsX2RwX21zdF9hdG9taWNfY2hlY2soc3RydWN0 IGRybV9jb25uZWN0b3IKPiA+ID4gPiA+ICpjb25uZWN0b3IsCj4gPiA+ID4gPiAtCQlzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqbmV3X2Nvbm5fc3RhdGUpCj4gPiA+ID4gPiArc3RhdGljIGlu dAo+ID4gPiA+ID4gK2ludGVsX2RwX21zdF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwKPiA+ID4gPiA+ICsJCQkgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRl ICpuZXdfY29ubl9zdGF0ZSkKPiA+ID4gPiA+ICB7Cj4gPiA+ID4gPiArCXN0cnVjdCBpbnRlbF9j b25uZWN0b3IgKmludGVsX2Nvbm5lY3RvciA9Cj4gPiA+ID4gPiArCQl0b19pbnRlbF9jb25uZWN0 b3IoY29ubmVjdG9yKTsKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdy ICptZ3IgPQo+ID4gPiA+ID4gKwkJJmludGVsX2Nvbm5lY3Rvci0+bXN0X3BvcnQtPm1zdF9tZ3I7 Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQgPSBpbnRlbF9jb25uZWN0 b3ItPnBvcnQ7Cj4gPiA+ID4gPiAgCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IG5l d19jb25uX3N0YXRlLT5zdGF0ZTsKPiA+ID4gPiA+IC0Jc3RydWN0IGRybV9jb25uZWN0b3Jfc3Rh dGUgKm9sZF9jb25uX3N0YXRlOwo+ID4gPiA+ID4gLQlzdHJ1Y3QgZHJtX2NydGMgKm9sZF9jcnRj Owo+ID4gPiA+ID4gLQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gPiA+ID4g PiAtCWludCBzbG90cywgcmV0ID0gMDsKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9jb25uZWN0b3Jf c3RhdGUgKm9sZF9jb25uX3N0YXRlID0KPiA+ID4gPiA+ICsJCWRybV9hdG9taWNfZ2V0X29sZF9j b25uZWN0b3Jfc3RhdGUoc3RhdGUsIGNvbm5lY3Rvcik7Cj4gPiA+ID4gPiArCXN0cnVjdCBkcm1f Y3J0YyAqb2xkX2NydGMgPSBvbGRfY29ubl9zdGF0ZS0+Y3J0YywKPiA+ID4gPiA+ICsJCQkqbmV3 X2NydGMgPSBuZXdfY29ubl9zdGF0ZS0+Y3J0YzsKPiA+ID4gPiA+ICsJc3RydWN0IGRybV9jcnRj X3N0YXRlICpvbGRfY3J0Y19zdGF0ZSwgKm5ld19jcnRjX3N0YXRlOwo+ID4gPiA+ID4KPiA+ID4g PiA+IC0Jb2xkX2Nvbm5fc3RhdGUgPSBkcm1fYXRvbWljX2dldF9vbGRfY29ubmVjdG9yX3N0YXRl KHN0YXRlLAo+ID4gPiA+ID4gY29ubmVjdG9yKTsKPiA+ID4gPiA+IC0Jb2xkX2NydGMgPSBvbGRf Y29ubl9zdGF0ZS0+Y3J0YzsKPiA+ID4gPgo+ID4gPiA+IEJpa2VzaGVkOiBSZXdvcmtpbmcgYWxs IHRoZSBhYm92ZSBoaWRlcyB0aGUgcmVhbCBjaGFuZ2VzIHF1aXRlIGEgYml0Lgo+ID4gPiA+Cj4g PiA+ID4gPiAgCWlmICghb2xkX2NydGMpCj4gPiA+ID4gPiAtCQlyZXR1cm4gcmV0Owo+ID4gPiA+ ID4gKwkJcmV0dXJuIDA7Cj4gPiA+ID4gPgo+ID4gPiA+ID4gLQljcnRjX3N0YXRlID0gZHJtX2F0 b21pY19nZXRfbmV3X2NydGNfc3RhdGUoc3RhdGUsIG9sZF9jcnRjKTsKPiA+ID4gPiA+IC0Jc2xv dHMgPSB0b19pbnRlbF9jcnRjX3N0YXRlKGNydGNfc3RhdGUpLT5kcF9tX24udHU7Cj4gPiA+ID4g PiAtCWlmIChkcm1fYXRvbWljX2NydGNfbmVlZHNfbW9kZXNldChjcnRjX3N0YXRlKSAmJiBzbG90 cyA+IDApIHsKPiA+ID4gPiA+IC0JCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdy Owo+ID4gPiA+ID4gLQkJc3RydWN0IGRybV9lbmNvZGVyICpvbGRfZW5jb2RlcjsKPiA+ID4gPiA+ ICsJb2xkX2NydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9vbGRfY3J0Y19zdGF0ZShzdGF0ZSwK PiA+ID4gPiA+IG9sZF9jcnRjKTsKPiA+ID4gPiA+ICsJaWYgKCFvbGRfY3J0Y19zdGF0ZSB8fAo+ ID4gPiA+Cj4gPiA+ID4gIW9sZF9jcnRjX3N0YXRlIHdvdWxkIGJlIGEgZnJhbWV3b3JrIGJ1Zy4g SnVzdCByZW1vdmUgdGhhdCBjaGVjay4KPiA+ID4gPgo+ID4gPiA+ID4gKwkgICAgIXRvX2ludGVs X2NydGNfc3RhdGUob2xkX2NydGNfc3RhdGUpLT5kcF9tX24udHUpCj4gPiA+ID4gPiArCQlyZXR1 cm4gMDsKPiA+ID4gPgo+ID4gPiA+IEhtLCB3aHkgZG8gd2UgbmVlZCB0aGlzPyBIYXZpbmcgYSBE UCBwb3J0IHByZXZpb3VzbHkgZW5hYmxlZCB3aXRoIGEgMAo+ID4gPiA+IHR1Cj4gPiA+ID4gc291 bmRzIGxpa2UgYSBwcmV0dHkgYmlnIGRyaXZlciBidWcuCj4gPiA+ID4gPgo+ID4gPiA+ID4gLQkJ b2xkX2VuY29kZXIgPSBvbGRfY29ubl9zdGF0ZS0+YmVzdF9lbmNvZGVyOwo+ID4gPiA+ID4gLQkJ bWdyID0gJmVuY190b19tc3Qob2xkX2VuY29kZXIpLT5wcmltYXJ5LT5kcC5tc3RfbWdyOwo+ID4g PiA+ID4gKwkvKiBJZiB3ZSBzd2l0Y2hlZCBDUlRDcywgY2xlYXIgdGhlIHByZXZpb3VzIG9uZSdz IGFsbG9jYXRpb24KPiA+ID4gPiA+ICovCj4gPiA+ID4gPiArCW5ld19jcnRjX3N0YXRlID0gZHJt X2F0b21pY19nZXRfbmV3X2NydGNfc3RhdGUoc3RhdGUsCj4gPiA+ID4gPiBvbGRfY3J0Yyk7Cj4g PiA+ID4gPiArCWlmIChuZXdfY3J0Y19zdGF0ZS0+Y29ubmVjdG9yc19jaGFuZ2VkICYmICFuZXdf Y3J0Y19zdGF0ZS0KPiA+ID4gPiA+ID5lbmFibGUpCj4gPiA+ID4gPiArCQl0b19pbnRlbF9jcnRj X3N0YXRlKG5ld19jcnRjX3N0YXRlKS0+ZHBfbV9uLnR1ID0gMDsKPiA+ID4gPgo+ID4gPiA+IE5v IGlkZWEgd2h5IHdlIG5lZWQgdG8gY2xlYXIgdGhpcyBoZXJlPyBTaG91bGRuJ3Qgd2UganVzdCBj bGVhciB0aGlzCj4gPiA+ID4gdW5jb25kaXRpb25hbGx5IGlmIHdlIHJlbGVhc2UgdGhlIGFsbG9j YXRpb24uCj4gPiA+ID4KPiA+ID4gPiBBbHNvIG5hbWluZyBjb252ZW50aW9uLCBJJ2QgY2FsbCB0 aGlzIG9sZF9jcnRjX25ld19zdGF0ZSwgYW5kIG1heWJlCj4gPiA+ID4gb2xkX2NydGNfb2xkX3N0 YXRlLiBUbyBtYWtlIGl0IGNsZWFyIHRoZXNlIGFyZSB0aGUgb2xkL25ldyBzdGF0ZXMgZm9yCj4g PiA+ID4gb2xkX2NydGMuIEluc3RlYWQgb2Ygb2xkL25ldyBzdGF0ZSBmb3IgdGhlIG5ldyBjcnRj Lgo+ID4gPiA+Cj4gPiA+ID4gPgo+ID4gPiA+ID4gLQkJcmV0ID0gZHJtX2RwX2F0b21pY19yZWxl YXNlX3ZjcGlfc2xvdHMoc3RhdGUsIG1nciwKPiA+ID4gPiA+IHNsb3RzKTsKPiA+ID4gPiA+IC0J CWlmIChyZXQpCj4gPiA+ID4gPiAtCQkJRFJNX0RFQlVHX0tNUygiZmFpbGVkIHJlbGVhc2luZyAl ZCB2Y3BpCj4gPiA+ID4gPiBzbG90czolZFxuIiwKPiA+ID4gPiA+IHNsb3RzLCByZXQpOwo+ID4g PiA+ID4gLQkJZWxzZQo+ID4gPiA+ID4gLQkJCXRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0 ZSktPmRwX21fbi50dSA9Cj4gPiA+ID4gPiAwOwo+ID4gPiA+ID4gLQl9Cj4gPiA+ID4gPiAtCXJl dHVybiByZXQ7Cj4gPiA+ID4gPiArCWlmIChuZXdfY3J0YykKPiA+ID4gPiA+ICsJCXJldHVybiAw Owo+ID4gPiA+Cj4gPiA+ID4gTm90IHN1cmUgd2h5IHdlIHNob3VsZG4ndCByZWxlYXNlIHRoaXM/ IElmIHdlIGhhbmRsZSB0aGlzIGluIGhlbHBlcnMsCj4gPiA+ID4gaXQKPiA+ID4gPiB3b3VsZCBy ZW1vdmUgcGlsZXMgb2Ygc3BlY2lhbCBjYXNpbmcgY29kZSBoZXJlIEkgdGhpbmsuIFBsdXMgcmVt b3ZlCj4gPiA+ID4gc3BlY2lhbCBjb2RlIGluIHRoZSBobHBlcnMuCj4gPiA+ID4KPiA+ID4gPgo+ ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwlyZXR1cm4gZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlf c2xvdHMoc3RhdGUsIG1nciwgcG9ydCk7Cj4gPiA+ID4gPiAgfQo+ID4gPiA+ID4KPiA+ID4gPiA+ ICBzdGF0aWMgdm9pZCBpbnRlbF9tc3RfZGlzYWJsZV9kcChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAq ZW5jb2RlciwKPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hl bHBlci5oCj4gPiA+ID4gPiBiL2luY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgKPiA+ID4g PiA+IGluZGV4IDNmYWNlYjY2ZjVjYi4uMjM5MmUxMmI2YmNlIDEwMDY0NAo+ID4gPiA+ID4gLS0t IGEvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+ID4gPiA+ID4gKysrIGIvaW5jbHVk ZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+ID4gPiA+ID4gQEAgLTQwNiw5ICs0MDYsMTYgQEAg c3RydWN0IGRybV9kcF9wYXlsb2FkIHsKPiA+ID4gPiA+Cj4gPiA+ID4gPiAgI2RlZmluZSB0b19k cF9tc3RfdG9wb2xvZ3lfc3RhdGUoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdAo+ID4gPiA+ID4g ZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSwgYmFzZSkKPiA+ID4gPiA+Cj4gPiA+ID4gPiArc3Ry dWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gewo+ID4gPiA+Cj4gPiA+ID4gSSB0aGluayBhIGNv bW1lbnQgaGVyZSB0aGF0IHRoaXMgcG9pbnRlciBob2xkcyBhIGZ1bGwgcmVmZXJlbmNlIChldmVu Cj4gPiA+ID4gcGFzdAo+ID4gPiA+IHdoZW4gdGhlIGNvbm5lY3RvciBpcyB1bnBsdWdnZWQpIHdv dWxkIGJlIGdvb2QuIE90aGVyd2lzZSB0aGUgbG9vcCBpbgo+ID4gPiA+IHJlbGVhc2VfdmNwaSB3 b3VsZCBiZSBidWdneS4KPiA+ID4gPgo+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0 ICpwb3J0Owo+ID4gPiA+ID4gKwlpbnQgdmNwaTsKPiA+ID4gPiA+ICsJc3RydWN0IGxpc3RfaGVh ZCBuZXh0Owo+ID4gPiA+ID4gK307Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiAgc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfc3RhdGUgewo+ID4gPiA+ID4gIAlzdHJ1Y3QgZHJtX3ByaXZhdGVfc3Rh dGUgYmFzZTsKPiA+ID4gPiA+IC0JaW50IGF2YWlsX3Nsb3RzOwo+ID4gPiA+ID4gKwlzdHJ1Y3Qg bGlzdF9oZWFkIHZjcGlzOwo+ID4gPiA+ID4gKwl1OCB2Y3BpX2FsbG9jYXRlZDsKPiA+ID4gPiA+ ICAJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7Cj4gPiA+ID4gPiAgfTsKPiA+ ID4gPiA+Cj4gPiA+ID4gPiBAQCAtNjE5LDE0ICs2MjYsMTcgQEAgdm9pZCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21ncl9zdXNwZW5kKHN0cnVjdAo+ID4gPiA+ID4gZHJtX2RwX21zdF90b3BvbG9neV9t Z3IgKm1ncik7Cj4gPiA+ID4gPiAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3Jlc3VtZShz dHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IKPiA+ID4gPiA+ICptZ3IpOwo+ID4gPiA+ID4g IHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlCj4gPiA+ID4gPiAqZHJtX2F0b21pY19n ZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ ID4gPiA+ICAJCQkJCQkJCSAgICBzdAo+ID4gPiA+ID4gcnVjdAo+ID4gPiA+ID4gZHJtX2RwX21z dF90b3BvbG9neV9tZ3IgKm1ncik7Cj4gPiA+ID4gPiAtaW50IGRybV9kcF9hdG9taWNfZmluZF92 Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ID4gPiA+IC0JCQkJ ICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ID4gPiA+IC0JCQkJICBz dHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBpbnQKPiA+ID4gPiA+IHBibik7Cj4gPiA+ID4g PiAtaW50IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlCj4gPiA+ID4gPiAqc3RhdGUsCj4gPiA+ID4gPiAtCQkJCSAgICAgc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfbWdyCj4gPiA+ID4gPiAqbWdyLAo+ID4gPiA+ID4gLQkJCQkgICAgIGlu dCBzbG90cyk7Cj4gPiA+ID4gPiAraW50IF9fbXVzdF9jaGVjawo+ID4gPiA+ID4gK2RybV9kcF9h dG9taWNfZmluZF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ ID4gPiA+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ ID4gPiA+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBpbnQgcGJuKTsK PiA+ID4gPiA+ICtpbnQgX19tdXN0X2NoZWNrCj4gPiA+ID4gPiArZHJtX2RwX2F0b21pY19yZWxl YXNlX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiA+ID4g KwkJCQkgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ID4gPiArCQkJ CSBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KTsKPiA+ID4gPiA+ICBpbnQgZHJtX2RwX3Nl bmRfcG93ZXJfdXBkb3duX3BoeShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IKPiA+ID4g PiA+ICptZ3IsCj4gPiA+ID4gPiAgCQkJCSBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBi b29sCj4gPiA+ID4gPiBwb3dlcl91cCk7Cj4gPiA+ID4gPiAraW50IF9fbXVzdF9jaGVjayBkcm1f ZHBfbXN0X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZQo+ID4gPiA+ID4gKnN0 YXRlKTsKPiA+ID4gPiA+Cj4gPiA+ID4gPiAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBkcm1fcHJpdmF0 ZV9zdGF0ZV9mdW5jcwo+ID4gPiA+ID4gZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZV9mdW5jczsK PiA+ID4gPiA+Cj4gPiA+ID4gPiAtLQo+ID4gPiA+ID4gMi4xOS4xCj4gPiA+ID4gPgo+ID4gPiA+ Cj4gPiA+ID4gLS0KPiA+ID4gPiBEYW5pZWwgVmV0dGVyCj4gPiA+ID4gU29mdHdhcmUgRW5naW5l ZXIsIEludGVsIENvcnBvcmF0aW9uCj4gPiA+ID4gaHR0cDovL2Jsb2cuZmZ3bGwuY2gKPiA+IC0t Cj4gPiBDaGVlcnMsCj4gPiAJTHl1ZGUgUGF1bAo+ID4KLS0KQ2hlZXJzLAoJTHl1ZGUgUGF1bAoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVs IG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==