From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id C3EDF6E9F6 for ; Fri, 31 Jan 2020 20:16:05 +0000 (UTC) From: Ville Syrjala Date: Fri, 31 Jan 2020 22:15:54 +0200 Message-Id: <20200131201554.12832-4-ville.syrjala@linux.intel.com> In-Reply-To: <20200131201554.12832-1-ville.syrjala@linux.intel.com> References: <20200131201554.12832-1-ville.syrjala@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 4/4] tests/kms_legacy_colorkey: Add a real colorkey 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 List-ID: RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCkxl dCdzIHRlc3QgdGhhdCB0aGUgY29sb3JrZXlpbmcgcmVhbGx5IHdvcmtzIGluIGhhcmR3YXJlLiBB cyBwZXIKdGhlIHVzdWFsIHBhdHRlcm4gd2UgZ2VuZXJhdGUgYSByZWZlcmVuY2UgZmIgd2l0aCBz b2Z0d2FyZSwKcmVwcm9kdWNlIHRoZSBzYW1lIHZpc3VhbCBlZmZlY3Qgd2l0aCB0aGUgaGFyZHdh cmUga2V5aW5nLCBhbmQKY29tcGFyZSB0aGUgY3JjIGJldHdlZW4gdGhlIHR3by4KClNvbWUgZGlm ZmljdWx0eSBjb21lcyBmcm9tIGhhdmluZyB0byB1c2UgZGlmZmVyZW50IGZvcm1hdHMgZm9yCmVh Y2ggaW52b2x2ZWQgcGxhbmUsIGFuZCB3ZSBjYW4ndCBhbHdheXMgdXNlIHRoZSBMVVQgdG8gY2hv cCBvZmYKZXh0cmEgYml0cyBiZWNhdXNlIEM4IG1pZ2h0IGJlIGludm9sdmVkLgoKdjI6IFVzZSBp Z3RfZm9ybWF0X2lzX3l1digpIHNvIHRoYXQgd2UgbWF5CiAgICB0cnkgdG8gdGVzdCBtb3JlIHRo YW4gb25lIHl1diBmb3JtYXQKClNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUu c3lyamFsYUBsaW51eC5pbnRlbC5jb20+Ci0tLQogdGVzdHMvTWFrZWZpbGUuc291cmNlcyAgICAg IHwgICAxICsKIHRlc3RzL2ttc19sZWdhY3lfY29sb3JrZXkuYyB8IDgwOCArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIHRlc3RzL21lc29uLmJ1aWxkICAgICAgICAgICB8ICAg MSArCiAzIGZpbGVzIGNoYW5nZWQsIDgxMCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgdGVzdHMva21zX2xlZ2FjeV9jb2xvcmtleS5jCgpkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZp bGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggNzQ1MjY4OGU1NjE2Li42 ZGY1ZDAyMWFhZjMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvdGVz dHMvTWFrZWZpbGUuc291cmNlcwpAQCAtNTYsNiArNTYsNyBAQCBURVNUU19wcm9ncyA9IFwKIAlr bXNfaGRtaV9pbmplY3QgXAogCWttc19pbnZhbGlkX2RvdGNsb2NrIFwKIAlrbXNfbGVhc2UgXAor CWttc19sZWdhY3lfY29sb3JrZXkgXAogCWttc19sZWdhY3lfY29sb3JrZXlfYmFzaWMgXAogCWtt c19tbWFwX3dyaXRlX2NyYyBcCiAJa21zX3BhbmVsX2ZpdHRpbmcgXApkaWZmIC0tZ2l0IGEvdGVz dHMva21zX2xlZ2FjeV9jb2xvcmtleS5jIGIvdGVzdHMva21zX2xlZ2FjeV9jb2xvcmtleS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjY5OWI2MTk4ZmZmCi0tLSAv ZGV2L251bGwKKysrIGIvdGVzdHMva21zX2xlZ2FjeV9jb2xvcmtleS5jCkBAIC0wLDAgKzEsODA4 IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImln dC5oIgorI2luY2x1ZGUgImk5MTVfZHJtLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKworCitJR1Rf VEVTVF9ERVNDUklQVElPTigiQ2hlY2sgdGhhdCBjb2xvcmtleWluZyB3b3Jrcy4iKTsKKworI2Rl ZmluZSBMVVRfTUFTSyAweGY4MDAKKy8qIFdlIG5lZWQgbG93ZXIgcHJlY2lzaW9uIHdpdGggZnAx NiBmb3Igc29tZSByZWFzb24gKi8KKyNkZWZpbmUgTFVUX01BU0tfRlAxNiAweGYwMDAKKworc3Ry dWN0IGNvbG9yIHsKKwlmbG9hdCByLCBnLCBiOworfTsKKworc3RydWN0IHJlY3QgeworCWludCB4 MSwgeTEsIHgyLCB5MjsKK307CisKK3N0cnVjdCBwbGFuZSB7CisJaWd0X3BsYW5lX3QgKnBsYW5l OworCXVpbnQzMl90IGZvcm1hdDsKKwlzdHJ1Y3QgaWd0X2ZiIGZiOworCXN0cnVjdCByZWN0IHJl Y3Q7CisJY29uc3Qgc3RydWN0IGNvbG9yICpjb2xvcjsKK307CisKK3N0YXRpYyBpbnQgcmVjdF93 aWR0aChjb25zdCBzdHJ1Y3QgcmVjdCAqcikKK3sKKwlyZXR1cm4gci0+eDIgLSByLT54MTsKK30K Kworc3RhdGljIGludCByZWN0X2hlaWdodChjb25zdCBzdHJ1Y3QgcmVjdCAqcikKK3sKKwlyZXR1 cm4gci0+eTIgLSByLT55MTsKK30KKworc3RhdGljIHZvaWQgcmVjdF9pbml0KHN0cnVjdCByZWN0 ICpyLAorCQkgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKK3sKKwlyLT54MSA9IHg7 CisJci0+eTEgPSB5OworCXItPngyID0geCArIHc7CisJci0+eTIgPSB5ICsgaDsKK30KKworc3Rh dGljIHZvaWQgcmVjdF90cmFuc2xhdGUoc3RydWN0IHJlY3QgKnIsCisJCQkgICBpbnQgeCwgaW50 IHkpCit7CisJci0+eDEgKz0geDsKKwlyLT55MSArPSB5OworCXItPngyICs9IHg7CisJci0+eTIg Kz0geTsKK30KKworc3RhdGljIHZvaWQgcmVjdF9pbnRlcnNlY3Qoc3RydWN0IHJlY3QgKnIsCisJ CQkgICBjb25zdCBzdHJ1Y3QgcmVjdCAqYSwKKwkJCSAgIGNvbnN0IHN0cnVjdCByZWN0ICpiKQor eworCXItPngxID0gbWF4KGEtPngxLCBiLT54MSk7CisJci0+eTEgPSBtYXgoYS0+eTEsIGItPnkx KTsKKwlyLT54MiA9IG1pbihhLT54MiwgYi0+eDIpOworCXItPnkyID0gbWluKGEtPnkyLCBiLT55 Mik7Cit9CisKK3N0cnVjdCBkYXRhIHsKKwlpZ3RfZGlzcGxheV90IGRpc3BsYXk7CisJaW50IGRy bV9mZDsKKwllbnVtIHBpcGUgcGlwZTsKKwl1aW50MzJfdCBkZXZpZDsKKwlpZ3Rfb3V0cHV0X3Qg Km91dHB1dDsKKwlzdHJ1Y3QgcGxhbmUgcHJpbWFyeSwgc3ByaXRlOworCXN0cnVjdCBpZ3RfZmIg cmVmX2ZiOworCWlndF9waXBlX2NyY190ICpwaXBlX2NyYzsKKwlpZ3RfY3JjX3QgcmVmX2NyYywg Y3JjOworfTsKKworc3RhdGljIHZvaWQgcmdiX3RvX3ljYmNyKHN0cnVjdCBjb2xvciAqeXV2X2Nv bG9yLAorCQkJIGNvbnN0IHN0cnVjdCBjb2xvciAqcmdiX2NvbG9yKQoreworCXN0cnVjdCBpZ3Rf dmVjNCByZ2IsIHl1djsKKwlzdHJ1Y3QgaWd0X21hdDQgbTsKKworCXJnYi5kWzBdID0gcmdiX2Nv bG9yLT5yICogMHhmZiArIDAuNWY7CisJcmdiLmRbMV0gPSByZ2JfY29sb3ItPmcgKiAweGZmICsg MC41ZjsKKwlyZ2IuZFsyXSA9IHJnYl9jb2xvci0+YiAqIDB4ZmYgKyAwLjVmOworCXJnYi5kWzNd ID0gMS4wZjsKKworCW0gPSBpZ3RfcmdiX3RvX3ljYmNyX21hdHJpeChEUk1fRk9STUFUX1hSR0I4 ODg4LAorCQkJCSAgICBEUk1fRk9STUFUX1lVWVYsCisJCQkJICAgIElHVF9DT0xPUl9ZQ0JDUl9C VDcwOSwKKwkJCQkgICAgSUdUX0NPTE9SX1lDQkNSX0xJTUlURURfUkFOR0UpOworCisJeXV2ID0g aWd0X21hdHJpeF90cmFuc2Zvcm0oJm0sICZyZ2IpOworCisJeXV2X2NvbG9yLT5yID0geXV2LmRb Ml07CisJeXV2X2NvbG9yLT5nID0geXV2LmRbMF07CisJeXV2X2NvbG9yLT5iID0geXV2LmRbMV07 Cit9CisKK3N0YXRpYyB1aW50MzJfdCBja2V5X3ZhbCh1aW50MzJfdCBmb3JtYXQsIGNvbnN0IHN0 cnVjdCBjb2xvciAqY29sb3IpCit7CisJc3RydWN0IGNvbG9yIHl1djsKKwl1aW50MzJfdCByLCBn LCBiOworCisJaWYgKGlndF9mb3JtYXRfaXNfeXV2KGZvcm1hdCkpIHsKKwkJcmdiX3RvX3ljYmNy KCZ5dXYsIGNvbG9yKTsKKworCQlyID0geXV2LnIgKyAwLjVmOworCQlnID0geXV2LmcgKyAwLjVm OworCQliID0geXV2LmIgKyAwLjVmOworCX0gZWxzZSBpZiAoZm9ybWF0ID09IERSTV9GT1JNQVRf QzgpIHsKKwkJciA9IGNvbG9yLT5yICogMHg3ICsgMC41ZjsKKwkJZyA9IGNvbG9yLT5nICogMHg3 ICsgMC41ZjsKKwkJYiA9IGNvbG9yLT5iICogMHgzICsgMC41ZjsKKworCQlyID0gZyA9IGIgPSBy IDw8IDUgfCBnIDw8IDIgfCBiOworCX0gZWxzZSBpZiAoZm9ybWF0ID09IERSTV9GT1JNQVRfUkdC NTY1KSB7CisJCXIgPSBjb2xvci0+ciAqIDB4MWYgKyAwLjVmOworCQlnID0gY29sb3ItPmcgKiAw eDNmICsgMC41ZjsKKwkJYiA9IGNvbG9yLT5iICogMHgxZiArIDAuNWY7CisKKwkJciA9IChyIDw8 IDMpIHwgKHIgPj4gMik7CisJCWcgPSAoZyA8PCAyKSB8IChnID4+IDQpOworCQliID0gKGIgPDwg MykgfCAoYiA+PiAyKTsKKwl9IGVsc2UgeworCQlyID0gY29sb3ItPnIgKiAweGZmICsgMC41ZjsK KwkJZyA9IGNvbG9yLT5nICogMHhmZiArIDAuNWY7CisJCWIgPSBjb2xvci0+YiAqIDB4ZmYgKyAw LjVmOworCX0KKworCWlndF9kZWJ1Zygia2V5ICVmICVmICVmIC0+ICV4ICV4ICV4XG4iLAorCQkg IGNvbG9yLT5yLCBjb2xvci0+ZywgY29sb3ItPmIsIHIsIGcsIGIpOworCisJcmV0dXJuIHIgPDwg MTYgfCBnIDw8IDggfCBiOworfQorCitzdGF0aWMgdWludDMyX3QgZHN0X2tleV9tYXNrKHVpbnQz Ml90IGZvcm1hdCkKK3sKKwl1aW50MzJfdCByLCBnLCBiOworCisJc3dpdGNoIChmb3JtYXQpIHsK KwljYXNlIERSTV9GT1JNQVRfQzg6CisJCXIgPSBnID0gYiA9IDB4ZmY7CisJCWJyZWFrOworCWNh c2UgRFJNX0ZPUk1BVF9YUkdCMTU1NToKKwkJciA9IGcgPSBiID0gMHhmODsKKwkJYnJlYWs7CisJ Y2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwkJciA9IGIgPSAweGY4OworCQlnID0gMHhmYzsKKwkJ YnJlYWs7CisJZGVmYXVsdDoKKwkJciA9IGcgPSBiID0gMHhmZjsKKwkJYnJlYWs7CisJfQorCWln dF9kZWJ1ZygibWFzayAleCAleCAleFxuIiwgciwgZywgYik7CisKKwlyZXR1cm4gciA8PCAxNiB8 IGcgPDwgOCB8IGI7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBzcmNfa2V5X21hc2sodm9pZCkKK3sK Kwlib29sIHIgPSB0cnVlLCBnID0gdHJ1ZSwgYiA9IHRydWU7CisKKwlyZXR1cm4gciA8PCAyNiB8 IGcgPDwgMjUgfCBiIDw8IDI0OworfQorCitzdGF0aWMgYm9vbCBzZXRfY2tleShzdHJ1Y3QgZGF0 YSAqZGF0YSwgdWludDMyX3QgZmxhZ3MsCisJCSAgICAgdWludDMyX3QgbWluLCB1aW50MzJfdCBt YXgsIHVpbnQzMl90IG1hc2spCit7CisJc3RydWN0IGRybV9pbnRlbF9zcHJpdGVfY29sb3JrZXkg Y2tleSA9IHsKKwkJLnBsYW5lX2lkID0gZGF0YS0+c3ByaXRlLnBsYW5lLT5kcm1fcGxhbmUtPnBs YW5lX2lkLAorCQkuZmxhZ3MgPSBmbGFncywKKwkJLm1pbl92YWx1ZSA9IG1pbiwKKwkJLm1heF92 YWx1ZSA9IG1heCwKKwkJLmNoYW5uZWxfbWFzayA9IG1hc2ssCisJfTsKKworCXJldHVybiBkcm1D b21tYW5kV3JpdGUoZGF0YS0+ZHJtX2ZkLAorCQkJICAgICAgIERSTV9JOTE1X1NFVF9TUFJJVEVf Q09MT1JLRVksICZja2V5LAorCQkJICAgICAgIHNpemVvZihja2V5KSkgPT0gMDsKK30KKworc3Rh dGljIHZvaWQgcGFpbnRfa2V5aG9sZXMoc3RydWN0IGRhdGEgKmRhdGEsCisJCQkgICBzdHJ1Y3Qg aWd0X2ZiICpmYiwKKwkJCSAgIGNvbnN0IHN0cnVjdCByZWN0IGtleV9yZWN0W10sCisJCQkgICBp bnQgbnVtX2tleV9yZWN0LAorCQkJICAgY29uc3Qgc3RydWN0IGNvbG9yICprZXlfY29sb3IpCit7 CisJY2Fpcm9fdCAqY3I7CisKKwljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRhdGEtPmRybV9mZCwg ZmIpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fa2V5X3JlY3Q7IGkrKykgeworCQlpZ3Rf cGFpbnRfY29sb3IoY3IsCisJCQkJa2V5X3JlY3RbaV0ueDEsIGtleV9yZWN0W2ldLnkxLAorCQkJ CXJlY3Rfd2lkdGgoJmtleV9yZWN0W2ldKSwKKwkJCQlyZWN0X2hlaWdodCgma2V5X3JlY3RbaV0p LAorCQkJCWtleV9jb2xvci0+ciwga2V5X2NvbG9yLT5nLCBrZXlfY29sb3ItPmIpOworCX0KKwor CWlndF9wdXRfY2Fpcm9fY3R4KGRhdGEtPmRybV9mZCwgZmIsIGNyKTsKK30KKworc3RhdGljIHZv aWQgY3JlYXRlX2NvbG9yX2ZiKHN0cnVjdCBkYXRhICpkYXRhLCBzdHJ1Y3QgcGxhbmUgKnBsYW5l KQoreworCWlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2ZkLAorCQkJICAgIHJlY3Rfd2lk dGgoJnBsYW5lLT5yZWN0KSwKKwkJCSAgICByZWN0X2hlaWdodCgmcGxhbmUtPnJlY3QpLAorCQkJ ICAgIHBsYW5lLT5mb3JtYXQsIERSTV9GT1JNQVRfTU9EX0xJTkVBUiwKKwkJCSAgICBwbGFuZS0+ Y29sb3ItPnIsCisJCQkgICAgcGxhbmUtPmNvbG9yLT5nLAorCQkJICAgIHBsYW5lLT5jb2xvci0+ YiwKKwkJCSAgICAmcGxhbmUtPmZiKTsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlX2NvbG9yX3Bh dHRlcm5fZmIoc3RydWN0IGRhdGEgKmRhdGEsIHN0cnVjdCBwbGFuZSAqcGxhbmUpCit7CisJaWd0 X2NyZWF0ZV9jb2xvcl9wYXR0ZXJuX2ZiKGRhdGEtPmRybV9mZCwKKwkJCQkgICAgcmVjdF93aWR0 aCgmcGxhbmUtPnJlY3QpLAorCQkJCSAgICByZWN0X2hlaWdodCgmcGxhbmUtPnJlY3QpLAorCQkJ CSAgICBwbGFuZS0+Zm9ybWF0LCBEUk1fRk9STUFUX01PRF9MSU5FQVIsCisJCQkJICAgIHBsYW5l LT5jb2xvci0+ciwKKwkJCQkgICAgcGxhbmUtPmNvbG9yLT5nLAorCQkJCSAgICBwbGFuZS0+Y29s b3ItPmIsCisJCQkJICAgICZwbGFuZS0+ZmIpOworfQorCitzdGF0aWMgdm9pZCBibGl0KHN0cnVj dCBkYXRhICpkYXRhLCBjYWlyb190ICpjciwKKwkJIHN0cnVjdCBpZ3RfZmIgKnNyY19mYiwKKwkJ IGNvbnN0IHN0cnVjdCByZWN0ICpzcmNfcmVjdCwKKwkJIGNvbnN0IHN0cnVjdCByZWN0IHJlY3Rb XSwKKwkJIGludCBudW1fcmVjdCkKK3sKKwljYWlyb19zdXJmYWNlX3QgKnN1cmZhY2U7CisKKwlz dXJmYWNlID0gaWd0X2dldF9jYWlyb19zdXJmYWNlKGRhdGEtPmRybV9mZCwgc3JjX2ZiKTsKKwor CWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3JlY3Q7IGkrKykgeworCQlzdHJ1Y3QgcmVjdCByOwor CQlpbnQgc3gsIHN5OworCisJCXJlY3RfaW50ZXJzZWN0KCZyLCAmcmVjdFtpXSwgc3JjX3JlY3Qp OworCisJCXN4ID0gci54MSAtIHNyY19yZWN0LT54MTsKKwkJc3kgPSByLnkxIC0gc3JjX3JlY3Qt PnkxOworCisJCWNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjciwgc3VyZmFjZSwKKwkJCQkJIHIu eDEgLSBzeCwgci55MSAtIHN5KTsKKwkJY2Fpcm9fcmVjdGFuZ2xlKGNyLCByLngxLCByLnkxLAor CQkJCXJlY3Rfd2lkdGgoJnIpLCByZWN0X2hlaWdodCgmcikpOworCQljYWlyb19maWxsIChjcik7 CisJfQorCisJY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOworfQorCitzdGF0aWMgdm9p ZCBjcmVhdGVfZHN0X2tleV9yZWZfZmIoc3RydWN0IGRhdGEgKmRhdGEsCisJCQkJICBzdHJ1Y3Qg cGxhbmUgKnByaW1hcnksCisJCQkJICBzdHJ1Y3QgcGxhbmUgKnNwcml0ZSwKKwkJCQkgIGNvbnN0 IHN0cnVjdCByZWN0IGtleV9yZWN0W10sCisJCQkJICBpbnQgbnVtX2tleV9yZWN0LAorCQkJCSAg c3RydWN0IGlndF9mYiAqZmIpCit7CisJY2Fpcm9fdCAqY3I7CisKKwlpZ3RfY3JlYXRlX2ZiKGRh dGEtPmRybV9mZCwKKwkJICAgICAgcHJpbWFyeS0+ZmIud2lkdGgsIHByaW1hcnktPmZiLmhlaWdo dCwKKwkJICAgICAgcHJpbWFyeS0+ZmIuZHJtX2Zvcm1hdCwgRFJNX0ZPUk1BVF9NT0RfTElORUFS LCBmYik7CisKKwljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRhdGEtPmRybV9mZCwgZmIpOworCisJ Lyogc3RhcnQgd2l0aCBwcmltYXJ5IGZiICovCisJYmxpdChkYXRhLCBjciwgJnByaW1hcnktPmZi LCAmcHJpbWFyeS0+cmVjdCwKKwkgICAgICZwcmltYXJ5LT5yZWN0LCAxKTsKKworCS8qIGNvdmVy IGtleWhvbGVzIHdpdGggc3ByaXRlIGZiICovCisJYmxpdChkYXRhLCBjciwgJnNwcml0ZS0+ZmIs ICZzcHJpdGUtPnJlY3QsCisJICAgICBrZXlfcmVjdCwgbnVtX2tleV9yZWN0KTsKKworCWlndF9w dXRfY2Fpcm9fY3R4KGRhdGEtPmRybV9mZCwgZmIsIGNyKTsKK30KKworc3RhdGljIHZvaWQgY3Jl YXRlX3NyY19rZXlfcmVmX2ZiKHN0cnVjdCBkYXRhICpkYXRhLAorCQkJCSAgc3RydWN0IHBsYW5l ICpwcmltYXJ5LAorCQkJCSAgc3RydWN0IHBsYW5lICpzcHJpdGUsCisJCQkJICBjb25zdCBzdHJ1 Y3QgcmVjdCBrZXlfcmVjdFtdLAorCQkJCSAgaW50IG51bV9rZXlfcmVjdCwKKwkJCQkgIHN0cnVj dCBpZ3RfZmIgKmZiKQoreworCWNhaXJvX3QgKmNyOworCisJaWd0X2NyZWF0ZV9mYihkYXRhLT5k cm1fZmQsCisJCSAgICAgIHByaW1hcnktPmZiLndpZHRoLCBwcmltYXJ5LT5mYi5oZWlnaHQsCisJ CSAgICAgIHByaW1hcnktPmZiLmRybV9mb3JtYXQsIERSTV9GT1JNQVRfTU9EX0xJTkVBUiwgZmIp OworCisJY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkYXRhLT5kcm1fZmQsIGZiKTsKKworCS8qIHN0 YXJ0IHdpdGggcHJpbWFyeSBmYiAqLworCWJsaXQoZGF0YSwgY3IsICZwcmltYXJ5LT5mYiwgJnBy aW1hcnktPnJlY3QsCisJICAgICAmcHJpbWFyeS0+cmVjdCwgMSk7CisKKwkvKiBvdmVybGF5IHRo ZSBmdWxsIHNwcml0ZSBmYiAqLworCWJsaXQoZGF0YSwgY3IsICZzcHJpdGUtPmZiLCAmc3ByaXRl LT5yZWN0LAorCSAgICAgJnNwcml0ZS0+cmVjdCwgMSk7CisKKwkvKiBjb3ZlciBrZXlob2xlcyBh Z2FpbiB3aXRoIHByaW1hcnkgZmIgKi8KKwlibGl0KGRhdGEsIGNyLCAmcHJpbWFyeS0+ZmIsICZw cmltYXJ5LT5yZWN0LAorCSAgICAga2V5X3JlY3QsIG51bV9rZXlfcmVjdCk7CisKKwlpZ3RfcHV0 X2NhaXJvX2N0eChkYXRhLT5kcm1fZmQsIGZiLCBjcik7Cit9CisKK3N0YXRpYyB2b2lkIHNldF95 Y2Jjcl9lbmNvZGluZyhpZ3RfcGxhbmVfdCAqcGxhbmUpCit7CisJZW51bSBpZ3RfY29sb3JfZW5j b2RpbmcgZSA9IElHVF9DT0xPUl9ZQ0JDUl9CVDcwOTsKKwllbnVtIGlndF9jb2xvcl9yYW5nZSBy ID0gSUdUX0NPTE9SX1lDQkNSX0xJTUlURURfUkFOR0U7CisKKwlpZ3RfcGxhbmVfdHJ5X3Byb3Bf ZW51bShwbGFuZSwgSUdUX1BMQU5FX0NPTE9SX0VOQ09ESU5HLAorCQkJCWlndF9jb2xvcl9lbmNv ZGluZ190b19zdHIoZSkpOworCisJaWd0X3BsYW5lX3RyeV9wcm9wX2VudW0ocGxhbmUsIElHVF9Q TEFORV9DT0xPUl9SQU5HRSwKKwkJCQlpZ3RfY29sb3JfcmFuZ2VfdG9fc3RyKHIpKTsKK30KKwor c3RhdGljIHZvaWQgc2V0X2xlZ2FjeV9sdXQoc3RydWN0IGRhdGEgKmRhdGEsIHVpbnQxNl90IG1h c2spCit7CisJaWd0X3BpcGVfdCAqcGlwZV9vYmogPSAmZGF0YS0+ZGlzcGxheS5waXBlc1tkYXRh LT5waXBlXTsKKwlkcm1Nb2RlQ3J0YyAqY3J0YzsKKwlzdHJ1Y3QgZHJtX2NvbG9yX2x1dCAqbHV0 OworCWludCBpLCBsdXRfc2l6ZTsKKworCWNydGMgPSBkcm1Nb2RlR2V0Q3J0YyhkYXRhLT5kcm1f ZmQsIHBpcGVfb2JqLT5jcnRjX2lkKTsKKwlsdXRfc2l6ZSA9IGNydGMtPmdhbW1hX3NpemU7CisJ ZHJtTW9kZUZyZWVDcnRjKGNydGMpOworCisJbHV0ID0gY2FsbG9jKGx1dF9zaXplLCBzaXplb2Yo bHV0WzBdKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbHV0X3NpemU7IGkrKykgeworCQl1aW50MTZf dCB2ID0gKGkgKiAweGZmZmYgLyAobHV0X3NpemUgLSAxKSkgJiBtYXNrOworCisJCWx1dFtpXS5y ZWQgPSB2OworCQlsdXRbaV0uZ3JlZW4gPSB2OworCQlsdXRbaV0uYmx1ZSA9IHY7CisJfQorCisJ aWd0X3BpcGVfb2JqX3JlcGxhY2VfcHJvcF9ibG9iKHBpcGVfb2JqLCBJR1RfQ1JUQ19HQU1NQV9M VVQsIGx1dCwKKwkJCQkgICAgICAgbHV0X3NpemUgKiBzaXplb2YobHV0WzBdKSk7CisJZnJlZShs dXQpOworfQorCitzdGF0aWMgdm9pZCBzZXRfYzhfbGVnYWN5X2x1dChzdHJ1Y3QgZGF0YSAqZGF0 YSwgdWludDE2X3QgbWFzaykKK3sKKwlpZ3RfcGlwZV90ICpwaXBlX29iaiA9ICZkYXRhLT5kaXNw bGF5LnBpcGVzW2RhdGEtPnBpcGVdOworCWRybU1vZGVDcnRjICpjcnRjOworCXN0cnVjdCBkcm1f Y29sb3JfbHV0ICpsdXQ7CisJaW50IGksIGx1dF9zaXplOworCisJY3J0YyA9IGRybU1vZGVHZXRD cnRjKGRhdGEtPmRybV9mZCwgcGlwZV9vYmotPmNydGNfaWQpOworCWx1dF9zaXplID0gY3J0Yy0+ Z2FtbWFfc2l6ZTsKKwlkcm1Nb2RlRnJlZUNydGMoY3J0Yyk7CisKKwlsdXQgPSBjYWxsb2MobHV0 X3NpemUsIHNpemVvZihsdXRbMF0pKTsKKworCS8qIGlndF9mYiB1c2VzIFJHQjMzMiBmb3IgQzgg Ki8KKwlmb3IgKGkgPSAwOyBpIDwgbHV0X3NpemU7IGkrKykgeworCQlsdXRbaV0ucmVkID0gKCgo aSAmIDB4ZTApID4+IDUpICogMHhmZmZmIC8gMHg3KSAmIG1hc2s7CisJCWx1dFtpXS5ncmVlbiA9 ICgoKGkgJiAweDFjKSA+PiAyKSAqIDB4ZmZmZiAvIDB4NykgJiBtYXNrOworCQlsdXRbaV0uYmx1 ZSA9ICgoKGkgJiAweDAzKSA+PiAwKSAqIDB4ZmZmZiAvIDB4MykgJiBtYXNrOworCX0KKworCWln dF9waXBlX29ial9yZXBsYWNlX3Byb3BfYmxvYihwaXBlX29iaiwgSUdUX0NSVENfR0FNTUFfTFVU LCBsdXQsCisJCQkJICAgICAgIGx1dF9zaXplICogc2l6ZW9mKGx1dFswXSkpOworCWZyZWUobHV0 KTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9wbGFuZShzdHJ1Y3QgZGF0YSAqZGF0YSwKKwkJICAg ICAgIHN0cnVjdCBwbGFuZSAqcGxhbmUsIHVpbnQzMl90IHR5cGUpCit7CisJaWd0X3BpcGVfdCAq cGlwZV9vYmogPSAmZGF0YS0+ZGlzcGxheS5waXBlc1tkYXRhLT5waXBlXTsKKworCXBsYW5lLT5w bGFuZSA9IGlndF9waXBlX2dldF9wbGFuZV90eXBlKHBpcGVfb2JqLCB0eXBlKTsKKworCWlndF9y ZXF1aXJlKGlndF9wbGFuZV9oYXNfZm9ybWF0X21vZChwbGFuZS0+cGxhbmUsIHBsYW5lLT5mb3Jt YXQsIERSTV9GT1JNQVRfTU9EX0xJTkVBUikpOworfQorCitzdGF0aWMgdm9pZCBjb25maWd1cmVf cGxhbmUoc3RydWN0IGRhdGEgKmRhdGEsIHN0cnVjdCBwbGFuZSAqcGxhbmUpCit7CisJaWd0X3Bs YW5lX3NldF9mYihwbGFuZS0+cGxhbmUsICZwbGFuZS0+ZmIpOworCWlmIChpZ3RfZm9ybWF0X2lz X3l1dihwbGFuZS0+Zm9ybWF0KSkKKwkJc2V0X3ljYmNyX2VuY29kaW5nKHBsYW5lLT5wbGFuZSk7 CisJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZS0+cGxhbmUsCisJCQkgICAgICAgcGxhbmUt PnJlY3QueDEsIHBsYW5lLT5yZWN0LnkxKTsKK30KKworc3RhdGljIHZvaWQgZG9fdGVzdF9kc3Rf Y29sb3JrZXkoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJZHJtTW9kZU1vZGVJbmZvICptb2RlOwor CXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3Iga2V5X2NvbG9yID0geworCQkuciA9IDEuMGYsCisJ CS5nID0gMC4xMjVmLAorCQkuYiA9IDAuMjUwZiwKKwl9OworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qg Y29sb3Igc3ByaXRlX2NvbG9yID0geworCQkuciA9IDAuNWYsCisJCS5nID0gMC4wZiwKKwkJLmIg PSAxLjBmLAorCX07CisJc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvciBzcHJpdGVfY29sb3JfYzgg PSB7CisJCS5yID0gMC4xMjUsCisJCS5nID0gMC4xMjUsCisJCS5iID0gMC4wLAorCX07CisJc3Rh dGljIGNvbnN0IHN0cnVjdCBjb2xvciBwcmltYXJ5X2NvbG9yID0geworCQkuciA9IDEuMGYsCisJ CS5nID0gMC41ZiwKKwkJLmIgPSAwLjBmLAorCX07CisJc3RydWN0IHJlY3Qga2V5X3JlY3RbNV07 CisJc3RydWN0IGlndF9mYiB0ZW1wX2ZiID0ge307CisJYm9vbCBzdXBwb3J0ZWQgPSBmYWxzZTsK KworCWlndF9vdXRwdXRfc2V0X3BpcGUoZGF0YS0+b3V0cHV0LCBkYXRhLT5waXBlKTsKKworCWRh dGEtPnBpcGVfY3JjID0gaWd0X3BpcGVfY3JjX25ldyhkYXRhLT5kcm1fZmQsIGRhdGEtPnBpcGUs CisJCQkJCSAgSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOworCisJbW9kZSA9IGlndF9vdXRw dXRfZ2V0X21vZGUoZGF0YS0+b3V0cHV0KTsKKworCWluaXRfcGxhbmUoZGF0YSwgJmRhdGEtPnBy aW1hcnksIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOworCXJlY3RfaW5pdCgmZGF0YS0+cHJpbWFy eS5yZWN0LCAwLCAwLAorCQkgIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7CisKKwlp bml0X3BsYW5lKGRhdGEsICZkYXRhLT5zcHJpdGUsIERSTV9QTEFORV9UWVBFX09WRVJMQVkpOwor CXJlY3RfaW5pdCgmZGF0YS0+c3ByaXRlLnJlY3QsCisJCSAgQUxJR04obW9kZS0+aGRpc3BsYXkg LyAzLCAyKSwKKwkJICBBTElHTihtb2RlLT52ZGlzcGxheSAvIDQsIDIpLAorCQkgIEFMSUdOKG1v ZGUtPmhkaXNwbGF5IC8gMywgMiksCisJCSAgQUxJR04obW9kZS0+dmRpc3BsYXkgLyAyLCAyKSk7 CisKKwkvKgorCSAqIFN0cmFkZGxlIGVhY2ggc3ByaXRlIGNvcm5lciB3aXRoIGtleWhvbGVzCisJ ICogYW5kIHB1dCBvbmUgZXh0cmEga2V5aG9sZSBpbiB0aGUgbWlkZGxlLgorCSAqLworCWZvciAo aW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShrZXlfcmVjdCk7IGkrKykKKwkJcmVjdF9pbml0KCZr ZXlfcmVjdFtpXSwgMCwgMCwgNjQsIDY0KTsKKworCXJlY3RfdHJhbnNsYXRlKCZrZXlfcmVjdFsw XSwKKwkJICAgICAgIGRhdGEtPnNwcml0ZS5yZWN0LngxIC0gMzIsCisJCSAgICAgICBkYXRhLT5z cHJpdGUucmVjdC55MSAtIDMyKTsKKwlyZWN0X3RyYW5zbGF0ZSgma2V5X3JlY3RbMV0sCisJCSAg ICAgICBkYXRhLT5zcHJpdGUucmVjdC54MiAtIDMyLAorCQkgICAgICAgZGF0YS0+c3ByaXRlLnJl Y3QueTEgLSAzMik7CisJcmVjdF90cmFuc2xhdGUoJmtleV9yZWN0WzJdLAorCQkgICAgICAgZGF0 YS0+c3ByaXRlLnJlY3QueDEgLSAzMiwKKwkJICAgICAgIGRhdGEtPnNwcml0ZS5yZWN0LnkyIC0g MzIpOworCXJlY3RfdHJhbnNsYXRlKCZrZXlfcmVjdFszXSwKKwkJICAgICAgIGRhdGEtPnNwcml0 ZS5yZWN0LngyIC0gMzIsCisJCSAgICAgICBkYXRhLT5zcHJpdGUucmVjdC55MiAtIDMyKTsKKwly ZWN0X3RyYW5zbGF0ZSgma2V5X3JlY3RbNF0sCisJCSAgICAgICBBTElHTigoZGF0YS0+c3ByaXRl LnJlY3QueDEgKyBkYXRhLT5zcHJpdGUucmVjdC54MikgLyAyIC0gMzIsIDIpLAorCQkgICAgICAg QUxJR04oKGRhdGEtPnNwcml0ZS5yZWN0LnkxICsgZGF0YS0+c3ByaXRlLnJlY3QueTIpIC8gMiAt IDMyLCAyKSk7CisKKwkvKiBzZWxlY3QgY29sb3JzIHRvIHVzZSAqLworCWRhdGEtPnByaW1hcnku Y29sb3IgPSAmcHJpbWFyeV9jb2xvcjsKKwlpZiAoZGF0YS0+cHJpbWFyeS5mb3JtYXQgPT0gRFJN X0ZPUk1BVF9DOCkKKwkJZGF0YS0+c3ByaXRlLmNvbG9yID0gJnNwcml0ZV9jb2xvcl9jODsKKwll bHNlCisJCWRhdGEtPnNwcml0ZS5jb2xvciA9ICZzcHJpdGVfY29sb3I7CisKKwkvKiBjcmVhdGUg ZnJhbWVidWZmZXJzICovCisJaWYgKGlndF9mb3JtYXRfaXNfeXV2KGRhdGEtPnByaW1hcnkuZm9y bWF0KSkKKwkJY3JlYXRlX2NvbG9yX2ZiKGRhdGEsICZkYXRhLT5wcmltYXJ5KTsKKwllbHNlCisJ CWNyZWF0ZV9jb2xvcl9wYXR0ZXJuX2ZiKGRhdGEsICZkYXRhLT5wcmltYXJ5KTsKKwlwYWludF9r ZXlob2xlcyhkYXRhLCAmZGF0YS0+cHJpbWFyeS5mYiwKKwkJICAgICAgIGtleV9yZWN0LCBBUlJB WV9TSVpFKGtleV9yZWN0KSwgJmtleV9jb2xvcik7CisKKwlpZiAoZGF0YS0+cHJpbWFyeS5mb3Jt YXQgPT0gRFJNX0ZPUk1BVF9DOCB8fAorCSAgICBpZ3RfZm9ybWF0X2lzX3l1dihkYXRhLT5wcmlt YXJ5LmZvcm1hdCkgfHwKKwkgICAgaWd0X2Zvcm1hdF9pc195dXYoZGF0YS0+c3ByaXRlLmZvcm1h dCkpCisJCWNyZWF0ZV9jb2xvcl9mYihkYXRhLCAmZGF0YS0+c3ByaXRlKTsKKwllbHNlCisJCWNy ZWF0ZV9jb2xvcl9wYXR0ZXJuX2ZiKGRhdGEsICZkYXRhLT5zcHJpdGUpOworCisJY3JlYXRlX2Rz dF9rZXlfcmVmX2ZiKGRhdGEsICZkYXRhLT5wcmltYXJ5LCAmZGF0YS0+c3ByaXRlLAorCQkJICAg ICAga2V5X3JlY3QsIEFSUkFZX1NJWkUoa2V5X3JlY3QpLAorCQkJICAgICAgJmRhdGEtPnJlZl9m Yik7CisKKwkvKgorCSAqIE5lZWQgc29tZSBmYiB0byBsaWdodCB1cCB0aGUgY3J0YywgYnV0IGl0 IGNhbid0IGJlCisJICogQzggc2luY2Ugd2UndmUgbm90IHlldCBzZXQgdGhlIExVVC4KKwkgKi8K KwlpZiAoIWRhdGEtPmRpc3BsYXkuaXNfYXRvbWljICYmCisJICAgIGRhdGEtPnByaW1hcnkuZm9y bWF0ID09IERSTV9GT1JNQVRfQzgpIHsKKwkJaWd0X2NyZWF0ZV9mYihkYXRhLT5kcm1fZmQsCisJ CQkgICAgICBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCisJCQkgICAgICBEUk1fRk9S TUFUX1hSR0I4ODg4LAorCQkJICAgICAgRFJNX0ZPUk1BVF9NT0RfTElORUFSLCAmdGVtcF9mYik7 CisJCWlndF9wbGFuZV9zZXRfZmIoZGF0YS0+cHJpbWFyeS5wbGFuZSwgJnRlbXBfZmIpOworCQlp Z3RfZGlzcGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBDT01NSVRfTEVHQUNZKTsKKwl9CisK KwlpZiAoZGF0YS0+cHJpbWFyeS5mb3JtYXQgPT0gRFJNX0ZPUk1BVF9DOCkKKwkJc2V0X2M4X2xl Z2FjeV9sdXQoZGF0YSwgTFVUX01BU0spOworCWVsc2UgaWYgKGRhdGEtPnByaW1hcnkuZm9ybWF0 ID09IERSTV9GT1JNQVRfWEJHUjE2MTYxNjE2RikKKwkJc2V0X2xlZ2FjeV9sdXQoZGF0YSwgTFVU X01BU0tfRlAxNik7CisJZWxzZQorCQlzZXRfbGVnYWN5X2x1dChkYXRhLCBMVVRfTUFTSyk7CisK KwkvKiBjb2xsZWN0IHJlZmVyZW5jZSBjcmMgKi8KKwlpZ3RfcGxhbmVfc2V0X2ZiKGRhdGEtPnBy aW1hcnkucGxhbmUsICZkYXRhLT5yZWZfZmIpOworCisJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0 YS0+ZGlzcGxheSwgZGF0YS0+ZGlzcGxheS5pc19hdG9taWMgPworCQkJICAgIENPTU1JVF9BVE9N SUMgOiBDT01NSVRfVU5JVkVSU0FMKTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+ cGlwZV9jcmMsICZkYXRhLT5yZWZfY3JjKTsKKworCS8qIGNvbGxlY3QgdGVzdCBjcmMgKi8KKwlz dXBwb3J0ZWQgPSBzZXRfY2tleShkYXRhLCBJOTE1X1NFVF9DT0xPUktFWV9ERVNUSU5BVElPTiwK KwkJCSAgICAgY2tleV92YWwoZGF0YS0+cHJpbWFyeS5mb3JtYXQsICZrZXlfY29sb3IpLCAwLAor CQkJICAgICBkc3Rfa2V5X21hc2soZGF0YS0+cHJpbWFyeS5mb3JtYXQpKTsKKwlpZiAoc3VwcG9y dGVkKSB7CisJCWNvbmZpZ3VyZV9wbGFuZShkYXRhLCAmZGF0YS0+cHJpbWFyeSk7CisJCWNvbmZp Z3VyZV9wbGFuZShkYXRhLCAmZGF0YS0+c3ByaXRlKTsKKworCQlpZ3RfZGlzcGxheV9jb21taXQy KCZkYXRhLT5kaXNwbGF5LCBkYXRhLT5kaXNwbGF5LmlzX2F0b21pYyA/CisJCQkJICAgIENPTU1J VF9BVE9NSUMgOiBDT01NSVRfVU5JVkVSU0FMKTsKKwkJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3Jj KGRhdGEtPnBpcGVfY3JjLCAmZGF0YS0+Y3JjKTsKKwl9CisKKwkvKiBjbGVhbnVwICovCisJaWd0 X3BsYW5lX3NldF9mYihkYXRhLT5wcmltYXJ5LnBsYW5lLCBOVUxMKTsKKwlpZ3RfcGxhbmVfc2V0 X2ZiKGRhdGEtPnNwcml0ZS5wbGFuZSwgTlVMTCk7CisJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0 YS0+ZGlzcGxheSwgZGF0YS0+ZGlzcGxheS5pc19hdG9taWMgPworCQkJICAgIENPTU1JVF9BVE9N SUMgOiBDT01NSVRfVU5JVkVSU0FMKTsKKworCWlndF9hc3NlcnQoc2V0X2NrZXkoZGF0YSwgMCwg MCwgMCwgMCkpOworCisJaWd0X291dHB1dF9zZXRfcGlwZShkYXRhLT5vdXRwdXQsIFBJUEVfQU5Z KTsKKworCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+cmVmX2ZiKTsKKwlpZ3Rf cmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmRhdGEtPnNwcml0ZS5mYik7CisJaWd0X3JlbW92ZV9m YihkYXRhLT5kcm1fZmQsICZkYXRhLT5wcmltYXJ5LmZiKTsKKwlpZ3RfcmVtb3ZlX2ZiKGRhdGEt PmRybV9mZCwgJnRlbXBfZmIpOworCisJaWd0X3BpcGVfY3JjX2ZyZWUoZGF0YS0+cGlwZV9jcmMp OworCisJaWd0X3JlcXVpcmUoc3VwcG9ydGVkKTsKKwlpZiAoc3VwcG9ydGVkKQorCQlpZ3RfYXNz ZXJ0X2NyY19lcXVhbCgmZGF0YS0+cmVmX2NyYywgJmRhdGEtPmNyYyk7Cit9CisKK3N0YXRpYyB2 b2lkIGRvX3Rlc3Rfc3JjX2NvbG9ya2V5KHN0cnVjdCBkYXRhICpkYXRhKQoreworCWRybU1vZGVN b2RlSW5mbyAqbW9kZTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGNvbG9yIGtleV9jb2xvciA9IHsK KwkJLnIgPSAxLjBmLAorCQkuZyA9IDAuMjUwZiwKKwkJLmIgPSAwLjEyNWYsCisJfTsKKwlzdGF0 aWMgY29uc3Qgc3RydWN0IGNvbG9yIHNwcml0ZV9jb2xvciA9IHsKKwkJLnIgPSAwLjVmLAorCQku ZyA9IDAuMGYsCisJCS5iID0gMS4wZiwKKwl9OworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3Ig cHJpbWFyeV9jb2xvciA9IHsKKwkJLnIgPSAxLjBmLAorCQkuZyA9IDAuNWYsCisJCS5iID0gMC4w ZiwKKwl9OworCXN0cnVjdCByZWN0IGtleV9yZWN0WzVdOworCXVpbnQzMl90IGNrZXksIG1pbiwg bWF4OworCWJvb2wgc3VwcG9ydGVkID0gZmFsc2U7CisKKwlpZ3Rfb3V0cHV0X3NldF9waXBlKGRh dGEtPm91dHB1dCwgZGF0YS0+cGlwZSk7CisKKwlkYXRhLT5waXBlX2NyYyA9IGlndF9waXBlX2Ny Y19uZXcoZGF0YS0+ZHJtX2ZkLCBkYXRhLT5waXBlLAorCQkJCQkgIElOVEVMX1BJUEVfQ1JDX1NP VVJDRV9BVVRPKTsKKworCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKGRhdGEtPm91dHB1dCk7 CisKKwlpbml0X3BsYW5lKGRhdGEsICZkYXRhLT5wcmltYXJ5LCBEUk1fUExBTkVfVFlQRV9QUklN QVJZKTsKKwlyZWN0X2luaXQoJmRhdGEtPnByaW1hcnkucmVjdCwgMCwgMCwKKwkJICBtb2RlLT5o ZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkpOworCisJaW5pdF9wbGFuZShkYXRhLCAmZGF0YS0+c3By aXRlLCBEUk1fUExBTkVfVFlQRV9PVkVSTEFZKTsKKwlyZWN0X2luaXQoJmRhdGEtPnNwcml0ZS5y ZWN0LAorCQkgIEFMSUdOKG1vZGUtPmhkaXNwbGF5IC8gMywgMiksCisJCSAgQUxJR04obW9kZS0+ dmRpc3BsYXkgLyA0LCAyKSwKKwkJICBBTElHTihtb2RlLT5oZGlzcGxheSAvIDMsIDIpLAorCQkg IEFMSUdOKG1vZGUtPnZkaXNwbGF5IC8gMiwgMikpOworCisJLyogS2V5aG9sZXMgaW4gc3ByaXRl IGNvcm5lcnMgYW5kIG1pZGRsZSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShr ZXlfcmVjdCk7IGkrKykKKwkJcmVjdF9pbml0KCZrZXlfcmVjdFtpXSwgMCwgMCwgNjQsIDY0KTsK KworCXJlY3RfdHJhbnNsYXRlKCZrZXlfcmVjdFswXSwKKwkJICAgICAgIDAsIDApOworCXJlY3Rf dHJhbnNsYXRlKCZrZXlfcmVjdFsxXSwKKwkJICAgICAgIHJlY3Rfd2lkdGgoJmRhdGEtPnNwcml0 ZS5yZWN0KSAtIDY0LCAwKTsKKwlyZWN0X3RyYW5zbGF0ZSgma2V5X3JlY3RbMl0sCisJCSAgICAg ICAwLAorCQkgICAgICAgcmVjdF9oZWlnaHQoJmRhdGEtPnNwcml0ZS5yZWN0KSAtIDY0KTsKKwly ZWN0X3RyYW5zbGF0ZSgma2V5X3JlY3RbM10sCisJCSAgICAgICByZWN0X3dpZHRoKCZkYXRhLT5z cHJpdGUucmVjdCkgLSA2NCwKKwkJICAgICAgIHJlY3RfaGVpZ2h0KCZkYXRhLT5zcHJpdGUucmVj dCkgLSA2NCk7CisJcmVjdF90cmFuc2xhdGUoJmtleV9yZWN0WzRdLAorCQkgICAgICAgQUxJR04o cmVjdF93aWR0aCgmZGF0YS0+c3ByaXRlLnJlY3QpIC8gMiAtIDMyLCAyKSwKKwkJICAgICAgIEFM SUdOKHJlY3RfaGVpZ2h0KCZkYXRhLT5zcHJpdGUucmVjdCkgLyAyIC0gMzIsIDIpKTsKKworCS8q IHNlbGVjdCBjb2xvcnMgKi8KKwlkYXRhLT5wcmltYXJ5LmNvbG9yID0gJnByaW1hcnlfY29sb3I7 CisJZGF0YS0+c3ByaXRlLmNvbG9yID0gJnNwcml0ZV9jb2xvcjsKKworCS8qIGNyZWF0ZSBmcmFt ZWJ1ZmZlcnMgKi8KKwlpZiAoaWd0X2Zvcm1hdF9pc195dXYoZGF0YS0+cHJpbWFyeS5mb3JtYXQp KQorCQljcmVhdGVfY29sb3JfZmIoZGF0YSwgJmRhdGEtPnByaW1hcnkpOworCWVsc2UKKwkJY3Jl YXRlX2NvbG9yX3BhdHRlcm5fZmIoZGF0YSwgJmRhdGEtPnByaW1hcnkpOworCisJaWYgKGlndF9m b3JtYXRfaXNfeXV2KGRhdGEtPnNwcml0ZS5mb3JtYXQpKQorCQljcmVhdGVfY29sb3JfZmIoZGF0 YSwgJmRhdGEtPnNwcml0ZSk7CisJZWxzZQorCQljcmVhdGVfY29sb3JfZmIoZGF0YSwgJmRhdGEt PnNwcml0ZSk7CisJcGFpbnRfa2V5aG9sZXMoZGF0YSwgJmRhdGEtPnNwcml0ZS5mYiwKKwkJICAg ICAgIGtleV9yZWN0LCBBUlJBWV9TSVpFKGtleV9yZWN0KSwKKwkJICAgICAgICZrZXlfY29sb3Ip OworCisJLyoKKwkgKiBUcmFuc2xhdGUga2V5aG9sZXMgdG8gcHJpbWFyeSBjb29yZGluYXRlIHNw YWNlIHNvCisJICogdGhleSBhcHBlYXIgaW4gdGhlIGNvcnJlY3Qgc3BvdCBpbiB0aGUgcmVmZXJl bmNlIGZiCisJICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGtleV9yZWN0KTsg aSsrKQorCQlyZWN0X3RyYW5zbGF0ZSgma2V5X3JlY3RbaV0sCisJCQkgICAgICAgZGF0YS0+c3By aXRlLnJlY3QueDEsCisJCQkgICAgICAgZGF0YS0+c3ByaXRlLnJlY3QueTEpOworCisJY3JlYXRl X3NyY19rZXlfcmVmX2ZiKGRhdGEsICZkYXRhLT5wcmltYXJ5LCAmZGF0YS0+c3ByaXRlLAorCQkJ ICAgICAga2V5X3JlY3QsIEFSUkFZX1NJWkUoa2V5X3JlY3QpLAorCQkJICAgICAgJmRhdGEtPnJl Zl9mYik7CisKKwkvKiBjb2xsZWN0IHJlZmVyZW5jZSBjcmMgKi8KKwlpZ3RfcGxhbmVfc2V0X2Zi KGRhdGEtPnByaW1hcnkucGxhbmUsICZkYXRhLT5yZWZfZmIpOworCWlmICghZGF0YS0+ZGlzcGxh eS5pc19hdG9taWMpCisJCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIENPTU1J VF9MRUdBQ1kpOworCisJaWYgKGRhdGEtPnNwcml0ZS5mb3JtYXQgPT0gRFJNX0ZPUk1BVF9YQkdS MTYxNjE2MTZGKQorCQlzZXRfbGVnYWN5X2x1dChkYXRhLCBMVVRfTUFTS19GUDE2KTsKKwllbHNl IGlmIChkYXRhLT5zcHJpdGUuZm9ybWF0ICE9IERSTV9GT1JNQVRfQzgpCisJCXNldF9sZWdhY3lf bHV0KGRhdGEsIExVVF9NQVNLKTsKKworCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRpc3Bs YXksIGRhdGEtPmRpc3BsYXkuaXNfYXRvbWljID8KKwkJCSAgICBDT01NSVRfQVRPTUlDIDogQ09N TUlUX1VOSVZFUlNBTCk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3Jj LCAmZGF0YS0+cmVmX2NyYyk7CisKKwkvKiBjb2xsZWN0IHRlc3QgY3JjICovCisJY2tleSA9IGNr ZXlfdmFsKGRhdGEtPnNwcml0ZS5mb3JtYXQsICZrZXlfY29sb3IpOworCWlmIChpZ3RfZm9ybWF0 X2lzX3l1dihkYXRhLT5zcHJpdGUuZm9ybWF0KSkgeworCQltaW4gPSBja2V5IC0gMHgwMjAyMDI7 CisJCW1heCA9IGNrZXkgKyAweDAxMDEwMTsKKwl9IGVsc2UgeworCQltaW4gPSBja2V5OworCQlt YXggPSAwOworCX0KKwlpZ3RfYXNzZXJ0KHNldF9ja2V5KGRhdGEsIEk5MTVfU0VUX0NPTE9SS0VZ X1NPVVJDRSwKKwkJCSAgICBtaW4sIG1heCwgc3JjX2tleV9tYXNrKCkpKTsKKworCWlmIChkYXRh LT5zcHJpdGUuZm9ybWF0ID09IERSTV9GT1JNQVRfQzgpCisJCXNldF9jOF9sZWdhY3lfbHV0KGRh dGEsIDB4ZmYwMCk7CisKKwljb25maWd1cmVfcGxhbmUoZGF0YSwgJmRhdGEtPnByaW1hcnkpOwor CWNvbmZpZ3VyZV9wbGFuZShkYXRhLCAmZGF0YS0+c3ByaXRlKTsKKworCXN1cHBvcnRlZCA9IGln dF9kaXNwbGF5X3RyeV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBkYXRhLT5kaXNwbGF5LmlzX2F0 b21pYyA/CisJCQkJCSAgICBDT01NSVRfQVRPTUlDIDogQ09NTUlUX1VOSVZFUlNBTCkgPT0gMDsK KwlpZiAoc3VwcG9ydGVkKQorCQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9j cmMsICZkYXRhLT5jcmMpOworCisJLyogY2xlYW51cCAqLworCWlndF9wbGFuZV9zZXRfZmIoZGF0 YS0+cHJpbWFyeS5wbGFuZSwgTlVMTCk7CisJaWd0X3BsYW5lX3NldF9mYihkYXRhLT5zcHJpdGUu cGxhbmUsIE5VTEwpOworCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIGRhdGEt PmRpc3BsYXkuaXNfYXRvbWljID8KKwkJCSAgICBDT01NSVRfQVRPTUlDIDogQ09NTUlUX1VOSVZF UlNBTCk7CisKKwlpZ3RfYXNzZXJ0KHNldF9ja2V5KGRhdGEsIDAsIDAsIDAsIDApKTsKKworCWln dF9vdXRwdXRfc2V0X3BpcGUoZGF0YS0+b3V0cHV0LCBQSVBFX0FOWSk7CisKKwlpZ3RfcmVtb3Zl X2ZiKGRhdGEtPmRybV9mZCwgJmRhdGEtPnJlZl9mYik7CisJaWd0X3JlbW92ZV9mYihkYXRhLT5k cm1fZmQsICZkYXRhLT5zcHJpdGUuZmIpOworCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAm ZGF0YS0+cHJpbWFyeS5mYik7CisKKwlpZ3RfcGlwZV9jcmNfZnJlZShkYXRhLT5waXBlX2NyYyk7 CisKKwlpZ3RfcmVxdWlyZShzdXBwb3J0ZWQpOworCWlmIChzdXBwb3J0ZWQpCisJCWlndF9hc3Nl cnRfY3JjX2VxdWFsKCZkYXRhLT5yZWZfY3JjLCAmZGF0YS0+Y3JjKTsKK30KKworc3RhdGljIGJv b2wgdGVzdF9kc3RfY29sb3JrZXkoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJZm9yX2VhY2hfcGlw ZV93aXRoX3ZhbGlkX291dHB1dCgmZGF0YS0+ZGlzcGxheSwKKwkJCQkJZGF0YS0+cGlwZSwgZGF0 YS0+b3V0cHV0KSB7CisJCWRvX3Rlc3RfZHN0X2NvbG9ya2V5KGRhdGEpOworCQlyZXR1cm4gdHJ1 ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIHRlc3Rfc3JjX2NvbG9y a2V5KHN0cnVjdCBkYXRhICpkYXRhKQoreworCWZvcl9lYWNoX3BpcGVfd2l0aF92YWxpZF9vdXRw dXQoJmRhdGEtPmRpc3BsYXksCisJCQkJCWRhdGEtPnBpcGUsIGRhdGEtPm91dHB1dCkgeworCQlk b190ZXN0X3NyY19jb2xvcmtleShkYXRhKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJu IGZhbHNlOworfQorCitzdGF0aWMgc3RydWN0IGRhdGEgZGF0YTsKKworc3RhdGljIGNvbnN0IHVp bnQzMl90IGZvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFUX0M4LAorCURSTV9GT1JNQVRfUkdCNTY1 LAorCURSTV9GT1JNQVRfWFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKKwlEUk1f Rk9STUFUX1hCR1IxNjE2MTYxNkYsCisJRFJNX0ZPUk1BVF9ZVVlWLAorI2lmIDAKKwkvKgorCSAq IENocm9tYSB1cHNhbXBsaW5nIG1ha2VzIHRoZXNlCisJICogaW1wb3NzaWJsZSB0byB0byB0ZXN0 IHdpdGggY3JjcyA6KAorCSAqLworCURSTV9GT1JNQVRfTlYxMiwKKwlEUk1fRk9STUFUX1AwMTAs CisjZW5kaWYKK307CisKK2lndF9tYWluCit7CisJaWd0X3NraXBfb25fc2ltdWxhdGlvbigpOwor CisJaWd0X2ZpeHR1cmUgeworCQlkYXRhLmRybV9mZCA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIo RFJJVkVSX0lOVEVMKTsKKworCQlkYXRhLmRldmlkID0gaW50ZWxfZ2V0X2RybV9kZXZpZChkYXRh LmRybV9mZCk7CisKKwkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOworCisJCWlndF9k aXNwbGF5X3JlcXVpcmUoJmRhdGEuZGlzcGxheSwgZGF0YS5kcm1fZmQpOworCX0KKworCS8qCisJ ICogRklYTUUgdGVzdCB0aGF0IGtleSBtYXNrL21pbi9tYXggaGF2ZSB0aGUKKwkgKiBleHBlY3Rl ZCBlZmZlY3QgYmV5b25kIHRoZSBiYXNpY3MKKwkgKi8KKworCWZvciAoaW50IGkgPSAwOyBpIDwg QVJSQVlfU0laRShmb3JtYXRzKTsgaSsrKSB7CisJCWlmIChmb3JtYXRzW2ldICE9IERSTV9GT1JN QVRfQzggJiYKKwkJICAgICFpZ3RfZmJfc3VwcG9ydGVkX2Zvcm1hdChmb3JtYXRzW2ldKSkKKwkJ CWNvbnRpbnVlOworCisJCWRhdGEucHJpbWFyeS5mb3JtYXQgPSBEUk1fRk9STUFUX1hSR0I4ODg4 OworCQlkYXRhLnNwcml0ZS5mb3JtYXQgPSBmb3JtYXRzW2ldOworCisJCWlndF9zdWJ0ZXN0X2Yo InNyYy1jb2xvcmtleS0lcyIsCisJCQkgICAgICBpZ3RfZm9ybWF0X3N0cihkYXRhLnNwcml0ZS5m b3JtYXQpKSB7CisJCQlpZ3RfcmVxdWlyZSh0ZXN0X3NyY19jb2xvcmtleSgmZGF0YSkpOworCQl9 CisKKwkJZGF0YS5wcmltYXJ5LmZvcm1hdCA9IGZvcm1hdHNbaV07CisJCWRhdGEuc3ByaXRlLmZv cm1hdCA9IERSTV9GT1JNQVRfWFJHQjg4ODg7CisKKwkJaWd0X3N1YnRlc3RfZigiZHN0LWNvbG9y a2V5LSVzIiwKKwkJCSAgICAgIGlndF9mb3JtYXRfc3RyKGRhdGEucHJpbWFyeS5mb3JtYXQpKSB7 CisJCQlpZ3RfcmVxdWlyZSh0ZXN0X2RzdF9jb2xvcmtleSgmZGF0YSkpOworCQl9CisJfQorCisJ aWd0X2ZpeHR1cmUKKwkJaWd0X2Rpc3BsYXlfZmluaSgmZGF0YS5kaXNwbGF5KTsKK30KZGlmZiAt LWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQKaW5kZXggNDgxMjgy NDg3ZTE1Li5mZTRjNTEwNzUyNGMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCisrKyBi L3Rlc3RzL21lc29uLmJ1aWxkCkBAIC00MCw2ICs0MCw3IEBAIHRlc3RfcHJvZ3MgPSBbCiAJJ2tt c19oZG1pX2luamVjdCcsCiAJJ2ttc19pbnZhbGlkX2RvdGNsb2NrJywKIAkna21zX2xlYXNlJywK Kwkna21zX2xlZ2FjeV9jb2xvcmtleScsCiAJJ2ttc19sZWdhY3lfY29sb3JrZXlfYmFzaWMnLAog CSdrbXNfbW1hcF93cml0ZV9jcmMnLAogCSdrbXNfcGFuZWxfZml0dGluZycsCi0tIAoyLjI0LjEK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYg bWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=