From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9019689468 for ; Fri, 12 Oct 2018 07:18:49 +0000 (UTC) Date: Fri, 12 Oct 2018 00:20:30 -0700 From: Radhakrishna Sripada Message-ID: <20181012072030.ylktuiilna5qtgly@InViCtUs> References: <20181005233437.31286-1-manasi.d.navare@intel.com> <20181011212152.s7n723uzto3zzgub@InViCtUs> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20181011212152.s7n723uzto3zzgub@InViCtUs> Subject: Re: [igt-dev] [PATCH i-g-t] test/kms_dp_dsc: Basic KMS test to validate VESA DSC on DP/eDP 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: Manasi Navare Cc: igt-dev@lists.freedesktop.org, Anusha Srivatsa List-ID: T24gVGh1LCBPY3QgMTEsIDIwMTggYXQgMDI6MjE6NTJQTSAtMDcwMCwgUmFkaGFrcmlzaG5hIFNy aXBhZGEgd3JvdGU6Cj4gT24gRnJpLCBPY3QgMDUsIDIwMTggYXQgMDQ6MzQ6MzdQTSAtMDcwMCwg TWFuYXNpIE5hdmFyZSB3cm90ZToKPiA+IFRoaXMgcGF0Y2ggYWRkcyBhIGJhc2ljIGttcyB0ZXN0 IHRvIHZhbGlkYXRlIHRoZSBkaXNwbGF5IHN0cmVhbQo+ID4gY29tcHJlc3Npb24gZnVuY3Rpb25h bGl0eSBpZiBzdXBwb3J0ZWQgb24gRFAvZURQIGNvbm5lY3Rvci4KPiA+IEN1cnJlbnRseSB0aGlz IGhhcyBvbmx5IG9uZSBzdWJ0ZXN0IHRvIGZvcmNlIHRoZSBEU0Mgb24gYWxsCj4gPiB0aGUgY29u bmVjdG9ycyB0aGF0IHN1cHBvcnQgaXQgd2l0aCBkZWZhdWx0IHBhcmFtZXRlcnMuCj4gPiBUaGlz IHdpbGwgYmUgZXhwYW5kZWQgdG8gYWRkIG1vcmUgc3VidGVzdHMgdG8gdHdlYWsgRFNDIHBhcmFt ZXRlcnMuCj4gPiAKPiA+IENjOiBBbnVzaGEgU3JpdmF0c2EgPGFudXNoYS5zcml2YXRzYUBpbnRl bC5jb20+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBNYW5hc2kgTmF2YXJlIDxtYW5hc2kuZC5uYXZhcmVA aW50ZWwuY29tPgo+ID4gLS0tCj4gPiAgdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSArCj4g PiAgdGVzdHMva21zX2RwX2RzYy5jICAgICB8IDM3MiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+ID4gIDIgZmlsZXMgY2hhbmdlZCwgMzczIGluc2VydGlvbnMoKykK PiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX2RwX2RzYy5jCj4gPiAKPiA+IGRpZmYg LS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ ID4gaW5kZXggYzg0OTMzZjEuLmM4MDdhYWQzIDEwMDY0NAo+ID4gLS0tIGEvdGVzdHMvTWFrZWZp bGUuc291cmNlcwo+ID4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID4gQEAgLTIwNyw2 ICsyMDcsNyBAQCBURVNUU19wcm9ncyA9IFwKPiA+ICAJa21zX3R2X2xvYWRfZGV0ZWN0IFwKPiA+ ICAJa21zX3VuaXZlcnNhbF9wbGFuZSBcCj4gPiAgCWttc192YmxhbmsgXAo+ID4gKwlrbXNfZHBf ZHNjIFwKPiA+ICAJbWV0YV90ZXN0IFwKPiA+ICAJcGVyZiBcCj4gPiAgCXBlcmZfcG11IFwKPiA+ IGRpZmYgLS1naXQgYS90ZXN0cy9rbXNfZHBfZHNjLmMgYi90ZXN0cy9rbXNfZHBfZHNjLmMKPiA+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMC4uZDBmZDJhZTMKPiA+IC0t LSAvZGV2L251bGwKPiA+ICsrKyBiL3Rlc3RzL2ttc19kcF9kc2MuYwo+ID4gQEAgLTAsMCArMSwz NzIgQEAKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBvcmF0aW9u Cj4gPiArICoKPiA+ICsgKiBEaXNwbGF5cG9ydCBEaXNwbGF5IFN0cmVhbSBDb21wcmVzc2lvbiB0 ZXN0Cj4gPiArICoKPiA+ICsgKiBBdXRob3JzOgo+ID4gKyAqIE1hbmFzaSBOYXZhcmUgPG1hbmFz aS5kLm5hdmFyZUBpbnRlbC5jb20+Cj4gPiArICoKPiA+ICsgKiBFbGVtZW50cyBvZiB0aGUgbW9k ZXNldCBjb2RlIGFkYXB0ZWQgZnJvbSBEYXZpZCBIZXJybWFubidzCj4gPiArICogRFJNIG1vZGVz ZXQgZXhhbXBsZQo+ID4gKyAqCj4gPiArICovCj4gPiArI2luY2x1ZGUgImlndC5oIgo+ID4gKyNp bmNsdWRlIDxlcnJuby5oPgo+ID4gKyNpbmNsdWRlIDxnZXRvcHQuaD4KPiA+ICsjaW5jbHVkZSA8 bWF0aC5oPgo+ID4gKyNpbmNsdWRlIDxzdGRpbnQuaD4KPiA+ICsjaW5jbHVkZSA8c3RkYm9vbC5o Pgo+ID4gKyNpbmNsdWRlIDxzdHJpbmdzLmg+Cj4gPiArI2luY2x1ZGUgPHVuaXN0ZC5oPgo+ID4g KyNpbmNsdWRlIDxzdGRsaWIuaD4KPiA+ICsjaW5jbHVkZSA8c2lnbmFsLmg+Cj4gPiArI2luY2x1 ZGUgPHRpbWUuaD4KPiA+ICsjaW5jbHVkZSA8ZmNudGwuaD4KPiA+ICsjaW5jbHVkZSA8dGVybWlv cy5oPgo+ID4gKwo+ID4gK2ludCBkcm1fZmQ7Cj4gPiArZHJtTW9kZVJlcyAqcmVzb3VyY2VzOwo+ ID4gK3VpbnQ2NF90IHRpbGluZyA9IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkU7Cj4gPiArCj4g PiArc3RydWN0IGNvbm5lY3RvciB7Cj4gPiArCXVpbnQzMl90IGlkOwo+ID4gKwlpbnQgbW9kZV92 YWxpZDsKPiA+ICsJZHJtTW9kZU1vZGVJbmZvIG1vZGU7Cj4gPiArCWRybU1vZGVDb25uZWN0b3Ig KmNvbm5lY3RvcjsKPiA+ICsJZHJtTW9kZUVuY29kZXIgKmVuY29kZXI7Cj4gPiArCWludCBjcnRj LCBwaXBlOwo+ID4gK307Cj4gQ2FuIGttc3Rlc3RfY29ubmVjdG9yX2NvbmZpZyBiZSB1c2VkIHRv IHNpbXBsaWZ5IHRoaXMgc3RydWN0dXJlPwo+ID4gKwo+ID4gK3N0cnVjdCBkc2NfY29uZmlnIHsK PiA+ICsJY2hhciB0ZXN0X25hbWVbMTI4XTsKPiA+ICsJaW50IG1vZGVfd2lkdGg7Cj4gPiArCWlu dCBtb2RlX2hlaWdodDsKPiA+ICsJaW50IGJwcDsKPiA+ICsJaW50IGRlcHRoOwo+ID4gKwlib29s IGRzY19zdXBwb3J0ZWQ7Cj4gPiArCWJvb2wgZHNjX2VuYWJsZTsKPiA+ICt9Owo+ID4gKwo+ID4g K3N0YXRpYyBGSUxFICpmb3BlbmF0KGludCBkaXIsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNo YXIgKm1vZGUpCj4gPiArewo+ID4gKwlpbnQgZmQgPSBvcGVuYXQoZGlyLCBuYW1lLCBPX1JEV1Ip Owo+ID4gKwlyZXR1cm4gZmRvcGVuKGZkLCBtb2RlKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IGJvb2wgZ2V0X2RwX2RzY19zdXBwb3J0KGNoYXIgKnRlc3RfY29ubmVjdG9yX25hbWUpCj4gPiAr ewo+ID4gKwlpbnQgZGlyID0gaWd0X2RlYnVnZnNfZGlyKGRybV9mZCk7Cj4gPiArCUZJTEUgKmRz Y19zdXBwb3J0X2ZwID0gTlVMTDsKPiA+ICsJY2hhciAqbGluZSA9IE5VTEw7Cj4gPiArCXNpemVf dCBsaW5lX3NpemUgPSAwOwo+ID4gKwljaGFyIGJ1ZlsxMjhdID0gezB9LCBzdXBwb3J0ZWRfc3Ry WzVdLCBlbmFibGVkX3N0cls1XTsKPiA+ICsJYm9vbCBzdXBwb3J0ZWQgPSBmYWxzZTsKPiA+ICsK PiA+ICsJc3RyY3B5KGJ1ZiwgdGVzdF9jb25uZWN0b3JfbmFtZSk7Cj4gPiArCXN0cmNhdChidWYs ICIvaTkxNV9kc2Nfc3VwcG9ydCIpOwo+ID4gKwlkc2Nfc3VwcG9ydF9mcCA9IGZvcGVuYXQoZGly LCBidWYsICJyIik7Cj4gPiArCWlndF9yZXF1aXJlKGRzY19zdXBwb3J0X2ZwKTsKPiA+ICsKPiA+ ICsJd2hpbGUgKGdldGxpbmUoJmxpbmUsICZsaW5lX3NpemUsIGRzY19zdXBwb3J0X2ZwKSA+IDAp IHsKPiA+ICsJCWNoYXIgKnN1cHBvcnQsICplbmFibGVkOwo+ID4gKwo+ID4gKwkJZW5hYmxlZCA9 IHN0cnN0cihsaW5lLCAiRW5hYmxlZDogIik7Cj4gPiArCQlpZ3RfYXNzZXJ0X2VxKHNzY2FuZihl bmFibGVkLCAiRW5hYmxlZDogJXMiLCBlbmFibGVkX3N0ciksIDEpOwo+ID4gKwkJaWYgKHN0cmNt cChlbmFibGVkX3N0ciwgInllcyIpID09IDApIHsKPiA+ICsJCQlpZ3RfaW5mbygiRFNDIGlzIGVu YWJsZWQgb24gJXNcbiIsIHRlc3RfY29ubmVjdG9yX25hbWUpOwo+ID4gKwkJCXN1cHBvcnRlZCA9 IHRydWU7Cj4gPiArCQkJYnJlYWs7Cj4gPiArCQl9IGVsc2Ugewo+ID4gKwkJCWdldGxpbmUoJmxp bmUsICZsaW5lX3NpemUsIGRzY19zdXBwb3J0X2ZwKTsKPiA+ICsJCQlzdXBwb3J0ID0gc3Ryc3Ry KGxpbmUsICJTdXBwb3J0ZWQ6ICIpOwo+ID4gKwkJaWd0X2Fzc2VydF9lcShzc2NhbmYoc3VwcG9y dCwgIlN1cHBvcnRlZDogJXMiLCBzdXBwb3J0ZWRfc3RyKSwgMSk7Cj4gPiArCQlpZiAoc3RyY21w KHN1cHBvcnRlZF9zdHIsICJ5ZXMiKSA9PSAwKQo+ID4gKwkJCXN1cHBvcnRlZCA9IHRydWU7Cj4g PiArCQllbHNlIGlmIChzdHJjbXAoc3VwcG9ydGVkX3N0ciwgIm5vIikgPT0gMCkKPiA+ICsJCQlz dXBwb3J0ZWQgPSBmYWxzZTsKPiA+ICsJCWVsc2UKPiA+ICsJCQlpZ3RfZmFpbF9vbl9mKHRydWUs ICJVbmtub3duIERTQyBzdXBwb3J0ZWQgc3RhdHVzICclcydcbiIsCj4gPiArCQkJCSAgICAgIHN1 cHBvcnRlZF9zdHIpOwo+ID4gKwkJYnJlYWs7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiBUaGlz IGZ1bmN0aW9uIGNvdWxkIG1ha2UgdXNlIG9mIGlndF9kZWJ1Z2ZzX3NpbXBsZV9yZWFkIHRoZSB3 YXkga21zX3BzciBkb2VzIHRvIG1ha2UgaXQgY2xlYW5lci4KPiA+ICsJZnJlZShsaW5lKTsKPiA+ ICsJZmNsb3NlKGRzY19zdXBwb3J0X2ZwKTsKPiA+ICsKPiA+ICsJcmV0dXJuIHN1cHBvcnRlZDsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgc2V0X2RwX2RzY19lbmFibGUoYm9vbCBlbmFi bGUsIGNoYXIgKnRlc3RfY29ubmVjdG9yX25hbWUpCj4gPiArewo+ID4gKwlpbnQgZGlyID0gaWd0 X2RlYnVnZnNfZGlyKGRybV9mZCk7Cj4gPiArCUZJTEUgKmRzY19lbmFibGVfZnAgPSBOVUxMOwo+ ID4gKwljaGFyIGJ1ZlsxMjhdID0gezB9Owo+ID4gKwo+ID4gKwlzdHJjcHkoYnVmLCB0ZXN0X2Nv bm5lY3Rvcl9uYW1lKTsKPiA+ICsJc3RyY2F0KGJ1ZiwgIi9pOTE1X2RzY19zdXBwb3J0Iik7Cj4g PiArCWRzY19lbmFibGVfZnAgPSBmb3BlbmF0KGRpciwgYnVmLCAidysiKTsKPiA+ICsJaWd0X3Jl cXVpcmUoZHNjX2VuYWJsZV9mcCk7Cj4gPiArCXJld2luZChkc2NfZW5hYmxlX2ZwKTsKPiA+ICsJ aWd0X2luZm8oIlNldHRpbmcgRFNDX0VOQUJMRSB0byAlcyBmb3IgJXNcbiIsIChlbmFibGUpID8g InRydWUiIDogImZhbHNlIiwgdGVzdF9jb25uZWN0b3JfbmFtZSk7Cj4gQ2FuIHdlIHVzZSBpZ3Rf c3lzZnNfd3JpdGUgaGVyZT8KPiA+ICsJZnByaW50Zihkc2NfZW5hYmxlX2ZwLCAiJWQiLCBlbmFi bGUpOwo+ID4gKwlmZmx1c2goZHNjX2VuYWJsZV9mcCk7Cj4gPiArCWZjbG9zZShkc2NfZW5hYmxl X2ZwKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZHVtcF9jb25uZWN0b3JzX2ZkKGlu dCBkcm1mZCkKPiA+ICt7Cj4gPiArCWludCBpLCBqOwo+ID4gKwo+ID4gKwlkcm1Nb2RlUmVzICpt b2RlX3Jlc291cmNlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZHJtZmQpOwo+ID4gKwo+ID4gKyAg ICAgICAgaWYgKCFtb2RlX3Jlc291cmNlcykgewo+ID4gKwkJaWd0X3dhcm4oImRybU1vZGVHZXRS ZXNvdXJjZXMgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKPiA+ICsJCXJldHVybjsK PiA+ICsJfQo+ID4gKwo+ID4gKwlpZ3RfaW5mbygiQ29ubmVjdG9yczpcbiIpOwo+ID4gKwlpZ3Rf aW5mbygiaWRcdGVuY29kZXJcdHN0YXR1c1x0XHR0eXBlXHRzaXplIChtbSlcdG1vZGVzXG4iKTsK PiA+ICsJZm9yIChpID0gMDsgaSA8IG1vZGVfcmVzb3VyY2VzLT5jb3VudF9jb25uZWN0b3JzOyBp KyspIHsKPiA+ICsJCWRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvcjsKPiA+ICsKPiA+ICsJCWNv bm5lY3RvciA9IGRybU1vZGVHZXRDb25uZWN0b3JDdXJyZW50KGRybWZkLAo+ID4gKwkJCQkJCSAg ICAgICBtb2RlX3Jlc291cmNlcy0+Y29ubmVjdG9yc1tpXSk7Cj4gPiArCQlpZiAoIWNvbm5lY3Rv cikgewo+ID4gKwkJCWlndF93YXJuKCJjb3VsZCBub3QgZ2V0IGNvbm5lY3RvciAlaTogJXNcbiIs Cj4gPiArCQkJCSBtb2RlX3Jlc291cmNlcy0+Y29ubmVjdG9yc1tpXSwgc3RyZXJyb3IoZXJybm8p KTsKPiA+ICsJCQljb250aW51ZTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWlndF9pbmZvKCIlZFx0 JWRcdCVzXHQlc1x0JWR4JWRcdFx0JWRcbiIsCj4gPiArCQkJIGNvbm5lY3Rvci0+Y29ubmVjdG9y X2lkLCBjb25uZWN0b3ItPmVuY29kZXJfaWQsCj4gPiArCQkJIGttc3Rlc3RfY29ubmVjdG9yX3N0 YXR1c19zdHIoY29ubmVjdG9yLT5jb25uZWN0aW9uKSwKPiA+ICsJCQkga21zdGVzdF9jb25uZWN0 b3JfdHlwZV9zdHIoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSksCj4gPiArCQkJIGNvbm5lY3Rv ci0+bW1XaWR0aCwgY29ubmVjdG9yLT5tbUhlaWdodCwKPiA+ICsJCQkgY29ubmVjdG9yLT5jb3Vu dF9tb2Rlcyk7Cj4gPiArCj4gPiArCQlpZiAoIWNvbm5lY3Rvci0+Y291bnRfbW9kZXMpCj4gPiAr CQkJY29udGludWU7Cj4gPiArCj4gPiArCQlpZ3RfaW5mbygiICBtb2RlczpcbiIpOwo+ID4gKwkJ aWd0X2luZm8oIiAgbmFtZSByZWZyZXNoIChIeikgaGRpc3AgaHNzIGhzZSBodG90IHZkaXNwICIi dnNzIHZzZSB2dG90IGZsYWdzIHR5cGUgY2xvY2tcbiIpOwo+ID4gKwkJZm9yIChqID0gMDsgaiA8 IGNvbm5lY3Rvci0+Y291bnRfbW9kZXM7IGorKyl7Cj4gPiArCQkJaWd0X2luZm8oIlslZF0iLCBq KTsKPiA+ICsJCQlrbXN0ZXN0X2R1bXBfbW9kZSgmY29ubmVjdG9yLT5tb2Rlc1tqXSk7Cj4gPiAr CQl9Cj4gPiArCj4gPiArCQlkcm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3IpOwo+ID4gKwl9 Cj4gPiArCWlndF9pbmZvKCJcbiIpOwo+ID4gKwo+ID4gKwlkcm1Nb2RlRnJlZVJlc291cmNlcyht b2RlX3Jlc291cmNlcyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGR1bXBfY3J0Y3Nf ZmQoaW50IGRybWZkKQo+ID4gK3sKPiA+ICsJaW50IGk7Cj4gPiArCWRybU1vZGVSZXMgKm1vZGVf cmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291cmNlcyhkcm1mZCk7Cj4gPiArCj4gPiArCWlndF9p bmZvKCJDUlRDczpcbiIpOwo+ID4gKwlpZ3RfaW5mbygiaWRcdGZiXHRwb3NcdHNpemVcbiIpOwo+ ID4gKwlmb3IgKGkgPSAwOyBpIDwgbW9kZV9yZXNvdXJjZXMtPmNvdW50X2NydGNzOyBpKyspIHsK PiA+ICsJCWRybU1vZGVDcnRjICpjcnRjOwo+ID4gKwo+ID4gKwkJY3J0YyA9IGRybU1vZGVHZXRD cnRjKGRybWZkLCBtb2RlX3Jlc291cmNlcy0+Y3J0Y3NbaV0pOwo+ID4gKwkJaWYgKCFjcnRjKSB7 Cj4gPiArCQkJaWd0X3dhcm4oImNvdWxkIG5vdCBnZXQgY3J0YyAlaTogJXNcbiIsCj4gPiArCQkJ CSBtb2RlX3Jlc291cmNlcy0+Y3J0Y3NbaV0sIHN0cmVycm9yKGVycm5vKSk7Cj4gPiArCQkJY29u dGludWU7Cj4gPiArCQl9Cj4gPiArCQlpZ3RfaW5mbygiJWRcdCVkXHQoJWQsJWQpXHQoJWR4JWQp XG4iLAo+ID4gKwkJCSBjcnRjLT5jcnRjX2lkLCBjcnRjLT5idWZmZXJfaWQsIGNydGMtPngsCj4g PiArCQkJIGNydGMtPnksIGNydGMtPndpZHRoLCBjcnRjLT5oZWlnaHQpOwo+ID4gKwkJa21zdGVz dF9kdW1wX21vZGUoJmNydGMtPm1vZGUpOwo+ID4gKwo+ID4gKwkJZHJtTW9kZUZyZWVDcnRjKGNy dGMpOwo+ID4gKwl9Cj4gPiArCWlndF9pbmZvKCJcbiIpOwo+ID4gKwo+ID4gKwlkcm1Nb2RlRnJl ZVJlc291cmNlcyhtb2RlX3Jlc291cmNlcyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lk IGR1bXBfaW5mbyh2b2lkKQo+ID4gK3sKPiA+ICsJZHVtcF9jb25uZWN0b3JzX2ZkKGRybV9mZCk7 Cj4gPiArCWR1bXBfY3J0Y3NfZmQoZHJtX2ZkKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlu dAo+ID4gK3NldF9tb2RlKHN0cnVjdCBjb25uZWN0b3IgKmMsIHN0cnVjdCBkc2NfY29uZmlnICp0 ZXN0X2NvbmZpZywgYm9vbCBzZXRfbW9kZSkKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGludCBmYl9p ZCA9IDA7Cj4gPiArCXN0cnVjdCBpZ3RfZmIgZmJfaW5mbzsKPiA+ICsJaW50IHJldCA9IDA7Cj4g PiArCj4gPiArCWlmICghc2V0X21vZGUpIHsKPiA+ICsJCXJldCA9IGRybU1vZGVTZXRDcnRjKGRy bV9mZCwgYy0+Y3J0YywgMCwgMCwgMCwKPiA+ICsJCQkJICAgICBOVUxMLCAwLCBOVUxMKTsKPiA+ ICsJCWlmIChyZXQpCj4gPiArCQkJaWd0X3dhcm4oIkZhaWxlZCB0byB1bnNldCBtb2RlIik7Cj4g PiArCQlyZXR1cm4gcmV0Owo+ID4gKwl9Cj4gPiArCj4gPiArCWZiX2lkID0gaWd0X2NyZWF0ZV9w YXR0ZXJuX2ZiKGRybV9mZCwgdGVzdF9jb25maWctPm1vZGVfd2lkdGgsCj4gPiArCQkJCSAgICAg IHRlc3RfY29uZmlnLT5tb2RlX2hlaWdodCwKPiA+ICsJCQkJICAgICAgaWd0X2JwcF9kZXB0aF90 b19kcm1fZm9ybWF0KHRlc3RfY29uZmlnLT5icHAsCj4gPiArCQkJCQkJCQkgIHRlc3RfY29uZmln LT5kZXB0aCksCj4gPiArCQkJCSAgICAgIHRpbGluZywgJmZiX2luZm8pOwo+ID4gKwo+ID4gKwlp Z3RfaW5mbygiQ1JUQygldSk6WyVkXSIsIGMtPmNydGMsIDApOwo+ID4gKwlrbXN0ZXN0X2R1bXBf bW9kZSgmYy0+bW9kZSk7Cj4gPiArCWRybU1vZGVTZXRDcnRjKGRybV9mZCwgYy0+Y3J0YywgLTEs IDAsIDAsIE5VTEwsIDAsIE5VTEwpOwo+ID4gKwlyZXQgPSBkcm1Nb2RlU2V0Q3J0Yyhkcm1fZmQs IGMtPmNydGMsIGZiX2lkLCAwLCAwLAo+ID4gKwkJCSAgICAgJmMtPmlkLCAxLCAmYy0+bW9kZSk7 Cj4gPiArCXNsZWVwKDUpOwo+ID4gKwlpZiAocmV0IDwgMCkgewo+ID4gKwkJaWd0X3dhcm4oIkZh aWxlZCB0byBzZXQgbW9kZSAoJWR4JWRAJWRIeik6ICVzXG4iLAo+ID4gKwkJCSB0ZXN0X2NvbmZp Zy0+bW9kZV93aWR0aCwgdGVzdF9jb25maWctPm1vZGVfaGVpZ2h0LAo+ID4gKwkJCSBjLT5tb2Rl LnZyZWZyZXNoLCBzdHJlcnJvcihlcnJubykpOwo+ID4gKwkJaWd0X3JlbW92ZV9mYihkcm1fZmQs ICZmYl9pbmZvKTsKPiA+ICsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30K PiA+ICsKPiA+ICsKPiA+ICsvKgo+ID4gKyAqIFJlLXByb2JlIGNvbm5lY3RvcnMgYW5kIGRvIGEg bW9kZXNldCB3aXRoIGFuZCB3aWhvdXQgRFNDCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOgo+ID4g KyAqIDA6IE9uIFN1Y2Nlc3MKPiA+ICsgKiAtMTogT24gZmFpbHVyZQo+ID4gKyAqLwo+ID4gK3N0 YXRpYyBpbnQgdXBkYXRlX2Rpc3BsYXkoc3RydWN0IGRzY19jb25maWcgKnRlc3RfY29uZmlnKQo+ ID4gK3sKPiA+ICsJc3RydWN0IGNvbm5lY3RvciAqY29ubmVjdG9yczsKPiA+ICsJc3RydWN0IGtt c3Rlc3RfY29ubmVjdG9yX2NvbmZpZyBjb25maWc7Cj4gPiArCWludCBjbnQsIGNvbm5fY250ID0g MCwgcmV0ID0gMCwgZWRwX2NudCA9IDAsIGRwX2NudCA9IDA7Cj4gPiArCXVuc2lnbmVkIGxvbmcg Y3J0Y19pZHhfbWFzayA9IC0xVUw7Cj4gPiArCWNoYXIgY29ubl9idWZbMTI4XSA9IHswfTsKPiA+ ICsKPiA+ICsJcmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291cmNlcyhkcm1fZmQpOwo+ID4gKwlp ZiAoIXJlc291cmNlcykgewo+ID4gKwkJaWd0X3dhcm4oImRybU1vZGVHZXRSZXNvdXJjZXMgZmFp bGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKPiA+ICsJCXJldHVybiAtMTsKPiA+ICsJfQo+ ID4gKwo+ID4gKwljb25uZWN0b3JzID0gY2FsbG9jKHJlc291cmNlcy0+Y291bnRfY29ubmVjdG9y cywKPiA+ICsJCQkgICAgc2l6ZW9mKHN0cnVjdCBjb25uZWN0b3IpKTsKPiA+ICsJaWYgKCFjb25u ZWN0b3JzKQo+ID4gKwkJcmV0dXJuIC0xOwo+ID4gKwo+IElzIGl0IHBvc3NpYmxlIHRvIHVzZSBp Z3RfZGlzcGxheV90LCBmb2xsb3dlZCBieSBpZ3RfZGlzcGxheV9yZXF1aXJlIGluIGlndF9maXh0 dXJlPwo+IE9yIGlzIGl0IHdheSB0b28gbXVjaCBvdmVyaGVhZCBpbiBjb2xsZWN0aW5nIGFsbCBu b24tcmVxdWlyZWQgcmVzb3VyY2VzPwo+ID4gKwkvKiBGaW5kIGFueSBjb25uZWN0ZWQgZGlzcGxh eXMgKi8KPiA+ICsJZm9yIChjbnQgPSAwOyBjbnQgPCByZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3Rv cnM7IGNudCsrKSB7Cj4gPiArCQlzdHJ1Y3QgY29ubmVjdG9yICpjID0gJmNvbm5lY3RvcnNbY250 XTsKPiA+ICsJCWMtPmlkID0gcmVzb3VyY2VzLT5jb25uZWN0b3JzW2NudF07Cj4gPiArCQlpZigh a21zdGVzdF9nZXRfY29ubmVjdG9yX2NvbmZpZyhkcm1fZmQsIGMtPmlkLCBjcnRjX2lkeF9tYXNr LAo+ID4gKwkJCQkJCSZjb25maWcpKSB7Cj4gPiArCQkJYy0+bW9kZV92YWxpZCA9IDA7Cj4gPiAr CQkJY29udGludWU7Cj4gPiArCQl9Cj4gPiArCQljLT5jb25uZWN0b3IgPSBjb25maWcuY29ubmVj dG9yOwo+ID4gKwkJYy0+ZW5jb2RlciA9IGNvbmZpZy5lbmNvZGVyOwo+ID4gKwkJYy0+bW9kZSA9 IGNvbmZpZy5kZWZhdWx0X21vZGU7Cj4gPiArCQljLT5jcnRjID0gY29uZmlnLmNydGMtPmNydGNf aWQ7Cj4gPiArCQljLT5waXBlID0gY29uZmlnLnBpcGU7Cj4gPiArCQljLT5tb2RlX3ZhbGlkID0g MTsKPiA+ICsKPiA+ICsJCWlmIChjLT5jb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9N T0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCB8fAo+ID4gKwkJICAgIGMtPmNvbm5lY3Rvci0+Y29u bmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkgewo+ID4gKwo+ID4gKwkJCWlm IChjLT5jb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFAp Cj4gPiArCQkJCWNvbm5fY250ID0gKysgZWRwX2NudDsKPiA+ICsJCQllbHNlCj4gPiArCQkJCWNv bm5fY250ID0gKysgZHBfY250Owo+ID4gKwkJCWlmIChjLT5jb25uZWN0b3ItPmNvbm5lY3Rpb24g PT0gRFJNX01PREVfQ09OTkVDVEVEKSB7Cj4gPiArCQkJCXNwcmludGYoY29ubl9idWYsICIlcy0l ZCIsCj4gPiArCQkJCQlrbXN0ZXN0X2Nvbm5lY3Rvcl90eXBlX3N0cihjLT5jb25uZWN0b3ItPmNv bm5lY3Rvcl90eXBlKSwKPiA+ICsJCQkJCWNvbm5fY250KTsKPiA+ICsJCQkJdGVzdF9jb25maWct PmRzY19zdXBwb3J0ZWQgPQo+ID4gKwkJCQkJZ2V0X2RwX2RzY19zdXBwb3J0KGNvbm5fYnVmKTsK PiA+ICsJCQkJaWYgKCFzdHJjbXAodGVzdF9jb25maWctPnRlc3RfbmFtZSwKPiA+ICsJCQkJCSAg ICAiZm9yY2VfZHNjX2VuYWJsZV9iYXNpYyIpKSB7Cj4gV2lsbCB0aGlzIGNvZGUgcGF0aCBydW4/ Cklnbm9yZSB0aGUgYWJvdmUgY29tbWVudC4KClRoYW5rcywKUksKPiA+ICsJCQkJCWlmICh0ZXN0 X2NvbmZpZy0+ZHNjX3N1cHBvcnRlZCkgewo+ID4gKwkJCQkJCWlndF9pbmZvICgiRFNDIGlzIHN1 cHBvcnRlZCBvbiAlc1xuIiwKPiA+ICsJCQkJCQkJICBjb25uX2J1Zik7Cj4gPiArCQkJCQkJdGVz dF9jb25maWctPm1vZGVfd2lkdGggPSBjLT5tb2RlLmhkaXNwbGF5Owo+ID4gKwkJCQkJCXRlc3Rf Y29uZmlnLT5tb2RlX2hlaWdodCA9IGMtPm1vZGUudmRpc3BsYXk7Cj4gPiArCQkJCQkJdGVzdF9j b25maWctPmJwcCA9IDMyOwo+ID4gKwkJCQkJCXRlc3RfY29uZmlnLT5kZXB0aCA9IDI0Owo+ID4g KwkJCQkJCXNldF9kcF9kc2NfZW5hYmxlKHRlc3RfY29uZmlnLT5kc2NfZW5hYmxlLAo+ID4gKwkJ CQkJCQkgIGNvbm5fYnVmKTsKPiA+ICsJCQkJCQlyZXQgPSBzZXRfbW9kZShjLCB0ZXN0X2NvbmZp ZywKPiA+ICsJCQkJCQkJICAgICAgIHRydWUpOwo+ID4gKwkJCQkJfSBlbHNlIHsKPiA+ICsJCQkJ CQlpZ3RfaW5mbyAoIkRTQyBpcyBub3Qgc3VwcG9ydGVkIG9uICVzXG4iLAo+ID4gKwkJCQkJCQkg IGNvbm5fYnVmKTsKPiA+ICsJCQkJCX0KPiA+ICsJCQkJfQo+ID4gKwkJCQljcnRjX2lkeF9tYXNr ICY9IH4oMSA8PCBjLT5waXBlKTsKPiA+ICsJCQl9Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ ICsJZnJlZShjb25uZWN0b3JzKTsKPiA+ICsJZHJtTW9kZUZyZWVSZXNvdXJjZXMocmVzb3VyY2Vz KTsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBvcHRfaGFu ZGxlcihpbnQgb3B0LCBpbnQgb3B0X2luZGV4LCB2b2lkICpvcHRfZHVtcCkKPiA+ICt7Cj4gPiAr CWJvb2wgKmR1bXAgPSBvcHRfZHVtcDsKPiA+ICsKPiA+ICsJc3dpdGNoIChvcHQpIHsKPiA+ICsJ Y2FzZSAnaSc6Cj4gPiArCQkqZHVtcCA9IHRydWU7Cj4gPiArCQlicmVhazsKPiA+ICsJZGVmYXVs dDoKPiA+ICsJCWlndF9hc3NlcnQoMCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4g PiArfQo+ID4gKwo+ID4gK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gPiArewo+ ID4gKwljb25zdCBjaGFyICpoZWxwX3N0ciA9Cj4gPiArCQkiICAtLWluZm9cdFx0RHVtcCBJbmZv cm1hdGlvbiBhYm91dCBjb25uZWN0b3JzLiAoc3RpbGwgbmVlZHMgRFJNIGFjY2VzcylcbiI7Cj4g PiArCXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0gewo+ID4gKwkJeyJpbmZv IiwgMCwgMCwgJ2knfSwKPiA+ICsJCXswLCAwLCAwLCAwfQo+ID4gKwl9Owo+ID4gKwlpbnQgcmV0 ID0gMDsKPiA+ICsJc3RydWN0IGRzY19jb25maWcgdGVzdF9jb25maWc7Cj4gPiArCWJvb2wgb3B0 X2R1bXAgPSBmYWxzZTsKPiA+ICsJaWd0X3N1YnRlc3RfaW5pdF9wYXJzZV9vcHRzKCZhcmdjLCBh cmd2LCAiIiwgbG9uZ19vcHRpb25zLCBoZWxwX3N0ciwKPiA+ICsJCQkJICAgIG9wdF9oYW5kbGVy LCAmb3B0X2R1bXApOwo+ID4gKwo+ID4gKwlpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7Cj4gPiAr Cj4gPiArCWlndF9maXh0dXJlIHsKPiA+ICsJCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUo KTsKPiA+ICsJCWRybV9mZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfQU5ZKTsKPiA+ICsJCWlm IChvcHRfZHVtcCkKPiA+ICsJCQlkdW1wX2luZm8oKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpZ3Rf c3VidGVzdCgiZm9yY2VfZHNjX2VuYWJsZV9iYXNpYyIpIHsKPiA+ICsJCXN0cmNweSh0ZXN0X2Nv bmZpZy50ZXN0X25hbWUsImZvcmNlX2RzY19lbmFibGVfYmFzaWMiKTsKPiA+ICsJCXJldCA9IHVw ZGF0ZV9kaXNwbGF5KCZ0ZXN0X2NvbmZpZyk7Cj4gPiArCQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7 Cj4gPiArCX0KPiA+ICsKPiA+ICsJY2xvc2UoZHJtX2ZkKTsKPiA+ICsKPiA+ICsJaWd0X2Fzc2Vy dF9lcShyZXQsIDApOwo+IElzIHRoaXMgYXNzZXJ0IHJlcXVpcmVkPwo+IAo+IC0gUmFkaGFrcmlz aG5hKFJLKSBTcmlwYWRhCj4gPiArCj4gPiArCWlndF9pbmZvKCJEU0MgdGVzdGluZyBkb25lXG4i KTsKPiA+ICsJaWd0X2V4aXQoKTsKPiA+ICsKPiA+ICt9Cj4gPiAtLSAKPiA+IDIuMTguMAo+ID4g Cj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4g aWd0LWRldiBtYWlsaW5nIGxpc3QKPiA+IGlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4g PiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBt YWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==