From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9EB4E6E576 for ; Wed, 7 Feb 2018 10:37:54 +0000 (UTC) Message-ID: <1517999871.14464.3.camel@intel.com> From: Mika Kahola Date: Wed, 07 Feb 2018 12:37:51 +0200 In-Reply-To: References: <20180201153914.74639-1-maarten.lankhorst@linux.intel.com> <20180201153914.74639-10-maarten.lankhorst@linux.intel.com> <1517993743.14464.1.camel@intel.com> Mime-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t 9/9] tests/kms_rotation_crc: Perform lazy cleanup and require atomic. List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: mika.kahola@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Maarten Lankhorst , igt-dev@lists.freedesktop.org List-ID: T24gV2VkLCAyMDE4LTAyLTA3IGF0IDEwOjQ2ICswMTAwLCBNYWFydGVuIExhbmtob3JzdCB3cm90 ZToKPiBPcCAwNy0wMi0xOCBvbSAwOTo1NSBzY2hyZWVmIE1pa2EgS2Fob2xhOgo+ID4gCj4gPiBP biBUaHUsIDIwMTgtMDItMDEgYXQgMTY6MzkgKzAxMDAsIE1hYXJ0ZW4gTGFua2hvcnN0IHdyb3Rl Ogo+ID4gPiAKPiA+ID4gVGhpcyB3b24ndCBjbGVhbiB1cCByZXNvdXJjZXMgYmV0d2VlbiBzdWJ0 ZXN0cywgc28gaWYgc3VidGVzdHMKPiA+ID4gZmFpbAo+ID4gPiB0aGUgbmV4dCBzdWJ0ZXN0IHdp bGwgY2xlYW4gdXAgZXZlcnl0aGluZy4gVGhpcyBhbGxvd3MgYWxsCj4gPiA+IHN1YnRlc3RzCj4g PiA+IGV2ZW4gaWYgb25lIGZhaWxzLgo+ID4gPiAKPiA+ID4gU2lnbmVkLW9mZi1ieTogTWFhcnRl biBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmMKPiA+ID4gb20+Cj4g PiA+IC0tLQo+ID4gPiDCoHRlc3RzL2ttc19yb3RhdGlvbl9jcmMuYyB8IDIxMyArKysrKysrKysr KysrKystLS0tLS0tLS0tLS0tLS0tCj4gPiA+IC0tLS0KPiA+ID4gLS0tLS0tLS0tLS0tCj4gPiA+ IMKgMSBmaWxlIGNoYW5nZWQsIDY2IGluc2VydGlvbnMoKyksIDE0NyBkZWxldGlvbnMoLSkKPiA+ ID4gCj4gPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9rbXNfcm90YXRpb25fY3JjLmMgYi90ZXN0cy9r bXNfcm90YXRpb25fY3JjLmMKPiA+ID4gaW5kZXggNTJhODVmYjYyZjlmLi5hMGZiNzM0ZDAyZjYg MTAwNjQ0Cj4gPiA+IC0tLSBhL3Rlc3RzL2ttc19yb3RhdGlvbl9jcmMuYwo+ID4gPiArKysgYi90 ZXN0cy9rbXNfcm90YXRpb25fY3JjLmMKPiA+ID4gQEAgLTMzLDcgKzMzLDYgQEAgdHlwZWRlZiBz dHJ1Y3Qgewo+ID4gPiDCoAlzdHJ1Y3QgaWd0X2ZiIGZiOwo+ID4gPiDCoAlzdHJ1Y3QgaWd0X2Zi IGZiX3JlZmVyZW5jZTsKPiA+ID4gwqAJc3RydWN0IGlndF9mYiBmYl91bnJvdGF0ZWQ7Cj4gPiA+ IC0Jc3RydWN0IGlndF9mYiBmYl9tb2Rlc2V0Owo+ID4gPiDCoAlzdHJ1Y3QgaWd0X2ZiIGZiX2Zs aXA7Cj4gPiA+IMKgCWlndF9jcmNfdCByZWZfY3JjOwo+ID4gPiDCoAlpZ3RfY3JjX3QgZmxpcF9j cmM7Cj4gPiA+IEBAIC0xMjIsNjggKzEyMSw1MCBAQCBwYWludF9zcXVhcmVzKGRhdGFfdCAqZGF0 YSwgaWd0X3JvdGF0aW9uX3QKPiA+ID4gcm90YXRpb24sCj4gPiA+IMKgCWlndF9wdXRfY2Fpcm9f Y3R4KGRhdGEtPmdmeF9mZCwgZmIsIGNyKTsKPiA+ID4gwqB9Cj4gPiA+IMKgCj4gPiA+IC1zdGF0 aWMgdm9pZCBwcmVwYXJlX2NydGMoZGF0YV90ICpkYXRhLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwK PiA+ID4gZW51bQo+ID4gPiBwaXBlIHBpcGUsCj4gPiA+IC0JCQnCoGlndF9wbGFuZV90ICpwbGFu ZSwgZW51bQo+ID4gPiBpZ3RfY29tbWl0X3N0eWxlCj4gPiA+IGNvbW1pdCkKPiA+ID4gK3N0YXRp YyB2b2lkIHJlbW92ZV9mYnMoZGF0YV90ICpkYXRhKQo+ID4gPiDCoHsKPiA+ID4gLQlkcm1Nb2Rl TW9kZUluZm8gKm1vZGU7Cj4gPiA+IC0JdW5zaWduZWQgaW50IHcsIGg7Cj4gPiA+IC0JdWludDY0 X3QgdGlsaW5nID0gZGF0YS0+b3ZlcnJpZGVfdGlsaW5nID86Cj4gPiA+IExPQ0FMX0RSTV9GT1JN QVRfTU9EX05PTkU7Cj4gPiA+IC0JdWludDMyX3QgcGl4ZWxfZm9ybWF0ID0gZGF0YS0+b3ZlcnJp ZGVfZm10ID86Cj4gPiA+IERSTV9GT1JNQVRfWFJHQjg4ODg7Cj4gPiA+IC0JaWd0X2Rpc3BsYXlf dCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Owo+ID4gPiAtCWlndF9wbGFuZV90ICpwcmltYXJ5 ID0gaWd0X291dHB1dF9nZXRfcGxhbmVfdHlwZShvdXRwdXQsCj4gPiA+IERSTV9QTEFORV9UWVBF X1BSSU1BUlkpOwo+ID4gPiArCWlmIChkYXRhLT5mYi5mYl9pZCkKPiA+ID4gKwkJaWd0X3JlbW92 ZV9mYihkYXRhLT5nZnhfZmQsICZkYXRhLT5mYik7Cj4gPiA+IMKgCj4gPiA+IC0JaWd0X291dHB1 dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOwo+ID4gPiAtCWlndF9wbGFuZV9zZXRfcm90YXRpb24o cGxhbmUsIElHVF9ST1RBVElPTl8wKTsKPiA+ID4gKwlpZiAoZGF0YS0+ZmJfcmVmZXJlbmNlLmZi X2lkKQo+ID4gPiArCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmdmeF9mZCwgJmRhdGEtCj4gPiA+ID5m Yl9yZWZlcmVuY2UpOwo+ID4gPiDCoAo+ID4gPiAtCS8qIGNyZWF0ZSB0aGUgcGlwZV9jcmMgb2Jq ZWN0IGZvciB0aGlzIHBpcGUgKi8KPiA+ID4gLQlpZ3RfcGlwZV9jcmNfZnJlZShkYXRhLT5waXBl X2NyYyk7Cj4gPiA+IC0JZGF0YS0+cGlwZV9jcmMgPSBpZ3RfcGlwZV9jcmNfbmV3KGRhdGEtPmdm eF9mZCwgcGlwZSwKPiA+ID4gSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOwo+ID4gPiAtCj4g PiA+IC0JbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKPiA+ID4gKwlpZiAoZGF0 YS0+ZmJfdW5yb3RhdGVkLmZiX2lkKQo+ID4gPiArCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmdmeF9m ZCwgJmRhdGEtCj4gPiA+ID5mYl91bnJvdGF0ZWQpOwo+ID4gPiDCoAo+ID4gPiAtCXcgPSBtb2Rl LT5oZGlzcGxheTsKPiA+ID4gLQloID0gbW9kZS0+dmRpc3BsYXk7Cj4gPiA+IC0KPiA+ID4gLQlp Z3RfY3JlYXRlX2ZiKGRhdGEtPmdmeF9mZCwgdywgaCwgcGl4ZWxfZm9ybWF0LCB0aWxpbmcsCj4g PiA+ICZkYXRhLT5mYl9tb2Rlc2V0KTsKPiA+ID4gKwlpZiAoZGF0YS0+ZmJfZmxpcC5mYl9pZCkK PiA+ID4gKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5nZnhfZmQsICZkYXRhLT5mYl9mbGlwKTsKPiA+ ID4gwqAKPiA+ID4gLQkvKgo+ID4gPiAtCcKgKiBXaXRoIGlndF9kaXNwbGF5X2NvbW1pdDIgYW5k IENPTU1JVF9VTklWRVJTQUwsIHdlCj4gPiA+IGNhbGwKPiA+ID4ganVzdCB0aGUKPiA+ID4gLQnC oCogc2V0cGxhbmUgd2l0aG91dCBhIG1vZGVzZXQuIFNvLCB0byBiZSBhYmxlIHRvIGNhbGwKPiA+ ID4gLQnCoCogaWd0X2Rpc3BsYXlfY29tbWl0IGFuZCB1bHRpbWF0ZWx5IHNldGNydGMgdG8gZG8g dGhlCj4gPiA+IGZpcnN0Cj4gPiA+IG1vZGVzZXQsCj4gPiA+IC0JwqAqIHdlIGNyZWF0ZSBhbiBm YiBjb3ZlcmluZyB0aGUgY3J0YyBhbmQgY2FsbCBjb21taXQKPiA+ID4gLQnCoCoKPiA+ID4gLQnC oCogSXQncyBhbHNvIGEgZ29vZCBpZGVhIHRvIHNldCBhIHByaW1hcnkgZmIgb24gdGhlCj4gPiA+ IHByaW1hcnkKPiA+ID4gcGxhbmUKPiA+ID4gLQnCoCogcmVnYXJkbGVzcywgdG8gZm9yY2UgYSB1 bmRlcnJ1biB3aGVuIHdhdGVybWFya3MgYXJlCj4gPiA+IGFsbG9jYXRlZAo+ID4gPiAtCcKgKiBp bmNvcnJlY3RseSBmb3Igb3RoZXIgcGxhbmVzLgo+ID4gPiAtCcKgKi8KPiA+ID4gLQlpZ3RfcGxh bmVfc2V0X2ZiKHByaW1hcnksICZkYXRhLT5mYl9tb2Rlc2V0KTsKPiA+ID4gKwlkYXRhLT5mYl9m bGlwLmZiX2lkID0gZGF0YS0+ZmJfcmVmZXJlbmNlLmZiX2lkID0gZGF0YS0KPiA+ID4gPiAKPiA+ ID4gPiBmYl91bnJvdGF0ZWQuZmJfaWQgPSBkYXRhLT5mYi5mYl9pZCA9IDA7Cj4gPiA+ICt9Cj4g PiA+IMKgCj4gPiA+IC0JaWYgKGNvbW1pdCA8IENPTU1JVF9BVE9NSUMpIHsKPiA+ID4gLQkJaWd0 X3BsYW5lX2NsZWFyX3Byb3BfY2hhbmdlZChwcmltYXJ5LAo+ID4gPiBJR1RfUExBTkVfUk9UQVRJ T04pOwo+ID4gPiAtCQlpZ3RfZGlzcGxheV9jb21taXQoZGlzcGxheSk7Cj4gPiA+ICtzdGF0aWMg dm9pZCBjbGVhbnVwX2NydGMoZGF0YV90ICpkYXRhKQo+ID4gPiArewo+ID4gPiArCWlndF9kaXNw bGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKPiA+ID4gwqAKPiA+ID4gLQkJaWYgKHBs YW5lLT50eXBlID09IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpCj4gPiA+IC0JCQlpZ3RfcGxhbmVf c2V0X3Byb3BfY2hhbmdlZChwcmltYXJ5LAo+ID4gPiBJR1RfUExBTkVfUk9UQVRJT04pOwo+ID4g PiAtCX0KPiA+ID4gKwlpZ3RfcGlwZV9jcmNfZnJlZShkYXRhLT5waXBlX2NyYyk7Cj4gPiA+ICsJ ZGF0YS0+cGlwZV9jcmMgPSBOVUxMOwo+ID4gPiDCoAo+ID4gPiAtCWlndF9wbGFuZV9zZXRfZmIo cGxhbmUsIE5VTEwpOwo+ID4gPiArCXJlbW92ZV9mYnMoZGF0YSk7Cj4gPiA+IMKgCj4gPiA+IC0J aWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBjb21taXQpOwo+ID4gPiArCWlndF9kaXNwbGF5 X3Jlc2V0KGRpc3BsYXkpOwo+ID4gPiDCoH0KPiA+ID4gwqAKPiA+ID4gLXN0YXRpYyB2b2lkIHJl bW92ZV9mYnMoZGF0YV90ICpkYXRhKQo+ID4gPiArc3RhdGljIHZvaWQgcHJlcGFyZV9jcnRjKGRh dGFfdCAqZGF0YSwgaWd0X291dHB1dF90ICpvdXRwdXQsCj4gPiA+IGVudW0KPiA+ID4gcGlwZSBw aXBlLAo+ID4gPiArCQkJwqBpZ3RfcGxhbmVfdCAqcGxhbmUpCj4gPiA+IMKgewo+ID4gPiAtCWlm ICghZGF0YS0+ZmIuZmJfaWQpCj4gPiA+IC0JCXJldHVybjsKPiA+ID4gKwlpZ3RfZGlzcGxheV90 ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7Cj4gPiA+IMKgCj4gPiA+IC0JaWd0X3JlbW92ZV9m YihkYXRhLT5nZnhfZmQsICZkYXRhLT5mYik7Cj4gPiA+IC0JaWd0X3JlbW92ZV9mYihkYXRhLT5n ZnhfZmQsICZkYXRhLT5mYl9yZWZlcmVuY2UpOwo+ID4gPiAtCWlndF9yZW1vdmVfZmIoZGF0YS0+ Z2Z4X2ZkLCAmZGF0YS0+ZmJfdW5yb3RhdGVkKTsKPiA+ID4gKwljbGVhbnVwX2NydGMoZGF0YSk7 Cj4gPiA+IMKgCj4gPiA+IC0JaWYgKGRhdGEtPmZiX2ZsaXAuZmJfaWQpCj4gPiA+IC0JCWlndF9y ZW1vdmVfZmIoZGF0YS0+Z2Z4X2ZkLCAmZGF0YS0+ZmJfZmxpcCk7Cj4gPiA+ICsJaWd0X291dHB1 dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOwo+ID4gPiArCWlndF9wbGFuZV9zZXRfcm90YXRpb24o cGxhbmUsIElHVF9ST1RBVElPTl8wKTsKPiA+ID4gKwo+ID4gPiArCS8qIGNyZWF0ZSB0aGUgcGlw ZV9jcmMgb2JqZWN0IGZvciB0aGlzIHBpcGUgKi8KPiA+ID4gKwlpZ3RfcGlwZV9jcmNfZnJlZShk YXRhLT5waXBlX2NyYyk7Cj4gPiA+ICsJZGF0YS0+cGlwZV9jcmMgPSBpZ3RfcGlwZV9jcmNfbmV3 KGRhdGEtPmdmeF9mZCwgcGlwZSwKPiA+ID4gSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOwo+ ID4gPiDCoAo+ID4gPiAtCWRhdGEtPmZiX2ZsaXAuZmJfaWQgPSBkYXRhLT5mYi5mYl9pZCA9IDA7 Cj4gPiA+ICsJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKPiA+ ID4gwqB9Cj4gPiA+IMKgCj4gPiA+IMKgZW51bSByZWN0YW5nbGVfdHlwZSB7Cj4gPiA+IEBAIC0y MDYsNyArMTg3LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9mYnMoZGF0YV90ICpkYXRhLAo+ID4g PiBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKPiA+ID4gwqAKPiA+ID4gwqAJaWYgKGRhdGEtPmZiLmZi X2lkKSB7Cj4gPiA+IMKgCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKPiA+ID4gLQkJ aWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBkaXNwbGF5LT5pc19hdG9taWMKPiA+ID4gPwo+ ID4gPiBDT01NSVRfQVRPTUlDIDogQ09NTUlUX1VOSVZFUlNBTCk7Cj4gPiA+ICsJCWlndF9kaXNw bGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7Cj4gPiBTaG91bGQgd2Uga2VlcCB0 aGUgbGVnYWN5IGNvbW1pdCBoZXJlIG9yIHNob3VsZCB3ZSBoYXZlIGEKPiA+IHJlcXVpcmVtZW50 Cj4gPiBmb3IgdGhpcyB0ZXN0IHRoYXQgaXQgcnVucyBvbmx5IGF0b21pYz8KPiBIZXksCj4gCj4g T25seSB0aGUgMTgwwrAgdGVzdHMgd29uJ3QgcnVuIG9uIGdlbjQgd2l0aG91dAo+IGk5MTUubnVj bGVhcl9wYWdlZmxpcD0xLCBhdCBsZWFzdCB1bnRpbCBnZW4zIHdtIHBhdGNoIHNlcmllcyBpcwo+ IGZpbmFsbHkgbWVyZ2VkLiBCdXQgdGhleSBhcmUgbmV2ZXIgcnVuIGluIENJIChzaGFyZHMpIGFu eXdheSAuCj4gU28gaW4gcHJhY3RpY2UgdGhlIHJlcXVpcmVtZW50IGRvZXNuJ3QgbWF0dGVyIGFu ZCBpZiB3ZSBkbyBjYXJlIHRoZW4KPiB3ZSBzaG91bGQgZ2V0IHRob3NlIGluIGZpbmFsbHkuLi4K Ck9rLiBMZXQncyBkaXNjYXJkIHRoaXMuIE90aGVyd2lzZSwgdGhlIHBhdGNoIGxvb2tzIGdvb2Qu CgpSZXZpZXdlZC1ieTogTWlrYSBLYWhvbGEgPG1pa2Eua2Fob2xhQGludGVsLmNvbT4KCj4gCj4g fk1hYXJ0ZW4KPiAKPiA+IAo+ID4gPiAKPiA+ID4gwqAKPiA+ID4gwqAJCXJlbW92ZV9mYnMoZGF0 YSk7Cj4gPiA+IMKgCX0KPiA+ID4gQEAgLTI1OSwyOCArMjQwLDI0IEBAIHN0YXRpYyB2b2lkIHBy ZXBhcmVfZmJzKGRhdGFfdCAqZGF0YSwKPiA+ID4gaWd0X291dHB1dF90ICpvdXRwdXQsCj4gPiA+ IMKgCS8qCj4gPiA+IMKgCcKgKiBDcmVhdGUgYSByZWZlcmVuY2Ugc29mdHdhcmUgcm90YXRlZCBm bGlwIGZyYW1lYnVmZmVyLgo+ID4gPiDCoAnCoCovCj4gPiA+IC0JaWYgKHBsYW5lLT50eXBlID09 IERSTV9QTEFORV9UWVBFX1BSSU1BUlkgfHwgZGlzcGxheS0KPiA+ID4gPiAKPiA+ID4gPiBpc19h dG9taWMpIHsKPiA+ID4gLQkJaWd0X2NyZWF0ZV9mYihkYXRhLT5nZnhfZmQsIHJlZl93LCByZWZf aCwKPiA+ID4gcGl4ZWxfZm9ybWF0LCB0aWxpbmcsCj4gPiA+IC0JCQnCoMKgwqDCoMKgwqAmZGF0 YS0+ZmJfZmxpcCk7Cj4gPiA+IC0JCXBhaW50X3NxdWFyZXMoZGF0YSwgZGF0YS0+cm90YXRpb24s ICZkYXRhLQo+ID4gPiA+ZmJfZmxpcCwKPiA+ID4gLQkJCcKgwqDCoMKgwqDCoGZsaXBfb3BhY2l0 eSk7Cj4gPiA+IC0JCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5mYl9mbGlwKTsKPiA+ ID4gLQkJaWYgKHBsYW5lLT50eXBlICE9IERSTV9QTEFORV9UWVBFX0NVUlNPUikKPiA+ID4gLQkJ CWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIGRhdGEtCj4gPiA+ID5wb3NfeCwKPiA+ID4g ZGF0YS0+cG9zX3kpOwo+ID4gPiAtCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksCj4gPiA+ IC0JCQkJwqDCoMKgwqBkaXNwbGF5LT5pc19hdG9taWMgPwo+ID4gPiAtCQkJCcKgwqDCoMKgQ09N TUlUX0FUT01JQyA6Cj4gPiA+IENPTU1JVF9VTklWRVJTQUwpOwo+ID4gPiAtCQlpZ3RfcGlwZV9j cmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZkYXRhLQo+ID4gPiA+IAo+ID4gPiA+IGZs aXBfY3JjKTsKPiA+ID4gLQo+ID4gPiAtCQkvKgo+ID4gPiAtCQnCoCogUHJlcGFyZSB0aGUgbm9u LXJvdGF0ZWQgZmxpcCBmYi4KPiA+ID4gLQkJwqAqLwo+ID4gPiAtCQlpZ3RfcmVtb3ZlX2ZiKGRh dGEtPmdmeF9mZCwgJmRhdGEtPmZiX2ZsaXApOwo+ID4gPiAtCQlpZ3RfY3JlYXRlX2ZiKGRhdGEt PmdmeF9mZCwgdywgaCwgcGl4ZWxfZm9ybWF0LAo+ID4gPiB0aWxpbmcsCj4gPiA+IC0JCQnCoMKg wqDCoMKgwqAmZGF0YS0+ZmJfZmxpcCk7Cj4gPiA+IC0JCXBhaW50X3NxdWFyZXMoZGF0YSwgSUdU X1JPVEFUSU9OXzAsICZkYXRhLQo+ID4gPiA+ZmJfZmxpcCwKPiA+ID4gLQkJCcKgwqDCoMKgwqDC oGZsaXBfb3BhY2l0eSk7Cj4gPiA+IC0JfQo+ID4gPiArCWlndF9jcmVhdGVfZmIoZGF0YS0+Z2Z4 X2ZkLCByZWZfdywgcmVmX2gsIHBpeGVsX2Zvcm1hdCwKPiA+ID4gdGlsaW5nLAo+ID4gPiArCQnC oMKgwqDCoMKgwqAmZGF0YS0+ZmJfZmxpcCk7Cj4gPiA+ICsJcGFpbnRfc3F1YXJlcyhkYXRhLCBk YXRhLT5yb3RhdGlvbiwgJmRhdGEtPmZiX2ZsaXAsCj4gPiA+ICsJCcKgwqDCoMKgwqDCoGZsaXBf b3BhY2l0eSk7Cj4gPiA+ICsJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmZiX2ZsaXAp Owo+ID4gPiArCWlmIChwbGFuZS0+dHlwZSAhPSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpCj4gPiA+ ICsJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIGRhdGEtPnBvc194LCBkYXRhLQo+ID4g PiA+IAo+ID4gPiA+IHBvc195KTsKPiA+ID4gKwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXks IENPTU1JVF9BVE9NSUMpOwo+ID4gPiArCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5w aXBlX2NyYywgJmRhdGEtCj4gPiA+ID5mbGlwX2NyYyk7Cj4gPiA+ICsKPiA+ID4gKwkvKgo+ID4g PiArCcKgwqAqIFByZXBhcmUgdGhlIG5vbi1yb3RhdGVkIGZsaXAgZmIuCj4gPiA+ICsJwqDCoCov Cj4gPiA+ICsJaWd0X3JlbW92ZV9mYihkYXRhLT5nZnhfZmQsICZkYXRhLT5mYl9mbGlwKTsKPiA+ ID4gKwlpZ3RfY3JlYXRlX2ZiKGRhdGEtPmdmeF9mZCwgdywgaCwgcGl4ZWxfZm9ybWF0LCB0aWxp bmcsCj4gPiA+ICsJCcKgwqDCoMKgwqDCoCZkYXRhLT5mYl9mbGlwKTsKPiA+ID4gKwlwYWludF9z cXVhcmVzKGRhdGEsIElHVF9ST1RBVElPTl8wLCAmZGF0YS0+ZmJfZmxpcCwKPiA+ID4gKwkJwqDC oMKgwqDCoMKgZmxpcF9vcGFjaXR5KTsKPiA+ID4gwqAKPiA+ID4gwqAJLyoKPiA+ID4gwqAJwqAq IENyZWF0ZSBhIHJlZmVyZW5jZSBDUkMgZm9yIGEgc29mdHdhcmUtcm90YXRlZCBmYi4KPiA+ID4g QEAgLTI5Miw3ICsyNjksNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX2ZicyhkYXRhX3QgKmRhdGEs Cj4gPiA+IGlndF9vdXRwdXRfdCAqb3V0cHV0LAo+ID4gPiDCoAlpZ3RfcGxhbmVfc2V0X2ZiKHBs YW5lLCAmZGF0YS0+ZmJfcmVmZXJlbmNlKTsKPiA+ID4gwqAJaWYgKHBsYW5lLT50eXBlICE9IERS TV9QTEFORV9UWVBFX0NVUlNPUikKPiA+ID4gwqAJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxh bmUsIGRhdGEtPnBvc194LCBkYXRhLQo+ID4gPiA+IAo+ID4gPiA+IHBvc195KTsKPiA+ID4gLQlp Z3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIGRpc3BsYXktPmlzX2F0b21pYyA/Cj4gPiA+IENP TU1JVF9BVE9NSUMgOiBDT01NSVRfVU5JVkVSU0FMKTsKPiA+ID4gKwlpZ3RfZGlzcGxheV9jb21t aXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+ID4gPiDCoAo+ID4gPiDCoAlpZ3RfcGlwZV9j cmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZkYXRhLQo+ID4gPiA+cmVmX2NyYyk7Cj4g PiA+IMKgCj4gPiA+IEBAIC0zMDUsNyArMjgyLDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9mYnMo ZGF0YV90ICpkYXRhLAo+ID4gPiBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKPiA+ID4gwqAJaWd0X3Bs YW5lX3NldF9yb3RhdGlvbihwbGFuZSwgSUdUX1JPVEFUSU9OXzApOwo+ID4gPiDCoAlpZiAocGxh bmUtPnR5cGUgIT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKQo+ID4gPiDCoAkJaWd0X3BsYW5lX3Nl dF9wb3NpdGlvbihwbGFuZSwgZGF0YS0+cG9zX3gsIGRhdGEtCj4gPiA+ID4gCj4gPiA+ID4gcG9z X3kpOwo+ID4gPiAtCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgZGlzcGxheS0+aXNfYXRv bWljID8KPiA+ID4gQ09NTUlUX0FUT01JQyA6IENPTU1JVF9VTklWRVJTQUwpOwo+ID4gPiArCWln dF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7Cj4gPiA+IMKgCj4gPiA+ IMKgCS8qCj4gPiA+IMKgCcKgKiBQcmVwYXJlIHRoZSBwbGFuZSB3aXRoIGFuIG5vbi1yb3RhdGVk IGZiIGxldCB0aGUgaHcKPiA+ID4gcm90YXRlIGl0Lgo+ID4gPiBAQCAtMzE4LDM1ICsyOTUsNiBA QCBzdGF0aWMgdm9pZCBwcmVwYXJlX2ZicyhkYXRhX3QgKmRhdGEsCj4gPiA+IGlndF9vdXRwdXRf dCAqb3V0cHV0LAo+ID4gPiDCoAkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgZGF0YS0+ cG9zX3gsIGRhdGEtCj4gPiA+ID4gCj4gPiA+ID4gcG9zX3kpOwo+ID4gPiDCoH0KPiA+ID4gwqAK PiA+ID4gLXN0YXRpYyB2b2lkIGNsZWFudXBfY3J0YyhkYXRhX3QgKmRhdGEsIGlndF9vdXRwdXRf dCAqb3V0cHV0LAo+ID4gPiBpZ3RfcGxhbmVfdCAqcGxhbmUpCj4gPiA+IC17Cj4gPiA+IC0JaWd0 X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Owo+ID4gPiAtCj4gPiA+IC0JaWd0 X3BpcGVfY3JjX2ZyZWUoZGF0YS0+cGlwZV9jcmMpOwo+ID4gPiAtCWRhdGEtPnBpcGVfY3JjID0g TlVMTDsKPiA+ID4gLQo+ID4gPiAtCXJlbW92ZV9mYnMoZGF0YSk7Cj4gPiA+IC0KPiA+ID4gLQlp Z3RfcmVtb3ZlX2ZiKGRhdGEtPmdmeF9mZCwgJmRhdGEtPmZiX21vZGVzZXQpOwo+ID4gPiAtCj4g PiA+IC0JLyogWFhYOiBzZWUgdGhlIG5vdGUgaW4gcHJlcGFyZV9jcnRjKCkgKi8KPiA+ID4gLQlp ZiAocGxhbmUtPnR5cGUgIT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSkgewo+ID4gPiAtCQlpZ3Rf cGxhbmVfdCAqcHJpbWFyeTsKPiA+ID4gLQo+ID4gPiAtCQlwcmltYXJ5ID0gaWd0X291dHB1dF9n ZXRfcGxhbmVfdHlwZShvdXRwdXQsCj4gPiA+IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOwo+ID4g PiAtCQlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksIE5VTEwpOwo+ID4gPiAtCX0KPiA+ID4gLQo+ ID4gPiAtCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIE5VTEwpOwo+ID4gPiAtCWlndF9wbGFuZV9z ZXRfcm90YXRpb24ocGxhbmUsIElHVF9ST1RBVElPTl8wKTsKPiA+ID4gLQo+ID4gPiAtCWlndF9k aXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX1VOSVZFUlNBTCk7Cj4gPiA+IC0KPiA+ID4g LQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgUElQRV9BTlkpOwo+ID4gPiAtCj4gPiA+IC0J aWd0X2Rpc3BsYXlfY29tbWl0KGRpc3BsYXkpOwo+ID4gPiAtfQo+ID4gPiAtCj4gPiA+IMKgc3Rh dGljIHZvaWQgd2FpdF9mb3JfcGFnZWZsaXAoaW50IGZkKQo+ID4gPiDCoHsKPiA+ID4gwqAJZHJt RXZlbnRDb250ZXh0IGV2Y3R4ID0geyAudmVyc2lvbiA9IDIgfTsKPiA+ID4gQEAgLTM3MSwxOCAr MzE5LDExIEBAIHN0YXRpYyB2b2lkIHRlc3RfcGxhbmVfcm90YXRpb24oZGF0YV90Cj4gPiA+ICpk YXRhLAo+ID4gPiBpbnQgcGxhbmVfdHlwZSwgYm9vbCB0ZXN0X2JhZF9mb3JtCj4gPiA+IMKgCWVu dW0gcGlwZSBwaXBlOwo+ID4gPiDCoAlpbnQgdmFsaWRfdGVzdHMgPSAwOwo+ID4gPiDCoAlpZ3Rf Y3JjX3QgY3JjX291dHB1dDsKPiA+ID4gLQllbnVtIGlndF9jb21taXRfc3R5bGUgY29tbWl0ID0g Q09NTUlUX0xFR0FDWTsKPiA+ID4gwqAJaW50IHJldDsKPiA+ID4gwqAKPiA+ID4gLQlpZiAocGxh bmVfdHlwZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZIHx8IHBsYW5lX3R5cGUKPiA+ID4gPT0K PiA+ID4gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKQo+ID4gPiAtCQljb21taXQgPSBDT01NSVRfVU5J VkVSU0FMOwo+ID4gPiAtCj4gPiA+IMKgCWlmIChwbGFuZV90eXBlID09IERSTV9QTEFORV9UWVBF X0NVUlNPUikKPiA+ID4gwqAJCWlndF9yZXF1aXJlKGRpc3BsYXktPmhhc19jdXJzb3JfcGxhbmUp Owo+ID4gPiDCoAo+ID4gPiAtCWlmIChkYXRhLT5kaXNwbGF5LmlzX2F0b21pYykKPiA+ID4gLQkJ Y29tbWl0ID0gQ09NTUlUX0FUT01JQzsKPiA+ID4gLQo+ID4gPiDCoAlmb3JfZWFjaF9waXBlX3dp dGhfdmFsaWRfb3V0cHV0KGRpc3BsYXksIHBpcGUsIG91dHB1dCkgewo+ID4gPiDCoAkJaWd0X3Bs YW5lX3QgKnBsYW5lOwo+ID4gPiDCoAkJaW50IGk7Cj4gPiA+IEBAIC0zOTUsNyArMzM2LDcgQEAg c3RhdGljIHZvaWQgdGVzdF9wbGFuZV9yb3RhdGlvbihkYXRhX3QgKmRhdGEsCj4gPiA+IGludAo+ ID4gPiBwbGFuZV90eXBlLCBib29sIHRlc3RfYmFkX2Zvcm0KPiA+ID4gwqAJCXBsYW5lID0gaWd0 X291dHB1dF9nZXRfcGxhbmVfdHlwZShvdXRwdXQsCj4gPiA+IHBsYW5lX3R5cGUpOwo+ID4gPiDC oAkJaWd0X3JlcXVpcmUoaWd0X3BsYW5lX2hhc19wcm9wKHBsYW5lLAo+ID4gPiBJR1RfUExBTkVf Uk9UQVRJT04pKTsKPiA+ID4gwqAKPiA+ID4gLQkJcHJlcGFyZV9jcnRjKGRhdGEsIG91dHB1dCwg cGlwZSwgcGxhbmUsIGNvbW1pdCk7Cj4gPiA+ICsJCXByZXBhcmVfY3J0YyhkYXRhLCBvdXRwdXQs IHBpcGUsIHBsYW5lKTsKPiA+ID4gwqAKPiA+ID4gwqAJCWZvciAoaSA9IDA7IGkgPCBudW1fcmVj dGFuZ2xlX3R5cGVzOyBpKyspIHsKPiA+ID4gwqAJCQkvKiBVbnN1cHBvcnRlZCBvbiBpOTE1ICov Cj4gPiA+IEBAIC00MTUsNyArMzU2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9wbGFuZV9yb3RhdGlv bihkYXRhX3QgKmRhdGEsCj4gPiA+IGludAo+ID4gPiBwbGFuZV90eXBlLCBib29sIHRlc3RfYmFk X2Zvcm0KPiA+ID4gwqAJCQlpZiAoZGF0YS0+cm90YXRpb24gJiAoSUdUX1JPVEFUSU9OXzkwIHwK PiA+ID4gSUdUX1JPVEFUSU9OXzI3MCkpCj4gPiA+IMKgCQkJCWlndF9wbGFuZV9zZXRfc2l6ZShw bGFuZSwgZGF0YS0KPiA+ID4gPiAKPiA+ID4gPiBmYi5oZWlnaHQsIGRhdGEtPmZiLndpZHRoKTsK PiA+ID4gwqAKPiA+ID4gLQkJCXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21taXQyKGRpc3BsYXks Cj4gPiA+IGNvbW1pdCk7Cj4gPiA+ICsJCQlyZXQgPSBpZ3RfZGlzcGxheV90cnlfY29tbWl0Mihk aXNwbGF5LAo+ID4gPiBDT01NSVRfQVRPTUlDKTsKPiA+ID4gwqAJCQlpZiAodGVzdF9iYWRfZm9y bWF0KSB7Cj4gPiA+IMKgCQkJCWlndF9hc3NlcnRfZXEocmV0LCAtRUlOVkFMKTsKPiA+ID4gwqAJ CQkJY29udGludWU7Cj4gPiA+IEBAIC00NTYsNDEgKzM5NywyOCBAQCBzdGF0aWMgdm9pZCB0ZXN0 X3BsYW5lX3JvdGF0aW9uKGRhdGFfdAo+ID4gPiAqZGF0YSwKPiA+ID4gaW50IHBsYW5lX3R5cGUs IGJvb2wgdGVzdF9iYWRfZm9ybQo+ID4gPiDCoAkJfQo+ID4gPiDCoAo+ID4gPiDCoAkJdmFsaWRf dGVzdHMrKzsKPiA+ID4gLQkJY2xlYW51cF9jcnRjKGRhdGEsIG91dHB1dCwgcGxhbmUpOwo+ID4g PiDCoAl9Cj4gPiA+IMKgCWlndF9yZXF1aXJlX2YodmFsaWRfdGVzdHMsICJubyB2YWxpZCBjcnRj L2Nvbm5lY3Rvcgo+ID4gPiBjb21iaW5hdGlvbnMgZm91bmRcbiIpOwo+ID4gPiDCoH0KPiA+ID4g wqAKPiA+ID4gwqBzdGF0aWMgdm9pZCB0ZXN0X3BsYW5lX3JvdGF0aW9uX2V4aGF1c3RfZmVuY2Vz KGRhdGFfdCAqZGF0YSwKPiA+ID4gwqAJCQkJCcKgwqDCoMKgwqDCoMKgaWd0X291dHB1dF90Cj4g PiA+ICpvdXRwdXQsCj4gPiA+IC0JCQkJCcKgwqDCoMKgwqDCoMKgaW50IHBsYW5lX3R5cGUpCj4g PiA+ICsJCQkJCcKgwqDCoMKgwqDCoMKgaWd0X3BsYW5lX3QKPiA+ID4gKnBsYW5lKQo+ID4gPiDC oHsKPiA+ID4gwqAJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Owo+ID4g PiDCoAl1aW50NjRfdCB0aWxpbmcgPSBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDsKPiA+ ID4gwqAJdWludDMyX3QgZm9ybWF0ID0gRFJNX0ZPUk1BVF9YUkdCODg4ODsKPiA+ID4gwqAJaW50 IGJwcCA9IGlndF9kcm1fZm9ybWF0X3RvX2JwcChmb3JtYXQpOwo+ID4gPiAtCWVudW0gaWd0X2Nv bW1pdF9zdHlsZSBjb21taXQgPSBDT01NSVRfTEVHQUNZOwo+ID4gPiDCoAlpbnQgZmQgPSBkYXRh LT5nZnhfZmQ7Cj4gPiA+IC0JaWd0X3BsYW5lX3QgKnBsYW5lOwo+ID4gPiDCoAlkcm1Nb2RlTW9k ZUluZm8gKm1vZGU7Cj4gPiA+IC0JZGF0YV90IGRhdGEyW01BWF9GRU5DRVMrMV0gPSB7fTsKPiA+ ID4gKwlzdHJ1Y3QgaWd0X2ZiIGZiW01BWF9GRU5DRVMrMV0gPSB7fTsKPiA+ID4gwqAJdW5zaWdu ZWQgaW50IHN0cmlkZSwgc2l6ZSwgdywgaDsKPiA+ID4gwqAJdWludDMyX3QgZ2VtX2hhbmRsZTsK PiA+ID4gwqAJdWludDY0X3QgdG90YWxfYXBlcnR1cmVfc2l6ZSwgdG90YWxfZmJzX3NpemU7Cj4g PiA+IMKgCWludCBpLCByZXQ7Cj4gPiA+IMKgCj4gPiA+IC0JcGxhbmUgPSBpZ3Rfb3V0cHV0X2dl dF9wbGFuZV90eXBlKG91dHB1dCwgcGxhbmVfdHlwZSk7Cj4gPiA+IMKgCWlndF9yZXF1aXJlKGln dF9wbGFuZV9oYXNfcHJvcChwbGFuZSwKPiA+ID4gSUdUX1BMQU5FX1JPVEFUSU9OKSk7Cj4gPiA+ IMKgCj4gPiA+IC0JaWYgKHBsYW5lX3R5cGUgPT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSB8fCBw bGFuZV90eXBlCj4gPiA+ID09Cj4gPiA+IERSTV9QTEFORV9UWVBFX0NVUlNPUikKPiA+ID4gLQkJ Y29tbWl0ID0gQ09NTUlUX1VOSVZFUlNBTDsKPiA+ID4gLQo+ID4gPiAtCWlmIChwbGFuZV90eXBl ID09IERSTV9QTEFORV9UWVBFX0NVUlNPUikKPiA+ID4gLQkJaWd0X3JlcXVpcmUoZGlzcGxheS0+ aGFzX2N1cnNvcl9wbGFuZSk7Cj4gPiA+IC0KPiA+ID4gLQlpZiAoZGF0YS0+ZGlzcGxheS5pc19h dG9taWMpCj4gPiA+IC0JCWNvbW1pdCA9IENPTU1JVF9BVE9NSUM7Cj4gPiA+IC0KPiA+ID4gwqAJ bW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKPiA+ID4gwqAJdyA9IG1vZGUtPmhk aXNwbGF5Owo+ID4gPiDCoAloID0gbW9kZS0+dmRpc3BsYXk7Cj4gPiA+IEBAIC01MDksNyArNDM3 LDcgQEAgc3RhdGljIHZvaWQKPiA+ID4gdGVzdF9wbGFuZV9yb3RhdGlvbl9leGhhdXN0X2ZlbmNl cyhkYXRhX3QgKmRhdGEsCj4gPiA+IMKgCWlndF9yZXF1aXJlKHRvdGFsX2Zic19zaXplIDwgdG90 YWxfYXBlcnR1cmVfc2l6ZSAqIDAuOSk7Cj4gPiA+IMKgCj4gPiA+IMKgCWlndF9wbGFuZV9zZXRf ZmIocGxhbmUsIE5VTEwpOwo+ID4gPiAtCWlndF9kaXNwbGF5X2NvbW1pdChkaXNwbGF5KTsKPiA+ ID4gKwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+ID4gPiDC oAo+ID4gPiDCoAlmb3IgKGkgPSAwOyBpIDwgTUFYX0ZFTkNFUyArIDE7IGkrKykgewo+ID4gPiDC oAkJZ2VtX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIHNpemUpOwo+ID4gPiBAQCAtNTIyLDIwICs0 NTAsMjAgQEAgc3RhdGljIHZvaWQKPiA+ID4gdGVzdF9wbGFuZV9yb3RhdGlvbl9leGhhdXN0X2Zl bmNlcyhkYXRhX3QgKmRhdGEsCj4gPiA+IMKgCQlyZXQgPSAoX19rbXNfYWRkZmIoZmQsIGdlbV9o YW5kbGUsIHcsIGgsIHN0cmlkZSwKPiA+ID4gwqAJCcKgwqDCoMKgwqDCoMKgZm9ybWF0LCB0aWxp bmcsIE5VTEwsCj4gPiA+IMKgCQnCoMKgwqDCoMKgwqDCoExPQ0FMX0RSTV9NT0RFX0ZCX01PRElG SUVSUywKPiA+ID4gLQkJwqDCoMKgwqDCoMKgwqAmZGF0YTJbaV0uZmIuZmJfaWQpKTsKPiA+ID4g KwkJwqDCoMKgwqDCoMKgwqAmZmJbaV0uZmJfaWQpKTsKPiA+ID4gwqAJCWlmIChyZXQpIHsKPiA+ ID4gwqAJCQlpZ3Rfd2FybigiZmFpbGVkIHRvIGNyZWF0ZQo+ID4gPiBmcmFtZWJ1ZmZlclxuIik7 Cj4gPiA+IMKgCQkJZ290byBlcnJfYWxsb2M7Cj4gPiA+IMKgCQl9Cj4gPiA+IMKgCj4gPiA+IC0J CWRhdGEyW2ldLmZiLndpZHRoID0gdzsKPiA+ID4gLQkJZGF0YTJbaV0uZmIuaGVpZ2h0ID0gaDsK PiA+ID4gLQkJZGF0YTJbaV0uZmIuZ2VtX2hhbmRsZSA9IGdlbV9oYW5kbGU7Cj4gPiA+ICsJCWZi W2ldLndpZHRoID0gdzsKPiA+ID4gKwkJZmJbaV0uaGVpZ2h0ID0gaDsKPiA+ID4gKwkJZmJbaV0u Z2VtX2hhbmRsZSA9IGdlbV9oYW5kbGU7Cj4gPiA+IMKgCj4gPiA+IC0JCWlndF9wbGFuZV9zZXRf ZmIocGxhbmUsICZkYXRhMltpXS5mYik7Cj4gPiA+ICsJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUs ICZmYltpXSk7Cj4gPiA+IMKgCQlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCBJR1RfUk9U QVRJT05fMCk7Cj4gPiA+IMKgCj4gPiA+IC0JCXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21taXQy KGRpc3BsYXksIGNvbW1pdCk7Cj4gPiA+ICsJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwg Q09NTUlUX0FUT01JQyk7Cj4gPiA+IMKgCQlpZiAocmV0KSB7Cj4gPiA+IMKgCQkJaWd0X3dhcm4o ImZhaWxlZCB0byBjb21taXQgdW5yb3RhdGVkCj4gPiA+IGZiXG4iKTsKPiA+ID4gwqAJCQlnb3Rv IGVycl9jb21taXQ7Cj4gPiA+IEBAIC01NDQsNyArNDcyLDcgQEAgc3RhdGljIHZvaWQKPiA+ID4g dGVzdF9wbGFuZV9yb3RhdGlvbl9leGhhdXN0X2ZlbmNlcyhkYXRhX3QgKmRhdGEsCj4gPiA+IMKg CQlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCBJR1RfUk9UQVRJT05fOTApOwo+ID4gPiDC oAkJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCBoLCB3KTsKPiA+ID4gwqAKPiA+ID4gLQkJaWd0 X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBjb21taXQpOwo+ID4gPiArCQlpZ3RfZGlzcGxheV9j b21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+ID4gPiDCoAkJaWYgKHJldCkgewo+ID4g PiDCoAkJCWlndF93YXJuKCJmYWlsZWQgdG8gY29tbWl0IGhhcmR3YXJlCj4gPiA+IHJvdGF0ZWQK PiA+ID4gZmI6ICVpXG4iLCByZXQpOwo+ID4gPiDCoAkJCWdvdG8gZXJyX2NvbW1pdDsKPiA+ID4g QEAgLTU1NywxOSArNDg1LDkgQEAgZXJyX2FsbG9jOgo+ID4gPiDCoAo+ID4gPiDCoAlpLS07Cj4g PiA+IMKgZXJyX2NvbW1pdDoKPiA+ID4gLQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsK PiA+ID4gLQlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCBJR1RfUk9UQVRJT05fMCk7Cj4g PiA+IC0KPiA+ID4gLQlpZiAoY29tbWl0IDwgQ09NTUlUX0FUT01JQykKPiA+ID4gLQkJaWd0X2Rp c3BsYXlfY29tbWl0MihkaXNwbGF5LCBjb21taXQpOwo+ID4gPiAtCj4gPiA+IC0JaWd0X291dHB1 dF9zZXRfcGlwZShvdXRwdXQsIFBJUEVfTk9ORSk7Cj4gPiA+IC0JaWd0X2Rpc3BsYXlfY29tbWl0 MihkaXNwbGF5LCBkaXNwbGF5LT5pc19hdG9taWMgPwo+ID4gPiBDT01NSVRfQVRPTUlDIDogQ09N TUlUX0xFR0FDWSk7Cj4gPiA+IC0KPiA+ID4gwqAJZm9yICg7IGkgPj0gMDsgaS0tKQo+ID4gPiAt CQlpZ3RfcmVtb3ZlX2ZiKGZkLCAmZGF0YTJbaV0uZmIpOwo+ID4gPiArCQlpZ3RfcmVtb3ZlX2Zi KGZkLCAmZmJbaV0pOwo+ID4gPiDCoAo+ID4gPiAtCWttc3Rlc3RfcmVzdG9yZV92dF9tb2RlKCk7 Cj4gPiA+IMKgCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiA+ID4gwqB9Cj4gPiA+IMKgCj4gPiA+ IEBAIC03MjYsOSArNjQ0LDEwIEBAIGlndF9tYWluCj4gPiA+IMKgCQlpZ3RfcmVxdWlyZShnZW4g Pj0gOSk7Cj4gPiA+IMKgCj4gPiA+IMKgCQlmb3JfZWFjaF9waXBlX3dpdGhfdmFsaWRfb3V0cHV0 KCZkYXRhLmRpc3BsYXksCj4gPiA+IHBpcGUsCj4gPiA+IG91dHB1dCkgewo+ID4gPiAtCQkJaWd0 X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOwo+ID4gPiArCQkJaWd0X3BsYW5lX3QgKnBy aW1hcnkgPQo+ID4gPiAmZGF0YS5kaXNwbGF5LnBpcGVzW3BpcGVdLnBsYW5lc1swXTsKPiA+ID4g KwkJCXByZXBhcmVfY3J0YygmZGF0YSwgb3V0cHV0LCBwaXBlLAo+ID4gPiBwcmltYXJ5KTsKPiA+ ID4gwqAKPiA+ID4gLQkJCXRlc3RfcGxhbmVfcm90YXRpb25fZXhoYXVzdF9mZW5jZXMoJmRhdGEK PiA+ID4gLAo+ID4gPiBvdXRwdXQsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOwo+ID4gPiArCQkJ dGVzdF9wbGFuZV9yb3RhdGlvbl9leGhhdXN0X2ZlbmNlcygmZGF0YQo+ID4gPiAsCj4gPiA+IG91 dHB1dCwgcHJpbWFyeSk7Cj4gPiA+IMKgCj4gPiA+IMKgCQkJdmFsaWRfdGVzdHMrKzsKPiA+ID4g wqAJCQlicmVhazsKPiAKLS0gCk1pa2EgS2Fob2xhIC0gSW50ZWwgT1RDCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdApp Z3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK