From owner-freebsd-current@FreeBSD.ORG Wed Apr 4 08:46:35 2007 Return-Path: X-Original-To: current@freebsd.org Delivered-To: freebsd-current@FreeBSD.ORG Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D7F5F16A405 for ; Wed, 4 Apr 2007 08:46:35 +0000 (UTC) (envelope-from howard0su@gmail.com) Received: from ug-out-1314.google.com (ug-out-1314.google.com [66.249.92.172]) by mx1.freebsd.org (Postfix) with ESMTP id 4D60513C480 for ; Wed, 4 Apr 2007 08:46:34 +0000 (UTC) (envelope-from howard0su@gmail.com) Received: by ug-out-1314.google.com with SMTP id 71so614326ugh for ; Wed, 04 Apr 2007 01:46:31 -0700 (PDT) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:cc:mime-version:content-type; b=PwcS/3+crE41IApwj0LH+s9FxwfoWpe2uifQukB6QewUSNjmMVW3ep4CM4RcREtujnm6yBubKySDoEzVS1Ov3Tsed53IpSQiXH9/00JlQmwe243psD/fjIUYrNJ6fuSwXZ84sgKaLVrEO163GNVsq3el02LtFOqVFmTntZ0yrFc= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:cc:mime-version:content-type; b=S9lIzF981sVZ2KJ999exKIU8ItjyvvS+za6vG91E4ilE0o16KfLBpZ6OR2QleRDm3ioSQLbjEHheXhkw2SXOvW9gjksnHrGeJrfXvXn0taCA1FtwYFnJGgGHATxmR3mBWmh2CtTqQCw1In4/61o0ZuDzA6N9vWxHHhAQJN4yW9Q= Received: by 10.114.39.16 with SMTP id m16mr126460wam.1175674700198; Wed, 04 Apr 2007 01:18:20 -0700 (PDT) Received: by 10.114.241.12 with HTTP; Wed, 4 Apr 2007 01:18:20 -0700 (PDT) Message-ID: Date: Wed, 4 Apr 2007 16:18:20 +0800 From: "Howard Su" To: current@freebsd.org MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_27400_23796817.1175674700136" X-Mailman-Approved-At: Wed, 04 Apr 2007 11:22:06 +0000 Cc: alfred@freebsd.org Subject: [Review] Remove procfs dependency of truss X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Apr 2007 08:46:36 -0000 ------=_Part_27400_23796817.1175674700136 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Following the suggestion in idea page, I proposed the attached patch. I didn't change any kernel part because I think PTRACE(2) is functional although man page didn't document it. I tested the patch under i386 and amd64 box. The help on testing and code review will be appreciated. To test, please try the following commands: 1. truss ps basic stuff 2. truss -o output ps output the result to file 3. truss -f -o output sh -c "ps" test follow fork 4. start TOP(1) in another session, the truss -p -- -Howard ------=_Part_27400_23796817.1175674700136 Content-Type: text/plain; name=truss_patch.diff; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_f03i5k1f Content-Disposition: attachment; filename="truss_patch.diff" PT09PSAvL2RlcG90L3ZlbmRvci9mcmVlYnNkL3NyYy91c3IuYmluL3RydXNzL01ha2VmaWxlIzkg KHRleHQra28pIC0gLy9kZXBvdC91c2VyL2hvd2FyZHN1L3RydXNzL3Vzci5iaW4vdHJ1c3MvTWFr ZWZpbGUjMSAodGV4dCtrbykgPT09PSBpZGVudGljYWwKPT09PSAvL2RlcG90L3ZlbmRvci9mcmVl YnNkL3NyYy91c3IuYmluL3RydXNzL2FtZDY0LWZic2QuYyM2ICh0ZXh0K2tvKSAtIC8vZGVwb3Qv dXNlci9ob3dhcmRzdS90cnVzcy91c3IuYmluL3RydXNzL2FtZDY0LWZic2QuYyM0ICh0ZXh0K2tv KSA9PT09IGNvbnRlbnQKQEAgLTQzLDggKzQzLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8c3lzL3R5 cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5jbHVkZSA8c3lzL3Bpb2N0bC5oPgor I2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgogCiAjaW5j bHVkZSA8bWFjaGluZS9yZWcuaD4KQEAgLTYzLDcgKzYyLDYgQEAKICNpbmNsdWRlICJzeXNjYWxs LmgiCiAjaW5jbHVkZSAiZXh0ZXJuLmgiCiAKLXN0YXRpYyBpbnQgZmQgPSAtMTsKIHN0YXRpYyBp bnQgY3BpZCA9IC0xOwogCiAjaW5jbHVkZSAic3lzY2FsbHMuaCIKQEAgLTExMywyNSArMTExLDE2 IEBACiAKIHZvaWQKIGFtZDY0X3N5c2NhbGxfZW50cnkoc3RydWN0IHRydXNzaW5mbyAqdHJ1c3Np bmZvLCBpbnQgbmFyZ3MpIHsKLSAgY2hhciBidWZbMzJdOwogICBzdHJ1Y3QgcmVnIHJlZ3M7CiAg IGludCBzeXNjYWxsX251bTsKICAgaW50IGksIHJlZzsKICAgc3RydWN0IHN5c2NhbGwgKnNjOwog Ci0gIGlmIChmZCA9PSAtMSB8fCB0cnVzc2luZm8tPnBpZCAhPSBjcGlkKSB7Ci0gICAgc3ByaW50 ZihidWYsICIvcHJvYy8lZC9yZWdzIiwgdHJ1c3NpbmZvLT5waWQpOwotICAgIGZkID0gb3Blbihi dWYsIE9fUkRXUik7Ci0gICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICBmcHJpbnRmKHRydXNzaW5m by0+b3V0ZmlsZSwgIi0tIENBTk5PVCBPUEVOIFJFR0lTVEVSUyAtLVxuIik7Ci0gICAgICByZXR1 cm47Ci0gICAgfQotICAgIGNwaWQgPSB0cnVzc2luZm8tPnBpZDsKLSAgfQorICBjcGlkID0gdHJ1 c3NpbmZvLT5waWQ7CiAKICAgY2xlYXJfZnNjKCk7Ci0gIGxzZWVrKGZkLCAwTCwgMCk7Ci0gIGlm IChyZWFkKGZkLCAmcmVncywgc2l6ZW9mKHJlZ3MpKSAhPSBzaXplb2YocmVncykpIHsKKyAgaWYg KHB0cmFjZShQVF9HRVRSRUdTLCBjcGlkLCAoY2FkZHJfdCkmcmVncywgMCkgPCAwKQorICB7CiAg ICAgZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICItLSBDQU5OT1QgUkVBRCBSRUdJU1RFUlMg LS1cbiIpOwogICAgIHJldHVybjsKICAgfQpAQCAtMTgxLDggKzE3MCwxMyBAQAogICAgIH0KICAg fQogICBpZiAobmFyZ3MgPiBpKSB7Ci0gICAgbHNlZWsoUHJvY2ZkLCByZWdzLnJfcnNwICsgc2l6 ZW9mKHJlZ2lzdGVyX3QpLCBTRUVLX1NFVCk7Ci0gICAgaWYgKHJlYWQoUHJvY2ZkLCAmZnNjLmFy Z3NbaV0sIChuYXJncy1pKSAqIHNpemVvZihyZWdpc3Rlcl90KSkgPT0gLTEpCisgICAgc3RydWN0 IHB0cmFjZV9pb19kZXNjIGlvcmVxdWVzdDsKKyAgICBpb3JlcXVlc3QucGlvZF9vcCA9IFBJT0Rf UkVBRF9EOworICAgIGlvcmVxdWVzdC5waW9kX29mZnMgPSAodm9pZCAqKShyZWdzLnJfcnNwICsg c2l6ZW9mKHJlZ2lzdGVyX3QpKTsKKyAgICBpb3JlcXVlc3QucGlvZF9hZGRyID0gJmZzYy5hcmdz W2ldOworICAgIGlvcmVxdWVzdC5waW9kX2xlbiA9IChuYXJncyAtIGkpICogc2l6ZW9mKHJlZ2lz dGVyX3QpOworICAgIHB0cmFjZShQVF9JTywgY3BpZCwgKGNhZGRyX3QpJmlvcmVxdWVzdCwgMCk7 CisgICAgaWYgKGlvcmVxdWVzdC5waW9kX2xlbiA9PSAwKQogICAgICAgcmV0dXJuOwogICB9CiAK QEAgLTIyMyw3ICsyMTcsNyBAQAogCSAgICAgIGkgPCAoZnNjLm5hcmdzIC0gMSkgPyAiLCIgOiAi Iik7CiAjZW5kaWYKICAgICAgIGlmIChzYyAmJiAhKHNjLT5hcmdzW2ldLnR5cGUgJiBPVVQpKSB7 Ci0JZnNjLnNfYXJnc1tpXSA9IHByaW50X2FyZyhQcm9jZmQsICZzYy0+YXJnc1tpXSwgZnNjLmFy Z3MsIDAsIHRydXNzaW5mbyk7CisJZnNjLnNfYXJnc1tpXSA9IHByaW50X2FyZygmc2MtPmFyZ3Nb aV0sIGZzYy5hcmdzLCAwLCB0cnVzc2luZm8pOwogICAgICAgfQogICAgIH0KICNpZiBERUJVRwpA QCAtMjc5LDI1ICsyNzMsMTYgQEAKIGxvbmcKIGFtZDY0X3N5c2NhbGxfZXhpdChzdHJ1Y3QgdHJ1 c3NpbmZvICp0cnVzc2luZm8sIGludCBzeXNjYWxsX251bSBfX3VudXNlZCkKIHsKLSAgY2hhciBi dWZbMzJdOwogICBzdHJ1Y3QgcmVnIHJlZ3M7CiAgIGxvbmcgcmV0dmFsOwogICBpbnQgaTsKICAg aW50IGVycm9ycDsKICAgc3RydWN0IHN5c2NhbGwgKnNjOwogCi0gIGlmIChmZCA9PSAtMSB8fCB0 cnVzc2luZm8tPnBpZCAhPSBjcGlkKSB7Ci0gICAgc3ByaW50ZihidWYsICIvcHJvYy8lZC9yZWdz IiwgdHJ1c3NpbmZvLT5waWQpOwotICAgIGZkID0gb3BlbihidWYsIE9fUkRPTkxZKTsKLSAgICBp ZiAoZmQgPT0gLTEpIHsKLSAgICAgIGZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0gQ0FO Tk9UIE9QRU4gUkVHSVNURVJTIC0tXG4iKTsKLSAgICAgIHJldHVybiAoLTEpOwotICAgIH0KLSAg ICBjcGlkID0gdHJ1c3NpbmZvLT5waWQ7Ci0gIH0KKyAgY3BpZCA9IHRydXNzaW5mby0+cGlkOwog Ci0gIGxzZWVrKGZkLCAwTCwgMCk7Ci0gIGlmIChyZWFkKGZkLCAmcmVncywgc2l6ZW9mKHJlZ3Mp KSAhPSBzaXplb2YocmVncykpIHsKKyAgaWYgKHB0cmFjZShQVF9HRVRSRUdTLCBjcGlkLCAoY2Fk ZHJfdCkmcmVncywgMCkgPCAwKQorICB7CiAgICAgZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUs ICItLSBDQU5OT1QgUkVBRCBSRUdJU1RFUlMgLS1cbiIpOwogICAgIHJldHVybiAoLTEpOwogICB9 CkBAIC0zMjgsNyArMzEzLDcgQEAKIAlpZiAoZXJyb3JwKQogCSAgYXNwcmludGYoJnRlbXAsICIw eCVseCIsIGZzYy5hcmdzW3NjLT5hcmdzW2ldLm9mZnNldF0pOwogCWVsc2UKLQkgIHRlbXAgPSBw cmludF9hcmcoUHJvY2ZkLCAmc2MtPmFyZ3NbaV0sIGZzYy5hcmdzLCByZXR2YWwsIHRydXNzaW5m byk7CisJICB0ZW1wID0gcHJpbnRfYXJnKCZzYy0+YXJnc1tpXSwgZnNjLmFyZ3MsIHJldHZhbCwg dHJ1c3NpbmZvKTsKIAlmc2Muc19hcmdzW2ldID0gdGVtcDsKICAgICAgIH0KICAgICB9Cj09PT0g Ly9kZXBvdC92ZW5kb3IvZnJlZWJzZC9zcmMvdXNyLmJpbi90cnVzcy9leHRlcm4uaCMxMCAodGV4 dCtrbykgLSAvL2RlcG90L3VzZXIvaG93YXJkc3UvdHJ1c3MvdXNyLmJpbi90cnVzcy9leHRlcm4u aCMyICh0ZXh0K2tvKSA9PT09IGNvbnRlbnQKQEAgLTMyLDggKzMyLDkgQEAKICAqLwogCiBleHRl cm4gaW50IHNldHVwX2FuZF93YWl0KGNoYXIgKiopOwotZXh0ZXJuIGludCBzdGFydF90cmFjaW5n KGludCwgaW50LCBpbnQsIGludCk7CitleHRlcm4gaW50IHN0YXJ0X3RyYWNpbmcoaW50KTsKIGV4 dGVybiB2b2lkIHJlc3RvcmVfcHJvYyhpbnQpOworZXh0ZXJuIHZvaWQgd2FpdGV2ZW50KHN0cnVj dCB0cnVzc2luZm8gKik7CiBleHRlcm4gY29uc3QgY2hhciAqaW9jdGxuYW1lKHJlZ2lzdGVyX3Qg dmFsKTsKIGV4dGVybiBjaGFyICpzdHJzaWcoaW50IHNpZyk7CiAjaWZkZWYgX19hbHBoYV9fCj09 PT0gLy9kZXBvdC92ZW5kb3IvZnJlZWJzZC9zcmMvdXNyLmJpbi90cnVzcy9pMzg2LWZic2QuYyMx NyAodGV4dCtrbykgLSAvL2RlcG90L3VzZXIvaG93YXJkc3UvdHJ1c3MvdXNyLmJpbi90cnVzcy9p Mzg2LWZic2QuYyMzICh0ZXh0K2tvKSA9PT09IGNvbnRlbnQKQEAgLTQzLDkgKzQzLDggQEAKICAq LwogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5j bHVkZSA8c3lzL3Bpb2N0bC5oPgogI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaW5jbHVkZSA8 c3lzL3B0cmFjZS5oPgogCiAjaW5jbHVkZSA8bWFjaGluZS9yZWcuaD4KICNpbmNsdWRlIDxtYWNo aW5lL3BzbC5oPgpAQCAtNjMsNyArNjIsNiBAQAogI2luY2x1ZGUgInN5c2NhbGwuaCIKICNpbmNs dWRlICJleHRlcm4uaCIKIAotc3RhdGljIGludCBmZCA9IC0xOwogc3RhdGljIGludCBjcGlkID0g LTE7CiAKICNpbmNsdWRlICJzeXNjYWxscy5oIgpAQCAtMTEzLDI2ICsxMTEsMTggQEAKIAogdm9p ZAogaTM4Nl9zeXNjYWxsX2VudHJ5KHN0cnVjdCB0cnVzc2luZm8gKnRydXNzaW5mbywgaW50IG5h cmdzKSB7Ci0gIGNoYXIgYnVmWzMyXTsKICAgc3RydWN0IHJlZyByZWdzOwogICBpbnQgc3lzY2Fs bF9udW07CiAgIGludCBpOwogICB1bnNpZ25lZCBpbnQgcGFybV9vZmZzZXQ7CiAgIHN0cnVjdCBz eXNjYWxsICpzYyA9IE5VTEw7Ci0KLSAgaWYgKGZkID09IC0xIHx8IHRydXNzaW5mby0+cGlkICE9 IGNwaWQpIHsKLSAgICBzcHJpbnRmKGJ1ZiwgIi9wcm9jLyVkL3JlZ3MiLCB0cnVzc2luZm8tPnBp ZCk7Ci0gICAgZmQgPSBvcGVuKGJ1ZiwgT19SRFdSKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAg ICAgIGZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0gQ0FOTk9UIE9QRU4gUkVHSVNURVJT IC0tXG4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY3BpZCA9IHRydXNzaW5mby0+cGlk OwotICB9CisgIHN0cnVjdCBwdHJhY2VfaW9fZGVzYyBpb3JlcXVlc3Q7CisgIGNwaWQgPSB0cnVz c2luZm8tPnBpZDsKIAogICBjbGVhcl9mc2MoKTsKLSAgbHNlZWsoZmQsIDBMLCAwKTsKLSAgaWYg KHJlYWQoZmQsICZyZWdzLCBzaXplb2YocmVncykpICE9IHNpemVvZihyZWdzKSkgeworICAKKyAg aWYgKHB0cmFjZShQVF9HRVRSRUdTLCBjcGlkLCAoY2FkZHJfdCkmcmVncywgMCkgPCAwKQorICB7 CiAgICAgZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICItLSBDQU5OT1QgUkVBRCBSRUdJU1RF UlMgLS1cbiIpOwogICAgIHJldHVybjsKICAgfQpAQCAtMTQ2LDEzICsxMzYsMTEgQEAKICAgc3lz Y2FsbF9udW0gPSByZWdzLnJfZWF4OwogICBzd2l0Y2ggKHN5c2NhbGxfbnVtKSB7CiAgIGNhc2Ug U1lTX3N5c2NhbGw6Ci0gICAgbHNlZWsoUHJvY2ZkLCBwYXJtX29mZnNldCwgU0VFS19TRVQpOwot ICAgIHJlYWQoUHJvY2ZkLCAmc3lzY2FsbF9udW0sIHNpemVvZihpbnQpKTsKKyAgICBzeXNjYWxs X251bSA9IHB0cmFjZShQVF9SRUFEX0QsIGNwaWQsIChjYWRkcl90KXBhcm1fb2Zmc2V0LCAwKTsK ICAgICBwYXJtX29mZnNldCArPSBzaXplb2YoaW50KTsKICAgICBicmVhazsKICAgY2FzZSBTWVNf X19zeXNjYWxsOgotICAgIGxzZWVrKFByb2NmZCwgcGFybV9vZmZzZXQsIFNFRUtfU0VUKTsKLSAg ICByZWFkKFByb2NmZCwgJnN5c2NhbGxfbnVtLCBzaXplb2YoaW50KSk7CisgICAgc3lzY2FsbF9u dW0gPSBwdHJhY2UoUFRfUkVBRF9ELCBjcGlkLCAoY2FkZHJfdClwYXJtX29mZnNldCwgMCk7CiAg ICAgcGFybV9vZmZzZXQgKz0gc2l6ZW9mKHF1YWRfdCk7CiAgICAgYnJlYWs7CiAgIH0KQEAgLTE3 Niw4ICsxNjQsMTIgQEAKICAgICByZXR1cm47CiAKICAgZnNjLmFyZ3MgPSBtYWxsb2MoKDErbmFy Z3MpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKLSAgbHNlZWsoUHJvY2ZkLCBwYXJtX29mZnNl dCwgU0VFS19TRVQpOwotICBpZiAocmVhZChQcm9jZmQsIGZzYy5hcmdzLCBuYXJncyAqIHNpemVv Zih1bnNpZ25lZCBsb25nKSkgPT0gLTEpCisgIGlvcmVxdWVzdC5waW9kX29wID0gUElPRF9SRUFE X0Q7CisgIGlvcmVxdWVzdC5waW9kX29mZnMgPSAodm9pZCAqKXBhcm1fb2Zmc2V0OworICBpb3Jl cXVlc3QucGlvZF9hZGRyID0gZnNjLmFyZ3M7CisgIGlvcmVxdWVzdC5waW9kX2xlbiA9IG5hcmdz ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworICBwdHJhY2UoUFRfSU8sIGNwaWQsIChjYWRkcl90 KSZpb3JlcXVlc3QsIDApOworICBpZiAoaW9yZXF1ZXN0LnBpb2RfbGVuID09IDApCiAgICAgcmV0 dXJuOwogCiAgIGlmIChmc2MubmFtZSkKQEAgLTIxOCw3ICsyMTAsNyBAQAogCSAgICAgIGkgPCAo ZnNjLm5hcmdzIC0gMSkgPyAiLCIgOiAiIik7CiAjZW5kaWYKICAgICAgIGlmIChzYyAmJiAhKHNj LT5hcmdzW2ldLnR5cGUgJiBPVVQpKSB7Ci0JZnNjLnNfYXJnc1tpXSA9IHByaW50X2FyZyhQcm9j ZmQsICZzYy0+YXJnc1tpXSwgZnNjLmFyZ3MsIDAsIHRydXNzaW5mbyk7CisJZnNjLnNfYXJnc1tp XSA9IHByaW50X2FyZygmc2MtPmFyZ3NbaV0sIGZzYy5hcmdzLCAwLCB0cnVzc2luZm8pOwogICAg ICAgfQogICAgIH0KICNpZiBERUJVRwpAQCAtMjc0LDI4ICsyNjYsMjAgQEAKIGxvbmcKIGkzODZf c3lzY2FsbF9leGl0KHN0cnVjdCB0cnVzc2luZm8gKnRydXNzaW5mbywgaW50IHN5c2NhbGxfbnVt IF9fdW51c2VkKQogewotICBjaGFyIGJ1ZlszMl07CiAgIHN0cnVjdCByZWcgcmVnczsKICAgbG9u ZyByZXR2YWw7CiAgIGludCBpOwogICBpbnQgZXJyb3JwOwogICBzdHJ1Y3Qgc3lzY2FsbCAqc2M7 CiAKLSAgaWYgKGZkID09IC0xIHx8IHRydXNzaW5mby0+cGlkICE9IGNwaWQpIHsKLSAgICBzcHJp bnRmKGJ1ZiwgIi9wcm9jLyVkL3JlZ3MiLCB0cnVzc2luZm8tPnBpZCk7Ci0gICAgZmQgPSBvcGVu KGJ1ZiwgT19SRE9OTFkpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgZnByaW50Zih0cnVz c2luZm8tPm91dGZpbGUsICItLSBDQU5OT1QgT1BFTiBSRUdJU1RFUlMgLS1cbiIpOwotICAgICAg cmV0dXJuICgtMSk7Ci0gICAgfQotICAgIGNwaWQgPSB0cnVzc2luZm8tPnBpZDsKLSAgfQorICBj cGlkID0gdHJ1c3NpbmZvLT5waWQ7CiAKLSAgbHNlZWsoZmQsIDBMLCAwKTsKLSAgaWYgKHJlYWQo ZmQsICZyZWdzLCBzaXplb2YocmVncykpICE9IHNpemVvZihyZWdzKSkgeworICBpZiAocHRyYWNl KFBUX0dFVFJFR1MsIGNwaWQsIChjYWRkcl90KSZyZWdzLCAwKSA8IDApCisgIHsKICAgICBmcHJp bnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIi0tIENBTk5PVCBSRUFEIFJFR0lTVEVSUyAtLVxuIik7 CiAgICAgcmV0dXJuICgtMSk7CiAgIH0KKyAgCiAgIHJldHZhbCA9IHJlZ3Mucl9lYXg7CiAgIGVy cm9ycCA9ICEhKHJlZ3Mucl9lZmxhZ3MgJiBQU0xfQyk7CiAKQEAgLTMyMyw3ICszMDcsNyBAQAog CWlmIChlcnJvcnApCiAJICBhc3ByaW50ZigmdGVtcCwgIjB4JWx4IiwgZnNjLmFyZ3Nbc2MtPmFy Z3NbaV0ub2Zmc2V0XSk7CiAJZWxzZQotCSAgdGVtcCA9IHByaW50X2FyZyhQcm9jZmQsICZzYy0+ YXJnc1tpXSwgZnNjLmFyZ3MsIHJldHZhbCwgdHJ1c3NpbmZvKTsKKwkgIHRlbXAgPSBwcmludF9h cmcoJnNjLT5hcmdzW2ldLCBmc2MuYXJncywgcmV0dmFsLCB0cnVzc2luZm8pOwogCWZzYy5zX2Fy Z3NbaV0gPSB0ZW1wOwogICAgICAgfQogICAgIH0KPT09PSAvL2RlcG90L3ZlbmRvci9mcmVlYnNk L3NyYy91c3IuYmluL3RydXNzL2kzODYtbGludXguYyMxNiAodGV4dCtrbykgLSAvL2RlcG90L3Vz ZXIvaG93YXJkc3UvdHJ1c3MvdXNyLmJpbi90cnVzcy9pMzg2LWxpbnV4LmMjMyAodGV4dCtrbykg PT09PSBjb250ZW50CkBAIC00MSw4ICs0MSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPHN5cy90eXBl cy5oPgotI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotI2luY2x1ZGUgPHN5cy9waW9jdGwuaD4KKyNp bmNsdWRlIDxzeXMvcHRyYWNlLmg+CiAKICNpbmNsdWRlIDxtYWNoaW5lL3JlZy5oPgogI2luY2x1 ZGUgPG1hY2hpbmUvcHNsLmg+CkBAIC02MCw3ICs1OSw2IEBACiAjaW5jbHVkZSAic3lzY2FsbC5o IgogI2luY2x1ZGUgImV4dGVybi5oIgogCi1zdGF0aWMgaW50IGZkID0gLTE7CiBzdGF0aWMgaW50 IGNwaWQgPSAtMTsKIAogI2luY2x1ZGUgImxpbnV4X3N5c2NhbGxzLmgiCkBAIC0xMDgsMjggKzEw NiwyMCBAQAogCiB2b2lkCiBpMzg2X2xpbnV4X3N5c2NhbGxfZW50cnkoc3RydWN0IHRydXNzaW5m byAqdHJ1c3NpbmZvLCBpbnQgbmFyZ3MpIHsKLSAgY2hhciBidWZbMzJdOwogICBzdHJ1Y3QgcmVn IHJlZ3M7CiAgIGludCBzeXNjYWxsX251bTsKICAgaW50IGk7CiAgIHN0cnVjdCBzeXNjYWxsICpz YzsKIAotICBpZiAoZmQgPT0gLTEgfHwgdHJ1c3NpbmZvLT5waWQgIT0gY3BpZCkgewotICAgIHNw cmludGYoYnVmLCAiL3Byb2MvJWQvcmVncyIsIHRydXNzaW5mby0+cGlkKTsKLSAgICBmZCA9IG9w ZW4oYnVmLCBPX1JEV1IpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgZnByaW50Zih0cnVz c2luZm8tPm91dGZpbGUsICItLSBDQU5OT1QgT1BFTiBSRUdJU1RFUlMgLS1cbiIpOwotICAgICAg cmV0dXJuOwotICAgIH0KLSAgICBjcGlkID0gdHJ1c3NpbmZvLT5waWQ7Ci0gIH0KKyAgY3BpZCA9 IHRydXNzaW5mby0+cGlkOwogCiAgIGNsZWFyX2ZzYygpOwotICBsc2VlayhmZCwgMEwsIDApOwot ICBpZiAocmVhZChmZCwgJnJlZ3MsIHNpemVvZihyZWdzKSkgIT0gc2l6ZW9mKHJlZ3MpKSB7Cisg IAorICBpZiAocHRyYWNlKFBUX0dFVFJFR1MsIGNwaWQsIChjYWRkcl90KSZyZWdzLCAwKSA8IDAp CisgIHsKICAgICBmcHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIi0tIENBTk5PVCBSRUFEIFJF R0lTVEVSUyAtLVxuIik7CiAgICAgcmV0dXJuOwotICB9CisgIH0gCiAgIHN5c2NhbGxfbnVtID0g cmVncy5yX2VheDsKIAogICBmc2MubnVtYmVyID0gc3lzY2FsbF9udW07CkBAIC0yMDAsNyArMTkw LDcgQEAKIAkgICAgICBpIDwgKGZzYy5uYXJncyAtIDEpID8gIiwiIDogIiIpOwogI2VuZGlmCiAg ICAgICBpZiAoc2MgJiYgIShzYy0+YXJnc1tpXS50eXBlICYgT1VUKSkgewotCWZzYy5zX2FyZ3Nb aV0gPSBwcmludF9hcmcoUHJvY2ZkLCAmc2MtPmFyZ3NbaV0sIGZzYy5hcmdzLCAwLCB0cnVzc2lu Zm8pOworCWZzYy5zX2FyZ3NbaV0gPSBwcmludF9hcmcoJnNjLT5hcmdzW2ldLCBmc2MuYXJncywg MCwgdHJ1c3NpbmZvKTsKICAgICAgIH0KICAgICB9CiAjaWYgREVCVUcKQEAgLTI2NCwyOCArMjU0 LDE5IEBACiBsb25nCiBpMzg2X2xpbnV4X3N5c2NhbGxfZXhpdChzdHJ1Y3QgdHJ1c3NpbmZvICp0 cnVzc2luZm8sIGludCBzeXNjYWxsX251bSBfX3VudXNlZCkKIHsKLSAgY2hhciBidWZbMzJdOwog ICBzdHJ1Y3QgcmVnIHJlZ3M7CiAgIGxvbmcgcmV0dmFsOwogICBpbnQgaTsKICAgaW50IGVycm9y cDsKICAgc3RydWN0IHN5c2NhbGwgKnNjOwogCi0gIGlmIChmZCA9PSAtMSB8fCB0cnVzc2luZm8t PnBpZCAhPSBjcGlkKSB7Ci0gICAgc3ByaW50ZihidWYsICIvcHJvYy8lZC9yZWdzIiwgdHJ1c3Np bmZvLT5waWQpOwotICAgIGZkID0gb3BlbihidWYsIE9fUkRPTkxZKTsKLSAgICBpZiAoZmQgPT0g LTEpIHsKLSAgICAgIGZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0gQ0FOTk9UIE9QRU4g UkVHSVNURVJTIC0tXG4iKTsKLSAgICAgIHJldHVybiAoLTEpOwotICAgIH0KLSAgICBjcGlkID0g dHJ1c3NpbmZvLT5waWQ7CisgIGNwaWQgPSB0cnVzc2luZm8tPnBpZDsKKyAgaWYgKHB0cmFjZShQ VF9HRVRSRUdTLCBjcGlkLCAoY2FkZHJfdCkmcmVncywgMCkgPCAwKQorICB7CisgICAgZnByaW50 Zih0cnVzc2luZm8tPm91dGZpbGUsICItLSBDQU5OT1QgUkVBRCBSRUdJU1RFUlMgLS1cbiIpOwor ICAgIHJldHVybiAoLTEpOwogICB9CiAKLSAgbHNlZWsoZmQsIDBMLCAwKTsKLSAgaWYgKHJlYWQo ZmQsICZyZWdzLCBzaXplb2YocmVncykpICE9IHNpemVvZihyZWdzKSkgewotICAgIGZwcmludGYo dHJ1c3NpbmZvLT5vdXRmaWxlLCAiXG4iKTsKLSAgICByZXR1cm4gKC0xKTsKLSAgfQogICByZXR2 YWwgPSByZWdzLnJfZWF4OwogICBlcnJvcnAgPSAhIShyZWdzLnJfZWZsYWdzICYgUFNMX0MpOwog CkBAIC0zMTMsNyArMjk0LDcgQEAKIAlpZiAoZXJyb3JwKQogCSAgYXNwcmludGYoJnRlbXAsICIw eCVseCIsIGZzYy5hcmdzW3NjLT5hcmdzW2ldLm9mZnNldF0pOwogCWVsc2UKLQkgIHRlbXAgPSBw cmludF9hcmcoUHJvY2ZkLCAmc2MtPmFyZ3NbaV0sIGZzYy5hcmdzLCByZXR2YWwsIHRydXNzaW5m byk7CisJICB0ZW1wID0gcHJpbnRfYXJnKCZzYy0+YXJnc1tpXSwgZnNjLmFyZ3MsIHJldHZhbCwg dHJ1c3NpbmZvKTsKIAlmc2Muc19hcmdzW2ldID0gdGVtcDsKICAgICAgIH0KICAgICB9Cj09PT0g Ly9kZXBvdC92ZW5kb3IvZnJlZWJzZC9zcmMvdXNyLmJpbi90cnVzcy9pMzg2LmNvbmYjMSAodGV4 dCtrbykgLSAvL2RlcG90L3VzZXIvaG93YXJkc3UvdHJ1c3MvdXNyLmJpbi90cnVzcy9pMzg2LmNv bmYjMSAodGV4dCtrbykgPT09PSBpZGVudGljYWwKPT09PSAvL2RlcG90L3ZlbmRvci9mcmVlYnNk L3NyYy91c3IuYmluL3RydXNzL2kzODZsaW51eC5jb25mIzEgKHRleHQra28pIC0gLy9kZXBvdC91 c2VyL2hvd2FyZHN1L3RydXNzL3Vzci5iaW4vdHJ1c3MvaTM4NmxpbnV4LmNvbmYjMSAodGV4dCtr bykgPT09PSBpZGVudGljYWwKPT09PSAvL2RlcG90L3ZlbmRvci9mcmVlYnNkL3NyYy91c3IuYmlu L3RydXNzL2lhNjQtZmJzZC5jIzkgKHRleHQra28pIC0gLy9kZXBvdC91c2VyL2hvd2FyZHN1L3Ry dXNzL3Vzci5iaW4vdHJ1c3MvaWE2NC1mYnNkLmMjMiAodGV4dCtrbykgPT09PSBjb250ZW50CkBA IC00Myw4ICs0Myw3IEBACiAgKi8KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUg PHN5cy9pb2N0bC5oPgotI2luY2x1ZGUgPHN5cy9waW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvcHRy YWNlLmg+CiAjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KIAogI2luY2x1ZGUgPG1hY2hpbmUvcmVn Lmg+CkBAIC02Miw3ICs2MSw2IEBACiAjaW5jbHVkZSAic3lzY2FsbC5oIgogI2luY2x1ZGUgImV4 dGVybi5oIgogCi1zdGF0aWMgaW50IGZkID0gLTE7CiBzdGF0aWMgaW50IGNwaWQgPSAtMTsKIAog I2luY2x1ZGUgInN5c2NhbGxzLmgiCkBAIC0xMTIsMjYgKzExMCwxNiBAQAogCiB2b2lkCiBpYTY0 X3N5c2NhbGxfZW50cnkoc3RydWN0IHRydXNzaW5mbyAqdHJ1c3NpbmZvLCBpbnQgbmFyZ3MpIHsK LSAgY2hhciBidWZbMzJdOwogICBzdHJ1Y3QgcmVnIHJlZ3M7CiAgIGludCBzeXNjYWxsX251bTsK ICAgaW50IGk7CiAgIHVuc2lnbmVkIGxvbmcgKnBhcm1fb2Zmc2V0OwogICBzdHJ1Y3Qgc3lzY2Fs bCAqc2M7CiAKLSAgaWYgKGZkID09IC0xIHx8IHRydXNzaW5mby0+cGlkICE9IGNwaWQpIHsKLSAg ICBzcHJpbnRmKGJ1ZiwgIi9wcm9jLyVkL3JlZ3MiLCB0cnVzc2luZm8tPnBpZCk7Ci0gICAgZmQg PSBvcGVuKGJ1ZiwgT19SRFdSKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgIGZwcmludGYo dHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0gQ0FOTk9UIE9QRU4gUkVHSVNURVJTIC0tXG4iKTsKLSAg ICAgIHJldHVybjsKLSAgICB9Ci0gICAgY3BpZCA9IHRydXNzaW5mby0+cGlkOwotICB9CisgIGNw aWQgPSB0cnVzc2luZm8tPnBpZDsKIAogICBjbGVhcl9mc2MoKTsKLSAgbHNlZWsoZmQsIDBMLCAw KTsKLSAgaWYgKHJlYWQoZmQsICZyZWdzLCBzaXplb2YocmVncykpICE9IHNpemVvZihyZWdzKSkg eworICBpZiAocHRyYWNlKFBUX0dFVFJFR1MsIGNwaWQsIChjYWRkcl90KSZyZWdzLCAwKSA8IDAp IHsKICAgICBmcHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIi0tIENBTk5PVCBSRUFEIFJFR0lT VEVSUyAtLVxuIik7CiAgICAgcmV0dXJuOwogICB9CkBAIC0yMDQsNyArMTkyLDcgQEAKIAkgICAg ICBpIDwgKGZzYy5uYXJncyAtIDEpID8gIiwiIDogIiIpOwogI2VuZGlmCiAgICAgICBpZiAoc2Mg JiYgIShzYy0+YXJnc1tpXS50eXBlICYgT1VUKSkgewotCWZzYy5zX2FyZ3NbaV0gPSBwcmludF9h cmcoUHJvY2ZkLCAmc2MtPmFyZ3NbaV0sIGZzYy5hcmdzLCAwLCB0cnVzc2luZm8pOworCWZzYy5z X2FyZ3NbaV0gPSBwcmludF9hcmcoJnNjLT5hcmdzW2ldLCBmc2MuYXJncywgMCwgdHJ1c3NpbmZv KTsKICAgICAgIH0KICAgICB9CiAjaWYgREVCVUcKQEAgLTI2MCwyNSArMjQ4LDE1IEBACiBsb25n CiBpYTY0X3N5c2NhbGxfZXhpdChzdHJ1Y3QgdHJ1c3NpbmZvICp0cnVzc2luZm8sIGludCBzeXNj YWxsX251bSBfX3VudXNlZCkKIHsKLSAgY2hhciBidWZbMzJdOwogICBzdHJ1Y3QgcmVnIHJlZ3M7 CiAgIGxvbmcgcmV0dmFsOwogICBpbnQgaTsKICAgaW50IGVycm9ycDsKICAgc3RydWN0IHN5c2Nh bGwgKnNjOwogCi0gIGlmIChmZCA9PSAtMSB8fCB0cnVzc2luZm8tPnBpZCAhPSBjcGlkKSB7Ci0g ICAgc3ByaW50ZihidWYsICIvcHJvYy8lZC9yZWdzIiwgdHJ1c3NpbmZvLT5waWQpOwotICAgIGZk ID0gb3BlbihidWYsIE9fUkRPTkxZKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgIGZwcmlu dGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0gQ0FOTk9UIE9QRU4gUkVHSVNURVJTIC0tXG4iKTsK LSAgICAgIHJldHVybiAoLTEpOwotICAgIH0KLSAgICBjcGlkID0gdHJ1c3NpbmZvLT5waWQ7Ci0g IH0KKyAgY3BpZCA9IHRydXNzaW5mby0+cGlkOwogCi0gIGxzZWVrKGZkLCAwTCwgMCk7Ci0gIGlm IChyZWFkKGZkLCAmcmVncywgc2l6ZW9mKHJlZ3MpKSAhPSBzaXplb2YocmVncykpIHsKKyAgaWYg KHB0cmFjZShQVF9HRVRSRUdTLCBjcGlkLCAoY2FkZHJfdCkmcmVncywgMCkgPCAwKSB7CiAgICAg ZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICItLSBDQU5OT1QgUkVBRCBSRUdJU1RFUlMgLS1c biIpOwogICAgIHJldHVybiAoLTEpOwogICB9CkBAIC0zMDksNyArMjg3LDcgQEAKIAlpZiAoZXJy b3JwKQogCSAgYXNwcmludGYoJnRlbXAsICIweCVseCIsIGZzYy5hcmdzW3NjLT5hcmdzW2ldLm9m ZnNldF0pOwogCWVsc2UKLQkgIHRlbXAgPSBwcmludF9hcmcoUHJvY2ZkLCAmc2MtPmFyZ3NbaV0s IGZzYy5hcmdzLCByZXR2YWwsIHRydXNzaW5mbyk7CisJICB0ZW1wID0gcHJpbnRfYXJnKCZzYy0+ YXJnc1tpXSwgZnNjLmFyZ3MsIHJldHZhbCwgdHJ1c3NpbmZvKTsKIAlmc2Muc19hcmdzW2ldID0g dGVtcDsKICAgICAgIH0KICAgICB9Cj09PT0gLy9kZXBvdC92ZW5kb3IvZnJlZWJzZC9zcmMvdXNy LmJpbi90cnVzcy9tYWluLmMjMjQgKHRleHQra28pIC0gLy9kZXBvdC91c2VyL2hvd2FyZHN1L3Ry dXNzL3Vzci5iaW4vdHJ1c3MvbWFpbi5jIzQgKHRleHQra28pID09PT0gY29udGVudApAQCAtMzks MTEgKzM5LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5 cy9pb2N0bC5oPgotI2luY2x1ZGUgPHN5cy9waW9jdGwuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMu aD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2lu Y2x1ZGUgPHN5cy9zeXNjdGwuaD4KIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZXJy Lmg+CkBAIC01OSwxMyArNTgsOCBAQAogI2luY2x1ZGUgInRydXNzLmgiCiAjaW5jbHVkZSAiZXh0 ZXJuLmgiCiAKLS8qCi0gKiBJdCdzIGRpZmZpY3VsdCB0byBwYXJhbWV0ZXJpemUgdGhpcyBiZWNh dXNlIGl0IG11c3QgYmUKLSAqIGFjY2Vzc2libGUgaW4gYSBzaWduYWwgaGFuZGxlci4KLSAqLwor I2RlZmluZSBNQVhBUkdTIDUKIAotaW50IFByb2NmZDsKLQogc3RhdGljIHZvaWQKIHVzYWdlKHZv aWQpCiB7CkBAIC0xMTksMTggKzExMywxOSBAQAogc2V0X2V0eXBlKHN0cnVjdCB0cnVzc2luZm8g KnRydXNzaW5mbykKIHsKIAlzdHJ1Y3QgZXhfdHlwZXMgKmZ1bmNzOwotCWNoYXIgZXR5cGVbMjRd OwogCWNoYXIgcHJvZ3RbMzJdOwotCWludCBmZDsKKwkKKwlzaXplX3QgbGVuID0gc2l6ZW9mKHBy b2d0KTsKKwlpbnQgbWliWzRdOworCWludCBlcnJvcjsKIAotCXNwcmludGYoZXR5cGUsICIvcHJv Yy8lZC9ldHlwZSIsIHRydXNzaW5mby0+cGlkKTsKLQlpZiAoKGZkID0gb3BlbihldHlwZSwgT19S RE9OTFkpKSA9PSAtMSkgewotCQlzdHJjcHkocHJvZ3QsICJGcmVlQlNEIGEub3V0Iik7Ci0JfSBl bHNlIHsKLQkJaW50IGxlbiA9IHJlYWQoZmQsIHByb2d0LCBzaXplb2YocHJvZ3QpKTsKLQkJcHJv Z3RbbGVuLTFdID0gJ1wwJzsKLQkJY2xvc2UoZmQpOwotCX0KKwltaWJbMF0gPSBDVExfS0VSTjsK KwltaWJbMV0gPSBLRVJOX1BST0M7CisJbWliWzJdID0gS0VSTl9QUk9DX1NWX05BTUU7CisJbWli WzNdID0gdHJ1c3NpbmZvLT5waWQ7CisJZXJyb3IgPSBzeXNjdGwobWliLCA0LCBwcm9ndCwgJmxl biwgTlVMTCwgMCk7CisJaWYgKGVycm9yICE9IDApCisJCWVycigxLCAiY2FuIG5vdCBzeXNjdGwi KTsKIAogCWZvciAoZnVuY3MgPSBleF90eXBlczsgZnVuY3MtPnR5cGU7IGZ1bmNzKyspCiAJCWlm ICghc3RyY21wKGZ1bmNzLT50eXBlLCBwcm9ndCkpCkBAIC0xNjcsMTQgKzE2MiwxMiBAQAogCWlu dCBjOwogCWludCBpOwogCWNoYXIgKipjb21tYW5kOwotCXN0cnVjdCBwcm9jZnNfc3RhdHVzIHBm czsKIAlzdHJ1Y3QgZXhfdHlwZXMgKmZ1bmNzOwotCWludCBpbl9leGVjLCBzaWdleGl0LCBpbml0 aWFsX29wZW47CisJaW50IHNpZ2V4aXQsIGluaXRpYWxfb3BlbjsKIAljaGFyICpmbmFtZTsKIAlz dHJ1Y3QgdHJ1c3NpbmZvICp0cnVzc2luZm87CiAJY2hhciAqc2lnbmFtZTsKIAotCWluX2V4ZWMg PSAwOwogCXNpZ2V4aXQgPSAwOwogCWZuYW1lID0gTlVMTDsKIAlpbml0aWFsX29wZW4gPSAxOwpA QCAtMTg2LDYgKzE3OSw3IEBACiAJYnplcm8odHJ1c3NpbmZvLCBzaXplb2Yoc3RydWN0IHRydXNz aW5mbykpOwogCXRydXNzaW5mby0+b3V0ZmlsZSA9IHN0ZGVycjsKIAl0cnVzc2luZm8tPnN0cnNp emUgPSAzMjsKKwl0cnVzc2luZm8tPnByX3doeSA9IFNfTk9ORTsKIAogCXdoaWxlICgoYyA9IGdl dG9wdChhYywgYXYsICJwOm86ZmFlZERzOlMiKSkgIT0gLTEpIHsKIAkJc3dpdGNoIChjKSB7CkBA IC0yNDUsNiArMjM5LDcgQEAKIAkJc2lnbmFsKFNJR1RFUk0sIFNJR19JR04pOwogCQlzaWduYWwo U0lHUVVJVCwgU0lHX0lHTik7CiAJfSBlbHNlIHsKKwkJc3RhcnRfdHJhY2luZyh0cnVzc2luZm8t PnBpZCk7CiAJCXNpZ25hbChTSUdJTlQsIHJlc3RvcmVfcHJvYyk7CiAJCXNpZ25hbChTSUdURVJN LCByZXN0b3JlX3Byb2MpOwogCQlzaWduYWwoU0lHUVVJVCwgcmVzdG9yZV9wcm9jKTsKQEAgLTI1 NywxOCArMjUyLDkgQEAKIAkgKi8KIAogU1RBUlRfVFJBQ0U6Ci0JUHJvY2ZkID0gc3RhcnRfdHJh Y2luZygKLQkgICAgdHJ1c3NpbmZvLT5waWQsIGluaXRpYWxfb3BlbiwKLQkgICAgU19FWEVDIHwg U19TQ0UgfCBTX1NDWCB8IFNfQ09SRSB8IFNfRVhJVCB8Ci0JICAgICgodHJ1c3NpbmZvLT5mbGFn cyAmIE5PU0lHUykgPyAwIDogU19TSUcpLAotCSAgICAoKHRydXNzaW5mby0+ZmxhZ3MgJiBGT0xM T1dGT1JLUykgPyBQRl9GT1JLIDogMCkpOworCWZ1bmNzID0gc2V0X2V0eXBlKHRydXNzaW5mbyk7 CisKIAlpbml0aWFsX29wZW4gPSAwOwotCWlmIChQcm9jZmQgPT0gLTEpCi0JCXJldHVybiAoMCk7 Ci0KLQlwZnMud2h5ID0gMDsKLQotCWZ1bmNzID0gc2V0X2V0eXBlKHRydXNzaW5mbyk7CiAJLyoK IAkgKiBBdCB0aGlzIHBvaW50LCBpdCdzIGEgc2ltcGxlIGxvb3AsIHdhaXRpbmcgZm9yIHRoZSBw cm9jZXNzIHRvCiAJICogc3RvcCwgZmluZGluZyBvdXQgd2h5LCBwcmludGluZyBvdXQgd2h5LCBh bmQgdGhlbiBjb250aW51aW5nIGl0LgpAQCAtMjc4LDExOCArMjY0LDkyIEBACiAJY2xvY2tfZ2V0 dGltZShDTE9DS19SRUFMVElNRSwgJnRydXNzaW5mby0+c3RhcnRfdGltZSk7CiAKIAlkbyB7Ci0J CWludCB2YWwgPSAwOwogCQlzdHJ1Y3QgdGltZXNwZWMgdGltZWRpZmY7CisJCXdhaXRldmVudCh0 cnVzc2luZm8pOwogCi0JCWlmIChpb2N0bChQcm9jZmQsIFBJT0NXQUlULCAmcGZzKSA9PSAtMSkK LQkJCXdhcm4oIlBJT0NXQUlUIHRvcCBvZiBsb29wIik7Ci0JCWVsc2UgewotCQkJc3dpdGNoKGkg PSBwZnMud2h5KSB7Ci0JCQljYXNlIFNfU0NFOgotCQkJCWZ1bmNzLT5lbnRlcl9zeXNjYWxsKHRy dXNzaW5mbywgcGZzLnZhbCk7Ci0JCQkJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwKLQkJ CQkgICAgJnRydXNzaW5mby0+YmVmb3JlKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgU19TQ1g6Ci0J CQkJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwKLQkJCQkgICAgJnRydXNzaW5mby0+YWZ0 ZXIpOwotCQkJCS8qCi0JCQkJICogVGhpcyBpcyBzbyB3ZSBkb24ndCBnZXQgdHdvIG1lc3NhZ2Vz IGZvcgotCQkJCSAqIGFuIGV4ZWMgLS0gb25lIGZvciB0aGUgU19FWEVDLCBhbmQgb25lIGZvcgot CQkJCSAqIHRoZSBzeXNjYWxsIGV4aXQuICBJdCBhbHNvLCBjb252ZW5pZW50bHksCi0JCQkJICog ZW5zdXJlcyB0aGF0IHRoZSBmaXJzdCBtZXNzYWdlIHByaW50ZWQgb3V0Ci0JCQkJICogaXNuJ3Qg dGhlIHJldHVybi1mcm9tLXN5c2NhbGwgdXNlZCB0bwotCQkJCSAqIGNyZWF0ZSB0aGUgcHJvY2Vz cy4KLQkJCQkgKi8KLQkJCQlpZiAoaW5fZXhlYykgewotCQkJCQlpbl9leGVjID0gMDsKLQkJCQkJ YnJlYWs7Ci0JCQkJfQorCQlzd2l0Y2goaSA9IHRydXNzaW5mby0+cHJfd2h5KSB7CisJCWNhc2Ug U19TQ0U6CisJCQlmdW5jcy0+ZW50ZXJfc3lzY2FsbCh0cnVzc2luZm8sIE1BWEFSR1MpOworCQkJ Y2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwKKwkJCSAgICAmdHJ1c3NpbmZvLT5iZWZvcmUp OworCQkJYnJlYWs7CisJCWNhc2UgU19TQ1g6CisJCQljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxU SU1FLAorCQkJICAgICZ0cnVzc2luZm8tPmFmdGVyKTsKIAotCQkJCWlmICh0cnVzc2luZm8tPmlu X2ZvcmsgJiYKLQkJCQkgICAgKHRydXNzaW5mby0+ZmxhZ3MgJiBGT0xMT1dGT1JLUykpIHsKLQkJ CQkJaW50IGNoaWxkcGlkOworCQkJaWYgKHRydXNzaW5mby0+aW5fZm9yayAmJgorCQkJICAgICh0 cnVzc2luZm8tPmZsYWdzICYgRk9MTE9XRk9SS1MpKSB7CisJCQkJaW50IGNoaWxkcGlkOwogCi0J CQkJCXRydXNzaW5mby0+aW5fZm9yayA9IDA7Ci0JCQkJCWNoaWxkcGlkID0KLQkJCQkJICAgIGZ1 bmNzLT5leGl0X3N5c2NhbGwodHJ1c3NpbmZvLAotCQkJCQkJcGZzLnZhbCk7CisJCQkJdHJ1c3Np bmZvLT5pbl9mb3JrID0gMDsKKwkJCQljaGlsZHBpZCA9CisJCQkJICAgIGZ1bmNzLT5leGl0X3N5 c2NhbGwodHJ1c3NpbmZvLAorCQkJCQl0cnVzc2luZm8tPnByX2RhdGEpOwogCi0JCQkJCS8qCi0J CQkJCSAqIEZvcmsgYSBuZXcgY29weSBvZiBvdXJzZWxmIHRvIHRyYWNlCi0JCQkJCSAqIHRoZSBj aGlsZCBvZiB0aGUgb3JpZ2luYWwgdHJhY2VkCi0JCQkJCSAqIHByb2Nlc3MuCi0JCQkJCSAqLwot CQkJCQlpZiAoZm9yaygpID09IDApIHsKLQkJCQkJCXRydXNzaW5mby0+cGlkID0gY2hpbGRwaWQ7 Ci0JCQkJCQlnb3RvIFNUQVJUX1RSQUNFOwotCQkJCQl9Ci0JCQkJCWJyZWFrOworCQkJCS8qCisJ CQkJICogRm9yayBhIG5ldyBjb3B5IG9mIG91cnNlbGYgdG8gdHJhY2UKKwkJCQkgKiB0aGUgY2hp bGQgb2YgdGhlIG9yaWdpbmFsIHRyYWNlZAorCQkJCSAqIHByb2Nlc3MuCisJCQkJICovCisJCQkJ aWYgKGZvcmsoKSA9PSAwKSB7CisJCQkJCXRydXNzaW5mby0+cGlkID0gY2hpbGRwaWQ7CisJCQkJ CXN0YXJ0X3RyYWNpbmcodHJ1c3NpbmZvLT5waWQpOworCQkJCQlnb3RvIFNUQVJUX1RSQUNFOwog CQkJCX0KLQkJCQlmdW5jcy0+ZXhpdF9zeXNjYWxsKHRydXNzaW5mbywgcGZzLnZhbCk7CiAJCQkJ YnJlYWs7Ci0JCQljYXNlIFNfU0lHOgotCQkJCWlmICh0cnVzc2luZm8tPmZsYWdzICYgRk9MTE9X Rk9SS1MpCi0JCQkJCWZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiJTVkOiAiLAotCQkJCQkg ICAgdHJ1c3NpbmZvLT5waWQpOwotCQkJCWlmICh0cnVzc2luZm8tPmZsYWdzICYgQUJTT0xVVEVU SU1FU1RBTVBTKSB7Ci0JCQkJCXRpbWVzcGVjc3VidCgmdHJ1c3NpbmZvLT5hZnRlciwKLQkJCQkJ ICAgICZ0cnVzc2luZm8tPnN0YXJ0X3RpbWUsICZ0aW1lZGlmZik7Ci0JCQkJCWZwcmludGYodHJ1 c3NpbmZvLT5vdXRmaWxlLCAiJWxkLiUwOWxkICIsCi0JCQkJCSAgICAobG9uZyl0aW1lZGlmZi50 dl9zZWMsCi0JCQkJCSAgICB0aW1lZGlmZi50dl9uc2VjKTsKLQkJCQl9Ci0JCQkJaWYgKHRydXNz aW5mby0+ZmxhZ3MgJiBSRUxBVElWRVRJTUVTVEFNUFMpIHsKLQkJCQkJdGltZXNwZWNzdWJ0KCZ0 cnVzc2luZm8tPmFmdGVyLAotCQkJCQkgICAgJnRydXNzaW5mby0+YmVmb3JlLCAmdGltZWRpZmYp OwotCQkJCQlmcHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIiVsZC4lMDlsZCAiLAotCQkJCQkg ICAgKGxvbmcpdGltZWRpZmYudHZfc2VjLAotCQkJCQkgICAgdGltZWRpZmYudHZfbnNlYyk7Ci0J CQkJfQotCQkJCXNpZ25hbWUgPSBzdHJzaWcocGZzLnZhbCk7Ci0JCQkJZnByaW50Zih0cnVzc2lu Zm8tPm91dGZpbGUsCi0JCQkJICAgICJTSUdOQUwgJWx1ICglcylcbiIsIHBmcy52YWwsCi0JCQkJ ICAgIHNpZ25hbWUgPT0gTlVMTCA/ICI/IiA6IHNpZ25hbWUpOwotCQkJCWZyZWUoc2lnbmFtZSk7 Ci0JCQkJc2lnZXhpdCA9IHBmcy52YWw7CisJCQl9CisJCQlmdW5jcy0+ZXhpdF9zeXNjYWxsKHRy dXNzaW5mbywgTUFYQVJHUyk7CisJCQlicmVhazsKKwkJY2FzZSBTX1NJRzoKKwkJCWlmICh0cnVz c2luZm8tPmZsYWdzICYgTk9TSUdTKQogCQkJCWJyZWFrOwotCQkJY2FzZSBTX0VYSVQ6Ci0JCQkJ aWYgKHRydXNzaW5mby0+ZmxhZ3MgJiBGT0xMT1dGT1JLUykKLQkJCQkJZnByaW50Zih0cnVzc2lu Zm8tPm91dGZpbGUsICIlNWQ6ICIsCi0JCQkJCSAgICB0cnVzc2luZm8tPnBpZCk7Ci0JCQkJaWYg KHRydXNzaW5mby0+ZmxhZ3MgJiBBQlNPTFVURVRJTUVTVEFNUFMpIHsKLQkJCQkJdGltZXNwZWNz dWJ0KCZ0cnVzc2luZm8tPmFmdGVyLAotCQkJCQkgICAgJnRydXNzaW5mby0+c3RhcnRfdGltZSwg JnRpbWVkaWZmKTsKLQkJCQkJZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICIlbGQuJTA5bGQg IiwKLQkJCQkJICAgIChsb25nKXRpbWVkaWZmLnR2X3NlYywKLQkJCQkJICAgIHRpbWVkaWZmLnR2 X25zZWMpOwotCQkJCX0KLQkJCQlpZiAodHJ1c3NpbmZvLT5mbGFncyAmIFJFTEFUSVZFVElNRVNU QU1QUykgewotCQkJCSAgdGltZXNwZWNzdWJ0KCZ0cnVzc2luZm8tPmFmdGVyLAotCQkJCSAgICAg ICZ0cnVzc2luZm8tPmJlZm9yZSwgJnRpbWVkaWZmKTsKLQkJCQkgIGZwcmludGYodHJ1c3NpbmZv LT5vdXRmaWxlLCAiJWxkLiUwOWxkICIsCi0JCQkJICAgIChsb25nKXRpbWVkaWZmLnR2X3NlYywg dGltZWRpZmYudHZfbnNlYyk7Ci0JCQkJfQotCQkJCWZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxl LAotCQkJCSAgICAicHJvY2VzcyBleGl0LCBydmFsID0gJWx1XG4iLCBwZnMudmFsKTsKLQkJCQli cmVhazsKLQkJCWNhc2UgU19FWEVDOgotCQkJCWZ1bmNzID0gc2V0X2V0eXBlKHRydXNzaW5mbyk7 Ci0JCQkJaW5fZXhlYyA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWZwcmludGYo dHJ1c3NpbmZvLT5vdXRmaWxlLAotCQkJCSAgICAiUHJvY2VzcyBzdG9wcGVkIGJlY2F1c2Ugb2Y6 ICAlZFxuIiwgaSk7Ci0JCQkJYnJlYWs7CisJCQlpZiAodHJ1c3NpbmZvLT5mbGFncyAmIEZPTExP V0ZPUktTKQorCQkJCWZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiJTVkOiAiLAorCQkJCSAg ICB0cnVzc2luZm8tPnBpZCk7CisJCQlpZiAodHJ1c3NpbmZvLT5mbGFncyAmIEFCU09MVVRFVElN RVNUQU1QUykgeworCQkJCXRpbWVzcGVjc3VidCgmdHJ1c3NpbmZvLT5hZnRlciwKKwkJCQkgICAg JnRydXNzaW5mby0+c3RhcnRfdGltZSwgJnRpbWVkaWZmKTsKKwkJCQlmcHJpbnRmKHRydXNzaW5m by0+b3V0ZmlsZSwgIiVsZC4lMDlsZCAiLAorCQkJCSAgICAobG9uZyl0aW1lZGlmZi50dl9zZWMs CisJCQkJICAgIHRpbWVkaWZmLnR2X25zZWMpOworCQkJfQorCQkJaWYgKHRydXNzaW5mby0+Zmxh Z3MgJiBSRUxBVElWRVRJTUVTVEFNUFMpIHsKKwkJCQl0aW1lc3BlY3N1YnQoJnRydXNzaW5mby0+ YWZ0ZXIsCisJCQkJICAgICZ0cnVzc2luZm8tPmJlZm9yZSwgJnRpbWVkaWZmKTsKKwkJCQlmcHJp bnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIiVsZC4lMDlsZCAiLAorCQkJCSAgICAobG9uZyl0aW1l ZGlmZi50dl9zZWMsCisJCQkJICAgIHRpbWVkaWZmLnR2X25zZWMpOworCQkJfQorCQkJc2lnbmFt ZSA9IHN0cnNpZyh0cnVzc2luZm8tPnByX2RhdGEpOworCQkJZnByaW50Zih0cnVzc2luZm8tPm91 dGZpbGUsCisJCQkgICAgIlNJR05BTCAldSAoJXMpXG4iLCB0cnVzc2luZm8tPnByX2RhdGEsCisJ CQkgICAgc2lnbmFtZSA9PSBOVUxMID8gIj8iIDogc2lnbmFtZSk7CisJCQlmcmVlKHNpZ25hbWUp OworCQkJYnJlYWs7CisJCWNhc2UgU19FWElUOgorCQkJaWYgKHRydXNzaW5mby0+ZmxhZ3MgJiBG T0xMT1dGT1JLUykKKwkJCQlmcHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIiU1ZDogIiwKKwkJ CQkgICAgdHJ1c3NpbmZvLT5waWQpOworCQkJaWYgKHRydXNzaW5mby0+ZmxhZ3MgJiBBQlNPTFVU RVRJTUVTVEFNUFMpIHsKKwkJCQl0aW1lc3BlY3N1YnQoJnRydXNzaW5mby0+YWZ0ZXIsCisJCQkJ ICAgICZ0cnVzc2luZm8tPnN0YXJ0X3RpbWUsICZ0aW1lZGlmZik7CisJCQkJZnByaW50Zih0cnVz c2luZm8tPm91dGZpbGUsICIlbGQuJTA5bGQgIiwKKwkJCQkgICAgKGxvbmcpdGltZWRpZmYudHZf c2VjLAorCQkJCSAgICB0aW1lZGlmZi50dl9uc2VjKTsKKwkJCX0KKwkJCWlmICh0cnVzc2luZm8t PmZsYWdzICYgUkVMQVRJVkVUSU1FU1RBTVBTKSB7CisJCQkgIHRpbWVzcGVjc3VidCgmdHJ1c3Np bmZvLT5hZnRlciwKKwkJCSAgICAgICZ0cnVzc2luZm8tPmJlZm9yZSwgJnRpbWVkaWZmKTsKKwkJ CSAgZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICIlbGQuJTA5bGQgIiwKKwkJCSAgICAobG9u Zyl0aW1lZGlmZi50dl9zZWMsIHRpbWVkaWZmLnR2X25zZWMpOwogCQkJfQorCQkJZnByaW50Zih0 cnVzc2luZm8tPm91dGZpbGUsCisJCQkgICAgInByb2Nlc3MgZXhpdCwgcnZhbCA9ICV1XG4iLCB0 cnVzc2luZm8tPnByX2RhdGEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKIAkJ fQotCQlpZiAoaW9jdGwoUHJvY2ZkLCBQSU9DQ09OVCwgdmFsKSA9PSAtMSkgewotCQkJaWYgKGtp bGwodHJ1c3NpbmZvLT5waWQsIDApID09IC0xICYmIGVycm5vID09IEVTUkNIKQotCQkJCWJyZWFr OwotCQkJZWxzZQotCQkJCXdhcm4oIlBJT0NDT05UIik7Ci0JCX0KLQl9IHdoaWxlIChwZnMud2h5 ICE9IFNfRVhJVCk7CisJfSB3aGlsZSAodHJ1c3NpbmZvLT5wcl93aHkgIT0gU19FWElUKTsKIAlm Zmx1c2godHJ1c3NpbmZvLT5vdXRmaWxlKTsKIAlpZiAoc2lnZXhpdCkgewogCQlzdHJ1Y3Qgcmxp bWl0IHJscDsKPT09PSAvL2RlcG90L3ZlbmRvci9mcmVlYnNkL3NyYy91c3IuYmluL3RydXNzL3Bv d2VycGMtZmJzZC5jIzEgKHRleHQra28pIC0gLy9kZXBvdC91c2VyL2hvd2FyZHN1L3RydXNzL3Vz ci5iaW4vdHJ1c3MvcG93ZXJwYy1mYnNkLmMjMyAodGV4dCtrbykgPT09PSBjb250ZW50CkBAIC00 MSw4ICs0MSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5 cy9pb2N0bC5oPgotI2luY2x1ZGUgPHN5cy9waW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNl Lmg+CiAjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KIAogI2luY2x1ZGUgPG1hY2hpbmUvcmVnLmg+ CkBAIC02Miw3ICs2MSw2IEBACiAjaW5jbHVkZSAic3lzY2FsbC5oIgogI2luY2x1ZGUgImV4dGVy bi5oIgogCi1zdGF0aWMgaW50IGZkID0gLTE7CiBzdGF0aWMgaW50IGNwaWQgPSAtMTsKIAogI2lu Y2x1ZGUgInN5c2NhbGxzLmgiCkBAIC0xMjAsMTkgKzExOCwxMCBAQAogICB1bnNpZ25lZCBpbnQg cmVnYXJnczsKICAgc3RydWN0IHN5c2NhbGwgKnNjOwogCi0gIGlmIChmZCA9PSAtMSB8fCB0cnVz c2luZm8tPnBpZCAhPSBjcGlkKSB7Ci0gICAgc3ByaW50ZihidWYsICIvcHJvYy8lZC9yZWdzIiwg dHJ1c3NpbmZvLT5waWQpOwotICAgIGZkID0gb3BlbihidWYsIE9fUkRXUik7Ci0gICAgaWYgKGZk ID09IC0xKSB7Ci0gICAgICBmcHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIi0tIENBTk5PVCBP UEVOIFJFR0lTVEVSUyAtLVxuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGNwaWQgPSB0 cnVzc2luZm8tPnBpZDsKLSAgfQorICBjcGlkID0gdHJ1c3NpbmZvLT5waWQ7CiAKICAgY2xlYXJf ZnNjKCk7Ci0gIGxzZWVrKGZkLCAwTCwgMCk7Ci0gIGlmIChyZWFkKGZkLCAmcmVncywgc2l6ZW9m KHJlZ3MpKSAhPSBzaXplb2YocmVncykpIHsKKyAgaWYgKHB0cmFjZShQVF9HRVRSRUdTLCBjcGlk LCAoY2FkZHJfdCkmcmVncywgMCkgPCAwKSB7CiAgICAgZnByaW50Zih0cnVzc2luZm8tPm91dGZp bGUsICItLSBDQU5OT1QgUkVBRCBSRUdJU1RFUlMgLS1cbiIpOwogICAgIHJldHVybjsKICAgfQpA QCAtMTc2LDkgKzE2NSwxNiBAQAogICBmc2MuYXJncyA9IG1hbGxvYygoMStuYXJncykgKiBzaXpl b2YodW5zaWduZWQgbG9uZykpOwogCiAgIGlmIChuYXJncyA+IHJlZ2FyZ3MpIHsKKyAgICBzdHJ1 Y3QgcHRyYWNlX2lvX2Rlc2MgaW9yZXF1ZXN0OwogICAgIG1lbW1vdmUoJmZzYy5hcmdzWzBdLCBh cmdzLCByZWdhcmdzICogc2l6ZW9mKGZzYy5hcmdzWzBdKSk7Ci0gICAgbHNlZWsoUHJvY2ZkLCBy ZWdzLmZpeHJlZ1sxXSArIDgsIFNFRUtfU0VUKTsKLSAgICByZWFkKFByb2NmZCwgJmZzYy5hcmdz W3JlZ2FyZ3NdLCAobmFyZ3MgLSByZWdhcmdzKSAqIHNpemVvZihmc2MuYXJnc1swXSkpOworCisg ICAgaW9yZXF1ZXN0LnBpb2Rfb3AgPSBQSU9EX1JFQURfRDsKKyAgICBpb3JlcXVlc3QucGlvZF9v ZmZzID0gKHZvaWQgKikocmVncy5maXhyZWdbMV0gKyA4KTsKKyAgICBpb3JlcXVlc3QucGlvZF9h ZGRyID0gJmZzYy5hcmdzW3JlZ2FyZ3NdOworICAgIGlvcmVxdWVzdC5waW9kX2xlbiA9IChuYXJn cyAtIHJlZ2FyZ3MpICogc2l6ZW9mKGZzYy5hcmdzWzBdKTsKKyAgICBwdHJhY2UoUFRfSU8sIGNw aWQsIChjYWRkcl90KSZpb3JlcXVlc3QsIDApOworICAgIGlmIChpb3JlcXVlc3QucGlvZF9sZW4g PT0gMCkKKyAgICAgICByZXR1cm47CiAgIH0gZWxzZSB7CiAgICAgbWVtbW92ZSgmZnNjLmFyZ3Nb MF0sIGFyZ3MsIG5hcmdzICogc2l6ZW9mKGZzYy5hcmdzWzBdKSk7CiAgIH0KQEAgLTIyMCw3ICsy MTYsNyBAQAogCSAgICAgIGkgPCAoZnNjLm5hcmdzIC0gMSkgPyAiLCIgOiAiIik7CiAjZW5kaWYK ICAgICAgIGlmIChzYyAmJiAhKHNjLT5hcmdzW2ldLnR5cGUgJiBPVVQpKSB7Ci0JZnNjLnNfYXJn c1tpXSA9IHByaW50X2FyZyhQcm9jZmQsICZzYy0+YXJnc1tpXSwgZnNjLmFyZ3MsIDAsIHRydXNz aW5mbyk7CisJZnNjLnNfYXJnc1tpXSA9IHByaW50X2FyZygmc2MtPmFyZ3NbaV0sIGZzYy5hcmdz LCAwLCB0cnVzc2luZm8pOwogICAgICAgfQogICAgIH0KICNpZiBERUJVRwpAQCAtMjc1LDI1ICsy NzEsMTUgQEAKIGxvbmcKIHBvd2VycGNfc3lzY2FsbF9leGl0KHN0cnVjdCB0cnVzc2luZm8gKnRy dXNzaW5mbywgaW50IHN5c2NhbGxfbnVtIF9fdW51c2VkKQogewotICBjaGFyIGJ1ZlszMl07CiAg IHN0cnVjdCByZWcgcmVnczsKICAgbG9uZyByZXR2YWw7CiAgIGludCBpOwogICBpbnQgZXJyb3Jw OwogICBzdHJ1Y3Qgc3lzY2FsbCAqc2M7CiAKLSAgaWYgKGZkID09IC0xIHx8IHRydXNzaW5mby0+ cGlkICE9IGNwaWQpIHsKLSAgICBzcHJpbnRmKGJ1ZiwgIi9wcm9jLyVkL3JlZ3MiLCB0cnVzc2lu Zm8tPnBpZCk7Ci0gICAgZmQgPSBvcGVuKGJ1ZiwgT19SRE9OTFkpOwotICAgIGlmIChmZCA9PSAt MSkgewotICAgICAgZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICItLSBDQU5OT1QgT1BFTiBS RUdJU1RFUlMgLS1cbiIpOwotICAgICAgcmV0dXJuICgtMSk7Ci0gICAgfQotICAgIGNwaWQgPSB0 cnVzc2luZm8tPnBpZDsKLSAgfQorICBjcGlkID0gdHJ1c3NpbmZvLT5waWQ7CiAKLSAgbHNlZWso ZmQsIDBMLCAwKTsKLSAgaWYgKHJlYWQoZmQsICZyZWdzLCBzaXplb2YocmVncykpICE9IHNpemVv ZihyZWdzKSkgeworICBpZiAocHRyYWNlKFBUX0dFVFJFR1MsIGNwaWQsIChjYWRkcl90KSZyZWdz LCAwKSA8IDApIHsKICAgICBmcHJpbnRmKHRydXNzaW5mby0+b3V0ZmlsZSwgIlxuIik7CiAgICAg cmV0dXJuICgtMSk7CiAgIH0KQEAgLTMzMiw3ICszMTgsNyBAQAogCWlmIChlcnJvcnApCiAJICBh c3ByaW50ZigmdGVtcCwgIjB4JWx4IiwgZnNjLmFyZ3Nbc2MtPmFyZ3NbaV0ub2Zmc2V0XSk7CiAJ ZWxzZQotCSAgdGVtcCA9IHByaW50X2FyZyhQcm9jZmQsICZzYy0+YXJnc1tpXSwgZnNjLmFyZ3Ms IHJldHZhbCwgdHJ1c3NpbmZvKTsKKwkgIHRlbXAgPSBwcmludF9hcmcoJnNjLT5hcmdzW2ldLCBm c2MuYXJncywgcmV0dmFsLCB0cnVzc2luZm8pOwogCWZzYy5zX2FyZ3NbaV0gPSB0ZW1wOwogICAg ICAgfQogICAgIH0KPT09PSAvL2RlcG90L3ZlbmRvci9mcmVlYnNkL3NyYy91c3IuYmluL3RydXNz L3NldHVwLmMjMTEgKHRleHQra28pIC0gLy9kZXBvdC91c2VyL2hvd2FyZHN1L3RydXNzL3Vzci5i aW4vdHJ1c3Mvc2V0dXAuYyM1ICh0ZXh0K2tvKSA9PT09IGNvbnRlbnQKQEAgLTM4LDExICszOCwx MiBAQAogICovCiAKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvaW9jdGwu aD4KLSNpbmNsdWRlIDxzeXMvcGlvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5j bHVkZSA8c3lzL3B0cmFjZS5oPgogI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAKICNpbmNsdWRlIDxl cnIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8 c2lnbmFsLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTUxLDEwICs1MiwxMiBAQAogI2luY2x1 ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAorI2luY2x1ZGUgPG1hY2hpbmUvcmVn Lmg+CisKICNpbmNsdWRlICJ0cnVzcy5oIgogI2luY2x1ZGUgImV4dGVybi5oIgogCi1zdGF0aWMg aW50IGV2ZmxhZ3MgPSAwOworc3RhdGljIGludCBjaGlsZF9waWQ7CiAKIC8qCiAgKiBzZXR1cF9h bmRfd2FpdCgpIGlzIGNhbGxlZCB0byBzdGFydCBhIHByb2Nlc3MuICBBbGwgaXQgcmVhbGx5IGRv ZXMKQEAgLTY2LDc1ICs2OSwyOCBAQAogaW50CiBzZXR1cF9hbmRfd2FpdChjaGFyICpjb21tYW5k W10pCiB7Ci0Jc3RydWN0IHByb2Nmc19zdGF0dXMgcGZzOwotCWNoYXIgYnVmWzMyXTsKLQlpbnQg ZmQ7CiAJaW50IHBpZDsKLQlpbnQgZmxhZ3M7Ci0JaW50IGxvb3A7CisJaW50IHdhaXR2YWw7CiAK LQlwaWQgPSBmb3JrKCk7CisJcGlkID0gdmZvcmsoKTsKIAlpZiAocGlkID09IC0xKSB7CiAJCWVy cigxLCAiZm9yayBmYWlsZWQiKTsKIAl9CiAJaWYgKHBpZCA9PSAwKSB7CS8qIENoaWxkICovCi0J CWludCBtYXNrID0gU19FWEVDIHwgU19FWElUOwotCQlmZCA9IG9wZW4oIi9wcm9jL2N1cnByb2Mv bWVtIiwgT19XUk9OTFkpOwotCQlpZiAoZmQgPT0gLTEpCi0JCQllcnIoMiwgImNhbm5vdCBvcGVu IC9wcm9jL2N1cnByb2MvbWVtIik7Ci0JCWZjbnRsKGZkLCBGX1NFVEZELCAxKTsKLQkJaWYgKGlv Y3RsKGZkLCBQSU9DQklTLCBtYXNrKSA9PSAtMSkKLQkJCWVycigzLCAiUElPQ0JJUyIpOwotCQlm bGFncyA9IFBGX0xJTkdFUjsKLQkJLyoKLQkJICogVGhlIFBGX0xJTkdFUiBmbGFnIHRlbGxzIHBy b2NmcyBub3QgdG8gd2FrZSB1cCB0aGUKLQkJICogcHJvY2VzcyBvbiBsYXN0IGNsb3NlOyBub3Jt YWxseSwgdGhpcyBpcyB0aGUgYmVoYXZpb3VyCi0JCSAqIHdlIHdhbnQuCi0JCSAqLwotCQlpZiAo aW9jdGwoZmQsIFBJT0NTRkwsIGZsYWdzKSA9PSAtMSkKLQkJCXdhcm4oImNhbm5vdCBzZXQgUEZf TElOR0VSIik7CisJCXB0cmFjZShQVF9UUkFDRV9NRSwgMCwgMCwgMCk7CisJCXNldHBnaWQgKDAs IDApOyAKIAkJZXhlY3ZwKGNvbW1hbmRbMF0sIGNvbW1hbmQpOwotCQltYXNrID0gfjA7Ci0JCWlv Y3RsKGZkLCBQSU9DQklDLCB+MCk7CiAJCWVycig0LCAiZXhlY3ZwICVzIiwgY29tbWFuZFswXSk7 CiAJfQorCQogCS8qIE9ubHkgaW4gdGhlIHBhcmVudCBoZXJlICovCi0KLQlpZiAod2FpdHBpZChw aWQsIE5VTEwsIFdOT0hBTkcpICE9IDApIHsKLQkJLyoKLQkJICogUHJvY2VzcyBleGl0ZWQgYmVm b3JlIGl0IGdvdCB0byB1cyAtLSBtZWFuaW5nIHRoZSBleGVjIGZhaWxlZAotCQkgKiBtaXNlcmFi bHkgLS0gc28gd2UganVzdCBxdWlldGx5IGV4aXQuCi0JCSAqLwotCQlleGl0KDEpOworCWlmICh3 YWl0cGlkKHBpZCwgJndhaXR2YWwsIDApIDwgLTEpIHsKKwkJZXJyKDEsICJ1bmV4cGVjdCBzdG9w IGluIHdhaXRwaWQiKTsKKwkJcmV0dXJuIDA7CiAJfQogCi0Jc3ByaW50ZihidWYsICIvcHJvYy8l ZC9tZW0iLCBwaWQpOwotCi0JLyogVHJ5IDYgdGltZXMgdG8gdHJhY2Ugb3VyIGNoaWxkLCB3YWl0 aW5nIDEvMiBzZWNvbmQgZWFjaCB0aW1lICovCi0JZm9yIChsb29wPTYgOzsgbG9vcC0tKSB7Ci0J CWlmIChsb29wICE9IDYpCi0JCQl1c2xlZXAoNTAwMDAwKTsKLQkJaWYgKChmZCA9IG9wZW4oYnVm LCBPX1JEV1IpKSA9PSAtMSkgewotCQkJaWYgKGxvb3AgPiAwKQotCQkJCWNvbnRpbnVlOwotCQkJ ZWxzZQotCQkJCWVycig1LCAiY2Fubm90IG9wZW4xICVzIiwgYnVmKTsKLQkJfQotCQlpZiAoaW9j dGwoZmQsIFBJT0NXQUlULCAmcGZzKSA9PSAtMSkgewotCQkJaWYgKGxvb3AgPj0gMCkKLQkJCQlj b250aW51ZTsKLQkJCWVsc2UKLQkJCQllcnIoNiwgIlBJT0NXQUlUIik7Ci0JCX0KLQkJaWYgKHBm cy53aHkgPT0gU19FWElUKSB7Ci0JCQl3YXJueCgicHJvY2VzcyBleGl0ZWQgYmVmb3JlIGV4ZWMn aW5nIik7Ci0JCQlpb2N0bChmZCwgUElPQ0NPTlQsIDApOwotCQkJd2FpdCgwKTsKLQkJCWV4aXQo Nyk7Ci0JCX0gZWxzZQotCQkJYnJlYWs7Ci0JfQotCWNsb3NlKGZkKTsKKwljaGlsZF9waWQgPSBw aWQ7CisJCiAJcmV0dXJuIChwaWQpOwogfQogCkBAIC0xNDUsNDUgKzEwMSwyNCBAQAogICovCiAK IGludAotc3RhcnRfdHJhY2luZyhpbnQgcGlkLCBpbnQgZmFpbGlzZmF0YWwsIGludCBldmVudGZs YWdzLCBpbnQgZmxhZ3MpCitzdGFydF90cmFjaW5nKGludCBwaWQpCiB7Ci0JaW50IGZkOwotCWNo YXIgYnVmWzMyXTsKLQlzdHJ1Y3QgcHJvY2ZzX3N0YXR1cyB0bXA7CisJaW50IHdhaXR2YWw7CisJ aW50IHJldDsKKwlpbnQgcmV0cnkgPSAxMDsKIAotCXNwcmludGYoYnVmLCAiL3Byb2MvJWQvbWVt IiwgcGlkKTsKLQkvKiB1c2xlZXAoNTAwMDAwKTsgKi8KKwlkbyB7CisJCXJldCA9IHB0cmFjZShQ VF9BVFRBQ0gsIHBpZCwgTlVMTCwgMCk7CisJCXVzbGVlcCgyMDApOworCX0gd2hpbGUocmV0ICYm IHJldHJ5LS0gPiAwKTsKKwlpZiAocmV0KQorCQllcnIoNSwgImNhbiBub3QgYXR0YWNoIHRvIHRh cmdldCBwcm9jZXNzIik7CiAKLQlmZCA9IG9wZW4oYnVmLCBPX1JEV1IpOwotCWlmIChmZCA9PSAt MSkgewotCQkvKgotCQkgKiBUaGUgcHJvY2VzcyBtYXkgaGF2ZSBydW4gYXdheSBiZWZvcmUgd2Ug Y291bGQgc3RhcnQgLS0gdGhpcwotCQkgKiBoYXBwZW5zIHdpdGggU1VHSUQgcHJvZ3JhbXMuICBT byB3ZSBuZWVkIHRvIHNlZSBpZiBpdCBzdGlsbAotCQkgKiBleGlzdHMgYmVmb3JlIHdlIGNvbXBs YWluIGJpdHRlcmx5LgotCQkgKi8KLQkJaWYgKCFmYWlsaXNmYXRhbCAmJiBraWxsKHBpZCwgMCkg PT0gLTEpCi0JCQlyZXR1cm4gKC0xKTsKLQkJZXJyKDgsICJjYW5ub3Qgb3BlbjIgJXMiLCBidWYp OwotCX0KKwljaGlsZF9waWQgPSBwaWQ7CQorCWlmICh3YWl0cGlkKHBpZCwgJndhaXR2YWwsIDAp IDwgLTEpIAorCQllcnIoMSwgIlVuZXhwZWN0IHN0b3AgaW4gd2FpdHBpZCIpOwogCi0JaWYgKGlv Y3RsKGZkLCBQSU9DU1RBVFVTLCAmdG1wKSA9PSAtMSkgewotCQllcnIoMTAsICJjYW5ub3QgZ2V0 IHByb2NmcyBzdGF0dXMgc3RydWN0Iik7Ci0JfQotCWV2ZmxhZ3MgPSB0bXAuZXZlbnRzOwotCi0J aWYgKGlvY3RsKGZkLCBQSU9DQklTLCBldmVudGZsYWdzKSA9PSAtMSkKLQkJZXJyKDksICJjYW5u b3Qgc2V0IHByb2NmcyBldmVudCBiaXQgbWFzayIpOwotCi0JLyoKLQkgKiBUaGlzIGNsZWFycyB0 aGUgUEZfTElOR0VSIHNldCBhYm92ZSBpbiBzZXR1cF9hbmRfd2FpdCgpOwotCSAqIGlmIHRydXNz IGhhcHBlbnMgdG8gZGllIGJlZm9yZSB0aGlzLCB0aGVuIHRoZSBwcm9jZXNzCi0JICogbmVlZHMg dG8gYmUgd29rZW4gdXAgdmlhIHByb2NjdGwuCi0JICovCi0KLQlpZiAoaW9jdGwoZmQsIFBJT0NT RkwsIGZsYWdzKSA9PSAtMSkKLQkJd2FybigiY2Fubm90IGNsZWFyIFBGX0xJTkdFUiIpOwotCi0J cmV0dXJuIChmZCk7CisJcmV0dXJuICgwKTsKIH0KIAogLyoKQEAgLTE5MywxMCArMTI4LDUxIEBA CiAgKiBwcm9jZXNzLgogICovCiB2b2lkCi1yZXN0b3JlX3Byb2MoaW50IHNpZ25vIF9fdW51c2Vk KSB7CityZXN0b3JlX3Byb2MoaW50IHNpZ25vIF9fdW51c2VkKQoreworCWludCB3YWl0dmFsOwor CQorCWtpbGwoY2hpbGRfcGlkLCBTSUdTVE9QKTsKKwlpZiAod2FpdHBpZChjaGlsZF9waWQsICZ3 YWl0dmFsLCAwKSA8IC0xKQorCQllcnIoMSwgIlVuZXhwZWN0IHN0b3AgaW4gd2FpdHBpZCIpOwog Ci0JaW9jdGwoUHJvY2ZkLCBQSU9DQklDLCB+MCk7Ci0JaWYgKGV2ZmxhZ3MpCi0JCWlvY3RsKFBy b2NmZCwgUElPQ0JJUywgZXZmbGFncyk7CisJaWYgKHB0cmFjZShQVF9ERVRBQ0gsIGNoaWxkX3Bp ZCwgKGNhZGRyX3QpMSwgMCkgPCAwKQorCQllcnIoNywgIkNhbiBub3QgZGV0YWNoIik7CisJCisJ a2lsbChjaGlsZF9waWQsIFNJR0NPTlQpOwogCWV4aXQoMCk7CiB9CisKK3ZvaWQgd2FpdGV2ZW50 KHN0cnVjdCB0cnVzc2luZm8gKmluZm8pCit7CisJaW50IHdhaXR2YWw7CisJc3RhdGljIGludCBp bl9zeXNjYWxsID0gMDsKKwkKKwlwdHJhY2UoUFRfU1lTQ0FMTCwgaW5mby0+cGlkLCAoY2FkZHJf dCkxLCAwKTsKKworCWlmICh3YWl0cGlkKGluZm8tPnBpZCwgJndhaXR2YWwsIDApIDwgLTEpIHsK KwkJZXJyKDEsICJ1bmV4cGVjdCBzdG9wIGluIHdhaXRwaWQiKTsKKwl9CisJCisJaWYgKFdJRkNP TlRJTlVFRCh3YWl0dmFsKSkgeworCQlpbmZvLT5wcl93aHkgPSBTX05PTkU7CisJCXJldHVybjsK Kwl9CisJaWYgKFdJRkVYSVRFRCh3YWl0dmFsKSkgeworCQlpbmZvLT5wcl93aHkgPSBTX0VYSVQ7 CisJCWluZm8tPnByX2RhdGEgPSBXRVhJVFNUQVRVUyh3YWl0dmFsKTsKKwkJcmV0dXJuOworCX0K KwlpZiAoV0lGU1RPUFBFRCh3YWl0dmFsKSB8fCAoV0lGU0lHTkFMRUQod2FpdHZhbCkpKSB7CisJ CXN3aXRjaChXU1RPUFNJRyh3YWl0dmFsKSkgeworCQljYXNlIFNJR1RSQVA6CisJCQlpbmZvLT5w cl93aHkgPSBpbl9zeXNjYWxsP1NfU0NYOlNfU0NFOworCQkJaW5fc3lzY2FsbCA9IDEgLSBpbl9z eXNjYWxsOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpbmZvLT5wcl93aHkgPSBTX1NJRzsK KwkJCWluZm8tPnByX2RhdGEgPSBXU1RPUFNJRyh3YWl0dmFsKTsKKwkJCWJyZWFrOworCQl9CisJ fQorfQo9PT09IC8vZGVwb3QvdmVuZG9yL2ZyZWVic2Qvc3JjL3Vzci5iaW4vdHJ1c3Mvc3BhcmM2 NC1mYnNkLmMjOSAodGV4dCtrbykgLSAvL2RlcG90L3VzZXIvaG93YXJkc3UvdHJ1c3MvdXNyLmJp bi90cnVzcy9zcGFyYzY0LWZic2QuYyMyICh0ZXh0K2tvKSA9PT09IGNvbnRlbnQKQEAgLTQ1LDgg KzQ1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL2lv Y3RsLmg+Ci0jaW5jbHVkZSA8c3lzL3Bpb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4K ICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgogCiAjaW5jbHVkZSA8bWFjaGluZS9mcmFtZS5oPgpA QCAtNjgsNyArNjcsNiBAQAogI2luY2x1ZGUgInN5c2NhbGwuaCIKICNpbmNsdWRlICJleHRlcm4u aCIKIAotc3RhdGljIGludCBmZCA9IC0xOwogc3RhdGljIGludCBjcGlkID0gLTE7CiAKICNpbmNs dWRlICJzeXNjYWxscy5oIgpAQCAtMTE4LDI2ICsxMTYsMTggQEAKIAogdm9pZAogc3BhcmM2NF9z eXNjYWxsX2VudHJ5KHN0cnVjdCB0cnVzc2luZm8gKnRydXNzaW5mbywgaW50IG5hcmdzKSB7Ci0g IGNoYXIgYnVmWzMyXTsKICAgc3RydWN0IHJlZyByZWdzOwogICBpbnQgc3lzY2FsbF9udW07CiAg IGludCBpOwogICBzdHJ1Y3Qgc3lzY2FsbCAqc2M7CiAgIGludCBpbmRpciA9IDA7CS8qIGluZGly ZWN0IHN5c3RlbSBjYWxsICovCisgIHN0cnVjdCBwdHJhY2VfaW9fZGVzYyBpb3JlcXVlc3Q7CiAK LSAgaWYgKGZkID09IC0xIHx8IHRydXNzaW5mby0+cGlkICE9IGNwaWQpIHsKLSAgICBzcHJpbnRm KGJ1ZiwgIi9wcm9jLyVkL3JlZ3MiLCB0cnVzc2luZm8tPnBpZCk7Ci0gICAgZmQgPSBvcGVuKGJ1 ZiwgT19SRFdSKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgIGZwcmludGYodHJ1c3NpbmZv LT5vdXRmaWxlLCAiLS0gQ0FOTk9UIE9QRU4gUkVHSVNURVJTIC0tXG4iKTsKLSAgICAgIHJldHVy bjsKLSAgICB9Ci0gICAgY3BpZCA9IHRydXNzaW5mby0+cGlkOwotICB9CisgIGNwaWQgPSB0cnVz c2luZm8tPnBpZDsKIAogICBjbGVhcl9mc2MoKTsKLSAgbHNlZWsoZmQsIDBMLCAwKTsKLSAgaWYg KHJlYWQoZmQsICZyZWdzLCBzaXplb2YocmVncykpICE9IHNpemVvZihyZWdzKSkgeworICAKKyAg aWYgKHB0cmFjZShQVF9HRVRSRUdTLCBjcGlkLCAoY2FkZHJfdCkmcmVncywgMCkgPCAwKSB7CiAg ICAgZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICItLSBDQU5OT1QgUkVBRCBSRUdJU1RFUlMg LS1cbiIpOwogICAgIHJldHVybjsKICAgfQpAQCAtMTg2LDkgKzE3NiwxNCBAQAogCSAqIG9uIHRo ZSBzdGFjaywgYXMgaXMgbm9ybWFsIGZvciBvdGhlciBwcm9jZXNzb3JzLgogCSAqIFRoZSBmYWxs LXRocm91Z2ggZm9yIGFsbCBvZiB0aGVzZSBpcyBkZWxpYmVyYXRlISEhCiAJICovCi0JbHNlZWso UHJvY2ZkLCByZWdzLnJfb3V0WzZdICsgU1BPRkYgKwotCSAgICBvZmZzZXRvZihzdHJ1Y3QgZnJh bWUsIGZyX3BhZFs2XSksIFNFRUtfU0VUKTsKLQlyZWFkKGZkLCAmZnNjLmFyZ3NbNl0sIChuYXJn cyAtIDYpICogc2l6ZW9mKGZzYy5hcmdzWzBdKSk7CisJaW9yZXF1ZXN0LnBpb2Rfb3AgPSBQSU9E X1JFQURfRDsKKwlpb3JlcXVlc3QucGlvZF9vZmZzID0gKHZvaWQgKikocmVncy5yX291dFs2XSAr IFNQT0ZGICsKKyAgICAgICAgICAgIG9mZnNldG9mKHN0cnVjdCBmcmFtZSwgZnJfcGFkWzZdKTsK Kwlpb3JlcXVlc3QucGlvZF9hZGRyID0gJmZzYy5hcmdzWzZdOworCWlvcmVxdWVzdC5waW9kX2xl biA9IChuYXJncyAtIDYpICogc2l6ZW9mKGZzYy5hcmdzWzBdKTsKKwlwdHJhY2UoUFRfSU8sIGNw aWQsIChjYWRkcl90KSZpb3JlcXVlc3QsIDApOworCWlmIChpb3JlcXVlc3QucGlvZF9sZW4gPT0g MCkgcmV0dXJuOworCiAgIGNhc2UgNjoJZnNjLmFyZ3NbNV0gPSByZWdzLnJfb3V0WzVdOwogICBj YXNlIDU6CWZzYy5hcmdzWzRdID0gcmVncy5yX291dFs0XTsKICAgY2FzZSA0Oglmc2MuYXJnc1sz XSA9IHJlZ3Mucl9vdXRbM107CkBAIC0yNDAsNyArMjM1LDcgQEAKIAkgICAgICBpIDwgKGZzYy5u YXJncyAtIDEpID8gIiwiIDogIiIpOwogI2VuZGlmCiAgICAgICBpZiAoc2MgJiYgIShzYy0+YXJn c1tpXS50eXBlICYgT1VUKSkgewotCWZzYy5zX2FyZ3NbaV0gPSBwcmludF9hcmcoUHJvY2ZkLCAm c2MtPmFyZ3NbaV0sIGZzYy5hcmdzLCAwLCB0cnVzc2luZm8pOworCWZzYy5zX2FyZ3NbaV0gPSBw cmludF9hcmcoJnNjLT5hcmdzW2ldLCBmc2MuYXJncywgMCwgdHJ1c3NpbmZvKTsKICAgICAgIH0K ICAgICB9CiAjaWYgREVCVUcKQEAgLTMwMiwxOCArMjk3LDkgQEAKICAgaW50IGVycm9ycDsKICAg c3RydWN0IHN5c2NhbGwgKnNjOwogCi0gIGlmIChmZCA9PSAtMSB8fCB0cnVzc2luZm8tPnBpZCAh PSBjcGlkKSB7Ci0gICAgc3ByaW50ZihidWYsICIvcHJvYy8lZC9yZWdzIiwgdHJ1c3NpbmZvLT5w aWQpOwotICAgIGZkID0gb3BlbihidWYsIE9fUkRPTkxZKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsK LSAgICAgIGZwcmludGYodHJ1c3NpbmZvLT5vdXRmaWxlLCAiLS0gQ0FOTk9UIE9QRU4gUkVHSVNU RVJTIC0tXG4iKTsKLSAgICAgIHJldHVybiAoLTEpOwotICAgIH0KLSAgICBjcGlkID0gdHJ1c3Np bmZvLT5waWQ7Ci0gIH0KKyAgY3BpZCA9IHRydXNzaW5mby0+cGlkOwogCi0gIGxzZWVrKGZkLCAw TCwgMCk7Ci0gIGlmIChyZWFkKGZkLCAmcmVncywgc2l6ZW9mKHJlZ3MpKSAhPSBzaXplb2YocmVn cykpIHsKKyAgaWYgKHB0cmFjZShQVF9HRVRSRUdTLCBjcGlkLCAoY2FkZHJfdCkmcmVncywgMCkg PCAwKSB7CiAgICAgZnByaW50Zih0cnVzc2luZm8tPm91dGZpbGUsICJcbiIpOwogICAgIHJldHVy biAoLTEpOwogICB9CkBAIC0zNDQsNyArMzMwLDcgQEAKIAlpZiAoZXJyb3JwKQogCSAgYXNwcmlu dGYoJnRlbXAsICIweCVseCIsIGZzYy5hcmdzW3NjLT5hcmdzW2ldLm9mZnNldF0pOwogCWVsc2UK LQkgIHRlbXAgPSBwcmludF9hcmcoUHJvY2ZkLCAmc2MtPmFyZ3NbaV0sIGZzYy5hcmdzLCByZXR2 YWwsIHRydXNzaW5mbyk7CisJICB0ZW1wID0gcHJpbnRfYXJnKCZzYy0+YXJnc1tpXSwgZnNjLmFy Z3MsIHJldHZhbCwgdHJ1c3NpbmZvKTsKIAlmc2Muc19hcmdzW2ldID0gdGVtcDsKICAgICAgIH0K ICAgICB9Cj09PT0gLy9kZXBvdC92ZW5kb3IvZnJlZWJzZC9zcmMvdXNyLmJpbi90cnVzcy9zeXNj YWxsLmgjMTIgKHRleHQra28pIC0gLy9kZXBvdC91c2VyL2hvd2FyZHN1L3RydXNzL3Vzci5iaW4v dHJ1c3Mvc3lzY2FsbC5oIzIgKHRleHQra28pID09PT0gY29udGVudApAQCAtNjEsNyArNjEsNyBA QAogCiBzdHJ1Y3Qgc3lzY2FsbCAqZ2V0X3N5c2NhbGwoY29uc3QgY2hhciopOwogY2hhciAqZ2V0 X3N0cmluZyhpbnQsIHZvaWQqLCBpbnQpOwotY2hhciAqcHJpbnRfYXJnKGludCwgc3RydWN0IHN5 c2NhbGxfYXJncyAqLCB1bnNpZ25lZCBsb25nKiwgbG9uZywgc3RydWN0IHRydXNzaW5mbyAqKTsK K2NoYXIgKnByaW50X2FyZyhzdHJ1Y3Qgc3lzY2FsbF9hcmdzICosIHVuc2lnbmVkIGxvbmcqLCBs b25nLCBzdHJ1Y3QgdHJ1c3NpbmZvICopOwogdm9pZCBwcmludF9zeXNjYWxsKHN0cnVjdCB0cnVz c2luZm8gKiwgY29uc3QgY2hhciAqLCBpbnQsIGNoYXIgKiopOwogdm9pZCBwcmludF9zeXNjYWxs X3JldChzdHJ1Y3QgdHJ1c3NpbmZvICosIGNvbnN0IGNoYXIgKiwgaW50LCBjaGFyICoqLCBpbnQs CiAgICAgbG9uZyk7Cj09PT0gLy9kZXBvdC92ZW5kb3IvZnJlZWJzZC9zcmMvdXNyLmJpbi90cnVz cy9zeXNjYWxscy5jIzM4ICh0ZXh0K2tvKSAtIC8vZGVwb3QvdXNlci9ob3dhcmRzdS90cnVzcy91 c3IuYmluL3RydXNzL3N5c2NhbGxzLmMjMiAodGV4dCtrbykgPT09PSBjb250ZW50CkBAIC00MSw2 ICs0MSw3IEBACiAKICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5o PgorI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaW5j bHVkZSA8c3lzL3RpbWUuaD4KICNpbmNsdWRlIDxzeXMvdW4uaD4KQEAgLTQwOCw5ICs0MDksMTMg QEAKICAqLwogCiBzdGF0aWMgaW50Ci1nZXRfc3RydWN0KGludCBwcm9jZmQsIHZvaWQgKm9mZnNl dCwgdm9pZCAqYnVmLCBpbnQgbGVuKSB7Ci0KLQlpZiAocHJlYWQocHJvY2ZkLCBidWYsIGxlbiwg KHVpbnRwdHJfdClvZmZzZXQpICE9IGxlbikKK2dldF9zdHJ1Y3QoaW50IHBpZCwgdm9pZCAqb2Zm c2V0LCB2b2lkICpidWYsIGludCBsZW4pIHsKKwlzdHJ1Y3QgcHRyYWNlX2lvX2Rlc2MgaW9yZXF1 ZXN0OworCWlvcmVxdWVzdC5waW9kX29wID0gUElPRF9SRUFEX0Q7CisJaW9yZXF1ZXN0LnBpb2Rf b2ZmcyA9IG9mZnNldDsKKwlpb3JlcXVlc3QucGlvZF9hZGRyID0gYnVmOworCWlvcmVxdWVzdC5w aW9kX2xlbiA9IGxlbjsKKwlpZiAocHRyYWNlKFBUX0lPLCBwaWQsIChjYWRkcl90KSZpb3JlcXVl c3QsIDApICE9IGxlbikKIAkJcmV0dXJuIC0xOwogCXJldHVybiAwOwogfQpAQCAtNDIzLDM3ICs0 MjgsMjEgQEAKICAqLwogCiBjaGFyICoKLWdldF9zdHJpbmcoaW50IHByb2NmZCwgdm9pZCAqb2Zm c2V0LCBpbnQgbWF4KSB7CitnZXRfc3RyaW5nKGludCBwaWQsIHZvaWQgKm9mZnNldCwgaW50IG1h eCkgewogCWNoYXIgKmJ1ZjsKLQlpbnQgc2l6ZSwgbGVuLCBjLCBmZDsKLQlGSUxFICpwOworCXN0 cnVjdCBwdHJhY2VfaW9fZGVzYyBpb3JlcXVlc3Q7CisJaWYgKG1heCA+IDEwMjQgfHwgbWF4IDw9 IDApCisJCW1heCA9IDEwMjQ7CisKKwlidWYgPSBtYWxsb2MobWF4KTsKKwlpZiAoYnVmID09IE5V TEwpIHJldHVybiBOVUxMOworCWlvcmVxdWVzdC5waW9kX29wID0gUElPRF9SRUFEX0Q7CisJaW9y ZXF1ZXN0LnBpb2Rfb2ZmcyA9IG9mZnNldDsKKwlpb3JlcXVlc3QucGlvZF9hZGRyID0gYnVmOwor CWlvcmVxdWVzdC5waW9kX2xlbiA9IG1heDsKKwlwdHJhY2UoUFRfSU8sIHBpZCwgKGNhZGRyX3Qp JmlvcmVxdWVzdCwgMCk7CisJYnVmW21heCAtIDFdID0gJ1wwJzsKIAotCWlmICgoZmQgPSBkdXAo cHJvY2ZkKSkgPT0gLTEpCi0JCWVycigxLCAiZHVwIik7Ci0JaWYgKChwID0gZmRvcGVuKGZkLCAi ciIpKSA9PSBOVUxMKQotCQllcnIoMSwgImZkb3BlbiIpOwotCWJ1ZiA9IG1hbGxvYyggc2l6ZSA9 IChtYXggPyBtYXggKyAxIDogNjQgKSApOwotCWxlbiA9IDA7Ci0JYnVmWzBdID0gMDsKLQlpZiAo ZnNlZWtvKHAsICh1aW50cHRyX3Qpb2Zmc2V0LCBTRUVLX1NFVCkgPT0gMCkgewotCQl3aGlsZSAo KGMgPSBmZ2V0YyhwKSkgIT0gRU9GKSB7Ci0JCQlidWZbbGVuKytdID0gYzsKLQkJCWlmIChjID09 IDAgfHwgbGVuID09IG1heCkKLQkJCQlicmVhazsKLQkJCWlmIChsZW4gPT0gc2l6ZSkgewotCQkJ CWNoYXIgKnRtcDsKLQkJCQl0bXAgPSByZWFsbG9jKGJ1Ziwgc2l6ZSs2NCk7Ci0JCQkJaWYgKHRt cCA9PSBOVUxMKSB7Ci0JCQkJCWJ1ZltsZW5dID0gMDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJ CXNpemUgKz0gNjQ7Ci0JCQkJYnVmID0gdG1wOwotCQkJfQotCQl9Ci0JCWJ1ZltsZW5dID0gMDsK LQl9Ci0JZmNsb3NlKHApOwogCXJldHVybiAoYnVmKTsKIH0KIApAQCAtNDY5LDkgKzQ1OCw5IEBA CiAgKi8KIAogY2hhciAqCi1wcmludF9hcmcoaW50IGZkLCBzdHJ1Y3Qgc3lzY2FsbF9hcmdzICpz YywgdW5zaWduZWQgbG9uZyAqYXJncywgbG9uZyByZXR2YWwsIHN0cnVjdCB0cnVzc2luZm8gKnRy dXNzaW5mbykgeworcHJpbnRfYXJnKHN0cnVjdCBzeXNjYWxsX2FyZ3MgKnNjLCB1bnNpZ25lZCBs b25nICphcmdzLCBsb25nIHJldHZhbCwgc3RydWN0IHRydXNzaW5mbyAqdHJ1c3NpbmZvKSB7CiAg IGNoYXIgKnRtcCA9IE5VTEw7Ci0KKyAgaW50IHBpZCA9IHRydXNzaW5mby0+cGlkOwogICBzd2l0 Y2ggKHNjLT50eXBlICYgQVJHX01BU0spIHsKICAgY2FzZSBIZXg6CiAgICAgYXNwcmludGYoJnRt cCwgIjB4JWx4IiwgYXJnc1tzYy0+b2Zmc2V0XSk7CkBAIC00ODYsNyArNDc1LDcgQEAKICAgICB7 CiAgICAgICAvKiBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nLiAqLwogICAgICAgY2hhciAqdG1wMjsK LSAgICAgIHRtcDIgPSBnZXRfc3RyaW5nKGZkLCAodm9pZCopYXJnc1tzYy0+b2Zmc2V0XSwgMCk7 CisgICAgICB0bXAyID0gZ2V0X3N0cmluZyhwaWQsICh2b2lkKilhcmdzW3NjLT5vZmZzZXRdLCAw KTsKICAgICAgIGFzcHJpbnRmKCZ0bXAsICJcIiVzXCIiLCB0bXAyKTsKICAgICAgIGZyZWUodG1w Mik7CiAgICAgfQpAQCAtNTE0LDcgKzUwMyw3IEBACiAgICAgICAgIGxlbiA9IG1heF9zdHJpbmc7 CiAgICAgICAgIHRydW5jYXRlZCA9IDE7CiAgICAgICB9Ci0gICAgICBpZiAobGVuICYmIGdldF9z dHJ1Y3QoZmQsICh2b2lkKilhcmdzW3NjLT5vZmZzZXRdLCAmdG1wMiwgbGVuKSAhPSAtMSkgewor ICAgICAgaWYgKGxlbiAmJiBnZXRfc3RydWN0KHBpZCwgKHZvaWQqKWFyZ3Nbc2MtPm9mZnNldF0s ICZ0bXAyLCBsZW4pICE9IC0xKSB7CiAgICAgICAgIHRtcDMgPSBtYWxsb2MobGVuICogNCArIDEp OwogICAgICAgICB3aGlsZSAobGVuKSB7CiAgICAgICAgICAgaWYgKHN0cnZpc3godG1wMywgdG1w MiwgbGVuLCBWSVNfQ1NUWUxFfFZJU19UQUJ8VklTX05MKSA8PSBtYXhfc3RyaW5nKQpAQCAtNTM1 LDcgKzUyNCw3IEBACiAgICAgICBjaGFyICpzdHJpbmc7CiAgICAgICBjaGFyICpzdHJhcnJheVsx MDBdOwkvKiBYWFggVGhpcyBpcyB1Z2x5LiAqLwogCi0gICAgICBpZiAoZ2V0X3N0cnVjdChmZCwg KHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAodm9pZCAqKSZzdHJhcnJheSwKKyAgICAgIGlmIChn ZXRfc3RydWN0KHBpZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAodm9pZCAqKSZzdHJhcnJh eSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJhcnJheSkpID09IC0xKSB7CiAJZXJy KDEsICJnZXRfc3RydWN0ICVwIiwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdKTsKICAgICAgIH0K QEAgLTU0NCw3ICs1MzMsNyBAQAogCiAgICAgICAvKiBGaW5kIG91dCBob3cgbGFyZ2Ugb2YgYSBi dWZmZXIgd2UnbGwgbmVlZC4gKi8KICAgICAgIHdoaWxlIChzdHJhcnJheVtudW1dICE9IE5VTEwp IHsKLQlzdHJpbmcgPSBnZXRfc3RyaW5nKGZkLCAodm9pZCopc3RyYXJyYXlbbnVtXSwgMCk7CisJ c3RyaW5nID0gZ2V0X3N0cmluZyhwaWQsICh2b2lkKilzdHJhcnJheVtudW1dLCAwKTsKICAgICAg ICAgc2l6ZSArPSBzdHJsZW4oc3RyaW5nKTsKIAlmcmVlKHN0cmluZyk7CiAJbnVtKys7CkBAIC01 NTUsNyArNTQ0LDcgQEAKIAogICAgICAgdG1wMiArPSBzcHJpbnRmKHRtcDIsICIgWyIpOwogICAg ICAgZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0Jc3RyaW5nID0gZ2V0X3N0cmluZyhmZCwg KHZvaWQqKXN0cmFycmF5W2ldLCAwKTsKKwlzdHJpbmcgPSBnZXRfc3RyaW5nKHBpZCwgKHZvaWQq KXN0cmFycmF5W2ldLCAwKTsKICAgICAgICAgdG1wMiArPSBzcHJpbnRmKHRtcDIsICIgXCIlc1wi JWMiLCBzdHJpbmcsIChpKzEgPT0gbnVtKSA/ICcgJyA6ICcsJyk7CiAJZnJlZShzdHJpbmcpOwog ICAgICAgfQpAQCAtNTg1LDcgKzU3NCw3IEBACiAJdG1wID0gc3RyZHVwKCIiKTsKIAlicmVhazsK ICAgICAgIH0KLSAgICAgIHRtcDIgPSBnZXRfc3RyaW5nKGZkLCAodm9pZCopYXJnc1tzYy0+b2Zm c2V0XSwgcmV0dmFsKTsKKyAgICAgIHRtcDIgPSBnZXRfc3RyaW5nKHBpZCwgKHZvaWQqKWFyZ3Nb c2MtPm9mZnNldF0sIHJldHZhbCk7CiAgICAgICBhc3ByaW50ZigmdG1wLCAiXCIlc1wiIiwgdG1w Mik7CiAgICAgICBmcmVlKHRtcDIpOwogICAgIH0KQEAgLTYwOCw3ICs1OTcsNyBAQAogICBjYXNl IFVtdHg6CiAgICAgewogICAgICAgc3RydWN0IHVtdHggdW10eDsKLSAgICAgIGlmIChnZXRfc3Ry dWN0KGZkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICZ1bXR4LCBzaXplb2YodW10eCkpICE9 IC0xKQorICAgICAgaWYgKGdldF9zdHJ1Y3QocGlkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0s ICZ1bXR4LCBzaXplb2YodW10eCkpICE9IC0xKQogCWFzcHJpbnRmKCZ0bXAsICJ7MHglbHh9Iiwg KGxvbmcpdW10eC51X293bmVyKTsKICAgICAgIGVsc2UKIAlhc3ByaW50ZigmdG1wLCAiMHglbHgi LCBhcmdzW3NjLT5vZmZzZXRdKTsKQEAgLTYxNyw3ICs2MDYsNyBAQAogICBjYXNlIFRpbWVzcGVj OgogICAgIHsKICAgICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKLSAgICAgIGlmIChnZXRfc3RydWN0 KGZkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICZ0cywgc2l6ZW9mKHRzKSkgIT0gLTEpCisg ICAgICBpZiAoZ2V0X3N0cnVjdChwaWQsICh2b2lkICopYXJnc1tzYy0+b2Zmc2V0XSwgJnRzLCBz aXplb2YodHMpKSAhPSAtMSkKIAlhc3ByaW50ZigmdG1wLCAieyVsZC4lMDlsZH0iLCAobG9uZyl0 cy50dl9zZWMsIHRzLnR2X25zZWMpOwogICAgICAgZWxzZQogCWFzcHJpbnRmKCZ0bXAsICIweCVs eCIsIGFyZ3Nbc2MtPm9mZnNldF0pOwpAQCAtNjI2LDcgKzYxNSw3IEBACiAgIGNhc2UgVGltZXZh bDoKICAgICB7CiAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKLSAgICAgIGlmIChnZXRfc3RydWN0 KGZkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICZ0diwgc2l6ZW9mKHR2KSkgIT0gLTEpCisg ICAgICBpZiAoZ2V0X3N0cnVjdChwaWQsICh2b2lkICopYXJnc1tzYy0+b2Zmc2V0XSwgJnR2LCBz aXplb2YodHYpKSAhPSAtMSkKIAlhc3ByaW50ZigmdG1wLCAieyVsZC4lMDZsZH0iLCAobG9uZyl0 di50dl9zZWMsIHR2LnR2X3VzZWMpOwogICAgICAgZWxzZQogCWFzcHJpbnRmKCZ0bXAsICIweCVs eCIsIGFyZ3Nbc2MtPm9mZnNldF0pOwpAQCAtNjM1LDcgKzYyNCw3IEBACiAgIGNhc2UgVGltZXZh bDI6CiAgICAgewogICAgICAgc3RydWN0IHRpbWV2YWwgdHZbMl07Ci0gICAgICBpZiAoZ2V0X3N0 cnVjdChmZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAmdHYsIHNpemVvZih0dikpICE9IC0x KQorICAgICAgaWYgKGdldF9zdHJ1Y3QocGlkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICZ0 diwgc2l6ZW9mKHR2KSkgIT0gLTEpCiAJYXNwcmludGYoJnRtcCwgInslbGQuJTA2bGQsICVsZC4l MDZsZH0iLAogCSAgKGxvbmcpdHZbMF0udHZfc2VjLCB0dlswXS50dl91c2VjLAogCSAgKGxvbmcp dHZbMV0udHZfc2VjLCB0dlsxXS50dl91c2VjKTsKQEAgLTY0Niw3ICs2MzUsNyBAQAogICBjYXNl IEl0aW1lcnZhbDoKICAgICB7CiAgICAgICBzdHJ1Y3QgaXRpbWVydmFsIGl0djsKLSAgICAgIGlm IChnZXRfc3RydWN0KGZkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICZpdHYsIHNpemVvZihp dHYpKSAhPSAtMSkKKyAgICAgIGlmIChnZXRfc3RydWN0KHBpZCwgKHZvaWQgKilhcmdzW3NjLT5v ZmZzZXRdLCAmaXR2LCBzaXplb2YoaXR2KSkgIT0gLTEpCiAJYXNwcmludGYoJnRtcCwgInslbGQu JTA2bGQsICVsZC4lMDZsZH0iLAogCSAgICAobG9uZylpdHYuaXRfaW50ZXJ2YWwudHZfc2VjLAog CSAgICBpdHYuaXRfaW50ZXJ2YWwudHZfdXNlYywKQEAgLTY3MCw3ICs2NTksNyBAQAogCiAgICAg ICBpZiAoKHBmZCA9IG1hbGxvYyhieXRlcykpID09IE5VTEwpCiAJZXJyKDEsICJDYW5ub3QgbWFs bG9jICVkIGJ5dGVzIGZvciBwb2xsZmQgYXJyYXkiLCBieXRlcyk7Ci0gICAgICBpZiAoZ2V0X3N0 cnVjdChmZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCBwZmQsIGJ5dGVzKSAhPSAtMSkgewor ICAgICAgaWYgKGdldF9zdHJ1Y3QocGlkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sIHBmZCwg Ynl0ZXMpICE9IC0xKSB7CiAKIAl1c2VkID0gMDsKIAl0bXBzaXplID0gMSArIHBlcl9mZCAqIG51 bWZkcyArIDI7CkBAIC03MDksNyArNjk4LDcgQEAKIAogICAgICAgaWYgKChmZHMgPSBtYWxsb2Mo Ynl0ZXMpKSA9PSBOVUxMKQogCWVycigxLCAiQ2Fubm90IG1hbGxvYyAlZCBieXRlcyBmb3IgZmRf c2V0IGFycmF5IiwgYnl0ZXMpOwotICAgICAgaWYgKGdldF9zdHJ1Y3QoZmQsICh2b2lkICopYXJn c1tzYy0+b2Zmc2V0XSwgZmRzLCBieXRlcykgIT0gLTEpIHsKKyAgICAgIGlmIChnZXRfc3RydWN0 KHBpZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCBmZHMsIGJ5dGVzKSAhPSAtMSkgewogCXVz ZWQgPSAwOwogCXRtcHNpemUgPSAxICsgbnVtZmRzICogcGVyX2ZkICsgMjsKIAlpZiAoKHRtcCA9 IG1hbGxvYyh0bXBzaXplKSkgPT0gTlVMTCkKQEAgLTc0OSw3ICs3MzgsNyBAQAogICAgICAgaW50 IGksIHVzZWQ7CiAKICAgICAgIHNpZyA9IGFyZ3Nbc2MtPm9mZnNldF07Ci0gICAgICBpZiAoZ2V0 X3N0cnVjdChmZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAodm9pZCAqKSZzcywKKyAgICAg IGlmIChnZXRfc3RydWN0KHBpZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAodm9pZCAqKSZz cywKICAgICAgICAgICBzaXplb2Yoc3MpKSA9PSAtMSkKICAgICAgIHsKIAlhc3ByaW50ZigmdG1w LCAiMHglbHgiLCBhcmdzW3NjLT5vZmZzZXRdKTsKQEAgLTg1Myw3ICs4NDIsNyBAQAogICAgICAg fQogCiAgICAgICAvKiB5dWNrOiBnZXQgc3NfbGVuICovCi0gICAgICBpZiAoZ2V0X3N0cnVjdChm ZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAodm9pZCAqKSZzcywKKyAgICAgIGlmIChnZXRf c3RydWN0KHBpZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAodm9pZCAqKSZzcywKIAlzaXpl b2Yoc3Muc3NfbGVuKSArIHNpemVvZihzcy5zc19mYW1pbHkpKSA9PSAtMSkKIAllcnIoMSwgImdl dF9zdHJ1Y3QgJXAiLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0pOwogICAgICAgLyoKQEAgLTg3 NCw3ICs4NjMsNyBAQAogCQkgICAgICBicmVhazsKIAkgICAgICB9CiAgICAgICB9Ci0gICAgICBp ZiAoZ2V0X3N0cnVjdChmZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAodm9pZCAqKSZzcywg c3Muc3NfbGVuKQorICAgICAgaWYgKGdldF9zdHJ1Y3QocGlkLCAodm9pZCAqKWFyZ3Nbc2MtPm9m ZnNldF0sICh2b2lkICopJnNzLCBzcy5zc19sZW4pCiAJICA9PSAtMSkgewogCSAgZXJyKDIsICJn ZXRfc3RydWN0ICVwIiwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdKTsKICAgICAgIH0KQEAgLTkx Myw3ICs5MDIsNyBAQAogICAgICAgY2hhciAqaGFuZDsKICAgICAgIGNvbnN0IGNoYXIgKmg7CiAK LSAgICAgIGlmIChnZXRfc3RydWN0KGZkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICZzYSwg c2l6ZW9mKHNhKSkgIT0gLTEpIHsKKyAgICAgIGlmIChnZXRfc3RydWN0KHBpZCwgKHZvaWQgKilh cmdzW3NjLT5vZmZzZXRdLCAmc2EsIHNpemVvZihzYSkpICE9IC0xKSB7CiAKIAlhc3ByaW50Zigm aGFuZCwgIiVwIiwgc2Euc2FfaGFuZGxlcik7CiAJaWYgKHNhLnNhX2hhbmRsZXIgPT0gU0lHX0RG TCkKQEAgLTk1Niw3ICs5NDUsNyBAQAogICAgICAgCWJ5dGVzID0gc2l6ZW9mKHN0cnVjdCBrZXZl bnQpICogbnVtZXZlbnRzOwogICAgICAgaWYgKChrZSA9IG1hbGxvYyhieXRlcykpID09IE5VTEwp CiAgICAgICAgIGVycigxLCAiQ2Fubm90IG1hbGxvYyAlZCBieXRlcyBmb3Iga2V2ZW50IGFycmF5 IiwgYnl0ZXMpOwotICAgICAgaWYgKG51bWV2ZW50cyA+PSAwICYmIGdldF9zdHJ1Y3QoZmQsICh2 b2lkICopYXJnc1tzYy0+b2Zmc2V0XSwga2UsIGJ5dGVzKSAhPSAtMSkgeworICAgICAgaWYgKG51 bWV2ZW50cyA+PSAwICYmIGdldF9zdHJ1Y3QocGlkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0s IGtlLCBieXRlcykgIT0gLTEpIHsKIAl1c2VkID0gMDsKIAl0bXBzaXplID0gMSArIHBlcl9rZSAq IG51bWV2ZW50cyArIDI7CiAJaWYgKCh0bXAgPSBtYWxsb2ModG1wc2l6ZSkpID09IE5VTEwpCkBA IC05ODYsNyArOTc1LDcgQEAKICAgY2FzZSBTdGF0OgogICAgIHsKICAgICAgIHN0cnVjdCBzdGF0 IHN0OwotICAgICAgaWYgKGdldF9zdHJ1Y3QoZmQsICh2b2lkICopYXJnc1tzYy0+b2Zmc2V0XSwg JnN0LCBzaXplb2Yoc3QpKSAhPSAtMSkgeworICAgICAgaWYgKGdldF9zdHJ1Y3QocGlkLCAodm9p ZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICZzdCwgc2l6ZW9mKHN0KSkgIT0gLTEpIHsKIAljaGFyIG1v ZGVbMTJdOwogCXN0cm1vZGUoc3Quc3RfbW9kZSwgbW9kZSk7CiAJYXNwcmludGYoJnRtcCwgIntt b2RlPSVzLGlub2RlPSVqZCxzaXplPSVqZCxibGtzaXplPSVsZH0iLApAQCAtOTk5LDcgKzk4OCw3 IEBACiAgIGNhc2UgUnVzYWdlOgogICAgIHsKICAgICAgIHN0cnVjdCBydXNhZ2UgcnU7Ci0gICAg ICBpZiAoZ2V0X3N0cnVjdChmZCwgKHZvaWQgKilhcmdzW3NjLT5vZmZzZXRdLCAmcnUsIHNpemVv ZihydSkpICE9IC0xKQorICAgICAgaWYgKGdldF9zdHJ1Y3QocGlkLCAodm9pZCAqKWFyZ3Nbc2Mt Pm9mZnNldF0sICZydSwgc2l6ZW9mKHJ1KSkgIT0gLTEpCiAJYXNwcmludGYoJnRtcCwgInt1PSVs ZC4lMDZsZCxzPSVsZC4lMDZsZCxpbj0lbGQsb3V0PSVsZH0iLAogCSAgKGxvbmcpcnUucnVfdXRp bWUudHZfc2VjLCBydS5ydV91dGltZS50dl91c2VjLAogCSAgKGxvbmcpcnUucnVfc3RpbWUudHZf c2VjLCBydS5ydV9zdGltZS50dl91c2VjLApAQCAtMTAxMSw3ICsxMDAwLDcgQEAKICAgY2FzZSBS bGltaXQ6CiAgICAgewogICAgICAgc3RydWN0IHJsaW1pdCBybDsKLSAgICAgIGlmIChnZXRfc3Ry dWN0KGZkLCAodm9pZCAqKWFyZ3Nbc2MtPm9mZnNldF0sICZybCwgc2l6ZW9mKHJsKSkgIT0gLTEp CisgICAgICBpZiAoZ2V0X3N0cnVjdChwaWQsICh2b2lkICopYXJnc1tzYy0+b2Zmc2V0XSwgJnJs LCBzaXplb2YocmwpKSAhPSAtMSkKIAlhc3ByaW50ZigmdG1wLCAie2N1cj0lanUsbWF4PSVqdX0i LAogCSAgcmwucmxpbV9jdXIsIHJsLnJsaW1fbWF4KTsKICAgICAgIGVsc2UKPT09PSAvL2RlcG90 L3ZlbmRvci9mcmVlYnNkL3NyYy91c3IuYmluL3RydXNzL3RydXNzLjEjMTIgKHRleHQra28pIC0g Ly9kZXBvdC91c2VyL2hvd2FyZHN1L3RydXNzL3Vzci5iaW4vdHJ1c3MvdHJ1c3MuMSMzICh0ZXh0 K2tvKSA9PT09IGNvbnRlbnQKQEAgLTIzLDcgKzIzLDcgQEAKIHV0aWxpdHkgdHJhY2VzIHRoZSBz eXN0ZW0gY2FsbHMgY2FsbGVkIGJ5IHRoZSBzcGVjaWZpZWQgcHJvY2VzcyBvciBwcm9ncmFtLgog T3V0cHV0IGlzIHRvIHRoZSBzcGVjaWZpZWQgb3V0cHV0IGZpbGUsIG9yIHN0YW5kYXJkIGVycm9y IGJ5IGRlZmF1bHQuCiBJdCBkb2VzIHRoaXMgYnkgc3RvcHBpbmcgYW5kIHJlc3RhcnRpbmcgdGhl IHByb2Nlc3MgYmVpbmcgbW9uaXRvcmVkIHZpYQotLlhyIHByb2NmcyA1IC4KKy5YciBwdHJhY2Ug MiAuCiAuUHAKIFRoZSBvcHRpb25zIGFyZSBhcyBmb2xsb3dzOgogLkJsIC10YWcgLXdpZHRoIGlu ZGVudApAQCAtNzksMTMgKzc5LDYgQEAKIC5BciBjb21tYW5kCiBvcHRpb25zIGFyZSBtdXR1YWxs eSBleGNsdXNpdmUuKQogLkVsCi0uUHAKLVRoZQotLlhyIHByb2NjdGwgOAotdXRpbGl0eSBjYW4g YmUgdXNlZCB0byBjbGVhciB0cmFjZXBvaW50cyBpbiBhIHN0dWNrIHByb2Nlc3MKLWxlZnQgYmVo aW5kIGlmCi0uTm0KLXRlcm1pbmF0ZXMgYWJub3JtYWxseS4KIC5TaCBFWEFNUExFUwogIyBGb2xs b3cgdGhlIHN5c3RlbSBjYWxscyB1c2VkIGluIGVjaG9pbmcgImhlbGxvIgogLkRsICQgdHJ1c3Mg L2Jpbi9lY2hvIGhlbGxvCkBAIC05Niw4ICs4OSw3IEBACiAuU2ggU0VFIEFMU08KIC5YciBrZHVt cCAxICwKIC5YciBrdHJhY2UgMSAsCi0uWHIgcHJvY2ZzIDUgLAotLlhyIHByb2NjdGwgOAorLlhy IHB0cmFjZSAyIDIgCiAuU2ggSElTVE9SWQogVGhlCiAuTm0KPT09PSAvL2RlcG90L3ZlbmRvci9m cmVlYnNkL3NyYy91c3IuYmluL3RydXNzL3RydXNzLmgjNSAodGV4dCtrbykgLSAvL2RlcG90L3Vz ZXIvaG93YXJkc3UvdHJ1c3MvdXNyLmJpbi90cnVzcy90cnVzcy5oIzMgKHRleHQra28pID09PT0g Y29udGVudApAQCAtMzcsNiArMzcsOCBAQAogCWludCBwaWQ7CiAJaW50IGZsYWdzOwogCWludCBp bl9mb3JrOworCWludCBwcl93aHk7CisJaW50IHByX2RhdGE7CiAJaW50IHN0cnNpemU7CiAJRklM RSAqb3V0ZmlsZTsKIApAQCAtNTQsMyArNTYsMTAgQEAKIAkJCSh2dnApLT50dl9uc2VjICs9IDEw MDAwMDAwMDA7CQkJXAogCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQorCisjZGVmaW5lIFNfTk9O RSAgMAorI2RlZmluZSBTX1NDRSAgIDEKKyNkZWZpbmUgU19TQ1ggICAyCisjZGVmaW5lIFNfRVhJ VCAgMworI2RlZmluZSBTX1NJRyAgIDQKKyNkZWZpbmUgU19FWEVDICA1Cg== ------=_Part_27400_23796817.1175674700136--