From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 80205 invoked by alias); 15 Sep 2018 13:21:10 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 80195 invoked by uid 89); 15 Sep 2018 13:21:10 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=UD:tls-var.exp, tls-var.exp, Hx-languages-length:850, tlsvarexp X-HELO: mail-wm1-f50.google.com Received: from mail-wm1-f50.google.com (HELO mail-wm1-f50.google.com) (209.85.128.50) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 15 Sep 2018 13:21:08 +0000 Received: by mail-wm1-f50.google.com with SMTP id y139-v6so4728131wmc.2 for ; Sat, 15 Sep 2018 06:21:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=tU40qbOGThBiEgMPtGw/CUdPIh1IAjwa3lbcFeA9o6k=; b=nXPNbs+CJa7aJnfOlbX4bjvQpAYDj+5ABUYDx+IfYC0HyWieqXq2fciNWBHxgB1O9M TchKRNMnPoIx4Rt9DfuRKRgWzkHXVA9aEM4U9xt/fj2LJohZD6Mv0KWyFOLgIKglRv9G L1deIq3tHbjSDDLoYEiIQZYq7PEYpeXLIM4zZ8cv8wsPIfohkouEMb5HqwBZhr1Gq/B9 CxNHcjwnXr4ajLbTfmbDpf1/Zf3aTxmb0kyuuzSlUr/WO/K5a2xbZw0uDPheOYJ6rbGd hpSyjCgf414QKCJltkHgr6E/p07Xadj/PRg12l0aV2vK146qrQBFvMJseSOEx7iOBtY3 kd0g== MIME-Version: 1.0 Received: by 2002:adf:8463:0:0:0:0:0 with HTTP; Sat, 15 Sep 2018 06:21:05 -0700 (PDT) From: Rajendra SY Date: Sat, 15 Sep 2018 13:21:00 -0000 Message-ID: Subject: [PATCH] [PR 23660] On FreeBSD platform missing implementation of thread-db support To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary="000000000000f88dad0575e8cf28" X-SW-Source: 2018-09/txt/msg00491.txt.bz2 --000000000000f88dad0575e8cf28 Content-Type: text/plain; charset="UTF-8" Content-length: 869 Problem: Missing libthread_db integration with GDB Cause: GDB missing libthread_db integration on FreeBSD target because of this GDB failed to access TLS variable values. Tests failed: - gdb.threads/tls-shared.exp - gdb.threads/tls-nodebug-pie.exp - gdb.threads/tls-so_extern.exp - gdb.threads/tls-var.exp - gdb.threads/tls.exp - gdb.threads/tls-core.exp gdb/ChangeLog: 2018-09-15 Rajendra SY PR gdb/23660 * gdb/amd64-fbsd-nat.c (supply_gregset): (fill_gregset): (supply_fpregset): (fill_fpregset): * gdb/amd64-fbsd-tdep.c (amd64fbsd_init_abi): * gdb/configure.nat: * gdb/fbsd-thread-db.c: New file. * gdb/i386-bsd-nat.c (supply_gregset): (supply_fpregset): (fill_gregset): (fill_fpregset): * gdb/i386-fbsd-tdep.c (i386fbsd4_init_abi): --000000000000f88dad0575e8cf28 Content-Type: application/octet-stream; name="0001-Add-thread-db-support-to-FreeBSD-platform.patch" Content-Disposition: attachment; filename="0001-Add-thread-db-support-to-FreeBSD-platform.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jm3gk4530 Content-length: 59963 RnJvbSBiZjg2MjI4MDkwMWU2OGIwMTFjNjEwM2ZmZGI2ZmE2NTM3ZWIzMGNk IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBSYWplbmRyYSBTIFkg PHN5cmFqZW5kcmFAanVuaXBlci5uZXQ+CkRhdGU6IEZyaSwgMTQgU2VwIDIw MTggMjA6MTQ6NDYgKzA1MzAKU3ViamVjdDogW1BBVENIXSBBZGQgdGhyZWFk LWRiIHN1cHBvcnQgdG8gRnJlZUJTRCBwbGF0Zm9ybQoKClNpZ25lZC1vZmYt Ynk6IFJhamVuZHJhIFMgWSA8c3lyYWplbmRyYUBqdW5pcGVyLm5ldD4KLS0t CiBnZGIvYW1kNjQtZmJzZC1uYXQuYyAgfCAgIDQ0ICsrCiBnZGIvYW1kNjQt ZmJzZC10ZGVwLmMgfCAgICA0ICsKIGdkYi9jb25maWd1cmUubmF0ICAgICB8 ICAgIDcgKy0KIGdkYi9mYnNkLXRocmVhZC1kYi5jICB8IDEzNDggKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog Z2RiL2kzODYtYnNkLW5hdC5jICAgIHwgICAzMiArKwogZ2RiL2kzODYtZmJz ZC10ZGVwLmMgIHwgICAgNCArCiA2IGZpbGVzIGNoYW5nZWQsIDE0MzQgaW5z ZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnZGIvZmJzZC10aHJlYWQtZGIuYwoKZGlmZiAtLWdpdCBhL2dkYi9hbWQ2 NC1mYnNkLW5hdC5jIGIvZ2RiL2FtZDY0LWZic2QtbmF0LmMKaW5kZXggN2M3 Yzk2My4uZjdlOGYwYyAxMDA2NDQKLS0tIGEvZ2RiL2FtZDY0LWZic2QtbmF0 LmMKKysrIGIvZ2RiL2FtZDY0LWZic2QtbmF0LmMKQEAgLTM1LDYgKzM1LDcg QEAKICNpbmNsdWRlICJhbWQ2NC1ic2QtbmF0LmgiCiAjaW5jbHVkZSAieDg2 LW5hdC5oIgogI2luY2x1ZGUgIng4Ni14c3RhdGUuaCIKKyNpbmNsdWRlICJn cmVnc2V0LmgiCiAMCiAKIGNsYXNzIGFtZDY0X2Zic2RfbmF0X3RhcmdldCBm aW5hbApAQCAtMzA2LDMgKzMwNyw0NiBAQCBQbGVhc2UgcmVwb3J0IHRoaXMg dG8gPGJ1Zy1nZGJAZ251Lm9yZz4uIiksCiAgIH0KICNlbmRpZgogfQorCisv KiBUcmFuc2ZlcmluZyB0aGUgcmVnaXN0ZXJzIGJldHdlZW4gR0RCLCBpbmZl cmlvcnMgYW5kIGNvcmUgZmlsZXMuICAqLworCisvKiBGaWxsIEdEQidzIHJl Z2lzdGVyIGFycmF5IHdpdGggdGhlIGdlbmVyYWwtcHVycG9zZSByZWdpc3Rl ciB2YWx1ZXMKKyAgIGluICpHUkVHU0VUUC4gICovCisKK3ZvaWQKK3N1cHBs eV9ncmVnc2V0IChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBjb25zdCBn ZGJfZ3JlZ3NldF90ICpncmVncykKK3sKKyAgYW1kNjRfc3VwcGx5X25hdGl2 ZV9ncmVnc2V0IChyZWdjYWNoZSwgZ3JlZ3MsIC0xKTsKK30KKworLyogRmls bCByZWdpc3RlciBSRUdOVU0gKGlmIGl0IGlzIGEgZ2VuZXJhbC1wdXJwb3Nl IHJlZ2lzdGVyKSBpbgorICAgKkdSRUdTRVRQUyB3aXRoIHRoZSB2YWx1ZSBp biBHREIncyByZWdpc3RlciBhcnJheS4gIElmIFJFR05VTSBpcyAtMSwKKyAg IGRvIHRoaXMgZm9yIGFsbCByZWdpc3RlcnMuICAqLworCit2b2lkCitmaWxs X2dyZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIGdk Yl9ncmVnc2V0X3QgKmdyZWdzLCBpbnQgcmVnbm8pCit7CisgIGFtZDY0X2Nv bGxlY3RfbmF0aXZlX2dyZWdzZXQgKHJlZ2NhY2hlLCBncmVncywgcmVnbm8p OworfQorCisvKiBGaWxsIEdEQidzIHJlZ2lzdGVyIGFycmF5IHdpdGggdGhl IGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIHZhbHVlcworICAgaW4gKkZQUkVH U0VUUC4gICovCisKK3ZvaWQKK3N1cHBseV9mcHJlZ3NldCAoc3RydWN0IHJl Z2NhY2hlICpyZWdjYWNoZSwgY29uc3QgZ2RiX2ZwcmVnc2V0X3QgKmZwcmVn cykKK3sKKyAgYW1kNjRfc3VwcGx5X2Z4c2F2ZSAocmVnY2FjaGUsIC0xLCBm cHJlZ3MpOworfQorCisvKiBGaWxsIHJlZ2lzdGVyIFJFR05VTSAoaWYgaXQg aXMgYSBmbG9hdGluZy1wb2ludCByZWdpc3RlcikgaW4KKyAgICpGUFJFR1NF VFAgd2l0aCB0aGUgdmFsdWUgaW4gR0RCJ3MgcmVnaXN0ZXIgYXJyYXkuICBJ ZiBSRUdOVU0gaXMgLTEsCisgICBkbyB0aGlzIGZvciBhbGwgcmVnaXN0ZXJz LiAgKi8KKwordm9pZAorZmlsbF9mcHJlZ3NldCAoY29uc3Qgc3RydWN0IHJl Z2NhY2hlICpyZWdjYWNoZSwgZ2RiX2ZwcmVnc2V0X3QgKmZwcmVncywKKyAg ICAgICAgICAgaW50IHJlZ25vKQoreworICBhbWQ2NF9jb2xsZWN0X2Z4c2F2 ZSAocmVnY2FjaGUsIHJlZ25vLCBmcHJlZ3MpOworfQorCisKZGlmZiAtLWdp dCBhL2dkYi9hbWQ2NC1mYnNkLXRkZXAuYyBiL2dkYi9hbWQ2NC1mYnNkLXRk ZXAuYwppbmRleCA3ZjdlY2ZjLi43YzkwMTA4IDEwMDY0NAotLS0gYS9nZGIv YW1kNjQtZmJzZC10ZGVwLmMKKysrIGIvZ2RiL2FtZDY0LWZic2QtdGRlcC5j CkBAIC0yMzgsNiArMjM4LDEwIEBAIGFtZDY0ZmJzZF9pbml0X2FiaSAoc3Ry dWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJj aCkKICAgc2V0X2dkYmFyY2hfY29yZV9yZWFkX2Rlc2NyaXB0aW9uIChnZGJh cmNoLAogCQkJCSAgICAgYW1kNjRmYnNkX2NvcmVfcmVhZF9kZXNjcmlwdGlv bik7CiAKKyAgLyogRW5hYmxlIFRMUyBzdXBwb3J0LiAgKi8KKyAgc2V0X2dk YmFyY2hfZmV0Y2hfdGxzX2xvYWRfbW9kdWxlX2FkZHJlc3MgKGdkYmFyY2gs CisgICAgICAgICAgICAgICAgICAgICBzdnI0X2ZldGNoX29iamZpbGVfbGlu a19tYXApOworCiAgIC8qIEZyZWVCU0QgdXNlcyBTVlI0LXN0eWxlIHNoYXJl ZCBsaWJyYXJpZXMuICAqLwogICBzZXRfc29saWJfc3ZyNF9mZXRjaF9saW5r X21hcF9vZmZzZXRzCiAgICAgKGdkYmFyY2gsIHN2cjRfbHA2NF9mZXRjaF9s aW5rX21hcF9vZmZzZXRzKTsKZGlmZiAtLWdpdCBhL2dkYi9jb25maWd1cmUu bmF0IGIvZ2RiL2NvbmZpZ3VyZS5uYXQKaW5kZXggZmVkZGVhYS4uNmNjYjQz ZSAxMDA2NDQKLS0tIGEvZ2RiL2NvbmZpZ3VyZS5uYXQKKysrIGIvZ2RiL2Nv bmZpZ3VyZS5uYXQKQEAgLTYyLDcgKzYyLDggQEAgY2FzZSAke2dkYl9ob3N0 fSBpbgogCUxPQURMSUJFUz0nLWxkbCAkKFJEWU5BTUlDKScKIAk7OwogICAg IGZic2QqKQotCU5BVERFUEZJTEVTPSdmb3JrLWNoaWxkLm8gZm9yay1pbmZl cmlvci5vIGluZi1wdHJhY2UubyBmYnNkLW5hdC5vJworCU5BVERFUEZJTEVT PSdmb3JrLWNoaWxkLm8gZm9yay1pbmZlcmlvci5vIGluZi1wdHJhY2UubyBm YnNkLW5hdC5vIFwKKwkJCQkgZmJzZC10aHJlYWQtZGIubycKIAlIQVZFX05B VElWRV9HQ09SRV9IT1NUPTEKIAlMT0FETElCRVM9Jy1sa3ZtJwogCTs7CkBA IC0yNjcsMTAgKzI2OCw2IEBAIGNhc2UgJHtnZGJfaG9zdH0gaW4KIAkJIyBI b3N0OiBQb3dlclBDLCBydW5uaW5nIExpbnV4CiAJCU5BVERFUEZJTEVTPSIk e05BVERFUEZJTEVTfSBwcGMtbGludXgtbmF0Lm8gcHBjLWxpbnV4Lm8iCiAJ CTs7Ci0JICAgIHJpc2N2KikKLQkJIyBIb3N0OiBSSVNDLVYsIHJ1bm5pbmcg TGludXgKLQkJTkFUREVQRklMRVM9IiR7TkFUREVQRklMRVN9IHJpc2N2LWxp bnV4LW5hdC5vIgotCQk7OwogCSAgICBzMzkwKQogCQkjIEhvc3Q6IFMzOTAs IHJ1bm5pbmcgTGludXgKIAkJTkFUREVQRklMRVM9IiR7TkFUREVQRklMRVN9 IHMzOTAtbGludXgtbmF0Lm8iCmRpZmYgLS1naXQgYS9nZGIvZmJzZC10aHJl YWQtZGIuYyBiL2dkYi9mYnNkLXRocmVhZC1kYi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYmM0MmQKLS0tIC9kZXYvbnVsbAor KysgYi9nZGIvZmJzZC10aHJlYWQtZGIuYwpAQCAtMCwwICsxLDEzNDggQEAK Ky8qIGxpYnRocmVhZF9kYiBhc3Npc3RlZCBkZWJ1Z2dpbmcgc3VwcG9ydC4K KworICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTggRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdE Qi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUg ImRlZnMuaCIKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgImdkYl9w cm9jX3NlcnZpY2UuaCIKKyNpbmNsdWRlICJuYXQvZ2RiX3RocmVhZF9kYi5o IgorI2luY2x1ZGUgImdkYl92ZWNzLmgiCisjaW5jbHVkZSAiYmZkLmgiCisj aW5jbHVkZSAiY29tbWFuZC5oIgorI2luY2x1ZGUgImdkYmNtZC5oIgorI2lu Y2x1ZGUgImdkYnRocmVhZC5oIgorI2luY2x1ZGUgImluZmVyaW9yLmgiCisj aW5jbHVkZSAiaW5mcnVuLmgiCisjaW5jbHVkZSAic3ltZmlsZS5oIgorI2lu Y2x1ZGUgIm9iamZpbGVzLmgiCisjaW5jbHVkZSAidGFyZ2V0LmgiCisjaW5j bHVkZSAicmVnY2FjaGUuaCIKKyNpbmNsdWRlICJncmVnc2V0LmgiCisjaW5j bHVkZSAic29saWIuaCIKKyNpbmNsdWRlICJzb2xpYi1zdnI0LmgiCisjaW5j bHVkZSAiZ2RiY29yZS5oIgorI2luY2x1ZGUgIm9ic2VydmFibGUuaCIKKyNp bmNsdWRlICJmYnNkLW5hdC5oIgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+ CisjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgorI2luY2x1ZGUgPHNpZ25hbC5o PgorI2lmIGRlZmluZWQoX19pMzg2X18pCisjaW5jbHVkZSAiaTM4Ny10ZGVw LmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9faTM4Nl9fKSAmJiBkZWZp bmVkIChQVF9HRVRYTU1SRUdTKQorI2RlZmluZSBJMzg2X0dFVFhNTVJFR1MK KyNlbmRpZgorCisvKiBGcmVlQlNEIGxpYnRocmVhZF9kYiBzdXBwb3J0LiAq Lworc3RhdGljIGNvbnN0IHRhcmdldF9pbmZvIHRocmVhZF9kYl90YXJnZXRf aW5mbyA9IHsKKyAgImZyZWVic2QtdGhyZWFkcyIsCisgIE5fKCJGcmVlQlNE IG11bHRpdGhyZWFkZWQgY2hpbGQgcHJvY2Vzcy4iKSwKKyAgTl8oIkZyZWVC U0QgdGhyZWFkcyBzdXBwb3J0LiIpCit9OworCisKK2NsYXNzIHRocmVhZF9k Yl90YXJnZXQgZmluYWwgOiBwdWJsaWMgdGFyZ2V0X29wcworeworcHVibGlj OgorCisgIHRocmVhZF9kYl90YXJnZXQgKCk7CisKKyAgY29uc3QgdGFyZ2V0 X2luZm8gJmluZm8gKCkgY29uc3Qgb3ZlcnJpZGUKKyAgeyByZXR1cm4gdGhy ZWFkX2RiX3RhcmdldF9pbmZvOyB9CisKKyAgdm9pZCBkZXRhY2ggKGluZmVy aW9yICosIGludCkgb3ZlcnJpZGU7CisgIHZvaWQgbW91cm5faW5mZXJpb3Ig KCkgb3ZlcnJpZGU7CisgIHB0aWRfdCB3YWl0IChwdGlkX3QsIHN0cnVjdCB0 YXJnZXRfd2FpdHN0YXR1cyAqLCBpbnQpIG92ZXJyaWRlOworICB2b2lkIHJl c3VtZSAocHRpZF90LCBpbnQsIGVudW0gZ2RiX3NpZ25hbCkgb3ZlcnJpZGU7 CisgIHZvaWQgdXBkYXRlX3RocmVhZF9saXN0ICgpIG92ZXJyaWRlOworICBj b25zdCBjaGFyICpwaWRfdG9fc3RyIChwdGlkX3QpIG92ZXJyaWRlOworICBj b25zdCBjaGFyICpleHRyYV90aHJlYWRfaW5mbyAoc3RydWN0IHRocmVhZF9p bmZvICopIG92ZXJyaWRlOworICBwdGlkX3QgZ2V0X2FkYV90YXNrX3B0aWQg KGxvbmcgbHdwLCBsb25nIHRocmVhZCkgb3ZlcnJpZGU7CisgIHN0cnVjdCB0 aHJlYWRfaW5mbyAqdGhyZWFkX2hhbmRsZV90b190aHJlYWRfaW5mbyAoCisg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdkYl9ieXRlICp0aHJlYWRfaGFu ZGxlLAorICAgICAgICAgICAgICAgICAgICBpbnQgaGFuZGxlX2xlbiwKKyAg ICAgICAgICAgICAgICAgICAgaW5mZXJpb3IgKmluZikgb3ZlcnJpZGU7Cisg IENPUkVfQUREUiBnZXRfdGhyZWFkX2xvY2FsX2FkZHJlc3MgKHB0aWRfdCBw dGlkLAorICAgICAgICAgICAgICAgICAgQ09SRV9BRERSIGxvYWRfbW9kdWxl X2FkZHIsCisgICAgICAgICAgICAgICAgICBDT1JFX0FERFIgb2Zmc2V0KSBv dmVycmlkZTsKKworICBwdGlkX3QgZ2V0X2V2ZW50X3B0aWQgKGludCBwaWQp OworICBzdHJ1Y3QgdGhyZWFkX2luZm8gKmF0dGFjaF90aHJlYWQgKHN0cnVj dCB0aHJlYWRfZGJfaW5mbyAqaW5mbywKKyAgICAgICAgICBzdHJ1Y3QgdGhy ZWFkX2luZm8gKnRwLAorICAgICAgICAgIHB0aWRfdCBwdGlkLCBjb25zdCB0 ZF90aHJoYW5kbGVfdCAqdGhfcCwKKyAgICAgICAgICBjb25zdCB0ZF90aHJp bmZvX3QgKnRpX3ApOworICBzdHJ1Y3QgdGhyZWFkX2luZm8gKmF0dGFjaF9s d3AgKHN0cnVjdCB0aHJlYWRfaW5mbyAqc3RvcHBlZCwgcHRpZF90IHB0aWQp OworfTsKKwordGhyZWFkX2RiX3RhcmdldDo6dGhyZWFkX2RiX3RhcmdldCAo KQoreworICB0aGlzLT50b19zdHJhdHVtID0gdGhyZWFkX3N0cmF0dW07Cit9 CisKK3N0YXRpYyBjb25zdCBjaGFyICpsaWJ0aHJlYWRfZGJfbmFtZSA9ICJs aWJ0aHJlYWRfZGIuc28iOworc3RhdGljIGNvbnN0IGNoYXIgKmxpYnRocmVh ZF9kYl9wYXRoID0gIi91c3IvbGliIjsKKworLyogSWYgbm9uLXplcm8sIHBy aW50IGRldGFpbHMgb2YgbGlidGhyZWFkX2RiIHByb2Nlc3NpbmcuICAqLwor c3RhdGljIHVuc2lnbmVkIGludCBsaWJ0aHJlYWRfZGJfZGVidWc7CisKK3N0 YXRpYyB2b2lkCitzaG93X2xpYnRocmVhZF9kYl9kZWJ1ZyAoc3RydWN0IHVp X2ZpbGUgKmZpbGUsIGludCBmcm9tX3R0eSwKKyAgICAgICAgIHN0cnVjdCBj bWRfbGlzdF9lbGVtZW50ICpjLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAg ZnByaW50Zl9maWx0ZXJlZCAoZmlsZSwgXygiRnJlZUJTRCBsaWJ0aHJlYWQt ZGIgZGVidWcgaXMgJXNcbiIpLCB2YWx1ZSk7Cit9CisKKy8qIFRoaXMgbW9k dWxlJ3MgdGFyZ2V0IHZlY3Rvci4gICovCitzdGF0aWMgdGhyZWFkX2RiX3Rh cmdldCB0aGVfdGhyZWFkX2RiX3RhcmdldDsKKworc3RydWN0IHRocmVhZF9k Yl9pbmZvCit7CisgIHN0cnVjdCB0aHJlYWRfZGJfaW5mbyAqbmV4dDsKKwor ICAvKiBQcm9jZXNzIGlkIHRoaXMgb2JqZWN0IHJlZmVycyB0by4gICovCisg IGludCBwaWQ7CisKKyAgLyogSGFuZGxlIGZyb20gZGxvcGVuIGZvciBsaWJ0 aHJlYWRfZGIuc28uICAqLworICB2b2lkICpoYW5kbGU7CisKKyAgLyogQWJz b2x1dGUgcGF0aG5hbWUgZnJvbSBnZGJfcmVhbHBhdGggdG8gZGlzayBmaWxl IHVzZWQgZm9yIGRsb3Blbi1pbmcKKyAgICAgSEFORExFLiAgSXQgbWF5IGJl IE5VTEwgZm9yIHN5c3RlbSBsaWJyYXJ5LiAgKi8KKyAgY2hhciAqZmlsZW5h bWU7CisKKyAgLyogU3RydWN0dXJlIHRoYXQgaWRlbnRpZmllcyB0aGUgY2hp bGQgcHJvY2VzcyBmb3IgdGhlCisgICAgIDxwcm9jX3NlcnZpY2UuaD4gaW50 ZXJmYWNlLiAgKi8KKyAgc3RydWN0IHBzX3Byb2NoYW5kbGUgcHJvY19oYW5k bGU7CisKKyAgLyogQ29ubmVjdGlvbiB0byB0aGUgbGlidGhyZWFkX2RiIGxp YnJhcnkuICAqLworICB0ZF90aHJhZ2VudF90ICp0aHJlYWRfYWdlbnQ7CisK KyAgLyogVHJ1ZSBpZiB3ZSBuZWVkIHRvIGFwcGx5IHRoZSB3b3JrYXJvdW5k IGZvciBnbGliYy9CWjU5ODMuICBXaGVuCisgICAgIHdlIGNhdGNoIGEgUFRS QUNFX09fVFJBQ0VGT1JLLCBhbmQgZ28gcXVlcnkgdGhlIGNoaWxkJ3MgdGhy ZWFkCisgICAgIGxpc3QsIG5wdGxfZGIgcmV0dXJucyB0aGUgcGFyZW50J3Mg dGhyZWFkcyBpbiBhZGRpdGlvbiB0byB0aGUgbmV3CisgICAgIChzaW5nbGUp IGNoaWxkIHRocmVhZC4gIElmIHRoaXMgZmxhZyBpcyBzZXQsIHdlIGRvIGV4 dHJhIHdvcmsgdG8KKyAgICAgYmUgYWJsZSB0byBpZ25vcmUgc3VjaCBzdGFs ZSBlbnRyaWVzLiAgKi8KKyAgaW50IG5lZWRfc3RhbGVfcGFyZW50X3RocmVh ZHNfY2hlY2s7CisKKyAgLyogUG9pbnRlcnMgdG8gdGhlIGxpYnRocmVhZF9k YiBmdW5jdGlvbnMuICAqLworCisgIHRkX2luaXRfZnR5cGUgKnRkX2luaXRf cDsKKyAgdGRfdGFfbmV3X2Z0eXBlICp0ZF90YV9uZXdfcDsKKyAgdGRfdGFf bWFwX2x3cDJ0aHJfZnR5cGUgKnRkX3RhX21hcF9sd3AydGhyX3A7CisgIHRk X3RhX3Rocl9pdGVyX2Z0eXBlICp0ZF90YV90aHJfaXRlcl9wOworICB0ZF90 aHJfZ2V0X2luZm9fZnR5cGUgKnRkX3Rocl9nZXRfaW5mb19wOworICB0ZF90 aHJfdGxzX2dldF9hZGRyX2Z0eXBlICp0ZF90aHJfdGxzX2dldF9hZGRyX3A7 Cit9OworCisvKiBMaXN0IG9mIGtub3duIHByb2Nlc3NlcyB1c2luZyB0aHJl YWRfZGIsIGFuZCB0aGUgcmVxdWlyZWQKKyAgIGJvb2trZWVwaW5nLiAgKi8K K3N0cnVjdCB0aHJlYWRfZGJfaW5mbyAqdGhyZWFkX2RiX2xpc3Q7CisKK3N0 YXRpYyB2b2lkIHRocmVhZF9kYl9maW5kX25ld190aHJlYWRzXzEgKHRocmVh ZF9pbmZvICpzdG9wcGVkKTsKK3N0YXRpYyB2b2lkIHRocmVhZF9kYl9maW5k X25ld190aHJlYWRzXzIgKHRocmVhZF9pbmZvICpzdG9wcGVkLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1bnRp bF9ub19uZXcpOworc3RhdGljIGludCBpbml0X3RocmVhZHM7CisKKworLyog QWRkIHRoZSBjdXJyZW50IGluZmVyaW9yIHRvIHRoZSBsaXN0IG9mIHByb2Nl c3NlcyB1c2luZyBsaWJwdGhyZWFkLgorICAgUmV0dXJuIGEgcG9pbnRlciB0 byB0aGUgbmV3bHkgYWxsb2NhdGVkIG9iamVjdCB0aGF0IHdhcyBhZGRlZCB0 bworICAgVEhSRUFEX0RCX0xJU1QuICBIQU5ETEUgaXMgdGhlIGhhbmRsZSBy ZXR1cm5lZCBieSBkbG9wZW4naW5nCisgICBMSUJUSFJFQURfREJfU08uICAq LworCitzdGF0aWMgc3RydWN0IHRocmVhZF9kYl9pbmZvICoKK2FkZF90aHJl YWRfZGJfaW5mbyAodm9pZCAqaGFuZGxlKQoreworICBzdHJ1Y3QgdGhyZWFk X2RiX2luZm8gKmluZm8gPSBYQ05FVyAoc3RydWN0IHRocmVhZF9kYl9pbmZv KTsKKworICBpbmZvLT5waWQgPSBpbmZlcmlvcl9wdGlkLnBpZCAoKTsKKyAg aW5mby0+aGFuZGxlID0gaGFuZGxlOworCisgIC8qIFRoZSB3b3JrYXJvdW5k IHdvcmtzIGJ5IHJlYWRpbmcgZnJvbSAvcHJvYy9waWQvc3RhdHVzLCBzbyBp dCBpcworICAgICBkaXNhYmxlZCBmb3IgY29yZSBmaWxlcy4gICovCisgIGlm ICh0YXJnZXRfaGFzX2V4ZWN1dGlvbikKKyAgICBpbmZvLT5uZWVkX3N0YWxl X3BhcmVudF90aHJlYWRzX2NoZWNrID0gMTsKKworICBpbmZvLT5uZXh0ID0g dGhyZWFkX2RiX2xpc3Q7CisgIHRocmVhZF9kYl9saXN0ID0gaW5mbzsKKwor ICByZXR1cm4gaW5mbzsKK30KKworLyogUmV0dXJuIHRoZSB0aHJlYWRfZGJf aW5mbyBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBib29ra2VlcGluZworICAg cmVsYXRlZCB0byBwcm9jZXNzIFBJRCwgaWYgYW55OyBOVUxMIG90aGVyd2lz ZS4gICovCisKK3N0YXRpYyBzdHJ1Y3QgdGhyZWFkX2RiX2luZm8gKgorZ2V0 X3RocmVhZF9kYl9pbmZvIChpbnQgcGlkKQoreworICBzdHJ1Y3QgdGhyZWFk X2RiX2luZm8gKmluZm87CisKKyAgZm9yIChpbmZvID0gdGhyZWFkX2RiX2xp c3Q7IGluZm87IGluZm8gPSBpbmZvLT5uZXh0KQorICAgIGlmIChwaWQgPT0g aW5mby0+cGlkKQorICAgICAgcmV0dXJuIGluZm87CisKKyAgcmV0dXJuIE5V TEw7Cit9CisKKy8qIFdoZW4gUElEIGhhcyBleGl0ZWQgb3IgaGFzIGJlZW4g ZGV0YWNoZWQsIHdlIG5vIGxvbmdlciB3YW50IHRvIGtlZXAKKyAgIHRyYWNr IG9mIGl0IGFzIHVzaW5nIGxpYnB0aHJlYWQuICBDYWxsIHRoaXMgZnVuY3Rp b24gdG8gZGlzY2FyZAorICAgdGhyZWFkX2RiIHJlbGF0ZWQgaW5mbyByZWxh dGVkIHRvIFBJRC4gIE5vdGUgdGhhdCB0aGlzIGNsb3NlcworICAgTElCVEhS RUFEX0RCX1NPJ3MgZGxvcGVuJ2VkIGhhbmRsZS4gICovCisKK3N0YXRpYyB2 b2lkCitkZWxldGVfdGhyZWFkX2RiX2luZm8gKGludCBwaWQpCit7CisgIHN0 cnVjdCB0aHJlYWRfZGJfaW5mbyAqaW5mbywgKmluZm9fcHJldjsKKworICBp bmZvX3ByZXYgPSBOVUxMOworCisgIGZvciAoaW5mbyA9IHRocmVhZF9kYl9s aXN0OyBpbmZvOyBpbmZvX3ByZXYgPSBpbmZvLCBpbmZvID0gaW5mby0+bmV4 dCkKKyAgICBpZiAocGlkID09IGluZm8tPnBpZCkKKyAgICAgIGJyZWFrOwor CisgIGlmIChpbmZvID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIGlmIChp bmZvLT5oYW5kbGUgIT0gTlVMTCkKKyAgICBkbGNsb3NlIChpbmZvLT5oYW5k bGUpOworCisgIGlmIChpbmZvX3ByZXYpCisgICAgaW5mb19wcmV2LT5uZXh0 ID0gaW5mby0+bmV4dDsKKyAgZWxzZQorICAgIHRocmVhZF9kYl9saXN0ID0g aW5mby0+bmV4dDsKKworICB4ZnJlZSAoaW5mbyk7Cit9CisKKy8qIFVzZSAi c3RydWN0IHByaXZhdGVfdGhyZWFkX2luZm8iIHRvIGNhY2hlIHRocmVhZCBz dGF0ZS4gIFRoaXMgaXMKKyAgIGEgc3Vic3RhbnRpYWwgb3B0aW1pemF0aW9u LiAgKi8KKworc3RydWN0IHRocmVhZF9kYl90aHJlYWRfaW5mbyA6IHB1Ymxp YyBwcml2YXRlX3RocmVhZF9pbmZvCit7CisgIC8qIEZsYWcgc2V0IHdoZW4g d2Ugc2VlIGEgVERfREVBVEggZXZlbnQgZm9yIHRoaXMgdGhyZWFkLiAgKi8K KyAgYm9vbCBkeWluZyA9IGZhbHNlOworCisgIC8qIENhY2hlZCB0aHJlYWQg c3RhdGUuICAqLworICB0ZF90aHJoYW5kbGVfdCB0aCB7fTsKKyAgdGhyZWFk X3QgdGlkIHt9OworICBwc2FkZHJfdCB0bHMge307Cit9OworCitzdGF0aWMg dGhyZWFkX2RiX3RocmVhZF9pbmZvICoKK2dldF90aHJlYWRfZGJfdGhyZWFk X2luZm8gKHRocmVhZF9pbmZvICp0aHJlYWQpCit7CisgIHJldHVybiBzdGF0 aWNfY2FzdDx0aHJlYWRfZGJfdGhyZWFkX2luZm8gKj4gKHRocmVhZC0+cHJp di5nZXQgKCkpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCit0aHJlYWRf ZGJfZXJyX3N0ciAodGRfZXJyX2UgZXJyKQoreworICBzdGF0aWMgY2hhciBi dWZbNjRdOworCisgIHN3aXRjaCAoZXJyKQorICAgIHsKKyAgICBjYXNlIFRE X09LOgorICAgICAgcmV0dXJuICJnZW5lcmljICdjYWxsIHN1Y2NlZWRlZCci OworICAgIGNhc2UgVERfRVJSOgorICAgICAgcmV0dXJuICJnZW5lcmljIGVy cm9yIjsKKyAgICBjYXNlIFREX05PVEhSOgorICAgICAgcmV0dXJuICJubyB0 aHJlYWQgdG8gc2F0aXNmeSBxdWVyeSI7CisgICAgY2FzZSBURF9OT1NWOgor ICAgICAgcmV0dXJuICJubyBzeW5jIGhhbmRsZSB0byBzYXRpc2Z5IHF1ZXJ5 IjsKKyAgICBjYXNlIFREX05PTFdQOgorICAgICAgcmV0dXJuICJubyBMV1Ag dG8gc2F0aXNmeSBxdWVyeSI7CisgICAgY2FzZSBURF9CQURQSDoKKyAgICAg IHJldHVybiAiaW52YWxpZCBwcm9jZXNzIGhhbmRsZSI7CisgICAgY2FzZSBU RF9CQURUSDoKKyAgICAgIHJldHVybiAiaW52YWxpZCB0aHJlYWQgaGFuZGxl IjsKKyAgICBjYXNlIFREX0JBRFNIOgorICAgICAgcmV0dXJuICJpbnZhbGlk IHN5bmNocm9uaXphdGlvbiBoYW5kbGUiOworICAgIGNhc2UgVERfQkFEVEE6 CisgICAgICByZXR1cm4gImludmFsaWQgdGhyZWFkIGFnZW50IjsKKyAgICBj YXNlIFREX0JBREtFWToKKyAgICAgIHJldHVybiAiaW52YWxpZCBrZXkiOwor ICAgIGNhc2UgVERfTk9NU0c6CisgICAgICByZXR1cm4gIm5vIGV2ZW50IG1l c3NhZ2UgZm9yIGdldG1zZyI7CisgICAgY2FzZSBURF9OT0ZQUkVHUzoKKyAg ICAgIHJldHVybiAiRlBVIHJlZ2lzdGVyIHNldCBub3QgYXZhaWxhYmxlIjsK KyAgICBjYXNlIFREX05PTElCVEhSRUFEOgorICAgICAgcmV0dXJuICJhcHBs aWNhdGlvbiBub3QgbGlua2VkIHdpdGggbGlidGhyZWFkIjsKKyAgICBjYXNl IFREX05PRVZFTlQ6CisgICAgICByZXR1cm4gInJlcXVlc3RlZCBldmVudCBp cyBub3Qgc3VwcG9ydGVkIjsKKyAgICBjYXNlIFREX05PQ0FQQUI6CisgICAg ICByZXR1cm4gImNhcGFiaWxpdHkgbm90IGF2YWlsYWJsZSI7CisgICAgY2Fz ZSBURF9EQkVSUjoKKyAgICAgIHJldHVybiAiZGVidWdnZXIgc2VydmljZSBm YWlsZWQiOworICAgIGNhc2UgVERfTk9BUExJQzoKKyAgICAgIHJldHVybiAi b3BlcmF0aW9uIG5vdCBhcHBsaWNhYmxlIHRvIjsKKyAgICBjYXNlIFREX05P VFNEOgorICAgICAgcmV0dXJuICJubyB0aHJlYWQtc3BlY2lmaWMgZGF0YSBm b3IgdGhpcyB0aHJlYWQiOworICAgIGNhc2UgVERfTUFMTE9DOgorICAgICAg cmV0dXJuICJtYWxsb2MgZmFpbGVkIjsKKyAgICBjYXNlIFREX1BBUlRJQUxS RUc6CisgICAgICByZXR1cm4gIm9ubHkgcGFydCBvZiByZWdpc3RlciBzZXQg d2FzIHdyaXR0ZW4vcmVhZCI7CisgICAgY2FzZSBURF9OT1hSRUdTOgorICAg ICAgcmV0dXJuICJYIHJlZ2lzdGVyIHNldCBub3QgYXZhaWxhYmxlIGZvciB0 aGlzIHRocmVhZCI7CisjaWZkZWYgVEhSRUFEX0RCX0hBU19URF9OT1RBTExP QworICAgIGNhc2UgVERfTk9UQUxMT0M6CisgICAgICByZXR1cm4gInRocmVh ZCBoYXMgbm90IHlldCBhbGxvY2F0ZWQgVExTIGZvciBnaXZlbiBtb2R1bGUi OworI2VuZGlmCisjaWZkZWYgVEhSRUFEX0RCX0hBU19URF9WRVJTSU9OCisg ICAgY2FzZSBURF9WRVJTSU9OOgorICAgICAgcmV0dXJuICJ2ZXJzaW9ucyBv ZiBsaWJwdGhyZWFkIGFuZCBsaWJ0aHJlYWRfZGIgZG8gbm90IG1hdGNoIjsK KyNlbmRpZgorI2lmZGVmIFRIUkVBRF9EQl9IQVNfVERfTk9UTFMKKyAgICBj YXNlIFREX05PVExTOgorICAgICAgcmV0dXJuICJ0aGVyZSBpcyBubyBUTFMg c2VnbWVudCBpbiB0aGUgZ2l2ZW4gbW9kdWxlIjsKKyNlbmRpZgorICAgIGRl ZmF1bHQ6CisgICAgICBzbnByaW50ZiAoYnVmLCBzaXplb2YgKGJ1ZiksICJ1 bmtub3duIHRocmVhZF9kYiBlcnJvciAnJWQnIiwgZXJyKTsKKyAgICAgIHJl dHVybiBidWY7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCAqCit2ZXJib3Nl X2Rsc3ltICh2b2lkICpoYW5kbGUsIGNvbnN0IGNoYXIgKm5hbWUpCit7Cisg IHZvaWQgKnN5bSA9IGRsc3ltIChoYW5kbGUsIG5hbWUpOworICBpZiAoc3lt ID09IE5VTEwpCisgICAgd2FybmluZyAoXygiVEhSLURCOiBTeW1ib2wgXCIl c1wiIG5vdCBmb3VuZCBpbiBsaWJ0aHJlYWRfZGI6ICVzIiksCisgICAgICAg bmFtZSwgZGxlcnJvciAoKSk7CisgIHJldHVybiBzeW07Cit9CisKK3N0cnVj dCBjYWxsYmFja19kYXRhCit7CisgIHN0cnVjdCB0aHJlYWRfZGJfaW5mbyAq aW5mbzsKKyAgaW50IG5ld190aHJlYWRzOworfTsKKworc3RhdGljIHZvaWQK K3VwZGF0ZV90aHJlYWRfc3RhdGUgKHRocmVhZF9kYl90aHJlYWRfaW5mbyAq cHJpdiwKKyAgICAgICAgIGNvbnN0IHRkX3RocmluZm9fdCAqdGlfcCkKK3sK KyAgcHJpdi0+ZHlpbmcgPSAodGlfcC0+dGlfc3RhdGUgPT0gVERfVEhSX1VO S05PV04KKyAgICAgfHwgdGlfcC0+dGlfc3RhdGUgPT0gVERfVEhSX1pPTUJJ RSk7Cit9CisKK3N0YXRpYyB2b2lkCitjb3JlX2dldF9maXJzdF9sd3BfY2Fs bGJhY2sgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKmFzZWN0LCB2b2lkICpvYmop Cit7CisgIGlmIChzdHJuY21wIChiZmRfc2VjdGlvbl9uYW1lIChhYmZkLCBh c2VjdCksICIucmVnLyIsIDUpICE9IDApCisgICAgcmV0dXJuOworCisgIGlm ICgqKGx3cGlkX3QgKikgb2JqICE9IDApCisgICAgcmV0dXJuOworCisgICoo bHdwaWRfdCAqKSBvYmogPSBhdG9pIChiZmRfc2VjdGlvbl9uYW1lIChhYmZk LCBhc2VjdCkgKyA1KTsKK30KKworc3RhdGljIGludAoraGF2ZV90aHJlYWRz X2NhbGxiYWNrIChzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCwgdm9pZCAq YXJncykKK3sKKyAgaW50IHBpZCA9ICogKGludCAqKSBhcmdzOworCisgIGlm ICh0aHJlYWQtPnB0aWQucGlkKCkgIT0gcGlkKQorICAgIHJldHVybiAwOwor CisgIHRocmVhZF9kYl90aHJlYWRfaW5mbyAqcHJpdiA9IGdldF90aHJlYWRf ZGJfdGhyZWFkX2luZm8gKHRocmVhZCk7CisgIHJldHVybiBwcml2ICE9IE5V TEw7Cit9CisKK3N0YXRpYyBpbnQKK2ZpbmRfbmV3X3RocmVhZHNfY2FsbGJh Y2sgKGNvbnN0IHRkX3RocmhhbmRsZV90ICp0aF9wLCB2b2lkICpkYXRhKQor eworICB0ZF90aHJpbmZvX3QgdGk7CisgIHRkX2Vycl9lIGVycjsKKworICBz dHJ1Y3QgdGhyZWFkX2luZm8gKnRwOworICBzdHJ1Y3QgY2FsbGJhY2tfZGF0 YSAqY2JfZGF0YSA9IChzdHJ1Y3QgY2FsbGJhY2tfZGF0YSAqKWRhdGE7Cisg IHN0cnVjdCB0aHJlYWRfZGJfaW5mbyAqaW5mbyA9IGNiX2RhdGEtPmluZm87 CisKKyAgaWYgKGxpYnRocmVhZF9kYl9kZWJ1ZykKKyAgICBmcHJpbnRmX3Vu ZmlsdGVyZWQgKGdkYl9zdGRsb2csCisgICAgICBfKCJUSFItREIgJXM6IGNh bGxlZFxuIiksIF9fZnVuY19fKTsKKworICBlcnIgPSBpbmZvLT50ZF90aHJf Z2V0X2luZm9fcCAodGhfcCwgJnRpKTsKKyAgaWYgKGVyciAhPSBURF9PSykK KyAgICBlcnJvciAoXygiJXM6IGNhbm5vdCBnZXQgdGhyZWFkIGluZm86ICVz IiksCisgICAgICBfX2Z1bmNfXywKKyAgICAgdGhyZWFkX2RiX2Vycl9zdHIg KGVycikpOworCisgIGlmICh0aS50aV9zdGF0ZSA9PSBURF9USFJfVU5LTk9X TiB8fCB0aS50aV9zdGF0ZSA9PSBURF9USFJfWk9NQklFKQorICAgIHJldHVy biAwOyAgICAgLyogQSB6b21iaWUgLS0gaWdub3JlLiAgKi8KKworICBwdGlk X3QgcHRpZCAoaW5mby0+cGlkLCB0aS50aV9saWQsIDApOworCisgIGlmIChs aWJ0aHJlYWRfZGJfZGVidWcpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChn ZGJfc3RkbG9nLAorICAgICAgXygiVEhSLURCICVzOiAlc1xuIiksIF9fZnVu Y19fLCB0YXJnZXRfcGlkX3RvX3N0cihwdGlkKSk7CisKKyAgdHAgPSBmaW5k X3RocmVhZF9wdGlkIChwdGlkKTsKKyAgdGhyZWFkX2RiX3RocmVhZF9pbmZv ICpwcml2ID0gZ2V0X3RocmVhZF9kYl90aHJlYWRfaW5mbyAodHApOworCisg IGlmICh0cCA9PSBOVUxMIHx8IHByaXYgPT0gTlVMTCkKKyAgICBpZiAodGhl X3RocmVhZF9kYl90YXJnZXQuYXR0YWNoX3RocmVhZCAoaW5mbywgdHAsIHB0 aWQsIHRoX3AsICZ0aSkpCisgICAgICBjYl9kYXRhLT5uZXdfdGhyZWFkcyAr PSAxOworCisgIHJldHVybiAwOworfQorCit2b2lkCit0aHJlYWRfZGJfdGFy Z2V0OjpkZXRhY2ggKGluZmVyaW9yICppbmYsIGludCBmcm9tX3R0eSkKK3sK KyAgYmVuZWF0aCAoKS0+ZGV0YWNoIChpbmYsIGZyb21fdHR5KTsKKworICAv KiBOT1RFOiBGcm9tIHRoaXMgcG9pbnQgb24sIGluZmVyaW9yX3B0aWQgaXMg bnVsbF9wdGlkLiAgKi8KKworICAvKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBw cm9jZXNzZXMgdXNpbmcgbGlicHRocmVhZCwgZGV0YWNoIHRoZQorICAgICB0 aHJlYWRfZGIgdGFyZ2V0IG9wcy4gICovCisgIGlmICghdGhyZWFkX2RiX2xp c3QpCisgICAgdW5wdXNoX3RhcmdldCAodGhpcyk7Cit9CisKKy8qIEF0dGFj aCB0byBhIG5ldyB0aHJlYWQuICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3 aGVuIHdlIHJlY2VpdmUgYQorICAgVERfQ1JFQVRFIGV2ZW50IG9yIHdoZW4g d2UgaXRlcmF0ZSBvdmVyIGFsbCB0aHJlYWRzIGFuZCBmaW5kIG9uZQorICAg dGhhdCB3YXNuJ3QgYWxyZWFkeSBpbiBvdXIgbGlzdC4gIFJldHVybnMgdGhy ZWFkIGluZm8gb24gc3VjY2Vzcy4gICovCisKK3N0cnVjdCB0aHJlYWRfaW5m byAqCit0aHJlYWRfZGJfdGFyZ2V0OjphdHRhY2hfdGhyZWFkIChzdHJ1Y3Qg dGhyZWFkX2RiX2luZm8gKmluZm8sCisgICAgICAgIHN0cnVjdCB0aHJlYWRf aW5mbyAqdHAsCisgICAgICAgIHB0aWRfdCBwdGlkLCBjb25zdCB0ZF90aHJo YW5kbGVfdCAqdGhfcCwKKyAgICAgICAgY29uc3QgdGRfdGhyaW5mb190ICp0 aV9wKQoreworICB0aHJlYWRfZGJfdGhyZWFkX2luZm8gKnByaXY7CisKKyAg LyogQSB0aHJlYWQgSUQgb2YgemVybyBtYXkgbWVhbiB0aGUgdGhyZWFkIGxp YnJhcnkgaGFzIG5vdAorICAgICBpbml0aWFsaXplZCB5ZXQuICBMZWF2ZSBw cml2YXRlID09IE5VTEwgdW50aWwgdGhlIHRocmVhZCBsaWJyYXJ5CisgICAg IGhhcyBpbml0aWFsaXplZC4gICovCisgIGlmICh0aV9wLT50aV90aWQgPT0g MCkKKyAgICByZXR1cm4gdHA7CisKKyAgcHJpdiA9IGdldF90aHJlYWRfZGJf dGhyZWFkX2luZm8gKHRwKTsKKyAgaWYgKHByaXYgIT0gTlVMTCkKKyAgewor ICAgIGlmICghcHJpdi0+ZHlpbmcpCisgICAgICByZXR1cm4gTlVMTDsKKwor ICAgIGRlbGV0ZV90aHJlYWRfZGJfaW5mbyAocHRpZC5waWQgKCkpOworICAg IGRlbGV0ZV90aHJlYWQgKGZpbmRfdGhyZWFkX3B0aWQocHRpZCkpOworICAg IHRwID0gTlVMTDsKKyAgfQorCisgIC8qIENvbnN0cnVjdCB0aGUgdGhyZWFk J3MgcHJpdmF0ZSBkYXRhLiAgKi8KKyAgcHJpdiA9IG5ldyB0aHJlYWRfZGJf dGhyZWFkX2luZm87CisKKyAgcHJpdi0+dGggPSAqdGhfcDsKKyAgcHJpdi0+ dGlkID0gdGlfcC0+dGlfdGlkOworICBwcml2LT50bHMgPSB0aV9wLT50aV90 bHM7CisgIHVwZGF0ZV90aHJlYWRfc3RhdGUgKHByaXYsIHRpX3ApOworCisg IC8qIEFkZCB0aGUgdGhyZWFkIHRvIEdEQidzIHRocmVhZCBsaXN0LiAgSWYg d2UgYWxyZWFkeSBrbm93IGFib3V0IGEKKyAgICAgdGhyZWFkIHdpdGggdGhp cyBQVElELCBidXQgaXQncyBtYXJrZWQgZXhpdGVkLCB0aGVuIHRoZSBrZXJu ZWwKKyAgICAgcmV1c2VkIHRoZSB0aWQgb2YgYW4gb2xkIHRocmVhZC4gICov CisgIGlmICh0cCA9PSBOVUxMIHx8IHRwLT5zdGF0ZSA9PSBUSFJFQURfRVhJ VEVEKQorICAgIHRwID0gYWRkX3RocmVhZF93aXRoX2luZm8gKHB0aWQsIHBy aXYpOworICBlbHNlCisgICAgdHAtPnByaXYucmVzZXQocHJpdik7CisKKyAg aWYgKGxpYnRocmVhZF9kYl9kZWJ1ZykKKyAgICBmcHJpbnRmX3VuZmlsdGVy ZWQgKGdkYl9zdGRsb2csICJUSFItREIgJXM6ICVzIFxuIiwKKyAgICAgIF9f ZnVuY19fLAorICAgICAgdGFyZ2V0X3BpZF90b19zdHIocHRpZCkpOworCisg IHJldHVybiB0cDsKK30KKworLyogQXR0YWNoIHRvIGx3cCBQVElELCBkb2lu ZyB3aGF0ZXZlciBlbHNlIGlzIHJlcXVpcmVkIHRvIGhhdmUgdGhpcworICAg TFdQIHVuZGVyIHRoZSBkZWJ1Z2dlcidzIGNvbnRyb2wgLS0tIGUuZy4sIGVu YWJsaW5nIGV2ZW50CisgICByZXBvcnRpbmcuICBSZXR1cm5zIHRydWUgb24g c3VjY2Vzcy4gICovCitzdHJ1Y3QgdGhyZWFkX2luZm8gKgordGhyZWFkX2Ri X3RhcmdldDo6YXR0YWNoX2x3cCAoc3RydWN0IHRocmVhZF9pbmZvICpzdG9w cGVkLCBwdGlkX3QgcHRpZCkKK3sKKyAgdGRfdGhyaGFuZGxlX3QgdGg7Cisg IHRkX3RocmluZm9fdCB0aTsKKyAgdGRfZXJyX2UgZXJyOworICBzdHJ1Y3Qg dGhyZWFkX2RiX2luZm8gKmluZm87CisgIHN0cnVjdCB0aHJlYWRfaW5mbyAq dHA7CisKKyAgaWYgKGxpYnRocmVhZF9kYl9kZWJ1ZykKKyAgICBmcHJpbnRm X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisgICAgICAgIF8oIlRIUi1EQiAl czogJXNcbiIpLCBfX2Z1bmNfXywgdGFyZ2V0X3BpZF90b19zdHIocHRpZCkp OworCisgIGdkYl9hc3NlcnQgKHB0aWQubHdwICgpICE9IDApOworICBpbmZv ID0gZ2V0X3RocmVhZF9kYl9pbmZvIChwdGlkLnBpZCAoKSk7CisgIGlmIChp bmZvID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogQWNjZXNz IGFuIGx3cCB3ZSBrbm93IGlzIHN0b3BwZWQuICAqLworICBpbmZvLT5wcm9j X2hhbmRsZS50aHJlYWQgPSBzdG9wcGVkOworCisgIGlmIChpbml0X3RocmVh ZHMpIHsKKyAgICAvKiBBY2Nlc3MgYW4gbHdwIHdlIGtub3cgaXMgc3RvcHBl ZC4gICovCisgICAgZXJyID0gaW5mby0+dGRfdGFfbWFwX2x3cDJ0aHJfcCAo aW5mby0+dGhyZWFkX2FnZW50LCBwdGlkLmx3cCAoKSwgJnRoKTsKKyAgICBp ZiAoZXJyICE9IFREX09LKSB7CisgICAgICAvKiBDYW5ub3QgZmluZCB1c2Vy LWxldmVsIHRocmVhZC4gICovCisgICAgICBlcnJvciAoXygiQ2Fubm90IGZp bmQgdXNlci1sZXZlbCB0aHJlYWQgZm9yIExXUCAlbGQ6ICVzIiksCisgICAg ICAgcHRpZC5sd3AgKCksIHRocmVhZF9kYl9lcnJfc3RyIChlcnIpKTsKKyAg ICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlcnIgPSBpbmZvLT50ZF90 aHJfZ2V0X2luZm9fcCAoJnRoLCAmdGkpOworICAgIGlmIChlcnIgIT0gVERf T0spCisgICAgeworICAgICAgd2FybmluZyAoXygiQ2Fubm90IGdldCB0aHJl YWQgaW5mbzogJXMiKSwgdGhyZWFkX2RiX2Vycl9zdHIgKGVycikpOworICAg ICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIC8qIEZpbGwgdGhlIGNhY2hl LiAgKi8KKyAgICB0cCA9IGZpbmRfdGhyZWFkX3B0aWQgKHB0aWQpOworICAg IHJldHVybiB0aGVfdGhyZWFkX2RiX3RhcmdldC5hdHRhY2hfdGhyZWFkIChp bmZvLCB0cCwgcHRpZCwgJnRoLCAmdGkpOworICB9CisgIHJldHVybiBzdG9w cGVkOworfQorCit2b2lkCit0aHJlYWRfZGJfdGFyZ2V0Ojptb3Vybl9pbmZl cmlvciAoKQoreworICBkZWxldGVfdGhyZWFkX2RiX2luZm8gKGluZmVyaW9y X3B0aWQucGlkICgpKTsKKworICBiZW5lYXRoICgpLT5tb3Vybl9pbmZlcmlv ciAoKTsKKworICAvKiBEZXRhY2ggdGhyZWFkX2RiIHRhcmdldCBvcHMuICAq LworICBpZiAoIXRocmVhZF9kYl9saXN0KQorICAgIHVucHVzaF90YXJnZXQg KCZ0aGVfdGhyZWFkX2RiX3RhcmdldCk7Cit9CisKK3B0aWRfdAordGhyZWFk X2RiX3RhcmdldDo6d2FpdCAocHRpZF90IHB0aWQsIHN0cnVjdCB0YXJnZXRf d2FpdHN0YXR1cyAqb3Vyc3RhdHVzLAorICAgICAgaW50IG9wdGlvbnMpCit7 CisgIHN0cnVjdCB0aHJlYWRfZGJfaW5mbyAqaW5mbzsKKyAgc3RydWN0IHRo cmVhZF9pbmZvICp0cDsKKyAgdGhyZWFkX2RiX3RocmVhZF9pbmZvICpwcml2 OworCisgIGlmIChsaWJ0aHJlYWRfZGJfZGVidWcpCisgICAgZnByaW50Zl91 bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiVEhSLURCICVzOiB3YWl0aW5nIGZv ciAlc1xuIiwKKyAgICAgIF9fZnVuY19fLAorICAgICAgdGFyZ2V0X3BpZF90 b19zdHIgKHB0aWQpKTsKKworICBwdGlkID0gYmVuZWF0aCAoKS0+d2FpdCAo cHRpZCwgb3Vyc3RhdHVzLCBvcHRpb25zKTsKKworICBzd2l0Y2ggKG91cnN0 YXR1cy0+a2luZCkKKyAgeworICBjYXNlIFRBUkdFVF9XQUlUS0lORF9JR05P UkU6CisgIGNhc2UgVEFSR0VUX1dBSVRLSU5EX0VYSVRFRDoKKyAgY2FzZSBU QVJHRVRfV0FJVEtJTkRfVEhSRUFEX0VYSVRFRDoKKyAgY2FzZSBUQVJHRVRf V0FJVEtJTkRfU0lHTkFMTEVEOgorICAgIHJldHVybiBwdGlkOworICB9CisK KyAgaW5mbyA9IGdldF90aHJlYWRfZGJfaW5mbyAocHRpZC5waWQgKCkpOwor CisgIC8qIElmIHRoaXMgcHJvY2VzcyBpc24ndCB1c2luZyB0aHJlYWRfZGIs IHdlJ3JlIGRvbmUuICAqLworICBpZiAoaW5mbyA9PSBOVUxMKQorICAgIHJl dHVybiBwdGlkOworCisgIGlmIChvdXJzdGF0dXMtPmtpbmQgPT0gVEFSR0VU X1dBSVRLSU5EX0VYRUNEKQorICB7CisgICAgLyogTmV3IGltYWdlLCBpdCBt YXkgb3IgbWF5IG5vdCBlbmQgdXAgdXNpbmcgdGhyZWFkX2RiLiAgQXNzdW1l CisgICAgICAgbm90IHVubGVzcyB3ZSBmaW5kIG90aGVyd2lzZS4gICovCisg ICAgZGVsZXRlX3RocmVhZF9kYl9pbmZvIChwdGlkLnBpZCAoKSk7CisgICAg aWYgKCF0aHJlYWRfZGJfbGlzdCkKKyAgICAgIHVucHVzaF90YXJnZXQgKCZ0 aGVfdGhyZWFkX2RiX3RhcmdldCk7CisKKyAgICByZXR1cm4gcHRpZDsKKyAg fQorCisgIC8qIEZpbGwgaW4gdGhlIHRocmVhZCdzIHVzZXItbGV2ZWwgdGhy ZWFkIGlkIGFuZCBzdGF0dXMuICAqLworICB0cCA9IGZpbmRfdGhyZWFkX3B0 aWQgKHB0aWQpOworICBwcml2ID0gZ2V0X3RocmVhZF9kYl90aHJlYWRfaW5m byAodHApOworICBpZiAodHAgPT0gTlVMTCB8fCBwcml2ID09IE5VTEwpCisg IHsKKyAgICB0cCA9IGF0dGFjaF9sd3AgKHRwLCBwdGlkKTsKKyAgICBpZiAo dHAgPT0gTlVMTCkKKyAgICAgIHJldHVybiBwdGlkOworICB9CisKKyAgcmV0 dXJuIHB0aWQ7Cit9CisKKy8qIEltcGxlbWVudCB0aGUgdG9fdXBkYXRlX3Ro cmVhZF9saXN0IHRhcmdldCBtZXRob2QgZm9yIHRoaXMKKyAgIHRhcmdldC4g ICovCisKK3ZvaWQKK3RocmVhZF9kYl90YXJnZXQ6OnVwZGF0ZV90aHJlYWRf bGlzdCAoKQoreworICBzdHJ1Y3QgdGhyZWFkX2RiX2luZm8gKmluZm87Cisg IHN0cnVjdCBpbmZlcmlvciAqaW5mOworCisgIHBydW5lX3RocmVhZHMgKCk7 CisKKyAgQUxMX0lORkVSSU9SUyAoaW5mKQorICB7CisgICAgc3RydWN0IHRo cmVhZF9pbmZvICp0aHJlYWQ7CisKKyAgICBpZiAoaW5mLT5waWQgPT0gMCkK KyAgICAgIGNvbnRpbnVlOworCisgICAgaW5mbyA9IGdldF90aHJlYWRfZGJf aW5mbyAoaW5mLT5waWQpOworICAgIGlmIChpbmZvID09IE5VTEwpCisgICAg ICBjb250aW51ZTsKKworICAgIHRocmVhZCA9IGFueV9saXZlX3RocmVhZF9v Zl9pbmZlcmlvciAoaW5mKTsKKyAgICBpZiAodGhyZWFkID09IE5VTEwgfHwg dGhyZWFkLT5leGVjdXRpbmcpCisgICAgICBjb250aW51ZTsKKworICAgIC8q IEl0J3MgYmVzdCB0byBhdm9pZCB0ZF90YV90aHJfaXRlciBpZiBwb3NzaWJs ZS4gIFRoYXQgd2Fsa3MKKyAgICAgICBkYXRhIHN0cnVjdHVyZXMgaW4gdGhl IGluZmVyaW9yJ3MgYWRkcmVzcyBzcGFjZSB0aGF0IG1heSBiZQorICAgICAg IGNvcnJ1cHRlZCwgb3IsIGlmIHRoZSB0YXJnZXQgaXMgcnVubmluZywgdGhl IGxpc3QgbWF5IGNoYW5nZQorICAgICAgIHdoaWxlIHdlIHdhbGsgaXQuICBJ biB0aGUgbGF0dGVyIGNhc2UsIGl0J3MgcG9zc2libGUgdGhhdCBhCisgICAg ICAgdGhyZWFkIGV4aXRzIGp1c3QgYXQgdGhlIGV4YWN0IHRpbWUgdGhhdCBj YXVzZXMgR0RCIHRvIGdldAorICAgICAgIHN0dWNrIGluIGFuIGluZmluaXRl IGxvb3AuICBUbyBhdm9pZCBwYXVzaW5nIGFsbCB0aHJlYWRzCisgICAgICAg d2hlbmV2ZXIgdGhlIGNvcmUgd2FudHMgdG8gcmVmcmVzaCB0aGUgdGhyZWFk IGxpc3QsIHdlCisgICAgICAgaW5zdGVhZCB1c2UgdGhyZWFkX2Zyb21fbHdw IGltbWVkaWF0ZWx5IHdoZW4gd2Ugc2VlIGFuIExXUAorICAgICAgIHN0b3Au ICBUaGF0IHVzZXMgdGhyZWFkX2RiIGVudHJ5IHBvaW50cyB0aGF0IGRvIG5v dCB3YWxrCisgICAgICAgbGlicHRocmVhZCdzIHRocmVhZCBsaXN0LCBzbyBz aG91bGQgYmUgc2FmZSwgYXMgd2VsbCBhcyBtb3JlCisgICAgICAgZWZmaWNp ZW50LiAgKi8KKyAgICBpZiAodGFyZ2V0X2hhc19leGVjdXRpb25fMSAodGhy ZWFkLT5wdGlkKSkKKyAgICAgIGNvbnRpbnVlOworCisgICAgdGhyZWFkX2Ri X2ZpbmRfbmV3X3RocmVhZHNfMSAodGhyZWFkKTsKKyAgfQorCisgIC8qIEdp dmUgdGhlIGJlbmVhdGggdGFyZ2V0IGEgY2hhbmNlIHRvIGRvIGV4dHJhIHBy b2Nlc3NpbmcuICAqLworICB0aGlzLT5iZW5lYXRoICgpLT51cGRhdGVfdGhy ZWFkX2xpc3QgKCk7Cit9CisKK2NvbnN0IGNoYXIgKgordGhyZWFkX2RiX3Rh cmdldDo6cGlkX3RvX3N0ciAocHRpZF90IHB0aWQpCit7CisgIHN0cnVjdCB0 aHJlYWRfaW5mbyAqdGhyZWFkX2luZm8gPSBmaW5kX3RocmVhZF9wdGlkIChw dGlkKTsKKworICBpZiAodGhyZWFkX2luZm8gIT0gTlVMTCkKKyAgeworICAg IHRocmVhZF9kYl90aHJlYWRfaW5mbyAqcHJpdiA9IGdldF90aHJlYWRfZGJf dGhyZWFkX2luZm8gKHRocmVhZF9pbmZvKTsKKyAgICBpZiAocHJpdiAhPSBO VUxMKSB7CisgICAgICBzdGF0aWMgY2hhciBidWZbNjRdOworCisgICAgICBz bnByaW50ZiAoYnVmLCBzaXplb2YgKGJ1ZiksICJUaHJlYWQgKHRpZCAlbGQp IChMV1AgJWxkKSIsCisgICAgICAodW5zaWduZWQgbG9uZykgcHJpdi0+dGlk LCBwdGlkLmx3cCAoKSk7CisKKyAgICAgIHJldHVybiBidWY7CisgICAgfQor ICB9CisgIHJldHVybiBiZW5lYXRoICgpLT5waWRfdG9fc3RyIChwdGlkKTsK K30KKworY29uc3QgY2hhciAqCit0aHJlYWRfZGJfdGFyZ2V0OjpleHRyYV90 aHJlYWRfaW5mbyAoc3RydWN0IHRocmVhZF9pbmZvICppbmZvKQoreworICB0 aHJlYWRfZGJfdGhyZWFkX2luZm8gKnByaXYgPSBnZXRfdGhyZWFkX2RiX3Ro cmVhZF9pbmZvIChpbmZvKTsKKyAgaWYgKHByaXYgPT0gTlVMTCkKKyAgICBy ZXR1cm4gTlVMTDsKKworICBpZiAocHJpdi0+ZHlpbmcpCisgICAgcmV0dXJu ICJFeGl0aW5nIjsKKworICByZXR1cm4gTlVMTDsKK30KKworLyogUmV0dXJu IHBvaW50ZXIgdG8gdGhlIHRocmVhZF9pbmZvIHN0cnVjdCB3aGljaCBjb3Jy ZXNwb25kcyB0bworICAgVEhSRUFEX0hBTkRMRSAoaGF2aW5nIGxlbmd0aCBI QU5ETEVfTEVOKS4gICovCisKK3RocmVhZF9pbmZvICoKK3RocmVhZF9kYl90 YXJnZXQ6OnRocmVhZF9oYW5kbGVfdG9fdGhyZWFkX2luZm8gKGNvbnN0IGdk Yl9ieXRlICp0aHJlYWRfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICBp bnQgaGFuZGxlX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgaW5mZXJpb3Ig KmluZikKK3sKKyAgc3RydWN0IHRocmVhZF9pbmZvICp0cDsKKyAgdGhyZWFk X3QgaGFuZGxlX3RpZDsKKworICAvKiBUaHJlYWQgaGFuZGxlIHNpemVzIG11 c3QgbWF0Y2ggaW4gb3JkZXIgdG8gcHJvY2VlZC4gIFdlIGRvbid0IHVzZSBh bgorICAgICBhc3NlcnQgaGVyZSBiZWNhdXNlIHRoZSByZXN1bHRpbmcgaW50 ZXJuYWwgZXJyb3Igd2lsbCBjYXVzZSBHREIgdG8KKyAgICAgZXhpdC4gIFRo aXMgaXNuJ3QgbmVjZXNzYXJpbHkgYW4gaW50ZXJuYWwgZXJyb3IgZHVlIHRv IHRoZSBwb3NzaWJpbGl0eQorICAgICBvZiBnYXJiYWdlIGJlaW5nIHBhc3Nl ZCBhcyB0aGUgdGhyZWFkIGhhbmRsZSB2aWEgdGhlIHB5dGhvbiBpbnRlcmZh Y2UuICAqLworICBpZiAoaGFuZGxlX2xlbiAhPSBzaXplb2YgKGhhbmRsZV90 aWQpKQorICAgIGVycm9yIChfKCJUaHJlYWQgaGFuZGxlIHNpemUgbWlzbWF0 Y2g6ICVkIHZzICV6dSAoZnJvbSBsaWJ0aHJlYWRfZGIpIiksCisgICAgIGhh bmRsZV9sZW4sIHNpemVvZiAoaGFuZGxlX3RpZCkpOworCisgIGhhbmRsZV90 aWQgPSAqIChjb25zdCB0aHJlYWRfdCAqKSB0aHJlYWRfaGFuZGxlOworCisg IEFMTF9OT05fRVhJVEVEX1RIUkVBRFMgKHRwKQorICB7CisgICAgdGhyZWFk X2RiX3RocmVhZF9pbmZvICpwcml2ID0gZ2V0X3RocmVhZF9kYl90aHJlYWRf aW5mbyAodHApOworCisgICAgaWYgKHRwLT5pbmYgPT0gaW5mICYmIHByaXYg IT0gTlVMTCAmJiBoYW5kbGVfdGlkID09IHByaXYtPnRpZCkKKyAgICAgIHJl dHVybiB0cDsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitDT1JFX0FE RFIKK3RocmVhZF9kYl90YXJnZXQ6OmdldF90aHJlYWRfbG9jYWxfYWRkcmVz cyAocHRpZF90IHB0aWQsCisgICAgICAgICAgICAgICAgICBDT1JFX0FERFIg bGlua21hcCwKKyAgICAgICAgICAgICAgICAgIENPUkVfQUREUiBvZmZzZXQp Cit7CisgIHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkX2luZm87CisgIHRo cmVhZF9kYl90aHJlYWRfaW5mbyAqcHJpdjsKKyAgaW50IHBpZCA9IHB0aWQu cGlkKCk7CisKKyAgLyogRmluZCB0aGUgbWF0Y2hpbmcgdGhyZWFkLiAgKi8K KyAgdGhyZWFkX2luZm8gPSBmaW5kX3RocmVhZF9wdGlkIChwdGlkKTsKKwor ICAvKiBJZiB3ZSBoYXZlIG5vdCBkaXNjb3ZlcmVkIGFueSB0aHJlYWRzIHll dCwgY2hlY2sgbm93LiAgKi8KKyAgaWYgKGl0ZXJhdGVfb3Zlcl90aHJlYWRz IChoYXZlX3RocmVhZHNfY2FsbGJhY2ssICZwaWQpID09IE5VTEwpCisgICAg dGhyZWFkX2RiX2ZpbmRfbmV3X3RocmVhZHNfMSAodGhyZWFkX2luZm8pOwor CisgIC8qIFdlIG1heSBub3QgaGF2ZSBkaXNjb3ZlcmVkIHRoZSB0aHJlYWQg eWV0LiAgKi8KKyAgaWYgKHRocmVhZF9pbmZvICE9IE5VTEwgJiYgdGhyZWFk X2luZm8tPnByaXYgPT0gTlVMTCkKKyAgICB0aHJlYWRfaW5mbyA9IHRoZV90 aHJlYWRfZGJfdGFyZ2V0LmF0dGFjaF9sd3AgKHRocmVhZF9pbmZvLCBwdGlk KTsKKworICBpZiAodGhyZWFkX2luZm8hPSBOVUxMICYmIHRocmVhZF9pbmZv LT5wcml2ICE9IE5VTEwpCisgIHsKKyAgICAgIHRkX2Vycl9lIGVycjsKKyAg ICAgIHBzYWRkcl90IGFkZHJlc3M7CisgICAgICB0aHJlYWRfZGJfaW5mbyAq aW5mbyA9IGdldF90aHJlYWRfZGJfaW5mbyAocHRpZC5waWQgKCkpOworICAg ICAgcHJpdiA9IGdldF90aHJlYWRfZGJfdGhyZWFkX2luZm8gKHRocmVhZF9p bmZvKTsKKworICAgICAgaWYgKGxpbmttYXAgPT0gMHgwKQorICAgICAgewor ICAgICAgICAvKiBUaGlzIGNvZGUgcGF0aCBoYW5kbGVzIHRoZSBjYXNlIG9m IC1zdGF0aWMgLWxwdGhyZWFkIGV4ZWN1dGFibGVzOiAqLworICAgICAgICB0 aHJvd19lcnJvciAoVExTX0dFTkVSSUNfRVJST1IsCisgICAgICAgICAgICAg ICAgICAgICgoIkZhaWxlZCB0byBoYW5kbGUgLXN0YXRpYyAtbHB0aHJlYWQg ZXhlY3V0YWJsZSIpKSk7CisgICAgICAgIC8vIEJlbG93IGRvZXMgbm90IHNl ZW0gdG8gd29yaworICAgICAgICAvL2FkZHJlc3MgPSBwcml2LT50bHMgKyBv ZmZzZXQ7CisgICAgICB9CisKKyAgICAgIC8qIGdsaWJjIGRvZXNuJ3QgcHJv dmlkZSB0aGUgbmVlZGVkIGludGVyZmFjZS4gICovCisgICAgICBpZiAoIWlu Zm8tPnRkX3Rocl90bHNfZ2V0X2FkZHJfcCkKKyAgICAgICAgdGhyb3dfZXJy b3IgKFRMU19OT19MSUJSQVJZX1NVUFBPUlRfRVJST1IsCisgICAgICAgIF8o Ik5vIFRMUyBsaWJyYXJ5IHN1cHBvcnQiKSk7CisKKyAgICAgIC8qIE5vdGUg dGhlIGNhc3QgdGhyb3VnaCB1aW50cHRyX3Q6IHRoaXMgaW50ZXJmYWNlIG9u bHkgd29ya3MgaWYKKyAgICAgICBhIHRhcmdldCBhZGRyZXNzIGZpdHMgaW4g YSBwc2FkZHJfdCwgd2hpY2ggaXMgYSBob3N0IHBvaW50ZXIuCisgICAgICAg U28gYSAzMi1iaXQgZGVidWdnZXIgY2FuIG5vdCBhY2Nlc3MgNjQtYml0IFRM UyB0aHJvdWdoIHRoaXMuICAqLworICAgICAgZXJyID0gaW5mby0+dGRfdGhy X3Rsc19nZXRfYWRkcl9wICgmcHJpdi0+dGgsCisgICAgICAgICAgICAgICAo cHNhZGRyX3QpKHVpbnRwdHJfdCkgbGlua21hcCwKKyAgICAgICAgICAgICAg IG9mZnNldCwgJmFkZHJlc3MpOworCisjaWZkZWYgVEhSRUFEX0RCX0hBU19U RF9OT1RBTExPQworICAgICAgLyogVGhlIG1lbW9yeSBoYXNuJ3QgYmVlbiBh bGxvY2F0ZWQsIHlldC4gICovCisgICAgICBpZiAoZXJyID09IFREX05PVEFM TE9DKQorICAgICAgLyogTm93LCBpZiBsaWJ0aHJlYWRfZGIgcHJvdmlkZWQg dGhlIGluaXRpYWxpemF0aW9uIGltYWdlJ3MKKyAgICAgICAgIGFkZHJlc3Ms IHdlICpjb3VsZCogdHJ5IHRvIGJ1aWxkIGEgbm9uLWx2YWx1ZSB2YWx1ZSBm cm9tCisgICAgICAgICB0aGUgaW5pdGlhbGl6YXRpb24gaW1hZ2UuICAqLwor ICAgICAgICB0aHJvd19lcnJvciAoVExTX05PVF9BTExPQ0FURURfWUVUX0VS Uk9SLAorICAgICAgICAgICAgICAgICAgICAgXygiVExTIG5vdCBhbGxvY2F0 ZWQgeWV0IikpOworI2VuZGlmCisgICAgICAvKiBTb21ldGhpbmcgZWxzZSB3 ZW50IHdyb25nLiAgKi8KKyAgICAgIGlmIChlcnIgIT0gVERfT0spCisgICAg ICAgIHRocm93X2Vycm9yIChUTFNfR0VORVJJQ19FUlJPUiwKKyAgICAgICAg ICAgICAgICAgICAoKCIlcyIpKSwgdGhyZWFkX2RiX2Vycl9zdHIgKGVycikp OworCisgICAgICAvKiBDYXN0IGFzc3VtaW5nIGhvc3QgPT0gdGFyZ2V0LiAg Sm95LiAgKi8KKyAgICAgIC8qIERvIHByb3BlciBzaWduIGV4dGVuc2lvbiBm b3IgdGhlIHRhcmdldC4gICovCisgICAgICBnZGJfYXNzZXJ0IChleGVjX2Jm ZCk7CisgICAgICByZXR1cm4gKGJmZF9nZXRfc2lnbl9leHRlbmRfdm1hIChl eGVjX2JmZCkgPiAwCisgICAgICAgID8gKENPUkVfQUREUikgKGludHB0cl90 KSBhZGRyZXNzCisgICAgICAgIDogKENPUkVfQUREUikgKHVpbnRwdHJfdCkg YWRkcmVzcyk7CisgIH0KKyAgcmV0dXJuIGJlbmVhdGggKCktPmdldF90aHJl YWRfbG9jYWxfYWRkcmVzcyAocHRpZCwgbGlua21hcCwgb2Zmc2V0KTsKK30K KworLyogSW1wbGVtZW50IHRoZSB0b19nZXRfYWRhX3Rhc2tfcHRpZCB0YXJn ZXQgbWV0aG9kIGZvciB0aGlzIHRhcmdldC4gICovCisKK3B0aWRfdAordGhy ZWFkX2RiX3RhcmdldDo6Z2V0X2FkYV90YXNrX3B0aWQgKGxvbmcgbHdwLCBs b25nIHRocmVhZCkKK3sKKyAgcmV0dXJuIHB0aWRfdCAoaW5mZXJpb3JfcHRp ZC5waWQgKCksIGx3cCwgMCk7Cit9CisKKwordm9pZAordGhyZWFkX2RiX3Rh cmdldDo6cmVzdW1lIChwdGlkX3QgcHRpZCwgaW50IHN0ZXAsIGVudW0gZ2Ri X3NpZ25hbCBzaWdubykKK3sKKyAgc3RydWN0IHRocmVhZF9kYl9pbmZvICpp bmZvOworCisgIGlmIChwdGlkID09IG1pbnVzX29uZV9wdGlkKQorICAgIGlu Zm8gPSBnZXRfdGhyZWFkX2RiX2luZm8gKGluZmVyaW9yX3B0aWQucGlkICgp KTsKKyAgZWxzZQorICAgIGluZm8gPSBnZXRfdGhyZWFkX2RiX2luZm8gKHB0 aWQucGlkICgpKTsKKworICAvKiBUaGlzIHdvcmthcm91bmQgaXMgb25seSBu ZWVkZWQgZm9yIGNoaWxkIGZvcmsgbHdwcyBzdG9wcGVkIGluIGEKKyAgICAg UFRSQUNFX09fVFJBQ0VGT1JLIGV2ZW50LiAgV2hlbiB0aGUgaW5mZXJpb3Ig aXMgcmVzdW1lZCwgdGhlCisgICAgIHdvcmthcm91bmQgY2FuIGJlIGRpc2Fi bGVkLiAgKi8KKyAgaWYgKGluZm8pCisgICAgaW5mby0+bmVlZF9zdGFsZV9w YXJlbnRfdGhyZWFkc19jaGVjayA9IDA7CisKKyAgYmVuZWF0aCAoKS0+cmVz dW1lIChwdGlkLCBzdGVwLCBzaWdubyk7Cit9CisKK3B0aWRfdAordGhyZWFk X2RiX3RhcmdldDo6Z2V0X2V2ZW50X3B0aWQgKGludCBwaWQpCit7CisgIHN0 cnVjdCBwdHJhY2VfbHdwaW5mbyBwbDsKKyAgbHdwaWRfdCBsd3BpZCA9IDA7 CisKKyAgaWYgKHRhcmdldF9oYXNfZXhlY3V0aW9uKQorICB7CisgICAgaWYg KHB0cmFjZSAoUFRfTFdQSU5GTywgcGlkLCAoY2FkZHJfdCkgJnBsLCBzaXpl b2YgKHBsKSkpCisgICAgICBwZXJyb3Jfd2l0aF9uYW1lICgiUFRfTFdQSU5G TyIpOworCisgICAgcmV0dXJuIHB0aWRfdCAocGlkLCAobG9uZykgcGwucGxf bHdwaWQsIDApOworICB9CisgIGVsc2UKKyAgeworICAgIGJmZF9tYXBfb3Zl cl9zZWN0aW9ucyAoY29yZV9iZmQsIGNvcmVfZ2V0X2ZpcnN0X2x3cF9jYWxs YmFjaywgJmx3cGlkKTsKKyAgICByZXR1cm4gcHRpZF90IChwaWQsIGx3cGlk LCAwKTsKKyAgfQorfQorCisvKiBIZWxwZXIgZm9yIHRocmVhZF9kYl9maW5k X25ld190aHJlYWRzXzIuCisgICBSZXR1cm5zIG51bWJlciBvZiBuZXcgdGhy ZWFkcyBmb3VuZC4gICovCisKK3N0YXRpYyBpbnQKK2ZpbmRfbmV3X3RocmVh ZHNfb25jZSAoc3RydWN0IHRocmVhZF9kYl9pbmZvICppbmZvLCBpbnQgaXRl cmF0aW9uLAorICAgICAgICAgICB0ZF9lcnJfZSAqZXJycCkKK3sKKyAgc3Ry dWN0IGNhbGxiYWNrX2RhdGEgZGF0YTsKKyAgdGRfZXJyX2UgZXJyID0gVERf RVJSOworCisgIGRhdGEuaW5mbyA9IGluZm87CisgIGRhdGEubmV3X3RocmVh ZHMgPSAwOworCisgIC8qIFNlZSBjb21tZW50IGluIHRocmVhZF9kYl91cGRh dGVfdGhyZWFkX2xpc3QuICAqLworICBnZGJfYXNzZXJ0IChpbmZvLT50ZF90 YV90aHJfaXRlcl9wICE9IE5VTEwpOworCisgIFRSWQorICB7CisgICAgLyog SXRlcmF0ZSBvdmVyIGFsbCB1c2VyLXNwYWNlIHRocmVhZHMgdG8gZGlzY292 ZXIgbmV3IHRocmVhZHMuICAqLworICAgIGVyciA9IGluZm8tPnRkX3RhX3Ro cl9pdGVyX3AgKGluZm8tPnRocmVhZF9hZ2VudCwKKyAgICAgICAgICBmaW5k X25ld190aHJlYWRzX2NhbGxiYWNrLAorICAgICAgICAgICZkYXRhLAorICAg ICAgICAgIFREX1RIUl9BTllfU1RBVEUsCisgICAgICAgICAgVERfVEhSX0xP V0VTVF9QUklPUklUWSwKKyAgICAgICAgICBURF9TSUdOT19NQVNLLAorICAg ICAgICAgIFREX1RIUl9BTllfVVNFUl9GTEFHUyk7CisgIH0KKyAgQ0FUQ0gg KGV4Y2VwdCwgUkVUVVJOX01BU0tfRVJST1IpCisgIHsKKyAgICBpZiAobGli dGhyZWFkX2RiX2RlYnVnKQorICAgIHsKKyAgICAgIGV4Y2VwdGlvbl9mcHJp bnRmIChnZGJfc3RkbG9nLCBleGNlcHQsCisgICAgICAgIldhcm5pbmc6ICVz OiB0ZF90YV90aHJfaXRlciBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKyAgICB9 CisgIH0KKyAgRU5EX0NBVENICisgIGlmIChsaWJ0aHJlYWRfZGJfZGVidWcp CisgIHsKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisg ICAgICBfKCJUSFItREIgJXM6IEZvdW5kICVkIG5ldyB0aHJlYWRzIGluIGl0 ZXJhdGlvbiAlZFxuIiksCisgICAgICAgIF9fZnVuY19fLCBkYXRhLm5ld190 aHJlYWRzLCBpdGVyYXRpb24pOworICB9CisKKyAgaWYgKGVycnAgIT0gTlVM TCkKKyAgICAqZXJycCA9IGVycjsKKworICByZXR1cm4gZGF0YS5uZXdfdGhy ZWFkczsKK30KKworCisvKiBTZWFyY2ggZm9yIG5ldyB0aHJlYWRzLCBhY2Nl c3NpbmcgbWVtb3J5IHRocm91Z2ggc3RvcHBlZCB0aHJlYWQKKyAgIFBUSUQu ICBJZiBVTlRJTF9OT19ORVcgaXMgdHJ1ZSwgcmVwZWF0IHNlYXJjaGluZyB1 bnRpbCBzZXZlcmFsCisgICBzZWFyY2hlcyBpbiBhIHJvdyBkbyBub3QgZGlz Y292ZXIgYW55IG5ldyB0aHJlYWRzLiAgKi8KKworc3RhdGljIHZvaWQKK3Ro cmVhZF9kYl9maW5kX25ld190aHJlYWRzXzIgKHRocmVhZF9pbmZvICpzdG9w cGVkLCBib29sIHVudGlsX25vX25ldykKK3sKKyAgdGRfZXJyX2UgZXJyID0g VERfT0s7CisgIHN0cnVjdCB0aHJlYWRfZGJfaW5mbyAqaW5mbzsKKyAgaW50 IGksIGxvb3AsIG51bV90aHJlYWRzID0gMDsKKworICBpbmZvID0gZ2V0X3Ro cmVhZF9kYl9pbmZvIChzdG9wcGVkLT5wdGlkLnBpZCAoKSk7CisKKyAgLyog QWNjZXNzIGFuIGx3cCB3ZSBrbm93IGlzIHN0b3BwZWQuICAqLworICBpbmZv LT5wcm9jX2hhbmRsZS50aHJlYWQgPSBzdG9wcGVkOworCisgIGlmICh1bnRp bF9ub19uZXcpCisgIHsKKyAgICAvKiBSZXF1aXJlIDQgc3VjY2Vzc2l2ZSBp dGVyYXRpb25zIHdoaWNoIGRvIG5vdCBmaW5kIGFueSBuZXcgdGhyZWFkcy4K KyAgICAgICBUaGUgNCBpcyBhIGhldXJpc3RpYzogdGhlcmUgaXMgYW4gaW5o ZXJlbnQgcmFjZSBoZXJlLCBhbmQgSSBoYXZlCisgICAgICAgc2VlbiB0aGF0 IDIgaXRlcmF0aW9ucyBpbiBhIHJvdyBhcmUgbm90IGFsd2F5cyBzdWZmaWNp ZW50IHRvCisgICAgICAgImNhcHR1cmUiIGFsbCB0aHJlYWRzLiAgKi8KKyAg ICBmb3IgKGkgPSAwLCBsb29wID0gMDsgbG9vcCA8IDQgJiYgZXJyID09IFRE X09LOyArK2ksICsrbG9vcCkgeworICAgICAgbnVtX3RocmVhZHMgPSBmaW5k X25ld190aHJlYWRzX29uY2UgKGluZm8sIGksICZlcnIpOworICAgICAgaWYg KG51bV90aHJlYWRzICE9IDApCisgICAgICB7CisgICAgICAgIC8qIEZvdW5k IHNvbWUgbmV3IHRocmVhZHMuICBSZXN0YXJ0IHRoZSBsb29wIGZyb20gYmVn aW5uaW5nLiAgKi8KKyAgICAgICAgbG9vcCA9IC0xOworICAgICAgfQorICAg IH0KKyAgfQorICBlbHNlCisgICAgbnVtX3RocmVhZHMgPSBmaW5kX25ld190 aHJlYWRzX29uY2UgKGluZm8sIDAsICZlcnIpOworCisgIGlmIChlcnIgIT0g VERfT0spCisgICAgZXJyb3IgKF8oIkNhbm5vdCBmaW5kIG5ldyB0aHJlYWRz OiAlcyIpLCB0aHJlYWRfZGJfZXJyX3N0ciAoZXJyKSk7CisKKyAgaWYgKGlu aXRfdGhyZWFkcyA9PSAwICYmIG51bV90aHJlYWRzID4gMCkgaW5pdF90aHJl YWRzID0gbnVtX3RocmVhZHM7Cit9CisKK3N0YXRpYyB2b2lkCit0aHJlYWRf ZGJfZmluZF9uZXdfdGhyZWFkc18xICh0aHJlYWRfaW5mbyAqc3RvcHBlZCkK K3sKKyAgdGhyZWFkX2RiX2ZpbmRfbmV3X3RocmVhZHNfMiAoc3RvcHBlZCwg ZmFsc2UpOworfQorCisvKiBTYW1lIGFzIHRocmVhZF9kYl9maW5kX25ld190 aHJlYWRzXzEsIGJ1dCBzaWxlbnRseSBpZ25vcmUgZXJyb3JzLiAgKi8KKwor c3RhdGljIGludAordGhyZWFkX2RiX2ZpbmRfbmV3X3RocmVhZHNfc2lsZW50 bHkgKHRocmVhZF9pbmZvICpzdG9wcGVkKQoreworICBUUlkKKyAgeworICAg IHRocmVhZF9kYl9maW5kX25ld190aHJlYWRzXzIgKHN0b3BwZWQsIHRydWUp OworICB9CisgIENBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0VSUk9SKQor ICB7CisgICAgaWYgKGxpYnRocmVhZF9kYl9kZWJ1ZykKKyAgICAgIGV4Y2Vw dGlvbl9mcHJpbnRmIChnZGJfc3RkbG9nLCBleGNlcHQsCisgICAgICAgIldh cm5pbmc6ICVzOiAiLCBfX2Z1bmNfXyk7CisgICAgcmV0dXJuIDE7CisgIH0K KyAgRU5EX0NBVENICisgIHJldHVybiAwOworfQorCisvKiBBdHRlbXB0IHRv IGluaXRpYWxpemUgZGxvcGVuKCllZCBsaWJ0aHJlYWRfZGIsIGRlc2NyaWJl ZCBieSBJTkZPLgorICAgUmV0dXJuIDEgb24gc3VjY2Vzcy4KKyAgIEZhaWx1 cmUgY291bGQgaGFwcGVuIGlmIGxpYnRocmVhZF9kYiBkb2VzIG5vdCBoYXZl IHN5bWJvbHMgd2UgZXhwZWN0LAorICAgb3Igd2hlbiBpdCByZWZ1c2VzIHRv IHdvcmsgd2l0aCB0aGUgY3VycmVudCBpbmZlcmlvciAoZS5nLiBkdWUgdG8K KyAgIHZlcnNpb24gbWlzbWF0Y2ggYmV0d2VlbiBsaWJ0aHJlYWRfZGIgYW5k IGxpYnB0aHJlYWQpLiAgKi8KKworc3RhdGljIGludAordHJ5X3RocmVhZF9k Yl9sb2FkXzEgKHN0cnVjdCB0aHJlYWRfZGJfaW5mbyAqaW5mbykKK3sKKyAg dGRfZXJyX2UgZXJyOworCisjZGVmaW5lIFREQl9WRVJCT1NFX0RMU1lNKGlu Zm8sIGZ1bmMpICAgICBcCisgIGluZm8tPmZ1bmMgIyMgX3AgPSAoZnVuYyAj IyBfZnR5cGUgKikgdmVyYm9zZV9kbHN5bSAoaW5mby0+aGFuZGxlLCAjZnVu YykKKworI2RlZmluZSBDSEsoYSkgICAgICAgXAorICBkbyAgICAgICAgICAg ICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoYSkg PT0gTlVMTCkgXAorICAgICAgcmV0dXJuIDA7ICAgICAgXAorICB9IHdoaWxl ICgwKQorCisgIC8qIEluaXRpYWxpemUgcG9pbnRlcnMgdG8gdGhlIGR5bmFt aWMgbGlicmFyeSBmdW5jdGlvbnMgd2Ugd2lsbCB1c2UuCisgICAgIEVzc2Vu dGlhbCBmdW5jdGlvbnMgZmlyc3QuICAqLworICBDSEsgKFREQl9WRVJCT1NF X0RMU1lNIChpbmZvLCB0ZF9pbml0KSk7CisKKyAgZXJyID0gaW5mby0+dGRf aW5pdF9wICgpOworICBpZiAoZXJyICE9IFREX09LKQorICB7CisgICAgd2Fy bmluZyAoXygiQ2Fubm90IGluaXRpYWxpemUgbGlidGhyZWFkX2RiOiAlcyIp LAorICAgICAgdGhyZWFkX2RiX2Vycl9zdHIgKGVycikpOworICAgIHJldHVy biAwOworICB9CisKKyAgQ0hLIChUREJfVkVSQk9TRV9ETFNZTSAoaW5mbywg dGRfdGFfbmV3KSk7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJl IHRoYXQgaWRlbnRpZmllcyB0aGUgY2hpbGQgcHJvY2Vzcy4gICovCisgIGlu Zm8tPnByb2NfaGFuZGxlLnRocmVhZCA9IGZpbmRfdGhyZWFkX3B0aWQgKGlu ZmVyaW9yX3B0aWQpOworCisgIC8qIE5vdyBhdHRlbXB0IHRvIG9wZW4gYSBj b25uZWN0aW9uIHRvIHRoZSB0aHJlYWQgbGlicmFyeS4gICovCisgIGVyciA9 IGluZm8tPnRkX3RhX25ld19wICgmaW5mby0+cHJvY19oYW5kbGUsICZpbmZv LT50aHJlYWRfYWdlbnQpOworICBpZiAoZXJyICE9IFREX09LKQorICB7Cisg ICAgaWYgKGxpYnRocmVhZF9kYl9kZWJ1ZykKKyAgICAgIGZwcmludGZfdW5m aWx0ZXJlZCAoZ2RiX3N0ZGxvZywgXygidGRfdGFfbmV3IGZhaWxlZDogJXNc biIpLAorICAgICAgICB0aHJlYWRfZGJfZXJyX3N0ciAoZXJyKSk7CisgICAg ZWxzZQorICAgICAgc3dpdGNoIChlcnIpCisgICAgICB7CisgICAgICAgIGNh c2UgVERfTk9MSUJUSFJFQUQ6CisjaWZkZWYgVEhSRUFEX0RCX0hBU19URF9W RVJTSU9OCisgICAgICAgIGNhc2UgVERfVkVSU0lPTjoKKyNlbmRpZgorICAg ICAgICAvKiBUaGUgZXJyb3JzIGFib3ZlIGFyZSBub3QgdW5leHBlY3RlZCBh bmQgc2lsZW50bHkgaWdub3JlZDoKKyAgICAgICAgICAgdGhleSBqdXN0IG1l YW4gd2UgaGF2ZW4ndCBmb3VuZCBjb3JyZWN0IHZlcnNpb24gb2YKKyAgICAg ICAgICAgbGlidGhyZWFkX2RiIHlldC4gICovCisgICAgICAgIGJyZWFrOwor ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHdhcm5pbmcgKF8oInRkX3Rh X25ldyBmYWlsZWQ6ICVzIiksIHRocmVhZF9kYl9lcnJfc3RyIChlcnIpKTsK KyAgICAgIH0KKyAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIFRoZXNlIGFy ZSBlc3NlbnRpYWwuICAqLworICBDSEsgKFREQl9WRVJCT1NFX0RMU1lNIChp bmZvLCB0ZF90YV9tYXBfbHdwMnRocikpOworICBDSEsgKFREQl9WRVJCT1NF X0RMU1lNIChpbmZvLCB0ZF90YV90aHJfaXRlcikpOworICBDSEsgKFREQl9W RVJCT1NFX0RMU1lNIChpbmZvLCB0ZF90aHJfZ2V0X2luZm8pKTsKKyAgQ0hL IChUREJfVkVSQk9TRV9ETFNZTSAoaW5mbywgdGRfdGhyX3Rsc19nZXRfYWRk cikpOworCisgIHByaW50Zl91bmZpbHRlcmVkIChfKCJbVGhyZWFkIGRlYnVn Z2luZyB1c2luZyBsaWJ0aHJlYWRfZGIgZW5hYmxlZF1cbiIpKTsKKworICAg LyogVGhlIHRocmVhZCBsaWJyYXJ5IHdhcyBkZXRlY3RlZC4gIEFjdGl2YXRl IHRoZSB0aHJlYWRfZGIgdGFyZ2V0CisgICAgIGlmIHRoaXMgaXMgdGhlIGZp cnN0IHByb2Nlc3MgdXNpbmcgaXQuICAqLworICBpZiAodGhyZWFkX2RiX2xp c3QtPm5leHQgPT0gTlVMTCkKKyAgICBwdXNoX3RhcmdldCAoJnRoZV90aHJl YWRfZGJfdGFyZ2V0KTsKKworICBwdGlkX3Qgc2F2ZV9wdGlkID0gaW5mZXJp b3JfcHRpZDsKKyAgaW5mZXJpb3JfcHRpZCA9IHRoZV90aHJlYWRfZGJfdGFy Z2V0LmdldF9ldmVudF9wdGlkIChpbmZlcmlvcl9wdGlkLnBpZCgpKTsKKyAg dGhyZWFkX2NoYW5nZV9wdGlkKHNhdmVfcHRpZCwgaW5mZXJpb3JfcHRpZCk7 CisKKyAgLyogVGhlcmUgYXBwZWFycyB0byBiZSBhIGJ1ZyBpbiBnbGliYy0y LjMuNjogY2FsbHMgdG8gdGRfdGhyX2dldF9pbmZvIGZhaWwKKyAgICAgd2l0 aCBURF9FUlIgZm9yIHN0YXRpY2FsbHkgbGlua2VkIGV4ZWN1dGFibGVzIGlm IHRkX3Rocl9nZXRfaW5mbyBpcworICAgICBjYWxsZWQgYmVmb3JlIGdsaWJj IGhhcyBpbml0aWFsaXplZCBpdHNlbGYuICBTaWxlbnRseSBpZ25vcmUgc3Vj aAorICAgICBlcnJvcnMsIGFuZCBsZXQgZ2RiIGVudW1lcmF0ZSB0aHJlYWRz IGFnYWluIGxhdGVyLiAgKi8KKyAgdGhyZWFkX2RiX2ZpbmRfbmV3X3RocmVh ZHNfc2lsZW50bHkgKGluZmVyaW9yX3RocmVhZCAoKSk7CisKKyAgcmV0dXJu IDE7Cit9CisKKy8qIEF0dGVtcHQgdG8gdXNlIExJQlJBUlkgYXMgbGlidGhy ZWFkX2RiLiAgTElCUkFSWSBjb3VsZCBiZSBhYnNvbHV0ZSwKKyAgIHJlbGF0 aXZlLCBvciBqdXN0IExJQlRIUkVBRF9EQi4gICovCisKK3N0YXRpYyBpbnQK K3RyeV90aHJlYWRfZGJfbG9hZCAoY2hhciAqbGlicmFyeSkKK3sKKyAgdm9p ZCAqaGFuZGxlOworICBzdHJ1Y3QgdGhyZWFkX2RiX2luZm8gKmluZm87CisK KyAgaWYgKGxpYnRocmVhZF9kYl9kZWJ1ZykKKyAgICBmcHJpbnRmX3VuZmls dGVyZWQgKGdkYl9zdGRsb2csCisgICAgICBfKCJUcnlpbmcgaG9zdCBsaWJ0 aHJlYWRfZGIgbGlicmFyeTogJXNcbiIpLAorICAgICAgbGlicmFyeSk7CisK KyAgaWYgKGFjY2VzcyAobGlicmFyeSwgUl9PSykgIT0gMCkKKyAgeworICAg IC8qIERvIG5vdCBwcmludCB3YXJuaW5ncyBieSBmaWxlX2lzX2F1dG9fbG9h ZF9zYWZlIGlmIHRoZSBsaWJyYXJ5IGRvZXMKKyAgICAgbm90IGV4aXN0IGF0 IHRoaXMgcGxhY2UuICAqLworICBpZiAobGlidGhyZWFkX2RiX2RlYnVnKQor ICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgXygib3BlbiBm YWlsZWQ6ICVzLlxuIiksCisgICAgc2FmZV9zdHJlcnJvciAoZXJybm8pKTsK KyAgcmV0dXJuIDA7CisgIH0KKyAgaGFuZGxlID0gZGxvcGVuIChsaWJyYXJ5 LCBSVExEX05PVyk7CisgIGlmIChoYW5kbGUgPT0gTlVMTCkKKyAgeworICAg IGlmIChsaWJ0aHJlYWRfZGJfZGVidWcpCisgICAgICBmcHJpbnRmX3VuZmls dGVyZWQgKGdkYl9zdGRsb2csIF8oImRsb3BlbiBmYWlsZWQ6ICVzLlxuIiks IGRsZXJyb3IgKCkpOworICAgICAgICByZXR1cm4gMDsKKyAgfQorICBpbmZv ID0gYWRkX3RocmVhZF9kYl9pbmZvIChoYW5kbGUpOworICBpbmZvLT5maWxl bmFtZSA9IGxpYnJhcnk7CisKKyAgaWYgKHRyeV90aHJlYWRfZGJfbG9hZF8x IChpbmZvKSkKKyAgICByZXR1cm4gMTsKKworICAvKiBUaGlzIGxpYnJhcnkg InJlZnVzZWQiIHRvIHdvcmsgb24gY3VycmVudCBpbmZlcmlvci4gICovCisg IGRlbGV0ZV90aHJlYWRfZGJfaW5mbyAoaW5mZXJpb3JfcHRpZC5waWQgKCkp OworICByZXR1cm4gMDsKK30KKworLyogU2VhcmNoIGxpYnRocmVhZF9kYl9z ZWFyY2hfcGF0aCBmb3IgbGlidGhyZWFkX2RiIHdoaWNoICJhZ3JlZXMiCisg ICB0byB3b3JrIG9uIGN1cnJlbnQgaW5mZXJpb3IuCisgICBUaGUgcmVzdWx0 IGlzIHRydWUgZm9yIHN1Y2Nlc3MuICAqLworCitzdGF0aWMgaW50Cit0aHJl YWRfZGJfbG9hZF9zZWFyY2ggKHZvaWQpCit7CisgIGludCByYyA9IDA7Cisg IHN0YXRpYyBjaGFyIGxpYnBhdGhbUEFUSF9NQVhdOworCisgIHNwcmludGYo bGlicGF0aCwgIiVzLyVzIiwgbGlidGhyZWFkX2RiX3BhdGgsIGxpYnRocmVh ZF9kYl9uYW1lKTsKKyAgaWYgKHRyeV90aHJlYWRfZGJfbG9hZCAobGlicGF0 aCkpCisgIHsKKyAgICByYyA9IDE7CisgIH0KKyAgaWYgKGxpYnRocmVhZF9k Yl9kZWJ1ZykKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2cs CisgICAgICBfKCJUSFItREIgJXM6IHJldHVybmluZyAlZFxuIiksIF9fZnVu Y19fLCByYyk7CisgIHJldHVybiByYzsKK30KKworLyogUmV0dXJuIG5vbi16 ZXJvIGlmIHRoZSBpbmZlcmlvciBoYXMgYSBsaWJwdGhyZWFkLiAgKi8KKwor c3RhdGljIGludAoraGFzX2xpYnB0aHJlYWQgKHZvaWQpCit7CisgIHN0cnVj dCBvYmpmaWxlICpvYmo7CisKKyAgQUxMX09CSkZJTEVTIChvYmopCisgICAg aWYgKGxpYnB0aHJlYWRfbmFtZV9wIChvYmpmaWxlX25hbWUgKG9iaikpKQor ICAgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEF0dGVt cHQgdG8gbG9hZCBhbmQgaW5pdGlhbGl6ZSBsaWJ0aHJlYWRfZGIuCisgICBS ZXR1cm4gMSBvbiBzdWNjZXNzLiAgKi8KKworc3RhdGljIGludAordGhyZWFk X2RiX2xvYWQgKHZvaWQpCit7CisgIHN0cnVjdCB0aHJlYWRfZGJfaW5mbyAq aW5mbzsKKworICBpbmZvID0gZ2V0X3RocmVhZF9kYl9pbmZvIChpbmZlcmlv cl9wdGlkLnBpZCAoKSk7CisKKyAgaWYgKGluZm8gIT0gTlVMTCkKKyAgICBy ZXR1cm4gMTsKKworICAvKiBEb24ndCBhdHRlbXB0IHRvIHVzZSB0aHJlYWRf ZGIgb24gZXhlY3V0YWJsZXMgbm90IHJ1bm5pbmcKKyAgICAgeWV0LiAgKi8K KyAgaWYgKCF0YXJnZXRfaGFzX3JlZ2lzdGVycykKKyAgICByZXR1cm4gMDsK KworICAvKiBEb24ndCBhdHRlbXB0IHRvIHVzZSB0aHJlYWRfZGIgZm9yIHJl bW90ZSB0YXJnZXRzLiAgKi8KKyAgaWYgKCEodGFyZ2V0X2Nhbl9ydW4gKCkg fHwgY29yZV9iZmQpKQorICAgIHJldHVybiAwOworCisgICBpZiAodGhyZWFk X2RiX2xvYWRfc2VhcmNoICgpKQorICAgIHJldHVybiAxOworCisgIC8qIFdl IGNvdWxkbid0IGZpbmQgYSBsaWJ0aHJlYWRfZGIuCisgICAgIElmIHRoZSBp bmZlcmlvciBoYXMgYSBsaWJwdGhyZWFkIHdhcm4gdGhlIHVzZXIuICAqLwor ICBpZiAoaGFzX2xpYnB0aHJlYWQgKCkpCisgIHsKKyAgICB3YXJuaW5nIChf KCJUSFItREI6IFVuYWJsZSB0byBmaW5kIGxpYnRocmVhZF9kYiBtYXRjaGlu ZyBpbmZlcmlvcidzIHRocmVhZCIKKyAgICAgIiBsaWJyYXJ5LCB0aHJlYWQg ZGVidWdnaW5nIHdpbGwgbm90IGJlIGF2YWlsYWJsZS4iKSk7CisgICAgICBy ZXR1cm4gMDsKKyAgfQorCisgIC8qIEVpdGhlciB0aGlzIGV4ZWN1dGFibGUg aXNuJ3QgdXNpbmcgbGlicHRocmVhZCBhdCBhbGwsIG9yIGl0IGlzCisgICAg IHN0YXRpY2FsbHkgbGlua2VkLiAgU2luY2Ugd2UgY2FuJ3QgZWFzaWx5IGRp c3Rpbmd1aXNoIHRoZXNlIHR3byBjYXNlcywKKyAgICAgbm8gd2FybmluZyBp cyBpc3N1ZWQuICAqLworICByZXR1cm4gMDsKK30KKworLyogQ2hlY2sgd2hl dGhlciB0aHJlYWRfZGIgaXMgdXNhYmxlLiAgVGhpcyBmdW5jdGlvbiBpcyBj YWxsZWQgd2hlbgorICAgYW4gaW5mZXJpb3IgaXMgY3JlYXRlZCAob3Igb3Ro ZXJ3aXNlIGFjcXVpcmVkLCBlLmcuIGF0dGFjaGVkIHRvKQorICAgYW5kIHdo ZW4gbmV3IHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBpbnRvIGEgcnVu bmluZyBwcm9jZXNzLiAgKi8KKwordm9pZAorY2hlY2tfZm9yX3RocmVhZF9k YiAodm9pZCkKK3sKKyAgLyogRG8gbm90aGluZyBpZiB3ZSBjb3VsZG4ndCBs b2FkIGxpYnRocmVhZF9kYi5zbyAgKi8KKyAgaWYgKCF0aHJlYWRfZGJfbG9h ZCAoKSkKKyAgICByZXR1cm47Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMg Y2FsbGVkIHZpYSB0aGUgbmV3X29iamZpbGUgb2JzZXJ2ZXIuICAqLworCitz dGF0aWMgdm9pZAordGhyZWFkX2RiX25ld19vYmpmaWxlIChzdHJ1Y3Qgb2Jq ZmlsZSAqb2JqZmlsZSkKK3sKKyAgLyogVGhpcyBvYnNlcnZlciBtdXN0IGFs d2F5cyBiZSBjYWxsZWQgd2l0aCBpbmZlcmlvcl9wdGlkIHNldAorICAgICBj b3JyZWN0bHkuICAqLworCisgIGlmIChvYmpmaWxlICE9IE5VTEwpCisgICAg Y2hlY2tfZm9yX3RocmVhZF9kYiAoKTsKK30KKworLyogVGhpcyBmdW5jdGlv biBpcyBjYWxsZWQgdmlhIHRoZSBpbmZlcmlvcl9jcmVhdGVkIG9ic2VydmVy LgorICAgVGhpcyBoYW5kbGVzIHRoZSBjYXNlIG9mIGRlYnVnZ2luZyBzdGF0 aWNhbGx5IGxpbmtlZCBleGVjdXRhYmxlcy4gICovCisKK3N0YXRpYyB2b2lk Cit0aHJlYWRfZGJfaW5mZXJpb3JfY3JlYXRlZCAoc3RydWN0IHRhcmdldF9v cHMgKnRhcmdldCwgaW50IGZyb21fdHR5KQoreworICBjaGVja19mb3JfdGhy ZWFkX2RiICgpOworfQorCisvKiBQcm92aWRlIGEgcHJvdG90eXBlIHRvIHNp bGVuY2UgLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLworZXh0ZXJuIGluaXRp YWxpemVfZmlsZV9mdHlwZSBfaW5pdGlhbGl6ZV90aHJlYWRfZGI7CisKK3Zv aWQKK19pbml0aWFsaXplX3RocmVhZF9kYiAodm9pZCkKK3sKKworICBpZiAo bGlidGhyZWFkX2RiX2RlYnVnKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAo Z2RiX3N0ZGxvZywgXygiVEhSLURCOiAlczogRGVidWdnaW5nIGVuYWJsZWQg YnkgZGVmYXVsdCA6ICVkLlxuIiksCisgICAgICAgICBfX2Z1bmNfXywgbGli dGhyZWFkX2RiX2RlYnVnKTsKKworICBhZGRfc2V0c2hvd196dWludGVnZXJf Y21kICgibGlidGhyZWFkLWRiIiwgY2xhc3NfbWFpbnRlbmFuY2UsCisgICAg ICAgICAgICZsaWJ0aHJlYWRfZGJfZGVidWcsIF8oIlwKKyAgICAgICAgICAg U2V0IGxpYnRocmVhZC1kYiBkZWJ1Z2dpbmcuIiksIF8oIlwKKyAgICAgICAg ICAgU2hvdyBsaWJ0aHJlYWQtZGIgZGVidWdnaW5nLiIpLCBfKCJcCisgICAg ICAgICAgIFdoZW4gbm9uLXplcm8sIGxpYnRocmVhZC1kYiBkZWJ1Z2dpbmcg aXMgZW5hYmxlZC4iKSwKKyAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAg c2hvd19saWJ0aHJlYWRfZGJfZGVidWcsCisgICAgICAgICAgICZzZXRkZWJ1 Z2xpc3QsICZzaG93ZGVidWdsaXN0KTsKKworICAvKiBBZGQgb3Vyc2VsdmVz IHRvIG9iamZpbGUgZXZlbnQgY2hhaW4uICAqLworICBnZGI6Om9ic2VydmVy czo6bmV3X29iamZpbGUuYXR0YWNoICh0aHJlYWRfZGJfbmV3X29iamZpbGUp OworCisgIC8qIEFkZCBvdXJzZWx2ZXMgdG8gaW5mZXJpb3JfY3JlYXRlZCBl dmVudCBjaGFpbi4KKyAgICAgVGhpcyBpcyBuZWVkZWQgdG8gaGFuZGxlIGRl YnVnZ2luZyBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyB3aGVyZQorICAg ICB0aGUgbmV3X29iamZpbGUgb2JzZXJ2ZXIgd29uJ3QgZ2V0IGNhbGxlZCBm b3IgbGlicHRocmVhZC4gICovCisgIGdkYjo6b2JzZXJ2ZXJzOjppbmZlcmlv cl9jcmVhdGVkLmF0dGFjaCAodGhyZWFkX2RiX2luZmVyaW9yX2NyZWF0ZWQp OworfQorCisvKiBwcm9jIHNlcnZpY2UgZnVuY3Rpb25zICovCit2b2lkCitw c19wbG9nIChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgdmFfbGlzdCBh cmdzOworCisgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOworICB2ZnByaW50Zl9m aWx0ZXJlZCAoZ2RiX3N0ZGxvZywgZm10LCBhcmdzKTsKKyAgdmFfZW5kIChh cmdzKTsKK30KKworcHNfZXJyX2UKK3BzX3BnbG9iYWxfbG9va3VwIChzdHJ1 Y3QgcHNfcHJvY2hhbmRsZSAqcGgsIGNvbnN0IGNoYXIgKm9iaiwKKyAgICAg ICBjb25zdCBjaGFyICpuYW1lLCBwc2FkZHJfdCAqc3ltX2FkZHIpCit7Cisg IHN0cnVjdCBib3VuZF9taW5pbWFsX3N5bWJvbCBtczsKKyAgQ09SRV9BRERS IGFkZHI7CisKKyAgbXMgPSBsb29rdXBfYm91bmRfbWluaW1hbF9zeW1ib2wg KG5hbWUpOworICBpZiAobXMubWluc3ltID09IE5VTEwpIHsKKyAgICBmcHJp bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csIF8oIlRIUi1EQiAlczogU3lt IDogJXMgbm90IGZvdW5kXG4iKSwKKyAgICAgICAgIF9fZnVuY19fLCBuYW1l KTsKKyAgICByZXR1cm4gUFNfTk9TWU07CisgIH0KKworICBhZGRyID0gQk1T WU1CT0xfVkFMVUVfQUREUkVTUyAobXMpOworICBzdG9yZV90eXBlZF9hZGRy ZXNzICgoZ2RiX2J5dGUgKikgc3ltX2FkZHIsCisgICAgICAgICAgIGJ1aWx0 aW5fdHlwZSAodGFyZ2V0X2dkYmFyY2ggKCkpLT5idWlsdGluX2RhdGFfcHRy LCBhZGRyKTsKKyAgcmV0dXJuIFBTX09LOworfQorCitwc19lcnJfZQorcHNf cHJlYWQgKHN0cnVjdCBwc19wcm9jaGFuZGxlICpwaCwgcHNhZGRyX3QgYWRk ciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworICBpbnQgZXJyID0gdGFy Z2V0X3JlYWRfbWVtb3J5ICgKKyAgICBleHRyYWN0X3R5cGVkX2FkZHJlc3Mg KChjb25zdCBnZGJfYnl0ZSAqKSAmYWRkciwKKyAgICAgICAgIGJ1aWx0aW5f dHlwZSAodGFyZ2V0X2dkYmFyY2ggKCkpLT5idWlsdGluX2RhdGFfcHRyKSwg KGdkYl9ieXRlICopYnVmLCBsZW4pOworICByZXR1cm4gKGVyciA9PSAwID8g UFNfT0sgOiBQU19FUlIpOworfQorCitwc19lcnJfZQorcHNfcHdyaXRlIChz dHJ1Y3QgcHNfcHJvY2hhbmRsZSAqcGgsIHBzYWRkcl90IGFkZHIsIGNvbnN0 IHZvaWQgKmJ1ZiwKKyAgICAgc2l6ZV90IGxlbikKK3sKKyAgaW50IGVyciA9 IHRhcmdldF93cml0ZV9tZW1vcnkgKAorICAgIGV4dHJhY3RfdHlwZWRfYWRk cmVzcyAoKGNvbnN0IGdkYl9ieXRlICopICZhZGRyLAorICAgICAgYnVpbHRp bl90eXBlICh0YXJnZXRfZ2RiYXJjaCAoKSktPmJ1aWx0aW5fZGF0YV9wdHIp LCAoY29uc3QgZ2RiX2J5dGUgKikgYnVmLCBsZW4pOworICByZXR1cm4gKGVy ciA9PSAwID8gUFNfT0sgOiBQU19FUlIpOworfQorCitwc19lcnJfZQorcHNf bGdldHJlZ3MgKHN0cnVjdCBwc19wcm9jaGFuZGxlICpwaCwgbHdwaWRfdCBs d3BpZCwgcHJncmVnc2V0X3QgZ3JlZ3NldCkKK3sKKyAgc2NvcGVkX3Jlc3Rv cmUgc2F2ZV9pbmZlcmlvcl9wdGlkID0gbWFrZV9zY29wZWRfcmVzdG9yZSAo JmluZmVyaW9yX3B0aWQpOworCisgIC8qIFRhcmdldCBvcGVyYXRpb24gaXNu J3QgbHdwIGF3YXJlOiByZXBsYWNlIHBpZCB3aXRoIGx3cCAqLworICBpbmZl cmlvcl9wdGlkID0gcHRpZF90IChsd3BpZCwgMCwgMCk7CisgIHRhcmdldF9m ZXRjaF9yZWdpc3RlcnMgKGdldF9jdXJyZW50X3JlZ2NhY2hlKCksIC0xKTsK KyAgZmlsbF9ncmVnc2V0IChnZXRfY3VycmVudF9yZWdjYWNoZSgpLCBncmVn c2V0LCAtMSk7CisgIHJldHVybiBQU19PSzsKK30KKworcHNfZXJyX2UKK3Bz X2xzZXRyZWdzIChzdHJ1Y3QgcHNfcHJvY2hhbmRsZSAqcGgsIGx3cGlkX3Qg bHdwaWQsCisgICAgICAgY29uc3QgcHJncmVnc2V0X3QgZ3JlZ3NldCkKK3sK KyAgc2NvcGVkX3Jlc3RvcmUgc2F2ZV9pbmZlcmlvcl9wdGlkID0gbWFrZV9z Y29wZWRfcmVzdG9yZSAoJmluZmVyaW9yX3B0aWQpOworICBpbmZlcmlvcl9w dGlkID0gcHRpZF90IChpbmZlcmlvcl9wdGlkLnBpZCAoKSwgbHdwaWQsIDAp OworICBzdXBwbHlfZ3JlZ3NldCAoZ2V0X2N1cnJlbnRfcmVnY2FjaGUoKSwg KGNvbnN0IGdkYl9ncmVnc2V0X3QgKikgZ3JlZ3NldCk7CisgIHRhcmdldF9z dG9yZV9yZWdpc3RlcnMgKGdldF9jdXJyZW50X3JlZ2NhY2hlKCksIC0xKTsK KyAgcmV0dXJuIFBTX09LOworfQorCitwc19lcnJfZQorcHNfbGdldGZwcmVn cyAoc3RydWN0IHBzX3Byb2NoYW5kbGUgKnBoLCBsd3BpZF90IGx3cGlkLCBw cmZwcmVnc2V0X3QgKmZwcmVnc2V0KQoreworICBzY29wZWRfcmVzdG9yZSBz YXZlX2luZmVyaW9yX3B0aWQgPSBtYWtlX3Njb3BlZF9yZXN0b3JlICgmaW5m ZXJpb3JfcHRpZCk7CisgIGluZmVyaW9yX3B0aWQgPSBwdGlkX3QgKGluZmVy aW9yX3B0aWQucGlkICgpLCBsd3BpZCwgMCk7CisgIHRhcmdldF9mZXRjaF9y ZWdpc3RlcnMgKGdldF9jdXJyZW50X3JlZ2NhY2hlKCksIC0xKTsKKyAgZmls bF9mcHJlZ3NldCAoZ2V0X2N1cnJlbnRfcmVnY2FjaGUoKSwgZnByZWdzZXQs IC0xKTsKKyAgcmV0dXJuIFBTX09LOworfQorCitwc19lcnJfZQorcHNfbHNl dGZwcmVncyAoc3RydWN0IHBzX3Byb2NoYW5kbGUgKnBoLCBsd3BpZF90IGx3 cGlkLAorICAgICAgICAgICAgICAgY29uc3QgcHJmcHJlZ3NldF90ICpmcHJl Z3NldCkKK3sKKyAgc2NvcGVkX3Jlc3RvcmUgc2F2ZV9pbmZlcmlvcl9wdGlk ID0gbWFrZV9zY29wZWRfcmVzdG9yZSAoJmluZmVyaW9yX3B0aWQpOworICBp bmZlcmlvcl9wdGlkID0gcHRpZF90IChpbmZlcmlvcl9wdGlkLnBpZCAoKSwg bHdwaWQsIDApOworICBzdXBwbHlfZnByZWdzZXQgKGdldF9jdXJyZW50X3Jl Z2NhY2hlKCksIChnZGJfZnByZWdzZXRfdCAqKSBmcHJlZ3NldCk7CisgIHRh cmdldF9zdG9yZV9yZWdpc3RlcnMgKGdldF9jdXJyZW50X3JlZ2NhY2hlKCks IC0xKTsKKyAgcmV0dXJuIFBTX09LOworfQorCisjaWZkZWYgSTM4Nl9HRVRY TU1SRUdTCitwc19lcnJfZQorcHNfbGdldHhtbXJlZ3MgKHN0cnVjdCBwc19w cm9jaGFuZGxlICpwaCwgbHdwaWRfdCBsd3BpZCwgY2hhciAqeG1tcmVncykK K3sKKyAgc2NvcGVkX3Jlc3RvcmUgc2F2ZV9pbmZlcmlvcl9wdGlkID0gbWFr ZV9zY29wZWRfcmVzdG9yZSAoJmluZmVyaW9yX3B0aWQpOworICBpbmZlcmlv cl9wdGlkID0gcHRpZF90IChpbmZlcmlvcl9wdGlkLnBpZCAoKSwgbHdwaWQs IDApOworICB0YXJnZXRfZmV0Y2hfcmVnaXN0ZXJzIChnZXRfY3VycmVudF9y ZWdjYWNoZSAoKSwgLTEpOworICBpMzg3X2NvbGxlY3RfZnhzYXZlIChnZXRf Y3VycmVudF9yZWdjYWNoZSAoKSwgLTEsIHhtbXJlZ3MpOworICByZXR1cm4g UFNfT0s7Cit9CisKK3BzX2Vycl9lCitwc19sc2V0eG1tcmVncyAoc3RydWN0 IHBzX3Byb2NoYW5kbGUgKnBoLCBsd3BpZF90IGx3cGlkLAorICAgIGNvbnN0 IGNoYXIgKnhtbXJlZ3MpCit7CisgIHNjb3BlZF9yZXN0b3JlIHNhdmVfaW5m ZXJpb3JfcHRpZCA9IG1ha2Vfc2NvcGVkX3Jlc3RvcmUgKCZpbmZlcmlvcl9w dGlkKTsKKyAgaW5mZXJpb3JfcHRpZCA9IHB0aWRfdCAoaW5mZXJpb3JfcHRp ZC5waWQgKCksIGx3cGlkLCAwKTsKKyAgaTM4N19zdXBwbHlfZnhzYXZlIChn ZXRfY3VycmVudF9yZWdjYWNoZSAoKSwgLTEsIHhtbXJlZ3MpOworICB0YXJn ZXRfc3RvcmVfcmVnaXN0ZXJzIChnZXRfY3VycmVudF9yZWdjYWNoZSAoKSwg LTEpOworICByZXR1cm4gUFNfT0s7Cit9CisjZW5kaWYKKworcHNfZXJyX2UK K3BzX2xzdG9wIChzdHJ1Y3QgcHNfcHJvY2hhbmRsZSAqcGgsIGx3cGlkX3Qg bHdwaWQpCit7CisgIGlmIChwdHJhY2UgKFBUX1NVU1BFTkQsIGx3cGlkLCAw LCAwKSA9PSAtMSkKKyAgICByZXR1cm4gUFNfRVJSOworICByZXR1cm4gUFNf T0s7Cit9CisKK3BzX2Vycl9lCitwc19sY29udGludWUgKHN0cnVjdCBwc19w cm9jaGFuZGxlICpwaCwgbHdwaWRfdCBsd3BpZCkKK3sKKyAgaWYgKHB0cmFj ZSAoUFRfUkVTVU1FLCBsd3BpZCwgMCwgMCkgPT0gLTEpCisgICAgcmV0dXJu IFBTX0VSUjsKKyAgcmV0dXJuIFBTX09LOworfQorCitwc19lcnJfZQorcHNf bGluZm8gKHN0cnVjdCBwc19wcm9jaGFuZGxlICpwaCwgbHdwaWRfdCBsd3Bp ZCwgdm9pZCAqaW5mbykKK3sKKyAgaWYgKHRhcmdldF9oYXNfZXhlY3V0aW9u KQorICB7CisgICAgaWYgKHB0cmFjZSAoUFRfTFdQSU5GTywgbHdwaWQsIChj YWRkcl90KWluZm8sCisgICAgICAgICAgc2l6ZW9mIChzdHJ1Y3QgcHRyYWNl X2x3cGluZm8pKSA9PSAtMSkKKyAgICAgIHJldHVybiBQU19FUlI7CisgICAg cmV0dXJuIFBTX09LOworICB9CisgIGVsc2UKKyAgeworICAgIG1lbXNldCAo aW5mbywgMCwgc2l6ZW9mIChzdHJ1Y3QgcHRyYWNlX2x3cGluZm8pKTsKKyAg ICByZXR1cm4gUFNfT0s7CisgIH0KK30KKworCmRpZmYgLS1naXQgYS9nZGIv aTM4Ni1ic2QtbmF0LmMgYi9nZGIvaTM4Ni1ic2QtbmF0LmMKaW5kZXggMDll YTk5Zi4uYjllOGVlMyAxMDA2NDQKLS0tIGEvZ2RiL2kzODYtYnNkLW5hdC5j CisrKyBiL2dkYi9pMzg2LWJzZC1uYXQuYwpAQCAtMzQwLDMgKzM0MCwzNSBA QCBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gPGJ1Zy1nZGJAZ251Lm9yZz4uIiks CiAKICNlbmRpZiAvKiBTQ19SRUdfT0ZGU0VUICovCiB9CisKK3ZvaWQKK3N1 cHBseV9ncmVnc2V0IChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBjb25z dCBnZGJfZ3JlZ3NldF90ICpncmVnc2V0cCkKK3sKKyAgaTM4NmJzZF9zdXBw bHlfZ3JlZ3NldCAocmVnY2FjaGUsIChjb25zdCB2b2lkICopIGdyZWdzZXRw KTsKK30KKworLyogRmlsbCBHREIncyByZWdpc3RlciBhcnJheSB3aXRoIHRo ZSBmbG9hdGluZy1wb2ludCByZWdpc3RlciB2YWx1ZXMgaW4KKyAgICpGUFJF R1NFVFAuICAqLworCit2b2lkCitzdXBwbHlfZnByZWdzZXQgKHN0cnVjdCBy ZWdjYWNoZSAqcmVnY2FjaGUsIGNvbnN0IGdkYl9mcHJlZ3NldF90ICpmcHJl Z3NldHApCit7CisgIGkzODdfc3VwcGx5X2ZzYXZlIChyZWdjYWNoZSwgLTEs IGZwcmVnc2V0cCk7Cit9CisKK3ZvaWQKK2ZpbGxfZ3JlZ3NldCAoY29uc3Qg c3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgZ2RiX2dyZWdzZXRfdCAqZ3Jl Z3NldHAsIGludCByZWdubykKK3sKKyAgaTM4NmJzZF9jb2xsZWN0X2dyZWdz ZXQgKHJlZ2NhY2hlLCAodm9pZCAqKSBncmVnc2V0cCwgcmVnbm8pOworfQor CisvKiBGaWxsIHJlZ2lzdGVyIFJFR05PIChpZiBpdCBpcyBhIGZsb2F0aW5n LXBvaW50IHJlZ2lzdGVyKSBpbgorICAgKkZQUkVHU0VUUCB3aXRoIHRoZSB2 YWx1ZSBpbiBHREIncyByZWdpc3RlciBhcnJheS4gIElmIFJFR05PIGlzIC0x LAorICAgZG8gdGhpcyBmb3IgYWxsIHJlZ2lzdGVycy4gICovCisKK3ZvaWQK K2ZpbGxfZnByZWdzZXQgKGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqcmVnY2Fj aGUsIGdkYl9mcHJlZ3NldF90ICpmcHJlZ3NldHAsIGludCByZWdubykKK3sK KyAgaTM4N19jb2xsZWN0X2ZzYXZlIChyZWdjYWNoZSwgcmVnbm8sIGZwcmVn c2V0cCk7Cit9CisKZGlmZiAtLWdpdCBhL2dkYi9pMzg2LWZic2QtdGRlcC5j IGIvZ2RiL2kzODYtZmJzZC10ZGVwLmMKaW5kZXggMjJjOGQ0NS4uYjRiODFj YSAxMDA2NDQKLS0tIGEvZ2RiL2kzODYtZmJzZC10ZGVwLmMKKysrIGIvZ2Ri L2kzODYtZmJzZC10ZGVwLmMKQEAgLTQxNiw2ICs0MTYsMTAgQEAgaTM4NmZi c2Q0X2luaXRfYWJpIChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGluZm8sIHN0cnVj dCBnZGJhcmNoICpnZGJhcmNoKQogICBzZXRfZ2RiYXJjaF9pdGVyYXRlX292 ZXJfcmVnc2V0X3NlY3Rpb25zCiAgICAgKGdkYmFyY2gsIGkzODZmYnNkX2l0 ZXJhdGVfb3Zlcl9yZWdzZXRfc2VjdGlvbnMpOwogCisgIC8qIEVuYWJsZSBU TFMgc3VwcG9ydC4gICovCisgIHNldF9nZGJhcmNoX2ZldGNoX3Rsc19sb2Fk X21vZHVsZV9hZGRyZXNzIChnZGJhcmNoLAorICAgICAgICAgICAgIHN2cjRf ZmV0Y2hfb2JqZmlsZV9saW5rX21hcCk7CisKICAgc2V0X2dkYmFyY2hfY29y ZV9yZWFkX2Rlc2NyaXB0aW9uIChnZGJhcmNoLAogCQkJCSAgICAgaTM4NmZi c2RfY29yZV9yZWFkX2Rlc2NyaXB0aW9uKTsKIH0KLS0gCjEuNy45LjUKCg== --000000000000f88dad0575e8cf28--