From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x343.google.com (mail-wm1-x343.google.com [IPv6:2a00:1450:4864:20::343]) by gabe.freedesktop.org (Postfix) with ESMTPS id 84E1E89A72 for ; Sat, 11 May 2019 19:03:07 +0000 (UTC) Received: by mail-wm1-x343.google.com with SMTP id i3so4520872wml.4 for ; Sat, 11 May 2019 12:03:07 -0700 (PDT) References: <20190424090746.12391-1-maarten.lankhorst@linux.intel.com> From: =?UTF-8?Q?Juha-Pekka_Heikkil=c3=a4?= Message-ID: <0f631b35-6644-f295-9ba3-1d2d7e7053de@gmail.com> Date: Sat, 11 May 2019 22:03:00 +0300 MIME-Version: 1.0 In-Reply-To: <20190424090746.12391-1-maarten.lankhorst@linux.intel.com> Subject: Re: [igt-dev] [PATCH i-g-t] tests/kms_yuv: Add yuv specific tests, v5.1. List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Maarten Lankhorst , igt-dev@lists.freedesktop.org List-ID: SGkgTWFhcnRlbiwKCkkgd2FzIHdvbmRlcmluZyB0aGVzZSBuZXcgeXV2IHRlc3RzIHNlZW0gdG8g aGF2ZSBza2lwcGVkIGFsbCBtYWNoaW5lcyAKd2l0aCBleGNlcHRpb24gZm9yIHNhbml0eSBjcmMg dGVzdC4KCi9KdWhhLVBla2thCgpNYWFydGVuIExhbmtob3JzdCBraXJqb2l0dGkgMjQuNC4yMDE5 IGtsbyAxMi4wNzoKPiBBZGQgdGVzdHMgZXhjZXJjaXNpbmcgc3dpdGNoaW5nIGJldHdlZW4gdmFy aW91cyBzY2FsZWQvdW5zY2FsZWQKPiB0cmFuc2l0aW9ucyB0byBhbmQgZnJvbSB2YXJpb3VzIG52 MTIgZm9ybWF0cywgc2luY2Ugc29tZSBvZiB0aGUKPiB3b3JrYXJvdW5kcyBtZW50aW9uIHRoaXMg bWF5IGZhaWwuCj4gCj4gV2UgYWxzbyBhZGQgTlYxMiBzcGVjaWZpYyBjbGlwcGluZy9zY2FsaW5n IHRlc3RzLCB0byBtYWtlIHN1cmUKPiB0aGF0IFlVViBzcmMgY29vcmRpbmF0ZXMgYXJlIGFsd2F5 cyBwcm9ncmFtbWVkIGFzIGEgbXVsdGlwbGUgb2YgMgo+IGNvcnJlY3RseSwgYW5kIHZlcmlmeSBz Y2FsaW5nL2NsaXBwaW5nIHdvcmtzIHdpdGggQ1JDIHRlc3RzLgo+IAo+IGNyb3Atc2NhbGUtYnVn IHNob3dzIGEgY29ycnVwdGlvbiB3aGVuIHNjYWxpbmcgYW5kIGNyb3BwaW5nIGF0IHRoZQo+IHNh bWUgdGltZS4KPiAKPiBUaGUgc3VicGl4ZWwgY2xpcCB0ZXN0IHJvdGF0ZXMgYW5kIGNsaXBzIGEg cmVjdGFuZ2xlIG9uIGVhY2ggc2lkZSwKPiB3aGljaCBzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSBD UkMgYXMgd2hlbiB0aGF0IHBhcnQgb2YgdGhlIHJlY3RhbmdsZQo+IGlzIGhpZGRlbiBieSBhIGN1 cnNvciBhbmQgYSB3aG9sZSAyeDIgcGl4ZWwgaXMgaGlkZGVuLgo+IAo+IENoYW5nZXMgc2luY2Ug djE6Cj4gLSBSZXNldCBwbGFuZSBwb3NpdGlvbiB0byAwLDAgYXQgdGhlIHN0YXJ0IG9mIHl1dl92 YWxpZF93aWR0aF9wbGFuZSgpLgo+IC0gSGFuZGxlIFN3YXRpJ3MgZmVlZGJhY2suCj4gQ2hhbmdl cyBzaW5jZSB2MjoKPiAtIFNraXAgOTDCsC8yNzDCsCByb3RhdGlvbiBpbiB0ZXN0cyB3aGVuIGZv cm1hdHMgZG9uJ3Qgc3VwcG9ydCBpdC4KPiAtIEFkZCBhbGwgbmV3IEhEUiBmb3JtYXRzIHRvIHRl c3QuCj4gLSBVc2UgaWd0X3BsYW5lX2hhc19mb3JtYXRfbW9kLgo+IC0gU3VwcG9ydCB0ZXN0cyBv biAhaTkxNSBieSBjaGVja2luZyBpZiBYL1kgdGlsaW5nIG1vZGlmaWVycyBhcmUgc3VwcG9ydGVk Lgo+IC0gRG8gbm90IGVuYWJsZSB1bnRlc3RlZCBwbGFuZXMgdG8gcHJldmVudCBleGhhdXNpbmcg bWVtb3J5IGJhbmR3aWR0aAo+ICAgIGFuZCBhdmFpbGFibGUgTlYxMiBZIHBsYW5lcyBpbiB0aGUg cmdiLXN3aXRjaC1zY2FsZWQgdGVzdC4KPiBDaGFuZ2VzIHNpbmNlIHYzOgo+IC0gQWRkIGEgc2Fu aXR5IHRlc3QgdG8gc2FuaXR5IHRlc3QgWVVWIGNvbnZlcnNpb24gcGF0aHMsIG9uIGFsbCBwbGFu ZXMgYW5kIHBpcGVzLgo+IC0gRHluYW1pY2FsbHkgZ2VuZXJhdGUgbGlzdCBvZiBZVVYgdGVzdHMg dGhyb3VnaCBpZ3RfZm9ybWF0X2FycmF5X2ZpbGwuCj4gQ2hhbmdlcyBzaW5jZSB2NDoKPiAtIERl Y3JlYXNlIHNpemUgdG8gNjR4NjQgdG8gcmVkdWNlIHRlc3QgZXhlY3V0aW9uIHRpbWUgZXZlbiBt b3JlLAo+ICAgIHNvbWUgWVVWIGNvbnZlcnNpb24gcm91dGluZXMgYXJlIHNsb3cuCj4gLSBEb24n dCBjbGVhciBkZWdhbW1hL2N0bSwgdGhpcyBpcyBkb25lIGluIGNvcmUgbm93Lgo+IENoYW5nZXMg c2luY2UgdjU6Cj4gLSBGaXggbWlub3IgY29tcGlsZSBlcnJvci4KPiAKPiBTaWduZWQtb2ZmLWJ5 OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgo+ IC0tLQo+ICAgdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSArCj4gICB0ZXN0cy9rbXNfeXV2 LmMgICAgICAgIHwgOTM2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gICB0ZXN0cy9tZXNvbi5idWlsZCAgICAgIHwgICAxICsKPiAgIDMgZmlsZXMgY2hhbmdlZCwg OTM4IGluc2VydGlvbnMoKykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9rbXNfeXV2LmMK PiAKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxl LnNvdXJjZXMKPiBpbmRleCA3ZjkyMWY2YzU5ODguLjU3NDg2MWIyZTMwZiAxMDA2NDQKPiAtLS0g YS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ IEBAIC03NSw2ICs3NSw3IEBAIFRFU1RTX3Byb2dzID0gXAo+ICAgCWttc191bml2ZXJzYWxfcGxh bmUgXAo+ICAgCWttc192YmxhbmsgXAo+ICAgCWttc192cnIgXAo+ICsJa21zX3l1diBcCj4gICAJ bWV0YV90ZXN0IFwKPiAgIAlwZXJmIFwKPiAgIAlwZXJmX3BtdSBcCj4gZGlmZiAtLWdpdCBhL3Rl c3RzL2ttc195dXYuYyBiL3Rlc3RzL2ttc195dXYuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMDAwMDAwLi42MzE4N2M0OGMyOGYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv dGVzdHMva21zX3l1di5jCj4gQEAgLTAsMCArMSw5MzYgQEAKPiArLyoKPiArICogQ29weXJpZ2h0 IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiAr ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNo YWxsIGJlIGluY2x1ZGVkIGluCj4gKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCj4gKyAqIEFVVEhPUlMgT1Ig Q09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RI RVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJ TiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqIEF1dGhvcnM6Cj4gKyAqICAgIE1hYXJ0ZW4gTGFu a2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+Cj4gKyAqLwo+ICsjaW5j bHVkZSAiY29uZmlnLmgiCj4gKwo+ICsjaW5jbHVkZSAiaWd0LmgiCj4gKyNpbmNsdWRlIDxjYWly by5oPgo+ICsjaW5jbHVkZSA8ZXJybm8uaD4KPiArI2luY2x1ZGUgPHN0ZGludC5oPgo+ICsjaW5j bHVkZSA8dW5pc3RkLmg+Cj4gKyNpbmNsdWRlIDxzeXMvdGltZS5oPgo+ICsKPiArdHlwZWRlZiBz dHJ1Y3Qgewo+ICsJaWd0X2Rpc3BsYXlfdCBkaXNwbGF5Owo+ICsKPiArCWlndF9waXBlX2NyY190 ICpwaXBlX2NyYzsKPiArCXN0cnVjdCBpZ3RfZmIgZmJbNl07Cj4gK30gZGF0YV90Owo+ICsKPiAr c3RhdGljIHVpbnQ2NF90IHhfbW9kaWZpZXIgPSBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FOwo+ ICtzdGF0aWMgdWludDY0X3QgeV9tb2RpZmllciA9IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkU7 Cj4gK3N0YXRpYyB1aW50MzJfdCAqZm9ybWF0cywgY291bnRfZm9ybWF0czsKPiArCj4gK3N0YXRp YyBib29sIHBpcGVfc3VwcG9ydHNfZm9ybWF0KGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGVudW0g cGlwZSBwaXBlLAo+ICsJCQkJIHVpbnQzMl90IGZvcm1hdCwgdWludDY0X3QgdGlsaW5nKQo+ICt7 Cj4gKwlpZ3RfcGxhbmVfdCAqcGxhbmU7Cj4gKwo+ICsJZm9yX2VhY2hfcGxhbmVfb25fcGlwZShk aXNwbGF5LCBwaXBlLCBwbGFuZSkKPiArCQlpZiAoaWd0X3BsYW5lX2hhc19mb3JtYXRfbW9kKHBs YW5lLCBmb3JtYXQsIHRpbGluZykpCj4gKwkJCXJldHVybiB0cnVlOwo+ICsKPiArCXJldHVybiBm YWxzZTsKPiArfQo+ICsKPiArCj4gK3N0YXRpYyB2b2lkIHJlbW92ZV9mYnMoZGF0YV90ICpkYXRh KQo+ICt7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRh LT5mYik7IGkrKykKPiArCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCAmZGF0 YS0+ZmJbaV0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBwcmVwYXJlX2NydGMoZGF0YV90ICpk YXRhLCBlbnVtIHBpcGUgcGlwZSwgaWd0X291dHB1dF90ICpvdXRwdXQpCj4gK3sKPiArCWlndF9k aXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPiArCj4gKwlyZW1vdmVfZmJzKGRh dGEpOwo+ICsJaWd0X2Rpc3BsYXlfcmVzZXQoZGlzcGxheSk7Cj4gKwlpZ3Rfb3V0cHV0X3NldF9w aXBlKG91dHB1dCwgcGlwZSk7Cj4gKwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1J VF9BVE9NSUMpOwo+ICsKPiArCWlndF9waXBlX2NyY19mcmVlKGRhdGEtPnBpcGVfY3JjKTsKPiAr CWRhdGEtPnBpcGVfY3JjID0gaWd0X3BpcGVfY3JjX25ldyhkaXNwbGF5LT5kcm1fZmQsIHBpcGUs Cj4gKwkJCQkJICBJTlRFTF9QSVBFX0NSQ19TT1VSQ0VfQVVUTyk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGZ1ZGdlX2x1dChkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlLCB1aW50MTZfdCBt YXNrKQo+ICt7Cj4gKwlpZ3RfcGlwZV90ICpwaXBlX29iaiA9ICZkYXRhLT5kaXNwbGF5LnBpcGVz W3BpcGVdOwo+ICsJdWludDE2X3QgKmx1dDsKPiArCWludCBpLCBsdXRfc2l6ZTsKPiArCj4gKwlp ZiAoIWlndF9waXBlX29ial9oYXNfcHJvcChwaXBlX29iaiwgSUdUX0NSVENfR0FNTUFfTFVUX1NJ WkUpKQo+ICsJCXJldHVybjsKPiArCj4gKwlsdXRfc2l6ZSA9IGlndF9waXBlX29ial9nZXRfcHJv cChwaXBlX29iaiwgSUdUX0NSVENfR0FNTUFfTFVUX1NJWkUpOwo+ICsKPiArCWx1dCA9IG1hbGxv YyhzaXplb2YodWludDE2X3QpICogbHV0X3NpemUpOwo+ICsJZm9yIChpID0gMDsgaSA8IGx1dF9z aXplOyBpKyspCj4gKwkJbHV0W2ldID0gKGkgKiAweGZmZmYgLyAobHV0X3NpemUgLSAxKSkgJiBt YXNrOwo+ICsKPiArCWlndF9waXBlX29ial9yZXBsYWNlX3Byb3BfYmxvYihwaXBlX29iaiwgSUdU X0NSVENfR0FNTUFfTFVULCBsdXQsIGx1dF9zaXplICogc2l6ZW9mKHVpbnQxNl90KSk7Cj4gKwlm cmVlKGx1dCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHVuZnVkZ2VfbHV0KGRhdGFfdCAqZGF0 YSwgZW51bSBwaXBlIHBpcGUpCj4gK3sKPiArCWlndF9waXBlX3QgKnBpcGVfb2JqID0gJmRhdGEt PmRpc3BsYXkucGlwZXNbcGlwZV07Cj4gKwo+ICsJaWYgKGlndF9waXBlX29ial9oYXNfcHJvcChw aXBlX29iaiwgSUdUX0NSVENfR0FNTUFfTFVUKSkKPiArCQlpZ3RfcGlwZV9vYmpfcmVwbGFjZV9w cm9wX2Jsb2IocGlwZV9vYmosIElHVF9DUlRDX0dBTU1BX0xVVCwgTlVMTCwgMCk7Cj4gK30KPiAr Cj4gKy8qCj4gKyAqIFRlc3QgdGhhdCB3ZSBpbml0aWFsaXplIGEgWVVWIGZiIGFzIGJsYWNrIGNv cnJlY3RseSwKPiArICogdGhhdCB3aGVuIHdlIHdyaXRlIGEgYmxhY2sgRkIgaXQgd2lsbCBnZXQg dGhlIHNhbWUgQ1JDLCBhbmQgdGhhdAo+ICsgKiBhbGwgY29sb3JzIHdlIHRlc3Qgd2lsbCBnaXZl IHRoZSBzYW1lIENSQyBvbiBhbGwgZm9ybWF0cy4KPiArICovCj4gK3N0YXRpYyB2b2lkIHl1dl9z YW5pdHkoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgaWd0X291dHB1dF90ICpvdXRwdXQp Cj4gK3sKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPiArCWln dF9wbGFuZV90ICpwbGFuZTsKPiArCWlndF9jcmNfdCBibGFja19jcmMsIGNvbG9yX2NyYywgY3Jj Owo+ICsJYm9vbCBmaXJzdCA9IHRydWU7Cj4gKwo+ICsJcHJlcGFyZV9jcnRjKGRhdGEsIHBpcGUs IG91dHB1dCk7Cj4gKwo+ICsJZm9yX2VhY2hfcGxhbmVfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBw bGFuZSkgewo+ICsJCWZvciAoaW50IGkgPSAwOyBpIDwgY291bnRfZm9ybWF0czsgaSsrKSB7Cj4g KwkJCXN0cnVjdCBpZ3RfZmIgKmZiID0gJmRhdGEtPmZiWzBdOwo+ICsJCQljYWlyb190ICpjcjsK PiArCj4gKwkJCWlmICghaWd0X2Zvcm1hdF9pc195dXYoZm9ybWF0c1tpXSkgfHwKPiArCQkJICAg ICFpZ3RfcGxhbmVfaGFzX2Zvcm1hdF9tb2QocGxhbmUsIGZvcm1hdHNbaV0sIHhfbW9kaWZpZXIp KQo+ICsJCQkJY29udGludWU7Cj4gKwo+ICsJCQlpZ3RfZGVidWcoIlRlc3RpbmcgZm9ybWF0ICUu NHMgb24gcGxhbmUgJWlcbiIsCj4gKwkJCQkgKGNoYXIgKikmZm9ybWF0c1tpXSwgcGxhbmUtPmlu ZGV4KTsKPiArCQkJaWd0X2NyZWF0ZV9mYihkaXNwbGF5LT5kcm1fZmQsIDY0LCA2NCwgZm9ybWF0 c1tpXSwKPiArCQkJCSAgICAgIHhfbW9kaWZpZXIsIGZiKTsKPiArCj4gKwkJCWlndF9wbGFuZV9z ZXRfZmIocGxhbmUsIGZiKTsKPiArCQkJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01N SVRfQVRPTUlDKTsKPiArCQkJaWYgKCFmaXJzdCkgewo+ICsJCQkJaWd0X3BpcGVfY3JjX2NvbGxl Y3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY3JjKTsKPiArCQkJCWlndF9hc3NlcnRfY3JjX2VxdWFs KCZibGFja19jcmMsICZjcmMpOwo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJaWd0X3BpcGVfY3JjX2Nv bGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmYmxhY2tfY3JjKTsKPiArCQkJfQo+ICsKPiArCQkJ LyogQ29tcGFyZSBpbml0aWFsIGJsYWNrIGZiIHdpdGggcmVmZXJlbmNlIHBhaW50ZWQgYmxhY2sg Y29sb3IgKi8KPiArCQkJY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkaXNwbGF5LT5kcm1fZmQsIGZi KTsKPiArCQkJaWd0X3BhaW50X2NvbG9yKGNyLCAwLCAwLCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQs IDAuLCAwLiwgMC4pOwo+ICsJCQlpZ3RfcHV0X2NhaXJvX2N0eChkaXNwbGF5LT5kcm1fZmQsIGZi LCBjcik7Cj4gKwkJCWlndF9kaXJ0eV9mYihkaXNwbGF5LT5kcm1fZmQsIGZiKTsKPiArCQkJaWd0 X3dhaXRfZm9yX3ZibGFuayhkaXNwbGF5LT5kcm1fZmQsIHBpcGUpOwo+ICsJCQlpZ3RfcGlwZV9j cmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZjcmMpOwo+ICsJCQlpZ3RfYXNzZXJ0X2Ny Y19lcXVhbCgmYmxhY2tfY3JjLCAmY3JjKTsKPiArCj4gKwo+ICsJCQkvKiBXcml0ZSBhIGNvbG9y IGZiICovCj4gKwkJCWNyID0gaWd0X2dldF9jYWlyb19jdHgoZGlzcGxheS0+ZHJtX2ZkLCBmYik7 Cj4gKwkJCWlndF9wYWludF9jb2xvcihjciwgMCwgMCwgZmItPndpZHRoLCBmYi0+aGVpZ2h0LCAx LiwgMS4sIDAuKTsKPiArCQkJaWd0X3B1dF9jYWlyb19jdHgoZGlzcGxheS0+ZHJtX2ZkLCBmYiwg Y3IpOwo+ICsJCQlmdWRnZV9sdXQoZGF0YSwgcGlwZSwgMHhmYzAwKTsKPiArCQkJaWd0X3BsYW5l X3NldF9mYihwbGFuZSwgZmIpOwo+ICsJCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENP TU1JVF9BVE9NSUMpOwo+ICsKPiArCQkJaWYgKCFmaXJzdCkgewo+ICsJCQkJaWd0X3BpcGVfY3Jj X2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY3JjKTsKPiArCQkJCWlndF9hc3NlcnRfY3Jj X2VxdWFsKCZjb2xvcl9jcmMsICZjcmMpOwo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJaWd0X3BpcGVf Y3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY29sb3JfY3JjKTsKPiArCQkJCWZpcnN0 ID0gZmFsc2U7Cj4gKwkJCX0KPiArCj4gKwkJCS8qIENvbnZlcnQgZnJvbSBZVVYsIGJhY2sgdG8g WVVWLCB0byBleHBvc2UgYnVncyBpbiBjb252ZXJzaW9uIHJvdXRpbmVzICovCj4gKwkJCWNyID0g aWd0X2dldF9jYWlyb19jdHgoZGlzcGxheS0+ZHJtX2ZkLCBmYik7Cj4gKwkJCWlndF9wdXRfY2Fp cm9fY3R4KGRpc3BsYXktPmRybV9mZCwgZmIsIGNyKTsKPiArCQkJaWd0X2RpcnR5X2ZiKGRpc3Bs YXktPmRybV9mZCwgZmIpOwo+ICsJCQlpZ3Rfd2FpdF9mb3JfdmJsYW5rKGRpc3BsYXktPmRybV9m ZCwgcGlwZSk7Cj4gKwkJCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywg JmNyYyk7Cj4gKwkJCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZjb2xvcl9jcmMsICZjcmMpOwo+ICsK PiArCQkJdW5mdWRnZV9sdXQoZGF0YSwgcGlwZSk7Cj4gKwkJCWlndF9wbGFuZV9zZXRfZmIocGxh bmUsIE5VTEwpOwo+ICsJCQlpZ3RfcmVtb3ZlX2ZiKGRpc3BsYXktPmRybV9mZCwgJmRhdGEtPmZi WzBdKTsKPiArCQl9Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNldF9mYihpZ3RfcGxh bmVfdCAqcGxhbmUsIHN0cnVjdCBpZ3RfZmIgKmZiLAo+ICsJCSAgIGJvb2wgc2NhbGVkLCBpZ3Rf cm90YXRpb25fdCByb3QpCj4gK3sKPiArCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIGZiKTsKPiAr Cj4gKwlpZiAoc2NhbGVkICYmIGZiKQo+ICsJCWlndF9mYl9zZXRfc2l6ZShmYiwgcGxhbmUsIGZi LT53aWR0aCwgMTYpOwo+ICsKPiArCWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIHJvdCk7 Cj4gKwlpZiAoZmIgJiYgKHJvdCA9PSBJR1RfUk9UQVRJT05fOTAgfHwgcm90ID09IElHVF9ST1RB VElPTl8yNzApKQo+ICsJCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgZmItPmhlaWdodCwgZmIt PndpZHRoKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgeXV2X3JnYl9zd2l0Y2goZGF0YV90ICpk YXRhLCBlbnVtIHBpcGUgcGlwZSwKPiArCQkJICAgaWd0X291dHB1dF90ICpvdXRwdXQsIGJvb2wg c2NhbGVkLCB1bnNpZ25lZCBmb3JtYXQpCj4gK3sKPiArCWRybU1vZGVNb2RlSW5mbyAqbW9kZSA9 IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkg PSAmZGF0YS0+ZGlzcGxheTsKPiArCWlndF9wbGFuZV90ICpwbGFuZTsKPiArCWludCBpOwo+ICsJ aWd0X2NyY190IHJlZl9jcmNbNF0sIGNyYzsKPiArCWJvb2wgdmFsaWRbNF0gPSB7fTsKPiArCj4g KwlwcmVwYXJlX2NydGMoZGF0YSwgcGlwZSwgb3V0cHV0KTsKPiArCj4gKwlpZ3RfY3JlYXRlX3Bh dHRlcm5fZmIoZGlzcGxheS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXks Cj4gKwkJCSAgICAgIGZvcm1hdCwgeF9tb2RpZmllciwgJmRhdGEtPmZiWzBdKTsKPiArCj4gKwlp Z3RfY3JlYXRlX3BhdHRlcm5fZmIoZGlzcGxheS0+ZHJtX2ZkLCBtb2RlLT52ZGlzcGxheSwgbW9k ZS0+aGRpc3BsYXksCj4gKwkJCSAgICAgIGZvcm1hdCwgeV9tb2RpZmllciwgJmRhdGEtPmZiWzFd KTsKPiArCj4gKwlpZ3RfY3JlYXRlX3BhdHRlcm5fZmIoZGlzcGxheS0+ZHJtX2ZkLCBtb2RlLT5o ZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4gKwkJCSAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgs IHhfbW9kaWZpZXIsICZkYXRhLT5mYlsyXSk7Cj4gKwo+ICsJaWd0X2NyZWF0ZV9wYXR0ZXJuX2Zi KGRpc3BsYXktPmRybV9mZCwgbW9kZS0+dmRpc3BsYXksIG1vZGUtPmhkaXNwbGF5LAo+ICsJCQkg ICAgICBEUk1fRk9STUFUX1hSR0I4ODg4LCB5X21vZGlmaWVyLCAmZGF0YS0+ZmJbM10pOwo+ICsK PiArCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoZGlzcGxheSwgcGlwZSwgcGxhbmUpIHsKPiArCQlj b25zdCBpbnQgc2VxW10gPSB7Cj4gKwkJCTIsIDAsIDIsIDEsIDMsIDEsIDMKPiArCQl9Owo+ICsK PiArCQlpZiAoIWlndF9wbGFuZV9oYXNfZm9ybWF0X21vZChwbGFuZSwgZm9ybWF0LCBkYXRhLT5m YlswXS5tb2RpZmllcikpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQkvKiBDb2xsZWN0IHJlZmVy ZW5jZSBjcmMgd2l0aCB0b2dnbGUgaW4gYmV0d2Vlbi4gKi8KPiArCQlmb3IgKGkgPSAwOyBpIDwg QVJSQVlfU0laRShyZWZfY3JjKTsgaSsrKSB7Cj4gKwkJCWlndF9yb3RhdGlvbl90IHJvdCA9IChp ID09IDEgfHwgaSA9PSAzKSA/Cj4gKwkJCQlJR1RfUk9UQVRJT05fOTAgOiBJR1RfUk9UQVRJT05f MDsKPiArCj4gKwkJCXNldF9mYihwbGFuZSwgJmRhdGEtPmZiW2ldLCBzY2FsZWQsIHJvdCk7Cj4g Kwo+ICsJCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+ICsJ CQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZyZWZfY3JjW2ldKTsK PiArCQkJdmFsaWRbaV0gPSB0cnVlOwo+ICsKPiArCQkJc2V0X2ZiKHBsYW5lLCBOVUxMLCBzY2Fs ZWQsIHJvdCk7Cj4gKwkJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01J Qyk7Cj4gKwkJfQo+ICsKPiArCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZXEpOyBpKysp IHsKPiArCQkJaW50IGogPSBzZXFbaV07Cj4gKwkJCWlndF9yb3RhdGlvbl90IHJvdCA9IChqID09 IDEgfHwgaiA9PSAzKSA/Cj4gKwkJCQlJR1RfUk9UQVRJT05fOTAgOiBJR1RfUk9UQVRJT05fMDsK PiArCj4gKwkJCWlmICghdmFsaWRbal0pCj4gKwkJCQljb250aW51ZTsKPiArCj4gKwkJCXNldF9m YihwbGFuZSwgJmRhdGEtPmZiW2pdLCBzY2FsZWQsIHJvdCk7Cj4gKwkJCWlndF9kaXNwbGF5X2Nv bW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7Cj4gKwo+ICsJCQlpZ3RfcGlwZV9jcmNfY29s bGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZjcmMpOwo+ICsJCQlpZ3RfYXNzZXJ0X2NyY19lcXVh bCgmcmVmX2NyY1tqXSwgJmNyYyk7Cj4gKwkJfQo+ICsKPiArCQkvKiBXZSBvbmx5IGhhdmUgZmV3 IHNjYWxlcnMsIGRvbid0IHVzZSAxIGZvciB1bnVzZWQgcGxhbmVzICovCj4gKwkJaWd0X3BsYW5l X3NldF9mYihwbGFuZSwgTlVMTCk7Cj4gKwl9Cj4gK30KPiArCj4gKyNkZWZpbmUgYXNzZXJ0X2Nv bGxlY3RlZF9jcmNfZXF1YWwocGlwZV9jcmMsIGNyYywgcmVmX2NyYykgXAo+ICsJZG8geyBcCj4g KwkJaWd0X3BpcGVfY3JjX2dldF9jdXJyZW50KGRpc3BsYXktPmRybV9mZCwgcGlwZV9jcmMsIGNy Yyk7CVwKPiArCQlpZ3RfYXNzZXJ0X2NyY19lcXVhbChyZWZfY3JjLCBjcmMpOwlcCj4gKwl9IHdo aWxlICgwKQo+ICsKPiArc3RhdGljIHZvaWQgc2V0X3NyY19jb29yZHMoaWd0X3BsYW5lX3QgKnBs YW5lLCBzdHJ1Y3QgaWd0X2ZiICpmYiwKPiArCQkJICAgaWd0X3JvdGF0aW9uX3Qgcm90LCBpbnQg dmlzLCBpbnQgaGlkZGVuKQo+ICt7Cj4gKwlzd2l0Y2ggKHJvdCkgewo+ICsJY2FzZSBJR1RfUk9U QVRJT05fMDoKPiArCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBwbGFuZSwgZmItPndpZHRoIC8g MiAtIHZpcywgZmItPmhlaWdodCAvIDIgLSB2aXMpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJR1Rf Uk9UQVRJT05fOTA6Cj4gKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihmYiwgcGxhbmUsIGZiLT53aWR0 aCAvIDIgLSBoaWRkZW4sIGZiLT5oZWlnaHQgLyAyIC0gdmlzKTsKPiArCQlicmVhazsKPiArCWNh c2UgSUdUX1JPVEFUSU9OXzE4MDoKPiArCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBwbGFuZSwg ZmItPndpZHRoIC8gMiAtIGhpZGRlbiwgZmItPmhlaWdodCAvIDIgLSBoaWRkZW4pOwo+ICsJCWJy ZWFrOwo+ICsJY2FzZSBJR1RfUk9UQVRJT05fMjcwOgo+ICsJCWlndF9mYl9zZXRfcG9zaXRpb24o ZmIsIHBsYW5lLCBmYi0+d2lkdGggLyAyIC0gdmlzLCBmYi0+aGVpZ2h0IC8gMiAtIGhpZGRlbik7 Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0OiBpZ3RfYXNzZXJ0KDApOwo+ICsJfQo+ICsJaWd0X2Zi X3NldF9zaXplKGZiLCBwbGFuZSwgdmlzICsgaGlkZGVuLCB2aXMgKyBoaWRkZW4pOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCB5dXZfdmFsaWRfd2lkdGhfcGxhbmUoZGF0YV90ICpkYXRhLCBkcm1N b2RlTW9kZUluZm8gKm1vZGUsCj4gKwkJCQkgIGlndF9wbGFuZV90ICpwbGFuZSwgaWd0X3JvdGF0 aW9uX3Qgcm90LAo+ICsJCQkJICBpZ3RfY3JjX3QgKnJlZl9jcmMpCj4gK3sKPiArCWlndF9kaXNw bGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPiArCWlndF9jcmNfdCBjcmM7Cj4gKwlz dHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiID0gJmRhdGEtPmZiWzJdOwo+ICsJaW50IGksIHJldDsKPiAr Cj4gKwkvKiBKdXN0IGNsaXBwaW5nLi4gKi8KPiArCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIGNs aXBfZmIpOwo+ICsJaWd0X3BsYW5lX3NldF9yb3RhdGlvbihwbGFuZSwgcm90KTsKPiArCWlmIChy b3QgJiAoSUdUX1JPVEFUSU9OXzkwIHwgSUdUX1JPVEFUSU9OXzI3MCkpCj4gKwkJaWd0X3BsYW5l X3NldF9zaXplKHBsYW5lLCBjbGlwX2ZiLT5oZWlnaHQsIGNsaXBfZmItPndpZHRoKTsKPiArCWln dF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIG1vZGUtPmhkaXNwbGF5IC0gY2xpcF9mYi0+d2lk dGggLyAyLCBtb2RlLT52ZGlzcGxheSAtIGNsaXBfZmItPmhlaWdodCAvIDIpOwo+ICsJaWYgKChy b3QgPT0gSUdUX1JPVEFUSU9OXzkwIHx8IHJvdCA9PSBJR1RfUk9UQVRJT05fMjcwKSAmJgo+ICsJ ICAgIGlndF9kaXNwbGF5X3RyeV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpIDwgMCkg ewo+ICsJCWlndF9kZWJ1ZygiVGhpcyByb3RhdGlvbiBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGZv cm1hdC5cbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlpZ3RfZGlzcGxheV9jb21taXQy KGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+ICsJYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwo ZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOwo+ICsKPiArCS8qIENsaXBwaW5nIGFuZCBz Y2FsaW5nLiAqLwo+ICsJaWd0X2ZiX3NldF9wb3NpdGlvbihjbGlwX2ZiLCBwbGFuZSwgY2xpcF9m Yi0+d2lkdGggLyAyIC0gMTYsIGNsaXBfZmItPmhlaWdodCAvIDIgLSAxNik7Cj4gKwlpZ3RfZmJf c2V0X3NpemUoY2xpcF9mYiwgcGxhbmUsIDMyLCAzMik7Cj4gKwlpZ3RfZGlzcGxheV9jb21taXQy KGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+ICsJYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwo ZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOwo+ICsKPiArCS8qIFRyeSBudmFsaWQgPCA4 IHNyYyB2aXNpYmxlLiAqLwo+ICsJc2V0X3NyY19jb29yZHMocGxhbmUsIGNsaXBfZmIsIHJvdCwg NCwgNCk7Cj4gKwlpZ3RfZGlzcGxheV90cnlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlD KTsKPiArCj4gKwkvKiBUcnkgZGlmZmVyZW50IGFsaWdubWVudHMgZm9yIHgveSB0byBzZWUgaWYg YW55IGhpdCB1bmRlcnJ1bnMgKi8KPiArCWZvciAoaSA9IDE7IGkgPCA0OyBpKyspIHsKPiArCQlz ZXRfc3JjX2Nvb3JkcyhwbGFuZSwgY2xpcF9mYiwgcm90LCAxNiArIDIgKiBpLCAxNiAtIDIgKiBp KTsKPiArCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+ICsJ CWFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3Jj KTsKPiArCj4gKwkJLyogQW5kIGFsc28gc2hvdyBtb3JlIG9mIHRoZSBzY3JlZW4gKi8KPiArCQlz ZXRfc3JjX2Nvb3JkcyhwbGFuZSwgY2xpcF9mYiwgcm90LCAxNiArIGksIDE2ICsgaSk7Cj4gKwkJ cmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7Cj4g Kwo+ICsJCWlmIChyZXQgPT0gLUVJTlZBTCkgewo+ICsJCQlpZ3RfYXNzZXJ0KGkgJSAyIHx8IHJv dCA9PSBJR1RfUk9UQVRJT05fMjcwIHx8IHJvdCA9PSAoSUdUX1JPVEFUSU9OXzkwIHwgSUdUX1JF RkxFQ1RfWCkpOwo+ICsJCQljb250aW51ZTsKPiArCQl9IGVsc2UKPiArCQkJaWd0X2Fzc2VydF9l cShyZXQsIDApOwo+ICsJCWFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3Jj LCAmY3JjLCByZWZfY3JjKTsKPiArCX0KPiArCj4gKwkvKgo+ICsJICogQXMgYSBmaW5hbCB0ZXN0 LCB0cnkgd2l0aCAxNiBzcmMgdmlzaWJsZSwgYW5kIHZhcmlvdXMgaW52aXNpYmxlCj4gKwkgKiBj b21wb25lbnRzIHRvIGNoZWNrIGNsaXBwaW5nIGRvZXNuJ3QgZHJvcCB0aGUgdmlzaWJsZSBzcmMg YmVsb3cgMTYuCj4gKwkgKi8KPiArCWZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSA0KSB7Cj4gKwkJ c2V0X3NyY19jb29yZHMocGxhbmUsIGNsaXBfZmIsIHJvdCwgMTYsIGkpOwo+ICsJCWlmIChyb3Qg JiAoSUdUX1JPVEFUSU9OXzkwIHwgSUdUX1JPVEFUSU9OXzI3MCkpCj4gKwkJCWlndF9wbGFuZV9z ZXRfc2l6ZShwbGFuZSwgKGNsaXBfZmItPmhlaWdodCAvIDMyKSAqICgxNiArIGkpLAo+ICsJCQkJ CSAgIChjbGlwX2ZiLT53aWR0aCAvIDMyKSAqICgxNiArIGkpKTsKPiArCQllbHNlCj4gKwkJCWln dF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgKGNsaXBfZmItPndpZHRoIC8gMzIpICogKDE2ICsgaSks Cj4gKwkJCQkJICAgKGNsaXBfZmItPmhlaWdodCAvIDMyKSAqICgxNiArIGkpKTsKPiArCQlpZ3Rf ZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+ICsJCWFzc2VydF9jb2xs ZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKPiArCX0KPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgeXV2X3ZhbGlkX3dpZHRoKGRhdGFfdCAqZGF0YSwgZW51bSBw aXBlIHBpcGUsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCB1bnNpZ25lZCBmb3JtYXQpCj4gK3sKPiAr CWRybU1vZGVNb2RlSW5mbyAqbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKPiAr CWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPiArCWlndF9wbGFuZV90 ICpwbGFuZTsKPiArCXN0cnVjdCBpZ3RfZmIgKmNsaXBfZmIgPSAmZGF0YS0+ZmJbMl07Cj4gKwlz dHJ1Y3QgaWd0X2ZiICpyZWZfZmIgPSAmZGF0YS0+ZmJbM107Cj4gKwo+ICsJcHJlcGFyZV9jcnRj KGRhdGEsIHBpcGUsIG91dHB1dCk7Cj4gKwo+ICsJaWd0X2NyZWF0ZV9mYihkaXNwbGF5LT5kcm1f ZmQsIDY0LCA2NCwgZm9ybWF0LCB5X21vZGlmaWVyLCByZWZfZmIpOwo+ICsKPiArCWlndF9jcmVh dGVfZmIoZGlzcGxheS0+ZHJtX2ZkLCAyICogcmVmX2ZiLT53aWR0aCwKPiArCQkgICAgICAyICog cmVmX2ZiLT5oZWlnaHQsIGZvcm1hdCwgeV9tb2RpZmllciwgY2xpcF9mYik7Cj4gKwo+ICsJaWd0 X3BpcGVfY3JjX3N0YXJ0KGRhdGEtPnBpcGVfY3JjKTsKPiArCj4gKwlmb3JfZWFjaF9wbGFuZV9v bl9waXBlKGRpc3BsYXksIHBpcGUsIHBsYW5lKSB7Cj4gKwkJaWd0X2NyY190IHJlZl9jcmNbNF07 Cj4gKwkJY2Fpcm9fdCAqY3I7Cj4gKwkJc3RhdGljIGNvbnN0IGRvdWJsZSBjb2xvcnNbNF1bM10g PSB7Cj4gKwkJCXsgMS4sIDAuLCAwLiB9LAo+ICsJCQl7IDAuLCAxLiwgMC4gfSwKPiArCQkJeyAw LiwgMC4sIDEuIH0sCj4gKwkJCXsgMS4sIDEuLCAxLiB9Cj4gKwkJfTsKPiArCQlpbnQgaTsKPiAr Cj4gKwkJaWYgKCFpZ3RfcGxhbmVfaGFzX2Zvcm1hdF9tb2QocGxhbmUsIGZvcm1hdCwgZGF0YS0+ ZmJbMF0ubW9kaWZpZXIpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJLyogRHJhdyB0aGUgRkIg dGhhdCB3aWxsIGJlIHVzZWQgZm9yIGNsaXBwaW5nIHRlc3RzLiAqLwo+ICsJCWNyID0gaWd0X2dl dF9jYWlyb19jdHgoZGlzcGxheS0+ZHJtX2ZkLCBjbGlwX2ZiKTsKPiArCQlpZ3RfcGFpbnRfY29s b3IoY3IsIDAsIDAsIGNsaXBfZmItPndpZHRoIC8gMiwgY2xpcF9mYi0+aGVpZ2h0IC8gMiwKPiAr CQkJCWNvbG9yc1swXVswXSwgY29sb3JzWzBdWzFdLCBjb2xvcnNbMF1bMl0pOwo+ICsKPiArCQlp Z3RfcGFpbnRfY29sb3IoY3IsIGNsaXBfZmItPndpZHRoIC8gMiwgMCwKPiArCQkJCWNsaXBfZmIt PndpZHRoIC8gMiwgY2xpcF9mYi0+aGVpZ2h0IC8gMiwKPiArCQkJCWNvbG9yc1sxXVswXSwgY29s b3JzWzFdWzFdLCBjb2xvcnNbMV1bMl0pOwo+ICsKPiArCQlpZ3RfcGFpbnRfY29sb3IoY3IsIGNs aXBfZmItPndpZHRoIC8gMiwgY2xpcF9mYi0+aGVpZ2h0IC8gMiwKPiArCQkJCWNsaXBfZmItPndp ZHRoIC8gMiwgY2xpcF9mYi0+aGVpZ2h0IC8gMiwKPiArCQkJCWNvbG9yc1syXVswXSwgY29sb3Jz WzJdWzFdLCBjb2xvcnNbMl1bMl0pOwo+ICsKPiArCQlpZ3RfcGFpbnRfY29sb3IoY3IsIDAsIGNs aXBfZmItPmhlaWdodCAvIDIsCj4gKwkJCQljbGlwX2ZiLT53aWR0aCAvIDIsIGNsaXBfZmItPmhl aWdodCAvIDIsCj4gKwkJCQljb2xvcnNbM11bMF0sIGNvbG9yc1szXVsxXSwgY29sb3JzWzNdWzJd KTsKPiArCj4gKwkJaWd0X3B1dF9jYWlyb19jdHgoZGlzcGxheS0+ZHJtX2ZkLCBjbGlwX2ZiLCBj cik7Cj4gKwo+ICsJCS8qIERyYXcgYWxsIHJlZmVyZW5jZSBGQidzIHRvIGNvbGxlY3QgdGhlIENS Qy4gKi8KPiArCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Cj4gKwkJCWNyID0gaWd0X2dldF9j YWlyb19jdHgoZGlzcGxheS0+ZHJtX2ZkLCByZWZfZmIpOwo+ICsJCQlpZ3RfcGFpbnRfY29sb3Io Y3IsIDAsIDAsIHJlZl9mYi0+d2lkdGgsIHJlZl9mYi0+aGVpZ2h0LAo+ICsJCQkJCWNvbG9yc1tp XVswXSwgY29sb3JzW2ldWzFdLCBjb2xvcnNbaV1bMl0pOwo+ICsJCQlpZ3RfcHV0X2NhaXJvX2N0 eChkaXNwbGF5LT5kcm1fZmQsICZkYXRhLT5mYlszXSwgY3IpOwo+ICsKPiArCQkJaWYgKCFpKSB7 Cj4gKwkJCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCByZWZfZmIpOwo+ICsJCQkJaWd0X3BsYW5l X3NldF9wb3NpdGlvbihwbGFuZSwgbW9kZS0+aGRpc3BsYXkgLSByZWZfZmItPndpZHRoLCBtb2Rl LT52ZGlzcGxheSAtIHJlZl9mYi0+aGVpZ2h0KTsKPiArCQkJCWlndF9kaXNwbGF5X2NvbW1pdDIo ZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlpZ3RfZGlydHlf ZmIoZGlzcGxheS0+ZHJtX2ZkLCByZWZfZmIpOwo+ICsJCQkJaWd0X3dhaXRfZm9yX3ZibGFuayhk aXNwbGF5LT5kcm1fZmQsIHBpcGUpOwo+ICsJCQl9Cj4gKwo+ICsJCQlpZ3RfcGlwZV9jcmNfZHJh aW4oZGF0YS0+cGlwZV9jcmMpOwo+ICsJCQlpZ3RfcGlwZV9jcmNfZ2V0X3NpbmdsZShkYXRhLT5w aXBlX2NyYywgJnJlZl9jcmNbaV0pOwo+ICsJCX0KPiArCj4gKwkJaWd0X3BsYW5lX3NldF9mYihw bGFuZSwgTlVMTCk7Cj4gKwkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgMCwgMCk7Cj4g Kwo+ICsJCXl1dl92YWxpZF93aWR0aF9wbGFuZShkYXRhLCBtb2RlLCBwbGFuZSwgSUdUX1JPVEFU SU9OXzAsICZyZWZfY3JjWzBdKTsKPiArCQl5dXZfdmFsaWRfd2lkdGhfcGxhbmUoZGF0YSwgbW9k ZSwgcGxhbmUsIElHVF9ST1RBVElPTl85MCwgJnJlZl9jcmNbMV0pOwo+ICsJCXl1dl92YWxpZF93 aWR0aF9wbGFuZShkYXRhLCBtb2RlLCBwbGFuZSwgSUdUX1JPVEFUSU9OXzE4MCwgJnJlZl9jcmNb Ml0pOwo+ICsJCXl1dl92YWxpZF93aWR0aF9wbGFuZShkYXRhLCBtb2RlLCBwbGFuZSwgSUdUX1JP VEFUSU9OXzI3MCwgJnJlZl9jcmNbM10pOwo+ICsKPiArCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5l LCBOVUxMKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGJvb2wgeXV2X2NvbW1pdF9yb3RhdGVk KGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGlndF9yb3RhdGlvbl90IHJvdCkKPiArewo+ICsJaWYg KGlndF9kaXNwbGF5X3RyeV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpIDwgMCkgewo+ ICsJCWlndF9kZWJ1ZygiU2tpcHBpbmcgcm90YXRlZCB0ZXN0LCBhbGlnbm1lbnQgaXMgd3Jvbmcu XG4iKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIHl1dl9jcm9wX3NjYWxlX2J1Z19wbGFuZShkYXRhX3QgKmRhdGEs IGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKPiArCQkJCSAgICAgIGlndF9wbGFuZV90ICpwbGFuZSwg c3RydWN0IGlndF9mYiAqZmIsCj4gKwkJCQkgICAgICBpZ3Rfcm90YXRpb25fdCByb3QsIGlndF9j cmNfdCAqcmVmX2NyYykKPiArewo+ICsJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5k aXNwbGF5Owo+ICsJaWd0X2NyY190IGNyYzsKPiArCWludCBvZnNbXSA9IHsgMCwgMSwgLTEsIDIs IC0yIH07Cj4gKwlpbnQgaSwgajsKPiArCj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBmYik7 Cj4gKwlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCByb3QpOwo+ICsJaWd0X3BsYW5lX3Nl dF9wb3NpdGlvbihwbGFuZSwgNjQsIDY0KTsKPiArCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwg MjU2LCAyNTYpOwo+ICsKPiArCWlndF9mYl9zZXRfcG9zaXRpb24oZmIsIHBsYW5lLCBmYi0+d2lk dGggLyA0LCBmYi0+aGVpZ2h0IC8gNCk7Cj4gKwlpZ3RfZmJfc2V0X3NpemUoZmIsIHBsYW5lLCBm Yi0+d2lkdGggLyAyLCBmYi0+aGVpZ2h0IC8gMik7Cj4gKwlpZiAoKHJvdCA9PSBJR1RfUk9UQVRJ T05fOTAgfHwgcm90ID09IElHVF9ST1RBVElPTl8yNzApICYmCj4gKwkgICAgaWd0X2Rpc3BsYXlf dHJ5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQykgPCAwKSB7Cj4gKwkJaWd0X2RlYnVn KCJUaGlzIHJvdGF0aW9uIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgZm9ybWF0LlxuIik7Cj4gKwkJ cmV0dXJuOwo+ICsJfQo+ICsKPiArCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlU X0FUT01JQyk7Cj4gKwlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywg JmNyYywgcmVmX2NyYyk7Cj4gKwo+ICsJLyogTWFrZSBzdXJlIGJvdW5kYXJpZXMgbWF0Y2ggKi8K PiArCWlndF9mYl9zZXRfcG9zaXRpb24oZmIsIHBsYW5lLCBmYi0+d2lkdGggLyA0IC0gMiwgZmIt PmhlaWdodCAvIDQgLSAyKTsKPiArCWlndF9mYl9zZXRfc2l6ZShmYiwgcGxhbmUsIGZiLT53aWR0 aCAvIDIgKyA0LCBmYi0+aGVpZ2h0IC8gMiArIDQpOwo+ICsJaWd0X2Rpc3BsYXlfY29tbWl0Mihk aXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKPiArCWFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRh dGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKPiArCj4gKwlmb3IgKGkgPSAxOyBpIDwgQVJS QVlfU0laRShvZnMpOyBpKyspIHsKPiArCQlpZ3RfZGVidWcoIlRlc3Rpbmcgd2l0aCByb3QgJXgg YW5kIGV4dHJhICVpIG9uIHRoZSBsZWZ0IHNpZGVcbiIsIHJvdCwgb2ZzW2ldKTsKPiArCQlpZ3Rf ZmJfc2V0X3Bvc2l0aW9uKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gNCArIG9mc1tpXSwgZmItPmhl aWdodCAvIDQgLSAyKTsKPiArCQlpZ3RfZmJfc2V0X3NpemUoZmIsIHBsYW5lLCBmYi0+d2lkdGgg LyAyICsgMiAtIG9mc1tpXSwgZmItPmhlaWdodCAvIDIgKyA0KTsKPiArCQlpZiAoeXV2X2NvbW1p dF9yb3RhdGVkKGRpc3BsYXksIHJvdCkpCj4gKwkJCWFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFs KGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKPiArCj4gKwkJaWd0X2RlYnVnKCJUZXN0 aW5nIHdpdGggcm90ICV4IGFuZCBleHRyYSAlaSBvbiB0aGUgdG9wIHNpZGVcbiIsIHJvdCwgb2Zz W2ldKTsKPiArCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gNCAt IDIsIGZiLT5oZWlnaHQgLyA0ICsgb2ZzW2ldKTsKPiArCQlpZ3RfZmJfc2V0X3NpemUoZmIsIHBs YW5lLCBmYi0+d2lkdGggLyAyICsgNCwgZmItPmhlaWdodCAvIDIgKyAyIC0gb2ZzW2ldKTsKPiAr CQlpZiAoeXV2X2NvbW1pdF9yb3RhdGVkKGRpc3BsYXksIHJvdCkpCj4gKwkJCWFzc2VydF9jb2xs ZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKPiArCj4gKwkJ aWd0X2RlYnVnKCJUZXN0aW5nIHdpdGggcm90ICV4IGFuZCBleHRyYSAlaSBvbiB0aGUgcmlnaHQg c2lkZVxuIiwgcm90LCBvZnNbaV0pOwo+ICsJCWlndF9mYl9zZXRfcG9zaXRpb24oZmIsIHBsYW5l LCBmYi0+d2lkdGggLyA0IC0gMiwgZmItPmhlaWdodCAvIDQpOwo+ICsJCWlndF9mYl9zZXRfc2l6 ZShmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDIgKyAyICsgb2ZzW2ldLCBmYi0+aGVpZ2h0IC8gMik7 Cj4gKwkJaWYgKHl1dl9jb21taXRfcm90YXRlZChkaXNwbGF5LCByb3QpKQo+ICsJCQlhc3NlcnRf Y29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7Cj4gKwo+ ICsJCWlndF9kZWJ1ZygiVGVzdGluZyB3aXRoIHJvdCAleCBhbmQgZXh0cmEgJWkgb24gdGhlIGJv dHRvbSBzaWRlXG4iLCByb3QsIG9mc1tpXSk7Cj4gKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihmYiwg cGxhbmUsIGZiLT53aWR0aCAvIDQgLSAyLCBmYi0+aGVpZ2h0IC8gNCAtIDIpOwo+ICsJCWlndF9m Yl9zZXRfc2l6ZShmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDIgKyA0LCBmYi0+aGVpZ2h0IC8gMiAr IDIgKyBvZnNbaV0pOwo+ICsJCWlmICh5dXZfY29tbWl0X3JvdGF0ZWQoZGlzcGxheSwgcm90KSkK PiArCQkJYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJl Zl9jcmMpOwo+ICsKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvZnMp OyBpKyspCj4gKwkJZm9yIChqID0gIWk7IGogPCBBUlJBWV9TSVpFKG9mcyk7IGorKykgewo+ICsJ CQlpZ3RfZGVidWcoIlRlc3Rpbmcgd2l0aCByb3QgJXggYW5kIGV4dHJhICglaSwgJWkpIGF0IHRo ZSBlZGdlc1xuIiwgcm90LCBvZnNbaV0sIG9mc1tqXSk7Cj4gKwo+ICsJCQlpZ3RfZmJfc2V0X3Bv c2l0aW9uKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gNCArIG9mc1tpXSwgZmItPmhlaWdodCAvIDQg KyBvZnNbal0pOwo+ICsJCQlpZ3RfZmJfc2V0X3NpemUoZmIsIHBsYW5lLCBmYi0+d2lkdGggLyAy IC0gMiAqIG9mc1tpXSwgZmItPmhlaWdodCAvIDIgLSAyICogb2ZzW2pdKTsKPiArCj4gKwkJCWlm ICh5dXZfY29tbWl0X3JvdGF0ZWQoZGlzcGxheSwgcm90KSkKPiArCQkJCWFzc2VydF9jb2xsZWN0 ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKPiArCQl9Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGRyYXdfY2xpcF9mYihpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBz dHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiKQo+ICt7Cj4gKwljYWlyb190ICpjciA9IGlndF9nZXRfY2Fp cm9fY3R4KGRpc3BsYXktPmRybV9mZCwgY2xpcF9mYik7Cj4gKwo+ICsJaWd0X3BhaW50X2NvbG9y KGNyLCAwLCAwLCBjbGlwX2ZiLT53aWR0aCwgY2xpcF9mYi0+aGVpZ2h0LCAuMCwgLjAsIC41KTsK PiArCWlndF9wYWludF9jb2xvcihjciwgY2xpcF9mYi0+d2lkdGggLyA0IC0gMiwgY2xpcF9mYi0+ aGVpZ2h0IC8gNCAtIDIsCj4gKwkJCWNsaXBfZmItPndpZHRoIC8gMiArIDQsIGNsaXBfZmItPmhl aWdodCAvIDIgKyA0LCAxLiwgMS4sIDEuKTsKPiArCj4gKwlpZ3RfcHV0X2NhaXJvX2N0eChkaXNw bGF5LT5kcm1fZmQsIGNsaXBfZmIsIGNyKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgeXV2X2Ny b3Bfc2NhbGVfYnVnKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsIGlndF9vdXRwdXRfdCAq b3V0cHV0LCB1bnNpZ25lZCBmb3JtYXQpCj4gK3sKPiArCWRybU1vZGVNb2RlSW5mbyAqbW9kZSA9 IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkg PSAmZGF0YS0+ZGlzcGxheTsKPiArCWlndF9wbGFuZV90ICpwbGFuZSwgKnByaW1hcnkgPSBpZ3Rf cGlwZV9nZXRfcGxhbmVfdHlwZSgmZGlzcGxheS0+cGlwZXNbcGlwZV0sIERSTV9QTEFORV9UWVBF X1BSSU1BUlkpOwo+ICsJc3RydWN0IGlndF9mYiAqcmVmX2ZiID0gJmRhdGEtPmZiWzJdOwo+ICsJ c3RydWN0IGlndF9mYiAqY2xpcF9mYiA9ICZkYXRhLT5mYlszXTsKPiArCXN0cnVjdCBpZ3RfZmIg KmNsaXBfZmJfeHRpbGVkID0gJmRhdGEtPmZiWzRdOwo+ICsJc3RydWN0IGlndF9mYiAqY2xpcF9m Yl95dGlsZWQgPSAmZGF0YS0+ZmJbNV07Cj4gKwo+ICsJcHJlcGFyZV9jcnRjKGRhdGEsIHBpcGUs IG91dHB1dCk7Cj4gKwo+ICsJaWd0X2NyZWF0ZV9jb2xvcl9mYihkaXNwbGF5LT5kcm1fZmQsIG1v ZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKPiArCQkJICAgIGZvcm1hdCwgeF9tb2RpZmll ciwgLjUsIC41LCAuNSwgJmRhdGEtPmZiWzBdKTsKPiArCj4gKwlpZ3RfY3JlYXRlX2NvbG9yX2Zi KGRpc3BsYXktPmRybV9mZCwgMjU2LCAyNTYsIGZvcm1hdCwKPiArCQkJICAgIHhfbW9kaWZpZXIs IDEuLCAxLiwgMS4sIHJlZl9mYik7Cj4gKwo+ICsJaWd0X2NyZWF0ZV9mYihkaXNwbGF5LT5kcm1f ZmQsIDgwLCAxMjgsIGZvcm1hdCwKPiArCQkgICAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05F LCBjbGlwX2ZiKTsKPiArCj4gKwlpZ3RfY3JlYXRlX2ZiKGRpc3BsYXktPmRybV9mZCwgODAsIDEy OCwgZm9ybWF0LAo+ICsJCSAgICAgIHhfbW9kaWZpZXIsIGNsaXBfZmJfeHRpbGVkKTsKPiArCWln dF9jcmVhdGVfZmIoZGlzcGxheS0+ZHJtX2ZkLCA4MCwgMTI4LCBmb3JtYXQsCj4gKwkJICAgICAg eV9tb2RpZmllciwgY2xpcF9mYl95dGlsZWQpOwo+ICsKPiArCWRyYXdfY2xpcF9mYihkaXNwbGF5 LCBjbGlwX2ZiKTsKPiArCWRyYXdfY2xpcF9mYihkaXNwbGF5LCBjbGlwX2ZiX3h0aWxlZCk7Cj4g KwlkcmF3X2NsaXBfZmIoZGlzcGxheSwgY2xpcF9mYl95dGlsZWQpOwo+ICsKPiArCWlndF9wbGFu ZV9zZXRfZmIocHJpbWFyeSwgJmRhdGEtPmZiWzBdKTsKPiArCj4gKwlmb3JfZWFjaF9wbGFuZV9v bl9waXBlKGRpc3BsYXksIHBpcGUsIHBsYW5lKSB7Cj4gKwkJaWd0X2NyY190IHJlZl9jcmM7Cj4g Kwo+ICsJCWlmICghaWd0X3BsYW5lX2hhc19mb3JtYXRfbW9kKHBsYW5lLCBmb3JtYXQsIGRhdGEt PmZiWzBdLm1vZGlmaWVyKSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWlndF9wbGFuZV9zZXRf ZmIocGxhbmUsIHJlZl9mYik7Cj4gKwkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgNjQs IDY0KTsKPiArCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+ ICsKPiArCQlpZ3RfcGlwZV9jcmNfc3RhcnQoZGF0YS0+cGlwZV9jcmMpOwo+ICsJCWlndF9waXBl X2NyY19nZXRfc2luZ2xlKGRhdGEtPnBpcGVfY3JjLCAmcmVmX2NyYyk7Cj4gKwo+ICsJCXl1dl9j cm9wX3NjYWxlX2J1Z19wbGFuZShkYXRhLCBtb2RlLCBwbGFuZSwgY2xpcF9mYiwgSUdUX1JPVEFU SU9OXzAsICZyZWZfY3JjKTsKPiArCQl5dXZfY3JvcF9zY2FsZV9idWdfcGxhbmUoZGF0YSwgbW9k ZSwgcGxhbmUsIGNsaXBfZmJfeHRpbGVkLCBJR1RfUk9UQVRJT05fMCwgJnJlZl9jcmMpOwo+ICsJ CXl1dl9jcm9wX3NjYWxlX2J1Z19wbGFuZShkYXRhLCBtb2RlLCBwbGFuZSwgY2xpcF9mYl95dGls ZWQsIElHVF9ST1RBVElPTl8wLCAmcmVmX2NyYyk7Cj4gKwkJeXV2X2Nyb3Bfc2NhbGVfYnVnX3Bs YW5lKGRhdGEsIG1vZGUsIHBsYW5lLCBjbGlwX2ZiX3l0aWxlZCwgSUdUX1JPVEFUSU9OXzkwLCAm cmVmX2NyYyk7Cj4gKwkJeXV2X2Nyb3Bfc2NhbGVfYnVnX3BsYW5lKGRhdGEsIG1vZGUsIHBsYW5l LCBjbGlwX2ZiLCBJR1RfUk9UQVRJT05fMTgwLCAmcmVmX2NyYyk7Cj4gKwkJeXV2X2Nyb3Bfc2Nh bGVfYnVnX3BsYW5lKGRhdGEsIG1vZGUsIHBsYW5lLCBjbGlwX2ZiX3h0aWxlZCwgSUdUX1JPVEFU SU9OXzE4MCwgJnJlZl9jcmMpOwo+ICsJCXl1dl9jcm9wX3NjYWxlX2J1Z19wbGFuZShkYXRhLCBt b2RlLCBwbGFuZSwgY2xpcF9mYl95dGlsZWQsIElHVF9ST1RBVElPTl8xODAsICZyZWZfY3JjKTsK PiArCQl5dXZfY3JvcF9zY2FsZV9idWdfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsIGNsaXBfZmJf eXRpbGVkLCBJR1RfUk9UQVRJT05fMjcwLCAmcmVmX2NyYyk7Cj4gKwo+ICsJCWlndF9wbGFuZV9z ZXRfZmIocGxhbmUsIHBsYW5lICE9IHByaW1hcnkgPyBOVUxMIDogJmRhdGEtPmZiWzBdKTsKPiAr CQlicmVhazsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgeXV2X2Nocm9tYV9zdWJwaXhl bF9jbGlwX3BsYW5lX3dpdGhfY3Vyc29yKGRhdGFfdCAqZGF0YSwKPiArCQkJCQkJCWlndF9wbGFu ZV90ICpwbGFuZSwKPiArCQkJCQkJCXN0cnVjdCBpZ3RfZmIgKmNsaXBfZmIsCj4gKwkJCQkJCQlp Z3RfcGxhbmVfdCAqY3Vyc29yLAo+ICsJCQkJCQkJc3RydWN0IGlndF9mYiAqY3Vyc29yX2ZiLAo+ ICsJCQkJCQkJaWd0X2NyY190ICpyZWZfY3JjLAo+ICsJCQkJCQkJaW50IGN1cnNvcl94LCBpbnQg Y3Vyc29yX3kpCj4gK3sKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxh eTsKPiArCj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBjbGlwX2ZiKTsKPiArCWlndF9wbGFu ZV9zZXRfcG9zaXRpb24ocGxhbmUsIDY0LCA2NCk7Cj4gKwlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9u KHBsYW5lLCBJR1RfUk9UQVRJT05fMCk7Cj4gKwo+ICsJaWd0X3BsYW5lX3NldF9mYihjdXJzb3Is IGN1cnNvcl9mYik7Cj4gKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKGN1cnNvciwgY3Vyc29yX3gs IGN1cnNvcl95KTsKPiArCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01J Qyk7Cj4gKwo+ICsJaWd0X3BpcGVfY3JjX2RyYWluKGRhdGEtPnBpcGVfY3JjKTsKPiArCWlndF9w aXBlX2NyY19nZXRfc2luZ2xlKGRhdGEtPnBpcGVfY3JjLCByZWZfY3JjKTsKPiArCj4gKwlpZ3Rf cGxhbmVfc2V0X2ZiKGN1cnNvciwgTlVMTCk7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIHl1dl9j aHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9yaWdodChkYXRhX3QgKmRhdGEsCj4gKwkJCQkJCSBp Z3Rfcm90YXRpb25fdCByb3RhdGlvbiwKPiArCQkJCQkJIGlndF9wbGFuZV90ICpwbGFuZSwKPiAr CQkJCQkJIHN0cnVjdCBpZ3RfZmIgKmNsaXBfZmIsCj4gKwkJCQkJCSBpZ3RfY3JjX3QgKnJlZl9j cmMpCj4gK3sKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPiAr CWlndF9jcmNfdCBjcmMgPSB7fTsKPiArCj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBjbGlw X2ZiKTsKPiArCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDY0LCA2NCk7Cj4gKwlpZ3Rf cGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCByb3RhdGlvbik7Cj4gKwlpZ3RfcGxhbmVfc2V0X3Np emUocGxhbmUsIGNsaXBfZmItPndpZHRoIC0gMSwgY2xpcF9mYi0+aGVpZ2h0KTsKPiArCj4gKwlz d2l0Y2ggKHJvdGF0aW9uKSB7Cj4gKwljYXNlIElHVF9ST1RBVElPTl8xODA6Cj4gKwkJaWd0X2Zi X3NldF9wb3NpdGlvbihjbGlwX2ZiLCBwbGFuZSwgMSwgMCk7Cj4gKwljYXNlIElHVF9ST1RBVElP Tl8wOgo+ICsJCWlndF9mYl9zZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwgY2xpcF9mYi0+d2lkdGgg LSAxLCBjbGlwX2ZiLT5oZWlnaHQpOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgSUdUX1JPVEFU SU9OXzI3MDoKPiArCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGNsaXBfZmIsIHBsYW5lLCAwLCAxKTsK PiArCWNhc2UgSUdUX1JPVEFUSU9OXzkwOgo+ICsJCWlndF9mYl9zZXRfc2l6ZShjbGlwX2ZiLCBw bGFuZSwgY2xpcF9mYi0+d2lkdGgsIGNsaXBfZmItPmhlaWdodCAtIDEpOwo+ICsJCWJyZWFrOwo+ ICsJZGVmYXVsdDoKPiArCQlpZ3RfYXNzZXJ0X2YoMCwgIlVuaGFuZGxlZCByb3RhdGlvbiAleFxu Iiwgcm90YXRpb24pOwo+ICsJfQo+ICsKPiArCWlmIChpZ3RfZGlzcGxheV90cnlfY29tbWl0Mihk aXNwbGF5LCBDT01NSVRfQVRPTUlDKSA8IDApCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWFz c2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsK PiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCB5dXZfY2hyb21hX3N1YnBp eGVsX2NsaXBfcGxhbmVfYm90dG9tKGRhdGFfdCAqZGF0YSwKPiArCQkJCQkJICBpZ3Rfcm90YXRp b25fdCByb3RhdGlvbiwKPiArCQkJCQkJICBpZ3RfcGxhbmVfdCAqcGxhbmUsCj4gKwkJCQkJCSAg c3RydWN0IGlndF9mYiAqY2xpcF9mYiwKPiArCQkJCQkJICBpZ3RfY3JjX3QgKnJlZl9jcmMpCj4g K3sKPiArCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPiArCWlndF9j cmNfdCBjcmMgPSB7fTsKPiArCj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBjbGlwX2ZiKTsK PiArCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDY0LCA2NCk7Cj4gKwlpZ3RfcGxhbmVf c2V0X3JvdGF0aW9uKHBsYW5lLCByb3RhdGlvbik7Cj4gKwlpZ3RfcGxhbmVfc2V0X3NpemUocGxh bmUsIGNsaXBfZmItPndpZHRoLCBjbGlwX2ZiLT5oZWlnaHQgLSAxKTsKPiArCj4gKwlzd2l0Y2gg KHJvdGF0aW9uKSB7Cj4gKwljYXNlIElHVF9ST1RBVElPTl8xODA6Cj4gKwkJaWd0X2ZiX3NldF9w b3NpdGlvbihjbGlwX2ZiLCBwbGFuZSwgMCwgMSk7Cj4gKwljYXNlIElHVF9ST1RBVElPTl8wOgo+ ICsJCWlndF9mYl9zZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwgY2xpcF9mYi0+d2lkdGgsIGNsaXBf ZmItPmhlaWdodCAtIDEpOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgSUdUX1JPVEFUSU9OXzkw Ogo+ICsJCWlndF9mYl9zZXRfcG9zaXRpb24oY2xpcF9mYiwgcGxhbmUsIDEsIDApOwo+ICsJY2Fz ZSBJR1RfUk9UQVRJT05fMjcwOgo+ICsJCWlndF9mYl9zZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwg Y2xpcF9mYi0+d2lkdGggLSAxLCBjbGlwX2ZiLT5oZWlnaHQpOwo+ICsJCWJyZWFrOwo+ICsJZGVm YXVsdDoKPiArCQlpZ3RfYXNzZXJ0X2YoMCwgIlVuaGFuZGxlZCByb3RhdGlvbiAleFxuIiwgcm90 YXRpb24pOwo+ICsJfQo+ICsKPiArCWlmIChpZ3RfZGlzcGxheV90cnlfY29tbWl0MihkaXNwbGF5 LCBDT01NSVRfQVRPTUlDKSA8IDApCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWFzc2VydF9j b2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKPiArCXJl dHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCB5dXZfY2hyb21hX3N1YnBpeGVsX2Ns aXBfcGxhbmVfbGVmdChkYXRhX3QgKmRhdGEsCj4gKwkJCQkJCWlndF9yb3RhdGlvbl90IHJvdGF0 aW9uLAo+ICsJCQkJCQlpZ3RfcGxhbmVfdCAqcGxhbmUsCj4gKwkJCQkJCXN0cnVjdCBpZ3RfZmIg KmNsaXBfZmIsCj4gKwkJCQkJCWlndF9jcmNfdCAqcmVmX2NyYykKPiArewo+ICsJaWd0X2Rpc3Bs YXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Owo+ICsJaWd0X2NyY190IGNyYyA9IHt9Owo+ ICsKPiArCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIGNsaXBfZmIpOwo+ICsJaWd0X3BsYW5lX3Nl dF9wb3NpdGlvbihwbGFuZSwgNjUsIDY0KTsKPiArCWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxh bmUsIHJvdGF0aW9uKTsKPiArCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgY2xpcF9mYi0+d2lk dGggLSAxLCBjbGlwX2ZiLT5oZWlnaHQpOwo+ICsKPiArCXN3aXRjaCAocm90YXRpb24pIHsKPiAr CWNhc2UgSUdUX1JPVEFUSU9OXzA6Cj4gKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihjbGlwX2ZiLCBw bGFuZSwgMSwgMCk7Cj4gKwljYXNlIElHVF9ST1RBVElPTl8xODA6Cj4gKwkJaWd0X2ZiX3NldF9z aXplKGNsaXBfZmIsIHBsYW5lLCBjbGlwX2ZiLT53aWR0aCAtIDEsIGNsaXBfZmItPmhlaWdodCk7 Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBJR1RfUk9UQVRJT05fOTA6Cj4gKwkJaWd0X2ZiX3Nl dF9wb3NpdGlvbihjbGlwX2ZiLCBwbGFuZSwgMCwgMSk7Cj4gKwljYXNlIElHVF9ST1RBVElPTl8y NzA6Cj4gKwkJaWd0X2ZiX3NldF9zaXplKGNsaXBfZmIsIHBsYW5lLCBjbGlwX2ZiLT53aWR0aCwg Y2xpcF9mYi0+aGVpZ2h0IC0gMSk7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCWlndF9h c3NlcnRfZigwLCAiVW5oYW5kbGVkIHJvdGF0aW9uICV4XG4iLCByb3RhdGlvbik7Cj4gKwl9Cj4g Kwo+ICsJaWYgKGlndF9kaXNwbGF5X3RyeV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMp IDwgMCkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1 YWwoZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOwo+ICsJcmV0dXJuIHRydWU7Cj4gK30K PiArCj4gKwo+ICtzdGF0aWMgYm9vbCB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfdG9w KGRhdGFfdCAqZGF0YSwKPiArCQkJCQkgICAgICBpZ3Rfcm90YXRpb25fdCByb3RhdGlvbiwKPiAr CQkJCQkgICAgICBpZ3RfcGxhbmVfdCAqcGxhbmUsCj4gKwkJCQkJICAgICAgc3RydWN0IGlndF9m YiAqY2xpcF9mYiwKPiArCQkJCQkgICAgICBpZ3RfY3JjX3QgKnJlZl9jcmMpCj4gK3sKPiArCWln dF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPiArCWlndF9jcmNfdCBjcmMg PSB7fTsKPiArCj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBjbGlwX2ZiKTsKPiArCWlndF9w bGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDY0LCA2NSk7Cj4gKwlpZ3RfcGxhbmVfc2V0X3JvdGF0 aW9uKHBsYW5lLCByb3RhdGlvbik7Cj4gKwlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIGNsaXBf ZmItPndpZHRoLCBjbGlwX2ZiLT5oZWlnaHQgLSAxKTsKPiArCj4gKwlzd2l0Y2ggKHJvdGF0aW9u KSB7Cj4gKwljYXNlIElHVF9ST1RBVElPTl8wOgo+ICsJCWlndF9mYl9zZXRfcG9zaXRpb24oY2xp cF9mYiwgcGxhbmUsIDAsIDEpOwo+ICsJY2FzZSBJR1RfUk9UQVRJT05fMTgwOgo+ICsJCWlndF9m Yl9zZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwgY2xpcF9mYi0+d2lkdGgsIGNsaXBfZmItPmhlaWdo dCAtIDEpOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgSUdUX1JPVEFUSU9OXzI3MDoKPiArCQlp Z3RfZmJfc2V0X3Bvc2l0aW9uKGNsaXBfZmIsIHBsYW5lLCAxLCAwKTsKPiArCWNhc2UgSUdUX1JP VEFUSU9OXzkwOgo+ICsJCWlndF9mYl9zZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwgY2xpcF9mYi0+ d2lkdGggLSAxLCBjbGlwX2ZiLT5oZWlnaHQpOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiAr CQlpZ3RfYXNzZXJ0X2YoMCwgIlVuaGFuZGxlZCByb3RhdGlvbiAleFxuIiwgcm90YXRpb24pOwo+ ICsJfQo+ICsKPiArCWlmIChpZ3RfZGlzcGxheV90cnlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRf QVRPTUlDKSA8IDApCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWFzc2VydF9jb2xsZWN0ZWRf Y3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKPiArCXJldHVybiB0cnVl Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXAoZGF0YV90 ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgaWd0X291dHB1dF90ICpvdXRwdXQsIHVuc2lnbmVkIGZv cm1hdCkKPiArewo+ICsJZHJtTW9kZU1vZGVJbmZvICptb2RlID0gaWd0X291dHB1dF9nZXRfbW9k ZShvdXRwdXQpOwo+ICsJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Owo+ ICsJaWd0X3BpcGVfdCAqcGlwZV9vYmogPSAmZGlzcGxheS0+cGlwZXNbcGlwZV07Cj4gKwlzdHJ1 Y3QgaWd0X2ZiICpiZ19mYiA9ICZkYXRhLT5mYlswXTsKPiArCXN0cnVjdCBpZ3RfZmIgKmJnX2N1 cnNvcl9mYiA9ICZkYXRhLT5mYlsxXTsKPiArCXN0cnVjdCBpZ3RfZmIgKmJsYWNrX2N1cnNvcl9m YiA9ICZkYXRhLT5mYlsyXTsKPiArCXN0cnVjdCBpZ3RfZmIgKmNsaXBfZmIgPSAmZGF0YS0+ZmJb M107Cj4gKwlpZ3RfcGxhbmVfdCAqcHJpbWFyeSA9IGlndF9waXBlX2dldF9wbGFuZV90eXBlKHBp cGVfb2JqLCBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKPiArCWlndF9wbGFuZV90ICpjdXJzb3Ig PSBpZ3RfcGlwZV9nZXRfcGxhbmVfdHlwZShwaXBlX29iaiwgRFJNX1BMQU5FX1RZUEVfQ1VSU09S KTsKPiArCWlndF9wbGFuZV90ICpwbGFuZTsKPiArCWNhaXJvX3QgKmNyOwo+ICsJYm9vbCByZXQg PSBmYWxzZTsKPiArCj4gKwlwcmVwYXJlX2NydGMoZGF0YSwgcGlwZSwgb3V0cHV0KTsKPiArCj4g KwlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRpc3BsYXktPmRybV9mZCwgbW9kZS0+aGRpc3BsYXksIG1v ZGUtPnZkaXNwbGF5LAo+ICsJCQkgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwgeF9tb2RpZmllciwK PiArCQkJICAgIC4wLCAuMCwgMS4sIGJnX2ZiKTsKPiArCj4gKwlpZ3RfY3JlYXRlX2NvbG9yX2Zi KGRpc3BsYXktPmRybV9mZCwgMjU2LCAyNTYsCj4gKwkJICAgICAgICAgICAgRFJNX0ZPUk1BVF9B UkdCODg4OCwgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKPiArCQkJICAgIC4wLCAuMCwgMS4s IGJnX2N1cnNvcl9mYik7Cj4gKwo+ICsJaWd0X2NyZWF0ZV9jb2xvcl9mYihkaXNwbGF5LT5kcm1f ZmQsIDI1NiwgMjU2LAo+ICsJCSAgICAgICAgICAgIERSTV9GT1JNQVRfQVJHQjg4ODgsIExPQ0FM X0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gKwkJCSAgICAuMCwgLjAsIC4wLCBibGFja19jdXJzb3Jf ZmIpOwo+ICsKPiArCWlndF9jcmVhdGVfZmIoZGlzcGxheS0+ZHJtX2ZkLCAyNTYsIDI1NiwKPiAr CQkgICAgICBmb3JtYXQsIHlfbW9kaWZpZXIsIGNsaXBfZmIpOwo+ICsKPiArCS8qIERyYXcgdGhl IEZCIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBjbGlwcGluZyB0aGUgY2hyb21hIHN1YnBpeGVsIHRl c3QuICovCj4gKwljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRpc3BsYXktPmRybV9mZCwgY2xpcF9m Yik7Cj4gKwo+ICsJaWd0X3BhaW50X2NvbG9yKGNyLCAwLCAwLCBjbGlwX2ZiLT53aWR0aCwgY2xp cF9mYi0+aGVpZ2h0LCAxLiwgMC4sIDAuKTsKPiArCWlndF9wYWludF9jb2xvcihjciwgMiwgMiwg Y2xpcF9mYi0+d2lkdGggLSA0LCBjbGlwX2ZiLT5oZWlnaHQgLSA0LCAwLiwgMS4sIDEuKTsKPiAr CWlndF9wYWludF9jb2xvcihjciwgNCwgNCwgY2xpcF9mYi0+d2lkdGggLSA4LCBjbGlwX2ZiLT5o ZWlnaHQgLSA4LCAuNzUsIC43NSwgMS4pOwo+ICsKPiArCS8qIFdoaXRlIGRvdHMgaW4gdGhlIGNv cm5lcnMuICovCj4gKwlpZ3RfcGFpbnRfY29sb3IoY3IsIDAsIDAsIDYsIDYsIDEuLCAxLiwgMS4p Owo+ICsJaWd0X3BhaW50X2NvbG9yKGNyLCBjbGlwX2ZiLT53aWR0aCAtIDYsIDAsIDYsIDYsIDEu LCAxLiwgMS4pOwo+ICsJaWd0X3BhaW50X2NvbG9yKGNyLCAwLCBjbGlwX2ZiLT5oZWlnaHQgLSA2 LCA2LCA2LCAxLiwgMS4sIDEuKTsKPiArCWlndF9wYWludF9jb2xvcihjciwgY2xpcF9mYi0+d2lk dGggLSA2LCBjbGlwX2ZiLT5oZWlnaHQgLSA2LCA2LCA2LCAxLiwgMS4sIDEuKTsKPiArCj4gKwlp Z3RfcHV0X2NhaXJvX2N0eChkaXNwbGF5LT5kcm1fZmQsIGNsaXBfZmIsIGNyKTsKPiArCj4gKwlp Z3RfcGlwZV9jcmNfc3RhcnQoZGF0YS0+cGlwZV9jcmMpOwo+ICsKPiArCWlndF9wbGFuZV9zZXRf ZmIocHJpbWFyeSwgYmdfZmIpOwo+ICsJZm9yX2VhY2hfcGxhbmVfb25fcGlwZShkaXNwbGF5LCBw aXBlLCBwbGFuZSkgewo+ICsJCXN0cnVjdCBpZ3RfZmIgKmN1cnNvcl9mYiA9IHBsYW5lID09IHBy aW1hcnkgPyBibGFja19jdXJzb3JfZmIgOiBiZ19jdXJzb3JfZmI7Cj4gKwkJaWd0X2NyY190IHJl Zl9jcmM7Cj4gKwo+ICsJCWlmICghaWd0X3BsYW5lX2hhc19mb3JtYXRfbW9kKHBsYW5lLCBmb3Jt YXQsIGNsaXBfZmItPm1vZGlmaWVyKSB8fCBwbGFuZSA9PSBjdXJzb3IpCj4gKwkJCWNvbnRpbnVl Owo+ICsKPiArCQl5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfd2l0aF9jdXJzb3IoZGF0 YSwgcGxhbmUsIGNsaXBfZmIsIGN1cnNvciwgY3Vyc29yX2ZiLCAmcmVmX2NyYywgNjMgKyBjbGlw X2ZiLT53aWR0aCwgNjQpOwo+ICsJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxh bmVfcmlnaHQoZGF0YSwgSUdUX1JPVEFUSU9OXzAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7 Cj4gKwkJcmV0IHw9IHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9yaWdodChkYXRhLCBJ R1RfUk9UQVRJT05fOTAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7Cj4gKwkJcmV0IHw9IHl1 dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9yaWdodChkYXRhLCBJR1RfUk9UQVRJT05fMTgw LCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOwo+ICsJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBp eGVsX2NsaXBfcGxhbmVfcmlnaHQoZGF0YSwgSUdUX1JPVEFUSU9OXzI3MCwgcGxhbmUsIGNsaXBf ZmIsICZyZWZfY3JjKTsKPiArCj4gKwkJeXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3dp dGhfY3Vyc29yKGRhdGEsIHBsYW5lLCBjbGlwX2ZiLCBjdXJzb3IsIGN1cnNvcl9mYiwgJnJlZl9j cmMsIDY0LCA2MyArIGNsaXBfZmItPmhlaWdodCk7Cj4gKwkJcmV0IHw9IHl1dl9jaHJvbWFfc3Vi cGl4ZWxfY2xpcF9wbGFuZV9ib3R0b20oZGF0YSwgSUdUX1JPVEFUSU9OXzAsIHBsYW5lLCBjbGlw X2ZiLCAmcmVmX2NyYyk7Cj4gKwkJcmV0IHw9IHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFu ZV9ib3R0b20oZGF0YSwgSUdUX1JPVEFUSU9OXzkwLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMp Owo+ICsJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfYm90dG9tKGRhdGEs IElHVF9ST1RBVElPTl8xODAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7Cj4gKwkJcmV0IHw9 IHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9ib3R0b20oZGF0YSwgSUdUX1JPVEFUSU9O XzI3MCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKPiArCj4gKwkJeXV2X2Nocm9tYV9zdWJw aXhlbF9jbGlwX3BsYW5lX3dpdGhfY3Vyc29yKGRhdGEsIHBsYW5lLCBjbGlwX2ZiLCBjdXJzb3Is IGN1cnNvcl9mYiwgJnJlZl9jcmMsIDY1IC0gY3Vyc29yX2ZiLT53aWR0aCwgNjQpOwo+ICsJCXJl dCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfbGVmdChkYXRhLCBJR1RfUk9UQVRJ T05fMCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKPiArCQlyZXQgfD0geXV2X2Nocm9tYV9z dWJwaXhlbF9jbGlwX3BsYW5lX2xlZnQoZGF0YSwgSUdUX1JPVEFUSU9OXzkwLCBwbGFuZSwgY2xp cF9mYiwgJnJlZl9jcmMpOwo+ICsJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxh bmVfbGVmdChkYXRhLCBJR1RfUk9UQVRJT05fMTgwLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMp Owo+ICsJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfbGVmdChkYXRhLCBJ R1RfUk9UQVRJT05fMjcwLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOwo+ICsKPiArCQl5dXZf Y2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfd2l0aF9jdXJzb3IoZGF0YSwgcGxhbmUsIGNsaXBf ZmIsIGN1cnNvciwgY3Vyc29yX2ZiLCAmcmVmX2NyYywgNjQsIDY1IC0gY3Vyc29yX2ZiLT5oZWln aHQpOwo+ICsJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfdG9wKGRhdGEs IElHVF9ST1RBVElPTl8wLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOwo+ICsJCXJldCB8PSB5 dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfdG9wKGRhdGEsIElHVF9ST1RBVElPTl85MCwg cGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKPiArCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhl bF9jbGlwX3BsYW5lX3RvcChkYXRhLCBJR1RfUk9UQVRJT05fMTgwLCBwbGFuZSwgY2xpcF9mYiwg JnJlZl9jcmMpOwo+ICsJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfdG9w KGRhdGEsIElHVF9ST1RBVElPTl8yNzAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7Cj4gKwo+ ICsJCS8qIFJlc2V0IHRvIGRlZmF1bHRzICovCj4gKwkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihw bGFuZSwgMCwgMCk7Cj4gKwkJaWd0X3BsYW5lX3NldF9yb3RhdGlvbihwbGFuZSwgSUdUX1JPVEFU SU9OXzApOwo+ICsJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIHBsYW5lID09IHByaW1hcnkgPyBi Z19mYiA6IE5VTEwpOwo+ICsJfQo+ICsKPiArCWlndF9yZXF1aXJlX2YocmV0LCAiQ291bGQgbm90 IHRlc3Qgc3VicGl4ZWwgY2xpcHBpbmcgaW4gYW55IGNvcm5lclxuIik7Cj4gK30KPiArCj4gK3N0 YXRpYyBjb25zdCBjaGFyICpwcmV0dGlmeSh1aW50MzJfdCBmb3VyY2MpCj4gK3sKPiArCXN0YXRp YyBjaGFyIHN0cls1XTsKPiArCj4gKwltZW1jcHkoc3RyLCAmZm91cmNjLCA0KTsKPiArCXN0cls0 XSA9IDA7Cj4gKwlyZXR1cm4gc3RyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBydW5fdGVzdHNf Zm9yX2Zvcm1hdChkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlLCBpZ3Rfb3V0cHV0X3QgKm91 dHB1dCwgdW5zaWduZWQgaW50IGZvcm1hdCkKPiArewo+ICsJaWd0X2Rpc3BsYXlfdCAqZGlzcGxh eSA9ICZkYXRhLT5kaXNwbGF5Owo+ICsJY29uc3QgY2hhciAqZnN0ciA9IHByZXR0aWZ5KGZvcm1h dCk7Cj4gKwo+ICsJaWd0X2ZpeHR1cmUKPiArCQlpZ3RfcmVxdWlyZShwaXBlX3N1cHBvcnRzX2Zv cm1hdChkaXNwbGF5LCBwaXBlLCBmb3JtYXQsIHhfbW9kaWZpZXIpKTsKPiArCj4gKwlpZ3Rfc3Vi dGVzdF9mKCJwaXBlLSVzLSVzLXJnYi1zd2l0Y2giLCBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSwg ZnN0cikKPiArCQl5dXZfcmdiX3N3aXRjaChkYXRhLCBwaXBlLCBvdXRwdXQsIGZhbHNlLCBmb3Jt YXQpOwo+ICsKPiArCWlndF9zdWJ0ZXN0X2YoInBpcGUtJXMtJXMtcmdiLXNjYWxlZC1zd2l0Y2gi LCBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSwgZnN0cikKPiArCQl5dXZfcmdiX3N3aXRjaChkYXRh LCBwaXBlLCBvdXRwdXQsIHRydWUsIGZvcm1hdCk7Cj4gKwo+ICsJaWd0X3N1YnRlc3RfZigicGlw ZS0lcy0lcy12YWxpZC13aWR0aCIsIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpLCBmc3RyKQo+ICsJ CXl1dl92YWxpZF93aWR0aChkYXRhLCBwaXBlLCBvdXRwdXQsIGZvcm1hdCk7Cj4gKwo+ICsJaWd0 X3N1YnRlc3RfZigicGlwZS0lcy0lcy1jcm9wLXNjYWxlLWJ1ZyIsIGttc3Rlc3RfcGlwZV9uYW1l KHBpcGUpLCBmc3RyKQo+ICsJCXl1dl9jcm9wX3NjYWxlX2J1ZyhkYXRhLCBwaXBlLCBvdXRwdXQs IGZvcm1hdCk7Cj4gKwo+ICsJaWd0X3N1YnRlc3RfZigicGlwZS0lcy0lcy1jaHJvbWEtc3VicGl4 ZWwtY2xpcCIsIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpLCBmc3RyKQo+ICsJCXl1dl9jaHJvbWFf c3VicGl4ZWxfY2xpcChkYXRhLCBwaXBlLCBvdXRwdXQsIGZvcm1hdCk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHJ1bl90ZXN0c19mb3JfcGlwZShkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBl KQo+ICt7Cj4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dCA9IE5VTEw7Cj4gKwo+ICsJaWd0X2ZpeHR1 cmUKPiArCQlpZ3RfcmVxdWlyZSgob3V0cHV0ID0gaWd0X2dldF9zaW5nbGVfb3V0cHV0X2Zvcl9w aXBlKCZkYXRhLT5kaXNwbGF5LCBwaXBlKSkpOwo+ICsKPiArCWlndF9zdWJ0ZXN0X2YoInBpcGUt JXMteXV2LXNhbml0eS1jcmMiLCBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSkKPiArCQl5dXZfc2Fu aXR5KGRhdGEsIHBpcGUsIG91dHB1dCk7Cj4gKwo+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu dF9mb3JtYXRzOyBpKyspCj4gKwkJaWYgKGlndF9mb3JtYXRfaXNfeXV2KGZvcm1hdHNbaV0pKQo+ ICsJCQlydW5fdGVzdHNfZm9yX2Zvcm1hdChkYXRhLCBwaXBlLCBvdXRwdXQsIGZvcm1hdHNbaV0p Owo+ICt9Cj4gKwo+ICtpZ3RfbWFpbgo+ICt7Cj4gKwlkYXRhX3QgZGF0YSA9IHt9Owo+ICsJZW51 bSBwaXBlIHBpcGU7Cj4gKwo+ICsJaWd0X3NraXBfb25fc2ltdWxhdGlvbigpOwo+ICsKPiArCWln dF9maXh0dXJlIHsKPiArCQlkYXRhLmRpc3BsYXkuZHJtX2ZkID0gZHJtX29wZW5fZHJpdmVyX21h c3RlcihEUklWRVJfQU5ZKTsKPiArCj4gKwkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgp Owo+ICsJCWlndF9kaXNwbGF5X3JlcXVpcmUoJmRhdGEuZGlzcGxheSwgZGF0YS5kaXNwbGF5LmRy bV9mZCk7Cj4gKwkJaWd0X3JlcXVpcmUoZGF0YS5kaXNwbGF5LmlzX2F0b21pYyk7Cj4gKwkJaWd0 X3JlcXVpcmVfcGlwZV9jcmMoZGF0YS5kaXNwbGF5LmRybV9mZCk7Cj4gKwo+ICsJCWlmIChpZ3Rf ZGlzcGxheV9oYXNfZm9ybWF0X21vZCgmZGF0YS5kaXNwbGF5LCBEUk1fRk9STUFUX1hSR0I4ODg4 LCBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCkpCj4gKwkJCXhfbW9kaWZpZXIgPSBMT0NB TF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDsKPiArCj4gKwkJaWYgKGlndF9kaXNwbGF5X2hhc19m b3JtYXRfbW9kKCZkYXRhLmRpc3BsYXksIERSTV9GT1JNQVRfWFJHQjg4ODgsIExPQ0FMX0k5MTVf Rk9STUFUX01PRF9ZX1RJTEVEKSkKPiArCQkJeV9tb2RpZmllciA9IExPQ0FMX0k5MTVfRk9STUFU X01PRF9ZX1RJTEVEOwo+ICsJfQo+ICsKPiArCWlndF9mb3JtYXRfYXJyYXlfZmlsbCgmZm9ybWF0 cywgJmNvdW50X2Zvcm1hdHMsIHRydWUpOwo+ICsKPiArCWZvcl9lYWNoX3BpcGVfc3RhdGljKHBp cGUpCj4gKwkJaWd0X3N1YnRlc3RfZ3JvdXAKPiArCQkJcnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRh LCBwaXBlKTsKPiArCj4gKwlpZ3RfZml4dHVyZSB7Cj4gKwkJaWd0X2Rpc3BsYXlfZmluaSgmZGF0 YS5kaXNwbGF5KTsKPiArCQljbG9zZShkYXRhLmRpc3BsYXkuZHJtX2ZkKTsKPiArCX0KPiArfQo+ IGRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCj4gaW5k ZXggZTNjOGIwN2ZlMjhlLi5jMWU2ZjliNWQwOTggMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvbWVzb24u YnVpbGQKPiArKysgYi90ZXN0cy9tZXNvbi5idWlsZAo+IEBAIC02Miw2ICs2Miw3IEBAIHRlc3Rf cHJvZ3MgPSBbCj4gICAJJ2ttc191bml2ZXJzYWxfcGxhbmUnLAo+ICAgCSdrbXNfdmJsYW5rJywK PiAgIAkna21zX3ZycicsCj4gKwkna21zX3l1dicsCj4gICAJJ21ldGFfdGVzdCcsCj4gICAJJ3Bl cmYnLAo+ICAgCSdwcmltZV9idXN5JywKPiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pZ3QtZGV2