From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id A766889EEB for ; Tue, 5 Mar 2019 11:55:05 +0000 (UTC) References: <20190214152908.32606-1-maarten.lankhorst@linux.intel.com> From: Maarten Lankhorst Message-ID: Date: Tue, 5 Mar 2019 12:55:02 +0100 MIME-Version: 1.0 In-Reply-To: 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: "Sharma, Swati2" , igt-dev@lists.freedesktop.org List-ID: T3AgMDEtMDMtMjAxOSBvbSAwNzoyMyBzY2hyZWVmIFNoYXJtYSwgU3dhdGkyOgo+IEdpdmVuIHJl dmlldyBjb21tZW50cyBqdXN0IGZvciBmZXcgY29zbWV0aWMgY2hhbmdlcy4KPgo+IE9uIDE0LUZl Yi0xOSA4OjU5IFBNLCBNYWFydGVuIExhbmtob3JzdCB2aWEgaWd0LWRldiB3cm90ZToKPj4gQWRk IHRlc3RzIGV4Y2VyY2lzaW5nIHN3aXRjaGluZyBiZXR3ZWVuIHZhcmlvdXMgc2NhbGVkL3Vuc2Nh bGVkCj4+IHRyYW5zaXRpb25zIHRvIGFuZCBmcm9tIHZhcmlvdXMgbnYxMiBmb3JtYXRzLCBzaW5j ZSBzb21lIG9mIHRoZQo+PiB3b3JrYXJvdW5kcyBtZW50aW9uIHRoaXMgbWF5IGZhaWwuCj4+Cj4+ IFdlIGFsc28gYWRkIE5WMTIgc3BlY2lmaWMgY2xpcHBpbmcvc2NhbGluZyB0ZXN0cywgdG8gbWFr ZSBzdXJlCj4+IHRoYXQgWVVWIHNyYyBjb29yZGluYXRlcyBhcmUgYWx3YXlzIHByb2dyYW1tZWQg YXMgYSBtdWx0aXBsZSBvZiAyCj4+IGNvcnJlY3RseSwgYW5kIHZlcmlmeSBzY2FsaW5nL2NsaXBw aW5nIHdvcmtzIHdpdGggQ1JDIHRlc3RzLgo+Pgo+PiBjcm9wLXNjYWxlLWJ1ZyBzaG93cyBhIGNv cnJ1cHRpb24gd2hlbiBzY2FsaW5nIGFuZCBjcm9wcGluZyBhdCB0aGUKPj4gc2FtZSB0aW1lLgo+ Pgo+PiBUaGUgc3VicGl4ZWwgY2xpcCB0ZXN0IHJvdGF0ZXMgYW5kIGNsaXBzIGEgcmVjdGFuZ2xl IG9uIGVhY2ggc2lkZSwKPj4gd2hpY2ggc2hvdWxkIHByb2R1Y2UgdGhlIHNhbWUgQ1JDIGFzIHdo ZW4gdGhhdCBwYXJ0IG9mIHRoZSByZWN0YW5nbGUKPj4gaXMgaGlkZGVuIGJ5IGEgY3Vyc29yIGFu ZCBhIHdob2xlIDJ4MiBwaXhlbCBpcyBoaWRkZW4uCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IE1hYXJ0 ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+Cj4+IC0tLQo+ PiDCoCB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIHzCoMKgIDEgKwo+PiDCoCB0ZXN0cy9rbXNfeXV2 LmPCoMKgwqDCoMKgwqDCoCB8IDg0NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+PiDCoCB0ZXN0cy9tZXNvbi5idWlsZMKgwqDCoMKgwqAgfMKgwqAgMSArCj4+IMKg IDMgZmlsZXMgY2hhbmdlZCwgODQ3IGluc2VydGlvbnMoKykKPj4gwqAgY3JlYXRlIG1vZGUgMTAw NjQ0IHRlc3RzL2ttc195dXYuYwo+Pgo+PiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291 cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPj4gaW5kZXggYTIzNGZhNWRkNTUzLi5kOGVi NThhODVlZDIgMTAwNjQ0Cj4+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPj4gKysrIGIv dGVzdHMvTWFrZWZpbGUuc291cmNlcwo+PiBAQCAtNzIsNiArNzIsNyBAQCBURVNUU19wcm9ncyA9 IFwKPj4gwqDCoMKgwqDCoCBrbXNfdW5pdmVyc2FsX3BsYW5lIFwKPj4gwqDCoMKgwqDCoCBrbXNf dmJsYW5rIFwKPj4gwqDCoMKgwqDCoCBrbXNfdnJyIFwKPj4gK8KgwqDCoCBrbXNfeXV2IFwKPj4g wqDCoMKgwqDCoCBrbXNfc2VxdWVuY2UgXAo+PiDCoMKgwqDCoMKgIG1ldGFfdGVzdCBcCj4+IMKg wqDCoMKgwqAgcGVyZiBcCj4+IGRpZmYgLS1naXQgYS90ZXN0cy9rbXNfeXV2LmMgYi90ZXN0cy9r bXNfeXV2LmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMDAwLi45 YTA0ODNmMTYzMWUKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi90ZXN0cy9rbXNfeXV2LmMKPj4g QEAgLTAsMCArMSw4NDUgQEAKPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBD b3Jwb3JhdGlvbgo+PiArICoKPj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4+ICsgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAo+PiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+PiArICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4+ ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUKPj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4+ICsgKgo+PiArICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUg aW5jbHVkZWQgaW4KPj4gKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlIFNvZnR3YXJlLgo+PiArICoKPj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4+ICsgKiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSwKPj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQo+PiArICogQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF Ugo+PiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPj4gKyAq IElOIFRIRSBTT0ZUV0FSRS4KPj4gKyAqCj4+ICsgKiBBdXRob3JzOgo+PiArICrCoMKgwqAgTWFh cnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4KPj4gKyAq Lwo+PiArI2luY2x1ZGUgImNvbmZpZy5oIgo+PiArCj4+ICsjaW5jbHVkZSAiaWd0LmgiCj4+ICsj aW5jbHVkZSA8Y2Fpcm8uaD4KPj4gKyNpbmNsdWRlIDxlcnJuby5oPgo+PiArI2luY2x1ZGUgPHN0 ZGludC5oPgo+PiArI2luY2x1ZGUgPHVuaXN0ZC5oPgo+PiArI2luY2x1ZGUgPHN5cy90aW1lLmg+ Cj4+ICsKPj4gK3R5cGVkZWYgc3RydWN0IHsKPj4gK8KgwqDCoCBpZ3RfZGlzcGxheV90IGRpc3Bs YXk7Cj4+ICsKPj4gK8KgwqDCoCBpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmM7Cj4+ICvCoMKgwqAg c3RydWN0IGlndF9mYiBmYls2XTsKPj4gK30gZGF0YV90Owo+PiArCj4+ICtzdGF0aWMgYm9vbCBw bGFuZV9zdXBwb3J0c19mb3JtYXQoaWd0X3BsYW5lX3QgKnBsYW5lLCB1aW50MzJfdCBmb3JtYXQp Cj4+ICt7Cj4+ICvCoMKgwqAgaW50IGk7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIWlndF9mYl9zdXBw b3J0ZWRfZm9ybWF0KGZvcm1hdCkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZmFsc2U7Cj4+ ICsKPj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgcGxhbmUtPmRybV9wbGFuZS0+Y291bnRfZm9y bWF0czsgaSsrKQo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHBsYW5lLT5kcm1fcGxhbmUtPmZvcm1h dHNbaV0gPT0gZm9ybWF0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gdHJ1ZTsK Pj4gKwo+PiArwqDCoMKgIHJldHVybiBmYWxzZTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGJvb2wg cGlwZV9zdXBwb3J0c19mb3JtYXQoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgZW51bSBwaXBlIHBp cGUsIHVpbnQzMl90IGZvcm1hdCkKPj4gK3sKPj4gK8KgwqDCoCBpZ3RfcGxhbmVfdCAqcGxhbmU7 Cj4+ICsKPj4gK8KgwqDCoCBmb3JfZWFjaF9wbGFuZV9vbl9waXBlKGRpc3BsYXksIHBpcGUsIHBs YW5lKQo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHBsYW5lX3N1cHBvcnRzX2Zvcm1hdChwbGFuZSwg Zm9ybWF0KSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHRydWU7Cj4+ICsKPj4g K8KgwqDCoCByZXR1cm4gZmFsc2U7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHJlbW92ZV9m YnMoZGF0YV90ICpkYXRhKQo+PiArewo+PiArwqDCoMKgIGludCBpOwo+PiArCj4+ICvCoMKgwqAg Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YS0+ZmIpOyBpKyspCj4+ICvCoMKgwqDCoMKg wqDCoCBpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCAmZGF0YS0+ZmJbaV0pOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBwcmVwYXJlX2NydGMoZGF0YV90ICpkYXRhLCBlbnVt IHBpcGUgcGlwZSwgaWd0X291dHB1dF90ICpvdXRwdXQpCj4+ICt7Cj4+ICvCoMKgwqAgaWd0X2Rp c3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Owo+PiArCj4+ICvCoMKgwqAgcmVtb3Zl X2ZicyhkYXRhKTsKPj4gK8KgwqDCoCBpZ3RfZGlzcGxheV9yZXNldChkaXNwbGF5KTsKPj4gK8Kg wqDCoCBpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZSk7Cj4+ICvCoMKgwqAgaWd0X2Rp c3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKPj4gKwo+PiArwqDCoMKgIGln dF9waXBlX2NyY19mcmVlKGRhdGEtPnBpcGVfY3JjKTsKPj4gK8KgwqDCoCBkYXRhLT5waXBlX2Ny YyA9IGlndF9waXBlX2NyY19uZXcoZGlzcGxheS0+ZHJtX2ZkLCBwaXBlLCBJTlRFTF9QSVBFX0NS Q19TT1VSQ0VfQVVUTyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHNldF9mYihpZ3RfcGxh bmVfdCAqcGxhbmUsIHN0cnVjdCBpZ3RfZmIgKmZiLCBib29sIHNjYWxlZCkKPj4gK3sKPj4gK8Kg wqDCoCBpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBmYik7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoc2Nh bGVkICYmIGZiKQo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X2ZiX3NldF9zaXplKGZiLCBwbGFuZSwg ZmItPndpZHRoLCAxNik7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoZmIgJiYgZmItPnRpbGluZyA9PSBM T0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCkgewo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X3Bs YW5lX3NldF9yb3RhdGlvbihwbGFuZSwgSUdUX1JPVEFUSU9OXzkwKTsKPj4gK8KgwqDCoMKgwqDC oMKgIGlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgZmItPmhlaWdodCwgZmItPndpZHRoKTsKPj4g K8KgwqDCoCB9IGVsc2UKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9wbGFuZV9zZXRfcm90YXRpb24o cGxhbmUsIElHVF9ST1RBVElPTl8wKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgeXV2X3Jn Yl9zd2l0Y2goZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgaWd0X291dHB1dF90ICpvdXRw dXQsIGJvb2wgc2NhbGVkLCB1bnNpZ25lZCBmb3JtYXQpCj4+ICt7Cj4+ICvCoMKgwqAgZHJtTW9k ZU1vZGVJbmZvICptb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOwo+PiArwqDCoMKg IGlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPj4gK8KgwqDCoCBpZ3Rf cGxhbmVfdCAqcGxhbmU7Cj4+ICvCoMKgwqAgaW50IGk7Cj4+ICvCoMKgwqAgaWd0X2NyY190IHJl Zl9jcmNbNF0sIGNyYzsKPj4gKwo+PiArwqDCoMKgIHByZXBhcmVfY3J0YyhkYXRhLCBwaXBlLCBv dXRwdXQpOwo+PiArCj4+ICvCoMKgwqAgaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKGRpc3BsYXktPmRy bV9mZCwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBmb3JtYXQsIExPQ0FMX0k5MTVfRk9STUFUX01PRF9YX1RJTEVE LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmZGF0YS0+ZmJbMF0pOwo+ PiArCj4+ICvCoMKgwqAgaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKGRpc3BsYXktPmRybV9mZCwgbW9k ZS0+dmRpc3BsYXksIG1vZGUtPmhkaXNwbGF5LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBmb3JtYXQsIExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJTEVELAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmZGF0YS0+ZmJbMV0pOwo+PiArCj4+ICvC oMKgwqAgaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKGRpc3BsYXktPmRybV9mZCwgbW9kZS0+aGRpc3Bs YXksIG1vZGUtPnZkaXNwbGF5LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBEUk1fRk9STUFUX1hSR0I4ODg4LCBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmRhdGEtPmZiWzJdKTsKPj4gKwo+ PiArwqDCoMKgIGlndF9jcmVhdGVfcGF0dGVybl9mYihkaXNwbGF5LT5kcm1fZmQsIG1vZGUtPnZk aXNwbGF5LCBtb2RlLT5oZGlzcGxheSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgRFJNX0ZPUk1BVF9YUkdCODg4OCwgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQs Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZkYXRhLT5mYlszXSk7Cj4+ ICsKPj4gK8KgwqDCoCBmb3JfZWFjaF9wbGFuZV9vbl9waXBlKGRpc3BsYXksIHBpcGUsIHBsYW5l KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIXBsYW5lX3N1cHBvcnRzX2Zvcm1hdChwbGFuZSwg RFJNX0ZPUk1BVF9YUkdCODg4OCkpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVl Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBXZSBvbmx5IGhhdmUgZmV3IHNjYWxlcnMsIGRv bid0IHVzZSAxIGZvciB1bnVzZWQgcGxhbmVzICovCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocGxh bmUtPnR5cGUgIT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SICYmICFzY2FsZWQpCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHNldF9mYihwbGFuZSwgJmRhdGEtPmZiWzNdLCBmYWxzZSk7Cj4+ICvC oMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgZm9yX2VhY2hfcGxhbmVfb25fcGlwZShkaXNwbGF5LCBw aXBlLCBwbGFuZSkgewo+PiArwqDCoMKgwqDCoMKgwqAgY29uc3QgaW50IHNlcVtdID0gewo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAyLCAwLCAyLCAxLCAzLCAxLCAzCj4+ICvCoMKgwqDCoMKg wqDCoCB9Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIXBsYW5lX3N1cHBvcnRzX2Zvcm1h dChwbGFuZSwgZm9ybWF0KSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+ ICsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qIENvbGxlY3QgcmVmZXJlbmNlIGNyYyB3aXRoIHRvZ2ds ZSBpbiBiZXR3ZWVuLiAqLwo+PiArwqDCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUocmVmX2NyYyk7IGkrKykgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZXRfZmIo cGxhbmUsICZkYXRhLT5mYltpXSwgc2NhbGVkKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKPj4gKwo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9j cmMsICZyZWZfY3JjW2ldKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZXRfZmIo cGxhbmUsIE5VTEwsIHNjYWxlZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9kaXNw bGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9 Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNlcSk7 IGkrKykgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgaiA9IHNlcVtpXTsKPj4gKwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZXRfZmIocGxhbmUsICZkYXRhLT5mYltqXSwgc2Nh bGVkKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNw bGF5LCBDT01NSVRfQVRPTUlDKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3Rf cGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZjcmMpOwo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmcmVmX2NyY1tqXSwgJmNyYyk7Cj4+ ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIC8qIFdlIG9ubHkgaGF2 ZSBmZXcgc2NhbGVycywgZG9uJ3QgdXNlIDEgZm9yIHVudXNlZCBwbGFuZXMgKi8KPj4gK8KgwqDC oMKgwqDCoMKgIGlmIChzY2FsZWQpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9wbGFu ZV9zZXRfZmIocGxhbmUsIE5VTEwpOwo+PiArwqDCoMKgIH0KPj4gK30KPj4gKwo+PiArI2RlZmlu ZSBhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChwaXBlX2NyYywgY3JjLCByZWZfY3JjKSBcCj4+ ICvCoMKgwqAgZG8geyBcCj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3RfcGlwZV9jcmNfZ2V0X2N1cnJl bnQoZGlzcGxheS0+ZHJtX2ZkLCBwaXBlX2NyYywgY3JjKTvCoMKgwqAgXAo+PiArwqDCoMKgwqDC oMKgwqAgaWd0X2Fzc2VydF9jcmNfZXF1YWwocmVmX2NyYywgY3JjKTvCoMKgwqAgXAo+PiArwqDC oMKgIH0gd2hpbGUgKDApCj4+ICsKPj4gK3N0YXRpYyB2b2lkIHNldF9zcmNfY29vcmRzKGlndF9w bGFuZV90ICpwbGFuZSwgc3RydWN0IGlndF9mYiAqZmIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGlndF9yb3RhdGlvbl90IHJvdCwgaW50IHZpcywgaW50IGhpZGRlbikKPiBTaG91 bGQgb25lIHNwYWNlIGNvbWUgYmVmb3JlIGlndF9yb3RhdGlvbl90IHRvIG1ha2UgaXQgYWxpZ24g dG8gaWd0X3BsYW5lX3Q/Cj4+ICt7Cj4+ICvCoMKgwqAgc3dpdGNoIChyb3QpIHsKPj4gK8KgwqDC oCBjYXNlIElHVF9ST1RBVElPTl8wOgo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X2ZiX3NldF9wb3Np dGlvbihmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDIgLSB2aXMsIGZiLT5oZWlnaHQgLyAyIC0gdmlz KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGNhc2UgSUdUX1JPVEFUSU9O XzkwOgo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X2ZiX3NldF9wb3NpdGlvbihmYiwgcGxhbmUsIGZi LT53aWR0aCAvIDIgLSBoaWRkZW4sIGZiLT5oZWlnaHQgLyAyIC0gdmlzKTsKPj4gK8KgwqDCoMKg wqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGNhc2UgSUdUX1JPVEFUSU9OXzE4MDoKPj4gK8KgwqDC oMKgwqDCoMKgIGlndF9mYl9zZXRfcG9zaXRpb24oZmIsIHBsYW5lLCBmYi0+d2lkdGggLyAyIC0g aGlkZGVuLCBmYi0+aGVpZ2h0IC8gMiAtIGhpZGRlbik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVh azsKPj4gK8KgwqDCoCBjYXNlIElHVF9ST1RBVElPTl8yNzA6Cj4+ICvCoMKgwqDCoMKgwqDCoCBp Z3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gMiAtIHZpcywgZmItPmhl aWdodCAvIDIgLSBoaWRkZW4pOwo+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqAg ZGVmYXVsdDogaWd0X2Fzc2VydCgwKTsKPj4gK8KgwqDCoCB9Cj4+ICvCoMKgwqAgaWd0X2ZiX3Nl dF9zaXplKGZiLCBwbGFuZSwgdmlzICsgaGlkZGVuLCB2aXMgKyBoaWRkZW4pOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgdm9pZCB5dXZfdmFsaWRfd2lkdGhfcGxhbmUoZGF0YV90ICpkYXRhLCBkcm1N b2RlTW9kZUluZm8gKm1vZGUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaWd0X3BsYW5lX3QgKnBsYW5lLCBzdHJ1Y3QgaWd0X2ZiICpmYiwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3Rfcm90YXRpb25fdCByb3QsIGlndF9jcmNfdCAq cmVmX2NyYykKPj4gK3sKPj4gK8KgwqDCoCBpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEt PmRpc3BsYXk7Cj4+ICvCoMKgwqAgaWd0X2NyY190IGNyYzsKPj4gK8KgwqDCoCBzdHJ1Y3QgaWd0 X2ZiICpjbGlwX2ZiID0gJmRhdGEtPmZiWzJdOwo+PiArwqDCoMKgIGludCBpLCByZXQ7Cj4+ICsK Pj4gK8KgwqDCoCBpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBmYik7Cj4+ICvCoMKgwqAgaWd0X3Bs YW5lX3NldF9yb3RhdGlvbihwbGFuZSwgcm90KTsKPj4gK8KgwqDCoCBpZiAocm90ICYgKElHVF9S T1RBVElPTl85MCB8IElHVF9ST1RBVElPTl8yNzApKQo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X3Bs YW5lX3NldF9zaXplKHBsYW5lLCBmYi0+aGVpZ2h0LCBmYi0+d2lkdGgpOwo+PiArwqDCoMKgIGln dF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7Cj4+ICsKPj4gK8KgwqDC oCAvKiBKdXN0IGNsaXBwaW5nLi4gKi8KPj4gK8KgwqDCoCBpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5l LCBjbGlwX2ZiKTsKPj4gK8KgwqDCoCBpZiAocm90ICYgKElHVF9ST1RBVElPTl85MCB8IElHVF9S T1RBVElPTl8yNzApKQo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X3BsYW5lX3NldF9zaXplKHBsYW5l LCBjbGlwX2ZiLT5oZWlnaHQsIGNsaXBfZmItPndpZHRoKTsKPj4gK8KgwqDCoCBpZ3RfcGxhbmVf c2V0X3Bvc2l0aW9uKHBsYW5lLCBtb2RlLT5oZGlzcGxheSAtIGNsaXBfZmItPndpZHRoIC8gMiwg bW9kZS0+dmRpc3BsYXkgLSBjbGlwX2ZiLT5oZWlnaHQgLyAyKTsKPj4gK8KgwqDCoCBpZ3RfZGlz cGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+PiArwqDCoMKgIGFzc2VydF9j b2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKPj4gKwo+ PiArwqDCoMKgIC8qIENsaXBwaW5nIGFuZCBzY2FsaW5nLiAqLwo+PiArwqDCoMKgIGlndF9mYl9z ZXRfcG9zaXRpb24oY2xpcF9mYiwgcGxhbmUsIGNsaXBfZmItPndpZHRoIC8gMiAtIDE2LCBjbGlw X2ZiLT5oZWlnaHQgLyAyIC0gMTYpOwo+PiArwqDCoMKgIGlndF9mYl9zZXRfc2l6ZShjbGlwX2Zi LCBwbGFuZSwgMzIsIDMyKTsKPj4gK8KgwqDCoCBpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXks IENPTU1JVF9BVE9NSUMpOwo+PiArwqDCoMKgIGFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRh dGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsKPj4gKwo+PiArwqDCoMKgIC8qIFRyeSBudmFs aWQgPCA4IHNyYyB2aXNpYmxlLiAqLwo+PiArwqDCoMKgIHNldF9zcmNfY29vcmRzKHBsYW5lLCBj bGlwX2ZiLCByb3QsIDQsIDQpOwo+PiArwqDCoMKgIGlndF9kaXNwbGF5X3RyeV9jb21taXQyKGRp c3BsYXksIENPTU1JVF9BVE9NSUMpOwo+PiArCj4+ICvCoMKgwqAgLyogVHJ5IGRpZmZlcmVudCBh bGlnbm1lbnRzIGZvciB4L3kgdG8gc2VlIGlmIGFueSBoaXQgdW5kZXJydW5zICovCj4+ICvCoMKg wqAgZm9yIChpID0gMTsgaSA8IDQ7IGkrKykgewo+PiArwqDCoMKgwqDCoMKgwqAgc2V0X3NyY19j b29yZHMocGxhbmUsIGNsaXBfZmIsIHJvdCwgMTYgKyAyICogaSwgMTYgLSAyICogaSk7Cj4+ICvC oMKgwqDCoMKgwqDCoCBpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMp Owo+PiArwqDCoMKgwqDCoMKgwqAgYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+cGlw ZV9jcmMsICZjcmMsIHJlZl9jcmMpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBBbmQgYWxz byBzaG93IG1vcmUgb2YgdGhlIHNjcmVlbiAqLwo+PiArwqDCoMKgwqDCoMKgwqAgc2V0X3NyY19j b29yZHMocGxhbmUsIGNsaXBfZmIsIHJvdCwgMTYgKyBpLCAxNiArIGkpOwo+PiArwqDCoMKgwqDC oMKgwqAgcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01J Qyk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQgPT0gLUVJTlZBTCkgewo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3RfYXNzZXJ0KGkgJSAyIHx8IHJvdCA9PSBJR1RfUk9UQVRJ T05fMjcwIHx8IHJvdCA9PSAoSUdUX1JPVEFUSU9OXzkwIHwgSUdUX1JFRkxFQ1RfWCkpOwo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gK8KgwqDCoMKgwqDCoMKgIH0gZWxz ZQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Cj4+ICvC oMKgwqDCoMKgwqDCoCBhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywg JmNyYywgcmVmX2NyYyk7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDC oMKgICogQXMgYSBmaW5hbCB0ZXN0LCB0cnkgd2l0aCAxNiBzcmMgdmlzaWJsZSwgYW5kIHZhcmlv dXMgaW52aXNpYmxlCj4+ICvCoMKgwqDCoCAqIGNvbXBvbmVudHMgdG8gY2hlY2sgY2xpcHBpbmcg ZG9lc24ndCBkcm9wIHRoZSB2aXNpYmxlIHNyYyBiZWxvdyAxNi4KPj4gK8KgwqDCoMKgICovCj4+ ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IDE2OyBpICs9IDQpIHsKPj4gK8KgwqDCoMKgwqDCoMKg IHNldF9zcmNfY29vcmRzKHBsYW5lLCBjbGlwX2ZiLCByb3QsIDE2LCBpKTsKPj4gK8KgwqDCoMKg wqDCoMKgIGlmIChyb3QgJiAoSUdUX1JPVEFUSU9OXzkwIHwgSUdUX1JPVEFUSU9OXzI3MCkpCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgKGNsaXBf ZmItPmhlaWdodCAvIDMyKSAqICgxNiArIGkpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKGNsaXBfZmItPndpZHRoIC8gMzIpICogKDE2ICsgaSkpOwo+ PiArwqDCoMKgwqDCoMKgwqAgZWxzZQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3RfcGxh bmVfc2V0X3NpemUocGxhbmUsIChjbGlwX2ZiLT53aWR0aCAvIDMyKSAqICgxNiArIGkpLAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGNsaXBfZmItPmhl aWdodCAvIDMyKSAqICgxNiArIGkpKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9kaXNwbGF5X2Nv bW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBhc3NlcnRf Y29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7Cj4+ICvC oMKgwqAgfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCB5dXZfdmFsaWRfd2lkdGgoZGF0YV90 ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgaWd0X291dHB1dF90ICpvdXRwdXQsIHVuc2lnbmVkIGZv cm1hdCkKPj4gK3sKPj4gK8KgwqDCoCBkcm1Nb2RlTW9kZUluZm8gKm1vZGUgPSBpZ3Rfb3V0cHV0 X2dldF9tb2RlKG91dHB1dCk7Cj4+ICvCoMKgwqAgaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZk YXRhLT5kaXNwbGF5Owo+PiArwqDCoMKgIGlndF9wbGFuZV90ICpwbGFuZTsKPj4gK8KgwqDCoCBz dHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiID0gJmRhdGEtPmZiWzJdOwo+PiArwqDCoMKgIHN0cnVjdCBp Z3RfZmIgKnJlZl9mYiA9ICZkYXRhLT5mYlszXTsKPj4gKwo+PiArwqDCoMKgIHByZXBhcmVfY3J0 YyhkYXRhLCBwaXBlLCBvdXRwdXQpOwo+PiArCj4+ICvCoMKgwqAgaWd0X2NyZWF0ZV9wYXR0ZXJu X2ZiKGRpc3BsYXktPmRybV9mZCwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3JtYXQsIExPQ0FMX0k5MTVfRk9S TUFUX01PRF9YX1RJTEVELAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAm ZGF0YS0+ZmJbMF0pOwo+PiArCj4+ICvCoMKgwqAgaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKGRpc3Bs YXktPmRybV9mZCwgbW9kZS0+dmRpc3BsYXksIG1vZGUtPmhkaXNwbGF5LAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3JtYXQsIExPQ0FMX0k5MTVfRk9STUFUX01PRF9Z X1RJTEVELAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmZGF0YS0+ZmJb MV0pOwo+PiArCj4+ICvCoMKgwqAgaWd0X2NyZWF0ZV9mYihkaXNwbGF5LT5kcm1fZmQsIDY0LCA2 NCwgZm9ybWF0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTE9DQUxfSTkxNV9GT1JN QVRfTU9EX1lfVElMRUQsIHJlZl9mYik7Cj4+ICsKPj4gK8KgwqDCoCBpZ3RfY3JlYXRlX2ZiKGRp c3BsYXktPmRybV9mZCwgMiAqIHJlZl9mYi0+d2lkdGgsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAyICogcmVmX2ZiLT5oZWlnaHQsIGZvcm1hdCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJTEVELCBjbGlwX2ZiKTsKPj4gKwo+ PiArwqDCoMKgIGlndF9waXBlX2NyY19zdGFydChkYXRhLT5waXBlX2NyYyk7Cj4+ICsKPj4gK8Kg wqDCoCBmb3JfZWFjaF9wbGFuZV9vbl9waXBlKGRpc3BsYXksIHBpcGUsIHBsYW5lKSB7Cj4+ICvC oMKgwqDCoMKgwqDCoCBpZ3RfY3JjX3QgcmVmX2NyY1s0XTsKPj4gK8KgwqDCoMKgwqDCoMKgIGNh aXJvX3QgKmNyOwo+PiArwqDCoMKgwqDCoMKgwqAgc3RhdGljIGNvbnN0IGRvdWJsZSBjb2xvcnNb NF1bM10gPSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsgMS4sIDAuLCAwLiB9LAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB7IDAuLCAxLiwgMC4gfSwKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgeyAwLiwgMC4sIDEuIH0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsgMS4s IDEuLCAxLiB9Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Owo+PiArwqDCoMKgwqDCoMKgwqAgaW50IGk7 Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICghcGxhbmVfc3VwcG9ydHNfZm9ybWF0KHBsYW5l LCBmb3JtYXQpKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gKwo+PiAr wqDCoMKgwqDCoMKgwqAgLyogRHJhdyB0aGUgRkIgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGNsaXBw aW5nIHRlc3RzLiAqLwo+PiArwqDCoMKgwqDCoMKgwqAgY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChk aXNwbGF5LT5kcm1fZmQsIGNsaXBfZmIpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X3BhaW50X2Nv bG9yKGNyLCAwLCAwLCBjbGlwX2ZiLT53aWR0aCAvIDIsIGNsaXBfZmItPmhlaWdodCAvIDIsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29sb3JzWzBdWzBdLCBjb2xvcnNbMF1b MV0sIGNvbG9yc1swXVsyXSk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9wYWludF9jb2xv cihjciwgY2xpcF9mYi0+d2lkdGggLyAyLCAwLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGNsaXBfZmItPndpZHRoIC8gMiwgY2xpcF9mYi0+aGVpZ2h0IC8gMiwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb2xvcnNbMV1bMF0sIGNvbG9yc1sxXVsxXSwgY29s b3JzWzFdWzJdKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X3BhaW50X2NvbG9yKGNyLCBj bGlwX2ZiLT53aWR0aCAvIDIsIGNsaXBfZmItPmhlaWdodCAvIDIsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgY2xpcF9mYi0+d2lkdGggLyAyLCBjbGlwX2ZiLT5oZWlnaHQgLyAy LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbG9yc1syXVswXSwgY29sb3Jz WzJdWzFdLCBjb2xvcnNbMl1bMl0pOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3RfcGFpbnRf Y29sb3IoY3IsIDAsIGNsaXBfZmItPmhlaWdodCAvIDIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgY2xpcF9mYi0+d2lkdGggLyAyLCBjbGlwX2ZiLT5oZWlnaHQgLyAyLAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbG9yc1szXVswXSwgY29sb3JzWzNdWzFd LCBjb2xvcnNbM11bMl0pOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3RfcHV0X2NhaXJvX2N0 eChkaXNwbGF5LT5kcm1fZmQsIGNsaXBfZmIsIGNyKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAg LyogRHJhdyBhbGwgcmVmZXJlbmNlIEZCJ3MgdG8gY29sbGVjdCB0aGUgQ1JDLiAqLwo+PiArwqDC oMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRpc3BsYXktPmRybV9mZCwgcmVmX2ZiKTsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X3BhaW50X2NvbG9yKGNyLCAwLCAwLCByZWZf ZmItPndpZHRoLCByZWZfZmItPmhlaWdodCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNvbG9yc1tpXVswXSwgY29sb3JzW2ldWzFdLCBjb2xvcnNbaV1bMl0pOwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3RfcHV0X2NhaXJvX2N0eChkaXNwbGF5LT5kcm1f ZmQsICZkYXRhLT5mYlszXSwgY3IpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlm ICghaSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9wbGFuZV9zZXRf ZmIocGxhbmUsIHJlZl9mYik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0 X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgbW9kZS0+aGRpc3BsYXkgLSByZWZfZmItPndpZHRo LCBtb2RlLT52ZGlzcGxheSAtIHJlZl9mYi0+aGVpZ2h0KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMp Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlndF9kaXJ0eV9mYihkaXNwbGF5LT5kcm1fZmQsIHJlZl9mYik7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X3dhaXRfZm9yX3ZibGFuayhkaXNw bGF5LT5kcm1fZmQsIHBpcGUpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+ICsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X3BpcGVfY3JjX2RyYWluKGRhdGEtPnBpcGVfY3Jj KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X3BpcGVfY3JjX2dldF9zaW5nbGUoZGF0 YS0+cGlwZV9jcmMsICZyZWZfY3JjW2ldKTsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gKwo+PiAr wqDCoMKgwqDCoMKgwqAgaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7Cj4+ICvCoMKgwqDC oMKgwqDCoCBpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCAwLCAwKTsKPj4gKwo+PiArwqDC oMKgwqDCoMKgwqAgeXV2X3ZhbGlkX3dpZHRoX3BsYW5lKGRhdGEsIG1vZGUsIHBsYW5lLCAmZGF0 YS0+ZmJbMF0sIElHVF9ST1RBVElPTl8wLCAmcmVmX2NyY1swXSk7Cj4+ICvCoMKgwqDCoMKgwqDC oCB5dXZfdmFsaWRfd2lkdGhfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsICZkYXRhLT5mYlsxXSwg SUdUX1JPVEFUSU9OXzkwLCAmcmVmX2NyY1sxXSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCB5dXZfdmFs aWRfd2lkdGhfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsICZkYXRhLT5mYlswXSwgSUdUX1JPVEFU SU9OXzE4MCwgJnJlZl9jcmNbMl0pOwo+PiArwqDCoMKgwqDCoMKgwqAgeXV2X3ZhbGlkX3dpZHRo X3BsYW5lKGRhdGEsIG1vZGUsIHBsYW5lLCAmZGF0YS0+ZmJbMV0sIElHVF9ST1RBVElPTl8yNzAs ICZyZWZfY3JjWzNdKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X3BsYW5lX3NldF9mYihw bGFuZSwgTlVMTCk7Cj4+ICvCoMKgwqAgfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgYm9vbCB5dXZf Y29tbWl0X3JvdGF0ZWQoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgaWd0X3JvdGF0aW9uX3Qgcm90 KQo+PiArewo+PiArwqDCoMKgIGlmIChpZ3RfZGlzcGxheV90cnlfY29tbWl0MihkaXNwbGF5LCBD T01NSVRfQVRPTUlDKSA8IDApIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9kZWJ1ZygiU2tpcHBp bmcgcm90YXRlZCB0ZXN0LCBhbGlnbm1lbnQgaXMgd3JvbmcuXG4iKTsKPj4gK8KgwqDCoMKgwqDC oMKgIHJldHVybiBmYWxzZTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gdHJ1 ZTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgeXV2X2Nyb3Bfc2NhbGVfYnVnX3BsYW5lKGRh dGFfdCAqZGF0YSwgZHJtTW9kZU1vZGVJbmZvICptb2RlLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9wbGFuZV90ICpwbGFuZSwgc3RydWN0IGlndF9m YiAqZmIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0 X3JvdGF0aW9uX3Qgcm90LCBpZ3RfY3JjX3QgKnJlZl9jcmMpCj4+ICt7Cj4+ICvCoMKgwqAgaWd0 X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Owo+PiArwqDCoMKgIGlndF9jcmNf dCBjcmM7Cj4+ICvCoMKgwqAgaW50IG9mc1tdID0geyAwLCAxLCAtMSwgMiwgLTIgfTsKPj4gK8Kg wqDCoCBpbnQgaSwgajsKPj4gKwo+PiArwqDCoMKgIGlndF9wbGFuZV9zZXRfZmIocGxhbmUsIGZi KTsKPj4gK8KgwqDCoCBpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCByb3QpOwo+PiArCj4+ ICvCoMKgwqAgaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgNjQsIDY0KTsKPj4gK8KgwqDC oCBpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIDI1NiwgMjU2KTsKPj4gKwo+PiArwqDCoMKgIGln dF9mYl9zZXRfcG9zaXRpb24oZmIsIHBsYW5lLCBmYi0+d2lkdGggLyA0LCBmYi0+aGVpZ2h0IC8g NCk7Cj4+ICvCoMKgwqAgaWd0X2ZiX3NldF9zaXplKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gMiwg ZmItPmhlaWdodCAvIDIpOwo+PiArwqDCoMKgIGlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwg Q09NTUlUX0FUT01JQyk7Cj4+ICvCoMKgwqAgYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0 YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOwo+PiArCj4+ICvCoMKgwqAgLyogTWFrZSBzdXJl IGJvdW5kYXJpZXMgbWF0Y2ggKi8KPj4gK8KgwqDCoCBpZ3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBw bGFuZSwgZmItPndpZHRoIC8gNCAtIDIsIGZiLT5oZWlnaHQgLyA0IC0gMik7Cj4+ICvCoMKgwqAg aWd0X2ZiX3NldF9zaXplKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gMiArIDQsIGZiLT5oZWlnaHQg LyAyICsgNCk7Cj4+ICvCoMKgwqAgaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRf QVRPTUlDKTsKPj4gK8KgwqDCoCBhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRhLT5waXBl X2NyYywgJmNyYywgcmVmX2NyYyk7Cj4+ICsKPj4gK8KgwqDCoCBmb3IgKGkgPSAxOyBpIDwgQVJS QVlfU0laRShvZnMpOyBpKyspIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9kZWJ1ZygiVGVzdGlu ZyB3aXRoIHJvdCAleCBhbmQgZXh0cmEgJWkgb24gdGhlIGxlZnQgc2lkZVxuIiwgcm90LCBvZnNb aV0pOwo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X2ZiX3NldF9wb3NpdGlvbihmYiwgcGxhbmUsIGZi LT53aWR0aCAvIDQgKyBvZnNbaV0sIGZiLT5oZWlnaHQgLyA0IC0gMik7Cj4+ICvCoMKgwqDCoMKg wqDCoCBpZ3RfZmJfc2V0X3NpemUoZmIsIHBsYW5lLCBmYi0+d2lkdGggLyAyICsgMiAtIG9mc1tp XSwgZmItPmhlaWdodCAvIDIgKyA0KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICh5dXZfY29tbWl0 X3JvdGF0ZWQoZGlzcGxheSwgcm90KSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXNzZXJ0 X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOwo+PiAr Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3RfZGVidWcoIlRlc3Rpbmcgd2l0aCByb3QgJXggYW5kIGV4 dHJhICVpIG9uIHRoZSB0b3Agc2lkZVxuIiwgcm90LCBvZnNbaV0pOwo+PiArwqDCoMKgwqDCoMKg wqAgaWd0X2ZiX3NldF9wb3NpdGlvbihmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDQgLSAyLCBmYi0+ aGVpZ2h0IC8gNCArIG9mc1tpXSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3RfZmJfc2V0X3NpemUo ZmIsIHBsYW5lLCBmYi0+d2lkdGggLyAyICsgNCwgZmItPmhlaWdodCAvIDIgKyAyIC0gb2ZzW2ld KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICh5dXZfY29tbWl0X3JvdGF0ZWQoZGlzcGxheSwgcm90 KSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXNzZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwo ZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBp Z3RfZGVidWcoIlRlc3Rpbmcgd2l0aCByb3QgJXggYW5kIGV4dHJhICVpIG9uIHRoZSByaWdodCBz aWRlXG4iLCByb3QsIG9mc1tpXSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3RfZmJfc2V0X3Bvc2l0 aW9uKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gNCAtIDIsIGZiLT5oZWlnaHQgLyA0KTsKPj4gK8Kg wqDCoMKgwqDCoMKgIGlndF9mYl9zZXRfc2l6ZShmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDIgKyAy ICsgb2ZzW2ldLCBmYi0+aGVpZ2h0IC8gMik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoeXV2X2Nv bW1pdF9yb3RhdGVkKGRpc3BsYXksIHJvdCkpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFz c2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCByZWZfY3JjKTsK Pj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X2RlYnVnKCJUZXN0aW5nIHdpdGggcm90ICV4IGFu ZCBleHRyYSAlaSBvbiB0aGUgYm90dG9tIHNpZGVcbiIsIHJvdCwgb2ZzW2ldKTsKPj4gK8KgwqDC oMKgwqDCoMKgIGlndF9mYl9zZXRfcG9zaXRpb24oZmIsIHBsYW5lLCBmYi0+d2lkdGggLyA0IC0g MiwgZmItPmhlaWdodCAvIDQgLSAyKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9mYl9zZXRfc2l6 ZShmYiwgcGxhbmUsIGZiLT53aWR0aCAvIDIgKyA0LCBmYi0+aGVpZ2h0IC8gMiArIDIgKyBvZnNb aV0pOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHl1dl9jb21taXRfcm90YXRlZChkaXNwbGF5LCBy b3QpKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVh bChkYXRhLT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7Cj4+ICsKPiBFeHRyYSBcbj8KPj4gK8Kg wqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvZnMpOyBp KyspCj4+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGogPSAhaTsgaiA8IEFSUkFZX1NJWkUob2ZzKTsg aisrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9kZWJ1ZygiVGVzdGluZyB3aXRo IHJvdCAleCBhbmQgZXh0cmEgKCVpLCAlaSkgYXQgdGhlIGVkZ2VzXG4iLCByb3QsIG9mc1tpXSwg b2ZzW2pdKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3RfZmJfc2V0X3Bvc2l0 aW9uKGZiLCBwbGFuZSwgZmItPndpZHRoIC8gNCArIG9mc1tpXSwgZmItPmhlaWdodCAvIDQgKyBv ZnNbal0pOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3RfZmJfc2V0X3NpemUoZmIsIHBs YW5lLCBmYi0+d2lkdGggLyAyIC0gMiAqIG9mc1tpXSwgZmItPmhlaWdodCAvIDIgLSAyICogb2Zz W2pdKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoeXV2X2NvbW1pdF9yb3Rh dGVkKGRpc3BsYXksIHJvdCkpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXNz ZXJ0X2NvbGxlY3RlZF9jcmNfZXF1YWwoZGF0YS0+cGlwZV9jcmMsICZjcmMsIHJlZl9jcmMpOwo+ PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcmF3X2NsaXBf ZmIoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgc3RydWN0IGlndF9mYiAqY2xpcF9mYikKPj4gK3sK Pj4gK8KgwqDCoCBjYWlyb190ICpjciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRpc3BsYXktPmRybV9m ZCwgY2xpcF9mYik7Cj4+ICsKPj4gK8KgwqDCoCBpZ3RfcGFpbnRfY29sb3IoY3IsIDAsIDAsIGNs aXBfZmItPndpZHRoLCBjbGlwX2ZiLT5oZWlnaHQsIC4wLCAuMCwgLjUpOwo+PiArwqDCoMKgIGln dF9wYWludF9jb2xvcihjciwgY2xpcF9mYi0+d2lkdGggLyA0IC0gMiwgY2xpcF9mYi0+aGVpZ2h0 IC8gNCAtIDIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNsaXBfZmItPndpZHRoIC8gMiAr IDQsIGNsaXBfZmItPmhlaWdodCAvIDIgKyA0LCAxLiwgMS4sIDEuKTsKPj4gKwo+PiArwqDCoMKg IGlndF9wdXRfY2Fpcm9fY3R4KGRpc3BsYXktPmRybV9mZCwgY2xpcF9mYiwgY3IpOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgdm9pZCB5dXZfY3JvcF9zY2FsZV9idWcoZGF0YV90ICpkYXRhLCBlbnVt IHBpcGUgcGlwZSwgaWd0X291dHB1dF90ICpvdXRwdXQsIHVuc2lnbmVkIGZvcm1hdCkKPj4gK3sK Pj4gK8KgwqDCoCBkcm1Nb2RlTW9kZUluZm8gKm1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91 dHB1dCk7Cj4+ICvCoMKgwqAgaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5 Owo+PiArwqDCoMKgIGlndF9wbGFuZV90ICpwbGFuZSwgKnByaW1hcnkgPSBpZ3RfcGlwZV9nZXRf cGxhbmVfdHlwZSgmZGlzcGxheS0+cGlwZXNbcGlwZV0sIERSTV9QTEFORV9UWVBFX1BSSU1BUlkp Owo+PiArwqDCoMKgIHN0cnVjdCBpZ3RfZmIgKnJlZl9mYiA9ICZkYXRhLT5mYlsyXTsKPj4gK8Kg wqDCoCBzdHJ1Y3QgaWd0X2ZiICpjbGlwX2ZiID0gJmRhdGEtPmZiWzNdOwo+PiArwqDCoMKgIHN0 cnVjdCBpZ3RfZmIgKmNsaXBfZmJfeHRpbGVkID0gJmRhdGEtPmZiWzRdOwo+PiArwqDCoMKgIHN0 cnVjdCBpZ3RfZmIgKmNsaXBfZmJfeXRpbGVkID0gJmRhdGEtPmZiWzVdOwo+PiArCj4+ICvCoMKg wqAgcHJlcGFyZV9jcnRjKGRhdGEsIHBpcGUsIG91dHB1dCk7Cj4+ICsKPj4gK8KgwqDCoCBpZ3Rf Y3JlYXRlX2NvbG9yX2ZiKGRpc3BsYXktPmRybV9mZCwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZk aXNwbGF5LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvcm1hdCwgTE9DQUxf STkxNV9GT1JNQVRfTU9EX1hfVElMRUQsIC41LCAuNSwgLjUsICZkYXRhLT5mYlswXSk7Cj4+ICsK Pj4gK8KgwqDCoCBpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRpc3BsYXktPmRybV9mZCwgMjU2LCAyNTYs IGZvcm1hdCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBMT0NBTF9JOTE1X0ZP Uk1BVF9NT0RfWF9USUxFRCwgMS4sIDEuLCAxLiwgcmVmX2ZiKTsKPj4gKwo+PiArwqDCoMKgIGln dF9jcmVhdGVfZmIoZGlzcGxheS0+ZHJtX2ZkLCA4MCwgMTI4LCBmb3JtYXQsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLCBjbGlwX2ZiKTsK Pj4gKwo+PiArwqDCoMKgIGlndF9jcmVhdGVfZmIoZGlzcGxheS0+ZHJtX2ZkLCA4MCwgMTI4LCBm b3JtYXQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBMT0NBTF9JOTE1X0ZPUk1BVF9N T0RfWF9USUxFRCwgY2xpcF9mYl94dGlsZWQpOwo+IFNob3VsZCBcbiBjb21lIGFmdGVyIHRoaXM/ Cj4+ICvCoMKgwqAgaWd0X2NyZWF0ZV9mYihkaXNwbGF5LT5kcm1fZmQsIDgwLCAxMjgsIGZvcm1h dCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIExPQ0FMX0k5MTVfRk9STUFUX01PRF9Z X1RJTEVELCBjbGlwX2ZiX3l0aWxlZCk7Cj4+ICsKPj4gK8KgwqDCoCBkcmF3X2NsaXBfZmIoZGlz cGxheSwgY2xpcF9mYik7Cj4+ICvCoMKgwqAgZHJhd19jbGlwX2ZiKGRpc3BsYXksIGNsaXBfZmJf eHRpbGVkKTsKPj4gK8KgwqDCoCBkcmF3X2NsaXBfZmIoZGlzcGxheSwgY2xpcF9mYl95dGlsZWQp Owo+PiArCj4+ICvCoMKgwqAgaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmZGF0YS0+ZmJbMF0p Owo+PiArCj4+ICvCoMKgwqAgZm9yX2VhY2hfcGxhbmVfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBw bGFuZSkgewo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X2NyY190IHJlZl9jcmM7Cj4+ICsKPj4gK8Kg wqDCoMKgwqDCoMKgIGlmICghcGxhbmVfc3VwcG9ydHNfZm9ybWF0KHBsYW5lLCBmb3JtYXQpKQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gKwo+PiArwqDCoMKgwqDCoMKg wqAgaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgcmVmX2ZiKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGln dF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDY0LCA2NCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBp Z3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+PiArCj4+ICvCoMKg wqDCoMKgwqDCoCBpZ3RfcGlwZV9jcmNfc3RhcnQoZGF0YS0+cGlwZV9jcmMpOwo+PiArwqDCoMKg wqDCoMKgwqAgaWd0X3BpcGVfY3JjX2dldF9zaW5nbGUoZGF0YS0+cGlwZV9jcmMsICZyZWZfY3Jj KTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgeXV2X2Nyb3Bfc2NhbGVfYnVnX3BsYW5lKGRhdGEs IG1vZGUsIHBsYW5lLCBjbGlwX2ZiLCBJR1RfUk9UQVRJT05fMCwgJnJlZl9jcmMpOwo+PiArwqDC oMKgwqDCoMKgwqAgeXV2X2Nyb3Bfc2NhbGVfYnVnX3BsYW5lKGRhdGEsIG1vZGUsIHBsYW5lLCBj bGlwX2ZiX3h0aWxlZCwgSUdUX1JPVEFUSU9OXzAsICZyZWZfY3JjKTsKPj4gK8KgwqDCoMKgwqDC oMKgIHl1dl9jcm9wX3NjYWxlX2J1Z19wbGFuZShkYXRhLCBtb2RlLCBwbGFuZSwgY2xpcF9mYl95 dGlsZWQsIElHVF9ST1RBVElPTl8wLCAmcmVmX2NyYyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCB5dXZf Y3JvcF9zY2FsZV9idWdfcGxhbmUoZGF0YSwgbW9kZSwgcGxhbmUsIGNsaXBfZmJfeXRpbGVkLCBJ R1RfUk9UQVRJT05fOTAsICZyZWZfY3JjKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHl1dl9jcm9wX3Nj YWxlX2J1Z19wbGFuZShkYXRhLCBtb2RlLCBwbGFuZSwgY2xpcF9mYiwgSUdUX1JPVEFUSU9OXzE4 MCwgJnJlZl9jcmMpOwo+PiArwqDCoMKgwqDCoMKgwqAgeXV2X2Nyb3Bfc2NhbGVfYnVnX3BsYW5l KGRhdGEsIG1vZGUsIHBsYW5lLCBjbGlwX2ZiX3h0aWxlZCwgSUdUX1JPVEFUSU9OXzE4MCwgJnJl Zl9jcmMpOwo+PiArwqDCoMKgwqDCoMKgwqAgeXV2X2Nyb3Bfc2NhbGVfYnVnX3BsYW5lKGRhdGEs IG1vZGUsIHBsYW5lLCBjbGlwX2ZiX3l0aWxlZCwgSUdUX1JPVEFUSU9OXzE4MCwgJnJlZl9jcmMp Owo+PiArwqDCoMKgwqDCoMKgwqAgeXV2X2Nyb3Bfc2NhbGVfYnVnX3BsYW5lKGRhdGEsIG1vZGUs IHBsYW5lLCBjbGlwX2ZiX3l0aWxlZCwgSUdUX1JPVEFUSU9OXzI3MCwgJnJlZl9jcmMpOwo+PiAr Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBwbGFuZSAhPSBwcmlt YXJ5ID8gTlVMTCA6ICZkYXRhLT5mYlswXSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4g K8KgwqDCoCB9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHl1dl9jaHJvbWFfc3VicGl4ZWxf Y2xpcF9wbGFuZV93aXRoX2N1cnNvcihkYXRhX3QgKmRhdGEsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X3BsYW5lX3QgKnBsYW5l LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cnVjdCBpZ3RfZmIgKmNsaXBfZmIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X3BsYW5lX3QgKmN1cnNvciwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgaWd0X2ZiICpjdXJzb3JfZmIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X2NyY190ICpyZWZfY3JjLAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBjdXJzb3Jf eCwgaW50IGN1cnNvcl95KQo+PiArewo+PiArwqDCoMKgIGlndF9kaXNwbGF5X3QgKmRpc3BsYXkg PSAmZGF0YS0+ZGlzcGxheTsKPj4gKwo+PiArwqDCoMKgIGlndF9wbGFuZV9zZXRfZmIocGxhbmUs IGNsaXBfZmIpOwo+PiArwqDCoMKgIGlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDY0LCA2 NCk7Cj4+ICvCoMKgwqAgaWd0X3BsYW5lX3NldF9yb3RhdGlvbihwbGFuZSwgSUdUX1JPVEFUSU9O XzApOwo+PiArCj4+ICvCoMKgwqAgaWd0X3BsYW5lX3NldF9mYihjdXJzb3IsIGN1cnNvcl9mYik7 Cj4+ICvCoMKgwqAgaWd0X3BsYW5lX3NldF9wb3NpdGlvbihjdXJzb3IsIGN1cnNvcl94LCBjdXJz b3JfeSk7Cj4+ICvCoMKgwqAgaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRP TUlDKTsKPj4gKwo+PiArwqDCoMKgIGlndF9waXBlX2NyY19kcmFpbihkYXRhLT5waXBlX2NyYyk7 Cj4+ICvCoMKgwqAgaWd0X3BpcGVfY3JjX2dldF9zaW5nbGUoZGF0YS0+cGlwZV9jcmMsIHJlZl9j cmMpOwo+PiArCj4+ICvCoMKgwqAgaWd0X3BsYW5lX3NldF9mYihjdXJzb3IsIE5VTEwpOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgYm9vbCB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfcmln aHQoZGF0YV90ICpkYXRhLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGlndF9yb3RhdGlvbl90IHJvdGF0aW9uLAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9wbGFuZV90ICpwbGFuZSwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qg aWd0X2ZiICpjbGlwX2ZiLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGlndF9jcmNfdCAqcmVmX2NyYykKPiBTaG91bGQgbWFrZSBhcmd1bWVudHMg YWxpZ25lZD8KPj4gK3sKPj4gK8KgwqDCoCBpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEt PmRpc3BsYXk7Cj4+ICvCoMKgwqAgaWd0X2NyY190IGNyYyA9IHt9Owo+PiArCj4+ICvCoMKgwqAg aWd0X3BsYW5lX3NldF9mYihwbGFuZSwgY2xpcF9mYik7Cj4+ICvCoMKgwqAgaWd0X3BsYW5lX3Nl dF9wb3NpdGlvbihwbGFuZSwgNjQsIDY0KTsKPj4gK8KgwqDCoCBpZ3RfcGxhbmVfc2V0X3JvdGF0 aW9uKHBsYW5lLCByb3RhdGlvbik7Cj4+ICvCoMKgwqAgaWd0X3BsYW5lX3NldF9zaXplKHBsYW5l LCBjbGlwX2ZiLT53aWR0aCAtIDEsIGNsaXBfZmItPmhlaWdodCk7Cj4+ICsKPj4gK8KgwqDCoCBz d2l0Y2ggKHJvdGF0aW9uKSB7Cj4+ICvCoMKgwqAgY2FzZSBJR1RfUk9UQVRJT05fMTgwOgo+PiAr wqDCoMKgwqDCoMKgwqAgaWd0X2ZiX3NldF9wb3NpdGlvbihjbGlwX2ZiLCBwbGFuZSwgMSwgMCk7 Cj4+ICvCoMKgwqAgY2FzZSBJR1RfUk9UQVRJT05fMDoKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9m Yl9zZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwgY2xpcF9mYi0+d2lkdGggLSAxLCBjbGlwX2ZiLT5o ZWlnaHQpOwo+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICsKPiBFeHRyYSBcbj8KPj4gK8Kg wqDCoCBjYXNlIElHVF9ST1RBVElPTl8yNzA6Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3RfZmJfc2V0 X3Bvc2l0aW9uKGNsaXBfZmIsIHBsYW5lLCAwLCAxKTsKPj4gK8KgwqDCoCBjYXNlIElHVF9ST1RB VElPTl85MDoKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9mYl9zZXRfc2l6ZShjbGlwX2ZiLCBwbGFu ZSwgY2xpcF9mYi0+d2lkdGgsIGNsaXBfZmItPmhlaWdodCAtIDEpOwo+PiArwqDCoMKgwqDCoMKg wqAgYnJlYWs7Cj4+ICvCoMKgwqAgZGVmYXVsdDoKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9hc3Nl cnRfZigwLCAiVW5oYW5kbGVkIHJvdGF0aW9uICV4XG4iLCByb3RhdGlvbik7Cj4+ICvCoMKgwqAg fQo+PiArCj4+ICvCoMKgwqAgaWYgKGlndF9kaXNwbGF5X3RyeV9jb21taXQyKGRpc3BsYXksIENP TU1JVF9BVE9NSUMpIDwgMCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsKPj4gKwo+ PiArwqDCoMKgIGFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3Jj LCByZWZfY3JjKTsKPj4gK8KgwqDCoCByZXR1cm4gdHJ1ZTsKPj4gK30KPj4gKwo+PiArc3RhdGlj IGJvb2wgeXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX2JvdHRvbShkYXRhX3QgKmRhdGEs Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp Z3Rfcm90YXRpb25fdCByb3RhdGlvbiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9wbGFuZV90ICpwbGFuZSwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpZ3RfZmIgKmNs aXBfZmIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpZ3RfY3JjX3QgKnJlZl9jcmMpCj4+ICt7Cj4+ICvCoMKgwqAgaWd0X2Rpc3BsYXlfdCAq ZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Owo+PiArwqDCoMKgIGlndF9jcmNfdCBjcmMgPSB7fTsK Pj4gKwo+PiArwqDCoMKgIGlndF9wbGFuZV9zZXRfZmIocGxhbmUsIGNsaXBfZmIpOwo+PiArwqDC oMKgIGlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDY0LCA2NCk7Cj4+ICvCoMKgwqAgaWd0 X3BsYW5lX3NldF9yb3RhdGlvbihwbGFuZSwgcm90YXRpb24pOwo+PiArwqDCoMKgIGlndF9wbGFu ZV9zZXRfc2l6ZShwbGFuZSwgY2xpcF9mYi0+d2lkdGgsIGNsaXBfZmItPmhlaWdodCAtIDEpOwo+ PiArCj4+ICvCoMKgwqAgc3dpdGNoIChyb3RhdGlvbikgewo+PiArwqDCoMKgIGNhc2UgSUdUX1JP VEFUSU9OXzE4MDoKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9mYl9zZXRfcG9zaXRpb24oY2xpcF9m YiwgcGxhbmUsIDAsIDEpOwo+PiArwqDCoMKgIGNhc2UgSUdUX1JPVEFUSU9OXzA6Cj4+ICvCoMKg wqDCoMKgwqDCoCBpZ3RfZmJfc2V0X3NpemUoY2xpcF9mYiwgcGxhbmUsIGNsaXBfZmItPndpZHRo LCBjbGlwX2ZiLT5oZWlnaHQgLSAxKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArCj4g RXh0cmEgXG4/Cj4+ICvCoMKgwqAgY2FzZSBJR1RfUk9UQVRJT05fOTA6Cj4+ICvCoMKgwqDCoMKg wqDCoCBpZ3RfZmJfc2V0X3Bvc2l0aW9uKGNsaXBfZmIsIHBsYW5lLCAxLCAwKTsKPj4gK8KgwqDC oCBjYXNlIElHVF9ST1RBVElPTl8yNzA6Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3RfZmJfc2V0X3Np emUoY2xpcF9mYiwgcGxhbmUsIGNsaXBfZmItPndpZHRoIC0gMSwgY2xpcF9mYi0+aGVpZ2h0KTsK Pj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGRlZmF1bHQ6Cj4+ICvCoMKgwqDC oMKgwqDCoCBpZ3RfYXNzZXJ0X2YoMCwgIlVuaGFuZGxlZCByb3RhdGlvbiAleFxuIiwgcm90YXRp b24pOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGlmIChpZ3RfZGlzcGxheV90cnlfY29t bWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKSA8IDApCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gZmFsc2U7Cj4+ICsKPj4gK8KgwqDCoCBhc3NlcnRfY29sbGVjdGVkX2NyY19lcXVhbChkYXRh LT5waXBlX2NyYywgJmNyYywgcmVmX2NyYyk7Cj4+ICvCoMKgwqAgcmV0dXJuIHRydWU7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBib29sIHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9sZWZ0 KGRhdGFfdCAqZGF0YSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaWd0X3JvdGF0aW9uX3Qgcm90YXRpb24sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9wbGFuZV90ICpwbGFuZSwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGlndF9mYiAq Y2xpcF9mYiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaWd0X2NyY190ICpyZWZfY3JjKQo+PiArewo+PiArwqDCoMKgIGlndF9kaXNwbGF5X3QgKmRp c3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPj4gK8KgwqDCoCBpZ3RfY3JjX3QgY3JjID0ge307Cj4+ ICsKPj4gK8KgwqDCoCBpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBjbGlwX2ZiKTsKPj4gK8KgwqDC oCBpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCA2NSwgNjQpOwo+PiArwqDCoMKgIGlndF9w bGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIHJvdGF0aW9uKTsKPj4gK8KgwqDCoCBpZ3RfcGxhbmVf c2V0X3NpemUocGxhbmUsIGNsaXBfZmItPndpZHRoIC0gMSwgY2xpcF9mYi0+aGVpZ2h0KTsKPj4g Kwo+PiArwqDCoMKgIHN3aXRjaCAocm90YXRpb24pIHsKPj4gK8KgwqDCoCBjYXNlIElHVF9ST1RB VElPTl8wOgo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X2ZiX3NldF9wb3NpdGlvbihjbGlwX2ZiLCBw bGFuZSwgMSwgMCk7Cj4+ICvCoMKgwqAgY2FzZSBJR1RfUk9UQVRJT05fMTgwOgo+PiArwqDCoMKg wqDCoMKgwqAgaWd0X2ZiX3NldF9zaXplKGNsaXBfZmIsIHBsYW5lLCBjbGlwX2ZiLT53aWR0aCAt IDEsIGNsaXBfZmItPmhlaWdodCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gKwo+IFNh bWUgaGVyZSBhbmQgYmVsb3cgY2xpcF9wbGFuZSBmdW5jdGlvbnM6LyBTb3JyeS4KPj4gK8KgwqDC oCBjYXNlIElHVF9ST1RBVElPTl85MDoKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9mYl9zZXRfcG9z aXRpb24oY2xpcF9mYiwgcGxhbmUsIDAsIDEpOwo+PiArwqDCoMKgIGNhc2UgSUdUX1JPVEFUSU9O XzI3MDoKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9mYl9zZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwg Y2xpcF9mYi0+d2lkdGgsIGNsaXBfZmItPmhlaWdodCAtIDEpOwo+PiArwqDCoMKgwqDCoMKgwqAg YnJlYWs7Cj4+ICvCoMKgwqAgZGVmYXVsdDoKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9hc3NlcnRf ZigwLCAiVW5oYW5kbGVkIHJvdGF0aW9uICV4XG4iLCByb3RhdGlvbik7Cj4+ICvCoMKgwqAgfQo+ PiArCj4+ICvCoMKgwqAgaWYgKGlndF9kaXNwbGF5X3RyeV9jb21taXQyKGRpc3BsYXksIENPTU1J VF9BVE9NSUMpIDwgMCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsKPj4gKwo+PiAr wqDCoMKgIGFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAmY3JjLCBy ZWZfY3JjKTsKPj4gK8KgwqDCoCByZXR1cm4gdHJ1ZTsKPj4gK30KPj4gKwo+PiArCj4+ICtzdGF0 aWMgYm9vbCB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfdG9wKGRhdGFfdCAqZGF0YSwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGln dF9yb3RhdGlvbl90IHJvdGF0aW9uLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X3BsYW5lX3QgKnBsYW5lLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGlndF9mYiAqY2xp cF9mYiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGlndF9jcmNfdCAqcmVmX2NyYykKPj4gK3sKPj4gK8KgwqDCoCBpZ3RfZGlzcGxheV90ICpk aXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7Cj4+ICvCoMKgwqAgaWd0X2NyY190IGNyYyA9IHt9Owo+ PiArCj4+ICvCoMKgwqAgaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgY2xpcF9mYik7Cj4+ICvCoMKg wqAgaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgNjQsIDY1KTsKPj4gK8KgwqDCoCBpZ3Rf cGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCByb3RhdGlvbik7Cj4+ICvCoMKgwqAgaWd0X3BsYW5l X3NldF9zaXplKHBsYW5lLCBjbGlwX2ZiLT53aWR0aCwgY2xpcF9mYi0+aGVpZ2h0IC0gMSk7Cj4+ ICsKPj4gK8KgwqDCoCBzd2l0Y2ggKHJvdGF0aW9uKSB7Cj4+ICvCoMKgwqAgY2FzZSBJR1RfUk9U QVRJT05fMDoKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9mYl9zZXRfcG9zaXRpb24oY2xpcF9mYiwg cGxhbmUsIDAsIDEpOwo+PiArwqDCoMKgIGNhc2UgSUdUX1JPVEFUSU9OXzE4MDoKPj4gK8KgwqDC oMKgwqDCoMKgIGlndF9mYl9zZXRfc2l6ZShjbGlwX2ZiLCBwbGFuZSwgY2xpcF9mYi0+d2lkdGgs IGNsaXBfZmItPmhlaWdodCAtIDEpOwo+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICsKPj4g K8KgwqDCoCBjYXNlIElHVF9ST1RBVElPTl8yNzA6Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3RfZmJf c2V0X3Bvc2l0aW9uKGNsaXBfZmIsIHBsYW5lLCAxLCAwKTsKPj4gK8KgwqDCoCBjYXNlIElHVF9S T1RBVElPTl85MDoKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9mYl9zZXRfc2l6ZShjbGlwX2ZiLCBw bGFuZSwgY2xpcF9mYi0+d2lkdGggLSAxLCBjbGlwX2ZiLT5oZWlnaHQpOwo+PiArwqDCoMKgwqDC oMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqAgZGVmYXVsdDoKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9h c3NlcnRfZigwLCAiVW5oYW5kbGVkIHJvdGF0aW9uICV4XG4iLCByb3RhdGlvbik7Cj4+ICvCoMKg wqAgfQo+PiArCj4+ICvCoMKgwqAgaWYgKGlndF9kaXNwbGF5X3RyeV9jb21taXQyKGRpc3BsYXks IENPTU1JVF9BVE9NSUMpIDwgMCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsKPj4g Kwo+PiArwqDCoMKgIGFzc2VydF9jb2xsZWN0ZWRfY3JjX2VxdWFsKGRhdGEtPnBpcGVfY3JjLCAm Y3JjLCByZWZfY3JjKTsKPj4gK8KgwqDCoCByZXR1cm4gdHJ1ZTsKPj4gK30KPj4gKwo+PiArc3Rh dGljIHZvaWQgeXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBl IHBpcGUsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCB1bnNpZ25lZCBmb3JtYXQpCj4+ICt7Cj4+ICvC oMKgwqAgZHJtTW9kZU1vZGVJbmZvICptb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQp Owo+PiArwqDCoMKgIGlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPj4g K8KgwqDCoCBpZ3RfcGlwZV90ICpwaXBlX29iaiA9ICZkaXNwbGF5LT5waXBlc1twaXBlXTsKPj4g K8KgwqDCoCBzdHJ1Y3QgaWd0X2ZiICpiZ19mYiA9ICZkYXRhLT5mYlswXTsKPj4gK8KgwqDCoCBz dHJ1Y3QgaWd0X2ZiICpiZ19jdXJzb3JfZmIgPSAmZGF0YS0+ZmJbMV07Cj4+ICvCoMKgwqAgc3Ry dWN0IGlndF9mYiAqYmxhY2tfY3Vyc29yX2ZiID0gJmRhdGEtPmZiWzJdOwo+PiArwqDCoMKgIHN0 cnVjdCBpZ3RfZmIgKmNsaXBfZmIgPSAmZGF0YS0+ZmJbM107Cj4+ICvCoMKgwqAgaWd0X3BsYW5l X3QgKnByaW1hcnkgPSBpZ3RfcGlwZV9nZXRfcGxhbmVfdHlwZShwaXBlX29iaiwgRFJNX1BMQU5F X1RZUEVfUFJJTUFSWSk7Cj4+ICvCoMKgwqAgaWd0X3BsYW5lX3QgKmN1cnNvciA9IGlndF9waXBl X2dldF9wbGFuZV90eXBlKHBpcGVfb2JqLCBEUk1fUExBTkVfVFlQRV9DVVJTT1IpOwo+PiArwqDC oMKgIGlndF9wbGFuZV90ICpwbGFuZTsKPj4gK8KgwqDCoCBjYWlyb190ICpjcjsKPj4gK8KgwqDC oCBib29sIHJldCA9IGZhbHNlOwo+PiArCj4+ICvCoMKgwqAgcHJlcGFyZV9jcnRjKGRhdGEsIHBp cGUsIG91dHB1dCk7Cj4+ICsKPj4gK8KgwqDCoCBpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRpc3BsYXkt PmRybV9mZCwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIERSTV9GT1JNQVRfWFJHQjg4ODgsIExPQ0FMX0k5MTVfRk9STUFU X01PRF9YX1RJTEVELAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC4wLCAuMCwg MS4sIGJnX2ZiKTsKPj4gKwo+PiArwqDCoMKgIGlndF9jcmVhdGVfY29sb3JfZmIoZGlzcGxheS0+ ZHJtX2ZkLCAyNTYsIDI1NiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIERSTV9GT1JNQVRfQVJHQjg4ODgsIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLjAsIC4wLCAxLiwgYmdfY3Vyc29yX2ZiKTsK Pj4gKwo+PiArwqDCoMKgIGlndF9jcmVhdGVfY29sb3JfZmIoZGlzcGxheS0+ZHJtX2ZkLCAyNTYs IDI1NiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERSTV9GT1JN QVRfQVJHQjg4ODgsIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgLjAsIC4wLCAuMCwgYmxhY2tfY3Vyc29yX2ZiKTsKPj4gKwo+PiAr wqDCoMKgIGlndF9jcmVhdGVfZmIoZGlzcGxheS0+ZHJtX2ZkLCAyNTYsIDI1NiwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvcm1hdCwgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lfVElM RUQsIGNsaXBfZmIpOwo+PiArCj4+ICvCoMKgwqAgLyogRHJhdyB0aGUgRkIgdGhhdCB3aWxsIGJl IHVzZWQgZm9yIGNsaXBwaW5nIHRoZSBjaHJvbWEgc3VicGl4ZWwgdGVzdC4gKi8KPj4gK8KgwqDC oCBjciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRpc3BsYXktPmRybV9mZCwgY2xpcF9mYik7Cj4+ICsK Pj4gK8KgwqDCoCBpZ3RfcGFpbnRfY29sb3IoY3IsIDAsIDAsIGNsaXBfZmItPndpZHRoLCBjbGlw X2ZiLT5oZWlnaHQsIDEuLCAwLiwgMC4pOwo+PiArwqDCoMKgIGlndF9wYWludF9jb2xvcihjciwg MiwgMiwgY2xpcF9mYi0+d2lkdGggLSA0LCBjbGlwX2ZiLT5oZWlnaHQgLSA0LCAwLiwgMS4sIDEu KTsKPj4gK8KgwqDCoCBpZ3RfcGFpbnRfY29sb3IoY3IsIDQsIDQsIGNsaXBfZmItPndpZHRoIC0g OCwgY2xpcF9mYi0+aGVpZ2h0IC0gOCwgLjc1LCAuNzUsIDEuKTsKPj4gKwo+PiArwqDCoMKgIC8q IFdoaXRlIGRvdHMgaW4gdGhlIGNvcm5lcnMuICovCj4+ICvCoMKgwqAgaWd0X3BhaW50X2NvbG9y KGNyLCAwLCAwLCA2LCA2LCAxLiwgMS4sIDEuKTsKPj4gK8KgwqDCoCBpZ3RfcGFpbnRfY29sb3Io Y3IsIGNsaXBfZmItPndpZHRoIC0gNiwgMCwgNiwgNiwgMS4sIDEuLCAxLik7Cj4+ICvCoMKgwqAg aWd0X3BhaW50X2NvbG9yKGNyLCAwLCBjbGlwX2ZiLT5oZWlnaHQgLSA2LCA2LCA2LCAxLiwgMS4s IDEuKTsKPj4gK8KgwqDCoCBpZ3RfcGFpbnRfY29sb3IoY3IsIGNsaXBfZmItPndpZHRoIC0gNiwg Y2xpcF9mYi0+aGVpZ2h0IC0gNiwgNiwgNiwgMS4sIDEuLCAxLik7Cj4+ICsKPj4gK8KgwqDCoCBp Z3RfcHV0X2NhaXJvX2N0eChkaXNwbGF5LT5kcm1fZmQsIGNsaXBfZmIsIGNyKTsKPj4gKwo+PiAr wqDCoMKgIGlndF9waXBlX2NyY19zdGFydChkYXRhLT5waXBlX2NyYyk7Cj4+ICsKPj4gK8KgwqDC oCBpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksIGJnX2ZiKTsKPj4gK8KgwqDCoCBmb3JfZWFjaF9w bGFuZV9vbl9waXBlKGRpc3BsYXksIHBpcGUsIHBsYW5lKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBz dHJ1Y3QgaWd0X2ZiICpjdXJzb3JfZmIgPSBwbGFuZSA9PSBwcmltYXJ5ID8gYmxhY2tfY3Vyc29y X2ZiIDogYmdfY3Vyc29yX2ZiOwo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X2NyY190IHJlZl9jcmM7 Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICghcGxhbmVfc3VwcG9ydHNfZm9ybWF0KHBsYW5l LCBmb3JtYXQpIHx8IHBsYW5lID09IGN1cnNvcikKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Y29udGludWU7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xp cF9wbGFuZV93aXRoX2N1cnNvcihkYXRhLCBwbGFuZSwgY2xpcF9mYiwgY3Vyc29yLCBjdXJzb3Jf ZmIsICZyZWZfY3JjLCA2MyArIGNsaXBfZmItPndpZHRoLCA2NCk7Cj4+ICvCoMKgwqDCoMKgwqDC oCByZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3JpZ2h0KGRhdGEsIElHVF9S T1RBVElPTl8wLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOwo+PiArwqDCoMKgwqDCoMKgwqAg cmV0IHw9IHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9yaWdodChkYXRhLCBJR1RfUk9U QVRJT05fOTAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3JpZ2h0KGRhdGEsIElHVF9ST1RB VElPTl8xODAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3BsYW5lX3JpZ2h0KGRhdGEsIElHVF9ST1RB VElPTl8yNzAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDC oMKgIHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV93aXRoX2N1cnNvcihkYXRhLCBwbGFu ZSwgY2xpcF9mYiwgY3Vyc29yLCBjdXJzb3JfZmIsICZyZWZfY3JjLCA2NCwgNjMgKyBjbGlwX2Zi LT5oZWlnaHQpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0IHw9IHl1dl9jaHJvbWFfc3VicGl4ZWxf Y2xpcF9wbGFuZV9ib3R0b20oZGF0YSwgSUdUX1JPVEFUSU9OXzAsIHBsYW5lLCBjbGlwX2ZiLCAm cmVmX2NyYyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9j bGlwX3BsYW5lX2JvdHRvbShkYXRhLCBJR1RfUk9UQVRJT05fOTAsIHBsYW5lLCBjbGlwX2ZiLCAm cmVmX2NyYyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9j bGlwX3BsYW5lX2JvdHRvbShkYXRhLCBJR1RfUk9UQVRJT05fMTgwLCBwbGFuZSwgY2xpcF9mYiwg JnJlZl9jcmMpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0IHw9IHl1dl9jaHJvbWFfc3VicGl4ZWxf Y2xpcF9wbGFuZV9ib3R0b20oZGF0YSwgSUdUX1JPVEFUSU9OXzI3MCwgcGxhbmUsIGNsaXBfZmIs ICZyZWZfY3JjKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgeXV2X2Nocm9tYV9zdWJwaXhlbF9j bGlwX3BsYW5lX3dpdGhfY3Vyc29yKGRhdGEsIHBsYW5lLCBjbGlwX2ZiLCBjdXJzb3IsIGN1cnNv cl9mYiwgJnJlZl9jcmMsIDY1IC0gY3Vyc29yX2ZiLT53aWR0aCwgNjQpOwo+PiArwqDCoMKgwqDC oMKgwqAgcmV0IHw9IHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9sZWZ0KGRhdGEsIElH VF9ST1RBVElPTl8wLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOwo+PiArwqDCoMKgwqDCoMKg wqAgcmV0IHw9IHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9sZWZ0KGRhdGEsIElHVF9S T1RBVElPTl85MCwgcGxhbmUsIGNsaXBfZmIsICZyZWZfY3JjKTsKPj4gK8KgwqDCoMKgwqDCoMKg IHJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBfcGxhbmVfbGVmdChkYXRhLCBJR1RfUk9U QVRJT05fMTgwLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMpOwo+PiArwqDCoMKgwqDCoMKgwqAg cmV0IHw9IHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV9sZWZ0KGRhdGEsIElHVF9ST1RB VElPTl8yNzAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2NyYyk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDC oMKgIHl1dl9jaHJvbWFfc3VicGl4ZWxfY2xpcF9wbGFuZV93aXRoX2N1cnNvcihkYXRhLCBwbGFu ZSwgY2xpcF9mYiwgY3Vyc29yLCBjdXJzb3JfZmIsICZyZWZfY3JjLCA2NCwgNjUgLSBjdXJzb3Jf ZmItPmhlaWdodCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhl bF9jbGlwX3BsYW5lX3RvcChkYXRhLCBJR1RfUk9UQVRJT05fMCwgcGxhbmUsIGNsaXBfZmIsICZy ZWZfY3JjKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2Ns aXBfcGxhbmVfdG9wKGRhdGEsIElHVF9ST1RBVElPTl85MCwgcGxhbmUsIGNsaXBfZmIsICZyZWZf Y3JjKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldCB8PSB5dXZfY2hyb21hX3N1YnBpeGVsX2NsaXBf cGxhbmVfdG9wKGRhdGEsIElHVF9ST1RBVElPTl8xODAsIHBsYW5lLCBjbGlwX2ZiLCAmcmVmX2Ny Yyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgfD0geXV2X2Nocm9tYV9zdWJwaXhlbF9jbGlwX3Bs YW5lX3RvcChkYXRhLCBJR1RfUk9UQVRJT05fMjcwLCBwbGFuZSwgY2xpcF9mYiwgJnJlZl9jcmMp Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBSZXNldCB0byBkZWZhdWx0cyAqLwo+PiArwqDC oMKgwqDCoMKgwqAgaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgMCwgMCk7Cj4+ICvCoMKg wqDCoMKgwqDCoCBpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCBJR1RfUk9UQVRJT05fMCk7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBwbGFuZSA9PSBwcmlt YXJ5ID8gYmdfZmIgOiBOVUxMKTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBpZ3RfcmVx dWlyZV9mKHJldCwgIkNvdWxkIG5vdCB0ZXN0IHN1YnBpeGVsIGNsaXBwaW5nIGluIGFueSBjb3Ju ZXJcbiIpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBydW5fdGVzdHNfZm9yX3BpcGUoZGF0 YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29u c3QgY2hhciAqZnN0ciwgdW5zaWduZWQgaW50IGZvcm1hdCkKPiBBcmd1bWVudCBhbGlnbm1lbnQ/ Cj4+ICt7Cj4+ICvCoMKgwqAgaWd0X291dHB1dF90ICpvdXRwdXQ7Cj4+ICvCoMKgwqAgaWd0X2Rp c3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Owo+PiArCj4+ICvCoMKgwqAgaWd0X3N1 YnRlc3RfZ3JvdXAgewo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X2ZpeHR1cmUgewo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpZ3RfZGlzcGxheV9yZXF1aXJlX291dHB1dF9vbl9waXBlKGRpc3Bs YXksIHBpcGUpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3RfcmVxdWlyZShpZ3RfZmJf c3VwcG9ydGVkX2Zvcm1hdChmb3JtYXQpKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0 X3JlcXVpcmUocGlwZV9zdXBwb3J0c19mb3JtYXQoZGlzcGxheSwgcGlwZSwgZm9ybWF0KSk7Cj4+ ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9zdWJ0ZXN0X2Yo InBpcGUtJXMtJXMtcmdiLXN3aXRjaCIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGttc3Rl c3RfcGlwZV9uYW1lKHBpcGUpLCBmc3RyKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3Jf ZWFjaF92YWxpZF9vdXRwdXRfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBvdXRwdXQpCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeXV2X3JnYl9zd2l0Y2goZGF0YSwgcGlwZSwgb3V0 cHV0LCBmYWxzZSwgZm9ybWF0KTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X3N1YnRlc3Rf ZigicGlwZS0lcy0lcy1yZ2Itc2NhbGVkLXN3aXRjaCIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpLCBmc3RyKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBmb3JfZWFjaF92YWxpZF9vdXRwdXRfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBvdXRwdXQp Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeXV2X3JnYl9zd2l0Y2goZGF0YSwg cGlwZSwgb3V0cHV0LCB0cnVlLCBmb3JtYXQpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3Rf c3VidGVzdF9mKCJwaXBlLSVzLSVzLXZhbGlkLXdpZHRoIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAga21zdGVzdF9waXBlX25hbWUocGlwZSksIGZzdHIpCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGZvcl9lYWNoX3ZhbGlkX291dHB1dF9vbl9waXBlKGRpc3BsYXksIHBpcGUsIG91dHB1 dCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB5dXZfdmFsaWRfd2lkdGgoZGF0 YSwgcGlwZSwgb3V0cHV0LCBmb3JtYXQpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3Rfc3Vi dGVzdF9mKCJwaXBlLSVzLSVzLWNyb3Atc2NhbGUtYnVnIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAga21zdGVzdF9waXBlX25hbWUocGlwZSksIGZzdHIpCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGZvcl9lYWNoX3ZhbGlkX291dHB1dF9vbl9waXBlKGRpc3BsYXksIHBpcGUsIG91dHB1 dCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB5dXZfY3JvcF9zY2FsZV9idWco ZGF0YSwgcGlwZSwgb3V0cHV0LCBmb3JtYXQpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3Rf c3VidGVzdF9mKCJwaXBlLSVzLSVzLWNocm9tYS1zdWJwaXhlbC1jbGlwIiwKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAga21zdGVzdF9waXBlX25hbWUocGlwZSksIGZzdHIpCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGZvcl9lYWNoX3ZhbGlkX291dHB1dF9vbl9waXBlKGRpc3BsYXksIHBp cGUsIG91dHB1dCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB5dXZfY2hyb21h X3N1YnBpeGVsX2NsaXAoZGF0YSwgcGlwZSwgb3V0cHV0LCBmb3JtYXQpOwo+PiArwqDCoMKgIH0K Pj4gK30KPj4gKwo+PiAraWd0X21haW4KPj4gK3sKPj4gK8KgwqDCoCBkYXRhX3QgZGF0YSA9IHt9 Owo+PiArwqDCoMKgIGVudW0gcGlwZSBwaXBlOwo+PiArCj4+ICvCoMKgwqAgaWd0X3NraXBfb25f c2ltdWxhdGlvbigpOwo+PiArCj4+ICvCoMKgwqAgaWd0X2ZpeHR1cmUgewo+PiArwqDCoMKgwqDC oMKgwqAgZGF0YS5kaXNwbGF5LmRybV9mZCA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIoRFJJVkVS X0FOWSk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21v ZGUoKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9kaXNwbGF5X3JlcXVpcmUoJmRhdGEuZGlzcGxh eSwgZGF0YS5kaXNwbGF5LmRybV9mZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZ3RfcmVxdWlyZShk YXRhLmRpc3BsYXkuaXNfYXRvbWljKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9yZXF1aXJlX3Bp cGVfY3JjKGRhdGEuZGlzcGxheS5kcm1fZmQpOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKg IGZvcl9lYWNoX3BpcGVfc3RhdGljKHBpcGUpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHJ1bl90ZXN0 c19mb3JfcGlwZSgmZGF0YSwgcGlwZSwgIk5WMTIiLCBEUk1fRk9STUFUX05WMTIpOwo+PiArwqDC oMKgwqDCoMKgwqAgcnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRhLCBwaXBlLCAiTlYxNiIsIERSTV9G T1JNQVRfTlYxNik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBydW5fdGVzdHNfZm9yX3BpcGUoJmRhdGEs IHBpcGUsICJOVjIxIiwgRFJNX0ZPUk1BVF9OVjIxKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJ1bl90 ZXN0c19mb3JfcGlwZSgmZGF0YSwgcGlwZSwgIk5WNjEiLCBEUk1fRk9STUFUX05WNjEpOwo+PiAr wqDCoMKgwqDCoMKgwqAgcnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRhLCBwaXBlLCAiWVVWNDIwIiwg RFJNX0ZPUk1BVF9ZVVY0MjApOwo+PiArwqDCoMKgwqDCoMKgwqAgcnVuX3Rlc3RzX2Zvcl9waXBl KCZkYXRhLCBwaXBlLCAiWVVWNDIyIiwgRFJNX0ZPUk1BVF9ZVVY0MjIpOwo+PiArwqDCoMKgwqDC oMKgwqAgcnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRhLCBwaXBlLCAiWVZVNDIwIiwgRFJNX0ZPUk1B VF9ZVlU0MjApOwo+PiArwqDCoMKgwqDCoMKgwqAgcnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRhLCBw aXBlLCAiWVZVNDIyIiwgRFJNX0ZPUk1BVF9ZVlU0MjIpOwo+PiArwqDCoMKgwqDCoMKgwqAgcnVu X3Rlc3RzX2Zvcl9waXBlKCZkYXRhLCBwaXBlLCAiUDAxMCIsIERSTV9GT1JNQVRfUDAxMCk7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBydW5fdGVzdHNfZm9yX3BpcGUoJmRhdGEsIHBpcGUsICJQMDEyIiwg RFJNX0ZPUk1BVF9QMDEyKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJ1bl90ZXN0c19mb3JfcGlwZSgm ZGF0YSwgcGlwZSwgIlAwMTYiLCBEUk1fRk9STUFUX1AwMTYpOwo+PiArwqDCoMKgwqDCoMKgwqAg cnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRhLCBwaXBlLCAiWVVZViIsIERSTV9GT1JNQVRfWVVZVik7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBydW5fdGVzdHNfZm9yX3BpcGUoJmRhdGEsIHBpcGUsICJZVllV IiwgRFJNX0ZPUk1BVF9ZVllVKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJ1bl90ZXN0c19mb3JfcGlw ZSgmZGF0YSwgcGlwZSwgIlVZVlkiLCBEUk1fRk9STUFUX1VZVlkpOwo+PiArwqDCoMKgwqDCoMKg wqAgcnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRhLCBwaXBlLCAiVllVWSIsIERSTV9GT1JNQVRfVllV WSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBydW5fdGVzdHNfZm9yX3BpcGUoJmRhdGEsIHBpcGUsICJY WVVWODg4OCIsIERSTV9GT1JNQVRfWFlVVjg4ODgpOwo+IE1hYXJ0ZW4sIEkgZG91YnQgaGVyZS4u c28gd2UgbmVlZCB0byBzaW1wbHkgYWRkIFlVViBmb3JtYXQgaGVyZSBhbmQgbm8gbmVlZCB0byBt YWtlIGFueSBvdGhlciBjaGFuZ2UgaW4ga21zX3l1diBpZ3Q/CgpZZXMgdGhhdCdzIHRoZSBpZGVh LiBGb3IgZGVidWdnaW5nIHlvdSBjYW4gZXZlbiB1c2UgWFJHQjg4ODgsIGlmIHlvdSdyZSBub3Qg c3VyZSB3aGV0aGVyIHRoZSBpc3N1ZSBpcyBZVVYgc3BlY2lmaWMuCgpNb3N0IHRlc3RzIGFyZSBh Ym91dCB2YXJpb3VzIGNvcm5lciBjYXNlcyB3aXRoIFlVViBmb3JtYXRzLCBsaWtlIHVwc2NhbGlu ZyBhbiBvZGQgbnVtYmVyIG9mIHBpeGVscyB3aGljaCBtYXkgZmFpbCBvbiBpOTE1IG52MTIgZm9y IGV4YW1wbGUsIGJlY2F1c2UgaXQgdXNlcyAyeDIgcGl4ZWxzLgoKSW4gdGhvc2UgY2FzZXMgaXQg c2tpcHMsIGlmIGl0IGRvZXNuJ3Qgc2tpcCB3ZSBjb21wYXJlIHVuc2NhbGVkIHZzIHNjYWxlZCwg YW5kIHVuY2xpcHBlZCAod2l0aCBjdXJzb3IgaGlkaW5nIDEgbGluZS9yb3cpIHZzIGNsaXBwZWQu Cgp+TWFhcnRlbgoKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBpZ3RfZml4dHVyZSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBpZ3RfZGlzcGxheV9maW5pKCZkYXRhLmRpc3BsYXkpOwo+PiArwqDC oMKgwqDCoMKgwqAgY2xvc2UoZGF0YS5kaXNwbGF5LmRybV9mZCk7Cj4+ICvCoMKgwqAgfQo+PiAr fQo+PiBkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5idWlsZAo+ PiBpbmRleCAwZjEyZGYyNmQ5ZmIuLmI0NGI1YTdjNGM0ZiAxMDA2NDQKPj4gLS0tIGEvdGVzdHMv bWVzb24uYnVpbGQKPj4gKysrIGIvdGVzdHMvbWVzb24uYnVpbGQKPj4gQEAgLTYwLDYgKzYwLDcg QEAgdGVzdF9wcm9ncyA9IFsKPj4gwqDCoMKgwqDCoCAna21zX3VuaXZlcnNhbF9wbGFuZScsCj4+ IMKgwqDCoMKgwqAgJ2ttc192YmxhbmsnLAo+PiDCoMKgwqDCoMKgICdrbXNfdnJyJywKPj4gK8Kg wqDCoCAna21zX3l1dicsCj4+IMKgwqDCoMKgwqAgJ21ldGFfdGVzdCcsCj4+IMKgwqDCoMKgwqAg J3BlcmYnLAo+PiDCoMKgwqDCoMKgICdwbV9iYWNrbGlnaHQnLAo+CgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3Qt ZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=