From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id A38E26E199 for ; Thu, 12 Dec 2019 14:27:09 +0000 (UTC) From: Stanislav Lisovskiy Date: Thu, 12 Dec 2019 16:24:15 +0200 Message-Id: <20191212142415.26517-2-stanislav.lisovskiy@intel.com> In-Reply-To: <20191212142415.26517-1-stanislav.lisovskiy@intel.com> References: <20191212142415.26517-1-stanislav.lisovskiy@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v15 1/1] igt/tests: kms_plane_stress: Add plane stress 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: martin.peres@intel.com, juha-pekka.heikkila@intel.com List-ID: VGhpcyB0ZXN0IGF0dGVtcHRzIHRvIHV0aWxpemUgYWxsIGNvbm5lY3RlZApvdXRwdXRzIGF0IHRo ZSBzYW1lIHRpbWUsIHVzaW5nIG1heGltdW0gcG9zc2libGUKcmVzb2x1dGlvbiBhbmQgYW1vdW50 IG9mIHBsYW5lcywgdG8gY2hlY2sgd2hldGhlcgp3ZSBhcmUgaGl0aW5nIGFueSBraW5kIG9mIGJh bmR3aWR0aCwgd2F0ZXJtYXJrIG9yCm90aGVyIGxpbWl0YXRpb25zLgoKdjI6IEFkZGVkIGNwdSBh bmQgZ3B1IGxvYWQgdGhyZWFkcywgd2hpY2ggY29uc3VtZQogICAgYWRkaXRpb25hbCBiYW5kd2lk dGguCgp2MzogUmVtb3ZlZCBiaW5hcnkgcGljdHVyZSBmaWxlLCB1c2luZyBwYXR0ZXJuIGZiCiAg ICBpbnN0ZWFkLgoKdjQ6IE1vdmVkIEZCIGNyZWF0aW9uL3JlbW92YWwgdG8gYmV0dGVyIHBsYWNl LgoKdjU6IEZpeGVkIHJlYmFzZSBjb25mbGljdCBhbmQgY2hhbmdlZCAiZmItPnRpbGluZyIKICAg IHRvICJmYi0+bW9kaWZpZXIiLgoKdjY6IFJlbW92ZWQgdW5uZWNlc3NhcnkgbmV3IG1hY3JvIGZv ciBpdGVyYXRpbmcgb24KICAgIHBpcGVzLiBUYWtlbiBpbnRvIHVzZSBpZ3RfZ2V0dGltZSBpbnN0 ZWFkIG9mCiAgICBjbG9ja19nZXR0aW1lLgoKdjc6IFB1dCBmYiByZWluaXQgaW50byBpZ3RfZml4 dHVyZSB0byBhdm9pZCBwcm9ibGVtcy4KICAgIE1vdmUgc3RyZXNzIGZ1bmN0aW9uIHVuZGVyIGln dF9zdWJ0ZXN0LiBSZWxlYXNlIHBsYW5lcywKICAgIHJlbW92ZSByZWR1bmRhbnQgY29tbWl0LCBh c3NlcnQgaWYgbm8gcGxhbmVzIGNhbiBiZSB1c2VkLgoKdjg6IC0gQWRkIGJsaXR0aW5nIGFsc28s IHRvIGhhdmUgbW9yZSBmdW4KICAgIC0gTm93IHVzaW5nIHNlcGFyYXRlIGZyYW1lYnVmZmVyIHBl ciBlYWNoIHBsYW5lLgogICAgLSBGaXhlZCBtYWdpYyBudW1iZXIgZm9yIGJwcCB2YWx1ZShub3cg YmFzZWQgb24gZm9ybWF0KQogICAgLSBTb21lIG9wdGltaXphdGlvbnMsIGxpa2Ugbm90IGFwcGx5 aW5nIHNhbWUgbW9kZSBpZiBpdAogICAgICBoYXNuJ3QgY2hhbmdlLCBhbHNvIGRvbid0IGRvIGhp Z2hlc3QgbW9kZSBzZWFyY2ggb24KICAgICAgZWFjaCBpdGVyYXRpb24sIGp1c3QgY2FsY3VsYXRl IG9uY2UgYW5kIHVzZSBpdC4KICAgIC0gU29tZSBjb2RlIHJlZmFjdG9yaW5nOiBleHRyYWN0ZWQg c29tZSBsZW5ndGh5IGNvZGUKICAgICAgdG8gc2VwYXJhdGUgZnVuY3Rpb25zLgogICAgLSBGaXhl ZCB3cm9uZyBpbmRleCBmb3IgY3Vyc29yIEZCKGN1cnNvciBGQiBpcyBvbmUgcGVyIHBpcGUpCgp2 OToKICAgIC0gTW9yZSBoZWxwZXIgZnVuY3Rpb25zKHN0YXJ0L3N0b3AgdGhyZWFkcywgdGVzdCBp bml0KQogICAgLSBOb3cgZG9pbmcgR1BVIHdvcmsgaW4gcHRocmVhZHMgYWxzbwogICAgLSBEbyBH UFUgd29yayBpbiBhIHNlcGFyYXRlIGZyYW1lYnVmZmVyKG5vdCBkaXNwbGF5ZWQpCgp2MTA6CiAg ICAtIEZpeCBpc3N1ZSBpbiBtYWluIHRlc3RpbmcgY3ljbGUsIGNvZGUgcmVmYWN0b3JpbmcKICAg IC0gUmViYXNlZAoKdjExOgogICAgLSBGaXhlZCBpc3N1ZSB3aXRoIHN1c3BlbmRpbmcvcmVzdW1p bmcgR1BVIHRocmVhZHMKICAgICAgdG8gZ2V0IGNyYy4gQWRkZWQgbnVtX3JlY3RhbmdsZXMgdG8g YmUgYWJsZSB0byBjdXN0b21pemUKICAgICAgbnVtYmVyIG9mIGdwZ3B1X2ZpbGwgY2FsbHMuCgp2 MTI6CiAgICAtIFJlbW92ZWQgdW5uZWVkZWQgc2hhcmVkIGZiIGZ1bmN0aW9uYWxpdHkgYW5kIGdw dSB0aHJlYWQKICAgICAgcGF1c2UvcmVzdW1lLgogICAgLSBOb3cgYWxzbyB1c2luZyBkaWZmZXJl bnQgZm9ybWF0cyBmb3IgY3Vyc29yIGZiLgogICAgLSBSZW1vdmVkIHVubmVjZXNzYXJ5IHBhcmFt ZXRlcnMgZm9yIHN0cmVzcyBmdW5jdGlvbi4KICAgIC0gQ2hhbmdlZCBwbGFuZV9zdHJlc3MgZnVu Y3Rpb24gbmFtZSB0byBwaXBlX3N0cmVzcyhtYWtlcyBzZW5zZSkKICAgIC0gUHV0IGdwZ3B1X3dh bGsgeCBhbmQgeSBidWcgZml4IGludG8gc2VwYXJhdGUgcGF0Y2guCgp2MTM6CiAgICAtIEFkZGVk IHRlc3RzIGRvY3VtZW50YXRpb24uCgp2MTQ6CiAgICAtIFN0YXJ0IHVzaW5nIGlndF9nZXRfcGlw ZV9jcmNfY3VycmVudCBpbnN0ZWFkIGluIG9yZGVyCiAgICAgIHRvIGFuYWx5emUgY3JjIGluIGEg bW9yZSBlZmZpY2llbnQgd2F5LgogICAgLSBOb3cgY2hlY2tpbmcgZXZlcnkgZnJhbWUKICAgIC0g QWxzbyBub3cgdXNpbmcgZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dCBmb3IgaXRlcmF0aW5nCiAg ICAgIG9uIHBpcGVzLgoKdjE1OgogICAgLSBDb2RlIHJlZmFjdG9yaW5nLCBleHRyYWN0ZWQgZ3B1 IGZpbGwgaW50byBzZXBhcmF0ZSBmdW5jdGlvbi4KICAgIC0gUmVuYW1lZCBrbXNfcGxhbmVfc3Ry ZXNzIHRvIGk5MTVfcGlwZV9zdHJlc3MKICAgIC0gTW92ZWQgdG8gaTkxNSBzcGVjaWZpYyBmb2xk ZXIsIHdoZXJlIGl0IHNob3VsZCBiZQogICAgLSBGaXhlZCBNYWtlZmlsZS5zb3VyY2VzIGJ1aWxk IGZhaWx1cmUKCkNoYW5nZS1JZDogSTc5YWQ3NTY2ODU4MDFhYmRjODZlZGQ5YTgzYTAzODE2Mzk5 ZDRhOGQKU2lnbmVkLW9mZi1ieTogU3RhbmlzbGF2IExpc292c2tpeSA8c3RhbmlzbGF2Lmxpc292 c2tpeUBpbnRlbC5jb20+Ci0tLQogdGVzdHMvTWFrZWZpbGUuc291cmNlcyAgICAgICAgfCAgIDMg KwogdGVzdHMvaTkxNS9pOTE1X3BpcGVfc3RyZXNzLmMgfCA4ODggKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogdGVzdHMvbWVzb24uYnVpbGQgICAgICAgICAgICAgfCAgIDEgKwog MyBmaWxlcyBjaGFuZ2VkLCA4OTIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRl c3RzL2k5MTUvaTkxNV9waXBlX3N0cmVzcy5jCgpkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUu c291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggMjg5M2Y5YmMuLjE5NjVlNDU2 IDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL3Rlc3RzL01ha2VmaWxl LnNvdXJjZXMKQEAgLTUxNCw2ICs1MTQsOSBAQCBpOTE1X3BtX2xwc3BfU09VUkNFUyA9IGk5MTUv aTkxNV9wbV9scHNwLmMKIFRFU1RTX3Byb2dzICs9IGk5MTVfcG1fcmM2X3Jlc2lkZW5jeQogaTkx NV9wbV9yYzZfcmVzaWRlbmN5X1NPVVJDRVMgPSBpOTE1L2k5MTVfcG1fcmM2X3Jlc2lkZW5jeS5j CiAKK1RFU1RTX3Byb2dzICs9IGk5MTVfcGlwZV9zdHJlc3MKK2k5MTVfcG1fcnBtX1NPVVJDRVMg PSBpOTE1L2k5MTVfcGlwZV9zdHJlc3MuYworCiBURVNUU19wcm9ncyArPSBpOTE1X3BtX3JwbQog aTkxNV9wbV9ycG1fU09VUkNFUyA9IGk5MTUvaTkxNV9wbV9ycG0uYwogCmRpZmYgLS1naXQgYS90 ZXN0cy9pOTE1L2k5MTVfcGlwZV9zdHJlc3MuYyBiL3Rlc3RzL2k5MTUvaTkxNV9waXBlX3N0cmVz cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi42MjM2ZjU1MAotLS0gL2Rl di9udWxsCisrKyBiL3Rlc3RzL2k5MTUvaTkxNV9waXBlX3N0cmVzcy5jCkBAIC0wLDAgKzEsODg4 IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImln dC5oIgorI2luY2x1ZGUgImlndF9yYW5kLmgiCisjaW5jbHVkZSAiZ3BncHVfZmlsbC5oIgorI2lu Y2x1ZGUgImRybXRlc3QuaCIKKyNpbmNsdWRlICJzd19zeW5jLmgiCisjaW5jbHVkZSA8ZXJybm8u aD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUg PHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1 ZGUgPHBvbGwuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c2VtYXBob3JlLmg+ CisKKworSUdUX1RFU1RfREVTQ1JJUFRJT04oIlN0cmVzcyB0ZXN0IGhvdyBncHUgYW5kIGNwdSBi ZWhhdmVzIGlmIG1heGltdW0gYW1vdW50IG9mIHBsYW5lcywgIgorICAgICAgICAgICAgICAgICAg ICAgImNwdSBhbmQgZ3B1IHV0aWxpemF0aW9uIGlzIGFjaGlldmVkIGluIG9yZGVyIHRvIHJldmVh bCBwb3NzaWJsZSAiCisgICAgICAgICAgICAgICAgICAgICAiYmFuZHdpZHRoL3dhdGVybWFyayBh bmQgc2ltaWxhciBwcm9ibGVtcyAiKTsKKworI2lmbmRlZiBEUk1fQ0FQX0NVUlNPUl9XSURUSAor I2RlZmluZSBEUk1fQ0FQX0NVUlNPUl9XSURUSCAweDgKKyNlbmRpZgorI2lmbmRlZiBEUk1fQ0FQ X0NVUlNPUl9IRUlHSFQKKyNkZWZpbmUgRFJNX0NBUF9DVVJTT1JfSEVJR0hUIDB4OQorI2VuZGlm CisKKyNkZWZpbmUgTl9CTElUUyAzCisKKyNkZWZpbmUgTl9GT1JNQVRTIDEKK3N0YXRpYyBjb25z dCB1aW50MzJfdCBmb3JtYXRzW05fRk9STUFUU10gPSB7CisJRFJNX0ZPUk1BVF9YUkdCODg4OCwK KwkvKgorCSAqIFdpdGggdGhvc2UgZW5hYmxlZCB3aWxsIHRha2Ugc2lnbmlmaWNhbnRseSBtb3Jl IHRpbWUuCisJICogQWxzbyBtYWluIHRhc2sgb2YgdGhpcyB0ZXN0IGNhc2UgaXMgbm90IHRlc3Rp bmcgdmFyaW91cworCSAqIGZvcm1hdHMsIGJ1dCByYXRoZXIgc3RyZXNzIHRoZSBhY3R1YWwgbWVt b3J5L2RidWYgYmFuZHdpZHRoCisJICovCisvKgorCURSTV9GT1JNQVRfUkdCNTY1LAorCURSTV9G T1JNQVRfWFJHQjIxMDEwMTAsCisqLworfTsKKworI2RlZmluZSBOX1RJTElOR19NRVRIT0RTIDEK K3N0YXRpYyBjb25zdCB1aW50NjRfdCB0aWxpbmdzW05fVElMSU5HX01FVEhPRFNdID0geworCURS TV9GT1JNQVRfTU9EX0xJTkVBUiwKKwkvKgorCSAqIFdpdGggdGhvc2UgZW5hYmxlZCB3aWxsIHRh a2Ugc2lnbmlmaWNhbnRseSBtb3JlIHRpbWUuCisJICogQWxzbyBtYWluIHRhc2sgb2YgdGhpcyB0 ZXN0IGNhc2UgaXMgbm90IHRlc3RpbmcgdmFyaW91cworCSAqIGZvcm1hdHMsIGJ1dCByYXRoZXIg c3RyZXNzIHRoZSBhY3R1YWwgbWVtb3J5L2RidWYgYmFuZHdpZHRoCisJICovCisvKgorCUk5MTVf Rk9STUFUX01PRF9YX1RJTEVELAorCUk5MTVfRk9STUFUX01PRF9ZX1RJTEVELAorKi8KK307CisK K3N0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfc3RyKGludCBmb3JtYXRfaW5kZXgpCit7CisJc3dp dGNoIChmb3JtYXRzW2Zvcm1hdF9pbmRleF0pIHsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1Ogor CQlyZXR1cm4gInJnYjU2NSI7CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCQlyZXR1cm4g InhyZ2I4ODg4IjsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6CisJCXJldHVybiAieHJn YjIxMDEwMTAiOworCWRlZmF1bHQ6CisJCWlndF9hc3NlcnQoZmFsc2UpOworCX0KK30KKworc3Rh dGljIGNvbnN0IGNoYXIgKnRpbGluZ19zdHIoaW50IHRpbGluZ19pbmRleCkKK3sKKwlzd2l0Y2gg KHRpbGluZ3NbdGlsaW5nX2luZGV4XSkgeworCWNhc2UgRFJNX0ZPUk1BVF9NT0RfTElORUFSOgor CQlyZXR1cm4gInVudGlsZWQiOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ6CisJCXJl dHVybiAieHRpbGVkIjsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgorCQlyZXR1cm4g Inl0aWxlZCI7CisJZGVmYXVsdDoKKwkJaWd0X2Fzc2VydChmYWxzZSk7CisJfQorfQorCisKKyNk ZWZpbmUgTUFYX0NPUkVTIDgKKyNkZWZpbmUgTUFYX1BMQU5FUyAxNgorCitzdHJ1Y3QgZGF0YTsK Kworc3RydWN0IHRocmVhZF9jb250ZXh0IHsKKwlzdHJ1Y3QgZGF0YSAqZGF0YTsKKwlpbnQgaWQ7 CisJdm9pZCAqYnVmMTsKKwl2b2lkICpidWYyOworfTsKKworc3RydWN0IHJlY3QgeworCWludCB4 OworCWludCB5OworCWludCB3OworCWludCBoOworfTsKKworc3RydWN0IGdwdV9jb250ZXh0IHsK KwlzdHJ1Y3QgZGF0YSAqZGF0YTsKKwlpbnQgcGlwZTsKKwlpbnQgY29sb3I7CisJaW50IG51bV9y ZWN0YW5nbGVzOworCXN0cnVjdCBpZ3RfZmIgKmZiX3B0cjsKKwlzdHJ1Y3QgcmVjdCBibHRfcmVj dDsKKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoOworfTsKKworZW51bSB7CisJUlVO TklORywKKwlTVE9QUEVELAorCVBBVVNFRCwKKwlMQVNUX1NUQVRFID0gUEFVU0VECit9IHRocmVh ZF9zdGF0ZTsKKworc3RydWN0IGRhdGEgeworCWludCBkcm1fZmQ7CisJaWd0X2Rpc3BsYXlfdCBk aXNwbGF5OworCWludCBudW1fcGxhbmVzW0lHVF9NQVhfUElQRVNdOworCXVpbnQzMl90IGZvcm1h dDsKKwl1aW50NjRfdCBtb2RpZmllcjsKKwl1aW50MzJfdCBkZXZpZDsKKwlkcm1faW50ZWxfYnVm bWdyICpidWZtZ3I7CisJZHJtTW9kZU1vZGVJbmZvICpsYXN0X21vZGVbSUdUX01BWF9QSVBFU107 CisJc3RydWN0IGlndF9mYiBmYltJR1RfTUFYX1BJUEVTICogTUFYX1BMQU5FU107CisJc3RydWN0 IGlndF9mYiBjdXJzb3JfZmJbSUdUX01BWF9QSVBFU107CisJcHRocmVhZF90IGNwdV90aHJlYWRb TUFYX0NPUkVTXTsKKwlwdGhyZWFkX3QgZ3B1X3RocmVhZFtJR1RfTUFYX1BJUEVTXTsKKwlib29s IGNwdV90aHJlYWRfc3RvcFtNQVhfQ09SRVNdOworCWludCBncHVfdGhyZWFkX3N0YXRlW0lHVF9N QVhfUElQRVNdOworCXNlbV90IGdwdV90aHJlYWRfcGF1c2VfYWNrW0lHVF9NQVhfUElQRVNdOwor CXN0cnVjdCB0aHJlYWRfY29udGV4dCBjcHVfY29udGV4dFtNQVhfQ09SRVNdOworCXN0cnVjdCBn cHVfY29udGV4dCBncHVfY29udGV4dFtJR1RfTUFYX1BJUEVTXTsKKwlkcm1Nb2RlTW9kZUluZm8g KmhpZ2hlc3RfbW9kZVtJR1RfTUFYX1BJUEVTXTsKKwlkcm1Nb2RlQ29ubmVjdG9yUHRyICpjb25u ZWN0b3JzOworCWRybU1vZGVSZXMgKm1vZGVfcmVzb3VyY2VzOworCWludCBudW1iZXJfb2ZfY29y ZXM7CisJaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjW0lHVF9NQVhfUElQRVNdOworfTsKKworc3Rh dGljIHZvaWQgc3RvcF9ncHVfdGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSk7CitzdGF0aWMgdm9p ZCBzdGFydF9ncHVfdGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSk7CisKK3N0cnVjdCBiYXNlX2Ny YyB7CisJYm9vbCBzZXQ7CisJaWd0X2NyY190IGNyYzsKK307CisKKyNkZWZpbmUgQlVGX1NJWkUg MTI4KjEwMjQqMTAyNAorCitzdGF0aWMgdm9pZCAqY3B1X2xvYWQodm9pZCAqZCkKK3sKKwljaGFy ICpidWYxLCAqYnVmMjsKKwlzdHJ1Y3QgdGhyZWFkX2NvbnRleHQgKmNvbnRleHQgPSAoc3RydWN0 IHRocmVhZF9jb250ZXh0ICopZDsKKwlzdHJ1Y3QgZGF0YSAqZGF0YSA9IGNvbnRleHQtPmRhdGE7 CisKKwlidWYxID0gY29udGV4dC0+YnVmMTsKKwlidWYyID0gY29udGV4dC0+YnVmMjsKKworCWRh dGEtPmNwdV90aHJlYWRfc3RvcFtjb250ZXh0LT5pZF0gPSBmYWxzZTsKKworCWlndF9pbmZvKCJD UFUgdGhyZWFkIGNwdSBpZCAlZCBzdGFydFxuIiwgY29udGV4dC0+aWQpOworCisJLyogSnVzdCB0 byBtYWtlIENQVSBidXN5Li4uICovCisJd2hpbGUoIWRhdGEtPmNwdV90aHJlYWRfc3RvcFtjb250 ZXh0LT5pZF0pIHsKKwkJbWVtY3B5KGJ1ZjEsIGJ1ZjIsIEJVRl9TSVpFKTsKKwkJbWVtY3B5KGJ1 ZjIsIGJ1ZjEsIEJVRl9TSVpFKTsKKwl9CisKKwlpZ3RfaW5mbygiQ1BVIHRocmVhZCBjcHUgaWQg JWQgc3RvcFxuIiwgY29udGV4dC0+aWQpOworCisJcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGlj IHZvaWQgc2NyYXRjaF9idWZfaW5pdChzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAorCQkJICAgICBkcm1f aW50ZWxfYm8gKmJvLCBpbnQgd2lkdGgsCisJCQkgICAgIGludCBoZWlnaHQsIGludCBzdHJpZGUs IGludCB0aWxpbmcsIGludCBicHApCit7CisJYnVmLT5ibyA9IGJvOworCWJ1Zi0+c3RyaWRlID0g c3RyaWRlOworCWJ1Zi0+dGlsaW5nID0gdGlsaW5nOworCWJ1Zi0+c2l6ZSA9IHdpZHRoICogaGVp Z2h0ICogYnBwIC8gODsKKwlidWYtPmJwcCA9IGJwcDsKK30KKworc3RhdGljIHZvaWQgZmlsbF9n cHUoc3RydWN0IGdwdV9jb250ZXh0ICpjb250ZXh0LCBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0 LAorCQkgICAgIHVuc2lnbmVkIGludCB4LCB1bnNpZ25lZCBpbnQgeSwKKwkJICAgICB1bnNpZ25l ZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCisJCSAgICAgdWludDhfdCBjb2xvcikK K3sKKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoID0gTlVMTDsKKwlpZ3RfZmlsbGZ1 bmNfdCBncGdwdV9maWxsID0gTlVMTDsKKwlzdHJ1Y3QgZGF0YSAqZGF0YSA9IGNvbnRleHQtPmRh dGE7CisKKwlncGdwdV9maWxsID0gaWd0X2dldF9ncGdwdV9maWxsZnVuYyhkYXRhLT5kZXZpZCk7 CisKKwlpZ3RfcmVxdWlyZV9mKGdwZ3B1X2ZpbGwsCisJICAgICAgICAgICAgICAibm8gZ3BncHUt ZmlsbCBmdW5jdGlvblxuIik7CisKKwliYXRjaCA9IGNvbnRleHQtPmJhdGNoOworCisJZ3BncHVf ZmlsbChiYXRjaCwgZHN0LCB4LCB5LAorCQkgICB3aWR0aCwKKwkJICAgaGVpZ2h0LAorCQkgICBj b2xvcik7Cit9CisKKworc3RhdGljIHZvaWQgKmdwdV9sb2FkKHZvaWQgKnB0cikKK3sKKwlzdHJ1 Y3QgZ3B1X2NvbnRleHQgKmNvbnRleHQgPSAoc3RydWN0IGdwdV9jb250ZXh0ICopcHRyOworCXN0 cnVjdCBpZ3RfYnVmIGRzdDsKKwlzdHJ1Y3QgZGF0YSAqZGF0YSA9IGNvbnRleHQtPmRhdGE7CisJ aW50IHBpcGUgPSBjb250ZXh0LT5waXBlOworCWRybV9pbnRlbF9ibyAqYm8gPSBOVUxMOworCXN0 cnVjdCBpZ3RfZmIgZmIsICpmYl9wdHIgPSBOVUxMLCAqbGFzdF9mYl9wdHIgPSBOVUxMOworCWlu dCByZWN0X2Rpdmlzb3I7CisJaW50IHJlY3Rfd2lkdGg7CisJaW50IHJlY3RfaGVpZ2h0OworCWlu dCBmcmFtZV93aWR0aDsKKwlpbnQgZnJhbWVfaGVpZ2h0OworCWludCBieXRlc19wZXJfcGl4ZWw7 CisJZHJtTW9kZU1vZGVJbmZvICptb2RlOworCWludCBmcmFtZSA9IDA7CisJaW50IHgsIHk7CisJ aW50IGxhc3Rfc3RhdGUgPSAtMTsKKwlpbnQgcmVjdDsKKworCW1vZGUgPSBkYXRhLT5oaWdoZXN0 X21vZGVbcGlwZV07CisJaWYgKCFtb2RlKQorCQlyZXR1cm4gTlVMTDsKKworCWlndF9jcmVhdGVf Y29sb3JfcGF0dGVybl9mYihkYXRhLT5kcm1fZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlz cGxheSwKKwkJCQkgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwkJCQkgICAgRFJNX0ZPUk1BVF9N T0RfTElORUFSLAorCQkJCSAgICAwLjAsIDEuMCwgMC4wLCAmZmIpOworCisJaWd0X2luZm8oIkdQ VSB0aHJlYWQgcGlwZSAlZCBzdGFydFxuIiwgcGlwZSk7CisJd2hpbGUgKGRhdGEtPmdwdV90aHJl YWRfc3RhdGVbcGlwZV0gIT0gU1RPUFBFRCkgeworCQlpZiAobGFzdF9zdGF0ZSAhPSBkYXRhLT5n cHVfdGhyZWFkX3N0YXRlW3BpcGVdKSB7CisJCQlsYXN0X3N0YXRlID0gZGF0YS0+Z3B1X3RocmVh ZF9zdGF0ZVtwaXBlXTsKKwkJCXNlbV9wb3N0KCZkYXRhLT5ncHVfdGhyZWFkX3BhdXNlX2Fja1tw aXBlXSk7CisJCX0KKwkJaWYgKGRhdGEtPmdwdV90aHJlYWRfc3RhdGVbcGlwZV0gPT0gUEFVU0VE KSB7CisJCQlzbGVlcCgwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFjb250ZXh0LT5m Yl9wdHIpIHsKKwkJCWZiX3B0ciA9ICZmYjsKKwkJfSBlbHNlIHsKKwkJCWZiX3B0ciA9IGNvbnRl eHQtPmZiX3B0cjsKKwkJfQorCisJCWlmIChsYXN0X2ZiX3B0ciAhPSBmYl9wdHIpIHsKKwkJCWZy YW1lX3dpZHRoID0gZmJfcHRyLT53aWR0aDsKKwkJCWZyYW1lX2hlaWdodCA9IGZiX3B0ci0+aGVp Z2h0OworCQkJYnl0ZXNfcGVyX3BpeGVsID0gZmJfcHRyLT5wbGFuZV9icHBbMF0gLyA4OworCQkJ Ym8gPSBnZW1faGFuZGxlX3RvX2xpYmRybV9ibyhkYXRhLT5idWZtZ3IsIGRhdGEtPmRybV9mZCwg IiIsCisJCQkJCQkgICAgIGZiX3B0ci0+Z2VtX2hhbmRsZSk7CisJCQlpZ3RfYXNzZXJ0KGJvKTsK KworCQkJc2NyYXRjaF9idWZfaW5pdCgmZHN0LCBibywgZnJhbWVfd2lkdGgsIGZyYW1lX2hlaWdo dCwKKwkJCQkJIGZiX3B0ci0+c3RyaWRlc1swXSwgZmJfcHRyLT5tb2RpZmllciwKKwkJCQkJIGZi X3B0ci0+cGxhbmVfYnBwWzBdKTsKKwkJfQorCQlsYXN0X2ZiX3B0ciA9IGZiX3B0cjsKKworCQkv KiBGaWxsIHRoZSBmcmFtZWJ1ZmZlciB1c2luZyBzaGFkZXIgKi8KKwkJeCA9IDA7CisJCXkgPSBm cmFtZV9oZWlnaHQgLyA0OworCisJCWZpbGxfZ3B1KGNvbnRleHQsICZkc3QsIHgsIHksIChmcmFt ZV93aWR0aCAqIGJ5dGVzX3Blcl9waXhlbCksCisJCQkgZnJhbWVfaGVpZ2h0IC8gMiwKKwkJCSBj b250ZXh0LT5jb2xvcik7CisKKwkJcmVjdCA9IDA7CisKKwkJd2hpbGUgKHJlY3QgPCBjb250ZXh0 LT5udW1fcmVjdGFuZ2xlcykgeworCQkJLyogZGl2aWRlIGF0IGxlYXN0IGJ5IDIgYW5kIHVwIHRv IDggKi8KKwkJCWludCB4X3JhbmQsIHlfcmFuZDsKKwkJCXJlY3RfZGl2aXNvciA9IDEgPDwgKGhh cnNfcGV0cnVza2FfZjU0XzFfcmFuZG9tX3Vuc2FmZV9tYXgoMykgKyAxKTsKKworCQkJcmVjdF93 aWR0aCA9IGZyYW1lX3dpZHRoIC8gcmVjdF9kaXZpc29yOworCQkJcmVjdF9oZWlnaHQgPSBmcmFt ZV9oZWlnaHQgLyByZWN0X2Rpdmlzb3I7CisKKwkJCXhfcmFuZCA9IGhhcnNfcGV0cnVza2FfZjU0 XzFfcmFuZG9tX3Vuc2FmZV9tYXgoZnJhbWVfd2lkdGggLSByZWN0X3dpZHRoKTsKKwkJCXlfcmFu ZCA9IGhhcnNfcGV0cnVza2FfZjU0XzFfcmFuZG9tX3Vuc2FmZV9tYXgoZnJhbWVfaGVpZ2h0LzIg LSByZWN0X2hlaWdodCk7CisKKwkJCWNvbnRleHQtPmJsdF9yZWN0LnggPSB4ICsgeF9yYW5kOwor CQkJY29udGV4dC0+Ymx0X3JlY3QueSA9IHkgKyB5X3JhbmQ7CisKKwkJCS8qIEZpbGwgcmFuZG9t bHkgc2l6ZWQgYW5kIHBvc2l0aW9uZWQgcmVjdGFuZ2xlcyAqLworCQkJZmlsbF9ncHUoY29udGV4 dCwgJmRzdCwgY29udGV4dC0+Ymx0X3JlY3QueCwgY29udGV4dC0+Ymx0X3JlY3QueSwKKwkJCQkg KChjb250ZXh0LT5ibHRfcmVjdC54ICsgcmVjdF93aWR0aCkgKiBieXRlc19wZXJfcGl4ZWwpLAor CQkJCSBjb250ZXh0LT5ibHRfcmVjdC55ICsgcmVjdF9oZWlnaHQsCisJCQkJIGNvbnRleHQtPmNv bG9yICsgMHg4MCk7CisKKwkJCWNvbnRleHQtPmNvbG9yICs9IDQ7CisJCQlnZW1fYm9fYnVzeShk YXRhLT5kcm1fZmQsIGZiX3B0ci0+Z2VtX2hhbmRsZSk7CisKKwkJCSsrcmVjdDsKKwkJfQorCQlm cmFtZSsrOworCX0KKworCWRybV9pbnRlbF9ib191bm1hcChibyk7CisJZHJtX2ludGVsX2JvX3Vu cmVmZXJlbmNlKGJvKTsKKworCWlndF9yZW1vdmVfZmIoZGF0YS0+ZGlzcGxheS5kcm1fZmQsICZm Yik7CisKKwlpZ3RfaW5mbygiR1BVIHRocmVhZCBwaXBlICVkIHN0b3AuIEZyYW1lcyByZW5kZXJl ZDogJWRcbiIsIHBpcGUsIGZyYW1lKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5s aW5lIHVpbnQzMl90IHBpcGVfc2VsZWN0KGVudW0gcGlwZSBwaXBlKQoreworCWlmIChwaXBlID4g MSkKKwkJcmV0dXJuIHBpcGUgPDwgRFJNX1ZCTEFOS19ISUdIX0NSVENfU0hJRlQ7CisJZWxzZSBp ZiAocGlwZSA+IDApCisJCXJldHVybiBEUk1fVkJMQU5LX1NFQ09OREFSWTsKKwllbHNlCisJCXJl dHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgZ2V0X3ZibGFuayhpbnQgZmQsIGVudW0gcGlw ZSBwaXBlLCB1bnNpZ25lZCBmbGFncykKK3sKKwl1bmlvbiBkcm1fd2FpdF92YmxhbmsgdmJsOwor CisJbWVtc2V0KCZ2YmwsIDAsIHNpemVvZih2YmwpKTsKKwl2YmwucmVxdWVzdC50eXBlID0gRFJN X1ZCTEFOS19SRUxBVElWRSB8IHBpcGVfc2VsZWN0KHBpcGUpIHwgZmxhZ3M7CisJaWYgKGRybUlv Y3RsKGZkLCBEUk1fSU9DVExfV0FJVF9WQkxBTkssICZ2YmwpKQorCQlyZXR1cm4gMDsKKworCXJl dHVybiB2YmwucmVwbHkuc2VxdWVuY2U7Cit9CisKKworc3RhdGljIGludCBwaXBlX3N0cmVzcyhz dHJ1Y3QgZGF0YSAqZGF0YSwgaWd0X291dHB1dF90ICpvdXRwdXQsCisJCSAgICAgICBlbnVtIHBp cGUgcGlwZSwgZHJtTW9kZU1vZGVJbmZvICptb2RlKQoreworCWlndF9wbGFuZV90ICpwbGFuZTsK KwlpbnQgaTsKKwlpbnQgcmV0OworCWJvb2wgbmV3X21vZGUgPSBmYWxzZTsKKwl1aW50NjRfdCBj dXJzb3Jfd2lkdGgsIGN1cnNvcl9oZWlnaHQ7CisKKwlkb19vcl9kaWUoZHJtR2V0Q2FwKGRhdGEt PmRybV9mZCwgRFJNX0NBUF9DVVJTT1JfV0lEVEgsICZjdXJzb3Jfd2lkdGgpKTsKKwlkb19vcl9k aWUoZHJtR2V0Q2FwKGRhdGEtPmRybV9mZCwgRFJNX0NBUF9DVVJTT1JfSEVJR0hULCAmY3Vyc29y X2hlaWdodCkpOworCisJaWYgKGRhdGEtPmxhc3RfbW9kZVtwaXBlXSAhPSBtb2RlKSB7CisJCWln dF9vdXRwdXRfb3ZlcnJpZGVfbW9kZShvdXRwdXQsIG1vZGUpOworCQlpZ3Rfb3V0cHV0X3NldF9w aXBlKG91dHB1dCwgcGlwZSk7CisKKwkJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdF9hdG9t aWMoJmRhdGEtPmRpc3BsYXksCisJCQkJCQkgICAgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSB8 CisJCQkJCQkgICAgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIE5VTEwpOworCQlpZiAo cmV0KSB7CisJCQlpZ3Rfd2FybigiQ291bGQgbm90IGNvbW1pdCBtb2RlOiBcbiIpOworCQkJa21z dGVzdF9kdW1wX21vZGUobW9kZSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJaWd0X2Rpc3Bs YXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJCWRhdGEtPmxhc3Rf bW9kZVtwaXBlXSA9IG1vZGU7CisJCW5ld19tb2RlID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIExv b2tzIGxpa2Ugd2UgY2FuJ3QgaGF2ZSBwbGFuZXMgb24gdGhhdCBwaXBlIGF0IGFsbAorCSAqLwor CWlmICghZGF0YS0+bnVtX3BsYW5lc1twaXBlXSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIW1vZGUp CisJCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCk7CisKKwlpZiAobmV3X21vZGUp IHsKKwkJaSA9IDA7CisJCWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoJmRhdGEtPmRpc3BsYXksIHBp cGUsIHBsYW5lKSB7CisJCQlpbnQgcGxhbmVfd2lkdGgsIHBsYW5lX2hlaWdodDsKKwkJCWlmIChw bGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpIHsKKwkJCQlpZ3RfcGxhbmVfc2V0 X2ZiKHBsYW5lLCAmZGF0YS0+Y3Vyc29yX2ZiW3BpcGVdKTsKKworCQkJCWlndF9mYl9zZXRfc2l6 ZSgmZGF0YS0+Y3Vyc29yX2ZiW3BpcGVdLAorCQkJCQkJcGxhbmUsIGN1cnNvcl93aWR0aCwgY3Vy c29yX2hlaWdodCk7CisKKwkJCQlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIGN1cnNvcl93aWR0 aCwgY3Vyc29yX2hlaWdodCk7CisJCQkJcGxhbmVfd2lkdGggPSBjdXJzb3Jfd2lkdGg7CisJCQkJ cGxhbmVfaGVpZ2h0ID0gY3Vyc29yX2hlaWdodDsKKwkJCX0gZWxzZSB7CisJCQkJaWd0X3BsYW5l X3NldF9mYihwbGFuZSwgJmRhdGEtPmZiW3BpcGUgKiBNQVhfUExBTkVTICsgaV0pOworCQkJCWln dF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDAsIDApOworCisJCQkJaWd0X2ZiX3NldF9zaXpl KCZkYXRhLT5mYltwaXBlICogTUFYX1BMQU5FUyArIGldLAorCQkJCQkJcGxhbmUsIG1vZGUtPmhk aXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7CisKKwkJCQlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUs IG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7CisJCQkJcGxhbmVfd2lkdGggPSBtb2Rl LT5oZGlzcGxheTsKKwkJCQlwbGFuZV9oZWlnaHQgPSBtb2RlLT52ZGlzcGxheTsKKwkJCX0KKwor CQkJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdF9hdG9taWMoJmRhdGEtPmRpc3BsYXksCisJ CQkJCQkJICAgIERSTV9NT0RFX0FUT01JQ19URVNUX09OTFkgfAorCQkJCQkJCSAgICBEUk1fTU9E RV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwKKwkJCQkJCQkgICAgTlVMTCk7CisKKwkJCXdoaWxlIChy ZXQpIHsKKwkJCQlpZiAocGxhbmVfd2lkdGggPD0gY3Vyc29yX3dpZHRoIHx8IHBsYW5lX2hlaWdo dCA8PSBjdXJzb3JfaGVpZ2h0KQorCQkJCQlicmVhazsKKwkJCQlwbGFuZV93aWR0aCAvPSAyOwor CQkJCXBsYW5lX2hlaWdodCAvPSAyOworCQkJCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgcGxh bmVfd2lkdGgsIHBsYW5lX2hlaWdodCk7CisKKwkJCQlpZ3RfaW5mbygiUmVkdWNlZCBwbGFuZSAl ZCBzaXplIHRvICVkeCVkXG4iLAorCQkJCSAgICAgICAgIHBsYW5lLT5pbmRleCwgcGxhbmVfd2lk dGgsIHBsYW5lX2hlaWdodCk7CisKKwkJCQlyZXQgPSBpZ3RfZGlzcGxheV90cnlfY29tbWl0X2F0 b21pYygmZGF0YS0+ZGlzcGxheSwKKwkJCQkJCQkJICAgIERSTV9NT0RFX0FUT01JQ19URVNUX09O TFkgfAorCQkJCQkJCQkgICAgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIE5VTEwpOwor CQkJfQorCQkJaWYgKHJldCkgeworCQkJCWlndF9pbmZvKCJQbGFuZSAlZCBwaXBlICVkIHRyeSBj b21taXQgZmFpbGVkLCBleGl0aW5nXG4iLCBpLCBwaXBlKTsKKwkJCQlkYXRhLT5udW1fcGxhbmVz W3BpcGVdID0gaTsKKwkJCQlpZ3RfaW5mbygiTWF4IG51bSBwbGFuZXMgZm9yIHBpcGUgJWQgc2V0 IHRvICVkXG4iLCBwaXBlLCBpKTsKKwkJCQkvKgorCQkJCSAqIFdlIGhhdmUgbm93IGRldGVybWlu ZWQgbWF4IGFtb3VudCBvZiBmdWxsIHNpemVkIHBsYW5lcywgd2Ugd2lsbCBqdXN0CisJCQkJICog a2VlcCBpdCBpbiBtaW5kIGFuZCBiZSBzbWFydGVyIG5leHQgdGltZS4gQWxzbyBsZXRzIHJlbW92 ZSB1bm5lZWRlZCBmYnMuCisJCQkJICogRG9uJ3QgZGVzdHJveSBjdXJzb3JfZmIgYXMgd2lsbCB0 YWtlIGNhcmUgYWJvdXQgaXQgYXQgdGhlIGVuZC4KKwkJCQkgKi8KKwkJCQlpZ3RfcGxhbmVfc2V0 X2ZiKHBsYW5lLCBOVUxMKTsKKwkJCQl3aGlsZSAoaSA8IE1BWF9QTEFORVMpIHsKKwkJCQkJaWd0 X3JlbW92ZV9mYihkYXRhLT5kaXNwbGF5LmRybV9mZCwKKwkJCQkJCSAgICAgICZkYXRhLT5mYltw aXBlICogTUFYX1BMQU5FUyArIGldKTsKKwkJCQkJZGF0YS0+ZmJbcGlwZSAqIE1BWF9QTEFORVMg KyBpXS5mYl9pZCA9IDA7CisJCQkJCWkrKzsKKwkJCQl9CisJCQkJaSA9IGRhdGEtPm51bV9wbGFu ZXNbcGlwZV07CisJCQl9CisJCQlpZiAoKytpID49IGRhdGEtPm51bV9wbGFuZXNbcGlwZV0pCisJ CQkJYnJlYWs7CisJCX0KKwkJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgQ09N TUlUX0FUT01JQyk7CisJfQorCisKKworCXJldHVybiAwOworfQorCitzdGF0aWMgX191NjQgZ2V0 X21vZGVfZGF0YV9yYXRlKGRybU1vZGVNb2RlSW5mbyAqbW9kZSkKK3sKKwlfX3U2NCBkYXRhX3Jh dGUgPSAoX191NjQpbW9kZS0+aGRpc3BsYXkgKiAoX191NjQpbW9kZS0+dmRpc3BsYXkgKiAoX191 NjQpbW9kZS0+dnJlZnJlc2g7CisKKwlyZXR1cm4gZGF0YV9yYXRlOworfQorCisKK3N0YXRpYyBk cm1Nb2RlTW9kZUluZm8gKiBmaW5kX2hpZ2hlc3RfbW9kZShkcm1Nb2RlQ29ubmVjdG9yICpjb25u ZWN0b3IpCit7CisJZHJtTW9kZU1vZGVJbmZvICpoaWdoZXN0X21vZGUgPSBOVUxMOworCWludCBq OworCisJZm9yIChqID0gMDsgaiA8IGNvbm5lY3Rvci0+Y291bnRfbW9kZXM7IGorKykgeworCQlp ZiAoIWhpZ2hlc3RfbW9kZSkgeworCQkJaGlnaGVzdF9tb2RlID0gJmNvbm5lY3Rvci0+bW9kZXNb al07CisJCX0gZWxzZSBpZiAoY29ubmVjdG9yLT5tb2Rlc1tqXS52ZGlzcGxheSAmJiBjb25uZWN0 b3ItPm1vZGVzW2pdLmhkaXNwbGF5KSB7CisJCQlfX3U2NCBoaWdoZXN0X2RhdGFfcmF0ZSA9IGdl dF9tb2RlX2RhdGFfcmF0ZShoaWdoZXN0X21vZGUpOworCQkJX191NjQgZGF0YV9yYXRlID0gZ2V0 X21vZGVfZGF0YV9yYXRlKCZjb25uZWN0b3ItPm1vZGVzW2pdKTsKKwkJCWlmIChoaWdoZXN0X2Rh dGFfcmF0ZSA8IGRhdGFfcmF0ZSkKKwkJCQloaWdoZXN0X21vZGUgPSAmY29ubmVjdG9yLT5tb2Rl c1tqXTsKKwkJfQorCX0KKworCXJldHVybiBoaWdoZXN0X21vZGU7Cit9CisKK3R5cGVkZWYgZHJt TW9kZUNvbm5lY3RvciAqIGRybU1vZGVDb25uZWN0b3JQdHI7CisKK3N0YXRpYyB2b2lkIGZpbGxf Y29ubmVjdG9yX3RvX3BpcGVfYXJyYXkoc3RydWN0IGRhdGEgKmRhdGEsCisJCQkJCSBkcm1Nb2Rl UmVzICptb2RlX3Jlc291cmNlcywKKwkJCQkJIGRybU1vZGVDb25uZWN0b3JQdHIgKmNvbm5lY3Rv cnMpCit7CisJaW50IHBpcGUgPSAwOworCWludCBpOworCisJbWVtc2V0KGNvbm5lY3RvcnMsIDAs IHNpemVvZihkcm1Nb2RlQ29ubmVjdG9yUHRyKSAqCisJICAgICAgIG1vZGVfcmVzb3VyY2VzLT5j b3VudF9jb25uZWN0b3JzKTsKKworCWlndF9pbmZvKCJHb3QgJWQgY29ubmVjdG9yc1xuIiwgbW9k ZV9yZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3RvcnMpOworCisJZm9yIChpID0gMDsgaSA8IG1vZGVf cmVzb3VyY2VzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspIHsKKwkJZHJtTW9kZUNvbm5lY3RvciAq Y29ubmVjdG9yOworCisJCWNvbm5lY3RvciA9IGRybU1vZGVHZXRDb25uZWN0b3IoZGF0YS0+ZHJt X2ZkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfcmVzb3VyY2VzLT5j b25uZWN0b3JzW2ldKTsKKworCQlpZiAoIWNvbm5lY3RvcikgeworCQkJaWd0X3dhcm4oImNvdWxk IG5vdCBnZXQgY29ubmVjdG9yICVpOiAlc1xuIiwKKwkJCSAgICAgICAgIG1vZGVfcmVzb3VyY2Vz LT5jb25uZWN0b3JzW2ldLCBzdHJlcnJvcihlcnJubykpOworCQkJY29udGludWU7CisJCX0KKwor CQlpZiAoY29ubmVjdG9yLT5jb25uZWN0aW9uID09IERSTV9NT0RFX0NPTk5FQ1RFRCkgeworCQkJ aWd0X2luZm8oIkNvbm5lY3RvciAlZCBjb25uZWN0ZWQgdG8gcGlwZSAlZFxuIiwgaSwgcGlwZSk7 CisJCQljb25uZWN0b3JzW3BpcGVdID0gKGRybU1vZGVDb25uZWN0b3JQdHIpY29ubmVjdG9yOwor CQkJKytwaXBlOworCQkJaWYgKHBpcGUgPT0gSUdUX01BWF9QSVBFUykKKwkJCQlicmVhazsKKwkJ fSBlbHNlIHsKKwkJCWlndF9pbmZvKCJDb25uZWN0b3IgJWQgY29ubmVjdGlvbiBzdGF0dXMgJWRc biIsCisJCQkgICAgICAgICBpLCBjb25uZWN0b3ItPmNvbm5lY3Rpb24pOworCQkJZHJtTW9kZUZy ZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcmVsZWFz ZV9jb25uZWN0b3JzKGRybU1vZGVDb25uZWN0b3JQdHIgKmNvbm5lY3RvcnMpCit7CisJaW50IGk7 CisJZm9yIChpID0gMDsgaSA8IElHVF9NQVhfUElQRVM7IGkrKykgeworCQlpZiAoY29ubmVjdG9y c1tpXSkKKwkJCWRybU1vZGVGcmVlQ29ubmVjdG9yKGNvbm5lY3RvcnNbaV0pOworCX0KKwlmcmVl KGNvbm5lY3RvcnMpOworfQorCisjZGVmaW5lIE1JTl9EVVJBVElPTl9TRUMgMzAKKyNkZWZpbmUg TUlOX0lURVJBVElPTlMgMjAKKworc3RhdGljIHZvaWQgc3RyZXNzX3BpcGVzKHN0cnVjdCBkYXRh ICpkYXRhLCBzdHJ1Y3QgdGltZXNwZWMgKnN0YXJ0LAorCQkJIHN0cnVjdCB0aW1lc3BlYyAqZW5k KQoreworCWludCBwaXBlID0gMDsKKwlpbnQgcmV0ID0gMDsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1 dDsKKwlpZ3RfY3JjX3QgY3JjLCBjcmMyOworCisJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dCgm ZGF0YS0+ZGlzcGxheSwgb3V0cHV0KSB7CisKKwkJaWYgKCFkYXRhLT5oaWdoZXN0X21vZGVbcGlw ZV0pCisJCQljb250aW51ZTsKKworCQlpZ3RfYXNzZXJ0X2YoZGF0YS0+ZGlzcGxheS5waXBlc1tw aXBlXS5uX3BsYW5lcyA8IE1BWF9QTEFORVMsCisJCQkgICAgIkN1cnJlbnRseSB3ZSBkb24ndCBz dXBwb3J0IG1vcmUgdGhhbiAlZCBwbGFuZXMhIiwKKwkJCSAgICAgTUFYX1BMQU5FUyk7CisKKwkJ cmV0ID0gcGlwZV9zdHJlc3MoZGF0YSwgb3V0cHV0LCBwaXBlLAorCQkJCSBkYXRhLT5oaWdoZXN0 X21vZGVbcGlwZV0pOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisKKwkJaWd0X3BpcGVfY3JjX3N0 YXJ0KGRhdGEtPnBpcGVfY3JjW3BpcGVdKTsKKworCQlpZ3RfcGlwZV9jcmNfZ2V0X2N1cnJlbnQo ZGF0YS0+ZGlzcGxheS5kcm1fZmQsIGRhdGEtPnBpcGVfY3JjW3BpcGVdLCAmY3JjKTsKKworCQln ZXRfdmJsYW5rKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCBwaXBlLAorCQkJICAgRFJNX1ZCTEFOS19O RVhUT05NSVNTKTsKKworCQlpZ3RfcGlwZV9jcmNfZ2V0X2N1cnJlbnQoZGF0YS0+ZGlzcGxheS5k cm1fZmQsIGRhdGEtPnBpcGVfY3JjW3BpcGVdLCAmY3JjMik7CisKKwkJaWd0X3BpcGVfY3JjX3N0 b3AoZGF0YS0+cGlwZV9jcmNbcGlwZV0pOworCisJCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZjcmMs ICZjcmMyKTsKKworCQkrK3BpcGU7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdHJlc3Moc3RydWN0 IGRhdGEgKmRhdGEpCit7CisJc3RydWN0IHRpbWVzcGVjIHN0YXJ0LCBlbmQ7CisJaW50IGl0ZXJh dGlvbnMgPSAwOworCWJvb2wgbmVlZF9jb250aW51ZTsKKworCWlndF9nZXR0aW1lKCZzdGFydCk7 CisKKwlkbyB7CisJCWlndF9nZXR0aW1lKCZlbmQpOworCQlzdHJlc3NfcGlwZXMoZGF0YSwgJnN0 YXJ0LCAmZW5kKTsKKwkJaXRlcmF0aW9ucysrOworCQluZWVkX2NvbnRpbnVlID0KKwkJCShpbnQp aWd0X3RpbWVfZWxhcHNlZCgmc3RhcnQsICZlbmQpIDwgTUlOX0RVUkFUSU9OX1NFQzsKKwl9IHdo aWxlICgobmVlZF9jb250aW51ZSB8fCBpdGVyYXRpb25zIDwgTUlOX0lURVJBVElPTlMpKTsKKwor Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X2dwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRhKQor eworCWludCBpOworCisJaWYgKCFkYXRhLT5kZXZpZCkgeworCQlkYXRhLT5kZXZpZCA9IGludGVs X2dldF9kcm1fZGV2aWQoZGF0YS0+ZHJtX2ZkKTsKKwkJaWd0X3JlcXVpcmVfZ2VtKGRhdGEtPmRy bV9mZCk7CisKKwkJZGF0YS0+YnVmbWdyID0gZHJtX2ludGVsX2J1Zm1ncl9nZW1faW5pdChkYXRh LT5kcm1fZmQsIDQwOTYpOworCQlpZ3RfYXNzZXJ0KGRhdGEtPmJ1Zm1ncik7CisJfQorCisJZm9y IChpID0gMDsgaSA8IElHVF9NQVhfUElQRVM7IGkrKykgeworCQlpZiAoIWRhdGEtPmhpZ2hlc3Rf bW9kZVtpXSkKKwkJCWNvbnRpbnVlOworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5kYXRhID0gZGF0 YTsKKwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0ucGlwZSA9IGk7CisJCWRhdGEtPmdwdV9jb250ZXh0 W2ldLmZiX3B0ciA9IE5VTEw7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmJsdF9yZWN0LnggPSAw OworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5ibHRfcmVjdC55ID0gMDsKKwkJZGF0YS0+Z3B1X2Nv bnRleHRbaV0uYmx0X3JlY3QudyA9IDA7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmJsdF9yZWN0 LmggPSAwOworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5udW1fcmVjdGFuZ2xlcyA9IE5fQkxJVFM7 CisJCWRhdGEtPmdwdV90aHJlYWRfc3RhdGVbaV0gPSBSVU5OSU5HOworCQlpZ3RfaW5mbygiU3Rh cnRpbmcgR1BVIHRocmVhZCAlZFxuIiwgaSk7CisKKwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0uYmF0 Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhkYXRhLT5idWZtZ3IsCisJCQkJCQkJCSAgICAg ZGF0YS0+ZGV2aWQpOworCisJCXB0aHJlYWRfY3JlYXRlKCZkYXRhLT5ncHVfdGhyZWFkW2ldLCBO VUxMLCBncHVfbG9hZCwKKwkJCSAgICAgICAodm9pZCopJmRhdGEtPmdwdV9jb250ZXh0W2ldKTsK KworCQlzZW1fd2FpdCgmZGF0YS0+Z3B1X3RocmVhZF9wYXVzZV9hY2tbaV0pOworCQlpZ3RfaW5m bygiR1BVIHRocmVhZCAlZCBzdGFydGVkXG4iLCBpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0 b3BfZ3B1X3RocmVhZHMoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJaW50IGk7CisKKwlmb3IgKGkg PSAwOyBpIDwgSUdUX01BWF9QSVBFUzsgaSsrKSB7CisJCWlmICghZGF0YS0+aGlnaGVzdF9tb2Rl W2ldKQorCQkJY29udGludWU7CisJCWlndF9pbmZvKCJTdG9waW5nIEdQVSB0aHJlYWQgJWRcbiIs IGkpOworCQlkYXRhLT5ncHVfdGhyZWFkX3N0YXRlW2ldID0gU1RPUFBFRDsKKwkJcHRocmVhZF9q b2luKGRhdGEtPmdwdV90aHJlYWRbaV0sIE5VTEwpOworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5m Yl9wdHIgPSBOVUxMOworCQlpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKGRhdGEtPmdwdV9jb250ZXh0 W2ldLmJhdGNoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X2NwdV90aHJlYWRzKHN0cnVj dCBkYXRhICpkYXRhKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPm51bWJl cl9vZl9jb3JlczsgaSsrKSB7CisJCWRhdGEtPmNwdV9jb250ZXh0W2ldLmJ1ZjEgPSBtYWxsb2Mo QlVGX1NJWkUpOworCQlkYXRhLT5jcHVfY29udGV4dFtpXS5idWYyID0gbWFsbG9jKEJVRl9TSVpF KTsKKwkJZGF0YS0+Y3B1X2NvbnRleHRbaV0uaWQgPSBpOworCQlkYXRhLT5jcHVfY29udGV4dFtp XS5kYXRhID0gZGF0YTsKKwkJcHRocmVhZF9jcmVhdGUoJmRhdGEtPmNwdV90aHJlYWRbaV0sIE5V TEwsIGNwdV9sb2FkLAorCQkJICAgICAgICh2b2lkKikmZGF0YS0+Y3B1X2NvbnRleHRbaV0pOwor CX0KK30KKworc3RhdGljIHZvaWQgc3RvcF9jcHVfdGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSkK K3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5udW1iZXJfb2ZfY29yZXM7IGkr KykgeworCQlkYXRhLT5jcHVfdGhyZWFkX3N0b3BbaV0gPSB0cnVlOworCQlwdGhyZWFkX2pvaW4o ZGF0YS0+Y3B1X3RocmVhZFtpXSwgTlVMTCk7CisJCWZyZWUoZGF0YS0+Y3B1X2NvbnRleHRbaV0u YnVmMSk7CisJCWZyZWUoZGF0YS0+Y3B1X2NvbnRleHRbaV0uYnVmMik7CisJfQorfQorCitzdGF0 aWMgdm9pZCBjcmVhdGVfZnJhbWVidWZmZXJzKHN0cnVjdCBkYXRhICpkYXRhKQoreworCWludCBp LCBqOworCXVpbnQ2NF90IGN1cnNvcl93aWR0aCwgY3Vyc29yX2hlaWdodDsKKworCWRvX29yX2Rp ZShkcm1HZXRDYXAoZGF0YS0+ZHJtX2ZkLCBEUk1fQ0FQX0NVUlNPUl9XSURUSCwgJmN1cnNvcl93 aWR0aCkpOworCWRvX29yX2RpZShkcm1HZXRDYXAoZGF0YS0+ZHJtX2ZkLCBEUk1fQ0FQX0NVUlNP Ul9IRUlHSFQsICZjdXJzb3JfaGVpZ2h0KSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSUdUX01BWF9Q SVBFUzsgaSsrKSB7CisJCWlmICghZGF0YS0+aGlnaGVzdF9tb2RlW2ldKQorCQkJY29udGludWU7 CisJCWlmICghZGF0YS0+Y3Vyc29yX2ZiW2ldLmZiX2lkKSB7CisJCQlpZ3RfY3JlYXRlX2NvbG9y X2ZiKGRhdGEtPmRybV9mZCwKKwkJCQkJICAgIGN1cnNvcl93aWR0aCwgY3Vyc29yX2hlaWdodCwK KwkJCQkJICAgIGRhdGEtPmZvcm1hdCwKKwkJCQkJICAgIGRhdGEtPm1vZGlmaWVyLAorCQkJCQkg ICAgMS4wLDAuMCwwLjAsCisJCQkJCSAgICAmZGF0YS0+Y3Vyc29yX2ZiW2ldKTsKKwkJfQorCQlm b3IgKGogPSAwOyBqIDwgZGF0YS0+bnVtX3BsYW5lc1tpXTsgaisrKSB7CisJCQlpZiAoIWRhdGEt PmZiW2kgKiBNQVhfUExBTkVTICsgal0uZmJfaWQpIHsKKwkJCQlpZ3RfY3JlYXRlX2NvbG9yX3Bh dHRlcm5fZmIoZGF0YS0+ZHJtX2ZkLAorCQkJCQkJCSAgICBkYXRhLT5oaWdoZXN0X21vZGVbaV0t PmhkaXNwbGF5LAorCQkJCQkJCSAgICBkYXRhLT5oaWdoZXN0X21vZGVbaV0tPnZkaXNwbGF5LAor CQkJCQkJCSAgICBkYXRhLT5mb3JtYXQsCisJCQkJCQkJICAgIGRhdGEtPm1vZGlmaWVyLAorCQkJ CQkJCSAgICAwLjAsIDEuMCwgMC4wLCAmZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXSk7CisJ CQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfZnJhbWVidWZmZXJzKHN0cnVj dCBkYXRhICpkYXRhKQoreworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IElHVF9NQVhf UElQRVM7IGkrKykgeworCQlpZiAoIWRhdGEtPmhpZ2hlc3RfbW9kZVtpXSkKKwkJCWNvbnRpbnVl OworCQlmb3IgKGogPSAwOyBqIDwgTUFYX1BMQU5FUzsgaisrKSB7CisJCQlpZiAoZGF0YS0+ZmJb aSAqIE1BWF9QTEFORVMgKyBqXS5mYl9pZCkgeworCQkJCWlndF9wbGFuZV9zZXRfZmIoJmRhdGEt PmRpc3BsYXkucGlwZXNbaV0ucGxhbmVzW2pdLCBOVUxMKTsKKwkJCQlpZ3RfcmVtb3ZlX2ZiKGRh dGEtPmRpc3BsYXkuZHJtX2ZkLCAmZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXSk7CisJCQkJ ZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXS5mYl9pZCA9IDA7CisJCQl9CisJCX0KKwkJaWYg KGRhdGEtPmN1cnNvcl9mYltpXS5mYl9pZCkgeworCQkJaWd0X3JlbW92ZV9mYihkYXRhLT5kaXNw bGF5LmRybV9mZCwgJmRhdGEtPmN1cnNvcl9mYltpXSk7CisJCQlkYXRhLT5jdXJzb3JfZmJbaV0u ZmJfaWQgPSAwOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX3Rlc3Qoc3RydWN0 IGRhdGEgKmRhdGEpCit7CisJaW50IGksajsKKwlpbnQgbnVtX2Nvbm5lY3RvcnM7CisKKwlkYXRh LT5udW1iZXJfb2ZfY29yZXMgPSBtaW4oc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTiksIE1B WF9DT1JFUyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSUdUX01BWF9QSVBFUzsgaSsrKSB7CisJCWZv ciAoaiA9IDA7IGogPCBNQVhfUExBTkVTOyBqKyspCisJCQlkYXRhLT5mYltpICogTUFYX1BMQU5F UyArIGpdLmZiX2lkID0gMDsKKwkJZGF0YS0+Y3Vyc29yX2ZiW2ldLmZiX2lkID0gMDsKKwkJZGF0 YS0+bnVtX3BsYW5lc1tpXSA9IC0xOworCQlkYXRhLT5sYXN0X21vZGVbaV0gPSBOVUxMOworCQlz ZW1faW5pdCgmZGF0YS0+Z3B1X3RocmVhZF9wYXVzZV9hY2tbaV0sIDAsIDApOworCX0KKworCXN0 YXJ0X2NwdV90aHJlYWRzKGRhdGEpOworCisJZGF0YS0+bW9kZV9yZXNvdXJjZXMgPSBkcm1Nb2Rl R2V0UmVzb3VyY2VzKGRhdGEtPmRybV9mZCk7CisJaWYgKCFkYXRhLT5tb2RlX3Jlc291cmNlcykg eworCQlpZ3Rfd2FybigiZHJtTW9kZUdldFJlc291cmNlcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJv cihlcnJubykpOworCQlyZXR1cm47CisJfQorCisJbnVtX2Nvbm5lY3RvcnMgPSBkYXRhLT5tb2Rl X3Jlc291cmNlcy0+Y291bnRfY29ubmVjdG9yczsKKworCW1lbXNldChkYXRhLT5oaWdoZXN0X21v ZGUsIDAsIHNpemVvZihkcm1Nb2RlTW9kZUluZm8gKikgKiBJR1RfTUFYX1BJUEVTKTsKKworCWRh dGEtPmNvbm5lY3RvcnMgPQorCQkoZHJtTW9kZUNvbm5lY3RvclB0ciAqKW1hbGxvYyhzaXplb2Yo ZHJtTW9kZUNvbm5lY3RvclB0cikgKiBudW1fY29ubmVjdG9ycyk7CisKKwlmaWxsX2Nvbm5lY3Rv cl90b19waXBlX2FycmF5KGRhdGEsIGRhdGEtPm1vZGVfcmVzb3VyY2VzLCBkYXRhLT5jb25uZWN0 b3JzKTsKKworCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVTOyBpKyspIHsKKwkJZHJtTW9k ZUNvbm5lY3RvciAqY29ubmVjdG9yID0gKGRybU1vZGVDb25uZWN0b3IgKilkYXRhLT5jb25uZWN0 b3JzW2ldOworCQlpZiAoIWNvbm5lY3RvcikKKwkJCWNvbnRpbnVlOworCQlpZiAoIWRhdGEtPmhp Z2hlc3RfbW9kZVtpXSkgeworCQkJaWYgKGNvbm5lY3Rvci0+Y291bnRfbW9kZXMpCisJCQkJZGF0 YS0+aGlnaGVzdF9tb2RlW2ldID0gZmluZF9oaWdoZXN0X21vZGUoY29ubmVjdG9yKTsKKwkJfQor CQlpZ3RfYXNzZXJ0KGRhdGEtPmhpZ2hlc3RfbW9kZVtpXSk7CisKKwkJaWYgKGRhdGEtPmhpZ2hl c3RfbW9kZVtpXSkgeworCQkJaWd0X2luZm8oIlVzaW5nIG1vZGU6IFxuIik7CisJCQlrbXN0ZXN0 X2R1bXBfbW9kZShkYXRhLT5oaWdoZXN0X21vZGVbaV0pOworCQkJZGF0YS0+cGlwZV9jcmNbaV0g PSBpZ3RfcGlwZV9jcmNfbmV3KGRhdGEtPmRybV9mZCwgaSwKKwkJCQkJCQkgICAgIElOVEVMX1BJ UEVfQ1JDX1NPVVJDRV9BVVRPKTsKKwkJfSBlbHNlCisJCQlkYXRhLT5waXBlX2NyY1tpXSA9IE5V TEw7CisKKwkJaWYgKGRhdGEtPm51bV9wbGFuZXNbaV0gPT0gLTEpCisJCQlkYXRhLT5udW1fcGxh bmVzW2ldID0gZGF0YS0+ZGlzcGxheS5waXBlc1tpXS5uX3BsYW5lczsKKworCQlpZ3RfaW5mbygi TWF4IG51bWJlciBvZiBwbGFuZXMgaXMgJWQgZm9yIHBpcGUgJWRcbiIsCisJCQkgZGF0YS0+bnVt X3BsYW5lc1tpXSwgaSk7CisJfQorCisJY3JlYXRlX2ZyYW1lYnVmZmVycyhkYXRhKTsKKworCXN0 YXJ0X2dwdV90aHJlYWRzKGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfdGVzdChzdHJ1 Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaTsKKworCXN0b3BfZ3B1X3RocmVhZHMoZGF0YSk7CisK KwkvKgorCSAqIEFzIHdlIGNoYW5nZSB0aWxpbmcvZm9ybWF0IHdlIG5lZWQgYSBuZXcgRkIKKwkg Ki8KKwlkZXN0cm95X2ZyYW1lYnVmZmVycyhkYXRhKTsKKworCWZvciAoaSA9IDA7IGkgPCBJR1Rf TUFYX1BJUEVTOyBpKyspIHsKKwkJZGF0YS0+bnVtX3BsYW5lc1tpXSA9IC0xOworCQlkYXRhLT5s YXN0X21vZGVbaV0gPSBOVUxMOworCQlpZiAoZGF0YS0+cGlwZV9jcmNbaV0pCisJCQlpZ3RfcGlw ZV9jcmNfZnJlZShkYXRhLT5waXBlX2NyY1tpXSk7CisJfQorCisJc3RvcF9jcHVfdGhyZWFkcyhk YXRhKTsKKworCXJlbGVhc2VfY29ubmVjdG9ycyhkYXRhLT5jb25uZWN0b3JzKTsKKworCWRybU1v ZGVGcmVlUmVzb3VyY2VzKGRhdGEtPm1vZGVfcmVzb3VyY2VzKTsKK30KKworc3RydWN0IGRhdGEg ZGF0YSA9IHsKKwkuZm9ybWF0ID0gRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwkubW9kaWZpZXIgPSBE Uk1fRk9STUFUX01PRF9MSU5FQVIsCisJLmRldmlkID0gMCwKK307CisKK2lndF9tYWluIHsKKwl1 aW50OF90IGZvcm1hdF9pZHggPSAwLCB0aWxpbmdfaWR4ID0gMDsKKworCWlndF9maXh0dXJlIHsK KwkJZGF0YS5kcm1fZmQgPSBkYXRhLmRpc3BsYXkuZHJtX2ZkID0gZHJtX29wZW5fZHJpdmVyX21h c3RlcihEUklWRVJfQU5ZKTsKKworCQlrbXN0ZXN0X3NldF92dF9ncmFwaGljc19tb2RlKCk7CisK KwkJaWd0X2Rpc3BsYXlfcmVxdWlyZSgmZGF0YS5kaXNwbGF5LCBkYXRhLmRpc3BsYXkuZHJtX2Zk KTsKKwkJaWd0X3JlcXVpcmUoZGF0YS5kaXNwbGF5LmlzX2F0b21pYyk7CisJCWlndF9kaXNwbGF5 X3JlcXVpcmVfb3V0cHV0KCZkYXRhLmRpc3BsYXkpOworCX0KKworCWZvciAoZm9ybWF0X2lkeCA9 IDA7IGZvcm1hdF9pZHggPCBOX0ZPUk1BVFM7IGZvcm1hdF9pZHgrKykKKwkJZm9yICh0aWxpbmdf aWR4ID0gMDsgdGlsaW5nX2lkeCA8IE5fVElMSU5HX01FVEhPRFM7IHRpbGluZ19pZHgrKykKKwkJ eworCQkJZGF0YS5mb3JtYXQgPSBmb3JtYXRzW2Zvcm1hdF9pZHhdOworCQkJZGF0YS5tb2RpZmll ciA9IHRpbGluZ3NbdGlsaW5nX2lkeF07CisKKwkJCWlndF9maXh0dXJlIHsKKwkJCQlwcmVwYXJl X3Rlc3QoJmRhdGEpOworCQkJfQorCisJCQlpZ3RfZGVzY3JpYmUoIlN0YXJ0IHBpcGUgc3RyZXNz IHRlc3QsIHV0aWxpemluZyBjcHUgYW5kIGdwdSAiCisJCQkgICAgICAgICAgICAgInNpbXVsdGFu ZW91c2x5IHdpdGggbWF4aW11bSBhbW91bnQgb2YgcGxhbmVzICIKKwkJCSAgICAgICAgICAgICAi YW5kIHJlc29sdXRpb24gIik7CisJCQlpZ3Rfc3VidGVzdF9mKCJzdHJlc3MtJXMtJXMiLAorCQkJ ICAgICAgICAgICAgICBmb3JtYXRfc3RyKGZvcm1hdF9pZHgpLAorCQkJICAgICAgICAgICAgICB0 aWxpbmdfc3RyKHRpbGluZ19pZHgpKSB7CisKKwkJCQlzdHJlc3MoJmRhdGEpOworCisJCQl9CisK KwkJCWlndF9maXh0dXJlIHsKKwkJCQlmaW5pc2hfdGVzdCgmZGF0YSk7CisJCQl9CisJCX0KKwor CWlndF9maXh0dXJlIHsKKwkJaWd0X2Rpc3BsYXlfZmluaSgmZGF0YS5kaXNwbGF5KTsKKwl9Cit9 CmRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCmluZGV4 IGQ5MzFjYzM3Li5kMmFjNWM5NyAxMDA2NDQKLS0tIGEvdGVzdHMvbWVzb24uYnVpbGQKKysrIGIv dGVzdHMvbWVzb24uYnVpbGQKQEAgLTIyOSw2ICsyMjksNyBAQCBpOTE1X3Byb2dzID0gWwogCSdp OTE1X2ZiX3RpbGluZycsCiAJJ2k5MTVfZ2V0cGFyYW1zX2Jhc2ljJywKIAknaTkxNV9oYW5nbWFu JywKKwknaTkxNV9waXBlX3N0cmVzcycsCiAJJ2k5MTVfbW9kdWxlX2xvYWQnLAogCSdpOTE1X3Bt X2JhY2tsaWdodCcsCiAJJ2k5MTVfcG1fbHBzcCcsCi0tIAoyLjE3LjEKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0Cmln dC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=