From mboxrd@z Thu Jan 1 00:00:00 1970 From: ville.syrjala@linux.intel.com Subject: [PATCH v2 2/2] kms_fbc_crc: Add a CRC based FBC test Date: Mon, 25 Nov 2013 17:08:41 +0200 Message-ID: <1385392121-28237-2-git-send-email-ville.syrjala@linux.intel.com> References: <1385062420-19782-2-git-send-email-ville.syrjala@linux.intel.com> <1385392121-28237-1-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id AD507F9E51 for ; Mon, 25 Nov 2013 07:08:47 -0800 (PST) In-Reply-To: <1385392121-28237-1-git-send-email-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCmtt c19mYmNfY3JjIHdpbGwgcGVyZm9ybSB2YXJpb3VzIHdyaXRlIG9wZXJhdGlvbnMgdG8gdGhlIHNj YW5vdXQgYnVmZmVyCndoaWxjIEZCQyBpcyBlbmFibGVkLiBDUkMgY2hlY2tzIHdpbGwgYmUgdXNl ZCB0byBtYWtlIHN1cmUgdGhlCm1vZGlmY2F0aW9ucyB0byBzY2Fub3V0IGJ1ZmZlciBhcmUgZGV0 ZWN0ZWQuCgpUaGUgb3BlcmF0aW9ucyBpbmNsdWRlOgogLSBwYWdlIGZsaXAKIC0gcHdyaXRlCiAt IEdUVCBtbWFwCiAtIENQVSBtbWFwCiAtIGJsaXQKIC0gcmVuZGVyY29weQogLSBjb250ZXh0IHN3 aXRjaCArIHJlbmRlcmNvcHkKIC0gY29tYmluYXRpb24gb2YgYSBwYWdlIGZsaXAgYW5kIGVhY2gg b3BlcmF0aW9uIGxpc3RlZCBhYm92ZQoKdjI6IFVzZSBnZW1fc3dfZmluaXNoIGluc3RlYWQgb2Yg ZHJtTW9kZURpcnR5RkIgYWZ0ZXIgQ1BVIGFjY2VzcwoKU2lnbmVkLW9mZi1ieTogVmlsbGUgU3ly asOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KLS0tCiB0ZXN0cy9NYWtlZmls ZS5zb3VyY2VzIHwgICAxICsKIHRlc3RzL2ttc19mYmNfY3JjLmMgICAgfCA1NDIgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2Vk LCA1NDMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttc19mYmNfY3Jj LmMKCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUu c291cmNlcwppbmRleCBhMDJiOTNkLi5kMjAxODA5IDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmls ZS5zb3VyY2VzCisrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKQEAgLTQ5LDYgKzQ5LDcgQEAg VEVTVFNfcHJvZ3NfTSA9IFwKIAlnZW1fd3JpdGVfcmVhZF9yaW5nX3N3aXRjaCBcCiAJa21zX2Fk ZGZiIFwKIAlrbXNfY3Vyc29yX2NyYyBcCisJa21zX2ZiY19jcmMgXAogCWttc19mbGlwIFwKIAlr bXNfcGlwZV9jcmNfYmFzaWMgXAogCWttc19yZW5kZXIgXApkaWZmIC0tZ2l0IGEvdGVzdHMva21z X2ZiY19jcmMuYyBiL3Rlc3RzL2ttc19mYmNfY3JjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uYmRlNGQ4YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ttc19mYmNfY3Jj LmMKQEAgLTAsMCArMSw1NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxMyBJbnRlbCBDb3Jw b3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFs bCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAq CisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1 ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxnbGliLmg+CisK KyNpbmNsdWRlICJkcm1fZm91cmNjLmgiCisKKyNpbmNsdWRlICJkcm10ZXN0LmgiCisjaW5jbHVk ZSAiaWd0X2RlYnVnZnMuaCIKKyNpbmNsdWRlICJpZ3Rfa21zLmgiCisjaW5jbHVkZSAicmVuZGVy Y29weS5oIgorCitlbnVtIHRlc3RfbW9kZSB7CisJVEVTVF9QQUdFX0ZMSVAsCisJVEVTVF9QV1JJ VEUsCisJVEVTVF9NTUFQX0NQVSwKKwlURVNUX01NQVBfR1RULAorCVRFU1RfQkxULAorCVRFU1Rf UkVOREVSLAorCVRFU1RfQ09OVEVYVCwKKwlURVNUX1BBR0VfRkxJUF9BTkRfUFdSSVRFLAorCVRF U1RfUEFHRV9GTElQX0FORF9NTUFQX0NQVSwKKwlURVNUX1BBR0VfRkxJUF9BTkRfTU1BUF9HVFQs CisJVEVTVF9QQUdFX0ZMSVBfQU5EX0JMVCwKKwlURVNUX1BBR0VfRkxJUF9BTkRfUkVOREVSLAor CVRFU1RfUEFHRV9GTElQX0FORF9DT05URVhULAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXN0 cnVjdCBrbXN0ZXN0X2Nvbm5lY3Rvcl9jb25maWcgY29uZmlnOworCWRybU1vZGVNb2RlSW5mbyBt b2RlOworCXN0cnVjdCBrbXN0ZXN0X2ZiIGZiWzJdOworfSBjb25uZWN0b3JfdDsKKwordHlwZWRl ZiBzdHJ1Y3QgeworCWludCBkcm1fZmQ7CisJaWd0X2RlYnVnZnNfdCBkZWJ1Z2ZzOworCWRybU1v ZGVSZXMgKnJlc291cmNlczsKKwlGSUxFICpjdGw7CisJaWd0X2NyY190IHJlZl9jcmNbMl07CisJ aWd0X3BpcGVfY3JjX3QgKipwaXBlX2NyYzsKKwlkcm1faW50ZWxfYnVmbWdyICpidWZtZ3I7CisJ ZHJtX2ludGVsX2NvbnRleHQgKmN0eFsyXTsKKwl1aW50MzJfdCBkZXZpZDsKKwl1aW50MzJfdCBo YW5kbGVbMl07CisJdWludDMyX3QgY3J0Y19pZDsKKwl1aW50MzJfdCBjcnRjX2lkeDsKKwl1aW50 MzJfdCBmYl9pZFsyXTsKK30gZGF0YV90OworCitzdGF0aWMgY29uc3QgY2hhciAqdGVzdF9tb2Rl X3N0cihlbnVtIHRlc3RfbW9kZSBtb2RlKQoreworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qg dGVzdF9tb2Rlc1tdID0geworCQlbVEVTVF9QQUdFX0ZMSVBdID0gInBhZ2VfZmxpcCIsCisJCVtU RVNUX1BXUklURV0gPSAicHdyaXRlIiwKKwkJW1RFU1RfTU1BUF9DUFVdID0gIm1tYXBfY3B1IiwK KwkJW1RFU1RfTU1BUF9HVFRdID0gIm1tYXBfZ3R0IiwKKwkJW1RFU1RfQkxUXSA9ICJibHQiLAor CQlbVEVTVF9SRU5ERVJdID0gInJlbmRlciIsCisJCVtURVNUX0NPTlRFWFRdID0gImNvbnRleHQi LAorCQlbVEVTVF9QQUdFX0ZMSVBfQU5EX1BXUklURV0gPSAicGFnZV9mbGlwX2FuZF9wd3JpdGUi LAorCQlbVEVTVF9QQUdFX0ZMSVBfQU5EX01NQVBfQ1BVXSA9ICJwYWdlX2ZsaXBfYW5kX21tYXBf Y3B1IiwKKwkJW1RFU1RfUEFHRV9GTElQX0FORF9NTUFQX0dUVF0gPSAicGFnZV9mbGlwX2FuZF9t bWFwX2d0dCIsCisJCVtURVNUX1BBR0VfRkxJUF9BTkRfQkxUXSA9ICJwYWdlX2ZsaXBfYW5kX2Js dCIsCisJCVtURVNUX1BBR0VfRkxJUF9BTkRfUkVOREVSXSA9ICJwYWdlX2ZsaXBfYW5kX3JlbmRl ciIsCisJCVtURVNUX1BBR0VfRkxJUF9BTkRfQ09OVEVYVF0gPSAicGFnZV9mbGlwX2FuZF9jb250 ZXh0IiwKKwl9OworCisJcmV0dXJuIHRlc3RfbW9kZXNbbW9kZV07Cit9CisKK3N0YXRpYyB1aW50 MzJfdCBjcmVhdGVfZmIoZGF0YV90ICpkYXRhLAorCQkJICBpbnQgdywgaW50IGgsCisJCQkgIGRv dWJsZSByLCBkb3VibGUgZywgZG91YmxlIGIsCisJCQkgIHN0cnVjdCBrbXN0ZXN0X2ZiICpmYikK K3sKKwl1aW50MzJfdCBmYl9pZDsKKwljYWlyb190ICpjcjsKKworCWZiX2lkID0ga21zdGVzdF9j cmVhdGVfZmIyKGRhdGEtPmRybV9mZCwgdywgaCwKKwkJCQkgICBEUk1fRk9STUFUX1hSR0I4ODg4 LCB0cnVlLCBmYik7CisJaWd0X2Fzc2VydChmYl9pZCk7CisKKwljciA9IGttc3Rlc3RfZ2V0X2Nh aXJvX2N0eChkYXRhLT5kcm1fZmQsIGZiKTsKKwlrbXN0ZXN0X3BhaW50X2NvbG9yKGNyLCAwLCAw LCB3LCBoLCByLCBnLCBiKTsKKwlpZ3RfYXNzZXJ0KGNhaXJvX3N0YXR1cyhjcikgPT0gMCk7CisK KwlyZXR1cm4gZmJfaWQ7Cit9CisKK3N0YXRpYyBib29sCitjb25uZWN0b3Jfc2V0X21vZGUoZGF0 YV90ICpkYXRhLCBjb25uZWN0b3JfdCAqY29ubmVjdG9yLAorCQkgICBkcm1Nb2RlTW9kZUluZm8g Km1vZGUsIHVpbnQzMl90IGZiX2lkKQoreworCXN0cnVjdCBrbXN0ZXN0X2Nvbm5lY3Rvcl9jb25m aWcgKmNvbmZpZyA9ICZjb25uZWN0b3ItPmNvbmZpZzsKKwlpbnQgcmV0OworCisjaWYgMAorCWZw cmludGYoc3Rkb3V0LCAiVXNpbmcgcGlwZSAlYywgJWR4JWRcbiIsIHBpcGVfbmFtZShjb25maWct PnBpcGUpLAorCQltb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkpOworI2VuZGlmCisKKwly ZXQgPSBkcm1Nb2RlU2V0Q3J0YyhkYXRhLT5kcm1fZmQsCisJCQkgICAgIGNvbmZpZy0+Y3J0Yy0+ Y3J0Y19pZCwKKwkJCSAgICAgZmJfaWQsCisJCQkgICAgIDAsIDAsIC8qIHgsIHkgKi8KKwkJCSAg ICAgJmNvbmZpZy0+Y29ubmVjdG9yLT5jb25uZWN0b3JfaWQsCisJCQkgICAgIDEsCisJCQkgICAg IG1vZGUpOworCWlndF9hc3NlcnQocmV0ID09IDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyB2b2lkIGRpc3BsYXlfaW5pdChkYXRhX3QgKmRhdGEpCit7CisJZGF0YS0+cmVzb3VyY2VzID0g ZHJtTW9kZUdldFJlc291cmNlcyhkYXRhLT5kcm1fZmQpOworCWlndF9hc3NlcnQoZGF0YS0+cmVz b3VyY2VzKTsKKworCWRhdGEtPnBpcGVfY3JjID0gY2FsbG9jKGRhdGEtPnJlc291cmNlcy0+Y291 bnRfY3J0Y3MsIHNpemVvZihkYXRhLT5waXBlX2NyY1swXSkpOworfQorCitzdGF0aWMgdm9pZCBk aXNwbGF5X2ZpbmkoZGF0YV90ICpkYXRhKQoreworCWZyZWUoZGF0YS0+cGlwZV9jcmMpOworfQor CitzdGF0aWMgdm9pZCBmaWxsX2JsdChkYXRhX3QgKmRhdGEsIHVpbnQzMl90IGhhbmRsZSwgdW5z aWduZWQgY2hhciBjb2xvcikKK3sKKwlkcm1faW50ZWxfYm8gKmRzdCA9IGdlbV9oYW5kbGVfdG9f bGliZHJtX2JvKGRhdGEtPmJ1Zm1nciwKKwkJCQkJCSAgICBkYXRhLT5kcm1fZmQsCisJCQkJCQkg ICAgIiIsIGhhbmRsZSk7CisJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKKworCWJh dGNoID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxsb2MoZGF0YS0+YnVmbWdyLCBkYXRhLT5kZXZpZCk7 CisJaWd0X2Fzc2VydChiYXRjaCk7CisKKwlCRUdJTl9CQVRDSCg1KTsKKwlPVVRfQkFUQ0goQ09M T1JfQkxUX0NNRCk7CisJT1VUX0JBVENIKCgxIDw8IDI0KSB8ICgweGYwIDw8IDE2KSB8IDApOwor CU9VVF9CQVRDSCgxIDw8IDE2IHwgNCk7CisJT1VUX1JFTE9DKGRzdCwgSTkxNV9HRU1fRE9NQUlO X1JFTkRFUiwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwgMCk7CisJT1VUX0JBVENIKGNvbG9yKTsK KwlBRFZBTkNFX0JBVENIKCk7CisKKwlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaChiYXRjaCk7CisJ aW50ZWxfYmF0Y2hidWZmZXJfZnJlZShiYXRjaCk7Cit9CisKKworc3RhdGljIHZvaWQgc2NyYXRj aF9idWZfaW5pdChzdHJ1Y3Qgc2NyYXRjaF9idWYgKmJ1ZiwgZHJtX2ludGVsX2JvICpibykKK3sK KwlidWYtPmJvID0gYm87CisJYnVmLT5zdHJpZGUgPSA0MDk2OworCWJ1Zi0+dGlsaW5nID0gSTkx NV9USUxJTkdfWDsKKwlidWYtPnNpemUgPSA0MDk2OworfQorCitzdGF0aWMgdm9pZCBleGVjX25v cChkYXRhX3QgKmRhdGEsIHVpbnQzMl90IGhhbmRsZSwgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRl eHQpCit7CisJZHJtX2ludGVsX2JvICpkc3Q7CisJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaDsKKworCWRzdCA9IGdlbV9oYW5kbGVfdG9fbGliZHJtX2JvKGRhdGEtPmJ1Zm1nciwgZGF0 YS0+ZHJtX2ZkLCAiIiwgaGFuZGxlKTsKKwlpZ3RfYXNzZXJ0KGRzdCk7CisKKwliYXRjaCA9IGlu dGVsX2JhdGNoYnVmZmVyX2FsbG9jKGRhdGEtPmJ1Zm1nciwgZGF0YS0+ZGV2aWQpOworCWlndF9h c3NlcnQoYmF0Y2gpOworCisJLyogYWRkIHRoZSByZWxvYyB0byBtYWtlIHN1cmUgdGhlIGtlcm5l bCB3aWxsIHRoaW5rIHdlIHdyaXRlIHRvIGRzdCAqLworCUJFR0lOX0JBVENIKDQpOworCU9VVF9C QVRDSChNSV9CQVRDSF9CVUZGRVJfRU5EKTsKKwlPVVRfQkFUQ0goTUlfTk9PUCk7CisJT1VUX1JF TE9DKGRzdCwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwg MCk7CisJT1VUX0JBVENIKE1JX05PT1ApOworCUFEVkFOQ0VfQkFUQ0goKTsKKworCWludGVsX2Jh dGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwgY29udGV4dCk7CisJaW50ZWxfYmF0 Y2hidWZmZXJfZnJlZShiYXRjaCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfcmVuZGVyKGRhdGFf dCAqZGF0YSwgdWludDMyX3QgaGFuZGxlLAorCQkJZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQs IHVuc2lnbmVkIGNoYXIgY29sb3IpCit7CisJZHJtX2ludGVsX2JvICpzcmMsICpkc3Q7CisJc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKKwlzdHJ1Y3Qgc2NyYXRjaF9idWYgc3JjX2J1 ZiwgZHN0X2J1ZjsKKwljb25zdCB1aW50OF90IGJ1Zls0XSA9IHsgY29sb3IsIGNvbG9yLCBjb2xv ciwgY29sb3IgfTsKKwlyZW5kZXJfY29weWZ1bmNfdCByZW5kZXJjb3B5ID0gZ2V0X3JlbmRlcl9j b3B5ZnVuYyhkYXRhLT5kZXZpZCk7CisKKwlpZ3Rfc2tpcF9vbighcmVuZGVyY29weSk7CisKKwlk c3QgPSBnZW1faGFuZGxlX3RvX2xpYmRybV9ibyhkYXRhLT5idWZtZ3IsIGRhdGEtPmRybV9mZCwg IiIsIGhhbmRsZSk7CisJaWd0X2Fzc2VydChkc3QpOworCisJc3JjID0gZHJtX2ludGVsX2JvX2Fs bG9jKGRhdGEtPmJ1Zm1nciwgIiIsIDQwOTYsIDQwOTYpOworCWlndF9hc3NlcnQoc3JjKTsKKwor CWdlbV93cml0ZShkYXRhLT5kcm1fZmQsIHNyYy0+aGFuZGxlLCAwLCBidWYsIDQpOworCisJc2Ny YXRjaF9idWZfaW5pdCgmc3JjX2J1Ziwgc3JjKTsKKwlzY3JhdGNoX2J1Zl9pbml0KCZkc3RfYnVm LCBkc3QpOworCisJYmF0Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhkYXRhLT5idWZtZ3Is IGRhdGEtPmRldmlkKTsKKwlpZ3RfYXNzZXJ0KGJhdGNoKTsKKworCXJlbmRlcmNvcHkoYmF0Y2gs IGNvbnRleHQsCisJCSAgICZzcmNfYnVmLCAwLCAwLCAxLCAxLAorCQkgICAmZHN0X2J1ZiwgMCwg MCk7CisKKwlpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKGJhdGNoKTsKK30KKworc3RhdGljIGJvb2wg ZmJjX2VuYWJsZWQoZGF0YV90ICpkYXRhKQoreworCUZJTEUgKnN0YXR1czsKKwljaGFyIHN0cls2 NF0gPSB7fTsKKworCXN0YXR1cyA9IGlndF9kZWJ1Z2ZzX2ZvcGVuKCZkYXRhLT5kZWJ1Z2ZzLCAi aTkxNV9mYmNfc3RhdHVzIiwgInIiKTsKKwlmcmVhZChzdHIsIHNpemVvZihzdHIpIC0gMSwgMSwg c3RhdHVzKTsKKwlmY2xvc2Uoc3RhdHVzKTsKKwlyZXR1cm4gc3Ryc3RyKHN0ciwgIkZCQyBlbmFi bGVkIikgIT0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgdGVzdF9jcmMoZGF0YV90ICpkYXRhLCBl bnVtIHRlc3RfbW9kZSBtb2RlKQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGJ1Zlsx XSA9IHsgMHhjYyB9OworCWlndF9waXBlX2NyY190ICpwaXBlX2NyYyA9IGRhdGEtPnBpcGVfY3Jj W2RhdGEtPmNydGNfaWR4XTsKKwlpZ3RfY3JjX3QgKmNyY3MgPSBOVUxMOworCXVpbnQzMl90IGhh bmRsZSA9IGRhdGEtPmhhbmRsZVswXTsKKworCWlndF9hc3NlcnQoZmJjX2VuYWJsZWQoZGF0YSkp OworCisJaWYgKG1vZGUgPj0gVEVTVF9QQUdFX0ZMSVBfQU5EX1BXUklURSkgeworCQloYW5kbGUg PSBkYXRhLT5oYW5kbGVbMV07CisJCWlndF9hc3NlcnQoZHJtTW9kZVBhZ2VGbGlwKGRhdGEtPmRy bV9mZCwgZGF0YS0+Y3J0Y19pZCwKKwkJCQkJICAgZGF0YS0+ZmJfaWRbMV0sIDAsIE5VTEwpID09 IDApOworCQl1c2xlZXAoMzAwMDAwKTsKKworCQlpZ3RfYXNzZXJ0KGZiY19lbmFibGVkKGRhdGEp KTsKKwl9CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwkJdm9pZCAqcHRyOworCWNhc2UgVEVTVF9QQUdF X0ZMSVA6CisJCWlndF9hc3NlcnQoZHJtTW9kZVBhZ2VGbGlwKGRhdGEtPmRybV9mZCwgZGF0YS0+ Y3J0Y19pZCwKKwkJCQkJICAgZGF0YS0+ZmJfaWRbMV0sIDAsIE5VTEwpID09IDApOworCQlicmVh azsKKwljYXNlIFRFU1RfUFdSSVRFOgorCWNhc2UgVEVTVF9QQUdFX0ZMSVBfQU5EX1BXUklURToK KwkJZ2VtX3dyaXRlKGRhdGEtPmRybV9mZCwgaGFuZGxlLCAwLCBidWYsIDEpOworCQlnZW1fc3df ZmluaXNoKGRhdGEtPmRybV9mZCwgaGFuZGxlKTsKKwkJYnJlYWs7CisJY2FzZSBURVNUX01NQVBf Q1BVOgorCWNhc2UgVEVTVF9QQUdFX0ZMSVBfQU5EX01NQVBfQ1BVOgorCQlwdHIgPSBnZW1fbW1h cF9fY3B1KGRhdGEtPmRybV9mZCwgaGFuZGxlLCA0MDk2LCBQUk9UX1dSSVRFKTsKKwkJZ2VtX3Nl dF9kb21haW4oZGF0YS0+ZHJtX2ZkLCBoYW5kbGUsIEk5MTVfR0VNX0RPTUFJTl9DUFUsIEk5MTVf R0VNX0RPTUFJTl9DUFUpOworCQltZW1zZXQocHRyLCAweGZmLCA0KTsKKwkJZ2VtX3NldF9kb21h aW4oZGF0YS0+ZHJtX2ZkLCBoYW5kbGUsIEk5MTVfR0VNX0RPTUFJTl9HVFQsIDApOworCQltdW5t YXAocHRyLCA0MDk2KTsKKwkJZ2VtX3N3X2ZpbmlzaChkYXRhLT5kcm1fZmQsIGhhbmRsZSk7CisJ CWJyZWFrOworCWNhc2UgVEVTVF9NTUFQX0dUVDoKKwljYXNlIFRFU1RfUEFHRV9GTElQX0FORF9N TUFQX0dUVDoKKwkJcHRyID0gZ2VtX21tYXBfX2d0dChkYXRhLT5kcm1fZmQsIGhhbmRsZSwgNDA5 NiwgUFJPVF9XUklURSk7CisJCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgaGFuZGxlLCBJ OTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKKwkJbWVtc2V0KHB0ciwg MHhmZiwgNCk7CisJCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgaGFuZGxlLCBJOTE1X0dF TV9ET01BSU5fR1RULCAwKTsKKwkJbXVubWFwKHB0ciwgNDA5Nik7CisJCWJyZWFrOworCWNhc2Ug VEVTVF9CTFQ6CisJY2FzZSBURVNUX1BBR0VfRkxJUF9BTkRfQkxUOgorCQlmaWxsX2JsdChkYXRh LCBoYW5kbGUsIDB4ZmYpOworCQlicmVhazsKKwljYXNlIFRFU1RfUkVOREVSOgorCWNhc2UgVEVT VF9DT05URVhUOgorCWNhc2UgVEVTVF9QQUdFX0ZMSVBfQU5EX1JFTkRFUjoKKwljYXNlIFRFU1Rf UEFHRV9GTElQX0FORF9DT05URVhUOgorCQlmaWxsX3JlbmRlcihkYXRhLCBoYW5kbGUsCisJCQkg ICAgKG1vZGUgPT0gVEVTVF9DT05URVhUIHx8IG1vZGUgPT0gVEVTVF9QQUdFX0ZMSVBfQU5EX0NP TlRFWFQpID8KKwkJCSAgICBkYXRhLT5jdHhbMV0gOiBOVUxMLCAweGZmKTsKKwkJYnJlYWs7CisJ fQorCisJLyogbWFrZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgbmV3IGRhdGEgKi8KKwlpZ3Rfd2Fp dF9mb3JfdmJsYW5rKGRhdGEtPmRybV9mZCwgZGF0YS0+Y3J0Y19pZHgpOworCisJaWd0X3BpcGVf Y3JjX3N0YXJ0KHBpcGVfY3JjKTsKKwlpZ3RfcGlwZV9jcmNfZ2V0X2NyY3MocGlwZV9jcmMsIDEs ICZjcmNzKTsKKwlpZ3RfcGlwZV9jcmNfc3RvcChwaXBlX2NyYyk7CisJaWd0X2Fzc2VydCghaWd0 X2NyY19lcXVhbCgmY3Jjc1swXSwgJmRhdGEtPnJlZl9jcmNbMF0pKTsKKwlpZiAobW9kZSA9PSBU RVNUX1BBR0VfRkxJUCkKKwkJaWd0X2Fzc2VydChpZ3RfY3JjX2VxdWFsKCZjcmNzWzBdLCAmZGF0 YS0+cmVmX2NyY1sxXSkpOworCWVsc2UKKwkJaWd0X2Fzc2VydCghaWd0X2NyY19lcXVhbCgmY3Jj c1swXSwgJmRhdGEtPnJlZl9jcmNbMV0pKTsKKwlmcmVlKGNyY3MpOworCisJLyoKKwkgKiBBbGxv dyB0aW1lIGZvciBGQkMgdG8ga2ljayBpbiBhZ2FpbiBpZiBpdAorCSAqIGdvdCBkaXNhYmxlZCBk dXJpbmcgZGlydHlmYiBvciBwYWdlIGZsaXAuCisJICovCisJdXNsZWVwKDMwMDAwMCk7CisKKwlp Z3RfYXNzZXJ0KGZiY19lbmFibGVkKGRhdGEpKTsKKworCWlndF9waXBlX2NyY19zdGFydChwaXBl X2NyYyk7CisJaWd0X3BpcGVfY3JjX2dldF9jcmNzKHBpcGVfY3JjLCAxLCAmY3Jjcyk7CisJaWd0 X3BpcGVfY3JjX3N0b3AocGlwZV9jcmMpOworCWlndF9hc3NlcnQoIWlndF9jcmNfZXF1YWwoJmNy Y3NbMF0sICZkYXRhLT5yZWZfY3JjWzBdKSk7CisJaWYgKG1vZGUgPT0gVEVTVF9QQUdFX0ZMSVAp CisJCWlndF9hc3NlcnQoaWd0X2NyY19lcXVhbCgmY3Jjc1swXSwgJmRhdGEtPnJlZl9jcmNbMV0p KTsKKwllbHNlCisJCWlndF9hc3NlcnQoIWlndF9jcmNfZXF1YWwoJmNyY3NbMF0sICZkYXRhLT5y ZWZfY3JjWzFdKSk7CisJZnJlZShjcmNzKTsKK30KKworc3RhdGljIGJvb2wgcHJlcGFyZV9jcnRj KGRhdGFfdCAqZGF0YSwgdWludDMyX3QgY29ubmVjdG9yX2lkLCBlbnVtIHRlc3RfbW9kZSBtb2Rl KQoreworCWlndF9waXBlX2NyY190ICpwaXBlX2NyYzsKKwlpZ3RfY3JjX3QgKmNyY3MgPSBOVUxM OworCWNvbm5lY3Rvcl90IGNvbm5lY3RvcjsKKwlpbnQgcmV0OworCisJcmV0ID0ga21zdGVzdF9n ZXRfY29ubmVjdG9yX2NvbmZpZyhkYXRhLT5kcm1fZmQsCisJCQkJCSAgIGNvbm5lY3Rvcl9pZCwK KwkJCQkJICAgMSA8PCBkYXRhLT5jcnRjX2lkeCwKKwkJCQkJICAgJmNvbm5lY3Rvci5jb25maWcp OworCWlmIChyZXQpCisJCXJldHVybiBmYWxzZTsKKworCWlndF9waXBlX2NyY19mcmVlKGRhdGEt PnBpcGVfY3JjW2RhdGEtPmNydGNfaWR4XSk7CisJZGF0YS0+cGlwZV9jcmNbZGF0YS0+Y3J0Y19p ZHhdID0gTlVMTDsKKworCXBpcGVfY3JjID0gaWd0X3BpcGVfY3JjX25ldygmZGF0YS0+ZGVidWdm cywKKwkJCQkgICAgZGF0YS0+ZHJtX2ZkLCBkYXRhLT5jcnRjX2lkeCwKKwkJCQkgICAgSU5URUxf UElQRV9DUkNfU09VUkNFX0FVVE8pOworCWlmICghcGlwZV9jcmMpIHsKKwkJcHJpbnRmKCJhdXRv IGNyYyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgY29ubmVjdG9yIHdpdGggY3J0YyAlaVxuIiwKKwkJ ICAgICAgIGRhdGEtPmNydGNfaWR4KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWRhdGEtPnBp cGVfY3JjW2RhdGEtPmNydGNfaWR4XSA9IHBpcGVfY3JjOworCisJZGF0YS0+ZmJfaWRbMF0gPSBj cmVhdGVfZmIoZGF0YSwKKwkJCQkgICBjb25uZWN0b3IuY29uZmlnLmRlZmF1bHRfbW9kZS5oZGlz cGxheSwKKwkJCQkgICBjb25uZWN0b3IuY29uZmlnLmRlZmF1bHRfbW9kZS52ZGlzcGxheSwKKwkJ CQkgICAwLjAsIDAuMCwgMC4wLCAmY29ubmVjdG9yLmZiWzBdKTsKKwlpZ3RfYXNzZXJ0KGRhdGEt PmZiX2lkWzBdKTsKKworCWRhdGEtPmZiX2lkWzFdID0gY3JlYXRlX2ZiKGRhdGEsCisJCQkJICAg Y29ubmVjdG9yLmNvbmZpZy5kZWZhdWx0X21vZGUuaGRpc3BsYXksCisJCQkJICAgY29ubmVjdG9y LmNvbmZpZy5kZWZhdWx0X21vZGUudmRpc3BsYXksCisJCQkJICAgMC4xLCAwLjEsIDAuMSwgJmNv bm5lY3Rvci5mYlsxXSk7CisJaWd0X2Fzc2VydChkYXRhLT5mYl9pZFsxXSk7CisKKwlkYXRhLT5o YW5kbGVbMF0gPSBjb25uZWN0b3IuZmJbMF0uZ2VtX2hhbmRsZTsKKwlkYXRhLT5oYW5kbGVbMV0g PSBjb25uZWN0b3IuZmJbMV0uZ2VtX2hhbmRsZTsKKworCS8qIHNjYW5vdXQgPSBmYlsxXSAqLwor CWNvbm5lY3Rvcl9zZXRfbW9kZShkYXRhLCAmY29ubmVjdG9yLCAmY29ubmVjdG9yLmNvbmZpZy5k ZWZhdWx0X21vZGUsCisJCQkgICBkYXRhLT5mYl9pZFsxXSk7CisJdXNsZWVwKDMwMDAwMCk7CisK KwlpZ3Rfc2tpcF9vbighZmJjX2VuYWJsZWQoZGF0YSkpOworCisJaWd0X3dhaXRfZm9yX3ZibGFu ayhkYXRhLT5kcm1fZmQsIGRhdGEtPmNydGNfaWR4KTsKKworCS8qIGdldCByZWZlcmVuY2UgY3Jj IGZvciBmYlsxXSAqLworCWlndF9waXBlX2NyY19zdGFydChwaXBlX2NyYyk7CisJaWd0X3BpcGVf Y3JjX2dldF9jcmNzKHBpcGVfY3JjLCAxLCAmY3Jjcyk7CisJZGF0YS0+cmVmX2NyY1sxXSA9IGNy Y3NbMF07CisJaWd0X3BpcGVfY3JjX3N0b3AocGlwZV9jcmMpOworCWZyZWUoY3Jjcyk7CisKKwlp ZiAobW9kZSA9PSBURVNUX0NPTlRFWFQgfHwgbW9kZSA9PSBURVNUX1BBR0VfRkxJUF9BTkRfQ09O VEVYVCkgeworCQlkYXRhLT5jdHhbMF0gPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfY3JlYXRlKGRh dGEtPmJ1Zm1ncik7CisJCWlndF9yZXF1aXJlKGRhdGEtPmN0eFswXSk7CisJCWRhdGEtPmN0eFsx XSA9IGRybV9pbnRlbF9nZW1fY29udGV4dF9jcmVhdGUoZGF0YS0+YnVmbWdyKTsKKwkJaWd0X3Jl cXVpcmUoZGF0YS0+Y3R4WzFdKTsKKworCQkvKgorCQkgKiBEaXNhYmxlIEZCQyBSVCBhZGRyZXNz IGZvciBib3RoIGNvbnRleHRzCisJCSAqIChieSAicmVuZGVyaW5nIiB0byBhIG5vbi1zY2Fub3V0 IGJ1ZmZlcikuCisJCSAqLworCQlleGVjX25vcChkYXRhLCBkYXRhLT5oYW5kbGVbMF0sIGRhdGEt PmN0eFsxXSk7CisJCWV4ZWNfbm9wKGRhdGEsIGRhdGEtPmhhbmRsZVswXSwgZGF0YS0+Y3R4WzBd KTsKKwkJZXhlY19ub3AoZGF0YSwgZGF0YS0+aGFuZGxlWzBdLCBkYXRhLT5jdHhbMV0pOworCQll eGVjX25vcChkYXRhLCBkYXRhLT5oYW5kbGVbMF0sIGRhdGEtPmN0eFswXSk7CisJfQorCisJLyog c2Nhbm91dCA9IGZiWzBdICovCisJY29ubmVjdG9yX3NldF9tb2RlKGRhdGEsICZjb25uZWN0b3Is ICZjb25uZWN0b3IuY29uZmlnLmRlZmF1bHRfbW9kZSwKKwkJCSAgIGRhdGEtPmZiX2lkWzBdKTsK Kwl1c2xlZXAoMzAwMDAwKTsKKworCWlndF9za2lwX29uKCFmYmNfZW5hYmxlZChkYXRhKSk7CisK KwlpZiAobW9kZSA9PSBURVNUX0NPTlRFWFQgfHwgbW9kZSA9PSBURVNUX1BBR0VfRkxJUF9BTkRf Q09OVEVYVCkgeworCQkvKgorCQkgKiBtYWtlIGN0eFswXSBGQkMgUlQgYWRkcmVzcyBwb2ludCB0 byBmYlswXSwgY3R4WzFdCisJCSAqIEZCQyBSVCBhZGRyZXNzIGlzIGxlZnQgYXMgZGlzYWJsZWQu CisJCSAqLworCQlleGVjX25vcChkYXRhLCBjb25uZWN0b3IuZmJbMF0uZ2VtX2hhbmRsZSwgZGF0 YS0+Y3R4WzBdKTsKKwl9CisKKwlpZ3Rfd2FpdF9mb3JfdmJsYW5rKGRhdGEtPmRybV9mZCwgZGF0 YS0+Y3J0Y19pZHgpOworCisJLyogZ2V0IHJlZmVyZW5jZSBjcmMgZm9yIGZiWzBdICovCisJaWd0 X3BpcGVfY3JjX3N0YXJ0KHBpcGVfY3JjKTsKKwlpZ3RfcGlwZV9jcmNfZ2V0X2NyY3MocGlwZV9j cmMsIDEsICZjcmNzKTsKKwlkYXRhLT5yZWZfY3JjWzBdID0gY3Jjc1swXTsKKwlpZ3RfcGlwZV9j cmNfc3RvcChwaXBlX2NyYyk7CisJZnJlZShjcmNzKTsKKworCWttc3Rlc3RfZnJlZV9jb25uZWN0 b3JfY29uZmlnKCZjb25uZWN0b3IuY29uZmlnKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0 aWMgdm9pZCBmaW5pc2hfY3J0YyhkYXRhX3QgKmRhdGEsIGVudW0gdGVzdF9tb2RlIG1vZGUpCit7 CisJaWd0X3BpcGVfY3JjX2ZyZWUoZGF0YS0+cGlwZV9jcmNbZGF0YS0+Y3J0Y19pZHhdKTsKKwlk YXRhLT5waXBlX2NyY1tkYXRhLT5jcnRjX2lkeF0gPSBOVUxMOworCisJaWYgKG1vZGUgPT0gVEVT VF9DT05URVhUIHx8IG1vZGUgPT0gVEVTVF9QQUdFX0ZMSVBfQU5EX0NPTlRFWFQpIHsKKwkJZHJt X2ludGVsX2dlbV9jb250ZXh0X2Rlc3Ryb3koZGF0YS0+Y3R4WzBdKTsKKwkJZHJtX2ludGVsX2dl bV9jb250ZXh0X2Rlc3Ryb3koZGF0YS0+Y3R4WzFdKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ1 bl90ZXN0KGRhdGFfdCAqZGF0YSwgZW51bSB0ZXN0X21vZGUgbW9kZSkKK3sKKwlpbnQgaSwgbjsK KworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5yZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3RvcnM7IGkr KykgeworCQl1aW50MzJfdCBjb25uZWN0b3JfaWQgPSBkYXRhLT5yZXNvdXJjZXMtPmNvbm5lY3Rv cnNbaV07CisKKwkJZm9yIChuID0gMDsgbiA8IGRhdGEtPnJlc291cmNlcy0+Y291bnRfY3J0Y3M7 IG4rKykgeworCQkJZGF0YS0+Y3J0Y19pZHggPSBuOworCQkJZGF0YS0+Y3J0Y19pZCA9IGRhdGEt PnJlc291cmNlcy0+Y3J0Y3Nbbl07CisKKwkJCWlmICghcHJlcGFyZV9jcnRjKGRhdGEsIGNvbm5l Y3Rvcl9pZCwgbW9kZSkpCisJCQkJY29udGludWU7CisKKwkJCWZwcmludGYoc3Rkb3V0LCAiQmVn aW5uaW5nICVzIG9uIGNydGMgJWQsIGNvbm5lY3RvciAlZFxuIiwKKwkJCQlpZ3Rfc3VidGVzdF9u YW1lKCksIGRhdGEtPmNydGNfaWQsIGNvbm5lY3Rvcl9pZCk7CisJCQl0ZXN0X2NyYyhkYXRhLCBt b2RlKTsKKworCQkJZnByaW50ZihzdGRvdXQsICJcbiVzIG9uIGNydGMgJWQsIGNvbm5lY3RvciAl ZDogUEFTU0VEXG5cbiIsCisJCQkJaWd0X3N1YnRlc3RfbmFtZSgpLCBkYXRhLT5jcnRjX2lkLCBj b25uZWN0b3JfaWQpOworCisJCQlmaW5pc2hfY3J0YyhkYXRhLCBtb2RlKTsKKwkJfQorCX0KK30K KworaWd0X21haW4KK3sKKwlkYXRhX3QgZGF0YSA9IHt9OworCWVudW0gdGVzdF9tb2RlIG1vZGU7 CisKKwlpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7CisKKwlpZ3RfZml4dHVyZSB7CisJCXNpemVf dCB3cml0dGVuOworCQlpbnQgcmV0OworCQljb25zdCBjaGFyICpjbWQgPSAicGlwZSBBIG5vbmUi OworCQljaGFyIGJ1Zls2NF07CisJCUZJTEUgKnN0YXR1czsKKworCQlkYXRhLmRybV9mZCA9IGRy bV9vcGVuX2FueSgpOworCQlpZ3RfcmVxdWlyZShkYXRhLmRybV9mZCk7CisJCWlndF9zZXRfdnRf Z3JhcGhpY3NfbW9kZSgpOworCisJCWRhdGEuZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2RldmlkKGRh dGEuZHJtX2ZkKTsKKworCQlpZ3RfZGVidWdmc19pbml0KCZkYXRhLmRlYnVnZnMpOworCQlkYXRh LmN0bCA9IGlndF9kZWJ1Z2ZzX2ZvcGVuKCZkYXRhLmRlYnVnZnMsCisJCQkJCSAgICAgImk5MTVf ZGlzcGxheV9jcmNfY3RsIiwgInIrIik7CisJCWlndF9yZXF1aXJlX2YoZGF0YS5jdGwsCisJCQkg ICAgICAiTm8gZGlzcGxheV9jcmNfY3RsIGZvdW5kLCBrZXJuZWwgdG9vIG9sZFxuIik7CisJCXdy aXR0ZW4gPSBmd3JpdGUoY21kLCAxLCBzdHJsZW4oY21kKSwgZGF0YS5jdGwpOworCQlyZXQgPSBm Zmx1c2goZGF0YS5jdGwpOworCQlpZ3RfcmVxdWlyZV9mKCh3cml0dGVuID09IHN0cmxlbihjbWQp ICYmIHJldCA9PSAwKSB8fCBlcnJubyAhPSBFTk9ERVYsCisJCQkgICAgICAiQ1JDcyBub3Qgc3Vw cG9ydGVkIG9uIHRoaXMgcGxhdGZvcm1cbiIpOworCisJCXN0YXR1cyA9IGlndF9kZWJ1Z2ZzX2Zv cGVuKCZkYXRhLmRlYnVnZnMsICJpOTE1X2ZiY19zdGF0dXMiLCAiciIpOworCQlpZ3RfcmVxdWly ZV9mKHN0YXR1cywgIk5vIGk5MTVfZmJjX3N0YXR1cyBmb3VuZFxuIik7CisJCWZyZWFkKGJ1Ziwg c2l6ZW9mKGJ1ZiksIDEsIHN0YXR1cyk7CisJCWZjbG9zZShzdGF0dXMpOworCQlidWZbc2l6ZW9m KGJ1ZikgLSAxXSA9ICdcMCc7CisJCWlndF9yZXF1aXJlX2YoIXN0cnN0cihidWYsICJ1bnN1cHBv cnRlZCBieSB0aGlzIGNoaXBzZXQiKSAmJgorCQkJICAgICAgIXN0cnN0cihidWYsICJkaXNhYmxl ZCBwZXIgbW9kdWxlIHBhcmFtIikgJiYKKwkJCSAgICAgICFzdHJzdHIoYnVmLCAiZGlzYWJsZWQg cGVyIGNoaXAgZGVmYXVsdCIpLAorCQkJICAgICAgIkZCQyBub3Qgc3VwcG9ydGVkL2VuYWJsZWRc biIpOworCisJCWRhdGEuYnVmbWdyID0gZHJtX2ludGVsX2J1Zm1ncl9nZW1faW5pdChkYXRhLmRy bV9mZCwgNDA5Nik7CisJCWlndF9hc3NlcnQoZGF0YS5idWZtZ3IpOworCQlkcm1faW50ZWxfYnVm bWdyX2dlbV9lbmFibGVfcmV1c2UoZGF0YS5idWZtZ3IpOworCisJCWRpc3BsYXlfaW5pdCgmZGF0 YSk7CisJfQorCisJZm9yIChtb2RlID0gVEVTVF9QQUdFX0ZMSVA7IG1vZGUgPD0gVEVTVF9QQUdF X0ZMSVBfQU5EX0NPTlRFWFQ7IG1vZGUrKykgeworCQlpZ3Rfc3VidGVzdF9mKCIlcyIsIHRlc3Rf bW9kZV9zdHIobW9kZSkpIHsKKwkJCXJ1bl90ZXN0KCZkYXRhLCBtb2RlKTsKKwkJfQorCX0KKwor CWlndF9maXh0dXJlIHsKKwkJZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95KGRhdGEuYnVmbWdyKTsK KwkJZGlzcGxheV9maW5pKCZkYXRhKTsKKwkJZmNsb3NlKGRhdGEuY3RsKTsKKwl9Cit9Ci0tIAox LjguMy4yCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJ bnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=