From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Subject: [RFC i-g-t 4/4] Add support for hotplug testing with the Chamelium Date: Mon, 7 Nov 2016 19:05:16 -0500 Message-ID: <1478563516-23568-5-git-send-email-lyude@redhat.com> References: <1478563516-23568-1-git-send-email-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3DC8A6E2C9 for ; Tue, 8 Nov 2016 00:05:27 +0000 (UTC) In-Reply-To: <1478563516-23568-1-git-send-email-lyude@redhat.com> 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 Cc: Lyude List-Id: intel-gfx@lists.freedesktop.org Rm9yIHRoZSBwdXJwb3NlIG9mIHRlc3RpbmcgdGhpbmdzIHN1Y2ggYXMgaG90cGx1Z2dpbmcgYW5k IGJhZCBtb25pdG9ycywKdGhlIENocm9tZU9TIHRlYW0gZW5kZWQgdXAgZGVzaWduaW5nIGEgbmVh dCBsaXR0bGUgZGV2aWNlIGtub3duIGFzIHRoZQpDaGFtZWxpdW0uIE1vcmUgaW5mb3JtYXRpb24g b24gdGhpcyBjYW4gYmUgZm91bmQgaGVyZToKCglodHRwczovL3d3dy5jaHJvbWl1bS5vcmcvY2hy b21pdW0tb3MvdGVzdGluZy9jaGFtZWxpdW0KClRoaXMgYWRkcyBzdXBwb3J0IGZvciBhIGNvdXBs ZSBvZiB0aGluZ3MgdG8gaW50ZWwtZ3B1LXRvb2xzOgogLSBpZ3QgbGlicmFyeSBmdW5jdGlvbnMg Zm9yIGNvbm5lY3RpbmcgdG8gdWRldiBhbmQgbW9uaXRvcmluZyBpdCBmb3IKICAgaG90cGx1ZyBl dmVudHMsIGxvb3NlbHkgYmFzZWQgb2ZmIG9mIHRoZSB1bmZpbmlzaGVkIGhvdHBsdWdnaW5nCiAg IGltcGxlbWVudGF0aW9uIGluIHRlc3RkaXNwbGF5CiAtIExpYnJhcnkgZnVuY3Rpb25zIGZvciBj b250cm9sbGluZyB0aGUgY2hhbWVsaXVtIGluIHRlc3RzIHVzaW5nCiAgIHhtbHJwYy4gQSBjb3Vw bGUgb2YgUlBDIGNhbGxzIHdlcmUgb21taXR0ZWQgaGVyZSwgbWFpbmx5IGJlY2F1c2UgdGhleQog ICBkaWRuJ3Qgc2VlbSB2ZXJ5IHVzZWZ1bCBmb3Igb3VyIG5lZWRzIG9yIGJlY2F1c2UgdGhleSdy ZSBqdXN0IHBsYWluCiAgIGJyb2tlbgogLSBBIHNldCBvZiBiYXNpYyB0ZXN0cyB1c2luZyB0aGUg Y2hhbWVsaXVtLgoKQmVjYXVzZSB0aGVyZSdzIG5vIHN1cmVmaXJlIHdheSB0aGF0IEkga25vdyBv ZiB3aGVyZSB3ZSBjYW4gbWFwIHdoaWNoCmNoYW1lbGl1bSBwb3J0IGJlbG9uZ3MgdG8gd2hpY2gg cG9ydCBvbiB0aGUgc3lzdGVtIGJlaW5nIHRlc3RlZCAod2UKY291bGQganVzdCB1c2UgaG90cGx1 Z2dpbmcsIGJ1dCB0aGVuIHdlJ2QgYmUgcmVseWluZyBvbiBzb21ldGhpbmcgdGhhdAptaWdodCBi ZSBicm9rZW4gb24gdGhlIG1hY2hpbmUgYW5kIHBvdGVudGlhbGx5IGdpdmUgZmFsc2UgcG9zaXRp dmVzIGZvcgpjZXJ0YWluIHRlc3RzKSwgbW9zdCBvZiB0aGUgY2hhbWVsaXVtIHRlc3RzIHdpbGwg ZmlndXJlIG91dCB3aGV0aGVyIG9yCm5vdCBhIGNvbm5lY3Rpb24gaGFwcGVuZWQgYnkgY291bnRp bmcgdGhlIG51bWJlciBvZiBjb25uZWN0b3JzIG1hdGNoaW5nCnRoZSBzdGF0dXMgd2UncmUgbG9v a2luZyBmb3IgYmVmb3JlIGhvdHBsdWdnaW5nIHdpdGggdGhlIGNoYW1lbGl1bSwgdnMuCmFmdGVy IGhvdHBsdWdnaW5nIGl0LgoKVGVzdHMgd2hpY2ggcmVxdWlyZSB0aGF0IHdlIGtub3cgd2hpY2gg cG9ydCBiZWxvbmdzIHRvIGEgY2VydGFpbiBwb3J0CihzdWNoIGFzIG9uZXMgd2hlcmUgd2UgYWN0 dWFsbHkgcGVyZm9ybSBhIG1vZGVzZXQpIHdpbGwgdW5wbHVnIGFsbCBvZgp0aGUgY2hhbWVsaXVt IHBvcnRzLCBwbHVnIHRoZSBkZXNpcmVkIHBvcnQsIHRoZW4gdXNlIHRoZSBmaXJzdCBEUk0KY29u bmVjdG9yIHdpdGggdGhlIGRlc2lyZWQgY29ubmVjdG9yIHR5cGUgdGhhdCdzIG1hcmtlZCBhcyBj b25uZWN0ZWQuIEluCm9yZGVyIHRvIGVuc3VyZSB3ZSBkb24ndCBlbmQgdXAgdXNpbmcgdGhlIHdy b25nIGNvbm5lY3RvciwgdGhlc2UgdGVzdHMKd2lsbCBza2lwIGlmIHRoZXkgZmluZCBhbnkgY29u bmVjdG9ycyB3aXRoIHRoZSBkZXNpcmVkIHR5cGUgbWFya2VkIGFzCmNvbm5lY3RlZCBiZWZvcmUg cGVyZm9ybWluZyB0aGUgaG90cGx1ZyBvbiB0aGUgY2hhbWVsaXVtLgoKUnVubmluZyB0aGVzZSB0 ZXN0cyByZXF1aXJlcyAob2YgY291cnNlKSBhIHdvcmtpbmcgQ2hhbWVsaXVtLCBhbG9uZyB3aXRo CnRoZSBSUEMgVVJMIGZvciB0aGUgY2hhbWVsaXVtIGJlaW5nIHNwZWNpZmllZCBpbiB0aGUgZW52 aXJvbm1lbnQKdmFyaWFibGUgQ0hBTUVMSVVNX0hPU1QuIElmIG5vIFVSTCBpcyBzcGVjaWZpZWQs IHRoZSB0ZXN0cyB3aWxsIGp1c3QKc2tpcCBvbiB0aGVpciBvd24uIEFzIHdlbGwsIHRlc3RzIGZv ciBjb25uZWN0b3JzIHdoaWNoIGFyZSBub3QgYWN0dWFsbHkKcHJlc2VudCBvbiB0aGUgc3lzdGVt IG9yIHRoZSBjaGFtZWxpdW0gd2lsbCBza2lwIG9uIHRoZWlyIG93biBhcyB3ZWxsLgoKU2lnbmVk LW9mZi1ieTogTHl1ZGUgPGx5dWRlQHJlZGhhdC5jb20+Ci0tLQogY29uZmlndXJlLmFjICAgICAg ICAgICB8ICAxMyArCiBsaWIvTWFrZWZpbGUuYW0gICAgICAgIHwgIDEwICstCiBsaWIvaWd0Lmgg ICAgICAgICAgICAgIHwgICAxICsKIGxpYi9pZ3RfY2hhbWVsaXVtLmMgICAgfCA2MjggKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliL2lndF9jaGFt ZWxpdW0uaCAgICB8ICA3NyArKysrKysKIGxpYi9pZ3Rfa21zLmMgICAgICAgICAgfCAxMDcgKysr KysrKysrCiBsaWIvaWd0X2ttcy5oICAgICAgICAgIHwgIDEzICstCiBzY3JpcHRzL3J1bi10ZXN0 cy5zaCAgIHwgICA0ICstCiB0ZXN0cy9NYWtlZmlsZS5hbSAgICAgIHwgICA1ICstCiB0ZXN0cy9N YWtlZmlsZS5zb3VyY2VzIHwgICAxICsKIHRlc3RzL2NoYW1lbGl1bS5jICAgICAgfCA1NDkgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxMSBmaWxlcyBjaGFuZ2Vk LCAxNDAzIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliL2lndF9jaGFtZWxpdW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfY2hhbWVsaXVt LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9jaGFtZWxpdW0uYwoKZGlmZiAtLWdpdCBhL2Nv bmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCA3MzVjZmQ1Li44ODExM2IyIDEwMDY0NAot LS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0yNTksNiArMjU5LDE4IEBA IGlmIHRlc3QgIngkd2l0aF9saWJ1bndpbmQiID0geHllczsgdGhlbgogCQkJICBBQ19NU0dfRVJS T1IoW2xpYnVud2luZCBub3QgZm91bmQuIFVzZSAtLXdpdGhvdXQtbGlidW53aW5kIHRvIGRpc2Fi bGUgbGlidW53aW5kIHN1cHBvcnQuXSkpCiBmaQogCisjIGVuYWJsZSBzdXBwb3J0IGZvciB1c2lu ZyB0aGUgY2hhbWVsaXVtCitBQ19BUkdfRU5BQkxFKGNoYW1lbGl1bSwKKwkgICAgICBBU19IRUxQ X1NUUklORyhbLS13aXRob3V0LWNoYW1lbGl1bV0sCisJCQkgICAgIFtCdWlsZCB0ZXN0cyB3aXRo b3V0IGNoYW1lbGl1bSBzdXBwb3J0XSksCisJICAgICAgW10sIFt3aXRoX2NoYW1lbGl1bT15ZXNd KQorCitBTV9DT05ESVRJT05BTChIQVZFX0NIQU1FTElVTSwgW3Rlc3QgIngkd2l0aF9jaGFtZWxp dW0iID0geHllc10pCitpZiB0ZXN0ICJ4JHdpdGhfY2hhbWVsaXVtIiA9IHh5ZXM7IHRoZW4KKwlB Q19ERUZJTkUoSEFWRV9DSEFNRUxJVU0sIDEsIFtjaGFtZWxpdW0gc3Vwb3J0XSkKKwlQS0dfQ0hF Q0tfTU9EVUxFUyhYTUxSUEMsIHhtbHJwY19jbGllbnQpCitmaQorCiAjIGVuYWJsZSBkZWJ1ZyBz eW1ib2xzCiBBQ19BUkdfRU5BQkxFKGRlYnVnLAogCSAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWRp c2FibGUtZGVidWddLApAQCAtMzU2LDYgKzM2OCw3IEBAIGVjaG8gIiAgICAgICBBc3NlbWJsZXIg ICAgICAgICAgOiAke2VuYWJsZV9hc3NlbWJsZXJ9IgogZWNobyAiICAgICAgIERlYnVnZ2VyICAg ICAgICAgICA6ICR7ZW5hYmxlX2RlYnVnZ2VyfSIKIGVjaG8gIiAgICAgICBPdmVybGF5ICAgICAg ICAgICAgOiBYOiAke2VuYWJsZV9vdmVybGF5X3hsaWJ9LCBYdjogJHtlbmFibGVfb3ZlcmxheV94 dmxpYn0iCiBlY2hvICIgICAgICAgeDg2LXNwZWNpZmljIHRvb2xzIDogJHtidWlsZF94ODZ9Igor ZWNobyAiICAgICAgIENoYW1lbGl1bSBzdXBwb3J0ICA6ICR7d2l0aF9jaGFtZWxpdW19IgogZWNo byAiIgogZWNobyAiIOKAoiBBUEktRG9jdW1lbnRhdGlvbiAgICAgIDogJHtlbmFibGVfZ3RrX2Rv Y30iCiBlY2hvICIg4oCiIEZhaWwgb24gd2FybmluZ3MgICAgICAgOiAke2VuYWJsZV93ZXJyb3J9 IgpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLmFtIGIvbGliL01ha2VmaWxlLmFtCmluZGV4IDRj MDg5M2QuLmFlYWM0M2EgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5hbQorKysgYi9saWIvTWFr ZWZpbGUuYW0KQEAgLTIyLDggKzIyLDE0IEBAIGlmICFIQVZFX0xJQkRSTV9JTlRFTAogICAgICAg ICBzdHVicy9kcm0vaW50ZWxfYnVmbWdyLmgKIGVuZGlmCiAKK2lmIEhBVkVfQ0hBTUVMSVVNCisg ICAgbGliaW50ZWxfdG9vbHNfbGFfU09VUkNFUyArPQlcCisJaWd0X2NoYW1lbGl1bS5jCQkJXAor CWlndF9jaGFtZWxpdW0uaAorZW5kaWYKKwogQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikK LUFNX0NGTEFHUyA9ICQoQ1dBUk5GTEFHUykgJChEUk1fQ0ZMQUdTKSAkKFBDSUFDQ0VTU19DRkxB R1MpICQoTElCVU5XSU5EX0NGTEFHUykgJChERUJVR19DRkxBR1MpIFwKK0FNX0NGTEFHUyA9ICQo Q1dBUk5GTEFHUykgJChEUk1fQ0ZMQUdTKSAkKFBDSUFDQ0VTU19DRkxBR1MpICQoTElCVU5XSU5E X0NGTEFHUykgJChERUJVR19DRkxBR1MpICQoWE1MUlBDX0NGTEFHUykgJChVREVWX0NGTEFHUykg XAogCSAgICAtRElHVF9TUkNESVI9XCIiJChhYnNfdG9wX3NyY2RpcikvdGVzdHMiXCIgXAogCSAg ICAtRElHVF9EQVRBRElSPVwiIiQocGtnZGF0YWRpcikiXCIgXAogCSAgICAtRElHVF9MT0dfRE9N QUlOPVwiIiQoc3Vic3QgXywtLCQqKSJcIiBcCkBAIC0zOCw1ICs0NCw3IEBAIGxpYmludGVsX3Rv b2xzX2xhX0xJQkFERCA9IFwKIAkkKExJQlVERVZfTElCUykgXAogCSQoTElCVU5XSU5EX0xJQlMp IFwKIAkkKFRJTUVSX0xJQlMpIFwKKwkkKFhNTFJQQ19MSUJTKSBcCisJJChVREVWX0xJQlMpIFwK IAktbG0KIApkaWZmIC0tZ2l0IGEvbGliL2lndC5oIGIvbGliL2lndC5oCmluZGV4IGQ3NTFmMjQu LjBlYTAzZTQgMTAwNjQ0Ci0tLSBhL2xpYi9pZ3QuaAorKysgYi9saWIvaWd0LmgKQEAgLTMwLDYg KzMwLDcgQEAKICNpbmNsdWRlICJpZ3RfYXV4LmgiCiAjaW5jbHVkZSAiaWd0X2NvcmUuaCIKICNp bmNsdWRlICJpZ3RfY29yZS5oIgorI2luY2x1ZGUgImlndF9jaGFtZWxpdW0uaCIKICNpbmNsdWRl ICJpZ3RfZGVidWdmcy5oIgogI2luY2x1ZGUgImlndF9kcmF3LmgiCiAjaW5jbHVkZSAiaWd0X2Zi LmgiCmRpZmYgLS1naXQgYS9saWIvaWd0X2NoYW1lbGl1bS5jIGIvbGliL2lndF9jaGFtZWxpdW0u YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjgxZWY2Ci0tLSAvZGV2L251 bGwKKysrIGIvbGliL2lndF9jaGFtZWxpdW0uYwpAQCAtMCwwICsxLDYyOCBAQAorLyoKKyAqIENv cHlyaWdodCDCqSAyMDE2IFJlZCBIYXQgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us CisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVU SE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAq IElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogIEx5dWRlIFBhdWwgPGx5dWRl QHJlZGhhdC5jb20+CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8c3Ry aW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx4bWxycGMtYy9iYXNlLmg+Cisj aW5jbHVkZSA8eG1scnBjLWMvY2xpZW50Lmg+CisKKyNpbmNsdWRlICJpZ3QuaCIKKworI2RlZmlu ZSBjaGVja19ycGMoKSBcCisJaWd0X2Fzc2VydF9mKCFlbnYuZmF1bHRfb2NjdXJyZWQsICJDaGFt ZWxpdW0gUlBDIGNhbGwgZmFpbGVkOiAlc1xuIiwgXAorCQkgICAgIGVudi5mYXVsdF9zdHJpbmcp OworCisvKioKKyAqIGNoYW1lbGl1bV9wb3J0czoKKyAqCisgKiBDb250YWlucyBpbmZvcm1hdGlv biBvbiBhbGwgb2YgdGhlIHBvcnRzIHRoYXQgYXJlIHBoeXNpY2FsbHkgY29ubmVjdGVkIGZyb20K KyAqIHRoZSBjaGFtZWxpdW0gdG8gdGhlIHN5c3RlbS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBpbml0 aWFsaXplZCB3aGVuCisgKiAjY2hhbWVsaXVtX2luaXQgaXMgY2FsbGVkLgorICovCitzdHJ1Y3Qg Y2hhbWVsaXVtX3BvcnQgKmNoYW1lbGl1bV9wb3J0czsKKworLyoqCisgKiBjaGFtZWxpdW1fcG9y dF9jb3VudDoKKyAqCisgKiBIb3cgbWFueSBwb3J0cyBhcmUgcGh5c2ljYWxseSBjb25uZWN0ZWQg ZnJvbSB0aGUgY2hhbWVsaXVtIHRvIHRoZSBzeXN0ZW0uCisgKi8KK2ludCBjaGFtZWxpdW1fcG9y dF9jb3VudDsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNoYW1lbGl1bV91cmw7CitzdGF0aWMgeG1s cnBjX2VudiBlbnY7CisKK3N0cnVjdCBjaGFtZWxpdW1fZWRpZCB7CisJaW50IGlkOworCXN0cnVj dCBpZ3RfbGlzdCBsaW5rOworfTsKK3N0cnVjdCBjaGFtZWxpdW1fZWRpZCAqYWxsb2NhdGVkX2Vk aWRzOworCisvKioKKyAqIGNoYW1lbGl1bV9wbHVnOgorICogQGlkOiBUaGUgSUQgb2YgdGhlIHBv cnQgb24gdGhlIGNoYW1lbGl1bSB0byBwbHVnIGluCisgKgorICogU2ltdWxhdGUgYSBkaXNwbGF5 IGNvbm5lY3RvciBiZWluZyBwbHVnZ2VkIGludG8gdGhlIHN5c3RlbSB1c2luZyB0aGUKKyAqIGNo YW1lbGl1bS4KKyAqLwordm9pZCBjaGFtZWxpdW1fcGx1ZyhpbnQgaWQpCit7CisJeG1scnBjX3Zh bHVlICpyZXM7CisKKwlpZ3RfZGVidWcoIlBsdWdnaW5nIHBvcnQgJWRcbiIsIGlkKTsKKwlyZXMg PSB4bWxycGNfY2xpZW50X2NhbGwoJmVudiwgY2hhbWVsaXVtX3VybCwgIlBsdWciLCAiKGkpIiwg aWQpOworCWNoZWNrX3JwYygpOworCisJeG1scnBjX0RFQ1JFRihyZXMpOworfQorCisvKioKKyAq IGNoYW1lbGl1bV91bnBsdWc6CisgKiBAaWQ6IFRoZSBJRCBvZiB0aGUgcG9ydCBvbiB0aGUgY2hh bWVsaXVtIHRvIHVucGx1ZworICoKKyAqIFNpbXVsYXRlIGEgZGlzcGxheSBjb25uZWN0b3IgYmVp bmcgdW5wbHVnZ2VkIGZyb20gdGhlIHN5c3RlbSB1c2luZyB0aGUKKyAqIGNoYW1lbGl1bS4KKyAq Lwordm9pZCBjaGFtZWxpdW1fdW5wbHVnKGludCBpZCkKK3sKKwl4bWxycGNfdmFsdWUgKnJlczsK KworCWlndF9kZWJ1ZygiVW5wbHVnZ2luZyBwb3J0ICVkXG4iLCBpZCk7CisJcmVzID0geG1scnBj X2NsaWVudF9jYWxsKCZlbnYsIGNoYW1lbGl1bV91cmwsICJVbnBsdWciLCAiKGkpIiwgaWQpOwor CWNoZWNrX3JwYygpOworCisJeG1scnBjX0RFQ1JFRihyZXMpOworfQorCisvKioKKyAqIGNoYW1l bGl1bV9pc19wbHVnZ2VkOgorICogQGlkOiBUaGUgSUQgb2YgdGhlIHBvcnQgb24gdGhlIGNoYW1l bGl1bSB0byBjaGVjayB0aGUgc3RhdHVzIG9mCisgKgorICogQ2hlY2sgd2hldGhlciBvciBub3Qg dGhlIGdpdmVuIHBvcnQgaGFzIGJlZW4gcGx1Z2dlZCBpbnRvIHRoZSBzeXN0ZW0gdXNpbmcKKyAq ICNjaGFtZWxpdW1fcGx1Zy4KKyAqCisgKiBSZXR1cm5zOiBUcnVlIGlmIHRoZSBjb25uZWN0b3Ig aXMgc2V0IHRvIHBsdWdnZWQgaW4sIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCBjaGFtZWxp dW1faXNfcGx1Z2dlZChpbnQgaWQpCit7CisJeG1scnBjX3ZhbHVlICpyZXM7CisJeG1scnBjX2Jv b2wgaXNfcGx1Z2dlZDsKKworCXJlcyA9IHhtbHJwY19jbGllbnRfY2FsbCgmZW52LCBjaGFtZWxp dW1fdXJsLCAiSXNQbHVnZ2VkIiwgIihpKSIsIGlkKTsKKwljaGVja19ycGMoKTsKKworCXhtbHJw Y19yZWFkX2Jvb2woJmVudiwgcmVzLCAmaXNfcGx1Z2dlZCk7CisJeG1scnBjX0RFQ1JFRihyZXMp OworCisJcmV0dXJuIGlzX3BsdWdnZWQ7Cit9CisKKy8qKgorICogY2hhbWVsaXVtX3BvcnRfd2Fp dF92aWRlb19pbnB1dF9zdGFibGU6CisgKiBAaWQ6IFRoZSBJRCBvZiB0aGUgcG9ydCBvbiB0aGUg Y2hhbWVsaXVtIHRvIGNoZWNrIHRoZSBzdGF0dXMgb2YKKyAqIEB0aW1lb3V0X3NlY3M6IEhvdyBs b25nIHRvIHdhaXQgZm9yIGEgdmlkZW8gc2lnbmFsIHRvIGFwcGVhciBiZWZvcmUgdGltaW5nCisg KiBvdXQKKyAqCisgKiBXYWl0cyBmb3IgYSB2aWRlbyBzaWduYWwgdG8gYXBwZWFyIG9uIHRoZSBn aXZlbiBwb3J0LiBUaGlzIGlzIHVzZWZ1bCBmb3IKKyAqIGNoZWNraW5nIHdoZXRoZXIgb3Igbm90 IHdlJ3ZlIHNldHVwIGEgbW9uaXRvciBjb3JyZWN0bHkuCisgKgorICogUmV0dXJuczogVHJ1ZSBp ZiBhIHZpZGVvIHNpZ25hbCB3YXMgZGV0ZWN0ZWQsIGZhbHNlIGlmIHdlIHRpbWVkIG91dAorICov Citib29sIGNoYW1lbGl1bV9wb3J0X3dhaXRfdmlkZW9faW5wdXRfc3RhYmxlKGludCBpZCwgaW50 IHRpbWVvdXRfc2VjcykKK3sKKwl4bWxycGNfdmFsdWUgKnJlczsKKwl4bWxycGNfYm9vbCBpc19v bjsKKworCWlndF9kZWJ1ZygiV2FpdGluZyBmb3IgdmlkZW8gaW5wdXQgdG8gc3RhYmFsaXplIG9u IHBvcnQgJWRcbiIsIGlkKTsKKworCXJlcyA9IHhtbHJwY19jbGllbnRfY2FsbCgmZW52LCBjaGFt ZWxpdW1fdXJsLCAiV2FpdFZpZGVvSW5wdXRTdGFibGUiLAorCQkJCSAiKGlpKSIsIGlkLCB0aW1l b3V0X3NlY3MpOworCWNoZWNrX3JwYygpOworCisJeG1scnBjX3JlYWRfYm9vbCgmZW52LCByZXMs ICZpc19vbik7CisJeG1scnBjX0RFQ1JFRihyZXMpOworCisJcmV0dXJuIGlzX29uOworfQorCisv KioKKyAqIGNoYW1lbGl1bV9maXJlX2hwZF9wdWxzZXM6CisgKiBAaWQ6IFRoZSBJRCBvZiB0aGUg cG9ydCB0byBmaXJlIGhvdHBsdWcgcHVsc2VzIG9uCisgKiBAd2lkdGhfbXNlYzogSG93IGxvbmcg ZWFjaCBwdWxzZSBzaG91bGQgbGFzdAorICogQGNvdW50OiBUaGUgbnVtYmVyIG9mIHB1bHNlcyB0 byBzZW5kCisgKgorICogQSBjb252aWVuZW5jZSBmdW5jdGlvbiBmb3Igc2VuZGluZyBtdWx0aXBs ZSBob3RwbHVnIHB1bHNlcyB0byB0aGUgc3lzdGVtLgorICogVGhlIHB1bHNlcyBzdGFydCBhdCBs b3cgKGUuZy4gY29ubmVjdG9yIGlzIGRpc2Nvbm5lY3RlZCksIGFuZCB0aGVuIGFsdGVybmF0ZQor ICogZnJvbSBoaWdoIChlLmcuIGNvbm5lY3RvciBpcyBwbHVnZ2VkIGluKSB0byBsb3cuIFRoaXMg aXMgdGhlIGVxdWl2YWxlbnQgb2YKKyAqIHJlcGVhdGVkbHkgY2FsbGluZyAjY2hhbWVsaXVtX3Bs dWcgYW5kICNjaGFtZWxpdW1fdW5wbHVnLCB3YWl0aW5nCisgKiBAd2lkdGhfbXNlYyBiZXR3ZWVu IGVhY2ggY2FsbC4KKyAqCisgKiBJZiBAY291bnQgaXMgZXZlbiwgdGhlIGxhc3QgcHVsc2Ugc2Vu dCB3aWxsIGJlIGhpZ2gsIGFuZCBpZiBpdCdzIG9kZCB0aGVuIGl0CisgKiB3aWxsIGJlIGxvdy4g UmVzZXR0aW5nIHRoZSBIUEQgbGluZSBiYWNrIHRvIGl0J3MgcHJldmlvdXMgc3RhdGUsIGlmIGRl c2lyZWQsCisgKiBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlci4KKyAqLwordm9p ZCBjaGFtZWxpdW1fZmlyZV9ocGRfcHVsc2VzKGludCBwb3J0LCBpbnQgd2lkdGhfbXNlYywgaW50 IGNvdW50KQoreworCXhtbHJwY192YWx1ZSAqcHVsc2Vfd2lkdGhzID0geG1scnBjX2FycmF5X25l dygmZW52KSwKKwkJICAgICAqd2lkdGggPSB4bWxycGNfaW50X25ldygmZW52LCB3aWR0aF9tc2Vj KSwgKnJlczsKKwlpbnQgaTsKKworCWlndF9kZWJ1ZygiRmlyaW5nICVkIEhQRCBwdWxzZXMgd2l0 aCB3aWR0aCBvZiAlZCBtc2VjIG9uIHBvcnQgJWRcbiIsCisJCSAgY291bnQsIHdpZHRoX21zZWMs IHBvcnQpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJCXhtbHJwY19hcnJheV9h cHBlbmRfaXRlbSgmZW52LCBwdWxzZV93aWR0aHMsIHdpZHRoKTsKKworCXJlcyA9IHhtbHJwY19j bGllbnRfY2FsbCgmZW52LCBjaGFtZWxpdW1fdXJsLCAiRmlyZU1peGVkSHBkUHVsc2VzIiwKKwkJ CQkgIihpQSkiLCBwb3J0LCBwdWxzZV93aWR0aHMpOworCWNoZWNrX3JwYygpOworCisJeG1scnBj X0RFQ1JFRihyZXMpOworCXhtbHJwY19ERUNSRUYod2lkdGgpOworCXhtbHJwY19ERUNSRUYocHVs c2Vfd2lkdGhzKTsKK30KKworLyoqCisgKiBjaGFtZWxpdW1fZmlyZV9taXhlZF9ocGRfcHVsc2Vz OgorICogQGlkOiBUaGUgSUQgb2YgdGhlIHBvcnQgdG8gZmlyZSBob3RwbHVnIHB1bHNlcyBvbgor ICogQC4uLjogVGhlIGxlbmd0aCBvZiBlYWNoIHB1bHNlIGluIG1pbGxpc2Vjb25kcywgdGVybWlu YXRlZCB3aXRoIGEgJTAKKyAqCisgKiBEb2VzIHRoZSBzYW1lIHRoaW5nIGFzICNjaGFtZWxpdW1f ZmlyZV9ocGRfcHVsc2VzLCBidXQgYWxsb3dzIHRoZSBjYWxsZXIgdG8KKyAqIHNwZWNpZnkgdGhl IGxlbmd0aCBvZiBlYWNoIGluZGl2aWR1YWwgcHVsc2UuCisgKi8KK3ZvaWQgY2hhbWVsaXVtX2Zp cmVfbWl4ZWRfaHBkX3B1bHNlcyhpbnQgaWQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJeG1s cnBjX3ZhbHVlICpwdWxzZV93aWR0aHMgPSB4bWxycGNfYXJyYXlfbmV3KCZlbnYpLCAqd2lkdGgs ICpyZXM7CisJaW50IGFyZzsKKworCWlndF9kZWJ1ZygiRmlyaW5nIG1peGVkIEhQRCBwdWxzZXMg b24gcG9ydCAlZFxuIiwgaWQpOworCisJdmFfc3RhcnQoYXJncywgaWQpOworCWZvciAoYXJnID0g dmFfYXJnKGFyZ3MsIGludCk7IGFyZzsgYXJnID0gdmFfYXJnKGFyZ3MsIGludCkpIHsKKwkJd2lk dGggPSB4bWxycGNfaW50X25ldygmZW52LCBhcmcpOworCQl4bWxycGNfYXJyYXlfYXBwZW5kX2l0 ZW0oJmVudiwgcHVsc2Vfd2lkdGhzLCB3aWR0aCk7CisJCXhtbHJwY19ERUNSRUYod2lkdGgpOwor CX0KKwl2YV9lbmQoYXJncyk7CisKKwlyZXMgPSB4bWxycGNfY2xpZW50X2NhbGwoJmVudiwgY2hh bWVsaXVtX3VybCwgIkZpcmVNaXhlZEhwZFB1bHNlcyIsCisJCQkJICIoaUEpIiwgaWQsIHB1bHNl X3dpZHRocyk7CisJY2hlY2tfcnBjKCk7CisJeG1scnBjX0RFQ1JFRihyZXMpOworCisJeG1scnBj X0RFQ1JFRihwdWxzZV93aWR0aHMpOworfQorCitzdGF0aWMgdm9pZCBhc3luY19ycGNfaGFuZGxl cihjb25zdCBjaGFyICpzZXJ2ZXJfdXJsLCBjb25zdCBjaGFyICptZXRob2RfbmFtZSwKKwkJCSAg ICAgIHhtbHJwY192YWx1ZSAqcGFyYW1fYXJyYXksIHZvaWQgKnVzZXJfZGF0YSwKKwkJCSAgICAg IHhtbHJwY19lbnYgKmZhdWx0LCB4bWxycGNfdmFsdWUgKnJlc3VsdCkKK3sKKwkvKiBXZSBkb24n dCBjYXJlIGFib3V0IHRoZSByZXNwb25zZXMgKi8KK30KKworLyoqCisgKiBjaGFtZWxpdW1fYXN5 bmNfaHBkX3B1bHNlX3N0YXJ0OgorICogQGlkOiBUaGUgSUQgb2YgdGhlIHBvcnQgdG8gZmlyZSBh IGhvdHBsdWcgcHVsc2Ugb24KKyAqIEBoaWdoOiBXaGV0aGVyIHRvIGZpcmUgYSBoaWdoIHB1bHNl IChlLmcuIHNpbXVsYXRlIGEgY29ubmVjdCksIG9yIGEgbG93CisgKiBwdWxzZSAoZS5nLiBzaW11 bGF0ZSBhIGRpc2Nvbm5lY3QpCisgKiBAZGVsYXlfc2VjczogSG93IGxvbmcgdG8gd2FpdCBiZWZv cmUgc2VuZGluZyB0aGUgSFBEIHB1bHNlLgorICoKKyAqIEluc3RydWN0cyB0aGUgY2hhbWVsaXVt IHRvIHNlbmQgYW4gaHBkIHB1bHNlIGFmdGVyIEBkZWxheV9zZWNzIHNlY29uZHMgaGF2ZQorICog cGFzc2VkLCB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBjaGFtZWxpdW0gdG8gZmluaXNoLiBUaGlz IGlzIHVzZWZ1bCBmb3IKKyAqIHRlc3RpbmcgdGhpbmdzIHN1Y2ggYXMgaHBkIGFmdGVyIGEgc3Vz cGVuZC9yZXN1bWUgY3ljbGUsIHNpbmNlIHdlIGNhbid0IHRlbGwKKyAqIHRoZSBjaGFtZWxpdW0g dG8gc2VuZCBhIGhvdHBsdWcgYXQgdGhlIHNhbWUgdGltZSB0aGF0IG91ciBzeXN0ZW0gaXMKKyAq IHN1c3BlbmRlZC4KKyAqCisgKiBJdCBpcyByZXF1aXJlZCB0aGF0IHRoZSB1c2VyIGV2ZW50dWFs bHkgY2FsbAorICogI2NoYW1lbGl1bV9hc3luY19ocGRfcHVsc2VfZmluaXNoLCB0byBjbGVhbiB1 cCB0aGUgbGVmdG92ZXIgWE1MLVJQQworICogcmVzcG9uc2VzIGZyb20gdGhlIGNoYW1lbGl1bS4K KyAqLwordm9pZCBjaGFtZWxpdW1fYXN5bmNfaHBkX3B1bHNlX3N0YXJ0KGludCBpZCwgYm9vbCBo aWdoLCBpbnQgZGVsYXlfc2VjcykKK3sKKwl4bWxycGNfdmFsdWUgKnB1bHNlX3dpZHRocyA9IHht bHJwY19hcnJheV9uZXcoJmVudiksICp3aWR0aDsKKworCS8qIFRPRE86IEFjdHVhbGx5IGltcGxl bWVudCBzb21ldGhpbmcgaW4gdGhlIGNoYW1lbGVvbiBzZXJ2ZXIgdG8gYWxsb3cKKwkgKiBmb3Ig ZGVsYXllZCBhY3Rpb25zIHN1Y2ggYXMgaG90cGx1Z3MuIFRoaXMgd291bGQgd29yayBhIGJpdCBi ZXR0ZXIKKwkgKiBhbmQgYWxsb3cgdXMgdG8gdGVzdCBzdXNwZW5kL3Jlc3VtZSBvbiBwb3J0cyB3 aXRob3V0IGhwZCBsaWtlIFZHQQorCSAqLworCisJaWd0X2RlYnVnKCJTZW5kaW5nIEhQRCBwdWxz ZSAoJXMpIG9uIHBvcnQgJWQgd2l0aCAlZCBzZWNvbmQgZGVsYXlcbiIsCisJCSAgaGlnaCA/ICJo aWdoLT5sb3ciIDogImxvdy0+aGlnaCIsIGlkLCBkZWxheV9zZWNzKTsKKworCS8qIElmIHdlJ3Jl IHN0YXJ0aW5nIGF0IGhpZ2gsIG1ha2UgdGhlIGZpcnN0IHB1bHNlIHdpZHRoIDAgc28gd2Uga2Vl cAorCSAqIHRoZSBwb3J0IGNvbm5lY3RlZCAqLworCWlmIChoaWdoKSB7CisJCXdpZHRoID0geG1s cnBjX2ludF9uZXcoJmVudiwgMCk7CisJCXhtbHJwY19hcnJheV9hcHBlbmRfaXRlbSgmZW52LCBw dWxzZV93aWR0aHMsIHdpZHRoKTsKKwkJeG1scnBjX0RFQ1JFRih3aWR0aCk7CisJfQorCisJd2lk dGggPSB4bWxycGNfaW50X25ldygmZW52LCBkZWxheV9zZWNzICogMTAwMCk7CisJeG1scnBjX2Fy cmF5X2FwcGVuZF9pdGVtKCZlbnYsIHB1bHNlX3dpZHRocywgd2lkdGgpOworCXhtbHJwY19ERUNS RUYod2lkdGgpOworCisJeG1scnBjX2NsaWVudF9jYWxsX2FzeW5jaChjaGFtZWxpdW1fdXJsLCAi RmlyZU1peGVkSHBkUHVsc2VzIiwKKwkJCQkgIGFzeW5jX3JwY19oYW5kbGVyLCBOVUxMLCAiKGlB KSIsCisJCQkJICBpZCwgcHVsc2Vfd2lkdGhzKTsKKwl4bWxycGNfREVDUkVGKHB1bHNlX3dpZHRo cyk7Cit9CisKKy8qKgorICogY2hhbWVsaXVtX2FzeW5jX2hwZF9wdWxzZV9maW5pc2g6CisgKgor ICogV2FpdHMgZm9yIGFueSBhc3luY2hyb25vdXMgUlBDIHN0YXJ0ZWQgYnkgI2NoYW1lbGl1bV9h c3luY19ocGRfcHVsc2Vfc3RhcnQKKyAqIHRvIGNvbXBsZXRlLCBhbmQgdGhlbiBjbGVhbnMgdXAg YW55IGxlZnRvdmVyIHJlc3BvbnNlcyBmcm9tIHRoZSBjaGFtZWxpdW0uCisgKiBJZiBhbGwgb2Yg dGhlIFJQQyBjYWxscyBoYXZlIGFscmVhZHkgY29tcGxldGVkLCB0aGlzIGZ1bmN0aW9uIHJldHVy bnMKKyAqIGltbWVkaWF0ZWx5LgorICovCit2b2lkIGNoYW1lbGl1bV9hc3luY19ocGRfcHVsc2Vf ZmluaXNoKHZvaWQpCit7CisJeG1scnBjX2NsaWVudF9ldmVudF9sb29wX2ZpbmlzaF9hc3luY2go KTsKK30KKworLyoqCisgKiBjaGFtZWxpdW1fbmV3X2VkaWQ6CisgKiBAZWRpZDogVGhlIGVkaWQg YmxvYiB0byB1cGxvYWQgdG8gdGhlIGNoYW1lbGl1bQorICoKKyAqIFVwbG9hZHMgYW5kIHJlZ2lz dGVycyBhIG5ldyBFRElEIHdpdGggdGhlIGNoYW1lbGl1bS4gVGhlIEVESUQgd2lsbCBiZQorICog ZGVzdHJveWVkIGF1dG9tYXRpY2FsbHkgd2hlbiAjY2hhbWVsaXVtX2RlaW5pdCBpcyBjYWxsZWQu CisgKgorICogUmV0dXJuczogVGhlIElEIG9mIHRoZSBFRElEIHVwbG9hZGVkIHRvIHRoZSBjaGFt ZWxpdW0uCisgKi8KK2ludCBjaGFtZWxpdW1fbmV3X2VkaWQoY29uc3QgdW5zaWduZWQgY2hhciAq ZWRpZCkKK3sKKwl4bWxycGNfdmFsdWUgKnJlczsKKwlzdHJ1Y3QgY2hhbWVsaXVtX2VkaWQgKmFs bG9jYXRlZF9lZGlkOworCWludCBlZGlkX2lkOworCisJcmVzID0geG1scnBjX2NsaWVudF9jYWxs KCZlbnYsIGNoYW1lbGl1bV91cmwsICJDcmVhdGVFZGlkIiwKKwkJCQkgIig2KSIsIGVkaWQsIEVE SURfTEVOR1RIKTsKKwljaGVja19ycGMoKTsKKworCXhtbHJwY19yZWFkX2ludCgmZW52LCByZXMs ICZlZGlkX2lkKTsKKwl4bWxycGNfREVDUkVGKHJlcyk7CisKKwlhbGxvY2F0ZWRfZWRpZCA9IG1h bGxvYyhzaXplb2Yoc3RydWN0IGNoYW1lbGl1bV9lZGlkKSk7CisJaWd0X2Fzc2VydChhbGxvY2F0 ZWRfZWRpZCk7CisKKwlhbGxvY2F0ZWRfZWRpZC0+aWQgPSBlZGlkX2lkOworCWlmIChhbGxvY2F0 ZWRfZWRpZHMpIHsKKwkJaWd0X2xpc3RfaW5zZXJ0KCZhbGxvY2F0ZWRfZWRpZHMtPmxpbmssICZh bGxvY2F0ZWRfZWRpZC0+bGluayk7CisJfSBlbHNlIHsKKwkJaWd0X2xpc3RfaW5pdCgmYWxsb2Nh dGVkX2VkaWQtPmxpbmspOworCQlhbGxvY2F0ZWRfZWRpZHMgPSBhbGxvY2F0ZWRfZWRpZDsKKwl9 CisKKwlyZXR1cm4gZWRpZF9pZDsKK30KKworc3RhdGljIHZvaWQgY2hhbWVsaXVtX2Rlc3Ryb3lf ZWRpZChpbnQgZWRpZF9pZCkKK3sKKwl4bWxycGNfdmFsdWUgKnJlczsKKworCXJlcyA9IHhtbHJw Y19jbGllbnRfY2FsbCgmZW52LCBjaGFtZWxpdW1fdXJsLCAiRGVzdHJveUVkaWQiLAorCQkJCSAi KGkpIiwgZWRpZF9pZCk7CisJY2hlY2tfcnBjKCk7CisKKwl4bWxycGNfREVDUkVGKHJlcyk7Cit9 CisKKy8qKgorICogY2hhbWVsaXVtX3BvcnRfc2V0X2VkaWQ6CisgKiBAaWQ6IFRoZSBJRCBvZiB0 aGUgcG9ydCB0byBzZXQgdGhlIEVESUQgb24KKyAqIEBlZGlkX2lkOiBUaGUgSUQgb2YgYW4gRURJ RCBvbiB0aGUgY2hhbWVsaXVtIGNyZWF0ZWQgd2l0aAorICogI2NoYW1lbGl1bV9uZXdfZWRpZCwg b3IgMCB0byBkaXNhYmxlIHRoZSBFRElEIG9uIHRoZSBwb3J0CisgKgorICogU2V0cyBhIHBvcnQg b24gdGhlIGNoYW1lbGl1bSB0byB1c2UgdGhlIHNwZWNpZmllZCBFRElELiBUaGlzIGRvZXMgbm90 IGZpcmUgYQorICogaG90cGx1ZyBwdWxzZSBvbiBpdCdzIG93biwgYW5kIG1lcmVseSBjaGFuZ2Vz IHdoYXQgRURJRCB0aGUgY2hhbWVsaXVtIHBvcnQKKyAqIHdpbGwgcmVwb3J0IHRvIHVzIHRoZSBu ZXh0IHRpbWUgd2UgcHJvYmUgaXQuIFVzZXJzIHdpbGwgbmVlZCB0byByZXByb2JlIHRoZQorICog Y29ubmVjdG9ycyB0aGVtc2VsdmVzIGlmIHRoZXkgd2FudCB0byBzZWUgdGhlIEVESUQgcmVwb3J0 ZWQgYnkgdGhlIHBvcnQKKyAqIGNoYW5nZS4KKyAqLwordm9pZCBjaGFtZWxpdW1fcG9ydF9zZXRf ZWRpZChpbnQgaWQsIGludCBlZGlkX2lkKQoreworCXhtbHJwY192YWx1ZSAqcmVzOworCisJcmVz ID0geG1scnBjX2NsaWVudF9jYWxsKCZlbnYsIGNoYW1lbGl1bV91cmwsICJBcHBseUVkaWQiLAor CQkJCSAiKGlpKSIsIGlkLCBlZGlkX2lkKTsKKwljaGVja19ycGMoKTsKKworCXhtbHJwY19ERUNS RUYocmVzKTsKK30KKworLyoqCisgKiBjaGFtZWxpdW1fcG9ydF9zZXRfZGRjX3N0YXRlOgorICog QGlkOiBUaGUgSUQgb2YgdGhlIHBvcnQgd2hvc2UgRERDIGJ1cyB3ZSB3YW50IHRvIG1vZGlmeQor ICogQGVuYWJsZWQ6IFdoZXRoZXIgb3Igbm90IHRvIGVuYWJsZSB0aGUgRERDIGJ1cworICoKKyAq IFRoaXMgZGlzYWJsZXMgdGhlIEREQyBidXMgKGUuZy4gdGhlIGkyYyBsaW5lIG9uIHRoZSBjb25u ZWN0b3IgdGhhdCBnaXZlcyB1cworICogYW4gRURJRCkgb2YgdGhlIHNwZWNpZmllZCBwb3J0IG9u IHRoZSBjaGFtZWxpdW0uIFRoaXMgaXMgdXNlZnVsIGZvciB0ZXN0aW5nCisgKiBiZWhhdmlvciBv biBsZWdhY3kgY29ubmVjdG9ycyBzdWNoIGFzIFZHQSwgd2hlcmUgdGhlIHByZXNlbmNlIG9mIGEg RERDIGJ1cworICogaXMgbm90IGFsd2F5cyBndWFyYW50ZWVkLgorICovCit2b2lkIGNoYW1lbGl1 bV9wb3J0X3NldF9kZGNfc3RhdGUoaW50IHBvcnQsIGJvb2wgZW5hYmxlZCkKK3sKKwl4bWxycGNf dmFsdWUgKnJlczsKKworCWlndF9kZWJ1ZygiJXNhYmxpbmcgRERDIGJ1cyBvbiBwb3J0ICVkXG4i LAorCQkgIGVuYWJsZWQgPyAiRW4iIDogIkRpcyIsIHBvcnQpOworCisJcmVzID0geG1scnBjX2Ns aWVudF9jYWxsKCZlbnYsIGNoYW1lbGl1bV91cmwsICJTZXREZGNTdGF0ZSIsCisJCQkJICIoaWIp IiwgcG9ydCwgZW5hYmxlZCk7CisJY2hlY2tfcnBjKCk7CisKKwl4bWxycGNfREVDUkVGKHJlcyk7 Cit9CisKKy8qKgorICogY2hhbWVsaXVtX3BvcnRfZ2V0X2RkY19zdGF0ZToKKyAqIEBpZDogVGhl IElEIG9mIHRoZSBwb3J0IHdob3NlIEREQyBidXMgd2Ugd2FudCB0byBjaGVjayB0aGUgc3RhdHVz IG9mCisgKgorICogQ2hlY2sgd2hldGhlciBvciBub3QgdGhlIEREQyBidXMgb24gdGhlIHNwZWNp ZmllZCBjaGFtZWxpdW0gcG9ydCBpcyBlbmFibGVkCisgKiBvciBub3QuCisgKgorICogUmV0dXJu czogVHJ1ZSBpZiB0aGUgRERDIGJ1cyBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuCisgKi8K K2Jvb2wgY2hhbWVsaXVtX3BvcnRfZ2V0X2RkY19zdGF0ZShpbnQgaWQpCit7CisJeG1scnBjX3Zh bHVlICpyZXM7CisJeG1scnBjX2Jvb2wgZW5hYmxlZDsKKworCXJlcyA9IHhtbHJwY19jbGllbnRf Y2FsbCgmZW52LCBjaGFtZWxpdW1fdXJsLCAiSXNEZGNFbmFibGVkIiwKKwkJCQkgIihpKSIsIGlk KTsKKwljaGVja19ycGMoKTsKKworCXhtbHJwY19yZWFkX2Jvb2woJmVudiwgcmVzLCAmZW5hYmxl ZCk7CisKKwl4bWxycGNfREVDUkVGKHJlcyk7CisJcmV0dXJuIGVuYWJsZWQ7Cit9CisKKy8qKgor ICogY2hhbWVsaXVtX3BvcnRfZ2V0X3Jlc29sdXRpb246CisgKiBAaWQ6IFRoZSBJRCBvZiB0aGUg cG9ydCB3aG9zZSBkaXNwbGF5IHJlc29sdXRpb24gd2Ugd2FudCB0byBjaGVjaworICogQHg6IFdo ZXJlIHRvIHN0b3JlIHRoZSBob3Jpem9udGFsIHJlc29sdXRpb24gb2YgdGhlIHBvcnQKKyAqIEB5 OiBXaGVyZSB0byBzdG9yZSB0aGUgdmVyaWNhbCByZXNvbHV0aW9uIG9mIHRoZSBwb3J0CisgKgor ICogQ2hlY2sgdGhlIGN1cnJlbnQgcmVwb3J0ZWQgZGlzcGxheSByZXNvbHV0aW9uIG9mIHRoZSBz cGVjaWZpZWQgcG9ydCBvbiB0aGUKKyAqIGNoYW1lbGl1bS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBw cm92aWRlZCBieSB0aGUgY2hhbWVsaXVtIGl0c2VsZiwgbm90IERSTS4KKyAqIFVzZWZ1bCBmb3Ig dmVyaWZ5aW5nIHRoYXQgd2UgcmVhbGx5IGFyZSBzY2FubmluZyBvdXQgYXQgdGhlIHJlc29sdXRp b24gd2UKKyAqIHRoaW5rIHdlIGFyZS4KKyAqLwordm9pZCBjaGFtZWxpdW1fcG9ydF9nZXRfcmVz b2x1dGlvbihpbnQgaWQsIGludCAqeCwgaW50ICp5KQoreworCXhtbHJwY192YWx1ZSAqcmVzLCAq cmVzX3gsICpyZXNfeTsKKworCXJlcyA9IHhtbHJwY19jbGllbnRfY2FsbCgmZW52LCBjaGFtZWxp dW1fdXJsLCAiRGV0ZWN0UmVzb2x1dGlvbiIsCisJCQkJICIoaSkiLCBpZCk7CisJY2hlY2tfcnBj KCk7CisKKwl4bWxycGNfYXJyYXlfcmVhZF9pdGVtKCZlbnYsIHJlcywgMCwgJnJlc194KTsKKwl4 bWxycGNfYXJyYXlfcmVhZF9pdGVtKCZlbnYsIHJlcywgMSwgJnJlc195KTsKKwl4bWxycGNfcmVh ZF9pbnQoJmVudiwgcmVzX3gsIHgpOworCXhtbHJwY19yZWFkX2ludCgmZW52LCByZXNfeSwgeSk7 CisKKwl4bWxycGNfREVDUkVGKHJlc194KTsKKwl4bWxycGNfREVDUkVGKHJlc195KTsKKwl4bWxy cGNfREVDUkVGKHJlcyk7Cit9CisKKy8qKgorICogY2hhbWVsaXVtX2dldF9jcmNfZm9yX2FyZWE6 CisgKiBAaWQ6IFRoZSBJRCBvZiB0aGUgcG9ydCBmcm9tIHdoaWNoIHdlIHdhbnQgdG8gcmV0cmll dmUgdGhlIENSQworICogQHg6IFRoZSBYIGNvb3JkaW5hdGUgb24gdGhlIGVtdWxhdGVkIGRpc3Bs YXkgdG8gc3RhcnQgY2FsY3VsYXRpbmcgdGhlIENSQworICogZnJvbQorICogQHk6IFRoZSBZIGNv b3JkaW5hdGUgb24gdGhlIGVtdWxhdGVkIGRpc3BsYXkgdG8gc3RhcnQgY2FsY3VsYXRpbmcgdGhl IENSQworICogZnJvbQorICogQHc6IFRoZSB3aWR0aCBvZiB0aGUgYXJlYSB0byBmZXRjaCB0aGUg Q1JDIGZyb20KKyAqIEBoOiBUaGUgaGVpZ2h0IG9mIHRoZSBhcmVhIHRvIGZldGNoIHRoZSBDUkMg ZnJvbQorICoKKyAqIFJlYWRzIGJhY2sgdGhlIHBpeGVsIENSQyBmb3IgYW4gYXJlYSBvbiB0aGUg c3BlY2lmaWVkIGNoYW1lbGl1bSBwb3J0LiBUaGlzCisgKiBpcyB0aGUgc2FtZSBhcyB1c2luZyB0 aGUgQ1JDIHJlYWRiYWNrIGZyb20gYSBHUFUsIHRoZSBtYWluIGRpZmZlcmVuY2UgYmVpbmcKKyAq IHRoZSBkYXRhIGlzIHByb3ZpZGVkIGJ5IHRoZSBjaGFtZWxpdW0gYW5kIGFsc28gYWxsb3dzIHVz IHRvIHNwZWNpZnkgYSByZWdpb24KKyAqIG9mIHRoZSBzY3JlZW4gdG8gdXNlIGFzIG9wcG9zZWQg dG8gdGhlIGVudGlyZSB0aGluZy4KKyAqCisgKiBSZXR1cm5zOiBUaGUgQ1JDIHJlYWQgYmFjayBm cm9tIHRoZSBjaGFtZWxpdW0KKyAqLwordW5zaWduZWQgaW50IGNoYW1lbGl1bV9nZXRfY3JjX2Zv cl9hcmVhKGludCBpZCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCit7CisJeG1scnBjX3Zh bHVlICpyZXM7CisJdW5zaWduZWQgaW50IGNyYzsKKworCXJlcyA9IHhtbHJwY19jbGllbnRfY2Fs bCgmZW52LCBjaGFtZWxpdW1fdXJsLCAiQ29tcHV0ZVBpeGVsQ2hlY2tzdW0iLAorCQkJCSAiKGlp aWlpKSIsIGlkLCB4LCB5LCB3LCBoKTsKKwljaGVja19ycGMoKTsKKworCXhtbHJwY19yZWFkX2lu dCgmZW52LCByZXMsIChpbnQqKSgmY3JjKSk7CisKKwl4bWxycGNfREVDUkVGKHJlcyk7CisJcmV0 dXJuIGNyYzsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBjaGFtZWxpdW1fZ2V0X3BvcnRfdHlw ZShpbnQgcG9ydCkKK3sKKwl4bWxycGNfdmFsdWUgKnJlczsKKwljb25zdCBjaGFyICpwb3J0X3R5 cGVfc3RyOworCXVuc2lnbmVkIGludCBwb3J0X3R5cGU7CisKKwlyZXMgPSB4bWxycGNfY2xpZW50 X2NhbGwoJmVudiwgY2hhbWVsaXVtX3VybCwgIkdldENvbm5lY3RvclR5cGUiLAorCQkJCSAiKGkp IiwgcG9ydCk7CisJY2hlY2tfcnBjKCk7CisKKwl4bWxycGNfcmVhZF9zdHJpbmcoJmVudiwgcmVz LCAmcG9ydF90eXBlX3N0cik7CisJaWd0X2RlYnVnKCJQb3J0ICVkIGlzIG9mIHR5cGUgJyVzJ1xu IiwgcG9ydCwgcG9ydF90eXBlX3N0cik7CisKKwlpZiAoc3RyY21wKHBvcnRfdHlwZV9zdHIsICJE UCIpID09IDApCisJCXBvcnRfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydDsK KwllbHNlIGlmIChzdHJjbXAocG9ydF90eXBlX3N0ciwgIkhETUkiKSA9PSAwKQorCQlwb3J0X3R5 cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUE7CisJZWxzZSBpZiAoc3RyY21wKHBvcnRfdHlw ZV9zdHIsICJWR0EiKSA9PSAwKQorCQlwb3J0X3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfVkdB OworCWVsc2UKKwkJcG9ydF90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd247CisKKwlm cmVlKCh2b2lkKilwb3J0X3R5cGVfc3RyKTsKKwl4bWxycGNfREVDUkVGKHJlcyk7CisKKwlyZXR1 cm4gcG9ydF90eXBlOworfQorCitzdGF0aWMgdm9pZCBjaGFtZWxpdW1fcHJvYmVfcG9ydHModm9p ZCkKK3sKKwl4bWxycGNfdmFsdWUgKnJlcywgKnBvcnRfdmFsOworCXN0cnVjdCBjaGFtZWxpdW1f cG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBpbnQgcG9ydF90eXBlOworCWludCBpZCwgaSwgbGVuOwor CisJLyogRmlndXJlIG91dCB3aGF0IHBvcnRzIGFyZSBjb25uZWN0ZWQsIGFsb25nIHdpdGggdGhl aXIgdHlwZXMgKi8KKwlyZXMgPSB4bWxycGNfY2xpZW50X2NhbGwoJmVudiwgY2hhbWVsaXVtX3Vy bCwgIlByb2JlSW5wdXRzIiwgIigpIik7CisJY2hlY2tfcnBjKCk7CisKKwlsZW4gPSB4bWxycGNf YXJyYXlfc2l6ZSgmZW52LCByZXMpOworCWNoYW1lbGl1bV9wb3J0cyA9IGNhbGxvYyhzaXplb2Yo c3RydWN0IGNoYW1lbGl1bV9wb3J0KSwgbGVuKTsKKworCWlndF9hc3NlcnQoY2hhbWVsaXVtX3Bv cnRzKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQl4bWxycGNfYXJyYXlfcmVh ZF9pdGVtKCZlbnYsIHJlcywgaSwgJnBvcnRfdmFsKTsKKwkJeG1scnBjX3JlYWRfaW50KCZlbnYs IHBvcnRfdmFsLCAmaWQpOworCQl4bWxycGNfREVDUkVGKHBvcnRfdmFsKTsKKworCQlwb3J0X3R5 cGUgPSBjaGFtZWxpdW1fZ2V0X3BvcnRfdHlwZShpZCk7CisJCWlmIChwb3J0X3R5cGUgPT0gRFJN X01PREVfQ09OTkVDVE9SX1Vua25vd24pCisJCQljb250aW51ZTsKKworCQlwb3J0ID0gJmNoYW1l bGl1bV9wb3J0c1tjaGFtZWxpdW1fcG9ydF9jb3VudF07CisJCXBvcnQtPmlkID0gaWQ7CisJCXBv cnQtPnR5cGUgPSBwb3J0X3R5cGU7CisJCXBvcnQtPm9yaWdpbmFsX3BsdWdnZWQgPSBjaGFtZWxp dW1faXNfcGx1Z2dlZChpZCk7CisJCWNoYW1lbGl1bV9wb3J0X2NvdW50Kys7CisJfQorCisJY2hh bWVsaXVtX3BvcnRzID0gcmVhbGxvYyhjaGFtZWxpdW1fcG9ydHMsCisJCQkJICBzaXplb2Yoc3Ry dWN0IGNoYW1lbGl1bV9wb3J0KSAqCisJCQkJICBjaGFtZWxpdW1fcG9ydF9jb3VudCk7CisJaWd0 X2Fzc2VydChjaGFtZWxpdW1fcG9ydHMpOworCisJeG1scnBjX0RFQ1JFRihyZXMpOworfQorCisv KioKKyAqIGNoYW1lbGl1bV9yZXNldDoKKyAqCisgKiBSZXNldHMgdGhlIGNoYW1lbGl1bSdzIElP IGJvYXJkLiBBcyB3ZWxsLCB0aGlzIGFsc28gaGFzIHRoZSBlZmZlY3Qgb2YKKyAqIGNhdXNpbmcg YWxsIG9mIHRoZSBjaGFtZWxpdW0gcG9ydHMgdG8gZ2V0IHNldCB0byB1bnBsdWdnZWQKKyAqLwor dm9pZCBjaGFtZWxpdW1fcmVzZXQodm9pZCkKK3sKKwl4bWxycGNfdmFsdWUgKnJlczsKKworCWln dF9kZWJ1ZygiUmVzZXR0aW5nIHRoZSBjaGFtZWxpdW1cbiIpOworCisJcmVzID0geG1scnBjX2Ns aWVudF9jYWxsKCZlbnYsIGNoYW1lbGl1bV91cmwsICJSZXNldCIsICIoKSIpOworCWNoZWNrX3Jw YygpOworCisJeG1scnBjX0RFQ1JFRihyZXMpOworfQorCitzdGF0aWMgdm9pZCBjaGFtZWxpdW1f ZXhpdF9oYW5kbGVyKGludCBzaWcpCit7CisJY2hhbWVsaXVtX2RlaW5pdCgpOworfQorCisvKioK KyAqIGNoYW1lbGl1bV9pbml0OgorICoKKyAqIFNldHMgdXAgYSBjb25uZWN0aW9uIHdpdGggYSBj aGFtZWxpdW0sIHVzaW5nIHRoZSB1cmwgcHJvdmlkZWQgaW4gdGhlCisgKiBDSEFNRUxJVU1fSE9T VCBlbnZpb3JubWVudCB2YXJpYWJsZS4gVGhpcyBtdXN0IGJlIGNhbGxlZCBmaXJzdCBiZWZvcmUg dHJ5aW5nCisgKiB0byB1c2UgdGhlIGNoYW1lbGl1bS4gV2hlbiB0aGUgY29ubmVjdGlvbiBpcyBu byBsb25nZXIgbmVlZGVkLCB0aGUgdXNlcgorICogc2hvdWxkIGNhbGwgI2NoYW1lbGl1bV9kZWlu aXQgdG8gZnJlZSB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIGNvbm5lY3Rpb24uCisgKgorICog SWYgd2UgZmFpbCB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHdpdGggdGhlIGNoYW1lbGl1bSwg d2UgZmFpbCB0aGUgY3VycmVudAorICogdGVzdC4KKyAqLwordm9pZCBjaGFtZWxpdW1faW5pdCh2 b2lkKQoreworCWNoYW1lbGl1bV91cmwgPSBnZXRlbnYoIkNIQU1FTElVTV9IT1NUIik7CisJaWd0 X2Fzc2VydChjaGFtZWxpdW1fdXJsICE9IE5VTEwpOworCisJeG1scnBjX2Vudl9pbml0KCZlbnYp OworCisJeG1scnBjX2NsaWVudF9pbml0MigmZW52LCBYTUxSUENfQ0xJRU5UX05PX0ZMQUdTLCBQ QUNLQUdFLAorCQkJICAgIFBBQ0tBR0VfVkVSU0lPTiwgTlVMTCwgMCk7CisJaWd0X2ZhaWxfb25f ZihlbnYuZmF1bHRfb2NjdXJyZWQsCisJCSAgICAgICJGYWlsZWQgdG8gaW5pdCB4bWxycGM6ICVz XG4iLAorCQkgICAgICBlbnYuZmF1bHRfc3RyaW5nKTsKKworCWNoYW1lbGl1bV9wcm9iZV9wb3J0 cygpOworCWNoYW1lbGl1bV9yZXNldCgpOworCisJaWd0X2luc3RhbGxfZXhpdF9oYW5kbGVyKGNo YW1lbGl1bV9leGl0X2hhbmRsZXIpOworfQorCisvKioKKyAqIGNoYW1lbGl1bV9kZWluaXQ6Cisg KgorICogRnJlZXMgdGhlIHJlc291cmNlcyB1c2VkIGJ5IGEgY29ubmVjdGlvbiB0byB0aGUgY2hh bWVsaXVtIHRoYXQgd2FzIHNldCB1cAorICogd2l0aCAjY2hhbWVsaXVtX2luaXQuIEFzIHdlbGws IHRoaXMgZnVuY3Rpb24gcmVzdG9yZXMgdGhlIHN0YXRlIG9mIHRoZQorICogY2hhbWVsaXVtIGxp a2UgaXQgd2FzIGJlZm9yZSBjYWxsaW5nICNjaGFtZWxpdW1faW5pdC4gVGhpcyBmdW5jdGlvbiBp cyBhbHNvCisgKiBjYWxsZWQgYXMgYW4gZXhpdCBoYW5kbGVyLCBzbyB1c2VycyBvbmx5IG5lZWQg dG8gY2FsbCBtYW51YWxseSBpZiB0aGV5IGRvbid0CisgKiB3YW50IHRoZSBjaGFtZWxpdW0gaW50 ZXJmZXJpbmcgd2l0aCBvdGhlciB0ZXN0cyBpbiB0aGUgc2FtZSBmaWxlLgorICovCit2b2lkIGNo YW1lbGl1bV9kZWluaXQodm9pZCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY2hhbWVsaXVtX2VkaWQg KnBvcywgKnRtcDsKKworCWlmICghY2hhbWVsaXVtX3VybCkKKwkJcmV0dXJuOworCisJLyogUmVz dG9yZSB0aGUgb3JpZ2luYWwgc3RhdGUgb2YgYWxsIG9mIHRoZSBjaGFtZWxpdW0gcG9ydHMgKi8K KwlpZ3RfZGVidWcoIlJlc3RvcmluZyBvcmlnaW5hbCBzdGF0ZSBvZiBjaGFtZWxpdW1cbiIpOwor CWNoYW1lbGl1bV9yZXNldCgpOworCWZvciAoaSA9IDA7IGkgPCBjaGFtZWxpdW1fcG9ydF9jb3Vu dDsgaSsrKSB7CisJCWlmIChjaGFtZWxpdW1fcG9ydHNbaV0ub3JpZ2luYWxfcGx1Z2dlZCkKKwkJ CWNoYW1lbGl1bV9wbHVnKGNoYW1lbGl1bV9wb3J0c1tpXS5pZCk7CisJfQorCisJLyogRGVzdHJv eSBhbnkgRURJRHMgd2UgY3JlYXRlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgbGVhayB0aGVtICov CisJaWd0X2xpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJmFsbG9jYXRlZF9lZGlkcy0+bGlu aywgbGluaykgeworCQljaGFtZWxpdW1fZGVzdHJveV9lZGlkKHBvcy0+aWQpOworCQlmcmVlKHBv cyk7CisJfQorCisJeG1scnBjX2NsaWVudF9jbGVhbnVwKCk7CisJeG1scnBjX2Vudl9jbGVhbigm ZW52KTsKKworCWZyZWUoY2hhbWVsaXVtX3BvcnRzKTsKKwlhbGxvY2F0ZWRfZWRpZHMgPSBOVUxM OworCWNoYW1lbGl1bV91cmwgPSBOVUxMOworCWNoYW1lbGl1bV9wb3J0cyA9IE5VTEw7CisJY2hh bWVsaXVtX3BvcnRfY291bnQgPSAwOworfQorCmRpZmYgLS1naXQgYS9saWIvaWd0X2NoYW1lbGl1 bS5oIGIvbGliL2lndF9jaGFtZWxpdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi45MDA2MTVjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2lndF9jaGFtZWxpdW0uaApAQCAt MCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTYgUmVkIEhhdCBJbmMuCisgKgor ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK KyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVk IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2Fy ZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICog RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6 IEx5dWRlIFBhdWwgPGx5dWRlQHJlZGhhdC5jb20+CisgKi8KKworI2lmbmRlZiBJR1RfQ0hBTUVM SVVNX0gKKyNkZWZpbmUgSUdUX0NIQU1FTElVTV9ICisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp bmNsdWRlICJpZ3QuaCIKKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKy8qKgorICogY2hhbWVsaXVt X3BvcnQ6CisgKiBAdHlwZTogVGhlIERSTSBjb25uZWN0b3IgdHlwZSBvZiB0aGUgY2hhbWVsaXVt IHBvcnQKKyAqIEBpZDogVGhlIElEIG9mIHRoZSBjaGFtZWxpdW0gcG9ydAorICovCitzdHJ1Y3Qg Y2hhbWVsaXVtX3BvcnQgeworCXVuc2lnbmVkIGludCB0eXBlOworCWludCBpZDsKKworCS8qIEZv ciByZXN0b3JpbmcgdGhlIG9yaWdpbmFsIHBvcnQgc3RhdGUgYWZ0ZXIgZmluaXNoaW5nIHRlc3Rz ICovCisJYm9vbCBvcmlnaW5hbF9wbHVnZ2VkOworfTsKKworZXh0ZXJuIGludCBjaGFtZWxpdW1f cG9ydF9jb3VudDsKK2V4dGVybiBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKmNoYW1lbGl1bV9wb3J0 czsKKworLyoqCisgKiBpZ3RfcmVxdWlyZV9jaGFtZWxpdW06CisgKgorICogQ2hlY2tzIHdoZXRo ZXIgb3Igbm90IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBDSEFNRUxJVU1fSE9TVCBpcyBub24t bnVsbCwKKyAqIG90aGVyd2lzZSBza2lwcyB0aGUgY3VycmVudCB0ZXN0LgorICovCisjZGVmaW5l IGlndF9yZXF1aXJlX2NoYW1lbGl1bSgpIFwKKwlpZ3RfcmVxdWlyZShnZXRlbnYoIkNIQU1FTElV TV9IT1NUIikgIT0gTlVMTCk7CisKK3ZvaWQgY2hhbWVsaXVtX2luaXQodm9pZCk7Cit2b2lkIGNo YW1lbGl1bV9kZWluaXQodm9pZCk7Cit2b2lkIGNoYW1lbGl1bV9yZXNldCh2b2lkKTsKKwordm9p ZCBjaGFtZWxpdW1fcGx1ZyhpbnQgaWQpOwordm9pZCBjaGFtZWxpdW1fdW5wbHVnKGludCBpZCk7 Citib29sIGNoYW1lbGl1bV9pc19wbHVnZ2VkKGludCBpZCk7Citib29sIGNoYW1lbGl1bV9wb3J0 X3dhaXRfdmlkZW9faW5wdXRfc3RhYmxlKGludCBpZCwgaW50IHRpbWVvdXRfc2Vjcyk7Cit2b2lk IGNoYW1lbGl1bV9maXJlX21peGVkX2hwZF9wdWxzZXMoaW50IGlkLCAuLi4pOwordm9pZCBjaGFt ZWxpdW1fZmlyZV9ocGRfcHVsc2VzKGludCBpZCwgaW50IHdpZHRoLCBpbnQgY291bnQpOwordm9p ZCBjaGFtZWxpdW1fYXN5bmNfaHBkX3B1bHNlX3N0YXJ0KGludCBpZCwgYm9vbCBoaWdoLCBpbnQg ZGVsYXlfc2Vjcyk7Cit2b2lkIGNoYW1lbGl1bV9hc3luY19ocGRfcHVsc2VfZmluaXNoKHZvaWQp OworaW50IGNoYW1lbGl1bV9uZXdfZWRpZChjb25zdCB1bnNpZ25lZCBjaGFyICplZGlkKTsKK3Zv aWQgY2hhbWVsaXVtX3BvcnRfc2V0X2VkaWQoaW50IGlkLCBpbnQgZWRpZF9pZCk7Citib29sIGNo YW1lbGl1bV9wb3J0X2dldF9kZGNfc3RhdGUoaW50IGlkKTsKK3ZvaWQgY2hhbWVsaXVtX3BvcnRf c2V0X2RkY19zdGF0ZShpbnQgaWQsIGJvb2wgZW5hYmxlZCk7Cit2b2lkIGNoYW1lbGl1bV9wb3J0 X2dldF9yZXNvbHV0aW9uKGludCBpZCwgaW50ICp4LCBpbnQgKnkpOwordW5zaWduZWQgaW50IGNo YW1lbGl1bV9nZXRfY3JjX2Zvcl9hcmVhKGludCBpZCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50 IGgpOworCisjZW5kaWYgLyogSUdUX0NIQU1FTElVTV9IICovCmRpZmYgLS1naXQgYS9saWIvaWd0 X2ttcy5jIGIvbGliL2lndF9rbXMuYwppbmRleCA5ODk3MDRlLi43NzY4ZDdiIDEwMDY0NAotLS0g YS9saWIvaWd0X2ttcy5jCisrKyBiL2xpYi9pZ3Rfa21zLmMKQEAgLTQwLDYgKzQwLDEwIEBACiAj ZW5kaWYKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZF X0NIQU1FTElVTQorI2luY2x1ZGUgPGxpYnVkZXYuaD4KKyNpbmNsdWRlIDxwb2xsLmg+CisjZW5k aWYKIAogI2luY2x1ZGUgPGk5MTVfZHJtLmg+CiAKQEAgLTI3NjAsNiArMjc2NCwxMDkgQEAgdm9p ZCBpZ3RfcmVzZXRfY29ubmVjdG9ycyh2b2lkKQogCQkJICAgICAgImRldGVjdCIpOwogfQogCisj aWZkZWYgSEFWRV9DSEFNRUxJVU0KK3N0YXRpYyBzdHJ1Y3QgdWRldl9tb25pdG9yICpob3RwbHVn X21vbjsKKworLyoqCisgKiBpZ3Rfd2F0Y2hfaG90cGx1ZzoKKyAqCisgKiBCZWdpbiBtb25pdG9y aW5nIHVkZXYgZm9yIGhvdHBsdWcgZXZlbnRzLgorICovCit2b2lkIGlndF93YXRjaF9ob3RwbHVn KHZvaWQpCit7CisJc3RydWN0IHVkZXYgKnVkZXY7CisJaW50IHJldCwgZmxhZ3MsIGZkOworCisJ aWYgKGhvdHBsdWdfbW9uKQorCQlpZ3RfY2xlYW51cF9ob3RwbHVnKCk7CisKKwl1ZGV2ID0gdWRl dl9uZXcoKTsKKwlpZ3RfYXNzZXJ0KHVkZXYgIT0gTlVMTCk7CisKKwlob3RwbHVnX21vbiA9IHVk ZXZfbW9uaXRvcl9uZXdfZnJvbV9uZXRsaW5rKHVkZXYsICJ1ZGV2Iik7CisJaWd0X2Fzc2VydCho b3RwbHVnX21vbiAhPSBOVUxMKTsKKworCXJldCA9IHVkZXZfbW9uaXRvcl9maWx0ZXJfYWRkX21h dGNoX3N1YnN5c3RlbV9kZXZ0eXBlKGhvdHBsdWdfbW9uLAorCQkJCQkJCSAgICAgICJkcm0iLAor CQkJCQkJCSAgICAgICJkcm1fbWlub3IiKTsKKwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisJcmV0 ID0gdWRldl9tb25pdG9yX2ZpbHRlcl91cGRhdGUoaG90cGx1Z19tb24pOworCWlndF9hc3NlcnRf ZXEocmV0LCAwKTsKKwlyZXQgPSB1ZGV2X21vbml0b3JfZW5hYmxlX3JlY2VpdmluZyhob3RwbHVn X21vbik7CisJaWd0X2Fzc2VydF9lcShyZXQsIDApOworCisJLyogU2V0IHRoZSBmZCBmb3IgdWRl diBhcyBub24gYmxvY2tpbmcgKi8KKwlmZCA9IHVkZXZfbW9uaXRvcl9nZXRfZmQoaG90cGx1Z19t b24pOworCWZsYWdzID0gZmNudGwoZmQsIEZfR0VURkwsIDApOworCWlndF9hc3NlcnQoZmxhZ3Mp OworCisJZmxhZ3MgfD0gT19OT05CTE9DSzsKKwlpZ3RfYXNzZXJ0X25lcShmY250bChmZCwgRl9T RVRGTCwgZmxhZ3MpLCAtMSk7Cit9CisKKy8qKgorICogaWd0X2hvdHBsdWdfZGV0ZWN0ZWQ6Cisg KiBAdGltZW91dF9zZWNzOiBIb3cgbG9uZyB0byB3YWl0IGZvciBhIGhvdHBsdWcgZXZlbnQgdG8g b2NjdXIuCisgKgorICogQXNzZXJ0IHRoYXQgYSBob3RwbHVnIGV2ZW50IHdhcyByZWNlaXZlZCBz aW5jZSB3ZSBsYXN0IGNoZWNrZWQgdGhlIG1vbml0b3IuCisgKi8KK2Jvb2wgaWd0X2hvdHBsdWdf ZGV0ZWN0ZWQoaW50IHRpbWVvdXRfc2VjcykKK3sKKwlzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldjsK Kwljb25zdCBjaGFyICpob3RwbHVnX3ZhbDsKKwlzdHJ1Y3QgcG9sbGZkIGZkID0geworCQkuZmQg PSB1ZGV2X21vbml0b3JfZ2V0X2ZkKGhvdHBsdWdfbW9uKSwKKwkJLmV2ZW50cyA9IFBPTExJTgor CX07CisJYm9vbCBob3RwbHVnX3JlY2VpdmVkID0gZmFsc2U7CisKKwkvKiBHbyB0aHJvdWdoIGFs bCBvZiB0aGUgZXZlbnRzIHBlbmRpbmcgb24gdGhlIHVkZXYgbW9uaXRvci4gT25jZSB3ZQorCSAq IHJlY2VpdmUgYSBob3RwbHVnLCB3ZSBjb250aW51ZSBnb2luZyB0aHJvdWdoIHRoZSByZXN0IG9m IHRoZSBldmVudHMKKwkgKiBzbyB0aGF0IHJlZHVuZGFudCBob3RwbHVnIGV2ZW50cyBkb24ndCBj aGFuZ2UgdGhlIHJlc3VsdHMgb2YgZnV0dXJlCisJICogY2hlY2tzCisJICovCisJd2hpbGUgKCFo b3RwbHVnX3JlY2VpdmVkICYmIHBvbGwoJmZkLCAxLCB0aW1lb3V0X3NlY3MgKiAxMDAwKSkgewor CQlkZXYgPSB1ZGV2X21vbml0b3JfcmVjZWl2ZV9kZXZpY2UoaG90cGx1Z19tb24pOworCisJCWhv dHBsdWdfdmFsID0gdWRldl9kZXZpY2VfZ2V0X3Byb3BlcnR5X3ZhbHVlKGRldiwgIkhPVFBMVUci KTsKKwkJaWYgKGhvdHBsdWdfdmFsICYmIGF0b2koaG90cGx1Z192YWwpID09IDEpCisJCQlob3Rw bHVnX3JlY2VpdmVkID0gdHJ1ZTsKKworCQl1ZGV2X2RldmljZV91bnJlZihkZXYpOworCX0KKwor CXJldHVybiBob3RwbHVnX3JlY2VpdmVkOworfQorCisvKioKKyAqIGlndF9mbHVzaF9ob3RwbHVn czoKKyAqIEBtb246IEEgdWRldiBtb25pdG9yIGNyZWF0ZWQgYnkgI2lndF93YXRjaF9ob3RwbHVn CisgKgorICogR2V0IHJpZCBvZiBhbnkgcGVuZGluZyBob3RwbHVnIGV2ZW50cyB3YWl0aW5nIG9u IHRoZSB1ZGV2IG1vbml0b3IKKyAqLwordm9pZCBpZ3RfZmx1c2hfaG90cGx1Z3Modm9pZCkKK3sK KwlzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldjsKKworCXdoaWxlICgoZGV2ID0gdWRldl9tb25pdG9y X3JlY2VpdmVfZGV2aWNlKGhvdHBsdWdfbW9uKSkpCisJCXVkZXZfZGV2aWNlX3VucmVmKGRldik7 Cit9CisKKy8qKgorICogaWd0X2NsZWFudXBfaG90cGx1ZzoKKyAqCisgKiBDbGVhbnVwIHRoZSBy ZXNvdXJjZXMgYWxsb2NhdGVkIGJ5ICNpZ3Rfd2F0Y2hfaG90cGx1ZworICovCit2b2lkIGlndF9j bGVhbnVwX2hvdHBsdWcodm9pZCkKK3sKKwlzdHJ1Y3QgdWRldiAqdWRldiA9IHVkZXZfbW9uaXRv cl9nZXRfdWRldihob3RwbHVnX21vbik7CisKKwl1ZGV2X21vbml0b3JfdW5yZWYoaG90cGx1Z19t b24pOworCWhvdHBsdWdfbW9uID0gTlVMTDsKKwl1ZGV2X3VucmVmKHVkZXYpOworfQorI2VuZGlm CisKIC8qKgogICoga21zdGVzdF9nZXRfdmJsX2ZsYWc6CiAgKiBAcGlwZV9pZDogUGlwZSB0byBj b252ZXJ0IHRvIGZsYWcgcmVwcmVzZW50YXRpb24uCmRpZmYgLS1naXQgYS9saWIvaWd0X2ttcy5o IGIvbGliL2lndF9rbXMuaAppbmRleCA2NDIyYWRjLi5kMGI2N2UwIDEwMDY0NAotLS0gYS9saWIv aWd0X2ttcy5oCisrKyBiL2xpYi9pZ3Rfa21zLmgKQEAgLTMxLDYgKzMxLDkgQEAKICNpbmNsdWRl IDxzdGRib29sLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+Cisj aWZkZWYgSEFWRV9DSEFNRUxJVU0KKyNpbmNsdWRlIDxsaWJ1ZGV2Lmg+CisjZW5kaWYKIAogI2lu Y2x1ZGUgPHhmODZkcm1Nb2RlLmg+CiAKQEAgLTMzMyw2ICszMzYsNyBAQCBpZ3RfcGxhbmVfdCAq aWd0X291dHB1dF9nZXRfcGxhbmUoaWd0X291dHB1dF90ICpvdXRwdXQsIGVudW0gaWd0X3BsYW5l IHBsYW5lKTsKIGJvb2wgaWd0X3BpcGVfZ2V0X3Byb3BlcnR5KGlndF9waXBlX3QgKnBpcGUsIGNv bnN0IGNoYXIgKm5hbWUsCiAJCQkgICB1aW50MzJfdCAqcHJvcF9pZCwgdWludDY0X3QgKnZhbHVl LAogCQkJICAgZHJtTW9kZVByb3BlcnR5UHRyICpwcm9wKTsKK3ZvaWQgaWd0X291dHB1dF9nZXRf ZWRpZChpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgdW5zaWduZWQgY2hhciAqZWRpZF9vdXQpOwogCiBz dGF0aWMgaW5saW5lIGJvb2wgaWd0X3BsYW5lX3N1cHBvcnRzX3JvdGF0aW9uKGlndF9wbGFuZV90 ICpwbGFuZSkKIHsKQEAgLTQ3OCw2ICs0ODIsMTMgQEAgdWludDMyX3Qga21zdGVzdF9nZXRfdmJs X2ZsYWcodWludDMyX3QgcGlwZV9pZCk7CiAjZGVmaW5lIEVESURfTEVOR1RIIDEyOAogY29uc3Qg dW5zaWduZWQgY2hhciogaWd0X2ttc19nZXRfYmFzZV9lZGlkKHZvaWQpOwogY29uc3QgdW5zaWdu ZWQgY2hhciogaWd0X2ttc19nZXRfYWx0X2VkaWQodm9pZCk7Ci0KK2Jvb2wgaWd0X2NvbXBhcmVf b3V0cHV0X2VkaWQoaWd0X291dHB1dF90ICpvdXRwdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVk aWQpOworCisjaWZkZWYgSEFWRV9DSEFNRUxJVU0KK3ZvaWQgaWd0X3dhdGNoX2hvdHBsdWcodm9p ZCk7Citib29sIGlndF9ob3RwbHVnX2RldGVjdGVkKGludCB0aW1lb3V0X3NlY3MpOwordm9pZCBp Z3RfZmx1c2hfaG90cGx1Z3Modm9pZCk7Cit2b2lkIGlndF9jbGVhbnVwX2hvdHBsdWcodm9pZCk7 CisjZW5kaWYKIAogI2VuZGlmIC8qIF9fSUdUX0tNU19IX18gKi8KZGlmZiAtLWdpdCBhL3Njcmlw dHMvcnVuLXRlc3RzLnNoIGIvc2NyaXB0cy9ydW4tdGVzdHMuc2gKaW5kZXggOTdiYTllNS4uNjUz OWJmOSAxMDA3NTUKLS0tIGEvc2NyaXB0cy9ydW4tdGVzdHMuc2gKKysrIGIvc2NyaXB0cy9ydW4t dGVzdHMuc2gKQEAgLTEyMiwxMCArMTIyLDEwIEBAIGlmIFsgISAteCAiJFBJR0xJVCIgXTsgdGhl bgogZmkKIAogaWYgWyAieCRSRVNVTUUiICE9ICJ4IiBdOyB0aGVuCi0Jc3VkbyBJR1RfVEVTVF9S T09UPSIkSUdUX1RFU1RfUk9PVCIgIiRQSUdMSVQiIHJlc3VtZSAiJFJFU1VMVFMiICROT1JFVFJZ CisJc3VkbyBJR1RfVEVTVF9ST09UPSIkSUdUX1RFU1RfUk9PVCIgQ0hBTUVMSVVNX0hPU1Q9IiRD SEFNRUxJVU1fSE9TVCIgIiRQSUdMSVQiIHJlc3VtZSAiJFJFU1VMVFMiICROT1JFVFJZCiBlbHNl CiAJbWtkaXIgLXAgIiRSRVNVTFRTIgotCXN1ZG8gSUdUX1RFU1RfUk9PVD0iJElHVF9URVNUX1JP T1QiICIkUElHTElUIiBydW4gaWd0IC1vICIkUkVTVUxUUyIgLXMgJFZFUkJPU0UgJEVYQ0xVREUg JEZJTFRFUgorCXN1ZG8gSUdUX1RFU1RfUk9PVD0iJElHVF9URVNUX1JPT1QiIENIQU1FTElVTV9I T1NUPSIkQ0hBTUVMSVVNX0hPU1QiICIkUElHTElUIiBydW4gaWd0IC1vICIkUkVTVUxUUyIgLXMg JFZFUkJPU0UgJEVYQ0xVREUgJEZJTFRFUgogZmkKIAogaWYgWyAiJFNVTU1BUlkiID09ICJodG1s IiBdOyB0aGVuCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxl LmFtCmluZGV4IGE0MDgxMjYuLjA2YThlNmIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2VmaWxlLmFt CisrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCkBAIC02Myw3ICs2Myw3IEBAIEFNX0NGTEFHUyA9ICQo RFJNX0NGTEFHUykgJChDV0FSTkZMQUdTKSAtV25vLXVudXNlZC1yZXN1bHQgJChERUJVR19DRkxB R1MpXAogCSQoTElCVU5XSU5EX0NGTEFHUykgJChXRVJST1JfQ0ZMQUdTKSBcCiAJJChOVUxMKQog Ci1MREFERCA9IC4uL2xpYi9saWJpbnRlbF90b29scy5sYSAkKEdMSUJfTElCUykKK0xEQUREID0g Li4vbGliL2xpYmludGVsX3Rvb2xzLmxhICQoR0xJQl9MSUJTKSAkKFhNTFJQQ19MSUJTKQogCiBB TV9DRkxBR1MgKz0gJChDQUlST19DRkxBR1MpICQoTElCVURFVl9DRkxBR1MpICQoR0xJQl9DRkxB R1MpCiBBTV9MREZMQUdTID0gLVdsLC0tYXMtbmVlZGVkCkBAIC0xMTksNSArMTE5LDggQEAgdmM0 X3dhaXRfYm9fQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoRFJNX1ZDNF9DRkxBR1MpCiB2YzRfd2Fp dF9ib19MREFERCA9ICQoTERBREQpICQoRFJNX1ZDNF9MSUJTKQogdmM0X3dhaXRfc2Vxbm9fQ0ZM QUdTID0gJChBTV9DRkxBR1MpICQoRFJNX1ZDNF9DRkxBR1MpCiB2YzRfd2FpdF9zZXFub19MREFE RCA9ICQoTERBREQpICQoRFJNX1ZDNF9MSUJTKQorCitjaGFtZWxpdW1fQ0ZMQUdTID0gJChBTV9D RkxBR1MpICQoWE1MUlBDX0NGTEFHUykgJChVREVWX0NGTEFHUykKK2NoYW1lbGl1bV9MREFERCA9 ICQoTERBREQpICQoWE1MUlBDX0xJQlMpICQoVURFVl9MSUJTKQogZW5kaWYKIApkaWZmIC0tZ2l0 IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXgg NmQwODFjMy4uM2UwMTg1MiAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysg Yi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC0xMzEsNiArMTMxLDcgQEAgVEVTVFNfcHJvZ3Nf TSA9IFwKIAl0ZW1wbGF0ZSBcCiAJdmdlbV9iYXNpYyBcCiAJdmdlbV9zbG93IFwKKwljaGFtZWxp dW0gXAogCSQoTlVMTCkKIAogVEVTVFNfcHJvZ3NfWE0gPSBcCmRpZmYgLS1naXQgYS90ZXN0cy9j aGFtZWxpdW0uYyBiL3Rlc3RzL2NoYW1lbGl1bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjc2OWNmZGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGFtZWxpdW0uYwpA QCAtMCwwICsxLDU0OSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE2IFJlZCBIYXQgSW5jLgor ICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhl IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNs dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29m dHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcK KyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRo b3JzOgorICogICAgTHl1ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4KKyAqLworCisjaW5jbHVk ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiaWd0LmgiCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2lu Y2x1ZGUgPHN0cmluZy5oPgorCitzdHJ1Y3QgY29ubmVjdG9yX2luZm8geworCWludCBpZDsKKwl1 bnNpZ25lZCBpbnQgdHlwZTsKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgZHJtX2ZkOwor CXN0cnVjdCBjb25uZWN0b3JfaW5mbyAqY29ubmVjdG9yczsKKwlpbnQgY29ubmVjdG9yX2NvdW50 OworfSBkYXRhX3Q7CisKKyNkZWZpbmUgSE9UUExVR19USU1FT1VUIDMwIC8qIHNlY29uZHMgKi8K KworLyoKKyAqIFNpbmNlIHdlIGNhbid0IGdldCBhbiBleGFjdCBtYXBwaW5nIG9mIHdoaWNoIGNo YW1lbGl1bSBwb3J0cyBhcmUgY29ubmVjdGVkCisgKiB0byBlYWNoIG9mIHRoZSBEVVQncyBwb3J0 cywgd2UgaGF2ZSB0byBmaWd1cmUgb3V0IHdoZXRoZXIgb3Igbm90IHRoZSBzdGF0dXMKKyAqIG9m IGEgcG9ydCBvbiB0aGUgY2hhbWVsaXVtIGhhcyBjaGFuZ2VkIGJ5IGNvdW50aW5nIHRoZSBudW1i ZXIgb2YgY29ubmVjdG9ycworICogd2l0aCB0aGUgY29ubmVjdG9yIHR5cGUgYW5kIHN0YXR1cyB3 ZSB3YW50LCBhbmQgdGhlbiBjb21wYXJpbmcgdGhlIHZhbHVlcworICogZnJvbSBiZWZvcmUgaG90 cGx1Z2dpbmcgYW5kIGFmdGVyCisgKi8KK3N0YXRpYyB2b2lkCityZXByb2JlX2Nvbm5lY3RvcnMo ZGF0YV90ICpkYXRhLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlkcm1Nb2RlQ29ubmVjdG9yICpj b25uZWN0b3I7CisJaW50IGk7CisKKwlpZ3RfZGVidWcoIlJlcHJvYmluZyAlcyBjb25uZWN0b3Jz Li4uXG4iLAorCQkgIGttc3Rlc3RfY29ubmVjdG9yX3R5cGVfc3RyKHR5cGUpKTsKKworCWZvciAo aSA9IDA7IGkgPCBkYXRhLT5jb25uZWN0b3JfY291bnQ7IGkrKykgeworCQlpZiAoZGF0YS0+Y29u bmVjdG9yc1tpXS50eXBlICE9IHR5cGUpCisJCQljb250aW51ZTsKKworCQljb25uZWN0b3IgPSBk cm1Nb2RlR2V0Q29ubmVjdG9yKGRhdGEtPmRybV9mZCwKKwkJCQkJCWRhdGEtPmNvbm5lY3RvcnNb aV0uaWQpOworCQlpZ3RfYXNzZXJ0KGNvbm5lY3Rvcik7CisKKwkJZHJtTW9kZUZyZWVDb25uZWN0 b3IoY29ubmVjdG9yKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCityZXNldF9jaGFtZWxpdW1fc3Rh dGUoZGF0YV90ICpkYXRhKQoreworCWNoYW1lbGl1bV9yZXNldCgpOworCXJlcHJvYmVfY29ubmVj dG9ycyhkYXRhLCBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpOworCXJlcHJvYmVfY29u bmVjdG9ycyhkYXRhLCBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEpOworCXJlcHJvYmVfY29ubmVj dG9ycyhkYXRhLCBEUk1fTU9ERV9DT05ORUNUT1JfVkdBKTsKK30KKworc3RhdGljIGludAorY29u bmVjdG9yX3N0YXR1c19jb3VudChkYXRhX3QgKmRhdGEsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNp Z25lZCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBjb25uZWN0b3JfaW5mbyAqaW5mbzsKKwlkcm1N b2RlQ29ubmVjdG9yICpjb25uZWN0b3I7CisJaW50IGNvdW50ID0gMDsKKworCWZvciAoaW50IGkg PSAwOyBpIDwgZGF0YS0+Y29ubmVjdG9yX2NvdW50OyBpKyspIHsKKwkJaW5mbyA9ICZkYXRhLT5j b25uZWN0b3JzW2ldOworCQlpZiAoaW5mby0+dHlwZSAhPSB0eXBlKQorCQkJY29udGludWU7CisK KwkJY29ubmVjdG9yID0gZHJtTW9kZUdldENvbm5lY3RvckN1cnJlbnQoZGF0YS0+ZHJtX2ZkLCBp bmZvLT5pZCk7CisJCWlndF9hc3NlcnQoY29ubmVjdG9yKTsKKworCQlpZiAoY29ubmVjdG9yLT5j b25uZWN0aW9uID09IHN0YXR1cykKKwkJCWNvdW50Kys7CisKKwkJZHJtTW9kZUZyZWVDb25uZWN0 b3IoY29ubmVjdG9yKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkCity ZXF1aXJlX2Nvbm5lY3Rvcl9wcmVzZW50KGRhdGFfdCAqZGF0YSwgdW5zaWduZWQgaW50IHR5cGUp Cit7CisJaW50IGk7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJZm9yIChpID0gMDsgaSA8IGRh dGEtPmNvbm5lY3Rvcl9jb3VudCAmJiAhZm91bmQ7IGkrKykgeworCQlpZiAoZGF0YS0+Y29ubmVj dG9yc1tpXS50eXBlID09IHR5cGUpCisJCQlmb3VuZCA9IHRydWU7CisJfQorCisJaWd0X3JlcXVp cmVfZihmb3VuZCwgIk5vIHBvcnQgb2YgdHlwZSAlcyB3YXMgZm91bmQgb24gdGhlIHN5c3RlbVxu IiwKKwkJICAgICAga21zdGVzdF9jb25uZWN0b3JfdHlwZV9zdHIodHlwZSkpOworCisJZm9yIChp ID0gMCwgZm91bmQgPSBmYWxzZTsgaSA8IGNoYW1lbGl1bV9wb3J0X2NvdW50ICYmICFmb3VuZDsg aSsrKSB7CisJCWlmIChjaGFtZWxpdW1fcG9ydHNbaV0udHlwZSA9PSB0eXBlKQorCQkJZm91bmQg PSB0cnVlOworCX0KKworCWlndF9yZXF1aXJlX2YoZm91bmQsICJObyBjb25uZWN0ZWQgcG9ydCBv ZiB0eXBlICVzIHdhcyBmb3VuZCBvbiB0aGUgY2hhbWVsaXVtXG4iLAorCQkgICAgICBrbXN0ZXN0 X2Nvbm5lY3Rvcl90eXBlX3N0cih0eXBlKSk7Cit9CisKK3N0YXRpYyBkcm1Nb2RlQ29ubmVjdG9y ICoKK2ZpbmRfY29ubmVjdGVkKGRhdGFfdCAqZGF0YSwgdW5zaWduZWQgaW50IHR5cGUpCit7CisJ ZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8 IGRhdGEtPmNvbm5lY3Rvcl9jb3VudDsgaSsrKSB7CisJCWlmIChkYXRhLT5jb25uZWN0b3JzW2ld LnR5cGUgIT0gdHlwZSkKKwkJCWNvbnRpbnVlOworCisJCWNvbm5lY3RvciA9IGRybU1vZGVHZXRD b25uZWN0b3IoZGF0YS0+ZHJtX2ZkLAorCQkJCQkJZGF0YS0+Y29ubmVjdG9yc1tpXS5pZCk7CisJ CWlndF9hc3NlcnQoY29ubmVjdG9yKTsKKworCQlpZiAoY29ubmVjdG9yLT5jb25uZWN0aW9uID09 IERSTV9NT0RFX0NPTk5FQ1RFRCkKKwkJCXJldHVybiBjb25uZWN0b3I7CisKKwkJZHJtTW9kZUZy ZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAq IFNraXBzIHRoZSB0ZXN0IGlmIHdlIGZpbmQgYW55IGNvbm5lY3RvcnMgd2l0aCBhIG1hdGNoaW5n IHR5cGUgY29ubmVjdGVkLgorICogVGhpcyBpcyBuZWNlc3Nhcnkgd2hlbiB3ZSBuZWVkIHRvIGlk ZW50aWZ5IHdoaWNoIHBvcnQgb24gdGhlIG1hY2hpbmUgaXMKKyAqIGNvbm5lY3RlZCB0byB3aGlj aCBwb3J0IG9uIHRoZSBjaGFtZWxpdW0sIHNpbmNlIGFueSBvdGhlciBwb3J0cyB0aGF0IGFyZQor ICogY29ubmVjdGVkIHRvIG90aGVyIGRpc3BsYXlzIGNvdWxkIGNhdXNlIHVzIHRvIGNob29zZSB0 aGUgd3JvbmcgcG9ydC4KKyAqCisgKiBUaGlzIGFsc28gaGFzIHRoZSBlZmZlY3Qgb2YgcmVwcm9i aW5nIGFsbCBvZiB0aGUgY29ubmVjdGVkIHBvcnRzLgorICovCitzdGF0aWMgdm9pZAorc2tpcF9v bl9hbnlfY29ubmVjdGVkKGRhdGFfdCAqZGF0YSwgdW5zaWduZWQgaW50IHR5cGUpCit7CisJZHJt TW9kZUNvbm5lY3RvciAqY29ubmVjdG9yOworCisJY29ubmVjdG9yID0gZmluZF9jb25uZWN0ZWQo ZGF0YSwgdHlwZSk7CisJaWYgKGNvbm5lY3RvcikKKwkJZHJtTW9kZUZyZWVDb25uZWN0b3IoY29u bmVjdG9yKTsKKworCWlndF9za2lwX29uKGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyB2b2lkCit0 ZXN0X2Jhc2ljX2hvdHBsdWcoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBv cnQpCit7CisJaW50IGJlZm9yZSwgYWZ0ZXI7CisJaW50IGk7CisKKwlyZXNldF9jaGFtZWxpdW1f c3RhdGUoZGF0YSk7CisJaWd0X3dhdGNoX2hvdHBsdWcoKTsKKworCWZvciAoaSA9IDA7IGkgPCAx NTsgaSsrKSB7CisJCWlndF9mbHVzaF9ob3RwbHVncygpOworCisJCS8qIENoZWNrIGlmIHdlIGdl dCBhIHN5c2ZzIGhvdHBsdWcgZXZlbnQgKi8KKwkJYmVmb3JlID0gY29ubmVjdG9yX3N0YXR1c19j b3VudChkYXRhLCBwb3J0LT50eXBlLAorCQkJCQkJRFJNX01PREVfQ09OTkVDVEVEKTsKKwkJY2hh bWVsaXVtX3BsdWcocG9ydC0+aWQpOworCQlpZ3RfYXNzZXJ0KGlndF9ob3RwbHVnX2RldGVjdGVk KEhPVFBMVUdfVElNRU9VVCkpOworCisJCS8qIE5vdyB3ZSBzaG91bGQgaGF2ZSBvbmUgYWRkaXRp b25hbCBwb3J0IGNvbm5lY3RlZCAqLworCQlyZXByb2JlX2Nvbm5lY3RvcnMoZGF0YSwgcG9ydC0+ dHlwZSk7CisJCWFmdGVyID0gY29ubmVjdG9yX3N0YXR1c19jb3VudChkYXRhLCBwb3J0LT50eXBl LAorCQkJCQkgICAgICAgRFJNX01PREVfQ09OTkVDVEVEKTsKKwkJaWd0X2Fzc2VydF9sdChiZWZv cmUsIGFmdGVyKTsKKworCQlpZ3RfZmx1c2hfaG90cGx1Z3MoKTsKKworCQkvKiBOb3cgY2hlY2sg aWYgd2UgZ2V0IGEgaG90cGx1ZyBmcm9tIGRpc2Nvbm5lY3Rpb24gKi8KKwkJYmVmb3JlID0gY29u bmVjdG9yX3N0YXR1c19jb3VudChkYXRhLCBwb3J0LT50eXBlLAorCQkJCQkJRFJNX01PREVfRElT Q09OTkVDVEVEKTsKKwkJY2hhbWVsaXVtX3VucGx1Zyhwb3J0LT5pZCk7CisJCWlndF9hc3NlcnQo aWd0X2hvdHBsdWdfZGV0ZWN0ZWQoSE9UUExVR19USU1FT1VUKSk7CisKKwkJLyogQW5kIG1ha2Ug c3VyZSB3ZSBub3cgaGF2ZSBvbmUgbW9yZSBkaXNjb25uZWN0ZWQgcG9ydCAqLworCQlyZXByb2Jl X2Nvbm5lY3RvcnMoZGF0YSwgcG9ydC0+dHlwZSk7CisJCWFmdGVyID0gY29ubmVjdG9yX3N0YXR1 c19jb3VudChkYXRhLCBwb3J0LT50eXBlLAorCQkJCQkgICAgICAgRFJNX01PREVfRElTQ09OTkVD VEVEKTsKKwkJaWd0X2Fzc2VydF9sdChiZWZvcmUsIGFmdGVyKTsKKworCQkvKiBTbGVlcCBzbyB3 ZSBkb24ndCBhY2NpZGVudGFsbHkgY2F1c2UgYW4gaHBkIHN0b3JtICovCisJCXNsZWVwKDEpOwor CX0KK30KKworc3RhdGljIHZvaWQKK3Rlc3RfZWRpZF9yZWFkKGRhdGFfdCAqZGF0YSwgc3RydWN0 IGNoYW1lbGl1bV9wb3J0ICpwb3J0LAorCSAgICAgICBpbnQgZWRpZF9pZCwgY29uc3QgdW5zaWdu ZWQgY2hhciAqZWRpZCkKK3sKKwlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3I7CisJZHJtTW9k ZU9iamVjdFByb3BlcnRpZXMgKnByb3BzOworCWRybU1vZGVQcm9wZXJ0eUJsb2JQdHIgZWRpZF9i bG9iID0gTlVMTDsKKwlib29sIGVkaWRfZm91bmQgPSBmYWxzZTsKKwlpbnQgaTsKKworCXJlc2V0 X2NoYW1lbGl1bV9zdGF0ZShkYXRhKTsKKwlza2lwX29uX2FueV9jb25uZWN0ZWQoZGF0YSwgcG9y dC0+dHlwZSk7CisKKwljaGFtZWxpdW1fcG9ydF9zZXRfZWRpZChwb3J0LT5pZCwgZWRpZF9pZCk7 CisJY2hhbWVsaXVtX3BsdWcocG9ydC0+aWQpOworCXNsZWVwKDEpOworCWlndF9hc3NlcnQoY29u bmVjdG9yID0gZmluZF9jb25uZWN0ZWQoZGF0YSwgcG9ydC0+dHlwZSkpOworCisJcHJvcHMgPSBk cm1Nb2RlT2JqZWN0R2V0UHJvcGVydGllcyhkYXRhLT5kcm1fZmQsCisJCQkJCSAgIGNvbm5lY3Rv ci0+Y29ubmVjdG9yX2lkLAorCQkJCQkgICBEUk1fTU9ERV9PQkpFQ1RfQ09OTkVDVE9SKTsKKwlp Z3RfYXNzZXJ0KHByb3BzKTsKKworCS8qIEdldCB0aGUgZWRpZCAqLworCWZvciAoaSA9IDA7IGkg PCBwcm9wcy0+Y291bnRfcHJvcHMgJiYgIWVkaWRfYmxvYjsgaSsrKSB7CisJCWRybU1vZGVQcm9w ZXJ0eVB0ciBwcm9wID0KKwkJCWRybU1vZGVHZXRQcm9wZXJ0eShkYXRhLT5kcm1fZmQsCisJCQkJ CSAgIHByb3BzLT5wcm9wc1tpXSk7CisKKwkJaWd0X2Fzc2VydChwcm9wKTsKKworCQlpZiAoc3Ry Y21wKHByb3AtPm5hbWUsICJFRElEIikgPT0gMCkgeworCQkJZWRpZF9ibG9iID0gZHJtTW9kZUdl dFByb3BlcnR5QmxvYigKKwkJCSAgICBkYXRhLT5kcm1fZmQsIHByb3BzLT5wcm9wX3ZhbHVlc1tp XSk7CisJCX0KKworCQlkcm1Nb2RlRnJlZVByb3BlcnR5KHByb3ApOworCX0KKworCS8qIEFuZCBt YWtlIHN1cmUgaXQgbWF0Y2hlcyB0byB3aGF0IHdlIGV4cGVjdGVkICovCisJZWRpZF9mb3VuZCA9 IG1lbWNtcChlZGlkLCBlZGlkX2Jsb2ItPmRhdGEsIEVESURfTEVOR1RIKSA9PSAwOworCisJZHJt TW9kZUZyZWVQcm9wZXJ0eUJsb2IoZWRpZF9ibG9iKTsKKwlkcm1Nb2RlRnJlZU9iamVjdFByb3Bl cnRpZXMocHJvcHMpOworCWRybU1vZGVGcmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7CisKKwlpZ3Rf YXNzZXJ0KGVkaWRfZm91bmQpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9zdXNwZW5kX3Jlc3Vt ZV9ocGQoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQsCisJCQllbnVt IGlndF9zdXNwZW5kX3N0YXRlIHN0YXRlLAorCQkJZW51bSBpZ3Rfc3VzcGVuZF90ZXN0IHRlc3Qp Cit7CisJaW50IGJlZm9yZSwgYWZ0ZXI7CisJaW50IGRlbGF5ID0gNzsKKworCWlndF9za2lwX3dp dGhvdXRfc3VzcGVuZF9zdXBwb3J0KHN0YXRlLCB0ZXN0KTsKKwlyZXNldF9jaGFtZWxpdW1fc3Rh dGUoZGF0YSk7CisJaWd0X3dhdGNoX2hvdHBsdWcoKTsKKworCWlndF9zZXRfYXV0b3Jlc3VtZV9k ZWxheSgxNSk7CisKKwkvKiBNYWtlIHN1cmUgd2Ugbm90aWNlIG5ldyBjb25uZWN0b3JzIGFmdGVy IHJlc3VtaW5nICovCisJYmVmb3JlID0gY29ubmVjdG9yX3N0YXR1c19jb3VudChkYXRhLCBwb3J0 LT50eXBlLCBEUk1fTU9ERV9DT05ORUNURUQpOworCXNsZWVwKDEpOworCWlndF9mbHVzaF9ob3Rw bHVncygpOworCisJY2hhbWVsaXVtX2FzeW5jX2hwZF9wdWxzZV9zdGFydChwb3J0LT5pZCwgZmFs c2UsIGRlbGF5KTsKKwlpZ3Rfc3lzdGVtX3N1c3BlbmRfYXV0b3Jlc3VtZShzdGF0ZSwgdGVzdCk7 CisJY2hhbWVsaXVtX2FzeW5jX2hwZF9wdWxzZV9maW5pc2goKTsKKworCWlndF9hc3NlcnQoaWd0 X2hvdHBsdWdfZGV0ZWN0ZWQoSE9UUExVR19USU1FT1VUKSk7CisKKwlyZXByb2JlX2Nvbm5lY3Rv cnMoZGF0YSwgcG9ydC0+dHlwZSk7CisJYWZ0ZXIgPSBjb25uZWN0b3Jfc3RhdHVzX2NvdW50KGRh dGEsIHBvcnQtPnR5cGUsIERSTV9NT0RFX0NPTk5FQ1RFRCk7CisJaWd0X2Fzc2VydF9sdChiZWZv cmUsIGFmdGVyKTsKKworCWlndF9mbHVzaF9ob3RwbHVncygpOworCisJLyogTm93IG1ha2Ugc3Vy ZSB3ZSBub3RpY2UgZGlzY29ubmVjdGVkIGNvbm5lY3RvcnMgYWZ0ZXIgcmVzdW1pbmcgKi8KKwli ZWZvcmUgPSBjb25uZWN0b3Jfc3RhdHVzX2NvdW50KGRhdGEsIHBvcnQtPnR5cGUsIERSTV9NT0RF X0RJU0NPTk5FQ1RFRCk7CisKKwljaGFtZWxpdW1fYXN5bmNfaHBkX3B1bHNlX3N0YXJ0KHBvcnQt PmlkLCB0cnVlLCBkZWxheSk7CisJaWd0X3N5c3RlbV9zdXNwZW5kX2F1dG9yZXN1bWUoc3RhdGUs IHRlc3QpOworCWNoYW1lbGl1bV9hc3luY19ocGRfcHVsc2VfZmluaXNoKCk7CisKKwlpZ3RfYXNz ZXJ0KGlndF9ob3RwbHVnX2RldGVjdGVkKEhPVFBMVUdfVElNRU9VVCkpOworCisJcmVwcm9iZV9j b25uZWN0b3JzKGRhdGEsIHBvcnQtPnR5cGUpOworCWFmdGVyID0gY29ubmVjdG9yX3N0YXR1c19j b3VudChkYXRhLCBwb3J0LT50eXBlLCBEUk1fTU9ERV9ESVNDT05ORUNURUQpOworCWlndF9hc3Nl cnRfbHQoYmVmb3JlLCBhZnRlcik7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3N1c3BlbmRfcmVz dW1lX2VkaWRfY2hhbmdlKGRhdGFfdCAqZGF0YSwgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0 LAorCQkJCWVudW0gaWd0X3N1c3BlbmRfc3RhdGUgc3RhdGUsCisJCQkJZW51bSBpZ3Rfc3VzcGVu ZF90ZXN0IHRlc3QsCisJCQkJaW50IGVkaWRfaWQsCisJCQkJaW50IGFsdF9lZGlkX2lkKQorewor CWlndF9za2lwX3dpdGhvdXRfc3VzcGVuZF9zdXBwb3J0KHN0YXRlLCB0ZXN0KTsKKwlyZXNldF9j aGFtZWxpdW1fc3RhdGUoZGF0YSk7CisJaWd0X3dhdGNoX2hvdHBsdWcoKTsKKworCS8qIEZpcnN0 IHBsdWcgaW4gdGhlIHBvcnQgKi8KKwljaGFtZWxpdW1fcG9ydF9zZXRfZWRpZChwb3J0LT5pZCwg ZWRpZF9pZCk7CisJY2hhbWVsaXVtX3BsdWcocG9ydC0+aWQpOworCisJcmVwcm9iZV9jb25uZWN0 b3JzKGRhdGEsIHBvcnQtPnR5cGUpOworCXNsZWVwKDEpOworCWlndF9mbHVzaF9ob3RwbHVncygp OworCisJLyoKKwkgKiBDaGFuZ2UgdGhlIGVkaWQgYmVmb3JlIHdlIHN1c3BlbmQuIE9uIHJlc3Vt ZSwgdGhlIG1hY2hpbmUgc2hvdWxkCisJICogbm90aWNlIHRoZSBFRElEIGNoYW5nZSBhbmQgZmly ZSBhIGhvdHBsdWcgZXZlbnQuCisJICovCisJY2hhbWVsaXVtX3BvcnRfc2V0X2VkaWQocG9ydC0+ aWQsIGFsdF9lZGlkX2lkKTsKKworCWlndF9zeXN0ZW1fc3VzcGVuZF9hdXRvcmVzdW1lKHN0YXRl LCB0ZXN0KTsKKwlpZ3RfYXNzZXJ0KGlndF9ob3RwbHVnX2RldGVjdGVkKEhPVFBMVUdfVElNRU9V VCkpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9kaXNwbGF5KGRhdGFfdCAqZGF0YSwgc3RydWN0 IGNoYW1lbGl1bV9wb3J0ICpwb3J0KQoreworCWlndF9kaXNwbGF5X3QgZGlzcGxheTsKKwlpZ3Rf b3V0cHV0X3QgKm91dHB1dDsKKwlpZ3RfcGxhbmVfdCAqcHJpbWFyeTsKKwlzdHJ1Y3QgaWd0X2Zi IGZiOworCWRybU1vZGVSZXMgKnJlczsKKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7CisJaW50IGNv bm5lY3Rvcl9mb3VuZCA9IGZhbHNlLCBmYl9pZDsKKworCWNoYW1lbGl1bV9wbHVnKHBvcnQtPmlk KTsKKwlpZ3RfYXNzZXJ0KHJlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZGF0YS0+ZHJtX2ZkKSk7 CisJa21zdGVzdF91bnNldF9hbGxfY3J0Y3MoZGF0YS0+ZHJtX2ZkLCByZXMpOworCisJaWd0X2Rp c3BsYXlfaW5pdCgmZGlzcGxheSwgZGF0YS0+ZHJtX2ZkKTsKKworCS8qIEZpbmQgdGhlIGFjdGl2 ZSBjb25uZWN0b3IgKi8KKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KCZkaXNwbGF5LCBvdXRw dXQpIHsKKwkJZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yID0gb3V0cHV0LT5jb25maWcuY29u bmVjdG9yOworCisJCWlmIChjb25uZWN0b3IgJiYgY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9 PSBwb3J0LT50eXBlICYmCisJCSAgICBjb25uZWN0b3ItPmNvbm5lY3Rpb24gPT0gRFJNX01PREVf Q09OTkVDVEVEKSB7CisJCQljb25uZWN0b3JfZm91bmQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0K Kwl9CisJaWd0X2Fzc2VydChjb25uZWN0b3JfZm91bmQpOworCisJLyogU2V0dXAgdGhlIGRpc3Bs YXkgKi8KKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgUElQRV9BKTsKKwltb2RlID0gaWd0 X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOworCXByaW1hcnkgPSBpZ3Rfb3V0cHV0X2dldF9wbGFu ZShvdXRwdXQsIElHVF9QTEFORV9QUklNQVJZKTsKKwlpZ3RfYXNzZXJ0KHByaW1hcnkpOworCisJ ZmJfaWQgPSBpZ3RfY3JlYXRlX3BhdHRlcm5fZmIoZGF0YS0+ZHJtX2ZkLAorCQkJCSAgICAgIG1v ZGUtPmhkaXNwbGF5LAorCQkJCSAgICAgIG1vZGUtPnZkaXNwbGF5LAorCQkJCSAgICAgIERSTV9G T1JNQVRfWFJHQjg4ODgsCisJCQkJICAgICAgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKKwkJ CQkgICAgICAmZmIpOworCWlndF9hc3NlcnQoZmJfaWQgPiAwKTsKKwlpZ3RfcGxhbmVfc2V0X2Zi KHByaW1hcnksICZmYik7CisKKwlpZ3RfZGlzcGxheV9jb21taXQoJmRpc3BsYXkpOworCisJaWd0 X2Fzc2VydChjaGFtZWxpdW1fcG9ydF93YWl0X3ZpZGVvX2lucHV0X3N0YWJsZShwb3J0LT5pZCwK KwkJCQkJCQkgIEhPVFBMVUdfVElNRU9VVCkpOworCisJZHJtTW9kZUZyZWVSZXNvdXJjZXMocmVz KTsKKwlpZ3RfZGlzcGxheV9maW5pKCZkaXNwbGF5KTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3Rf aHBkX3dpdGhvdXRfZGRjKGRhdGFfdCAqZGF0YSwgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0 KQoreworCXJlc2V0X2NoYW1lbGl1bV9zdGF0ZShkYXRhKTsKKwlpZ3Rfd2F0Y2hfaG90cGx1Zygp OworCisJLyogRGlzYWJsZSB0aGUgRERDIG9uIHRoZSBjb25uZWN0b3IgYW5kIG1ha2Ugc3VyZSB3 ZSBzdGlsbCBnZXQgYQorCSAqIGhvdHBsdWcKKwkgKi8KKwljaGFtZWxpdW1fcG9ydF9zZXRfZGRj X3N0YXRlKHBvcnQtPmlkLCBmYWxzZSk7CisJY2hhbWVsaXVtX3BsdWcocG9ydC0+aWQpOworCisJ aWd0X2Fzc2VydChpZ3RfaG90cGx1Z19kZXRlY3RlZChIT1RQTFVHX1RJTUVPVVQpKTsKK30KKwor c3RhdGljIHZvaWQKK2NhY2hlX2Nvbm5lY3Rvcl9pbmZvKGRhdGFfdCAqZGF0YSkKK3sKKwlkcm1N b2RlUmVzICpyZXMgPSBkcm1Nb2RlR2V0UmVzb3VyY2VzKGRhdGEtPmRybV9mZCk7CisJZHJtTW9k ZUNvbm5lY3RvciAqY29ubmVjdG9yOworCWludCBpOworCisJaWd0X2Fzc2VydChyZXMpOworCisJ ZGF0YS0+Y29ubmVjdG9yX2NvdW50ID0gcmVzLT5jb3VudF9jb25uZWN0b3JzOworCWRhdGEtPmNv bm5lY3RvcnMgPSBjYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb25uZWN0b3JfaW5mbyksCisJCQkJICBy ZXMtPmNvdW50X2Nvbm5lY3RvcnMpOworCWlndF9hc3NlcnQoZGF0YS0+Y29ubmVjdG9ycyk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgcmVzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspIHsKKwkJY29ubmVj dG9yID0gZHJtTW9kZUdldENvbm5lY3RvckN1cnJlbnQoZGF0YS0+ZHJtX2ZkLAorCQkJCQkJICAg ICAgIHJlcy0+Y29ubmVjdG9yc1tpXSk7CisJCWlndF9hc3NlcnQoY29ubmVjdG9yKTsKKworCQlk YXRhLT5jb25uZWN0b3JzW2ldLmlkID0gY29ubmVjdG9yLT5jb25uZWN0b3JfaWQ7CisJCWRhdGEt PmNvbm5lY3RvcnNbaV0udHlwZSA9IGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGU7CisKKwkJZHJt TW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKKwl9CisKKwlkcm1Nb2RlRnJlZVJlc291cmNl cyhyZXMpOworfQorCisjZGVmaW5lIGZvcl9lYWNoX3BvcnQocCwgcG9ydCkgICAgICAgICAgICAg ICAgICBcCisJZm9yIChwID0gMCwgcG9ydCA9ICZjaGFtZWxpdW1fcG9ydHNbcF07IFwKKwkgICAg IHAgPCBjaGFtZWxpdW1fcG9ydF9jb3VudDsgICAgICAgICAgXAorCSAgICAgcCsrLCBwb3J0ID0g JmNoYW1lbGl1bV9wb3J0c1twXSkgICBcCisKKyNkZWZpbmUgY29ubmVjdG9yX3N1YnRlc3QobmFt ZV9fLCB0eXBlX18pIFwKKwlpZ3Rfc3VidGVzdChuYW1lX18pICAgICAgICAgICAgICAgXAorCQlm b3JfZWFjaF9wb3J0KHAsIHBvcnQpICAgIFwKKwkJCWlmIChwb3J0LT50eXBlID09IERSTV9NT0RF X0NPTk5FQ1RPUl8gIyMgdHlwZV9fKQorCisjZGVmaW5lIGRlZmluZV9jb21tb25fY29ubmVjdG9y X3Rlc3RzKHR5cGVfc3RyX18sIHR5cGVfXykgICAgICAgICAgICAgICAgICAgICBcCisJY29ubmVj dG9yX3N1YnRlc3QodHlwZV9zdHJfXyAiLWhwZCIsIHR5cGVfXykgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKwkJdGVzdF9iYXNpY19ob3RwbHVnKCZkYXRhLCBwb3J0KTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJY29ubmVjdG9yX3N1 YnRlc3QodHlwZV9zdHJfXyAiLWVkaWQtcmVhZCIsIHR5cGVfXykgeyAgICAgICAgICAgICAgICAg IFwKKwkJdGVzdF9lZGlkX3JlYWQoJmRhdGEsIHBvcnQsIGVkaWRfaWQsICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisJCQkgICAgICAgaWd0X2ttc19nZXRfYmFzZV9lZGlkKCkpOyAgICAgICAg ICAgICAgICAgICAgICBcCisJCXRlc3RfZWRpZF9yZWFkKCZkYXRhLCBwb3J0LCBhbHRfZWRpZF9p ZCwgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICAgICAgIGlndF9rbXNfZ2V0X2FsdF9lZGlk KCkpOyAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisJY29ubmVjdG9yX3N1YnRlc3QodHlwZV9zdHJfXyAiLWhwZC1hZnRlci1z dXNwZW5kIiwgdHlwZV9fKSAgICAgICAgICAgIFwKKwkJdGVzdF9zdXNwZW5kX3Jlc3VtZV9ocGQo JmRhdGEsIHBvcnQsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCVNVU1BFTkRfU1RB VEVfTUVNLCAgICAgICAgICAgICAgICAgICAgXAorCQkJCQlTVVNQRU5EX1RFU1RfTk9ORSk7ICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwljb25uZWN0b3Jfc3Vi dGVzdCh0eXBlX3N0cl9fICItaHBkLWFmdGVyLWhpYmVybmF0ZSIsIHR5cGVfXykgICAgICAgICAg XAorCQl0ZXN0X3N1c3BlbmRfcmVzdW1lX2hwZCgmZGF0YSwgcG9ydCwgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKwkJCQkJU1VTUEVORF9TVEFURV9ESVNLLCAgICAgICAgICAgICAgICAgICBc CisJCQkJCVNVU1BFTkRfVEVTVF9ERVZJQ0VTKTsgICAgICAgICAgICAgICAgXAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorCWNvbm5lY3Rvcl9zdWJ0ZXN0KHR5cGVfc3RyX18gIi1lZGlkLWNoYW5n ZS1kdXJpbmctc3VzcGVuZCIsIHR5cGVfXykgICBcCisJCXRlc3Rfc3VzcGVuZF9yZXN1bWVfZWRp ZF9jaGFuZ2UoJmRhdGEsIHBvcnQsICAgICAgICAgICAgICAgICAgXAorCQkJCQkJU1VTUEVORF9T VEFURV9NRU0sICAgICAgICAgICAgXAorCQkJCQkJU1VTUEVORF9URVNUX05PTkUsICAgICAgICAg ICAgXAorCQkJCQkJZWRpZF9pZCwgYWx0X2VkaWRfaWQpOyAgICAgICAgXAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorCWNvbm5lY3Rvcl9zdWJ0ZXN0KHR5cGVfc3RyX18gIi1lZGlkLWNoYW5nZS1k dXJpbmctaGliZXJuYXRlIiwgdHlwZV9fKSBcCisJCXRlc3Rfc3VzcGVuZF9yZXN1bWVfZWRpZF9j aGFuZ2UoJmRhdGEsIHBvcnQsICAgICAgICAgICAgICAgICAgXAorCQkJCQkJU1VTUEVORF9TVEFU RV9ESVNLLCAgICAgICAgICAgXAorCQkJCQkJU1VTUEVORF9URVNUX0RFVklDRVMsICAgICAgICAg XAorCQkJCQkJZWRpZF9pZCwgYWx0X2VkaWRfaWQpOyAgICAgICAgXAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorCWNvbm5lY3Rvcl9zdWJ0ZXN0KHR5cGVfc3RyX18gIi1kaXNwbGF5IiwgdHlwZV9f KSAgICAgICAgICAgICAgICAgICAgICBcCisJCXRlc3RfZGlzcGxheSgmZGF0YSwgcG9ydCk7CisK K3N0YXRpYyBkYXRhX3QgZGF0YTsKKworaWd0X21haW4KK3sKKwlzdHJ1Y3QgY2hhbWVsaXVtX3Bv cnQgKnBvcnQ7CisJaW50IGVkaWRfaWQsIGFsdF9lZGlkX2lkLCBwOworCisJaWd0X2ZpeHR1cmUg eworCQlpZ3RfcmVxdWlyZV9jaGFtZWxpdW0oKTsKKwkJaWd0X3NraXBfb25fc2ltdWxhdGlvbigp OworCisJCWNoYW1lbGl1bV9pbml0KCk7CisKKwkJZWRpZF9pZCA9IGNoYW1lbGl1bV9uZXdfZWRp ZChpZ3Rfa21zX2dldF9iYXNlX2VkaWQoKSk7CisJCWFsdF9lZGlkX2lkID0gY2hhbWVsaXVtX25l d19lZGlkKGlndF9rbXNfZ2V0X2FsdF9lZGlkKCkpOworCisJCWRhdGEuZHJtX2ZkID0gZHJtX29w ZW5fZHJpdmVyX21hc3RlcihEUklWRVJfSU5URUwpOworCQljYWNoZV9jb25uZWN0b3JfaW5mbygm ZGF0YSk7CisKKwkJLyogU28gZmJjb24gZG9lc24ndCB0cnkgdG8gcmVwcm9iZSB0aGluZ3MgaXRz ZWxmICovCisJCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsKKwl9CisKKwlpZ3Rfc3Vi dGVzdF9ncm91cCB7CisJCWlndF9maXh0dXJlIHsKKwkJCXJlcXVpcmVfY29ubmVjdG9yX3ByZXNl bnQoCisJCQkgICAgJmRhdGEsIERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCk7CisJCX0K KworCQlkZWZpbmVfY29tbW9uX2Nvbm5lY3Rvcl90ZXN0cygiZHAiLCBEaXNwbGF5UG9ydCk7CisJ fQorCisJaWd0X3N1YnRlc3RfZ3JvdXAgeworCQlpZ3RfZml4dHVyZSB7CisJCQlyZXF1aXJlX2Nv bm5lY3Rvcl9wcmVzZW50KAorCQkJICAgICZkYXRhLCBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEp OworCQl9CisKKwkJZGVmaW5lX2NvbW1vbl9jb25uZWN0b3JfdGVzdHMoImhkbWkiLCBIRE1JQSk7 CisJfQorCisJaWd0X3N1YnRlc3RfZ3JvdXAgeworCQlpZ3RfZml4dHVyZSB7CisJCQlyZXF1aXJl X2Nvbm5lY3Rvcl9wcmVzZW50KAorCQkJICAgICZkYXRhLCBEUk1fTU9ERV9DT05ORUNUT1JfVkdB KTsKKwkJfQorCisJCWNvbm5lY3Rvcl9zdWJ0ZXN0KCJ2Z2EtaHBkIiwgVkdBKQorCQkJdGVzdF9i YXNpY19ob3RwbHVnKCZkYXRhLCBwb3J0KTsKKworCQljb25uZWN0b3Jfc3VidGVzdCgidmdhLWVk aWQtcmVhZCIsIFZHQSkgeworCQkJdGVzdF9lZGlkX3JlYWQoJmRhdGEsIHBvcnQsIGVkaWRfaWQs CisJCQkJICAgICAgIGlndF9rbXNfZ2V0X2Jhc2VfZWRpZCgpKTsKKwkJCXRlc3RfZWRpZF9yZWFk KCZkYXRhLCBwb3J0LCBhbHRfZWRpZF9pZCwKKwkJCQkgICAgICAgaWd0X2ttc19nZXRfYWx0X2Vk aWQoKSk7CisJCX0KKworCQkvKiBGSVhNRTogUmlnaHQgbm93IHRoZXJlIGlzbid0IGEgd2F5IHRv IGRvIGFueSBzb3J0IG9mIGRlbGF5ZWQKKwkJICogcHN1ZWRvLWhvdHBsdWcgd2l0aCBWR0EsIHNv IHRlc3RpbmcgZGV0ZWN0aW9uIGFmdGVyIGEKKwkJICogc3VzcGVuZC9yZXN1bWUgY3ljbGUgaXNu J3QgcG9zc2libGUgeWV0CisJCSAqLworCisJCWNvbm5lY3Rvcl9zdWJ0ZXN0KCJ2Z2EtaHBkLXdp dGhvdXQtZGRjIiwgVkdBKQorCQkJdGVzdF9ocGRfd2l0aG91dF9kZGMoJmRhdGEsIHBvcnQpOwor CisJCWNvbm5lY3Rvcl9zdWJ0ZXN0KCJ2Z2EtZGlzcGxheSIsIFZHQSkKKwkJCXRlc3RfZGlzcGxh eSgmZGF0YSwgcG9ydCk7CisJfQorfQotLSAKMi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=