From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 179C38996E for ; Wed, 17 Apr 2019 12:17:17 +0000 (UTC) References: <20190411123648.4123-1-simon.ser@intel.com> <20190411123648.4123-2-simon.ser@intel.com> <55db79de-0a06-0169-3abb-c5b34af10fb8@linux.intel.com> <1040e18c9b67829f3518772949d31b625ca4b822.camel@intel.com> From: Martin Peres Message-ID: Date: Wed, 17 Apr 2019 15:17:12 +0300 MIME-Version: 1.0 In-Reply-To: <1040e18c9b67829f3518772949d31b625ca4b822.camel@intel.com> Content-Language: en-GB Subject: Re: [igt-dev] [PATCH i-g-t v4 1/5] tests/kms_chamelium: add dp-audio test List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: "Ser, Simon" , "igt-dev@lists.freedesktop.org" List-ID: CgpPbiAxNy8wNC8yMDE5IDExOjQwLCBTZXIsIFNpbW9uIHdyb3RlOgo+IE9uIFR1ZSwgMjAxOS0w NC0xNiBhdCAxNTowMiArMDMwMCwgTWFydGluIFBlcmVzIHdyb3RlOgo+PiBPbiAxMS8wNC8yMDE5 IDE1OjM2LCBTaW1vbiBTZXIgd3JvdGU6Cj4+PiBUaGlzIG5ldyB0ZXN0IGVuc3VyZXMgRGlzcGxh eVBvcnQgYXVkaW8gd29ya3MgYnkgdXNpbmcgdGhlIENoYW1lbGl1bS4KPj4+Cj4+PiBJdCBlbmFi bGVzIHRoZSBEaXNwbGF5UG9ydCBvdXRwdXQgYW5kIHNlbmRzIGFuIGF1ZGlvIHNpZ25hbCBjb250 YWluaW5nIGEgc2V0IG9mCj4+PiBmcmVxdWVuY2llcyB3ZSBjaG9vc2UgdG8gYWxsIEhETUkvRGlz cGxheVBvcnQgYXVkaW8gZGV2aWNlcy4gSXQgc3RhcnRzCj4+PiByZWNvcmRpbmcgYXVkaW8gb24g dGhlIENoYW1lbGl1bSBkZXZpY2UgYW5kIHVzZXMgdGhlIHN0cmVhbSBzZXJ2ZXIgdG8gcmV0cmll dmUKPj4+IGNhcHR1cmVkIGF1ZGlvIHBhZ2VzLiBJdCB0aGVuIGNoZWNrcyB0aGF0IHRoZSBjYXB0 dXJlIGF1ZGlvIHNpZ25hbCBjb250YWlucyB0aGUKPj4+IGZyZXF1ZW5jaWVzIHdlIHNlbnQsIGFu ZCBvbmx5IHRob3NlLCBieSBjb21wdXRpbmcgYSBGRlQuCj4+Pgo+Pj4gQSBuZXcgbGlicmFyeSBo YXMgYmVlbiBhZGRlZCB0byBsaWJpZ3QgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgc3RyZWFtIHNl cnZlci4KPj4+IEl0IGltcGxlbWVudHMgYSBzaW1wbGUgY3VzdG9tIFRDUCBwcm90b2NvbC4KPj4+ Cj4+PiBJbiBjYXNlIHRoZSB0ZXN0IGZhaWxzLCBhIFdBViBmaWxlIHdpdGggdGhlIGNhcHR1cmVk IGRhdGEgaXMgc2F2ZWQgb24gZGlzay4KPj4+Cj4+PiBSaWdodCBub3cgdGhlIHRlc3QgaGFzIGEg ZmV3IGxpbWl0YXRpb25zOgo+Pj4KPj4+IC0gT25seSB0aGUgZmlyc3QgY2hhbm5lbCBpcyBjaGVj a2VkCj4+PiAtIElHVCBvbmx5IGdlbmVyYXRlcyBhdWRpbyB3aXRoIGEgc2luZ2xlIHNhbXBsaW5n IHJhdGUgKDQ4IEtIeikKPj4+IC0gQXVkaW8gZGF0YSBpcyBub3QgY2FwdHVyZWQgaW4gcmVhbC10 aW1lCj4+Pgo+Pj4gVGhlc2UgbGltaXRhdGlvbnMgd2lsbCBiZSBsaWZ0ZWQgaW4gZnV0dXJlIHBh dGNoZXMuCj4+Pgo+Pj4gUHVsc2VBdWRpbyBtdXN0IG5vdCBydW4gZHVyaW5nIHRoZSB0ZXN0cyBz aW5jZSBBTFNBIGlzIHVzZWQgZGlyZWN0bHkuIFRvIGVuc3VyZQo+Pj4gdGhpcywgZWRpdCAvZXRj L3B1bHNlL2NsaWVudC5jb25mIGFuZCBhZGQgYGF1dG9zcGF3bj1ub2AuIFRoZW4gcnVuCj4+PiBg cHVsc2VhdWRpbyAtLWtpbGxgLgo+Pj4KPj4+IFRoaXMgY29tbWl0IGRlbGV0ZXMgdGhlIGV4aXN0 aW5nIGF1ZGlvIHRlc3RzLiBUaGV5IHdlcmVuJ3QgcnVuIGFuZCByZXF1aXJlZCBhbgo+Pj4gZXhv dGljIGNvbmZpZ3VyYXRpb24gKEhETUkgYXVkaW8gc3BsaXR0ZXIsIGR1bW15IEhETUkgc2luayBh bmQgYSBsaW5lLWluIHBvcnQKPj4+IG9uIHRoZSBEVVQpLgo+Pj4KPj4+IFRoaXMgcGF0Y2ggZGVw ZW5kcyBvbiB0aGUgZm9sbG93aW5nIENoYW1lbGVvbiBidWdzOgo+Pj4KPj4+IC0gaHR0cHM6Ly9j cmJ1Zy5jb20vOTQ4MDYwCj4+PiAtIGh0dHBzOi8vY3JidWcuY29tLzk1MDg1Nwo+Pgo+PiBTZWVt cyBsaWtlIHlvdXIgZml4ZXMgbGFuZGVkIGFscmVhZHkhIEdyZWF0IQo+Pgo+Pj4gU2lnbmVkLW9m Zi1ieTogU2ltb24gU2VyIDxzaW1vbi5zZXJAaW50ZWwuY29tPgo+Pj4gLS0tCj4+PiAgZG9jcy9h dWRpby50eHQgICAgICAgICAgICAgfCAgNDUgLS0tCj4+PiAgZG9jcy9jaGFtZWxpdW0udHh0ICAg ICAgICAgfCAgMzIgKy0KPj4+ICBsaWIvaWd0LmggICAgICAgICAgICAgICAgICB8ICAgMSArCj4+ PiAgbGliL2lndF9hbHNhLmMgICAgICAgICAgICAgfCAgNDIgKystCj4+PiAgbGliL2lndF9hbHNh LmggICAgICAgICAgICAgfCAgIDEgKwo+Pj4gIGxpYi9pZ3RfYXVkaW8uYyAgICAgICAgICAgIHwg Mjg1ICsrKysrKysrKysrKy0tLS0tLQo+Pj4gIGxpYi9pZ3RfYXVkaW8uaCAgICAgICAgICAgIHwg IDEyICstCj4+PiAgbGliL2lndF9hdXguYyAgICAgICAgICAgICAgfCAgMzEgKysKPj4+ICBsaWIv aWd0X2F1eC5oICAgICAgICAgICAgICB8ICAgMSArCj4+PiAgbGliL2lndF9jaGFtZWxpdW0uYyAg ICAgICAgfCAxMDEgKysrKysrKwo+Pj4gIGxpYi9pZ3RfY2hhbWVsaXVtLmggICAgICAgIHwgIDEx ICsKPj4+ICBsaWIvaWd0X2NoYW1lbGl1bV9zdHJlYW0uYyB8IDU5MiArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCj4+PiAgbGliL2lndF9jaGFtZWxpdW1fc3RyZWFtLmggfCAg NTIgKysrKwo+Pj4gIGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAgIHwgICA1ICstCj4+PiAgbWVz b24uYnVpbGQgICAgICAgICAgICAgICAgfCAgNTIgKystLQo+Pj4gIG1lc29uX29wdGlvbnMudHh0 ICAgICAgICAgIHwgICA2IC0KPj4+ICB0ZXN0cy9hdWRpby5jICAgICAgICAgICAgICB8IDE5MyAt LS0tLS0tLS0tLS0KPj4+ICB0ZXN0cy9rbXNfY2hhbWVsaXVtLmMgICAgICB8IDI3NiArKysrKysr KysrKysrKysrLQo+Pj4gIHRlc3RzL21lc29uLmJ1aWxkICAgICAgICAgIHwgICA5ICstCj4+PiAg MTkgZmlsZXMgY2hhbmdlZCwgMTM1OCBpbnNlcnRpb25zKCspLCAzODkgZGVsZXRpb25zKC0pCj4+ PiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRvY3MvYXVkaW8udHh0Cj4+PiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGxpYi9pZ3RfY2hhbWVsaXVtX3N0cmVhbS5jCj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxp Yi9pZ3RfY2hhbWVsaXVtX3N0cmVhbS5oCj4+PiAgZGVsZXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2F1 ZGlvLmMKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEvZG9jcy9hdWRpby50eHQgYi9kb2NzL2F1ZGlvLnR4 dAo+Pj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAxNThhZDVkMS4uMDAwMDAw MDAKPj4+IC0tLSBhL2RvY3MvYXVkaW8udHh0Cj4+PiArKysgL2Rldi9udWxsCj4+PiBAQCAtMSw0 NSArMCwwIEBACj4+PiAtQXVkaW8gU3VwcG9ydCBpbiBJR1QKPj4+IC09PT09PT09PT09PT09PT09 PT09PQo+Pj4gLQo+Pj4gLVRoaXMgZG9jdW1lbnQgcHJvdmlkZXMgaW5mb3JtYXRpb24gYW5kIGlu c3RydWN0aW9ucyBhYm91dCBhdWRpbyBzdXBwb3J0IGluIElHVC4KPj4+IC0KPj4+IC1JbnRyb2R1 Y3Rpb24KPj4+IC0tLS0tLS0tLS0tLS0KPj4+IC0KPj4+IC1UaGUgYXVkaW8gdGVzdCBpcyBhaW1l ZCBhdCB0ZXN0aW5nIHRoZSBhdWRpbyBmZWF0dXJlcyBvZiBkaXNwbGF5IGNvbm5lY3RvcnMsCj4+ PiAtc3VjaCBhcyBIRE1JLgo+Pj4gLQo+Pj4gLVRlc3Qgc2V0dXAKPj4+IC0tLS0tLS0tLS0tCj4+ PiAtCj4+PiAtVGhlIHNldHVwIHJlcXVpcmVkIGZvciB0aGUgYXVkaW8gdGVzdCBjb25zaXN0cyBv ZiB1c2luZyBhbiBIRE1JLVZHQSBhZGFwdGVyIHdpdGgKPj4+IC1hbiBhdWRpby1vdXQgMy41IG1t IGphY2sgdG8gZXh0cmFjdCB0aGUgYXVkaW8gZnJvbSB0aGUgSERNSSBpbnRlcmZhY2UuCj4+PiAt VGhlIGF1ZGlvLW91dCBqYWNrIGlzIGNvbm5lY3RlZCBiYWNrIHRvIHRoZSBkZXZpY2UtdW5kZXIt dGVzdCdzIGxpbmUtaW4uCj4+PiAtCj4+PiAtRGVwZW5kaW5nIG9uIHRoZSBiZWhhdmlvciBvZiB0 aGUgYWRhcHRlciwgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBjb25uZWN0IGEKPj4+IC1naG9zdCBW R0EgZG9uZ2xlIHRvIGl0IChpbiBvcmRlciB0byBlbXVsYXRlIGEgY29ubmVjdGVkIGRpc3BsYXkp IHRvIGVuYWJsZSB0aGUKPj4+IC1hdWRpbyBvdXRwdXQuIFRoZXJlIGFyZSBndWlkZXMgYXZhaWxh YmxlIGRldGFpbGluZyBob3cgdG8gYnVpbGQgdGhlc2UuCj4+PiAtCj4+PiAtV2hlbiBleGVjdXRl ZCwgdGhlIHRlc3Qgd2lsbCBhdXRvbWF0aWNhbGx5IHNlbmQgdGhlIHRlc3QgYXVkaW8gc2lnbmFs IHRvIGFsbAo+Pj4gLUFMU0EgYXVkaW8gSERNSSBvdXRwdXRzIGFuZCByZWNvcmQgZnJvbSB0aGUg c3RhbmRhcmQgQUxTQSBjYXB0dXJlIGRldmljZS4KPj4+IC0KPj4+IC1Db25maWd1cmF0aW9uCj4+ PiAtLS0tLS0tLS0tLS0tLQo+Pj4gLQo+Pj4gLUluIG9yZGVyIHRvIGRlcGxveSB0aGUgdGVzdCwg QUxTQSBjb250cm9scyBoYXZlIHRvIGJlIGNvbmZpZ3VyZWQgdG8gc2V0IHRoZQo+Pj4gLUFMU0Eg Y2FwdHVyZSBzb3VyY2UgdG8gbGluZS1pbi4gT24gSW50ZWwgeDg2IHN5c3RlbXMsIHRoaXMgY2Fu IGJlIGFjaGlldmVkCj4+PiAtd2l0aCB0aGUgZm9sbG93aW5nIGNhbGxzIHRvIHRoZSBhbWl4ZXIg dXRpbGl0eToKPj4+IC0jIGFtaXhlciBzc2V0IExpbmUgMzEgb24KPj4+IC0jIGFtaXhlciBzc2V0 ICJJbnB1dCBTb3VyY2UiIExpbmUKPj4+IC0KPj4+IC1JdCBpcyB0aGVuIHVzZWZ1bCB0byBzdG9y ZSB0aGUgQUxTQSBzdGF0ZSBwZXJtYW5lbnRseSB3aXRoIHRoZSBhbHNhY3RsIHV0aWxpdHk6Cj4+ PiAtIyBhbHNhY3RsIHN0b3JlCj4+PiAtCj4+PiAtVGhlc2Ugc2V0dGluZ3MgY2FuIGJlIHJlc3Rv cmVkIHdpdGggdGhlIGFsc2FjdGwgdXRpbGl0eToKPj4+IC0jIGFsc2FjdGwgcmVzdG9yZQo+Pj4g LQo+Pj4gLUl0IGlzIGRlc2lyYWJsZSB0byBlbnN1cmUgdGhhdCB0aGUgYWxzYS1yZXN0b3JlIGFu ZCBhbHNhLXN0YXRlIHN5c3RlbWQgc2VydmljZXMKPj4+IC1hcmUgZW5hYmxlZCB0byBkbyB0aGlz IGpvYiBhdXRvbWF0aWNhbGx5LCBlc3BlY2lhbGx5IGluIHRoZSBjYXNlIG9mIGFuCj4+PiAtYXV0 b21hdGVkIHRlc3Rpbmcgc3lzdGVtOgo+Pj4gLSMgc3lzdGVtY3RsIGVuYWJsZSBhbHNhLXJlc3Rv cmUKPj4+IC0jIHN5c3RlbWN0bCBlbmFibGUgYWxzYS1zdGF0ZQo+Pj4gZGlmZiAtLWdpdCBhL2Rv Y3MvY2hhbWVsaXVtLnR4dCBiL2RvY3MvY2hhbWVsaXVtLnR4dAo+Pj4gaW5kZXggMGNhYmNkYzYu LjMxNmRkNjA3IDEwMDY0NAo+Pj4gLS0tIGEvZG9jcy9jaGFtZWxpdW0udHh0Cj4+PiArKysgYi9k b2NzL2NoYW1lbGl1bS50eHQKPj4+IEBAIC0xMzksNiArMTM5LDIzIEBAICQgbWFrZSByZW1vdGUt aW5zdGFsbCBDSEFNRUxFT05fSE9TVD0xOTIuMTY4LjcyLjEKPj4+ICAKPj4+ICBUaGUgcHJvY2Vz cyByZXF1aXJlcyB0aGUgQ2hhbWVsaXVtIHRvIGJlIGNvbm5lY3RlZCB0byB0aGUgSW50ZXJuZXQg dG8gc3VjY2VlZC4KPj4+ICAKPj4+ICtBdWRpbyBDYXB0dXJlCj4+PiArLS0tLS0tLS0tLS0tLQo+ Pj4gKwo+Pj4gK1RoZSBDaGFtZWxpdW0gc3VwcG9ydHMgYXVkaW8gY2FwdHVyZS4gSUdUIHRlc3Rz IHRha2UgYWR2YW50YWdlIG9mIHRoZQo+Pj4gK0NoYW1lbGl1bSBzdHJlYW1pbmcgc2VydmVyIHRv IGRvd25sb2FkIGF1ZGlvIHNhbXBsZXMgZnJvbSB0aGUgQ2hhbWVsaXVtLgo+Pj4gKwo+Pj4gK0lH VCBuZWVkcyBkaXJlY3QgYWNjZXNzIHRvIGF1ZGlvIGRldmljZXMgdGhyb3VnaCBBTFNBLCBzbyBQ dWxzZUF1ZGlvIG5lZWRzIHRvCj4+PiArYmUgc3RvcHBlZCAob3RoZXJ3aXNlIGF1ZGlvIHRlc3Rz IHdpbGwgYXV0b21hdGljYWxseSBnZXQgc2tpcHBlZCkuIFRvIG1ha2Ugc3VyZQo+Pj4gK1B1bHNl QXVkaW8gaXNuJ3QgcnVubmluZzoKPj4+ICsKPj4+ICstIEVkaXQgL2V0Yy9wdWxzZS9jbGllbnQu Y29uZiBhbmQgYWRkIGF1dG9zcGF3bj1ubwo+Pj4gKy0gUnVuIGBwdWxzZWF1ZGlvIC0ta2lsbGAg KGlmIGl0IHN1Y2NlZWRzLCBpdCBtZWFucyBQdWxzZUF1ZGlvIHdhcyBydW5uaW5nKQo+Pj4gKy0g TWFrZSBzdXJlIGEgREUgdGhhdCBhdXRvbWF0aWNhbGx5IHNwYXducyBQdWxzZUF1ZGlvIGlzbid0 IHJ1bm5pbmcKPj4+ICsKPj4+ICtJbiBjYXNlIGEgdGVzdCBmYWlscywgdGhlIHJhdyBjYXB0dXJl ZCBhdWRpbyBmaWxlcyB3aWxsIGJlIGR1bXBlZCBpbiBhIFdBVgo+Pj4gK2ZpbGUuCj4+PiArCj4+ PiAgQ29udHJpYnV0aW5nIENoYW5nZXMgdG8gdGhlIERhZW1vbgo+Pj4gIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KPj4+ICAKPj4+IEBAIC0xNDYsMTAgKzE2MywxMSBAQCBDb250 cmlidXRpb25zIHRvIHRoZSBDaGFtZWxpdW0gZGFlbW9uLCBqdXN0IGxpa2UgYW55IGNvbnRyaWJ1 dGlvbiB0byBDaHJvbWl1bU9TLAo+Pj4gIGFyZSBzdWJtaXR0ZWQgYW5kIHJldmlld2VkIGF0OiBo dHRwczovL2Nocm9taXVtLXJldmlldy5nb29nbGVzb3VyY2UuY29tLwo+Pj4gIAo+Pj4gIFRoZSBD aHJvbWl1bU9TIHByb2plY3QgcHJvdmlkZXMgYW4gZXh0ZW5zaXZlIGRldmVsb3BlciBndWlkZToK Pj4+IC1odHRwczovL3d3dy5jaHJvbWl1bS5vcmcvY2hyb21pdW0tb3MvZGV2ZWxvcGVyLWd1aWRl IHRoYXQgYXNzdW1lcyBydW5uaW5nIHdpdGhpbgo+Pj4gLXRoZSBDaHJvbWl1bU9TIGJ1aWxkIHN5 c3RlbS4gU2luY2UgdGhpcyBpcyBsaWtlbHkgbm90IHRoZSBjYXNlIGZvciBjb250cmlidXRpbmcK Pj4+IC10byB0aGUgQ2hhbWVsaXVtIGRhZW1vbiwgb25seSB0aGUgcGFydCBhYm91dCB1cGxvYWRp bmcgY2hhbmdlcyBpcyByZWxldmFudDoKPj4+IC1odHRwczovL3d3dy5jaHJvbWl1bS5vcmcvY2hy b21pdW0tb3MvZGV2ZWxvcGVyLWd1aWRlI1RPQy1VcGxvYWQteW91ci1jaGFuZ2VzLWFuZC1nZXQt YS1jb2RlLXJldmlldwo+Pj4gK2h0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJv bWl1bW9zL2RvY3MvKy9tYXN0ZXIvZGV2ZWxvcGVyX2d1aWRlLm1kCj4+PiArSXQgdGhhdCBhc3N1 bWVzIHJ1bm5pbmcgd2l0aGluIHRoZSBDaHJvbWl1bU9TIGJ1aWxkIHN5c3RlbS4gU2luY2UgdGhp cyBpcwo+Pgo+PiBUaGUgd29yZCAidGhhdCIgc2VlbXMgb3V0IG9mIHBsYWNlLgo+Pgo+Pj4gK2xp a2VseSBub3QgdGhlIGNhc2UgZm9yIGNvbnRyaWJ1dGluZyB0byB0aGUgQ2hhbWVsaXVtIGRhZW1v biwgb25seSB0aGUgcGFydAo+Pj4gK2Fib3V0IHVwbG9hZGluZyBjaGFuZ2VzIGlzIHJlbGV2YW50 Ogo+Pj4gK2h0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bW9zL2RvY3Mv Ky9tYXN0ZXIvZGV2ZWxvcGVyX2d1aWRlLm1kI1VwbG9hZC15b3VyLWNoYW5nZXMtYW5kLWdldC1h LWNvZGUtcmV2aWV3Cj4+PiAgCj4+PiAgTW9zdCBvZiB0aGUgcHJvY2VzcyBpcyBhYm91dCB1c2lu ZyB0aGUgR2Vycml0IHdlYiBpbnRlcmZhY2UgZm9yIHN1Ym1pdHRpbmcgYW5kCj4+PiAgaGF2aW5n IHRoZSBjaGFuZ2UgcmV2aWV3ZWQgYW5kIG5vdCBmb3JnZXR0aW5nIHRoZSBDaGFuZ2UtSWQsIFRF U1Q9IGFuZCBCVUc9Cj4+PiBAQCAtMTYyLDcgKzE4MCw3IEBAIFN1cHBvcnQgZm9yIHRoZSBDaGFt ZWxpdW0gcGxhdGZvcm0gaW4gSUdUIGlzIGZvdW5kIGluIHRoZSBmb2xsb3dpbmcgcGxhY2VzOgo+ Pj4gICogbGliL2lndF9jaGFtZWxpdW0uYzogbGlicmFyeSB3aXRoIENoYW1lbGl1bS1yZWxhdGVk IGhlbHBlcnMKPj4+ICAqIHRlc3RzL2ttc19jaGFtZWxpdW0uYzogc3ViLXRlc3RzIHVzaW5nIHRo ZSBDaGFtZWxpdW0KPj4+ICAKPj4+IC1BcyBvZiBsYXRlIEF1Z3VzdCAyMDE3LCB0aGUgZm9sbG93 aW5nIGZlYXR1cmVzIGFyZSB0ZXN0ZWQgYnkgSUdUOgo+Pj4gK0FzIG9mIGVhcmx5IEFwcmlsIDIw MTksIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZCBieSBJR1Q6Cj4+PiAgKiBQaXhl bC1ieS1waXhlbCBmcmFtZSBpbnRlZ3JpdHkgdGVzdHMgZm9yIERQIGFuZCBIRE1JCj4+PiAgKiBF cnJvci10cmVuZC1iYXNlZCBmcmFtZSBpbnRlZ3JpdHkgdGVzdHMgZm9yIFZHQQo+Pj4gICogQ1JD LWJhc2VkIGZyYW1lIGludGVncml0eSB0ZXN0cyBmb3IgRFAgYW5kIEhETUkKPj4+IEBAIC0xNzMs NiArMTkxLDcgQEAgQXMgb2YgbGF0ZSBBdWd1c3QgMjAxNywgdGhlIGZvbGxvd2luZyBmZWF0dXJl cyBhcmUgdGVzdGVkIGJ5IElHVDoKPj4+ICAgIGVhY2ggaW50ZXJmYWNlIG9yIGNvbWJpbmVkCj4+ PiAgKiBFRElEIGRpc3BsYXkgaWRlbnRpZmllciBpbnRlZ3JpdHkgY2hlY2sgZm9yIGFsbCBpbnRl cmZhY2VzCj4+PiAgKiBFRElEIGRpc3BsYXkgaWRlbnRpZmllciBjaGFuZ2UgZHVyaW5nIHN1c3Bl bmQgZm9yIGFsbCBpbnRlcmZhY2VzCj4+PiArKiBBdWRpbyBGb3VyaWVyLWJhc2VkIHRlc3RzIGZv ciBEUCBhdCA0OEtIego+Pgo+PiBNYXliZSBhbiBleHRyYSBwYXRjaCB3aWxsIGJlIG5lZWRlZCB0 byB1cGRhdGUgdGhlIGxpc3Qgb2YKPj4gY2FwYWJpbGl0aWVzLi4uIG9yIHdlIGp1c3QgaW1wbGVt ZW50IHRoZW0gOnAKPj4+Cj4+PiAgCj4+PiAgRnV0dXJlIERldmVsb3BtZW50cwo+Pj4gIC0tLS0t LS0tLS0tLS0tLS0tLS0KPj4+IEBAIC0xODAsNyArMTk5LDggQEAgRnV0dXJlIERldmVsb3BtZW50 cwo+Pj4gIFdpdGggdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbiBvZiB0aGUgaGFyZHdhcmUgcGxhdGZv cm0sIHN1cHBvcnQgZm9yIHRlc3RpbmcgYQo+Pj4gIG51bWJlciBvZiBhZGRpdGlvbmFsIGRpc3Bs YXkgZmVhdHVyZXMgY291bGQgYmUgaW5jbHVkZWQgYXMgZnV0dXJlIGRldmVsb3BtZW50cywKPj4+ ICBpbmNsdWRpbmc6Cj4+PiAtKiBBdWRpbyBjYXB0dXJlIGZyb20gSERNSSBhbmQgRFAKPj4+ICsq IEF1ZGlvIGNhcHR1cmUgZnJvbSBIRE1JLCB3aXRoIG11bHRpcGxlIGNoYW5uZWxzIGFuZCB3aXRo IG90aGVyIHBsYXliYWNrCj4+PiArICBzYW1wbGluZyByYXRlcwo+Pgo+PiBEb24ndCByZW1vdmUg RFAgc2luY2UgaXQgZG9lcyBub3QgeWV0IGhhdmUgdGhlIGZlYXR1cmVzIHlvdSBhcmUgdGFsa2lu Zwo+PiBhYm91dC4KPiAKPiBIbW0uIFRoZSBtZWFuaW5nIG9mIHRoYXQgY29tbWEgd2FzIGEgbG9n aWNhbCAiYW5kIi4gSW5zdGVhZCwgSSdsbCBqdXN0Cj4gc3BsaXQgdGhpcyBpbnRvIG11bHRpcGxl IGJ1bGxldCBwb2ludHMuCj4gCj4+PiAgKiBIaWdoLWJhbmR3aWR0aCBEaWdpdGFsIENvbnRlbnQg UHJvdGVjdGlvbiAoSERDUCkgc3RyZWFtaW5nIHRvIHRoZSBkaXNwbGF5Cj4+PiAgKiBSZW1vdGUg Y29udHJvbCBmb3J3YXJkaW5nIChDRUMpIHNlbnQgZnJvbSB0aGUgZGlzcGxheQo+Pj4gICogWVVW IGNvbG9yc3BhY2UgZm9yIEhETUksIGluc3RlYWQgb2YgUkdCCj4+PiBkaWZmIC0tZ2l0IGEvbGli L2lndC5oIGIvbGliL2lndC5oCj4+PiBpbmRleCA2NjU0YTY1OS4uNTg1MmQ1NTcgMTAwNjQ0Cj4+ PiAtLS0gYS9saWIvaWd0LmgKPj4+ICsrKyBiL2xpYi9pZ3QuaAo+Pj4gQEAgLTQzLDYgKzQzLDcg QEAKPj4+ICAjaW5jbHVkZSAiaWd0X3N0YXRzLmgiCj4+PiAgI2lmZGVmIEhBVkVfQ0hBTUVMSVVN Cj4+PiAgI2luY2x1ZGUgImlndF9jaGFtZWxpdW0uaCIKPj4+ICsjaW5jbHVkZSAiaWd0X2NoYW1l bGl1bV9zdHJlYW0uaCIKPj4+ICAjZW5kaWYKPj4+ICAjaW5jbHVkZSAiaW5zdGRvbmUuaCIKPj4+ ICAjaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIuaCIKPj4+IGRpZmYgLS1naXQgYS9saWIvaWd0 X2Fsc2EuYyBiL2xpYi9pZ3RfYWxzYS5jCj4+PiBpbmRleCBiYjY2ODJjYy4uNDU2YzBjODUgMTAw NjQ0Cj4+PiAtLS0gYS9saWIvaWd0X2Fsc2EuYwo+Pj4gKysrIGIvbGliL2lndF9hbHNhLmMKPj4+ IEBAIC0yNiw5ICsyNiwxMSBAQAo+Pj4gIAo+Pj4gICNpbmNsdWRlICJjb25maWcuaCIKPj4+ICAK Pj4+ICsjaW5jbHVkZSA8bGltaXRzLmg+Cj4+PiAgI2luY2x1ZGUgPGFsc2EvYXNvdW5kbGliLmg+ Cj4+PiAgCj4+PiAgI2luY2x1ZGUgImlndF9hbHNhLmgiCj4+PiArI2luY2x1ZGUgImlndF9hdXgu aCIKPj4+ICAjaW5jbHVkZSAiaWd0X2NvcmUuaCIKPj4+ICAKPj4+ICAjZGVmaW5lIEhBTkRMRVNf TUFYCTgKPj4+IEBAIC02MSw2ICs2MywyNSBAQCBzdHJ1Y3QgYWxzYSB7Cj4+PiAgCWludCBpbnB1 dF9zYW1wbGVzX3RyaWdnZXI7Cj4+PiAgfTsKPj4+ICAKPj4+ICsvKioKPj4+ICsgKiBhbHNhX2hh c19leGNsdXNpdmVfYWNjZXNzOgo+Pj4gKyAqIENoZWNrIHdoZXRoZXIgQUxTQSBoYXMgZXhjbHVz aXZlIGFjY2VzcyB0byBhdWRpbyBkZXZpY2VzLiBGYWlscyBpZgo+Pj4gKyAqIFB1bHNlQXVkaW8g aXMgcnVubmluZy4KPj4+ICsgKi8KPj4+ICtib29sIGFsc2FfaGFzX2V4Y2x1c2l2ZV9hY2Nlc3Mo dm9pZCkKPj4+ICt7Cj4+PiArCWlmIChpZ3RfaXNfcHJvY2Vzc19ydW5uaW5nKCJwdWxzZWF1ZGlv IikpIHsKPj4+ICsJCWlndF93YXJuKCJJdCBzZWVtcyB0aGF0IFB1bHNlQXVkaW8gaXMgcnVubmlu Zy4gQXVkaW8gdGVzdHMgIgo+Pj4gKwkJCSAibmVlZCBkaXJlY3QgYWNjZXNzIHRvIGF1ZGlvIGRl dmljZXMsIHNvIFB1bHNlQXVkaW8gIgo+Pj4gKwkJCSAibmVlZHMgdG8gYmUgc3RvcHBlZC4gWW91 IGNhbiBkbyBzbyBieSBydW5uaW5nICIKPj4+ICsJCQkgImBwdWxzZWF1ZGlvIC0ta2lsbGAuIEFs c28gbWFrZSBzdXJlIHRvIGFkZCAiCj4+PiArCQkJICJhdXRvc3Bhd249bm8gdG8gL2V0Yy9wdWxz ZS9jbGllbnQuY29uZlxuIik7Cj4+PiArCQlyZXR1cm4gZmFsc2U7Cj4+PiArCX0KPj4+ICsKPj4+ ICsJcmV0dXJuIHRydWU7Cj4+PiArfQo+Pj4gKwo+Pj4gIHN0YXRpYyB2b2lkIGFsc2FfZXJyb3Jf aGFuZGxlcihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuY3Rpb24s Cj4+PiAgCQkJICAgICAgIGludCBlcnIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQo+Pj4gIHsKPj4+ IEBAIC03OCw2ICs5OSwxMSBAQCBzdHJ1Y3QgYWxzYSAqYWxzYV9pbml0KHZvaWQpCj4+PiAgewo+ Pj4gIAlzdHJ1Y3QgYWxzYSAqYWxzYTsKPj4+ICAKPj4+ICsJaWYgKCFhbHNhX2hhc19leGNsdXNp dmVfYWNjZXNzKCkpIHsKPj4+ICsJCWlndF93YXJuKCJhbHNhIGRvZXNuJ3QgaGF2ZSBleGNsdXNp dmUgYWNjZXNzIHRvIGF1ZGlvIGRldmljZXNcbiIpOwo+Pgo+PiBIb3cgYWJvdXQgZm9sZGluZyB0 aGUgc2Vjb25kIHdhcm4gaW4gYWxzYV9oYXNfZXhjbHVzaXZlX2FjY2VzcygpPyBJdAo+PiB3b3Vs ZCBpbXByb3ZlIHRoZSBjaGFuY2VzIG9mIGhhdmluZyBhIGNvbnNpc3RlbnQgc3RyaW5nIHRvIGdy ZXAgb24gaW4KPj4gY2lidWdsb2cgaW4gY2FzZSBvdGhlciB1c2VycyBkZWNpZGUgdG8gdXNlIHRo ZSBmdW5jdGlvbi4KPj4KPj4+ICsJCXJldHVybiBOVUxMOwo+Pj4gKwl9Cj4+PiArCj4+PiAgCWFs c2EgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhbHNhKSk7Cj4+PiAgCW1lbXNldChhbHNhLCAwLCBz aXplb2Yoc3RydWN0IGFsc2EpKTsKPj4+ICAKPj4+IEBAIC01NTMsMTYgKzU3OSwyMCBAQCBpbnQg YWxzYV9ydW4oc3RydWN0IGFsc2EgKmFsc2EsIGludCBkdXJhdGlvbl9tcykKPj4+ICAJCQkJCWlm IChyZXQgPCAwKSB7Cj4+PiAgCQkJCQkJcmV0ID0gc25kX3BjbV9yZWNvdmVyKGhhbmRsZSwKPj4+ ICAJCQkJCQkJCSAgICAgIHJldCwgMCk7Cj4+PiAtCQkJCQkJaWYgKHJldCA8IDApCj4+PiArCQkJ CQkJaWYgKHJldCA8IDApIHsKPj4+ICsJCQkJCQkJaWd0X2RlYnVnKCJzbmRfcGNtX3JlY292ZXIg YWZ0ZXIgc25kX3BjbV93cml0ZWkgZmFpbGVkIik7Cj4+PiAgCQkJCQkJCWdvdG8gY29tcGxldGU7 Cj4+PiArCQkJCQkJfQo+Pj4gIAkJCQkJfQo+Pj4gIAo+Pj4gIAkJCQkJb3V0cHV0X2NvdW50c1tp XSArPSByZXQ7Cj4+PiAgCQkJCX0gZWxzZSBpZiAob3V0cHV0X2NvdW50c1tpXSA8IG91dHB1dF90 cmlnZ2VyICYmCj4+PiAgCQkJCQkgICByZXQgPCAwKSB7Cj4+PiAgCQkJCQlyZXQgPSBzbmRfcGNt X3JlY292ZXIoaGFuZGxlLCByZXQsIDApOwo+Pj4gLQkJCQkJaWYgKHJldCA8IDApCj4+PiArCQkJ CQlpZiAocmV0IDwgMCkgewo+Pj4gKwkJCQkJCWlndF9kZWJ1Zygic25kX3BjbV9yZWNvdmVyIGZh aWxlZCIpOwo+Pj4gIAkJCQkJCWdvdG8gY29tcGxldGU7Cj4+PiArCQkJCQl9Cj4+PiAgCQkJCX0K Pj4+ICAJCQl9Cj4+PiAgCj4+PiBAQCAtNjA5LDE2ICs2MzksMjAgQEAgaW50IGFsc2FfcnVuKHN0 cnVjdCBhbHNhICphbHNhLCBpbnQgZHVyYXRpb25fbXMpCj4+PiAgCQkJCQlyZXQgPSAwOwo+Pj4g IAkJCQl9IGVsc2UgaWYgKHJldCA8IDApIHsKPj4+ICAJCQkJCXJldCA9IHNuZF9wY21fcmVjb3Zl cihoYW5kbGUsIHJldCwgMCk7Cj4+PiAtCQkJCQlpZiAocmV0IDwgMCkKPj4+ICsJCQkJCWlmIChy ZXQgPCAwKSB7Cj4+PiArCQkJCQkJaWd0X2RlYnVnKCJzbmRfcGNtX3JlY292ZXIgYWZ0ZXIgc25k X3BjbV9yZWFkaSBmYWlsZWQiKTsKPj4+ICAJCQkJCQlnb3RvIGNvbXBsZXRlOwo+Pj4gKwkJCQkJ fQo+Pj4gIAkJCQl9Cj4+PiAgCj4+PiAgCQkJCWlucHV0X2NvdW50ICs9IHJldDsKPj4+ICAJCQkJ aW5wdXRfdG90YWwgKz0gcmV0Owo+Pj4gIAkJCX0gZWxzZSBpZiAoaW5wdXRfY291bnQgPCBpbnB1 dF90cmlnZ2VyICYmIHJldCA8IDApIHsKPj4+ICAJCQkJcmV0ID0gc25kX3BjbV9yZWNvdmVyKGhh bmRsZSwgcmV0LCAwKTsKPj4+IC0JCQkJaWYgKHJldCA8IDApCj4+PiArCQkJCWlmIChyZXQgPCAw KSB7Cj4+PiArCQkJCQlpZ3RfZGVidWcoInNuZF9wY21fcmVjb3ZlciBmYWlsZWQiKTsKPj4+ICAJ CQkJCWdvdG8gY29tcGxldGU7Cj4+PiArCQkJCX0KPj4+ICAJCQl9Cj4+PiAgCQl9Cj4+PiAgCX0g d2hpbGUgKCFyZWFjaGVkKTsKPj4+IGRpZmYgLS1naXQgYS9saWIvaWd0X2Fsc2EuaCBiL2xpYi9p Z3RfYWxzYS5oCj4+PiBpbmRleCA1MDc5NTEzMC4uNWM4MDRiNDYgMTAwNjQ0Cj4+PiAtLS0gYS9s aWIvaWd0X2Fsc2EuaAo+Pj4gKysrIGIvbGliL2lndF9hbHNhLmgKPj4+IEBAIC0zMyw2ICszMyw3 IEBACj4+PiAgCj4+PiAgc3RydWN0IGFsc2E7Cj4+PiAgCj4+PiArYm9vbCBhbHNhX2hhc19leGNs dXNpdmVfYWNjZXNzKHZvaWQpOwo+Pj4gIHN0cnVjdCBhbHNhICphbHNhX2luaXQodm9pZCk7Cj4+ PiAgaW50IGFsc2Ffb3Blbl9vdXRwdXQoc3RydWN0IGFsc2EgKmFsc2EsIGNvbnN0IGNoYXIgKmRl dmljZV9uYW1lKTsKPj4+ICBpbnQgYWxzYV9vcGVuX2lucHV0KHN0cnVjdCBhbHNhICphbHNhLCBj b25zdCBjaGFyICpkZXZpY2VfbmFtZSk7Cj4+PiBkaWZmIC0tZ2l0IGEvbGliL2lndF9hdWRpby5j IGIvbGliL2lndF9hdWRpby5jCj4+PiBpbmRleCBhMDU5MmQ1My4uNGNjOWJkZjAgMTAwNjQ0Cj4+ PiAtLS0gYS9saWIvaWd0X2F1ZGlvLmMKPj4+ICsrKyBiL2xpYi9pZ3RfYXVkaW8uYwo+Pj4gQEAg LTI2LDggKzI2LDExIEBACj4+PiAgCj4+PiAgI2luY2x1ZGUgImNvbmZpZy5oIgo+Pj4gIAo+Pj4g LSNpbmNsdWRlIDxtYXRoLmg+Cj4+PiArI2luY2x1ZGUgPGVycm5vLmg+Cj4+PiArI2luY2x1ZGUg PGZjbnRsLmg+Cj4+PiAgI2luY2x1ZGUgPGdzbC9nc2xfZmZ0X3JlYWwuaD4KPj4+ICsjaW5jbHVk ZSA8bWF0aC5oPgo+Pj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4KPj4+ICAKPj4+ICAjaW5jbHVkZSAi aWd0X2F1ZGlvLmgiCj4+PiAgI2luY2x1ZGUgImlndF9jb3JlLmgiCj4+PiBAQCAtMTI4LDcgKzEz MSw3IEBAIGludCBhdWRpb19zaWduYWxfYWRkX2ZyZXF1ZW5jeShzdHJ1Y3QgYXVkaW9fc2lnbmFs ICpzaWduYWwsIGludCBmcmVxdWVuY3kpCj4+PiAgICovCj4+PiAgdm9pZCBhdWRpb19zaWduYWxf c3ludGhlc2l6ZShzdHJ1Y3QgYXVkaW9fc2lnbmFsICpzaWduYWwpCj4+PiAgewo+Pj4gLQlzaG9y dCAqcGVyaW9kOwo+Pj4gKwlpbnQxNl90ICpwZXJpb2Q7Cj4+PiAgCWRvdWJsZSB2YWx1ZTsKPj4+ ICAJaW50IGZyYW1lczsKPj4+ICAJaW50IGZyZXE7Cj4+PiBAQCAtMTQ1LDkgKzE0OCw5IEBAIHZv aWQgYXVkaW9fc2lnbmFsX3N5bnRoZXNpemUoc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsKQo+ Pj4gIAo+Pj4gIAkJZm9yIChqID0gMDsgaiA8IGZyYW1lczsgaisrKSB7Cj4+PiAgCQkJdmFsdWUg PSAyLjAgKiBNX1BJICogZnJlcSAvIHNpZ25hbC0+c2FtcGxpbmdfcmF0ZSAqIGo7Cj4+PiAtCQkJ dmFsdWUgPSBzaW4odmFsdWUpICogU0hSVF9NQVggLyBzaWduYWwtPmZyZXFzX2NvdW50Owo+Pj4g KwkJCXZhbHVlID0gc2luKHZhbHVlKSAqIElOVDE2X01BWCAvIHNpZ25hbC0+ZnJlcXNfY291bnQ7 Cj4+PiAgCj4+PiAtCQkJcGVyaW9kW2pdID0gKHNob3J0KSB2YWx1ZTsKPj4+ICsJCQlwZXJpb2Rb al0gPSAoaW50MTZfdCkgdmFsdWU7Cj4+Cj4+IFNlZW1zIGxpa2UgYWxsIHRoZXNlIGFsc2EgY2hh bmdlcyBzaG91bGQgYmUgaW4gdGhlaXIgb3duIHBhdGNoZXMgc28gYXMKPj4geW91IGNvdWxkIGV4 cGxhaW4gd2h5IHRoZXNlIGNoYW5nZXMgYXJlIG5lZWRlZC4KPj4KPj4gQXJlIHlvdSBhZnJhaWQg dGhhdCBzb21lIHBsYXRmb3JtcyB3b3VsZCBub3QgaGF2ZSBTSE9SVCA9PSBJTlQxNj8KPj4KPj4g SWYgdGhlc2UgY2hhbmdlcyB3b3VsZCBoYXZlIHJlcXVpcmVkIGNoYW5nZXMgaW4gY29kZSB0aGF0 IHlvdSB3b3VsZAo+PiBjaGFuZ2UgYW55d2F5IHJpZ2h0IGFmdGVyLCB0aGVuIGF0IGxlYXN0IGV4 cGxhaW4gdGhlIGNoYW5nZXMgaW4gdGhlCj4+IGNvbW1pdCBsb2cgOikKPiAKPiBZZWFoLCBzb3Jy eSBhYm91dCB0aGlzLiBJIGp1c3QgY29tcGxldGVseSBmb3Jnb3QgYWJvdXQgdGhpcyBjaGFuZ2Ug d2hlbgo+IHdyaXRpbmcgdGhlIGNvbW1pdCBsb2cuIFRCSCB3aGVuIHdyaXRpbmcgdGhpcyBwYXRj aCBJIHdhcyBtYWlubHkKPiBjb25jZXJuZWQgYWJvdXQgZ2V0dGluZyBzb21ldGhpbmcgd29ya2lu ZyBfYXQgYWxsXywgYW5kIGl0IHRvb2sgcXVpdGUgYQo+IGZldyBkYXlzLiA6UAo+IAo+IFRoZSBy YXRpb25hbGUgaXM6Cj4gCj4gLSBUaGUgc3RhbmRhcmQgc2F5cyBhIHNob3J0IGlzIGF0IGxlYXN0 IDE2IGJpdCB3aWRlLCBidXQgYSBzaG9ydCBjYW4gYmUKPiAgIGxhcmdlciAoaW4gcHJhY3RpY2Ug aXQgd29uJ3QgaGFwcGVuLCBidXQgYmV0dGVyIHVzZSB0eXBlcyBjb3JyZWN0bHkpCj4gLSBJdCBt YWtlcyBpdCBjbGVhcmVyIHRoYXQgdGhlIGF1ZGlvIGZvcm1hdCBpcyBTMTZfTEUsIHNpbmNlICIx NiIgaXMgCj4gICBpbiB0aGUgdHlwZSBuYW1lLgo+IAo+IEkgY2FuIGV4dHJhY3QgdGhlc2UgY2hh bmdlcyB0byBhbiBpbmRpdmlkdWFsIGNvbW1pdCBpZiBuZWVkZWQuCgpKdXN0IHdyaXRlIGl0IGlu IHRoZSBjb21taXQgbWVzc2FnZS4KCj4gCj4+PiAgCQl9Cj4+PiAgCj4+PiAgCQlzaWduYWwtPmZy ZXFzW2ldLnBlcmlvZCA9IHBlcmlvZDsKPj4+IEBAIC0xODYsMTcgKzE4OSwxNiBAQCB2b2lkIGF1 ZGlvX3NpZ25hbF9jbGVhbihzdHJ1Y3QgYXVkaW9fc2lnbmFsICpzaWduYWwpCj4+PiAgICogc2ln bmFsIGRhdGEgKGluIGludGVybGVhdmVkIFMxNl9MRSBmb3JtYXQpLCBhdCB0aGUgcmVxdWVzdGVk IHNhbXBsaW5nIHJhdGUKPj4+ICAgKiBhbmQgbnVtYmVyIG9mIGNoYW5uZWxzLgo+Pj4gICAqLwo+ Pj4gLXZvaWQgYXVkaW9fc2lnbmFsX2ZpbGwoc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsLCBz aG9ydCAqYnVmZmVyLCBpbnQgZnJhbWVzKQo+Pj4gK3ZvaWQgYXVkaW9fc2lnbmFsX2ZpbGwoc3Ry dWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsLCBpbnQxNl90ICpidWZmZXIsIGludCBmcmFtZXMpCj4+ PiAgewo+Pj4gLQlzaG9ydCAqZGVzdGluYXRpb247Cj4+PiAtCXNob3J0ICpzb3VyY2U7Cj4+PiAr CWludDE2X3QgKmRlc3RpbmF0aW9uLCAqc291cmNlOwo+Pj4gIAlpbnQgdG90YWw7Cj4+PiAgCWlu dCBmcmVxX2ZyYW1lczsKPj4+ICAJaW50IGZyZXFfb2Zmc2V0Owo+Pj4gIAlpbnQgY291bnQ7Cj4+ PiAgCWludCBpLCBqLCBrOwo+Pj4gIAo+Pj4gLQltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2Yoc2hv cnQpICogc2lnbmFsLT5jaGFubmVscyAqIGZyYW1lcyk7Cj4+PiArCW1lbXNldChidWZmZXIsIDAs IHNpemVvZihpbnQxNl90KSAqIHNpZ25hbC0+Y2hhbm5lbHMgKiBmcmFtZXMpOwo+Pj4gIAo+Pj4g IAlmb3IgKGkgPSAwOyBpIDwgc2lnbmFsLT5mcmVxc19jb3VudDsgaSsrKSB7Cj4+PiAgCQl0b3Rh bCA9IDA7Cj4+PiBAQCAtMjI5LDk3ICsyMzEsMjE0IEBAIHZvaWQgYXVkaW9fc2lnbmFsX2ZpbGwo c3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsLCBzaG9ydCAqYnVmZmVyLCBpbnQgZnJhbWVzKQo+ Pj4gIH0KPj4+ICAKPj4+ICAvKioKPj4+IC0gKiBhdWRpb19zaWduYWxfZGV0ZWN0Ogo+Pj4gLSAq IEBzaWduYWw6IFRoZSB0YXJnZXQgc2lnbmFsIHN0cnVjdHVyZQo+Pj4gLSAqIEBjaGFubmVsczog VGhlIGlucHV0IGRhdGEncyBudW1iZXIgb2YgY2hhbm5lbHMKPj4+IC0gKiBAc2FtcGxpbmdfcmF0 ZTogVGhlIGlucHV0IGRhdGEncyBzYW1wbGluZyByYXRlCj4+PiAtICogQGJ1ZmZlcjogVGhlIGlu cHV0IGRhdGEncyBidWZmZXIKPj4+IC0gKiBAZnJhbWVzOiBUaGUgaW5wdXQgZGF0YSdzIG51bWJl ciBvZiBmcmFtZXMKPj4+IC0gKgo+Pj4gLSAqIERldGVjdCB0aGF0IHRoZSBmcmVxdWVuY2llcyBz cGVjaWZpZWQgaW4gQHNpZ25hbCwgYW5kIG9ubHkgdGhvc2UsIGFyZQo+Pj4gLSAqIHByZXNlbnQg aW4gdGhlIGlucHV0IGRhdGEuIFRoZSBpbnB1dCBkYXRhJ3MgZm9ybWF0IGlzIHJlcXVpcmVkIHRv IGJlIFMxNl9MRS4KPj4+ICsgKiBDaGVja3MgdGhhdCBmcmVxdWVuY2llcyBzcGVjaWZpZWQgaW4g c2lnbmFsLCBhbmQgb25seSB0aG9zZSwgYXJlIGluY2x1ZGVkCj4+PiArICogaW4gdGhlIGlucHV0 IGRhdGEuCj4+PiAgICoKPj4+IC0gKiBSZXR1cm5zOiBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0 aGVyIHRoZSBkZXRlY3Rpb24gd2FzIHN1Y2Nlc3NmdWwKPj4+ICsgKiBzYW1wbGluZ19yYXRlIGlz IGdpdmVuIGluIEh6LiBkYXRhX2xlbiBpcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGRhdGEu Cj4+PiAgICovCj4+PiAtYm9vbCBhdWRpb19zaWduYWxfZGV0ZWN0KHN0cnVjdCBhdWRpb19zaWdu YWwgKnNpZ25hbCwgaW50IGNoYW5uZWxzLAo+Pj4gLQkJCSBpbnQgc2FtcGxpbmdfcmF0ZSwgc2hv cnQgKmJ1ZmZlciwgaW50IGZyYW1lcykKPj4+ICtib29sIGF1ZGlvX3NpZ25hbF9kZXRlY3Qoc3Ry dWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsLCBpbnQgc2FtcGxpbmdfcmF0ZSwKPj4+ICsJCQkgZG91 YmxlICpkYXRhLCBzaXplX3QgZGF0YV9sZW4pCj4+PiAgewo+Pj4gLQlkb3VibGUgZGF0YVtmcmFt ZXNdOwo+Pj4gLQlpbnQgYW1wbGl0dWRlW2ZyYW1lcyAvIDJdOwo+Pj4gKwlzaXplX3QgYW1wbGl0 dWRlX2xlbiA9IGRhdGFfbGVuIC8gMiArIDE7Cj4+PiArCWRvdWJsZSBhbXBsaXR1ZGVbYW1wbGl0 dWRlX2xlbl07Cj4+Cj4+IGJpbl9wb3dlcj8KPiAKPiBIbW0sICJhbXBsaXR1ZGUiIGlzIHVzZWQg dG9vIGl0IHNlZW1zIFsxXS4gQnV0IGJpbl9wb3dlciBMR1RNLCBsZXQncwo+IHN3aXRjaCB0byB0 aGlzIHdvcmRpbmcuCj4gCj4gWzFdOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GYXN0 X0ZvdXJpZXJfdHJhbnNmb3JtIy9tZWRpYS9GaWxlOkZGVF9vZl9Db3NpbmVfU3VtbWF0aW9uX0Z1 bmN0aW9uLnBuZwoKVGhlbiBrZWVwIGFtcGxpdHVkZSwgdGhhdCdzIG9rIQoKPiAKPj4+ICAJYm9v bCBkZXRlY3RlZFtzaWduYWwtPmZyZXFzX2NvdW50XTsKPj4+IC0JaW50IHRocmVzaG9sZDsKPj4+ IC0JYm9vbCBhYm92ZTsKPj4+IC0JaW50IGVycm9yOwo+Pj4gLQlpbnQgZnJlcSA9IDA7Cj4+PiAt CWludCBtYXg7Cj4+PiAtCWludCBjLCBpLCBqOwo+Pj4gLQo+Pj4gLQkvKiBBbGxvd2VkIGVycm9y IGluIEh6IGR1ZSB0byBGRlQgc3RlcC4gKi8KPj4+IC0JZXJyb3IgPSBzYW1wbGluZ19yYXRlIC8g ZnJhbWVzOwo+Pj4gKwlpbnQgcmV0LCBlcHNpbG9uLCBmcmVxLCBtYXhfZnJlcTsKPj4+ICsJZG91 YmxlIG1heCwgdGhyZXNob2xkOwo+Pj4gKwlzaXplX3QgaSwgajsKPj4+ICsJYm9vbCBhYm92ZSwg c3VjY2VzczsKPj4+ICsKPj4+ICsJLyogQWxsb3dlZCBlcnJvciBpbiBIeiBkdWUgdG8gRkZUIHN0 ZXAgKi8KPj4+ICsJZXBzaWxvbiA9IHNhbXBsaW5nX3JhdGUgLyBkYXRhX2xlbjsKPj4KPj4gZnJl cV9hY2N1cmFjeSB3b3VsZCBiZSBhIG5pY2VyIG5hbWUuCj4gCj4gQWdyZWVkLgo+IAo+Pj4gKwlp Z3RfZGVidWcoImFsbG93ZWQgZnJlcS4gZXJyb3I6ICVkIEh6XG4iLCBlcHNpbG9uKTsKPj4+ICsK Pj4+ICsJcmV0ID0gZ3NsX2ZmdF9yZWFsX3JhZGl4Ml90cmFuc2Zvcm0oZGF0YSwgMSwgZGF0YV9s ZW4pOwo+Pj4gKwlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKPj4+ICsKPj4+ICsJLyogRm9yIGkgPCBk YXRhX2xlbiAvIDIsIHRoZSByZWFsIHBhcnQgb2YgdGhlIGktdGggdGVybSBpcyBzdG9yZWQgYXQK Pj4+ICsJICogZGF0YVtpXSBhbmQgaXRzIGltYWdpbmFyeSBwYXJ0IGlzIHN0b3JlZCBhdCBkYXRh W2RhdGFfbGVuIC0gaV0uCj4+PiArCSAqIGkgPSAwIGFuZCBpID0gZGF0YV9sZW4gLyAyIGFyZSBz cGVjaWFsIGNhc2VzLCB0aGV5IGFyZSBwdXJlbHkgcmVhbAo+Pj4gKwkgKiBzbyB0aGVpciBpbWFn aW5hcnkgcGFydCBpc24ndCBzdG9yZWQuCj4+PiArCSAqCj4+PiArCSAqIFRoZSBhbXBsaXR1ZGUg aXMgZW5jb2RlZCBhcyB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb21wbGV4IG51bWJlciBhbmQKPj4+ ICsJICogdGhlIHBoYXNlIGlzIGVuY29kZWQgYXMgaXRzIGFuZ2xlLgo+Pj4gKwkgKi8KPj4KPj4g VGhhbmtzIGZvciBkb2N1bWVudGluZyB0aGUgaWRpb3N5bmNyYXNpZXMgb2YgR1NMIQo+Pgo+PiAv KiBjb21wdXRlIHRoZSBwb3dlciByZWNlaXZlZCBhdCBldmVyeSBiaW4gb2YgdGhlIEZGVCwgYW5k IHJlY29yZCB0aGUKPj4gICogbWF4aW11bSBwb3dlciByZWNlaXZlZCBhcyBhIHdheSB0byBub3Jt YWxpemUgYWxsIHRoZSBvdGhlcnMuCj4+ICAqLwo+Pgo+Pj4gKwltYXggPSAwOwo+Pj4gKwlhbXBs aXR1ZGVbMF0gPSBkYXRhWzBdOwo+Pj4gKwlmb3IgKGkgPSAxOyBpIDwgYW1wbGl0dWRlX2xlbiAt IDE7IGkrKykgewo+Pj4gKwkJYW1wbGl0dWRlW2ldID0gaHlwb3QoZGF0YVtpXSwgZGF0YVtkYXRh X2xlbiAtIGldKTsKPj4+ICsJCWlmIChhbXBsaXR1ZGVbaV0gPiBtYXgpCj4+PiArCQkJbWF4ID0g YW1wbGl0dWRlW2ldOwo+Pj4gKwl9Cj4+PiArCWFtcGxpdHVkZVthbXBsaXR1ZGVfbGVuIC0gMV0g PSBkYXRhW2RhdGFfbGVuIC8gMl07Cj4+Cj4+IFdoYXQncyB0aGUgY29kaW5nIHN0eWxlIG9mIElH VCB3cnQgc3BhY2VzIHZzIHRhYnM/Cj4gCj4gQWx3YXlzIHVzZSB0YWJzPyBJREdJLCBJIG9ubHkg c2VlIHRhYnMgaW4gdGhlcmUuIEknbSBwcm9iYWJseSBtaXNzaW5nCj4gc29tZXRoaW5nLgoKWWVh aCwgQXJlayBhZ3JlZXMgOikKCj4gCj4+PiAgCj4+PiAtCWZvciAoYyA9IDA7IGMgPCBjaGFubmVs czsgYysrKSB7Cj4+PiAtCQlmb3IgKGkgPSAwOyBpIDwgZnJhbWVzOyBpKyspCj4+PiAtCQkJZGF0 YVtpXSA9IChkb3VibGUpIGJ1ZmZlcltpICogY2hhbm5lbHMgKyBjXTsKPj4+ICsJZm9yIChpID0g MDsgaSA8IHNpZ25hbC0+ZnJlcXNfY291bnQ7IGkrKykKPj4+ICsJCWRldGVjdGVkW2ldID0gZmFs c2U7Cj4+Cj4+IFRoaXMgY291bGQgaGF2ZSBiZWVuIGEgYml0ZmllbGQsIGJ1dCBtZWghCj4gCj4g UmlnaHQuIFN0aWxsIGhhdmUgdG8gYmUgYSBsaXR0bGUgY2FyZWZ1bCBiZWNhdXNlIGluIHRoZSBm dXR1cmUgd2UnbGwKPiBwcm9iYWJseSB0ZXN0IDggY2hhbm5lbHMgd2l0aCBhIGNvdXBsZSBvZiBk aWZmZXJlbnQgZnJlcXVlbmNpZXMgb24gZWFjaAo+ICh3ZSB0ZXN0IDUgZnJlcXVlbmNpZXMgQVRN LCBzbyB0aGF0IHdvdWxkIGJlIDQwIHRvdGFsKSwgc28gaXQgY291bGQKPiBzb21ld2hhdCBhcHBy b2FjaCBhIDY0IGZyZXF1ZW5jaWVzIGxpbWl0LgoKYWdyZWVkLiBEb24ndCB3b3JyeSBhYm91dCBp dC4KCj4gCj4+PiAgCj4+PiAtCQlnc2xfZmZ0X3JlYWxfcmFkaXgyX3RyYW5zZm9ybShkYXRhLCAx LCBmcmFtZXMpOwo+Pj4gKwkvKiBXZSB3YW50IHRvIGRldGVjdCBwZWFrcyBhYm92ZSBhIGdpdmVu IHRocmVzaG9sZC4gKi8KPj4KPj4gLyogRG8gYSBsaW5lYXIgc2VhcmNoIHRocm91Z2ggdGhlIEZG VCBiaW5zJyBwb3dlciB0byBmaW5kIHRoZSB0aGUgbG9jYWwKPj4gICogbWF4aW11bXMgdGhhdCBl eGNlZWQgaGFsZiBvZiB0aGUgYWJzb2x1dGUgbWF4aW11bSB0aGF0IHdlIHByZXZpb3VzbHkKPj4g ICogY2FsY3VsYXRlZC4KPj4gICoKPj4gICogU2luY2UgdGhlIGZyZXF1ZW5jaWVzIG1pZ2h0IG5v dCBiZSBwZXJmZWN0bHkgYWxpZ25lZCB3aXRoIHRoZSBiaW5zIG9mCj4+ICAqIHRoZSBGRlQsIHdl IG5lZWQgdG8gZmluZCB0aGUgbG9jYWwgbWF4aW11bSBhY3Jvc3Mgc29tZSBjb25zZWN1dGl2ZQo+ PiAgKiBiaW5zLiBPbmNlIHRoZSBwb3dlciByZXR1cm5zIHVuZGVyIHRoZSBwb3dlciB0aHJlc2hv bGQsIHdlIGNvbXBhcmUKPj4gICogdGhlIGZyZXF1ZW5jeSBvZiB0aGUgYmluIHRoYXQgcmVjZWl2 ZWQgdGhlIG1heGltdW0gcG93ZXIgdG8gdGhlCj4+ICAqIGV4cGVjdGVkIGZyZXF1ZW5jaWVzLiBJ ZiBmb3VuZCwgd2UgbWFyayB0aGlzIGZyZXF1ZW5jeSBhcyBzdWNoLAo+PiAgKiBvdGhlcndpc2Ug d2Ugd2FybiB0aGF0IGFuIHVuZXhwZWN0ZWQgZnJlcXVlbmN5IHdhcyBmb3VuZC4KPj4gICovCj4+ Cj4+PiArCXRocmVzaG9sZCA9IG1heCAvIDI7Cj4+PiArCXN1Y2Nlc3MgPSB0cnVlOwo+Pj4gKwlh Ym92ZSA9IGZhbHNlOwo+Pj4gKwltYXggPSAwOwo+Pj4gKwltYXhfZnJlcSA9IC0xOwo+Pgo+PiBs b2NhbF9tYXggPSAwOwo+PiBsb2NhbF9tYXhfZnJlcSA9IC0xOwo+IAo+IFRoYXQncyBiZXR0ZXIg aW5kZWVkLgo+IAo+Pj4gKwlmb3IgKGkgPSAwOyBpIDwgYW1wbGl0dWRlX2xlbjsgaSsrKSB7Cj4+ PiArCQlmcmVxID0gc2FtcGxpbmdfcmF0ZSAqIGkgLyBkYXRhX2xlbjsKPj4+ICAKPj4+IC0JCW1h eCA9IDA7Cj4+PiArCQlpZiAoYW1wbGl0dWRlW2ldID4gdGhyZXNob2xkKQo+Pj4gKwkJCWFib3Zl ID0gdHJ1ZTsKPj4+ICAKPj4+IC0JCWZvciAoaSA9IDA7IGkgPCBmcmFtZXMgLyAyOyBpKyspIHsK Pj4+IC0JCQlhbXBsaXR1ZGVbaV0gPSBoeXBvdChkYXRhW2ldLCBkYXRhW2ZyYW1lcyAtIGldKTsK Pj4+IC0JCQlpZiAoYW1wbGl0dWRlW2ldID4gbWF4KQo+Pj4gLQkJCQltYXggPSBhbXBsaXR1ZGVb aV07Cj4+PiArCQlpZiAoIWFib3ZlKSB7Cj4+PiArCQkJY29udGludWU7Cj4+PiAgCQl9Cj4+PiAg Cj4+PiAtCQlmb3IgKGkgPSAwOyBpIDwgc2lnbmFsLT5mcmVxc19jb3VudDsgaSsrKQo+Pj4gLQkJ CWRldGVjdGVkW2ldID0gZmFsc2U7Cj4+PiAtCj4+PiAtCQl0aHJlc2hvbGQgPSBtYXggLyAyOwo+ Pj4gLQkJYWJvdmUgPSBmYWxzZTsKPj4+IC0JCW1heCA9IDA7Cj4+PiAtCj4+PiAtCQlmb3IgKGkg PSAwOyBpIDwgZnJhbWVzIC8gMjsgaSsrKSB7Cj4+PiAtCQkJaWYgKGFtcGxpdHVkZVtpXSA+IHRo cmVzaG9sZCkKPj4+IC0JCQkJYWJvdmUgPSB0cnVlOwo+Pj4gLQo+Pj4gLQkJCWlmIChhYm92ZSkg ewo+Pj4gLQkJCQlpZiAoYW1wbGl0dWRlW2ldIDwgdGhyZXNob2xkKSB7Cj4+PiAtCQkJCQlhYm92 ZSA9IGZhbHNlOwo+Pj4gLQkJCQkJbWF4ID0gMDsKPj4+IC0KPj4+IC0JCQkJCWZvciAoaiA9IDA7 IGogPCBzaWduYWwtPmZyZXFzX2NvdW50OyBqKyspIHsKPj4+IC0JCQkJCQlpZiAoc2lnbmFsLT5m cmVxc1tqXS5mcmVxID4KPj4+IC0JCQkJCQkgICAgZnJlcSAtIGVycm9yICYmCj4+PiAtCQkJCQkJ ICAgIHNpZ25hbC0+ZnJlcXNbal0uZnJlcSA8Cj4+PiAtCQkJCQkJICAgIGZyZXEgKyBlcnJvcikg ewo+Pj4gLQkJCQkJCQlkZXRlY3RlZFtqXSA9IHRydWU7Cj4+PiAtCQkJCQkJCWJyZWFrOwo+Pj4g LQkJCQkJCX0KPj4+IC0JCQkJCX0KPj4+IC0KPj4+IC0JCQkJCS8qIERldGVjdGVkIGZyZXF1ZW5j eSB3YXMgbm90IGdlbmVyYXRlZC4gKi8KPj4+IC0JCQkJCWlmIChqID09IHNpZ25hbC0+ZnJlcXNf Y291bnQpIHsKPj4+IC0JCQkJCQlpZ3RfZGVidWcoIkRldGVjdGVkIGFkZGl0aW9uYWwgZnJlcXVl bmN5OiAlZFxuIiwKPj4+IC0JCQkJCQkJICBmcmVxKTsKPj4+IC0JCQkJCQlyZXR1cm4gZmFsc2U7 Cj4+PiAtCQkJCQl9Cj4+PiArCQkvKiBJZiB3ZSB3ZXJlIGFib3ZlIHRoZSB0aHJlc2hvbGQgYW5k IHdlJ3JlIG5vdCBhbnltb3JlLCBpdCdzCj4+PiArCQkgKiB0aW1lIHRvIGRlY2lkZSB3aGV0aGVy IHRoZSBwZWFrIGZyZXF1ZW5jeSBpcyBjb3JyZWN0IG9yCj4+PiArCQkgKiBpbnZhbGlkLiAqLwo+ Pj4gKwkJaWYgKGFtcGxpdHVkZVtpXSA8IHRocmVzaG9sZCkgewo+Pj4gKwkJCWZvciAoaiA9IDA7 IGogPCBzaWduYWwtPmZyZXFzX2NvdW50OyBqKyspIHsKPj4+ICsJCQkJaWYgKHNpZ25hbC0+ZnJl cXNbal0uZnJlcSA+Cj4+PiArCQkJCSAgICBtYXhfZnJlcSAtIGVwc2lsb24gJiYKPj4+ICsJCQkJ ICAgIHNpZ25hbC0+ZnJlcXNbal0uZnJlcSA8Cj4+PiArCQkJCSAgICBtYXhfZnJlcSArIGVwc2ls b24pIHsKPj4+ICsJCQkJCWRldGVjdGVkW2pdID0gdHJ1ZTsKPj4+ICsJCQkJCWlndF9kZWJ1Zygi RnJlcXVlbmN5ICVkIGRldGVjdGVkXG4iLAo+Pj4gKwkJCQkJCSAgbWF4X2ZyZXEpOwo+Pj4gKwkJ CQkJYnJlYWs7Cj4+PiAgCQkJCX0KPj4+ICsJCQl9Cj4+PiAgCj4+PiAtCQkJCWlmIChhbXBsaXR1 ZGVbaV0gPiBtYXgpIHsKPj4+IC0JCQkJCW1heCA9IGFtcGxpdHVkZVtpXTsKPj4+IC0JCQkJCWZy ZXEgPSBzYW1wbGluZ19yYXRlICogaSAvIGZyYW1lczsKPj4+IC0JCQkJfQo+Pj4gKwkJCS8qIFdl IGhhdmVuJ3QgZ2VuZXJhdGVkIHRoaXMgZnJlcXVlbmN5LCBidXQgd2UgZGV0ZWN0ZWQKPj4+ICsJ CQkgKiBpdC4gKi8KPj4+ICsJCQlpZiAoaiA9PSBzaWduYWwtPmZyZXFzX2NvdW50KSB7Cj4+PiAr CQkJCWlndF9kZWJ1ZygiRGV0ZWN0ZWQgYWRkaXRpb25hbCBmcmVxdWVuY3k6ICVkXG4iLAo+Pj4g KwkJCQkJICBtYXhfZnJlcSk7Cj4+PiArCQkJCXN1Y2Nlc3MgPSBmYWxzZTsKPj4+ICAJCQl9Cj4+ PiArCj4+PiArCQkJYWJvdmUgPSBmYWxzZTsKPj4+ICsJCQltYXggPSAwOwo+Pj4gKwkJCW1heF9m cmVxID0gLTE7Cj4+PiAgCQl9Cj4+PiAgCj4+PiAtCQlmb3IgKGkgPSAwOyBpIDwgc2lnbmFsLT5m cmVxc19jb3VudDsgaSsrKSB7Cj4+PiAtCQkJaWYgKCFkZXRlY3RlZFtpXSkgewo+Pj4gLQkJCQlp Z3RfZGVidWcoIk1pc3NpbmcgZnJlcXVlbmN5OiAlZFxuIiwKPj4+IC0JCQkJCSAgc2lnbmFsLT5m cmVxc1tpXS5mcmVxKTsKPj4+IC0JCQkJcmV0dXJuIGZhbHNlOwo+Pj4gLQkJCX0KPj4+ICsJCWlm IChhbXBsaXR1ZGVbaV0gPiBtYXgpIHsKPj4+ICsJCQltYXggPSBhbXBsaXR1ZGVbaV07Cj4+PiAr CQkJbWF4X2ZyZXEgPSBmcmVxOwo+Pj4gKwkJfQo+Pj4gKwl9Cj4+PiArCj4+PiArCS8qIENoZWNr IHRoYXQgYWxsIGZyZXF1ZW5jaWVzIHdlIGdlbmVyYXRlZCBoYXZlIGJlZW4gZGV0ZWN0ZWQuICov Cj4+PiArCWZvciAoaSA9IDA7IGkgPCBzaWduYWwtPmZyZXFzX2NvdW50OyBpKyspIHsKPj4+ICsJ CWlmICghZGV0ZWN0ZWRbaV0pIHsKPj4+ICsJCQlpZ3RfZGVidWcoIk1pc3NpbmcgZnJlcXVlbmN5 OiAlZFxuIiwKPj4+ICsJCQkJICBzaWduYWwtPmZyZXFzW2ldLmZyZXEpOwo+Pj4gKwkJCXN1Y2Nl c3MgPSBmYWxzZTsKPj4+ICAJCX0KPj4+ICAJfQo+Pj4gIAo+Pj4gLQlyZXR1cm4gdHJ1ZTsKPj4+ ICsJcmV0dXJuIHN1Y2Nlc3M7Cj4+PiArfQo+Pj4gKwo+Pj4gKy8qKgo+Pj4gKyAqIEV4dHJhY3Rz IGEgc2luZ2xlIGNoYW5uZWwgZnJvbSBhIG11bHRpLWNoYW5uZWwgUzMyX0xFIGlucHV0IGJ1ZmZl ci4KPj4+ICsgKi8KPj4+ICtzaXplX3QgYXVkaW9fZXh0cmFjdF9jaGFubmVsX3MzMl9sZShkb3Vi bGUgKmRzdCwgc2l6ZV90IGRzdF9jYXAsCj4+PiArCQkJCSAgICBpbnQzMl90ICpzcmMsIHNpemVf dCBzcmNfbGVuLAo+Pj4gKwkJCQkgICAgaW50IG5fY2hhbm5lbHMsIGludCBjaGFubmVsKQo+Pj4g K3sKPj4+ICsJc2l6ZV90IGRzdF9sZW4sIGk7Cj4+PiArCj4+PiArCWlndF9hc3NlcnQoY2hhbm5l bCA8IG5fY2hhbm5lbHMpOwo+Pj4gKwlpZ3RfYXNzZXJ0KHNyY19sZW4gJSBuX2NoYW5uZWxzID09 IDApOwo+Pj4gKwlkc3RfbGVuID0gc3JjX2xlbiAvIG5fY2hhbm5lbHM7Cj4+PiArCWlndF9hc3Nl cnQoZHN0X2xlbiA8PSBkc3RfY2FwKTsKPj4+ICsJZm9yIChpID0gMDsgaSA8IGRzdF9sZW47IGkr KykKPj4+ICsJCWRzdFtpXSA9IChkb3VibGUpIHNyY1tpICogbl9jaGFubmVscyArIGNoYW5uZWxd Owo+Pj4gKwo+Pj4gKwlyZXR1cm4gZHN0X2xlbjsKPj4+ICt9Cj4+PiArCj4+PiArI2RlZmluZSBS SUZGX1RBRyAiUklGRiIKPj4+ICsjZGVmaW5lIFdBVkVfVEFHICJXQVZFIgo+Pj4gKyNkZWZpbmUg Rk1UX1RBRyAiZm10ICIKPj4+ICsjZGVmaW5lIERBVEFfVEFHICJkYXRhIgo+Pj4gKwo+Pj4gK3N0 YXRpYyB2b2lkCj4+PiArYXBwZW5kX3RvX2J1ZmZlcihjaGFyICpkc3QsIHNpemVfdCAqaSwgY29u c3Qgdm9pZCAqc3JjLCBzaXplX3Qgc3JjX3NpemUpCj4+PiArewo+Pj4gKwltZW1jcHkoJmRzdFsq aV0sIHNyYywgc3JjX3NpemUpOwo+Pj4gKwkqaSArPSBzcmNfc2l6ZTsKPj4+ICt9Cj4+PiArCj4+ PiArLyoqCj4+PiArICogQ3JlYXRlcyBhIG5ldyBXQVYgZmlsZS4gc2FtcGxlX3JhdGUgaXMgaW4g SHouIElmIHBhdGggaXMgbm90IE5VTEwsIGl0IHdpbGwKPj4+ICsgKiBiZSBzZXQgdG8gdGhlIG5l dyBmaWxlIHBhdGggKHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWUtaW5nIGl0KS4K Pj4+ICsgKgo+Pj4gKyAqIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdGhlIGNhbGxlciBp cyBleHBlY3RlZCB0byB3cml0ZSBTMzJfTEUgUENNIGRhdGEKPj4+ICsgKiB0byB0aGUgcmV0dXJu ZWQgZmlsZSBkZXNjcmlwdG9yLgo+Pj4gKyAqCj4+PiArICogU2VlIGh0dHA6Ly93d3ctbW1zcC5l Y2UubWNnaWxsLmNhL0RvY3VtZW50cy9BdWRpb0Zvcm1hdHMvV0FWRS9XQVZFLmh0bWwgZm9yCj4+ PiArICogYSBXQVYgZmlsZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KPj4+ICsgKi8KPj4+ICtpbnQg YXVkaW9fY3JlYXRlX3dhdl9maWxlX3MzMl9sZShjb25zdCBjaGFyICpxdWFsaWZpZXIsIHVpbnQz Ml90IHNhbXBsZV9yYXRlLAo+Pj4gKwkJCQkgdWludDE2X3QgY2hhbm5lbHMsIGNoYXIgKipwYXRo KQo+Pgo+PiBXaGF0IGlzIHF1YWxpZmllcj8KPiAKPiBUaGlzIGlzIHRha2VuIGZyb20gaWd0X3dy aXRlX2ZyYW1lX3RvX3BuZy4gSSBndWVzcyB0aGlzIGNvdWxkIHVzZSBzb21lCj4gbW9yZSBkb2Nz Lgo+IAo+IC8qKgo+ICAqIGF1ZGlvX2NyZWF0ZV93YXZfZmlsZV9zMzJfbGU6Cj4gICogQHF1YWxp ZmllcjogdGhlIGJhc2VuYW1lIG9mIHRoZSBmaWxlICh0aGUgdGVzdCBuYW1lIHdpbGwgYmUgcHJl cGVuZGVkLCBhbmQKPiAgKiB0aGUgZmlsZSBleHRlbnNpb24gd2lsbCBiZSBhcHBlbmRlZCkKPiAg KiBAc2FtcGxlX3JhdGU6IHRoZSBzYW1wbGUgcmF0ZSBpbiBIego+ICAqIEBjaGFubmVsczogdGhl IG51bWJlciBvZiBjaGFubmVscwo+ICAqIEBwYXRoOiBpZiBub24tTlVMTCwgd2lsbCBiZSBzZXQg dG8gYSBwb2ludGVyIHRvIHRoZSBuZXcgZmlsZSBwYXRoICh0aGUKPiAgKiBjYWxsZXIgaXMgcmVz cG9uc2libGUgZm9yIGZyZWUtaW5nIGl0KQo+ICAqCj4gICogQ3JlYXRlcyBhIG5ldyBXQVYgZmls ZS4KPiAgKgo+ICAqIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdGhlIGNhbGxlciBpcyBl eHBlY3RlZCB0byB3cml0ZSBTMzJfTEUgUENNIGRhdGEKPiAgKiB0byB0aGUgcmV0dXJuZWQgZmls ZSBkZXNjcmlwdG9yLgo+ICAqCj4gICogU2VlIGh0dHA6Ly93d3ctbW1zcC5lY2UubWNnaWxsLmNh L0RvY3VtZW50cy9BdWRpb0Zvcm1hdHMvV0FWRS9XQVZFLmh0bWwgZm9yCj4gICogYSBXQVYgZmls ZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KPiAgKgo+ICAqIFJldHVybnM6IGEgZmlsZSBkZXNjcmlw dG9yIHRvIHRoZSBuZXdseSBjcmVhdGVkIGZpbGUsIG9yIC0xIG9uIGVycm9yLgo+ICAqLwoKTG9v a3MgZ29vZCEKCj4gCj4+IE1heWJlIHdlIGNhbiByZW5hbWUgdGhhdCB0byBjaGFubmVsX2NvdW50 Pwo+IAo+IEkgd2FudCB0byBzaG92ZSBpbiB0aGUgcGxheWJhY2sgZnJlcXVlbmN5IHRvbyBpbiB0 aGUgZnV0dXJlLCBzbyBJJ2QKPiByYXRoZXIgbm90LgoKb2shCgo+IAo+Pj4gK3sKPj4+ICsJY2hh ciBfcGF0aFtQQVRIX01BWF07Cj4+PiArCWNvbnN0IGNoYXIgKnRlc3RfbmFtZSwgKnN1YnRlc3Rf bmFtZTsKPj4+ICsJaW50IGZkOwo+Pj4gKwljaGFyIGhlYWRlcls0NF07Cj4+PiArCXNpemVfdCBp ID0gMDsKPj4+ICsJdWludDMyX3QgZmlsZV9zaXplLCBjaHVua19zaXplLCBieXRlX3JhdGU7Cj4+ PiArCXVpbnQxNl90IGZvcm1hdCwgYmxvY2tfYWxpZ24sIGJpdHNfcGVyX3NhbXBsZTsKPj4+ICsK Pj4+ICsJdGVzdF9uYW1lID0gaWd0X3Rlc3RfbmFtZSgpOwo+Pj4gKwlzdWJ0ZXN0X25hbWUgPSBp Z3Rfc3VidGVzdF9uYW1lKCk7Cj4+PiArCj4+PiArCWlndF9hc3NlcnQoaWd0X2ZyYW1lX2R1bXBf cGF0aCk7Cj4+PiArCXNucHJpbnRmKF9wYXRoLCBzaXplb2YoX3BhdGgpLCAiJXMvYXVkaW8tJXMt JXMtJXMud2F2IiwKPj4+ICsJCSBpZ3RfZnJhbWVfZHVtcF9wYXRoLCB0ZXN0X25hbWUsIHN1YnRl c3RfbmFtZSwgcXVhbGlmaWVyKTsKPj4+ICsKPj4+ICsJaWYgKHBhdGgpCj4+PiArCQkqcGF0aCA9 IHN0cmR1cChfcGF0aCk7Cj4+PiArCj4+PiArCWlndF9kZWJ1ZygiRHVtcGluZyAlcyBhdWRpbyB0 byAlc1xuIiwgcXVhbGlmaWVyLCBfcGF0aCk7Cj4+PiArCWZkID0gb3BlbihfcGF0aCwgT19XUk9O TFkgfCBPX0NSRUFUIHwgT19UUlVOQyk7Cj4+PiArCWlmIChmZCA8IDApIHsKPj4+ICsJCWlndF93 YXJuKCJvcGVuIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Cj4+PiArCQlyZXR1cm4g LTE7Cj4+PiArCX0KPj4+ICsKPj4+ICsJLyogRmlsZSBoZWFkZXIgKi8KPj4+ICsJZmlsZV9zaXpl ID0gVUlOVDMyX01BWDsgLyogdW5rbm93biBmaWxlIHNpemUgKi8KPj4+ICsJYXBwZW5kX3RvX2J1 ZmZlcihoZWFkZXIsICZpLCBSSUZGX1RBRywgc3RybGVuKFJJRkZfVEFHKSk7Cj4+PiArCWFwcGVu ZF90b19idWZmZXIoaGVhZGVyLCAmaSwgJmZpbGVfc2l6ZSwgc2l6ZW9mKGZpbGVfc2l6ZSkpOwo+ Pj4gKwlhcHBlbmRfdG9fYnVmZmVyKGhlYWRlciwgJmksIFdBVkVfVEFHLCBzdHJsZW4oV0FWRV9U QUcpKTsKPj4+ICsKPj4+ICsJLyogRm9ybWF0IGNodW5rICovCj4+PiArCWNodW5rX3NpemUgPSAx NjsKPj4+ICsJZm9ybWF0ID0gMTsgLyogUENNICovCj4+PiArCWJpdHNfcGVyX3NhbXBsZSA9IDMy OyAvKiBTMzJfTEUgKi8KPj4+ICsJYnl0ZV9yYXRlID0gc2FtcGxlX3JhdGUgKiBjaGFubmVscyAq IGJpdHNfcGVyX3NhbXBsZSAvIDg7Cj4+PiArCWJsb2NrX2FsaWduID0gY2hhbm5lbHMgKiBiaXRz X3Blcl9zYW1wbGUgLyA4Owo+Pj4gKwlhcHBlbmRfdG9fYnVmZmVyKGhlYWRlciwgJmksIEZNVF9U QUcsIHN0cmxlbihGTVRfVEFHKSk7Cj4+PiArCWFwcGVuZF90b19idWZmZXIoaGVhZGVyLCAmaSwg JmNodW5rX3NpemUsIHNpemVvZihjaHVua19zaXplKSk7Cj4+PiArCWFwcGVuZF90b19idWZmZXIo aGVhZGVyLCAmaSwgJmZvcm1hdCwgc2l6ZW9mKGZvcm1hdCkpOwo+Pj4gKwlhcHBlbmRfdG9fYnVm ZmVyKGhlYWRlciwgJmksICZjaGFubmVscywgc2l6ZW9mKGNoYW5uZWxzKSk7Cj4+PiArCWFwcGVu ZF90b19idWZmZXIoaGVhZGVyLCAmaSwgJnNhbXBsZV9yYXRlLCBzaXplb2Yoc2FtcGxlX3JhdGUp KTsKPj4+ICsJYXBwZW5kX3RvX2J1ZmZlcihoZWFkZXIsICZpLCAmYnl0ZV9yYXRlLCBzaXplb2Yo Ynl0ZV9yYXRlKSk7Cj4+PiArCWFwcGVuZF90b19idWZmZXIoaGVhZGVyLCAmaSwgJmJsb2NrX2Fs aWduLCBzaXplb2YoYmxvY2tfYWxpZ24pKTsKPj4+ICsJYXBwZW5kX3RvX2J1ZmZlcihoZWFkZXIs ICZpLCAmYml0c19wZXJfc2FtcGxlLCBzaXplb2YoYml0c19wZXJfc2FtcGxlKSk7Cj4+PiArCj4+ PiArCS8qIERhdGEgY2h1bmsgKi8KPj4+ICsJY2h1bmtfc2l6ZSA9IFVJTlQzMl9NQVg7IC8qIHVu a25vd24gY2h1bmsgc2l6ZSAqLwo+Pj4gKwlhcHBlbmRfdG9fYnVmZmVyKGhlYWRlciwgJmksIERB VEFfVEFHLCBzdHJsZW4oREFUQV9UQUcpKTsKPj4+ICsJYXBwZW5kX3RvX2J1ZmZlcihoZWFkZXIs ICZpLCAmY2h1bmtfc2l6ZSwgc2l6ZW9mKGNodW5rX3NpemUpKTsKPj4+ICsKPj4+ICsJaWd0X2Fz c2VydChpID09IHNpemVvZihoZWFkZXIpKTsKPj4+ICsKPj4+ICsJaWYgKHdyaXRlKGZkLCBoZWFk ZXIsIHNpemVvZihoZWFkZXIpKSAhPSBzaXplb2YoaGVhZGVyKSkgewo+Pj4gKwkJaWd0X3dhcm4o IndyaXRlIGZhaWxlZDogJXMnbiIsIHN0cmVycm9yKGVycm5vKSk7Cj4+PiArCQljbG9zZShmZCk7 Cj4+PiArCQlyZXR1cm4gLTE7Cj4+PiArCX0KPj4+ICsKPj4+ICsJcmV0dXJuIGZkOwo+Pj4gIH0K Pj4+IGRpZmYgLS1naXQgYS9saWIvaWd0X2F1ZGlvLmggYi9saWIvaWd0X2F1ZGlvLmgKPj4+IGlu ZGV4IGIzYjY1OGE0Li40YWE0M2U2OSAxMDA2NDQKPj4+IC0tLSBhL2xpYi9pZ3RfYXVkaW8uaAo+ Pj4gKysrIGIvbGliL2lndF9hdWRpby5oCj4+PiBAQCAtMzAsNiArMzAsNyBAQAo+Pj4gICNpbmNs dWRlICJjb25maWcuaCIKPj4+ICAKPj4+ICAjaW5jbHVkZSA8c3RkYm9vbC5oPgo+Pj4gKyNpbmNs dWRlIDxzdGRpbnQuaD4KPj4+ICAKPj4+ICBzdHJ1Y3QgYXVkaW9fc2lnbmFsOwo+Pj4gIAo+Pj4g QEAgLTM3LDggKzM4LDEzIEBAIHN0cnVjdCBhdWRpb19zaWduYWwgKmF1ZGlvX3NpZ25hbF9pbml0 KGludCBjaGFubmVscywgaW50IHNhbXBsaW5nX3JhdGUpOwo+Pj4gIGludCBhdWRpb19zaWduYWxf YWRkX2ZyZXF1ZW5jeShzdHJ1Y3QgYXVkaW9fc2lnbmFsICpzaWduYWwsIGludCBmcmVxdWVuY3kp Owo+Pj4gIHZvaWQgYXVkaW9fc2lnbmFsX3N5bnRoZXNpemUoc3RydWN0IGF1ZGlvX3NpZ25hbCAq c2lnbmFsKTsKPj4+ICB2b2lkIGF1ZGlvX3NpZ25hbF9jbGVhbihzdHJ1Y3QgYXVkaW9fc2lnbmFs ICpzaWduYWwpOwo+Pj4gLXZvaWQgYXVkaW9fc2lnbmFsX2ZpbGwoc3RydWN0IGF1ZGlvX3NpZ25h bCAqc2lnbmFsLCBzaG9ydCAqYnVmZmVyLCBpbnQgZnJhbWVzKTsKPj4+IC1ib29sIGF1ZGlvX3Np Z25hbF9kZXRlY3Qoc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsLCBpbnQgY2hhbm5lbHMsCj4+ PiAtCQkJIGludCBzYW1wbGluZ19yYXRlLCBzaG9ydCAqYnVmZmVyLCBpbnQgZnJhbWVzKTsKPj4+ ICt2b2lkIGF1ZGlvX3NpZ25hbF9maWxsKHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCwgaW50 MTZfdCAqYnVmZmVyLCBpbnQgZnJhbWVzKTsKPj4+ICtib29sIGF1ZGlvX3NpZ25hbF9kZXRlY3Qo c3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsLCBpbnQgc2FtcGxpbmdfcmF0ZSwKPj4+ICsJCQkg ZG91YmxlICpkYXRhLCBzaXplX3QgZGF0YV9sZW4pOwo+Pj4gK3NpemVfdCBhdWRpb19leHRyYWN0 X2NoYW5uZWxfczMyX2xlKGRvdWJsZSAqZHN0LCBzaXplX3QgZHN0X2NhcCwKPj4+ICsJCQkJICAg IGludDMyX3QgKnNyYywgc2l6ZV90IHNyY19sZW4sCj4+PiArCQkJCSAgICBpbnQgbl9jaGFubmVs cywgaW50IGNoYW5uZWwpOwo+Pj4gK2ludCBhdWRpb19jcmVhdGVfd2F2X2ZpbGVfczMyX2xlKGNv bnN0IGNoYXIgKnF1YWxpZmllciwgdWludDMyX3Qgc2FtcGxlX3JhdGUsCj4+PiArCQkJCSB1aW50 MTZfdCBjaGFubmVscywgY2hhciAqKnBhdGgpOwo+Pj4gIAo+Pj4gICNlbmRpZgo+Pj4gZGlmZiAt LWdpdCBhL2xpYi9pZ3RfYXV4LmMgYi9saWIvaWd0X2F1eC5jCj4+PiBpbmRleCAwNTUyODM1Mi4u OTVjZWI4NDUgMTAwNjQ0Cj4+PiAtLS0gYS9saWIvaWd0X2F1eC5jCj4+PiArKysgYi9saWIvaWd0 X2F1eC5jCj4+PiBAQCAtMTI1OSw2ICsxMjU5LDM3IEBAIHZvaWQgaWd0X3NldF9tb2R1bGVfcGFy YW1faW50KGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWwpCj4+PiAgCWlndF9zZXRfbW9kdWxlX3Bh cmFtKG5hbWUsIHN0cik7Cj4+PiAgfQo+Pj4gIAo+Pj4gKy8qKgo+Pj4gKyAqIGlndF9pc19wcm9j ZXNzX3J1bm5pbmc6Cj4+PiArICogQGNvbW06IE5hbWUgb2YgcHJvY2VzcyBpbiB0aGUgZm9ybSBm b3VuZCBpbiAvcHJvYy9waWQvY29tbSAobGltaXRlZCB0byAxNQo+Pj4gKyAqIGNoYXJzKQo+Pj4g KyAqCj4+PiArICogUmV0dXJuczogdHJ1ZSBpbiBjYXNlIHRoZSBwcm9jZXNzIGhhcyBiZWVuIGZv dW5kLCBmYWxzZSBvdGhlcndpc2UuCj4+PiArICoKPj4+ICsgKiBUaGlzIGZ1bmN0aW9uIGNoZWNr cyBpbiB0aGUgcHJvY2VzcyB0YWJsZSBmb3IgYW4gZW50cnkgd2l0aCB0aGUgbmFtZSBAY29tbS4K Pj4+ICsgKi8KPj4+ICtpbnQgaWd0X2lzX3Byb2Nlc3NfcnVubmluZyhjb25zdCBjaGFyICpjb21t KQo+Pj4gK3sKPj4+ICsJUFJPQ1RBQiAqcHJvYzsKPj4+ICsJcHJvY190ICpwcm9jX2luZm87Cj4+ PiArCWJvb2wgZm91bmQgPSBmYWxzZTsKPj4+ICsKPj4+ICsJcHJvYyA9IG9wZW5wcm9jKFBST0Nf RklMTENPTSB8IFBST0NfRklMTFNUQVQgfCBQUk9DX0ZJTExBUkcpOwo+Pgo+PiBTZWVtcyBsaWtl IHlvdSBjYW4gZHJvcCBGSUxMQVJHOgo+Pgo+PiBGcm9tIG1hbjoKPj4gICAgICAgIFBST0NfRklM TEFSRwo+PiAgICAgICAgICAgICBlcXVpdmFsZW50IHRvIFBST0NfRklMTENPTQo+IAo+IEdvb2Qg Y2F0Y2gKPiAKPj4+ICsJaWd0X2Fzc2VydChwcm9jICE9IE5VTEwpOwo+Pj4gKwo+Pj4gKwl3aGls ZSAoKHByb2NfaW5mbyA9IHJlYWRwcm9jKHByb2MsIE5VTEwpKSkgewo+Pj4gKwkJaWYgKCFzdHJu Y2FzZWNtcChwcm9jX2luZm8tPmNtZCwgY29tbSwgc2l6ZW9mKHByb2NfaW5mby0+Y21kKSkpIHsK Pj4+ICsJCQlmcmVlcHJvYyhwcm9jX2luZm8pOwo+Pj4gKwkJCWZvdW5kID0gdHJ1ZTsKPj4+ICsJ CQlicmVhazsKPj4+ICsJCX0KPj4+ICsJCWZyZWVwcm9jKHByb2NfaW5mbyk7Cj4+PiArCX0KPj4+ ICsKPj4+ICsJY2xvc2Vwcm9jKHByb2MpOwo+Pj4gKwlyZXR1cm4gZm91bmQ7Cj4+PiArfQo+Pj4g Kwo+Pj4gIC8qKgo+Pj4gICAqIGlndF90ZXJtaW5hdGVfcHJvY2VzczoKPj4+ICAgKiBAc2lnOiBT aWduYWwgdG8gc2VuZAo+Pj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3RfYXV4LmggYi9saWIvaWd0X2F1 eC5oCj4+PiBpbmRleCA1NTM5Mjc5MC4uZGJkODhiNjcgMTAwNjQ0Cj4+PiAtLS0gYS9saWIvaWd0 X2F1eC5oCj4+PiArKysgYi9saWIvaWd0X2F1eC5oCj4+PiBAQCAtMjc5LDYgKzI3OSw3IEBAIGJv b2wgaWd0X2FsbG93X3VubGltaXRlZF9maWxlcyh2b2lkKTsKPj4+ICB2b2lkIGlndF9zZXRfbW9k dWxlX3BhcmFtKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbCk7Cj4+PiAgdm9pZCBp Z3Rfc2V0X21vZHVsZV9wYXJhbV9pbnQoY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbCk7Cj4+PiAg Cj4+PiAraW50IGlndF9pc19wcm9jZXNzX3J1bm5pbmcoY29uc3QgY2hhciAqY29tbSk7Cj4+PiAg aW50IGlndF90ZXJtaW5hdGVfcHJvY2VzcyhpbnQgc2lnLCBjb25zdCBjaGFyICpjb21tKTsKPj4+ ICB2b2lkIGlndF9sc29mKGNvbnN0IGNoYXIgKmRwYXRoKTsKPj4+ICAKPj4+IGRpZmYgLS1naXQg YS9saWIvaWd0X2NoYW1lbGl1bS5jIGIvbGliL2lndF9jaGFtZWxpdW0uYwo+Pj4gaW5kZXggMDJj YzliMmMuLjdjOTAzMGQxIDEwMDY0NAo+Pj4gLS0tIGEvbGliL2lndF9jaGFtZWxpdW0uYwo+Pj4g KysrIGIvbGliL2lndF9jaGFtZWxpdW0uYwo+Pj4gQEAgLTIxOCw2ICsyMTgsMTIgQEAgdm9pZCBj aGFtZWxpdW1fZGVzdHJveV9mcmFtZV9kdW1wKHN0cnVjdCBjaGFtZWxpdW1fZnJhbWVfZHVtcCAq ZHVtcCkKPj4+ICAJZnJlZShkdW1wKTsKPj4+ICB9Cj4+PiAgCj4+PiArdm9pZCBjaGFtZWxpdW1f ZGVzdHJveV9hdWRpb19maWxlKHN0cnVjdCBjaGFtZWxpdW1fYXVkaW9fZmlsZSAqYXVkaW9fZmls ZSkKPj4+ICt7Cj4+PiArCWZyZWUoYXVkaW9fZmlsZS0+cGF0aCk7Cj4+PiArCWZyZWUoYXVkaW9f ZmlsZSk7Cj4+PiArfQo+Pj4gKwo+Pj4gIHN0cnVjdCBmc21fbW9uaXRvcl9hcmdzIHsKPj4+ICAJ c3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtOwo+Pj4gIAlzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQg KnBvcnQ7Cj4+PiBAQCAtOTI0LDYgKzkzMCwxMDEgQEAgaW50IGNoYW1lbGl1bV9nZXRfY2FwdHVy ZWRfZnJhbWVfY291bnQoc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtKQo+Pj4gIAlyZXR1cm4g cmV0Owo+Pj4gIH0KPj4+ICAKPj4+ICsvKioKPj4+ICsgKiBjaGFtZWxpdW1fc3RhcnRfY2FwdHVy aW5nX2F1ZGlvOgo+Pj4gKyAqIEBjaGFtZWxpdW06IHRoZSBDaGFtZWxpdW0gaW5zdGFuY2UKPj4+ ICsgKiBAcG9ydDogdGhlIHBvcnQgdG8gY2FwdHVyZSBhdWRpbyBmcm9tIChpdCBtdXN0IHN1cHBv cnQgYXVkaW8pCj4+PiArICogQHNhdmVfdG9fZmlsZTogd2hldGhlciB0aGUgY2FwdHVyZWQgYXVk aW8gZGF0YSBzaG91bGQgYmUgc2F2ZWQgdG8gYSBmaWxlIG9uCj4+PiArICogdGhlIENoYW1lbGl1 bSBkZXZpY2UKPj4+ICsgKgo+Pj4gKyAqIFN0YXJ0cyBjYXB0dXJpbmcgYXVkaW8gZnJvbSBhIENo YW1lbGl1bSBwb3J0LiBUbyBzdG9wIHRoZSBjYXB0dXJlLCB1c2UKPj4+ICsgKiAjY2hhbWVsaXVt X3N0b3BfY2FwdHVyaW5nX2F1ZGlvLiBUbyByZXRyaWV2ZSB0aGUgYXVkaW8gZGF0YSwgZWl0aGVy IHVzZSB0aGUKPj4+ICsgKiBzdHJlYW0gc2VydmVyIG9yIGVuYWJsZSBAc2F2ZV90b19maWxlICh0 aGUgbGF0dGVyIGlzIG1haW5seSB1c2VmdWwgZm9yCj4+PiArICogZGVidWdnaW5nIHB1cnBvc2Vz KS4KPj4+ICsgKgo+Pj4gKyAqIEl0IGlzbid0IHBvc3NpYmxlIHRvIGNhcHR1cmUgYXVkaW8gZnJv bSBtdWx0aXBsZSBwb3J0cyBhdCB0aGUgc2FtZSB0aW1lLgo+Pj4gKyAqLwo+Pj4gK3ZvaWQgY2hh bWVsaXVtX3N0YXJ0X2NhcHR1cmluZ19hdWRpbyhzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW0s Cj4+PiArCQkJCSAgICBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQsCj4+PiArCQkJCSAgICBi b29sIHNhdmVfdG9fZmlsZSkKPj4+ICt7Cj4+PiArCXhtbHJwY192YWx1ZSAqcmVzOwo+Pj4gKwo+ Pj4gKwlyZXMgPSBjaGFtZWxpdW1fcnBjKGNoYW1lbGl1bSwgcG9ydCwgIlN0YXJ0Q2FwdHVyaW5n QXVkaW8iLCAiKGliKSIsCj4+PiArCQkJICAgIHBvcnQtPmlkLCBzYXZlX3RvX2ZpbGUpOwo+Pj4g Kwl4bWxycGNfREVDUkVGKHJlcyk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIGF1ZGlv X2Zvcm1hdF9mcm9tX3htbChzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW0sCj4+PiArCQkJCSAg eG1scnBjX3ZhbHVlICpyZXMsIGludCAqcmF0ZSwgaW50ICpjaGFubmVscykKPj4+ICt7Cj4+PiAr CXhtbHJwY192YWx1ZSAqcmVzX3R5cGUsICpyZXNfcmF0ZSwgKnJlc19zYW1wbGVfZm9ybWF0LCAq cmVzX2NoYW5uZWw7Cj4+PiArCWNoYXIgKnR5cGUsICpzYW1wbGVfZm9ybWF0Owo+Pj4gKwo+Pj4g Kwl4bWxycGNfc3RydWN0X2ZpbmRfdmFsdWUoJmNoYW1lbGl1bS0+ZW52LCByZXMsICJmaWxlX3R5 cGUiLCAmcmVzX3R5cGUpOwo+Pj4gKwl4bWxycGNfc3RydWN0X2ZpbmRfdmFsdWUoJmNoYW1lbGl1 bS0+ZW52LCByZXMsICJyYXRlIiwgJnJlc19yYXRlKTsKPj4+ICsJeG1scnBjX3N0cnVjdF9maW5k X3ZhbHVlKCZjaGFtZWxpdW0tPmVudiwgcmVzLCAic2FtcGxlX2Zvcm1hdCIsICZyZXNfc2FtcGxl X2Zvcm1hdCk7Cj4+PiArCXhtbHJwY19zdHJ1Y3RfZmluZF92YWx1ZSgmY2hhbWVsaXVtLT5lbnYs IHJlcywgImNoYW5uZWwiLCAmcmVzX2NoYW5uZWwpOwo+Pj4gKwo+Pj4gKwl4bWxycGNfcmVhZF9z dHJpbmcoJmNoYW1lbGl1bS0+ZW52LCByZXNfdHlwZSwgKGNvbnN0IGNoYXIgKiopICZ0eXBlKTsK Pj4+ICsJaWd0X2Fzc2VydChzdHJjbXAodHlwZSwgInJhdyIpID09IDApOwo+Pj4gKwlmcmVlKHR5 cGUpOwo+Pj4gKwo+Pj4gKwl4bWxycGNfcmVhZF9zdHJpbmcoJmNoYW1lbGl1bS0+ZW52LCByZXNf c2FtcGxlX2Zvcm1hdCwgKGNvbnN0IGNoYXIgKiopICZzYW1wbGVfZm9ybWF0KTsKPj4+ICsJaWd0 X2Fzc2VydChzdHJjbXAoc2FtcGxlX2Zvcm1hdCwgIlMzMl9MRSIpID09IDApOwo+Pj4gKwlmcmVl KHNhbXBsZV9mb3JtYXQpOwo+Pj4gKwo+Pj4gKwl4bWxycGNfcmVhZF9pbnQoJmNoYW1lbGl1bS0+ ZW52LCByZXNfcmF0ZSwgcmF0ZSk7Cj4+PiArCXhtbHJwY19yZWFkX2ludCgmY2hhbWVsaXVtLT5l bnYsIHJlc19jaGFubmVsLCBjaGFubmVscyk7Cj4+PiArCj4+PiArCXhtbHJwY19ERUNSRUYocmVz X2NoYW5uZWwpOwo+Pj4gKwl4bWxycGNfREVDUkVGKHJlc19zYW1wbGVfZm9ybWF0KTsKPj4+ICsJ eG1scnBjX0RFQ1JFRihyZXNfcmF0ZSk7Cj4+PiArCXhtbHJwY19ERUNSRUYocmVzX3R5cGUpOwo+ Pj4gK30KPj4+ICsKPj4+ICsvKioKPj4+ICsgKiBjaGFtZWxpdW1fc3RvcF9jYXB0dXJpbmdfYXVk aW86Cj4+PiArICogQGNoYW1lbGl1bTogdGhlIENoYW1lbGl1bSBpbnN0YW5jZQo+Pj4gKyAqIEBw b3J0OiB0aGUgcG9ydCBmcm9tIHdoaWNoIGF1ZGlvIGlzIGJlaW5nIGNhcHR1cmVkCj4+PiArICoK Pj4+ICsgKiBTdG9wcyBjYXB0dXJpbmcgYXVkaW8gZnJvbSBhIENoYW1lbGl1bSBwb3J0LiBJZgo+ Pj4gKyAqICNjaGFtZWxpdW1fc3RhcnRfY2FwdHVyaW5nX2F1ZGlvIGhhcyBiZWVuIGNhbGxlZCB3 aXRoIEBzYXZlX3RvX2ZpbGUgZW5hYmxlZCwKPj4+ICsgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0 dXJuIGEgI2NoYW1lbGl1bV9hdWRpb19maWxlIHN0cnVjdCBjb250YWluaW5nIGRldGFpbHMKPj4+ ICsgKiBhYm91dCB0aGUgYXVkaW8gZmlsZS4gT25jZSB0aGUgY2FsbGVyIGlzIGRvbmUgd2l0aCB0 aGUgc3RydWN0LCB0aGV5IHNob3VsZAo+Pj4gKyAqIHJlbGVhc2UgaXQgd2l0aCAjY2hhbWVsaXVt X2Rlc3Ryb3lfYXVkaW9fZmlsZS4KPj4+ICsgKi8KPj4+ICtzdHJ1Y3QgY2hhbWVsaXVtX2F1ZGlv X2ZpbGUgKmNoYW1lbGl1bV9zdG9wX2NhcHR1cmluZ19hdWRpbyhzdHJ1Y3QgY2hhbWVsaXVtICpj aGFtZWxpdW0sCj4+PiArCQkJCQkJCSAgICBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQpCj4+ PiArewo+Pj4gKwl4bWxycGNfdmFsdWUgKnJlcywgKnJlc19wYXRoLCAqcmVzX3Byb3BzOwo+Pj4g KwlzdHJ1Y3QgY2hhbWVsaXVtX2F1ZGlvX2ZpbGUgKmZpbGUgPSBOVUxMOwo+Pj4gKwljaGFyICpw YXRoOwo+Pj4gKwo+Pj4gKwlyZXMgPSBjaGFtZWxpdW1fcnBjKGNoYW1lbGl1bSwgTlVMTCwgIlN0 b3BDYXB0dXJpbmdBdWRpbyIsICIoaSkiLAo+Pj4gKwkJCSAgICBwb3J0LT5pZCk7Cj4+PiArCXht bHJwY19hcnJheV9yZWFkX2l0ZW0oJmNoYW1lbGl1bS0+ZW52LCByZXMsIDAsICZyZXNfcGF0aCk7 Cj4+PiArCXhtbHJwY19hcnJheV9yZWFkX2l0ZW0oJmNoYW1lbGl1bS0+ZW52LCByZXMsIDEsICZy ZXNfcHJvcHMpOwo+Pj4gKwo+Pj4gKwl4bWxycGNfcmVhZF9zdHJpbmcoJmNoYW1lbGl1bS0+ZW52 LCByZXNfcGF0aCwgKGNvbnN0IGNoYXIgKiopICZwYXRoKTsKPj4+ICsKPj4+ICsJaWYgKHN0cmxl bihwYXRoKSA+IDApIHsKPj4+ICsJCWZpbGUgPSBjYWxsb2MoMSwgc2l6ZW9mKCpmaWxlKSk7Cj4+ PiArCQlmaWxlLT5wYXRoID0gcGF0aDsKPj4+ICsKPj4+ICsJCWF1ZGlvX2Zvcm1hdF9mcm9tX3ht bChjaGFtZWxpdW0sIHJlc19wcm9wcywKPj4+ICsJCQkJICAgICAgJmZpbGUtPnJhdGUsICZmaWxl LT5jaGFubmVscyk7Cj4+PiArCX0gZWxzZSB7Cj4+PiArCQlmcmVlKHBhdGgpOwo+Pj4gKwl9Cj4+ PiArCj4+PiArCXhtbHJwY19ERUNSRUYocmVzX3Byb3BzKTsKPj4+ICsJeG1scnBjX0RFQ1JFRihy ZXNfcGF0aCk7Cj4+PiArCXhtbHJwY19ERUNSRUYocmVzKTsKPj4+ICsKPj4+ICsJcmV0dXJuIGZp bGU7Cj4+PiArfQo+Pj4gKwo+Pj4gIHN0YXRpYyBwaXhtYW5faW1hZ2VfdCAqY29udmVydF9mcmFt ZV9mb3JtYXQocGl4bWFuX2ltYWdlX3QgKnNyYywKPj4+ICAJCQkJCSAgICBpbnQgZm9ybWF0KQo+ Pj4gIHsKPj4+IGRpZmYgLS1naXQgYS9saWIvaWd0X2NoYW1lbGl1bS5oIGIvbGliL2lndF9jaGFt ZWxpdW0uaAo+Pj4gaW5kZXggMjMzZWFkODUuLjA0N2Y4YzVkIDEwMDY0NAo+Pj4gLS0tIGEvbGli L2lndF9jaGFtZWxpdW0uaAo+Pj4gKysrIGIvbGliL2lndF9jaGFtZWxpdW0uaAo+Pj4gQEAgLTUz LDYgKzUzLDEyIEBAIGVudW0gY2hhbWVsaXVtX2NoZWNrIHsKPj4+ICAJQ0hBTUVMSVVNX0NIRUNL X0NSQywKPj4+ICB9Owo+Pj4gIAo+Pj4gK3N0cnVjdCBjaGFtZWxpdW1fYXVkaW9fZmlsZSB7Cj4+ PiArCWNoYXIgKnBhdGg7Cj4+PiArCWludCByYXRlOyAvKiBIeiAqLwo+Pj4gKwlpbnQgY2hhbm5l bHM7Cj4+PiArfTsKPj4+ICsKPj4+ICBzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW1faW5pdChp bnQgZHJtX2ZkKTsKPj4+ICB2b2lkIGNoYW1lbGl1bV9kZWluaXQoc3RydWN0IGNoYW1lbGl1bSAq Y2hhbWVsaXVtKTsKPj4+ICB2b2lkIGNoYW1lbGl1bV9yZXNldChzdHJ1Y3QgY2hhbWVsaXVtICpj aGFtZWxpdW0pOwo+Pj4gQEAgLTEwMCw2ICsxMDYsMTAgQEAgdm9pZCBjaGFtZWxpdW1fc3RhcnRf Y2FwdHVyZShzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW0sCj4+PiAgdm9pZCBjaGFtZWxpdW1f c3RvcF9jYXB0dXJlKHN0cnVjdCBjaGFtZWxpdW0gKmNoYW1lbGl1bSwgaW50IGZyYW1lX2NvdW50 KTsKPj4+ICB2b2lkIGNoYW1lbGl1bV9jYXB0dXJlKHN0cnVjdCBjaGFtZWxpdW0gKmNoYW1lbGl1 bSwgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0LAo+Pj4gIAkJICAgICAgIGludCB4LCBpbnQg eSwgaW50IHcsIGludCBoLCBpbnQgZnJhbWVfY291bnQpOwo+Pj4gK3ZvaWQgY2hhbWVsaXVtX3N0 YXJ0X2NhcHR1cmluZ19hdWRpbyhzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW0sCj4+PiArCQkJ CSAgICBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQsIGJvb2wgc2F2ZV90b19maWxlKTsKPj4+ ICtzdHJ1Y3QgY2hhbWVsaXVtX2F1ZGlvX2ZpbGUgKmNoYW1lbGl1bV9zdG9wX2NhcHR1cmluZ19h dWRpbyhzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW0sCj4+PiArCQkJCQkJCSAgICBzdHJ1Y3Qg Y2hhbWVsaXVtX3BvcnQgKnBvcnQpOwo+Pj4gIGlndF9jcmNfdCAqY2hhbWVsaXVtX3JlYWRfY2Fw dHVyZWRfY3JjcyhzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW0sCj4+PiAgCQkJCQlpbnQgKmZy YW1lX2NvdW50KTsKPj4+ICBzdHJ1Y3QgY2hhbWVsaXVtX2ZyYW1lX2R1bXAgKmNoYW1lbGl1bV9y ZWFkX2NhcHR1cmVkX2ZyYW1lKHN0cnVjdCBjaGFtZWxpdW0gKmNoYW1lbGl1bSwKPj4+IEBAIC0x MzEsNSArMTQxLDYgQEAgdm9pZCBjaGFtZWxpdW1fYXNzZXJ0X2ZyYW1lX21hdGNoX29yX2R1bXAo c3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtLAo+Pj4gIHZvaWQgY2hhbWVsaXVtX2Nyb3BfYW5h bG9nX2ZyYW1lKHN0cnVjdCBjaGFtZWxpdW1fZnJhbWVfZHVtcCAqZHVtcCwgaW50IHdpZHRoLAo+ Pj4gIAkJCQkgaW50IGhlaWdodCk7Cj4+PiAgdm9pZCBjaGFtZWxpdW1fZGVzdHJveV9mcmFtZV9k dW1wKHN0cnVjdCBjaGFtZWxpdW1fZnJhbWVfZHVtcCAqZHVtcCk7Cj4+PiArdm9pZCBjaGFtZWxp dW1fZGVzdHJveV9hdWRpb19maWxlKHN0cnVjdCBjaGFtZWxpdW1fYXVkaW9fZmlsZSAqYXVkaW9f ZmlsZSk7Cj4+PiAgCj4+PiAgI2VuZGlmIC8qIElHVF9DSEFNRUxJVU1fSCAqLwo+Pj4gZGlmZiAt LWdpdCBhL2xpYi9pZ3RfY2hhbWVsaXVtX3N0cmVhbS5jIGIvbGliL2lndF9jaGFtZWxpdW1fc3Ry ZWFtLmMKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAwMC4uOWUxYmEx Y2EKPj4+IC0tLSAvZGV2L251bGwKPj4+ICsrKyBiL2xpYi9pZ3RfY2hhbWVsaXVtX3N0cmVhbS5j Cj4+PiBAQCAtMCwwICsxLDU5MiBAQAo+Pj4gKy8qCj4+PiArICogQ29weXJpZ2h0IMKpIDIwMTkg SW50ZWwgQ29ycG9yYXRpb24KPj4+ICsgKgo+Pj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4+PiArICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKPj4+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4+PiArICogdGhlIHJp Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsCj4+PiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4+PiArICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPj4+ICsg Kgo+Pj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPj4+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4+PiAr ICogU29mdHdhcmUuCj4+PiArICoKPj4+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+Pj4gKyAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZLAo+Pj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+Pj4gKyAqIFRIRSBBVVRIT1JT IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S IE9USEVSCj4+PiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPj4+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT Cj4+PiArICogSU4gVEhFIFNPRlRXQVJFLgo+Pj4gKyAqCj4+PiArICogQXV0aG9yczogU2ltb24g U2VyIDxzaW1vbi5zZXJAaW50ZWwuY29tPgo+Pj4gKyAqLwo+Pj4gKwo+Pj4gKyNpbmNsdWRlICJj b25maWcuaCIKPj4+ICsKPj4+ICsjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Cj4+PiArI2luY2x1ZGUg PGVycm5vLmg+Cj4+PiArI2luY2x1ZGUgPG5ldGRiLmg+Cj4+PiArI2luY2x1ZGUgPHN0ZGJvb2wu aD4KPj4+ICsjaW5jbHVkZSA8c3RkbGliLmg+Cj4+PiArI2luY2x1ZGUgPHN5cy90eXBlcy5oPgo+ Pj4gKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Cj4+PiArCj4+PiArI2luY2x1ZGUgImlndF9jaGFt ZWxpdW1fc3RyZWFtLmgiCj4+PiArI2luY2x1ZGUgImlndF9jb3JlLmgiCj4+PiArI2luY2x1ZGUg ImlndF9yYy5oIgo+Pj4gKwo+Pj4gKyNkZWZpbmUgU1RSRUFNX1BPUlQgOTk5NAo+Pj4gKyNkZWZp bmUgU1RSRUFNX1ZFUlNJT05fTUFKT1IgMQo+Pj4gKyNkZWZpbmUgU1RSRUFNX1ZFUlNJT05fTUlO T1IgMAo+Pj4gKwo+Pj4gK2VudW0gc3RyZWFtX2Vycm9yIHsKPj4+ICsJU1RSRUFNX0VSUk9SX05P TkUgPSAwLAo+Pj4gKwlTVFJFQU1fRVJST1JfQ09NTUFORCA9IDEsCj4+PiArCVNUUkVBTV9FUlJP Ul9BUkdVTUVOVCA9IDIsCj4+PiArCVNUUkVBTV9FUlJPUl9FWElTVFMgPSAzLAo+Pj4gKwlTVFJF QU1fRVJST1JfVklERU9fTUVNX09WRVJGTE9XX1NUT1AgPSA0LAo+Pj4gKwlTVFJFQU1fRVJST1Jf VklERU9fTUVNX09WRVJGTE9XX0RST1AgPSA1LAo+Pj4gKwlTVFJFQU1fRVJST1JfQVVESU9fTUVN X09WRVJGTE9XX1NUT1AgPSA2LAo+Pj4gKwlTVFJFQU1fRVJST1JfQVVESU9fTUVNX09WRVJGTE9X X0RST1AgPSA3LAo+Pj4gKwlTVFJFQU1fRVJST1JfTk9fTUVNID0gOCwKPj4+ICt9Owo+Pj4gKwo+ Pj4gK2VudW0gc3RyZWFtX21lc3NhZ2Vfa2luZCB7Cj4+PiArCVNUUkVBTV9NRVNTQUdFX1JFUVVF U1QgPSAwLAo+Pj4gKwlTVFJFQU1fTUVTU0FHRV9SRVNQT05TRSA9IDEsCj4+PiArCVNUUkVBTV9N RVNTQUdFX0RBVEEgPSAyLAo+Pj4gK307Cj4+PiArCj4+PiArZW51bSBzdHJlYW1fbWVzc2FnZV90 eXBlIHsKPj4+ICsJU1RSRUFNX01FU1NBR0VfUkVTRVQgPSAwLAo+Pj4gKwlTVFJFQU1fTUVTU0FH RV9HRVRfVkVSU0lPTiA9IDEsCj4+PiArCVNUUkVBTV9NRVNTQUdFX1ZJREVPX1NUUkVBTSA9IDIs Cj4+PiArCVNUUkVBTV9NRVNTQUdFX1NIUklOS19WSURFTyA9IDMsCj4+PiArCVNUUkVBTV9NRVNT QUdFX1ZJREVPX0ZSQU1FID0gNCwKPj4+ICsJU1RSRUFNX01FU1NBR0VfRFVNUF9SRUFMVElNRV9W SURFTyA9IDUsCj4+PiArCVNUUkVBTV9NRVNTQUdFX1NUT1BfRFVNUF9WSURFTyA9IDYsCj4+PiAr CVNUUkVBTV9NRVNTQUdFX0RVTVBfUkVBTFRJTUVfQVVESU8gPSA3LAo+Pj4gKwlTVFJFQU1fTUVT U0FHRV9TVE9QX0RVTVBfQVVESU8gPSA4LAo+Pj4gK307Cj4+PiArCj4+PiArc3RydWN0IGNoYW1l bGl1bV9zdHJlYW0gewo+Pj4gKwljaGFyICpob3N0Owo+Pj4gKwl1bnNpZ25lZCBpbnQgcG9ydDsK Pj4+ICsKPj4+ICsJaW50IGZkOwo+Pj4gK307Cj4+PiArCj4+PiArc3RhdGljIGNvbnN0IGNoYXIg KnN0cmVhbV9lcnJvcl9zdHIoZW51bSBzdHJlYW1fZXJyb3IgZXJyKQo+Pj4gK3sKPj4+ICsJc3dp dGNoIChlcnIpIHsKPj4+ICsJY2FzZSBTVFJFQU1fRVJST1JfTk9ORToKPj4+ICsJCXJldHVybiAi bm8gZXJyb3IiOwo+Pj4gKwljYXNlIFNUUkVBTV9FUlJPUl9DT01NQU5EOgo+Pj4gKwkJcmV0dXJu ICJpbnZhbGlkIGNvbW1hbmQiOwo+Pj4gKwljYXNlIFNUUkVBTV9FUlJPUl9BUkdVTUVOVDoKPj4+ ICsJCXJldHVybiAiaW52YWxpZCBhcmd1bWVudHMiOwo+Pj4gKwljYXNlIFNUUkVBTV9FUlJPUl9F WElTVFM6Cj4+PiArCQlyZXR1cm4gImR1bXAgYWxyZWFkeSBzdGFydGVkIjsKPj4+ICsJY2FzZSBT VFJFQU1fRVJST1JfVklERU9fTUVNX09WRVJGTE9XX1NUT1A6Cj4+PiArCQlyZXR1cm4gInZpZGVv IGR1bXAgc3RvcHBlZCBhZnRlciBvdmVyZmxvdyI7Cj4+PiArCWNhc2UgU1RSRUFNX0VSUk9SX1ZJ REVPX01FTV9PVkVSRkxPV19EUk9QOgo+Pj4gKwkJcmV0dXJuICJ2aWRlbyBmcmFtZSBkcm9wcGVk IGFmdGVyIG92ZXJmbG93IjsKPj4+ICsJY2FzZSBTVFJFQU1fRVJST1JfQVVESU9fTUVNX09WRVJG TE9XX1NUT1A6Cj4+PiArCQlyZXR1cm4gImF1ZGlvIGR1bXAgc3RvcHByZWQgYWZ0ZXIgb3ZlcmZs b3ciOwo+Pj4gKwljYXNlIFNUUkVBTV9FUlJPUl9BVURJT19NRU1fT1ZFUkZMT1dfRFJPUDoKPj4+ ICsJCXJldHVybiAiYXVkaW8gcGFnZSBkcm9wcGVkIGFmdGVyIG92ZXJmbG93IjsKPj4+ICsJY2Fz ZSBTVFJFQU1fRVJST1JfTk9fTUVNOgo+Pj4gKwkJcmV0dXJuICJvdXQgb2YgbWVtb3J5IjsKPj4+ ICsJfQo+Pj4gKwlyZXR1cm4gInVua25vd24gZXJyb3IiOwo+Pj4gK30KPj4+ICsKPj4+ICsvKioK Pj4+ICsgKiBUaGUgQ2hhbWVsaXVtIFVSTCBpcyBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRp b24gZmlsZS4gV2UgbmVlZCB0byBleHRyYWN0Cj4+PiArICogdGhlIGhvc3QgdG8gY29ubmVjdCB0 byB0aGUgc3RyZWFtIHNlcnZlci4KPj4+ICsgKi8KPj4+ICtzdGF0aWMgY2hhciAqcGFyc2VfdXJs X2hvc3QoY29uc3QgY2hhciAqdXJsKQo+Pj4gK3sKPj4+ICsJc3RhdGljIGNvbnN0IGNoYXIgcHJl Zml4W10gPSAiaHR0cDovLyI7Cj4+PiArCWNoYXIgKmNvbG9uOwo+Pj4gKwo+Pj4gKwlpZiAoc3Ry c3RyKHVybCwgcHJlZml4KSAhPSB1cmwpCj4+PiArCQlyZXR1cm4gTlVMTDsKPj4+ICsJdXJsICs9 IHN0cmxlbihwcmVmaXgpOwo+Pj4gKwo+Pj4gKwljb2xvbiA9IHN0cmNocih1cmwsICc6Jyk7Cj4+ PiArCWlmICghY29sb24pCj4+PiArCQlyZXR1cm4gTlVMTDsKPj4+ICsKPj4+ICsJcmV0dXJuIHN0 cm5kdXAodXJsLCBjb2xvbiAtIHVybCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBib29sIGNo YW1lbGl1bV9zdHJlYW1fcmVhZF9jb25maWcoc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVu dCkKPj4+ICt7Cj4+PiArCUdFcnJvciAqZXJyb3IgPSBOVUxMOwo+Pj4gKwlnY2hhciAqY2hhbWVs aXVtX3VybDsKPj4+ICsKPj4+ICsJaWYgKCFpZ3Rfa2V5X2ZpbGUpIHsKPj4+ICsJCWlndF93YXJu KCJObyBjb25maWd1cmF0aW9uIGZpbGUgYXZhaWxhYmxlIGZvciBjaGFtZWxpdW1cbiIpOwo+Pj4g KwkJcmV0dXJuIGZhbHNlOwo+Pj4gKwl9Cj4+PiArCj4+PiArCWNoYW1lbGl1bV91cmwgPSBnX2tl eV9maWxlX2dldF9zdHJpbmcoaWd0X2tleV9maWxlLCAiQ2hhbWVsaXVtIiwgIlVSTCIsCj4+PiAr CQkJCQkgICAgICAmZXJyb3IpOwo+Pj4gKwlpZiAoIWNoYW1lbGl1bV91cmwpIHsKPj4+ICsJCWln dF93YXJuKCJDb3VsZG4ndCByZWFkIENoYW1lbGl1bSBVUkwgZnJvbSBjb25maWcgZmlsZTogJXNc biIsCj4+PiArCQkJIGVycm9yLT5tZXNzYWdlKTsKPj4+ICsJCXJldHVybiBmYWxzZTsKPj4+ICsJ fQo+Pj4gKwo+Pj4gKwljbGllbnQtPmhvc3QgPSBwYXJzZV91cmxfaG9zdChjaGFtZWxpdW1fdXJs KTsKPj4+ICsJaWYgKCFjbGllbnQtPmhvc3QpIHsKPj4+ICsJCWlndF93YXJuKCJJbnZhbGlkIENo YW1lbGl1bSBVUkwgaW4gY29uZmlnIGZpbGU6ICVzXG4iLAo+Pj4gKwkJCSBjaGFtZWxpdW1fdXJs KTsKPj4+ICsJCXJldHVybiBmYWxzZTsKPj4+ICsJfQo+Pj4gKwljbGllbnQtPnBvcnQgPSBTVFJF QU1fUE9SVDsKPj4+ICsKPj4+ICsJcmV0dXJuIHRydWU7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRp YyBib29sIGNoYW1lbGl1bV9zdHJlYW1fY29ubmVjdChzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAq Y2xpZW50KQo+Pj4gK3sKPj4+ICsJaW50IHJldDsKPj4+ICsJY2hhciBwb3J0X3N0clsxNl07Cj4+ PiArCXN0cnVjdCBhZGRyaW5mbyBoaW50cyA9IHt9Owo+Pj4gKwlzdHJ1Y3QgYWRkcmluZm8gKnJl c3VsdHMsICphaTsKPj4+ICsJc3RydWN0IHRpbWV2YWwgdHYgPSB7fTsKPj4+ICsKPj4+ICsJaWd0 X2RlYnVnKCJDb25uZWN0aW5nIHRvIENoYW1lbGl1bSBzdHJlYW0gc2VydmVyOiB0Y3A6Ly8lczol dVxuIiwKPj4+ICsJCSAgY2xpZW50LT5ob3N0LCBjbGllbnQtPnBvcnQpOwo+Pj4gKwo+Pj4gKwlz bnByaW50Zihwb3J0X3N0ciwgc2l6ZW9mKHBvcnRfc3RyKSwgIiV1IiwgY2xpZW50LT5wb3J0KTsK Pj4+ICsKPj4+ICsJaGludHMuYWlfZmFtaWx5ID0gQUZfVU5TUEVDOwo+Pj4gKwloaW50cy5haV9z b2NrdHlwZSA9IFNPQ0tfU1RSRUFNOwo+Pj4gKwlyZXQgPSBnZXRhZGRyaW5mbyhjbGllbnQtPmhv c3QsIHBvcnRfc3RyLCAmaGludHMsICZyZXN1bHRzKTsKPj4+ICsJaWYgKHJldCAhPSAwKSB7Cj4+ PiArCQlpZ3Rfd2FybigiZ2V0YWRkcmluZm8gZmFpbGVkOiAlc1xuIiwgZ2FpX3N0cmVycm9yKHJl dCkpOwo+Pj4gKwkJcmV0dXJuIGZhbHNlOwo+Pj4gKwl9Cj4+PiArCj4+PiArCWNsaWVudC0+ZmQg PSAtMTsKPj4+ICsJZm9yIChhaSA9IHJlc3VsdHM7IGFpICE9IE5VTEw7IGFpID0gYWktPmFpX25l eHQpIHsKPj4+ICsJCWNsaWVudC0+ZmQgPSBzb2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3Nv Y2t0eXBlLAo+Pj4gKwkJCQkgICAgYWktPmFpX3Byb3RvY29sKTsKPj4+ICsJCWlmIChjbGllbnQt PmZkID09IC0xKQo+Pj4gKwkJCWNvbnRpbnVlOwo+Pj4gKwo+Pj4gKwkJaWYgKGNvbm5lY3QoY2xp ZW50LT5mZCwgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKSA9PSAtMSkgewo+Pj4gKwkJCWNs b3NlKGNsaWVudC0+ZmQpOwo+Pj4gKwkJCWNsaWVudC0+ZmQgPSAtMTsKPj4+ICsJCQljb250aW51 ZTsKPj4+ICsJCX0KPj4+ICsKPj4+ICsJCWJyZWFrOwo+Pj4gKwl9Cj4+PiArCj4+PiArCWZyZWVh ZGRyaW5mbyhyZXN1bHRzKTsKPj4+ICsKPj4+ICsJaWYgKGNsaWVudC0+ZmQgPCAwKSB7Cj4+PiAr CQlpZ3Rfd2FybigiRmFpbGVkIHRvIGNvbm5lY3QgdG8gQ2hhbWVsaXVtIHN0cmVhbSBzZXJ2ZXJc biIpOwo+Pj4gKwkJcmV0dXJuIGZhbHNlOwo+Pj4gKwl9Cj4+PiArCj4+PiArCS8qIFNldCBhIHJl YWQgYW5kIHdyaXRlIHRpbWVvdXQgb2YgNSBzZWNvbmRzLiAqLwo+Pj4gKwl0di50dl9zZWMgPSA1 Owo+Pj4gKwlzZXRzb2Nrb3B0KGNsaWVudC0+ZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCAm dHYsIHNpemVvZih0dikpOwo+Pj4gKwlzZXRzb2Nrb3B0KGNsaWVudC0+ZmQsIFNPTF9TT0NLRVQs IFNPX1NORFRJTUVPLCAmdHYsIHNpemVvZih0dikpOwo+Pj4gKwo+Pj4gKwlyZXR1cm4gdHJ1ZTsK Pj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGJvb2wgcmVhZF93aG9sZShpbnQgZmQsIHZvaWQgKmJ1 Ziwgc2l6ZV90IGJ1Zl9sZW4pCj4+PiArewo+Pj4gKwlzc2l6ZV90IHJldDsKPj4+ICsJc2l6ZV90 IG4gPSAwOwo+Pj4gKwljaGFyICpwdHI7Cj4+PiArCj4+PiArCXdoaWxlIChuIDwgYnVmX2xlbikg ewo+Pj4gKwkJcHRyID0gKGNoYXIgKikgYnVmICsgbjsKPj4+ICsJCXJldCA9IHJlYWQoZmQsIHB0 ciwgYnVmX2xlbiAtIG4pOwo+Pj4gKwkJaWYgKHJldCA8IDApIHsKPj4+ICsJCQlpZ3Rfd2Fybigi cmVhZCBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwo+Pj4gKwkJCXJldHVybiBmYWxz ZTsKPj4+ICsJCX0gZWxzZSBpZiAocmV0ID09IDApIHsKPj4+ICsJCQlpZ3Rfd2Fybigic2hvcnQg cmVhZFxuIik7Cj4+PiArCQkJcmV0dXJuIGZhbHNlOwo+Pj4gKwkJfQo+Pj4gKwkJbiArPSByZXQ7 Cj4+PiArCX0KPj4+ICsKPj4+ICsJcmV0dXJuIHRydWU7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRp YyBib29sIHdyaXRlX3dob2xlKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbikKPj4+ ICt7Cj4+PiArCXNzaXplX3QgcmV0Owo+Pj4gKwlzaXplX3QgbiA9IDA7Cj4+PiArCWNoYXIgKnB0 cjsKPj4+ICsKPj4+ICsJd2hpbGUgKG4gPCBidWZfbGVuKSB7Cj4+PiArCQlwdHIgPSAoY2hhciAq KSBidWYgKyBuOwo+Pj4gKwkJcmV0ID0gd3JpdGUoZmQsIHB0ciwgYnVmX2xlbiAtIG4pOwo+Pj4g KwkJaWYgKHJldCA8IDApIHsKPj4+ICsJCQlpZ3Rfd2Fybigid3JpdGUgZmFpbGVkOiAlc1xuIiwg c3RyZXJyb3IoZXJybm8pKTsKPj4+ICsJCQlyZXR1cm4gZmFsc2U7Cj4+PiArCQl9IGVsc2UgaWYg KHJldCA9PSAwKSB7Cj4+PiArCQkJaWd0X3dhcm4oInNob3J0IHdyaXRlXG4iKTsKPj4+ICsJCQly ZXR1cm4gZmFsc2U7Cj4+PiArCQl9Cj4+PiArCQluICs9IHJldDsKPj4+ICsJfQo+Pj4gKwo+Pj4g KwlyZXR1cm4gdHJ1ZTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGJvb2wgcmVhZF9hbmRfZGlz Y2FyZChpbnQgZmQsIHNpemVfdCBsZW4pCj4+PiArewo+Pj4gKwljaGFyIGJ1ZlsxMDI0XTsKPj4+ ICsJc2l6ZV90IG47Cj4+PiArCj4+PiArCXdoaWxlIChsZW4gPiAwKSB7Cj4+PiArCQluID0gbGVu Owo+Pj4gKwkJaWYgKG4gPiBzaXplb2YoYnVmKSkKPj4+ICsJCQluID0gc2l6ZW9mKGJ1Zik7Cj4+ PiArCj4+PiArCQlpZiAoIXJlYWRfd2hvbGUoZmQsIGJ1ZiwgbikpCj4+PiArCQkJcmV0dXJuIGZh bHNlOwo+Pj4gKwo+Pj4gKwkJbGVuIC09IG47Cj4+PiArCX0KPj4+ICsKPj4+ICsJcmV0dXJuIHRy dWU7Cj4+PiArfQo+Pj4gKwo+Pj4gKy8qKiBSZWFkIGEgbWVzc2FnZSBoZWFkZXIgZnJvbSB0aGUg c29ja2V0Lgo+Pj4gKyAqCj4+PiArICogVGhlIGhlYWRlciBpcyBsYWlkIG91dCBhcyBmb2xsb3dz Ogo+Pj4gKyAqIC0gdTE2OiBtZXNzYWdlIHR5cGUKPj4+ICsgKiAtIHUxNjogZXJyb3IgY29kZQo+ Pj4gKyAqIC0gdTMyOiBtZXNzYWdlIGxlbmd0aAo+Pj4gKyAqLwo+Pj4gK3N0YXRpYyBib29sIGNo YW1lbGl1bV9zdHJlYW1fcmVhZF9oZWFkZXIoc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVu dCwKPj4+ICsJCQkJCSBlbnVtIHN0cmVhbV9tZXNzYWdlX2tpbmQgKmtpbmQsCj4+PiArCQkJCQkg ZW51bSBzdHJlYW1fbWVzc2FnZV90eXBlICp0eXBlLAo+Pj4gKwkJCQkJIGVudW0gc3RyZWFtX2Vy cm9yICplcnIsCj4+PiArCQkJCQkgc2l6ZV90ICpsZW4pCj4+PiArewo+Pj4gKwl1aW50MTZfdCBf dHlwZTsKPj4+ICsJY2hhciBidWZbOF07Cj4+PiArCj4+PiArCWlmICghcmVhZF93aG9sZShjbGll bnQtPmZkLCBidWYsIHNpemVvZihidWYpKSkKPj4+ICsJCXJldHVybiBmYWxzZTsKPj4+ICsKPj4+ ICsJX3R5cGUgPSBudG9ocygqKHVpbnQxNl90ICopICZidWZbMF0pOwo+Pj4gKwkqdHlwZSA9IF90 eXBlICYgMHhGRjsKPj4+ICsJKmtpbmQgPSBfdHlwZSA+PiA4Owo+Pj4gKwkqZXJyID0gbnRvaHMo Kih1aW50MTZfdCAqKSAmYnVmWzJdKTsKPj4+ICsJKmxlbiA9IG50b2hsKCoodWludDMyX3QgKikg JmJ1Zls0XSk7Cj4+PiArCj4+PiArCS8vaWd0X2RlYnVnKCJyZWNlaXZlZCBtZXNzYWdlOiBraW5k PSVkIHR5cGU9JWQgZXJyPSVkIGxlbj0lenVcbiIsCj4+PiArCS8vCSAgKmtpbmQsICp0eXBlLCAq ZXJyLCAqbGVuKTsKPj4KPj4gWW91IHByb2JhYmx5IHdhbnQgdG8ga2VlcCB0aGlzIGRlYnVnIG1l c3NhZ2UuIElmIG5vdCwgdGhlbiBjb21tZW50IGl0Cj4+IHByb3Blcmx5IHdpdGggLyogKi8gb3Ig ZGVsZXRlIGl0Lgo+IAo+IEFoLCBzZWVtcyBsaWtlIEkgZm9yZ290IHRvIHJlbW92ZSBpdC4gSSBk b24ndCB0aGluayB3ZSB3YW50IHRvIGtlZXAgaXQsCj4gYmVjYXVzZSBpdCdzIGV4dHJlbWVseSBj aGF0dHkgd2hlbiByZWNlaXZpbmcgYXVkaW8gcGFnZXMuCgpvayEKCj4gCj4+PiArCj4+PiArCXJl dHVybiB0cnVlOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgYm9vbCBjaGFtZWxpdW1fc3RyZWFt X3dyaXRlX2hlYWRlcihzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2xpZW50LAo+Pj4gKwkJCQkJ ICBlbnVtIHN0cmVhbV9tZXNzYWdlX3R5cGUgdHlwZSwKPj4+ICsJCQkJCSAgZW51bSBzdHJlYW1f ZXJyb3IgZXJyLAo+Pj4gKwkJCQkJICBzaXplX3QgbGVuKQo+Pj4gK3sKPj4+ICsJY2hhciBidWZb OF07Cj4+PiArCXVpbnQxNl90IF90eXBlOwo+Pj4gKwo+Pj4gKwlfdHlwZSA9IHR5cGUgfCAoU1RS RUFNX01FU1NBR0VfUkVRVUVTVCA8PCA4KTsKPj4+ICsKPj4+ICsJKih1aW50MTZfdCAqKSAmYnVm WzBdID0gaHRvbnMoX3R5cGUpOwo+Pj4gKwkqKHVpbnQxNl90ICopICZidWZbMl0gPSBodG9ucyhl cnIpOwo+Pj4gKwkqKHVpbnQzMl90ICopICZidWZbNF0gPSBodG9ubChsZW4pOwo+Pj4gKwo+Pj4g KwlyZXR1cm4gd3JpdGVfd2hvbGUoY2xpZW50LT5mZCwgYnVmLCBzaXplb2YoYnVmKSk7Cj4+PiAr fQo+Pj4gKwo+Pj4gK3N0YXRpYyBib29sIGNoYW1lbGl1bV9zdHJlYW1fcmVhZF9yZXNwb25zZShz dHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2xpZW50LAo+Pj4gKwkJCQkJICAgZW51bSBzdHJlYW1f bWVzc2FnZV90eXBlIHR5cGUsCj4+PiArCQkJCQkgICB2b2lkICpidWYsIHNpemVfdCBidWZfbGVu KQo+Pj4gK3sKPj4+ICsJZW51bSBzdHJlYW1fbWVzc2FnZV9raW5kIHJlYWRfa2luZDsKPj4+ICsJ ZW51bSBzdHJlYW1fbWVzc2FnZV90eXBlIHJlYWRfdHlwZTsKPj4+ICsJZW51bSBzdHJlYW1fZXJy b3IgcmVhZF9lcnI7Cj4+PiArCXNpemVfdCByZWFkX2xlbjsKPj4+ICsKPj4+ICsJaWYgKCFjaGFt ZWxpdW1fc3RyZWFtX3JlYWRfaGVhZGVyKGNsaWVudCwgJnJlYWRfa2luZCwgJnJlYWRfdHlwZSwK Pj4+ICsJCQkJCSAgJnJlYWRfZXJyLCAmcmVhZF9sZW4pKQo+Pj4gKwkJcmV0dXJuIGZhbHNlOwo+ Pj4gKwo+Pj4gKwlpZiAocmVhZF9raW5kICE9IFNUUkVBTV9NRVNTQUdFX1JFU1BPTlNFKSB7Cj4+ PiArCQlpZ3Rfd2FybigiRXhwZWN0ZWQgYSByZXNwb25zZSwgZ290IGtpbmQgJWRcbiIsIHJlYWRf a2luZCk7Cj4+PiArCQlyZXR1cm4gZmFsc2U7Cj4+PiArCX0KPj4+ICsJaWYgKHJlYWRfdHlwZSAh PSB0eXBlKSB7Cj4+PiArCQlpZ3Rfd2FybigiRXhwZWN0ZWQgbWVzc2FnZSB0eXBlICVkLCBnb3Qg JWRcbiIsCj4+PiArCQkJIHR5cGUsIHJlYWRfdHlwZSk7Cj4+PiArCQlyZXR1cm4gZmFsc2U7Cj4+ PiArCX0KPj4+ICsJaWYgKHJlYWRfZXJyICE9IFNUUkVBTV9FUlJPUl9OT05FKSB7Cj4+PiArCQlp Z3Rfd2FybigiUmVjZWl2ZWQgZXJyb3I6ICVzICglZClcbiIsCj4+PiArCQkJIHN0cmVhbV9lcnJv cl9zdHIocmVhZF9lcnIpLCByZWFkX2Vycik7Cj4+PiArCQlyZXR1cm4gZmFsc2U7Cj4+PiArCX0K Pj4+ICsJaWYgKGJ1Zl9sZW4gIT0gcmVhZF9sZW4pIHsKPj4+ICsJCWlndF93YXJuKCJSZWNlaXZl ZCBpbnZhbGlkIG1lc3NhZ2UgYm9keSBzaXplICIKPj4+ICsJCQkgIihnb3QgJXp1IGJ5dGVzLCB3 YW50ICV6dSBieXRlcylcbiIsCj4+PiArCQkJIHJlYWRfbGVuLCBidWZfbGVuKTsKPj4+ICsJCXJl dHVybiBmYWxzZTsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlyZXR1cm4gcmVhZF93aG9sZShjbGllbnQt PmZkLCBidWYsIGJ1Zl9sZW4pOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgYm9vbCBjaGFtZWxp dW1fc3RyZWFtX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCwK Pj4+ICsJCQkJCSAgIGVudW0gc3RyZWFtX21lc3NhZ2VfdHlwZSB0eXBlLAo+Pj4gKwkJCQkJICAg dm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbikKPj4+ICt7Cj4+PiArCWlmICghY2hhbWVsaXVtX3N0 cmVhbV93cml0ZV9oZWFkZXIoY2xpZW50LCB0eXBlLCBTVFJFQU1fRVJST1JfTk9ORSwKPj4+ICsJ CQkJCSAgIGJ1Zl9sZW4pKQo+Pj4gKwkJcmV0dXJuIGZhbHNlOwo+Pj4gKwo+Pj4gKwlpZiAoYnVm X2xlbiA9PSAwKQo+Pj4gKwkJcmV0dXJuIHRydWU7Cj4+PiArCj4+PiArCXJldHVybiB3cml0ZV93 aG9sZShjbGllbnQtPmZkLCBidWYsIGJ1Zl9sZW4pOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg Ym9vbCBjaGFtZWxpdW1fc3RyZWFtX2NhbGwoc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVu dCwKPj4+ICsJCQkJICBlbnVtIHN0cmVhbV9tZXNzYWdlX3R5cGUgdHlwZSwKPj4+ICsJCQkJICB2 b2lkICpyZXFfYnVmLCBzaXplX3QgcmVxX2xlbiwKPj4+ICsJCQkJICB2b2lkICpyZXNwX2J1Ziwg c2l6ZV90IHJlc3BfbGVuKQo+Pj4gK3sKPj4+ICsJaWYgKCFjaGFtZWxpdW1fc3RyZWFtX3dyaXRl X3JlcXVlc3QoY2xpZW50LCB0eXBlLCByZXFfYnVmLCByZXFfbGVuKSkKPj4+ICsJCXJldHVybiBm YWxzZTsKPj4+ICsKPj4+ICsJcmV0dXJuIGNoYW1lbGl1bV9zdHJlYW1fcmVhZF9yZXNwb25zZShj bGllbnQsIHR5cGUsIHJlc3BfYnVmLCByZXNwX2xlbik7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRp YyBib29sIGNoYW1lbGl1bV9zdHJlYW1fY2hlY2tfdmVyc2lvbihzdHJ1Y3QgY2hhbWVsaXVtX3N0 cmVhbSAqY2xpZW50KQo+Pj4gK3sKPj4+ICsJY2hhciByZXNwWzJdOwo+Pj4gKwl1aW50OF90IG1h am9yLCBtaW5vcjsKPj4+ICsKPj4+ICsJaWYgKCFjaGFtZWxpdW1fc3RyZWFtX2NhbGwoY2xpZW50 LCBTVFJFQU1fTUVTU0FHRV9HRVRfVkVSU0lPTiwKPj4+ICsJCQkJICAgTlVMTCwgMCwgcmVzcCwg c2l6ZW9mKHJlc3ApKSkKPj4+ICsJCXJldHVybiBmYWxzZTsKPj4+ICsKPj4+ICsJbWFqb3IgPSBy ZXNwWzBdOwo+Pj4gKwltaW5vciA9IHJlc3BbMV07Cj4+PiArCWlmIChtYWpvciAhPSBTVFJFQU1f VkVSU0lPTl9NQUpPUiB8fCBtaW5vciA8IFNUUkVBTV9WRVJTSU9OX01JTk9SKSB7Cj4+PiArCQlp Z3Rfd2FybigiVmVyc2lvbiBtaXNtYXRjaCAod2FudCAlZC4lZCwgZ290ICVkLiVkKVxuIiwKPj4+ ICsJCQkgU1RSRUFNX1ZFUlNJT05fTUFKT1IsIFNUUkVBTV9WRVJTSU9OX01JTk9SLAo+Pj4gKwkJ CSBtYWpvciwgbWlub3IpOwo+Pj4gKwkJcmV0dXJuIGZhbHNlOwo+Pj4gKwl9Cj4+PiArCj4+PiAr CXJldHVybiB0cnVlOwo+Pj4gK30KPj4+ICsKPj4+ICsvKioKPj4+ICsgKiBjaGFtZWxpdW1fc3Ry ZWFtX2R1bXBfcmVhbHRpbWVfYXVkaW86Cj4+PiArICoKPj4+ICsgKiBTdGFydHMgYXVkaW8gY2Fw dHVyZS4gVGhlIGNhbGxlciBjYW4gdGhlbiBjYWxsCj4+PiArICogI2NoYW1lbGl1bV9zdHJlYW1f cmVjZWl2ZV9yZWFsdGltZV9hdWRpbyB0byByZWNlaXZlIGF1ZGlvIHBhZ2VzLgo+Pj4gKyAqLwo+ Pj4gK2Jvb2wgY2hhbWVsaXVtX3N0cmVhbV9kdW1wX3JlYWx0aW1lX2F1ZGlvKHN0cnVjdCBjaGFt ZWxpdW1fc3RyZWFtICpjbGllbnQsCj4+PiArCQkJCQkgIGVudW0gY2hhbWVsaXVtX3N0cmVhbV9y ZWFsdGltZV9tb2RlIG1vZGUpCj4+PiArewo+Pj4gKwljaGFyIHJlcVsxXTsKPj4+ICsKPj4+ICsJ aWd0X2RlYnVnKCJTdGFydGluZyByZWFsLXRpbWUgYXVkaW8gY2FwdHVyZVxuIik7Cj4+PiArCj4+ PiArCXJlcVswXSA9IG1vZGU7Cj4+PiArCXJldHVybiBjaGFtZWxpdW1fc3RyZWFtX2NhbGwoY2xp ZW50LCBTVFJFQU1fTUVTU0FHRV9EVU1QX1JFQUxUSU1FX0FVRElPLAo+Pj4gKwkJCQkgICAgIHJl cSwgc2l6ZW9mKHJlcSksIE5VTEwsIDApOwo+Pj4gK30KPj4+ICsKPj4+ICsvKioKPj4+ICsgKiBj aGFtZWxpdW1fc3RyZWFtX3JlY2VpdmVfcmVhbHRpbWVfYXVkaW86Cj4+PiArICogQHBhZ2VfY291 bnQ6IGlmIG5vbi1OVUxMLCB3aWxsIGJlIHNldCB0byB0aGUgZHVtcGVkIHBhZ2UgbnVtYmVyCj4+ PiArICogQGJ1ZjogbXVzdCBlaXRoZXIgcG9pbnQgdG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQg bWVtb3J5IHJlZ2lvbiBvciBOVUxMCj4+PiArICogQGJ1Zl9sZW46IG51bWJlciBvZiBlbGVtZW50 cyBvZiAqQGJ1ZiwgZm9yIHplcm8gaWYgQGJ1ZiBpcyBOVUxMCj4+PiArICoKPj4+ICsgKiBSZWNl aXZlcyBvbmUgYXVkaW8gcGFnZSBmcm9tIHRoZSBzdHJlYW1pbmcgc2VydmVyLgo+Pj4gKyAqCj4+ PiArICogSW4gImJlc3QgZWZmb3J0IiBtb2RlLCBzb21lIHBhZ2VzIGNhbiBiZSBkcm9wcGVkLiBU aGlzIGNhbiBiZSBkZXRlY3RlZCB2aWEKPj4+ICsgKiB0aGUgcGFnZSBjb3VudC4KPj4+ICsgKgo+ Pj4gKyAqIGJ1Zl9sZW4gd2lsbCBiZSBzZXQgdG8gdGhlIHNpemUgb2YgdGhlIHBhZ2UuIFRoZSBj YWxsZXIgaXMgcmVzcG9uc2libGUgZm9yCj4+PiArICogY2FsbGluZyBmcmVlKDMpIG9uICpidWYu Cj4+PiArICovCj4+PiArYm9vbCBjaGFtZWxpdW1fc3RyZWFtX3JlY2VpdmVfcmVhbHRpbWVfYXVk aW8oc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCwKPj4+ICsJCQkJCSAgICAgc2l6ZV90 ICpwYWdlX2NvdW50LAo+Pj4gKwkJCQkJICAgICBpbnQzMl90ICoqYnVmLCBzaXplX3QgKmJ1Zl9s ZW4pCj4+PiArewo+Pj4gKwllbnVtIHN0cmVhbV9tZXNzYWdlX2tpbmQga2luZDsKPj4+ICsJZW51 bSBzdHJlYW1fbWVzc2FnZV90eXBlIHR5cGU7Cj4+PiArCWVudW0gc3RyZWFtX2Vycm9yIGVycjsK Pj4+ICsJc2l6ZV90IGJvZHlfbGVuOwo+Pj4gKwljaGFyIHBhZ2VfY291bnRfYnVmWzRdOwo+Pj4g KwlpbnQzMl90ICpwdHI7Cj4+PiArCj4+PiArCXdoaWxlICh0cnVlKSB7Cj4+PiArCQlpZiAoIWNo YW1lbGl1bV9zdHJlYW1fcmVhZF9oZWFkZXIoY2xpZW50LCAma2luZCwgJnR5cGUsCj4+PiArCQkJ CQkJICAmZXJyLCAmYm9keV9sZW4pKQo+Pj4gKwkJCXJldHVybiBmYWxzZTsKPj4+ICsKPj4+ICsJ CWlmIChraW5kICE9IFNUUkVBTV9NRVNTQUdFX0RBVEEpIHsKPj4+ICsJCQlpZ3Rfd2FybigiRXhw ZWN0ZWQgYSBkYXRhIG1lc3NhZ2UsIGdvdCBraW5kICVkXG4iLCBraW5kKTsKPj4+ICsJCQlyZXR1 cm4gZmFsc2U7Cj4+PiArCQl9Cj4+PiArCQlpZiAodHlwZSAhPSBTVFJFQU1fTUVTU0FHRV9EVU1Q X1JFQUxUSU1FX0FVRElPKSB7Cj4+PiArCQkJaWd0X3dhcm4oIkV4cGVjdGVkIHJlYWwtdGltZSBh dWRpbyBkdW1wIG1lc3NhZ2UsICIKPj4+ICsJCQkJICJnb3QgdHlwZSAlZFxuIiwgdHlwZSk7Cj4+ PiArCQkJcmV0dXJuIGZhbHNlOwo+Pj4gKwkJfQo+Pj4gKwo+Pj4gKwkJaWYgKGVyciA9PSBTVFJF QU1fRVJST1JfTk9ORSkKPj4+ICsJCQlicmVhazsKPj4+ICsJCWVsc2UgaWYgKGVyciAhPSBTVFJF QU1fRVJST1JfQVVESU9fTUVNX09WRVJGTE9XX0RST1ApIHsKPj4+ICsJCQlpZ3Rfd2FybigiUmVj ZWl2ZWQgZXJyb3I6ICVzICglZClcbiIsCj4+PiArCQkJCSBzdHJlYW1fZXJyb3Jfc3RyKGVyciks IGVycik7Cj4+PiArCQkJcmV0dXJuIGZhbHNlOwo+Pj4gKwkJfQo+Pj4gKwo+Pj4gKwkJaWd0X2Rl YnVnKCJEcm9wcGVkIGFuIGF1ZGlvIHBhZ2UgYmVjYXVzZSBvZiBhbiBvdmVyZmxvd1xuIik7Cj4+ PiArCQlpZ3RfYXNzZXJ0KGJvZHlfbGVuID09IDApOwo+Pj4gKwl9Cj4+PiArCj4+PiArCWlndF9h c3NlcnQoYm9keV9sZW4gPj0gc2l6ZW9mKHBhZ2VfY291bnRfYnVmKSk7Cj4+PiArCj4+PiArCWlm ICghcmVhZF93aG9sZShjbGllbnQtPmZkLCBwYWdlX2NvdW50X2J1Ziwgc2l6ZW9mKHBhZ2VfY291 bnRfYnVmKSkpCj4+PiArCQlyZXR1cm4gZmFsc2U7Cj4+PiArCWlmIChwYWdlX2NvdW50KQo+Pj4g KwkJKnBhZ2VfY291bnQgPSBudG9obCgqKHVpbnQzMl90ICopICZwYWdlX2NvdW50X2J1ZlswXSk7 Cj4+PiArCWJvZHlfbGVuIC09IHNpemVvZihwYWdlX2NvdW50X2J1Zik7Cj4+PiArCj4+PiArCWln dF9hc3NlcnQoYm9keV9sZW4gJSBzaXplb2YoaW50MzJfdCkgPT0gMCk7Cj4+PiArCWlmICgqYnVm X2xlbiAqIHNpemVvZihpbnQzMl90KSAhPSBib2R5X2xlbikgewo+Pj4gKwkJcHRyID0gcmVhbGxv YygqYnVmLCBib2R5X2xlbik7Cj4+PiArCQlpZiAoIXB0cikgewo+Pj4gKwkJCWlndF93YXJuKCJy ZWFsbG9jIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Cj4+PiArCQkJcmV0dXJuIGZh bHNlOwo+Pj4gKwkJfQo+Pj4gKwkJKmJ1ZiA9IHB0cjsKPj4+ICsJCSpidWZfbGVuID0gYm9keV9s ZW4gLyBzaXplb2YoaW50MzJfdCk7Cj4+PiArCX0KPj4+ICsKPj4+ICsJcmV0dXJuIHJlYWRfd2hv bGUoY2xpZW50LT5mZCwgKmJ1ZiwgYm9keV9sZW4pOwo+Pj4gK30KPj4+ICsKPj4+ICsvKioKPj4+ ICsgKiBjaGFtZWxpdW1fc3RyZWFtX3N0b3BfcmVhbHRpbWVfYXVkaW86Cj4+PiArICoKPj4+ICsg KiBTdG9wcyByZWFsLXRpbWUgYXVkaW8gY2FwdHVyZS4gVGhpcyBhbHNvIGRyb3BzIGFueSBidWZm ZXJlZCBhdWRpbyBwYWdlcy4KPj4+ICsgKiBUaGUgY2FsbGVyIHNob3VsZG4ndCBjYWxsICNjaGFt ZWxpdW1fc3RyZWFtX3JlY2VpdmVfcmVhbHRpbWVfYXVkaW8gYWZ0ZXIKPj4+ICsgKiBzdG9wcGlu ZyBhdWRpbyBjYXB0dXJlLgo+Pj4gKyAqLwo+Pj4gK2Jvb2wgY2hhbWVsaXVtX3N0cmVhbV9zdG9w X3JlYWx0aW1lX2F1ZGlvKHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQpCj4+PiArewo+ Pj4gKwllbnVtIHN0cmVhbV9tZXNzYWdlX2tpbmQga2luZDsKPj4+ICsJZW51bSBzdHJlYW1fbWVz c2FnZV90eXBlIHR5cGU7Cj4+PiArCWVudW0gc3RyZWFtX2Vycm9yIGVycjsKPj4+ICsJc2l6ZV90 IGxlbjsKPj4+ICsKPj4+ICsJaWd0X2RlYnVnKCJTdG9wcGluZyByZWFsLXRpbWUgYXVkaW8gY2Fw dHVyZVxuIik7Cj4+PiArCj4+PiArCWlmICghY2hhbWVsaXVtX3N0cmVhbV93cml0ZV9yZXF1ZXN0 KGNsaWVudCwKPj4+ICsJCQkJCSAgICBTVFJFQU1fTUVTU0FHRV9TVE9QX0RVTVBfQVVESU8sCj4+ PiArCQkJCQkgICAgTlVMTCwgMCkpCj4+PiArCQlyZXR1cm4gZmFsc2U7Cj4+PiArCj4+PiArCXdo aWxlICh0cnVlKSB7Cj4+PiArCQlpZiAoIWNoYW1lbGl1bV9zdHJlYW1fcmVhZF9oZWFkZXIoY2xp ZW50LCAma2luZCwgJnR5cGUsCj4+PiArCQkJCQkJICAmZXJyLCAmbGVuKSkKPj4+ICsJCQlyZXR1 cm4gZmFsc2U7Cj4+PiArCj4+PiArCQlpZiAoa2luZCA9PSBTVFJFQU1fTUVTU0FHRV9SRVNQT05T RSkKPj4+ICsJCQlicmVhazsKPj4+ICsKPj4+ICsJCWlmICghcmVhZF9hbmRfZGlzY2FyZChjbGll bnQtPmZkLCBsZW4pKQo+Pj4gKwkJCXJldHVybiBmYWxzZTsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlp ZiAodHlwZSAhPSBTVFJFQU1fTUVTU0FHRV9TVE9QX0RVTVBfQVVESU8pIHsKPj4+ICsJCWlndF93 YXJuKCJVbmV4cGVjdGVkIHJlc3BvbnNlIHR5cGUgJWRcbiIsIHR5cGUpOwo+Pj4gKwkJcmV0dXJu IGZhbHNlOwo+Pj4gKwl9Cj4+PiArCWlmIChlcnIgIT0gU1RSRUFNX0VSUk9SX05PTkUpIHsKPj4+ ICsJCWlndF93YXJuKCJSZWNlaXZlZCBlcnJvcjogJXMgKCVkKVxuIiwKPj4+ICsJCQkgc3RyZWFt X2Vycm9yX3N0cihlcnIpLCBlcnIpOwo+Pj4gKwkJcmV0dXJuIGZhbHNlOwo+Pj4gKwl9Cj4+PiAr CWlmIChsZW4gIT0gMCkgewo+Pj4gKwkJaWd0X3dhcm4oIkV4cGVjdGVkIGFuIGVtcHR5IHJlc3Bv bnNlLCBnb3QgJXp1IGJ5dGVzXG4iLCBsZW4pOwo+Pj4gKwkJcmV0dXJuIGZhbHNlOwo+Pj4gKwl9 Cj4+PiArCj4+PiArCXJldHVybiB0cnVlOwo+Pj4gK30KPj4+ICsKPj4+ICsvKioKPj4+ICsgKiBj aGFtZWxpdW1fc3RyZWFtX2F1ZGlvX2Zvcm1hdDoKPj4+ICsgKgo+Pj4gKyAqIEdldHMgdGhlIGZv cm1hdCB1c2VkIGZvciBhdWRpbyBwYWdlcy4KPj4+ICsgKgo+Pj4gKyAqIERhdGEgd2lsbCBhbHdh eXMgYmUgY2FwdHVyZWQgaW4gcmF3IHBhZ2VzIG9mIFMzMl9MRSBlbGVtZW50cy4gVGhpcyBmdW5j dGlvbgo+Pj4gKyAqIGV4cG9zZXMgdGhlIHNhbXBsaW5nIHJhdGUgYW5kIHRoZSBudW1iZXIgb2Yg Y2hhbm5lbHMuCj4+PiArICovCj4+PiArdm9pZCBjaGFtZWxpdW1fc3RyZWFtX2F1ZGlvX2Zvcm1h dChzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqc3RyZWFtLAo+Pj4gKwkJCQkgICBpbnQgKnJhdGUs IGludCAqY2hhbm5lbHMpCj4+PiArewo+Pj4gKwkvKiBUT0RPOiB0aGUgQ2hhbWVsaXVtIHN0cmVh bWluZyBzZXJ2ZXIgZG9lc24ndCBleHBvc2UgdGhvc2UgeWV0Lgo+Pj4gKwkgKiBKdXN0IGhhcmRj b2RlIHRoZSB2YWx1ZXMgZm9yIG5vdy4gKi8KPj4+ICsJKnJhdGUgPSA0ODAwMDsKPj4+ICsJKmNo YW5uZWxzID0gODsKPj4+ICt9Cj4+PiArCj4+PiArLyoqCj4+PiArICogY2hhbWVsaXVtX3N0cmVh bV9pbml0Ogo+Pj4gKyAqCj4+PiArICogQ29ubmVjdHMgdG8gdGhlIENoYW1lbGl1bSBzdHJlYW1p bmcgc2VydmVyLgo+Pj4gKyAqLwo+Pj4gK3N0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjaGFtZWxp dW1fc3RyZWFtX2luaXQodm9pZCkKPj4+ICt7Cj4+PiArCXN0cnVjdCBjaGFtZWxpdW1fc3RyZWFt ICpjbGllbnQ7Cj4+PiArCj4+PiArCWNsaWVudCA9IGNhbGxvYygxLCBzaXplb2YoKmNsaWVudCkp Owo+Pj4gKwo+Pj4gKwlpZiAoIWNoYW1lbGl1bV9zdHJlYW1fcmVhZF9jb25maWcoY2xpZW50KSkK Pj4+ICsJCWdvdG8gZXJyb3JfY2xpZW50Owo+Pj4gKwlpZiAoIWNoYW1lbGl1bV9zdHJlYW1fY29u bmVjdChjbGllbnQpKQo+Pj4gKwkJZ290byBlcnJvcl9jbGllbnQ7Cj4+PiArCWlmICghY2hhbWVs aXVtX3N0cmVhbV9jaGVja192ZXJzaW9uKGNsaWVudCkpCj4+PiArCQlnb3RvIGVycm9yX2ZkOwo+ Pj4gKwo+Pj4gKwlyZXR1cm4gY2xpZW50Owo+Pj4gKwo+Pj4gK2Vycm9yX2ZkOgo+Pj4gKwljbG9z ZShjbGllbnQtPmZkKTsKPj4+ICtlcnJvcl9jbGllbnQ6Cj4+PiArCWZyZWUoY2xpZW50KTsKPj4+ ICsJcmV0dXJuIE5VTEw7Cj4+PiArfQo+Pj4gKwo+Pj4gK3ZvaWQgY2hhbWVsaXVtX3N0cmVhbV9k ZWluaXQoc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCkKPj4+ICt7Cj4+PiArCWlmIChj bG9zZShjbGllbnQtPmZkKSAhPSAwKQo+Pj4gKwkJaWd0X3dhcm4oImNsb3NlIGZhaWxlZDogJXNc biIsIHN0cmVycm9yKGVycm5vKSk7Cj4+PiArCWZyZWUoY2xpZW50KTsKPj4+ICt9Cj4+PiBkaWZm IC0tZ2l0IGEvbGliL2lndF9jaGFtZWxpdW1fc3RyZWFtLmggYi9saWIvaWd0X2NoYW1lbGl1bV9z dHJlYW0uaAo+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+IGluZGV4IDAwMDAwMDAwLi5kZTRl OTkzMQo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvbGliL2lndF9jaGFtZWxpdW1fc3RyZWFt LmgKPj4+IEBAIC0wLDAgKzEsNTIgQEAKPj4+ICsvKgo+Pj4gKyAqIENvcHlyaWdodCDCqSAyMDE5 IEludGVsIENvcnBvcmF0aW9uCj4+PiArICoKPj4+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+Pj4gKyAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksCj4+PiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+Pj4gKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAo+Pj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+Pj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4+PiAr ICoKPj4+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4+PiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+Pj4g KyAqIFNvZnR3YXJlLgo+Pj4gKyAqCj4+PiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPj4+ICsgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKPj4+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPj4+ICsgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgo+Pj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4+PiArICogRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H Uwo+Pj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPj4+ICsgKgo+Pj4gKyAqIEF1dGhvcnM6IFNpbW9u IFNlciA8c2ltb24uc2VyQGludGVsLmNvbT4KPj4+ICsgKi8KPj4+ICsKPj4+ICsjaWZuZGVmIElH VF9DSEFNRUxJVU1fU1RSRUFNX0gKPj4+ICsjZGVmaW5lIElHVF9DSEFNRUxJVU1fU1RSRUFNX0gK Pj4+ICsKPj4+ICsjaW5jbHVkZSAiY29uZmlnLmgiCj4+PiArCj4+PiArZW51bSBjaGFtZWxpdW1f c3RyZWFtX3JlYWx0aW1lX21vZGUgewo+Pj4gKwlDSEFNRUxJVU1fU1RSRUFNX1JFQUxUSU1FX05P TkUgPSAwLAo+Pj4gKwkvKiBzdG9wIGR1bXBpbmcgd2hlbiBvdmVyZmxvdyAqLwo+Pj4gKwlDSEFN RUxJVU1fU1RSRUFNX1JFQUxUSU1FX1NUT1BfV0hFTl9PVkVSRkxPVyA9IDEsCj4+PiArCS8qIGRy b3AgZGF0YSBvbiBvdmVyZmxvdyAqLwo+Pj4gKwlDSEFNRUxJVU1fU1RSRUFNX1JFQUxUSU1FX0JF U1RfRUZGT1JUID0gMiwKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0cnVjdCBjaGFtZWxpdW1fc3RyZWFt Owo+Pj4gKwo+Pj4gK3N0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjaGFtZWxpdW1fc3RyZWFtX2lu aXQodm9pZCk7Cj4+PiArdm9pZCBjaGFtZWxpdW1fc3RyZWFtX2RlaW5pdChzdHJ1Y3QgY2hhbWVs aXVtX3N0cmVhbSAqY2xpZW50KTsKPj4+ICtib29sIGNoYW1lbGl1bV9zdHJlYW1fZHVtcF9yZWFs dGltZV9hdWRpbyhzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2xpZW50LAo+Pj4gKwkJCQkJICBl bnVtIGNoYW1lbGl1bV9zdHJlYW1fcmVhbHRpbWVfbW9kZSBtb2RlKTsKPj4+ICt2b2lkIGNoYW1l bGl1bV9zdHJlYW1fYXVkaW9fZm9ybWF0KHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpzdHJlYW0s Cj4+PiArCQkJCSAgIGludCAqcmF0ZSwgaW50ICpjaGFubmVscyk7Cj4+PiArYm9vbCBjaGFtZWxp dW1fc3RyZWFtX3JlY2VpdmVfcmVhbHRpbWVfYXVkaW8oc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0g KmNsaWVudCwKPj4+ICsJCQkJCSAgICAgc2l6ZV90ICpwYWdlX2NvdW50LAo+Pj4gKwkJCQkJICAg ICBpbnQzMl90ICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4pOwo+Pj4gK2Jvb2wgY2hhbWVsaXVtX3N0 cmVhbV9zdG9wX3JlYWx0aW1lX2F1ZGlvKHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQp Owo+Pj4gKwo+Pj4gKyNlbmRpZgo+Pj4gZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xp Yi9tZXNvbi5idWlsZAo+Pj4gaW5kZXggYTg0NjI5MzMuLmVlYWQwYWZiIDEwMDY0NAo+Pj4gLS0t IGEvbGliL21lc29uLmJ1aWxkCj4+PiArKysgYi9saWIvbWVzb24uYnVpbGQKPj4+IEBAIC05Miw3 ICs5Miw3IEBAIGlmIHZhbGdyaW5kLmZvdW5kKCkKPj4+ICBlbmRpZgo+Pj4gIAo+Pj4gIGlmIGdz bC5mb3VuZCgpCj4+PiAtCWxpYl9kZXBzICs9IFsgZ3NsIF0KPj4+ICsJbGliX2RlcHMgKz0gZ3Ns Cj4+PiAgCWxpYl9zb3VyY2VzICs9IFsgJ2lndF9mcmFtZS5jJywgJ2lndF9hdWRpby5jJyBdCj4+ PiAgZW5kaWYKPj4+ICAKPj4+IEBAIC0xMDEsOSArMTAxLDEwIEBAIGlmIGFsc2EuZm91bmQoKQo+ Pj4gIAlsaWJfc291cmNlcyArPSAnaWd0X2Fsc2EuYycKPj4+ICBlbmRpZgo+Pj4gIAo+Pj4gLWlm IGNoYW1lbGl1bS5mb3VuZCgpCj4+PiAraWYgY2hhbWVsaXVtX2ZvdW5kCj4+PiAgCWxpYl9kZXBz ICs9IGNoYW1lbGl1bQo+Pj4gIAlsaWJfc291cmNlcyArPSAnaWd0X2NoYW1lbGl1bS5jJwo+Pj4g KwlsaWJfc291cmNlcyArPSAnaWd0X2NoYW1lbGl1bV9zdHJlYW0uYycKPj4+ICBlbmRpZgo+Pj4g IAo+Pj4gIHNyY2RpciA9IGpvaW5fcGF0aHMobWVzb24uc291cmNlX3Jvb3QoKSwgJ3Rlc3RzJykK Pj4+IGRpZmYgLS1naXQgYS9tZXNvbi5idWlsZCBiL21lc29uLmJ1aWxkCj4+PiBpbmRleCA1NTc0 MDBhNS4uYmU2ZGZmOWQgMTAwNjQ0Cj4+PiAtLS0gYS9tZXNvbi5idWlsZAo+Pj4gKysrIGIvbWVz b24uYnVpbGQKPj4+IEBAIC02NCw4ICs2NCw2IEBAIF9idWlsZF9vdmVybGF5ID0gZmFsc2UKPj4+ ICBfb3ZlcmxheV9yZXF1aXJlZCA9IGZhbHNlCj4+PiAgX2J1aWxkX21hbiA9IGZhbHNlCj4+PiAg X21hbl9yZXF1aXJlZCA9IGZhbHNlCj4+PiAtX2J1aWxkX2F1ZGlvID0gZmFsc2UKPj4+IC1fYXVk aW9fcmVxdWlyZWQgPSBmYWxzZQo+Pj4gIF9idWlsZF9jaGFtZWxpdW0gPSBmYWxzZQo+Pj4gIF9j aGFtZWxpdW1fcmVxdWlyZWQgPSBmYWxzZQo+Pj4gIF9idWlsZF9kb2NzID0gZmFsc2UKPj4+IEBA IC03OSw3ICs3Nyw2IEBAIGJ1aWxkX292ZXJsYXkgPSBnZXRfb3B0aW9uKCdidWlsZF9vdmVybGF5 JykKPj4+ICBvdmVybGF5X2JhY2tlbmRzID0gZ2V0X29wdGlvbignb3ZlcmxheV9iYWNrZW5kcycp Cj4+PiAgYnVpbGRfbWFuID0gZ2V0X29wdGlvbignYnVpbGRfbWFuJykKPj4+ICB3aXRoX3ZhbGdy aW5kID0gZ2V0X29wdGlvbignd2l0aF92YWxncmluZCcpCj4+PiAtYnVpbGRfYXVkaW8gPSBnZXRf b3B0aW9uKCdidWlsZF9hdWRpbycpCj4+PiAgYnVpbGRfY2hhbWVsaXVtID0gZ2V0X29wdGlvbign YnVpbGRfY2hhbWVsaXVtJykKPj4+ICBidWlsZF9kb2NzID0gZ2V0X29wdGlvbignYnVpbGRfZG9j cycpCj4+PiAgYnVpbGRfdGVzdHMgPSBnZXRfb3B0aW9uKCdidWlsZF90ZXN0cycpCj4+PiBAQCAt OTEsOCArODgsNiBAQCBfYnVpbGRfb3ZlcmxheSA9IGJ1aWxkX292ZXJsYXkgIT0gJ2ZhbHNlJwo+ Pj4gIF9vdmVybGF5X3JlcXVpcmVkID0gYnVpbGRfb3ZlcmxheSA9PSAndHJ1ZScKPj4+ICBfYnVp bGRfbWFuID0gYnVpbGRfbWFuICE9ICdmYWxzZScKPj4+ICBfbWFuX3JlcXVpcmVkID0gYnVpbGRf bWFuID09ICd0cnVlJwo+Pj4gLV9idWlsZF9hdWRpbyA9IGJ1aWxkX2F1ZGlvICE9ICdmYWxzZScK Pj4+IC1fYXVkaW9fcmVxdWlyZWQgPSBidWlsZF9hdWRpbyA9PSAndHJ1ZScKPj4+ICBfYnVpbGRf Y2hhbWVsaXVtID0gYnVpbGRfY2hhbWVsaXVtICE9ICdmYWxzZScKPj4+ICBfY2hhbWVsaXVtX3Jl cXVpcmVkID0gYnVpbGRfY2hhbWVsaXVtID09ICd0cnVlJwo+Pj4gIF9idWlsZF9kb2NzID0gYnVp bGRfZG9jcyAhPSAnZmFsc2UnCj4+PiBAQCAtMTY2LDI2ICsxNjEsNiBAQCBjYWlybyA9IGRlcGVu ZGVuY3koJ2NhaXJvJywgdmVyc2lvbiA6ICc+MS4xMi4wJywgcmVxdWlyZWQgOiB0cnVlKQo+Pj4g IGxpYnVkZXYgPSBkZXBlbmRlbmN5KCdsaWJ1ZGV2JywgcmVxdWlyZWQgOiB0cnVlKQo+Pj4gIGds aWIgPSBkZXBlbmRlbmN5KCdnbGliLTIuMCcsIHJlcXVpcmVkIDogdHJ1ZSkKPj4+ICAKPj4+IC1n c2wgPSBudWxsX2RlcAo+Pj4gLWFsc2EgPSBudWxsX2RlcAo+Pj4gLWlmIF9idWlsZF9hdWRpbyBv ciBfYnVpbGRfY2hhbWVsaXVtCj4+PiAtCWdzbCA9IGRlcGVuZGVuY3koJ2dzbCcsIHJlcXVpcmVk IDogX2F1ZGlvX3JlcXVpcmVkIG9yIF9jaGFtZWxpdW1fcmVxdWlyZWQpCj4+PiAtZW5kaWYKPj4+ IC1pZiBfYnVpbGRfYXVkaW8KPj4+IC0JYWxzYSA9IGRlcGVuZGVuY3koJ2Fsc2EnLCByZXF1aXJl ZCA6IF9hdWRpb19yZXF1aXJlZCkKPj4+IC1lbmRpZgo+Pj4gLQo+Pj4gLWF1ZGlvaW5mbyA9ICdO bycKPj4+IC1pZiBfYnVpbGRfYXVkaW8gYW5kIGFsc2EuZm91bmQoKSBhbmQgZ3NsLmZvdW5kKCkK Pj4+IC0JYXVkaW9pbmZvID0gJ1llcycKPj4+IC1lbHNlCj4+PiAtCWlmIF9hdWRpb19yZXF1aXJl ZAo+Pj4gLQkJZXJyb3IoJ0Nhbm5vdCBidWlsZCBhdWRpbyB0ZXN0IGR1ZSB0byBtaXNzaW5nIGRl cGVuZGVuY2llcycpCj4+PiAtCWVuZGlmCj4+PiAtCV9idWlsZF9hdWRpbyA9IGZhbHNlCj4+PiAt ZW5kaWYKPj4+IC1idWlsZF9pbmZvICs9ICdCdWlsZCBhdWRpbyB0ZXN0OiAnICsgYXVkaW9pbmZv Cj4+PiAtCj4+PiAgeG1scnBjID0gZGVwZW5kZW5jeSgneG1scnBjJywgcmVxdWlyZWQgOiBmYWxz ZSkKPj4+ICB4bWxycGNfdXRpbCA9IGRlcGVuZGVuY3koJ3htbHJwY191dGlsJywgcmVxdWlyZWQg OiBmYWxzZSkKPj4+ICB4bWxycGNfY2xpZW50ID0gZGVwZW5kZW5jeSgneG1scnBjX2NsaWVudCcs IHJlcXVpcmVkIDogZmFsc2UpCj4+PiBAQCAtMTk3LDIxICsxNzIsMzIgQEAgaWYgbm90IHhtbHJw Yy5mb3VuZCgpIGFuZCB4bWxycGNfY21kLmZvdW5kKCkKPj4+ICAKPj4+ICAJaWYgbGlic19jbWQu cmV0dXJuY29kZSgpID09IDAgYW5kIGNmbGFnc19jbWQucmV0dXJuY29kZSgpID09IDAKPj4+ICAJ CXhtbHJwYyA9IGRlY2xhcmVfZGVwZW5kZW5jeShjb21waWxlX2FyZ3M6IGNmbGFnc19jbWQuc3Rk b3V0KCkuc3RyaXAoKS5zcGxpdCgpLAo+Pj4gLQkJCQkJICAgbGlua19hcmdzIDogbGlic19jbWQu c3Rkb3V0KCkuc3RyaXAoKS5zcGxpdCgpKQo+Pj4gKwkJCQkJICAgIGxpbmtfYXJncyA6IGxpYnNf Y21kLnN0ZG91dCgpLnN0cmlwKCkuc3BsaXQoKSkKPj4+ICAJCXhtbHJwY191dGlsID0gZGVjbGFy ZV9kZXBlbmRlbmN5KCkKPj4+ICAJCXhtbHJwY19jbGllbnQgPSBkZWNsYXJlX2RlcGVuZGVuY3ko KQo+Pj4gIAllbmRpZgo+Pj4gIGVuZGlmCj4+PiAgCj4+PiArZ3NsID0gbnVsbF9kZXAKPj4+ICth bHNhID0gbnVsbF9kZXAKPj4+ICBjaGFtZWxpdW0gPSBudWxsX2RlcAo+Pj4gK2NoYW1lbGl1bV9m b3VuZCA9IGZhbHNlICMgVE9ETzogdXNlIGEgZGlzYWJsZXIgb2JqZWN0IGluc3RlYWQKPj4+ICBj aGFtZWxpdW1pbmZvID0gJ05vJwo+Pj4gLWlmIF9idWlsZF9jaGFtZWxpdW0gYW5kIGdzbC5mb3Vu ZCgpIGFuZCB4bWxycGMuZm91bmQoKSBhbmQgeG1scnBjX3V0aWwuZm91bmQoKSBhbmQgeG1scnBj X2NsaWVudC5mb3VuZCgpCj4+PiAtCWNoYW1lbGl1bSA9IGRlY2xhcmVfZGVwZW5kZW5jeShkZXBl bmRlbmNpZXMgOiBbIHhtbHJwYywKPj4+IC0JCQkJCQkJeG1scnBjX3V0aWwsIHhtbHJwY19jbGll bnRdKQo+Pj4gLQljb25maWcuc2V0KCdIQVZFX0NIQU1FTElVTScsIDEpCj4+PiAtCWNoYW1lbGl1 bWluZm8gPSAnWWVzJwo+Pj4gLWVsaWYgX2NoYW1lbGl1bV9yZXF1aXJlZAo+Pj4gLQllcnJvcign Q2Fubm90IGJ1aWxkIGNoYW1lbGl1bSB0ZXN0IGR1ZSB0byBtaXNzaW5nIGRlcGVuZGVuY2llcycp Cj4+PiAraWYgX2J1aWxkX2NoYW1lbGl1bQo+Pj4gKwlnc2wgPSBkZXBlbmRlbmN5KCdnc2wnLCBy ZXF1aXJlZCA6IF9jaGFtZWxpdW1fcmVxdWlyZWQpCj4+PiArCWFsc2EgPSBkZXBlbmRlbmN5KCdh bHNhJywgcmVxdWlyZWQgOiBfY2hhbWVsaXVtX3JlcXVpcmVkKQo+Pj4gKwljaGFtZWxpdW0gPSBk ZWNsYXJlX2RlcGVuZGVuY3koZGVwZW5kZW5jaWVzIDogWwo+Pj4gKwkJeG1scnBjLAo+Pj4gKwkJ eG1scnBjX3V0aWwsCj4+PiArCQl4bWxycGNfY2xpZW50LAo+Pj4gKwkJZ3NsLAo+Pj4gKwkJYWxz YSwKPj4+ICsJXSwgcmVxdWlyZWQgOiBfY2hhbWVsaXVtX3JlcXVpcmVkKQo+Pj4gKwlpZiB4bWxy cGMuZm91bmQoKSBhbmQgeG1scnBjX3V0aWwuZm91bmQoKSBhbmQgeG1scnBjX2NsaWVudC5mb3Vu ZCgpIGFuZCBnc2wuZm91bmQoKSBhbmQgYWxzYS5mb3VuZCgpCj4+PiArCQljb25maWcuc2V0KCdI QVZFX0NIQU1FTElVTScsIDEpCj4+PiArCQljaGFtZWxpdW1pbmZvID0gJ1llcycKPj4+ICsJCWNo YW1lbGl1bV9mb3VuZCA9IHRydWUKPj4+ICsJZW5kaWYKPj4+ICBlbmRpZgo+Pj4gIGJ1aWxkX2lu Zm8gKz0gJ0J1aWxkIENoYW1lbGl1bSB0ZXN0OiAnICsgY2hhbWVsaXVtaW5mbwo+Pj4gIAo+Pj4g ZGlmZiAtLWdpdCBhL21lc29uX29wdGlvbnMudHh0IGIvbWVzb25fb3B0aW9ucy50eHQKPj4+IGlu ZGV4IDBjZDNiMzUwLi44ODhlZmU1NiAxMDA2NDQKPj4+IC0tLSBhL21lc29uX29wdGlvbnMudHh0 Cj4+PiArKysgYi9tZXNvbl9vcHRpb25zLnR4dAo+Pj4gQEAgLTEwLDEyICsxMCw2IEBAIG9wdGlv bignb3ZlcmxheV9iYWNrZW5kcycsCj4+PiAgICAgICAgIGNob2ljZXMgOiBbICdhdXRvJywgJ3gn LCAneHYnIF0sCj4+PiAgICAgICAgIGRlc2NyaXB0aW9uIDogJ092ZXJsYXkgYmFja2VuZHMgdG8g ZW5hYmxlJykKPj4+ICAKPj4+IC1vcHRpb24oJ2J1aWxkX2F1ZGlvJywKPj4+IC0gICAgICAgdHlw ZSA6ICdjb21ibycsCj4+PiAtICAgICAgIHZhbHVlIDogJ2F1dG8nLAo+Pj4gLSAgICAgICBjaG9p Y2VzIDogWydhdXRvJywgJ3RydWUnLCAnZmFsc2UnXSwKPj4+IC0gICAgICAgZGVzY3JpcHRpb24g OiAnQnVpbGQgYXVkaW8gdGVzdCcpCj4+PiAtCj4+PiAgb3B0aW9uKCdidWlsZF9jaGFtZWxpdW0n LAo+Pj4gICAgICAgICB0eXBlIDogJ2NvbWJvJywKPj4+ICAgICAgICAgdmFsdWUgOiAnYXV0bycs Cj4+PiBkaWZmIC0tZ2l0IGEvdGVzdHMvYXVkaW8uYyBiL3Rlc3RzL2F1ZGlvLmMKPj4+IGRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAo+Pj4gaW5kZXggNTYwODc2YTMuLjAwMDAwMDAwCj4+PiAtLS0g YS90ZXN0cy9hdWRpby5jCj4+PiArKysgL2Rldi9udWxsCj4+PiBAQCAtMSwxOTMgKzAsMCBAQAo+ Pj4gLS8qCj4+PiAtICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KPj4+IC0g Kgo+Pj4gLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4+PiAtICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPj4+IC0g KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCj4+PiAtICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4+PiAtICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCj4+PiAtICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPj4+IC0gKgo+Pj4gLSAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKPj4+IC0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4+PiAtICogU29mdHdhcmUuCj4+PiAtICoKPj4+ IC0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+Pj4gLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+Pj4gLSAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBO TyBFVkVOVCBTSEFMTAo+Pj4gLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4+PiAtICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcKPj4+IC0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4+PiAtICogSU4gVEhFIFNPRlRXQVJF Lgo+Pj4gLSAqCj4+PiAtICogQXV0aG9yczoKPj4+IC0gKiAgUGF1bCBLb2NpYWxrb3dza2kgPHBh dWwua29jaWFsa293c2tpQGxpbnV4LmludGVsLmNvbT4KPj4+IC0gKi8KPj4+IC0KPj4+IC0jaW5j bHVkZSAiY29uZmlnLmgiCj4+PiAtI2luY2x1ZGUgImlndC5oIgo+Pj4gLQo+Pj4gLSNkZWZpbmUg UExBWUJBQ0tfQ0hBTk5FTFMJMgo+Pj4gLSNkZWZpbmUgUExBWUJBQ0tfRlJBTUVTCQkxMDI0Cj4+ PiAtCj4+PiAtI2RlZmluZSBDQVBUVVJFX1NBTVBMRV9SQVRFCTQ4MDAwCj4+PiAtI2RlZmluZSBD QVBUVVJFX0NIQU5ORUxTCTIKPj4+IC0jZGVmaW5lIENBUFRVUkVfREVWSUNFX05BTUUJImRlZmF1 bHQiCj4+PiAtI2RlZmluZSBDQVBUVVJFX0ZSQU1FUwkJMjA0OAo+Pj4gLQo+Pj4gLSNkZWZpbmUg UlVOX1RJTUVPVVQJCTIwMDAKPj4+IC0KPj4+IC1zdHJ1Y3QgdGVzdF9kYXRhIHsKPj4+IC0Jc3Ry dWN0IGFsc2EgKmFsc2E7Cj4+PiAtCXN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbDsKPj4+IC0K Pj4+IC0JaW50IHN0cmVhazsKPj4+IC19Owo+Pj4gLQo+Pj4gLXN0YXRpYyBpbnQgc2FtcGxpbmdf cmF0ZXNbXSA9IHsKPj4+IC0JMzIwMDAsCj4+PiAtCTQ0MTAwLAo+Pj4gLQk0ODAwMCwKPj4+IC0J ODgyMDAsCj4+PiAtCTk2MDAwLAo+Pj4gLQkxNzY0MDAsCj4+PiAtCTE5MjAwMCwKPj4+IC19Owo+ Pj4gLQo+Pj4gLXN0YXRpYyBpbnQgc2FtcGxpbmdfcmF0ZXNfY291bnQgPSBzaXplb2Yoc2FtcGxp bmdfcmF0ZXMpIC8gc2l6ZW9mKGludCk7Cj4+PiAtCj4+PiAtc3RhdGljIGludCB0ZXN0X2ZyZXF1 ZW5jaWVzW10gPSB7Cj4+PiAtCTMwMCwKPj4+IC0JNjAwLAo+Pj4gLQkxMjAwLAo+Pj4gLQk4MDAw MCwKPj4+IC0JMTAwMDAsCj4+PiAtfTsKPj4+IC0KPj4+IC1zdGF0aWMgaW50IHRlc3RfZnJlcXVl bmNpZXNfY291bnQgPSBzaXplb2YodGVzdF9mcmVxdWVuY2llcykgLyBzaXplb2YoaW50KTsKPj4+ IC0KPj4+IC1zdGF0aWMgaW50IG91dHB1dF9jYWxsYmFjayh2b2lkICpkYXRhLCBzaG9ydCAqYnVm ZmVyLCBpbnQgZnJhbWVzKQo+Pj4gLXsKPj4+IC0Jc3RydWN0IHRlc3RfZGF0YSAqdGVzdF9kYXRh ID0gKHN0cnVjdCB0ZXN0X2RhdGEgKikgZGF0YTsKPj4+IC0KPj4+IC0JYXVkaW9fc2lnbmFsX2Zp bGwodGVzdF9kYXRhLT5zaWduYWwsIGJ1ZmZlciwgZnJhbWVzKTsKPj4+IC0KPj4+IC0JcmV0dXJu IDA7Cj4+PiAtfQo+Pj4gLQo+Pj4gLXN0YXRpYyBpbnQgaW5wdXRfY2FsbGJhY2sodm9pZCAqZGF0 YSwgc2hvcnQgKmJ1ZmZlciwgaW50IGZyYW1lcykKPj4+IC17Cj4+PiAtCXN0cnVjdCB0ZXN0X2Rh dGEgKnRlc3RfZGF0YSA9IChzdHJ1Y3QgdGVzdF9kYXRhICopIGRhdGE7Cj4+PiAtCWJvb2wgZGV0 ZWN0Owo+Pj4gLQo+Pj4gLQlkZXRlY3QgPSBhdWRpb19zaWduYWxfZGV0ZWN0KHRlc3RfZGF0YS0+ c2lnbmFsLCBDQVBUVVJFX0NIQU5ORUxTLAo+Pj4gLQkJCQkgICAgIENBUFRVUkVfU0FNUExFX1JB VEUsIGJ1ZmZlciwgZnJhbWVzKTsKPj4+IC0JaWYgKGRldGVjdCkKPj4+IC0JCXRlc3RfZGF0YS0+ c3RyZWFrKys7Cj4+PiAtCWVsc2UKPj4+IC0JCXRlc3RfZGF0YS0+c3RyZWFrID0gMDsKPj4+IC0K Pj4+IC0JLyogQSBzdHJlYWsgb2YgMyBnaXZlcyBjb25maWRlbmNlIHRoYXQgdGhlIHNpZ25hbCBp cyBnb29kLiAqLwo+Pj4gLQlpZiAodGVzdF9kYXRhLT5zdHJlYWsgPT0gMykKPj4+IC0JCXJldHVy biAxOwo+Pj4gLQo+Pj4gLQlyZXR1cm4gMDsKPj4+IC19Cj4+PiAtCj4+PiAtc3RhdGljIHZvaWQg dGVzdF9pbnRlZ3JpdHkoY29uc3QgY2hhciAqZGV2aWNlX25hbWUpCj4+PiAtewo+Pj4gLQlzdHJ1 Y3QgdGVzdF9kYXRhIGRhdGE7Cj4+PiAtCWludCBzYW1wbGluZ19yYXRlOwo+Pj4gLQlib29sIHJ1 biA9IGZhbHNlOwo+Pj4gLQlib29sIHRlc3Q7Cj4+PiAtCWludCBpLCBqOwo+Pj4gLQlpbnQgcmV0 Owo+Pj4gLQo+Pj4gLQlkYXRhLmFsc2EgPSBhbHNhX2luaXQoKTsKPj4+IC0JaWd0X2Fzc2VydChk YXRhLmFsc2EpOwo+Pj4gLQo+Pj4gLQlyZXQgPSBhbHNhX29wZW5faW5wdXQoZGF0YS5hbHNhLCBD QVBUVVJFX0RFVklDRV9OQU1FKTsKPj4+IC0JaWd0X2Fzc2VydChyZXQgPj0gMCk7Cj4+PiAtCj4+ PiAtCWFsc2FfY29uZmlndXJlX2lucHV0KGRhdGEuYWxzYSwgQ0FQVFVSRV9DSEFOTkVMUywKPj4+ IC0JCQkgICAgIENBUFRVUkVfU0FNUExFX1JBVEUpOwo+Pj4gLQo+Pj4gLQlhbHNhX3JlZ2lzdGVy X2lucHV0X2NhbGxiYWNrKGRhdGEuYWxzYSwgaW5wdXRfY2FsbGJhY2ssICZkYXRhLAo+Pj4gLQkJ CQkgICAgIENBUFRVUkVfRlJBTUVTKTsKPj4+IC0KPj4+IC0JZm9yIChpID0gMDsgaSA8IHNhbXBs aW5nX3JhdGVzX2NvdW50OyBpKyspIHsKPj4+IC0JCXJldCA9IGFsc2Ffb3Blbl9vdXRwdXQoZGF0 YS5hbHNhLCBkZXZpY2VfbmFtZSk7Cj4+PiAtCQlpZ3RfYXNzZXJ0KHJldCA+PSAwKTsKPj4+IC0K Pj4+IC0JCXNhbXBsaW5nX3JhdGUgPSBzYW1wbGluZ19yYXRlc1tpXTsKPj4+IC0KPj4+IC0JCXRl c3QgPSBhbHNhX3Rlc3Rfb3V0cHV0X2NvbmZpZ3VyYXRpb24oZGF0YS5hbHNhLAo+Pj4gLQkJCQkJ CSAgICAgIFBMQVlCQUNLX0NIQU5ORUxTLAo+Pj4gLQkJCQkJCSAgICAgIHNhbXBsaW5nX3JhdGUp Owo+Pj4gLQkJaWYgKCF0ZXN0KSB7Cj4+PiAtCQkJYWxzYV9jbG9zZV9vdXRwdXQoZGF0YS5hbHNh KTsKPj4+IC0JCQljb250aW51ZTsKPj4+IC0JCX0KPj4+IC0KPj4+IC0JCWlndF9kZWJ1ZygiVGVz dGluZyB3aXRoIHNhbXBsaW5nIHJhdGUgJWRcbiIsIHNhbXBsaW5nX3JhdGUpOwo+Pj4gLQo+Pj4g LQkJYWxzYV9jb25maWd1cmVfb3V0cHV0KGRhdGEuYWxzYSwgUExBWUJBQ0tfQ0hBTk5FTFMsCj4+ PiAtCQkJCSAgICAgICBzYW1wbGluZ19yYXRlKTsKPj4+IC0KPj4+IC0JCWRhdGEuc2lnbmFsID0g YXVkaW9fc2lnbmFsX2luaXQoUExBWUJBQ0tfQ0hBTk5FTFMsCj4+PiAtCQkJCQkJc2FtcGxpbmdf cmF0ZSk7Cj4+PiAtCQlpZ3RfYXNzZXJ0KGRhdGEuc2lnbmFsKTsKPj4+IC0KPj4+IC0JCWZvciAo aiA9IDA7IGogPCB0ZXN0X2ZyZXF1ZW5jaWVzX2NvdW50OyBqKyspCj4+PiAtCQkJYXVkaW9fc2ln bmFsX2FkZF9mcmVxdWVuY3koZGF0YS5zaWduYWwsCj4+PiAtCQkJCQkJICAgdGVzdF9mcmVxdWVu Y2llc1tqXSk7Cj4+PiAtCj4+PiAtCQlhdWRpb19zaWduYWxfc3ludGhlc2l6ZShkYXRhLnNpZ25h bCk7Cj4+PiAtCj4+PiAtCQlhbHNhX3JlZ2lzdGVyX291dHB1dF9jYWxsYmFjayhkYXRhLmFsc2Es IG91dHB1dF9jYWxsYmFjaywKPj4+IC0JCQkJCSAgICAgICZkYXRhLCBQTEFZQkFDS19GUkFNRVMp Owo+Pj4gLQo+Pj4gLQkJZGF0YS5zdHJlYWsgPSAwOwo+Pj4gLQo+Pj4gLQkJcmV0ID0gYWxzYV9y dW4oZGF0YS5hbHNhLCBSVU5fVElNRU9VVCk7Cj4+PiAtCQlpZ3RfYXNzZXJ0KHJldCA+IDApOwo+ Pj4gLQo+Pj4gLQkJYXVkaW9fc2lnbmFsX2NsZWFuKGRhdGEuc2lnbmFsKTsKPj4+IC0JCWZyZWUo ZGF0YS5zaWduYWwpOwo+Pj4gLQo+Pj4gLQkJYWxzYV9jbG9zZV9vdXRwdXQoZGF0YS5hbHNhKTsK Pj4+IC0KPj4+IC0JCXJ1biA9IHRydWU7Cj4+PiAtCX0KPj4+IC0KPj4+IC0JLyogTWFrZSBzdXJl IHdlIHRlc3RlZCBhdCBsZWFzdCBvbmUgZnJlcXVlbmN5ICovCj4+PiAtCWlndF9hc3NlcnQocnVu KTsKPj4+IC0KPj4+IC0JYWxzYV9jbG9zZV9pbnB1dChkYXRhLmFsc2EpOwo+Pj4gLQlmcmVlKGRh dGEuYWxzYSk7Cj4+PiAtfQo+Pj4gLQo+Pj4gLXN0YXRpYyB2b2lkIHRlc3Rfc3VzcGVuZF9yZXN1 bWVfaW50ZWdyaXR5KGNvbnN0IGNoYXIgKmRldmljZV9uYW1lLAo+Pj4gLQkJCQkJICBlbnVtIGln dF9zdXNwZW5kX3N0YXRlIHN0YXRlLAo+Pj4gLQkJCQkJICBlbnVtIGlndF9zdXNwZW5kX3Rlc3Qg dGVzdCkKPj4+IC17Cj4+PiAtCXRlc3RfaW50ZWdyaXR5KGRldmljZV9uYW1lKTsKPj4+IC0KPj4+ IC0JaWd0X3N5c3RlbV9zdXNwZW5kX2F1dG9yZXN1bWUoc3RhdGUsIHRlc3QpOwo+Pj4gLQo+Pj4g LQl0ZXN0X2ludGVncml0eShkZXZpY2VfbmFtZSk7Cj4+PiAtfQo+Pj4gLQo+Pj4gLWlndF9tYWlu Cj4+PiAtewo+Pj4gLQlpZ3Rfc3VidGVzdCgiaGRtaS1pbnRlZ3JpdHkiKQo+Pj4gLQkJdGVzdF9p bnRlZ3JpdHkoIkhETUkiKTsKPj4+IC0KPj4+IC0JaWd0X3N1YnRlc3QoImhkbWktaW50ZWdyaXR5 LWFmdGVyLXN1c3BlbmQiKQo+Pj4gLQkJdGVzdF9zdXNwZW5kX3Jlc3VtZV9pbnRlZ3JpdHkoIkhE TUkiLCBTVVNQRU5EX1NUQVRFX01FTSwKPj4+IC0JCQkJCSAgICAgIFNVU1BFTkRfVEVTVF9OT05F KTsKPj4+IC0KPj4+IC0JaWd0X3N1YnRlc3QoImhkbWktaW50ZWdyaXR5LWFmdGVyLWhpYmVybmF0 ZSIpCj4+PiAtCQl0ZXN0X3N1c3BlbmRfcmVzdW1lX2ludGVncml0eSgiSERNSSIsIFNVU1BFTkRf U1RBVEVfRElTSywKPj4+IC0JCQkJCSAgICAgIFNVU1BFTkRfVEVTVF9ERVZJQ0VTKTsKPj4+IC19 Cj4+PiBkaWZmIC0tZ2l0IGEvdGVzdHMva21zX2NoYW1lbGl1bS5jIGIvdGVzdHMva21zX2NoYW1l bGl1bS5jCj4+PiBpbmRleCAyZGMxMDQ5ZC4uMjk3NGZmNjkgMTAwNjQ0Cj4+PiAtLS0gYS90ZXN0 cy9rbXNfY2hhbWVsaXVtLmMKPj4+ICsrKyBiL3Rlc3RzL2ttc19jaGFtZWxpdW0uYwo+Pj4gQEAg LTQxMyw3ICs0MTMsNyBAQCB0ZXN0X3N1c3BlbmRfcmVzdW1lX2VkaWRfY2hhbmdlKGRhdGFfdCAq ZGF0YSwgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0LAo+Pj4gIAo+Pj4gIHN0YXRpYyBpZ3Rf b3V0cHV0X3QgKgo+Pj4gIHByZXBhcmVfb3V0cHV0KGRhdGFfdCAqZGF0YSwKPj4+IC0JICAgICAg IHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCkKPj4+ICsJICAgICAgIHN0cnVjdCBjaGFtZWxp dW1fcG9ydCAqcG9ydCwgYm9vbCBzZXRfZWRpZCkKPj4+ICB7Cj4+PiAgCWlndF9kaXNwbGF5X3Qg KmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPj4+ICAJaWd0X291dHB1dF90ICpvdXRwdXQ7Cj4+ PiBAQCAtNDI4LDcgKzQyOCw4IEBAIHByZXBhcmVfb3V0cHV0KGRhdGFfdCAqZGF0YSwKPj4+ICAJ LyogVGhlIGNoYW1lbGl1bSdzIGRlZmF1bHQgRURJRCBoYXMgYSBsb3Qgb2YgcmVzb2x1dGlvbnMs IHdheSBtb3JlIHRoZW4KPj4+ICAJICogd2UgbmVlZCB0byB0ZXN0Cj4+PiAgCSAqLwo+Pj4gLQlj aGFtZWxpdW1fcG9ydF9zZXRfZWRpZChkYXRhLT5jaGFtZWxpdW0sIHBvcnQsIGRhdGEtPmVkaWRf aWQpOwo+Pj4gKwlpZiAoc2V0X2VkaWQpCj4+PiArCQljaGFtZWxpdW1fcG9ydF9zZXRfZWRpZChk YXRhLT5jaGFtZWxpdW0sIHBvcnQsIGRhdGEtPmVkaWRfaWQpOwo+Pj4gIAo+Pj4gIAljaGFtZWxp dW1fcGx1ZyhkYXRhLT5jaGFtZWxpdW0sIHBvcnQpOwo+Pj4gIAl3YWl0X2Zvcl9jb25uZWN0b3Io ZGF0YSwgcG9ydCwgRFJNX01PREVfQ09OTkVDVEVEKTsKPj4+IEBAIC02MTMsNyArNjE0LDcgQEAg c3RhdGljIHZvaWQgdGVzdF9kaXNwbGF5X29uZV9tb2RlKGRhdGFfdCAqZGF0YSwgc3RydWN0IGNo YW1lbGl1bV9wb3J0ICpwb3J0LAo+Pj4gIAo+Pj4gIAlyZXNldF9zdGF0ZShkYXRhLCBwb3J0KTsK Pj4+ICAKPj4+IC0Jb3V0cHV0ID0gcHJlcGFyZV9vdXRwdXQoZGF0YSwgcG9ydCk7Cj4+PiArCW91 dHB1dCA9IHByZXBhcmVfb3V0cHV0KGRhdGEsIHBvcnQsIHRydWUpOwo+Pj4gIAljb25uZWN0b3Ig PSBjaGFtZWxpdW1fcG9ydF9nZXRfY29ubmVjdG9yKGRhdGEtPmNoYW1lbGl1bSwgcG9ydCwgZmFs c2UpOwo+Pj4gIAlwcmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxhbmVfdHlwZShvdXRwdXQsIERS TV9QTEFORV9UWVBFX1BSSU1BUlkpOwo+Pj4gIAlpZ3RfYXNzZXJ0KHByaW1hcnkpOwo+Pj4gQEAg LTY0NCw3ICs2NDUsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2Rpc3BsYXlfYWxsX21vZGVzKGRhdGFf dCAqZGF0YSwgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0LAo+Pj4gIAo+Pj4gIAlyZXNldF9z dGF0ZShkYXRhLCBwb3J0KTsKPj4+ICAKPj4+IC0Jb3V0cHV0ID0gcHJlcGFyZV9vdXRwdXQoZGF0 YSwgcG9ydCk7Cj4+PiArCW91dHB1dCA9IHByZXBhcmVfb3V0cHV0KGRhdGEsIHBvcnQsIHRydWUp Owo+Pj4gIAljb25uZWN0b3IgPSBjaGFtZWxpdW1fcG9ydF9nZXRfY29ubmVjdG9yKGRhdGEtPmNo YW1lbGl1bSwgcG9ydCwgZmFsc2UpOwo+Pj4gIAlwcmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxh bmVfdHlwZShvdXRwdXQsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOwo+Pj4gIAlpZ3RfYXNzZXJ0 KHByaW1hcnkpOwo+Pj4gQEAgLTY3OSw3ICs2ODAsNyBAQCB0ZXN0X2Rpc3BsYXlfZnJhbWVfZHVt cChkYXRhX3QgKmRhdGEsIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCkKPj4+ICAKPj4+ICAJ cmVzZXRfc3RhdGUoZGF0YSwgcG9ydCk7Cj4+PiAgCj4+PiAtCW91dHB1dCA9IHByZXBhcmVfb3V0 cHV0KGRhdGEsIHBvcnQpOwo+Pj4gKwlvdXRwdXQgPSBwcmVwYXJlX291dHB1dChkYXRhLCBwb3J0 LCB0cnVlKTsKPj4+ICAJY29ubmVjdG9yID0gY2hhbWVsaXVtX3BvcnRfZ2V0X2Nvbm5lY3Rvcihk YXRhLT5jaGFtZWxpdW0sIHBvcnQsIGZhbHNlKTsKPj4+ICAJcHJpbWFyeSA9IGlndF9vdXRwdXRf Z2V0X3BsYW5lX3R5cGUob3V0cHV0LCBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKPj4+ICAJaWd0 X2Fzc2VydChwcmltYXJ5KTsKPj4+IEBAIC03MTAsNiArNzExLDI2NiBAQCB0ZXN0X2Rpc3BsYXlf ZnJhbWVfZHVtcChkYXRhX3QgKmRhdGEsIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCkKPj4+ ICAJZHJtTW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKPj4+ICB9Cj4+PiAgCj4+PiArCj4+ PiArLyogUGxheWJhY2sgcGFyYW1ldGVycyBjb250cm9sIHRoZSBhdWRpbyBzaWduYWwgd2Ugc3lu dGhlc2l6ZSBhbmQgc2VuZCAqLwo+Pj4gKyNkZWZpbmUgUExBWUJBQ0tfQ0hBTk5FTFMgMgo+Pj4g KyNkZWZpbmUgUExBWUJBQ0tfU0FNUExFUyAxMDI0Cj4+PiArCj4+PiArLyogQ2FwdHVyZSBwYXJl bWV0ZXJzIGNvbnRyb2wgdGhlIGF1ZGlvIHNpZ25hbCB3ZSByZWNlaXZlICovCj4+PiArI2RlZmlu ZSBDQVBUVVJFX1NBTVBMRVMgMjA0OAo+Pj4gKwo+Pj4gKyNkZWZpbmUgQVVESU9fRFVSQVRJT04g MjAwMCAvKiBtcyAqLwo+Pj4gKy8qIEEgc3RyZWFrIG9mIDMgZ2l2ZXMgY29uZmlkZW5jZSB0aGF0 IHRoZSBzaWduYWwgaXMgZ29vZC4gKi8KPj4+ICsjZGVmaW5lIE1JTl9TVFJFQUsgMwo+Pj4gKwo+ Pj4gKy8qIFRPRE86IENoYW1lbGl1bSBvbmx5IHN1cHBvcnRzIDQ4S0h6IGZvciBub3cgKi8KPj4+ ICtzdGF0aWMgaW50IHNhbXBsaW5nX3JhdGVzW10gPSB7Cj4+PiArLyoJMzIwMDAsICovCj4+PiAr LyoJNDQxMDAsICovCj4+PiArCTQ4MDAwLAo+Pj4gKy8qCTg4MjAwLCAqLwo+Pj4gKy8qCTk2MDAw LCAqLwo+Pj4gKy8qCTE3NjQwMCwgKi8KPj4+ICsvKgkxOTIwMDAsICovCj4+PiArfTsKPj4+ICsK Pj4+ICtzdGF0aWMgaW50IHNhbXBsaW5nX3JhdGVzX2NvdW50ID0gc2l6ZW9mKHNhbXBsaW5nX3Jh dGVzKSAvIHNpemVvZihpbnQpOwo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgdGVzdF9mcmVxdWVuY2ll c1tdID0gewo+Pj4gKwkzMDAsCj4+PiArCTYwMCwKPj4+ICsJMTIwMCwKPj4+ICsJODAwMDAsCj4+ PiArCTEwMDAwLAo+Pj4gK307Cj4+PiArCj4+PiArc3RhdGljIGludCB0ZXN0X2ZyZXF1ZW5jaWVz X2NvdW50ID0gc2l6ZW9mKHRlc3RfZnJlcXVlbmNpZXMpIC8gc2l6ZW9mKGludCk7Cj4+PiArCj4+ PiArc3RhdGljIGludAo+Pj4gK291dHB1dF9jYWxsYmFjayh2b2lkICpkYXRhLCBzaG9ydCAqYnVm ZmVyLCBpbnQgZnJhbWVzKQo+Pj4gK3sKPj4+ICsJc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFs ID0gKHN0cnVjdCBhdWRpb19zaWduYWwgKikgZGF0YTsKPj4+ICsKPj4+ICsJYXVkaW9fc2lnbmFs X2ZpbGwoc2lnbmFsLCBidWZmZXIsIGZyYW1lcyk7Cj4+PiArCj4+PiArCXJldHVybiAwOwo+Pj4g K30KPj4+ICsKPj4+ICtzdGF0aWMgYm9vbAo+Pj4gK2RvX3Rlc3RfZGlzcGxheV9hdWRpbyhkYXRh X3QgKmRhdGEsIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCwKPj4+ICsJCSAgICAgIHN0cnVj dCBhbHNhICphbHNhLCBpbnQgcGxheWJhY2tfY2hhbm5lbHMsCj4+PiArCQkgICAgICBpbnQgcGxh eWJhY2tfcmF0ZSkKPj4+ICt7Cj4+PiArCWludCByZXQsIGNhcHR1cmVfcmF0ZSwgY2FwdHVyZV9j aGFubmVscywgbXNlYzsKPj4+ICsJc3RydWN0IGNoYW1lbGl1bV9hdWRpb19maWxlICphdWRpb19m aWxlOwo+Pj4gKwlzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqc3RyZWFtOwo+Pj4gKwllbnVtIGNo YW1lbGl1bV9zdHJlYW1fcmVhbHRpbWVfbW9kZSBzdHJlYW1fbW9kZTsKPj4+ICsJc3RydWN0IGF1 ZGlvX3NpZ25hbCAqc2lnbmFsOwo+Pj4gKwlpbnQzMl90ICpyZWN2LCAqYnVmOwo+Pj4gKwlkb3Vi bGUgKmNoYW5uZWw7Cj4+PiArCXNpemVfdCBpLCBzdHJlYWssIHBhZ2VfY291bnQ7Cj4+PiArCXNp emVfdCByZWN2X2xlbiwgYnVmX2xlbiwgYnVmX2NhcCwgYnVmX3NpemUsIGNoYW5uZWxfbGVuOwo+ Pj4gKwlib29sIG9rOwo+Pj4gKwljaGFyIGR1bXBfc3VmZml4WzY0XTsKPj4+ICsJY2hhciAqZHVt cF9wYXRoID0gTlVMTDsKPj4+ICsJaW50IGR1bXBfZmQgPSAtMTsKPj4+ICsKPj4+ICsJaWYgKCFh bHNhX3Rlc3Rfb3V0cHV0X2NvbmZpZ3VyYXRpb24oYWxzYSwgcGxheWJhY2tfY2hhbm5lbHMsCj4+ PiArCQkJCQkgICAgcGxheWJhY2tfcmF0ZSkpCj4+PiArCQlyZXR1cm4gZmFsc2U7Cj4+PiArCj4+ PiArCWlndF9kZWJ1ZygiVGVzdGluZyB3aXRoIHBsYXliYWNrIHNhbXBsaW5nIHJhdGUgJWRcbiIs IHBsYXliYWNrX3JhdGUpOwo+Pj4gKwlhbHNhX2NvbmZpZ3VyZV9vdXRwdXQoYWxzYSwgcGxheWJh Y2tfY2hhbm5lbHMsIHBsYXliYWNrX3JhdGUpOwo+Pj4gKwo+Pj4gKwljaGFtZWxpdW1fc3RhcnRf Y2FwdHVyaW5nX2F1ZGlvKGRhdGEtPmNoYW1lbGl1bSwgcG9ydCwgZmFsc2UpOwo+Pj4gKwo+Pj4g KwlzdHJlYW0gPSBjaGFtZWxpdW1fc3RyZWFtX2luaXQoKTsKPj4+ICsJaWd0X2Fzc2VydChzdHJl YW0pOwo+Pj4gKwo+Pj4gKwlzdHJlYW1fbW9kZSA9IENIQU1FTElVTV9TVFJFQU1fUkVBTFRJTUVf U1RPUF9XSEVOX09WRVJGTE9XOwo+Pj4gKwlvayA9IGNoYW1lbGl1bV9zdHJlYW1fZHVtcF9yZWFs dGltZV9hdWRpbyhzdHJlYW0sIHN0cmVhbV9tb2RlKTsKPj4+ICsJaWd0X2Fzc2VydChvayk7Cj4+ PiArCj4+PiArCWNoYW1lbGl1bV9zdHJlYW1fYXVkaW9fZm9ybWF0KHN0cmVhbSwgJmNhcHR1cmVf cmF0ZSwgJmNhcHR1cmVfY2hhbm5lbHMpOwo+Pj4gKwo+Pj4gKwlpZiAoaWd0X2ZyYW1lX2R1bXBf aXNfZW5hYmxlZCgpKSB7Cj4+PiArCQlzbnByaW50ZihkdW1wX3N1ZmZpeCwgc2l6ZW9mKGR1bXBf c3VmZml4KSwgImNhcHR1cmUtJWRjaC0lZCIsCj4+PiArCQkJIHBsYXliYWNrX2NoYW5uZWxzLCBw bGF5YmFja19yYXRlKTsKPj4+ICsKPj4+ICsJCWR1bXBfZmQgPSBhdWRpb19jcmVhdGVfd2F2X2Zp bGVfczMyX2xlKGR1bXBfc3VmZml4LAo+Pj4gKwkJCQkJCSAgICAgICBjYXB0dXJlX3JhdGUsCj4+ PiArCQkJCQkJICAgICAgIGNhcHR1cmVfY2hhbm5lbHMsCj4+PiArCQkJCQkJICAgICAgICZkdW1w X3BhdGgpOwo+Pj4gKwkJaWd0X2Fzc2VydChkdW1wX2ZkID49IDApOwo+Pj4gKwl9Cj4+PiArCj4+ PiArCXNpZ25hbCA9IGF1ZGlvX3NpZ25hbF9pbml0KHBsYXliYWNrX2NoYW5uZWxzLCBwbGF5YmFj a19yYXRlKTsKPj4+ICsJaWd0X2Fzc2VydChzaWduYWwpOwo+Pj4gKwo+Pj4gKwlmb3IgKGkgPSAw OyBpIDwgdGVzdF9mcmVxdWVuY2llc19jb3VudDsgaSsrKQo+Pj4gKwkJYXVkaW9fc2lnbmFsX2Fk ZF9mcmVxdWVuY3koc2lnbmFsLCB0ZXN0X2ZyZXF1ZW5jaWVzW2ldKTsKPj4+ICsJYXVkaW9fc2ln bmFsX3N5bnRoZXNpemUoc2lnbmFsKTsKPj4+ICsKPj4+ICsJYWxzYV9yZWdpc3Rlcl9vdXRwdXRf Y2FsbGJhY2soYWxzYSwgb3V0cHV0X2NhbGxiYWNrLCBzaWduYWwsCj4+PiArCQkJCSAgICAgIFBM QVlCQUNLX1NBTVBMRVMpOwo+Pj4gKwo+Pj4gKwkvKiBUT0RPOiBkZXRlY3Qgc2lnbmFsIGluIHJl YWwtdGltZSAqLwo+Pj4gKwlyZXQgPSBhbHNhX3J1bihhbHNhLCBBVURJT19EVVJBVElPTik7Cj4+ PiArCWlndF9hc3NlcnQocmV0ID09IDApOwo+Pj4gKwo+Pj4gKwlhbHNhX2Nsb3NlX291dHB1dChh bHNhKTsKPj4+ICsKPj4+ICsJLyogTmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxMjgsIGJlY2F1 c2UgdGhhdCdzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcwo+Pj4gKwkgKiB3ZSBnZXQgcGVyIGNoYW5u ZWwgZWFjaCB0aW1lIHdlIHJlY2VpdmUgYW4gYXVkaW8gcGFnZSBmcm9tIHRoZQo+Pj4gKwkgKiBD aGFtZWxpdW0gZGV2aWNlLiAqLwo+Pj4gKwljaGFubmVsX2xlbiA9IENBUFRVUkVfU0FNUExFUzsK Pj4+ICsJY2hhbm5lbCA9IG1hbGxvYyhzaXplb2YoZG91YmxlKSAqIGNoYW5uZWxfbGVuKTsKPj4+ ICsKPj4+ICsJYnVmX2NhcCA9IGNhcHR1cmVfY2hhbm5lbHMgKiBjaGFubmVsX2xlbjsKPj4+ICsJ YnVmID0gbWFsbG9jKHNpemVvZihpbnQzMl90KSAqIGJ1Zl9jYXApOwo+Pj4gKwlidWZfbGVuID0g MDsKPj4+ICsKPj4+ICsJcmVjdiA9IE5VTEw7Cj4+PiArCXJlY3ZfbGVuID0gMDsKPj4+ICsKPj4+ ICsJc3RyZWFrID0gMDsKPj4+ICsJbXNlYyA9IDA7Cj4+PiArCWkgPSAwOwo+Pj4gKwl3aGlsZSAo c3RyZWFrIDwgTUlOX1NUUkVBSyAmJiBtc2VjIDwgQVVESU9fRFVSQVRJT04pIHsKPj4+ICsJCW9r ID0gY2hhbWVsaXVtX3N0cmVhbV9yZWNlaXZlX3JlYWx0aW1lX2F1ZGlvKHN0cmVhbSwKPj4+ICsJ CQkJCQkJICAgICAmcGFnZV9jb3VudCwKPj4+ICsJCQkJCQkJICAgICAmcmVjdiwgJnJlY3ZfbGVu KTsKPj4+ICsJCWlndF9hc3NlcnQob2spOwo+Pj4gKwo+Pj4gKwkJbWVtY3B5KCZidWZbYnVmX2xl bl0sIHJlY3YsIHJlY3ZfbGVuICogc2l6ZW9mKGludDMyX3QpKTsKPj4+ICsJCWJ1Zl9sZW4gKz0g cmVjdl9sZW47Cj4+PiArCj4+PiArCQlpZiAoYnVmX2xlbiA8IGJ1Zl9jYXApCj4+PiArCQkJY29u dGludWU7Cj4+PiArCQlpZ3RfYXNzZXJ0KGJ1Zl9sZW4gPT0gYnVmX2NhcCk7Cj4+PiArCj4+PiAr CQlpZiAoZHVtcF9mZCA+PSAwKSB7Cj4+PiArCQkJYnVmX3NpemUgPSBidWZfbGVuICogc2l6ZW9m KGludDMyX3QpOwo+Pj4gKwkJCWlndF9hc3NlcnQod3JpdGUoZHVtcF9mZCwgYnVmLCBidWZfc2l6 ZSkgPT0gYnVmX3NpemUpOwo+Pj4gKwkJfQo+Pj4gKwo+Pj4gKwkJLyogVE9ETzogY2hlY2sgb3Ro ZXIgY2hhbm5lbHMgdG9vLCBub3QganVzdCB0aGUgZmlyc3Qgb25lICovCj4+PiArCQlhdWRpb19l eHRyYWN0X2NoYW5uZWxfczMyX2xlKGNoYW5uZWwsIGNoYW5uZWxfbGVuLCBidWYsIGJ1Zl9sZW4s Cj4+PiArCQkJCQkgICAgIGNhcHR1cmVfY2hhbm5lbHMsIDApOwo+Pj4gKwo+Pj4gKwkJbXNlYyA9 IGkgKiBjaGFubmVsX2xlbiAvIChkb3VibGUpIGNhcHR1cmVfcmF0ZSAqIDEwMDA7Cj4+PiArCQlp Z3RfZGVidWcoIkRldGVjdGluZyBhdWRpbyBzaWduYWwsIHQ9JWQgbXNlY1xuIiwgbXNlYyk7Cj4+ PiArCj4+PiArCQlpZiAoYXVkaW9fc2lnbmFsX2RldGVjdChzaWduYWwsIGNhcHR1cmVfcmF0ZSwg Y2hhbm5lbCwKPj4+ICsJCQkJCWNoYW5uZWxfbGVuKSkKPj4+ICsJCQlzdHJlYWsrKzsKPj4+ICsJ CWVsc2UKPj4+ICsJCQlzdHJlYWsgPSAwOwo+Pj4gKwo+Pj4gKwkJYnVmX2xlbiA9IDA7Cj4+PiAr CQlpKys7Cj4+PiArCX0KPj4+ICsKPj4+ICsJaWYgKGR1bXBfZmQgPj0gMCkgewo+Pj4gKwkJY2xv c2UoZHVtcF9mZCk7Cj4+PiArCQlpZiAoc3RyZWFrID09IE1JTl9TVFJFQUspIHsKPj4+ICsJCQkv KiBUZXN0IHN1Y2NlZWRlZCwgbm8gbmVlZCB0byBrZWVwIHRoZSBjYXB0dXJlZCBkYXRhICovCj4+ PiArCQkJdW5saW5rKGR1bXBfcGF0aCk7Cj4+PiArCQl9IGVsc2UKPj4+ICsJCQlpZ3RfZGVidWco IlNhdmVkIGNhcHR1cmVkIGF1ZGlvIGRhdGEgdG8gJXNcbiIsIGR1bXBfcGF0aCk7Cj4+PiArCQlm cmVlKGR1bXBfcGF0aCk7Cj4+PiArCX0KPj4+ICsKPj4+ICsJZnJlZShyZWN2KTsKPj4+ICsJZnJl ZShidWYpOwo+Pj4gKwlmcmVlKGNoYW5uZWwpOwo+Pj4gKwo+Pj4gKwlvayA9IGNoYW1lbGl1bV9z dHJlYW1fc3RvcF9yZWFsdGltZV9hdWRpbyhzdHJlYW0pOwo+Pj4gKwlpZ3RfYXNzZXJ0KG9rKTsK Pj4+ICsKPj4+ICsJYXVkaW9fZmlsZSA9IGNoYW1lbGl1bV9zdG9wX2NhcHR1cmluZ19hdWRpbyhk YXRhLT5jaGFtZWxpdW0sCj4+PiArCQkJCQkJICAgIHBvcnQpOwo+Pj4gKwlpZiAoYXVkaW9fZmls ZSkgewo+Pj4gKwkJaWd0X2RlYnVnKCJBdWRpbyBmaWxlIHNhdmVkIG9uIHRoZSBDaGFtZWxpdW0g aW4gJXNcbiIsCj4+PiArCQkJICBhdWRpb19maWxlLT5wYXRoKTsKPj4+ICsJCWNoYW1lbGl1bV9k ZXN0cm95X2F1ZGlvX2ZpbGUoYXVkaW9fZmlsZSk7Cj4+PiArCX0KPj4KPj4gSSB3b3VsZCBzdWdn ZXN0IHRvIG9ubHkgZHVtcCB0aGlzIGZpbGUgb24gZmFpbHVyZSwgbm90IHdoZW4gaGF2aW5nIGEK Pj4gc3VjY2Vzcy4KPiAKPiAxLiBXZSBjYW4ndCBkZWNpZGUgdGhpcyBhZnRlci10aGUtZmFjdDog d2UgY2FuIG9ubHkgZGVjaWRlIHdoZXRoZXIgd2UKPiAgICBkdW1wIG9yIG5vdCBiZWZvcmUgc3Rh cnRpbmcgdGhlIGNhcHR1cmUuCj4gMi4gVGhlcmUgYXJlIHR3byBraW5kcyBvZiBhdWRpbyBkdW1w czogbG9jYWwgKG9uIHRoZSBEVVQsIHNlZSBkdW1wX2ZkKSAKPiAgICBhbmQgcmVtb3RlIChvbiB0 aGUgQ2hhbWVsaXVtLCBzZWUgdGhlIGxhc3QgcGFyYW0gb2YgCj4gICAgY2hhbWVsaXVtX3N0YXJ0 X2NhcHR1cmluZ19hdWRpbykuIElmIHRoZSBmaWxlIGhhcyBiZWVuIGR1bXBlZCBvbiB0aGUKPiAg ICBDaGFtZWxpdW0sIGNoYW1lbGl1bV9zdG9wX2NhcHR1cmluZ19hdWRpbyB3aWxsIHJldHVybiB0 aGUgYXVkaW8gZmlsZQo+ICAgIGRldGFpbHMuIEl0J3Mgc29tZXRpbWVzIHVzZWZ1bCB0byBlbmFi bGUgQ2hhbWVsaXVtIGR1bXBzIGZvcgo+ICAgIGRlYnVnZ2luZyBwdXJwb3Nlcy4KCk9mIGNvdXJz ZSEgU29ycnkgZm9yIHRoZSBjb25mdXNpb24hIFdoZXJlIGFyZSB3ZSBkdW1waW5nIHRoZSBnZW5l cmF0ZWQKYW5kIHJlY2VpdmVkIFdBVnMgd2hlbiB0aGUgdGVzdCBpcyBmYWlsaW5nIHRoZW4/IElz IHRoYXQgYSBUT0RPPwoKPiAKPj4+ICsKPj4+ICsJYXVkaW9fc2lnbmFsX2NsZWFuKHNpZ25hbCk7 Cj4+PiArCWZyZWUoc2lnbmFsKTsKPj4+ICsKPj4+ICsJY2hhbWVsaXVtX3N0cmVhbV9kZWluaXQo c3RyZWFtKTsKPj4+ICsKPj4+ICsJaWd0X2Fzc2VydChzdHJlYWsgPT0gTUlOX1NUUkVBSyk7Cj4+ PiArCXJldHVybiB0cnVlOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZAo+Pj4gK3Rlc3Rf ZGlzcGxheV9hdWRpbyhkYXRhX3QgKmRhdGEsIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCwK Pj4+ICsJCSAgIGNvbnN0IGNoYXIgKmF1ZGlvX2RldmljZSkKPj4+ICt7Cj4+PiArCWJvb2wgcnVu ID0gZmFsc2U7Cj4+PiArCXN0cnVjdCBhbHNhICphbHNhOwo+Pj4gKwlpbnQgcmV0Owo+Pj4gKwlp Z3Rfb3V0cHV0X3QgKm91dHB1dDsKPj4+ICsJaWd0X3BsYW5lX3QgKnByaW1hcnk7Cj4+PiArCXN0 cnVjdCBpZ3RfZmIgZmI7Cj4+PiArCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKPj4+ICsJZHJtTW9k ZUNvbm5lY3RvciAqY29ubmVjdG9yOwo+Pj4gKwlpbnQgZmJfaWQsIGk7Cj4+PiArCj4+PiArCWln dF9yZXF1aXJlKGFsc2FfaGFzX2V4Y2x1c2l2ZV9hY2Nlc3MoKSk7Cj4+PiArCj4+PiArCWFsc2Eg PSBhbHNhX2luaXQoKTsKPj4+ICsJaWd0X2Fzc2VydChhbHNhKTsKPj4+ICsKPj4+ICsJcmVzZXRf c3RhdGUoZGF0YSwgcG9ydCk7Cj4+PiArCj4+PiArCS8qIFVzZSB0aGUgZGVmYXVsdCBDaGFtZWxp dW0gRURJRCBmb3IgdGhpcyB0ZXN0LCBhcyB0aGUgYmFzZSBJR1QgRURJRAo+Pj4gKwkgKiBkb2Vz bid0IGFkdmVydGlzZSBhdWRpbyBzdXBwb3J0IChzZWUgZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlv IGluCj4+PiArCSAqIHRoZSBrZXJuZWwgdHJlZSkuICovCj4+PiArCW91dHB1dCA9IHByZXBhcmVf b3V0cHV0KGRhdGEsIHBvcnQsIGZhbHNlKTsKPj4+ICsJY29ubmVjdG9yID0gY2hhbWVsaXVtX3Bv cnRfZ2V0X2Nvbm5lY3RvcihkYXRhLT5jaGFtZWxpdW0sIHBvcnQsIGZhbHNlKTsKPj4+ICsJcHJp bWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lX3R5cGUob3V0cHV0LCBEUk1fUExBTkVfVFlQRV9Q UklNQVJZKTsKPj4+ICsJaWd0X2Fzc2VydChwcmltYXJ5KTsKPj4+ICsKPj4+ICsJaWd0X2Fzc2Vy dChjb25uZWN0b3ItPmNvdW50X21vZGVzID4gMCk7Cj4+PiArCW1vZGUgPSAmY29ubmVjdG9yLT5t b2Rlc1swXTsKPj4+ICsKPj4+ICsJZmJfaWQgPSBpZ3RfY3JlYXRlX2NvbG9yX3BhdHRlcm5fZmIo ZGF0YS0+ZHJtX2ZkLAo+Pj4gKwkJCQkJICAgIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxh eSwKPj4+ICsJCQkJCSAgICBEUk1fRk9STUFUX1hSR0I4ODg4LAo+Pj4gKwkJCQkJICAgIExPQ0FM X0RSTV9GT1JNQVRfTU9EX05PTkUsCj4+PiArCQkJCQkgICAgMCwgMCwgMCwgJmZiKTsKPj4+ICsJ aWd0X2Fzc2VydChmYl9pZCA+IDApOwo+Pj4gKwo+Pj4gKwkvKiBFbmFibGUgdGhlIG91dHB1dCBi ZWNhdXNlIHRoZSByZWNlaXZlciB3b24ndCB0cnkgdG8gcmVjZWl2ZSBhdWRpbyBpZgo+Pj4gKwkg KiBpdCBkb2Vzbid0IHJlY2VpdmUgdmlkZW8uICovCj4+IE1heWJlIG1vdmUgdGhlIGFib3ZlIGNv bW1lbnQgdG8gYWJvdmUgaWd0X2Fzc2VydChjb25uZWN0b3ItPmNvdW50X21vZGVzID4gMCk7ID8K PiAKPiBBY2sKPiAKPj4+ICsJZW5hYmxlX291dHB1dChkYXRhLCBwb3J0LCBvdXRwdXQsIG1vZGUs ICZmYik7Cj4+PiArCj4+PiArCWZvciAoaSA9IDA7IGkgPCBzYW1wbGluZ19yYXRlc19jb3VudDsg aSsrKSB7Cj4+PiArCQlyZXQgPSBhbHNhX29wZW5fb3V0cHV0KGFsc2EsIGF1ZGlvX2RldmljZSk7 Cj4+PiArCQlpZ3RfYXNzZXJ0KHJldCA+PSAwKTsKPj4+ICsKPj4+ICsJCS8qIFRPRE86IHBsYXli YWNrIG9uIGFsbCA4IGF2YWlsYWJsZSBjaGFubmVscyAqLwo+Pj4gKwkJcnVuIHw9IGRvX3Rlc3Rf ZGlzcGxheV9hdWRpbyhkYXRhLCBwb3J0LCBhbHNhLAo+Pj4gKwkJCQkJICAgICBQTEFZQkFDS19D SEFOTkVMUywKPj4+ICsJCQkJCSAgICAgc2FtcGxpbmdfcmF0ZXNbaV0pOwo+Pj4gKwo+Pj4gKwkJ YWxzYV9jbG9zZV9vdXRwdXQoYWxzYSk7Cj4+PiArCX0KPj4+ICsKPj4+ICsJLyogTWFrZSBzdXJl IHdlIHRlc3RlZCBhdCBsZWFzdCBvbmUgZnJlcXVlbmN5LiAqLwo+Pj4gKwlpZ3RfYXNzZXJ0KHJ1 bik7Cj4+PiArCj4+PiArCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZmIpOwo+Pj4gKwo+ Pj4gKwlkcm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3IpOwo+Pj4gKwo+Pj4gKwlmcmVlKGFs c2EpOwo+Pj4gK30KPj4+ICsKPj4+ICsKPj4+ICBzdGF0aWMgdm9pZCBzZWxlY3RfdGlsZWRfbW9k aWZpZXIoaWd0X3BsYW5lX3QgKnBsYW5lLCB1aW50MzJfdCB3aWR0aCwKPj4+ICAJCQkJICB1aW50 MzJfdCBoZWlnaHQsIHVpbnQzMl90IGZvcm1hdCwKPj4+ICAJCQkJICB1aW50NjRfdCAqbW9kaWZp ZXIpCj4+PiBAQCAtMTAzNyw3ICsxMjk4LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9kaXNwbGF5X3Bs YW5lc19yYW5kb20oZGF0YV90ICpkYXRhLAo+Pj4gIAlyZXNldF9zdGF0ZShkYXRhLCBwb3J0KTsK Pj4+ICAKPj4+ICAJLyogRmluZCB0aGUgY29ubmVjdG9yIGFuZCBwaXBlLiAqLwo+Pj4gLQlvdXRw dXQgPSBwcmVwYXJlX291dHB1dChkYXRhLCBwb3J0KTsKPj4+ICsJb3V0cHV0ID0gcHJlcGFyZV9v dXRwdXQoZGF0YSwgcG9ydCwgdHJ1ZSk7Cj4+PiAgCj4+PiAgCW1vZGUgPSBpZ3Rfb3V0cHV0X2dl dF9tb2RlKG91dHB1dCk7Cj4+PiAgCj4+PiBAQCAtMTMwOCw2ICsxNTY5LDkgQEAgaWd0X21haW4K Pj4+ICAKPj4+ICAJCWNvbm5lY3Rvcl9zdWJ0ZXN0KCJkcC1mcmFtZS1kdW1wIiwgRGlzcGxheVBv cnQpCj4+PiAgCQkJdGVzdF9kaXNwbGF5X2ZyYW1lX2R1bXAoJmRhdGEsIHBvcnQpOwo+Pj4gKwo+ Pj4gKwkJY29ubmVjdG9yX3N1YnRlc3QoImRwLWF1ZGlvIiwgRGlzcGxheVBvcnQpCj4+PiArCQkJ dGVzdF9kaXNwbGF5X2F1ZGlvKCZkYXRhLCBwb3J0LCAiSERNSSIpOwo+Pj4gIAl9Cj4+PiAgCj4+ PiAgCWlndF9zdWJ0ZXN0X2dyb3VwIHsKPj4+IGRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWls ZCBiL3Rlc3RzL21lc29uLmJ1aWxkCj4+PiBpbmRleCA1MTY3YTZjYy4uNWQzZWVkODIgMTAwNjQ0 Cj4+PiAtLS0gYS90ZXN0cy9tZXNvbi5idWlsZAo+Pj4gKysrIGIvdGVzdHMvbWVzb24uYnVpbGQK Pj4+IEBAIC0yMzgsMjAgKzIzOCwxMyBAQCBpZiBsaWJkcm1fbm91dmVhdS5mb3VuZCgpCj4+PiAg CXRlc3RfZGVwcyArPSBsaWJkcm1fbm91dmVhdQo+Pj4gIGVuZGlmCj4+PiAgCj4+PiAtaWYgX2J1 aWxkX2NoYW1lbGl1bSBhbmQgY2hhbWVsaXVtLmZvdW5kKCkKPj4+ICtpZiBjaGFtZWxpdW1fZm91 bmQKPj4+ICAJdGVzdF9wcm9ncyArPSBbCj4+PiAgCQkna21zX2NoYW1lbGl1bScsCj4+PiAgCV0K Pj4+ICAJdGVzdF9kZXBzICs9IGNoYW1lbGl1bQo+Pj4gIGVuZGlmCj4+PiAgCj4+PiAtaWYgX2J1 aWxkX2F1ZGlvIGFuZCBhbHNhLmZvdW5kKCkgYW5kIGdzbC5mb3VuZCgpCj4+PiAtCXRlc3RfcHJv Z3MgKz0gWwo+Pj4gLQkJJ2F1ZGlvJywKPj4+IC0JXQo+Pj4gLQl0ZXN0X2RlcHMgKz0gYWxzYQo+ Pj4gLWVuZGlmCj4+PiAtCj4+PiAgdGVzdF9leGVjdXRhYmxlcyA9IFtdCj4+PiAgdGVzdF9saXN0 ID0gW10KPj4+ICAKPj4+Cj4+Cj4+IFdlbGwuLi4gdGhhdCB3YXMgYSBtb3V0aGZ1bCEgRm9yIHRo ZSBuZXh0IHBhdGNoZXMsIHBsZWFzZSBzcGxpdCBzdHVmZgo+PiBtb3JlIGFnZ3Jlc3NpdmVseSwg ZXZlbiB3aGVuIGEgcGF0Y2ggd291bGQgb25seSBiZSBpbnRyb2R1Y2luZyBkZWFkIGNvZGUuCj4g Cj4gWWVzLCBJIHByb21pc2Ugbm90IHRvIGRvIHRoaXMgYWdhaW4uIDpTCj4gCj4gVGhhbmtzIGZv ciB0aGUgcmV2aWV3IQoKWW91J3JlIHdlbGNvbWUhCgpGZWVsIGZyZWUgdG8gbGFuZCB0aGlzIHBh dGNoIHdpdGggdGhlIG1vZGlmaWNhdGlvbnMgeW91IHByb3Bvc2VkIC8KYWdyZWVkIHRvIGNoYW5n ZS4KCj4gCj4+IFdpdGggdGhlc2UgY2hhbmdlZDoKPj4KPj4gUmV2aWV3ZWQtYnk6IE1hcnRpbiBQ ZXJlcyA8bWFydGluLnBlcmVzQGxpbnV4LmludGVsLmNvbT4KPj4KPj4gTWFydGluCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBs aXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==