From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH i-g-t 1/3] lib/igt_kms migrate existing documentation to header file. Date: Tue, 22 Dec 2015 11:20:19 +0100 Message-ID: <20151222102019.GP30437@phenom.ffwll.local> References: <1450696045-6405-1-git-send-email-marius.c.vlad@intel.com> <1450696045-6405-2-git-send-email-marius.c.vlad@intel.com> <20151221160951.GI30437@phenom.ffwll.local> <20151222100510.GA25932@mcvlad-wk.rb.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-f51.google.com (mail-wm0-f51.google.com [74.125.82.51]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4AAF36E250 for ; Tue, 22 Dec 2015 02:20:19 -0800 (PST) Received: by mail-wm0-f51.google.com with SMTP id p187so104142396wmp.0 for ; Tue, 22 Dec 2015 02:20:19 -0800 (PST) Content-Disposition: inline In-Reply-To: <20151222100510.GA25932@mcvlad-wk.rb.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter , intel-gfx@lists.freedesktop.org, chris@chris-wilson.co.uk List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBEZWMgMjIsIDIwMTUgYXQgMTI6MDU6MTBQTSArMDIwMCwgTWFyaXVzIFZsYWQgd3Jv dGU6Cj4gSGksCj4gCj4gT24gTW9uLCBEZWMgMjEsIDIwMTUgYXQgMDU6MDk6NTFQTSArMDEwMCwg RGFuaWVsIFZldHRlciB3cm90ZToKPiA+IE9uIE1vbiwgRGVjIDIxLCAyMDE1IGF0IDAxOjA3OjIz UE0gKzAyMDAsIE1hcml1cyBWbGFkIHdyb3RlOgo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBNYXJpdXMg VmxhZCA8bWFyaXVzLmMudmxhZEBpbnRlbC5jb20+Cj4gPiAKPiA+IEhtLCB3aHkgdGhhdD8gR2l2 ZW4gdGhhdCB0aGlzIGlzIGFnYWluc3QgdGhlIHVzdWFsIHN0eWxlIGluIGlndCB0aGlzIG5lZWRz Cj4gPiBzb21lIGp1c3RpZmljYXRpb24sIG5vdCBhbiBlbXB0eSBjb21taXQgbWVzc2FnZS4KPiAK PiBJIHRob3VnaHQgdGhhdCBhZ2dyZWdhdGluZyBhbGwgdGhlIGRvY3VtZW50YXRpb24gaW4gb25l IHBsYWNlIGxvb2tzIG11Y2gKPiBtb3JlIGNvc21ldGljIGFuZCBlYXNpZXIgdG8gZ28gdGhyb3Vn aC4gQ3VycmVudGx5IGl0IHNlZW1zIHJhdGhlciBoZWN0aWMKPiBhbmQgZGlzb3JnYW5pemVkOiBk ZWZpbmVzIGFyZSBkb2N1bWVudGVkICBmb2xsb3dlZCBieSBzb21lIHZhZ3VlIHRleHQKPiBzdXJy b3VuZGluZyBzb21lIGZ1bmN0aW9ucyAtLSBhbHRob3VnaCBub3QgYWxsIGZpbGVzIGV4aGliaXQg dGhpcwo+IGJlaGF2aW91ciBpcyByYXRoZXIgY29tbW9uIGZyb20gSSd2ZSBzZWVuLiBJdCB3YXMg cmF0aGVyIGVhc3kgdG8gYWRkCj4gb3RoZXIgbWlzc2luZyBkb2N1bWVudGF0aW9uIG9uY2UgSSBo YWQgZXZlcnl0aGluZyBpbiBvbmUgZmlsZS4gV2UgY2FuCj4gYWxzbyBhZGQgc29tZSBsaW5lcyBp bnRvIENPTlRSSUJVVElORyBzbyBwZW9wbGUgYXJlIGF3YXJlIG9mIGl0Lgo+IAo+IFNlY29uZGx5 LCBtb3N0IG9mIHRoZSAodXNlci1zcGFjZSkgbGlicmFyaWVzIGluY2x1ZGUgdGhlIGRvY3VtZW50 YXRpb24KPiBpbiBpdHMgaGVhZGVyIGZpbGUgLS0gaGVuY2Ugbm8gKHByb3BlcikganVzdGlmaWNh dGlvbiBmb3IgdGhlIGNvbW1pdAo+IG1lc3NhZ2UuCj4gCj4gSSBmb3Igb25lLCBJJ2QgbGlrZSB0 byBjaGFuZ2UgYWxsIG9mIHRoZSBsaWIvKiBmaWxlcyB3aXRoIHRoaXMgYXBwcm9hY2guCgpUaGUg aWRlYSBiZWhpbmQga2VlcGluZyB0aGUgZG9jdW1lbnRhdGlvbiByaWdodCBuZXh0IHRvIHRoZSBp bXBsZW1lbnRhdGlvbgppcyB0aGF0IGl0IGluY3JlYXNlcyB0aGUgY2hhbmNlcyB0aGF0IGl0IGdl dHMgdXBkYXRlZCB3aGVuIHRoZSBmdW5jdGlvbgppbnRlcmZhY2UgKG9yIHNlbWFudGljcykgY2hh bmdlcy4gT25seSBkb2NzIGZvciAjZGVmaW5lcywgc3RhdGljIGlubGluZXMKYW5kIHN0cnVjdHMg c2hvdWxkIGJlIGluIGhlYWRlcnMuCgpUaGlzIGlzIHRoZSBzYW1lIHN0eWxlIGFzIHVzZWQgYnkg a2VybmVsZG9jLCBhbmQgY29uc2lzdGVuY3kgaGVyZSBpcyBnb29kCmltby4KCkkgZ3Vlc3MgZm9y IGxpYnJhcmllcyBpdCBtYWtlcyBzZW5zZSB0byBwdXQgZnVsbHkgaW50byBoZWFkZXJzIHNpbmNl IHRoZQpwcmltYXJ5IGNvbnN1bWVyIHdpbGwgYmUgZXh0ZXJuYWwgcGVvcGxlIHdobyBvbmx5IGhh dmUgdGhlIGhlYWRlcnMKaW5zdGFsbGVkLiBCdXQgZm9yIGJvdGggaWd0IGFuZCBrZXJuZWwgdGhl IGRvY3MgYXJlIGZvciBwcm9qZWN0LWludGVybmFsCnVzZSBvbmx5LCBzbyB0aGVyZSdzIG5vIHN1 Y2ggY29uc3RyYWludC4KCkdpdmVuIGFsbCB0aGF0IEkgcHJlZmVyIHRoZSBjdXJyZW50IHN0eWxl LiBBbHNvLCBubyBvbmUgZWxzZSBoYXMKY29tcGxhaW5lZCBhYm91dCBpdCB5ZXQsIHNvIEkgdGhp bmsgaXQncyBmaW5lLgoKVGhhbmtzLCBEYW5pZWwKCj4gCj4gPiAKPiA+IFRoYW5rcywgRGFuaWVs Cj4gPiAKPiA+ID4gLS0tCj4gPiA+ICBsaWIvaWd0X2ttcy5jIHwgMzIxICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiA+ICBsaWIvaWd0X2ttcy5oIHwgNDg2ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KPiA+ ID4gIDIgZmlsZXMgY2hhbmdlZCwgNDE4IGluc2VydGlvbnMoKyksIDM4OSBkZWxldGlvbnMoLSkK PiA+ID4gCj4gPiA+IGRpZmYgLS1naXQgYS9saWIvaWd0X2ttcy5jIGIvbGliL2lndF9rbXMuYwo+ ID4gPiBpbmRleCA1ZDVhOTVjLi4zZGM1NTlkIDEwMDY0NAo+ID4gPiAtLS0gYS9saWIvaWd0X2tt cy5jCj4gPiA+ICsrKyBiL2xpYi9pZ3Rfa21zLmMKPiA+ID4gQEAgLTg4LDIzICs4OCw3IEBAIHN0 YXRpYyB2b2lkIHVwZGF0ZV9lZGlkX2NzdW0odW5zaWduZWQgY2hhciAqZWRpZCkKPiA+ID4gICNk ZWZpbmUgRURJRF9OQU1FIGJhc2VfZWRpZAo+ID4gPiAgI2luY2x1ZGUgImlndF9lZGlkX3RlbXBs YXRlLmgiCj4gPiA+ICAKPiA+ID4gLS8qKgo+ID4gPiAtICogaWd0X2ttc19nZXRfYmFzZV9lZGlk Ogo+ID4gPiAtICoKPiA+ID4gLSAqIEdldCB0aGUgYmFzZSBlZGlkIGJsb2NrLCB3aGljaCBpbmNs dWRlcyB0aGUgZm9sbG93aW5nIG1vZGVzOgo+ID4gPiAtICoKPiA+ID4gLSAqICAtIDE5MjB4MTA4 MCA2MEh6Cj4gPiA+IC0gKiAgLSAxMjgweDcyMCA2MEh6Cj4gPiA+IC0gKiAgLSAxMDI0eDc2OCA2 MEh6Cj4gPiA+IC0gKiAgLSA4MDB4NjAwIDYwSHoKPiA+ID4gLSAqICAtIDY0MHg0ODAgNjBIego+ ID4gPiAtICoKPiA+ID4gLSAqIFRoaXMgY2FuIGJlIGV4dGVuZGVkIHdpdGggZnVydGhlciBmZWF0 dXJlcyB1c2luZyBmdW5jdGlvbnMgc3VjaCBhcwo+ID4gPiAtICogI2ttc3Rlc3RfZWRpZF9hZGRf M2QuCj4gPiA+IC0gKgo+ID4gPiAtICogUmV0dXJuczogYSBiYXNpYyBlZGlkIGJsb2NrCj4gPiA+ IC0gKi8KPiA+ID4gLWNvbnN0IHVuc2lnbmVkIGNoYXIqIGlndF9rbXNfZ2V0X2Jhc2VfZWRpZCh2 b2lkKQo+ID4gPiArY29uc3QgdW5zaWduZWQgY2hhciAqaWd0X2ttc19nZXRfYmFzZV9lZGlkKHZv aWQpCj4gPiA+ICB7Cj4gPiA+ICAJdXBkYXRlX2VkaWRfY3N1bShiYXNlX2VkaWQpOwo+ID4gPiAg Cj4gPiA+IEBAIC0xMjgsNTkgKzExMiwxMyBAQCBjb25zdCB1bnNpZ25lZCBjaGFyKiBpZ3Rfa21z X2dldF9iYXNlX2VkaWQodm9pZCkKPiA+ID4gICNkZWZpbmUgRURJRF9OQU1FIGFsdF9lZGlkCj4g PiA+ICAjaW5jbHVkZSAiaWd0X2VkaWRfdGVtcGxhdGUuaCIKPiA+ID4gIAo+ID4gPiAtLyoqCj4g PiA+IC0gKiBpZ3Rfa21zX2dldF9hbHRfZWRpZDoKPiA+ID4gLSAqCj4gPiA+IC0gKiBHZXQgYW4g YWx0ZXJuYXRlIGVkaWQgYmxvY2ssIHdoaWNoIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgbW9kZXM6 Cj4gPiA+IC0gKgo+ID4gPiAtICogIC0gMTQwMHgxMDUwIDYwSHoKPiA+ID4gLSAqICAtIDE5MjB4 MTA4MCA2MEh6Cj4gPiA+IC0gKiAgLSAxMjgweDcyMCA2MEh6Cj4gPiA+IC0gKiAgLSAxMDI0eDc2 OCA2MEh6Cj4gPiA+IC0gKiAgLSA4MDB4NjAwIDYwSHoKPiA+ID4gLSAqICAtIDY0MHg0ODAgNjBI ego+ID4gPiAtICoKPiA+ID4gLSAqIFRoaXMgY2FuIGJlIGV4dGVuZGVkIHdpdGggZnVydGhlciBm ZWF0dXJlcyB1c2luZyBmdW5jdGlvbnMgc3VjaCBhcwo+ID4gPiAtICogI2ttc3Rlc3RfZWRpZF9h ZGRfM2QuCj4gPiA+IC0gKgo+ID4gPiAtICogUmV0dXJuczogYW4gYWx0ZXJuYXRlIGVkaWQgYmxv Y2sKPiA+ID4gLSAqLwo+ID4gPiAtY29uc3QgdW5zaWduZWQgY2hhciogaWd0X2ttc19nZXRfYWx0 X2VkaWQodm9pZCkKPiA+ID4gK2NvbnN0IHVuc2lnbmVkIGNoYXIgKmlndF9rbXNfZ2V0X2FsdF9l ZGlkKHZvaWQpCj4gPiA+ICB7Cj4gPiA+ICAJdXBkYXRlX2VkaWRfY3N1bShhbHRfZWRpZCk7Cj4g PiA+ICAKPiA+ID4gIAlyZXR1cm4gYWx0X2VkaWQ7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gLS8q Kgo+ID4gPiAtICogU0VDVElPTjppZ3Rfa21zCj4gPiA+IC0gKiBAc2hvcnRfZGVzY3JpcHRpb246 IEtlcm5lbCBtb2Rlc2V0dGluZyBzdXBwb3J0IGxpYnJhcnkKPiA+ID4gLSAqIEB0aXRsZTogS01T Cj4gPiA+IC0gKiBAaW5jbHVkZTogaWd0LmgKPiA+ID4gLSAqCj4gPiA+IC0gKiBUaGlzIGxpYnJh cnkgcHJvdmlkZXMgc3VwcG9ydCB0byBlbnVtZXJhdGUgYW5kIHNldCBtb2Rlc2V0IGNvbmZpZ3Vy YXRpb25zLgo+ID4gPiAtICoKPiA+ID4gLSAqIFRoZXJlIGFyZSB0d28gcGFydHMgaW4gdGhpcyBs aWJyYXJ5OiBGaXJzdCB0aGUgbG93IGxldmVsIGhlbHBlciBmdW5jdGlvbgo+ID4gPiAtICogd2hp Y2ggZGlyZWN0bHkgYnVpbGQgb24gdG9wIG9mIHJhdyBpb2N0bHMgb3IgdGhlIGludGVyZmFjZXMg cHJvdmlkZWQgYnkKPiA+ID4gLSAqIGxpYmRybS4gVGhvc2UgZnVuY3Rpb25zIGFsbCBoYXZlIGEg a21zdGVzdF8gcHJlZml4Lgo+ID4gPiAtICoKPiA+ID4gLSAqIFRoZSBzZWNvbmQgcGFydCBpcyBh IGhpZ2gtbGV2ZWwgbGlicmFyeSB0byBtYW5hZ2UgbW9kZXNldCBjb25maWd1cmF0aW9ucwo+ID4g PiAtICogd2hpY2ggYWJzdHJhY3RzIGF3YXkgc29tZSBvZiB0aGUgbG93LWxldmVsIGRldGFpbHMg bGlrZSB0aGUgZGlmZmVyZW5jZQo+ID4gPiAtICogYmV0d2VlbiBsZWdhY3kgYW5kIHVuaXZlcnNh bCBwbGFuZSBzdXBwb3J0IGZvciBzZXR0aW5nIGN1cnNvcnMgb3IgaW4gdGhlCj4gPiA+IC0gKiBm dXR1cmUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBsZWdhY3kgYW5kIGF0b21pYyBjb21taXQuIFRo ZXNlIGhpZ2gtbGV2ZWwKPiA+ID4gLSAqIGZ1bmN0aW9ucyBoYXZlIGFsbCBpZ3RfIHByZWZpeGVz LiBUaGlzIHBhcnQgaXMgc3RpbGwgdmVyeSBtdWNoIHdvcmsgaW4KPiA+ID4gLSAqIHByb2dyZXNz IGFuZCBzbyBhbHNvIGxhY2tzIGEgYml0IGRvY3VtZW50YXRpb24gZm9yIHRoZSBpbmRpdmlkdWFs IGZ1bmN0aW9ucy4KPiA+ID4gLSAqCj4gPiA+IC0gKiBOb3RlIHRoYXQgdGhpcyBsaWJyYXJ5J3Mg aGVhZGVyIHB1bGxzIGluIHRoZSBbaS1nLXQgZnJhbWVidWZmZXJdKGludGVsLWdwdS10b29scy1p LWctdC1mcmFtZWJ1ZmZlci5odG1sKQo+ID4gPiAtICogbGlicmFyeSBhcyBhIGRlcGVuZGVuY3ku Cj4gPiA+IC0gKi8KPiA+ID4gLQo+ID4gPiAtLyoqCj4gPiA+IC0gKiBrbXN0ZXN0X3BpcGVfbmFt ZToKPiA+ID4gLSAqIEBwaXBlOiBkaXNwbGF5IHBpcGUKPiA+ID4gLSAqCj4gPiA+IC0gKiBSZXR1 cm5zOiBTdHJpbmcgcmVwcmVzbnRpbmcgQHBpcGUsIGUuZy4gIkEiLgo+ID4gPiAtICovCj4gPiA+ ICBjb25zdCBjaGFyICprbXN0ZXN0X3BpcGVfbmFtZShlbnVtIHBpcGUgcGlwZSkKPiA+ID4gIHsK PiA+ID4gIAljb25zdCBjaGFyICpzdHJbXSA9IHsgIkEiLCAiQiIsICJDIiB9Owo+ID4gPiBAQCAt MTkxLDEyICsxMjksNiBAQCBjb25zdCBjaGFyICprbXN0ZXN0X3BpcGVfbmFtZShlbnVtIHBpcGUg cGlwZSkKPiA+ID4gIAlyZXR1cm4gc3RyW3BpcGVdOwo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+IC0v KioKPiA+ID4gLSAqIGttc3Rlc3RfcGxhbmVfbmFtZToKPiA+ID4gLSAqIEBwbGFuZTogZGlzcGxh eSBwbGFuZQo+ID4gPiAtICoKPiA+ID4gLSAqIFJldHVybnM6IFN0cmluZyByZXByZXNudGluZyBA cGlwZSwgZS5nLiAicGxhbmUxIi4KPiA+ID4gLSAqLwo+ID4gPiAgY29uc3QgY2hhciAqa21zdGVz dF9wbGFuZV9uYW1lKGVudW0gaWd0X3BsYW5lIHBsYW5lKQo+ID4gPiAgewo+ID4gPiAgCXN0YXRp YyBjb25zdCBjaGFyICpuYW1lc1tdID0gewo+ID4gPiBAQCAtMjM1LDEyICsxNjcsNiBAQCBzdGF0 aWMgY29uc3QgY2hhciAqbW9kZV9zdGVyZW9fbmFtZShjb25zdCBkcm1Nb2RlTW9kZUluZm8gKm1v ZGUpCj4gPiA+ICAJfQo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+IC0vKioKPiA+ID4gLSAqIGttc3Rl c3RfZHVtcF9tb2RlOgo+ID4gPiAtICogQG1vZGU6IGxpYmRybSBtb2RlIHN0cnVjdHVyZQo+ID4g PiAtICoKPiA+ID4gLSAqIFByaW50cyBAbW9kZSB0byBzdGRvdXQgaW4gYSBodW1hLXJlYWRhYmxl IGZvcm0uCj4gPiA+IC0gKi8KPiA+ID4gIHZvaWQga21zdGVzdF9kdW1wX21vZGUoZHJtTW9kZU1v ZGVJbmZvICptb2RlKQo+ID4gPiAgewo+ID4gPiAgCWNvbnN0IGNoYXIgKnN0ZXJlbyA9IG1vZGVf c3RlcmVvX25hbWUobW9kZSk7Cj4gPiA+IEBAIC0yNTYsMTQgKzE4Miw2IEBAIHZvaWQga21zdGVz dF9kdW1wX21vZGUoZHJtTW9kZU1vZGVJbmZvICptb2RlKQo+ID4gPiAgCQkgc3RlcmVvID8gc3Rl cmVvIDogIiIsIHN0ZXJlbyA/ICIpIiA6ICIiKTsKPiA+ID4gIH0KPiA+ID4gIAo+ID4gPiAtLyoq Cj4gPiA+IC0gKiBrbXN0ZXN0X2dldF9waXBlX2Zyb21fY3J0Y19pZDoKPiA+ID4gLSAqIEBmZDog RFJNIGZkCj4gPiA+IC0gKiBAY3J0Y19pZDogRFJNIENSVEMgaWQKPiA+ID4gLSAqCj4gPiA+IC0g KiBSZXR1cm5zOiBUaGUgcGlwZSBudW1iZXIgZm9yIHRoZSBnaXZlbiBEUk0gQ1JUQyBAY3J0Y19p ZC4gVGhpcyBtYXBzIGRpcmVjdGx5Cj4gPiA+IC0gKiB0byBhbiBlbnVtIHBpcGUgdmFsdWUgdXNl ZCBpbiBvdGhlciBoZWxwZXIgZnVuY3Rpb25zLgo+ID4gPiAtICovCj4gPiA+ICBpbnQga21zdGVz dF9nZXRfcGlwZV9mcm9tX2NydGNfaWQoaW50IGZkLCBpbnQgY3J0Y19pZCkKPiA+ID4gIHsKPiA+ ID4gIAlzdHJ1Y3QgZHJtX2k5MTVfZ2V0X3BpcGVfZnJvbV9jcnRjX2lkIHBmY2k7Cj4gPiA+IEBA IC0zMTcsMTEgKzIzNSw2IEBAIGVycjoKPiA+ID4gIAo+ID4gPiAgc3RhdGljIHVuc2lnbmVkIGxv bmcgb3JpZ192dF9tb2RlID0gLTFVTDsKPiA+ID4gIAo+ID4gPiAtLyoqCj4gPiA+IC0gKiBrbXN0 ZXN0X3Jlc3RvcmVfdnRfbW9kZToKPiA+ID4gLSAqCj4gPiA+IC0gKiBSZXN0b3JlIHRoZSBWVCBt b2RlIGluIHVzZSBiZWZvcmUgI2ttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUgd2FzIGNhbGxl ZC4KPiA+ID4gLSAqLwo+ID4gPiAgdm9pZCBrbXN0ZXN0X3Jlc3RvcmVfdnRfbW9kZSh2b2lkKQo+ ID4gPiAgewo+ID4gPiAgCWxvbmcgcmV0Owo+ID4gPiBAQCAtMzM1LDE2ICsyNDgsNiBAQCB2b2lk IGttc3Rlc3RfcmVzdG9yZV92dF9tb2RlKHZvaWQpCj4gPiA+ICAJfQo+ID4gPiAgfQo+ID4gPiAg Cj4gPiA+IC0vKioKPiA+ID4gLSAqIGttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGU6Cj4gPiA+ IC0gKgo+ID4gPiAtICogU2V0cyB0aGUgY29udHJvbGxpbmcgVlQgKGlmIGF2YWlsYWJsZSkgaW50 byBncmFwaGljcy9yYXcgbW9kZSBhbmQgaW5zdGFsbHMKPiA+ID4gLSAqIGFuIGlndCBleGl0IGhh bmRsZXIgdG8gc2V0IHRoZSBWVCBiYWNrIHRvIHRleHQgbW9kZSBvbiBleGl0LiBVc2UKPiA+ID4g LSAqICNrbXN0ZXN0X3Jlc3RvcmVfdnRfbW9kZSB0byByZXN0b3JlIHRoZSBwcmV2aW91cyBWVCBt b2RlIG1hbnVhbGx5Lgo+ID4gPiAtICoKPiA+ID4gLSAqIEFsbCBrbXMgdGVzdHMgbXVzdCBjYWxs IHRoaXMgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGZiY29uIGRvZXNuJ3QKPiA+ID4g LSAqIGludGVyZmVyZSBieSBlLmcuIGJsYW5raW5nIHRoZSBzY3JlZW4uCj4gPiA+IC0gKi8KPiA+ ID4gIHZvaWQga21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSh2b2lkKQo+ID4gPiAgewo+ID4g PiAgCWxvbmcgcmV0Owo+ID4gPiBAQCAtMzY3LDE2ICsyNzAsNiBAQCBzdGF0aWMgdm9pZCByZXNl dF9jb25uZWN0b3JzX2F0X2V4aXQoaW50IHNpZykKPiA+ID4gIAlpZ3RfcmVzZXRfY29ubmVjdG9y cygpOwo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+IC0vKioKPiA+ID4gLSAqIGttc3Rlc3RfZm9yY2Vf Y29ubmVjdG9yOgo+ID4gPiAtICogQGZkOiBkcm0gZmlsZSBkZXNjcmlwdG9yCj4gPiA+IC0gKiBA Y29ubmVjdG9yOiBjb25uZWN0b3IKPiA+ID4gLSAqIEBzdGF0ZTogc3RhdGUgdG8gZm9yY2Ugb24g QGNvbm5lY3Rvcgo+ID4gPiAtICoKPiA+ID4gLSAqIEZvcmNlIHRoZSBzcGVjaWZpZWQgc3RhdGUg b24gdGhlIHNwZWNpZmllZCBjb25uZWN0b3IuCj4gPiA+IC0gKgo+ID4gPiAtICogUmV0dXJuczog dHJ1ZSBvbiBzdWNjZXNzCj4gPiA+IC0gKi8KPiA+ID4gIGJvb2wga21zdGVzdF9mb3JjZV9jb25u ZWN0b3IoaW50IGRybV9mZCwgZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gPiAgCQkJ ICAgICBlbnVtIGttc3Rlc3RfZm9yY2VfY29ubmVjdG9yX3N0YXRlIHN0YXRlKQo+ID4gPiAgewo+ ID4gPiBAQCAtNDU5LDE4ICszNTIsNiBAQCBib29sIGttc3Rlc3RfZm9yY2VfY29ubmVjdG9yKGlu dCBkcm1fZmQsIGRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ID4gIAlyZXR1cm4gKHJl dCA9PSAtMSkgPyBmYWxzZSA6IHRydWU7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gLS8qKgo+ID4g PiAtICoga21zdGVzdF9mb3JjZV9lZGlkOgo+ID4gPiAtICogQGRybV9mZDogZHJtIGZpbGUgZGVz Y3JpcHRvcgo+ID4gPiAtICogQGNvbm5lY3RvcjogY29ubmVjdG9yIHRvIHNldCBAZWRpZCBvbgo+ ID4gPiAtICogQGVkaWQ6IEFuIEVESUQgZGF0YSBibG9jawo+ID4gPiAtICogQGxlbmd0aDogbGVu Z3RoIG9mIHRoZSBFRElEIGRhdGEuICNFRElEX0xFTkdUSCBkZWZpbmVzIHRoZSBzdGFuZGFyZCBF RElECj4gPiA+IC0gKiBsZW5ndGgKPiA+ID4gLSAqCj4gPiA+IC0gKiBTZXQgdGhlIEVESUQgZGF0 YSBvbiBAY29ubmVjdG9yIHRvIEBlZGlkLiBTZWUgYWxzbyAjaWd0X2ttc19nZXRfYmFzZV9lZGlk Lgo+ID4gPiAtICoKPiA+ID4gLSAqIElmIEBsZW5ndGggaXMgemVybywgdGhlIGZvcmNlZCBFRElE IHdpbGwgYmUgcmVtb3ZlZC4KPiA+ID4gLSAqLwo+ID4gPiAgdm9pZCBrbXN0ZXN0X2ZvcmNlX2Vk aWQoaW50IGRybV9mZCwgZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gPiAgCQkJY29u c3QgdW5zaWduZWQgY2hhciAqZWRpZCwgc2l6ZV90IGxlbmd0aCkKPiA+ID4gIHsKPiA+ID4gQEAg LTQ5OSwxNiArMzgwLDYgQEAgdm9pZCBrbXN0ZXN0X2ZvcmNlX2VkaWQoaW50IGRybV9mZCwgZHJt TW9kZUNvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gPiAgCWlndF9hc3NlcnQocmV0ICE9IC0xKTsK PiA+ID4gIH0KPiA+ID4gIAo+ID4gPiAtLyoqCj4gPiA+IC0gKiBrbXN0ZXN0X2dldF9jb25uZWN0 b3JfZGVmYXVsdF9tb2RlOgo+ID4gPiAtICogQGRybV9mZDogRFJNIGZkCj4gPiA+IC0gKiBAY29u bmVjdG9yOiBsaWJkcm0gY29ubmVjdG9yCj4gPiA+IC0gKiBAbW9kZTogbGliZHJtIG1vZGUKPiA+ ID4gLSAqCj4gPiA+IC0gKiBSZXRyaWV2ZXMgdGhlIGRlZmF1bHQgbW9kZSBmb3IgQGNvbm5lY3Rv ciBhbmQgc3RvcmVzIGl0IGluIEBtb2RlLgo+ID4gPiAtICoKPiA+ID4gLSAqIFJldHVybnM6IHRy dWUgb24gc3VjY2VzcywgZmFsc2Ugb24gZmFpbHVyZQo+ID4gPiAtICovCj4gPiA+ICBib29sIGtt c3Rlc3RfZ2V0X2Nvbm5lY3Rvcl9kZWZhdWx0X21vZGUoaW50IGRybV9mZCwgZHJtTW9kZUNvbm5l Y3RvciAqY29ubmVjdG9yLAo+ID4gPiAgCQkJCQlkcm1Nb2RlTW9kZUluZm8gKm1vZGUpCj4gPiA+ ICB7Cj4gPiA+IEBAIC01MzIsMTYgKzQwMyw2IEBAIGJvb2wga21zdGVzdF9nZXRfY29ubmVjdG9y X2RlZmF1bHRfbW9kZShpbnQgZHJtX2ZkLCBkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3IsCj4g PiA+ICAJcmV0dXJuIHRydWU7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gLS8qKgo+ID4gPiAtICog a21zdGVzdF9nZXRfY29ubmVjdG9yX2NvbmZpZzoKPiA+ID4gLSAqIEBkcm1fZmQ6IERSTSBmZAo+ ID4gPiAtICogQGNvbm5lY3Rvcl9pZDogRFJNIGNvbm5lY3RvciBpZAo+ID4gPiAtICogQGNydGNf aWR4X21hc2s6IG1hc2sgb2YgYWxsb3dlZCBEUk0gQ1JUQyBpbmRpY2VzCj4gPiA+IC0gKiBAY29u ZmlnOiBzdHJ1Y3R1cmUgZmlsbGVkIHdpdGggdGhlIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb24KPiA+ ID4gLSAqCj4gPiA+IC0gKiBUaGlzIHRyaWVzIHRvIGZpbmQgYSBzdWl0YWJsZSBjb25maWd1cmF0 aW9uIGZvciB0aGUgZ2l2ZW4gY29ubmVjdG9yIGFuZCBDUlRDCj4gPiA+IC0gKiBjb25zdHJhaW50 IGFuZCBmaWxscyBpdCBpbnRvIEBjb25maWcuCj4gPiA+IC0gKi8KPiA+ID4gIGJvb2wga21zdGVz dF9nZXRfY29ubmVjdG9yX2NvbmZpZyhpbnQgZHJtX2ZkLCB1aW50MzJfdCBjb25uZWN0b3JfaWQs Cj4gPiA+ICAJCQkJICB1bnNpZ25lZCBsb25nIGNydGNfaWR4X21hc2ssCj4gPiA+ICAJCQkJICBz dHJ1Y3Qga21zdGVzdF9jb25uZWN0b3JfY29uZmlnICpjb25maWcpCj4gPiA+IEBAIC02MzMsMTIg KzQ5NCw2IEBAIGVycjE6Cj4gPiA+ICAJcmV0dXJuIGZhbHNlOwo+ID4gPiAgfQo+ID4gPiAgCj4g PiA+IC0vKioKPiA+ID4gLSAqIGttc3Rlc3RfZnJlZV9jb25uZWN0b3JfY29uZmlnOgo+ID4gPiAt ICogQGNvbmZpZzogY29ubmVjdG9yIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCj4gPiA+IC0gKgo+ ID4gPiAtICogRnJlZSBhbnkgcmVzb3VyY2VzIGluIEBjb25maWcgYWxsb2NhdGVkIGluIGttc3Rl c3RfZ2V0X2Nvbm5lY3Rvcl9jb25maWcoKS4KPiA+ID4gLSAqLwo+ID4gPiAgdm9pZCBrbXN0ZXN0 X2ZyZWVfY29ubmVjdG9yX2NvbmZpZyhzdHJ1Y3Qga21zdGVzdF9jb25uZWN0b3JfY29uZmlnICpj b25maWcpCj4gPiA+ICB7Cj4gPiA+ICAJZHJtTW9kZUZyZWVDcnRjKGNvbmZpZy0+Y3J0Yyk7Cj4g PiA+IEBAIC02NDYsMTQgKzUwMSw2IEBAIHZvaWQga21zdGVzdF9mcmVlX2Nvbm5lY3Rvcl9jb25m aWcoc3RydWN0IGttc3Rlc3RfY29ubmVjdG9yX2NvbmZpZyAqY29uZmlnKQo+ID4gPiAgCWRybU1v ZGVGcmVlQ29ubmVjdG9yKGNvbmZpZy0+Y29ubmVjdG9yKTsKPiA+ID4gIH0KPiA+ID4gIAo+ID4g PiAtLyoqCj4gPiA+IC0gKiBrbXN0ZXN0X3NldF9jb25uZWN0b3JfZHBtczoKPiA+ID4gLSAqIEBm ZDogRFJNIGZkCj4gPiA+IC0gKiBAY29ubmVjdG9yOiBsaWJkcm0gY29ubmVjdG9yCj4gPiA+IC0g KiBAbW9kZTogRFJNIERQTVMgdmFsdWUKPiA+ID4gLSAqCj4gPiA+IC0gKiBUaGlzIGZ1bmN0aW9u IHNldHMgdGhlIERQTVMgc2V0dGluZyBvZiBAY29ubmVjdG9yIHRvIEBtb2RlLgo+ID4gPiAtICov Cj4gPiA+ICB2b2lkIGttc3Rlc3Rfc2V0X2Nvbm5lY3Rvcl9kcG1zKGludCBmZCwgZHJtTW9kZUNv bm5lY3RvciAqY29ubmVjdG9yLCBpbnQgbW9kZSkKPiA+ID4gIHsKPiA+ID4gIAlpbnQgaSwgZHBt cyA9IDA7Cj4gPiA+IEBAIC02ODIsMjEgKzUyOSw2IEBAIHZvaWQga21zdGVzdF9zZXRfY29ubmVj dG9yX2RwbXMoaW50IGZkLCBkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3IsIGludCBtb2RlKQo+ ID4gPiAgCQkJCQkgICAgICAgZHBtcywgbW9kZSkgPT0gMCk7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ ID4gLS8qKgo+ID4gPiAtICoga21zdGVzdF9nZXRfcHJvcGVydHk6Cj4gPiA+IC0gKiBAZHJtX2Zk OiBkcm0gZmlsZSBkZXNjcmlwdG9yCj4gPiA+IC0gKiBAb2JqZWN0X2lkOiBvYmplY3Qgd2hvc2Ug cHJvcGVydGllcyB3ZSdyZSBnb2luZyB0byBnZXQKPiA+ID4gLSAqIEBvYmplY3RfdHlwZTogdHlw ZSBvZiBvYmpfaWQgKERSTV9NT0RFX09CSkVDVF8qKQo+ID4gPiAtICogQG5hbWU6IG5hbWUgb2Yg dGhlIHByb3BlcnR5IHdlJ3JlIGdvaW5nIHRvIGdldAo+ID4gPiAtICogQHByb3BfaWQ6IGlmIG5v dCBOVUxMLCByZXR1cm5zIHRoZSBwcm9wZXJ0eSBpZAo+ID4gPiAtICogQHZhbHVlOiBpZiBub3Qg TlVMTCwgcmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUKPiA+ID4gLSAqIEBwcm9wOiBpZiBub3Qg TlVMTCwgcmV0dXJucyB0aGUgcHJvcGVydHksIGFuZCB0aGUgY2FsbGVyIHdpbGwgaGF2ZSB0byBm cmVlCj4gPiA+IC0gKiAgICAgICAgaXQgbWFudWFsbHkuCj4gPiA+IC0gKgo+ID4gPiAtICogRmlu ZHMgYSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiBuYW1lIG9uIHRoZSBnaXZlbiBvYmplY3QuCj4g PiA+IC0gKgo+ID4gPiAtICogUmV0dXJuczogdHJ1ZSBpbiBjYXNlIHdlIGZvdW5kIHNvbWV0aGlu Zy4KPiA+ID4gLSAqLwo+ID4gPiAgYm9vbAo+ID4gPiAga21zdGVzdF9nZXRfcHJvcGVydHkoaW50 IGRybV9mZCwgdWludDMyX3Qgb2JqZWN0X2lkLCB1aW50MzJfdCBvYmplY3RfdHlwZSwKPiA+ID4g IAkJICAgICBjb25zdCBjaGFyICpuYW1lLCB1aW50MzJfdCAqcHJvcF9pZCAvKiBvdXQgKi8sCj4g PiA+IEBAIC03MzQsMTYgKzU2Niw2IEBAIGttc3Rlc3RfZ2V0X3Byb3BlcnR5KGludCBkcm1fZmQs IHVpbnQzMl90IG9iamVjdF9pZCwgdWludDMyX3Qgb2JqZWN0X3R5cGUsCj4gPiA+ICAJcmV0dXJu IGZvdW5kOwo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+IC0vKioKPiA+ID4gLSAqIGttc3Rlc3RfZWRp ZF9hZGRfM2Q6Cj4gPiA+IC0gKiBAZWRpZDogYW4gZXhpc3RpbmcgdmFsaWQgZWRpZCBibG9jawo+ ID4gPiAtICogQGxlbmd0aDogbGVuZ3RoIG9mIEBlZGlkCj4gPiA+IC0gKiBAbmV3X2VkaWRfcHRy OiBwb2ludGVyIHRvIHdoZXJlIHRoZSBuZXcgZWRpZCB3aWxsIGJlIHBsYWNlZAo+ID4gPiAtICog QG5ld19sZW5ndGg6IHBvaW50ZXIgdG8gdGhlIHNpemUgb2YgdGhlIG5ldyBlZGlkCj4gPiA+IC0g Kgo+ID4gPiAtICogTWFrZXMgYSBjb3B5IG9mIGFuIGV4aXN0aW5nIGVkaWQgYmxvY2sgYW5kIGFk ZHMgYW4gZXh0ZW5zaW9uIGluZGljYXRpbmcKPiA+ID4gLSAqIHN0ZXJlbyAzRCBjYXBhYmlsaXRp ZXMuCj4gPiA+IC0gKi8KPiA+ID4gIHZvaWQga21zdGVzdF9lZGlkX2FkZF8zZChjb25zdCB1bnNp Z25lZCBjaGFyICplZGlkLCBzaXplX3QgbGVuZ3RoLAo+ID4gPiAgCQkJIHVuc2lnbmVkIGNoYXIg Km5ld19lZGlkX3B0cltdLCBzaXplX3QgKm5ld19sZW5ndGgpCj4gPiA+ICB7Cj4gPiA+IEBAIC04 MTQsMTMgKzYzNiw2IEBAIHZvaWQga21zdGVzdF9lZGlkX2FkZF8zZChjb25zdCB1bnNpZ25lZCBj aGFyICplZGlkLCBzaXplX3QgbGVuZ3RoLAo+ID4gPiAgCW5ld19lZGlkW2xlbmd0aCArIDEyN10g PSAyNTYgLSBzdW07Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gLS8qKgo+ID4gPiAtICoga21zdGVz dF91bnNldF9hbGxfY3J0Y3M6Cj4gPiA+IC0gKiBAZHJtX2ZkOiB0aGUgRFJNIGZkCj4gPiA+IC0g KiBAcmVzb3VyY2VzOiBsaWJkcm0gcmVzb3VyY2VzIHBvaW50ZXIKPiA+ID4gLSAqCj4gPiA+IC0g KiBEaXNhYmxlcyBhbGwgdGhlIHNjcmVlbnMuCj4gPiA+IC0gKi8KPiA+ID4gIHZvaWQga21zdGVz dF91bnNldF9hbGxfY3J0Y3MoaW50IGRybV9mZCwgZHJtTW9kZVJlc1B0ciByZXNvdXJjZXMpCj4g PiA+ICB7Cj4gPiA+ICAJaW50IGksIHJjOwo+ID4gPiBAQCAtOTY0LDE1ICs3NzksNiBAQCBzdGF0 aWMgaW50IGdldF9kcm1fcGxhbmVfdHlwZShpbnQgZHJtX2ZkLCB1aW50MzJfdCBwbGFuZV9pZCkK PiA+ID4gIAlyZXR1cm4gRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWTsKPiA+ID4gIH0KPiA+ID4gIAo+ ID4gPiAtLyoqCj4gPiA+IC0gKiBpZ3RfZGlzcGxheV9pbml0Ogo+ID4gPiAtICogQGRpc3BsYXk6 IGEgcG9pbnRlciB0byBhbiAjaWd0X2Rpc3BsYXlfdCBzdHJ1Y3R1cmUKPiA+ID4gLSAqIEBkcm1f ZmQ6IGEgZHJtIGZpbGUgZGVzY3JpcHRvcgo+ID4gPiAtICoKPiA+ID4gLSAqIEluaXRpYWxpemUg QGRpc3BsYXkgYW5kIGFsbG9jYXRlIHRoZSB2YXJpb3VzIHJlc291cmNlcyByZXF1aXJlZC4gVXNl Cj4gPiA+IC0gKiAjaWd0X2Rpc3BsYXlfZmluaSB0byByZWxlYXNlIHRoZSByZXNvdXJjZXMgd2hl biB0aGV5IGFyZSBubyBsb25nZXIgcmVxdWlyZWQuCj4gPiA+IC0gKgo+ID4gPiAtICovCj4gPiA+ ICB2b2lkIGlndF9kaXNwbGF5X2luaXQoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgaW50IGRybV9m ZCkKPiA+ID4gIHsKPiA+ID4gIAlkcm1Nb2RlUmVzICpyZXNvdXJjZXM7Cj4gPiA+IEBAIC0xMTcx LDEzICs5NzcsNiBAQCBzdGF0aWMgdm9pZCBpZ3Rfb3V0cHV0X2ZpbmkoaWd0X291dHB1dF90ICpv dXRwdXQpCj4gPiA+ICAJZnJlZShvdXRwdXQtPm5hbWUpOwo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+ IC0vKioKPiA+ID4gLSAqIGlndF9kaXNwbGF5X2Zpbmk6Cj4gPiA+IC0gKiBAZGlzcGxheTogYSBw b2ludGVyIHRvIGFuICNpZ3RfZGlzcGxheV90IHN0cnVjdHVyZQo+ID4gPiAtICoKPiA+ID4gLSAq IFJlbGVhc2UgYW55IHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggQGRpc3BsYXkuIFRoaXMgZG9l cyBub3QgZnJlZSBAZGlzcGxheQo+ID4gPiAtICogaXRzZWxmLgo+ID4gPiAtICovCj4gPiA+ICB2 b2lkIGlndF9kaXNwbGF5X2ZpbmkoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSkKPiA+ID4gIHsKPiA+ ID4gIAlpbnQgaTsKPiA+ID4gQEAgLTE2NDgsMjQgKzE0NDcsNiBAQCBzdGF0aWMgaW50IGRvX2Rp c3BsYXlfY29tbWl0KGlndF9kaXNwbGF5X3QgKmRpc3BsYXksCj4gPiA+ICAJcmV0dXJuIDA7Cj4g PiA+ICB9Cj4gPiA+ICAKPiA+ID4gLS8qKgo+ID4gPiAtICogaWd0X2Rpc3BsYXlfY29tbWl0MjoK PiA+ID4gLSAqIEBkaXNwbGF5OiBEUk0gZGV2aWNlIGhhbmRsZQo+ID4gPiAtICogQHM6IENvbW1p dCBzdHlsZQo+ID4gPiAtICoKPiA+ID4gLSAqIENvbW1pdHMgZnJhbWVidWZmZXIgYW5kIHBvc2l0 aW9uaW5nIGNoYW5nZXMgdG8gYWxsIHBsYW5lcyBvZiBlYWNoIGRpc3BsYXkKPiA+ID4gLSAqIHBp cGUsIHVzaW5nIGEgc3BlY2lmaWMgQVBJIHRvIHBlcmZvcm0gdGhlIHByb2dyYW1taW5nLiAgVGhp cyBmdW5jdGlvbiBzaG91bGQKPiA+ID4gLSAqIGJlIHVzZWQgdG8gZXhlcmNpc2UgYSBzcGVjaWZp YyBkcml2ZXIgcHJvZ3JhbW1pbmcgQVBJOyBpZ3RfZGlzcGxheV9jb21taXQKPiA+ID4gLSAqIHNo b3VsZCBiZSB1c2VkIGluc3RlYWQgaWYgdGhlIEFQSSB1c2VkIGlzIHVuaW1wb3J0YW50IHRvIHRo ZSB0ZXN0IGJlaW5nIHJ1bi4KPiA+ID4gLSAqCj4gPiA+IC0gKiBUaGlzIGZ1bmN0aW9uIHNob3Vs ZCBvbmx5IGJlIHVzZWQgdG8gY29tbWl0IGNoYW5nZXMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8KPiA+ ID4gLSAqIHN1Y2NlZWQsIHNpbmNlIGFueSBmYWlsdXJlIGR1cmluZyB0aGUgY29tbWl0IHByb2Nl c3Mgd2lsbCBjYXVzZSB0aGUgSUdUCj4gPiA+IC0gKiBzdWJ0ZXN0IHRvIGZhaWwuICBUbyBjb21t aXQgY2hhbmdlcyB0aGF0IGFyZSBleHBlY3RlZCB0byBmYWlsLCB1c2UKPiA+ID4gLSAqIEBpZ3Rf dHJ5X2Rpc3BsYXlfY29tbWl0MiBpbnN0ZWFkLgo+ID4gPiAtICoKPiA+ID4gLSAqIFJldHVybnM6 IDAgdXBvbiBzdWNjZXNzLiAgVGhpcyBmdW5jdGlvbiB3aWxsIG5ldmVyIHJldHVybiB1cG9uIGZh aWx1cmUKPiA+ID4gLSAqIHNpbmNlIGlndF9mYWlsKCkgYXQgbG93ZXIgbGV2ZWxzIHdpbGwgbG9u Z2ptcCBvdXQgb2YgaXQuCj4gPiA+IC0gKi8KPiA+ID4gIGludCBpZ3RfZGlzcGxheV9jb21taXQy KGlndF9kaXNwbGF5X3QgKmRpc3BsYXksCj4gPiA+ICAJCSAgICAgICBlbnVtIGlndF9jb21taXRf c3R5bGUgcykKPiA+ID4gIHsKPiA+ID4gQEAgLTE2NzQsNDAgKzE0NTUsMTEgQEAgaW50IGlndF9k aXNwbGF5X2NvbW1pdDIoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwKPiA+ID4gIAlyZXR1cm4gMDsK PiA+ID4gIH0KPiA+ID4gIAo+ID4gPiAtLyoqCj4gPiA+IC0gKiBpZ3RfZGlzcGxheV90cnlfY29t bWl0MjoKPiA+ID4gLSAqIEBkaXNwbGF5OiBEUk0gZGV2aWNlIGhhbmRsZQo+ID4gPiAtICogQHM6 IENvbW1pdCBzdHlsZQo+ID4gPiAtICoKPiA+ID4gLSAqIEF0dGVtcHRzIHRvIGNvbW1pdCBmcmFt ZWJ1ZmZlciBhbmQgcG9zaXRpb25pbmcgY2hhbmdlcyB0byBhbGwgcGxhbmVzIG9mIGVhY2gKPiA+ ID4gLSAqIGRpc3BsYXkgcGlwZS4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgdG8gY29t bWl0IGNoYW5nZXMgdGhhdCBhcmUKPiA+ID4gLSAqIGV4cGVjdGVkIHRvIGZhaWwsIHNvIHRoYXQg dGhlIGVycm9yIGNvZGUgY2FuIGJlIGNoZWNrZWQgZm9yIGNvcnJlY3RuZXNzLgo+ID4gPiAtICog Rm9yIGNoYW5nZXMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gc3VjY2VlZCwgdXNlIEBpZ3RfZGlzcGxh eV9jb21taXQgaW5zdGVhZC4KPiA+ID4gLSAqCj4gPiA+IC0gKiBOb3RlIHRoYXQgaW4gbm9uLWF0 b21pYyBjb21taXQgc3R5bGVzLCBubyBkaXNwbGF5IHByb2dyYW1taW5nIHdpbGwgYmUKPiA+ID4g LSAqIHBlcmZvcm1lZCBhZnRlciB0aGUgZmlyc3QgZmFpbHVyZSBpcyBlbmNvdW50ZXJlZCwgc28g b25seSBzb21lIG9mIHRoZQo+ID4gPiAtICogb3BlcmF0aW9ucyByZXF1ZXN0ZWQgYnkgYSB0ZXN0 IG1heSBoYXZlIGJlZW4gY29tcGxldGVkLiAgVGVzdHMgdGhhdCBjYXRjaAo+ID4gPiAtICogZXJy b3JzIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gc2hvdWxkIHRha2UgY2FyZSB0byByZXN0b3Jl IHRoZSBkaXNwbGF5IHRvCj4gPiA+IC0gKiBhIHNhbmUgc3RhdGUgYWZ0ZXIgYSBmYWlsdXJlIGlz IGRldGVjdGVkLgo+ID4gPiAtICoKPiA+ID4gLSAqIFJldHVybnM6IDAgdXBvbiBzdWNjZXNzLCBv dGhlcndpc2UgdGhlIGVycm9yIGNvZGUgb2YgdGhlIGZpcnN0IGVycm9yCj4gPiA+IC0gKiBlbmNv dW50ZXJlZC4KPiA+ID4gLSAqLwo+ID4gPiAgaW50IGlndF9kaXNwbGF5X3RyeV9jb21taXQyKGln dF9kaXNwbGF5X3QgKmRpc3BsYXksIGVudW0gaWd0X2NvbW1pdF9zdHlsZSBzKQo+ID4gPiAgewo+ ID4gPiAgCXJldHVybiBkb19kaXNwbGF5X2NvbW1pdChkaXNwbGF5LCBzLCBmYWxzZSk7Cj4gPiA+ ICB9Cj4gPiA+ICAKPiA+ID4gLS8qKgo+ID4gPiAtICogaWd0X2Rpc3BsYXlfY29tbWl0Ogo+ID4g PiAtICogQGRpc3BsYXk6IERSTSBkZXZpY2UgaGFuZGxlCj4gPiA+IC0gKgo+ID4gPiAtICogQ29t bWl0cyBmcmFtZWJ1ZmZlciBhbmQgcG9zaXRpb25pbmcgY2hhbmdlcyB0byBhbGwgcGxhbmVzIG9m IGVhY2ggZGlzcGxheQo+ID4gPiAtICogcGlwZS4KPiA+ID4gLSAqCj4gPiA+IC0gKiBSZXR1cm5z OiAwIHVwb24gc3VjY2Vzcy4gIFRoaXMgZnVuY3Rpb24gd2lsbCBuZXZlciByZXR1cm4gdXBvbiBm YWlsdXJlCj4gPiA+IC0gKiBzaW5jZSBpZ3RfZmFpbCgpIGF0IGxvd2VyIGxldmVscyB3aWxsIGxv bmdqbXAgb3V0IG9mIGl0Lgo+ID4gPiAtICovCj4gPiA+ICBpbnQgaWd0X2Rpc3BsYXlfY29tbWl0 KGlndF9kaXNwbGF5X3QgKmRpc3BsYXkpCj4gPiA+ICB7Cj4gPiA+ICAJcmV0dXJuIGlndF9kaXNw bGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0xFR0FDWSk7Cj4gPiA+IEBAIC0xNzIzLDE1ICsx NDc1LDYgQEAgZHJtTW9kZU1vZGVJbmZvICppZ3Rfb3V0cHV0X2dldF9tb2RlKGlndF9vdXRwdXRf dCAqb3V0cHV0KQo+ID4gPiAgCXJldHVybiAmb3V0cHV0LT5jb25maWcuZGVmYXVsdF9tb2RlOwo+ ID4gPiAgfQo+ID4gPiAgCj4gPiA+IC0vKioKPiA+ID4gLSAqIGlndF9vdXRwdXRfb3ZlcnJpZGVf bW9kZToKPiA+ID4gLSAqIEBvdXRwdXQ6IE91dHB1dCBvZiB3aGljaCB0aGUgbW9kZSB3aWxsIGJl IG92ZXJyaWRkZW4KPiA+ID4gLSAqIEBtb2RlOiBOZXcgbW9kZQo+ID4gPiAtICoKPiA+ID4gLSAq IE92ZXJyaWRlcyB0aGUgb3V0cHV0J3MgbW9kZSB3aXRoIEBtb2RlLCBzbyB0aGF0IGl0IGlzIHVz ZWQgaW5zdGVhZCBvZiB0aGUKPiA+ID4gLSAqIG1vZGUgb2J0YWluZWQgd2l0aCBnZXQgY29ubmVj dG9ycy4gTm90ZSB0aGF0IHRoZSBtb2RlIGlzIHVzZWQgd2l0aG91dAo+ID4gPiAtICogY2hlY2tp bmcgaWYgdGhlIG91dHB1dCBzdXBwb3J0cyBpdCwgc28gdGhpcyBtaWdodCBsZWFkIHRvIHVuZXhw ZWN0ZWQgcmVzdWx0cy4KPiA+ID4gLSAqLwo+ID4gPiAgdm9pZCBpZ3Rfb3V0cHV0X292ZXJyaWRl X21vZGUoaWd0X291dHB1dF90ICpvdXRwdXQsIGRybU1vZGVNb2RlSW5mbyAqbW9kZSkKPiA+ID4g IHsKPiA+ID4gIAlvdXRwdXQtPm92ZXJyaWRlX21vZGUgPSAqbW9kZTsKPiA+ID4gQEAgLTE4MDMs MTYgKzE1NDYsNiBAQCB2b2lkIGlndF9wbGFuZV9zZXRfcG9zaXRpb24oaWd0X3BsYW5lX3QgKnBs YW5lLCBpbnQgeCwgaW50IHkpCj4gPiA+ICAJcGxhbmUtPnBvc2l0aW9uX2NoYW5nZWQgPSB0cnVl Owo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+IC0vKioKPiA+ID4gLSAqIGlndF9wbGFuZV9zZXRfc2l6 ZToKPiA+ID4gLSAqIEBwbGFuZTogcGxhbmUgcG9pbnRlciBmb3Igd2hpY2ggc2l6ZSB0byBiZSBz ZXQKPiA+ID4gLSAqIEB3OiB3aWR0aAo+ID4gPiAtICogQGg6IGhlaWdodAo+ID4gPiAtICoKPiA+ ID4gLSAqIFRoaXMgZnVuY3Rpb24gc2V0cyB3aWR0aCBhbmQgaGVpZ2h0IGZvciByZXF1ZXN0ZWQg cGxhbmUuCj4gPiA+IC0gKiBOZXcgc2l6ZSB3aWxsIGJlIGNvbW1pdHRlZCBhdCBwbGFuZSBjb21t aXQgdGltZSB2aWEKPiA+ID4gLSAqIGRybU1vZGVTZXRQbGFuZSgpLgo+ID4gPiAtICovCj4gPiA+ ICB2b2lkIGlndF9wbGFuZV9zZXRfc2l6ZShpZ3RfcGxhbmVfdCAqcGxhbmUsIGludCB3LCBpbnQg aCkKPiA+ID4gIHsKPiA+ID4gIAlpZ3RfcGlwZV90ICpwaXBlID0gcGxhbmUtPnBpcGU7Cj4gPiA+ IEBAIC0xODI3LDE2ICsxNTYwLDYgQEAgdm9pZCBpZ3RfcGxhbmVfc2V0X3NpemUoaWd0X3BsYW5l X3QgKnBsYW5lLCBpbnQgdywgaW50IGgpCj4gPiA+ICAJcGxhbmUtPnNpemVfY2hhbmdlZCA9IHRy dWU7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gLS8qKgo+ID4gPiAtICogaWd0X2ZiX3NldF9wb3Np dGlvbjoKPiA+ID4gLSAqIEBmYjogZnJhbWVidWZmZXIgcG9pbnRlcgo+ID4gPiAtICogQHBsYW5l OiBwbGFuZQo+ID4gPiAtICogQHg6IFggcG9zaXRpb24KPiA+ID4gLSAqIEB5OiBZIHBvc2l0aW9u Cj4gPiA+IC0gKgo+ID4gPiAtICogVGhpcyBmdW5jdGlvbiBzZXRzIHBvc2l0aW9uIGZvciByZXF1 ZXN0ZWQgZnJhbWVidWZmZXIgYXMgc3JjIHRvIHBsYW5lLgo+ID4gPiAtICogTmV3IHBvc2l0aW9u IHdpbGwgYmUgY29tbWl0dGVkIGF0IHBsYW5lIGNvbW1pdCB0aW1lIHZpYSBkcm1Nb2RlU2V0UGxh bmUoKS4KPiA+ID4gLSAqLwo+ID4gPiAgdm9pZCBpZ3RfZmJfc2V0X3Bvc2l0aW9uKHN0cnVjdCBp Z3RfZmIgKmZiLCBpZ3RfcGxhbmVfdCAqcGxhbmUsCj4gPiA+ICAJdWludDMyX3QgeCwgdWludDMy X3QgeSkKPiA+ID4gIHsKPiA+ID4gQEAgLTE4NTIsMTcgKzE1NzUsNiBAQCB2b2lkIGlndF9mYl9z ZXRfcG9zaXRpb24oc3RydWN0IGlndF9mYiAqZmIsIGlndF9wbGFuZV90ICpwbGFuZSwKPiA+ID4g IAlwbGFuZS0+ZmJfY2hhbmdlZCA9IHRydWU7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gLS8qKgo+ ID4gPiAtICogaWd0X2ZiX3NldF9zaXplOgo+ID4gPiAtICogQGZiOiBmcmFtZWJ1ZmZlciBwb2lu dGVyCj4gPiA+IC0gKiBAcGxhbmU6IHBsYW5lCj4gPiA+IC0gKiBAdzogd2lkdGgKPiA+ID4gLSAq IEBoOiBoZWlnaHQKPiA+ID4gLSAqCj4gPiA+IC0gKiBUaGlzIGZ1bmN0aW9uIHNldHMgZmV0Y2gg cmVjdCBzaXplIGZyb20gcmVxdWVzdGVkIGZyYW1lYnVmZmVyIGFzIHNyYwo+ID4gPiAtICogdG8g cGxhbmUuIE5ldyBzaXplIHdpbGwgYmUgY29tbWl0dGVkIGF0IHBsYW5lIGNvbW1pdCB0aW1lIHZp YQo+ID4gPiAtICogZHJtTW9kZVNldFBsYW5lKCkuCj4gPiA+IC0gKi8KPiA+ID4gIHZvaWQgaWd0 X2ZiX3NldF9zaXplKHN0cnVjdCBpZ3RfZmIgKmZiLCBpZ3RfcGxhbmVfdCAqcGxhbmUsCj4gPiA+ ICAJdWludDMyX3QgdywgdWludDMyX3QgaCkKPiA+ID4gIHsKPiA+ID4gQEAgLTE5MjMsMTYgKzE2 MzUsNiBAQCB2b2lkIGlndF9wbGFuZV9zZXRfcm90YXRpb24oaWd0X3BsYW5lX3QgKnBsYW5lLCBp Z3Rfcm90YXRpb25fdCByb3RhdGlvbikKPiA+ID4gIAlwbGFuZS0+cm90YXRpb25fY2hhbmdlZCA9 IHRydWU7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gLS8qKgo+ID4gPiAtICogaWd0X2NydGNfc2V0 X2JhY2tncm91bmQ6Cj4gPiA+IC0gKiBAcGlwZTogcGlwZSBwb2ludGVyIHRvIHdoaWNoIGJhY2tn cm91bmQgY29sb3IgdG8gYmUgc2V0Cj4gPiA+IC0gKiBAYmFja2dyb3VuZDogYmFja2dyb3VuZCBj b2xvciB2YWx1ZSBpbiBCR1IgMTZicGMKPiA+ID4gLSAqCj4gPiA+IC0gKiBTZXRzIGJhY2tncm91 bmQgY29sb3IgZm9yIHJlcXVlc3RlZCBwaXBlLiBDb2xvciB2YWx1ZSBwcm92aWRlZCBoZXJlCj4g PiA+IC0gKiB3aWxsIGJlIGFjdHVhbGx5IHN1Ym1pdHRlZCBhdCBvdXRwdXQgY29tbWl0IHRpbWUg dmlhICJiYWNrZ3JvdW5kX2NvbG9yIgo+ID4gPiAtICogcHJvcGVydHkuCj4gPiA+IC0gKiBGb3Ig ZXhhbXBsZSB0byBnZXQgcmVkIGFzIGJhY2tncm91bmQsIHNldCBiYWNrZ3JvdW5kID0gMHgwMDAw MDAwMEZGRkYuCj4gPiA+IC0gKi8KPiA+ID4gIHZvaWQgaWd0X2NydGNfc2V0X2JhY2tncm91bmQo aWd0X3BpcGVfdCAqcGlwZSwgdWludDY0X3QgYmFja2dyb3VuZCkKPiA+ID4gIHsKPiA+ID4gIAlp Z3RfZGlzcGxheV90ICpkaXNwbGF5ID0gcGlwZS0+ZGlzcGxheTsKPiA+ID4gQEAgLTE5NDYsNyAr MTY0OCw2IEBAIHZvaWQgaWd0X2NydGNfc2V0X2JhY2tncm91bmQoaWd0X3BpcGVfdCAqcGlwZSwg dWludDY0X3QgYmFja2dyb3VuZCkKPiA+ID4gIAlwaXBlLT5iYWNrZ3JvdW5kX2NoYW5nZWQgPSB0 cnVlOwo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+IC0KPiA+ID4gIHZvaWQgaWd0X3dhaXRfZm9yX3Zi bGFuayhpbnQgZHJtX2ZkLCBlbnVtIHBpcGUgcGlwZSkKPiA+ID4gIHsKPiA+ID4gIAlkcm1WQmxh bmsgd2FpdF92Ymw7Cj4gPiA+IEBAIC0xOTYwLDE1ICsxNjYxLDYgQEAgdm9pZCBpZ3Rfd2FpdF9m b3JfdmJsYW5rKGludCBkcm1fZmQsIGVudW0gcGlwZSBwaXBlKQo+ID4gPiAgCWlndF9hc3NlcnQo ZHJtV2FpdFZCbGFuayhkcm1fZmQsICZ3YWl0X3ZibCkgPT0gMCk7Cj4gPiA+ICB9Cj4gPiA+ICAK PiA+ID4gLS8qKgo+ID4gPiAtICogaWd0X2VuYWJsZV9jb25uZWN0b3JzOgo+ID4gPiAtICoKPiA+ ID4gLSAqIEZvcmNlIGNvbm5lY3RvcnMgdG8gYmUgZW5hYmxlZCB3aGVyZSB0aGlzIGlzIGtub3du IHRvIHdvcmsgd2VsbC4gVXNlCj4gPiA+IC0gKiAjaWd0X3Jlc2V0X2Nvbm5lY3RvcnMgdG8gcmV2 ZXJ0IHRoZSBjaGFuZ2VzLgo+ID4gPiAtICoKPiA+ID4gLSAqIEFuIGV4aXQgaGFuZGxlciBpcyBp bnN0YWxsZWQgdG8gZW5zdXJlIGNvbm5lY3RvcnMgYXJlIHJlc2V0IHdoZW4gdGhlIHRlc3QKPiA+ ID4gLSAqIGV4aXRzLgo+ID4gPiAtICovCj4gPiA+ICB2b2lkIGlndF9lbmFibGVfY29ubmVjdG9y cyh2b2lkKQo+ID4gPiAgewo+ID4gPiAgCWRybU1vZGVSZXMgKnJlczsKPiA+ID4gQEAgLTE5ODMs OCArMTY3NSw4IEBAIHZvaWQgaWd0X2VuYWJsZV9jb25uZWN0b3JzKHZvaWQpCj4gPiA+ICAKPiA+ ID4gIAkJYyA9IGRybU1vZGVHZXRDb25uZWN0b3JDdXJyZW50KGRybV9mZCwgcmVzLT5jb25uZWN0 b3JzW2ldKTsKPiA+ID4gIAo+ID4gPiAtCQkvKiBkb24ndCBhdHRlbXB0IHRvIGZvcmNlIGNvbm5l Y3RvcnMgdGhhdCBhcmUgYWxyZWFkeSBjb25uZWN0ZWQKPiA+ID4gLQkJICovCj4gPiA+ICsJCS8q IGRvbid0IGF0dGVtcHQgdG8gZm9yY2UgY29ubmVjdG9ycyB0aGF0Cj4gPiA+ICsJCSAqIGFyZSBh bHJlYWR5IGNvbm5lY3RlZCAqLwo+ID4gPiAgCQlpZiAoYy0+Y29ubmVjdGlvbiA9PSBEUk1fTU9E RV9DT05ORUNURUQpCj4gPiA+ICAJCQljb250aW51ZTsKPiA+ID4gIAo+ID4gPiBAQCAtMjAwMSwx MSArMTY5Myw2IEBAIHZvaWQgaWd0X2VuYWJsZV9jb25uZWN0b3JzKHZvaWQpCj4gPiA+ICAJY2xv c2UoZHJtX2ZkKTsKPiA+ID4gIH0KPiA+ID4gIAo+ID4gPiAtLyoqCj4gPiA+IC0gKiBpZ3RfcmVz ZXRfY29ubmVjdG9yczoKPiA+ID4gLSAqCj4gPiA+IC0gKiBSZW1vdmUgYW55IGZvcmNlZCBzdGF0 ZSBmcm9tIHRoZSBjb25uZWN0b3JzLgo+ID4gPiAtICovCj4gPiA+ICB2b2lkIGlndF9yZXNldF9j b25uZWN0b3JzKHZvaWQpCj4gPiA+ICB7Cj4gPiA+ICAJY2hhciAqKnRtcDsKPiA+ID4gZGlmZiAt LWdpdCBhL2xpYi9pZ3Rfa21zLmggYi9saWIvaWd0X2ttcy5oCj4gPiA+IGluZGV4IDk0ZjMxNWYu LjJjYzhhM2IgMTAwNjQ0Cj4gPiA+IC0tLSBhL2xpYi9pZ3Rfa21zLmgKPiA+ID4gKysrIGIvbGli L2lndF9rbXMuaAo+ID4gPiBAQCAtMjUsNiArMjUsMzAgQEAKPiA+ID4gICAqIAlEYW1pZW4gTGVz cGlhdSA8ZGFtaWVuLmxlc3BpYXVAaW50ZWwuY29tPgo+ID4gPiAgICovCj4gPiA+ICAKPiA+ID4g Ky8qKgo+ID4gPiArICogU0VDVElPTjppZ3Rfa21zCj4gPiA+ICsgKiBAc2hvcnRfZGVzY3JpcHRp b246IEtlcm5lbCBtb2Rlc2V0dGluZyBzdXBwb3J0IGxpYnJhcnkKPiA+ID4gKyAqIEB0aXRsZTog S01TCj4gPiA+ICsgKiBAaW5jbHVkZTogaWd0LmgKPiA+ID4gKyAqCj4gPiA+ICsgKiBUaGlzIGxp YnJhcnkgcHJvdmlkZXMgc3VwcG9ydCB0byBlbnVtZXJhdGUgYW5kIHNldCBtb2Rlc2V0IGNvbmZp Z3VyYXRpb25zLgo+ID4gPiArICoKPiA+ID4gKyAqIFRoZXJlIGFyZSB0d28gcGFydHMgaW4gdGhp cyBsaWJyYXJ5OiBGaXJzdCB0aGUgbG93IGxldmVsIGhlbHBlciBmdW5jdGlvbgo+ID4gPiArICog d2hpY2ggZGlyZWN0bHkgYnVpbGQgb24gdG9wIG9mIHJhdyBpb2N0bHMgb3IgdGhlIGludGVyZmFj ZXMgcHJvdmlkZWQgYnkKPiA+ID4gKyAqIGxpYmRybS4gVGhvc2UgZnVuY3Rpb25zIGFsbCBoYXZl IGEga21zdGVzdF8gcHJlZml4Lgo+ID4gPiArICoKPiA+ID4gKyAqIFRoZSBzZWNvbmQgcGFydCBp cyBhIGhpZ2gtbGV2ZWwgbGlicmFyeSB0byBtYW5hZ2UgbW9kZXNldCBjb25maWd1cmF0aW9ucwo+ ID4gPiArICogd2hpY2ggYWJzdHJhY3RzIGF3YXkgc29tZSBvZiB0aGUgbG93LWxldmVsIGRldGFp bHMgbGlrZSB0aGUgZGlmZmVyZW5jZQo+ID4gPiArICogYmV0d2VlbiBsZWdhY3kgYW5kIHVuaXZl cnNhbCBwbGFuZSBzdXBwb3J0IGZvciBzZXR0aW5nIGN1cnNvcnMgb3IgaW4gdGhlCj4gPiA+ICsg KiBmdXR1cmUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBsZWdhY3kgYW5kIGF0b21pYyBjb21taXQu IFRoZXNlIGhpZ2gtbGV2ZWwKPiA+ID4gKyAqIGZ1bmN0aW9ucyBoYXZlIGFsbCBpZ3RfIHByZWZp eGVzLiBUaGlzIHBhcnQgaXMgc3RpbGwgdmVyeSBtdWNoIHdvcmsgaW4KPiA+ID4gKyAqIHByb2dy ZXNzIGFuZCBzbyBhbHNvIGxhY2tzIGEgYml0IGRvY3VtZW50YXRpb24gZm9yIHRoZSBpbmRpdmlk dWFsIGZ1bmN0aW9ucy4KPiA+ID4gKyAqCj4gPiA+ICsgKiBOb3RlIHRoYXQgdGhpcyBsaWJyYXJ5 J3MgaGVhZGVyIHB1bGxzIGluIHRoZSBbaS1nLXQKPiA+ID4gKyAqIGZyYW1lYnVmZmVyXShpbnRl bC1ncHUtdG9vbHMtRnJhbWVidWZmZXIuaHRtbCkgbGlicmFyeSBhcyBhCj4gPiA+ICsgKiBkZXBl bmRlbmN5Lgo+ID4gPiArICovCj4gPiA+ICsKPiA+ID4gICNpZm5kZWYgX19JR1RfS01TX0hfXwo+ ID4gPiAgI2RlZmluZSBfX0lHVF9LTVNfSF9fCj4gPiA+ICAKPiA+ID4gQEAgLTM3LDcgKzYxLDYg QEAKPiA+ID4gICNpbmNsdWRlICJpZ3RfZmIuaCIKPiA+ID4gICNpbmNsdWRlICJpb2N0bF93cmFw cGVycy5oIgo+ID4gPiAgCj4gPiA+IC0vKiBMb3ctbGV2ZWwgaGVscGVycyB3aXRoIGttc3Rlc3Rf IHByZWZpeCAqLwo+ID4gPiAgCj4gPiA+ICBlbnVtIHBpcGUgewo+ID4gPiAgICAgICAgICBQSVBF X0FOWSA9IC0xLAo+ID4gPiBAQCAtNDYsNyArNjksNiBAQCBlbnVtIHBpcGUgewo+ID4gPiAgICAg ICAgICBQSVBFX0MsCj4gPiA+ICAgICAgICAgIEk5MTVfTUFYX1BJUEVTCj4gPiA+ICB9Owo+ID4g PiAtY29uc3QgY2hhciAqa21zdGVzdF9waXBlX25hbWUoZW51bSBwaXBlIHBpcGUpOwo+ID4gPiAg Cj4gPiA+ICAvKiBXZSBuYW1lc3BhY2UgdGhpcyBlbnVtIHRvIG5vdCBjb25mbGljdCB3aXRoIHRo ZSBBbmRyb2lkIGk5MTVfZHJtLmggKi8KPiA+ID4gIGVudW0gaWd0X3BsYW5lIHsKPiA+ID4gQEAg LTU3LDggKzc5LDYgQEAgZW51bSBpZ3RfcGxhbmUgewo+ID4gPiAgICAgICAgICBJR1RfUExBTkVf Q1VSU09SLAo+ID4gPiAgfTsKPiA+ID4gIAo+ID4gPiAtY29uc3QgY2hhciAqa21zdGVzdF9wbGFu ZV9uYW1lKGVudW0gaWd0X3BsYW5lIHBsYW5lKTsKPiA+ID4gLQo+ID4gPiAgZW51bSBwb3J0IHsK PiA+ID4gICAgICAgICAgUE9SVF9BID0gMCwKPiA+ID4gICAgICAgICAgUE9SVF9CLAo+ID4gPiBA QCAtNjgsNDQgKzg4LDYgQEAgZW51bSBwb3J0IHsKPiA+ID4gICAgICAgICAgSTkxNV9NQVhfUE9S VFMKPiA+ID4gIH07Cj4gPiA+ICAKPiA+ID4gLS8qKgo+ID4gPiAtICoga21zdGVzdF9wb3J0X25h bWU6Cj4gPiA+IC0gKiBAcG9ydDogZGlzcGxheSBwbGFuZQo+ID4gPiAtICoKPiA+ID4gLSAqIFJl dHVybnM6IFN0cmluZyByZXByZXNlbnRpbmcgQHBvcnQsIGUuZy4gIkEiLgo+ID4gPiAtICovCj4g PiA+IC0jZGVmaW5lIGttc3Rlc3RfcG9ydF9uYW1lKHBvcnQpICgocG9ydCkgKyAnQScpCj4gPiA+ IC0KPiA+ID4gLS8qKgo+ID4gPiAtICoga21zdGVzdF9lbmNvZGVyX3R5cGVfc3RyOgo+ID4gPiAt ICogQHR5cGU6IERSTV9NT0RFX0VOQ09ERVJfKiBlbnVtZXJhdGlvbiB2YWx1ZQo+ID4gPiAtICoK PiA+ID4gLSAqIFJldHVybnM6IEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZHJtIGVuY29kZXIg QHR5cGUuCj4gPiA+IC0gKi8KPiA+ID4gLWNvbnN0IGNoYXIgKmttc3Rlc3RfZW5jb2Rlcl90eXBl X3N0cihpbnQgdHlwZSk7Cj4gPiA+IC0KPiA+ID4gLS8qKgo+ID4gPiAtICoga21zdGVzdF9jb25u ZWN0b3Jfc3RhdHVzX3N0cjoKPiA+ID4gLSAqIEBzdGF0dXM6IERSTV9NT0RFXyogY29ubmVjdG9y IHN0YXR1cyB2YWx1ZQo+ID4gPiAtICoKPiA+ID4gLSAqIFJldHVybnM6IEEgc3RyaW5nIHJlcHJl c2VudGluZyB0aGUgZHJtIGNvbm5lY3RvciBzdGF0dXMgQHN0YXR1cy4KPiA+ID4gLSAqLwo+ID4g PiAtY29uc3QgY2hhciAqa21zdGVzdF9jb25uZWN0b3Jfc3RhdHVzX3N0cihpbnQgc3RhdHVzKTsK PiA+ID4gLQo+ID4gPiAtLyoqCj4gPiA+IC0gKiBrbXN0ZXN0X2Nvbm5lY3Rvcl90eXBlX3N0cjoK PiA+ID4gLSAqIEB0eXBlOiBEUk1fTU9ERV9DT05ORUNUT1JfKiBlbnVtZXJhdGlvbiB2YWx1ZQo+ ID4gPiAtICoKPiA+ID4gLSAqIFJldHVybnM6IEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZHJt IGNvbm5lY3RvciBAdHlwZS4KPiA+ID4gLSAqLwo+ID4gPiAtY29uc3QgY2hhciAqa21zdGVzdF9j b25uZWN0b3JfdHlwZV9zdHIoaW50IHR5cGUpOwo+ID4gPiAtCj4gPiA+IC12b2lkIGttc3Rlc3Rf ZHVtcF9tb2RlKGRybU1vZGVNb2RlSW5mbyAqbW9kZSk7Cj4gPiA+IC0KPiA+ID4gLWludCBrbXN0 ZXN0X2dldF9waXBlX2Zyb21fY3J0Y19pZChpbnQgZmQsIGludCBjcnRjX2lkKTsKPiA+ID4gLXZv aWQga21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSh2b2lkKTsKPiA+ID4gLXZvaWQga21zdGVz dF9yZXN0b3JlX3Z0X21vZGUodm9pZCk7Cj4gPiA+IC0KPiA+ID4gIHN0cnVjdCBrbXN0ZXN0X2Nv bm5lY3Rvcl9jb25maWcgewo+ID4gPiAgCWRybU1vZGVDcnRjICpjcnRjOwo+ID4gPiAgCWRybU1v ZGVDb25uZWN0b3IgKmNvbm5lY3RvcjsKPiA+ID4gQEAgLTEyOSwyNSArMTExLDYgQEAgZW51bSBr bXN0ZXN0X2ZvcmNlX2Nvbm5lY3Rvcl9zdGF0ZSB7Cj4gPiA+ICAJRk9SQ0VfQ09OTkVDVE9SX09G Rgo+ID4gPiAgfTsKPiA+ID4gIAo+ID4gPiAtYm9vbCBrbXN0ZXN0X2ZvcmNlX2Nvbm5lY3Rvcihp bnQgZmQsIGRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ID4gLQkJCSAgICAgZW51bSBr bXN0ZXN0X2ZvcmNlX2Nvbm5lY3Rvcl9zdGF0ZSBzdGF0ZSk7Cj4gPiA+IC12b2lkIGttc3Rlc3Rf ZWRpZF9hZGRfM2QoY29uc3QgdW5zaWduZWQgY2hhciAqZWRpZCwgc2l6ZV90IGxlbmd0aCwgdW5z aWduZWQgY2hhciAqbmV3X2VkaWRfcHRyW10sIHNpemVfdCAqbmV3X2xlbmd0aCk7Cj4gPiA+IC12 b2lkIGttc3Rlc3RfZm9yY2VfZWRpZChpbnQgZHJtX2ZkLCBkcm1Nb2RlQ29ubmVjdG9yICpjb25u ZWN0b3IsCj4gPiA+IC0JCQljb25zdCB1bnNpZ25lZCBjaGFyICplZGlkLCBzaXplX3QgbGVuZ3Ro KTsKPiA+ID4gLQo+ID4gPiAtYm9vbCBrbXN0ZXN0X2dldF9jb25uZWN0b3JfZGVmYXVsdF9tb2Rl KGludCBkcm1fZmQsIGRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ID4gLQkJCQkJZHJt TW9kZU1vZGVJbmZvICptb2RlKTsKPiA+ID4gLWJvb2wga21zdGVzdF9nZXRfY29ubmVjdG9yX2Nv bmZpZyhpbnQgZHJtX2ZkLCB1aW50MzJfdCBjb25uZWN0b3JfaWQsCj4gPiA+IC0JCQkJICB1bnNp Z25lZCBsb25nIGNydGNfaWR4X21hc2ssCj4gPiA+IC0JCQkJICBzdHJ1Y3Qga21zdGVzdF9jb25u ZWN0b3JfY29uZmlnICpjb25maWcpOwo+ID4gPiAtdm9pZCBrbXN0ZXN0X2ZyZWVfY29ubmVjdG9y X2NvbmZpZyhzdHJ1Y3Qga21zdGVzdF9jb25uZWN0b3JfY29uZmlnICpjb25maWcpOwo+ID4gPiAt Cj4gPiA+IC12b2lkIGttc3Rlc3Rfc2V0X2Nvbm5lY3Rvcl9kcG1zKGludCBmZCwgZHJtTW9kZUNv bm5lY3RvciAqY29ubmVjdG9yLCBpbnQgbW9kZSk7Cj4gPiA+IC1ib29sIGttc3Rlc3RfZ2V0X3By b3BlcnR5KGludCBkcm1fZmQsIHVpbnQzMl90IG9iamVjdF9pZCwgdWludDMyX3Qgb2JqZWN0X3R5 cGUsCj4gPiA+IC0JCQkgIGNvbnN0IGNoYXIgKm5hbWUsIHVpbnQzMl90ICpwcm9wX2lkLCB1aW50 NjRfdCAqdmFsdWUsCj4gPiA+IC0JCQkgIGRybU1vZGVQcm9wZXJ0eVB0ciAqcHJvcCk7Cj4gPiA+ IC12b2lkIGttc3Rlc3RfdW5zZXRfYWxsX2NydGNzKGludCBkcm1fZmQsIGRybU1vZGVSZXNQdHIg cmVzb3VyY2VzKTsKPiA+ID4gLQo+ID4gPiAgLyoKPiA+ID4gICAqIEEgc21hbGwgbW9kZXNldCBB UEkKPiA+ID4gICAqLwo+ID4gPiBAQCAtMTYwLDggKzEyMyw4IEBAIGVudW0gaWd0X2NvbW1pdF9z dHlsZSB7Cj4gPiA+ICB9Owo+ID4gPiAgCj4gPiA+ICB0eXBlZGVmIHN0cnVjdCBpZ3RfZGlzcGxh eSBpZ3RfZGlzcGxheV90Owo+ID4gPiAtdHlwZWRlZiBzdHJ1Y3QgaWd0X3BpcGUgaWd0X3BpcGVf dDsKPiA+ID4gIHR5cGVkZWYgdWludDMyX3QgaWd0X2ZpeGVkX3Q7CQkJLyogMTYuMTYgZml4ZWQg cG9pbnQgKi8KPiA+ID4gK3R5cGVkZWYgc3RydWN0IGlndF9waXBlIGlndF9waXBlX3Q7Cj4gPiA+ ICAKPiA+ID4gIHR5cGVkZWYgZW51bSB7Cj4gPiA+ICAJLyogdGhpcyBtYXBzIHRvIHRoZSBrZXJu ZWwgQVBJICovCj4gPiA+IEBAIC0yMzcsMTcgKzIwMCwzMDAgQEAgc3RydWN0IGlndF9kaXNwbGF5 IHsKPiA+ID4gIAlib29sIGhhc191bml2ZXJzYWxfcGxhbmVzOwo+ID4gPiAgfTsKPiA+ID4gIAo+ ID4gPiArLyogTG93LWxldmVsIGhlbHBlcnMgd2l0aCBrbXN0ZXN0XyBwcmVmaXggKi8KPiA+ID4g Kwo+ID4gPiArLyoqCj4gPiA+ICsgKiBrbXN0ZXN0X3BvcnRfbmFtZToKPiA+ID4gKyAqIEBwb3J0 OiBkaXNwbGF5IHBsYW5lCj4gPiA+ICsgKgo+ID4gPiArICogUmV0dXJuczogU3RyaW5nIHJlcHJl c2VudGluZyBAcG9ydCwgZS5nLiAiQSIuCj4gPiA+ICsgKi8KPiA+ID4gKyNkZWZpbmUga21zdGVz dF9wb3J0X25hbWUocG9ydCkgKChwb3J0KSArICdBJykKPiA+ID4gKwo+ID4gPiArLyoqCj4gPiA+ ICsgKiBrbXN0ZXN0X3BpcGVfbmFtZToKPiA+ID4gKyAqIEBwaXBlOiBkaXNwbGF5IHBpcGUKPiA+ ID4gKyAqCj4gPiA+ICsgKiBSZXR1cm5zOiBTdHJpbmcgcmVwcmVzbnRpbmcgQHBpcGUsIGUuZy4g IkEiLgo+ID4gPiArICovCj4gPiA+ICtjb25zdCBjaGFyICprbXN0ZXN0X3BpcGVfbmFtZShlbnVt IHBpcGUgcGlwZSk7Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICoga21zdGVzdF9wbGFuZV9u YW1lOgo+ID4gPiArICogQHBsYW5lOiBkaXNwbGF5IHBsYW5lCj4gPiA+ICsgKgo+ID4gPiArICog UmV0dXJuczogU3RyaW5nIHJlcHJlc250aW5nIEBwaXBlLCBlLmcuICJwbGFuZTEiLgo+ID4gPiAr ICovCj4gPiA+ICtjb25zdCBjaGFyICprbXN0ZXN0X3BsYW5lX25hbWUoZW51bSBpZ3RfcGxhbmUg cGxhbmUpOwo+ID4gPiArCj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICoga21zdGVzdF9lbmNv ZGVyX3R5cGVfc3RyOgo+ID4gPiArICogQHR5cGU6IERSTV9NT0RFX0VOQ09ERVJfKiBlbnVtZXJh dGlvbiB2YWx1ZQo+ID4gPiArICoKPiA+ID4gKyAqIFJldHVybnM6IEEgc3RyaW5nIHJlcHJlc2Vu dGluZyB0aGUgZHJtIGVuY29kZXIgQHR5cGUuCj4gPiA+ICsgKi8KPiA+ID4gK2NvbnN0IGNoYXIg Kmttc3Rlc3RfZW5jb2Rlcl90eXBlX3N0cihpbnQgdHlwZSk7Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ ID4gPiArICoga21zdGVzdF9jb25uZWN0b3Jfc3RhdHVzX3N0cjoKPiA+ID4gKyAqIEBzdGF0dXM6 IERSTV9NT0RFXyogY29ubmVjdG9yIHN0YXR1cyB2YWx1ZQo+ID4gPiArICoKPiA+ID4gKyAqIFJl dHVybnM6IEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZHJtIGNvbm5lY3RvciBzdGF0dXMgQHN0 YXR1cy4KPiA+ID4gKyAqLwo+ID4gPiArY29uc3QgY2hhciAqa21zdGVzdF9jb25uZWN0b3Jfc3Rh dHVzX3N0cihpbnQgc3RhdHVzKTsKPiA+ID4gKwo+ID4gPiArLyoqCj4gPiA+ICsgKiBrbXN0ZXN0 X2Nvbm5lY3Rvcl90eXBlX3N0cjoKPiA+ID4gKyAqIEB0eXBlOiBEUk1fTU9ERV9DT05ORUNUT1Jf KiBlbnVtZXJhdGlvbiB2YWx1ZQo+ID4gPiArICoKPiA+ID4gKyAqIFJldHVybnM6IEEgc3RyaW5n IHJlcHJlc2VudGluZyB0aGUgZHJtIGNvbm5lY3RvciBAdHlwZS4KPiA+ID4gKyAqLwo+ID4gPiAr Y29uc3QgY2hhciAqa21zdGVzdF9jb25uZWN0b3JfdHlwZV9zdHIoaW50IHR5cGUpOwo+ID4gPiAr Cj4gPiA+ICsvKioKPiA+ID4gKyAqIGttc3Rlc3RfZHVtcF9tb2RlOgo+ID4gPiArICogQG1vZGU6 IGxpYmRybSBtb2RlIHN0cnVjdHVyZQo+ID4gPiArICoKPiA+ID4gKyAqIFByaW50cyBAbW9kZSB0 byBzdGRvdXQgaW4gYSBodW1hLXJlYWRhYmxlIGZvcm0uCj4gPiA+ICsgKi8KPiA+ID4gK3ZvaWQg a21zdGVzdF9kdW1wX21vZGUoZHJtTW9kZU1vZGVJbmZvICptb2RlKTsKPiA+ID4gKwo+ID4gPiAr LyoqCj4gPiA+ICsgKiBrbXN0ZXN0X2dldF9waXBlX2Zyb21fY3J0Y19pZDoKPiA+ID4gKyAqIEBm ZDogRFJNIGZkCj4gPiA+ICsgKiBAY3J0Y19pZDogRFJNIENSVEMgaWQKPiA+ID4gKyAqCj4gPiA+ ICsgKiBSZXR1cm5zOiBUaGUgcGlwZSBudW1iZXIgZm9yIHRoZSBnaXZlbiBEUk0gQ1JUQyBAY3J0 Y19pZC4gVGhpcyBtYXBzIGRpcmVjdGx5Cj4gPiA+ICsgKiB0byBhbiBlbnVtIHBpcGUgdmFsdWUg dXNlZCBpbiBvdGhlciBoZWxwZXIgZnVuY3Rpb25zLgo+ID4gPiArICovCj4gPiA+ICtpbnQga21z dGVzdF9nZXRfcGlwZV9mcm9tX2NydGNfaWQoaW50IGZkLCBpbnQgY3J0Y19pZCk7Cj4gPiA+ICsK PiA+ID4gKy8qKgo+ID4gPiArICoga21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZToKPiA+ID4g KyAqCj4gPiA+ICsgKiBTZXRzIHRoZSBjb250cm9sbGluZyBWVCAoaWYgYXZhaWxhYmxlKSBpbnRv IGdyYXBoaWNzL3JhdyBtb2RlIGFuZCBpbnN0YWxscwo+ID4gPiArICogYW4gaWd0IGV4aXQgaGFu ZGxlciB0byBzZXQgdGhlIFZUIGJhY2sgdG8gdGV4dCBtb2RlIG9uIGV4aXQuIFVzZQo+ID4gPiAr ICogI2ttc3Rlc3RfcmVzdG9yZV92dF9tb2RlIHRvIHJlc3RvcmUgdGhlIHByZXZpb3VzIFZUIG1v ZGUgbWFudWFsbHkuCj4gPiA+ICsgKgo+ID4gPiArICogQWxsIGttcyB0ZXN0cyBtdXN0IGNhbGwg dGhpcyBmdW5jdGlvbiB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZmJjb24gZG9lc24ndAo+ID4gPiAr ICogaW50ZXJmZXJlIGJ5IGUuZy4gYmxhbmtpbmcgdGhlIHNjcmVlbi4KPiA+ID4gKyAqLwo+ID4g PiArdm9pZCBrbXN0ZXN0X3NldF92dF9ncmFwaGljc19tb2RlKHZvaWQpOwo+ID4gPiArCj4gPiA+ ICsvKioKPiA+ID4gKyAqIGttc3Rlc3RfcmVzdG9yZV92dF9tb2RlOgo+ID4gPiArICoKPiA+ID4g KyAqIFJlc3RvcmUgdGhlIFZUIG1vZGUgaW4gdXNlIGJlZm9yZSAja21zdGVzdF9zZXRfdnRfZ3Jh cGhpY3NfbW9kZSB3YXMgY2FsbGVkLgo+ID4gPiArICovCj4gPiA+ICt2b2lkIGttc3Rlc3RfcmVz dG9yZV92dF9tb2RlKHZvaWQpOwo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGttc3Rlc3Rf Zm9yY2VfY29ubmVjdG9yOgo+ID4gPiArICogQGZkOiBkcm0gZmlsZSBkZXNjcmlwdG9yCj4gPiA+ ICsgKiBAY29ubmVjdG9yOiBjb25uZWN0b3IKPiA+ID4gKyAqIEBzdGF0ZTogc3RhdGUgdG8gZm9y Y2Ugb24gQGNvbm5lY3Rvcgo+ID4gPiArICoKPiA+ID4gKyAqIEZvcmNlIHRoZSBzcGVjaWZpZWQg c3RhdGUgb24gdGhlIHNwZWNpZmllZCBjb25uZWN0b3IuCj4gPiA+ICsgKgo+ID4gPiArICogUmV0 dXJuczogdHJ1ZSBvbiBzdWNjZXNzCj4gPiA+ICsgKi8KPiA+ID4gK2Jvb2wga21zdGVzdF9mb3Jj ZV9jb25uZWN0b3IoaW50IGZkLCBkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiA+ICsJ CQkgICAgIGVudW0ga21zdGVzdF9mb3JjZV9jb25uZWN0b3Jfc3RhdGUgc3RhdGUpOwo+ID4gPiAr Cj4gPiA+ICsvKioKPiA+ID4gKyAqIGttc3Rlc3RfZWRpZF9hZGRfM2Q6Cj4gPiA+ICsgKiBAZWRp ZDogYW4gZXhpc3RpbmcgdmFsaWQgZWRpZCBibG9jawo+ID4gPiArICogQGxlbmd0aDogbGVuZ3Ro IG9mIEBlZGlkCj4gPiA+ICsgKiBAbmV3X2VkaWRfcHRyOiBwb2ludGVyIHRvIHdoZXJlIHRoZSBu ZXcgZWRpZCB3aWxsIGJlIHBsYWNlZAo+ID4gPiArICogQG5ld19sZW5ndGg6IHBvaW50ZXIgdG8g dGhlIHNpemUgb2YgdGhlIG5ldyBlZGlkCj4gPiA+ICsgKgo+ID4gPiArICogTWFrZXMgYSBjb3B5 IG9mIGFuIGV4aXN0aW5nIGVkaWQgYmxvY2sgYW5kIGFkZHMgYW4gZXh0ZW5zaW9uIGluZGljYXRp bmcKPiA+ID4gKyAqIHN0ZXJlbyAzRCBjYXBhYmlsaXRpZXMuCj4gPiA+ICsgKi8KPiA+ID4gK3Zv aWQga21zdGVzdF9lZGlkX2FkZF8zZChjb25zdCB1bnNpZ25lZCBjaGFyICplZGlkLCBzaXplX3Qg bGVuZ3RoLAo+ID4gPiArCQkJIHVuc2lnbmVkIGNoYXIgKm5ld19lZGlkX3B0cltdLCBzaXplX3Qg Km5ld19sZW5ndGgpOwo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGttc3Rlc3RfZm9yY2Vf ZWRpZDoKPiA+ID4gKyAqIEBkcm1fZmQ6IGRybSBmaWxlIGRlc2NyaXB0b3IKPiA+ID4gKyAqIEBj b25uZWN0b3I6IGNvbm5lY3RvciB0byBzZXQgQGVkaWQgb24KPiA+ID4gKyAqIEBlZGlkOiBBbiBF RElEIGRhdGEgYmxvY2sKPiA+ID4gKyAqIEBsZW5ndGg6IGxlbmd0aCBvZiB0aGUgRURJRCBkYXRh LiAjRURJRF9MRU5HVEggZGVmaW5lcyB0aGUgc3RhbmRhcmQgRURJRAo+ID4gPiArICogbGVuZ3Ro Cj4gPiA+ICsgKgo+ID4gPiArICogU2V0IHRoZSBFRElEIGRhdGEgb24gQGNvbm5lY3RvciB0byBA ZWRpZC4gU2VlIGFsc28gI2lndF9rbXNfZ2V0X2Jhc2VfZWRpZC4KPiA+ID4gKyAqCj4gPiA+ICsg KiBJZiBAbGVuZ3RoIGlzIHplcm8sIHRoZSBmb3JjZWQgRURJRCB3aWxsIGJlIHJlbW92ZWQuCj4g PiA+ICsgKi8KPiA+ID4gK3ZvaWQga21zdGVzdF9mb3JjZV9lZGlkKGludCBkcm1fZmQsIGRybU1v ZGVDb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ID4gKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVk aWQsIHNpemVfdCBsZW5ndGgpOwo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGttc3Rlc3Rf Z2V0X2Nvbm5lY3Rvcl9kZWZhdWx0X21vZGU6Cj4gPiA+ICsgKiBAZHJtX2ZkOiBEUk0gZmQKPiA+ ID4gKyAqIEBjb25uZWN0b3I6IGxpYmRybSBjb25uZWN0b3IKPiA+ID4gKyAqIEBtb2RlOiBsaWJk cm0gbW9kZQo+ID4gPiArICoKPiA+ID4gKyAqIFJldHJpZXZlcyB0aGUgZGVmYXVsdCBtb2RlIGZv ciBAY29ubmVjdG9yIGFuZCBzdG9yZXMgaXQgaW4gQG1vZGUuCj4gPiA+ICsgKgo+ID4gPiArICog UmV0dXJuczogdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlCj4gPiA+ICsgKi8KPiA+ ID4gK2Jvb2wga21zdGVzdF9nZXRfY29ubmVjdG9yX2RlZmF1bHRfbW9kZShpbnQgZHJtX2ZkLCBk cm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiA+ICsJCQkJCWRybU1vZGVNb2RlSW5mbyAq bW9kZSk7Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICoga21zdGVzdF9nZXRfY29ubmVjdG9y X2NvbmZpZzoKPiA+ID4gKyAqIEBkcm1fZmQ6IERSTSBmZAo+ID4gPiArICogQGNvbm5lY3Rvcl9p ZDogRFJNIGNvbm5lY3RvciBpZAo+ID4gPiArICogQGNydGNfaWR4X21hc2s6IG1hc2sgb2YgYWxs b3dlZCBEUk0gQ1JUQyBpbmRpY2VzCj4gPiA+ICsgKiBAY29uZmlnOiBzdHJ1Y3R1cmUgZmlsbGVk IHdpdGggdGhlIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb24KPiA+ID4gKyAqCj4gPiA+ICsgKiBUaGlz IHRyaWVzIHRvIGZpbmQgYSBzdWl0YWJsZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2l2ZW4gY29u bmVjdG9yIGFuZCBDUlRDCj4gPiA+ICsgKiBjb25zdHJhaW50IGFuZCBmaWxscyBpdCBpbnRvIEBj b25maWcuCj4gPiA+ICsgKi8KPiA+ID4gK2Jvb2wga21zdGVzdF9nZXRfY29ubmVjdG9yX2NvbmZp ZyhpbnQgZHJtX2ZkLCB1aW50MzJfdCBjb25uZWN0b3JfaWQsCj4gPiA+ICsJCQkJICB1bnNpZ25l ZCBsb25nIGNydGNfaWR4X21hc2ssCj4gPiA+ICsJCQkJICBzdHJ1Y3Qga21zdGVzdF9jb25uZWN0 b3JfY29uZmlnICpjb25maWcpOwo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGttc3Rlc3Rf ZnJlZV9jb25uZWN0b3JfY29uZmlnOgo+ID4gPiArICogQGNvbmZpZzogY29ubmVjdG9yIGNvbmZp Z3VyYXRpb24gc3RydWN0dXJlCj4gPiA+ICsgKgo+ID4gPiArICogRnJlZSBhbnkgcmVzb3VyY2Vz IGluIEBjb25maWcgYWxsb2NhdGVkIGluIGttc3Rlc3RfZ2V0X2Nvbm5lY3Rvcl9jb25maWcoKS4K PiA+ID4gKyAqLwo+ID4gPiArdm9pZCBrbXN0ZXN0X2ZyZWVfY29ubmVjdG9yX2NvbmZpZyhzdHJ1 Y3Qga21zdGVzdF9jb25uZWN0b3JfY29uZmlnICpjb25maWcpOwo+ID4gPiArCj4gPiA+ICsvKioK PiA+ID4gKyAqIGttc3Rlc3Rfc2V0X2Nvbm5lY3Rvcl9kcG1zOgo+ID4gPiArICogQGZkOiBEUk0g ZmQKPiA+ID4gKyAqIEBjb25uZWN0b3I6IGxpYmRybSBjb25uZWN0b3IKPiA+ID4gKyAqIEBtb2Rl OiBEUk0gRFBNUyB2YWx1ZQo+ID4gPiArICoKPiA+ID4gKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0 aGUgRFBNUyBzZXR0aW5nIG9mIEBjb25uZWN0b3IgdG8gQG1vZGUuCj4gPiA+ICsgKi8KPiA+ID4g K3ZvaWQga21zdGVzdF9zZXRfY29ubmVjdG9yX2RwbXMoaW50IGZkLCBkcm1Nb2RlQ29ubmVjdG9y ICpjb25uZWN0b3IsIGludCBtb2RlKTsKPiA+ID4gKwo+ID4gPiArLyoqCj4gPiA+ICsgKiBrbXN0 ZXN0X2dldF9wcm9wZXJ0eToKPiA+ID4gKyAqIEBkcm1fZmQ6IGRybSBmaWxlIGRlc2NyaXB0b3IK PiA+ID4gKyAqIEBvYmplY3RfaWQ6IG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIHdlJ3JlIGdvaW5n IHRvIGdldAo+ID4gPiArICogQG9iamVjdF90eXBlOiB0eXBlIG9mIG9ial9pZCAoRFJNX01PREVf T0JKRUNUXyopCj4gPiA+ICsgKiBAbmFtZTogbmFtZSBvZiB0aGUgcHJvcGVydHkgd2UncmUgZ29p bmcgdG8gZ2V0Cj4gPiA+ICsgKiBAcHJvcF9pZDogaWYgbm90IE5VTEwsIHJldHVybnMgdGhlIHBy b3BlcnR5IGlkCj4gPiA+ICsgKiBAdmFsdWU6IGlmIG5vdCBOVUxMLCByZXR1cm5zIHRoZSBwcm9w ZXJ0eSB2YWx1ZQo+ID4gPiArICogQHByb3A6IGlmIG5vdCBOVUxMLCByZXR1cm5zIHRoZSBwcm9w ZXJ0eSwgYW5kIHRoZSBjYWxsZXIgd2lsbCBoYXZlIHRvIGZyZWUKPiA+ID4gKyAqICAgICAgICBp dCBtYW51YWxseS4KPiA+ID4gKyAqCj4gPiA+ICsgKiBGaW5kcyBhIHByb3BlcnR5IHdpdGggdGhl IGdpdmVuIG5hbWUgb24gdGhlIGdpdmVuIG9iamVjdC4KPiA+ID4gKyAqCj4gPiA+ICsgKiBSZXR1 cm5zOiB0cnVlIGluIGNhc2Ugd2UgZm91bmQgc29tZXRoaW5nLgo+ID4gPiArICovCj4gPiA+ICti b29sIGttc3Rlc3RfZ2V0X3Byb3BlcnR5KGludCBkcm1fZmQsIHVpbnQzMl90IG9iamVjdF9pZCwg dWludDMyX3Qgb2JqZWN0X3R5cGUsCj4gPiA+ICsJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIHVpbnQz Ml90ICpwcm9wX2lkLCB1aW50NjRfdCAqdmFsdWUsCj4gPiA+ICsJCQkgIGRybU1vZGVQcm9wZXJ0 eVB0ciAqcHJvcCk7Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICoga21zdGVzdF91bnNldF9h bGxfY3J0Y3M6Cj4gPiA+ICsgKiBAZHJtX2ZkOiB0aGUgRFJNIGZkCj4gPiA+ICsgKiBAcmVzb3Vy Y2VzOiBsaWJkcm0gcmVzb3VyY2VzIHBvaW50ZXIKPiA+ID4gKyAqCj4gPiA+ICsgKiBEaXNhYmxl cyBhbGwgdGhlIHNjcmVlbnMuCj4gPiA+ICsgKi8KPiA+ID4gK3ZvaWQga21zdGVzdF91bnNldF9h bGxfY3J0Y3MoaW50IGRybV9mZCwgZHJtTW9kZVJlc1B0ciByZXNvdXJjZXMpOwo+ID4gPiArCj4g PiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogaWd0X2Rpc3BsYXlfaW5pdDoKPiA+ID4gKyAqIEBk aXNwbGF5OiBhIHBvaW50ZXIgdG8gYW4gI2lndF9kaXNwbGF5X3Qgc3RydWN0dXJlCj4gPiA+ICsg KiBAZHJtX2ZkOiBhIGRybSBmaWxlIGRlc2NyaXB0b3IKPiA+ID4gKyAqCj4gPiA+ICsgKiBJbml0 aWFsaXplIEBkaXNwbGF5IGFuZCBhbGxvY2F0ZSB0aGUgdmFyaW91cyByZXNvdXJjZXMgcmVxdWly ZWQuIFVzZQo+ID4gPiArICogI2lndF9kaXNwbGF5X2ZpbmkgdG8gcmVsZWFzZSB0aGUgcmVzb3Vy Y2VzIHdoZW4gdGhleSBhcmUgbm8gbG9uZ2VyIHJlcXVpcmVkLgo+ID4gPiArICoKPiA+ID4gKyAq Lwo+ID4gPiAgdm9pZCBpZ3RfZGlzcGxheV9pbml0KGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGlu dCBkcm1fZmQpOwo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGlndF9kaXNwbGF5X2Zpbmk6 Cj4gPiA+ICsgKiBAZGlzcGxheTogYSBwb2ludGVyIHRvIGFuICNpZ3RfZGlzcGxheV90IHN0cnVj dHVyZQo+ID4gPiArICoKPiA+ID4gKyAqIFJlbGVhc2UgYW55IHJlc291cmNlcyBhc3NvY2lhdGVk IHdpdGggQGRpc3BsYXkuIFRoaXMgZG9lcyBub3QgZnJlZSBAZGlzcGxheQo+ID4gPiArICogaXRz ZWxmLgo+ID4gPiArICovCj4gPiA+ICB2b2lkIGlndF9kaXNwbGF5X2ZpbmkoaWd0X2Rpc3BsYXlf dCAqZGlzcGxheSk7Cj4gPiA+IC1pbnQgIGlndF9kaXNwbGF5X2NvbW1pdDIoaWd0X2Rpc3BsYXlf dCAqZGlzcGxheSwgZW51bSBpZ3RfY29tbWl0X3N0eWxlIHMpOwo+ID4gPiAtaW50ICBpZ3RfZGlz cGxheV9jb21taXQoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSk7Cj4gPiA+IC1pbnQgIGlndF9kaXNw bGF5X3RyeV9jb21taXQyKGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGVudW0gaWd0X2NvbW1pdF9z dHlsZSBzKTsKPiA+ID4gLWludCAgaWd0X2Rpc3BsYXlfZ2V0X25fcGlwZXMoaWd0X2Rpc3BsYXlf dCAqZGlzcGxheSk7Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogaWd0X2Rpc3BsYXlfY29t bWl0MjoKPiA+ID4gKyAqIEBkaXNwbGF5OiBEUk0gZGV2aWNlIGhhbmRsZQo+ID4gPiArICogQHM6 IENvbW1pdCBzdHlsZQo+ID4gPiArICoKPiA+ID4gKyAqIENvbW1pdHMgZnJhbWVidWZmZXIgYW5k IHBvc2l0aW9uaW5nIGNoYW5nZXMgdG8gYWxsIHBsYW5lcyBvZiBlYWNoIGRpc3BsYXkKPiA+ID4g KyAqIHBpcGUsIHVzaW5nIGEgc3BlY2lmaWMgQVBJIHRvIHBlcmZvcm0gdGhlIHByb2dyYW1taW5n LiAgVGhpcyBmdW5jdGlvbiBzaG91bGQKPiA+ID4gKyAqIGJlIHVzZWQgdG8gZXhlcmNpc2UgYSBz cGVjaWZpYyBkcml2ZXIgcHJvZ3JhbW1pbmcgQVBJOyBpZ3RfZGlzcGxheV9jb21taXQKPiA+ID4g KyAqIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgaWYgdGhlIEFQSSB1c2VkIGlzIHVuaW1wb3J0YW50 IHRvIHRoZSB0ZXN0IGJlaW5nIHJ1bi4KPiA+ID4gKyAqCj4gPiA+ICsgKiBUaGlzIGZ1bmN0aW9u IHNob3VsZCBvbmx5IGJlIHVzZWQgdG8gY29tbWl0IGNoYW5nZXMgdGhhdCBhcmUgZXhwZWN0ZWQg dG8KPiA+ID4gKyAqIHN1Y2NlZWQsIHNpbmNlIGFueSBmYWlsdXJlIGR1cmluZyB0aGUgY29tbWl0 IHByb2Nlc3Mgd2lsbCBjYXVzZSB0aGUgSUdUCj4gPiA+ICsgKiBzdWJ0ZXN0IHRvIGZhaWwuICBU byBjb21taXQgY2hhbmdlcyB0aGF0IGFyZSBleHBlY3RlZCB0byBmYWlsLCB1c2UKPiA+ID4gKyAq IEBpZ3RfdHJ5X2Rpc3BsYXlfY29tbWl0MiBpbnN0ZWFkLgo+ID4gPiArICoKPiA+ID4gKyAqIFJl dHVybnM6IDAgdXBvbiBzdWNjZXNzLiAgVGhpcyBmdW5jdGlvbiB3aWxsIG5ldmVyIHJldHVybiB1 cG9uIGZhaWx1cmUKPiA+ID4gKyAqIHNpbmNlIGlndF9mYWlsKCkgYXQgbG93ZXIgbGV2ZWxzIHdp bGwgbG9uZ2ptcCBvdXQgb2YgaXQuCj4gPiA+ICsgKi8KPiA+ID4gK2ludCBpZ3RfZGlzcGxheV9j b21taXQyKGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGVudW0gaWd0X2NvbW1pdF9zdHlsZSBzKTsK PiA+ID4gKwo+ID4gPiArLyoqCj4gPiA+ICsgKiBpZ3RfZGlzcGxheV9jb21taXQ6Cj4gPiA+ICsg KiBAZGlzcGxheTogRFJNIGRldmljZSBoYW5kbGUKPiA+ID4gKyAqCj4gPiA+ICsgKiBDb21taXRz IGZyYW1lYnVmZmVyIGFuZCBwb3NpdGlvbmluZyBjaGFuZ2VzIHRvIGFsbCBwbGFuZXMgb2YgZWFj aCBkaXNwbGF5Cj4gPiA+ICsgKiBwaXBlLgo+ID4gPiArICoKPiA+ID4gKyAqIFJldHVybnM6IDAg dXBvbiBzdWNjZXNzLiAgVGhpcyBmdW5jdGlvbiB3aWxsIG5ldmVyIHJldHVybiB1cG9uIGZhaWx1 cmUKPiA+ID4gKyAqIHNpbmNlIGlndF9mYWlsKCkgYXQgbG93ZXIgbGV2ZWxzIHdpbGwgbG9uZ2pt cCBvdXQgb2YgaXQuCj4gPiA+ICsgKi8KPiA+ID4gK2ludCBpZ3RfZGlzcGxheV9jb21taXQoaWd0 X2Rpc3BsYXlfdCAqZGlzcGxheSk7Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogaWd0X2Rp c3BsYXlfdHJ5X2NvbW1pdDI6Cj4gPiA+ICsgKiBAZGlzcGxheTogRFJNIGRldmljZSBoYW5kbGUK PiA+ID4gKyAqIEBzOiBDb21taXQgc3R5bGUKPiA+ID4gKyAqCj4gPiA+ICsgKiBBdHRlbXB0cyB0 byBjb21taXQgZnJhbWVidWZmZXIgYW5kIHBvc2l0aW9uaW5nIGNoYW5nZXMgdG8gYWxsIHBsYW5l cyBvZiBlYWNoCj4gPiA+ICsgKiBkaXNwbGF5IHBpcGUuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBi ZSB1c2VkIHRvIGNvbW1pdCBjaGFuZ2VzIHRoYXQgYXJlCj4gPiA+ICsgKiBleHBlY3RlZCB0byBm YWlsLCBzbyB0aGF0IHRoZSBlcnJvciBjb2RlIGNhbiBiZSBjaGVja2VkIGZvciBjb3JyZWN0bmVz cy4KPiA+ID4gKyAqIEZvciBjaGFuZ2VzIHRoYXQgYXJlIGV4cGVjdGVkIHRvIHN1Y2NlZWQsIHVz ZSBAaWd0X2Rpc3BsYXlfY29tbWl0IGluc3RlYWQuCj4gPiA+ICsgKgo+ID4gPiArICogTm90ZSB0 aGF0IGluIG5vbi1hdG9taWMgY29tbWl0IHN0eWxlcywgbm8gZGlzcGxheSBwcm9ncmFtbWluZyB3 aWxsIGJlCj4gPiA+ICsgKiBwZXJmb3JtZWQgYWZ0ZXIgdGhlIGZpcnN0IGZhaWx1cmUgaXMgZW5j b3VudGVyZWQsIHNvIG9ubHkgc29tZSBvZiB0aGUKPiA+ID4gKyAqIG9wZXJhdGlvbnMgcmVxdWVz dGVkIGJ5IGEgdGVzdCBtYXkgaGF2ZSBiZWVuIGNvbXBsZXRlZC4gIFRlc3RzIHRoYXQgY2F0Y2gK PiA+ID4gKyAqIGVycm9ycyByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIHNob3VsZCB0YWtlIGNh cmUgdG8gcmVzdG9yZSB0aGUgZGlzcGxheSB0bwo+ID4gPiArICogYSBzYW5lIHN0YXRlIGFmdGVy IGEgZmFpbHVyZSBpcyBkZXRlY3RlZC4KPiA+ID4gKyAqCj4gPiA+ICsgKiBSZXR1cm5zOiAwIHVw b24gc3VjY2Vzcywgb3RoZXJ3aXNlIHRoZSBlcnJvciBjb2RlIG9mIHRoZSBmaXJzdCBlcnJvcgo+ ID4gPiArICogZW5jb3VudGVyZWQuCj4gPiA+ICsgKi8KPiA+ID4gK2ludCBpZ3RfZGlzcGxheV90 cnlfY29tbWl0MihpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBlbnVtIGlndF9jb21taXRfc3R5bGUg cyk7Cj4gPiA+ICsKPiA+ID4gK2ludCBpZ3RfZGlzcGxheV9nZXRfbl9waXBlcyhpZ3RfZGlzcGxh eV90ICpkaXNwbGF5KTsKPiA+ID4gIAo+ID4gPiAgY29uc3QgY2hhciAqaWd0X291dHB1dF9uYW1l KGlndF9vdXRwdXRfdCAqb3V0cHV0KTsKPiA+ID4gIGRybU1vZGVNb2RlSW5mbyAqaWd0X291dHB1 dF9nZXRfbW9kZShpZ3Rfb3V0cHV0X3QgKm91dHB1dCk7Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4g PiArICogaWd0X291dHB1dF9vdmVycmlkZV9tb2RlOgo+ID4gPiArICogQG91dHB1dDogT3V0cHV0 IG9mIHdoaWNoIHRoZSBtb2RlIHdpbGwgYmUgb3ZlcnJpZGRlbgo+ID4gPiArICogQG1vZGU6IE5l dyBtb2RlCj4gPiA+ICsgKgo+ID4gPiArICogT3ZlcnJpZGVzIHRoZSBvdXRwdXQncyBtb2RlIHdp dGggQG1vZGUsIHNvIHRoYXQgaXQgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZQo+ID4gPiArICogbW9k ZSBvYnRhaW5lZCB3aXRoIGdldCBjb25uZWN0b3JzLiBOb3RlIHRoYXQgdGhlIG1vZGUgaXMgdXNl ZCB3aXRob3V0Cj4gPiA+ICsgKiBjaGVja2luZyBpZiB0aGUgb3V0cHV0IHN1cHBvcnRzIGl0LCBz byB0aGlzIG1pZ2h0IGxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzLgo+ID4gPiArICovCj4gPiA+ ICB2b2lkIGlndF9vdXRwdXRfb3ZlcnJpZGVfbW9kZShpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgZHJt TW9kZU1vZGVJbmZvICptb2RlKTsKPiA+ID4gKwo+ID4gPiAgdm9pZCBpZ3Rfb3V0cHV0X3NldF9w aXBlKGlndF9vdXRwdXRfdCAqb3V0cHV0LCBlbnVtIHBpcGUgcGlwZSk7Cj4gPiA+ICsKPiA+ID4g IGlndF9wbGFuZV90ICppZ3Rfb3V0cHV0X2dldF9wbGFuZShpZ3Rfb3V0cHV0X3QgKm91dHB1dCwg ZW51bSBpZ3RfcGxhbmUgcGxhbmUpOwo+ID4gPiAgCj4gPiA+ICBzdGF0aWMgaW5saW5lIGJvb2wg aWd0X3BsYW5lX3N1cHBvcnRzX3JvdGF0aW9uKGlndF9wbGFuZV90ICpwbGFuZSkKPiA+ID4gQEAg LTI1NiwxNSArNTAyLDYxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpZ3RfcGxhbmVfc3VwcG9ydHNf cm90YXRpb24oaWd0X3BsYW5lX3QgKnBsYW5lKQo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+ICB2b2lk IGlndF9wbGFuZV9zZXRfZmIoaWd0X3BsYW5lX3QgKnBsYW5lLCBzdHJ1Y3QgaWd0X2ZiICpmYik7 Cj4gPiA+ICsKPiA+ID4gIHZvaWQgaWd0X3BsYW5lX3NldF9wb3NpdGlvbihpZ3RfcGxhbmVfdCAq cGxhbmUsIGludCB4LCBpbnQgeSk7Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogaWd0X3Bs YW5lX3NldF9zaXplOgo+ID4gPiArICogQHBsYW5lOiBwbGFuZSBwb2ludGVyIGZvciB3aGljaCBz aXplIHRvIGJlIHNldAo+ID4gPiArICogQHc6IHdpZHRoCj4gPiA+ICsgKiBAaDogaGVpZ2h0Cj4g PiA+ICsgKgo+ID4gPiArICogVGhpcyBmdW5jdGlvbiBzZXRzIHdpZHRoIGFuZCBoZWlnaHQgZm9y IHJlcXVlc3RlZCBwbGFuZS4KPiA+ID4gKyAqIE5ldyBzaXplIHdpbGwgYmUgY29tbWl0dGVkIGF0 IHBsYW5lIGNvbW1pdCB0aW1lIHZpYQo+ID4gPiArICogZHJtTW9kZVNldFBsYW5lKCkuCj4gPiA+ ICsgKi8KPiA+ID4gIHZvaWQgaWd0X3BsYW5lX3NldF9zaXplKGlndF9wbGFuZV90ICpwbGFuZSwg aW50IHcsIGludCBoKTsKPiA+ID4gKwo+ID4gPiAgdm9pZCBpZ3RfcGxhbmVfc2V0X3Bhbm5pbmco aWd0X3BsYW5lX3QgKnBsYW5lLCBpbnQgeCwgaW50IHkpOwo+ID4gPiArCj4gPiA+ICB2b2lkIGln dF9wbGFuZV9zZXRfcm90YXRpb24oaWd0X3BsYW5lX3QgKnBsYW5lLCBpZ3Rfcm90YXRpb25fdCBy b3RhdGlvbik7Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogaWd0X2NydGNfc2V0X2JhY2tn cm91bmQ6Cj4gPiA+ICsgKiBAcGlwZTogcGlwZSBwb2ludGVyIHRvIHdoaWNoIGJhY2tncm91bmQg Y29sb3IgdG8gYmUgc2V0Cj4gPiA+ICsgKiBAYmFja2dyb3VuZDogYmFja2dyb3VuZCBjb2xvciB2 YWx1ZSBpbiBCR1IgMTZicGMKPiA+ID4gKyAqCj4gPiA+ICsgKiBTZXRzIGJhY2tncm91bmQgY29s b3IgZm9yIHJlcXVlc3RlZCBwaXBlLiBDb2xvciB2YWx1ZSBwcm92aWRlZCBoZXJlCj4gPiA+ICsg KiB3aWxsIGJlIGFjdHVhbGx5IHN1Ym1pdHRlZCBhdCBvdXRwdXQgY29tbWl0IHRpbWUgdmlhICJi YWNrZ3JvdW5kX2NvbG9yIgo+ID4gPiArICogcHJvcGVydHkuCj4gPiA+ICsgKiBGb3IgZXhhbXBs ZSB0byBnZXQgcmVkIGFzIGJhY2tncm91bmQsIHNldCBiYWNrZ3JvdW5kID0gMHgwMDAwMDAwMEZG RkYuCj4gPiA+ICsgKi8KPiA+ID4gIHZvaWQgaWd0X2NydGNfc2V0X2JhY2tncm91bmQoaWd0X3Bp cGVfdCAqcGlwZSwgdWludDY0X3QgYmFja2dyb3VuZCk7Cj4gPiA+IC12b2lkIGlndF9mYl9zZXRf cG9zaXRpb24oc3RydWN0IGlndF9mYiAqZmIsIGlndF9wbGFuZV90ICpwbGFuZSwKPiA+ID4gLQl1 aW50MzJfdCB4LCB1aW50MzJfdCB5KTsKPiA+ID4gLXZvaWQgaWd0X2ZiX3NldF9zaXplKHN0cnVj dCBpZ3RfZmIgKmZiLCBpZ3RfcGxhbmVfdCAqcGxhbmUsCj4gPiA+IC0JdWludDMyX3QgdywgdWlu dDMyX3QgaCk7Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogaWd0X2ZiX3NldF9wb3NpdGlv bjoKPiA+ID4gKyAqIEBmYjogZnJhbWVidWZmZXIgcG9pbnRlcgo+ID4gPiArICogQHBsYW5lOiBw bGFuZQo+ID4gPiArICogQHg6IFggcG9zaXRpb24KPiA+ID4gKyAqIEB5OiBZIHBvc2l0aW9uCj4g PiA+ICsgKgo+ID4gPiArICogVGhpcyBmdW5jdGlvbiBzZXRzIHBvc2l0aW9uIGZvciByZXF1ZXN0 ZWQgZnJhbWVidWZmZXIgYXMgc3JjIHRvIHBsYW5lLgo+ID4gPiArICogTmV3IHBvc2l0aW9uIHdp bGwgYmUgY29tbWl0dGVkIGF0IHBsYW5lIGNvbW1pdCB0aW1lIHZpYSBkcm1Nb2RlU2V0UGxhbmUo KS4KPiA+ID4gKyAqLwo+ID4gPiArdm9pZCBpZ3RfZmJfc2V0X3Bvc2l0aW9uKHN0cnVjdCBpZ3Rf ZmIgKmZiLCBpZ3RfcGxhbmVfdCAqcGxhbmUsIHVpbnQzMl90IHgsIHVpbnQzMl90IHkpOwo+ID4g PiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGlndF9mYl9zZXRfc2l6ZToKPiA+ID4gKyAqIEBmYjog ZnJhbWVidWZmZXIgcG9pbnRlcgo+ID4gPiArICogQHBsYW5lOiBwbGFuZQo+ID4gPiArICogQHc6 IHdpZHRoCj4gPiA+ICsgKiBAaDogaGVpZ2h0Cj4gPiA+ICsgKgo+ID4gPiArICogVGhpcyBmdW5j dGlvbiBzZXRzIGZldGNoIHJlY3Qgc2l6ZSBmcm9tIHJlcXVlc3RlZCBmcmFtZWJ1ZmZlciBhcyBz cmMKPiA+ID4gKyAqIHRvIHBsYW5lLiBOZXcgc2l6ZSB3aWxsIGJlIGNvbW1pdHRlZCBhdCBwbGFu ZSBjb21taXQgdGltZSB2aWEKPiA+ID4gKyAqIGRybU1vZGVTZXRQbGFuZSgpLgo+ID4gPiArICov Cj4gPiA+ICt2b2lkIGlndF9mYl9zZXRfc2l6ZShzdHJ1Y3QgaWd0X2ZiICpmYiwgaWd0X3BsYW5l X3QgKnBsYW5lLCB1aW50MzJfdCB3LCB1aW50MzJfdCBoKTsKPiA+ID4gIAo+ID4gPiAgdm9pZCBp Z3Rfd2FpdF9mb3JfdmJsYW5rKGludCBkcm1fZmQsIGVudW0gcGlwZSBwaXBlKTsKPiA+ID4gIAo+ ID4gPiBAQCAtMjgxLDEyICs1NzMsNjIgQEAgdm9pZCBpZ3Rfd2FpdF9mb3JfdmJsYW5rKGludCBk cm1fZmQsIGVudW0gcGlwZSBwaXBlKTsKPiA+ID4gIAo+ID4gPiAgI2RlZmluZSBJR1RfRklYRUQo aSxmKQkoKGkpIDw8IDE2IHwgKGYpKQo+ID4gPiAgCj4gPiA+ICsvKioKPiA+ID4gKyAqIGlndF9l bmFibGVfY29ubmVjdG9yczoKPiA+ID4gKyAqCj4gPiA+ICsgKiBGb3JjZSBjb25uZWN0b3JzIHRv IGJlIGVuYWJsZWQgd2hlcmUgdGhpcyBpcyBrbm93biB0byB3b3JrIHdlbGwuIFVzZQo+ID4gPiAr ICogI2lndF9yZXNldF9jb25uZWN0b3JzIHRvIHJldmVydCB0aGUgY2hhbmdlcy4KPiA+ID4gKyAq Cj4gPiA+ICsgKiBBbiBleGl0IGhhbmRsZXIgaXMgaW5zdGFsbGVkIHRvIGVuc3VyZSBjb25uZWN0 b3JzIGFyZSByZXNldCB3aGVuIHRoZSB0ZXN0Cj4gPiA+ICsgKiBleGl0cy4KPiA+ID4gKyAqLwo+ ID4gPiAgdm9pZCBpZ3RfZW5hYmxlX2Nvbm5lY3RvcnModm9pZCk7Cj4gPiA+ICsKPiA+ID4gKy8q Kgo+ID4gPiArICogaWd0X3Jlc2V0X2Nvbm5lY3RvcnM6Cj4gPiA+ICsgKgo+ID4gPiArICogUmVt b3ZlIGFueSBmb3JjZWQgc3RhdGUgZnJvbSB0aGUgY29ubmVjdG9ycy4KPiA+ID4gKyAqLwo+ID4g PiAgdm9pZCBpZ3RfcmVzZXRfY29ubmVjdG9ycyh2b2lkKTsKPiA+ID4gIAo+ID4gPiAgI2RlZmlu ZSBFRElEX0xFTkdUSCAxMjgKPiA+ID4gLWNvbnN0IHVuc2lnbmVkIGNoYXIqIGlndF9rbXNfZ2V0 X2Jhc2VfZWRpZCh2b2lkKTsKPiA+ID4gLWNvbnN0IHVuc2lnbmVkIGNoYXIqIGlndF9rbXNfZ2V0 X2FsdF9lZGlkKHZvaWQpOwo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIGlndF9rbXNfZ2V0 X2Jhc2VfZWRpZDoKPiA+ID4gKyAqCj4gPiA+ICsgKiBHZXQgdGhlIGJhc2UgZWRpZCBibG9jaywg d2hpY2ggaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBtb2RlczoKPiA+ID4gKyAqCj4gPiA+ICsgKiAg LSAxOTIweDEwODAgNjBIego+ID4gPiArICogIC0gMTI4MHg3MjAgNjBIego+ID4gPiArICogIC0g MTAyNHg3NjggNjBIego+ID4gPiArICogIC0gODAweDYwMCA2MEh6Cj4gPiA+ICsgKiAgLSA2NDB4 NDgwIDYwSHoKPiA+ID4gKyAqCj4gPiA+ICsgKiBUaGlzIGNhbiBiZSBleHRlbmRlZCB3aXRoIGZ1 cnRoZXIgZmVhdHVyZXMgdXNpbmcgZnVuY3Rpb25zIHN1Y2ggYXMKPiA+ID4gKyAqICNrbXN0ZXN0 X2VkaWRfYWRkXzNkLgo+ID4gPiArICoKPiA+ID4gKyAqIFJldHVybnM6IGEgYmFzaWMgZWRpZCBi bG9jawo+ID4gPiArICovCj4gPiA+ICtjb25zdCB1bnNpZ25lZCBjaGFyICppZ3Rfa21zX2dldF9i YXNlX2VkaWQodm9pZCk7Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogaWd0X2ttc19nZXRf YWx0X2VkaWQ6Cj4gPiA+ICsgKgo+ID4gPiArICogR2V0IGFuIGFsdGVybmF0ZSBlZGlkIGJsb2Nr LCB3aGljaCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIG1vZGVzOgo+ID4gPiArICoKPiA+ID4gKyAq ICAtIDE0MDB4MTA1MCA2MEh6Cj4gPiA+ICsgKiAgLSAxOTIweDEwODAgNjBIego+ID4gPiArICog IC0gMTI4MHg3MjAgNjBIego+ID4gPiArICogIC0gMTAyNHg3NjggNjBIego+ID4gPiArICogIC0g ODAweDYwMCA2MEh6Cj4gPiA+ICsgKiAgLSA2NDB4NDgwIDYwSHoKPiA+ID4gKyAqCj4gPiA+ICsg KiBUaGlzIGNhbiBiZSBleHRlbmRlZCB3aXRoIGZ1cnRoZXIgZmVhdHVyZXMgdXNpbmcgZnVuY3Rp b25zIHN1Y2ggYXMKPiA+ID4gKyAqICNrbXN0ZXN0X2VkaWRfYWRkXzNkLgo+ID4gPiArICoKPiA+ ID4gKyAqIFJldHVybnM6IGFuIGFsdGVybmF0ZSBlZGlkIGJsb2NrCj4gPiA+ICsgKi8KPiA+ID4g K2NvbnN0IHVuc2lnbmVkIGNoYXIgKmlndF9rbXNfZ2V0X2FsdF9lZGlkKHZvaWQpOwo+ID4gPiAg Cj4gPiA+ICAKPiA+ID4gICNlbmRpZiAvKiBfX0lHVF9LTVNfSF9fICovCj4gPiA+IC0tIAo+ID4g PiAyLjYuMgo+ID4gPiAKPiA+IAo+ID4gLS0gCj4gPiBEYW5pZWwgVmV0dGVyCj4gPiBTb2Z0d2Fy ZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KPiA+IGh0dHA6Ly9ibG9nLmZmd2xsLmNoCgoK Ci0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpo dHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lu dGVsLWdmeAo=