public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/383
@ 2003-03-24 20:16 nathan
  0 siblings, 0 replies; 3+ messages in thread
From: nathan @ 2003-03-24 20:16 UTC (permalink / raw)
  To: nathan; +Cc: gcc-prs

The following reply was made to PR c++/383; it has been noted by GNATS.

From: nathan@gcc.gnu.org
To: gcc-gnats@gcc.gnu.org
Cc:  
Subject: c++/383
Date: 24 Mar 2003 20:06:45 -0000

 CVSROOT:	/cvs/gcc
 Module name:	gcc
 Branch: 	gcc-3_3-branch
 Changes by:	nathan@gcc.gnu.org	2003-03-24 20:06:45
 
 Modified files:
 	gcc/cp         : ChangeLog pt.c 
 	gcc/testsuite  : ChangeLog 
 Added files:
 	gcc/testsuite/g++.dg/template: conv6.C 
 
 Log message:
 	cp:
 	PR c++/9898, PR c++/383, DR 322
 	* pt.c (maybe_adjust_types_for_deduction) [DEDUCE_CONV]: Look
 	through reference types on both PARM and ARG.
 	testsuite:
 	PR c++/9898, c++/383
 	* g++.dg/template/conv6.C: New test.
 
 Patches:
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.3076.2.95&r2=1.3076.2.96
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/pt.c.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.635.2.16&r2=1.635.2.17
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.2261.2.115&r2=1.2261.2.116
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/conv6.C.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=NONE&r2=1.1.2.1
 


^ permalink raw reply	[flat|nested] 3+ messages in thread

* c++/383
@ 2003-03-24 19:56 nathan
  0 siblings, 0 replies; 3+ messages in thread
From: nathan @ 2003-03-24 19:56 UTC (permalink / raw)
  To: nathan; +Cc: gcc-prs

The following reply was made to PR c++/383; it has been noted by GNATS.

From: nathan@gcc.gnu.org
To: gcc-gnats@gcc.gnu.org
Cc:  
Subject: c++/383
Date: 24 Mar 2003 19:47:17 -0000

 CVSROOT:	/cvs/gcc
 Module name:	gcc
 Changes by:	nathan@gcc.gnu.org	2003-03-24 19:47:17
 
 Modified files:
 	gcc/cp         : ChangeLog pt.c 
 	gcc/testsuite  : ChangeLog 
 Added files:
 	gcc/testsuite/g++.dg/template: conv6.C 
 
 Log message:
 	cp:
 	PR c++/9898, PR c++/383, DR 322
 	* pt.c (maybe_adjust_types_for_deduction) [DEDUCE_CONV]: Look
 	through reference types on both PARM and ARG.
 	testsuite:
 	PR c++/9898, c++/383
 	* g++.dg/template/conv6.C: New test.
 
 Patches:
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.3294&r2=1.3295
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/pt.c.diff?cvsroot=gcc&r1=1.673&r2=1.674
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.2534&r2=1.2535
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/conv6.C.diff?cvsroot=gcc&r1=NONE&r2=1.1
 


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: c++/383
@ 2001-04-01  0:00 neil
  0 siblings, 0 replies; 3+ messages in thread
From: neil @ 2001-04-01  0:00 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/383; it has been noted by GNATS.

From: neil@gcc.gnu.org
To: gcc-gnats@gcc.gnu.org, jcampbell3@prodigy.net,
  martin@loewis.home.cs.tu-berlin.de, nobody@gcc.gnu.org
Cc:  
Subject: Re: c++/383
Date: 20 Jan 2001 11:25:11 -0000

 Synopsis: C++v2,96:member template conversion not implicit
 
 State-Changed-From-To: analyzed->open
 State-Changed-By: neil
 State-Changed-When: Sat Jan 20 03:25:11 2001
 State-Changed-Why:
     Not analyzed
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=383&database=gcc
>From jarausch@igpm.rwth-aachen.de Sun Apr 01 00:00:00 2001
From: jarausch@igpm.rwth-aachen.de
To: gcc-gnats@gcc.gnu.org
Subject: c/1778: IRIX 20010126 c_expand_expr compiler error
Date: Sun, 01 Apr 2001 00:00:00 -0000
Message-id: <20010126114229.2901.qmail@sourceware.cygnus.com>
X-SW-Source: 2001-q1/msg00730.html
Content-length: 1317

>Number:         1778
>Category:       c
>Synopsis:       IRIX 20010126 c_expand_expr compiler error
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Jan 26 03:46:01 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     Helmut Jarausch, Lehrst. Numer. Math, RWTH Aachen, Germany
>Release:        CVS 20010126
>Organization:
>Environment:
IRIX 6.5 (9)
>Description:
Tring to build:

./xgcc -B./ -B/usr/LOCAL/mips-sgi-irix6.5/bin/ -isystem /usr/LOCAL/mips-sgi-irix6.5/include -O3   -DIN_GCC    -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -isystem ./include -O3  -g1  -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED  -I. -I. -I/usr/people/jarausch/ZIP/EGCS/gcc-cvs/gcc -I/usr/people/jarausch/ZIP/EGCS/gcc-cvs/gcc/. -I/usr/people/jarausch/ZIP/EGCS/gcc-cvs/gcc/config -I/usr/people/jarausch/ZIP/EGCS/gcc-cvs/gcc/../include  -DL_muldi3 -c /usr/people/jarausch/ZIP/EGCS/gcc-cvs/gcc/libgcc2.c -o libgcc/./_muldi3.o
/usr/people/jarausch/ZIP/EGCS/gcc-cvs/gcc/libgcc2.c: In function `__muldi3':
/usr/people/jarausch/ZIP/EGCS/gcc-cvs/gcc/libgcc2.c:360: Internal compiler error in c_expand_expr, at c-common.c:4072
>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
>From lerdsuwa@gcc.gnu.org Sun Apr 01 00:00:00 2001
From: lerdsuwa@gcc.gnu.org
To: nobody@gcc.gnu.org
Cc: gcc-prs@gcc.gnu.org
Subject: Re: c++/334
Date: Sun, 01 Apr 2001 00:00:00 -0000
Message-id: <20010204133601.6314.qmail@sourceware.cygnus.com>
X-SW-Source: 2001-q1/msg00925.html
Content-length: 535

The following reply was made to PR c++/334; it has been noted by GNATS.

From: lerdsuwa@gcc.gnu.org
To: gcc-gnats@gcc.gnu.org, nobody@gcc.gnu.org, petter@matfys.lth.se
Cc:  
Subject: Re: c++/334
Date: 4 Feb 2001 13:30:09 -0000

 Synopsis: ICE at -O2
 
 State-Changed-From-To: analyzed->closed
 State-Changed-By: lerdsuwa
 State-Changed-When: Sun Feb  4 05:30:09 2001
 State-Changed-Why:
     The bug appears to be fixed in the CVS.  Tested with snapshot 20010123.
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=334&database=gcc
>From neil@gcc.gnu.org Sun Apr 01 00:00:00 2001
From: neil@gcc.gnu.org
To: nobody@gcc.gnu.org
Cc: gcc-prs@gcc.gnu.org
Subject: Re: c++/513
Date: Sun, 01 Apr 2001 00:00:00 -0000
Message-id: <20010121133601.21856.qmail@sourceware.cygnus.com>
X-SW-Source: 2001-q1/msg00559.html
Content-length: 552

The following reply was made to PR c++/513; it has been noted by GNATS.

From: neil@gcc.gnu.org
To: gcc-gnats@gcc.gnu.org, m@icopyright.com, nobody@gcc.gnu.org
Cc:  
Subject: Re: c++/513
Date: 21 Jan 2001 13:34:21 -0000

 Synopsis: Duplicate symbols not collapsed for template constructor
 
 State-Changed-From-To: open->closed
 State-Changed-By: neil
 State-Changed-When: Sun Jan 21 05:34:21 2001
 State-Changed-Why:
     CVS G++ compiles and links fine without error (Linux 586)
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=513&database=gcc
>From tromey@redhat.com Sun Apr 01 00:00:00 2001
From: Tom Tromey <tromey@redhat.com>
To: nobody@gcc.gnu.org
Cc: gcc-prs@gcc.gnu.org
Subject: Re: libgcj/1913: reading closed streams throws NullPointerException, not IOException
Date: Sun, 01 Apr 2001 00:00:00 -0000
Message-id: <20010209013600.19126.qmail@sourceware.cygnus.com>
X-SW-Source: 2001-q1/msg01089.html
Content-length: 722

The following reply was made to PR libgcj/1913; it has been noted by GNATS.

From: Tom Tromey <tromey@redhat.com>
To: paul@dawa.demon.co.uk
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: libgcj/1913: reading closed streams throws NullPointerException, not IOException
Date: 08 Feb 2001 18:31:48 -0700

 >>>>> "Paul" == paul  <paul@dawa.demon.co.uk> writes:
 
 Paul> While trying to produce a test case for java/1912 I noticed that
 Paul> reading from an InputStreamReader after a close throws a
 Paul> NullPointerException whereas in the Sun JDK it throws an
 Paul> IOException with the message "Stream closed".
 
 I modified your test case and checked it in to Mauve.
 I'll probably commit your change in the near future.
 
 Tom
>From neil@gcc.gnu.org Sun Apr 01 00:00:00 2001
From: neil@gcc.gnu.org
To: nobody@gcc.gnu.org
Cc: gcc-prs@gcc.gnu.org
Subject: Re: c/727
Date: Sun, 01 Apr 2001 00:00:00 -0000
Message-id: <20010203120601.25333.qmail@sourceware.cygnus.com>
X-SW-Source: 2001-q1/msg00877.html
Content-length: 554

The following reply was made to PR c/727; it has been noted by GNATS.

From: neil@gcc.gnu.org
To: dedu@ese-metz.fr, gcc-gnats@gcc.gnu.org, nobody@gcc.gnu.org
Cc:  
Subject: Re: c/727
Date: 3 Feb 2001 11:57:36 -0000

 Synopsis: Warning bug if -O0?
 
 State-Changed-From-To: open->closed
 State-Changed-By: neil
 State-Changed-When: Sat Feb  3 03:57:36 2001
 State-Changed-Why:
     This is not a bug; GCC does not do sufficient flow analysis when not optimising to give the warnings.
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=727&database=gcc
>From neil@gcc.gnu.org Sun Apr 01 00:00:00 2001
From: neil@gcc.gnu.org
To: nobody@gcc.gnu.org
Cc: gcc-prs@gcc.gnu.org
Subject: Re: c/374
Date: Sun, 01 Apr 2001 00:00:00 -0000
Message-id: <20010120112603.11903.qmail@sourceware.cygnus.com>
X-SW-Source: 2001-q1/msg00523.html
Content-length: 604

The following reply was made to PR c/374; it has been noted by GNATS.

From: neil@gcc.gnu.org
To: gcc-gnats@gcc.gnu.org, martin@loewis.home.cs.tu-berlin.de,
  nickols_k@mail.ru, nobody@gcc.gnu.org
Cc:  
Subject: Re: c/374
Date: 20 Jan 2001 11:20:46 -0000

 Synopsis: gcc-2.95.2 ceases to produce workable executables after recompiling it with some optimization
 
 State-Changed-From-To: open->closed
 State-Changed-By: neil
 State-Changed-When: Sat Jan 20 03:20:46 2001
 State-Changed-Why:
     This is not an acceptable bug report.
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=374&database=gcc
>From cate@debian.org Sun Apr 01 00:00:00 2001
From: cate@debian.org
To: gcc-gnats@gcc.gnu.org
Subject: c++/1744: Internal compiler error in `make_decl_rtl', at varasm.c:738
Date: Sun, 01 Apr 2001 00:00:00 -0000
Message-id: <20010123143812.15983.qmail@sourceware.cygnus.com>
X-SW-Source: 2001-q1/msg00631.html
Content-length: 810507

>Number:         1744
>Category:       c++
>Synopsis:       Internal compiler error in `make_decl_rtl', at varasm.c:738
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Jan 23 06:46:01 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     Giacomo Catenazzi
>Release:        gcc version 2.95.2 20000220 (Debian GNU/Linux)
>Organization:
>Environment:
Debian Linux on a i386 arch.
>Description:
Compiling an erroneous code:
g++ -pipe -ggdb -DDEBUG linel.ii

...
linel.cc:209: ANSI C++ forbids declaration `M' with no type
linel.cc:209: conflicting types for `int M'
linel.cc:153: previous declaration as `class op_Local<double> M'
linel.cc:209: initializer list being treated as compound expression
linel.cc:209: `class fnc_Vector<double>' used where a `int' was expected
linel.cc:221: syntax error before `<'
linel.cc:223: syntax error before `<'
linel.cc: In function `void __static_initialization_and_destruction_0(int, int)':
cc1plus: register name not specified for ` /* decl error */ '
linel.cc:138: Internal compiler error in `make_decl_rtl', at varasm.c:738
Please submit a full bug report.
See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.
cate@herodot% 
>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="linel.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="linel.ii"

IyAxICJsaW5lbC5jYyIKIAoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIu
OTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDEgMwogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgojIDEgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYu
aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCiAg
IAoKCgpleHRlcm4gIkMiIHsKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMK
IAoKCgoKCiAKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiAKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKCgog
CgoKCgoKCgogCiMgMTQyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwoKCiAKCgoKCgoKCgoK
IAoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyMDggIi91c3IvaW5jbHVk
ZS9mZWF0dXJlcy5oIiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAK
CgogCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCiMgMSAiL3Vzci9pbmNsdWRl
L3N5cy9jZGVmcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKIAoK
CgoKCiAKCgoKCgoKCgogCgoKCiMgNjUgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMwoKCiAK
CgoKCgogCgoKCgogCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoK
IAoKCgoKCgoKIAoKCgoKIAoKCgoKCgojIDI4MyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIg
MwoKCgogCgoKCgoKCgoKIAoKCgoKIAoKIAoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9z
dHVicy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDMxMSAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwoKCgoKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw
ZXMuaCIgMiAzCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNs
dWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgog
CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCiMgMjcxICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgojIDI4MyAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5o
IiAyIDMKCgogCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcg
aW50IF9fcXVhZF90OwojIDQ4ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCgp0eXBlZGVm
IHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0
eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVu
c2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25n
IGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
bG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVk
ZWYgX191X3F1YWRfdCBfX2Rldl90OwkJIAp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsJCSAKdHlw
ZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CQkgCnR5cGVkZWYgX191X2xvbmcgX19pbm9fdDsJCSAKdHlw
ZWRlZiBfX3VfaW50IF9fbW9kZV90OwkJIAp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190OyAJCSAK
dHlwZWRlZiBsb25nIGludCBfX29mZl90OwkJIAp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90OwkJ
IAp0eXBlZGVmIGludCBfX3BpZF90OwkJCSAKdHlwZWRlZiBpbnQgX19zc2l6ZV90OwkJCSAKdHlw
ZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsJCSAKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7
CQkgCnR5cGVkZWYgX191X2ludCBfX2lkX3Q7CQkJIAoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBp
bnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsJCQkJIAoKIAp0eXBlZGVmIGludCBfX2RhZGRyX3Q7
CQkJIAp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3Vz
ZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwkJIAoMCnR5cGVkZWYgbG9uZyBp
bnQgX19jbG9ja190OwoKIAp0eXBlZGVmIGludCBfX2Nsb2NraWRfdDsKCiAKdHlwZWRlZiBpbnQg
X190aW1lcl90OwoKCiAKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2ZkX21hc2s7CgogCgoK
IAoKCgoKIAp0eXBlZGVmIHN0cnVjdAogIHsKICAgICAKCgoKCgogICAgX19mZF9tYXNrIF9fZmRz
X2JpdHNbMTAyNCAgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSkgXTsKCgogIH0gX19mZF9zZXQ7
CgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCiAKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19p
cGNfcGlkX3Q7CgoKIAp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKIAoKIAp0eXBlZGVm
IGxvbmcgaW50IF9fYmxrY250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKIAp0
eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtj
bnQ2NF90OwoKIAp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVh
ZF90IF9fZnNmaWxjbnQ2NF90OwoKIAp0eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90OwoKIAp0
eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCiAKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFy
X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCiAKdHlwZWRlZiBp
bnQgX19pbnRwdHJfdDsKCiAKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKIAoK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKIyA2MiAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwoK
CgoKCiAKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgc2NoZWRfcHJpb3JpdHk7CiAg
fTsKCgojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMiAzCgoKIApzdHJ1
Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOyAgICAKICBpbnQgX19z
cGlubG9jazsgICAgICAgCgp9OwoKCiAKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3Ry
dWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2RldGFj
aHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2No
ZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9f
Z3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAg
c2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QK
ewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsgIAogIF9wdGhyZWFkX2Rlc2Ny
IF9fY193YWl0aW5nOyAgICAgICAgIAp9IHB0aHJlYWRfY29uZF90OwoKCiAKdHlwZWRlZiBzdHJ1
Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCiAKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgogCiAKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19t
X3Jlc2VydmVkOyAgICAgICAgICAgICAgICAKICBpbnQgX19tX2NvdW50OyAgICAgICAgICAgICAg
ICAgICAKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7ICAgICAgICAKICBpbnQgX19tX2tpbmQ7
ICAgICAgICAgICAgICAgICAgICAKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7
ICAKfSBwdGhyZWFkX211dGV4X3Q7CgoKIAp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhr
aW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKIAp0eXBlZGVmIGludCBwdGhyZWFkX29uY2Vf
dDsKCgojIDExNyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKCgojIDEzNiAi
L3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKCgoKIAp0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgaW50IHB0aHJlYWRfdDsKCgojIDE2NSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIg
MiAzCgoKCgojIDkgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgoKCgoKIyAxICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoK
CgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUu
Mi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCAgd2ludF90OwoKCgoKIAoKIAoK
IyAzMTcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYu
aCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDE0ICIvdXNyL2luY2x1ZGUvX0dfY29u
ZmlnLmgiIDIgMwoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKIyA0MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMK
CgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4y
L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
bGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgojIDE5MCAiL3Vzci9saWIv
Z2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgoKCiAK
CiMgMjcxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVm
LmgiIDMKCgoKCgoKCgoKCgoKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp
bnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiMgNDUgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L3djaGFyLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDQ3ICIvdXNyL2luY2x1
ZGUvd2NoYXIuaCIgMiAzCgoKIAoKCgoKCgoKCgoKCgoKIAp0eXBlZGVmIHN0cnVjdAp7CiAgaW50
IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2NoYls0
XTsKICB9IF9fdmFsdWU7CQkgCn0gX19tYnN0YXRlX3Q7CgoKCgogCgojIDY4MSAiL3Vzci9pbmNs
dWRlL3djaGFyLmgiIDMKCgoKIyAyNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCgp0
eXBlZGVmIHN0cnVjdAp7CiAgX19vZmZfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9
IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3Rh
dGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2NF90OwoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2dj
b252LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiMgNDMgIi91c3Iv
aW5jbHVkZS93Y2hhci5oIiAzCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45
NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoK
CiMgNjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYu
aCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoK
IAoKIyAxOTAgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKCgogCgoKCgogCgojIDI3MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIu
OTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91c3Iv
bGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgojIDQ1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgoKCgog
CgoKCgoKCgoKCgoKIyA3MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCgoKCiAKCiMgNjgxICIv
dXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKCgojIDI4ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAz
CgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVm
LmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUu
Mi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoK
CgogCgojIDI3MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKIyAyODMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5j
bHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu
dXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IyAzMCAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCiAKCgogCmVudW0KewogIF9fR0NPTlZf
T0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVN
LAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09O
Vl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9J
TExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCiAKZW51bQp7
CiAgX19HQ09OVl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdOT1JFX0VSUk9SUyA9IDB4
MDAwMgp9OwoKCiAKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRh
OwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRh
OwoKCiAKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwg
c3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCgkJCSAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg
KiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAoJCQkgICAgdW5zaWduZWQgY2hhciAqKiwgc2l6
ZV90ICosIGludCwgaW50KTsKCiAKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3Ry
dWN0IF9fZ2NvbnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3Ry
dWN0IF9fZ2NvbnZfc3RlcCAqKTsKCgogCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3Qp
IChzdHJ1Y3QgX19nY29udl9zdGVwICosCgkJCQkgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAq
LCB2b2lkICosCgkJCQkgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAoJCQkJICBfX2NvbnN0IHVu
c2lnbmVkIGNoYXIgKiosCgkJCQkgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBj
aGFyICoqLAoJCQkJICBzaXplX3QgKik7CgogCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19j
b250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCgkJCQkJICBfX2Nv
bnN0IHVuc2lnbmVkIGNoYXIgKiwKCQkJCQkgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hh
ciAqKTsKCiAKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3Qg
Y2hhciAqLCBfX2NvbnN0IGNoYXIgKioqLAoJCQkJCXNpemVfdCAqKTsKCiAKdHlwZWRlZiBpbnQg
KCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlwZWRl
ZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2djb252
X3RyYW5zX2RhdGEKewogICAKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2dj
b252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFu
c19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2Nv
bnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCiAKc3RydWN0IF9fZ2NvbnZfc3RlcAp7CiAgc3Ry
dWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25zdCBjaGFy
ICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1lOwogIGNo
YXIgKl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0X2ZjdCBf
X2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgogICAKCiAgaW50IF9fbWlu
X25lZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVlZGVk
X3RvOwogIGludCBfX21heF9uZWVkZWRfdG87CgogICAKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9p
ZCAqX19kYXRhOwkJIAp9OwoKIAoKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1bnNpZ25l
ZCBjaGFyICpfX291dGJ1ZjsgICAgIAogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOyAgCgoK
ICAgCiAgaW50IF9fZmxhZ3M7CgogICAKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKICAg
CgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJz
dGF0ZV90IF9fc3RhdGU7CSAKCgogICAKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX3Ry
YW5zOwp9OwoKCiAKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3Rl
cHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVj
dCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEgWzBdIDsKfSAqX19nY29udl90OwoKCiMgNDQgIi91
c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1Y3QgX19n
Y29udl9pbmZvIF9fY2Q7CiAgc3RydWN0CiAgewogICAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2Nk
OwogICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YTsKICB9IF9fY29tYmluZWQ7Cn0g
X0dfaWNvbnZfdDsKCnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k
ZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0
cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191
aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKCgoKCiAKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCiMgMzAgIi91c3IvaW5jbHVkZS9saWJp
by5oIiAyIDMKCiAKCgoKCgoKCgoKCgoKCgoKCgogCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4
Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKdHlw
ZWRlZiB2b2lkICpfX2dudWNfdmFfbGlzdDsKCgoKIAoKIyAxMjIgIi91c3IvbGliL2djYy1saWIv
aTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoK
CiMgMjA5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkYXJn
LmgiIDMKCgoKCiMgNTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKCgoKCgoKCiMgNzAgIi91
c3IvaW5jbHVkZS9saWJpby5oIiAzCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiMgMTAxICIvdXNyL2lu
Y2x1ZGUvbGliaW8uaCIgMwoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVjdCBfSU9fanVtcF90OyAgc3RydWN0IF9JT19GSUxFOwoK
IAoKCgoKCgoKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCiAKCnN0cnVjdCBfSU9fbWFya2Vy
IHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsK
ICAgCgogICAKICBpbnQgX3BvczsKIyAxOTAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCgp9OwoK
IAplbnVtIF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2dF9vaywKICBfX2NvZGVjdnRfcGFy
dGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0X25vY29udgp9OwoKIyAyNTcgIi91
c3IvaW5jbHVkZS9saWJpby5oIiAzCgoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwkJ
IAoKCiAgIAogICAKICBjaGFyKiBfSU9fcmVhZF9wdHI7CSAKICBjaGFyKiBfSU9fcmVhZF9lbmQ7
CSAKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CSAKICBj
aGFyKiBfSU9fd3JpdGVfcHRyOwkgCiAgY2hhciogX0lPX3dyaXRlX2VuZDsJIAogIGNoYXIqIF9J
T19idWZfYmFzZTsJIAogIGNoYXIqIF9JT19idWZfZW5kOwkgCiAgIAogIGNoYXIgKl9JT19zYXZl
X2Jhc2U7ICAKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7ICAgCiAgY2hhciAqX0lPX3NhdmVfZW5k
OyAgCgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpf
Y2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90ICAgX29sZF9v
ZmZzZXQ7ICAKCgogICAKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hh
ciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCiAgIAoKICBfSU9fbG9ja190
ICpfbG9jazsKCgoKCgoKCgogIF9fb2ZmNjRfdCAgIF9vZmZzZXQ7CgoKCgoKICB2b2lkICpfX3Bh
ZDE7CiAgdm9pZCAqX19wYWQyOwoKICBpbnQgX21vZGU7CiAgIAogIGNoYXIgX3VudXNlZDJbMTUg
KiBzaXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKCgoKc3RydWN0IF9J
T19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87
CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVybiBzdHJ1
Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CgoKCgoKCgoKCgoKIAoKIAoKdHlwZWRl
ZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNp
emVfdCBfX25ieXRlcyk7CgogCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAo
dm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCgkJCQkgc2l6ZV90IF9fbik7Cgog
CgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90
ICAgKl9fcG9zLCBpbnQgX193KTsKCiAKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9mbiAodm9pZCAq
X19jb29raWUpOwoKCiMgMzg3ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwoKCgoKZXh0ZXJuICJD
IiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCkgOwpleHRl
cm4gaW50IF9fdWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpIDsKZXh0ZXJuIGludCBfX292ZXJm
bG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpIDsKZXh0ZXJuIHdpbnRfdCAgIF9fd3VuZGVy
ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCkgOwpleHRlcm4gd2ludF90ICAgX193dWZsb3cgKF9J
T19GSUxFICopIHRocm93ICgpIDsKZXh0ZXJuIHdpbnRfdCAgIF9fd292ZXJmbG93IChfSU9fRklM
RSAqLCB3aW50X3QgICkgdGhyb3cgKCkgOwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4g
aW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCkgOwpleHRlcm4gaW50IF9JT19w
dXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCkgOwpleHRlcm4gaW50IF9JT19m
ZW9mIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCkgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgKF9J
T19GSUxFICpfX2ZwKSB0aHJvdyAoKSA7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9J
T19GSUxFICpfX2ZwKSB0aHJvdyAoKSA7CgogCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUg
KF9JT19GSUxFICopIHRocm93ICgpIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9f
RklMRSAqKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUg
KikgdGhyb3cgKCkgOwoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lP
X0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKCQkJX19nbnVjX3Zh
X2xpc3QgLCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpIDsKZXh0ZXJuIGludCBfSU9fdmZwcmlu
dGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LAoJCQkgX19n
bnVjX3ZhX2xpc3QgKSB0aHJvdyAoKSA7CmV4dGVybiBfX3NzaXplX3QgICBfSU9fcGFkbiAoX0lP
X0ZJTEUgKiwgaW50LCBfX3NzaXplX3QgICkgdGhyb3cgKCkgOwpleHRlcm4gc2l6ZV90ICAgX0lP
X3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCAgKSB0aHJvdyAoKSA7CgpleHRlcm4g
X19vZmY2NF90ICAgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCAgLCBpbnQsIGlu
dCkgdGhyb3cgKCkgOwpleHRlcm4gX19vZmY2NF90ICAgX0lPX3NlZWtwb3MgKF9JT19GSUxFICos
IF9fb2ZmNjRfdCAgLCBpbnQpIHRocm93ICgpIDsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1
cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAoKSA7CgojIDUwNyAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDMKCgoKfQoKCgojIDM2ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDIgMwoKfQogCgojIDEgIi91c3Iv
bGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCnZvaWQgdmFfZW5kIChfX2du
dWNfdmFfbGlzdCk7CQkgCgoKIAoKCgogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgogCiAKCgoKCgoKCgoKCgoKCiMgMTc1ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgv
Mi45NS4yL2luY2x1ZGUvc3RkYXJnLmgiIDMKCgogCgoKCgogCgogCgogCgp0eXBlZGVmIF9fZ251
Y192YV9saXN0IHZhX2xpc3Q7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNDAgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJl
YW1idWYuaCIgMiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMrKyIgewpjbGFz
cyBpc3RyZWFtOyAgCmNsYXNzIG9zdHJlYW07IGNsYXNzIHN0cmVhbWJ1ZjsKCiAKCgoKCnR5cGVk
ZWYgX19vZmY2NF90ICAgc3RyZWFtb2ZmOwp0eXBlZGVmIF9fb2ZmNjRfdCAgIHN0cmVhbXBvczsK
CgoKCnR5cGVkZWYgX19zc2l6ZV90ICAgc3RyZWFtc2l6ZTsKCnR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBfX2ZtdGZsYWdzOwp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX19pb3N0YXRlOwoKc3RydWN0IF9p
b3NfZmllbGRzCnsgIAogICAgc3RyZWFtYnVmICpfc3RyYnVmOwogICAgb3N0cmVhbSogX3RpZTsK
ICAgIGludCBfd2lkdGg7CiAgICBfX2ZtdGZsYWdzIF9mbGFnczsKICAgIHdjaGFyX3QgICBfZmls
bDsKICAgIF9faW9zdGF0ZSBfc3RhdGU7CiAgICBfX2lvc3RhdGUgX2V4Y2VwdGlvbnM7CiAgICBp
bnQgX3ByZWNpc2lvbjsKCiAgICB2b2lkICpfYXJyYXlzOyAgCn07CgoKCgoKCgoKCgoKCgoKCiMg
MTI0ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKCgpjbGFzcyBpb3MgOiBwdWJsaWMgX2lvc19maWVsZHMg
ewogIGlvcyYgb3BlcmF0b3I9KGlvcyYpOyAgIAogIGlvcyAoY29uc3QgaW9zJik7ICAKICBwdWJs
aWM6CiAgICB0eXBlZGVmIF9fZm10ZmxhZ3MgZm10ZmxhZ3M7CiAgICB0eXBlZGVmIGludCBpb3N0
YXRlOwogICAgdHlwZWRlZiBpbnQgb3Blbm1vZGU7CiAgICB0eXBlZGVmIF9fc3NpemVfdCAgIHN0
cmVhbXNpemU7CiAgICBlbnVtIGlvX3N0YXRlIHsKCWdvb2RiaXQgPSAwICwKCWVvZmJpdCA9IDEg
LAoJZmFpbGJpdCA9IDIgLAoJYmFkYml0ID0gNCAgfTsKICAgIGVudW0gb3Blbl9tb2RlIHsKCWlu
ID0gMSAsCglvdXQgPSAyICwKCWF0ZSA9IDQgLAoJYXBwID0gOCAsCgl0cnVuYyA9IDE2ICwKCW5v
Y3JlYXRlID0gMzIgLAoJbm9yZXBsYWNlID0gNjQgLAoJYmluID0gMTI4ICwgIAoJYmluYXJ5ID0g
MTI4ICB9OwogICAgZW51bSBzZWVrX2RpciB7IGJlZywgY3VyLCBlbmR9OwogICAgdHlwZWRlZiBl
bnVtIHNlZWtfZGlyIHNlZWtkaXI7CiAgICAgCiAgICBlbnVtIHsgc2tpcHdzPSAwMSAsCgkgICBs
ZWZ0PSAwMiAsIHJpZ2h0PSAwNCAsIGludGVybmFsPSAwMTAgLAoJICAgZGVjPSAwMjAgLCBvY3Q9
IDA0MCAsIGhleD0gMDEwMCAsCgkgICBzaG93YmFzZT0gMDIwMCAsIHNob3dwb2ludD0gMDQwMCAs
CgkgICB1cHBlcmNhc2U9IDAxMDAwICwgc2hvd3Bvcz0gMDIwMDAgLAoJICAgc2NpZW50aWZpYz0g
MDQwMDAgLCBmaXhlZD0gMDEwMDAwICwKCSAgIHVuaXRidWY9IDAyMDAwMCAsIHN0ZGlvPSAwNDAw
MDAgCgoKCgkgICB9OwogICAgZW51bSB7ICAKCWJhc2VmaWVsZD1kZWMrb2N0K2hleCwKCWZsb2F0
ZmllbGQgPSBzY2llbnRpZmljK2ZpeGVkLAoJYWRqdXN0ZmllbGQgPSBsZWZ0K3JpZ2h0K2ludGVy
bmFsCiAgICB9OwoKIyAxNzcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwoKCiAgICBvc3RyZWFtKiB0aWUo
KSBjb25zdCB7IHJldHVybiBfdGllOyB9CiAgICBvc3RyZWFtKiB0aWUob3N0cmVhbSogdmFsKSB7
IG9zdHJlYW0qIHNhdmU9X3RpZTsgX3RpZT12YWw7IHJldHVybiBzYXZlOyB9CgogICAgIAogICAg
d2NoYXJfdCAgIGZpbGwoKSBjb25zdCB7IHJldHVybiBfZmlsbDsgfQogICAgd2NoYXJfdCAgIGZp
bGwod2NoYXJfdCAgIG5ld2YpCgl7d2NoYXJfdCAgIG9sZGYgPSBfZmlsbDsgX2ZpbGwgPSBuZXdm
OyByZXR1cm4gb2xkZjt9CiAgICBmbXRmbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9mbGFn
czsgfQogICAgZm10ZmxhZ3MgZmxhZ3MoZm10ZmxhZ3MgbmV3X3ZhbCkgewoJZm10ZmxhZ3Mgb2xk
X3ZhbCA9IF9mbGFnczsgX2ZsYWdzID0gbmV3X3ZhbDsgcmV0dXJuIG9sZF92YWw7IH0KICAgIGlu
dCBwcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBfcHJlY2lzaW9uOyB9CiAgICBpbnQgcHJlY2lz
aW9uKGludCBuZXdwKSB7Cgl1bnNpZ25lZCBzaG9ydCBvbGRwID0gX3ByZWNpc2lvbjsgX3ByZWNp
c2lvbiA9ICh1bnNpZ25lZCBzaG9ydCluZXdwOwoJcmV0dXJuIG9sZHA7IH0KICAgIGZtdGZsYWdz
IHNldGYoZm10ZmxhZ3MgdmFsKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdz
IHw9IHZhbDsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFs
LCBmbXRmbGFncyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzID0g
KF9mbGFncyAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZt
dGZsYWdzIHVuc2V0ZihmbXRmbGFncyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdz
OwoJX2ZsYWdzICY9IH5tYXNrOyByZXR1cm4gb2xkYml0czsgfQogICAgaW50IHdpZHRoKCkgY29u
c3QgeyByZXR1cm4gX3dpZHRoOyB9CiAgICBpbnQgd2lkdGgoaW50IHZhbCkgeyBpbnQgc2F2ZSA9
IF93aWR0aDsgX3dpZHRoID0gdmFsOyByZXR1cm4gc2F2ZTsgfQoKCgoKICAgIHZvaWQgX3Rocm93
X2ZhaWx1cmUoKSBjb25zdCB7IH0KCiAgICB2b2lkIGNsZWFyKGlvc3RhdGUgc3RhdGUgPSAwKSB7
Cglfc3RhdGUgPSBfc3RyYnVmID8gc3RhdGUgOiBzdGF0ZXxiYWRiaXQ7CglpZiAoX3N0YXRlICYg
X2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0KGlvc3RhdGUgZmxh
ZykgeyBfc3RhdGUgfD0gZmxhZzsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2Zh
aWx1cmUoKTsgfQogICAgdm9pZCBzZXRzdGF0ZShpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZs
YWc7ICAKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAg
aW50IGdvb2QoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgPT0gMDsgfQogICAgaW50IGVvZigpIGNv
bnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6ZW9mYml0OyB9CiAgICBpbnQgZmFpbCgpIGNvbnN0
IHsgcmV0dXJuIF9zdGF0ZSAmIChpb3M6OmJhZGJpdHxpb3M6OmZhaWxiaXQpOyB9CiAgICBpbnQg
YmFkKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjpiYWRiaXQ7IH0KICAgIGlvc3RhdGUg
cmRzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZTsgfQogICAgb3BlcmF0b3Igdm9pZCooKSBj
b25zdCB7IHJldHVybiBmYWlsKCkgPyAodm9pZCopMCA6ICh2b2lkKikoLTEpOyB9CiAgICBpbnQg
b3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gZmFpbCgpOyB9CiAgICBpb3N0YXRlIGV4Y2VwdGlv
bnMoKSBjb25zdCB7IHJldHVybiBfZXhjZXB0aW9uczsgfQogICAgdm9pZCBleGNlcHRpb25zKGlv
c3RhdGUgZW5hYmxlKSB7CglfZXhjZXB0aW9ucyA9IGVuYWJsZTsKCWlmIChfc3RhdGUgJiBfZXhj
ZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQoKICAgIHN0cmVhbWJ1ZiogcmRidWYoKSBjb25z
dCB7IHJldHVybiBfc3RyYnVmOyB9CiAgICBzdHJlYW1idWYqIHJkYnVmKHN0cmVhbWJ1ZiAqX3Mp
IHsKICAgICAgc3RyZWFtYnVmICpfb2xkID0gX3N0cmJ1ZjsgX3N0cmJ1ZiA9IF9zOyBjbGVhciAo
KTsgcmV0dXJuIF9vbGQ7IH0KCiAgICBzdGF0aWMgaW50IHN5bmNfd2l0aF9zdGRpbyhpbnQgb24p
OwogICAgc3RhdGljIHZvaWQgc3luY193aXRoX3N0ZGlvKCkgeyBzeW5jX3dpdGhfc3RkaW8oMSk7
IH0KICAgIHN0YXRpYyBmbXRmbGFncyBiaXRhbGxvYygpOwogICAgc3RhdGljIGludCB4YWxsb2Mo
KTsKICAgIHZvaWQqJiBwd29yZChpbnQpOwogICAgdm9pZCogcHdvcmQoaW50KSBjb25zdDsKICAg
IGxvbmcmIGl3b3JkKGludCk7CiAgICBsb25nIGl3b3JkKGludCkgY29uc3Q7CgoKCgoKCgoKCiAg
ICAgCiAgICBjbGFzcyBJbml0IHsKICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7IH0KICAgIH07
CgogIHByb3RlY3RlZDoKICAgIGlubGluZSBpb3Moc3RyZWFtYnVmKiBzYiA9IDAsIG9zdHJlYW0q
IHRpZV90byA9IDApOwogICAgaW5saW5lIHZpcnR1YWwgfmlvcygpOwogICAgaW5saW5lIHZvaWQg
aW5pdChzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWUgPSAwKTsKfTsKCgoKCnR5cGVkZWYgaW9z
OjpzZWVrX2RpciBfc2Vla19kaXI7CgoKIAogCiAKIAogCgogCiAKY2xhc3Mgc3RyZWFtbWFya2Vy
IDogcHJpdmF0ZSBfSU9fbWFya2VyIHsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1idWY7CiAgICB2
b2lkIHNldF9vZmZzZXQoaW50IG9mZnNldCkgeyBfcG9zID0gb2Zmc2V0OyB9CiAgcHVibGljOgog
ICAgc3RyZWFtbWFya2VyKHN0cmVhbWJ1ZiAqc2IpOwogICAgfnN0cmVhbW1hcmtlcigpOwogICAg
aW50IHNhdmluZygpIHsgcmV0dXJuICAxOyB9CiAgICBpbnQgZGVsdGEoc3RyZWFtbWFya2VyJik7
CiAgICBpbnQgZGVsdGEoKTsKfTsKCnN0cnVjdCBzdHJlYW1idWYgOiBwdWJsaWMgX0lPX0ZJTEUg
eyAgCiAgICBmcmllbmQgY2xhc3MgaW9zOwogICAgZnJpZW5kIGNsYXNzIGlzdHJlYW07CiAgICBm
cmllbmQgY2xhc3Mgb3N0cmVhbTsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1tYXJrZXI7CiAgICBj
b25zdCB2b2lkIComX3Z0YWJsZSgpIHsgcmV0dXJuICooY29uc3Qgdm9pZCoqKSgoX0lPX0ZJTEUq
KXRoaXMgKyAxKTsgfQogIHByb3RlY3RlZDoKICAgIHN0YXRpYyBzdHJlYW1idWYqIF9saXN0X2Fs
bDsgIAogICAgX0lPX0ZJTEUqJiB4Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0KICAgIHZvaWQg
X3VuX2xpbmsoKTsKICAgIHZvaWQgX2xpbmtfaW4oKTsKICAgIGNoYXIqIGdwdHIoKSBjb25zdAog
ICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFk
X3B0cjsgfQogICAgY2hhciogcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9wdHI7IH0K
ICAgIGNoYXIqIGVncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/
IF9JT19zYXZlX2VuZCA6IF9JT19yZWFkX2VuZDsgfQogICAgY2hhciogZXBwdHIoKSBjb25zdCB7
IHJldHVybiBfSU9fd3JpdGVfZW5kOyB9CiAgICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsgcmV0dXJu
IF9JT193cml0ZV9iYXNlOyB9CiAgICBjaGFyKiBlYmFjaygpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTt9CiAgICBj
aGFyKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9iYXNlOyB9CiAgICBjaGFyKiBlYnVm
KCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQ7IH0KICAgIGludCBibGVuKCkgY29uc3QgeyBy
ZXR1cm4gX0lPX2J1Zl9lbmQgLSBfSU9fYnVmX2Jhc2U7IH0KICAgIHZvaWQgeHB1dF9jaGFyKGNo
YXIgYykgeyAqX0lPX3dyaXRlX3B0cisrID0gYzsgfQogICAgaW50IHhmbGFncygpIHsgcmV0dXJu
IF9mbGFncyA7IH0KICAgIGludCB4ZmxhZ3MoaW50IGYpIHtpbnQgZmwgPSBfZmxhZ3MgOyBfZmxh
Z3MgID0gZjsgcmV0dXJuIGZsO30KICAgIHZvaWQgeHNldGZsYWdzKGludCBmKSB7IF9mbGFncyAg
fD0gZjsgfQogICAgdm9pZCB4c2V0ZmxhZ3MoaW50IGYsIGludCBtYXNrKQogICAgICB7IF9mbGFn
cyAgPSAoX2ZsYWdzICAmIH5tYXNrKSB8IChmICYgbWFzayk7IH0KICAgIHZvaWQgZ2J1bXAoaW50
IG4pCiAgICAgIHsgX2ZsYWdzICAmIDB4MTAwICA/IChfSU9fc2F2ZV9iYXNlKz1uKTooX0lPX3Jl
YWRfcHRyKz1uKTt9CiAgICB2b2lkIHBidW1wKGludCBuKSB7IF9JT193cml0ZV9wdHIgKz0gbjsg
fQogICAgdm9pZCBzZXRiKGNoYXIqIGIsIGNoYXIqIGViLCBpbnQgYT0wKTsKICAgIHZvaWQgc2V0
cChjaGFyKiBwLCBjaGFyKiBlcCkKICAgICAgeyBfSU9fd3JpdGVfYmFzZT1fSU9fd3JpdGVfcHRy
PXA7IF9JT193cml0ZV9lbmQ9ZXA7IH0KICAgIHZvaWQgc2V0ZyhjaGFyKiBlYiwgY2hhciogZywg
Y2hhciAqZWcpIHsKICAgICAgaWYgKF9mbGFncyAgJiAweDEwMCApIF9JT19mcmVlX2JhY2t1cF9h
cmVhKHRoaXMpOyAKICAgICAgX0lPX3JlYWRfYmFzZSA9IGViOyBfSU9fcmVhZF9wdHIgPSBnOyBf
SU9fcmVhZF9lbmQgPSBlZzsgfQogICAgY2hhciAqc2hvcnRidWYoKSB7IHJldHVybiBfc2hvcnRi
dWY7IH0KCiAgICBpbnQgaW5fYmFja3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgOyB9CiAg
ICAgCiAgICBjaGFyICpHYmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfYmFz
ZSA6IF9JT19yZWFkX2Jhc2U7IH0KICAgICAKICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4gaW5f
YmFja3VwKCkgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgICAKICAgIGNoYXIg
KkJiYXNlKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVf
YmFzZTsgfQogICAgY2hhciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQogICAg
IAogICAgY2hhciAqZUJwdHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2VuZCA6
IF9JT19zYXZlX2VuZDsgfQogICAgY2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNl
OyB9CiAgICBjaGFyICplTnB0cigpIHsgcmV0dXJuIF9JT19zYXZlX2VuZDsgfQogICAgaW50IGhh
dmVfYmFja3VwKCkgeyByZXR1cm4gX0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9CiAgICBpbnQg
aGF2ZV9tYXJrZXJzKCkgeyByZXR1cm4gX21hcmtlcnMgIT0gX19udWxsIDsgfQogICAgdm9pZCBm
cmVlX2JhY2t1cF9hcmVhKCk7CiAgICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICAKICAgIGludCBw
dXRfbW9kZSgpIHsgcmV0dXJuIF9mbGFncyAmIDB4ODAwIDsgfQogICAgaW50IHN3aXRjaF90b19n
ZXRfbW9kZSgpOwogICAgCiAgICBzdHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1YmxpYzoKICAg
IHN0YXRpYyBpbnQgZmx1c2hfYWxsKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfbGluZWJ1
ZmZlcmVkKCk7ICAKICAgIHZpcnR1YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVhbCBpbnQgb3Zl
cmZsb3coaW50IGMgPSAoLTEpICk7ICAKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOyAgCiAg
ICB2aXJ0dWFsIGludCB1ZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMp
OwogCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNp
emUgbik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUg
bik7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBp
bnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtwb3Mo
c3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKCiAgICBzdHJlYW1w
b3MgcHVic2Vla29mZihzdHJlYW1vZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2RlPWlvczo6aW58
aW9zOjpvdXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBkLCBtb2RlKTsg
fQogICAgc3RyZWFtcG9zIHB1YnNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6
OmlufGlvczo6b3V0KQogICAgICB7IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywgcG9zLCBtb2Rl
KTsgfQogICAgc3RyZWFtcG9zIHNzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9k
ZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9z
LCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNl
dGJ1ZihjaGFyKiBwLCBpbnQgbGVuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICAgIHZpcnR1
YWwgaW50IGRvYWxsb2NhdGUoKTsKCiAgICBpbnQgc2Vla21hcmsoc3RyZWFtbWFya2VyJiBtYXJr
LCBpbnQgZGVsdGEgPSAwKTsKICAgIGludCBzcHV0YmFja2MoY2hhciBjKTsKICAgIGludCBzdW5n
ZXRjKCk7CiAgICBpbnQgdW5idWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDIgID8gMSA6IDA7
IH0KICAgIGludCBsaW5lYnVmZmVyZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAweDIwMCAgPyAxIDog
MDsgfQogICAgdm9pZCB1bmJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDIgOyBl
bHNlIF9mbGFncyAmPSB+MiA7IH0KICAgIHZvaWQgbGluZWJ1ZmZlcmVkKGludCBpKQoJeyBpZiAo
aSkgX2ZsYWdzIHw9IDB4MjAwIDsgZWxzZSBfZmxhZ3MgJj0gfjB4MjAwIDsgfQogICAgaW50IGFs
bG9jYXRlKCkgeyAgCglpZiAoYmFzZSgpIHx8IHVuYnVmZmVyZWQoKSkgcmV0dXJuIDA7CgllbHNl
IHJldHVybiBkb2FsbG9jYXRlKCk7IH0KICAgICAKICAgIHZvaWQgYWxsb2NidWYoKSB7IGlmIChi
YXNlKCkgPT0gX19udWxsICkgZG9hbGxvY2J1ZigpOyB9CiAgICB2b2lkIGRvYWxsb2NidWYoKTsK
ICAgIGludCBpbl9hdmFpbCgpIHsgcmV0dXJuIF9JT19yZWFkX2VuZCAtIF9JT19yZWFkX3B0cjsg
fQogICAgaW50IG91dF93YWl0aW5nKCkgeyByZXR1cm4gX0lPX3dyaXRlX3B0ciAtIF9JT193cml0
ZV9iYXNlOyB9CiAgICBzdHJlYW1zaXplIHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUg
bikgeyByZXR1cm4geHNwdXRuKHMsIG4pOyB9CiAgICBzdHJlYW1zaXplIHBhZG4oY2hhciBwYWQs
IHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lPX3BhZG4odGhpcywgcGFkLCBuKTsgfQogICAgc3Ry
ZWFtc2l6ZSBzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19zZ2V0bih0
aGlzLCBzLCBuKTsgfQogICAgaW50IGlnbm9yZShpbnQpOwogICAgaW50IGdldF9jb2x1bW4oKTsK
ICAgIGludCBzZXRfY29sdW1uKGludCk7CiAgICBsb25nIHNnZXRsaW5lKGNoYXIqIGJ1Ziwgc2l6
ZV90ICAgbiwgY2hhciBkZWxpbSwgaW50IHB1dGJhY2tfZGVsaW0pOwogICAgaW50IHNwdXRjKGlu
dCBjKSB7IHJldHVybiBfSU9fcHV0YyhjLCB0aGlzKTsgfQogICAgaW50IHNidW1wYygpIHsgcmV0
dXJuIF9JT19nZXRjKHRoaXMpOyB9CiAgICBpbnQgc2dldGMoKSB7IHJldHVybiAoKCAgdGhpcyAg
KS0+X0lPX3JlYWRfcHRyID49ICggIHRoaXMgICktPl9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxv
dyAoICB0aGlzICApID09ICgtMSkgID8gKC0xKSAgOiAqKHVuc2lnbmVkIGNoYXIgKikgKCAgdGhp
cyAgKS0+X0lPX3JlYWRfcHRyKSAgOyB9CiAgICBpbnQgc25leHRjKCkgewoJaWYgKF9JT19yZWFk
X3B0ciA+PSBfSU9fcmVhZF9lbmQgJiYgX191bmRlcmZsb3codGhpcykgPT0gKC0xKSApCgkgIHJl
dHVybiAoLTEpIDsKCWVsc2UgcmV0dXJuIF9JT19yZWFkX3B0cisrLCBzZ2V0YygpOyB9CiAgICB2
b2lkIHN0b3NzYygpIHsgaWYgKF9JT19yZWFkX3B0ciA8IF9JT19yZWFkX2VuZCkgX0lPX3JlYWRf
cHRyKys7IH0KICAgIGludCB2c2NhbihjaGFyIGNvbnN0ICpmbXQwLCBfX2dudWNfdmFfbGlzdCAg
YXAsIGlvcyogc3RyZWFtID0gX19udWxsICk7CiAgICBpbnQgc2NhbihjaGFyIGNvbnN0ICpmbXQw
IC4uLik7CiAgICBpbnQgdmZvcm0oY2hhciBjb25zdCAqZm10MCwgX19nbnVjX3ZhX2xpc3QgIGFw
KTsKICAgIGludCBmb3JtKGNoYXIgY29uc3QgKmZtdDAgLi4uKTsKCgoKCiAgICB2aXJ0dWFsIHN0
cmVhbXNpemUgc3lzX3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVh
bCBzdHJlYW1zaXplIHN5c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0
dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFs
IGludCBzeXNfY2xvc2UoKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAoKICAg
IHZpcnR1YWwgaW50IHNob3dtYW55YygpOwogICAgdmlydHVhbCB2b2lkIGltYnVlKHZvaWQgKik7
Cgp9OwoKIAogCgpjbGFzcyBmaWxlYnVmIDogcHVibGljIHN0cmVhbWJ1ZiB7CiAgcHJvdGVjdGVk
OgogICAgdm9pZCBpbml0KCk7CiAgcHVibGljOgogICAgc3RhdGljIGNvbnN0IGludCBvcGVucHJv
dDsgIAogICAgZmlsZWJ1ZigpOwogICAgZmlsZWJ1ZihpbnQgZmQpOwogICAgZmlsZWJ1ZihpbnQg
ZmQsIGNoYXIqIHAsIGludCBsZW4pOwoKCgogICAgfmZpbGVidWYoKTsKICAgIGZpbGVidWYqIGF0
dGFjaChpbnQgZmQpOwogICAgZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29u
c3QgY2hhciAqbW9kZSk7CiAgICBmaWxlYnVmKiBvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBp
b3M6Om9wZW5tb2RlIG1vZGUsIGludCBwcm90ID0gMDY2NCk7CiAgICB2aXJ0dWFsIGludCB1bmRl
cmZsb3coKTsKICAgIHZpcnR1YWwgaW50IG92ZXJmbG93KGludCBjID0gKC0xKSApOwogICAgaW50
IGlzX29wZW4oKSBjb25zdCB7IHJldHVybiBfZmlsZW5vID49IDA7IH0KICAgIGludCBmZCgpIGNv
bnN0IHsgcmV0dXJuIGlzX29wZW4oKSA/IF9maWxlbm8gOiAoLTEpIDsgfQogICAgZmlsZWJ1Ziog
Y2xvc2UoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxsb2NhdGUoKTsKICAgIHZpcnR1YWwgc3RyZWFt
cG9zIHNlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGludCBtb2RlPWlvczo6aW58aW9zOjpv
dXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVuKTsKICAg
IHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICBzdHJl
YW1zaXplIHhzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBpbnQgc3lu
YygpOwogIHByb3RlY3RlZDogIAogCiAgICBpbnQgaXNfcmVhZGluZygpIHsgcmV0dXJuIGViYWNr
KCkgIT0gZWdwdHIoKTsgfQogICAgY2hhciogY3VyX3B0cigpIHsgcmV0dXJuIGlzX3JlYWRpbmco
KSA/ICBncHRyKCkgOiBwcHRyKCk7IH0KICAgICAKICAgIGNoYXIqIGZpbGVfcHRyKCkgeyByZXR1
cm4gZUdwdHIoKTsgfQogICAgIAogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c19yZWFkKGNoYXIq
IGJ1Ziwgc3RyZWFtc2l6ZSBzaXplKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHN5c19zZWVrKHN0
cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfd3JpdGUoY29u
c3QgY2hhciosIHN0cmVhbXNpemUpOwogICAgdmlydHVhbCBpbnQgc3lzX3N0YXQodm9pZCopOyAg
CiAgICB2aXJ0dWFsIGludCBzeXNfY2xvc2UoKTsKCgoKCn07CgppbmxpbmUgdm9pZCBpb3M6Omlu
aXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7CgkJX3N0YXRlID0gc2IgPyBpb3M6
Omdvb2RiaXQgOiBpb3M6OmJhZGJpdDsgX2V4Y2VwdGlvbnM9MDsKCQlfc3RyYnVmPXNiOyBfdGll
ID0gdGllX3RvOyBfd2lkdGg9MDsgX2ZpbGw9JyAnOwoKCQlfZmxhZ3M9aW9zOjpza2lwd3N8aW9z
OjpkZWM7CgoKCgkJX3ByZWNpc2lvbj02OyBfYXJyYXlzID0gMDsgfQoKaW5saW5lIGlvczo6aW9z
KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZV90bykgeyBpbml0KHNiLCB0aWVfdG8pOyB9Cgpp
bmxpbmUgaW9zOjp+aW9zKCkgewoKCgogICAgIAogICAgIAogICAgb3BlcmF0b3IgZGVsZXRlW10g
KF9hcnJheXMpOwp9Cn0gIAoKIyAzMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUu
Mi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDIgMwoKCmV4dGVybiAiQysr
IiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07CnR5cGVkZWYgaW9zJiAoKl9fbWFuaXAp
KGlvcyYpOwp0eXBlZGVmIGlzdHJlYW0mICgqX19pbWFuaXApKGlzdHJlYW0mKTsKdHlwZWRlZiBv
c3RyZWFtJiAoKl9fb21hbmlwKShvc3RyZWFtJik7CgpleHRlcm4gaXN0cmVhbSYgd3MoaXN0cmVh
bSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGZsdXNoKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0
cmVhbSYgZW5kbChvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0mIGVuZHMob3N0cmVhbSYg
b3V0cyk7CgpjbGFzcyBvc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zCnsKICAgICAKICAgIHZv
aWQgZG9fb3NmeCgpOwogIHB1YmxpYzoKICAgIG9zdHJlYW0oKSB7IH0KICAgIG9zdHJlYW0oc3Ry
ZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllZD0gX19udWxsICk7CiAgICBpbnQgb3BmeCgpIHsKCWlm
ICghZ29vZCgpKSByZXR1cm4gMDsKCWVsc2UgeyBpZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsgIDsg
cmV0dXJuIDE7fSB9CiAgICB2b2lkIG9zZngoKSB7ICA7CgkJICBpZiAoZmxhZ3MoKSAmIChpb3M6
OnVuaXRidWZ8aW9zOjpzdGRpbykpCgkJICAgICAgZG9fb3NmeCgpOyB9CiAgICBvc3RyZWFtJiBm
bHVzaCgpOwogICAgb3N0cmVhbSYgcHV0KGNoYXIgYykgeyBfc3RyYnVmLT5zcHV0YyhjKTsgcmV0
dXJuICp0aGlzOyB9CgoKCgoKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IGNoYXIgKnMsIHN0cmVh
bXNpemUgbik7CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCB1bnNpZ25lZCBjaGFyICpzLCBzdHJl
YW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBv
c3RyZWFtJiB3cml0ZShjb25zdCBzaWduZWQgY2hhciAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7
IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgd3JpdGUoY29u
c3Qgdm9pZCAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hh
ciopcywgbik7fQogICAgb3N0cmVhbSYgc2Vla3Aoc3RyZWFtcG9zKTsKICAgIG9zdHJlYW0mIHNl
ZWtwKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0ZWxscCgpOwogICAgb3N0
cmVhbSYgZm9ybShjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIG9zdHJlYW0mIHZmb3JtKGNv
bnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgIGFyZ3MpOwoKICAgIG9zdHJlYW0mIG9w
ZXJhdG9yPDwoY2hhciBjKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgY2hhciBj
KSB7IHJldHVybiAoKnRoaXMpIDw8IChjaGFyKWM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwo
c2lnbmVkIGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFt
JiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIgKnMpOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25z
dCB1bnNpZ25lZCBjaGFyICpzKQoJeyByZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsg
fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBzaWduZWQgY2hhciAqcykKCXsgcmV0dXJu
ICgqdGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29u
c3Qgdm9pZCAqcCk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGludCBuKTsKICAgIG9zdHJlYW0m
IG9wZXJhdG9yPDwodW5zaWduZWQgaW50IG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25n
IG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIG4pOwoKICAgIF9fZXh0
ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIGxvbmcgbik7CiAgICBfX2V4dGVuc2lv
bl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIG4pOwoKICAgIG9zdHJl
YW0mIG9wZXJhdG9yPDwoc2hvcnQgbikge3JldHVybiBvcGVyYXRvcjw8KChpbnQpbik7fQogICAg
b3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwo
KHVuc2lnbmVkIGludCluKTt9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChib29sIGIpIHsgcmV0
dXJuIG9wZXJhdG9yPDwoKGludCliKTsgfQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZG91Ymxl
IG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChmbG9hdCBuKSB7IHJldHVybiBvcGVyYXRvcjw8
KChkb3VibGUpbik7IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIG4pOwoK
CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChfX29tYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMp
KCp0aGlzKTsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChfX21hbmlwIGZ1bmMpIHsoKmZ1bmMp
KCp0aGlzKTsgcmV0dXJuICp0aGlzO30KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc3RyZWFtYnVm
Kik7CgoKCn07CgpjbGFzcyBpc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zCnsKICAgICAKcHJv
dGVjdGVkOgogICAgc2l6ZV90ICAgX2djb3VudDsKCiAgICBpbnQgX3NraXBfd3MoKTsKICBwdWJs
aWM6CiAgICBpc3RyZWFtKCk6IF9nY291bnQgKDApIHsgfQogICAgaXN0cmVhbShzdHJlYW1idWYq
IHNiLCBvc3RyZWFtKnRpZWQ9IF9fbnVsbCApOwogICAgaXN0cmVhbSYgZ2V0KGNoYXIqIHB0ciwg
aW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNo
YXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNoYXIq
KXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldChjaGFyJiBjKTsKICAgIGlzdHJl
YW0mIGdldCh1bnNpZ25lZCBjaGFyJiBjKSB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBp
c3RyZWFtJiBnZXRsaW5lKGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwog
ICAgaXN0cmVhbSYgZ2V0bGluZSh1bnNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVs
aW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQog
ICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBjaGFyJiBjKSAgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsg
fQogICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0g
PSAnXG4nKQoJeyByZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3Ry
ZWFtJiBnZXRsaW5lKHNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4n
KQoJeyByZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVh
bSYgcmVhZChjaGFyICpwdHIsIHN0cmVhbXNpemUgbik7CiAgICBpc3RyZWFtJiByZWFkKHVuc2ln
bmVkIGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilw
dHIsIG4pOyB9CiAgICBpc3RyZWFtJiByZWFkKHNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUg
bikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVh
ZCh2b2lkICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRy
LCBuKTsgfQogICAgaXN0cmVhbSYgZ2V0KHN0cmVhbWJ1ZiYgc2IsIGNoYXIgZGVsaW0gPSAnXG4n
KTsKICAgIGlzdHJlYW0mIGdldHMoY2hhciAqKnMsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlu
dCBpcGZ4KGludCBuZWVkID0gMCkgewoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7
IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgKG5lZWQgPT0gMCB8fCBy
ZGJ1ZigpLT5pbl9hdmFpbCgpIDwgbmVlZCkpIF90aWUtPmZsdXNoKCk7CgkgIGlmICghbmVlZCAm
JiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSkgcmV0dXJuIF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0
dXJuIDE7Cgl9CiAgICB9CiAgICBpbnQgaXBmeDAoKSB7ICAKCWlmICghZ29vZCgpKSB7IHNldChp
b3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllKSBfdGll
LT5mbHVzaCgpOwoJICBpZiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSByZXR1cm4gX3NraXBfd3Mo
KTsKCSAgZWxzZSByZXR1cm4gMTsKCX0KICAgIH0KICAgIGludCBpcGZ4MSgpIHsgIAoJaWYgKCFn
b29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAg
aWYgKF90aWUgJiYgcmRidWYoKS0+aW5fYXZhaWwoKSA9PSAwKSBfdGllLT5mbHVzaCgpOwoJICBy
ZXR1cm4gMTsKCX0KICAgIH0KICAgIHZvaWQgaXNmeCgpIHsgIDsgfQogICAgaW50IGdldCgpIHsg
aWYgKCFpcGZ4MSgpKSByZXR1cm4gKC0xKSA7CgkJZWxzZSB7IGludCBjaCA9IF9zdHJidWYtPnNi
dW1wYygpOwoJCSAgICAgICBpZiAoY2ggPT0gKC0xKSApIHNldChpb3M6OmVvZmJpdCk7CgkJICAg
ICAgIGlzZngoKTsKCQkgICAgICAgcmV0dXJuIGNoOwoJCSAgICAgfSB9CiAgICBpbnQgcGVlaygp
OwogICAgc2l6ZV90ICAgZ2NvdW50KCkgeyByZXR1cm4gX2djb3VudDsgfQogICAgaXN0cmVhbSYg
aWdub3JlKGludCBuPTEsIGludCBkZWxpbSA9ICgtMSkgKTsKICAgIGludCBzeW5jICgpOwogICAg
aXN0cmVhbSYgc2Vla2coc3RyZWFtcG9zKTsKICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbW9mZiwg
X3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0ZWxsZygpOwogICAgaXN0cmVhbSYgcHV0YmFjayhj
aGFyIGNoKSB7CglpZiAoZ29vZCgpICYmIF9zdHJidWYtPnNwdXRiYWNrYyhjaCkgPT0gKC0xKSAp
IGNsZWFyKGlvczo6YmFkYml0KTsKCXJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiB1bmdldCgp
IHsKCWlmIChnb29kKCkgJiYgX3N0cmJ1Zi0+c3VuZ2V0YygpID09ICgtMSkgKSBjbGVhcihpb3M6
OmJhZGJpdCk7CglyZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgc2Nhbihjb25zdCBjaGFyICpm
b3JtYXQgLi4uKTsKICAgIGlzdHJlYW0mIHZzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVj
X3ZhX2xpc3QgIGFyZ3MpOwoKCgoKCgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyKik7CiAg
ICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNoYXIqIHApIHsgcmV0dXJuIG9wZXJhdG9y
Pj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyKnApIHsg
cmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNo
YXImIGMpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBjaGFyJiBjKSB7cmV0dXJu
IG9wZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNo
YXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0
b3I+PihpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyYpOwoKICAgIF9fZXh0ZW5z
aW9uX18gaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nIGxvbmcmKTsKICAgIF9fZXh0ZW5zaW9uX18g
aXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmKTsKCiAgICBpc3RyZWFtJiBv
cGVyYXRvcj4+KHNob3J0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYp
OwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJik7CiAgICBpc3RyZWFtJiBv
cGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0Jik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihib29s
Jik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihmbG9hdCYpOwogICAgaXN0cmVhbSYgb3BlcmF0
b3I+Pihkb3VibGUmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmKTsKICAg
IGlzdHJlYW0mIG9wZXJhdG9yPj4oIF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1
cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihfX2ltYW5pcCBmdW5jKSB7IHJldHVy
biAoKmZ1bmMpKCp0aGlzKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzdHJlYW1idWYqKTsK
fTsKCmNsYXNzIGlvc3RyZWFtIDogcHVibGljIGlzdHJlYW0sIHB1YmxpYyBvc3RyZWFtCnsKICBw
dWJsaWM6CiAgICBpb3N0cmVhbSgpIHsgfQogICAgaW9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0
cmVhbSp0aWVkPSBfX251bGwgKTsKfTsKCmNsYXNzIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gOiBw
dWJsaWMgaXN0cmVhbSB7CnB1YmxpYzoKICBfSU9faXN0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRv
cj0oaXN0cmVhbSYpOwogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShfSU9faXN0
cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0YXRpY19jYXN0
PGlzdHJlYW0mPiAocmhzKSk7IH0KfTsKCmNsYXNzIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gOiBw
dWJsaWMgb3N0cmVhbSB7CnB1YmxpYzoKICBfSU9fb3N0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRv
cj0ob3N0cmVhbSYpOwogIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShfSU9fb3N0
cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0YXRpY19jYXN0
PG9zdHJlYW0mPiAocmhzKSk7IH0KfTsKCmV4dGVybiBfSU9faXN0cmVhbV93aXRoYXNzaWduIGNp
bjsKIApleHRlcm4gX0lPX29zdHJlYW1fd2l0aGFzc2lnbiBjb3V0LCBjZXJyOwoKZXh0ZXJuIF9J
T19vc3RyZWFtX3dpdGhhc3NpZ24gY2xvZwoKCgo7CgpleHRlcm4gaXN0cmVhbSYgbG9jayhpc3Ry
ZWFtJiBpbnMpOwpleHRlcm4gaXN0cmVhbSYgdW5sb2NrKGlzdHJlYW0mIGlucyk7CmV4dGVybiBv
c3RyZWFtJiBsb2NrKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgdW5sb2NrKG9zdHJl
YW0mIG91dHMpOwoKc3RydWN0IElvc3RyZWFtX2luaXQgeyB9IDsgICAKCmlubGluZSBpb3MmIGRl
Yyhpb3MmIGkpCnsgaS5zZXRmKGlvczo6ZGVjLCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7
IHJldHVybiBpOyB9CmlubGluZSBpb3MmIGhleChpb3MmIGkpCnsgaS5zZXRmKGlvczo6aGV4LCBp
b3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9CmlubGluZSBpb3MmIG9jdChp
b3MmIGkpCnsgaS5zZXRmKGlvczo6b2N0LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJl
dHVybiBpOyB9Cn0gIAoKCiMgNyAibGluZWwuY2MiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL21hdGgu
aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCmV4dGVybiAiQyIgeyAKCiAKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgogCgojIDgxICIvdXNyL2luY2x1ZGUvYml0cy9odWdl
X3ZhbC5oIiAzCgojIDMzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgogCgoKCiAKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMg
NDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMwoKIyA0MCAiL3Vzci9pbmNsdWRlL21h
dGguaCIgMiAzCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
bWF0aGNhbGxzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYWNvcyAgICAgICAgICAo
ZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYWNv
cyAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBkb3Vi
bGUgICAgICAgICAgYXNpbiAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4
dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYXNpbiAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRo
cm93ICgpICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYXRhbiAgICAgICAgICAoZG91
YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYXRhbiAg
ICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBkb3VibGUg
ICAgICAgICAgYXRhbjIgICAgICAgICAgKGRvdWJsZSAgX195LCBkb3VibGUgIF9feCkgICAgdGhy
b3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19hdGFuMiAgICAgICAgICAoZG91Ymxl
ICBfX3ksIGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAg
ICAgICAgICBjb3MgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4g
ICBkb3VibGUgICAgICAgICBfX2NvcyAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgp
ICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgc2luICAgICAgICAgIChkb3VibGUgIF9f
eCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19zaW4gICAgICAgICAg
KGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAg
IHRhbiAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJs
ZSAgICAgICAgIF9fdGFuICAgICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkgICAgOwoK
CgoKCgoKIAoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgY29zaCAgICAgICAgICAoZG91Ymxl
ICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fY29zaCAgICAg
ICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBkb3VibGUgICAg
ICAgICAgc2luaCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAg
IGRvdWJsZSAgICAgICAgIF9fc2luaCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgp
ICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgdGFuaCAgICAgICAgICAoZG91YmxlICBf
X3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fdGFuaCAgICAgICAg
ICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKCgogCmV4dGVybiAgIGRvdWJsZSAgICAg
ICAgICBhY29zaCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAg
IGRvdWJsZSAgICAgICAgIF9fYWNvc2ggICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAo
KSAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGFzaW5oICAgICAgICAgIChkb3VibGUg
IF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19hc2luaCAgICAg
ICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBkb3VibGUgICAg
ICAgICAgYXRhbmggICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4g
ICBkb3VibGUgICAgICAgICBfX2F0YW5oICAgICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cg
KCkgICAgOwoKCiAKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGV4cCAgICAgICAgICAoZG91
YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fZXhwICAg
ICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKCgoKCgoKCiAKZXh0ZXJuICAg
ZG91YmxlICAgICAgICAgIGZyZXhwICAgICAgICAgIChkb3VibGUgIF9feCwgaW50ICpfX2V4cG9u
ZW50KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2ZyZXhwICAgICAg
ICAgIChkb3VibGUgIF9feCwgaW50ICpfX2V4cG9uZW50KSAgICB0aHJvdyAoKSAgICA7CgogCmV4
dGVybiAgIGRvdWJsZSAgICAgICAgICBsZGV4cCAgICAgICAgICAoZG91YmxlICBfX3gsIGludCBf
X2V4cG9uZW50KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2xkZXhw
ICAgICAgICAgIChkb3VibGUgIF9feCwgaW50IF9fZXhwb25lbnQpICAgIHRocm93ICgpICAgIDsK
CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGxvZyAgICAgICAgICAoZG91YmxlICBfX3gpICAg
IHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbG9nICAgICAgICAgIChkb3Vi
bGUgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgbG9n
MTAgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUg
ICAgICAgICBfX2xvZzEwICAgICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkgICAgOwoK
IApleHRlcm4gICBkb3VibGUgICAgICAgICAgbW9kZiAgICAgICAgICAoZG91YmxlICBfX3gsIGRv
dWJsZSAgKl9faXB0cikgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19t
b2RmICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICAqX19pcHRyKSAgICB0aHJvdyAoKSAg
ICA7CgoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgZXhwbTEgICAgICAgICAgKGRvdWJsZSAg
X194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2V4cG0xICAgICAg
ICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAg
ICAgICAgbG9nMXAgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4g
ICBkb3VibGUgICAgICAgICBfX2xvZzFwICAgICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cg
KCkgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgbG9nYiAgICAgICAgICAoZG91Ymxl
ICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbG9nYiAgICAg
ICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKCgoKCgoKCgoKCgogCgogCmV4dGVy
biAgIGRvdWJsZSAgICAgICAgICBwb3cgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9f
eSkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19wb3cgICAgICAgICAg
KGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBk
b3VibGUgICAgICAgICAgc3FydCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7
IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fc3FydCAgICAgICAgICAoZG91YmxlICBfX3gpICAg
IHRocm93ICgpICAgIDsKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBoeXBvdCAgICAgICAg
ICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3Vi
bGUgICAgICAgICBfX2h5cG90ICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAg
IHRocm93ICgpICAgIDsKCgoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgY2JydCAgICAgICAg
ICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9f
Y2JydCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKCgoKIAoKIApleHRl
cm4gICBkb3VibGUgICAgICAgICAgY2VpbCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93
ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fY2VpbCAgICAgICAgICAoZG91YmxlICBf
X3gpICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGZhYnMgICAg
ICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKCAgICAoX19j
b25zdF9fKSAgKTsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19mYWJzICAgICAgICAgIChkb3Vi
bGUgIF9feCkgICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICkg
IDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGZsb29yICAgICAgICAgIChkb3VibGUgIF9f
eCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19mbG9vciAgICAgICAg
ICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAg
ICAgIGZtb2QgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgdGhyb3cgKCkg
IDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19mbW9kICAgICAgICAgIChkb3VibGUgIF9feCwg
ZG91YmxlICBfX3kpICAgIHRocm93ICgpICAgIDsKCgogCgpleHRlcm4gIGludCAgICAgX19pc2lu
ZiAgICAgIChkb3VibGUgIF9fdmFsdWUpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCiAKZXh0ZXJuICBpbnQgICAgIF9fZmluaXRlICAgICAgKGRvdWJsZSAgX192YWx1
ZSkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCiAKCmV4dGVybiAg
aW50ICAgICBpc2luZiAgICAgIChkb3VibGUgIF9fdmFsdWUpICB0aHJvdyAoKSAgIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCiAKZXh0ZXJuICBpbnQgICAgIGZpbml0ZSAgICAgIChkb3Vi
bGUgIF9fdmFsdWUpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiAK
CgoKCgpleHRlcm4gICBkb3VibGUgICAgICAgICAgaW5mbmFuICAgICAgICAgIChpbnQgX19lcnJv
cikgICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4dGVy
biAgIGRvdWJsZSAgICAgICAgIF9faW5mbmFuICAgICAgICAgIChpbnQgX19lcnJvcikgICAgdGhy
b3cgKCkgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICkgIDsKCiAKZXh0ZXJuICAg
ZG91YmxlICAgICAgICAgIGRyZW0gICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkg
ICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19kcmVtICAgICAgICAgIChk
b3VibGUgIF9feCwgZG91YmxlICBfX3kpICAgIHRocm93ICgpICAgIDsKCgogCmV4dGVybiAgIGRv
dWJsZSAgICAgICAgICBzaWduaWZpY2FuZCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93
ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fc2lnbmlmaWNhbmQgICAgICAgICAgKGRv
dWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7CgoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAg
IGNvcHlzaWduICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAgIHRocm93ICgp
ICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4gICBkb3VibGUgICAg
ICAgICBfX2NvcHlzaWduICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAgIHRo
cm93ICgpICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgoKCgoKCgoKIApl
eHRlcm4gIGludCAgICAgX19pc25hbiAgICAgIChkb3VibGUgIF9fdmFsdWUpICB0aHJvdyAoKSAg
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgogCmV4dGVybiAgaW50ICAgICBpc25hbiAg
ICAgIChkb3VibGUgIF9fdmFsdWUpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGowICAgICAgICAgIChkb3VibGUgKSAg
ICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2owICAgICAgICAgIChkb3Vi
bGUgKSAgICB0aHJvdyAoKSAgICA7CmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBqMSAgICAgICAg
ICAoZG91YmxlICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19qMSAg
ICAgICAgICAoZG91YmxlICkgICAgdGhyb3cgKCkgICAgOwpleHRlcm4gICBkb3VibGUgICAgICAg
ICAgam4gICAgICAgICAgKGludCwgZG91YmxlICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91
YmxlICAgICAgICAgX19qbiAgICAgICAgICAoaW50LCBkb3VibGUgKSAgICB0aHJvdyAoKSAgICA7
CmV4dGVybiAgIGRvdWJsZSAgICAgICAgICB5MCAgICAgICAgICAoZG91YmxlICkgICAgdGhyb3cg
KCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX195MCAgICAgICAgICAoZG91YmxlICkgICAg
dGhyb3cgKCkgICAgOwpleHRlcm4gICBkb3VibGUgICAgICAgICAgeTEgICAgICAgICAgKGRvdWJs
ZSApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9feTEgICAgICAgICAg
KGRvdWJsZSApICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIHluICAg
ICAgICAgIChpbnQsIGRvdWJsZSApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAg
ICAgIF9feW4gICAgICAgICAgKGludCwgZG91YmxlICkgICAgdGhyb3cgKCkgICAgOwoKCgoKIApl
eHRlcm4gICBkb3VibGUgICAgICAgICAgZXJmICAgICAgICAgIChkb3VibGUgKSAgICB0aHJvdyAo
KSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2VyZiAgICAgICAgICAoZG91YmxlICkgICAg
dGhyb3cgKCkgICAgOwpleHRlcm4gICBkb3VibGUgICAgICAgICAgZXJmYyAgICAgICAgICAoZG91
YmxlICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19lcmZjICAgICAg
ICAgIChkb3VibGUgKSAgICB0aHJvdyAoKSAgICA7CmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBs
Z2FtbWEgICAgICAgICAgKGRvdWJsZSApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAg
ICAgICAgIF9fbGdhbW1hICAgICAgICAgIChkb3VibGUgKSAgICB0aHJvdyAoKSAgICA7CgoKCgoK
CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBnYW1tYSAgICAgICAgICAoZG91YmxlICkgICAg
dGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19nYW1tYSAgICAgICAgICAoZG91
YmxlICkgICAgdGhyb3cgKCkgICAgOwoKCgogCgoKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGxn
YW1tYV9yICAgICAgICAgICAgICAoZG91YmxlICwgaW50ICpfX3NpZ25nYW1wKSAgICB0aHJvdyAo
KSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2xnYW1tYV9yICAgICAgICAgICAgICAoZG91
YmxlICwgaW50ICpfX3NpZ25nYW1wKSAgICB0aHJvdyAoKSAgICA7CgoKCgogCgpleHRlcm4gICBk
b3VibGUgICAgICAgICAgcmludCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7
IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fcmludCAgICAgICAgICAoZG91YmxlICBfX3gpICAg
IHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIG5leHRhZnRlciAgICAg
ICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICB0aHJvdyAoKSAgIF9fYXR0cmlidXRl
X18gKCAgICAoX19jb25zdF9fKSAgKTsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19uZXh0YWZ0
ZXIgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgdGhyb3cgKCkgICBfX2F0
dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICkgIDsKCgoKCiAKZXh0ZXJuICAgZG91YmxlICAg
ICAgICAgIHJlbWFpbmRlciAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICB0
aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3JlbWFpbmRlciAgICAgICAgICAo
ZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRlcm4gICBk
b3VibGUgICAgICAgICAgc2NhbGIgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9fbikg
ICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19zY2FsYiAgICAgICAgICAo
ZG91YmxlICBfX3gsIGRvdWJsZSAgX19uKSAgICB0aHJvdyAoKSAgICA7CgoKCiAKZXh0ZXJuICAg
ZG91YmxlICAgICAgICAgIHNjYWxibiAgICAgICAgICAoZG91YmxlICBfX3gsIGludCBfX24pICAg
IHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fc2NhbGJuICAgICAgICAgIChk
b3VibGUgIF9feCwgaW50IF9fbikgICAgdGhyb3cgKCkgICAgOwoKCiAKZXh0ZXJuICAgaW50ICAg
ICAgICBpbG9nYiAgICAgICAgKGRvdWJsZSAgX194KSAgIHRocm93ICgpICA7IGV4dGVybiAgIGlu
dCAgICAgICAgX19pbG9nYiAgICAgICAgKGRvdWJsZSAgX194KSAgIHRocm93ICgpICAgOwoKCiMg
MzQxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwoKIyA2MyAiL3Vzci9pbmNsdWRl
L21hdGguaCIgMiAzCgoKCgoKCgogCgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9t
YXRoY2FsbHMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGFjb3NmICAgICAgICAgKGZs
b2F0ICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fYWNvc2Yg
ICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBmbG9hdCAg
ICAgICAgICBhc2luZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJu
ICAgZmxvYXQgICAgICAgICBfX2FzaW5mICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAo
KSAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgYXRhbmYgICAgICAgICAoZmxvYXQgICBf
X3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19hdGFuZiAgICAgICAg
IChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAgOwogCmV4dGVybiAgIGZsb2F0ICAgICAgICAg
IGF0YW4yZiAgICAgICAgIChmbG9hdCAgIF9feSwgZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7
IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19hdGFuMmYgICAgICAgICAoZmxvYXQgICBfX3ksIGZs
b2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGNv
c2YgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAg
ICAgICAgX19jb3NmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0
ZXJuICAgZmxvYXQgICAgICAgICAgc2luZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cg
KCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3NpbmYgICAgICAgICAoZmxvYXQgICBfX3gp
ICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBmbG9hdCAgICAgICAgICB0YW5mICAgICAgICAg
KGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fdGFu
ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKCgoKCgoKIAoKIApleHRl
cm4gICBmbG9hdCAgICAgICAgICBjb3NoZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cg
KCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2Nvc2hmICAgICAgICAgKGZsb2F0ICAgX194
KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgc2luaGYgICAgICAg
ICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19z
aW5oZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAgOwogCmV4dGVybiAgIGZs
b2F0ICAgICAgICAgIHRhbmhmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgOyBl
eHRlcm4gICBmbG9hdCAgICAgICAgIF9fdGFuaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRo
cm93ICgpICAgIDsKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGFjb3NoZiAgICAgICAgIChm
bG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2Fjb3No
ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAgOwogCmV4dGVybiAgIGZsb2F0
ICAgICAgICAgIGFzaW5oZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0
ZXJuICAgZmxvYXQgICAgICAgICBfX2FzaW5oZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhy
b3cgKCkgICAgOwogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGF0YW5oZiAgICAgICAgIChmbG9h
dCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2F0YW5oZiAg
ICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKCiAKCiAKZXh0ZXJuICAgZmxv
YXQgICAgICAgICAgZXhwZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0
ZXJuICAgZmxvYXQgICAgICAgICBfX2V4cGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93
ICgpICAgIDsKCgoKCgoKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGZyZXhwZiAgICAgICAg
IChmbG9hdCAgIF9feCwgaW50ICpfX2V4cG9uZW50KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBm
bG9hdCAgICAgICAgIF9fZnJleHBmICAgICAgICAgKGZsb2F0ICAgX194LCBpbnQgKl9fZXhwb25l
bnQpICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgbGRleHBmICAg
ICAgICAgKGZsb2F0ICAgX194LCBpbnQgX19leHBvbmVudCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJu
ICAgZmxvYXQgICAgICAgICBfX2xkZXhwZiAgICAgICAgIChmbG9hdCAgIF9feCwgaW50IF9fZXhw
b25lbnQpICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgbG9nZiAg
ICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAg
ICBfX2xvZ2YgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJu
ICAgZmxvYXQgICAgICAgICAgbG9nMTBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAo
KSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbG9nMTBmICAgICAgICAgKGZsb2F0ICAgX194
KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIG1vZGZmICAgICAg
ICAgKGZsb2F0ICAgX194LCBmbG9hdCAgICpfX2lwdHIpICAgIHRocm93ICgpICA7IGV4dGVybiAg
IGZsb2F0ICAgICAgICAgX19tb2RmZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICAqX19p
cHRyKSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBleHBtMWYg
ICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAg
ICAgX19leHBtMWYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICAgIDsKCiAKZXh0
ZXJuICAgZmxvYXQgICAgICAgICAgbG9nMXBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJv
dyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbG9nMXBmICAgICAgICAgKGZsb2F0ICAg
X194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGxvZ2JmICAg
ICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAg
IF9fbG9nYmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICAgIDsKCgoKCgoKCgoK
CgogCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHBvd2YgICAgICAgICAoZmxvYXQgICBfX3gs
IGZsb2F0ICAgX195KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fcG93
ZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgIHRocm93ICgpICAgIDsKCiAK
ZXh0ZXJuICAgZmxvYXQgICAgICAgICAgc3FydGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRo
cm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19zcXJ0ZiAgICAgICAgIChmbG9hdCAg
IF9feCkgICAgdGhyb3cgKCkgICAgOwoKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgaHlwb3Rm
ICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgdGhyb3cgKCkgIDsgZXh0ZXJu
ICAgZmxvYXQgICAgICAgICBfX2h5cG90ZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBf
X3kpICAgIHRocm93ICgpICAgIDsKCgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBjYnJ0ZiAg
ICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAg
ICBfX2NicnRmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CgoKCiAKCiAK
ZXh0ZXJuICAgZmxvYXQgICAgICAgICAgY2VpbGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRo
cm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19jZWlsZiAgICAgICAgIChmbG9hdCAg
IF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBmYWJzZiAg
ICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICggICAgKF9f
Y29uc3RfXykgICk7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19mYWJzZiAgICAgICAgIChmbG9h
dCAgIF9feCkgICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICkg
IDsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgZmxvb3JmICAgICAgICAgKGZsb2F0ICAgX194
KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fZmxvb3JmICAgICAgICAg
KGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAg
IGZtb2RmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgdGhyb3cgKCkgIDsg
ZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2Ztb2RmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9h
dCAgIF9feSkgICAgdGhyb3cgKCkgICAgOwoKCiAKCmV4dGVybiAgaW50ICAgIF9faXNpbmZmICAg
ICAoZmxvYXQgICBfX3ZhbHVlKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgogCmV4dGVybiAgaW50ICAgIF9fZmluaXRlZiAgICAgKGZsb2F0ICAgX192YWx1ZSkgIHRo
cm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCiAKCmV4dGVybiAgaW50ICAg
IGlzaW5mZiAgICAgKGZsb2F0ICAgX192YWx1ZSkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKIApleHRlcm4gIGludCAgICBmaW5pdGVmICAgICAoZmxvYXQgICBfX3Zh
bHVlKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgogCgoKCgoKZXh0
ZXJuICAgZmxvYXQgICAgICAgICAgaW5mbmFuZiAgICAgICAgIChpbnQgX19lcnJvcikgICAgdGhy
b3cgKCkgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4dGVybiAgIGZsb2F0
ICAgICAgICAgX19pbmZuYW5mICAgICAgICAgKGludCBfX2Vycm9yKSAgICB0aHJvdyAoKSAgIF9f
YXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKSAgOwoKIApleHRlcm4gICBmbG9hdCAgICAg
ICAgICBkcmVtZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgIHRocm93ICgp
ICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19kcmVtZiAgICAgICAgIChmbG9hdCAgIF9feCwg
ZmxvYXQgICBfX3kpICAgIHRocm93ICgpICAgIDsKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAg
IHNpZ25pZmljYW5kZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJu
ICAgZmxvYXQgICAgICAgICBfX3NpZ25pZmljYW5kZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAg
dGhyb3cgKCkgICAgOwoKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGNvcHlzaWduZiAgICAg
ICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgIHRocm93ICgpICAgX19hdHRyaWJ1dGVf
XyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fY29weXNpZ25m
ICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgdGhyb3cgKCkgICBfX2F0dHJp
YnV0ZV9fICggICAgKF9fY29uc3RfXykgICkgIDsKCgoKCgoKCgogCmV4dGVybiAgaW50ICAgIF9f
aXNuYW5mICAgICAoZmxvYXQgICBfX3ZhbHVlKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKIApleHRlcm4gIGludCAgICBpc25hbmYgICAgIChmbG9hdCAgIF9fdmFs
dWUpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiAKZXh0ZXJuICAg
ZmxvYXQgICAgICAgICAgajBmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICA7IGV4dGVy
biAgIGZsb2F0ICAgICAgICAgX19qMGYgICAgICAgICAoZmxvYXQgICkgICAgdGhyb3cgKCkgICAg
OwpleHRlcm4gICBmbG9hdCAgICAgICAgICBqMWYgICAgICAgICAoZmxvYXQgICkgICAgdGhyb3cg
KCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2oxZiAgICAgICAgIChmbG9hdCAgKSAgICB0
aHJvdyAoKSAgICA7CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGpuZiAgICAgICAgIChpbnQsIGZs
b2F0ICApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19qbmYgICAgICAg
ICAoaW50LCBmbG9hdCAgKSAgICB0aHJvdyAoKSAgICA7CmV4dGVybiAgIGZsb2F0ICAgICAgICAg
IHkwZiAgICAgICAgIChmbG9hdCAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAg
ICAgIF9feTBmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAgZmxv
YXQgICAgICAgICAgeTFmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICA7IGV4dGVybiAg
IGZsb2F0ICAgICAgICAgX195MWYgICAgICAgICAoZmxvYXQgICkgICAgdGhyb3cgKCkgICAgOwpl
eHRlcm4gICBmbG9hdCAgICAgICAgICB5bmYgICAgICAgICAoaW50LCBmbG9hdCAgKSAgICB0aHJv
dyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9feW5mICAgICAgICAgKGludCwgZmxvYXQg
ICkgICAgdGhyb3cgKCkgICAgOwoKCgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBlcmZmICAg
ICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19l
cmZmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAgZmxvYXQgICAg
ICAgICAgZXJmY2YgICAgICAgICAoZmxvYXQgICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxv
YXQgICAgICAgICBfX2VyZmNmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICAgIDsKZXh0
ZXJuICAgZmxvYXQgICAgICAgICAgbGdhbW1hZiAgICAgICAgIChmbG9hdCAgKSAgICB0aHJvdyAo
KSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbGdhbW1hZiAgICAgICAgIChmbG9hdCAgKSAg
ICB0aHJvdyAoKSAgICA7CgoKCgoKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGdhbW1hZiAg
ICAgICAgIChmbG9hdCAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9f
Z2FtbWFmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICAgIDsKCgoKIAoKCmV4dGVybiAg
IGZsb2F0ICAgICAgICAgIGxnYW1tYWZfciAgICAgICAgICAgIChmbG9hdCAgLCBpbnQgKl9fc2ln
bmdhbXApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19sZ2FtbWFmX3Ig
ICAgICAgICAgICAoZmxvYXQgICwgaW50ICpfX3NpZ25nYW1wKSAgICB0aHJvdyAoKSAgICA7CgoK
CgogCgpleHRlcm4gICBmbG9hdCAgICAgICAgICByaW50ZiAgICAgICAgIChmbG9hdCAgIF9feCkg
ICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3JpbnRmICAgICAgICAgKGZs
b2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIG5l
eHRhZnRlcmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICB0aHJvdyAoKSAg
IF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKTsgZXh0ZXJuICAgZmxvYXQgICAgICAg
ICBfX25leHRhZnRlcmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICB0aHJv
dyAoKSAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKSAgOwoKCgoKIApleHRlcm4g
ICBmbG9hdCAgICAgICAgICByZW1haW5kZXJmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAg
IF9feSkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3JlbWFpbmRlcmYg
ICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICB0aHJvdyAoKSAgICA7CgoKIApl
eHRlcm4gICBmbG9hdCAgICAgICAgICBzY2FsYmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0
ICAgX19uKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fc2NhbGJmICAg
ICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9fbikgICAgdGhyb3cgKCkgICAgOwoKCgogCmV4
dGVybiAgIGZsb2F0ICAgICAgICAgIHNjYWxibmYgICAgICAgICAoZmxvYXQgICBfX3gsIGludCBf
X24pICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19zY2FsYm5mICAgICAg
ICAgKGZsb2F0ICAgX194LCBpbnQgX19uKSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRlcm4gICBp
bnQgICAgICAgaWxvZ2JmICAgICAgIChmbG9hdCAgIF9feCkgICB0aHJvdyAoKSAgOyBleHRlcm4g
ICBpbnQgICAgICAgX19pbG9nYmYgICAgICAgKGZsb2F0ICAgX194KSAgIHRocm93ICgpICAgOwoK
CiMgMzQxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwoKIyA4MiAiL3Vzci9pbmNs
dWRlL21hdGguaCIgMiAzCgoKCgoKIAoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
bWF0aGNhbGxzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBhY29zbCAgICAg
ICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3Vi
bGUgICAgICAgICBfX2Fjb3NsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAo
KSAgICA7CiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgYXNpbmwgICAgICAgICAobG9u
ZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAg
ICAgX19hc2lubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwog
CmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGF0YW5sICAgICAgICAgKGxvbmcgZG91Ymxl
ICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fYXRh
bmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4g
ICBsb25nIGRvdWJsZSAgICAgICAgICBhdGFuMmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3ks
IGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAg
ICAgICAgIF9fYXRhbjJsICAgICAgICAgKGxvbmcgZG91YmxlICAgX195LCBsb25nIGRvdWJsZSAg
IF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBj
b3NsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBs
b25nIGRvdWJsZSAgICAgICAgIF9fY29zbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAg
dGhyb3cgKCkgICAgOwogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIHNpbmwgICAgICAg
ICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91Ymxl
ICAgICAgICAgX19zaW5sICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAg
ICA7CiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgdGFubCAgICAgICAgIChsb25nIGRv
dWJsZSAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBf
X3RhbmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKCgoKCgoK
CiAKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgY29zaGwgICAgICAgICAobG9uZyBk
b3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAg
X19jb3NobCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwogCmV4
dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIHNpbmhsICAgICAgICAgKGxvbmcgZG91YmxlICAg
X194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fc2luaGwg
ICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBs
b25nIGRvdWJsZSAgICAgICAgICB0YW5obCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAg
dGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3RhbmhsICAgICAgICAg
KGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRlcm4gICBsb25nIGRv
dWJsZSAgICAgICAgICBhY29zaGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93
ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19hY29zaGwgICAgICAgICAobG9u
ZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBsb25nIGRvdWJsZSAg
ICAgICAgICBhc2luaGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7
IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19hc2luaGwgICAgICAgICAobG9uZyBkb3Vi
bGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAg
ICBhdGFuaGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVy
biAgIGxvbmcgZG91YmxlICAgICAgICAgX19hdGFuaGwgICAgICAgICAobG9uZyBkb3VibGUgICBf
X3gpICAgIHRocm93ICgpICAgIDsKCgogCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAg
IGV4cGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAg
IGxvbmcgZG91YmxlICAgICAgICAgX19leHBsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAg
ICB0aHJvdyAoKSAgICA7CgoKCgoKCgoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBm
cmV4cGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGludCAqX19leHBvbmVudCkgICAgdGhy
b3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2ZyZXhwbCAgICAgICAgIChs
b25nIGRvdWJsZSAgIF9feCwgaW50ICpfX2V4cG9uZW50KSAgICB0aHJvdyAoKSAgICA7CgogCmV4
dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGxkZXhwbCAgICAgICAgIChsb25nIGRvdWJsZSAg
IF9feCwgaW50IF9fZXhwb25lbnQpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91Ymxl
ICAgICAgICAgX19sZGV4cGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGludCBfX2V4cG9u
ZW50KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGxv
Z2wgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxv
bmcgZG91YmxlICAgICAgICAgX19sb2dsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0
aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGxvZzEwbCAgICAg
ICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3Vi
bGUgICAgICAgICBfX2xvZzEwbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cg
KCkgICAgOwoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBtb2RmbCAgICAgICAgIChs
b25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICAqX19pcHRyKSAgICB0aHJvdyAoKSAgOyBl
eHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fbW9kZmwgICAgICAgICAobG9uZyBkb3VibGUg
ICBfX3gsIGxvbmcgZG91YmxlICAgKl9faXB0cikgICAgdGhyb3cgKCkgICAgOwoKCiAKZXh0ZXJu
ICAgbG9uZyBkb3VibGUgICAgICAgICAgZXhwbTFsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194
KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fZXhwbTFsICAg
ICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGxv
bmcgZG91YmxlICAgICAgICAgIGxvZzFwbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAg
dGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2xvZzFwbCAgICAgICAg
IChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBsb25nIGRv
dWJsZSAgICAgICAgICBsb2dibCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cg
KCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2xvZ2JsICAgICAgICAgKGxvbmcg
ZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgICA7CgoKCgoKCgoKCgoKIAoKIApleHRlcm4gICBs
b25nIGRvdWJsZSAgICAgICAgICBwb3dsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194LCBsb25n
IGRvdWJsZSAgIF9feSkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAg
ICBfX3Bvd2wgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAg
ICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIHNxcnRsICAg
ICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRv
dWJsZSAgICAgICAgIF9fc3FydGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93
ICgpICAgIDsKCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGh5cG90bCAgICAgICAg
IChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgIHRocm93ICgpICA7IGV4
dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19oeXBvdGwgICAgICAgICAobG9uZyBkb3VibGUg
ICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICB0aHJvdyAoKSAgICA7CgoKCiAKZXh0ZXJuICAg
bG9uZyBkb3VibGUgICAgICAgICAgY2JydGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAg
IHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19jYnJ0bCAgICAgICAg
IChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKCgogCgogCmV4dGVybiAgIGxv
bmcgZG91YmxlICAgICAgICAgIGNlaWxsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0
aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fY2VpbGwgICAgICAgICAo
bG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgbG9uZyBkb3Vi
bGUgICAgICAgICAgZmFic2wgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgp
ICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4gICBsb25nIGRvdWJs
ZSAgICAgICAgIF9fZmFic2wgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgp
ICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgogCmV4dGVybiAgIGxvbmcg
ZG91YmxlICAgICAgICAgIGZsb29ybCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhy
b3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2Zsb29ybCAgICAgICAgIChs
b25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBsb25nIGRvdWJs
ZSAgICAgICAgICBmbW9kbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUg
ICBfX3kpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19mbW9k
bCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgIHRocm93
ICgpICAgIDsKCgogCgpleHRlcm4gIGludCAgICBfX2lzaW5mbCAgICAgKGxvbmcgZG91YmxlICAg
X192YWx1ZSkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApleHRl
cm4gIGludCAgICBfX2Zpbml0ZWwgICAgIChsb25nIGRvdWJsZSAgIF9fdmFsdWUpICB0aHJvdyAo
KSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgogCgpleHRlcm4gIGludCAgICBpc2lu
ZmwgICAgIChsb25nIGRvdWJsZSAgIF9fdmFsdWUpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCiAKZXh0ZXJuICBpbnQgICAgZmluaXRlbCAgICAgKGxvbmcgZG91Ymxl
ICAgX192YWx1ZSkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIAoK
CgoKCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGluZm5hbmwgICAgICAgICAoaW50IF9f
ZXJyb3IpICAgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBl
eHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9faW5mbmFubCAgICAgICAgIChpbnQgX19lcnJv
cikgICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICkgIDsKCiAK
ZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgZHJlbWwgICAgICAgICAobG9uZyBkb3VibGUg
ICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRv
dWJsZSAgICAgICAgIF9fZHJlbWwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91
YmxlICAgX195KSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAg
ICAgICBzaWduaWZpY2FuZGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgp
ICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19zaWduaWZpY2FuZGwgICAgICAgICAo
bG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKCgoKIApleHRlcm4gICBsb25nIGRv
dWJsZSAgICAgICAgICBjb3B5c2lnbmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcg
ZG91YmxlICAgX195KSAgICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9f
KSAgKTsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2NvcHlzaWdubCAgICAgICAgIChs
b25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgIHRocm93ICgpICAgX19hdHRy
aWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgoKCgoKCgoKIApleHRlcm4gIGludCAgICBf
X2lzbmFubCAgICAgKGxvbmcgZG91YmxlICAgX192YWx1ZSkgIHRocm93ICgpICAgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCiAKZXh0ZXJuICBpbnQgICAgaXNuYW5sICAgICAobG9uZyBk
b3VibGUgICBfX3ZhbHVlKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGowbCAgICAgICAgIChsb25nIGRvdWJs
ZSAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fajBsICAg
ICAgICAgKGxvbmcgZG91YmxlICApICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAgbG9uZyBkb3Vi
bGUgICAgICAgICAgajFsICAgICAgICAgKGxvbmcgZG91YmxlICApICAgIHRocm93ICgpICA7IGV4
dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19qMWwgICAgICAgICAobG9uZyBkb3VibGUgICkg
ICAgdGhyb3cgKCkgICAgOwpleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBqbmwgICAgICAg
ICAoaW50LCBsb25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJs
ZSAgICAgICAgIF9fam5sICAgICAgICAgKGludCwgbG9uZyBkb3VibGUgICkgICAgdGhyb3cgKCkg
ICAgOwpleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICB5MGwgICAgICAgICAobG9uZyBkb3Vi
bGUgICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3kwbCAg
ICAgICAgIChsb25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAgICA7CmV4dGVybiAgIGxvbmcgZG91
YmxlICAgICAgICAgIHkxbCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAgOyBl
eHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9feTFsICAgICAgICAgKGxvbmcgZG91YmxlICAp
ICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgeW5sICAgICAg
ICAgKGludCwgbG9uZyBkb3VibGUgICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3Vi
bGUgICAgICAgICBfX3lubCAgICAgICAgIChpbnQsIGxvbmcgZG91YmxlICApICAgIHRocm93ICgp
ICAgIDsKCgoKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgZXJmbCAgICAgICAgIChs
b25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAg
IF9fZXJmbCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAgICA7CmV4dGVybiAg
IGxvbmcgZG91YmxlICAgICAgICAgIGVyZmNsICAgICAgICAgKGxvbmcgZG91YmxlICApICAgIHRo
cm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19lcmZjbCAgICAgICAgIChs
b25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAgICA7CmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAg
ICAgIGxnYW1tYWwgICAgICAgICAobG9uZyBkb3VibGUgICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJu
ICAgbG9uZyBkb3VibGUgICAgICAgICBfX2xnYW1tYWwgICAgICAgICAobG9uZyBkb3VibGUgICkg
ICAgdGhyb3cgKCkgICAgOwoKCgoKCgoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBn
YW1tYWwgICAgICAgICAobG9uZyBkb3VibGUgICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9u
ZyBkb3VibGUgICAgICAgICBfX2dhbW1hbCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAgICB0aHJv
dyAoKSAgICA7CgoKCiAKCgpleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBsZ2FtbWFsX3Ig
ICAgICAgICAgICAobG9uZyBkb3VibGUgICwgaW50ICpfX3NpZ25nYW1wKSAgICB0aHJvdyAoKSAg
OyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fbGdhbW1hbF9yICAgICAgICAgICAgKGxv
bmcgZG91YmxlICAsIGludCAqX19zaWduZ2FtcCkgICAgdGhyb3cgKCkgICAgOwoKCgoKIAoKZXh0
ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgcmludGwgICAgICAgICAobG9uZyBkb3VibGUgICBf
X3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19yaW50bCAg
ICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBs
b25nIGRvdWJsZSAgICAgICAgICBuZXh0YWZ0ZXJsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194
LCBsb25nIGRvdWJsZSAgIF9feSkgICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICggICAgKF9f
Y29uc3RfXykgICk7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19uZXh0YWZ0ZXJsICAg
ICAgICAgKGxvbmcgZG91YmxlICAgX194LCBsb25nIGRvdWJsZSAgIF9feSkgICAgdGhyb3cgKCkg
ICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICkgIDsKCgoKCiAKZXh0ZXJuICAgbG9u
ZyBkb3VibGUgICAgICAgICAgcmVtYWluZGVybCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwg
bG9uZyBkb3VibGUgICBfX3kpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAg
ICAgICAgX19yZW1haW5kZXJsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194LCBsb25nIGRvdWJs
ZSAgIF9feSkgICAgdGhyb3cgKCkgICAgOwoKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAg
ICAgc2NhbGJsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194LCBsb25nIGRvdWJsZSAgIF9fbikg
ICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3NjYWxibCAgICAg
ICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX24pICAgIHRocm93ICgpICAg
IDsKCgoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBzY2FsYm5sICAgICAgICAgKGxv
bmcgZG91YmxlICAgX194LCBpbnQgX19uKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRv
dWJsZSAgICAgICAgIF9fc2NhbGJubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgaW50IF9f
bikgICAgdGhyb3cgKCkgICAgOwoKCiAKZXh0ZXJuICAgaW50ICAgICAgIGlsb2dibCAgICAgICAo
bG9uZyBkb3VibGUgICBfX3gpICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgaW50ICAgICAgIF9faWxv
Z2JsICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICB0aHJvdyAoKSAgIDsKCgojIDM0MSAiL3Vz
ci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKCiMgOTkgIi91c3IvaW5jbHVkZS9tYXRoLmgi
IDIgMwoKCgoKCgoKCgoKCgoKIApleHRlcm4gaW50IHNpZ25nYW07CgoKCiAKIyAyMzIgIi91c3Iv
aW5jbHVkZS9tYXRoLmgiIDMKCgoKIAp0eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0xLAkgCiAg
X1NWSURfLAkgCiAgX1hPUEVOXywJIAogIF9QT1NJWF8sCiAgX0lTT0NfCSAKfSBfTElCX1ZFUlNJ
T05fVFlQRTsKCiAKCgpleHRlcm4gX0xJQl9WRVJTSU9OX1RZUEUgX0xJQl9WRVJTSU9OOwoKCgoK
IAoKCgoKCnN0cnVjdCBfX2V4Y2VwdGlvbgoKCgogIHsKICAgIGludCB0eXBlOwogICAgY2hhciAq
bmFtZTsKICAgIGRvdWJsZSBhcmcxOwogICAgZG91YmxlIGFyZzI7CiAgICBkb3VibGUgcmV0dmFs
OwogIH07CgoKZXh0ZXJuIGludCBtYXRoZXJyIChzdHJ1Y3QgX19leGNlcHRpb24gKl9fZXhjKSB0
aHJvdyAoKTsKCgoKCgoKIAoKCgoKCgoKIAoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu
dXgvMi45NS4yL2luY2x1ZGUvZmxvYXQuaCIgMSAzCiAKCgoKIAoKICAgIAoKCiAgICAKCgogICAg
CgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAK
CgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAK
CgogICAgCgoKCiAgICAKCgogICAgCgoKICAgIAoKCgp1bmlvbiBfX2NvbnZlcnRfbG9uZ19kb3Vi
bGUgewogIHVuc2lnbmVkIF9fY29udmVydF9sb25nX2RvdWJsZV9pWzRdOwogIGxvbmcgZG91Ymxl
IF9fY29udmVydF9sb25nX2RvdWJsZV9kOwp9OwoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAK
CgogICAgCgoKICAgIAoKCgoKIyAyODkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCiMgMjk5
ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCgoKCiAKCgoKCgoKCgoKCgoKCgoKCiAKCgojIDMzNiAi
L3Vzci9pbmNsdWRlL21hdGguaCIgMwoKCgogCgoKCgoKCiAKCgoKCgojIDQwNyAiL3Vzci9pbmNs
dWRlL21hdGguaCIgMwoKCn0gCgoKCiMgOCAibGluZWwuY2MiIDIKCiMgMSAiL3Vzci9pbmNsdWRl
L3N0ZGxpYi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgojIDEgIi91
c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoK
CgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45
NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIv
aTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2
OSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKCgojIDI4MyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1
LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDMzICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCgoKCiMgOTEgIi91c3Iv
aW5jbHVkZS9zdGRsaWIuaCIgMwoKCiAKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsJ
CQkgCiAgICBpbnQgcmVtOwkJCSAKICB9IGRpdl90OwoKIAoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAg
ICBsb25nIGludCBxdW90OwkJIAogICAgbG9uZyBpbnQgcmVtOwkJIAogIH0gbGRpdl90OwoKCgoj
IDExOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKCiAKCgoKIAoKCgoKCiAKCmV4dGVybiBz
aXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkgdGhyb3cgKCkgOwoKCiAKZXh0ZXJu
IGRvdWJsZSBhdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgICA7CiAKZXh0ZXJu
IGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgICA7CiAKZXh0ZXJuIGxv
bmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSAgIDsKCgogCl9fZXh0
ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRy
KQogICAgIHRocm93ICgpICAgOwoKCiAKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsCgkJICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIp
IHRocm93ICgpIDsKCgoKCgoKCgoKCiAKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu
dCBfX2Jhc2UpIHRocm93ICgpIDsKIApleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSAgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCkgOwoKCiAKX19leHRlbnNpb25fXwpl
eHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCgkJCSAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93
ICgpIDsKIApfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRv
dXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCkgOwoKCgogCgogCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKCQkJICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu
dCBfX2Jhc2UpIHRocm93ICgpIDsKIApfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25n
IGxvbmcgaW50IHN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJ
CWNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpIDsK
CgoKIyAyNDQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCgogCgoKZXh0ZXJuIGRvdWJsZSBf
X3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCkgOwpl
eHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsCgkJCQljaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAg
dGhyb3cgKCkgOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAoJCQkJICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKSA7CgpleHRlcm4gbG9uZyBp
bnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJ
CQkgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCSAgIGludCBfX2Jhc2UsIGludCBf
X2dyb3VwKSB0aHJvdyAoKSA7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxf
aW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJICAgICBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3Vw
KSB0aHJvdyAoKSA7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3Ry
dG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0
aHJvdyAoKSA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg
X19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKCQkJCQkJICAgX19yZXN0cmljdCBf
X25wdHIsCgkJCQkJCSAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJCQkgICBpbnQg
X19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKSA7CgoKCgojIDM3OCAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAzCgoKCgogCgoKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikg
dGhyb3cgKCkgOwoKIApleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIHRo
cm93ICgpICAgOwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIAoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsgCgoKCgp0eXBlZGVmIF9fdV9jaGFyIHVf
Y2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0
eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYg
X191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKdHlwZWRlZiBf
X2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKCgoKCgp0eXBl
ZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVm
IF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBl
ZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoKCgoKCgoKCgoK
CnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBl
ZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlw
ZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwoKCgoKCgoK
CgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgoKCgoKCgoKCiMgNTEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgojIDYxICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAzCgoKCgoKCgoKIAp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKCgoKCgoKCgoK
CiAKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CgoKCgoKCgoKCgogCnR5cGVkZWYgX190
aW1lcl90IHRpbWVyX3Q7CgoKCgoKIyAxMTIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKCiMg
MzY0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgMTI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDIgMwoKCiMgMTM3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKCgoKIyAxICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoK
CgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRl
L3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTM4
Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIu
OTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgojIDI3
MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKIyAyODMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4y
L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxNDAgIi91
c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCiAKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlu
dCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2ln
bmVkIGludCB1aW50OwoKCiAKCiMgMTc0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKCgog
CgoKCgoKCgp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9f
UUlfXyApKSkgOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo
ICBfX0hJX18gKSkpIDsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl
X18gKCAgX19TSV9fICkpKSA7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fICggIF9fRElfXyApKSkgOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX1FJX18gKSkpIDsKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgdV9pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX0hJX18gKSkpIDsKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBf
X1NJX18gKSkpIDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18g
KChfX21vZGVfXyAoICBfX0RJX18gKSkpIDsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRy
aWJ1dGVfXyAoKF9fbW9kZV9fIChfX3dvcmRfXykpKTsKCgogCgoKCgoKCiAKIyAxICIvdXNyL2lu
Y2x1ZGUvZW5kaWFuLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK
IAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMKIAoKCgoKCgojIDM3ICIvdXNy
L2luY2x1ZGUvZW5kaWFuLmgiIDIgMwoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjA2ICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiAKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVj
dC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgogCiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvc2VsZWN0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDM2ICIv
dXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMwoKCgoKCgoKCgoKCgojIDU2ICIvdXNyL2luY2x1
ZGUvYml0cy9zZWxlY3QuaCIgMwoKIyA3MiAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDMK
CiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiAKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBpbnQg
X19zaWdfYXRvbWljX3Q7CgogCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25n
IGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKSBdOwog
IH0gX19zaWdzZXRfdDsKCgoKCiAKCgoKCgojIDEyNSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0
LmgiIDMKCiMgMzQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiAKCiMgMSAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK
IyA1MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCiMgNjEgIi91c3IvaW5jbHVkZS90aW1lLmgi
IDMKCgoKIyA3MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDg0ICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAzCgoKCiMgOTYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKCgoKCgogCgpzdHJ1
Y3QgdGltZXNwZWMKICB7CiAgICBsb25nIGludCB0dl9zZWM7CQkgCiAgICBsb25nIGludCB0dl9u
c2VjOwkJIAogIH07CgoKCgoKIyAzNjQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyAzOCAi
L3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKZXh0ZXJuICJDIiB7IAoKIAoKCgpzdHJ1
Y3QgdGltZXZhbDsKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CgogCnR5cGVkZWYgX19mZF9z
ZXQgZmRfc2V0OwoKIAoKCgogCgoKCgogCgoKCgoKCiAKCgoKCmV4dGVybiBpbnQgc2VsZWN0IChp
bnQgX19uZmRzLCBfX2ZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCgkJICAgX19mZF9zZXQg
Kl9fcmVzdHJpY3QgX193cml0ZWZkcywKCQkgICBfX2ZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2Vw
dGZkcywKCQkgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVvdXQpIHRocm93ICgp
IDsKCiMgOTAgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKCgp9IAoKCiMgMjA5ICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiAKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21h
Y3Jvcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIyA0NyAiL3Vzci9p
bmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMwoKCgojIDIxMiAiL3Vzci9pbmNsdWRlL3N5cy90eXBl
cy5oIiAyIDMKCgoKCgoKCgoKIAoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsJICAKCgoK
dHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsgIAoKCgp0eXBlZGVmIF9fZnNmaWxjbnRf
dCBmc2ZpbGNudF90OyAgCgoKIyAyNDggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwoKCgoK
CgoKCn0gCgoKIyAzOTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKIAoKCgogCmV4dGVy
biBpbnQzMl90IHJhbmRvbSAodm9pZCkgdGhyb3cgKCkgOwoKIApleHRlcm4gdm9pZCBzcmFuZG9t
ICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKSA7CgogCgoKCmV4dGVybiBjaGFyICppbml0
c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCgkJCXNpemVfdCBf
X3N0YXRlbGVuKSB0aHJvdyAoKSA7CgogCgpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNoYXIgKl9f
c3RhdGVidWYpIHRocm93ICgpIDsKCgoKIAoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBp
bnQzMl90ICpmcHRyOwkJIAogICAgaW50MzJfdCAqcnB0cjsJCSAKICAgIGludDMyX3QgKnN0YXRl
OwkJIAogICAgaW50IHJhbmRfdHlwZTsJCSAKICAgIGludCByYW5kX2RlZzsJCSAKICAgIGludCBy
YW5kX3NlcDsJCSAKICAgIGludDMyX3QgKmVuZF9wdHI7CQkgCiAgfTsKCmV4dGVybiBpbnQgcmFu
ZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKCQkgICAgIGludDMy
X3QgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3JhbmRvbV9y
ICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAo
KSA7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpf
X3Jlc3RyaWN0IF9fc3RhdGVidWYsCgkJCXNpemVfdCBfX3N0YXRlbGVuLAoJCQlzdHJ1Y3QgcmFu
ZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc2V0c3Rh
dGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAoJCSAgICAgICBzdHJ1Y3QgcmFuZG9t
X2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpIDsKCgoKCiAKZXh0ZXJuIGludCByYW5k
ICh2b2lkKSB0aHJvdyAoKSA7CiAKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3Nl
ZWQpIHRocm93ICgpIDsKCgogCmV4dGVybiBpbnQgcmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2Vl
ZCkgdGhyb3cgKCkgOwoKCgoKIAoKIApleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIHRocm93
ICgpIDsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVsz
XSkgdGhyb3cgKCkgOwoKIApleHRlcm4gbG9uZyBpbnQgbHJhbmQ0OCAodm9pZCkgdGhyb3cgKCkg
OwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10p
IHRocm93ICgpIDsKCiAKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIHRocm93ICgpIDsK
ZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0
aHJvdyAoKSA7CgogCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgdGhy
b3cgKCkgOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0
IGludCBfX3NlZWQxNnZbM10pIHRocm93ICgpIDsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWdu
ZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIHRocm93ICgpIDsKCiAKc3RydWN0IGRyYW5kNDhfZGF0
YQogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCB4WzNdOwkgCiAgICB1bnNpZ25lZCBzaG9ydCBp
bnQgYVszXTsJIAogICAgdW5zaWduZWQgc2hvcnQgaW50IGM7CSAKICAgIHVuc2lnbmVkIHNob3J0
IGludCBvbGRfeFszXTsgIAogICAgaW50IGluaXQ7CQkJIAogIH07CgoKIApleHRlcm4gaW50IGRy
YW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKCQkgICAg
ICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpIDsKZXh0ZXJuIGludCBlcmFu
ZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAoJCSAgICAgIHN0cnVjdCBkcmFu
ZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCgkJICAgICAgZG91YmxlICpfX3Jlc3RyaWN0
IF9fcmVzdWx0KSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJh
bmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAoJCSAgICAgIGxvbmcgaW50ICpfX3Jlc3Ry
aWN0IF9fcmVzdWx0KSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBz
aG9ydCBpbnQgX194c3ViaVszXSwKCQkgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3Ry
aWN0IF9fYnVmZmVyLAoJCSAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJv
dyAoKSA7CgogCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jl
c3RyaWN0IF9fYnVmZmVyLAoJCSAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0
aHJvdyAoKSA7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3Vi
aVszXSwKCQkgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAoJ
CSAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKSA7CgogCmV4dGVy
biBpbnQgc3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEg
Kl9fYnVmZmVyKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVk
IHNob3J0IGludCBfX3NlZWQxNnZbM10sCgkJICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1
ZmZlcikgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGlu
dCBfX3BhcmFtWzddLAoJCSAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJv
dyAoKSA7CgoKCgoKCgogCmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93
ICgpICAgOwogCmV4dGVybiB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19z
aXplKQogICAgIHRocm93ICgpICAgOwoKCgogCgpleHRlcm4gdm9pZCAqcmVhbGxvYyAodm9pZCAq
X19wdHIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpICAgOwogCmV4dGVybiB2b2lkIGZyZWUgKHZv
aWQgKl9fcHRyKSB0aHJvdyAoKSA7CgoKIApleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIp
IHRocm93ICgpIDsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIv
Z2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCiMg
MTg4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgi
IDMKCgoKCgogCgoKCgogCgojIDI3MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUu
Mi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51
eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2Mt
bGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCgpleHRlcm4gIkMi
IHsgCgogCgoKIApleHRlcm4gdm9pZCAqYWxsb2NhIChzaXplX3QgX19zaXplKSB0aHJvdyAoKSA7
CgoKCgoKfSAKCgojIDU0NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCiAKZXh0ZXJu
IHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgICA7CgoKCgoKCgoKIApleHRl
cm4gdm9pZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJu
X18pKTsKCgogCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIHRocm93
ICgpIDsKCgogCgpleHRlcm4gaW50IF9fb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0
YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICB0aHJvdyAoKSA7CmV4dGVybiBp
bnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqX19hcmcpLCB2
b2lkICpfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKIAoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBf
X3N0YXR1cykgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCgoK
CgogCmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKSA7
CgogCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkg
dGhyb3cgKCkgOwoKCiAKIAoKZXh0ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJv
dyAoKSA7CgoKCiAKCmV4dGVybiBpbnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19j
b25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKQogICAgIHRocm93ICgpIDsKCiAKZXh0
ZXJuIHZvaWQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKSA7CgoKCiAK
CgpleHRlcm4gaW50IGNsZWFyZW52ICh2b2lkKSB0aHJvdyAoKSA7CgoKCgogCgoKCmV4dGVybiBj
aGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpIDsKCiAKCgoKCgpleHRlcm4g
aW50IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpIDsKCgoKCgoKCgoKCgoKCiAK
CgoKCmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKSA7CgoK
CiAKZXh0ZXJuIGludCBzeXN0ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAoKSA7
CgoKCgoKCgoKCgogCgoKCgoKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19uYW1lLAoJCSAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIHRo
cm93ICgpIDsKCgoKIAoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9p
ZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKCgoKCiAKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2Nv
bnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKCQkgICAgICBzaXplX3QgX19u
bWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgogCgpleHRlcm4g
dm9pZCBxc29ydCAodm9pZCAqX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwK
CQkgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgogCmV4dGVybiBpbnQgYWJzIChpbnQgX194
KSB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQg
bGFicyAobG9uZyBpbnQgX194KSB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCgoKCgogCgogCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkK
ICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90
IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkg
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKCgogCgoKIAoKCmV4dGVybiBjaGFy
ICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19k
ZWNwdCwKCQkgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKSA7CgogCgoKZXh0ZXJu
IGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmlj
dCBfX2RlY3B0LAoJCSAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpIDsKCiAKCgpl
eHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19i
dWYpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVl
LCBpbnQgX19uZGlnaXQsCgkJICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVz
dHJpY3QgX19zaWduKSB0aHJvdyAoKSA7CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUg
X192YWx1ZSwgaW50IF9fbmRpZ2l0LAoJCSAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50
ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCkgOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcg
ZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpIDsKCgoK
IAoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAq
X19yZXN0cmljdCBfX2RlY3B0LAoJCSAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9f
cmVzdHJpY3QgX19idWYsCgkJICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQg
ZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19k
ZWNwdCwKCQkgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm
LAoJCSAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25n
IGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCgkJICAgIGludCAqX19yZXN0cmljdCBfX2Rl
Y3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAoJCSAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm
LCBzaXplX3QgX19sZW4pIHRocm93ICgpIDsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJs
ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCgkJICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBp
bnQgKl9fcmVzdHJpY3QgX19zaWduLAoJCSAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXpl
X3QgX19sZW4pIHRocm93ICgpIDsKCgoKCiAKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hh
ciAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKSA7CiAKCmV4dGVybiBpbnQgbWJ0b3djICh3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fcHdjLAoJCSAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ms
IHNpemVfdCBfX24pIHRocm93ICgpIDsKIAoKZXh0ZXJuIGludCB3Y3RvbWIgKGNoYXIgKl9fcywg
d2NoYXJfdCBfX3djaGFyKSB0aHJvdyAoKSA7CgoKIApleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3
Y2hhcl90ICpfX3Jlc3RyaWN0ICBfX3B3Y3MsCgkJCV9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X3MsIHNpemVfdCBfX24pIHRocm93ICgpIDsKIApleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFy
ICpfX3Jlc3RyaWN0IF9fcywKCQkJX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywg
c2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSA7CgoKCiAKCgoKZXh0ZXJuIGludCBycG1hdGNoIChf
X2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpIDsKCgoKIyA4MTEgIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMwoKCgojIDgzNSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKIyA4NDUg
Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCgogCgoKZXh0ZXJuIGludCBnZXRsb2FkYXZnIChk
b3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKSB0aHJvdyAoKSA7CgoKCgoKfSAKCgojIDkg
ImxpbmVsLmNjIiAyCgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiAKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCgoKZXh0ZXJuICJDIiB7IAoKIAoKCiMgMSAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4y
L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
IAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9z
dGRkZWYuaCIgMwoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIu
OTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiMgMjgzICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgog
CgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRl
Zi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzMgIi91c3IvaW5jbHVkZS9zdHJp
bmcuaCIgMiAzCgoKCiAKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rl
c3QsCgkJICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRo
cm93ICgpIDsKIAoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2
b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSA7CgogCgoKCmV4dGVybiB2b2lk
ICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3Ry
aWN0IF9fc3JjLAoJCSAgICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgOwoK
CgogCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikg
dGhyb3cgKCkgOwoKIApleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2Nv
bnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgICA7CgogCmV4dGVybiB2
b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAg
ICB0aHJvdyAoKSAgIDsKCiMgNzMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgogCmV4dGVy
biBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCkgOwogCmV4dGVybiBjaGFyICpzdHJuY3B5IChj
aGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKCQkgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpIDsKCiAKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hh
ciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAg
ICB0aHJvdyAoKSA7CiAKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19k
ZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsCgkJICAgICAgc2l6ZV90IF9fbikg
dGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2Nv
bnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgICA7CiAKZXh0ZXJuIGludCBzdHJuY21wIChf
X2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0
aHJvdyAoKSAgIDsKCiAKZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f
Y29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSAgIDsKIApleHRlcm4gc2l6ZV90IHN0cnhm
cm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAoJCSAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpIDsKCiMgMTE2ICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDMKCgoKIApleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykg
dGhyb3cgKCkgICA7CgoKIAoKCgoKCgoKIyAxNTIgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoK
CiAKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93
ICgpICAgOwogCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f
YykgdGhyb3cgKCkgICA7CgoKCgoKCgogCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3Qg
Y2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAgIHRocm93ICgpICAgOwogCgpl
eHRlcm4gc2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19h
Y2NlcHQpCiAgICAgdGhyb3cgKCkgICA7CiAKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3Qg
Y2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpICAgOwogCmV4
dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFy
ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSAgIDsKCgoKCgoKCiAKZXh0ZXJuIGNoYXIgKnN0cnRv
ayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGlt
KQogICAgIHRocm93ICgpIDsKCiAKCmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jl
c3RyaWN0IF9fcywKCQkJIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAoJCQkgY2hh
ciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCkgOwoKZXh0ZXJuIGNoYXIgKnN0cnRv
a19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVs
aW0sCgkJICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpIDsKCgoj
IDIxNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCgoKCiAKZXh0ZXJuIHNpemVfdCBzdHJsZW4g
KF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSAgIDsKCgoKCgoKCgoKIApleHRlcm4gY2hhciAq
c3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3cgKCkgOwoKIAoKZXh0ZXJuIGNoYXIgKl9fc3Ry
ZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJv
dyAoKSA7CmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVm
LCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpIDsKCgogCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2
b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpIDsKCgogCmV4dGVybiB2b2lkIGJjb3B5IChf
X2NvbnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpIDsK
CiAKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCkgOwoK
IApleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3My
LCBzaXplX3QgX19uKQogICAgIHRocm93ICgpICAgOwoKIApleHRlcm4gY2hhciAqaW5kZXggKF9f
Y29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSAgIDsKCiAKZXh0ZXJuIGNoYXIgKnJp
bmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpICAgOwoKIAoKZXh0ZXJu
IGludCBfX2ZmcyAoaW50IF9faSkgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwpl
eHRlcm4gaW50IGZmcyAoaW50IF9faSkgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChjb25zdCkp
OwoKIAoKCgoKCgoKCgogCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3Mx
LCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgICA7CgogCmV4dGVybiBpbnQgc3Ry
bmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3Qg
X19uKQogICAgIHRocm93ICgpICAgOwoKCiMgMjkxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMK
CgoKIAoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAoJ
CSAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRocm93ICgpIDsKCgojIDMz
NCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCgoKCgojIDM2MiAiL3Vzci9pbmNsdWRlL3N0cmlu
Zy5oIiAzCgoKCn0gCgoKIyAxMCAibGluZWwuY2MiIDIKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2ZzdHJlYW0uaCIgMSAz
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgpleHRlcm4g
IkMrKyIgewpjbGFzcyBmc3RyZWFtYmFzZSA6IHZpcnR1YWwgcHVibGljIGlvcyB7CgogICAgbXV0
YWJsZSBmaWxlYnVmIF9fbXlfZmI7ICAKCiAgICB2b2lkIF9fZmJfaW5pdCAoKTsKICBwdWJsaWM6
CiAgICBmc3RyZWFtYmFzZSgpOwogICAgZnN0cmVhbWJhc2UoaW50IGZkKTsKICAgIGZzdHJlYW1i
YXNlKGludCBmZCwgY2hhciAqcCwgaW50IGwpOyAgCiAgICBmc3RyZWFtYmFzZShjb25zdCBjaGFy
ICpuYW1lLCBpbnQgbW9kZSwgaW50IHByb3Q9MDY2NCk7CiAgICB2b2lkIGNsb3NlKCk7CgogICAg
ZmlsZWJ1ZiogcmRidWYoKSBjb25zdCB7IHJldHVybiAmX19teV9mYjsgfQoKCgogICAgdm9pZCBv
cGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlLCBpbnQgcHJvdD0wNjY0KTsKICAgIGludCBp
c19vcGVuKCkgY29uc3QgeyByZXR1cm4gcmRidWYoKS0+aXNfb3BlbigpOyB9CiAgICB2b2lkIHNl
dGJ1ZihjaGFyICpwdHIsIGludCBsZW4pIHsgcmRidWYoKS0+c2V0YnVmKHB0ciwgbGVuKTsgfQog
ICAgdm9pZCBhdHRhY2goaW50IGZkKTsKCgoKCn07CgpjbGFzcyBpZnN0cmVhbSA6IHB1YmxpYyBm
c3RyZWFtYmFzZSwgcHVibGljIGlzdHJlYW0gewogIHB1YmxpYzoKICAgIGlmc3RyZWFtKCkgOiBm
c3RyZWFtYmFzZSgpIHsgfQogICAgaWZzdHJlYW0oaW50IGZkKSA6IGZzdHJlYW1iYXNlKGZkKSB7
IH0KICAgIGlmc3RyZWFtKGludCBmZCwgY2hhciAqcCwgaW50IGwpIDogZnN0cmVhbWJhc2UoZmQs
IHAsIGwpIHsgfSAgCiAgICBpZnN0cmVhbShjb25zdCBjaGFyICpuYW1lLCBpbnQgbW9kZT1pb3M6
OmluLCBpbnQgcHJvdD0wNjY0KQoJOiBmc3RyZWFtYmFzZShuYW1lLCBtb2RlIHwgaW9zOjppbiwg
cHJvdCkgeyB9CiAgICB2b2lkIG9wZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IG1vZGU9aW9zOjpp
biwgaW50IHByb3Q9MDY2NCkKCXsgZnN0cmVhbWJhc2U6Om9wZW4obmFtZSwgbW9kZSB8IGlvczo6
aW4sIHByb3QpOyB9Cn07CgpjbGFzcyBvZnN0cmVhbSA6IHB1YmxpYyBmc3RyZWFtYmFzZSwgcHVi
bGljIG9zdHJlYW0gewogIHB1YmxpYzoKICAgIG9mc3RyZWFtKCkgOiBmc3RyZWFtYmFzZSgpIHsg
fQogICAgb2ZzdHJlYW0oaW50IGZkKSA6IGZzdHJlYW1iYXNlKGZkKSB7IH0KICAgIG9mc3RyZWFt
KGludCBmZCwgY2hhciAqcCwgaW50IGwpIDogZnN0cmVhbWJhc2UoZmQsIHAsIGwpIHsgfSAgCiAg
ICBvZnN0cmVhbShjb25zdCBjaGFyICpuYW1lLCBpbnQgbW9kZT1pb3M6Om91dCwgaW50IHByb3Q9
MDY2NCkKCTogZnN0cmVhbWJhc2UobmFtZSwgbW9kZSB8IGlvczo6b3V0LCBwcm90KSB7IH0KICAg
IHZvaWQgb3Blbihjb25zdCBjaGFyICpuYW1lLCBpbnQgbW9kZT1pb3M6Om91dCwgaW50IHByb3Q9
MDY2NCkKCXsgZnN0cmVhbWJhc2U6Om9wZW4obmFtZSwgbW9kZSB8IGlvczo6b3V0LCBwcm90KTsg
fQp9OwoKY2xhc3MgZnN0cmVhbSA6IHB1YmxpYyBmc3RyZWFtYmFzZSwgcHVibGljIGlvc3RyZWFt
IHsKICBwdWJsaWM6CiAgICBmc3RyZWFtKCkgOiBmc3RyZWFtYmFzZSgpIHsgfQogICAgZnN0cmVh
bShpbnQgZmQpIDogZnN0cmVhbWJhc2UoZmQpIHsgfQogICAgZnN0cmVhbShjb25zdCBjaGFyICpu
YW1lLCBpbnQgbW9kZSwgaW50IHByb3Q9MDY2NCkKCTogZnN0cmVhbWJhc2UobmFtZSwgbW9kZSwg
cHJvdCkgeyB9CiAgICBmc3RyZWFtKGludCBmZCwgY2hhciAqcCwgaW50IGwpIDogZnN0cmVhbWJh
c2UoZmQsIHAsIGwpIHsgfSAgCiAgICB2b2lkIG9wZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IG1v
ZGUsIGludCBwcm90PTA2NjQpCgl7IGZzdHJlYW1iYXNlOjpvcGVuKG5hbWUsIG1vZGUsIHByb3Qp
OyB9Cn07Cn0gIAoKIyAxMSAibGluZWwuY2MiIDIKCgojIDEgIi4uL2Z1bmN0aW9uL2ZuY0Z1bmN0
aW9uLmgiIDEKIAoKCgoKCgoKICAjcHJhZ21hIGludGVyZmFjZQoKCiMgMSAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3R5cGVpbmZvIiAxIDMKIAogCgoKCgojcHJh
Z21hIGludGVyZmFjZSAidHlwZWluZm8iCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51
eC8yLjk1LjIvaW5jbHVkZS9leGNlcHRpb24iIDEgMwogCiAKCgoKCiNwcmFnbWEgaW50ZXJmYWNl
ICJleGNlcHRpb24iCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZCB7CgpjbGFzcyBleGNl
cHRpb24gewpwdWJsaWM6CiAgZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgfmV4Y2VwdGlvbiAo
KSB7IH0KICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkgY29uc3Q7Cn07CgpjbGFzcyBiYWRf
ZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbiB7CnB1YmxpYzoKICBiYWRfZXhjZXB0aW9uICgp
IHsgfQogIHZpcnR1YWwgfmJhZF9leGNlcHRpb24gKCkgeyB9Cn07Cgp0eXBlZGVmIHZvaWQgKCp0
ZXJtaW5hdGVfaGFuZGxlcikgKCk7CnR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikg
KCk7Cgp0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlICh0ZXJtaW5hdGVfaGFuZGxlcik7
CnZvaWQgdGVybWluYXRlICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKdW5leHBl
Y3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkICh1bmV4cGVjdGVkX2hhbmRsZXIpOwp2b2lkIHVu
ZXhwZWN0ZWQgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwpib29sIHVuY2F1Z2h0
X2V4Y2VwdGlvbiAoKTsKCn0gIAoKfSAgCgoKIyA5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu
dXgvMi45NS4yL2luY2x1ZGUvdHlwZWluZm8iIDIgMwoKCmV4dGVybiAiQysrIiB7CgpuYW1lc3Bh
Y2Ugc3RkIHsKCmNsYXNzIHR5cGVfaW5mbyB7CnByaXZhdGU6CiAgIAogIHR5cGVfaW5mbyYgb3Bl
cmF0b3I9IChjb25zdCB0eXBlX2luZm8mKTsKICB0eXBlX2luZm8gKGNvbnN0IHR5cGVfaW5mbyYp
OwoKcHJvdGVjdGVkOgogIGV4cGxpY2l0IHR5cGVfaW5mbyAoY29uc3QgY2hhciAqbik6IF9uYW1l
IChuKSB7IH0KCiAgY29uc3QgY2hhciAqX25hbWU7CgpwdWJsaWM6CiAgIAogIHZpcnR1YWwgfnR5
cGVfaW5mbyAoKTsKICAgIAogIGJvb2wgYmVmb3JlIChjb25zdCB0eXBlX2luZm8mIGFyZykgY29u
c3Q7CiAgY29uc3QgY2hhciogbmFtZSAoKSBjb25zdAogICAgeyByZXR1cm4gX25hbWU7IH0KICBi
b29sIG9wZXJhdG9yPT0gKGNvbnN0IHR5cGVfaW5mbyYgYXJnKSBjb25zdDsKICBib29sIG9wZXJh
dG9yIT0gKGNvbnN0IHR5cGVfaW5mbyYgYXJnKSBjb25zdDsKfTsKCmlubGluZSBib29sIHR5cGVf
aW5mbzo6Cm9wZXJhdG9yIT0gKGNvbnN0IHR5cGVfaW5mbyYgYXJnKSBjb25zdAp7CiAgcmV0dXJu
ICFvcGVyYXRvcj09IChhcmcpOwp9CgpjbGFzcyBiYWRfY2FzdCA6IHB1YmxpYyBleGNlcHRpb24g
ewpwdWJsaWM6CiAgYmFkX2Nhc3QoKSB7IH0KICB2aXJ0dWFsIH5iYWRfY2FzdCgpIHsgfQp9OwoK
Y2xhc3MgYmFkX3R5cGVpZCA6IHB1YmxpYyBleGNlcHRpb24gewogcHVibGljOgogIGJhZF90eXBl
aWQgKCkgeyB9CiAgdmlydHVhbCB+YmFkX3R5cGVpZCAoKSB7IH0KfTsKCn0gIAoKfSAgCgojIDEy
ICIuLi9mdW5jdGlvbi9mbmNGdW5jdGlvbi5oIiAyCgoKCiMgMSAiLi4vZnVuY3Rpb24vLi4vY29u
Y2VwdHMuaCIgMQogCgoKCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKCgojIDEgIi4uL2Z1bmN0
aW9uLy4uL3Rvb2xib3gvdGJ4RnVDby5oIiAxCiAKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgog
ICAKCiAgaW50IHBhcnNlKGNvbnN0IGNoYXIgKnNlbnRlbmNlLCB1bnNpZ25lZCBjaGFyICpwZ20p
OwoKICAgCgogIHZvaWQgIHByb2Nlc3MoY29uc3QgdW5zaWduZWQgY2hhciAqcGdtLCAKCQlkb3Vi
bGUgeCwgZG91YmxlIHksIGRvdWJsZSB6LCBkb3VibGUgdltdKTsKCgp9CgoKCgogICAgCgojIDE2
ICIuLi9mdW5jdGlvbi8uLi9jb25jZXB0cy5oIiAyCgojIDEgIi4uL2Z1bmN0aW9uLy4uL3Rvb2xi
b3gvdGJ4UG9vbC5oIiAxCiAKCgoKCgoKIAogCgoKCnRlbXBsYXRlIDxjbGFzcyBUPiAKY2xhc3Mg
UG9vbCB7CiAKICB1bmlvbiBsaW5rIHsKICAgIHZvaWQqICBsbms7CiAgICBkb3VibGUgYWxpZ247
CiAgfTsKCiAgY29uc3QgdW5zaWduZWQgIGJsa1N6OwogIHZvaWQqICAgICAgICAgICBibGs7Cgog
ICAKICB1bnNpZ25lZCAgICAgICAgZnJlZTsKCiAgVCogICAgICAgICAgICAgIG5leHQ7CgogIFBv
b2woUG9vbCYpOwogIHZvaWQgb3BlcmF0b3I9KFBvb2wmKTsKCnB1YmxpYzoKICAgCgogIFBvb2wo
dW5zaWduZWQgc3opIDogYmxrU3ooc3opIHsgZnJlZSA9IDA7IGJsayA9IDA7IH0KICB+UG9vbCgp
OwoKICAgCgoKICBUKiBhbGxvYygpOwogIGZsb2F0IG1lbW9yeSgpIGNvbnN0Owp9OwoKdGVtcGxh
dGUgPGNsYXNzIFQ+IApQb29sPFQ+Ojp+UG9vbCgpIHsKCiAgd2hpbGUgKGJsaykgewogICAgdm9p
ZCogYiA9IGJsazsgYmxrID0gKChsaW5rKikgYmxrKS0+bG5rOwogICAgZGVsZXRlW10gYjsKICB9
Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiAKVCogUG9vbDxUPjo6YWxsb2MoKSB7CgogIGlmICghZnJl
ZSkgeyAKICAgIHZvaWQqIGIgPSBuZXcgY2hhcltibGtTeiAqIHNpemVvZihUKSArIHNpemVvZihs
aW5rKV07CiAgICAoKGxpbmsqKSBiKS0+bG5rID0gYmxrOyBibGsgPSBiOwogICAgbmV4dCA9IChU
KikoKGxpbmsqKSBibGsgKyAxKTsgZnJlZSA9IGJsa1N6OwogIH0gICAKCiAgZnJlZS0tOyByZXR1
cm4gbmV4dCsrOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gCmZsb2F0IFBvb2w8VD46Om1lbW9yeSgp
IGNvbnN0IHsKCiAgZmxvYXQgbWVtID0gMC4wOwogIGZsb2F0IGJsa21lbSA9IGJsa1N6ICogc2l6
ZW9mKFQpICsgc2l6ZW9mKGxpbmspOwoKICBmb3Iodm9pZCogYiA9IGJsazsgYiAhPSBfX251bGwg
OyBiID0gKChsaW5rKiliKS0+bG5rKSBtZW0gKz0gYmxrbWVtOwoKICByZXR1cm4gc2l6ZW9mKFBv
b2wpICsgbWVtOwp9CgoKIyAxNyAiLi4vZnVuY3Rpb24vLi4vY29uY2VwdHMuaCIgMgoKCiAKCgoK
CgoKCgoKICAKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIEIsIGNsYXNzIEQ+IGlubGluZSBEKiBjYXN0
VXAoQiogYiwgRCoqIGQpIHsKICAgIHJldHVybiAqZCA9IGItPmNvb2tpZSgpID09ICZEOjplaWtv
b2MgPyAoRCopYiA6IChEKilfX251bGwgOwogIH0KCgogCgogCnR5cGVkZWYgZG91YmxlICAgICAg
ICAgICAgICAgICAgcmVhbDsKCiAKdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgICAgICB1aW50
OwoKIAp0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIHVzaG9ydDsKCiAKdHlwZWRlZiB1
bnNpZ25lZCBjaGFyICAgICAgICAgICB1Y2hhcjsKCiAKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxv
bmcgaW50ICB1bGxpbnQ7CgoKCgoKCgogCgogCgoKCgogCiAKCiAKCmNsYXNzIFJlYWwzZDsKY2xh
c3MgVW5pdDNkOwpjbGFzcyBSZWFsMmQ7CmNsYXNzIFVuaXQyZDsKCiAKCiAKCmNsYXNzIFJvdGF0
aW9uM2QgewoKICByZWFsIHh4LCB4eSwgeHo7CiAgcmVhbCB5eCwgeXksIHl6OwogIHJlYWwgengs
IHp5LCB6ejsKCnB1YmxpYzoKICBmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBv
cywgY29uc3QgUm90YXRpb24zZCYgcik7CgogICAKICBSb3RhdGlvbjNkKCkgeyB4eCA9IHh5ID0g
eHogPSB5eCA9IHl5ID0geXogPSB6eCA9IHp5ID0genogPSAwOyB9CgogICAKCgoKICBSb3RhdGlv
bjNkKGNvbnN0IFVuaXQzZCYgbik7CgogICAKCgoKCgogIFJvdGF0aW9uM2QoY29uc3QgUmVhbDNk
JiBvbmUsIGNvbnN0IFJlYWwzZCYgdHdvLCBjb25zdCBSZWFsM2QmIHRocmVlKTsKCiAgIAoKCgoK
ICBpbmxpbmUgdm9pZCBtYXAoUmVhbDNkIHUsIFJlYWwzZCogdikgY29uc3Q7CgogICAKCgoKCgog
IGlubGluZSB2b2lkIG1hcChSZWFsM2QgdSwgUmVhbDJkKiB2KSBjb25zdDsKCiAgIAogIGlubGlu
ZSByZWFsIGRldGVybWluYW50KCkgY29uc3Q7Cn07CgogCgogCgpjbGFzcyBSb3RhdGlvbjJkIHsK
ICBmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvcywgY29uc3QgUm90YXRpb24y
ZCYgcik7CgogIHJlYWwgeHgsIHh5OwogIHJlYWwgeXgsIHl5OwoKcHVibGljOgogICAKICBSb3Rh
dGlvbjJkKCkgeyB4eCA9IHh5ID0geXggPSB5eSA9IDA7IH0KCiAgIAoKCgoKICBSb3RhdGlvbjJk
KGNvbnN0IFVuaXQyZCYgbik7CgogICAKCgoKCiAgUm90YXRpb24yZChjb25zdCBSZWFsMmQmIG9u
ZSwgY29uc3QgUmVhbDJkJiB0d28pOwoKICAgCgoKCiAgaW5saW5lIHZvaWQgbWFwKFJlYWwyZCB1
LCBSZWFsMmQqIHYpIGNvbnN0OwoKICAgCgoKCgogIGlubGluZSB2b2lkIG1hcChSZWFsMmQgdSwg
UmVhbDNkKiB2KSBjb25zdDsKCiAgIAoKCgoKICBpbmxpbmUgdm9pZCBtYXAoUmVhbDNkIHUsIFJl
YWwzZCogdikgY29uc3Q7CgogICAKICBpbmxpbmUgUm90YXRpb24yZCB0cmFuc3Bvc2UoKSBjb25z
dDsKCiAgIAogIGlubGluZSByZWFsIGRldGVybWluYW50KCkgY29uc3Q7CgogICAKICBpbmxpbmUg
Um90YXRpb24yZCBpbnZlcnNlKCkgY29uc3Q7CgogICAKICBpbmxpbmUgUm90YXRpb24yZCBvcGVy
YXRvciogKGNvbnN0IFJvdGF0aW9uMmQmIHR3bykgY29uc3Q7CgogICAKICBpbmxpbmUgUmVhbDJk
IG9wZXJhdG9yKiAoY29uc3QgUmVhbDJkJiB2KSBjb25zdDsKfTsKCiAKCiAKCmNsYXNzIFJlYWwz
ZCB7CiAgZnJpZW5kIGNsYXNzIFJlYWwyZDsKICBmcmllbmQgY2xhc3MgUm90YXRpb24yZDsKICBm
cmllbmQgY2xhc3MgUm90YXRpb24zZDsKCiAgIAogIHVuaW9uIHsKICAgICAKICAgIHN0cnVjdCB7
IAogICAgICAgCiAgICAgIHJlYWwgeDsKICAgICAgIAogICAgICByZWFsIHk7CiAgICAgICAKICAg
ICAgcmVhbCB6OyB9IHNfOwogICAgIAogICAgcmVhbCAgICAgICAgICAgICAgICAgICAgIHZfWzNd
OwogIH07CgogcHVibGljOgogICAKICBSZWFsM2QoKSB7IHNfLnggPSBzXy55ID0gc18ueiA9IDA7
IH0KCiAgIAogIFJlYWwzZChjb25zdCBSZWFsM2QmIHgpIHsgc18ueCA9IHguc18ueDsgc18ueSA9
IHguc18ueTsgc18ueiA9IHguc18uejsgfQoKICAgCgoKCgoKICBSZWFsM2QocmVhbCB4LCByZWFs
IHksIHJlYWwgeikgeyBzXy54ID0geDsgc18ueSA9IHk7IHNfLnogPSB6OyB9CgogICAKCgoKCgog
IFJlYWwzZCh1bnNpZ25lZCBjaGFyICpwZ20sIHJlYWwgeCwgcmVhbCB5LCByZWFsIHogPSAwLjAp
IHsgCiAgICBwcm9jZXNzKHBnbSwgeCwgeSwgeiwgdl8pOyB9CgogICAKCgoKCiAgUmVhbDNkKGNv
bnN0IFJvdGF0aW9uM2QmIHIsIGNvbnN0IFJlYWwzZCYgeCkgeyByLm1hcCh4LCB0aGlzKTsgfQoK
ICAgCgoKCiAgaW5saW5lIFJlYWwzZChjb25zdCBSZWFsMmQmIHgpOwoKICAgCiAgaW5saW5lIFJl
YWwzZCAgb3BlcmF0b3IgLSgpIGNvbnN0OwogICAKICBpbmxpbmUgUmVhbDNkICBvcGVyYXRvciAr
KGNvbnN0IFJlYWwzZCYgdSkgY29uc3Q7CiAgIAogIGlubGluZSBSZWFsM2QgIG9wZXJhdG9yIC0o
Y29uc3QgUmVhbDNkJiB1KSBjb25zdDsKICAgCiAgaW5saW5lIHJlYWwgICAgb3BlcmF0b3IgKihj
b25zdCBSZWFsM2QmIHUpIGNvbnN0OwogICAKICBpbmxpbmUgUmVhbDNkICBvcGVyYXRvciAqKGNv
bnN0IHJlYWwgcykgY29uc3Q7CiAgIAogIGlubGluZSBSZWFsM2QgIG9wZXJhdG9yICUoY29uc3Qg
UmVhbDNkJiB1KSBjb25zdDsKICAgCiAgaW5saW5lIFJlYWwzZCYgb3BlcmF0b3IgKz0oY29uc3Qg
UmVhbDNkJiB1KTsKICAgCiAgaW5saW5lIFJlYWwzZCYgb3BlcmF0b3IgKz0oY29uc3QgUmVhbDJk
JiB1KTsKICAgCiAgaW5saW5lIFJlYWwzZCYgb3BlcmF0b3IgLT0oY29uc3QgUmVhbDNkJiB1KTsK
ICAgCiAgaW5saW5lIFJlYWwzZCYgb3BlcmF0b3IgLT0oY29uc3QgUmVhbDJkJiB1KTsKICAgCiAg
aW5saW5lIFJlYWwzZCYgb3BlcmF0b3IgKj0oZG91YmxlIHUpOwoKICAgCiAgaW5saW5lIHZvaWQg
YWRkKGNvbnN0IFJlYWwzZCYgdSwgY29uc3QgUmVhbDNkJiB2KTsKICAgCiAgaW5saW5lIHZvaWQg
c3ViKGNvbnN0IFJlYWwzZCYgdSwgY29uc3QgUmVhbDNkJiB2KTsKICAgCiAgaW5saW5lIHZvaWQg
Y3Jvc3MoY29uc3QgUmVhbDNkJiB1LCBjb25zdCBSZWFsM2QmIHYpOwogICAKICBpbmxpbmUgdm9p
ZCBzY2FsZShyZWFsIHMpOwogICAKICBpbmxpbmUgdm9pZCBtYXgoY29uc3QgUmVhbDNkJiB1LCBj
b25zdCBSZWFsM2QmIHYpOwogICAKICBpbmxpbmUgdm9pZCBtaW4oY29uc3QgUmVhbDNkJiB1LCBj
b25zdCBSZWFsM2QmIHYpOwoKICAgCiAgaW5saW5lIHZvaWQgbGluY29tYihjb25zdCBSZWFsM2Qm
IHUsIGNvbnN0IFJlYWwzZCYgdiwgCgkJICAgICAgcmVhbCBzY3UgPSAxLjAsIHJlYWwgc2N2ID0g
MS4wKTsKICAgCiAgaW5saW5lIHZvaWQgbGluY29tYihjb25zdCBSZWFsM2QmIHUsIGNvbnN0IFJl
YWwyZCYgdiwgCgkJICAgICAgcmVhbCBzY3UgPSAxLjAsIHJlYWwgc2N2ID0gMS4wKTsKICAgCiAg
aW5saW5lIHZvaWQgbGluY29tYihjb25zdCBSZWFsMmQmIHUsIGNvbnN0IFJlYWwzZCYgdiwgCgkJ
ICAgICAgcmVhbCBzY3UgPSAxLjAsIHJlYWwgc2N2ID0gMS4wKTsKICAgCiAgaW5saW5lIHZvaWQg
bGluY29tYihjb25zdCBSZWFsMmQmIHUsIGNvbnN0IFJlYWwyZCYgdiwgCgkJICAgICAgcmVhbCBz
Y3UgPSAxLjAsIHJlYWwgc2N2ID0gMS4wKTsKCiAgIAogIGlubGluZSByZWFsIGwyKCkgY29uc3Qg
eyByZXR1cm4gc3FydChsMl8yKCkpOyB9CiAgIAogIGlubGluZSByZWFsIGwyXzIoKSBjb25zdDsK
CiAgIAoKCgoKCiAgdm9pZCBybmQoY29uc3QgcmVhbCBwciA9IDEuMCk7CiAgCiAgIAogIGlubGlu
ZSByZWFsIHgoKSBjb25zdCB7IHJldHVybiBzXy54OyB9CiAgIAogIGlubGluZSByZWFsIHkoKSBj
b25zdCB7IHJldHVybiBzXy55OyB9CiAgIAogIGlubGluZSByZWFsIHooKSBjb25zdCB7IHJldHVy
biBzXy56OyB9CgogICAKICBpbmxpbmUgb3N0cmVhbSYgd3JpdGUob3N0cmVhbSYgb3MpIGNvbnN0
IHsgCiAgICByZXR1cm4gb3Mud3JpdGUoKGNvbnN0IGNoYXIqKXZfLCAzICogc2l6ZW9mKHJlYWwp
KTsgfQoKICBmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3IgPDwob3N0cmVhbSYgb3MsIGNvbnN0IFJl
YWwzZCYgeCk7Cn07CgogCgogCgpjbGFzcyBVbml0M2QgOiBwdWJsaWMgUmVhbDNkIHsKCiAgcmVh
bCBsZW47CgpwdWJsaWM6CiAgVW5pdDNkKCkgOiBSZWFsM2QoKSB7IGxlbiA9IDAuMDsgfQogIGlu
bGluZSBVbml0M2QocmVhbCB4LCByZWFsIHksIHJlYWwgeik7CiAgaW5saW5lIFVuaXQzZChjb25z
dCBSZWFsM2QmIHUpOwoKICByZWFsIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIGxlbjsgfQp9OwoK
IAoKIAoKY2xhc3MgUmVhbDJkIHsKICBmcmllbmQgY2xhc3MgUmVhbDNkOwogIGZyaWVuZCBjbGFz
cyBSb3RhdGlvbjJkOwogIGZyaWVuZCBjbGFzcyBSb3RhdGlvbjNkOwoKICAgCiAgdW5pb24gewog
ICAgIAogICAgc3RydWN0IHsgCiAgICAgICAKICAgICAgcmVhbCB4OwogICAgICAgCiAgICAgIHJl
YWwgeTsgfSBzXzsKICAgICAKICAgIHJlYWwgdl9bMl07CiAgfTsKCiBwdWJsaWM6CiAgIAogIFJl
YWwyZCgpIHsgc18ueCA9IHNfLnkgPSAwOyB9CgogICAKCgoKCiAgUmVhbDJkKHJlYWwgeCwgcmVh
bCB5KSB7IHNfLnggPSB4OyBzXy55ID0geTsgfQoKICAgCiAgUmVhbDJkKGNvbnN0IFJlYWwyZCYg
dSkgeyBzXy54ID0gdS5zXy54OyBzXy55ID0gdS5zXy55OyB9CgogICAKCgoKICBSZWFsMmQoY29u
c3QgUmVhbDNkJiB1KSB7IHNfLnggPSB1LnNfLng7IHNfLnkgPSB1LnNfLnk7IH0KCiAgIAoKCgoK
CiAgUmVhbDJkKHVuc2lnbmVkIGNoYXIgKnBnbSwgcmVhbCB4LCByZWFsIHkpIHsgcHJvY2Vzcyhw
Z20sIHgsIHksIDAuMCwgdl8pOyB9CgogICAKICBpbmxpbmUgUmVhbDJkICBvcGVyYXRvciAtKCkg
Y29uc3Q7CgogICAKICBpbmxpbmUgUmVhbDJkICBvcGVyYXRvciArKGNvbnN0IFJlYWwyZCYgdSkg
Y29uc3Q7CiAgIAogIGlubGluZSBSZWFsM2QgIG9wZXJhdG9yICsoY29uc3QgUmVhbDNkJiB1KSBj
b25zdDsKCiAgIAogIGlubGluZSBSZWFsMmQgIG9wZXJhdG9yIC0oY29uc3QgUmVhbDJkJiB1KSBj
b25zdDsKICAgCiAgaW5saW5lIFJlYWwzZCAgb3BlcmF0b3IgLShjb25zdCBSZWFsM2QmIHUpIGNv
bnN0OwoKICAgCiAgaW5saW5lIHJlYWwgICAgb3BlcmF0b3IgKihjb25zdCBSZWFsMmQmIHUpIGNv
bnN0OwoKICAgCgoKICBpbmxpbmUgcmVhbCAgICBvcGVyYXRvciBeKGNvbnN0IFJlYWwyZCYgdSkg
Y29uc3Q7CgogICAKICBpbmxpbmUgUmVhbDJkJiBvcGVyYXRvciA9KGNvbnN0IFJlYWwzZCYgdSk7
CiAgIAogIGlubGluZSBSZWFsMmQmIG9wZXJhdG9yICs9KGNvbnN0IFJlYWwyZCYgdSk7CiAgIAog
IGlubGluZSBSZWFsMmQmIG9wZXJhdG9yICo9KGRvdWJsZSB1KTsKCiAgIAogIGlubGluZSB2b2lk
IGFkZChjb25zdCBSZWFsMmQmIHYsIGNvbnN0IFJlYWwyZCYgdyk7CiAgIAogIGlubGluZSB2b2lk
IG9ydGhvKGNvbnN0IFJlYWwyZCYgdSk7CiAgIAogIGlubGluZSB2b2lkIHNjYWxlKHJlYWwgcyk7
CgogICAKICBpbmxpbmUgdm9pZCBtYXgoY29uc3QgUmVhbDJkJiB1LCBjb25zdCBSZWFsMmQmIHYp
OwoKICAgCiAgaW5saW5lIHZvaWQgbWluKGNvbnN0IFJlYWwyZCYgdSwgY29uc3QgUmVhbDJkJiB2
KTsKCiAgIAogIGlubGluZSByZWFsIGwyKCkgY29uc3QgeyByZXR1cm4gc3FydChsMl8yKCkpOyB9
CgogICAKICBpbmxpbmUgcmVhbCBsMl8yKCkgY29uc3Q7CgogICAKICBpbmxpbmUgcmVhbCBwcm9k
KGNvbnN0IFJlYWwyZCYgdSkgY29uc3Q7CiAgIAogIGlubGluZSByZWFsIHByb2RvcnRobyhjb25z
dCBSZWFsMmQmIHUpIGNvbnN0OwoKICAgCgoKICBpbmxpbmUgdm9pZCBsaW5jb21iKGNvbnN0IFJl
YWwyZCYgdSwgY29uc3QgUmVhbDJkJiB2LCByZWFsIHNjdSA9IDEuMCwgCgkJICAgICAgcmVhbCBz
Y3YgPSAxLjApOwogICAKCgoKCgogIGlubGluZSB2b2lkIHJuZChjb25zdCByZWFsIHByID0gMS4w
KTsKICAKICAgCiAgaW5saW5lIHJlYWwgeCgpIGNvbnN0IHsgcmV0dXJuIHNfLng7IH0KCiAgIAog
IGlubGluZSByZWFsIHkoKSBjb25zdCB7IHJldHVybiBzXy55OyB9CgogIGZyaWVuZCBvc3RyZWFt
JiBvcGVyYXRvciA8PChvc3RyZWFtJiBvcywgY29uc3QgUmVhbDJkJiB4KTsKfTsKCiAKCiAKCmNs
YXNzIFVuaXQyZCA6IHB1YmxpYyBSZWFsMmQgewoKICByZWFsIGxlbjsKCiBwdWJsaWM6CiAgVW5p
dDJkKCkgOiBSZWFsMmQoKSB7IGxlbiA9IDAuMDsgfQogIGlubGluZSBVbml0MmQocmVhbCB4LCBy
ZWFsIHkpOwogIGlubGluZSBVbml0MmQoY29uc3QgUmVhbDJkJiB1KTsKCiAgcmVhbCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBsZW47IH0KfTsKCiAKCiAKCmlubGluZSB2b2lkIFJvdGF0aW9uM2Q6
Om1hcChSZWFsM2QgdSwgUmVhbDNkKiB2KSBjb25zdCB7CiAKICB2LT5zXy54ID0geHggKiB1LnNf
LnggKyB4eSAqIHUuc18ueSArIHh6ICogdS5zXy56OwogIHYtPnNfLnkgPSB5eCAqIHUuc18ueCAr
IHl5ICogdS5zXy55ICsgeXogKiB1LnNfLno7CiAgdi0+c18ueiA9IHp4ICogdS5zXy54ICsgenkg
KiB1LnNfLnkgKyB6eiAqIHUuc18uejsKfQogIAppbmxpbmUgdm9pZCBSb3RhdGlvbjNkOjptYXAo
UmVhbDNkIHUsIFJlYWwyZCogdikgY29uc3QgewoKICB2LT5zXy54ID0geHggKiB1LnNfLnggKyB4
eSAqIHUuc18ueSArIHh6ICogdS5zXy56OwogIHYtPnNfLnkgPSB5eCAqIHUuc18ueCArIHl5ICog
dS5zXy55ICsgeXogKiB1LnNfLno7Cn0KICAKaW5saW5lIHJlYWwgUm90YXRpb24zZDo6ZGV0ZXJt
aW5hbnQoKSBjb25zdCB7CgogIHJldHVybiB4eCp5eSp6eiArIHh5Knl6Knp4ICsgeHoqeXgqenkg
LSB6eCp5eSp4eiAtIHp5Knl6Knh4IC0genoqeXgqeHk7Cn0KCiAKCmlubGluZSBSb3RhdGlvbjJk
OjpSb3RhdGlvbjJkKGNvbnN0IFVuaXQyZCYgbikgewoKICB4eCA9IG4uc18ueTsgeHkgPSAtbi5z
Xy54OyB5eCA9IG4uc18ueDsgeXkgPSBuLnNfLnk7Cn0KCmlubGluZSBSb3RhdGlvbjJkOjpSb3Rh
dGlvbjJkKGNvbnN0IFJlYWwyZCYgb25lLCBjb25zdCBSZWFsMmQmIHR3bykgewoKICB4eCA9IG9u
ZS54KCk7IHh5ID0gdHdvLngoKTsgeXggPSBvbmUueSgpOyB5eSA9IHR3by55KCk7Cn0KCmlubGlu
ZSB2b2lkIFJvdGF0aW9uMmQ6Om1hcChSZWFsMmQgdSwgUmVhbDJkKiB2KSBjb25zdCB7CgogIHYt
PnNfLnggPSB4eCAqIHUuc18ueCArIHh5ICogdS5zXy55OwogIHYtPnNfLnkgPSB5eCAqIHUuc18u
eCArIHl5ICogdS5zXy55Owp9CgppbmxpbmUgdm9pZCBSb3RhdGlvbjJkOjptYXAoUmVhbDJkIHUs
IFJlYWwzZCogdikgY29uc3QgewoKICB2LT5zXy54ID0geHggKiB1LnNfLnggKyB4eSAqIHUuc18u
eTsKICB2LT5zXy55ID0geXggKiB1LnNfLnggKyB5eSAqIHUuc18ueTsKICB2LT5zXy56ID0gMDsK
fQoKaW5saW5lIHZvaWQgUm90YXRpb24yZDo6bWFwKFJlYWwzZCB1LCBSZWFsM2QqIHYpIGNvbnN0
IHsKCiAgdi0+c18ueCA9IHh4ICogdS5zXy54ICsgeHkgKiB1LnNfLnk7CiAgdi0+c18ueSA9IHl4
ICogdS5zXy54ICsgeXkgKiB1LnNfLnk7CiAgdi0+c18ueiA9IHUuc18uejsKfQoKaW5saW5lIFJv
dGF0aW9uMmQgUm90YXRpb24yZDo6dHJhbnNwb3NlKCkgY29uc3QgewoKICBSb3RhdGlvbjJkIHJl
czsKICByZXMueHggPSB4eDsKICByZXMueXkgPSB5eTsKICByZXMueHkgPSB5eDsKICByZXMueXgg
PSB4eTsKICByZXR1cm4gcmVzOwp9CgppbmxpbmUgcmVhbCBSb3RhdGlvbjJkOjpkZXRlcm1pbmFu
dCgpIGNvbnN0IHsKCiAgcmV0dXJuIHh4Knl5LXh5Knl4Owp9CgppbmxpbmUgUm90YXRpb24yZCBS
b3RhdGlvbjJkOjppbnZlcnNlKCkgY29uc3QgewoKICByZWFsIGZhY3QgPSBkZXRlcm1pbmFudCgp
OwogIFJvdGF0aW9uMmQgcmVzOwogIHJlcy54eCA9IHl5L2ZhY3Q7CiAgcmVzLnl5ID0geHgvZmFj
dDsKICByZXMueHkgPSAteHkvZmFjdDsKICByZXMueXggPSAteXgvZmFjdDsKCiAgcmV0dXJuIHJl
czsKfQoKaW5saW5lIFJvdGF0aW9uMmQgUm90YXRpb24yZDo6b3BlcmF0b3IqIChjb25zdCBSb3Rh
dGlvbjJkJiB0d28pIGNvbnN0IHsKCiAgUm90YXRpb24yZCByZXM7CiAgcmVzLnh4ID0geHgqdHdv
Lnh4K3h5KnR3by55eDsKICByZXMueHkgPSB4eCp0d28ueHkreHkqdHdvLnl5OwogIHJlcy55eCA9
IHl4KnR3by54eCt5eSp0d28ueXg7CiAgcmVzLnl5ID0geXgqdHdvLnh5K3l5KnR3by55eTsKICBy
ZXR1cm4gcmVzOwp9CgppbmxpbmUgUmVhbDJkIFJvdGF0aW9uMmQ6Om9wZXJhdG9yKiAoY29uc3Qg
UmVhbDJkJiB2KSBjb25zdCB7CgogIFJlYWwyZCByZXM7CiAgcmVzLnNfLnggPSB4eCAqIHYuc18u
eCArIHh5ICogdi5zXy55OwogIHJlcy5zXy55ID0geXggKiB2LnNfLnggKyB5eSAqIHYuc18ueTsK
ICByZXR1cm4gcmVzOwp9CgogCgppbmxpbmUgUmVhbDNkOjpSZWFsM2QoY29uc3QgUmVhbDJkJiB4
KSB7IAoKICBzXy54ID0geC5zXy54OyBzXy55ID0geC5zXy55OyBzXy56ID0gMC4wOyAKfQoKaW5s
aW5lIFJlYWwzZCBSZWFsM2Q6Om9wZXJhdG9yIC0oKSBjb25zdCB7CgogIHJldHVybiBSZWFsM2Qo
LXNfLngsIC1zXy55LCAtc18ueik7Cn0KCmlubGluZSBSZWFsM2QgUmVhbDNkOjpvcGVyYXRvciAr
KGNvbnN0IFJlYWwzZCYgdSkgY29uc3QgewoKICByZXR1cm4gUmVhbDNkKHNfLnggKyB1LnNfLngs
IHNfLnkgKyB1LnNfLnksIHNfLnogKyB1LnNfLnopOwp9CgppbmxpbmUgUmVhbDNkIFJlYWwzZDo6
b3BlcmF0b3IgLShjb25zdCBSZWFsM2QmIHUpIGNvbnN0IHsKCiAgcmV0dXJuIFJlYWwzZChzXy54
IC0gdS5zXy54LCBzXy55IC0gdS5zXy55LCBzXy56IC0gdS5zXy56KTsKfQoKaW5saW5lIHJlYWwg
UmVhbDNkOjpvcGVyYXRvciAqKGNvbnN0IFJlYWwzZCYgdSkgY29uc3QgewoKICByZXR1cm4gc18u
eCAqIHUuc18ueCArIHNfLnkgKiB1LnNfLnkgKyBzXy56ICogdS5zXy56Owp9CgppbmxpbmUgUmVh
bDNkIFJlYWwzZDo6b3BlcmF0b3IgKihjb25zdCByZWFsIHMpIGNvbnN0IHsKCiAgUmVhbDNkIHgo
KnRoaXMpOwogIHguc2NhbGUocyk7CiAgcmV0dXJuIHg7Cn0KCmlubGluZSBSZWFsM2QgUmVhbDNk
OjpvcGVyYXRvciAlKGNvbnN0IFJlYWwzZCYgdSkgY29uc3QgewoKICByZXR1cm4gUmVhbDNkKHNf
LnkgKiB1LnNfLnogLSBzXy56ICogdS5zXy55LCBzXy56ICogdS5zXy54IC0gc18ueCAqIHUuc18u
eiwKCQlzXy54ICogdS5zXy55IC0gc18ueSAqIHUuc18ueCk7Cn0KCmlubGluZSBSZWFsM2QmIFJl
YWwzZDo6b3BlcmF0b3IgKz0oY29uc3QgUmVhbDNkJiB1KSB7CgogIHNfLnggKz0gdS5zXy54OyBz
Xy55ICs9IHUuc18ueTsgc18ueiArPSB1LnNfLno7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUg
UmVhbDNkJiBSZWFsM2Q6Om9wZXJhdG9yICs9KGNvbnN0IFJlYWwyZCYgdSkgewoKICBzXy54ICs9
IHUuc18ueDsgc18ueSArPSB1LnNfLnk7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgUmVhbDNk
JiBSZWFsM2Q6Om9wZXJhdG9yIC09KGNvbnN0IFJlYWwzZCYgdSkgewoKICBzXy54IC09IHUuc18u
eDsgc18ueSAtPSB1LnNfLnk7IHNfLnogLT0gdS5zXy56OwogIHJldHVybiAqdGhpczsKfQoKaW5s
aW5lIFJlYWwzZCYgUmVhbDNkOjpvcGVyYXRvciAtPShjb25zdCBSZWFsMmQmIHUpIHsKCiAgc18u
eCAtPSB1LnNfLng7IHNfLnkgLT0gdS5zXy55OwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIFJl
YWwzZCYgUmVhbDNkOjpvcGVyYXRvciAqPShkb3VibGUgdSkgewoKICBzXy54ICo9IHU7IHNfLnkg
Kj0gdTsgc18ueiAqPSB1OwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIHZvaWQgUmVhbDNkOjph
ZGQoY29uc3QgUmVhbDNkJiB1LCBjb25zdCBSZWFsM2QmIHcpIHsKCiAgc18ueCA9IHUuc18ueCAr
IHcuc18ueDsKICBzXy55ID0gdS5zXy55ICsgdy5zXy55OwogIHNfLnogPSB1LnNfLnogKyB3LnNf
Lno7IAp9CgppbmxpbmUgdm9pZCBSZWFsM2Q6OnN1Yihjb25zdCBSZWFsM2QmIHUsIGNvbnN0IFJl
YWwzZCYgdykgewoKICBzXy54ID0gdS5zXy54IC0gdy5zXy54OwogIHNfLnkgPSB1LnNfLnkgLSB3
LnNfLnk7CiAgc18ueiA9IHUuc18ueiAtIHcuc18uejsgCn0KCmlubGluZSB2b2lkIFJlYWwzZDo6
Y3Jvc3MoY29uc3QgUmVhbDNkJiB1LCBjb25zdCBSZWFsM2QmIHcpIHsKCiAgc18ueCA9IHUuc18u
eSAqIHcuc18ueiAtIHUuc18ueiAqIHcuc18ueTsKICBzXy55ID0gdS5zXy56ICogdy5zXy54IC0g
dS5zXy54ICogdy5zXy56OwogIHNfLnogPSB1LnNfLnggKiB3LnNfLnkgLSB1LnNfLnkgKiB3LnNf
Lng7Cn0KCmlubGluZSB2b2lkIFJlYWwzZDo6c2NhbGUocmVhbCBzYykgewoKICBzXy54ICo9IHNj
OyBzXy55ICo9IHNjOyBzXy56ICo9IHNjOwp9CgppbmxpbmUgdm9pZCBSZWFsM2Q6Om1pbihjb25z
dCBSZWFsM2QmIHUsIGNvbnN0IFJlYWwzZCYgdikgewoKICBzXy54ID0gdS5zXy54IDwgdi5zXy54
ID8gdS5zXy54IDogdi5zXy54OwogIHNfLnkgPSB1LnNfLnkgPCB2LnNfLnkgPyB1LnNfLnkgOiB2
LnNfLnk7CiAgc18ueiA9IHUuc18ueiA8IHYuc18ueiA/IHUuc18ueiA6IHYuc18uejsKfQoKaW5s
aW5lIHZvaWQgUmVhbDNkOjptYXgoY29uc3QgUmVhbDNkJiB1LCBjb25zdCBSZWFsM2QmIHYpIHsK
CiAgc18ueCA9IHUuc18ueCA+IHYuc18ueCA/IHUuc18ueCA6IHYuc18ueDsKICBzXy55ID0gdS5z
Xy55ID4gdi5zXy55ID8gdS5zXy55IDogdi5zXy55OwogIHNfLnogPSB1LnNfLnogPiB2LnNfLnog
PyB1LnNfLnogOiB2LnNfLno7Cn0KCmlubGluZSB2b2lkIFJlYWwzZDo6bGluY29tYihjb25zdCBS
ZWFsM2QmIHUsIGNvbnN0IFJlYWwzZCYgdywgCgkJCSAgICByZWFsIHNjdSwgcmVhbCBzY3cpIHsK
CiAgc18ueCA9IHNjdSAqIHUuc18ueCArIHNjdyAqIHcuc18ueDsKICBzXy55ID0gc2N1ICogdS5z
Xy55ICsgc2N3ICogdy5zXy55OwogIHNfLnogPSBzY3UgKiB1LnNfLnogKyBzY3cgKiB3LnNfLno7
Cn0KIAppbmxpbmUgdm9pZCBSZWFsM2Q6OmxpbmNvbWIoY29uc3QgUmVhbDNkJiB1LCBjb25zdCBS
ZWFsMmQmIHcsIAoJCQkgICAgcmVhbCBzY3UsIHJlYWwgc2N3KSB7CgogIHNfLnggPSBzY3UgKiB1
LnNfLnggKyBzY3cgKiB3LnNfLng7CiAgc18ueSA9IHNjdSAqIHUuc18ueSArIHNjdyAqIHcuc18u
eTsKICBzXy56ID0gc2N1ICogdS5zXy56Owp9CiAKaW5saW5lIHZvaWQgUmVhbDNkOjpsaW5jb21i
KGNvbnN0IFJlYWwyZCYgdSwgY29uc3QgUmVhbDNkJiB3LCAKCQkJICAgIHJlYWwgc2N1LCByZWFs
IHNjdykgewoKICBzXy54ID0gc2N1ICogdS5zXy54ICsgc2N3ICogdy5zXy54OwogIHNfLnkgPSBz
Y3UgKiB1LnNfLnkgKyBzY3cgKiB3LnNfLnk7CiAgc18ueiA9IHNjdyAqIHcuc18uejsKfQogCmlu
bGluZSB2b2lkIFJlYWwzZDo6bGluY29tYihjb25zdCBSZWFsMmQmIHUsIGNvbnN0IFJlYWwyZCYg
dywgCgkJCSAgICByZWFsIHNjdSwgcmVhbCBzY3cpIHsKCiAgc18ueCA9IHNjdSAqIHUuc18ueCAr
IHNjdyAqIHcuc18ueDsKICBzXy55ID0gc2N1ICogdS5zXy55ICsgc2N3ICogdy5zXy55OwogIHNf
LnogPSAwLjA7Cn0KIAppbmxpbmUgcmVhbCBSZWFsM2Q6OmwyXzIoKSBjb25zdCB7CgogIHJldHVy
biBzXy54ICogc18ueCArIHNfLnkgKiBzXy55ICsgc18ueiAqIHNfLno7Cn0KCmlubGluZSB2b2lk
IFJlYWwzZDo6cm5kKGNvbnN0IHJlYWwgcHJlYykgewoKICBzXy54ID0gZmxvb3Ioc18ueCAvIHBy
ZWMgKyAwLjUpICogcHJlYzsKICBzXy55ID0gZmxvb3Ioc18ueSAvIHByZWMgKyAwLjUpICogcHJl
YzsKICBzXy56ID0gZmxvb3Ioc18ueiAvIHByZWMgKyAwLjUpICogcHJlYzsKfQoKIAoKaW5saW5l
IFVuaXQzZDo6VW5pdDNkKHJlYWwgeCwgcmVhbCB5LCByZWFsIHopIDogUmVhbDNkKHgsIHksIHop
IHsKCiAgbGVuID0gbDIoKTsgc2NhbGUoMS4wIC8gbGVuKTsKfQoKaW5saW5lIFVuaXQzZDo6VW5p
dDNkKGNvbnN0IFJlYWwzZCYgdSkgOiBSZWFsM2QodSkgewoKICBsZW4gPSBsMigpOyBzY2FsZSgx
LjAgLyBsZW4pOwp9CgogCgppbmxpbmUgUmVhbDJkIFJlYWwyZDo6b3BlcmF0b3IgLSgpIGNvbnN0
IHsKCiAgcmV0dXJuIFJlYWwyZCgtc18ueCwgLXNfLnkpOwp9CgppbmxpbmUgUmVhbDJkIFJlYWwy
ZDo6b3BlcmF0b3IgKyhjb25zdCBSZWFsMmQmIHUpIGNvbnN0IHsKCiAgcmV0dXJuIFJlYWwyZChz
Xy54ICsgdS5zXy54LCBzXy55ICsgdS5zXy55KTsKfQoKaW5saW5lIFJlYWwzZCBSZWFsMmQ6Om9w
ZXJhdG9yICsoY29uc3QgUmVhbDNkJiB1KSBjb25zdCB7CgogIHJldHVybiBSZWFsM2Qoc18ueCAr
IHUuc18ueCwgc18ueSArIHUuc18ueSwgdS5zXy56KTsKfQoKaW5saW5lIFJlYWwyZCBSZWFsMmQ6
Om9wZXJhdG9yIC0oY29uc3QgUmVhbDJkJiB1KSBjb25zdCB7CgogIHJldHVybiBSZWFsMmQoc18u
eCAtIHUuc18ueCwgc18ueSAtIHUuc18ueSk7Cn0KCmlubGluZSBSZWFsM2QgUmVhbDJkOjpvcGVy
YXRvciAtKGNvbnN0IFJlYWwzZCYgdSkgY29uc3QgewoKICByZXR1cm4gUmVhbDNkKHNfLnggLSB1
LnNfLngsIHNfLnkgLSB1LnNfLnksIC11LnNfLnopOwp9CgppbmxpbmUgcmVhbCBSZWFsMmQ6Om9w
ZXJhdG9yICooY29uc3QgUmVhbDJkJiB1KSBjb25zdCB7CgogIHJldHVybiBzXy54ICogdS5zXy54
ICsgc18ueSAqIHUuc18ueTsKfQoKaW5saW5lIHJlYWwgUmVhbDJkOjpvcGVyYXRvciBeKGNvbnN0
IFJlYWwyZCYgdSkgY29uc3QgewoKICByZXR1cm4gc18ueCAqIHUuc18ueSAtIHNfLnkgKiB1LnNf
Lng7Cn0KCmlubGluZSBSZWFsMmQmIFJlYWwyZDo6b3BlcmF0b3IgPShjb25zdCBSZWFsM2QmIHUp
IHsgCgogIHNfLnggPSB1LnNfLng7IHNfLnkgPSB1LnNfLnk7CiAgcmV0dXJuICp0aGlzOwp9Cgpp
bmxpbmUgUmVhbDJkJiBSZWFsMmQ6Om9wZXJhdG9yICs9KGNvbnN0IFJlYWwyZCYgdSkgewoKICBz
Xy54ICs9IHUuc18ueDsgc18ueSArPSB1LnNfLnk7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUg
UmVhbDJkJiBSZWFsMmQ6Om9wZXJhdG9yICo9KGRvdWJsZSB1KSB7CgogIHNfLnggKj0gdTsgc18u
eSAqPSB1OwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIHZvaWQgUmVhbDJkOjphZGQoY29uc3Qg
UmVhbDJkJiB1LCBjb25zdCBSZWFsMmQmIHcpIHsKCiAgc18ueCA9IHUuc18ueCArIHcuc18ueDsK
ICBzXy55ID0gdS5zXy55ICsgdy5zXy55Owp9CgppbmxpbmUgdm9pZCBSZWFsMmQ6Om9ydGhvKGNv
bnN0IFJlYWwyZCYgdSkgewoKICBzXy54ID0gdS5zXy55OwogIHNfLnkgPSAtdS5zXy54Owp9Cgpp
bmxpbmUgdm9pZCBSZWFsMmQ6OnNjYWxlKHJlYWwgc2MpIHsKCiAgc18ueCAqPSBzYzsgc18ueSAq
PSBzYzsKfQoKaW5saW5lIHZvaWQgUmVhbDJkOjptaW4oY29uc3QgUmVhbDJkJiB1LCBjb25zdCBS
ZWFsMmQmIHYpIHsKCiAgc18ueCA9IHUuc18ueCA8IHYuc18ueCA/IHUuc18ueCA6IHYuc18ueDsK
ICBzXy55ID0gdS5zXy55IDwgdi5zXy55ID8gdS5zXy55IDogdi5zXy55Owp9CgppbmxpbmUgdm9p
ZCBSZWFsMmQ6Om1heChjb25zdCBSZWFsMmQmIHUsIGNvbnN0IFJlYWwyZCYgdikgewoKICBzXy54
ID0gdS5zXy54ID4gdi5zXy54ID8gdS5zXy54IDogdi5zXy54OwogIHNfLnkgPSB1LnNfLnkgPiB2
LnNfLnkgPyB1LnNfLnkgOiB2LnNfLnk7Cn0KCmlubGluZSByZWFsIFJlYWwyZDo6bDJfMigpIGNv
bnN0IHsKCiAgcmV0dXJuIHNfLnggKiBzXy54ICsgc18ueSAqIHNfLnk7Cn0KCmlubGluZSByZWFs
IFJlYWwyZDo6cHJvZChjb25zdCBSZWFsMmQmIHUpIGNvbnN0IHsKCiAgcmV0dXJuIHNfLnggKiB1
LnNfLnggKyBzXy55ICogdS5zXy55Owp9CgppbmxpbmUgcmVhbCBSZWFsMmQ6OnByb2RvcnRobyhj
b25zdCBSZWFsMmQmIHUpIGNvbnN0IHsKCiAgcmV0dXJuIHNfLnggKiB1LnNfLnkgLSBzXy55ICog
dS5zXy54Owp9CgppbmxpbmUgdm9pZCBSZWFsMmQ6OmxpbmNvbWIoY29uc3QgUmVhbDJkJiB1LCBj
b25zdCBSZWFsMmQmIHcsCgkJCSAgICByZWFsIHNjdSwgcmVhbCBzY3cpIHsKCiAgc18ueCA9IHNj
dSAqIHUuc18ueCArIHNjdyAqIHcuc18ueDsKICBzXy55ID0gc2N1ICogdS5zXy55ICsgc2N3ICog
dy5zXy55Owp9CiAKaW5saW5lIHZvaWQgUmVhbDJkOjpybmQoY29uc3QgcmVhbCBwcmVjKSB7Cgog
IHNfLnggPSBmbG9vcihzXy54IC8gcHJlYyArIDAuNSkgKiBwcmVjOwogIHNfLnkgPSBmbG9vcihz
Xy55IC8gcHJlYyArIDAuNSkgKiBwcmVjOwp9CgogCgppbmxpbmUgVW5pdDJkOjpVbml0MmQocmVh
bCB4LCByZWFsIHkpIDogUmVhbDJkKHgsIHkpIHsKCiAgbGVuID0gbDIoKTsgc2NhbGUoMS4wIC8g
bGVuKTsKfQoKaW5saW5lIFVuaXQyZDo6VW5pdDJkKGNvbnN0IFJlYWwyZCYgdSkgOiBSZWFsMmQo
dSkgewoKICBsZW4gPSBsMigpOyBzY2FsZSgxLjAgLyBsZW4pOwp9CgoKIyAxNSAiLi4vZnVuY3Rp
b24vZm5jRnVuY3Rpb24uaCIgMgoKIyAxICIuLi9mdW5jdGlvbi8uLi9zcGFjZS9zcGNFbGVtZW50
LmgiIDEKIAoKCgoKCgoKCiAgI3ByYWdtYSBpbnRlcmZhY2UgCgoKCgojIDEgIi4uL2Z1bmN0aW9u
Ly4uL3NwYWNlLy4uL2dlb21ldHJ5L2dlb0NlbGwuaCIgMQogCgoKCgoKCgojIDEgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9tZW1v
cnkiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51
eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIv
aTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgi
IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAoKCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCiAKCiAKIAogCiAKIAogCiAKCgoK
CgoKCgojIDE0OCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgogICAg
ICAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjM0ICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs
X2NvbmZpZy5oIiAzCgoKIyAyNDggIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAogCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAojIDMxNiAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3N0bF9jb25maWcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiAKIAogCiMgMzYgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4v
Li4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMgMSAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9yZWxv
cHMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfVHAmIF9feCwgY29uc3Qg
X1RwJiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg
ewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBib29s
IG9wZXJhdG9yPD0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJuICEo
X195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3I+
PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kp
Owp9CgogCgoKCiAKIAogCiMgMzkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L3N0bF9wYWlyLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCnRl
bXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4Kc3RydWN0IHBhaXIgewogIHR5cGVkZWYgX1Qx
IGZpcnN0X3R5cGU7CiAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5cGU7CgogIF9UMSBmaXJzdDsKICBf
VDIgc2Vjb25kOwogIHBhaXIoKSA6IGZpcnN0KF9UMSgpKSwgc2Vjb25kKF9UMigpKSB7fQogIHBh
aXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSksIHNlY29uZChf
X2IpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAgcGFpcihjb25zdCBw
YWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29uZChfX3Auc2Vjb25k
KSB7fQoKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYg
X195KQp7IAogIHJldHVybiBfX3guZmlyc3QgPT0gX195LmZpcnN0ICYmIF9feC5zZWNvbmQgPT0g
X195LnNlY29uZDsgCn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBf
VDI+JiBfX3kpCnsgCiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fCAKICAgICAgICAg
KCEoX195LmZpcnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7IAp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBwYWlyPF9UMSwgX1QyPiBt
YWtlX3BhaXIoY29uc3QgX1QxJiBfX3gsIGNvbnN0IF9UMiYgX195KQp7CiAgcmV0dXJuIHBhaXI8
X1QxLCBfVDI+KF9feCwgX195KTsKfQoKIAoKCgogCiAKIAojIDQyICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNl
LmgiIDIgMwoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy90eXBlX3RyYWl0cy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgX190cnVlX3R5cGUg
ewp9OwoKc3RydWN0IF9fZmFsc2VfdHlwZSB7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1
Y3QgX190eXBlX3RyYWl0cyB7IAogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgICB0aGlzX2R1bW15
X21lbWJlcl9tdXN0X2JlX2ZpcnN0OwogICAgICAgICAgICAgICAgICAgIAoKCgoKCiAgICAKCgoK
CgoKCgogCgogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCgoKIAog
CiAKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4gewogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVf
dHJhaXRzPGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZh
dWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Nv
cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNz
aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVt
cGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFp
dHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07
CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBl
X3RyYWl0czxzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rl
ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf
Y29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0
ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBzaG9ydD4gewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBl
X3RyYWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZh
dWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Nv
cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNz
aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVt
cGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJh
aXRzPGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdu
bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh
dGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJh
aXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rl
ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf
Y29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0
ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3Qg
X190eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190
cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7
Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90
cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9
OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0czxfVHAqPiB7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCiMgMjk1ICIvdXNyL2xpYi9nY2Mt
bGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdHlwZV90cmFp
dHMuaCIgMwoKCgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNfaW50ZWdlciB7
CiAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1
Y3QgX0lzX2ludGVnZXI8Ym9vbD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9
OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4gewogIHR5cGVkZWYgX190
cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHNp
Z25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0
ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVl
X3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8d2No
YXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+
ICBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRl
Z3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4g
ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0
IF9Jc19pbnRlZ2VyPGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoK
dGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYg
X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2Vy
PGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4g
IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nIGxv
bmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0
cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIF9JbnRlZ3JhbDsKfTsKCgoKCgogCiAKIAojIDQ1ICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
bGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIg
MwoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvbGlt
aXRzLmgiIDEgMwogCgoKIAoKCgoKCiAKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgv
Mi45NS4yL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMwogCgoKCgoKIyAxICIvdXNyL2xpYi9nY2Mt
bGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvbGltaXRzLmgiIDEgMwogCgoKIAoKIyAxMTQg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9saW1pdHMuaCIgMwoK
CgojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKCgoKCiAKCgoKCgogCgojIDExMyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCgoKCgogIAoK
CgoKIyAxNDAgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwoKCgogCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoK
IAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoKIAoK
CiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKCiAKCgogCgoKIAoK
CiAKCgogCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvbGludXgv
bGltaXRzLmgiIDEgMwoKCgoKCgoKCgoKCgoKCgoKCgoKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMv
bG9jYWxfbGltLmgiIDIgMwoKCiAKCgoKCiAKCgoKCiAKCgoKCgogCgogCgoKIAoKIAoKCiAKCiAK
CgogCgoKCiAKCgogCgojIDEyNiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMK
CgoKCgoKCgogCgoKCgoKCgojIDE0NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCiAKCgogCgoKIAoKCiAKCgogCgoKCgogCgoKCiAKCgogCgoKCiAKCgoKCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIyAxNDggIi91c3IvaW5jbHVkZS9saW1p
dHMuaCIgMiAzCgoKCgoKCiMgMTE3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4y
L2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoKIyA3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu
dXgvMi45NS4yL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMwoKCiMgMTEgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCgoKIAoKCgogCgoK
CiAKCgoKCiAKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKIAoKIAoKCgoKIAoKCgogCgoKCgoKCgoK
IAoKCgogCgoKCgoKCgoKCgoKCgogCgoKCiMgMTA3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu
dXgvMi45NS4yL2luY2x1ZGUvbGltaXRzLmgiIDMKCgoKCiAKCgoKCgoKCgoKIyA0OSAiL3Vzci9s
aWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0
bF9hbGdvYmFzZS5oIiAyIDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1
LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgoKCgoKCiAKCiAKCgoKCiAKCgogCgoK
CgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9z
dGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKCgoKCgoKCgoKIAoKCgoKIAoK
IAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51
eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIyA1MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp
bnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMK
CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL25ldy5oIiAx
IDMKIAoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUv
bmV3IiAxIDMKIAogCgoKCgojcHJhZ21hIGludGVyZmFjZSAibmV3IgojIDEgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQyICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCiMgOCAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL25ldyIgMiAzCgoKCmV4
dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkIHsKCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGlj
IGV4Y2VwdGlvbiB7CiAgcHVibGljOgogICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29u
c3QgdGhyb3coKSB7IHJldHVybiAiYmFkX2FsbG9jIjsgfQogIH07CgogIHN0cnVjdCBub3Rocm93
X3Qge307CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBub3Rocm93OwogIHR5cGVkZWYgdm9pZCAo
Km5ld19oYW5kbGVyKSgpOwogIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxlciAobmV3X2hhbmRs
ZXIpOwoKfSAgCgogCnZvaWQgKm9wZXJhdG9yIG5ldyAoc2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRf
YWxsb2MpOwp2b2lkICpvcGVyYXRvciBuZXdbXSAoc2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxs
b2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9y
IGRlbGV0ZVtdICh2b2lkICopIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ldyAoc2l6ZV90LCBj
b25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXpl
X3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUg
KHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRl
bGV0ZVtdICh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKCiAKaW5saW5l
IHZvaWQgKm9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJu
IHBsYWNlOyB9CmlubGluZSB2b2lkICpvcGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQgKnBsYWNl
KSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9Cn0gIAoKCiMgNiAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL25ldy5oIiAyIDMKCgp1c2luZyBzdGQ6Om5ld19oYW5k
bGVyOwp1c2luZyBzdGQ6OnNldF9uZXdfaGFuZGxlcjsKCgojIDUyICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNl
LmgiIDIgMwoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCiAKCnN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CnN0cnVj
dCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBw
dWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cl90YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90YWcge307CnN0cnVjdCByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsK
CiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlu
cHV0X2l0ZXJhdG9yIHsKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl
Z29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYg
X0Rpc3RhbmNlICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAg
ICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgIHJlZmVyZW5jZTsK
fTsKCnN0cnVjdCBvdXRwdXRfaXRlcmF0b3IgewogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVf
dHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAg
ICAgICAgICByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFu
Y2U+IHN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yIHsKICB0eXBlZGVmIGZvcndhcmRfaXRlcmF0b3Jf
dGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgdmFs
dWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsK
ICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAg
ICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0Rpc3RhbmNlPiBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiBiaWRp
cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAg
ICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAg
ICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAg
cmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1
Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvciB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJh
dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBk
aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2lu
dGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoK
IyA5OCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9y
PgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6
aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBf
SXRlcmF0b3I6OnZhbHVlX3R5cGUgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVm
IHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgdHlwZWRl
ZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVm
IF9UcCAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlm
Zl90ICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAg
ICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAg
ICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBpdGVy
YXRvcl90cmFpdHM8Y29uc3QgX1RwKj4gewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRv
cl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICBk
aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjb25zdCBfVHAqICAgICAgICAgICAgICAgICAgcG9p
bnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07
CgogCiAKIAogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQpfX2l0ZXJhdG9yX2NhdGVnb3J5
KGNvbnN0IF9JdGVyJikKewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy
Pjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0NhdGVnb3J5OwogIHJldHVybiBfQ2F0ZWdvcnkoKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
dGVyPjo6ZGlmZmVyZW5jZV90eXBlKgpfX2Rpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImKQp7CiAg
cmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZl
cmVuY2VfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKgpfX3ZhbHVlX3R5cGUoY29uc3Qg
X0l0ZXImKQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcj46OnZhbHVlX3R5cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKaXRlcmF0
b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19pdGVyYXRvcl9jYXRlZ29y
eShfX2kpOyB9CgoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKgpkaXN0YW5jZV90eXBlKGNvbnN0IF9J
dGVyJiBfX2kpIHsgcmV0dXJuIF9fZGlzdGFuY2VfdHlwZShfX2kpOyB9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90
eXBlKgp2YWx1ZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fdmFsdWVfdHlwZShf
X2kpOyB9CgoKCgoKIyAyNTkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2Rpc3RhbmNl
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgd2hp
bGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7ICsrX19maXJzdDsgKytfX247IH0KfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9p
ZCBfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCAKICAgICAgICAgICAgICAg
ICAgICAgICBfRGlzdGFuY2UmIF9fbiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICBf
X24gKz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
LCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9EaXN0
YW5jZSYgX19uKQp7CiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbiwgaXRlcmF0b3Jf
Y2F0ZWdvcnkoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
aW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVu
Y2VfdHlwZQpfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgd2hpbGUgKF9fZmly
c3QgIT0gX19sYXN0KSB7CiAgICArK19fZmlyc3Q7ICsrX19uOwogIH0KICByZXR1cm4gX19uOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpf
X2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19sYXN0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAg
cmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRv
cj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZl
cmVuY2VfdHlwZQpkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QpIHsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy
YXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5IAogICAgX0NhdGVnb3J5OwogIHJldHVybiBfX2Rpc3Rh
bmNlKF9fZmlyc3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfSW5wdXRJ
dGVyJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIHdoaWxlIChf
X24tLSkgKytfX2k7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRv
ciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0JpZGlyZWN0aW9uYWxJ
dGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLCAKICAgICAgICAgICAgICAgICAgICAgIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAgaWYgKF9fbiA+PSAwKQogICAgd2hpbGUgKF9fbi0t
KSArK19faTsKICBlbHNlCiAgICB3aGlsZSAoX19uKyspIC0tX19pOwp9CgoKCgoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9p
ZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sIAog
ICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICBfX2kg
Kz0gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5j
ZT4KaW5saW5lIHZvaWQgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19u
KSB7CiAgX19hZHZhbmNlKF9faSwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yIHsKcHJv
dGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRh
aW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90
YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVl
X3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0
eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAg
ICAgICAgICAgcmVmZXJlbmNlOwoKICBleHBsaWNpdCBiYWNrX2luc2VydF9pdGVyYXRvcihfQ29u
dGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8
X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVl
X3R5cGUmIF9fdmFsdWUpIHsgCiAgICBjb250YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9w
ZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRh
aW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJh
dG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCiMg
Mzc4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4K
aW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGJhY2tfaW5zZXJ0ZXIoX0Nv
bnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBmcm9udF9pbnNlcnRf
aXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAg
dHlwZWRlZiBfQ29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0
cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAg
ICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVy
ZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVk
ZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGZyb250X2luc2Vy
dF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAgZnJvbnRf
aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBf
Q29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7IAogICAgY29udGFpbmVyLT5wdXNoX2Zy
b250KF9fdmFsdWUpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBmcm9udF9pbnNlcnRfaXRlcmF0
b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5z
ZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0K
ICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJl
dHVybiAqdGhpczsgfQp9OwoKIyA0MTcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1
LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRl
IDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWlu
ZXI+IGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkgewogIHJldHVybiBmcm9udF9pbnNl
cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWlu
ZXI+CmNsYXNzIGluc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250
YWluZXI7CiAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRlcjsKcHVibGljOgogIHR5
cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1
dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAg
ICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVm
IHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRh
aW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2kpIAogICAgOiBjb250
YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYK
ICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1
ZSkgeyAKICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsKICAgICsr
aXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFp
bmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9D
b250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCiMgNDU5ICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lciwgY2xhc3Mg
X0l0ZXJhdG9yPgppbmxpbmUgCmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBpbnNlcnRlcihf
Q29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Db250
YWluZXI6Oml0ZXJhdG9yIF9faXRlcjsKICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWlu
ZXI+KF9feCwgX19pdGVyKF9faSkpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs
SXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCYsIAogICAgICAgICAg
Y2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90PiAKCgoKCmNsYXNzIHJldmVyc2VfYmlkaXJlY3Rp
b25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8
X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgX1RwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFuY2U+ICBfU2VsZjsKcHJvdGVjdGVkOgog
IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAg
ICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAg
ICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2UgICAgICAgICAgICAgICAgIHJl
ZmVyZW5jZTsKCiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30KICBleHBsaWNp
dCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBf
X3gpCiAgICA6IGN1cnJlbnQoX194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgYmFzZSgp
IGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0
IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgcmV0dXJu
ICotLV9fdG1wOwogIH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihv
cGVyYXRvciooKSk7IH0KCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJlbnQ7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBf
X3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2Vs
ZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAg
X1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArK2N1
cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKIyA1NTAgIi91c3IvbGliL2djYy1saWIv
aTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3Iu
aCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsCiAg
ICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBib29sIG9wZXJhdG9yPT0oCiAgICBjb25z
dCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlz
dGFuY2U+JiBfX3gsIAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9C
aUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX195KQp7CiAgcmV0dXJuIF9feC5iYXNlKCkg
PT0gX195LmJhc2UoKTsKfQoKCgogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+
CmNsYXNzIHJldmVyc2VfaXRlcmF0b3IgCnsKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBjdXJyZW50
OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6
aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAg
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y
Pjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlcgogICAgICAgICAgcG9p
bnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZl
cmVuY2UKICAgICAgICAgIHJlZmVyZW5jZTsKCiAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3Jf
dHlwZTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiBfU2VsZjsKCnB1Ymxp
YzoKICByZXZlcnNlX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2l0ZXJhdG9yKGl0
ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7fQoKICByZXZlcnNlX2l0ZXJhdG9yKGNv
bnN0IF9TZWxmJiBfX3gpIDogY3VycmVudChfX3guY3VycmVudCkge30KCiAgdGVtcGxhdGUgPGNs
YXNzIF9JdGVyPgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cj4mIF9feCkKICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7fQoKICAgIAogIGl0ZXJhdG9yX3R5
cGUgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3Iq
KCkgY29uc3QgewogICAgX0l0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsKICAgIHJldHVybiAqLS1f
X3RtcDsKICB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0
b3IqKCkpOyB9CgoKICBfU2VsZiYgb3BlcmF0b3IrKygpIHsKICAgIC0tY3VycmVudDsKICAgIHJl
dHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1w
ID0gKnRoaXM7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBv
cGVyYXRvci0tKCkgewogICAgKytjdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2Vs
ZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICsrY3VycmVu
dDsKICAgIHJldHVybiBfX3RtcDsKICB9CgogIF9TZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5
cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4gX1NlbGYoY3VycmVudCAtIF9fbik7CiAgfQogIF9T
ZWxmJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgLT0gX19u
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBl
IF9fbikgY29uc3QgewogICAgcmV0dXJuIF9TZWxmKGN1cnJlbnQgKyBfX24pOwogIH0KICBfU2Vs
ZiYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50ICs9IF9fbjsK
ICAgIHJldHVybiAqdGhpczsKICB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90
eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0gIAp9OyAKIAp0ZW1wbGF0
ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2Vf
aXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LCAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBy
ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3guYmFzZSgpID09
IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9w
ZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwgCiAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewog
IHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVy
YXRvcj4KaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVy
ZW5jZV90eXBlCm9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f
eCwgCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewog
IHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVy
YXRvcj4KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiAKb3BlcmF0b3IrKHR5cGVu
YW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAg
ICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KSB7CiAgcmV0dXJu
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0gX19uKTsKfQoKIyA4MDUg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0Rpc3QgPSBwdHJkaWZmX3Q+IApjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsKICBmcmllbmQgYm9v
bCBvcGVyYXRvcj09IDw+ICAoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvciYp
Owpwcm90ZWN0ZWQ6CiAgaXN0cmVhbSogX01fc3RyZWFtOwogIF9UcCBfTV92YWx1ZTsKICBib29s
IF9NX2VuZF9tYXJrZXI7CiAgdm9pZCBfTV9yZWFkKCkgewogICAgX01fZW5kX21hcmtlciA9ICgq
X01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICAgIGlmIChfTV9lbmRfbWFya2VyKSAqX01fc3Ry
ZWFtID4+IF9NX3ZhbHVlOwogICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUg
OiBmYWxzZTsKICB9CnB1YmxpYzoKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyAgaXRlcmF0
b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAg
dHlwZWRlZiBfRGlzdCAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNv
bnN0IF9UcCogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgICAgICAgICAg
cmVmZXJlbmNlOwoKICBpc3RyZWFtX2l0ZXJhdG9yKCkgOiBfTV9zdHJlYW0oJmNpbiksIF9NX2Vu
ZF9tYXJrZXIoZmFsc2UpIHt9CiAgaXN0cmVhbV9pdGVyYXRvcihpc3RyZWFtJiBfX3MpIDogX01f
c3RyZWFtKCZfX3MpIHsgX01fcmVhZCgpOyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0
IHsgcmV0dXJuIF9NX3ZhbHVlOyB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0
dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4mIG9w
ZXJhdG9yKysoKSB7IAogICAgX01fcmVhZCgpOyAKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXN0
cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiBvcGVyYXRvcisrKGludCkgIHsKICAgIGlzdHJlYW1f
aXRlcmF0b3I8X1RwLCBfRGlzdD4gX190bXAgPSAqdGhpczsKICAgIF9NX3JlYWQoKTsKICAgIHJl
dHVybiBfX3RtcDsKICB9Cn07CgojIDg2NCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIu
OTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JiBfX3gsCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9feSkgewog
IHJldHVybiAoX194Ll9NX3N0cmVhbSA9PSBfX3kuX01fc3RyZWFtICYmCiAgICAgICAgICBfX3gu
X01fZW5kX21hcmtlciA9PSBfX3kuX01fZW5kX21hcmtlcikgfHwKICAgICAgICAgX194Ll9NX2Vu
ZF9tYXJrZXIgPT0gZmFsc2UgJiYgX195Ll9NX2VuZF9tYXJrZXIgPT0gZmFsc2U7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CmNsYXNzIG9zdHJlYW1faXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgb3N0
cmVhbSogX01fc3RyZWFtOwogIGNvbnN0IGNoYXIqIF9NX3N0cmluZzsKcHVibGljOgogIHR5cGVk
ZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQg
ICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAg
ZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwog
IHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIG9zdHJlYW1faXRlcmF0
b3Iob3N0cmVhbSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKDApIHt9CiAgb3N0
cmVhbV9pdGVyYXRvcihvc3RyZWFtJiBfX3MsIGNvbnN0IGNoYXIqIF9fYykgCiAgICA6IF9NX3N0
cmVhbSgmX19zKSwgX01fc3RyaW5nKF9fYykgIHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBv
cGVyYXRvcj0oY29uc3QgX1RwJiBfX3ZhbHVlKSB7IAogICAgKl9NX3N0cmVhbSA8PCBfX3ZhbHVl
OwogICAgaWYgKF9NX3N0cmluZykgKl9NX3N0cmVhbSA8PCBfTV9zdHJpbmc7CiAgICByZXR1cm4g
KnRoaXM7CiAgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4g
KnRoaXM7IH0KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAq
dGhpczsgfSAKICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVy
biAqdGhpczsgfSAKfTsKCiMgOTA3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4y
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgogCgoKCiAKIAog
CiMgNTYgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiAKCiAKCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lk
IF9faXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYiwgX1RwKikg
ewogIF9UcCBfX3RtcCA9ICpfX2E7CiAgKl9fYSA9ICpfX2I7CiAgKl9fYiA9IF9fdG1wOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KaW5saW5l
IHZvaWQgaXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYikgewog
IF9faXRlcl9zd2FwKF9fYSwgX19iLCBfX3ZhbHVlX3R5cGUoIF9fYSApICk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CmlubGluZSB2b2lkIHN3YXAoX1RwJiBfX2EsIF9UcCYgX19iKSB7CiAgX1Rw
IF9fdG1wID0gX19hOwogIF9fYSA9IF9fYjsKICBfX2IgPSBfX3RtcDsKfQoKIAogCgoKCgoKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBjb25zdCBfVHAmIG1pbihjb25zdCBfVHAmIF9fYSwg
Y29uc3QgX1RwJiBfX2IpIHsKICByZXR1cm4gX19iIDwgX19hID8gX19iIDogX19hOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNv
bnN0IF9UcCYgX19iKSB7CiAgcmV0dXJuICBfX2EgPCBfX2IgPyBfX2IgOiBfX2E7Cn0KCgoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAmIG1pbihj
b25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkgewogIHJldHVy
biBfX2NvbXAoX19iLCBfX2EpID8gX19iIDogX19hOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25z
dCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKSB7CiAgcmV0dXJuIF9fY29tcChfX2EsIF9fYikg
PyBfX2IgOiBfX2E7Cn0KCiAKIAoKIAogCiAKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0cHV0
SXRlciBfX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcsIF9EaXN0YW5jZSopCnsKICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAqX19yZXN1bHQgPSAq
X19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9PdXRw
dXRJdGVyCl9fY29weShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsCiAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgcmFuZG9tX2FjY2Vzc19pdGVy
YXRvcl90YWcsIF9EaXN0YW5jZSopCnsKICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBf
X2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgewogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAr
K19fZmlyc3Q7CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CmlubGluZSBfVHAqCl9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19m
aXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICBtZW1tb3ZlKF9fcmVz
dWx0LCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7CiAgcmV0dXJu
IF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Jvb2xUeXBlPgpzdHJ1Y3QgX19jb3B5
X2Rpc3BhdGNoIHsKICBzdGF0aWMgX091dHB1dEl0ZXIgY29weShfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0NhdGVnb3J5OwogICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAg
ICByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9DYXRlZ29yeSgpLCAo
X0Rpc3RhbmNlKikgMCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29w
eV9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHko
Y29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewog
ICAgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogIH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfZGlzcGF0Y2g8Y29uc3QgX1Rw
KiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19m
aXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2Nv
cHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBj
b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX1RwOwogIHR5cGVkZWYgdHlwZW5h
bWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAg
ICAgICAgICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2Rpc3BhdGNoPF9JbnB1dEl0ZXIsIF9P
dXRwdXRJdGVyLCBfVHJpdmlhbD4KICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
KTsKfQoKIyAyMTMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4v
Li4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMwoKCiAKIAoKdGVtcGxhdGUgPGNsYXNz
IF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsIAogICAgICAg
ICAgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2NvcHlfYmFj
a3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LCAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRp
cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9EaXN0YW5jZSopCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAq
LS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBf
RGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIgX19jb3B5X2JhY2t3YXJkKF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf
dGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Uq
KQp7CiAgZm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1f
X24pCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoK
IAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRp
cmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQm9vbFR5cGU+CnN0cnVjdCBfX2NvcHlf
YmFja3dhcmRfZGlzcGF0Y2gKewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9C
aWRpcmVjdGlvbmFsSXRlcjE+OjppdGVyYXRvcl9jYXRlZ29yeSAKICAgICAgICAgIF9DYXQ7CiAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46OmRp
ZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlOwoKICBzdGF0aWMgX0JpZGlyZWN0aW9u
YWxJdGVyMiBjb3B5KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KSB7
CiAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9D
YXQoKSwgKF9EaXN0YW5jZSopIDApOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBz
dGF0aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9U
cCogX19yZXN1bHQpIHsKICAgIGNvbnN0IHB0cmRpZmZfdCBfTnVtID0gX19sYXN0IC0gX19maXJz
dDsKICAgIG1lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIF9O
dW0pOwogICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9UcCosIF9f
dHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0
IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gIF9fY29weV9iYWNrd2Fy
ZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgICAgOjpjb3B5KF9fZmlyc3Qs
IF9fbGFzdCwgX19yZXN1bHQpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQkkxLCBjbGFzcyBf
QkkyPgppbmxpbmUgX0JJMiBjb3B5X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3Qs
IF9CSTIgX19yZXN1bHQpIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9CSTI+Ojp2YWx1ZV90eXBlPgogICAgICAgICAgICAgICAgICAg
ICAgICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFs
OwogIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1RyaXZpYWw+
CiAgICAgICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9CgojIDMw
MyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0bF9hbGdvYmFzZS5oIiAzCgoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgpwYWlyPF9JbnB1dEl0ZXIsIF9PdXRw
dXRJdGVyPiBfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcp
IHsKICBmb3IgKCA7IF9fY291bnQgPiAwOyAtLV9fY291bnQpIHsKICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0OwogICAgKytfX2ZpcnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIHBhaXI8
X0lucHV0SXRlciwgX091dHB1dEl0ZXI+KF9fZmlyc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SQUl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBh
aXI8X1JBSXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9SQUl0ZXIgX19maXJzdCwgX1NpemUg
X19jb3VudCwKICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgX1JBSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3Vu
dDsKICByZXR1cm4gcGFpcjxfUkFJdGVyLCBfT3V0cHV0SXRlcj4oX19sYXN0LCBjb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091
dHB1dEl0ZXI+Cl9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091
dHB1dEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3Qg
KSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9P
dXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4KY29weV9uKF9J
bnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsK
ICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQpOwp9CgogCiAKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQgZmlsbChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKSB7
CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBf
X3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFz
cyBfVHA+Cl9PdXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24s
IGNvbnN0IF9UcCYgX192YWx1ZSkgewogIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJz
dCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICByZXR1cm4gX19maXJzdDsKfQoKIAogCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgpwYWlyPF9JbnB1dEl0
ZXIxLCBfSW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIp
IHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAqX19maXJzdDEgPT0gKl9fZmlyc3Qy
KSB7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgcmV0dXJuIHBhaXI8X0lu
cHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZGlj
YXRlPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0SXRlcjEg
X19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICB3aGlsZSAoX19maXJzdDEgIT0g
X19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgKytf
X2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBf
SW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXIyIF9fZmlyc3QyKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3Qx
LCArK19fZmlyc3QyKQogICAgaWYgKCpfX2ZpcnN0MSAhPSAqX19maXJzdDIpCiAgICAgIHJldHVy
biBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBj
bGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KaW5saW5lIGJvb2wgZXF1
YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3By
ZWQpIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJz
dDIpCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICBy
ZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgpib29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJl
KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy
KSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIK
ICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmICgqX19maXJzdDEgPCAq
X19maXJzdDIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0
MSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAm
JiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNs
YXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29t
cGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s
YXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBm
b3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAg
IDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpf
X2ZpcnN0MikpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpf
X2ZpcnN0MSkpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxID09IF9f
bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKaW5saW5lIGJvb2wgCmxleGljb2dyYXBo
aWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHNpemVfdCBfX2xl
bjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIg
LSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmly
c3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVz
dWx0IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKfQoKaW5saW5lIGJvb2wgbGV4aWNvZ3JhcGhpY2Fs
X2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25z
dCBjaGFyKiBfX2xhc3QyKQp7CgogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZSgoY29u
c3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgX19sZXhp
Y29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy
IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9f
bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2Zp
cnN0MikKICAgICAgcmV0dXJuIC0xOwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAg
ICAgcmV0dXJuIDE7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgaWYgKF9f
Zmlyc3QyID09IF9fbGFzdDIpIHsKICAgIHJldHVybiAhKF9fZmlyc3QxID09IF9fbGFzdDEpOwog
IH0KICBlbHNlIHsKICAgIHJldHVybiAtMTsKICB9Cn0KCmlubGluZSBpbnQKX19sZXhpY29ncmFw
aGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3Qy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19s
YXN0MikKewogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAg
Y29uc3QgcHRyZGlmZl90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQg
X19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIp
KTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IAogICAgICAgICAgICAgICAgICAg
ICAgIDogKF9fbGVuMSA9PSBfX2xlbjIgPyAwIDogKF9fbGVuMSA8IF9fbGVuMiA/IC0xIDogMSkp
Owp9CgppbmxpbmUgaW50IApfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoY29uc3QgY2hh
ciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKewoKICBy
ZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0
Mik7CgoKCgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRl
cjI+CmludCBsZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3Qx
LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewogIHJldHVybiBfX2xl
eGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBf
X2xhc3QyKTsKfQoKIAoKCgogCiAKIAojIDE4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgv
Mi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbWVtb3J5IiAyIDMKCiMgMSAiL3Vzci9s
aWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0
bF9hbGxvYy5oIiAxIDMKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAog
CiAKIAoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4y
L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0MiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4
LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgojIDUzICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
bGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwoK
CgojIDEgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CiMgMzIgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCgoKCiAKCgoKCiMgNTYgIi91c3IvaW5j
bHVkZS9hc3NlcnQuaCIgMwoKCmV4dGVybiAiQyIgeyAKCiAKZXh0ZXJuIHZvaWQgX19hc3NlcnRf
ZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19jb25zdCBjaGFyICpfX2ZpbGUsCgkJ
CSAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0
aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKIApleHRlcm4gdm9pZCBf
X2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwK
CQkJCSAgdW5zaWduZWQgaW50IF9fbGluZSwKCQkJCSAgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9u
KQogICAgIHRocm93ICgpICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKIAoKZXh0
ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFyICpf
X2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChfX25vcmV0
dXJuX18pKTsKCgp9IAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgojIDU2ICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs
X2FsbG9jLmgiIDIgMwoKCgoKCgoKCgoKCgogICAgIAogICAgIAogICAgIAojIDEgIi91c3IvaW5j
bHVkZS9wdGhyZWFkLmgiIDEgMwogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKCgoKCiMgMSAi
L3Vzci9pbmNsdWRlL3NjaGVkLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoj
IDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CgoKCgoKCiMgNTEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgojIDYxICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAzCgoKCiMgNzIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA4NCAiL3Vzci9p
bmNsdWRlL3RpbWUuaCIgMwoKCgojIDk2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgojIDEx
MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKIyAzNjQgIi91c3IvaW5jbHVkZS90aW1lLmgi
IDMKCgoKIyAyOSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoKCiAKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9zY2hlZC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgog
CgoKCgoKCgoKCgoKIApzdHJ1Y3Qgc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgc2NoZWRfcHJpb3Jp
dHk7CiAgfTsKCmV4dGVybiAiQyIgeyAKCiAKCmV4dGVybiBpbnQgY2xvbmUgKGludCAoKl9fZm4p
ICh2b2lkICpfX2FyZyksIHZvaWQgKl9fY2hpbGRfc3RhY2ssCgkJICBpbnQgX19mbGFncywgdm9p
ZCAqX19hcmcpIHRocm93ICgpIDsKCgp9IAoKCgojIDczICIvdXNyL2luY2x1ZGUvYml0cy9zY2hl
ZC5oIiAzCgojIDMyICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKZXh0ZXJuICJDIiB7IAoK
IApleHRlcm4gaW50IHNjaGVkX3NldHBhcmFtIChfX3BpZF90IF9fcGlkLCBfX2NvbnN0IHN0cnVj
dCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgc2No
ZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkg
dGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHNjaGVkX3NldHNjaGVkdWxlciAoX19waWRfdCBfX3Bp
ZCwgaW50IF9fcG9saWN5LAoJCQkgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9f
cGFyYW0pIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBzY2hlZF9nZXRzY2hlZHVsZXIgKF9fcGlk
X3QgX19waWQpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCkgdGhy
b3cgKCkgOwoKIApleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXggKGludCBfX2FsZ29y
aXRobSkgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4gKGlu
dCBfX2FsZ29yaXRobSkgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHNjaGVkX3JyX2dldF9pbnRl
cnZhbCAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3QpIHRocm93ICgpIDsKCn0g
CgoKIyAyMCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS90
aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7IAoK
CgoKIAoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0
ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8y
Ljk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKCiMgMTI2ICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgogCgogCgoKIyAx
ODggIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIg
MwoKCgoKCiAKCgoKCiAKCgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUu
Mi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoKCgoKCgoKCgogCgogCgojIDMxNyAiL3Vzci9s
aWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgojIDM4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgogCgoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgoKIAoKCiAKCgoKCgogCgoKZXh0ZXJuIGxvbmcgaW50IF9fc3lzY29uZiAoaW50KTsKCgoK
CiAKCiAKCiAKCgogCgoKCgoKCiMgNzMgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMwoKIyA0
MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKIAoKCgoKCgoKCgoKCgoKIAp0eXBlZGVmIF9f
Y2xvY2tfdCBjbG9ja190OwoKCgoKIyA3MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDg0
ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgOTYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK
CgoKCiMgMTEyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgoKIApzdHJ1Y3QgdG0KewogIGlu
dCB0bV9zZWM7CQkJIAogIGludCB0bV9taW47CQkJIAogIGludCB0bV9ob3VyOwkJCSAKICBpbnQg
dG1fbWRheTsJCQkgCiAgaW50IHRtX21vbjsJCQkgCiAgaW50IHRtX3llYXI7CQkJIAogIGludCB0
bV93ZGF5OwkJCSAKICBpbnQgdG1feWRheTsJCQkgCiAgaW50IHRtX2lzZHN0OwkJCSAKCgogIGxv
bmcgaW50IHRtX2dtdG9mZjsJCSAKICBfX2NvbnN0IGNoYXIgKnRtX3pvbmU7CSAKCgoKCn07CgoK
CiAKc3RydWN0IGl0aW1lcnNwZWMKICB7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7
CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7CiAgfTsKCiAKc3RydWN0IHNpZ2V2ZW50OwoK
CgoKCgoKCgoKCiAKCmV4dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0aHJvdyAoKSA7CgogCmV4
dGVybiB0aW1lX3QgdGltZSAodGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKSA7CgogCmV4dGVybiBk
b3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190aW1lMCkKICAgICB0aHJv
dyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApleHRlcm4gdGltZV90IG1rdGlt
ZSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKSA7CgoKIAoKCmV4dGVybiBzaXplX3Qgc3RyZnRp
bWUgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAoJCQlfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCgkJCV9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0
IF9fdHApIHRocm93ICgpIDsKCgoKCgoKCgoKCiAKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAo
X19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpIDsKCiAKCmV4dGVybiBzdHJ1Y3QgdG0g
KmxvY2FsdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpIDsKCgogCgpleHRl
cm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1l
ciwKCQkJICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKSA7CgogCgpleHRl
cm4gc3RydWN0IHRtICpsb2NhbHRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190
aW1lciwKCQkJICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKSA7CgoK
IAoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUgKF9fY29uc3Qgc3RydWN0IHRtICpfX3RwKSB0aHJvdyAo
KSA7CgogCmV4dGVybiBjaGFyICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93
ICgpIDsKCgogCgogCgpleHRlcm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAq
X19yZXN0cmljdCBfX3RwLAoJCQljaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKSA7Cgog
CmV4dGVybiBjaGFyICpjdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVy
LAoJCSAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpIDsKCgoKIApleHRlcm4g
Y2hhciAqX190em5hbWVbMl07CSAKZXh0ZXJuIGludCBfX2RheWxpZ2h0OwkJIApleHRlcm4gbG9u
ZyBpbnQgX190aW1lem9uZTsJIAoKCgogCmV4dGVybiBjaGFyICp0em5hbWVbMl07CgogCgpleHRl
cm4gdm9pZCB0enNldCAodm9pZCkgdGhyb3cgKCkgOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0Owpl
eHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCiAKCmV4dGVybiBpbnQgc3RpbWUgKF9fY29uc3Qg
dGltZV90ICpfX3doZW4pIHRocm93ICgpIDsKCgoKIAoKCgoKCgogCgoKIApleHRlcm4gdGltZV90
IHRpbWVnbSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKSA7CgogCmV4dGVybiB0aW1lX3QgdGlt
ZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBkeXNpemUg
KGludCBfX3llYXIpIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoK
IApleHRlcm4gaW50IG5hbm9zbGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVz
dGVkX3RpbWUsCgkJICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykgdGhyb3cgKCkg
OwoKCiAKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1
Y3QgdGltZXNwZWMgKl9fcmVzKSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgY2xvY2tfZ2V0dGlt
ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqX190cCkgdGhyb3cgKCkg
OwoKIApleHRlcm4gaW50IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBfX2Nv
bnN0IHN0cnVjdCB0aW1lc3BlYyAqX190cCkKICAgICB0aHJvdyAoKSA7CgojIDMwNSAiL3Vzci9p
bmNsdWRlL3RpbWUuaCIgMwoKCgogCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9ja2lkX3Qg
X19jbG9ja19pZCwKCQkJIHN0cnVjdCBzaWdldmVudCAqX19yZXN0cmljdCBfX2V2cCwKCQkJIHRp
bWVyX3QgKl9fcmVzdHJpY3QgX190aW1lcmlkKSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgdGlt
ZXJfZGVsZXRlICh0aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHRp
bWVyX3NldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBpbnQgX19mbGFncywKCQkJICBfX2NvbnN0
IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fdmFsdWUsCgkJCSAgc3RydWN0IGl0aW1l
cnNwZWMgKl9fcmVzdHJpY3QgX19vdmFsdWUpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCB0aW1l
cl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgc3RydWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUp
CiAgICAgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHRpbWVyX2dldG92ZXJydW4gKHRpbWVyX3Qg
X190aW1lcmlkKSB0aHJvdyAoKSA7CgoKCiMgMzQ5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoK
IyAzNTkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKfSAKCgoKCiMgMjEgIi91c3IvaW5jbHVk
ZS9wdGhyZWFkLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7IAoKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKIyAzMyAiL3Vzci9pbmNs
dWRlL2JpdHMvc2lnc2V0LmgiIDMKCgoKIAoKCgoKCiMgMTI1ICIvdXNyL2luY2x1ZGUvYml0cy9z
aWdzZXQuaCIgMwoKIyAzMyAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKCgogCgoKCgoKCgoK
CgoKCgp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CgoKCiMgMzcxICIvdXNyL2luY2x1ZGUv
c2lnbmFsLmgiIDMKCgp9IAoKCiMgMjQgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKCgoKCgojIDE0MiAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMK
CiMgMjUgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9pbml0c3Bpbi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCiMgMjYgIi91
c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKCgpleHRlcm4gIkMiIHsgCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgplbnVtCnsKICBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSwKCiAgUFRI
UkVBRF9DUkVBVEVfREVUQUNIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX0lOSEVSSVRfU0NIRUQs
CgogIFBUSFJFQURfRVhQTElDSVRfU0NIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX1NDT1BFX1NZ
U1RFTSwKCiAgUFRIUkVBRF9TQ09QRV9QUk9DRVNTCgp9OwoKZW51bQp7CiAgUFRIUkVBRF9NVVRF
WF9USU1FRF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVY
X0VSUk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoKCgoKCgoKCgoKCn07
CgplbnVtCnsKICBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKCiAgUFRIUkVBRF9QUk9DRVNTX1NI
QVJFRAoKfTsKCiMgMTE4ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCgoKCgogCgoKCgoKCiAK
CnN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlcgp7CiAgdm9pZCAoKl9fcm91dGluZSkgKHZv
aWQgKik7CQkgICAKICB2b2lkICpfX2FyZzsJCQkJICAgCiAgaW50IF9fY2FuY2VsdHlwZTsJCQkg
ICAKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fcHJldjsgIAp9OwoKIAoKZW51
bQp7CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxFLAoKICBQVEhSRUFEX0NBTkNFTF9ESVNBQkxFCgp9
OwplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9ERUZFUlJFRCwKCiAgUFRIUkVBRF9DQU5DRUxfQVNZ
TkNIUk9OT1VTCgp9OwoKCgogCgogCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZSAocHRocmVh
ZF90ICpfX3Jlc3RyaWN0IF9fdGhyZWFkLAoJCQkgICBfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpf
X3Jlc3RyaWN0IF9fYXR0ciwKCQkJICAgdm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICop
LAoJCQkgICB2b2lkICpfX3Jlc3RyaWN0IF9fYXJnKSB0aHJvdyAoKSA7CgogCmV4dGVybiBwdGhy
ZWFkX3QgcHRocmVhZF9zZWxmICh2b2lkKSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgcHRocmVh
ZF9lcXVhbCAocHRocmVhZF90IF9fdGhyZWFkMSwgcHRocmVhZF90IF9fdGhyZWFkMikgdGhyb3cg
KCkgOwoKIApleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9fcmV0dmFsKQogICAgIHRo
cm93ICgpICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgogCgoKZXh0ZXJuIGludCBw
dGhyZWFkX2pvaW4gKHB0aHJlYWRfdCBfX3RoLCB2b2lkICoqX190aHJlYWRfcmV0dXJuKSB0aHJv
dyAoKSA7CgogCgoKCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBfX3RoKSB0
aHJvdyAoKSA7CgoKIAoKIAoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0aHJlYWRf
YXR0cl90ICpfX2F0dHIpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZGVz
dHJveSAocHRocmVhZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHB0
aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCQlp
bnQgX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9n
ZXRkZXRhY2hzdGF0ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAoJCQkJCWludCAq
X19kZXRhY2hzdGF0ZSkgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRz
Y2hlZHBhcmFtIChwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCgkJCQkgICAgICAg
X19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QKCQkJCSAgICAgICBfX3BhcmFt
KSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcGFyYW0gKF9f
Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKCQkJCSAgICAgICBfX2F0dHIsCgkJCQkg
ICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgdGhyb3cg
KCkgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSAocHRocmVhZF9h
dHRyX3QgKl9fYXR0ciwgaW50IF9fcG9saWN5KQogICAgIHRocm93ICgpIDsKCiAKZXh0ZXJuIGlu
dCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9f
cmVzdHJpY3QKCQkJCQlfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX3BvbGljeSkKICAgICB0aHJv
dyAoKSA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCAocHRocmVh
ZF9hdHRyX3QgKl9fYXR0ciwKCQkJCQkgaW50IF9faW5oZXJpdCkgdGhyb3cgKCkgOwoKIApleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQgKF9fY29uc3QgcHRocmVhZF9hdHRy
X3QgKl9fcmVzdHJpY3QKCQkJCQkgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19pbmhlcml0KQog
ICAgIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NvcGUgKHB0aHJl
YWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3Njb3BlKQogICAgIHRocm93ICgpIDsKCiAKZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVz
dHJpY3QgX19hdHRyLAoJCQkJICBpbnQgKl9fcmVzdHJpY3QgX19zY29wZSkgdGhyb3cgKCkgOwoK
IyAyNTQgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKCgogCgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9hdHRyX3NldHN0YWNrYWRkciAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKCQkJCSAgICAgIHZv
aWQgKl9fc3RhY2thZGRyKSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dl
dHN0YWNrYWRkciAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAoJCQkJICAgICAg
X19hdHRyLCB2b2lkICoqX19yZXN0cmljdCBfX3N0YWNrYWRkcikKICAgICB0aHJvdyAoKSA7Cgoj
IDI3OSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwoKCiAKCgpleHRlcm4gaW50IHB0aHJlYWRf
YXR0cl9zZXRzdGFja3NpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCgkJCQkgICAgICBzaXpl
X3QgX19zdGFja3NpemUpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0
c3RhY2tzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CgkJCQkgICAgICBf
X2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX3N0YWNrc2l6ZSkKICAgICB0aHJvdyAoKSA7Cgog
CgogCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0
X3RocmVhZCwgaW50IF9fcG9saWN5LAoJCQkJICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAq
X19wYXJhbSkKICAgICB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9nZXRzY2hlZHBh
cmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLAoJCQkJICBpbnQgKl9fcmVzdHJpY3QgX19w
b2xpY3ksCgkJCQkgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAg
IHRocm93ICgpIDsKCgoKCgoKCgoKCgoKCgoKCgogCgogCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0
ZXhfaW5pdCAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCgkJCSAgICAgICBf
X2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKCQkJICAgICAgIF9fbXV0ZXhf
YXR0cikgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRo
cmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9t
dXRleF90cnlsb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpIDsKCiAKZXh0
ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhy
b3cgKCkgOwoKCgoKCgoKCiAKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3VubG9jayAocHRocmVh
ZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKSA7CgoKIAoKIAoKZXh0ZXJuIGludCBwdGhyZWFk
X211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93ICgpIDsK
CiAKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95IChwdGhyZWFkX211dGV4YXR0
cl90ICpfX2F0dHIpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9n
ZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKgoJCQkJCSBfX3Jlc3RyaWN0
IF9fYXR0ciwKCQkJCQkgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCkgOwoKIApl
eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfbXV0ZXhhdHRy
X3QgKl9fYXR0ciwKCQkJCQkgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCkgOwoKIyAzNzggIi91c3Iv
aW5jbHVkZS9wdGhyZWFkLmgiIDMKCgoKIAoKIAoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfaW5p
dCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAoJCQkgICAgICBfX2NvbnN0IHB0
aHJlYWRfY29uZGF0dHJfdCAqX19yZXN0cmljdAoJCQkgICAgICBfX2NvbmRfYXR0cikgdGhyb3cg
KCkgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0cm95IChwdGhyZWFkX2NvbmRfdCAq
X19jb25kKSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3NpZ25hbCAocHRo
cmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfY29u
ZF9icm9hZGNhc3QgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpIDsKCiAKCmV4dGVy
biBpbnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29u
ZCwKCQkJICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgpIHRocm93ICgp
IDsKCiAKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0IChwdGhyZWFkX2NvbmRf
dCAqX19yZXN0cmljdCBfX2NvbmQsCgkJCQkgICBwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3Qg
X19tdXRleCwKCQkJCSAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CgkJCQkg
ICBfX2Fic3RpbWUpIHRocm93ICgpIDsKCiAKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRy
X2luaXQgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKSA7CgogCmV4dGVybiBp
bnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikg
dGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZCAoX19j
b25zdCBwdGhyZWFkX2NvbmRhdHRyX3QgKgoJCQkJCV9fcmVzdHJpY3QgX19hdHRyLAoJCQkJCWlu
dCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFk
X2NvbmRhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyLAoJCQkJCWlu
dCBfX3BzaGFyZWQpIHRocm93ICgpIDsKCgojIDQ5NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg
MwoKCiMgNTQwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCgoKCiAKCiAKCgoKCgpleHRlcm4g
aW50IHB0aHJlYWRfa2V5X2NyZWF0ZSAocHRocmVhZF9rZXlfdCAqX19rZXksCgkJCSAgICAgICB2
b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGlu
dCBwdGhyZWFkX2tleV9kZWxldGUgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpIDsKCiAK
ZXh0ZXJuIGludCBwdGhyZWFkX3NldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5LAoJCQkJ
X19jb25zdCB2b2lkICpfX3BvaW50ZXIpIHRocm93ICgpIDsKCiAKZXh0ZXJuIHZvaWQgKnB0aHJl
YWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpIDsKCgogCgogCgoK
CmV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2ws
CgkJCSB2b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSkgdGhyb3cgKCkgOwoKCiAKCiAKCmV4
dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZSAoaW50IF9fc3RhdGUsIGludCAqX19vbGRz
dGF0ZSkgdGhyb3cgKCkgOwoKIAoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUgKGlu
dCBfX3R5cGUsIGludCAqX19vbGR0eXBlKSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgcHRocmVh
ZF9jYW5jZWwgKHB0aHJlYWRfdCBfX3RocmVhZCkgdGhyb3cgKCkgOwoKIAoKCmV4dGVybiB2b2lk
IHB0aHJlYWRfdGVzdGNhbmNlbCAodm9pZCkgdGhyb3cgKCkgOwoKCiAKCgoKCgoKCgoKCmV4dGVy
biB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVm
ZmVyICpfX2J1ZmZlciwKCQkJCSAgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAoJCQkJICAg
dm9pZCAqX19hcmcpIHRocm93ICgpIDsKCiAKCgoKCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVh
bnVwX3BvcCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKCQkJCSAg
aW50IF9fZXhlY3V0ZSkgdGhyb3cgKCkgOwoKIAoKCiMgNjM5ICIvdXNyL2luY2x1ZGUvcHRocmVh
ZC5oIiAzCgoKCgoKCgoKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDEg
MwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgogCgpleHRlcm4gaW50IHB0aHJlYWRfc2ln
bWFzayAoaW50IF9faG93LAoJCQkgICAgX19jb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9f
bmV3bWFzaywKCQkJICAgIF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19vbGRtYXNrKXRocm93ICgp
IDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2tpbGwgKHB0aHJlYWRfdCBfX3RocmVhZCwgaW50IF9f
c2lnbm8pIHRocm93ICgpIDsKCgojIDY1MCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoK
CiAKCiAKCgoKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBh
cmUpICh2b2lkKSwKCQkJICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksCgkJCSAgIHZvaWQgKCpf
X2NoaWxkKSAodm9pZCkpIHRocm93ICgpIDsKCiAKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2tpbGxf
b3RoZXJfdGhyZWFkc19ucCAodm9pZCkgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIHZvaWQgX19wdGhy
ZWFkX2luaXRpYWxpemUgKHZvaWQpIHRocm93ICgpIDsKCn0gCgoKIyA3MSAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxv
Yy5oIiAyIDMKCgoKCgoKCgojIDg3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4y
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKCiMgOTcgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxf
YWxsb2MuaCIgMwoKIyAxMTUgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwoKCgoKCgoKCgogCgoKCgoKIAog
CgoKCgoKCgoKCnRlbXBsYXRlIDxpbnQgX19pbnN0PgpjbGFzcyBfX21hbGxvY19hbGxvY190ZW1w
bGF0ZSB7Cgpwcml2YXRlOgoKICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOwog
IHN0YXRpYyB2b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKCgogIHN0YXRpYyB2
b2lkICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKCnB1YmxpYzoKCiAgc3RhdGlj
IHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgewogICAgdm9pZCogX19yZXN1bHQgPSBtYWxs
b2MoX19uKTsKICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9tYWxsb2Mo
X19uKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUo
dm9pZCogX19wLCBzaXplX3QgICkKICB7CiAgICBmcmVlKF9fcCk7CiAgfQoKICBzdGF0aWMgdm9p
ZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAgLCBzaXplX3QgX19uZXdfc3opCiAgewog
ICAgdm9pZCogX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAgaWYgKDAgPT0g
X19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICBy
ZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9pZCAoKiBfX3NldF9tYWxsb2NfaGFuZGxl
cih2b2lkICgqX19mKSgpKSkoKQogIHsKICAgIHZvaWQgKCogX19vbGQpKCkgPSBfX21hbGxvY19h
bGxvY19vb21faGFuZGxlcjsKICAgIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyID0gX19mOwog
ICAgcmV0dXJuKF9fb2xkKTsKICB9Cgp9OwoKIAoKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lk
ICgqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9o
YW5kbGVyKSgpID0gMDsKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCoKX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX21hbGxvYyhzaXplX3QgX19uKQp7CiAgICB2b2lk
ICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3Ig
KDs7KSB7CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9o
YW5kbGVyOwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsgdGhyb3cgYmFk
X2FsbG9jKCkgOyB9CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9f
cmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1
bHQpOwogICAgfQp9Cgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCogX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxsb2Modm9pZCogX19wLCBzaXplX3QgX19uKQp7
CiAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsK
CiAgICBmb3IgKDs7KSB7CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2Fs
bG9jX29vbV9oYW5kbGVyOwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsg
dGhyb3cgYmFkX2FsbG9jKCkgOyB9CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwog
ICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0
KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9Cgp0eXBlZGVmIF9fbWFsbG9jX2FsbG9jX3RlbXBs
YXRlPDA+IG1hbGxvY19hbGxvYzsKCnRlbXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpj
bGFzcyBzaW1wbGVfYWxsb2MgewoKcHVibGljOgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6
ZV90IF9fbikKICAgICAgeyByZXR1cm4gMCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6YWxs
b2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUodm9p
ZCkKICAgICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsg
fQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAg
eyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1Rw
KSk7IH0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICAgIHsgX0FsbG9j
OjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQp9OwoKIAogCiAKIAogCnRlbXBsYXRl
IDxjbGFzcyBfQWxsb2M+CmNsYXNzIGRlYnVnX2FsbG9jIHsKCnByaXZhdGU6CgogIGVudW0ge19T
X2V4dHJhID0gOH07ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgIAoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikK
ICB7CiAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRlKF9fbiArIF9T
X2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJldHVybiBfX3Jlc3Vs
dCArIF9TX2V4dHJhOwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNp
emVfdCBfX24pCiAgewogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gX1NfZXh0cmE7
CiAgICAoKHZvaWQpICgoICooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24gKSA/IDAgOgkoX19hc3Nl
cnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24iICwJIi91c3IvbGliL2djYy1saWIv
aTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIs
IDI2MywgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKICAgIF9BbGxvYzo6ZGVhbGxvY2F0
ZShfX3JlYWxfcCwgX19uICsgX1NfZXh0cmEpOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2Nh
dGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7CiAgICBj
aGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSBfU19leHRyYTsKICAgICgodm9pZCkgKCggKihz
aXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6ICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCIqKHNp
emVfdCopX19yZWFsX3AgPT0gX19vbGRfc3oiICwJIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51
eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIsIDI3MCwgX19Q
UkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKQog
ICAgICBfQWxsb2M6OnJlYWxsb2NhdGUoX19yZWFsX3AsIF9fb2xkX3N6ICsgX1NfZXh0cmEsIF9f
bmV3X3N6ICsgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uZXdfc3o7CiAg
ICByZXR1cm4gX19yZXN1bHQgKyBfU19leHRyYTsKICB9Cgp9OwoKCgoKCgoKCgoKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCgogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKdGVtcGxhdGUgPGJv
b2wgdGhyZWFkcywgaW50IGluc3Q+CmNsYXNzIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZSB7Cgpw
cml2YXRlOgogICAKICAgCgogICAgZW51bSB7X0FMSUdOID0gOH07CiAgICBlbnVtIHtfTUFYX0JZ
VEVTID0gMTI4fTsKICAgIGVudW0ge19ORlJFRUxJU1RTID0gX01BWF9CWVRFUy9fQUxJR059OwoK
ICBzdGF0aWMgc2l6ZV90CiAgX1Nfcm91bmRfdXAoc2l6ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVy
biAoKChfX2J5dGVzKSArIF9BTElHTi0xKSAmIH4oX0FMSUdOIC0gMSkpOyB9Cgpwcml2YXRlIDoK
ICB1bmlvbiBfT2JqIHsKICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGluazsKICAg
ICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOyAgICAgCiAgfTsKcHJpdmF0ZToKCgoKCiAgICBz
dGF0aWMgX09iaiogdm9sYXRpbGUgIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgogIHN0YXRp
YyAgc2l6ZV90IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKSB7CiAgICAgICAgcmV0
dXJuICgoKF9fYnl0ZXMpICsgX0FMSUdOLTEpL19BTElHTiAtIDEpOwogIH0KCiAgIAogIHN0YXRp
YyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7CiAgIAogICAKICBzdGF0aWMgY2hhciogX1Nf
Y2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCiAgIAogIHN0YXRpYyBj
aGFyKiBfU19zdGFydF9mcmVlOwogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICBzdGF0aWMg
c2l6ZV90IF9TX2hlYXBfc2l6ZTsKCgoKCgoKCgogICAgc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBf
U19ub2RlX2FsbG9jYXRvcl9sb2NrOwoKCgoKCgojIDM4OSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgoK
ICAgIGNsYXNzIF9Mb2NrIHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIF9Mb2NrKCkgeyBp
ZiAodGhyZWFkcykgcHRocmVhZF9tdXRleF9sb2NrKCZfU19ub2RlX2FsbG9jYXRvcl9sb2NrKSA7
IH0KICAgICAgICAgICAgfl9Mb2NrKCkgeyBpZiAodGhyZWFkcykgcHRocmVhZF9tdXRleF91bmxv
Y2soJl9TX25vZGVfYWxsb2NhdG9yX2xvY2spIDsgfQogICAgfTsKICAgIGZyaWVuZCBjbGFzcyBf
TG9jazsKCnB1YmxpYzoKCiAgIAogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQog
IHsKICAgIF9PYmoqIHZvbGF0aWxlICogX19teV9mcmVlX2xpc3Q7CiAgICBfT2JqKiAgIF9fcmVz
dWx0OwoKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJu
KG1hbGxvY19hbGxvYzo6YWxsb2NhdGUoX19uKSk7CiAgICB9CiAgICBfX215X2ZyZWVfbGlzdCA9
IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAgCiAgICAgCiAgICAg
CgogICAgICAgICAKICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CgogICAgX19yZXN1bHQg
PSAqX19teV9mcmVlX2xpc3Q7CiAgICBpZiAoX19yZXN1bHQgPT0gMCkgewogICAgICAgIHZvaWQq
IF9fciA9IF9TX3JlZmlsbChfU19yb3VuZF91cChfX24pKTsKICAgICAgICByZXR1cm4gX19yOwog
ICAgfQogICAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1bHQgLT4gX01fZnJlZV9saXN0X2xpbms7
CiAgICByZXR1cm4gKF9fcmVzdWx0KTsKICB9OwoKICAgCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0
ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgewogICAgX09iaiogX19xID0gKF9PYmoqKV9fcDsK
ICAgIF9PYmoqIHZvbGF0aWxlICogX19teV9mcmVlX2xpc3Q7CgogICAgaWYgKF9fbiA+IChzaXpl
X3QpIF9NQVhfQllURVMpIHsKICAgICAgICBtYWxsb2NfYWxsb2M6OmRlYWxsb2NhdGUoX19wLCBf
X24pOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9s
aXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAKCiAgICAgICAgIAogICAgICAgIF9M
b2NrIF9fbG9ja19pbnN0YW5jZTsKCiAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19t
eV9mcmVlX2xpc3Q7CiAgICAqX19teV9mcmVlX2xpc3QgPSBfX3E7CiAgICAgCiAgfQoKICBzdGF0
aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9f
bmV3X3N6KTsKCn0gOwoKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8IHRydWUgLCAw
PiBhbGxvYzsKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8ZmFsc2UsIDA+IHNpbmds
ZV9jbGllbnRfYWxsb2M7CgoKCiAKIAogCiAKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQg
X19pbnN0PgpjaGFyKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+
OjpfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpCnsKICAgIGNo
YXIqIF9fcmVzdWx0OwogICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpz
OwogICAgc2l6ZV90IF9fYnl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVlIC0gX1Nfc3RhcnRfZnJlZTsK
CiAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpIHsKICAgICAgICBfX3Jlc3Vs
dCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVz
OwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9IGVsc2UgaWYgKF9fYnl0ZXNfbGVmdCA+
PSBfX3NpemUpIHsKICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7
CiAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgICAgX19yZXN1
bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRl
czsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBlbHNlIHsKICAgICAgICBzaXplX3Qg
X19ieXRlc190b19nZXQgPQoJICAyICogX190b3RhbF9ieXRlcyArIF9TX3JvdW5kX3VwKF9TX2hl
YXBfc2l6ZSA+PiA0KTsKICAgICAgICAgCiAgICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDApIHsK
ICAgICAgICAgICAgX09iaiogdm9sYXRpbGUgKiBfX215X2ZyZWVfbGlzdCA9CiAgICAgICAgICAg
ICAgICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fYnl0ZXNfbGVm
dCk7CgogICAgICAgICAgICAoKF9PYmoqKV9TX3N0YXJ0X2ZyZWUpIC0+IF9NX2ZyZWVfbGlzdF9s
aW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSAoX09i
aiopX1Nfc3RhcnRfZnJlZTsKICAgICAgICB9CiAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFy
KiltYWxsb2MoX19ieXRlc190b19nZXQpOwogICAgICAgIGlmICgwID09IF9TX3N0YXJ0X2ZyZWUp
IHsKICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUgKiBf
X215X2ZyZWVfbGlzdDsKCSAgICBfT2JqKiBfX3A7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IAogICAgICAgICAgICAgCiAgICAgICAgICAgIGZvciAoX19pID0gX19zaXplOyBfX2kgPD0gX01B
WF9CWVRFUzsgX19pICs9IF9BTElHTikgewogICAgICAgICAgICAgICAgX19teV9mcmVlX2xpc3Qg
PSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2kpOwogICAgICAgICAgICAgICAg
X19wID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAgICAgaWYgKDAgIT0gX19wKSB7CiAg
ICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9s
aW5rOwogICAgICAgICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAg
ICAgICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9faTsKICAgICAg
ICAgICAgICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQoJICAgIF9TX2VuZF9mcmVlID0gMDsJIAogICAgICAgICAgICBfU19z
dGFydF9mcmVlID0gKGNoYXIqKW1hbGxvY19hbGxvYzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgIH0KICAg
ICAgICBfU19oZWFwX3NpemUgKz0gX19ieXRlc190b19nZXQ7CiAgICAgICAgX1NfZW5kX2ZyZWUg
PSBfU19zdGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAgICAgICAgcmV0dXJuKF9TX2NodW5r
X2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOwogICAgfQp9CgoKIAogCiAKdGVtcGxhdGUgPGJvb2wg
X190aHJlYWRzLCBpbnQgX19pbnN0Pgp2b2lkKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190
aHJlYWRzLCBfX2luc3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKewogICAgaW50IF9fbm9ianMg
PSAyMDsKICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24sIF9fbm9ianMpOwog
ICAgX09iaiogdm9sYXRpbGUgKiBfX215X2ZyZWVfbGlzdDsKICAgIF9PYmoqIF9fcmVzdWx0Owog
ICAgX09iaiogX19jdXJyZW50X29iajsKICAgIF9PYmoqIF9fbmV4dF9vYmo7CiAgICBpbnQgX19p
OwoKICAgIGlmICgxID09IF9fbm9ianMpIHJldHVybihfX2NodW5rKTsKICAgIF9fbXlfZnJlZV9s
aXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCiAgICAgCiAgICAg
IF9fcmVzdWx0ID0gKF9PYmoqKV9fY2h1bms7CiAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fbmV4
dF9vYmogPSAoX09iaiopKF9fY2h1bmsgKyBfX24pOwogICAgICBmb3IgKF9faSA9IDE7IDsgX19p
KyspIHsKICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsKICAgICAgICBfX25leHRf
b2JqID0gKF9PYmoqKSgoY2hhciopX19uZXh0X29iaiArIF9fbik7CiAgICAgICAgaWYgKF9fbm9i
anMgLSAxID09IF9faSkgewogICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlz
dF9saW5rID0gMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IF9fbmV4dF9vYmo7CiAgICAg
ICAgfQogICAgICB9CiAgICByZXR1cm4oX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Ym9vbCB0aHJl
YWRzLCBpbnQgaW5zdD4Kdm9pZCoKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGlu
c3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29sZF9zeiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25ld19zeikKewogICAg
dm9pZCogX19yZXN1bHQ7CiAgICBzaXplX3QgX19jb3B5X3N6OwoKICAgIGlmIChfX29sZF9zeiA+
IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7
CiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikpOwogICAgfQogICAgaWYgKF9T
X3JvdW5kX3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91cChfX25ld19zeikpIHJldHVybihfX3Ap
OwogICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7CiAgICBfX2NvcHlfc3ogPSBfX25l
d19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAgbWVtY3B5KF9fcmVzdWx0
LCBfX3AsIF9fY29weV9zeik7CiAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgcmV0
dXJuKF9fcmVzdWx0KTsKfQoKCiAgICB0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2lu
c3Q+CiAgICBwdGhyZWFkX211dGV4X3QKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro
cmVhZHMsIF9faW5zdD46Ol9TX25vZGVfYWxsb2NhdG9yX2xvY2sKICAgICAgICA9IHswLCAwLCAw
LCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgIH0gfSA7CgoKCgoKCgoKCiMgNjAyICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX2FsbG9jLmgiIDMKCgojIDY4OSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIu
OTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgoKdGVtcGxhdGUg
PGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19zdGFydF9mcmVlID0gMDsKCnRlbXBsYXRlIDxib29s
IF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f
dGhyZWFkcywgX19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJl
YWRzLCBpbnQgX19pbnN0PgpzaXplX3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk
cywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywg
aW50IF9faW5zdD4KX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6
X09iaiogdm9sYXRpbGUgCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z
dD4gOjpfU19mcmVlX2xpc3RbCiAgICBfTkZSRUVMSVNUUwpdID0gezAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIH07CiAKIAogCgoKCgoKCgoKCgogCiAKIAog
CiAKIAogCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFsbG9jYXRvciB7CiAgdHlwZWRl
ZiBhbGxvYyBfQWxsb2M7ICAgICAgICAgICAKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90ICAgICBz
aXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IF9UcCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsK
ICB0eXBlZGVmIF9UcCYgICAgICAgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBjb25z
dF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfVHAgICAgICAgIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRl
IDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+
IG90aGVyOwogIH07CgogIGFsbG9jYXRvcigpIHRocm93KCkgIHt9CiAgYWxsb2NhdG9yKGNvbnN0
IGFsbG9jYXRvciYpIHRocm93KCkgIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IGFsbG9jYXRv
cihjb25zdCBhbGxvY2F0b3I8X1RwMT4mKSB0aHJvdygpICB7fQogIH5hbGxvY2F0b3IoKSB0aHJv
dygpICB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4g
Jl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25z
dCB7IHJldHVybiAmX194OyB9CgogICAKICAgCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19u
LCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMCA/IHN0YXRpY19jYXN0PF9U
cCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgICAgICAgICAg
ICAgIDogMDsKICB9CgogICAKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlw
ZSBfX24pCiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsg
fQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpIAogICAgeyByZXR1cm4gc2l6
ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBj
b25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ryb3ko
cG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlPD4KY2xhc3MgYWxsb2Nh
dG9yPHZvaWQ+IHsKICB0eXBlZGVmIHNpemVfdCAgICAgIHNpemVfdHlwZTsKICB0eXBlZGVmIHB0
cmRpZmZfdCAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqICAgICAgIHBvaW50ZXI7
CiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAg
ICAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewog
ICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgYWxsb2NhdG9y
PF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGFs
bG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9
CgogCiAKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3Qg
X19hbGxvY2F0b3IgewogIF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7CgogIHR5cGVkZWYgc2l6
ZV90ICAgIHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiBfVHAqICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3Bv
aW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9U
cCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwICAgICAgICB2YWx1ZV90eXBlOwoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2Nh
dG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKCiAgX19hbGxvY2F0b3IoKSB0aHJvdygpICB7
fQogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yJiBfX2EpIHRocm93KCkgCiAgICA6IF9f
dW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQogIHRlbXBsYXRlIDxj
bGFzcyBfVHAxPgogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4m
IF9fYSkgdGhyb3coKSAKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdf
YWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSAge30KCiAgcG9pbnRlciBhZGRyZXNz
KHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2ludGVyIGFk
ZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKICAgCiAg
X1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVy
biBfX24gIT0gMAogICAgICAgID8gc3RhdGljX2Nhc3Q8X1RwKj4oX191bmRlcmx5aW5nX2FsbG9j
LmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSkKICAgICAgICA6IDA7CiAgfQoKICAgCiAgdm9p
ZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgeyBfX3VuZGVybHlp
bmdfYWxsb2MuZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICBzaXplX3R5
cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpIAogICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNp
emVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9f
dmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ryb3kocG9pbnRlciBfX3Ap
IHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9fYWxs
b2NhdG9yPHZvaWQsIF9BbGxvYz4gewogIHR5cGVkZWYgc2l6ZV90ICAgICAgc2l6ZV90eXBlOwog
IHR5cGVkZWYgcHRyZGlmZl90ICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogICAg
ICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRl
ZiB2b2lkICAgICAgICB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0
IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAg
fTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0
dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9
CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4g
X19hMS5fX3VuZGVybHlpbmdfYWxsb2MgIT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCgog
CiAKIAoKdGVtcGxhdGUgPGludCBpbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9f
bWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKCnRl
bXBsYXRlIDxpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9j
X2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9f
bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9CgoKCnRl
bXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJl
YWRzLCBfX2luc3Q+JikKewogIHJldHVybiB0cnVlOwp9CgoKdGVtcGxhdGUgPGJvb2wgX190aHJl
YWRzLCBpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQp7CiAg
cmV0dXJuIGZhbHNlOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gdHJ1ZTsKfQoKCnRlbXBs
YXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgZGVidWdfYWxs
b2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0Fs
bG9jPiYpIHsKICByZXR1cm4gZmFsc2U7Cn0KCgogCiAKIAogCiAKIAoKIAogCiAKIAogCiAKCiAK
IAogCiAKIAogCiAKIAogCiAKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
YXRvcj4Kc3RydWN0IF9BbGxvY190cmFpdHMKewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3Rh
bmNlbGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6ICAgcmViaW5k
PF9UcD46Om90aGVyCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxfVHAsIF9B
bGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfVHAxPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGFsbG9jYXRvcjxfVHAxPiA+CnsKICBz
dGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxl
X2FsbG9jPF9UcCwgYWxsb2M+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4g
YWxsb2NhdG9yX3R5cGU7Cn07CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQgX19pbnN0Pgpz
dHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4g
Pgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVm
IHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBfQWxs
b2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGJv
b2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fZGVm
YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0
IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAs
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICAgICAg
X0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07
CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0
czxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5z
dGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRlYnVnX2FsbG9j
PF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVidWdf
YWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfVHAxLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAg
ICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9jX2FsbG9jX3RlbXBs
YXRlPF9faW5zdD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0
cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8
X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxv
Y19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9B
bGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTxfX3RociwgX19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVz
cyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9f
YWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgog
ICAgICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X1RwMSwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9y
PF9UcDEsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19p
bnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxs
b2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1
Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgoKCgoKIAoKCgoKCiAKIAog
CiMgMTkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9tZW1vcnkiIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgv
Mi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAKCiAKIAoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KaW5saW5lIHZvaWQgZGVzdHJveShfVHAqIF9fcG9pbnRlcikgewogIF9fcG9pbnRlci0+
fl9UcCgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSB2b2lkIGNv
bnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKSB7CiAgbmV3IChfX3ApIF9UMShf
X3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZvaWQgY29uc3RydWN0KF9U
MSogX19wKSB7CiAgbmV3IChfX3ApIF9UMSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyYXRvcj4KaW5saW5lIHZvaWQKX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmly
c3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCnsKICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBkZXN0cm95KCYqX19maXJzdCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBfX2Rlc3Ryb3lfYXV4
KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3IsIF9fdHJ1ZV90eXBlKSB7fQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX19k
ZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qs
IF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcgogICAgICAgICAgX1RyaXZpYWxfZGVzdHJ1Y3RvcjsKICBfX2Rlc3Ryb3lf
YXV4KF9fZmlyc3QsIF9fbGFzdCwgX1RyaXZpYWxfZGVzdHJ1Y3RvcigpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkIGRlc3Ryb3koX0ZvcndhcmRJdGVy
YXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgewogIF9fZGVzdHJveShfX2Zp
cnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCmlubGluZSB2b2lkIGRl
c3Ryb3koY2hhciosIGNoYXIqKSB7fQppbmxpbmUgdm9pZCBkZXN0cm95KHdjaGFyX3QqLCB3Y2hh
cl90Kikge30KCiAKCgoKIAogCiAKIyAyMCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIu
OTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL21lbW9yeSIgMiAzCgojIDEgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxf
dGVtcGJ1Zi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4KcGFpcjxfVHAqLCBwdHJkaWZmX3Q+IApfX2dldF90ZW1wb3Jhcnlf
YnVmZmVyKHB0cmRpZmZfdCBfX2xlbiwgX1RwKikKewogIGlmIChfX2xlbiA+IHB0cmRpZmZfdCgy
MTQ3NDgzNjQ3ICAgLyBzaXplb2YoX1RwKSkpCiAgICBfX2xlbiA9IDIxNDc0ODM2NDcgICAvIHNp
emVvZihfVHApOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfVHAqIF9fdG1wID0gKF9UcCop
IG1hbGxvYygoc2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgaWYgKF9fdG1wICE9IDAp
CiAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190bXAsIF9fbGVuKTsKICAgIF9f
bGVuIC89IDI7CiAgfQoKICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KChfVHAqKTAsIDAp
Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9UcCosIHB0cmRpZmZfdD4g
Z2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuKSB7CiAgcmV0dXJuIF9fZ2V0X3Rl
bXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsKfQoKCgogCiAKIAogCiAKdGVtcGxhdGUg
PGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVtcG9yYXJ5X2J1
ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopIHsKICByZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1
ZmZlcihfX2xlbiwgKF9UcCopIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgp2b2lkIHJldHVy
bl90ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKSB7CiAgZnJlZShfX3ApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgpjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZl
ciB7CnByaXZhdGU6CiAgcHRyZGlmZl90ICBfTV9vcmlnaW5hbF9sZW47CiAgcHRyZGlmZl90ICBf
TV9sZW47CiAgX1RwKiAgICAgICBfTV9idWZmZXI7CgogIHZvaWQgX01fYWxsb2NhdGVfYnVmZmVy
KCkgewogICAgX01fb3JpZ2luYWxfbGVuID0gX01fbGVuOwogICAgX01fYnVmZmVyID0gMDsKCiAg
ICBpZiAoX01fbGVuID4gKHB0cmRpZmZfdCkoMjE0NzQ4MzY0NyAgIC8gc2l6ZW9mKF9UcCkpKQog
ICAgICBfTV9sZW4gPSAyMTQ3NDgzNjQ3ICAgLyBzaXplb2YoX1RwKTsKCiAgICB3aGlsZSAoX01f
bGVuID4gMCkgewogICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAqIHNpemVv
ZihfVHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikKICAgICAgICBicmVhazsKICAgICAgX01fbGVu
IC89IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYs
IF9fdHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2
YWwsIF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fYnVmZmVyLCBf
TV9sZW4sIHZhbCk7CiAgfQoKcHVibGljOgogIHB0cmRpZmZfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gX01fbGVuOyB9CiAgcHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4g
X01fb3JpZ2luYWxfbGVuOyB9CiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQog
IF9UcCogZW5kKCkgeyByZXR1cm4gX01fYnVmZmVyICsgX01fbGVuOyB9CgogIF9UZW1wb3Jhcnlf
YnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qp
IHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yCiAgICAgICAgICAgIF9Ucml2aWFsOwogICAgdHJ5ICB7CiAgICAg
IF9NX2xlbiA9IDA7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX01fbGVuKTsKICAg
ICAgX01fYWxsb2NhdGVfYnVmZmVyKCk7CiAgICAgIGlmIChfTV9sZW4gPiAwKQogICAgICAgIF9N
X2luaXRpYWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBfVHJpdmlhbCgpKTsKICAgIH0KICAgIGNhdGNo
KC4uLikgeyAgZnJlZShfTV9idWZmZXIpOyBfTV9idWZmZXIgPSAwOyBfTV9sZW4gPSAwIDsgdGhy
b3c7IH0gOwogIH0KIAogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsgIAogICAgZGVzdHJveShfTV9i
dWZmZXIsIF9NX2J1ZmZlciArIF9NX2xlbik7CiAgICBmcmVlKF9NX2J1ZmZlcik7CiAgfQoKcHJp
dmF0ZToKICAgCiAgX1RlbXBvcmFyeV9idWZmZXIoY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7
fQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KfTsKCiAKCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCAKICAgICAgICAgIGNsYXNzIF9UcCAKCiAg
ICAgICAgICAgICAgICAgICAgPSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVy
YXRvcj46OnZhbHVlX3R5cGUKCiAgICAgICAgID4Kc3RydWN0IHRlbXBvcmFyeV9idWZmZXIgOiBw
dWJsaWMgX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgp7CiAgdGVtcG9y
YXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19s
YXN0KQogICAgOiBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+KF9fZmly
c3QsIF9fbGFzdCkge30KICB+dGVtcG9yYXJ5X2J1ZmZlcigpIHt9Cn07CiAgICAKIAoKCgogCiAK
IAojIDIxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvbWVtb3J5IiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4
LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF91bmluaXRpYWxpemVkLmgiIDEg
MwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCiAKCiAKIAp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVy
IApfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIGNvcHkoX19m
aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciAKX191bmluaXRpYWxpemVkX2NvcHlfYXV4
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBf
X2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICB0cnkgIHsK
ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX2N1cikKICAgICAg
Y29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgIHJldHVybiBfX2N1cjsKICB9CiAgY2F0
Y2goLi4uKSB7ICBkZXN0cm95KF9fcmVzdWx0LCBfX2N1cikgOyB0aHJvdzsgfSA7Cn0KCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+Cmlu
bGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omlz
X1BPRF90eXBlIF9Jc19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCiAgdW5pbml0
aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIHJldHVybiBfX3VuaW5p
dGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fcmVzdWx0ICkgKTsKfQoKaW5saW5lIGNoYXIq
IHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogX19yZXN1bHQpIHsKICBt
ZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICByZXR1cm4gX19y
ZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB3Y2hhcl90KiAKdW5pbml0aWFs
aXplZF9jb3B5KGNvbnN0IHdjaGFyX3QqIF9fZmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QqIF9fcmVzdWx0KQp7CiAgbWVtbW92ZShfX3Jlc3Vs
dCwgX19maXJzdCwgc2l6ZW9mKHdjaGFyX3QpICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1
cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgpwYWlyPF9JbnB1dEl0
ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmly
c3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIF9G
b3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogIHRyeSAgewogICAgZm9yICggOyBfX2NvdW50
ID4gMCA7IC0tX19jb3VudCwgKytfX2ZpcnN0LCArK19fY3VyKSAKICAgICAgY29uc3RydWN0KCYq
X19jdXIsICpfX2ZpcnN0KTsKICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRl
cj4oX19maXJzdCwgX19jdXIpOwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19yZXN1bHQs
IF9fY3VyKSA7IHRocm93OyB9IDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
LCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxfUmFuZG9tQWNj
ZXNzSXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgX0Zv
cndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3Nf
aXRlcmF0b3JfdGFnKSB7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0ID0gX19maXJzdCArIF9f
Y291bnQ7CiAgcmV0dXJuIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4oCiAg
ICAgICAgICAgICAgICAgX19sYXN0LAogICAgICAgICAgICAgICAgIHVuaW5pdGlhbGl6ZWRfY29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJ
dGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2Zp
cnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19y
ZXN1bHQpIHsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50
LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2Nh
dGVnb3J5KCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3
YXJkSXRlcj4KdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBf
X2NvdW50LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpIHsKICBy
ZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2Zp
cnN0ICkgKTsKfQoKIAogCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4K
aW5saW5lIHZvaWQKX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9U
cCYgX194LCBfX3RydWVfdHlwZSkKewogIGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQKX191bmluaXRpYWxp
emVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCAK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCnsK
ICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSAgewogICAgZm9yICggOyBfX2N1
ciAhPSBfX2xhc3Q7ICsrX19jdXIpCiAgICAgIGNvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogIH0K
ICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19maXJzdCwgX19jdXIpIDsgdGhyb3c7IH0gOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CmlubGlu
ZSB2b2lkIF9fdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1Rw
JiBfX3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojpp
c19QT0RfdHlwZSBfSXNfUE9EOwogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBf
X2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKICAgICAgICAgICAgICAgICAgIAp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIHVuaW5pdGlhbGl6ZWRf
ZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX1RwJiBfX3gpCnsKICBfX3VuaW5pdGlhbGl6ZWRfZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9f
eCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKIAogCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191
bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQp7
CiAgcmV0dXJuIGZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlcgpfX3VuaW5p
dGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQp7CiAg
X0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICB0cnkgIHsKICAgIGZvciAoIDsgX19uID4g
MDsgLS1fX24sICsrX19jdXIpCiAgICAgIGNvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgcmV0
dXJuIF9fY3VyOwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19maXJzdCwgX19jdXIpIDsg
dGhyb3c7IH0gOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwg
Y2xhc3MgX1RwLCBjbGFzcyBfVHAxPgppbmxpbmUgX0ZvcndhcmRJdGVyIApfX3VuaW5pdGlhbGl6
ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194
LCBfVHAxKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6aXNfUE9E
X3R5cGUgX0lzX1BPRDsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX19maXJz
dCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgCnVuaW5pdGlhbGl6
ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194
KQp7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX24oX19maXJzdCwgX19uLCBfX3gsIF9f
dmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCiAKIAoKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxp
bmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHkoX0lucHV0SXRlcjEgX19m
aXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQp7CiAgX0ZvcndhcmRJdGVyIF9fbWlkID0g
dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgdHJ5ICB7
CiAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBfX21pZCk7
CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX3Jlc3VsdCwgX19taWQpIDsgdGhyb3c7IH0g
Owp9CgogCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNz
IF9JbnB1dEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIgCl9fdW5pbml0aWFsaXplZF9maWxsX2Nv
cHkoX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkKewogIHVuaW5pdGlhbGl6ZWRf
ZmlsbChfX3Jlc3VsdCwgX19taWQsIF9feCk7CiAgdHJ5ICB7CiAgICByZXR1cm4gdW5pbml0aWFs
aXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19taWQpOwogIH0KICBjYXRjaCguLi4pIHsgIGRl
c3Ryb3koX19yZXN1bHQsIF9fbWlkKSA7IHRocm93OyB9IDsKfQoKIAogCiAKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9p
ZApfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0
ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJz
dDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9UcCYgX194KQp7CiAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29weShf
X2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIpOwogIHRyeSAgewogICAgdW5pbml0aWFsaXplZF9m
aWxsKF9fbWlkMiwgX19sYXN0MiwgX194KTsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9f
Zmlyc3QyLCBfX21pZDIpIDsgdGhyb3c7IH0gOwp9CgogCgoKCiAKIAogCiMgMjIgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9tZW1v
cnkiIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4u
Ly4uL2luY2x1ZGUvZysrLTMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMSAzCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0
b3IsIGNsYXNzIF9UcD4KY2xhc3MgcmF3X3N0b3JhZ2VfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAg
X0ZvcndhcmRJdGVyYXRvciBfTV9pdGVyOwpwdWJsaWM6CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2
YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7
CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAg
ICAgICAgICAgICAgIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgcmF3X3N0b3JhZ2VfaXRlcmF0b3Io
X0ZvcndhcmRJdGVyYXRvciBfX3gpIDogX01faXRlcihfX3gpIHt9CiAgcmF3X3N0b3JhZ2VfaXRl
cmF0b3ImIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0
b3ImIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fZWxlbWVudCkgewogICAgY29uc3RydWN0KCYqX01f
aXRlciwgX19lbGVtZW50KTsKICAgIHJldHVybiAqdGhpczsKICB9ICAgICAgICAKICByYXdfc3Rv
cmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+JiBvcGVyYXRvcisrKCkgewogICAg
KytfTV9pdGVyOwogICAgcmV0dXJuICp0aGlzOwogIH0KICByYXdfc3RvcmFnZV9pdGVyYXRvcjxf
Rm9yd2FyZEl0ZXJhdG9yLCBfVHA+IG9wZXJhdG9yKysoaW50KSB7CiAgICByYXdfc3RvcmFnZV9p
dGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+IF9fdG1wID0gKnRoaXM7CiAgICArK19NX2l0
ZXI7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKIyA3MyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9yYXdfc3RvcmFnZV9p
dGVyLmgiIDMKCgogCgoKCiAKIAogCiMgMjMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8y
Ljk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9tZW1vcnkiIDIgMwoKCgoKCiAKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+IGNsYXNzIGF1dG9fcHRyIHsKcHJpdmF0ZToKICBfVHAqIF9NX3B0cjsK
CnB1YmxpYzoKICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7CiAgZXhwbGljaXQgYXV0b19wdHIo
X1RwKiBfX3AgPSAwKSB0aHJvdygpICA6IF9NX3B0cihfX3ApIHt9CiAgYXV0b19wdHIoYXV0b19w
dHImIF9fYSkgdGhyb3coKSAgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkge30KICB0ZW1wbGF0ZSA8
Y2xhc3MgX1RwMT4gYXV0b19wdHIoYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKSAKICAgIDog
X01fcHRyKF9fYS5yZWxlYXNlKCkpIHt9CiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0ciYg
X19hKSB0aHJvdygpICB7CiAgICBpZiAoJl9fYSAhPSB0aGlzKSB7CiAgICAgIGRlbGV0ZSBfTV9w
dHI7CiAgICAgIF9NX3B0ciA9IF9fYS5yZWxlYXNlKCk7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7
CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPgogIGF1dG9fcHRyJiBvcGVyYXRvcj0oYXV0b19w
dHI8X1RwMT4mIF9fYSkgdGhyb3coKSAgewogICAgaWYgKF9fYS5nZXQoKSAhPSB0aGlzLT5nZXQo
KSkgewogICAgICBkZWxldGUgX01fcHRyOwogICAgICBfTV9wdHIgPSBfX2EucmVsZWFzZSgpOwog
ICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KICB+YXV0b19wdHIoKSB0aHJvdygpICB7IGRlbGV0
ZSBfTV9wdHI7IH0KCiAgX1RwJiBvcGVyYXRvciooKSBjb25zdCB0aHJvdygpICB7CiAgICByZXR1
cm4gKl9NX3B0cjsKICB9CiAgX1RwKiBvcGVyYXRvci0+KCkgY29uc3QgdGhyb3coKSAgewogICAg
cmV0dXJuIF9NX3B0cjsKICB9CiAgX1RwKiBnZXQoKSBjb25zdCB0aHJvdygpICB7CiAgICByZXR1
cm4gX01fcHRyOwogIH0KICBfVHAqIHJlbGVhc2UoKSB0aHJvdygpICB7CiAgICBfVHAqIF9fdG1w
ID0gX01fcHRyOwogICAgX01fcHRyID0gMDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgdm9pZCBy
ZXNldChfVHAqIF9fcCA9IDApIHRocm93KCkgIHsKICAgIGRlbGV0ZSBfTV9wdHI7CiAgICBfTV9w
dHIgPSBfX3A7CiAgfQoKICAgCiAgIAogICAKICAgCiAgCgoKcHJpdmF0ZToKICB0ZW1wbGF0ZTxj
bGFzcyBfVHAxPiBzdHJ1Y3QgYXV0b19wdHJfcmVmIHsKICAgIF9UcDEqIF9NX3B0cjsKICAgIGF1
dG9fcHRyX3JlZihfVHAxKiBfX3ApIDogX01fcHRyKF9fcCkge30KICB9OwoKcHVibGljOgogIGF1
dG9fcHRyKGF1dG9fcHRyX3JlZjxfVHA+IF9fcmVmKSB0aHJvdygpIAogICAgOiBfTV9wdHIoX19y
ZWYuX01fcHRyKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBvcGVyYXRvciBhdXRvX3B0cl9y
ZWY8X1RwMT4oKSB0aHJvdygpICAKICAgIHsgcmV0dXJuIGF1dG9fcHRyX3JlZjxfVHA+KHRoaXMt
PnJlbGVhc2UoKSk7IH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gb3BlcmF0b3IgYXV0b19wdHI8
X1RwMT4oKSB0aHJvdygpIAogICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4odGhpcy0+cmVsZWFz
ZSgpKTsgfQoKCn07CgogCgoKCgoKIAogCiAKIyA5ICIuLi9mdW5jdGlvbi8uLi9zcGFjZS8uLi9n
ZW9tZXRyeS9nZW9DZWxsLmgiIDIKCgoKCiMgMSAiLi4vZnVuY3Rpb24vLi4vc3BhY2UvLi4vZ2Vv
bWV0cnkvLi4vdG9vbGJveC90YnhEeW5BcnJheS5oIiAxCiAKCgoKCgoKCgogICNwcmFnbWEgaW50
ZXJmYWNlCgoKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKCgoKCmV4dGVybiAiQyIgeyAKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
bGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9s
aWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgog
CgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVk
ZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoK
IyAxMjYgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYu
aCIgMwoKCiAKCgoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIu
OTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKCiMgMjY5ICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoK
CgoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1
ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiMgMzMgIi91c3IvaW5j
bHVkZS9zdGRpby5oIiAyIDMKCgoKCgoKCgoKCgoKCgoKIAp0eXBlZGVmIHN0cnVjdCBfSU9fRklM
RSBGSUxFOwoKCgoKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX19GSUxFOwoKCgoKCgoK
CgoKCiAKCnR5cGVkZWYgX0dfZnBvc190IGZwb3NfdDsKCgoKCgoKCiAKCgoKCgogCgoKCgoKIAoK
CgoKCgogCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRp
b19saW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMg
MTIyICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCiAKZXh0ZXJuIEZJTEUgKnN0ZGluOwkJ
IApleHRlcm4gRklMRSAqc3Rkb3V0OwkJIApleHRlcm4gRklMRSAqc3RkZXJyOwkJIAogCgoKCgog
CmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpIDsK
IApleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpf
X25ldykgdGhyb3cgKCkgOwoKCiAKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSB0aHJvdyAo
KSA7CgoKCgoKCgoKCgogCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykgdGhyb3cgKCkg
OwoKCiAKCmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSB0aHJvdyAoKSA7CgoKCgog
CgoKCgoKCmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0
IGNoYXIgKl9fcGZ4KQogICAgIHRocm93ICgpICAgOwoKCgogCmV4dGVybiBpbnQgZmNsb3NlIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwogCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKSA7CgoKCgoKCgoKCiAKZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKCQkgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbW9kZXMpIHRocm93ICgpIDsKIApleHRlcm4gRklMRSAqZnJlb3BlbiAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCgkJICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbW9kZXMsCgkJICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCkg
OwojIDIxMyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKCgoKCgoKCiAKZXh0ZXJuIEZJTEUg
KmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCkgOwoKCiMg
MjQyICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgogCgpleHRlcm4gdm9pZCBzZXRidWYgKEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgp
IDsKIAoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hh
ciAqX19yZXN0cmljdCBfX2J1ZiwKCQkgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIHRocm93
ICgpIDsKCgogCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCgkJICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93
ICgpIDsKCiAKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
IDsKCgoKIApleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCgkJ
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKSA7CiAK
ZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4u
KSB0aHJvdyAoKSA7CiAKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywK
CQkgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpIDsK
CiAKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKCQkgICAgIF9fZ251Y192YV9saXN0ICBfX2FyZykgdGhy
b3cgKCkgOwogCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
Zm9ybWF0LCBfX2dudWNfdmFfbGlzdCAgX19hcmcpCiAgICAgdGhyb3cgKCkgOwogCmV4dGVybiBp
bnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsCgkJICAgICBfX2dudWNfdmFfbGlzdCAgX19hcmcpIHRocm93ICgpIDsKCgog
CmV4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhs
ZW4sCgkJICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0
aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7
CgpleHRlcm4gaW50IF9fdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f
bWF4bGVuLAoJCQlfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9s
aXN0ICBfX2FyZykKICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f
cHJpbnRmX18sIDMsIDApKSk7CmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0
IF9fcywgc2l6ZV90IF9fbWF4bGVuLAoJCSAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgIF9fYXJnKQogICAgIHRocm93ICgpICBfX2F0dHJpYnV0
ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgojIDMxNyAiL3Vzci9pbmNs
dWRlL3N0ZGlvLmgiIDMKCgoKIApleHRlcm4gaW50IGZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSwKCQkgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhy
b3cgKCkgOwogCmV4dGVybiBpbnQgc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv
cm1hdCwgLi4uKSB0aHJvdyAoKSA7CiAKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsCgkJICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu
Li4pIHRocm93ICgpIDsKCiMgMzQzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgogCmV4dGVy
biBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgZ2V0YyAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0
aHJvdyAoKSA7CgogCgoKCgogCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpIDsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAo
KSA7CgoKCiAKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpIDsKCgoKIApleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCkgOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KSA7CgogCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCkgOwoKIAoKCgoKIApl
eHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCkgOwoKCgogCmV4dGVybiBpbnQgcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJl
YW0pIHRocm93ICgpIDsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJv
dyAoKSA7CgoKCgogCmV4dGVybiBpbnQgZ2V0dyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsK
CiAKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoK
CgogCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sIEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCkgOwoKCgoKCgoKIAoKZXh0ZXJu
IGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCkgOwoKCiMgNDMzICIvdXNyL2luY2x1ZGUv
c3RkaW8uaCIgMwoKCgogCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCkgOwoKCgoKCgoK
IApleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSA7CgoKIApleHRl
cm4gaW50IHVuZ2V0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKCgogCmV4
dGVybiBzaXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUs
CgkJICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKSA7
CiAKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwg
c2l6ZV90IF9fc2l6ZSwKCQkgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykg
dGhyb3cgKCkgOwoKCiAKZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0
cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKCQkJICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCkgOwpleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tl
ZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAoJCQkgICAg
ICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCgog
CmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9f
d2hlbmNlKSB0aHJvdyAoKSA7CiAKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCkgOwogCmV4dGVybiB2b2lkIHJld2luZCAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpIDsKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCmV4dGVybiBpbnQgZmdldHBv
cyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQog
ICAgIHRocm93ICgpIDsKIApleHRlcm4gaW50IGZzZXRwb3MgKEZJTEUgKl9fc3RyZWFtLCBfX2Nv
bnN0IGZwb3NfdCAqX19wb3MpIHRocm93ICgpIDsKIyA1MzIgIi91c3IvaW5jbHVkZS9zdGRpby5o
IiAzCgoKCgoKCgoKCgogCmV4dGVybiB2b2lkIGNsZWFyZXJyIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCkgOwogCmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKIApl
eHRlcm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKCgogCmV4dGVybiB2
b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwpleHRlcm4g
aW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQg
ZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCgogCmV4dGVybiB2
b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIDsKCiAKCgpleHRlcm4gaW50
IHN5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CgoK
CgoKCgoKIApleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKCgoK
IApleHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsK
CgoKCgogCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQsIF9fY29u
c3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHBjbG9zZSAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpIDsKCgoKCiAKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9f
cykgdGhyb3cgKCkgOwoKCgoKCgoKCgojIDYxNCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoK
CiAKCiAKZXh0ZXJuIHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoK
IAoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7Cgog
CmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCgoK
CgoKCgoKIAoKCgoKCn0gCgoKCgojIDEzICIuLi9mdW5jdGlvbi8uLi9zcGFjZS8uLi9nZW9tZXRy
eS8uLi90b29sYm94L3RieER5bkFycmF5LmgiIDIKCgoKIAoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+
CmNsYXNzIHRieF9EeW5BcnJheSB7CiAKICAgCgoKCiAgY2xhc3MgUGFnZSB7CiAgICBQYWdlKiAg
ICBsbmtfOwogICAgdW5zaWduZWQgaWR4XzsKICAgIFQqICAgICAgIG1lbV87CiAgICAKICBwdWJs
aWM6CgogICAgaW5saW5lIFBhZ2UodW5zaWduZWQgaWR4LCB1bnNpZ25lZCBzeiwgUGFnZSogbG5r
ID0gX19udWxsICk7CiAgICBpbmxpbmUgflBhZ2UoKTsKCiAgICBpbmxpbmUgVCYgb3BlcmF0b3Jb
XSh1bnNpZ25lZCBpKTsKCiAgICBpbmxpbmUgdW5zaWduZWQgaW5kZXgoKTsKICAgIGlubGluZSBQ
YWdlKiBsaW5rKCk7CiMgNTEgIi4uL2Z1bmN0aW9uLy4uL3NwYWNlLy4uL2dlb21ldHJ5Ly4uL3Rv
b2xib3gvdGJ4RHluQXJyYXkuaCIKCiAgfTsKCiAgIAogIGNvbnN0IHVuc2lnbmVkIGh0Ymxzel87
CgogIGNvbnN0IHVuc2lnbmVkIGh0Ymxtc2tfOwoKICAgCiAgY29uc3QgdW5zaWduZWQgcGdzel87
CiAgY29uc3QgdW5zaWduZWQgcGdtc2tfOwoKICBQYWdlKiogaHRibF87CiAgUGFnZSogIGxydV87
CgogIFQgICAgICAgIGRmbHRfOwogIGJvb2wgICAgIGluaXRfOwogIGJvb2wgICAgIGVtcHR5XzsK
ICB1bnNpZ25lZCBtYXhfOwogIHVuc2lnbmVkIG1pbl87CiAgdW5zaWduZWQgbnBnXzsKIAogICAK
ICB0YnhfRHluQXJyYXkodGJ4X0R5bkFycmF5PFQ+Jik7CiAgdm9pZCBvcGVyYXRvcj0odGJ4X0R5
bkFycmF5PFQ+Jik7CgpwdWJsaWM6CiAgIAoKCgoKCgoKCgoKCgoKICBpbmxpbmUgdGJ4X0R5bkFy
cmF5KHVuc2lnbmVkIGh0YmxzeiwgdW5zaWduZWQgcGdzeik7CiAgaW5saW5lIHRieF9EeW5BcnJh
eSh1bnNpZ25lZCBodGJsc3osIHVuc2lnbmVkIHBnc3osIGNvbnN0IFQmIGRmbHQpOwogIGlubGlu
ZSB+dGJ4X0R5bkFycmF5KCk7CgogICAKCgoKCgoKICBUJiBvcGVyYXRvciBbXSh1bnNpZ25lZCBp
KTsKCiAgaW5saW5lIHVuc2lnbmVkIG1heCgpOyAgICAgICAgCiAgaW5saW5lIGZsb2F0IG1lbW9y
eSgpOyAKICBpbmxpbmUgdW5zaWduZWQgbWluKCk7ICAgICAgICAKCiAgIAogIHZvaWQgcmVzZXQo
KTsJCQkJCQkJICAgCn07CgoKdGVtcGxhdGU8Y2xhc3MgVD4KaW5saW5lIHRieF9EeW5BcnJheTxU
Pjo6UGFnZTo6UGFnZSh1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIHN6LCAKCQkJCSAgIFBhZ2UqIGxu
ayA9IF9fbnVsbCApIHsKICBpZHhfID0gaWR4OyBsbmtfID0gbG5rOyBtZW1fID0gbmV3IFRbc3pd
Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBUPgppbmxpbmUgdGJ4X0R5bkFycmF5PFQ+OjpQYWdlOjp+UGFn
ZSgpIHsKICBkZWxldGVbXSBtZW1fOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUPgppbmxpbmUgVCYgdGJ4
X0R5bkFycmF5PFQ+OjpQYWdlOjpvcGVyYXRvcltdKHVuc2lnbmVkIGkpIHsKICByZXR1cm4gbWVt
X1tpXTsKfQoKdGVtcGxhdGU8Y2xhc3MgVD4KaW5saW5lIHVuc2lnbmVkIHRieF9EeW5BcnJheTxU
Pjo6UGFnZTo6aW5kZXgoKSB7CiAgcmV0dXJuIGlkeF87Cn0KCnRlbXBsYXRlPGNsYXNzIFQ+Cmlu
bGluZSB0YnhfRHluQXJyYXk8VD46OlBhZ2UqIHRieF9EeW5BcnJheTxUPjo6UGFnZTo6bGluaygp
IHsKICByZXR1cm4gbG5rXzsKfQoKCnRlbXBsYXRlPGNsYXNzIFQ+IAppbmxpbmUgdGJ4X0R5bkFy
cmF5PFQ+Ojp0YnhfRHluQXJyYXkodW5zaWduZWQgaHRibHN6LCB1bnNpZ25lZCBwZ3N6KSA6CiAg
aHRibHN6XyhodGJsc3opLCBodGJsbXNrXygoMSA8PCBodGJsc3opIC0gMSksCiAgcGdzel8ocGdz
eiksIHBnbXNrXygoMSA8PCBwZ3N6KSAtIDEpIHsKICBodGJsXyA9IG5ldyBQYWdlKltodGJsbXNr
XyArIDFdOyAKICBmb3IodW5zaWduZWQgaSA9IGh0Ymxtc2tfICsgMTsgaS0tOykgaHRibF9baV0g
PSBfX251bGwgOyAKICBscnVfID0gX19udWxsIDsgaW5pdF8gPSBmYWxzZTsgbWF4XyA9IG1pbl8g
PSAwOyBucGdfID0gMDsKfQoKdGVtcGxhdGU8Y2xhc3MgVD4gCmlubGluZSB0YnhfRHluQXJyYXk8
VD46OnRieF9EeW5BcnJheSh1bnNpZ25lZCBodGJsc3osIHVuc2lnbmVkIHBnc3osIAoJCQkJICAg
ICBjb25zdCBUJiBkZmx0KSA6IAogIGh0Ymxzel8oaHRibHN6KSwgaHRibG1za18oKDEgPDwgaHRi
bHN6KSAtIDEpLAogIHBnc3pfKHBnc3opLCBwZ21za18oKDEgPDwgcGdzeikgLSAxKSwgZGZsdF8o
ZGZsdCkgewogIGh0YmxfID0gbmV3IFBhZ2UqW2h0Ymxtc2tfICsgMV07CiAgZm9yKHVuc2lnbmVk
IGkgPSBodGJsbXNrXyArIDE7IGktLTspIGh0YmxfW2ldID0gX19udWxsIDsgCiAgbHJ1XyA9IF9f
bnVsbCA7IGluaXRfID0gdHJ1ZTsgbWF4XyA9IG1pbl8gPSAwOyBucGdfID0gMDsKfQoKdGVtcGxh
dGUgPGNsYXNzIFQ+IAppbmxpbmUgdGJ4X0R5bkFycmF5PFQ+Ojp+dGJ4X0R5bkFycmF5KCkgewog
IGZvcih1bnNpZ25lZCBpID0gaHRibG1za18gKyAxOyBpLS07KSB7CiAgICBQYWdlKiBwZyA9IGh0
YmxfW2ldOwogICAgd2hpbGUgKHBnICE9IF9fbnVsbCApIHsKICAgICAgUGFnZSogZm9vID0gcGc7
IHBnID0gcGctPmxpbmsoKTsKICAgICAgZGVsZXRlIGZvbzsKICAgIH0KICB9CiAgZGVsZXRlW10g
aHRibF87Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiAKaW5saW5lIHVuc2lnbmVkIHRieF9EeW5BcnJh
eTxUPjo6bWF4KCkgewogIHJldHVybiBtYXhfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gCmlubGlu
ZSBmbG9hdCB0YnhfRHluQXJyYXk8VD46Om1lbW9yeSgpIHsKICByZXR1cm4gc2l6ZW9mKHRieF9E
eW5BcnJheSkgKyAoZmxvYXQpKDEgPDwgaHRibHN6XykgKiBzaXplb2YoUGFnZSopICsKICAgIChm
bG9hdClucGdfICogKHNpemVvZihQYWdlKSArIChmbG9hdCkoMSA8PCBwZ3N6XykgKiBzaXplb2Yo
VCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gCmlubGluZSB1bnNpZ25lZCB0YnhfRHluQXJyYXk8
VD46Om1pbigpIHsKICByZXR1cm4gbWluXzsKfQoKIAoKIyAxICIuLi9mdW5jdGlvbi8uLi9zcGFj
ZS8uLi9nZW9tZXRyeS8uLi90b29sYm94L3RieER5bkFycmF5LnQiIDEKIAoKCgoKCgogICNwcmFn
bWEgaW1wbGVtZW50YXRpb24KCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gClQmIHRieF9EeW5BcnJheTxU
Pjo6b3BlcmF0b3JbXSh1bnNpZ25lZCBpKSB7CgogIGlmICghKGkgPCBtYXhfKSkgbWF4XyA9IGkg
KyAxOwogIGlmIChscnVfID09IF9fbnVsbCAgfHwgaSA8IG1pbl8pIG1pbl8gPSBpOwoKICB1bnNp
Z25lZCBwZ2lkeCA9IGkgPj4gcGdzel87CgogIGlmIChscnVfICE9IF9fbnVsbCAgJiYgbHJ1Xy0+
aW5kZXgoKSA9PSBwZ2lkeCkKICAgIHJldHVybiAoKmxydV8pW2kgJiBwZ21za19dOwoKICBQYWdl
KiogaHRibCA9IGh0YmxfICsgKHBnaWR4ICYgaHRibG1za18pOwoKICBQYWdlKiBwZyA9ICpodGJs
OwogIHdoaWxlKHBnICE9IF9fbnVsbCApIHsKICAgIGlmIChwZy0+aW5kZXgoKSA9PSBwZ2lkeCkg
CiAgICAgIHJldHVybiAoKihscnVfID0gcGcpKVtpICYgcGdtc2tfXTsKICAgIHBnID0gcGctPmxp
bmsoKTsKICB9CgogICpodGJsID0gcGcgPSBuZXcgUGFnZShwZ2lkeCwgcGdtc2tfICsgMSwgKmh0
YmwpOwogIGlmIChpbml0XykgZm9yKHVuc2lnbmVkIGogPSBwZ21za18gKyAxOyBqLS07KSAoKnBn
KVtqXSA9IGRmbHRfOwoKICByZXR1cm4gKCoobHJ1XyA9IHBnKSlbaSAmIHBnbXNrX107Cn0KCnRl
bXBsYXRlIDxjbGFzcyBUPiAKdm9pZCB0YnhfRHluQXJyYXk8VD46OnJlc2V0KCkgewogIGZvcih1
bnNpZ25lZCBpID0gaHRibG1za18gKyAxOyBpLS07KSB7CiAgICBQYWdlKiBwZyA9IGh0YmxfW2ld
OyAKICAgIHdoaWxlIChwZyAhPSBfX251bGwgKSB7CiAgICAgIFBhZ2UqIGZvbyA9IHBnOyBwZyA9
IHBnLT5saW5rKCk7CiAgICAgIGRlbGV0ZSBmb287CiAgICB9CiAgICBodGJsX1tpXSA9IF9fbnVs
bCA7CiAgfQogIGxydV8gPSBfX251bGwgOyBtYXhfID0gbWluXyA9IDA7IG5wZ18gPSAwOwp9CgoK
IyAxOTAgIi4uL2Z1bmN0aW9uLy4uL3NwYWNlLy4uL2dlb21ldHJ5Ly4uL3Rvb2xib3gvdGJ4RHlu
QXJyYXkuaCIgMgoKCgoKIyAxMyAiLi4vZnVuY3Rpb24vLi4vc3BhY2UvLi4vZ2VvbWV0cnkvZ2Vv
Q2VsbC5oIiAyCgoKCiMgMSAiLi4vZnVuY3Rpb24vLi4vc3BhY2UvLi4vZ2VvbWV0cnkvZ2VvVG9w
b2xvZ3kuaCIgMQogCgoKCgoKCgoKCgoKIyAxICIuLi9mdW5jdGlvbi8uLi9zcGFjZS8uLi9nZW9t
ZXRyeS9nZW9abS5oIiAxCiAKCgoKCgoKCgogCgogCgpjbGFzcyBaMiB7CgogIHVuc2lnbmVkIGNo
YXIgaV87CgogcHVibGljOgogIFoyKCkgeyBpXyA9IDA7IH0KICBaMih1bnNpZ25lZCBpbnQgaSkg
eyBpXyA9IGkgJiAxOyB9CgogIG9wZXJhdG9yIGludCgpIGNvbnN0IHsgcmV0dXJuIGlfOyB9Cgog
IGludCBvcGVyYXRvcj0oaW50IGkpIHsgcmV0dXJuIGlfID0gaSAmIDE7IH0gIAogIGludCBvcGVy
YXRvcisrKCkgeyByZXR1cm4gaV8gXj0gMTsgfQogIGludCBzdWNjKCkgY29uc3QgeyByZXR1cm4g
aV8gXiAxOyB9Cn07CgogCgogCgpjbGFzcyBaMyB7CgogIHVuc2lnbmVkIGNoYXIgaV87CgogcHVi
bGljOgogIFozKCkgeyBpXyA9IDA7IH0KICBaMyh1bnNpZ25lZCBpbnQgaSkgeyBpXyA9IGkgLSAz
ICogKGkgLyAzKTsgfQoKICBvcGVyYXRvciBpbnQoKSBjb25zdCB7IHJldHVybiBpXzsgfQoKICBp
bnQgb3BlcmF0b3I9KGludCBpKSB7IHJldHVybiBpXyA9IGkgLSAzICogKGkgLyAzKTsgfSAgCiAg
aW50IG9wZXJhdG9yKysoKSB7IHJldHVybiBpXyA9IGlfID09IDIgPyAwIDogaV8gKyAxOyB9CiAg
aW50IG9wZXJhdG9yLS0oKSB7IHJldHVybiBpXyA9IGlfID8gaV8gLSAxIDogMjsgfQogIGludCBz
dWNjKCkgY29uc3QgeyByZXR1cm4gaV8gPT0gMiA/IDAgOiBpXyArIDE7IH0KICBpbnQgcHJlZCgp
IGNvbnN0IHsgcmV0dXJuIGlfID8gaV8gLSAxIDogMjsgfQp9OwoKIAoKIAoKY2xhc3MgWjQgewoK
ICB1bnNpZ25lZCBjaGFyIGlfOwoKIHB1YmxpYzoKICBaNCgpIHsgaV8gPSAwOyB9CiAgWjQodW5z
aWduZWQgaW50IGkpIHsgaV8gPSBpICYgMzsgfQoKICBvcGVyYXRvciBpbnQoKSBjb25zdCB7IHJl
dHVybiBpXzsgfQoKICBpbnQgb3BlcmF0b3I9KGludCBpKSB7IHJldHVybiBpXyA9IGkgJiAzOyB9
ICAKICBpbnQgb3BlcmF0b3IrKygpIHsgKytpXzsgcmV0dXJuIGlfICY9IDM7IH0KICBpbnQgb3Bl
cmF0b3ItLSgpIHsgLS1pXzsgcmV0dXJuIGlfICY9IDM7IH0KICBpbnQgc3VjYygpIGNvbnN0IHsg
cmV0dXJuIChpXyArIDEpICYgMzsgfQogIGludCBwcmVkKCkgY29uc3QgeyByZXR1cm4gKGlfIC0g
MSkgJiAzOyB9Cn07CgoKIyAxMyAiLi4vZnVuY3Rpb24vLi4vc3BhY2UvLi4vZ2VvbWV0cnkvZ2Vv
VG9wb2xvZ3kuaCIgMgoKCiAKCiMgNjcgIi4uL2Z1bmN0aW9uLy4uL3NwYWNlLy4uL2dlb21ldHJ5
L2dlb1RvcG9sb2d5LmgiCgoKdGVtcGxhdGU8dWludCBkPgpjbGFzcyBnZW9fS2V5OwoKdGVtcGxh
dGU8dWludCBkPgppbmxpbmUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvcywgY29uc3Qg
Z2VvX0tleTxkPiYga2V5KSB7CiAgcmV0dXJuIG9zIDw8IGtleS5rZXlfOwp9CgogCgoKCnRlbXBs
YXRlPHVpbnQgZD4KY2xhc3MgZ2VvX0tleSB7IAogIGZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvcjw8
IDw+KG9zdHJlYW0mIG9zLCBjb25zdCBnZW9fS2V5PGQ+JiBrZXkpOwoKcHVibGljOgogICAKICBp
bmxpbmUgZ2VvX0tleSh1aW50IGtleSA9IDApOwogICAgICAgICAKICAgCiAgaW5saW5lIGludCBv
cGVyYXRvcj09KGNvbnN0IGdlb19LZXkmIGtleSkgY29uc3Q7CgogICAKICBpbmxpbmUgb3BlcmF0
b3IgdWludCgpIGNvbnN0OwogICAgICAgICAKICAgCiAgaW5saW5lIHVpbnQga2V5KCkgY29uc3Q7
Cgpwcml2YXRlOgogIHVpbnQga2V5XzsgCn07Cgp0ZW1wbGF0ZTx1aW50IGQ+CmlubGluZSBnZW9f
S2V5PGQ+OjpnZW9fS2V5KHVpbnQga2V5KSA6IGtleV8oa2V5KSB7Cn0KCnRlbXBsYXRlPHVpbnQg
ZD4KaW5saW5lIGludCBnZW9fS2V5PGQ+OjpvcGVyYXRvcj09KGNvbnN0IGdlb19LZXkmIGtleSkg
Y29uc3QgeyAKICByZXR1cm4ga2V5XyA9PSBrZXkua2V5XzsgCn0KCnRlbXBsYXRlPHVpbnQgZD4K
aW5saW5lIGdlb19LZXk8ZD46Om9wZXJhdG9yIHVpbnQoKSBjb25zdCB7IAogIHJldHVybiBrZXlf
Owp9Cgp0ZW1wbGF0ZTx1aW50IGQ+CmlubGluZSB1aW50IGdlb19LZXk8ZD46OmtleSgpIGNvbnN0
IHsgCiAgcmV0dXJuIGtleV87IAp9CgoKCnR5cGVkZWYgZ2VvX0tleTwwPiBnZW9fS2V5MGQ7CnR5
cGVkZWYgZ2VvX0tleTwxPiBnZW9fS2V5MWQ7CnR5cGVkZWYgZ2VvX0tleTwyPiBnZW9fS2V5MmQ7
CnR5cGVkZWYgZ2VvX0tleTwzPiBnZW9fS2V5M2Q7CgogCgogCgoKY2xhc3MgZ2VvX0F0dHJpYnV0
ZSB7IAogIGZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG9zLCAKCQkJICAgICBj
b25zdCBnZW9fQXR0cmlidXRlJiBhdHRyaWIpOwoKcHVibGljOgogICAKCgoKICBpbmxpbmUgZ2Vv
X0F0dHJpYnV0ZSh1aW50IGF0dHJpYiA9IDApOwoKICAgCiAgdmlydHVhbCBvc3RyZWFtJiBpbmZv
KG9zdHJlYW0mIG9zKSBjb25zdCB7CiAgICByZXR1cm4gb3MgPDwgYXR0cmliXzsKICB9CiAgICAg
ICAgIAogICAKICBpbmxpbmUgaW50IG9wZXJhdG9yPT0oY29uc3QgZ2VvX0F0dHJpYnV0ZSYgYXR0
cmliKSBjb25zdDsKCiAgIAogIGlubGluZSBvcGVyYXRvciB1aW50KCkgY29uc3Q7CiAgICAgICAg
IAogICAKICBpbmxpbmUgdWludCBhdHRyaWIoKSBjb25zdDsKCnByaXZhdGU6CiAgIAogIHVpbnQg
YXR0cmliXzsgCn07CgppbmxpbmUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvcywgY29u
c3QgZ2VvX0F0dHJpYnV0ZSYgYXR0cmliKSB7CiAgcmV0dXJuIGF0dHJpYi5pbmZvKG9zKTsKfQoK
aW5saW5lIGdlb19BdHRyaWJ1dGU6Omdlb19BdHRyaWJ1dGUodWludCBhdHRyaWIpIDogYXR0cmli
XyhhdHRyaWIpIHsKfQoKaW5saW5lIGludCBnZW9fQXR0cmlidXRlOjpvcGVyYXRvcj09KGNvbnN0
IGdlb19BdHRyaWJ1dGUmIGF0dHJpYikgY29uc3QgeyAKICByZXR1cm4gYXR0cmliXyA9PSBhdHRy
aWIuYXR0cmliXzsgCn0KCmlubGluZSBnZW9fQXR0cmlidXRlOjpvcGVyYXRvciB1aW50KCkgY29u
c3QgeyAKICByZXR1cm4gYXR0cmliXzsKfQoKaW5saW5lIHVpbnQgZ2VvX0F0dHJpYnV0ZTo6YXR0
cmliKCkgY29uc3QgeyAKICByZXR1cm4gYXR0cmliXzsgCn0KCiAKCiAKCgoKCgoKCmNsYXNzIGdl
b19Db25uZWN0b3IgewogIGZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvciA8PChvc3RyZWFtJiBvcywg
Y29uc3QgZ2VvX0Nvbm5lY3RvciYgYyk7CgpwdWJsaWM6CiAgdmlydHVhbCBnZW9fQ29ubmVjdG9y
KiBjaGlsZCh1aW50IGkpID0gMDsKCiAgIAogIHZpcnR1YWwgb3N0cmVhbSYgaW5mbyhvc3RyZWFt
JiBvcykgY29uc3QgPSAwOwp9OwoKIAoKIAoKCgoKY2xhc3MgZ2VvX0Nvbm5lY3RvcjAgOiBwdWJs
aWMgZ2VvX0Nvbm5lY3RvciB7CgpwdWJsaWM6CiAgIAoKCiAgc3RhdGljICB1aW50IGNudF87Cgog
ICAKCgoKICBpbmxpbmUgZ2VvX0Nvbm5lY3RvcjAoZ2VvX0F0dHJpYnV0ZSBhdHRyaWIpIDogCiAg
ICBrZXlfKGNudF8rKyksIGF0dHJpYl8oYXR0cmliKSB7fQoKICAgCgogIGlubGluZSBpbnQgb3Bl
cmF0b3I9PShjb25zdCBnZW9fQ29ubmVjdG9yMCYgY250cikgY29uc3Q7CgogICAKCgoKCiAgdmly
dHVhbCBnZW9fQ29ubmVjdG9yMCogY2hpbGQodWludCBpKSA9IDA7CgogICAKICBpbmxpbmUgY29u
c3QgZ2VvX0tleTwwPiYga2V5KCkgY29uc3Q7CgogICAKICBpbmxpbmUgY29uc3QgZ2VvX0F0dHJp
YnV0ZSYgYXR0cmliKCkgY29uc3Q7Cgpwcm90ZWN0ZWQ6IAogICAKICBnZW9fS2V5PDA+IGtleV87
CgogICAKICBnZW9fQXR0cmlidXRlIGF0dHJpYl87Cn07CgppbmxpbmUgaW50IGdlb19Db25uZWN0
b3IwOjpvcGVyYXRvcj09KGNvbnN0IGdlb19Db25uZWN0b3IwJiBjbnRyKSBjb25zdCB7CiAgcmV0
dXJuIGtleV8gPT0gY250ci5rZXlfOyAKfQoKaW5saW5lIGNvbnN0IGdlb19LZXk8MD4mIGdlb19D
b25uZWN0b3IwOjprZXkoKSBjb25zdCB7IAogIHJldHVybiBrZXlfOyAKfQoKaW5saW5lIGNvbnN0
IGdlb19BdHRyaWJ1dGUmIGdlb19Db25uZWN0b3IwOjphdHRyaWIoKSBjb25zdCB7IAogIHJldHVy
biBhdHRyaWJfOyAKfQoKIAoKIAoKCgoKCgpjbGFzcyBnZW9fQ29ubmVjdG9yMSA6IHB1YmxpYyBn
ZW9fQ29ubmVjdG9yIHsKCnB1YmxpYzoKICAgCgoKICBzdGF0aWMgdWludCBjbnRfOwoKICAgCgoK
CiAgaW5saW5lIGdlb19Db25uZWN0b3IxKGdlb19BdHRyaWJ1dGUgYXR0cmliKSA6IAogICAga2V5
XyhjbnRfKyspLCBhdHRyaWJfKGF0dHJpYikge30KCiAgIAoKICBpbmxpbmUgaW50IG9wZXJhdG9y
PT0oY29uc3QgZ2VvX0Nvbm5lY3RvcjEmIGNudHIpIGNvbnN0OwoKICAgCgoKCgoKICB2aXJ0dWFs
IGdlb19Db25uZWN0b3IwKiB2ZXJ0ZXgodWludCBpKSBjb25zdCA9IDA7CgogICAKCgoKCiAgdmly
dHVhbCBnZW9fQ29ubmVjdG9yMSogY2hpbGQodWludCBpKSA9IDA7CgogICAKICBpbmxpbmUgY29u
c3QgZ2VvX0tleTwxPiYga2V5KCkgY29uc3Q7CgogICAKICBpbmxpbmUgY29uc3QgZ2VvX0F0dHJp
YnV0ZSYgYXR0cmliKCkgY29uc3Q7Cgpwcm90ZWN0ZWQ6IAogICAKICBnZW9fS2V5PDE+IGtleV87
CgogICAKICBnZW9fQXR0cmlidXRlIGF0dHJpYl87Cn07CgppbmxpbmUgaW50IGdlb19Db25uZWN0
b3IxOjpvcGVyYXRvcj09KGNvbnN0IGdlb19Db25uZWN0b3IxJiBjbnRyKSBjb25zdCB7CiAgcmV0
dXJuIGtleV8gPT0gY250ci5rZXlfOyAKfQoKaW5saW5lIGNvbnN0IGdlb19LZXk8MT4mIGdlb19D
b25uZWN0b3IxOjprZXkoKSBjb25zdCB7IAogIHJldHVybiBrZXlfOyAKfQoKaW5saW5lIGNvbnN0
IGdlb19BdHRyaWJ1dGUmIGdlb19Db25uZWN0b3IxOjphdHRyaWIoKSBjb25zdCB7IAogIHJldHVy
biBhdHRyaWJfOyAKfQoKIAoKIAoKCgoKCgoKY2xhc3MgZ2VvX0Nvbm5lY3RvcjIgOiBwdWJsaWMg
Z2VvX0Nvbm5lY3RvciB7CgpwdWJsaWM6CiAgIAoKCiAgc3RhdGljICB1aW50IGNudF87CgogICAK
CgoKICBpbmxpbmUgZ2VvX0Nvbm5lY3RvcjIoZ2VvX0F0dHJpYnV0ZSBhdHRyaWIpIDogCiAgICBr
ZXlfKGNudF8rKyksIGF0dHJpYl8oYXR0cmliKSB7fQoKICAgCgogIGlubGluZSBpbnQgb3BlcmF0
b3I9PShjb25zdCBnZW9fQ29ubmVjdG9yMiYgY250cikgY29uc3Q7CgogICAKCgoKCiAgdmlydHVh
bCBnZW9fQ29ubmVjdG9yMiogY2hpbGQodWludCBpKSAgPSAwOwoKICAgCgoKCgoKICB2aXJ0dWFs
IGdlb19Db25uZWN0b3IxKiBlZGdlKHVpbnQgaSkgY29uc3QgPSAwOwoKICAgCgoKCgoKICB2aXJ0
dWFsIGdlb19Db25uZWN0b3IwKiB2ZXJ0ZXgodWludCBpKSBjb25zdCA9IDA7CgogICAKICBpbmxp
bmUgY29uc3QgZ2VvX0tleTwyPiYga2V5KCkgY29uc3Q7CgogICAKICBpbmxpbmUgY29uc3QgZ2Vv
X0F0dHJpYnV0ZSYgYXR0cmliKCkgY29uc3Q7Cgpwcm90ZWN0ZWQ6IAogICAKICBnZW9fS2V5PDI+
IGtleV87CgogICAKICBnZW9fQXR0cmlidXRlIGF0dHJpYl87ICAKfTsKCmlubGluZSBpbnQgZ2Vv
X0Nvbm5lY3RvcjI6Om9wZXJhdG9yPT0oY29uc3QgZ2VvX0Nvbm5lY3RvcjImIGNudHIpIGNvbnN0
IHsKICByZXR1cm4ga2V5XyA9PSBjbnRyLmtleV87IAp9CgppbmxpbmUgY29uc3QgZ2VvX0tleTwy
PiYgZ2VvX0Nvbm5lY3RvcjI6OmtleSgpIGNvbnN0IHsgCiAgcmV0dXJuIGtleV87IAp9Cgppbmxp
bmUgY29uc3QgZ2VvX0F0dHJpYnV0ZSYgZ2VvX0Nvbm5lY3RvcjI6OmF0dHJpYigpIGNvbnN0IHsg
CiAgcmV0dXJuIGF0dHJpYl87IAp9CgogCgogCgoKCgoKCmNsYXNzIGdlb19Db25uZWN0b3IzIDog
cHVibGljIGdlb19Db25uZWN0b3IgewoKcHVibGljOgogIHN0YXRpYyB1aW50IGNudF87CiAgIAoK
CgogIGlubGluZSBnZW9fQ29ubmVjdG9yMyhnZW9fQXR0cmlidXRlIGF0dHJpYikgOiAKICAgIGtl
eV8oY250XysrKSwgYXR0cmliXyhhdHRyaWIpIHt9CgogICAKCiAgaW5saW5lIGludCBvcGVyYXRv
cj09KGNvbnN0IGdlb19Db25uZWN0b3IzJiBjbnRyKSBjb25zdDsKCiAgIAoKCgoKICB2aXJ0dWFs
IGdlb19Db25uZWN0b3IzKiBjaGlsZCh1aW50IGkpID0gMDsKCiAgIAoKCgoKCiAgdmlydHVhbCBn
ZW9fQ29ubmVjdG9yMSogZWRnZSh1aW50IGkpIGNvbnN0ID0gMDsKCiAgIAoKCgoKCiAgdmlydHVh
bCBnZW9fQ29ubmVjdG9yMiogZmFjZSh1aW50IGkpIGNvbnN0ID0gMDsKCiAgIAoKCgoKCiAgdmly
dHVhbCBnZW9fQ29ubmVjdG9yMCogdmVydGV4KHVpbnQgaSkgY29uc3QgPSAwOwoKICAgCiAgaW5s
aW5lIGNvbnN0IGdlb19LZXk8Mz4mIGtleSgpIGNvbnN0OwoKICAgCiAgaW5saW5lIGNvbnN0IGdl
b19BdHRyaWJ1dGUmIGF0dHJpYigpIGNvbnN0OwoKcHJvdGVjdGVkOiAKICAgCiAgZ2VvX0tleTwz
PiBrZXlfOwoKICAgCiAgZ2VvX0F0dHJpYnV0ZSBhdHRyaWJfOyAgCn07CgppbmxpbmUgaW50IGdl
b19Db25uZWN0b3IzOjpvcGVyYXRvcj09KGNvbnN0IGdlb19Db25uZWN0b3IzJiBjbnRyKSBjb25z
dCB7CiAgcmV0dXJuIGtleV8gPT0gY250ci5rZXlfOyAKfQoKaW5saW5lIGNvbnN0IGdlb19LZXk8
Mz4mIGdlb19Db25uZWN0b3IzOjprZXkoKSBjb25zdCB7IAogIHJldHVybiBrZXlfOyAKfQoKaW5s
aW5lIGNvbnN0IGdlb19BdHRyaWJ1dGUmIGdlb19Db25uZWN0b3IzOjphdHRyaWIoKSBjb25zdCB7
IAogIHJldHVybiBhdHRyaWJfOyAKfQoKIAoKIAoKCmNsYXNzIGdlb19WZXJ0ZXggOiBwdWJsaWMg
Z2VvX0Nvbm5lY3RvcjAgewogICAKICBnZW9fVmVydGV4KiBjaGxkXzsKCnB1YmxpYzoKICAgCiAg
aW5saW5lIGdlb19WZXJ0ZXgoZ2VvX0F0dHJpYnV0ZSBhdHRyaWIgPSBnZW9fQXR0cmlidXRlKCkp
IDogCiAgICBnZW9fQ29ubmVjdG9yMChhdHRyaWIpLCBjaGxkXygwKSB7fQoKICBpbmxpbmUgdmly
dHVhbCB+Z2VvX1ZlcnRleCgpOwoKICAgCgoKCgogIGlubGluZSBnZW9fVmVydGV4KiBjaGlsZCh1
aW50IGkpOwoKICAgCiAgb3N0cmVhbSYgaW5mbyhvc3RyZWFtJiBvcykgY29uc3Q7Cn07Cgppbmxp
bmUgZ2VvX1ZlcnRleDo6fmdlb19WZXJ0ZXgoKSB7CiAgaWYgKGNobGRfICE9IF9fbnVsbCApIGRl
bGV0ZSBjaGxkXzsKfQoKaW5saW5lIGdlb19WZXJ0ZXgqIGdlb19WZXJ0ZXg6OmNoaWxkKHVpbnQg
aSkgewogIGlmIChpKSByZXR1cm4gX19udWxsIDsKCiAgaWYgKGNobGRfID09IF9fbnVsbCApIHsK
ICAgIGNobGRfID0gbmV3IGdlb19WZXJ0ZXgoYXR0cmliXyk7CiAgfQogIHJldHVybiBjaGxkXzsK
fQoKIAoKIAoKCmNsYXNzIGdlb19FZGdlIDogcHVibGljIGdlb19Db25uZWN0b3IxIHsKCnB1Ymxp
YzoKICAgCgoKCgogIGdlb19FZGdlKGdlb19WZXJ0ZXgmIHZ0eDAsIGdlb19WZXJ0ZXgmIHZ0eDEs
IAoJICAgZ2VvX0F0dHJpYnV0ZSBhdHRyaWIgPSBnZW9fQXR0cmlidXRlKCkpOwogIHZpcnR1YWwg
fmdlb19FZGdlKCk7CgogICAKCgoKCgoKCgogIHZpcnR1YWwgZ2VvX0VkZ2UqIGNoaWxkKHVpbnQg
aSk7CgogIGlubGluZSBnZW9fVmVydGV4KiB2ZXJ0ZXgodWludCBpKSBjb25zdDsKCiAgIAogIG9z
dHJlYW0mIGluZm8ob3N0cmVhbSYgb3MpIGNvbnN0OwoKcHJvdGVjdGVkOgogICAKICBnZW9fRWRn
ZSogICBsbmtfOwoKICAgCgoKICBnZW9fRWRnZSogICBjaGxkXzsKCiAgIAogIGdlb19WZXJ0ZXgq
IHZ0eF9bMl07Cn07CgppbmxpbmUgZ2VvX1ZlcnRleCogZ2VvX0VkZ2U6OnZlcnRleCh1aW50IGkp
IGNvbnN0IHsgCiAgcmV0dXJuIGkgPCAyID8gdnR4X1tpXSA6IF9fbnVsbCA7IAp9CgogCgogCgoK
CgoKCmNsYXNzIGdlb19UcmlhbmdsZSA6IHB1YmxpYyBnZW9fQ29ubmVjdG9yMiB7CgpwdWJsaWM6
CiAgIAoKCgoKCgoKCgogIGdlb19UcmlhbmdsZShnZW9fRWRnZSYgZWRnMCwgZ2VvX0VkZ2UmIGVk
ZzEsIGdlb19FZGdlJiBlZGcyLCAKCSAgICAgICBnZW9fQXR0cmlidXRlIGF0dHJpYiA9IGdlb19B
dHRyaWJ1dGUoKSk7CiAgdmlydHVhbCB+Z2VvX1RyaWFuZ2xlKCk7CgogICAKCgoKCgogIGdlb19U
cmlhbmdsZSogY2hpbGQodWludCBpKTsKCiAgaW5saW5lIGdlb19FZGdlKiBlZGdlKHVpbnQgaSkg
Y29uc3Q7CiAgaW5saW5lIGdlb19WZXJ0ZXgqIHZlcnRleCh1aW50IGkpIGNvbnN0OwoKICAgCgoK
CiAgaW5saW5lIGludCByaG8oaW50IGkpIGNvbnN0OwoKICBvc3RyZWFtJiBpbmZvKG9zdHJlYW0m
IG9zKSBjb25zdDsKcHJpdmF0ZToKICAgCiAgZ2VvX1RyaWFuZ2xlKiBsbmtfOwoKICAgCgoKICBn
ZW9fVHJpYW5nbGUqIGNobGRfOwoKICAgCiAgZ2VvX0VkZ2UqICAgICBlZGdfWzNdOwoKICAgCiAg
WjIgICAgICAgICAgICByaG9fWzNdOwp9OwoKaW5saW5lIGdlb19FZGdlKiBnZW9fVHJpYW5nbGU6
OmVkZ2UodWludCBpKSBjb25zdCB7IAogIHJldHVybiBpIDwgMyA/IGVkZ19baV0gOiBfX251bGwg
OyAKfQoKaW5saW5lIGdlb19WZXJ0ZXgqIGdlb19UcmlhbmdsZTo6dmVydGV4KHVpbnQgaSkgY29u
c3QgeyAKICByZXR1cm4gaSA8IDMgPyBlZGdfW2ldLT52ZXJ0ZXgocmhvX1tpXSkgOiBfX251bGwg
OyAKfQoKaW5saW5lIGludCBnZW9fVHJpYW5nbGU6OnJobyhpbnQgaSkgY29uc3QgeyAKICByZXR1
cm4gcmhvX1tpXTsgCn0KCiAKCiAKCgoKCgoKY2xhc3MgZ2VvX1F1YWQgOiBwdWJsaWMgZ2VvX0Nv
bm5lY3RvcjIgewoKcHVibGljOgogICAKCgoKCgoKCgoKCiAgZ2VvX1F1YWQoZ2VvX0VkZ2UmIGVk
ZzAsIGdlb19FZGdlJiBlZGcxLCBnZW9fRWRnZSYgZWRnMiwgZ2VvX0VkZ2UmIGVkZzMsIAoJICAg
Z2VvX0F0dHJpYnV0ZSBhdHRyaWIgPSBnZW9fQXR0cmlidXRlKCkpOwogIHZpcnR1YWwgfmdlb19R
dWFkKCk7CgogICAKCgoKCgogIHZpcnR1YWwgZ2VvX1F1YWQqIGNoaWxkKHVpbnQgaSk7CgogIGlu
bGluZSBnZW9fRWRnZSogZWRnZSh1aW50IGkpIGNvbnN0OwogIGlubGluZSBnZW9fVmVydGV4KiB2
ZXJ0ZXgodWludCBpKSBjb25zdDsKCiAgIAoKCgogIGlubGluZSBpbnQgcmhvKGludCBpKSBjb25z
dDsKCiAgb3N0cmVhbSYgaW5mbyhvc3RyZWFtJiBvcykgY29uc3Q7CnByb3RlY3RlZDoKICAgCiAg
Z2VvX1F1YWQqIGxua187CgogICAKICBnZW9fUXVhZCogY2hsZF87CgogICAKICBnZW9fRWRnZSog
ZWRnX1s0XTsKCiAgIAogIFoyICAgICAgICByaG9fWzRdOwp9OwoKaW5saW5lIGdlb19FZGdlKiBn
ZW9fUXVhZDo6ZWRnZSh1aW50IGkpIGNvbnN0IHsgCiAgcmV0dXJuIGkgPCA0ID8gZWRnX1tpXSA6
IF9fbnVsbCA7IAp9CgppbmxpbmUgZ2VvX1ZlcnRleCogZ2VvX1F1YWQ6OnZlcnRleCh1aW50IGkp
IGNvbnN0IHsgCiAgcmV0dXJuIGkgPCA0ID8gZWRnX1tpXS0+dmVydGV4KHJob19baV0pIDogX19u
dWxsIDsgCn0KCmlubGluZSBpbnQgZ2VvX1F1YWQ6OnJobyhpbnQgaSkgY29uc3QgeyAKICByZXR1
cm4gcmhvX1tpXTsgCn0KCiAKCiAKCgoKCgoKCgoKCgoKY2xhc3MgZ2VvX1RldHJhaGVkcm9uIDog
cHVibGljIGdlb19Db25uZWN0b3IzIHsKCnB1YmxpYzoKICAgCgoKCgoKCgoKCgoKCgoKCiAgZ2Vv
X1RldHJhaGVkcm9uKGdlb19UcmlhbmdsZSYgdHJpMCwgZ2VvX1RyaWFuZ2xlJiB0cmkxLCBnZW9f
VHJpYW5nbGUmIHRyaTIsIAoJCSAgZ2VvX1RyaWFuZ2xlJiB0cmkzLCBnZW9fQXR0cmlidXRlIGF0
dHJpYiA9IGdlb19BdHRyaWJ1dGUoKSk7CiAgdmlydHVhbCB+Z2VvX1RldHJhaGVkcm9uKCk7Cgog
ICAKCgoKCgoKCgogIGdlb19UZXRyYWhlZHJvbiogY2hpbGQodWludCBpKTsKCiAgZ2VvX0VkZ2Uq
IGVkZ2UodWludCBpKSBjb25zdDsKICBpbmxpbmUgZ2VvX1RyaWFuZ2xlKiBmYWNlKHVpbnQgaSkg
Y29uc3Q7CiAgZ2VvX1ZlcnRleCogdmVydGV4KHVpbnQgaSkgY29uc3Q7CgogICAKCgoKICBpbmxp
bmUgaW50IHJobyhpbnQgaSkgY29uc3Q7CgogICAKCgoKICBpbmxpbmUgaW50IHRhdShpbnQgaSkg
Y29uc3Q7CgogIG9zdHJlYW0mIGluZm8ob3N0cmVhbSYgb3MpIGNvbnN0Owpwcml2YXRlOgogICAK
CgogIGdlb19UZXRyYWhlZHJvbiogY2hsZF87CgogICAKICBnZW9fVGV0cmFoZWRyb24qIGxua187
CgogICAKICBnZW9fVHJpYW5nbGUqICAgIHRyaV9bNF07CgogICAKCgoKCgogIFozICAgICAgICAg
ICAgICAgdGF1X1s0XTsKCiAgIAoKCgoKCgogIFoyICAgICAgICAgICAgICAgcmhvX1s0XTsKfTsK
CmlubGluZSBnZW9fVHJpYW5nbGUqIGdlb19UZXRyYWhlZHJvbjo6ZmFjZSh1aW50IGkpIGNvbnN0
IHsgCiAgcmV0dXJuIGkgPCA0ID8gdHJpX1tpXSA6IF9fbnVsbCA7IAp9CgppbmxpbmUgaW50IGdl
b19UZXRyYWhlZHJvbjo6cmhvKGludCBpKSBjb25zdCB7IAogIHJldHVybiByaG9fW2ldOyAKfQoK
aW5saW5lIGludCBnZW9fVGV0cmFoZWRyb246OnRhdShpbnQgaSkgY29uc3QgeyAKICByZXR1cm4g
dGF1X1tpXTsgCn0KCiAKCiAKCgoKCgoKCgoKCgoKY2xhc3MgZ2VvX0hleGFoZWRyb24gOiBwdWJs
aWMgZ2VvX0Nvbm5lY3RvcjMgewoKcHVibGljOgogICAKCgoKCgoKCgoKCgoKCgoKCgoKICBnZW9f
SGV4YWhlZHJvbihnZW9fUXVhZCYgcXVhZDAsIGdlb19RdWFkJiBxdWFkMSwgZ2VvX1F1YWQmIHF1
YWQyLCAKCQkgZ2VvX1F1YWQmIHF1YWQzLCBnZW9fUXVhZCYgcXVhZDQsIGdlb19RdWFkJiBxdWFk
NSwgCgkJIGdlb19BdHRyaWJ1dGUgYXR0cmliID0gZ2VvX0F0dHJpYnV0ZSgpKTsKICB2aXJ0dWFs
IH5nZW9fSGV4YWhlZHJvbigpOwoKICAgCgoKCgoKCgoKICBnZW9fSGV4YWhlZHJvbiogY2hpbGQo
dWludCBpKTsKCiAgZ2VvX0VkZ2UqIGVkZ2UodWludCBpKSBjb25zdDsKICBpbmxpbmUgZ2VvX1F1
YWQqIGZhY2UodWludCBpKSBjb25zdDsKICBnZW9fVmVydGV4KiB2ZXJ0ZXgodWludCBpKSBjb25z
dDsKCiAgIAoKCgogIGlubGluZSBpbnQgcmhvKGludCBpKSBjb25zdDsKCiAgIAoKCgogIGlubGlu
ZSBpbnQgdGF1KGludCBpKSBjb25zdDsKCiAgb3N0cmVhbSYgaW5mbyhvc3RyZWFtJiBvcykgY29u
c3Q7CnByaXZhdGU6CiAgIAoKCiAgZ2VvX0hleGFoZWRyb24qIGNobGRfOwoKICAgCiAgZ2VvX0hl
eGFoZWRyb24qIGxua187CgogICAKICBnZW9fUXVhZCogcXVhZF9bNl07CgogICAKCgoKCgoKCiAg
WjQgdGF1X1s2XTsKCiAgIAoKCgoKCgoKICBaMiByaG9fWzZdOwp9OwoKaW5saW5lIGdlb19RdWFk
KiBnZW9fSGV4YWhlZHJvbjo6ZmFjZSh1aW50IGkpIGNvbnN0IHsgCiAgcmV0dXJuIGkgPCA2ID8g
cXVhZF9baV0gOiBfX251bGwgOyAKfQoKaW5saW5lIGludCBnZW9fSGV4YWhlZHJvbjo6cmhvKGlu
dCBpKSBjb25zdCB7IAogIHJldHVybiByaG9fW2ldOyAKfQoKaW5saW5lIGludCBnZW9fSGV4YWhl
ZHJvbjo6dGF1KGludCBpKSBjb25zdCB7IAogIHJldHVybiB0YXVfW2ldOyAKfQoKIAoKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKaW50IGdlb19tYXRjaChjb25zdCBnZW9fRWRnZSYgZWRnMCwgY29u
c3QgZ2VvX0VkZ2UmIGVkZzEsIGludCBpZHhbXSk7CgogCgoKCgoKCgoKCgoKCgppbnQgZ2VvX21h
dGNoKGNvbnN0IGdlb19UcmlhbmdsZSYgdHJpMCwgY29uc3QgZ2VvX1RyaWFuZ2xlJiB0cmkxLCBp
bnQgaWR4W10pOwoKIAoKCgoKCgoKCgoKCgoKaW50IGdlb19tYXRjaChjb25zdCBnZW9fUXVhZCYg
cXVhZDAsIGNvbnN0IGdlb19RdWFkJiBxdWFkMSwgaW50IGlkeFtdKTsKCgojIDE2ICIuLi9mdW5j
dGlvbi8uLi9zcGFjZS8uLi9nZW9tZXRyeS9nZW9DZWxsLmgiIDIKCiMgMSAiLi4vZnVuY3Rpb24v
Li4vc3BhY2UvLi4vZ2VvbWV0cnkvZ2VvRGVidWcuaCIgMQojIDEgIi4uL2Z1bmN0aW9uLy4uL3Nw
YWNlLy4uL2dlb21ldHJ5Ly4uL2RlYnVnLmgiIDEKIAoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cmVhbS5o
IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCgoKCgpleHRlcm4gIkMrKyIg
ewpleHRlcm4gY2hhciogZm9ybShjb25zdCBjaGFyKiwgLi4uKTsKCmV4dGVybiBjaGFyKiBkZWMo
bG9uZywgaW50PTApOwpleHRlcm4gY2hhciogZGVjKGludCwgaW50PTApOwpleHRlcm4gY2hhciog
ZGVjKHVuc2lnbmVkIGxvbmcsIGludD0wKTsKZXh0ZXJuIGNoYXIqIGRlYyh1bnNpZ25lZCBpbnQs
IGludD0wKTsKCmV4dGVybiBjaGFyKiBoZXgobG9uZywgaW50PTApOwpleHRlcm4gY2hhciogaGV4
KGludCwgaW50PTApOwpleHRlcm4gY2hhciogaGV4KHVuc2lnbmVkIGxvbmcsIGludD0wKTsKZXh0
ZXJuIGNoYXIqIGhleCh1bnNpZ25lZCBpbnQsIGludD0wKTsKCmV4dGVybiBjaGFyKiBvY3QobG9u
ZywgaW50PTApOwpleHRlcm4gY2hhciogb2N0KGludCwgaW50PTApOwpleHRlcm4gY2hhciogb2N0
KHVuc2lnbmVkIGxvbmcsIGludD0wKTsKZXh0ZXJuIGNoYXIqIG9jdCh1bnNpZ25lZCBpbnQsIGlu
dD0wKTsKCmNoYXIqICAgICAgICBjaHIoY2hhciBjaCwgaW50IHdpZHRoID0gMCk7CmNoYXIqICAg
ICAgICBzdHIoY29uc3QgY2hhciogcywgaW50IHdpZHRoID0gMCk7CgppbmxpbmUgaXN0cmVhbSYg
V1MoaXN0cmVhbSYgX19zdHIpIHsgcmV0dXJuIHdzKF9fc3RyKTsgfQp9ICAKCgojIDEwICIuLi9m
dW5jdGlvbi8uLi9zcGFjZS8uLi9nZW9tZXRyeS8uLi9kZWJ1Zy5oIiAyCgoKCgoKCiAKCgoKCgoK
CgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNz
ZXJ0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiMg
NTYgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCmV4dGVybiAiQyIgeyAKCiAKZXh0ZXJuIHZv
aWQgX19hc3NlcnRfZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19jb25zdCBjaGFy
ICpfX2ZpbGUsCgkJCSAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5j
dGlvbikKICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKIApl
eHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJybnVtLCBfX2NvbnN0IGNo
YXIgKl9fZmlsZSwKCQkJCSAgdW5zaWduZWQgaW50IF9fbGluZSwKCQkJCSAgX19jb25zdCBjaGFy
ICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f
KSk7CgoKIAoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBj
b25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cgKCkgIF9fYXR0cmlidXRl
X18gKChfX25vcmV0dXJuX18pKTsKCgp9IAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoj
IDU3ICIuLi9mdW5jdGlvbi8uLi9zcGFjZS8uLi9nZW9tZXRyeS8uLi9kZWJ1Zy5oIiAyCgojIDEg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9pb21hbmlwIiAxIDMKIAogCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4
LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvbWFuaXAuaCIgMSAzCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgoKZXh0ZXJuICJDKysiIHsK
IAogCiAKCiAKIAogCiAKdGVtcGxhdGU8Y2xhc3MgVFA+IGNsYXNzIHNtYW5pcDsgIAoKdGVtcGxh
dGU8Y2xhc3MgVFA+IGNsYXNzIHNhcHAgewogICAgaW9zJiAoKl9mKShpb3MmLCBUUCk7CnB1Ymxp
YzogCiAgICBzYXBwKGlvcyYgKCpmKShpb3MmLCBUUCkpIDogX2YoZikge30KICAgICAKICAgIHNt
YW5pcDxUUD4gb3BlcmF0b3IoKShUUCBhKSAKICAgICAgeyByZXR1cm4gc21hbmlwPFRQPihfZiwg
YSk7IH0KfTsKCnRlbXBsYXRlPGNsYXNzIFRQPgppbmxpbmUgaXN0cmVhbSYgb3BlcmF0b3I+Pihp
c3RyZWFtJiBpLCBjb25zdCBzbWFuaXA8VFA+JiBtKTsKdGVtcGxhdGU8Y2xhc3MgVFA+CmlubGlu
ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG8sIGNvbnN0IHNtYW5pcDxUUD4mIG0pOwoK
dGVtcGxhdGUgPGNsYXNzIFRQPiBjbGFzcyBzbWFuaXAgewogICAgaW9zJiAoKl9mKShpb3MmLCBU
UCk7CiAgICBUUCBfYTsKcHVibGljOgogICAgc21hbmlwKGlvcyYgKCpmKShpb3MmLCBUUCksIFRQ
IGEpIDogX2YoZiksIF9hKGEpIHt9CiAgICAgCiAgICBmcmllbmQgCiAgICAgIGlzdHJlYW0mIG9w
ZXJhdG9yPj4gPD4oaXN0cmVhbSYgaSwgY29uc3Qgc21hbmlwPFRQPiYgbSk7CiAgICBmcmllbmQK
ICAgICAgb3N0cmVhbSYgb3BlcmF0b3I8PCA8Pihvc3RyZWFtJiBvLCBjb25zdCBzbWFuaXA8VFA+
JiBtKTsKfTsKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBzbWFuaXA8aW50
PjsKX19leHRlbnNpb25fXyBleHRlcm4gdGVtcGxhdGUgY2xhc3Mgc21hbmlwPGlvczo6Zm10Zmxh
Z3M+OwoKCnRlbXBsYXRlPGNsYXNzIFRQPgppbmxpbmUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3Ry
ZWFtJiBpLCBjb25zdCBzbWFuaXA8VFA+JiBtKQp7ICgqbS5fZikoaSwgbS5fYSk7IHJldHVybiBp
OyB9Cgp0ZW1wbGF0ZTxjbGFzcyBUUD4KaW5saW5lIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVh
bSYgbywgY29uc3Qgc21hbmlwPFRQPiYgbSkKeyAoKm0uX2YpKG8sIG0uX2EpOyByZXR1cm4gbzt9
CgoKX19leHRlbnNpb25fXyBleHRlcm4gCnRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0
cmVhbSYsIGNvbnN0IHNtYW5pcDxpbnQ+Jik7Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIAp0ZW1wbGF0
ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjb25zdCBzbWFuaXA8aW9zOjpmbXRmbGFn
cz4mKTsKX19leHRlbnNpb25fXyBleHRlcm4gCnRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwo
b3N0cmVhbSYsIGNvbnN0IHNtYW5pcDxpbnQ+Jik7Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIAp0ZW1w
bGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBzbWFuaXA8aW9zOjpmbXRm
bGFncz4mKTsKCgogCiAKIAogCnRlbXBsYXRlPGNsYXNzIFRQPiBjbGFzcyBpbWFuaXA7IAoKdGVt
cGxhdGU8Y2xhc3MgVFA+IGNsYXNzIGlhcHAgewogICAgaXN0cmVhbSYgKCpfZikoaXN0cmVhbSYs
IFRQKTsKcHVibGljOiAKICAgIGlhcHAoaXN0cmVhbSYgKCpmKShpc3RyZWFtJixUUCkpIDogX2Yo
Zikge30KICAgICAKICAgIGltYW5pcDxUUD4gb3BlcmF0b3IoKShUUCBhKQogICAgICAgeyByZXR1
cm4gaW1hbmlwPFRQPihfZiwgYSk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUUD4KaW5saW5lIGlz
dHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNvbnN0IGltYW5pcDxUUD4mKTsKCnRlbXBsYXRl
IDxjbGFzcyBUUD4gY2xhc3MgaW1hbmlwIHsKICAgIGlzdHJlYW0mICgqX2YpKGlzdHJlYW0mLCBU
UCk7CiAgICBUUCBfYTsKcHVibGljOgogICAgaW1hbmlwKGlzdHJlYW0mICgqZikoaXN0cmVhbSYs
IFRQKSwgVFAgYSkgOiBfZihmKSwgX2EoYSkge30KICAgICAKICAgIGZyaWVuZAogICAgICBpc3Ry
ZWFtJiBvcGVyYXRvcj4+IDw+KGlzdHJlYW0mIGksIGNvbnN0IGltYW5pcDxUUD4mIG0pOwp9OwoK
dGVtcGxhdGUgPGNsYXNzIFRQPgppbmxpbmUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiBp
LCBjb25zdCBpbWFuaXA8VFA+JiBtKQp7IHJldHVybiAoKm0uX2YpKCBpLCBtLl9hKTsgfQoKIAog
CiAKIAp0ZW1wbGF0ZTxjbGFzcyBUUD4gY2xhc3Mgb21hbmlwOyAKCnRlbXBsYXRlPGNsYXNzIFRQ
PiBjbGFzcyBvYXBwIHsKICAgIG9zdHJlYW0mICgqX2YpKG9zdHJlYW0mLCBUUCk7CnB1YmxpYzog
CiAgICBvYXBwKG9zdHJlYW0mICgqZikob3N0cmVhbSYsVFApKSA6IF9mKGYpIHt9CiAgICAgCiAg
ICBvbWFuaXA8VFA+IG9wZXJhdG9yKCkoVFAgYSkKICAgICAgeyByZXR1cm4gb21hbmlwPFRQPihf
ZiwgYSk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUUD4KaW5saW5lIG9zdHJlYW0mIG9wZXJhdG9y
PDwob3N0cmVhbSYsIGNvbnN0IG9tYW5pcDxUUD4mKTsKCnRlbXBsYXRlIDxjbGFzcyBUUD4gY2xh
c3Mgb21hbmlwIHsKICAgIG9zdHJlYW0mICgqX2YpKG9zdHJlYW0mLCBUUCk7CiAgICBUUCBfYTsK
cHVibGljOgogICAgb21hbmlwKG9zdHJlYW0mICgqZikob3N0cmVhbSYsIFRQKSwgVFAgYSkgOiBf
ZihmKSwgX2EoYSkge30KICAgICAKICAgIGZyaWVuZAogICAgICBvc3RyZWFtJiBvcGVyYXRvcjw8
IDw+KG9zdHJlYW0mIG8sIGNvbnN0IG9tYW5pcDxUUD4mIG0pOwp9OwoKdGVtcGxhdGUgPGNsYXNz
IFRQPgppbmxpbmUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvLCBjb25zdCBvbWFuaXA8
VFA+JiBtKQp7IHJldHVybiAoKm0uX2YpKG8sIG0uX2EpOyB9CgogCiAKIAoKIAogCiAKIAoKCgoK
CmV4dGVybiBpb3MmIF9faW9tYW5pcF9zZXRiYXNlICAoaW9zJiwgICBpbnQgKTsgaW5saW5lICAg
c21hbmlwIDwgIGludCA+ICAgc2V0YmFzZSAgKCAgaW50ICBuKSB7IHJldHVybiAgIHNtYW5pcCA8
ICBpbnQgPiAoX19pb21hbmlwX3NldGJhc2UgLCBuKTsgfSAKZXh0ZXJuIGlvcyYgX19pb21hbmlw
X3NldGZpbGwgIChpb3MmLCAgIGludCApOyBpbmxpbmUgICBzbWFuaXAgPCAgaW50ID4gICBzZXRm
aWxsICAoICBpbnQgIG4pIHsgcmV0dXJuICAgc21hbmlwIDwgIGludCA+IChfX2lvbWFuaXBfc2V0
ZmlsbCAsIG4pOyB9IApleHRlcm4gaW9zJiBfX2lvbWFuaXBfc2V0cHJlY2lzaW9uICAoaW9zJiwg
ICBpbnQgKTsgaW5saW5lICAgc21hbmlwIDwgIGludCA+ICAgc2V0cHJlY2lzaW9uICAoICBpbnQg
IG4pIHsgcmV0dXJuICAgc21hbmlwIDwgIGludCA+IChfX2lvbWFuaXBfc2V0cHJlY2lzaW9uICwg
bik7IH0gCmV4dGVybiBpb3MmIF9faW9tYW5pcF9zZXR3ICAoaW9zJiwgICBpbnQgKTsgaW5saW5l
ICAgc21hbmlwIDwgIGludCA+ICAgc2V0dyAgKCAgaW50ICBuKSB7IHJldHVybiAgIHNtYW5pcCA8
ICBpbnQgPiAoX19pb21hbmlwX3NldHcgLCBuKTsgfSAKCmV4dGVybiBpb3MmIF9faW9tYW5pcF9y
ZXNldGlvc2ZsYWdzICAoaW9zJiwgICBpb3M6OmZtdGZsYWdzICk7IGlubGluZSAgIHNtYW5pcCA8
ICBpb3M6OmZtdGZsYWdzID4gICByZXNldGlvc2ZsYWdzICAoICBpb3M6OmZtdGZsYWdzICBuKSB7
IHJldHVybiAgIHNtYW5pcCA8ICBpb3M6OmZtdGZsYWdzID4gKF9faW9tYW5pcF9yZXNldGlvc2Zs
YWdzICwgbik7IH0gCmV4dGVybiBpb3MmIF9faW9tYW5pcF9zZXRpb3NmbGFncyAgKGlvcyYsICAg
aW9zOjpmbXRmbGFncyApOyBpbmxpbmUgICBzbWFuaXAgPCAgaW9zOjpmbXRmbGFncyA+ICAgc2V0
aW9zZmxhZ3MgICggIGlvczo6Zm10ZmxhZ3MgIG4pIHsgcmV0dXJuICAgc21hbmlwIDwgIGlvczo6
Zm10ZmxhZ3MgPiAoX19pb21hbmlwX3NldGlvc2ZsYWdzICwgbik7IH0gCn0gIAoKCiMgNiAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L2lvbWFuaXAiIDIgMwoKCiMgNTggIi4uL2Z1bmN0aW9uLy4uL3NwYWNlLy4uL2dlb21ldHJ5Ly4u
L2RlYnVnLmgiIDIKCgoKCiMgMSAiLi4vZnVuY3Rpb24vLi4vc3BhY2UvLi4vZ2VvbWV0cnkvZ2Vv
RGVidWcuaCIgMgoKCgoKCgoKIAogCiAKCiAKCgogCgoKCiAKCgogCgoKCgoKCgoKIAoKCgogCgoK
CgoKCiAKCgoKIAoKCgoKIyAxNyAiLi4vZnVuY3Rpb24vLi4vc3BhY2UvLi4vZ2VvbWV0cnkvZ2Vv
Q2VsbC5oIiAyCgoKIAoKY2xhc3MgZ2VvX1ZlcnRleDJkOwpjbGFzcyBnZW9fVmVydGV4M2Q7Cgog
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzIGdlb19NYXBUcmlhbmdsZTJkIHsK
CiAgIAogIHVjaGFyKiBtYXBfOwoKICAgCiAgdWludCAgIHN6XzsKCiAgIAogIHJlYWwgICBzY3hf
OwoKICAgCiAgcmVhbCAgIHNjeV87CgogICAKICB2b2lkIG9wZXJhdG9yPShjb25zdCBnZW9fTWFw
VHJpYW5nbGUyZCAmKTsKCiBwdWJsaWM6CiAgIAoKCgoKCgoKCgogIGdlb19NYXBUcmlhbmdsZTJk
KGNoYXIqIG1hcCwgcmVhbCBzY1gsIHJlYWwgc2NZKTsKCiAgIAogIGdlb19NYXBUcmlhbmdsZTJk
KGNvbnN0IGdlb19NYXBUcmlhbmdsZTJkICZtYXApOwogIH5nZW9fTWFwVHJpYW5nbGUyZCgpIHsg
ZGVsZXRlW10gbWFwXzsgfQoKICAgCgoKCgoKCiAgUmVhbDJkIG9wZXJhdG9yKCkocmVhbCB4LCBy
ZWFsIHkpIGNvbnN0IHsgCiAgICByZXR1cm4gUmVhbDJkKG1hcF8sIHNjeF8gKiB4LCBzY3lfICog
eSk7IH0KfTsKCiAKCiAKCgoKCgoKCmNsYXNzIGdlb19NYXBRdWFkMmQgewoKICAgCiAgdWNoYXIq
IG1hcF87CgogICAKICB1aW50ICAgc3pfOwoKICAgCiAgcmVhbCAgIHNjeF87CgogICAKICByZWFs
ICAgc2N5XzsKCiAgUmVhbDJkIG9yZ187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKICByZWFsICAgc3RyZXRjaF87ICAgICAKCiAgIAogIHZvaWQgb3BlcmF0
b3I9KGNvbnN0IGdlb19NYXBRdWFkMmQgJik7CgogcHVibGljOgogICAKCgoKCgoKCgoKCgogIGdl
b19NYXBRdWFkMmQoY2hhciogbWFwLCByZWFsIHNjWCwgcmVhbCBzY1ksIFJlYWwyZCBvcmcgPSBS
ZWFsMmQoMC4wLCAwLjApLAoJCXJlYWwgc3RyZXRjaCA9IDEuMCk7ICAKCiAgIAogIGdlb19NYXBR
dWFkMmQoY29uc3QgZ2VvX01hcFF1YWQyZCAmbWFwKTsKICB+Z2VvX01hcFF1YWQyZCgpIHsgZGVs
ZXRlW10gbWFwXzsgfQoKICAgCgoKCgoKCiAgUmVhbDJkIG9wZXJhdG9yKCkocmVhbCB4LCByZWFs
IHkpIGNvbnN0IHsKICAgIFJlYWwyZCB2KG1hcF8sIHNjeF8gKiB4LCBzY3lfICogeSk7CiAgICB2
LnNjYWxlKHN0cmV0Y2hfKTsKICAgIHJldHVybiB2ICsgb3JnXzsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAogIH0KfTsKCiAKCiAKCmNsYXNzIGdlb19NYXBUcmlhbmds
ZTNkIHsKCiAgIAogIHVjaGFyKiBtYXBfOwoKICAgCiAgdWludCAgIHN6XzsKCiAgIAogIHJlYWwg
ICBzY3hfOwoKICAgCiAgcmVhbCAgIHNjeV87CgogICAKICB2b2lkIG9wZXJhdG9yPShjb25zdCBn
ZW9fTWFwVHJpYW5nbGUzZCAmKTsKCiBwdWJsaWM6CiAgIAoKCgoKCgoKCgogIGdlb19NYXBUcmlh
bmdsZTNkKGNoYXIqIG1hcCwgcmVhbCBzY1gsIHJlYWwgc2NZKTsKCiAgIAogIGdlb19NYXBUcmlh
bmdsZTNkKGNvbnN0IGdlb19NYXBUcmlhbmdsZTNkICZtYXApOwogIH5nZW9fTWFwVHJpYW5nbGUz
ZCgpIHsgZGVsZXRlW10gbWFwXzsgfQoKICAgCgoKCgoKCiAgUmVhbDNkIG9wZXJhdG9yKCkocmVh
bCB4LCByZWFsIHkpIGNvbnN0IHsgCiAgICByZXR1cm4gUmVhbDNkKG1hcF8sIHNjeF8gKiB4LCBz
Y3lfICogeSk7IH0KfTsKCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNz
IGdlb19NYXBUZXRyYWhlZHJvbjNkIHsKCiAgIAogIHVjaGFyKiBtYXBfOwoKICAgCiAgdWludCBz
el87CgogICAKICByZWFsIHNjeF87CgogICAKICByZWFsIHNjeV87CgogICAKICByZWFsIHNjel87
CgogICAKICBSb3RhdGlvbjNkIEJfOwoKICAgCiAgUmVhbDNkIGJfOwoKICAgCiAgdm9pZCBvcGVy
YXRvcj0oY29uc3QgZ2VvX01hcFRldHJhaGVkcm9uM2QgJik7CgpwdWJsaWM6CiAgIAoKCgoKCgoK
CgoKICBnZW9fTWFwVGV0cmFoZWRyb24zZChjaGFyKiBtYXAsIHJlYWwgc2NYLCByZWFsIHNjWSwg
cmVhbCBzY1opOwoKICAgCgoKCgoKICBnZW9fTWFwVGV0cmFoZWRyb24zZChSZWFsM2QgdnR4MCwg
UmVhbDNkIHZ0eDEsIFJlYWwzZCB2dHgyLCBSZWFsM2QgdnR4Myk7CgogICAKICBnZW9fTWFwVGV0
cmFoZWRyb24zZChjb25zdCBnZW9fTWFwVGV0cmFoZWRyb24zZCAmbWFwKTsKICB+Z2VvX01hcFRl
dHJhaGVkcm9uM2QoKSB7IGRlbGV0ZVtdIG1hcF87IH0KCiAgIAoKCgoKCgoKCgoKCgoKCiAgUmVh
bDNkIG9wZXJhdG9yKCkocmVhbCB4LCByZWFsIHksIHJlYWwgeikgY29uc3QgeyAKICAgIGlmICht
YXBfKQogICAgICByZXR1cm4gUmVhbDNkKG1hcF8sIHNjeF8gKiB4LCBzY3lfICogeSwgc2N6XyAq
IHopOwogICAgZWxzZSB7CiAgICAgIHJlYWwgYSA9IHkqKDEuMC16KTsKICAgICAgUmVhbDNkIHhp
KHgqKDEuMC16KSooMS4wLWEpLCBhLCB6KTsKICAgICAgUmVhbDNkIHJlczsKICAgICAgQl8ubWFw
KHhpLCAmcmVzKTsKICAgICAgcmVzICs9IGJfOwogICAgICBpZiggMCAgIT0wKSBjb3V0IDw8ICAg
J1snIDw8ICAiLi4vZnVuY3Rpb24vLi4vc3BhY2UvLi4vZ2VvbWV0cnkvZ2VvQ2VsbC5oIiA8PCAi
LCBsaW5lICIgPDwgMzI0CgkgIDw8ICJdIGdlb19NYXBUZXRyYWhlZHJvbjNkOjpvcGVyYXRvcigp
IC0tICgiIDw8IHggPDwgIiwgIiA8PCB5IAoJICA8PCAiLCAiIDw8IHogPDwgIikgLT4gIiA8PCB4
aSA8PCAiIC0+IiAgPDwgIiAiIDw8ICAgcmVzICA8PCBlbmRsOyA7CiAgICAgIHJldHVybiByZXM7
CiAgICB9CiAgfQp9OwoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKY2xhc3MgZ2VvX01hcEhleGFoZWRy
b24zZCB7CgogICAKICB1Y2hhciogbWFwXzsKCiAgIAogIHVpbnQgc3pfOwoKICAgCiAgcmVhbCBz
Y3hfOwoKICAgCiAgcmVhbCBzY3lfOwoKICAgCiAgcmVhbCBzY3pfOwoKICAgCiAgUmVhbDNkICpj
b21wXzsKCiAgIAogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IGdlb19NYXBIZXhhaGVkcm9uM2QgJik7
CgpwdWJsaWM6CiAgIAoKCgoKCgoKCgoKICBnZW9fTWFwSGV4YWhlZHJvbjNkKGNoYXIqIG1hcCwg
cmVhbCBzY1gsIHJlYWwgc2NZLCByZWFsIHNjWik7CgogICAKCgoKCgogIGdlb19NYXBIZXhhaGVk
cm9uM2QoY29uc3QgUmVhbDNkJiB2dHgwLCBjb25zdCBSZWFsM2QmIHZ0eDEsIAoJCSAgICAgIGNv
bnN0IFJlYWwzZCYgdnR4MiwgY29uc3QgUmVhbDNkJiB2dHgzLAoJCSAgICAgIGNvbnN0IFJlYWwz
ZCYgdnR4NCwgY29uc3QgUmVhbDNkJiB2dHg1LAoJCSAgICAgIGNvbnN0IFJlYWwzZCYgdnR4Niwg
Y29uc3QgUmVhbDNkJiB2dHg3KTsKCiAgIAogIGdlb19NYXBIZXhhaGVkcm9uM2QoY29uc3QgZ2Vv
X01hcEhleGFoZWRyb24zZCAmbWFwKTsKICB+Z2VvX01hcEhleGFoZWRyb24zZCgpIHsgZGVsZXRl
W10gbWFwXzsgZGVsZXRlW10gY29tcF87IH0KCiAgIAoKCgoKCgoKICBpbmxpbmUgUmVhbDNkIG9w
ZXJhdG9yKCkocmVhbCB4LCByZWFsIHksIHJlYWwgeikgY29uc3QgeyAKICAgIGlmIChtYXBfKQog
ICAgICByZXR1cm4gUmVhbDNkKG1hcF8sIHNjeF8gKiB4LCBzY3lfICogeSwgc2N6Xyogeik7CiAg
ICBlbHNlIHsKICAgICAgcmV0dXJuIGNvbXBfWzBdKih4KnkqeikKCSsgY29tcF9bMV0qKHgqeSkg
KyBjb21wX1syXSooeCp6KSArIGNvbXBfWzNdKih5KnopCgkrIGNvbXBfWzRdKnggKyBjb21wX1s1
XSp5ICsgY29tcF9bNl0qegoJKyBjb21wX1s3XTsKICAgIH0KICB9CgogIGlubGluZSBkb3VibGUg
amFjb2JpYW4oZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeikgY29uc3QgewogICAgaWYgKG1h
cF8pCiAgICAgIHJldHVybiAwLjA7CiAgICBlbHNlIHsKICAgICAgUmVhbDNkIGZpcnN0IChjb21w
X1swXSooeSp6KSArIGNvbXBfWzFdKnkgKyBjb21wX1syXSp6ICsgY29tcF9bNF0pOwogICAgICBS
ZWFsM2Qgc2Vjb25kKGNvbXBfWzBdKih4KnopICsgY29tcF9bMV0qeCArIGNvbXBfWzNdKnogKyBj
b21wX1s1XSk7CiAgICAgIFJlYWwzZCB0aGlyZCAoY29tcF9bMF0qKHgqeSkgKyBjb21wX1syXSp4
ICsgY29tcF9bM10qeSArIGNvbXBfWzZdKTsKCiAgICAgIHJldHVybiBmYWJzKGZpcnN0LngoKSpz
ZWNvbmQueSgpKnRoaXJkLnooKSArCgkJICBzZWNvbmQueCgpKnRoaXJkLnkoKSpmaXJzdC56KCkg
KwoJCSAgdGhpcmQueCgpKmZpcnN0LnkoKSpzZWNvbmQueigpIC0KCQkgIGZpcnN0LnooKSpzZWNv
bmQueSgpKnRoaXJkLngoKSAtCgkJICBzZWNvbmQueigpKnRoaXJkLnkoKSpmaXJzdC54KCkgLQoJ
CSAgdGhpcmQueigpKmZpcnN0LnkoKSpzZWNvbmQueCgpKTsKICAgIH0KICB9Cn07CgogCgogCgoK
CgoKCmNsYXNzIGdlb19DZWxsIHsKICBmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3IgPDwob3N0cmVh
bSYgb3MsIGNvbnN0IGdlb19DZWxsJiBjKTsKcHVibGljOgogIHZpcnR1YWwgZ2VvX0NlbGwqIGNo
aWxkKHVpbnQgaSkgPSAwOwogIHZpcnR1YWwgZ2VvX0Nvbm5lY3RvciYgY29ubmVjdG9yKCkgY29u
c3QgPSAwOwogIHZpcnR1YWwgb3N0cmVhbSYgaW5mbyhvc3RyZWFtJiBvcykgY29uc3QgPSAwOwp9
OwoKIAoKIAoKCmNsYXNzIGdlb19DZWxsMiA6IHB1YmxpYyBnZW9fQ2VsbCB7CgogcHVibGljOgog
IHZpcnR1YWwgZ2VvX0NlbGwyKiBjaGlsZCh1aW50IGkpID0gMDsKICB2aXJ0dWFsIGdlb19Db25u
ZWN0b3IyJiBjb25uZWN0b3IoKSBjb25zdCA9IDA7Cn07CgogCgogCgoKY2xhc3MgZ2VvX0NlbGwz
IDogcHVibGljIGdlb19DZWxsIHsKCnB1YmxpYzoKICB2aXJ0dWFsIGdlb19DZWxsMyogY2hpbGQo
dWludCBpKSA9IDA7CiAgdmlydHVhbCBnZW9fQ29ubmVjdG9yMyYgY29ubmVjdG9yKCkgY29uc3Qg
PSAwOwogIHZpcnR1YWwgUmVhbDNkIHZlcnRleCh1aW50IGkpIGNvbnN0ID0gMDsKfTsKCiAKCiAK
CmNsYXNzIGdlb19UcmlhbmdsZTJkIDogcHVibGljIGdlb19DZWxsMiB7CgogICAKCiAgc3RydWN0
IEluZGV4IHsKICAgICAKICAgIHVjaGFyICBsXzsKCiAgICAgCgoKCiAgICB1c2hvcnQgaV87Cgog
ICAgIAoKCgogICAgdXNob3J0IGpfOwoKICAgIGlubGluZSBJbmRleCgpOwogICAgaW5saW5lIElu
ZGV4KHVjaGFyIGwsIHVzaG9ydCBpLCB1c2hvcnQgaik7CiAgICBpbmxpbmUgb3N0cmVhbSYgaW5m
byhvc3RyZWFtJiBvcykgY29uc3Q7CiAgfTsKCiAgIAogIEluZGV4IGlkeF87CgogICAKICBnZW9f
VHJpYW5nbGUmIGNudHJfOwoKICAgCiAgZ2VvX1RyaWFuZ2xlMmQqIGxua187CgogICAKCgogIGdl
b19UcmlhbmdsZTJkKiBjaGxkXzsKCiAgIAogIGdlb19NYXBUcmlhbmdsZTJkKiBtYXBfOwoKICAg
CiAgZ2VvX1RyaWFuZ2xlMmQoZ2VvX1RyaWFuZ2xlJiBjbnRyLCBnZW9fTWFwVHJpYW5nbGUyZCog
bWFwLCBjb25zdCBJbmRleCYgaWR4KTsKCiBwdWJsaWM6CiAgIAoKCgogIGdlb19UcmlhbmdsZTJk
KGdlb19UcmlhbmdsZSYgY250ciwgY29uc3QgZ2VvX01hcFRyaWFuZ2xlMmQmIG1hcCk7CiAgdmly
dHVhbCB+Z2VvX1RyaWFuZ2xlMmQoKTsKICAKICAgCgoKCgogIGdlb19UcmlhbmdsZTJkKiBjaGls
ZCh1aW50IGkpOwoKICAgCiAgaW5saW5lIGdlb19UcmlhbmdsZSYgY29ubmVjdG9yKCkgY29uc3Q7
CiAgb3N0cmVhbSYgaW5mbyhvc3RyZWFtJiBvcykgY29uc3Q7CgogICAKCgoKCgoKCiAgUmVhbDJk
IGNoaShyZWFsIHhpLCByZWFsIGV0YSkgY29uc3Q7Cn07CgppbmxpbmUgZ2VvX1RyaWFuZ2xlMmQ6
OkluZGV4OjpJbmRleCgpIHsgCiAgbF8gPSAwOyBpXyA9IGpfID0gMDsgCn0KCmlubGluZSBnZW9f
VHJpYW5nbGUmIGdlb19UcmlhbmdsZTJkOjpjb25uZWN0b3IoKSBjb25zdCB7IAogIHJldHVybiBj
bnRyXzsgCn0KCmlubGluZSBvc3RyZWFtJiBnZW9fVHJpYW5nbGUyZDo6SW5kZXg6OmluZm8ob3N0
cmVhbSYgb3MpIGNvbnN0IHsKICByZXR1cm4gb3MgPDwgJygnIDw8ICh1aW50KWxfIDw8ICIsICIg
PDwgaV8gPDwgIiwgIiA8PCBqXyA8PCAnKSc7Cn0KCiAKCiAKCmNsYXNzIGdlb19RdWFkMmQgOiBw
dWJsaWMgZ2VvX0NlbGwyIHsKCiAgIAoKICBzdHJ1Y3QgSW5kZXggewogICAgZnJpZW5kIG9zdHJl
YW0mIG9wZXJhdG9yIDw8KG9zdHJlYW0mIG9zLCBjb25zdCBJbmRleCYgaSk7CgogICAgIAogICAg
dWNoYXIgIGxfOwoKICAgICAKCgoKICAgIHVzaG9ydCBpXzsKCiAgICAgCgoKCiAgICB1c2hvcnQg
al87CgogICAgaW5saW5lIEluZGV4KCk7CiAgICBpbmxpbmUgSW5kZXgodWNoYXIgbCwgdXNob3J0
IGksIHVzaG9ydCBqKTsKICAgIGlubGluZSBvc3RyZWFtJiBpbmZvKG9zdHJlYW0mIG9zKSBjb25z
dDsKICB9OwoKICAgCiAgSW5kZXggaWR4XzsKCiAgIAogIGdlb19RdWFkJiBjbnRyXzsKCiAgIAog
IGdlb19RdWFkMmQqIGxua187CgogICAKCgogIGdlb19RdWFkMmQqIGNobGRfOwoKICAgCiAgZ2Vv
X01hcFF1YWQyZCogbWFwXzsKCiAgIAogIGdlb19RdWFkMmQoZ2VvX1F1YWQmIGNudHIsIGdlb19N
YXBRdWFkMmQqIG1hcCwgY29uc3QgSW5kZXgmIGlkeCk7CgpwdWJsaWM6CiAgIAoKCgogIGdlb19R
dWFkMmQoZ2VvX1F1YWQmIGNudHIsIGNvbnN0IGdlb19NYXBRdWFkMmQmIG1hcCk7CiAgdmlydHVh
bCB+Z2VvX1F1YWQyZCgpOwogIAogICAKCgoKCiAgZ2VvX1F1YWQyZCogY2hpbGQodWludCBpKTsK
CiAgIAogIGlubGluZSBnZW9fUXVhZCYgY29ubmVjdG9yKCkgY29uc3Q7CiAgb3N0cmVhbSYgaW5m
byhvc3RyZWFtJiBvcykgY29uc3Q7CgogICAKCgoKCgoKICBSZWFsMmQgY2hpKHJlYWwgeGksIHJl
YWwgZXRhKSBjb25zdDsKfTsKCmlubGluZSBnZW9fUXVhZDJkOjpJbmRleDo6SW5kZXgoKSB7IAog
IGxfID0gMDsgaV8gPSBqXyA9IDA7IAp9CgppbmxpbmUgZ2VvX1F1YWQyZDo6SW5kZXg6OkluZGV4
KHVjaGFyIGwsIHVzaG9ydCBpLCB1c2hvcnQgaikgeyAKICBsXyA9IGw7IGlfID0gaTsgal8gPSBq
OyAKfQoKaW5saW5lIG9zdHJlYW0mIGdlb19RdWFkMmQ6OkluZGV4OjppbmZvKG9zdHJlYW0mIG9z
KSBjb25zdCB7CiAgcmV0dXJuIG9zIDw8ICcoJyA8PCAodWludClsXyA8PCAiLCAiIDw8IGlfIDw8
ICIsICIgPDwgal8gPDwgJyknOwp9CgppbmxpbmUgZ2VvX1F1YWQmIGdlb19RdWFkMmQ6OmNvbm5l
Y3RvcigpIGNvbnN0IHsgCiAgcmV0dXJuIGNudHJfOyAKfQoKIAoKIAoKY2xhc3MgZ2VvX1RyaWFu
Z2xlM2QgOiBwdWJsaWMgZ2VvX0NlbGwyIHsKCiAgc3RydWN0IEluZGV4IHsKICAgIHVjaGFyICBs
XzsKICAgIHVzaG9ydCBpXzsKICAgIHVzaG9ydCBqXzsKCiAgICBpbmxpbmUgSW5kZXgoKTsKICAg
IGlubGluZSBJbmRleCh1Y2hhciBsLCB1c2hvcnQgaSwgdXNob3J0IGopOwogICAgaW5saW5lIG9z
dHJlYW0mIGluZm8ob3N0cmVhbSYgb3MpIGNvbnN0OwogIH07CgogIEluZGV4IGlkeF87CgogIGdl
b19UcmlhbmdsZSYgY250cl87CgogIGdlb19UcmlhbmdsZTNkKiBsbmtfOwogIGdlb19Ucmlhbmds
ZTNkKiBjaGxkXzsKCiAgZ2VvX01hcFRyaWFuZ2xlM2QqIG1hcF87CgogIGdlb19UcmlhbmdsZTNk
KGdlb19UcmlhbmdsZSYgY250ciwgZ2VvX01hcFRyaWFuZ2xlM2QqIG1hcCwgY29uc3QgSW5kZXgm
IGtleSk7CgogcHVibGljOgogIGdlb19UcmlhbmdsZTNkKGdlb19UcmlhbmdsZSYgY250ciwgY29u
c3QgZ2VvX01hcFRyaWFuZ2xlM2QmIG1hcCk7CiAgdmlydHVhbCB+Z2VvX1RyaWFuZ2xlM2QoKTsK
ICAKICBnZW9fVHJpYW5nbGUzZCogY2hpbGQodWludCBpKTsKICBpbmxpbmUgZ2VvX1RyaWFuZ2xl
JiBjb25uZWN0b3IoKSBjb25zdDsKICBvc3RyZWFtJiBpbmZvKG9zdHJlYW0mIG9zKSBjb25zdDsK
CiAgUmVhbDNkIGNoaShyZWFsIHhpLCByZWFsIGV0YSkgY29uc3Q7Cn07CgppbmxpbmUgZ2VvX1Ry
aWFuZ2xlM2Q6OkluZGV4OjpJbmRleCgpIHsgCiAgbF8gPSAwOyBpXyA9IGpfID0gMDsgCn0KCmlu
bGluZSBnZW9fVHJpYW5nbGUzZDo6SW5kZXg6OkluZGV4KHVjaGFyIGwsIHVzaG9ydCBpLCB1c2hv
cnQgaikgeyAKICBsXyA9IGw7IGlfID0gaTsgal8gPSBqOyAKfQoKaW5saW5lIGdlb19Ucmlhbmds
ZSYgZ2VvX1RyaWFuZ2xlM2Q6OmNvbm5lY3RvcigpIGNvbnN0IHsgCiAgcmV0dXJuIGNudHJfOyAK
fQoKaW5saW5lIG9zdHJlYW0mIGdlb19UcmlhbmdsZTNkOjpJbmRleDo6aW5mbyhvc3RyZWFtJiBv
cykgY29uc3QgewogIHJldHVybiBvcyA8PCAnKCcgPDwgKHVpbnQpbF8gPDwgIiwgIiA8PCBpXyA8
PCAiLCAiIDw8IGpfIDw8ICcpJzsKfQoKIAoKIAoKY2xhc3MgZ2VvX1RldHJhaGVkcm9uM2QgOiBw
dWJsaWMgZ2VvX0NlbGwzIHsKCiAgIAoKICBzdHJ1Y3QgSW5kZXggewogICAgIAogICAgdWNoYXIg
IGxfOwoKICAgICAKCgoKICAgIHVzaG9ydCBpXzsKCiAgICAgCgoKCiAgICB1c2hvcnQgal87Cgog
ICAgIAoKCgogICAgdXNob3J0IGtfOwoKICAgIGlubGluZSBJbmRleCgpOwogICAgaW5saW5lIElu
ZGV4KHVjaGFyIGwsIHVzaG9ydCBpLCB1c2hvcnQgaiwgdXNob3J0IGspOwogICAgaW5saW5lIG9z
dHJlYW0mIGluZm8ob3N0cmVhbSYgb3MpIGNvbnN0OwogIH07CgogICAKICBJbmRleCBpZHhfOwoK
ICAgCiAgZ2VvX1RldHJhaGVkcm9uJiBjbnRyXzsKCiAgIAogIGdlb19UZXRyYWhlZHJvbjNkKiBs
bmtfOwoKICAgCgoKICBnZW9fVGV0cmFoZWRyb24zZCogY2hsZF87CgogICAKICBnZW9fTWFwVGV0
cmFoZWRyb24zZCogbWFwXzsKCiAgIAogIGdlb19UZXRyYWhlZHJvbjNkKGdlb19UZXRyYWhlZHJv
biYgY250ciwgZ2VvX01hcFRldHJhaGVkcm9uM2QqIG1hcCwgCgkJICAgIGNvbnN0IEluZGV4JiBp
ZHgpOwoKcHVibGljOgogICAKCgoKICBnZW9fVGV0cmFoZWRyb24zZChnZW9fVGV0cmFoZWRyb24m
IGNudHIsIGNvbnN0IGdlb19NYXBUZXRyYWhlZHJvbjNkJiBtYXApOwogIHZpcnR1YWwgfmdlb19U
ZXRyYWhlZHJvbjNkKCk7CiAgCiAgIAoKCgoKICBnZW9fVGV0cmFoZWRyb24zZCogY2hpbGQodWlu
dCBpKTsKCiAgIAogIGlubGluZSBnZW9fVGV0cmFoZWRyb24mIGNvbm5lY3RvcigpIGNvbnN0Owog
IG9zdHJlYW0mIGluZm8ob3N0cmVhbSYgb3MpIGNvbnN0OwoKICAgCgoKCgoKCgogIFJlYWwzZCBj
aGkocmVhbCB4aSwgcmVhbCBldGEsIHJlYWwgemV0YSkgY29uc3Q7CgogICAKICBSZWFsM2QgdmVy
dGV4KHVpbnQgaSkgY29uc3Q7Cn07CgppbmxpbmUgZ2VvX1RldHJhaGVkcm9uM2Q6OkluZGV4OjpJ
bmRleCgpIHsgCiAgbF8gPSAwOyBpXyA9IGpfID0ga18gPSAwOyAKfQoKaW5saW5lIGdlb19UZXRy
YWhlZHJvbjNkOjpJbmRleDo6SW5kZXgodWNoYXIgbCwgCgkJCQkgICAgICAgdXNob3J0IGksIHVz
aG9ydCBqLCB1c2hvcnQgaykgOgogIGxfKGwpLCBpXyhpKSwgal8oaiksIGtfKGspCnt9Cgppbmxp
bmUgZ2VvX1RldHJhaGVkcm9uJiBnZW9fVGV0cmFoZWRyb24zZDo6Y29ubmVjdG9yKCkgY29uc3Qg
eyAKICByZXR1cm4gY250cl87IAp9CgppbmxpbmUgb3N0cmVhbSYgZ2VvX1RldHJhaGVkcm9uM2Q6
OkluZGV4OjppbmZvKG9zdHJlYW0mIG9zKSBjb25zdCB7CiAgcmV0dXJuIG9zIDw8ICcoJyA8PCAo
dWludClsXyA8PCAiLCAiIAoJICAgIDw8IGlfIDw8ICIsICIgPDwgal8gPDwgIiwgIiA8PCBrXyA8
PCAnKSc7Cn0KCiAKCiAKCmNsYXNzIGdlb19IZXhhaGVkcm9uM2QgOiBwdWJsaWMgZ2VvX0NlbGwz
IHsKCiAgIAoKICBzdHJ1Y3QgSW5kZXggewogICAgIAogICAgdWNoYXIgIGxfOwoKICAgICAKCgoK
ICAgIHVzaG9ydCBpXzsKCiAgICAgCgoKCiAgICB1c2hvcnQgal87CgogICAgIAoKCgogICAgdXNo
b3J0IGtfOwoKICAgIGlubGluZSBJbmRleCgpOwogICAgaW5saW5lIEluZGV4KHVjaGFyIGwsIHVz
aG9ydCBpLCB1c2hvcnQgaiwgdXNob3J0IGspOwogICAgaW5saW5lIG9zdHJlYW0mIGluZm8ob3N0
cmVhbSYgb3MpIGNvbnN0OwogIH07CgogICAKICBJbmRleCBpZHhfOwoKICAgCiAgZ2VvX0hleGFo
ZWRyb24mIGNudHJfOwoKICAgCiAgZ2VvX0hleGFoZWRyb24zZCogbG5rXzsKCiAgIAoKCiAgZ2Vv
X0hleGFoZWRyb24zZCogY2hsZF87CgogICAKICBnZW9fTWFwSGV4YWhlZHJvbjNkKiBtYXBfOwoK
ICAgCiAgbXV0YWJsZSBnZW9fTWFwSGV4YWhlZHJvbjNkKiBqYWNvYmlhbl87CgogICAKICBnZW9f
SGV4YWhlZHJvbjNkKGdlb19IZXhhaGVkcm9uJiBjbnRyLCBnZW9fTWFwSGV4YWhlZHJvbjNkKiBt
YXAsIAoJCSAgICBjb25zdCBJbmRleCYgaWR4KTsKCnB1YmxpYzoKICAgCgoKCiAgZ2VvX0hleGFo
ZWRyb24zZChnZW9fSGV4YWhlZHJvbiYgY250ciwgY29uc3QgZ2VvX01hcEhleGFoZWRyb24zZCYg
bWFwKTsKICB2aXJ0dWFsIH5nZW9fSGV4YWhlZHJvbjNkKCk7CiAgCiAgIAoKCgoKICBnZW9fSGV4
YWhlZHJvbjNkKiBjaGlsZCh1aW50IGkpOwoKICAgCiAgaW5saW5lIGdlb19IZXhhaGVkcm9uJiBj
b25uZWN0b3IoKSBjb25zdDsKICBvc3RyZWFtJiBpbmZvKG9zdHJlYW0mIG9zKSBjb25zdDsKCiAg
IAoKCgoKCgoKICBSZWFsM2QgY2hpKHJlYWwgeGksIHJlYWwgZXRhLCByZWFsIHpldGEpIGNvbnN0
OwoKICByZWFsIGphY29iaWFuKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopIGNvbnN0OwoK
ICAgCiAgUmVhbDNkIHZlcnRleCh1aW50IGkpIGNvbnN0Owp9OwoKaW5saW5lIGdlb19IZXhhaGVk
cm9uM2Q6OkluZGV4OjpJbmRleCgpIHsgCiAgbF8gPSAwOyBpXyA9IGpfID0ga18gPSAwOyAKfQoK
aW5saW5lIGdlb19IZXhhaGVkcm9uM2Q6OkluZGV4OjpJbmRleCh1Y2hhciBsLCAKCQkJCSAgICAg
ICB1c2hvcnQgaSwgdXNob3J0IGosIHVzaG9ydCBrKSA6CiAgbF8obCksIGlfKGkpLCBqXyhqKSwg
a18oaykKe30KCmlubGluZSBnZW9fSGV4YWhlZHJvbiYgZ2VvX0hleGFoZWRyb24zZDo6Y29ubmVj
dG9yKCkgY29uc3QgeyAKICByZXR1cm4gY250cl87IAp9CgppbmxpbmUgb3N0cmVhbSYgZ2VvX0hl
eGFoZWRyb24zZDo6SW5kZXg6OmluZm8ob3N0cmVhbSYgb3MpIGNvbnN0IHsKICByZXR1cm4gb3Mg
PDwgJygnIDw8ICh1aW50KWxfIDw8ICIsICIgCgkgICAgPDwgaV8gPDwgIiwgIiA8PCBqXyA8PCAi
LCAiIDw8IGtfIDw8ICcpJzsKfQoKCiMgMTUgIi4uL2Z1bmN0aW9uLy4uL3NwYWNlL3NwY0VsZW1l
bnQuaCIgMgoKCiMgMSAiLi4vZnVuY3Rpb24vLi4vc3BhY2UvLi4vdG9vbGJveC90YnhTY2FDby5o
IiAxCiAKCgoKCgoKCgogCgogCgoKCnRlbXBsYXRlIDxjbGFzcyBULCB1bnNpZ25lZCBubG5rPiAK
Y2xhc3MgdGJ4X0Nvbm5lY3RvciB7CiBwdWJsaWM6CiAgIAoKCgoKCiAgaW5saW5lIHRieF9Db25u
ZWN0b3IoY29uc3QgVCYgdmFsLCB0YnhfQ29ubmVjdG9yKiBsbmsgPSBfX251bGwgKTsKCiAgIAoK
CiAgaW5saW5lIHRieF9Db25uZWN0b3IqJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpOwoKICAgCiAg
aW5saW5lIFQmIHZhbHVlKCk7CgogcHJpdmF0ZToKICAgCiAgdGJ4X0Nvbm5lY3RvciogbG5rX1tu
bG5rXTsKCiAgIAogIFQgICAgICAgICAgICAgIHZhbF87CgogICAKICB0YnhfQ29ubmVjdG9yKGNv
bnN0IHRieF9Db25uZWN0b3ImKTsKICB2b2lkIG9wZXJhdG9yID0oY29uc3QgdGJ4X0Nvbm5lY3Rv
ciYpOwp9OwogIAp0ZW1wbGF0ZSA8Y2xhc3MgVCwgdW5zaWduZWQgbmxuaz4KaW5saW5lIHRieF9D
b25uZWN0b3I8VCwgbmxuaz46OnRieF9Db25uZWN0b3IoY29uc3QgVCYgdmFsLCAKCQkJCQkgICAg
IHRieF9Db25uZWN0b3I8VCwgbmxuaz4qIGxuaykgOiAKICB2YWxfKHZhbCkgeyAKICBmb3IodW5z
aWduZWQgaSA9IDA7IGkgPCBubG5rIC0gMTsgKytpKSBsbmtfW2ldID0gX19udWxsIDsgCiAgbG5r
X1tubG5rIC0gMV0gPSBsbms7IAp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgdW5zaWduZWQgbmxuaz4K
aW5saW5lIHRieF9Db25uZWN0b3I8VCwgbmxuaz4qJiB0YnhfQ29ubmVjdG9yPFQsIG5sbms+Ojpv
cGVyYXRvcltdKHVuc2lnbmVkIGkpIHsgCiAgcmV0dXJuIGxua19baV07IAp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgVCwgdW5zaWduZWQgbmxuaz4KaW5saW5lIFQmIHRieF9Db25uZWN0b3I8VCwgbmxuaz46
OnZhbHVlKCkgewogIHJldHVybiB2YWxfOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgdW5zaWdu
ZWQgaHQ+CmNsYXNzIHRieF9TdGFjayB7CiAgVCAgc19baHRdOwogIFQqIHBfOwoKIHB1YmxpYzoK
ICB0YnhfU3RhY2soKSB7IHBfID0gc187IH0KCgoKCiAgdGJ4X1N0YWNrKGNvbnN0IHRieF9TdGFj
ayYgc3RrKSB7IHNfID0gc3RrLnNfOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcF8gPSBzXyArICgoVCBjb25zdCAqKXN0ay5wXyAtIHN0ay5zXyk7IH0KCiAgdGJ4X1N0
YWNrJiBvcGVyYXRvciA9KGNvbnN0IHRieF9TdGFjayYgc3RrKSB7IHNfID0gc3RrLnNfOyAKICAg
ICAgICAgICAgICAgICAgICAgICAgIHBfID0gc18gKyAoKFQgY29uc3QgKilzdGsucF8gLSBzdGsu
c18pOyByZXR1cm4gKnRoaXM7IH0KIAogIHZvaWQgcHVzaChjb25zdCBUJiB2YWwpIHsgaWYgKCh1
bnNpZ25lZCkocF8gLSBzXykgPCBodCkgKnBfKysgPSB2YWw7IH0KICBUIHBvcCgpIHsgaWYgKHBf
ICE9IHNfKSAtLXBfOyByZXR1cm4gKnBfOyB9CgogIHVuc2lnbmVkIHVzZWQoKSB7IHJldHVybiBw
XyAtIHNfOyB9CiAgdW5zaWduZWQgZnJlZSgpIHsgcmV0dXJuIGh0IC0gKHBfIC0gc18pOyB9Cn07
CgogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCnRlbXBs
YXRlIDxjbGFzcyBUPiAKY2xhc3MgdGJ4X1NjYW4gewoKIHB1YmxpYzoKICB2aXJ0dWFsIH50Ynhf
U2NhbigpIHt9OwoKICBvcGVyYXRvciBpbnQoKSB7IHJldHVybiAhZW9zKCk7IH0KCiAgdmlydHVh
bCBib29sIGVvcygpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIFQmIG9wZXJhdG9yKysoaW50KSA9IDA7
CgogIHZpcnR1YWwgdGJ4X1NjYW48VD4qIGNsb25lKCkgY29uc3QgPSAwOwp9OwoKIAoKdGVtcGxh
dGUgPGNsYXNzIFQsIHVuc2lnbmVkIG5sbms+IApjbGFzcyB0YnhfR2VuZXJpY1NjYW4gOiBwdWJs
aWMgdGJ4X1NjYW48VD4gewogIHN0cnVjdCBTdGF0ZSB7IAogICAgdGJ4X0Nvbm5lY3RvcjxULCBu
bG5rPiogY25yOyAKICAgIHVuc2lnbmVkICAgICAgICAgICAgbG5rOwogIH07CgogIHRieF9TdGFj
azxTdGF0ZSwgMTAwID4gc3RhY2tfOwoKICBTdGF0ZSBzXzsKICBib29sICBlb3NfOwoKIHB1Ymxp
YzoKICB0YnhfR2VuZXJpY1NjYW4odGJ4X0Nvbm5lY3RvcjxULCBubG5rPiYgY25yKSB7IGVvc18g
PSBmYWxzZTsgc18uY25yID0gJmNucjsgCiAgICAgICAgICB1bnNpZ25lZCBpID0gMDsgZm9yICg7
IGNucltpXSA9PSBfX251bGwgICYmIGkgPCBubG5rOyArK2kpOyBzXy5sbmsgPSBpOyB9CgogIGJv
b2wgZW9zKCkgY29uc3QgeyByZXR1cm4gZW9zXzsgfQoKICB0YnhfR2VuZXJpY1NjYW48VCwgbmxu
az4qIGNsb25lKCkgY29uc3Q7CgogIFQmIG9wZXJhdG9yKysoaW50KTsKfTsKCnRlbXBsYXRlIDxj
bGFzcyBULCB1bnNpZ25lZCBubG5rPiAKVCYgdGJ4X0dlbmVyaWNTY2FuPFQsIG5sbms+OjpvcGVy
YXRvcisrKGludCkgewoKICBUJiB0bXAgPSBzXy5jbnItPnZhbHVlKCk7CgogIHdoaWxlICghZW9z
XyAmJiBzXy5sbmsgPT0gbmxuaykKICAgIGlmICghKGVvc18gPSBzdGFja18udXNlZCgpID09IDAp
KSB7CiAgICAgIHNfID0gc3RhY2tfLnBvcCgpOyArK3NfLmxuazsKICAgICAgd2hpbGUgKCgqc18u
Y25yKVtzXy5sbmtdID09IF9fbnVsbCAgJiYgc18ubG5rIDwgbmxuaykgKytzXy5sbms7CiAgICB9
CiAgaWYgKCFlb3NfKSB7CiAgICBzdGFja18ucHVzaChzXyk7IAogICAgc18uY25yID0gKCpzXy5j
bnIpW3NfLmxua107IHNfLmxuayA9IDA7CiAgICB3aGlsZSAoKCpzXy5jbnIpW3NfLmxua10gPT0g
X19udWxsICAmJiBzXy5sbmsgPCBubG5rKSArK3NfLmxuazsKICB9CgogIHJldHVybiB0bXA7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBULCB1bnNpZ25lZCBubG5rPiAKdGJ4X0dlbmVyaWNTY2FuPFQsIG5s
bms+KiB0YnhfR2VuZXJpY1NjYW48VCwgbmxuaz46OmNsb25lKCkgY29uc3QgewoKICByZXR1cm4g
bmV3IHRieF9HZW5lcmljU2NhbjxULCBubG5rPigqdGhpcyk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFz
cyBULCB1bnNpZ25lZCBubG5rPiAKY2xhc3MgdGJ4X1BHZW5lcmljU2NhbiA6IHB1YmxpYyB0Ynhf
U2NhbjxUPiB7CiAgc3RydWN0IFN0YXRlIHsgCiAgICB0YnhfQ29ubmVjdG9yPFQqLCBubG5rPiog
Y25yOyAKICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICBsbms7CiAgfTsKCiAgdGJ4X1N0YWNr
PFN0YXRlLCAxMDAgPiBzdGFja187CgogIFN0YXRlIHNfOwogIGJvb2wgIGVvc187CgogcHVibGlj
OgogIHRieF9QR2VuZXJpY1NjYW4odGJ4X0Nvbm5lY3RvcjxUKiwgbmxuaz4mIGNucikgeyBlb3Nf
ID0gZmFsc2U7IHNfLmNuciA9ICZjbnI7IAogICAgICAgICAgdW5zaWduZWQgaSA9IDA7IGZvciAo
OyBjbnJbaV0gPT0gX19udWxsICAmJiBpIDwgbmxuazsgKytpKTsgc18ubG5rID0gaTsgfQoKICBi
b29sIGVvcygpIGNvbnN0IHsgcmV0dXJuIGVvc187IH0KCiAgdGJ4X1BHZW5lcmljU2NhbjxULCBu
bG5rPiogY2xvbmUoKSBjb25zdDsKCiAgVCYgb3BlcmF0b3IrKyhpbnQpOwp9OwoKdGVtcGxhdGUg
PGNsYXNzIFQsIHVuc2lnbmVkIG5sbms+IApUJiB0YnhfUEdlbmVyaWNTY2FuPFQsIG5sbms+Ojpv
cGVyYXRvcisrKGludCkgewoKICBUKiB0bXAgPSBzXy5jbnItPnZhbHVlKCk7CgogIHdoaWxlICgh
ZW9zXyAmJiBzXy5sbmsgPT0gbmxuaykKICAgIGlmICghKGVvc18gPSBzdGFja18udXNlZCgpID09
IDApKSB7CiAgICAgIHNfID0gc3RhY2tfLnBvcCgpOyArK3NfLmxuazsKICAgICAgd2hpbGUgKCgq
c18uY25yKVtzXy5sbmtdID09IF9fbnVsbCAgJiYgc18ubG5rIDwgbmxuaykgKytzXy5sbms7CiAg
ICB9CiAgaWYgKCFlb3NfKSB7CiAgICBzdGFja18ucHVzaChzXyk7IAogICAgc18uY25yID0gKCpz
Xy5jbnIpW3NfLmxua107IHNfLmxuayA9IDA7CiAgICB3aGlsZSAoKCpzXy5jbnIpW3NfLmxua10g
PT0gX19udWxsICAmJiBzXy5sbmsgPCBubG5rKSArK3NfLmxuazsKICB9CgogIHJldHVybiAqdG1w
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgdW5zaWduZWQgbmxuaz4gCnRieF9QR2VuZXJpY1NjYW48
VCwgbmxuaz4qIHRieF9QR2VuZXJpY1NjYW48VCwgbmxuaz46OmNsb25lKCkgY29uc3QgewoKICBy
ZXR1cm4gbmV3IHRieF9QR2VuZXJpY1NjYW48VCwgbmxuaz4oKnRoaXMpOwp9CgogCgp0ZW1wbGF0
ZSA8Y2xhc3MgVD4KY2xhc3MgdGJ4X0xpc3RTY2FuIDogcHVibGljIHRieF9TY2FuPFQ+IHsKICB0
YnhfQ29ubmVjdG9yPFQsIDE+KiBoZWFkXzsgCiAgdGJ4X0Nvbm5lY3RvcjxULCAxPiogY3VycmVu
dF87CgogIGJvb2wgZW9zXzsKCiBwdWJsaWM6CiAgdGJ4X0xpc3RTY2FuKHRieF9Db25uZWN0b3I8
VCwgMT4mIGNucikgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVv
c18gPSBmYWxzZTsgaGVhZF8gPSBjdXJyZW50XyA9ICZjbnI7IH0KCiAgYm9vbCBlb3MoKSBjb25z
dCB7IHJldHVybiBlb3NfOyB9CgogIHRieF9MaXN0U2NhbjxUPiogY2xvbmUoKSBjb25zdDsKCiAg
VCYgb3BlcmF0b3IrKyhpbnQpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+IApUJiB0YnhfTGlzdFNj
YW48VD46Om9wZXJhdG9yKysoaW50KSB7CgogIFQmIHRtcCA9IGN1cnJlbnRfLT52YWx1ZSgpOwoK
ICBpZiAoIWVvc18pIHsKICAgIGN1cnJlbnRfID0gKCpjdXJyZW50XylbMF07CiAgICBpZiAoKGVv
c18gPSBjdXJyZW50XyA9PSBfX251bGwgKSkgY3VycmVudF8gPSBoZWFkXzsKICB9CgogIHJldHVy
biB0bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiAKdGJ4X0xpc3RTY2FuPFQ+KiB0YnhfTGlzdFNj
YW48VD46OmNsb25lKCkgY29uc3QgewoKICByZXR1cm4gbmV3IHRieF9MaXN0U2NhbjxUPigqdGhp
cyk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyB0YnhfUExpc3RTY2FuIDogcHVibGlj
IHRieF9TY2FuPFQ+IHsKICB0YnhfQ29ubmVjdG9yPFQqLCAxPiogaGVhZF87IAogIHRieF9Db25u
ZWN0b3I8VCosIDE+KiBjdXJyZW50XzsKCiAgYm9vbCBlb3NfOwoKIHB1YmxpYzoKICB0YnhfUExp
c3RTY2FuKHRieF9Db25uZWN0b3I8VCosIDE+JiBjbnIpIHsgCiAgICBlb3NfID0gZmFsc2U7IGhl
YWRfID0gY3VycmVudF8gPSAmY25yOwogIH0KCiAgYm9vbCBlb3MoKSBjb25zdCB7IHJldHVybiBl
b3NfOyB9CgogIHRieF9QTGlzdFNjYW48VD4qIGNsb25lKCkgY29uc3Q7CgogIFQmIG9wZXJhdG9y
KysoaW50KTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBUPiAKVCYgdGJ4X1BMaXN0U2NhbjxUPjo6b3Bl
cmF0b3IrKyhpbnQpIHsKCiAgVCogdG1wID0gY3VycmVudF8tPnZhbHVlKCk7CgogIGlmICghZW9z
XykgewogICAgY3VycmVudF8gPSAoKmN1cnJlbnRfKVswXTsKICAgIGlmICgoZW9zXyA9IGN1cnJl
bnRfID09IF9fbnVsbCApKSBjdXJyZW50XyA9IGhlYWRfOwogIH0KCiAgcmV0dXJuICp0bXA7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBUPiAKdGJ4X1BMaXN0U2NhbjxUPiogdGJ4X1BMaXN0U2NhbjxUPjo6
Y2xvbmUoKSBjb25zdCB7CgogIHJldHVybiBuZXcgdGJ4X1BMaXN0U2NhbjxUPigqdGhpcyk7Cn0K
CgojIDE3ICIuLi9mdW5jdGlvbi8uLi9zcGFjZS9zcGNFbGVtZW50LmgiIDIKCiAKCnR5cGVkZWYg
dWludCBzcGNfQkZuY0luZGV4OwoKIAoKIAoKdGVtcGxhdGU8Y2xhc3MgRj4KY2xhc3Mgc3BjX0Vs
ZW1lbnRNYXRyaXggewoKcHVibGljOgogICAKICBpbmxpbmUgc3BjX0VsZW1lbnRNYXRyaXgodWlu
dCBuID0gMCwgdWludCBtID0gMCk7CiAgaW5saW5lIH5zcGNfRWxlbWVudE1hdHJpeCgpOwoKICAg
CiAgc3BjX0VsZW1lbnRNYXRyaXg8Rj4mIG9wZXJhdG9yPShjb25zdCBzcGNfRWxlbWVudE1hdHJp
eDxGPiYgQSk7CgogICAKICBpbmxpbmUgRiBvcGVyYXRvcigpKHVpbnQgaSwgdWludCBqKSBjb25z
dDsKICBpbmxpbmUgRiYgb3BlcmF0b3IoKSh1aW50IGksIHVpbnQgaik7CgogIG9zdHJlYW0mIGlu
Zm8ob3N0cmVhbSYgb3MpIGNvbnN0OwoKICAgCiAgaW5saW5lIHVpbnQgbigpIGNvbnN0OwoKICAg
CiAgaW5saW5lIHVpbnQgbSgpIGNvbnN0OwoKICAgCgoKCgogIGlubGluZSB2b2lkIHJlc2l6ZSh1
aW50IG4sIHVpbnQgbSk7CgogICAKCgoKICBpbmxpbmUgYm9vbCB0cmFuc3Bvc2UoKTsKCiAgIAog
IGlubGluZSB2b2lkIHplcm9zKCk7Cgpwcml2YXRlOgogICAKICBzaXplX3Qgc3pfOwoKICAgCiAg
dWludCAgIG5fOwoKICAgCiAgdWludCAgIG1fOwoKICAgCiAgYm9vbCAgIHRfOwoKICAgCiAgRiog
ICAgIG1hdHJpeF87CgogICAKICBzcGNfRWxlbWVudE1hdHJpeChjb25zdCBzcGNfRWxlbWVudE1h
dHJpeCYpOwp9OwoKdGVtcGxhdGU8Y2xhc3MgRj4KaW5saW5lIHNwY19FbGVtZW50TWF0cml4PEY+
OjpzcGNfRWxlbWVudE1hdHJpeCh1aW50IG4sIHVpbnQgbSkgewogIG5fID0gbjsgbV8gPSBtOyBz
el8gPSBuICogbTsKICBtYXRyaXhfID0gKHN6XykgPyBuZXcgRltzel9dIDogX19udWxsIDsKICB0
XyA9IGZhbHNlOwp9CiAgICAKdGVtcGxhdGU8Y2xhc3MgRj4KaW5saW5lIHNwY19FbGVtZW50TWF0
cml4PEY+Ojp+c3BjX0VsZW1lbnRNYXRyaXgoKSB7CiAgZGVsZXRlW10gbWF0cml4XzsKfQoKdGVt
cGxhdGU8Y2xhc3MgRj4KaW5saW5lIEYgc3BjX0VsZW1lbnRNYXRyaXg8Rj46Om9wZXJhdG9yKCko
dWludCBpLCB1aW50IGopIGNvbnN0IHsKICByZXR1cm4gdF8gPyBtYXRyaXhfW2ogKiBtXyArIGld
IDogbWF0cml4X1tpICogbV8gKyBqXTsKfQoKdGVtcGxhdGU8Y2xhc3MgRj4KaW5saW5lIEYmIHNw
Y19FbGVtZW50TWF0cml4PEY+OjpvcGVyYXRvcigpKHVpbnQgaSwgdWludCBqKSB7CiAgcmV0dXJu
IHRfID8gbWF0cml4X1tqICogbV8gKyBpXSA6IG1hdHJpeF9baSAqIG1fICsgal07Cn0KCnRlbXBs
YXRlPGNsYXNzIEY+CmlubGluZSB1aW50IHNwY19FbGVtZW50TWF0cml4PEY+OjpuKCkgY29uc3Qg
ewogIHJldHVybiB0XyA/IG1fIDogbl87Cn0KCnRlbXBsYXRlPGNsYXNzIEY+CmlubGluZSB1aW50
IHNwY19FbGVtZW50TWF0cml4PEY+OjptKCkgY29uc3QgewogIHJldHVybiB0XyA/IG5fIDogbV87
Cn0KCnRlbXBsYXRlPGNsYXNzIEY+CmlubGluZSB2b2lkIHNwY19FbGVtZW50TWF0cml4PEY+Ojpy
ZXNpemUodWludCBuLCB1aW50IG0pIHsKICBzaXplX3Qgc3ogPSBuICogbTsKICBpZiAoc3pfIDwg
c3opIHsgZGVsZXRlW10gbWF0cml4XzsgbWF0cml4XyA9IG5ldyBGW3N6XyA9IHN6XTsgfQogIG5f
ID0gbjsgbV8gPSBtOyB0XyA9IGZhbHNlOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBGPgppbmxpbmUgYm9v
bCBzcGNfRWxlbWVudE1hdHJpeDxGPjo6dHJhbnNwb3NlKCkgewogIHJldHVybiB0XyBePSAxOyAK
fQoKdGVtcGxhdGU8Y2xhc3MgRj4KaW5saW5lIHZvaWQgc3BjX0VsZW1lbnRNYXRyaXg8Rj46Onpl
cm9zKCkgewogIEYqIG0gPSBtYXRyaXhfOwogIGZvcih1aW50IGkgPSBuXyAqIG1fOyBpOyAtLWkp
ICptKysgPSAwLjA7Cn0KCiAKCiMgMTgxICIuLi9mdW5jdGlvbi8uLi9zcGFjZS9zcGNFbGVtZW50
LmgiCgoKdGVtcGxhdGU8Y2xhc3MgRj4gCmNsYXNzIHNwY19UOwoKdGVtcGxhdGU8Y2xhc3MgRj4K
aW5saW5lIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsIGNvbnN0IHNwY19UPEY+JiBU
KSB7CiAgcmV0dXJuIFQuaW5mbyhvcyk7Cn0KCiAKCgoKCgoKdGVtcGxhdGU8Y2xhc3MgRj4gCmNs
YXNzIHNwY19UIHsKICBmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3I8PCA8PiAob3N0cmVhbSYgb3Ms
IGNvbnN0IHNwY19UPEY+JiBUKTsKCnB1YmxpYzoKICAgCgoKCiAgaW5saW5lIHNwY19UKHVpbnQg
bik7CiAgdmlydHVhbCB+c3BjX1QoKSB7fQoKICAgCgoKCgoKCgogIHZpcnR1YWwgdm9pZCBvcGVy
YXRvcigpKGNvbnN0IHNwY19FbGVtZW50TWF0cml4PEY+JiBBLCAKCQkJICBzcGNfRWxlbWVudE1h
dHJpeDxGPiYgQikgY29uc3QgPSAwOyAKCiAgdmlydHVhbCBzcGNfQkZuY0luZGV4IGluZGV4KHVp
bnQgaSkgY29uc3QgPSAwOwoKICAgCiAgdmlydHVhbCBvc3RyZWFtJiBpbmZvKG9zdHJlYW0mIG9z
KSBjb25zdCA9IDA7CgogICAKICBpbmxpbmUgdWludCBtKCkgY29uc3Q7CgogICAKICBpbmxpbmUg
dWludCBuKCkgY29uc3Q7CgogcHJvdGVjdGVkOgogICAKICB1aW50IG5fOwoKICAgCiAgdWludCBt
XzsKfTsKCnRlbXBsYXRlPGNsYXNzIEY+IAppbmxpbmUgc3BjX1Q8Rj46OnNwY19UKHVpbnQgbikg
ewogIG5fID0gbjsgbV8gPSAwOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBGPiAKaW5saW5lIHVpbnQgc3Bj
X1Q8Rj46Om4oKSBjb25zdCB7CiAgcmV0dXJuIG5fOwp9CiAgCnRlbXBsYXRlPGNsYXNzIEY+IApp
bmxpbmUgdWludCBzcGNfVDxGPjo6bSgpIGNvbnN0IHsKICByZXR1cm4gbV87Cn0KCgoKIAoKIAoK
dGVtcGxhdGU8Y2xhc3MgRj4gCmNsYXNzIHNwY19USW5kZXggOiBwdWJsaWMgc3BjX1Q8Rj4gewoK
cHVibGljOgogICAKCgoKCgogIGlubGluZSBzcGNfVEluZGV4KHVpbnQgbiwgdWludCBtLCBzcGNf
QkZuY0luZGV4IGlkeFtdKTsKICBpbmxpbmUgfnNwY19USW5kZXgoKTsKCiAgIAoKCgoKCgoKCgog
IGlubGluZSB2b2lkIG9wZXJhdG9yKCkoY29uc3Qgc3BjX0VsZW1lbnRNYXRyaXg8Rj4mIEEsIAoJ
CQkgc3BjX0VsZW1lbnRNYXRyaXg8Rj4mIEIpIGNvbnN0OyAKCiAgIAoKCiAgaW5saW5lIHNwY19C
Rm5jSW5kZXggaW5kZXgodWludCBpKSBjb25zdDsKICBpbmxpbmUgb3N0cmVhbSYgaW5mbyhvc3Ry
ZWFtJiBvcykgY29uc3Q7Cgpwcml2YXRlOgogIHNwY19CRm5jSW5kZXgqIGlkeF87Cn07Cgp0ZW1w
bGF0ZTxjbGFzcyBGPiAKaW5saW5lIHNwY19USW5kZXg8Rj46OnNwY19USW5kZXgodWludCBuLCB1
aW50IG0sIHNwY19CRm5jSW5kZXggaWR4W10pIAogIDogc3BjX1Q8Rj4obikgewogIG1fID0gbTsg
aWR4XyA9IG5ldyBzcGNfQkZuY0luZGV4W21dOwogIG1lbWNweShpZHhfLCBpZHgsIG0gKiBzaXpl
b2Yoc3BjX0JGbmNJbmRleCkpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBGPiAKaW5saW5lIHNwY19USW5k
ZXg8Rj46On5zcGNfVEluZGV4KCkgewogIGRlbGV0ZVtdIGlkeF87Cn0KCnRlbXBsYXRlPGNsYXNz
IEY+IAppbmxpbmUgdm9pZCBzcGNfVEluZGV4PEY+OjpvcGVyYXRvcigpKGNvbnN0IHNwY19FbGVt
ZW50TWF0cml4PEY+JiBBLCAKCQkJCSAgICAgIHNwY19FbGVtZW50TWF0cml4PEY+JiBCKSBjb25z
dCB7CiAgQiA9IEE7Cn0KICAKdGVtcGxhdGU8Y2xhc3MgRj4gCmlubGluZSBzcGNfQkZuY0luZGV4
IHNwY19USW5kZXg8Rj46OmluZGV4KHVpbnQgaSkgY29uc3QgewogIHJldHVybiBpZHhfW2ldOwp9
Cgp0ZW1wbGF0ZTxjbGFzcyBGPgppbmxpbmUgb3N0cmVhbSYgc3BjX1RJbmRleDxGPjo6aW5mbyhv
c3RyZWFtJiBvcykgY29uc3QgewoKICBvcyA8PCAiVEluZGV4KCIgPDwgbl8gPDwgIiwgIiA8PCBt
XyA8PCAiLCBbICI7CiAgZm9yICh1aW50IGkgPSAwOyBpIDwgbV87IGkrKykgb3MgPDwgaWR4X1tp
XSA8PCAnICc7CiAgcmV0dXJuIG9zIDw8ICJdKSI7Cn0KICAKIAoKdGVtcGxhdGU8Y2xhc3MgRj4K
Y2xhc3Mgc3BjX1RDb2x1bW47Cgp0ZW1wbGF0ZSA8Y2xhc3MgRj4Kb3N0cmVhbSYgb3BlcmF0b3I8
PChvc3RyZWFtJiBvcywgY29uc3Qgc3BjX1RDb2x1bW48Rj4mIFQpIHsKCiAgcmV0dXJuIFQuaW5m
byhvcyk7Cn0KCiAKCgoKCnRlbXBsYXRlPGNsYXNzIEY+CmNsYXNzIHNwY19UQ29sdW1uIHsKCiAg
ZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwgPEY+KG9zdHJlYW0mIG9zLCBjb25zdCBzcGNfVENv
bHVtbjxGPiYgVCk7CgpwdWJsaWM6CiAgIAoKCgoKCiAgaW5saW5lIHNwY19UQ29sdW1uKHVpbnQg
biwgc3BjX0JGbmNJbmRleCBpZHgsIHNwY19UQ29sdW1uPEY+KiBsbmsgPSBfX251bGwgKTsKICBp
bmxpbmUgfnNwY19UQ29sdW1uKCk7CgogICAKICBpbmxpbmUgY29uc3QgRiYgb3BlcmF0b3JbXSh1
aW50IGkpIGNvbnN0OwogIGlubGluZSBGJiBvcGVyYXRvcltdKHVpbnQgaSk7CgogICAKICBpbmxp
bmUgc3BjX0JGbmNJbmRleCBpbmRleCgpIGNvbnN0OwoKICBvc3RyZWFtJiBpbmZvKG9zdHJlYW0m
IG9zKSBjb25zdDsKCiAgIAogIGlubGluZSBzcGNfVENvbHVtbjxGPiogbGluaygpIGNvbnN0OwoK
ICAgCiAgaW5saW5lIHVpbnQgbigpIGNvbnN0OwoKcHJpdmF0ZTogCiAgIAogIHNwY19UQ29sdW1u
PEY+KiBsbmtfOwoKICAgCiAgdWludCAgICAgICAgICAgIG5fOwoKICAgCiAgc3BjX0JGbmNJbmRl
eCAgIGlkeF87CgogICAKICBGKiAgICAgICAgICAgICAgdmFsXzsKfTsKCnRlbXBsYXRlPGNsYXNz
IEY+CmlubGluZSBzcGNfVENvbHVtbjxGPjo6c3BjX1RDb2x1bW4odWludCBuLCBzcGNfQkZuY0lu
ZGV4IGlkeCwgCgkJCQkgICBzcGNfVENvbHVtbjxGPiogbG5rKSB7CiAgbl8gPSBuOyBsbmtfID0g
bG5rOyBpZHhfID0gaWR4OyB2YWxfID0gbmV3IEZbbl07IAogIG1lbXNldCh2YWxfLCAwLCBuICog
c2l6ZW9mKEYpKTsKfQoKdGVtcGxhdGU8Y2xhc3MgRj4KaW5saW5lIHNwY19UQ29sdW1uPEY+Ojp+
c3BjX1RDb2x1bW4oKSB7CiAgZGVsZXRlW10gdmFsXzsKfQoKdGVtcGxhdGU8Y2xhc3MgRj4KaW5s
aW5lIGNvbnN0IEYmIHNwY19UQ29sdW1uPEY+OjpvcGVyYXRvcltdKHVpbnQgaSkgY29uc3Qgewog
IHJldHVybiB2YWxfW2ldOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBGPgppbmxpbmUgRiYgc3BjX1RDb2x1
bW48Rj46Om9wZXJhdG9yW10odWludCBpKSB7CiAgcmV0dXJuIHZhbF9baV07Cn0KCnRlbXBsYXRl
PGNsYXNzIEY+CmlubGluZSBzcGNfQkZuY0luZGV4IHNwY19UQ29sdW1uPEY+OjppbmRleCgpIGNv
bnN0IHsKICByZXR1cm4gaWR4XzsKfQoKdGVtcGxhdGU8Y2xhc3MgRj4KaW5saW5lIHNwY19UQ29s
dW1uPEY+KiBzcGNfVENvbHVtbjxGPjo6bGluaygpIGNvbnN0IHsKICByZXR1cm4gbG5rXzsKfQoK
dGVtcGxhdGU8Y2xhc3MgRj4KaW5saW5lIHVpbnQgc3BjX1RDb2x1bW48Rj46Om4oKSBjb25zdCB7
CiAgcmV0dXJuIG5fOwp9CgogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKdGVtcGxhdGU8Y2xhc3Mg
Rj4KY2xhc3Mgc3BjX1RNYXRyaXggOiBwdWJsaWMgc3BjX1Q8Rj4geyAKCnB1YmxpYzoKICAgCiAg
c3RydWN0IENvbnRyb2wgewogICAgIAogICAgdWludCBpZHg7CiAgICAgCiAgICB1aW50IHN6Owog
IH07CgogICAKICBzdHJ1Y3QgRGF0YSB7CiAgICAgCiAgICB1aW50IGlkeDsKICAgICAKICAgIEYg
ICAgZGF0YTsKICB9OwoKICAgCgoKCgogIHNwY19UTWF0cml4KHNwY19UQ29sdW1uPEY+KiBUKTsK
ICBpbmxpbmUgfnNwY19UTWF0cml4KCk7CgogICAKCgoKCgoKCgoKCgoKCgogIHZvaWQgb3BlcmF0
b3IoKShjb25zdCBzcGNfRWxlbWVudE1hdHJpeDxGPiYgQSwgCgkJICBzcGNfRWxlbWVudE1hdHJp
eDxGPiYgQikgY29uc3Q7IAoKICAgCiAgIAoKICAgCiAgaW5saW5lIHNwY19CRm5jSW5kZXggaW5k
ZXgodWludCBpKSBjb25zdDsKCiAgb3N0cmVhbSYgaW5mbyhvc3RyZWFtJiBvcykgY29uc3Q7Cgog
ICAKCgoKCgoKICB2b2lkIGFwcGVuZChzcGNfVENvbHVtbjxGPiogVCk7CgogICAKICBpbmxpbmUg
c3BjX1RNYXRyaXg6OkNvbnRyb2wgKmNvbnRyb2wodWludCBpKSBjb25zdCB7IHJldHVybiAmY3Ry
bF9baV07IH07CgogICAKICBpbmxpbmUgc3BjX1RNYXRyaXg6OkRhdGEgKmRhdGEodWludCBpKSBj
b25zdCB7IHJldHVybiAmZGF0YV9baV07IH07Cgpwcml2YXRlOgogICAKICBDb250cm9sICpjdHJs
XzsKCiAgIAogIERhdGEgICAgKmRhdGFfOwoKICAgCiAgdWludCAgICBzel87Cn07Cgp0ZW1wbGF0
ZTxjbGFzcyBGPiAKaW5saW5lIHNwY19UTWF0cml4PEY+Ojp+c3BjX1RNYXRyaXgoKSB7CiAgZGVs
ZXRlW10gZGF0YV87CiAgZGVsZXRlW10gY3RybF87Cn0KICAKdGVtcGxhdGU8Y2xhc3MgRj4gCmlu
bGluZSBzcGNfQkZuY0luZGV4IHNwY19UTWF0cml4PEY+OjppbmRleCh1aW50IGkpIGNvbnN0IHsK
ICByZXR1cm4gY3RybF9baV0uaWR4Owp9CgogCgojIDU3NSAiLi4vZnVuY3Rpb24vLi4vc3BhY2Uv
c3BjRWxlbWVudC5oIgoKCnRlbXBsYXRlPGNsYXNzIEY+CmNsYXNzIHNwY19FbGVtZW50OwoKdGVt
cGxhdGU8Y2xhc3MgRj4KaW5saW5lIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsIGNv
bnN0IHNwY19FbGVtZW50PEY+JiBlbG0pIHsgCiAgcmV0dXJuIGVsbS5pbmZvKG9zKTsgCn0KCiAK
CnRlbXBsYXRlPGNsYXNzIEY+CmNsYXNzIHNwY19FbGVtZW50IHsKICBmcmllbmQgb3N0cmVhbSYg
b3BlcmF0b3I8PCA8PiAob3N0cmVhbSYgb3MsIGNvbnN0IHNwY19FbGVtZW50PEY+JiBlbG0pOwoK
cHVibGljOgogIGlubGluZSBzcGNfRWxlbWVudCgpOwogIHZpcnR1YWwgfnNwY19FbGVtZW50KCkg
e30KCiAgIAogIHZpcnR1YWwgb3N0cmVhbSYgaW5mbyhvc3RyZWFtJiBvcykgY29uc3QgPSAwOwog
IHZpcnR1YWwgY29uc3Qgc3BjX1Q8Rj4mIFQoKSBjb25zdCA9IDA7CgogICAKICB1aW50JiB0YWco
KTsKCnByaXZhdGU6CiAgIAogIHVpbnQgdGFnXzsKfTsKCnRlbXBsYXRlPGNsYXNzIEY+CmlubGlu
ZSBzcGNfRWxlbWVudDxGPjo6c3BjX0VsZW1lbnQoKSB7CiAgdGFnXyA9IDA7Cn0KCnRlbXBsYXRl
PGNsYXNzIEY+CmlubGluZSB1aW50JiBzcGNfRWxlbWVudDxGPjo6dGFnKCkgewogIHJldHVybiB0
YWdfOwp9CgoKCiAKCnR5cGVkZWYgdm9pZCAoKnNwY19TTWF0cml4KShjb25zdCBzcGNfVENvbHVt
bjxyZWFsPiYsIHNwY19UQ29sdW1uPHJlYWw+JiwgdWludCk7CgogCgoKCmNsYXNzIHNwY19EaXJh
YzNkMDAwIDogcHVibGljIHNwY19FbGVtZW50PHJlYWw+IHsKCnB1YmxpYzoKICBzcGNfRGlyYWMz
ZDAwMChjb25zdCBnZW9fVHJpYW5nbGUzZCYgY2VsbCwgc3BjX0JGbmNJbmRleCBpZHhbXSwgCgkJ
IHVpbnQgdnR4W10sIHVpbnQgbik7CiAgb3N0cmVhbSYgaW5mbyhvc3RyZWFtJiBvcykgY29uc3Q7
CiAgaW5saW5lIGNvbnN0IHNwY19UPHJlYWw+JiBUKCkgY29uc3Q7CgogIGlubGluZSBjb25zdCBn
ZW9fVmVydGV4JiBzdXBwb3J0KHVpbnQgaSkgY29uc3Q7CiAgaW5saW5lIGNvbnN0IFJlYWwzZCYg
dmVydGV4KHVpbnQgaSkgY29uc3Q7Cgpwcml2YXRlOgogIGNvbnN0IGdlb19UcmlhbmdsZTNkJiBj
ZWxsXzsKICB1Y2hhciAgICAgICAgICAgICAgICAgY3RybF87ICAKICBzcGNfVEluZGV4PHJlYWw+
ICAgICAgVF87CiAgUmVhbDNkICAgICAgICAgICAgICAgIHZfWzNdOwp9OwoKaW5saW5lIGNvbnN0
IHNwY19UPHJlYWw+JiBzcGNfRGlyYWMzZDAwMDo6VCgpIGNvbnN0IHsgCiAgcmV0dXJuIFRfOyAK
fQoKaW5saW5lIGNvbnN0IGdlb19WZXJ0ZXgmIHNwY19EaXJhYzNkMDAwOjpzdXBwb3J0KHVpbnQg
aSkgY29uc3QgewoKICB1aW50IGogPSBjdHJsXyA+PiAoaSA8PCAxKTsKICByZXR1cm4gKmNlbGxf
LmNvbm5lY3RvcigpLnZlcnRleChqICYgMyk7Cn0KCmlubGluZSBjb25zdCBSZWFsM2QmIHNwY19E
aXJhYzNkMDAwOjp2ZXJ0ZXgodWludCBpKSBjb25zdCB7CiAgcmV0dXJuIHZfW2ldOwp9CgojIDY5
NyAiLi4vZnVuY3Rpb24vLi4vc3BhY2Uvc3BjRWxlbWVudC5oIgoKCiAKCiAKCgoKY2xhc3Mgc3Bj
X0xpbmVhcjJkMDAwIDogcHVibGljIHNwY19FbGVtZW50PHJlYWw+IHsKCnB1YmxpYzoKICAgCgoK
CgoKCgogIGlubGluZSBzcGNfTGluZWFyMmQwMDAoY29uc3QgZ2VvX1RyaWFuZ2xlMmQmIGNlbGws
IHNwY19CRm5jSW5kZXggaWR4W10pOwoKICBvc3RyZWFtJiBpbmZvKG9zdHJlYW0mIG9zKSBjb25z
dDsKICBpbmxpbmUgY29uc3Qgc3BjX1Q8cmVhbD4mIFQoKSBjb25zdDsKCiAgIAogIGlubGluZSBj
b25zdCBnZW9fVHJpYW5nbGUmIHN1cHBvcnQoKSBjb25zdDsKCiAgIAogIFJlYWwyZCB2ZXJ0ZXgo
dWludCBpKSBjb25zdDsKCnByaXZhdGU6CiAgIAogIGNvbnN0IGdlb19UcmlhbmdsZTJkJiBjZWxs
XzsKCiAgIAogIHNwY19USW5kZXg8cmVhbD4gVF87Cn07CgppbmxpbmUgc3BjX0xpbmVhcjJkMDAw
OjpzcGNfTGluZWFyMmQwMDAoY29uc3QgZ2VvX1RyaWFuZ2xlMmQmIGNlbGwsIAoJCQkJCXNwY19C
Rm5jSW5kZXggaWR4W10pIDogCiAgY2VsbF8oY2VsbCksIFRfKDMsIDMsIGlkeCkgeyAKfQoKaW5s
aW5lIGNvbnN0IHNwY19UPHJlYWw+JiBzcGNfTGluZWFyMmQwMDA6OlQoKSBjb25zdCB7IAogIHJl
dHVybiBUXzsgCn0KCmlubGluZSBjb25zdCBnZW9fVHJpYW5nbGUmIHNwY19MaW5lYXIyZDAwMDo6
c3VwcG9ydCgpIGNvbnN0IHsKICByZXR1cm4gY2VsbF8uY29ubmVjdG9yKCk7Cn0KCiAKCgoKY2xh
c3Mgc3BjX0xpbmVhcjNkMDAwIDogcHVibGljIHNwY19FbGVtZW50PHJlYWw+IHsKCnB1YmxpYzoK
ICBzcGNfTGluZWFyM2QwMDAoY29uc3QgZ2VvX1RyaWFuZ2xlM2QmIGNlbGwsIHNwY19CRm5jSW5k
ZXggaWR4W10pOwoKICBvc3RyZWFtJiBpbmZvKG9zdHJlYW0mIG9zKSBjb25zdDsKICBpbmxpbmUg
Y29uc3Qgc3BjX1Q8cmVhbD4mIFQoKSBjb25zdDsKCiAgaW5saW5lIGNvbnN0IFVuaXQzZCYgbigp
IGNvbnN0OwogIGlubGluZSBjb25zdCBnZW9fVHJpYW5nbGUmIHN1cHBvcnQoKSBjb25zdDsKICBp
bmxpbmUgY29uc3QgUmVhbDNkJiB2ZXJ0ZXgodWludCBpKSBjb25zdDsKCnByaXZhdGU6CiAgY29u
c3QgZ2VvX1RyaWFuZ2xlM2QmIGNlbGxfOwogIHNwY19USW5kZXg8cmVhbD4gVF87CgogIFJlYWwz
ZCB2X1szXTsKICBVbml0M2Qgbl87Cn07CgppbmxpbmUgY29uc3Qgc3BjX1Q8cmVhbD4mIHNwY19M
aW5lYXIzZDAwMDo6VCgpIGNvbnN0IHsgCiAgcmV0dXJuIFRfOyAKfQoKaW5saW5lIGNvbnN0IFVu
aXQzZCYgc3BjX0xpbmVhcjNkMDAwOjpuKCkgY29uc3QgeyAKICByZXR1cm4gbl87IAp9Cgppbmxp
bmUgY29uc3QgZ2VvX1RyaWFuZ2xlJiBzcGNfTGluZWFyM2QwMDA6OnN1cHBvcnQoKSBjb25zdCB7
CiAgcmV0dXJuIGNlbGxfLmNvbm5lY3RvcigpOwp9CgppbmxpbmUgY29uc3QgUmVhbDNkJiBzcGNf
TGluZWFyM2QwMDA6OnZlcnRleCh1aW50IGkpIGNvbnN0IHsKICByZXR1cm4gdl9baV07Cn0KCiMg
ODIxICIuLi9mdW5jdGlvbi8uLi9zcGFjZS9zcGNFbGVtZW50LmgiCgoKIAoKIAoKCgpjbGFzcyBz
cGNfTGluZWFyM2QwMDEgOiBwdWJsaWMgc3BjX0VsZW1lbnQ8cmVhbD4gewoKcHVibGljOgogICAK
CgoKCiAgc3BjX0xpbmVhcjNkMDAxKGNvbnN0IGdlb19UZXRyYWhlZHJvbjNkJiBjZWxsLCBzcGNf
QkZuY0luZGV4IGlkeFtdKTsKCiAgIAogIG9zdHJlYW0mIGluZm8ob3N0cmVhbSYgb3MpIGNvbnN0
OwoKICAgCiAgaW5saW5lIGNvbnN0IHNwY19UPHJlYWw+JiBUKCkgY29uc3QgeyByZXR1cm4gVF87
IH0KCiAgIAogIGlubGluZSBjb25zdCBnZW9fVGV0cmFoZWRyb24mIHN1cHBvcnQoKSBjb25zdCB7
IHJldHVybiBjZWxsXy5jb25uZWN0b3IoKTsgfQoKICAgCiAgaW5saW5lIGNvbnN0IGdlb19DZWxs
MyYgY2VsbCgpIGNvbnN0IHsgcmV0dXJuIGNlbGxfOyB9CgogICAKICBpbmxpbmUgY29uc3QgUmVh
bDNkIHZlcnRleCh1aW50IGkpIGNvbnN0IHsgcmV0dXJuIGNlbGxfLnZlcnRleChpKTsgfQoKcHJp
dmF0ZToKICAgCiAgY29uc3QgZ2VvX1RldHJhaGVkcm9uM2QmIGNlbGxfOwoKICAgCiAgc3BjX1RJ
bmRleDxyZWFsPiBUXzsKfTsKCiAKCgoKY2xhc3Mgc3BjX0NvbnN0YW50M2QwMDAgOiBwdWJsaWMg
c3BjX0VsZW1lbnQ8cmVhbD4gewoKICBjb25zdCBnZW9fVHJpYW5nbGUzZCYgY2VsbF87CiAgc3Bj
X1RJbmRleDxyZWFsPiBUXzsKCiAgVW5pdDNkIG5fOwogIFJlYWwzZCB2X1szXTsKCnB1YmxpYzoK
ICBzcGNfQ29uc3RhbnQzZDAwMChjb25zdCBnZW9fVHJpYW5nbGUzZCYgY2VsbCwgc3BjX0JGbmNJ
bmRleCBpZHgpOwoKICBvc3RyZWFtJiBpbmZvKG9zdHJlYW0mIG9zKSBjb25zdDsKICBpbmxpbmUg
Y29uc3Qgc3BjX1Q8cmVhbD4mIFQoKSBjb25zdDsKCiAgaW5saW5lIGNvbnN0IFVuaXQzZCYgbigp
IGNvbnN0OwogIGlubGluZSBjb25zdCBnZW9fVHJpYW5nbGUmIHN1cHBvcnQoKSBjb25zdDsKICBp
bmxpbmUgY29uc3QgUmVhbDNkJiB2ZXJ0ZXgodWludCBpKSBjb25zdDsKfTsKCmlubGluZSBjb25z
dCBzcGNfVDxyZWFsPiYgc3BjX0NvbnN0YW50M2QwMDA6OlQoKSBjb25zdCB7IAogIHJldHVybiBU
XzsgCn0KCmlubGluZSBjb25zdCBVbml0M2QmIHNwY19Db25zdGFudDNkMDAwOjpuKCkgY29uc3Qg
eyAKICByZXR1cm4gbl87IAp9CgppbmxpbmUgY29uc3QgZ2VvX1RyaWFuZ2xlJiBzcGNfQ29uc3Rh
bnQzZDAwMDo6c3VwcG9ydCgpIGNvbnN0IHsKICByZXR1cm4gY2VsbF8uY29ubmVjdG9yKCk7Cn0K
CmlubGluZSBjb25zdCBSZWFsM2QmIHNwY19Db25zdGFudDNkMDAwOjp2ZXJ0ZXgodWludCBpKSBj
b25zdCB7CiAgcmV0dXJuIHZfW2ldOwp9CgojIDkzMyAiLi4vZnVuY3Rpb24vLi4vc3BhY2Uvc3Bj
RWxlbWVudC5oIgoKCiAKCiMgMSAiLi4vZnVuY3Rpb24vLi4vc3BhY2Uvc3BjRWxlbWVudC50IiAx
CiAKCgoKCgoKICAjcHJhZ21hIGltcGxlbWVudGF0aW9uCgoKCgogCgp0ZW1wbGF0ZTxjbGFzcyBG
PgpzcGNfRWxlbWVudE1hdHJpeDxGPiYgc3BjX0VsZW1lbnRNYXRyaXg8Rj46Om9wZXJhdG9yPSgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Bj
X0VsZW1lbnRNYXRyaXg8Rj4mIEEpIHsKICB1aW50IHN6ID0gQS5uXyAqIEEubV87CgogIGlmIChz
el8gPCBzeikgewogICAgZGVsZXRlW10gbWF0cml4XzsgbWF0cml4XyA9IG5ldyBGW3N6XyA9IHN6
XTsKICB9CgogIG1lbWNweShtYXRyaXhfLCBBLm1hdHJpeF8sIHN6ICogc2l6ZW9mKEYpKTsKICBu
XyA9IEEubl87IG1fID0gQS5tXzsgdF8gPSBBLnRfOwoKICByZXR1cm4gKnRoaXM7Cn0KICAgIAp0
ZW1wbGF0ZTxjbGFzcyBGPgpvc3RyZWFtJiBzcGNfRWxlbWVudE1hdHJpeDxGPjo6aW5mbyhvc3Ry
ZWFtJiBvcykgY29uc3QgewoKICBvcyA8PCAiRWxlbWVudE1hdHJpeChuID0gIiA8PCBuXyA8PCAi
LCBtID0gIiA8PCBtXyA8PCAiLCBtYXRyaXggPSBbIjsKICBpZiAobl8gKiBtXyA+IDApIHsKICAg
IGZvciAodWludCBpID0gMDsgaSA8IG5fOyArK2kpIHsKICAgICAgb3MgPDwgIlxuWyI7CiAgICAg
IGZvciAodWludCBqID0gMDsgaiA8IG1fIC0gMTsgKytqKSAKCW9zIDw8IG9wZXJhdG9yKCkoaSwg
aikgPDwgIiAiOwogICAgICBvcyA8PCBvcGVyYXRvcigpKGksIG1fIC0gMSkgPDwgJ10nOwogICAg
fQogICAgb3MgPDwgJ1xuJzsKICB9CiAgcmV0dXJuIG9zIDw8ICJdKSI7Cn0KICAgIAogCgp0ZW1w
bGF0ZTxjbGFzcyBGPgpvc3RyZWFtJiBzcGNfVENvbHVtbjxGPjo6aW5mbyhvc3RyZWFtJiBvcykg
Y29uc3QgewoKICBvcyA8PCAiVENvbHVtbihuID0gIiA8PCBuXyA8PCAiLCBpZHggPSAiIDw8IGlk
eF8gPDwgIiwgdmFsID0gWyI7CgogIGlmIChuXyA+IDApIHsKICAgIGZvciAodWludCBpID0gMDsg
aSA8IG5fIC0gMTsgKytpKSBvcyA8PCB2YWxfW2ldIDw8ICIsICI7CiAgICBvcyA8PCB2YWxfW25f
IC0gMV07CiAgfQoKICByZXR1cm4gb3MgPDwgIl0pIjsKfQoKIAoKdGVtcGxhdGU8Y2xhc3MgRj4K
c3BjX1RNYXRyaXg8Rj46OnNwY19UTWF0cml4KHNwY19UQ29sdW1uPEY+KiBUKSA6IHNwY19UPEY+
KDApIHsKCiAgbV8gPSAwOyBjdHJsXyA9IF9fbnVsbCA7IGRhdGFfID0gX19udWxsIDsgc3pfID0g
MDsKICBhcHBlbmQoVCk7Cn0KCnRlbXBsYXRlPGNsYXNzIEY+CnZvaWQgc3BjX1RNYXRyaXg8Rj46
Om9wZXJhdG9yKCkoY29uc3Qgc3BjX0VsZW1lbnRNYXRyaXg8Rj4mIEEsIAoJCQkgICAgICAgICAg
ICAgICAgICAgICAgICBzcGNfRWxlbWVudE1hdHJpeDxGPiYgQikgY29uc3QgeyAKICB1aW50IG4g
PSBBLm4oKTsKCiAgQi5yZXNpemUobiwgbV8pOwogIAogIERhdGEqIGRiID0gZGF0YV87CiAgZm9y
KHVpbnQgaiA9IDA7IGogPCBtXzsgKytqKSB7CiAgICBEYXRhKiBkZSA9IGRiICsgY3RybF9bal0u
c3o7CgogICAgZm9yKHVpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgRiBzID0gMC4wOwog
ICAgICBmb3IoRGF0YSogZCA9IGRiOyBkIDwgZGU7ICsrZCkgcyArPSBBKGksIGQtPmlkeCkgKiBk
LT5kYXRhOwogICAgICBCKGksIGopID0gczsKICAgIH0KCiAgICBkYiA9IGRlOwogIH0KfQoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCnRlbXBsYXRlPGNsYXNzIEY+Cm9zdHJlYW0mIHNwY19UTWF0
cml4PEY+OjppbmZvKG9zdHJlYW0mIG9zKSBjb25zdCB7CgogIG9zIDw8ICJUTWF0cml4KCIgPDwg
bl8gPDwgIiwgIiA8PCBtXyA8PCAiLCBjdHJsID0gWyI7CiAgaWYgKG1fID4gMCkgewogICAgQ29u
dHJvbCogYyA9IGN0cmxfOwogICAgRGF0YSogZCA9IGRhdGFfOwoKICAgIGZvciAodWludCBpID0g
MDsgaSA8IG1fIC0gMTsgKytpLCArK2MpIAogICAgICBvcyA8PCAnKCcgPDwgYy0+aWR4IDw8ICcs
JyA8PCBjLT5zeiA8PCAiKSwgIjsKICAgIG9zIDw8ICcoJyA8PCBjLT5pZHggPDwgJywnIDw8IGMt
PnN6IDw8ICcpJzsKICAgIG9zIDw8ICJdLCBkYXRhID0gWyI7CiAgICBmb3IgKHVpbnQgaiA9IDA7
IGogPCBtXyAtIDE7ICsraiwgKytkKSB7CiAgICAgIGZvciAodWludCBrID0gMDsgayA8IGN0cmxf
W2pdLnN6IC0gMTsgKytrLCArK2QpCglvcyA8PCAnKCcgPDwgZC0+aWR4IDw8ICcsJyA8PCBkLT5k
YXRhIDw8ICIpLCAiOwogICAgICBvcyA8PCAnKCcgPDwgZC0+aWR4IDw8ICcsJyA8PCBkLT5kYXRh
IDw8ICIpIHwgIjsKICAgIH0KICAgIGZvciAodWludCBrID0gMDsgayA8IGN0cmxfW21fLTFdLnN6
IC0gMTsgKytrLCArK2QpCiAgICAgIG9zIDw8ICcoJyA8PCBkLT5pZHggPDwgJywnIDw8IGQtPmRh
dGEgPDwgIiksICI7CiAgICBvcyA8PCAnKCcgPDwgZC0+aWR4IDw8ICcsJyA8PCBkLT5kYXRhIDw8
ICcpJzsKICB9IGVsc2UgCiAgICBvcyA8PCAiXSwgZGF0YSA9IFsiOwoKICByZXR1cm4gb3MgPDwg
Il0pIjsKfQoKdGVtcGxhdGU8Y2xhc3MgRj4Kdm9pZCBzcGNfVE1hdHJpeDxGPjo6YXBwZW5kKHNw
Y19UQ29sdW1uPEY+KiBUKSB7CiAKICB1aW50IG0gPSAwOwogIHVpbnQgc3ogPSAwOwogIHVpbnQg
bm1heCA9IG5fOwoKICBmb3IgKHNwY19UQ29sdW1uPEY+KiBUVCA9IFQ7IFRUICE9IF9fbnVsbCA7
IFRUID0gVFQtPmxpbmsoKSkgewogICAgaWYgKG5tYXggPCBUVC0+bigpKSBubWF4ID0gVFQtPm4o
KTsKICAgIGZvciAodWludCBpID0gVFQtPm4oKTsgaS0tOykgaWYgKCgqVFQpW2ldICE9IDAuMCkg
KytzejsgCiAgICArK207CiAgfQogIG5fID0gbm1heDsKCiAgbSArPSBtXzsKICBDb250cm9sKiBj
ID0gbmV3IENvbnRyb2xbbV07CiAgaWYgKG1fID4gMCkgewogICAgbWVtY3B5KGMsIGN0cmxfLCBt
XyAqIHNpemVvZihDb250cm9sKSk7CiAgICBkZWxldGVbXSBjdHJsXzsKICB9CiAgY3RybF8gPSBj
OyBjICs9IG1fOyBtXyA9IG07CgogIHN6ICs9IHN6XzsKICBEYXRhKiBkID0gbmV3IERhdGFbc3pd
OwogIGlmIChzel8gPiAwKSB7CiAgICBtZW1jcHkoZCwgZGF0YV8sIHN6XyAqIHNpemVvZihEYXRh
KSk7CiAgICBkZWxldGVbXSBkYXRhXzsgCiAgfSAKICBkYXRhXyA9IGQ7IGQgKz0gc3pfOyBzel8g
PSBzejsKCiAgZm9yIChzcGNfVENvbHVtbjxGPiogVFQgPSBUOyBUVCAhPSBfX251bGwgOyBUVCA9
IFRULT5saW5rKCkpIHsKICAgIGMtPmlkeCA9IFRULT5pbmRleCgpOyBjLT5zeiA9IDA7CgogICAg
Zm9yICh1aW50IGkgPSBUVC0+bigpOyBpLS07KSAKICAgICAgaWYgKCgqVFQpW2ldICE9IDAuMCkg
ewoJZC0+aWR4ID0gaTsgZC0+ZGF0YSA9ICgqVFQpW2ldOyArK2Q7IAoJKytjLT5zejsKICAgICAg
fQoKICAgICsrYzsKICB9Cn0KCgoKCgoKCgoKCgojIDkzNyAiLi4vZnVuY3Rpb24vLi4vc3BhY2Uv
c3BjRWxlbWVudC5oIiAyCgoKCiMgMTYgIi4uL2Z1bmN0aW9uL2ZuY0Z1bmN0aW9uLmgiIDIKCiMg
MSAiLi4vZnVuY3Rpb24vLi4vc3BhY2Uvc3BjU3BhY2UuaCIgMQogCgoKCgoKCgogICNwcmFnbWEg
aW50ZXJmYWNlCgoKCgoKIyAxICIuLi9mdW5jdGlvbi8uLi9zcGFjZS8uLi9nZW9tZXRyeS9nZW9N
ZXNoLmgiIDEKIAoKCgoKCgoKCgoKCgoKCiAKCmNsYXNzIHRieF9TY2FuPGdlb19DZWxsMj4gOiBw
dWJsaWMgdGJ4X1NjYW48Z2VvX0NlbGw+IHsKIHB1YmxpYzoKICBnZW9fQ2VsbDImIG9wZXJhdG9y
KysoaW50KSA9IDA7Cn07CgpjbGFzcyB0YnhfU2NhbjxnZW9fQ2VsbDM+IDogcHVibGljIHRieF9T
Y2FuPGdlb19DZWxsPiB7CiBwdWJsaWM6CiAgZ2VvX0NlbGwzJiBvcGVyYXRvcisrKGludCkgPSAw
Owp9OwoKdHlwZWRlZiB0YnhfU2NhbjxnZW9fQ2VsbD4gZ2VvX1NjYW47CgogCnR5cGVkZWYgdGJ4
X1NjYW48Z2VvX0NlbGwyPiBnZW9fU2NhbjI7CgogCnR5cGVkZWYgdGJ4X1NjYW48Z2VvX0NlbGwz
PiBnZW9fU2NhbjM7CgoKIAoKIAoKCgoKCmNsYXNzIGdlb19NZXNoIHsKCiBwdWJsaWM6CiAgdmly
dHVhbCB1aW50IG5jZWxsKCkgY29uc3QgPSAwOyAgCiAgdmlydHVhbCBnZW9fU2Nhbiogc2Nhbigp
ID0gMDsKfTsKCiAKCiAKCmNsYXNzIGdlb19NZXNoMiA6IHB1YmxpYyBnZW9fTWVzaCB7CgogcHVi
bGljOgogIGdlb19TY2FuMiogc2NhbigpID0gMDsKfTsKCiAKCiAKCmNsYXNzIGdlb19NZXNoMyA6
IHB1YmxpYyBnZW9fTWVzaCB7CgogcHVibGljOgogIGdlb19TY2FuMyogc2NhbigpID0gMDsKfTsK
CiAKCiAKCmNsYXNzIGdlb19CYWxsIDogcHVibGljIGdlb19NZXNoMiB7CiAgCiAgY2xhc3MgUyA6
IHB1YmxpYyBnZW9fU2NhbjIgewoKICAgIHVpbnQgICAgICAgICAgIGlkeF87CiAgICBnZW9fVHJp
YW5nbGUzZCAqKCZjZWxsXylbOF07CgogICBwdWJsaWM6CiAgICBpbmxpbmUgUyhnZW9fVHJpYW5n
bGUzZCAqKCZjZWxsKVs4XSk7IAogICAgaW5saW5lIFMoY29uc3QgUyAmc2Nhbik7IAogICAgCiAg
ICBpbmxpbmUgYm9vbCBlb3MoKSBjb25zdDsKICAgIGlubGluZSBnZW9fQ2VsbDImIG9wZXJhdG9y
KysoaW50KTsKCiAgICBpbmxpbmUgZ2VvX1NjYW4yKiBjbG9uZSgpIGNvbnN0OwogIH07CgogIGdl
b19WZXJ0ZXggICAgKnZ0eF9bNl07CiAgZ2VvX0VkZ2UgICAgICAqZWRnX1sxMl07CiAgZ2VvX1Ry
aWFuZ2xlICAqdHJpX1s4XTsKCiAgZ2VvX1RyaWFuZ2xlM2QgKmNlbGxfWzhdOwoKIHB1YmxpYzoK
ICBnZW9fQmFsbCgpOwogIHZpcnR1YWwgfmdlb19CYWxsKCk7CgogIGlubGluZSB1aW50IG5jZWxs
KCkgY29uc3Q7CiAgaW5saW5lIGdlb19TY2FuMiogc2NhbigpOwp9OwoKaW5saW5lIGdlb19CYWxs
OjpTOjpTKGdlb19UcmlhbmdsZTNkICooJmNlbGwpWzhdKSA6IGlkeF8oMCksIGNlbGxfKGNlbGwp
IHsKfQoKaW5saW5lIGdlb19CYWxsOjpTOjpTKGNvbnN0IFMmIHNjYW4pIDogaWR4XyhzY2FuLmlk
eF8pLCAgY2VsbF8oc2Nhbi5jZWxsXykgewp9CgppbmxpbmUgYm9vbCBnZW9fQmFsbDo6Uzo6ZW9z
KCkgY29uc3QgewogIHJldHVybiBpZHhfID09IDg7Cn0KCmlubGluZSBnZW9fQ2VsbDImIGdlb19C
YWxsOjpTOjpvcGVyYXRvcisrKGludCkgewogIHJldHVybiAqY2VsbF9baWR4XysrXTsKfQoKaW5s
aW5lIGdlb19TY2FuMiogZ2VvX0JhbGw6OlM6OmNsb25lKCkgY29uc3QgewogIHJldHVybiBuZXcg
UygqdGhpcyk7Cn0KCmlubGluZSB1aW50IGdlb19CYWxsOjpuY2VsbCgpIGNvbnN0IHsKICByZXR1
cm4gODsKfQoKaW5saW5lIGdlb19TY2FuMiogZ2VvX0JhbGw6OnNjYW4oKSB7CiAgcmV0dXJuIG5l
dyBTKGNlbGxfKTsKfQoKIAoKIAoKCgpjbGFzcyBnZW9fRGlzayA6IHB1YmxpYyBnZW9fTWVzaDIg
ewogIAogICAKCgogIGNsYXNzIFMgOiBwdWJsaWMgdGJ4X1NjYW48Z2VvX0NlbGwyPiB7CgogICAg
IAogICAgdWludCAgICAgICAgICAgaWR4XzsKCiAgICAgCiAgICBnZW9fVHJpYW5nbGUyZCAqKCZj
ZWxsXylbNF07CgogICBwdWJsaWM6CiAgICAgCgoKICAgIGlubGluZSBTKGdlb19UcmlhbmdsZTJk
ICooJmNlbGwpWzRdKTsgCgogICAgIAogICAgaW5saW5lIFMoY29uc3QgUyYgc2Nhbik7IAogICAg
CiAgICAgCgoKICAgIGlubGluZSBib29sIGVvcygpIGNvbnN0OwoKICAgICAKCgogICAgaW5saW5l
IGdlb19DZWxsMiYgb3BlcmF0b3IrKyhpbnQpOwoKICAgICAKICAgIGlubGluZSBnZW9fU2NhbjIq
IGNsb25lKCkgY29uc3Q7CiAgfTsKCiAgIAogIGdlb19WZXJ0ZXggICAgKnZ0eF9bNV07CgogICAK
ICBnZW9fRWRnZSAgICAgICplZGdfWzhdOwoKICAgCiAgZ2VvX1RyaWFuZ2xlICAqdHJpX1s0XTsK
CiAgIAoKCiAgZ2VvX1RyaWFuZ2xlMmQgKmNlbGxfWzRdOwoKIHB1YmxpYzoKICAgCgoKICBnZW9f
RGlzaygpOwogIHZpcnR1YWwgfmdlb19EaXNrKCk7CgogICAKICBpbmxpbmUgdWludCBuY2VsbCgp
IGNvbnN0OwoKICAgCgoKCiAgaW5saW5lIGdlb19TY2FuMiogc2NhbigpOwp9OwoKaW5saW5lIGdl
b19EaXNrOjpTOjpTKGdlb19UcmlhbmdsZTJkKiAoJmNlbGwpWzRdKSA6IGlkeF8oMCksIGNlbGxf
KGNlbGwpIHsKfQoKaW5saW5lIGdlb19EaXNrOjpTOjpTKGNvbnN0IFMmIHNjYW4pIDogaWR4Xyhz
Y2FuLmlkeF8pLCAgY2VsbF8oc2Nhbi5jZWxsXykgewp9CgppbmxpbmUgYm9vbCBnZW9fRGlzazo6
Uzo6ZW9zKCkgY29uc3QgewogIHJldHVybiBpZHhfID09IDQ7Cn0KCmlubGluZSBnZW9fQ2VsbDIm
IGdlb19EaXNrOjpTOjpvcGVyYXRvcisrKGludCkgewogIHJldHVybiAqY2VsbF9baWR4XysrXTsK
fQoKaW5saW5lIGdlb19TY2FuMiogZ2VvX0Rpc2s6OlM6OmNsb25lKCkgY29uc3QgewogIHJldHVy
biBuZXcgUygqdGhpcyk7Cn0KCmlubGluZSB1aW50IGdlb19EaXNrOjpuY2VsbCgpIGNvbnN0IHsK
ICByZXR1cm4gNDsKfQoKaW5saW5lIGdlb19TY2FuMiogZ2VvX0Rpc2s6OnNjYW4oKXsKICByZXR1
cm4gbmV3IFMoY2VsbF8pOwp9CgogCgogCgoKY2xhc3MgZ2VvX1NxdWFyZSA6IHB1YmxpYyBnZW9f
TWVzaDIgewogIAogICAKCgogIGNsYXNzIFMgOiBwdWJsaWMgdGJ4X1NjYW48Z2VvX0NlbGwyPiB7
CgogICAgIAogICAgdWludCAgICAgICAgICAgaWR4XzsKCiAgICAgCiAgICBnZW9fVHJpYW5nbGUy
ZCAqKCZjZWxsXylbMl07CgogICBwdWJsaWM6CiAgICAgCgoKICAgIGlubGluZSBTKGdlb19Ucmlh
bmdsZTJkICooJmNlbGwpWzJdKTsgCgogICAgIAogICAgaW5saW5lIFMoY29uc3QgUyYgc2Nhbik7
IAogICAgCiAgICAgCgoKICAgIGlubGluZSBib29sIGVvcygpIGNvbnN0OwoKICAgICAKCgogICAg
aW5saW5lIGdlb19DZWxsMiYgb3BlcmF0b3IrKyhpbnQpOwoKICAgICAKICAgIGlubGluZSBnZW9f
U2NhbjIqIGNsb25lKCkgY29uc3Q7CiAgfTsKCiAgIAogIGdlb19WZXJ0ZXggICAgKnZ0eF9bNF07
CgogICAKICBnZW9fRWRnZSAgICAgICplZGdfWzVdOwoKICAgCiAgZ2VvX1RyaWFuZ2xlICAqdHJp
X1syXTsKCiAgIAoKCiAgZ2VvX1RyaWFuZ2xlMmQgKmNlbGxfWzJdOwoKIHB1YmxpYzoKICAgCgoK
ICBnZW9fU3F1YXJlKCk7CiAgdmlydHVhbCB+Z2VvX1NxdWFyZSgpOwoKICAgCiAgaW5saW5lIHVp
bnQgbmNlbGwoKSBjb25zdDsKCiAgIAoKCgogIGlubGluZSBnZW9fU2NhbjIqIHNjYW4oKTsKfTsK
CmlubGluZSBnZW9fU3F1YXJlOjpTOjpTKGdlb19UcmlhbmdsZTJkKiAoJmNlbGwpWzJdKSA6IGlk
eF8oMCksIGNlbGxfKGNlbGwpIHsKfQoKaW5saW5lIGdlb19TcXVhcmU6OlM6OlMoY29uc3QgUyYg
c2NhbikgOiBpZHhfKHNjYW4uaWR4XyksICBjZWxsXyhzY2FuLmNlbGxfKSB7Cn0KCmlubGluZSBi
b29sIGdlb19TcXVhcmU6OlM6OmVvcygpIGNvbnN0IHsKICByZXR1cm4gaWR4XyA9PSAyOwp9Cgpp
bmxpbmUgZ2VvX0NlbGwyJiBnZW9fU3F1YXJlOjpTOjpvcGVyYXRvcisrKGludCkgewogIHJldHVy
biAqY2VsbF9baWR4XysrXTsKfQoKaW5saW5lIGdlb19TY2FuMiogZ2VvX1NxdWFyZTo6Uzo6Y2xv
bmUoKSBjb25zdCB7CiAgcmV0dXJuIG5ldyBTKCp0aGlzKTsKfQoKaW5saW5lIHVpbnQgZ2VvX1Nx
dWFyZTo6bmNlbGwoKSBjb25zdCB7CiAgcmV0dXJuIDI7Cn0KCmlubGluZSBnZW9fU2NhbjIqIGdl
b19TcXVhcmU6OnNjYW4oKSB7CiAgcmV0dXJuIG5ldyBTKGNlbGxfKTsKfQoKIAoKIAoKY2xhc3Mg
Z2VvX0JpVGV0cmEgOiBwdWJsaWMgZ2VvX01lc2gyIHsKICAKICBjbGFzcyBTIDogcHVibGljIGdl
b19TY2FuMiB7CgogICAgdWludCAgICAgICAgICAgaWR4XzsKICAgIGdlb19UcmlhbmdsZTNkICoo
JmNlbGxfKVs2XTsKCiAgIHB1YmxpYzoKICAgIGlubGluZSBTKGdlb19UcmlhbmdsZTNkICooJmNl
bGwpWzZdKTsgCiAgICBpbmxpbmUgUyhjb25zdCBTICZzY2FuKTsgCiAgICAKICAgIGlubGluZSBi
b29sIGVvcygpIGNvbnN0OwogICAgaW5saW5lIGdlb19DZWxsMiYgb3BlcmF0b3IrKyhpbnQpOwoK
ICAgIGlubGluZSBnZW9fU2NhbjIqIGNsb25lKCkgY29uc3Q7CiAgfTsKCiAgZ2VvX1ZlcnRleCAg
ICAqdnR4X1s1XTsKICBnZW9fRWRnZSAgICAgICplZGdfWzldOwogIGdlb19UcmlhbmdsZSAgKnRy
aV9bNl07CgogIGdlb19UcmlhbmdsZTNkICpjZWxsX1s2XTsKCiBwdWJsaWM6CiAgZ2VvX0JpVGV0
cmEoKTsKICB2aXJ0dWFsIH5nZW9fQmlUZXRyYSgpOwoKICBpbmxpbmUgdWludCBuY2VsbCgpIGNv
bnN0OwogIGlubGluZSBnZW9fU2NhbjIqIHNjYW4oKTsKfTsKCmlubGluZSBnZW9fQmlUZXRyYTo6
Uzo6UyhnZW9fVHJpYW5nbGUzZCAqKCZjZWxsKVs2XSkgOiBpZHhfKDApLCBjZWxsXyhjZWxsKSB7
Cn0KCmlubGluZSBnZW9fQmlUZXRyYTo6Uzo6Uyhjb25zdCBTJiBzY2FuKSA6IGlkeF8oc2Nhbi5p
ZHhfKSwgY2VsbF8oc2Nhbi5jZWxsXykgewp9CgppbmxpbmUgYm9vbCBnZW9fQmlUZXRyYTo6Uzo6
ZW9zKCkgY29uc3QgewogIHJldHVybiBpZHhfID09IDY7Cn0KCmlubGluZSBnZW9fQ2VsbDImIGdl
b19CaVRldHJhOjpTOjpvcGVyYXRvcisrKGludCkgewogIHJldHVybiAqY2VsbF9baWR4XysrXTsK
fQoKaW5saW5lIGdlb19TY2FuMiogZ2VvX0JpVGV0cmE6OlM6OmNsb25lKCkgY29uc3QgewogIHJl
dHVybiBuZXcgUygqdGhpcyk7Cn0KCmlubGluZSB1aW50IGdlb19CaVRldHJhOjpuY2VsbCgpIGNv
bnN0IHsKICByZXR1cm4gNjsKfQoKaW5saW5lIGdlb19TY2FuMiogZ2VvX0JpVGV0cmE6OnNjYW4o
KSB7CiAgcmV0dXJuIG5ldyBTKGNlbGxfKTsKfQoKCiMgMTUgIi4uL2Z1bmN0aW9uLy4uL3NwYWNl
L3NwY1NwYWNlLmgiIDIKCgoKCgogCgojIDQyICIuLi9mdW5jdGlvbi8uLi9zcGFjZS9zcGNTcGFj
ZS5oIgoKCnRlbXBsYXRlPGNsYXNzIEY+CmNsYXNzIHNwY19TcGFjZTsKCnRlbXBsYXRlPGNsYXNz
IEY+CmlubGluZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG9zLCBjb25zdCBzcGNfU3Bh
Y2U8Rj4mIHNwYykgewogIHJldHVybiBzcGMuaW5mbyhvcyk7Cn0KCiAKCnRlbXBsYXRlPGNsYXNz
IEY+CmNsYXNzIHNwY19TcGFjZSB7CiAgZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwgPD4gKG9z
dHJlYW0mIG9zLCBjb25zdCBzcGNfU3BhY2U8Rj4mIHNwYyk7CgogcHVibGljOgogIHR5cGVkZWYg
dGJ4X1NjYW48c3BjX0VsZW1lbnQ8Rj4gPiBzcGNfU2NhbjsKCiAgIAogIHZpcnR1YWwgdWludCBk
aW0oKSBjb25zdCA9IDA7CgogICAKICB2aXJ0dWFsIG9zdHJlYW0mIGluZm8ob3N0cmVhbSYgb3Ms
IHVpbnQgbW9kZSA9IDApIGNvbnN0OwoKICAgCiAgdmlydHVhbCB1aW50IG5lbG0oKSBjb25zdCA9
IDA7CgogICAKICB2aXJ0dWFsIHNwY19TY2FuKiBzY2FuKCkgY29uc3QgPSAwOyAKfTsKCgoKIAoK
IAoKCgoKCgoKCgoKCgpjbGFzcyBzcGNfTGluZWFyMmQgOiBwdWJsaWMgc3BjX1NwYWNlPHJlYWw+
IHsKCiAgIAogIHVpbnQgZGltXzsKCiAgIAogIHVpbnQgbmVsbV87CgogICAKICB0YnhfQ29ubmVj
dG9yPHNwY19FbGVtZW50PHJlYWw+KiwgMT4qIGVsbV87CgogICAKCgoKCgoKCgoKCgoKCgogIHZv
aWQgY29uc3RydWN0b3JfKGdlb19UcmlhbmdsZTJkKiB0cmksIHVpbnQgbHZsLCB0YnhfRHluQXJy
YXk8dWludD4mIG1hcCk7CgogcHVibGljOgogICAKCgoKCiAgc3BjX0xpbmVhcjJkKGdlb19NZXNo
JiBtc2gsIHVpbnQgbHZsKTsKCiAgdmlydHVhbCB+c3BjX0xpbmVhcjJkKCk7CgogIGlubGluZSB1
aW50IGRpbSgpIGNvbnN0OwogIG9zdHJlYW0mIGluZm8ob3N0cmVhbSYgb3MsIHVpbnQgbW9kZSA9
IDApIGNvbnN0OwogIGlubGluZSB1aW50IG5lbG0oKSBjb25zdDsKICBpbmxpbmUgc3BjX1NjYW4q
IHNjYW4oKSBjb25zdDsKfTsKCmlubGluZSB1aW50IHNwY19MaW5lYXIyZDo6ZGltKCkgY29uc3Qg
eyAKICByZXR1cm4gZGltXzsgCn0KCmlubGluZSB1aW50IHNwY19MaW5lYXIyZDo6bmVsbSgpIGNv
bnN0IHsgCiAgcmV0dXJuIG5lbG1fOyAKfQoKaW5saW5lIHNwY19TcGFjZTxyZWFsPjo6c3BjX1Nj
YW4qIHNwY19MaW5lYXIyZDo6c2NhbigpIGNvbnN0IHsgCiAgcmV0dXJuIG5ldyB0YnhfUExpc3RT
Y2FuPHNwY19FbGVtZW50PHJlYWw+ID4oKmVsbV8pOwp9CgogCgogCgogCiAKCiAKCiAKCiAKIAog
CiAgCiAKIAogCiAKIAoKIAogCiAKCiAKIAogCgogCiAKIAoKIAoKCgoKCgoKCgoKCgpjbGFzcyBz
cGNfTGluZWFyM2QgOiBwdWJsaWMgc3BjX1NwYWNlPHJlYWw+IHsKCnB1YmxpYzoKICAgCgoKCgog
IHNwY19MaW5lYXIzZChnZW9fTWVzaCYgbXNoLCB1aW50IGx2bCk7CiAgdmlydHVhbCB+c3BjX0xp
bmVhcjNkKCk7CgogICAKICBpbmxpbmUgdWludCBkaW0oKSBjb25zdCB7IHJldHVybiBkaW1fOyB9
CgogICAKICBpbmxpbmUgdWludCBuZWxtKCkgY29uc3QgeyByZXR1cm4gbmVsbV87IH0KCiAgIAog
IGlubGluZSBzcGNfU2Nhbiogc2NhbigpIGNvbnN0IHsgCiAgICByZXR1cm4gbmV3IHRieF9QTGlz
dFNjYW48c3BjX0VsZW1lbnQ8cmVhbD4gPigqZWxtXyk7CiAgfQoKICAgCiAgb3N0cmVhbSYgaW5m
byhvc3RyZWFtJiBvcywgdWludCBtb2RlID0gMCkgY29uc3Q7Cgpwcml2YXRlOgogICAKICB1aW50
IGRpbV87CgogICAKICB1aW50IG5lbG1fOwoKICAgCiAgdGJ4X0Nvbm5lY3RvcjxzcGNfRWxlbWVu
dDxyZWFsPiosIDE+KiBlbG1fOwoKICB2b2lkIGNvbnN0cnVjdG9yXyhnZW9fVGV0cmFoZWRyb24z
ZCogY2VsbCwgdWludCBsdmwsIAoJCSAgICB0YnhfRHluQXJyYXk8dWludD4mIG1hcCk7Cn07Cgog
CgpjbGFzcyBzcGNfQ29uc3RhbnQzZCA6IHB1YmxpYyBzcGNfU3BhY2U8cmVhbD4gewoKICB1aW50
IGRpbV87CiAgdWludCBuZWxtXzsKCiAgdGJ4X0Nvbm5lY3RvcjxzcGNfRWxlbWVudDxyZWFsPios
IDE+KiBlbG1fOwoKICB2b2lkIGNvbnN0cnVjdG9yXyhnZW9fVHJpYW5nbGUzZCogdHJpLCB1aW50
IGx2bCk7CgogcHVibGljOgogIHNwY19Db25zdGFudDNkKGdlb19NZXNoJiBtc2gsIHVpbnQgbHZs
KTsKICB2aXJ0dWFsIH5zcGNfQ29uc3RhbnQzZCgpOwoKICBpbmxpbmUgdWludCBkaW0oKSBjb25z
dDsKICBpbmxpbmUgdWludCBuZWxtKCkgY29uc3Q7CiAgaW5saW5lIHNwY19TY2FuKiBzY2FuKCkg
Y29uc3Q7Cn07CgppbmxpbmUgdWludCBzcGNfQ29uc3RhbnQzZDo6ZGltKCkgY29uc3QgeyAKICBy
ZXR1cm4gZGltXzsgCn0KCmlubGluZSB1aW50IHNwY19Db25zdGFudDNkOjpuZWxtKCkgY29uc3Qg
ewogIHJldHVybiBuZWxtXzsgCn0KCmlubGluZSBzcGNfU3BhY2U8cmVhbD46OnNwY19TY2FuKiBz
cGNfQ29uc3RhbnQzZDo6c2NhbigpIGNvbnN0IHsgCiAgcmV0dXJuIG5ldyB0YnhfUExpc3RTY2Fu
PHNwY19FbGVtZW50PHJlYWw+ID4oKmVsbV8pOwp9CgogCgpjbGFzcyBzcGNfRGlyYWMzZCA6IHB1
YmxpYyBzcGNfU3BhY2U8cmVhbD4gewoKICB1aW50IGRpbV87CiAgdWludCBuZWxtXzsKCiAgdGJ4
X0Nvbm5lY3RvcjxzcGNfRWxlbWVudDxyZWFsPiosIDE+KiBlbG1fOwoKICB2b2lkIGNvbnN0cnVj
dG9yXyhnZW9fVHJpYW5nbGUzZCogdHJpLCB1aW50IGx2bCwgdGJ4X0R5bkFycmF5PHVpbnQ+JiBt
YXApOwoKIHB1YmxpYzoKICBzcGNfRGlyYWMzZChnZW9fTWVzaCYgbXNoLCB1aW50IGx2bCk7CiAg
dmlydHVhbCB+c3BjX0RpcmFjM2QoKTsKICAKICBpbmxpbmUgdWludCBkaW0oKSBjb25zdDsKICBp
bmxpbmUgdWludCBuZWxtKCkgY29uc3Q7CiAgaW5saW5lIHNwY19TY2FuKiBzY2FuKCkgY29uc3Q7
Cn07CgppbmxpbmUgdWludCBzcGNfRGlyYWMzZDo6ZGltKCkgY29uc3QgeyAKICByZXR1cm4gZGlt
XzsgCn0KCmlubGluZSB1aW50IHNwY19EaXJhYzNkOjpuZWxtKCkgY29uc3QgewogIHJldHVybiBu
ZWxtXzsgCn0KCmlubGluZSBzcGNfU3BhY2U8cmVhbD46OnNwY19TY2FuKiBzcGNfRGlyYWMzZDo6
c2NhbigpIGNvbnN0IHsgCiAgcmV0dXJuIG5ldyB0YnhfUExpc3RTY2FuPHNwY19FbGVtZW50PHJl
YWw+ID4oKmVsbV8pOwp9CgogCgojIDEgIi4uL2Z1bmN0aW9uLy4uL3NwYWNlL3NwY1NwYWNlLnQi
IDEKIAoKCgoKCgogICNwcmFnbWEgaW1wbGVtZW50YXRpb24KCgogCgp0ZW1wbGF0ZTxjbGFzcyBG
Pgpvc3RyZWFtJiBzcGNfU3BhY2U8Rj46OmluZm8ob3N0cmVhbSYgb3MsIHVpbnQgbW9kZSkgY29u
c3QgewoKICBpZiAobW9kZSA9PSAwKSB7CiAgICBvcyA8PCAic3BjX1NwYWNlKGRpbSA9ICIgPDwg
ZGltKCkgPDwgJyknOwoKICB9IGVsc2UgewoKICAgIHNwY19TY2FuKiBzYyA9IHNjYW4oKTsKICAg
IHdoaWxlICgqc2MpIG9zIDw8ICgqc2MpKysgPDwgJ1xuJzsKICAgIGRlbGV0ZSBzYzsKCiAgfQoK
ICByZXR1cm4gb3M7Cn0KCgojIDI5OCAiLi4vZnVuY3Rpb24vLi4vc3BhY2Uvc3BjU3BhY2UuaCIg
MgoKCgojIDE3ICIuLi9mdW5jdGlvbi9mbmNGdW5jdGlvbi5oIiAyCgoKIyAxICIuLi9mdW5jdGlv
bi9mbmNMRm9ybS5oIiAxCiAKCgoKCgoKCgoKCgoKIyAxICIuLi9mdW5jdGlvbi8uLi9pbnRlZ3Jh
dGlvbi5oIiAxCiAKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCiAKCiMgMSAiLi4vZnVuY3Rp
b24vLi4vaW50ZWdyYXRpb24vaW50UXVhZHJhdHVyZS5oIiAxCiAKCgoKIyAxICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaGFzaF9t
YXAiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2Mt
bGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2hhc2h0
YWJsZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCiAKCgoKCgoj
IDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGxfYWxnby5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9zdGxfaGVhcC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKCiAKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFz
cyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4Kdm9pZCAKX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwgX0Rpc3Rh
bmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlKQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9f
aG9sZUluZGV4IC0gMSkgLyAyOwogIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYg
KihfX2ZpcnN0ICsgX19wYXJlbnQpIDwgX192YWx1ZSkgewogICAgKihfX2ZpcnN0ICsgX19ob2xl
SW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgX19ob2xlSW5kZXggPSBfX3BhcmVu
dDsKICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIH0gICAgCiAgKihfX2Zp
cnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIApf
X3B1c2hfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfRGlzdGFuY2UqLCBfVHAqKQp7CiAg
X19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBf
RGlzdGFuY2UoMCksIAogICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB2b2lkIApwdXNoX2hlYXAo
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xh
c3QpCnsKICBfX3B1c2hfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAg
ICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3QgKSAsIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5j
ZSwgY2xhc3MgX1RwLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkCl9fcHVzaF9oZWFw
KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAg
ICAgICAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19j
b21wKQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIHdo
aWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgX19jb21wKCooX19maXJzdCArIF9fcGFy
ZW50KSwgX192YWx1ZSkpIHsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJz
dCArIF9fcGFyZW50KTsKICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICBfX3BhcmVudCA9
IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICB9CiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0g
X192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3Mg
X0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KaW5saW5lIHZv
aWQgCl9fcHVzaF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCwK
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosIF9UcCopIAp7CiAgX19wdXNoX2hlYXAoX19maXJz
dCwgX0Rpc3RhbmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2UoMCksIAogICAg
ICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIApwdXNo
X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBfX3B1c2hfaGVhcF9hdXgo
X19maXJzdCwgX19sYXN0LCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlw
ZSggX19maXJzdCApICwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+CnZv
aWQgCl9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5j
ZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVl
KQp7CiAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICBfRGlzdGFuY2UgX19z
ZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7CiAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQg
PCBfX2xlbikgewogICAgaWYgKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpIDwgKihfX2ZpcnN0
ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpCiAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICooX19m
aXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgX19o
b2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNv
bmRDaGlsZCArIDEpOwogIH0KICBpZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgKihf
X2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7
CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogIH0KICBfX3B1c2hfaGVhcChf
X2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpp
bmxpbmUgdm9pZCAKX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBfRGlzdGFuY2UqKQp7CiAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3Q7CiAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShf
X2xhc3QgLSBfX2ZpcnN0KSwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgCl9fcG9wX2hlYXBfYXV4KF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAog
ICAgICAgICAgICAgICBfVHAqKQp7CiAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBf
X2xhc3QgLSAxLCAKICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSwgX19kaXN0YW5jZV90
eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRv
cj4KaW5saW5lIHZvaWQgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIAog
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7CiAgX19w
b3BfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2Us
CiAgICAgICAgICBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkCl9fYWRqdXN0X2hlYXAo
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAg
ICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXAp
CnsKICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogIF9EaXN0YW5jZSBfX3Nl
Y29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8
IF9fbGVuKSB7CiAgICBpZiAoX19jb21wKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpLCAqKF9f
Zmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkpCiAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAg
ICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwog
ICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgX19zZWNvbmRDaGlsZCA9IDIgKiAo
X19zZWNvbmRDaGlsZCArIDEpOwogIH0KICBpZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewog
ICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQg
LSAxKSk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogIH0KICBfX3B1c2hf
aGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSwgX19jb21wKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFz
cyBfQ29tcGFyZSwgCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIApfX3Bv
cF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19sYXN0LAogICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1Rw
IF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCwKICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgKl9f
cmVzdWx0ID0gKl9fZmlyc3Q7CiAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCks
IF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgCiAgICAgICAgICAgICAgICBfX3ZhbHVlLCBf
X2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCAKX19wb3BfaGVhcF9hdXgoX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2xhc3QsIF9UcCosIF9Db21wYXJlIF9fY29tcCkKewogIF9fcG9wX2hlYXAoX19maXJzdCwg
X19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1RwKCooX19sYXN0IC0gMSkpLCBfX2NvbXAsCiAgICAg
ICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgCnBvcF9o
ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKICAgIF9fcG9wX2hlYXBfYXV4KF9f
Zmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLCBfX2NvbXApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0
YW5jZT4Kdm9pZCAKX19tYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSop
CnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICBfRGlzdGFuY2UgX19sZW4g
PSBfX2xhc3QgLSBfX2ZpcnN0OwogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7
CiAgICAKICB3aGlsZSAodHJ1ZSkgewogICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVu
dCwgX19sZW4sIF9UcCgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsKICAgIGlmIChfX3BhcmVudCA9
PSAwKSByZXR1cm47CiAgICBfX3BhcmVudC0tOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZvaWQgCm1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewogIF9fbWFrZV9o
ZWFwKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fZmlyc3Qg
KSAsIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX1RwLCBj
bGFzcyBfRGlzdGFuY2U+CnZvaWQKX19tYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgIF9Db21wYXJl
IF9fY29tcCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikg
cmV0dXJuOwogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNl
IF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKICAgIAogIHdoaWxlICh0cnVlKSB7CiAgICBfX2Fk
anVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1RwKCooX19maXJzdCArIF9fcGFy
ZW50KSksCiAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBpZiAoX19wYXJlbnQgPT0gMCkg
cmV0dXJuOwogICAgX19wYXJlbnQtLTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCAKbWFrZV9oZWFwKF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewogIF9fbWFrZV9oZWFwKF9fZmlyc3QsIF9fbGFz
dCwgX19jb21wLAogICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICwgX19kaXN0
YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvcj4Kdm9pZCBzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+
IDEpCiAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgp2b2lkIApzb3J0X2hlYXAoX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+
IDEpCiAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKfQoKCgoKCiAKCgoK
IAogCiAKIyAzNCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0bF9hbGdvLmgiIDIgMwoKCiAKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3Qg
X1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jKSB7CiAgaWYgKF9fYSA8IF9fYikKICAgIGlmIChfX2Ig
PCBfX2MpCiAgICAgIHJldHVybiBfX2I7CiAgICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICAgIHJl
dHVybiBfX2M7CiAgICBlbHNlCiAgICAgIHJldHVybiBfX2E7CiAgZWxzZSBpZiAoX19hIDwgX19j
KQogICAgcmV0dXJuIF9fYTsKICBlbHNlIGlmIChfX2IgPCBfX2MpCiAgICByZXR1cm4gX19jOwog
IGVsc2UKICAgIHJldHVybiBfX2I7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21w
YXJlPgppbmxpbmUgY29uc3QgX1RwJgpfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1Rw
JiBfX2IsIGNvbnN0IF9UcCYgX19jLCBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19jb21wKF9f
YSwgX19iKSkKICAgIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgICByZXR1cm4gX19iOwogICAg
ZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgcmV0dXJuIF9fYzsKICAgIGVsc2UKICAg
ICAgcmV0dXJuIF9fYTsKICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgcmV0dXJuIF9f
YTsKICBlbHNlIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgcmV0dXJuIF9fYzsKICBlbHNlCiAg
ICByZXR1cm4gX19iOwp9CgogCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRnVu
Y3Rpb24+Cl9GdW5jdGlvbiBmb3JfZWFjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LCBfRnVuY3Rpb24gX19mKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0KQogICAgX19mKCpfX2ZpcnN0KTsKICByZXR1cm4gX19mOwp9CgogCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0lucHV0SXRlciBmaW5kKF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90
YWcpCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgKl9fZmlyc3QgIT0gX192YWwpCiAg
ICArK19fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0lucHV0SXRlciBmaW5kX2lmKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
X1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0
b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoKl9fZmlyc3Qp
KQogICAgKytfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNzSXRlciBmaW5kKF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIHJh
bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgPSAoX19s
YXN0IC0gX19maXJzdCkgPj4gMjsKCiAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3Ry
aXBfY291bnQpIHsKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAg
ICArK19fZmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsK
ICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0
OwogICAgKytfX2ZpcnN0OwoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmly
c3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogIGNh
c2UgMzoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19f
Zmlyc3Q7CiAgY2FzZSAyOgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJz
dDsKICAgICsrX19maXJzdDsKICBjYXNlIDE6CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJl
dHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMDoKICBkZWZhdWx0OgogICAgcmV0
dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh
c3MgX1ByZWRpY2F0ZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgZmluZF9pZihfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9t
X2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICA9IChfX2xhc3Qg
LSBfX2ZpcnN0KSA+PiAyOwoKICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9j
b3VudCkgewogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytf
X2ZpcnN0OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsr
X19maXJzdDsKCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAr
K19fZmlyc3Q7CgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAg
KytfX2ZpcnN0OwogIH0KCiAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICBjYXNlIDM6CiAg
ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAg
Y2FzZSAyOgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytf
X2ZpcnN0OwogIGNhc2UgMToKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJz
dDsKICAgICsrX19maXJzdDsKICBjYXNlIDA6CiAgZGVmYXVsdDoKICAgIHJldHVybiBfX2xhc3Q7
CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBf
SW5wdXRJdGVyIGZpbmQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQp7CiAgcmV0dXJuIGZpbmQoX19m
aXJzdCwgX19sYXN0LCBfX3ZhbCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0lu
cHV0SXRlciBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpIHsKICByZXR1cm4gZmlu
ZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJz
dCApICk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBh
ZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KSB7
CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIF9fbGFzdDsKICBfRm9yd2FyZEl0
ZXIgX19uZXh0ID0gX19maXJzdDsKICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlm
ICgqX19maXJzdCA9PSAqX19uZXh0KQogICAgICByZXR1cm4gX19maXJzdDsKICAgIF9fZmlyc3Qg
PSBfX25leHQ7CiAgfQogIHJldHVybiBfX2xhc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBhZGphY2VudF9maW5k
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICBpZiAoX19m
aXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gX19sYXN0OwogIF9Gb3J3YXJkSXRlciBfX25leHQg
PSBfX2ZpcnN0OwogIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgaWYgKF9fYmluYXJ5
X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICByZXR1cm4gX19maXJzdDsKICAgIF9fZmly
c3QgPSBfX25leHQ7CiAgfQogIHJldHVybiBfX2xhc3Q7Cn0KCiAKIAogCiAKIAoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemU+CnZvaWQgY291bnQoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlLAog
ICAgICAgICAgIF9TaXplJiBfX24pIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f
Zmlyc3QpCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgKytfX247Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfU2l6ZT4Kdm9p
ZCBjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGlj
YXRlIF9fcHJlZCwKICAgICAgICAgICAgICBfU2l6ZSYgX19uKSB7CiAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICsr
X19uOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CnR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCmNvdW50KF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkgewog
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9f
biA9IDA7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCpf
X2ZpcnN0ID09IF9fdmFsdWUpCiAgICAgICsrX19uOwogIHJldHVybiBfX247Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgp0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQpjb3VudF9pZihfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCkgewogIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAg
Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgqX19m
aXJzdCkpCiAgICAgICsrX19uOwogIHJldHVybiBfX247Cn0KCgoKCiAKCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIxIHNlYXJj
aChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0
MikgCnsKICAgCiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0
MikKICAgIHJldHVybiBfX2ZpcnN0MTsKCiAgIAogIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJz
dDIpOwogICsrX190bXA7CiAgaWYgKF9fdG1wID09IF9fbGFzdDIpCiAgICByZXR1cm4gZmluZChf
X2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKCiAgIAoKICBfRm9yd2FyZEl0ZXIyIF9fcDEs
IF9fcDsKCiAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogIF9Gb3J3YXJkSXRlcjEgX19jdXJy
ZW50ID0gX19maXJzdDE7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICBfX2Zp
cnN0MSA9IGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICBpZiAoX19maXJz
dDEgPT0gX19sYXN0MSkKICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgX19wID0gX19wMTsKICAg
IF9fY3VycmVudCA9IF9fZmlyc3QxOyAKICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQog
ICAgICByZXR1cm4gX19sYXN0MTsKCiAgICB3aGlsZSAoKl9fY3VycmVudCA9PSAqX19wKSB7CiAg
ICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAg
aWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9
CgogICAgKytfX2ZpcnN0MTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWQ+
Cl9Gb3J3YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0Miwg
X0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZCAg
X19wcmVkaWNhdGUpIAp7CiAgIAogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3Qy
ID09IF9fbGFzdDIpCiAgICByZXR1cm4gX19maXJzdDE7CgogICAKICBfRm9yd2FyZEl0ZXIyIF9f
dG1wKF9fZmlyc3QyKTsKICArK19fdG1wOwogIGlmIChfX3RtcCA9PSBfX2xhc3QyKQogICAgcmV0
dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CgogICAKCiAgX0ZvcndhcmRJ
dGVyMiBfX3AxLCBfX3A7CgogIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICBfRm9yd2FyZEl0
ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkg
ewogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgaWYgKF9fcHJlZGljYXRl
KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICBicmVhazsKICAgICAgKytfX2ZpcnN0MTsK
ICAgIH0KICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19m
aXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19maXJzdDE7CiAgICBpZiAoX19maXJzdDEgPT0g
X19sYXN0MSkKICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgX19wID0gX19wMTsKICAgIF9fY3Vy
cmVudCA9IF9fZmlyc3QxOyAKICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4g
X19sYXN0MTsKCiAgICB3aGlsZSAoX19wcmVkaWNhdGUoKl9fY3VycmVudCwgKl9fcCkpIHsKICAg
ICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICBp
ZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0K
CiAgICArK19fZmlyc3QxOwogIH0KICByZXR1cm4gX19maXJzdDE7Cn0KCiAKCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9JbnRlZ2VyLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRl
ciBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwpIHsK
ICBpZiAoX19jb3VudCA8PSAwKQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICBfX2Zp
cnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgIHdoaWxlIChfX2ZpcnN0ICE9
IF9fbGFzdCkgewogICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgX0Zvcndh
cmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICB3aGlsZSAoX19pICE9IF9f
bGFzdCAmJiBfX24gIT0gMCAmJiAqX19pID09IF9fdmFsKSB7CiAgICAgICAgKytfX2k7CiAgICAg
ICAgLS1fX247CiAgICAgIH0KICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgIHJldHVybiBfX2Zp
cnN0OwogICAgICBlbHNlCiAgICAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFs
KTsKICAgIH0KICAgIHJldHVybiBfX2xhc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyLCBjbGFzcyBfSW50ZWdlciwgY2xhc3MgX1RwLCBjbGFzcyBfQmluYXJ5UHJlZD4KX0Zv
cndhcmRJdGVyIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBf
X3ZhbCwKICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3ByZWQpIHsK
ICBpZiAoX19jb3VudCA8PSAwKQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICB3aGls
ZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3Qs
IF9fdmFsKSkKICAgICAgICBicmVhazsKICAgICAgKytfX2ZpcnN0OwogICAgfQogICAgd2hpbGUg
KF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwog
ICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIHdoaWxl
IChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwp
KSB7CiAgICAgICAgKytfX2k7CiAgICAgICAgLS1fX247CiAgICAgIH0KICAgICAgaWYgKF9fbiA9
PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICB3aGlsZSAo
X19pICE9IF9fbGFzdCkgewogICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwp
KQogICAgICAgICAgICBicmVhazsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAgICBf
X2ZpcnN0ID0gX19pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX19sYXN0OwogIH0KfSAKCiAK
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9y
d2FyZEl0ZXIyIHN3YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmly
c3QyKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmly
c3QyKQogICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgcmV0dXJuIF9fZmlyc3Qy
Owp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNs
YXNzIF9VbmFyeU9wZXJhdGlvbj4KX091dHB1dEl0ZXIgdHJhbnNmb3JtKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwgX1VuYXJ5T3BlcmF0aW9uIF9fb3BlcikgewogIGZvciAoIDsgX19maXJzdCAh
PSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fb3Blcigq
X19maXJzdCk7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNz
IF9CaW5hcnlPcGVyYXRpb24+Cl9PdXRwdXRJdGVyIHRyYW5zZm9ybShfSW5wdXRJdGVyMSBfX2Zp
cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXIyIF9fZmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg
IF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9f
bGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIsICsrX19yZXN1bHQpCiAgICAqX19yZXN1bHQg
PSBfX2JpbmFyeV9vcCgqX19maXJzdDEsICpfX2ZpcnN0Mik7CiAgcmV0dXJuIF9fcmVzdWx0Owp9
CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQgcmVwbGFj
ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
IGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpIHsKICBmb3Ig
KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9fZmlyc3QgPT0gX19v
bGRfdmFsdWUpCiAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcD4Kdm9pZCByZXBsYWNl
X2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpIHsKICBmb3Ig
KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0
KSkKICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJlcGxhY2Vf
Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKSB7CiAgZm9y
ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0Owog
IHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBfT3V0
cHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZXBsYWNl
X2NvcHlfaWYoSXRlcmF0b3IgX19maXJzdCwgSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkgewogIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jl
c3VsdCA9IF9fcHJlZCgqX19maXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogIHJldHVy
biBfX3Jlc3VsdDsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0dl
bmVyYXRvcj4Kdm9pZCBnZW5lcmF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwgX0dlbmVyYXRvciBfX2dlbikgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9P
dXRwdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0dlbmVyYXRvcj4KX091dHB1dEl0ZXIgZ2Vu
ZXJhdGVfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4p
IHsKICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9f
Z2VuKCk7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZW1vdmVfY29weShf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgZm9yICgg
OyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCpfX2ZpcnN0ICE9IF9fdmFs
dWUpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9
CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X091dHB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9PdXRwdXRJdGVyIHJlbW92ZV9jb3B5X2lm
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkgewogIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICghX19wcmVkKCpfX2Zp
cnN0KSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgKytfX3Jlc3VsdDsKICAg
IH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs
YXNzIF9UcD4KX0ZvcndhcmRJdGVyIHJlbW92ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsdWUpIHsK
ICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWUpOwogIF9Gb3J3YXJkSXRl
ciBfX2kgPSBfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHkoKytfX2ksIF9fbGFzdCwgX19m
aXJzdCwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Q
cmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciByZW1vdmVfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G
b3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3By
ZWQpIHsKICBfX2ZpcnN0ID0gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CiAgX0Zv
cndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19m
aXJzdCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weV9pZigrK19faSwg
X19sYXN0LCBfX2ZpcnN0LCBfX3ByZWQpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgX191bmlxdWVfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVHAqKSB7CiAgX1RwIF9fdmFsdWUgPSAq
X19maXJzdDsKICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19s
YXN0KQogICAgaWYgKF9fdmFsdWUgIT0gKl9fZmlyc3QpIHsKICAgICAgX192YWx1ZSA9ICpfX2Zp
cnN0OwogICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0dXJuICsrX19yZXN1
bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5s
aW5lIF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0
b3JfdGFnKSB7CiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICpfX3Jl
c3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCpf
X3Jlc3VsdCAhPSAqX19maXJzdCkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1cm4gKytf
X3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVy
PgppbmxpbmUgX091dHB1dEl0ZXIgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAg
cmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAg
ICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX3Jlc3VsdCApICk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0JpbmFyeVBy
ZWRpY2F0ZSwKICAgICAgICAgIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgX191bmlxdWVfY29weShf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9C
aW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwgX1RwKikgewogIF9UcCBfX3ZhbHVlID0gKl9f
Zmlyc3Q7CiAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFz
dCkKICAgIGlmICghX19iaW5hcnlfcHJlZChfX3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAgX192
YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0
dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0
cHV0SXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fdW5p
cXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykgewogIHJl
dHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmluYXJ5X3By
ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0Jp
bmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fcmVzdWx0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp
Y2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0
ZXJhdG9yX3RhZykgewogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3Qg
IT0gX19sYXN0KQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAq
KytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNh
dGU+CmlubGluZSBfT3V0cHV0SXRlciB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0
ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGlj
YXRlIF9fYmluYXJ5X3ByZWQpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jl
c3VsdDsKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBf
X2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnko
IF9fcmVzdWx0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJ
dGVyIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkgewog
IF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgcmV0dXJuIHVuaXF1
ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciB1bmlxdWUoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgX19maXJzdCA9IGFkamFjZW50
X2ZpbmQoX19maXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICByZXR1cm4gdW5pcXVlX2Nv
cHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsKfQoKIAoKdGVtcGxh
dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4Kdm9pZCBfX3JldmVyc2UoX0JpZGlyZWN0aW9u
YWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIAogICAgICAgICAgICAg
ICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewogIHdoaWxlICh0cnVlKQogICAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0gLS1fX2xhc3QpCiAgICAgIHJldHVybjsKICAg
IGVsc2UKICAgICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9fcmV2ZXJzZShfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3QpCiAgICBpdGVy
X3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp
b25hbEl0ZXI+CmlubGluZSB2b2lkIHJldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpIHsKICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0
LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9C
aWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHJldmVyc2Vf
Y29weShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewog
ICAgLS1fX2xhc3Q7CiAgICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAgKytfX3Jlc3VsdDsKICB9
CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0V1Y2xpZGVhblJpbmdF
bGVtZW50PgpfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19nY2QoX0V1Y2xpZGVhblJpbmdFbGVtZW50
IF9fbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBf
X24pCnsKICB3aGlsZSAoX19uICE9IDApIHsKICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX3Qg
PSBfX20gJSBfX247CiAgICBfX20gPSBfX247CiAgICBfX24gPSBfX3Q7CiAgfQogIHJldHVybiBf
X207Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX0Zv
cndhcmRJdGVyIF9fcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosCiAgICAgICAg
ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogIGlmIChfX2ZpcnN0ID09IF9f
bWlkZGxlKQogICAgcmV0dXJuIF9fbGFzdDsKICBpZiAoX19sYXN0ICA9PSBfX21pZGRsZSkKICAg
IHJldHVybiBfX2ZpcnN0OwoKICBfRm9yd2FyZEl0ZXIgX19maXJzdDIgPSBfX21pZGRsZTsKICBk
byB7CiAgICBzd2FwKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAgIGlmIChfX2ZpcnN0ID09
IF9fbWlkZGxlKQogICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogIH0gd2hpbGUgKF9fZmlyc3Qy
ICE9IF9fbGFzdCk7CgogIF9Gb3J3YXJkSXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0OwoKICBf
X2ZpcnN0MiA9IF9fbWlkZGxlOwoKICB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KSB7CiAgICBz
d2FwICgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICBpZiAoX19maXJzdCA9PSBfX21pZGRs
ZSkKICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAgIGVsc2UgaWYgKF9fZmlyc3QyID09IF9f
bGFzdCkKICAgICAgX19maXJzdDIgPSBfX21pZGRsZTsKICB9CgogIHJldHVybiBfX25ld19taWRk
bGU7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFu
Y2U+Cl9CaWRpcmVjdGlvbmFsSXRlciBfX3JvdGF0ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRs
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpIHsKICBpZiAoX19maXJzdCA9
PSBfX21pZGRsZSkKICAgIHJldHVybiBfX2xhc3Q7CiAgaWYgKF9fbGFzdCAgPT0gX19taWRkbGUp
CiAgICByZXR1cm4gX19maXJzdDsKCiAgX19yZXZlcnNlKF9fZmlyc3QsICBfX21pZGRsZSwgYmlk
aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3Qs
ICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CgogIHdoaWxlIChfX2ZpcnN0ICE9IF9f
bWlkZGxlICYmIF9fbWlkZGxlICE9IF9fbGFzdCkKICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9f
bGFzdCk7CgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKSB7CiAgICBfX3JldmVyc2UoX19taWRk
bGUsIF9fbGFzdCwgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgIHJldHVybiBf
X2xhc3Q7CiAgfQogIGVsc2UgewogICAgX19yZXZlcnNlKF9fZmlyc3QsICBfX21pZGRsZSwgYmlk
aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICByZXR1cm4gX19maXJzdDsKICB9Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBf
VHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSAqLCBfVHAgKikgewoKICBfRGlzdGFuY2Ug
X19uID0gX19sYXN0ICAgLSBfX2ZpcnN0OwogIF9EaXN0YW5jZSBfX2sgPSBfX21pZGRsZSAtIF9f
Zmlyc3Q7CiAgX0Rpc3RhbmNlIF9fbCA9IF9fbiAtIF9fazsKICBfUmFuZG9tQWNjZXNzSXRlciBf
X3Jlc3VsdCA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19taWRkbGUpOwoKICBpZiAoX19rID09IF9f
bCkgewogICAgc3dhcF9yYW5nZXMoX19maXJzdCwgX19taWRkbGUsIF9fbWlkZGxlKTsKICAgIHJl
dHVybiBfX3Jlc3VsdDsKICB9CgogIF9EaXN0YW5jZSBfX2QgPSBfX2djZChfX24sIF9fayk7Cgog
IGZvciAoX0Rpc3RhbmNlIF9faSA9IDA7IF9faSA8IF9fZDsgX19pKyspIHsKICAgIF9UcCBfX3Rt
cCA9ICpfX2ZpcnN0OwogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19wID0gX19maXJzdDsKCiAgICBp
ZiAoX19rIDwgX19sKSB7CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fbC9f
X2Q7IF9faisrKSB7CiAgICAgICAgaWYgKF9fcCA+IF9fZmlyc3QgKyBfX2wpIHsKICAgICAgICAg
ICpfX3AgPSAqKF9fcCAtIF9fbCk7CiAgICAgICAgICBfX3AgLT0gX19sOwogICAgICAgIH0KCiAg
ICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICBfX3AgKz0gX19rOwogICAgICB9CiAg
ICB9CgogICAgZWxzZSB7CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fay9f
X2QgLSAxOyBfX2ogKyspIHsKICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0gX19rKSB7CiAgICAg
ICAgICAqX19wID0gKihfX3AgKyBfX2spOwogICAgICAgICAgX19wICs9IF9fazsKICAgICAgICB9
CgogICAgICAgICpfX3AgPSAqIChfX3AgLSBfX2wpOwogICAgICAgIF9fcCAtPSBfX2w7CiAgICAg
IH0KICAgIH0KCiAgICAqX19wID0gX190bXA7CiAgICArK19fZmlyc3Q7CiAgfQoKICByZXR1cm4g
X19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2Fy
ZEl0ZXIgcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QpIHsKICByZXR1
cm4gX19yb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
X19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9y
X2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHJldHVybiBj
b3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fcmVzdWx0KSk7
Cn0KCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0Rpc3RhbmNlIF9f
cmFuZG9tX251bWJlcihfRGlzdGFuY2UgX19uKSB7CgoKCiAgcmV0dXJuIGxyYW5kNDgoKSAlIF9f
bjsKCn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQg
cmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsg
MTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19y
YW5kb21fbnVtYmVyKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgp2b2lkIHJhbmRv
bV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQp
IHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJ
dGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIGl0ZXJfc3dh
cChfX2ksIF9fZmlyc3QgKyBfX3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwp9CgogCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3Rh
bmNlPgpfT3V0cHV0SXRlciByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G
b3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX291dCwgY29uc3QgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9
IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNl
IF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsKCiAgd2hpbGUgKF9fbSA+IDApIHsKICAgIGlm
IChfX3JhbmRvbV9udW1iZXIoX19yZW1haW5pbmcpIDwgX19tKSB7CiAgICAgICpfX291dCA9ICpf
X2ZpcnN0OwogICAgICArK19fb3V0OwogICAgICAtLV9fbTsKICAgIH0KCiAgICAtLV9fcmVtYWlu
aW5nOwogICAgKytfX2ZpcnN0OwogIH0KICByZXR1cm4gX19vdXQ7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAg
ICAgICBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgpfT3V0cHV0SXRlciByYW5kb21fc2Ft
cGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX291dCwgY29uc3QgX0Rpc3RhbmNlIF9f
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9f
cmFuZCkKewogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwg
X19sYXN0LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNlIF9fbSA9IG1pbihfX24sIF9fcmVtYWlu
aW5nKTsKCiAgd2hpbGUgKF9fbSA+IDApIHsKICAgIGlmIChfX3JhbmQoX19yZW1haW5pbmcpIDwg
X19tKSB7CiAgICAgICpfX291dCA9ICpfX2ZpcnN0OwogICAgICArK19fb3V0OwogICAgICAtLV9f
bTsKICAgIH0KCiAgICAtLV9fcmVtYWluaW5nOwogICAgKytfX2ZpcnN0OwogIH0KICByZXR1cm4g
X19vdXQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUo
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX20g
PSAwOwogIF9EaXN0YW5jZSBfX3QgPSBfX247CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAm
JiBfX20gPCBfX247ICsrX19tLCArK19fZmlyc3QpIAogICAgX19vdXRbX19tXSA9ICpfX2ZpcnN0
OwoKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsrX190OwogICAgX0Rpc3RhbmNl
IF9fTSA9IF9fcmFuZG9tX251bWJlcihfX3QpOwogICAgaWYgKF9fTSA8IF9fbikKICAgICAgX19v
dXRbX19NXSA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9fb3V0ICsg
X19tOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBjbGFzcyBfRGlzdGFu
Y2U+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19vdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
UmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfRGlzdGFuY2UgX19uKQp7CiAgX0Rpc3RhbmNlIF9fbSA9IDA7CiAgX0Rp
c3RhbmNlIF9fdCA9IF9fbjsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fbSA8IF9f
bjsgKytfX20sICsrX19maXJzdCkKICAgIF9fb3V0W19fbV0gPSAqX19maXJzdDsKCiAgd2hpbGUg
KF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fdDsKICAgIF9EaXN0YW5jZSBfX00gPSBfX3Jh
bmQoX190KTsKICAgIGlmIChfX00gPCBfX24pCiAgICAgIF9fb3V0W19fTV0gPSAqX19maXJzdDsK
ICAgICsrX19maXJzdDsKICB9CgogIHJldHVybiBfX291dCArIF9fbTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgX1JhbmRvbUFj
Y2Vzc0l0ZXIKcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlciBfX291dF9sYXN0KSAKewogIHJldHVybiBfX3JhbmRvbV9zYW1wbGUoX19maXJz
dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZmlyc3QsIF9fb3V0X2xh
c3QgLSBfX291dF9maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIAogICAgICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRv
cj4KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnJhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X291dF9maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfbGFzdCwKICAgICAgICAgICAgICBf
UmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpIAp7CiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBs
ZShfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9maXJzdCwg
X19yYW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0
KTsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4K
X0ZvcndhcmRJdGVyIF9fcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAoJCSAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCgkJCSBfUHJlZGljYXRlICAgX19wcmVkLAoJCQkgZm9yd2Fy
ZF9pdGVyYXRvcl90YWcpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0
OwoKICB3aGlsZSAoX19wcmVkKCpfX2ZpcnN0KSkKICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0
KSByZXR1cm4gX19maXJzdDsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CgogIHdo
aWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCiAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAg
IHN3YXAoKl9fZmlyc3QsICpfX25leHQpOwogICAgICArK19fZmlyc3Q7CiAgICB9CgogIHJldHVy
biBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBf
UHJlZGljYXRlPgpfQmlkaXJlY3Rpb25hbEl0ZXIgX19wYXJ0aXRpb24oX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0LAoJCQkgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCgkJCSAgICAgICBiaWRp
cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGlsZSAodHJ1
ZSkKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0Owog
ICAgICBlbHNlIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICsrX19maXJzdDsKICAgICAg
ZWxzZQogICAgICAgIGJyZWFrOwogICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAodHJ1ZSkKICAgICAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNl
IGlmICghX19wcmVkKCpfX2xhc3QpKQogICAgICAgIC0tX19sYXN0OwogICAgICBlbHNlCiAgICAg
ICAgYnJlYWs7CiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICsrX19maXJzdDsK
ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cmlu
bGluZSBfRm9yd2FyZEl0ZXIgcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAJCQkg
ICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAoJCQkgICAgICBfUHJlZGljYXRlICAgX19wcmVkKSB7
CiAgcmV0dXJuIF9fcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9y
X2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9faW5wbGFj
ZV9zdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2Ug
X19sZW4pIHsKICBpZiAoX19sZW4gPT0gMSkKICAgIHJldHVybiBfX3ByZWQoKl9fZmlyc3QpID8g
X19sYXN0IDogX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogIGFk
dmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgcmV0dXJuIHJvdGF0ZShfX2lucGxhY2Vfc3Rh
YmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX21pZGRsZSwgX19wcmVkLCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiksCiAgICAgICAgICAgICAgICBf
X21pZGRsZSwKICAgICAgICAgICAgICAgIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fbWlk
ZGxlLCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbGVuIC0gX19sZW4gLyAyKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfUHJlZGljYXRlLCAKICAgICAgICAgIGNsYXNzIF9E
aXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpIAp7CiAg
aWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdDEg
PSBfX2ZpcnN0OwogICAgX1BvaW50ZXIgX19yZXN1bHQyID0gX19idWZmZXI7CiAgICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0IDsgKytfX2ZpcnN0KQogICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0
KSkgewogICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0MTsK
ICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7CiAgICAg
ICAgKytfX3Jlc3VsdDI7CiAgICAgIH0KICAgIGNvcHkoX19idWZmZXIsIF9fcmVzdWx0MiwgX19y
ZXN1bHQxKTsKICAgIHJldHVybiBfX3Jlc3VsdDE7CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJ
dGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7
CiAgICByZXR1cm4gcm90YXRlKF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSgKICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2ZpcnN0LCBfX21pZGRsZSwgX19wcmVkLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fbGVuIC8gMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpLAogICAgICAg
ICAgICAgICAgICAgIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgIF9fc3RhYmxlX3BhcnRp
dGlvbl9hZGFwdGl2ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSwgX19sYXN0
LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIsIF9f
YnVmZmVyLCBfX2J1ZmZlcl9zaXplKSk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l
IF9Gb3J3YXJkSXRlcgpfX3N0YWJsZV9wYXJ0aXRpb25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRl
IF9fcHJlZCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJk
SXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5zaXplKCkgPiAw
KQogICAgcmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3Qs
IF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl
KF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2J1Zi5iZWdpbigpLCBfX2J1Zi5zaXplKCkpOwogIGVsc2UKICAgIHJldHVybiBf
X2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJlcXVlc3Rl
ZF9zaXplKCkpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRp
Y2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlciBzdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
IF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRl
IF9fcHJlZCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBfX2ZpcnN0Owog
IGVsc2UKICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYXV4KF9fZmlyc3QsIF9fbGFzdCwg
X19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBf
X2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90
eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfVHAgX19waXZvdCkgCnsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUg
KCpfX2ZpcnN0IDwgX19waXZvdCkKICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xhc3Q7CiAgICB3
aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpCiAgICAgIC0tX19sYXN0OwogICAgaWYgKCEoX19maXJz
dCA8IF9fbGFzdCkpCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgaXRlcl9zd2FwKF9fZmlyc3Qs
IF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAgfQp9ICAgIAoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgpfUmFuZG9tQWNjZXNzSXRl
ciBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3Qs
IF9Db21wYXJlIF9fY29tcCkgCnsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKF9fY29tcCgq
X19maXJzdCwgX19waXZvdCkpCiAgICAgICsrX19maXJzdDsKICAgIC0tX19sYXN0OwogICAgd2hp
bGUgKF9fY29tcChfX3Bpdm90LCAqX19sYXN0KSkKICAgICAgLS1fX2xhc3Q7CiAgICBpZiAoIShf
X2ZpcnN0IDwgX19sYXN0KSkKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBpdGVyX3N3YXAoX19m
aXJzdCwgX19sYXN0KTsKICAgICsrX19maXJzdDsKICB9Cn0KCmNvbnN0IGludCBfX3N0bF90aHJl
c2hvbGQgPSAxNjsKCiAKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg
X1RwPgp2b2lkIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LCBfVHAgX192YWwpIHsKICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAg
LS1fX25leHQ7CiAgd2hpbGUgKF9fdmFsIDwgKl9fbmV4dCkgewogICAgKl9fbGFzdCA9ICpfX25l
eHQ7CiAgICBfX2xhc3QgPSBfX25leHQ7CiAgICAtLV9fbmV4dDsKICB9CiAgKl9fbGFzdCA9IF9f
dmFsOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX0NvbXBhcmU+CnZvaWQgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsIF9UcCBfX3ZhbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
Q29tcGFyZSBfX2NvbXApIHsKICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAg
LS1fX25leHQ7ICAKICB3aGlsZSAoX19jb21wKF9fdmFsLCAqX19uZXh0KSkgewogICAgKl9fbGFz
dCA9ICpfX25leHQ7CiAgICBfX2xhc3QgPSBfX25leHQ7CiAgICAtLV9fbmV4dDsKICB9CiAgKl9f
bGFzdCA9IF9fdmFsOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9UcD4KaW5saW5lIHZvaWQgX19saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LCBfVHAqKSB7CiAgX1RwIF9fdmFsID0gKl9fbGFzdDsKICBpZiAoX192YWwgPCAqX19maXJzdCkg
ewogICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOwogICAgKl9f
Zmlyc3QgPSBfX3ZhbDsKICB9CiAgZWxzZQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChf
X2xhc3QsIF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
cyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNlcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJlIF9fY29tcCkgewogIF9UcCBfX3ZhbCA9
ICpfX2xhc3Q7CiAgaWYgKF9fY29tcChfX3ZhbCwgKl9fZmlyc3QpKSB7CiAgICBjb3B5X2JhY2t3
YXJkKF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0ICsgMSk7CiAgICAqX19maXJzdCA9IF9fdmFsOwog
IH0KICBlbHNlCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9fbGFzdCwgX192YWwsIF9f
Y29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX2luc2Vy
dGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOyAKICBmb3IgKF9SYW5kb21B
Y2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9f
bGluZWFyX2luc2VydChfX2ZpcnN0LCBfX2ksIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQg
X19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApIHsKICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9f
aSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fbGluZWFyX2luc2Vy
dChfX2ZpcnN0LCBfX2ksIF9fdmFsdWVfdHlwZSggX19maXJzdCApICwgX19jb21wKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX191bmd1YXJk
ZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9U
cCopIHsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xh
c3Q7ICsrX19pKQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgX191bmd1
YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgX191
bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBl
KCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
cyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0X2F1
eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfVHAqLCBfQ29tcGFyZSBfX2NvbXApIHsKICBmb3IgKF9SYW5kb21BY2Nl
c3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgX191bmd1YXJk
ZWRfbGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgX191bmd1
YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7
CiAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1
ZV90eXBlKCBfX2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19maW5hbF9p
bnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIGlmIChfX2xhc3QgLSBf
X2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs
IF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQpOwogICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3Nv
cnQoX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19sYXN0KTsKICB9CiAgZWxzZQogICAgX19p
bnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkgewogIGlmIChfX2xhc3Qg
LSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmly
c3QsIF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQsIF9fY29tcCk7CiAgICBfX3VuZ3VhcmRlZF9p
bnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7
CiAgfQogIGVsc2UKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXAp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+CmlubGluZSBfU2l6ZSBfX2xnKF9TaXplIF9fbikg
ewogIF9TaXplIF9fazsKICBmb3IgKF9fayA9IDA7IF9fbiAhPSAxOyBfX24gPj49IDEpICsrX19r
OwogIHJldHVybiBfX2s7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh
c3MgX1RwLCBjbGFzcyBfU2l6ZT4Kdm9pZCBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsIF9UcCosCiAgICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0KQp7CiAg
d2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIGlmIChfX2Rl
cHRoX2xpbWl0ID09IDApIHsKICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19s
YXN0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLS1fX2RlcHRoX2xpbWl0OwogICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChf
X2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0
LCAoX1RwKikgMCwgX19kZXB0aF9saW1pdCk7CiAgICBfX2xhc3QgPSBfX2N1dDsKICB9Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6ZSwg
Y2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBf
VHAqLAogICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUg
X19jb21wKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsK
ICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3Qs
IF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICByZXR1cm47CiAgICB9CiAgICAtLV9fZGVw
dGhfbGltaXQ7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVk
X3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
VHAoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLAogICAgICAg
X19jb21wKTsKICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCopIDAsIF9f
ZGVwdGhfbGltaXQsIF9fY29tcCk7CiAgICBfX2xhc3QgPSBfX2N1dDsKICB9Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgc29ydChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBpZiAoX19maXJzdCAh
PSBfX2xhc3QpIHsKICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsCiAgICAgICAgICAgICAgICAg
ICAgIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyKTsKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3Nv
cnQoX19maXJzdCwgX19sYXN0KTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9Db21w
YXJlIF9fY29tcCkgewogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgX19pbnRyb3NvcnRf
bG9vcChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSgg
X19maXJzdCApICwKICAgICAgICAgICAgICAgICAgICAgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAq
IDIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX2ZpbmFsX2luc2VydGlvbl9z
b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICB9Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0KSB7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgX19pbnNlcnRp
b25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgcmV0dXJuOwogIH0KICBfUmFuZG9tQWNjZXNz
SXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogIF9faW5w
bGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgX19pbnBsYWNlX3N0YWJsZV9z
b3J0KF9fbWlkZGxlLCBfX2xhc3QpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwg
X19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2lu
cGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXAp
IHsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9f
Zmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIHJldHVybjsKICB9CiAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICBfX2lucGxh
Y2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgX19pbnBsYWNlX3N0
YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7CiAgX19tZXJnZV93aXRob3V0X2J1
ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
X19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19t
aWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAg
ICBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0
ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9f
bGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0
LCBfRGlzdGFuY2UgX19zdGVwX3NpemUpIHsKICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBf
X3N0ZXBfc2l6ZTsKCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewog
ICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAg
ICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0
ZXAsCiAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0KTsKICAgIF9fZmlyc3QgKz0gX190d29f
c3RlcDsKICB9CgogIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0
KSwgX19zdGVwX3NpemUpOwogIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwg
X19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgX19yZXN1bHQpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIs
CiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vf
c29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLAogICAgICAg
ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIF9EaXN0YW5jZSBfX3R3b19zdGVw
ID0gMiAqIF9fc3RlcF9zaXplOwoKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19z
dGVwKSB7CiAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsg
X190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAg
ICAgICAgIF9fY29tcCk7CiAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgfQogIF9fc3RlcF9z
aXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwoKICBt
ZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgX19maXJzdCArIF9f
c3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgX19yZXN1bHQsCiAgICAgICAgX19jb21wKTsKfQoK
Y29uc3QgaW50IF9fc3RsX2NodW5rX3NpemUgPSA3OwogICAgICAgIAp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX2NodW5rX2luc2VydGlv
bl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfRGlzdGFuY2UgX19jaHVua19zaXplKQp7
CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICBfX2luc2Vy
dGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOwogICAgX19maXJzdCAr
PSBfX2NodW5rX3NpemU7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNs
YXNzIF9Db21wYXJlPgp2b2lkIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVua19z
aXplLCBfQ29tcGFyZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2No
dW5rX3NpemUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1
bmtfc2l6ZSwgX19jb21wKTsKICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogIH0KICBfX2lu
c2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lk
IF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlKikg
ewogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX1BvaW50ZXIgX19idWZm
ZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9f
c3RsX2NodW5rX3NpemU7CiAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3Qs
IF9fc3RlcF9zaXplKTsKCiAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgIF9fbWVy
Z2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplKTsKICAg
IF9fc3RlcF9zaXplICo9IDI7CiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZm
ZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUpOwogICAgX19zdGVwX3NpemUgKj0gMjsKICB9
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNs
YXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfc29y
dF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfUG9pbnRlciBfX2J1ZmZl
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX0NvbXBhcmUgX19j
b21wKSB7CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfUG9pbnRlciBf
X2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgX0Rpc3RhbmNlIF9fc3RlcF9zaXpl
ID0gX19zdGxfY2h1bmtfc2l6ZTsKICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f
bGFzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CgogIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVu
KSB7CiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0
ZXBfc2l6ZSwgX19jb21wKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICBfX21lcmdlX3NvcnRf
bG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUsIF9fY29t
cCk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fc3RhYmxl
X3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpIHsK
ICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICBfUmFuZG9t
QWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICBpZiAoX19sZW4gPiBfX2J1
ZmZlcl9zaXplKSB7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9f
bWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9CiAgZWxzZSB7CiAg
ICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCAo
X0Rpc3RhbmNlKikwKTsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19s
YXN0LCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCk7CiAgfQogIF9fbWVyZ2VfYWRhcHRpdmUoX19m
aXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksIAog
ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIs
IF9fYnVmZmVyX3NpemUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
YXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2UsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+
CnZvaWQgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1Bv
aW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19i
dWZmZXJfc2l6ZSwgX0NvbXBhcmUgX19jb21wKSB7CiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFz
dCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2Zp
cnN0ICsgX19sZW47CiAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgX19zdGFibGVf
c29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUs
IAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19zdGFibGVfc29ydF9h
ZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgfQogIGVsc2UgewogICAgX19tZXJnZV9z
b3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgKF9EaXN0YW5jZSop
MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX21lcmdlX3Nv
cnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIChfRGlzdGFuY2UqKTAs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIH0KICBfX21lcmdlX2Fk
YXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9f
Zmlyc3QpLCAKICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSks
IF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0
YW5jZT4KaW5saW5lIHZvaWQgX19zdGFibGVfc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LCBfVHAqLCBfRGlzdGFuY2UqKSB7CiAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vz
c0l0ZXIsIF9UcD4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKGJ1Zi5iZWdpbigpID09IDAp
CiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICBlbHNlIAogICAg
X19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoYnVmLnNpemUoKSkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlLCBj
bGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgX19zdGFibGVfc29ydF9hdXgoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNz
SXRlciwgX1RwPiBidWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkK
ICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgZWxz
ZSAKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4o
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKGJ1Zi5zaXplKCkpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkg
ewogIF9fc3RhYmxlX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsCiAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5j
ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
LCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LCBfQ29tcGFyZSBfX2NvbXApIHsKICBfX3N0YWJsZV9zb3J0X2F1eChfX2ZpcnN0LCBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLAogICAgICAg
ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICwgCiAgICAgICAgICAgICAg
ICAgICAgX19jb21wKTsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfVHA+CnZvaWQgX19wYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LCBfVHAqKSB7CiAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsK
ICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsr
X19pKQogICAgaWYgKCpfX2kgPCAqX19maXJzdCkgCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwg
X19taWRkbGUsIF9faSwgX1RwKCpfX2kpLAogICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlw
ZSggX19maXJzdCApICk7CiAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBwYXJ0aWFsX3NvcnQoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0KSB7CiAgX19wYXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFz
dCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fcGFydGlhbF9zb3J0
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAog
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBh
cmUgX19jb21wKSB7CiAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogIGZv
ciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kp
CiAgICBpZiAoX19jb21wKCpfX2ksICpfX2ZpcnN0KSkKICAgICAgX19wb3BfaGVhcChfX2ZpcnN0
LCBfX21pZGRsZSwgX19pLCBfVHAoKl9faSksIF9fY29tcCwKICAgICAgICAgICAgICAgICBfX2Rp
c3RhbmNlX3R5cGUoIF9fZmlyc3QgKSApOwogIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwg
X19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29t
cGFyZT4KaW5saW5lIHZvaWQgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUg
X19jb21wKSB7CiAgX19wYXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX192
YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAg
IGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikgewog
IGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFz
dDsKICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJz
dDsKICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19y
ZXN1bHRfbGFzdCkgewogICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgKytf
X3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICArK19fZmlyc3Q7CiAgfQogIG1ha2VfaGVhcChfX3Jlc3Vs
dF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3Qp
IHsKICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdF9maXJzdCkgCiAgICAgIF9fYWRqdXN0X2hl
YXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICAgICAgICBfRGlz
dGFuY2UoX19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAg
ICAgICAgIF9UcCgqX19maXJzdCkpOwogICAgKytfX2ZpcnN0OwogIH0KICBzb3J0X2hlYXAoX19y
ZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAgcmV0dXJuIF9fcmVzdWx0X3JlYWxf
bGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fcmVzdWx0X2xhc3QpIHsKICByZXR1cm4gX19wYXJ0aWFsX3NvcnRfY29weShfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9sYXN0LCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fcmVzdWx0X2ZpcnN0ICkgLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Nv
bXBhcmUsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vz
c0l0ZXIgX19wYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1
bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSosIF9UcCopIHsKICBpZiAoX19y
ZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgd2hp
bGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xh
c3QpIHsKICAgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICsrX19yZXN1bHRf
cmVhbF9sYXN0OwogICAgKytfX2ZpcnN0OwogIH0KICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3Qs
IF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3Qp
IHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAgIF9fYWRq
dXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICAgICAg
ICBfRGlzdGFuY2UoX19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAg
ICAgICAgICAgICAgIF9UcCgqX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsK
ICAgICsrX19maXJzdDsKICB9CiAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9y
ZWFsX2xhc3QsIF9fY29tcCk7CiAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29t
cGFyZT4KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX3Jlc3VsdF9sYXN0LCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX19wYXJ0aWFs
X3NvcnRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fcmVzdWx0X2ZpcnN0ICkgLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCiAKCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fbnRoX2VsZW1l
bnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopIHsKICB3aGls
ZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0K
ICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkp
KTsKICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgZWxz
ZSAKICAgICAgX19sYXN0ID0gX19jdXQ7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg
X19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9p
ZCBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
ciBfX250aCwKICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
KSB7CiAgX19udGhfZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUo
IF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19udGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKSB7CiAgd2hpbGUg
KF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAg
ICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCkpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAg
ICAgX19maXJzdCA9IF9fY3V0OwogICAgZWxzZSAKICAgICAgX19sYXN0ID0gX19jdXQ7CiAgfQog
IF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBudGhf
ZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250
aCwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9f
Y29tcCkgewogIF9fbnRoX2VsZW1lbnQoX19maXJzdCwgX19udGgsIF9fbGFzdCwgX192YWx1ZV90
eXBlKCBfX2ZpcnN0ICkgLCBfX2NvbXApOwp9CgoKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2xvd2VyX2Jv
dW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfRGlzdGFuY2UqKSAKewogIF9EaXN0
YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rp
c3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+
IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAg
ICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7
CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9
IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UKICAgICAgX19sZW4gPSBfX2hhbGY7
CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
bGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX1RwJiBfX3ZhbCkgewogIHJldHVybiBfX2xvd2VyX2JvdW5kKF9fZmlyc3Qs
IF9fbGFzdCwgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBf
X2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBj
bGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19sb3dlcl9ib3Vu
ZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wLCBfRGlz
dGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xh
c3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsK
CiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlk
ZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19j
b21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAg
KytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVs
c2UKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUg
X0ZvcndhcmRJdGVyIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192
YWwsIF9Db21wYXJlIF9fY29tcCkgewogIHJldHVybiBfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9f
bGFzdCwgX192YWwsIF9fY29tcCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5
cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
VHAsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IF9UcCYgX192YWwsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAw
OwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7
CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hh
bGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21p
ZGRsZSwgX19oYWxmKTsKICAgIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgX19sZW4gPSBf
X2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmly
c3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogIH0KICByZXR1cm4g
X19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxp
bmUgX0ZvcndhcmRJdGVyIHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
X192YWwpIHsKICByZXR1cm4gX191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAog
ICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNs
YXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5j
ZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3Rh
bmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDAp
IHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBh
ZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxl
KSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19maXJzdCA9IF9fbWlk
ZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwog
ICAgfQogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
ciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9Gb3J3YXJkSXRlciB1cHBlcl9i
b3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAp
IHsKICByZXR1cm4gX191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAs
CiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+
CnBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fZXF1YWxfcmFuZ2UoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAg
ICAgICAgICAgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2Uo
X19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0
ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAg
X19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2Uo
X19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgX19m
aXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBf
X2hhbGYgLSAxOwogICAgfQogICAgZWxzZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgIF9f
bGVuID0gX19oYWxmOwogICAgZWxzZSB7CiAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmly
c3QsIF9fbWlkZGxlLCBfX3ZhbCk7CiAgICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAg
ICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwpOwogICAg
ICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0
KTsKICAgIH0KICB9CiAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9f
Zmlyc3QsIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
VHA+CmlubGluZSBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgplcXVhbF9yYW5nZShf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3Zh
bCkgewogIHJldHVybiBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCiAgICAg
ICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg
X0Rpc3RhbmNlPgpwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgpfX2VxdWFsX3Jhbmdl
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9f
dmFsLAogICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0
YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rp
c3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsK
CiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlk
ZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19j
b21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAg
KytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVs
c2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAg
ICBlbHNlIHsKICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9f
dmFsLCBfX2NvbXApOwogICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgX19yaWdo
dCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsLCBfX2NvbXApOwogICAg
ICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0
KTsKICAgIH0KICB9CiAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9f
Zmlyc3QsIF9fZmlyc3QpOwp9ICAgICAgICAgICAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBwYWlyPF9Gb3J3YXJkSXRlciwg
X0ZvcndhcmRJdGVyPgplcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KSB7CiAgcmV0dXJuIF9fZXF1YWxfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21w
LAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7Cn0g
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmJvb2wgYmluYXJ5X3Nl
YXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpIHsKICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJf
Ym91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYg
IShfX3ZhbCA8ICpfX2kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlPgpib29sIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f
dmFsLAogICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgX0ZvcndhcmRJdGVy
IF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCk7CiAgcmV0
dXJuIF9faSAhPSBfX2xhc3QgJiYgIV9fY29tcChfX3ZhbCwgKl9faSk7Cn0KCiAKCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVy
PgpfT3V0cHV0SXRlciBtZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy
IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgd2hp
bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYg
KCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAg
ICAgICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3QxOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJu
IGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNs
YXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyIG1l
cmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkgewogIHdo
aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlm
IChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQg
PSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0K
ICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwg
X19yZXN1bHQpKTsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xh
c3MgX0Rpc3RhbmNlPgp2b2lkIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwg
X0Rpc3RhbmNlIF9fbGVuMikgewogIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAg
IHJldHVybjsKICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgIGlmICgqX19taWRkbGUg
PCAqX19maXJzdCkKICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgIHJldHVy
bjsKICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgX0Rpc3RhbmNlIF9fbGVu
MTEgPSAwOwogIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICBpZiAoX19sZW4xID4gX19sZW4yKSB7
CiAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVu
MTEpOwogICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9f
Zmlyc3RfY3V0KTsKICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIp
OwogIH0KICBlbHNlIHsKICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgYWR2YW5jZShfX3Nl
Y29uZF9jdXQsIF9fbGVuMjIpOwogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0
LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0
X2N1dCwgX19sZW4xMSk7CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUKICAg
ID0gcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICBfX21lcmdl
X3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2xlbjExLCBfX2xlbjIyKTsKICBfX21lcmdlX3dpdGhvdXRf
YnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVu
MTEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29t
cGFyZT4Kdm9pZCBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlk
ZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5j
ZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsK
ICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAgICByZXR1cm47CiAgaWYgKF9fbGVu
MSArIF9fbGVuMiA9PSAyKSB7CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQog
ICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgcmV0dXJuOwogIH0KICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgX0Rp
c3RhbmNlIF9fbGVuMjIgPSAwOwogIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgIF9fbGVuMTEg
PSBfX2xlbjEgLyAyOwogICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICBfX3Nl
Y29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9f
Y29tcCk7CiAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICB9
CiAgZWxzZSB7CiAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgIGFkdmFuY2UoX19zZWNvbmRf
Y3V0LCBfX2xlbjIyKTsKICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19t
aWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2Zp
cnN0X2N1dCwgX19sZW4xMSk7CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUK
ICAgID0gcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICBfX21l
cmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9f
bGVuMTEsIF9fbGVuMjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIF9fbWVy
Z2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19s
ZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIs
IF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBf
QmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgpfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fcm90YXRlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIx
IF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkgewog
IF9CaWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXJfZW5kOwogIGlmIChfX2xlbjEgPiBfX2xlbjIg
JiYgX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19t
aWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX21p
ZGRsZSwgX19sYXN0KTsKICAgIHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9f
Zmlyc3QpOwogIH0KICBlbHNlIGlmIChfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX19i
dWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgY29weShf
X21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fYnVm
ZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgfQogIGVsc2UKICAgIHJldHVybiByb3RhdGUo
X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp
b25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyMz4KX0JpZGlyZWN0aW9uYWxJdGVyMyBfX21lcmdlX2JhY2t3YXJkKF9C
aWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBf
X3Jlc3VsdCkgewogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgcmV0dXJuIGNvcHlfYmFj
a3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICBpZiAoX19maXJzdDIgPT0gX19s
YXN0MikKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3Vs
dCk7CiAgLS1fX2xhc3QxOwogIC0tX19sYXN0MjsKICB3aGlsZSAodHJ1ZSkgewogICAgaWYgKCpf
X2xhc3QyIDwgKl9fbGFzdDEpIHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAg
aWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19m
aXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICB9CiAgICBl
bHNlIHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAgaWYgKF9fZmlyc3QyID09
IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0
MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDI7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAg
ICAgIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjMsIGNsYXNzIF9Db21wYXJlPgpfQmlkaXJlY3Rp
b25hbEl0ZXIzIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9fZmlyc3QxID09IF9f
bGFzdDEpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1
bHQpOwogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQo
X19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1fX2xhc3QyOwog
IHdoaWxlICh0cnVlKSB7CiAgICBpZiAoX19jb21wKCpfX2xhc3QyLCAqX19sYXN0MSkpIHsKICAg
ICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEp
CiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1
bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKi0tX19yZXN1bHQg
PSAqX19sYXN0MjsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJu
IGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9f
bGFzdDI7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBj
bGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Qb2ludGVyPgp2b2lkIF9fbWVyZ2VfYWRhcHRpdmUoX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19taWRkbGUsIAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0
YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rp
c3RhbmNlIF9fYnVmZmVyX3NpemUpIHsKICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEg
PD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2Zp
cnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2Vu
ZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAgfQogIGVsc2UgaWYgKF9fbGVuMiA8PSBf
X2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxl
LCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRk
bGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgfQogIGVsc2UgewogICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsK
ICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAg
ICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVu
MTEpOwogICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAq
X19maXJzdF9jdXQpOwogICAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xl
bjIyKTsgCiAgICB9CiAgICBlbHNlIHsKICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAg
IGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgX19maXJzdF9jdXQgPSB1cHBl
cl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgIGRpc3RhbmNl
KF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX25ld19taWRkbGUgPQogICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwg
X19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAg
ICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJnZV9h
ZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAg
ICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBf
X21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVu
MSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVm
ZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25h
bEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1BvaW50ZXIsCiAgICAgICAgICBjbGFzcyBf
Q29tcGFyZT4Kdm9pZCBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0
LCAKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwgCiAg
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAg
ICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIGlmIChfX2xlbjEgPD0g
X19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZl
cl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBtZXJnZShfX2J1
ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXApOwog
IH0KICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19i
dWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBfX21lcmdl
X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgfQogIGVsc2UgewogICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAg
IF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAg
X19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEp
OwogICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19m
aXJzdF9jdXQsIF9fY29tcCk7CiAgICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQs
IF9fbGVuMjIpOyAgIAogICAgfQogICAgZWxzZSB7CiAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAy
OwogICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgIF9fZmlyc3RfY3V0
ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7
CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIH0KICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICBfX3JvdGF0ZV9hZGFwdGl2
ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4xIC0gX19sZW4xMSwK
ICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUp
OwogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxl
LCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZm
ZXJfc2l6ZSwgX19jb21wKTsKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3Nl
Y29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAg
X19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgfQp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9E
aXN0YW5jZT4KaW5saW5lIHZvaWQgX19pbnBsYWNlX21lcmdlX2F1eChfQmlkaXJlY3Rpb25hbEl0
ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKikgewogIF9EaXN0YW5jZSBfX2xlbjEg
PSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEpOwogIF9EaXN0YW5jZSBf
X2xlbjIgPSAwOwogIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMik7CgogIF9UZW1w
b3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xh
c3QpOwogIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVy
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yKTsKICBlbHNlCiAgICBf
X21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4y
LAogICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2UoX19idWYuc2l6
ZSgpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9UcCwg
CiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBf
X2lucGxhY2VfbWVyZ2VfYXV4KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfVHAq
LCBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkgewogIF9EaXN0YW5jZSBfX2xlbjEgPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2xlbjEpOwogIF9EaXN0YW5jZSBfX2xlbjIgPSAwOwogIGRpc3RhbmNlKF9fbWlkZGxl
LCBfX2xhc3QsIF9fbGVuMik7CgogIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRl
ciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5iZWdpbigpID09IDAp
CiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9f
bGVuMSwgX19sZW4yLCBfX2NvbXApOwogIGVsc2UKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJz
dCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAg
IF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZShfX2J1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAg
ICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgppbmxp
bmUgdm9pZCBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmly
c3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgcmV0dXJuOwogIF9faW5w
bGFjZV9tZXJnZV9hdXgoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICwgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0
ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0NvbXBh
cmU+CmlubGluZSB2b2lkIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9Db21w
YXJlIF9fY29tcCkgewogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09IF9f
bGFzdCkKICAgIHJldHVybjsKICBfX2lucGxhY2VfbWVyZ2VfYXV4KF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAs
IF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICwKICAgICAgICAgICAgICAgICAgICAgIF9fY29t
cCk7Cn0KCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0
SXRlcjI+CmJvb2wgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f
bGFzdDEsCiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f
bGFzdDIpIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh
c3QyKQogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgZWxzZSBpZigqX19maXJzdDEgPCAqX19maXJzdDIpIAogICAgICArK19fZmlyc3QxOwogICAg
ZWxzZQogICAgICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoKICByZXR1cm4gX19maXJzdDIgPT0g
X19sYXN0MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVy
MiwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
bnB1dEl0ZXIyIF9fbGFzdDIsIF9Db21wYXJlIF9fY29tcCkgewogIHdoaWxlIChfX2ZpcnN0MSAh
PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0
MiwgKl9fZmlyc3QxKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBpZihfX2NvbXAoKl9f
Zmlyc3QxLCAqX19maXJzdDIpKSAKICAgICAgKytfX2ZpcnN0MTsKICAgIGVsc2UKICAgICAgKytf
X2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRw
dXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1
dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0KSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g
X19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAqX19yZXN1
bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICBlbHNlIGlmICgqX19m
aXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAr
K19fZmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsK
ICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgICsrX19yZXN1bHQ7
CiAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xh
c3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9J
bnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpf
T3V0cHV0SXRlciBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f
bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0
SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LCBfQ29tcGFyZSBfX2NvbXApIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp
cnN0MiAhPSBfX2xhc3QyKSB7CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkg
ewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAg
ICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3Vs
dCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7
CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0
MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRw
dXRJdGVyIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz
dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQpIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp
cnN0MiAhPSBfX2xhc3QyKSAKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIAogICAgICAr
K19fZmlyc3QxOwogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSAKICAgICAgKytf
X2ZpcnN0MjsKICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsr
X19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0
dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1
dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0
cHV0SXRlciBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApIHsKICB3aGlsZSAoX19maXJzdDEg
IT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJz
dDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlIGlmIChfX2NvbXAoKl9f
Zmlyc3QyLCAqX19maXJzdDEpKQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsK
ICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpf
T3V0cHV0SXRlciBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz
dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRw
dXRJdGVyIF9fcmVzdWx0KSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MikKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgKl9f
cmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0Owog
ICAgfQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICArK19fZmlyc3Qy
OwogICAgZWxzZSB7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAg
cmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsIAog
ICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyIHNldF9kaWZmZXJlbmNlKF9JbnB1
dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2Nv
bXApIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy
KQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQog
ICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgKytfX2ZpcnN0
MjsKICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQog
IHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpf
T3V0cHV0SXRlciAKc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx
LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl
cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAg
ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jl
c3VsdDsKICAgIH0KICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7
CiAgICB9CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAg
IH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0
MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5w
dXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091
dHB1dEl0ZXIgCnNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg
X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy
IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXApIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh
c3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAg
fQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAqX19y
ZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAg
ICB9CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0K
ICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwg
X19yZXN1bHQpKTsKfQoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2Fy
ZEl0ZXIgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJk
SXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpIAog
ICAgaWYgKCpfX3Jlc3VsdCA8ICpfX2ZpcnN0KQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAg
cmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
Q29tcGFyZT4KX0ZvcndhcmRJdGVyIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg
X19jb21wKSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9y
d2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0
KSAKICAgIGlmIChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJz
dDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9G
b3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0Zv
cndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFz
dCkgCiAgICBpZiAoKl9fZmlyc3QgPCAqX19yZXN1bHQpCiAgICAgIF9fcmVzdWx0ID0gX19maXJz
dDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs
YXNzIF9Db21wYXJlPgpfRm9yd2FyZEl0ZXIgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29t
cGFyZSBfX2NvbXApIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0Owog
IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBf
X2xhc3QpIAogICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0KSkKICAgICAgX19yZXN1
bHQgPSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyPgpib29sIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpIHsKICBpZiAoX19maXJzdCA9
PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9f
Zmlyc3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAg
X19pID0gX19sYXN0OwogIC0tX19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2lpID0gX19pOwogICAgLS1fX2k7CiAgICBpZiAoKl9faSA8ICpfX2lpKSB7CiAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghKCpfX2kgPCAqLS1f
X2opKQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgIHJldmVyc2Uo
X19paSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX19pID09IF9f
Zmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gZmFs
c2U7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFz
cyBfQ29tcGFyZT4KYm9vbCBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
cnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNl
OwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kg
PT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAg
Zm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwog
ICAgaWYgKF9fY29tcCgqX19pLCAqX19paSkpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
aiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCFfX2NvbXAoKl9faSwgKi0tX19qKSkKICAgICAgICB7
fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7
CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAg
IHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0K
fQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4KYm9vbCBwcmV2X3Blcm11dGF0
aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0
KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQog
ICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKCpfX2lp
IDwgKl9faSkgewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3
aGlsZSAoISgqLS1fX2ogPCAqX19pKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBf
X2opOwogICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAg
fQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0
KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRp
cmVjdGlvbmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsK
ICArK19faTsKICBpZiAoX19pID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBf
X2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkg
PSBfX2k7CiAgICAtLV9faTsKICAgIGlmIChfX2NvbXAoKl9faWksICpfX2kpKSB7CiAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghX19jb21wKCotLV9f
aiwgKl9faSkpCiAgICAgICAge30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2
ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kg
PT0gX19maXJzdCkgewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVy
biBmYWxzZTsKICAgIH0KICB9Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfRm9yd2FyZEl0ZXI+Cl9JbnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmly
c3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyKQp7CiAgZm9yICggOyBfX2ZpcnN0
MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxKSAKICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9
IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgIGlmICgqX19maXJz
dDEgPT0gKl9faXRlcikKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgcmV0dXJuIF9fbGFzdDE7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9CaW5hcnlQcmVkaWNhdGU+Cl9JbnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKICBmb3IgKCA7IF9fZmlyc3QxICE9
IF9fbGFzdDE7ICsrX19maXJzdDEpIAogICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19m
aXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgaWYgKF9fY29tcCgqX19m
aXJzdDEsICpfX2l0ZXIpKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICByZXR1cm4gX19sYXN0
MTsKfQoKCiAKIAogCiAKCiAKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9G
b3J3YXJkSXRlcjI+Cl9Gb3J3YXJkSXRlcjEgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmly
c3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsK
ICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2Ugewog
ICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICB3aGlsZSAoMSkgewogICAg
ICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBf
X2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19s
YXN0MSkKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIGVsc2UgewogICAgICAgIF9fcmVz
dWx0ID0gX19uZXdfcmVzdWx0OwogICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAg
ICAgICsrX19maXJzdDE7CiAgICAgIH0KICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpbmFyeVBy
ZWRpY2F0ZT4KX0ZvcndhcmRJdGVyMSBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEs
IF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk
SXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQp7CiAgaWYgKF9fZmly
c3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9Gb3J3YXJk
SXRlcjEgX19yZXN1bHQgPSBfX2xhc3QxOwogICAgd2hpbGUgKDEpIHsKICAgICAgX0ZvcndhcmRJ
dGVyMSBfX25ld19yZXN1bHQKICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19m
aXJzdDIsIF9fbGFzdDIsIF9fY29tcCk7CiAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0
MSkKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIGVsc2UgewogICAgICAgIF9fcmVzdWx0
ID0gX19uZXdfcmVzdWx0OwogICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAg
ICsrX19maXJzdDE7CiAgICAgIH0KICAgIH0KICB9Cn0KCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMj4KX0JpZGlyZWN0aW9u
YWxJdGVyMQpfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVj
dGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmly
c3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZWRlZiBy
ZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICB0eXBlZGVm
IHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICBfUmV2
SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7
CiAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBf
X3JsYXN0Mik7CgogIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICByZXR1cm4gX19sYXN0
MTsKICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQu
YmFzZSgpOwogICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3Qy
KSk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0
aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9C
aW5hcnlQcmVkaWNhdGU+Cl9CaWRpcmVjdGlvbmFsSXRlcjEKX19maW5kX2VuZChfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xh
c3QyLAogICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZywgCiAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKICB0
eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwog
IHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7
CgogIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9f
Zmlyc3QyKTsKICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3Qx
KSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19s
YXN0MiksIF9fcmxhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsK
CiAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2Ug
ewogICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAg
ICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAgIHJl
dHVybiBfX3Jlc3VsdDsKICB9Cn0KCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwg
Y2xhc3MgX0ZvcndhcmRJdGVyMj4KaW5saW5lIF9Gb3J3YXJkSXRlcjEgCmZpbmRfZW5kKF9Gb3J3
YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwgCiAgICAgICAgIF9Gb3J3
YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKewogIHJldHVybiBfX2Zp
bmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAg
ICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0MSApICwKICAgICAgICAgICAgICAg
ICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0MiApICk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCAKICAgICAgICAgIGNsYXNzIF9C
aW5hcnlQcmVkaWNhdGU+CmlubGluZSBfRm9yd2FyZEl0ZXIxIApmaW5kX2VuZChfRm9yd2FyZEl0
ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsIAogICAgICAgICBfRm9yd2FyZEl0
ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgIF9CaW5hcnlQcmVk
aWNhdGUgX19jb21wKQp7CiAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9f
Zmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnko
IF9fZmlyc3QxICkgLAogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9f
Zmlyc3QyICkgLAogICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCiAKIAogCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KYm9vbCBfX2lzX2hl
YXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5j
ZSBfX3BhcmVudCA9IDA7CiAgZm9yIChfRGlzdGFuY2UgX19jaGlsZCA9IDE7IF9fY2hpbGQgPCBf
X247ICsrX19jaGlsZCkgewogICAgaWYgKF9fZmlyc3RbX19wYXJlbnRdIDwgX19maXJzdFtfX2No
aWxkXSkgCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICgoX19jaGlsZCAmIDEpID09IDApCiAg
ICAgICsrX19wYXJlbnQ7CiAgfQogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmlu
Zz4KYm9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1N0cmljdFdlYWtP
cmRlcmluZyBfX2NvbXAsCiAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX24pCnsKICBfRGlzdGFu
Y2UgX19wYXJlbnQgPSAwOwogIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwg
X19uOyArK19fY2hpbGQpIHsKICAgIGlmIChfX2NvbXAoX19maXJzdFtfX3BhcmVudF0sIF9fZmly
c3RbX19jaGlsZF0pKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoKF9fY2hpbGQgJiAxKSA9
PSAwKQogICAgICArK19fcGFyZW50OwogIH0KICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgYm9vbCBpc19oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewogIHJldHVybiBfX2lzX2hl
YXAoX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXIsIGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CmlubGluZSBib29sIGlzX2hl
YXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CiAgcmV0dXJu
IF9faXNfaGVhcChfX2ZpcnN0LCBfX2NvbXAsIF9fbGFzdCAtIF9fZmlyc3QpOwp9CgogCiAKIAoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KYm9vbCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp
CiAgICByZXR1cm4gdHJ1ZTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgZm9y
ICgrK19fbmV4dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQp
IHsKICAgIGlmICgqX19uZXh0IDwgKl9fZmlyc3QpCiAgICAgIHJldHVybiBmYWxzZTsKICB9Cgog
IHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU3Ry
aWN0V2Vha09yZGVyaW5nPgpib29sIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2Nv
bXApCnsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gdHJ1ZTsKCiAgX0Zvcndh
cmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgZm9yICgrK19fbmV4dDsgX19uZXh0ICE9IF9fbGFz
dDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpIHsKICAgIGlmIChfX2NvbXAoKl9fbmV4dCwg
Kl9fZmlyc3QpKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQoKICByZXR1cm4gdHJ1ZTsKfQoKCgoK
CiAKCgoKIAogCiAKIyA0MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9oYXNodGFibGUuaCIgMiAzCgoKIyAxICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs
X2Z1bmN0aW9uLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCnRl
bXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24g
ewogIHR5cGVkZWYgX0FyZyBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRf
dHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1
bHQ+CnN0cnVjdCBiaW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1l
bnRfdHlwZTsKICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYg
X1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsgICAgICAKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVy
YXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194
ICsgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1Rw
JiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25z
dCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICogX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf
VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv
bnN0IHsgcmV0dXJuIF9feCAvIF9feTsgfQp9OwoKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5s
aW5lIF9UcCBpZGVudGl0eV9lbGVtZW50KHBsdXM8X1RwPikgewogIHJldHVybiBfVHAoMCk7Cn0K
dGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9UcCBpZGVudGl0eV9lbGVtZW50KG11bHRpcGxp
ZXM8X1RwPikgewogIHJldHVybiBfVHAoMSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBtb2R1bHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gCnsKICBfVHAg
b3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJu
IF9feCAlIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5lZ2F0ZSA6IHB1
YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPiAKewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9U
cCYgX194KSBjb25zdCB7IHJldHVybiAtX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz
dHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsK
ICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7
IHJldHVybiBfX3ggPT0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qgbm90
X2VxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9v
bCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1
cm4gX194ICE9IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXIg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9y
KCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPiBf
X3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzIDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg
X194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDwgX195OyB9Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID49IF9feTsgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IGxlc3NfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U
cCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9U
cCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPD0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3QgbG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs
Ym9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp
IGNvbnN0IHsgcmV0dXJuIF9feCAmJiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0
cnVjdCBsb2dpY2FsX29yIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsK
ICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7
IHJldHVybiBfX3ggfHwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9n
aWNhbF9ub3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLGJvb2w+CnsKICBib29sIG9wZXJh
dG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuICFfX3g7IH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfUHJlZGljYXRlPgpjbGFzcyB1bmFyeV9uZWdhdGUKICA6IHB1YmxpYyB1bmFyeV9m
dW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlLCBib29sPiB7CnByb3Rl
Y3RlZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCB1bmFyeV9uZWdh
dGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0
b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0
IHsKICAgIHJldHVybiAhX01fcHJlZChfX3gpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJl
ZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+IApub3QxKGNvbnN0IF9QcmVk
aWNhdGUmIF9fcHJlZCkKewogIHJldHVybiB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVk
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+IApjbGFzcyBiaW5hcnlfbmVnYXRlIAog
IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1
bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRl
OjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD4g
ewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgYmlu
YXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9v
bCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5
cGUmIF9feCwgCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNl
Y29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9f
eCwgX195KTsgCiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBiaW5h
cnlfbmVnYXRlPF9QcmVkaWNhdGU+IApub3QyKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewog
IHJldHVybiBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfT3BlcmF0aW9uPiAKY2xhc3MgYmluZGVyMXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp
b248dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVj
dGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1l
bnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gs
CiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5
cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJh
dGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246
OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwg
X194KTsgCiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5s
aW5lIGJpbmRlcjFzdDxfT3BlcmF0aW9uPiAKYmluZDFzdChjb25zdCBfT3BlcmF0aW9uJiBfX29w
ZXIsIGNvbnN0IF9UcCYgX194KSAKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmly
c3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBiaW5kZXIxc3Q8X09wZXJhdGlv
bj4oX19vcGVyLCBfQXJnMV90eXBlKF9feCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlv
bj4gCmNsYXNzIGJpbmRlcjJuZAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9P
cGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRp
b24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgdmFsdWU7
CnB1YmxpYzoKICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBj
b25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KSAKICAg
ICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0
X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3Vt
ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOyAKICB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5k
PF9PcGVyYXRpb24+IApiaW5kMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9fb3BlciwgY29uc3QgX1Rw
JiBfX3gpIAp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRf
dHlwZSBfQXJnMl90eXBlOwogIHJldHVybiBiaW5kZXIybmQ8X09wZXJhdGlvbj4oX19vcGVyLCBf
QXJnMl90eXBlKF9feCkpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNz
IF9PcGVyYXRpb24yPgpjbGFzcyB1bmFyeV9jb21wb3NlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp
b248dHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlPiAKewpwcm90ZWN0ZWQ6
CiAgX09wZXJhdGlvbjEgX19vcDE7CiAgX09wZXJhdGlvbjIgX19vcDI7CnB1YmxpYzoKICB1bmFy
eV9jb21wb3NlKGNvbnN0IF9PcGVyYXRpb24xJiBfX3gsIGNvbnN0IF9PcGVyYXRpb24yJiBfX3kp
IAogICAgOiBfX29wMShfX3gpLCBfX29wMihfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjE6
OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJn
dW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX19vcDEoX19vcDIoX194KSk7CiAg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMj4KaW5s
aW5lIHVuYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjI+IApjb21wb3NlMShjb25z
dCBfT3BlcmF0aW9uMSYgX19vcDEsIGNvbnN0IF9PcGVyYXRpb24yJiBfX29wMikKewogIHJldHVy
biB1bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yPihfX29wMSwgX19vcDIpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yLCBjbGFzcyBf
T3BlcmF0aW9uMz4KY2xhc3MgYmluYXJ5X2NvbXBvc2UKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv
bjx0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgog
IF9PcGVyYXRpb24xIF9NX29wMTsKICBfT3BlcmF0aW9uMiBfTV9vcDI7CiAgX09wZXJhdGlvbjMg
X01fb3AzOwpwdWJsaWM6CiAgYmluYXJ5X2NvbXBvc2UoY29uc3QgX09wZXJhdGlvbjEmIF9feCwg
Y29uc3QgX09wZXJhdGlvbjImIF9feSwgCiAgICAgICAgICAgICAgICAgY29uc3QgX09wZXJhdGlv
bjMmIF9feikgCiAgICA6IF9NX29wMShfX3gpLCBfTV9vcDIoX195KSwgX01fb3AzKF9feikgeyB9
CiAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0
eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1
cm4gX01fb3AxKF9NX29wMihfX3gpLCBfTV9vcDMoX194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+Cmlu
bGluZSBiaW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSwgX09wZXJhdGlvbjIsIF9PcGVyYXRpb24z
PiAKY29tcG9zZTIoY29uc3QgX09wZXJhdGlvbjEmIF9fb3AxLCBjb25zdCBfT3BlcmF0aW9uMiYg
X19vcDIsIAogICAgICAgICBjb25zdCBfT3BlcmF0aW9uMyYgX19vcDMpCnsKICByZXR1cm4gYmlu
YXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjIsX09wZXJhdGlvbjM+CiAgICAoX19v
cDEsIF9fb3AyLCBfX29wMyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0
PgpjbGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9BcmcsIF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpw
dWJsaWM6CiAgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRl
cl90b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7
fQogIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9f
eCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9p
bnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpf
X3gpKF9BcmcpKQp7CiAgcmV0dXJuIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jl
c3VsdD4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3Mg
X1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24gOiAKICBwdWJsaWMgYmlu
YXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogICAgX1Jlc3Vs
dCAoKl9NX3B0cikoX0FyZzEsIF9BcmcyKTsKcHVibGljOgogICAgcG9pbnRlcl90b19iaW5hcnlf
ZnVuY3Rpb24oKSB7fQogICAgZXhwbGljaXQgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oX1Jl
c3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgCiAgICAgIDogX01fcHRyKF9feCkge30KICAgIF9S
ZXN1bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICByZXR1
cm4gX01fcHRyKF9feCwgX195KTsKICAgIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xh
c3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlv
bjxfQXJnMSxfQXJnMixfUmVzdWx0PiAKcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0Fy
ZzIpKSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9S
ZXN1bHQ+KF9feCk7Cn0KCiAKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6
IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPiB7CiAgY29uc3QgX1RwJiBvcGVyYXRvcigp
KGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHA+IHN0cnVjdCBpZGVudGl0eSA6IHB1YmxpYyBfSWRlbnRpdHk8X1RwPiB7fTsKCiAKdGVt
cGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5j
dGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGU+IHsKICBjb25zdCB0eXBlbmFt
ZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7
CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3Ry
dWN0IF9TZWxlY3QybmQgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9Q
YWlyOjpzZWNvbmRfdHlwZT4KewogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYg
b3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29u
ZDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+IHN0cnVjdCBzZWxlY3Qxc3QgOiBwdWJs
aWMgX1NlbGVjdDFzdDxfUGFpcj4ge307CnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4gc3RydWN0IHNl
bGVjdDJuZCA6IHB1YmxpYyBfU2VsZWN0Mm5kPF9QYWlyPiB7fTsKCiAKdGVtcGxhdGUgPGNsYXNz
IF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IF9Qcm9qZWN0MXN0IDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9BcmcxPiB7CiAgX0FyZzEgb3BlcmF0b3IoKShjb25zdCBf
QXJnMSYgX194LCBjb25zdCBfQXJnMiYpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IF9Qcm9qZWN0Mm5kIDogcHVibGlj
IGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9BcmcyPiB7CiAgX0FyZzIgb3BlcmF0b3Io
KShjb25zdCBfQXJnMSYsIGNvbnN0IF9BcmcyJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feTsgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4gCnN0cnVjdCBwcm9qZWN0MXN0
IDogcHVibGljIF9Qcm9qZWN0MXN0PF9BcmcxLCBfQXJnMj4ge307Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgcHJvamVjdDJuZCA6IHB1YmxpYyBfUHJvamVjdDJu
ZDxfQXJnMSwgX0FyZzI+IHt9OwoKIAogCiAKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CnN0cnVj
dCBjb25zdGFudF92b2lkX2Z1bgp7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwogIHJl
c3VsdF90eXBlIF9fdmFsOwogIGNvbnN0YW50X3ZvaWRfZnVuKGNvbnN0IHJlc3VsdF90eXBlJiBf
X3YpIDogX192YWwoX192KSB7fQogIGNvbnN0IHJlc3VsdF90eXBlJiBvcGVyYXRvcigpKCkgY29u
c3QgeyByZXR1cm4gX192YWw7IH0KfTsgIAoKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFz
cyBfQXJndW1lbnQgPSBfUmVzdWx0PgoKCgpzdHJ1Y3QgY29uc3RhbnRfdW5hcnlfZnVuIDogcHVi
bGljIHVuYXJ5X2Z1bmN0aW9uPF9Bcmd1bWVudCwgX1Jlc3VsdD4gewogIF9SZXN1bHQgX01fdmFs
OwogIGNvbnN0YW50X3VuYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpIDogX01fdmFsKF9fdikg
e30KICBjb25zdCBfUmVzdWx0JiBvcGVyYXRvcigpKGNvbnN0IF9Bcmd1bWVudCYpIGNvbnN0IHsg
cmV0dXJuIF9NX3ZhbDsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJn
MSA9IF9SZXN1bHQsIGNsYXNzIF9BcmcyID0gX0FyZzE+CgoKCnN0cnVjdCBjb25zdGFudF9iaW5h
cnlfZnVuIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9SZXN1bHQ+IHsK
ICBfUmVzdWx0IF9NX3ZhbDsKICBjb25zdGFudF9iaW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9f
dikgOiBfTV92YWwoX192KSB7fQogIGNvbnN0IF9SZXN1bHQmIG9wZXJhdG9yKCkoY29uc3QgX0Fy
ZzEmLCBjb25zdCBfQXJnMiYpIGNvbnN0IHsKICAgIHJldHVybiBfTV92YWw7CiAgfQp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PiBj
b25zdGFudDAoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRfdm9pZF9m
dW48X1Jlc3VsdD4oX192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNv
bnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQ+IGNvbnN0YW50MShjb25zdCBfUmVzdWx0
JiBfX3ZhbCkKewogIHJldHVybiBjb25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0Pihf
X3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfYmluYXJ5
X2Z1bjxfUmVzdWx0LF9SZXN1bHQsX1Jlc3VsdD4gCmNvbnN0YW50Mihjb25zdCBfUmVzdWx0JiBf
X3ZhbCkKewogIHJldHVybiBjb25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVz
dWx0PihfX3ZhbCk7Cn0KCiAKIApjbGFzcyBzdWJ0cmFjdGl2ZV9ybmcgOiBwdWJsaWMgdW5hcnlf
ZnVuY3Rpb248dW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQ+IHsKcHJpdmF0ZToKICB1bnNpZ25l
ZCBpbnQgX01fdGFibGVbNTVdOwogIHNpemVfdCBfTV9pbmRleDE7CiAgc2l6ZV90IF9NX2luZGV4
MjsKcHVibGljOgogIHVuc2lnbmVkIGludCBvcGVyYXRvcigpKHVuc2lnbmVkIGludCBfX2xpbWl0
KSB7CiAgICBfTV9pbmRleDEgPSAoX01faW5kZXgxICsgMSkgJSA1NTsKICAgIF9NX2luZGV4MiA9
IChfTV9pbmRleDIgKyAxKSAlIDU1OwogICAgX01fdGFibGVbX01faW5kZXgxXSA9IF9NX3RhYmxl
W19NX2luZGV4MV0gLSBfTV90YWJsZVtfTV9pbmRleDJdOwogICAgcmV0dXJuIF9NX3RhYmxlW19N
X2luZGV4MV0gJSBfX2xpbWl0OwogIH0KCiAgdm9pZCBfTV9pbml0aWFsaXplKHVuc2lnbmVkIGlu
dCBfX3NlZWQpCiAgewogICAgdW5zaWduZWQgaW50IF9fayA9IDE7CiAgICBfTV90YWJsZVs1NF0g
PSBfX3NlZWQ7CiAgICBzaXplX3QgX19pOwogICAgZm9yIChfX2kgPSAwOyBfX2kgPCA1NDsgX19p
KyspIHsKICAgICAgICBzaXplX3QgX19paSA9ICgyMSAqIChfX2kgKyAxKSAlIDU1KSAtIDE7CiAg
ICAgICAgX01fdGFibGVbX19paV0gPSBfX2s7CiAgICAgICAgX19rID0gX19zZWVkIC0gX19rOwog
ICAgICAgIF9fc2VlZCA9IF9NX3RhYmxlW19faWldOwogICAgfQogICAgZm9yIChpbnQgX19sb29w
ID0gMDsgX19sb29wIDwgNDsgX19sb29wKyspIHsKICAgICAgICBmb3IgKF9faSA9IDA7IF9faSA8
IDU1OyBfX2krKykKICAgICAgICAgICAgX01fdGFibGVbX19pXSA9IF9NX3RhYmxlW19faV0gLSBf
TV90YWJsZVsoMSArIF9faSArIDMwKSAlIDU1XTsKICAgIH0KICAgIF9NX2luZGV4MSA9IDA7CiAg
ICBfTV9pbmRleDIgPSAzMTsKICB9CgogIHN1YnRyYWN0aXZlX3JuZyh1bnNpZ25lZCBpbnQgX19z
ZWVkKSB7IF9NX2luaXRpYWxpemUoX19zZWVkKTsgfQogIHN1YnRyYWN0aXZlX3JuZygpIHsgX01f
aW5pdGlhbGl6ZSgxNjE4MDMzOTh1KTsgfQp9OwoKCiAKCiAKIAogCiAKIAogCiAKCiAKIAogCiAK
IAoKIAogCiAKIAogCgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVt
X2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhw
bGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9S
ZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0K
cHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs
IGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PGNvbnN0IF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KF9S
ZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io
KShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0
ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoq
X19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25z
dCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZiko
KTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9m
dW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4
cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBf
TV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IHJl
dHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25z
dDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNz
IG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1
YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9N
X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7
IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2Yp
KF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4K
Y2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1Rw
KixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3QoX1JldCAo
X1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io
KShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAoX19wLT4qX01f
ZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1
bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGlj
OgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9N
X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7
IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZiko
X0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpj
bGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9B
cmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAo
X1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io
KShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9f
eCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5h
cnlfZnVuY3Rpb248X1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Qodm9p
ZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCog
X19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01f
ZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lk
LCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6
CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDog
X01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAo
X19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBw
dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9m
dW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVy
YXRvcigpKF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lk
IChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVt
X2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7
CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYp
KCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f
cikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZiko
KSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9m
dW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJn
LHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZiko
X0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBf
X3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6Oipf
TV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNv
bnN0X21lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiAKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp
b248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9m
dW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZv
aWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9N
X2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90PHZv
aWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4g
ewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0Fy
ZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gp
IGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2Yp
KF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3Rf
bWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfVHAsX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZf
dCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBv
cGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShf
X3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKCiAK
IAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3Q8
X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5f
dDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5s
aW5lIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkg
Y29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9U
cD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpKSAKICB7IHJldHVybiBtZW1fZnVuX3Jl
Zl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpp
bmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1Rw
OjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+
KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+Cmlu
bGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShf
QXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1f
ZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25z
dCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRl
bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVu
MV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9Bcmcp
KQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1f
ZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9B
cmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+
KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+Cmlu
bGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZiko
X0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVt
X2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMShfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNv
bnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoK
dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9m
dW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xX3JlZihfUmV0IChfVHA6OipfX2YpKF9B
cmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRl
bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9t
ZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19m
KShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxf
QXJnPihfX2YpOyB9CgogCgoKCiAKIAogCiMgNDMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51
eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaGFzaHRhYmxlLmgiIDIgMwoK
IyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgogIAoKCgoKCgogCiAKIAogCiAKCgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNlIHsKcHVi
bGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+Ojph
bGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUg
Z2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9CgogIF9W
ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRh
X2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zfc3Rv
cmFnZSgwKSAKICB7fQogIApwcm90ZWN0ZWQ6CiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9hbGxv
Y2F0b3I7CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2VuZF9v
Zl9zdG9yYWdlOwoKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBf
TV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9U
cCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5kZWFs
bG9jYXRlKF9fcCwgX19uKTsgfQp9OwoKIAogCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvY2F0b3I+CmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+
IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0
b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9y
X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0K
CiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3Rh
cnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkgCiAge30KICAKcHJvdGVj
dGVkOgogIF9UcCogX01fc3RhcnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zf
c3RvcmFnZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRv
cj46Ol9BbGxvY190eXBlIF9BbGxvY190eXBlOwogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9f
bikKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9k
ZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxv
Y2F0ZShfX3AsIF9fbik7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpz
dHJ1Y3QgX1ZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0Fs
bG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0Fs
bG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfVmVjdG9yX2FsbG9jX2Jhc2U8X1Rw
LCBfQWxsb2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1Rw
LCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5
cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1ZlY3Rvcl9i
YXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIF9WZWN0b3Jf
YmFzZShzaXplX3QgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkg
ewogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZmluaXNoID0gX01fc3Rh
cnQ7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogIH0KCiAgfl9WZWN0
b3JfYmFzZSgpIHsgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBf
TV9zdGFydCk7IH0KfTsgICAgCgojIDE1MCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIu
OTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF92ZWN0b3IuaCIgMwoKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjwgX1RwID4gID4KY2xhc3MgdmVj
dG9yIDogcHJvdGVjdGVkIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4gCnsKcHJpdmF0ZToKICB0
eXBlZGVmIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CnB1YmxpYzoKICB0eXBlZGVm
IF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0eXBlZGVm
IGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBp
dGVyYXRvcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X2l0ZXJhdG9yOwogIHR5
cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYg
Y29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0
cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9j
YXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3Io
KSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgoKICB0eXBlZGVmIHJl
dmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAg
dHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKCgoK
CgoKcHJvdGVjdGVkOgoKICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6
Ol9NX2RlYWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX3N0YXJ0OwogIHVzaW5nIF9CYXNlOjpf
TV9maW5pc2g7CiAgdXNpbmcgX0Jhc2U6Ol9NX2VuZF9vZl9zdG9yYWdlOwoKCnByb3RlY3RlZDoK
ICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gp
OwogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uKTsKCnB1YmxpYzoKICBp
dGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgY29uc3RfaXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBfTV9zdGFydDsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJu
IF9NX2ZpbmlzaDsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2Zp
bmlzaDsgfQoKICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpCiAgICB7IHJldHVybiByZXZlcnNl
X2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29u
c3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgcmV2ZXJz
ZV9pdGVyYXRvciByZW5kKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7
IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29u
c3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0
CiAgICB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogIHNpemVfdHlwZSBt
YXhfc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9mKF9UcCk7
IH0KICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKF9N
X2VuZF9vZl9zdG9yYWdlIC0gYmVnaW4oKSk7IH0KICBib29sIGVtcHR5KCkgY29uc3QKICAgIHsg
cmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90
eXBlIF9fbikgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBv
cGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7
IH0KCiAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0
b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpIHt9CgogIHZlY3RvcihzaXplX3R5cGUgX19uLCBj
b25zdCBfVHAmIF9fdmFsdWUsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBh
bGxvY2F0b3JfdHlwZSgpKSAKICAgIDogX0Jhc2UoX19uLCBfX2EpCiAgICB7IF9NX2ZpbmlzaCA9
IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOyB9CgogIGV4cGxp
Y2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQogICAgOiBfQmFzZShfX24sIGFsbG9jYXRvcl90eXBl
KCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24s
IF9UcCgpKTsgfQoKICB2ZWN0b3IoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KSAKICAg
IDogX0Jhc2UoX194LnNpemUoKSwgX194LmdldF9hbGxvY2F0b3IoKSkKICAgIHsgX01fZmluaXNo
ID0gdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsg
fQoKCiAgIAogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2ZWN0b3IoX0lucHV0
SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICBjb25zdCBh
bGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2EpIHsKICAg
IHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwg
X0ludGVncmFsOwogICAgX01faW5pdGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdy
YWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbml0aWFs
aXplX2F1eChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBlKSB7CiAg
ICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9N
X3N0YXJ0ICsgX19uOyAKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0
YXJ0LCBfX24sIF9fdmFsdWUpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0
SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7
CiAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRl
Z29yeSggX19maXJzdCApICk7CiAgfQoKCgoKCgoKCiAgfnZlY3RvcigpIHsgZGVzdHJveShfTV9z
dGFydCwgX01fZmluaXNoKTsgfQoKICB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29u
c3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KTsKICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9f
bikgewogICAgaWYgKGNhcGFjaXR5KCkgPCBfX24pIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f
b2xkX3NpemUgPSBzaXplKCk7CiAgICAgIGl0ZXJhdG9yIF9fdG1wID0gX01fYWxsb2NhdGVfYW5k
X2NvcHkoX19uLCBfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgZGVzdHJveShfTV9zdGFydCwg
X01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3Jh
Z2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2ZpbmlzaCA9
IF9fdG1wICsgX19vbGRfc2l6ZTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCAr
IF9fbjsKICAgIH0KICB9CgogICAKICAgCiAgIAogICAKCiAgdm9pZCBhc3NpZ24oc2l6ZV90eXBl
IF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CgoKICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cmF0b3I+CiAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJh
dG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0
LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4K
ICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBf
X3RydWVfdHlwZSkKICAgIHsgYXNzaWduKChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX192YWwpOyB9
CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNo
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAg
IHsgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9f
Zmlyc3QgKSApOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9N
X2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVy
YXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOyAKCgoKICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVy
biAqYmVnaW4oKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpi
ZWdpbigpOyB9CiAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICBj
b25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQoKICB2
b2lkIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkgewogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9l
bmRfb2Zfc3RvcmFnZSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICAr
K19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSwgX194
KTsKICB9CiAgdm9pZCBwdXNoX2JhY2soKSB7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9v
Zl9zdG9yYWdlKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOwogICAgICArK19NX2Zpbmlz
aDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSk7CiAgfQogIHZvaWQg
c3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpIHsKICAgICA6OnN3YXAoX01fc3RhcnQsIF9f
eC5fTV9zdGFydCk7CiAgICAgOjpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICAg
Ojpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwogIH0KCiAg
aXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KSB7CiAg
ICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmluaXNo
ICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsKICAgICAgY29u
c3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAgICBlbHNl
CiAgICAgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwgX194KTsKICAgIHJldHVybiBiZWdpbigp
ICsgX19uOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAg
c2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAh
PSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIGNvbnN0
cnVjdChfTV9maW5pc2gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAg
X01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uKTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0K
CiAgIAogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVy
YXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0lu
dGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwg
X19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAg
dm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0lu
dGVnZXIgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsKICAg
IGluc2VydChfX3BvcywgKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7CiAgfQoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRl
cmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9f
ZmFsc2VfdHlwZSkgewogICAgX01fcmFuZ2VfaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3Qs
IF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwogIH0KCgoKCgogIHZvaWQgaW5zZXJ0
IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpOwoKICB2b2lk
IHBvcF9iYWNrKCkgewogICAgLS1fTV9maW5pc2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAg
fQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIGlmIChfX3Bvc2l0
aW9uICsgMSAhPSBlbmQoKSkKICAgICAgY29weShfX3Bvc2l0aW9uICsgMSwgX01fZmluaXNoLCBf
X3Bvc2l0aW9uKTsKICAgIC0tX01fZmluaXNoOwogICAgZGVzdHJveShfTV9maW5pc2gpOwogICAg
cmV0dXJuIF9fcG9zaXRpb247CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3Qs
IGl0ZXJhdG9yIF9fbGFzdCkgewogICAgaXRlcmF0b3IgX19pID0gY29weShfX2xhc3QsIF9NX2Zp
bmlzaCwgX19maXJzdCk7CiAgICBkZXN0cm95KF9faSwgX01fZmluaXNoKTsKICAgIF9NX2Zpbmlz
aCA9IF9NX2ZpbmlzaCAtIChfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJldHVybiBfX2ZpcnN0Owog
IH0KCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IF9UcCYgX194KSB7
CiAgICBpZiAoX19uZXdfc2l6ZSA8IHNpemUoKSkgCiAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX25l
d19zaXplLCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAt
IHNpemUoKSwgX194KTsKICB9CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUpIHsg
cmVzaXplKF9fbmV3X3NpemUsIF9UcCgpKTsgfQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2lu
KCksIGVuZCgpKTsgfQoKcHJvdGVjdGVkOgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cmF0b3I+CiAgaXRlcmF0b3IgX01fYWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90eXBlIF9fbiwgX0Zv
cndhcmRJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKewogICAgaXRlcmF0b3IgX19y
ZXN1bHQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgdHJ5ICB7CiAgICAgIHVuaW5pdGlhbGl6ZWRf
Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0Owog
ICAgfQogICAgY2F0Y2goLi4uKSB7ICBfTV9kZWFsbG9jYXRlKF9fcmVzdWx0LCBfX24pIDsgdGhy
b3c7IH0gOwogIH0KIyA0NDAgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdmVjdG9yLmgiIDMKCgoKCiAgdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6ZShfSW5wdXRJdGVy
YXRvciBfX2ZpcnN0LCAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKICAgIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19maXJzdCkKICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICB9CgogICAKICB0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxp
emUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgewogICAgc2l6
ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICBf
TV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0
YXJ0ICsgX19uOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9f
bGFzdCwgX01fc3RhcnQpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog
IHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywK
ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf
dGFnKTsKCgp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v
bCAKb3BlcmF0b3I9PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3Rv
cjxfVHAsIF9BbGxvYz4mIF9feSkKewogIHJldHVybiBfX3guc2l6ZSgpID09IF9feS5zaXplKCkg
JiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIApvcGVyYXRv
cjwoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxs
b2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCks
IF9feC5lbmQoKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigp
LCBfX3kuZW5kKCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5s
aW5lIHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIHZlY3RvcjxfVHAsIF9BbGxv
Yz4mIF9feSkKewogIF9feC5zd2FwKF9feSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jPgp2ZWN0b3I8X1RwLF9BbGxvYz4mIAp2ZWN0b3I8X1RwLF9BbGxvYz46Om9wZXJh
dG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCnsKICBpZiAoJl9feCAhPSB0aGlz
KSB7CiAgICBjb25zdCBzaXplX3R5cGUgX194bGVuID0gX194LnNpemUoKTsKICAgIGlmIChfX3hs
ZW4gPiBjYXBhY2l0eSgpKSB7CiAgICAgIGl0ZXJhdG9yIF9fdG1wID0gX01fYWxsb2NhdGVfYW5k
X2NvcHkoX194bGVuLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsKICAgICAgZGVzdHJveShfTV9z
dGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29m
X3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2Vu
ZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX3hsZW47CiAgICB9CiAgICBlbHNlIGlmIChzaXpl
KCkgPj0gX194bGVuKSB7CiAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoX194LmJlZ2luKCksIF9f
eC5lbmQoKSwgYmVnaW4oKSk7CiAgICAgIGRlc3Ryb3koX19pLCBfTV9maW5pc2gpOwogICAgfQog
ICAgZWxzZSB7CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5iZWdpbigpICsgc2l6ZSgpLCBf
TV9zdGFydCk7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3guYmVnaW4oKSArIHNpemUoKSwg
X194LmVuZCgpLCBfTV9maW5pc2gpOwogICAgfQogICAgX01fZmluaXNoID0gX01fc3RhcnQgKyBf
X3hsZW47CiAgfQogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46OmFzc2lnbihzaXplX3QgX19uLCBjb25z
dCB2YWx1ZV90eXBlJiBfX3ZhbCkgewogIGlmIChfX24gPiBjYXBhY2l0eSgpKSB7CiAgICB2ZWN0
b3I8X1RwLCBfQWxsb2M+IF9fdG1wKF9fbiwgX192YWwsIGdldF9hbGxvY2F0b3IoKSk7CiAgICBf
X3RtcC5zd2FwKCp0aGlzKTsKICB9CiAgZWxzZSBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICBmaWxs
KGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2Zp
bGxfbihfTV9maW5pc2gsIF9fbiAtIHNpemUoKSwgX192YWwpOwogIH0KICBlbHNlCiAgICBlcmFz
ZShmaWxsX24oYmVnaW4oKSwgX19uLCBfX3ZhbCksIGVuZCgpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lkIHZl
Y3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
cHV0X2l0ZXJhdG9yX3RhZykgewogIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsKICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3Qp
CiAgICAqX19jdXIgPSAqX19maXJzdDsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBlcmFz
ZShfX2N1ciwgZW5kKCkpOwogIGVsc2UKICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXplX3R5cGUgX19s
ZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwoKICBpZiAoX19sZW4g
PiBjYXBhY2l0eSgpKSB7CiAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9jb3B5
KF9fbGVuLCBfX2ZpcnN0LCBfX2xhc3QpOwogICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNo
KTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3Rh
cnQpOwogICAgX01fc3RhcnQgPSBfX3RtcDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fZmlu
aXNoID0gX01fc3RhcnQgKyBfX2xlbjsKICB9CiAgZWxzZSBpZiAoc2l6ZSgpID49IF9fbGVuKSB7
CiAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3Rh
cnQpOwogICAgZGVzdHJveShfX25ld19maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICBfTV9maW5pc2gg
PSBfX25ld19maW5pc2g7CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19m
aXJzdDsKICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICBjb3B5KF9fZmlyc3QsIF9fbWlk
LCBfTV9zdGFydCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9f
bGFzdCwgX01fZmluaXNoKTsKICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs
bG9jPgp2b2lkIAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9f
cG9zaXRpb24sIGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zf
c3RvcmFnZSkgewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAg
ICArK19NX2ZpbmlzaDsKICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgIGNvcHlfYmFja3dhcmQo
X19wb3NpdGlvbiwgX01fZmluaXNoIC0gMiwgX01fZmluaXNoIC0gMSk7CiAgICAqX19wb3NpdGlv
biA9IF9feF9jb3B5OwogIH0KICBlbHNlIHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXpl
ID0gc2l6ZSgpOwogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSAhPSAwID8g
MiAqIF9fb2xkX3NpemUgOiAxOwogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0
ZShfX2xlbik7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBfX25ld19zdGFydDsKICAgIHRy
eSAgewogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX01fc3RhcnQsIF9f
cG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsKICAgICAgY29uc3RydWN0KF9fbmV3X2ZpbmlzaCwgX194
KTsKICAgICAgKytfX25ld19maW5pc2g7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6
ZWRfY29weShfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9fbmV3X2ZpbmlzaCk7CiAgICB9CiAgICBj
YXRjaCguLi4pIHsgIChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIAogICAgICAg
ICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LF9fbGVuKSkgOyB0aHJvdzsgfSA7
CiAgICBkZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQs
IF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX25ld19zdGFy
dDsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0g
X19uZXdfc3RhcnQgKyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4Kdm9pZCAKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBf
X3Bvc2l0aW9uKQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAg
Y29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19NX2ZpbmlzaDsK
ICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNoIC0gMiwgX01fZmluaXNoIC0g
MSk7CiAgICAqX19wb3NpdGlvbiA9IF9UcCgpOwogIH0KICBlbHNlIHsKICAgIGNvbnN0IHNpemVf
dHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19v
bGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOwogICAgaXRlcmF0b3IgX19uZXdfc3Rh
cnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBfX25l
d19zdGFydDsKICAgIHRyeSAgewogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2Nv
cHkoX01fc3RhcnQsIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsKICAgICAgY29uc3RydWN0KF9f
bmV3X2ZpbmlzaCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1
bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfX25ld19maW5pc2gpOwog
ICAgfQogICAgY2F0Y2goLi4uKSB7ICAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gp
LCAKICAgICAgICAgICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCxfX2xlbikpIDsg
dGhyb3c7IH0gOwogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRl
KF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0g
X19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICBfTV9lbmRfb2Zf
c3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6aW5zZXJ0KGl0ZXJhdG9y
IF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBfVHAmIF9feCkKewogIGlmIChfX24gIT0gMCkgewogICAgaWYgKHNpemVfdHlw
ZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIF9UcCBfX3hf
Y29weSA9IF9feDsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBfTV9maW5p
c2ggLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2ggPSBfTV9maW5pc2g7
CiAgICAgIGlmIChfX2VsZW1zX2FmdGVyID4gX19uKSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9j
b3B5KF9NX2ZpbmlzaCAtIF9fbiwgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2Zp
bmlzaCArPSBfX247CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfX29sZF9maW5p
c2ggLSBfX24sIF9fb2xkX2ZpbmlzaCk7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0
aW9uICsgX19uLCBfX3hfY29weSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdW5pbml0
aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBfX2VsZW1zX2FmdGVyLCBfX3hfY29weSk7
CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0
aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAg
ICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9f
b2xkX2ZpbmlzaCwgX194X2NvcHkpOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29u
c3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7ICAgICAgICAKICAgICAgY29uc3Qgc2l6
ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9zaXplLCBfX24pOwogICAgICBp
dGVyYXRvciBfX25ld19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsKICAgICAgaXRlcmF0b3Ig
X19uZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7CiAgICAgIHRyeSAgewogICAgICAgIF9fbmV3X2Zp
bmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfTV9zdGFydCwgX19wb3NpdGlvbiwgX19uZXdfc3Rh
cnQpOwogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fbmV3X2Zp
bmlzaCwgX19uLCBfX3gpOwogICAgICAgIF9fbmV3X2ZpbmlzaAogICAgICAgICAgPSB1bmluaXRp
YWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfX25ld19maW5pc2gpOwogICAgICB9
CiAgICAgIGNhdGNoKC4uLikgeyAgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwg
CiAgICAgICAgICAgICAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCxfX2xlbikpIDsg
dGhyb3c7IH0gOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9k
ZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAg
X01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwog
ICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgICB9CiAgfQp9
CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgp2b2lkIAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9yYW5nZV9pbnNlcnQo
aXRlcmF0b3IgX19wb3MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr
K19fZmlyc3QpIHsKICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICArK19f
cG9zOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZCAKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFu
Z2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmly
c3QgIT0gX19sYXN0KSB7CiAgICBzaXplX3R5cGUgX19uID0gMDsKICAgIGRpc3RhbmNlKF9fZmly
c3QsIF9fbGFzdCwgX19uKTsKICAgIGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBf
TV9maW5pc2gpID49IF9fbikgewogICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9
IF9NX2ZpbmlzaCAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaCA9IF9N
X2ZpbmlzaDsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsKICAgICAgICB1bmluaXRp
YWxpemVkX2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAg
ICAgX01fZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9f
b2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9f
bGFzdCwgX19wb3NpdGlvbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJ
dGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgX19lbGVtc19h
ZnRlcik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2Zpbmlz
aCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5p
bml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAg
ICAgICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9f
bWlkLCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNp
emVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4g
PSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3
X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOwogICAgICBpdGVyYXRvciBfX25ld19maW5pc2gg
PSBfX25ld19zdGFydDsKICAgICAgdHJ5ICB7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0
aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3Bvc2l0aW9uLCBfX25ld19zdGFydCk7CiAgICAgICAg
X19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19uZXdf
ZmluaXNoKTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0gdW5pbml0aWFsaXplZF9j
b3B5KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoKTsKICAgICAgfQogICAgICBj
YXRjaCguLi4pIHsgIChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIAogICAgICAg
ICAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKSA7IHRocm93OyB9
IDsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0
ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0
ID0gX19uZXdfc3RhcnQ7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAgX01f
ZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOwogICAgfQogIH0KfQoKIyA4MTAg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9zdGxfdmVjdG9yLmgiIDMKCgoKCgoKCiAgCgoKCiAKIAogCiMgNDQgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaGFz
aHRhYmxlLmgiIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2hhc2hfZnVuLmgiIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIu
OTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNDIgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKIyAzNCAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9oYXNoX2Z1bi5o
IiAyIDMKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleT4gc3RydWN0IGhhc2ggeyB9OwoKaW5saW5l
IHNpemVfdCBfX3N0bF9oYXNoX3N0cmluZyhjb25zdCBjaGFyKiBfX3MpCnsKICB1bnNpZ25lZCBs
b25nIF9faCA9IDA7IAogIGZvciAoIDsgKl9fczsgKytfX3MpCiAgICBfX2ggPSA1Kl9faCArICpf
X3M7CiAgCiAgcmV0dXJuIHNpemVfdChfX2gpOwp9Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgaGFzaDxj
aGFyKj4KewogIHNpemVfdCBvcGVyYXRvcigpKGNvbnN0IGNoYXIqIF9fcykgY29uc3QgeyByZXR1
cm4gX19zdGxfaGFzaF9zdHJpbmcoX19zKTsgfQp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IGhhc2g8
Y29uc3QgY2hhcio+CnsKICBzaXplX3Qgb3BlcmF0b3IoKShjb25zdCBjaGFyKiBfX3MpIGNvbnN0
IHsgcmV0dXJuIF9fc3RsX2hhc2hfc3RyaW5nKF9fcyk7IH0KfTsKCnRlbXBsYXRlPD4gIHN0cnVj
dCBoYXNoPGNoYXI+IHsKICBzaXplX3Qgb3BlcmF0b3IoKShjaGFyIF9feCkgY29uc3QgeyByZXR1
cm4gX194OyB9Cn07CnRlbXBsYXRlPD4gIHN0cnVjdCBoYXNoPHVuc2lnbmVkIGNoYXI+IHsKICBz
aXplX3Qgb3BlcmF0b3IoKSh1bnNpZ25lZCBjaGFyIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9
Cn07CnRlbXBsYXRlPD4gIHN0cnVjdCBoYXNoPHNpZ25lZCBjaGFyPiB7CiAgc2l6ZV90IG9wZXJh
dG9yKCkodW5zaWduZWQgY2hhciBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9Owp0ZW1wbGF0
ZTw+ICBzdHJ1Y3QgaGFzaDxzaG9ydD4gewogIHNpemVfdCBvcGVyYXRvcigpKHNob3J0IF9feCkg
Y29uc3QgeyByZXR1cm4gX194OyB9Cn07CnRlbXBsYXRlPD4gIHN0cnVjdCBoYXNoPHVuc2lnbmVk
IHNob3J0PiB7CiAgc2l6ZV90IG9wZXJhdG9yKCkodW5zaWduZWQgc2hvcnQgX194KSBjb25zdCB7
IHJldHVybiBfX3g7IH0KfTsKdGVtcGxhdGU8PiAgc3RydWN0IGhhc2g8aW50PiB7CiAgc2l6ZV90
IG9wZXJhdG9yKCkoaW50IF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07CnRlbXBsYXRlPD4g
IHN0cnVjdCBoYXNoPHVuc2lnbmVkIGludD4gewogIHNpemVfdCBvcGVyYXRvcigpKHVuc2lnbmVk
IGludCBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgaGFz
aDxsb25nPiB7CiAgc2l6ZV90IG9wZXJhdG9yKCkobG9uZyBfX3gpIGNvbnN0IHsgcmV0dXJuIF9f
eDsgfQp9Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgaGFzaDx1bnNpZ25lZCBsb25nPiB7CiAgc2l6ZV90
IG9wZXJhdG9yKCkodW5zaWduZWQgbG9uZyBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoK
IAoKCgogCiAKIAojIDQ1ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2hhc2h0YWJsZS5oIiAyIDMKCgogCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1ZhbD4Kc3RydWN0IF9IYXNodGFibGVfbm9kZQp7CiAgX0hhc2h0YWJsZV9ub2RlKiBf
TV9uZXh0OwogIF9WYWwgX01fdmFsOwp9OyAgCgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3Mg
X0tleSwgY2xhc3MgX0hhc2hGY24sCiAgICAgICAgICBjbGFzcyBfRXh0cmFjdEtleSwgY2xhc3Mg
X0VxdWFsS2V5LCBjbGFzcyBfQWxsb2MgPSBhbGxvYz4KY2xhc3MgaGFzaHRhYmxlOwoKdGVtcGxh
dGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IYXNoRmNuLAogICAgICAgICAgY2xh
c3MgX0V4dHJhY3RLZXksIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0hh
c2h0YWJsZV9pdGVyYXRvcjsKCnRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFz
cyBfSGFzaEZjbiwKICAgICAgICAgIGNsYXNzIF9FeHRyYWN0S2V5LCBjbGFzcyBfRXF1YWxLZXks
IGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3I7Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hhc2hGY24sCiAgICAgICAgICBjbGFz
cyBfRXh0cmFjdEtleSwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfSGFz
aHRhYmxlX2l0ZXJhdG9yIHsKICB0eXBlZGVmIGhhc2h0YWJsZTxfVmFsLF9LZXksX0hhc2hGY24s
X0V4dHJhY3RLZXksX0VxdWFsS2V5LF9BbGxvYz4KICAgICAgICAgIF9IYXNodGFibGU7CiAgdHlw
ZWRlZiBfSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IYXNoRmNuLCAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0V4dHJhY3RLZXksIF9FcXVhbEtleSwgX0FsbG9jPgogICAg
ICAgICAgaXRlcmF0b3I7CiAgdHlwZWRlZiBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yPF9WYWws
IF9LZXksIF9IYXNoRmNuLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0V4
dHJhY3RLZXksIF9FcXVhbEtleSwgX0FsbG9jPgogICAgICAgICAgY29uc3RfaXRlcmF0b3I7CiAg
dHlwZWRlZiBfSGFzaHRhYmxlX25vZGU8X1ZhbD4gX05vZGU7CgogIHR5cGVkZWYgZm9yd2FyZF9p
dGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVmFsIHZhbHVlX3R5cGU7
CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgc2l6ZV90IHNp
emVfdHlwZTsKICB0eXBlZGVmIF9WYWwmIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9WYWwqIHBvaW50
ZXI7CgogIF9Ob2RlKiBfTV9jdXI7CiAgX0hhc2h0YWJsZSogX01faHQ7CgogIF9IYXNodGFibGVf
aXRlcmF0b3IoX05vZGUqIF9fbiwgX0hhc2h0YWJsZSogX190YWIpIAogICAgOiBfTV9jdXIoX19u
KSwgX01faHQoX190YWIpIHt9CiAgX0hhc2h0YWJsZV9pdGVyYXRvcigpIHt9CiAgcmVmZXJlbmNl
IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9NX2N1ci0+X01fdmFsOyB9CgogIHBvaW50ZXIg
b3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIGl0ZXJhdG9y
JiBvcGVyYXRvcisrKCk7CiAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpOwogIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBpdGVyYXRvciYgX19pdCkgY29uc3QKICAgIHsgcmV0dXJuIF9NX2N1ciA9PSBf
X2l0Ll9NX2N1cjsgfQogIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgX19pdCkgY29u
c3QKICAgIHsgcmV0dXJuIF9NX2N1ciAhPSBfX2l0Ll9NX2N1cjsgfQp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSGFzaEZjbiwKICAgICAgICAgIGNsYXNzIF9F
eHRyYWN0S2V5LCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9IYXNodGFi
bGVfY29uc3RfaXRlcmF0b3IgewogIHR5cGVkZWYgaGFzaHRhYmxlPF9WYWwsX0tleSxfSGFzaEZj
bixfRXh0cmFjdEtleSxfRXF1YWxLZXksX0FsbG9jPgogICAgICAgICAgX0hhc2h0YWJsZTsKICB0
eXBlZGVmIF9IYXNodGFibGVfaXRlcmF0b3I8X1ZhbCxfS2V5LF9IYXNoRmNuLCAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0V4dHJhY3RLZXksX0VxdWFsS2V5LF9BbGxvYz4KICAgICAg
ICAgIGl0ZXJhdG9yOwogIHR5cGVkZWYgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcjxfVmFsLCBf
S2V5LCBfSGFzaEZjbiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9FeHRy
YWN0S2V5LCBfRXF1YWxLZXksIF9BbGxvYz4KICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwogIHR5
cGVkZWYgX0hhc2h0YWJsZV9ub2RlPF9WYWw+IF9Ob2RlOwoKICB0eXBlZGVmIGZvcndhcmRfaXRl
cmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1ZhbCB2YWx1ZV90eXBlOwog
IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHNpemVfdCBzaXpl
X3R5cGU7CiAgdHlwZWRlZiBjb25zdCBfVmFsJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBf
VmFsKiBwb2ludGVyOwoKICBjb25zdCBfTm9kZSogX01fY3VyOwogIGNvbnN0IF9IYXNodGFibGUq
IF9NX2h0OwoKICBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9Ob2RlKiBfX24sIGNv
bnN0IF9IYXNodGFibGUqIF9fdGFiKQogICAgOiBfTV9jdXIoX19uKSwgX01faHQoX190YWIpIHt9
CiAgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcigpIHt9CiAgX0hhc2h0YWJsZV9jb25zdF9pdGVy
YXRvcihjb25zdCBpdGVyYXRvciYgX19pdCkgCiAgICA6IF9NX2N1cihfX2l0Ll9NX2N1ciksIF9N
X2h0KF9faXQuX01faHQpIHt9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJu
IF9NX2N1ci0+X01fdmFsOyB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu
ICYob3BlcmF0b3IqKCkpOyB9CgogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCk7CiAgY29u
c3RfaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpOwogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjb25z
dF9pdGVyYXRvciYgX19pdCkgY29uc3QgCiAgICB7IHJldHVybiBfTV9jdXIgPT0gX19pdC5fTV9j
dXI7IH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIF9faXQpIGNvbnN0
IAogICAgeyByZXR1cm4gX01fY3VyICE9IF9faXQuX01fY3VyOyB9Cn07CgogCnN0YXRpYyBjb25z
dCBpbnQgX19zdGxfbnVtX3ByaW1lcyA9IDI4OwpzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBf
X3N0bF9wcmltZV9saXN0W19fc3RsX251bV9wcmltZXNdID0KewogIDUzdWwsICAgICAgICAgOTd1
bCwgICAgICAgICAxOTN1bCwgICAgICAgMzg5dWwsICAgICAgIDc2OXVsLAogIDE1NDN1bCwgICAg
ICAgMzA3OXVsLCAgICAgICA2MTUxdWwsICAgICAgMTIyODl1bCwgICAgIDI0NTkzdWwsCiAgNDkx
NTd1bCwgICAgICA5ODMxN3VsLCAgICAgIDE5NjYxM3VsLCAgICAzOTMyNDF1bCwgICAgNzg2NDMz
dWwsCiAgMTU3Mjg2OXVsLCAgICAzMTQ1NzM5dWwsICAgIDYyOTE0Njl1bCwgICAxMjU4MjkxN3Vs
LCAgMjUxNjU4NDN1bCwKICA1MDMzMTY1M3VsLCAgIDEwMDY2MzMxOXVsLCAgMjAxMzI2NjExdWws
IDQwMjY1MzE4OXVsLCA4MDUzMDY0NTd1bCwgCiAgMTYxMDYxMjc0MXVsLCAzMjIxMjI1NDczdWws
IDQyOTQ5NjcyOTF1bAp9OwoKaW5saW5lIHVuc2lnbmVkIGxvbmcgX19zdGxfbmV4dF9wcmltZSh1
bnNpZ25lZCBsb25nIF9fbikKewogIGNvbnN0IHVuc2lnbmVkIGxvbmcqIF9fZmlyc3QgPSBfX3N0
bF9wcmltZV9saXN0OwogIGNvbnN0IHVuc2lnbmVkIGxvbmcqIF9fbGFzdCA9IF9fc3RsX3ByaW1l
X2xpc3QgKyBfX3N0bF9udW1fcHJpbWVzOwogIGNvbnN0IHVuc2lnbmVkIGxvbmcqIHBvcyA9IGxv
d2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICByZXR1cm4gcG9zID09IF9fbGFzdCA/
ICooX19sYXN0IC0gMSkgOiAqcG9zOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3Mg
X0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KY2xhc3Mg
aGFzaHRhYmxlOwoKdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwg
Y2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+CmJvb2wgb3BlcmF0b3I9PShjb25zdCBo
YXNodGFibGU8X1ZhbCxfS2V5LF9IRixfRXgsX0VxLF9BbGw+JiBfX2h0MSwKICAgICAgICAgICAg
ICAgIGNvbnN0IGhhc2h0YWJsZTxfVmFsLF9LZXksX0hGLF9FeCxfRXEsX0FsbD4mIF9faHQyKTsK
CgogCiAKIAogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3Mg
X0hhc2hGY24sCiAgICAgICAgICBjbGFzcyBfRXh0cmFjdEtleSwgY2xhc3MgX0VxdWFsS2V5LCBj
bGFzcyBfQWxsb2M+CmNsYXNzIGhhc2h0YWJsZSB7CnB1YmxpYzoKICB0eXBlZGVmIF9LZXkga2V5
X3R5cGU7CiAgdHlwZWRlZiBfVmFsIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfSGFzaEZjbiBoYXNo
ZXI7CiAgdHlwZWRlZiBfRXF1YWxLZXkga2V5X2VxdWFsOwoKICB0eXBlZGVmIHNpemVfdCAgICAg
ICAgICAgIHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgIGRpZmZlcmVuY2Vf
dHlwZTsKICB0eXBlZGVmIHZhbHVlX3R5cGUqICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25z
dCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgICAgICAg
cmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwoK
ICBoYXNoZXIgaGFzaF9mdW5jdCgpIGNvbnN0IHsgcmV0dXJuIF9NX2hhc2g7IH0KICBrZXlfZXF1
YWwga2V5X2VxKCkgY29uc3QgeyByZXR1cm4gX01fZXF1YWxzOyB9Cgpwcml2YXRlOgogIHR5cGVk
ZWYgX0hhc2h0YWJsZV9ub2RlPF9WYWw+IF9Ob2RlOwoKCnB1YmxpYzoKICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvY190cmFpdHM8X1ZhbCxfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3Jf
dHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01f
bm9kZV9hbGxvY2F0b3I7IH0KcHJpdmF0ZToKICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9Ob2Rl
LCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBfTV9ub2RlX2FsbG9jYXRvcjsKICBfTm9kZSogX01f
Z2V0X25vZGUoKSB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsgfQogIHZv
aWQgX01fcHV0X25vZGUoX05vZGUqIF9fcCkgeyBfTV9ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRl
KF9fcCwgMSk7IH0KCiMgMjI1ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2hhc2h0YWJsZS5oIiAzCgoKcHJpdmF0ZToKICBo
YXNoZXIgICAgICAgICAgICAgICAgX01faGFzaDsKICBrZXlfZXF1YWwgICAgICAgICAgICAgX01f
ZXF1YWxzOwogIF9FeHRyYWN0S2V5ICAgICAgICAgICBfTV9nZXRfa2V5OwogIHZlY3RvcjxfTm9k
ZSosX0FsbG9jPiBfTV9idWNrZXRzOwogIHNpemVfdHlwZSAgICAgICAgICAgICBfTV9udW1fZWxl
bWVudHM7CgpwdWJsaWM6CiAgdHlwZWRlZiBfSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWwsX0tleSxf
SGFzaEZjbixfRXh0cmFjdEtleSxfRXF1YWxLZXksX0FsbG9jPgogICAgICAgICAgaXRlcmF0b3I7
CiAgdHlwZWRlZiBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yPF9WYWwsX0tleSxfSGFzaEZjbixf
RXh0cmFjdEtleSxfRXF1YWxLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9BbGxvYz4KICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwoKICBmcmllbmQgc3RydWN0CiAgX0hh
c2h0YWJsZV9pdGVyYXRvcjxfVmFsLF9LZXksX0hhc2hGY24sX0V4dHJhY3RLZXksX0VxdWFsS2V5
LF9BbGxvYz47CiAgZnJpZW5kIHN0cnVjdAogIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3I8X1Zh
bCxfS2V5LF9IYXNoRmNuLF9FeHRyYWN0S2V5LF9FcXVhbEtleSxfQWxsb2M+OwoKcHVibGljOgog
IGhhc2h0YWJsZShzaXplX3R5cGUgX19uLAogICAgICAgICAgICBjb25zdCBfSGFzaEZjbiYgICAg
X19oZiwKICAgICAgICAgICAgY29uc3QgX0VxdWFsS2V5JiAgIF9fZXFsLAogICAgICAgICAgICBj
b25zdCBfRXh0cmFjdEtleSYgX19leHQsCiAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBl
JiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV9ub2RlX2FsbG9jYXRvciggX19hICks
IAogICAgICBfTV9oYXNoKF9faGYpLAogICAgICBfTV9lcXVhbHMoX19lcWwpLAogICAgICBfTV9n
ZXRfa2V5KF9fZXh0KSwKICAgICAgX01fYnVja2V0cyhfX2EpLAogICAgICBfTV9udW1fZWxlbWVu
dHMoMCkKICB7CiAgICBfTV9pbml0aWFsaXplX2J1Y2tldHMoX19uKTsKICB9CgogIGhhc2h0YWJs
ZShzaXplX3R5cGUgX19uLAogICAgICAgICAgICBjb25zdCBfSGFzaEZjbiYgICAgX19oZiwKICAg
ICAgICAgICAgY29uc3QgX0VxdWFsS2V5JiAgIF9fZXFsLAogICAgICAgICAgICBjb25zdCBhbGxv
Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fbm9kZV9hbGxvY2F0
b3IoIF9fYSApLCAKICAgICAgX01faGFzaChfX2hmKSwKICAgICAgX01fZXF1YWxzKF9fZXFsKSwK
ICAgICAgX01fZ2V0X2tleShfRXh0cmFjdEtleSgpKSwKICAgICAgX01fYnVja2V0cyhfX2EpLAog
ICAgICBfTV9udW1fZWxlbWVudHMoMCkKICB7CiAgICBfTV9pbml0aWFsaXplX2J1Y2tldHMoX19u
KTsKICB9CgogIGhhc2h0YWJsZShjb25zdCBoYXNodGFibGUmIF9faHQpCiAgICA6IF9NX25vZGVf
YWxsb2NhdG9yKCBfX2h0LmdldF9hbGxvY2F0b3IoKSApLCAKICAgICAgX01faGFzaChfX2h0Ll9N
X2hhc2gpLAogICAgICBfTV9lcXVhbHMoX19odC5fTV9lcXVhbHMpLAogICAgICBfTV9nZXRfa2V5
KF9faHQuX01fZ2V0X2tleSksCiAgICAgIF9NX2J1Y2tldHMoX19odC5nZXRfYWxsb2NhdG9yKCkp
LAogICAgICBfTV9udW1fZWxlbWVudHMoMCkKICB7CiAgICBfTV9jb3B5X2Zyb20oX19odCk7CiAg
fQoKCgogIGhhc2h0YWJsZSYgb3BlcmF0b3I9IChjb25zdCBoYXNodGFibGUmIF9faHQpCiAgewog
ICAgaWYgKCZfX2h0ICE9IHRoaXMpIHsKICAgICAgY2xlYXIoKTsKICAgICAgX01faGFzaCA9IF9f
aHQuX01faGFzaDsKICAgICAgX01fZXF1YWxzID0gX19odC5fTV9lcXVhbHM7CiAgICAgIF9NX2dl
dF9rZXkgPSBfX2h0Ll9NX2dldF9rZXk7CiAgICAgIF9NX2NvcHlfZnJvbShfX2h0KTsKICAgIH0K
ICAgIHJldHVybiAqdGhpczsKICB9CgogIH5oYXNodGFibGUoKSB7IGNsZWFyKCk7IH0KCiAgc2l6
ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9udW1fZWxlbWVudHM7IH0KICBzaXplX3R5
cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiAgYm9vbCBlbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKSA9PSAwOyB9CgogIHZvaWQgc3dhcChoYXNodGFibGUm
IF9faHQpCiAgewogICAgIDo6c3dhcChfTV9oYXNoLCBfX2h0Ll9NX2hhc2gpOwogICAgIDo6c3dh
cChfTV9lcXVhbHMsIF9faHQuX01fZXF1YWxzKTsKICAgICA6OnN3YXAoX01fZ2V0X2tleSwgX19o
dC5fTV9nZXRfa2V5KTsKICAgIF9NX2J1Y2tldHMuc3dhcChfX2h0Ll9NX2J1Y2tldHMpOwogICAg
IDo6c3dhcChfTV9udW1fZWxlbWVudHMsIF9faHQuX01fbnVtX2VsZW1lbnRzKTsKICB9CgogIGl0
ZXJhdG9yIGJlZ2luKCkKICB7IAogICAgZm9yIChzaXplX3R5cGUgX19uID0gMDsgX19uIDwgX01f
YnVja2V0cy5zaXplKCk7ICsrX19uKQogICAgICBpZiAoX01fYnVja2V0c1tfX25dKQogICAgICAg
IHJldHVybiBpdGVyYXRvcihfTV9idWNrZXRzW19fbl0sIHRoaXMpOwogICAgcmV0dXJuIGVuZCgp
OwogIH0KCiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gaXRlcmF0b3IoMCwgdGhpcyk7IH0KCiAg
Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdAogIHsKICAgIGZvciAoc2l6ZV90eXBlIF9fbiA9
IDA7IF9fbiA8IF9NX2J1Y2tldHMuc2l6ZSgpOyArK19fbikKICAgICAgaWYgKF9NX2J1Y2tldHNb
X19uXSkKICAgICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fYnVja2V0c1tfX25dLCB0aGlz
KTsKICAgIHJldHVybiBlbmQoKTsKICB9CgogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIGNvbnN0X2l0ZXJhdG9yKDAsIHRoaXMpOyB9CgogIGZyaWVuZCBib29sCiAgb3BlcmF0
b3I9PSA8PiAgKGNvbnN0IGhhc2h0YWJsZSYsIGNvbnN0IGhhc2h0YWJsZSYpOwoKcHVibGljOgoK
ICBzaXplX3R5cGUgYnVja2V0X2NvdW50KCkgY29uc3QgeyByZXR1cm4gX01fYnVja2V0cy5zaXpl
KCk7IH0KCiAgc2l6ZV90eXBlIG1heF9idWNrZXRfY291bnQoKSBjb25zdAogICAgeyByZXR1cm4g
X19zdGxfcHJpbWVfbGlzdFtfX3N0bF9udW1fcHJpbWVzIC0gMV07IH0gCgogIHNpemVfdHlwZSBl
bGVtc19pbl9idWNrZXQoc2l6ZV90eXBlIF9fYnVja2V0KSBjb25zdAogIHsKICAgIHNpemVfdHlw
ZSBfX3Jlc3VsdCA9IDA7CiAgICBmb3IgKF9Ob2RlKiBfX2N1ciA9IF9NX2J1Y2tldHNbX19idWNr
ZXRdOyBfX2N1cjsgX19jdXIgPSBfX2N1ci0+X01fbmV4dCkKICAgICAgX19yZXN1bHQgKz0gMTsK
ICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CgogIHBhaXI8aXRlcmF0b3IsIGJvb2w+IGluc2VydF91
bmlxdWUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCiAgewogICAgcmVzaXplKF9NX251bV9lbGVt
ZW50cyArIDEpOwogICAgcmV0dXJuIGluc2VydF91bmlxdWVfbm9yZXNpemUoX19vYmopOwogIH0K
CiAgaXRlcmF0b3IgaW5zZXJ0X2VxdWFsKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQogIHsKICAg
IHJlc2l6ZShfTV9udW1fZWxlbWVudHMgKyAxKTsKICAgIHJldHVybiBpbnNlcnRfZXF1YWxfbm9y
ZXNpemUoX19vYmopOwogIH0KCiAgcGFpcjxpdGVyYXRvciwgYm9vbD4gaW5zZXJ0X3VuaXF1ZV9u
b3Jlc2l6ZShjb25zdCB2YWx1ZV90eXBlJiBfX29iaik7CiAgaXRlcmF0b3IgaW5zZXJ0X2VxdWFs
X25vcmVzaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKTsKIAoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnRfdW5pcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZiwg
X0lucHV0SXRlcmF0b3IgX19sKQogIHsKICAgIGluc2VydF91bmlxdWUoX19mLCBfX2wsIF9faXRl
cmF0b3JfY2F0ZWdvcnkoIF9fZiApICk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cmF0b3I+CiAgdm9pZCBpbnNlcnRfZXF1YWwoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVy
YXRvciBfX2wpCiAgewogICAgaW5zZXJ0X2VxdWFsKF9fZiwgX19sLCBfX2l0ZXJhdG9yX2NhdGVn
b3J5KCBfX2YgKSApOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZv
aWQgaW5zZXJ0X3VuaXF1ZShfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwK
ICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKICAgIGZvciAoIDsg
X19mICE9IF9fbDsgKytfX2YpCiAgICAgIGluc2VydF91bmlxdWUoKl9fZik7CiAgfQoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnRfZXF1YWwoX0lucHV0SXRl
cmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsCiAgICAgICAgICAgICAgICAgICAgaW5wdXRf
aXRlcmF0b3JfdGFnKQogIHsKICAgIGZvciAoIDsgX19mICE9IF9fbDsgKytfX2YpCiAgICAgIGlu
c2VydF9lcXVhbCgqX19mKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y
PgogIHZvaWQgaW5zZXJ0X3VuaXF1ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVy
YXRvciBfX2wsCiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogIHsK
ICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19mLCBfX2wsIF9fbik7CiAgICBy
ZXNpemUoX01fbnVtX2VsZW1lbnRzICsgX19uKTsKICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24s
ICsrX19mKQogICAgICBpbnNlcnRfdW5pcXVlX25vcmVzaXplKCpfX2YpOwogIH0KCiAgdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBpbnNlcnRfZXF1YWwoX0ZvcndhcmRJ
dGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX19sLAogICAgICAgICAgICAgICAgICAgIGZv
cndhcmRfaXRlcmF0b3JfdGFnKQogIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFu
Y2UoX19mLCBfX2wsIF9fbik7CiAgICByZXNpemUoX01fbnVtX2VsZW1lbnRzICsgX19uKTsKICAg
IGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19mKQogICAgICBpbnNlcnRfZXF1YWxfbm9yZXNp
emUoKl9fZik7CiAgfQoKIyA0NTQgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaGFzaHRhYmxlLmgiIDMKCgogIHJlZmVyZW5j
ZSBmaW5kX29yX2luc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX29iaik7CgogIGl0ZXJhdG9yIGZp
bmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSAKICB7CiAgICBzaXplX3R5cGUgX19uID0gX01fYmt0
X251bV9rZXkoX19rZXkpOwogICAgX05vZGUqIF9fZmlyc3Q7CiAgICBmb3IgKCBfX2ZpcnN0ID0g
X01fYnVja2V0c1tfX25dOwogICAgICAgICAgX19maXJzdCAmJiAhX01fZXF1YWxzKF9NX2dldF9r
ZXkoX19maXJzdC0+X01fdmFsKSwgX19rZXkpOwogICAgICAgICAgX19maXJzdCA9IF9fZmlyc3Qt
Pl9NX25leHQpCiAgICAgIHt9CiAgICByZXR1cm4gaXRlcmF0b3IoX19maXJzdCwgdGhpcyk7CiAg
fSAKCiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CiAg
ewogICAgc2l6ZV90eXBlIF9fbiA9IF9NX2JrdF9udW1fa2V5KF9fa2V5KTsKICAgIGNvbnN0IF9O
b2RlKiBfX2ZpcnN0OwogICAgZm9yICggX19maXJzdCA9IF9NX2J1Y2tldHNbX19uXTsKICAgICAg
ICAgIF9fZmlyc3QgJiYgIV9NX2VxdWFscyhfTV9nZXRfa2V5KF9fZmlyc3QtPl9NX3ZhbCksIF9f
a2V5KTsKICAgICAgICAgIF9fZmlyc3QgPSBfX2ZpcnN0LT5fTV9uZXh0KQogICAgICB7fQogICAg
cmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9fZmlyc3QsIHRoaXMpOwogIH0gCgogIHNpemVfdHlwZSBj
b3VudChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CiAgewogICAgY29uc3Qgc2l6ZV90eXBl
IF9fbiA9IF9NX2JrdF9udW1fa2V5KF9fa2V5KTsKICAgIHNpemVfdHlwZSBfX3Jlc3VsdCA9IDA7
CgogICAgZm9yIChjb25zdCBfTm9kZSogX19jdXIgPSBfTV9idWNrZXRzW19fbl07IF9fY3VyOyBf
X2N1ciA9IF9fY3VyLT5fTV9uZXh0KQogICAgICBpZiAoX01fZXF1YWxzKF9NX2dldF9rZXkoX19j
dXItPl9NX3ZhbCksIF9fa2V5KSkKICAgICAgICArK19fcmVzdWx0OwogICAgcmV0dXJuIF9fcmVz
dWx0OwogIH0KCiAgcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+IAogIGVxdWFsX3JhbmdlKGNvbnN0
IGtleV90eXBlJiBfX2tleSk7CgogIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9y
PiAKICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0OwoKICBzaXplX3R5
cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KTsKICB2b2lkIGVyYXNlKGNvbnN0IGl0ZXJh
dG9yJiBfX2l0KTsKICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFz
dCk7CgogIHZvaWQgZXJhc2UoY29uc3QgY29uc3RfaXRlcmF0b3ImIF9faXQpOwogIHZvaWQgZXJh
c2UoY29uc3RfaXRlcmF0b3IgX19maXJzdCwgY29uc3RfaXRlcmF0b3IgX19sYXN0KTsKCiAgdm9p
ZCByZXNpemUoc2l6ZV90eXBlIF9fbnVtX2VsZW1lbnRzX2hpbnQpOwogIHZvaWQgY2xlYXIoKTsK
CnByaXZhdGU6CiAgc2l6ZV90eXBlIF9NX25leHRfc2l6ZShzaXplX3R5cGUgX19uKSBjb25zdAog
ICAgeyByZXR1cm4gX19zdGxfbmV4dF9wcmltZShfX24pOyB9CgogIHZvaWQgX01faW5pdGlhbGl6
ZV9idWNrZXRzKHNpemVfdHlwZSBfX24pCiAgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fbl9idWNr
ZXRzID0gX01fbmV4dF9zaXplKF9fbik7CiAgICBfTV9idWNrZXRzLnJlc2VydmUoX19uX2J1Y2tl
dHMpOwogICAgX01fYnVja2V0cy5pbnNlcnQoX01fYnVja2V0cy5lbmQoKSwgX19uX2J1Y2tldHMs
IChfTm9kZSopIDApOwogICAgX01fbnVtX2VsZW1lbnRzID0gMDsKICB9CgogIHNpemVfdHlwZSBf
TV9ia3RfbnVtX2tleShjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CiAgewogICAgcmV0dXJu
IF9NX2JrdF9udW1fa2V5KF9fa2V5LCBfTV9idWNrZXRzLnNpemUoKSk7CiAgfQoKICBzaXplX3R5
cGUgX01fYmt0X251bShjb25zdCB2YWx1ZV90eXBlJiBfX29iaikgY29uc3QKICB7CiAgICByZXR1
cm4gX01fYmt0X251bV9rZXkoX01fZ2V0X2tleShfX29iaikpOwogIH0KCiAgc2l6ZV90eXBlIF9N
X2JrdF9udW1fa2V5KGNvbnN0IGtleV90eXBlJiBfX2tleSwgc2l6ZV90IF9fbikgY29uc3QKICB7
CiAgICByZXR1cm4gX01faGFzaChfX2tleSkgJSBfX247CiAgfQoKICBzaXplX3R5cGUgX01fYmt0
X251bShjb25zdCB2YWx1ZV90eXBlJiBfX29iaiwgc2l6ZV90IF9fbikgY29uc3QKICB7CiAgICBy
ZXR1cm4gX01fYmt0X251bV9rZXkoX01fZ2V0X2tleShfX29iaiksIF9fbik7CiAgfQoKICBfTm9k
ZSogX01fbmV3X25vZGUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCiAgewogICAgX05vZGUqIF9f
biA9IF9NX2dldF9ub2RlKCk7CiAgICBfX24tPl9NX25leHQgPSAwOwogICAgdHJ5ICB7CiAgICAg
IGNvbnN0cnVjdCgmX19uLT5fTV92YWwsIF9fb2JqKTsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0K
ICAgIGNhdGNoKC4uLikgeyAgX01fcHV0X25vZGUoX19uKSA7IHRocm93OyB9IDsKICB9CiAgCiAg
dm9pZCBfTV9kZWxldGVfbm9kZShfTm9kZSogX19uKQogIHsKICAgIGRlc3Ryb3koJl9fbi0+X01f
dmFsKTsKICAgIF9NX3B1dF9ub2RlKF9fbik7CiAgfQoKICB2b2lkIF9NX2VyYXNlX2J1Y2tldChj
b25zdCBzaXplX3R5cGUgX19uLCBfTm9kZSogX19maXJzdCwgX05vZGUqIF9fbGFzdCk7CiAgdm9p
ZCBfTV9lcmFzZV9idWNrZXQoY29uc3Qgc2l6ZV90eXBlIF9fbiwgX05vZGUqIF9fbGFzdCk7Cgog
IHZvaWQgX01fY29weV9mcm9tKGNvbnN0IGhhc2h0YWJsZSYgX19odCk7Cgp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4SywgY2xhc3MgX0Vx
SywgCiAgICAgICAgICBjbGFzcyBfQWxsPgpfSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWwsX0tleSxf
SEYsX0V4SyxfRXFLLF9BbGw+JgpfSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWwsX0tleSxfSEYsX0V4
SyxfRXFLLF9BbGw+OjpvcGVyYXRvcisrKCkKewogIGNvbnN0IF9Ob2RlKiBfX29sZCA9IF9NX2N1
cjsKICBfTV9jdXIgPSBfTV9jdXItPl9NX25leHQ7CiAgaWYgKCFfTV9jdXIpIHsKICAgIHNpemVf
dHlwZSBfX2J1Y2tldCA9IF9NX2h0LT5fTV9ia3RfbnVtKF9fb2xkLT5fTV92YWwpOwogICAgd2hp
bGUgKCFfTV9jdXIgJiYgKytfX2J1Y2tldCA8IF9NX2h0LT5fTV9idWNrZXRzLnNpemUoKSkKICAg
ICAgX01fY3VyID0gX01faHQtPl9NX2J1Y2tldHNbX19idWNrZXRdOwogIH0KICByZXR1cm4gKnRo
aXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNz
IF9FeEssIGNsYXNzIF9FcUssIAogICAgICAgICAgY2xhc3MgX0FsbD4KaW5saW5lIF9IYXNodGFi
bGVfaXRlcmF0b3I8X1ZhbCxfS2V5LF9IRixfRXhLLF9FcUssX0FsbD4KX0hhc2h0YWJsZV9pdGVy
YXRvcjxfVmFsLF9LZXksX0hGLF9FeEssX0VxSyxfQWxsPjo6b3BlcmF0b3IrKyhpbnQpCnsKICBp
dGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICsrKnRoaXM7CiAgcmV0dXJuIF9fdG1wOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXhLLCBjbGFz
cyBfRXFLLCAKICAgICAgICAgIGNsYXNzIF9BbGw+Cl9IYXNodGFibGVfY29uc3RfaXRlcmF0b3I8
X1ZhbCxfS2V5LF9IRixfRXhLLF9FcUssX0FsbD4mCl9IYXNodGFibGVfY29uc3RfaXRlcmF0b3I8
X1ZhbCxfS2V5LF9IRixfRXhLLF9FcUssX0FsbD46Om9wZXJhdG9yKysoKQp7CiAgY29uc3QgX05v
ZGUqIF9fb2xkID0gX01fY3VyOwogIF9NX2N1ciA9IF9NX2N1ci0+X01fbmV4dDsKICBpZiAoIV9N
X2N1cikgewogICAgc2l6ZV90eXBlIF9fYnVja2V0ID0gX01faHQtPl9NX2JrdF9udW0oX19vbGQt
Pl9NX3ZhbCk7CiAgICB3aGlsZSAoIV9NX2N1ciAmJiArK19fYnVja2V0IDwgX01faHQtPl9NX2J1
Y2tldHMuc2l6ZSgpKQogICAgICBfTV9jdXIgPSBfTV9odC0+X01fYnVja2V0c1tfX2J1Y2tldF07
CiAgfQogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXks
IGNsYXNzIF9IRiwgY2xhc3MgX0V4SywgY2xhc3MgX0VxSywgCiAgICAgICAgICBjbGFzcyBfQWxs
PgppbmxpbmUgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcjxfVmFsLF9LZXksX0hGLF9FeEssX0Vx
SyxfQWxsPgpfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yPF9WYWwsX0tleSxfSEYsX0V4SyxfRXFL
LF9BbGw+OjpvcGVyYXRvcisrKGludCkKewogIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7
CiAgKysqdGhpczsKICByZXR1cm4gX190bXA7Cn0KCiMgNjY0ICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2hhc2h0YWJsZS5o
IiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3Mg
X0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
aGFzaHRhYmxlPF9WYWwsX0tleSxfSEYsX0V4LF9FcSxfQWxsPiYgX19odDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgaGFzaHRhYmxlPF9WYWwsX0tleSxfSEYsX0V4LF9FcSxfQWxsPiYg
X19odDIpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGhhc2h0YWJsZTxfVmFsLF9LZXksX0hGLF9FeCxf
RXEsX0FsbD46Ol9Ob2RlIF9Ob2RlOwogIGlmIChfX2h0MS5fTV9idWNrZXRzLnNpemUoKSAhPSBf
X2h0Mi5fTV9idWNrZXRzLnNpemUoKSkKICAgIHJldHVybiBmYWxzZTsKICBmb3IgKGludCBfX24g
PSAwOyBfX24gPCBfX2h0MS5fTV9idWNrZXRzLnNpemUoKTsgKytfX24pIHsKICAgIF9Ob2RlKiBf
X2N1cjEgPSBfX2h0MS5fTV9idWNrZXRzW19fbl07CiAgICBfTm9kZSogX19jdXIyID0gX19odDIu
X01fYnVja2V0c1tfX25dOwogICAgZm9yICggOyBfX2N1cjEgJiYgX19jdXIyICYmIF9fY3VyMS0+
X01fdmFsID09IF9fY3VyMi0+X01fdmFsOwogICAgICAgICAgX19jdXIxID0gX19jdXIxLT5fTV9u
ZXh0LCBfX2N1cjIgPSBfX2N1cjItPl9NX25leHQpCiAgICAgIHt9CiAgICBpZiAoX19jdXIxIHx8
IF9fY3VyMikKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gdHJ1ZTsKfSAgCgoKCnRl
bXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeHRyYWN0
LCBjbGFzcyBfRXFLZXksIAogICAgICAgICAgY2xhc3MgX0FsbD4KaW5saW5lIHZvaWQgc3dhcCho
YXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXh0cmFjdCwgX0VxS2V5LCBfQWxsPiYgX19odDEs
CiAgICAgICAgICAgICAgICAgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4dHJhY3QsIF9F
cUtleSwgX0FsbD4mIF9faHQyKSB7CiAgX19odDEuc3dhcChfX2h0Mik7Cn0KCgoKCnRlbXBsYXRl
IDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0Vx
LCBjbGFzcyBfQWxsPgpwYWlyPHR5cGVuYW1lIGhhc2h0YWJsZTxfVmFsLF9LZXksX0hGLF9FeCxf
RXEsX0FsbD46Oml0ZXJhdG9yLCBib29sPiAKaGFzaHRhYmxlPF9WYWwsX0tleSxfSEYsX0V4LF9F
cSxfQWxsPgogIDo6aW5zZXJ0X3VuaXF1ZV9ub3Jlc2l6ZShjb25zdCB2YWx1ZV90eXBlJiBfX29i
aikKewogIGNvbnN0IHNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtKF9fb2JqKTsKICBfTm9kZSog
X19maXJzdCA9IF9NX2J1Y2tldHNbX19uXTsKCiAgZm9yIChfTm9kZSogX19jdXIgPSBfX2ZpcnN0
OyBfX2N1cjsgX19jdXIgPSBfX2N1ci0+X01fbmV4dCkgCiAgICBpZiAoX01fZXF1YWxzKF9NX2dl
dF9rZXkoX19jdXItPl9NX3ZhbCksIF9NX2dldF9rZXkoX19vYmopKSkKICAgICAgcmV0dXJuIHBh
aXI8aXRlcmF0b3IsIGJvb2w+KGl0ZXJhdG9yKF9fY3VyLCB0aGlzKSwgZmFsc2UpOwoKICBfTm9k
ZSogX190bXAgPSBfTV9uZXdfbm9kZShfX29iaik7CiAgX190bXAtPl9NX25leHQgPSBfX2ZpcnN0
OwogIF9NX2J1Y2tldHNbX19uXSA9IF9fdG1wOwogICsrX01fbnVtX2VsZW1lbnRzOwogIHJldHVy
biBwYWlyPGl0ZXJhdG9yLCBib29sPihpdGVyYXRvcihfX3RtcCwgdGhpcyksIHRydWUpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNs
YXNzIF9FcSwgY2xhc3MgX0FsbD4KdHlwZW5hbWUgaGFzaHRhYmxlPF9WYWwsX0tleSxfSEYsX0V4
LF9FcSxfQWxsPjo6aXRlcmF0b3IgCmhhc2h0YWJsZTxfVmFsLF9LZXksX0hGLF9FeCxfRXEsX0Fs
bD4KICA6Omluc2VydF9lcXVhbF9ub3Jlc2l6ZShjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKewog
IGNvbnN0IHNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtKF9fb2JqKTsKICBfTm9kZSogX19maXJz
dCA9IF9NX2J1Y2tldHNbX19uXTsKCiAgZm9yIChfTm9kZSogX19jdXIgPSBfX2ZpcnN0OyBfX2N1
cjsgX19jdXIgPSBfX2N1ci0+X01fbmV4dCkgCiAgICBpZiAoX01fZXF1YWxzKF9NX2dldF9rZXko
X19jdXItPl9NX3ZhbCksIF9NX2dldF9rZXkoX19vYmopKSkgewogICAgICBfTm9kZSogX190bXAg
PSBfTV9uZXdfbm9kZShfX29iaik7CiAgICAgIF9fdG1wLT5fTV9uZXh0ID0gX19jdXItPl9NX25l
eHQ7CiAgICAgIF9fY3VyLT5fTV9uZXh0ID0gX190bXA7CiAgICAgICsrX01fbnVtX2VsZW1lbnRz
OwogICAgICByZXR1cm4gaXRlcmF0b3IoX190bXAsIHRoaXMpOwogICAgfQoKICBfTm9kZSogX190
bXAgPSBfTV9uZXdfbm9kZShfX29iaik7CiAgX190bXAtPl9NX25leHQgPSBfX2ZpcnN0OwogIF9N
X2J1Y2tldHNbX19uXSA9IF9fdG1wOwogICsrX01fbnVtX2VsZW1lbnRzOwogIHJldHVybiBpdGVy
YXRvcihfX3RtcCwgdGhpcyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBj
bGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgp0eXBlbmFtZSBoYXNo
dGFibGU8X1ZhbCxfS2V5LF9IRixfRXgsX0VxLF9BbGw+OjpyZWZlcmVuY2UgCmhhc2h0YWJsZTxf
VmFsLF9LZXksX0hGLF9FeCxfRXEsX0FsbD46OmZpbmRfb3JfaW5zZXJ0KGNvbnN0IHZhbHVlX3R5
cGUmIF9fb2JqKQp7CiAgcmVzaXplKF9NX251bV9lbGVtZW50cyArIDEpOwoKICBzaXplX3R5cGUg
X19uID0gX01fYmt0X251bShfX29iaik7CiAgX05vZGUqIF9fZmlyc3QgPSBfTV9idWNrZXRzW19f
bl07CgogIGZvciAoX05vZGUqIF9fY3VyID0gX19maXJzdDsgX19jdXI7IF9fY3VyID0gX19jdXIt
Pl9NX25leHQpCiAgICBpZiAoX01fZXF1YWxzKF9NX2dldF9rZXkoX19jdXItPl9NX3ZhbCksIF9N
X2dldF9rZXkoX19vYmopKSkKICAgICAgcmV0dXJuIF9fY3VyLT5fTV92YWw7CgogIF9Ob2RlKiBf
X3RtcCA9IF9NX25ld19ub2RlKF9fb2JqKTsKICBfX3RtcC0+X01fbmV4dCA9IF9fZmlyc3Q7CiAg
X01fYnVja2V0c1tfX25dID0gX190bXA7CiAgKytfTV9udW1fZWxlbWVudHM7CiAgcmV0dXJuIF9f
dG1wLT5fTV92YWw7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBf
SEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgpwYWlyPHR5cGVuYW1lIGhhc2h0
YWJsZTxfVmFsLF9LZXksX0hGLF9FeCxfRXEsX0FsbD46Oml0ZXJhdG9yLAogICAgIHR5cGVuYW1l
IGhhc2h0YWJsZTxfVmFsLF9LZXksX0hGLF9FeCxfRXEsX0FsbD46Oml0ZXJhdG9yPiAKaGFzaHRh
YmxlPF9WYWwsX0tleSxfSEYsX0V4LF9FcSxfQWxsPjo6ZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5
cGUmIF9fa2V5KQp7CiAgdHlwZWRlZiBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4gX1BpaTsKICBj
b25zdCBzaXplX3R5cGUgX19uID0gX01fYmt0X251bV9rZXkoX19rZXkpOwoKICBmb3IgKF9Ob2Rl
KiBfX2ZpcnN0ID0gX01fYnVja2V0c1tfX25dOyBfX2ZpcnN0OyBfX2ZpcnN0ID0gX19maXJzdC0+
X01fbmV4dCkKICAgIGlmIChfTV9lcXVhbHMoX01fZ2V0X2tleShfX2ZpcnN0LT5fTV92YWwpLCBf
X2tleSkpIHsKICAgICAgZm9yIChfTm9kZSogX19jdXIgPSBfX2ZpcnN0LT5fTV9uZXh0OyBfX2N1
cjsgX19jdXIgPSBfX2N1ci0+X01fbmV4dCkKICAgICAgICBpZiAoIV9NX2VxdWFscyhfTV9nZXRf
a2V5KF9fY3VyLT5fTV92YWwpLCBfX2tleSkpCiAgICAgICAgICByZXR1cm4gX1BpaShpdGVyYXRv
cihfX2ZpcnN0LCB0aGlzKSwgaXRlcmF0b3IoX19jdXIsIHRoaXMpKTsKICAgICAgZm9yIChzaXpl
X3R5cGUgX19tID0gX19uICsgMTsgX19tIDwgX01fYnVja2V0cy5zaXplKCk7ICsrX19tKQogICAg
ICAgIGlmIChfTV9idWNrZXRzW19fbV0pCiAgICAgICAgICByZXR1cm4gX1BpaShpdGVyYXRvcihf
X2ZpcnN0LCB0aGlzKSwKICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoX01fYnVja2V0c1tf
X21dLCB0aGlzKSk7CiAgICAgIHJldHVybiBfUGlpKGl0ZXJhdG9yKF9fZmlyc3QsIHRoaXMpLCBl
bmQoKSk7CiAgICB9CiAgcmV0dXJuIF9QaWkoZW5kKCksIGVuZCgpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNs
YXNzIF9BbGw+CnBhaXI8dHlwZW5hbWUgaGFzaHRhYmxlPF9WYWwsX0tleSxfSEYsX0V4LF9FcSxf
QWxsPjo6Y29uc3RfaXRlcmF0b3IsIAogICAgIHR5cGVuYW1lIGhhc2h0YWJsZTxfVmFsLF9LZXks
X0hGLF9FeCxfRXEsX0FsbD46OmNvbnN0X2l0ZXJhdG9yPiAKaGFzaHRhYmxlPF9WYWwsX0tleSxf
SEYsX0V4LF9FcSxfQWxsPgogIDo6ZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBj
b25zdAp7CiAgdHlwZWRlZiBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4gX1Bp
aTsKICBjb25zdCBzaXplX3R5cGUgX19uID0gX01fYmt0X251bV9rZXkoX19rZXkpOwoKICBmb3Ig
KGNvbnN0IF9Ob2RlKiBfX2ZpcnN0ID0gX01fYnVja2V0c1tfX25dIDsKICAgICAgIF9fZmlyc3Q7
IAogICAgICAgX19maXJzdCA9IF9fZmlyc3QtPl9NX25leHQpIHsKICAgIGlmIChfTV9lcXVhbHMo
X01fZ2V0X2tleShfX2ZpcnN0LT5fTV92YWwpLCBfX2tleSkpIHsKICAgICAgZm9yIChjb25zdCBf
Tm9kZSogX19jdXIgPSBfX2ZpcnN0LT5fTV9uZXh0OwogICAgICAgICAgIF9fY3VyOwogICAgICAg
ICAgIF9fY3VyID0gX19jdXItPl9NX25leHQpCiAgICAgICAgaWYgKCFfTV9lcXVhbHMoX01fZ2V0
X2tleShfX2N1ci0+X01fdmFsKSwgX19rZXkpKQogICAgICAgICAgcmV0dXJuIF9QaWkoY29uc3Rf
aXRlcmF0b3IoX19maXJzdCwgdGhpcyksCiAgICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVy
YXRvcihfX2N1ciwgdGhpcykpOwogICAgICBmb3IgKHNpemVfdHlwZSBfX20gPSBfX24gKyAxOyBf
X20gPCBfTV9idWNrZXRzLnNpemUoKTsgKytfX20pCiAgICAgICAgaWYgKF9NX2J1Y2tldHNbX19t
XSkKICAgICAgICAgIHJldHVybiBfUGlpKGNvbnN0X2l0ZXJhdG9yKF9fZmlyc3QsIHRoaXMpLAog
ICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IoX01fYnVja2V0c1tfX21dLCB0aGlz
KSk7CiAgICAgIHJldHVybiBfUGlpKGNvbnN0X2l0ZXJhdG9yKF9fZmlyc3QsIHRoaXMpLCBlbmQo
KSk7CiAgICB9CiAgfQogIHJldHVybiBfUGlpKGVuZCgpLCBlbmQoKSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBj
bGFzcyBfQWxsPgp0eXBlbmFtZSBoYXNodGFibGU8X1ZhbCxfS2V5LF9IRixfRXgsX0VxLF9BbGw+
OjpzaXplX3R5cGUgCmhhc2h0YWJsZTxfVmFsLF9LZXksX0hGLF9FeCxfRXEsX0FsbD46OmVyYXNl
KGNvbnN0IGtleV90eXBlJiBfX2tleSkKewogIGNvbnN0IHNpemVfdHlwZSBfX24gPSBfTV9ia3Rf
bnVtX2tleShfX2tleSk7CiAgX05vZGUqIF9fZmlyc3QgPSBfTV9idWNrZXRzW19fbl07CiAgc2l6
ZV90eXBlIF9fZXJhc2VkID0gMDsKCiAgaWYgKF9fZmlyc3QpIHsKICAgIF9Ob2RlKiBfX2N1ciA9
IF9fZmlyc3Q7CiAgICBfTm9kZSogX19uZXh0ID0gX19jdXItPl9NX25leHQ7CiAgICB3aGlsZSAo
X19uZXh0KSB7CiAgICAgIGlmIChfTV9lcXVhbHMoX01fZ2V0X2tleShfX25leHQtPl9NX3ZhbCks
IF9fa2V5KSkgewogICAgICAgIF9fY3VyLT5fTV9uZXh0ID0gX19uZXh0LT5fTV9uZXh0OwogICAg
ICAgIF9NX2RlbGV0ZV9ub2RlKF9fbmV4dCk7CiAgICAgICAgX19uZXh0ID0gX19jdXItPl9NX25l
eHQ7CiAgICAgICAgKytfX2VyYXNlZDsKICAgICAgICAtLV9NX251bV9lbGVtZW50czsKICAgICAg
fQogICAgICBlbHNlIHsKICAgICAgICBfX2N1ciA9IF9fbmV4dDsKICAgICAgICBfX25leHQgPSBf
X2N1ci0+X01fbmV4dDsKICAgICAgfQogICAgfQogICAgaWYgKF9NX2VxdWFscyhfTV9nZXRfa2V5
KF9fZmlyc3QtPl9NX3ZhbCksIF9fa2V5KSkgewogICAgICBfTV9idWNrZXRzW19fbl0gPSBfX2Zp
cnN0LT5fTV9uZXh0OwogICAgICBfTV9kZWxldGVfbm9kZShfX2ZpcnN0KTsKICAgICAgKytfX2Vy
YXNlZDsKICAgICAgLS1fTV9udW1fZWxlbWVudHM7CiAgICB9CiAgfQogIHJldHVybiBfX2VyYXNl
ZDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3Mg
X0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+CnZvaWQgaGFzaHRhYmxlPF9WYWwsX0tleSxfSEYs
X0V4LF9FcSxfQWxsPjo6ZXJhc2UoY29uc3QgaXRlcmF0b3ImIF9faXQpCnsKICBpZiAoX05vZGUq
IGNvbnN0IF9fcCA9IF9faXQuX01fY3VyKSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19uID0gX01f
Ymt0X251bShfX3AtPl9NX3ZhbCk7CiAgICBfTm9kZSogX19jdXIgPSBfTV9idWNrZXRzW19fbl07
CgogICAgaWYgKF9fY3VyID09IF9fcCkgewogICAgICBfTV9idWNrZXRzW19fbl0gPSBfX2N1ci0+
X01fbmV4dDsKICAgICAgX01fZGVsZXRlX25vZGUoX19jdXIpOwogICAgICAtLV9NX251bV9lbGVt
ZW50czsKICAgIH0KICAgIGVsc2UgewogICAgICBfTm9kZSogX19uZXh0ID0gX19jdXItPl9NX25l
eHQ7CiAgICAgIHdoaWxlIChfX25leHQpIHsKICAgICAgICBpZiAoX19uZXh0ID09IF9fcCkgewog
ICAgICAgICAgX19jdXItPl9NX25leHQgPSBfX25leHQtPl9NX25leHQ7CiAgICAgICAgICBfTV9k
ZWxldGVfbm9kZShfX25leHQpOwogICAgICAgICAgLS1fTV9udW1fZWxlbWVudHM7CiAgICAgICAg
ICBicmVhazsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBfX2N1ciA9IF9fbmV4
dDsKICAgICAgICAgIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OwogICAgICAgIH0KICAgICAgfQog
ICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwg
Y2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+CnZvaWQgaGFzaHRhYmxlPF9WYWwsX0tl
eSxfSEYsX0V4LF9FcSxfQWxsPgogIDo6ZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3Ig
X19sYXN0KQp7CiAgc2l6ZV90eXBlIF9fZl9idWNrZXQgPSBfX2ZpcnN0Ll9NX2N1ciA/IAogICAg
X01fYmt0X251bShfX2ZpcnN0Ll9NX2N1ci0+X01fdmFsKSA6IF9NX2J1Y2tldHMuc2l6ZSgpOwog
IHNpemVfdHlwZSBfX2xfYnVja2V0ID0gX19sYXN0Ll9NX2N1ciA/IAogICAgX01fYmt0X251bShf
X2xhc3QuX01fY3VyLT5fTV92YWwpIDogX01fYnVja2V0cy5zaXplKCk7CgogIGlmIChfX2ZpcnN0
Ll9NX2N1ciA9PSBfX2xhc3QuX01fY3VyKQogICAgcmV0dXJuOwogIGVsc2UgaWYgKF9fZl9idWNr
ZXQgPT0gX19sX2J1Y2tldCkKICAgIF9NX2VyYXNlX2J1Y2tldChfX2ZfYnVja2V0LCBfX2ZpcnN0
Ll9NX2N1ciwgX19sYXN0Ll9NX2N1cik7CiAgZWxzZSB7CiAgICBfTV9lcmFzZV9idWNrZXQoX19m
X2J1Y2tldCwgX19maXJzdC5fTV9jdXIsIDApOwogICAgZm9yIChzaXplX3R5cGUgX19uID0gX19m
X2J1Y2tldCArIDE7IF9fbiA8IF9fbF9idWNrZXQ7ICsrX19uKQogICAgICBfTV9lcmFzZV9idWNr
ZXQoX19uLCAwKTsKICAgIGlmIChfX2xfYnVja2V0ICE9IF9NX2J1Y2tldHMuc2l6ZSgpKQogICAg
ICBfTV9lcmFzZV9idWNrZXQoX19sX2J1Y2tldCwgX19sYXN0Ll9NX2N1cik7CiAgfQp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNz
IF9FcSwgY2xhc3MgX0FsbD4KaW5saW5lIHZvaWQKaGFzaHRhYmxlPF9WYWwsX0tleSxfSEYsX0V4
LF9FcSxfQWxsPjo6ZXJhc2UoY29uc3RfaXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IgX19sYXN0KQp7CiAg
ZXJhc2UoaXRlcmF0b3IoY29uc3RfY2FzdDxfTm9kZSo+KF9fZmlyc3QuX01fY3VyKSwKICAgICAg
ICAgICAgICAgICBjb25zdF9jYXN0PGhhc2h0YWJsZSo+KF9fZmlyc3QuX01faHQpKSwKICAgICAg
ICBpdGVyYXRvcihjb25zdF9jYXN0PF9Ob2RlKj4oX19sYXN0Ll9NX2N1ciksCiAgICAgICAgICAg
ICAgICAgY29uc3RfY2FzdDxoYXNodGFibGUqPihfX2xhc3QuX01faHQpKSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0Vx
LCBjbGFzcyBfQWxsPgppbmxpbmUgdm9pZApoYXNodGFibGU8X1ZhbCxfS2V5LF9IRixfRXgsX0Vx
LF9BbGw+OjplcmFzZShjb25zdCBjb25zdF9pdGVyYXRvciYgX19pdCkKewogIGVyYXNlKGl0ZXJh
dG9yKGNvbnN0X2Nhc3Q8X05vZGUqPihfX2l0Ll9NX2N1ciksCiAgICAgICAgICAgICAgICAgY29u
c3RfY2FzdDxoYXNodGFibGUqPihfX2l0Ll9NX2h0KSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Zh
bCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0Fs
bD4Kdm9pZCBoYXNodGFibGU8X1ZhbCxfS2V5LF9IRixfRXgsX0VxLF9BbGw+CiAgOjpyZXNpemUo
c2l6ZV90eXBlIF9fbnVtX2VsZW1lbnRzX2hpbnQpCnsKICBjb25zdCBzaXplX3R5cGUgX19vbGRf
biA9IF9NX2J1Y2tldHMuc2l6ZSgpOwogIGlmIChfX251bV9lbGVtZW50c19oaW50ID4gX19vbGRf
bikgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IF9NX25leHRfc2l6ZShfX251bV9lbGVtZW50
c19oaW50KTsKICAgIGlmIChfX24gPiBfX29sZF9uKSB7CiAgICAgIHZlY3RvcjxfTm9kZSosIF9B
bGw+IF9fdG1wKF9fbiwgKF9Ob2RlKikoMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9NX2J1Y2tldHMuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgdHJ5ICB7CiAgICAgICAgZm9y
IChzaXplX3R5cGUgX19idWNrZXQgPSAwOyBfX2J1Y2tldCA8IF9fb2xkX247ICsrX19idWNrZXQp
IHsKICAgICAgICAgIF9Ob2RlKiBfX2ZpcnN0ID0gX01fYnVja2V0c1tfX2J1Y2tldF07CiAgICAg
ICAgICB3aGlsZSAoX19maXJzdCkgewogICAgICAgICAgICBzaXplX3R5cGUgX19uZXdfYnVja2V0
ID0gX01fYmt0X251bShfX2ZpcnN0LT5fTV92YWwsIF9fbik7CiAgICAgICAgICAgIF9NX2J1Y2tl
dHNbX19idWNrZXRdID0gX19maXJzdC0+X01fbmV4dDsKICAgICAgICAgICAgX19maXJzdC0+X01f
bmV4dCA9IF9fdG1wW19fbmV3X2J1Y2tldF07CiAgICAgICAgICAgIF9fdG1wW19fbmV3X2J1Y2tl
dF0gPSBfX2ZpcnN0OwogICAgICAgICAgICBfX2ZpcnN0ID0gX01fYnVja2V0c1tfX2J1Y2tldF07
ICAgICAgICAgIAogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfTV9idWNrZXRzLnN3YXAo
X190bXApOwogICAgICB9CgogICAgICBjYXRjaCguLi4pIHsKICAgICAgICBmb3IgKHNpemVfdHlw
ZSBfX2J1Y2tldCA9IDA7IF9fYnVja2V0IDwgX190bXAuc2l6ZSgpOyArK19fYnVja2V0KSB7CiAg
ICAgICAgICB3aGlsZSAoX190bXBbX19idWNrZXRdKSB7CiAgICAgICAgICAgIF9Ob2RlKiBfX25l
eHQgPSBfX3RtcFtfX2J1Y2tldF0tPl9NX25leHQ7CiAgICAgICAgICAgIF9NX2RlbGV0ZV9ub2Rl
KF9fdG1wW19fYnVja2V0XSk7CiAgICAgICAgICAgIF9fdG1wW19fYnVja2V0XSA9IF9fbmV4dDsK
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhyb3c7CiAgICAgIH0KCiAgICB9CiAgfQp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgs
IGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4Kdm9pZCBoYXNodGFibGU8X1ZhbCxfS2V5LF9IRixfRXgs
X0VxLF9BbGw+CiAgOjpfTV9lcmFzZV9idWNrZXQoY29uc3Qgc2l6ZV90eXBlIF9fbiwgX05vZGUq
IF9fZmlyc3QsIF9Ob2RlKiBfX2xhc3QpCnsKICBfTm9kZSogX19jdXIgPSBfTV9idWNrZXRzW19f
bl07CiAgaWYgKF9fY3VyID09IF9fZmlyc3QpCiAgICBfTV9lcmFzZV9idWNrZXQoX19uLCBfX2xh
c3QpOwogIGVsc2UgewogICAgX05vZGUqIF9fbmV4dDsKICAgIGZvciAoX19uZXh0ID0gX19jdXIt
Pl9NX25leHQ7IAogICAgICAgICBfX25leHQgIT0gX19maXJzdDsgCiAgICAgICAgIF9fY3VyID0g
X19uZXh0LCBfX25leHQgPSBfX2N1ci0+X01fbmV4dCkKICAgICAgOwogICAgd2hpbGUgKF9fbmV4
dCkgewogICAgICBfX2N1ci0+X01fbmV4dCA9IF9fbmV4dC0+X01fbmV4dDsKICAgICAgX01fZGVs
ZXRlX25vZGUoX19uZXh0KTsKICAgICAgX19uZXh0ID0gX19jdXItPl9NX25leHQ7CiAgICAgIC0t
X01fbnVtX2VsZW1lbnRzOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNz
IF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+CnZvaWQg
aGFzaHRhYmxlPF9WYWwsX0tleSxfSEYsX0V4LF9FcSxfQWxsPgogIDo6X01fZXJhc2VfYnVja2V0
KGNvbnN0IHNpemVfdHlwZSBfX24sIF9Ob2RlKiBfX2xhc3QpCnsKICBfTm9kZSogX19jdXIgPSBf
TV9idWNrZXRzW19fbl07CiAgd2hpbGUgKF9fY3VyICE9IF9fbGFzdCkgewogICAgX05vZGUqIF9f
bmV4dCA9IF9fY3VyLT5fTV9uZXh0OwogICAgX01fZGVsZXRlX25vZGUoX19jdXIpOwogICAgX19j
dXIgPSBfX25leHQ7CiAgICBfTV9idWNrZXRzW19fbl0gPSBfX2N1cjsKICAgIC0tX01fbnVtX2Vs
ZW1lbnRzOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9I
RiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+CnZvaWQgaGFzaHRhYmxlPF9WYWws
X0tleSxfSEYsX0V4LF9FcSxfQWxsPjo6Y2xlYXIoKQp7CiAgZm9yIChzaXplX3R5cGUgX19pID0g
MDsgX19pIDwgX01fYnVja2V0cy5zaXplKCk7ICsrX19pKSB7CiAgICBfTm9kZSogX19jdXIgPSBf
TV9idWNrZXRzW19faV07CiAgICB3aGlsZSAoX19jdXIgIT0gMCkgewogICAgICBfTm9kZSogX19u
ZXh0ID0gX19jdXItPl9NX25leHQ7CiAgICAgIF9NX2RlbGV0ZV9ub2RlKF9fY3VyKTsKICAgICAg
X19jdXIgPSBfX25leHQ7CiAgICB9CiAgICBfTV9idWNrZXRzW19faV0gPSAwOwogIH0KICBfTV9u
dW1fZWxlbWVudHMgPSAwOwp9CgogICAgCnRlbXBsYXRlIDxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5
LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgp2b2lkIGhhc2h0
YWJsZTxfVmFsLF9LZXksX0hGLF9FeCxfRXEsX0FsbD4KICA6Ol9NX2NvcHlfZnJvbShjb25zdCBo
YXNodGFibGUmIF9faHQpCnsKICBfTV9idWNrZXRzLmNsZWFyKCk7CiAgX01fYnVja2V0cy5yZXNl
cnZlKF9faHQuX01fYnVja2V0cy5zaXplKCkpOwogIF9NX2J1Y2tldHMuaW5zZXJ0KF9NX2J1Y2tl
dHMuZW5kKCksIF9faHQuX01fYnVja2V0cy5zaXplKCksIChfTm9kZSopIDApOwogIHRyeSAgewog
ICAgZm9yIChzaXplX3R5cGUgX19pID0gMDsgX19pIDwgX19odC5fTV9idWNrZXRzLnNpemUoKTsg
KytfX2kpIHsKICAgICAgaWYgKGNvbnN0IF9Ob2RlKiBfX2N1ciA9IF9faHQuX01fYnVja2V0c1tf
X2ldKSB7CiAgICAgICAgX05vZGUqIF9fX2NvcHkgPSBfTV9uZXdfbm9kZShfX2N1ci0+X01fdmFs
KTsKICAgICAgICBfTV9idWNrZXRzW19faV0gPSBfX19jb3B5OwoKICAgICAgICBmb3IgKF9Ob2Rl
KiBfX25leHQgPSBfX2N1ci0+X01fbmV4dDsgCiAgICAgICAgICAgICBfX25leHQ7IAogICAgICAg
ICAgICAgX19jdXIgPSBfX25leHQsIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0KSB7CiAgICAgICAg
ICBfX19jb3B5LT5fTV9uZXh0ID0gX01fbmV3X25vZGUoX19uZXh0LT5fTV92YWwpOwogICAgICAg
ICAgX19fY29weSA9IF9fX2NvcHktPl9NX25leHQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAg
ICBfTV9udW1fZWxlbWVudHMgPSBfX2h0Ll9NX251bV9lbGVtZW50czsKICB9CiAgY2F0Y2goLi4u
KSB7ICBjbGVhcigpIDsgdGhyb3c7IH0gOwp9CgogCgoKCiAKIAogCiMgMzEgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9oYXNoX21h
cCIgMiAzCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8u
Li8uLi9pbmNsdWRlL2crKy0zL3N0bF9oYXNoX21hcC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9U
cCwgY2xhc3MgX0hhc2hGY24gPSBoYXNoPF9LZXk+LAogICAgICAgICAgY2xhc3MgX0VxdWFsS2V5
ID0gZXF1YWxfdG88X0tleT4sCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8IF9U
cCA+ICA+CgoKCgpjbGFzcyBoYXNoX21hcAp7CnByaXZhdGU6CiAgdHlwZWRlZiBoYXNodGFibGU8
cGFpcjxjb25zdCBfS2V5LF9UcD4sX0tleSxfSGFzaEZjbiwKICAgICAgICAgICAgICAgICAgICBf
U2VsZWN0MXN0PHBhaXI8Y29uc3QgX0tleSxfVHA+ID4sX0VxdWFsS2V5LF9BbGxvYz4gX0h0Owog
IF9IdCBfTV9odDsKCnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6a2V5X3R5cGUga2V5
X3R5cGU7CiAgdHlwZWRlZiBfVHAgZGF0YV90eXBlOwogIHR5cGVkZWYgX1RwIG1hcHBlZF90eXBl
OwogIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfSHQ6Omhhc2hlciBoYXNoZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6Omtl
eV9lcXVhbCBrZXlfZXF1YWw7CiAgCiAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnNpemVfdHlwZSBz
aXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYg
dHlwZW5hbWUgX0h0OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0h0
Ojpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9I
dDo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X2l0ZXJh
dG9yIGNvbnN0X2l0ZXJhdG9yOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6YWxsb2NhdG9yX3R5
cGUgYWxsb2NhdG9yX3R5cGU7CgogIGhhc2hlciBoYXNoX2Z1bmN0KCkgY29uc3QgeyByZXR1cm4g
X01faHQuaGFzaF9mdW5jdCgpOyB9CiAga2V5X2VxdWFsIGtleV9lcSgpIGNvbnN0IHsgcmV0dXJu
IF9NX2h0LmtleV9lcSgpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0
IHsgcmV0dXJuIF9NX2h0LmdldF9hbGxvY2F0b3IoKTsgfQoKcHVibGljOgogIGhhc2hfbWFwKCkg
OiBfTV9odCgxMDAsIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30K
ICBleHBsaWNpdCBoYXNoX21hcChzaXplX3R5cGUgX19uKQogICAgOiBfTV9odChfX24sIGhhc2hl
cigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KICBoYXNoX21hcChzaXplX3R5
cGUgX19uLCBjb25zdCBoYXNoZXImIF9faGYpCiAgICA6IF9NX2h0KF9fbiwgX19oZiwga2V5X2Vx
dWFsKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CiAgaGFzaF9tYXAoc2l6ZV90eXBlIF9fbiwgY29u
c3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAogICAgICAgICAgIGNvbnN0
IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV9odChfX24s
IF9faGYsIF9fZXFsLCBfX2EpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CiAgaGFzaF9tYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCiAgICA6
IF9NX2h0KDEwMCwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAg
eyBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsgfQogIHRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyYXRvcj4KICBoYXNoX21hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9y
IF9fbCwgc2l6ZV90eXBlIF9fbikKICAgIDogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFs
KCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wp
OyB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIGhhc2hfbWFwKF9JbnB1dEl0
ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uLAogICAgICAgICAg
IGNvbnN0IGhhc2hlciYgX19oZikKICAgIDogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwg
YWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7IH0K
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgaGFzaF9tYXAoX0lucHV0SXRlcmF0
b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCiAgICAgICAgICAgY29u
c3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAogICAgICAgICAgIGNvbnN0
IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV9odChfX24s
IF9faGYsIF9fZXFsLCBfX2EpCiAgICB7IF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOyB9
CgojIDE0NCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0bF9oYXNoX21hcC5oIiAzCgoKcHVibGljOgogIHNpemVfdHlwZSBzaXpl
KCkgY29uc3QgeyByZXR1cm4gX01faHQuc2l6ZSgpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkg
Y29uc3QgeyByZXR1cm4gX01faHQubWF4X3NpemUoKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7
IHJldHVybiBfTV9odC5lbXB0eSgpOyB9CiAgdm9pZCBzd2FwKGhhc2hfbWFwJiBfX2hzKSB7IF9N
X2h0LnN3YXAoX19ocy5fTV9odCk7IH0KICBmcmllbmQgYm9vbAogIG9wZXJhdG9yPT0gPD4gIChj
b25zdCBoYXNoX21hcCYsIGNvbnN0IGhhc2hfbWFwJik7CgogIGl0ZXJhdG9yIGJlZ2luKCkgeyBy
ZXR1cm4gX01faHQuYmVnaW4oKTsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2h0LmVu
ZCgpOyB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9odC5iZWdp
bigpOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01faHQuZW5kKCk7
IH0KCnB1YmxpYzoKICBwYWlyPGl0ZXJhdG9yLGJvb2w+IGluc2VydChjb25zdCB2YWx1ZV90eXBl
JiBfX29iaikKICAgIHsgcmV0dXJuIF9NX2h0Lmluc2VydF91bmlxdWUoX19vYmopOyB9CgogIHRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRv
ciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKICAgIHsgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2Ys
X19sKTsgfQoKCgoKCgoKICBwYWlyPGl0ZXJhdG9yLGJvb2w+IGluc2VydF9ub3Jlc2l6ZShjb25z
dCB2YWx1ZV90eXBlJiBfX29iaikKICAgIHsgcmV0dXJuIF9NX2h0Lmluc2VydF91bmlxdWVfbm9y
ZXNpemUoX19vYmopOyB9ICAgIAoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tl
eSkgeyByZXR1cm4gX01faHQuZmluZChfX2tleSk7IH0KICBjb25zdF9pdGVyYXRvciBmaW5kKGNv
bnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QgCiAgICB7IHJldHVybiBfTV9odC5maW5kKF9fa2V5
KTsgfQoKICBfVHAmIG9wZXJhdG9yW10oY29uc3Qga2V5X3R5cGUmIF9fa2V5KSB7CiAgICByZXR1
cm4gX01faHQuZmluZF9vcl9pbnNlcnQodmFsdWVfdHlwZShfX2tleSwgX1RwKCkpKS5zZWNvbmQ7
CiAgfQoKICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdCB7IHJl
dHVybiBfTV9odC5jb3VudChfX2tleSk7IH0KICAKICBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4g
ZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQogICAgeyByZXR1cm4gX01faHQuZXF1
YWxfcmFuZ2UoX19rZXkpOyB9CiAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+
CiAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAogICAgeyByZXR1cm4g
X01faHQuZXF1YWxfcmFuZ2UoX19rZXkpOyB9CgogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlf
dHlwZSYgX19rZXkpIHtyZXR1cm4gX01faHQuZXJhc2UoX19rZXkpOyB9CiAgdm9pZCBlcmFzZShp
dGVyYXRvciBfX2l0KSB7IF9NX2h0LmVyYXNlKF9faXQpOyB9CiAgdm9pZCBlcmFzZShpdGVyYXRv
ciBfX2YsIGl0ZXJhdG9yIF9fbCkgeyBfTV9odC5lcmFzZShfX2YsIF9fbCk7IH0KICB2b2lkIGNs
ZWFyKCkgeyBfTV9odC5jbGVhcigpOyB9CgogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX2hpbnQp
IHsgX01faHQucmVzaXplKF9faGludCk7IH0KICBzaXplX3R5cGUgYnVja2V0X2NvdW50KCkgY29u
c3QgeyByZXR1cm4gX01faHQuYnVja2V0X2NvdW50KCk7IH0KICBzaXplX3R5cGUgbWF4X2J1Y2tl
dF9jb3VudCgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0Lm1heF9idWNrZXRfY291bnQoKTsgfQogIHNp
emVfdHlwZSBlbGVtc19pbl9idWNrZXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsgcmV0dXJu
IF9NX2h0LmVsZW1zX2luX2J1Y2tldChfX24pOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwg
Y2xhc3MgX1RwLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxbEtleSwgY2xhc3MgX0FsbG9jPgpp
bmxpbmUgYm9vbCAKb3BlcmF0b3I9PShjb25zdCBoYXNoX21hcDxfS2V5LF9UcCxfSGFzaEZjbixf
RXFsS2V5LF9BbGxvYz4mIF9faG0xLAogICAgICAgICAgIGNvbnN0IGhhc2hfbWFwPF9LZXksX1Rw
LF9IYXNoRmNuLF9FcWxLZXksX0FsbG9jPiYgX19obTIpCnsKICByZXR1cm4gX19obTEuX01faHQg
PT0gX19obTIuX01faHQ7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xh
c3MgX0hhc2hGY24sIGNsYXNzIF9FcWxLZXksIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgCnN3
YXAoaGFzaF9tYXA8X0tleSxfVHAsX0hhc2hGY24sX0VxbEtleSxfQWxsb2M+JiBfX2htMSwKICAg
ICBoYXNoX21hcDxfS2V5LF9UcCxfSGFzaEZjbixfRXFsS2V5LF9BbGxvYz4mIF9faG0yKQp7CiAg
X19obTEuc3dhcChfX2htMik7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAs
IGNsYXNzIF9IYXNoRmNuID0gaGFzaDxfS2V5PiwKICAgICAgICAgIGNsYXNzIF9FcXVhbEtleSA9
IGVxdWFsX3RvPF9LZXk+LAogICAgICAgICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPCBfVHAg
PiAgPgoKCgoKY2xhc3MgaGFzaF9tdWx0aW1hcAp7CnByaXZhdGU6CiAgdHlwZWRlZiBoYXNodGFi
bGU8cGFpcjxjb25zdCBfS2V5LCBfVHA+LCBfS2V5LCBfSGFzaEZjbiwKICAgICAgICAgICAgICAg
ICAgICBfU2VsZWN0MXN0PHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+LCBfRXF1YWxLZXksIF9BbGxv
Yz4gCiAgICAgICAgICBfSHQ7CiAgX0h0IF9NX2h0OwoKcHVibGljOgogIHR5cGVkZWYgdHlwZW5h
bWUgX0h0OjprZXlfdHlwZSBrZXlfdHlwZTsKICB0eXBlZGVmIF9UcCBkYXRhX3R5cGU7CiAgdHlw
ZWRlZiBfVHAgbWFwcGVkX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnZhbHVlX3R5cGUg
dmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6aGFzaGVyIGhhc2hlcjsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9IdDo6a2V5X2VxdWFsIGtleV9lcXVhbDsKCiAgdHlwZWRlZiB0eXBlbmFt
ZSBfSHQ6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmRpZmZl
cmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnBvaW50
ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfcG9pbnRlciBjb25zdF9w
b2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5
cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwoKICB0
eXBlZGVmIHR5cGVuYW1lIF9IdDo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfSHQ6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICB0eXBlZGVmIHR5cGVuYW1l
IF9IdDo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIGhhc2hlciBoYXNoX2Z1bmN0
KCkgY29uc3QgeyByZXR1cm4gX01faHQuaGFzaF9mdW5jdCgpOyB9CiAga2V5X2VxdWFsIGtleV9l
cSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmtleV9lcSgpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0
X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmdldF9hbGxvY2F0b3IoKTsgfQoKcHVi
bGljOgogIGhhc2hfbXVsdGltYXAoKSA6IF9NX2h0KDEwMCwgaGFzaGVyKCksIGtleV9lcXVhbCgp
LCBhbGxvY2F0b3JfdHlwZSgpKSB7fQogIGV4cGxpY2l0IGhhc2hfbXVsdGltYXAoc2l6ZV90eXBl
IF9fbikKICAgIDogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90
eXBlKCkpIHt9CiAgaGFzaF9tdWx0aW1hcChzaXplX3R5cGUgX19uLCBjb25zdCBoYXNoZXImIF9f
aGYpCiAgICA6IF9NX2h0KF9fbiwgX19oZiwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkp
IHt9CiAgaGFzaF9tdWx0aW1hcChzaXplX3R5cGUgX19uLCBjb25zdCBoYXNoZXImIF9faGYsIGNv
bnN0IGtleV9lcXVhbCYgX19lcWwsCiAgICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlw
ZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01faHQoX19uLCBfX2hmLCBfX2VxbCwg
X19hKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIGhhc2hfbXVsdGlt
YXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCiAgICA6IF9NX2h0KDEw
MCwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV9odC5p
bnNlcnRfZXF1YWwoX19mLCBfX2wpOyB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogIGhhc2hfbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2ws
IHNpemVfdHlwZSBfX24pCiAgICA6IF9NX2h0KF9fbiwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBh
bGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV9odC5pbnNlcnRfZXF1YWwoX19mLCBfX2wpOyB9CiAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIGhhc2hfbXVsdGltYXAoX0lucHV0SXRl
cmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCiAgICAgICAgICAg
ICAgICBjb25zdCBoYXNoZXImIF9faGYpCiAgICA6IF9NX2h0KF9fbiwgX19oZiwga2V5X2VxdWFs
KCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7
IH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgaGFzaF9tdWx0aW1hcChfSW5w
dXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbiwKICAgICAg
ICAgICAgICAgIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKICAg
ICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp
KQogICAgOiBfTV9odChfX24sIF9faGYsIF9fZXFsLCBfX2EpCiAgICB7IF9NX2h0Lmluc2VydF9l
cXVhbChfX2YsIF9fbCk7IH0KCiMgMzI3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45
NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2hhc2hfbWFwLmgiIDMKCgpwdWJsaWM6
CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9odC5zaXplKCk7IH0KICBzaXpl
X3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV9odC5tYXhfc2l6ZSgpOyB9CiAgYm9v
bCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmVtcHR5KCk7IH0KICB2b2lkIHN3YXAoaGFz
aF9tdWx0aW1hcCYgX19ocykgeyBfTV9odC5zd2FwKF9faHMuX01faHQpOyB9CiAgZnJpZW5kIGJv
b2wKICBvcGVyYXRvcj09IDw+ICAoY29uc3QgaGFzaF9tdWx0aW1hcCYsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzaF9tdWx0aW1hcCYpOwoKICBpdGVyYXRvciBi
ZWdpbigpIHsgcmV0dXJuIF9NX2h0LmJlZ2luKCk7IH0KICBpdGVyYXRvciBlbmQoKSB7IHJldHVy
biBfTV9odC5lbmQoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
X01faHQuYmVnaW4oKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9N
X2h0LmVuZCgpOyB9CgpwdWJsaWM6CiAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUm
IF9fb2JqKSAKICAgIHsgcmV0dXJuIF9NX2h0Lmluc2VydF9lcXVhbChfX29iaik7IH0KCiAgdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9y
IF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKSAKICAgIHsgX01faHQuaW5zZXJ0X2VxdWFsKF9fZixf
X2wpOyB9CgoKCgoKCgogIGl0ZXJhdG9yIGluc2VydF9ub3Jlc2l6ZShjb25zdCB2YWx1ZV90eXBl
JiBfX29iaikKICAgIHsgcmV0dXJuIF9NX2h0Lmluc2VydF9lcXVhbF9ub3Jlc2l6ZShfX29iaik7
IH0gICAgCgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSB7IHJldHVybiBf
TV9odC5maW5kKF9fa2V5KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUm
IF9fa2V5KSBjb25zdCAKICAgIHsgcmV0dXJuIF9NX2h0LmZpbmQoX19rZXkpOyB9CgogIHNpemVf
dHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmNv
dW50KF9fa2V5KTsgfQogIAogIHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShj
b25zdCBrZXlfdHlwZSYgX19rZXkpCiAgICB7IHJldHVybiBfTV9odC5lcXVhbF9yYW5nZShfX2tl
eSk7IH0KICBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4KICBlcXVhbF9yYW5n
ZShjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CiAgICB7IHJldHVybiBfTV9odC5lcXVhbF9y
YW5nZShfX2tleSk7IH0KCiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX2tleSkg
e3JldHVybiBfTV9odC5lcmFzZShfX2tleSk7IH0KICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9faXQp
IHsgX01faHQuZXJhc2UoX19pdCk7IH0KICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fZiwgaXRlcmF0
b3IgX19sKSB7IF9NX2h0LmVyYXNlKF9fZiwgX19sKTsgfQogIHZvaWQgY2xlYXIoKSB7IF9NX2h0
LmNsZWFyKCk7IH0KCnB1YmxpYzoKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19oaW50KSB7IF9N
X2h0LnJlc2l6ZShfX2hpbnQpOyB9CiAgc2l6ZV90eXBlIGJ1Y2tldF9jb3VudCgpIGNvbnN0IHsg
cmV0dXJuIF9NX2h0LmJ1Y2tldF9jb3VudCgpOyB9CiAgc2l6ZV90eXBlIG1heF9idWNrZXRfY291
bnQoKSBjb25zdCB7IHJldHVybiBfTV9odC5tYXhfYnVja2V0X2NvdW50KCk7IH0KICBzaXplX3R5
cGUgZWxlbXNfaW5fYnVja2V0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7IHJldHVybiBfTV9o
dC5lbGVtc19pbl9idWNrZXQoX19uKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz
IF9UcCwgY2xhc3MgX0hGLCBjbGFzcyBfRXFLZXksIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wg
Cm9wZXJhdG9yPT0oY29uc3QgaGFzaF9tdWx0aW1hcDxfS2V5LF9UcCxfSEYsX0VxS2V5LF9BbGxv
Yz4mIF9faG0xLAogICAgICAgICAgIGNvbnN0IGhhc2hfbXVsdGltYXA8X0tleSxfVHAsX0hGLF9F
cUtleSxfQWxsb2M+JiBfX2htMikKewogIHJldHVybiBfX2htMS5fTV9odCA9PSBfX2htMi5fTV9o
dDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaEZjbiwg
Y2xhc3MgX0VxbEtleSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCAKc3dhcChoYXNoX211bHRp
bWFwPF9LZXksX1RwLF9IYXNoRmNuLF9FcWxLZXksX0FsbG9jPiYgX19obTEsCiAgICAgaGFzaF9t
dWx0aW1hcDxfS2V5LF9UcCxfSGFzaEZjbixfRXFsS2V5LF9BbGxvYz4mIF9faG0yKQp7CiAgX19o
bTEuc3dhcChfX2htMik7Cn0KCgoKCgoKCgogCgoKCiAKIAogCiMgMzQgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9oYXNoX21hcCIg
MiAzCgoKCgogCiAKIAojIDUgIi4uL2Z1bmN0aW9uLy4uL2ludGVncmF0aW9uL2ludFF1YWRyYXR1
cmUuaCIgMgoKCgoKCiAKCiAKCgoKCgoKCgpjbGFzcyBpbnRfUXVhZHJhdHVyZSB7CnB1YmxpYzoK
ICAgCgoKCgogIGludF9RdWFkcmF0dXJlKHVuc2lnbmVkIGludCBuKTsKCiAgIAogIGlubGluZSBk
b3VibGUgY29uc3QgKiBhYnNjaXNzYXMoKSBjb25zdCB7IHJldHVybiBhYnNjaXNzYXNfOyB9Cgog
ICAKICBpbmxpbmUgZG91YmxlIGNvbnN0ICogd2VpZ2h0cygpIGNvbnN0IHsgcmV0dXJuIHdlaWdo
dHNfOyB9CgogICAKICBpbmxpbmUgY29uc3QgdW5zaWduZWQgaW50IG4oKSBjb25zdCB7IHJldHVy
biBuXzsgfQpwcm90ZWN0ZWQ6CiAgIAogIGRvdWJsZSogYWJzY2lzc2FzXzsKCiAgIAogIGRvdWJs
ZSogd2VpZ2h0c187CgogICAKCgogIGJvb2wgdXNhYmxlXzsKCnByaXZhdGU6CiAgIAoKCgogIHN0
YXRpYyBoYXNoX21hcDx1bnNpZ25lZCBpbnQsIGRvdWJsZSo+IGFic2Npc3Nhc19IOwoKICAgCgoK
CiAgc3RhdGljIGhhc2hfbWFwPHVuc2lnbmVkIGludCwgZG91YmxlKj4gd2VpZ2h0c19IOwoKICAg
CiAgdW5zaWduZWQgaW50IG5fOwp9OwoKIAoKIAoKCgoKCgoKCgpjbGFzcyBpbnRfR2F1c3NMb2Jh
dHRvIDogcHVibGljIGludF9RdWFkcmF0dXJlIHsKcHVibGljOgogIGludF9HYXVzc0xvYmF0dG8o
dW5zaWduZWQgaW50IHApOwpwcml2YXRlOgogIHVuc2lnbmVkIGludCBwXzsKfTsKCiAKCiAKCgoK
CgoKCgoKCmNsYXNzIGludF9HYXVzc0phY29iaUxvYmF0dG8gOiBwdWJsaWMgaW50X1F1YWRyYXR1
cmUgewogIGludF9HYXVzc0phY29iaUxvYmF0dG8odW5zaWduZWQgaW50IHApOwpwcml2YXRlOgog
IHVuc2lnbmVkIGludCBwXzsKfTsKCiAKCiAKCgoKCgoKCgoKCmNsYXNzIGludF9HYXVzc0phY29i
aTJMb2JhdHRvIDogcHVibGljIGludF9RdWFkcmF0dXJlIHsKICBpbnRfR2F1c3NKYWNvYmkyTG9i
YXR0byh1bnNpZ25lZCBpbnQgcCk7CnByaXZhdGU6CiAgdW5zaWduZWQgaW50IHBfOwp9OwoKCiMg
MTUgIi4uL2Z1bmN0aW9uLy4uL2ludGVncmF0aW9uLmgiIDIKCgogCgojIDEgIi4uL2Z1bmN0aW9u
Ly4uL2ludGVncmF0aW9uL2ludExwbDAwMC5oIiAxCiAKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50
ZXJmYWNlCgoKCgoKY2xhc3MgaW50X0xwbDAwMCB7CgogcHVibGljOgogIHZvaWQgb3BlcmF0b3Ig
KCkoY29uc3QgUmVhbDNkJiB4LCBjb25zdCBzcGNfTGluZWFyM2QwMDAmIGVsbSwgdWludCBnYXVz
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWFsIGRscFtdKSBjb25zdDsKfTsKCgojIDE5ICIuLi9mdW5jdGlvbi8uLi9pbnRl
Z3JhdGlvbi5oIiAyCgojIDEgIi4uL2Z1bmN0aW9uLy4uL2ludGVncmF0aW9uL2ludExwbDAwMS5o
IiAxCiAKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgoKY2xhc3MgaW50X0xwbDAw
MSB7CgogcHVibGljOgoKICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgUmVhbDNkJiB4LCBjb25zdCBz
cGNfQ29uc3RhbnQzZDAwMCYgZWxtLCB1aW50IGdhdXNzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsKiBkbHApIGNvbnN0
Owp9OwoKCiMgMjAgIi4uL2Z1bmN0aW9uLy4uL2ludGVncmF0aW9uLmgiIDIKCiMgMSAiLi4vZnVu
Y3Rpb24vLi4vaW50ZWdyYXRpb24vaW50THBsMDAzLmgiIDEKIAoKCgoKCgoKCgoKCgoKI3ByYWdt
YSBpbnRlcmZhY2UKCgoKCgpjbGFzcyBpbnRfTHBsMDAzIHsKCiBwdWJsaWM6CgogIHZvaWQgb3Bl
cmF0b3IoKShjb25zdCBSZWFsM2QmIHgsIGNvbnN0IHNwY19MaW5lYXIzZDAwMCYgZWxtLCB1aW50
IGdhdXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlYWwgc2xwW10pIGNvbnN0Owp9OwoKCiMgMjEgIi4uL2Z1bmN0aW9uLy4u
L2ludGVncmF0aW9uLmgiIDIKCiMgMSAiLi4vZnVuY3Rpb24vLi4vaW50ZWdyYXRpb24vaW50THBs
MDA0LmgiIDEKIAoKCgoKCgoKCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKCgpjbGFzcyBpbnRf
THBsMDA0IHsKCiBwdWJsaWM6CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IFJlYWwzZCYgeCwgY29u
c3Qgc3BjX0NvbnN0YW50M2QwMDAmIGVsbSwgdWludCBnYXVzcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbCogc2xwKSBj
b25zdDsKfTsKCgojIDIyICIuLi9mdW5jdGlvbi8uLi9pbnRlZ3JhdGlvbi5oIiAyCgoKIAoKIyAx
ICIuLi9mdW5jdGlvbi8uLi9pbnRlZ3JhdGlvbi9pbnRMcGxDb2wwMDAuaCIgMQogCgoKCgoKCgoK
CgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgoKY2xhc3MgaW50X0xwbENvbDAwMCB7CgogcHVibGlj
OgoKICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgZ2VvX1ZlcnRleDNkJiB4LCBjb25zdCBnZW9fVHJp
YW5nbGUzZCYgcG5sLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQgZGVnLCByZWFsIHNscFtdLCByZWFsIGRscFtdKSBjb25zdDsKfTsKCgojIDI2ICIuLi9mdW5j
dGlvbi8uLi9pbnRlZ3JhdGlvbi5oIiAyCgojIDEgIi4uL2Z1bmN0aW9uLy4uL2ludGVncmF0aW9u
L2ludExwbENvbDAwMS5oIiAxCiAKCgoKCgoKCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKCgpj
bGFzcyBpbnRfTHBsQ29sMDAxIHsKCiBwdWJsaWM6CgogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBn
ZW9fVmVydGV4M2QmIHgsIGNvbnN0IGdlb19UcmlhbmdsZTNkJiBwbmwsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWwgc2xwW10sIHJlYWwgZGxw
W10pIGNvbnN0Owp9OwoKCiMgMjcgIi4uL2Z1bmN0aW9uLy4uL2ludGVncmF0aW9uLmgiIDIKCiMg
MSAiLi4vZnVuY3Rpb24vLi4vaW50ZWdyYXRpb24vaW50THBsQ29sMDAyLmgiIDEKIAoKCgoKCgoK
CgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKCgpjbGFzcyBpbnRfTHBsQ29sMDAyIHsKCiBwdWJs
aWM6CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IGdlb19WZXJ0ZXgzZCYgeCwgY29uc3QgZ2VvX1Ry
aWFuZ2xlM2QmIHBubCwgdWludCBkZWcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQgZ2F1c3MsIHJlYWwgc2xwW10pIGNvbnN0Owp9OwoKCiMg
MjggIi4uL2Z1bmN0aW9uLy4uL2ludGVncmF0aW9uLmgiIDIKCiMgMSAiLi4vZnVuY3Rpb24vLi4v
aW50ZWdyYXRpb24vaW50THBsQ29sMDAzLmgiIDEKIAoKCgoKCgoKCgoKCgoKI3ByYWdtYSBpbnRl
cmZhY2UKCgoKCgpjbGFzcyBpbnRfTHBsQ29sMDAzIHsKCiBwdWJsaWM6CiAgdm9pZCBvcGVyYXRv
cigpKGNvbnN0IGdlb19WZXJ0ZXgzZCYgeCwgY29uc3QgZ2VvX1RyaWFuZ2xlM2QmIHBubCwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludCBnYXVz
cywgcmVhbCBzbHBbXSkgY29uc3Q7Cn07CgoKIyAyOSAiLi4vZnVuY3Rpb24vLi4vaW50ZWdyYXRp
b24uaCIgMgoKIyAxICIuLi9mdW5jdGlvbi8uLi9pbnRlZ3JhdGlvbi9pbnRMcGxDb2wwMDQuaCIg
MQogCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgoKCmNsYXNzIGludF9McGxDb2ww
MDQgewoKIHB1YmxpYzoKICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgZ2VvX1ZlcnRleDNkJiB4LCBj
b25zdCBnZW9fVHJpYW5nbGUzZCYgcG5sLCB1aW50IGRlZywgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludCBnYXVzcywgcmVhbCBkbHBbXSkgY29u
c3Q7Cn07CgoKIyAzMCAiLi4vZnVuY3Rpb24vLi4vaW50ZWdyYXRpb24uaCIgMgoKIyAxICIuLi9m
dW5jdGlvbi8uLi9pbnRlZ3JhdGlvbi9pbnRMcGxDb2wwMDUuaCIgMQogCgoKCgoKCgoKCgoKCgoj
cHJhZ21hIGludGVyZmFjZQoKCgoKCmNsYXNzIGludF9McGxDb2wwMDUgewoKIHB1YmxpYzoKICB2
b2lkIG9wZXJhdG9yKCkoY29uc3QgZ2VvX1ZlcnRleDNkJiB4LCBjb25zdCBnZW9fVHJpYW5nbGUz
ZCYgcG5sLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50IGdhdXNzLCByZWFsIGRscFtdKSBjb25zdDsKfTsKCgojIDMxICIuLi9mdW5jdGlvbi8u
Li9pbnRlZ3JhdGlvbi5oIiAyCgojIDEgIi4uL2Z1bmN0aW9uLy4uL2ludGVncmF0aW9uL2ludExw
bENvbDAwNi5oIiAxCiAKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgoKCmNsYXNz
IGludF9McGxDb2wwMDYgewoKICBwdWJsaWM6CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IHNwY19E
aXJhYzNkMDAwJiBlbG1YLCBjb25zdCBzcGNfTGluZWFyM2QwMDAmIGVsbVksIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50IGdhdXNzLCByZWFsIGRpc3QsIHJlYWwg
c2xwW10pIGNvbnN0Owp9OwoKCiMgMzIgIi4uL2Z1bmN0aW9uLy4uL2ludGVncmF0aW9uLmgiIDIK
CiMgMSAiLi4vZnVuY3Rpb24vLi4vaW50ZWdyYXRpb24vaW50THBsQ29sMDA3LmgiIDEKIAoKCgoK
CgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgoKY2xhc3MgaW50X0xwbENvbDAwNyB7Cgog
cHVibGljOgogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBzcGNfRGlyYWMzZDAwMCYgZWxtWCwgY29u
c3Qgc3BjX0xpbmVhcjNkMDAwJiBlbG1ZLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludCBnYXVzcywgcmVhbCBkaXN0LCByZWFsIGRscFtdKSBjb25zdDsKfTsKCgoj
IDMzICIuLi9mdW5jdGlvbi8uLi9pbnRlZ3JhdGlvbi5oIiAyCgoKIAoKIyAxICIuLi9mdW5jdGlv
bi8uLi9pbnRlZ3JhdGlvbi9pbnRMcGxHYWwwMDAuaCIgMQogCgoKCgoKCgoKCgoKCgojcHJhZ21h
IGludGVyZmFjZQoKCgoKCmNsYXNzIGludF9McGxHYWwwMDAgewoKIHB1YmxpYzoKICB2b2lkIG9w
ZXJhdG9yKCkoY29uc3Qgc3BjX0xpbmVhcjNkMDAwJiBlbG1YLCBjb25zdCBzcGNfTGluZWFyM2Qw
MDAmIGVsbVksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQgc3Ryb3VkSWQs
IHVpbnQgZ2F1c3NJZCwgcmVhbCBzbHBbXSkgY29uc3Q7Cn07CgoKIyAzNyAiLi4vZnVuY3Rpb24v
Li4vaW50ZWdyYXRpb24uaCIgMgoKIyAxICIuLi9mdW5jdGlvbi8uLi9pbnRlZ3JhdGlvbi9pbnRM
cGxHYWwwMDEuaCIgMQogCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgoKCmNsYXNz
IGludF9McGxHYWwwMDEgewoKIHB1YmxpYzoKICB2b2lkIG9wZXJhdG9yKCkoY29uc3Qgc3BjX0xp
bmVhcjNkMDAwJiBlbG1YLCBjb25zdCBzcGNfTGluZWFyM2QwMDAmIGVsbVksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQgc3Ryb3VkSWQsIHVpbnQgZ2F1c3NJZCwgcmVhbCBk
bHBbXSkgY29uc3Q7Cn07CgoKIyAzOCAiLi4vZnVuY3Rpb24vLi4vaW50ZWdyYXRpb24uaCIgMgoK
IyAxICIuLi9mdW5jdGlvbi8uLi9pbnRlZ3JhdGlvbi9pbnRMcGxHYWwwMDIuaCIgMQogCgoKCgoK
CgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgoKCmNsYXNzIGludF9McGxHYWwwMDIgewoKIHB1
YmxpYzoKICB2b2lkIG9wZXJhdG9yKCkoY29uc3Qgc3BjX0xpbmVhcjNkMDAwJiBlbG1YLCBjb25z
dCBzcGNfTGluZWFyM2QwMDAmIGVsbVksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQgc3Ryb3VkSWQsIHVpbnQgZ2F1c3NJZCwgcmVhbCBoeXBbXSkgY29uc3Q7Cn07CgoKIyAz
OSAiLi4vZnVuY3Rpb24vLi4vaW50ZWdyYXRpb24uaCIgMgoKIyAxICIuLi9mdW5jdGlvbi8uLi9p
bnRlZ3JhdGlvbi9pbnRMcGxHYWwwMDQuaCIgMQogCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVy
ZmFjZQoKCgoKCmNsYXNzIGludF9McGxHYWwwMDQgewoKIHB1YmxpYzoKICB2b2lkIG9wZXJhdG9y
KCkoY29uc3Qgc3BjX0xpbmVhcjNkMDAwJiBlbG1YLCBjb25zdCBzcGNfTGluZWFyM2QwMDAmIGVs
bVksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQg
Z2F1c3NJZCwgcmVhbCBkbHBbXSkgY29uc3Q7Cn07CgoKIyA0MCAiLi4vZnVuY3Rpb24vLi4vaW50
ZWdyYXRpb24uaCIgMgoKIyAxICIuLi9mdW5jdGlvbi8uLi9pbnRlZ3JhdGlvbi9pbnRMcGxHYWww
MDUuaCIgMQogCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgoKCmNsYXNzIGludF9M
cGxHYWwwMDUgewoKIHB1YmxpYzoKICB2b2lkIG9wZXJhdG9yKCkoY29uc3Qgc3BjX0xpbmVhcjNk
MDAwJiBlbG1YLCBjb25zdCBzcGNfTGluZWFyM2QwMDAmIGVsbVksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQgZ2F1c3NJZCwgcmVhbCBoeXBbXSkg
Y29uc3Q7Cn07CgoKIyA0MSAiLi4vZnVuY3Rpb24vLi4vaW50ZWdyYXRpb24uaCIgMgoKIyAxICIu
Li9mdW5jdGlvbi8uLi9pbnRlZ3JhdGlvbi9pbnRMcGxHYWwwMDYuaCIgMQogCgoKCgoKCgoKCgoK
CgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKCgpjbGFzcyBpbnRfTHBsR2FsMDA2IHsKCiBwdWJsaWM6
CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IHNwY19MaW5lYXIzZDAwMCYgZWxtWCwgY29uc3Qgc3Bj
X0xpbmVhcjNkMDAwJiBlbG1ZLAogICAgICAgICAgICAgICAgICAgICAgdWludCBzdHJvdWRJZCwg
dWludCBnYXVzc0lkLCByZWFsIGRpc3QsIHJlYWwgc2xwW10pIGNvbnN0Owp9OwoKCiMgNDIgIi4u
L2Z1bmN0aW9uLy4uL2ludGVncmF0aW9uLmgiIDIKCiMgMSAiLi4vZnVuY3Rpb24vLi4vaW50ZWdy
YXRpb24vaW50THBsR2FsMDA3LmgiIDEKIAoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNl
CgoKCgoKY2xhc3MgaW50X0xwbEdhbDAwNyB7CgogcHVibGljOgogIHZvaWQgb3BlcmF0b3IoKShj
b25zdCBzcGNfTGluZWFyM2QwMDAmIGVsbVgsIGNvbnN0IHNwY19MaW5lYXIzZDAwMCYgZWxtWSwK
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQgc3Ryb3VkSWQsIHVpbnQgZ2F1c3NJZCwgcmVhbCBk
aXN0LCByZWFsIGRscFtdKSBjb25zdDsKfTsKCgojIDQzICIuLi9mdW5jdGlvbi8uLi9pbnRlZ3Jh
dGlvbi5oIiAyCgojIDEgIi4uL2Z1bmN0aW9uLy4uL2ludGVncmF0aW9uL2ludExwbEdhbDAwOC5o
IiAxCiAKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgoKY2xhc3MgaW50X0xwbEdh
bDAwOCB7CgogcHVibGljOgogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBzcGNfTGluZWFyM2QwMDAm
IGVsbVgsIGNvbnN0IHNwY19MaW5lYXIzZDAwMCYgZWxtWSwKICAgICAgICAgICAgICAgICAgICAg
IHVpbnQgc3Ryb3VkSWQsIHVpbnQgZ2F1c3NJZCwgcmVhbCBkaXN0LCByZWFsIGh5cFtdKSBjb25z
dDsKfTsKCgojIDQ0ICIuLi9mdW5jdGlvbi8uLi9pbnRlZ3JhdGlvbi5oIiAyCgojIDEgIi4uL2Z1
bmN0aW9uLy4uL2ludGVncmF0aW9uL2ludExwbEdhbDAwOS5oIiAxCiAKCgoKCgoKCgoKCgoKCiNw
cmFnbWEgaW50ZXJmYWNlCgoKCgoKY2xhc3MgaW50X0xwbEdhbDAwOSB7CgogcHVibGljOgogIHZv
aWQgb3BlcmF0b3IoKShjb25zdCBzcGNfTGluZWFyM2QwMDAmIGVsbVgsIGNvbnN0IHNwY19MaW5l
YXIzZDAwMCYgZWxtWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50IGdhdXNzLCByZWFsIGRscFtdKSBjb25zdDsKfTsKCgojIDQ1ICIuLi9mdW5j
dGlvbi8uLi9pbnRlZ3JhdGlvbi5oIiAyCgojIDEgIi4uL2Z1bmN0aW9uLy4uL2ludGVncmF0aW9u
L2ludExwbEdhbDAxMC5oIiAxCiAKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgoK
Y2xhc3MgaW50X0xwbEdhbDAxMCB7CgogcHVibGljOgogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBz
cGNfQ29uc3RhbnQzZDAwMCYgZWxtWCwgY29uc3Qgc3BjX0NvbnN0YW50M2QwMDAmIGVsbVksIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQgYWNy
eVtdLCByZWFsKiBkbHApIGNvbnN0Owp9OwoKCiMgNDYgIi4uL2Z1bmN0aW9uLy4uL2ludGVncmF0
aW9uLmgiIDIKCiMgMSAiLi4vZnVuY3Rpb24vLi4vaW50ZWdyYXRpb24vaW50THBsR2FsMDExLmgi
IDEKIAoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgoKY2xhc3MgaW50X0xwbEdh
bDAxMSB7CgogcHVibGljOgogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBzcGNfQ29uc3RhbnQzZDAw
MCYgZWxtWCwgY29uc3Qgc3BjX0NvbnN0YW50M2QwMDAmIGVsbVksIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50IGFjcnlbXSwgcmVhbCBkLCByZWFsKiBkbHAp
IGNvbnN0Owp9OwoKCiMgNDcgIi4uL2Z1bmN0aW9uLy4uL2ludGVncmF0aW9uLmgiIDIKCiMgMSAi
Li4vZnVuY3Rpb24vLi4vaW50ZWdyYXRpb24vaW50THBsR2FsMDEyLmgiIDEKIAoKCgoKCgoKCgoK
CgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKCgpjbGFzcyBpbnRfTHBsR2FsMDEyIHsKCiBwdWJsaWM6
CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IHNwY19Db25zdGFudDNkMDAwJiBlbG1YLCBjb25zdCBz
cGNfQ29uc3RhbnQzZDAwMCYgZWxtWSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgdWludCBhY3J5W10sIHJlYWwqIGRscCkgY29uc3Q7Cn07CgoKIyA0
OCAiLi4vZnVuY3Rpb24vLi4vaW50ZWdyYXRpb24uaCIgMgoKIyAxICIuLi9mdW5jdGlvbi8uLi9p
bnRlZ3JhdGlvbi9pbnRMcGxHYWwwMTQuaCIgMQogCgoKCgoKCgoKCgoKCgoKI3ByYWdtYSBpbnRl
cmZhY2UKCgoKCgpjbGFzcyBpbnRfTHBsR2FsMDE0IHsKCiBwdWJsaWM6CiAgdm9pZCBvcGVyYXRv
cigpKGNvbnN0IHNwY19Db25zdGFudDNkMDAwJiBlbG1YLCBjb25zdCBzcGNfQ29uc3RhbnQzZDAw
MCYgZWxtWSwgCiAgICAgICAgICAgICAgICAgICAgICAgdWludCBzdHJvdWRJZCwgdWludCBnYXVz
c0lkLCByZWFsIGRpc3QsIHJlYWwqIGRscCkgY29uc3Q7Cn07CgoKIyA0OSAiLi4vZnVuY3Rpb24v
Li4vaW50ZWdyYXRpb24uaCIgMgoKIyAxICIuLi9mdW5jdGlvbi8uLi9pbnRlZ3JhdGlvbi9pbnRM
cGxHYWwwMTguaCIgMQogCgoKCgoKCgoKCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKCgpjbGFz
cyBpbnRfTHBsR2FsMDE4IHsKCiBwdWJsaWM6CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IHNwY19D
b25zdGFudDNkMDAwJiBlbG1YLCBjb25zdCBzcGNfQ29uc3RhbnQzZDAwMCYgZWxtWSwgCiAgICAg
ICAgICAgICAgICAgICAgICAgdWludCBzdHJvdWRJZCwgdWludCBnYXVzc0lkLCByZWFsIGRpc3Qs
IHJlYWwqIHNscCkgY29uc3Q7Cn07CgoKIyA1MCAiLi4vZnVuY3Rpb24vLi4vaW50ZWdyYXRpb24u
aCIgMgoKCgojIDE0ICIuLi9mdW5jdGlvbi9mbmNMRm9ybS5oIiAyCgoKCiAKCiAKCnRlbXBsYXRl
PGNsYXNzIEY+CmNsYXNzIGZuY19MaW5lYXJGb3JtIHsKCiBwdWJsaWM6CiAgIAogIHZpcnR1YWwg
fmZuY19MaW5lYXJGb3JtKCkge30KCiAgIAoKCgoKICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKShj
b25zdCBzcGNfRWxlbWVudDxGPiYgZWxtLCAKCQkJICBzcGNfRWxlbWVudE1hdHJpeDxGPiYgZW0p
ID0gMDsgCn07CgogCgpjbGFzcyBmbmNfTGFwbGFjZVNMUCA6IHB1YmxpYyBmbmNfTGluZWFyRm9y
bTxyZWFsPiB7CgogIGludF9McGwwMDMgcXJBXzsKICBpbnRfTHBsMDA0IHFyQl87CgogIFJlYWwz
ZCB4XzsKICB1aW50ICAgZ2F1c3NfOwoKIHB1YmxpYzoKICBpbmxpbmUgZm5jX0xhcGxhY2VTTFAo
Y29uc3QgUmVhbDNkJiB4LCB1aW50IGdhdXNzID0gMCk7IAoKICB2b2lkIG9wZXJhdG9yKCkoY29u
c3Qgc3BjX0VsZW1lbnQ8cmVhbD4mIGVsbSwgc3BjX0VsZW1lbnRNYXRyaXg8cmVhbD4mIGVtKTsK
ICBpbmxpbmUgdm9pZCBvcGVyYXRvcigpKGNvbnN0IHNwY19MaW5lYXIzZDAwMCYgZWxtLCAKCQkJ
IHNwY19FbGVtZW50TWF0cml4PHJlYWw+JiBlbSk7CiAgaW5saW5lIHZvaWQgb3BlcmF0b3IoKShj
b25zdCBzcGNfQ29uc3RhbnQzZDAwMCYgZWxtLCAKCQkJIHNwY19FbGVtZW50TWF0cml4PHJlYWw+
JiBlbSk7Cn07IAoKaW5saW5lIGZuY19MYXBsYWNlU0xQOjpmbmNfTGFwbGFjZVNMUChjb25zdCBS
ZWFsM2QmIHgsIHVpbnQgZ2F1c3MpIHsKICB4XyA9IHg7IGdhdXNzXyA9IGdhdXNzOwp9Cgppbmxp
bmUgdm9pZCBmbmNfTGFwbGFjZVNMUDo6b3BlcmF0b3IoKShjb25zdCBzcGNfTGluZWFyM2QwMDAm
IGVsbSwgCgkJCQkgICAgICAgc3BjX0VsZW1lbnRNYXRyaXg8cmVhbD4mIGVtKSB7CiAgcmVhbCBt
WzNdOwkJCQkJCSAgCiAgcXJBXyh4XywgZWxtLCBnYXVzc18sIG0pOwoKICBlbS5yZXNpemUoMywg
MSk7IGVtKDAsIDApID0gbVswXTsgZW0oMSwgMCkgPSBtWzFdOyBlbSgyLCAwKSA9IG1bMl07Cn0K
CmlubGluZSB2b2lkIGZuY19MYXBsYWNlU0xQOjpvcGVyYXRvcigpKGNvbnN0IHNwY19Db25zdGFu
dDNkMDAwJiBlbG0sCgkJCQkgICAgICAgc3BjX0VsZW1lbnRNYXRyaXg8cmVhbD4mIGVtKSB7CiAg
cmVhbCBtOwkJCQkJCSAgCiAgcXJCXyh4XywgZWxtLCBnYXVzc18sICZtKTsKCiAgZW0ucmVzaXpl
KDEsIDEpOyBlbSgwLCAwKSA9IG07Cn0KCiAKCmNsYXNzIGZuY19MYXBsYWNlRExQIDogcHVibGlj
IGZuY19MaW5lYXJGb3JtPHJlYWw+IHsKCiAgaW50X0xwbDAwMCBxckFfOwogIGludF9McGwwMDEg
cXJCXzsKCiAgUmVhbDNkIHhfOwogIHVpbnQgICBnYXVzc187CgogcHVibGljOgogIGlubGluZSBm
bmNfTGFwbGFjZURMUChjb25zdCBSZWFsM2QmIHgsIHVpbnQgZ2F1c3MgPSAwKTsgCgogIHZvaWQg
b3BlcmF0b3IoKShjb25zdCBzcGNfRWxlbWVudDxyZWFsPiYgZWxtLCBzcGNfRWxlbWVudE1hdHJp
eDxyZWFsPiYgZW0pOwogIGlubGluZSB2b2lkIG9wZXJhdG9yKCkoY29uc3Qgc3BjX0xpbmVhcjNk
MDAwJiBlbG0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzcGNfRWxlbWVudE1hdHJpeDxyZWFsPiYgZW0pOwogIGlubGluZSB2b2lkIG9wZXJhdG9yKCko
Y29uc3Qgc3BjX0NvbnN0YW50M2QwMDAmIGVsbSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNwY19FbGVtZW50TWF0cml4PHJlYWw+JiBlbSk7Cn07IAoK
aW5saW5lIGZuY19MYXBsYWNlRExQOjpmbmNfTGFwbGFjZURMUChjb25zdCBSZWFsM2QmIHgsIHVp
bnQgZ2F1c3MpIHsKICB4XyA9IHg7IGdhdXNzXyA9IGdhdXNzOwp9CgppbmxpbmUgdm9pZCBmbmNf
TGFwbGFjZURMUDo6b3BlcmF0b3IoKShjb25zdCBzcGNfTGluZWFyM2QwMDAmIGVsbSwgCgkJCQkg
ICAgICAgc3BjX0VsZW1lbnRNYXRyaXg8cmVhbD4mIGVtKSB7CiAgcmVhbCBtWzNdOwkJCQkJCSAg
CiAgcXJBXyh4XywgZWxtLCBnYXVzc18sIG0pOwoKICBlbS5yZXNpemUoMywgMSk7IGVtKDAsIDAp
ID0gbVswXTsgZW0oMSwgMCkgPSBtWzFdOyBlbSgyLCAwKSA9IG1bMl07Cn0KCmlubGluZSB2b2lk
IGZuY19MYXBsYWNlRExQOjpvcGVyYXRvcigpKGNvbnN0IHNwY19Db25zdGFudDNkMDAwJiBlbG0s
IAoJCQkJICAgICAgIHNwY19FbGVtZW50TWF0cml4PHJlYWw+JiBlbSkgewogIHJlYWwgbTsKICBx
ckJfKHhfLCBlbG0sIGdhdXNzXywgJm0pOwoKICBlbS5yZXNpemUoMSwgMSk7IGVtKDAsIDApID0g
bTsKfQoKIAoKIAoKCgoKY2xhc3MgZm5jX1JpZXN6IDogcHVibGljIGZuY19MaW5lYXJGb3JtPHJl
YWw+IHsKCnB1YmxpYzoKICAgCgoKCgogIGZuY19SaWVzeihjb25zdCBjaGFyKiBmb3JtdWxhciwg
dWludCBnYXVzcyA9IDApOyAKICB2aXJ0dWFsIGlubGluZSB+Zm5jX1JpZXN6KCk7CgogICAKCgoK
CgoKCiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IHNwY19FbGVtZW50PHJlYWw+JiBlbG0sIHNwY19F
bGVtZW50TWF0cml4PHJlYWw+JiBlbSk7CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IHNwY19MaW5l
YXIzZDAwMCYgZWxtLCBzcGNfRWxlbWVudE1hdHJpeDxyZWFsPiYgZW0pOwogIHZvaWQgb3BlcmF0
b3IoKShjb25zdCBzcGNfQ29uc3RhbnQzZDAwMCYgZWxtLCBzcGNfRWxlbWVudE1hdHJpeDxyZWFs
PiYgZW0pOwogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBzcGNfRGlyYWMzZDAwMCYgZWxtLCBzcGNf
RWxlbWVudE1hdHJpeDxyZWFsPiYgZW0pOwogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBzcGNfTGlu
ZWFyMmQwMDAmIGVsbSwgc3BjX0VsZW1lbnRNYXRyaXg8cmVhbD4mIGVtKTsKICB2b2lkIG9wZXJh
dG9yKCkoY29uc3Qgc3BjX0xpbmVhcjNkMDAxJiBlbG0sIHNwY19FbGVtZW50TWF0cml4PHJlYWw+
JiBlbSk7CgogIGlubGluZSBjb25zdCB1Y2hhciogcGdtKCkgY29uc3Q7CiAgaW5saW5lIHVpbnQg
Z2F1c3MoKSBjb25zdDsKCnByaXZhdGU6CiAgIAogIHVjaGFyKiBwZ21fOwoKICAgCiAgdWludCAg
IGdhdXNzXzsKfTsgCgppbmxpbmUgZm5jX1JpZXN6Ojp+Zm5jX1JpZXN6KCkgewogIGRlbGV0ZVtd
IHBnbV87IAp9CgppbmxpbmUgY29uc3QgdWNoYXIqIGZuY19SaWVzejo6cGdtKCkgY29uc3Qgewog
IHJldHVybiBwZ21fOyAKfQoKaW5saW5lIHVpbnQgZm5jX1JpZXN6OjpnYXVzcygpIGNvbnN0IHsK
ICByZXR1cm4gZ2F1c3NfOyAKfQoKCiMgMTkgIi4uL2Z1bmN0aW9uL2ZuY0Z1bmN0aW9uLmgiIDIK
CiMgMSAiLi4vZnVuY3Rpb24vZm5jRGVidWcuaCIgMQoKCgoKCgoKIAoKCgoKCgojIDIwICIuLi9m
dW5jdGlvbi9mbmNGdW5jdGlvbi5oIiAyCgoKIAoKIyA2NCAiLi4vZnVuY3Rpb24vZm5jRnVuY3Rp
b24uaCIKCgp0ZW1wbGF0ZTxjbGFzcyBGPgpjbGFzcyBmbmNfRnVuY3Rpb247Cgp0ZW1wbGF0ZTxj
bGFzcyBGPgppbmxpbmUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvcywgY29uc3QgZm5j
X0Z1bmN0aW9uPEY+JiBmbmMpIHsKICByZXR1cm4gZm5jLmluZm8ob3MpOyAKfQoKIAogCnRlbXBs
YXRlPGNsYXNzIEY+CmNsYXNzIGZuY19GdW5jdGlvbiB7CgogICAKICBmcmllbmQgb3N0cmVhbSYg
b3BlcmF0b3I8PCA8PiAob3N0cmVhbSYgb3MsIGNvbnN0IGZuY19GdW5jdGlvbiYgZm5jKTsKCiAg
Y29uc3Qgc3BjX1NwYWNlPEY+JiBzcGNfOwoKcHVibGljOgogIGlubGluZSBmbmNfRnVuY3Rpb24o
Y29uc3Qgc3BjX1NwYWNlPEY+JiBzcGMpOwogIHZpcnR1YWwgfmZuY19GdW5jdGlvbigpIHt9IAoK
ICB2aXJ0dWFsIGZuY19GdW5jdGlvbjxGPiYgb3BlcmF0b3I9KGNvbnN0IGZuY19GdW5jdGlvbjxG
PiYgZm5jKSA9IDA7CiAgdmlydHVhbCBGJiBvcGVyYXRvcigpKHNwY19CRm5jSW5kZXggaSkgPSAw
OwogIHZpcnR1YWwgRiBvcGVyYXRvcigpKHNwY19CRm5jSW5kZXggaSkgY29uc3QgPSAwOwogIHZp
cnR1YWwgZm5jX0Z1bmN0aW9uPEY+JiBvcGVyYXRvcis9KGNvbnN0IGZuY19GdW5jdGlvbjxGPiYg
Zm5jKTsKICB2aXJ0dWFsIGZuY19GdW5jdGlvbjxGPiYgb3BlcmF0b3IrPShGIGMpOwogIHZpcnR1
YWwgZm5jX0Z1bmN0aW9uPEY+JiBvcGVyYXRvci09KGNvbnN0IGZuY19GdW5jdGlvbjxGPiYgZm5j
KTsKICB2aXJ0dWFsIGZuY19GdW5jdGlvbjxGPiYgb3BlcmF0b3ItPShGIGMpOwogIHZpcnR1YWwg
Zm5jX0Z1bmN0aW9uPEY+JiBvcGVyYXRvcio9KEYgYSk7CgogIHZpcnR1YWwgZm5jX0Z1bmN0aW9u
PEY+JiBhZGQoY29uc3QgZm5jX0Z1bmN0aW9uPEY+JiBmbmMsIEYgYSk7CiAgdmlydHVhbCBvc3Ry
ZWFtJiBpbmZvKG9zdHJlYW0mIG9zKSBjb25zdCA9IDA7CiAgY29uc3Qgc3BjX1NwYWNlPEY+JiBz
cGFjZSgpIGNvbnN0Owp9OwoKdGVtcGxhdGU8Y2xhc3MgRj4KaW5saW5lIGZuY19GdW5jdGlvbjxG
Pjo6Zm5jX0Z1bmN0aW9uKGNvbnN0IHNwY19TcGFjZTxGPiYgc3BjKSA6IHNwY18oc3BjKSB7IAp9
CiAgCnRlbXBsYXRlPGNsYXNzIEY+CmlubGluZSBjb25zdCBzcGNfU3BhY2U8Rj4mIGZuY19GdW5j
dGlvbjxGPjo6c3BhY2UoKSBjb25zdCB7IAogIHJldHVybiBzcGNfOyAKfQogIAoKCiAKCiAKCnRl
bXBsYXRlPGNsYXNzIEY+CmNsYXNzIGZuY19WZWN0b3IgOiBwdWJsaWMgZm5jX0Z1bmN0aW9uPEY+
IHsKCiAgIAogIGNvbnN0IHVpbnQgbl87CgogICAKICBGKiAgICAgICAgIHZfOwoKcHVibGljOgoK
ICAgCgogIGZuY19WZWN0b3IoY29uc3QgZm5jX1ZlY3RvcjxGPiYgZm5jKTsKCiAgIAoKCiAgZm5j
X1ZlY3Rvcihjb25zdCBzcGNfU3BhY2U8Rj4mIHNwYyk7CgogICAKCgoKICBmbmNfVmVjdG9yKGNv
bnN0IHNwY19TcGFjZTxGPiYgc3BjLCBmbmNfTGluZWFyRm9ybTxGPiYgbGYpOwoKICAgCgoKCiAg
Zm5jX1ZlY3Rvcihjb25zdCBzcGNfU3BhY2U8Rj4mIHNwYywgY2hhciogZm5hbWUpOwoKICAgCiAg
aW5saW5lIH5mbmNfVmVjdG9yKCk7CgogICAKCiAgaW5saW5lIGZuY19GdW5jdGlvbjxGPiYgb3Bl
cmF0b3I9KGNvbnN0IGZuY19GdW5jdGlvbjxGPiYgZm5jKTsKCiAgIAoKICBpbmxpbmUgZm5jX1Zl
Y3RvcjxGPiYgb3BlcmF0b3I9KGNvbnN0IGZuY19WZWN0b3I8Rj4mIGZuYyk7CgogICAKCiAgaW5s
aW5lIGZuY19WZWN0b3I8Rj4mIG9wZXJhdG9yPShGIGMpOwoKICAgCgogIGZuY19WZWN0b3I8Rj4m
IG9wZXJhdG9yPShmbmNfTGluZWFyRm9ybTxGPiYgbGYpOwoKICAgCgogIGlubGluZSBGJiBvcGVy
YXRvcigpKHNwY19CRm5jSW5kZXggaSk7CgogICAKCiAgaW5saW5lIEYgb3BlcmF0b3IoKShzcGNf
QkZuY0luZGV4IGkpIGNvbnN0OwoKICAgCgogIGZuY19GdW5jdGlvbjxGPiYgb3BlcmF0b3IrPShj
b25zdCBmbmNfVmVjdG9yPEY+JiBmbmMpOwoKICAgCgogIGZuY19GdW5jdGlvbjxGPiYgb3BlcmF0
b3IrPShGIGMpOwoKICAgCgogIGZuY19GdW5jdGlvbjxGPiYgb3BlcmF0b3ItPShjb25zdCBmbmNf
VmVjdG9yPEY+JiBmbmMpOwoKICAgCgogIGZuY19GdW5jdGlvbjxGPiYgb3BlcmF0b3ItPShGIGMp
OwoKICAgCgogIGZuY19GdW5jdGlvbjxGPiYgb3BlcmF0b3IqPShGIHNjKTsKICAKICAgCiAgRiBv
cGVyYXRvciooZm5jX1ZlY3RvcjxGPiYgZm5jKTsKCiAgIAoKICBpbmxpbmUgb3BlcmF0b3IgRioo
KSBjb25zdDsKCiAgZm5jX0Z1bmN0aW9uPEY+JiBhZGQoY29uc3QgZm5jX1ZlY3RvcjxGPiYgZm5j
LCBGIHNjKTsKICB2aXJ0dWFsIG9zdHJlYW0mIGluZm8ob3N0cmVhbSYgb3MpIGNvbnN0OwoKICAg
CiAgcmVhbCBsMSgpOwoKICAgCiAgaW5saW5lIHJlYWwgbDIoKTsKCiAgIAogIHJlYWwgbDJfMigp
OwoKICAgCiAgcmVhbCBtYXgoKTsKCiAgIAogIGlubGluZSB1aW50IG4oKSBjb25zdDsKCiAgIAoK
CgogIGZuY19WZWN0b3I8Rj4mIHdyaXRlKGNoYXIqIGZuYW1lKTsKfTsKCnRlbXBsYXRlPGNsYXNz
IEY+CmlubGluZSBmbmNfVmVjdG9yPEY+Ojp+Zm5jX1ZlY3RvcigpIHsgCiAgZGVsZXRlW10gdl87
IAp9Cgp0ZW1wbGF0ZTxjbGFzcyBGPgppbmxpbmUgZm5jX0Z1bmN0aW9uPEY+JiBmbmNfVmVjdG9y
PEY+OjpvcGVyYXRvcj0oY29uc3QgZm5jX0Z1bmN0aW9uPEY+JiBmbmMpIHsKICBmb3IodWludCBp
ID0gMDsgaSA8IG5fOyArK2kpIHZfW2ldID0gZm5jKGkpOwogIHJldHVybiAqdGhpczsKfQoKdGVt
cGxhdGU8Y2xhc3MgRj4KaW5saW5lIGZuY19WZWN0b3I8Rj4mIGZuY19WZWN0b3I8Rj46Om9wZXJh
dG9yPShjb25zdCBmbmNfVmVjdG9yPEY+JiBmbmMpIHsKICBtZW1jcHkodl8sIGZuYy52Xywgbl8g
KiBzaXplb2Yodl9bMF0pKTsKICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlPGNsYXNzIEY+Cmlu
bGluZSBmbmNfVmVjdG9yPEY+JiBmbmNfVmVjdG9yPEY+OjpvcGVyYXRvcj0oRiBjKSB7CiAgaWYg
KGMpIHsKICAgIGZvcih1aW50IGkgPSAwOyBpIDwgbl87ICsraSkgdl9baV0gPSBjOwogIH0gZWxz
ZSAKICAgIG1lbXNldCh2XywgMCwgbl8gKiBzaXplb2Yodl9bMF0pKTsKICByZXR1cm4gKnRoaXM7
Cn0KCnRlbXBsYXRlPGNsYXNzIEY+CmlubGluZSBGJiBmbmNfVmVjdG9yPEY+OjpvcGVyYXRvcigp
KHNwY19CRm5jSW5kZXggaSkgeyAKICByZXR1cm4gdl9baV07IAp9Cgp0ZW1wbGF0ZTxjbGFzcyBG
PgppbmxpbmUgRiBmbmNfVmVjdG9yPEY+OjpvcGVyYXRvcigpKHNwY19CRm5jSW5kZXggaSkgY29u
c3QgeyAKICByZXR1cm4gdl9baV07IAp9Cgp0ZW1wbGF0ZTxjbGFzcyBGPgppbmxpbmUgZm5jX1Zl
Y3RvcjxGPjo6b3BlcmF0b3IgRiooKSBjb25zdCB7IAogIHJldHVybiB2XzsKfQoKdGVtcGxhdGU8
Y2xhc3MgRj4KaW5saW5lIHJlYWwgZm5jX1ZlY3RvcjxGPjo6bDIoKSB7IAogIHJldHVybiBzcXJ0
KGwyXzIoKSk7IAp9Cgp0ZW1wbGF0ZTxjbGFzcyBGPgppbmxpbmUgdWludCBmbmNfVmVjdG9yPEY+
OjpuKCkgY29uc3QgeyAKICByZXR1cm4gbl87IAp9CgogCgojIDEgIi4uL2Z1bmN0aW9uL2ZuY0Z1
bmN0aW9uLnQiIDEKIAoKCgoKCgogICNwcmFnbWEgaW1wbGVtZW50YXRpb24KCgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL21lbW9yeS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoK
CgoKIyAxMyAiLi4vZnVuY3Rpb24vZm5jRnVuY3Rpb24udCIgMgoKCiAKCnRlbXBsYXRlPGNsYXNz
IEY+CmZuY19GdW5jdGlvbjxGPiYgZm5jX0Z1bmN0aW9uPEY+OjpvcGVyYXRvcis9KGNvbnN0IGZu
Y19GdW5jdGlvbjxGPiYgZm5jKSB7CgogIGZvciAoc3BjX0JGbmNJbmRleCBpID0gc3BjXy5kaW0o
KTsgaS0tOykgKCp0aGlzKShpKSArPSBmbmMoaSk7CiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0
ZTxjbGFzcyBGPgpmbmNfRnVuY3Rpb248Rj4mIGZuY19GdW5jdGlvbjxGPjo6b3BlcmF0b3IrPShG
IGMpIHsKCiAgZm9yIChzcGNfQkZuY0luZGV4IGkgPSBzcGNfLmRpbSgpOyBpLS07KSAoKnRoaXMp
KGkpICs9IGM7CiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBGPgpmbmNfRnVuY3Rp
b248Rj4mIGZuY19GdW5jdGlvbjxGPjo6b3BlcmF0b3ItPShjb25zdCBmbmNfRnVuY3Rpb248Rj4m
IGZuYykgewoKICBmb3IgKHNwY19CRm5jSW5kZXggaSA9IHNwY18uZGltKCk7IGktLTspICgqdGhp
cykoaSkgLT0gZm5jKGkpOwogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGU8Y2xhc3MgRj4KZm5j
X0Z1bmN0aW9uPEY+JiBmbmNfRnVuY3Rpb248Rj46Om9wZXJhdG9yLT0oRiBjKSB7CgogIGZvciAo
c3BjX0JGbmNJbmRleCBpID0gc3BjXy5kaW0oKTsgaS0tOykgKCp0aGlzKShpKSAtPSBjOwogIHJl
dHVybiAqdGhpczsKfQoKdGVtcGxhdGU8Y2xhc3MgRj4KZm5jX0Z1bmN0aW9uPEY+JiBmbmNfRnVu
Y3Rpb248Rj46Om9wZXJhdG9yKj0oRiBhKSB7CgogIGZvciAoc3BjX0JGbmNJbmRleCBpID0gc3Bj
Xy5kaW0oKTsgaS0tOykgKCp0aGlzKShpKSAqPSBhOwogIHJldHVybiAqdGhpczsKfQoKdGVtcGxh
dGU8Y2xhc3MgRj4KZm5jX0Z1bmN0aW9uPEY+JiBmbmNfRnVuY3Rpb248Rj46OmFkZChjb25zdCBm
bmNfRnVuY3Rpb248Rj4mIGZuYywgRiBhKSB7CgogIGZvciAoc3BjX0JGbmNJbmRleCBpID0gc3Bj
Xy5kaW0oKTsgaS0tOykgKCp0aGlzKShpKSArPSBhICogZm5jKGkpOwogIHJldHVybiAqdGhpczsK
fQoKIAoKdGVtcGxhdGU8Y2xhc3MgRj4KZm5jX1ZlY3RvcjxGPjo6Zm5jX1ZlY3Rvcihjb25zdCBm
bmNfVmVjdG9yPEY+JiBmKSA6IGZuY19GdW5jdGlvbjxGPihmLnNwYWNlKCkpLCAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5fKGYubl8pIHsKICB2XyA9IG5ldyBGW25fXTsgbWVtY3B5KHZfLCBmLnZfLCBuXyAqIHNp
emVvZih2X1swXSkpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBGPgpmbmNfVmVjdG9yPEY+OjpmbmNfVmVj
dG9yKGNvbnN0IHNwY19TcGFjZTxGPiYgc3BjKSA6IGZuY19GdW5jdGlvbjxGPihzcGMpLCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
XyhzcGMuZGltKCkpIHsKICB2XyA9IG5ldyBGW25fXTsgbWVtc2V0KHZfLCAwLCBuXyAqIHNpemVv
Zih2X1swXSkpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBGPgpmbmNfVmVjdG9yPEY+OjpmbmNfVmVjdG9y
KGNvbnN0IHNwY19TcGFjZTxGPiYgc3BjLCBmbmNfTGluZWFyRm9ybTxGPiYgbGYpIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm5jX0Z1bmN0aW9uPEY+KHNwYyksIG5fKHNw
Yy5kaW0oKSkgewogIHZfID0gbmV3IEZbbl9dOyBtZW1zZXQodl8sIDAsIG5fICogc2l6ZW9mKHZf
WzBdKSk7CgogIHNwY19FbGVtZW50TWF0cml4PEY+IEEoMywgMSk7CQogIHNwY19FbGVtZW50TWF0
cml4PEY+IEIoMywgMSk7CQoKICBzcGNfU3BhY2U8Rj46OnNwY19TY2FuKiBzYyA9IHNwYWNlKCku
c2NhbigpOwogIHdoaWxlICgqc2MpIHsKICAgIHNwY19FbGVtZW50PEY+JiBlbG0gPSAoKnNjKSsr
OwogICAgY29uc3Qgc3BjX1Q8Rj4mIFQgPSBlbG0uVCgpOwogIAogICAgbGYoZWxtLCBBKTsgQS50
cmFuc3Bvc2UoKTsgVChBLCBCKTsgQi50cmFuc3Bvc2UoKTsKICAgIGZvcih1aW50IGkgPSBULm0o
KTsgaS0tOykgewogICAgICB2X1tULmluZGV4KGkpXSArPSBCKGksIDApOwogICAgICBpZiggMCAg
IT0wKSBjb3V0IDw8ICAgJ1snIDw8ICAiLi4vZnVuY3Rpb24vZm5jRnVuY3Rpb24udCIgPDwgIiwg
bGluZSAiIDw8IDkwCgkgIDw8ICJdIGZuY19WZWN0b3I6OmZuY19WZWN0b3IgLS0gdlsiIDw8IGkg
PDwgIl0gPSIgIDw8ICIgIiA8PCAgIHZfW1QuaW5kZXgoaSldICA8PCBlbmRsOyA7CiAgICB9CiAg
fQogIGRlbGV0ZSBzYzsJCn0KCnRlbXBsYXRlPGNsYXNzIEY+CmZuY19WZWN0b3I8Rj46OmZuY19W
ZWN0b3IoY29uc3Qgc3BjX1NwYWNlPEY+JiBzcGMsIGNoYXIqIGZuYW1lKSA6IAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5jX0Z1bmN0aW9uPEY+KHNwYyksIG5fKHNwYy5k
aW0oKSkgewogIHZfID0gbmV3IEZbbl9dOyAKCiAgaWZzdHJlYW0gaWZzKGZuYW1lKTsKICB1aW50
ICAgICBuID0gMDsgaWZzLnJlYWQoKGNoYXIqKSAmbiwgc2l6ZW9mKG4pKTsKCiAgaWYgKG5fICE9
IG4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIGNl
cnIgPDwgJ1snIDw8ICAiLi4vZnVuY3Rpb24vZm5jRnVuY3Rpb24udCIgPDwgIiwgbGluZSAiIDw8
IDEwNTsKICAgIGNlcnIgPDwgIl0gZm5jX1ZlY3Rvcjo6cmVhZCgpIC0tIGRpbWVuc2lvbiBtaXNt
YXRjaFxuIjsKICAgIGV4aXQoMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCiAgfQoKICBpZnMucmVhZCgoY2hhciopIHZfLCBuICogc2l6ZW9mKHZf
WzBdKSk7Cn0KCnRlbXBsYXRlPGNsYXNzIEY+CmZuY19WZWN0b3I8Rj4mIGZuY19WZWN0b3I8Rj46
Om9wZXJhdG9yPShmbmNfTGluZWFyRm9ybTxGPiYgbGYpIHsKCiAgbWVtc2V0KHZfLCAwLCBuXyAq
IHNpemVvZih2X1swXSkpOwoKICBzcGNfRWxlbWVudE1hdHJpeDxGPiBBKDMsIDEpOwkKICBzcGNf
RWxlbWVudE1hdHJpeDxGPiBCKDMsIDEpOwkKCiAgc3BjX1NwYWNlPEY+OjpzcGNfU2Nhbiogc2Mg
PSBzcGFjZSgpLnNjYW4oKTsKICB3aGlsZSAoKnNjKSB7CiAgICBzcGNfRWxlbWVudDxGPiYgZWxt
ID0gKCpzYykrKzsKICAgIGNvbnN0IHNwY19UPEY+JiBUID0gZWxtLlQoKTsKICAKICAgIGxmKGVs
bSwgQSk7IEEudHJhbnNwb3NlKCk7IFQoQSwgQik7IEIudHJhbnNwb3NlKCk7CiAgICBmb3IodWlu
dCBpID0gVC5tKCk7IGktLTspIAoJdl9bVC5pbmRleChpKV0gKz0gQihpLCAwKTsKICB9CiAgZGVs
ZXRlIHNjOwkKCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBGPgpmbmNfRnVuY3Rp
b248Rj4mIGZuY19WZWN0b3I8Rj46Om9wZXJhdG9yKz0oY29uc3QgZm5jX1ZlY3RvcjxGPiYgZm5j
KSB7CgogIGNvbnN0IEYqIHMgPSBmbmMudl87CiAgRiogICAgICAgZCA9IHZfOwogIGZvciAodWlu
dCBpID0gbl87IGk7IC0taSkgKmQrKyArPSAqcysrOwoKICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBs
YXRlPGNsYXNzIEY+CmZuY19GdW5jdGlvbjxGPiYgZm5jX1ZlY3RvcjxGPjo6b3BlcmF0b3IrPShG
IGMpIHsKCiAgRiogdiA9IHZfOyAgCiAgZm9yICh1aW50IGkgPSBuXzsgaTsgLS1pKSAqdisrICs9
IGM7CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGU8Y2xhc3MgRj4KZm5jX0Z1bmN0aW9uPEY+
JiBmbmNfVmVjdG9yPEY+OjpvcGVyYXRvci09KGNvbnN0IGZuY19WZWN0b3I8Rj4mIGZuYykgewoK
ICBjb25zdCBGKiBzID0gZm5jLnZfOwogIEYqICAgICAgIGQgPSB2XzsKICBmb3IgKHVpbnQgaSA9
IG5fOyBpOyBpLS0pICpkKysgLT0gKnMrKzsKCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZTxj
bGFzcyBGPgpmbmNfRnVuY3Rpb248Rj4mIGZuY19WZWN0b3I8Rj46Om9wZXJhdG9yLT0oRiBjKSB7
CgogIEYqIHYgPSB2XzsgIAogIGZvciAodWludCBpID0gbl87IGk7IC0taSkgKnYrKyAtPSBjOwoK
ICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlPGNsYXNzIEY+CmZuY19GdW5jdGlvbjxGPiYgZm5j
X1ZlY3RvcjxGPjo6b3BlcmF0b3IqPShGIHNjKSB7CgogIEYqIHYgPSB2XzsKICBmb3IodWludCBp
ID0gbl87IGk7IC0taSkgKnYrKyAqPSBzYzsKCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZTxj
bGFzcyBGPgpmbmNfRnVuY3Rpb248Rj4mIGZuY19WZWN0b3I8Rj46OmFkZChjb25zdCBmbmNfVmVj
dG9yJiBmbmMsIEYgc2MpIHsKCiAgY29uc3QgRiogcyA9IGZuYy52XzsKICBGKiAgICAgICBkID0g
dl87CiAgZm9yICh1aW50IGkgPSBuXzsgaTsgLS1pKSAqZCsrICs9IHNjICogKnMrKzsKCiAgcmV0
dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBGPgpvc3RyZWFtJiBmbmNfVmVjdG9yPEY+Ojpp
bmZvKG9zdHJlYW0mIG9zKSBjb25zdCB7CgogIG9zIDw8ICJmbmNfVmVjdG9yKCIgPDwgbl8gPDwg
IiAsWyI7CgogIEYqIHYgPSB2XzsgCiAgZm9yICh1aW50IGkgPSBuXzsgaTsgLS1pKSBvcyA8PCAq
disrIDw8IChpID09IDEgPyAiXSkiIDogIiwgIik7CgogIHJldHVybiBvczsKfQoKdGVtcGxhdGU8
Y2xhc3MgRj4KZm5jX1ZlY3RvcjxGPiYgZm5jX1ZlY3RvcjxGPjo6d3JpdGUoY2hhciogZm5hbWUp
IHsKCiAgb2ZzdHJlYW0gb2ZzKGZuYW1lKTsKCiAgb2ZzLndyaXRlKChjb25zdCBjaGFyKikgJm5f
LCBzaXplb2Yobl8pKTsKICBvZnMud3JpdGUoKGNvbnN0IGNoYXIqKSB2Xywgbl8gKiBzaXplb2Yo
dl9bMF0pKTsKICAgIAogIHJldHVybiAqdGhpczsKfQojIDI4MSAiLi4vZnVuY3Rpb24vZm5jRnVu
Y3Rpb24uaCIgMgoKCgojIDEzICJsaW5lbC5jYyIgMgoKIyAxICIuLi9vcGVyYXRvci9vcE9wZXJh
dG9yLmgiIDEKIAoKCgoKCgoKICAjcHJhZ21hIGludGVyZmFjZSAKCgoKCgoKCiMgMSAiLi4vb3Bl
cmF0b3IvLi4vdG9vbGJveC90YnhTTWF0cml4LmgiIDEKIAoKCgoKCgoKCiAgI3ByYWdtYSBpbnRl
cmZhY2UKCgoKCgoKCgoKIAoKY2xhc3MgU3BhcnNlTWF0cml4IHsKCiAgIAoKCgogIHN0cnVjdCBW
YWx1ZSB7CiAgICBWYWx1ZSogbG5rOwogICAgdWludCAgIGlkeDsKICAgIHJlYWwgICB2YWw7Cgog
ICAgIAoKCgoKCgoKCiAgICBWYWx1ZShWYWx1ZSogbCwgaW50IGksIHJlYWwgdiA9IDAuMCkgeyBs
bmsgPSBsOyBpZHggPSBpOyB2YWwgPSB2OyB9CiAgICAKICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhz
aXplX3Qgc3opIHsKICAgICAgY291dCA8PCAiVmFsdWU6Om5ldyhzaXplX3QpXG4iOyAKICAgICAg
cmV0dXJuIG5ldyBjaGFyW3N6XTsgCiAgICB9CiAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90
LCBQb29sPFNwYXJzZU1hdHJpeDo6VmFsdWU+JiBwb29sKSB7IAogICAgICByZXR1cm4gcG9vbC5h
bGxvYygpOyB9CiAgfTsKCiAgUG9vbDxWYWx1ZT4gcG9vbDsKICBWYWx1ZSoqICAgICBtYXRyaXg7
CiAgdWludCAgICAgICAgX3VzZWQ7CgogICAKICB1aW50ICAgICAgICBub2ZSb3dzOwoKICAgCiAg
dWludCAgICAgICAgbm9mQ29sczsKCiAgdWludCAgICAgICAgaGFzaEJpdHM7CiAgdWludCAgICAg
ICAgaGFzaE1zazsKCiAgU3BhcnNlTWF0cml4KGNvbnN0IFNwYXJzZU1hdHJpeCYpOwogIHZvaWQg
b3BlcmF0b3IgPShjb25zdCBTcGFyc2VNYXRyaXgmKTsKCnB1YmxpYzoKICAgCgoKCgoKICBTcGFy
c2VNYXRyaXgodWludCByLCB1aW50IGMsIHVpbnQgaCk7CiAgflNwYXJzZU1hdHJpeCgpOwoKICBp
bmxpbmUgVmFsdWUqKiBNYXRyaXgoKSBjb25zdCB7IHJldHVybiBtYXRyaXg7IH0gIAogIGlubGlu
ZSB1aW50IEhhc2hCaXRzKCkgY29uc3QgeyByZXR1cm4gaGFzaEJpdHM7IH0gIAoKICAgCgoKCgoK
ICByZWFsJiBvcGVyYXRvcigpKGNvbnN0IHVpbnQgciwgY29uc3QgdWludCBjKTsKICB2b2lkIG9w
ZXJhdG9yKCkoY29uc3QgcmVhbCBmW10sIHJlYWwgZ1tdKSBjb25zdDsKCiAgIAogIHVpbnQgdXNl
ZCgpIGNvbnN0IHsgcmV0dXJuIF91c2VkOyB9CiAgZmxvYXQgbWVtb3J5KCkgY29uc3QgeyAKICAg
IHJldHVybiBzaXplb2YoU3BhcnNlTWF0cml4KSArIHBvb2wubWVtb3J5KCkgCiAgICAgIC0gc2l6
ZW9mKHBvb2wpOyAKICB9CgogIG9zdHJlYW0mIGluZm8ob3N0cmVhbSYgb3MpIGNvbnN0OwogIHZv
aWQgd3JpdGUob2ZzdHJlYW0mIG9mcykgY29uc3Q7CiAgdm9pZCBvdXRwdXRNYXRsYWIob2ZzdHJl
YW0mIG9mcykgY29uc3Q7CgogIGZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvciA8PChvc3RyZWFtJiBv
cywgY29uc3QgU3BhcnNlTWF0cml4JiBtKSB7CiAgICByZXR1cm4gbS5pbmZvKG9zKTsgfQp9OwoK
CiMgMTcgIi4uL29wZXJhdG9yL29wT3BlcmF0b3IuaCIgMgoKCiMgMSAiLi4vb3BlcmF0b3Ivb3BC
Rm9ybS5oIiAxCiAKCgoKCgoKCgoKCgoKCiMgMSAiLi4vb3BlcmF0b3IvLi4vaW50ZWdyYXRpb24v
aW50QWJzY1dnaHQuaCIgMQogCgoKCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKCgoKCgoKCmV4
dGVybiBjb25zdCByZWFsIGludF8xX1BJNDsKZXh0ZXJuIGNvbnN0IHJlYWwgaW50XzFfUEk4Owpl
eHRlcm4gY29uc3QgcmVhbCBpbnRfMV9mYWtbXTsKCmV4dGVybiBjb25zdCByZWFsKiBjb25zdCAg
aW50X0dhdXNzQWJzY1dnaHRTeW1bOF07CmV4dGVybiBjb25zdCByZWFsKiBjb25zdCAgaW50X0dh
dXNzQWJzY1dnaHRbMjVdOwoKZXh0ZXJuIGNvbnN0IHJlYWwqIGNvbnN0ICBpbnRfU3Ryb3VkQWJz
Y1dnaHRbN107CmV4dGVybiBjb25zdCByZWFsKiBjb25zdCAgaW50X1N0cm91ZExpblRyaWFsV2do
dFs3XTsKCnVpbnQgaW50X21hdGNoKGNvbnN0IGdlb19UcmlhbmdsZSYgdHJpWCwgY29uc3QgZ2Vv
X1RyaWFuZ2xlJiB0cmlZKTsKCgpleHRlcm4gIkMiIHsKCgogICAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCiAgdm9pZCBpbnRfR2F1c3NMb2JhdHRvQWJzY1dnaHQocmVhbCogeCwgcmVhbCog
dywgY29uc3QgdWludCBwLAoJCQkJY29uc3QgdWludCBqID0gMCk7CgogICAKCgoKCgoKCgoKCgoK
CgoKCgoKCgogIHZvaWQgaW50X0phY29iaVBvbChjb25zdCBkb3VibGUgYWxmLCBjb25zdCBkb3Vi
bGUgYmV0LCBjb25zdCBpbnQgbWF4biwKCQkgICAgIGNvbnN0IGRvdWJsZSogeCwgY29uc3QgaW50
IG0sIGRvdWJsZSogcCk7CgogICAKCgoKCgoKCgoKCgoKICB2b2lkIGludF9KYWNvYmlaZXJvcyhk
b3VibGUqIHgsIGludCBwLCBkb3VibGUgYWxmLCBkb3VibGUgYmV0KTsKCgp9CgoKCiMgMTUgIi4u
L29wZXJhdG9yL29wQkZvcm0uaCIgMgoKCgogCgogCgoKCnRlbXBsYXRlPGNsYXNzIEY+CmNsYXNz
IG9wX0JpbGluZWFyRm9ybSB7CgogcHVibGljOgogICAKCgogIHZpcnR1YWwgdm9pZCBvcGVyYXRv
cigpKGNvbnN0IHNwY19FbGVtZW50PEY+JiBlbG1YLCAKCQkJICBjb25zdCBzcGNfRWxlbWVudDxG
PiYgZWxtWSwgCgkJCSAgc3BjX0VsZW1lbnRNYXRyaXg8Rj4mIGVtKSA9IDA7Cn07CgogCgpjbGFz
cyBvcF9MYXBsYWNlU0wgOiBwdWJsaWMgb3BfQmlsaW5lYXJGb3JtPHJlYWw+IHsKCiAgaW50X0xw
bENvbDAwNiBxckFfOwogIGludF9McGxHYWwwMDYgcXJCXzsKICBpbnRfTHBsR2FsMDE4IHFyQ187
CgogIHVpbnQgIHN0cm91ZF8sIGdhdXNzXzsKICByZWFsICBkaXN0XzsKCiBwdWJsaWM6CiAgaW5s
aW5lIG9wX0xhcGxhY2VTTCh1aW50IHN0cm91ZCA9IDAsIHVpbnQgZ2F1c3MgPSAwLCByZWFsIGRp
c3QgPSAwLjApOwoKICB2b2lkIG9wZXJhdG9yKCkoY29uc3Qgc3BjX0VsZW1lbnQ8cmVhbD4mIGVs
bVgsIAoJCSAgY29uc3Qgc3BjX0VsZW1lbnQ8cmVhbD4mIGVsbVksIHNwY19FbGVtZW50TWF0cml4
PHJlYWw+JiBlbSk7IAogIGlubGluZSB2b2lkIG9wZXJhdG9yKCkoY29uc3Qgc3BjX0RpcmFjM2Qw
MDAmIGVsbVgsIAoJCQkgY29uc3Qgc3BjX0xpbmVhcjNkMDAwJiBlbG1ZLCAKCQkJIHNwY19FbGVt
ZW50TWF0cml4PHJlYWw+JiBlbSk7IAogIGlubGluZSB2b2lkIG9wZXJhdG9yKCkoY29uc3Qgc3Bj
X0NvbnN0YW50M2QwMDAmIGVsbVgsIAoJCQkgY29uc3Qgc3BjX0NvbnN0YW50M2QwMDAmIGVsbVks
IAoJCQkgc3BjX0VsZW1lbnRNYXRyaXg8cmVhbD4mIGVtKTsgCiAgaW5saW5lIHZvaWQgb3BlcmF0
b3IoKShjb25zdCBzcGNfTGluZWFyM2QwMDAmIGVsbVgsIAoJCQkgY29uc3Qgc3BjX0xpbmVhcjNk
MDAwJiBlbG1ZLCAKCQkJIHNwY19FbGVtZW50TWF0cml4PHJlYWw+JiBlbSk7IAp9OyAKCmlubGlu
ZSBvcF9MYXBsYWNlU0w6Om9wX0xhcGxhY2VTTCh1aW50IHN0cm91ZCwgdWludCBnYXVzcywgcmVh
bCBkaXN0KSB7IAoKICBzdHJvdWRfID0gc3Ryb3VkOyBnYXVzc18gPSBnYXVzczsgZGlzdF8gPSBk
aXN0OyAKfQoKaW5saW5lIHZvaWQgb3BfTGFwbGFjZVNMOjpvcGVyYXRvcigpKGNvbnN0IHNwY19E
aXJhYzNkMDAwJiBlbG1YLCAKCQkJCSAgICAgY29uc3Qgc3BjX0xpbmVhcjNkMDAwJiBlbG1ZLCAK
CQkJCSAgICAgc3BjX0VsZW1lbnRNYXRyaXg8cmVhbD4mIGVtKSB7IAogIHJlYWwgbVs5XTsKICBx
ckFfKGVsbVgsIGVsbVksIGdhdXNzXywgZGlzdF8sIG0pOwoKICB1aW50IG4gPSBlbG1YLlQoKS5u
KCk7CiAgcmVhbCogbW0gPSBtOwoKICBlbS5yZXNpemUobiwgMyk7CiAgZm9yKHVpbnQgaSA9IDA7
IGkgPCBuOyArK2kpIHsKICAgIGVtKGksIDApID0gKm1tKys7IGVtKGksIDEpID0gKm1tKys7IGVt
KGksIDIpID0gKm1tKys7CiAgfQp9CgppbmxpbmUgdm9pZCBvcF9MYXBsYWNlU0w6Om9wZXJhdG9y
KCkoY29uc3Qgc3BjX0NvbnN0YW50M2QwMDAmIGVsbVgsIAoJCQkJICAgICBjb25zdCBzcGNfQ29u
c3RhbnQzZDAwMCYgZWxtWSwgCgkJCQkgICAgIHNwY19FbGVtZW50TWF0cml4PHJlYWw+JiBlbSkg
eyAKICByZWFsIG07CiAgcXJDXyhlbG1YLCBlbG1ZLCBzdHJvdWRfLCBnYXVzc18sIGRpc3RfLCAm
bSk7CgogIGVtLnJlc2l6ZSgxLCAxKTsKICBlbSgwLCAwKSA9IG07Cn0KCmlubGluZSB2b2lkIG9w
X0xhcGxhY2VTTDo6b3BlcmF0b3IoKShjb25zdCBzcGNfTGluZWFyM2QwMDAmIGVsbVgsIAoJCQkJ
ICAgICBjb25zdCBzcGNfTGluZWFyM2QwMDAmIGVsbVksIAoJCQkJICAgICBzcGNfRWxlbWVudE1h
dHJpeDxyZWFsPiYgZW0pIHsgCiAgcmVhbCBtWzldOwogIHFyQl8oZWxtWCwgZWxtWSwgc3Ryb3Vk
XywgZ2F1c3NfLCBkaXN0XywgbSk7CgogIGVtLnJlc2l6ZSgzLCAzKTsKICBlbSgwLCAwKSA9IG1b
MF07IGVtKDAsIDEpID0gbVsxXTsgZW0oMCwgMikgPSBtWzJdOwogIGVtKDEsIDApID0gbVszXTsg
ZW0oMSwgMSkgPSBtWzRdOyBlbSgxLCAyKSA9IG1bNV07CiAgZW0oMiwgMCkgPSBtWzZdOyBlbSgy
LCAxKSA9IG1bN107IGVtKDIsIDIpID0gbVs4XTsKfQoKIAoKY2xhc3Mgb3BfTGFwbGFjZURMIDog
cHVibGljIG9wX0JpbGluZWFyRm9ybTxyZWFsPiB7CgogIGludF9McGxDb2wwMDcgcXJBXzsKICBp
bnRfTHBsR2FsMDA3IHFyQl87CiAgaW50X0xwbEdhbDAxNCBxckNfOwoKICB1aW50ICBzdHJvdWRf
LCBnYXVzc187CiAgcmVhbCAgZGlzdF87CgogcHVibGljOgogIGlubGluZSBvcF9MYXBsYWNlREwo
dWludCBzdHJvdWQgPSAwLCB1aW50IGdhdXNzID0gMCwgcmVhbCBkaXN0ID0gMC4wKTsgCgogIHZv
aWQgb3BlcmF0b3IoKShjb25zdCBzcGNfRWxlbWVudDxyZWFsPiYgZWxtWCwgCiAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3BjX0VsZW1lbnQ8cmVhbD4mIGVsbVksIHNwY19FbGVtZW50TWF0cml4
PHJlYWw+JiBlbSk7IAogIGlubGluZSB2b2lkIG9wZXJhdG9yKCkoY29uc3Qgc3BjX0RpcmFjM2Qw
MDAmIGVsbVgsIAoJCSAgICAgIGNvbnN0IHNwY19MaW5lYXIzZDAwMCYgZWxtWSwgc3BjX0VsZW1l
bnRNYXRyaXg8cmVhbD4mIGVtKTsgCiAgaW5saW5lIHZvaWQgb3BlcmF0b3IoKShjb25zdCBzcGNf
Q29uc3RhbnQzZDAwMCYgZWxtWCwgCgkJICAgIGNvbnN0IHNwY19Db25zdGFudDNkMDAwJiBlbG1Z
LCBzcGNfRWxlbWVudE1hdHJpeDxyZWFsPiYgZW0pOyAKICBpbmxpbmUgdm9pZCBvcGVyYXRvcigp
KGNvbnN0IHNwY19MaW5lYXIzZDAwMCYgZWxtWCwgCgkJICAgICAgY29uc3Qgc3BjX0xpbmVhcjNk
MDAwJiBlbG1ZLCBzcGNfRWxlbWVudE1hdHJpeDxyZWFsPiYgZW0pOyAKfTsgCgppbmxpbmUgb3Bf
TGFwbGFjZURMOjpvcF9MYXBsYWNlREwodWludCBzdHJvdWQsIHVpbnQgZ2F1c3MsIHJlYWwgZGlz
dCkgeyAKCiAgZ2F1c3NfID0gZ2F1c3MsIHN0cm91ZF8gPSBzdHJvdWQ7IGRpc3RfID0gZGlzdDsK
fQoKaW5saW5lIHZvaWQgb3BfTGFwbGFjZURMOjpvcGVyYXRvcigpKGNvbnN0IHNwY19EaXJhYzNk
MDAwJiBlbG1YLCAKCQkgICAgIGNvbnN0IHNwY19MaW5lYXIzZDAwMCYgZWxtWSwgc3BjX0VsZW1l
bnRNYXRyaXg8cmVhbD4mIGVtKSB7IAogIHJlYWwgbVs5XTsKICBxckFfKGVsbVgsIGVsbVksIGdh
dXNzXywgZGlzdF8sIG0pOwoKICB1aW50IG4gPSBlbG1YLlQoKS5uKCk7CiAgcmVhbCogbW0gPSBt
OwoKICBlbS5yZXNpemUobiwgMyk7CiAgZm9yKHVpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAg
IGVtKGksIDApID0gKm1tKys7IGVtKGksIDEpID0gKm1tKys7IGVtKGksIDIpID0gKm1tKys7CiAg
fQp9CgppbmxpbmUgdm9pZCBvcF9MYXBsYWNlREw6Om9wZXJhdG9yKCkoY29uc3Qgc3BjX0NvbnN0
YW50M2QwMDAmIGVsbVgsIAoJCSAgIGNvbnN0IHNwY19Db25zdGFudDNkMDAwJiBlbG1ZLCBzcGNf
RWxlbWVudE1hdHJpeDxyZWFsPiYgZW0pIHsgCiAgcmVhbCBtOwogIHFyQ18oZWxtWCwgZWxtWSwg
c3Ryb3VkXywgZ2F1c3NfLCBkaXN0XywgJm0pOwoKICBlbS5yZXNpemUoMSwgMSk7CiAgZW0oMCwg
MCkgPSBtOwp9CgppbmxpbmUgdm9pZCBvcF9MYXBsYWNlREw6Om9wZXJhdG9yKCkoY29uc3Qgc3Bj
X0xpbmVhcjNkMDAwJiBlbG1YLCAKCQkgICAgIGNvbnN0IHNwY19MaW5lYXIzZDAwMCYgZWxtWSwg
c3BjX0VsZW1lbnRNYXRyaXg8cmVhbD4mIGVtKSB7IAogIHJlYWwgbVs5XTsKICBxckJfKGVsbVgs
IGVsbVksIHN0cm91ZF8sIGdhdXNzXywgZGlzdF8sIG0pOwoKICBlbS5yZXNpemUoMywgMyk7CiAg
ZW0oMCwgMCkgPSBtWzBdOyBlbSgwLCAxKSA9IG1bMV07IGVtKDAsIDIpID0gbVsyXTsKICBlbSgx
LCAwKSA9IG1bM107IGVtKDEsIDEpID0gbVs0XTsgZW0oMSwgMikgPSBtWzVdOwogIGVtKDIsIDAp
ID0gbVs2XTsgZW0oMiwgMSkgPSBtWzddOyBlbSgyLCAyKSA9IG1bOF07Cn0KCiAKCmNsYXNzIG9w
X0xhcGxhY2VQTEQgOiBwdWJsaWMgb3BfQmlsaW5lYXJGb3JtPHJlYWw+IHsKCiAgaW50X0xwbEdh
bDAwNyBxckFfOwogIGludF9McGxHYWwwMTQgcXJCXzsKCiAgdWludCAgc3Ryb3VkXywgZ2F1c3Nf
OwogIHJlYWwgIGRpc3RfOwoKIHB1YmxpYzoKICBpbmxpbmUgb3BfTGFwbGFjZVBMRCh1aW50IHN0
cm91ZCA9IDAsIHVpbnQgZ2F1c3MgPSAwLCByZWFsIGRpc3QgPSAwLjApOyAKCiAgdm9pZCBvcGVy
YXRvcigpKGNvbnN0IHNwY19FbGVtZW50PHJlYWw+JiBlbG1YLCAKCQkgICAgY29uc3Qgc3BjX0Vs
ZW1lbnQ8cmVhbD4mIGVsbVksIHNwY19FbGVtZW50TWF0cml4PHJlYWw+JiBlbSk7IAogIGlubGlu
ZSB2b2lkIG9wZXJhdG9yKCkoY29uc3Qgc3BjX0NvbnN0YW50M2QwMDAmIGVsbVgsIAoJCSAgICBj
b25zdCBzcGNfQ29uc3RhbnQzZDAwMCYgZWxtWSwgc3BjX0VsZW1lbnRNYXRyaXg8cmVhbD4mIGVt
KTsgCiAgaW5saW5lIHZvaWQgb3BlcmF0b3IoKShjb25zdCBzcGNfTGluZWFyM2QwMDAmIGVsbVgs
IAoJCSAgICAgIGNvbnN0IHNwY19MaW5lYXIzZDAwMCYgZWxtWSwgc3BjX0VsZW1lbnRNYXRyaXg8
cmVhbD4mIGVtKTsgCn07IAoKaW5saW5lIG9wX0xhcGxhY2VQTEQ6Om9wX0xhcGxhY2VQTEQodWlu
dCBzdHJvdWQsIHVpbnQgZ2F1c3MsIHJlYWwgZGlzdCkgeyAKCiAgZ2F1c3NfID0gZ2F1c3MsIHN0
cm91ZF8gPSBzdHJvdWQ7IGRpc3RfID0gZGlzdDsKfQoKaW5saW5lIHZvaWQgb3BfTGFwbGFjZVBM
RDo6b3BlcmF0b3IoKShjb25zdCBzcGNfQ29uc3RhbnQzZDAwMCYgZWxtWCwgCgkJICAgY29uc3Qg
c3BjX0NvbnN0YW50M2QwMDAmIGVsbVksIHNwY19FbGVtZW50TWF0cml4PHJlYWw+JiBlbSkgeyAK
ICByZWFsIG07CiAgcXJCXyhlbG1ZLCBlbG1YLCBzdHJvdWRfLCBnYXVzc18sIGRpc3RfLCAmbSk7
CgogIGVtLnJlc2l6ZSgxLCAxKTsKICBlbSgwLCAwKSA9IG07Cn0KCmlubGluZSB2b2lkIG9wX0xh
cGxhY2VQTEQ6Om9wZXJhdG9yKCkoY29uc3Qgc3BjX0xpbmVhcjNkMDAwJiBlbG1YLCAKCQkgICAg
IGNvbnN0IHNwY19MaW5lYXIzZDAwMCYgZWxtWSwgc3BjX0VsZW1lbnRNYXRyaXg8cmVhbD4mIGVt
KSB7IAogIHJlYWwgbVs5XTsKICBxckFfKGVsbVksIGVsbVgsIHN0cm91ZF8sIGdhdXNzXywgZGlz
dF8sIG0pOwoKICBlbS5yZXNpemUoMywgMyk7CiAgZW0oMCwgMCkgPSBtWzBdOyBlbSgwLCAxKSA9
IG1bMV07IGVtKDAsIDIpID0gbVsyXTsKICBlbSgxLCAwKSA9IG1bM107IGVtKDEsIDEpID0gbVs0
XTsgZW0oMSwgMikgPSBtWzVdOwogIGVtKDIsIDApID0gbVs2XTsgZW0oMiwgMSkgPSBtWzddOyBl
bSgyLCAyKSA9IG1bOF07Cn0KCiAKCmNsYXNzIG9wX0xhcGxhY2VIeXAgOiBwdWJsaWMgb3BfQmls
aW5lYXJGb3JtPHJlYWw+IHsKCiAgaW50X0xwbEdhbDAwOCBxckFfOwoKICB1aW50ICBzdHJvdWRf
LCBnYXVzc187CiAgcmVhbCAgZGlzdF87CgogcHVibGljOgogIGlubGluZSBvcF9MYXBsYWNlSHlw
KHVpbnQgc3Ryb3VkID0gMCwgdWludCBnYXVzcyA9IDAsIHJlYWwgZGlzdCA9IDAuMCk7IAoKICB2
b2lkIG9wZXJhdG9yKCkoY29uc3Qgc3BjX0VsZW1lbnQ8cmVhbD4mIGVsbVgsIAoJCSAgICBjb25z
dCBzcGNfRWxlbWVudDxyZWFsPiYgZWxtWSwgc3BjX0VsZW1lbnRNYXRyaXg8cmVhbD4mIGVtKTsg
CiAgaW5saW5lIHZvaWQgb3BlcmF0b3IoKShjb25zdCBzcGNfTGluZWFyM2QwMDAmIGVsbVgsIAoJ
CSAgICAgIGNvbnN0IHNwY19MaW5lYXIzZDAwMCYgZWxtWSwgc3BjX0VsZW1lbnRNYXRyaXg8cmVh
bD4mIGVtKTsgCn07IAoKaW5saW5lIG9wX0xhcGxhY2VIeXA6Om9wX0xhcGxhY2VIeXAodWludCBz
dHJvdWQsIHVpbnQgZ2F1c3MsIHJlYWwgZGlzdCkgewoKICBnYXVzc18gPSBnYXVzczsgc3Ryb3Vk
XyA9IHN0cm91ZDsgZGlzdF8gPSBkaXN0OyAKfQoKaW5saW5lIHZvaWQgb3BfTGFwbGFjZUh5cDo6
b3BlcmF0b3IoKShjb25zdCBzcGNfTGluZWFyM2QwMDAmIGVsbVgsIAogICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzcGNfTGluZWFyM2QwMDAmIGVsbVksIHNwY19FbGVtZW50TWF0cml4PHJlYWw+
JiBlbSkgeyAKICByZWFsIG1bOV07CiAgcXJBXyhlbG1YLCBlbG1ZLCBzdHJvdWRfLCBnYXVzc18s
IGRpc3RfLCBtKTsKCiAgZW0ucmVzaXplKDMsIDMpOwogIGVtKDAsIDApID0gbVswXTsgZW0oMCwg
MSkgPSBtWzFdOyBlbSgwLCAyKSA9IG1bMl07CiAgZW0oMSwgMCkgPSBtWzNdOyBlbSgxLCAxKSA9
IG1bNF07IGVtKDEsIDIpID0gbVs1XTsKICBlbSgyLCAwKSA9IG1bNl07IGVtKDIsIDEpID0gbVs3
XTsgZW0oMiwgMikgPSBtWzhdOwp9CgogCgpjbGFzcyBvcF9MYXBsYWNlIDogcHVibGljIG9wX0Jp
bGluZWFyRm9ybTxyZWFsPiB7CgogcHVibGljOgogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBzcGNf
RWxlbWVudDxyZWFsPiYgZWxtWCwgCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BjX0VsZW1l
bnQ8cmVhbD4mIGVsbVksIHNwY19FbGVtZW50TWF0cml4PHJlYWw+JiBlbSk7IAogIHZvaWQgb3Bl
cmF0b3IoKShjb25zdCBzcGNfTGluZWFyMmQwMDAmIGVsbVgsIAogICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3BjX0xpbmVhcjJkMDAwJiBlbG1ZLCBzcGNfRWxlbWVudE1hdHJpeDxyZWFsPiYg
ZW0pOyAKfTsgCgogCgpjbGFzcyBvcF9JZGVudGl0eSA6IHB1YmxpYyBvcF9CaWxpbmVhckZvcm08
cmVhbD4gewoKIHB1YmxpYzoKICB2b2lkIG9wZXJhdG9yKCkoY29uc3Qgc3BjX0VsZW1lbnQ8cmVh
bD4mIGVsbVgsIAoJCSAgICBjb25zdCBzcGNfRWxlbWVudDxyZWFsPiYgZWxtWSwgc3BjX0VsZW1l
bnRNYXRyaXg8cmVhbD4mIGVtKTsgCiAgaW5saW5lIHZvaWQgb3BlcmF0b3IoKShjb25zdCBzcGNf
Q29uc3RhbnQzZDAwMCYgZWxtWCwgCgkJICAgIGNvbnN0IHNwY19Db25zdGFudDNkMDAwJiBlbG1Z
LCBzcGNfRWxlbWVudE1hdHJpeDxyZWFsPiYgZW0pOyAKICB2b2lkIG9wZXJhdG9yKCkoY29uc3Qg
c3BjX0xpbmVhcjNkMDAwJiBlbG1YLCAKCQkgICAgICBjb25zdCBzcGNfTGluZWFyM2QwMDAmIGVs
bVksIHNwY19FbGVtZW50TWF0cml4PHJlYWw+JiBlbSk7IAogIHZvaWQgb3BlcmF0b3IoKShjb25z
dCBzcGNfTGluZWFyMmQwMDAmIGVsbVgsIAoJCSAgICAgIGNvbnN0IHNwY19MaW5lYXIyZDAwMCYg
ZWxtWSwgc3BjX0VsZW1lbnRNYXRyaXg8cmVhbD4mIGVtKTsgCn07IAoKaW5saW5lIHZvaWQgb3Bf
SWRlbnRpdHk6Om9wZXJhdG9yKCkoY29uc3Qgc3BjX0NvbnN0YW50M2QwMDAmIGVsbVgsIAoJCSAg
IGNvbnN0IHNwY19Db25zdGFudDNkMDAwJiBlbG1ZLCBzcGNfRWxlbWVudE1hdHJpeDxyZWFsPiYg
ZW0pIHsgCiAgZW0ucmVzaXplKDEsIDEpOwogIGVtKDAsIDApID0gKGVsbVguc3VwcG9ydCgpLmtl
eSgpICE9IGVsbVkuc3VwcG9ydCgpLmtleSgpKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPyAwLjAgOiBlbG1YLm4oKS5sZW5ndGgoKSAqIDAuNTsKfQoK
CiMgMTkgIi4uL29wZXJhdG9yL29wT3BlcmF0b3IuaCIgMgoKIyAxICIuLi9vcGVyYXRvci9vcERl
YnVnLmgiIDEKCgoKCgoKCiAKCgoKIAoKCiAKCgogCgoKCgoKIyAyMCAiLi4vb3BlcmF0b3Ivb3BP
cGVyYXRvci5oIiAyCgoKIAoKdGVtcGxhdGU8Y2xhc3MgRj4KY2xhc3Mgb3BfTG9jYWw7CgogCgoj
IDUxICIuLi9vcGVyYXRvci9vcE9wZXJhdG9yLmgiCgoKdGVtcGxhdGU8Y2xhc3MgRj4KY2xhc3Mg
b3BfT3BlcmF0b3I7Cgp0ZW1wbGF0ZTxjbGFzcyBGPgppbmxpbmUgb3N0cmVhbSYgb3BlcmF0b3I8
PChvc3RyZWFtJiBvcywgY29uc3Qgb3BfT3BlcmF0b3I8Rj4mIG9wKSB7CiAgcmV0dXJuIG9wLmlu
Zm8ob3MpOyAKfQoKIAoKdGVtcGxhdGU8Y2xhc3MgRj4KY2xhc3Mgb3BfT3BlcmF0b3IgewogIGZy
aWVuZCBvc3RyZWFtJiBvcGVyYXRvcjw8IDw+IChvc3RyZWFtJiBvcywgY29uc3Qgb3BfT3BlcmF0
b3I8Rj4mIG9wKTsKCiBwdWJsaWM6CiAgdmlydHVhbCB+b3BfT3BlcmF0b3IoKSB7fQoKICAgCiAg
dmlydHVhbCB2b2lkIG9wZXJhdG9yKCkoY29uc3QgZm5jX0Z1bmN0aW9uPEY+JiBmbmNZLCAKCQkJ
ICBmbmNfRnVuY3Rpb248Rj4mIGZuY1gpID0gMDsKCiAgIAogIHZpcnR1YWwgb3N0cmVhbSYgaW5m
byhvc3RyZWFtJiBvcykgY29uc3QgPSAwOwoKICAgCiAgdmlydHVhbCBjb25zdCBzcGNfU3BhY2U8
Rj4mIHNwYWNlWCgpIGNvbnN0ID0gMDsKCiAgIAogIHZpcnR1YWwgY29uc3Qgc3BjX1NwYWNlPEY+
JiBzcGFjZVkoKSBjb25zdCA9IDA7Cn07CgoKCiAKCiAKCnRlbXBsYXRlPGNsYXNzIEY+CmNsYXNz
IG9wX0NvbXBvc2UgOiBwdWJsaWMgb3BfT3BlcmF0b3I8Rj4geyAgICAgICAgICAgIAoKICBvcF9P
cGVyYXRvcjxGPiYgQV87CiAgb3BfT3BlcmF0b3I8Rj4mIEJfOwogIGZuY19WZWN0b3I8Rj4gICBm
XzsKCiBwdWJsaWM6CiAgaW5saW5lIG9wX0NvbXBvc2Uob3BfT3BlcmF0b3I8Rj4mIEEsIG9wX09w
ZXJhdG9yPEY+JiBCKTsKCiAgaW5saW5lIHZvaWQgb3BlcmF0b3IoKShjb25zdCBmbmNfRnVuY3Rp
b248Rj4mIGZuY1ksIGZuY19GdW5jdGlvbjxGPiYgZm5jWCk7CgogIGlubGluZSBvc3RyZWFtJiBp
bmZvKG9zdHJlYW0mIG9zKSBjb25zdDsKICBpbmxpbmUgY29uc3Qgc3BjX1NwYWNlPEY+JiBzcGFj
ZVgoKSBjb25zdDsKICBpbmxpbmUgY29uc3Qgc3BjX1NwYWNlPEY+JiBzcGFjZVkoKSBjb25zdDsK
fTsKCnRlbXBsYXRlPGNsYXNzIEY+CmlubGluZSBvcF9Db21wb3NlPEY+OjpvcF9Db21wb3NlKG9w
X09wZXJhdG9yPEY+JiBBLCBvcF9PcGVyYXRvcjxGPiYgQikgCiAgOiBBXyhBKSwgQl8oQiksIGZf
KEIuc3BhY2VYKCkpIHsKfQoKdGVtcGxhdGU8Y2xhc3MgRj4KaW5saW5lIHZvaWQgb3BfQ29tcG9z
ZTxGPjo6b3BlcmF0b3IoKShjb25zdCBmbmNfRnVuY3Rpb248Rj4mIGZuY1ksIAoJCQkJICAgICAg
Zm5jX0Z1bmN0aW9uPEY+JiBmbmNYKSB7CiAgQl8oZm5jWSwgZl8pOyBBXyhmXywgZm5jWCk7Cn0K
CnRlbXBsYXRlPGNsYXNzIEY+CmlubGluZSBvc3RyZWFtJiBvcF9Db21wb3NlPEY+OjppbmZvKG9z
dHJlYW0mIG9zKSBjb25zdCB7IAogIHJldHVybiBvcyA8PCAib3BfQ29tcG9zZSAtLSAoQSAqIEIp
IjsgCn0KCnRlbXBsYXRlPGNsYXNzIEY+CmlubGluZSBjb25zdCBzcGNfU3BhY2U8Rj4mIG9wX0Nv
bXBvc2U8Rj46OnNwYWNlWCgpIGNvbnN0IHsKICByZXR1cm4gQV8uc3BhY2VYKCk7IAp9Cgp0ZW1w
bGF0ZTxjbGFzcyBGPgppbmxpbmUgY29uc3Qgc3BjX1NwYWNlPEY+JiBvcF9Db21wb3NlPEY+Ojpz
cGFjZVkoKSBjb25zdCB7CiAgcmV0dXJuIEJfLnNwYWNlWSgpOyAKfQoKIAoKIAoKdGVtcGxhdGU8
Y2xhc3MgRj4KY2xhc3Mgb3BfQUkgOiBwdWJsaWMgb3BfT3BlcmF0b3I8Rj4geyAgICAgICAgCgog
IG9wX09wZXJhdG9yPEY+JiBBXzsKICBGICAgICAgICAgICAgICAgYV87CiAgRiAgICAgICAgICAg
ICAgIGJfOwoKIHB1YmxpYzoKICBpbmxpbmUgb3BfQUkob3BfT3BlcmF0b3I8Rj4mIEEsIHJlYWwg
YSA9IDEuMCwgcmVhbCBiID0gMS4wKTsKCiAgIAoKCgoKCiAgaW5saW5lIHZvaWQgb3BlcmF0b3Io
KShjb25zdCBmbmNfRnVuY3Rpb248Rj4mIGZuY1ksIGZuY19GdW5jdGlvbjxGPiYgZm5jWCk7Cgog
IGlubGluZSBvc3RyZWFtJiBpbmZvKG9zdHJlYW0mIG9zKSBjb25zdDsKICBpbmxpbmUgY29uc3Qg
c3BjX1NwYWNlPEY+JiBzcGFjZVgoKSBjb25zdDsKICBpbmxpbmUgY29uc3Qgc3BjX1NwYWNlPEY+
JiBzcGFjZVkoKSBjb25zdDsKfTsKCnRlbXBsYXRlPGNsYXNzIEY+CmlubGluZSBvcF9BSTxGPjo6
b3BfQUkob3BfT3BlcmF0b3I8Rj4mIEEsIHJlYWwgYSwgcmVhbCBiKSA6IAogIEFfKEEpLCBhXyhh
KSwgYl8oYikgewp9Cgp0ZW1wbGF0ZTxjbGFzcyBGPgppbmxpbmUgdm9pZCBvcF9BSTxGPjo6b3Bl
cmF0b3IoKShjb25zdCBmbmNfRnVuY3Rpb248Rj4mIGZuY1ksIAoJCQkJIGZuY19GdW5jdGlvbjxG
PiYgZm5jWCkgewogIEFfKGZuY1ksIGZuY1gpOyBpZiAoYV8gIT0gMS4wKSBmbmNYICo9IGFfOyBp
ZiAoYl8gIT0gMC4wKSBmbmNYLmFkZChmbmNZLCBiXyk7Cn0KCnRlbXBsYXRlPGNsYXNzIEY+Cmlu
bGluZSBvc3RyZWFtJiBvcF9BSTxGPjo6aW5mbyhvc3RyZWFtJiBvcykgY29uc3QgeyAKICByZXR1
cm4gb3MgPDwgIm9wX0FJIC0tIChhICogQSArIGIgKiBJKSI7IAp9Cgp0ZW1wbGF0ZTxjbGFzcyBG
PgppbmxpbmUgY29uc3Qgc3BjX1NwYWNlPEY+JiBvcF9BSTxGPjo6c3BhY2VYKCkgY29uc3Qgewog
IHJldHVybiBBXy5zcGFjZVgoKTsgCn0KCnRlbXBsYXRlPGNsYXNzIEY+CmlubGluZSBjb25zdCBz
cGNfU3BhY2U8Rj4mIG9wX0FJPEY+OjpzcGFjZVkoKSBjb25zdCB7CiAgcmV0dXJuIEFfLnNwYWNl
WSgpOyAKfQoKIAoKIAoKdGVtcGxhdGU8Y2xhc3MgRj4KY2xhc3Mgb3BfTGlDbyA6IHB1YmxpYyBv
cF9PcGVyYXRvcjxGPiB7ICAgICAgCgogIG9wX09wZXJhdG9yPEY+JiBBXzsKICBvcF9PcGVyYXRv
cjxGPiYgQl87CiAgRiAgICAgICAgICAgICAgIGFfOwogIEYgICAgICAgICAgICAgICBiXzsKICBm
bmNfVmVjdG9yPEY+ICAgZl87CgogcHVibGljOgogICAKCgoKCgoKCiAgaW5saW5lIG9wX0xpQ28o
b3BfT3BlcmF0b3I8Rj4mIEEsIG9wX09wZXJhdG9yPEY+JiBCLCAKCQkgcmVhbCBhID0gMS4wLCBy
ZWFsIGIgPSAxLjApOwoKICAgCgoKCgoKCiAgaW5saW5lIHZvaWQgb3BlcmF0b3IoKShjb25zdCBm
bmNfRnVuY3Rpb248Rj4mIGZuY1ksIGZuY19GdW5jdGlvbjxGPiYgZm5jWCk7CgogICAKICBpbmxp
bmUgb3N0cmVhbSYgaW5mbyhvc3RyZWFtJiBvcykgY29uc3Q7CgogICAKICBpbmxpbmUgY29uc3Qg
c3BjX1NwYWNlPEY+JiBzcGFjZVgoKSBjb25zdDsKCiAgIAogIGlubGluZSBjb25zdCBzcGNfU3Bh
Y2U8Rj4mIHNwYWNlWSgpIGNvbnN0OwoKICAgCiAgIAoKCgoKCgoKCgoKCgoKCgogIGJvb2wgY29s
bGFwc2Uob3BfTG9jYWw8Rj4mIGRlc3QsIGNvbnN0IGRvdWJsZSBmYWN0ID0gMS4wKSBjb25zdDsK
fTsKCnRlbXBsYXRlPGNsYXNzIEY+Cm9wX0xpQ288Rj46Om9wX0xpQ28ob3BfT3BlcmF0b3I8Rj4m
IEEsIG9wX09wZXJhdG9yPEY+JiBCLCByZWFsIGEsIHJlYWwgYikgCiAgOiBBXyhBKSwgQl8oQiks
IGFfKGEpLCBiXyhiKSwgZl8oQS5zcGFjZVgoKSkgewp9Cgp0ZW1wbGF0ZTxjbGFzcyBGPgppbmxp
bmUgdm9pZCBvcF9MaUNvPEY+OjpvcGVyYXRvcigpKGNvbnN0IGZuY19GdW5jdGlvbjxGPiYgZm5j
WSwgCgkJCQkgICBmbmNfRnVuY3Rpb248Rj4mIGZuY1gpIHsKICBBXyhmbmNZLCBmbmNYKTsgZm5j
WCAqPSBhXzsgQl8oZm5jWSwgZl8pOyBmbmNYLmFkZChmXywgYl8pOyAKfQoKdGVtcGxhdGU8Y2xh
c3MgRj4KaW5saW5lIG9zdHJlYW0mIG9wX0xpQ288Rj46OmluZm8ob3N0cmVhbSYgb3MpIGNvbnN0
IHsgCiAgcmV0dXJuIG9zIDw8ICJvcF9MaUNvIC0tIChhICogQSArIGIgKiBCKSI7IAp9Cgp0ZW1w
bGF0ZTxjbGFzcyBGPgppbmxpbmUgY29uc3Qgc3BjX1NwYWNlPEY+JiBvcF9MaUNvPEY+OjpzcGFj
ZVgoKSBjb25zdCB7CiAgcmV0dXJuIEFfLnNwYWNlWCgpOyAKfQoKdGVtcGxhdGU8Y2xhc3MgRj4K
aW5saW5lIGNvbnN0IHNwY19TcGFjZTxGPiYgb3BfTGlDbzxGPjo6c3BhY2VZKCkgY29uc3Qgewog
IHJldHVybiBBXy5zcGFjZVkoKTsgCn0KCnRlbXBsYXRlPGNsYXNzIEY+ICAKYm9vbCBvcF9MaUNv
PEY+Ojpjb2xsYXBzZShvcF9Mb2NhbDxGPiYgZGVzdCwgY29uc3QgZG91YmxlIGZhY3QpIGNvbnN0
IHsKCiAgYm9vbCByZXN1bHQgPSB0cnVlOwoKICBpZiggMCAgIT0wKSBjb3V0IDw8ICAgJ1snIDw8
ICAiLi4vb3BlcmF0b3Ivb3BPcGVyYXRvci5oIiA8PCAiLCBsaW5lICIgPDwgMjgxIAogICAgICA8
PCAiIF0gb3BfTGlDbzo6Y29sbGFwc2UgLS0gQSBpcyIgIDw8ICIgIiA8PCAgIHR5cGVpZChBXyku
bmFtZSgpICA8PCBlbmRsOyA7CgogIG9wX0xvY2FsPEY+KiBBID0gZHluYW1pY19jYXN0PG9wX0xv
Y2FsPEY+Kj4oJkFfKTsKICBpZiAoQSkKICAgIEEtPmFkZEludG8oZGVzdCwgYV8qZmFjdCk7CiAg
ZWxzZSB7CiAgICBvcF9MaUNvPEY+KkFBID0gZHluYW1pY19jYXN0PG9wX0xpQ288Rj4qPigmQV8p
OwogICAgaWYgKEFBKQogICAgICByZXN1bHQgJj0gQUEtPmNvbGxhcHNlKGRlc3QsIGFfKmZhY3Qp
OwogICAgZWxzZQogICAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBpZiAoIXJlc3VsdCkKICAgIHJl
dHVybiByZXN1bHQ7CgogIGlmKCAwICAhPTApIGNvdXQgPDwgICAnWycgPDwgICIuLi9vcGVyYXRv
ci9vcE9wZXJhdG9yLmgiIDw8ICIsIGxpbmUgIiA8PCAyOTggCiAgICAgIDw8ICIgXSBvcF9MaUNv
Ojpjb2xsYXBzZSAtLSBCIGlzIiAgPDwgIiAiIDw8ICAgdHlwZWlkKEJfKS5uYW1lKCkgIDw8IGVu
ZGw7IDsKCiAgb3BfTG9jYWw8Rj4qIEIgPSBkeW5hbWljX2Nhc3Q8b3BfTG9jYWw8Rj4qPigmQl8p
OwogIGlmIChCKQogICAgQi0+YWRkSW50byhkZXN0LCBiXypmYWN0KTsKICBlbHNlIHsKICAgIG9w
X0xpQ288Rj4qQkIgPSBkeW5hbWljX2Nhc3Q8b3BfTGlDbzxGPio+KCZCXyk7CiAgICBpZiAoQkIp
CiAgICAgIHJlc3VsdCAmPSBCQi0+Y29sbGFwc2UoZGVzdCwgYl8qZmFjdCk7CiAgICBlbHNlCiAg
ICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVybiByZXN1bHQ7Cn0KCiAKCiAKCnRlbXBsYXRl
PGNsYXNzIEY+CmNsYXNzIG9wX01hdHJpeCA6IHB1YmxpYyBvcF9PcGVyYXRvcjxGPiB7CgogICAK
ICBjb25zdCBzcGNfU3BhY2U8Rj4mIHNwY1hfOwoKICAgCiAgdWludCAgICAgICAgICAgICAgICBu
WF87CgogICAKICBjb25zdCBzcGNfU3BhY2U8Rj4mIHNwY1lfOwoKICAgCiAgdWludCAgICAgICAg
ICAgICAgICBuWV87CgogICAKICBGKiBtXzsKCiAgb3BfTWF0cml4KGNvbnN0IG9wX01hdHJpeCYp
OwogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IG9wX01hdHJpeCYpOwoKIHB1YmxpYzoKICAgCgoKCgoK
CgoKICBvcF9NYXRyaXgoY29uc3Qgc3BjX1NwYWNlPEY+JiBzcGNYLCBjb25zdCBzcGNfU3BhY2U8
Rj4mIHNwY1ksIAoJICAgIG9wX0JpbGluZWFyRm9ybTxGPiYgYmYpOwogIG9wX01hdHJpeChjb25z
dCBzcGNfU3BhY2U8Rj4mIHNwYywgb3BfQmlsaW5lYXJGb3JtPEY+JiBiZik7CiAgb3BfTWF0cml4
KGNvbnN0IHNwY19TcGFjZTxGPiYgc3BjWCwgY29uc3Qgc3BjX1NwYWNlPEY+JiBzcGNZLCBjaGFy
KiBmbmFtZSk7CgogIH5vcF9NYXRyaXgoKTsKCiAgIAoKCgogIHZvaWQgb3BlcmF0b3IoKShjb25z
dCBmbmNfRnVuY3Rpb248Rj4mIGZuY1ksIGZuY19GdW5jdGlvbjxGPiYgZm5jWCk7CiAgdm9pZCBv
cGVyYXRvcigpKGNvbnN0IGZuY19WZWN0b3I8Rj4mIGZuY1ksIGZuY19WZWN0b3I8Rj4mIGZuY1gp
OwoKICAgCgoKCiAgRiYgb3BlcmF0b3IoKShjb25zdCB1aW50IGksIGNvbnN0IHVpbnQgaikgY29u
c3QgewogICAgcmV0dXJuIG1fW2kqbllfK2pdOwogIH0KICBpbmxpbmUgb3BlcmF0b3IgRiooKSBj
b25zdDsKCiAgb3N0cmVhbSYgaW5mbyhvc3RyZWFtJiBvcykgY29uc3Q7CgogICAKICBpbmxpbmUg
dWludCBuWCgpIGNvbnN0OwoKICAgCiAgaW5saW5lIHVpbnQgblkoKSBjb25zdDsKCiAgIAogIGlu
bGluZSBjb25zdCBzcGNfU3BhY2U8Rj4mIHNwYWNlWCgpIGNvbnN0OwoKICAgCiAgaW5saW5lIGNv
bnN0IHNwY19TcGFjZTxGPiYgc3BhY2VZKCkgY29uc3Q7CgogICAKCgogIHZvaWQgd3JpdGUoY2hh
ciogZm5hbWUpIGNvbnN0Owp9OwoKdGVtcGxhdGU8Y2xhc3MgRj4KaW5saW5lIG9wX01hdHJpeDxG
Pjo6fm9wX01hdHJpeCgpIHsKICBkZWxldGVbXSBtXzsKfQoKdGVtcGxhdGU8Y2xhc3MgRj4KaW5s
aW5lIG9wX01hdHJpeDxGPjo6b3BlcmF0b3IgRiooKSBjb25zdCB7CiAgcmV0dXJuIG1fOwp9CiAg
ICAgIAp0ZW1wbGF0ZTxjbGFzcyBGPgppbmxpbmUgdWludCBvcF9NYXRyaXg8Rj46Om5YKCkgY29u
c3QgewogIHJldHVybiBuWF87Cn0KICAgICAgCnRlbXBsYXRlPGNsYXNzIEY+CmlubGluZSB1aW50
IG9wX01hdHJpeDxGPjo6blkoKSBjb25zdCB7CiAgcmV0dXJuIG5ZXzsKfQogICAgICAKdGVtcGxh
dGU8Y2xhc3MgRj4KaW5saW5lIGNvbnN0IHNwY19TcGFjZTxGPiYgb3BfTWF0cml4PEY+OjpzcGFj
ZVgoKSBjb25zdCB7CiAgcmV0dXJuIHNwY1hfOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBGPgppbmxpbmUg
Y29uc3Qgc3BjX1NwYWNlPEY+JiBvcF9NYXRyaXg8Rj46OnNwYWNlWSgpIGNvbnN0IHsKICByZXR1
cm4gc3BjWV87Cn0KCiAKCiAKCnRlbXBsYXRlPGNsYXNzIEY+CmNsYXNzIG9wX0xvY2FsIDogcHVi
bGljIG9wX09wZXJhdG9yPEY+IHsKCiAgIAogIGNvbnN0IHNwY19TcGFjZTxGPiYgc3BjWF87Cgog
ICAKICB1aW50ICAgICAgICAgICAgICAgIG5YXzsKCiAgIAogIGNvbnN0IHNwY19TcGFjZTxGPiYg
c3BjWV87CgogICAKICB1aW50ICAgICAgICAgICAgICAgIG5ZXzsKCiAgIAogIFNwYXJzZU1hdHJp
eCBtXzsKCiAgb3BfTG9jYWwoY29uc3Qgb3BfTG9jYWwmKTsKICB2b2lkIG9wZXJhdG9yPShjb25z
dCBvcF9Mb2NhbCYpOwoKcHVibGljOgogICAKCiAgb3BfTG9jYWwoY29uc3Qgc3BjX1NwYWNlPEY+
JiBzcGNYLCBjb25zdCBzcGNfU3BhY2U8Rj4mIHNwY1kpIDoKICAgIHNwY1hfKHNwY1gpLCBuWF8o
c3BjWC5kaW0oKSksIHNwY1lfKHNwY1kpLCBuWV8oc3BjWS5kaW0oKSksIAogICAgbV8oc3BjWC5k
aW0oKSwgc3BjWS5kaW0oKSwgMikge30KCiAgIAoKCiAgb3BfTG9jYWwoY29uc3Qgc3BjX1NwYWNl
PEY+JiBzcGNYLCBjb25zdCBzcGNfU3BhY2U8Rj4mIHNwY1ksIAoJICAgb3BfQmlsaW5lYXJGb3Jt
PEY+JiBiZik7CgogICAKCgogIG9wX0xvY2FsKGNvbnN0IHNwY19TcGFjZTxGPiYgc3BjLCBvcF9C
aWxpbmVhckZvcm08Rj4mIGJmKTsKCiAgIAoKCgoKICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgZm5j
X0Z1bmN0aW9uPEY+JiBmbmNZLCBmbmNfRnVuY3Rpb248Rj4mIGZuY1gpOwoKICAgCgoKCgogIHZv
aWQgb3BlcmF0b3IoKShjb25zdCBmbmNfVmVjdG9yPEY+JiBmbmNZLCBmbmNfVmVjdG9yPEY+JiBm
bmNYKTsKICAKICAgCiAgb3N0cmVhbSYgaW5mbyhvc3RyZWFtJiBvcykgY29uc3Q7CgogICAKICBp
bmxpbmUgY29uc3Qgc3BjX1NwYWNlPEY+JiBzcGFjZVgoKSBjb25zdDsKCiAgIAogIGlubGluZSBj
b25zdCBzcGNfU3BhY2U8Rj4mIHNwYWNlWSgpIGNvbnN0OwoKICAgCgoKCiAgdm9pZCB3cml0ZShj
aGFyKiBmbmFtZSkgY29uc3Q7CgogICAKICBpbmxpbmUgU3BhcnNlTWF0cml4KiBtKCkge3JldHVy
biAmbV87fTsgIAoKICAgCiAgIAoKCgoKICB2b2lkIGFkZEludG8ob3BfTG9jYWw8Rj4mIGRlc3Qs
IGNvbnN0IGRvdWJsZSBmYWN0KSBjb25zdDsKfTsKCnRlbXBsYXRlPGNsYXNzIEY+CmlubGluZSB2
b2lkIG9wX0xvY2FsPEY+OjpvcGVyYXRvcigpKGNvbnN0IGZuY19WZWN0b3I8Rj4mIGZuY1ksIAoJ
CQkJICAgIGZuY19WZWN0b3I8Rj4mIGZuY1gpIHsKICBtXyhmbmNZLCBmbmNYKTsgCn0KICAgICAg
CnRlbXBsYXRlPGNsYXNzIEY+CmlubGluZSBjb25zdCBzcGNfU3BhY2U8Rj4mIG9wX0xvY2FsPEY+
OjpzcGFjZVgoKSBjb25zdCB7CiAgcmV0dXJuIHNwY1hfOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBGPgpp
bmxpbmUgY29uc3Qgc3BjX1NwYWNlPEY+JiBvcF9Mb2NhbDxGPjo6c3BhY2VZKCkgY29uc3Qgewog
IHJldHVybiBzcGNZXzsKfQoKdGVtcGxhdGU8Y2xhc3MgRj4gIAp2b2lkIG9wX0xvY2FsPEY+Ojph
ZGRJbnRvKG9wX0xvY2FsPEY+JiBkZXN0LCBjb25zdCBkb3VibGUgZmFjdCkgY29uc3QgewoKICBp
ZiggMCAgIT0wKSBjb3V0IDw8ICAgJ1snIDw8ICAiLi4vb3BlcmF0b3Ivb3BPcGVyYXRvci5oIiA8
PCAiLCBsaW5lICIgPDwgNTI2IAogICAgICA8PCAiIF0gb3BfTG9jYWw6OmFkZEludG8gLS0gZmFj
dCA9IiAgPDwgIiAiIDw8ICAgZmFjdCAgPDwgZW5kbDsgOwoKICBpZiAoZmFjdCAhPSAwLjApIHsK
ICAgIGludCBoYXNoQml0cyA9IG1fLkhhc2hCaXRzKCk7CiAgICBpbnQgcCA9IDEgPDwgaGFzaEJp
dHM7CiAgICB1aW50IG4gPSBzcGFjZVgoKS5kaW0oKTsKICAgIFNwYXJzZU1hdHJpeDo6VmFsdWUq
KiBtYXRyaXggPSBtXy5NYXRyaXgoKTsKCiAgICBmb3IgKHVpbnQgciA9IDA7IHIgPCBuOyArK3Ip
IHsKICAgICAgZm9yIChpbnQgY19tb2QgPSAwOyBjX21vZCA8IHA7ICsrY19tb2QpIHsKCWZvciAo
U3BhcnNlTWF0cml4OjpWYWx1ZSogdiA9IG1hdHJpeFsocjw8aGFzaEJpdHMpICsgY19tb2RdOyAK
CSAgICAgdiAhPSBfX251bGwgOyB2ID0gdi0+bG5rKSB7CgkgIGlmICh2LT52YWwgIT0gMC4wKSB7
CgkgICAgKCpkZXN0Lm0oKSkociwgdi0+aWR4KSArPSAodi0+dmFsKmZhY3QpOwoJICB9Cgl9CiAg
ICAgIH0KICAgIH0KICB9Cn0KCiAKCmNsYXNzIG9wX1MwMSA6IHB1YmxpYyBvcF9NYXRyaXg8cmVh
bD4gewoKIHB1YmxpYzoKICBvcF9TMDEoY29uc3Qgc3BjX1NwYWNlPHJlYWw+JiBzcGNYLCBjb25z
dCBzcGNfU3BhY2U8cmVhbD4mIHNwY1ksIAoJIG9wX0JpbGluZWFyRm9ybTxyZWFsPiYgYmYpOwog
IG9zdHJlYW0mIGluZm8ob3N0cmVhbSYgb3MpIGNvbnN0Owp9OwoKIAoKIyAxICIuLi9vcGVyYXRv
ci9vcE9wZXJhdG9yLnQiIDEKIAoKCgoKCgogICNwcmFnbWEgaW1wbGVtZW50YXRpb24KCgoKCgoK
CgogCgp0ZW1wbGF0ZTxjbGFzcyBGPgpvcF9NYXRyaXg8Rj46Om9wX01hdHJpeChjb25zdCBzcGNf
U3BhY2U8Rj4mIHNwY1gsIGNvbnN0IHNwY19TcGFjZTxGPiYgc3BjWSwgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvcF9CaWxpbmVhckZvcm08Rj4mIGJmKSA6IHNwY1hfKHNwY1gpLCBzcGNZ
XyhzcGNZKSB7CgogIG5YXyA9IHNwY1guZGltKCk7CiAgbllfID0gc3BjWS5kaW0oKTsKIAkJCQkJ
CSAKICBtXyA9IG5ldyByZWFsW25YXyAqIG5ZX107CiAgbWVtc2V0KG1fLCAwLCBzaXplb2YobV9b
MF0pICogblhfICogbllfKTsKCQkJCQkJIAogIHNwY19FbGVtZW50TWF0cml4PEY+IEEoMywgMyk7
CQogIHNwY19FbGVtZW50TWF0cml4PEY+IEIoMywgMyk7CQoKICBzcGNfU3BhY2U8Rj46OnNwY19T
Y2FuKiBzY1ggPSBzcGNYLnNjYW4oKTsKICB3aGlsZSAoKnNjWCkgewogICAgc3BjX0VsZW1lbnQ8
Rj4mIGVsbVggPSAoKnNjWCkrKzsKICAgIGNvbnN0IHNwY19UPEY+JiBUWCA9IGVsbVguVCgpOwog
IAogICAgc3BjX1NwYWNlPEY+OjpzcGNfU2Nhbiogc2NZID0gc3BjWS5zY2FuKCk7CiAgICB3aGls
ZSAoKnNjWSkgewogICAgICBzcGNfRWxlbWVudDxGPiYgZWxtWSA9ICgqc2NZKSsrOwogICAgICBj
b25zdCBzcGNfVDxGPiYgVFkgPSBlbG1ZLlQoKTsKCiAgICAgIGJmKGVsbVgsIGVsbVksIEEpOwog
ICAgICBUWShBLCBCKTsgQi50cmFuc3Bvc2UoKTsgVFgoQiwgQSk7IEEudHJhbnNwb3NlKCk7Cgog
ICAgICAgCiAKIAogCiAKIAoKICAgICAgIAogICAgICAgIGZvcih1aW50IGkgPSBUWS5tKCk7IGkt
LTspIHsKICAgICAgICAgIEYqIG0gPSBtXyArICBuWF8gKiBUWS5pbmRleChpKTsJCiAgICAgICAg
ICBmb3IodWludCBqID0gVFgubSgpOyBqLS07KSAKICAgICAgICAgICAgbVtUWC5pbmRleChqKV0g
Kz0gQShqLCBpKTsKICAgICAgICB9CQogICAgfQogICAgZGVsZXRlIHNjWTsJCiAgfQogIGRlbGV0
ZSBzY1g7CSAKfQoKdGVtcGxhdGU8Y2xhc3MgRj4Kb3BfTWF0cml4PEY+OjpvcF9NYXRyaXgoY29u
c3Qgc3BjX1NwYWNlPEY+JiBzcGMsIG9wX0JpbGluZWFyRm9ybTxGPiYgYmYpIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNwY1hfKHNwYyks
IHNwY1lfKHNwYykgewogIG5YXyA9IG5ZXyA9IHNwYy5kaW0oKTsKIAkJCQkJCSAKICBtXyA9IG5l
dyByZWFsW25YXyAqIG5ZX107CiAgbWVtc2V0KG1fLCAwLCBzaXplb2YobV9bMF0pICogblhfICog
bllfKTsKCQkJCQkJIAogIHNwY19FbGVtZW50TWF0cml4PEY+IEEoMywgMyk7CQogIHNwY19FbGVt
ZW50TWF0cml4PEY+IEIoMywgMyk7CQoKICBzcGNfU3BhY2U8Rj46OnNwY19TY2FuKiBzY1ggPSBz
cGMuc2NhbigpOwogIHdoaWxlICgqc2NYKSB7CiAgICBzcGNfRWxlbWVudDxGPiYgZWxtWCA9ICgq
c2NYKSsrOwogICAgY29uc3Qgc3BjX1Q8Rj4mIFRYID0gZWxtWC5UKCk7CiAgCiAgICBiZihlbG1Y
LCBlbG1YLCBBKTsKICAgIFRYKEEsIEIpOyBCLnRyYW5zcG9zZSgpOyBUWChCLCBBKTsgQS50cmFu
c3Bvc2UoKTsKCiAgICBmb3IodWludCBpID0gVFgubSgpOyBpLS07KSB7CiAgICAgIEYqIG0gPSBt
XyArICBuWV8gKiBUWC5pbmRleChpKTsJCiAgICAgIGZvcih1aW50IGogPSBUWC5tKCk7IGotLTsp
IAoJbVtUWC5pbmRleChqKV0gKz0gQShpLCBqKTsKICAgIH0JCgogICAgc3BjX1NwYWNlPEY+Ojpz
cGNfU2Nhbiogc2NZID0gc2NYLT5jbG9uZSgpOwogICAgd2hpbGUgKCpzY1kpIHsKICAgICAgc3Bj
X0VsZW1lbnQ8Rj4mIGVsbVkgPSAoKnNjWSkrKzsKICAgICAgY29uc3Qgc3BjX1Q8Rj4mIFRZID0g
ZWxtWS5UKCk7CgogICAgICBiZihlbG1YLCBlbG1ZLCBBKTsKICAgICAgVFkoQSwgQik7IEIudHJh
bnNwb3NlKCk7IFRYKEIsIEEpOyBBLnRyYW5zcG9zZSgpOwoKICAgICAgZm9yKHVpbnQgaSA9IFRY
Lm0oKTsgaS0tOykgewogICAgICAgIEYqIG0gPSBtXyArICBuWV8gKiBUWC5pbmRleChpKTsJCiAg
ICAgICAgZm9yKHVpbnQgaiA9IFRZLm0oKTsgai0tOykgCiAgICAgICAgICBtW1RZLmluZGV4KGop
XSArPSBBKGksIGopOwogICAgICB9CQogICAgICAKICAgICAgYmYoZWxtWSwgZWxtWCwgQSk7CiAg
ICAgIFRYKEEsIEIpOyBCLnRyYW5zcG9zZSgpOyBUWShCLCBBKTsgQS50cmFuc3Bvc2UoKTsKCgoK
CgoKCgogICAgICBmb3IodWludCBpID0gVFkubSgpOyBpLS07KSB7CiAgICAgICAgRiogbSA9IG1f
ICsgIG5ZXyAqIFRZLmluZGV4KGkpOwkKICAgICAgICBmb3IodWludCBqID0gVFgubSgpOyBqLS07
KSAKICAgICAgICAgIG1bVFguaW5kZXgoaildICs9IEEoaSwgaik7CiAgICAgIH0JCgogICAgfQog
ICAgZGVsZXRlIHNjWTsKICB9CiAgZGVsZXRlIHNjWDsKfQoKdGVtcGxhdGU8Y2xhc3MgRj4Kb3Bf
TWF0cml4PEY+OjpvcF9NYXRyaXgoY29uc3Qgc3BjX1NwYWNlPEY+JiBzcGNYLCBjb25zdCBzcGNf
U3BhY2U8Rj4mIHNwY1ksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyKiBmbmFtZSkgOiBzcGNYXyhzcGNYKSwgc3BjWV8oc3BjWSkgewoKICBuWF8gPSBzcGNYLmRp
bSgpOwogIG5ZXyA9IHNwY1kuZGltKCk7CiAJCQkJCQkgCiAgbV8gPSBuZXcgcmVhbFtuWF8gKiBu
WV9dOwogIG1lbXNldChtXywgMCwgc2l6ZW9mKG1fWzBdKSAqIG5YXyAqIG5ZXyk7CgogIGlmc3Ry
ZWFtICBpZnMoZm5hbWUpOwogIHVpbnQgICAgICBmb287CgogIGlmcy5yZWFkKChjaGFyKikgJmZv
bywgc2l6ZW9mKGZvbykpOwogIGlmIChmb28gPT0gblhfKSB7CiAgICBpZnMucmVhZCgoY2hhciop
ICZmb28sIHNpemVvZihmb28pKTsKICAgIGlmIChmb28gPT0gbllfKSB7CiAgICAgIGlmcy5yZWFk
KChjaGFyKikgbV8sIG5YXyAqIG5ZXyAqIHNpemVvZihtX1swXSkpOwogICAgfQogIH0KfSAKCnRl
bXBsYXRlPGNsYXNzIEY+CnZvaWQgb3BfTWF0cml4PEY+OjpvcGVyYXRvcigpKGNvbnN0IGZuY19G
dW5jdGlvbjxGPiYgZm5jWSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm5jX0Z1bmN0aW9uPEY+JiBmbmNYKSB7CiAgY29uc3QgZm5jX1Zl
Y3RvcjxGPiogZm5jWUE7CiAgaWYgKChmbmNZQSA9IGR5bmFtaWNfY2FzdDxjb25zdCBmbmNfVmVj
dG9yPEY+Kj4oJmZuY1kpKSkgewogICAgZm5jX1ZlY3RvcjxGPiogZm5jWEE7CiAgICBpZiAoKGZu
Y1hBID0gZHluYW1pY19jYXN0PGZuY19WZWN0b3I8Rj4qPigmZm5jWCkpKSB7CiAgICAgICgqdGhp
cykoKmZuY1lBLCAqZm5jWEEpOyByZXR1cm47CiAgICB9CiAgfQoKICBjb25zdCByZWFsKiBtID0g
bV87CiAgZm9yIChzcGNfQkZuY0luZGV4IGkgPSAwOyBpIDwgblhfOyArK2kpIHsKICAgIHJlYWwg
ZmkgPSAwLjA7CiAgICBmb3IgKHNwY19CRm5jSW5kZXggaiA9IDA7IGogPCBuWV87ICsraikgZmkg
Kz0gKm0rKyAqIGZuY1koaik7CiAgICBmbmNYKGkpID0gZmk7CiAgfQp9Cgp0ZW1wbGF0ZTxjbGFz
cyBGPgp2b2lkIG9wX01hdHJpeDxGPjo6b3BlcmF0b3IoKShjb25zdCBmbmNfVmVjdG9yPEY+JiBm
bmNZLCBmbmNfVmVjdG9yPEY+JiBmbmNYKSB7CgogIEYqIG0obV8pOwogIEYqIHgoZm5jWCk7CQoJ
CiAgZm9yIChzcGNfQkZuY0luZGV4IGkgPSAwOyBpIDwgblhfOyArK2kpIHsKICAgIEYqIHkoZm5j
WSk7CQogICAgRiAgZmkgPSAwLjA7CiAgICBmb3IgKHNwY19CRm5jSW5kZXggaiA9IDA7IGogPCBu
WV87ICsraikgZmkgKz0gKm0rKyAqICp5Kys7CiAgICAqeCsrID0gZmk7CiAgfQp9CiAgICAgIAp0
ZW1wbGF0ZTxjbGFzcyBGPgpvc3RyZWFtJiBvcF9NYXRyaXg8Rj46OmluZm8ob3N0cmVhbSYgb3Mp
IGNvbnN0IHsKCiAgRiogbSA9IG1fOyAKCiAgZm9yIChzcGNfQkZuY0luZGV4IGkgPSAwOyBpIDwg
blhfOyBpKyspIHsKICAgIG9zIDw8IChpID8gIiAgIiA6ICJvcF9NYXRyaXgoXG4gICIpOwogICAg
Zm9yIChzcGNfQkZuY0luZGV4IGogPSAwOyBqIDwgbllfOyBqKyspIG9zIDw8ICptKysgPDwgJyAn
OwogICAgb3MgPDwgJ1xuJzsKICB9CgogIHJldHVybiBvcyA8PCAnKSc7Cn0KCnRlbXBsYXRlPGNs
YXNzIEY+CnZvaWQgb3BfTWF0cml4PEY+Ojp3cml0ZShjaGFyKiBmbmFtZSkgY29uc3QgewoKICBv
ZnN0cmVhbSAgb2ZzKGZuYW1lKTsKICAKICBvZnMud3JpdGUoKGNvbnN0IGNoYXIqKSAmblhfLCBz
aXplb2YoblhfKSk7CiAgb2ZzLndyaXRlKChjb25zdCBjaGFyKikgJm5ZXywgc2l6ZW9mKG5ZXykp
OwoKICBvZnMud3JpdGUoKGNvbnN0IGNoYXIqKSBtXywgblhfICogbllfICogc2l6ZW9mKG1fWzBd
KSk7Cn0KCiAKCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCnRlbXBs
YXRlPGNsYXNzIEY+Cm9wX0xvY2FsPEY+OjpvcF9Mb2NhbChjb25zdCBzcGNfU3BhY2U8Rj4mIHNw
Y1gsIGNvbnN0IHNwY19TcGFjZTxGPiYgc3BjWSwKCQkgICAgICBvcF9CaWxpbmVhckZvcm08Rj4m
IGJmKSA6IAogIHNwY1hfKHNwY1gpLCBzcGNZXyhzcGNZKSwgCiAgbV8oc3BjWC5kaW0oKSwgc3Bj
WS5kaW0oKSwgMikgewogIG5YXyA9IHNwY1guZGltKCk7CiAgbllfID0gc3BjWS5kaW0oKTsKIAkJ
CQkJCSAKICBzcGNfRWxlbWVudE1hdHJpeDxGPiBBKDMsIDMpOwkKICBzcGNfRWxlbWVudE1hdHJp
eDxGPiBCKDMsIDMpOwkKCiAgc3BjX1NwYWNlPEY+OjpzcGNfU2Nhbiogc2NYID0gc3BjWC5zY2Fu
KCk7CiAgd2hpbGUgKCpzY1gpIHsKICAgIHNwY19FbGVtZW50PEY+JiBlbG1YID0gKCpzY1gpKys7
CiAgICBjb25zdCBzcGNfVDxGPiYgVFggPSBlbG1YLlQoKTsKICAKICAgIHNwY19TcGFjZTxGPjo6
c3BjX1NjYW4qIHNjWSA9IHNwY1kuc2NhbigpOwogICAgd2hpbGUgKCpzY1kpIHsKICAgICAgc3Bj
X0VsZW1lbnQ8Rj4mIGVsbVkgPSAoKnNjWSkrKzsKCiAgICAgIGNvbnN0IHNwY19UPEY+JiBUWSA9
IGVsbVkuVCgpOwoKICAgICAgYmYoZWxtWCwgZWxtWSwgQSk7CiAgICAgIFRZKEEsIEIpOyBCLnRy
YW5zcG9zZSgpOyBUWChCLCBBKTsgQS50cmFuc3Bvc2UoKTsKCiAgICAgIGZvcih1aW50IGkgPSBU
WS5tKCk7IGktLTspIHsKCWZvcih1aW50IGogPSBUWC5tKCk7IGotLTspIHsKCSAgcmVhbCBhID0g
QShqLGkpOwoJICBpZiAoYSAhPSAwLjApIHsKCSAgICBtXyhUWS5pbmRleChpKSwgVFguaW5kZXgo
aikpICs9IGE7CgkgIH0gIAoJfSAgCiAgICAgIH0gIAogICAgfSAgCiAgICBkZWxldGUgc2NZOwog
IH0gIAogIGRlbGV0ZSBzY1g7Cn0KCnRlbXBsYXRlPGNsYXNzIEY+Cm9wX0xvY2FsPEY+OjpvcF9M
b2NhbChjb25zdCBzcGNfU3BhY2U8Rj4mIHNwYywgb3BfQmlsaW5lYXJGb3JtPEY+JiBiZikgCiAg
ICAgICAgICAgICAgICAgICAgICAgICA6IHNwY1hfKHNwYyksIHNwY1lfKHNwYyksIG1fKHNwYy5k
aW0oKSwgc3BjLmRpbSgpLCAyKSB7CgogIG5ZXyA9IG5YXyA9IHNwYy5kaW0oKTsKCiAgc3BjX0Vs
ZW1lbnRNYXRyaXg8Rj4gQSgzLCAzKTsJCiAgc3BjX0VsZW1lbnRNYXRyaXg8Rj4gQigzLCAzKTsJ
CgogIHNwY19TcGFjZTxGPjo6c3BjX1NjYW4qIHNjID0gc3BjLnNjYW4oKTsKICB3aGlsZSAoKnNj
KSB7CiAgICBzcGNfRWxlbWVudDxGPiYgZWxtID0gKCpzYykrKzsKICAgIGNvbnN0IHNwY19UPEY+
JiBUID0gZWxtLlQoKTsKCiAgICBiZihlbG0sIGVsbSwgQSk7CiAgICBUKEEsIEIpOyBCLnRyYW5z
cG9zZSgpOyBUKEIsIEEpOyBBLnRyYW5zcG9zZSgpOwoKICAgIGZvcih1aW50IGkgPSBULm0oKTsg
aS0tOykgCiAgICAgIGZvcih1aW50IGogPSBULm0oKTsgai0tOykgCgltXyhULmluZGV4KGkpLCBU
LmluZGV4KGopKSArPSBBKGksIGopOwogIH0JCiAgZGVsZXRlIHNjOwp9Cgp0ZW1wbGF0ZTxjbGFz
cyBGPgp2b2lkIG9wX0xvY2FsPEY+OjpvcGVyYXRvcigpKGNvbnN0IGZuY19GdW5jdGlvbjxGPiYg
Zm5jWSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbmNfRnVuY3Rpb248Rj4mIGZuY1gpIHsKICBjb25zdCBmbmNfVmVjdG9yPEY+KiBmbmNZQTsK
ICBpZiAoKGZuY1lBID0gZHluYW1pY19jYXN0PGNvbnN0IGZuY19WZWN0b3I8Rj4qPigmZm5jWSkp
KSB7CiAgICBmbmNfVmVjdG9yPEY+KiBmbmNYQTsKICAgIGlmICgoZm5jWEEgPSBkeW5hbWljX2Nh
c3Q8Zm5jX1ZlY3RvcjxGPio+KCZmbmNYKSkpIHsKICAgICAgKCp0aGlzKSgqZm5jWUEsICpmbmNY
QSk7IHJldHVybjsgCiAgICB9CiAgfQoKICBjZXJyIDw8ICdbJyA8PCAgIi4uL29wZXJhdG9yL29w
T3BlcmF0b3IudCIgPDwgIiwgbGluZSAiIDw8IDMyMDsKICBjZXJyIDw8ICJdIG9wX0xvY2FsOjpv
cGVyYXRvcigpIDogdW5rbm93biB0eXBlIG9mIGZ1bmN0aW9uXG4iOwogIGV4aXQoMSk7Cn0KCnRl
bXBsYXRlPGNsYXNzIEY+Cm9zdHJlYW0mIG9wX0xvY2FsPEY+OjppbmZvKG9zdHJlYW0mIG9zKSBj
b25zdCB7CgogIHJldHVybiBvcyA8PCAib3BfTG9jYWwoICIgPDwgbV8gPDwgIikiOwp9Cgp0ZW1w
bGF0ZTxjbGFzcyBGPgp2b2lkIG9wX0xvY2FsPEY+Ojp3cml0ZShjaGFyKiBmbmFtZSkgY29uc3Qg
ewoKICBvZnN0cmVhbSBvZnMoZm5hbWUpOwogIG1fLndyaXRlKG9mcyk7Cn0KCgoKCgoKIyA1NTkg
Ii4uL29wZXJhdG9yL29wT3BlcmF0b3IuaCIgMgoKCgojIDE0ICJsaW5lbC5jYyIgMgoKIyAxICJs
aW5lbFNwYWNlLmgiIDEKIAoKCgoKCgojIDEgIi4uL2hwL2hwRWxlbWVudHMuaCIgMQogCgoKCgoK
CgoKCgoKCgoKIyAxICIuLi9ocC9ocEVsZW1lbnQuaCIgMQogCgoKCgoKCgoKCgogCgp0eXBlZGVm
IHZvaWQgKCpocF9TTWFwKShjb25zdCBzcGNfVENvbHVtbjxyZWFsPiYsIHNwY19UQ29sdW1uPHJl
YWw+JiwgdWludCk7CgogCgogCgoKCnRlbXBsYXRlPGNsYXNzIEY+CmNsYXNzIGhwX0hQMmRYWFgg
OiBwdWJsaWMgc3BjX0VsZW1lbnQ8Rj4gewoKIHB1YmxpYzoKICAgCgoKCiAgaW5saW5lIGhwX0hQ
MmRYWFgodWludCBwKTsKCiAgIAogIGlubGluZSB1c2hvcnQgcCgpIGNvbnN0OwoKICAgCgoKICB2
aXJ0dWFsIGNvbnN0IGdlb19Db25uZWN0b3IyJiBzdXBwb3J0KCkgY29uc3QgPSAwOwoKIHByaXZh
dGU6CiAgIAogIHVzaG9ydCBwXzsKfTsKCnRlbXBsYXRlPGNsYXNzIEY+CmlubGluZSBocF9IUDJk
WFhYPEY+OjpocF9IUDJkWFhYKHVpbnQgcCkgewogIHBfID0gcDsKfQoKdGVtcGxhdGU8Y2xhc3Mg
Rj4KaW5saW5lIHVzaG9ydCBocF9IUDJkWFhYPEY+OjpwKCkgY29uc3QgewogIHJldHVybiBwXzsK
fQoKCiMgMTYgIi4uL2hwL2hwRWxlbWVudHMuaCIgMgoKIyAxICIuLi9ocC9ocEhQMmQwMDAuaCIg
MQogCgoKCgoKCgoKIAoKIAoKCgoKCgoKY2xhc3MgaHBfSFAyZDAwMCA6IHB1YmxpYyBocF9IUDJk
WFhYPHJlYWw+IHsKCnB1YmxpYzoKICBzdGF0aWMgdm9pZCBTMChjb25zdCBzcGNfVENvbHVtbjxy
ZWFsPiYgc3JjLCBzcGNfVENvbHVtbjxyZWFsPiYgZHN0LCB1aW50IHApOwogIHN0YXRpYyB2b2lk
IFMxKGNvbnN0IHNwY19UQ29sdW1uPHJlYWw+JiBzcmMsIHNwY19UQ29sdW1uPHJlYWw+JiBkc3Qs
IHVpbnQgcCk7CiAgc3RhdGljIHZvaWQgUzIoY29uc3Qgc3BjX1RDb2x1bW48cmVhbD4mIHNyYywg
c3BjX1RDb2x1bW48cmVhbD4mIGRzdCwgdWludCBwKTsKICBzdGF0aWMgdm9pZCBTMyhjb25zdCBz
cGNfVENvbHVtbjxyZWFsPiYgc3JjLCBzcGNfVENvbHVtbjxyZWFsPiYgZHN0LCB1aW50IHApOwog
IHN0YXRpYyBpbmxpbmUgaHBfU01hcCBTKHVpbnQgaSk7ICAKCiAgIAoKCgoKCgogIGlubGluZSBo
cF9IUDJkMDAwKGNvbnN0IGdlb19UcmlhbmdsZTJkJiBjZWxsLCB1aW50IHAsIHNwY19UQ29sdW1u
PHJlYWw+KiBUMCwKCQkgICAgc3BjX1RDb2x1bW48cmVhbD4qIFQxKTsKCiAgIAogIG9zdHJlYW0m
IGluZm8ob3N0cmVhbSYgb3MpIGNvbnN0OwoKICAgCgogIGlubGluZSBjb25zdCBnZW9fVHJpYW5n
bGUmIHN1cHBvcnQoKSBjb25zdDsKCiAgIAogIGlubGluZSBjb25zdCBzcGNfVDxyZWFsPiYgVCgp
IGNvbnN0OwoKICAgCgoKCgoKCgogIHZvaWQgZXZhbHVhdGUocmVhbCB4aSwgcmVhbCBldGEsIHJl
YWwgc2hwZm5jW10pIGNvbnN0OwoKICAgCgoKCiAgUmVhbDJkIHZlcnRleCh1aW50IGkpIGNvbnN0
OwoKcHJpdmF0ZToKICAgCgoKICBzdGF0aWMgaHBfU01hcCBTX1s0XTsgIAoKICAgCiAgc3RhdGlj
IGNvbnN0IHVpbnQgcG1heF8gPSA1OwoKICAgCiAgY29uc3QgZ2VvX1RyaWFuZ2xlMmQmIGNlbGxf
OwoKICAgCiAgc3BjX1RNYXRyaXg8cmVhbD4gICAgIFRfOwp9OwoKaW5saW5lIGhwX1NNYXAgaHBf
SFAyZDAwMDo6Uyh1aW50IGkpIHsgCiAgcmV0dXJuIGkgPCA0ID8gU19baV0gOiBfX251bGwgOwp9
CgpocF9IUDJkMDAwOjpocF9IUDJkMDAwKGNvbnN0IGdlb19UcmlhbmdsZTJkICZjZWxsLCB1aW50
IHAsIAoJCSAgICAgICBzcGNfVENvbHVtbjxyZWFsPiogVDAsIHNwY19UQ29sdW1uPHJlYWw+KiBU
MSkgOgogIGhwX0hQMmRYWFg8cmVhbD4ocCA8IHBtYXhfID8gcCA6IHBtYXhfKSwgY2VsbF8oY2Vs
bCksIFRfKFQxKSB7CgogIGlmIChUMCAhPSBfX251bGwgKSBUXy5hcHBlbmQoVDApOwp9Cgppbmxp
bmUgY29uc3Qgc3BjX1Q8cmVhbD4mIGhwX0hQMmQwMDA6OlQoKSBjb25zdCB7IAogIHJldHVybiBU
XzsgCn0KCmlubGluZSBjb25zdCBnZW9fVHJpYW5nbGUmIGhwX0hQMmQwMDA6OnN1cHBvcnQoKSBj
b25zdCB7CiAgcmV0dXJuIGNlbGxfLmNvbm5lY3RvcigpOwp9CgoKIyAxNyAiLi4vaHAvaHBFbGVt
ZW50cy5oIiAyCgojIDEgIi4uL2hwL2hwSFAyZDAwMS5oIiAxCiAKCgoKCgoKCgogCgogCgoKCgoK
CmNsYXNzIGhwX0hQMmQwMDEgOiBwdWJsaWMgaHBfSFAyZFhYWDxyZWFsPiB7CgpwdWJsaWM6CiAg
c3RhdGljIHZvaWQgUzAoY29uc3Qgc3BjX1RDb2x1bW48cmVhbD4mIHNyYywgc3BjX1RDb2x1bW48
cmVhbD4mIGRzdCwgdWludCBwKTsKICBzdGF0aWMgdm9pZCBTMShjb25zdCBzcGNfVENvbHVtbjxy
ZWFsPiYgc3JjLCBzcGNfVENvbHVtbjxyZWFsPiYgZHN0LCB1aW50IHApOwogIHN0YXRpYyB2b2lk
IFMyKGNvbnN0IHNwY19UQ29sdW1uPHJlYWw+JiBzcmMsIHNwY19UQ29sdW1uPHJlYWw+JiBkc3Qs
IHVpbnQgcCk7CiAgc3RhdGljIHZvaWQgUzMoY29uc3Qgc3BjX1RDb2x1bW48cmVhbD4mIHNyYywg
c3BjX1RDb2x1bW48cmVhbD4mIGRzdCwgdWludCBwKTsKCiAgIAogIHN0YXRpYyBpbmxpbmUgaHBf
U01hcCBTKHVpbnQgaSk7ICAKCiAgIAoKCgoKCgogIGlubGluZSBocF9IUDJkMDAxKGNvbnN0IGdl
b19RdWFkMmQmIGNlbGwsIHVpbnQgcCwgc3BjX1RDb2x1bW48cmVhbD4qIFQwLAoJCSAgICBzcGNf
VENvbHVtbjxyZWFsPiogVDEpOwoKICAgCiAgdmlydHVhbCBvc3RyZWFtJiBpbmZvKG9zdHJlYW0m
IG9zKSBjb25zdDsKCiAgIAoKCiAgaW5saW5lIGNvbnN0IGdlb19RdWFkJiBzdXBwb3J0KCkgY29u
c3Q7CgogICAKICBpbmxpbmUgY29uc3Qgc3BjX1Q8cmVhbD4mIFQoKSBjb25zdDsKCiAgIAoKCgoK
CgoKICB2b2lkIGV2YWx1YXRlKHJlYWwgeGksIHJlYWwgZXRhLCByZWFsIHZhbFtdKSBjb25zdDsK
CiAgIAoKCgoKCgoKCiAgdm9pZCBldmFsdWF0ZUQocmVhbCB4aSwgcmVhbCBldGEsIFJlYWwyZCB2
YWxbXSkgY29uc3Q7CgogICAKCgoKICBSZWFsMmQgdmVydGV4KHVpbnQgaSkgY29uc3Q7Cgpwcm90
ZWN0ZWQ6CiAgIAoKCiAgc3RhdGljIGhwX1NNYXAgU19bNF07CgogICAKICBjb25zdCBnZW9fUXVh
ZDJkJiBjZWxsXzsKCiAgIAogIHNwY19UTWF0cml4PHJlYWw+IFRfOwoKcHJpdmF0ZToKICAgCiAg
c3RhdGljIGNvbnN0IHVpbnQgcG1heF8gPSAxNTsKfTsKCmlubGluZSBocF9TTWFwIGhwX0hQMmQw
MDE6OlModWludCBpKSB7IAogIHJldHVybiBpIDwgNCA/IFNfW2ldIDogX19udWxsIDsKfQoKaHBf
SFAyZDAwMTo6aHBfSFAyZDAwMShjb25zdCBnZW9fUXVhZDJkJiBjZWxsLCB1aW50IHAsIAoJCSAg
ICAgICBzcGNfVENvbHVtbjxyZWFsPiogVDAsIHNwY19UQ29sdW1uPHJlYWw+KiBUMSkgOgogIGhw
X0hQMmRYWFg8cmVhbD4ocCA8IHBtYXhfID8gcCA6IHBtYXhfKSwgY2VsbF8oY2VsbCksIFRfKFQx
KSB7CgogIGlmIChUMCAhPSBfX251bGwgKSBUXy5hcHBlbmQoVDApOwp9CgppbmxpbmUgY29uc3Qg
c3BjX1Q8cmVhbD4mIGhwX0hQMmQwMDE6OlQoKSBjb25zdCB7IAogIHJldHVybiBUXzsgCn0KCmlu
bGluZSBjb25zdCBnZW9fUXVhZCYgaHBfSFAyZDAwMTo6c3VwcG9ydCgpIGNvbnN0IHsKICByZXR1
cm4gY2VsbF8uY29ubmVjdG9yKCk7Cn0KCgojIDE4ICIuLi9ocC9ocEVsZW1lbnRzLmgiIDIKCiAK
CgoKIyA4ICJsaW5lbFNwYWNlLmgiIDIKCiMgMSAibGluZWxCb3VuZGFyeS5oIiAxCiAKCgoKCgoK
CgojIDEgInRieEJvdW5kYXJ5Mi5oIiAxCiAKCgoKCgoKCiMgMSAiLi4vdG9vbGJveC90YnhCb3Vu
ZGFyeS5oIiAxCiAKCgoKCgoKCiMgMSAiLi4vdG9vbGJveC90YnhGb3JtdWxhLmgiIDEKIAoKCgoK
CgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0cmluZyIgMSAzCiAKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAx
IDMKIAogCgogCiAKIAogCiAKCiAKIAogCiAKCiAKIAogCgogCiAKIAogCiAKCiAKIAoKCgoKCiNw
cmFnbWEgaW50ZXJmYWNlCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4y
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3N0ZGRlZiIgMSAzCiAKIAoKCgojIDEgIi91c3Iv
bGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQy
ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMK
CiMgNiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL2NzdGRkZWYiIDIgMwoKCiMgMzUgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51
eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMiAzCgoj
IDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGQvc3RyYWl0cy5oIiAxIDMKIAogCgogCiAKIAogCiAKCiAKIAogCiAKCiAKIAog
CgogCiAKIAogCiAKCiAKIAoKCgoKCiAKI3ByYWdtYSBpbnRlcmZhY2UgInN0ZC9zdHJhaXRzLmgi
CgoKCgpleHRlcm4gIkMrKyIgewp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQ+CnN0cnVjdCBzdHJpbmdf
Y2hhcl90cmFpdHMgewogIHR5cGVkZWYgY2hhclQgY2hhcl90eXBlOyAgCgogICAKCiAgc3RhdGlj
IHZvaWQgYXNzaWduIChjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyBj
MSA9IGMyOyB9CiAgc3RhdGljIGJvb2wgZXEgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNo
YXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEgPT0gYzIpOyB9CiAgc3RhdGljIGJvb2wgbmUg
KGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAh
KGMxID09IGMyKTsgfQogIHN0YXRpYyBib29sIGx0IChjb25zdCBjaGFyX3R5cGUmIGMxLCBjb25z
dCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxIDwgYzIpOyB9CiAgc3RhdGljIGNoYXJf
dHlwZSBlb3MgKCkgeyByZXR1cm4gY2hhcl90eXBlKCk7IH0gIAogIHN0YXRpYyBib29sIGlzX2Rl
bChjaGFyX3R5cGUgYSkgeyByZXR1cm4gMDsgfQogICAKICAKICAgCgogIHN0YXRpYyBpbnQgY29t
cGFyZSAoY29uc3QgY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4p
CiAgICB7CiAgICAgIHNpemVfdCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQoJaWYg
KG5lIChzMVtpXSwgczJbaV0pKQoJICByZXR1cm4gbHQgKHMxW2ldLCBzMltpXSkgPyAtMSA6IDE7
CgogICAgICByZXR1cm4gMDsKICAgIH0KICAgIAogIHN0YXRpYyBzaXplX3QgbGVuZ3RoIChjb25z
dCBjaGFyX3R5cGUqIHMpCiAgICB7CiAgICAgIHNpemVfdCBsID0gMDsKICAgICAgd2hpbGUgKG5l
ICgqcysrLCBlb3MgKCkpKQoJKytsOwogICAgICByZXR1cm4gbDsKICAgIH0KCiAgc3RhdGljIGNo
YXJfdHlwZSogY29weSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90
IG4pCiAgICB7CiAgICAgIGZvciAoOyBuLS07ICkKCWFzc2lnbiAoczFbbl0sIHMyW25dKTsKICAg
ICAgcmV0dXJuIHMxOwogICAgfQoKICBzdGF0aWMgY2hhcl90eXBlKiBtb3ZlIChjaGFyX3R5cGUq
IHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAgIHsKICAgICAgY2hhcl90eXBl
IGFbbl07CiAgICAgIHNpemVfdCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQoJYXNz
aWduIChhW2ldLCBzMltpXSk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCglhc3NpZ24g
KHMxW2ldLCBhW2ldKTsKICAgICAgcmV0dXJuIHMxOwogICAgfQoKICBzdGF0aWMgY2hhcl90eXBl
KiBzZXQgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSYgYywgc2l6ZV90IG4pCiAgICB7
CiAgICAgIGZvciAoOyBuLS07ICkKCWFzc2lnbiAoczFbbl0sIGMpOwogICAgICByZXR1cm4gczE7
CiAgICB9Cn07CgpjbGFzcyBpc3RyZWFtOwpjbGFzcyBvc3RyZWFtOwojIDEgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9jY3R5cGUi
IDEgMwogCiAKCgoKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzCiAKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCgoKCgoKCmV4dGVybiAiQyIgeyAKCgogCgoKCgoKCgoKCgoKCgoKZW51bQp7CiAg
X0lTdXBwZXIgPSAoKCAwICkgPCA4ID8gKCgxIDw8ICggMCApKSA8PCA4KSA6ICgoMSA8PCAoIDAg
KSkgPj4gOCkpICwJIAogIF9JU2xvd2VyID0gKCggMSApIDwgOCA/ICgoMSA8PCAoIDEgKSkgPDwg
OCkgOiAoKDEgPDwgKCAxICkpID4+IDgpKSAsCSAKICBfSVNhbHBoYSA9ICgoIDIgKSA8IDggPyAo
KDEgPDwgKCAyICkpIDw8IDgpIDogKCgxIDw8ICggMiApKSA+PiA4KSkgLAkgCiAgX0lTZGlnaXQg
PSAoKCAzICkgPCA4ID8gKCgxIDw8ICggMyApKSA8PCA4KSA6ICgoMSA8PCAoIDMgKSkgPj4gOCkp
ICwJIAogIF9JU3hkaWdpdCA9ICgoIDQgKSA8IDggPyAoKDEgPDwgKCA0ICkpIDw8IDgpIDogKCgx
IDw8ICggNCApKSA+PiA4KSkgLAkgCiAgX0lTc3BhY2UgPSAoKCA1ICkgPCA4ID8gKCgxIDw8ICgg
NSApKSA8PCA4KSA6ICgoMSA8PCAoIDUgKSkgPj4gOCkpICwJIAogIF9JU3ByaW50ID0gKCggNiAp
IDwgOCA/ICgoMSA8PCAoIDYgKSkgPDwgOCkgOiAoKDEgPDwgKCA2ICkpID4+IDgpKSAsCSAKICBf
SVNncmFwaCA9ICgoIDcgKSA8IDggPyAoKDEgPDwgKCA3ICkpIDw8IDgpIDogKCgxIDw8ICggNyAp
KSA+PiA4KSkgLAkgCiAgX0lTYmxhbmsgPSAoKCA4ICkgPCA4ID8gKCgxIDw8ICggOCApKSA8PCA4
KSA6ICgoMSA8PCAoIDggKSkgPj4gOCkpICwJIAogIF9JU2NudHJsID0gKCggOSApIDwgOCA/ICgo
MSA8PCAoIDkgKSkgPDwgOCkgOiAoKDEgPDwgKCA5ICkpID4+IDgpKSAsCSAKICBfSVNwdW5jdCA9
ICgoIDEwICkgPCA4ID8gKCgxIDw8ICggMTAgKSkgPDwgOCkgOiAoKDEgPDwgKCAxMCApKSA+PiA4
KSkgLAkgCiAgX0lTYWxudW0gPSAoKCAxMSApIDwgOCA/ICgoMSA8PCAoIDExICkpIDw8IDgpIDog
KCgxIDw8ICggMTEgKSkgPj4gOCkpIAkgCn07CgoKIAoKCgoKCgoKCgoKZXh0ZXJuIF9fY29uc3Qg
dW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CSAKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90
ICpfX2N0eXBlX3RvbG93ZXI7ICAKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3Rv
dXBwZXI7ICAKCgoKCgoKCgoKIAoKCgpleHRlcm4gaW50ICBpc2FsbnVtICAoaW50KSB0aHJvdyAo
KSAgOwpleHRlcm4gaW50ICBpc2FscGhhICAoaW50KSB0aHJvdyAoKSAgOwpleHRlcm4gaW50ICBp
c2NudHJsICAoaW50KSB0aHJvdyAoKSAgOwpleHRlcm4gaW50ICBpc2RpZ2l0ICAoaW50KSB0aHJv
dyAoKSAgOwpleHRlcm4gaW50ICBpc2xvd2VyICAoaW50KSB0aHJvdyAoKSAgOwpleHRlcm4gaW50
ICBpc2dyYXBoICAoaW50KSB0aHJvdyAoKSAgOwpleHRlcm4gaW50ICBpc3ByaW50ICAoaW50KSB0
aHJvdyAoKSAgOwpleHRlcm4gaW50ICBpc3B1bmN0ICAoaW50KSB0aHJvdyAoKSAgOwpleHRlcm4g
aW50ICBpc3NwYWNlICAoaW50KSB0aHJvdyAoKSAgOwpleHRlcm4gaW50ICBpc3VwcGVyICAoaW50
KSB0aHJvdyAoKSAgOwpleHRlcm4gaW50ICBpc3hkaWdpdCAgKGludCkgdGhyb3cgKCkgIDsKCgoK
CgoKIApleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGlu
dCB0b3VwcGVyIChpbnQgX19jKSB0aHJvdyAoKSA7CgoKCgogCgpleHRlcm4gaW50IGlzYXNjaWkg
KGludCBfX2MpIHRocm93ICgpIDsKCiAKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50IF9fYykgdGhy
b3cgKCkgOwoKIAoKZXh0ZXJuIGludCAgX3RvdXBwZXIgIChpbnQpIHRocm93ICgpICA7CmV4dGVy
biBpbnQgIF90b2xvd2VyICAoaW50KSB0aHJvdyAoKSAgOwoKCiAKCiMgMTQ4ICIvdXNyL2luY2x1
ZGUvY3R5cGUuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgojIDE3OSAiL3Vzci9pbmNsdWRlL2N0eXBl
LmgiIDMKCgoKCgoKCgoKCgoKCgoKCgoKIyAyNzUgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCgoK
fSAKCgojIDYgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9jY3R5cGUiIDIgMwoKCiMgMTA1ICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
bGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMiAz
CgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9jc3RyaW5nIiAxIDMKIAogCgoKCgoKCiMgOTQgIi91c3IvbGliL2djYy1saWIv
aTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9jc3RyaW5nIiAzCgoK
CiMgMTA2ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMiAzCgoKc3RydWN0IHN0cmluZ19jaGFyX3RyYWl0
cyA8Y2hhcj4gewogIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CgogIHN0YXRpYyB2b2lkIGFzc2ln
biAoY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgYzEgPSBjMjsgfQog
IHN0YXRpYyBib29sIGVxIChjb25zdCBjaGFyX3R5cGUgJiBjMSwgY29uc3QgY2hhcl90eXBlJiBj
MikKICAgIHsgcmV0dXJuIChjMSA9PSBjMik7IH0KICBzdGF0aWMgYm9vbCBuZSAoY29uc3QgY2hh
cl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSAhPSBjMik7
IH0KICBzdGF0aWMgYm9vbCBsdCAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBl
JiBjMikKICAgIHsgcmV0dXJuIChjMSA8IGMyKTsgfQogIHN0YXRpYyBjaGFyX3R5cGUgZW9zICgp
IHsgcmV0dXJuIDA7IH0KICBzdGF0aWMgYm9vbCBpc19kZWwoY2hhcl90eXBlIGEpIHsgcmV0dXJu
IChfX2N0eXBlX2JbKGludCkgKCAoIGEgKSApXSAmICh1bnNpZ25lZCBzaG9ydCBpbnQpICAgX0lT
c3BhY2UgKSAgOyB9CgogIHN0YXRpYyBpbnQgY29tcGFyZSAoY29uc3QgY2hhcl90eXBlKiBzMSwg
Y29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7IHJldHVybiBtZW1jbXAgKHMxLCBz
Miwgbik7IH0KICBzdGF0aWMgc2l6ZV90IGxlbmd0aCAoY29uc3QgY2hhcl90eXBlKiBzKQogICAg
eyByZXR1cm4gc3RybGVuIChzKTsgfQogIHN0YXRpYyBjaGFyX3R5cGUqIGNvcHkgKGNoYXJfdHlw
ZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgeyByZXR1cm4gKGNoYXJf
dHlwZSopIG1lbWNweSAoczEsIHMyLCBuKTsgfQogIHN0YXRpYyBjaGFyX3R5cGUqIG1vdmUgKGNo
YXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgeyByZXR1cm4g
KGNoYXJfdHlwZSopIG1lbW1vdmUgKHMxLCBzMiwgbik7IH0KICBzdGF0aWMgY2hhcl90eXBlKiBz
ZXQgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSYgYywgc2l6ZV90IG4pCiAgICB7IHJl
dHVybiAoY2hhcl90eXBlKikgbWVtc2V0IChzMSwgYywgbik7IH0KfTsKCiMgMTU5ICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rk
L3N0cmFpdHMuaCIgMwoKfSAgCgojIDM2ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45
NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKCiAKIyAx
ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvYWxsb2MuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNDAgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9hbGxv
Yy5oIiAzCgoKCgogCiAKIAojIDM5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4y
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKCmV4dGVybiAi
QysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07CgojIDEgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0MiAiL3Vzci9saWIv
Z2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgojIDMyICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
aXRlcmF0b3IiIDIgMwoKCgoKCgoKCgoKIAogCiAKIyA0NCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAy
IDMKCgoKCmV4dGVybiB2b2lkIF9fb3V0X29mX3JhbmdlIChjb25zdCBjaGFyICopOwpleHRlcm4g
dm9pZCBfX2xlbmd0aF9lcnJvciAoY29uc3QgY2hhciAqKTsKCgoKCgoKCgoKCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cyA9IHN0cmluZ19jaGFyX3RyYWl0czxjaGFyVD4s
CgkgIGNsYXNzIEFsbG9jYXRvciA9IGFsbG9jID4KY2xhc3MgYmFzaWNfc3RyaW5nCnsKcHJpdmF0
ZToKICBzdHJ1Y3QgUmVwIHsKICAgIHNpemVfdCBsZW4sIHJlcywgcmVmOwogICAgYm9vbCBzZWxm
aXNoOwoKICAgIGNoYXJUKiBkYXRhICgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhclQg
Kj4odGhpcyArIDEpOyB9CiAgICBjaGFyVCYgb3BlcmF0b3JbXSAoc2l6ZV90IHMpIHsgcmV0dXJu
IGRhdGEgKCkgW3NdOyB9CiAgICBjaGFyVCogZ3JhYiAoKSB7IGlmIChzZWxmaXNoKSByZXR1cm4g
Y2xvbmUgKCk7ICsrcmVmOyByZXR1cm4gZGF0YSAoKTsgfQojIDEwOCAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmlu
Zy5oIiAzCgogICAgdm9pZCByZWxlYXNlICgpIHsgaWYgKC0tcmVmID09IDApIGRlbGV0ZSB0aGlz
OyB9CgoKICAgIGlubGluZSBzdGF0aWMgdm9pZCAqIG9wZXJhdG9yIG5ldyAoc2l6ZV90LCBzaXpl
X3QpOwogICAgaW5saW5lIHN0YXRpYyB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKTsKICAg
IGlubGluZSBzdGF0aWMgUmVwKiBjcmVhdGUgKHNpemVfdCk7CiAgICBjaGFyVCogY2xvbmUgKCk7
CgogICAgaW5saW5lIHZvaWQgY29weSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwog
ICAgaW5saW5lIHZvaWQgbW92ZSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAg
aW5saW5lIHZvaWQgc2V0ICAoc2l6ZV90LCBjb25zdCBjaGFyVCwgICBzaXplX3QpOwoKICAgIGlu
bGluZSBzdGF0aWMgYm9vbCBleGNlc3Nfc2xvcCAoc2l6ZV90LCBzaXplX3QpOwogICAgaW5saW5l
IHN0YXRpYyBzaXplX3QgZnJvYl9zaXplIChzaXplX3QpOwoKICBwcml2YXRlOgogICAgUmVwICZv
cGVyYXRvcj0gKGNvbnN0IFJlcCAmKTsKICB9OwoKcHVibGljOgogCiAgdHlwZWRlZgkgICB0cmFp
dHMJCXRyYWl0c190eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzOjpjaGFyX3R5cGUJdmFs
dWVfdHlwZTsKICB0eXBlZGVmCSAgIEFsbG9jYXRvcgkJYWxsb2NhdG9yX3R5cGU7CgogIHR5cGVk
ZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7
CiAgdHlwZWRlZiBjaGFyVCYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgY2hhclQmIGNvbnN0
X3JlZmVyZW5jZTsKICB0eXBlZGVmIGNoYXJUKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgY2hh
clQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBwb2ludGVyIGl0ZXJhdG9yOwogIHR5cGVkZWYg
Y29uc3RfcG9pbnRlciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRv
cjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRv
cjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICBzdGF0aWMgY29uc3Qg
c2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKCnByaXZhdGU6CiAg
UmVwICpyZXAgKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZXAgKj4oZGF0KSAt
IDE7IH0KICB2b2lkIHJlcHVwIChSZXAgKnApIHsgcmVwICgpLT5yZWxlYXNlICgpOyBkYXQgPSBw
LT5kYXRhICgpOyB9CgpwdWJsaWM6CiAgY29uc3QgY2hhclQqIGRhdGEgKCkgY29uc3QKICAgIHsg
cmV0dXJuIHJlcCAoKS0+ZGF0YSgpOyB9CiAgc2l6ZV90eXBlIGxlbmd0aCAoKSBjb25zdAogICAg
eyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgc2l6ZSAoKSBjb25zdAogICAgeyBy
ZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgY2FwYWNpdHkgKCkgY29uc3QKICAgIHsg
cmV0dXJuIHJlcCAoKS0+cmVzOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplICgpIGNvbnN0CiAgICB7
IHJldHVybiAobnBvcyAtIDEpL3NpemVvZiAoY2hhclQpOyB9CQkgCiAgYm9vbCBlbXB0eSAoKSBj
b25zdAogICAgeyByZXR1cm4gc2l6ZSAoKSA9PSAwOyB9CgogCiAgYmFzaWNfc3RyaW5nJiBvcGVy
YXRvcj0gKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyKQogICAgewogICAgICBpZiAoJnN0ciAhPSB0
aGlzKSB7IHJlcCAoKS0+cmVsZWFzZSAoKTsgZGF0ID0gc3RyLnJlcCAoKS0+Z3JhYiAoKTsgfQog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIGV4cGxpY2l0IGJhc2ljX3N0cmluZyAoKTogZGF0
IChuaWxSZXAuZ3JhYiAoKSkgeyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBiYXNpY19zdHJpbmcm
IF9zdHIpOiBkYXQgKF9zdHIucmVwICgpLT5ncmFiICgpKSB7IH0KICBiYXNpY19zdHJpbmcgKGNv
bnN0IGJhc2ljX3N0cmluZyYgX3N0ciwgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4gPSBucG9z
KQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAoX3N0ciwgcG9zLCBuKTsgfQog
IGJhc2ljX3N0cmluZyAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgOiBkYXQgKG5p
bFJlcC5ncmFiICgpKSB7IGFzc2lnbiAocywgbik7IH0KICBiYXNpY19zdHJpbmcgKGNvbnN0IGNo
YXJUKiBzKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAocyk7IH0KICBiYXNp
Y19zdHJpbmcgKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgp
KSB7IGFzc2lnbiAobiwgYyk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAg
IGJhc2ljX3N0cmluZyhJbnB1dEl0ZXJhdG9yIF9fYmVnaW4sIElucHV0SXRlcmF0b3IgX19lbmQp
CgoKCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChfX2JlZ2luLCBfX2VuZCk7
IH0KCiAgfmJhc2ljX3N0cmluZyAoKQogICAgeyByZXAgKCktPnJlbGVhc2UgKCk7IH0KCiAgdm9p
ZCBzd2FwIChiYXNpY19zdHJpbmcgJnMpIHsgY2hhclQgKmQgPSBkYXQ7IGRhdCA9IHMuZGF0OyBz
LmRhdCA9IGQ7IH0KCiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKGNvbnN0IGJhc2ljX3N0cmluZyYg
X3N0ciwgc2l6ZV90eXBlIHBvcyA9IDAsCgkJCXNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0
dXJuIHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgX3N0ciwgcG9zLCBuKTsgfQogIGJhc2ljX3N0cmlu
ZyYgYXBwZW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICB7IHJldHVybiByZXBs
YWNlIChsZW5ndGggKCksIDAsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKGNvbnN0
IGNoYXJUKiBzKQogICAgeyByZXR1cm4gYXBwZW5kIChzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9
CiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1
cm4gcmVwbGFjZSAobGVuZ3RoICgpLCAwLCBuLCBjKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBJbnB1
dEl0ZXJhdG9yPgogICAgYmFzaWNfc3RyaW5nJiBhcHBlbmQoSW5wdXRJdGVyYXRvciBmaXJzdCwg
SW5wdXRJdGVyYXRvciBsYXN0KQoKCgogICAgeyByZXR1cm4gcmVwbGFjZSAoaWVuZCAoKSwgaWVu
ZCAoKSwgZmlyc3QsIGxhc3QpOyB9CgogIGJhc2ljX3N0cmluZyYgYXNzaWduIChjb25zdCBiYXNp
Y19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsCgkJCXNpemVfdHlwZSBuID0gbnBvcykK
ICAgIHsgcmV0dXJuIHJlcGxhY2UgKDAsIG5wb3MsIHN0ciwgcG9zLCBuKTsgfQogIGJhc2ljX3N0
cmluZyYgYXNzaWduIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICB7IHJldHVybiBy
ZXBsYWNlICgwLCBucG9zLCBzLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgYXNzaWduIChjb25zdCBj
aGFyVCogcykKICAgIHsgcmV0dXJuIGFzc2lnbiAocywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQog
IGJhc2ljX3N0cmluZyYgYXNzaWduIChzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJu
IHJlcGxhY2UgKDAsIG5wb3MsIG4sIGMpOyB9CgogIHRlbXBsYXRlPGNsYXNzIElucHV0SXRlcmF0
b3I+CiAgICBiYXNpY19zdHJpbmcmIGFzc2lnbihJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0
ZXJhdG9yIGxhc3QpCgoKCiAgICB7IHJldHVybiByZXBsYWNlIChpYmVnaW4gKCksIGllbmQgKCks
IGZpcnN0LCBsYXN0KTsgfQoKICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yPSAoY29uc3QgY2hhclQq
IHMpCiAgICB7IHJldHVybiBhc3NpZ24gKHMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcj0g
KGNoYXJUIGMpCiAgICB7IHJldHVybiBhc3NpZ24gKDEsIGMpOyB9CgogIGJhc2ljX3N0cmluZyYg
b3BlcmF0b3IrPSAoY29uc3QgYmFzaWNfc3RyaW5nJiByaHMpCiAgICB7IHJldHVybiBhcHBlbmQg
KHJocyk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yKz0gKGNvbnN0IGNoYXJUKiBzKQogICAg
eyByZXR1cm4gYXBwZW5kIChzKTsgfQogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3IrPSAoY2hhclQg
YykKICAgIHsgcmV0dXJuIGFwcGVuZCAoMSwgYyk7IH0KCiAgYmFzaWNfc3RyaW5nJiBpbnNlcnQg
KHNpemVfdHlwZSBwb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwKCQkJc2l6ZV90eXBlIHBv
czIgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3MpCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MxLCAw
LCBzdHIsIHBvczIsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBpbnNlcnQgKHNpemVfdHlwZSBwb3Ms
IGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBvcywg
MCwgcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6ZV90eXBlIHBvcywgY29uc3Qg
Y2hhclQqIHMpCiAgICB7IHJldHVybiBpbnNlcnQgKHBvcywgcywgdHJhaXRzOjpsZW5ndGggKHMp
KTsgfQogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbiwg
Y2hhclQgYykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBvcywgMCwgbiwgYyk7IH0KICBpdGVyYXRv
ciBpbnNlcnQoaXRlcmF0b3IgcCwgY2hhclQgYykKICAgIHsgc2l6ZV90eXBlIF9fbyA9IHAgLSBp
YmVnaW4gKCk7CiAgICAgIGluc2VydCAocCAtIGliZWdpbiAoKSwgMSwgYyk7IHNlbGZpc2ggKCk7
CiAgICAgIHJldHVybiBpYmVnaW4gKCkgKyBfX287IH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0
b3IgcCwgc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHNpemVfdHlwZSBfX28gPSBwIC0gaWJl
Z2luICgpOwogICAgICBpbnNlcnQgKHAgLSBpYmVnaW4gKCksIG4sIGMpOyBzZWxmaXNoICgpOwog
ICAgICByZXR1cm4gaWJlZ2luICgpICsgX19vOyB9CgogIHRlbXBsYXRlPGNsYXNzIElucHV0SXRl
cmF0b3I+CiAgICB2b2lkIGluc2VydChpdGVyYXRvciBwLCBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJ
bnB1dEl0ZXJhdG9yIGxhc3QpCgoKCiAgICB7IHJlcGxhY2UgKHAsIHAsIGZpcnN0LCBsYXN0KTsg
fQoKICBiYXNpY19zdHJpbmcmIGVyYXNlIChzaXplX3R5cGUgcG9zID0gMCwgc2l6ZV90eXBlIG4g
PSBucG9zKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zLCBuLCAoc2l6ZV90eXBlKTAsIChjaGFy
VCkwKTsgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIHApCiAgICB7IHNpemVfdHlwZSBfX28g
PSBwIC0gYmVnaW4oKTsKICAgICAgcmVwbGFjZSAoX19vLCAxLCAoc2l6ZV90eXBlKTAsIChjaGFy
VCkwKTsgc2VsZmlzaCAoKTsKICAgICAgcmV0dXJuIGliZWdpbigpICsgX19vOyB9CiAgaXRlcmF0
b3IgZXJhc2UoaXRlcmF0b3IgZiwgaXRlcmF0b3IgbCkKICAgIHsgc2l6ZV90eXBlIF9fbyA9IGYg
LSBpYmVnaW4oKTsKICAgICAgcmVwbGFjZSAoX19vLCBsLWYsIChzaXplX3R5cGUpMCwgKGNoYXJU
KTApO3NlbGZpc2ggKCk7CiAgICAgIHJldHVybiBpYmVnaW4oKSArIF9fbzsgfQoKICBiYXNpY19z
dHJpbmcmIHJlcGxhY2UgKHNpemVfdHlwZSBwb3MxLCBzaXplX3R5cGUgbjEsIGNvbnN0IGJhc2lj
X3N0cmluZyYgc3RyLAoJCQkgc2l6ZV90eXBlIHBvczIgPSAwLCBzaXplX3R5cGUgbjIgPSBucG9z
KTsKICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwg
Y29uc3QgY2hhclQqIHMsCgkJCSBzaXplX3R5cGUgbjIpOwogIGJhc2ljX3N0cmluZyYgcmVwbGFj
ZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBjb25zdCBjaGFyVCogcykKICAgIHsgcmV0
dXJuIHJlcGxhY2UgKHBvcywgbjEsIHMsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBiYXNpY19z
dHJpbmcmIHJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgc2l6ZV90eXBlIG4y
LCBjaGFyVCBjKTsKICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVf
dHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zLCBuLCAxLCBjKTsgfQog
IGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLCBjb25zdCBi
YXNpY19zdHJpbmcmIHN0cikKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGkxIC0gaWJlZ2luICgpLCBp
MiAtIGkxLCBzdHIpOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChpdGVyYXRvciBpMSwgaXRl
cmF0b3IgaTIsIGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJuIHJlcGxh
Y2UgKGkxIC0gaWJlZ2luICgpLCBpMiAtIGkxLCBzLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgcmVw
bGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLCBjb25zdCBjaGFyVCogcykKICAgIHsgcmV0
dXJuIHJlcGxhY2UgKGkxIC0gaWJlZ2luICgpLCBpMiAtIGkxLCBzKTsgfQogIGJhc2ljX3N0cmlu
ZyYgcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLCBzaXplX3R5cGUgbiwgY2hhclQg
YykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGkxIC0gaWJlZ2luICgpLCBpMiAtIGkxLCBuLCBjKTsg
fQoKICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogICAgYmFzaWNfc3RyaW5nJiByZXBs
YWNlKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwKCQkJICBJbnB1dEl0ZXJhdG9yIGoxLCBJbnB1
dEl0ZXJhdG9yIGoyKTsKCgoKCgpwcml2YXRlOgogIHN0YXRpYyBjaGFyVCBlb3MgKCkgeyByZXR1
cm4gdHJhaXRzOjplb3MgKCk7IH0KICB2b2lkIHVuaXF1ZSAoKSB7IGlmIChyZXAgKCktPnJlZiA+
IDEpIGFsbG9jIChsZW5ndGggKCksIHRydWUpOyB9CiAgdm9pZCBzZWxmaXNoICgpIHsgdW5pcXVl
ICgpOyByZXAgKCktPnNlbGZpc2ggPSB0cnVlOyB9CgpwdWJsaWM6CiAgY2hhclQgb3BlcmF0b3Jb
XSAoc2l6ZV90eXBlIHBvcykgY29uc3QKICAgIHsKICAgICAgaWYgKHBvcyA9PSBsZW5ndGggKCkp
CglyZXR1cm4gZW9zICgpOwogICAgICByZXR1cm4gZGF0YSAoKVtwb3NdOwogICAgfQoKICByZWZl
cmVuY2Ugb3BlcmF0b3JbXSAoc2l6ZV90eXBlIHBvcykKICAgIHsgc2VsZmlzaCAoKTsgcmV0dXJu
ICgqcmVwICgpKVtwb3NdOyB9CgogIHJlZmVyZW5jZSBhdCAoc2l6ZV90eXBlIHBvcykKICAgIHsK
ICAgICAgZG8geyBpZiAoIHBvcyA+PSBsZW5ndGggKCkgKSBfX291dF9vZl9yYW5nZSAoInBvcyA+
PSBsZW5ndGggKCkiKTsgfSB3aGlsZSAoMCkgOwogICAgICByZXR1cm4gKCp0aGlzKVtwb3NdOwog
ICAgfQogIGNvbnN0X3JlZmVyZW5jZSBhdCAoc2l6ZV90eXBlIHBvcykgY29uc3QKICAgIHsKICAg
ICAgZG8geyBpZiAoIHBvcyA+PSBsZW5ndGggKCkgKSBfX291dF9vZl9yYW5nZSAoInBvcyA+PSBs
ZW5ndGggKCkiKTsgfSB3aGlsZSAoMCkgOwogICAgICByZXR1cm4gZGF0YSAoKVtwb3NdOwogICAg
fQoKcHJpdmF0ZToKICB2b2lkIHRlcm1pbmF0ZSAoKSBjb25zdAogICAgeyB0cmFpdHM6OmFzc2ln
biAoKCpyZXAgKCkpW2xlbmd0aCAoKV0sIGVvcyAoKSk7IH0KCnB1YmxpYzoKICBjb25zdCBjaGFy
VCogY19zdHIgKCkgY29uc3QKICAgIHsgY29uc3QgY2hhclQqIG51bGxfc3RyID0gIiI7IAogICAg
ICBpZiAobGVuZ3RoICgpID09IDApIHJldHVybiBudWxsX3N0cjsgdGVybWluYXRlICgpOyByZXR1
cm4gZGF0YSAoKTsgfQogIHZvaWQgcmVzaXplIChzaXplX3R5cGUgbiwgY2hhclQgYyk7CiAgdm9p
ZCByZXNpemUgKHNpemVfdHlwZSBuKQogICAgeyByZXNpemUgKG4sIGVvcyAoKSk7IH0KICB2b2lk
IHJlc2VydmUgKHNpemVfdHlwZSkgeyB9CgogIHNpemVfdHlwZSBjb3B5IChjaGFyVCogcywgc2l6
ZV90eXBlIG4sIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdDsKCiAgc2l6ZV90eXBlIGZpbmQgKGNv
bnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0
dXJuIGZpbmQgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBm
aW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0Owog
IHNpemVfdHlwZSBmaW5kIChjb25zdCBjaGFyVCogX3MsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25z
dAogICAgeyByZXR1cm4gZmluZCAoX3MsIHBvcywgdHJhaXRzOjpsZW5ndGggKF9zKSk7IH0KICBz
aXplX3R5cGUgZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0OwoKICBzaXpl
X3R5cGUgcmZpbmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gbnBv
cykgY29uc3QKICAgIHsgcmV0dXJuIHJmaW5kIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgo
KSk7IH0KICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBz
aXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIHJmaW5kIChjb25zdCBjaGFyVCogcywgc2l6
ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiByZmluZCAocywgcG9zLCB0cmFp
dHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIHJmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUg
cG9zID0gbnBvcykgY29uc3Q7CgogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mIChjb25zdCBiYXNp
Y19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5k
X2ZpcnN0X29mIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUg
ZmluZF9maXJzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBu
KSBjb25zdDsKICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVf
dHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9maXJzdF9vZiAocywgcG9zLCB0
cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YgKGNoYXJUIGMs
IHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZCAoYywgcG9zKTsgfQoK
ICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90
eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2xhc3Rfb2YgKHN0ci5kYXRh
KCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2xhc3Rfb2YgKGNvbnN0
IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBl
IGZpbmRfbGFzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25z
dAogICAgeyByZXR1cm4gZmluZF9sYXN0X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7
IH0KICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zID0gbnBv
cykgY29uc3QKICAgIHsgcmV0dXJuIHJmaW5kIChjLCBwb3MpOyB9CgogIHNpemVfdHlwZSBmaW5k
X2ZpcnN0X25vdF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAw
KSBjb25zdAogICAgeyByZXR1cm4gZmluZF9maXJzdF9ub3Rfb2YgKHN0ci5kYXRhKCksIHBvcywg
c3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgY2hh
clQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmlu
ZF9maXJzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QK
ICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfbm90X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChz
KSk7IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBw
b3MgPSAwKSBjb25zdDsKCiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0IGJhc2lj
X3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGZp
bmRfbGFzdF9ub3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVf
dHlwZSBmaW5kX2xhc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6
ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjb25zdCBjaGFy
VCogcywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2xhc3Rf
bm90X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgZmluZF9s
YXN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0OwoKICBiYXNp
Y19zdHJpbmcgc3Vic3RyIChzaXplX3R5cGUgcG9zID0gMCwgc2l6ZV90eXBlIG4gPSBucG9zKSBj
b25zdAogICAgeyByZXR1cm4gYmFzaWNfc3RyaW5nICgqdGhpcywgcG9zLCBuKTsgfQoKICBpbnQg
Y29tcGFyZSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwLCBzaXpl
X3R5cGUgbiA9IG5wb3MpIGNvbnN0OwogICAKICBpbnQgY29tcGFyZSAoY29uc3QgY2hhclQqIHMs
IHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBpbnQgY29tcGFyZSAoY29uc3Qg
Y2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gY29tcGFyZSAo
cywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CgogIGl0ZXJhdG9yIGJlZ2luICgpIHsgc2Vs
ZmlzaCAoKTsgcmV0dXJuICYoKnRoaXMpWzBdOyB9CiAgaXRlcmF0b3IgZW5kICgpIHsgc2VsZmlz
aCAoKTsgcmV0dXJuICYoKnRoaXMpW2xlbmd0aCAoKV07IH0KCnByaXZhdGU6CiAgaXRlcmF0b3Ig
aWJlZ2luICgpIGNvbnN0IHsgcmV0dXJuICYoKnJlcCAoKSlbMF07IH0KICBpdGVyYXRvciBpZW5k
ICgpIGNvbnN0IHsgcmV0dXJuICYoKnJlcCAoKSlbbGVuZ3RoICgpXTsgfQoKcHVibGljOgogIGNv
bnN0X2l0ZXJhdG9yIGJlZ2luICgpIGNvbnN0IHsgcmV0dXJuIGliZWdpbiAoKTsgfQogIGNvbnN0
X2l0ZXJhdG9yIGVuZCAoKSBjb25zdCB7IHJldHVybiBpZW5kICgpOyB9CgogIHJldmVyc2VfaXRl
cmF0b3IgICAgICAgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvciAoZW5kICgpKTsg
fQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNv
bnN0X3JldmVyc2VfaXRlcmF0b3IgKGVuZCAoKSk7IH0KICByZXZlcnNlX2l0ZXJhdG9yICAgICAg
IHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yIChiZWdpbiAoKSk7IH0KICBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9p
dGVyYXRvciAoYmVnaW4gKCkpOyB9Cgpwcml2YXRlOgogIHZvaWQgYWxsb2MgKHNpemVfdHlwZSBz
aXplLCBib29sIHNhdmUpOwogIHN0YXRpYyBzaXplX3R5cGUgX2ZpbmQgKGNvbnN0IGNoYXJUKiBw
dHIsIGNoYXJUIGMsIHNpemVfdHlwZSB4cG9zLCBzaXplX3R5cGUgbGVuKTsKICBpbmxpbmUgYm9v
bCBjaGVja19yZWFsbG9jIChzaXplX3R5cGUgcykgY29uc3Q7CgogIHN0YXRpYyBSZXAgbmlsUmVw
OwogIGNoYXJUICpkYXQ7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs
IGNsYXNzIEFsbG9jYXRvcj4gdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3I+CmJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh
aXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLCBJbnB1
dEl0ZXJhdG9yIGoxLCBJbnB1dEl0ZXJhdG9yIGoyKQoKCgoKCnsKICBjb25zdCBzaXplX3R5cGUg
bGVuID0gbGVuZ3RoICgpOwogIHNpemVfdHlwZSBwb3MgPSBpMSAtIGliZWdpbiAoKTsKICBzaXpl
X3R5cGUgbjEgPSBpMiAtIGkxOwogIHNpemVfdHlwZSBuMiA9IGoyIC0gajE7CgogIGRvIHsgaWYg
KCBwb3MgPiBsZW4gKSBfX291dF9vZl9yYW5nZSAoInBvcyA+IGxlbiIpOyB9IHdoaWxlICgwKSA7
CiAgaWYgKG4xID4gbGVuIC0gcG9zKQogICAgbjEgPSBsZW4gLSBwb3M7CiAgZG8geyBpZiAoIGxl
biAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiApIF9fbGVuZ3RoX2Vycm9yICgibGVuIC0gbjEgPiBt
YXhfc2l6ZSAoKSAtIG4yIik7IH0gd2hpbGUgKDApIDsKICBzaXplX3QgbmV3bGVuID0gbGVuIC0g
bjEgKyBuMjsKCiAgaWYgKGNoZWNrX3JlYWxsb2MgKG5ld2xlbikpCiAgICB7CiAgICAgIFJlcCAq
cCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwogICAgICBwLT5jb3B5ICgwLCBkYXRhICgpLCBwb3Mp
OwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9z
ICsgbjEpKTsKICAgICAgZm9yICg7IGoxICE9IGoyOyArK2oxLCArK3BvcykKCXRyYWl0czo6YXNz
aWduICgoKnApW3Bvc10sICpqMSk7CiAgICAgIHJlcHVwIChwKTsKICAgIH0KICBlbHNlCiAgICB7
CiAgICAgIHJlcCAoKS0+bW92ZSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0g
KHBvcyArIG4xKSk7CiAgICAgIGZvciAoOyBqMSAhPSBqMjsgKytqMSwgKytwb3MpCgl0cmFpdHM6
OmFzc2lnbiAoKCpyZXAgKCkpW3Bvc10sICpqMSk7CiAgICB9CiAgcmVwICgpLT5sZW4gPSBuZXds
ZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp
dHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPgpvcGVyYXRvcisgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPiYgbGhzLAoJICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+JiByaHMpCnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj4gX3N0ciAobGhzKTsKICBfc3RyLmFwcGVuZCAocmhzKTsKICByZXR1cm4gX3N0cjsKfQoKdGVt
cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5l
IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRvcisgKGNvbnN0
IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
PiYgcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IF9zdHIg
KGxocyk7CiAgX3N0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIF9zdHI7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19z
dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjaGFyVCBsaHMsIGNv
bnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IF9zdHIgKDEsIGxocyk7CiAgX3N0
ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIF9zdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwg
Y2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiBfc3RyIChsaHMpOwogIF9zdHIuYXBwZW5k
IChyaHMpOwogIHJldHVybiBfc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy
YWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+Cm9wZXJhdG9yKyAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+JiBsaHMsIGNoYXJUIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3RyLmFwcGVuZCAoMSwgcmhzKTsKICByZXR1
cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxs
b2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj09IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykg
PT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv
Y2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPT0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChy
aHMuY29tcGFyZSAobGhzKSA9PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0
cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PSAoY29uc3QgYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiBy
aHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID09IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVy
YXRvciE9IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgIT0gMCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+
CmlubGluZSBib29sCm9wZXJhdG9yIT0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0
cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29t
cGFyZSAocmhzKSAhPSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs
IGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8IChjb25zdCBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBh
cmUgKHJocykgPCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs
YXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8IChjb25zdCBjaGFyVCogbGhzLCBj
b25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJl
dHVybiAocmhzLmNvbXBhcmUgKGxocykgPiAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBj
bGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8IChjb25z
dCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hh
clQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPCAwKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wK
b3BlcmF0b3I+IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0
cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPCAw
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv
cj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNv
bXBhcmUgKHJocykgPiAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs
IGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PSAoY29uc3QgY2hhclQqIGxo
cywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsK
ICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpID49IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh
clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9
IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29u
c3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPD0gMCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGlu
ZSBib29sCm9wZXJhdG9yPj0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAo
bGhzKSA8PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz
IEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICByZXR1
cm4gKGxocy5jb21wYXJlIChyaHMpID49IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs
YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvciE9IChjb25z
dCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25z
dCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVy
biAobGhzLmNvbXBhcmUgKHJocykgIT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xh
c3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPiAoY29uc3Qg
YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCgkgICBjb25zdCBi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAo
bGhzLmNvbXBhcmUgKHJocykgPiAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0
cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PSAoY29uc3QgYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCgkgICAgY29uc3QgYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxo
cy5jb21wYXJlIChyaHMpIDw9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy
YWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj49IChjb25zdCBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhz
LmNvbXBhcmUgKHJocykgPj0gMCk7Cn0KCmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07CnRl
bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+IGlzdHJl
YW0mCm9wZXJhdG9yPj4gKGlzdHJlYW0mLCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj4mKTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs
bG9jYXRvcj4gb3N0cmVhbSYKb3BlcmF0b3I8PCAob3N0cmVhbSYsIGNvbnN0IGJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYpOwp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs
YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiBpc3RyZWFtJgpnZXRsaW5lIChpc3RyZWFtJiwg
YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiwgY2hhclQgZGVsaW0gPSAn
XG4nKTsKCn0gIAoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmNjIiAxIDMKIAogCgogCiAKIAogCiAK
CiAKIAogCiAKCiAKIAogCgogCiAKIAogCiAKCiAKIAoKZXh0ZXJuICJDKysiIHsKdGVtcGxhdGUg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQg
KiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6Cm9wZXJhdG9y
IG5ldyAoc2l6ZV90IHMsIHNpemVfdCBleHRyYSkKewogIHJldHVybiBBbGxvY2F0b3I6OmFsbG9j
YXRlKHMgKyBleHRyYSAqIHNpemVvZiAoY2hhclQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6OgpvcGVyYXRvciBkZWxldGUgKHZvaWQg
KiBwdHIpCnsKICBBbGxvY2F0b3I6OmRlYWxsb2NhdGUocHRyLCBzaXplb2YoUmVwKSArCgkJCXJl
aW50ZXJwcmV0X2Nhc3Q8UmVwICo+KHB0ciktPnJlcyAqCgkJCXNpemVvZiAoY2hhclQpKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5s
aW5lIHNpemVfdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6
CmZyb2Jfc2l6ZSAoc2l6ZV90IHMpCnsKICBzaXplX3QgaSA9IDE2OwogIHdoaWxlIChpIDwgcykg
aSAqPSAyOwogIHJldHVybiBpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+OjpSZXAgKgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46
OlJlcDo6CmNyZWF0ZSAoc2l6ZV90IGV4dHJhKQp7CiAgZXh0cmEgPSBmcm9iX3NpemUgKGV4dHJh
ICsgMSk7CiAgUmVwICpwID0gbmV3IChleHRyYSkgUmVwOwogIHAtPnJlcyA9IGV4dHJhOwogIHAt
PnJlZiA9IDE7CiAgcC0+c2VsZmlzaCA9IGZhbHNlOwogIHJldHVybiBwOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpjaGFyVCAqIGJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKY2xvbmUgKCkKewogIFJl
cCAqcCA9IFJlcDo6Y3JlYXRlIChsZW4pOwogIHAtPmNvcHkgKDAsIGRhdGEgKCksIGxlbik7CiAg
cC0+bGVuID0gbGVuOwogIHJldHVybiBwLT5kYXRhICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh
clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbCBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmV4Y2Vzc19zbG9wIChzaXplX3Qg
cywgc2l6ZV90IHIpCnsKICByZXR1cm4gMiAqIChzIDw9IDE2ID8gMTYgOiBzKSA8IHI7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGlu
ZSBib29sIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmNoZWNrX3Jl
YWxsb2MgKGJhc2ljX3N0cmluZzo6c2l6ZV90eXBlIHMpIGNvbnN0CnsKICBzICs9IHNpemVvZiAo
Y2hhclQpOwogIHJlcCAoKS0+c2VsZmlzaCA9IGZhbHNlOwogIHJldHVybiAocmVwICgpLT5yZWYg
PiAxCgkgIHx8IHMgPiBjYXBhY2l0eSAoKQoJICB8fCBSZXA6OmV4Y2Vzc19zbG9wIChzLCBjYXBh
Y2l0eSAoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgp2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6
CmFsbG9jIChiYXNpY19zdHJpbmc6OnNpemVfdHlwZSBfX3NpemUsIGJvb2wgX19zYXZlKQp7CiAg
aWYgKCEgY2hlY2tfcmVhbGxvYyAoX19zaXplKSkKICAgIHJldHVybjsKCiAgUmVwICpwID0gUmVw
OjpjcmVhdGUgKF9fc2l6ZSk7CgogIGlmIChfX3NhdmUpCiAgICB7CiAgICAgIHAtPmNvcHkgKDAs
IGRhdGEgKCksIGxlbmd0aCAoKSk7CiAgICAgIHAtPmxlbiA9IGxlbmd0aCAoKTsKICAgIH0KICBl
bHNlCiAgICBwLT5sZW4gPSAwOwoKICByZXB1cCAocCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFy
VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiYKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
OjoKcmVwbGFjZSAoc2l6ZV90eXBlIHBvczEsIHNpemVfdHlwZSBuMSwKCSBjb25zdCBiYXNpY19z
dHJpbmcmIF9zdHIsIHNpemVfdHlwZSBwb3MyLCBzaXplX3R5cGUgbjIpCnsKICBjb25zdCBzaXpl
X3QgbGVuMiA9IF9zdHIubGVuZ3RoICgpOwoKICBpZiAocG9zMSA9PSAwICYmIG4xID49IGxlbmd0
aCAoKSAmJiBwb3MyID09IDAgJiYgbjIgPj0gbGVuMikKICAgIHJldHVybiBvcGVyYXRvcj0gKF9z
dHIpOwoKICBkbyB7IGlmICggcG9zMiA+IGxlbjIgKSBfX291dF9vZl9yYW5nZSAoInBvczIgPiBs
ZW4yIik7IH0gd2hpbGUgKDApIDsKCiAgaWYgKG4yID4gbGVuMiAtIHBvczIpCiAgICBuMiA9IGxl
bjIgLSBwb3MyOwoKICByZXR1cm4gcmVwbGFjZSAocG9zMSwgbjEsIF9zdHIuZGF0YSAoKSArIHBv
czIsIG4yKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs
bG9jYXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+OjpSZXA6Ogpjb3B5IChzaXplX3QgcG9zLCBjb25zdCBjaGFyVCAqcywgc2l6ZV90IG4pCnsK
ICBpZiAobikKICAgIHRyYWl0czo6Y29weSAoZGF0YSAoKSArIHBvcywgcywgbik7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSB2
b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKbW92ZSAo
c2l6ZV90IHBvcywgY29uc3QgY2hhclQgKnMsIHNpemVfdCBuKQp7CiAgaWYgKG4pCiAgICB0cmFp
dHM6Om1vdmUgKGRhdGEgKCkgKyBwb3MsIHMsIG4pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQs
IGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj4mCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6
CnJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgY29uc3QgY2hhclQqIHMsIHNp
emVfdHlwZSBuMikKewogIGNvbnN0IHNpemVfdHlwZSBsZW4gPSBsZW5ndGggKCk7CiAgZG8geyBp
ZiAoIHBvcyA+IGxlbiApIF9fb3V0X29mX3JhbmdlICgicG9zID4gbGVuIik7IH0gd2hpbGUgKDAp
IDsKICBpZiAobjEgPiBsZW4gLSBwb3MpCiAgICBuMSA9IGxlbiAtIHBvczsKICBkbyB7IGlmICgg
bGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yICkgX19sZW5ndGhfZXJyb3IgKCJsZW4gLSBuMSA+
IG1heF9zaXplICgpIC0gbjIiKTsgfSB3aGlsZSAoMCkgOwogIHNpemVfdCBuZXdsZW4gPSBsZW4g
LSBuMSArIG4yOwoKICBpZiAoY2hlY2tfcmVhbGxvYyAobmV3bGVuKSkKICAgIHsKICAgICAgUmVw
ICpwID0gUmVwOjpjcmVhdGUgKG5ld2xlbik7CiAgICAgIHAtPmNvcHkgKDAsIGRhdGEgKCksIHBv
cyk7CiAgICAgIHAtPmNvcHkgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChw
b3MgKyBuMSkpOwogICAgICBwLT5jb3B5IChwb3MsIHMsIG4yKTsKICAgICAgcmVwdXAgKHApOwog
ICAgfQogIGVsc2UKICAgIHsKICAgICAgcmVwICgpLT5tb3ZlIChwb3MgKyBuMiwgZGF0YSAoKSAr
IHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgcmVwICgpLT5jb3B5IChwb3MsIHMs
IG4yKTsKICAgIH0KICByZXAgKCktPmxlbiA9IG5ld2xlbjsKCiAgcmV0dXJuICp0aGlzOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxp
bmUgdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CnNl
dCAoc2l6ZV90IHBvcywgY29uc3QgY2hhclQgYywgc2l6ZV90IG4pCnsKICB0cmFpdHM6OnNldCAg
KGRhdGEgKCkgKyBwb3MsIGMsIG4pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy
YWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj4mIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJlcGxhY2Ug
KHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgc2l6ZV90eXBlIG4yLCBjaGFyVCBjKQp7CiAg
Y29uc3Qgc2l6ZV90IGxlbiA9IGxlbmd0aCAoKTsKICBkbyB7IGlmICggcG9zID4gbGVuICkgX19v
dXRfb2ZfcmFuZ2UgKCJwb3MgPiBsZW4iKTsgfSB3aGlsZSAoMCkgOwogIGlmIChuMSA+IGxlbiAt
IHBvcykKICAgIG4xID0gbGVuIC0gcG9zOwogIGRvIHsgaWYgKCBsZW4gLSBuMSA+IG1heF9zaXpl
ICgpIC0gbjIgKSBfX2xlbmd0aF9lcnJvciAoImxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiIp
OyB9IHdoaWxlICgwKSA7CiAgc2l6ZV90IG5ld2xlbiA9IGxlbiAtIG4xICsgbjI7CgogIGlmIChj
aGVja19yZWFsbG9jIChuZXdsZW4pKQogICAgewogICAgICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAo
bmV3bGVuKTsKICAgICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgcG9zKTsKICAgICAgcC0+Y29weSAo
cG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7CiAgICAgIHAt
PnNldCAgKHBvcywgYywgbjIpOwogICAgICByZXB1cCAocCk7CiAgICB9CiAgZWxzZQogICAgewog
ICAgICByZXAgKCktPm1vdmUgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChw
b3MgKyBuMSkpOwogICAgICByZXAgKCktPnNldCAgKHBvcywgYywgbjIpOwogICAgfQogIHJlcCAo
KS0+bGVuID0gbmV3bGVuOwoKICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFy
VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CnZvaWQgYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVzaXplIChzaXplX3R5cGUgbiwgY2hhclQgYykKewog
IGRvIHsgaWYgKCBuID4gbWF4X3NpemUgKCkgKSBfX2xlbmd0aF9lcnJvciAoIm4gPiBtYXhfc2l6
ZSAoKSIpOyB9IHdoaWxlICgwKSA7CgogIGlmIChuID4gbGVuZ3RoICgpKQogICAgYXBwZW5kIChu
IC0gbGVuZ3RoICgpLCBjKTsKICBlbHNlCiAgICBlcmFzZSAobik7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPjo6CmNvcHkgKGNoYXJUKiBzLCBzaXplX3R5cGUgbiwgc2l6ZV90eXBl
IHBvcykgY29uc3QKewogIGRvIHsgaWYgKCBwb3MgPiBsZW5ndGggKCkgKSBfX291dF9vZl9yYW5n
ZSAoInBvcyA+IGxlbmd0aCAoKSIpOyB9IHdoaWxlICgwKSA7CgogIGlmIChuID4gbGVuZ3RoICgp
IC0gcG9zKQogICAgbiA9IGxlbmd0aCAoKSAtIHBvczsKCiAgdHJhaXRzOjpjb3B5IChzLCBkYXRh
ICgpICsgcG9zLCBuKTsKICByZXR1cm4gbjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz
cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+OjoKZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBj
b25zdAp7CiAgc2l6ZV90IHhwb3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgKyBuIDw9IGxlbmd0aCAo
KTsgKyt4cG9zKQogICAgaWYgKHRyYWl0czo6ZXEgKGRhdGEgKCkgW3hwb3NdLCAqcykKCSYmIHRy
YWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHhwb3MsIHMsIG4pID09IDApCiAgICAgIHJldHVybiB4
cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+OjoKX2ZpbmQgKGNvbnN0IGNoYXJUKiBwdHIsIGNoYXJUIGMsIHNpemVfdHlwZSB4cG9zLCBz
aXplX3R5cGUgbGVuKQp7CiAgZm9yICg7IHhwb3MgPCBsZW47ICsreHBvcykKICAgIGlmICh0cmFp
dHM6OmVxIChwdHIgW3hwb3NdLCBjKSkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+
CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmQgKGNoYXJUIGMsIHNpemVf
dHlwZSBwb3MpIGNvbnN0CnsKICByZXR1cm4gX2ZpbmQgKGRhdGEgKCksIGMsIHBvcywgbGVuZ3Ro
ICgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUK
YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmZpbmQgKGNvbnN0IGNo
YXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIGlmIChuID4gbGVu
Z3RoICgpKQogICAgcmV0dXJuIG5wb3M7CgogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gbjsK
ICBpZiAoeHBvcyA+IHBvcykKICAgIHhwb3MgPSBwb3M7CgogIGZvciAoKyt4cG9zOyB4cG9zLS0g
PiAwOyApCiAgICBpZiAodHJhaXRzOjplcSAoZGF0YSAoKSBbeHBvc10sICpzKQoJJiYgdHJhaXRz
Ojpjb21wYXJlIChkYXRhICgpICsgeHBvcywgcywgbikgPT0gMCkKICAgICAgcmV0dXJuIHhwb3M7
CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj
bGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6
c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJmaW5k
IChjaGFyVCBjLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAgaWYgKDEgPiBsZW5ndGggKCkpCiAg
ICByZXR1cm4gbnBvczsKCiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSAxOwogIGlmICh4cG9z
ID4gcG9zKQogICAgeHBvcyA9IHBvczsKCiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7ICkKICAg
IGlmICh0cmFpdHM6OmVxIChkYXRhICgpIFt4cG9zXSwgYykpCiAgICAgIHJldHVybiB4cG9zOwog
IHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xh
c3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNp
emVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2Zp
cnN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0
CnsKICBzaXplX3QgeHBvcyA9IHBvczsKICBmb3IgKDsgeHBvcyA8IGxlbmd0aCAoKTsgKyt4cG9z
KQogICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgIT0gbnBvcykKICAgICAg
cmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xh
c3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPjo6CmZpbmRfbGFzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVf
dHlwZSBuKSBjb25zdAp7CiAgaWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBvczsKICBz
aXplX3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0g
cG9zOwogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOykKICAgIGlmIChfZmluZCAocywgZGF0YSAo
KSBbeHBvc10sIDAsIG4pICE9IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9z
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y
PgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X25vdF9vZiAo
Y29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgc2l6
ZV90IHhwb3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgPCBsZW5ndGggKCk7ICsreHBvcykKICAgIGlm
IChfZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4pID09IG5wb3MpCiAgICAgIHJldHVybiB4
cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Ogpm
aW5kX2ZpcnN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29uc3QKewogIHNpemVf
dCB4cG9zID0gcG9zOwogIGZvciAoOyB4cG9zIDwgbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAo
dHJhaXRzOjpuZSAoZGF0YSAoKSBbeHBvc10sIGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1
cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs
bG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5
cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9sYXN0X25v
dF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7
CiAgaWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBvcyA9IGxl
bmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZvciAoKyt4
cG9zOyB4cG9zLS0gPiAwOykKICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4p
ID09IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2xhc3Rfbm90X29mIChjaGFyVCBjLCBzaXplX3R5
cGUgcG9zKSBjb25zdAp7CiAgaWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBvczsKICBz
aXplX3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0g
cG9zOwogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOykKICAgIGlmICh0cmFpdHM6Om5lIChkYXRh
ICgpIFt4cG9zXSwgYykpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbnQgYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKY29tcGFyZSAoY29uc3QgYmFz
aWNfc3RyaW5nJiBfc3RyLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIGRv
IHsgaWYgKCBwb3MgPiBsZW5ndGggKCkgKSBfX291dF9vZl9yYW5nZSAoInBvcyA+IGxlbmd0aCAo
KSIpOyB9IHdoaWxlICgwKSA7CgogIHNpemVfdCBybGVuID0gbGVuZ3RoICgpIC0gcG9zOwogIGlm
IChybGVuID4gbikKICAgIHJsZW4gPSBuOwogIGlmIChybGVuID4gX3N0ci5sZW5ndGggKCkpCiAg
ICBybGVuID0gX3N0ci5sZW5ndGggKCk7CiAgaW50IHIgPSB0cmFpdHM6OmNvbXBhcmUgKGRhdGEg
KCkgKyBwb3MsIF9zdHIuZGF0YSAoKSwgcmxlbik7CiAgaWYgKHIgIT0gMCkKICAgIHJldHVybiBy
OwogIGlmIChybGVuID09IG4pCiAgICByZXR1cm4gMDsKICByZXR1cm4gKGxlbmd0aCAoKSAtIHBv
cykgLSBfc3RyLmxlbmd0aCAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp
dHMsIGNsYXNzIEFsbG9jYXRvcj4KaW50IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6CmNvbXBhcmUgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5
cGUgbikgY29uc3QKewogIGRvIHsgaWYgKCBwb3MgPiBsZW5ndGggKCkgKSBfX291dF9vZl9yYW5n
ZSAoInBvcyA+IGxlbmd0aCAoKSIpOyB9IHdoaWxlICgwKSA7CgogIHNpemVfdCBybGVuID0gbGVu
Z3RoICgpIC0gcG9zOwogIGlmIChybGVuID4gbikKICAgIHJsZW4gPSBuOwogIGludCByID0gdHJh
aXRzOjpjb21wYXJlIChkYXRhICgpICsgcG9zLCBzLCBybGVuKTsKICBpZiAociAhPSAwKQogICAg
cmV0dXJuIHI7CiAgcmV0dXJuIChsZW5ndGggKCkgLSBwb3MpIC0gbjsKfQoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppc3RyZWFtICYKb3Bl
cmF0b3I+PiAoaXN0cmVhbSAmaXMsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPiAmcykKewogIGludCB3ID0gaXMud2lkdGggKDApOwogIGlmIChpcy5pcGZ4MCAoKSkKICAg
IHsKICAgICAgcmVnaXN0ZXIgc3RyZWFtYnVmICpzYiA9IGlzLnJkYnVmICgpOwogICAgICBzLnJl
c2l6ZSAoMCk7CiAgICAgIHdoaWxlICgxKQoJewoJICBpbnQgY2ggPSBzYi0+c2J1bXBjICgpOwoJ
ICBpZiAoY2ggPT0gKC0xKSApCgkgICAgewoJICAgICAgaXMuc2V0c3RhdGUgKGlvczo6ZW9mYml0
KTsKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgZWxzZSBpZiAodHJhaXRzOjppc19kZWwgKGNoKSkK
CSAgICB7CgkgICAgICBzYi0+c3VuZ2V0YyAoKTsKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgcyAr
PSBzdGF0aWNfY2FzdDxjaGFyVD4gKGNoKTsKCSAgaWYgKC0tdyA9PSAxKQoJICAgIGJyZWFrOwoJ
fQogICAgfQoKICBpcy5pc2Z4ICgpOwogIGlmIChzLmxlbmd0aCAoKSA9PSAwKQogICAgaXMuc2V0
c3RhdGUgKGlvczo6ZmFpbGJpdCk7CgogIHJldHVybiBpczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNo
YXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kb3N0cmVhbSAmCm9wZXJhdG9yPDwg
KG9zdHJlYW0gJm8sIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
PiYgcykKewogIHJldHVybiBvLndyaXRlIChzLmRhdGEgKCksIHMubGVuZ3RoICgpKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaXN0cmVh
bSYKZ2V0bGluZSAoaXN0cmVhbSAmaXMsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPiYgcywgY2hhclQgZGVsaW0pCnsKICBpZiAoaXMuaXBmeDEgKCkpCiAgICB7CiAgICAg
IHNpemVfdCAgIGNvdW50ID0gMDsKICAgICAgc3RyZWFtYnVmICpzYiA9IGlzLnJkYnVmICgpOwog
ICAgICBzLnJlc2l6ZSAoMCk7CgogICAgICB3aGlsZSAoMSkKCXsKCSAgaW50IGNoID0gc2ItPnNi
dW1wYyAoKTsKCSAgaWYgKGNoID09ICgtMSkgKQoJICAgIHsKCSAgICAgIGlzLnNldHN0YXRlIChj
b3VudCA9PSAwCgkJCSAgID8gKGlvczo6ZmFpbGJpdHxpb3M6OmVvZmJpdCkKCQkJICAgOiBpb3M6
OmVvZmJpdCk7CgkgICAgICBicmVhazsKCSAgICB9CgoJICArK2NvdW50OwoKCSAgaWYgKGNoID09
IGRlbGltKQoJICAgIGJyZWFrOwoKCSAgcyArPSBzdGF0aWNfY2FzdDxjaGFyVD4gKGNoKTsKCgkg
IGlmIChzLmxlbmd0aCAoKSA9PSBzLm5wb3MgLSAxKQoJICAgIHsKCSAgICAgIGlzLnNldHN0YXRl
IChpb3M6OmZhaWxiaXQpOwoJICAgICAgYnJlYWs7CgkgICAgfQoJfQogICAgfQoKICAgCiAgIAog
IGlzLmlzZnggKCk7CgogIHJldHVybiBpczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz
cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+OjpSZXAKYmFzaWNfc3RyaW5nPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Om5p
bFJlcCA9IHsgMCwgMCwgMSwgZmFsc2UgfTsKCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg
dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0
cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6bnBvczsKCn0gIAojIDY1MyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIu
OTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgoKIyA2
ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvc3RyaW5nIiAyIDMKCgpleHRlcm4gIkMrKyIgewp0eXBlZGVmIGJhc2ljX3N0cmluZyA8
Y2hhcj4gc3RyaW5nOwoKCgp9ICAKCgojIDEwICIuLi90b29sYm94L3RieEZvcm11bGEuaCIgMgoK
CiAKCiAKCgoKCgoKCmNsYXNzIHRieF9Gb3JtdWxhIHsKICBmcmllbmQgb3N0cmVhbSYgb3BlcmF0
b3I8PChvc3RyZWFtJiBvcywgY29uc3QgdGJ4X0Zvcm11bGEmIGZvcm11bGEpOwoKcHVibGljOgog
ICAKCiAgdGJ4X0Zvcm11bGEoY29uc3QgY2hhciogZm9ybXVsYSk7CgogICAKCiAgdGJ4X0Zvcm11
bGEoY29uc3QgdGJ4X0Zvcm11bGEmIGZybSk7CgogICAKCgoKCgoKICB2aXJ0dWFsIHRieF9Gb3Jt
dWxhKiBjbG9uZSgpIGNvbnN0OwoKICB2aXJ0dWFsIH50YnhfRm9ybXVsYSgpOwoKICAgCgoKICB2
aXJ0dWFsIG9zdHJlYW0mIGluZm8ob3N0cmVhbSYgb3MpIGNvbnN0OwoKICAgCgogIHZpcnR1YWwg
dGJ4X0Zvcm11bGEmIG9wZXJhdG9yPShjb25zdCB0YnhfRm9ybXVsYSYgZnJtKTsKCiAgIAoKICB2
aXJ0dWFsIHJlYWwgb3BlcmF0b3IoKSAoY29uc3QgcmVhbCBwKSBjb25zdDsKCiAgIAoKICB2aXJ0
dWFsIHJlYWwgb3BlcmF0b3IoKSAoY29uc3QgUmVhbDJkJiBwKSBjb25zdDsKCiAgIAoKICB2aXJ0
dWFsIHJlYWwgb3BlcmF0b3IoKSAoY29uc3QgUmVhbDNkJiBwKSBjb25zdDsKCnByaXZhdGU6CiAg
IAogIHVjaGFyKiBwZ21fOwoKICAgCiAgdWludCBsZW5fOwoKICAgCiAgc3RyaW5nIGZvcm11bGFf
Owp9OwoKaW5saW5lIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsIGNvbnN0IHRieF9G
b3JtdWxhJiBmb3JtdWxhKSB7CiAgcmV0dXJuIGZvcm11bGEuaW5mbyhvcyk7Cn0KCgojIDkgIi4u
L3Rvb2xib3gvdGJ4Qm91bmRhcnkuaCIgMgoKCiAKCiAKCgoKCgoKCmNsYXNzIHRieF9Cb3VuZGFy
eSB7CiAgZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsIGNvbnN0IHRieF9C
b3VuZGFyeSYgYm91bmRhcnkpOwoKcHVibGljOgogICAKICBlbnVtIGJvdW5kYXJ5VHlwZXMgeyBG
UkVFID0gMCwgRElSSUNITEVULCBORVVNQU5OLCBNQVhfVFlQRSB9OwoKICAgCgogIHRieF9Cb3Vu
ZGFyeSgpOwoKICAgCgoKCgoKCgoKCiAgdGJ4X0JvdW5kYXJ5KGNvbnN0IGVudW0gYm91bmRhcnlU
eXBlcyB0eXBlLCBjb25zdCBjaGFyKiBmcm0pOwoKICAgCgoKCgoKCgoKCgoKCgoKICB0YnhfQm91
bmRhcnkoY29uc3QgZW51bSBib3VuZGFyeVR5cGVzIHR5cGUsIGNvbnN0IHRieF9Gb3JtdWxhJiBm
cm0pOwoKICAgCgogIHRieF9Cb3VuZGFyeShjb25zdCB0YnhfQm91bmRhcnkmIGJuZCk7CgogIHZp
cnR1YWwgfnRieF9Cb3VuZGFyeSgpOwoKICAgCiAgaW5saW5lIGNvbnN0IGVudW0gYm91bmRhcnlU
eXBlcyB0eXBlKCkgY29uc3Q7CgogICAKCiAgdmlydHVhbCB0YnhfQm91bmRhcnkmIG9wZXJhdG9y
PShjb25zdCB0YnhfQm91bmRhcnkmIGJuZCk7CgogICAKCiAgaW5saW5lIGNvbnN0IHJlYWwgb3Bl
cmF0b3IoKShjb25zdCByZWFsIHgpIGNvbnN0OwoKICAgCgogIGlubGluZSBjb25zdCByZWFsIG9w
ZXJhdG9yKCkoY29uc3QgUmVhbDJkJiB4KSBjb25zdDsKCiAgIAoKICBpbmxpbmUgY29uc3QgcmVh
bCBvcGVyYXRvcigpKGNvbnN0IFJlYWwzZCYgeCkgY29uc3Q7CgogICAKICB2aXJ0dWFsIG9zdHJl
YW0mIGluZm8ob3N0cmVhbSYgb3MpIGNvbnN0OwoKcHJpdmF0ZToKICAgCiAgZW51bSBib3VuZGFy
eVR5cGVzIHR5cGVfOwoKICAgCiAgY29uc3QgdGJ4X0Zvcm11bGEqIGZybV87Cn07CgppbmxpbmUg
b3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvcywgY29uc3QgdGJ4X0JvdW5kYXJ5JiBib3Vu
ZGFyeSkgewoKICByZXR1cm4gYm91bmRhcnkuaW5mbyhvcyk7Cn0KCmNvbnN0IGVudW0gdGJ4X0Jv
dW5kYXJ5Ojpib3VuZGFyeVR5cGVzIHRieF9Cb3VuZGFyeTo6dHlwZSgpIGNvbnN0IHsKCiAgcmV0
dXJuIHR5cGVfOwp9Cgpjb25zdCByZWFsIHRieF9Cb3VuZGFyeTo6b3BlcmF0b3IoKShjb25zdCBy
ZWFsIHgpIGNvbnN0IHsKCiAgaWYgKGZybV8pIHsKICAgIHJldHVybiAoKmZybV8pKHgpOwogIH0g
ZWxzZSB7CiAgICByZXR1cm4gMC4wOwogIH0KfQoKY29uc3QgcmVhbCB0YnhfQm91bmRhcnk6Om9w
ZXJhdG9yKCkoY29uc3QgUmVhbDJkJiB4KSBjb25zdCB7CgogIGlmIChmcm1fKSB7CiAgICByZXR1
cm4gKCpmcm1fKSh4KTsKICB9IGVsc2UgewogICAgcmV0dXJuIDAuMDsKICB9Cn0KCmNvbnN0IHJl
YWwgdGJ4X0JvdW5kYXJ5OjpvcGVyYXRvcigpKGNvbnN0IFJlYWwzZCYgeCkgY29uc3QgewoKICBp
ZiAoZnJtXykgewogICAgcmV0dXJuICgqZnJtXykoeCk7CiAgfSBlbHNlIHsKICAgIHJldHVybiAw
LjA7CiAgfQp9CgoKIyA5ICJ0YnhCb3VuZGFyeTIuaCIgMgoKCmV4dGVybiB0YnhfRm9ybXVsYSBm
ZmZmOwoKCmNsYXNzIHRieF9Cb3VuZGFyeTIgewogIGZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvcjw8
KG9zdHJlYW0mIG9zLCBjb25zdCB0YnhfQm91bmRhcnkyJiBib3VuZGFyeSk7CiBwdWJsaWM6CiAg
dGJ4X0JvdW5kYXJ5IHg7CiAgdGJ4X0JvdW5kYXJ5IHk7CgogICAKCiAgdGJ4X0JvdW5kYXJ5Migp
OiB4KCksIHkoKSB7fTsKICB0YnhfQm91bmRhcnkyKGNvbnN0IGVudW0gdGJ4X0JvdW5kYXJ5Ojpi
b3VuZGFyeVR5cGVzIHR5cFgsIGNvbnN0IGNoYXIqIGZvcm1YLAoJCWNvbnN0IGVudW0gdGJ4X0Jv
dW5kYXJ5Ojpib3VuZGFyeVR5cGVzIHR5cFksIGNvbnN0IGNoYXIqIGZvcm1ZKSA6CiAgICAgICAg
ICAgICAgICAgIHgodHlwWCwgZm9ybVgpLCB5KHR5cFksIGZvcm1ZKSB7fTsKCiAgdGJ4X0JvdW5k
YXJ5Mihjb25zdCBlbnVtIHRieF9Cb3VuZGFyeTo6Ym91bmRhcnlUeXBlcyB0eXBYLCBjb25zdCB0
YnhfRm9ybXVsYSYgZnJtWCwKCQljb25zdCBlbnVtIHRieF9Cb3VuZGFyeTo6Ym91bmRhcnlUeXBl
cyB0eXBZLCBjb25zdCB0YnhfRm9ybXVsYSYgZnJtWSkgOgogICAgICAgICAgICAgICAgICAgIHgo
dHlwWCwgZmZmZiksIHkodHlwWSwgZmZmZikge307CgogICAKCiAgdGJ4X0JvdW5kYXJ5Mihjb25z
dCB0YnhfQm91bmRhcnkyJiBibmQpIDogeChibmQueCksIHkoYm5kLnkpIHt9OwoKICB2aXJ0dWFs
IH50YnhfQm91bmRhcnkyKCkge307CgogICAKICBpbmxpbmUgdmlydHVhbCBvc3RyZWFtJiBpbmZv
KG9zdHJlYW0mIG9zKSBjb25zdDsKCn07CgppbmxpbmUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3Ry
ZWFtJiBvcywgY29uc3QgdGJ4X0JvdW5kYXJ5MiYgYm91bmRhcnkpIHsKICByZXR1cm4gYm91bmRh
cnkuaW5mbyhvcyk7Cn0KCmlubGluZSBvc3RyZWFtJiB0YnhfQm91bmRhcnkyOjppbmZvKG9zdHJl
YW0mIG9zKSBjb25zdCB7CiAgcmV0dXJuIHkuaW5mbyh4LmluZm8ob3MpIDw8ICIsIik7Cn0KCgoK
CiMgMTAgImxpbmVsQm91bmRhcnkuaCIgMgoKIyAxICIuLi9nZW9tZXRyeS9nZW9TZW1hbnRpY3Mu
aCIgMQogCgoKCgoKCgoKIAoKIAoKdGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgZ2VvX1NlbWFudGlj
cyB7CiAgZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsIGNvbnN0IGdlb19T
ZW1hbnRpY3M8VD4mIHMpIHsKICAgIHJldHVybiBzLmluZm8ob3MpOwogIH0KcHVibGljOgogICAK
CiAgdmlydHVhbCBUIG9wZXJhdG9yKCkoZ2VvX0F0dHJpYnV0ZSBhdHRyaWIpIGNvbnN0ID0gMDsK
CiAgIAogIHZpcnR1YWwgb3N0cmVhbSYgaW5mbyhvc3RyZWFtJiBvcykgY29uc3QgPSAwOwp9OwoK
IAoKIAoKCmNsYXNzIGdlb19Cb29sIDogcHVibGljIGdlb19TZW1hbnRpY3M8Ym9vbD4gewoKcHVi
bGljOgogICAKCgogIGlubGluZSBib29sIG9wZXJhdG9yKCkoZ2VvX0F0dHJpYnV0ZSBhdHRyaWIp
IGNvbnN0Owp9OwoKaW5saW5lIGJvb2wgZ2VvX0Jvb2w6Om9wZXJhdG9yKCkoZ2VvX0F0dHJpYnV0
ZSBhdHRyaWIpIGNvbnN0IHsKICByZXR1cm4gYXR0cmliICE9IDA7Cn0KCgogCgogIAoKIyAxMSAi
bGluZWxCb3VuZGFyeS5oIiAyCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzIGxpbmVsX0Jv
dW5kYXJ5Q29uZGl0aW9uIDogcHVibGljIGdlb19TZW1hbnRpY3M8dGJ4X0JvdW5kYXJ5Mj4gewoK
cHVibGljOgogICAKCiAgbGluZWxfQm91bmRhcnlDb25kaXRpb24oKSA6IGJvdW5kYXJpZXNfKCkg
e307CgoKICB2aXJ0dWFsIH5saW5lbF9Cb3VuZGFyeUNvbmRpdGlvbigpOwoKICAgCgoKCgoKCgog
IGlubGluZSBjb25zdCB0YnhfQm91bmRhcnkyJiBvcGVyYXRvcigpIChnZW9fQXR0cmlidXRlIGF0
dHJpYik7CgogIHZpcnR1YWwgdGJ4X0JvdW5kYXJ5MiBvcGVyYXRvcigpIChnZW9fQXR0cmlidXRl
IGF0dHJpYikgY29uc3Q7CgogICAKCgoKCgoKCgogIHZvaWQgYWRkKGNvbnN0IGdlb19BdHRyaWJ1
dGUmIGF0dHJpYiwgY29uc3QgdGJ4X0JvdW5kYXJ5MiYgYmNPYmplY3QpOwoKICB2aXJ0dWFsIG9z
dHJlYW0mIGluZm8ob3N0cmVhbSYgb3MpIGNvbnN0Owpwcml2YXRlOgogICAKCgogIG11dGFibGUg
aGFzaF9tYXA8dWludCwgdGJ4X0JvdW5kYXJ5Mj4gYm91bmRhcmllc187Cn07Cgpjb25zdCB0Ynhf
Qm91bmRhcnkyJiAKbGluZWxfQm91bmRhcnlDb25kaXRpb246Om9wZXJhdG9yKCkgKGdlb19BdHRy
aWJ1dGUgYXR0cmliKSB7CiAgcmV0dXJuIGJvdW5kYXJpZXNfW2F0dHJpYi5hdHRyaWIoKV07Cn0K
CgojIDkgImxpbmVsU3BhY2UuaCIgMgoKCgoKCgoKCiMgMSAiLi4vaHAvaHBTcGFjZS5oIiAxCiAK
CgoKCgoKCiMgMSAiLi4vaHAvaHBCb3VuZGFyeS5oIiAxCiAKCgoKCgoKCgoKCgogCgogCgoKCgoK
CgoKCgoKCgoKCgoKY2xhc3MgaHBfQm91bmRhcnlDb25kaXRpb24gOiBwdWJsaWMgZ2VvX1NlbWFu
dGljczx0YnhfQm91bmRhcnk+IHsKCnB1YmxpYzoKICAgCgogIGhwX0JvdW5kYXJ5Q29uZGl0aW9u
KCkgOiBib3VuZGFyaWVzXygpIHt9CgogICAKCgoKCiAgdmlydHVhbCB+aHBfQm91bmRhcnlDb25k
aXRpb24oKTsKCiAgIAoKCgoKCgoKICBpbmxpbmUgY29uc3QgdGJ4X0JvdW5kYXJ5JiBvcGVyYXRv
cigpIChnZW9fQXR0cmlidXRlIGF0dHJpYik7CgogIHZpcnR1YWwgdGJ4X0JvdW5kYXJ5IG9wZXJh
dG9yKCkgKGdlb19BdHRyaWJ1dGUgYXR0cmliKSBjb25zdDsKCiAgIAoKCgoKCgoKCiAgdm9pZCBh
ZGQoY29uc3QgZ2VvX0F0dHJpYnV0ZSYgYXR0cmliLCBjb25zdCB0YnhfQm91bmRhcnkmIGJjT2Jq
ZWN0KTsKCiAgdmlydHVhbCBvc3RyZWFtJiBpbmZvKG9zdHJlYW0mIG9zKSBjb25zdDsKcHJpdmF0
ZToKICAgCgoKICBtdXRhYmxlIGhhc2hfbWFwPHVpbnQsIHRieF9Cb3VuZGFyeT4gYm91bmRhcmll
c187Cn07Cgpjb25zdCB0YnhfQm91bmRhcnkmIApocF9Cb3VuZGFyeUNvbmRpdGlvbjo6b3BlcmF0
b3IoKSAoZ2VvX0F0dHJpYnV0ZSBhdHRyaWIpIHsKCiAgcmV0dXJuIGJvdW5kYXJpZXNfW2F0dHJp
Yi5hdHRyaWIoKV07Cn0KCgojIDkgIi4uL2hwL2hwU3BhY2UuaCIgMgoKCgoKCgoKCgogCgpjbGFz
cyB0YnhfU2NhbjxocF9IUDJkWFhYPHJlYWw+ID4gOiBwdWJsaWMgdGJ4X1NjYW48c3BjX0VsZW1l
bnQ8cmVhbD4gPiB7CnB1YmxpYzogIAogIGhwX0hQMmRYWFg8cmVhbD4mIG9wZXJhdG9yKysoaW50
KSA9IDA7Cn07CgogCnR5cGVkZWYgdGJ4X1NjYW48aHBfSFAyZFhYWDxyZWFsPiA+IGhwX0hQMmRT
Y2FuOwogIAogCgogCgoKY2xhc3MgaHBfSFAyZCA6IHB1YmxpYyBzcGNfU3BhY2U8cmVhbD4gewoK
cHVibGljOgogICAKCgoKCgoKCgoKICBocF9IUDJkKGdlb19NZXNoMiYgbXNoLCB1aW50IGwsIHVp
bnQgcCwgaHBfQm91bmRhcnlDb25kaXRpb24qIGJjID0gX19udWxsICk7CiAgaW5saW5lIHZpcnR1
YWwgfmhwX0hQMmQoKTsKICAKICAgCiAgaW5saW5lIHVpbnQgZGltKCkgY29uc3Q7CgogIHZpcnR1
YWwgb3N0cmVhbSYgaW5mbyhvc3RyZWFtJiBvcywgdWludCBtb2RlID0gMCkgY29uc3Q7CgogICAK
ICBpbmxpbmUgdWludCBuZWxtKCkgY29uc3Q7CgogICAKICBpbmxpbmUgaHBfSFAyZFNjYW4qIHNj
YW4oKSBjb25zdDsKCiAgaW5saW5lIHNob3J0IGwoaHBfSFAyZFhYWDxyZWFsPiYgZWxtKSB7CiAg
ICBBZGp1c3QmIGFkaihhZGpfW2VsbS5zdXBwb3J0KCkua2V5KCldKTsKICAgIHJldHVybiBhZGou
bDsKICB9CgogICAKCgoKCgoKICB2b2lkIGFkanVzdChocF9IUDJkWFhYPHJlYWw+JiBlbG0sIGlu
dCBsLCBpbnQgcCk7CgogICAKCgoKCgoKCgoKCgoKCgogIHZvaWQgcmVidWlsZCgpOwoKICAgCgog
IHZpcnR1YWwgdm9pZCBza2V0Y2gob3N0cmVhbSYgb3MsIFJlYWwyZCBvZmZzZXQsIHJlYWwgc2Nh
bGUsIHVpbnQgZGVsdGEgPSAyKTsKCnByb3RlY3RlZDoKICAgCgogIHN0cnVjdCBDb250cm9sIHsK
ICAgICAKCgoKCgoKCgogICAgdWNoYXIgICAgICAgICB0YWc7CgogICAgIAogICAgdXNob3J0ICAg
ICAgICBwOwoKICAgICAKICAgIHNwY19CRm5jSW5kZXggaWR4OwoKICAgICAKCiAgICBDb250cm9s
KCkgeyB0YWcgPSAwOyB9CiAgfTsKCiAgIAoKCiAgc3RydWN0IEFkanVzdCB7CiAgICAgCgoKICAg
IHNob3J0IHA7CgogICAgIAoKCiAgICBzaG9ydCBsOwoKICAgICAKCgogICAgQWRqdXN0KCkgeyBw
ID0gbCA9IDA7IH0KICB9OwoKICAgCiAgZ2VvX01lc2gyJiBtc2hfOwoKICAgCiAgaHBfQm91bmRh
cnlDb25kaXRpb24qIGJjXzsKCiAgIAogIHRieF9Db25uZWN0b3I8aHBfSFAyZFhYWDxyZWFsPios
IDE+KiBlbG1fOwoKICAgCiAgdGJ4X0R5bkFycmF5PENvbnRyb2w+IGN0cmwwXzsKCiAgIAogIHRi
eF9EeW5BcnJheTxDb250cm9sPiBjdHJsMV87CgogICAKICB0YnhfRHluQXJyYXk8Q29udHJvbD4g
Y3RybDJfOwoKICAgCiAgdGJ4X0R5bkFycmF5PEFkanVzdD4gYWRqXzsKCiAgIAogIHVpbnQgZGlt
XzsKCiAgIAogIHVpbnQgbmVsbV87CgogICAKICBib29sIHJlYnVpbGRfOwoKICAgCgoKCgoKCgoK
CgoKICB2aXJ0dWFsIHZvaWQgcmVidWlsZDBfKGdlb19Db25uZWN0b3IyJiBjbnRyLCBpbnQgbCwg
aW50JiBMLCBpbnQmIFApOwogIHZpcnR1YWwgdm9pZCByZWJ1aWxkMV8oZ2VvX1RyaWFuZ2xlMmQm
IGNlbGwsIHNwY19UQ29sdW1uPHJlYWw+KiBUID0gX19udWxsICk7CiAgdmlydHVhbCB2b2lkIHJl
YnVpbGQxXyhnZW9fUXVhZDJkJiBjZWxsLCBzcGNfVENvbHVtbjxyZWFsPiogVCA9IF9fbnVsbCAp
OwoKICBpbmxpbmUgdm9pZCBkZWFjdGl2YXRlXyhnZW9fRWRnZSYgZWRnKTsKICBpbmxpbmUgdm9p
ZCBkZWFjdGl2YXRlXyhnZW9fVmVydGV4JiB2dHgpOwp9OwoKaW5saW5lIHVpbnQgaHBfSFAyZDo6
ZGltKCkgY29uc3QgeyAKICBpZiAocmVidWlsZF8pICgoaHBfSFAyZCopdGhpcyktPnJlYnVpbGQo
KTsgICAKICByZXR1cm4gZGltXzsgCn0KCmlubGluZSB1aW50IGhwX0hQMmQ6Om5lbG0oKSBjb25z
dCB7IAogIGlmIChyZWJ1aWxkXykgKChocF9IUDJkKil0aGlzKS0+cmVidWlsZCgpOyAgIAogIHJl
dHVybiBuZWxtXzsgCn0KCmlubGluZSBocF9IUDJkU2NhbiogaHBfSFAyZDo6c2NhbigpIGNvbnN0
IHsgCiAgaWYgKHJlYnVpbGRfKSAoKGhwX0hQMmQqKXRoaXMpLT5yZWJ1aWxkKCk7ICAgCiAgcmV0
dXJuIG5ldyB0YnhfUExpc3RTY2FuPGhwX0hQMmRYWFg8cmVhbD4gPigqZWxtXyk7Cn0KCmlubGlu
ZSB2b2lkIGhwX0hQMmQ6OmRlYWN0aXZhdGVfKGdlb19FZGdlJiBlZGcpIHsKICBjdHJsMV9bZWRn
LmNoaWxkKDApLT5rZXkoKV0udGFnIHw9IDI7CiAgY3RybDFfW2VkZy5jaGlsZCgxKS0+a2V5KCld
LnRhZyB8PSAyOwogIGN0cmwwX1tlZGcuY2hpbGQoMSktPnZlcnRleCgwKS0+a2V5KCldLnRhZyB8
PSAyOwp9CgppbmxpbmUgdm9pZCBocF9IUDJkOjpkZWFjdGl2YXRlXyhnZW9fVmVydGV4JiB2dHgp
IHsKICBjdHJsMF9bdnR4LmNoaWxkKDApLT5rZXkoKV0udGFnIHw9IDI7Cn0KCgojIDE3ICJsaW5l
bFNwYWNlLmgiIDIKCgogCgogCiAKIAogCgogCiAKdHlwZWRlZiBocF9IUDJkU2NhbiBsaW5lbF9I
UDJkU2NhbjsKCiAKCiAKCgpjbGFzcyBsaW5lbF9MaW5FbDJkIDogcHVibGljIHNwY19TcGFjZTxy
ZWFsPiB7CgpwdWJsaWM6CiAgIAoKCgoKCgoKCgogIGxpbmVsX0xpbkVsMmQoZ2VvX01lc2gyJiBt
c2gsIHVpbnQgbCwgdWludCBwLCBsaW5lbF9Cb3VuZGFyeUNvbmRpdGlvbiogYmMgPSBfX251bGwg
KTsKICBpbmxpbmUgdmlydHVhbCB+bGluZWxfTGluRWwyZCgpOwogIAogICAKICBpbmxpbmUgdWlu
dCBkaW0oKSBjb25zdDsKCiAgdmlydHVhbCBvc3RyZWFtJiBpbmZvKG9zdHJlYW0mIG9zLCB1aW50
IG1vZGUgPSAwKSBjb25zdDsKCiAgIAogIGlubGluZSB1aW50IG5lbG0oKSBjb25zdDsKCiAgIAog
IGlubGluZSBsaW5lbF9IUDJkU2Nhbiogc2NhbigpIGNvbnN0OwoKICBpbmxpbmUgc2hvcnQgbCho
cF9IUDJkWFhYPHJlYWw+JiBlbG0pIHsKICAgIEFkanVzdCYgYWRqKGFkal9bZWxtLnN1cHBvcnQo
KS5rZXkoKV0pOwogICAgcmV0dXJuIGFkai5sOwogIH0KCiAgIAoKCgoKCgogIHZvaWQgYWRqdXN0
KGhwX0hQMmRYWFg8cmVhbD4mIGVsbSwgaW50IGwsIGludCBwKTsKCiAgIAoKCgoKCgoKCgoKCgoK
CiAgdm9pZCByZWJ1aWxkKCk7CgogICAKCiAgdmlydHVhbCB2b2lkIHNrZXRjaChvc3RyZWFtJiBv
cywgUmVhbDJkIG9mZnNldCwgcmVhbCBzY2FsZSwgdWludCBkZWx0YSA9IDIpOwoKcHJvdGVjdGVk
OgogICAKCiAgc3RydWN0IENvbnRyb2wgewogICAgIAoKCgoKCgoKCiAgICB1Y2hhciAgICAgICAg
IHRhZzsKCiAgICAgCiAgICB1c2hvcnQgICAgICAgIHA7CgogICAgIAogICAgc3BjX0JGbmNJbmRl
eCBpZHg7CgogICAgIAoKICAgIENvbnRyb2woKSB7IHRhZyA9IDA7IH0KICB9OwoKICAgCgoKICBz
dHJ1Y3QgQWRqdXN0IHsKICAgICAKCgogICAgc2hvcnQgcDsKCiAgICAgCgoKICAgIHNob3J0IGw7
CgogICAgIAoKCiAgICBBZGp1c3QoKSB7IHAgPSBsID0gMDsgfQogIH07CgogICAKICBnZW9fTWVz
aDImIG1zaF87CgogICAKICBsaW5lbF9Cb3VuZGFyeUNvbmRpdGlvbiogYmNfOwoKICAgCiAgdGJ4
X0Nvbm5lY3RvcjxocF9IUDJkWFhYPHJlYWw+KiwgMT4qIGVsbV87CgogICAKICB0YnhfRHluQXJy
YXk8Q29udHJvbD4gY3RybDBfOwoKICAgCiAgdGJ4X0R5bkFycmF5PENvbnRyb2w+IGN0cmwxXzsK
CiAgIAogIHRieF9EeW5BcnJheTxDb250cm9sPiBjdHJsMl87CgogICAKICB0YnhfRHluQXJyYXk8
QWRqdXN0PiBhZGpfOwoKICAgCiAgdWludCBkaW1fOwoKICAgCiAgdWludCBuZWxtXzsKCiAgIAog
IGJvb2wgcmVidWlsZF87CgogICAKCgoKCgoKCgoKCgogIHZpcnR1YWwgdm9pZCByZWJ1aWxkMF8o
Z2VvX0Nvbm5lY3RvcjImIGNudHIsIGludCBsLCBpbnQmIEwsIGludCYgUCk7CiAgdmlydHVhbCB2
b2lkIHJlYnVpbGQxXyhnZW9fVHJpYW5nbGUyZCYgY2VsbCwgc3BjX1RDb2x1bW48cmVhbD4qIFQg
PSBfX251bGwgKTsKICB2aXJ0dWFsIHZvaWQgcmVidWlsZDFfKGdlb19RdWFkMmQmIGNlbGwsIHNw
Y19UQ29sdW1uPHJlYWw+KiBUID0gX19udWxsICk7CgogIGlubGluZSB2b2lkIGRlYWN0aXZhdGVf
KGdlb19FZGdlJiBlZGcpOwogIGlubGluZSB2b2lkIGRlYWN0aXZhdGVfKGdlb19WZXJ0ZXgmIHZ0
eCk7Cn07CgppbmxpbmUgdWludCBsaW5lbF9MaW5FbDJkOjpkaW0oKSBjb25zdCB7IAogIGlmIChy
ZWJ1aWxkXykgKChsaW5lbF9MaW5FbDJkKil0aGlzKS0+cmVidWlsZCgpOyAgIAogIHJldHVybiBk
aW1fOyAKfQoKaW5saW5lIHVpbnQgbGluZWxfTGluRWwyZDo6bmVsbSgpIGNvbnN0IHsgCiAgaWYg
KHJlYnVpbGRfKSAoKGxpbmVsX0xpbkVsMmQqKXRoaXMpLT5yZWJ1aWxkKCk7ICAgCiAgcmV0dXJu
IG5lbG1fOyAKfQoKaW5saW5lIGxpbmVsX0hQMmRTY2FuKiBsaW5lbF9MaW5FbDJkOjpzY2FuKCkg
Y29uc3QgeyAKICBpZiAocmVidWlsZF8pICgobGluZWxfTGluRWwyZCopdGhpcyktPnJlYnVpbGQo
KTsgICAKICByZXR1cm4gbmV3IHRieF9QTGlzdFNjYW48aHBfSFAyZFhYWDxyZWFsPiA+KCplbG1f
KTsKfQoKaW5saW5lIHZvaWQgbGluZWxfTGluRWwyZDo6ZGVhY3RpdmF0ZV8oZ2VvX0VkZ2UmIGVk
ZykgewogIGN0cmwxX1tlZGcuY2hpbGQoMCktPmtleSgpXS50YWcgfD0gMjsKICBjdHJsMV9bZWRn
LmNoaWxkKDEpLT5rZXkoKV0udGFnIHw9IDI7CiAgY3RybDBfW2VkZy5jaGlsZCgxKS0+dmVydGV4
KDApLT5rZXkoKV0udGFnIHw9IDI7Cn0KCmlubGluZSB2b2lkIGxpbmVsX0xpbkVsMmQ6OmRlYWN0
aXZhdGVfKGdlb19WZXJ0ZXgmIHZ0eCkgewogIGN0cmwwX1t2dHguY2hpbGQoMCktPmtleSgpXS50
YWcgfD0gMjsKfQoKCiMgMTUgImxpbmVsLmNjIiAyCgoKIyAxICJsaW5lbEJGb3JtLmgiIDEKIAoK
CgoKCgoKCgoKCgoKIAoKY2xhc3MgbGluZWxfQkZvcm0gOiBwdWJsaWMgb3BfQmlsaW5lYXJGb3Jt
PHJlYWw+IHsKCiBwdWJsaWM6CiAgIAoKCiAgaW5saW5lIGxpbmVsX0JGb3JtKHVpbnQgZ2F1c3Ms
IHRieF9Gb3JtdWxhICptYXRtYXQpOwogIGlubGluZSB2aXJ0dWFsIH5saW5lbF9CRm9ybSgpOwoK
ICAgCgoKCgoKCiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IHNwY19FbGVtZW50PHJlYWw+JiBlbG1Y
LCAKCQkgIGNvbnN0IHNwY19FbGVtZW50PHJlYWw+JiBlbG1ZLCAKCQkgIHNwY19FbGVtZW50TWF0
cml4PHJlYWw+JiBlbSk7IAoKICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgaHBfSFAyZDAwMSYgZWxt
WCwgY29uc3QgaHBfSFAyZDAwMSYgZWxtWSwgCgkJICBzcGNfRWxlbWVudE1hdHJpeDxyZWFsPiYg
ZW0pOyAKCiBwcml2YXRlOgogICAKICB1aW50ICBuXzsKCiAgIAogIFJlYWwyZCogc2hwZm5jRF87
CiAKICAgCiAgdWludCBnYXVzc187CiAgCiAgIAogIGNvbnN0IHRieF9Gb3JtdWxhICptYXRtYXRf
Owp9OyAKCgppbmxpbmUgbGluZWxfQkZvcm06OmxpbmVsX0JGb3JtKHVpbnQgZ2F1c3MsIHRieF9G
b3JtdWxhICptYXRtYXQpewogIG5fID0gMDsgc2hwZm5jRF8gPSBfX251bGwgOwogIGdhdXNzXyA9
IGdhdXNzOwogIG1hdG1hdF8gPSBtYXRtYXQ7Cn0KCmlubGluZSBsaW5lbF9CRm9ybTo6fmxpbmVs
X0JGb3JtKCkgewogIGRlbGV0ZVtdIHNocGZuY0RfOwp9IAoKCiMgMTcgImxpbmVsLmNjIiAyCgoj
IDEgImxpbmVsTEZvcm0uaCIgMQogCgoKCgoKCgoKCgoKCiAKCiAKCgoKCmNsYXNzIGxpbmVsX0xG
b3JtIDogcHVibGljIGZuY19MaW5lYXJGb3JtPHJlYWw+IHsKCnB1YmxpYzoKICAgCgoKCgoKCgog
IGxpbmVsX0xGb3JtKGNvbnN0IHRieF9Gb3JtdWxhICZzZm9yY2UsIGNvbnN0IHRieF9Gb3JtdWxh
ICZ2Zm9yY2UsCgkgICB1aW50IGdhdXNzID0gMCwgbGluZWxfQm91bmRhcnlDb25kaXRpb24qIGJj
ID0gMCk7IAogIGlubGluZSB+bGluZWxfTEZvcm0oKTsKCiAgIAoKCgoKCgoKICB2b2lkIG9wZXJh
dG9yKCkoY29uc3Qgc3BjX0VsZW1lbnQ8cmVhbD4mIGVsbSwKCQkJICBzcGNfRWxlbWVudE1hdHJp
eDxyZWFsPiYgZW0pOwogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBocF9IUDJkMDAxJiBlbG0sIHNw
Y19FbGVtZW50TWF0cml4PHJlYWw+JiBlbSk7Cgpwcml2YXRlOgogICAKICBjb25zdCB0YnhfRm9y
bXVsYSogc2ZvcmNlXzsKICBjb25zdCB0YnhfRm9ybXVsYSogdmZvcmNlXzsKCiAgIAogIHVpbnQg
ICBnYXVzc187CgogICAKICByZWFsKiAgc2hwZm5jXzsKCiAgIAogIHVpbnQgICBuXzsKCiAgIAoK
ICBsaW5lbF9Cb3VuZGFyeUNvbmRpdGlvbiogYmNfOwp9OyAKCgppbmxpbmUgbGluZWxfTEZvcm06
On5saW5lbF9MRm9ybSgpIHsKICBkZWxldGVbXSBzaHBmbmNfOwp9CgoKIyAxOCAibGluZWwuY2Mi
IDIKCiMgMSAiY3JhY2tlZF9wYW5lbC5oIiAxCgoKCgoKCgoKCgogCgpjbGFzcyBjcmFja2VkX3Bh
bmVsIDogcHVibGljIGdlb19NZXNoMiB7CiAgCiAgY2xhc3MgUyA6IHB1YmxpYyB0YnhfU2Nhbjxn
ZW9fQ2VsbDI+IHsKCiAgICB1aW50ICAgICAgICAgICBpZHhfOwogICAgZ2VvX1F1YWQyZCAqKCYg
Y2VsbF8pWzRdOwoKICAgcHVibGljOgogICAgaW5saW5lIFMoZ2VvX1F1YWQyZCAqY29uc3QoJmNl
bGwpWzRdKTsgCiAgICBpbmxpbmUgUyhjb25zdCBTJiBzY2FuKTsgCiAgICAKICAgIGlubGluZSBi
b29sIGVvcygpIGNvbnN0OwogICAgaW5saW5lIGdlb19DZWxsMiYgb3BlcmF0b3IrKyhpbnQpOwoK
ICAgIGlubGluZSBnZW9fU2NhbjIqIGNsb25lKCkgY29uc3Q7CiAgfTsKCiAgZ2VvX1ZlcnRleCAg
ICAqdnR4X1sxMF07CiAgZ2VvX0VkZ2UgICAgICAqZWRnX1sxM107CiAgZ2VvX1F1YWQgICAgICAq
cWRfWzRdOwoKICBnZW9fUXVhZDJkICpjZWxsX1s0XTsKCiBwdWJsaWM6CiAgY3JhY2tlZF9wYW5l
bCgpOwogIHZpcnR1YWwgfmNyYWNrZWRfcGFuZWwoKTsKCiAgaW5saW5lIHVpbnQgbmNlbGwoKSBj
b25zdDsKICBpbmxpbmUgZ2VvX1NjYW4yKiBzY2FuKCkgY29uc3Q7Cn07CgppbmxpbmUgY3JhY2tl
ZF9wYW5lbDo6Uzo6UyhnZW9fUXVhZDJkKiBjb25zdCgmY2VsbClbNF0pIDogaWR4XygwKSwgY2Vs
bF8oY2VsbCkgewp9CgppbmxpbmUgY3JhY2tlZF9wYW5lbDo6Uzo6Uyhjb25zdCBTJiBzY2FuKSA6
IGlkeF8oc2Nhbi5pZHhfKSwgIGNlbGxfKHNjYW4uY2VsbF8pIHsKfQoKaW5saW5lIGJvb2wgY3Jh
Y2tlZF9wYW5lbDo6Uzo6ZW9zKCkgY29uc3QgewogIHJldHVybiBpZHhfID09IDQ7Cn0KCmlubGlu
ZSBnZW9fQ2VsbDImIGNyYWNrZWRfcGFuZWw6OlM6Om9wZXJhdG9yKysoaW50KSB7CiAgcmV0dXJu
ICpjZWxsX1tpZHhfKytdOwp9CgppbmxpbmUgZ2VvX1NjYW4yKiBjcmFja2VkX3BhbmVsOjpTOjpj
bG9uZSgpIGNvbnN0IHsKICByZXR1cm4gbmV3IFMoKnRoaXMpOwp9CgppbmxpbmUgdWludCBjcmFj
a2VkX3BhbmVsOjpuY2VsbCgpIGNvbnN0IHsKICByZXR1cm4gNDsKfQoKaW5saW5lIGdlb19TY2Fu
MiogY3JhY2tlZF9wYW5lbDo6c2NhbigpIGNvbnN0IHsKICByZXR1cm4gbmV3IFMoY2VsbF8pOwp9
CgoKIyAxOSAibGluZWwuY2MiIDIKCgoKIAoKIyAxICIuLi9nZW9tZXRyeS5oIiAxCiAKCgoKCgoK
CgoKIyAxICIuLi9nZW9tZXRyeS9nZW9MaXN0cy5oIiAxCiAKCgoKCgoKCiMgMSAiLi4vZ2VvbWV0
cnkvLi4vdG9vbGJveC90YnhQb3N0cHJvY2Vzcy5oIiAxCiAKCgoKCgoKCgojIDEgIi4uL2dlb21l
dHJ5Ly4uL3Rvb2xib3gvdGJ4RGVidWcuaCIgMQogCgoKCgoKCgoKCgogCgoKIAoKCiAKCgoKCgoj
IDEwICIuLi9nZW9tZXRyeS8uLi90b29sYm94L3RieFBvc3Rwcm9jZXNzLmgiIDIKCgogCgp0ZW1w
bGF0ZTxjbGFzcyBGPgpjbGFzcyB0YnhfQ2VsbFBvc3Rwcm9jZXNzOwoKdGVtcGxhdGU8Y2xhc3Mg
Rj4Kb3N0cmVhbSYgb3BlcmF0b3I8PCAob3N0cmVhbSYgb3MsIGNvbnN0IHRieF9DZWxsUG9zdHBy
b2Nlc3M8Rj4mIHApIHsKICByZXR1cm4gcC5pbmZvKG9zKTsgCn0KCiAKCgoKCgoKCgp0ZW1wbGF0
ZTxjbGFzcyBGPgpjbGFzcyB0YnhfQ2VsbFBvc3Rwcm9jZXNzIHsKICBmcmllbmQgb3N0cmVhbSYg
b3BlcmF0b3I8PCA8PiAob3N0cmVhbSYgb3MsIGNvbnN0IHRieF9DZWxsUG9zdHByb2Nlc3MmIHAp
OwoKcHVibGljOgogICAKICB2aXJ0dWFsIG9zdHJlYW0mIGluZm8ob3N0cmVhbSYgb3MpIGNvbnN0
IHsgcmV0dXJuIG9zOyB9CgogICAKCgoKCiAgdmlydHVhbCB2b2lkIG9wZXJhdG9yKCkgKGNvbnN0
IHNwY19FbGVtZW50PEY+JiBlbG0pIHt9CgogICAKCgoKCiAgdmlydHVhbCB2b2lkIG9wZXJhdG9y
KCkgKGNvbnN0IGdlb19DZWxsJiBjZWxsKSB7fQp9OwoKIAoKIAoKCgoKCgoKCgoKCnRlbXBsYXRl
PGNsYXNzIEY+CmNsYXNzIHRieF9HbG9iYWxQb3N0cHJvY2VzcyB7CgpwdWJsaWM6CiAgIAoKCgog
IHRieF9HbG9iYWxQb3N0cHJvY2VzcyhzcGNfU3BhY2U8Rj4mIHNwYykgOiBzcGNfKCZzcGMpLCBt
c2hfKDApIHt9CgogICAKCgoKICB0YnhfR2xvYmFsUG9zdHByb2Nlc3MoZ2VvX01lc2gmIG1zaCkg
OiBzcGNfKDApLCBtc2hfKCZtc2gpIHt9CgogICAKCgoKCgogIGlubGluZSB2b2lkIG9wZXJhdG9y
KCkgKHRieF9DZWxsUG9zdHByb2Nlc3M8Rj4mIHBlckNlbGwpIGNvbnN0OwoKcHJpdmF0ZToKICAg
CiAgc3BjX1NwYWNlPEY+KiBzcGNfOwoKICAgCiAgZ2VvX01lc2gqIG1zaF87Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgRj4Kdm9pZCB0YnhfR2xvYmFsUG9zdHByb2Nlc3M8Rj46Om9wZXJhdG9yKCkgCiAg
KHRieF9DZWxsUG9zdHByb2Nlc3M8Rj4mIHBlckNlbGwpIGNvbnN0IHsKCiAgaWYgKHNwY18pIHsK
ICAgIGlmKCAwICAhPTApIGNvdXQgPDwgICAnWycgPDwgICIuLi9nZW9tZXRyeS8uLi90b29sYm94
L3RieFBvc3Rwcm9jZXNzLmgiIDw8ICIsIGxpbmUgIiAKCTw8IDEwNyA8PCAiXSB0YnhfR2xvYmFs
UG9zdHByb2Nlc3M6Om9wZXJhdG9yKCkgLS0gc2Nhbm5pbmciICA8PCAiICIgPDwgICAKCSJzcGFj
ZSIgIDw8IGVuZGw7IDsKICAgIHNwY19TcGFjZTxGPjo6c3BjX1NjYW4qIHNjID0gc3BjXy0+c2Nh
bigpOwogICAgd2hpbGUgKCpzYykgewogICAgICBzcGNfRWxlbWVudDxGPiYgZWxtID0gKCpzYykr
KzsKICAgICAgcGVyQ2VsbChlbG0pOwogICAgfSAgCiAgICBkZWxldGUgc2M7CiAgfSAgCgogIGlm
IChtc2hfKSB7CiAgICBpZiggMCAgIT0wKSBjb3V0IDw8ICAgJ1snIDw8ICAiLi4vZ2VvbWV0cnkv
Li4vdG9vbGJveC90YnhQb3N0cHJvY2Vzcy5oIiA8PCAiLCBsaW5lICIgCgk8PCAxMTkgPDwgIl0g
dGJ4X0dsb2JhbFBvc3Rwcm9jZXNzOjpvcGVyYXRvcigpIC0tIHNjYW5uaW5nIiAgPDwgIiAiIDw8
ICAgCgkibWVzaCIgIDw8IGVuZGw7IDsKICAgIGdlb19TY2FuKiBzYyA9IG1zaF8tPnNjYW4oKTsK
ICAgIHdoaWxlICgqc2MpIHsKICAgICAgZ2VvX0NlbGwmIGNlbGwgPSAoKnNjKSsrOwogICAgICBp
ZiggMCAgIT0wKSBjb3V0IDw8ICAgJ1snIDw8ICAiLi4vZ2VvbWV0cnkvLi4vdG9vbGJveC90YnhQ
b3N0cHJvY2Vzcy5oIiA8PCAiLCBsaW5lICIgCgkgIDw8IDEyNSA8PCAiXSB0YnhfR2xvYmFsUG9z
dHByb2Nlc3M6Om9wZXJhdG9yKCkgLS0gY2VsbCA9IiAgPDwgIiAiIDw8ICAgCgkgIGNlbGwgIDw8
IGVuZGw7IDsKICAgICAgcGVyQ2VsbChjZWxsKTsKICAgIH0gIAogICAgZGVsZXRlIHNjOwogIH0g
IAp9CgoKIyA5ICIuLi9nZW9tZXRyeS9nZW9MaXN0cy5oIiAyCgojIDEgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9oYXNoX3NldCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaGFzaF9z
ZXQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKdGVt
cGxhdGUgPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0hhc2hGY24gPSBoYXNoPF9WYWx1ZT4sCiAgICAg
ICAgICBjbGFzcyBfRXF1YWxLZXkgPSBlcXVhbF90bzxfVmFsdWU+LAogICAgICAgICAgY2xhc3Mg
X0FsbG9jID0gYWxsb2NhdG9yPCBfVmFsdWUgPiAgPgoKCgoKY2xhc3MgaGFzaF9zZXQKewpwcml2
YXRlOgogIHR5cGVkZWYgaGFzaHRhYmxlPF9WYWx1ZSwgX1ZhbHVlLCBfSGFzaEZjbiwgX0lkZW50
aXR5PF9WYWx1ZT4sIAogICAgICAgICAgICAgICAgICAgIF9FcXVhbEtleSwgX0FsbG9jPiBfSHQ7
CiAgX0h0IF9NX2h0OwoKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjprZXlfdHlwZSBr
ZXlfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwog
IHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpoYXNoZXIgaGFzaGVyOwogIHR5cGVkZWYgdHlwZW5hbWUg
X0h0OjprZXlfZXF1YWwga2V5X2VxdWFsOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6c2l6ZV90
eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6ZGlmZmVyZW5jZV90eXBlIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfcG9pbnRlciBwb2lu
dGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CgogIHR5
cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5
cGVuYW1lIF9IdDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogIHR5cGVkZWYgdHlw
ZW5hbWUgX0h0OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgaGFzaGVyIGhhc2hf
ZnVuY3QoKSBjb25zdCB7IHJldHVybiBfTV9odC5oYXNoX2Z1bmN0KCk7IH0KICBrZXlfZXF1YWwg
a2V5X2VxKCkgY29uc3QgeyByZXR1cm4gX01faHQua2V5X2VxKCk7IH0KICBhbGxvY2F0b3JfdHlw
ZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01faHQuZ2V0X2FsbG9jYXRvcigpOyB9
CgpwdWJsaWM6CiAgaGFzaF9zZXQoKQogICAgOiBfTV9odCgxMDAsIGhhc2hlcigpLCBrZXlfZXF1
YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBoYXNoX3NldChzaXplX3R5cGUg
X19uKQogICAgOiBfTV9odChfX24sIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5
cGUoKSkge30KICBoYXNoX3NldChzaXplX3R5cGUgX19uLCBjb25zdCBoYXNoZXImIF9faGYpCiAg
ICA6IF9NX2h0KF9fbiwgX19oZiwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CiAg
aGFzaF9zZXQoc2l6ZV90eXBlIF9fbiwgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1
YWwmIF9fZXFsLAogICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0
b3JfdHlwZSgpKQogICAgOiBfTV9odChfX24sIF9faGYsIF9fZXFsLCBfX2EpIHt9CgoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgaGFzaF9zZXQoX0lucHV0SXRlcmF0b3IgX19m
LCBfSW5wdXRJdGVyYXRvciBfX2wpCiAgICA6IF9NX2h0KDEwMCwgaGFzaGVyKCksIGtleV9lcXVh
bCgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19s
KTsgfQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBoYXNoX3NldChfSW5wdXRJ
dGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbikKICAgIDogX01f
aHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9N
X2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOyB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXJhdG9yPgogIGhhc2hfc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19s
LCBzaXplX3R5cGUgX19uLAogICAgICAgICAgIGNvbnN0IGhhc2hlciYgX19oZikKICAgIDogX01f
aHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01faHQu
aW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7IH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgaGFzaF9zZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNp
emVfdHlwZSBfX24sCiAgICAgICAgICAgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1
YWwmIF9fZXFsLAogICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0
b3JfdHlwZSgpKQogICAgOiBfTV9odChfX24sIF9faGYsIF9fZXFsLCBfX2EpCiAgICB7IF9NX2h0
Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOyB9CiMgMTQyICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
bGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2hhc2hfc2V0LmgiIDMK
CgpwdWJsaWM6CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9odC5zaXplKCk7
IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV9odC5tYXhfc2l6ZSgp
OyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0LmVtcHR5KCk7IH0KICB2b2lk
IHN3YXAoaGFzaF9zZXQmIF9faHMpIHsgX01faHQuc3dhcChfX2hzLl9NX2h0KTsgfQogIGZyaWVu
ZCBib29sIG9wZXJhdG9yPT0gPD4gIChjb25zdCBoYXNoX3NldCYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzaF9zZXQmKTsKCiAgaXRlcmF0
b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9odC5iZWdpbigpOyB9CiAgaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gX01faHQuZW5kKCk7IH0KCnB1YmxpYzoKICBwYWlyPGl0ZXJhdG9y
LCBib29sPiBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCiAgICB7CiAgICAgIHBhaXI8
dHlwZW5hbWUgX0h0OjppdGVyYXRvciwgYm9vbD4gX19wID0gX01faHQuaW5zZXJ0X3VuaXF1ZShf
X29iaik7CiAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJvb2w+KF9fcC5maXJzdCwgX19wLnNl
Y29uZCk7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGlu
c2VydChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkgCiAgICB7IF9NX2h0
Lmluc2VydF91bmlxdWUoX19mLF9fbCk7IH0KCgoKCgoKCiAgcGFpcjxpdGVyYXRvciwgYm9vbD4g
aW5zZXJ0X25vcmVzaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQogIHsKICAgIHBhaXI8dHlw
ZW5hbWUgX0h0OjppdGVyYXRvciwgYm9vbD4gX19wID0gCiAgICAgIF9NX2h0Lmluc2VydF91bmlx
dWVfbm9yZXNpemUoX19vYmopOwogICAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsIGJvb2w+KF9fcC5m
aXJzdCwgX19wLnNlY29uZCk7CiAgfQoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBf
X2tleSkgY29uc3QgeyByZXR1cm4gX01faHQuZmluZChfX2tleSk7IH0KCiAgc2l6ZV90eXBlIGNv
dW50KGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QgeyByZXR1cm4gX01faHQuY291bnQoX19r
ZXkpOyB9CiAgCiAgcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtl
eV90eXBlJiBfX2tleSkgY29uc3QKICAgIHsgcmV0dXJuIF9NX2h0LmVxdWFsX3JhbmdlKF9fa2V5
KTsgfQoKICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSB7cmV0dXJuIF9N
X2h0LmVyYXNlKF9fa2V5KTsgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19pdCkgeyBfTV9odC5l
cmFzZShfX2l0KTsgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19mLCBpdGVyYXRvciBfX2wpIHsg
X01faHQuZXJhc2UoX19mLCBfX2wpOyB9CiAgdm9pZCBjbGVhcigpIHsgX01faHQuY2xlYXIoKTsg
fQoKcHVibGljOgogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX2hpbnQpIHsgX01faHQucmVzaXpl
KF9faGludCk7IH0KICBzaXplX3R5cGUgYnVja2V0X2NvdW50KCkgY29uc3QgeyByZXR1cm4gX01f
aHQuYnVja2V0X2NvdW50KCk7IH0KICBzaXplX3R5cGUgbWF4X2J1Y2tldF9jb3VudCgpIGNvbnN0
IHsgcmV0dXJuIF9NX2h0Lm1heF9idWNrZXRfY291bnQoKTsgfQogIHNpemVfdHlwZSBlbGVtc19p
bl9idWNrZXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2h0LmVsZW1zX2lu
X2J1Y2tldChfX24pOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfSGFzaEZj
biwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIApvcGVyYXRvcj09
KGNvbnN0IGhhc2hfc2V0PF9WYWx1ZSxfSGFzaEZjbixfRXF1YWxLZXksX0FsbG9jPiYgX19oczEs
CiAgICAgICAgICAgY29uc3QgaGFzaF9zZXQ8X1ZhbHVlLF9IYXNoRmNuLF9FcXVhbEtleSxfQWxs
b2M+JiBfX2hzMikKewogIHJldHVybiBfX2hzMS5fTV9odCA9PSBfX2hzMi5fTV9odDsKfQoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xh
c3MgX0FsbG9jPgppbmxpbmUgdm9pZCAKc3dhcChoYXNoX3NldDxfVmFsLF9IYXNoRmNuLF9FcXVh
bEtleSxfQWxsb2M+JiBfX2hzMSwKICAgICBoYXNoX3NldDxfVmFsLF9IYXNoRmNuLF9FcXVhbEtl
eSxfQWxsb2M+JiBfX2hzMikKewogIF9faHMxLnN3YXAoX19oczIpOwp9CgoKCgoKdGVtcGxhdGUg
PGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0hhc2hGY24gPSBoYXNoPF9WYWx1ZT4sCiAgICAgICAgICBj
bGFzcyBfRXF1YWxLZXkgPSBlcXVhbF90bzxfVmFsdWU+LAogICAgICAgICAgY2xhc3MgX0FsbG9j
ID0gYWxsb2NhdG9yPCBfVmFsdWUgPiAgPgoKCgoKY2xhc3MgaGFzaF9tdWx0aXNldAp7CnByaXZh
dGU6CiAgdHlwZWRlZiBoYXNodGFibGU8X1ZhbHVlLCBfVmFsdWUsIF9IYXNoRmNuLCBfSWRlbnRp
dHk8X1ZhbHVlPiwgCiAgICAgICAgICAgICAgICAgICAgX0VxdWFsS2V5LCBfQWxsb2M+IF9IdDsK
ICBfSHQgX01faHQ7CgpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmtleV90eXBlIGtl
eV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfSHQ6Omhhc2hlciBoYXNoZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBf
SHQ6OmtleV9lcXVhbCBrZXlfZXF1YWw7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpzaXplX3R5
cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpkaWZmZXJlbmNlX3R5cGUgZGlm
ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9wb2ludGVyIHBvaW50
ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsK
ICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKCiAgdHlw
ZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVkZWYgdHlw
ZW5hbWUgX0h0Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgdHlwZWRlZiB0eXBl
bmFtZSBfSHQ6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBoYXNoZXIgaGFzaF9m
dW5jdCgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0Lmhhc2hfZnVuY3QoKTsgfQogIGtleV9lcXVhbCBr
ZXlfZXEoKSBjb25zdCB7IHJldHVybiBfTV9odC5rZXlfZXEoKTsgfQogIGFsbG9jYXRvcl90eXBl
IGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9odC5nZXRfYWxsb2NhdG9yKCk7IH0K
CnB1YmxpYzoKICBoYXNoX211bHRpc2V0KCkKICAgIDogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5
X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CiAgZXhwbGljaXQgaGFzaF9tdWx0aXNldChz
aXplX3R5cGUgX19uKQogICAgOiBfTV9odChfX24sIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxs
b2NhdG9yX3R5cGUoKSkge30KICBoYXNoX211bHRpc2V0KHNpemVfdHlwZSBfX24sIGNvbnN0IGhh
c2hlciYgX19oZikKICAgIDogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9y
X3R5cGUoKSkge30KICBoYXNoX211bHRpc2V0KHNpemVfdHlwZSBfX24sIGNvbnN0IGhhc2hlciYg
X19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKICAgICAgICAgICAgICAgIGNvbnN0IGFsbG9j
YXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV9odChfX24sIF9faGYs
IF9fZXFsLCBfX2EpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgaGFz
aF9tdWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKICAgIDog
X01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7
IF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7IH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+CiAgaGFzaF9tdWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJh
dG9yIF9fbCwgc2l6ZV90eXBlIF9fbikKICAgIDogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2Vx
dWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9f
bCk7IH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgaGFzaF9tdWx0aXNldChf
SW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbiwKICAg
ICAgICAgICAgICAgIGNvbnN0IGhhc2hlciYgX19oZikKICAgIDogX01faHQoX19uLCBfX2hmLCBr
ZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01faHQuaW5zZXJ0X2VxdWFsKF9f
ZiwgX19sKTsgfQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBoYXNoX211bHRp
c2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19u
LAogICAgICAgICAgICAgICAgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9f
ZXFsLAogICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv
cl90eXBlKCkpCiAgICA6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkKICAgIHsgX01faHQu
aW5zZXJ0X2VxdWFsKF9fZiwgX19sKTsgfQojIDMyMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp
bnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9oYXNoX3NldC5oIiAzCgoK
cHVibGljOgogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01faHQuc2l6ZSgpOyB9
CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01faHQubWF4X3NpemUoKTsg
fQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV9odC5lbXB0eSgpOyB9CiAgdm9pZCBz
d2FwKGhhc2hfbXVsdGlzZXQmIGhzKSB7IF9NX2h0LnN3YXAoaHMuX01faHQpOyB9CiAgZnJpZW5k
IGJvb2wgb3BlcmF0b3I9PSA8PiAgKGNvbnN0IGhhc2hfbXVsdGlzZXQmLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hfbXVsdGlzZXQmKTsK
CiAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9odC5iZWdpbigpOyB9CiAgaXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01faHQuZW5kKCk7IH0KCnB1YmxpYzoKICBpdGVy
YXRvciBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCiAgICB7IHJldHVybiBfTV9odC5p
bnNlcnRfZXF1YWwoX19vYmopOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
ICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkgCiAg
ICB7IF9NX2h0Lmluc2VydF9lcXVhbChfX2YsX19sKTsgfQoKCgoKCgoKICBpdGVyYXRvciBpbnNl
cnRfbm9yZXNpemUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCiAgICB7IHJldHVybiBfTV9odC5p
bnNlcnRfZXF1YWxfbm9yZXNpemUoX19vYmopOyB9ICAgIAoKICBpdGVyYXRvciBmaW5kKGNvbnN0
IGtleV90eXBlJiBfX2tleSkgY29uc3QgeyByZXR1cm4gX01faHQuZmluZChfX2tleSk7IH0KCiAg
c2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QgeyByZXR1cm4gX01f
aHQuY291bnQoX19rZXkpOyB9CiAgCiAgcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+IGVxdWFsX3Jh
bmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKICAgIHsgcmV0dXJuIF9NX2h0LmVxdWFs
X3JhbmdlKF9fa2V5KTsgfQoKICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5
KSB7cmV0dXJuIF9NX2h0LmVyYXNlKF9fa2V5KTsgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19p
dCkgeyBfTV9odC5lcmFzZShfX2l0KTsgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19mLCBpdGVy
YXRvciBfX2wpIHsgX01faHQuZXJhc2UoX19mLCBfX2wpOyB9CiAgdm9pZCBjbGVhcigpIHsgX01f
aHQuY2xlYXIoKTsgfQoKcHVibGljOgogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX2hpbnQpIHsg
X01faHQucmVzaXplKF9faGludCk7IH0KICBzaXplX3R5cGUgYnVja2V0X2NvdW50KCkgY29uc3Qg
eyByZXR1cm4gX01faHQuYnVja2V0X2NvdW50KCk7IH0KICBzaXplX3R5cGUgbWF4X2J1Y2tldF9j
b3VudCgpIGNvbnN0IHsgcmV0dXJuIF9NX2h0Lm1heF9idWNrZXRfY291bnQoKTsgfQogIHNpemVf
dHlwZSBlbGVtc19pbl9idWNrZXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsgcmV0dXJuIF9N
X2h0LmVsZW1zX2luX2J1Y2tldChfX24pOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbCwgY2xh
c3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCAK
b3BlcmF0b3I9PShjb25zdCBoYXNoX211bHRpc2V0PF9WYWwsX0hhc2hGY24sX0VxdWFsS2V5LF9B
bGxvYz4mIF9faHMxLAogICAgICAgICAgIGNvbnN0IGhhc2hfbXVsdGlzZXQ8X1ZhbCxfSGFzaEZj
bixfRXF1YWxLZXksX0FsbG9jPiYgX19oczIpCnsKICByZXR1cm4gX19oczEuX01faHQgPT0gX19o
czIuX01faHQ7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9WYWwsIGNsYXNzIF9IYXNoRmNuLCBjbGFz
cyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgCnN3YXAoaGFzaF9tdWx0aXNl
dDxfVmFsLF9IYXNoRmNuLF9FcXVhbEtleSxfQWxsb2M+JiBfX2hzMSwKICAgICBoYXNoX211bHRp
c2V0PF9WYWwsX0hhc2hGY24sX0VxdWFsS2V5LF9BbGxvYz4mIF9faHMyKSB7CiAgX19oczEuc3dh
cChfX2hzMik7Cn0KCgoKCgoKCgogCgoKCiAKIAogCiMgMzQgIi91c3IvbGliL2djYy1saWIvaTM4
Ni1saW51eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9oYXNoX3NldCIgMiAzCgoK
CgogCiAKIAojIDEwICIuLi9nZW9tZXRyeS9nZW9MaXN0cy5oIiAyCgoKCiAKCiAKCgoKCgoKCgpj
bGFzcyBnZW9fVmVydGV4SW5mbyB7CiAgZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwgKG9zdHJl
YW0mIG9zLCBjb25zdCBnZW9fVmVydGV4SW5mbyYgdik7CgpwdWJsaWM6CiAgIAoKCgogIGdlb19W
ZXJ0ZXhJbmZvKFJlYWwzZCBjb29yZCwgdWludCBpbmRleCA9IDApIDogCiAgICBpbmRleF8oaW5k
ZXgpLCBjb29yZF8oY29vcmQpIHt9CgogICAKICB2b2lkIGFkZEVkZ2UodWludCBlZGdlKTsKCiAg
IAogIHZvaWQgYWRkRmFjZSh1aW50IGZhY2UpOwoKICAgCiAgdm9pZCBhZGRWb2x1bWUodWludCB2
b2x1bWUpOwoKICAgCiAgdWludCYgaW5kZXgoKTsKCiAgIAogIFJlYWwzZCBjb29yZGluYXRlcygp
IGNvbnN0OwoKcHJpdmF0ZToKICAgCgoKCgogIHVpbnQgaW5kZXhfOwoKICAgCiAgUmVhbDNkIGNv
b3JkXzsKCiAgIAogIGhhc2hfc2V0PHVpbnQ+IGVkZ2VzXzsKCiAgIAogIGhhc2hfc2V0PHVpbnQ+
IGZhY2VzXzsKCiAgIAogIGhhc2hfc2V0PHVpbnQ+IHZvbHVtZXNfOwp9OwoKIAoKIAoKCgoKCgoK
CgoKCmNsYXNzIGdlb19WZXJ0ZXhMaXN0IDogcHVibGljIHRieF9DZWxsUG9zdHByb2Nlc3M8cmVh
bD4gewoKcHVibGljOgogIHR5cGVkZWYgaGFzaF9tYXA8dWludCwgZ2VvX1ZlcnRleEluZm8+Ojpp
dGVyYXRvciBpdGVyYXRvcjsKCiAgdmlydHVhbCBvc3RyZWFtJiBpbmZvKG9zdHJlYW0mIG9zKSBj
b25zdDsKCiAgIAoKCgoKCiAgZW51bSB2dHhJbmZvIHsgQ09PUkQgPSAwLCBFREdFUyA9IDEsIEZB
Q0VTID0gMiwgVk9MVU1FUyA9IDQsIEFMTCA9IDcgfTsKCiAgIAoKICBnZW9fVmVydGV4TGlzdChl
bnVtIHZ0eEluZm8gaW5mbyA9IEFMTCkgOiB2dHhJbmZvXyhpbmZvKSB7fQoKICB2aXJ0dWFsIH5n
ZW9fVmVydGV4TGlzdCgpIHt9CgogICAKCgoKCiAgZ2VvX1ZlcnRleEluZm8qIHZlcnRleCh1aW50
IHYpOwoKICAgCgoKCgoKCiAgZ2VvX1ZlcnRleEluZm8qIGFkZFZlcnRleCh1aW50IHYsIFJlYWwz
ZCBjb29yZCk7CgogICAKICB1aW50IHNpemUoKSBjb25zdCB7IHJldHVybiB2ZXJ0aWNlc18uc2l6
ZSgpOyB9CgogICAKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIHZlcnRpY2VzXy5iZWdpbigp
OyB9CgogICAKICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiB2ZXJ0aWNlc18uZW5kKCk7IH0KCiAg
IAogIGl0ZXJhdG9yIGZpbmQodWludCBrKSB7IHJldHVybiB2ZXJ0aWNlc18uZmluZChrKTsgfQoK
ICAgCgoKCgogIHZpcnR1YWwgdm9pZCBvcGVyYXRvcigpIChjb25zdCBnZW9fQ2VsbCYgY2VsbCk7
CgogICAKCgoKCiAgdmlydHVhbCB2b2lkIG9wZXJhdG9yKCkgKGNvbnN0IHNwY19FbGVtZW50PHJl
YWw+JiBlbG0pOwoKICAgCiAgZW51bSB2dHhJbmZvIHZlcnRleEluZm8oKSBjb25zdCB7IHJldHVy
biB2dHhJbmZvXzsgfQoKcHJpdmF0ZToKICAgCiAgaGFzaF9tYXA8dWludCwgZ2VvX1ZlcnRleElu
Zm8+IHZlcnRpY2VzXzsKCiAgIAogIGVudW0gdnR4SW5mbyB2dHhJbmZvXzsKfTsKCgojIDExICIu
Li9nZW9tZXRyeS5oIiAyCgoKCiMgMjQgImxpbmVsLmNjIiAyCgojIDEgIi4uL29wZXJhdG9yLmgi
IDEKIAoKCgoKCgojIDEgIi4uL29wZXJhdG9yL29wQ0cuaCIgMQogCgoKCgoKCgoKCiAKCiAKCgp0
ZW1wbGF0ZTxjbGFzcyBGPgpjbGFzcyBvcF9DRyA6IHB1YmxpYyBvcF9PcGVyYXRvcjxGPiB7Cgog
IG9wX09wZXJhdG9yPEY+KiAgV187CiAgb3BfT3BlcmF0b3I8Rj4mICBBXzsKCiAgcmVhbCBtYXhl
cHNfOwogIHVpbnQgbWF4aXRfOwogIHJlYWwgZXBzXzsKICB1aW50IGl0XzsKCiBwdWJsaWM6CiAg
IAoKCgoKICBpbmxpbmUgb3BfQ0cob3BfT3BlcmF0b3I8Rj4mIEEsIHJlYWwgbWF4ZXBzLCBpbnQg
bWF4aXQgPSAwKTsKCiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IGZuY19GdW5jdGlvbjxGPiYgZm5j
WSwgZm5jX0Z1bmN0aW9uPEY+JiBmbmNYKTsKICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgZm5jX1Zl
Y3RvcjxGPiYgZm5jWSwgZm5jX1ZlY3RvcjxGPiYgZm5jWCk7CgogIG9zdHJlYW0mIGluZm8ob3N0
cmVhbSYgb3MpIGNvbnN0OwogIGlubGluZSBjb25zdCBzcGNfU3BhY2U8Rj4mIHNwYWNlWCgpIGNv
bnN0OwogIGlubGluZSBjb25zdCBzcGNfU3BhY2U8Rj4mIHNwYWNlWSgpIGNvbnN0Owp9OwoKdGVt
cGxhdGU8Y2xhc3MgRj4KaW5saW5lIG9wX0NHPEY+OjpvcF9DRyhvcF9PcGVyYXRvcjxGPiYgQSwg
cmVhbCBtYXhlcHMsIGludCBtYXhpdCkgOiBBXyhBKSB7CiAKICAgIFdfID0gX19udWxsIDsgbWF4
ZXBzXyA9IG1heGVwcyAqIG1heGVwczsgbWF4aXRfID0gbWF4aXQ7IAp9Cgp0ZW1wbGF0ZTxjbGFz
cyBGPgppbmxpbmUgY29uc3Qgc3BjX1NwYWNlPEY+JiBvcF9DRzxGPjo6c3BhY2VYKCkgY29uc3Qg
eyAKICByZXR1cm4gQV8uc3BhY2VZKCk7IAp9Cgp0ZW1wbGF0ZTxjbGFzcyBGPgppbmxpbmUgY29u
c3Qgc3BjX1NwYWNlPEY+JiBvcF9DRzxGPjo6c3BhY2VZKCkgY29uc3QgeyAKICByZXR1cm4gQV8u
c3BhY2VYKCk7IAp9CgogCgojIDEgIi4uL29wZXJhdG9yL29wQ0cudCIgMQogCgoKCgoKCgogCgp0
ZW1wbGF0ZTxjbGFzcyBGPgp2b2lkIG9wX0NHPEY+OjpvcGVyYXRvcigpKGNvbnN0IGZuY19GdW5j
dGlvbjxGPiYgZm5jWSwgZm5jX0Z1bmN0aW9uPEY+JiBmbmNYKSB7CgogIGNvbnN0IGZuY19WZWN0
b3I8Rj4qIGZuY1lBOwogIGlmICgoZm5jWUEgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgZm5jX1ZlY3Rv
cjxGPio+KCZmbmNZKSkpIHsKICAgIGZuY19WZWN0b3I8Rj4qIGZuY1hBOwogICAgaWYgKChmbmNY
QSA9IGR5bmFtaWNfY2FzdDxmbmNfVmVjdG9yPEY+Kj4oJmZuY1gpKSkgewogICAgICAoKnRoaXMp
KCpmbmNZQSwgKmZuY1hBKTsgcmV0dXJuOwogICAgfQogIH0KCiAgY2VyciA8PCAnWycgPDwgICIu
Li9vcGVyYXRvci9vcENHLnQiIDw8ICIsIGxpbmUgIiA8PCAyMjsKICBjZXJyIDw8ICJdIG9wX0NH
OjpvcGVyYXRvcigpIDogdW5rbm93biB0eXBlIG9mIGZ1bmN0aW9uXG4iOwogIGV4aXQoMSk7Cn0K
CnRlbXBsYXRlPGNsYXNzIEY+Cm9zdHJlYW0mIG9wX0NHPEY+OjppbmZvKG9zdHJlYW0mIG9zKSBj
b25zdCB7CgogIHJldHVybiBvcyA8PCAib3BfQ0coZXBzID0gIiA8PCBlcHNfIDw8ICIsIGl0ID0g
IiA8PCBpdF8gPDwgJyknOwp9CiMgNjEgIi4uL29wZXJhdG9yL29wQ0cuaCIgMgoKCgojIDggIi4u
L29wZXJhdG9yLmgiIDIKCiMgMSAiLi4vb3BlcmF0b3Ivb3BHTVJlcy5oIiAxCiAKCgoKCgoKCgoK
IAoKIAoKCnRlbXBsYXRlPGNsYXNzIEY+CmNsYXNzIG9wX0dNUmVzIDogcHVibGljIG9wX09wZXJh
dG9yPEY+IHsKCiAgc3RydWN0IFIgewogICAgUiogICAgICAgICAgICAgcmlnaHQ7CiAgICBSKiAg
ICAgICAgICAgICBsZWZ0OwogICAgZm5jX1ZlY3RvcjxGPiogdjsKICAgIEYgICAgICAgICAgICAg
IHNpbjsKICAgIEYgICAgICAgICAgICAgIGNvczsKICAgIEYgICAgICAgICAgICAgIGhbMV07Cgog
ICAgUihSKiBsbmsgPSBfX251bGwgKSB7IHJpZ2h0ID0gX19udWxsIDsgdiA9IF9fbnVsbCA7IGlm
ICgobGVmdCA9IGxuaykpIAogICAgICBsbmstPnJpZ2h0ID0gdGhpczsgfQogICAgflIoKSB7IGRl
bGV0ZSB2OyB9CgogICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzejAsIGludCBzejEpIHsg
CiAgICAgIHJldHVybiBuZXcgY2hhcltzejAgKyAoc3oxIC0gMSkgKiBzaXplb2YocmVhbCldOwog
ICAgfQogIH07CgogIG9wX09wZXJhdG9yPEY+KiAgV187CiAgb3BfT3BlcmF0b3I8Rj4mICBBXzsK
CiAgcmVhbCBtYXhlcHNfOwogIHVpbnQgbWF4aXRfOwogIHJlYWwgZXBzXzsKICB1aW50IGl0XzsK
ICB1aW50IHJzXzsKCiBwdWJsaWM6CiAgIAoKCgoKCiAgb3BfR01SZXMob3BfT3BlcmF0b3I8Rj4m
IEEsIHJlYWwgbWF4ZXBzLCBpbnQgbWF4aXQgPSAwLCB1aW50IHJzID0gMCk7CiAgfm9wX0dNUmVz
KCkgewogICAgZGVsZXRlIFdfOwogIH0KCiAgIAoKCgoKCgogIHZvaWQgb3BlcmF0b3IoKShjb25z
dCBmbmNfRnVuY3Rpb248Rj4mIGZuY1ksIGZuY19GdW5jdGlvbjxGPiYgZm5jWCk7CgogICAKCgoK
CgoKICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgZm5jX1ZlY3RvcjxGPiYgZm5jWSwgZm5jX1ZlY3Rv
cjxGPiYgZm5jWCk7CgogIG9zdHJlYW0mIGluZm8ob3N0cmVhbSYgb3MpIGNvbnN0OwogIGlubGlu
ZSBjb25zdCBzcGNfU3BhY2U8Rj4mIHNwYWNlWCgpIGNvbnN0OwogIGlubGluZSBjb25zdCBzcGNf
U3BhY2U8Rj4mIHNwYWNlWSgpIGNvbnN0OwoKICAgCgoKICBjb25zdCB1aW50IGl0ZXJhdGlvbnMo
KSBjb25zdDsKCiAgIAoKCiAgY29uc3QgcmVhbCBlcHNpbG9uKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0
ZTxjbGFzcyBGPgppbmxpbmUgb3BfR01SZXM8Rj46Om9wX0dNUmVzKG9wX09wZXJhdG9yPEY+JiBB
LCByZWFsIG1heGVwcywgaW50IG1heGl0LCAKCQkJICAgICB1aW50IHJzKSA6IEFfKEEpIHsKICBX
XyA9IF9fbnVsbCA7IG1heGVwc18gPSBtYXhlcHM7IG1heGl0XyA9IG1heGl0OyBycyA9IHJzID8g
cnMgOiBtYXhpdDsgCn0KCnRlbXBsYXRlPGNsYXNzIEY+CmlubGluZSBjb25zdCBzcGNfU3BhY2U8
Rj4mIG9wX0dNUmVzPEY+OjpzcGFjZVgoKSBjb25zdCB7IAogIHJldHVybiBBXy5zcGFjZVkoKTsg
Cn0KCnRlbXBsYXRlPGNsYXNzIEY+CmlubGluZSBjb25zdCBzcGNfU3BhY2U8Rj4mIG9wX0dNUmVz
PEY+OjpzcGFjZVkoKSBjb25zdCB7IAogIHJldHVybiBBXy5zcGFjZVgoKTsgCn0KCiAKCiMgMSAi
Li4vb3BlcmF0b3Ivb3BHTVJlcy50IiAxCiAKCgoKCgoKIyAxICIuLi9vcGVyYXRvci9vcEdNUmVz
LmgiIDEKIAoKCgojIDExMCAiLi4vb3BlcmF0b3Ivb3BHTVJlcy5oIgoKIyA4ICIuLi9vcGVyYXRv
ci9vcEdNUmVzLnQiIDIKCgogCgp0ZW1wbGF0ZTxjbGFzcyBGPgp2b2lkIG9wX0dNUmVzPEY+Ojpv
cGVyYXRvcigpKGNvbnN0IGZuY19GdW5jdGlvbjxGPiYgZm5jWSwgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5jX0Z1bmN0aW9uPEY+JiBm
bmNYKSB7CiAgY29uc3QgZm5jX1ZlY3RvcjxGPiogZm5jWUE7CiAgaWYgKChmbmNZQSA9IGR5bmFt
aWNfY2FzdDxjb25zdCBmbmNfVmVjdG9yPEY+Kj4oJmZuY1kpKSkgewogICAgZm5jX1ZlY3RvcjxG
PiogZm5jWEE7CiAgICBpZiAoKGZuY1hBID0gZHluYW1pY19jYXN0PGZuY19WZWN0b3I8Rj4qPigm
Zm5jWCkpKSB7CiAgICAgICgqdGhpcykoKmZuY1lBLCAqZm5jWEEpOyByZXR1cm47CiAgICB9CiAg
fQoKICBjZXJyIDw8ICdbJyA8PCAgIi4uL29wZXJhdG9yL29wR01SZXMudCIgPDwgIiwgbGluZSAi
IDw8IDIzOwogIGNlcnIgPDwgIl0gb3BfR01SZXM6Om9wZXJhdG9yKCkgOiB1bmtub3duIGZ1bmN0
aW9uXG4iOwogIGV4aXQoMSk7Cn0KCnRlbXBsYXRlPGNsYXNzIEY+Cm9zdHJlYW0mIG9wX0dNUmVz
PEY+OjppbmZvKG9zdHJlYW0mIG9zKSBjb25zdCB7CgogIHJldHVybiBvcyA8PCAib3BfR01SZXMo
ZXBzID0gIiA8PCBlcHNfIDw8ICIsIGl0ID0gIiA8PCBpdF8gPDwgJyknOwp9CgoKCgojIDEwOCAi
Li4vb3BlcmF0b3Ivb3BHTVJlcy5oIiAyCgoKCiMgOSAiLi4vb3BlcmF0b3IuaCIgMgoKIyAxICIu
Li9vcGVyYXRvci9vcERHRVNWLmgiIDEKIAoKCgoKCgoKCgoKCgoKICAKCgoKZXh0ZXJuICJDIiB7
CgoKICBleHRlcm4gdm9pZCAgZGdlc3ZfIChjb25zdCBpbnQmIE4sIGNvbnN0IGludCYgTlJIUywg
CgkJCSAgICAgcmVhbCogQSwgY29uc3QgaW50JiBMREEsIGludCogSVBJViwgCgkJCSAgICAgcmVh
bCogQiwgY29uc3QgaW50JiBMREIsIGludCYgSU5GTyk7CgogIGV4dGVybiB2b2lkICBkZ2V0cmZf
IChjb25zdCBpbnQmIE0sIGNvbnN0IGludCYgTiwKCQkJICAgICAgcmVhbCogQSwgY29uc3QgaW50
JiBMREEsIGludCogSVBJViwKCQkJICAgICAgaW50JiBpbmZvKTsKCiAgZXh0ZXJuIHZvaWQgIGRn
Y29uXyAoY29uc3QgY2hhciYgTk9STSwgY29uc3QgaW50JiBOLAoJCQkgICAgIHJlYWwqIEEsIGNv
bnN0IGludCYgTERBLCBjb25zdCByZWFsJiBBTk9STSwKCQkJICAgICByZWFsJiBSQ09ORCwgcmVh
bCogV09SSywgaW50KiBJV09SSywKCQkJICAgICBpbnQmIGluZm8pOwoKICBleHRlcm4gdm9pZCAg
ZGdlc3Z4XyAoY29uc3QgY2hhciYgRkFDVCwgY29uc3QgY2hhciYgVFJBTlMsCgkJCSAgICAgIGNv
bnN0IGludCYgTiwgY29uc3QgaW50JiBOUkhTLCAKCQkJICAgICAgcmVhbCogQSwgY29uc3QgaW50
JiBMREEsIAoJCQkgICAgICByZWFsKiBBRiwgY29uc3QgaW50JiBMREFELAoJCQkgICAgICBpbnQq
IElQSVYsIGNoYXImIEVRVUVELCAKCQkJICAgICAgcmVhbCogUiwKCQkJICAgICAgcmVhbCogQywg
CgkJCSAgICAgIHJlYWwqIEIsIGNvbnN0IGludCYgTERCLAoJCQkgICAgICByZWFsKiBYLCBjb25z
dCBpbnQmIExEWCwKCQkJICAgICAgcmVhbCYgUkNPTkQsIHJlYWwmIEZFUlIsIHJlYWwmIEJFUlIs
CgkJCSAgICAgIHJlYWwqIFdPUkssIGludCogSVdPUkssIGludCYgaW5mbyk7CgkJCSAgICAgIAoK
Cn0KCgogCgogCgoKCgoKCgoKCgoKCmNsYXNzIG9wX0RHRVNWIDogcHVibGljIG9wX09wZXJhdG9y
PHJlYWw+IHsKCnB1YmxpYzoKICAgCgoKICBvcF9ER0VTVihvcF9PcGVyYXRvcjxyZWFsPiYgQSk7
CgogIH5vcF9ER0VTVigpOwoKICAgCgoKCgogIHZpcnR1YWwgdm9pZCBvcGVyYXRvcigpKGNvbnN0
IGZuY19GdW5jdGlvbjxyZWFsPiYgZm5jWSwKCQkJICBmbmNfRnVuY3Rpb248cmVhbD4mIGZuY1gp
OwoKICAgCgoKCgogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBmbmNfVmVjdG9yPHJlYWw+JiBmbmNZ
LCBmbmNfVmVjdG9yPHJlYWw+JiBmbmNYKTsKCiAgIAoKCiAgcmVhbCBjb25kaXRpb24oKTsKCiAg
IAogIHZpcnR1YWwgb3N0cmVhbSYgaW5mbyhvc3RyZWFtJiBvcykgY29uc3Q7CgogICAKICB2aXJ0
dWFsIGlubGluZSBjb25zdCBzcGNfU3BhY2U8cmVhbD4mIHNwYWNlWCgpIGNvbnN0OwoKICAgCiAg
dmlydHVhbCBpbmxpbmUgY29uc3Qgc3BjX1NwYWNlPHJlYWw+JiBzcGFjZVkoKSBjb25zdDsKCnBy
aXZhdGU6CgogICAKICBvcF9PcGVyYXRvcjxyZWFsPiYgQV87CgogICAKICByZWFsKiBtYXRyaXhf
OwoKICAgCiAgcmVhbCogbWF0cml4TFVfOwoKICAgCiAgaW50KiBpcGl2XzsKCiAgIAogIGJvb2wg
bHVfOwoKICAgCiAgdWludCBuXzsKCiAgIAogIHJlYWwgY29uZF87Cn07CgppbmxpbmUgY29uc3Qg
c3BjX1NwYWNlPHJlYWw+JiBvcF9ER0VTVjo6c3BhY2VYKCkgY29uc3QgeyAKICByZXR1cm4gQV8u
c3BhY2VYKCk7IAp9CgppbmxpbmUgY29uc3Qgc3BjX1NwYWNlPHJlYWw+JiBvcF9ER0VTVjo6c3Bh
Y2VZKCkgY29uc3QgeyAKICByZXR1cm4gQV8uc3BhY2VZKCk7IAp9CgoKIyAxMCAiLi4vb3BlcmF0
b3IuaCIgMgoKIyAxICIuLi9vcGVyYXRvci9vcFN1cGVyTFUuaCIgMQogCgoKCgoKCgojIDEgIi4u
L29wZXJhdG9yLy4uL29wZXJhdG9yLmgiIDEKIAoKCiMgMTcgIi4uL29wZXJhdG9yLy4uL29wZXJh
dG9yLmgiCgojIDkgIi4uL29wZXJhdG9yL29wU3VwZXJMVS5oIiAyCgoKIyAxICIuLi9vcGVyYXRv
ci9TdXBlckxVL3N1cGVybWF0cml4LmgiIDEKCgoKIAoKCnR5cGVkZWYgZW51bSB7CiAgICBOQywg
ICAgICAgICAKICAgIE5SLCAgICAgICAgIAogICAgU0MsICAgICAgICAgCiAgICBTUiwgICAgICAg
ICAKICAgIE5DUCwgICAgICAgIAoKCiAgICBETiAgICAgICAgICAKfSBTdHlwZV90OwoKdHlwZWRl
ZiBlbnVtIHsKICAgIF9TLCAgICAgICAgICAKICAgIF9ELCAgICAgICAgICAKICAgIF9DLCAgICAg
ICAgICAKICAgIF9aICAgICAgICAgICAKfSBEdHlwZV90OwoKdHlwZWRlZiBlbnVtIHsKICAgIEdF
LCAgICAgICAgIAogICAgVFJMVSwgICAgICAgCiAgICBUUlVVLCAgICAgICAKICAgIFRSTCwgICAg
ICAgIAogICAgVFJVLCAgICAgICAgCiAgICBTWUwsICAgICAgICAKICAgIFNZVSwgICAgICAgIAog
ICAgSEVMLCAgICAgICAgCiAgICBIRVUgICAgICAgICAKfSBNdHlwZV90OwoKdHlwZWRlZiBzdHJ1
Y3QgewoJU3R5cGVfdCBTdHlwZTsgIAoKCUR0eXBlX3QgRHR5cGU7ICAKCU10eXBlX3QgTXR5cGU7
ICAKCglpbnQgIG5yb3c7ICAgICAgCglpbnQgIG5jb2w7ICAgICAgCgl2b2lkICpTdG9yZTsgICAg
Cn0gU3VwZXJNYXRyaXg7CgogCgoKCiAKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50ICBubno7CSAg
IAogICAgdm9pZCAqbnp2YWw7ICAgCiAgICBpbnQgICpyb3dpbmQ7ICAKICAgIGludCAgKmNvbHB0
cjsgIAoKICAgICAgICAgICAgICAgICAgIAoKCgp9IE5DZm9ybWF0OwoKIAp0eXBlZGVmIHN0cnVj
dCB7CiAgICBpbnQgIG5uejsJICAgCiAgICB2b2lkICpuenZhbDsgICAKICAgIGludCAgKmNvbGlu
ZDsgIAogICAgaW50ICAqcm93cHRyOyAgCgogICAgICAgICAgICAgICAgICAgCgoKCn0gTlJmb3Jt
YXQ7CgogCnR5cGVkZWYgc3RydWN0IHsKICBpbnQgIG5uejsJICAgICAgCiAgaW50ICBuc3VwZXI7
ICAgICAgICAKICB2b2lkICpuenZhbDsgICAgICAgIAogIGludCAgKm56dmFsX2NvbHB0cjsgCiAg
aW50ICAqcm93aW5kOyAgICAgICAKCiAgaW50ICpyb3dpbmRfY29scHRyOyAKICBpbnQgKmNvbF90
b19zdXA7ICAgIAoKICBpbnQgKnN1cF90b19jb2w7ICAgIAoKCgogICAgICAgICAgICAgICAgICAg
ICAgCgoKCgp9IFNDZm9ybWF0OwoKIAp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgbm56OwkgICAK
ICAgIHZvaWQgKm56dmFsOyAgIAogICAgaW50ICpyb3dpbmQ7ICAgCgkJICAgCiAgICBpbnQgKmNv
bGJlZzsgICAKCiAgICBpbnQgKmNvbGVuZDsgICAKCgkJICAgCgoKCgp9IE5DUGZvcm1hdDsKCiAK
dHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IGxkYTsgICAgICAgCiAgICB2b2lkICpuenZhbDsgICAK
fSBETmZvcm1hdDsKCgoKIAoKCgoKCgoKCgoKCiMgMTEgIi4uL29wZXJhdG9yL29wU3VwZXJMVS5o
IiAyCgoKIAoKIAoKCgpjbGFzcyBvcF9TdXBlckxVIDogcHVibGljIG9wX09wZXJhdG9yPHJlYWw+
IHsKCnB1YmxpYzoKICAgCgogIG9wX1N1cGVyTFUob3BfT3BlcmF0b3I8cmVhbD4mIEEpOwoKICB2
aXJ0dWFsIH5vcF9TdXBlckxVKCk7CgogICAKCiAgdmlydHVhbCB2b2lkIG9wZXJhdG9yKCkoY29u
c3QgZm5jX0Z1bmN0aW9uPHJlYWw+JiBmbmNZLAoJCQkgIGZuY19GdW5jdGlvbjxyZWFsPiYgZm5j
WCk7CgogICAKCiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IGZuY19WZWN0b3I8cmVhbD4mIGZuY1ks
IGZuY19WZWN0b3I8cmVhbD4mIGZuY1gpOwoKICAgCgogIHZpcnR1YWwgb3N0cmVhbSYgaW5mbyhv
c3RyZWFtJiBvcykgY29uc3Q7CgogICAKICB2aXJ0dWFsIGNvbnN0IHNwY19TcGFjZTxyZWFsPiYg
c3BhY2VYKCkgY29uc3Q7CgogICAKICB2aXJ0dWFsIGNvbnN0IHNwY19TcGFjZTxyZWFsPiYgc3Bh
Y2VZKCkgY29uc3Q7CnByaXZhdGU6ICAKICAgCiAgU3VwZXJNYXRyaXggQV87CgogICAKICB1aW50
IG5fOwoKICAgCiAgb3BfT3BlcmF0b3I8cmVhbD4mIE9fOwp9OwoKCiMgMTEgIi4uL29wZXJhdG9y
LmgiIDIKCgojIDEgIi4uL29wZXJhdG9yL29wQkZvcm0zRC5oIiAxCiAKCgoKCgoKCgoKCgogCgpj
bGFzcyBvcF9MYXBsYWNlTGluZWFyM0QgOiBwdWJsaWMgb3BfQmlsaW5lYXJGb3JtPHJlYWw+IHsK
CnB1YmxpYzoKICBpbmxpbmUgb3BfTGFwbGFjZUxpbmVhcjNEKCk7CgogIHZvaWQgb3BlcmF0b3Io
KShjb25zdCBzcGNfRWxlbWVudDxyZWFsPiYgZWxtWCwgY29uc3Qgc3BjX0VsZW1lbnQ8cmVhbD4m
IGVsbVksCgkJICBzcGNfRWxlbWVudE1hdHJpeDxyZWFsPiYgZW0pOyAKICB2b2lkIG9wZXJhdG9y
KCkoY29uc3Qgc3BjX0xpbmVhcjNkMDAxJiBlbG1YLCBjb25zdCBzcGNfTGluZWFyM2QwMDEmIGVs
bVksIAoJCSAgc3BjX0VsZW1lbnRNYXRyaXg8cmVhbD4mIGVtKTsgCn07IAoKIAoKY2xhc3Mgb3Bf
SWRlbnRpdHlMaW5lYXIzRCA6IHB1YmxpYyBvcF9CaWxpbmVhckZvcm08cmVhbD4gewoKcHVibGlj
OgogIGlubGluZSBvcF9JZGVudGl0eUxpbmVhcjNEKCk7CgogIHZvaWQgb3BlcmF0b3IoKShjb25z
dCBzcGNfRWxlbWVudDxyZWFsPiYgZWxtWCwgY29uc3Qgc3BjX0VsZW1lbnQ8cmVhbD4mIGVsbVks
CgkJICBzcGNfRWxlbWVudE1hdHJpeDxyZWFsPiYgZW0pOyAKICB2b2lkIG9wZXJhdG9yKCkoY29u
c3Qgc3BjX0xpbmVhcjNkMDAxJiBlbG1YLCBjb25zdCBzcGNfTGluZWFyM2QwMDEmIGVsbVksIAoJ
CSAgc3BjX0VsZW1lbnRNYXRyaXg8cmVhbD4mIGVtKTsgCn07IAoKCiMgMTMgIi4uL29wZXJhdG9y
LmgiIDIKCgojIDEgIi4uL29wZXJhdG9yL29wTlJMc29sdmVyLmgiIDEKIAoKCgoKCgoKIyAxICIu
Li9vcGVyYXRvci8uLi9vcGVyYXRvci5oIiAxCiAKCgojIDE3ICIuLi9vcGVyYXRvci8uLi9vcGVy
YXRvci5oIgoKIyA5ICIuLi9vcGVyYXRvci9vcE5STHNvbHZlci5oIiAyCgoKIyAxICIuLi9vcGVy
YXRvci9OUkxzb2x2ZXIvaW5jbHVkZS9sdWRlY29tcC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgpleHRlcm4gIkMiIHsKCgojIDEgIi4uL29wZXJhdG9yL05STHNvbHZlci9pbmNsdWRlL2Rh
dGF0eXBlLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyOCAiLi4v
b3BlcmF0b3IvTlJMc29sdmVyL2luY2x1ZGUvbHVkZWNvbXAuaCIgMgoKIyAxICIuLi9vcGVyYXRv
ci9OUkxzb2x2ZXIvaW5jbHVkZS9ub256ZXJvcy5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCmV4dGVybiAiQyIgewoKCgoKdHlwZWRlZiBzdHJ1Y3QgX05vblplcm9zIHsKICB1bnNpZ25l
ZCBpbnQgICBub2RlczsKICB1bnNpZ25lZCBpbnQgKiBpbmRleDsKICB1bnNpZ25lZCBpbnQgKiBh
ZGpjbnQ7CiAgdW5zaWduZWQgaW50ICAgYWRqbGVuOwp9ICpOb25aZXJvczsKCnZvaWQgICAgIE91
dHB1dE5aKE5vblplcm9zIG5vbnplcm9zLCBjb25zdCBjaGFyKiBmaWxlbmFtZSk7Ck5vblplcm9z
IFJlYWRJbk5aKGNvbnN0IGNoYXIqIGZpbGVuYW1lKTsKdW5zaWduZWQgaW50ICAgICAgRGVsZXRl
TlooTm9uWmVyb3Mgbm9uemVyb3MpOwp1bnNpZ25lZCBpbnQgICAgICBTaXplT2ZOWihOb25aZXJv
cyBub256ZXJvcyk7CnZvaWQgICAgIFByaW50TlooTm9uWmVyb3Mgbm9uemVyb3MsIGNvbnN0IHVu
c2lnbmVkIGludCAqIHBlcm11dGUsIGNvbnN0IHVuc2lnbmVkIGludCAqIGludmVyc2UsCgkJIEZJ
TEUqIHN0cmVhbSk7CnZvaWQgICAgIENoZWNrTlooTm9uWmVyb3Mgbm9uemVyb3MsIEZJTEUqIHN0
cmVhbSk7Ck5vblplcm9zIFBlcm11dGVOWihOb25aZXJvcyBub256ZXJvcywgY29uc3QgdW5zaWdu
ZWQgaW50ICogcGVybXV0ZSwgY29uc3QgdW5zaWduZWQgaW50ICogaW52ZXJzZSk7CgoKfQoKCgoj
IDI5ICIuLi9vcGVyYXRvci9OUkxzb2x2ZXIvaW5jbHVkZS9sdWRlY29tcC5oIiAyCgoKdHlwZWRl
ZiBzdHJ1Y3QgX0dsb2JhbE1hdHJpeCogR2xvYmFsTWF0cml4OwoKIAoKCgoKCgoKR2xvYmFsTWF0
cml4IENyZWF0ZUdNKE5vblplcm9zIG1hdHJpeCwgY29uc3QgY2hhciogcHJlZml4KTsKCiAKCgp1
bnNpZ25lZCBpbnQgRGVsZXRlR00oR2xvYmFsTWF0cml4IG1hdHJpeCk7CgogCgoKdW5zaWduZWQg
aW50IFJlbnVtYmVyR00oR2xvYmFsTWF0cml4IG1hdHJpeCwgdW5zaWduZWQgaW50IGRvZik7Cgog
CgoKdW5zaWduZWQgaW50IEludlJlbnVtR00oR2xvYmFsTWF0cml4IG1hdHJpeCwgdW5zaWduZWQg
aW50IGRvZik7CgogCgoKdW5zaWduZWQgaW50IERpbWVuc2lvbkdNKEdsb2JhbE1hdHJpeCBtYXRy
aXgpOwoKIAoKCgoKdm9pZCBBc3NlbWJsZUdNKEdsb2JhbE1hdHJpeCBtYXRyaXgsIHVuc2lnbmVk
IGludCBzaXplLCBjb25zdCBpbnQqIGluZGV4LAoJCWNvbnN0IHZvaWQqIGVtYXQpOwoKIAoKCgpk
b3VibGUgIExvb2tVcEVNKGNvbnN0IHZvaWQqIGVtYXQsIHVuc2lnbmVkIGludCByb3csIHVuc2ln
bmVkIGludCBjb2wpOwoKIAoKCnZvaWQgU2V0RW50cnlHTShHbG9iYWxNYXRyaXggbWF0cml4LCB1
bnNpZ25lZCBpbnQgcm93LCB1bnNpZ25lZCBpbnQgY29sLAoJCWRvdWJsZSAgdmFsdWUpOwoKIAoK
Cgp2b2lkIEZhY3RvckdNKEdsb2JhbE1hdHJpeCBtYXRyaXgsIHVuc2lnbmVkIGludCBpbmRleCk7
CgogCgoKCgp2b2lkIFNvbHZlR00oR2xvYmFsTWF0cml4IG1hdHJpeCwgdW5zaWduZWQgaW50IG51
bXZlY3MsCgkgICAgIGRvdWJsZSAqKiB2ZWN0b3JzKTsKCiAKCgp2b2lkIE11bHRpcGx5R00oR2xv
YmFsTWF0cml4IG1hdHJpeCwgY29uc3QgZG91YmxlICogdmVjdG9yLAoJCWRvdWJsZSAqIHByb2R1
Y3QpOwoKIAoKCgp2b2lkIFZlcmlmeUdNKEdsb2JhbE1hdHJpeCBjb2VmLCBjb25zdCBkb3VibGUg
KiBzb2xuLAoJICAgICAgY29uc3QgZG91YmxlICogdmVjdCk7CgogCgoKCgp2b2lkIFJlc2V0R00o
R2xvYmFsTWF0cml4IGNvZWYpOwoKIAoKCn0KCgoKIyAxMSAiLi4vb3BlcmF0b3Ivb3BOUkxzb2x2
ZXIuaCIgMgoKCgogCgogCgoKCmNsYXNzIG9wX05STHNvbHZlckxVIDogcHVibGljIG9wX09wZXJh
dG9yPHJlYWw+IHsKCnB1YmxpYzoKICAgCgogIG9wX05STHNvbHZlckxVKG9wX09wZXJhdG9yPHJl
YWw+JiBBKTsKCiAgdmlydHVhbCB+b3BfTlJMc29sdmVyTFUoKTsKCiAgIAoKICB2aXJ0dWFsIHZv
aWQgb3BlcmF0b3IoKShjb25zdCBmbmNfRnVuY3Rpb248cmVhbD4mIGZuY1ksCgkJCSAgZm5jX0Z1
bmN0aW9uPHJlYWw+JiBmbmNYKTsKCiAgIAoKICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgZm5jX1Zl
Y3RvcjxyZWFsPiYgZm5jWSwgZm5jX1ZlY3RvcjxyZWFsPiYgZm5jWCk7CgogICAKCiAgdmlydHVh
bCBvc3RyZWFtJiBpbmZvKG9zdHJlYW0mIG9zKSBjb25zdDsKCiAgIAogIHZpcnR1YWwgY29uc3Qg
c3BjX1NwYWNlPHJlYWw+JiBzcGFjZVgoKSBjb25zdDsKCiAgIAogIHZpcnR1YWwgY29uc3Qgc3Bj
X1NwYWNlPHJlYWw+JiBzcGFjZVkoKSBjb25zdDsKcHJpdmF0ZTogIAogICAKICBHbG9iYWxNYXRy
aXggQV87CgogICAKICBfTm9uWmVyb3Mgc3BhcnNpdHlfOwoKICAgCiAgdWludCBuXzsKCiAgIAog
IG9wX09wZXJhdG9yPHJlYWw+JiBPXzsKfTsKCgojIDE1ICIuLi9vcGVyYXRvci5oIiAyCgoKCiMg
MjUgImxpbmVsLmNjIiAyCgojIDEgIi4uL2hwLmgiIDEKIAoKCgoKCgojIDEgIi4uL2hwL2hwQkZv
cm0uaCIgMQogCgoKCgoKCgoKCgogCgogCgpjbGFzcyBocF9MYXBsYWNlIDogcHVibGljIG9wX0Jp
bGluZWFyRm9ybTxyZWFsPiB7CgogcHVibGljOgogICAKCgogIGlubGluZSBocF9MYXBsYWNlKHVp
bnQgZ2F1c3MpOwogIGlubGluZSB2aXJ0dWFsIH5ocF9MYXBsYWNlKCk7CgogICAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKICB2b2lkIG9wZXJhdG9yKCkoY29uc3Qgc3BjX0VsZW1lbnQ8cmVhbD4m
IGVsbVgsIAoJCSAgY29uc3Qgc3BjX0VsZW1lbnQ8cmVhbD4mIGVsbVksIAoJCSAgc3BjX0VsZW1l
bnRNYXRyaXg8cmVhbD4mIGVtKTsgCgoKCgogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBocF9IUDJk
MDAwJiBlbG1YLCBjb25zdCBocF9IUDJkMDAwJiBlbG1ZLCAKCQkgIHNwY19FbGVtZW50TWF0cml4
PHJlYWw+JiBlbSk7CgogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBocF9IUDJkMDAxJiBlbG1YLCBj
b25zdCBocF9IUDJkMDAxJiBlbG1ZLCAKCQkgIHNwY19FbGVtZW50TWF0cml4PHJlYWw+JiBlbSk7
CiAgCiAgcHJpdmF0ZToKICAgCiAgdWludCAgbl87CgogICAKICBSZWFsMmQqIHNocGZuY0RfOwoK
ICAgCiAgdWludCBnYXVzc187CiAKfTsgCgppbmxpbmUgaHBfTGFwbGFjZTo6aHBfTGFwbGFjZSh1
aW50IGdhdXNzKSB7CiAgbl8gPSAwOyBzaHBmbmNEXyA9IF9fbnVsbCA7CiAgZ2F1c3NfID0gZ2F1
c3M7Cn0KCmlubGluZSBocF9MYXBsYWNlOjp+aHBfTGFwbGFjZSgpIHsKICBkZWxldGVbXSBzaHBm
bmNEXzsKfSAKCiAKCiAKCgpjbGFzcyBocF9JZGVudGl0eSA6IHB1YmxpYyBvcF9CaWxpbmVhckZv
cm08cmVhbD4gewoKIHB1YmxpYzoKICAgCgoKICBpbmxpbmUgaHBfSWRlbnRpdHkodWludCBnYXVz
cyk7CiAgaW5saW5lIHZpcnR1YWwgfmhwX0lkZW50aXR5KCk7CgogICAKCgoKCgoKICB2b2lkIG9w
ZXJhdG9yKCkoY29uc3Qgc3BjX0VsZW1lbnQ8cmVhbD4mIGVsbVgsIAoJCSAgY29uc3Qgc3BjX0Vs
ZW1lbnQ8cmVhbD4mIGVsbVksIAoJCSAgc3BjX0VsZW1lbnRNYXRyaXg8cmVhbD4mIGVtKTsgCgoK
CgogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBocF9IUDJkMDAwJiBlbG1YLCBjb25zdCBocF9IUDJk
MDAwJiBlbG1ZLCAKCQkgIHNwY19FbGVtZW50TWF0cml4PHJlYWw+JiBlbSk7IAoKICB2b2lkIG9w
ZXJhdG9yKCkoY29uc3QgaHBfSFAyZDAwMSYgZWxtWCwgY29uc3QgaHBfSFAyZDAwMSYgZWxtWSwg
CgkJICBzcGNfRWxlbWVudE1hdHJpeDxyZWFsPiYgZW0pOyAKCiBwcml2YXRlOgogICAKICB1aW50
ICBuXzsKCiAgIAogIHJlYWwqIHNocGZuY187CiAKICAgCiAgdWludCBnYXVzc187Cn07IAoKaW5s
aW5lIGhwX0lkZW50aXR5OjpocF9JZGVudGl0eSh1aW50IGdhdXNzKSB7CiAgbl8gPSAwOyBzaHBm
bmNfID0gX19udWxsIDsKICBnYXVzc18gPSBnYXVzczsKfQoKaW5saW5lIGhwX0lkZW50aXR5Ojp+
aHBfSWRlbnRpdHkoKSB7CiAgZGVsZXRlW10gc2hwZm5jXzsKfQoKCiMgOCAiLi4vaHAuaCIgMgoK
CiMgMSAiLi4vaHAvaHBMRm9ybS5oIiAxCiAKCgoKCgoKCgoKCgoKIAoKIAoKCgoKY2xhc3MgaHBf
Umllc3ogOiBwdWJsaWMgZm5jX0xpbmVhckZvcm08cmVhbD4gewoKcHVibGljOgogICAKCgoKCgoK
CiAgaHBfUmllc3ooY29uc3QgdGJ4X0Zvcm11bGEmIGZybSwgdWludCBnYXVzcyA9IDAsIAoJICAg
aHBfQm91bmRhcnlDb25kaXRpb24qIGJjID0gMCk7IAogIGlubGluZSB+aHBfUmllc3ooKTsKCiAg
IAoKCgoKCgoKICB2b2lkIG9wZXJhdG9yKCkoY29uc3Qgc3BjX0VsZW1lbnQ8cmVhbD4mIGVsbSwK
CQkJICBzcGNfRWxlbWVudE1hdHJpeDxyZWFsPiYgZW0pOwoKCgogIHZvaWQgb3BlcmF0b3IoKShj
b25zdCBocF9IUDJkMDAwJiBlbG0sIHNwY19FbGVtZW50TWF0cml4PHJlYWw+JiBlbSk7CgogIHZv
aWQgb3BlcmF0b3IoKShjb25zdCBocF9IUDJkMDAxJiBlbG0sIHNwY19FbGVtZW50TWF0cml4PHJl
YWw+JiBlbSk7Cgpwcml2YXRlOgogICAKICBjb25zdCB0YnhfRm9ybXVsYSogZnJtXzsKCiAgIAog
IHVpbnQgICBnYXVzc187CgogICAKICByZWFsKiAgc2hwZm5jXzsKCiAgIAogIHVpbnQgICBuXzsK
CiAgIAoKICBocF9Cb3VuZGFyeUNvbmRpdGlvbiogYmNfOwp9OyAKCmlubGluZSBocF9SaWVzejo6
fmhwX1JpZXN6KCkgewogIGRlbGV0ZVtdIHNocGZuY187Cn0KCgojIDEwICIuLi9ocC5oIiAyCgoK
CiMgMSAiLi4vaHAvaHBMaXN0cy5oIiAxCiAKCgoKCgoKCgoKCiAKCiAKCgoKCmNsYXNzIGhwX1Zl
cnRleExpc3QgOiBwdWJsaWMgZ2VvX1ZlcnRleExpc3QgewoKcHVibGljOgogICAKCiAgaHBfVmVy
dGV4TGlzdChlbnVtIGdlb19WZXJ0ZXhMaXN0Ojp2dHhJbmZvIGluZm8gPSBBTEwpIDogCiAgICBn
ZW9fVmVydGV4TGlzdChpbmZvKSB7fQoKICB2aXJ0dWFsIH5ocF9WZXJ0ZXhMaXN0KCk7CgogICAK
CgoKCiAgdmlydHVhbCB2b2lkIG9wZXJhdG9yKCkgKGNvbnN0IHNwY19FbGVtZW50PHJlYWw+JiBl
bG0pOwp9OwoKCiMgMTMgIi4uL2hwLmgiIDIKCgogCiMgMSAiLi4vaHAvaHBTcGFjZTNkLmgiIDEK
IAoKCgoKCgojIDEgIi4uL2hwL2hwRWxlbWVudHMzZC5oIiAxCiAKCgoKCgoKCgojIDEgIi4uL2hw
L2hwRWxlbWVudDNkLmgiIDEKIAoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu
dXgvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdmVjdG9yIiAxIDMKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51
eC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYnZlY3Rvci5oIiAxIDMKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogIAoKc3RhdGljIGNvbnN0IGludCBfX1dP
UkRfQklUID0gaW50KDggKnNpemVvZih1bnNpZ25lZCBpbnQpKTsKCgoKCgoKc3RydWN0IF9CaXRf
cmVmZXJlbmNlIHsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX21hc2s7
CiAgX0JpdF9yZWZlcmVuY2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpIAog
ICAgOiBfTV9wKF9feCksIF9NX21hc2soX195KSB7fQoKcHVibGljOgogIF9CaXRfcmVmZXJlbmNl
KCkgOiBfTV9wKDApLCBfTV9tYXNrKDApIHt9CiAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuICEoISgqX01fcCAmIF9NX21hc2spKTsgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0o
Ym9vbCBfX3gpCiAgewogICAgaWYgKF9feCkgICpfTV9wIHw9IF9NX21hc2s7CiAgICBlbHNlICAg
ICAgKl9NX3AgJj0gfl9NX21hc2s7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9CaXRfcmVmZXJl
bmNlJiBvcGVyYXRvcj0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkgCiAgICB7IHJldHVybiAq
dGhpcyA9IGJvb2woX194KTsgfQogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfQml0X3JlZmVyZW5j
ZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gYm9vbCgqdGhpcykgPT0gYm9vbChfX3gpOyB9CiAg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkgY29uc3QgewogICAgcmV0
dXJuICFib29sKCp0aGlzKSAmJiBib29sKF9feCk7CiAgfQogIHZvaWQgZmxpcCgpIHsgKl9NX3Ag
Xj0gX01fbWFzazsgfQp9OwoKaW5saW5lIHZvaWQgc3dhcChfQml0X3JlZmVyZW5jZSBfX3gsIF9C
aXRfcmVmZXJlbmNlIF9feSkKewogIGJvb2wgX190bXAgPSBfX3g7CiAgX194ID0gX195OwogIF9f
eSA9IF9fdG1wOwp9CgpzdHJ1Y3QgX0JpdF9pdGVyYXRvciA6IHB1YmxpYyByYW5kb21fYWNjZXNz
X2l0ZXJhdG9yPGJvb2wsIHB0cmRpZmZfdD4gewogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgIHJl
ZmVyZW5jZTsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogIHR5cGVkZWYgX0Jp
dF9pdGVyYXRvciAgIGl0ZXJhdG9yOwoKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQg
aW50IF9NX29mZnNldDsKICB2b2lkIGJ1bXBfdXAoKSB7CiAgICBpZiAoX01fb2Zmc2V0KysgPT0g
X19XT1JEX0JJVCAtIDEpIHsKICAgICAgX01fb2Zmc2V0ID0gMDsKICAgICAgKytfTV9wOwogICAg
fQogIH0KICB2b2lkIGJ1bXBfZG93bigpIHsKICAgIGlmIChfTV9vZmZzZXQtLSA9PSAwKSB7CiAg
ICAgIF9NX29mZnNldCA9IF9fV09SRF9CSVQgLSAxOwogICAgICAtLV9NX3A7CiAgICB9CiAgfQoK
ICBfQml0X2l0ZXJhdG9yKCkgOiBfTV9wKDApLCBfTV9vZmZzZXQoMCkge30KICBfQml0X2l0ZXJh
dG9yKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KSAKICAgIDogX01fcChfX3gp
LCBfTV9vZmZzZXQoX195KSB7fQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVy
biByZWZlcmVuY2UoX01fcCwgMVUgPDwgX01fb2Zmc2V0KTsgfQogIGl0ZXJhdG9yJiBvcGVyYXRv
cisrKCkgewogICAgYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBv
cGVyYXRvcisrKGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIGJ1bXBfdXAo
KTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBi
dW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItLShp
bnQpIHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBidW1wX2Rvd24oKTsKICAgIHJl
dHVybiBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9f
aSkgewogICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9faSArIF9NX29mZnNldDsKICAgIF9NX3Ag
Kz0gX19uIC8gX19XT1JEX0JJVDsKICAgIF9fbiA9IF9fbiAlIF9fV09SRF9CSVQ7CiAgICBpZiAo
X19uIDwgMCkgewogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX24gKyBfX1dPUkRf
QklUOwogICAgICAtLV9NX3A7CiAgICB9IGVsc2UKICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVk
IGludCkgX19uOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3ItPShk
aWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0dXJuICp0aGlz
OwogIH0KICBpdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3Qgewog
ICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCArPSBfX2k7CiAgfQog
IGl0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBpdGVy
YXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9CiAgZGlmZmVy
ZW5jZV90eXBlIG9wZXJhdG9yLShpdGVyYXRvciBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX1dP
UkRfQklUICogKF9NX3AgLSBfX3guX01fcCkgKyBfTV9vZmZzZXQgLSBfX3guX01fb2Zmc2V0Owog
IH0KICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19pKSB7IHJldHVybiAq
KCp0aGlzICsgX19pKTsgfQogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgX194KSBj
b25zdCB7CiAgICByZXR1cm4gX01fcCA9PSBfX3guX01fcCAmJiBfTV9vZmZzZXQgPT0gX194Ll9N
X29mZnNldDsKICB9CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBfX3gpIGNvbnN0
IHsKICAgIHJldHVybiBfTV9wICE9IF9feC5fTV9wIHx8IF9NX29mZnNldCAhPSBfX3guX01fb2Zm
c2V0OwogIH0KICBib29sIG9wZXJhdG9yPChpdGVyYXRvciBfX3gpIGNvbnN0IHsKICAgIHJldHVy
biBfTV9wIDwgX194Ll9NX3AgfHwgKF9NX3AgPT0gX194Ll9NX3AgJiYgX01fb2Zmc2V0IDwgX194
Ll9NX29mZnNldCk7CiAgfQp9OwoKc3RydWN0IF9CaXRfY29uc3RfaXRlcmF0b3IKICA6IHB1Ymxp
YyByYW5kb21fYWNjZXNzX2l0ZXJhdG9yPGJvb2wsIHB0cmRpZmZfdD4KewogIHR5cGVkZWYgYm9v
bCAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwogIHR5cGVkZWYgYm9vbCAgICAgICAgICAgICAg
ICAgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgYm9vbCogICAgICAgICAgcG9pbnRl
cjsKICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgIGNvbnN0X2l0ZXJhdG9yOwoKICB1bnNp
Z25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX29mZnNldDsKICB2b2lkIGJ1bXBfdXAo
KSB7CiAgICBpZiAoX01fb2Zmc2V0KysgPT0gX19XT1JEX0JJVCAtIDEpIHsKICAgICAgX01fb2Zm
c2V0ID0gMDsKICAgICAgKytfTV9wOwogICAgfQogIH0KICB2b2lkIGJ1bXBfZG93bigpIHsKICAg
IGlmIChfTV9vZmZzZXQtLSA9PSAwKSB7CiAgICAgIF9NX29mZnNldCA9IF9fV09SRF9CSVQgLSAx
OwogICAgICAtLV9NX3A7CiAgICB9CiAgfQoKICBfQml0X2NvbnN0X2l0ZXJhdG9yKCkgOiBfTV9w
KDApLCBfTV9vZmZzZXQoMCkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKHVuc2lnbmVkIGludCog
X194LCB1bnNpZ25lZCBpbnQgX195KSAKICAgIDogX01fcChfX3gpLCBfTV9vZmZzZXQoX195KSB7
fQogIF9CaXRfY29uc3RfaXRlcmF0b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194KSAKICAgIDog
X01fcChfX3guX01fcCksIF9NX29mZnNldChfX3guX01fb2Zmc2V0KSB7fQogIGNvbnN0X3JlZmVy
ZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICByZXR1cm4gX0JpdF9yZWZlcmVuY2UoX01fcCwg
MVUgPDwgX01fb2Zmc2V0KTsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAg
ICBidW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJh
dG9yKysoaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgYnVtcF91
cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItLSgp
IHsKICAgIGJ1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRv
ciBvcGVyYXRvci0tKGludCkgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAg
IGJ1bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3Bl
cmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0g
X19pICsgX01fb2Zmc2V0OwogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOwogICAgX19uID0g
X19uICUgX19XT1JEX0JJVDsKICAgIGlmIChfX24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9ICh1
bnNpZ25lZCBpbnQpIF9fbiArIF9fV09SRF9CSVQ7CiAgICAgIC0tX01fcDsKICAgIH0gZWxzZQog
ICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAg
fQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAg
ICp0aGlzICs9IC1fX2k7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9w
ZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBf
X3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9IF9faTsKICB9CiAgY29uc3RfaXRlcmF0
b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJh
dG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0gX19pOwogIH0KICBkaWZmZXJl
bmNlX3R5cGUgb3BlcmF0b3ItKGNvbnN0X2l0ZXJhdG9yIF9feCkgY29uc3QgewogICAgcmV0dXJu
IF9fV09SRF9CSVQgKiAoX01fcCAtIF9feC5fTV9wKSArIF9NX29mZnNldCAtIF9feC5fTV9vZmZz
ZXQ7CiAgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX2kp
IHsgCiAgICByZXR1cm4gKigqdGhpcyArIF9faSk7IAogIH0KICBib29sIG9wZXJhdG9yPT0oY29u
c3QgY29uc3RfaXRlcmF0b3ImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPT0gX194Ll9N
X3AgJiYgX01fb2Zmc2V0ID09IF9feC5fTV9vZmZzZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBjb25zdF9pdGVyYXRvciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fcCAhPSBfX3gu
X01fcCB8fCBfTV9vZmZzZXQgIT0gX194Ll9NX29mZnNldDsKICB9CiAgYm9vbCBvcGVyYXRvcjwo
Y29uc3RfaXRlcmF0b3IgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA8IF9feC5fTV9wIHx8
IChfTV9wID09IF9feC5fTV9wICYmIF9NX29mZnNldCA8IF9feC5fTV9vZmZzZXQpOwogIH0KfTsK
CiAKIAoKCgogCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yLCBib29sIF9faXNfc3RhdGljPgpj
bGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Fs
bG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFs
bG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJl
dHVybiBfTV9kYXRhX2FsbG9jYXRvcjsgfQoKICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0
KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVjdGVkOgogIHVu
c2lnbmVkIGludCogX01fYml0X2FsbG9jKHNpemVfdCBfX24pIAogICAgeyByZXR1cm4gX01fZGF0
YV9hbGxvY2F0b3IuYWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUKTsg
fQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBf
TV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7
CiAgfSAgCgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxsb2NhdG9y
Pjo6YWxsb2NhdG9yX3R5cGUgCiAgICAgICAgICBfTV9kYXRhX2FsbG9jYXRvcjsKICBfQml0X2l0
ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIHVuc2lnbmVkIGlu
dCogX01fZW5kX29mX3N0b3JhZ2U7Cn07CgogCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yPgpj
bGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5
cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9y
X3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxv
Y2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9CdmVjdG9yX2Fs
bG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgOiBfTV9zdGFydCgpLCBfTV9maW5p
c2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUK
ICAgICAgICAgIF9BbGxvY190eXBlOwogICAgICAgICAgCiAgdW5zaWduZWQgaW50KiBfTV9iaXRf
YWxsb2Moc2l6ZV90IF9fbikgCiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoKF9f
biArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZSgp
IHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShf
TV9zdGFydC5fTV9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9lbmRfb2Zfc3Rv
cmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOwogIH0gIAoKICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0Owog
IF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIHVuc2lnbmVkIGludCogX01fZW5kX29mX3N0b3Jh
Z2U7Cn07ICAKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9CdmVjdG9yX2Jhc2UKICA6
IHB1YmxpYyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7
CiAgdHlwZWRlZiBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+
CiAgICAgICAgICBfQmFzZTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9j
YXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfQnZlY3Rvcl9iYXNlKGNvbnN0IGFsbG9jYXRv
cl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIH5fQnZlY3Rvcl9iYXNlKCkgeyBfQmFzZTo6
X01fZGVhbGxvY2F0ZSgpOyB9Cn07CgojIDM0OCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4
LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9idmVjdG9yLmgiIDMKCgogCiAK
IAogCgoKCgoKCgoKCgogICAgICAgIAoKICAgICAgICAKdGVtcGxhdGU8Y2xhc3MgX0FsbG9jPiBj
bGFzcyB2ZWN0b3I8Ym9vbCxfQWxsb2M+CiAgOiBwdWJsaWMgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+
CgoKCgp7CgogIHR5cGVkZWYgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+IF9CYXNlOwoKCgpwdWJsaWM6
CiAgdHlwZWRlZiBib29sIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwog
IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsgCiAgdHlwZWRlZiBfQml0X3JlZmVy
ZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiBib29sIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVm
IF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgYm9vbCogY29uc3RfcG9p
bnRlcjsKCiAgdHlwZWRlZiBfQml0X2l0ZXJhdG9yICAgICAgICAgICAgICAgIGl0ZXJhdG9yOwog
IHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKCgog
IHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRl
cmF0b3I7CgoKCgoKCgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFs
bG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJl
dHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9Cgpwcm90ZWN0ZWQ6CgoKCgoKCgoKcHJvdGVj
dGVkOgogIHZvaWQgX01faW5pdGlhbGl6ZShzaXplX3R5cGUgX19uKSB7CiAgICB1bnNpZ25lZCBp
bnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3Eg
KyAoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICBfTV9zdGFydCA9IGl0ZXJh
dG9yKF9fcSwgMCk7CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydCArIGRpZmZlcmVuY2VfdHlwZShf
X24pOwogIH0KICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgYm9vbCBf
X3gpIHsKICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAg
ICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX01fZmluaXNoICsgMSk7CiAg
ICAgICpfX3Bvc2l0aW9uID0gX194OwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2Ug
ewogICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgPyAyICogc2l6ZSgpIDogX19XT1JEX0JJ
VDsKICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICBp
dGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkp
OwogICAgICAqX19pKysgPSBfX3g7CiAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwg
ZW5kKCksIF9faSk7CiAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgX01fZW5kX29mX3N0b3Jh
Z2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgX01f
c3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgfQogIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoKTsKICAgIF9N
X2ZpbmlzaCA9IGl0ZXJhdG9yKCk7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IDA7CiAgICBmb3Ig
KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIAogICAgICBwdXNoX2JhY2soKl9fZmly
c3QpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9p
bml0aWFsaXplX3JhbmdlKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFn
KSB7CiAgICBzaXplX3R5cGUgX19uID0gMDsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg
X19uKTsKICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBf
TV9zdGFydCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBf
TV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9f
bGFzdDsgKytfX2ZpcnN0KSB7CiAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7
CiAgICAgICsrX19wb3M7CiAgICB9CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
YXRvcj4KICB2b2lkIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsK
ICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICBzaXplX3R5cGUgX19uID0gMDsKICAg
ICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogICAgICBpZiAoY2FwYWNpdHkoKSAt
IHNpemUoKSA+PSBfX24pIHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGVuZCgp
LCBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgY29weShfX2ZpcnN0
LCBfX2xhc3QsIF9fcG9zaXRpb24pOwogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5
cGUoX19uKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBz
aXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01f
Yml0X2FsbG9jKF9fbGVuKTsKICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9f
cG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgIF9faSA9IGNvcHkoX19maXJzdCwg
X19sYXN0LCBfX2kpOwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCks
IF9faSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdl
ID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgICAgX01f
c3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9CiAgfSAgICAgIAoKCgpwdWJs
aWM6CiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV9zdGFydDsgfQogIGNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fc3RhcnQ7IH0KICBpdGVyYXRvciBlbmQoKSB7
IHJldHVybiBfTV9maW5pc2g7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBfTV9maW5pc2g7IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZl
cnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkg
Y29uc3QgeyAKICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgCiAgfQog
IHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4o
KSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7IAogICAgcmV0dXJu
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IAogIH0KCiAgc2l6ZV90eXBlIHNpemUo
KSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogIHNpemVfdHlw
ZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KICBzaXplX3R5cGUg
Y2FwYWNpdHkoKSBjb25zdCB7CiAgICByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9N
X2VuZF9vZl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkpOwogIH0KICBib29sIGVtcHR5KCkgY29uc3Qg
eyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQogIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVf
dHlwZSBfX24pIHsKICAgIHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7
CiAgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0IHsK
ICAgIHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgfQoKICBleHBs
aWNpdCB2ZWN0b3IgKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp
KQogICAgOiBfQmFzZShfX2EpIHt9CgogIHZlY3RvciAoc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3Zh
bHVlLAogICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5
cGUoKSkKICAgIDogX0Jhc2UoX19hKQogIHsKICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgIGZp
bGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9fdmFsdWUgPyB+MCA6IDApOwog
IH0KCiAgZXhwbGljaXQgdmVjdG9yIChzaXplX3R5cGUgX19uKQogICAgOiBfQmFzZShhbGxvY2F0
b3JfdHlwZSgpKQogIHsKICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgIGZpbGwoX01fc3RhcnQu
X01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIDApOwogIH0KCiAgdmVjdG9yIChjb25zdCB2ZWN0b3Ig
JiBfX3gpIDogX0Jhc2UoX194LmdldF9hbGxvY2F0b3IoKSkgewogICAgX01faW5pdGlhbGl6ZShf
X3guc2l6ZSgpKTsKICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpOwog
IH0KCgogICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdmVjdG9yIChfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgIGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShf
X2EpCiAgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46
Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3Qs
IF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KICAgIAogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdl
cj4KICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBf
X3gsIF9fdHJ1ZV90eXBlKSB7CiAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICBmaWxsKF9NX3N0
YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwogIH0KICAgIAogIHRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0
Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgIF9NX2luaXRpYWxpemVf
cmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsK
ICB9CiMgNTg3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4u
L2luY2x1ZGUvZysrLTMvc3RsX2J2ZWN0b3IuaCIgMwoKCiAgfnZlY3RvciAoKSB7IH0KCiAgdmVj
dG9yICYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvciAmIF9feCkgewogICAgaWYgKCZfX3ggPT0gdGhp
cykgcmV0dXJuICp0aGlzOwogICAgaWYgKF9feC5zaXplKCkgPiBjYXBhY2l0eSgpKSB7CiAgICAg
IF9NX2RlYWxsb2NhdGUoKTsKICAgICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgIH0K
ICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICBfTV9maW5pc2gg
PSBiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9feC5zaXplKCkpOwogICAgcmV0dXJuICp0aGlz
OwogIH0KCiAgIAogICAKICAgCiAgIAoKICB2b2lkIGFzc2lnbihzaXplX3QgX19uLCBib29sIF9f
eCkgewogICAgaWYgKF9fbiA+IHNpemUoKSkgewogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9N
X2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwogICAgICBpbnNlcnQoZW5kKCksIF9fbiAt
IHNpemUoKSwgX194KTsKICAgIH0KICAgIGVsc2UgewogICAgICBlcmFzZShiZWdpbigpICsgX19u
LCBlbmQoKSk7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9f
eCA/IH4wIDogMCk7CiAgICB9CiAgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRv
cj4KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+
OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9f
bGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZv
aWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1
ZV90eXBlKQogICAgeyBhc3NpZ24oKHNpemVfdCkgX19uLCAoYm9vbCkgX192YWwpOyB9CgogIHRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsgX01f
YXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3Qg
KSApOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2ln
bl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgIGl0ZXJhdG9yIF9fY3Vy
ID0gYmVnaW4oKTsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5k
KCk7ICsrX19jdXIsICsrX19maXJzdCkKICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAgICBpZiAo
X19maXJzdCA9PSBfX2xhc3QpCiAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICBlbHNlCiAg
ICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9y
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBm
b3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICAgIGRpc3Rh
bmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogICAgaWYgKF9fbGVuIDwgc2l6ZSgpKQogICAg
ICBlcmFzZShjb3B5KF9fZmlyc3QsIF9fbGFzdCwgYmVnaW4oKSksIGVuZCgpKTsKICAgIGVsc2Ug
ewogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgYWR2YW5jZShf
X21pZCwgc2l6ZSgpKTsKICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgYmVnaW4oKSk7CiAgICAg
IGluc2VydChlbmQoKSwgX19taWQsIF9fbGFzdCk7CiAgICB9CiAgfSAgICAKCgoKICB2b2lkIHJl
c2VydmUoc2l6ZV90eXBlIF9fbikgewogICAgaWYgKGNhcGFjaXR5KCkgPCBfX24pIHsKICAgICAg
dW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAgICAgX01fZmluaXNoID0g
Y29weShiZWdpbigpLCBlbmQoKSwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgIF9NX2RlYWxsb2Nh
dGUoKTsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICBfTV9lbmRfb2Zf
c3RvcmFnZSA9IF9fcSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgIH0K
ICB9CgogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVm
ZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFj
aygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29u
c3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgdm9pZCBwdXNoX2JhY2soYm9vbCBfX3gpIHsK
ICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkKICAgICAgKl9NX2Zp
bmlzaCsrID0gX194OwogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwog
IH0KICB2b2lkIHN3YXAodmVjdG9yICYgX194KSB7CiAgICAgOjpzd2FwKF9NX3N0YXJ0LCBfX3gu
X01fc3RhcnQpOwogICAgIDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAgIDo6
c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9CiAgaXRl
cmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194ID0gYm9vbCgpKSB7CiAg
ICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01f
ZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkK
ICAgICAgKl9NX2ZpbmlzaCsrID0gX194OwogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KF9f
cG9zaXRpb24sIF9feCk7CiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9CgoKICAgCiAgdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9z
aXRpb24sCiAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJh
dG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3Bvc2l0
aW9uLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFz
cyBfSW50ZWdlcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0lu
dGVnZXIgX19uLCBfSW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVl
X3R5cGUpIHsKICAgIGluc2VydChfX3BvcywgKHNpemVfdHlwZSkgX19uLCAoYm9vbCkgX194KTsK
ICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9k
aXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9pbnNlcnRfcmFuZ2UoX19wb3MsIF9fZmly
c3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7CiAgfQojIDc2MSAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3N0bF9idmVjdG9yLmgiIDMKCiAgCiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlv
biwgc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOwog
ICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgIGNvcHlfYmFja3dhcmQo
X19wb3NpdGlvbiwgZW5kKCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAg
ICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9f
eCk7CiAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgIH0KICAgIGVs
c2UgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwog
ICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgIGl0ZXJh
dG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAg
ICAgIGZpbGxfbihfX2ksIF9fbiwgX194KTsKICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0
aW9uLCBlbmQoKSwgX19pICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICBfTV9kZWFsbG9j
YXRlKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJ
VCAtIDEpL19fV09SRF9CSVQ7CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAg
IH0KICB9CgogIHZvaWQgcG9wX2JhY2soKSB7IC0tX01fZmluaXNoOyB9CiAgaXRlcmF0b3IgZXJh
c2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgp
KQogICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAgIC0t
X01fZmluaXNoOwogICAgcmV0dXJuIF9fcG9zaXRpb247CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0
ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fZmluaXNoID0gY29weShf
X2xhc3QsIGVuZCgpLCBfX2ZpcnN0KTsKICAgIHJldHVybiBfX2ZpcnN0OwogIH0KICB2b2lkIHJl
c2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgIGlmIChf
X25ld19zaXplIDwgc2l6ZSgpKSAKICAgICAgZXJhc2UoYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlw
ZShfX25ld19zaXplKSwgZW5kKCkpOwogICAgZWxzZQogICAgICBpbnNlcnQoZW5kKCksIF9fbmV3
X3NpemUgLSBzaXplKCksIF9feCk7CiAgfQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCks
IGVuZCgpKTsgfQp9OwoKCgp0eXBlZGVmIHZlY3Rvcjxib29sLCBhbGxvYz4gYml0X3ZlY3RvcjsK
CiMgODIyICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS4yLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvc3RsX2J2ZWN0b3IuaCIgMwoKCgoKCgoKCgoKICAKCgoKIAogCiAKIyAzNSAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3ZlY3RvciIgMiAzCgoKCgogCiAKIAojIDkgIi4uL2hwL2hwRWxlbWVudDNkLmgiIDIKCgoK
CiAKCiAKCgoKdGVtcGxhdGU8Y2xhc3MgRj4KY2xhc3MgaHBfSFAzZFhYWCA6IHB1YmxpYyBzcGNf
RWxlbWVudDxGPiB7CnB1YmxpYzoKICAgCgoKCgogIGlubGluZSBocF9IUDNkWFhYKHNwY19UQ29s
dW1uPHJlYWw+KiBULCB1aW50IHApOwoKICAgCgoKCgoKCiAgaW5saW5lIGhwX0hQM2RYWFgoc3Bj
X1RDb2x1bW48cmVhbD4qIFQsIHVpbnQgcDAsIHVpbnQgcDEsIHVpbnQgcDIpOwoKICAgCgogIGlu
bGluZSBjb25zdCB1c2hvcnQqIHAoKSBjb25zdDsKCiAgIAoKCgogIHZpcnR1YWwgY29uc3QgZ2Vv
X0Nvbm5lY3RvcjMmIHN1cHBvcnQoKSBjb25zdCA9IDA7CgogICAKCgogIHZpcnR1YWwgdm9pZCBz
aHBmY3RJbmRpY2VzKGNvbnN0IHVpbnQgbiwgdmVjdG9yPHVpbnQ+JiBpbmRpY2VzKSBjb25zdDsK
CiAgdmlydHVhbCBjb25zdCBzcGNfVDxyZWFsPiYgVCgpIGNvbnN0IHsgcmV0dXJuIFRfOyB9Cgog
ICAKCgoKICB2aXJ0dWFsIFJlYWwzZCB2ZXJ0ZXgodW5zaWduZWQgaW50IGkpIGNvbnN0ID0gMDsK
cHJpdmF0ZToKICAgCiAgdXNob3J0IHBfWzNdOwoKcHJvdGVjdGVkOgogICAKICBzcGNfVE1hdHJp
eDxyZWFsPiBUXzsKfTsKCnRlbXBsYXRlPGNsYXNzIEY+CmhwX0hQM2RYWFg8Rj46OmhwX0hQM2RY
WFgoc3BjX1RDb2x1bW48cmVhbD4qIFQsIHVpbnQgcCkgOiBUXyhUKSB7CiAgcF9bMF0gPSBwOyBw
X1sxXSA9IHA7IHBfWzJdID0gcDsKfQoKdGVtcGxhdGU8Y2xhc3MgRj4KaHBfSFAzZFhYWDxGPjo6
aHBfSFAzZFhYWChzcGNfVENvbHVtbjxyZWFsPiogVCwgdWludCBwMCwgdWludCBwMSwgdWludCBw
MikgOiAKICBUXyhUKSB7CgogIHBfWzBdID0gcDA7IHBfWzFdID0gcDE7IHBfWzJdID0gcDI7Cn0K
CnRlbXBsYXRlPGNsYXNzIEY+CmNvbnN0IHVzaG9ydCogaHBfSFAzZFhYWDxGPjo6cCgpIGNvbnN0
IHsKICByZXR1cm4gcF87Cn0KCgojIDEwICIuLi9ocC9ocEVsZW1lbnRzM2QuaCIgMgoKIyAxICIu
Li9ocC9ocEhQM2QwMDAuaCIgMQogCgoKCgoKCgoKCiMgMSAiLi4vaHAvaHBLYXJuaWFkYWtpcy5o
IiAxCiAKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuMi8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtIiAxIDMKIAogCgoKCgoKIyA5ICIuLi9ocC9o
cEthcm5pYWRha2lzLmgiIDIKCgoKIyAxICIuLi9ocC9ocERlYnVnLmgiIDEKIAoKCgoKCgoKCgoK
IAoKCgoKCgogCgoKCgoKIAoKCiAKCgogCgoKCiAKCgogCgoKCgoKIyAxMiAiLi4vaHAvaHBLYXJu
aWFkYWtpcy5oIiAyCgoKIAoKIAoKCgp0ZW1wbGF0ZTxpbnQgbnVtYmVyPgpjbGFzcyBvcmRlcnMg
ewogIGZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvcjw8IChvc3RyZWFtJiBvcywgY29uc3Qgb3JkZXJz
PG51bWJlcj4mIG8pIHsgCiAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bWJlcjsg
KytpKSB7CiAgICAgIG9zIDw8ICJwKCIgPDwgaSA8PCAiKSA9ICIgPDwgby5wX1tpXSA8PCAiLCBQ
KCIgPDwgaSA8PCAiKSA9ICIgPDwgby5QX1tpXTsKICAgICAgaWYgKGkgPCBudW1iZXItMSkKCW9z
IDw8ICIsICI7CiAgICB9CiAgICByZXR1cm4gb3M7CiAgfQpwdWJsaWM6CiAgIAogIG9yZGVycygp
IHsKICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtYmVyOyArK2kpIHsKICAgICAg
cF9baV0gPSAwOyBQX1tpXSA9IDA7CiAgICB9CiAgfQoKIAogCiAKIAogCiAKCiAgIAoKICBvcmRl
cnMoY29uc3QgaW50IHAwLCBjb25zdCBpbnQgUDAsIAoJIGNvbnN0IGludCBwMSA9IDAsIGNvbnN0
IGludCBQMSA9IDAsIAoJIGNvbnN0IGludCBwMiA9IDAsIGNvbnN0IGludCBQMiA9IDApIHsKICAg
IGlmIChudW1iZXIgPiAwKSB7CiAgICAgIHBfWzBdID0gcDA7CiAgICAgIFBfWzBdID0gUDA7CiAg
ICB9CiAgICBpZiAobnVtYmVyID4gMSkgewogICAgICBwX1sxXSA9IHAxOwogICAgICBQX1sxXSA9
IFAxOwogICAgfQogICAgaWYgKG51bWJlciA+IDIpIHsKICAgICAgcF9bMl0gPSBwMjsKICAgICAg
UF9bMl0gPSBwMjsKICAgIH0KICB9CgogICAKICBpbnQgcF9bbnVtYmVyXTsKCiAgIAogIGludCBQ
X1tudW1iZXJdOwoKICAgCiAgaW5saW5lIGludCBwKGNvbnN0IHVuc2lnbmVkIGludCBpKSBjb25z
dCB7IAogICAgaWYgKGkgPCBudW1iZXIpCiAgICAgIHJldHVybiBwX1tpXTsKICAgIGVsc2UKICAg
ICAgcmV0dXJuIDA7CiAgfQoKICAgCiAgaW5saW5lIGludCBQKGNvbnN0IHVuc2lnbmVkIGludCBp
KSBjb25zdCB7IAogICAgaWYgKGkgPCBudW1iZXIpCiAgICAgIHJldHVybiBQX1tpXTsKICAgIGVs
c2UKICAgICAgcmV0dXJuIDA7CiAgfQoKICAgCiAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBvcmRlcnM8bnVtYmVyPiYgbykgY29uc3QgewogICAgYm9vbCBlcXVhbCA9IHRydWU7CiAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bWJlcjsgKytpKQogICAgICBlcXVhbCAmPSAo
cF9baV0gPT0gby5wX1tpXSkgJiYgKFBfW2ldID09IG8uUF9baV0pOwogICAgcmV0dXJuIGVxdWFs
OwogIH0KfTsKCnRlbXBsYXRlPGludCBudW1iZXI+CnN0cnVjdCBoYXNoPG9yZGVyczxudW1iZXI+
ID4gewogIHNpemVfdCBvcGVyYXRvcigpKGNvbnN0IG9yZGVyczxudW1iZXI+JiBvKSBjb25zdCB7
CiAKICAgIHJldHVybiAxOwogIH0KfTsKCnRlbXBsYXRlPGludCB0eXBlLCBpbnQgbW9kZT4KY2xh
c3MgaHBfS2FybmlhZGFraXM7CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKdGVtcGxhdGU8aW50IHR5cGUsIGludCBtb2RlPgpjbGFzcyBocF9LYXJuaWFkYWtpcyB7CiAg
ZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwKICAob3N0cmVhbSYgb3MsIGNvbnN0IGhwX0thcm5p
YWRha2lzPHR5cGUsIG1vZGU+JiBleHApIHsgcmV0dXJuCgkJCQkJCQkgICBleHAuaW5mbyhvcyk7
IH0KcHVibGljOgogICAKCiAgaHBfS2FybmlhZGFraXMoKSA6IHByaW5jaXBhbF8oMCkge30KCiAg
IAoKCgoKCgoKCgoKCgogIGhwX0thcm5pYWRha2lzKGNvbnN0IGludCBQLCBjb25zdCBkb3VibGUq
IHhQLCBjb25zdCBpbnQgTnhQLAoJCSBjb25zdCBpbnQgUSA9IDAsIGNvbnN0IGRvdWJsZSogeFEg
PSAwLCBjb25zdCBpbnQgTnhRID0gMCwKCQkgY29uc3QgaW50IFIgPSAwLCBjb25zdCBkb3VibGUq
IHhSID0gMCwgY29uc3QgaW50IE54UiA9IDApOwoKICAgCgogIGhwX0thcm5pYWRha2lzKGNvbnN0
IGhwX0thcm5pYWRha2lzPHR5cGUsIG1vZGU+JiBhcmcpOwoKICAgCgogIGhwX0thcm5pYWRha2lz
PHR5cGUsIG1vZGU+JiBvcGVyYXRvcj0oY29uc3QgaHBfS2FybmlhZGFraXM8dHlwZSwgbW9kZT4m
IGFyZyk7CgogIH5ocF9LYXJuaWFkYWtpcygpIHt9CgogICAKCiAgdW5zaWduZWQgaW50IG4oKSBj
b25zdCB7CiAgICByZXR1cm4gKG9yZGVyc18ucCgwKSArIDEpKihvcmRlcnNfLnAoMSkgKyAxKSoo
b3JkZXJzXy5wKDIpICsgMSkgKyAxOwogIH0KCiAgIAogIG9zdHJlYW0mIGluZm8ob3N0cmVhbSYg
b3MpIGNvbnN0OwoKICAgCgoKICBpbmxpbmUgcmVhbCogdmFsdWVzKCkgY29uc3QgeyByZXR1cm4g
cHJpbmNpcGFsXzsgfQpwcml2YXRlOgogICAKICBvcmRlcnM8dHlwZT4gb3JkZXJzXzsKCiAgIAog
IHJlYWwqIHByaW5jaXBhbF87CiAgIAoKCgogIHN0YXRpYyBoYXNoX21hcDxvcmRlcnM8dHlwZT4s
IHJlYWwqPiBwcmluY2lwYWxfSDsKfTsKCiMgMzI0ICIuLi9ocC9ocEthcm5pYWRha2lzLmgiCgoK
CiMgMTEgIi4uL2hwL2hwSFAzZDAwMC5oIiAyCgoKCgoKCgogCgogCgoKCmNsYXNzIGhwX0hQM2Qw
MDAgOiBwdWJsaWMgaHBfSFAzZFhYWDxyZWFsPiB7CnB1YmxpYzoKICBocF9IUDNkMDAwKGNvbnN0
IGdlb19IZXhhaGVkcm9uM2QmIGNlbGwsIHVpbnQgcCwgc3BjX1RDb2x1bW48cmVhbD4qIFQwLCAK
CSAgICAgc3BjX1RDb2x1bW48cmVhbD4qIFQxKTsKCiAgdmlydHVhbCB+aHBfSFAzZDAwMCgpOwoK
ICB2aXJ0dWFsIG9zdHJlYW0mIGluZm8ob3N0cmVhbSYgb3MpIGNvbnN0OwoKICAgCgogIHZpcnR1
YWwgY29uc3QgZ2VvX0hleGFoZWRyb24mIHN1cHBvcnQoKSBjb25zdCB7IHJldHVybiBjZWxsXy5j
b25uZWN0b3IoKTsgfQoKICB2aXJ0dWFsIFJlYWwzZCB2ZXJ0ZXgodW5zaWduZWQgaW50IGkpIGNv
bnN0OwoKICBpbmxpbmUgY29uc3QgaHBfS2FybmlhZGFraXM8MSwwPiogc2hwZmN0WCgpIGNvbnN0
IHsgcmV0dXJuIHNocGZjdFhfLmdldCgpOyB9CiAgaW5saW5lIGNvbnN0IGhwX0thcm5pYWRha2lz
PDEsMD4qIHNocGZjdFkoKSBjb25zdCB7IHJldHVybiBzaHBmY3RZXy5nZXQoKTsgfQogIGlubGlu
ZSBjb25zdCBocF9LYXJuaWFkYWtpczwxLDA+KiBzaHBmY3RaKCkgY29uc3QgeyByZXR1cm4gc2hw
ZmN0Wl8uZ2V0KCk7IH0KCiAgaW5saW5lIGNvbnN0IGhwX0thcm5pYWRha2lzPDEsMT4qIHNocGZj
dERYKCkgY29uc3QgeyByZXR1cm4gCgkJCQkJCQkgc2hwZmN0RFhfLmdldCgpOyB9CiAgaW5saW5l
IGNvbnN0IGhwX0thcm5pYWRha2lzPDEsMT4qIHNocGZjdERZKCkgY29uc3QgeyByZXR1cm4gCgkJ
CQkJCQkgc2hwZmN0RFlfLmdldCgpOyB9CiAgaW5saW5lIGNvbnN0IGhwX0thcm5pYWRha2lzPDEs
MT4qIHNocGZjdERaKCkgY29uc3QgeyByZXR1cm4gCgkJCQkJCQkgc2hwZmN0RFpfLmdldCgpOyB9
CgogIGlubGluZSBjb25zdCBpbnRfUXVhZHJhdHVyZSogaW50ZWdyYXRpb25YKCkgY29uc3QgeyBy
ZXR1cm4gaW50WF8uZ2V0KCk7IH0KICBpbmxpbmUgY29uc3QgaW50X1F1YWRyYXR1cmUqIGludGVn
cmF0aW9uWSgpIGNvbnN0IHsgcmV0dXJuIGludFlfLmdldCgpOyB9CiAgaW5saW5lIGNvbnN0IGlu
dF9RdWFkcmF0dXJlKiBpbnRlZ3JhdGlvblooKSBjb25zdCB7IHJldHVybiBpbnRaXy5nZXQoKTsg
fQoKICBpbmxpbmUgY29uc3QgUmVhbDNkIGNoaShyZWFsIHgsIHJlYWwgeSwgcmVhbCB6KSBjb25z
dCB7CiAgICBpZiggIDAgICAhPTApIGNvdXQgPDwgICAnWyc8PCAgIi4uL2hwL2hwSFAzZDAwMC5o
IiAgPDwgIiwgbGluZSAiIDw8IDU1IDw8ICJdICIgPDwgX19QUkVUVFlfRlVOQ1RJT05fXyA8PCAi
IC0tIiAgPDwgIiAiIDw8ICAgICAnKCcgPDwgeCA8PCAiLCAiIDw8IHkgPDwgIiwgIiA8PCB6IDw8
ICcpJyAgIDw8IGVuZGw7ICA7CiAgICByZXR1cm4gY2VsbF8uY2hpKHgsIHksIHopOyB9CgogIGlu
bGluZSBjb25zdCByZWFsIGphY29iaWFuKHJlYWwgeCwgcmVhbCB5LCByZWFsIHopIGNvbnN0IHsK
ICAgIGlmKCAgMCAgICE9MCkgY291dCA8PCAgICdbJzw8ICAiLi4vaHAvaHBIUDNkMDAwLmgiICA8
PCAiLCBsaW5lICIgPDwgNTkgPDwgIl0gIiA8PCBfX1BSRVRUWV9GVU5DVElPTl9fIDw8ICIgLS0i
ICA8PCAiICIgPDwgICAgICcoJyA8PCB4IDw8ICIsICIgPDwgeSA8PCAiLCAiIDw8IHogPDwgJykn
ICAgPDwgZW5kbDsgIDsKICAgIHJldHVybiBjZWxsXy5qYWNvYmlhbih4LCB5LCB6KTsgfQpwcml2
YXRlOgogIGNvbnN0IGdlb19IZXhhaGVkcm9uM2QmIGNlbGxfOwogIGF1dG9fcHRyPGhwX0thcm5p
YWRha2lzPDEsMD4gPiBzaHBmY3RYXywgc2hwZmN0WV8sIHNocGZjdFpfOwogIGF1dG9fcHRyPGhw
X0thcm5pYWRha2lzPDEsMT4gPiBzaHBmY3REWF8sIHNocGZjdERZXywgc2hwZmN0RFpfOwogIGF1
dG9fcHRyPGludF9HYXVzc0xvYmF0dG8+IGludFhfLCBpbnRZXywgaW50Wl87Cn07CgoKIyAxMSAi
Li4vaHAvaHBFbGVtZW50czNkLmgiIDIKCgoKIyA4ICIuLi9ocC9ocFNwYWNlM2QuaCIgMgoKCgoK
CgoKCgoKIAoKY2xhc3MgdGJ4X1NjYW48aHBfSFAzZFhYWDxyZWFsPiA+IDogcHVibGljIHRieF9T
Y2FuPHNwY19FbGVtZW50PHJlYWw+ID4gewpwdWJsaWM6ICAKICBocF9IUDNkWFhYPHJlYWw+JiBv
cGVyYXRvcisrKGludCkgPSAwOwp9OwoKIAp0eXBlZGVmIHRieF9TY2FuPGhwX0hQM2RYWFg8cmVh
bD4gPiBocF9IUDNkU2NhbjsKCiAKCiAKCgpjbGFzcyBocF9IUDNkIDogcHVibGljIHNwY19TcGFj
ZTxyZWFsPiB7CgpwdWJsaWM6CiAgIAoKCgoKCgoKCgogIGhwX0hQM2QoZ2VvX01lc2gzJiBtc2gs
IHVpbnQgbCwgdWludCBwLCBocF9Cb3VuZGFyeUNvbmRpdGlvbiogYmMgPSBfX251bGwgKTsKICBp
bmxpbmUgdmlydHVhbCB+aHBfSFAzZCgpOwogIAogICAKICBpbmxpbmUgdWludCBkaW0oKSBjb25z
dDsKCiAgdmlydHVhbCBvc3RyZWFtJiBpbmZvKG9zdHJlYW0mIG9zLCB1aW50IG1vZGUgPSAwKSBj
b25zdDsKCiAgIAogIGlubGluZSB1aW50IG5lbG0oKSBjb25zdDsKCiAgIAogIGlubGluZSBocF9I
UDNkU2Nhbiogc2NhbigpIGNvbnN0OwoKICBpbmxpbmUgc2hvcnQgbChocF9IUDNkWFhYPHJlYWw+
JiBlbG0pIHsKICAgIEFkanVzdCYgYWRqKGFkal9bZWxtLnN1cHBvcnQoKS5rZXkoKV0pOwogICAg
cmV0dXJuIGFkai5sOwogIH0KCiAgIAoKCgoKCgogIHZvaWQgYWRqdXN0KGhwX0hQM2RYWFg8cmVh
bD4mIGVsbSwgaW50IGwsIGludCBwKTsKCiAgIAoKCgoKCgoKCgoKCgoKCiAgdm9pZCByZWJ1aWxk
KCk7Cgpwcm90ZWN0ZWQ6CiAgIAoKCgoKCiAgdGVtcGxhdGU8aW50IGRpbT4KICBzdHJ1Y3QgQ29u
dHJvbCB7CiAgICAgCgoKCgoKCgoKICAgIHVjaGFyICAgICAgICAgdGFnOwoKICAgICAKICAgIHVz
aG9ydCAgICAgICAgcFtkaW1dOwoKICAgICAKICAgIHNwY19CRm5jSW5kZXggaWR4OwoKICAgICAK
CiAgICBDb250cm9sKCkgeyB0YWcgPSAwOyB9CiAgfTsKCiAgIAoKCgoKCiAgc3RydWN0IENvbnRy
b2wwICB7CiAgICAgCgoKCgoKCgoKICAgIHVjaGFyICAgICAgICAgdGFnOwoKICAgICAKICAgIHNw
Y19CRm5jSW5kZXggaWR4OwoKICAgICAKCiAgICBDb250cm9sMCgpIHsgdGFnID0gMDsgfQogIH07
CgogICAKCgogIHN0cnVjdCBBZGp1c3QgewogICAgIAoKCiAgICBzaG9ydCBwOwoKICAgICAKCgog
ICAgc2hvcnQgbDsKCiAgICAgCgoKICAgIEFkanVzdCgpIHsgcCA9IGwgPSAwOyB9CiAgfTsKCiAg
IAogIGdlb19NZXNoMyYgbXNoXzsKCiAgIAogIGhwX0JvdW5kYXJ5Q29uZGl0aW9uKiBiY187Cgog
ICAKICB0YnhfQ29ubmVjdG9yPGhwX0hQM2RYWFg8cmVhbD4qLCAxPiogZWxtXzsKCiAgIAogIHRi
eF9EeW5BcnJheTxDb250cm9sMD4gY3RybDBfOwoKICAgCiAgdGJ4X0R5bkFycmF5PENvbnRyb2w8
MT4gPiBjdHJsMV87CgogICAKICB0YnhfRHluQXJyYXk8Q29udHJvbDwyPiA+IGN0cmwyXzsKCiAg
IAogIHRieF9EeW5BcnJheTxDb250cm9sPDM+ID4gY3RybDNfOwoKICAgCiAgdGJ4X0R5bkFycmF5
PEFkanVzdD4gYWRqXzsKCiAgIAogIHVpbnQgZGltXzsKCiAgIAogIHVpbnQgbmVsbV87CgogICAK
ICBib29sIHJlYnVpbGRfOwoKICAgCgoKCgoKCgoKCgoKICB2aXJ0dWFsIHZvaWQgcmVidWlsZDBf
KGdlb19Db25uZWN0b3IzJiBjbnRyLCBpbnQgbCwgaW50JiBMLCBpbnQmIFApOwogIHZpcnR1YWwg
dm9pZCByZWJ1aWxkMV8oZ2VvX0hleGFoZWRyb24zZCYgY2VsbCwgc3BjX1RDb2x1bW48cmVhbD4q
IFQgPSBfX251bGwgKTsKCiAgaW5saW5lIHZvaWQgZGVhY3RpdmF0ZV8oZ2VvX0Nvbm5lY3RvcjIm
IGZhY2UpOwogIGlubGluZSB2b2lkIGRlYWN0aXZhdGVfKGdlb19FZGdlJiBlZGcpOwogIGlubGlu
ZSB2b2lkIGRlYWN0aXZhdGVfKGdlb19WZXJ0ZXgmIHZ0eCk7Cn07Cgp1aW50IGhwX0hQM2Q6OmRp
bSgpIGNvbnN0IHsgCiAgaWYgKHJlYnVpbGRfKSAoKGhwX0hQM2QqKXRoaXMpLT5yZWJ1aWxkKCk7
ICAgCiAgcmV0dXJuIGRpbV87IAp9Cgp1aW50IGhwX0hQM2Q6Om5lbG0oKSBjb25zdCB7IAogIGlm
IChyZWJ1aWxkXykgKChocF9IUDNkKil0aGlzKS0+cmVidWlsZCgpOyAgIAogIHJldHVybiBuZWxt
XzsgCn0KCmhwX0hQM2RTY2FuKiBocF9IUDNkOjpzY2FuKCkgY29uc3QgeyAKICBpZiAocmVidWls
ZF8pICgoaHBfSFAzZCopdGhpcyktPnJlYnVpbGQoKTsgICAKICByZXR1cm4gbmV3IHRieF9QTGlz
dFNjYW48aHBfSFAzZFhYWDxyZWFsPiA+KCplbG1fKTsKfQoKdm9pZCBocF9IUDNkOjpkZWFjdGl2
YXRlXyhnZW9fQ29ubmVjdG9yMiYgZmFjZSkgewoKICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IDQ7ICsraSkKICAgIGN0cmwyX1tmYWNlLmNoaWxkKGkpLT5rZXkoKV0udGFnIHw9IDI7Cgog
IGdlb19UcmlhbmdsZSogdHJpID0gZHluYW1pY19jYXN0PGdlb19UcmlhbmdsZSo+KCZmYWNlKTsK
ICBpZiAodHJpKSB7CiAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IDM7ICsraSkKICAg
ICAgY3RybDFfW3RyaS0+Y2hpbGQoNCktPmVkZ2UoaSktPmtleSgpXS50YWcgfD0gMjsKICAgIHJl
dHVybjsKICB9CiAgZ2VvX1F1YWQqIHF1YWQgPSBkeW5hbWljX2Nhc3Q8Z2VvX1F1YWQqPigmZmFj
ZSk7CiAgaWYgKHF1YWQpIHsKICAgIGN0cmwxX1txdWFkLT5jaGlsZCgwKS0+ZWRnZSgxKS0+a2V5
KCldLnRhZyB8PSAyOwogICAgY3RybDFfW3F1YWQtPmNoaWxkKDApLT5lZGdlKDIpLT5rZXkoKV0u
dGFnIHw9IDI7CiAgICBjdHJsMV9bcXVhZC0+Y2hpbGQoMiktPmVkZ2UoMCktPmtleSgpXS50YWcg
fD0gMjsKICAgIGN0cmwxX1txdWFkLT5jaGlsZCgyKS0+ZWRnZSgzKS0+a2V5KCldLnRhZyB8PSAy
OwogICAgY3RybDBfW3F1YWQtPmNoaWxkKDApLT52ZXJ0ZXgoMiktPmtleSgpXS50YWcgfD0gMjsK
ICAgIHJldHVybjsKICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAogIGNlcnIgPDwgJ1snIDw8ICIuLi9ocC9ocFNwYWNlM2QuaCIg
PDwgIiwgbGluZSAiIDw8IDI1NyA8PCAiXSAiIAogICAgICAgPDwgX19QUkVUVFlfRlVOQ1RJT05f
XyA8PCAiIC0tIGRlYWN0aXZhdGUgbm90IHN1cHBvcnRlZC4iIDw8IGVuZGw7CiAgZXhpdCgxKTsK
fQoKdm9pZCBocF9IUDNkOjpkZWFjdGl2YXRlXyhnZW9fRWRnZSYgZWRnKSB7CiAgY3RybDFfW2Vk
Zy5jaGlsZCgwKS0+a2V5KCldLnRhZyB8PSAyOwogIGN0cmwxX1tlZGcuY2hpbGQoMSktPmtleSgp
XS50YWcgfD0gMjsKICBjdHJsMF9bZWRnLmNoaWxkKDEpLT52ZXJ0ZXgoMCktPmtleSgpXS50YWcg
fD0gMjsKfQoKdm9pZCBocF9IUDNkOjpkZWFjdGl2YXRlXyhnZW9fVmVydGV4JiB2dHgpIHsKICBj
dHJsMF9bdnR4LmNoaWxkKDApLT5rZXkoKV0udGFnIHw9IDI7Cn0KCgojIDE2ICIuLi9ocC5oIiAy
CgojIDEgIi4uL2hwL2hwQkZvcm0zZC5oIiAxCiAKCgoKCgoKCgoKCgogCgogCgpjbGFzcyBocF9M
YXBsYWNlM2QgOiBwdWJsaWMgb3BfQmlsaW5lYXJGb3JtPHJlYWw+IHsKICBmcmllbmQgb3N0cmVh
bSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvcywgY29uc3QgaHBfTGFwbGFjZTNkJiBiKTsKcHVibGlj
OgogICAKCiAgaHBfTGFwbGFjZTNkKCkge30KICB2aXJ0dWFsIH5ocF9MYXBsYWNlM2QoKSB7fQoK
ICAgCgoKCgoKCgoKCiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IHNwY19FbGVtZW50PHJlYWw+JiBl
bG1YLCAKCQkgIGNvbnN0IHNwY19FbGVtZW50PHJlYWw+JiBlbG1ZLCAKCQkgIHNwY19FbGVtZW50
TWF0cml4PHJlYWw+JiBlbSk7IAogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBocF9IUDNkMDAwJiBl
bG1YLCBjb25zdCBocF9IUDNkMDAwJiBlbG1ZLCAKCQkgIHNwY19FbGVtZW50TWF0cml4PHJlYWw+
JiBlbSk7CiAgCnByaXZhdGU6Cn07IAoKIAoKIAoKY2xhc3MgaHBfSWRlbnRpdHkzZCA6IHB1Ymxp
YyBvcF9CaWxpbmVhckZvcm08cmVhbD4gewogIGZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvcjw8KG9z
dHJlYW0mIG9zLCBjb25zdCBocF9JZGVudGl0eTNkJiBiKTsKcHVibGljOgogICAKCiAgaHBfSWRl
bnRpdHkzZCgpIHt9CiAgdmlydHVhbCB+aHBfSWRlbnRpdHkzZCgpIHt9CgogICAKCgoKCgoKCgoK
ICB2b2lkIG9wZXJhdG9yKCkoY29uc3Qgc3BjX0VsZW1lbnQ8cmVhbD4mIGVsbVgsIAoJCSAgY29u
c3Qgc3BjX0VsZW1lbnQ8cmVhbD4mIGVsbVksIAoJCSAgc3BjX0VsZW1lbnRNYXRyaXg8cmVhbD4m
IGVtKTsgCiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IGhwX0hQM2QwMDAmIGVsbVgsIGNvbnN0IGhw
X0hQM2QwMDAmIGVsbVksIAoJCSAgc3BjX0VsZW1lbnRNYXRyaXg8cmVhbD4mIGVtKTsKICAKcHJp
dmF0ZToKICAgCiAgdmVjdG9yPHJlYWw+IGludGVybWVkaWF0ZV87CiAgdmVjdG9yPHJlYWw+IGph
Y29iaWFuXzsKfTsgCgoKIyAxNyAiLi4vaHAuaCIgMgoKIyAxICIuLi9ocC9ocExGb3JtM2QuaCIg
MQogCgoKCgoKCgoKCgoKCgoKIAoKIAoKCgoKCgpjbGFzcyBocF9SaWVzejNkIDogcHVibGljIGZu
Y19MaW5lYXJGb3JtPHJlYWw+IHsKICBmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFt
JiBvcywgY29uc3QgaHBfUmllc3ozZCYgbCk7CnB1YmxpYzoKICAgCgoKCgoKCgogIGhwX1JpZXN6
M2QoY29uc3QgdGJ4X0Zvcm11bGEmIGZybSwgaHBfQm91bmRhcnlDb25kaXRpb24qIGJjID0gMCk7
IAoKICAgCgoKCgoKCgogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBzcGNfRWxlbWVudDxyZWFsPiYg
ZWxtLCBzcGNfRWxlbWVudE1hdHJpeDxyZWFsPiYgZW0pOwogIHZvaWQgb3BlcmF0b3IoKShjb25z
dCBocF9IUDNkMDAwJiBlbG0sIHNwY19FbGVtZW50TWF0cml4PHJlYWw+JiBlbSk7Cgpwcml2YXRl
OgogICAKICBjb25zdCB0YnhfRm9ybXVsYSogZnJtXzsKCiAgIAogIHZlY3RvcjxyZWFsPiBpbnRl
cm1lZGlhdGVfOwogIHZlY3RvcjxyZWFsPiBqYWNvYmlhbl87CgogICAKCiAgaHBfQm91bmRhcnlD
b25kaXRpb24qIGJjXzsKfTsgCgoKIyAxOCAiLi4vaHAuaCIgMgoKCgojIDI2ICJsaW5lbC5jYyIg
MgoKIAoKCgoKCgp0ZW1wbGF0ZSBjbGFzcyBvcF9MaUNvPHJlYWw+Owp0ZW1wbGF0ZSBjbGFzcyBv
cF9Mb2NhbDxyZWFsPjsKIAp0ZW1wbGF0ZSBjbGFzcyBvcF9DRzxyZWFsPjsKdGVtcGxhdGUgY2xh
c3Mgc3BjX0VsZW1lbnRNYXRyaXg8cmVhbD47CnRlbXBsYXRlIGNsYXNzIGdlb19TZW1hbnRpY3M8
Ym9vbD47CgoKIAogCnZvaWQgYWRhcHQoaHBfSFAyZCYgc3BjLCBSZWFsMmQgUykgewoKICBocF9I
UDJkU2Nhbiogc2MgPSBzcGMuc2NhbigpOwogIHdoaWxlICgqc2MpIHsKICAgIGhwX0hQMmRYWFg8
cmVhbD4mIGVsbSA9ICgqc2MpKys7CgogICAgaW50IGwgPSAwLCBwID0gMDsKCiAgICBocF9IUDJk
MDAxKiBlbG1CID0gZHluYW1pY19jYXN0PGhwX0hQMmQwMDEqPigmZWxtKTsKICAgIGlmIChlbG1C
KSB7CiAgICAgIFJlYWwyZCB4MChlbG1CLT52ZXJ0ZXgoMCkpOwogICAgICBSZWFsMmQgeDEoZWxt
Qi0+dmVydGV4KDEpKTsKICAgICAgUmVhbDJkIHgyKGVsbUItPnZlcnRleCgyKSk7CiAgICAgIFJl
YWwyZCB4MyhlbG1CLT52ZXJ0ZXgoMykpOwogIAogICAgICByZWFsIHByID0gUmVhbDJkKHgwIC0g
UykubDIoKSAqIFJlYWwyZCh4MSAtIFMpLmwyKCkgKgogICAgICAgICAgICAgICAJICAgICAgICAg
ICAgIFJlYWwyZCh4MiAtIFMpLmwyKCkgKiBSZWFsMmQoeDMgLSBTKS5sMigpOyAgCgogICAgICBp
ZiAocHIgPT0gMC4wKSB7CglsID0gc3BjLmwoZWxtKSArIDE7CglwID0gMDsKICAgICAgfQogICAg
fQogICAgc3BjLmFkanVzdChlbG0sIGwsIHApOwogIH0KICBkZWxldGUgc2M7Cn0KCiAKCmludCBt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikgewoKICB1aW50IGwgPSAwOwogIHVpbnQgcCA9IDE7
CiAgdWludCBhID0gMDsKICB1aW50IGdhdXNzID0gMjA7CiAgcmVhbCBlcHMgPSAxLmUtMjA7Cgog
IGlmIChhcmdjID4gMSkgbCA9IGF0b2koYXJndlsxXSk7CiAgaWYgKGFyZ2MgPiAyKSBwID0gYXRv
aShhcmd2WzJdKTsKICBpZiAoYXJnYyA+IDMpIGEgPSBhdG9pKGFyZ3ZbM10pOwogIGlmIChhcmdj
ID4gNCkgZ2F1c3MgPSBhdG9pKGFyZ3ZbNF0pOwogIGlmIChhcmdjID4gNSkgZXBzID0gYXRvZihh
cmd2WzVdKTsKCiAgY291dCA8PCAnWycgPDwgYXJndlswXSA8PCAiXSAiOwogIGNvdXQgPDwgImwg
PSAiIDw8IGwgPDwgIiwgcCA9ICI8PCBwIDw8ICIsIGEgPSAiIDw8IGE7CiAgY291dCA8PCAiLCBn
YXVzcyA9ICIgPDwgZ2F1c3MgPDwgIiwgZXBzID0gIiA8PCBlcHMgPDwgJ1xuJzsKCgogCgogIHh5
X2Z1bmN0aW9uIGZbMl0gPSB7IHh5X2Z1bmN0aW9uKCIoMCkiKSwgeHlfZnVuY3Rpb24oIigwKSIp
IH07CgogIHh5X2Z1bmN0aW9uIGdbMTBdID0gewogICAgeHlfZnVuY3Rpb24oIihjb3MoMy80KnBp
LTMvMiphdGFuKHgpKSpjb3MocGkvNC1hdGFuKHgpLzIpKnNpbihwaS80LWF0YW4oeCkvMikvc3Fy
dCgyKnBpKS8oMSt4KngpXjAuMjUpIiksCiAgICB4eV9mdW5jdGlvbigiKC1jb3MocGkvNC1hdGFu
KHgpLzIpKigyK3gvc3FydCgxK3gqeCkrY29zKDIqYXRhbih4KSkpLzIvc3FydCgyKnBpKS8oMSt4
KngpXjAuMjUpIiksCiAgCiAgICB4eV9mdW5jdGlvbigiKGNvcyhhdGFuKHkpLzIpKigxLXNpbihh
dGFuKHkpLzIpKnNpbigzLzIqYXRhbih5KSkpL3NxcnQoMipwaSkvKDEreSp5KV4wLjI1KSIpLAog
ICAgeHlfZnVuY3Rpb24oIihjb3MoYXRhbih5KS8yKSpjb3MoMy8yKmF0YW4oeSkpKnNpbihhdGFu
KHkpLzIpL3NxcnQoMipwaSkvKDEreSp5KV4wLjI1KSIpLAoKICAgIHh5X2Z1bmN0aW9uKCIoY29z
KChwaS0yKmF0YW4oeCkpLzQpKmNvcygzLzQqKHBpLTIqYXRhbih4KSkpKnNpbigocGktMiphdGFu
KHgpKS80KS9zcXJ0KDIqcGkpLygxK3gqeCleMC4yNSkiKSwKICAgIHh5X2Z1bmN0aW9uKCIoY29z
KChwaS0yKmF0YW4oeCkpLzQpKigyK3gvc3FydCgxK3gqeCkrY29zKDIqYXRhbih4KSkpLzIvc3Fy
dCgyKnBpKS8oMSt4KngpXjAuMjUpIiksCgogICAgeHlfZnVuY3Rpb24oIigtKDIrMS9zcXJ0KDEr
eSp5KStjb3MoMiphdGFuKHkpKSkqc2luKGF0YW4oeSkvMikvMi9zcXJ0KDIqcGkpLygxK3kqeSle
MC4yNSkiKSwKICAgIHh5X2Z1bmN0aW9uKCIoKDIqY29zKGF0YW4oeSkvMikrY29zKDMvMiphdGFu
KHkpKSkqKHNpbihhdGFuKHkpLzIpKSooc2luKGF0YW4oeSkvMikpL3NxcnQoMipwaSkvKDEreSp5
KV4wLjI1KSIpLAoKICAgIHh5X2Z1bmN0aW9uKCIoKDMqc2luKGF0YW4oeSkvMikrc2luKDUvMiph
dGFuKHkpKSkvNC9zcXJ0KDIqcGkpLygxK3kqeSleMC4yNSkiKSwKICAgIHh5X2Z1bmN0aW9uKCIo
LSgyKmNvcyhhdGFuKHkpLzIpK2NvcygzLzIqYXRhbih5KSkpKihzaW4oYXRhbih5KS8yKSkqKHNp
bihhdGFuKHkpLzIpKS9zcXJ0KDIqcGkpLygxK3kqeSleMC4yNSkiKQogICAKICB9OwoKCiAKCiAg
eHlfZnVuY3Rpb24gTWF0TWF0WzZdID0gewogICAgeHlfZnVuY3Rpb24oIigxKigxLTAuMjUpLygx
LTIqMC4yNSkvKDErMC4yNSkpIiksCiAgICB4eV9mdW5jdGlvbigiKDEqMC4yNS8oMS0yKjAuMjUp
LygxKzAuMjUpKSIpLAogICAgeHlfZnVuY3Rpb24oIigwKSIpLAogICAgCiAgICB4eV9mdW5jdGlv
bigiKDEqKDEtMC4yNSkvKDEtMiowLjI1KS8oMSswLjI1KSkiKSwKICAgIHh5X2Z1bmN0aW9uKCIo
MCkiKSwKCiAgICB4eV9mdW5jdGlvbigiKDAuNCkiKQogIH07CgogIGNyYWNrZWRfcGFuZWwgbXNo
OwogCiAgIAoKICBsaW5lbF9TcGFjZSBzcGMobXNoLCBsLCBwKTsKICBjb3V0LnNldGYoaW9zOjpz
Y2llbnRpZmljLCBpb3M6OmZsb2F0ZmllbGQpOyBjb3V0LnByZWNpc2lvbigxKTsKICBvZnN0cmVh
bSBvZnMoInVjMC5lcHMiKTsKICBzcGMuc2tldGNoKG9mcywgUmVhbDJkKDAuMCwgMC4wKSwgODAs
IDMpOwogIAogIFJlYWwyZCBTKDAuMCwgMC4wKTsKICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhOyBp
KyspIHsKICAgIGFkYXB0KHNwYywgUyk7CiAgICBjaGFyIGZuYW1lWzEwXTsgc3ByaW50ZihmbmFt
ZSwgInVjJWQuZXBzIiwgaSArIDEpOwogICAgb2ZzdHJlYW0gb2ZzKGZuYW1lKTsKICAgIHNwYy5z
a2V0Y2gob2ZzLCBSZWFsMmQoMC4wLCAwLjApLCA4MCwgMyk7CiAgICBjb3V0IDw8IHNwYyA8PCBl
bmRsOwogIH0KIAogIGNvdXQuc2V0Zihpb3M6OnNjaWVudGlmaWMsIGlvczo6ZmxvYXRmaWVsZCk7
IGNvdXQucHJlY2lzaW9uKDIwKTsKCiAgCgogIExpbkVsMl9CRm9ybSBiZihnYXVzcywgTWF0TWF0
KTsKIAogIG9wX0xvY2FsPHJlYWw+IE0oc3BjLCBiZik7CiAgY291dCA8PCAiYmYgJiBNXG4iOwoK
ICB1aW50IGRpbSA9IHNwYy5kaW0oKTsKICBjb3V0IDw8IGRpbSA8PCAiICAiOwogIGNvdXQgPDwg
c3BjLmluZGV4IDw8IGVuZGw7CgogCgoKCgoKCgoKCgoKCgoKCgoKCgogIG9wX0NHPHJlYWw+IE1p
bnYoTSwgZXBzLCAxMDAwMCk7CgogIExpbkVsMl9MRm9ybSBsZihnYXVzcywgZywgZik7CgogIGZu
Y19WZWN0b3I8cmVhbD4gTChzcGMsIGxmKTsgICAKICBjb3V0IDw8ICJsZiAmIExcbiI7CgogCgoK
CgoKCgogIGZuY19WZWN0b3I8cmVhbD4gdShzcGMpOyAgCiAgTWludihMLCB1KTsKICBjb3V0IDw8
IE1pbnYgPDwgZW5kbDsKCgogCgoKCgoKCgogIGZuY19WZWN0b3I8cmVhbD4gdihzcGMpOwogIE0o
dSwgdik7CgoKIAoKCgoKCgoKCiAgY291dCA8PCAiRW5lcmd5ID0gIiA8PCAodSAqIHYpIDw8IGVu
ZGw7CiAgcmVhbCB1diA9ICh1ICogdik7CiAgY291dCA8PCAoMS4wNTIwNjIyMjMxMzU5NTggLSB1
dikvMS4wNTIwNjIyMjMxMzU5NTggPDwgZW5kbDsKCiAgcmV0dXJuIDA7Cn0K
>From nathan@gcc.gnu.org Sun Apr 01 00:00:00 2001
From: nathan@gcc.gnu.org
To: nathan@gcc.gnu.org
Cc: gcc-prs@gcc.gnu.org
Subject: Re: c++/934
Date: Sun, 01 Apr 2001 00:00:00 -0000
Message-id: <20010111134601.19985.qmail@sourceware.cygnus.com>
X-SW-Source: 2001-q1/msg00210.html
Content-length: 636

The following reply was made to PR c++/934; it has been noted by GNATS.

From: nathan@gcc.gnu.org
To: gcc-gnats@gcc.gnu.org, nathan@gcc.gnu.org, snyder@fnal.gov
Cc:  
Subject: Re: c++/934
Date: 11 Jan 2001 13:37:03 -0000

 Synopsis: new-abi bug: collisions between flag variables for local statics
 
 State-Changed-From-To: analyzed->closed
 State-Changed-By: nathan
 State-Changed-When: Thu Jan 11 05:37:03 2001
 State-Changed-Why:
     2001-01-11  Nathan Sidwell  <nathan@codesourcery.com>
     
             * decl2.c (get_guard): Set linkage from guarded decl.
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=934&database=gcc
>From jeff.sturm@appnet.com Sun Apr 01 00:00:00 2001
From: Jeff Sturm <jeff.sturm@appnet.com>
To: nobody@gcc.gnu.org
Cc: gcc-prs@gcc.gnu.org
Subject: Re: java/1677
Date: Sun, 01 Apr 2001 00:00:00 -0000
Message-id: <20010117182602.23812.qmail@sourceware.cygnus.com>
X-SW-Source: 2001-q1/msg00420.html
Content-length: 532

The following reply was made to PR java/1677; it has been noted by GNATS.

From: Jeff Sturm <jeff.sturm@appnet.com>
To: p.thio@valescom.com, gcc-gnats@gcc.gnu.org
Cc:  
Subject: Re: java/1677
Date: Wed, 17 Jan 2001 13:17:46 -0500

 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=1677&database=gcc
 
 This may be a duplicate of PR/1516, which was fixed by this patch:
 
 http://sources.redhat.com/ml/java-patches/2000-q4/msg00284.html
 
 Can you try your code with a newer snapshot?
 
 --
 Jeff Sturm
 jeff.sturm@commerceone.com
>From apbianco@cygnus.com Sun Apr 01 00:00:00 2001
From: Alexandre Petit-Bianco <apbianco@cygnus.com>
To: nobody@gcc.gnu.org
Cc: gcc-prs@gcc.gnu.org
Subject: Re: java/2360: Internal compiler error make_class_data (constant stress test?)
Date: Sun, 01 Apr 2001 00:00:00 -0000
Message-id: <20010326230600.2510.qmail@sourceware.cygnus.com>
X-SW-Source: 2001-q1/msg02591.html
Content-length: 883

The following reply was made to PR java/2360; it has been noted by GNATS.

From: Alexandre Petit-Bianco <apbianco@cygnus.com>
To: scgmille@indiana.edu
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: java/2360: Internal compiler error make_class_data (constant stress test?)
Date: Mon, 26 Mar 2001 15:01:58 -0800 (PST)

 scgmille@indiana.edu writes:
 
 > The class in question has a lot of constants and a rather 
 > case statement.
 
 I can't reproduce the problem, gcj is missing some file before it can
 crash.
 
   apbianco@venonat[~/tmp]: gcj -c Primitives.class 
   sisc/Primitives.java:0: Cannot find file for class sisc.Module.
   sisc/Primitives.java:0: confused by earlier errors, bailing out
 
 I tried the SISC Scheme interpreter package (since I'm guessing this
 is what your trying to build) and I was able to build it by simply
 running gcj -c sisc.jar --main=sisc.REPL
 
 ./A


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2003-03-24 20:16 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-03-24 20:16 c++/383 nathan
  -- strict thread matches above, loose matches on Subject: below --
2003-03-24 19:56 c++/383 nathan
2001-04-01  0:00 c++/383 neil

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).