From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Maarten Lankhorst Date: Wed, 15 Aug 2018 10:23:27 +0200 Message-Id: <20180815082327.14450-3-maarten.lankhorst@linux.intel.com> In-Reply-To: <20180815082327.14450-1-maarten.lankhorst@linux.intel.com> References: <20180815082327.14450-1-maarten.lankhorst@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 3/3] tests: Add kms plane alpha blending test. 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: Lowry Li , Liviu Dudau , dri-devel@lists.freedesktop.org List-ID: U2lnbmVkLW9mZi1ieTogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4 LmludGVsLmNvbT4KLS0tCiBsaWIvaWd0X2ttcy5jICAgICAgICAgICAgICAgICB8ICAgMiArCiBs aWIvaWd0X2ttcy5oICAgICAgICAgICAgICAgICB8ICAgMiArCiB0ZXN0cy9NYWtlZmlsZS5zb3Vy Y2VzICAgICAgICB8ICAgMSArCiB0ZXN0cy9rbXNfcGxhbmVfYWxwaGFfYmxlbmQuYyB8IDU2MSAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9tZXNvbi5idWlsZCAgICAg ICAgICAgICB8ICAgMSArCiA1IGZpbGVzIGNoYW5nZWQsIDU2NyBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX3BsYW5lX2FscGhhX2JsZW5kLmMKCmRpZmYgLS1naXQg YS9saWIvaWd0X2ttcy5jIGIvbGliL2lndF9rbXMuYwppbmRleCA2MmQ4NDY4NDE1YzYuLjcwMzcz YmMzNzNhOSAxMDA2NDQKLS0tIGEvbGliL2lndF9rbXMuYworKysgYi9saWIvaWd0X2ttcy5jCkBA IC0xNzUsNiArMTc1LDggQEAgY29uc3QgY2hhciAqIGNvbnN0IGlndF9wbGFuZV9wcm9wX25hbWVz W0lHVF9OVU1fUExBTkVfUFJPUFNdID0gewogCVtJR1RfUExBTkVfSU5fRk9STUFUU10gPSAiSU5f Rk9STUFUUyIsCiAJW0lHVF9QTEFORV9DT0xPUl9FTkNPRElOR10gPSAiQ09MT1JfRU5DT0RJTkci LAogCVtJR1RfUExBTkVfQ09MT1JfUkFOR0VdID0gIkNPTE9SX1JBTkdFIiwKKwlbSUdUX1BMQU5F X1BJWEVMX0JMRU5EX01PREVdID0gInBpeGVsIGJsZW5kIG1vZGUiLAorCVtJR1RfUExBTkVfQUxQ SEFdID0gImFscGhhIiwKIH07CiAKIGNvbnN0IGNoYXIgKiBjb25zdCBpZ3RfY3J0Y19wcm9wX25h bWVzW0lHVF9OVU1fQ1JUQ19QUk9QU10gPSB7CmRpZmYgLS1naXQgYS9saWIvaWd0X2ttcy5oIGIv bGliL2lndF9rbXMuaAppbmRleCAzYTEyZjI3ODJlZWQuLmYwNTA5YjUxYTAzOCAxMDA2NDQKLS0t IGEvbGliL2lndF9rbXMuaAorKysgYi9saWIvaWd0X2ttcy5oCkBAIC0yNjYsNiArMjY2LDggQEAg ZW51bSBpZ3RfYXRvbWljX3BsYW5lX3Byb3BlcnRpZXMgewogICAgICAgIElHVF9QTEFORV9JTl9G T1JNQVRTLAogICAgICAgIElHVF9QTEFORV9DT0xPUl9FTkNPRElORywKICAgICAgICBJR1RfUExB TkVfQ09MT1JfUkFOR0UsCisgICAgICAgSUdUX1BMQU5FX1BJWEVMX0JMRU5EX01PREUsCisgICAg ICAgSUdUX1BMQU5FX0FMUEhBLAogICAgICAgIElHVF9OVU1fUExBTkVfUFJPUFMKIH07CiAKZGlm ZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2Vz CmluZGV4IGM4NDkzM2YxZDk3MS4uZTE3ZWIzY2IyMDI5IDEwMDY0NAotLS0gYS90ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzCisrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKQEAgLTE5NCw2ICsxOTQs NyBAQCBURVNUU19wcm9ncyA9IFwKIAlrbXNfcGlwZV9iX2NfaXZiIFwKIAlrbXNfcGlwZV9jcmNf YmFzaWMgXAogCWttc19wbGFuZSBcCisJa21zX3BsYW5lX2FscGhhX2JsZW5kIFwKIAlrbXNfcGxh bmVfbG93cmVzIFwKIAlrbXNfcGxhbmVfbXVsdGlwbGUgXAogCWttc19wbGFuZV9zY2FsaW5nIFwK ZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc19wbGFuZV9hbHBoYV9ibGVuZC5jIGIvdGVzdHMva21zX3Bs YW5lX2FscGhhX2JsZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li44Y2U5YzQ2MGU5YzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9rbXNfcGxhbmVfYWxwaGFf YmxlbmQuYwpAQCAtMCwwICsxLDU2MSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVs IENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks CisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgp IHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdI VCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJF LgorICoKKyAqLworCisjaW5jbHVkZSAiaWd0LmgiCisjaW5jbHVkZSA8bWF0aC5oPgorCitJR1Rf VEVTVF9ERVNDUklQVElPTigiVGVzdCBwbGFuZSBhbHBoYSBhbmQgYmxlbmRpbmcgbW9kZSBwcm9w ZXJ0aWVzIik7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgZ2Z4X2ZkOworCWlndF9kaXNwbGF5 X3QgZGlzcGxheTsKKwlzdHJ1Y3QgaWd0X2ZiIHhyZ2JfZmIsIGFyZ2JfZmJfMCwgYXJnYl9mYl9j b3ZfMCwgYXJnYl9mYl83ZSwgYXJnYl9mYl9jb3ZfN2UsIGFyZ2JfZmJfZmMsIGFyZ2JfZmJfY292 X2ZjLCBhcmdiX2ZiXzEwMCwgYmxhY2tfZmIsIGdyYXlfZmI7CisJaWd0X2NyY190IHJlZl9jcmM7 CisJaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjOworfSBkYXRhX3Q7CisKK3N0YXRpYyB2b2lkIF9f ZHJhd19ncmFkaWVudChzdHJ1Y3QgaWd0X2ZiICpmYiwgaW50IHcsIGludCBoLCBkb3VibGUgYSwg Y2Fpcm9fdCAqY3IpCit7CisJY2Fpcm9fcGF0dGVybl90ICpwYXQ7CisKKwlwYXQgPSBjYWlyb19w YXR0ZXJuX2NyZWF0ZV9saW5lYXIoMCwgMCwgdywgaCk7CisJY2Fpcm9fcGF0dGVybl9hZGRfY29s b3Jfc3RvcF9yZ2JhKHBhdCwgMC4wMCwgMC4wMCwgMC4wMCwgMC4wMCwgMS4pOworCWNhaXJvX3Bh dHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShwYXQsIDAuMjUsIDEuMDAsIDEuMDAsIDAuMDAsIDEu KTsKKwljYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYmEocGF0LCAwLjUwLCAwLjAwLCAx LjAwLCAxLjAwLCAxLik7CisJY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKHBhdCwg MC43NSwgMS4wMCwgMC4wMCwgMS4wMCwgMS4pOworCWNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0 b3BfcmdiYShwYXQsIDEuMDAsIDEuMDAsIDEuMDAsIDEuMDAsIDEuKTsKKworCWNhaXJvX3JlY3Rh bmdsZShjciwgMCwgMCwgdywgaCk7CisJY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0KTsKKwljYWly b19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisJY2Fpcm9fcGFpbnRf d2l0aF9hbHBoYShjciwgYSk7CisJY2Fpcm9fcGF0dGVybl9kZXN0cm95KHBhdCk7Cit9CisKK3N0 YXRpYyB2b2lkIGRyYXdfZ3JhZGllbnQoc3RydWN0IGlndF9mYiAqZmIsIGludCB3LCBpbnQgaCwg ZG91YmxlIGEpCit7CisJY2Fpcm9fdCAqY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChmYi0+ZmQsIGZi KTsKKworCV9fZHJhd19ncmFkaWVudChmYiwgdywgaCwgYSwgY3IpOworCisJaWd0X3B1dF9jYWly b19jdHgoZmItPmZkLCBmYiwgY3IpOworfQorCitzdGF0aWMgdm9pZCBkcmF3X2dyYWRpZW50X2Nv dmVyYWdlKHN0cnVjdCBpZ3RfZmIgKmZiLCBpbnQgdywgaW50IGgsIHVpbnQ4X3QgYSkKK3sKKwlj YWlyb190ICpjciA9IGlndF9nZXRfY2Fpcm9fY3R4KGZiLT5mZCwgZmIpOworCXVpbnQ4X3QgKmRh dGEgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGZiLT5jYWlyb19zdXJmYWNlKTsKKwl1 aW50MzJfdCBzdHJpZGUgPSBmYi0+c3RyaWRlOworCWludCBpOworCisJX19kcmF3X2dyYWRpZW50 KGZiLCB3LCBoLCAxLiwgY3IpOworCisJZm9yICg7IGgtLTsgZGF0YSArPSBzdHJpZGUpCisJCWZv ciAoaSA9IDA7IGkgPCB3OyBpKyspCisJCQlkYXRhW2kgKiA0ICsgM10gPSBhOworCisJaWd0X3B1 dF9jYWlyb19jdHgoZmItPmZkLCBmYiwgY3IpOworfQorCitzdGF0aWMgdm9pZCBkcmF3X3NxdWFy ZXMoc3RydWN0IGlndF9mYiAqZmIsIGludCB3LCBpbnQgaCwgZG91YmxlIGEpCit7CisJY2Fpcm9f dCAqY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChmYi0+ZmQsIGZiKTsKKworCWlndF9wYWludF9jb2xv cl9hbHBoYShjciwgMCwgMCwgICAgICAgICB3IC8gMiwgaCAvIDIsIDEuLCAwLiwgMC4sIGEpOwor CWlndF9wYWludF9jb2xvcl9hbHBoYShjciwgdyAvIDIsIDAsICAgICB3IC8gMiwgaCAvIDIsIDAu LCAxLiwgMC4sIGEpOworCWlndF9wYWludF9jb2xvcl9hbHBoYShjciwgMCwgaCAvIDIsICAgICB3 IC8gMiwgaCAvIDIsIDAuLCAwLiwgMS4sIGEpOworCWlndF9wYWludF9jb2xvcl9hbHBoYShjciwg dyAvIDIsIGggLyAyLCB3IC8gNCwgaCAvIDIsIDEuLCAxLiwgMS4sIGEpOworCWlndF9wYWludF9j b2xvcl9hbHBoYShjciwgMyAqIHcgLyA0LCBoIC8gMiwgdyAvIDQsIGggLyAyLCAwLiwgMC4sIDAu LCBhKTsKKworCWlndF9wdXRfY2Fpcm9fY3R4KGZiLT5mZCwgZmIsIGNyKTsKK30KKworc3RhdGlj IHZvaWQgZHJhd19zcXVhcmVzX2NvdmVyYWdlKHN0cnVjdCBpZ3RfZmIgKmZiLCBpbnQgdywgaW50 IGgsIHVpbnQ4X3QgYXMpCit7CisJY2Fpcm9fdCAqY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChmYi0+ ZmQsIGZiKTsKKwlpbnQgaSwgajsKKwl1aW50MzJfdCAqZGF0YSA9ICh2b2lkICopY2Fpcm9faW1h Z2Vfc3VyZmFjZV9nZXRfZGF0YShmYi0+Y2Fpcm9fc3VyZmFjZSk7CisJdWludDMyX3Qgc3RyaWRl ID0gZmItPnN0cmlkZSAvIDQ7CisJdWludDMyX3QgYSA9IGFzIDw8IDI0OworCisJZm9yIChqID0g MDsgaiA8IGggLyAyOyBqKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IHcgLyAyOyBpKyspCisJCQlk YXRhW2ogKiBzdHJpZGUgKyBpXSA9IGEgfCAweGZmMDAwMDsKKworCQlmb3IgKDsgaSA8IHc7IGkr KykKKwkJCWRhdGFbaiAqIHN0cmlkZSArIGldID0gYSB8IDB4ZmYwMDsKKwl9CisKKwlmb3IgKGog PSBoIC8gMjsgaiA8IGg7IGorKykgeworCQlmb3IgKGkgPSAwOyBpIDwgdyAvIDI7IGkrKykKKwkJ CWRhdGFbaiAqIHN0cmlkZSArIGldID0gYSB8IDB4ZmY7CisKKwkJZm9yICg7IGkgPCAzICogdyAv IDQ7IGkrKykKKwkJCWRhdGFbaiAqIHN0cmlkZSArIGldID0gYSB8IDB4ZmZmZmZmOworCisJCWZv ciAoOyBpIDwgdzsgaSsrKQorCQkJZGF0YVtqICogc3RyaWRlICsgaV0gPSBhOworCX0KKworCWln dF9wdXRfY2Fpcm9fY3R4KGZiLT5mZCwgZmIsIGNyKTsKK30KKworc3RhdGljIHZvaWQgcmVzZXRf YWxwaGEoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgZW51bSBwaXBlIHBpcGUpCit7CisJaWd0X3Bs YW5lX3QgKnBsYW5lOworCisJZm9yX2VhY2hfcGxhbmVfb25fcGlwZShkaXNwbGF5LCBwaXBlLCBw bGFuZSkgeworCQlpZiAoaWd0X3BsYW5lX2hhc19wcm9wKHBsYW5lLCBJR1RfUExBTkVfQUxQSEEp KQorCQkJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVlKHBsYW5lLCBJR1RfUExBTkVfQUxQSEEsIDB4 ZmZmZik7CisKKwkJaWYgKGlndF9wbGFuZV9oYXNfcHJvcChwbGFuZSwgSUdUX1BMQU5FX1BJWEVM X0JMRU5EX01PREUpKQorCQkJaWd0X3BsYW5lX3NldF9wcm9wX2VudW0ocGxhbmUsIElHVF9QTEFO RV9QSVhFTF9CTEVORF9NT0RFLCAiUHJlLW11bHRpcGxpZWQiKTsKKwl9Cit9CisKK3N0YXRpYyB2 b2lkIHByZXBhcmVfY3J0YyhkYXRhX3QgKmRhdGEsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCBlbnVt IHBpcGUgcGlwZSkKK3sKKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7CisJaWd0X2Rpc3BsYXlfdCAq ZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWludCB3LCBoOworCWlndF9wbGFuZV90ICpwcmlt YXJ5ID0gaWd0X3BpcGVfZ2V0X3BsYW5lX3R5cGUoJmRpc3BsYXktPnBpcGVzW3BpcGVdLCBEUk1f UExBTkVfVFlQRV9QUklNQVJZKTsKKworCWlndF9kaXNwbGF5X3Jlc2V0KGRpc3BsYXkpOworCWln dF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlKTsKKworCS8qIGNyZWF0ZSB0aGUgcGlwZV9j cmMgb2JqZWN0IGZvciB0aGlzIHBpcGUgKi8KKwlpZ3RfcGlwZV9jcmNfZnJlZShkYXRhLT5waXBl X2NyYyk7CisJZGF0YS0+cGlwZV9jcmMgPSBpZ3RfcGlwZV9jcmNfbmV3KGRhdGEtPmdmeF9mZCwg cGlwZSwgSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOworCisJbW9kZSA9IGlndF9vdXRwdXRf Z2V0X21vZGUob3V0cHV0KTsKKwl3ID0gbW9kZS0+aGRpc3BsYXk7CisJaCA9IG1vZGUtPnZkaXNw bGF5OworCisJLyogcmVjcmVhdGUgYWxsIGZicyBpZiBpbmNvbXBhdGlibGUgKi8KKwlpZiAoZGF0 YS0+eHJnYl9mYi53aWR0aCAhPSB3IHx8IGRhdGEtPnhyZ2JfZmIuaGVpZ2h0ICE9IGgpIHsKKwkJ Y2Fpcm9fdCAqY3I7CisKKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5nZnhfZmQsICZkYXRhLT54cmdi X2ZiKTsKKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5nZnhfZmQsICZkYXRhLT5hcmdiX2ZiXzApOwor CQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmdmeF9mZCwgJmRhdGEtPmFyZ2JfZmJfY292XzApOworCQlp Z3RfcmVtb3ZlX2ZiKGRhdGEtPmdmeF9mZCwgJmRhdGEtPmFyZ2JfZmJfN2UpOworCQlpZ3RfcmVt b3ZlX2ZiKGRhdGEtPmdmeF9mZCwgJmRhdGEtPmFyZ2JfZmJfZmMpOworCQlpZ3RfcmVtb3ZlX2Zi KGRhdGEtPmdmeF9mZCwgJmRhdGEtPmFyZ2JfZmJfY292XzdlKTsKKwkJaWd0X3JlbW92ZV9mYihk YXRhLT5nZnhfZmQsICZkYXRhLT5hcmdiX2ZiX2Nvdl9mYyk7CisJCWlndF9yZW1vdmVfZmIoZGF0 YS0+Z2Z4X2ZkLCAmZGF0YS0+YXJnYl9mYl8xMDApOworCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmdm eF9mZCwgJmRhdGEtPmJsYWNrX2ZiKTsKKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5nZnhfZmQsICZk YXRhLT5ncmF5X2ZiKTsKKworCQlpZ3RfY3JlYXRlX2ZiKGRhdGEtPmdmeF9mZCwgdywgaCwKKwkJ CSAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJ CQkgICAgICAmZGF0YS0+eHJnYl9mYik7CisJCWRyYXdfZ3JhZGllbnQoJmRhdGEtPnhyZ2JfZmIs IHcsIGgsIDEuKTsKKworCQlpZ3RfY3JlYXRlX2ZiKGRhdGEtPmdmeF9mZCwgdywgaCwKKwkJCSAg ICAgIERSTV9GT1JNQVRfQVJHQjg4ODgsIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkg ICAgICAmZGF0YS0+YXJnYl9mYl9jb3ZfMCk7CisJCWRyYXdfZ3JhZGllbnRfY292ZXJhZ2UoJmRh dGEtPmFyZ2JfZmJfY292XzAsIHcsIGgsIDApOworCisJCWlndF9jcmVhdGVfZmIoZGF0YS0+Z2Z4 X2ZkLCB3LCBoLAorCQkJICAgICAgRFJNX0ZPUk1BVF9BUkdCODg4OCwgTE9DQUxfRFJNX0ZPUk1B VF9NT0RfTk9ORSwKKwkJCSAgICAgICZkYXRhLT5hcmdiX2ZiXzApOworCisJCWNyID0gaWd0X2dl dF9jYWlyb19jdHgoZGF0YS0+Z2Z4X2ZkLCAmZGF0YS0+YXJnYl9mYl8wKTsKKwkJaWd0X3BhaW50 X2NvbG9yX2FscGhhKGNyLCAwLCAwLCB3LCBoLCAwLiwgMC4sIDAuLCAxLjApOworCQlpZ3RfcHV0 X2NhaXJvX2N0eChkYXRhLT5nZnhfZmQsICZkYXRhLT5hcmdiX2ZiXzAsIGNyKTsKKworCQlpZ3Rf Y3JlYXRlX2ZiKGRhdGEtPmdmeF9mZCwgdywgaCwKKwkJCSAgICAgIERSTV9GT1JNQVRfQVJHQjg4 ODgsIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkgICAgICAmZGF0YS0+YXJnYl9mYl83 ZSk7CisJCWRyYXdfc3F1YXJlcygmZGF0YS0+YXJnYl9mYl83ZSwgdywgaCwgMTI2LiAvIDI1NS4p OworCisJCWlndF9jcmVhdGVfZmIoZGF0YS0+Z2Z4X2ZkLCB3LCBoLAorCQkJICAgICAgRFJNX0ZP Uk1BVF9BUkdCODg4OCwgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKKwkJCSAgICAgICZkYXRh LT5hcmdiX2ZiX2Nvdl83ZSk7CisJCWRyYXdfc3F1YXJlc19jb3ZlcmFnZSgmZGF0YS0+YXJnYl9m Yl9jb3ZfN2UsIHcsIGgsIDB4N2UpOworCisJCWlndF9jcmVhdGVfZmIoZGF0YS0+Z2Z4X2ZkLCB3 LCBoLAorCQkJICAgICAgRFJNX0ZPUk1BVF9BUkdCODg4OCwgTE9DQUxfRFJNX0ZPUk1BVF9NT0Rf Tk9ORSwKKwkJCSAgICAgICZkYXRhLT5hcmdiX2ZiX2ZjKTsKKwkJZHJhd19zcXVhcmVzKCZkYXRh LT5hcmdiX2ZiX2ZjLCB3LCBoLCAyNTIuIC8gMjU1Lik7CisKKwkJaWd0X2NyZWF0ZV9mYihkYXRh LT5nZnhfZmQsIHcsIGgsCisJCQkgICAgICBEUk1fRk9STUFUX0FSR0I4ODg4LCBMT0NBTF9EUk1f Rk9STUFUX01PRF9OT05FLAorCQkJICAgICAgJmRhdGEtPmFyZ2JfZmJfY292X2ZjKTsKKwkJZHJh d19zcXVhcmVzX2NvdmVyYWdlKCZkYXRhLT5hcmdiX2ZiX2Nvdl9mYywgdywgaCwgMHhmYyk7CisK KwkJaWd0X2NyZWF0ZV9mYihkYXRhLT5nZnhfZmQsIHcsIGgsCisJCQkgICAgICBEUk1fRk9STUFU X0FSR0I4ODg4LCBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAorCQkJICAgICAgJmRhdGEtPmFy Z2JfZmJfMTAwKTsKKwkJZHJhd19ncmFkaWVudCgmZGF0YS0+YXJnYl9mYl8xMDAsIHcsIGgsIDEu KTsKKworCQlpZ3RfY3JlYXRlX2ZiKGRhdGEtPmdmeF9mZCwgdywgaCwKKwkJCSAgICAgIERSTV9G T1JNQVRfWFJHQjg4ODgsIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkgICAgICAmZGF0 YS0+YmxhY2tfZmIpOworCisJCWlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+Z2Z4X2ZkLCB3LCBo LAorCQkJCSAgICBEUk1fRk9STUFUX1hSR0I4ODg4LCBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05F LAorCQkJCSAgICAuNSwgLjUsIC41LCAmZGF0YS0+Z3JheV9mYik7CisJfQorCisJaWd0X3BsYW5l X3NldF9mYihwcmltYXJ5LCAmZGF0YS0+YmxhY2tfZmIpOworCS8qIHJlc2V0IGFscGhhIHByb3Bl cnR5IHRvIGRlZmF1bHQgKi8KKwlyZXNldF9hbHBoYShkaXNwbGF5LCBwaXBlKTsKK30KKworc3Rh dGljIHZvaWQgYmFzaWNfYWxwaGEoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgaWd0X3Bs YW5lX3QgKnBsYW5lKQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxh eTsKKwlpZ3RfY3JjX3QgcmVmX2NyYywgY3JjOworCWludCBpOworCisJLyogVGVzdGNhc2UgMTog YWxwaGEgPSAwLjAsIHBsYW5lIHNob3VsZCBiZSB0cmFuc3BhcmFudC4gKi8KKwlpZ3RfZGlzcGxh eV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCWlndF9waXBlX2NyY19zdGFydChk YXRhLT5waXBlX2NyYyk7CisJaWd0X3BpcGVfY3JjX2dldF9zaW5nbGUoZGF0YS0+cGlwZV9jcmMs ICZyZWZfY3JjKTsKKworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5hcmdiX2ZiXzAp OworCisJLyogdHJhbnNwYXJhbnQgZmIgc2hvdWxkIGJlIHRyYW5zcGFyYW50LCBubyBtYXR0ZXIg d2hhdC4uICovCisJZm9yIChpID0gNzsgaSA8IDI1NjsgaSArPSA4KSB7CisJCWlndF9wbGFuZV9z ZXRfcHJvcF92YWx1ZShwbGFuZSwgSUdUX1BMQU5FX0FMUEhBLCBpIHwgKGkgPDwgOCkpOworCQlp Z3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCisJCWlndF9waXBl X2NyY19kcmFpbihkYXRhLT5waXBlX2NyYyk7CisJCWlndF9waXBlX2NyY19nZXRfc2luZ2xlKGRh dGEtPnBpcGVfY3JjLCAmY3JjKTsKKwkJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJnJlZl9jcmMsICZj cmMpOworCX0KKworCS8qIEFuZCB0ZXN0IGFscGhhID0gMCwgc2hvdWxkIGdpdmUgc2FtZSBDUkMs IGJ1dCBkb2Vzbid0IG9uIHNvbWUgaTkxNSBwbGF0Zm9ybXMuICovCisJaWd0X3BsYW5lX3NldF9w cm9wX3ZhbHVlKHBsYW5lLCBJR1RfUExBTkVfQUxQSEEsIDApOworCWlndF9kaXNwbGF5X2NvbW1p dDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisKKwlpZ3RfcGlwZV9jcmNfZHJhaW4oZGF0YS0+ cGlwZV9jcmMpOworCWlndF9waXBlX2NyY19nZXRfc2luZ2xlKGRhdGEtPnBpcGVfY3JjLCAmY3Jj KTsKKwlpZ3RfcGlwZV9jcmNfc3RvcChkYXRhLT5waXBlX2NyYyk7CisJaWd0X2Fzc2VydF9jcmNf ZXF1YWwoJnJlZl9jcmMsICZjcmMpOworfQorCitzdGF0aWMgdm9pZCBhcmdiX29wYXF1ZShkYXRh X3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlLCBpZ3RfcGxhbmVfdCAqcGxhbmUpCit7CisJaWd0X2Rp c3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9jcmNfdCByZWZfY3JjLCBj cmM7CisKKwkvKiBhbHBoYSA9IDEuMCwgcGxhbmUgc2hvdWxkIGJlIGZ1bGx5IG9wYXF1ZSwgdGVz dCB3aXRoIGFuIG9wYXF1ZSBmYiAqLworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT54 cmdiX2ZiKTsKKwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwor CWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJnJlZl9jcmMpOworCisJ aWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmFyZ2JfZmJfMTAwKTsKKwlpZ3RfZGlzcGxh eV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCWlndF9waXBlX2NyY19jb2xsZWN0 X2NyYyhkYXRhLT5waXBlX2NyYywgJmNyYyk7CisKKwlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmcmVm X2NyYywgJmNyYyk7Cit9CisKK3N0YXRpYyB2b2lkIGFyZ2JfdHJhbnNwYXJhbnQoZGF0YV90ICpk YXRhLCBlbnVtIHBpcGUgcGlwZSwgaWd0X3BsYW5lX3QgKnBsYW5lKQoreworCWlndF9kaXNwbGF5 X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3RfY3JjX3QgcmVmX2NyYywgY3JjOwor CisJLyogYWxwaGEgPSAxLjAsIHBsYW5lIHNob3VsZCBiZSBmdWxseSBvcGFxdWUsIHRlc3Qgd2l0 aCBhIHRyYW5zcGFyYW50IGZiICovCisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7CisJ aWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwlpZ3RfcGlwZV9j cmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZyZWZfY3JjKTsKKworCWlndF9wbGFuZV9z ZXRfZmIocGxhbmUsICZkYXRhLT5hcmdiX2ZiXzApOworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlz cGxheSwgQ09NTUlUX0FUT01JQyk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBp cGVfY3JjLCAmY3JjKTsKKworCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZyZWZfY3JjLCAmY3JjKTsK K30KKworc3RhdGljIHZvaWQgY29uc3RhbnRfYWxwaGFfbWluKGRhdGFfdCAqZGF0YSwgZW51bSBw aXBlIHBpcGUsIGlndF9wbGFuZV90ICpwbGFuZSkKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5 ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0X2NyY190IHJlZl9jcmMsIGNyYzsKKworCWlndF9wbGFu ZV9zZXRfZmIocGxhbmUsIE5VTEwpOworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09N TUlUX0FUT01JQyk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAm cmVmX2NyYyk7CisKKwlpZ3RfcGxhbmVfc2V0X3Byb3BfZW51bShwbGFuZSwgSUdUX1BMQU5FX1BJ WEVMX0JMRU5EX01PREUsICJOb25lIik7CisJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVlKHBsYW5l LCBJR1RfUExBTkVfQUxQSEEsIDApOworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5h cmdiX2ZiXzEwMCk7CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlD KTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZjcmMpOworCWln dF9hc3NlcnRfY3JjX2VxdWFsKCZyZWZfY3JjLCAmY3JjKTsKKworCWlndF9wbGFuZV9zZXRfZmIo cGxhbmUsICZkYXRhLT5hcmdiX2ZiXzApOworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwg Q09NTUlUX0FUT01JQyk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3Jj LCAmY3JjKTsKKwlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmcmVmX2NyYywgJmNyYyk7Cit9CisKK3N0 YXRpYyB2b2lkIGNvbnN0YW50X2FscGhhX21pZChkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBl LCBpZ3RfcGxhbmVfdCAqcGxhbmUpCit7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRh LT5kaXNwbGF5OworCWlndF9jcmNfdCByZWZfY3JjLCBjcmM7CisKKwlpZiAocGxhbmUtPnR5cGUg IT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSkKKwkJaWd0X3BsYW5lX3NldF9mYihpZ3RfcGlwZV9n ZXRfcGxhbmVfdHlwZSgmZGlzcGxheS0+cGlwZXNbcGlwZV0sIERSTV9QTEFORV9UWVBFX1BSSU1B UlkpLCAmZGF0YS0+Z3JheV9mYik7CisKKwlpZ3RfcGxhbmVfc2V0X3Byb3BfZW51bShwbGFuZSwg SUdUX1BMQU5FX1BJWEVMX0JMRU5EX01PREUsICJOb25lIik7CisJaWd0X3BsYW5lX3NldF9wcm9w X3ZhbHVlKHBsYW5lLCBJR1RfUExBTkVfQUxQSEEsIDB4N2ZmZik7CisJaWd0X3BsYW5lX3NldF9m YihwbGFuZSwgJmRhdGEtPnhyZ2JfZmIpOworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwg Q09NTUlUX0FUT01JQyk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3Jj LCAmcmVmX2NyYyk7CisKKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+YXJnYl9mYl9j b3ZfMCk7CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwlp Z3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZjcmMpOworCWlndF9hc3Nl cnRfY3JjX2VxdWFsKCZyZWZfY3JjLCAmY3JjKTsKKworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUs ICZkYXRhLT5hcmdiX2ZiXzEwMCk7CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01N SVRfQVRPTUlDKTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZj cmMpOworCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZyZWZfY3JjLCAmY3JjKTsKK30KKworc3RhdGlj IHZvaWQgY29uc3RhbnRfYWxwaGFfbWF4KGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsIGln dF9wbGFuZV90ICpwbGFuZSkKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRp c3BsYXk7CisJaWd0X2NyY190IHJlZl9jcmMsIGNyYzsKKworCWlmIChwbGFuZS0+dHlwZSAhPSBE Uk1fUExBTkVfVFlQRV9QUklNQVJZKQorCQlpZ3RfcGxhbmVfc2V0X2ZiKGlndF9waXBlX2dldF9w bGFuZV90eXBlKCZkaXNwbGF5LT5waXBlc1twaXBlXSwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSks ICZkYXRhLT5ncmF5X2ZiKTsKKworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5hcmdi X2ZiXzEwMCk7CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsK KwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZyZWZfY3JjKTsKKwor CWlndF9wbGFuZV9zZXRfcHJvcF9lbnVtKHBsYW5lLCBJR1RfUExBTkVfUElYRUxfQkxFTkRfTU9E RSwgIk5vbmUiKTsKKwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMp OworCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmNyYyk7CisJaWd0 X2Fzc2VydF9jcmNfZXF1YWwoJnJlZl9jcmMsICZjcmMpOworCisJaWd0X3BsYW5lX3NldF9mYihw bGFuZSwgJmRhdGEtPmFyZ2JfZmJfY292XzApOworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxh eSwgQ09NTUlUX0FUT01JQyk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVf Y3JjLCAmY3JjKTsKKwlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmcmVmX2NyYywgJmNyYyk7CisKKwlp Z3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+eHJnYl9mYik7CisJaWd0X2Rpc3BsYXlfY29t bWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMo ZGF0YS0+cGlwZV9jcmMsICZjcmMpOworCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZyZWZfY3JjLCAm Y3JjKTsKKworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIE5VTEwpOworfQorCitzdGF0aWMgdm9p ZCBhbHBoYV83ZWZjKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsIGlndF9wbGFuZV90ICpw bGFuZSkKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7CisJaWd0 X2NyY190IHJlZl9jcmMgPSB7fSwgY3JjID0ge307CisJaW50IGk7CisKKwlpZiAocGxhbmUtPnR5 cGUgIT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSkKKwkJaWd0X3BsYW5lX3NldF9mYihpZ3RfcGlw ZV9nZXRfcGxhbmVfdHlwZSgmZGlzcGxheS0+cGlwZXNbcGlwZV0sIERSTV9QTEFORV9UWVBFX1BS SU1BUlkpLCAmZGF0YS0+Z3JheV9mYik7CisKKwlpZ3RfcGlwZV9jcmNfc3RhcnQoZGF0YS0+cGlw ZV9jcmMpOworCisJLyogZm9yIGNvdmVyYWdlLCBwbGFuZSBhbHBoYSBhbmQgZmIgYWxwaGEgc2hv dWxkIGJlIHN3YXBwYWJsZSwgc28gc3dhcCBmYiBhbmQgYWxwaGEgKi8KKwlmb3IgKGkgPSAwOyBp IDwgMjU2OyBpICs9IDgpIHsKKwkJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVlKHBsYW5lLCBJR1Rf UExBTkVfQUxQSEEsICgoaS8yKSA8PCA4KSB8IChpLzIpKTsKKwkJaWd0X3BsYW5lX3NldF9mYihw bGFuZSwgJmRhdGEtPmFyZ2JfZmJfZmMpOworCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXks IENPTU1JVF9BVE9NSUMpOworCisJCWlndF9waXBlX2NyY19kcmFpbihkYXRhLT5waXBlX2NyYyk7 CisJCWlndF9waXBlX2NyY19nZXRfc2luZ2xlKGRhdGEtPnBpcGVfY3JjLCAmcmVmX2NyYyk7CisK KwkJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVlKHBsYW5lLCBJR1RfUExBTkVfQUxQSEEsIChpIDw8 IDgpIHwgaSk7CisJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5hcmdiX2ZiXzdlKTsK KwkJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKworCQlpZ3Rf cGlwZV9jcmNfZHJhaW4oZGF0YS0+cGlwZV9jcmMpOworCQlpZ3RfcGlwZV9jcmNfZ2V0X3Npbmds ZShkYXRhLT5waXBlX2NyYywgJmNyYyk7CisJCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZyZWZfY3Jj LCAmY3JjKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvdmVyYWdlXzdlZmMoZGF0YV90ICpkYXRh LCBlbnVtIHBpcGUgcGlwZSwgaWd0X3BsYW5lX3QgKnBsYW5lKQoreworCWlndF9kaXNwbGF5X3Qg KmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3RfY3JjX3QgcmVmX2NyYyA9IHt9LCBjcmMg PSB7fTsKKwlpbnQgaTsKKworCWlndF9wbGFuZV9zZXRfcHJvcF9lbnVtKHBsYW5lLCBJR1RfUExB TkVfUElYRUxfQkxFTkRfTU9ERSwgIkNvdmVyYWdlIik7CisJaWd0X3BpcGVfY3JjX3N0YXJ0KGRh dGEtPnBpcGVfY3JjKTsKKworCS8qIGZvciBjb3ZlcmFnZSwgcGxhbmUgYWxwaGEgYW5kIGZiIGFs cGhhIHNob3VsZCBiZSBzd2FwcGFibGUsIHNvIHN3YXAgZmIgYW5kIGFscGhhICovCisJZm9yIChp ID0gMDsgaSA8IDI1NjsgaSArPSA4KSB7CisJCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1ZShwbGFu ZSwgSUdUX1BMQU5FX0FMUEhBLCAoKGkvMikgPDwgOCkgfCAoaS8yKSk7CisJCWlndF9wbGFuZV9z ZXRfZmIocGxhbmUsICZkYXRhLT5hcmdiX2ZiX2Nvdl9mYyk7CisJCWlndF9kaXNwbGF5X2NvbW1p dDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisKKwkJaWd0X3BpcGVfY3JjX2RyYWluKGRhdGEt PnBpcGVfY3JjKTsKKwkJaWd0X3BpcGVfY3JjX2dldF9zaW5nbGUoZGF0YS0+cGlwZV9jcmMsICZy ZWZfY3JjKTsKKworCQlpZ3RfcGxhbmVfc2V0X3Byb3BfdmFsdWUocGxhbmUsIElHVF9QTEFORV9B TFBIQSwgKGkgPDwgOCkgfCBpKTsKKwkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmFy Z2JfZmJfY292XzdlKTsKKwkJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRP TUlDKTsKKworCQlpZ3RfcGlwZV9jcmNfZHJhaW4oZGF0YS0+cGlwZV9jcmMpOworCQlpZ3RfcGlw ZV9jcmNfZ2V0X3NpbmdsZShkYXRhLT5waXBlX2NyYywgJmNyYyk7CisJCWlndF9hc3NlcnRfY3Jj X2VxdWFsKCZyZWZfY3JjLCAmY3JjKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvdmVyYWdlX3By ZW11bHRfY29uc3RhbnQoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgaWd0X3BsYW5lX3Qg KnBsYW5lKQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlp Z3RfY3JjX3QgcmVmX2NyYyA9IHt9LCBjcmMgPSB7fTsKKworCWlndF9waXBlX2NyY19zdGFydChk YXRhLT5waXBlX2NyYyk7CisKKwkvKiBTZXQgYSBiYWNrZ3JvdW5kIGNvbG9yIG9uIHRoZSBwcmlt YXJ5IGZiIGZvciB0ZXN0aW5nICovCisJaWYgKHBsYW5lLT50eXBlICE9IERSTV9QTEFORV9UWVBF X1BSSU1BUlkpCisJCWlndF9wbGFuZV9zZXRfZmIoaWd0X3BpcGVfZ2V0X3BsYW5lX3R5cGUoJmRp c3BsYXktPnBpcGVzW3BpcGVdLCBEUk1fUExBTkVfVFlQRV9QUklNQVJZKSwgJmRhdGEtPmdyYXlf ZmIpOworCisJaWd0X3BsYW5lX3NldF9wcm9wX2VudW0ocGxhbmUsIElHVF9QTEFORV9QSVhFTF9C TEVORF9NT0RFLCAiQ292ZXJhZ2UiKTsKKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+ YXJnYl9mYl9jb3ZfN2UpOworCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FU T01JQyk7CisKKwlpZ3RfcGlwZV9jcmNfZHJhaW4oZGF0YS0+cGlwZV9jcmMpOworCWlndF9waXBl X2NyY19nZXRfc2luZ2xlKGRhdGEtPnBpcGVfY3JjLCAmcmVmX2NyYyk7CisKKwlpZ3RfcGxhbmVf c2V0X3Byb3BfZW51bShwbGFuZSwgSUdUX1BMQU5FX1BJWEVMX0JMRU5EX01PREUsICJQcmUtbXVs dGlwbGllZCIpOworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5hcmdiX2ZiXzdlKTsK KwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCisJaWd0X3Bp cGVfY3JjX2RyYWluKGRhdGEtPnBpcGVfY3JjKTsKKwlpZ3RfcGlwZV9jcmNfZ2V0X3NpbmdsZShk YXRhLT5waXBlX2NyYywgJmNyYyk7CisJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJnJlZl9jcmMsICZj cmMpOworCisJaWd0X3BsYW5lX3NldF9wcm9wX2VudW0ocGxhbmUsIElHVF9QTEFORV9QSVhFTF9C TEVORF9NT0RFLCAiTm9uZSIpOworCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1ZShwbGFuZSwgSUdU X1BMQU5FX0FMUEhBLCAweDdlN2UpOworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5h cmdiX2ZiX2Nvdl83ZSk7CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRP TUlDKTsKKworCWlndF9waXBlX2NyY19kcmFpbihkYXRhLT5waXBlX2NyYyk7CisJaWd0X3BpcGVf Y3JjX2dldF9zaW5nbGUoZGF0YS0+cGlwZV9jcmMsICZjcmMpOworCWlndF9hc3NlcnRfY3JjX2Vx dWFsKCZyZWZfY3JjLCAmY3JjKTsKK30KKworc3RhdGljIHZvaWQgcnVuX3Rlc3Rfb25fcGlwZV9w bGFuZXMoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgYm9vbCBibGVuZCwKKwkJCQkgICAg dm9pZCgqdGVzdCkoZGF0YV90ICosIGVudW0gcGlwZSwgaWd0X3BsYW5lX3QgKikpCit7CisJaWd0 X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9vdXRwdXRfdCAqb3V0 cHV0ID0gaWd0X2dldF9zaW5nbGVfb3V0cHV0X2Zvcl9waXBlKGRpc3BsYXksIHBpcGUpOworCWln dF9wbGFuZV90ICpwbGFuZTsKKwlib29sIGZvdW5kID0gZmFsc2U7CisKKwlmb3JfZWFjaF9wbGFu ZV9vbl9waXBlKGRpc3BsYXksIHBpcGUsIHBsYW5lKSB7CisJCWlmICghaWd0X3BsYW5lX2hhc19w cm9wKHBsYW5lLCBJR1RfUExBTkVfQUxQSEEpKQorCQkJY29udGludWU7CisKKwkJaWYgKGJsZW5k ICYmICFpZ3RfcGxhbmVfaGFzX3Byb3AocGxhbmUsIElHVF9QTEFORV9QSVhFTF9CTEVORF9NT0RF KSkKKwkJCWNvbnRpbnVlOworCisJCXByZXBhcmVfY3J0YyhkYXRhLCBvdXRwdXQsIHBpcGUpOwor CisJCS8qIHJlc2V0IHBsYW5lIGFscGhhIHByb3BlcnRpZXMgYmV0d2VlbiBlYWNoIHBsYW5lICov CisJCXJlc2V0X2FscGhhKGRpc3BsYXksIHBpcGUpOworCisJCWZvdW5kID0gdHJ1ZTsKKwkJaWd0 X2luZm8oIlRlc3RpbmcgcGxhbmUgJXVcbiIsIHBsYW5lLT5pbmRleCk7CisJCXRlc3QoZGF0YSwg cGlwZSwgcGxhbmUpOworCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKKwl9CisKKwlp Z3RfcmVxdWlyZV9mKGZvdW5kLCAiTm8gcGxhbmVzIHdpdGggJXMgcHJvcGVydHkgZm91bmRcbiIs IGJsZW5kID8gInBpeGVsIGJsZW5kaW5nIG1vZGUiIDogImFscGhhIik7Cit9CisKK3N0YXRpYyB2 b2lkIHJ1bl9zdWJ0ZXN0cyhkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlKQoreworCWlndF9m aXh0dXJlIHsKKwkJYm9vbCBmb3VuZCA9IGZhbHNlOworCQlpZ3RfcGxhbmVfdCAqcGxhbmU7CisK KwkJaWd0X2Rpc3BsYXlfcmVxdWlyZV9vdXRwdXRfb25fcGlwZSgmZGF0YS0+ZGlzcGxheSwgcGlw ZSk7CisJCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoJmRhdGEtPmRpc3BsYXksIHBpcGUsIHBsYW5l KSB7CisJCQlpZiAoIWlndF9wbGFuZV9oYXNfcHJvcChwbGFuZSwgSUdUX1BMQU5FX0FMUEhBKSkK KwkJCQljb250aW51ZTsKKworCQkJZm91bmQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKworCQlp Z3RfcmVxdWlyZV9mKGZvdW5kLCAiRm91bmQgbm8gcGxhbmUgb24gcGlwZSAlcyB3aXRoIGFscGhh IGJsZW5kaW5nIHN1cHBvcnRlZFxuIiwKKwkJCSAgICAgIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUp KTsKKwl9CisKKwlpZ3Rfc3VidGVzdF9mKCJwaXBlLSVzLWFscGhhLWJhc2ljIiwga21zdGVzdF9w aXBlX25hbWUocGlwZSkpCisJCXJ1bl90ZXN0X29uX3BpcGVfcGxhbmVzKGRhdGEsIHBpcGUsIGZh bHNlLCBiYXNpY19hbHBoYSk7CisKKwlpZ3Rfc3VidGVzdF9mKCJwaXBlLSVzLWFscGhhLTdlZmMi LCBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSkKKwkJcnVuX3Rlc3Rfb25fcGlwZV9wbGFuZXMoZGF0 YSwgcGlwZSwgZmFsc2UsIGFscGhhXzdlZmMpOworCisJaWd0X3N1YnRlc3RfZigicGlwZS0lcy1j b3ZlcmFnZS03ZWZjIiwga21zdGVzdF9waXBlX25hbWUocGlwZSkpCisJCXJ1bl90ZXN0X29uX3Bp cGVfcGxhbmVzKGRhdGEsIHBpcGUsIHRydWUsIGNvdmVyYWdlXzdlZmMpOworCisJaWd0X3N1YnRl c3RfZigicGlwZS0lcy1jb3ZlcmFnZS12cy1wcmVtdWx0LXZzLWNvbnN0YW50Iiwga21zdGVzdF9w aXBlX25hbWUocGlwZSkpCisJCXJ1bl90ZXN0X29uX3BpcGVfcGxhbmVzKGRhdGEsIHBpcGUsIHRy dWUsIGNvdmVyYWdlX3ByZW11bHRfY29uc3RhbnQpOworCisJaWd0X3N1YnRlc3RfZigicGlwZS0l cy1hbHBoYS10cmFuc3BhcmFudC1mYiIsIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpKQorCQlydW5f dGVzdF9vbl9waXBlX3BsYW5lcyhkYXRhLCBwaXBlLCBmYWxzZSwgYXJnYl90cmFuc3BhcmFudCk7 CisKKwlpZ3Rfc3VidGVzdF9mKCJwaXBlLSVzLWFscGhhLW9wYXF1ZS1mYiIsIGttc3Rlc3RfcGlw ZV9uYW1lKHBpcGUpKQorCQlydW5fdGVzdF9vbl9waXBlX3BsYW5lcyhkYXRhLCBwaXBlLCBmYWxz ZSwgYXJnYl9vcGFxdWUpOworCisJaWd0X3N1YnRlc3RfZigicGlwZS0lcy1jb25zdGFudC1hbHBo YS1taW4iLCBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSkKKwkJcnVuX3Rlc3Rfb25fcGlwZV9wbGFu ZXMoZGF0YSwgcGlwZSwgdHJ1ZSwgY29uc3RhbnRfYWxwaGFfbWluKTsKKworCWlndF9zdWJ0ZXN0 X2YoInBpcGUtJXMtY29uc3RhbnQtYWxwaGEtbWlkIiwga21zdGVzdF9waXBlX25hbWUocGlwZSkp CisJCXJ1bl90ZXN0X29uX3BpcGVfcGxhbmVzKGRhdGEsIHBpcGUsIHRydWUsIGNvbnN0YW50X2Fs cGhhX21pZCk7CisKKwlpZ3Rfc3VidGVzdF9mKCJwaXBlLSVzLWNvbnN0YW50LWFscGhhLW1heCIs IGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpKQorCQlydW5fdGVzdF9vbl9waXBlX3BsYW5lcyhkYXRh LCBwaXBlLCB0cnVlLCBjb25zdGFudF9hbHBoYV9tYXgpOworfQorCitpZ3RfbWFpbgoreworCWRh dGFfdCBkYXRhID0ge307CisJZW51bSBwaXBlIHBpcGU7CisKKwlpZ3RfZml4dHVyZSB7CisJCWln dF9za2lwX29uX3NpbXVsYXRpb24oKTsKKworCQlkYXRhLmdmeF9mZCA9IGRybV9vcGVuX2RyaXZl cihEUklWRVJfQU5ZKTsKKwkJaWd0X3JlcXVpcmVfcGlwZV9jcmMoZGF0YS5nZnhfZmQpOworCQlp Z3RfZGlzcGxheV9pbml0KCZkYXRhLmRpc3BsYXksIGRhdGEuZ2Z4X2ZkKTsKKwkJaWd0X3JlcXVp cmUoZGF0YS5kaXNwbGF5LmlzX2F0b21pYyk7CisJfQorCisJZm9yX2VhY2hfcGlwZV9zdGF0aWMo cGlwZSkKKwkJaWd0X3N1YnRlc3RfZ3JvdXAKKwkJCXJ1bl9zdWJ0ZXN0cygmZGF0YSwgcGlwZSk7 CisKKwlpZ3RfZml4dHVyZQorCQlpZ3RfZGlzcGxheV9maW5pKCZkYXRhLmRpc3BsYXkpOworfQpk aWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5idWlsZAppbmRleCAx N2RlYjk0NWVjOTUuLjQyNDFkNjhmYjE3NiAxMDA2NDQKLS0tIGEvdGVzdHMvbWVzb24uYnVpbGQK KysrIGIvdGVzdHMvbWVzb24uYnVpbGQKQEAgLTE2OSw2ICsxNjksNyBAQCB0ZXN0X3Byb2dzID0g WwogCSdrbXNfcGlwZV9iX2NfaXZiJywKIAkna21zX3BpcGVfY3JjX2Jhc2ljJywKIAkna21zX3Bs YW5lJywKKwkna21zX3BsYW5lX2FscGhhX2JsZW5kJywKIAkna21zX3BsYW5lX2xvd3JlcycsCiAJ J2ttc19wbGFuZV9tdWx0aXBsZScsCiAJJ2ttc19wbGFuZV9zY2FsaW5nJywKLS0gCjIuMTguMAoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBt YWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==