From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id E4DBA6E97B for ; Fri, 7 Sep 2018 15:52:13 +0000 (UTC) From: Gwan-gyeong Mun Date: Fri, 7 Sep 2018 18:51:57 +0300 Message-Id: <20180907155157.5798-5-gwan-gyeong.mun@intel.com> In-Reply-To: <20180907155157.5798-1-gwan-gyeong.mun@intel.com> References: <20180907155157.5798-1-gwan-gyeong.mun@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [i-g-t,v4 4/4] kms_plane: Add clipping subtests 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: igt-dev@lists.freedesktop.org Cc: juha-pekka.heikkila@intel.com List-ID: RnJvbTogSW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPgoKQWRkIHBsYW5lIGNsaXBwaW5n IHN1YnRlc3RzIGRpc3BsYXlpbmcgYSBzaW5nbGUgY2xpcHBlZCBwbGFuZSwgd2l0aCB0aGUKZm9s bG93aW5nIHRlc3QgY2FzZXM6CmEpIHBsYW5lIGNvdmVyaW5nIHRoZSB3aG9sZSBzY3JlZW4sIHNv IHRoYXQgY2xpcHBpbmcgaXMgZG9uZSBhdCBhbGwgNAogICBzY3JlZW4gZWRnZXMKYikgcGxhbmUg YXQgZWl0aGVyIG9mIHRoZSA0IGNvcm5lcnMgb2YgdGhlIHNjcmVlbiBjbGlwcGVkLCBzbyB0aGF0 IGEKICAgNHg0IHBpeGVsIHBhcnQgb2YgdGhlIHBsYW5lIGlzIHZpc2libGUKYykgcGxhbmUgYXQg ZWl0aGVyIG9mIHRoZSA0IGNvcm5lcnMgb2YgdGhlIHNjcmVlbiBjbGlwcGVkLCBzbyB0aGF0IGEK ICAgMngyIHBpeGVsIHBhcnQgb2YgdGhlIHBsYW5lIGlzIHZpc2libGUKCkVhY2ggb2YgdGhlIGFi b3ZlIGNhc2VzIGFyZSB0ZXN0ZWQgd2l0aCBhbGwgc3VwcG9ydGVkIHRpbGluZyBtb2RlcywKcm90 YXRpb24gZGVncmVlcywgZGlmZmVyaW5nIHBpeGVsIGZvcm1hdCBzaXplcyAob25seSAxNiBicHAg YW5kIDMyIGJwcApmb3Igbm93KSBhbmQgY2VydGFpbiBwbGFuZXMuIFdoaWxlIHRoZSBhKSBhbmQg YikgY2FzZXMgYWJvdmUgYXJlCnN1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zIGMpIGlzIG5vdCBm dWxseSBzdXBwb3J0ZWQgb24gR0xLIGFuZCBDTkwKKHdoaWNoIHdhcyB0aGUgcHJpbWFyeSBtb3Rp dmF0aW9uIGZvciB0aGlzIHRlc3RjYXNlKS4KCnYyOgotIEFkZCBtaXNzaW5nIHJlc2V0IGZvciB0 aGUgb3V0cHV0IHBpcGUgYWZ0ZXIgZmluaXNoaW5nIHRoZSB0ZXN0IGZvciBhCiAgZ2l2ZW4gb3V0 cHV0LCBmaXhpbmcgdGhlCiAgIkRQLTEgYW5kIGVEUC0xIGFyZSBib3RoIHRyeWluZyB0byB1c2Ug cGlwZSBBIiB0eXBlIG9mIGVycm9ycy4KLSBVc2UgLUVSQU5HRSBpbnN0ZWFkIG9mIC1FSU5WQUwg dG8gY2hlY2sgdGhlIHJldHVybiBjb2RlIGZvcgogIHVuc3VwcG9ydGVkIHBsYW5lIFggcG9zaXRp b25zLCBiYXNlZCBvbiB0aGUgbGF0ZXN0IGtlcm5lbCBjb2RlLgotIEFkZCBjb21tZW50IGV4cGxh aW5pbmcgdGhlIGRlcGVuZGVuY2llcyB3aGVuIGRvaW5nIGEgdW5pdmVyc2FsCiAgY29tbWl0LgoK djM6IChHd2FuLWd5ZW9uZykKLSBBZGQgbWlzc2luZyByZWxlYXNlIG9mIGZyYW1lYnVmZmVyIG9u IGNyZWF0ZV9mYl9mb3JfbW9kZV9fY2xpcHBpbmdfZGlzcGxheSgpCiAgZnVuY3Rpb24uCi0gQWRk IHVzaW5nIG11bHRpIHBsYW5lcyBwZXIgc2luZ2xlIGRpc3BsYXkgY29tbWl0IG9uIGNsaXBwaW5n IHRlc3Qgb2YKICA0IGNvcm5lcnMuIChEYW5pZWwpCiAgSXQgZW5hYmxlcyB0aGUgaW1wcm92aW5n IG9mIHRlc3Qgc3BlZWQuIElmIG51bWJlciBvZiBwbGFuZXMgaXMgb3ZlcgogIHRoYW4gNCwgaXQg dXNlcyBmb3VyIHBsYW5lcyBmcm9tIGZpcnN0IHBsYW5lIHRvIG5leHQgZm91ciBwbGFuZXMuCiAg KDQgcGxhbmVzIG1ha2UgdGVzdGluZyBvZiA0IGNvcm5lcnMgcG9zc2libGUgYXMgMSBkaXNwbGF5 IGNvbW1pdC4pCiAgSWYgbnVtYmVyIG9mIHBsYW5lcyBpcyBvdmVyIHRoYW4gMiBhbmQgbGVzcyB0 aGFuIDQsIGl0IHVzZXMgdHdvIHBsYW5lcwogIGZyb20gZmlyc3QgcGxhbmUgdG8gbmV4dCB0d28g cGxhbmVzLiAoMiBwbGFuZXMgbWFrZSB0ZXN0aW5nIG9mIDQgY29ybmVycwogIHBvc3NpYmxlIGFz IDIgZGlzcGxheSBjb21taXQuKSBSZXN0IG9mIGNhc2VzIGl0IHVzZXMgb25seSBmaXJzdCBwbGFu ZS4KICAoMSBwbGFuZSBtYWtlcyB0ZXN0aW5nIG9mIDQgY29ybmVycyBwb3NzaWJsZSBhcyA0IGRp c3BsYXkgY29tbWl0LikKICBJdCBjaGFuZ2VzIHRvIHVzaW5nIG9mIGNlcnRhaW4gcGxhbmVzIGZy b20gdXNpbmcgb2YgYWxsIHN1cHBvcnRlZCBwbGFuZXMuCiAgQW5kIGEgY3Vyc29yIHBsYW5lIGNh biBiZSBvbmUgb2YgdGVzdCBwbGFuZXMuCgp2NDogKEltcmUpCi0gQ2hhbmdlIGEgY29tbWl0IHN0 eWxlIHRvIGxlZ2FjeSBmcm9tIHVuaXZlcnNhbCB3aGVuIHRoaXMgZ3JhYnMgYSBjcmMgZm9yCiAg ZnJhbWVidWZmZXIuIFRoZSB1bml2ZXJzYWwgY29tbWl0IGhhcyBpc3N1ZXMgd2l0aCBtdWx0aXBs ZSBvdXRwdXRzLiBBcwogIHRoZSBsZWdhY3kgc3R5bGUgY29tbWl0IGRvZXMgbm90IGFsbG93IGNo YW5naW5nIG9mIHByaW1hcnkgcGxhbmUgcm90YXRpb24KICBvbiBub24tZmlyc3QgY29tbWl0LCB0 aGlzIGNhbGxzIGlndF9kaXNwbGF5X3Jlc2V0KCkgdG8gbWFrZSBhIGZpcnN0CiAgY29tbWl0IHN0 YXRlIHByaW9yIHRvIGNhbGwgdGVzdF9ncmFiX2NyY19mb3JfZmIoKS4KLSBVcGRhdGUgdmFyaWFi bGUgbmFtaW5nIG1vcmUgY2xlYXJseQogIGNsaXBfc3F1YXJlc19jbnQgLT4gcGxhbmVfY250Ci0g T3B0aW1pemUgdGVzdF9wbGFuZV9jbGlwcGluZ19zcXVhcmVzKCkgZnVuY3Rpb24KLSBVcGRhdGUg aW5kZW50YXRpb24gYXMga2VybmVsIHN0eWxlCgpTaWduZWQtb2ZmLWJ5OiBJbXJlIERlYWsgPGlt cmUuZGVha0BpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IEd3YW4tZ3llb25nIE11biA8Z3dhbi1n eWVvbmcubXVuQGludGVsLmNvbT4KQ2M6IE1pa2EgS2Fob2xhIDxtaWthLmthaG9sYUBpbnRlbC5j b20+CkNjOiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwu Y29tPgpDYzogSnVoYS1QZWtrYSBIZWlra2lsw6QgPGp1aGEtcGVra2EuaGVpa2tpbGFAaW50ZWwu Y29tPgpSZXZpZXdlZC1ieTogQXJrYWRpdXN6IEhpbGVyIDxhcmthZGl1c3ouaGlsZXJAaW50ZWwu Y29tPiAodjEpCi0tLQogdGVzdHMva21zX3BsYW5lLmMgfCA1MTYgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDUxNiBpbnNlcnRp b25zKCspCgpkaWZmIC0tZ2l0IGEvdGVzdHMva21zX3BsYW5lLmMgYi90ZXN0cy9rbXNfcGxhbmUu YwppbmRleCAzZjQ4YzgyMS4uYWM0NzUzNTggMTAwNjQ0Ci0tLSBhL3Rlc3RzL2ttc19wbGFuZS5j CisrKyBiL3Rlc3RzL2ttc19wbGFuZS5jCkBAIC00MSwxMSArNDEsNDAgQEAgdHlwZWRlZiBzdHJ1 Y3QgewogCWludCBkcm1fZmQ7CiAJaWd0X2Rpc3BsYXlfdCBkaXNwbGF5OwogCWlndF9waXBlX2Ny Y190ICpwaXBlX2NyYzsKKwl1aW50MzJfdCBkZXZpZDsKKwl1aW50NjRfdCBtYXhfY3VydzsKKwl1 aW50NjRfdCBtYXhfY3VyaDsKIH0gZGF0YV90OwogCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IHg7 CisJaW50IHk7CisJaW50IHNpemU7Cit9IHNxdWFyZV90OworCiBzdGF0aWMgY29sb3JfdCByZWQg ICA9IHsgMS4wZiwgMC4wZiwgMC4wZiB9Owogc3RhdGljIGNvbG9yX3QgZ3JlZW4gPSB7IDAuMGYs IDEuMGYsIDAuMGYgfTsKK3N0YXRpYyBjb2xvcl90IHllbGxvdyA9IHsgMS4wZiwgMS4wZiwgMC4w ZiB9Owogc3RhdGljIGNvbG9yX3QgYmx1ZSAgPSB7IDAuMGYsIDAuMGYsIDEuMGYgfTsKK3N0YXRp YyBjb2xvcl90IHdoaXRlID0geyAxLjBmLCAxLjBmLCAxLjBmIH07CitzdGF0aWMgc3F1YXJlX3Qg Y2xpcF9zcXVhcmVzWzRdOworCisvKgorICogU2l6ZSBvZiBhIHNxdWFyZSBwbGFuZSB1c2VkIHRv IHRlc3QgY2xpcHBpbmcgYXQgdGhlIDQgY291cm5lcnMgb2YgdGhlCisgKiBkaXNwbGF5LgorICov CisjZGVmaW5lIENMSVBQRURfUExBTkVfU01BTExfU0laRQk2NAorCisvKgorICogVmlzaWJsZSBw bGFuZSBzaXplIGFmdGVyIGNsaXBwaW5nIHRoYXQgd29ya3Mgb24gYWxsIHBsYXRmb3JtcyBmb3Ig YWxsIHBsYW5lCisgKiBwb3NpdGlvbnMuCisgKiBUaGUgZXhjZXB0aW9ucyBhcmUgR0xLL0NOTCB3 aGVyZSB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IHRoaXMgbWFueSBwaXhlbHMKKyAqIHZpc2libGUg ZnJvbSB0aGUgcGxhbmUgYWZ0ZXIgaXQncyBjbGlwcGVkIHRvIHRoZSBsZWZ0L3JpZ2h0IGVkZ2Ug b2YgdGhlCisgKiBzY3JlZW4uIE5vdCBtZWV0aW5nIHRoaXMgY29uZGl0aW9uIG1heSB0cmlnZ2Vy IEZJRk8gdW5kZXJmbG93cyBhbmQgc2NyZWVuCisgKiBjb3JydXB0aW9uLiBUaGUgY3Vyc29yIHBs YW5lIGlzIGFuIGV4Y2VwdGlvbiB0aGF0IGRvZXNuJ3QgaGF2ZSB0aGlzIHByb2JsZW0KKyAqIGV2 ZW4gb24gR0xLL0NOTC4KKyAqLworI2RlZmluZSBDTElQUEVEX1BMQU5FX01JTl9WQUxJRAkJNAog CiAvKgogICogQ29tbW9uIGNvZGUgYWNyb3NzIGFsbCB0ZXN0cywgYWN0aW5nIG9uIGRhdGFfdApA QCAtMTQyLDYgKzE3MSw2OSBAQCBjcmVhdGVfZmJfZm9yX21vZGVfX3Bvc2l0aW9uKGRhdGFfdCAq ZGF0YSwgZHJtTW9kZU1vZGVJbmZvICptb2RlLAogCWlndF9wdXRfY2Fpcm9fY3R4KGRhdGEtPmRy bV9mZCwgZmIsIGNyKTsKIH0KIAorLyoKKyAqIENyZWF0ZSBhIHNxdWFyZSBGQiBmb3IgdGhlIHBs YW5lIGluIHRoZSBjbGlwcGluZyB0ZXN0LCBkaXZpZGVkIGludG8gNAorICogcXVhcnRlcnMgc29s aWQgZmlsbGVkIHdpdGggZGlmZmVyZW50IGNvbG9ycy4gVXNlIHRoZSBnaXZlbiB0aWxpbmcsIGZv cm1hdAorICogYW5kIHNpemUgYW5kIHJvdGF0ZSB0aGUgRkIgY2xvY2t3aXNlIHdpdGggdGhlIGdp dmVuIHJvdGF0aW9uIGRlZ3JlZXMsIHNvCisgKiB0aGF0IHRoZSBjb3VudGVyY2xvY2t3aXNlIHJv dGF0aW9uIHdpdGggdGhlIHNhbWUgZGVncmVlcyBkb25lIGJ5IHRoZSBIVworICogd2lsbCBhbHdh eXMgcmVzdWx0IGluIHRoZSBzYW1lIHJlZmVyZW5jZSBGQiBpbWFnZS4KKyAqLworc3RhdGljIHZv aWQKK2NyZWF0ZV9mYl9mb3JfbW9kZV9fY2xpcHBpbmdfcGxhbmUoZGF0YV90ICpkYXRhLCBpZ3Rf cm90YXRpb25fdCByb3RhdGlvbiwKKwkJCQkgICB1aW50NjRfdCB0aWxpbmcsCisJCQkJICAgdWlu dDMyX3QgZm9ybWF0LAorCQkJCSAgIGludCBzaXplLAorCQkJCSAgIHN0cnVjdCBpZ3RfZmIgKmZi IC8qIG91dCAqLykKK3sKKwljb2xvcl90IGNvcm5lcnNbXSA9IHsgcmVkLCB3aGl0ZSwgeWVsbG93 LCBibHVlIH07CisJY29sb3JfdCBjb2xvcjsKKwl1bnNpZ25lZCBpbnQgZmJfaWQ7CisJY2Fpcm9f dCAqY3I7CisJY29uc3QgaW50IHFzaXplID0gc2l6ZSAvIDI7CisJaW50IGlkeDsKKworCWZiX2lk ID0gaWd0X2NyZWF0ZV9mYihkYXRhLT5kcm1fZmQsIHNpemUsIHNpemUsIGZvcm1hdCwgdGlsaW5n LCBmYik7CisJaWd0X2Fzc2VydChmYl9pZCk7CisKKwljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRh dGEtPmRybV9mZCwgZmIpOworCisJc3dpdGNoIChyb3RhdGlvbikgeworCWNhc2UgSUdUX1JPVEFU SU9OXzA6CisJCWlkeCA9IDA7CisJCWJyZWFrOworCWNhc2UgSUdUX1JPVEFUSU9OXzkwOgorCQlp ZHggPSAzOworCQlicmVhazsKKwljYXNlIElHVF9ST1RBVElPTl8xODA6CisJCWlkeCA9IDI7CisJ CWJyZWFrOworCWNhc2UgSUdUX1JPVEFUSU9OXzI3MDoKKwkJaWR4ID0gMTsKKwkJYnJlYWs7CisJ ZGVmYXVsdDoKKwkJaWd0X2Fzc2VydCgwKTsKKwl9CisKKwljb2xvciA9IGNvcm5lcnNbaWR4XTsK KwlpZ3RfcGFpbnRfY29sb3IoY3IsIDAsIDAsIHFzaXplLCBxc2l6ZSwKKwkJCWNvbG9yLnJlZCwg Y29sb3IuZ3JlZW4sIGNvbG9yLmJsdWUpOworCisJY29sb3IgPSBjb3JuZXJzWygrK2lkeCkgJSA0 XTsKKwlpZ3RfcGFpbnRfY29sb3IoY3IsIHFzaXplLCAwLCBxc2l6ZSwgcXNpemUsCisJCQljb2xv ci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlKTsKKworCWNvbG9yID0gY29ybmVyc1soKytp ZHgpICUgNF07CisJaWd0X3BhaW50X2NvbG9yKGNyLCBxc2l6ZSwgcXNpemUsIHFzaXplLCBxc2l6 ZSwKKwkJCWNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJsdWUpOworCisJY29sb3IgPSBj b3JuZXJzWygrK2lkeCkgJSA0XTsKKwlpZ3RfcGFpbnRfY29sb3IoY3IsIDAsIHFzaXplLCBxc2l6 ZSwgcXNpemUsCisJCQljb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlKTsKKworCWln dF9hc3NlcnQoY2Fpcm9fc3RhdHVzKGNyKSA9PSAwKTsKKwljYWlyb19kZXN0cm95KGNyKTsKK30K KwogZW51bSB7CiAJVEVTVF9QT1NJVElPTl9GVUxMWV9DT1ZFUkVEID0gMSA8PCAwLAogCVRFU1Rf RFBNUyA9IDEgPDwgMSwKQEAgLTU0NSw2ICs2MzcsNDE0IEBAIHRlc3RfcGl4ZWxfZm9ybWF0cyhk YXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlKQogCX0KIH0KIAorc3RhdGljIGJvb2wKK2JvZ3Vz X3BsYW5lX2NvbmYodWludDMyX3QgZGV2aWQsIGlndF9wbGFuZV90ICpwbGFuZV9vYmosCisJCSBp bnQgaGRpc3BsYXksIGludCBwbGFuZV94LCBpbnQgcGxhbmVfd2lkdGgpCit7CisJaWYgKCEoSVNf R0VNSU5JTEFLRShkZXZpZCkgfHwgSVNfQ0FOTk9OTEFLRShkZXZpZCkpKQorCQlyZXR1cm4gZmFs c2U7CisKKwlpZiAocGxhbmVfb2JqLT50eXBlID09IERSTV9QTEFORV9UWVBFX0NVUlNPUikKKwkJ cmV0dXJuIGZhbHNlOworCisJaWYgKHBsYW5lX3ggKyBwbGFuZV93aWR0aCA+PSBDTElQUEVEX1BM QU5FX01JTl9WQUxJRCAmJgorCSAgICBwbGFuZV94IDw9IGhkaXNwbGF5IC0gQ0xJUFBFRF9QTEFO RV9NSU5fVkFMSUQpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0 aWMgYm9vbAorc3VwcG9ydGVkX3BsYW5lX2NvbmYoZGF0YV90ICpkYXRhLCBpbnQgcGxhbmVfdHlw ZSwgdWludDY0X3QgdGlsaW5nLAorCQkgICAgIHVpbnQzMl90IGZvcm1hdCwgaWd0X3JvdGF0aW9u X3Qgcm90YXRpb24sCisJCSAgICAgZHJtTW9kZU1vZGVJbmZvICptb2RlLAorCQkgICAgIGludCBw bGFuZV94LCBpbnQgcGxhbmVfeSwgaW50IHBsYW5lX3NpemUpCit7CisJaWYgKGludGVsX2dlbihk YXRhLT5kZXZpZCkgPCA5ICYmCisJICAgIHRpbGluZyAhPSBMT0NBTF9EUk1fRk9STUFUX01PRF9O T05FKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBPbiBHRU48OSB0aGUgcHJpbWFyeSBwbGFuZSBt dXN0IGNvdmVyIHRoZSBmdWxsIHNjcmVlbi4gKi8KKwlpZiAoaW50ZWxfZ2VuKGRhdGEtPmRldmlk KSA8IDkgJiYKKwkgICAgcGxhbmVfdHlwZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZICYmCisJ ICAgIChwbGFuZV94ID4gMCB8fCBwbGFuZV95ID4gMCB8fAorCSAgICAgKHBsYW5lX3ggKyBwbGFu ZV9zaXplIDwgbW9kZS0+aGRpc3BsYXkpIHx8CisJICAgICAocGxhbmVfeSArIHBsYW5lX3NpemUg PCBtb2RlLT52ZGlzcGxheSkpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAocGxhbmVfdHlwZSA9 PSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpIHsKKwkJLyogRm9yIGN1cnNvciBwbGFuZXMgb25seSBs aW5lYXIvYWxwaGEgZm9ybWF0IGlzIHN1cHBvcnRlZC4gKi8KKwkJaWYgKHRpbGluZyAhPSBMT0NB TF9EUk1fRk9STUFUX01PRF9OT05FIHx8CisJCSAgICBmb3JtYXQgIT0gRFJNX0ZPUk1BVF9BUkdC ODg4OCkKKwkJCXJldHVybiBmYWxzZTsKKworCQlpZiAocGxhbmVfc2l6ZSA+IGRhdGEtPm1heF9j dXJ3IHx8IHBsYW5lX3NpemUgPiBkYXRhLT5tYXhfY3VyaCkKKwkJCXJldHVybiBmYWxzZTsKKwl9 IGVsc2UgeworCQkvKgorCQkgKiBGb3Igbm9uLWN1cnNvciBwbGFuZXMgZm9ybWF0cyB3aXRoIGFs cGhhIG1heSByZXN1bHQgaW4KKwkJICogdW5kZXRlcm1pbmlzdGljIENSQ3MsIHdlIHVzZSB0aGUg c2FtZSBzaXplZAorCQkgKiBub24tYWxwaGEgWFJHQjg4ODggZm9ybWF0IGluc3RlYWQuCisJCSAq LworCQlpZiAoZm9ybWF0ID09IERSTV9GT1JNQVRfQVJHQjg4ODgpCisJCQlyZXR1cm4gZmFsc2U7 CisKKwkJaWYgKGZvcm1hdCA9PSBEUk1fRk9STUFUX1JHQjU2NSAmJgorCQkgICAgaW50ZWxfZ2Vu KGRhdGEtPmRldmlkKSA8IDkgJiYKKwkJICAgICFJU19WQUxMRVlWSUVXKGRhdGEtPmRldmlkKSAm JiAhSVNfQ0hFUlJZVklFVyhkYXRhLT5kZXZpZCkpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJ LyogUkdCNTY1IHdpdGggcm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3Igbm93LiAqLworCWlm IChmb3JtYXQgPT0gRFJNX0ZPUk1BVF9SR0I1NjUgJiYgcm90YXRpb24gIT0gSUdUX1JPVEFUSU9O XzApCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogQ3JlYXRl IGEgc3F1YXJlIHJlZmVyZW5jZSBGQiBmb3IgdGhlIHdob2xlIHNjcmVlbiBpbiB0aGUgY2xpcHBp bmcgdGVzdCwKKyAqIHdpdGggdGhlIGdpdmVuIHRlc3QgcGxhbmUgcG9zaXRpb24gYW5kIHNpemUu IFNlZQorICogY3JlYXRlX2ZiX2Zvcl9tb2RlX19jbGlwcGluZ19wbGFuZSgpIGZvciB0aGUgbGF5 b3V0IG9mIHRoZSB0ZXN0IHBsYW5lLgorICovCitzdGF0aWMgdm9pZAorY3JlYXRlX2ZiX2Zvcl9t b2RlX19jbGlwcGluZ19kaXNwbGF5KGRhdGFfdCAqZGF0YSwgZHJtTW9kZU1vZGVJbmZvICptb2Rl LAorCQkJCSAgICAgc3F1YXJlX3QgKmNsaXBfc3F1YXJlcywKKwkJCQkgICAgIGludCBwbGFuZV9j bnQsCisJCQkJICAgICBzdHJ1Y3QgaWd0X2ZiICpmYiAvKiBvdXQgKi8pCit7CisJaW50IHBsYW5l OworCXN0cnVjdCBpZ3RfZmIgcGxhbmVfZmJzWzRdOworCXVuc2lnbmVkIGludCBmYl9pZDsKKwlj YWlyb190ICpjcjsKKwljYWlyb19zdXJmYWNlX3QgKnNyY3NbNF07CisKKwlmYl9pZCA9IGlndF9j cmVhdGVfZmIoZGF0YS0+ZHJtX2ZkLAorCQkJICAgICAgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZk aXNwbGF5LAorCQkJICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwkJCSAgICAgIExPQ0FMX0RS TV9GT1JNQVRfTU9EX05PTkUsCisJCQkgICAgICBmYik7CisJaWd0X2Fzc2VydChmYl9pZCk7CisK KwljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRhdGEtPmRybV9mZCwgZmIpOworCWlndF9wYWludF9j b2xvcihjciwgMCwgMCwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAorCQkJMCwgMCwg MCk7CisKKwlmb3IgKHBsYW5lID0gMDsgcGxhbmUgPCBwbGFuZV9jbnQ7IHBsYW5lKyspIHsKKwkJ Y3JlYXRlX2ZiX2Zvcl9tb2RlX19jbGlwcGluZ19wbGFuZShkYXRhLCBJR1RfUk9UQVRJT05fMCwK KwkJCQkJCSAgIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkJCQkgICBEUk1fRk9STUFU X1hSR0I4ODg4LAorCQkJCQkJICAgY2xpcF9zcXVhcmVzW3BsYW5lXS5zaXplLAorCQkJCQkJICAg JnBsYW5lX2Zic1twbGFuZV0pOworCisJCXNyY3NbcGxhbmVdID0gaWd0X2dldF9jYWlyb19zdXJm YWNlKGRhdGEtPmRybV9mZCwKKwkJCQkJCSAgICZwbGFuZV9mYnNbcGxhbmVdKTsKKwkJY2Fpcm9f c2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBzcmNzW3BsYW5lXSwKKwkJCQkJIGNsaXBfc3F1YXJlc1tw bGFuZV0ueCwKKwkJCQkJIGNsaXBfc3F1YXJlc1twbGFuZV0ueSk7CisJCWNhaXJvX3JlY3Rhbmds ZShjciwKKwkJCQljbGlwX3NxdWFyZXNbcGxhbmVdLngsCisJCQkJY2xpcF9zcXVhcmVzW3BsYW5l XS55LAorCQkJCWNsaXBfc3F1YXJlc1twbGFuZV0uc2l6ZSwKKwkJCQljbGlwX3NxdWFyZXNbcGxh bmVdLnNpemUpOworCQljYWlyb19maWxsKGNyKTsKKwl9CisKKwlpZ3RfYXNzZXJ0KGNhaXJvX3N0 YXR1cyhjcikgPT0gMCk7CisJY2Fpcm9fZGVzdHJveShjcik7CisKKwlmb3IgKHBsYW5lID0gMDsg cGxhbmUgPCBwbGFuZV9jbnQ7IHBsYW5lKyspIHsKKwkJY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHNy Y3NbcGxhbmVdKTsKKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZwbGFuZV9mYnNbcGxh bmVdKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3BsYW5lX2NsaXBwaW5nX2Zvcm1hdChk YXRhX3QgKmRhdGEsCisJCQkgICBlbnVtIHBpcGUgcGlwZSwKKwkJCSAgIGlndF9vdXRwdXRfdCAq b3V0cHV0LAorCQkJICAgZHJtTW9kZU1vZGVJbmZvICptb2RlLAorCQkJICAgc3F1YXJlX3QgKmNs aXBfc3F1YXJlcywKKwkJCSAgIGludCBwbGFuZV9jbnQsCisJCQkgICB1aW50NjRfdCB0aWxpbmcs CisJCQkgICBpZ3Rfcm90YXRpb25fdCByb3RhdGlvbiwKKwkJCSAgIHVpbnQzMl90IGZvcm1hdCwK KwkJCSAgIGlndF9jcmNfdCAqcmVmZXJlbmNlX2NyYykKK3sKKwlpbnQgcGxhbmU7CisJaWd0X3Bs YW5lX3QgKnBsYW5lX29ianNbNF07CisJc3RydWN0IGlndF9mYiBwbGFuZV9mYnNbNF07CisJaWd0 X2NyY190IGNyYzsKKwlpbnQgcmV0OworCWJvb2wgYm9ndXNfcGxhbmVzID0gZmFsc2U7CisKKwlt ZW1zZXQocGxhbmVfb2JqcywgMCwgc2l6ZW9mKHBsYW5lX29ianMpKTsKKworCWlndF9kZWJ1Zygi cm90YXRpb24gJXMgdGlsaW5nICVzIGZvcm1hdCAlc1xuIiwKKwkJICBpZ3Rfcm90YXRpb25fZGVn cmVlc19zdHIocm90YXRpb24pLAorCQkgIGlndF90aWxpbmdfc3RyKHRpbGluZyksCisJCSAgaWd0 X2Zvcm1hdF9zdHIoZm9ybWF0KSk7CisKKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlw ZSk7CisKKwlmb3IgKHBsYW5lID0gMDsgcGxhbmUgPCBwbGFuZV9jbnQgOyBwbGFuZSsrKSB7CisJ CWlndF9wbGFuZV90ICpvYmogPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZShvdXRwdXQsIHBsYW5lKTsK KwkJc3RydWN0IGlndF9mYiAqZmIgPSAmcGxhbmVfZmJzW3BsYW5lXTsKKwkJaW50IHggPSBjbGlw X3NxdWFyZXNbcGxhbmVdLng7CisJCWludCB5ID0gY2xpcF9zcXVhcmVzW3BsYW5lXS55OworCQlp bnQgc2l6ZSA9IGNsaXBfc3F1YXJlc1twbGFuZV0uc2l6ZTsKKwkJdWludDY0X3QgX3RpbGluZyA9 IHRpbGluZzsKKwkJdWludDMyX3QgX2Zvcm1hdCA9IGZvcm1hdDsKKworCQlpZiAob2JqLT50eXBl ID09IERSTV9QTEFORV9UWVBFX0NVUlNPUikgeworCQkJX3RpbGluZyA9IExPQ0FMX0RSTV9GT1JN QVRfTU9EX05PTkU7CisJCQlfZm9ybWF0ID0gRFJNX0ZPUk1BVF9BUkdCODg4ODsKKwkJfQorCisJ CWlmICghc3VwcG9ydGVkX3BsYW5lX2NvbmYoZGF0YSwgb2JqLT50eXBlLCBfdGlsaW5nLCBfZm9y bWF0LAorCQkJCQkgIHJvdGF0aW9uLCBtb2RlLCB4LCB5LCBzaXplKSkKKwkJCWdvdG8gb3V0Owor CisJCWNyZWF0ZV9mYl9mb3JfbW9kZV9fY2xpcHBpbmdfcGxhbmUoZGF0YSwgcm90YXRpb24sX3Rp bGluZywKKwkJCQkJCSAgIF9mb3JtYXQsIHNpemUsIGZiKTsKKworCQlpZ3RfcGxhbmVfc2V0X2Zi KG9iaiwgZmIpOworCQlpZ3RfZmJfc2V0X3Bvc2l0aW9uKGZiLCBvYmosIDAsIDApOworCisJCWln dF9wbGFuZV9zZXRfc2l6ZShvYmosIHNpemUsIHNpemUpOworCQlpZ3RfcGxhbmVfc2V0X3JvdGF0 aW9uKG9iaiwgcm90YXRpb24pOworCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKG9iaiwgeCwgeSk7 CisKKwkJcGxhbmVfb2Jqc1twbGFuZV0gPSBvYmo7CisJfQorCisJLyoKKwkgKiBOb3RlIHRoYXQg YSB1bml2ZXJzYWwgY29tbWl0IGRvZXNuJ3Qgc3VwcG9ydCBmdWxsIG1vZGVzZXRzLCBzbyB3ZQor CSAqIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBvbmx5IG5lZWRzIHRvIGNv bW1pdCBjaGFuZ2VzCisJICogdGhhdCBhcmUgY29tcGF0aWJsZSB3aXRoIGEgZmFzdHNldC4gVGhp cyBzaG91bGQgYmUgZ3VhcmFudGVlZCwKKwkgKiBzaW5jZSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1 bmN0aW9uIHdlIHRvb2sgdGhlIHJlZmVyZW5jZSBDUkMgd2hpY2gKKwkgKiBsZWZ0IHRoZSBkaXNw bGF5IGVuYWJsZWQgd2l0aCB0aGUgbW9kZSB3ZSByZXF1aXJlIGhlcmUgYW5kCisJICogYWZ0ZXJ3 YXJkcyB3ZSBvbmx5IGNoYW5nZSBwbGFuZSBwYXJhbWV0ZXJzIChGQiwgcG9zaXRpb24sIHJvdGF0 aW9uCisJICogZXRjLikuCisJICovCisJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoJmRh dGEtPmRpc3BsYXksIENPTU1JVF9VTklWRVJTQUwpOworCisJZm9yIChwbGFuZSA9IDA7IHBsYW5l IDwgcGxhbmVfY250OyBwbGFuZSsrKSB7CisJCWlmKCFib2d1c19wbGFuZV9jb25mKGRhdGEtPmRl dmlkLCBwbGFuZV9vYmpzW3BsYW5lXSwKKwkJCQkgICAgIG1vZGUtPmhkaXNwbGF5LCBjbGlwX3Nx dWFyZXNbcGxhbmVdLngsCisJCQkJICAgICBjbGlwX3NxdWFyZXNbcGxhbmVdLnNpemUpKSB7CisJ CQlib2d1c19wbGFuZXMgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoYm9ndXNf cGxhbmVzKSB7CisJCWlndF9hc3NlcnQocmV0ID09IDApOworCQlpZ3RfcGlwZV9jcmNfY29sbGVj dF9jcmMoZGF0YS0+cGlwZV9jcmMsICZjcmMpOworCQlpZ3RfYXNzZXJ0X2NyY19lcXVhbChyZWZl cmVuY2VfY3JjLCAmY3JjKTsKKwl9IGVsc2UgeworCQlpZ3RfYXNzZXJ0KHJldCA9PSAtRVJBTkdF KTsKKwl9CisKK291dDoKKwlmb3IgKHBsYW5lID0gMDsgcGxhbmUgPCBwbGFuZV9jbnQ7IHBsYW5l KyspIHsKKwkJaWYgKCFwbGFuZV9vYmpzW3BsYW5lXSkKKwkJCWNvbnRpbnVlOworCQlpZ3RfcGxh bmVfc2V0X2ZiKHBsYW5lX29ianNbcGxhbmVdLCBOVUxMKTsKKwkJaWd0X3BsYW5lX3NldF9yb3Rh dGlvbihwbGFuZV9vYmpzW3BsYW5lXSwgSUdUX1JPVEFUSU9OXzApOworCQlpZ3RfcGxhbmVfc2V0 X3Bvc2l0aW9uKHBsYW5lX29ianNbcGxhbmVdLCAwLCAwKTsKKworCQlpZ3RfcmVtb3ZlX2ZiKGRh dGEtPmRybV9mZCwgJnBsYW5lX2Zic1twbGFuZV0pOworCX0KKworCWlndF9vdXRwdXRfc2V0X3Bp cGUob3V0cHV0LCBQSVBFX0FOWSk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3BsYW5lX2NsaXBw aW5nX3NxdWFyZShkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlLAorCQkJICAgaWd0X291dHB1 dF90ICpvdXRwdXQsIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKKwkJCSAgIHNxdWFyZV90ICpjbGlw X3NxdWFyZXMsIGludCBwbGFuZV9jbnQpCit7CisJY29uc3Qgc3RydWN0IHsKKwkJdWludDY0X3Qg dGlsaW5nOworCQlpZ3Rfcm90YXRpb25fdCByb3RhdGlvbjsKKwl9IHJvdGF0aW9uc1tdID0gewor CQl7IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCQlJR1RfUk9UQVRJT05fMCB9LAorCisJCXsg TE9DQUxfSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCUlHVF9ST1RBVElPTl8wIH0sCisKKwkJeyBM T0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwJSUdUX1JPVEFUSU9OXzAgfSwKKwkJeyBMT0NB TF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwJSUdUX1JPVEFUSU9OXzkwIH0sCisJCXsgTE9DQUxf STkxNV9GT1JNQVRfTU9EX1lfVElMRUQsCUlHVF9ST1RBVElPTl8xODAgfSwKKwkJeyBMT0NBTF9J OTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwJSUdUX1JPVEFUSU9OXzI3MCB9LAorCisJCXsgTE9DQUxf STkxNV9GT1JNQVRfTU9EX1lmX1RJTEVELAlJR1RfUk9UQVRJT05fMCB9LAorCQl7IExPQ0FMX0k5 MTVfRk9STUFUX01PRF9ZZl9USUxFRCwJSUdUX1JPVEFUSU9OXzkwIH0sCisJCXsgTE9DQUxfSTkx NV9GT1JNQVRfTU9EX1lmX1RJTEVELAlJR1RfUk9UQVRJT05fMTgwIH0sCisJCXsgTE9DQUxfSTkx NV9GT1JNQVRfTU9EX1lmX1RJTEVELAlJR1RfUk9UQVRJT05fMjcwIH0sCisJfTsKKwljb25zdCB1 aW50MzJfdCBmb3JtYXRzW10gPSB7CisJCURSTV9GT1JNQVRfUkdCNTY1LAorCQlEUk1fRk9STUFU X1hSR0I4ODg4LAorCQlEUk1fRk9STUFUX0FSR0I4ODg4LAorCX07CisKKwlpZ3RfZmJfdCByZWZl cmVuY2VfZmI7CisJaWd0X2NyY190IHJlZmVyZW5jZV9jcmM7CisKKwlmb3IgKGludCBwbGFuZSA9 IDA7IHBsYW5lIDwgcGxhbmVfY250OyBwbGFuZSsrKSB7CisJCWlndF9pbmZvKCJUZXN0aW5nIGNv bm5lY3RvciAlcyBtb2RlICVkeCVkIHVzaW5nIHBpcGUgJXM6ICVkeCVkQCVkLCVkXG4iLAorCQkJ IGlndF9vdXRwdXRfbmFtZShvdXRwdXQpLAorCQkJIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlz cGxheSwKKwkJCSBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSwKKwkJCSBjbGlwX3NxdWFyZXNbcGxh bmVdLnNpemUsIGNsaXBfc3F1YXJlc1twbGFuZV0uc2l6ZSwKKwkJCSBjbGlwX3NxdWFyZXNbcGxh bmVdLngsIGNsaXBfc3F1YXJlc1twbGFuZV0ueSk7CisJfQorCisJdGVzdF9pbml0KGRhdGEsIHBp cGUpOworCisJY3JlYXRlX2ZiX2Zvcl9tb2RlX19jbGlwcGluZ19kaXNwbGF5KGRhdGEsIG1vZGUs CisJCQkJCSAgICAgY2xpcF9zcXVhcmVzLAorCQkJCQkgICAgIHBsYW5lX2NudCwKKwkJCQkJICAg ICAmcmVmZXJlbmNlX2ZiKTsKKworCS8qCisJICogQXMgYSB0ZXN0X2dyYWJfY3JjX2Zvcl9mYigp IGZ1bmN0aW9uIHVzZXMgYSBsZWdhY3kgc3R5bGUgY29tbWl0CisJICogd2hpY2ggZG9lcyBub3Qg YWxsb3cgY2hhbmdpbmcgb2YgcHJpbWFyeSBwbGFuZSByb3RhdGlvbiBvbiBub24tZmlyc3QKKwkg KiBjb21taXQsIHdlIGNhbGwgaWd0X2Rpc3BsYXlfcmVzZXQoKSB0byBtYWtlIGl0IGFzIGEgZmly c3QgY29tbWl0CisJICogcHJpb3IgdG8gY2FsbCB0ZXN0X2dyYWJfY3JjX2Zvcl9mYigpLgorCSAq LworCWlndF9kaXNwbGF5X3Jlc2V0KCZkYXRhLT5kaXNwbGF5KTsKKwl0ZXN0X2dyYWJfY3JjX2Zv cl9mYihkYXRhLCBvdXRwdXQsIHBpcGUsICZyZWZlcmVuY2VfZmIsICZyZWZlcmVuY2VfY3JjKTsK KwlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJnJlZmVyZW5jZV9mYik7CisKKwlmb3IgKGlu dCByb3RhdGlvbiA9IDA7IHJvdGF0aW9uIDwgQVJSQVlfU0laRShyb3RhdGlvbnMpOyByb3RhdGlv bisrKQorCQlmb3IgKGludCBmb3JtYXQgPSAwOyBmb3JtYXQgPCBBUlJBWV9TSVpFKGZvcm1hdHMp OyBmb3JtYXQrKykKKwkJCXRlc3RfcGxhbmVfY2xpcHBpbmdfZm9ybWF0KGRhdGEsIHBpcGUsIG91 dHB1dCwKKwkJCQkJCSAgIG1vZGUsCisJCQkJCQkgICBjbGlwX3NxdWFyZXMsCisJCQkJCQkgICBw bGFuZV9jbnQsCisJCQkJCQkgICByb3RhdGlvbnNbcm90YXRpb25dLnRpbGluZywKKwkJCQkJCSAg IHJvdGF0aW9uc1tyb3RhdGlvbl0ucm90YXRpb24sCisJCQkJCQkgICBmb3JtYXRzW2Zvcm1hdF0s CisJCQkJCQkgICAmcmVmZXJlbmNlX2NyYyk7CisKKwl0ZXN0X2ZpbmkoZGF0YSk7Cit9CisKK3N0 YXRpYyB2b2lkCit0ZXN0X3BsYW5lX2NsaXBwaW5nX3NxdWFyZXMoZGF0YV90ICpkYXRhLCBlbnVt IHBpcGUgcGlwZSwKKwkJCSAgICBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgZHJtTW9kZU1vZGVJbmZv ICptb2RlLAorCQkJICAgIHNxdWFyZV90ICpjbGlwX3NxdWFyZXMsIGludCBwbGFuZV9jbnQpCit7 CisJZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpICs9IHBsYW5lX2NudCkKKwkJdGVzdF9wbGFuZV9j bGlwcGluZ19zcXVhcmUoZGF0YSwgcGlwZSwgb3V0cHV0LCBtb2RlLAorCQkJCQkgICBjbGlwX3Nx dWFyZXMgKyBpLAorCQkJCQkgICBwbGFuZV9jbnQpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9w bGFuZV9jbGlwcGluZyhkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlKQoreworCWlndF9vdXRw dXRfdCAqb3V0cHV0OworCWludCBjb25uZWN0ZWRfb3V0cyA9IDA7CisKKwlmb3JfZWFjaF92YWxp ZF9vdXRwdXRfb25fcGlwZSgmZGF0YS0+ZGlzcGxheSwgcGlwZSwgb3V0cHV0KSB7CisJCWRybU1v ZGVNb2RlSW5mbyAqbW9kZTsKKwkJaW50IHNxX3NpemU7CisJCWludCBtYXhfcGxhbmVzID0gZGF0 YS0+ZGlzcGxheS5waXBlc1twaXBlXS5uX3BsYW5lczsKKwkJaW50IHBsYW5lX2NudDsKKworCQlw bGFuZV9jbnQgPSBtYXhfcGxhbmVzID49IDQgPyA0IDogbWF4X3BsYW5lcyA+PSAyID8gMiA6IDE7 CisKKwkJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOworCQltb2RlID0gaWd0X291 dHB1dF9nZXRfbW9kZShvdXRwdXQpOworCisJCS8qCisJCSAqIFRlc3Qgd2l0aCBhIHNxdWFyZSBw bGFuZSBiaWdnZXIgdGhhbiBlaXRoZXIgdGhlIHdpZHRoIG9yCisJCSAqIGhlaWdodCBvZiB0aGUg bW9kZS4gVGhpcyBzaG91bGQgcGFzcyBvbiBhbGwgcGxhdGZvcm1zLgorCQkgKi8KKwkJc3Ffc2l6 ZSA9IG1vZGUtPmhkaXNwbGF5ID4gbW9kZS0+dmRpc3BsYXkgPworCQkJICBtb2RlLT5oZGlzcGxh eSA6IG1vZGUtPnZkaXNwbGF5OworCisJCWNsaXBfc3F1YXJlc1swXS54ID0gLTI7CisJCWNsaXBf c3F1YXJlc1swXS55ID0gLTI7CisJCWNsaXBfc3F1YXJlc1swXS5zaXplID0gc3Ffc2l6ZSArIDQ7 CisKKwkJdGVzdF9wbGFuZV9jbGlwcGluZ19zcXVhcmUoZGF0YSwgcGlwZSwgb3V0cHV0LCBtb2Rl LAorCQkJCQkgICBjbGlwX3NxdWFyZXMsIDEpOworCisJCS8qCisJCSAqIFRlc3QgcG9zaXRpb25z IGluIHRoZSA0IGNvcm5lcnMgb2YgdGhlIHNjcmVlbiB3aXRoIGEKKwkJICogQ0xJUFBFRF9QTEFO RV9NSU5fVkFMSUQgeCBDTElQUEVEX1BMQU5FX01JTl9WQUxJRCBzcXVhcmUKKwkJICogdmlzaWJs ZSBmcm9tIHRoZSBwbGFuZS4gVGhlc2Ugc2hvdWxkIHBhc3Mgb24gYWxsIHBsYXRmb3Jtcy4KKwkJ ICovCisJCWNsaXBfc3F1YXJlc1swXS54ID0gLUNMSVBQRURfUExBTkVfU01BTExfU0laRSArCisJ CQkJICAgICBDTElQUEVEX1BMQU5FX01JTl9WQUxJRDsKKwkJY2xpcF9zcXVhcmVzWzBdLnkgPSAt Q0xJUFBFRF9QTEFORV9TTUFMTF9TSVpFICsKKwkJCQkgICAgIENMSVBQRURfUExBTkVfTUlOX1ZB TElEOworCQljbGlwX3NxdWFyZXNbMF0uc2l6ZSA9IENMSVBQRURfUExBTkVfU01BTExfU0laRTsK KworCQljbGlwX3NxdWFyZXNbMV0ueCA9IC1DTElQUEVEX1BMQU5FX1NNQUxMX1NJWkUgKworCQkJ CSAgICAgQ0xJUFBFRF9QTEFORV9NSU5fVkFMSUQ7CisJCWNsaXBfc3F1YXJlc1sxXS55ID0gbW9k ZS0+dmRpc3BsYXkgLQorCQkJCSAgICBDTElQUEVEX1BMQU5FX01JTl9WQUxJRDsKKwkJY2xpcF9z cXVhcmVzWzFdLnNpemUgPSBDTElQUEVEX1BMQU5FX1NNQUxMX1NJWkU7CisKKwkJY2xpcF9zcXVh cmVzWzJdLnggPSBtb2RlLT5oZGlzcGxheSAtCisJCQkJICAgIENMSVBQRURfUExBTkVfTUlOX1ZB TElEOworCQljbGlwX3NxdWFyZXNbMl0ueSA9IC1DTElQUEVEX1BMQU5FX1NNQUxMX1NJWkUgKwor CQkJCSAgICAgQ0xJUFBFRF9QTEFORV9NSU5fVkFMSUQ7CisJCWNsaXBfc3F1YXJlc1syXS5zaXpl ID0gQ0xJUFBFRF9QTEFORV9TTUFMTF9TSVpFOworCisJCWNsaXBfc3F1YXJlc1szXS54ID0gbW9k ZS0+aGRpc3BsYXkgLQorCQkJCSAgICBDTElQUEVEX1BMQU5FX01JTl9WQUxJRDsKKwkJY2xpcF9z cXVhcmVzWzNdLnkgPSBtb2RlLT52ZGlzcGxheSAtCisJCQkJICAgIENMSVBQRURfUExBTkVfTUlO X1ZBTElEOworCQljbGlwX3NxdWFyZXNbM10uc2l6ZSA9IENMSVBQRURfUExBTkVfU01BTExfU0la RTsKKworCQl0ZXN0X3BsYW5lX2NsaXBwaW5nX3NxdWFyZXMoZGF0YSwgcGlwZSwgb3V0cHV0LCBt b2RlLAorCQkJCQkgICAgY2xpcF9zcXVhcmVzLCBwbGFuZV9jbnQpOworCisJCS8qCisJCSAqIFRl c3QgcG9zaXRpb25zIGluIHRoZSA0IGNvcm5lcnMgb2YgdGhlIHNjcmVlbiB3aXRoIGEKKwkJICog MiB4IDIgc3F1YXJlIHZpc2libGUgZnJvbSB0aGUgcGxhbmUuIFRoZXNlIGFyZSB2YWxpZCBvbiBh bGwKKwkJICogcGxhdGZvcm1zIGV4Y2VwdCBvbiBHTEsvQ05MIHdoZXJlIGxlc3MgdGhhbgorCQkg KiBDTElQUEVEX1BMQU5FX01JTl9WQUxJRCBwaXhlbHMgdmlzaWJsZSBvbiB0aGUgbGVmdC9yaWdo dAorCQkgKiBlZGdlcyBvZiB0aGUgc2NyZWVuIG1heSBjYXVzZSBGSUZPIHVuZGVyZmxvdyBhbmQg ZGlzcGxheQorCQkgKiBjb3JydXB0aW9uLgorCQkgKgorCQkgKiBUaGUgY3Vyc29yIHBsYW5lIGlz IGFuIGV4Y2VwdGlvbiB3aXRob3V0IHRoaXMgcHJvYmxlbS4KKwkJICoKKwkJICogVXNlIDIgeCAy IHNpemUgYXMgb3RoZXIgKG9kZCkgc2l6ZXMgbWF5IHJlc3VsdCBpbiBhbgorCQkgKiBpbmNvcnJl Y3QgQ1JDIGZvciB0aGUgY3Vyc29yIHBsYW5lIGV2ZW4gdGhvdWdoIGl0IGRpc3BsYXlzCisJCSAq IGNvcnJlY3RseSBhbmQgY2F1c2VzIG5vIHVuZGVyZmxvdy4KKwkJICovCisJCWNsaXBfc3F1YXJl c1swXS54ID0gLUNMSVBQRURfUExBTkVfU01BTExfU0laRSArIDI7CisJCWNsaXBfc3F1YXJlc1sw XS55ID0gLUNMSVBQRURfUExBTkVfU01BTExfU0laRSArIDI7CisJCWNsaXBfc3F1YXJlc1swXS5z aXplID0gQ0xJUFBFRF9QTEFORV9TTUFMTF9TSVpFOworCisJCWNsaXBfc3F1YXJlc1sxXS54ID0g LUNMSVBQRURfUExBTkVfU01BTExfU0laRSArIDI7CisJCWNsaXBfc3F1YXJlc1sxXS55ID0gbW9k ZS0+dmRpc3BsYXkgLSAyOworCQljbGlwX3NxdWFyZXNbMV0uc2l6ZSA9IENMSVBQRURfUExBTkVf U01BTExfU0laRTsKKworCQljbGlwX3NxdWFyZXNbMl0ueCA9IG1vZGUtPmhkaXNwbGF5IC0gMjsK KwkJY2xpcF9zcXVhcmVzWzJdLnkgPSAtQ0xJUFBFRF9QTEFORV9TTUFMTF9TSVpFICsgMjsKKwkJ Y2xpcF9zcXVhcmVzWzJdLnNpemUgPSBDTElQUEVEX1BMQU5FX1NNQUxMX1NJWkU7CisKKwkJY2xp cF9zcXVhcmVzWzNdLnggPSBtb2RlLT5oZGlzcGxheSAtIDI7CisJCWNsaXBfc3F1YXJlc1szXS55 ID0gbW9kZS0+dmRpc3BsYXkgLSAyOworCQljbGlwX3NxdWFyZXNbM10uc2l6ZSA9IENMSVBQRURf UExBTkVfU01BTExfU0laRTsKKworCQl0ZXN0X3BsYW5lX2NsaXBwaW5nX3NxdWFyZXMoZGF0YSwg cGlwZSwgb3V0cHV0LCBtb2RlLAorCQkJCQkgICAgY2xpcF9zcXVhcmVzLCBwbGFuZV9jbnQpOwor CisJCWNvbm5lY3RlZF9vdXRzKys7CisJfQorCisJaWd0X3NraXBfb24oY29ubmVjdGVkX291dHMg PT0gMCk7Cit9CisKIHN0YXRpYyB2b2lkCiBydW5fdGVzdHNfZm9yX3BpcGVfcGxhbmUoZGF0YV90 ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSkKIHsKQEAgLTU4MSw2ICsxMDgxLDkgQEAgcnVuX3Rlc3Rz X2Zvcl9waXBlX3BsYW5lKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUpCiAJCSAgICAgIGtt c3Rlc3RfcGlwZV9uYW1lKHBpcGUpKQogCQl0ZXN0X3BsYW5lX3Bhbm5pbmcoZGF0YSwgcGlwZSwg VEVTVF9QQU5OSU5HX0JPVFRPTV9SSUdIVCB8CiAJCQkJCSAgICAgICBURVNUX1NVU1BFTkRfUkVT VU1FKTsKKwlpZ3Rfc3VidGVzdF9mKCJwbGFuZS1jbGlwcGluZy1waXBlLSVzLXBsYW5lcyIsCisJ CSAgICAgIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpKQorCQl0ZXN0X3BsYW5lX2NsaXBwaW5nKGRh dGEsIHBpcGUpOwogfQogCiAKQEAgLTU5Myw4ICsxMDk2LDIxIEBAIGlndF9tYWluCiAJaWd0X3Nr aXBfb25fc2ltdWxhdGlvbigpOwogCiAJaWd0X2ZpeHR1cmUgeworCQlpbnQgcmV0OworCiAJCWRh dGEuZHJtX2ZkID0gZHJtX29wZW5fZHJpdmVyX21hc3RlcihEUklWRVJfSU5URUwpOwogCisJCWRh dGEuZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2RldmlkKGRhdGEuZHJtX2ZkKTsKKworCQlkYXRhLm1h eF9jdXJ3ID0gNjQ7CisJCWRhdGEubWF4X2N1cmggPSA2NDsKKwkJcmV0ID0gZHJtR2V0Q2FwKGRh dGEuZHJtX2ZkLCBEUk1fQ0FQX0NVUlNPUl9XSURUSCwKKwkJCQkmZGF0YS5tYXhfY3Vydyk7CisJ CWlndF9hc3NlcnQocmV0ID09IDAgfHwgZXJybm8gPT0gRUlOVkFMKTsKKwkJcmV0ID0gZHJtR2V0 Q2FwKGRhdGEuZHJtX2ZkLCBEUk1fQ0FQX0NVUlNPUl9IRUlHSFQsCisJCQkJJmRhdGEubWF4X2N1 cmgpOworCQlpZ3RfYXNzZXJ0KHJldCA9PSAwIHx8IGVycm5vID09IEVJTlZBTCk7CisKIAkJa21z dGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOwogCiAJCWlndF9yZXF1aXJlX3BpcGVfY3JjKGRh dGEuZHJtX2ZkKTsKLS0gCjIuMTguMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p Z3QtZGV2Cg==