From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: [PATCH i-g-t] tools: Add intel_dp_compliance for DisplayPort 1.2 compliance automation Date: Mon, 21 Nov 2016 19:40:27 -0800 Message-ID: <1479786027-19231-1-git-send-email-manasi.d.navare@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0D0DA6E122 for ; Tue, 22 Nov 2016 03:38:18 +0000 (UTC) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VGhpcyBpcyB0aGUgdXNlcnNwYWNlIGNvbXBvbmVudCBvZiB0aGUgRGlzcGxheXBvcnQgQ29tcGxp YW5jZQp0ZXN0aW5nIHNvZnR3YXJlIHJlcXVpcmVkIGZvciBjb21wbGlhbmNlIHRlc3Rpbmcgb2Yg dGhlIEk5MTUKRGlzcGxheSBQb3J0IGRyaXZlci4gVGhpcyBtdXN0IGJlIHJ1bm5pbmcgaW4gb3Jk ZXIgdG8gc3VjY2Vzc2Z1bGx5CmNvbXBsZXRlIERpc3BsYXkgUG9ydCBjb21wbGlhbmNlIHRlc3Rp bmcuIFRoaXMgYXBwIGFuZCB0aGUga2VybmVsCmNvZGUgdGhhdCBhY2NvbXBhbmllcyBpdCBoYXMg YmVlbiB3cml0dGVuIHRvIHNhdGlmeSB0aGUgcmVxdWlyZW1lbnRzCm9mIHRoZSBEaXNwbGF5cG9y dCBMaW5rIENUUyAxLjIgcmV2MS4xIHNwZWNpZmljYXRpb24gZnJvbSBWRVNBLgpOb3RlIHRoYXQg dGhpcyBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGVEUCBjb21wbGlhbmNlIHRlc3Rpbmcu ClRoaXMgdXRpbGl0eSBoYXMgYW4gYXV0b21hdGlvbiBzdXBwb3J0IGZvciB0aGUgTGluayB0cmFp bmluZyB0ZXN0cwooNC4zLjEuMS4gLSA0LjMuMi4zKSwgRURJRCB0ZXN0cyAoNC4yLjIuMwotIDQu Mi4yLjYpIGFuZCBWaWRlbyBQYXR0ZXJuIGdlbmVyYXRpb24gdGVzdHMgKDQuMy4zLjEpIGZyb20g Q1RTCnNwZWNpZmljYXRpb24gMS4yIFJldiAxLjEuCgpUaGlzIHRvb2wgaGFzIHRoZSBzdXBwb3J0 IGZvciByZXNwb25kaW5nIHRvIHRoZSBob3RwbHVnIHVldmVudHMKc2VudCBieSBjb21wbGlhbmNl IHRlc3R0aW5nIHVuaXQgYWZ0ZXIgZWFjaCB0ZXN0LgoKVGhlIExpbnV4IERVVCBydW5uaW5nIHRo aXMgdXRpbGl0eSBtdXN0IGJlIGluIHRleHQgKGNvbnNvbGUpIG1vZGUKYW5kIGNhbm5vdCBoYXZl IGFueSBvdGhlciBkaXNwbGF5IG1hbmFnZXIgcnVubmluZy4gU2luY2UgdGhpcyB1c2VzCnN5c2Zz IG5vZGVzIGZvciBrZXJuZWwgaW50ZXJhY3Rpb24sIHRoaXMgdXRpbGl0eSBzaG91bGQgYmUgcnVu IGFzClJvb3QuIE9uY2UgdGhpcyB1c2VyIGFwcGxpY2F0aW9uIGlzIHVwIGFuZCBydW5uaW5nLCB3 YWl0aW5nIGZvcgp0ZXN0IHJlcXVlc3RzLCB0aGUgdGVzdCBhcHBsaWFuY2Ugc29mdHdhcmUgb24g dGhlIHdpbmRvd3MgaG9zdApjYW4gbm93IGJlIHVzZWQgdG8gZXhlY3V0ZSB0aGUgY29tcGxpYW5j ZSB0ZXN0cy4KClRoaXMgYXBwIGlzIGJhc2VkIG9uIHNvbWUgcHJpb3Igd29yayBkb25lIGluIEFw cmlsIDIwMTUgKGJ5ClRvZGQgUHJldml0ZSA8dHByZXZpdGVAZ21haWwuY29tPikKClNpZ25lZC1v ZmYtYnk6IE1hbmFzaSBOYXZhcmUgPG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+Ci0tLQogdG9v bHMvTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgfCAgICAzICstCiB0b29scy9NYWtlZmls ZS5zb3VyY2VzICAgICAgICAgICAgICB8ICAgIDcgKwogdG9vbHMvaW50ZWxfZHBfY29tcGxpYW5j ZS5jICAgICAgICAgfCAxMDQ1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0 b29scy9pbnRlbF9kcF9jb21wbGlhbmNlLmggICAgICAgICB8ICAgMzUgKysKIHRvb2xzL2ludGVs X2RwX2NvbXBsaWFuY2VfaG90cGx1Zy5jIHwgIDEyMyArKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAx MjEyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29s cy9pbnRlbF9kcF9jb21wbGlhbmNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9pbnRlbF9k cF9jb21wbGlhbmNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9pbnRlbF9kcF9jb21wbGlh bmNlX2hvdHBsdWcuYwoKZGlmZiAtLWdpdCBhL3Rvb2xzL01ha2VmaWxlLmFtIGIvdG9vbHMvTWFr ZWZpbGUuYW0KaW5kZXggMThmODZmNi4uZWFjNmQ2NCAxMDA2NDQKLS0tIGEvdG9vbHMvTWFrZWZp bGUuYW0KKysrIGIvdG9vbHMvTWFrZWZpbGUuYW0KQEAgLTEzLDcgKzEzLDcgQEAgQU1fQ1BQRkxB R1MgPSAtSSQodG9wX3NyY2RpcikgLUkkKHRvcF9zcmNkaXIpL2xpYgogQU1fQ0ZMQUdTID0gJChE RUJVR19DRkxBR1MpICQoRFJNX0NGTEFHUykgJChQQ0lBQ0NFU1NfQ0ZMQUdTKSAkKENXQVJORkxB R1MpIFwKIAkgICAgJChDQUlST19DRkxBR1MpICQoTElCVU5XSU5EX0NGTEFHUykgLURQS0dEQVRB RElSPVwiJChwa2dkYXRhZGlyKVwiIFwKIAkgICAgJChXRVJST1JfQ0ZMQUdTKQotTERBREQgPSAk KHRvcF9idWlsZGRpcikvbGliL2xpYmludGVsX3Rvb2xzLmxhCitMREFERCA9ICQodG9wX2J1aWxk ZGlyKS9saWIvbGliaW50ZWxfdG9vbHMubGEgJChHTElCX0xJQlMpCiBBTV9MREZMQUdTID0gLVds LC0tYXMtbmVlZGVkCiAKIApAQCAtMjQsNiArMjQsNyBAQCBtb2R1bGVkaXIgPSAkKGxpYmRpcikK IGludGVsX2F1YmR1bXBfbGFfTERGTEFHUyA9IC1tb2R1bGUgLWF2b2lkLXZlcnNpb24gLW5vLXVu ZGVmaW5lZAogaW50ZWxfYXViZHVtcF9sYV9TT1VSQ0VTID0gYXViZHVtcC5jCiBpbnRlbF9hdWJk dW1wX2xhX0xJQkFERCA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliaW50ZWxfdG9vbHMubGEgLWxk bAoraW50ZWxfZHBfY29tcGxpYW5jZV9sYV9MSUJBREQgPSAkKExEQUREKQogCiBiaW5fU0NSSVBU UyA9IGludGVsX2F1YmR1bXAKIENMRUFORklMRVMgPSAkKGJpbl9TQ1JJUFRTKQpkaWZmIC0tZ2l0 IGEvdG9vbHMvTWFrZWZpbGUuc291cmNlcyBiL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXgg YmU1ODg3MS4uMDljMDY2NyAxMDA2NDQKLS0tIGEvdG9vbHMvTWFrZWZpbGUuc291cmNlcworKysg Yi90b29scy9NYWtlZmlsZS5zb3VyY2VzCkBAIC0xMyw2ICsxMyw3IEBAIHRvb2xzX3Byb2dfbGlz dHMgPQkJXAogCWludGVsX2Jpb3NfcmVhZGVyCVwKIAlpbnRlbF9kaXNwbGF5X2NyYwlcCiAJaW50 ZWxfZGlzcGxheV9wb2xsZXIJXAorCWludGVsX2RwX2NvbXBsaWFuY2UJXAogCWludGVsX2ZvcmNl d2FrZWQJXAogCWludGVsX2dwdV9mcmVxdWVuY3kJXAogCWludGVsX2Zpcm13YXJlX2RlY29kZQlc CkBAIC01NSwzICs1Niw5IEBAIGludGVsX2wzX3Bhcml0eV9TT1VSQ0VTID0JXAogCWludGVsX2wz X3Bhcml0eS5oCVwKIAlpbnRlbF9sM191ZGV2X2xpc3RlbmVyLmMKIAoraW50ZWxfZHBfY29tcGxp YW5jZV9TT1VSQ0VTID0gXAorICAgICAgICBpbnRlbF9kcF9jb21wbGlhbmNlLmMgXAorICAgICAg ICBpbnRlbF9kcF9jb21wbGlhbmNlLmggXAorICAgICAgICBpbnRlbF9kcF9jb21wbGlhbmNlX2hv dHBsdWcuYyBcCisgICAgICAgICQoTlVMTCkKKwpkaWZmIC0tZ2l0IGEvdG9vbHMvaW50ZWxfZHBf Y29tcGxpYW5jZS5jIGIvdG9vbHMvaW50ZWxfZHBfY29tcGxpYW5jZS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2N2QyZjgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9p bnRlbF9kcF9jb21wbGlhbmNlLmMKQEAgLTAsMCArMSwxMDQ1IEBACisvKgorICogQ29weXJpZ2h0 ID8gMjAxNC0yMDE1IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJl c3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5z ZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBu ZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBB VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwor ICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIERpc3BsYXlwb3J0IENvbXBsaWFuY2UgVGVzdGlu ZyBBcHBsaWNhdGlvbgorICoKKyAqIFRoaXMgaXMgdGhlIHVzZXJzcGFjZSBjb21wb25lbnQgb2Yg dGhlIERpc3BsYXlwb3J0IENvbXBsaWFuY2UgdGVzdGluZworICogc29mdHdhcmUgcmVxdWlyZWQg Zm9yIGNvbXBsaWFuY2UgdGVzdGluZyBvZiB0aGUgSTkxNSBEaXNwbGF5IFBvcnQgZHJpdmVyLgor ICogVGhpcyBtdXN0IGJlIHJ1bm5pbmcgaW4gb3JkZXIgdG8gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRl IERpc3BsYXkgUG9ydAorICogY29tcGxpYW5jZSB0ZXN0aW5nLiBUaGlzIGFwcCBhbmQgdGhlIGtl cm5lbCBjb2RlIHRoYXQgYWNjb21wYW5pZXMgaXQgaGFzIGJlZW4KKyAqIHdyaXR0ZW4gdG8gc2F0 aWZ5IHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIERpc3BsYXlwb3J0IExpbmsgQ1RTIDEuMiByZXYx LjEKKyAqIHNwZWNpZmljYXRpb24gZnJvbSBWRVNBLiBOb3RlIHRoYXQgdGhpcyBhcHBsaWNhdGlv biBkb2VzIG5vdCBzdXBwb3J0IGVEUAorICogY29tcGxpYW5jZSB0ZXN0aW5nLgorICoKKyAqIENv bXBsaWFuY2UgVGVzdGluZyByZXF1aXJlcyBzZXZlcmFsIGNvbXBvbmVudHM6CisgKiAgIC0gQSBr ZXJuZWwgYnVpbGQgdGhhdCBjb250YWlucyB0aGUgcGF0Y2ggc2V0IGZvciBEUCBjb21wbGlhbmNl IHN1cHBvcnQKKyAqICAgLSBBIERpc3BsYXlwb3J0IENvbXBsaWFuY2UgVGVzdGluZyBhcHBsaWFu Y2Ugc3VjaCBhcyBVbmlncmFmLURQUjEyMAorICogICAtIFRoaXMgdXNlciBhcHBsaWNhdGlvbgor ICogICAtIEEgd2luZG93cyBob3N0IG1hY2hpbmUgdG8gcnVuIHRoZSBEUFIgdGVzdCBzb2Z0d2Fy ZQorICogICAtIFJvb3QgYWNjZXNzIG9uIHRoZSBEVVQgZHVlIHRvIHRoZSB1c2Ugb2Ygc3lzZnMg dXRpbGl0eQorICoKKyAqIFRlc3QgU2V0dXA6CisgKiBJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRl ZCB0aGF0IHRoZSB3aW5kb3dzIGhvc3QsIHRlc3QgYXBwbGlhbmNlIGFuZCBEVVQKKyAqIGJlIGZy ZXNobHkgcmVzdGFydGVkIGJlZm9yZSBhbnkgdGVzdGluZyBiZWdpbnMgdG8gZW5zdXJlIHRoYXQg YW55IHByZXZpb3VzCisgKiBjb25maWd1cmF0aW9ucyBhbmQgc2V0dGluZ3Mgd2lsbCBub3QgaW50 ZXJmZXJlIHdpdGggdGVzdCBwcm9jZXNzLiBSZWZlciB0bworICogdGhlIHRlc3QgYXBwbGlhbmNl IGRvY3VtZW50YXRpb24gZm9yIHNldHVwLCBzb2Z0d2FyZSBpbnN0YWxsYXRpb24gYW5kCisgKiBv cGVyYXRpb24gc3BlY2lmaWMgdG8gdGhhdCBkZXZpY2UuCisgKgorICogVGhlIExpbnV4IERVVCBt dXN0IGJlIGluIHRleHQgKGNvbnNvbGUpIG1vZGUgYW5kIGNhbm5vdCBoYXZlIGFueSBvdGhlcgor ICogZGlzcGxheSBtYW5hZ2VyIHJ1bm5pbmcuIFlvdSBtdXN0IGJlIGxvZ2dlZCBpbiBhcyByb290 IHRvIHJ1biB0aGlzIHVzZXIgYXBwLgorICogT25jZSB0aGUgdXNlciBhcHBsaWNhdGlvbiBpcyB1 cCBhbmQgcnVubmluZywgd2FpdGluZyBmb3IgdGVzdCByZXF1ZXN0cywgdGhlCisgKiBzb2Z0d2Fy ZSBvbiB0aGUgd2luZG93cyBob3N0IGNhbiBub3cgYmUgdXNlZCB0byBleGVjdXRlIHRoZSBjb21w bGlhbmNlIHRlc3RzLgorICoKKyAqIFRoaXMgdXNlcnNwYWNlIGFwcGxpY2F0aW9uIHN1cHBvcnRz IGZvbGxvd2luZyB0ZXN0cyBmcm9tIHRoZSBEUCBDVFMgU3BlYworICogUmV2IDEuMToKKyAqICAg LSBFRElEIFRlc3RzOiBTdXBwb3J0cyBFRElEIHJlYWQgKDQuMi4yLjMpLEVESUQgUmVhZCBmYWls dXJlIGFuZCBjb3JydXB0aW9uCisgKiAgICAgZGV0ZWN0aW9uIHRlc3RzICg0LjIuMi40LCA0LjIu Mi41LCA0LjIuMi42KQorICogICAtIFZpZGVvIFBhdHRlcm4gZ2VuZXJhdGlvbiB0ZXN0czogVGhp cyBzdXBwb3J0cyBvbmx5IHRoZSAyNCBhbmQgMThicHAgY29sb3IKKyAqICAgICByYW1wIHRlc3Qg cGF0dGVybiAoNC4zLjMuMSkuCisgKgorICogQ29ubmVjdGlvbnMgKHJlcXVpcmVkKToKKyAqICAg LSBUZXN0IEFwcGxpYW5jZSBjb25uZWN0ZWQgdG8gdGhlIGV4dGVybmFsIERpc3BsYXlwb3J0IGNv bm5lY3RvciBvbiB0aGUgRFVUCisgKiAgIC0gVGVzdCBBcHBsaWFuY2UgTW9uaXRvciBPdXQgY29u bmVjdGVkIHRvIERpc3BsYXlwb3J0IGNvbm5lY3RvciBvbiB0aGUKKyAqIG1vbml0b3IKKyAqICAg LSBUZXN0IGFwcGxpYW5jZSBjb25uZWN0ZWQgdG8gdGhlIFdpbmRvd3MgSG9zdCB2aWEgVVNCCisg KgorICogRGVidWdmcyBGaWxlczoKKyAqIFRoZSBmaWxlIHJvb3QgZm9yIGFsbCAgdGhlIGRlYnVn ZnMgZmlsZToKKyAqIC9zeXMva2VybmVsL2RlYnVnL2RyaS8wLworICoKKyAqIFRoZSBzcGVjaWZp YyBmaWxlcyBhcmUgYXMgZm9sbG93czoKKyAqCisgKiBpOTE1X2RwX3Rlc3RfYWN0aXZlCisgKiBB IHNpbXBsZSBmbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IGNvbXBsaWFuY2UgdGVz dGluZyBpcyBjdXJyZW50bHkKKyAqIGFjdGl2ZSBpbiB0aGUga2VybmVsLiBUaGlzIGZsYWcgaXMg cG9sbGVkIGJ5IHVzZXJzcGFjZSBhbmQgb25jZSBzZXQsIGludm9rZXMKKyAqIHRoZSB0ZXN0IGhh bmRsZXIgaW4gdGhlIHVzZXIgYXBwLiBUaGlzIGZsYWcgaXMgc2V0IGJ5IHRoZSB0ZXN0IGhhbmRs ZXIgaW4gdGhlCisgKiBrZXJuZWwgYWZ0ZXIgcmVhZGluZyB0aGUgcmVnaXN0ZXJzIHJlcXVlc3Rl ZCBieSB0aGUgdGVzdCBhcHBsaWFuY2UuCisgKgorICogaTkxNV9kcF90ZXN0X2RhdGEKKyAqIFRl c3QgZGF0YSBpcyB1c2VkIGJ5IHRoZSBrZXJuZWwgdG8gcGFzcyBwYXJhbWV0ZXJzIHRvIHRoZSB1 c2VyIGFwcC4gRWc6IEluCisgKiBjYXNlIG9mIEVESUQgdGVzdHMsIHRoZSBkYXRhIHRoYXQgaXMg ZGVsaXZlcmVkIHRvIHRoZSB1c2Vyc3BhY2UgaXMgdGhlIHZpZGVvCisgKiBtb2RlIHRvIGJlIHNl dCBmb3IgdGhlIHRlc3QuCisgKiBJbiBjYXNlIG9mIHZpZGVvIHBhdHRlcm4gdGVzdCwgdGhlIGRh dGEgdGhhdCBpcyBkZWxpdmVyZWQgdG8gdGhlIHVzZXJzcGFjZSBpcworICogdGhlIHdpZHRoIGFu ZCBoZWlnaHQgb2YgdGhlIHRlc3QgcGF0dGVybiBhbmQgdGhlIGJpdHMgcGVyIGNvbG9yIHZhbHVl LgorICoKKyAqIGk5MTVfZHBfdGVzdF90eXBlCisgKiBUaGUgdGVzdCB0eXBlIHZhcmlhYmxlIGlu c3RydWN0cyB0aGUgdXNlciBhcHAgYXMgdG8gd2hhdCB0aGUgcmVxdWVzdGVkIHRlc3QKKyAqIHdh cyBmcm9tIHRoZSBzaW5rIGRldmljZS4gVGhlc2UgdmFsdWVzIGRlZmluZWQgYXQgdGhlIHRvcCBv ZiB0aGUgYXBwbGljYXRpb24ncworICogbWFpbiBpbXBsZW1lbnRhdGlvbiBmaWxlIG11c3QgYmUg a2VwdCBpbiBzeW5jIHdpdGggdGhlIHZhbHVlcyBkZWZpbmVkIGluIHRoZQorICoga2VybmVsJ3Mg ZHJtX2RwX2hlbHBlci5oIGZpbGUuCisgKiBUaGlzIGFwcCBpcyBiYXNlZCBvbiBzb21lIHByaW9y IHdvcmsgc3VibWl0dGVkIGluIEFwcmlsIDIwMTUgYnkgVG9kZCBQcmV2aXRlCisgKiAoPHRwcmV2 aXRlQGdtYWlsLmNvbT4pCisgKgorICoKKyAqIFRoaXMgdG9vbCBjYW4gYmUgcnVuIGFzOgorICog Li9pbnRlbF9kcF9jb21wbGlhbmNlICBJdCB3aWxsIHdhaXQgdGlsbCB5b3Ugc3RhcnQgY29tcGxp YW5jZSBzdWl0ZSBmcm9tCisgKiBEUFIgMTIwLgorICogLi9pbnRlbF9kcF9jb21wbGlhbmNlIC1o ICBUaGlzIHdpbGwgb3BlbiB0aGUgaGVscAorICogLi9pbnRlbF9kcF9jb21wbGlhbmNlIC1pICBU aGlzIHdpbGwgcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50CisgKiBjb25uZWN0b3Jz L0NSVENzLiBUaGlzIGNhbiBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS4KKyAqCisgKiBB dXRob3JzOgorICogICAgTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2YXJlQGludGVsLmNvbT4K KyAqCisgKiBFbGVtZW50cyBvZiB0aGUgbW9kZXNldCBjb2RlIGFkYXB0ZWQgZnJvbSBEYXZpZCBI ZXJybWFubidzCisgKiBEUk0gbW9kZXNldCBleGFtcGxlCisgKgorICovCisjaW5jbHVkZSAiaWd0 LmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxt YXRoLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1 ZGUgPHN0cmluZ3MuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+ CisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUg PHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0 Lmg+CisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1 ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisj aW5jbHVkZSAiaW50ZWxfZHBfY29tcGxpYW5jZS5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+Cisj aW5jbHVkZSA8c2lnbmFsLmg+CisKKy8qIFVzZXIgSW5wdXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZp bmUgSEVMUF9ERVNDUklQVElPTiAxCisKKy8qIERlYnVnZnMgZmlsZSBkZWZpbml0aW9ucyAqLwor I2RlZmluZSBJTlRFTF9EUF9URVNUX1RZUEVfRklMRQkJImk5MTVfZHBfdGVzdF90eXBlIgorI2Rl ZmluZSBJTlRFTF9EUF9URVNUX0FDVElWRV9GSUxFCSJpOTE1X2RwX3Rlc3RfYWN0aXZlIgorI2Rl ZmluZSBJTlRFTF9EUF9URVNUX0RBVEFfRklMRQkJImk5MTVfZHBfdGVzdF9kYXRhIgorCisvKiBE Uk0gZGVmaW5pdGlvbnMgLSBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBEUk0gaGVhZGVy ICovCisjZGVmaW5lIERQX1RFU1RfTElOS19UUkFJTklORwkJKDEgPDwgMCkKKyNkZWZpbmUgRFBf VEVTVF9MSU5LX1ZJREVPX1BBVFRFUk4JKDEgPDwgMSkKKyNkZWZpbmUgRFBfVEVTVF9MSU5LX0VE SURfUkVBRAkJKDEgPDwgMikKKyNkZWZpbmUgRFBfVEVTVF9MSU5LX1BIWV9URVNUX1BBVFRFUk4J KDEgPDwgMykgLyogRFBDRCA+PSAxLjEgKi8KKworI2RlZmluZSBEUF9DT01QTElBTkNFX1RFU1Rf VFlQRV9NQVNLCShEUF9URVNUX0xJTktfVFJBSU5JTkcgICAgICB8CVwKKwkJCQkJIERQX1RFU1Rf TElOS19WSURFT19QQVRURVJOIHwJXAorCQkJCQkgRFBfVEVTVF9MSU5LX0VESURfUkVBRCAgICAg fAlcCisJCQkJCSBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTikKKworLyogTk9URTogVGhl c2UgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgZGVmaW5pdGlvbnMgaW4gaW50ZWxfZHAu YyAqLworI2RlZmluZSBJTlRFTF9EUF9FRElEX1NISUZUX01BU0sJMAorI2RlZmluZSBJTlRFTF9E UF9FRElEX09LCQkoMCA8PCBJTlRFTF9EUF9FRElEX1NISUZUX01BU0spCisjZGVmaW5lIElOVEVM X0RQX0VESURfQ09SUlVQVAkJKDEgPDwgSU5URUxfRFBfRURJRF9TSElGVF9NQVNLKQorI2RlZmlu ZSBJTlRFTF9EUF9SRVNPTFVUSU9OX1NISUZUX01BU0sJMAorI2RlZmluZSBJTlRFTF9EUF9SRVNP TFVUSU9OX1BSRUZFUlJFRAkoMSA8PCBJTlRFTF9EUF9SRVNPTFVUSU9OX1NISUZUX01BU0spCisj ZGVmaW5lIElOVEVMX0RQX1JFU09MVVRJT05fU1RBTkRBUkQJKDIgPDwgSU5URUxfRFBfUkVTT0xV VElPTl9TSElGVF9NQVNLKQorI2RlZmluZSBJTlRFTF9EUF9SRVNPTFVUSU9OX0ZBSUxTQUZFCSgz IDw8IElOVEVMX0RQX1JFU09MVVRJT05fU0hJRlRfTUFTSykKKyNkZWZpbmUgRFBfQ09NUExJQU5D RV9WSURFT19NT0RFX01BU0sJKElOVEVMX0RQX1JFU09MVVRJT05fUFJFRkVSUkVECXxcCisJCQkJ CSBJTlRFTF9EUF9SRVNPTFVUSU9OX1NUQU5EQVJECXxcCisJCQkJCSBJTlRFTF9EUF9SRVNPTFVU SU9OX0ZBSUxTQUZFKQorCisvKiBHbG9iYWwgZmlsZSBwb2ludGVycyBmb3IgdGhlIHN5c2ZzIGZp bGVzICovCitGSUxFICp0ZXN0X2FjdGl2ZV9mcCwgKnRlc3RfZGF0YV9mcCwgKnRlc3RfdHlwZV9m cDsKKworYm9vbCB2aWRlb19wYXR0ZXJuX2ZsYWc7CisKKy8qIFZpZGVvIHBhdHRlcm4gdGVzdCBn bG9iYWxzICovCit1aW50MTZfdCBoZGlzcGxheTsKK3VpbnQxNl90IHZkaXNwbGF5OwordWludDhf dCBiaXRkZXB0aDsKKworc3RhdGljIGludCB0aW9fZmQ7CitzdHJ1Y3QgdGVybWlvcyBzYXZlZF90 aW87CisKK2RybU1vZGVSZXMgKnJlc291cmNlczsKK2ludCBkcm1fZmQsIG1vZGVzOwordWludDY0 X3QgdGlsaW5nID0gTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORTsKK3VpbnQzMl90IGRlcHRoID0g MjQsIHN0cmlkZSwgYnBwOworaW50IHNwZWNpZmllZF9tb2RlX251bSA9IC0xLCBzcGVjaWZpZWRf ZGlzcF9pZCA9IC0xOworaW50IHdpZHRoLCBoZWlnaHQ7CitlbnVtIHsKKwlJTlRFTF9NT0RFX0lO VkFMSUQgPSAtMSwKKwlJTlRFTF9NT0RFX05PTkUgPSAwLAorCUlOVEVMX01PREVfUFJFRkVSUkVE LAorCUlOVEVMX01PREVfU1RBTkRBUkQsCisJSU5URUxfTU9ERV9GQUlMU0FGRSwKKwlJTlRFTF9N T0RFX1ZJREVPX1BBVFRFUk5fVEVTVAorfSBpbnRlbF9kaXNwbGF5X21vZGU7CisKK3N0cnVjdCB0 ZXN0X3ZpZGVvX3BhdHRlcm4geworCXVpbnQxNl90IGhkaXNwbGF5OworCXVpbnQxNl90IHZkaXNw bGF5OworCXVpbnQ4X3QgYml0ZGVwdGg7CisJdWludDMyX3QgZmI7CisJdWludDMyX3Qgc2l6ZTsK KwlzdHJ1Y3QgaWd0X2ZiIGZiX3BhdHRlcm47CisJZHJtTW9kZU1vZGVJbmZvIG1vZGU7CisJdWlu dDMyX3QgKnBpeG1hcDsKK307CisKK3N0cnVjdCBjb25uZWN0b3IgeworCXVpbnQzMl90IGlkOwor CWludCBtb2RlX3ZhbGlkOworCWRybU1vZGVNb2RlSW5mbyBtb2RlLCBtb2RlX3N0YW5kYXJkLCBt b2RlX3ByZWZlcnJlZCwgbW9kZV9mYWlsc2FmZTsKKwlkcm1Nb2RlRW5jb2RlciAqZW5jb2RlcjsK Kwlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3I7CisJaW50IGNydGM7CisJaW50IHBpcGU7CisJ LyogU3RhbmRhcmQgYW5kIHByZWZlcnJlZCBmcmFtZSBidWZmZXIqLworCXVpbnQzMl90IGZiLCBm Yl93aWR0aCwgZmJfaGVpZ2h0LCBmYl9zaXplOworCXVpbnQ4X3QgKnBpeG1hcDsKKwlzdHJ1Y3Qg aWd0X2ZiIGZiX3ZpZGVvX3BhdHRlcm47CisJLyogRmFpbHNhZmUgZnJhbWVidWZmZXIgLSBub3Rl IHRoaXMgaXMgYSAxNi1iaXQgYnVmZmVyICovCisJdWludDMyX3QgZmFpbHNhZmVfZmIsIGZhaWxz YWZlX3dpZHRoLCBmYWlsc2FmZV9oZWlnaHQ7CisJdWludDMyX3QgZmFpbHNhZmVfc2l6ZTsKKwl1 aW50OF90ICpmYWlsc2FmZV9waXhtYXA7CisJc3RydWN0IGlndF9mYiBmYl9mYWlsc2FmZV9wYXR0 ZXJuOworCXN0cnVjdCB0ZXN0X3ZpZGVvX3BhdHRlcm4gdGVzdF9wYXR0ZXJuOworfTsKKworc3Rh dGljIHZvaWQgY2xlYXJfdGVzdF9hY3RpdmUodm9pZCkKK3sKKwlyZXdpbmQodGVzdF9hY3RpdmVf ZnApOworCWZwcmludGYodGVzdF9hY3RpdmVfZnAsICIlZCIsIDApOworCWZmbHVzaCh0ZXN0X2Fj dGl2ZV9mcCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2RlYnVnZnNfZmlsZXModm9pZCkKK3sK Kwl0ZXN0X3R5cGVfZnAgPSBpZ3RfZGVidWdmc19mb3BlbihJTlRFTF9EUF9URVNUX1RZUEVfRklM RSwgInIiKTsKKwlpZ3RfcmVxdWlyZSh0ZXN0X3R5cGVfZnApOworCisJdGVzdF9kYXRhX2ZwID0g aWd0X2RlYnVnZnNfZm9wZW4oSU5URUxfRFBfVEVTVF9EQVRBX0ZJTEUsICJyIik7CisJaWd0X3Jl cXVpcmUodGVzdF9kYXRhX2ZwKTsKKworCXRlc3RfYWN0aXZlX2ZwID0gaWd0X2RlYnVnZnNfZm9w ZW4oSU5URUxfRFBfVEVTVF9BQ1RJVkVfRklMRSwgIncrIik7CisJaWd0X3JlcXVpcmUodGVzdF9h Y3RpdmVfZnApOworCisJLyogUmVzZXQgdGhlIGFjdGl2ZSBmbGFnIGZvciBzYWZldHkgKi8KKwlj bGVhcl90ZXN0X2FjdGl2ZSgpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfdGVzdF90 eXBlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB0ZXN0X3R5cGU7CisKKwlpZiAoIXRlc3RfdHlw ZV9mcCkKKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIFRlc3QgVHlwZSBGaWxlIHBvaW50clxy XG4iKTsKKwlyZXdpbmQodGVzdF90eXBlX2ZwKTsKKwlmc2NhbmYodGVzdF90eXBlX2ZwLCAiJTAy bHgiLCAmdGVzdF90eXBlKTsKKwlpZiAodGVzdF90eXBlIDw9IDApIHsKKwkJaWd0X3dhcm4oIlRl c3QgdHlwZSByZWFkIGZhaWxlZCAtICUwMmx4XHJcbiIsIHRlc3RfdHlwZSk7CisJCXJldHVybiAw OworCX0KKworCXJldHVybiB0ZXN0X3R5cGU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdl dF90ZXN0X2VkaWRfZGF0YSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdGVzdF9kYXRhOworCisJ aWYgKCF0ZXN0X2RhdGFfZnApCisJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBUZXN0IGRhdGEg RmlsZSBQb2ludGVyXHJcbiIpOworCisJcmV3aW5kKHRlc3RfZGF0YV9mcCk7CisJZnNjYW5mKHRl c3RfZGF0YV9mcCwgIiVseCIsICZ0ZXN0X2RhdGEpOworCWlmICh0ZXN0X2RhdGEgPD0gMCkgewor CQlpZ3Rfd2FybigiVGVzdCBkYXRhIHJlYWQgZmFpbGVkIC0gJWx4XHJcbiIsIHRlc3RfZGF0YSk7 CisJCXJldHVybiAwOworCX0KKworCXJldHVybiB0ZXN0X2RhdGE7Cit9CisKK3N0YXRpYyB2b2lk IGdldF90ZXN0X3ZpZGVvcGF0dGVybl9kYXRhKHZvaWQpCit7CisJaW50IGNvdW50ID0gMDsKKwl1 aW50MTZfdCB2aWRlb19wYXR0ZXJuX3ZhbHVlWzNdOworCWNoYXIgdmlkZW9fcGF0dGVybl9hdHRy aWJ1dGVbMTVdOworCisJaWYgKCF0ZXN0X2RhdGFfZnApCisJCWZwcmludGYoc3RkZXJyLCAiSW52 YWxpZCBUZXN0IGRhdGEgRmlsZSBwb2ludGVyXHJcbiIpOworCisJcmV3aW5kKHRlc3RfZGF0YV9m cCk7CisJd2hpbGUgKCFmZW9mKHRlc3RfZGF0YV9mcCkgJiYgY291bnQgPCAzKQorCQlmc2NhbmYo dGVzdF9kYXRhX2ZwLCAiJXMgJXVcbiIsIHZpZGVvX3BhdHRlcm5fYXR0cmlidXRlLAorCQkgICAg ICAgKHVuc2lnbmVkIGludCAqKSZ2aWRlb19wYXR0ZXJuX3ZhbHVlW2NvdW50KytdKTsKKworCWhk aXNwbGF5ID0gdmlkZW9fcGF0dGVybl92YWx1ZVswXTsKKwl2ZGlzcGxheSA9IHZpZGVvX3BhdHRl cm5fdmFsdWVbMV07CisJYml0ZGVwdGggPSB2aWRlb19wYXR0ZXJuX3ZhbHVlWzJdOworCWlndF9p bmZvKCJIZGlzcGxheSA9ICVkXHJcbiIsIGhkaXNwbGF5KTsKKwlpZ3RfaW5mbygiVmRpc3BsYXkg PSAlZFxyXG4iLCB2ZGlzcGxheSk7CisJaWd0X2luZm8oIkJpdERlcHRoID0gJXVcclxuIiwgYml0 ZGVwdGgpOworCit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc190ZXN0X3JlcXVlc3QoaW50IHRlc3Rf dHlwZSkKK3sKKwlpbnQgbW9kZTsKKwl1bnNpZ25lZCBsb25nIHRlc3RfZGF0YV9lZGlkOworCWlu dCBzdGF0dXMgPSAwOworCisJc3dpdGNoICh0ZXN0X3R5cGUpIHsKKwljYXNlIERQX1RFU1RfTElO S19WSURFT19QQVRURVJOOgorCQl2aWRlb19wYXR0ZXJuX2ZsYWcgPSB0cnVlOworCQlnZXRfdGVz dF92aWRlb3BhdHRlcm5fZGF0YSgpOworCQltb2RlID0gSU5URUxfTU9ERV9WSURFT19QQVRURVJO X1RFU1Q7CisJCWJyZWFrOworCWNhc2UgRFBfVEVTVF9MSU5LX0VESURfUkVBRDoKKwkJdGVzdF9k YXRhX2VkaWQgPSBnZXRfdGVzdF9lZGlkX2RhdGEoKTsKKwkJbW9kZSA9ICh0ZXN0X2RhdGFfZWRp ZCAmIERQX0NPTVBMSUFOQ0VfVklERU9fTU9ERV9NQVNLKSA+PgorCQkJSU5URUxfRFBfUkVTT0xV VElPTl9TSElGVF9NQVNLOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBVbmtub3duIHRlc3Qg dHlwZSAqLworCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgdGVzdCByZXF1ZXN0LiBJZ25vcmVk LlxyXG4iKTsKKwkJYnJlYWs7CisJfQorCXN0YXR1cyA9IHVwZGF0ZV9kaXNwbGF5KG1vZGUsIHRy dWUpOworCisJLyogUmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgLTEgb24gZmFpbHVyZSAqLworCXJl dHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfY29ubmVjdG9yc19mZChpbnQgZHJt ZmQpCit7CisJaW50IGksIGo7CisKKwlkcm1Nb2RlUmVzICptb2RlX3Jlc291cmNlcyA9IGRybU1v ZGVHZXRSZXNvdXJjZXMoZHJtZmQpOworCisJaWYgKCFtb2RlX3Jlc291cmNlcykgeworCQlpZ3Rf d2FybigiZHJtTW9kZUdldFJlc291cmNlcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykp OworCQlyZXR1cm47CisJfQorCisJaWd0X2luZm8oIkNvbm5lY3RvcnM6XG4iKTsKKwlpZ3RfaW5m bygiaWRcdGVuY29kZXJcdHN0YXR1c1x0XHR0eXBlXHRzaXplIChtbSlcdG1vZGVzXG4iKTsKKwlm b3IgKGkgPSAwOyBpIDwgbW9kZV9yZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3RvcnM7IGkrKykgewor CQlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3I7CisKKwkJY29ubmVjdG9yID0gZHJtTW9kZUdl dENvbm5lY3RvckN1cnJlbnQoZHJtZmQsCisJCQkJCQkgICAgICAgbW9kZV9yZXNvdXJjZXMtPmNv bm5lY3RvcnNbaV0pOworCQlpZiAoIWNvbm5lY3RvcikgeworCQkJaWd0X3dhcm4oImNvdWxkIG5v dCBnZXQgY29ubmVjdG9yICVpOiAlc1xuIiwgbW9kZV9yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0s IHN0cmVycm9yKGVycm5vKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlndF9pbmZvKCIlZFx0 JWRcdCVzXHQlc1x0JWR4JWRcdFx0JWRcbiIsIGNvbm5lY3Rvci0+Y29ubmVjdG9yX2lkLCBjb25u ZWN0b3ItPmVuY29kZXJfaWQsIGttc3Rlc3RfY29ubmVjdG9yX3N0YXR1c19zdHIoY29ubmVjdG9y LT5jb25uZWN0aW9uKSwga21zdGVzdF9jb25uZWN0b3JfdHlwZV9zdHIoY29ubmVjdG9yLT5jb25u ZWN0b3JfdHlwZSksIGNvbm5lY3Rvci0+bW1XaWR0aCwgY29ubmVjdG9yLT5tbUhlaWdodCwgY29u bmVjdG9yLT5jb3VudF9tb2Rlcyk7CisKKwkJaWYgKCFjb25uZWN0b3ItPmNvdW50X21vZGVzKQor CQkJY29udGludWU7CisKKwkJaWd0X2luZm8oIiAgbW9kZXM6XG4iKTsKKwkJaWd0X2luZm8oIiAg bmFtZSByZWZyZXNoIChIeikgaGRpc3AgaHNzIGhzZSBodG90IHZkaXNwICIidnNzIHZzZSB2dG90 IGZsYWdzIHR5cGUgY2xvY2tcbiIpOworCQlmb3IgKGogPSAwOyBqIDwgY29ubmVjdG9yLT5jb3Vu dF9tb2RlczsgaisrKSB7CisJCQlpZ3RfaW5mbygiWyVkXSIsIGopOworCQkJa21zdGVzdF9kdW1w X21vZGUoJmNvbm5lY3Rvci0+bW9kZXNbal0pOworCQl9CisKKwkJZHJtTW9kZUZyZWVDb25uZWN0 b3IoY29ubmVjdG9yKTsKKwl9CisJaWd0X2luZm8oIlxuIik7CisKKwlkcm1Nb2RlRnJlZVJlc291 cmNlcyhtb2RlX3Jlc291cmNlcyk7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfY3J0Y3NfZmQoaW50 IGRybWZkKQoreworCWludCBpOworCWRybU1vZGVSZXMgKm1vZGVfcmVzb3VyY2VzID0gZHJtTW9k ZUdldFJlc291cmNlcyhkcm1mZCk7CisKKwlpZ3RfaW5mbygiQ1JUQ3M6XG4iKTsKKwlpZ3RfaW5m bygiaWRcdGZiXHRwb3NcdHNpemVcbiIpOworCWZvciAoaSA9IDA7IGkgPCBtb2RlX3Jlc291cmNl cy0+Y291bnRfY3J0Y3M7IGkrKykgeworCQlkcm1Nb2RlQ3J0YyAqY3J0YzsKKworCQljcnRjID0g ZHJtTW9kZUdldENydGMoZHJtZmQsIG1vZGVfcmVzb3VyY2VzLT5jcnRjc1tpXSk7CisJCWlmICgh Y3J0YykgeworCQkJaWd0X3dhcm4oImNvdWxkIG5vdCBnZXQgY3J0YyAlaTogJXNcbiIsIG1vZGVf cmVzb3VyY2VzLT5jcnRjc1tpXSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWNvbnRpbnVlOworCQl9 CisJCWlndF9pbmZvKCIlZFx0JWRcdCglZCwlZClcdCglZHglZClcbiIsIGNydGMtPmNydGNfaWQs IGNydGMtPmJ1ZmZlcl9pZCwgY3J0Yy0+eCwgY3J0Yy0+eSwgY3J0Yy0+d2lkdGgsIGNydGMtPmhl aWdodCk7CisJCWttc3Rlc3RfZHVtcF9tb2RlKCZjcnRjLT5tb2RlKTsKKworCQlkcm1Nb2RlRnJl ZUNydGMoY3J0Yyk7CisJfQorCWlndF9pbmZvKCJcbiIpOworCisJZHJtTW9kZUZyZWVSZXNvdXJj ZXMobW9kZV9yZXNvdXJjZXMpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2luZm8odm9pZCkKK3sK KwlkdW1wX2Nvbm5lY3RvcnNfZmQoZHJtX2ZkKTsKKwlkdW1wX2NydGNzX2ZkKGRybV9mZCk7Cit9 CisKK3N0YXRpYyB2b2lkIGNvbm5lY3Rvcl9maW5kX3ByZWZlcnJlZF9tb2RlKHVpbnQzMl90IGNv bm5lY3Rvcl9pZCwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGNydGNfaWR4X21hc2ssCisJCQkJCSAg c3RydWN0IGNvbm5lY3RvciAqYykKK3sKKwlzdHJ1Y3Qga21zdGVzdF9jb25uZWN0b3JfY29uZmln IGNvbmZpZzsKKwlib29sIHJldDsKKworCXJldCA9IGttc3Rlc3RfcHJvYmVfY29ubmVjdG9yX2Nv bmZpZyhkcm1fZmQsIGNvbm5lY3Rvcl9pZCwKKwkJCQkJICAgICBjcnRjX2lkeF9tYXNrLCAmY29u ZmlnKTsKKwlpZiAoIXJldCkgeworCQljLT5tb2RlX3ZhbGlkID0gMDsKKwkJcmV0dXJuOworCX0K KworCWMtPmNvbm5lY3RvciA9IGNvbmZpZy5jb25uZWN0b3I7CisJYy0+ZW5jb2RlciA9IGNvbmZp Zy5lbmNvZGVyOworCWMtPmNydGMgPSBjb25maWcuY3J0Yy0+Y3J0Y19pZDsKKwljLT5waXBlID0g Y29uZmlnLnBpcGU7CisKKwlpZiAoYy0+Y29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1f TU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQgfHwKKwkgICAgYy0+Y29ubmVjdG9yLT5jb25uZWN0 aW9uICE9ICBEUk1fTU9ERV9DT05ORUNURUQpIHsKKwkJYy0+bW9kZV92YWxpZCA9IDA7CisJCXJl dHVybjsKKwl9CisKKwljLT5tb2RlID0gY29uZmlnLmRlZmF1bHRfbW9kZTsKKwljLT5tb2RlX3Zh bGlkID0gMTsKK30KKworc3RhdGljIGludCBzZXR1cF9mcmFtZWJ1ZmZlcnMoc3RydWN0IGNvbm5l Y3RvciAqZHBfY29ubikKK3sKKworCWRwX2Nvbm4tPmZiID0gaWd0X2NyZWF0ZV9mYihkcm1fZmQs CisJCQkJICAgIGRwX2Nvbm4tPmZiX3dpZHRoLCBkcF9jb25uLT5mYl9oZWlnaHQsCisJCQkJICAg IERSTV9GT1JNQVRfWFJHQjg4ODgsCisJCQkJICAgIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUs CisJCQkJICAgICZkcF9jb25uLT5mYl92aWRlb19wYXR0ZXJuKTsKKwlpZ3RfYXNzZXJ0KGRwX2Nv bm4tPmZiKTsKKworCS8qIE1hcCB0aGUgbWFwcGluZyBvZiBHRU0gb2JqZWN0IGludG8gdGhlIHZp cnR1YWwgYWRkcmVzcyBzcGFjZSAqLworCWRwX2Nvbm4tPnBpeG1hcCA9IGdlbV9tbWFwX19ndHQo ZHJtX2ZkLAorCQkJCQlkcF9jb25uLT5mYl92aWRlb19wYXR0ZXJuLmdlbV9oYW5kbGUsCisJCQkJ CWRwX2Nvbm4tPmZiX3ZpZGVvX3BhdHRlcm4uc2l6ZSwKKwkJCQkJUFJPVF9SRUFEIHwgUFJPVF9X UklURSk7CisJZ2VtX3NldF9kb21haW4oZHJtX2ZkLCBkcF9jb25uLT5mYl92aWRlb19wYXR0ZXJu LmdlbV9oYW5kbGUsCisJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01B SU5fR1RUKTsKKwlkcF9jb25uLT5mYl9zaXplID0gZHBfY29ubi0+ZmJfdmlkZW9fcGF0dGVybi5z aXplOworCisJLyogQWZ0ZXIgZmlsbGluZyB0aGUgZGV2aWNlIG1lbW9yeSB3aXRoIDBzIGl0IG5l ZWRzIHRvIGJlIHVubWFwcGVkICovCisJbWVtc2V0KGRwX2Nvbm4tPnBpeG1hcCwgMCwgZHBfY29u bi0+ZmJfc2l6ZSk7CisJbXVubWFwKGRwX2Nvbm4tPnBpeG1hcCwgZHBfY29ubi0+ZmJfc2l6ZSk7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXR1cF9mYWlsc2FmZV9mcmFtZWJ1ZmZl cihzdHJ1Y3QgY29ubmVjdG9yICpkcF9jb25uKQoreworCisJZHBfY29ubi0+ZmFpbHNhZmVfZmIg PSBpZ3RfY3JlYXRlX2ZiKGRybV9mZCwKKwkJCQkJICAgICBkcF9jb25uLT5mYWlsc2FmZV93aWR0 aCwKKwkJCQkJICAgICBkcF9jb25uLT5mYWlsc2FmZV9oZWlnaHQsCisJCQkJCSAgICAgRFJNX0ZP Uk1BVF9YUkdCODg4OCwKKwkJCQkJICAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAorCQkJ CQkgICAgICZkcF9jb25uLT5mYl9mYWlsc2FmZV9wYXR0ZXJuKTsKKwlpZ3RfYXNzZXJ0KGRwX2Nv bm4tPmZhaWxzYWZlX2ZiKTsKKworCS8qIE1hcCB0aGUgbWFwcGluZyBvZiBHRU0gb2JqZWN0IGlu dG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSAqLworCWRwX2Nvbm4tPmZhaWxzYWZlX3BpeG1h cCA9IGdlbV9tbWFwX19ndHQoZHJtX2ZkLAorCQkJCQkJIGRwX2Nvbm4tPmZiX2ZhaWxzYWZlX3Bh dHRlcm4uZ2VtX2hhbmRsZSwKKwkJCQkJCSBkcF9jb25uLT5mYl9mYWlsc2FmZV9wYXR0ZXJuLnNp emUsCisJCQkJCQkgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisJZ2VtX3NldF9kb21haW4oZHJt X2ZkLCBkcF9jb25uLT5mYl9mYWlsc2FmZV9wYXR0ZXJuLmdlbV9oYW5kbGUsCisJCSAgICAgICBJ OTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKKwlkcF9jb25uLT5mYWls c2FmZV9zaXplID0gZHBfY29ubi0+ZmJfZmFpbHNhZmVfcGF0dGVybi5zaXplOworCisJLyogQWZ0 ZXIgZmlsbGluZyB0aGUgZGV2aWNlIGZyYW1lYnVmZmVyIHRoZSBtYXBwZWQgbWVtb3J5IG5lZWRz IHRvIGJlIGZyZWVkICovCisJbWVtc2V0KGRwX2Nvbm4tPmZhaWxzYWZlX3BpeG1hcCwgMCwgZHBf Y29ubi0+ZmFpbHNhZmVfc2l6ZSk7CisJbXVubWFwKGRwX2Nvbm4tPmZhaWxzYWZlX3BpeG1hcCwg ZHBfY29ubi0+ZmFpbHNhZmVfc2l6ZSk7CisKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50 IHNldHVwX3ZpZGVvX3BhdHRlcm5fZnJhbWVidWZmZXIoc3RydWN0IGNvbm5lY3RvciAqZHBfY29u bikKK3sKKwl1aW50MzJfdCAgdmlkZW9fd2lkdGgsIHZpZGVvX2hlaWdodDsKKworCXZpZGVvX3dp ZHRoID0gZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmhkaXNwbGF5OworCXZpZGVvX2hlaWdodCA9IGRw X2Nvbm4tPnRlc3RfcGF0dGVybi52ZGlzcGxheTsKKwlkcF9jb25uLT50ZXN0X3BhdHRlcm4uZmIg PSBpZ3RfY3JlYXRlX2ZiKGRybV9mZCwKKwkJCQkJCSB2aWRlb193aWR0aCwgdmlkZW9faGVpZ2h0 LAorCQkJCQkJIERSTV9GT1JNQVRfWFJHQjg4ODgsCisJCQkJCQkgTE9DQUxfRFJNX0ZPUk1BVF9N T0RfTk9ORSwKKwkJCQkJCSAmZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmZiX3BhdHRlcm4pOworCWln dF9hc3NlcnQoZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmZiKTsKKworCS8qIE1hcCB0aGUgbWFwcGlu ZyBvZiBHRU0gb2JqZWN0IGludG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSAqLworCWRwX2Nv bm4tPnRlc3RfcGF0dGVybi5waXhtYXAgPSBnZW1fbW1hcF9fZ3R0KGRybV9mZCwKKwkJCQkJCSAg ICAgZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmZiX3BhdHRlcm4uZ2VtX2hhbmRsZSwKKwkJCQkJCSAg ICAgZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmZiX3BhdHRlcm4uc2l6ZSwKKwkJCQkJCSAgICAgUFJP VF9SRUFEIHwgUFJPVF9XUklURSk7CisJZ2VtX3NldF9kb21haW4oZHJtX2ZkLCBkcF9jb25uLT50 ZXN0X3BhdHRlcm4uZmJfcGF0dGVybi5nZW1faGFuZGxlLAorCQkgICAgICAgSTkxNV9HRU1fRE9N QUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7CisKKwlkcF9jb25uLT50ZXN0X3BhdHRlcm4u c2l6ZSA9IGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5mYl9wYXR0ZXJuLnNpemU7CisKKwltZW1zZXQo ZHBfY29ubi0+dGVzdF9wYXR0ZXJuLnBpeG1hcCwgMCwgZHBfY29ubi0+dGVzdF9wYXR0ZXJuLnNp emUpOworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgZmlsbF9mcmFtZWJ1ZmZlcihzdHJ1 Y3QgY29ubmVjdG9yICpkcF9jb25uKQoreworCXVpbnQzMl90IHRpbGVfaGVpZ2h0LCB0aWxlX3dp ZHRoLCB2aWRlb193aWR0aCwgdmlkZW9faGVpZ2h0OworCXVpbnQzMl90ICpyZWRfcHRyLCAqZ3Jl ZW5fcHRyLCAqYmx1ZV9wdHIsICp3aGl0ZV9wdHIsICpzcmNfcHRyLCAqZHN0X3B0cjsKKwlpbnQg eCwgeTsKKwlpbnQzMl90IHBpeGVsX3ZhbDsKKworCXZpZGVvX3dpZHRoID0gZHBfY29ubi0+dGVz dF9wYXR0ZXJuLmhkaXNwbGF5OworCXZpZGVvX2hlaWdodCA9IGRwX2Nvbm4tPnRlc3RfcGF0dGVy bi52ZGlzcGxheTsKKworCXRpbGVfaGVpZ2h0ID0gNjQ7CisJdGlsZV93aWR0aCA9IDEgPDwgIChk cF9jb25uLT50ZXN0X3BhdHRlcm4uYml0ZGVwdGgpOworCisJcmVkX3B0ciA9IGRwX2Nvbm4tPnRl c3RfcGF0dGVybi5waXhtYXA7CisJZ3JlZW5fcHRyID0gcmVkX3B0ciArICh2aWRlb193aWR0aCAq IHRpbGVfaGVpZ2h0KTsKKwlibHVlX3B0ciA9IGdyZWVuX3B0ciArICh2aWRlb193aWR0aCAqIHRp bGVfaGVpZ2h0KTsKKwl3aGl0ZV9wdHIgPSBibHVlX3B0ciArICh2aWRlb193aWR0aCAqIHRpbGVf aGVpZ2h0KTsKKwl4ID0gMDsKKworCS8qIEZpbGwgdGhlIGZyYW1lIGJ1ZmZlciB3aXRoIHZpZGVv IHBhdHRlcm4gZnJvbSBDVFMgMy4xLjUgKi8KKwl3aGlsZSAoeCA8IHZpZGVvX3dpZHRoKSB7CisJ CWZvciAocGl4ZWxfdmFsID0gMDsgcGl4ZWxfdmFsIDwgMjU2OworCQkgICAgIHBpeGVsX3ZhbCA9 IHBpeGVsX3ZhbCArICgyNTYgLyB0aWxlX3dpZHRoKSkgeworCQkJcmVkX3B0clt4XSA9IHBpeGVs X3ZhbCA8PCAxNjsKKwkJCWdyZWVuX3B0clt4XSA9IHBpeGVsX3ZhbCA8PCA4OworCQkJYmx1ZV9w dHJbeF0gPSBwaXhlbF92YWwgPDwgMDsKKwkJCXdoaXRlX3B0clt4XSA9IHJlZF9wdHJbeF0gfCBn cmVlbl9wdHJbeF0gfCBibHVlX3B0clt4XTsKKwkJCWlmICgrK3ggPj0gdmlkZW9fd2lkdGgpCisJ CQkJYnJlYWs7CisJCX0KKwl9CisJZm9yICh5ID0gMDsgeSA8IHZpZGVvX2hlaWdodDsgeSsrKSB7 CisJCWlmICh5ID09IDAgfHwgeSA9PSA2NCB8fCB5ID09IDEyOCB8fCB5ID09IDE5MikKKwkJCWNv bnRpbnVlOworCQlzd2l0Y2ggKCh5IC8gdGlsZV9oZWlnaHQpICUgNCkgeworCQljYXNlIDA6CisJ CQlzcmNfcHRyID0gcmVkX3B0cjsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlzcmNfcHRyID0g Z3JlZW5fcHRyOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXNyY19wdHIgPSBibHVlX3B0cjsK KwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlzcmNfcHRyID0gd2hpdGVfcHRyOworCQkJYnJlYWs7 CisJCX0KKwkJZHN0X3B0ciA9IGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5waXhtYXAgKyAoeSAqIHZp ZGVvX3dpZHRoKTsKKwkJbWVtY3B5KGRzdF9wdHIsIHNyY19wdHIsICh2aWRlb193aWR0aCAqIDQp KTsKKwl9CisJbXVubWFwKGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5waXhtYXAsCisJICAgICAgIGRw X2Nvbm4tPnRlc3RfcGF0dGVybi5zaXplKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBz ZXRfdGVzdF9tb2RlKHN0cnVjdCBjb25uZWN0b3IgKmRwX2Nvbm4pCit7CisJaW50IHJldCA9IDA7 CisJaW50IGk7CisJYm9vbCBmb3VuZF9zdGQgPSBmYWxzZSwgZm91bmRfZnMgPSBmYWxzZTsKKwlk cm1Nb2RlQ29ubmVjdG9yICpjID0gZHBfY29ubi0+Y29ubmVjdG9yOworCisJLyogSWdub3JlIGFu eSBkaXNjb25uZWN0ZWQgZGV2aWNlcyAqLworCWlmIChjLT5jb25uZWN0aW9uICE9IERSTV9NT0RF X0NPTk5FQ1RFRCkgeworCQlpZ3Rfd2FybigiQ29ubmVjdG9yICV1IGRpc2Nvbm5lY3RlZFxyXG4i LCBjLT5jb25uZWN0b3JfaWQpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJaWd0X2luZm8oIkNv bm5lY3RvciBTZXR1cDpcclxuIik7CisJLyogU2V0dXAgcHJlZmVycmVkIG1vZGUgLSBzaG91bGQg YmUgbW9kZVswXSBpbiB0aGUgbGlzdCAqLworCWRwX2Nvbm4tPm1vZGVfcHJlZmVycmVkID0gYy0+ bW9kZXNbMF07CisJZHBfY29ubi0+ZmJfd2lkdGggPSBjLT5tb2Rlc1swXS5oZGlzcGxheTsKKwlk cF9jb25uLT5mYl9oZWlnaHQgPSBjLT5tb2Rlc1swXS52ZGlzcGxheTsKKworCWRwX2Nvbm4tPnRl c3RfcGF0dGVybi5tb2RlID0gYy0+bW9kZXNbMF07CisJZHBfY29ubi0+dGVzdF9wYXR0ZXJuLm1v ZGUuaGRpc3BsYXkgPSBjLT5tb2Rlc1swXS5oZGlzcGxheTsKKwlkcF9jb25uLT50ZXN0X3BhdHRl cm4ubW9kZS52ZGlzcGxheSA9IGMtPm1vZGVzWzBdLnZkaXNwbGF5OworCisJaWd0X2luZm8oIlBy ZWZlcnJlZCBtb2RlIChtb2RlIDApIGZvciBjb25uZWN0b3IgJXUgaXMgJXV4JXVcclxuIiwKKwkJ IGRwX2Nvbm4tPmlkLCBjLT5tb2Rlc1swXS5oZGlzcGxheSwgYy0+bW9kZXNbMF0udmRpc3BsYXkp OworCWZmbHVzaChzdGRpbik7CisKKwlmb3IgKGkgPSAxOyBpIDwgYy0+Y291bnRfbW9kZXM7IGkr KykgeworCQkvKiBTdGFuZGFyZCBtb2RlIGlzIDgwMHg2MDBANjAgKi8KKwkJaWYgKGMtPm1vZGVz W2ldLmhkaXNwbGF5ID09IDgwMCAmJgorCQkgICAgYy0+bW9kZXNbaV0udmRpc3BsYXkgPT0gNjAw ICYmCisJCSAgICBjLT5tb2Rlc1tpXS52cmVmcmVzaCA9PSA2MCAmJgorCQkgICAgZm91bmRfc3Rk ID09IGZhbHNlKSB7CisJCQlkcF9jb25uLT5tb2RlX3N0YW5kYXJkID0gYy0+bW9kZXNbaV07CisJ CQlpZ3RfaW5mbygiU3RhbmRhcmQgbW9kZSAoJWQpIGZvciBjb25uZWN0b3IgJXUgaXMgJXV4JXVc clxuIiwKKwkJCQkgaSwKKwkJCQkgYy0+Y29ubmVjdG9yX2lkLAorCQkJCSBjLT5tb2Rlc1tpXS5o ZGlzcGxheSwKKwkJCQkgYy0+bW9kZXNbaV0udmRpc3BsYXkpOworCQkJZm91bmRfc3RkID0gdHJ1 ZTsKKwkJfQorCQkvKiBGYWlsc2FmZSBtb2RlIGlzIDY0MHg0ODBANjAgKi8KKwkJaWYgKGMtPm1v ZGVzW2ldLmhkaXNwbGF5ID09IDY0MCAmJgorCQkgICAgYy0+bW9kZXNbaV0udmRpc3BsYXkgPT0g NDgwICYmCisJCSAgICBjLT5tb2Rlc1tpXS52cmVmcmVzaCA9PSA2MCAmJgorCQkgICAgZm91bmRf ZnMgPT0gZmFsc2UpIHsKKwkJCWRwX2Nvbm4tPm1vZGVfZmFpbHNhZmUgPSBjLT5tb2Rlc1tpXTsK KwkJCWRwX2Nvbm4tPmZhaWxzYWZlX3dpZHRoID0gYy0+bW9kZXNbaV0uaGRpc3BsYXk7CisJCQlk cF9jb25uLT5mYWlsc2FmZV9oZWlnaHQgPSBjLT5tb2Rlc1tpXS52ZGlzcGxheTsKKwkJCWlndF9p bmZvKCJGYWlsc2FmZSBtb2RlICglZCkgZm9yIGNvbm5lY3RvciAldSBpcyAldXgldVxyXG4iLAor CQkJCSBpLAorCQkJCSBjLT5jb25uZWN0b3JfaWQsCisJCQkJIGMtPm1vZGVzW2ldLmhkaXNwbGF5 LAorCQkJCSBjLT5tb2Rlc1tpXS52ZGlzcGxheSk7CisJCQlmb3VuZF9mcyA9IHRydWU7CisJCX0K Kwl9CisKKwlyZXQgPSBzZXR1cF9mcmFtZWJ1ZmZlcnMoZHBfY29ubik7CisJaWYgKHJldCkgewor CQlpZ3Rfd2FybigiQ3JlYXRlIGZyYW1lYnVmZmVyIGZvciBjb25uZWN0b3IgJXUgZmFpbGVkICgl ZClcclxuIiwKKwkJCSBjLT5jb25uZWN0b3JfaWQsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQor CisJaWYgKGZvdW5kX2ZzKSB7CisJCXJldCA9IHNldHVwX2ZhaWxzYWZlX2ZyYW1lYnVmZmVyKGRw X2Nvbm4pOworCQlpZiAocmV0KSB7CisJCQlpZ3Rfd2FybigiQ3JlYXRlIGZhaWxzYWZlIGZyYW1l YnVmZmVyIGZvciBjb25uZWN0b3IgJXUiCisJCQkJICJmYWlsZWQgKCVkKVxyXG4iLAorCQkJCSBj LT5jb25uZWN0b3JfaWQsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJaWYgKHZp ZGVvX3BhdHRlcm5fZmxhZykgeworCQlkcF9jb25uLT50ZXN0X3BhdHRlcm4uaGRpc3BsYXkgPSBo ZGlzcGxheTsKKwkJZHBfY29ubi0+dGVzdF9wYXR0ZXJuLnZkaXNwbGF5ID0gdmRpc3BsYXk7CisJ CWRwX2Nvbm4tPnRlc3RfcGF0dGVybi5iaXRkZXB0aCA9IGJpdGRlcHRoOworCQlyZXQgPSBzZXR1 cF92aWRlb19wYXR0ZXJuX2ZyYW1lYnVmZmVyKGRwX2Nvbm4pOworCQlpZiAocmV0KSB7CisJCQlp Z3Rfd2FybigiQ3JlYXRlIGZyYW1lYnVmZmVyIGZvciBjb25uZWN0b3IgJXUgZmFpbGVkICglZClc clxuIiwKKwkJCQkgYy0+Y29ubmVjdG9yX2lkLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQor CQlyZXQgPSBmaWxsX2ZyYW1lYnVmZmVyKGRwX2Nvbm4pOworCQlpZiAocmV0KSB7CisJCQlpZ3Rf d2FybigiRmlsbCBmcmFtZWJ1ZmZlciBmb3IgY29ubmVjdG9yICV1IGZhaWxlZCAoJWQpXHJcbiIs CisJCQkJIGMtPmNvbm5lY3Rvcl9pZCwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNldF92aWRlbyhpbnQgbW9kZSwgc3RydWN0 IGNvbm5lY3RvciAqdGVzdF9jb25uZWN0b3IpCit7CisJZHJtTW9kZU1vZGVJbmZvICpyZXF1ZXN0 ZWRfbW9kZTsKKwl1aW50MzJfdCByZXF1aXJlZF9mYl9pZDsKKwlzdHJ1Y3QgaWd0X2ZiIHJlcXVp cmVkX2ZiOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBJTlRFTF9N T0RFX05PTkU6CisJCWlndF9pbmZvKCJOT05FXHJcbiIpOworCQlyZXQgPSBkcm1Nb2RlU2V0Q3J0 Yyhkcm1fZmQsIHRlc3RfY29ubmVjdG9yLT5jcnRjLAorCQkJCSAgICAgLTEsIDAsIDAsIE5VTEws IDAsIE5VTEwpOworCQlnb3RvIG91dDsKKwljYXNlIElOVEVMX01PREVfUFJFRkVSUkVEOgorCQlp Z3RfaW5mbygiUFJFRkVSUkVEXHJcbiIpOworCQlyZXF1ZXN0ZWRfbW9kZSA9ICAmdGVzdF9jb25u ZWN0b3ItPm1vZGVfcHJlZmVycmVkOworCQlyZXF1aXJlZF9mYl9pZCA9IHRlc3RfY29ubmVjdG9y LT5mYjsKKwkJcmVxdWlyZWRfZmIgPSB0ZXN0X2Nvbm5lY3Rvci0+ZmJfdmlkZW9fcGF0dGVybjsK KwkJYnJlYWs7CisJY2FzZSBJTlRFTF9NT0RFX1NUQU5EQVJEOgorCQlpZ3RfaW5mbygiU1RBTkRB UkRcclxuIik7CisJCXJlcXVlc3RlZF9tb2RlID0gICZ0ZXN0X2Nvbm5lY3Rvci0+bW9kZV9zdGFu ZGFyZDsKKwkJcmVxdWlyZWRfZmJfaWQgPSB0ZXN0X2Nvbm5lY3Rvci0+ZmI7CisJCXJlcXVpcmVk X2ZiID0gdGVzdF9jb25uZWN0b3ItPmZiX3ZpZGVvX3BhdHRlcm47CisJCWJyZWFrOworCWNhc2Ug SU5URUxfTU9ERV9GQUlMU0FGRToKKwkJaWd0X2luZm8oIkZBSUxTQUZFXHJcbiIpOworCQlyZXF1 ZXN0ZWRfbW9kZSA9ICAmdGVzdF9jb25uZWN0b3ItPm1vZGVfZmFpbHNhZmU7CisJCXJlcXVpcmVk X2ZiX2lkID0gdGVzdF9jb25uZWN0b3ItPmZhaWxzYWZlX2ZiOworCQlyZXF1aXJlZF9mYiA9IHRl c3RfY29ubmVjdG9yLT5mYl9mYWlsc2FmZV9wYXR0ZXJuOworCQlicmVhazsKKwljYXNlIElOVEVM X01PREVfVklERU9fUEFUVEVSTl9URVNUOgorCQlpZ3RfaW5mbygiVklERU8gUEFUVEVSTiBURVNU XHJcbiIpOworCQlyZXF1ZXN0ZWRfbW9kZSA9ICZ0ZXN0X2Nvbm5lY3Rvci0+dGVzdF9wYXR0ZXJu Lm1vZGU7CisJCXJlcXVpcmVkX2ZiX2lkID0gdGVzdF9jb25uZWN0b3ItPnRlc3RfcGF0dGVybi5m YjsKKwkJcmVxdWlyZWRfZmIgPSB0ZXN0X2Nvbm5lY3Rvci0+dGVzdF9wYXR0ZXJuLmZiX3BhdHRl cm47CisJCWJyZWFrOworCWNhc2UgSU5URUxfTU9ERV9JTlZBTElEOgorCWRlZmF1bHQ6CisJCWln dF93YXJuKCJJTlZBTElEISAoJTA4eCkgTW9kZSBzZXQgYWJvcnRlZCFcclxuIiwgbW9kZSk7CisJ CXJldHVybiAtMTsKKwl9CisKKwlpZ3RfaW5mbygiQ1JUQygldSk6IiwgdGVzdF9jb25uZWN0b3It PmNydGMpOworCWttc3Rlc3RfZHVtcF9tb2RlKHJlcXVlc3RlZF9tb2RlKTsKKwlyZXQgPSBkcm1N b2RlU2V0Q3J0Yyhkcm1fZmQsIHRlc3RfY29ubmVjdG9yLT5jcnRjLCByZXF1aXJlZF9mYl9pZCwg MCwgMCwKKwkJCSAgICAgJnRlc3RfY29ubmVjdG9yLT5pZCwgMSwgcmVxdWVzdGVkX21vZGUpOwor CWlmIChyZXQpIHsKKwkJaWd0X3dhcm4oImZhaWxlZCB0byBzZXQgbW9kZSAoJWR4JWRAJWRIeik6 ICVzXG4iLAorCQkJIHJlcXVlc3RlZF9tb2RlLT5oZGlzcGxheSwgcmVxdWVzdGVkX21vZGUtPnZk aXNwbGF5LAorCQkJIHJlcXVlc3RlZF9tb2RlLT52cmVmcmVzaCwgc3RyZXJyb3IoZXJybm8pKTsK KwkJaWd0X3JlbW92ZV9mYihkcm1fZmQsICZyZXF1aXJlZF9mYik7CisKKwl9CisJLyogS2VlcCB0 aGUgcGF0dGVybiBvbiBvdXRwdXQgbGluZXMgZm9yIGF0bGVhc3QgMC41IHNlY3MgZm9yCisJICog RFBSLTEyMCB0byBkZXRlY3QgaXQuCisJICovCisJdXNsZWVwKDEwMDAwMDApOworCitvdXQ6CisJ aWYgKHJldCkgeworCQlpZ3Rfd2FybigiRmFpbGVkIHRvIHNldCBDUlRDIGZvciBjb25uZWN0b3Ig JXVcclxuIiwKKwkJCSB0ZXN0X2Nvbm5lY3Rvci0+aWQpOworCX0KKworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBpbnQKK3NldF9kZWZhdWx0X21vZGUoc3RydWN0IGNvbm5lY3RvciAqYykKK3sK Kwl1bnNpZ25lZCBpbnQgZmJfaWQgPSAwOworCXN0cnVjdCBpZ3RfZmIgZmJfaW5mbzsKKwlpbnQg cmV0ID0gMDsKKworCWMtPm1vZGUgPSBjLT5jb25uZWN0b3ItPm1vZGVzWzBdOworCisJaWYgKCFj LT5tb2RlX3ZhbGlkKQorCQlyZXR1cm4gLTE7CisKKwl3aWR0aCA9IGMtPm1vZGUuaGRpc3BsYXk7 CisJaGVpZ2h0ID0gYy0+bW9kZS52ZGlzcGxheTsKKworCWZiX2lkID0gaWd0X2NyZWF0ZV9wYXR0 ZXJuX2ZiKGRybV9mZCwgd2lkdGgsIGhlaWdodCwKKwkJCQkgICAgICBEUk1fRk9STUFUX1hSR0I4 ODg4LAorCQkJCSAgICAgIHRpbGluZywgJmZiX2luZm8pOworCisJaWd0X2luZm8oIkNSVEMoJXUp OlslZF0iLCBjLT5jcnRjLCAwKTsKKwlrbXN0ZXN0X2R1bXBfbW9kZSgmYy0+bW9kZSk7CisJZHJt TW9kZVNldENydGMoZHJtX2ZkLCBjLT5jcnRjLCAtMSwgMCwgMCwgTlVMTCwgMCwgTlVMTCk7CisJ cmV0ID0gZHJtTW9kZVNldENydGMoZHJtX2ZkLCBjLT5jcnRjLCBmYl9pZCwgMCwgMCwKKwkJCSAg ICAgJmMtPmlkLCAxLCAmYy0+bW9kZSk7CisJaWYgKHJldCkgeworCQlpZ3Rfd2FybigiZmFpbGVk IHRvIHNldCBtb2RlICglZHglZEAlZEh6KTogJXNcbiIsIHdpZHRoLCBoZWlnaHQsIGMtPm1vZGUu dnJlZnJlc2gsIHN0cmVycm9yKGVycm5vKSk7CisJCWlndF9yZW1vdmVfZmIoZHJtX2ZkLCAmZmJf aW5mbyk7CisKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmUtcHJvYmUgY29ubmVj dG9ycyBhbmQgZG8gYSBtb2Rlc2V0IGJhc2VkIG9uIHRlc3QgcmVxdWVzdCBvcgorICogaW4gY2Fz ZSBvZiBhIGhvdHBsdWcgdWV2ZW50LgorICoKKyAqIEBtb2RlOiBWaWRlbyBtb2RlIHJlcXVlc3Rl ZCBieSB0aGUgdGVzdAorICogQGlzX2NvbXBsaWFuY2VfdGVzdDogMTogSWYgaXQgaXMgYSBjb21w bGlhbmNlIHRlc3QKKyAqICAgICAgICAgICAgICAgICAgICAgIDA6IElmIGl0IGlzIGEgaG90cGx1 ZyBldmVudAorICoKKyAqIFJldHVybnM6CisgKiAwOiBPbiBTdWNjZXNzCisgKiAtMTogT24gZmFp bHVyZQorICovCitpbnQgdXBkYXRlX2Rpc3BsYXkoaW50IG1vZGUsIGJvb2wgaXNfY29tcGxpYW5j ZV90ZXN0KQoreworCXN0cnVjdCBjb25uZWN0b3IgKmNvbm5lY3RvcnM7CisJaW50IGMsIHJldCA9 IDA7CisJdW5zaWduZWQgbG9uZyBjcnRjX2lkeF9tYXNrID0gLTFVTDsKKworCXJlc291cmNlcyA9 IGRybU1vZGVHZXRSZXNvdXJjZXMoZHJtX2ZkKTsKKwlpZiAoIXJlc291cmNlcykgeworCQlpZ3Rf d2FybigiZHJtTW9kZUdldFJlc291cmNlcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykp OworCQlyZXR1cm4gLTE7CisJfQorCisJY29ubmVjdG9ycyA9IGNhbGxvYyhyZXNvdXJjZXMtPmNv dW50X2Nvbm5lY3RvcnMsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBjb25uZWN0b3IpKTsKKwlpZiAo IWNvbm5lY3RvcnMpCisJCXJldHVybiAtMTsKKworCS8qIEZpbmQgYW55IGNvbm5lY3RlZCBkaXNw bGF5cyAqLworCWZvciAoYyA9IDA7IGMgPCByZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3RvcnM7IGMr KykgeworCisJCXN0cnVjdCBjb25uZWN0b3IgKmNvbm5lY3RvciA9ICZjb25uZWN0b3JzW2NdOwor CisJCWNvbm5lY3Rvci0+aWQgPSByZXNvdXJjZXMtPmNvbm5lY3RvcnNbY107CisJCWNvbm5lY3Rv cl9maW5kX3ByZWZlcnJlZF9tb2RlKGNvbm5lY3Rvci0+aWQsCisJCQkJCSAgICAgIGNydGNfaWR4 X21hc2ssCisJCQkJCSAgICAgIGNvbm5lY3Rvcik7CisJCWlmICghY29ubmVjdG9yLT5tb2RlX3Zh bGlkKQorCQkJY29udGludWU7CisJCWlmIChpc19jb21wbGlhbmNlX3Rlc3QpIHsKKwkJCXNldF90 ZXN0X21vZGUoY29ubmVjdG9yKTsKKwkJCXJldCA9IHNldF92aWRlbyhJTlRFTF9NT0RFX05PTkUs IGNvbm5lY3Rvcik7CisJCQlyZXQgPSBzZXRfdmlkZW8obW9kZSwgY29ubmVjdG9yKTsKKworCQl9 IGVsc2UKKwkJCXJldCA9IHNldF9kZWZhdWx0X21vZGUoY29ubmVjdG9yKTsKKworCQljcnRjX2lk eF9tYXNrICY9IH4oMSA8PCBjb25uZWN0b3ItPnBpcGUpOworCisJCWRybU1vZGVGcmVlRW5jb2Rl cihjb25uZWN0b3ItPmVuY29kZXIpOworCQlkcm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3It PmNvbm5lY3Rvcik7CisKKwl9CisKKwkvKiBFcnJvciBjb25kaXRpb24gaWYgbm8gY29ubmVjdGVk IGRpc3BsYXlzICovCisKKwlmcmVlKGNvbm5lY3RvcnMpOworCWRybU1vZGVGcmVlUmVzb3VyY2Vz KHJlc291cmNlcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgb3B0c3Ry W10gPSAiaGkiOworCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpIHVzYWdl KGNoYXIgKm5hbWUsIGNoYXIgb3B0KQoreworCWlndF9pbmZvKCJ1c2FnZTogJXMgWy1oaV1cbiIs IG5hbWUpOworCWlndF9pbmZvKCJcdC1pXHRkdW1wIGluZm9cbiIpOworCWlndF9pbmZvKCJcdERl ZmF1bHQgaXMgdG8gcmVzcG9uZCB0byBEUFItMTIwIHRlc3RzLlxuIik7CisJZXhpdCgob3B0ICE9 ICdoJykgPyAtMSA6IDApOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX2RlYnVnZnModm9pZCkK K3sKKwlmY2xvc2UodGVzdF9hY3RpdmVfZnApOworCWZjbG9zZSh0ZXN0X2RhdGFfZnApOworCWZj bG9zZSh0ZXN0X3R5cGVfZnApOworfQorCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChub3Jl dHVybikpIGNsZWFudXBfYW5kX2V4aXQoaW50IHJldCkKK3sKKwljbGVhbnVwX2RlYnVnZnMoKTsK KwljbG9zZShkcm1fZmQpOworCWlndF9pbmZvKCJDb21wbGlhbmNlIHRlc3RpbmcgQXBwbGljYXRp b24gRXhpdGluZ1xuIik7CisJZXhpdChyZXQpOworfQorCitzdGF0aWMgdm9pZCBjbGVhbnVwX3Rl c3Qodm9pZCkKK3sKKwl2aWRlb19wYXR0ZXJuX2ZsYWcgPSBmYWxzZTsKKwloZGlzcGxheSA9IDA7 CisJdmRpc3BsYXkgPSAwOworCWJpdGRlcHRoID0gMDsKK30KKworc3RhdGljIHZvaWQgcmVhZF90 ZXN0X3JlcXVlc3Qodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRlc3RfdHlwZTsKKworCXRlc3Rf dHlwZSA9IGdldF90ZXN0X3R5cGUoKTsKKwlwcm9jZXNzX3Rlc3RfcmVxdWVzdCh0ZXN0X3R5cGUp OworCWNsZWFudXBfdGVzdCgpOworCWNsZWFyX3Rlc3RfYWN0aXZlKCk7Cit9CisKK3N0YXRpYyBn Ym9vbGVhbiB0ZXN0X2hhbmRsZXIoR0lPQ2hhbm5lbCAqc291cmNlLCBHSU9Db25kaXRpb24gY29u ZGl0aW9uLAorCQkJICAgICBncG9pbnRlciBkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgdGVzdF9h Y3RpdmU7CisKKwlyZXdpbmQodGVzdF9hY3RpdmVfZnApOworCWZzY2FuZih0ZXN0X2FjdGl2ZV9m cCwgIiVseCIsICZ0ZXN0X2FjdGl2ZSk7CisJaWYgKHRlc3RfYWN0aXZlKQorCQlyZWFkX3Rlc3Rf cmVxdWVzdCgpOworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gaW5wdXRfZXZl bnQoR0lPQ2hhbm5lbCAqc291cmNlLCBHSU9Db25kaXRpb24gY29uZGl0aW9uLAorCQkJCWdwb2lu dGVyIGRhdGEpCit7CisJZ2NoYXIgYnVmWzJdOworCWdzaXplIGNvdW50OworCisJY291bnQgPSBy ZWFkKGdfaW9fY2hhbm5lbF91bml4X2dldF9mZChzb3VyY2UpLCBidWYsIHNpemVvZihidWYpKTsK KwlpZiAoYnVmWzBdID09ICdxJyAmJiAoY291bnQgPT0gMSB8fCBidWZbMV0gPT0gJ1xuJykpIHsK KwkJY2xlYW51cF9hbmRfZXhpdCgwKTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGlj IHZvaWQgZW50ZXJfZXhlY19wYXRoKGNoYXIgKiphcmd2KQoreworCWNoYXIgKmV4ZWNfcGF0aCA9 IE5VTEw7CisJY2hhciAqcG9zID0gTlVMTDsKKwlzaG9ydCBsZW5fcGF0aCA9IDA7CisJaW50IHJl dDsKKworCWxlbl9wYXRoID0gc3RybGVuKGFyZ3ZbMF0pOworCWV4ZWNfcGF0aCA9IChjaGFyICop IG1hbGxvYyhsZW5fcGF0aCk7CisKKwltZW1jcHkoZXhlY19wYXRoLCBhcmd2WzBdLCBsZW5fcGF0 aCk7CisJcG9zID0gc3RycmNocihleGVjX3BhdGgsICcvJyk7CisJaWYgKHBvcyAhPSBOVUxMKQor CQkqKHBvcysxKSA9ICdcMCc7CisKKwlyZXQgPSBjaGRpcihleGVjX3BhdGgpOworCWlndF9hc3Nl cnRfZXEocmV0LCAwKTsKKwlmcmVlKGV4ZWNfcGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc3Rv cmVfdGVybWlvX21vZGUoaW50IHNpZykKK3sKKwl0Y3NldGF0dHIodGlvX2ZkLCBUQ1NBTk9XLCAm c2F2ZWRfdGlvKTsKKwljbG9zZSh0aW9fZmQpOworfQorCitzdGF0aWMgdm9pZCBzZXRfdGVybWlv X21vZGUodm9pZCkKK3sKKwlzdHJ1Y3QgdGVybWlvcyB0aW87CisKKwkvKiBkb24ndCBhdHRlbXB0 IHRvIHNldCB0ZXJtaW5hbCBhdHRyaWJ1dGVzIGlmIG5vdCBpbiB0aGUgZm9yZWdyb3VuZAorCSAq IHByb2Nlc3MgZ3JvdXAKKwkgKi8KKwlpZiAoZ2V0cGdycCgpICE9IHRjZ2V0cGdycChTVERPVVRf RklMRU5PKSkKKwkJcmV0dXJuOworCisJdGlvX2ZkID0gZHVwKFNURElOX0ZJTEVOTyk7CisJdGNn ZXRhdHRyKHRpb19mZCwgJnNhdmVkX3Rpbyk7CisJaWd0X2luc3RhbGxfZXhpdF9oYW5kbGVyKHJl c3RvcmVfdGVybWlvX21vZGUpOworCXRpbyA9IHNhdmVkX3RpbzsKKwl0aW8uY19sZmxhZyAmPSB+ KElDQU5PTiB8IEVDSE8pOworCXRjc2V0YXR0cih0aW9fZmQsIFRDU0FOT1csICZ0aW8pOworfQor CitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IGM7CisJaW50IHJldCA9 IDA7CisJR0lPQ2hhbm5lbCAqc3RkaW5jaGFubmVsLCAqdGVzdGFjdGl2ZV9jaGFubmVsOworCUdN YWluTG9vcCAqbWFpbmxvb3A7CisJYm9vbCBvcHRfZHVtcF9pbmZvID0gZmFsc2U7CisJc3RydWN0 IG9wdGlvbiBsb25nX29wdHNbXSA9IHsKKwkJeyJoZWxwLWRlc2NyaXB0aW9uIiwgMCwgMCwgSEVM UF9ERVNDUklQVElPTn0sCisJCXsiaGVscCIsIDAsIDAsICdoJ30sCisJfTsKKworCWlndF9za2lw X29uX3NpbXVsYXRpb24oKTsKKworCWVudGVyX2V4ZWNfcGF0aChhcmd2KTsKKworCXdoaWxlICgo YyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIG9wdHN0ciwgbG9uZ19vcHRzLCBOVUxMKSkgIT0g LTEpIHsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ2knOgorCQkJb3B0X2R1bXBfaW5mbyA9IHRy dWU7CisJCQlicmVhazsKKwkJY2FzZSBIRUxQX0RFU0NSSVBUSU9OOgorCQkJaWd0X2luZm8oIkRQ IENvbXBsaWFuY2UgVGVzdCBTdWl0ZSB1c2luZyBEUFItMTIwXG4iKTsKKwkJCWlndF9pbmZvKCJF RElEIFRlc3RzXG4iKTsKKwkJCWlndF9pbmZvKCJWaWRlbyBQYXR0ZXJuIEdlbmVyYXRpb24gVGVz dHNcbiIpOworCQkJZXhpdCgwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogZmFsbCB0 aHJvdWdoICovCisJCWNhc2UgJ2gnOgorCQkJdXNhZ2UoYXJndlswXSwgYyk7CisJCQlicmVhazsK KwkJfQorCX0KKworCXNldF90ZXJtaW9fbW9kZSgpOworCisJaWd0X2luZm8oIioqKioqKioqKioq KipEUCBDb21wbGlhbmNlIFRlc3RpbmcgdXNpbmcgRFBSLTEyMCoqKioqKioqKioqKipcbiIpOwor CWlndF9pbmZvKCJXYWl0aW5nIGZvciBUZXN0IFJlcXVlc3QgSW5wdXQuLi4uLi5cbiIpOworCWRy bV9mZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfQU5ZKTsKKworCWlmIChvcHRfZHVtcF9pbmZv KSB7CisJCWR1bXBfaW5mbygpOworCQlnb3RvIG91dF9jbG9zZTsKKwl9CisKKwlrbXN0ZXN0X3Nl dF92dF9ncmFwaGljc19tb2RlKCk7CisJc2V0dXBfZGVidWdmc19maWxlcygpOworCWNsZWFudXBf dGVzdCgpOworCisJbWFpbmxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgRkFMU0UpOworCWlm ICghbWFpbmxvb3ApIHsKKwkJaWd0X3dhcm4oImZhaWxlZCB0byBjcmVhdGUgZ2xpYiBtYWlubG9v cFxuIik7CisJCXJldCA9IC0xOworCQlnb3RvIG91dF9jbG9zZTsKKwl9CisKKwlpZiAoIWludGVs X2RwX2NvbXBsaWFuY2Vfc2V0dXBfaG90cGx1ZygpKSB7CisJCWlndF93YXJuKCJmYWlsZWQgdG8g aW5pdGlhbGl6ZSBob3RwbHVnIHN1cHBvcnRcbiIpOworCQlnb3RvIG91dF9tYWlubG9vcDsKKwl9 CisKKwl0ZXN0YWN0aXZlX2NoYW5uZWwgPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcoZmlsZW5vKHRl c3RfYWN0aXZlX2ZwKSk7CisJaWYgKCF0ZXN0YWN0aXZlX2NoYW5uZWwpIHsKKwkJaWd0X3dhcm4o ImZhaWxlZCB0byBjcmVhdGUgVGVzdCBBY3RpdmUgR0lPIGNoYW5uZWxcbiIpOworCQlnb3RvIG91 dF9jbG9zZTsKKwl9CisKKwlyZXQgPSBnX2lvX2FkZF93YXRjaCh0ZXN0YWN0aXZlX2NoYW5uZWws IEdfSU9fSU4gfCBHX0lPX0VSUiwgdGVzdF9oYW5kbGVyLAorCQkJICAgICBOVUxMKTsKKwlpZiAo cmV0IDwgMCkgeworCQlpZ3Rfd2FybigiZmFpbGVkIHRvIGFkZCB3YXRjaCBvbiB1ZGV2IEdJTyBj aGFubmVsXG4iKTsKKwkJZ290byBvdXRfY2xvc2U7CisJfQorCisJc3RkaW5jaGFubmVsID0gZ19p b19jaGFubmVsX3VuaXhfbmV3KDApOworCWlmICghc3RkaW5jaGFubmVsKSB7CisJCWlndF93YXJu KCJmYWlsZWQgdG8gY3JlYXRlIHN0ZGluIEdJTyBjaGFubmVsXG4iKTsKKwkJZ290byBvdXRfaG90 cGx1ZzsKKwl9CisKKwlyZXQgPSBnX2lvX2FkZF93YXRjaChzdGRpbmNoYW5uZWwsIEdfSU9fSU4g fCBHX0lPX0VSUiwgaW5wdXRfZXZlbnQsCisJCQkgICAgIE5VTEwpOworCWlmIChyZXQgPCAwKSB7 CisJCWlndF93YXJuKCJmYWlsZWQgdG8gYWRkIHdhdGNoIG9uIHN0ZGluIEdJTyBjaGFubmVsXG4i KTsKKwkJZ290byBvdXRfc3RkaW87CisJfQorCisJcmV0ID0gMDsKKworCWdfbWFpbl9sb29wX3J1 bihtYWlubG9vcCk7CisKK291dF9zdGRpbzoKKwlnX2lvX2NoYW5uZWxfc2h1dGRvd24oc3RkaW5j aGFubmVsLCBUUlVFLCBOVUxMKTsKK291dF9ob3RwbHVnOgorCWludGVsX2RwX2NvbXBsaWFuY2Vf Y2xlYW51cF9ob3RwbHVnKCk7CitvdXRfbWFpbmxvb3A6CisJZ19tYWluX2xvb3BfdW5yZWYobWFp bmxvb3ApOworb3V0X2Nsb3NlOgorCWNsZWFudXBfZGVidWdmcygpOworCWNsb3NlKGRybV9mZCk7 CisKKwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisKKwlpZ3RfaW5mbygiQ29tcGxpYW5jZSB0ZXN0 aW5nIGFwcGxpY2F0aW9uIGV4aXRpbmcuXG4iKTsKKwlpZ3RfZXhpdCgpOworfQpkaWZmIC0tZ2l0 IGEvdG9vbHMvaW50ZWxfZHBfY29tcGxpYW5jZS5oIGIvdG9vbHMvaW50ZWxfZHBfY29tcGxpYW5j ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZTFlMmYKLS0tIC9kZXYv bnVsbAorKysgYi90b29scy9pbnRlbF9kcF9jb21wbGlhbmNlLmgKQEAgLTAsMCArMSwzNSBAQAor LyoKKyAqIENvcHlyaWdodCAyMDEwIEludGVsIENvcnBvcmF0aW9uCisgKiBNYW5hc2kgTmF2YXJl IDxtYW5hc2kuZC5uYXZhcmVAaW50ZWwuY29tPgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us CisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQg aW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJl LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVW RU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUg Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZS T00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8 c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNs dWRlIDxnbGliLmg+CisKK2V4dGVybiBpbnQgZHJtX2ZkOworCitnYm9vbGVhbiBpbnRlbF9kcF9j b21wbGlhbmNlX3NldHVwX2hvdHBsdWcodm9pZCk7Cit2b2lkIGludGVsX2RwX2NvbXBsaWFuY2Vf Y2xlYW51cF9ob3RwbHVnKHZvaWQpOworCisvKiBjYWxsZWQgYnkgdGhlIGhvdHBsdWcgY29kZSAq LworaW50IHVwZGF0ZV9kaXNwbGF5KGludCBtb2RlLCBib29sIGlzX2NvbXBsaWFuY2VfdGVzdCk7 CmRpZmYgLS1naXQgYS90b29scy9pbnRlbF9kcF9jb21wbGlhbmNlX2hvdHBsdWcuYyBiL3Rvb2xz L2ludGVsX2RwX2NvbXBsaWFuY2VfaG90cGx1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmQ0ODkwMjYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9pbnRlbF9kcF9jb21w bGlhbmNlX2hvdHBsdWcuYwpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEw IEludGVsIENvcnBvcmF0aW9uCisgKiAgIEplc3NlIEJhcm5lcyA8amVzc2UuYmFybmVzQGludGVs LmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRv IGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUg SVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVT UyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJ TiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgPHN0ZGlv Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRl IDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSAiaW50ZWxfZHBfY29tcGxpYW5jZS5oIgorI2luY2x1 ZGUgPGxpYnVkZXYuaD4KK3N0YXRpYyBzdHJ1Y3QgdWRldl9tb25pdG9yICp1ZXZlbnRfbW9uaXRv cjsKK3N0YXRpYyBzdHJ1Y3QgdWRldiAqdWRldjsKK3N0YXRpYyBHSU9DaGFubmVsICp1ZGV2Y2hh bm5lbDsKKworc3RhdGljIGdib29sZWFuIGhvdHBsdWdfZXZlbnQoR0lPQ2hhbm5lbCAqc291cmNl LCBHSU9Db25kaXRpb24gY29uZGl0aW9uLAorCQkJICAgICAgZ3BvaW50ZXIgZGF0YSkKK3sKKwlz dHJ1Y3QgdWRldl9kZXZpY2UgKmRldjsKKwlkZXZfdCB1ZGV2X2Rldm51bTsKKwlzdHJ1Y3Qgc3Rh dCBzOworCWNvbnN0IGNoYXIgKmhvdHBsdWc7CisKKwlkZXYgPSB1ZGV2X21vbml0b3JfcmVjZWl2 ZV9kZXZpY2UodWV2ZW50X21vbml0b3IpOworCWlmICghZGV2KQorCQlnb3RvIG91dDsKKworCXVk ZXZfZGV2bnVtID0gdWRldl9kZXZpY2VfZ2V0X2Rldm51bShkZXYpOworCWZzdGF0KGRybV9mZCwg JnMpOworCisJaG90cGx1ZyA9IHVkZXZfZGV2aWNlX2dldF9wcm9wZXJ0eV92YWx1ZShkZXYsICJI T1RQTFVHIik7CisKKwlpZiAobWVtY21wKCZzLnN0X3JkZXYsICZ1ZGV2X2Rldm51bSwgc2l6ZW9m KGRldl90KSkgPT0gMCAmJgorCSAgICBob3RwbHVnICYmIGF0b2koaG90cGx1ZykgPT0gMSkKKwkJ dXBkYXRlX2Rpc3BsYXkoMCwgZmFsc2UpOworCisJdWRldl9kZXZpY2VfdW5yZWYoZGV2KTsKK291 dDoKKwlyZXR1cm4gVFJVRTsKK30KKworCitnYm9vbGVhbiBpbnRlbF9kcF9jb21wbGlhbmNlX3Nl dHVwX2hvdHBsdWcodm9pZCkKK3sKKwlpbnQgcmV0OworCisJdWRldiA9IHVkZXZfbmV3KCk7CisJ aWYgKCF1ZGV2KSB7CisJCWlndF93YXJuKCJmYWlsZWQgdG8gY3JlYXRlIHVkZXYgb2JqZWN0XG4i KTsKKwkJZ290byBvdXQ7CisJfQorCisJdWV2ZW50X21vbml0b3IgPSB1ZGV2X21vbml0b3JfbmV3 X2Zyb21fbmV0bGluayh1ZGV2LCAidWRldiIpOworCWlmICghdWV2ZW50X21vbml0b3IpIHsKKwkJ aWd0X3dhcm4oImZhaWxlZCB0byBjcmVhdGUgdWRldiBldmVudCBtb25pdG9yXG4iKTsKKwkJZ290 byBvdXQ7CisJfQorCisJcmV0ID0gdWRldl9tb25pdG9yX2ZpbHRlcl9hZGRfbWF0Y2hfc3Vic3lz dGVtX2RldnR5cGUodWV2ZW50X21vbml0b3IsCisJCQkJCQkJICAgICAgImRybSIsCisJCQkJCQkJ ICAgICAgImRybV9taW5vciIpOworCWlmIChyZXQgPCAwKSB7CisJCWlndF93YXJuKCJmYWlsZWQg dG8gZmlsdGVyIGZvciBkcm0gZXZlbnRzXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0g dWRldl9tb25pdG9yX2VuYWJsZV9yZWNlaXZpbmcodWV2ZW50X21vbml0b3IpOworCWlmIChyZXQg PCAwKSB7CisJCWlndF93YXJuKCJmYWlsZWQgdG8gZW5hYmxlIHVkZXYgZXZlbnQgcmVjZXB0aW9u XG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJdWRldmNoYW5uZWwgPQorCQlnX2lvX2NoYW5uZWxf dW5peF9uZXcodWRldl9tb25pdG9yX2dldF9mZCh1ZXZlbnRfbW9uaXRvcikpOworCWlmICghdWRl dmNoYW5uZWwpIHsKKwkJaWd0X3dhcm4oImZhaWxlZCB0byBjcmVhdGUgdWRldiBHSU8gY2hhbm5l bFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGdfaW9fYWRkX3dhdGNoKHVkZXZjaGFu bmVsLCBHX0lPX0lOIHwgR19JT19FUlIsIGhvdHBsdWdfZXZlbnQsCisJCQkgICAgIHVkZXYpOwor CWlmIChyZXQgPCAwKSB7CisJCWlndF93YXJuKCJmYWlsZWQgdG8gYWRkIHdhdGNoIG9uIHVkZXYg R0lPIGNoYW5uZWxcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXR1cm4gVFJVRTsKKworb3V0 OgorCWludGVsX2RwX2NvbXBsaWFuY2VfY2xlYW51cF9ob3RwbHVnKCk7CisJcmV0dXJuIEZBTFNF OworfQorCit2b2lkIGludGVsX2RwX2NvbXBsaWFuY2VfY2xlYW51cF9ob3RwbHVnKHZvaWQpCit7 CisJaWYgKHVkZXZjaGFubmVsKQorCQlnX2lvX2NoYW5uZWxfc2h1dGRvd24odWRldmNoYW5uZWws IFRSVUUsIE5VTEwpOworCWlmICh1ZXZlbnRfbW9uaXRvcikKKwkJdWRldl9tb25pdG9yX3VucmVm KHVldmVudF9tb25pdG9yKTsKKwlpZiAodWRldikKKwkJdWRldl91bnJlZih1ZGV2KTsKK30KLS0g CjEuOS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJ bnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK