From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id EABB86E261 for ; Fri, 1 Mar 2019 06:24:03 +0000 (UTC) References: <20190214152908.32606-1-maarten.lankhorst@linux.intel.com> From: "Sharma, Swati2" Message-ID: Date: Fri, 1 Mar 2019 11:53:58 +0530 MIME-Version: 1.0 In-Reply-To: <20190214152908.32606-1-maarten.lankhorst@linux.intel.com> Content-Language: en-US Subject: Re: [igt-dev] [PATCH i-g-t] tests/kms_yuv: Add yuv specific tests. 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: R2l2ZW4gcmV2aWV3IGNvbW1lbnRzIGp1c3QgZm9yIGZldyBjb3NtZXRpYyBjaGFuZ2VzLgoKT24g MTQtRmViLTE5IDg6NTkgUE0sIE1hYXJ0ZW4gTGFua2hvcnN0IHZpYSBpZ3QtZGV2IHdyb3RlOgo+ IEFkZCB0ZXN0cyBleGNlcmNpc2luZyBzd2l0Y2hpbmcgYmV0d2VlbiB2YXJpb3VzIHNjYWxlZC91 bnNjYWxlZAo+IHRyYW5zaXRpb25zIHRvIGFuZCBmcm9tIHZhcmlvdXMgbnYxMiBmb3JtYXRzLCBz aW5jZSBzb21lIG9mIHRoZQo+IHdvcmthcm91bmRzIG1lbnRpb24gdGhpcyBtYXkgZmFpbC4KPgo+ IFdlIGFsc28gYWRkIE5WMTIgc3BlY2lmaWMgY2xpcHBpbmcvc2NhbGluZyB0ZXN0cywgdG8gbWFr ZSBzdXJlCj4gdGhhdCBZVVYgc3JjIGNvb3JkaW5hdGVzIGFyZSBhbHdheXMgcHJvZ3JhbW1lZCBh cyBhIG11bHRpcGxlIG9mIDIKPiBjb3JyZWN0bHksIGFuZCB2ZXJpZnkgc2NhbGluZy9jbGlwcGlu ZyB3b3JrcyB3aXRoIENSQyB0ZXN0cy4KPgo+IGNyb3Atc2NhbGUtYnVnIHNob3dzIGEgY29ycnVw dGlvbiB3aGVuIHNjYWxpbmcgYW5kIGNyb3BwaW5nIGF0IHRoZQo+IHNhbWUgdGltZS4KPgo+IFRo ZSBzdWJwaXhlbCBjbGlwIHRlc3Qgcm90YXRlcyBhbmQgY2xpcHMgYSByZWN0YW5nbGUgb24gZWFj aCBzaWRlLAo+IHdoaWNoIHNob3VsZCBwcm9kdWNlIHRoZSBzYW1lIENSQyBhcyB3aGVuIHRoYXQg cGFydCBvZiB0aGUgcmVjdGFuZ2xlCj4gaXMgaGlkZGVuIGJ5IGEgY3Vyc29yIGFuZCBhIHdob2xl IDJ4MiBwaXhlbCBpcyBoaWRkZW4uCj4KPiBTaWduZWQtb2ZmLWJ5OiBNYWFydGVuIExhbmtob3Jz dCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgo+IC0tLQo+ICAgdGVzdHMvTWFr ZWZpbGUuc291cmNlcyB8ICAgMSArCj4gICB0ZXN0cy9rbXNfeXV2LmMgICAgICAgIHwgODQ1ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICB0ZXN0cy9tZXNvbi5i dWlsZCAgICAgIHwgICAxICsKPiAgIDMgZmlsZXMgY2hhbmdlZCwgODQ3IGluc2VydGlvbnMoKykK PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9rbXNfeXV2LmMKPgo+IGRpZmYgLS1naXQgYS90 ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+IGluZGV4IGEy MzRmYTVkZDU1My4uZDhlYjU4YTg1ZWQyIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNv dXJjZXMKPiArKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gQEAgLTcyLDYgKzcyLDcgQEAg VEVTVFNfcHJvZ3MgPSBcCj4gICAJa21zX3VuaXZlcnNhbF9wbGFuZSBcCj4gICAJa21zX3ZibGFu ayBcCj4gICAJa21zX3ZyciBcCj4gKwlrbXNfeXV2IFwKPiAgIAlrbXNfc2VxdWVuY2UgXAo+ICAg CW1ldGFfdGVzdCBcCj4gICAJcGVyZiBcCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc195dXYuYyBi L3Rlc3RzL2ttc195dXYuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAw MDAwLi45YTA0ODNmMTYzMWUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvdGVzdHMva21zX3l1di5j Cj4gQEAgLTAsMCArMSw4NDUgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwg Q29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk IGluCj4gKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3 YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK PiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCj4gKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUu Cj4gKyAqCj4gKyAqIEF1dGhvcnM6Cj4gKyAqICAgIE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVu Lmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+Cj4gKyAqLwo+ICsjaW5jbHVkZSAiY29uZmlnLmgi Cj4gKwo+ICsjaW5jbHVkZSAiaWd0LmgiCj4gKyNpbmNsdWRlIDxjYWlyby5oPgo+ICsjaW5jbHVk ZSA8ZXJybm8uaD4KPiArI2luY2x1ZGUgPHN0ZGludC5oPgo+ICsjaW5jbHVkZSA8dW5pc3RkLmg+ Cj4gKyNpbmNsdWRlIDxzeXMvdGltZS5oPgo+ICsKPiArdHlwZWRlZiBzdHJ1Y3Qgewo+ICsJaWd0 X2Rpc3BsYXlfdCBkaXNwbGF5Owo+ICsKPiArCWlndF9waXBlX2NyY190ICpwaXBlX2NyYzsKPiAr CXN0cnVjdCBpZ3RfZmIgZmJbNl07Cj4gK30gZGF0YV90Owo+ICsKPiArc3RhdGljIGJvb2wgcGxh bmVfc3VwcG9ydHNfZm9ybWF0KGlndF9wbGFuZV90ICpwbGFuZSwgdWludDMyX3QgZm9ybWF0KQo+ ICt7Cj4gKwlpbnQgaTsKPiArCj4gKwlpZiAoIWlndF9mYl9zdXBwb3J0ZWRfZm9ybWF0KGZvcm1h dCkpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBwbGFuZS0+ZHJt X3BsYW5lLT5jb3VudF9mb3JtYXRzOyBpKyspCj4gKwkJaWYgKHBsYW5lLT5kcm1fcGxhbmUtPmZv cm1hdHNbaV0gPT0gZm9ybWF0KQo+ICsJCQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwlyZXR1cm4gZmFs c2U7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIHBpcGVfc3VwcG9ydHNfZm9ybWF0KGlndF9kaXNw bGF5X3QgKmRpc3BsYXksIGVudW0gcGlwZSBwaXBlLCB1aW50MzJfdCBmb3JtYXQpCj4gK3sKPiAr CWlndF9wbGFuZV90ICpwbGFuZTsKPiArCj4gKwlmb3JfZWFjaF9wbGFuZV9vbl9waXBlKGRpc3Bs YXksIHBpcGUsIHBsYW5lKQo+ICsJCWlmIChwbGFuZV9zdXBwb3J0c19mb3JtYXQocGxhbmUsIGZv cm1hdCkpCj4gKwkJCXJldHVybiB0cnVlOwo+ICsKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgcmVtb3ZlX2ZicyhkYXRhX3QgKmRhdGEpCj4gK3sKPiArCWludCBpOwo+ ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEtPmZiKTsgaSsrKQo+ICsJCWln dF9yZW1vdmVfZmIoZGF0YS0+ZGlzcGxheS5kcm1fZmQsICZkYXRhLT5mYltpXSk7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIHByZXBhcmVfY3J0YyhkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBl LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCkKPiArewo+ICsJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9 ICZkYXRhLT5kaXNwbGF5Owo+ICsKPiArCXJlbW92ZV9mYnMoZGF0YSk7Cj4gKwlpZ3RfZGlzcGxh eV9yZXNldChkaXNwbGF5KTsKPiArCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlKTsK PiArCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7Cj4gKwo+ICsJ aWd0X3BpcGVfY3JjX2ZyZWUoZGF0YS0+cGlwZV9jcmMpOwo+ICsJZGF0YS0+cGlwZV9jcmMgPSBp Z3RfcGlwZV9jcmNfbmV3KGRpc3BsYXktPmRybV9mZCwgcGlwZSwgSU5URUxfUElQRV9DUkNfU09V UkNFX0FVVE8pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzZXRfZmIoaWd0X3BsYW5lX3QgKnBs YW5lLCBzdHJ1Y3QgaWd0X2ZiICpmYiwgYm9vbCBzY2FsZWQpCj4gK3sKPiArCWlndF9wbGFuZV9z ZXRfZmIocGxhbmUsIGZiKTsKPiArCj4gKwlpZiAoc2NhbGVkICYmIGZiKQo+ICsJCWlndF9mYl9z ZXRfc2l6ZShmYiwgcGxhbmUsIGZiLT53aWR0aCwgMTYpOwo+ICsKPiArCWlmIChmYiAmJiBmYi0+ dGlsaW5nID09IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJTEVEKSB7Cj4gKwkJaWd0X3BsYW5l X3NldF9yb3RhdGlvbihwbGFuZSwgSUdUX1JPVEFUSU9OXzkwKTsKPiArCQlpZ3RfcGxhbmVfc2V0 X3NpemUocGxhbmUsIGZiLT5oZWlnaHQsIGZiLT53aWR0aCk7Cj4gKwl9IGVsc2UKPiArCQlpZ3Rf cGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCBJR1RfUk9UQVRJT05fMCk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHl1dl9yZ2Jfc3dpdGNoKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsIGln dF9vdXRwdXRfdCAqb3V0cHV0LCBib29sIHNjYWxlZCwgdW5zaWduZWQgZm9ybWF0KQo+ICt7Cj4g Kwlkcm1Nb2RlTW9kZUluZm8gKm1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCk7Cj4g KwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7Cj4gKwlpZ3RfcGxhbmVf dCAqcGxhbmU7Cj4gKwlpbnQgaTsKPiArCWlndF9jcmNfdCByZWZfY3JjWzRdLCBjcmM7Cj4gKwo+ ICsJcHJlcGFyZV9jcnRjKGRhdGEsIHBpcGUsIG91dHB1dCk7Cj4gKwo+ICsJaWd0X2NyZWF0ZV9w YXR0ZXJuX2ZiKGRpc3BsYXktPmRybV9mZCwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5 LAo+ICsJCQkgICAgICBmb3JtYXQsIExPQ0FMX0k5MTVfRk9STUFUX01PRF9YX1RJTEVELAo+ICsJ CQkgICAgICAmZGF0YS0+ZmJbMF0pOwo+ICsKPiArCWlndF9jcmVhdGVfcGF0dGVybl9mYihkaXNw bGF5LT5kcm1fZmQsIG1vZGUtPnZkaXNwbGF5LCBtb2RlLT5oZGlzcGxheSwKPiArCQkJICAgICAg Zm9ybWF0LCBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwKPiArCQkJICAgICAgJmRhdGEt PmZiWzFdKTsKPiArCj4gKwlpZ3RfY3JlYXRlX3BhdHRlcm5fZmIoZGlzcGxheS0+ZHJtX2ZkLCBt b2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4gKwkJCSAgICAgIERSTV9GT1JNQVRfWFJH Qjg4ODgsIExPQ0FMX0k5MTVfRk9STUFUX01PRF9YX1RJTEVELAo+ICsJCQkgICAgICAmZGF0YS0+ ZmJbMl0pOwo+ICsKPiArCWlndF9jcmVhdGVfcGF0dGVybl9mYihkaXNwbGF5LT5kcm1fZmQsIG1v ZGUtPnZkaXNwbGF5LCBtb2RlLT5oZGlzcGxheSwKPiArCQkJICAgICAgRFJNX0ZPUk1BVF9YUkdC ODg4OCwgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQsCj4gKwkJCSAgICAgICZkYXRhLT5m YlszXSk7Cj4gKwo+ICsJZm9yX2VhY2hfcGxhbmVfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBwbGFu ZSkgewo+ICsJCWlmICghcGxhbmVfc3VwcG9ydHNfZm9ybWF0KHBsYW5lLCBEUk1fRk9STUFUX1hS R0I4ODg4KSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCS8qIFdlIG9ubHkgaGF2ZSBmZXcgc2Nh bGVycywgZG9uJ3QgdXNlIDEgZm9yIHVudXNlZCBwbGFuZXMgKi8KPiArCQlpZiAocGxhbmUtPnR5 cGUgIT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SICYmICFzY2FsZWQpCj4gKwkJCXNldF9mYihwbGFu ZSwgJmRhdGEtPmZiWzNdLCBmYWxzZSk7Cj4gKwl9Cj4gKwo+ICsJZm9yX2VhY2hfcGxhbmVfb25f cGlwZShkaXNwbGF5LCBwaXBlLCBwbGFuZSkgewo+ICsJCWNvbnN0IGludCBzZXFbXSA9IHsKPiAr CQkJMiwgMCwgMiwgMSwgMywgMSwgMwo+ICsJCX07Cj4gKwo+ICsJCWlmICghcGxhbmVfc3VwcG9y dHNfZm9ybWF0KHBsYW5lLCBmb3JtYXQpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJLyogQ29s bGVjdCByZWZlcmVuY2UgY3JjIHdpdGggdG9nZ2xlIGluIGJldHdlZW4uICovCj4gKwkJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUocmVmX2NyYyk7IGkrKykgewo+ICsJCQlzZXRfZmIocGxhbmUs ICZkYXRhLT5mYltpXSwgc2NhbGVkKTsKPiArCQkJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5 LCBDT01NSVRfQVRPTUlDKTsKPiArCj4gKwkJCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRh LT5waXBlX2NyYywgJnJlZl9jcmNbaV0pOwo+ICsKPiArCQkJc2V0X2ZiKHBsYW5lLCBOVUxMLCBz Y2FsZWQpOwo+ICsJCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMp Owo+ICsJCX0KPiArCj4gKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2VxKTsgaSsrKSB7 Cj4gKwkJCWludCBqID0gc2VxW2ldOwo+ICsKPiArCQkJc2V0X2ZiKHBsYW5lLCAmZGF0YS0+ZmJb al0sIHNjYWxlZCk7Cj4gKwkJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FU T01JQyk7Cj4gKwo+ICsJCQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMs ICZjcmMpOwo+ICsJCQlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmcmVmX2NyY1tqXSwgJmNyYyk7Cj4g KwkJfQo+ICsKPiArCQkvKiBXZSBvbmx5IGhhdmUgZmV3IHNjYWxlcnMsIGRvbid0IHVzZSAxIGZv ciB1bnVzZWQgcGxhbmVzICovCj4gKwkJaWYgKHNjYWxlZCkKPiArCQkJaWd0X3BsYW5lX3NldF9m YihwbGFuZSwgTlVMTCk7Cj4gKwl9Cj4gK30KPiArCj4gKyNkZWZpbmUgYXNzZXJ0X2NvbGxlY3Rl ZF9jcmNfZXF1YWwocGlwZV9jcmMsIGNyYywgcmVmX2NyYykgXAo+ICsJZG8geyBcCj4gKwkJaWd0 X3BpcGVfY3JjX2dldF9jdXJyZW50KGRpc3BsYXktPmRybV9mZCwgcGlwZV9jcmMsIGNyYyk7CVwK PiArCQlpZ3RfYXNzZXJ0X2NyY19lcXVhbChyZWZfY3JjLCBjcmMpOwlcCj4gKwl9IHdoaWxlICgw KQo+ICsKPiArc3RhdGljIHZvaWQgc2V0X3NyY19jb29yZHMoaWd0X3BsYW5lX3QgKnBsYW5lLCBz dHJ1Y3QgaWd0X2ZiICpmYiwKPiArCQkJICAgaWd0X3JvdGF0aW9uX3Qgcm90LCBpbnQgdmlzLCBp bnQgaGlkZGVuKQpTaG91bGQgb25lIHNwYWNlIGNvbWUgYmVmb3JlIGlndF9yb3RhdGlvbl90IHRv IG1ha2UgaXQgYWxpZ24gdG8gaWd0X3BsYW5lX3Q/Cj4gK3sKPiArCXN3aXRjaCAocm90KSB7Cj4g KwljYXNlIElHVF9ST1RBVElPTl8wOgo+ICsJCWlndF9mYl9zZXRfcG9zaXRpb24oZmIsIHBsYW5l LCBmYi0+d2lkdGggLyAyIC0gdmlzLCBmYi0+aGVpZ2h0IC8gMiAtIHZpcyk7Cj4gKwkJYnJlYWs7 Cj4gKwljYXNlIElHVF9ST1RBVElPTl85MDoKPiArCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBw bGFuZSwgZmItPndpZHRoIC8gMiAtIGhpZGRlbiwgZmItPmhlaWdodCAvIDIgLSB2aXMpOwo+ICsJ CWJyZWFrOwo+ICsJY2FzZSBJR1RfUk9UQVRJT05fMTgwOgo+ICsJCWlndF9mYl9zZXRfcG9zaXRp b24oZmIsIHBsYW5lLCBmYi0+d2lkdGggLyAyIC0gaGlkZGVuLCBmYi0+aGVpZ2h0IC8gMiAtIGhp ZGRlbik7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElHVF9ST1RBVElPTl8yNzA6Cj4gKwkJaWd0X2Zi X3NldF9wb3NpdGlvbihmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDIgLSB2aXMsIGZiLT5oZWlnaHQg LyAyIC0gaGlkZGVuKTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6IGlndF9hc3NlcnQoMCk7Cj4g Kwl9Cj4gKwlpZ3RfZmJfc2V0X3NpemUoZmIsIHBsYW5lLCB2aXMgKyBoaWRkZW4sIHZpcyArIGhp ZGRlbik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHl1dl92YWxpZF93aWR0aF9wbGFuZShkYXRh X3QgKmRhdGEsIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKPiArCQkJCSAgIGlndF9wbGFuZV90ICpw bGFuZSwgc3RydWN0IGlndF9mYiAqZmIsCj4gKwkJCQkgICBpZ3Rfcm90YXRpb25fdCByb3QsIGln dF9jcmNfdCAqcmVmX2NyYykKPiArewo+ICsJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRh LT5kaXNwbGF5Owo+ICsJaWd0X2NyY190IGNyYzsKPiArCXN0cnVjdCBpZ3RfZmIgKmNsaXBfZmIg PSAmZGF0YS0+ZmJbMl07Cj4gKwlpbnQgaSwgcmV0Owo+ICsKPiArCWlndF9wbGFuZV9zZXRfZmIo cGxhbmUsIGZiKTsKPiArCWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIHJvdCk7Cj4gKwlp ZiAocm90ICYgKElHVF9ST1RBVElPTl85MCB8IElHVF9ST1RBVElPTl8yNzApKQo+ICsJCWlndF9w bGFuZV9zZXRfc2l6ZShwbGFuZSwgZmItPmhlaWdodCwgZmItPndpZHRoKTsKPiArCWlndF9kaXNw bGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7Cj4gKwo+ICsJLyogSnVzdCBjbGlw cGluZy4uICovCj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBjbGlwX2ZiKTsKPiArCWlmIChy b3QgJiAoSUdUX1JPVEFUSU9OXzkwIHwgSUdUX1JPVEFUSU9OXzI3MCkpCj4gKwkJaWd0X3BsYW5l X3NldF9zaXplKHBsYW5lLCBjbGlwX2ZiLT5oZWlnaHQsIGNsaXBfZmItPndpZHRoKTsKPiArCWln dF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIG1vZGUtPmhkaXNwbGF5IC0gY2xpcF9mYi0+d2lk dGggLyAyLCBtb2RlLT52ZGlzcGxheSAtIGNsaXBfZmItPmhlaWdodCAvIDIpOwo+ICsJaWd0X2Rp c3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKPiArCWFzc2VydF9jb2xsZWN0 ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKPiArCj4gKwkvKiBD bGlwcGluZyBhbmQgc2NhbGluZy4gKi8KPiArCWlndF9mYl9zZXRfcG9zaXRpb24oY2xpcF9mYiwg cGxhbmUsIGNsaXBfZmItPndpZHRoIC8gMiAtIDE2LCBjbGlwX2ZiLT5oZWlnaHQgLyAyIC0gMTYp Owo+ICsJaWd0X2ZiX3NldF9zaXplKGNsaXBfZmIsIHBsYW5lLCAzMiwgMzIpOwo+ICsJaWd0X2Rp c3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKPiArCWFzc2VydF9jb2xsZWN0 ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKPiArCj4gKwkvKiBU cnkgbnZhbGlkIDwgOCBzcmMgdmlzaWJsZS4gKi8KPiArCXNldF9zcmNfY29vcmRzKHBsYW5lLCBj bGlwX2ZiLCByb3QsIDQsIDQpOwo+ICsJaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoZGlzcGxheSwg Q09NTUlUX0FUT01JQyk7Cj4gKwo+ICsJLyogVHJ5IGRpZmZlcmVudCBhbGlnbm1lbnRzIGZvciB4 L3kgdG8gc2VlIGlmIGFueSBoaXQgdW5kZXJydW5zICovCj4gKwlmb3IgKGkgPSAxOyBpIDwgNDsg aSsrKSB7Cj4gKwkJc2V0X3NyY19jb29yZHMocGxhbmUsIGNsaXBfZmIsIHJvdCwgMTYgKyAyICog aSwgMTYgLSAyICogaSk7Cj4gKwkJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRf QVRPTUlDKTsKPiArCQlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywg JmNyYywgcmVmX2NyYyk7Cj4gKwo+ICsJCS8qIEFuZCBhbHNvIHNob3cgbW9yZSBvZiB0aGUgc2Ny ZWVuICovCj4gKwkJc2V0X3NyY19jb29yZHMocGxhbmUsIGNsaXBfZmIsIHJvdCwgMTYgKyBpLCAx NiArIGkpOwo+ICsJCXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21taXQyKGRpc3BsYXksIENPTU1J VF9BVE9NSUMpOwo+ICsKPiArCQlpZiAocmV0ID09IC1FSU5WQUwpIHsKPiArCQkJaWd0X2Fzc2Vy dChpICUgMiB8fCByb3QgPT0gSUdUX1JPVEFUSU9OXzI3MCB8fCByb3QgPT0gKElHVF9ST1RBVElP Tl85MCB8IElHVF9SRUZMRUNUX1gpKTsKPiArCQkJY29udGludWU7Cj4gKwkJfSBlbHNlCj4gKwkJ CWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCQlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChk YXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIEFz IGEgZmluYWwgdGVzdCwgdHJ5IHdpdGggMTYgc3JjIHZpc2libGUsIGFuZCB2YXJpb3VzIGludmlz aWJsZQo+ICsJICogY29tcG9uZW50cyB0byBjaGVjayBjbGlwcGluZyBkb2Vzbid0IGRyb3AgdGhl IHZpc2libGUgc3JjIGJlbG93IDE2Lgo+ICsJICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkg Kz0gNCkgewo+ICsJCXNldF9zcmNfY29vcmRzKHBsYW5lLCBjbGlwX2ZiLCByb3QsIDE2LCBpKTsK PiArCQlpZiAocm90ICYgKElHVF9ST1RBVElPTl85MCB8IElHVF9ST1RBVElPTl8yNzApKQo+ICsJ CQlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIChjbGlwX2ZiLT5oZWlnaHQgLyAzMikgKiAoMTYg KyBpKSwKPiArCQkJCQkgICAoY2xpcF9mYi0+d2lkdGggLyAzMikgKiAoMTYgKyBpKSk7Cj4gKwkJ ZWxzZQo+ICsJCQlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIChjbGlwX2ZiLT53aWR0aCAvIDMy KSAqICgxNiArIGkpLAo+ICsJCQkJCSAgIChjbGlwX2ZiLT5oZWlnaHQgLyAzMikgKiAoMTYgKyBp KSk7Cj4gKwkJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKPiAr CQlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2Ny Yyk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHl1dl92YWxpZF93aWR0aChkYXRhX3Qg KmRhdGEsIGVudW0gcGlwZSBwaXBlLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgdW5zaWduZWQgZm9y bWF0KQo+ICt7Cj4gKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2Rl KG91dHB1dCk7Cj4gKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7Cj4g KwlpZ3RfcGxhbmVfdCAqcGxhbmU7Cj4gKwlzdHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiID0gJmRhdGEt PmZiWzJdOwo+ICsJc3RydWN0IGlndF9mYiAqcmVmX2ZiID0gJmRhdGEtPmZiWzNdOwo+ICsKPiAr CXByZXBhcmVfY3J0YyhkYXRhLCBwaXBlLCBvdXRwdXQpOwo+ICsKPiArCWlndF9jcmVhdGVfcGF0 dGVybl9mYihkaXNwbGF5LT5kcm1fZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwK PiArCQkJICAgICAgZm9ybWF0LCBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKPiArCQkJ ICAgICAgJmRhdGEtPmZiWzBdKTsKPiArCj4gKwlpZ3RfY3JlYXRlX3BhdHRlcm5fZmIoZGlzcGxh eS0+ZHJtX2ZkLCBtb2RlLT52ZGlzcGxheSwgbW9kZS0+aGRpc3BsYXksCj4gKwkJCSAgICAgIGZv cm1hdCwgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQsCj4gKwkJCSAgICAgICZkYXRhLT5m YlsxXSk7Cj4gKwo+ICsJaWd0X2NyZWF0ZV9mYihkaXNwbGF5LT5kcm1fZmQsIDY0LCA2NCwgZm9y bWF0LAo+ICsJCSAgICAgIExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJTEVELCByZWZfZmIpOwo+ ICsKPiArCWlndF9jcmVhdGVfZmIoZGlzcGxheS0+ZHJtX2ZkLCAyICogcmVmX2ZiLT53aWR0aCwK PiArCQkgICAgICAyICogcmVmX2ZiLT5oZWlnaHQsIGZvcm1hdCwKPiArCQkgICAgICBMT0NBTF9J OTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwgY2xpcF9mYik7Cj4gKwo+ICsJaWd0X3BpcGVfY3JjX3N0 YXJ0KGRhdGEtPnBpcGVfY3JjKTsKPiArCj4gKwlmb3JfZWFjaF9wbGFuZV9vbl9waXBlKGRpc3Bs YXksIHBpcGUsIHBsYW5lKSB7Cj4gKwkJaWd0X2NyY190IHJlZl9jcmNbNF07Cj4gKwkJY2Fpcm9f dCAqY3I7Cj4gKwkJc3RhdGljIGNvbnN0IGRvdWJsZSBjb2xvcnNbNF1bM10gPSB7Cj4gKwkJCXsg MS4sIDAuLCAwLiB9LAo+ICsJCQl7IDAuLCAxLiwgMC4gfSwKPiArCQkJeyAwLiwgMC4sIDEuIH0s Cj4gKwkJCXsgMS4sIDEuLCAxLiB9Cj4gKwkJfTsKPiArCQlpbnQgaTsKPiArCj4gKwkJaWYgKCFw bGFuZV9zdXBwb3J0c19mb3JtYXQocGxhbmUsIGZvcm1hdCkpCj4gKwkJCWNvbnRpbnVlOwo+ICsK PiArCQkvKiBEcmF3IHRoZSBGQiB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgY2xpcHBpbmcgdGVzdHMu ICovCj4gKwkJY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkaXNwbGF5LT5kcm1fZmQsIGNsaXBfZmIp Owo+ICsJCWlndF9wYWludF9jb2xvcihjciwgMCwgMCwgY2xpcF9mYi0+d2lkdGggLyAyLCBjbGlw X2ZiLT5oZWlnaHQgLyAyLAo+ICsJCQkJY29sb3JzWzBdWzBdLCBjb2xvcnNbMF1bMV0sIGNvbG9y c1swXVsyXSk7Cj4gKwo+ICsJCWlndF9wYWludF9jb2xvcihjciwgY2xpcF9mYi0+d2lkdGggLyAy LCAwLAo+ICsJCQkJY2xpcF9mYi0+d2lkdGggLyAyLCBjbGlwX2ZiLT5oZWlnaHQgLyAyLAo+ICsJ CQkJY29sb3JzWzFdWzBdLCBjb2xvcnNbMV1bMV0sIGNvbG9yc1sxXVsyXSk7Cj4gKwo+ICsJCWln dF9wYWludF9jb2xvcihjciwgY2xpcF9mYi0+d2lkdGggLyAyLCBjbGlwX2ZiLT5oZWlnaHQgLyAy LAo+ICsJCQkJY2xpcF9mYi0+d2lkdGggLyAyLCBjbGlwX2ZiLT5oZWlnaHQgLyAyLAo+ICsJCQkJ Y29sb3JzWzJdWzBdLCBjb2xvcnNbMl1bMV0sIGNvbG9yc1syXVsyXSk7Cj4gKwo+ICsJCWlndF9w YWludF9jb2xvcihjciwgMCwgY2xpcF9mYi0+aGVpZ2h0IC8gMiwKPiArCQkJCWNsaXBfZmItPndp ZHRoIC8gMiwgY2xpcF9mYi0+aGVpZ2h0IC8gMiwKPiArCQkJCWNvbG9yc1szXVswXSwgY29sb3Jz WzNdWzFdLCBjb2xvcnNbM11bMl0pOwo+ICsKPiArCQlpZ3RfcHV0X2NhaXJvX2N0eChkaXNwbGF5 LT5kcm1fZmQsIGNsaXBfZmIsIGNyKTsKPiArCj4gKwkJLyogRHJhdyBhbGwgcmVmZXJlbmNlIEZC J3MgdG8gY29sbGVjdCB0aGUgQ1JDLiAqLwo+ICsJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsK PiArCQkJY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkaXNwbGF5LT5kcm1fZmQsIHJlZl9mYik7Cj4g KwkJCWlndF9wYWludF9jb2xvcihjciwgMCwgMCwgcmVmX2ZiLT53aWR0aCwgcmVmX2ZiLT5oZWln aHQsCj4gKwkJCQkJY29sb3JzW2ldWzBdLCBjb2xvcnNbaV1bMV0sIGNvbG9yc1tpXVsyXSk7Cj4g KwkJCWlndF9wdXRfY2Fpcm9fY3R4KGRpc3BsYXktPmRybV9mZCwgJmRhdGEtPmZiWzNdLCBjcik7 Cj4gKwo+ICsJCQlpZiAoIWkpIHsKPiArCQkJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIHJlZl9m Yik7Cj4gKwkJCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCBtb2RlLT5oZGlzcGxheSAt IHJlZl9mYi0+d2lkdGgsIG1vZGUtPnZkaXNwbGF5IC0gcmVmX2ZiLT5oZWlnaHQpOwo+ICsJCQkJ aWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKPiArCQkJfSBlbHNl IHsKPiArCQkJCWlndF9kaXJ0eV9mYihkaXNwbGF5LT5kcm1fZmQsIHJlZl9mYik7Cj4gKwkJCQlp Z3Rfd2FpdF9mb3JfdmJsYW5rKGRpc3BsYXktPmRybV9mZCwgcGlwZSk7Cj4gKwkJCX0KPiArCj4g KwkJCWlndF9waXBlX2NyY19kcmFpbihkYXRhLT5waXBlX2NyYyk7Cj4gKwkJCWlndF9waXBlX2Ny Y19nZXRfc2luZ2xlKGRhdGEtPnBpcGVfY3JjLCAmcmVmX2NyY1tpXSk7Cj4gKwkJfQo+ICsKPiAr CQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKPiArCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0 aW9uKHBsYW5lLCAwLCAwKTsKPiArCj4gKwkJeXV2X3ZhbGlkX3dpZHRoX3BsYW5lKGRhdGEsIG1v ZGUsIHBsYW5lLCAmZGF0YS0+ZmJbMF0sIElHVF9ST1RBVElPTl8wLCAmcmVmX2NyY1swXSk7Cj4g KwkJeXV2X3ZhbGlkX3dpZHRoX3BsYW5lKGRhdGEsIG1vZGUsIHBsYW5lLCAmZGF0YS0+ZmJbMV0s IElHVF9ST1RBVElPTl85MCwgJnJlZl9jcmNbMV0pOwo+ICsJCXl1dl92YWxpZF93aWR0aF9wbGFu ZShkYXRhLCBtb2RlLCBwbGFuZSwgJmRhdGEtPmZiWzBdLCBJR1RfUk9UQVRJT05fMTgwLCAmcmVm X2NyY1syXSk7Cj4gKwkJeXV2X3ZhbGlkX3dpZHRoX3BsYW5lKGRhdGEsIG1vZGUsIHBsYW5lLCAm ZGF0YS0+ZmJbMV0sIElHVF9ST1RBVElPTl8yNzAsICZyZWZfY3JjWzNdKTsKPiArCj4gKwkJaWd0 X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBib29s IHl1dl9jb21taXRfcm90YXRlZChpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpZ3Rfcm90YXRpb25f dCByb3QpCj4gK3sKPiArCWlmIChpZ3RfZGlzcGxheV90cnlfY29tbWl0MihkaXNwbGF5LCBDT01N SVRfQVRPTUlDKSA8IDApIHsKPiArCQlpZ3RfZGVidWcoIlNraXBwaW5nIHJvdGF0ZWQgdGVzdCwg YWxpZ25tZW50IGlzIHdyb25nLlxuIik7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiAr CXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB5dXZfY3JvcF9zY2FsZV9idWdf cGxhbmUoZGF0YV90ICpkYXRhLCBkcm1Nb2RlTW9kZUluZm8gKm1vZGUsCj4gKwkJCQkgICAgICBp Z3RfcGxhbmVfdCAqcGxhbmUsIHN0cnVjdCBpZ3RfZmIgKmZiLAo+ICsJCQkJICAgICAgaWd0X3Jv dGF0aW9uX3Qgcm90LCBpZ3RfY3JjX3QgKnJlZl9jcmMpCj4gK3sKPiArCWlndF9kaXNwbGF5X3Qg KmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPiArCWlndF9jcmNfdCBjcmM7Cj4gKwlpbnQgb2Zz W10gPSB7IDAsIDEsIC0xLCAyLCAtMiB9Owo+ICsJaW50IGksIGo7Cj4gKwo+ICsJaWd0X3BsYW5l X3NldF9mYihwbGFuZSwgZmIpOwo+ICsJaWd0X3BsYW5lX3NldF9yb3RhdGlvbihwbGFuZSwgcm90 KTsKPiArCj4gKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCA2NCwgNjQpOwo+ICsJaWd0 X3BsYW5lX3NldF9zaXplKHBsYW5lLCAyNTYsIDI1Nik7Cj4gKwo+ICsJaWd0X2ZiX3NldF9wb3Np dGlvbihmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDQsIGZiLT5oZWlnaHQgLyA0KTsKPiArCWlndF9m Yl9zZXRfc2l6ZShmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDIsIGZiLT5oZWlnaHQgLyAyKTsKPiAr CWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7Cj4gKwlhc3NlcnRf Y29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7Cj4gKwo+ ICsJLyogTWFrZSBzdXJlIGJvdW5kYXJpZXMgbWF0Y2ggKi8KPiArCWlndF9mYl9zZXRfcG9zaXRp b24oZmIsIHBsYW5lLCBmYi0+d2lkdGggLyA0IC0gMiwgZmItPmhlaWdodCAvIDQgLSAyKTsKPiAr CWlndF9mYl9zZXRfc2l6ZShmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDIgKyA0LCBmYi0+aGVpZ2h0 IC8gMiArIDQpOwo+ICsJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlD KTsKPiArCWFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCBy ZWZfY3JjKTsKPiArCj4gKwlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRShvZnMpOyBpKyspIHsK PiArCQlpZ3RfZGVidWcoIlRlc3Rpbmcgd2l0aCByb3QgJXggYW5kIGV4dHJhICVpIG9uIHRoZSBs ZWZ0IHNpZGVcbiIsIHJvdCwgb2ZzW2ldKTsKPiArCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBw bGFuZSwgZmItPndpZHRoIC8gNCArIG9mc1tpXSwgZmItPmhlaWdodCAvIDQgLSAyKTsKPiArCQlp Z3RfZmJfc2V0X3NpemUoZmIsIHBsYW5lLCBmYi0+d2lkdGggLyAyICsgMiAtIG9mc1tpXSwgZmIt PmhlaWdodCAvIDIgKyA0KTsKPiArCQlpZiAoeXV2X2NvbW1pdF9yb3RhdGVkKGRpc3BsYXksIHJv dCkpCj4gKwkJCWFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3Jj LCByZWZfY3JjKTsKPiArCj4gKwkJaWd0X2RlYnVnKCJUZXN0aW5nIHdpdGggcm90ICV4IGFuZCBl eHRyYSAlaSBvbiB0aGUgdG9wIHNpZGVcbiIsIHJvdCwgb2ZzW2ldKTsKPiArCQlpZ3RfZmJfc2V0 X3Bvc2l0aW9uKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gNCAtIDIsIGZiLT5oZWlnaHQgLyA0ICsg b2ZzW2ldKTsKPiArCQlpZ3RfZmJfc2V0X3NpemUoZmIsIHBsYW5lLCBmYi0+d2lkdGggLyAyICsg NCwgZmItPmhlaWdodCAvIDIgKyAyIC0gb2ZzW2ldKTsKPiArCQlpZiAoeXV2X2NvbW1pdF9yb3Rh dGVkKGRpc3BsYXksIHJvdCkpCj4gKwkJCWFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEt PnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKPiArCj4gKwkJaWd0X2RlYnVnKCJUZXN0aW5nIHdp dGggcm90ICV4IGFuZCBleHRyYSAlaSBvbiB0aGUgcmlnaHQgc2lkZVxuIiwgcm90LCBvZnNbaV0p Owo+ICsJCWlndF9mYl9zZXRfcG9zaXRpb24oZmIsIHBsYW5lLCBmYi0+d2lkdGggLyA0IC0gMiwg ZmItPmhlaWdodCAvIDQpOwo+ICsJCWlndF9mYl9zZXRfc2l6ZShmYiwgcGxhbmUsIGZiLT53aWR0 aCAvIDIgKyAyICsgb2ZzW2ldLCBmYi0+aGVpZ2h0IC8gMik7Cj4gKwkJaWYgKHl1dl9jb21taXRf cm90YXRlZChkaXNwbGF5LCByb3QpKQo+ICsJCQlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChk YXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7Cj4gKwo+ICsJCWlndF9kZWJ1ZygiVGVzdGlu ZyB3aXRoIHJvdCAleCBhbmQgZXh0cmEgJWkgb24gdGhlIGJvdHRvbSBzaWRlXG4iLCByb3QsIG9m c1tpXSk7Cj4gKwkJaWd0X2ZiX3NldF9wb3NpdGlvbihmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDQg LSAyLCBmYi0+aGVpZ2h0IC8gNCAtIDIpOwo+ICsJCWlndF9mYl9zZXRfc2l6ZShmYiwgcGxhbmUs IGZiLT53aWR0aCAvIDIgKyA0LCBmYi0+aGVpZ2h0IC8gMiArIDIgKyBvZnNbaV0pOwo+ICsJCWlm ICh5dXZfY29tbWl0X3JvdGF0ZWQoZGlzcGxheSwgcm90KSkKPiArCQkJYXNzZXJ0X2NvbGxlY3Rl ZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOwo+ICsKRXh0cmEgXG4/ Cj4gKwl9Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob2ZzKTsgaSsrKQo+ICsJ CWZvciAoaiA9ICFpOyBqIDwgQVJSQVlfU0laRShvZnMpOyBqKyspIHsKPiArCQkJaWd0X2RlYnVn KCJUZXN0aW5nIHdpdGggcm90ICV4IGFuZCBleHRyYSAoJWksICVpKSBhdCB0aGUgZWRnZXNcbiIs IHJvdCwgb2ZzW2ldLCBvZnNbal0pOwo+ICsKPiArCQkJaWd0X2ZiX3NldF9wb3NpdGlvbihmYiwg cGxhbmUsIGZiLT53aWR0aCAvIDQgKyBvZnNbaV0sIGZiLT5oZWlnaHQgLyA0ICsgb2ZzW2pdKTsK PiArCQkJaWd0X2ZiX3NldF9zaXplKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gMiAtIDIgKiBvZnNb aV0sIGZiLT5oZWlnaHQgLyAyIC0gMiAqIG9mc1tqXSk7Cj4gKwo+ICsJCQlpZiAoeXV2X2NvbW1p dF9yb3RhdGVkKGRpc3BsYXksIHJvdCkpCj4gKwkJCQlhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVh bChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7Cj4gKwkJfQo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBkcmF3X2NsaXBfZmIoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgc3RydWN0IGlndF9m YiAqY2xpcF9mYikKPiArewo+ICsJY2Fpcm9fdCAqY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkaXNw bGF5LT5kcm1fZmQsIGNsaXBfZmIpOwo+ICsKPiArCWlndF9wYWludF9jb2xvcihjciwgMCwgMCwg Y2xpcF9mYi0+d2lkdGgsIGNsaXBfZmItPmhlaWdodCwgLjAsIC4wLCAuNSk7Cj4gKwlpZ3RfcGFp bnRfY29sb3IoY3IsIGNsaXBfZmItPndpZHRoIC8gNCAtIDIsIGNsaXBfZmItPmhlaWdodCAvIDQg LSAyLAo+ICsJCQljbGlwX2ZiLT53aWR0aCAvIDIgKyA0LCBjbGlwX2ZiLT5oZWlnaHQgLyAyICsg NCwgMS4sIDEuLCAxLik7Cj4gKwo+ICsJaWd0X3B1dF9jYWlyb19jdHgoZGlzcGxheS0+ZHJtX2Zk LCBjbGlwX2ZiLCBjcik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHl1dl9jcm9wX3NjYWxlX2J1 ZyhkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgdW5z aWduZWQgZm9ybWF0KQo+ICt7Cj4gKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGUgPSBpZ3Rfb3V0cHV0 X2dldF9tb2RlKG91dHB1dCk7Cj4gKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRp c3BsYXk7Cj4gKwlpZ3RfcGxhbmVfdCAqcGxhbmUsICpwcmltYXJ5ID0gaWd0X3BpcGVfZ2V0X3Bs YW5lX3R5cGUoJmRpc3BsYXktPnBpcGVzW3BpcGVdLCBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsK PiArCXN0cnVjdCBpZ3RfZmIgKnJlZl9mYiA9ICZkYXRhLT5mYlsyXTsKPiArCXN0cnVjdCBpZ3Rf ZmIgKmNsaXBfZmIgPSAmZGF0YS0+ZmJbM107Cj4gKwlzdHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiX3h0 aWxlZCA9ICZkYXRhLT5mYls0XTsKPiArCXN0cnVjdCBpZ3RfZmIgKmNsaXBfZmJfeXRpbGVkID0g JmRhdGEtPmZiWzVdOwo+ICsKPiArCXByZXBhcmVfY3J0YyhkYXRhLCBwaXBlLCBvdXRwdXQpOwo+ ICsKPiArCWlndF9jcmVhdGVfY29sb3JfZmIoZGlzcGxheS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxh eSwgbW9kZS0+dmRpc3BsYXksCj4gKwkJCSAgICBmb3JtYXQsIExPQ0FMX0k5MTVfRk9STUFUX01P RF9YX1RJTEVELCAuNSwgLjUsIC41LCAmZGF0YS0+ZmJbMF0pOwo+ICsKPiArCWlndF9jcmVhdGVf Y29sb3JfZmIoZGlzcGxheS0+ZHJtX2ZkLCAyNTYsIDI1NiwgZm9ybWF0LAo+ICsJCQkgICAgTE9D QUxfSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsIDEuLCAxLiwgMS4sIHJlZl9mYik7Cj4gKwo+ICsJ aWd0X2NyZWF0ZV9mYihkaXNwbGF5LT5kcm1fZmQsIDgwLCAxMjgsIGZvcm1hdCwKPiArCQkgICAg ICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLCBjbGlwX2ZiKTsKPiArCj4gKwlpZ3RfY3JlYXRl X2ZiKGRpc3BsYXktPmRybV9mZCwgODAsIDEyOCwgZm9ybWF0LAo+ICsJCSAgICAgIExPQ0FMX0k5 MTVfRk9STUFUX01PRF9YX1RJTEVELCBjbGlwX2ZiX3h0aWxlZCk7ClNob3VsZCBcbiBjb21lIGFm dGVyIHRoaXM/Cj4gKwlpZ3RfY3JlYXRlX2ZiKGRpc3BsYXktPmRybV9mZCwgODAsIDEyOCwgZm9y bWF0LAo+ICsJCSAgICAgIExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJTEVELCBjbGlwX2ZiX3l0 aWxlZCk7Cj4gKwo+ICsJZHJhd19jbGlwX2ZiKGRpc3BsYXksIGNsaXBfZmIpOwo+ICsJZHJhd19j bGlwX2ZiKGRpc3BsYXksIGNsaXBfZmJfeHRpbGVkKTsKPiArCWRyYXdfY2xpcF9mYihkaXNwbGF5 LCBjbGlwX2ZiX3l0aWxlZCk7Cj4gKwo+ICsJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmZGF0 YS0+ZmJbMF0pOwo+ICsKPiArCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoZGlzcGxheSwgcGlwZSwg cGxhbmUpIHsKPiArCQlpZ3RfY3JjX3QgcmVmX2NyYzsKPiArCj4gKwkJaWYgKCFwbGFuZV9zdXBw b3J0c19mb3JtYXQocGxhbmUsIGZvcm1hdCkpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlpZ3Rf cGxhbmVfc2V0X2ZiKHBsYW5lLCByZWZfZmIpOwo+ICsJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24o cGxhbmUsIDY0LCA2NCk7Cj4gKwkJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRf QVRPTUlDKTsKPiArCj4gKwkJaWd0X3BpcGVfY3JjX3N0YXJ0KGRhdGEtPnBpcGVfY3JjKTsKPiAr CQlpZ3RfcGlwZV9jcmNfZ2V0X3NpbmdsZShkYXRhLT5waXBlX2NyYywgJnJlZl9jcmMpOwo+ICsK PiArCQl5dXZfY3JvcF9zY2FsZV9idWdfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsIGNsaXBfZmIs IElHVF9ST1RBVElPTl8wLCAmcmVmX2NyYyk7Cj4gKwkJeXV2X2Nyb3Bfc2NhbGVfYnVnX3BsYW5l KGRhdGEsIG1vZGUsIHBsYW5lLCBjbGlwX2ZiX3h0aWxlZCwgSUdUX1JPVEFUSU9OXzAsICZyZWZf Y3JjKTsKPiArCQl5dXZfY3JvcF9zY2FsZV9idWdfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsIGNs aXBfZmJfeXRpbGVkLCBJR1RfUk9UQVRJT05fMCwgJnJlZl9jcmMpOwo+ICsJCXl1dl9jcm9wX3Nj YWxlX2J1Z19wbGFuZShkYXRhLCBtb2RlLCBwbGFuZSwgY2xpcF9mYl95dGlsZWQsIElHVF9ST1RB VElPTl85MCwgJnJlZl9jcmMpOwo+ICsJCXl1dl9jcm9wX3NjYWxlX2J1Z19wbGFuZShkYXRhLCBt b2RlLCBwbGFuZSwgY2xpcF9mYiwgSUdUX1JPVEFUSU9OXzE4MCwgJnJlZl9jcmMpOwo+ICsJCXl1 dl9jcm9wX3NjYWxlX2J1Z19wbGFuZShkYXRhLCBtb2RlLCBwbGFuZSwgY2xpcF9mYl94dGlsZWQs IElHVF9ST1RBVElPTl8xODAsICZyZWZfY3JjKTsKPiArCQl5dXZfY3JvcF9zY2FsZV9idWdfcGxh bmUoZGF0YSwgbW9kZSwgcGxhbmUsIGNsaXBfZmJfeXRpbGVkLCBJR1RfUk9UQVRJT05fMTgwLCAm cmVmX2NyYyk7Cj4gKwkJeXV2X2Nyb3Bfc2NhbGVfYnVnX3BsYW5lKGRhdGEsIG1vZGUsIHBsYW5l LCBjbGlwX2ZiX3l0aWxlZCwgSUdUX1JPVEFUSU9OXzI3MCwgJnJlZl9jcmMpOwo+ICsKPiArCQlp Z3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBwbGFuZSAhPSBwcmltYXJ5ID8gTlVMTCA6ICZkYXRhLT5m YlswXSk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHl1dl9jaHJv bWFfc3VicGl4ZWxfY2xpcF9wbGFuZV93aXRoX2N1cnNvcihkYXRhX3QgKmRhdGEsCj4gKwkJCQkJ CQlpZ3RfcGxhbmVfdCAqcGxhbmUsCj4gKwkJCQkJCQlzdHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiLAo+ ICsJCQkJCQkJaWd0X3BsYW5lX3QgKmN1cnNvciwKPiArCQkJCQkJCXN0cnVjdCBpZ3RfZmIgKmN1 cnNvcl9mYiwKPiArCQkJCQkJCWlndF9jcmNfdCAqcmVmX2NyYywKPiArCQkJCQkJCWludCBjdXJz b3JfeCwgaW50IGN1cnNvcl95KQo+ICt7Cj4gKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRh dGEtPmRpc3BsYXk7Cj4gKwo+ICsJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgY2xpcF9mYik7Cj4g KwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCA2NCwgNjQpOwo+ICsJaWd0X3BsYW5lX3Nl dF9yb3RhdGlvbihwbGFuZSwgSUdUX1JPVEFUSU9OXzApOwo+ICsKPiArCWlndF9wbGFuZV9zZXRf ZmIoY3Vyc29yLCBjdXJzb3JfZmIpOwo+ICsJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihjdXJzb3Is IGN1cnNvcl94LCBjdXJzb3JfeSk7Cj4gKwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENP TU1JVF9BVE9NSUMpOwo+ICsKPiArCWlndF9waXBlX2NyY19kcmFpbihkYXRhLT5waXBlX2NyYyk7 Cj4gKwlpZ3RfcGlwZV9jcmNfZ2V0X3NpbmdsZShkYXRhLT5waXBlX2NyYywgcmVmX2NyYyk7Cj4g Kwo+ICsJaWd0X3BsYW5lX3NldF9mYihjdXJzb3IsIE5VTEwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg Ym9vbCB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfcmlnaHQoZGF0YV90ICpkYXRhLAo+ ICsJCQkJCQkgaWd0X3JvdGF0aW9uX3Qgcm90YXRpb24sCj4gKwkJCQkJCSBpZ3RfcGxhbmVfdCAq cGxhbmUsCj4gKwkJCQkJCSBzdHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiLAo+ICsJCQkJCQkgaWd0X2Ny Y190ICpyZWZfY3JjKQpTaG91bGQgbWFrZSBhcmd1bWVudHMgYWxpZ25lZD8KPiArewo+ICsJaWd0 X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Owo+ICsJaWd0X2NyY190IGNyYyA9 IHt9Owo+ICsKPiArCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIGNsaXBfZmIpOwo+ICsJaWd0X3Bs YW5lX3NldF9wb3NpdGlvbihwbGFuZSwgNjQsIDY0KTsKPiArCWlndF9wbGFuZV9zZXRfcm90YXRp b24ocGxhbmUsIHJvdGF0aW9uKTsKPiArCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgY2xpcF9m Yi0+d2lkdGggLSAxLCBjbGlwX2ZiLT5oZWlnaHQpOwo+ICsKPiArCXN3aXRjaCAocm90YXRpb24p IHsKPiArCWNhc2UgSUdUX1JPVEFUSU9OXzE4MDoKPiArCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGNs aXBfZmIsIHBsYW5lLCAxLCAwKTsKPiArCWNhc2UgSUdUX1JPVEFUSU9OXzA6Cj4gKwkJaWd0X2Zi X3NldF9zaXplKGNsaXBfZmIsIHBsYW5lLCBjbGlwX2ZiLT53aWR0aCAtIDEsIGNsaXBfZmItPmhl aWdodCk7Cj4gKwkJYnJlYWs7Cj4gKwpFeHRyYSBcbj8KPiArCWNhc2UgSUdUX1JPVEFUSU9OXzI3 MDoKPiArCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGNsaXBfZmIsIHBsYW5lLCAwLCAxKTsKPiArCWNh c2UgSUdUX1JPVEFUSU9OXzkwOgo+ICsJCWlndF9mYl9zZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwg Y2xpcF9mYi0+d2lkdGgsIGNsaXBfZmItPmhlaWdodCAtIDEpOwo+ICsJCWJyZWFrOwo+ICsJZGVm YXVsdDoKPiArCQlpZ3RfYXNzZXJ0X2YoMCwgIlVuaGFuZGxlZCByb3RhdGlvbiAleFxuIiwgcm90 YXRpb24pOwo+ICsJfQo+ICsKPiArCWlmIChpZ3RfZGlzcGxheV90cnlfY29tbWl0MihkaXNwbGF5 LCBDT01NSVRfQVRPTUlDKSA8IDApCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWFzc2VydF9j b2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKPiArCXJl dHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCB5dXZfY2hyb21hX3N1YnBpeGVsX2Ns aXBfcGxhbmVfYm90dG9tKGRhdGFfdCAqZGF0YSwKPiArCQkJCQkJICBpZ3Rfcm90YXRpb25fdCBy b3RhdGlvbiwKPiArCQkJCQkJICBpZ3RfcGxhbmVfdCAqcGxhbmUsCj4gKwkJCQkJCSAgc3RydWN0 IGlndF9mYiAqY2xpcF9mYiwKPiArCQkJCQkJICBpZ3RfY3JjX3QgKnJlZl9jcmMpCj4gK3sKPiAr CWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPiArCWlndF9jcmNfdCBj cmMgPSB7fTsKPiArCj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBjbGlwX2ZiKTsKPiArCWln dF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDY0LCA2NCk7Cj4gKwlpZ3RfcGxhbmVfc2V0X3Jv dGF0aW9uKHBsYW5lLCByb3RhdGlvbik7Cj4gKwlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIGNs aXBfZmItPndpZHRoLCBjbGlwX2ZiLT5oZWlnaHQgLSAxKTsKPiArCj4gKwlzd2l0Y2ggKHJvdGF0 aW9uKSB7Cj4gKwljYXNlIElHVF9ST1RBVElPTl8xODA6Cj4gKwkJaWd0X2ZiX3NldF9wb3NpdGlv bihjbGlwX2ZiLCBwbGFuZSwgMCwgMSk7Cj4gKwljYXNlIElHVF9ST1RBVElPTl8wOgo+ICsJCWln dF9mYl9zZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwgY2xpcF9mYi0+d2lkdGgsIGNsaXBfZmItPmhl aWdodCAtIDEpOwo+ICsJCWJyZWFrOwo+ICsKRXh0cmEgXG4/Cj4gKwljYXNlIElHVF9ST1RBVElP Tl85MDoKPiArCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGNsaXBfZmIsIHBsYW5lLCAxLCAwKTsKPiAr CWNhc2UgSUdUX1JPVEFUSU9OXzI3MDoKPiArCQlpZ3RfZmJfc2V0X3NpemUoY2xpcF9mYiwgcGxh bmUsIGNsaXBfZmItPndpZHRoIC0gMSwgY2xpcF9mYi0+aGVpZ2h0KTsKPiArCQlicmVhazsKPiAr CWRlZmF1bHQ6Cj4gKwkJaWd0X2Fzc2VydF9mKDAsICJVbmhhbmRsZWQgcm90YXRpb24gJXhcbiIs IHJvdGF0aW9uKTsKPiArCX0KPiArCj4gKwlpZiAoaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoZGlz cGxheSwgQ09NTUlUX0FUT01JQykgPCAwKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlhc3Nl cnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7Cj4g KwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgeXV2X2Nocm9tYV9zdWJwaXhl bF9jbGlwX3BsYW5lX2xlZnQoZGF0YV90ICpkYXRhLAo+ICsJCQkJCQlpZ3Rfcm90YXRpb25fdCBy b3RhdGlvbiwKPiArCQkJCQkJaWd0X3BsYW5lX3QgKnBsYW5lLAo+ICsJCQkJCQlzdHJ1Y3QgaWd0 X2ZiICpjbGlwX2ZiLAo+ICsJCQkJCQlpZ3RfY3JjX3QgKnJlZl9jcmMpCj4gK3sKPiArCWlndF9k aXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPiArCWlndF9jcmNfdCBjcmMgPSB7 fTsKPiArCj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBjbGlwX2ZiKTsKPiArCWlndF9wbGFu ZV9zZXRfcG9zaXRpb24ocGxhbmUsIDY1LCA2NCk7Cj4gKwlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9u KHBsYW5lLCByb3RhdGlvbik7Cj4gKwlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIGNsaXBfZmIt PndpZHRoIC0gMSwgY2xpcF9mYi0+aGVpZ2h0KTsKPiArCj4gKwlzd2l0Y2ggKHJvdGF0aW9uKSB7 Cj4gKwljYXNlIElHVF9ST1RBVElPTl8wOgo+ICsJCWlndF9mYl9zZXRfcG9zaXRpb24oY2xpcF9m YiwgcGxhbmUsIDEsIDApOwo+ICsJY2FzZSBJR1RfUk9UQVRJT05fMTgwOgo+ICsJCWlndF9mYl9z ZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwgY2xpcF9mYi0+d2lkdGggLSAxLCBjbGlwX2ZiLT5oZWln aHQpOwo+ICsJCWJyZWFrOwo+ICsKU2FtZSBoZXJlIGFuZCBiZWxvdyBjbGlwX3BsYW5lIGZ1bmN0 aW9uczovIFNvcnJ5Lgo+ICsJY2FzZSBJR1RfUk9UQVRJT05fOTA6Cj4gKwkJaWd0X2ZiX3NldF9w b3NpdGlvbihjbGlwX2ZiLCBwbGFuZSwgMCwgMSk7Cj4gKwljYXNlIElHVF9ST1RBVElPTl8yNzA6 Cj4gKwkJaWd0X2ZiX3NldF9zaXplKGNsaXBfZmIsIHBsYW5lLCBjbGlwX2ZiLT53aWR0aCwgY2xp cF9mYi0+aGVpZ2h0IC0gMSk7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCWlndF9hc3Nl cnRfZigwLCAiVW5oYW5kbGVkIHJvdGF0aW9uICV4XG4iLCByb3RhdGlvbik7Cj4gKwl9Cj4gKwo+ ICsJaWYgKGlndF9kaXNwbGF5X3RyeV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpIDwg MCkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwo ZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiAr Cj4gKwo+ICtzdGF0aWMgYm9vbCB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfdG9wKGRh dGFfdCAqZGF0YSwKPiArCQkJCQkgICAgICBpZ3Rfcm90YXRpb25fdCByb3RhdGlvbiwKPiArCQkJ CQkgICAgICBpZ3RfcGxhbmVfdCAqcGxhbmUsCj4gKwkJCQkJICAgICAgc3RydWN0IGlndF9mYiAq Y2xpcF9mYiwKPiArCQkJCQkgICAgICBpZ3RfY3JjX3QgKnJlZl9jcmMpCj4gK3sKPiArCWlndF9k aXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPiArCWlndF9jcmNfdCBjcmMgPSB7 fTsKPiArCj4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBjbGlwX2ZiKTsKPiArCWlndF9wbGFu ZV9zZXRfcG9zaXRpb24ocGxhbmUsIDY0LCA2NSk7Cj4gKwlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9u KHBsYW5lLCByb3RhdGlvbik7Cj4gKwlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIGNsaXBfZmIt PndpZHRoLCBjbGlwX2ZiLT5oZWlnaHQgLSAxKTsKPiArCj4gKwlzd2l0Y2ggKHJvdGF0aW9uKSB7 Cj4gKwljYXNlIElHVF9ST1RBVElPTl8wOgo+ICsJCWlndF9mYl9zZXRfcG9zaXRpb24oY2xpcF9m YiwgcGxhbmUsIDAsIDEpOwo+ICsJY2FzZSBJR1RfUk9UQVRJT05fMTgwOgo+ICsJCWlndF9mYl9z ZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwgY2xpcF9mYi0+d2lkdGgsIGNsaXBfZmItPmhlaWdodCAt IDEpOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgSUdUX1JPVEFUSU9OXzI3MDoKPiArCQlpZ3Rf ZmJfc2V0X3Bvc2l0aW9uKGNsaXBfZmIsIHBsYW5lLCAxLCAwKTsKPiArCWNhc2UgSUdUX1JPVEFU SU9OXzkwOgo+ICsJCWlndF9mYl9zZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwgY2xpcF9mYi0+d2lk dGggLSAxLCBjbGlwX2ZiLT5oZWlnaHQpOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlp Z3RfYXNzZXJ0X2YoMCwgIlVuaGFuZGxlZCByb3RhdGlvbiAleFxuIiwgcm90YXRpb24pOwo+ICsJ fQo+ICsKPiArCWlmIChpZ3RfZGlzcGxheV90cnlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRP TUlDKSA8IDApCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWFzc2VydF9jb2xsZWN0ZWRfY3Jj X2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKPiArCXJldHVybiB0cnVlOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXAoZGF0YV90ICpk YXRhLCBlbnVtIHBpcGUgcGlwZSwgaWd0X291dHB1dF90ICpvdXRwdXQsIHVuc2lnbmVkIGZvcm1h dCkKPiArewo+ICsJZHJtTW9kZU1vZGVJbmZvICptb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShv dXRwdXQpOwo+ICsJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Owo+ICsJ aWd0X3BpcGVfdCAqcGlwZV9vYmogPSAmZGlzcGxheS0+cGlwZXNbcGlwZV07Cj4gKwlzdHJ1Y3Qg aWd0X2ZiICpiZ19mYiA9ICZkYXRhLT5mYlswXTsKPiArCXN0cnVjdCBpZ3RfZmIgKmJnX2N1cnNv cl9mYiA9ICZkYXRhLT5mYlsxXTsKPiArCXN0cnVjdCBpZ3RfZmIgKmJsYWNrX2N1cnNvcl9mYiA9 ICZkYXRhLT5mYlsyXTsKPiArCXN0cnVjdCBpZ3RfZmIgKmNsaXBfZmIgPSAmZGF0YS0+ZmJbM107 Cj4gKwlpZ3RfcGxhbmVfdCAqcHJpbWFyeSA9IGlndF9waXBlX2dldF9wbGFuZV90eXBlKHBpcGVf b2JqLCBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKPiArCWlndF9wbGFuZV90ICpjdXJzb3IgPSBp Z3RfcGlwZV9nZXRfcGxhbmVfdHlwZShwaXBlX29iaiwgRFJNX1BMQU5FX1RZUEVfQ1VSU09SKTsK PiArCWlndF9wbGFuZV90ICpwbGFuZTsKPiArCWNhaXJvX3QgKmNyOwo+ICsJYm9vbCByZXQgPSBm YWxzZTsKPiArCj4gKwlwcmVwYXJlX2NydGMoZGF0YSwgcGlwZSwgb3V0cHV0KTsKPiArCj4gKwlp Z3RfY3JlYXRlX2NvbG9yX2ZiKGRpc3BsYXktPmRybV9mZCwgbW9kZS0+aGRpc3BsYXksIG1vZGUt PnZkaXNwbGF5LAo+ICsJCQkgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwgTE9DQUxfSTkxNV9GT1JN QVRfTU9EX1hfVElMRUQsCj4gKwkJCSAgICAuMCwgLjAsIDEuLCBiZ19mYik7Cj4gKwo+ICsJaWd0 X2NyZWF0ZV9jb2xvcl9mYihkaXNwbGF5LT5kcm1fZmQsIDI1NiwgMjU2LAo+ICsJCSAgICAgICAg ICAgIERSTV9GT1JNQVRfQVJHQjg4ODgsIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gKwkJ CSAgICAuMCwgLjAsIDEuLCBiZ19jdXJzb3JfZmIpOwo+ICsKPiArCWlndF9jcmVhdGVfY29sb3Jf ZmIoZGlzcGxheS0+ZHJtX2ZkLCAyNTYsIDI1NiwKPiArCQkgICAgICAgICAgICBEUk1fRk9STUFU X0FSR0I4ODg4LCBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAo+ICsJCQkgICAgLjAsIC4wLCAu MCwgYmxhY2tfY3Vyc29yX2ZiKTsKPiArCj4gKwlpZ3RfY3JlYXRlX2ZiKGRpc3BsYXktPmRybV9m ZCwgMjU2LCAyNTYsCj4gKwkJICAgICAgZm9ybWF0LCBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRCwgY2xpcF9mYik7Cj4gKwo+ICsJLyogRHJhdyB0aGUgRkIgdGhhdCB3aWxsIGJlIHVzZWQg Zm9yIGNsaXBwaW5nIHRoZSBjaHJvbWEgc3VicGl4ZWwgdGVzdC4gKi8KPiArCWNyID0gaWd0X2dl dF9jYWlyb19jdHgoZGlzcGxheS0+ZHJtX2ZkLCBjbGlwX2ZiKTsKPiArCj4gKwlpZ3RfcGFpbnRf Y29sb3IoY3IsIDAsIDAsIGNsaXBfZmItPndpZHRoLCBjbGlwX2ZiLT5oZWlnaHQsIDEuLCAwLiwg MC4pOwo+ICsJaWd0X3BhaW50X2NvbG9yKGNyLCAyLCAyLCBjbGlwX2ZiLT53aWR0aCAtIDQsIGNs aXBfZmItPmhlaWdodCAtIDQsIDAuLCAxLiwgMS4pOwo+ICsJaWd0X3BhaW50X2NvbG9yKGNyLCA0 LCA0LCBjbGlwX2ZiLT53aWR0aCAtIDgsIGNsaXBfZmItPmhlaWdodCAtIDgsIC43NSwgLjc1LCAx Lik7Cj4gKwo+ICsJLyogV2hpdGUgZG90cyBpbiB0aGUgY29ybmVycy4gKi8KPiArCWlndF9wYWlu dF9jb2xvcihjciwgMCwgMCwgNiwgNiwgMS4sIDEuLCAxLik7Cj4gKwlpZ3RfcGFpbnRfY29sb3Io Y3IsIGNsaXBfZmItPndpZHRoIC0gNiwgMCwgNiwgNiwgMS4sIDEuLCAxLik7Cj4gKwlpZ3RfcGFp bnRfY29sb3IoY3IsIDAsIGNsaXBfZmItPmhlaWdodCAtIDYsIDYsIDYsIDEuLCAxLiwgMS4pOwo+ ICsJaWd0X3BhaW50X2NvbG9yKGNyLCBjbGlwX2ZiLT53aWR0aCAtIDYsIGNsaXBfZmItPmhlaWdo dCAtIDYsIDYsIDYsIDEuLCAxLiwgMS4pOwo+ICsKPiArCWlndF9wdXRfY2Fpcm9fY3R4KGRpc3Bs YXktPmRybV9mZCwgY2xpcF9mYiwgY3IpOwo+ICsKPiArCWlndF9waXBlX2NyY19zdGFydChkYXRh LT5waXBlX2NyYyk7Cj4gKwo+ICsJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCBiZ19mYik7Cj4g Kwlmb3JfZWFjaF9wbGFuZV9vbl9waXBlKGRpc3BsYXksIHBpcGUsIHBsYW5lKSB7Cj4gKwkJc3Ry dWN0IGlndF9mYiAqY3Vyc29yX2ZiID0gcGxhbmUgPT0gcHJpbWFyeSA/IGJsYWNrX2N1cnNvcl9m YiA6IGJnX2N1cnNvcl9mYjsKPiArCQlpZ3RfY3JjX3QgcmVmX2NyYzsKPiArCj4gKwkJaWYgKCFw bGFuZV9zdXBwb3J0c19mb3JtYXQocGxhbmUsIGZvcm1hdCkgfHwgcGxhbmUgPT0gY3Vyc29yKQo+ ICsJCQljb250aW51ZTsKPiArCj4gKwkJeXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3dp dGhfY3Vyc29yKGRhdGEsIHBsYW5lLCBjbGlwX2ZiLCBjdXJzb3IsIGN1cnNvcl9mYiwgJnJlZl9j cmMsIDYzICsgY2xpcF9mYi0+d2lkdGgsIDY0KTsKPiArCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJw aXhlbF9jbGlwX3BsYW5lX3JpZ2h0KGRhdGEsIElHVF9ST1RBVElPTl8wLCBwbGFuZSwgY2xpcF9m YiwgJnJlZl9jcmMpOwo+ICsJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVf cmlnaHQoZGF0YSwgSUdUX1JPVEFUSU9OXzkwLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOwo+ ICsJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfcmlnaHQoZGF0YSwgSUdU X1JPVEFUSU9OXzE4MCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKPiArCQlyZXQgfD0geXV2 X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3JpZ2h0KGRhdGEsIElHVF9ST1RBVElPTl8yNzAs IHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7Cj4gKwo+ICsJCXl1dl9jaHJvbWFfc3VicGl4ZWxf Y2xpcF9wbGFuZV93aXRoX2N1cnNvcihkYXRhLCBwbGFuZSwgY2xpcF9mYiwgY3Vyc29yLCBjdXJz b3JfZmIsICZyZWZfY3JjLCA2NCwgNjMgKyBjbGlwX2ZiLT5oZWlnaHQpOwo+ICsJCXJldCB8PSB5 dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfYm90dG9tKGRhdGEsIElHVF9ST1RBVElPTl8w LCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOwo+ICsJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBp eGVsX2NsaXBfcGxhbmVfYm90dG9tKGRhdGEsIElHVF9ST1RBVElPTl85MCwgcGxhbmUsIGNsaXBf ZmIsICZyZWZfY3JjKTsKPiArCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5l X2JvdHRvbShkYXRhLCBJR1RfUk9UQVRJT05fMTgwLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMp Owo+ICsJCXJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfYm90dG9tKGRhdGEs IElHVF9ST1RBVElPTl8yNzAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7Cj4gKwo+ICsJCXl1 dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV93aXRoX2N1cnNvcihkYXRhLCBwbGFuZSwgY2xp cF9mYiwgY3Vyc29yLCBjdXJzb3JfZmIsICZyZWZfY3JjLCA2NSAtIGN1cnNvcl9mYi0+d2lkdGgs IDY0KTsKPiArCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX2xlZnQoZGF0 YSwgSUdUX1JPVEFUSU9OXzAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7Cj4gKwkJcmV0IHw9 IHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9sZWZ0KGRhdGEsIElHVF9ST1RBVElPTl85 MCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKPiArCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJw aXhlbF9jbGlwX3BsYW5lX2xlZnQoZGF0YSwgSUdUX1JPVEFUSU9OXzE4MCwgcGxhbmUsIGNsaXBf ZmIsICZyZWZfY3JjKTsKPiArCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5l X2xlZnQoZGF0YSwgSUdUX1JPVEFUSU9OXzI3MCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsK PiArCj4gKwkJeXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3dpdGhfY3Vyc29yKGRhdGEs IHBsYW5lLCBjbGlwX2ZiLCBjdXJzb3IsIGN1cnNvcl9mYiwgJnJlZl9jcmMsIDY0LCA2NSAtIGN1 cnNvcl9mYi0+aGVpZ2h0KTsKPiArCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3Bs YW5lX3RvcChkYXRhLCBJR1RfUk9UQVRJT05fMCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsK PiArCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3RvcChkYXRhLCBJR1Rf Uk9UQVRJT05fOTAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7Cj4gKwkJcmV0IHw9IHl1dl9j aHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV90b3AoZGF0YSwgSUdUX1JPVEFUSU9OXzE4MCwgcGxh bmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKPiArCQlyZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9j bGlwX3BsYW5lX3RvcChkYXRhLCBJR1RfUk9UQVRJT05fMjcwLCBwbGFuZSwgY2xpcF9mYiwgJnJl Zl9jcmMpOwo+ICsKPiArCQkvKiBSZXNldCB0byBkZWZhdWx0cyAqLwo+ICsJCWlndF9wbGFuZV9z ZXRfcG9zaXRpb24ocGxhbmUsIDAsIDApOwo+ICsJCWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxh bmUsIElHVF9ST1RBVElPTl8wKTsKPiArCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBwbGFuZSA9 PSBwcmltYXJ5ID8gYmdfZmIgOiBOVUxMKTsKPiArCX0KPiArCj4gKwlpZ3RfcmVxdWlyZV9mKHJl dCwgIkNvdWxkIG5vdCB0ZXN0IHN1YnBpeGVsIGNsaXBwaW5nIGluIGFueSBjb3JuZXJcbiIpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBydW5fdGVzdHNfZm9yX3BpcGUoZGF0YV90ICpkYXRhLCBl bnVtIHBpcGUgcGlwZSwKPiArCQkJY29uc3QgY2hhciAqZnN0ciwgdW5zaWduZWQgaW50IGZvcm1h dCkKQXJndW1lbnQgYWxpZ25tZW50Pwo+ICt7Cj4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKPiAr CWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPiArCj4gKwlpZ3Rfc3Vi dGVzdF9ncm91cCB7Cj4gKwkJaWd0X2ZpeHR1cmUgewo+ICsJCQlpZ3RfZGlzcGxheV9yZXF1aXJl X291dHB1dF9vbl9waXBlKGRpc3BsYXksIHBpcGUpOwo+ICsJCQlpZ3RfcmVxdWlyZShpZ3RfZmJf c3VwcG9ydGVkX2Zvcm1hdChmb3JtYXQpKTsKPiArCQkJaWd0X3JlcXVpcmUocGlwZV9zdXBwb3J0 c19mb3JtYXQoZGlzcGxheSwgcGlwZSwgZm9ybWF0KSk7Cj4gKwkJfQo+ICsKPiArCQlpZ3Rfc3Vi dGVzdF9mKCJwaXBlLSVzLSVzLXJnYi1zd2l0Y2giLAo+ICsJCQlrbXN0ZXN0X3BpcGVfbmFtZShw aXBlKSwgZnN0cikKPiArCQkJZm9yX2VhY2hfdmFsaWRfb3V0cHV0X29uX3BpcGUoZGlzcGxheSwg cGlwZSwgb3V0cHV0KQo+ICsJCQkJeXV2X3JnYl9zd2l0Y2goZGF0YSwgcGlwZSwgb3V0cHV0LCBm YWxzZSwgZm9ybWF0KTsKPiArCj4gKwkJaWd0X3N1YnRlc3RfZigicGlwZS0lcy0lcy1yZ2Itc2Nh bGVkLXN3aXRjaCIsCj4gKwkJCWttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpLCBmc3RyKQo+ICsJCQlm b3JfZWFjaF92YWxpZF9vdXRwdXRfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBvdXRwdXQpCj4gKwkJ CQl5dXZfcmdiX3N3aXRjaChkYXRhLCBwaXBlLCBvdXRwdXQsIHRydWUsIGZvcm1hdCk7Cj4gKwo+ ICsJCWlndF9zdWJ0ZXN0X2YoInBpcGUtJXMtJXMtdmFsaWQtd2lkdGgiLAo+ICsJCQlrbXN0ZXN0 X3BpcGVfbmFtZShwaXBlKSwgZnN0cikKPiArCQkJZm9yX2VhY2hfdmFsaWRfb3V0cHV0X29uX3Bp cGUoZGlzcGxheSwgcGlwZSwgb3V0cHV0KQo+ICsJCQkJeXV2X3ZhbGlkX3dpZHRoKGRhdGEsIHBp cGUsIG91dHB1dCwgZm9ybWF0KTsKPiArCj4gKwkJaWd0X3N1YnRlc3RfZigicGlwZS0lcy0lcy1j cm9wLXNjYWxlLWJ1ZyIsCj4gKwkJCWttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpLCBmc3RyKQo+ICsJ CQlmb3JfZWFjaF92YWxpZF9vdXRwdXRfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBvdXRwdXQpCj4g KwkJCQl5dXZfY3JvcF9zY2FsZV9idWcoZGF0YSwgcGlwZSwgb3V0cHV0LCBmb3JtYXQpOwo+ICsK PiArCQlpZ3Rfc3VidGVzdF9mKCJwaXBlLSVzLSVzLWNocm9tYS1zdWJwaXhlbC1jbGlwIiwKPiAr CQkJa21zdGVzdF9waXBlX25hbWUocGlwZSksIGZzdHIpCj4gKwkJCWZvcl9lYWNoX3ZhbGlkX291 dHB1dF9vbl9waXBlKGRpc3BsYXksIHBpcGUsIG91dHB1dCkKPiArCQkJCXl1dl9jaHJvbWFfc3Vi cGl4ZWxfY2xpcChkYXRhLCBwaXBlLCBvdXRwdXQsIGZvcm1hdCk7Cj4gKwl9Cj4gK30KPiArCj4g K2lndF9tYWluCj4gK3sKPiArCWRhdGFfdCBkYXRhID0ge307Cj4gKwllbnVtIHBpcGUgcGlwZTsK PiArCj4gKwlpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7Cj4gKwo+ICsJaWd0X2ZpeHR1cmUgewo+ ICsJCWRhdGEuZGlzcGxheS5kcm1fZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9B TlkpOwo+ICsKPiArCQlrbXN0ZXN0X3NldF92dF9ncmFwaGljc19tb2RlKCk7Cj4gKwkJaWd0X2Rp c3BsYXlfcmVxdWlyZSgmZGF0YS5kaXNwbGF5LCBkYXRhLmRpc3BsYXkuZHJtX2ZkKTsKPiArCQlp Z3RfcmVxdWlyZShkYXRhLmRpc3BsYXkuaXNfYXRvbWljKTsKPiArCQlpZ3RfcmVxdWlyZV9waXBl X2NyYyhkYXRhLmRpc3BsYXkuZHJtX2ZkKTsKPiArCX0KPiArCj4gKwlmb3JfZWFjaF9waXBlX3N0 YXRpYyhwaXBlKSB7Cj4gKwkJcnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRhLCBwaXBlLCAiTlYxMiIs IERSTV9GT1JNQVRfTlYxMik7Cj4gKwkJcnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRhLCBwaXBlLCAi TlYxNiIsIERSTV9GT1JNQVRfTlYxNik7Cj4gKwkJcnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRhLCBw aXBlLCAiTlYyMSIsIERSTV9GT1JNQVRfTlYyMSk7Cj4gKwkJcnVuX3Rlc3RzX2Zvcl9waXBlKCZk YXRhLCBwaXBlLCAiTlY2MSIsIERSTV9GT1JNQVRfTlY2MSk7Cj4gKwkJcnVuX3Rlc3RzX2Zvcl9w aXBlKCZkYXRhLCBwaXBlLCAiWVVWNDIwIiwgRFJNX0ZPUk1BVF9ZVVY0MjApOwo+ICsJCXJ1bl90 ZXN0c19mb3JfcGlwZSgmZGF0YSwgcGlwZSwgIllVVjQyMiIsIERSTV9GT1JNQVRfWVVWNDIyKTsK PiArCQlydW5fdGVzdHNfZm9yX3BpcGUoJmRhdGEsIHBpcGUsICJZVlU0MjAiLCBEUk1fRk9STUFU X1lWVTQyMCk7Cj4gKwkJcnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRhLCBwaXBlLCAiWVZVNDIyIiwg RFJNX0ZPUk1BVF9ZVlU0MjIpOwo+ICsJCXJ1bl90ZXN0c19mb3JfcGlwZSgmZGF0YSwgcGlwZSwg IlAwMTAiLCBEUk1fRk9STUFUX1AwMTApOwo+ICsJCXJ1bl90ZXN0c19mb3JfcGlwZSgmZGF0YSwg cGlwZSwgIlAwMTIiLCBEUk1fRk9STUFUX1AwMTIpOwo+ICsJCXJ1bl90ZXN0c19mb3JfcGlwZSgm ZGF0YSwgcGlwZSwgIlAwMTYiLCBEUk1fRk9STUFUX1AwMTYpOwo+ICsJCXJ1bl90ZXN0c19mb3Jf cGlwZSgmZGF0YSwgcGlwZSwgIllVWVYiLCBEUk1fRk9STUFUX1lVWVYpOwo+ICsJCXJ1bl90ZXN0 c19mb3JfcGlwZSgmZGF0YSwgcGlwZSwgIllWWVUiLCBEUk1fRk9STUFUX1lWWVUpOwo+ICsJCXJ1 bl90ZXN0c19mb3JfcGlwZSgmZGF0YSwgcGlwZSwgIlVZVlkiLCBEUk1fRk9STUFUX1VZVlkpOwo+ ICsJCXJ1bl90ZXN0c19mb3JfcGlwZSgmZGF0YSwgcGlwZSwgIlZZVVkiLCBEUk1fRk9STUFUX1ZZ VVkpOwo+ICsJCXJ1bl90ZXN0c19mb3JfcGlwZSgmZGF0YSwgcGlwZSwgIlhZVVY4ODg4IiwgRFJN X0ZPUk1BVF9YWVVWODg4OCk7Ck1hYXJ0ZW4sIEkgZG91YnQgaGVyZS4uc28gd2UgbmVlZCB0byBz aW1wbHkgYWRkIFlVViBmb3JtYXQgaGVyZSBhbmQgbm8gCm5lZWQgdG8gbWFrZSBhbnkgb3RoZXIg Y2hhbmdlIGluIGttc195dXYgaWd0Pwo+ICsJfQo+ICsKPiArCWlndF9maXh0dXJlIHsKPiArCQlp Z3RfZGlzcGxheV9maW5pKCZkYXRhLmRpc3BsYXkpOwo+ICsJCWNsb3NlKGRhdGEuZGlzcGxheS5k cm1fZmQpOwo+ICsJfQo+ICt9Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVz dHMvbWVzb24uYnVpbGQKPiBpbmRleCAwZjEyZGYyNmQ5ZmIuLmI0NGI1YTdjNGM0ZiAxMDA2NDQK PiAtLS0gYS90ZXN0cy9tZXNvbi5idWlsZAo+ICsrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCj4gQEAg LTYwLDYgKzYwLDcgQEAgdGVzdF9wcm9ncyA9IFsKPiAgIAkna21zX3VuaXZlcnNhbF9wbGFuZScs Cj4gICAJJ2ttc192YmxhbmsnLAo+ICAgCSdrbXNfdnJyJywKPiArCSdrbXNfeXV2JywKPiAgIAkn bWV0YV90ZXN0JywKPiAgIAkncGVyZicsCj4gICAJJ3BtX2JhY2tsaWdodCcsCgotLSAKflN3YXRp IFNoYXJtYQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpp Z3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=