NetBSD Problem Report #30756
From wiz@dmath5.geometrie.tuwien.ac.at Fri Jul 15 22:21:35 2005
Return-Path: <wiz@dmath5.geometrie.tuwien.ac.at>
Received: from dmath5.geometrie.tuwien.ac.at (dmath5.geometrie.tuwien.ac.at [128.130.42.105])
by narn.netbsd.org (Postfix) with ESMTP id 19E1463B11A
for <gnats-bugs@gnats.NetBSD.org>; Fri, 15 Jul 2005 22:21:35 +0000 (UTC)
Message-Id: <20050715222133.1C8B22951C@dmath5.geometrie.tuwien.ac.at>
Date: Sat, 16 Jul 2005 00:21:33 +0200 (CEST)
From: Thomas Klausner <wiz@NetBSD.org>
Reply-To: Thomas Klausner <wiz@NetBSD.org>
To: gnats-bugs@netbsd.org
Subject: gdb not usable for live debugging of threaded programs
X-Send-Pr-Version: 3.95
>Number: 30756
>Category: bin
>Synopsis: gdb not usable for live debugging of threaded programs
>Confidential: no
>Severity: critical
>Priority: medium
>Responsible: skrll
>State: closed
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Fri Jul 15 22:22:00 +0000 2005
>Closed-Date: Tue Jul 22 15:51:59 +0000 2014
>Last-Modified: Tue Jul 22 15:51:59 +0000 2014
>Originator: Thomas Klausner
>Release: NetBSD 3.99.7
>Organization:
>Environment:
Architecture: i386
Machine: i386
>Description:
Debugging threaded programs currently looks like this:
# gdb /usr/pkg/bin/amarokapp
GNU gdb 5.3nb1
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386--netbsdelf"...(no debugging symbols found)...
(gdb) r
Starting program: /usr/pkg/bin/amarokapp
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...thread_resume_suspend_cb: td_thr_suspend(0xa3bc2c0): generic error.
[Switching to LWP 1]
Stopped due to shared library event
(gdb) c
Continuing.
thread_resume_suspend_cb: td_thr_suspend(0xa3bc2c0): generic error.
0xbdbf7444 in _rtld_debug_state () from /usr/libexec/ld.elf_so
(gdb) c
Continuing.
thread_resume_suspend_cb: td_thr_suspend(0xa3bc2c0): generic error.
0xbdbf7444 in _rtld_debug_state () from /usr/libexec/ld.elf_so
(gdb)
In the thread starting at
http://mail-index.netbsd.org/current-users/2005/06/23/0017.html
Nathan J. Williams suggests reverting 1.15 of
src/gnu/dist/gdb/gdb/nbsd-thread.c
which fixes this particular problem.
However, 1.15 was a fix for another real problem, and reverting it
is not a good solution. So we need another one :)
>How-To-Repeat:
See above.
>Fix:
Sorry, above my head.
>Release-Note:
>Audit-Trail:
From: Rui Paulo <rpaulo@NetBSD.org>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: bin/30756
Date: Sat, 13 Aug 2005 16:37:22 +0100
BTW, you can attach to a running threadead application and it works fine.
The same applies for core files.
Related discussion on tech-userlevel@:
http://mail-index.netbsd.org/tech-userlevel/2005/07/25/0000.html
http://mail-index.netbsd.org/tech-userlevel/2005/07/25/0001.html
http://mail-index.netbsd.org/tech-userlevel/2005/07/25/0002.html
http://mail-index.netbsd.org/tech-userlevel/2005/07/25/0003.html
-- Rui Paulo
From: Matthias Drochner <M.Drochner@fz-juelich.de>
To: gnats-bugs@netbsd.org
Cc: gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Subject: Re: bin/30756
Date: Mon, 15 Aug 2005 19:11:04 +0200
This is a multipart MIME message.
--==_Exmh_53492548679310
Content-Type: text/plain; charset=us-ascii
rpaulo@NetBSD.org said:
> thread_resume_suspend_cb: td_thr_suspend(0xa3bc2c0): generic error
The appended patch helps for this problem.
It seems that the thread debugging stuff needs some cleanup...
best regards
Matthias
--==_Exmh_53492548679310
Content-Type: text/plain ; name="pthgdb.txt"; charset=us-ascii
Content-Description: pthgdb.txt
Content-Disposition: attachment; filename="pthgdb.txt"
--- nbsd-thread.c.~1.15.~ Wed Oct 13 14:37:17 2004
+++ nbsd-thread.c Mon Aug 15 19:00:32 2005
@@ -222,7 +222,7 @@ thread_resume_suspend_cb (td_thread_t *t
if (td_thr_info (th, &ti) != 0)
return -1;
- if ((ti.thread_id != GET_THREAD (*pt)) &&
+ if ((ti.thread_id != GET_THREAD (*pt) + 1) &&
(ti.thread_type == TD_TYPE_USER) &&
(ti.thread_state != TD_STATE_SUSPENDED) &&
(ti.thread_state != TD_STATE_ZOMBIE))
--==_Exmh_53492548679310--
From: "Nathan J. Williams" <nathanw@wasabisystems.com>
To: M.Drochner@fz-juelich.de
Cc: gnats-bugs@NetBSD.org, gnats-admin@NetBSD.org,
netbsd-bugs@NetBSD.org
Subject: Re: bin/30756
Date: 16 Aug 2005 18:07:15 -0400
Matthias Drochner <M.Drochner@fz-juelich.de> writes:
> rpaulo@NetBSD.org said:
> > thread_resume_suspend_cb: td_thr_suspend(0xa3bc2c0): generic error
>
> The appended patch helps for this problem.
> It seems that the thread debugging stuff needs some cleanup...
That happens to work but it's not right at all. nbsd_thread_resume()
is being called with a ptid argument of {<pid>, 1, 0}; that is, the
upper levels are trying to single-step an LWP rather than a thread (we
don't currently have a mechanism for that in the ptrace
interface). This causes thread_resume_suspend_cb() to try to suspend
the only thread in the program... which is a bad enough idea, but it
happens early enough that the idle queue isn't even set up, and so
there's no thread to replace the suspended thread in the register
set. This causes td_thr_suspend() to bail out with the error seen
above.
However, this does point out a partial solution, which I've gone ahead
and committed:
Index: nbsd-thread.c
===================================================================
RCS file: /cvsroot/src/gnu/dist/gdb/gdb/nbsd-thread.c,v
retrieving revision 1.15
diff -p -u -r1.15 nbsd-thread.c
--- nbsd-thread.c 12 Oct 2004 22:16:34 -0000 1.15
+++ nbsd-thread.c 16 Aug 2005 22:02:38 -0000
@@ -262,11 +262,14 @@ static void
nbsd_thread_resume (ptid_t ptid, int step, enum target_signal signo)
{
- /* If a particular ptid is specified, then gdb wants to resume or
+ /* If a particular thread is specified, then gdb wants to resume or
step just that thread. If it isn't on a processor, then it needs
- to be put on one, and nothing else can be on the runnable
- list. */
- if (GET_PID (ptid) != -1)
+ to be put on one, and nothing else can be on the runnable list.
+ XXX If GDB asks us to step a LWP rather than a thread, there
+ isn't anything we can do but pass it down to the ptrace call;
+ given the flexibility of the LWP-to-thread mapping, this might or
+ might not accomplish what the user wanted. */
+ if (GET_PID (ptid) != -1 && IS_THREAD (ptid))
{
int val;
This seems to get things limping along again.
- Nathan
From: Rui Paulo <rpaulo@NetBSD.org>
To: "Nathan J. Williams" <nathanw@wasabisystems.com>
Cc: M.Drochner@fz-juelich.de, gnats-bugs@NetBSD.org,
gnats-admin@NetBSD.org, netbsd-bugs@NetBSD.org
Subject: Re: bin/30756
Date: Wed, 17 Aug 2005 01:55:10 +0100
--+QahgC5+KEYLbs62
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On 2005.08.16 18:07:15 +0000, Nathan J. Williams wrote:
| That happens to work but it's not right at all. nbsd_thread_resume()
| is being called with a ptid argument of {<pid>, 1, 0}; that is, the
| upper levels are trying to single-step an LWP rather than a thread (we
| don't currently have a mechanism for that in the ptrace
| interface). This causes thread_resume_suspend_cb() to try to suspend
| the only thread in the program... which is a bad enough idea, but it
| happens early enough that the idle queue isn't even set up, and so
| there's no thread to replace the suspended thread in the register
| set. This causes td_thr_suspend() to bail out with the error seen
| above.
|=20
| However, this does point out a partial solution, which I've gone ahead
| and committed:
I've tested it and while it works for simple cases, it doesn't work for
debugging large programs, like jvm.
proton> ./gdb -q ~/java/jdk/bin/java_g [usr.bin/gdb53/=
gdb]
(gdb) run -jar ~/java/jdk/demo/jfc/Java2D/Java2Demo.jar
Starting program: /home/rpaulo/java/jdk-1_5_0/control/build/bsd-i586/bin/ja=
va_g -jar ~/java/jdk/demo/jfc/Java2D/Java2Demo.jar
Program received signal SIGTRAP, Trace/breakpoint trap.
[Switching to LWP 1]
0xbdbf5530 in .rtld_start () from /usr/libexec/ld.elf_so
(gdb)=20
If you need more information, please tell me.
I don't know if you are already aware of this since you pointed out that
it is a "partial solution".
-- Rui Paulo
--+QahgC5+KEYLbs62
Content-Type: application/pgp-signature
Content-Disposition: inline
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (NetBSD)
iD8DBQFDAoruZPqyxs9FH4QRAoumAJ9oGuJHLtqSYuKWtFcuRHaWxsJa/gCfQ53p
EJJNUeA/PvH+fh+0+ycMtHI=
=iz5l
-----END PGP SIGNATURE-----
--+QahgC5+KEYLbs62--
From: "Paul Koning" <Paul_Koning@Dell.com>
To: <gnats-bugs@NetBSD.org>
Cc: <tech-kern@NetBSD.org>
Subject: RE: bin/30756: gdb not usable for live debugging of threaded programs
Date: Mon, 19 Apr 2010 15:02:03 -0400
This is a multi-part message in MIME format.
------_=_NextPart_001_01CADFF2.CC0C5CAC
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
The fix for kern/43128 adds the missing kernel bits for GDB to support
threaded program debugging. The other part needed is changes to GDB
itself.
Attached is a patch that does this, tested on i386 against the GDB 6.5
sources that are in NetBSD 5.0. I intend to submit this to the GDB
project as well but was asked to provide a patch against the GDB rev
that is currently in NetBSD.
There is a patched mipsnbsd-nat.c as well as common and i386 specific
files, but I did not make the build file changes for that so that file
is untested. I also did not look at any other platforms. The changes
should be straightforward using the mips and i386 examples as the
starting point, but since I have no way to test them I did not want to
attempt changes for any other targets.
Comments appreciated.
paul
------_=_NextPart_001_01CADFF2.CC0C5CAC
Content-Type: application/octet-stream;
name="gdbthreads-650.diff"
Content-Transfer-Encoding: base64
Content-Description: gdbthreads-650.diff
Content-Disposition: attachment;
filename="gdbthreads-650.diff"
LS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvY29uZmlnL2kzODYvbmJzZGVsZi5taC5vcmlnCTIwMDYt
MTEtMjUgMTE6Mzg6NTEuMDAwMDAwMDAwIC0wNTAwCisrKyAuL2dudS9kaXN0L2dkYjYvZ2RiL2Nv
bmZpZy9pMzg2L25ic2RlbGYubWgJMjAxMC0wNC0xOSAxMjowNzoyMC4wMDAwMDAwMDAgLTA0MDAK
QEAgLTEsNiArMSw2IEBACiAjIEhvc3Q6IE5ldEJTRC9pMzg2IEVMRgogTkFUREVQRklMRVM9IGZv
cmstY2hpbGQubyBpbmYtcHRyYWNlLm8gXAotCW5ic2QtbmF0Lm8gaTM4NmJzZC1uYXQubyBpMzg2
bmJzZC1uYXQubyBic2Qta3ZtLm8KKwluYnNkLW5hdC5vIGkzODZic2QtbmF0Lm8gaTM4Nm5ic2Qt
bmF0Lm8gYnNkLWt2bS5vIG5ic2QtdGhyZWFkLm8KIE5BVF9GSUxFPSBzb2xpYi5oCiAKIExPQURM
SUJFUz0gLWxrdm0KLS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvY29uZmlnL21pcHMvbmJzZC5taC5v
cmlnCTIwMDYtMTItMDYgMTM6MjU6MjkuMDAwMDAwMDAwIC0wNTAwCisrKyAuL2dudS9kaXN0L2dk
YjYvZ2RiL2NvbmZpZy9taXBzL25ic2QubWgJMjAxMC0wNC0xOSAxMzo1NTozOC4wMDAwMDAwMDAg
LTA0MDAKQEAgLTEsMiArMSwyIEBACiAjIEhvc3Q6IE5ldEJTRC9taXBzCi1OQVRERVBGSUxFUz0g
Zm9yay1jaGlsZC5vIGluZi1wdHJhY2UubyBuYnNkLW5hdC5vIG1pcHNuYnNkLW5hdC5vCitOQVRE
RVBGSUxFUz0gZm9yay1jaGlsZC5vIGluZi1wdHJhY2UubyBuYnNkLW5hdC5vIG1pcHNuYnNkLW5h
dC5vIG5ic2QtdGhyZWFkLm8KLS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvbWlwc25ic2QtbmF0LmMu
b3JpZwkyMDA2LTEyLTA2IDEzOjI1OjI5LjAwMDAwMDAwMCAtMDUwMAorKysgLi9nbnUvZGlzdC9n
ZGI2L2dkYi9taXBzbmJzZC1uYXQuYwkyMDEwLTA0LTE5IDEzOjU4OjI1LjAwMDAwMDAwMCAtMDQw
MApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImluZmVyaW9yLmgiCiAjaW5jbHVkZSAicmVn
Y2FjaGUuaCIKICNpbmNsdWRlICJ0YXJnZXQuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKIAogI2lu
Y2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KQEAgLTMyLDYgKzMz
LDcgQEAKICNpbmNsdWRlICJtaXBzLXRkZXAuaCIKICNpbmNsdWRlICJtaXBzbmJzZC10ZGVwLmgi
CiAjaW5jbHVkZSAiaW5mLXB0cmFjZS5oIgorI2luY2x1ZGUgIm5ic2QtdGhyZWFkLmgiCiAKIC8q
IERldGVybWluZSBpZiBQVF9HRVRSRUdTIGZldGNoZXMgdGhpcyByZWdpc3Rlci4gICovCiBzdGF0
aWMgaW50CkBAIC00OCw3ICs1MCw3IEBACiAgICAgICBzdHJ1Y3QgcmVnIHJlZ3M7CiAKICAgICAg
IGlmIChwdHJhY2UgKFBUX0dFVFJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCi0JCSAgKFBU
UkFDRV9UWVBFX0FSRzMpICZyZWdzLCAwKSA9PSAtMSkKKwkJICAoUFRSQUNFX1RZUEVfQVJHMykg
JnJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQogCXBlcnJvcl93aXRoX25hbWUg
KF8oIkNvdWxkbid0IGdldCByZWdpc3RlcnMiKSk7CiAgICAgICAKICAgICAgIG1pcHNuYnNkX3N1
cHBseV9yZWcgKChjaGFyICopICZyZWdzLCByZWdubyk7CkBAIC02MSw3ICs2Myw3IEBACiAgICAg
ICBzdHJ1Y3QgZnByZWcgZnByZWdzOwogCiAgICAgICBpZiAocHRyYWNlIChQVF9HRVRGUFJFR1Ms
IFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCi0JCSAgKFBUUkFDRV9UWVBFX0FSRzMpICZmcHJlZ3Ms
IDApID09IC0xKQorCQkgIChQVFJBQ0VfVFlQRV9BUkczKSAmZnByZWdzLCBUSURHRVQgKGluZmVy
aW9yX3B0aWQpKSA9PSAtMSkKIAlwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCBnZXQgZmxv
YXRpbmcgcG9pbnQgc3RhdHVzIikpOwogCiAgICAgICBtaXBzbmJzZF9zdXBwbHlfZnByZWcgKChj
aGFyICopICZmcHJlZ3MsIHJlZ25vKTsKQEAgLTc2LDEzICs3OCwxMyBAQAogICAgICAgc3RydWN0
IHJlZyByZWdzOwogCiAgICAgICBpZiAocHRyYWNlIChQVF9HRVRSRUdTLCBQSURHRVQgKGluZmVy
aW9yX3B0aWQpLAotCQkgIChQVFJBQ0VfVFlQRV9BUkczKSAmcmVncywgMCkgPT0gLTEpCisJCSAg
KFBUUkFDRV9UWVBFX0FSRzMpICZyZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9PSAtMSkK
IAlwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCBnZXQgcmVnaXN0ZXJzIikpOwogCiAgICAg
ICBtaXBzbmJzZF9maWxsX3JlZyAoKGNoYXIgKikgJnJlZ3MsIHJlZ25vKTsKIAogICAgICAgaWYg
KHB0cmFjZSAoUFRfU0VUUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwgCi0JCSAgKFBUUkFD
RV9UWVBFX0FSRzMpICZyZWdzLCAwKSA9PSAtMSkKKwkJICAoUFRSQUNFX1RZUEVfQVJHMykgJnJl
Z3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQogCXBlcnJvcl93aXRoX25hbWUgKF8o
IkNvdWxkbid0IHdyaXRlIHJlZ2lzdGVycyIpKTsKIAogICAgICAgaWYgKHJlZ25vICE9IC0xKQpA
QCAtOTQsMTMgKzk2LDEzIEBACiAgICAgICBzdHJ1Y3QgZnByZWcgZnByZWdzOyAKIAogICAgICAg
aWYgKHB0cmFjZSAoUFRfR0VURlBSRUdTLCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAotCQkgIChQ
VFJBQ0VfVFlQRV9BUkczKSAmZnByZWdzLCAwKSA9PSAtMSkKKwkJICAoUFRSQUNFX1RZUEVfQVJH
MykgJmZwcmVncywgVElER0VUIChpbmZlcmlvcl9wdGlkKSkgPT0gLTEpCiAJcGVycm9yX3dpdGhf
bmFtZSAoXygiQ291bGRuJ3QgZ2V0IGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKIAogICAgICAg
bWlwc25ic2RfZmlsbF9mcHJlZyAoKGNoYXIgKikgJmZwcmVncywgcmVnbm8pOwogCiAgICAgICBp
ZiAocHRyYWNlIChQVF9TRVRGUFJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCi0JCSAgKFBU
UkFDRV9UWVBFX0FSRzMpICZmcHJlZ3MsIDApID09IC0xKQorCQkgIChQVFJBQ0VfVFlQRV9BUkcz
KSAmZnByZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9PSAtMSkKIAlwZXJyb3Jfd2l0aF9u
YW1lIChfKCJDb3VsZG4ndCB3cml0ZSBmbG9hdGluZyBwb2ludCBzdGF0dXMiKSk7CiAgICAgfQog
fQpAQCAtMTE1LDYgKzExNyw3IEBACiAgIHN0cnVjdCB0YXJnZXRfb3BzICp0OwogCiAgIHQgPSBp
bmZfcHRyYWNlX3RhcmdldCAoKTsKKyAgaW5pdF9uYnNkX3RocmVhZF9vcHMgKHQpOwogICB0LT50
b19mZXRjaF9yZWdpc3RlcnMgPSBtaXBzbmJzZF9mZXRjaF9pbmZlcmlvcl9yZWdpc3RlcnM7CiAg
IHQtPnRvX3N0b3JlX3JlZ2lzdGVycyA9IG1pcHNuYnNkX3N0b3JlX2luZmVyaW9yX3JlZ2lzdGVy
czsKICAgdC0+dG9fcGlkX3RvX2V4ZWNfZmlsZSA9IG5ic2RfcGlkX3RvX2V4ZWNfZmlsZTsKLS0t
IC4vZ251L2Rpc3QvZ2RiNi9nZGIvbmJzZC10aHJlYWQuYy5vcmlnCTIwMTAtMDQtMTkgMTE6NDM6
MDUuMDAwMDAwMDAwIC0wNDAwCisrKyAuL2dudS9kaXN0L2dkYjYvZ2RiL25ic2QtdGhyZWFkLmMJ
MjAxMC0wNC0xOSAxNDo1MDowMi4wMDAwMDAwMDAgLTA0MDAKQEAgLTAsMCArMSw3MTEgQEAKKy8q
IFRocmVhZHMgc3VwcG9ydCBmb3IgTmV0QlNEIDUuMC4KKworICAgQ29weXJpZ2h0IChDKSAyMDEw
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBDb250cmlidXRlZCBieSBQYXVs
IEtvbmluZywgRGVsbCwgaW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAg
IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK
KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2luY2x1
ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJjb21tYW5kLmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisj
aW5jbHVkZSAidGFyZ2V0LmgiCisjaW5jbHVkZSAiaW5mZXJpb3IuaCIKKyNpbmNsdWRlICJnZGJ0
aHJlYWQuaCIKKyNpbmNsdWRlICJyZWdjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIm5ic2QtdGhyZWFkLmgiCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxz
eXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQu
aD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogRGF0YSBz
dHJ1Y3R1cmUgdXNlZCB0byB0cmFjayBOZXRCU0QgdGhyZWFkIHN0YXRlLiAgVGhlcmUgaXMgYSAK
KyAgIHZlY3RvciBvZiB0aGVzZSwgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIExXUCBJRC4gICovCisK
K3N0cnVjdCBsd3BfaW5mbworeworICAvKiBUaGUgcHJvY2VzcyBJRCBvZiB0aGUgTFdQLiAgVGhp
cyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBwcm9jZXNzCisgICAgIElEIGFuZCB0aGUgTFdQIElE
LiAgKi8KKyAgcHRpZF90IHB0aWQ7CisgIAorICAvKiBOb24temVybyBpZiB3ZSB0aGlzIExXUCB3
YXMgcmVwb3J0ZWQgYXMgaGF2aW5nIGJlZW4gc2lnbmFsbGVkCisgICAgIGJ5IHRoZSBQVF9MV1BJ
TkZPIHB0cmFjZSgpIGNhbGwuICAqLworICBpbnQgc2lnbmFsbGVkOworICAKKyAgLyogVGhlIHdh
aXRzdGF0dXMgZm9yIHRoaXMgTFdQJ3MgbGFzdCBldmVudC4gICovCisgIHN0cnVjdCB0YXJnZXRf
d2FpdHN0YXR1cyB3YWl0c3RhdHVzOworfTsKKworLyogVGhlIGx3cF9pbmZvIGJ1ZmZlciBhbmQg
aXRzIGNvbnRyb2wgdmFyaWFibGVzLiAgKi8KK3N0YXRpYyBzdHJ1Y3QgbHdwX2luZm8gKmx3cF9i
dWZmZXI7CitzdGF0aWMgaW50IGx3cF9jb3VudDsKK3N0YXRpYyBpbnQgbHdwX2J1ZnNpemU7CisK
Ky8qIENvdW50IG9mIHNpZ25hbHMgc3RpbGwgcGVuZGluZyBkZWxpdmVyeSB0byBHREIuICBUaGVz
ZSBhcmUgdGhyZWFkcworICAgdGhhdCB3ZXJlIGZvdW5kIHRvIGJlIHN0b3BwZWQgYW5kIG5vdCBi
cmVha3BvaW50cy4gIEZvciB0aHJlYWRzIHRoYXQKKyAgIGhpdCBhIGJyZWFrcG9pbnQsIHdlIHNp
bXBseSBwdXNoIGJhY2sgdGhlIHRocmVhZCBzbyBpdCB3aWxsIGhpdCB0aGUKKyAgIGJyZWFrIGFn
YWluIChpZiBpdCBpc24ndCByZW1vdmVkIGJlZm9yZSB0aGVuKSBidXQgZm9yIG90aGVyIHNpZ25h
bHMsCisgICBmb3IgZXhhbXBsZSBmYXVsdHMsIHRoZSBzaWduYWwgcmVtYWlucyBwZW5kaW5nLCB0
aGUgInRvX3Jlc3VtZSIgdGhhdAorICAgcmVzdW1lcyB0aGUgd2hvbGUgcHJvY2VzcyBpcyBza2lw
cGVkLCBhbmQgdGhlbiB0aGUgInRvX3dhaXQiIHJldHVybnMKKyAgIHRoZSBpbmZvcm1hdGlvbiBh
Ym91dCBvbmUgb2YgdGhlIHBlbmRpbmcgc2lnbmFscyBpbnN0ZWFkLiAgKi8KK3N0YXRpYyBpbnQg
cGVuZGluZ19zaWdzOworCisvKiBUaGUgTFdQIElEIG9mIHRoZSB0aHJlYWQgYmVpbmcgc3RlcHBl
ZCwgb3IgMCBpZiBub25lLiAgKi8KK3N0YXRpYyBpbnQgc3RlcF9sd3BpZDsKKworLyogRmxhZyB0
byBpbmRpY2F0ZSB3aGV0aGVyIGxhc3QgcmVzdW1lIHdhcyBhIHJlc3VtZSBhbGwgdGhyZWFkcyBv
cgorICAgYSByZXN1bWUgc2luZ2xlIHRocmVhZC4gICovCitzdGF0aWMgaW50IHJlc3VtZV9hbGw7
CisKKy8qIE5vbi16ZXJvIGlmIHRoZSBuZXRic2QtdGhyZWFkIGxheWVyIGlzIGFjdGl2ZS4gICov
CitzdGF0aWMgaW50IG5ic2RfdGhyZWFkX2FjdGl2ZSA9IDA7CisKKy8qIFRoZSBuZXRic2QtdGhy
ZWFkIHRhcmdldF9vcHMgc3RydWN0dXJlLiAgKi8KK3N0YXRpYyBzdHJ1Y3QgdGFyZ2V0X29wcyBu
YnNkX3RocmVhZF9vcHM7CisKK2ludCBkZWJ1Z19uYnNkX3RocmVhZDsKK3N0YXRpYyB2b2lkCitz
aG93X2RlYnVnX25ic2RfdGhyZWFkIChzdHJ1Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5
LAorCQkgICAgICBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqYywgY29uc3QgY2hhciAqdmFsdWUp
Cit7CisgIGZwcmludGZfZmlsdGVyZWQgKGZpbGUsIF8oIkRlYnVnZ2luZyBvZiBOZXRCU0QgdGhy
ZWFkIG1vZHVsZSBpcyAlcy5cbiIpLAorCQkgICAgdmFsdWUpOworfQorCisKKy8qIEFjdGl2YXRl
IHRocmVhZCBzdXBwb3J0IGlmIGFwcHJvcHJpYXRlLiAgRG8gbm90aGluZyBpZiB0aHJlYWQKKyAg
IHN1cHBvcnQgaXMgYWxyZWFkeSBhY3RpdmUuICAqLworCitzdGF0aWMgdm9pZAorZW5hYmxlX25i
c2RfdGhyZWFkICh2b2lkKQoreworICBzdHJ1Y3QgbWluaW1hbF9zeW1ib2wgKm1zeW07CisgIHZv
aWQqIGNhbGxlcl9jb250ZXh0OworICBpbnQgc3RhdHVzOworCisgIC8qIElmIGFscmVhZHkgYWN0
aXZlLCBub3RoaW5nIG1vcmUgdG8gZG8uICAqLworICBpZiAobmJzZF90aHJlYWRfYWN0aXZlKQor
ICAgIHJldHVybjsKKworICBpZiAobHdwX2J1ZmZlciAhPSBOVUxMKQorICAgIHsKKyAgICAgIHhm
cmVlIChsd3BfYnVmZmVyKTsKKyAgICAgIGx3cF9idWZmZXIgPSBOVUxMOworICAgICAgbHdwX2Nv
dW50ID0gbHdwX2J1ZnNpemUgPSAwOworICAgIH0KKyAgCisgIC8qIHB1c2hfdGFyZ2V0ICgmbmJz
ZF90aHJlYWRfb3BzKTsgKi8KKyAgbmJzZF90aHJlYWRfYWN0aXZlID0gMTsKK30KKworLyogRGVh
Y3RpdmF0ZSB0aHJlYWQgc3VwcG9ydC4gIERvIG5vdGhpbmcgaXMgdGhyZWFkIHN1cHBvcnQgaXMK
KyAgIGFscmVhZHkgaW5hY3RpdmUuICAqLworCisjaWYgMAorc3RhdGljIHZvaWQKK2Rpc2FibGVf
bmJzZF90aHJlYWQgKHZvaWQpCit7CisgIGlmICghbmJzZF90aHJlYWRfYWN0aXZlKQorICAgIHJl
dHVybjsKKworICB1bnB1c2hfdGFyZ2V0ICgmbmJzZF90aHJlYWRfb3BzKTsKKyAgbmJzZF90aHJl
YWRfYWN0aXZlID0gMDsKK30KKyNlbmRpZgorCisvKiBVcGRhdGUgb3VyIGx3cF9pbmZvIGJ1ZmZl
ciwgYW5kIHRlbGwgR0RCIGFib3V0IGFkZHMgb3IgZGVsZXRlcy4KKworICAgQnkgZG9pbmcgdGhl
IHRocmVhZCBhZGQgYW5kIHRocmVhZCBkZWxldGUgb3BlcmF0aW9ucyBoZXJlIGFzIHdlCisgICBs
ZWFybiBhYm91dCB0aHJlYWRzLCB3ZSBhbGxvdyB1c2VycyB0byBydW4gdGhyZWFkLXNwZWNpZmlj
IGNvbW1hbmRzCisgICB3aXRob3V0IG5lZWRpbmcgdG8gcnVuICJpbmZvIHRocmVhZHMiIGZpcnN0
LiAKKworICAgVGhlIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byB0aGUgd2FpdHN0YXR1cyBzdHJ1
Y3QsIHdoaWNoCisgICBpcyBjb3BpZWQgaW50byB0aGUgd2FpdHN0YXR1cyBmb3IgdGhlIHRocmVh
ZCB3ZSBmaW5kIGFzIHRoZSBzaWduYWxsZWQKKyAgIHRocmVhZC4gICovCisKK3N0YXRpYyB2b2lk
Cit1cGRhdGVfbHdwYnVmIChzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cykKK3sKKyAg
aW50IHBpOworICBsd3BpZF90IGx3cF9pZCwgc2lnX2x3cGlkOworICBzdHJ1Y3QgcHRyYWNlX2x3
cGluZm8gcHRfaW5mbzsKKyAgcHRpZF90IHB0aWQ7CisgIAorICAvKiBBY2N1bXVsYXRlIGFuIGFy
cmF5IG9mIE5ldEJTRCB0aHJlYWRzLCBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIExXUCBpZC4KKwor
ICAgICBUaGUgcmVhc29uIGZvciB1c2luZyBkZXNjZW5kaW5nIG9yZGVyIGlzIHRoYXQgdGhpcyBp
cyB0aGUgb3JkZXIKKyAgICAgaW4gd2hpY2ggTFdQcyBhcmUgcmV0dXJuZWQgYnkgdGhlIHB0cmFj
ZSgpIFBUX0xXUElORk8gZnVuY3Rpb24sCisgICAgIGJlY2F1c2UgaXQgcmV0dXJucyB0aGVtIGlu
IHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGV4aXN0IGluIHRoZQorICAgICBwX2x3cHMgbGlzdCBm
b3IgdGhlIHByb2Nlc3MsIGFuZCBuZXcgZW50cmllcyBhcmUgYXNzaWduZWQgYXNjZW5kaW5nCisg
ICAgIExXUCBJRHMgYW5kIGFyZSBhZGRlZCB0byB0aGUgaGVhZCBvZiB0aGF0IGxpc3QuICAqLwor
CisgIGx3cF9pZCA9IHNpZ19sd3BpZCA9IDA7CisgIHBpID0gMDsKKyAgCisgIHdoaWxlICgxKQor
ICAgIHsKKyAgICAgIHB0X2luZm8ucGxfbHdwaWQgPSBsd3BfaWQ7CisgICAgICBlcnJubyA9IDA7
CisgICAgICBpZiAocHRyYWNlIChQVF9MV1BJTkZPLCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAor
CQkgICZwdF9pbmZvLCBzaXplb2YgKHB0X2luZm8pKSA9PSAtMSkKKwl7CisJICBpZiAoZXJybm8g
PT0gRVNSQ0gpCisJICAgIGJyZWFrOworCSAgZWxzZSBpZiAoZXJybm8gIT0gMCkKKwkgICAgcGVy
cm9yX3dpdGhfbmFtZSAoXygiQ291bGRuJ3QgZ2V0IHRocmVhZCBpbmZvcm1hdGlvbiIpKTsKKwl9
CisKKyAgICAgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKwlmcHJpbnRmX3VuZmlsdGVyZWQgKGdk
Yl9zdGRsb2csCisJCQkgICAgIk5UVVA6IGx3cGluZm8gb24gJWQgcmV0dXJucyBsd3AgJWQsIHBs
X2V2ZW50ICVkXG4iLAorCQkJICAgIGx3cF9pZCwgcHRfaW5mby5wbF9sd3BpZCwgcHRfaW5mby5w
bF9ldmVudCk7CisJICAKKyAgICAgIC8qIFJldHJpZXZlIHRoZSBMV1AgSUQgdGhhdCB3YXMgZm91
bmQuICBUaGlzIGFsc28gc2V0cyB0aGUgSUQgdG8KKwkgc3RhcnQgZnJvbSB0aGUgbmV4dCB0aW1l
IGFyb3VuZCB0aGUgbG9vcC4gICovCisgICAgICBsd3BfaWQgPSBwdF9pbmZvLnBsX2x3cGlkOwor
CisgICAgICAvKiBMV1AgaWQgMCBpcyBlbmQgb2YgbGlzdC4gICovCisgICAgICBpZiAobHdwX2lk
ID09IDApCisJYnJlYWs7CisgICAgICAKKyAgICAgIC8qIElmIHRoZSBMV1Agd2UgZm91bmQgaGFz
IGFuIElEIGxlc3MgdGhhbiB0aGUgSUQgb2YgdGhlIGN1cnJlbnQKKwkgYnVmZmVyIGVudHJ5LCB0
aGVuIHRoZSBjdXJyZW50IGJ1ZmZlciBlbnRyeSBpcyBhIGRlbGV0ZWQgdGhyZWFkLgorCSBUZWxs
IEdEQiBhYm91dCBpdHMgZGVtaXNlLCB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBidWZmZXIuIAor
CSAgCisJIFdlIGhhdmUgdG8gZG8gdGhpcyBpbiBhIGxvb3AgdW50aWwgd2UgcnVuIG91dCBvZiB0
aHJlYWRzCisJIHRvIGJlIHJlbW92ZWQuICAqLworICAgICAgd2hpbGUgKHBpIDwgbHdwX2NvdW50
ICYmIGx3cF9pZCA8IFRJREdFVCAobHdwX2J1ZmZlcltwaV0ucHRpZCkpCisJeworCSAgaWYgKGRl
YnVnX25ic2RfdGhyZWFkKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJ
CQkJIk5UVVA6IHRocmVhZCBwdGlkICVkLCVsZCBoYXMgZGlzYXBwZWFyZWRcbiIsCisJCQkJUElE
R0VUIChsd3BfYnVmZmVyW3BpXS5wdGlkKSwKKwkJCQlUSURHRVQgKGx3cF9idWZmZXJbcGldLnB0
aWQpKTsKKworCSAgLyogVGVsbCBHREIuICAqLworCSAgZGVsZXRlX3RocmVhZCAobHdwX2J1ZmZl
cltwaV0ucHRpZCk7CisKKwkgIC8qIFJlbW92ZSB0aGUgZGVsZXRlZCBlbnRyeS4gICovCisJICBp
ZiAocGkgPCBsd3BfY291bnQpCisJICAgIG1lbW1vdmUgKGx3cF9idWZmZXIgKyBwaSArIDEsIGx3
cF9idWZmZXIgKyBwaSwgCisJCSAgICAgKGx3cF9jb3VudCAtIHBpKSAqIHNpemVvZiAoc3RydWN0
IGx3cF9pbmZvKSk7CisJICBsd3BfY291bnQtLTsKKwl9CisKKyAgICAgIC8qIElmIHdlJ3JlIG5v
dyBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciwgb3IgdGhlIExXUCBmb3VuZAorCSBo
YXMgYW4gTFdQIElEIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBlbnRyeSBpbiB0aGUgYnVmZmVy
LCB0aGlzCisJIGlzIGEgbmV3IHRocmVhZC4gIEFsbG9jYXRlIG1vcmUgYnVmZmVyIHNwYWNlIGlm
IG5lZWQgYmUsCisJIG1ha2Ugcm9vbSBmb3IgdGhpcyBlbnRyeSwgYW5kIHN0b3JlIGl0LiAgVGhl
biB0ZWxsIEdEQiBhYm91dAorCSB0aGUgbmV3IHRocmVhZC4gICovCisgICAgICBpZiAocGkgPj0g
bHdwX2NvdW50IHx8IGx3cF9pZCA+IFRJREdFVCAobHdwX2J1ZmZlcltwaV0ucHRpZCkpCisJewor
CSAgLyogQWxsb2NhdGUgbW9yZSBzcGFjZSwgaWYgd2UgbmVlZCBpdC4gICovCisJICBpZiAobHdw
X2NvdW50ID09IGx3cF9idWZzaXplKQorCSAgICB7CisJICAgICAgaWYgKGx3cF9idWZzaXplKQor
CQlsd3BfYnVmc2l6ZSAqPSAyOworCSAgICAgIGVsc2UKKwkJbHdwX2J1ZnNpemUgPSAxOworCSAg
ICAgIGx3cF9idWZmZXIgPSAoc3RydWN0IGx3cF9pbmZvICopIHhyZWFsbG9jIChsd3BfYnVmZmVy
LCAKKwkJCQkJCQkgbHdwX2J1ZnNpemUgKiBzaXplb2YgKHN0cnVjdCBsd3BfaW5mbykpOworCSAg
ICB9CisKKwkgIC8qIFB1c2ggY3VycmVudCBhbmQgbGF0ZXIgZW50cmllcywgaWYgYW55LCBvdmVy
LiAgKi8KKwkgIGlmIChwaSA8IGx3cF9jb3VudCkKKwkgICAgbWVtbW92ZSAobHdwX2J1ZmZlciAr
IHBpICsgMSwgbHdwX2J1ZmZlciArIHBpLCAKKwkJICAgICAobHdwX2NvdW50IC0gcGkpICogc2l6
ZW9mIChzdHJ1Y3QgbHdwX2luZm8pKTsKKworCSAgLyogVXBkYXRlIHRoZSBjb3VudCBvZiBMV1Bz
LiAgKi8KKwkgIGx3cF9jb3VudCsrOworCisJICAvKiBJbml0aWFsaXplIHRoZSBuZXcgZW50cnku
ICAqLworCSAgbHdwX2J1ZmZlcltwaV0ucHRpZCA9IE1FUkdFUElEIChQSURHRVQgKGluZmVyaW9y
X3B0aWQpLCBsd3BfaWQpOworCSAgaWYgKHB0X2luZm8ucGxfZXZlbnQgPT0gUExfRVZFTlRfU0lH
TkFMKQorCSAgICB7CisJICAgICAgbHdwX2J1ZmZlcltwaV0uc2lnbmFsbGVkID0gMTsKKwkgICAg
ICBsd3BfYnVmZmVyW3BpXS53YWl0c3RhdHVzID0gKnN0YXR1czsKKwkgICAgICBzaWdfbHdwaWQg
PSBsd3BfaWQ7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgbHdwX2J1ZmZlcltwaV0uc2lnbmFsbGVk
ID0gMDsKKworCSAgLyogQWR2YW5jZSB0aGUgTFdQIGJ1ZmZlciBwb2ludGVyLiAgKi8KKwkgIHBp
Kys7CisJICAKKwkgIC8qIFRlbGwgR0RCIGFib3V0IHRoZSBuZXcgdGhyZWFkLiAgKi8KKwkgIGlm
IChsd3BfY291bnQgPT0gMSkKKwkgICAgeworCSAgICAgIC8qIFNlZSBpZiBHREIgc3RpbGwgaGFz
IFRJRCB6ZXJvLCBpZiBzbyBzZXQgdGhlIFRJRC4gICovCisJICAgICAgaWYgKFRJREdFVCAoaW5m
ZXJpb3JfcHRpZCkgPT0gMCkKKwkJeworCQkgIHN0cnVjdCB0aHJlYWRfaW5mbyAqdHA7CisJCSAg
CisJCSAgcHRpZCA9IE1FUkdFUElEIChQSURHRVQgKGluZmVyaW9yX3B0aWQpLCBsd3BfaWQpOwor
CQkgIC8qIHRocmVhZF9jaGFuZ2VfcHRpZCAoaW5mZXJpb3JfcHRpZCwgcHRpZCk7ICovCisJCSAg
dHAgPSBmaW5kX3RocmVhZF9waWQgKGluZmVyaW9yX3B0aWQpOworCQkgIGlmICh0cCAhPSBOVUxM
KQorCQkgICAgeworCQkgICAgICB0cC0+cHRpZCA9IHB0aWQ7CisJCSAgICAgIGluZmVyaW9yX3B0
aWQgPSBwdGlkOworCQkgIAorCQkgICAgICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJCQlmcHJp
bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSAgICAiTlRVUDogc2V0dGluZyBtYWlu
IHRocmVhZCBwdGlkIHRvICVkLCVsZFxuIiwKKwkJCQkJICAgIFBJREdFVCAocHRpZCksIFRJREdF
VCAocHRpZCkpOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgLyogTmV3IHRo
cmVhZCAoZmlyc3QgdGhyZWFkKSwgYWRkIGl0IHRvIEdEQi4gICovCisJCSAgICAgIGluZmVyaW9y
X3B0aWQgPSBwdGlkOworCQkgICAgICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJCQlmcHJpbnRm
X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSAgICAiTlRVUDogYWRkaW5nIGZpcnN0IHRo
cmVhZCBwdGlkICVkLCVkXG4iLAorCQkJCQkgICAgUElER0VUIChpbmZlcmlvcl9wdGlkKSwgbHdw
X2lkKTsKKwkJICAgICAgYWRkX3RocmVhZCAocHRpZCk7CisJCSAgICB9CisJCX0KKwkgICAgfQor
CSAgZWxzZQorCSAgICB7CisJICAgICAgLyogTmV3IHRocmVhZCBidXQgbm90IHRoZSBmaXJzdCwg
YWRkIGl0IHRvIEdEQi4gICovCisJICAgICAgaWYgKGRlYnVnX25ic2RfdGhyZWFkKQorCQlmcHJp
bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICJOVFVQOiBhZGRpbmcgbmV3IHRo
cmVhZCBwdGlkICVkLCVkXG4iLAorCQkJCSAgICBQSURHRVQgKGluZmVyaW9yX3B0aWQpLCBsd3Bf
aWQpOworCSAgICAgIGFkZF90aHJlYWQgKE1FUkdFUElEIChQSURHRVQgKGluZmVyaW9yX3B0aWQp
LCBsd3BfaWQpKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBGb3VuZCBhbiBl
eGlzdGluZyB0aHJlYWQuICBVcGRhdGUgaXRzIHN0YXR1cyBpbiB0aGUgYnVmZmVyLgorCSAgICAg
Tm90ZSB0aGF0IHdlIGNsZWFyIHRoZSBzaWduYWxsZWQgZmxhZyBpZiB0aGlzIGlzIHRoZSBmaXJz
dAorCSAgICAgY2FsbCBhbmQgdGhpcyB0aHJlYWQgd2Fzbid0IHRoZSBzaWduYWxsZWQgdGhyZWFk
LCBidXQgd2UgCisJICAgICBsZWF2ZSBpdCBhbG9uZSBvbiBzdWJzZXF1ZW50IGNhbGxzLiAgVGhh
dCB3YXkgdGhlIHN1YnNlcXVlbnQKKwkgICAgIGNhbGxzIHdpbGwgYWNjdW11bGF0ZSB0aGUgc2V0
IG9mIHNpZ25hbGxlZCB0aHJlYWRzLiAgKi8KKwkgIGlmIChwdF9pbmZvLnBsX2V2ZW50ID09IFBM
X0VWRU5UX1NJR05BTCkKKwkgICAgeworCSAgICAgIGx3cF9idWZmZXJbcGldLnNpZ25hbGxlZCA9
IDE7CisJICAgICAgbHdwX2J1ZmZlcltwaV0ud2FpdHN0YXR1cyA9ICpzdGF0dXM7CisJICAgICAg
c2lnX2x3cGlkID0gbHdwX2lkOworCSAgICB9CisJICAKKwkgIC8qIEFkdmFuY2UgdGhlIExXUCBi
dWZmZXIgcG9pbnRlci4gICovCisJICBwaSsrOworCX0KKyAgICB9CisgIGlmIChkZWJ1Z19uYnNk
X3RocmVhZCkKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkiTlRVUDog
c2lnbmFsbGVkIHRocmVhZCBsd3BpZCBpcyAlZFxuIiwgc2lnX2x3cGlkKTsKKworfQorCisjaWYg
MAorLyogVGhlICJ0b19kZXRhY2giIG1ldGhvZCBvZiB0aGUgbmJzZF90aHJlYWRfb3BzLiAgKi8K
Kworc3RhdGljIHZvaWQKK25ic2RfdGhyZWFkX2RldGFjaCAoY2hhciAqYXJncywgaW50IGZyb21f
dHR5KQoreyAgIAorICBzdHJ1Y3QgdGFyZ2V0X29wcyAqYmVuZWF0aCA9IGZpbmRfdGFyZ2V0X2Jl
bmVhdGggKCZuYnNkX3RocmVhZF9vcHMpOworCisgIGRpc2FibGVfbmJzZF90aHJlYWQgKCk7Cisg
IGJlbmVhdGgtPnRvX2RldGFjaCAoYXJncywgZnJvbV90dHkpOworfQorI2VuZGlmCisKKy8qIFJl
c3VtZSBleGVjdXRpb24gb2YgdGhyZWFkIFBUSUQsIG9yIGFsbCB0aHJlYWRzIGlmIFBUSUQgaXMg
LTEuICBJZgorICAgU1RFUCBpcyBub256ZXJvLCBzaW5nbGUtc3RlcCBpdC4gIElmIFNJR05BTCBp
cyBub256ZXJvLCBnaXZlIGl0CisgICB0aGF0IHNpZ25hbC4gICovCisKK3N0YXRpYyB2b2lkCitu
YnNkX3RocmVhZF9yZXN1bWUgKHB0aWRfdCBwdGlkLCBpbnQgc3RlcCwgZW51bSB0YXJnZXRfc2ln
bmFsIHNpZ25hbCkKK3sKKyAgcGlkX3QgcGlkOworICBpbnQgcmVxdWVzdDsKKyAgCisgIC8qIEEg
c3BlY2lmaWMgUFRJRCBtZWFucyBgc3RlcCBvbmx5IHRoaXMgcHJvY2VzcyBpZCcuICAqLworICBp
ZiAocHRpZF9lcXVhbCAobWludXNfb25lX3B0aWQsIHB0aWQpIHx8IFRJREdFVCAocHRpZCkgPD0g
MCkKKyAgICB7CisgICAgICByZXN1bWVfYWxsID0gMTsKKyAgICAgIHB0aWQgPSBpbmZlcmlvcl9w
dGlkOworICAgIH0KKyAgZWxzZQorICAgIHJlc3VtZV9hbGwgPSAwOworICAKKyAgcGlkID0gcHRp
ZF9nZXRfcGlkIChwdGlkKTsKKworI2lmIDAKKyAgaWYgKGNhdGNoX3N5c2NhbGxfZW5hYmxlZCAo
KSA+IDApCisgICAgcmVxdWVzdCA9IFBUX1NZU0NBTEw7CisgIGVsc2UKKyNlbmRpZgorICAgIHJl
cXVlc3QgPSBQVF9DT05USU5VRTsKKworI2lmZGVmIFBUX1NURVAKKyAgaWYgKHN0ZXApCisgICAg
eworICAgICAgLyogSWYgdGhpcyBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBQVF9TVEVQLCBhIGhp
Z2hlciBsZXZlbAorICAgICAgICAgZnVuY3Rpb24gd2lsbCBoYXZlIGNhbGxlZCBzaW5nbGVfc3Rl
cCgpIHRvIHRyYW5zbXV0ZSB0aGUgc3RlcAorICAgICAgICAgcmVxdWVzdCBpbnRvIGEgY29udGlu
dWUgcmVxdWVzdCAoYnkgc2V0dGluZyBicmVha3BvaW50cyBvbgorICAgICAgICAgYWxsIHBvc3Np
YmxlIHN1Y2Nlc3NvciBpbnN0cnVjdGlvbnMpLCBzbyB3ZSBkb24ndCBoYXZlIHRvCisgICAgICAg
ICB3b3JyeSBhYm91dCB0aGF0IGhlcmUuICAqLworICAgICAgcmVxdWVzdCA9IFBUX1NURVA7Cisg
ICAgfQorI2VuZGlmCisKKyAgLyogQW4gYWRkcmVzcyBvZiAoUFRSQUNFX1RZUEVfQVJHMykxIHRl
bGxzIHB0cmFjZSB0byBjb250aW51ZSBmcm9tCisgICAgIHdoZXJlIGl0IHdhcy4gIElmIEdEQiB3
YW50ZWQgaXQgdG8gc3RhcnQgc29tZSBvdGhlciB3YXksIHdlIGhhdmUKKyAgICAgYWxyZWFkeSB3
cml0dGVuIGEgbmV3IHByb2dyYW0gY291bnRlciB2YWx1ZSB0byB0aGUgY2hpbGQuICAqLworICBl
cnJubyA9IDA7CisgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKyAgICBmcHJpbnRmX3VuZmlsdGVy
ZWQgKGdkYl9zdGRsb2csCisJCQkiTlRSOiAlcyBwdGlkICVkLCVsZCwgJXMsIHNpZ25hbCAlZFxu
IiwKKwkJCShzdGVwID8gInN0ZXBwaW5nIiA6ICJyZXN1bWluZyIpLAorCQkJUElER0VUIChwdGlk
KSwgVElER0VUIChwdGlkKSwKKwkJCShyZXN1bWVfYWxsID8gImFsbCB0aHJlYWRzIiA6ICJzaW5n
bGUgdGhyZWFkIiksCisJCQlzaWduYWwpOworCisgIC8qIEFzc3VtZSBub3Qgc3RlcHBpbmcgc29t
ZSBMV1AgSUQuICAqLworICBzdGVwX2x3cGlkID0gMDsKKyAgaWYgKHN0ZXApCisgICAgeworICAg
ICAgc3RlcF9sd3BpZCA9IFRJREdFVCAocHRpZCk7CisgICAgICBpZiAoc3RlcF9sd3BpZCA8IDAp
CisJc3RlcF9sd3BpZCA9IC1zdGVwX2x3cGlkOworICAgIH0JCisgIAorICBpZiAocmVzdW1lX2Fs
bCkKKyAgICB7CisgICAgICBpZiAocGVuZGluZ19zaWdzID4gMCkKKwl7CisJICAvKiBXZSBoYXZl
IHBlbmRpbmcgc2lnbmFscyBmcm9tIHRoZSBwcmV2aW91cyB3YWl0IHN0aWxsIAorCSAgICAgbmVl
ZGluZyB0byBiZSBkZWxpdmVyZWQuICBTbyBkb24ndCByZXN1bWUgdGhlIHByb2Nlc3MsCisJICAg
ICBpbnN0ZWFkIHRha2Ugbm8gYWN0aW9uIGFuZCB3ZSdsbCBkZWxpdmVyIG9uZSBvZiB0aG9zZQor
CSAgICAgcGVuZGluZyBzaWduYWxzIGF0IHRoZSBuZXh0IHdhaXQuICAqLworCSAgaWYgKGRlYnVn
X25ic2RfdGhyZWFkKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJ
Ik5UUjogcHRpZCAlZCwlbGQgaGFzICVkIHBlbmRpbmcgc2lnbmFscywgc2tpcHBpbmcgcmVzdW1l
XG4iLAorCQkJCVBJREdFVCAocHRpZCksIFRJREdFVCAocHRpZCksIHBlbmRpbmdfc2lncyk7CisJ
ICByZXR1cm47CisJfQorICAgICAgaWYgKHN0ZXApCisJcHRyYWNlIChyZXF1ZXN0LCBwaWQsICh2
b2lkICopIDEsIFRJREdFVCAocHRpZCkpOworICAgICAgZWxzZQorCXB0cmFjZSAocmVxdWVzdCwg
cGlkLCAodm9pZCAqKSAxLAorCQl0YXJnZXRfc2lnbmFsX3RvX2hvc3QgKHNpZ25hbCkpOworICAg
IH0KKyAgZWxzZQorICAgIHB0cmFjZSAocmVxdWVzdCwgcGlkLCAodm9pZCAqKSAxLCAtVElER0VU
IChwdGlkKSk7CisgIAorICBpZiAoZXJybm8gIT0gMCkKKyAgICBwZXJyb3Jfd2l0aF9uYW1lICgo
InB0cmFjZSIpKTsKK30KKworLyogV2FpdCBmb3IgdGhlIGNoaWxkIHNwZWNpZmllZCBieSBQVElE
IHRvIGRvIHNvbWV0aGluZy4gIFJldHVybiB0aGUKKyAgIHByb2Nlc3MgSUQgb2YgdGhlIGNoaWxk
LCBvciBNSU5VU19PTkVfUFRJRCBpbiBjYXNlIG9mIGVycm9yOyBzdG9yZQorICAgdGhlIHN0YXR1
cyBpbiAqT1VSU1RBVFVTLiAgKi8KKworc3RhdGljIHB0aWRfdAorbmJzZF90aHJlYWRfd2FpdDIg
KHB0aWRfdCBwdGlkLAorCQkgICBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKm91cnN0YXR1cywg
aW50IG9wdGlvbnMpCit7CisgIHBpZF90IHBpZDsKKyAgaW50IHN0YXR1cywgc2F2ZV9lcnJubzsK
KworICBkbworICAgIHsKKyAgICAgIHNldF9zaWdpbnRfdHJhcCAoKTsKKworICAgICAgZG8KKwl7
CisJICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri
X3N0ZGxvZywKKwkJCQkiTlRXMjogd2FpdGluZyBmb3IgcHRpZCAlZCwlbGQsIG9wdCAlZFxuIiwK
KwkJCQlQSURHRVQgKHB0aWQpLCBUSURHRVQgKHB0aWQpLCBvcHRpb25zKTsKKworCSAgcGlkID0g
d2FpdHBpZCAocHRpZF9nZXRfcGlkIChwdGlkKSwgJnN0YXR1cywgb3B0aW9ucyk7CisJICBzYXZl
X2Vycm5vID0gZXJybm87CisJICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJICAgIGZwcmludGZf
dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkiTlRXMjogd2FpdHBpZCBlcnJubyBpcyAlZCwg
cGlkICVkLCBzdGF0dXMgJXhcbiIsCisJCQkJc2F2ZV9lcnJubywgcGlkLCBzdGF0dXMpOworCX0K
KyAgICAgIHdoaWxlIChwaWQgPT0gLTEgJiYgc2F2ZV9lcnJubyA9PSBFSU5UUik7CisKKyAgICAg
IGNsZWFyX3NpZ2ludF90cmFwICgpOworCisgICAgICAvKiBJZiBub3RoaW5nIGZvdW5kIGluIHRo
ZSBubyB3YWl0IGNhc2UsIHJlcG9ydCB0aGF0LiAgKi8KKyAgICAgIGlmIChvcHRpb25zID09IFdO
T0hBTkcgJiYgcGlkID09IDApCisJcmV0dXJuIHBpZF90b19wdGlkICgtMSk7CisgICAgICAKKyAg
ICAgIGlmIChwaWQgPT0gLTEpCisJeworCSAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkZXJy
LAorCQkJICAgICAgXygiQ2hpbGQgcHJvY2VzcyB1bmV4cGVjdGVkbHkgbWlzc2luZzogJXMuXG4i
KSwKKwkJCSAgICAgIHNhZmVfc3RyZXJyb3IgKHNhdmVfZXJybm8pKTsKKworCSAgLyogQ2xhaW0g
aXQgZXhpdGVkIHdpdGggdW5rbm93biBzaWduYWwuICAqLworCSAgb3Vyc3RhdHVzLT5raW5kID0g
VEFSR0VUX1dBSVRLSU5EX1NJR05BTExFRDsKKwkgIG91cnN0YXR1cy0+dmFsdWUuc2lnID0gVEFS
R0VUX1NJR05BTF9VTktOT1dOOworCSAgcmV0dXJuIGluZmVyaW9yX3B0aWQ7CisJfQorCisgICAg
ICAvKiBJZ25vcmUgdGVybWluYXRlZCBkZXRhY2hlZCBjaGlsZCBwcm9jZXNzZXMuICAqLworICAg
ICAgaWYgKCFXSUZTVE9QUEVEIChzdGF0dXMpICYmIHBpZCAhPSBwdGlkX2dldF9waWQgKGluZmVy
aW9yX3B0aWQpKQorCXBpZCA9IC0xOworICAgIH0KKyAgd2hpbGUgKHBpZCA9PSAtMSk7CisKKyAg
c3RvcmVfd2FpdHN0YXR1cyAob3Vyc3RhdHVzLCBzdGF0dXMpOworICByZXR1cm4gcGlkX3RvX3B0
aWQgKHBpZCk7Cit9CisKK3N0YXRpYyBpbnQKK25ic2RfdGhyZWFkX2NhbmNlbF9icmVha3BvaW50
IChzdHJ1Y3QgbHdwX2luZm8gKmxwKQoreworICAvKiBBcnJhbmdlIGZvciBhIGJyZWFrcG9pbnQg
dG8gYmUgaGl0IGFnYWluIGxhdGVyLiAgV2UgZG9uJ3Qga2VlcAorICAgICB0aGUgU0lHVFJBUCBz
dGF0dXMgYW5kIGRvbid0IGZvcndhcmQgdGhlIFNJR1RSQVAgc2lnbmFsIHRvIHRoZQorICAgICBM
V1AuICBXZSB3aWxsIGhhbmRsZSB0aGUgY3VycmVudCBldmVudCwgZXZlbnR1YWxseSB3ZSB3aWxs
IHJlc3VtZQorICAgICB0aGlzIExXUCwgYW5kIHRoaXMgYnJlYWtwb2ludCB3aWxsIHRyYXAgYWdh
aW4uCisKKyAgICAgSWYgd2UgZG8gbm90IGRvIHRoaXMsIHRoZW4gd2UgcnVuIHRoZSByaXNrIHRo
YXQgdGhlIHVzZXIgd2lsbAorICAgICBkZWxldGUgb3IgZGlzYWJsZSB0aGUgYnJlYWtwb2ludCwg
YnV0IHRoZSBMV1Agd2lsbCBoYXZlIGFscmVhZHkKKyAgICAgdHJpcHBlZCBvbiBpdC4gICovCisK
KyAgaWYgKGxwLT53YWl0c3RhdHVzLmtpbmQgID09IFRBUkdFVF9XQUlUS0lORF9TVE9QUEVECisg
ICAgICAmJiBscC0+d2FpdHN0YXR1cy52YWx1ZS5zaWcgPT0gU0lHVFJBUAorICAgICAgJiYgYnJl
YWtwb2ludF9pbnNlcnRlZF9oZXJlX3AgKHJlYWRfcGNfcGlkIChscC0+cHRpZCkgLQorCQkJCSAg
ICAgREVDUl9QQ19BRlRFUl9CUkVBSykpCisgICAgeworICAgICAgaWYgKGRlYnVnX25ic2RfdGhy
ZWFkKQorCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCSAgICAiTlRDQjogUHVz
aCBiYWNrIGJyZWFrcG9pbnQgZm9yIHB0aWQgJWQsJWxkXG4iLAorCQkJICAgIFBJREdFVCAobHAt
PnB0aWQpLCBUSURHRVQgKGxwLT5wdGlkKSk7CisKKyAgICAgIC8qIEJhY2sgdXAgdGhlIFBDIGlm
IG5lY2Vzc2FyeS4gICovCisgICAgICBpZiAoREVDUl9QQ19BRlRFUl9CUkVBSykKKwl3cml0ZV9w
Y19waWQgKHJlYWRfcGNfcGlkIChscC0+cHRpZCkgLSBERUNSX1BDX0FGVEVSX0JSRUFLLCBscC0+
cHRpZCk7CisKKyAgICAgIC8qIFdlIG5vIGxvbmdlciBoYXZlIGEgcGVuZGluZyBzaWduYWwgZm9y
IHRoaXMgdGhyZWFkLiAgKi8KKyAgICAgIGxwLT5zaWduYWxsZWQgPSAwOworCisgICAgICAvKiBO
b3QgYSBwZW5kaW5nIHNpZ25hbCBhbnltb3JlLiAgKi8KKyAgICAgIHJldHVybiAxOworICAgIH0K
KyAgcmV0dXJuIDA7Cit9CisKKy8qIFRoZSAidG9fd2FpdCIgbWV0aG9kIG9mIHRoZSBuYnNkX3Ro
cmVhZF9vcHMuICAqLworCitzdGF0aWMgcHRpZF90CituYnNkX3RocmVhZF93YWl0IChwdGlkX3Qg
cHRpZCwgc3RydWN0IHRhcmdldF93YWl0c3RhdHVzICpzdGF0dXMpCit7CisgIHB0aWRfdCBhY3Rp
dmVfcHRpZDsKKyAgc3RydWN0IGx3cF9pbmZvICpzZWxfdGhyZWFkOworICBpbnQgc2lnX3RocmVh
ZHMsIGk7CisgIHN0cnVjdCB0YXJnZXRfd2FpdHN0YXR1cyB0c3RhdHVzOworCisgIC8qIElmIHRo
ZXJlIHdlcmUgcGVuZGluZyBzaWduYWxzIGFuZCBhIHJlc3VtZSBhbGwgdGhyZWFkcyB3YXMgZG9u
ZSwKKyAgICAgdGhlIHByb2Nlc3Mgd2Fzbid0IGFjdHVhbGx5IHJlc3VtZWQgc28gZG9uJ3Qgd2Fp
dCBvbiBpdC4gIEp1c3QKKyAgICAgZ28gb24gdG8gcGljayBhIHRocmVhZCB0byByZXBvcnQgb24u
ICAqLworICBpZiAoIShwZW5kaW5nX3NpZ3MgPiAwICYmIHJlc3VtZV9hbGwpKQorICAgIHsKKyAg
ICAgIHB0aWQgPSBuYnNkX3RocmVhZF93YWl0MiAocHRpZCwgJnRzdGF0dXMsIDApOworCisgICAg
ICAvKiBEZWZhdWx0IHN0YXR1cyByZXR1cm5lZCBpcyB0aGUgb25lIHdlIGp1c3QgZ290LiAgKi8K
KyAgICAgICpzdGF0dXMgPSB0c3RhdHVzOworICAgICAgCisgICAgICAvKiBUaGUgcHRpZCByZXR1
cm5lZCBieSB0aGUgdGFyZ2V0IGJlbmVhdGggdXMgaXMgdGhlIHB0aWQgb2YgdGhlIHByb2Nlc3Mu
CisJIFdlIG5lZWQgdG8gZmluZCB3aGljaCB0aHJlYWQgaXMgY3VycmVudGx5IGFjdGl2ZSBhbmQg
cmV0dXJuIAorCSBpdHMgcHRpZC4gICovCisgICAgICB1cGRhdGVfbHdwYnVmICgmdHN0YXR1cyk7
CisgIAorICAgICAgLyogTG9vcCBjaGVja2luZyBmb3IgYWRkaXRpb25hbCB0aHJlYWRzIHRoYXQg
YXJlIHdhaXRpbmcsIGFuZCBnYXRoZXIKKwkgdXAgdGhlaXIgc3RhdHVzLiAgKi8KKyAgICAgIHdo
aWxlICgxKQorCXsKKwkgIHB0aWQgPSBuYnNkX3RocmVhZF93YWl0MiAocHRpZCwgJnRzdGF0dXMs
IFdOT0hBTkcpOworCSAgaWYgKFBJREdFVCAocHRpZCkgPT0gLTEpCisJICAgIGJyZWFrOworCSAg
dXBkYXRlX2x3cGJ1ZiAoJnRzdGF0dXMpOworCX0KKyAgICB9CisgIAorICAvKiBGaW5kIGEgc3Vp
dGFibGUgc2lnbmFsbGVkIHRocmVhZC4gIFBpY2sgdGhlIHN0ZXBwZWQgb25lLCBpZiB0aGVyZQor
ICAgICBpcyBvbmU7IG90aGVyd2lzZSBwaWNrIGEgcmFuZG9tIG9uZS4gICovCisgIHNlbF90aHJl
YWQgPSBOVUxMOworICBzaWdfdGhyZWFkcyA9IDA7CisgIAorICBmb3IgKGkgPSAwOyBpIDwgbHdw
X2NvdW50OyBpKyspCisgICAgeworICAgICAgaWYgKGx3cF9idWZmZXJbaV0uc2lnbmFsbGVkKQor
CXsKKwkgIHNpZ190aHJlYWRzKys7CisJICBpZiAoVElER0VUIChsd3BfYnVmZmVyW2ldLnB0aWQp
ID09IHN0ZXBfbHdwaWQpCisJICAgIHsKKwkgICAgICAvKiBJZiB0aGVyZSBpcyBhIHN0ZXBwZWQg
dGhyZWFkLCBwaWNrIHRoYXQgb25lLiAgKi8KKwkgICAgICBzZWxfdGhyZWFkID0gJmx3cF9idWZm
ZXJbaV07CisJICAgICAgaWYgKGRlYnVnX25ic2RfdGhyZWFkKQorCQlmcHJpbnRmX3VuZmlsdGVy
ZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICJOVFc6IFBpY2tpbmcgcHRpZCAlZCwlbGQgYmVjYXVz
ZSBpdCBpcyBzdGVwcGVkXG4iLAorCQkJCSAgICBQSURHRVQgKHNlbF90aHJlYWQtPnB0aWQpLAor
CQkJCSAgICBUSURHRVQgKHNlbF90aHJlYWQtPnB0aWQpKTsKKwkgICAgICBicmVhazsKKwkgICAg
fQorCSAgLyogUmFuZG9tbHkgcGljayB0aGlzIG9uZSBvciBrZWVwIHRoZSBwcmV2aW91cyBjaG9p
Y2UsCisJICAgICBzdWNoIHRoYXQgYWxsIG9mIHRoZSBzaWduYWxsZWQgdGhyZWFkcyBoYXZlIGFu
IGVxdWFsCisJICAgICBwcm9iYWJpbGl0eSBvZiBiZWluZyBwaWNrZWQuICAqLworCSAgaWYgKHNl
bF90aHJlYWQgPT0gTlVMTCB8fCAKKwkgICAgICAoKChkb3VibGUpIHJhbmQgKCkpIC8gKFJBTkRf
TUFYICsgMS4wKSkgPCAoMS4wIC8gc2lnX3RocmVhZHMpKQorCSAgICB7CisJICAgICAgc2VsX3Ro
cmVhZCA9ICZsd3BfYnVmZmVyW2ldOworCSAgICAgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKwkJ
ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSAgICAiTlRXOiBQaWNraW5nIHB0
aWQgJWQsJWxkIG91dCBvZiAlZFxuIiwKKwkJCQkgICAgUElER0VUIChzZWxfdGhyZWFkLT5wdGlk
KSwKKwkJCQkgICAgVElER0VUIChzZWxfdGhyZWFkLT5wdGlkKSwgc2lnX3RocmVhZHMpOworCSAg
ICB9CisJfQorICAgIH0KKyAgCisgIC8qIFNjYW4gdGhlIExXUCB0YWJsZSBhZ2Fpbi4gIEZvciBl
YWNoIHNpZ25hbGxlZCBMV1Agb3RoZXIgdGhhbiB0aGUKKyAgICAgY2hvc2VuIG9uZSwgYmFjayBp
dCB1cCB0byB0aGUgYnJlYWtwb2ludCBpZiBpdCB3YXMgc3RvcHBlZCBieSBhCisgICAgIGJyZWFr
cG9pbnQgYW5kIG1hcmsgaXQgYXMgbm90IHNpZ25hbGxlZCAoaXQgd2lsbCByZS1icmVhayBuZXh0
CisgICAgIHRpbWUgd2UgcnVuIHRoZSB3aG9sZSBwcm9jZXNzKS4gIE90aGVyIExXUHMgKHRob3Nl
IHdpdGggc2lnbmFscworICAgICBvdGhlciB0aGFuIGJyZWFrcG9pbnQgc3RvcCkgYXJlIGNvdW50
ZWQgYnV0IG5vdCBiYWNrZWQgdXA7IGlmIHdlCisgICAgIGZpbmQgYW55IG9mIHRob3NlIHRoZW4g
dGhvc2Ugd2lsbCBiZSBkZWxpdmVyZWQgbmV4dC4gICovCisgIHBlbmRpbmdfc2lncyA9IDA7Cisg
IGlmIChzaWdfdGhyZWFkcyA+IDEpCisgICAgeworICAgICAgZm9yIChpID0gMDsgaSA8IGx3cF9j
b3VudDsgaSsrKQorCXsKKwkgIC8qIFNraXAgdGhlIHNlbGVjdGVkIExXUC4gICovCisJICBpZiAo
Jmx3cF9idWZmZXJbaV0gPT0gc2VsX3RocmVhZCkKKwkgICAgY29udGludWU7CisJICAKKwkgIGlm
IChsd3BfYnVmZmVyW2ldLnNpZ25hbGxlZCkKKwkgICAgeworCSAgICAgIGlmIChXSUZTVE9QUEVE
IChsd3BfYnVmZmVyW2ldLndhaXRzdGF0dXMpKQorCQl7CisJCSAgaWYgKCFuYnNkX3RocmVhZF9j
YW5jZWxfYnJlYWtwb2ludCAoJmx3cF9idWZmZXJbaV0pKQorCQkgICAgcGVuZGluZ19zaWdzKys7
CisJCX0KKwkgICAgICBlbHNlCisJCXBlbmRpbmdfc2lncysrOworCSAgICB9CisJfQorICAgIH0K
KyAgCisgIHB0aWQgPSBpbmZlcmlvcl9wdGlkOworICBpZiAoc2VsX3RocmVhZCAhPSBOVUxMKQor
ICAgIHsKKyAgICAgIHB0aWQgPSAgTUVSR0VQSUQgKFBJREdFVCAocHRpZCksIFRJREdFVCAoc2Vs
X3RocmVhZC0+cHRpZCkpOworICAgICAgKnN0YXR1cyA9IHRzdGF0dXM7CisgICAgICAKKyAgICAg
IC8qIFRoZSBzaWduYWwgZm9yIHRoaXMgdGhyZWFkIGlzIG5vdyBiZWluZyByZXBvcnRlZCwgc28g
Y2xlYXIKKwkgdGhlIGZsYWcgdGhhdCBzYXlzIGl0IGhhc24ndCBiZWVuIHJlcG9ydGVkIHlldC4g
ICovCisgICAgICBzZWxfdGhyZWFkLT5zaWduYWxsZWQgPSAwOworICAgIH0KKyAgZWxzZSBpZiAo
ZGVidWdfbmJzZF90aHJlYWQpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAor
CQkJIk5UVzogbm8gc2lnbmFsbGVkIHRocmVhZFxuIik7CisKKyAgaWYgKGRlYnVnX25ic2RfdGhy
ZWFkKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCSJOVFc6IHJldHVy
bmluZyBwdGlkICVkLCVsZFxuIiwKKwkJCVBJREdFVCAocHRpZCksIFRJREdFVCAocHRpZCkpOwor
CisgIHJldHVybiBwdGlkOworfQorCisvKiBUaGUgInRvX21vdXJuX2luZmVyaW9yIiBtZXRob2Qg
b2YgdGhlIG5ic2RfdGhyZWFkX29wcy4gICovCisKK3N0YXRpYyB2b2lkCituYnNkX3RocmVhZF9t
b3Vybl9pbmZlcmlvciAodm9pZCkKK3sKKyAgaW50IHN0YXR1czsKKworICAvKiBXYWl0IGp1c3Qg
b25lIG1vcmUgdGltZSB0byBjb2xsZWN0IHRoZSBpbmZlcmlvcidzIGV4aXQgc3RhdHVzLgorICAg
ICBEbyBub3QgY2hlY2sgd2hldGhlciB0aGlzIHN1Y2NlZWRzIHRob3VnaCwgc2luY2Ugd2UgbWF5
IGJlCisgICAgIGRlYWxpbmcgd2l0aCBhIHByb2Nlc3MgdGhhdCB3ZSBhdHRhY2hlZCB0by4gIFN1
Y2ggYSBwcm9jZXNzIHdpbGwKKyAgICAgb25seSByZXBvcnQgaXRzIGV4aXQgc3RhdHVzIHRvIGl0
cyBvcmlnaW5hbCBwYXJlbnQuICAqLworICB3YWl0cGlkIChwdGlkX2dldF9waWQgKGluZmVyaW9y
X3B0aWQpLCAmc3RhdHVzLCBXTk9IQU5HKTsKKworICBnZW5lcmljX21vdXJuX2luZmVyaW9yICgp
OworCisgIC8qIGlmICghaGF2ZV9pbmZlcmlvcnMgKCkpICovCisgICAgdW5wdXNoX3RhcmdldCAo
Jm5ic2RfdGhyZWFkX29wcyk7Cit9CisKKworLyogVGhlICJ0b190aHJlYWRfYWxpdmUiIG1ldGhv
ZCBvZiB0aGUgbmJzZF90aHJlYWRfb3BzLiAgKi8KK3N0YXRpYyBpbnQKK25ic2RfdGhyZWFkX3Ro
cmVhZF9hbGl2ZSAocHRpZF90IHB0aWQpCit7CisgIC8qIFRoZSB0aHJlYWQgbGlzdCBtYWludGFp
bmVkIGJ5IEdEQiBpcyB1cCB0byBkYXRlLCBzaW5jZSB3ZSB1cGRhdGUKKyAgICAgaXQgZXZlcnl0
aW1lIHdlIHN0b3AuICAgU28gY2hlY2sgdGhpcyBsaXN0LiAgKi8KKyAgcmV0dXJuIGluX3RocmVh
ZF9saXN0IChwdGlkKTsKK30KKworLyogVGhlICJ0b19waWRfdG9fc3RyIiBtZXRob2Qgb2YgdGhl
IG5ic2RfdGhyZWFkX29wcy4gICovCisKK3N0YXRpYyBjaGFyICoKK25ic2RfdGhyZWFkX3BpZF90
b19zdHIgKHB0aWRfdCBwdGlkKQoreworICBpZiAoVElER0VUIChwdGlkKSA9PSAwKQorICAgIHsK
KyAgICAgIHJldHVybiBub3JtYWxfcGlkX3RvX3N0ciAocHRpZCk7CisgICAgfQorICByZXR1cm4g
eHN0cnByaW50ZiAoXygiVGhyZWFkICVsZCIpLCBUSURHRVQgKHB0aWQpKTsKK30KKworLyogVXBk
YXRlIHRoZSB0YXJnZXRfb3BzIHdpdGggb3VyIHRocmVhZCBtYWNoaW5lcnkuICAqLworCit2b2lk
Citpbml0X25ic2RfdGhyZWFkX29wcyAoc3RydWN0IHRhcmdldF9vcHMgKnQpCit7CisgIC8qIHQt
PnRvX2RldGFjaCAgICAgICAgICAgICA9IG5ic2RfdGhyZWFkX2RldGFjaDsgKi8KKyAgdC0+dG9f
cmVzdW1lICAgICAgICAgICAgID0gbmJzZF90aHJlYWRfcmVzdW1lOworICB0LT50b193YWl0ICAg
ICAgICAgICAgICAgPSBuYnNkX3RocmVhZF93YWl0OworICB0LT50b19tb3Vybl9pbmZlcmlvciAg
ICAgPSBuYnNkX3RocmVhZF9tb3Vybl9pbmZlcmlvcjsKKyAgdC0+dG9fdGhyZWFkX2FsaXZlICAg
ICAgID0gbmJzZF90aHJlYWRfdGhyZWFkX2FsaXZlOworICB0LT50b19waWRfdG9fc3RyICAgICAg
ICAgPSBuYnNkX3RocmVhZF9waWRfdG9fc3RyOworCisgIGVuYWJsZV9uYnNkX3RocmVhZCAoKTsK
K30KKwordm9pZAorX2luaXRpYWxpemVfbmJzZF90aHJlYWQgKHZvaWQpCit7CisjaWYgMAorICBp
bml0X25ic2RfdGhyZWFkX29wcyAoKTsKKyAgYWRkX3RhcmdldCAoJm5ic2RfdGhyZWFkX29wcyk7
CisjZW5kaWYKKworICBhZGRfc2V0c2hvd196aW50ZWdlcl9jbWQgKCJuYnNkLXRocmVhZCIsIGNs
YXNzX21haW50ZW5hbmNlLAorCQkJICAgICZkZWJ1Z19uYnNkX3RocmVhZCwgXygiXAorU2V0IGRl
YnVnZ2luZyBvZiBOZXRCU0QgdGhyZWFkIG1vZHVsZS4iKSwgXygiXAorU2hvdyBkZWJ1Z2dpbmcg
b2YgTmV0QlNEIHRocmVhZCBtb2R1bGUuIiksIF8oIlwKK0VuYWJsZXMgcHJpbnRmIGRlYnVnZ2lu
ZyBvdXRwdXQuIiksCisJCQkgICAgTlVMTCwKKwkJCSAgICBzaG93X2RlYnVnX25ic2RfdGhyZWFk
LAorCQkJICAgICZzZXRkZWJ1Z2xpc3QsICZzaG93ZGVidWdsaXN0KTsKK30KLS0tIC4vZ251L2Rp
c3QvZ2RiNi9nZGIvbmJzZC10aHJlYWQuaC5vcmlnCTIwMTAtMDQtMTkgMTE6NDM6MDUuMDAwMDAw
MDAwIC0wNDAwCisrKyAuL2dudS9kaXN0L2dkYjYvZ2RiL25ic2QtdGhyZWFkLmgJMjAxMC0wNC0x
OSAxMTo0MzowNS4wMDAwMDAwMDAgLTA0MDAKQEAgLTAsMCArMSwyNSBAQAorLyogVGhyZWFkcyBz
dXBwb3J0IGZvciBOZXRCU0QgNS4wLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIENvbnRyaWJ1dGVkIGJ5IFBhdWwgS29uaW5nLCBE
ZWxsLCBpbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9n
cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
ZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCitleHRlcm4gdm9pZCBpbml0
X25ic2RfdGhyZWFkX29wcyAoc3RydWN0IHRhcmdldF9vcHMgKnQpOworCi0tLSAuL2dudS9kaXN0
L2dkYjYvZ2RiL2kzODZic2QtbmF0LmMub3JpZwkyMDA3LTAyLTI0IDA4OjA1OjE4LjAwMDAwMDAw
MCAtMDUwMAorKysgLi9nbnUvZGlzdC9nZGI2L2dkYi9pMzg2YnNkLW5hdC5jCTIwMTAtMDQtMTkg
MTI6NDU6MDEuMDAwMDAwMDAwIC0wNDAwCkBAIC05MCw3ICs5MCw3IEBACiAKIC8qIFN1cHBseSB0
aGUgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyBpbiBHUkVHUywgdG8gUkVHQ0FDSEUuICAqLwog
Ci1zdGF0aWMgdm9pZAordm9pZAogaTM4NmJzZF9zdXBwbHlfZ3JlZ3NldCAoc3RydWN0IHJlZ2Nh
Y2hlICpyZWdjYWNoZSwgY29uc3Qgdm9pZCAqZ3JlZ3MpCiB7CiAgIGNvbnN0IGNoYXIgKnJlZ3Mg
PSBncmVnczsKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgR1JFR1MuICBJZiBSRUdOVU0gaXMgLTEs
IGNvbGxlY3QgYW5kIHN0b3JlIGFsbCBhcHByb3ByaWF0ZQogICAgcmVnaXN0ZXJzLiAgKi8KIAot
c3RhdGljIHZvaWQKK3ZvaWQKIGkzODZic2RfY29sbGVjdF9ncmVnc2V0IChjb25zdCBzdHJ1Y3Qg
cmVnY2FjaGUgKnJlZ2NhY2hlLAogCQkJIHZvaWQgKmdyZWdzLCBpbnQgcmVnbnVtKQogewotLS0g
Li9nbnUvZGlzdC9nZGI2L2dkYi9pMzg2YnNkLW5hdC5oLm9yaWcJMjAwNi0wNy0wMiAxNjoxNDox
NS4wMDAwMDAwMDAgLTA0MDAKKysrIC4vZ251L2Rpc3QvZ2RiNi9nZGIvaTM4NmJzZC1uYXQuaAky
MDEwLTA0LTE5IDExOjQzOjA1LjAwMDAwMDAwMCAtMDQwMApAQCAtMjcsNCArMjcsMTEgQEAKIAog
ZXh0ZXJuIHN0cnVjdCB0YXJnZXRfb3BzICppMzg2YnNkX3RhcmdldCAodm9pZCk7CiAKK2V4dGVy
biB2b2lkIGkzODZic2Rfc3VwcGx5X2dyZWdzZXQgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZ3JlZ3Mp
OworCitleHRlcm4gdm9pZCBpMzg2YnNkX2NvbGxlY3RfZ3JlZ3NldCAoY29uc3Qgc3RydWN0IHJl
Z2NhY2hlICpyZWdjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICpncmVncywgaW50IHJlZ251bSk7CisKKwogI2VuZGlmIC8qIGkzODZic2QtbmF0LmggKi8K
LS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvaTM4Nm5ic2QtbmF0LmMub3JpZwkyMDA4LTAxLTI1IDA3
OjM1OjQ4LjAwMDAwMDAwMCAtMDUwMAorKysgLi9nbnUvZGlzdC9nZGI2L2dkYi9pMzg2bmJzZC1u
YXQuYwkyMDEwLTA0LTE5IDE0OjM1OjE2LjAwMDAwMDAwMCAtMDQwMApAQCAtMjAsMjIgKzIwLDI5
IEBACiAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCiAKICNpbmNsdWRlICJkZWZz
LmgiCisjaW5jbHVkZSAiaW5mZXJpb3IuaCIKICNpbmNsdWRlICJnZGJjb3JlLmgiCiAjaW5jbHVk
ZSAicmVnY2FjaGUuaCIKICNpbmNsdWRlICJ0YXJnZXQuaCIKIAogI2luY2x1ZGUgImkzODYtdGRl
cC5oIgorI2luY2x1ZGUgImkzODctdGRlcC5oIgogI2luY2x1ZGUgImkzODZic2QtbmF0LmgiCisj
aW5jbHVkZSAibmJzZC10aHJlYWQuaCIKIAogLyogU3VwcG9ydCBmb3IgZGVidWdnaW5nIGtlcm5l
bCB2aXJ0dWFsIG1lbW9yeSBpbWFnZXMuICAqLwogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cisj
aW5jbHVkZSA8c3lzL3B0cmFjZS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvcmVnLmg+CiAjaW5jbHVk
ZSA8bWFjaGluZS9mcmFtZS5oPgogI2luY2x1ZGUgPG1hY2hpbmUvcGNiLmg+CiAKICNpbmNsdWRl
ICJuYnNkLW5hdC5oIgogI2luY2x1ZGUgImJzZC1rdm0uaCIKIAorZXh0ZXJuIGludCBkZWJ1Z19u
YnNkX3RocmVhZDsKKwogc3RhdGljIGludAogaTM4Nm5ic2Rfc3VwcGx5X3BjYiAoc3RydWN0IHJl
Z2NhY2hlICpyZWdjYWNoZSwgc3RydWN0IHBjYiAqcGNiKQogewpAQCAtOTksNiArMTA2LDE1OSBA
QAogfQogDAogCisKKy8qIE1hY3JvIHRvIGRldGVybWluZSBpZiBhIHJlZ2lzdGVyIGlzIGZldGNo
ZWQgd2l0aCBQVF9HRVRSRUdTLiAgKi8KKyNkZWZpbmUgR0VUUkVHU19TVVBQTElFUyhyZWdudW0p
IFwKKyAgKCgwIDw9IChyZWdudW0pICYmIChyZWdudW0pIDw9IDE1KSkKKworI2lmZGVmIEhBVkVf
UFRfR0VUWE1NUkVHUworLyogU2V0IHRvIDEgaWYgdGhlIGtlcm5lbCBzdXBwb3J0cyBQVF9HRVRY
TU1SRUdTLiAgSW5pdGlhbGl6ZWQgdG8gLTEKKyAgIHNvIHRoYXQgd2UgdHJ5IFBUX0dFVFhNTVJF
R1MgdGhlIGZpcnN0IHRpbWUgYXJvdW5kLiAgKi8KK3N0YXRpYyBpbnQgaGF2ZV9wdHJhY2VfeG1t
cmVncyA9IC0xOworI2VuZGlmCisgDAorIAorLyogRmV0Y2ggcmVnaXN0ZXIgUkVHTlVNIGZyb20g
dGhlIGluZmVyaW9yLiAgSWYgUkVHTlVNIGlzIC0xLCBkbyB0aGlzCisgICBmb3IgYWxsIHJlZ2lz
dGVycyAoaW5jbHVkaW5nIHRoZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMpLiAgKi8KKworc3Rh
dGljIHZvaWQKK2kzODZuYnNkX2ZldGNoX2luZmVyaW9yX3JlZ2lzdGVycyAoaW50IHJlZ251bSkK
K3sKKyAgaWYgKHJlZ251bSA9PSAtMSB8fCBHRVRSRUdTX1NVUFBMSUVTIChyZWdudW0pKQorICAg
IHsKKyAgICAgIHN0cnVjdCByZWcgcmVnczsKKworICAgICAgaWYgKHB0cmFjZSAoUFRfR0VUUkVH
UywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJICAoUFRSQUNFX1RZUEVfQVJHMykgJnJlZ3Ms
IFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQorCXBlcnJvcl93aXRoX25hbWUgKF8oIkNv
dWxkbid0IGdldCByZWdpc3RlcnMiKSk7CisKKyAgICAgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkK
Kwl7CisJICBpZiAocmVnbnVtID09IC0xKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9z
dGRsb2csCisJCQkJIk5GSVI6IHB0aWQgJWQsJWxkLCByZWdudW0gJWRcbiIsCisJCQkJUElER0VU
IChpbmZlcmlvcl9wdGlkKSwgVElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJCQlyZWdudW0pOwor
CSAgZWxzZQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJIk5GSVI6
IHB0aWQgJWQsJWxkLCByZWdudW0gJWQ6ICV4XG4iLAorCQkJCVBJREdFVCAoaW5mZXJpb3JfcHRp
ZCksIFRJREdFVCAoaW5mZXJpb3JfcHRpZCksCisJCQkJcmVnbnVtLCAoKGludCAqKSAmcmVncylb
cmVnbnVtXSk7CisJfQorCisgICAgICBpMzg2YnNkX3N1cHBseV9ncmVnc2V0IChjdXJyZW50X3Jl
Z2NhY2hlLCAmcmVncyk7CisgICAgICBpZiAocmVnbnVtICE9IC0xKQorCXJldHVybjsKKyAgICB9
CisKKyAgaWYgKHJlZ251bSA9PSAtMSB8fCByZWdudW0gPj0gSTM4Nl9TVDBfUkVHTlVNKQorICAg
IHsKKyAgICAgIHN0cnVjdCBmcHJlZyBmcHJlZ3M7CisjaWZkZWYgSEFWRV9QVF9HRVRYTU1SRUdT
CisgICAgICBjaGFyIHhtbXJlZ3NbNTEyXTsKKworICAgICAgaWYgKGhhdmVfcHRyYWNlX3htbXJl
Z3MgIT0gMAorCSAgJiYgcHRyYWNlKFBUX0dFVFhNTVJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRp
ZCksCisJCSAgICAoUFRSQUNFX1RZUEVfQVJHMykgeG1tcmVncywgVElER0VUIChpbmZlcmlvcl9w
dGlkKSkgPT0gMCkKKwl7CisJICBoYXZlX3B0cmFjZV94bW1yZWdzID0gMTsKKwkgIGkzODdfc3Vw
cGx5X2Z4c2F2ZSAoY3VycmVudF9yZWdjYWNoZSwgLTEsIHhtbXJlZ3MpOworCX0KKyAgICAgIGVs
c2UKKwl7CisgICAgICAgICAgaWYgKHB0cmFjZSAoUFRfR0VURlBSRUdTLCBQSURHRVQgKGluZmVy
aW9yX3B0aWQpLAorCQkgICAgICAoUFRSQUNFX1RZUEVfQVJHMykgJmZwcmVncywgVElER0VUIChp
bmZlcmlvcl9wdGlkKSkgPT0gLTEpCisJICAgIHBlcnJvcl93aXRoX25hbWUgKF8oIkNvdWxkbid0
IGdldCBmbG9hdGluZyBwb2ludCBzdGF0dXMiKSk7CisKKwkgIGkzODdfc3VwcGx5X2ZzYXZlIChj
dXJyZW50X3JlZ2NhY2hlLCAtMSwgJmZwcmVncyk7CisJfQorI2Vsc2UKKyAgICAgIGlmIChwdHJh
Y2UgKFBUX0dFVEZQUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJICAoUFRSQUNFX1RZ
UEVfQVJHMykgJmZwcmVncywgVElER0VUIChpbmZlcmlvcl9wdGlkKSkgPT0gLTEpCisJcGVycm9y
X3dpdGhfbmFtZSAoXygiQ291bGRuJ3QgZ2V0IGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKKwor
ICAgICAgaTM4N19zdXBwbHlfZnNhdmUgKGN1cnJlbnRfcmVnY2FjaGUsIC0xLCAmZnByZWdzKTsK
KyNlbmRpZgorICAgIH0KK30KKworLyogU3RvcmUgcmVnaXN0ZXIgUkVHTlVNIGJhY2sgaW50byB0
aGUgaW5mZXJpb3IuICBJZiBSRUdOVU0gaXMgLTEsIGRvCisgICB0aGlzIGZvciBhbGwgcmVnaXN0
ZXJzIChpbmNsdWRpbmcgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycykuICAqLworCitzdGF0
aWMgdm9pZAoraTM4Nm5ic2Rfc3RvcmVfaW5mZXJpb3JfcmVnaXN0ZXJzIChpbnQgcmVnbnVtKQor
eworICBpZiAocmVnbnVtID09IC0xIHx8IEdFVFJFR1NfU1VQUExJRVMgKHJlZ251bSkpCisgICAg
eworICAgICAgc3RydWN0IHJlZyByZWdzOworCisgICAgICBpZiAocHRyYWNlIChQVF9HRVRSRUdT
LCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAorICAgICAgICAgICAgICAgICAgKFBUUkFDRV9UWVBF
X0FSRzMpICZyZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9PSAtMSkKKyAgICAgICAgcGVy
cm9yX3dpdGhfbmFtZSAoXygiQ291bGRuJ3QgZ2V0IHJlZ2lzdGVycyIpKTsKKworICAgICAgaTM4
NmJzZF9jb2xsZWN0X2dyZWdzZXQgKGN1cnJlbnRfcmVnY2FjaGUsICZyZWdzLCByZWdudW0pOwor
CisgICAgICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJeworCSAgaWYgKHJlZ251bSA9PSAtMSkK
KwkgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSJOU0lSOiBwdGlkICVk
LCVsZCwgcmVnbnVtICVkXG4iLAorCQkJCVBJREdFVCAoaW5mZXJpb3JfcHRpZCksIFRJREdFVCAo
aW5mZXJpb3JfcHRpZCksCisJCQkJcmVnbnVtKTsKKwkgIGVsc2UKKwkgICAgZnByaW50Zl91bmZp
bHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSJOU0lSOiBwdGlkICVkLCVsZCwgcmVnbnVtICVkOiAl
eFxuIiwKKwkJCQlQSURHRVQgKGluZmVyaW9yX3B0aWQpLCBUSURHRVQgKGluZmVyaW9yX3B0aWQp
LAorCQkJCXJlZ251bSwgKChpbnQgKikgJnJlZ3MpW3JlZ251bV0pOworCX0KKyAgICAgIAorICAg
ICAgaWYgKHB0cmFjZSAoUFRfU0VUUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkgICAg
ICAgICAgKFBUUkFDRV9UWVBFX0FSRzMpICZyZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9
PSAtMSkKKyAgICAgICAgcGVycm9yX3dpdGhfbmFtZSAoXygiQ291bGRuJ3Qgd3JpdGUgcmVnaXN0
ZXJzIikpOworCisgICAgICBpZiAocmVnbnVtICE9IC0xKQorCXJldHVybjsKKyAgICB9CisKKyAg
aWYgKHJlZ251bSA9PSAtMSB8fCByZWdudW0gPj0gSTM4Nl9TVDBfUkVHTlVNKQorICAgIHsKKyAg
ICAgIHN0cnVjdCBmcHJlZyBmcHJlZ3M7CisjaWZkZWYgSEFWRV9QVF9HRVRYTU1SRUdTCisgICAg
ICBjaGFyIHhtbXJlZ3NbNTEyXTsKKworICAgICAgaWYgKGhhdmVfcHRyYWNlX3htbXJlZ3MgIT0g
MAorCSAgJiYgcHRyYWNlKFBUX0dFVFhNTVJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCisJ
CSAgICAoUFRSQUNFX1RZUEVfQVJHMykgeG1tcmVncywgVElER0VUIChpbmZlcmlvcl9wdGlkKSkg
PT0gMCkKKwl7CisJICBoYXZlX3B0cmFjZV94bW1yZWdzID0gMTsKKworCSAgaTM4N19jb2xsZWN0
X2Z4c2F2ZSAoY3VycmVudF9yZWdjYWNoZSwgcmVnbnVtLCB4bW1yZWdzKTsKKworCSAgaWYgKHB0
cmFjZSAoUFRfU0VUWE1NUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJICAgICAgKFBU
UkFDRV9UWVBFX0FSRzMpIHhtbXJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQor
ICAgICAgICAgICAgcGVycm9yX3dpdGhfbmFtZSAoXygiQ291bGRuJ3Qgd3JpdGUgWE1NIHJlZ2lz
dGVycyIpKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgaGF2ZV9wdHJhY2VfeG1tcmVncyA9IDA7
CisjZW5kaWYKKyAgICAgICAgICBpZiAocHRyYWNlIChQVF9HRVRGUFJFR1MsIFBJREdFVCAoaW5m
ZXJpb3JfcHRpZCksCisJCSAgICAgIChQVFJBQ0VfVFlQRV9BUkczKSAmZnByZWdzLCBUSURHRVQg
KGluZmVyaW9yX3B0aWQpKSA9PSAtMSkKKwkgICAgcGVycm9yX3dpdGhfbmFtZSAoXygiQ291bGRu
J3QgZ2V0IGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKKworICAgICAgICAgIGkzODdfY29sbGVj
dF9mc2F2ZSAoY3VycmVudF9yZWdjYWNoZSwgcmVnbnVtLCAmZnByZWdzKTsKKworICAgICAgICAg
IGlmIChwdHJhY2UgKFBUX1NFVEZQUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJICAg
ICAgKFBUUkFDRV9UWVBFX0FSRzMpICZmcHJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09
IC0xKQorCSAgICBwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCB3cml0ZSBmbG9hdGluZyBw
b2ludCBzdGF0dXMiKSk7CisjaWZkZWYgSEFWRV9QVF9HRVRYTU1SRUdTCisgICAgICAgIH0KKyNl
bmRpZgorICAgIH0KK30KKworDAorCiAvKiBQcm92aWRlIGEgcHJvdG90eXBlIHRvIHNpbGVuY2Ug
LVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLwogdm9pZCBfaW5pdGlhbGl6ZV9pMzg2bmJzZF9uYXQg
KHZvaWQpOwogCkBAIC0xMDksNyArMjY5LDEwIEBACiAKICAgLyogQWRkIHNvbWUgZXh0cmEgZmVh
dHVyZXMgdG8gdGhlIGNvbW1vbiAqQlNEL2kzODYgdGFyZ2V0LiAgKi8KICAgdCA9IGkzODZic2Rf
dGFyZ2V0ICgpOworICBpbml0X25ic2RfdGhyZWFkX29wcyAodCk7CiAgIHQtPnRvX3BpZF90b19l
eGVjX2ZpbGUgPSBuYnNkX3BpZF90b19leGVjX2ZpbGU7CisgIHQtPnRvX2ZldGNoX3JlZ2lzdGVy
cyA9IGkzODZuYnNkX2ZldGNoX2luZmVyaW9yX3JlZ2lzdGVyczsKKyAgdC0+dG9fc3RvcmVfcmVn
aXN0ZXJzID0gaTM4Nm5ic2Rfc3RvcmVfaW5mZXJpb3JfcmVnaXN0ZXJzOyAgCiAgIGFkZF90YXJn
ZXQgKHQpOwogCiAgIC8qIFN1cHBvcnQgZGVidWdnaW5nIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBp
bWFnZXMuICAqLwotLS0gLi9nbnUvdXNyLmJpbi9nZGI2L2FyY2gvaTM4Ni9kZWZzLm1rLm9yaWcJ
MjAwNi0xMS0yNSAxMTozODo1MS4wMDAwMDAwMDAgLTA1MDAKKysrIC4vZ251L3Vzci5iaW4vZ2Ri
Ni9hcmNoL2kzODYvZGVmcy5tawkyMDEwLTA0LTE5IDEzOjQ1OjExLjAwMDAwMDAwMCAtMDQwMApA
QCAtMyw1ICszLDUgQEAKICMgR2VuZXJhdGVkIGZyb206IE5ldEJTRDogbWtuYXRpdmUuY29tbW9u
LHYgMS44IDIwMDYvMDUvMjYgMTk6MTc6MjEgbXJnIEV4cCAKICMKIEdfSU5URVJOQUxfQ0ZMQUdT
PSAgICAgLUkuIC1JJHtHTlVIT1NURElTVH0vZ2RiIC1JJHtHTlVIT1NURElTVH0vZ2RiL2NvbmZp
ZyAtRExPQ0FMRURJUj0iXCIvdXNyL3NoYXJlL2xvY2FsZVwiIiAtREhBVkVfQ09ORklHX0ggLUkk
e0dOVUhPU1RESVNUfS9nZGIvLi4vaW5jbHVkZS9vcGNvZGUgLUkke0dOVUhPU1RESVNUfS9nZGIv
Li4vcmVhZGxpbmUvLi4gIC1JLi4vYmZkIC1JJHtHTlVIT1NURElTVH0vZ2RiLy4uL2JmZCAtSSR7
R05VSE9TVERJU1R9L2dkYi8uLi9pbmNsdWRlICAtSS4uL2ludGwgLUkke0dOVUhPU1RESVNUfS9n
ZGIvLi4vaW50bCAgLURNSV9PVVQ9MSAtRFRVST0xIC1XaW1wbGljaXQgLVdyZXR1cm4tdHlwZSAt
V2NvbW1lbnQgLVd0cmlncmFwaHMgLVdmb3JtYXQgLVdwYXJlbnRoZXNlcyAtV3BvaW50ZXItYXJp
dGggLVdmb3JtYXQtbm9ubGl0ZXJhbCAtV3VudXNlZC1sYWJlbCAtV3VudXNlZC1mdW5jdGlvbiAt
V25vLXBvaW50ZXItc2lnbiAKLUdfTElCR0RCX09CUz1pMzg2LXRkZXAubyBpMzg3LXRkZXAubyBp
Mzg2YnNkLXRkZXAubyBpMzg2bmJzZC10ZGVwLm8gbmJzZC10ZGVwLm8gIGNvcmVsb3cubyBzb2xp
Yi5vIHNvbGliLXN2cjQubyBzZXItYmFzZS5vIHNlci11bml4Lm8gc2VyLXBpcGUubyBzZXItdGNw
Lm8gZm9yay1jaGlsZC5vIGluZi1wdHJhY2UubyAgbmJzZC1uYXQubyBpMzg2YnNkLW5hdC5vIGkz
ODZuYnNkLW5hdC5vIGJzZC1rdm0ubyAgcmVtb3RlLm8gZGNhY2hlLm8gcmVtb3RlLXV0aWxzLm8g
dHJhY2Vwb2ludC5vIGF4LWdlbmVyYWwubyBheC1nZGIubyByZW1vdGUtZmlsZWlvLm8gIGNsaS1k
dW1wLm8gIGNsaS1kZWNvZGUubyBjbGktc2NyaXB0Lm8gY2xpLWNtZHMubyBjbGktc2V0c2hvdy5v
IGNsaS11dGlscy5vICBjbGktbG9nZ2luZy5vICBjbGktaW50ZXJwLm8gbWktb3V0Lm8gbWktY29u
c29sZS5vICBtaS1jbWRzLm8gbWktY21kLWVudi5vIG1pLWNtZC12YXIubyBtaS1jbWQtYnJlYWsu
byBtaS1jbWQtc3RhY2subyAgbWktY21kLWZpbGUubyBtaS1jbWQtZGlzYXMubyBtaS1zeW1ib2wt
Y21kcy5vICBtaS1pbnRlcnAubyAgbWktbWFpbi5vIG1pLXBhcnNlLm8gbWktZ2V0b3B0Lm8gbWkt
Y29tbW9uLm8gcG9zaXgtaGRlcC5vIHR1aS1jb21tYW5kLm8gIHR1aS1kYXRhLm8gIHR1aS1kaXNh
c20ubyAgdHVpLWZpbGUubyB0dWkubyAgdHVpLWhvb2tzLm8gIHR1aS1pbnRlcnAubyAgdHVpLWlv
Lm8gIHR1aS1sYXlvdXQubyAgdHVpLW91dC5vICB0dWktcmVncy5vICB0dWktc291cmNlLm8gIHR1
aS1zdGFjay5vICB0dWktd2luLm8gIHR1aS13aW5kYXRhLm8gIHR1aS13aW5nZW5lcmFsLm8gIHR1
aS13aW5zb3VyY2UubyBjLWV4cC5vICBjcC1uYW1lLXBhcnNlci5vICBvYmpjLWV4cC5vICBhZGEt
ZXhwLm8gIGp2LWV4cC5vICBmLWV4cC5vIG0yLWV4cC5vIHAtZXhwLm8gIHZlcnNpb24ubyAgYW5u
b3RhdGUubyAgYXV4di5vICBiZmQtdGFyZ2V0Lm8gIGJsb2NrZnJhbWUubyBicmVha3BvaW50Lm8g
ZmluZHZhci5vIHJlZ2NhY2hlLm8gIGNoYXJzZXQubyBkaXNhc20ubyBkdW1teS1mcmFtZS5vICBz
b3VyY2UubyB2YWx1ZS5vIGV2YWwubyB2YWxvcHMubyB2YWxhcml0aC5vIHZhbHByaW50Lm8gcHJp
bnRjbWQubyAgYmxvY2subyBzeW10YWIubyBzeW1maWxlLm8gc3ltbWlzYy5vIGxpbmVzcGVjLm8g
ZGljdGlvbmFyeS5vICBpbmZjYWxsLm8gIGluZmNtZC5vIGluZnJ1bi5vICBleHBwcmludC5vIGVu
dmlyb24ubyBzdGFjay5vIHRocmVhZC5vICBleGNlcHRpb25zLm8gIGluZi1jaGlsZC5vICBpbnRl
cnBzLm8gIG1haW4ubyAgbWFjcm90YWIubyBtYWNyb2NtZC5vIG1hY3JvZXhwLm8gbWFjcm9zY29w
ZS5vICBldmVudC1sb29wLm8gZXZlbnQtdG9wLm8gaW5mLWxvb3AubyBjb21wbGV0ZXIubyAgZ2Ri
YXJjaC5vIGFyY2gtdXRpbHMubyBnZGJ0eXBlcy5vIG9zYWJpLm8gY29weWluZy5vICBtZW1hdHRy
Lm8gbWVtLWJyZWFrLm8gdGFyZ2V0Lm8gcGFyc2UubyBsYW5ndWFnZS5vIGJ1aWxkc3ltLm8gIHN0
ZC1yZWdzLm8gIHNpZ25hbHMubyAga29kLm8ga29kLWNpc2NvLm8gIGdkYi1ldmVudHMubyAgZXhl
Yy5vIGJjYWNoZS5vIG9iamZpbGVzLm8gb2JzZXJ2ZXIubyBtaW5zeW1zLm8gbWFpbnQubyBkZW1h
bmdsZS5vICBkYnhyZWFkLm8gY29mZnJlYWQubyBjb2ZmLXBlLXJlYWQubyBlbGZyZWFkLm8gIGR3
YXJmcmVhZC5vIGR3YXJmMnJlYWQubyBtaXBzcmVhZC5vIHN0YWJzcmVhZC5vIGNvcmVmaWxlLm8g
IGR3YXJmMmV4cHIubyBkd2FyZjJsb2MubyBkd2FyZjItZnJhbWUubyAgYWRhLWxhbmcubyBjLWxh
bmcubyBmLWxhbmcubyBvYmpjLWxhbmcubyAgdWktb3V0Lm8gY2xpLW91dC5vICB2YXJvYmoubyB3
cmFwcGVyLm8gIGp2LWxhbmcubyBqdi12YWxwcmludC5vIGp2LXR5cGVwcmludC5vICBtMi1sYW5n
Lm8gcC1sYW5nLm8gcC10eXBlcHJpbnQubyBwLXZhbHByaW50Lm8gIHNjbS1leHAubyBzY20tbGFu
Zy5vIHNjbS12YWxwcmludC5vICBzZW50aW5lbC1mcmFtZS5vICBjb21wbGFpbnRzLm8gdHlwZXBy
aW50Lm8gIGFkYS10eXBlcHJpbnQubyBjLXR5cGVwcmludC5vIGYtdHlwZXByaW50Lm8gbTItdHlw
ZXByaW50Lm8gIGFkYS12YWxwcmludC5vIGMtdmFscHJpbnQubyBjcC12YWxwcmludC5vIGYtdmFs
cHJpbnQubyBtMi12YWxwcmludC5vICBubG1yZWFkLm8gc2VyaWFsLm8gbWRlYnVncmVhZC5vIHRv
cC5vIHV0aWxzLm8gIHVpLWZpbGUubyAgdXNlci1yZWdzLm8gIGZyYW1lLm8gZnJhbWUtdW53aW5k
Lm8gZG91Ymxlc3QubyAgZnJhbWUtYmFzZS5vICBnbnUtdjItYWJpLm8gZ251LXYzLWFiaS5vIGhw
YWNjLWFiaS5vIGNwLWFiaS5vIGNwLXN1cHBvcnQubyAgY3AtbmFtZXNwYWNlLm8gIHJlZ2dyb3Vw
cy5vIHJlZ3NldC5vICB0cmFkLWZyYW1lLm8gIHRyYW1wLWZyYW1lLm8gIHNvbGliLm8gc29saWIt
bnVsbC5vICBwcm9sb2d1ZS12YWx1ZS5vIGluZmxvdy5vICAgIGluaXQubworR19MSUJHREJfT0JT
PWkzODYtdGRlcC5vIGkzODctdGRlcC5vIGkzODZic2QtdGRlcC5vIGkzODZuYnNkLXRkZXAubyBu
YnNkLXRkZXAubyAgY29yZWxvdy5vIHNvbGliLm8gc29saWItc3ZyNC5vIHNlci1iYXNlLm8gc2Vy
LXVuaXgubyBzZXItcGlwZS5vIHNlci10Y3AubyBmb3JrLWNoaWxkLm8gaW5mLXB0cmFjZS5vICBu
YnNkLW5hdC5vIG5ic2QtdGhyZWFkLm8gaTM4NmJzZC1uYXQubyBpMzg2bmJzZC1uYXQubyBic2Qt
a3ZtLm8gIHJlbW90ZS5vIGRjYWNoZS5vIHJlbW90ZS11dGlscy5vIHRyYWNlcG9pbnQubyBheC1n
ZW5lcmFsLm8gYXgtZ2RiLm8gcmVtb3RlLWZpbGVpby5vICBjbGktZHVtcC5vICBjbGktZGVjb2Rl
Lm8gY2xpLXNjcmlwdC5vIGNsaS1jbWRzLm8gY2xpLXNldHNob3cubyBjbGktdXRpbHMubyAgY2xp
LWxvZ2dpbmcubyAgY2xpLWludGVycC5vIG1pLW91dC5vIG1pLWNvbnNvbGUubyAgbWktY21kcy5v
IG1pLWNtZC1lbnYubyBtaS1jbWQtdmFyLm8gbWktY21kLWJyZWFrLm8gbWktY21kLXN0YWNrLm8g
IG1pLWNtZC1maWxlLm8gbWktY21kLWRpc2FzLm8gbWktc3ltYm9sLWNtZHMubyAgbWktaW50ZXJw
Lm8gIG1pLW1haW4ubyBtaS1wYXJzZS5vIG1pLWdldG9wdC5vIG1pLWNvbW1vbi5vIHBvc2l4LWhk
ZXAubyB0dWktY29tbWFuZC5vICB0dWktZGF0YS5vICB0dWktZGlzYXNtLm8gIHR1aS1maWxlLm8g
dHVpLm8gIHR1aS1ob29rcy5vICB0dWktaW50ZXJwLm8gIHR1aS1pby5vICB0dWktbGF5b3V0Lm8g
IHR1aS1vdXQubyAgdHVpLXJlZ3MubyAgdHVpLXNvdXJjZS5vICB0dWktc3RhY2subyAgdHVpLXdp
bi5vICB0dWktd2luZGF0YS5vICB0dWktd2luZ2VuZXJhbC5vICB0dWktd2luc291cmNlLm8gYy1l
eHAubyAgY3AtbmFtZS1wYXJzZXIubyAgb2JqYy1leHAubyAgYWRhLWV4cC5vICBqdi1leHAubyAg
Zi1leHAubyBtMi1leHAubyBwLWV4cC5vICB2ZXJzaW9uLm8gIGFubm90YXRlLm8gIGF1eHYubyAg
YmZkLXRhcmdldC5vICBibG9ja2ZyYW1lLm8gYnJlYWtwb2ludC5vIGZpbmR2YXIubyByZWdjYWNo
ZS5vICBjaGFyc2V0Lm8gZGlzYXNtLm8gZHVtbXktZnJhbWUubyAgc291cmNlLm8gdmFsdWUubyBl
dmFsLm8gdmFsb3BzLm8gdmFsYXJpdGgubyB2YWxwcmludC5vIHByaW50Y21kLm8gIGJsb2NrLm8g
c3ltdGFiLm8gc3ltZmlsZS5vIHN5bW1pc2MubyBsaW5lc3BlYy5vIGRpY3Rpb25hcnkubyAgaW5m
Y2FsbC5vICBpbmZjbWQubyBpbmZydW4ubyAgZXhwcHJpbnQubyBlbnZpcm9uLm8gc3RhY2subyB0
aHJlYWQubyAgZXhjZXB0aW9ucy5vICBpbmYtY2hpbGQubyAgaW50ZXJwcy5vICBtYWluLm8gIG1h
Y3JvdGFiLm8gbWFjcm9jbWQubyBtYWNyb2V4cC5vIG1hY3Jvc2NvcGUubyAgZXZlbnQtbG9vcC5v
IGV2ZW50LXRvcC5vIGluZi1sb29wLm8gY29tcGxldGVyLm8gIGdkYmFyY2gubyBhcmNoLXV0aWxz
Lm8gZ2RidHlwZXMubyBvc2FiaS5vIGNvcHlpbmcubyAgbWVtYXR0ci5vIG1lbS1icmVhay5vIHRh
cmdldC5vIHBhcnNlLm8gbGFuZ3VhZ2UubyBidWlsZHN5bS5vICBzdGQtcmVncy5vICBzaWduYWxz
Lm8gIGtvZC5vIGtvZC1jaXNjby5vICBnZGItZXZlbnRzLm8gIGV4ZWMubyBiY2FjaGUubyBvYmpm
aWxlcy5vIG9ic2VydmVyLm8gbWluc3ltcy5vIG1haW50Lm8gZGVtYW5nbGUubyAgZGJ4cmVhZC5v
IGNvZmZyZWFkLm8gY29mZi1wZS1yZWFkLm8gZWxmcmVhZC5vICBkd2FyZnJlYWQubyBkd2FyZjJy
ZWFkLm8gbWlwc3JlYWQubyBzdGFic3JlYWQubyBjb3JlZmlsZS5vICBkd2FyZjJleHByLm8gZHdh
cmYybG9jLm8gZHdhcmYyLWZyYW1lLm8gIGFkYS1sYW5nLm8gYy1sYW5nLm8gZi1sYW5nLm8gb2Jq
Yy1sYW5nLm8gIHVpLW91dC5vIGNsaS1vdXQubyAgdmFyb2JqLm8gd3JhcHBlci5vICBqdi1sYW5n
Lm8ganYtdmFscHJpbnQubyBqdi10eXBlcHJpbnQubyAgbTItbGFuZy5vIHAtbGFuZy5vIHAtdHlw
ZXByaW50Lm8gcC12YWxwcmludC5vICBzY20tZXhwLm8gc2NtLWxhbmcubyBzY20tdmFscHJpbnQu
byAgc2VudGluZWwtZnJhbWUubyAgY29tcGxhaW50cy5vIHR5cGVwcmludC5vICBhZGEtdHlwZXBy
aW50Lm8gYy10eXBlcHJpbnQubyBmLXR5cGVwcmludC5vIG0yLXR5cGVwcmludC5vICBhZGEtdmFs
cHJpbnQubyBjLXZhbHByaW50Lm8gY3AtdmFscHJpbnQubyBmLXZhbHByaW50Lm8gbTItdmFscHJp
bnQubyAgbmxtcmVhZC5vIHNlcmlhbC5vIG1kZWJ1Z3JlYWQubyB0b3AubyB1dGlscy5vICB1aS1m
aWxlLm8gIHVzZXItcmVncy5vICBmcmFtZS5vIGZyYW1lLXVud2luZC5vIGRvdWJsZXN0Lm8gIGZy
YW1lLWJhc2UubyAgZ251LXYyLWFiaS5vIGdudS12My1hYmkubyBocGFjYy1hYmkubyBjcC1hYmku
byBjcC1zdXBwb3J0Lm8gIGNwLW5hbWVzcGFjZS5vICByZWdncm91cHMubyByZWdzZXQubyAgdHJh
ZC1mcmFtZS5vICB0cmFtcC1mcmFtZS5vICBzb2xpYi5vIHNvbGliLW51bGwubyAgcHJvbG9ndWUt
dmFsdWUubyBpbmZsb3cubyAgICBpbml0Lm8KIEdfU0lNX09CUz0K
------_=_NextPart_001_01CADFF2.CC0C5CAC--
From: christos@zoulas.com (Christos Zoulas)
To: gnats-bugs@NetBSD.org, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org,
Thomas Klausner <wiz@NetBSD.org>
Cc:
Subject: RE: bin/30756: gdb not usable for live debugging of threaded programs
Date: Mon, 19 Apr 2010 15:24:09 -0400
On Apr 19, 7:05pm, Paul_Koning@Dell.com ("Paul Koning") wrote:
-- Subject: RE: bin/30756: gdb not usable for live debugging of threaded prog
| The fix for kern/43128 adds the missing kernel bits for GDB to support
| threaded program debugging. The other part needed is changes to GDB
| itself.
|
| Attached is a patch that does this, tested on i386 against the GDB 6.5
| sources that are in NetBSD 5.0. I intend to submit this to the GDB
| project as well but was asked to provide a patch against the GDB rev
| that is currently in NetBSD.
|
| There is a patched mipsnbsd-nat.c as well as common and i386 specific
| files, but I did not make the build file changes for that so that file
| is untested. I also did not look at any other platforms. The changes
| should be straightforward using the mips and i386 examples as the
| starting point, but since I have no way to test them I did not want to
| attempt changes for any other targets.
|
| Comments appreciated.
Looks good to me.
christos
From: "Paul Koning" <Paul_Koning@Dell.com>
To: <gnats-bugs@NetBSD.org>
Cc: <tech-kern@NetBSD.org>,
"Antti Kantee" <pooka@cs.hut.fi>
Subject: RE: bin/30756: gdb not usable for live debugging of threaded programs
Date: Thu, 22 Apr 2010 11:18:14 -0400
This is a multi-part message in MIME format.
------_=_NextPart_001_01CAE22F.094CA314
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
Antti pointed out a problem in the patch I originally submitted which
causes gdb to go into a loop if the child process exits. The attached
updated patch corrects that problem.
paul
------_=_NextPart_001_01CAE22F.094CA314
Content-Type: application/octet-stream;
name="gdbthreads-650a.diff"
Content-Transfer-Encoding: base64
Content-Description: gdbthreads-650a.diff
Content-Disposition: attachment;
filename="gdbthreads-650a.diff"
LS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvY29uZmlnL2kzODYvbmJzZGVsZi5taC5vcmlnCTIwMDYt
MTEtMjUgMTE6Mzg6NTEuMDAwMDAwMDAwIC0wNTAwCisrKyAuL2dudS9kaXN0L2dkYjYvZ2RiL2Nv
bmZpZy9pMzg2L25ic2RlbGYubWgJMjAxMC0wNC0xOSAxMjowNzoyMC4wMDAwMDAwMDAgLTA0MDAK
QEAgLTEsNiArMSw2IEBACiAjIEhvc3Q6IE5ldEJTRC9pMzg2IEVMRgogTkFUREVQRklMRVM9IGZv
cmstY2hpbGQubyBpbmYtcHRyYWNlLm8gXAotCW5ic2QtbmF0Lm8gaTM4NmJzZC1uYXQubyBpMzg2
bmJzZC1uYXQubyBic2Qta3ZtLm8KKwluYnNkLW5hdC5vIGkzODZic2QtbmF0Lm8gaTM4Nm5ic2Qt
bmF0Lm8gYnNkLWt2bS5vIG5ic2QtdGhyZWFkLm8KIE5BVF9GSUxFPSBzb2xpYi5oCiAKIExPQURM
SUJFUz0gLWxrdm0KLS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvY29uZmlnL21pcHMvbmJzZC5taC5v
cmlnCTIwMDYtMTItMDYgMTM6MjU6MjkuMDAwMDAwMDAwIC0wNTAwCisrKyAuL2dudS9kaXN0L2dk
YjYvZ2RiL2NvbmZpZy9taXBzL25ic2QubWgJMjAxMC0wNC0xOSAxMzo1NTozOC4wMDAwMDAwMDAg
LTA0MDAKQEAgLTEsMiArMSwyIEBACiAjIEhvc3Q6IE5ldEJTRC9taXBzCi1OQVRERVBGSUxFUz0g
Zm9yay1jaGlsZC5vIGluZi1wdHJhY2UubyBuYnNkLW5hdC5vIG1pcHNuYnNkLW5hdC5vCitOQVRE
RVBGSUxFUz0gZm9yay1jaGlsZC5vIGluZi1wdHJhY2UubyBuYnNkLW5hdC5vIG1pcHNuYnNkLW5h
dC5vIG5ic2QtdGhyZWFkLm8KLS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvbWlwc25ic2QtbmF0LmMu
b3JpZwkyMDA2LTEyLTA2IDEzOjI1OjI5LjAwMDAwMDAwMCAtMDUwMAorKysgLi9nbnUvZGlzdC9n
ZGI2L2dkYi9taXBzbmJzZC1uYXQuYwkyMDEwLTA0LTE5IDEzOjU4OjI1LjAwMDAwMDAwMCAtMDQw
MApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImluZmVyaW9yLmgiCiAjaW5jbHVkZSAicmVn
Y2FjaGUuaCIKICNpbmNsdWRlICJ0YXJnZXQuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKIAogI2lu
Y2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KQEAgLTMyLDYgKzMz
LDcgQEAKICNpbmNsdWRlICJtaXBzLXRkZXAuaCIKICNpbmNsdWRlICJtaXBzbmJzZC10ZGVwLmgi
CiAjaW5jbHVkZSAiaW5mLXB0cmFjZS5oIgorI2luY2x1ZGUgIm5ic2QtdGhyZWFkLmgiCiAKIC8q
IERldGVybWluZSBpZiBQVF9HRVRSRUdTIGZldGNoZXMgdGhpcyByZWdpc3Rlci4gICovCiBzdGF0
aWMgaW50CkBAIC00OCw3ICs1MCw3IEBACiAgICAgICBzdHJ1Y3QgcmVnIHJlZ3M7CiAKICAgICAg
IGlmIChwdHJhY2UgKFBUX0dFVFJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCi0JCSAgKFBU
UkFDRV9UWVBFX0FSRzMpICZyZWdzLCAwKSA9PSAtMSkKKwkJICAoUFRSQUNFX1RZUEVfQVJHMykg
JnJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQogCXBlcnJvcl93aXRoX25hbWUg
KF8oIkNvdWxkbid0IGdldCByZWdpc3RlcnMiKSk7CiAgICAgICAKICAgICAgIG1pcHNuYnNkX3N1
cHBseV9yZWcgKChjaGFyICopICZyZWdzLCByZWdubyk7CkBAIC02MSw3ICs2Myw3IEBACiAgICAg
ICBzdHJ1Y3QgZnByZWcgZnByZWdzOwogCiAgICAgICBpZiAocHRyYWNlIChQVF9HRVRGUFJFR1Ms
IFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCi0JCSAgKFBUUkFDRV9UWVBFX0FSRzMpICZmcHJlZ3Ms
IDApID09IC0xKQorCQkgIChQVFJBQ0VfVFlQRV9BUkczKSAmZnByZWdzLCBUSURHRVQgKGluZmVy
aW9yX3B0aWQpKSA9PSAtMSkKIAlwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCBnZXQgZmxv
YXRpbmcgcG9pbnQgc3RhdHVzIikpOwogCiAgICAgICBtaXBzbmJzZF9zdXBwbHlfZnByZWcgKChj
aGFyICopICZmcHJlZ3MsIHJlZ25vKTsKQEAgLTc2LDEzICs3OCwxMyBAQAogICAgICAgc3RydWN0
IHJlZyByZWdzOwogCiAgICAgICBpZiAocHRyYWNlIChQVF9HRVRSRUdTLCBQSURHRVQgKGluZmVy
aW9yX3B0aWQpLAotCQkgIChQVFJBQ0VfVFlQRV9BUkczKSAmcmVncywgMCkgPT0gLTEpCisJCSAg
KFBUUkFDRV9UWVBFX0FSRzMpICZyZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9PSAtMSkK
IAlwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCBnZXQgcmVnaXN0ZXJzIikpOwogCiAgICAg
ICBtaXBzbmJzZF9maWxsX3JlZyAoKGNoYXIgKikgJnJlZ3MsIHJlZ25vKTsKIAogICAgICAgaWYg
KHB0cmFjZSAoUFRfU0VUUkVHUywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwgCi0JCSAgKFBUUkFD
RV9UWVBFX0FSRzMpICZyZWdzLCAwKSA9PSAtMSkKKwkJICAoUFRSQUNFX1RZUEVfQVJHMykgJnJl
Z3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQogCXBlcnJvcl93aXRoX25hbWUgKF8o
IkNvdWxkbid0IHdyaXRlIHJlZ2lzdGVycyIpKTsKIAogICAgICAgaWYgKHJlZ25vICE9IC0xKQpA
QCAtOTQsMTMgKzk2LDEzIEBACiAgICAgICBzdHJ1Y3QgZnByZWcgZnByZWdzOyAKIAogICAgICAg
aWYgKHB0cmFjZSAoUFRfR0VURlBSRUdTLCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAotCQkgIChQ
VFJBQ0VfVFlQRV9BUkczKSAmZnByZWdzLCAwKSA9PSAtMSkKKwkJICAoUFRSQUNFX1RZUEVfQVJH
MykgJmZwcmVncywgVElER0VUIChpbmZlcmlvcl9wdGlkKSkgPT0gLTEpCiAJcGVycm9yX3dpdGhf
bmFtZSAoXygiQ291bGRuJ3QgZ2V0IGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKIAogICAgICAg
bWlwc25ic2RfZmlsbF9mcHJlZyAoKGNoYXIgKikgJmZwcmVncywgcmVnbm8pOwogCiAgICAgICBp
ZiAocHRyYWNlIChQVF9TRVRGUFJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCi0JCSAgKFBU
UkFDRV9UWVBFX0FSRzMpICZmcHJlZ3MsIDApID09IC0xKQorCQkgIChQVFJBQ0VfVFlQRV9BUkcz
KSAmZnByZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9PSAtMSkKIAlwZXJyb3Jfd2l0aF9u
YW1lIChfKCJDb3VsZG4ndCB3cml0ZSBmbG9hdGluZyBwb2ludCBzdGF0dXMiKSk7CiAgICAgfQog
fQpAQCAtMTE1LDYgKzExNyw3IEBACiAgIHN0cnVjdCB0YXJnZXRfb3BzICp0OwogCiAgIHQgPSBp
bmZfcHRyYWNlX3RhcmdldCAoKTsKKyAgaW5pdF9uYnNkX3RocmVhZF9vcHMgKHQpOwogICB0LT50
b19mZXRjaF9yZWdpc3RlcnMgPSBtaXBzbmJzZF9mZXRjaF9pbmZlcmlvcl9yZWdpc3RlcnM7CiAg
IHQtPnRvX3N0b3JlX3JlZ2lzdGVycyA9IG1pcHNuYnNkX3N0b3JlX2luZmVyaW9yX3JlZ2lzdGVy
czsKICAgdC0+dG9fcGlkX3RvX2V4ZWNfZmlsZSA9IG5ic2RfcGlkX3RvX2V4ZWNfZmlsZTsKLS0t
IC4vZ251L2Rpc3QvZ2RiNi9nZGIvbmJzZC10aHJlYWQuYy5vcmlnCTIwMTAtMDQtMTkgMTE6NDM6
MDUuMDAwMDAwMDAwIC0wNDAwCisrKyAuL2dudS9kaXN0L2dkYjYvZ2RiL25ic2QtdGhyZWFkLmMJ
MjAxMC0wNC0yMiAxMDo1Nzo1My4wMDAwMDAwMDAgLTA0MDAKQEAgLTAsMCArMSw3MTQgQEAKKy8q
IFRocmVhZHMgc3VwcG9ydCBmb3IgTmV0QlNEIDUuMC4KKworICAgQ29weXJpZ2h0IChDKSAyMDEw
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBDb250cmlidXRlZCBieSBQYXVs
IEtvbmluZywgRGVsbCwgaW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAg
IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK
KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2luY2x1
ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJjb21tYW5kLmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisj
aW5jbHVkZSAidGFyZ2V0LmgiCisjaW5jbHVkZSAiaW5mZXJpb3IuaCIKKyNpbmNsdWRlICJnZGJ0
aHJlYWQuaCIKKyNpbmNsdWRlICJyZWdjYWNoZS5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIm5ic2QtdGhyZWFkLmgiCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxz
eXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQu
aD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogRGF0YSBz
dHJ1Y3R1cmUgdXNlZCB0byB0cmFjayBOZXRCU0QgdGhyZWFkIHN0YXRlLiAgVGhlcmUgaXMgYSAK
KyAgIHZlY3RvciBvZiB0aGVzZSwgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIExXUCBJRC4gICovCisK
K3N0cnVjdCBsd3BfaW5mbworeworICAvKiBUaGUgcHJvY2VzcyBJRCBvZiB0aGUgTFdQLiAgVGhp
cyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBwcm9jZXNzCisgICAgIElEIGFuZCB0aGUgTFdQIElE
LiAgKi8KKyAgcHRpZF90IHB0aWQ7CisgIAorICAvKiBOb24temVybyBpZiB3ZSB0aGlzIExXUCB3
YXMgcmVwb3J0ZWQgYXMgaGF2aW5nIGJlZW4gc2lnbmFsbGVkCisgICAgIGJ5IHRoZSBQVF9MV1BJ
TkZPIHB0cmFjZSgpIGNhbGwuICAqLworICBpbnQgc2lnbmFsbGVkOworICAKKyAgLyogVGhlIHdh
aXRzdGF0dXMgZm9yIHRoaXMgTFdQJ3MgbGFzdCBldmVudC4gICovCisgIHN0cnVjdCB0YXJnZXRf
d2FpdHN0YXR1cyB3YWl0c3RhdHVzOworfTsKKworLyogVGhlIGx3cF9pbmZvIGJ1ZmZlciBhbmQg
aXRzIGNvbnRyb2wgdmFyaWFibGVzLiAgKi8KK3N0YXRpYyBzdHJ1Y3QgbHdwX2luZm8gKmx3cF9i
dWZmZXI7CitzdGF0aWMgaW50IGx3cF9jb3VudDsKK3N0YXRpYyBpbnQgbHdwX2J1ZnNpemU7CisK
Ky8qIENvdW50IG9mIHNpZ25hbHMgc3RpbGwgcGVuZGluZyBkZWxpdmVyeSB0byBHREIuICBUaGVz
ZSBhcmUgdGhyZWFkcworICAgdGhhdCB3ZXJlIGZvdW5kIHRvIGJlIHN0b3BwZWQgYW5kIG5vdCBi
cmVha3BvaW50cy4gIEZvciB0aHJlYWRzIHRoYXQKKyAgIGhpdCBhIGJyZWFrcG9pbnQsIHdlIHNp
bXBseSBwdXNoIGJhY2sgdGhlIHRocmVhZCBzbyBpdCB3aWxsIGhpdCB0aGUKKyAgIGJyZWFrIGFn
YWluIChpZiBpdCBpc24ndCByZW1vdmVkIGJlZm9yZSB0aGVuKSBidXQgZm9yIG90aGVyIHNpZ25h
bHMsCisgICBmb3IgZXhhbXBsZSBmYXVsdHMsIHRoZSBzaWduYWwgcmVtYWlucyBwZW5kaW5nLCB0
aGUgInRvX3Jlc3VtZSIgdGhhdAorICAgcmVzdW1lcyB0aGUgd2hvbGUgcHJvY2VzcyBpcyBza2lw
cGVkLCBhbmQgdGhlbiB0aGUgInRvX3dhaXQiIHJldHVybnMKKyAgIHRoZSBpbmZvcm1hdGlvbiBh
Ym91dCBvbmUgb2YgdGhlIHBlbmRpbmcgc2lnbmFscyBpbnN0ZWFkLiAgKi8KK3N0YXRpYyBpbnQg
cGVuZGluZ19zaWdzOworCisvKiBUaGUgTFdQIElEIG9mIHRoZSB0aHJlYWQgYmVpbmcgc3RlcHBl
ZCwgb3IgMCBpZiBub25lLiAgKi8KK3N0YXRpYyBpbnQgc3RlcF9sd3BpZDsKKworLyogRmxhZyB0
byBpbmRpY2F0ZSB3aGV0aGVyIGxhc3QgcmVzdW1lIHdhcyBhIHJlc3VtZSBhbGwgdGhyZWFkcyBv
cgorICAgYSByZXN1bWUgc2luZ2xlIHRocmVhZC4gICovCitzdGF0aWMgaW50IHJlc3VtZV9hbGw7
CisKKy8qIE5vbi16ZXJvIGlmIHRoZSBuZXRic2QtdGhyZWFkIGxheWVyIGlzIGFjdGl2ZS4gICov
CitzdGF0aWMgaW50IG5ic2RfdGhyZWFkX2FjdGl2ZSA9IDA7CisKKy8qIFRoZSBuZXRic2QtdGhy
ZWFkIHRhcmdldF9vcHMgc3RydWN0dXJlLiAgKi8KK3N0YXRpYyBzdHJ1Y3QgdGFyZ2V0X29wcyBu
YnNkX3RocmVhZF9vcHM7CisKK2ludCBkZWJ1Z19uYnNkX3RocmVhZDsKK3N0YXRpYyB2b2lkCitz
aG93X2RlYnVnX25ic2RfdGhyZWFkIChzdHJ1Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5
LAorCQkgICAgICBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqYywgY29uc3QgY2hhciAqdmFsdWUp
Cit7CisgIGZwcmludGZfZmlsdGVyZWQgKGZpbGUsIF8oIkRlYnVnZ2luZyBvZiBOZXRCU0QgdGhy
ZWFkIG1vZHVsZSBpcyAlcy5cbiIpLAorCQkgICAgdmFsdWUpOworfQorCisKKy8qIEFjdGl2YXRl
IHRocmVhZCBzdXBwb3J0IGlmIGFwcHJvcHJpYXRlLiAgRG8gbm90aGluZyBpZiB0aHJlYWQKKyAg
IHN1cHBvcnQgaXMgYWxyZWFkeSBhY3RpdmUuICAqLworCitzdGF0aWMgdm9pZAorZW5hYmxlX25i
c2RfdGhyZWFkICh2b2lkKQoreworICBzdHJ1Y3QgbWluaW1hbF9zeW1ib2wgKm1zeW07CisgIHZv
aWQqIGNhbGxlcl9jb250ZXh0OworICBpbnQgc3RhdHVzOworCisgIC8qIElmIGFscmVhZHkgYWN0
aXZlLCBub3RoaW5nIG1vcmUgdG8gZG8uICAqLworICBpZiAobmJzZF90aHJlYWRfYWN0aXZlKQor
ICAgIHJldHVybjsKKworICBpZiAobHdwX2J1ZmZlciAhPSBOVUxMKQorICAgIHsKKyAgICAgIHhm
cmVlIChsd3BfYnVmZmVyKTsKKyAgICAgIGx3cF9idWZmZXIgPSBOVUxMOworICAgICAgbHdwX2Nv
dW50ID0gbHdwX2J1ZnNpemUgPSAwOworICAgIH0KKyAgCisgIC8qIHB1c2hfdGFyZ2V0ICgmbmJz
ZF90aHJlYWRfb3BzKTsgKi8KKyAgbmJzZF90aHJlYWRfYWN0aXZlID0gMTsKK30KKworLyogRGVh
Y3RpdmF0ZSB0aHJlYWQgc3VwcG9ydC4gIERvIG5vdGhpbmcgaXMgdGhyZWFkIHN1cHBvcnQgaXMK
KyAgIGFscmVhZHkgaW5hY3RpdmUuICAqLworCisjaWYgMAorc3RhdGljIHZvaWQKK2Rpc2FibGVf
bmJzZF90aHJlYWQgKHZvaWQpCit7CisgIGlmICghbmJzZF90aHJlYWRfYWN0aXZlKQorICAgIHJl
dHVybjsKKworICB1bnB1c2hfdGFyZ2V0ICgmbmJzZF90aHJlYWRfb3BzKTsKKyAgbmJzZF90aHJl
YWRfYWN0aXZlID0gMDsKK30KKyNlbmRpZgorCisvKiBVcGRhdGUgb3VyIGx3cF9pbmZvIGJ1ZmZl
ciwgYW5kIHRlbGwgR0RCIGFib3V0IGFkZHMgb3IgZGVsZXRlcy4KKworICAgQnkgZG9pbmcgdGhl
IHRocmVhZCBhZGQgYW5kIHRocmVhZCBkZWxldGUgb3BlcmF0aW9ucyBoZXJlIGFzIHdlCisgICBs
ZWFybiBhYm91dCB0aHJlYWRzLCB3ZSBhbGxvdyB1c2VycyB0byBydW4gdGhyZWFkLXNwZWNpZmlj
IGNvbW1hbmRzCisgICB3aXRob3V0IG5lZWRpbmcgdG8gcnVuICJpbmZvIHRocmVhZHMiIGZpcnN0
LiAKKworICAgVGhlIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byB0aGUgd2FpdHN0YXR1cyBzdHJ1
Y3QsIHdoaWNoCisgICBpcyBjb3BpZWQgaW50byB0aGUgd2FpdHN0YXR1cyBmb3IgdGhlIHRocmVh
ZCB3ZSBmaW5kIGFzIHRoZSBzaWduYWxsZWQKKyAgIHRocmVhZC4gICovCisKK3N0YXRpYyB2b2lk
Cit1cGRhdGVfbHdwYnVmIChzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cykKK3sKKyAg
aW50IHBpOworICBsd3BpZF90IGx3cF9pZCwgc2lnX2x3cGlkOworICBzdHJ1Y3QgcHRyYWNlX2x3
cGluZm8gcHRfaW5mbzsKKyAgcHRpZF90IHB0aWQ7CisgIAorICAvKiBBY2N1bXVsYXRlIGFuIGFy
cmF5IG9mIE5ldEJTRCB0aHJlYWRzLCBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIExXUCBpZC4KKwor
ICAgICBUaGUgcmVhc29uIGZvciB1c2luZyBkZXNjZW5kaW5nIG9yZGVyIGlzIHRoYXQgdGhpcyBp
cyB0aGUgb3JkZXIKKyAgICAgaW4gd2hpY2ggTFdQcyBhcmUgcmV0dXJuZWQgYnkgdGhlIHB0cmFj
ZSgpIFBUX0xXUElORk8gZnVuY3Rpb24sCisgICAgIGJlY2F1c2UgaXQgcmV0dXJucyB0aGVtIGlu
IHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGV4aXN0IGluIHRoZQorICAgICBwX2x3cHMgbGlzdCBm
b3IgdGhlIHByb2Nlc3MsIGFuZCBuZXcgZW50cmllcyBhcmUgYXNzaWduZWQgYXNjZW5kaW5nCisg
ICAgIExXUCBJRHMgYW5kIGFyZSBhZGRlZCB0byB0aGUgaGVhZCBvZiB0aGF0IGxpc3QuICAqLwor
CisgIGx3cF9pZCA9IHNpZ19sd3BpZCA9IDA7CisgIHBpID0gMDsKKyAgCisgIHdoaWxlICgxKQor
ICAgIHsKKyAgICAgIHB0X2luZm8ucGxfbHdwaWQgPSBsd3BfaWQ7CisgICAgICBlcnJubyA9IDA7
CisgICAgICBpZiAocHRyYWNlIChQVF9MV1BJTkZPLCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAor
CQkgICZwdF9pbmZvLCBzaXplb2YgKHB0X2luZm8pKSA9PSAtMSkKKwl7CisJICBpZiAoZXJybm8g
PT0gRVNSQ0gpCisJICAgIGJyZWFrOworCSAgZWxzZSBpZiAoZXJybm8gIT0gMCkKKwkgICAgcGVy
cm9yX3dpdGhfbmFtZSAoXygiQ291bGRuJ3QgZ2V0IHRocmVhZCBpbmZvcm1hdGlvbiIpKTsKKwl9
CisKKyAgICAgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKwlmcHJpbnRmX3VuZmlsdGVyZWQgKGdk
Yl9zdGRsb2csCisJCQkgICAgIk5UVVA6IGx3cGluZm8gb24gJWQgcmV0dXJucyBsd3AgJWQsIHBs
X2V2ZW50ICVkXG4iLAorCQkJICAgIGx3cF9pZCwgcHRfaW5mby5wbF9sd3BpZCwgcHRfaW5mby5w
bF9ldmVudCk7CisJICAKKyAgICAgIC8qIFJldHJpZXZlIHRoZSBMV1AgSUQgdGhhdCB3YXMgZm91
bmQuICBUaGlzIGFsc28gc2V0cyB0aGUgSUQgdG8KKwkgc3RhcnQgZnJvbSB0aGUgbmV4dCB0aW1l
IGFyb3VuZCB0aGUgbG9vcC4gICovCisgICAgICBsd3BfaWQgPSBwdF9pbmZvLnBsX2x3cGlkOwor
CisgICAgICAvKiBMV1AgaWQgMCBpcyBlbmQgb2YgbGlzdC4gICovCisgICAgICBpZiAobHdwX2lk
ID09IDApCisJYnJlYWs7CisgICAgICAKKyAgICAgIC8qIElmIHRoZSBMV1Agd2UgZm91bmQgaGFz
IGFuIElEIGxlc3MgdGhhbiB0aGUgSUQgb2YgdGhlIGN1cnJlbnQKKwkgYnVmZmVyIGVudHJ5LCB0
aGVuIHRoZSBjdXJyZW50IGJ1ZmZlciBlbnRyeSBpcyBhIGRlbGV0ZWQgdGhyZWFkLgorCSBUZWxs
IEdEQiBhYm91dCBpdHMgZGVtaXNlLCB0aGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBidWZmZXIuIAor
CSAgCisJIFdlIGhhdmUgdG8gZG8gdGhpcyBpbiBhIGxvb3AgdW50aWwgd2UgcnVuIG91dCBvZiB0
aHJlYWRzCisJIHRvIGJlIHJlbW92ZWQuICAqLworICAgICAgd2hpbGUgKHBpIDwgbHdwX2NvdW50
ICYmIGx3cF9pZCA8IFRJREdFVCAobHdwX2J1ZmZlcltwaV0ucHRpZCkpCisJeworCSAgaWYgKGRl
YnVnX25ic2RfdGhyZWFkKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJ
CQkJIk5UVVA6IHRocmVhZCBwdGlkICVkLCVsZCBoYXMgZGlzYXBwZWFyZWRcbiIsCisJCQkJUElE
R0VUIChsd3BfYnVmZmVyW3BpXS5wdGlkKSwKKwkJCQlUSURHRVQgKGx3cF9idWZmZXJbcGldLnB0
aWQpKTsKKworCSAgLyogVGVsbCBHREIuICAqLworCSAgZGVsZXRlX3RocmVhZCAobHdwX2J1ZmZl
cltwaV0ucHRpZCk7CisKKwkgIC8qIFJlbW92ZSB0aGUgZGVsZXRlZCBlbnRyeS4gICovCisJICBp
ZiAocGkgPCBsd3BfY291bnQpCisJICAgIG1lbW1vdmUgKGx3cF9idWZmZXIgKyBwaSArIDEsIGx3
cF9idWZmZXIgKyBwaSwgCisJCSAgICAgKGx3cF9jb3VudCAtIHBpKSAqIHNpemVvZiAoc3RydWN0
IGx3cF9pbmZvKSk7CisJICBsd3BfY291bnQtLTsKKwl9CisKKyAgICAgIC8qIElmIHdlJ3JlIG5v
dyBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciwgb3IgdGhlIExXUCBmb3VuZAorCSBo
YXMgYW4gTFdQIElEIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBlbnRyeSBpbiB0aGUgYnVmZmVy
LCB0aGlzCisJIGlzIGEgbmV3IHRocmVhZC4gIEFsbG9jYXRlIG1vcmUgYnVmZmVyIHNwYWNlIGlm
IG5lZWQgYmUsCisJIG1ha2Ugcm9vbSBmb3IgdGhpcyBlbnRyeSwgYW5kIHN0b3JlIGl0LiAgVGhl
biB0ZWxsIEdEQiBhYm91dAorCSB0aGUgbmV3IHRocmVhZC4gICovCisgICAgICBpZiAocGkgPj0g
bHdwX2NvdW50IHx8IGx3cF9pZCA+IFRJREdFVCAobHdwX2J1ZmZlcltwaV0ucHRpZCkpCisJewor
CSAgLyogQWxsb2NhdGUgbW9yZSBzcGFjZSwgaWYgd2UgbmVlZCBpdC4gICovCisJICBpZiAobHdw
X2NvdW50ID09IGx3cF9idWZzaXplKQorCSAgICB7CisJICAgICAgaWYgKGx3cF9idWZzaXplKQor
CQlsd3BfYnVmc2l6ZSAqPSAyOworCSAgICAgIGVsc2UKKwkJbHdwX2J1ZnNpemUgPSAxOworCSAg
ICAgIGx3cF9idWZmZXIgPSAoc3RydWN0IGx3cF9pbmZvICopIHhyZWFsbG9jIChsd3BfYnVmZmVy
LCAKKwkJCQkJCQkgbHdwX2J1ZnNpemUgKiBzaXplb2YgKHN0cnVjdCBsd3BfaW5mbykpOworCSAg
ICB9CisKKwkgIC8qIFB1c2ggY3VycmVudCBhbmQgbGF0ZXIgZW50cmllcywgaWYgYW55LCBvdmVy
LiAgKi8KKwkgIGlmIChwaSA8IGx3cF9jb3VudCkKKwkgICAgbWVtbW92ZSAobHdwX2J1ZmZlciAr
IHBpICsgMSwgbHdwX2J1ZmZlciArIHBpLCAKKwkJICAgICAobHdwX2NvdW50IC0gcGkpICogc2l6
ZW9mIChzdHJ1Y3QgbHdwX2luZm8pKTsKKworCSAgLyogVXBkYXRlIHRoZSBjb3VudCBvZiBMV1Bz
LiAgKi8KKwkgIGx3cF9jb3VudCsrOworCisJICAvKiBJbml0aWFsaXplIHRoZSBuZXcgZW50cnku
ICAqLworCSAgbHdwX2J1ZmZlcltwaV0ucHRpZCA9IE1FUkdFUElEIChQSURHRVQgKGluZmVyaW9y
X3B0aWQpLCBsd3BfaWQpOworCSAgaWYgKHB0X2luZm8ucGxfZXZlbnQgPT0gUExfRVZFTlRfU0lH
TkFMKQorCSAgICB7CisJICAgICAgbHdwX2J1ZmZlcltwaV0uc2lnbmFsbGVkID0gMTsKKwkgICAg
ICBsd3BfYnVmZmVyW3BpXS53YWl0c3RhdHVzID0gKnN0YXR1czsKKwkgICAgICBzaWdfbHdwaWQg
PSBsd3BfaWQ7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgbHdwX2J1ZmZlcltwaV0uc2lnbmFsbGVk
ID0gMDsKKworCSAgLyogQWR2YW5jZSB0aGUgTFdQIGJ1ZmZlciBwb2ludGVyLiAgKi8KKwkgIHBp
Kys7CisJICAKKwkgIC8qIFRlbGwgR0RCIGFib3V0IHRoZSBuZXcgdGhyZWFkLiAgKi8KKwkgIGlm
IChsd3BfY291bnQgPT0gMSkKKwkgICAgeworCSAgICAgIC8qIFNlZSBpZiBHREIgc3RpbGwgaGFz
IFRJRCB6ZXJvLCBpZiBzbyBzZXQgdGhlIFRJRC4gICovCisJICAgICAgaWYgKFRJREdFVCAoaW5m
ZXJpb3JfcHRpZCkgPT0gMCkKKwkJeworCQkgIHN0cnVjdCB0aHJlYWRfaW5mbyAqdHA7CisJCSAg
CisJCSAgcHRpZCA9IE1FUkdFUElEIChQSURHRVQgKGluZmVyaW9yX3B0aWQpLCBsd3BfaWQpOwor
CQkgIC8qIHRocmVhZF9jaGFuZ2VfcHRpZCAoaW5mZXJpb3JfcHRpZCwgcHRpZCk7ICovCisJCSAg
dHAgPSBmaW5kX3RocmVhZF9waWQgKGluZmVyaW9yX3B0aWQpOworCQkgIGlmICh0cCAhPSBOVUxM
KQorCQkgICAgeworCQkgICAgICB0cC0+cHRpZCA9IHB0aWQ7CisJCSAgICAgIGluZmVyaW9yX3B0
aWQgPSBwdGlkOworCQkgIAorCQkgICAgICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJCQlmcHJp
bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSAgICAiTlRVUDogc2V0dGluZyBtYWlu
IHRocmVhZCBwdGlkIHRvICVkLCVsZFxuIiwKKwkJCQkJICAgIFBJREdFVCAocHRpZCksIFRJREdF
VCAocHRpZCkpOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgLyogTmV3IHRo
cmVhZCAoZmlyc3QgdGhyZWFkKSwgYWRkIGl0IHRvIEdEQi4gICovCisJCSAgICAgIGluZmVyaW9y
X3B0aWQgPSBwdGlkOworCQkgICAgICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJCQlmcHJpbnRm
X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSAgICAiTlRVUDogYWRkaW5nIGZpcnN0IHRo
cmVhZCBwdGlkICVkLCVkXG4iLAorCQkJCQkgICAgUElER0VUIChpbmZlcmlvcl9wdGlkKSwgbHdw
X2lkKTsKKwkJICAgICAgYWRkX3RocmVhZCAocHRpZCk7CisJCSAgICB9CisJCX0KKwkgICAgfQor
CSAgZWxzZQorCSAgICB7CisJICAgICAgLyogTmV3IHRocmVhZCBidXQgbm90IHRoZSBmaXJzdCwg
YWRkIGl0IHRvIEdEQi4gICovCisJICAgICAgaWYgKGRlYnVnX25ic2RfdGhyZWFkKQorCQlmcHJp
bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICJOVFVQOiBhZGRpbmcgbmV3IHRo
cmVhZCBwdGlkICVkLCVkXG4iLAorCQkJCSAgICBQSURHRVQgKGluZmVyaW9yX3B0aWQpLCBsd3Bf
aWQpOworCSAgICAgIGFkZF90aHJlYWQgKE1FUkdFUElEIChQSURHRVQgKGluZmVyaW9yX3B0aWQp
LCBsd3BfaWQpKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBGb3VuZCBhbiBl
eGlzdGluZyB0aHJlYWQuICBVcGRhdGUgaXRzIHN0YXR1cyBpbiB0aGUgYnVmZmVyLgorCSAgICAg
Tm90ZSB0aGF0IHdlIGNsZWFyIHRoZSBzaWduYWxsZWQgZmxhZyBpZiB0aGlzIGlzIHRoZSBmaXJz
dAorCSAgICAgY2FsbCBhbmQgdGhpcyB0aHJlYWQgd2Fzbid0IHRoZSBzaWduYWxsZWQgdGhyZWFk
LCBidXQgd2UgCisJICAgICBsZWF2ZSBpdCBhbG9uZSBvbiBzdWJzZXF1ZW50IGNhbGxzLiAgVGhh
dCB3YXkgdGhlIHN1YnNlcXVlbnQKKwkgICAgIGNhbGxzIHdpbGwgYWNjdW11bGF0ZSB0aGUgc2V0
IG9mIHNpZ25hbGxlZCB0aHJlYWRzLiAgKi8KKwkgIGlmIChwdF9pbmZvLnBsX2V2ZW50ID09IFBM
X0VWRU5UX1NJR05BTCkKKwkgICAgeworCSAgICAgIGx3cF9idWZmZXJbcGldLnNpZ25hbGxlZCA9
IDE7CisJICAgICAgbHdwX2J1ZmZlcltwaV0ud2FpdHN0YXR1cyA9ICpzdGF0dXM7CisJICAgICAg
c2lnX2x3cGlkID0gbHdwX2lkOworCSAgICB9CisJICAKKwkgIC8qIEFkdmFuY2UgdGhlIExXUCBi
dWZmZXIgcG9pbnRlci4gICovCisJICBwaSsrOworCX0KKyAgICB9CisgIGlmIChkZWJ1Z19uYnNk
X3RocmVhZCkKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkiTlRVUDog
c2lnbmFsbGVkIHRocmVhZCBsd3BpZCBpcyAlZFxuIiwgc2lnX2x3cGlkKTsKKworfQorCisjaWYg
MAorLyogVGhlICJ0b19kZXRhY2giIG1ldGhvZCBvZiB0aGUgbmJzZF90aHJlYWRfb3BzLiAgKi8K
Kworc3RhdGljIHZvaWQKK25ic2RfdGhyZWFkX2RldGFjaCAoY2hhciAqYXJncywgaW50IGZyb21f
dHR5KQoreyAgIAorICBzdHJ1Y3QgdGFyZ2V0X29wcyAqYmVuZWF0aCA9IGZpbmRfdGFyZ2V0X2Jl
bmVhdGggKCZuYnNkX3RocmVhZF9vcHMpOworCisgIGRpc2FibGVfbmJzZF90aHJlYWQgKCk7Cisg
IGJlbmVhdGgtPnRvX2RldGFjaCAoYXJncywgZnJvbV90dHkpOworfQorI2VuZGlmCisKKy8qIFJl
c3VtZSBleGVjdXRpb24gb2YgdGhyZWFkIFBUSUQsIG9yIGFsbCB0aHJlYWRzIGlmIFBUSUQgaXMg
LTEuICBJZgorICAgU1RFUCBpcyBub256ZXJvLCBzaW5nbGUtc3RlcCBpdC4gIElmIFNJR05BTCBp
cyBub256ZXJvLCBnaXZlIGl0CisgICB0aGF0IHNpZ25hbC4gICovCisKK3N0YXRpYyB2b2lkCitu
YnNkX3RocmVhZF9yZXN1bWUgKHB0aWRfdCBwdGlkLCBpbnQgc3RlcCwgZW51bSB0YXJnZXRfc2ln
bmFsIHNpZ25hbCkKK3sKKyAgcGlkX3QgcGlkOworICBpbnQgcmVxdWVzdDsKKyAgCisgIC8qIEEg
c3BlY2lmaWMgUFRJRCBtZWFucyBgc3RlcCBvbmx5IHRoaXMgcHJvY2VzcyBpZCcuICAqLworICBp
ZiAocHRpZF9lcXVhbCAobWludXNfb25lX3B0aWQsIHB0aWQpIHx8IFRJREdFVCAocHRpZCkgPD0g
MCkKKyAgICB7CisgICAgICByZXN1bWVfYWxsID0gMTsKKyAgICAgIHB0aWQgPSBpbmZlcmlvcl9w
dGlkOworICAgIH0KKyAgZWxzZQorICAgIHJlc3VtZV9hbGwgPSAwOworICAKKyAgcGlkID0gcHRp
ZF9nZXRfcGlkIChwdGlkKTsKKworI2lmIDAKKyAgaWYgKGNhdGNoX3N5c2NhbGxfZW5hYmxlZCAo
KSA+IDApCisgICAgcmVxdWVzdCA9IFBUX1NZU0NBTEw7CisgIGVsc2UKKyNlbmRpZgorICAgIHJl
cXVlc3QgPSBQVF9DT05USU5VRTsKKworI2lmZGVmIFBUX1NURVAKKyAgaWYgKHN0ZXApCisgICAg
eworICAgICAgLyogSWYgdGhpcyBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBQVF9TVEVQLCBhIGhp
Z2hlciBsZXZlbAorICAgICAgICAgZnVuY3Rpb24gd2lsbCBoYXZlIGNhbGxlZCBzaW5nbGVfc3Rl
cCgpIHRvIHRyYW5zbXV0ZSB0aGUgc3RlcAorICAgICAgICAgcmVxdWVzdCBpbnRvIGEgY29udGlu
dWUgcmVxdWVzdCAoYnkgc2V0dGluZyBicmVha3BvaW50cyBvbgorICAgICAgICAgYWxsIHBvc3Np
YmxlIHN1Y2Nlc3NvciBpbnN0cnVjdGlvbnMpLCBzbyB3ZSBkb24ndCBoYXZlIHRvCisgICAgICAg
ICB3b3JyeSBhYm91dCB0aGF0IGhlcmUuICAqLworICAgICAgcmVxdWVzdCA9IFBUX1NURVA7Cisg
ICAgfQorI2VuZGlmCisKKyAgLyogQW4gYWRkcmVzcyBvZiAoUFRSQUNFX1RZUEVfQVJHMykxIHRl
bGxzIHB0cmFjZSB0byBjb250aW51ZSBmcm9tCisgICAgIHdoZXJlIGl0IHdhcy4gIElmIEdEQiB3
YW50ZWQgaXQgdG8gc3RhcnQgc29tZSBvdGhlciB3YXksIHdlIGhhdmUKKyAgICAgYWxyZWFkeSB3
cml0dGVuIGEgbmV3IHByb2dyYW0gY291bnRlciB2YWx1ZSB0byB0aGUgY2hpbGQuICAqLworICBl
cnJubyA9IDA7CisgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKyAgICBmcHJpbnRmX3VuZmlsdGVy
ZWQgKGdkYl9zdGRsb2csCisJCQkiTlRSOiAlcyBwdGlkICVkLCVsZCwgJXMsIHNpZ25hbCAlZFxu
IiwKKwkJCShzdGVwID8gInN0ZXBwaW5nIiA6ICJyZXN1bWluZyIpLAorCQkJUElER0VUIChwdGlk
KSwgVElER0VUIChwdGlkKSwKKwkJCShyZXN1bWVfYWxsID8gImFsbCB0aHJlYWRzIiA6ICJzaW5n
bGUgdGhyZWFkIiksCisJCQlzaWduYWwpOworCisgIC8qIEFzc3VtZSBub3Qgc3RlcHBpbmcgc29t
ZSBMV1AgSUQuICAqLworICBzdGVwX2x3cGlkID0gMDsKKyAgaWYgKHN0ZXApCisgICAgeworICAg
ICAgc3RlcF9sd3BpZCA9IFRJREdFVCAocHRpZCk7CisgICAgICBpZiAoc3RlcF9sd3BpZCA8IDAp
CisJc3RlcF9sd3BpZCA9IC1zdGVwX2x3cGlkOworICAgIH0JCisgIAorICBpZiAocmVzdW1lX2Fs
bCkKKyAgICB7CisgICAgICBpZiAocGVuZGluZ19zaWdzID4gMCkKKwl7CisJICAvKiBXZSBoYXZl
IHBlbmRpbmcgc2lnbmFscyBmcm9tIHRoZSBwcmV2aW91cyB3YWl0IHN0aWxsIAorCSAgICAgbmVl
ZGluZyB0byBiZSBkZWxpdmVyZWQuICBTbyBkb24ndCByZXN1bWUgdGhlIHByb2Nlc3MsCisJICAg
ICBpbnN0ZWFkIHRha2Ugbm8gYWN0aW9uIGFuZCB3ZSdsbCBkZWxpdmVyIG9uZSBvZiB0aG9zZQor
CSAgICAgcGVuZGluZyBzaWduYWxzIGF0IHRoZSBuZXh0IHdhaXQuICAqLworCSAgaWYgKGRlYnVn
X25ic2RfdGhyZWFkKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJ
Ik5UUjogcHRpZCAlZCwlbGQgaGFzICVkIHBlbmRpbmcgc2lnbmFscywgc2tpcHBpbmcgcmVzdW1l
XG4iLAorCQkJCVBJREdFVCAocHRpZCksIFRJREdFVCAocHRpZCksIHBlbmRpbmdfc2lncyk7CisJ
ICByZXR1cm47CisJfQorICAgICAgaWYgKHN0ZXApCisJcHRyYWNlIChyZXF1ZXN0LCBwaWQsICh2
b2lkICopIDEsIFRJREdFVCAocHRpZCkpOworICAgICAgZWxzZQorCXB0cmFjZSAocmVxdWVzdCwg
cGlkLCAodm9pZCAqKSAxLAorCQl0YXJnZXRfc2lnbmFsX3RvX2hvc3QgKHNpZ25hbCkpOworICAg
IH0KKyAgZWxzZQorICAgIHB0cmFjZSAocmVxdWVzdCwgcGlkLCAodm9pZCAqKSAxLCAtVElER0VU
IChwdGlkKSk7CisgIAorICBpZiAoZXJybm8gIT0gMCkKKyAgICBwZXJyb3Jfd2l0aF9uYW1lICgo
InB0cmFjZSIpKTsKK30KKworLyogV2FpdCBmb3IgdGhlIGNoaWxkIHNwZWNpZmllZCBieSBQVElE
IHRvIGRvIHNvbWV0aGluZy4gIFJldHVybiB0aGUKKyAgIHByb2Nlc3MgSUQgb2YgdGhlIGNoaWxk
LCBvciBNSU5VU19PTkVfUFRJRCBpbiBjYXNlIG9mIGVycm9yOyBzdG9yZQorICAgdGhlIHN0YXR1
cyBpbiAqT1VSU1RBVFVTLiAgKi8KKworc3RhdGljIHB0aWRfdAorbmJzZF90aHJlYWRfd2FpdDIg
KHB0aWRfdCBwdGlkLAorCQkgICBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKm91cnN0YXR1cywg
aW50IG9wdGlvbnMpCit7CisgIHBpZF90IHBpZDsKKyAgaW50IHN0YXR1cywgc2F2ZV9lcnJubzsK
KworICBkbworICAgIHsKKyAgICAgIHNldF9zaWdpbnRfdHJhcCAoKTsKKworICAgICAgZG8KKwl7
CisJICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri
X3N0ZGxvZywKKwkJCQkiTlRXMjogd2FpdGluZyBmb3IgcHRpZCAlZCwlbGQsIG9wdCAlZFxuIiwK
KwkJCQlQSURHRVQgKHB0aWQpLCBUSURHRVQgKHB0aWQpLCBvcHRpb25zKTsKKworCSAgcGlkID0g
d2FpdHBpZCAocHRpZF9nZXRfcGlkIChwdGlkKSwgJnN0YXR1cywgb3B0aW9ucyk7CisJICBzYXZl
X2Vycm5vID0gZXJybm87CisJICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJICAgIGZwcmludGZf
dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkiTlRXMjogd2FpdHBpZCBlcnJubyBpcyAlZCwg
cGlkICVkLCBzdGF0dXMgJXhcbiIsCisJCQkJc2F2ZV9lcnJubywgcGlkLCBzdGF0dXMpOworCX0K
KyAgICAgIHdoaWxlIChwaWQgPT0gLTEgJiYgc2F2ZV9lcnJubyA9PSBFSU5UUik7CisKKyAgICAg
IGNsZWFyX3NpZ2ludF90cmFwICgpOworCisgICAgICAvKiBJZiBub3RoaW5nIGZvdW5kIGluIHRo
ZSBubyB3YWl0IGNhc2UsIHJlcG9ydCB0aGF0LiAgKi8KKyAgICAgIGlmIChvcHRpb25zID09IFdO
T0hBTkcgJiYgcGlkID09IDApCisJcmV0dXJuIHBpZF90b19wdGlkICgtMSk7CisgICAgICAKKyAg
ICAgIGlmIChwaWQgPT0gLTEpCisJeworCSAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkZXJy
LAorCQkJICAgICAgXygiQ2hpbGQgcHJvY2VzcyB1bmV4cGVjdGVkbHkgbWlzc2luZzogJXMuXG4i
KSwKKwkJCSAgICAgIHNhZmVfc3RyZXJyb3IgKHNhdmVfZXJybm8pKTsKKworCSAgLyogSWYgZmly
c3Qgd2FpdCwgY2xhaW0gaXQgZXhpdGVkIHdpdGggdW5rbm93biBzaWduYWw7IAorCSAgICAgZWxz
ZSBjbGFpbSB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gd2FpdCBmb3IuICAqLworCSAgaWYgKG9w
dGlvbnMgPT0gV05PSEFORykKKwkgICAgcmV0dXJuIHBpZF90b19wdGlkICgtMSk7CisJICBvdXJz
dGF0dXMtPmtpbmQgPSBUQVJHRVRfV0FJVEtJTkRfU0lHTkFMTEVEOworCSAgb3Vyc3RhdHVzLT52
YWx1ZS5zaWcgPSBUQVJHRVRfU0lHTkFMX1VOS05PV047CisJICByZXR1cm4gaW5mZXJpb3JfcHRp
ZDsKKwl9CisKKyAgICAgIC8qIElnbm9yZSB0ZXJtaW5hdGVkIGRldGFjaGVkIGNoaWxkIHByb2Nl
c3Nlcy4gICovCisgICAgICBpZiAoIVdJRlNUT1BQRUQgKHN0YXR1cykgJiYgcGlkICE9IHB0aWRf
Z2V0X3BpZCAoaW5mZXJpb3JfcHRpZCkpCisJcGlkID0gLTE7CisgICAgfQorICB3aGlsZSAocGlk
ID09IC0xKTsKKworICBzdG9yZV93YWl0c3RhdHVzIChvdXJzdGF0dXMsIHN0YXR1cyk7CisgIHJl
dHVybiBwaWRfdG9fcHRpZCAocGlkKTsKK30KKworc3RhdGljIGludAorbmJzZF90aHJlYWRfY2Fu
Y2VsX2JyZWFrcG9pbnQgKHN0cnVjdCBsd3BfaW5mbyAqbHApCit7CisgIC8qIEFycmFuZ2UgZm9y
IGEgYnJlYWtwb2ludCB0byBiZSBoaXQgYWdhaW4gbGF0ZXIuICBXZSBkb24ndCBrZWVwCisgICAg
IHRoZSBTSUdUUkFQIHN0YXR1cyBhbmQgZG9uJ3QgZm9yd2FyZCB0aGUgU0lHVFJBUCBzaWduYWwg
dG8gdGhlCisgICAgIExXUC4gIFdlIHdpbGwgaGFuZGxlIHRoZSBjdXJyZW50IGV2ZW50LCBldmVu
dHVhbGx5IHdlIHdpbGwgcmVzdW1lCisgICAgIHRoaXMgTFdQLCBhbmQgdGhpcyBicmVha3BvaW50
IHdpbGwgdHJhcCBhZ2Fpbi4KKworICAgICBJZiB3ZSBkbyBub3QgZG8gdGhpcywgdGhlbiB3ZSBy
dW4gdGhlIHJpc2sgdGhhdCB0aGUgdXNlciB3aWxsCisgICAgIGRlbGV0ZSBvciBkaXNhYmxlIHRo
ZSBicmVha3BvaW50LCBidXQgdGhlIExXUCB3aWxsIGhhdmUgYWxyZWFkeQorICAgICB0cmlwcGVk
IG9uIGl0LiAgKi8KKworICBpZiAobHAtPndhaXRzdGF0dXMua2luZCAgPT0gVEFSR0VUX1dBSVRL
SU5EX1NUT1BQRUQKKyAgICAgICYmIGxwLT53YWl0c3RhdHVzLnZhbHVlLnNpZyA9PSBTSUdUUkFQ
CisgICAgICAmJiBicmVha3BvaW50X2luc2VydGVkX2hlcmVfcCAocmVhZF9wY19waWQgKGxwLT5w
dGlkKSAtCisJCQkJICAgICBERUNSX1BDX0FGVEVSX0JSRUFLKSkKKyAgICB7CisgICAgICBpZiAo
ZGVidWdfbmJzZF90aHJlYWQpCisJZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJ
ICAgICJOVENCOiBQdXNoIGJhY2sgYnJlYWtwb2ludCBmb3IgcHRpZCAlZCwlbGRcbiIsCisJCQkg
ICAgUElER0VUIChscC0+cHRpZCksIFRJREdFVCAobHAtPnB0aWQpKTsKKworICAgICAgLyogQmFj
ayB1cCB0aGUgUEMgaWYgbmVjZXNzYXJ5LiAgKi8KKyAgICAgIGlmIChERUNSX1BDX0FGVEVSX0JS
RUFLKQorCXdyaXRlX3BjX3BpZCAocmVhZF9wY19waWQgKGxwLT5wdGlkKSAtIERFQ1JfUENfQUZU
RVJfQlJFQUssIGxwLT5wdGlkKTsKKworICAgICAgLyogV2Ugbm8gbG9uZ2VyIGhhdmUgYSBwZW5k
aW5nIHNpZ25hbCBmb3IgdGhpcyB0aHJlYWQuICAqLworICAgICAgbHAtPnNpZ25hbGxlZCA9IDA7
CisKKyAgICAgIC8qIE5vdCBhIHBlbmRpbmcgc2lnbmFsIGFueW1vcmUuICAqLworICAgICAgcmV0
dXJuIDE7CisgICAgfQorICByZXR1cm4gMDsKK30KKworLyogVGhlICJ0b193YWl0IiBtZXRob2Qg
b2YgdGhlIG5ic2RfdGhyZWFkX29wcy4gICovCisKK3N0YXRpYyBwdGlkX3QKK25ic2RfdGhyZWFk
X3dhaXQgKHB0aWRfdCBwdGlkLCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cykKK3sK
KyAgcHRpZF90IGFjdGl2ZV9wdGlkOworICBzdHJ1Y3QgbHdwX2luZm8gKnNlbF90aHJlYWQ7Cisg
IGludCBzaWdfdGhyZWFkcywgaTsKKyAgc3RydWN0IHRhcmdldF93YWl0c3RhdHVzIHRzdGF0dXM7
CisKKyAgLyogSWYgdGhlcmUgd2VyZSBwZW5kaW5nIHNpZ25hbHMgYW5kIGEgcmVzdW1lIGFsbCB0
aHJlYWRzIHdhcyBkb25lLAorICAgICB0aGUgcHJvY2VzcyB3YXNuJ3QgYWN0dWFsbHkgcmVzdW1l
ZCBzbyBkb24ndCB3YWl0IG9uIGl0LiAgSnVzdAorICAgICBnbyBvbiB0byBwaWNrIGEgdGhyZWFk
IHRvIHJlcG9ydCBvbi4gICovCisgIGlmICghKHBlbmRpbmdfc2lncyA+IDAgJiYgcmVzdW1lX2Fs
bCkpCisgICAgeworICAgICAgcHRpZCA9IG5ic2RfdGhyZWFkX3dhaXQyIChwdGlkLCAmdHN0YXR1
cywgMCk7CisKKyAgICAgIC8qIERlZmF1bHQgc3RhdHVzIHJldHVybmVkIGlzIHRoZSBvbmUgd2Ug
anVzdCBnb3QuICAqLworICAgICAgKnN0YXR1cyA9IHRzdGF0dXM7CisgICAgICAKKyAgICAgIC8q
IFRoZSBwdGlkIHJldHVybmVkIGJ5IHRoZSB0YXJnZXQgYmVuZWF0aCB1cyBpcyB0aGUgcHRpZCBv
ZiB0aGUgcHJvY2Vzcy4KKwkgV2UgbmVlZCB0byBmaW5kIHdoaWNoIHRocmVhZCBpcyBjdXJyZW50
bHkgYWN0aXZlIGFuZCByZXR1cm4gCisJIGl0cyBwdGlkLiAgKi8KKyAgICAgIHVwZGF0ZV9sd3Bi
dWYgKCZ0c3RhdHVzKTsKKyAgCisgICAgICAvKiBMb29wIGNoZWNraW5nIGZvciBhZGRpdGlvbmFs
IHRocmVhZHMgdGhhdCBhcmUgd2FpdGluZywgYW5kIGdhdGhlcgorCSB1cCB0aGVpciBzdGF0dXMu
ICAqLworICAgICAgd2hpbGUgKDEpCisJeworCSAgcHRpZCA9IG5ic2RfdGhyZWFkX3dhaXQyIChw
dGlkLCAmdHN0YXR1cywgV05PSEFORyk7CisJICBpZiAoUElER0VUIChwdGlkKSA9PSAtMSkKKwkg
ICAgYnJlYWs7CisJICB1cGRhdGVfbHdwYnVmICgmdHN0YXR1cyk7CisJfQorICAgIH0KKyAgCisg
IC8qIEZpbmQgYSBzdWl0YWJsZSBzaWduYWxsZWQgdGhyZWFkLiAgUGljayB0aGUgc3RlcHBlZCBv
bmUsIGlmIHRoZXJlCisgICAgIGlzIG9uZTsgb3RoZXJ3aXNlIHBpY2sgYSByYW5kb20gb25lLiAg
Ki8KKyAgc2VsX3RocmVhZCA9IE5VTEw7CisgIHNpZ190aHJlYWRzID0gMDsKKyAgCisgIGZvciAo
aSA9IDA7IGkgPCBsd3BfY291bnQ7IGkrKykKKyAgICB7CisgICAgICBpZiAobHdwX2J1ZmZlcltp
XS5zaWduYWxsZWQpCisJeworCSAgc2lnX3RocmVhZHMrKzsKKwkgIGlmIChUSURHRVQgKGx3cF9i
dWZmZXJbaV0ucHRpZCkgPT0gc3RlcF9sd3BpZCkKKwkgICAgeworCSAgICAgIC8qIElmIHRoZXJl
IGlzIGEgc3RlcHBlZCB0aHJlYWQsIHBpY2sgdGhhdCBvbmUuICAqLworCSAgICAgIHNlbF90aHJl
YWQgPSAmbHdwX2J1ZmZlcltpXTsKKwkgICAgICBpZiAoZGVidWdfbmJzZF90aHJlYWQpCisJCWZw
cmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkgICAgIk5UVzogUGlja2luZyBwdGlk
ICVkLCVsZCBiZWNhdXNlIGl0IGlzIHN0ZXBwZWRcbiIsCisJCQkJICAgIFBJREdFVCAoc2VsX3Ro
cmVhZC0+cHRpZCksCisJCQkJICAgIFRJREdFVCAoc2VsX3RocmVhZC0+cHRpZCkpOworCSAgICAg
IGJyZWFrOworCSAgICB9CisJICAvKiBSYW5kb21seSBwaWNrIHRoaXMgb25lIG9yIGtlZXAgdGhl
IHByZXZpb3VzIGNob2ljZSwKKwkgICAgIHN1Y2ggdGhhdCBhbGwgb2YgdGhlIHNpZ25hbGxlZCB0
aHJlYWRzIGhhdmUgYW4gZXF1YWwKKwkgICAgIHByb2JhYmlsaXR5IG9mIGJlaW5nIHBpY2tlZC4g
ICovCisJICBpZiAoc2VsX3RocmVhZCA9PSBOVUxMIHx8IAorCSAgICAgICgoKGRvdWJsZSkgcmFu
ZCAoKSkgLyAoUkFORF9NQVggKyAxLjApKSA8ICgxLjAgLyBzaWdfdGhyZWFkcykpCisJICAgIHsK
KwkgICAgICBzZWxfdGhyZWFkID0gJmx3cF9idWZmZXJbaV07CisJICAgICAgaWYgKGRlYnVnX25i
c2RfdGhyZWFkKQorCQlmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICJO
VFc6IFBpY2tpbmcgcHRpZCAlZCwlbGQgb3V0IG9mICVkXG4iLAorCQkJCSAgICBQSURHRVQgKHNl
bF90aHJlYWQtPnB0aWQpLAorCQkJCSAgICBUSURHRVQgKHNlbF90aHJlYWQtPnB0aWQpLCBzaWdf
dGhyZWFkcyk7CisJICAgIH0KKwl9CisgICAgfQorICAKKyAgLyogU2NhbiB0aGUgTFdQIHRhYmxl
IGFnYWluLiAgRm9yIGVhY2ggc2lnbmFsbGVkIExXUCBvdGhlciB0aGFuIHRoZQorICAgICBjaG9z
ZW4gb25lLCBiYWNrIGl0IHVwIHRvIHRoZSBicmVha3BvaW50IGlmIGl0IHdhcyBzdG9wcGVkIGJ5
IGEKKyAgICAgYnJlYWtwb2ludCBhbmQgbWFyayBpdCBhcyBub3Qgc2lnbmFsbGVkIChpdCB3aWxs
IHJlLWJyZWFrIG5leHQKKyAgICAgdGltZSB3ZSBydW4gdGhlIHdob2xlIHByb2Nlc3MpLiAgT3Ro
ZXIgTFdQcyAodGhvc2Ugd2l0aCBzaWduYWxzCisgICAgIG90aGVyIHRoYW4gYnJlYWtwb2ludCBz
dG9wKSBhcmUgY291bnRlZCBidXQgbm90IGJhY2tlZCB1cDsgaWYgd2UKKyAgICAgZmluZCBhbnkg
b2YgdGhvc2UgdGhlbiB0aG9zZSB3aWxsIGJlIGRlbGl2ZXJlZCBuZXh0LiAgKi8KKyAgcGVuZGlu
Z19zaWdzID0gMDsKKyAgaWYgKHNpZ190aHJlYWRzID4gMSkKKyAgICB7CisgICAgICBmb3IgKGkg
PSAwOyBpIDwgbHdwX2NvdW50OyBpKyspCisJeworCSAgLyogU2tpcCB0aGUgc2VsZWN0ZWQgTFdQ
LiAgKi8KKwkgIGlmICgmbHdwX2J1ZmZlcltpXSA9PSBzZWxfdGhyZWFkKQorCSAgICBjb250aW51
ZTsKKwkgIAorCSAgaWYgKGx3cF9idWZmZXJbaV0uc2lnbmFsbGVkKQorCSAgICB7CisJICAgICAg
aWYgKFdJRlNUT1BQRUQgKGx3cF9idWZmZXJbaV0ud2FpdHN0YXR1cykpCisJCXsKKwkJICBpZiAo
IW5ic2RfdGhyZWFkX2NhbmNlbF9icmVha3BvaW50ICgmbHdwX2J1ZmZlcltpXSkpCisJCSAgICBw
ZW5kaW5nX3NpZ3MrKzsKKwkJfQorCSAgICAgIGVsc2UKKwkJcGVuZGluZ19zaWdzKys7CisJICAg
IH0KKwl9CisgICAgfQorICAKKyAgcHRpZCA9IGluZmVyaW9yX3B0aWQ7CisgIGlmIChzZWxfdGhy
ZWFkICE9IE5VTEwpCisgICAgeworICAgICAgcHRpZCA9ICBNRVJHRVBJRCAoUElER0VUIChwdGlk
KSwgVElER0VUIChzZWxfdGhyZWFkLT5wdGlkKSk7CisgICAgICAqc3RhdHVzID0gdHN0YXR1czsK
KyAgICAgIAorICAgICAgLyogVGhlIHNpZ25hbCBmb3IgdGhpcyB0aHJlYWQgaXMgbm93IGJlaW5n
IHJlcG9ydGVkLCBzbyBjbGVhcgorCSB0aGUgZmxhZyB0aGF0IHNheXMgaXQgaGFzbid0IGJlZW4g
cmVwb3J0ZWQgeWV0LiAgKi8KKyAgICAgIHNlbF90aHJlYWQtPnNpZ25hbGxlZCA9IDA7CisgICAg
fQorICBlbHNlIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQg
KGdkYl9zdGRsb2csCisJCQkiTlRXOiBubyBzaWduYWxsZWQgdGhyZWFkXG4iKTsKKworICBpZiAo
ZGVidWdfbmJzZF90aHJlYWQpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAor
CQkJIk5UVzogcmV0dXJuaW5nIHB0aWQgJWQsJWxkXG4iLAorCQkJUElER0VUIChwdGlkKSwgVElE
R0VUIChwdGlkKSk7CisKKyAgcmV0dXJuIHB0aWQ7Cit9CisKKy8qIFRoZSAidG9fbW91cm5faW5m
ZXJpb3IiIG1ldGhvZCBvZiB0aGUgbmJzZF90aHJlYWRfb3BzLiAgKi8KKworc3RhdGljIHZvaWQK
K25ic2RfdGhyZWFkX21vdXJuX2luZmVyaW9yICh2b2lkKQoreworICBpbnQgc3RhdHVzOworCisg
IC8qIFdhaXQganVzdCBvbmUgbW9yZSB0aW1lIHRvIGNvbGxlY3QgdGhlIGluZmVyaW9yJ3MgZXhp
dCBzdGF0dXMuCisgICAgIERvIG5vdCBjaGVjayB3aGV0aGVyIHRoaXMgc3VjY2VlZHMgdGhvdWdo
LCBzaW5jZSB3ZSBtYXkgYmUKKyAgICAgZGVhbGluZyB3aXRoIGEgcHJvY2VzcyB0aGF0IHdlIGF0
dGFjaGVkIHRvLiAgU3VjaCBhIHByb2Nlc3Mgd2lsbAorICAgICBvbmx5IHJlcG9ydCBpdHMgZXhp
dCBzdGF0dXMgdG8gaXRzIG9yaWdpbmFsIHBhcmVudC4gICovCisgIHdhaXRwaWQgKHB0aWRfZ2V0
X3BpZCAoaW5mZXJpb3JfcHRpZCksICZzdGF0dXMsIFdOT0hBTkcpOworCisgIGdlbmVyaWNfbW91
cm5faW5mZXJpb3IgKCk7CisKKyAgLyogaWYgKCFoYXZlX2luZmVyaW9ycyAoKSkgKi8KKyAgICB1
bnB1c2hfdGFyZ2V0ICgmbmJzZF90aHJlYWRfb3BzKTsKK30KKworCisvKiBUaGUgInRvX3RocmVh
ZF9hbGl2ZSIgbWV0aG9kIG9mIHRoZSBuYnNkX3RocmVhZF9vcHMuICAqLworc3RhdGljIGludAor
bmJzZF90aHJlYWRfdGhyZWFkX2FsaXZlIChwdGlkX3QgcHRpZCkKK3sKKyAgLyogVGhlIHRocmVh
ZCBsaXN0IG1haW50YWluZWQgYnkgR0RCIGlzIHVwIHRvIGRhdGUsIHNpbmNlIHdlIHVwZGF0ZQor
ICAgICBpdCBldmVyeXRpbWUgd2Ugc3RvcC4gICBTbyBjaGVjayB0aGlzIGxpc3QuICAqLworICBy
ZXR1cm4gaW5fdGhyZWFkX2xpc3QgKHB0aWQpOworfQorCisvKiBUaGUgInRvX3BpZF90b19zdHIi
IG1ldGhvZCBvZiB0aGUgbmJzZF90aHJlYWRfb3BzLiAgKi8KKworc3RhdGljIGNoYXIgKgorbmJz
ZF90aHJlYWRfcGlkX3RvX3N0ciAocHRpZF90IHB0aWQpCit7CisgIGlmIChUSURHRVQgKHB0aWQp
ID09IDApCisgICAgeworICAgICAgcmV0dXJuIG5vcm1hbF9waWRfdG9fc3RyIChwdGlkKTsKKyAg
ICB9CisgIHJldHVybiB4c3RycHJpbnRmIChfKCJUaHJlYWQgJWxkIiksIFRJREdFVCAocHRpZCkp
OworfQorCisvKiBVcGRhdGUgdGhlIHRhcmdldF9vcHMgd2l0aCBvdXIgdGhyZWFkIG1hY2hpbmVy
eS4gICovCisKK3ZvaWQKK2luaXRfbmJzZF90aHJlYWRfb3BzIChzdHJ1Y3QgdGFyZ2V0X29wcyAq
dCkKK3sKKyAgLyogdC0+dG9fZGV0YWNoICAgICAgICAgICAgID0gbmJzZF90aHJlYWRfZGV0YWNo
OyAqLworICB0LT50b19yZXN1bWUgICAgICAgICAgICAgPSBuYnNkX3RocmVhZF9yZXN1bWU7Cisg
IHQtPnRvX3dhaXQgICAgICAgICAgICAgICA9IG5ic2RfdGhyZWFkX3dhaXQ7CisgIHQtPnRvX21v
dXJuX2luZmVyaW9yICAgICA9IG5ic2RfdGhyZWFkX21vdXJuX2luZmVyaW9yOworICB0LT50b190
aHJlYWRfYWxpdmUgICAgICAgPSBuYnNkX3RocmVhZF90aHJlYWRfYWxpdmU7CisgIHQtPnRvX3Bp
ZF90b19zdHIgICAgICAgICA9IG5ic2RfdGhyZWFkX3BpZF90b19zdHI7CisKKyAgZW5hYmxlX25i
c2RfdGhyZWFkICgpOworfQorCit2b2lkCitfaW5pdGlhbGl6ZV9uYnNkX3RocmVhZCAodm9pZCkK
K3sKKyNpZiAwCisgIGluaXRfbmJzZF90aHJlYWRfb3BzICgpOworICBhZGRfdGFyZ2V0ICgmbmJz
ZF90aHJlYWRfb3BzKTsKKyNlbmRpZgorCisgIGFkZF9zZXRzaG93X3ppbnRlZ2VyX2NtZCAoIm5i
c2QtdGhyZWFkIiwgY2xhc3NfbWFpbnRlbmFuY2UsCisJCQkgICAgJmRlYnVnX25ic2RfdGhyZWFk
LCBfKCJcCitTZXQgZGVidWdnaW5nIG9mIE5ldEJTRCB0aHJlYWQgbW9kdWxlLiIpLCBfKCJcCitT
aG93IGRlYnVnZ2luZyBvZiBOZXRCU0QgdGhyZWFkIG1vZHVsZS4iKSwgXygiXAorRW5hYmxlcyBw
cmludGYgZGVidWdnaW5nIG91dHB1dC4iKSwKKwkJCSAgICBOVUxMLAorCQkJICAgIHNob3dfZGVi
dWdfbmJzZF90aHJlYWQsCisJCQkgICAgJnNldGRlYnVnbGlzdCwgJnNob3dkZWJ1Z2xpc3QpOwor
fQotLS0gLi9nbnUvZGlzdC9nZGI2L2dkYi9uYnNkLXRocmVhZC5oLm9yaWcJMjAxMC0wNC0xOSAx
MTo0MzowNS4wMDAwMDAwMDAgLTA0MDAKKysrIC4vZ251L2Rpc3QvZ2RiNi9nZGIvbmJzZC10aHJl
YWQuaAkyMDEwLTA0LTE5IDExOjQzOjA1LjAwMDAwMDAwMCAtMDQwMApAQCAtMCwwICsxLDI1IEBA
CisvKiBUaHJlYWRzIHN1cHBvcnQgZm9yIE5ldEJTRCA1LjAuCisKKyAgIENvcHlyaWdodCAoQykg
MjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgQ29udHJpYnV0ZWQgYnkg
UGF1bCBLb25pbmcsIERlbGwsIGluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgor
CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKK2V4
dGVybiB2b2lkIGluaXRfbmJzZF90aHJlYWRfb3BzIChzdHJ1Y3QgdGFyZ2V0X29wcyAqdCk7CisK
LS0tIC4vZ251L2Rpc3QvZ2RiNi9nZGIvaTM4NmJzZC1uYXQuYy5vcmlnCTIwMDctMDItMjQgMDg6
MDU6MTguMDAwMDAwMDAwIC0wNTAwCisrKyAuL2dudS9kaXN0L2dkYjYvZ2RiL2kzODZic2QtbmF0
LmMJMjAxMC0wNC0xOSAxMjo0NTowMS4wMDAwMDAwMDAgLTA0MDAKQEAgLTkwLDcgKzkwLDcgQEAK
IAogLyogU3VwcGx5IHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzIGluIEdSRUdTLCB0byBS
RUdDQUNIRS4gICovCiAKLXN0YXRpYyB2b2lkCit2b2lkCiBpMzg2YnNkX3N1cHBseV9ncmVnc2V0
IChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBjb25zdCB2b2lkICpncmVncykKIHsKICAgY29u
c3QgY2hhciAqcmVncyA9IGdyZWdzOwpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICBHUkVHUy4gIElm
IFJFR05VTSBpcyAtMSwgY29sbGVjdCBhbmQgc3RvcmUgYWxsIGFwcHJvcHJpYXRlCiAgICByZWdp
c3RlcnMuICAqLwogCi1zdGF0aWMgdm9pZAordm9pZAogaTM4NmJzZF9jb2xsZWN0X2dyZWdzZXQg
KGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCiAJCQkgdm9pZCAqZ3JlZ3MsIGludCBy
ZWdudW0pCiB7Ci0tLSAuL2dudS9kaXN0L2dkYjYvZ2RiL2kzODZic2QtbmF0Lmgub3JpZwkyMDA2
LTA3LTAyIDE2OjE0OjE1LjAwMDAwMDAwMCAtMDQwMAorKysgLi9nbnUvZGlzdC9nZGI2L2dkYi9p
Mzg2YnNkLW5hdC5oCTIwMTAtMDQtMTkgMTE6NDM6MDUuMDAwMDAwMDAwIC0wNDAwCkBAIC0yNyw0
ICsyNywxMSBAQAogCiBleHRlcm4gc3RydWN0IHRhcmdldF9vcHMgKmkzODZic2RfdGFyZ2V0ICh2
b2lkKTsKIAorZXh0ZXJuIHZvaWQgaTM4NmJzZF9zdXBwbHlfZ3JlZ3NldCAoc3RydWN0IHJlZ2Nh
Y2hlICpyZWdjYWNoZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB2b2lkICpncmVncyk7CisKK2V4dGVybiB2b2lkIGkzODZic2RfY29sbGVjdF9ncmVnc2V0IChj
b25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKmdyZWdzLCBpbnQgcmVnbnVtKTsKKworCiAjZW5kaWYgLyogaTM4
NmJzZC1uYXQuaCAqLwotLS0gLi9nbnUvZGlzdC9nZGI2L2dkYi9pMzg2bmJzZC1uYXQuYy5vcmln
CTIwMDgtMDEtMjUgMDc6MzU6NDguMDAwMDAwMDAwIC0wNTAwCisrKyAuL2dudS9kaXN0L2dkYjYv
Z2RiL2kzODZuYnNkLW5hdC5jCTIwMTAtMDQtMTkgMTQ6MzU6MTYuMDAwMDAwMDAwIC0wNDAwCkBA
IC0yMCwyMiArMjAsMjkgQEAKICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KIAog
I2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJpbmZlcmlvci5oIgogI2luY2x1ZGUgImdkYmNv
cmUuaCIKICNpbmNsdWRlICJyZWdjYWNoZS5oIgogI2luY2x1ZGUgInRhcmdldC5oIgogCiAjaW5j
bHVkZSAiaTM4Ni10ZGVwLmgiCisjaW5jbHVkZSAiaTM4Ny10ZGVwLmgiCiAjaW5jbHVkZSAiaTM4
NmJzZC1uYXQuaCIKKyNpbmNsdWRlICJuYnNkLXRocmVhZC5oIgogCiAvKiBTdXBwb3J0IGZvciBk
ZWJ1Z2dpbmcga2VybmVsIHZpcnR1YWwgbWVtb3J5IGltYWdlcy4gICovCiAKICNpbmNsdWRlIDxz
eXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisjaW5jbHVkZSA8bWFjaGluZS9y
ZWcuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2ZyYW1lLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9wY2Iu
aD4KIAogI2luY2x1ZGUgIm5ic2QtbmF0LmgiCiAjaW5jbHVkZSAiYnNkLWt2bS5oIgogCitleHRl
cm4gaW50IGRlYnVnX25ic2RfdGhyZWFkOworCiBzdGF0aWMgaW50CiBpMzg2bmJzZF9zdXBwbHlf
cGNiIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBzdHJ1Y3QgcGNiICpwY2IpCiB7CkBAIC05
OSw2ICsxMDYsMTU5IEBACiB9CiAMCiAKKworLyogTWFjcm8gdG8gZGV0ZXJtaW5lIGlmIGEgcmVn
aXN0ZXIgaXMgZmV0Y2hlZCB3aXRoIFBUX0dFVFJFR1MuICAqLworI2RlZmluZSBHRVRSRUdTX1NV
UFBMSUVTKHJlZ251bSkgXAorICAoKDAgPD0gKHJlZ251bSkgJiYgKHJlZ251bSkgPD0gMTUpKQor
CisjaWZkZWYgSEFWRV9QVF9HRVRYTU1SRUdTCisvKiBTZXQgdG8gMSBpZiB0aGUga2VybmVsIHN1
cHBvcnRzIFBUX0dFVFhNTVJFR1MuICBJbml0aWFsaXplZCB0byAtMQorICAgc28gdGhhdCB3ZSB0
cnkgUFRfR0VUWE1NUkVHUyB0aGUgZmlyc3QgdGltZSBhcm91bmQuICAqLworc3RhdGljIGludCBo
YXZlX3B0cmFjZV94bW1yZWdzID0gLTE7CisjZW5kaWYKKyAMCisgCisvKiBGZXRjaCByZWdpc3Rl
ciBSRUdOVU0gZnJvbSB0aGUgaW5mZXJpb3IuICBJZiBSRUdOVU0gaXMgLTEsIGRvIHRoaXMKKyAg
IGZvciBhbGwgcmVnaXN0ZXJzIChpbmNsdWRpbmcgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVy
cykuICAqLworCitzdGF0aWMgdm9pZAoraTM4Nm5ic2RfZmV0Y2hfaW5mZXJpb3JfcmVnaXN0ZXJz
IChpbnQgcmVnbnVtKQoreworICBpZiAocmVnbnVtID09IC0xIHx8IEdFVFJFR1NfU1VQUExJRVMg
KHJlZ251bSkpCisgICAgeworICAgICAgc3RydWN0IHJlZyByZWdzOworCisgICAgICBpZiAocHRy
YWNlIChQVF9HRVRSRUdTLCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAorCQkgIChQVFJBQ0VfVFlQ
RV9BUkczKSAmcmVncywgVElER0VUIChpbmZlcmlvcl9wdGlkKSkgPT0gLTEpCisJcGVycm9yX3dp
dGhfbmFtZSAoXygiQ291bGRuJ3QgZ2V0IHJlZ2lzdGVycyIpKTsKKworICAgICAgaWYgKGRlYnVn
X25ic2RfdGhyZWFkKQorCXsKKwkgIGlmIChyZWdudW0gPT0gLTEpCisJICAgIGZwcmludGZfdW5m
aWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkiTkZJUjogcHRpZCAlZCwlbGQsIHJlZ251bSAlZFxu
IiwKKwkJCQlQSURHRVQgKGluZmVyaW9yX3B0aWQpLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpLAor
CQkJCXJlZ251bSk7CisJICBlbHNlCisJICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxv
ZywKKwkJCQkiTkZJUjogcHRpZCAlZCwlbGQsIHJlZ251bSAlZDogJXhcbiIsCisJCQkJUElER0VU
IChpbmZlcmlvcl9wdGlkKSwgVElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJCQlyZWdudW0sICgo
aW50ICopICZyZWdzKVtyZWdudW1dKTsKKwl9CisKKyAgICAgIGkzODZic2Rfc3VwcGx5X2dyZWdz
ZXQgKGN1cnJlbnRfcmVnY2FjaGUsICZyZWdzKTsKKyAgICAgIGlmIChyZWdudW0gIT0gLTEpCisJ
cmV0dXJuOworICAgIH0KKworICBpZiAocmVnbnVtID09IC0xIHx8IHJlZ251bSA+PSBJMzg2X1NU
MF9SRUdOVU0pCisgICAgeworICAgICAgc3RydWN0IGZwcmVnIGZwcmVnczsKKyNpZmRlZiBIQVZF
X1BUX0dFVFhNTVJFR1MKKyAgICAgIGNoYXIgeG1tcmVnc1s1MTJdOworCisgICAgICBpZiAoaGF2
ZV9wdHJhY2VfeG1tcmVncyAhPSAwCisJICAmJiBwdHJhY2UoUFRfR0VUWE1NUkVHUywgUElER0VU
IChpbmZlcmlvcl9wdGlkKSwKKwkJICAgIChQVFJBQ0VfVFlQRV9BUkczKSB4bW1yZWdzLCBUSURH
RVQgKGluZmVyaW9yX3B0aWQpKSA9PSAwKQorCXsKKwkgIGhhdmVfcHRyYWNlX3htbXJlZ3MgPSAx
OworCSAgaTM4N19zdXBwbHlfZnhzYXZlIChjdXJyZW50X3JlZ2NhY2hlLCAtMSwgeG1tcmVncyk7
CisJfQorICAgICAgZWxzZQorCXsKKyAgICAgICAgICBpZiAocHRyYWNlIChQVF9HRVRGUFJFR1Ms
IFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCisJCSAgICAgIChQVFJBQ0VfVFlQRV9BUkczKSAmZnBy
ZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9PSAtMSkKKwkgICAgcGVycm9yX3dpdGhfbmFt
ZSAoXygiQ291bGRuJ3QgZ2V0IGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKKworCSAgaTM4N19z
dXBwbHlfZnNhdmUgKGN1cnJlbnRfcmVnY2FjaGUsIC0xLCAmZnByZWdzKTsKKwl9CisjZWxzZQor
ICAgICAgaWYgKHB0cmFjZSAoUFRfR0VURlBSRUdTLCBQSURHRVQgKGluZmVyaW9yX3B0aWQpLAor
CQkgIChQVFJBQ0VfVFlQRV9BUkczKSAmZnByZWdzLCBUSURHRVQgKGluZmVyaW9yX3B0aWQpKSA9
PSAtMSkKKwlwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCBnZXQgZmxvYXRpbmcgcG9pbnQg
c3RhdHVzIikpOworCisgICAgICBpMzg3X3N1cHBseV9mc2F2ZSAoY3VycmVudF9yZWdjYWNoZSwg
LTEsICZmcHJlZ3MpOworI2VuZGlmCisgICAgfQorfQorCisvKiBTdG9yZSByZWdpc3RlciBSRUdO
VU0gYmFjayBpbnRvIHRoZSBpbmZlcmlvci4gIElmIFJFR05VTSBpcyAtMSwgZG8KKyAgIHRoaXMg
Zm9yIGFsbCByZWdpc3RlcnMgKGluY2x1ZGluZyB0aGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJz
KS4gICovCisKK3N0YXRpYyB2b2lkCitpMzg2bmJzZF9zdG9yZV9pbmZlcmlvcl9yZWdpc3RlcnMg
KGludCByZWdudW0pCit7CisgIGlmIChyZWdudW0gPT0gLTEgfHwgR0VUUkVHU19TVVBQTElFUyAo
cmVnbnVtKSkKKyAgICB7CisgICAgICBzdHJ1Y3QgcmVnIHJlZ3M7CisKKyAgICAgIGlmIChwdHJh
Y2UgKFBUX0dFVFJFR1MsIFBJREdFVCAoaW5mZXJpb3JfcHRpZCksCisgICAgICAgICAgICAgICAg
ICAoUFRSQUNFX1RZUEVfQVJHMykgJnJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0x
KQorICAgICAgICBwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCBnZXQgcmVnaXN0ZXJzIikp
OworCisgICAgICBpMzg2YnNkX2NvbGxlY3RfZ3JlZ3NldCAoY3VycmVudF9yZWdjYWNoZSwgJnJl
Z3MsIHJlZ251bSk7CisKKyAgICAgIGlmIChkZWJ1Z19uYnNkX3RocmVhZCkKKwl7CisJICBpZiAo
cmVnbnVtID09IC0xKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJ
Ik5TSVI6IHB0aWQgJWQsJWxkLCByZWdudW0gJWRcbiIsCisJCQkJUElER0VUIChpbmZlcmlvcl9w
dGlkKSwgVElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJCQlyZWdudW0pOworCSAgZWxzZQorCSAg
ICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJIk5TSVI6IHB0aWQgJWQsJWxk
LCByZWdudW0gJWQ6ICV4XG4iLAorCQkJCVBJREdFVCAoaW5mZXJpb3JfcHRpZCksIFRJREdFVCAo
aW5mZXJpb3JfcHRpZCksCisJCQkJcmVnbnVtLCAoKGludCAqKSAmcmVncylbcmVnbnVtXSk7CisJ
fQorICAgICAgCisgICAgICBpZiAocHRyYWNlIChQVF9TRVRSRUdTLCBQSURHRVQgKGluZmVyaW9y
X3B0aWQpLAorCSAgICAgICAgICAoUFRSQUNFX1RZUEVfQVJHMykgJnJlZ3MsIFRJREdFVCAoaW5m
ZXJpb3JfcHRpZCkpID09IC0xKQorICAgICAgICBwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4n
dCB3cml0ZSByZWdpc3RlcnMiKSk7CisKKyAgICAgIGlmIChyZWdudW0gIT0gLTEpCisJcmV0dXJu
OworICAgIH0KKworICBpZiAocmVnbnVtID09IC0xIHx8IHJlZ251bSA+PSBJMzg2X1NUMF9SRUdO
VU0pCisgICAgeworICAgICAgc3RydWN0IGZwcmVnIGZwcmVnczsKKyNpZmRlZiBIQVZFX1BUX0dF
VFhNTVJFR1MKKyAgICAgIGNoYXIgeG1tcmVnc1s1MTJdOworCisgICAgICBpZiAoaGF2ZV9wdHJh
Y2VfeG1tcmVncyAhPSAwCisJICAmJiBwdHJhY2UoUFRfR0VUWE1NUkVHUywgUElER0VUIChpbmZl
cmlvcl9wdGlkKSwKKwkJICAgIChQVFJBQ0VfVFlQRV9BUkczKSB4bW1yZWdzLCBUSURHRVQgKGlu
ZmVyaW9yX3B0aWQpKSA9PSAwKQorCXsKKwkgIGhhdmVfcHRyYWNlX3htbXJlZ3MgPSAxOworCisJ
ICBpMzg3X2NvbGxlY3RfZnhzYXZlIChjdXJyZW50X3JlZ2NhY2hlLCByZWdudW0sIHhtbXJlZ3Mp
OworCisJICBpZiAocHRyYWNlIChQVF9TRVRYTU1SRUdTLCBQSURHRVQgKGluZmVyaW9yX3B0aWQp
LAorCQkgICAgICAoUFRSQUNFX1RZUEVfQVJHMykgeG1tcmVncywgVElER0VUIChpbmZlcmlvcl9w
dGlkKSkgPT0gLTEpCisgICAgICAgICAgICBwZXJyb3Jfd2l0aF9uYW1lIChfKCJDb3VsZG4ndCB3
cml0ZSBYTU0gcmVnaXN0ZXJzIikpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBoYXZlX3B0cmFj
ZV94bW1yZWdzID0gMDsKKyNlbmRpZgorICAgICAgICAgIGlmIChwdHJhY2UgKFBUX0dFVEZQUkVH
UywgUElER0VUIChpbmZlcmlvcl9wdGlkKSwKKwkJICAgICAgKFBUUkFDRV9UWVBFX0FSRzMpICZm
cHJlZ3MsIFRJREdFVCAoaW5mZXJpb3JfcHRpZCkpID09IC0xKQorCSAgICBwZXJyb3Jfd2l0aF9u
YW1lIChfKCJDb3VsZG4ndCBnZXQgZmxvYXRpbmcgcG9pbnQgc3RhdHVzIikpOworCisgICAgICAg
ICAgaTM4N19jb2xsZWN0X2ZzYXZlIChjdXJyZW50X3JlZ2NhY2hlLCByZWdudW0sICZmcHJlZ3Mp
OworCisgICAgICAgICAgaWYgKHB0cmFjZSAoUFRfU0VURlBSRUdTLCBQSURHRVQgKGluZmVyaW9y
X3B0aWQpLAorCQkgICAgICAoUFRSQUNFX1RZUEVfQVJHMykgJmZwcmVncywgVElER0VUIChpbmZl
cmlvcl9wdGlkKSkgPT0gLTEpCisJICAgIHBlcnJvcl93aXRoX25hbWUgKF8oIkNvdWxkbid0IHdy
aXRlIGZsb2F0aW5nIHBvaW50IHN0YXR1cyIpKTsKKyNpZmRlZiBIQVZFX1BUX0dFVFhNTVJFR1MK
KyAgICAgICAgfQorI2VuZGlmCisgICAgfQorfQorCisMCisKIC8qIFByb3ZpZGUgYSBwcm90b3R5
cGUgdG8gc2lsZW5jZSAtV21pc3NpbmctcHJvdG90eXBlcy4gICovCiB2b2lkIF9pbml0aWFsaXpl
X2kzODZuYnNkX25hdCAodm9pZCk7CiAKQEAgLTEwOSw3ICsyNjksMTAgQEAKIAogICAvKiBBZGQg
c29tZSBleHRyYSBmZWF0dXJlcyB0byB0aGUgY29tbW9uICpCU0QvaTM4NiB0YXJnZXQuICAqLwog
ICB0ID0gaTM4NmJzZF90YXJnZXQgKCk7CisgIGluaXRfbmJzZF90aHJlYWRfb3BzICh0KTsKICAg
dC0+dG9fcGlkX3RvX2V4ZWNfZmlsZSA9IG5ic2RfcGlkX3RvX2V4ZWNfZmlsZTsKKyAgdC0+dG9f
ZmV0Y2hfcmVnaXN0ZXJzID0gaTM4Nm5ic2RfZmV0Y2hfaW5mZXJpb3JfcmVnaXN0ZXJzOworICB0
LT50b19zdG9yZV9yZWdpc3RlcnMgPSBpMzg2bmJzZF9zdG9yZV9pbmZlcmlvcl9yZWdpc3RlcnM7
ICAKICAgYWRkX3RhcmdldCAodCk7CiAKICAgLyogU3VwcG9ydCBkZWJ1Z2dpbmcga2VybmVsIHZp
cnR1YWwgbWVtb3J5IGltYWdlcy4gICovCi0tLSAuL2dudS91c3IuYmluL2dkYjYvYXJjaC9pMzg2
L2RlZnMubWsub3JpZwkyMDA2LTExLTI1IDExOjM4OjUxLjAwMDAwMDAwMCAtMDUwMAorKysgLi9n
bnUvdXNyLmJpbi9nZGI2L2FyY2gvaTM4Ni9kZWZzLm1rCTIwMTAtMDQtMTkgMTM6NDU6MTEuMDAw
MDAwMDAwIC0wNDAwCkBAIC0zLDUgKzMsNSBAQAogIyBHZW5lcmF0ZWQgZnJvbTogTmV0QlNEOiBt
a25hdGl2ZS5jb21tb24sdiAxLjggMjAwNi8wNS8yNiAxOToxNzoyMSBtcmcgRXhwIAogIwogR19J
TlRFUk5BTF9DRkxBR1M9ICAgICAtSS4gLUkke0dOVUhPU1RESVNUfS9nZGIgLUkke0dOVUhPU1RE
SVNUfS9nZGIvY29uZmlnIC1ETE9DQUxFRElSPSJcIi91c3Ivc2hhcmUvbG9jYWxlXCIiIC1ESEFW
RV9DT05GSUdfSCAtSSR7R05VSE9TVERJU1R9L2dkYi8uLi9pbmNsdWRlL29wY29kZSAtSSR7R05V
SE9TVERJU1R9L2dkYi8uLi9yZWFkbGluZS8uLiAgLUkuLi9iZmQgLUkke0dOVUhPU1RESVNUfS9n
ZGIvLi4vYmZkIC1JJHtHTlVIT1NURElTVH0vZ2RiLy4uL2luY2x1ZGUgIC1JLi4vaW50bCAtSSR7
R05VSE9TVERJU1R9L2dkYi8uLi9pbnRsICAtRE1JX09VVD0xIC1EVFVJPTEgLVdpbXBsaWNpdCAt
V3JldHVybi10eXBlIC1XY29tbWVudCAtV3RyaWdyYXBocyAtV2Zvcm1hdCAtV3BhcmVudGhlc2Vz
IC1XcG9pbnRlci1hcml0aCAtV2Zvcm1hdC1ub25saXRlcmFsIC1XdW51c2VkLWxhYmVsIC1XdW51
c2VkLWZ1bmN0aW9uIC1Xbm8tcG9pbnRlci1zaWduIAotR19MSUJHREJfT0JTPWkzODYtdGRlcC5v
IGkzODctdGRlcC5vIGkzODZic2QtdGRlcC5vIGkzODZuYnNkLXRkZXAubyBuYnNkLXRkZXAubyAg
Y29yZWxvdy5vIHNvbGliLm8gc29saWItc3ZyNC5vIHNlci1iYXNlLm8gc2VyLXVuaXgubyBzZXIt
cGlwZS5vIHNlci10Y3AubyBmb3JrLWNoaWxkLm8gaW5mLXB0cmFjZS5vICBuYnNkLW5hdC5vIGkz
ODZic2QtbmF0Lm8gaTM4Nm5ic2QtbmF0Lm8gYnNkLWt2bS5vICByZW1vdGUubyBkY2FjaGUubyBy
ZW1vdGUtdXRpbHMubyB0cmFjZXBvaW50Lm8gYXgtZ2VuZXJhbC5vIGF4LWdkYi5vIHJlbW90ZS1m
aWxlaW8ubyAgY2xpLWR1bXAubyAgY2xpLWRlY29kZS5vIGNsaS1zY3JpcHQubyBjbGktY21kcy5v
IGNsaS1zZXRzaG93Lm8gY2xpLXV0aWxzLm8gIGNsaS1sb2dnaW5nLm8gIGNsaS1pbnRlcnAubyBt
aS1vdXQubyBtaS1jb25zb2xlLm8gIG1pLWNtZHMubyBtaS1jbWQtZW52Lm8gbWktY21kLXZhci5v
IG1pLWNtZC1icmVhay5vIG1pLWNtZC1zdGFjay5vICBtaS1jbWQtZmlsZS5vIG1pLWNtZC1kaXNh
cy5vIG1pLXN5bWJvbC1jbWRzLm8gIG1pLWludGVycC5vICBtaS1tYWluLm8gbWktcGFyc2UubyBt
aS1nZXRvcHQubyBtaS1jb21tb24ubyBwb3NpeC1oZGVwLm8gdHVpLWNvbW1hbmQubyAgdHVpLWRh
dGEubyAgdHVpLWRpc2FzbS5vICB0dWktZmlsZS5vIHR1aS5vICB0dWktaG9va3MubyAgdHVpLWlu
dGVycC5vICB0dWktaW8ubyAgdHVpLWxheW91dC5vICB0dWktb3V0Lm8gIHR1aS1yZWdzLm8gIHR1
aS1zb3VyY2UubyAgdHVpLXN0YWNrLm8gIHR1aS13aW4ubyAgdHVpLXdpbmRhdGEubyAgdHVpLXdp
bmdlbmVyYWwubyAgdHVpLXdpbnNvdXJjZS5vIGMtZXhwLm8gIGNwLW5hbWUtcGFyc2VyLm8gIG9i
amMtZXhwLm8gIGFkYS1leHAubyAganYtZXhwLm8gIGYtZXhwLm8gbTItZXhwLm8gcC1leHAubyAg
dmVyc2lvbi5vICBhbm5vdGF0ZS5vICBhdXh2Lm8gIGJmZC10YXJnZXQubyAgYmxvY2tmcmFtZS5v
IGJyZWFrcG9pbnQubyBmaW5kdmFyLm8gcmVnY2FjaGUubyAgY2hhcnNldC5vIGRpc2FzbS5vIGR1
bW15LWZyYW1lLm8gIHNvdXJjZS5vIHZhbHVlLm8gZXZhbC5vIHZhbG9wcy5vIHZhbGFyaXRoLm8g
dmFscHJpbnQubyBwcmludGNtZC5vICBibG9jay5vIHN5bXRhYi5vIHN5bWZpbGUubyBzeW1taXNj
Lm8gbGluZXNwZWMubyBkaWN0aW9uYXJ5Lm8gIGluZmNhbGwubyAgaW5mY21kLm8gaW5mcnVuLm8g
IGV4cHByaW50Lm8gZW52aXJvbi5vIHN0YWNrLm8gdGhyZWFkLm8gIGV4Y2VwdGlvbnMubyAgaW5m
LWNoaWxkLm8gIGludGVycHMubyAgbWFpbi5vICBtYWNyb3RhYi5vIG1hY3JvY21kLm8gbWFjcm9l
eHAubyBtYWNyb3Njb3BlLm8gIGV2ZW50LWxvb3AubyBldmVudC10b3AubyBpbmYtbG9vcC5vIGNv
bXBsZXRlci5vICBnZGJhcmNoLm8gYXJjaC11dGlscy5vIGdkYnR5cGVzLm8gb3NhYmkubyBjb3B5
aW5nLm8gIG1lbWF0dHIubyBtZW0tYnJlYWsubyB0YXJnZXQubyBwYXJzZS5vIGxhbmd1YWdlLm8g
YnVpbGRzeW0ubyAgc3RkLXJlZ3MubyAgc2lnbmFscy5vICBrb2QubyBrb2QtY2lzY28ubyAgZ2Ri
LWV2ZW50cy5vICBleGVjLm8gYmNhY2hlLm8gb2JqZmlsZXMubyBvYnNlcnZlci5vIG1pbnN5bXMu
byBtYWludC5vIGRlbWFuZ2xlLm8gIGRieHJlYWQubyBjb2ZmcmVhZC5vIGNvZmYtcGUtcmVhZC5v
IGVsZnJlYWQubyAgZHdhcmZyZWFkLm8gZHdhcmYycmVhZC5vIG1pcHNyZWFkLm8gc3RhYnNyZWFk
Lm8gY29yZWZpbGUubyAgZHdhcmYyZXhwci5vIGR3YXJmMmxvYy5vIGR3YXJmMi1mcmFtZS5vICBh
ZGEtbGFuZy5vIGMtbGFuZy5vIGYtbGFuZy5vIG9iamMtbGFuZy5vICB1aS1vdXQubyBjbGktb3V0
Lm8gIHZhcm9iai5vIHdyYXBwZXIubyAganYtbGFuZy5vIGp2LXZhbHByaW50Lm8ganYtdHlwZXBy
aW50Lm8gIG0yLWxhbmcubyBwLWxhbmcubyBwLXR5cGVwcmludC5vIHAtdmFscHJpbnQubyAgc2Nt
LWV4cC5vIHNjbS1sYW5nLm8gc2NtLXZhbHByaW50Lm8gIHNlbnRpbmVsLWZyYW1lLm8gIGNvbXBs
YWludHMubyB0eXBlcHJpbnQubyAgYWRhLXR5cGVwcmludC5vIGMtdHlwZXByaW50Lm8gZi10eXBl
cHJpbnQubyBtMi10eXBlcHJpbnQubyAgYWRhLXZhbHByaW50Lm8gYy12YWxwcmludC5vIGNwLXZh
bHByaW50Lm8gZi12YWxwcmludC5vIG0yLXZhbHByaW50Lm8gIG5sbXJlYWQubyBzZXJpYWwubyBt
ZGVidWdyZWFkLm8gdG9wLm8gdXRpbHMubyAgdWktZmlsZS5vICB1c2VyLXJlZ3MubyAgZnJhbWUu
byBmcmFtZS11bndpbmQubyBkb3VibGVzdC5vICBmcmFtZS1iYXNlLm8gIGdudS12Mi1hYmkubyBn
bnUtdjMtYWJpLm8gaHBhY2MtYWJpLm8gY3AtYWJpLm8gY3Atc3VwcG9ydC5vICBjcC1uYW1lc3Bh
Y2UubyAgcmVnZ3JvdXBzLm8gcmVnc2V0Lm8gIHRyYWQtZnJhbWUubyAgdHJhbXAtZnJhbWUubyAg
c29saWIubyBzb2xpYi1udWxsLm8gIHByb2xvZ3VlLXZhbHVlLm8gaW5mbG93Lm8gICAgaW5pdC5v
CitHX0xJQkdEQl9PQlM9aTM4Ni10ZGVwLm8gaTM4Ny10ZGVwLm8gaTM4NmJzZC10ZGVwLm8gaTM4
Nm5ic2QtdGRlcC5vIG5ic2QtdGRlcC5vICBjb3JlbG93Lm8gc29saWIubyBzb2xpYi1zdnI0Lm8g
c2VyLWJhc2UubyBzZXItdW5peC5vIHNlci1waXBlLm8gc2VyLXRjcC5vIGZvcmstY2hpbGQubyBp
bmYtcHRyYWNlLm8gIG5ic2QtbmF0Lm8gbmJzZC10aHJlYWQubyBpMzg2YnNkLW5hdC5vIGkzODZu
YnNkLW5hdC5vIGJzZC1rdm0ubyAgcmVtb3RlLm8gZGNhY2hlLm8gcmVtb3RlLXV0aWxzLm8gdHJh
Y2Vwb2ludC5vIGF4LWdlbmVyYWwubyBheC1nZGIubyByZW1vdGUtZmlsZWlvLm8gIGNsaS1kdW1w
Lm8gIGNsaS1kZWNvZGUubyBjbGktc2NyaXB0Lm8gY2xpLWNtZHMubyBjbGktc2V0c2hvdy5vIGNs
aS11dGlscy5vICBjbGktbG9nZ2luZy5vICBjbGktaW50ZXJwLm8gbWktb3V0Lm8gbWktY29uc29s
ZS5vICBtaS1jbWRzLm8gbWktY21kLWVudi5vIG1pLWNtZC12YXIubyBtaS1jbWQtYnJlYWsubyBt
aS1jbWQtc3RhY2subyAgbWktY21kLWZpbGUubyBtaS1jbWQtZGlzYXMubyBtaS1zeW1ib2wtY21k
cy5vICBtaS1pbnRlcnAubyAgbWktbWFpbi5vIG1pLXBhcnNlLm8gbWktZ2V0b3B0Lm8gbWktY29t
bW9uLm8gcG9zaXgtaGRlcC5vIHR1aS1jb21tYW5kLm8gIHR1aS1kYXRhLm8gIHR1aS1kaXNhc20u
byAgdHVpLWZpbGUubyB0dWkubyAgdHVpLWhvb2tzLm8gIHR1aS1pbnRlcnAubyAgdHVpLWlvLm8g
IHR1aS1sYXlvdXQubyAgdHVpLW91dC5vICB0dWktcmVncy5vICB0dWktc291cmNlLm8gIHR1aS1z
dGFjay5vICB0dWktd2luLm8gIHR1aS13aW5kYXRhLm8gIHR1aS13aW5nZW5lcmFsLm8gIHR1aS13
aW5zb3VyY2UubyBjLWV4cC5vICBjcC1uYW1lLXBhcnNlci5vICBvYmpjLWV4cC5vICBhZGEtZXhw
Lm8gIGp2LWV4cC5vICBmLWV4cC5vIG0yLWV4cC5vIHAtZXhwLm8gIHZlcnNpb24ubyAgYW5ub3Rh
dGUubyAgYXV4di5vICBiZmQtdGFyZ2V0Lm8gIGJsb2NrZnJhbWUubyBicmVha3BvaW50Lm8gZmlu
ZHZhci5vIHJlZ2NhY2hlLm8gIGNoYXJzZXQubyBkaXNhc20ubyBkdW1teS1mcmFtZS5vICBzb3Vy
Y2UubyB2YWx1ZS5vIGV2YWwubyB2YWxvcHMubyB2YWxhcml0aC5vIHZhbHByaW50Lm8gcHJpbnRj
bWQubyAgYmxvY2subyBzeW10YWIubyBzeW1maWxlLm8gc3ltbWlzYy5vIGxpbmVzcGVjLm8gZGlj
dGlvbmFyeS5vICBpbmZjYWxsLm8gIGluZmNtZC5vIGluZnJ1bi5vICBleHBwcmludC5vIGVudmly
b24ubyBzdGFjay5vIHRocmVhZC5vICBleGNlcHRpb25zLm8gIGluZi1jaGlsZC5vICBpbnRlcnBz
Lm8gIG1haW4ubyAgbWFjcm90YWIubyBtYWNyb2NtZC5vIG1hY3JvZXhwLm8gbWFjcm9zY29wZS5v
ICBldmVudC1sb29wLm8gZXZlbnQtdG9wLm8gaW5mLWxvb3AubyBjb21wbGV0ZXIubyAgZ2RiYXJj
aC5vIGFyY2gtdXRpbHMubyBnZGJ0eXBlcy5vIG9zYWJpLm8gY29weWluZy5vICBtZW1hdHRyLm8g
bWVtLWJyZWFrLm8gdGFyZ2V0Lm8gcGFyc2UubyBsYW5ndWFnZS5vIGJ1aWxkc3ltLm8gIHN0ZC1y
ZWdzLm8gIHNpZ25hbHMubyAga29kLm8ga29kLWNpc2NvLm8gIGdkYi1ldmVudHMubyAgZXhlYy5v
IGJjYWNoZS5vIG9iamZpbGVzLm8gb2JzZXJ2ZXIubyBtaW5zeW1zLm8gbWFpbnQubyBkZW1hbmds
ZS5vICBkYnhyZWFkLm8gY29mZnJlYWQubyBjb2ZmLXBlLXJlYWQubyBlbGZyZWFkLm8gIGR3YXJm
cmVhZC5vIGR3YXJmMnJlYWQubyBtaXBzcmVhZC5vIHN0YWJzcmVhZC5vIGNvcmVmaWxlLm8gIGR3
YXJmMmV4cHIubyBkd2FyZjJsb2MubyBkd2FyZjItZnJhbWUubyAgYWRhLWxhbmcubyBjLWxhbmcu
byBmLWxhbmcubyBvYmpjLWxhbmcubyAgdWktb3V0Lm8gY2xpLW91dC5vICB2YXJvYmoubyB3cmFw
cGVyLm8gIGp2LWxhbmcubyBqdi12YWxwcmludC5vIGp2LXR5cGVwcmludC5vICBtMi1sYW5nLm8g
cC1sYW5nLm8gcC10eXBlcHJpbnQubyBwLXZhbHByaW50Lm8gIHNjbS1leHAubyBzY20tbGFuZy5v
IHNjbS12YWxwcmludC5vICBzZW50aW5lbC1mcmFtZS5vICBjb21wbGFpbnRzLm8gdHlwZXByaW50
Lm8gIGFkYS10eXBlcHJpbnQubyBjLXR5cGVwcmludC5vIGYtdHlwZXByaW50Lm8gbTItdHlwZXBy
aW50Lm8gIGFkYS12YWxwcmludC5vIGMtdmFscHJpbnQubyBjcC12YWxwcmludC5vIGYtdmFscHJp
bnQubyBtMi12YWxwcmludC5vICBubG1yZWFkLm8gc2VyaWFsLm8gbWRlYnVncmVhZC5vIHRvcC5v
IHV0aWxzLm8gIHVpLWZpbGUubyAgdXNlci1yZWdzLm8gIGZyYW1lLm8gZnJhbWUtdW53aW5kLm8g
ZG91Ymxlc3QubyAgZnJhbWUtYmFzZS5vICBnbnUtdjItYWJpLm8gZ251LXYzLWFiaS5vIGhwYWNj
LWFiaS5vIGNwLWFiaS5vIGNwLXN1cHBvcnQubyAgY3AtbmFtZXNwYWNlLm8gIHJlZ2dyb3Vwcy5v
IHJlZ3NldC5vICB0cmFkLWZyYW1lLm8gIHRyYW1wLWZyYW1lLm8gIHNvbGliLm8gc29saWItbnVs
bC5vICBwcm9sb2d1ZS12YWx1ZS5vIGluZmxvdy5vICAgIGluaXQubwogR19TSU1fT0JTPQo=
------_=_NextPart_001_01CAE22F.094CA314--
Responsible-Changed-From-To: bin-bug-people->skrll
Responsible-Changed-By: skrll@NetBSD.org
Responsible-Changed-When: Thu, 22 Apr 2010 19:56:02 +0000
Responsible-Changed-Why:
I'll look to commit Paul's work
From: Antti Kantee <pooka@cs.hut.fi>
To: Paul Koning <Paul_Koning@Dell.com>
Cc: gnats-bugs@NetBSD.org, tech-kern@NetBSD.org
Subject: Re: bin/30756: gdb not usable for live debugging of threaded programs
Date: Fri, 23 Apr 2010 22:04:35 +0300
On Thu Apr 22 2010 at 11:18:14 -0400, Paul Koning wrote:
> Antti pointed out a problem in the patch I originally submitted which
> causes gdb to go into a loop if the child process exits. The attached
> updated patch corrects that problem.
Yup, your new patch seems to fix that. Thanks again.
Just one cosmetic issue now. After finishing, gdb always says:
Couldn't get registers: Operation not permitted.
From: Nick Hudson <nick.hudson@gmx.co.uk>
To: gnats-bugs@netbsd.org,
pkoning@netbsd.org
Cc: gnats-admin@netbsd.org,
netbsd-bugs@netbsd.org,
Thomas Klausner <wiz@netbsd.org>
Subject: Re: bin/30756: gdb not usable for live debugging of threaded programs
Date: Fri, 4 Jun 2010 11:49:20 +0100
--Boundary-00=_woNCMfd6ODsW23f
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
On Thursday 22 April 2010 16:20:04 Paul Koning wrote:
> Antti pointed out a problem in the patch I originally submitted which
> causes gdb to go into a loop if the child process exits. The attached
> updated patch corrects that problem.
This, unfortunately, still has cosmetic issues. See the attached log and the
"Couldn't get registers: Operation not permitted." at the end of the session
Nick
--Boundary-00=_woNCMfd6ODsW23f
Content-Type: text/x-log;
charset="iso-8859-1";
name="gdb-attach.log"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="gdb-attach.log"
(gdb) set debug nbsd-thread 1
(gdb) attach 1049
Attaching to process 1049
NTW2: waiting for ptid -1,0, opt 0
NTW2: waitpid errno is 0, pid 1049, status 117f
NTUP: lwpinfo on 0 returns lwp 1, pl_event 0
NTUP: adding first thread ptid 1049,1
NTUP: lwpinfo on 1 returns lwp 0, pl_event 0
NTUP: signalled thread lwpid is 0
NTW2: waiting for ptid 1049,0, opt 1
NTW2: waitpid errno is 0, pid 0, status 0
NTW: no signalled thread
NTW: returning ptid 1049,1
NFIR: ptid 1049,1, regnum 8: 804865a
Reading symbols from /home/nick/gdb/obj/gdb/testsuite/gdb.base/attach...done.
NFIR: ptid 1049,1, regnum 8: 804865a
Reading symbols from /usr/lib/libm.so.0...done.
Loaded symbols for /usr/lib/libm.so.0
Reading symbols from /usr/lib/libc.so.12...done.
Loaded symbols for /usr/lib/libc.so.12
Reading symbols from /usr/libexec/ld.elf_so...done.
Loaded symbols for /usr/libexec/ld.elf_so
[Switching to Thread 1]
main () at ../../../src/gdb/testsuite/gdb.base/attach.c:17
17 local_i++;
(gdb) print should_exit
$1 = 0
(gdb) detach
Detaching from program: /home/nick/gdb/obj/gdb/testsuite/gdb.base/attach, process 1049
(gdb) attach 1049
Attaching to program: /home/nick/gdb/obj/gdb/testsuite/gdb.base/attach, process 1049
NTW2: waiting for ptid -1,0, opt 0
NTW2: waitpid errno is 0, pid 1049, status 117f
NTUP: lwpinfo on 0 returns lwp 1, pl_event 0
NTUP: lwpinfo on 1 returns lwp 0, pl_event 0
NTUP: signalled thread lwpid is 0
NTW2: waiting for ptid 1049,0, opt 1
NTW2: waitpid errno is 0, pid 0, status 117f
NTW: no signalled thread
NTW: returning ptid 1049,0
NFIR: ptid 1049,0, regnum 8: 804865d
Loaded symbols for /usr/lib/libm.so.0
Loaded symbols for /usr/lib/libc.so.12
Loaded symbols for /usr/libexec/ld.elf_so
main () at ../../../src/gdb/testsuite/gdb.base/attach.c:15
15 while (! should_exit)
(gdb) set should_exit=1
(gdb) tbreak 19
Breakpoint 1 at 0x8048666: file ../../../src/gdb/testsuite/gdb.base/attach.c, line 19.
(gdb) c
Continuing.
NTR: resuming ptid 1049,0, all threads, signal 0
NTW2: waiting for ptid -1,0, opt 0
NTW2: waitpid errno is 0, pid 1049, status 57f
NTUP: lwpinfo on 0 returns lwp 1, pl_event 1
NTUP: lwpinfo on 1 returns lwp 0, pl_event 0
NTUP: signalled thread lwpid is 1
NTW2: waiting for ptid 1049,0, opt 1
NTW2: waitpid errno is 0, pid 0, status 57f
NTW: Picking ptid 1049,1 out of 1
NTW: returning ptid 1049,1
NFIR: ptid 1049,1, regnum 8: 8048667
NSIR: ptid 1049,1, regnum 8: 8048666
[Switching to Thread 1]
main () at ../../../src/gdb/testsuite/gdb.base/attach.c:19
19 return 0;
(gdb) c
Continuing.
NTR: resuming ptid 1049,1, all threads, signal 0
NTW2: waiting for ptid -1,0, opt 0
NTW2: waitpid errno is 0, pid 1049, status 0
NTUP: signalled thread lwpid is 0
NTW2: waiting for ptid 1049,0, opt 1
NTW2: waitpid errno is 10, pid -1, status 0
NTW: no signalled thread
NTW: returning ptid 1049,1
Program exited normally.
Couldn't get registers: Operation not permitted.
(gdb)
--Boundary-00=_woNCMfd6ODsW23f--
From: "Paul Koning" <Paul_Koning@Dell.com>
To: "Nick Hudson" <nick.hudson@gmx.co.uk>,
<gnats-bugs@netbsd.org>,
<pkoning@netbsd.org>
Cc: <gnats-admin@netbsd.org>,
<netbsd-bugs@netbsd.org>,
"Thomas Klausner" <wiz@netbsd.org>
Subject: RE: bin/30756: gdb not usable for live debugging of threaded programs
Date: Fri, 4 Jun 2010 06:51:50 -0400
Sorry for the delay, I'll take a look shortly.
paul
> -----Original Message-----
> From: Nick Hudson [mailto:nick.hudson@gmx.co.uk]
> Sent: Friday, June 04, 2010 6:49 AM
> To: gnats-bugs@netbsd.org; pkoning@netbsd.org
> Cc: gnats-admin@netbsd.org; netbsd-bugs@netbsd.org; Thomas Klausner
> Subject: Re: bin/30756: gdb not usable for live debugging of threaded
> programs
>=20
> On Thursday 22 April 2010 16:20:04 Paul Koning wrote:
> > Antti pointed out a problem in the patch I originally submitted
> which
> > causes gdb to go into a loop if the child process exits. The
> attached
> > updated patch corrects that problem.
>=20
> This, unfortunately, still has cosmetic issues. See the attached log
> and the
> "Couldn't get registers: Operation not permitted." at the end of the
> session
>=20
> Nick
State-Changed-From-To: open->feedback
State-Changed-By: skrll@NetBSD.org
State-Changed-When: Thu, 20 Sep 2012 11:46:19 +0000
State-Changed-Why:
Is this still a problem?
From: Thomas Klausner <wiz@NetBSD.org>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: bin/30756 (gdb not usable for live debugging of threaded
programs)
Date: Thu, 20 Sep 2012 13:58:26 +0200
I tried a simple example, firefox ;)
It was already started with two open tabs.
# gdb /usr/pkg/lib/xulrunner/xulrunner 27334
...
Reading symbols from /usr/libexec/ld.elf_so...done.
Loaded symbols for /usr/libexec/ld.elf_so
/archive/cvs/src/external/gpl3/gdb/dist/gdb/thread.c:81: internal-error: inferior_thread: Assertion `tp' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) y
/archive/cvs/src/external/gpl3/gdb/dist/gdb/thread.c:81: internal-error: inferior_thread: Assertion `tp' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Create a core file of GDB? (y or n) y
sorry, pid 27334 was killed: orphaned traced process
zsh: abort (core dumped) gdb /usr/pkg/lib/xulrunner/xulrunner 27334
So, probably a different problem, but Subject is still correct :(
Thomas
From: Thomas Klausner <wiz@NetBSD.org>
To: NetBSD bugtracking <gnats-bugs@NetBSD.org>
Cc:
Subject: Re: bin/30756 (gdb not usable for live debugging of threaded
programs)
Date: Thu, 20 Sep 2012 14:02:55 +0200
Oh, here's the backtrace:
# gdb gdb gdb.core
...
[New process 1]
Core was generated by `gdb'.
Program terminated with signal 6, Aborted.
#0 0x00007f7ff590657a in _lwp_kill () from /usr/lib/libc.so.12
(gdb) bt
#0 0x00007f7ff590657a in _lwp_kill () from /usr/lib/libc.so.12
#1 0x00007f7ff59061e2 in abort () at /archive/cvs/src/lib/libc/stdlib/abort.c:74
#2 0x00000000004995db in dump_core () at /archive/cvs/src/external/gpl3/gdb/dist/gdb/utils.c:1053
#3 0x000000000049a3d2 in internal_vproblem (problem=0x9dc980, file=<optimized out>, line=<optimized out>, fmt=<optimized out>, ap=<optimized out>)
at /archive/cvs/src/external/gpl3/gdb/dist/gdb/utils.c:1221
#4 0x000000000049a5de in internal_verror (file=<optimized out>, line=<optimized out>, fmt=<optimized out>, ap=<optimized out>)
at /archive/cvs/src/external/gpl3/gdb/dist/gdb/utils.c:1236
#5 0x000000000049a669 in internal_error (file=0x1 <Address 0x1 out of bounds>, line=6, string=0x0) at /archive/cvs/src/external/gpl3/gdb/dist/gdb/utils.c:1246
#6 0x0000000000407edf in inferior_thread () at /archive/cvs/src/external/gpl3/gdb/dist/gdb/thread.c:81
#7 0x00000000004103a1 in normal_stop () at /archive/cvs/src/external/gpl3/gdb/dist/gdb/infrun.c:5647
#8 0x0000000000418bab in attach_command_post_wait (from_tty=1, async_exec=0, args=<optimized out>) at /archive/cvs/src/external/gpl3/gdb/dist/gdb/infcmd.c:2399
#9 0x0000000000418dce in attach_command (args=0x7f7ffffff885 "27334", from_tty=1) at /archive/cvs/src/external/gpl3/gdb/dist/gdb/infcmd.c:2532
#10 0x0000000000407966 in catch_command_errors (command=0x418cb7 <attach_command>, arg=0x7f7ffffff885 "27334", from_tty=1, mask=<optimized out>)
at /archive/cvs/src/external/gpl3/gdb/dist/gdb/exceptions.c:537
#11 0x0000000000406628 in captured_main (data=<optimized out>) at /archive/cvs/src/external/gpl3/gdb/dist/gdb/main.c:875
#12 0x00000000004078db in catch_errors (func=0x40593d <captured_main>, func_args=0x7f7fffffd590, errstring=0x657fd2 "", mask=<optimized out>)
at /archive/cvs/src/external/gpl3/gdb/dist/gdb/exceptions.c:521
#13 0x0000000000406700 in gdb_main (args=<optimized out>) at /archive/cvs/src/external/gpl3/gdb/dist/gdb/main.c:945
#14 0x000000000040576a in main (argc=<optimized out>, argv=<optimized out>) at /archive/cvs/src/external/gpl3/gdb/dist/gdb/gdb.c:35
Thomas
State-Changed-From-To: feedback->open
State-Changed-By: wiz@NetBSD.org
State-Changed-When: Fri, 05 Oct 2012 08:59:33 +0000
State-Changed-Why:
Feedback supplied.
State-Changed-From-To: open->feedback
State-Changed-By: dholland@NetBSD.org
State-Changed-When: Sat, 12 Jul 2014 20:11:29 +0000
State-Changed-Why:
How does this look after the last round of updates?
From: "Christos Zoulas" <christos@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/30756 CVS commit: src/external/gpl3/gdb/dist/gdb
Date: Wed, 16 Jul 2014 07:48:37 -0400
Module Name: src
Committed By: christos
Date: Wed Jul 16 11:48:37 UTC 2014
Modified Files:
src/external/gpl3/gdb/dist/gdb: nbsd-thread.c
Log Message:
PR/30756: Thomas Klausner: Deactivate threads after detaching the main thread.
To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 src/external/gpl3/gdb/dist/gdb/nbsd-thread.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
State-Changed-From-To: feedback->closed
State-Changed-By: wiz@NetBSD.org
State-Changed-When: Tue, 22 Jul 2014 15:51:59 +0000
State-Changed-Why:
I've just tried my firefox test case again and it worked.
Thanks for fixing this!
>Unformatted:
(Contact us)
$NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.