From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mblankhorst.nl (mblankhorst.nl [IPv6:2a02:2308::216:3eff:fe92:dfa3]) by gabe.freedesktop.org (Postfix) with ESMTPS id CFCBD89ECD for ; Mon, 1 Oct 2018 15:48:15 +0000 (UTC) From: Maarten Lankhorst Date: Mon, 1 Oct 2018 17:48:12 +0200 Message-Id: <20181001154812.26229-1-maarten.lankhorst@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t] tests: Add kms plane alpha blending test, v2. 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 List-ID: QWRkIGEgZmV3IHRlc3RzIHRvIHRlc3QgdmFyaW91cyBibGVuZGluZyBtb2Rlcy4KClNvbWUgb2Yg dGhlIHRlc3RzIHdpbGwgc2tpcCBpZiBwaXhlbCBtb2RlIGFscGhhIGNhbm5vdCBiZSBlbmFibGVk CndpdGggcGxhbmUgYWxwaGEgYXQgdGhlIHNhbWUgdGltZS4gVGhpcyBpcyBmb3IgbWFsaS1kcC4g SSBkaWRuJ3QKdGVzdCBvbiB0aGF0IHBsYXRmb3JtLCBidXQgdGVzdGVkIHdpdGggdGhlIHNhbWUg Y2hlY2sgb24gaTkxNS4KClRoZSB0ZXN0cyB3b24ndCBwYXNzIGk5MTUgb24gcHJlLWdlbjExIGh3 LiBpOTE1IGhhcyBzbWFsbCByb3VuZGluZwplcnJvcnMgd2l0aCAweGZmIGFuZCAweDAwIGFscGhh LCB3aGljaCBnaXZlcyBDUkMgbWlzbWF0Y2hlcy4KCkNoYW5nZXMgc2luY2UgdjE6Ci0gU2VuZCB0 aGUgY29ycmVjdCB2ZXJzaW9uLCB3aXRoIHRoZSBza2lwcyBmb3IgbWFsaS1kcCBpbiBwbGFjZS4K ClNpZ25lZC1vZmYtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51 eC5pbnRlbC5jb20+Ci0tLQogbGliL2lndF9rbXMuYyAgICAgICAgICAgICAgICAgfCAgIDIgKwog bGliL2lndF9rbXMuaCAgICAgICAgICAgICAgICAgfCAgIDIgKwogdGVzdHMvTWFrZWZpbGUuc291 cmNlcyAgICAgICAgfCAgIDEgKwogdGVzdHMva21zX3BsYW5lX2FscGhhX2JsZW5kLmMgfCA1NzEg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdGVzdHMvbWVzb24uYnVpbGQgICAg ICAgICAgICAgfCAgIDEgKwogNSBmaWxlcyBjaGFuZ2VkLCA1NzcgaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttc19wbGFuZV9hbHBoYV9ibGVuZC5jCgpkaWZmIC0tZ2l0 IGEvbGliL2lndF9rbXMuYyBiL2xpYi9pZ3Rfa21zLmMKaW5kZXggNDU2M2JmZDlkMjViLi5lODhl OTYxNDk5NTcgMTAwNjQ0Ci0tLSBhL2xpYi9pZ3Rfa21zLmMKKysrIGIvbGliL2lndF9rbXMuYwpA QCAtMTc1LDYgKzE3NSw4IEBAIGNvbnN0IGNoYXIgKiBjb25zdCBpZ3RfcGxhbmVfcHJvcF9uYW1l c1tJR1RfTlVNX1BMQU5FX1BST1BTXSA9IHsKIAlbSUdUX1BMQU5FX0lOX0ZPUk1BVFNdID0gIklO X0ZPUk1BVFMiLAogCVtJR1RfUExBTkVfQ09MT1JfRU5DT0RJTkddID0gIkNPTE9SX0VOQ09ESU5H IiwKIAlbSUdUX1BMQU5FX0NPTE9SX1JBTkdFXSA9ICJDT0xPUl9SQU5HRSIsCisJW0lHVF9QTEFO RV9QSVhFTF9CTEVORF9NT0RFXSA9ICJwaXhlbCBibGVuZCBtb2RlIiwKKwlbSUdUX1BMQU5FX0FM UEhBXSA9ICJhbHBoYSIsCiB9OwogCiBjb25zdCBjaGFyICogY29uc3QgaWd0X2NydGNfcHJvcF9u YW1lc1tJR1RfTlVNX0NSVENfUFJPUFNdID0gewpkaWZmIC0tZ2l0IGEvbGliL2lndF9rbXMuaCBi L2xpYi9pZ3Rfa21zLmgKaW5kZXggMzg2MmVmYTI4YmUwLi4zYWYzMzZmNDMwMjAgMTAwNjQ0Ci0t LSBhL2xpYi9pZ3Rfa21zLmgKKysrIGIvbGliL2lndF9rbXMuaApAQCAtMjY2LDYgKzI2Niw4IEBA IGVudW0gaWd0X2F0b21pY19wbGFuZV9wcm9wZXJ0aWVzIHsKICAgICAgICBJR1RfUExBTkVfSU5f Rk9STUFUUywKICAgICAgICBJR1RfUExBTkVfQ09MT1JfRU5DT0RJTkcsCiAgICAgICAgSUdUX1BM QU5FX0NPTE9SX1JBTkdFLAorICAgICAgIElHVF9QTEFORV9QSVhFTF9CTEVORF9NT0RFLAorICAg ICAgIElHVF9QTEFORV9BTFBIQSwKICAgICAgICBJR1RfTlVNX1BMQU5FX1BST1BTCiB9OwogCmRp ZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNl cwppbmRleCAxMDljNTM5N2RlODUuLmU2ZjdhMzY0YjRiMyAxMDA2NDQKLS0tIGEvdGVzdHMvTWFr ZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC0xOTQsNiArMTk0 LDcgQEAgVEVTVFNfcHJvZ3MgPSBcCiAJa21zX3BpcGVfYl9jX2l2YiBcCiAJa21zX3BpcGVfY3Jj X2Jhc2ljIFwKIAlrbXNfcGxhbmUgXAorCWttc19wbGFuZV9hbHBoYV9ibGVuZCBcCiAJa21zX3Bs YW5lX2xvd3JlcyBcCiAJa21zX3BsYW5lX211bHRpcGxlIFwKIAlrbXNfcGxhbmVfc2NhbGluZyBc CmRpZmYgLS1naXQgYS90ZXN0cy9rbXNfcGxhbmVfYWxwaGFfYmxlbmQuYyBiL3Rlc3RzL2ttc19w bGFuZV9hbHBoYV9ibGVuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uODFjOGNiOTE2YTYzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMva21zX3BsYW5lX2FscGhh X2JsZW5kLmMKQEAgLTAsMCArMSw1NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOCBJbnRl bCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIp LAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2Vs bCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0 aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBo KSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklH SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICog TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FS RS4KKyAqCisgKiBBdXRob3JzOgorICogICBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5r aG9yc3RAbGludXguaW50ZWwuY29tPgorICovCisKKyNpbmNsdWRlICJpZ3QuaCIKKworSUdUX1RF U1RfREVTQ1JJUFRJT04oIlRlc3QgcGxhbmUgYWxwaGEgYW5kIGJsZW5kaW5nIG1vZGUgcHJvcGVy dGllcyIpOworCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IGdmeF9mZDsKKwlpZ3RfZGlzcGxheV90 IGRpc3BsYXk7CisJc3RydWN0IGlndF9mYiB4cmdiX2ZiLCBhcmdiX2ZiXzAsIGFyZ2JfZmJfY292 XzAsIGFyZ2JfZmJfN2UsIGFyZ2JfZmJfY292XzdlLCBhcmdiX2ZiX2ZjLCBhcmdiX2ZiX2Nvdl9m YywgYXJnYl9mYl8xMDAsIGJsYWNrX2ZiLCBncmF5X2ZiOworCWlndF9jcmNfdCByZWZfY3JjOwor CWlndF9waXBlX2NyY190ICpwaXBlX2NyYzsKK30gZGF0YV90OworCitzdGF0aWMgdm9pZCBfX2Ry YXdfZ3JhZGllbnQoc3RydWN0IGlndF9mYiAqZmIsIGludCB3LCBpbnQgaCwgZG91YmxlIGEsIGNh aXJvX3QgKmNyKQoreworCWNhaXJvX3BhdHRlcm5fdCAqcGF0OworCisJcGF0ID0gY2Fpcm9fcGF0 dGVybl9jcmVhdGVfbGluZWFyKDAsIDAsIHcsIGgpOworCWNhaXJvX3BhdHRlcm5fYWRkX2NvbG9y X3N0b3BfcmdiYShwYXQsIDAuMDAsIDAuMDAsIDAuMDAsIDAuMDAsIDEuKTsKKwljYWlyb19wYXR0 ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYmEocGF0LCAwLjI1LCAxLjAwLCAxLjAwLCAwLjAwLCAxLik7 CisJY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKHBhdCwgMC41MCwgMC4wMCwgMS4w MCwgMS4wMCwgMS4pOworCWNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShwYXQsIDAu NzUsIDEuMDAsIDAuMDAsIDEuMDAsIDEuKTsKKwljYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9w X3JnYmEocGF0LCAxLjAwLCAxLjAwLCAxLjAwLCAxLjAwLCAxLik7CisKKwljYWlyb19yZWN0YW5n bGUoY3IsIDAsIDAsIHcsIGgpOworCWNhaXJvX3NldF9zb3VyY2UoY3IsIHBhdCk7CisJY2Fpcm9f c2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworCWNhaXJvX3BhaW50X3dp dGhfYWxwaGEoY3IsIGEpOworCWNhaXJvX3BhdHRlcm5fZGVzdHJveShwYXQpOworfQorCitzdGF0 aWMgdm9pZCBkcmF3X2dyYWRpZW50KHN0cnVjdCBpZ3RfZmIgKmZiLCBpbnQgdywgaW50IGgsIGRv dWJsZSBhKQoreworCWNhaXJvX3QgKmNyID0gaWd0X2dldF9jYWlyb19jdHgoZmItPmZkLCBmYik7 CisKKwlfX2RyYXdfZ3JhZGllbnQoZmIsIHcsIGgsIGEsIGNyKTsKKworCWlndF9wdXRfY2Fpcm9f Y3R4KGZiLT5mZCwgZmIsIGNyKTsKK30KKworc3RhdGljIHZvaWQgZHJhd19ncmFkaWVudF9jb3Zl cmFnZShzdHJ1Y3QgaWd0X2ZiICpmYiwgaW50IHcsIGludCBoLCB1aW50OF90IGEpCit7CisJY2Fp cm9fdCAqY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChmYi0+ZmQsIGZiKTsKKwl1aW50OF90ICpkYXRh ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShmYi0+Y2Fpcm9fc3VyZmFjZSk7CisJdWlu dDMyX3Qgc3RyaWRlID0gZmItPnN0cmlkZXNbMF07CisJaW50IGk7CisKKwlfX2RyYXdfZ3JhZGll bnQoZmIsIHcsIGgsIDEuLCBjcik7CisKKwlmb3IgKDsgaC0tOyBkYXRhICs9IHN0cmlkZSkKKwkJ Zm9yIChpID0gMDsgaSA8IHc7IGkrKykKKwkJCWRhdGFbaSAqIDQgKyAzXSA9IGE7CisKKwlpZ3Rf cHV0X2NhaXJvX2N0eChmYi0+ZmQsIGZiLCBjcik7Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdfc3F1 YXJlcyhzdHJ1Y3QgaWd0X2ZiICpmYiwgaW50IHcsIGludCBoLCBkb3VibGUgYSkKK3sKKwljYWly b190ICpjciA9IGlndF9nZXRfY2Fpcm9fY3R4KGZiLT5mZCwgZmIpOworCisJaWd0X3BhaW50X2Nv bG9yX2FscGhhKGNyLCAwLCAwLCAgICAgICAgIHcgLyAyLCBoIC8gMiwgMS4sIDAuLCAwLiwgYSk7 CisJaWd0X3BhaW50X2NvbG9yX2FscGhhKGNyLCB3IC8gMiwgMCwgICAgIHcgLyAyLCBoIC8gMiwg MC4sIDEuLCAwLiwgYSk7CisJaWd0X3BhaW50X2NvbG9yX2FscGhhKGNyLCAwLCBoIC8gMiwgICAg IHcgLyAyLCBoIC8gMiwgMC4sIDAuLCAxLiwgYSk7CisJaWd0X3BhaW50X2NvbG9yX2FscGhhKGNy LCB3IC8gMiwgaCAvIDIsIHcgLyA0LCBoIC8gMiwgMS4sIDEuLCAxLiwgYSk7CisJaWd0X3BhaW50 X2NvbG9yX2FscGhhKGNyLCAzICogdyAvIDQsIGggLyAyLCB3IC8gNCwgaCAvIDIsIDAuLCAwLiwg MC4sIGEpOworCisJaWd0X3B1dF9jYWlyb19jdHgoZmItPmZkLCBmYiwgY3IpOworfQorCitzdGF0 aWMgdm9pZCBkcmF3X3NxdWFyZXNfY292ZXJhZ2Uoc3RydWN0IGlndF9mYiAqZmIsIGludCB3LCBp bnQgaCwgdWludDhfdCBhcykKK3sKKwljYWlyb190ICpjciA9IGlndF9nZXRfY2Fpcm9fY3R4KGZi LT5mZCwgZmIpOworCWludCBpLCBqOworCXVpbnQzMl90ICpkYXRhID0gKHZvaWQgKiljYWlyb19p bWFnZV9zdXJmYWNlX2dldF9kYXRhKGZiLT5jYWlyb19zdXJmYWNlKTsKKwl1aW50MzJfdCBzdHJp ZGUgPSBmYi0+c3RyaWRlc1swXSAvIDQ7CisJdWludDMyX3QgYSA9IGFzIDw8IDI0OworCisJZm9y IChqID0gMDsgaiA8IGggLyAyOyBqKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IHcgLyAyOyBpKysp CisJCQlkYXRhW2ogKiBzdHJpZGUgKyBpXSA9IGEgfCAweGZmMDAwMDsKKworCQlmb3IgKDsgaSA8 IHc7IGkrKykKKwkJCWRhdGFbaiAqIHN0cmlkZSArIGldID0gYSB8IDB4ZmYwMDsKKwl9CisKKwlm b3IgKGogPSBoIC8gMjsgaiA8IGg7IGorKykgeworCQlmb3IgKGkgPSAwOyBpIDwgdyAvIDI7IGkr KykKKwkJCWRhdGFbaiAqIHN0cmlkZSArIGldID0gYSB8IDB4ZmY7CisKKwkJZm9yICg7IGkgPCAz ICogdyAvIDQ7IGkrKykKKwkJCWRhdGFbaiAqIHN0cmlkZSArIGldID0gYSB8IDB4ZmZmZmZmOwor CisJCWZvciAoOyBpIDwgdzsgaSsrKQorCQkJZGF0YVtqICogc3RyaWRlICsgaV0gPSBhOworCX0K KworCWlndF9wdXRfY2Fpcm9fY3R4KGZiLT5mZCwgZmIsIGNyKTsKK30KKworc3RhdGljIHZvaWQg cmVzZXRfYWxwaGEoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgZW51bSBwaXBlIHBpcGUpCit7CisJ aWd0X3BsYW5lX3QgKnBsYW5lOworCisJZm9yX2VhY2hfcGxhbmVfb25fcGlwZShkaXNwbGF5LCBw aXBlLCBwbGFuZSkgeworCQlpZiAoaWd0X3BsYW5lX2hhc19wcm9wKHBsYW5lLCBJR1RfUExBTkVf QUxQSEEpKQorCQkJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVlKHBsYW5lLCBJR1RfUExBTkVfQUxQ SEEsIDB4ZmZmZik7CisKKwkJaWYgKGlndF9wbGFuZV9oYXNfcHJvcChwbGFuZSwgSUdUX1BMQU5F X1BJWEVMX0JMRU5EX01PREUpKQorCQkJaWd0X3BsYW5lX3NldF9wcm9wX2VudW0ocGxhbmUsIElH VF9QTEFORV9QSVhFTF9CTEVORF9NT0RFLCAiUHJlLW11bHRpcGxpZWQiKTsKKwl9Cit9CisKK3N0 YXRpYyBib29sIGhhc19tdWx0aXBsaWVkX2FscGhhKGRhdGFfdCAqZGF0YSwgaWd0X3BsYW5lX3Qg KnBsYW5lKQoreworCWludCByZXQ7CisKKwlpZ3RfcGxhbmVfc2V0X3Byb3BfdmFsdWUocGxhbmUs IElHVF9QTEFORV9BTFBIQSwgMHg4MDgwKTsKKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0 YS0+YXJnYl9mYl8xMDApOworCXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21taXRfYXRvbWljKCZk YXRhLT5kaXNwbGF5LAorCQlEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIHwgRFJNX01PREVfQVRP TUlDX0FMTE9XX01PREVTRVQsIE5VTEwpOworCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1ZShwbGFu ZSwgSUdUX1BMQU5FX0FMUEhBLCAweGZmZmYpOworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIE5V TEwpOworCisJcmV0dXJuIHJldCA9PSAwOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX2NydGMo ZGF0YV90ICpkYXRhLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgZW51bSBwaXBlIHBpcGUpCit7CisJ ZHJtTW9kZU1vZGVJbmZvICptb2RlOworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ ZGlzcGxheTsKKwlpbnQgdywgaDsKKwlpZ3RfcGxhbmVfdCAqcHJpbWFyeSA9IGlndF9waXBlX2dl dF9wbGFuZV90eXBlKCZkaXNwbGF5LT5waXBlc1twaXBlXSwgRFJNX1BMQU5FX1RZUEVfUFJJTUFS WSk7CisKKwlpZ3RfZGlzcGxheV9yZXNldChkaXNwbGF5KTsKKwlpZ3Rfb3V0cHV0X3NldF9waXBl KG91dHB1dCwgcGlwZSk7CisKKwkvKiBjcmVhdGUgdGhlIHBpcGVfY3JjIG9iamVjdCBmb3IgdGhp cyBwaXBlICovCisJaWd0X3BpcGVfY3JjX2ZyZWUoZGF0YS0+cGlwZV9jcmMpOworCWRhdGEtPnBp cGVfY3JjID0gaWd0X3BpcGVfY3JjX25ldyhkYXRhLT5nZnhfZmQsIHBpcGUsIElOVEVMX1BJUEVf Q1JDX1NPVVJDRV9BVVRPKTsKKworCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCk7 CisJdyA9IG1vZGUtPmhkaXNwbGF5OworCWggPSBtb2RlLT52ZGlzcGxheTsKKworCS8qIHJlY3Jl YXRlIGFsbCBmYnMgaWYgaW5jb21wYXRpYmxlICovCisJaWYgKGRhdGEtPnhyZ2JfZmIud2lkdGgg IT0gdyB8fCBkYXRhLT54cmdiX2ZiLmhlaWdodCAhPSBoKSB7CisJCWNhaXJvX3QgKmNyOworCisJ CWlndF9yZW1vdmVfZmIoZGF0YS0+Z2Z4X2ZkLCAmZGF0YS0+eHJnYl9mYik7CisJCWlndF9yZW1v dmVfZmIoZGF0YS0+Z2Z4X2ZkLCAmZGF0YS0+YXJnYl9mYl8wKTsKKwkJaWd0X3JlbW92ZV9mYihk YXRhLT5nZnhfZmQsICZkYXRhLT5hcmdiX2ZiX2Nvdl8wKTsKKwkJaWd0X3JlbW92ZV9mYihkYXRh LT5nZnhfZmQsICZkYXRhLT5hcmdiX2ZiXzdlKTsKKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5nZnhf ZmQsICZkYXRhLT5hcmdiX2ZiX2ZjKTsKKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5nZnhfZmQsICZk YXRhLT5hcmdiX2ZiX2Nvdl83ZSk7CisJCWlndF9yZW1vdmVfZmIoZGF0YS0+Z2Z4X2ZkLCAmZGF0 YS0+YXJnYl9mYl9jb3ZfZmMpOworCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmdmeF9mZCwgJmRhdGEt PmFyZ2JfZmJfMTAwKTsKKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5nZnhfZmQsICZkYXRhLT5ibGFj a19mYik7CisJCWlndF9yZW1vdmVfZmIoZGF0YS0+Z2Z4X2ZkLCAmZGF0YS0+Z3JheV9mYik7CisK KwkJaWd0X2NyZWF0ZV9mYihkYXRhLT5nZnhfZmQsIHcsIGgsCisJCQkgICAgICBEUk1fRk9STUFU X1hSR0I4ODg4LCBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAorCQkJICAgICAgJmRhdGEtPnhy Z2JfZmIpOworCQlkcmF3X2dyYWRpZW50KCZkYXRhLT54cmdiX2ZiLCB3LCBoLCAxLik7CisKKwkJ aWd0X2NyZWF0ZV9mYihkYXRhLT5nZnhfZmQsIHcsIGgsCisJCQkgICAgICBEUk1fRk9STUFUX0FS R0I4ODg4LCBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAorCQkJICAgICAgJmRhdGEtPmFyZ2Jf ZmJfY292XzApOworCQlkcmF3X2dyYWRpZW50X2NvdmVyYWdlKCZkYXRhLT5hcmdiX2ZiX2Nvdl8w LCB3LCBoLCAwKTsKKworCQlpZ3RfY3JlYXRlX2ZiKGRhdGEtPmdmeF9mZCwgdywgaCwKKwkJCSAg ICAgIERSTV9GT1JNQVRfQVJHQjg4ODgsIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkg ICAgICAmZGF0YS0+YXJnYl9mYl8wKTsKKworCQljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRhdGEt PmdmeF9mZCwgJmRhdGEtPmFyZ2JfZmJfMCk7CisJCWlndF9wYWludF9jb2xvcl9hbHBoYShjciwg MCwgMCwgdywgaCwgMC4sIDAuLCAwLiwgMS4wKTsKKwkJaWd0X3B1dF9jYWlyb19jdHgoZGF0YS0+ Z2Z4X2ZkLCAmZGF0YS0+YXJnYl9mYl8wLCBjcik7CisKKwkJaWd0X2NyZWF0ZV9mYihkYXRhLT5n ZnhfZmQsIHcsIGgsCisJCQkgICAgICBEUk1fRk9STUFUX0FSR0I4ODg4LCBMT0NBTF9EUk1fRk9S TUFUX01PRF9OT05FLAorCQkJICAgICAgJmRhdGEtPmFyZ2JfZmJfN2UpOworCQlkcmF3X3NxdWFy ZXMoJmRhdGEtPmFyZ2JfZmJfN2UsIHcsIGgsIDEyNi4gLyAyNTUuKTsKKworCQlpZ3RfY3JlYXRl X2ZiKGRhdGEtPmdmeF9mZCwgdywgaCwKKwkJCSAgICAgIERSTV9GT1JNQVRfQVJHQjg4ODgsIExP Q0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkgICAgICAmZGF0YS0+YXJnYl9mYl9jb3ZfN2Up OworCQlkcmF3X3NxdWFyZXNfY292ZXJhZ2UoJmRhdGEtPmFyZ2JfZmJfY292XzdlLCB3LCBoLCAw eDdlKTsKKworCQlpZ3RfY3JlYXRlX2ZiKGRhdGEtPmdmeF9mZCwgdywgaCwKKwkJCSAgICAgIERS TV9GT1JNQVRfQVJHQjg4ODgsIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkgICAgICAm ZGF0YS0+YXJnYl9mYl9mYyk7CisJCWRyYXdfc3F1YXJlcygmZGF0YS0+YXJnYl9mYl9mYywgdywg aCwgMjUyLiAvIDI1NS4pOworCisJCWlndF9jcmVhdGVfZmIoZGF0YS0+Z2Z4X2ZkLCB3LCBoLAor CQkJICAgICAgRFJNX0ZPUk1BVF9BUkdCODg4OCwgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwK KwkJCSAgICAgICZkYXRhLT5hcmdiX2ZiX2Nvdl9mYyk7CisJCWRyYXdfc3F1YXJlc19jb3ZlcmFn ZSgmZGF0YS0+YXJnYl9mYl9jb3ZfZmMsIHcsIGgsIDB4ZmMpOworCisJCWlndF9jcmVhdGVfZmIo ZGF0YS0+Z2Z4X2ZkLCB3LCBoLAorCQkJICAgICAgRFJNX0ZPUk1BVF9BUkdCODg4OCwgTE9DQUxf RFJNX0ZPUk1BVF9NT0RfTk9ORSwKKwkJCSAgICAgICZkYXRhLT5hcmdiX2ZiXzEwMCk7CisJCWRy YXdfZ3JhZGllbnQoJmRhdGEtPmFyZ2JfZmJfMTAwLCB3LCBoLCAxLik7CisKKwkJaWd0X2NyZWF0 ZV9mYihkYXRhLT5nZnhfZmQsIHcsIGgsCisJCQkgICAgICBEUk1fRk9STUFUX1hSR0I4ODg4LCBM T0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAorCQkJICAgICAgJmRhdGEtPmJsYWNrX2ZiKTsKKwor CQlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmdmeF9mZCwgdywgaCwKKwkJCQkgICAgRFJNX0ZP Uk1BVF9YUkdCODg4OCwgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKKwkJCQkgICAgLjUsIC41 LCAuNSwgJmRhdGEtPmdyYXlfZmIpOworCX0KKworCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwg JmRhdGEtPmJsYWNrX2ZiKTsKKwkvKiByZXNldCBhbHBoYSBwcm9wZXJ0eSB0byBkZWZhdWx0ICov CisJcmVzZXRfYWxwaGEoZGlzcGxheSwgcGlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIGJhc2ljX2Fs cGhhKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsIGlndF9wbGFuZV90ICpwbGFuZSkKK3sK KwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X2NyY190IHJl Zl9jcmMsIGNyYzsKKwlpbnQgaTsKKworCS8qIFRlc3RjYXNlIDE6IGFscGhhID0gMC4wLCBwbGFu ZSBzaG91bGQgYmUgdHJhbnNwYXJhbnQuICovCisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5 LCBDT01NSVRfQVRPTUlDKTsKKwlpZ3RfcGlwZV9jcmNfc3RhcnQoZGF0YS0+cGlwZV9jcmMpOwor CWlndF9waXBlX2NyY19nZXRfc2luZ2xlKGRhdGEtPnBpcGVfY3JjLCAmcmVmX2NyYyk7CisKKwlp Z3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+YXJnYl9mYl8wKTsKKworCS8qIHRyYW5zcGFy YW50IGZiIHNob3VsZCBiZSB0cmFuc3BhcmFudCwgbm8gbWF0dGVyIHdoYXQuLiAqLworCWZvciAo aSA9IDc7IGkgPCAyNTY7IGkgKz0gOCkgeworCQlpZ3RfcGxhbmVfc2V0X3Byb3BfdmFsdWUocGxh bmUsIElHVF9QTEFORV9BTFBIQSwgaSB8IChpIDw8IDgpKTsKKwkJaWd0X2Rpc3BsYXlfY29tbWl0 MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKworCQlpZ3RfcGlwZV9jcmNfZ2V0X2N1cnJlbnQo ZGlzcGxheS0+ZHJtX2ZkLCBkYXRhLT5waXBlX2NyYywgJmNyYyk7CisJCWlndF9hc3NlcnRfY3Jj X2VxdWFsKCZyZWZfY3JjLCAmY3JjKTsKKwl9CisKKwkvKiBBbmQgdGVzdCBhbHBoYSA9IDAsIHNo b3VsZCBnaXZlIHNhbWUgQ1JDLCBidXQgZG9lc24ndCBvbiBzb21lIGk5MTUgcGxhdGZvcm1zLiAq LworCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1ZShwbGFuZSwgSUdUX1BMQU5FX0FMUEhBLCAwKTsK KwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCisJaWd0X3Bp cGVfY3JjX2dldF9jdXJyZW50KGRpc3BsYXktPmRybV9mZCwgZGF0YS0+cGlwZV9jcmMsICZjcmMp OworCWlndF9waXBlX2NyY19zdG9wKGRhdGEtPnBpcGVfY3JjKTsKKwlpZ3RfYXNzZXJ0X2NyY19l cXVhbCgmcmVmX2NyYywgJmNyYyk7Cit9CisKK3N0YXRpYyB2b2lkIGFyZ2Jfb3BhcXVlKGRhdGFf dCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsIGlndF9wbGFuZV90ICpwbGFuZSkKK3sKKwlpZ3RfZGlz cGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X2NyY190IHJlZl9jcmMsIGNy YzsKKworCS8qIGFscGhhID0gMS4wLCBwbGFuZSBzaG91bGQgYmUgZnVsbHkgb3BhcXVlLCB0ZXN0 IHdpdGggYW4gb3BhcXVlIGZiICovCisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPnhy Z2JfZmIpOworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJ aWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmcmVmX2NyYyk7CisKKwlp Z3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+YXJnYl9mYl8xMDApOworCWlndF9kaXNwbGF5 X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3Rf Y3JjKGRhdGEtPnBpcGVfY3JjLCAmY3JjKTsKKworCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZyZWZf Y3JjLCAmY3JjKTsKK30KKworc3RhdGljIHZvaWQgYXJnYl90cmFuc3BhcmFudChkYXRhX3QgKmRh dGEsIGVudW0gcGlwZSBwaXBlLCBpZ3RfcGxhbmVfdCAqcGxhbmUpCit7CisJaWd0X2Rpc3BsYXlf dCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9jcmNfdCByZWZfY3JjLCBjcmM7CisK KwkvKiBhbHBoYSA9IDEuMCwgcGxhbmUgc2hvdWxkIGJlIGZ1bGx5IG9wYXF1ZSwgdGVzdCB3aXRo IGEgdHJhbnNwYXJhbnQgZmIgKi8KKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKKwlp Z3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCWlndF9waXBlX2Ny Y19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJnJlZl9jcmMpOworCisJaWd0X3BsYW5lX3Nl dF9mYihwbGFuZSwgJmRhdGEtPmFyZ2JfZmJfMCk7CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNw bGF5LCBDT01NSVRfQVRPTUlDKTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlw ZV9jcmMsICZjcmMpOworCisJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJnJlZl9jcmMsICZjcmMpOwor fQorCitzdGF0aWMgdm9pZCBjb25zdGFudF9hbHBoYV9taW4oZGF0YV90ICpkYXRhLCBlbnVtIHBp cGUgcGlwZSwgaWd0X3BsYW5lX3QgKnBsYW5lKQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkg PSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3RfY3JjX3QgcmVmX2NyYywgY3JjOworCisJaWd0X3BsYW5l X3NldF9mYihwbGFuZSwgTlVMTCk7CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01N SVRfQVRPTUlDKTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZy ZWZfY3JjKTsKKworCWlndF9wbGFuZV9zZXRfcHJvcF9lbnVtKHBsYW5lLCBJR1RfUExBTkVfUElY RUxfQkxFTkRfTU9ERSwgIk5vbmUiKTsKKwlpZ3RfcGxhbmVfc2V0X3Byb3BfdmFsdWUocGxhbmUs IElHVF9QTEFORV9BTFBIQSwgMCk7CisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmFy Z2JfZmJfMTAwKTsKKwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMp OworCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmNyYyk7CisJaWd0 X2Fzc2VydF9jcmNfZXF1YWwoJnJlZl9jcmMsICZjcmMpOworCisJaWd0X3BsYW5lX3NldF9mYihw bGFuZSwgJmRhdGEtPmFyZ2JfZmJfMCk7CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBD T01NSVRfQVRPTUlDKTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMs ICZjcmMpOworCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZyZWZfY3JjLCAmY3JjKTsKK30KKworc3Rh dGljIHZvaWQgY29uc3RhbnRfYWxwaGFfbWlkKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUs IGlndF9wbGFuZV90ICpwbGFuZSkKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEt PmRpc3BsYXk7CisJaWd0X2NyY190IHJlZl9jcmMsIGNyYzsKKworCWlmIChwbGFuZS0+dHlwZSAh PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKQorCQlpZ3RfcGxhbmVfc2V0X2ZiKGlndF9waXBlX2dl dF9wbGFuZV90eXBlKCZkaXNwbGF5LT5waXBlc1twaXBlXSwgRFJNX1BMQU5FX1RZUEVfUFJJTUFS WSksICZkYXRhLT5ncmF5X2ZiKTsKKworCWlndF9wbGFuZV9zZXRfcHJvcF9lbnVtKHBsYW5lLCBJ R1RfUExBTkVfUElYRUxfQkxFTkRfTU9ERSwgIk5vbmUiKTsKKwlpZ3RfcGxhbmVfc2V0X3Byb3Bf dmFsdWUocGxhbmUsIElHVF9QTEFORV9BTFBIQSwgMHg3ZmZmKTsKKwlpZ3RfcGxhbmVfc2V0X2Zi KHBsYW5lLCAmZGF0YS0+eHJnYl9mYik7CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBD T01NSVRfQVRPTUlDKTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMs ICZyZWZfY3JjKTsKKworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5hcmdiX2ZiX2Nv dl8wKTsKKwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCWln dF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmNyYyk7CisJaWd0X2Fzc2Vy dF9jcmNfZXF1YWwoJnJlZl9jcmMsICZjcmMpOworCisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwg JmRhdGEtPmFyZ2JfZmJfMTAwKTsKKwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1J VF9BVE9NSUMpOworCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmNy Yyk7CisJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJnJlZl9jcmMsICZjcmMpOworfQorCitzdGF0aWMg dm9pZCBjb25zdGFudF9hbHBoYV9tYXgoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgaWd0 X3BsYW5lX3QgKnBsYW5lKQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlz cGxheTsKKwlpZ3RfY3JjX3QgcmVmX2NyYywgY3JjOworCisJaWYgKHBsYW5lLT50eXBlICE9IERS TV9QTEFORV9UWVBFX1BSSU1BUlkpCisJCWlndF9wbGFuZV9zZXRfZmIoaWd0X3BpcGVfZ2V0X3Bs YW5lX3R5cGUoJmRpc3BsYXktPnBpcGVzW3BpcGVdLCBEUk1fUExBTkVfVFlQRV9QUklNQVJZKSwg JmRhdGEtPmdyYXlfZmIpOworCisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmFyZ2Jf ZmJfMTAwKTsKKwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwor CWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJnJlZl9jcmMpOworCisJ aWd0X3BsYW5lX3NldF9wcm9wX2VudW0ocGxhbmUsIElHVF9QTEFORV9QSVhFTF9CTEVORF9NT0RF LCAiTm9uZSIpOworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7 CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY3JjKTsKKwlpZ3Rf YXNzZXJ0X2NyY19lcXVhbCgmcmVmX2NyYywgJmNyYyk7CisKKwlpZ3RfcGxhbmVfc2V0X2ZiKHBs YW5lLCAmZGF0YS0+YXJnYl9mYl9jb3ZfMCk7CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5 LCBDT01NSVRfQVRPTUlDKTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9j cmMsICZjcmMpOworCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZyZWZfY3JjLCAmY3JjKTsKKworCWln dF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT54cmdiX2ZiKTsKKwlpZ3RfZGlzcGxheV9jb21t aXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhk YXRhLT5waXBlX2NyYywgJmNyYyk7CisJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJnJlZl9jcmMsICZj cmMpOworCisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lk IGFscGhhXzdlZmMoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgaWd0X3BsYW5lX3QgKnBs YW5lKQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3Rf Y3JjX3QgcmVmX2NyYyA9IHt9LCBjcmMgPSB7fTsKKwlpbnQgaTsKKworCWlmIChwbGFuZS0+dHlw ZSAhPSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKQorCQlpZ3RfcGxhbmVfc2V0X2ZiKGlndF9waXBl X2dldF9wbGFuZV90eXBlKCZkaXNwbGF5LT5waXBlc1twaXBlXSwgRFJNX1BMQU5FX1RZUEVfUFJJ TUFSWSksICZkYXRhLT5ncmF5X2ZiKTsKKworCWlndF9waXBlX2NyY19zdGFydChkYXRhLT5waXBl X2NyYyk7CisKKwkvKiBmb3IgY292ZXJhZ2UsIHBsYW5lIGFscGhhIGFuZCBmYiBhbHBoYSBzaG91 bGQgYmUgc3dhcHBhYmxlLCBzbyBzd2FwIGZiIGFuZCBhbHBoYSAqLworCWZvciAoaSA9IDA7IGkg PCAyNTY7IGkgKz0gOCkgeworCQlpZ3RfcGxhbmVfc2V0X3Byb3BfdmFsdWUocGxhbmUsIElHVF9Q TEFORV9BTFBIQSwgKChpLzIpIDw8IDgpIHwgKGkvMikpOworCQlpZ3RfcGxhbmVfc2V0X2ZiKHBs YW5lLCAmZGF0YS0+YXJnYl9mYl9mYyk7CisJCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwg Q09NTUlUX0FUT01JQyk7CisKKwkJaWd0X3BpcGVfY3JjX2dldF9jdXJyZW50KGRpc3BsYXktPmRy bV9mZCwgZGF0YS0+cGlwZV9jcmMsICZyZWZfY3JjKTsKKworCQlpZ3RfcGxhbmVfc2V0X3Byb3Bf dmFsdWUocGxhbmUsIElHVF9QTEFORV9BTFBIQSwgKGkgPDwgOCkgfCBpKTsKKwkJaWd0X3BsYW5l X3NldF9mYihwbGFuZSwgJmRhdGEtPmFyZ2JfZmJfN2UpOworCQlpZ3RfZGlzcGxheV9jb21taXQy KGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCisJCWlndF9waXBlX2NyY19nZXRfY3VycmVudChk aXNwbGF5LT5kcm1fZmQsIGRhdGEtPnBpcGVfY3JjLCAmY3JjKTsKKwkJaWd0X2Fzc2VydF9jcmNf ZXF1YWwoJnJlZl9jcmMsICZjcmMpOworCX0KK30KKworc3RhdGljIHZvaWQgY292ZXJhZ2VfN2Vm YyhkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlLCBpZ3RfcGxhbmVfdCAqcGxhbmUpCit7CisJ aWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9jcmNfdCByZWZf Y3JjID0ge30sIGNyYyA9IHt9OworCWludCBpOworCisJaWd0X3BsYW5lX3NldF9wcm9wX2VudW0o cGxhbmUsIElHVF9QTEFORV9QSVhFTF9CTEVORF9NT0RFLCAiQ292ZXJhZ2UiKTsKKwlpZ3RfcGlw ZV9jcmNfc3RhcnQoZGF0YS0+cGlwZV9jcmMpOworCisJLyogZm9yIGNvdmVyYWdlLCBwbGFuZSBh bHBoYSBhbmQgZmIgYWxwaGEgc2hvdWxkIGJlIHN3YXBwYWJsZSwgc28gc3dhcCBmYiBhbmQgYWxw aGEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpICs9IDgpIHsKKwkJaWd0X3BsYW5lX3NldF9w cm9wX3ZhbHVlKHBsYW5lLCBJR1RfUExBTkVfQUxQSEEsICgoaS8yKSA8PCA4KSB8IChpLzIpKTsK KwkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmFyZ2JfZmJfY292X2ZjKTsKKwkJaWd0 X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKworCQlpZ3RfcGlwZV9j cmNfZ2V0X2N1cnJlbnQoZGlzcGxheS0+ZHJtX2ZkLCBkYXRhLT5waXBlX2NyYywgJnJlZl9jcmMp OworCisJCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1ZShwbGFuZSwgSUdUX1BMQU5FX0FMUEhBLCAo aSA8PCA4KSB8IGkpOworCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+YXJnYl9mYl9j b3ZfN2UpOworCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwor CisJCWlndF9waXBlX2NyY19nZXRfY3VycmVudChkaXNwbGF5LT5kcm1fZmQsIGRhdGEtPnBpcGVf Y3JjLCAmY3JjKTsKKwkJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJnJlZl9jcmMsICZjcmMpOworCX0K K30KKworc3RhdGljIHZvaWQgY292ZXJhZ2VfcHJlbXVsdF9jb25zdGFudChkYXRhX3QgKmRhdGEs IGVudW0gcGlwZSBwaXBlLCBpZ3RfcGxhbmVfdCAqcGxhbmUpCit7CisJaWd0X2Rpc3BsYXlfdCAq ZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9jcmNfdCByZWZfY3JjID0ge30sIGNyYyA9 IHt9OworCisJLyogU2V0IGEgYmFja2dyb3VuZCBjb2xvciBvbiB0aGUgcHJpbWFyeSBmYiBmb3Ig dGVzdGluZyAqLworCWlmIChwbGFuZS0+dHlwZSAhPSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKQor CQlpZ3RfcGxhbmVfc2V0X2ZiKGlndF9waXBlX2dldF9wbGFuZV90eXBlKCZkaXNwbGF5LT5waXBl c1twaXBlXSwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSksICZkYXRhLT5ncmF5X2ZiKTsKKworCWln dF9wbGFuZV9zZXRfcHJvcF9lbnVtKHBsYW5lLCBJR1RfUExBTkVfUElYRUxfQkxFTkRfTU9ERSwg IkNvdmVyYWdlIik7CisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmFyZ2JfZmJfY292 XzdlKTsKKwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCWln dF9waXBlX2NyY19zdGFydChkYXRhLT5waXBlX2NyYyk7CisJaWd0X3BpcGVfY3JjX2dldF9zaW5n bGUoZGF0YS0+cGlwZV9jcmMsICZyZWZfY3JjKTsKKworCWlndF9wbGFuZV9zZXRfcHJvcF9lbnVt KHBsYW5lLCBJR1RfUExBTkVfUElYRUxfQkxFTkRfTU9ERSwgIlByZS1tdWx0aXBsaWVkIik7CisJ aWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmFyZ2JfZmJfN2UpOworCWlndF9kaXNwbGF5 X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJaWd0X3BpcGVfY3JjX2dldF9jdXJy ZW50KGRpc3BsYXktPmRybV9mZCwgZGF0YS0+cGlwZV9jcmMsICZjcmMpOworCWlndF9hc3NlcnRf Y3JjX2VxdWFsKCZyZWZfY3JjLCAmY3JjKTsKKworCWlndF9wbGFuZV9zZXRfcHJvcF9lbnVtKHBs YW5lLCBJR1RfUExBTkVfUElYRUxfQkxFTkRfTU9ERSwgIk5vbmUiKTsKKwlpZ3RfcGxhbmVfc2V0 X3Byb3BfdmFsdWUocGxhbmUsIElHVF9QTEFORV9BTFBIQSwgMHg3ZTdlKTsKKwlpZ3RfcGxhbmVf c2V0X2ZiKHBsYW5lLCAmZGF0YS0+YXJnYl9mYl9jb3ZfN2UpOworCWlndF9kaXNwbGF5X2NvbW1p dDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJaWd0X3BpcGVfY3JjX2dldF9jdXJyZW50KGRp c3BsYXktPmRybV9mZCwgZGF0YS0+cGlwZV9jcmMsICZjcmMpOworCWlndF9hc3NlcnRfY3JjX2Vx dWFsKCZyZWZfY3JjLCAmY3JjKTsKK30KKworc3RhdGljIHZvaWQgcnVuX3Rlc3Rfb25fcGlwZV9w bGFuZXMoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgYm9vbCBibGVuZCwKKwkJCQkgICAg Ym9vbCBtdXN0X211bHRpcGx5LAorCQkJCSAgICB2b2lkKCp0ZXN0KShkYXRhX3QgKiwgZW51bSBw aXBlLCBpZ3RfcGxhbmVfdCAqKSkKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEt PmRpc3BsYXk7CisJaWd0X291dHB1dF90ICpvdXRwdXQgPSBpZ3RfZ2V0X3NpbmdsZV9vdXRwdXRf Zm9yX3BpcGUoZGlzcGxheSwgcGlwZSk7CisJaWd0X3BsYW5lX3QgKnBsYW5lOworCWJvb2wgZm91 bmQgPSBmYWxzZTsKKwlib29sIG11bHRpcGx5ID0gZmFsc2U7CisKKwlmb3JfZWFjaF9wbGFuZV9v bl9waXBlKGRpc3BsYXksIHBpcGUsIHBsYW5lKSB7CisJCWlmICghaWd0X3BsYW5lX2hhc19wcm9w KHBsYW5lLCBJR1RfUExBTkVfQUxQSEEpKQorCQkJY29udGludWU7CisKKwkJaWYgKGJsZW5kICYm ICFpZ3RfcGxhbmVfaGFzX3Byb3AocGxhbmUsIElHVF9QTEFORV9QSVhFTF9CTEVORF9NT0RFKSkK KwkJCWNvbnRpbnVlOworCisJCXByZXBhcmVfY3J0YyhkYXRhLCBvdXRwdXQsIHBpcGUpOworCisJ CS8qIHJlc2V0IHBsYW5lIGFscGhhIHByb3BlcnRpZXMgYmV0d2VlbiBlYWNoIHBsYW5lICovCisJ CXJlc2V0X2FscGhhKGRpc3BsYXksIHBpcGUpOworCisJCWZvdW5kID0gdHJ1ZTsKKwkJaWYgKG11 c3RfbXVsdGlwbHkgJiYgIWhhc19tdWx0aXBsaWVkX2FscGhhKGRhdGEsIHBsYW5lKSkKKwkJCWNv bnRpbnVlOworCQltdWx0aXBseSA9IHRydWU7CisKKwkJaWd0X2luZm8oIlRlc3RpbmcgcGxhbmUg JXVcbiIsIHBsYW5lLT5pbmRleCk7CisJCXRlc3QoZGF0YSwgcGlwZSwgcGxhbmUpOworCQlpZ3Rf cGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKKwl9CisKKwlpZ3RfcmVxdWlyZV9mKGZvdW5kLCAi Tm8gcGxhbmVzIHdpdGggJXMgcHJvcGVydHkgZm91bmRcbiIsCisJCSAgICAgIGJsZW5kID8gInBp eGVsIGJsZW5kaW5nIG1vZGUiIDogImFscGhhIik7CisJaWd0X3JlcXVpcmVfZihtdWx0aXBseSwg Ik11bHRpcGxpZWQgKHBsYW5lIHggcGl4ZWwpIGFscGhhIG5vdCBhdmFpbGFibGVcbiIpOworfQor CitzdGF0aWMgdm9pZCBydW5fc3VidGVzdHMoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSkK K3sKKwlpZ3RfZml4dHVyZSB7CisJCWJvb2wgZm91bmQgPSBmYWxzZTsKKwkJaWd0X3BsYW5lX3Qg KnBsYW5lOworCisJCWlndF9kaXNwbGF5X3JlcXVpcmVfb3V0cHV0X29uX3BpcGUoJmRhdGEtPmRp c3BsYXksIHBpcGUpOworCQlmb3JfZWFjaF9wbGFuZV9vbl9waXBlKCZkYXRhLT5kaXNwbGF5LCBw aXBlLCBwbGFuZSkgeworCQkJaWYgKCFpZ3RfcGxhbmVfaGFzX3Byb3AocGxhbmUsIElHVF9QTEFO RV9BTFBIQSkpCisJCQkJY29udGludWU7CisKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJCWJyZWFrOwor CQl9CisKKwkJaWd0X3JlcXVpcmVfZihmb3VuZCwgIkZvdW5kIG5vIHBsYW5lIG9uIHBpcGUgJXMg d2l0aCBhbHBoYSBibGVuZGluZyBzdXBwb3J0ZWRcbiIsCisJCQkgICAgICBrbXN0ZXN0X3BpcGVf bmFtZShwaXBlKSk7CisJfQorCisJaWd0X3N1YnRlc3RfZigicGlwZS0lcy1hbHBoYS1iYXNpYyIs IGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpKQorCQlydW5fdGVzdF9vbl9waXBlX3BsYW5lcyhkYXRh LCBwaXBlLCBmYWxzZSwgdHJ1ZSwgYmFzaWNfYWxwaGEpOworCisJaWd0X3N1YnRlc3RfZigicGlw ZS0lcy1hbHBoYS03ZWZjIiwga21zdGVzdF9waXBlX25hbWUocGlwZSkpCisJCXJ1bl90ZXN0X29u X3BpcGVfcGxhbmVzKGRhdGEsIHBpcGUsIGZhbHNlLCB0cnVlLCBhbHBoYV83ZWZjKTsKKworCWln dF9zdWJ0ZXN0X2YoInBpcGUtJXMtY292ZXJhZ2UtN2VmYyIsIGttc3Rlc3RfcGlwZV9uYW1lKHBp cGUpKQorCQlydW5fdGVzdF9vbl9waXBlX3BsYW5lcyhkYXRhLCBwaXBlLCB0cnVlLCB0cnVlLCBj b3ZlcmFnZV83ZWZjKTsKKworCWlndF9zdWJ0ZXN0X2YoInBpcGUtJXMtY292ZXJhZ2UtdnMtcHJl bXVsdC12cy1jb25zdGFudCIsIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpKQorCQlydW5fdGVzdF9v bl9waXBlX3BsYW5lcyhkYXRhLCBwaXBlLCB0cnVlLCBmYWxzZSwgY292ZXJhZ2VfcHJlbXVsdF9j b25zdGFudCk7CisKKwlpZ3Rfc3VidGVzdF9mKCJwaXBlLSVzLWFscGhhLXRyYW5zcGFyYW50LWZi Iiwga21zdGVzdF9waXBlX25hbWUocGlwZSkpCisJCXJ1bl90ZXN0X29uX3BpcGVfcGxhbmVzKGRh dGEsIHBpcGUsIGZhbHNlLCBmYWxzZSwgYXJnYl90cmFuc3BhcmFudCk7CisKKwlpZ3Rfc3VidGVz dF9mKCJwaXBlLSVzLWFscGhhLW9wYXF1ZS1mYiIsIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpKQor CQlydW5fdGVzdF9vbl9waXBlX3BsYW5lcyhkYXRhLCBwaXBlLCBmYWxzZSwgZmFsc2UsIGFyZ2Jf b3BhcXVlKTsKKworCWlndF9zdWJ0ZXN0X2YoInBpcGUtJXMtY29uc3RhbnQtYWxwaGEtbWluIiwg a21zdGVzdF9waXBlX25hbWUocGlwZSkpCisJCXJ1bl90ZXN0X29uX3BpcGVfcGxhbmVzKGRhdGEs IHBpcGUsIHRydWUsIGZhbHNlLCBjb25zdGFudF9hbHBoYV9taW4pOworCisJaWd0X3N1YnRlc3Rf ZigicGlwZS0lcy1jb25zdGFudC1hbHBoYS1taWQiLCBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSkK KwkJcnVuX3Rlc3Rfb25fcGlwZV9wbGFuZXMoZGF0YSwgcGlwZSwgdHJ1ZSwgZmFsc2UsIGNvbnN0 YW50X2FscGhhX21pZCk7CisKKwlpZ3Rfc3VidGVzdF9mKCJwaXBlLSVzLWNvbnN0YW50LWFscGhh LW1heCIsIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpKQorCQlydW5fdGVzdF9vbl9waXBlX3BsYW5l cyhkYXRhLCBwaXBlLCB0cnVlLCBmYWxzZSwgY29uc3RhbnRfYWxwaGFfbWF4KTsKK30KKworaWd0 X21haW4KK3sKKwlkYXRhX3QgZGF0YSA9IHt9OworCWVudW0gcGlwZSBwaXBlOworCisJaWd0X2Zp eHR1cmUgeworCQlpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7CisKKwkJZGF0YS5nZnhfZmQgPSBk cm1fb3Blbl9kcml2ZXIoRFJJVkVSX0FOWSk7CisJCWlndF9yZXF1aXJlX3BpcGVfY3JjKGRhdGEu Z2Z4X2ZkKTsKKwkJaWd0X2Rpc3BsYXlfaW5pdCgmZGF0YS5kaXNwbGF5LCBkYXRhLmdmeF9mZCk7 CisJCWlndF9yZXF1aXJlKGRhdGEuZGlzcGxheS5pc19hdG9taWMpOworCX0KKworCWZvcl9lYWNo X3BpcGVfc3RhdGljKHBpcGUpCisJCWlndF9zdWJ0ZXN0X2dyb3VwCisJCQlydW5fc3VidGVzdHMo JmRhdGEsIHBpcGUpOworCisJaWd0X2ZpeHR1cmUKKwkJaWd0X2Rpc3BsYXlfZmluaSgmZGF0YS5k aXNwbGF5KTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24u YnVpbGQKaW5kZXggMTQxNTQ2ODY2NzZhLi44MzYzOGQ3NjgwNjkgMTAwNjQ0Ci0tLSBhL3Rlc3Rz L21lc29uLmJ1aWxkCisrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCkBAIC0xNjksNiArMTY5LDcgQEAg dGVzdF9wcm9ncyA9IFsKIAkna21zX3BpcGVfYl9jX2l2YicsCiAJJ2ttc19waXBlX2NyY19iYXNp YycsCiAJJ2ttc19wbGFuZScsCisJJ2ttc19wbGFuZV9hbHBoYV9ibGVuZCcsCiAJJ2ttc19wbGFu ZV9sb3dyZXMnLAogCSdrbXNfcGxhbmVfbXVsdGlwbGUnLAogCSdrbXNfcGxhbmVfc2NhbGluZycs Ci0tIAoyLjE5LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=