From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Robert Boyer Newsgroups: gmane.emacs.devel Subject: Re: Some thoughts about Emacs performance Date: Fri, 16 Feb 2024 10:15:04 -0600 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="0000000000003785480611820e17" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="2426"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Emacs developers To: Simon Leinen Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Fri Feb 16 17:37:26 2024 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rb1DJ-0000QI-Ru for ged-emacs-devel@m.gmane-mx.org; Fri, 16 Feb 2024 17:37:26 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rb1Cg-0008KJ-Ns; Fri, 16 Feb 2024 11:36:46 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rb0sN-0001QH-Mn for emacs-devel@gnu.org; Fri, 16 Feb 2024 11:15:48 -0500 Original-Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rb0sK-0007cB-Fh for emacs-devel@gnu.org; Fri, 16 Feb 2024 11:15:47 -0500 Original-Received: by mail-ej1-x629.google.com with SMTP id a640c23a62f3a-a3d82926ed2so118480566b.0 for ; Fri, 16 Feb 2024 08:15:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1708100143; x=1708704943; darn=gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=It+k6VNA85xcC8QwcxAwA7pkO3SBEq7j8heBigDh7D0=; b=T0pmOJ40RClMEoGkWgwEcIPE5dR2sDDLFGDZ1INzY/Q+aGvzC4Z38NUTEFemSthfca Epc9qMjAJpZpJGVNidVq4G7rjnQYbJ7Nt0j1vGq3D1GKxmYmWFj9Gh3bn8H+413mqzAn dEMCo39nQdEj2gpsPq9KNltsC/UkWpmo9wvgoSS2zYqwpUBZv74QrJLW9zmyK41lVgmI FGWNkPv8eCjsdeV0ea9pCBOvbB9fA6B3jr0z7QEv5yGAxSaMbOhO5qSdAz9vHVo6daE4 X+bMH0mExNX6XKbs7dEGnlx82jsSGfGCob0wQoWnJs7kxSTLGBsN1z2uGdJjCMUAiVxk TDLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708100143; x=1708704943; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=It+k6VNA85xcC8QwcxAwA7pkO3SBEq7j8heBigDh7D0=; b=n656VFbtatyA2OA2w2APOqIVN1ESqDRzTCytNA10g6+U0hE0wsnqYseQ/xLXv4c8oQ FTYjc/9pOklSwEFraBdik3IYBsQsT7WslvWCu4l/rbSDKRUdOqsS1dJbd9etNsDuPJQg AioxIK6FRGQdtzVOg1dk5HGpGbMoNC/aiwFBA76S8sHrPg49GG4msD4F0qtNCft+fVJU W/PTESEjtK/gvYqMs8WnbtT/s7SNKwnTIDjO2JEoiSNvx4xhH2awt3yoPzmvwx55ocVJ Q76lbSPlJjgcndHBg19wXFmSc0Mea5NGa+YHNZZXP6Gio0t+o+FSaHbDWUEzgoPOMzG7 ak4Q== X-Gm-Message-State: AOJu0YwiebeZr5IVGkvmp/CJpSjprEggSbyJq2F6mfKve/IVUG3TdRNb 4SH9urs9nOEi+u/daXONLLTd06iEddix+BEq0q3ycF8RzbGhxI51RBf1pSxCcLbygwalt7TUwR9 utzU8XxrAP653fOjrZJXhvuT3xIIe3Hyj X-Google-Smtp-Source: AGHT+IF5d0LTmdR/JBtDdOUlCHfo0mdXFcNh3r94i6gH/11XJW1g3jon/Bg6vH7x2K8h6w1fuS3uErED8x+pG1+7xbU= X-Received: by 2002:a17:906:1397:b0:a3d:63a8:a2f5 with SMTP id f23-20020a170906139700b00a3d63a8a2f5mr3997588ejc.66.1708100142197; Fri, 16 Feb 2024 08:15:42 -0800 (PST) In-Reply-To: Received-SPF: pass client-ip=2a00:1450:4864:20::629; envelope-from=robertstephenboyer@gmail.com; helo=mail-ej1-x629.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 16 Feb 2024 11:36:45 -0500 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:316250 Archived-At: --0000000000003785480611820e17 Content-Type: multipart/alternative; boundary="0000000000003785460611820e15" --0000000000003785460611820e15 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Dear Simon, That's the kindest message I have ever received. Thank you so very much. Made my day and my life. I am hoping, using 'native-compile', about which I have heard great things, to contribute one function that is the same as 'stable-sort' in Common Lisp. It runs, in SBCL, about twice as fast as SBCL's stable-sort. See the attached file n3ms.lisp. The really stunning news to me is that my friend Grant Passmore, running on an M3 machine only yesterday, and taking advantage of threads in SBCL, saw a 5x performance improvement over SBCL's stable-sort. I have not the slightest clue about whether threads are in Emacs or in its future. The name of my function is 'msa'. I have attached the file msa.el in its current state of development. It is far from finished and no one in their right mind will try to use it! But great Emacs minds might read it and tell me things I need to know. The threads code I added to 'msa' for SBCL is I think an amazing comment upon what a fantastic job the SBCL folks have done for threads. My addition to 'msa' to take advantage of threads is only about a dozen lines long, and in my extremely unhumble opinion, it is a dozen lines of the greatest beauty that I have ever seen. May the Lord bless John von Neumann, wherever he is, for 'merge-sort'. But I do fear for the worst. I am 77 and have always worried too much, I also attach a file that I just sent to rms, because I cannot yet use m-x report-emacs-bug, due to some mailer problem. I run on a $100 Lenovo Chromebook, and somehow, by magic Emacs 28 just suddenly appeared a few days ago and it is great, except for 1. some mailer problem with report-emacs-bug and 2. crucial to my work on msa, the following bug report, in the attached file compile-bug.el, on native-compile. I say I fear for the worst because if that bug is what I think it is, it would kill 'msa' performance. Very secondarily, even if the bug is fixed, I have no idea how I could ever take advantage of it! Emacs 28 appeared by magic on my Chromebook only a few days ago. I have always depended upon the kindness of friends and strangers, who have magically installed Emacs for me. All I did to install Emacs on my Chromebook was to run this command: sudo apt-get install emacs Great minds, I guess you guys with Emacs, at Google, and at Debian should know that is all I know and all I need to know, so far, about installing Emacs. Thanks so very, very much for your extremely kind letter, Bob P. S. You mention 'random'. My bet is that unless you fix the bug that I mention above, no one could ever do a random via native-compiler that would be competitive. Using *declared *fixnum and vectors is crucial to any speed-competitive work on 'random' that I can imagine. P. P. S. My home phone is 512 467 0182. Phone me any time. You or anyone else doing Emacs development. If you like, since I can call anywhere in the USA for free, I will hang up and call you right back if you prefer. P. P. P. S. You kindly mentioned the ancient 'boyer' benchmark. One must know about it that it has a bug, as far as truth rather than performance testing, is concerned. Whoever translated that file from Maclisp to Common Lisp failed to note that 'member' now needs a :test 'equal bit in the call. Common Lisp defaults the test to 'eql, and that is not what one needs. Anyway, that code is only for performance testing. Nqthm and ACL2 are real theorem-proving programs written in Common Lisp and they are both easy to obtain for 'free', or for 'gratis', as rms is now saying. To some I guess, 'free' may sometimes have a bad connotation; not for me, though. May the Free Software Foundation forever flourish. What Harvard has done for us all: Gates, Zuckerberg, Stallman. On Fri, Feb 16, 2024 at 8:08=E2=80=AFAM Simon Leinen wrote: > Bob, > > welcome to the emacs-devel list, and thanks a lot for *your* wonderful > contributions (theorem prover, string search, and Lisp benchmarking - > I remember boyer.lisp from RPG's reference work[1]). > > On Thu, Feb 8, 2024 at 8:15=E2=80=AFAM Robert Boyer > wrote: > > > > Emacs 27.1 has a 'sort' function that takes longer than stable-sort of > SBCL. Maybe > > by a factor of 2. See also my attached file 'ms.lisp'. > > > > There may be a lot that can be improved in Emacs' > > handling of cl-loop, setf, elt, or cl-random. > > In this case, cl-random seems to be the main culprit for the slow > initialization=E2=80=94replacing that with plain "random" speeds it up by > about a factor of ten. There was some discussion on the list recently > about cl-random vs. random. The main functional difference is that > cl-random supports a defined state. But the performance difference may > be due more to the fact that random is written in C, and cl-random in > Lisp. > > As for the sorting itself, both Emacs and SBCL seem to use mergesort > in their implementations of (stable-)sort. Emacs's implementation is > written in C, SBCL's in Lisp. Performance is quite similar=E2=80=94on my > system (Apple Macbook Air M2) Emacs takes about 35% longer to sort a > million random numbers than SBCL. (On the other hand when sorting it > again, i.e. when the vector is already fully sorter, Emacs is quite a > bit faster than SBCL=E2=80=94maybe Emacs chose to optimize for partly-sor= ted > vectors at the expense of a bit of performance for random input.) > > In general, the Emacs Lisp runtime system and compiler(s) aren't as > optimized as SBCL for general Lisp use. But it gets quite close! > > On the other hand, Emacs has editor-specific code (e.g. redisplay) and > data structures (e.g. buffers) which are highly optimized and partly > written in C. But it doesn't try to be a standalone platform for > performance-oriented Lisp developers. Of course Emacs is very > suitable as a Software Development Environment for systems such as > SBCL, and there are many good integration options=E2=80=94personally I us= e the > SLIME package these days. > > Best regards, and enjoy Lisping in Emacs! > -- > Simon. > > > ;; First some Emacs, with times on my $100 Chromebook. > > > > (setq n 6) > > (defun make-random-array (n) > > (let ((a (make-vector n 0))) > > (cl-loop for i below n do > > (setf (elt a i) (cl-random 1000000))) > > a)) > > (byte-compile 'make-random-array) > > (benchmark '(setq foo (make-random-array (expt 10 n))) 1) -- 2.3 second= s > > (benchmark '(sort foo '<) 1) -- 1 second > > > > ;; Second some Common Lisp, with times for SBCL on my $100 Chromebook. > > > > (defparameter n 6) > > (defun make-random-array (n) > > (declare (fixnum n)) > > (let ((a (make-array n))) > > (declare (type array a)) > > (loop for i fixnum below n do > > (setf (aref a i) (random most-positive-fixnum))) > > a)) > > (time (defparameter foo (make-random-array (expt 10 n)))) -- .041 > seconds > > (time (progn (stable-sort foo '<) nil)) -- .45 seconds > > > > Thanks so much for Emacs, which is so great that I cannot put it > > into words. > > > > Bob > > > [1] https://dreamsongs.com/Files/Timrep.pdf > --0000000000003785460611820e15 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Dear Simon,

That= 's the kindest message I have ever received.=C2=A0 Thank you so very mu= ch.=C2=A0 Made my day and my life.

I am hoping, using &#= 39;native-compile', about which I have heard great things, to contribut= e one function that is the same as 'stable-sort' in Common Lisp.=C2= =A0 It runs, in SBCL, about twice as fast as SBCL's stable-sort.=C2=A0 = See the attached file n3ms.lisp. The really stunning news to me is that my = friend Grant Passmore, running on an M3 machine only yesterday, and taking = advantage of threads in SBCL, saw a 5x performance improvement over SBCL= 9;s stable-sort.=C2=A0 I have not the slightest clue about whether threads = are in Emacs or in its future.

The name of my func= tion is 'msa'. I have attached the file msa.el in its current state= of development. It is far from finished and no one in their right mind wil= l try to use it!=C2=A0 But great Emacs minds might read it and tell me thin= gs I need to know.

The threads code I added to= 'msa' for SBCL is I think an amazing comment upon what a fantastic= job the SBCL folks have done for threads.=C2=A0 My addition to 'msa= 9; to take advantage of threads is only about a dozen lines long, and in my= extremely=C2=A0unhumble opinion, it is a dozen lines of the greatest beaut= y that I have ever seen. May the Lord bless John von Neumann, wherever he i= s, for 'merge-sort'.

But I do fear for the= worst.=C2=A0 I am 77 and have always worried too much,=C2=A0 I also attach= a file that I just sent to rms, because I cannot yet use m-x report-emacs-= bug, due to some mailer problem.=C2=A0 I run on a $100 Lenovo Chromebook, a= nd somehow, by magic Emacs 28 just suddenly appeared a few days ago and it = is great, except for 1. some mailer problem with report-emacs-bug and 2. cr= ucial to my work on msa, the following bug report, in the attached file com= pile-bug.el, on native-compile.

I say I fear for t= he worst because if that bug is what I think it is, it would kill 'msa&= #39; performance.
Very secondarily, even if the bug is fixed, I h= ave no idea how I could ever take advantage of it!
Emacs 28 appea= red by magic on my Chromebook only a few days ago.=C2=A0 I have always depe= nded upon the kindness of friends and strangers, who have magically install= ed Emacs for me.=C2=A0 All I did to install Emacs on my Chromebook was to r= un this command:

=C2=A0 =C2=A0sudo apt-get install= emacs

Great minds, I guess you guys with Emac= s, at Google, and at Debian should know that is all I know and all I need t= o know, so far, about installing Emacs.

Thanks so = very, very much for your extremely kind letter,

Bo= b

P. S.=C2=A0 You mention 'random'.=C2=A0 = My bet is that unless you fix the bug that I mention above, no one could ev= er do a random via native-compiler that would be competitive.=C2=A0 Using <= u>declared fixnum and vectors is crucial to any speed-competitive work = on 'random' that I can imagine.

P. P. S. M= y home phone is 512 467 0182. Phone me any time.=C2=A0 You or anyone else d= oing Emacs development. If you like, since I can call anywhere in the USA f= or free, I will hang up and call you right back if you prefer.
<= div>
P. P. P. S.=C2=A0 You kindly mentioned the ancient 'boyer= ' benchmark.=C2=A0 One must know about it that it has a bug, as far as = truth rather than performance testing, is concerned.=C2=A0 Whoever translat= ed that file from Maclisp to Common Lisp failed to note that 'member= 9; now needs a :test 'equal bit in the call.
Common Lisp defaults t= he test to 'eql, and that is not what one needs.=C2=A0 Anyway, that cod= e is only for performance testing.=C2=A0 Nqthm and ACL2 are real theorem-pr= oving programs written in Common Lisp and they are both easy to obtain for = 'free', or for 'gratis', as rms is now saying.=C2=A0 To som= e I guess,=C2=A0
'free' may sometimes have a bad connotat= ion; not for me, though.=C2=A0 May the Free Software Foundation forever flo= urish.=C2=A0 What Harvard has done for us all: Gates, Zuckerberg, Stallman.=

On Fri, Feb 16, 2024 at 8:08=E2=80=AFAM Simon Leinen <simon.leinen@gmail.com&g= t; wrote:
Bob,
welcome to the emacs-devel list, and thanks a lot for *your* wonderful
contributions (theorem prover, string search, and Lisp benchmarking -
I remember boyer.lisp from RPG's reference work[1]).

On Thu, Feb 8, 2024 at 8:15=E2=80=AFAM Robert Boyer
<rober= tstephenboyer@gmail.com> wrote:
>
> Emacs 27.1 has a 'sort' function that takes longer than stable= -sort of SBCL. Maybe
> by a factor of 2. See also my attached file 'ms.lisp'.
>
> There may be a lot that can be improved in Emacs'
> handling of cl-loop, setf, elt, or cl-random.

In this case, cl-random seems to be the main culprit for the slow
initialization=E2=80=94replacing that with plain "random" speeds = it up by
about a factor of ten.=C2=A0 There was some discussion on the list recently=
about cl-random vs. random. The main functional difference is that
cl-random supports a defined state. But the performance difference may
be due more to the fact that random is written in C, and cl-random in
Lisp.

As for the sorting itself, both Emacs and SBCL seem to use mergesort
in their implementations of (stable-)sort.=C2=A0 Emacs's implementation= is
written in C, SBCL's in Lisp. Performance is quite similar=E2=80=94on m= y
system (Apple Macbook Air M2) Emacs takes about 35% longer to sort a
million random numbers than SBCL.=C2=A0 (On the other hand when sorting it<= br> again, i.e. when the vector is already fully sorter, Emacs is quite a
bit faster than SBCL=E2=80=94maybe Emacs chose to optimize for partly-sorte= d
vectors at the expense of a bit of performance for random input.)

In general, the Emacs Lisp runtime system and compiler(s) aren't as
optimized as SBCL for general Lisp use.=C2=A0 But it gets quite close!

On the other hand, Emacs has editor-specific code (e.g. redisplay) and
data structures (e.g. buffers) which are highly optimized and partly
written in C.=C2=A0 But it doesn't try to be a standalone platform for<= br> performance-oriented Lisp developers.=C2=A0 Of course Emacs is very
suitable as a Software Development Environment for systems such as
SBCL, and there are many good integration options=E2=80=94personally I use = the
SLIME package these days.

Best regards, and enjoy Lisping in Emacs!
--
Simon.

> ;; First some Emacs, with times on my $100 Chromebook.
>
> (setq n 6)
> (defun make-random-array (n)
>=C2=A0 =C2=A0(let ((a (make-vector n 0)))
>=C2=A0 =C2=A0 =C2=A0(cl-loop for i below n do
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setf (elt a i) (cl-ra= ndom 1000000)))
>=C2=A0 =C2=A0 =C2=A0a))
> (byte-compile 'make-random-array)
> (benchmark '(setq foo (make-random-array (expt 10 n))) 1) -- 2.3 s= econds
> (benchmark '(sort foo '<) 1) -- 1 second
>
> ;; Second some Common Lisp, with times for SBCL on my $100 Chromebook.=
>
> (defparameter n 6)
> (defun make-random-array (n)
>=C2=A0 =C2=A0(declare (fixnum n))
>=C2=A0 =C2=A0(let ((a (make-array n)))
>=C2=A0 =C2=A0 =C2=A0(declare (type array a))
>=C2=A0 =C2=A0 =C2=A0(loop for i fixnum below n do
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(setf (aref a i) (random most-= positive-fixnum)))
>=C2=A0 =C2=A0 =C2=A0a))
> (time (defparameter foo (make-random-array (expt 10 n))))=C2=A0 -- .04= 1 seconds
> (time (progn (stable-sort foo '<) nil)) -- .45 seconds
>
> Thanks so much for Emacs, which is so great that I cannot put it
> into words.
>
> Bob


[1] https://dreamsongs.com/Files/Timrep.pdf
--0000000000003785460611820e15-- --0000000000003785480611820e17 Content-Type: application/octet-stream; name="msa.el" Content-Disposition: attachment; filename="msa.el" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lsos61w30 Ozsgd2l0aC10ZW1wLWZpbGUKCihkZWZ2YXIgbXNhLXNjcmF0Y2ggKG1ha2UtdmVjdG9yIDEgMCkp CgooZGVmdmFyIG1zYS1pbnB1dCAobWFrZS12ZWN0b3IgMSAwKSkKCihkZWZ2YXIgbXNhLXR5cGUg dCkKCihkZWZ2YXIgbXNhLXByZWRpY2F0ZSAnPCkKCihkZWZ2YXIgbXNhLXRtcC1maWxlICJtc2Et dG1wLWZpbGUuZWwiKQoKKGRlZnZhciBtc2EtdG1wLWJ1ZmZlciAibXNhLXRtcC1idWZmZXIiKQoK KGRlZnZhciBtc2EtMS1ib2R5CiAgIihkZWZ1biBtc2EtMSAoc3RhcnQgZW5kIGlucHV0IHNjcmF0 Y2gpCiAgICAgKGRlY2xhcmUgKGZpeG51bSBzdGFydCBlbmQpICh2ZWN0b3IgaW5wdXQgc2NyYXRj aCkpCiAgICAgKGxldCogKChzdGFydCsxICgxKyBzdGFydCkpCiAgICAgICAgICAgIChlbmQtc3Rh cnQgKC0gZW5kIHN0YXJ0KSkKICAgICAgICAgICAgKG1pZCAoKyBzdGFydCAoZmxvb3IgZW5kLXN0 YXJ0IDIpKSkpCiAgICAgICAoZGVjbGFyZSAoZml4bnVtIHN0YXJ0KzEgZW5kLXN0YXJ0IG1pZCkp CiAgICAgICAoY29uZAogICAgICAgICgob3IgKGVxbCBzdGFydCBlbmQpIChlcWwgc3RhcnQrMSBl bmQpKQogICAgICAgICAoY2wtcmV0dXJuLWZyb20gbXNhLTEgbmlsKSkKICAgICAgICAoKGVxbCBl bmQtc3RhcnQgMikKICAgICAgICAgKGxldCAoKGFzLXN0YXJ0IChhcmVmIGlucHV0IHN0YXJ0KSkK ICAgICAgICAgICAgICAgKGFzLXN0YXJ0KzEgKGFyZWYgaW5wdXQgc3RhcnQrMSkpKQogICAgICAg ICAgIChjb25kICgobXNhLXByZWRpY2F0ZSAoa2V5IGFzLXN0YXJ0KzEpIChrZXkgYXMtc3RhcnQp KQogICAgICAgICAgICAgICAgICAoc2V0ZiAoYXJlZiBpbnB1dCBzdGFydCkgYXMtc3RhcnQrMSkK ICAgICAgICAgICAgICAgICAgKHNldGYgKGFyZWYgaW5wdXQgc3RhcnQrMSkgYXMtc3RhcnQpKSkK ICAgICAgICAgICAoY2wtcmV0dXJuLWZyb20gbXNhLTEgbmlsKSkpCiAgICAgICAgKHQKICAgICAg ICAgKGxldCAoKGsxIChrZXkgKGFyZWYgaW5wdXQgc3RhcnQpKSkKICAgICAgICAgICAgICAgKGsy IChrZXkgKGFyZWYgaW5wdXQgKDErIHN0YXJ0KSkpKQogICAgICAgICAgICAgICAoaSBzdGFydCkK ICAgICAgICAgICAgICAgKG1pZC0yICgtIG1pZCAyKSkpCiAgICAgICAgICAgKGRlY2xhcmUgKGZp eG51bSBpIG1pZC0yKSkKICAgICAgICAgICAoY2wtbG9vcAogICAgICAgICAgICAoY29uZCAoKGVx bCBpIG1pZC0yKQogICAgICAgICAgICAgICAgICAgKG1zYS0xIG1pZCBlbmQgaW5wdXQgc2NyYXRj aCkKICAgICAgICAgICAgICAgICAgIChjbC1yZXR1cm4gbmlsKSkKICAgICAgICAgICAgICAgICAg KChvciAobXNhLWVxdWFsIGsxIGsyKSAobXNhLXByZWRpY2F0ZSBrMSBrMikpCiAgICAgICAgICAg ICAgICAgICAoc2V0cSBrMSBrMikKICAgICAgICAgICAgICAgICAgIChzZXRxIGsyIChrZXkgKGFy ZWYgaW5wdXQgKCsgaSAyKSkpKQogICAgICAgICAgICAgICAgICAgKGNsLWluY2YgaSkpCiAgICAg ICAgICAgICAgICAgICh0IChtc2EtMSBzdGFydCBtaWQgaW5wdXQgc2NyYXRjaCkKICAgICAgICAg ICAgICAgICAgICAgKG1zYS0xIG1pZCBlbmQgaW5wdXQgc2NyYXRjaCkKICAgICAgICAgICAgICAg ICAgICAgKGNsLXJldHVybiBuaWwpKSkpCiAgICAgICAgICAgKGxldCAoKGkwIHN0YXJ0KSAoaTEg bWlkKSAoZW5kMCBtaWQpIChlbmQxIGVuZCkpCiAgICAgICAgICAgICAoZGVjbGFyZSAoZml4bnVt IGkwIGkxIGVuZDAgZW5kMSkpCiAgICAgICAgICAgICAobGV0ICgoc2kgMCkpCiAgICAgICAgICAg ICAgIChkZWNsYXJlIChmaXhudW0gc2kpKQogICAgICAgICAgICAgICAoY2wtbG9vcCAoY29uZCAo KD0gaSBlbmQtc3RhcnQpIChjbC1yZXR1cm4gbmlsKSkpCiAgICAgICAgICAgICAgICAgICAgICAg IChjb25kICgoZXFsIGkwIGVuZDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0 ZiAoYXJlZiBzY3JhdGNoIHNpKSAoYXJlZiBpbnB1dCBpMSkpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY2wtaW5jZiBpMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgo ZXFsIGkxIGVuZDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0ZiAoYXJlZiBz Y3JhdGNoIHNpKSAoYXJlZiBpbnB1dCBpMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY2wtaW5jZiBpMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0IChsZXQqICgo eDAgKGFyZWYgaW5wdXQgaTApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHgxIChhcmVmIGlucHV0IGkxKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChrMCAoa2V5IHgwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChrMSAoa2V5IHgxKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv bmQgKChvciAobXNhLWVxdWFsIGswIGsxKSAobXNhLXByZWRpY2F0ZSBrMCBrMSkpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRmIChhcmVmIHNjcmF0Y2ggc2kp IHgwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2wtaW5jZiBp MCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHQgKHNldGYgKGFy ZWYgc2NyYXRjaCBzaSkgeDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNsLWluY2YgaTEpKSkpKSkpKQogICAgICAgICAgICAgKGxldCAoKGkgMCkgKGogc3Rh cnQpKQogICAgICAgICAgICAgICAoZGVjbGFyZSAoZml4bnVtIGkgaikpCiAgICAgICAgICAgICAg IChjbC1sb29wIChjb25kICgoZXFsIGkgZW5kLXN0YXJ0KSAoY2wtcmV0dXJuIG5pbCkpKQogICAg ICAgICAgICAgICAgICAgICAgICAoc2V0ZiAoYXJlZiBpbnB1dCBqKSAoYXJlZiBzY3JhdGNoIGkp KQogICAgICAgICAgICAgICAgICAgICAgICAoY2wtaW5jZiBpKSkpCiAgICAgICAgICAgICBpbnB1 dCkpKSkpKSIpCgooc2V0cSBtc2EtMS1ib2R5CiAgIihkZWZ1biBtc2EtMSAoc3RhcnQgZW5kIGlu cHV0IHNjcmF0Y2gpCiAgICAgKGRlY2xhcmUgKGZpeG51bSBzdGFydCBlbmQpICh2ZWN0b3IgaW5w dXQgc2NyYXRjaCkpCiAgICAgKGxldCogKChzdGFydCsxICgxKyBzdGFydCkpCiAgICAgICAgICAg IChlbmQtc3RhcnQgKC0gZW5kIHN0YXJ0KSkKICAgICAgICAgICAgKG1pZCAoKyBzdGFydCAoZmxv b3IgZW5kLXN0YXJ0IDIpKSkpCiAgICAgICAoZGVjbGFyZSAoZml4bnVtIHN0YXJ0KzEgZW5kLXN0 YXJ0IG1pZCkpCiAgICAgICAoY29uZAogICAgICAgICgob3IgKGVxbCBzdGFydCBlbmQpIChlcWwg c3RhcnQrMSBlbmQpKQogICAgICAgICAoY2wtcmV0dXJuLWZyb20gbXNhLTEgbmlsKSkKICAgICAg ICAoKGVxbCBlbmQtc3RhcnQgMikKICAgICAgICAgKGxldCAoKGFzLXN0YXJ0IChhcmVmIGlucHV0 IHN0YXJ0KSkKICAgICAgICAgICAgICAgKGFzLXN0YXJ0KzEgKGFyZWYgaW5wdXQgc3RhcnQrMSkp KQogICAgICAgICAgIChjb25kICgobXNhLXByZWRpY2F0ZSAoa2V5IGFzLXN0YXJ0KzEpIChrZXkg YXMtc3RhcnQpKQogICAgICAgICAgICAgICAgICAoc2V0ZiAoYXJlZiBpbnB1dCBzdGFydCkgYXMt c3RhcnQrMSkKICAgICAgICAgICAgICAgICAgKHNldGYgKGFyZWYgaW5wdXQgc3RhcnQrMSkgYXMt c3RhcnQpKSkKICAgICAgICAgICAoY2wtcmV0dXJuLWZyb20gbXNhLTEgbmlsKSkpCiAgICAgICAg KHQKICAgICAgICAgKGxldCAoKGsxIChrZXkgKGFyZWYgaW5wdXQgc3RhcnQpKSkKICAgICAgICAg ICAgICAgKGsyIChrZXkgKGFyZWYgaW5wdXQgKDErIHN0YXJ0KSkpKQogICAgICAgICAgICAgICAo aSBzdGFydCkKICAgICAgICAgICAgICAgKG1pZC0yICgtIG1pZCAyKSkpCiAgICAgICAgICAgKGRl Y2xhcmUgKGZpeG51bSBpIG1pZC0yKSkKICAgICAgICAgICAoY2wtbG9vcAogICAgICAgICAgICAo Y29uZCAoKGVxbCBpIG1pZC0yKQogICAgICAgICAgICAgICAgICAgKG1zYS0xIG1pZCBlbmQgaW5w dXQgc2NyYXRjaCkKICAgICAgICAgICAgICAgICAgIChjbC1yZXR1cm4gbmlsKSkKICAgICAgICAg ICAgICAgICAgKChvciAobXNhLWVxdWFsIGsxIGsyKSAobXNhLXByZWRpY2F0ZSBrMSBrMikpCiAg ICAgICAgICAgICAgICAgICAoc2V0cSBrMSBrMikKICAgICAgICAgICAgICAgICAgIChzZXRxIGsy IChrZXkgKGFyZWYgaW5wdXQgKCsgaSAyKSkpKQogICAgICAgICAgICAgICAgICAgKGNsLWluY2Yg aSkpCiAgICAgICAgICAgICAgICAgICh0IChtc2EtMSBzdGFydCBtaWQgaW5wdXQgc2NyYXRjaCkK ICAgICAgICAgICAgICAgICAgICAgKG1zYS0xIG1pZCBlbmQgaW5wdXQgc2NyYXRjaCkKICAgICAg ICAgICAgICAgICAgICAgKGNsLXJldHVybiBuaWwpKSkpCiAgICAgICAgICAgKGxldCAoKGkwIHN0 YXJ0KSAoaTEgbWlkKSAoZW5kMCBtaWQpIChlbmQxIGVuZCkpCiAgICAgICAgICAgICAoZGVjbGFy ZSAoZml4bnVtIGkwIGkxIGVuZDAgZW5kMSkpCiAgICAgICAgICAgICAobGV0ICgoc2kgMCkpCiAg ICAgICAgICAgICAgIChkZWNsYXJlIChmaXhudW0gc2kpKQogICAgICAgICAgICAgICAoY2wtbG9v cCAoY29uZCAoKD0gaSBlbmQtc3RhcnQpIChjbC1yZXR1cm4gbmlsKSkpCiAgICAgICAgICAgICAg ICAgICAgICAgIChjb25kICgoZXFsIGkwIGVuZDApCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoc2V0ZiAoYXJlZiBzY3JhdGNoIHNpKSAoYXJlZiBpbnB1dCBpMSkpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY2wtaW5jZiBpMSkpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgoZXFsIGkxIGVuZDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0 ZiAoYXJlZiBzY3JhdGNoIHNpKSAoYXJlZiBpbnB1dCBpMCkpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY2wtaW5jZiBpMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0 IChsZXQqICgoeDAgKGFyZWYgaW5wdXQgaTApKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHgxIChhcmVmIGlucHV0IGkxKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChrMCAoa2V5IHgwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChrMSAoa2V5IHgxKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNvbmQgKChvciAobXNhLWVxdWFsIGswIGsxKSAobXNhLXByZWRpY2F0ZSBrMCBrMSkp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRmIChhcmVmIHNj cmF0Y2ggc2kpIHgwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Y2wtaW5jZiBpMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHQg KHNldGYgKGFyZWYgc2NyYXRjaCBzaSkgeDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNsLWluY2YgaTEpKSkpKSkpKQogICAgICAgICAgICAgKGxldCAoKGkg MCkgKGogc3RhcnQpKQogICAgICAgICAgICAgICAoZGVjbGFyZSAoZml4bnVtIGkgaikpCiAgICAg ICAgICAgICAgIChjbC1sb29wIChjb25kICgoZXFsIGkgZW5kLXN0YXJ0KSAoY2wtcmV0dXJuIG5p bCkpKQogICAgICAgICAgICAgICAgICAgICAgICAoc2V0ZiAoYXJlZiBpbnB1dCBqKSAoYXJlZiBz Y3JhdGNoIGkpKQogICAgICAgICAgICAgICAgICAgICAgICAoY2wtaW5jZiBpKSkpCiAgICAgICAg ICAgICBpbnB1dCkpKSkpKSIpCgooZGVmdW4gbXNhIChhciBtc2EtcHJlZGljYXRlIGtleSkKICAo Y29uZCAoKG5vdCAob3IgKG51bGwgYXIpICh2ZWN0b3JwIGFyKSAoYW5kIChjb25zcCBhcikgKG51 bGwgKGNkciAobGFzdCBhcikpKSkpKQogICAgICAgICAoZXJyb3IgIm1zYTogZmlyc3QgYXJndW1l bnQgaXMgbm90IGEgcHJvcGVyIHNlcXVlbmNlLiIpKSkKICAoY29uZCAoKG5vdCAoZnVuY3Rpb25w IG1zYS1wcmVkaWNhdGUpKQogICAgICAgICAoZXJyb3IgIm1zYTogbXNhLXByZWRpY2F0ZSBpcyBu b3QgYSBmdW5jdGlvbi4iKSkpCiAgKGNvbmQgKChudWxsIGtleSkpCiAgICAgICAgKChvciAobm90 IChzeW1ib2xwIGtleSkpIChub3QgKGZ1bmN0aW9ucCBrZXkpKSkKICAgICAgICAgKGVycm9yICJt c2E6IGtleSBtdXN0IGJlIGEgc3ltYm9sLiIpKSkKICAoY29uZCAoKGVxIGtleSAnaWRlbnRpdHkp IChzZXRxIGtleSBuaWwpKSkKICAobGV0ICgobGVuIChsZW5ndGggYXIpKSkKICAgIChkZWNsYXJl IChmaXhudW0gbGVuKSkKICAgIChjb25kICgoPSBsZW4gMCkgbmlsKQogICAgICAgICAgKHQgKGNv bmQgKCg8PSBsZW4gKGxlbmd0aCBtc2Etc2NyYXRjaCkpKQogICAgICAgICAgICAgICAgICAgKHQg KHNldHEgbXNhLXNjcmF0Y2ggKG1ha2UtdmVjdG9yIGxlbiAwKSkpKQogICAgICAgICAgICAgKHNl dHEgbXNhLWlucHV0CiAgICAgICAgICAgICAgICAgICAoY29uZCAoKGNvbnNwIGFyKQogICAgICAg ICAgICAgICAgICAgICAgICAgIChsZXQgKChhbnMgKG1ha2UtdmVjdG9yIGxlbiAwKSkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgoaSAwKSAobCBhcikpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChkZWNsYXJlIChmaXhudW0gaSkpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICh3aGlsZSAoPCBpIGxlbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoc2V0ZiAoYXJlZiBhbnMgaSkgKGNhciBsKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoc2V0cSBsIChjZHIgbCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNs LWluY2YgaSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zKSkKICAgICAgICAgICAg ICAgICAgICAgICAgICh0IGFyKSkpCiAgICAgICAgICAgICAobGV0ICgobXNhLWFsbC1maXhudW0g dCkgKG1zYS1hbGwtZmxvYXQgdCkKICAgICAgICAgICAgICAgICAgIChtc2EtYWxsLWtleXMtcmVh bCB0KSAob3JpZy1hciBhcikpCiAgICAgICAgICAgICAgIChsZXQgKChpIDApKQogICAgICAgICAg ICAgICAgIChkZWNsYXJlIChmaXhudW0gaSkpCiAgICAgICAgICAgICAgICAgKHdoaWxlICg8IGkg bGVuKQogICAgICAgICAgICAgICAgICAgKGxldCAoKHggKGNvbmQgKChudWxsIGtleSkgKGFyZWYg bXNhLWlucHV0IGkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHQgKGZ1bmNh bGwga2V5IChhcmVmIG1zYS1pbnB1dCBpKSkpKSkpCiAgICAgICAgICAgICAgICAgICAgIChjb25k ICgoYW5kIG1zYS1hbGwta2V5cy1yZWFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChub3QgKG1lbWJlciAodHlwZS1vZiB4KSAnKGZsb2F0IGludGVnZXIpKSkpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoc2V0cSBtc2EtYWxsLWtleXMtcmVhbCBuaWwpKSkKICAgICAgICAg ICAgICAgICAgICAgKGNvbmQgKChhbmQgbXNhLWFsbC1maXhudW0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKG5vdCAoZml4bnVtcCB4KSkpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoc2V0cSBtc2EtYWxsLWZpeG51bSBuaWwpKSkKICAgICAgICAgICAgICAgICAgICAgKGNv bmQgKChhbmQgbXNhLWFsbC1mbG9hdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bm90IChmbG9hdHAgeCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNldHEgbXNhLWFs bC1mbG9hdCBuaWwpKSkKICAgICAgICAgICAgICAgICAgICAgKGNsLWluY2YgaSkpKQogICAgICAg ICAgICAgICAgIChsZXQgKChtc2EtdHlwZSAoY29uZCAobXNhLWFsbC1maXhudW0gJ2ZpeG51bSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1zYS1hbGwtZmxvYXQgJ2Zs b2F0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodCB0KSkpKQogICAg ICAgICAgICAgICAgICAgKHN3aXRjaC10by1idWZmZXIgbXNhLXRtcC1idWZmZXIpCiAgICAgICAg ICAgICAgICAgICAoa2lsbC1yZWdpb24gKHBvaW50LW1pbikgKHBvaW50LW1heCkpCiAgICAgICAg ICAgICAgICAgICAod2l0aC1vdXRwdXQtdG8tdGVtcC1idWZmZXIgbXNhLXRtcC1idWZmZXIKICAg ICAgICAgICAgICAgICAgICAgKHByaW50IGAoZGVmdmFyIGtleSAnLGtleSkpCiAgICAgICAgICAg ICAgICAgICAgIChwcmludCBgKGRlZm1hY3JvIGtleSAoeCkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjb25kICgobnVsbCBrZXkpIHgpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAodCBgKCxrZXkgLHgpKSkpKQogICAgICAgICAgICAgICAgICAgICAocHJpbnQg YChkZWZtYWNybyBtc2EtZXF1YWwgKHggeSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjb25kIChtc2EtYWxsLWtleXMtcmVhbCBgKGVxbCAseCAseSkpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAodCBgKGVxdWFsICx4ICx5KSkpKSkKICAgICAgICAgICAgICAg ICAgICAgKHByaW50IGAoZGVmbWFjcm8gbXNhLXByZWRpY2F0ZSAoeCB5KQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYChsZXQgKCh4diAseCkgKHl2ICx5KSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChkZWNsYXJlIChmaXhudW0geHYgeXYpKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKCxtc2EtcHJlZGljYXRlIHh2IHl2KSkpKQogICAgICAgICAg ICAgICAgICAgICAocHJpbmMgbXNhLTEtYm9keSkKICAgICAgICAgICAgICAgICAgICAgKHdyaXRl LWZpbGUgbXNhLXRtcC1maWxlKQogICAgICAgICAgICAgICAgICAgICA7OyAod3JpdGUtZmlsZSAi bXNhLWRlYnVnLmVsIikKICAgICAgICAgICAgICAgICAgICAgKHN3aXRjaC10by1idWZmZXIgbXNh LXRtcC1maWxlKQogICAgICAgICAgICAgICAgICAgICAoZW1hY3MtbGlzcC1uYXRpdmUtY29tcGls ZS1hbmQtbG9hZCkKICAgICAgICAgICAgICAgICAgICAgOzsgKGtpbGwtYnVmZmVyIG1zYS10bXAt ZmlsZSkKICAgICAgICAgICAgICAgICAgICAgKGV2YWwgYChtc2EtMSAwICxsZW4gbXNhLWlucHV0 IG1zYS1zY3JhdGNoKSkKICAgICAgICAgICAgICAgICAgICAgKGxldCAoKGkgMCkpCiAgICAgICAg ICAgICAgICAgICAgICAgKGRlY2xhcmUgKGZpeG51bSBpKSkKICAgICAgICAgICAgICAgICAgICAg ICAod2hpbGUgKDwgaSBsZW4pCiAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0ZiAoYXJlZiBt c2Etc2NyYXRjaCBpKSAwKSkpCiAgICAgICAgICAgICAgICAgICAgIChjb25kICgodmVjdG9ycCBv cmlnLWFyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxldCAoKGkgMCkpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChkZWNsYXJlIChmaXhudW0gaSkpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChzZXRmIChhcmVmIG9yaWctYXIgaSkgKGFyZWYgbXNhLWlucHV0IGkp KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICh0IChsZXQgKChpIDApICh0YWlsIG9yaWct YXIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWNsYXJlIChmaXhudW0gaSkp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdoaWxlIHRhaWwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChzZXRmIChjYXIgdGFpbCkgKGFyZWYgbXNhLWlucHV0IGkp KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsLWluY2YgaSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHRhaWwgKGNkciB0YWlsKSkpKSkpCiAgICAg ICAgICAgICAgICAgICAgIChzZXRxIG1zYS1pbnB1dCAobWFrZS12ZWN0b3IgMSAwKSkKICAgICAg ICAgICAgICAgICAgICAgYXIpKSkpKSkpKQo= --0000000000003785480611820e17 Content-Type: application/octet-stream; name="compile-bug.el" Content-Disposition: attachment; filename="compile-bug.el" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lsosccxi1 OzsgTGV0IHVzIHN1cHBvc2UgdGhhdCB0aGlzIGlzIHRoZSBmaWxlICJjb21waWxlLWJ1Zy5lbCIK Cjs7IEludm9raW5nIChuYXRpdmUtY29tcGlsZSAiY29tcGlsZS1idWcuZWwiKSBzaG91bGQgd29y aywgSSBkbyBiZWxpZXZlLgo7OyBIb3dldmVyIGl0IGZhaWxzIGFuZCB0aGUgZXJyb3IgbWVzc2Fn ZSBpcyBwcmludGVkIGJlbG93LgoKOzsgSXQgY2Fubm90IGJlIGVtcGhhc2l6ZWQgZW5vdWdoIGhv dyBzZXJpb3VzIHRoaXMgcHJvYmxlbSBzZWVtcyB0byBtZSwgQm9iCjs7IEJveWVyLCByb2JlcnRz dGVwaGVuYm95ZXJAZ21haWwuY29tLgoKOzsgVGhlIHJlYXNvbiBpdCBpcyBzbyBTRVJJT1VTIGlz IHRoYXQgQU5ZIExpc3AgY29tcGlsZXIgd291bGQgbmVlZCB0byBiZQo7OyBkZWxpZ2h0ZWQgdG8g c2VlIHN1Y2ggYSB0eXBpbmcgZXhwcmVzc2lvbiBhcwoKOzsgICAoZGVjbGFyZSAoZml4bnVtIHN0 YXJ0IGVuZCkgKHZlY3RvciBpbnB1dCBzY3JhdGNoKSkKCjs7IFdoeT8gQkVDQVVTRSBpdCBtZWFu cyB0aGF0IHRoZSBjb21waWxlciBkb2VzIG5vdCBoYXZlIHRvIGxheSBkb3duIGNvZGUgdG8KOzsg dHlwZSBjaGVjayB0aGUgdHlwZSBvZiBzdGFydCwgZW5kLCBpbnB1dCwgYW5kIHNjcmF0Y2ghISEh Cgo7OyBIb3dldmVyLCAoYnl0ZS1jb21waWxlICJjb21waWxlLWJ1Zy5lbCIpIHJlc3VsdHMgaW4g dGhlIGZvbGxvd2luZyBlcnJvciBtZXNzYWdlOgoKOzsgQ29tcGlsaW5nIGZpbGUgL21udC9jaHJv bWVvcy9Hb29nbGVEcml2ZS9NeURyaXZlL0xpbnV4L3dvcmtpbmcvY29tcGlsZS1idWcuZWwgYXQg RnJpIEZlYiAxNiAwODoyNToxOSAyMDI0Cjs7IGNvbXBpbGUtYnVnLmVsOjI6NDU6IFdhcm5pbmc6 IFVua25vd24gZGVmdW4gcHJvcGVydHkg4oCYZml4bnVt4oCZIGluIGZvbwo7OyBjb21waWxlLWJ1 Zy5lbDoyOjQ1OiBXYXJuaW5nOiBVbmtub3duIGRlZnVuIHByb3BlcnR5IOKAmHZlY3RvcuKAmSBp biBmb28KCihkZWZ1biBmb28gKHN0YXJ0IGVuZCBpbnB1dCBzY3JhdGNoKQogIChkZWNsYXJlIChm aXhudW0gc3RhcnQgZW5kKSAodmVjdG9yIGlucHV0IHNjcmF0Y2gpKQogIChsaXN0IHN0YXJ0IGVu ZCBpbnB1dCBzY3JhdGNoKSkKCjs7IGZvbyB3b3JrcyBmaW5lCgo7OyBIZXJlIGlzIGFuIGV4YW1w bGUgZm9ybSBmb3IgdGhlIGludm9jYXRpb24gb2YgZm9vOgoKOzsgKGZvbyAxIDIgKG1ha2UtdmVj dG9yIDMgNCkgKG1ha2UtdmVjdG9yIDUgNikpCgo7OyBUaGF0IGZvcm0gcnVucyBvayBpZiBpdCBp cyBydW5uaW5nIHdpdGggZm9vIGludGVycHJldGVkLgoKOzsgKGJ5dGUtY29tcGlsZSAnZm9vKSBy dW5zIG9rLgoKOzsgT25lIGNhbiBydW4gdGhlIHNhbWUgZm9ybSBhZnRlciBieXRlLWNvbXBpbGlu ZyBhbmQgaXQgcnVucyBvay4KCjs7IEhvd2V2ZXIsIChuYXRpdmUtY29tcGlsZSAiY29tcGlsZS1i dWcuZWwiKSBmYWlscyB3aXRoCjs7IHRoZSBlcnJvciByZXBvcnQ6Cgo7OyBDb21waWxpbmcgZmls ZSAvbW50L2Nocm9tZW9zL0dvb2dsZURyaXZlL015RHJpdmUvTGludXgvd29ya2luZy9jb21waWxl LWJ1Zy5lbCBhdCBGcmkgRmViIDE2IDA4OjM1OjA0IDIwMjQKOzsgY29tcGlsZS1idWcuZWw6MTI6 NDU6IFdhcm5pbmc6IFVua25vd24gZGVmdW4gcHJvcGVydHkg4oCYZml4bnVt4oCZIGluIGZvbwo7 OyBjb21waWxlLWJ1Zy5lbDoxMjo0NTogV2FybmluZzogVW5rbm93biBkZWZ1biBwcm9wZXJ0eSDi gJh2ZWN0b3LigJkgaW4gZm9vCgoK --0000000000003785480611820e17 Content-Type: application/x-lisp; name="n3ms.lisp" Content-Disposition: attachment; filename="n3ms.lisp" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lsosin8f2 OyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCjs7OyBBIGZhc3Qgc29ydGluZyBhbGdvcml0aG0gZm9y IFNCQ0wuCgo7OzsgVGhpcyBmaWxlICduM21zLmxpc3AnIHdhcyBjb2RlZCBieSBSb2JlcnQgUy4g Qm95ZXIKOzs7IChyb2JlcnN0ZXBoZW5ib3llckBnbWFpbC5jb20pIGluIDIwMjQuCgo7OzsgSW4g dGhlIG1vc3QgaW1wb3J0YW50IHNlbnNlIHRoZSBvbmx5IGZ1bmN0aW9uIGluICduM21zLmxpc3An IGlzICdtc2EnLgo7OzsgbXNhIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mICdtZXJnZSBzb3J0Jywg b25lIG9mIHRoZSBtb3N0IHdlbGwga25vd24KOzs7IHNvcnRpbmcgYWxnb3JpdGhtcy4KCjs7OyAn bXNhJyBzZWVtcyBmYXN0IHRvIHVzLiBDb25zaWRlciBzb3J0aW5nIGFuIGFycmF5IG9mIDIwIG1p bGxpb24gY29uc2VzCjs7OyB3aG9zZSBjYXJzLCBpLmUuLCB0aGUga2V5cywgYXJlIHJhbmRvbSBm aXhudW1zLgoKOzs7IG1zYSAgICAgICAgIHRvb2sgICAyNy43MTUgIHJlYWwgc2Vjb25kcy4KOzs7 IHN0YWJsZS1zb3J0IHRvb2sgICA4OC43NTEgIHJlYWwgc2Vjb25kcy4KOzs7IHNvcnQgICAgICAg IHRvb2sgIDEyOS44NjMgIHJlYWwgc2Vjb25kcy4KCjs7OyBBZ2FpbiwgJ21zYScgc2VlbXMgZmFz dCB0byB1cy4gQ29uc2lkZXIgc29ydGluZyBhbiBhcnJheSBvZiAyMCBtaWxsaW9uCjs7OyBjb25z ZXMgd2hvc2UgY2FycywgaS5lLiwgdGhlIGtleXMsIGFyZSAwLCAxLCAyLCAzLCAuLi4sIHNvLCBh bHJlYWR5Cjs7OyBzb3J0ZWQuCgo7OzsgbXNhICAgICAgICAgdG9vayAgMS4wNDQgcmVhbCBzZWNv bmRzLgo7Ozsgc3RhYmxlLXNvcnQgdG9vayAgNy40NDQgcmVhbCBzZWNvbmRzLgo7Ozsgc29ydCAg ICAgICAgdG9vayAyMS41NTAgcmVhbCBzZWNvbmRzLgoKOzs7IFRoZSBhYm92ZSB0aW1lcyB3ZXJl IG9idGFpbmVkIHVzaW5nIHRoZSBmcmVlbHkgYXZhaWxhYmxlIFNCQ0wsIGkuZS4KOzs7ICdTdGVl bCBCYW5rIENvbW1vbiBMaXNwJywgb24gbXkgJDEwMCBMZW5vdm8gQ2hyb21lYm9vayBydW5uaW5n IFNCQ0wKOzs7IDIuMi45LmRlYmlhbiwgd2hpY2ggSSBpbnN0YWxsZWQgd2l0aCB0aGUgc2luZ2xl IExpbnV4IGNvbW1hbmQKCjs7OyAgICBzdWRvIGFwdCBpbnN0YWxsIHNiY2wKCjs7OyBUbyBzdGFy dCBTQkNMLCBvbmUgbWlnaHQgaW52b2tlIG9uIGEgTGludXggc2hlbGwgdGhlIGNvbW1hbmQKCjs7 OyAgICBzYmNsIC0tZHluYW1pYy1zcGFjZS1zaXplIDMyMDAKCjs7OyBBZnRlciBleGVjdXRpbmcg KGxvYWQgIm4zbXMubGlzcCIpLCBvbmUgbWF5IHJ1biB0aGUgZm9sbG93aW5nIHR3byBmb3Jtcwo7 OzsgdG8gc2VlIGhvdyB3ZWxsIG9uZSBkb2VzIHdpdGggJ21zYScuCgojfAoocHJvZ24gIytzYmNs IChnYyA6ZnVsbCB0KQogICAgICAgKGZvcm1hdCB0ICJ+JW1ha2UtcmFuZG9tLWFycmF5LWZpeGVk ICgqIDIwIChleHB0IDEwIDYpKS5+JSIpCiAgICAgICAobGV0KiAoKGEgKG1ha2UtcmFuZG9tLWFy cmF5LWZpeGVkICgqIDIwIChleHB0IDEwIDYpKSkpCiAgICAgICAgICAgICAgKGFjMSAoY29weS1z ZXEgYSkpCiAgICAgICAgICAgICAgKGFjMiAoY29weS1zZXEgYSkpKQogICAgICAgICAjK3NiY2wg KGdjIDpmdWxsIHQpCiAgICAgICAgIChmb3JtYXQgdCAifiVUaW1pbmcgbXNhLiIpCiAgICAgICAg ICh0aW1lIChtc2EgYSAnPCA6a2V5ICdjYXIpKQogICAgICAgICAjK3NiY2wgKGdjIDpmdWxsIHQp CiAgICAgICAgIChmb3JtYXQgdCAifiVUaW1pbmcgc3RhYmxlLXNvcnQuIikKICAgICAgICAgKHRp bWUgKHN0YWJsZS1zb3J0IGFjMSAnPCA6a2V5ICdjYXIpKQogICAgICAgICAjK3NiY2wgKGdjIDpm dWxsIHQpCiAgICAgICAgIChmb3JtYXQgdCAifiVUaW1pbmcgc29ydC4iKQogICAgICAgICAodGlt ZSAoc29ydCBhYzIgJzwgOmtleSAnY2FyKSkKICAgICAgICAgKGNvbmQgKChvciAobm90IChlcXVh bHAgYSBhYzEpKSAobm90IChlcXVhbHAgYSBhYzIpKSkKICAgICAgICAgICAgICAgIChlcnJvciAi ZmFpbGVkIikpKQogICAgICAgICAjK3NiY2wgKGdjIDpmdWxsIHQpCiAgICAgICAgIHQpKQoKKHBy b2duICMrc2JjbCAoZ2MgOmZ1bGwgdCkKICAgICAgIChmb3JtYXQgdCAifiVtYWtlLWFzY2VuZGlu ZyAoKiAyMCAoZXhwdCAxMCA2KSkufiUiKQogICAgICAgKGxldCogKChhIChtYWtlLWFzY2VuZGlu ZyAoKiAyMCAoZXhwdCAxMCA2KSkpKQogICAgICAgICAgICAgIChhYzEgKGNvcHktc2VxIGEpKQog ICAgICAgICAgICAgIChhYzIgKGNvcHktc2VxIGEpKSkKICAgICAgICAgIytzYmNsIChnYyA6ZnVs bCB0KQogICAgICAgICAoZm9ybWF0IHQgIn4lVGltaW5nIG1zYS4iKQogICAgICAgICAodGltZSAo bXNhIGEgJzwgOmtleSAnY2FyKSkKICAgICAgICAgIytzYmNsIChnYyA6ZnVsbCB0KQogICAgICAg ICAoZm9ybWF0IHQgIn4lVGltaW5nIHN0YWJsZS1zb3J0LiIpCiAgICAgICAgICh0aW1lIChzdGFi bGUtc29ydCBhYzEgJzwgOmtleSAnY2FyKSkKICAgICAgICAgIytzYmNsIChnYyA6ZnVsbCB0KQog ICAgICAgICAoZm9ybWF0IHQgIn4lVGltaW5nIHNvcnQuIikKICAgICAgICAgKHRpbWUgKHNvcnQg YWMyICc8IDprZXkgJ2NhcikpCiAgICAgICAgIChjb25kICgob3IgKG5vdCAoZXF1YWxwIGEgYWMx KSkgKG5vdCAoZXF1YWxwIGEgYWMyKSkpCiAgICAgICAgICAgICAgICAoZXJyb3IgImZhaWxlZCIp KSkKICAgICAgICAgdCkpCnwjCgo7OzsgJ24zbXMubGlzcCcgaXMgJ3B1YmxpYyBkb21haW4nLCB3 aGljaCBtZWFucyB0aGF0IGFzIGZhciBhcyBSb2JlcnQgQm95ZXIKOzs7IGlzIGNvbmNlcm5lZCwg YW55b25lIGNhbiBkbyBhbnl0aGluZyAnbGVnYWwnIHdpdGggJ24zbXMubGlzcCcgdGhhdCB0aGV5 Cjs7OyBjaG9vc2UuCgo7OzsgVGhlIGZpbGUgJ24zbXMubGlzcCcgcnVucyBpbiAnU0JDTCcgYW5k IHBlcmhhcHMgaW4gb3RoZXIgTGlzcHMuCgo7OzsgV2UgaG9wZSB0aGF0ICdtc2EnIGNvbXBsaWVz IHdpdGggdGhlIEFOU0kgQ29tbW9uIExpc3Agc3BlYyBmb3IKOzs7IHN0YWJsZS1zb3J0LgoKOzs7 IEl0IG1heSBzb3VuZCB1bnVzdWFsIHRoYXQgb24gZXZlcnkgY2FsbCwgJ21zYScgZGVmaW5lcyB0 aHJlZSBtYWNyb3MgYW5kCjs7OyBvbmUgZnVuY3Rpb24uIFRoZSBvbmUgZnVuY3Rpb24gZGVmaW5l ZCwgJ21zYS0xJywgZG9lcyBhbG1vc3QgYWxsIG9mIHRoZQo7Ozsgc29ydGluZyB3b3JrLgoKOzs7 IEluIHNvbWUgY2FzZXMgJ21zYScgaXMgcGVyaGFwcyAzIHRpbWVzIGFzIGZhc3QgYXMgJ3N0YWJs ZS1zb3J0JyBvbiBteQo7OzsgQ2hyb21lYm9vayBydW5uaW5nIFNCQ0wuIFRpbWVzIHZhcnkgYXMg ZG9lcyB0aGUgZGF0YS4KCjs7OyBPbmUgY3JpdGljaXNtIG9mIG1lcmdlIHNvcnQgaXMgdGhhdCBp dCByZXF1aXJlcyBzY3JhdGNoIHNwYWNlLCB3aGljaCB3ZQo7OzsgbmFtZSAnbXNhLXNjcmF0Y2gn LCBhbiBhcnJheSB3aG9zZSBsZW5ndGggaXMgZXF1YWwgdG8gdGhlIGxlbmd0aCBvZiB0aGUKOzs7 IGlucHV0LiAncXVpY2sgc29ydCcsIGZvciBleGFtcGxlLCByZXF1aXJlcyBubyBleHRyYSBzcGFj ZS4gRm9yIGdvb2Qgb3IKOzs7IGZvciBiYWQsICdtc2EnIGxlYXZlcyAnbXNhLXNjcmF0Y2gnIGFy b3VuZCBmb3IgdGhlIG5leHQgY2FsbCBvZiAnbXNhJywKOzs7IGFuZCBpZiBvbiB0aGUgbmV4dCBj YWxsIG9mICdtc2EnLCAnbXNhLXNjcmF0Y2gnIGlzIGFscmVhZHkgbG9uZyBlbm91Z2gsCjs7OyBp dCBpcyByZXVzZWQuIEFueSB0aW1lIGFmdGVyIGFuICdtc2EnIGNhbGwsIGZlZWwgZnJlZSB0byBk bzoKCjs7OyAgICAoc2V0cSBtc2Etc2NyYXRjaCAobWFrZS1hcnJheSAxKSkuCgo7OzsgVGhhbmtz IHRvIFN0YXMgQm91a2FyZXYgKHN0YXNzYXRzQGdtYWlsLmNvbSkgYW5kIEdyYW50IFBhc3Ntb3Jl Cjs7OyAoZ3JhbnRAaW1hbmRyYS5haSkgZm9yIG11Y2ggaW52YWx1YWJsZSBoZWxwIHdpdGggbXNh LgoKOzs7IE1lcmdlIHNvcnQgaXMgb25lIG9mIHRoZSBleGFtcGxlcyB0aGF0IEdvbGRzdGluZSBh bmQgdm9uIE5ldW1hbm4gcHJlc2VudAo7OzsgaW4gYSAxOTQ2IHJlcG9ydCBvbiB0aGUgJ3ZvbiBO ZXVtYW5uIG1hY2hpbmUnLCB2aXouICdQbGFubmluZyBhbmQgQ29kaW5nCjs7OyBQcm9ibGVtcyBm b3IgYW4gRWxlY3Ryb25pYyBDb21wdXRpbmcgSW5zdHJ1bWVudCcsIGJ5IEhlcm1hbiBILiBHb2xk c3RpbmUKOzs7IGFuZCBKb2huIHZvbiBOZXVtYW5uLCBwcC4gODAtMjM1IG9mICdKb2huIHZvbiBO ZXVtYW5uLCBDb2xsZWN0ZWQgV29ya3MsCjs7OyBWb2x1bWUgViwgRGVzaWduIG9mIENvbXB1dGVy cywgVGhlb3J5IG9mIEF1dG9tYXRhIGFuZCBOdW1lcmljYWwKOzs7IEFuYWx5c2lzJywgUGVyZ2Ft b24gUHJlc3MsIDE5NjEuIFRoZSBzb3J0aW5nIHdvcmsgaXMgJ1Byb2JsZW0gMTUnLCBwcC4KOzs7 IDE5Ny0yMTQuIDE3IHBhZ2VzIG9uIG1lcmdlIHNvcnQuCgooaW4tcGFja2FnZSAiQ09NTU9OLUxJ U1AtVVNFUiIpCgooZm9ybWF0IHQgIn4lTm90ZTogTG9hZGluZyBuM21zLmxpc3AufiUiKQoKKGZv cm1hdCB0ICJ+JU5vdGU6ICpMT0FELVRSVUVOQU1FKiA9IH5zLn4lIiAqTE9BRC1UUlVFTkFNRSop CgooY29uZCAoKG1lbWJlciA6bXNhLXRocmVhZHMgKmZlYXR1cmVzKikKICAgICAgIChmb3JtYXQg dCAifiVOb3RlOiAobWVtYmVyIDptc2EtdGhyZWFkcyAqZmVhdHVyZXMqKS5+JSIpKQogICAgICAo dCAoZm9ybWF0IHQgIn4lTm90ZTogKG5vdCAobWVtYmVyIDptc2EtdGhyZWFkcyAqZmVhdHVyZXMq KSkufiUiKSkpCgooZGVmcGFyYW1ldGVyIG9wdGltaXplLXNldHRpbmcgCiAgJyhkZWNsYWltIChv cHRpbWl6ZSAoc2FmZXR5IDMpIChzcGVlZCAwKSAoZGVidWcgMykpKSkKCihmb3JtYXQgdCAifiVO b3RlOiBPcHRpbWl6ZSBzZXR0aW5nOiB+cy5+JSIgb3B0aW1pemUtc2V0dGluZykKCihldmFsIG9w dGltaXplLXNldHRpbmcpCgooZGVmdW4gcHJpbnQtZGF0ZS1hbmQtdGltZSAoKQogIChtdWx0aXBs ZS12YWx1ZS1iaW5kCiAgIChzZWNvbmQgbWludXRlIGhvdXIgZGF5IG1vbnRoIHllYXIgZGF5LW9m LXdlZWsgZHN0LXAgdHopCiAgIChnZXQtZGVjb2RlZC10aW1lKQogICAoZGVjbGFyZSAoaWdub3Jl IGRzdC1wIHR6KSkKICAgKGZvcm1hdCAqc3RhbmRhcmQtb3V0cHV0KgogICAgICAgICAgICJ+Miwn MGQ6fjIsJzBkOn4yLCcwZCwgfmEsIH5kL34yLCcwZC9+ZH4lIgogICAgICAgICAgIGhvdXIgbWlu dXRlIHNlY29uZAogICAgICAgICAgIChudGggZGF5LW9mLXdlZWsgJygiTW9uZGF5IiAiVHVlc2Rh eSIgIldlZG5lc2RheSIgIlRodXJzZGF5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi RnJpZGF5IiAiU2F0dXJkYXkiICJTdW5kYXkiKSkKICAgICAgICAgICBtb250aCBkYXkgeWVhcikK ICAgbmlsKSkKCih0ZXJwcmkpCgoobGV0ICgoKnN0YW5kYXJkLW91dHB1dCogKnRlcm1pbmFsLWlv KikpIChwcmludC1kYXRlLWFuZC10aW1lKSkKCihmb3JtYXQgdCAifiVOb3RlOiAobWFjaGluZS10 eXBlKSA9IH5zLn4lIiAobWFjaGluZS10eXBlKSkKCihmb3JtYXQgdCAifiVOb3RlOiAobWFjaGlu ZS12ZXJzaW9uKSA9IH5zLn4lIiAobWFjaGluZS12ZXJzaW9uKSkKCiMrc2JjbAoocHJvZ24gKGZv cm1hdCB0ICJ+JU5vdGU6IGxvZ2dpbmcgZ2MgdG8gZ2MtbG9nZmlsZS50eHQufiUiKQogICAgICAg KGNvbmQgKChwcm9iZS1maWxlICJnYy1sb2dmaWxlLnR4dCIpIChkZWxldGUtZmlsZSAiZ2MtbG9n ZmlsZS50eHQiKSkpCiAgICAgICAobGV0ICgoc3RyZWFtIChvcGVuICJnYy1sb2dmaWxlLnR4dCIg OmRpcmVjdGlvbiA6b3V0cHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDppZi1leGlzdHMg OnN1cGVyc2VkZQogICAgICAgICAgICAgICAgICAgICAgICAgICA6aWYtZG9lcy1ub3QtZXhpc3Qg OmNyZWF0ZSkpKQogICAgICAgICA7OyAoc2V0ZiAoZ2MtbG9nZmlsZSkgbmlsKSB0dXJucyBnYyBy ZXBvcnRpbmcgb2ZmLgogICAgICAgICAoZm9ybWF0IHN0cmVhbSAiLSotIE1vZGU6IGF1dG8tcmV2 ZXJ0LXRhaWwgLSotfiUiKQogICAgICAgICAobGV0ICgoKnN0YW5kYXJkLW91dHB1dCogc3RyZWFt KSkKICAgICAgICAgICAodGVycHJpKQogICAgICAgICAgIChwcmludC1kYXRlLWFuZC10aW1lKQog ICAgICAgICAgICh0ZXJwcmkpKQogICAgICAgICAoY2xvc2Ugc3RyZWFtKQogICAgICAgICAoc2V0 ZiAoZ2MtbG9nZmlsZSkgImdjLWxvZ2ZpbGUudHh0IikKICAgICAgICAgKGdjIDpmdWxsIHQpKSkK CihkZWZtYWNybyBvdXItdGltZSAoeCkKICBgKHByb2duIAogICAgIChmb3JtYXQgdCAifiVUaW1p bmcgfnMufiUiICcseCkKICAgICAodGltZSAseCkpKQoKOzs7IFRoZSBTQkNMIGdjIGRvZXMgbm90 IGFsd2F5cyBjb2xsZWN0IGFsbCB0aGF0IGl0IG1pZ2h0LgoKKGRlZnBhcmFtZXRlciByYW5kb20t ZnVsbC1nYy1mcmVxdWVuY3kgMTAwKQoKIytzYmNsCihwcm9nbgogIChkZWZ1biBteS1nYy1ob29r ICgpCiAgICAoY29uZCAoKGVxdWFsIChyYW5kb20gcmFuZG9tLWZ1bGwtZ2MtZnJlcXVlbmN5KSAw KQogICAgICAgICAgIChmb3JtYXQgdCAifiVteS1nYy1ob29rLn4lIikKICAgICAgICAgICAoZ2Mg OmZ1bGwgdCkpKSkKICAoc2V0cSAqYWZ0ZXItZ2MtaG9va3MqICcobXktZ2MtaG9vaykpCiAgKGZv cm1hdCB0ICJ+JU5vdGU6IHJhbmRvbS1mdWxsLWdjLWZyZXF1ZW5jeSA9IH5zLn4lIgogICAgICAg ICAgcmFuZG9tLWZ1bGwtZ2MtZnJlcXVlbmN5KSkKCiMrc2JjbAooc2V0cSBzYi1leHQ6KmRlYnVn LXByaW50LXZhcmlhYmxlLWFsaXN0KgogICAgICAnKCgqcHJpbnQtbGV2ZWwqIC4gMTApCiAgICAg ICAgKCpwcmludC1sZW5ndGgqIC4gMTApCiAgICAgICAgKCpwcmludC1jaXJjbGUqIC4gbmlsKQog ICAgICAgICgqcHJpbnQtcHJldHR5Ki4gdCkpKQoKIytzYmNsCihjb25kICgocHJvYmUtZmlsZSAi cmFuZG9tLWxvY2tpbmcubGlzcCIpCiAgICAgICA7OyBXZSBjaG9vc2UgYSAqcmFuZG9tLXN0YXRl KiwgaWYgaXQgY2FuIGJlIGZvdW5kLCBzbyB0aGF0IHdlIGNhbgogICAgICAgOzsgcmVwZWF0IG91 ciByZXN1bHRzIGVhc2lseS4KICAgICAgIChmb3JtYXQgdAogICAgICAgICAgICAgICAifiVOb3Rl OiBsb2FkaW5nIHJhbmRvbSBpbml0IGZpbGUgcmFuZG9tLWxvY2tpbmcubGlzcC5+JSIpCiAgICAg ICAobG9hZCAicmFuZG9tLWxvY2tpbmcubGlzcCIpKSkKCihkZWZwYXJhbWV0ZXIgbXNhLWlucHV0 IChtYWtlLWFycmF5IDEpKQoKKGRlZnBhcmFtZXRlciBtc2Etc2NyYXRjaCAobWFrZS1hcnJheSAx KSkKCihkZWNsYWltICh0eXBlIHNpbXBsZS12ZWN0b3IgbXNhLXNjcmF0Y2gpKQoKKGRlZnBhcmFt ZXRlciBtc2EtYWxsLWZpeG51bSBuaWwpCgooZGVmcGFyYW1ldGVyIG1zYS1hbGwtc2luZ2xlLWZs b2F0IG5pbCkKCihkZWZwYXJhbWV0ZXIgbXNhLWFsbC1kb3VibGUtZmxvYXQgbmlsKQoKKGRlZnBh cmFtZXRlciBtc2EtYWxsLWtleXMtcmVhbCBuaWwpCgooZGVmcGFyYW1ldGVyIGtleSBuaWwpCgoo ZGVmcGFyYW1ldGVyIG1zYS1wcmVkaWNhdGUgJzwpCgooZGVmcGFyYW1ldGVyIG1zYS10eXBlIHQp CgooZGVmcGFyYW1ldGVyIDwtc3ltICc8KQoKKGRlZnVuIHByb3Blci1saXN0LXAgKHgpCiAgKG9y IChudWxsIHgpIChhbmQgKGNvbnNwIHgpIChudWxsIChjZHIgKGxhc3QgeCkpKSkpKQoKKGRlZnVu IGxvYWQtYXZlcmFnZSAoKQogICIobG9hZC1hdmVyYWdlKSByZXR1cm5zIHR3byB2YWx1ZXM6IHRo ZSBjdXJyZW50IGxvYWQgYXZlcmFnZSBhbmQgdGhlIGxpbmUgdGhhdCB1cHRpbWUgcHJpbnRzLiIK ICAobGV0KiAoKHByb2MgKHJ1bi1wcm9ncmFtICIvdXNyL2Jpbi91cHRpbWUiIG5pbCA6b3V0cHV0 IDpzdHJlYW0pKQogICAgICAgICAobyAoc2ItZXh0OnByb2Nlc3Mtb3V0cHV0IHByb2MpKQogICAg ICAgICAocyAocmVhZC1saW5lIG8pKSkKICAgIChwcm9jZXNzLWNsb3NlIHByb2MpCiAgICAoY2xv c2UgbykKICAgIChsZXQgKChuIChzZWFyY2ggImxvYWQgYXZlcmFnZTogIiBzKSkpCiAgICAgICh2 YWx1ZXMgKHJlYWQtZnJvbS1zdHJpbmcgKHN1YnNlcSBzICgrIG4gMTQpKSkgcykpKSkKCihkZWZ1 biBtc2EgKGFyIG1zYS1wcmVkaWNhdGUgJmtleSBrZXkpCiAgIihtc2EgYXIgbXNhLXByZWRpY2F0 ZSAma2V5IGtleSkgdGFrZXMgdHdvIGFyZ3VtZW50cyBhbmQgYW4gb3B0aW9uYWwgdGhpcmQKICAg YXJndW1lbnQgdmlhIHRoZSBrZXl3b3JkIDprZXkuCgogICBXZSBob3BlIGFuZCBiZWxpZXZlIHRo YXQgbXNhIGRvZXMgZXhhY3RseSB3aGF0IHN0YWJsZS1zb3J0IGRvZXMuCgogICAoMSkgYXIgaXMg ZWl0aGVyIGEgb25lIGRpbWVuc2lvbmFsIGFycmF5IG9yIGEgbGlzdCB0aGF0IGVuZHMgaW4gbmls LCBpLmUuCiAgIGEgcHJvcGVyIGxpc3QuCgogICAoMikgbXNhLXByZWRpY2F0ZSBpcyBhIGZ1bmN0 aW9uIG9mIHR3byBhcmd1bWVudHMsIGUuZy4gJzwgb3IgIyc8LiBFaXRoZXIKICAgbXNhLXByZWRp Y2F0ZSBpcyBhIHN5bWJvbCB0aGF0IGlzIGZib3VuZHAgb3IgaXQgaXMgYW4gb2JqZWN0IHRoYXQK ICAgc2F0aXNmaWVzIGZ1bmN0aW9ucCwgZS5nLiAjJzwuIChtc2EtcHJlZGljYXRlIHggeSkgc2hv dWxkIGFsd2F5cyByZXR1cm4KICAgYW4gYW5zd2VyIHRoYXQgb25seSBkZXBlbmRzIHVwb24geCBh bmQgeS4KCiAgICgzKSBrZXkgbWF5IGJlIG5pbCwgYSBzeW1ib2wgdGhhdCBpcyBmYm91bmRwLCBv ciBhbiBvYmplY3QgdGhhdCBzYXRpc2ZpZXMKICAgZnVuY3Rpb25wLCBlLmcuLCAjJ2Nhci4gSWYg a2V5IGlzIG5vdCBzdXBwbGllZCBvciBpcyBuaWwsIGl0IGlzIHRyZWF0ZWQgYXMKICAgYmVpbmcg J2lkZW50aXR5LiAoa2V5IHgpIHNob3VsZCByZXR1cm4gYW4gYW53ZXIgdGhhdCBvbmx5IGRlcGVu ZHMgdXBvbiB4LAoKICAgbXNhIGlzIHlldCBhbm90aGVyIGltcGxlbWVudGF0aW9uIG9mIG1lcmdl IHNvcnQsIHNvIG1zYSBzdGFibHkgc29ydHMgYXIuCiAgIFBlcmhhcHMgdGhlIHJlYWRlciBhbHJl YWR5IGtub3dzIHdoYXQgdGhhdCBtZWFucy4gVGhlIGZvbGxvd2luZyA1NSBsaW5lcwogICBzYXkg d2hhdCBpdCBtZWFucyBpbiBkZXRhaWwuCgogICBMZXQgbGVuIGJlIChsZW5ndGggYXIpLgoKICAg TGV0IHVzIHN1cHBvc2UgdGhhdCBtc2EtcHJlZGljYXRlIGlzIGEgdG90YWwgb3JkZXIsIGkuZS4K ICAgKGxldCAoKGwgKGxvb3AgZm9yIGkgYmVsb3cgbGVuIGNvbGxlY3QgKGtleSAoZWx0IGFyIGkp KSkpKQogICAgICAobG9vcCBmb3IgaSBpbiBsIGFsd2F5cwogICAgICAgICAobG9vcCBmb3IgaiBp biBsIGFsd2F5cwogICAgICAgICAgIChsb29wIGZvciBrIGluIGwgYWx3YXlzCiAgICAgICAgICAg ICAoYW5kIDsgaXJyZWZsZXhpdmU/PwogICAgICAgICAgICAgICAgICAoZXF1YWwgMSAobGVuZ3Ro CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9vcCBmb3IgbgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGluIChsaXN0IChlcXVhbCBpIGopCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKG1zYS1wcmVkaWNhdGUgaSBqKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChtc2EtcHJlZGljYXRlIGogaSkpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgd2hlbiBuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgMSkpKQog ICAgICAgICAgICAgICAgICA7IHRyYW5zaXRpdmUKICAgICAgICAgICAgICAgICAgKGNvbmQgKChh bmQgKG1zYS1wcmVkaWNhdGUgaSBqKSAobXNhLXByZWRpY2F0ZSBqIGspKQogICAgICAgICAgICAg ICAgICAgICAgICAgKG1zYS1wcmVkaWNhdGUgaSBrKSkKICAgICAgICAgICAgICAgICAgICAgICAg KHQgdCkpKSkpKSkKCiAgTGV0IG1zYS1pbnB1dCBiZSAoY29weS1zZXEgYXIpLiBhciBnZXRzIGNs b2JiZXJlZCwgc28gd2UgZ3JhYiBhIGNvcHkgb2YgYXIKICBqdXN0IGZvciB0aGUgZm9sbG93aW5n IHRleHQuCgogIExldCBtc2Etb3V0cHV0IGJlIChtc2EgYXIgbXNhLXByZWRpY2F0ZSA6a2V5IGtl eSkuCgogIDEsIDIsIDMsIGFuZCA0IGhvbGQ6CgogICAxLiBtc2Etb3V0cHV0IGlzICdlcScgdG8g dGhlIG9iamVjdCBhciBwYXNzZWQgdG8gbXNhLgoKICAgMi4gKGFuZCAoZXF1YWwgKGFycmF5cCBt c2EtaW5wdXQpIChhcnJheXAgbXNhLW91dHB1dCkpCiAgICAgICAgICAgKGVxdWFsIChwcm9wZXIt bGlzdC1wIG1zYS1pbnB1dCkgKHByb3Blci1saXN0LXAgbXNhLW91dHB1dCkpCiAgICAgICAgICAg KGVxdWFsIGxlbiAobGVuZ3RoIG1zYS1vdXRwdXQpKSkKCiAgIDs7IG1zYS1vdXRwdXQgaXMgb3Jk ZXJlZC4KICAgMy4gKGxvb3AgZm9yIGkgZnJvbSAwIHRvICgtIGxlbiAyKSBhbHdheXMKICAgICAg IChsZXQgKChrMSAoa2V5IChlbHQgbXNhLW91dHB1dCBpKSkpCiAgICAgICAgICAgICAoazIgKGtl eSAoZWx0IG1zYS1vdXRwdXQgKDErIGkpKSkpKQogICAgICAgICAgKG9yIChlcXVhbCBrMSBrMikg KG1zYS1wcmVkaWNhdGUgazEgazIpKSkpCgogICA7OyBzdGFiaWxpdHk6IGVsZW1lbnRzIHdpdGgg dGhlIHNhbWUga2V5IG9jY3VyIGluIG1zYS1vdXRwdXQgaW4gdGhlIHNhbWUKICAgOzsgb3JkZXIg YXMgdGhleSBvY2N1ciBpbiBhci1pbnB1dC4KCiAgIDQuIChsb29wIGZvciBpIGZyb20gMCB0byAo MS0gbGVuKSBhbHdheXMKICAgICAgICAoZXF1YWwgKGxvb3AgZm9yIGogZnJvbSAwIHRvICgxLSBs ZW4pIHdoZW4KICAgICAgICAgICAgICAgICAgICAgKGVxdWFsIChrZXkgKGVsdCBhci1pbnB1dCBp KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXkgKGVsdCBhci1pbnB1dCBqKSkpCiAg ICAgICAgICAgICAgICAgICAgIGNvbGxlY3QgKGVsdCBhci1pbnB1dCBqKSkKICAgICAgICAgICAg ICAgKGxvb3AgZm9yIGogZnJvbSAwIHRvICgxLSBsZW4pIHdoZW4KICAgICAgICAgICAgICAgICAg ICAgKGVxdWFsIChrZXkgKGVsdCBhci1pbnB1dCBpKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChrZXkgKGVsdCBtc2Etb3V0cHV0IGopKSkKICAgICAgICAgICAgICAgICAgICAgY29sbGVj dCAoZWx0IG1zYS1vdXRwdXQgaikpKSkKCiAgIG1zYSByZXR1cm5zIGFyLgoKICAgbXNhIHNldHMg dGhlIGdsb2JhbHMgbXNhLWlucHV0IGFuZCBtc2Etc2NyYXRjaC4KCiAgIFRoZW9yZXRpY2FsIGNv bXBsZXhpdHk6IHRoZXJlIGV4aXN0cyBhIGsgc3VjaCB0aGF0IG1zYSBydW5zIGluIHRpbWUgYXQK ICAgbW9zdCAoKiBrIGxlbiAobG9nIGxlbiAyKSksIGFzc3VtaW5nIHRoYXQgYm90aCBtc2EtcHJl ZGljYXRlIGFuZCBrZXkgcnVuCiAgIGluIGNvbnN0YW50IHRpbWUuCgogICBUaGVyZSBleGlzdCBz b3J0aW5nIGFsZ29yaXRobXMgdGhhdCBkbyBub3QgcmVxdWlyZSBuZXcgc3BhY2UsIGUuZy4gcXVp Y2sKICAgc29ydCBhbmQgU0JDTCdzIHNvcnQuIEhvd2V2ZXIsIG1zYSBkb2VzIHJlcXVpcmUgc3Bh Y2UsIHNvIHdlIGdpdmUgdGhyZWUKICAgd2FybmluZ3MuCgogICBTcGFjZSB3YXJuaW5nIDE6IG1z YSBtYXkgY3JlYXRlIGEgc2NyYXRjaCBhcnJheSBvZiBsZW5ndGggbGVuLgoKICAgU3BhY2Ugd2Fy bmluZyAyOiBtc2EgbWF5IGFsc28gY3JlYXRlIGFub3RoZXIgYXJyYXkgb2YgbGVuZ3RoIGxlbiBp ZiBhciBpcwogICBhIHByb3Blci1saXN0IG9yIGlzIG5vdCBvZiB0eXBlIHNpbXBsZS12ZWN0b3Iu CgogICBTcGFjZSB3YXJuaW5nIDM6IG1zYSBkZWZpbmVzIGFuZCBjb21waWxlcyBvbmUgZnVuY3Rp b24sIG5hbWVseSBtc2EtMSwgYW5kCiAgIHRocmVlIG1hY3JvcywgbmFtZWx5IGtleSwgbXNhLWVx dWFsLCBhbmQgbXNhLTwuIFRob3NlIGRlZmluaXRpb25zIGFuZAogICBjb21waWxhdGlvbnMgY29u c3VtZSBzcGFjZS4KCiAgIEl0IHNlZW1zIGEgYml0IGN1cmlvdXMgdG8gYWR2aXNlIHRoYXQgYm90 aCBtc2EtcHJlZGljYXRlIGFuZCBrZXkgYmUgcGFzc2VkCiAgIGFzIHN5bWJvbHMgcmF0aGVyIHRo YW4gYXMgZnVuY3Rpb25wJ3MsIGUuZy4gJzwgaXMgcHJvYmFibHkgYmV0dGVyIHRoYW4KICAgIyc8 LiBJbiB0aGUgY2FzZSBvZiBzeW1ib2xzLCB0aGVpciBjYWxscyBhcmUgcHJvYmFibHkgZmFzdGVy IGJlY2F1c2Ugb25lCiAgIG1heSBhdm9pZCBhIGNhbGwgb2YgZnVuY2FsbC4gQnV0IGl0IGlzIGhh cmQgdG8ga25vdyB3aGF0IGEgZ29vZCBjb21waWxlcgogICBtaWdodCBkby4KCiAgIFdobyBhcmUv d2VyZSB0aG9zZSBndXlzPyBKb2huIHZvbiBOZXVtYW5uIGFuZCBIZXJtYW4gR29sZHN0aW5lIHBy ZXNlbnRlZAogICBtZXJnZSBzb3J0IGluIHBlcmhhcHMgdGhlIGZpcnN0IHJlcG9ydCBvbiB0aGUg J3ZvbiBOZXVtYW5uIG1hY2hpbmUnLAogICB3aGVyZWluIGlzIGRlc2NyaWJlZCBob3cgdG8gd3Jp dGUgbWFjaGluZSBjb2RlIGFuZCB0byB2ZXJpZnkgbWFjaGluZSBjb2RlLAogICB3aXRoIG1hbnkg ZXhhbXBsZXMuIFNlZSB0aGUgMTk0NiBhcnRpY2xlICdQbGFubmluZyBhbmQgQ29kaW5nIFByb2Js ZW1zIGZvcgogICBhbiBFbGVjdHJvbmljIENvbXB1dGluZyBJbnN0cnVtZW50JywgYnkgSGVybWFu IEguIEdvbGRzdGluZSBhbmQgSm9obiB2b24KICAgTmV1bWFubiwgcHAuIDgwLTIzNSBvZiAnSm9o biB2b24gTmV1bWFubiwgQ29sbGVjdGVkIFdvcmtzLCBWb2x1bWUgViwKICAgRGVzaWduIG9mIENv bXB1dGVycywgVGhlb3J5IG9mIEF1dG9tYXRhIGFuZCBOdW1lcmljYWwgQW5hbHlzaXMnLCBQZXJn YW1vbgogICBQcmVzcywgMTk2MS4gVGhlIHNvcnRpbmcgd29yayBpcyAnUHJvYmxlbSAxNScsIHdo aWNoIHN0YXJ0cyBvbiBwYWdlIDE5NwogICBhbmQgZW5kcyBvbiBwYWdlIDIxNC4gMTcgcGFnZXMg b24gbWVyZ2Ugc29ydCEiCgogIDs7IENoZWNrIHRoZSBpbnB1dC4KCiAgKGNvbmQgKCh0eXBlcCBh ciAnKGFycmF5IHQgKCopKSkpCiAgICAgICAgKChudWxsIGFyKSAocmV0dXJuLWZyb20gbXNhIG5p bCkpCiAgICAgICAgKChhbmQgKGNvbnNwIGFyKSAobnVsbCAoY2RyIChsYXN0IGFyKSkpKSkKICAg ICAgICAodCAoZXJyb3IgIn4lbXNhOiBmaXJzdCBhcmd1bWVudCBpcyBub3QgYSBwcm9wZXIgc2Vx dWVuY2UuIikpKQogIChjb25kICgoc3ltYm9scCBtc2EtcHJlZGljYXRlKQogICAgICAgICAoY29u ZCAoKG5vdCAoZmJvdW5kcCBtc2EtcHJlZGljYXRlKSkKICAgICAgICAgICAgICAgIChlcnJvciAi bXNhOiBtc2EtcHJlZGljYXRlIGlzIG5vdCBhIGZ1bmN0aW9uLiIpKSkpCiAgICAgICAgKChub3Qg KGZ1bmN0aW9ucCBtc2EtcHJlZGljYXRlKSkKICAgICAgICAgKGVycm9yICJtc2E6IG1zYS1wcmVk aWNhdGUgaXMgbm90IGEgZnVuY3Rpb24uIikpKQogIChjb25kIChrZXkKICAgICAgICAgKGNvbmQg KChzeW1ib2xwIGtleSkKICAgICAgICAgICAgICAgIChjb25kICgobm90IChmYm91bmRwIGtleSkp CiAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yICJtc2E6IGtleSBpcyBub3QgYSBmdW5jdGlv bi4iKSkpKQogICAgICAgICAgICAgICAoKG5vdCAoZnVuY3Rpb25wIGtleSkpCiAgICAgICAgICAg ICAgICAoZXJyb3IgIm1zYToga2V5IGlzIG5vdCBhIGZ1bmN0aW9uLiIpKSkpKQoKICA7OyBNYXli ZSBjaGFuZ2UgJ2tleScgdG8gYSBzeW1ib2wuCgogIChjb25kICgob3IgKGVxIGtleSAnaWRlbnRp dHkpIChlcSBrZXkgIydpZGVudGl0eSkpCiAgICAgICAgIChzZXRxIGtleSBuaWwpKSkKCiAgOzsg TWF5YmUgY2hhbmdlIG1zYS1wcmVkaWNhdGUgdG8gYSBzeW1ib2wuCgogIChjb25kICgoZXEgbXNh LXByZWRpY2F0ZSAjJzwpIChzZXRxIG1zYS1wcmVkaWNhdGUgJzwpKQogICAgICAgICgoZXEgbXNh LXByZWRpY2F0ZSAjJz4pIChzZXRxIG1zYS1wcmVkaWNhdGUgJz4pKSkKCiAgKGxldCAoKGxlbiAo bGVuZ3RoIGFyKSkpCiAgICAoZGVjbGFyZSAoZml4bnVtIGxlbikpCiAgICAoY29uZCAoKD0gbGVu IDApIChyZXR1cm4tZnJvbSBtc2EgYXIpKSkKCiAgICA7OyBNYXliZSBtYWtlIGEgbGFyZ2VyIG1z YS1zY3JhdGNoLgoKICAgIChjb25kICgoPD0gbGVuIChsZW5ndGggbXNhLXNjcmF0Y2gpKSBtc2Et c2NyYXRjaCkKICAgICAgICAgICh0IChzZXRxIG1zYS1zY3JhdGNoIChtYWtlLWFycmF5IGxlbikp KSkKCiAgICAoc2V0cSBtc2EtaW5wdXQKICAgICAgICAgIChjb25kICgoY29uc3AgYXIpIChtYWtl LWFycmF5IGxlbiA6aW5pdGlhbC1jb250ZW50cyBhcikpCiAgICAgICAgICAgICAgICAoKHR5cGVw IGFyICdzaW1wbGUtdmVjdG9yKSBhcikKCiAgICAgICAgICAgICAgICA7OyBXZSBiZWxpZXZlIHRo YXQgcmVmZXJlbmNlcyB0byBzaW1wbGUgdmVjdG9ycyBhcmUgZmFzdGVyCiAgICAgICAgICAgICAg ICA7OyB0aGFuIHRvIG90aGVyIHZlY3RvcnMsIGUuZy4sIHRob3NlIHRoYXQgYXJlICdkaXNwbGFj ZWQnLgoKICAgICAgICAgICAgICAgICh0IChjb3B5LXNlcSBhcikpKSkKICAgIChsZXQgKChtc2Et YWxsLWZpeG51bSB0KSAobXNhLWFsbC1zaW5nbGUtZmxvYXQgdCkgKG1zYS1hbGwtZG91YmxlLWZs b2F0IHQpCiAgICAgICAgICAobXNhLWFsbC1rZXlzLXJlYWwgdCkgKG9yaWctYXIgYXIpKQogICAg ICAobG9vcCBmb3IgaSBmaXhudW0gYmVsb3cgbGVuIGRvCiAgICAgICAgICAgIChsZXQgKCh4IChj b25kICgobnVsbCBrZXkpIChzdnJlZiBtc2EtaW5wdXQgaSkpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICh0IChmdW5jYWxsIGtleSAoc3ZyZWYgbXNhLWlucHV0IGkpKSkpKSkKICAgICAgICAg ICAgICAoY29uZCAoKGFuZCBtc2EtYWxsLWtleXMtcmVhbCAobm90ICh0eXBlcCB4ICdyZWFsKSkp CiAgICAgICAgICAgICAgICAgICAgIChzZXRxIG1zYS1hbGwta2V5cy1yZWFsIG5pbCkpKQogICAg ICAgICAgICAgIChjb25kICgoYW5kIG1zYS1hbGwtZml4bnVtIChub3QgKHR5cGVwIHggJ2ZpeG51 bSkpKQogICAgICAgICAgICAgICAgICAgICAoc2V0cSBtc2EtYWxsLWZpeG51bSBuaWwpKSkKICAg ICAgICAgICAgICAoY29uZCAoKGFuZCBtc2EtYWxsLXNpbmdsZS1mbG9hdCAobm90ICh0eXBlcCB4 ICdzaW5nbGUtZmxvYXQpKSkKICAgICAgICAgICAgICAgICAgICAgKHNldHEgbXNhLWFsbC1zaW5n bGUtZmxvYXQgbmlsKSkpCiAgICAgICAgICAgICAgKGNvbmQgKChhbmQgbXNhLWFsbC1kb3VibGUt ZmxvYXQpIChub3QgKHR5cGVwIHggJ2RvdWJsZS1mbG9hdCkpCiAgICAgICAgICAgICAgICAgICAg IChzZXRxIG1zYS1hbGwtZG91YmxlLWZsb2F0IG5pbCkpKSkpCiAgICAgIChsZXQgKChtc2EtdHlw ZSAoY29uZCAobXNhLWFsbC1maXhudW0gJ2ZpeG51bSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChtc2EtYWxsLXNpbmdsZS1mbG9hdCAnc2luZ2xlLWZsb2F0KQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgKG1zYS1hbGwtZG91YmxlLWZsb2F0ICdkb3VibGUtZmxvYXQpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAodCB0KSkpKQogICAgICAgIChkZWNsYXJlIChpZ25vcmFibGUg bXNhLXR5cGUpKQogICAgICAgIChldmFsCiAgICAgICAgICcoZGVmbWFjcm8ga2V5ICh4KQogICAg ICAgICAgICAoY29uZCAoa2V5CiAgICAgICAgICAgICAgICAgICAoY29uZCAoKHN5bWJvbHAga2V5 KSBgKHRoZSAsbXNhLXR5cGUgKCxrZXkgLHgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICh0 IGAodGhlICxtc2EtdHlwZSAoZnVuY2FsbCAsa2V5ICx4KSkpKSkKICAgICAgICAgICAgICAgICAg KHQgYCh0aGUgLG1zYS10eXBlICx4KSkpKSkKICAgICAgICAoZXZhbAogICAgICAgICAnKGRlZm1h Y3JvIG1zYS1lcXVhbCAoeCB5KQogICAgICAgICAgICAoY29uZCAobXNhLWFsbC1rZXlzLXJlYWwg YChlcWwgLHggLHkpKQogICAgICAgICAgICAgICAgICAodCBgKGVxdWFsICx4ICx5KSkpKSkKICAg ICAgICAoZXZhbAogICAgICAgICAnKGRlZm1hY3JvIG1zYS1wcmVkaWNhdGUgKHggeSkKICAgICAg ICAgICAgKGNvbmQgKChzeW1ib2xwIG1zYS1wcmVkaWNhdGUpIGAoLG1zYS1wcmVkaWNhdGUgLHgg LHkpKQogICAgICAgICAgICAgICAgICAodCBgKGZ1bmNhbGwgJyxtc2EtcHJlZGljYXRlICx4ICx5 KSkpKSkKICAgICAgICAoZXZhbAogICAgICAgICAnKGRlZnVuIG1zYS0xIChzdGFydCBlbmQgaW5w dXQgc2NyYXRjaCkKICAgICAgICAgICAgKGRlY2xhcmUgKGZpeG51bSBzdGFydCBlbmQpIChzaW1w bGUtdmVjdG9yIGlucHV0IHNjcmF0Y2gpKQogICAgICAgICAgICAobGV0KiAoKHN0YXJ0KzEgKHRo ZSBmaXhudW0gKDErIHN0YXJ0KSkpCiAgICAgICAgICAgICAgICAgICAoZW5kLXN0YXJ0ICh0aGUg Zml4bnVtICgtIGVuZCBzdGFydCkpKQogICAgICAgICAgICAgICAgICAgKG1pZCAodGhlIGZpeG51 bQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgrIHN0YXJ0ICh0aGUgZml4bnVtCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvb3IgZW5kLXN0YXJ0IDIp KSkpKSkKICAgICAgICAgICAgICAoZGVjbGFyZSAoZml4bnVtIHN0YXJ0KzEgZW5kLXN0YXJ0IG1p ZCkpCiAgICAgICAgICAgICAgKGNvbmQKICAgICAgICAgICAgICAgKChvciAoPSBzdGFydCBlbmQp ICg9IHN0YXJ0KzEgZW5kKSkKICAgICAgICAgICAgICAgIChyZXR1cm4tZnJvbSBtc2EtMSBuaWwp KQogICAgICAgICAgICAgICAoKD0gZW5kLXN0YXJ0IDIpCiAgICAgICAgICAgICAgICAobGV0ICgo YXMtc3RhcnQgKHN2cmVmIGlucHV0IHN0YXJ0KSkKICAgICAgICAgICAgICAgICAgICAgIChhcy1z dGFydCsxIChzdnJlZiBpbnB1dCBzdGFydCsxKSkpCiAgICAgICAgICAgICAgICAgIChjb25kICgo bXNhLXByZWRpY2F0ZSAoa2V5IGFzLXN0YXJ0KzEpIChrZXkgYXMtc3RhcnQpKQogICAgICAgICAg ICAgICAgICAgICAgICAgKHNldGYgKHN2cmVmIGlucHV0IHN0YXJ0KSBhcy1zdGFydCsxKQogICAg ICAgICAgICAgICAgICAgICAgICAgKHNldGYgKHN2cmVmIGlucHV0IHN0YXJ0KzEpIGFzLXN0YXJ0 KSkpCiAgICAgICAgICAgICAgICAgIChyZXR1cm4tZnJvbSBtc2EtMSBuaWwpKSkKICAgICAgICAg ICAgICAgKHQKICAgICAgICAgICAgICAgIChsZXQgKChrMSAoa2V5IChhcmVmIGlucHV0IHN0YXJ0 KSkpCiAgICAgICAgICAgICAgICAgICAgICAoazIgKGtleSAoYXJlZiBpbnB1dCAodGhlIGZpeG51 bSAoMSsgc3RhcnQpKSkpKSkKICAgICAgICAgICAgICAgICAgKGNvbmQgKChsb29wIGZvciBpIGZp eG51bSBmcm9tIHN0YXJ0IHRvICh0aGUgZml4bnVtICgtIG1pZCAyKSkgYWx3YXlzCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgoYW5zIChvciAobXNhLWVxdWFsIGsxIGsyKSAo bXNhLXByZWRpY2F0ZSBrMSBrMikpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHNldHEgazEgazIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIGsyIChr ZXkgKGFyZWYgaW5wdXQgKHRoZSBmaXhudW0gKCsgaSAyKSkpKSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYW5zKSkKICAgICAgICAgICAgICAgICAgICAgICAgIDs7IGlmIHRoZSBm aXJzdCBoYWxmIGlzIGFscmVhZHkgc29ydGVkLCB3ZSBkbyBub3QgbmVlZCB0byBzb3J0IGl0Lgog ICAgICAgICAgICAgICAgICAgICAgICAgKG1zYS0xIG1pZCBlbmQgaW5wdXQgc2NyYXRjaCkpCiAg ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA7OyBUdXJuIG9u IGh5cGVydGhyZWFkaW5nIG9uIGEgQ2hyb21lYm9vayBieSB2aXNpdGluZwogICAgICAgICAgICAg ICAgICAgICAgICA7OyBpbiBDaHJvbWUgYnJvd3NlcjoKCiAgICAgICAgICAgICAgICAgICAgICAg IDs7IGNocm9tZTovL2ZsYWdzI3NjaGVkdWxlci1jb25maWd1cmF0aW9uCgogICAgICAgICAgICAg ICAgICAgICAgICA7OyBhbmQgdGhlbiB2aXNpdGluZzoKCiAgICAgICAgICAgICAgICAgICAgICAg IDs7IFNjaGVkdWxlciBDb25maWd1cmF0aW9uLgoKICAgICAgICAgICAgICAgICAgICAgICAgOzsg VGhlIGNvc3Qgb2YgdGhlIG1ha2UtYXJyYXkgYW5kIHN1YnNlcSBhcmUgcGVyaGFwcyB0b28gaGln aC4KCiAgICAgICAgICAgICAgICAgICAgICAgICMrbXNhLXRocmVhZHMKICAgICAgICAgICAgICAg ICAgICAgICAgKChhbmQgKDwgZW5kLXN0YXJ0ICMuKGV4cHQgMTAgNikpICN8ICg8IChsb2FkLWF2 ZXJhZ2UpIDUpfCMpCiAgICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgodGhyZWFkCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNiLXRocmVhZDptYWtlLXRocmVhZAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChpbnB1dCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoZGVjbGFyZSAoc2ltcGxlLXZlY3RvciBpbnB1dCkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxldCAoKHNjcmF0Y2ggKG1ha2UtYXJyYXkg KGxlbmd0aCBpbnB1dCkpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChk ZWNsYXJlIChzaW1wbGUtdmVjdG9yIHNjcmF0Y2gpKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHNiLXRocmVhZDpyZXR1cm4tZnJvbS10aHJlYWQKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobXNhLTEgMCAobGVuZ3RoIGlucHV0KSBpbnB1dCBzY3Jh dGNoKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YXJndW1lbnRzIChsaXN0 IChzdWJzZXEgaW5wdXQgc3RhcnQgbWlkKSkpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg KG1zYS0xIG1pZCBlbmQgaW5wdXQgc2NyYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxldCAoKG91dHB1dCAoc2ItdGhyZWFkOmpvaW4tdGhyZWFkIHRocmVhZCkpKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChkZWNsYXJlIChzaW1wbGUtdmVjdG9yIG91dHB1dCkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxvb3AgZm9yIGkgZml4bnVtIGZyb20gc3RhcnQgYmVs b3cgbWlkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgIGogZml4bnVtIGJl bG93IChsZW5ndGggb3V0cHV0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRv CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNldGYgKHN2cmVmIGlucHV0IGkp IChzdnJlZiBvdXRwdXQgaikpKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAodCA7OyBTaW1w bHkgY2FsbCBtc2EtMSBvbiBib3RoIGhhbHZlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICht c2EtMSBzdGFydCBtaWQgaW5wdXQgc2NyYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAgICht c2EtMSBtaWQgZW5kIGlucHV0IHNjcmF0Y2gpKSkpKSkKICAgICAgICAgICAgICAgICAgOzsgbWVy Z2UuCiAgICAgICAgICAgICAgICAgIChsZXQgKChpMCBzdGFydCkgKGkxIG1pZCkgKGVuZDAgbWlk KSAoZW5kMSBlbmQpKQogICAgICAgICAgICAgICAgICAgIChkZWNsYXJlIChmaXhudW0gaTAgaTEg ZW5kMCBlbmQxKSkKICAgICAgICAgICAgICAgICAgICAobG9vcCBmb3Igc2kgZml4bnVtIGJlbG93 IGVuZC1zdGFydCBkbwogICAgICAgICAgICAgICAgICAgICAgICAgIChjb25kICgoPSBpMCBlbmQw KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0ZiAoc3ZyZWYgc2NyYXRjaCBz aSkgKHN2cmVmIGlucHV0IGkxKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlu Y2YgaTEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoPSBpMSBlbmQxKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0ZiAoc3ZyZWYgc2NyYXRjaCBzaSkgKHN2 cmVmIGlucHV0IGkwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluY2YgaTAp KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0IChsZXQqICgoeDAgKHN2cmVmIGlu cHV0IGkwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHgxIChz dnJlZiBpbnB1dCBpMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChrMCAoa2V5IHgwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGsxIChrZXkgeDEpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25k ICgob3IgKG1zYS1lcXVhbCBrMCBrMSkgKG1zYS1wcmVkaWNhdGUgazAgazEpKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRmIChzdnJlZiBzY3JhdGNoIHNp KSB4MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5jZiBp MCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodCAoc2V0ZiAo c3ZyZWYgc2NyYXRjaCBzaSkgeDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoaW5jZiBpMSkpKSkpKSkKCiAgICAgICAgICAgICAgICAgICAgOzsgIE5vdyBt b3ZlIHdoYXQgaXMgaW4gc2NyYXRjaCBiYWNrIHRvIGlucHV0LgoKICAgICAgICAgICAgICAgICAg ICAobG9vcCBmb3IgaSBmaXhudW0gYmVsb3cgZW5kLXN0YXJ0CiAgICAgICAgICAgICAgICAgICAg ICAgICAgYXMgIGogZml4bnVtIGZyb20gc3RhcnQgZG8KICAgICAgICAgICAgICAgICAgICAgICAg ICAoc2V0ZiAoc3ZyZWYgaW5wdXQgaikgKHN2cmVmIHNjcmF0Y2ggaSkpKSkpCiAgICAgICAgICAg IGlucHV0KSkKCiAgICAgICAgOzsgQ29tcGlsZSB0aGUgdGhyZWUgZGVmbWFjcm9zIGFuZCBkZWZ1 bnMgaWYgbmVjZXNzYXJ5LgoKICAgICAgICAobG9vcCBmb3Igc3ltIGluICcoa2V5IG1zYS1wcmVk aWNhdGUgbXNhLTEpIGRvCiAgICAgICAgICAgICAgKGNvbmQgKChjb25zcCAoc3ltYm9sLWZ1bmN0 aW9uIHN5bSkpIChjb21waWxlIHN5bSkpKSkKCiAgICAgICAgOzsgV2UgY2FsbCBldmFsIHRvIGJl IHN1cmUgdG8gdXNlIHRoZSByZWNlbnRseSBkZWZpbmVkIHZlcnNpb24gb2YKICAgICAgICA7OyBt c2EtMS4KCiAgICAgICAgKGV2YWwgYChtc2EtMSAwICxsZW4gbXNhLWlucHV0IG1zYS1zY3JhdGNo KSkKCiAgICAgICAgOzsgTWFpbmx5IGFzIGEgY291cnRlc3ksIHdlIHplcm8tb3V0IG1zYS1zY3Jh dGNoIHRvIGZyZWUgdXAgc3R1ZmYgZm9yCiAgICAgICAgOzsgZ2MuCiAgICAgICAgCiAgICAgICAg KGxvb3AgZm9yIGkgZml4bnVtIGJlbG93IGxlbiBkbyAoc2V0ZiAoc3ZyZWYgbXNhLXNjcmF0Y2gg aSkgMCkpCgogICAgICAgIDs7IEFmdGVyIHRoZSBzb3J0aW5nIGlzIGRvbmUsIHdlIGZpbmlzaCB1 cCBpZiB0aGUgaW5wdXQgd2FzIG5vdCBhCiAgICAgICAgOzsgc2ltcGxlIHZlY3Rvci4KCiAgICAg ICAgKGNvbmQgKCh0eXBlcCBvcmlnLWFyICdzaW1wbGUtdmVjdG9yKSkKICAgICAgICAgICAgICAo KGFycmF5cCBvcmlnLWFyKQogICAgICAgICAgICAgICAobG9vcCBmb3IgaSBmaXhudW0gYmVsb3cg bGVuIGRvCiAgICAgICAgICAgICAgICAgICAgIChzZXRmIChhcmVmIG9yaWctYXIgaSkgKHN2cmVm IG1zYS1pbnB1dCBpKSkpKQogICAgICAgICAgICAgICh0IChsb29wIGZvciB0YWlsIG9uIG9yaWct YXIgYXMgaSBmaXhudW0gYmVsb3cgbGVuIGRvCiAgICAgICAgICAgICAgICAgICAgICAgKHNldGYg KGNhciB0YWlsKSAoc3ZyZWYgbXNhLWlucHV0IGkpKSkpKQogICAgICAgIChzZXRxIG1zYS1pbnB1 dCAobWFrZS1hcnJheSAxKSkKICAgICAgICBhcikpKSkKCjs7OyBUaGUgcmVtYWluZGVyIG9mIHRo aXMgZmlsZSBjb25jZXJucyBtc2EgdGVzdGluZy4KCihkZWZwYXJhbWV0ZXIgdGVzdC1tc2EtYXIx IChtYWtlLWFycmF5IDEpKQoKKGRlZnBhcmFtZXRlciB0ZXN0LW1zYS1hcjIgKG1ha2UtYXJyYXkg MSkpCgooZGVmdW4gbWFrZS0wIChuKQogIChkZWNsYXJlIChmaXhudW0gbikpCiAgKGxldCAoKGEg KG1ha2UtYXJyYXkgbikpKQogICAgKGRlY2xhcmUgKHR5cGUgKGFycmF5IHQgKCopKSBhKSkKICAg IChsb29wIGZvciBpIGZpeG51bSBiZWxvdyBuIGRvCiAgICAgICAgICAoc2V0ZiAoYXJlZiBhIGkp IChjb25zIDAgaSkpKQogICAgYSkpCgooZGVmdW4gbWFrZS1hc2NlbmRpbmcgKG4pCiAgKGRlY2xh cmUgKGZpeG51bSBuKSkKICAobGV0ICgoYSAobWFrZS1hcnJheSBuKSkpCiAgICAoZGVjbGFyZSAo dHlwZSAoYXJyYXkgdCAoKikpIGEpKQogICAgKGxvb3AgZm9yIGkgZml4bnVtIGJlbG93IG4gZG8K ICAgICAgICAgIChzZXRmIChhcmVmIGEgaSkgKGNvbnMgaSBpKSkpCiAgICBhKSkKCihkZWZ1biBt YWtlLXJhbmRvbS1hcnJheS1maXhlZCAobikKICAoZGVjbGFyZSAoZml4bnVtIG4pKQogIChsZXQg KChhIChtYWtlLWFycmF5IG4pKSkKICAgIChkZWNsYXJlICh0eXBlIChhcnJheSB0ICgqKSkgYSkp CiAgICAobG9vcCBmb3IgaSBmaXhudW0gYmVsb3cgbiBkbwogICAgICAgICAgKHNldGYgKGFyZWYg YSBpKSAoY29ucyAocmFuZG9tIG1vc3QtcG9zaXRpdmUtZml4bnVtKSBpKSkpCiAgICBhKSkKCihk ZWZ1biBtYWtlLXJhbmRvbS1hcnJheS1zaW5nbGUtZmxvYXQgKG4pCiAgKGRlY2xhcmUgKGZpeG51 bSBuKSkKICAobGV0ICgoYSAobWFrZS1hcnJheSBuKSkpCiAgICAoZGVjbGFyZSAodHlwZSAoYXJy YXkgdCAoKikpIGEpKQogICAgKGxvb3AgZm9yIGkgZml4bnVtIGJlbG93IG4gZG8KICAgICAgICAg IChzZXRmIChhcmVmIGEgaSkgKGNvbnMgKGZsb2F0IChyYW5kb20gbW9zdC1wb3NpdGl2ZS1maXhu dW0pIDAuMHMwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKSkpCiAgICBhKSkK CihkZWZ1biBtYWtlLXJhbmRvbS1hcnJheS1kb3VibGUtZmxvYXQgKG4pCiAgKGRlY2xhcmUgKGZp eG51bSBuKSkKICAobGV0ICgoYSAobWFrZS1hcnJheSBuKSkpCiAgICAoZGVjbGFyZSAodHlwZSAo YXJyYXkgdCAoKikpIGEpKQogICAgKGxvb3AgZm9yIGkgZml4bnVtIGJlbG93IG4gZG8KICAgICAg ICAgIChzZXRmIChhcmVmIGEgaSkgKGNvbnMgKGZsb2F0IChyYW5kb20gbW9zdC1wb3NpdGl2ZS1m aXhudW0pIDAuMGQwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKSkpCiAgICBh KSkKCihkZWZ1biByYW5kb20tbWl4ZWQgKCkKICAobGV0KiAoKGMgKHJhbmRvbSA1KSkKICAgICAg ICAgKHggKCogMiBtb3N0LXBvc2l0aXZlLWZpeG51bSkpCiAgICAgICAgIChmaXhudW0gKHJhbmRv bSBtb3N0LXBvc2l0aXZlLWZpeG51bSkpCiAgICAgICAgIChuIChyYW5kb20geCkpCiAgICAgICAg IChkIChyYW5kb20geCkpKQogICAgKGNvbmQgKCg9IGQgMCkgKHNldHEgZCAxKSkpCiAgICAoY29u ZCAoKD0gYyAwKSBmaXhudW0pCiAgICAgICAgICAoKD0gYyAxKSBuKQogICAgICAgICAgKCg9IGMg MikgKC8gbiBkKSkKICAgICAgICAgICgoPSBjIDMpIChmbG9hdCAoLyBuIGQpIDAuMHMwKSkKICAg ICAgICAgICgoPSBjIDQpIChmbG9hdCAoLyBuIGQpIDAuMGQwKSkpKSkKCihkZWZ1biBtYWtlLXJh bmRvbS1hcnJheS1taXhlZCAobikKICAoZGVjbGFyZSAoZml4bnVtIG4pKQogIChsZXQgKChhICht YWtlLWFycmF5IG4pKSkKICAgIChkZWNsYXJlICh0eXBlIChhcnJheSB0ICgqKSkgYSkpCiAgICAo bG9vcCBmb3IgaSBmaXhudW0gYmVsb3cgbiBkbwogICAgICAgICAgKHNldGYgKGFyZWYgYSBpKSAo Y29ucyAocmFuZG9tLW1peGVkKSBpKSkpCiAgICBhKSkKCihkZWZwYXJhbWV0ZXIgbXNhLXJlYWwt dGltZS11c2VkIDApCgooZGVmcGFyYW1ldGVyIHN0YWJsZS1zb3J0LXJlYWwtdGltZS11c2VkIDAp CgooZGVmbWFjcm8gdGltZS1tc2EgKGZvcm0pCiAgYChsZXQgKCh0aW1lIChnZXQtaW50ZXJuYWwt cmVhbC10aW1lKSkpCiAgICAgKG91ci10aW1lICxmb3JtKQogICAgIChpbmNmIG1zYS1yZWFsLXRp bWUtdXNlZCAoLSAoZ2V0LWludGVybmFsLXJlYWwtdGltZSkgdGltZSkpKSkKCihkZWZtYWNybyB0 aW1lLXN0YWJsZS1zb3J0IChmb3JtKQogIGAobGV0ICgodGltZSAoZ2V0LWludGVybmFsLXJlYWwt dGltZSkpKQogICAgIChvdXItdGltZSAsZm9ybSkKICAgICAoaW5jZiBzdGFibGUtc29ydC1yZWFs LXRpbWUtdXNlZCAoLSAoZ2V0LWludGVybmFsLXJlYWwtdGltZSkgdGltZSkpKSkKCihkZWZ1biB0 ZXN0LW1zYS0wIChuKQogICIodGVzdC1tc2EgbikgY3JlYXRlcyBhbiBhcnJheSBhcjEgb2YgbiBy YW5kb20gcmF0aW9uYWxzIGFuZCBmbG9hdHMsCiAgIGNyZWF0ZXMgYSBjb3B5IGFyMiBvZiBhcjEs IGNhbGxzIChtc2EgYXIxICc8IDprZXkgJ2NhciksCiAgIGNhbGxzIChzdGFibGUtc29ydCBhcjIg JzwgOmtleSAnY2FyKSwgYW5kIHJldHVybnMgKGVxdWFscCBhcjEgYXIyKS4iCiAgKGRlY2xhcmUg KGZpeG51bSBuKSkKICAoZm9ybWF0IHQgIn4lUnVubmluZyAodGVzdC1tc2EtMCB+OmQpLiIgbikK ICAoc2V0cSB0ZXN0LW1zYS1hcjEgKG1ha2UtMCBuKSkKICAoc2V0cSB0ZXN0LW1zYS1hcjIgKGNv cHktc2VxIHRlc3QtbXNhLWFyMSkpCiAgKGdjIDpmdWxsIHQpCiAgKHRpbWUtbXNhIChtc2EgdGVz dC1tc2EtYXIxICc8IDprZXkgJ2NhcikpCiAgKGdjIDpmdWxsIHQpCiAgKHRpbWUtc3RhYmxlLXNv cnQgKHN0YWJsZS1zb3J0IHRlc3QtbXNhLWFyMiAnPCA6a2V5ICdjYXIpKQogIChlcXVhbHAgdGVz dC1tc2EtYXIxIHRlc3QtbXNhLWFyMikpCgooZGVmdW4gdGVzdC1tc2EtYXNjZW5kaW5nIChuKQog ICIodGVzdC1tc2EgbikgY3JlYXRlcyBhbiBhcnJheSBhcjEgb2YgbiByYW5kb20gcmF0aW9uYWxz IGFuZCBmbG9hdHMsCiAgIGNyZWF0ZXMgYSBjb3B5IGFyMiBvZiBhcjEsIGNhbGxzIChtc2EgYXIx ICc8IDprZXkgJ2NhciksCiAgIGNhbGxzIChzdGFibGUtc29ydCBhcjIgJzwgOmtleSAnY2FyKSwg YW5kIHJldHVybnMgKGVxdWFscCBhcjEgYXIyKS4iCiAgKGRlY2xhcmUgKGZpeG51bSBuKSkKICAo Zm9ybWF0IHQgIn4lUnVubmluZyAodGVzdC1tc2EtYXNjZW5kaW5nIH46ZCkuIiBuKQogIChzZXRx IHRlc3QtbXNhLWFyMSAobWFrZS1hc2NlbmRpbmcgbikpCiAgKHNldHEgdGVzdC1tc2EtYXIyIChj b3B5LXNlcSB0ZXN0LW1zYS1hcjEpKQogIChnYyA6ZnVsbCB0KQogICh0aW1lLW1zYSAobXNhIHRl c3QtbXNhLWFyMSAnPCA6a2V5ICdjYXIpKQogIChnYyA6ZnVsbCB0KQogICh0aW1lLXN0YWJsZS1z b3J0IChzdGFibGUtc29ydCB0ZXN0LW1zYS1hcjIgJzwgOmtleSAnY2FyKSkKICAoZXF1YWxwIHRl c3QtbXNhLWFyMSB0ZXN0LW1zYS1hcjIpKQoKKGRlZnVuIHRlc3QtbXNhLW1peGVkIChuKQogICIo dGVzdC1tc2EgbikgY3JlYXRlcyBhbiBhcnJheSBhcjEgb2YgbiByYW5kb20gcmF0aW9uYWxzIGFu ZCBmbG9hdHMsCiAgIGNyZWF0ZXMgYSBjb3B5IGFyMiBvZiBhcjEsIGNhbGxzIChtc2EgYXIxICc8 IDprZXkgJ2NhciksCiAgIGNhbGxzIChzdGFibGUtc29ydCBhcjIgJzwgOmtleSAnY2FyKSwgYW5k IHJldHVybnMgKGVxdWFscCBhcjEgYXIyKS4iCiAgKGRlY2xhcmUgKGZpeG51bSBuKSkKICAoZm9y bWF0IHQgIn4lUnVubmluZyAodGVzdC1tc2EtbWl4ZWQgfjpkKS4iIG4pCiAgKHNldHEgdGVzdC1t c2EtYXIxIChtYWtlLXJhbmRvbS1hcnJheS1taXhlZCBuKSkKICAoc2V0cSB0ZXN0LW1zYS1hcjIg KGNvcHktc2VxIHRlc3QtbXNhLWFyMSkpCiAgKGdjIDpmdWxsIHQpCiAgKHRpbWUtbXNhIChtc2Eg dGVzdC1tc2EtYXIxICc8IDprZXkgJ2NhcikpCiAgKGdjIDpmdWxsIHQpCiAgKHRpbWUtc3RhYmxl LXNvcnQgKHN0YWJsZS1zb3J0IHRlc3QtbXNhLWFyMiAnPCA6a2V5ICdjYXIpKQogIChlcXVhbHAg dGVzdC1tc2EtYXIxIHRlc3QtbXNhLWFyMikpCgooZGVmdW4gdGVzdC1tc2EtZml4ZWQgKG4pCiAg Iih0ZXN0LW1zYSBuKSBjcmVhdGVzIGFuIGFycmF5IGFyMSBvZiBuIHJhbmRvbSBmaXhudW1zLAog ICBjcmVhdGVzIGEgY29weSBhcjIgb2YgYXIxLCBjYWxscyAobXNhIGFyMSAnPCA6a2V5ICdjYXIp LAogICBjYWxscyAoc3RhYmxlLXNvcnQgYXIyICc8IDprZXkgJ2NhciksIGFuZCByZXR1cm5zIChl cXVhbHAgYXIxIGFyMikuIgogIChkZWNsYXJlIChmaXhudW0gbikpCiAgKGZvcm1hdCB0ICJ+JVJ1 bm5pbmcgKHRlc3QtbXNhLWZpeGVkIH46ZCkuIiBuKQogIChzZXRxIHRlc3QtbXNhLWFyMSAobWFr ZS1yYW5kb20tYXJyYXktZml4ZWQgbikpCiAgKHNldHEgdGVzdC1tc2EtYXIyIChjb3B5LXNlcSB0 ZXN0LW1zYS1hcjEpKQogIChnYyA6ZnVsbCB0KQogICh0aW1lLW1zYSAobXNhIHRlc3QtbXNhLWFy MSAnPCA6a2V5ICdjYXIpKQogIChnYyA6ZnVsbCB0KQogICh0aW1lLXN0YWJsZS1zb3J0IChzdGFi bGUtc29ydCB0ZXN0LW1zYS1hcjIgJzwgOmtleSAnY2FyKSkKICAoZXF1YWxwIHRlc3QtbXNhLWFy MSB0ZXN0LW1zYS1hcjIpKQoKKGRlZnVuIHRlc3QtbXNhLXNpbmdsZS1mbG9hdCAobikKICAiKHRl c3QtbXNhIG4pIGNyZWF0ZXMgYW4gYXJyYXkgYXIxIG9mIG4gcmFuZG9tIGZsb2F0cywgY3JlYXRl cyBhIGNvcHkgYXIyCiAgIG9mIGFyMSwgY2FsbHMgKG1zYSBhcjEgJzwgOmtleSAnY2FyKSwgY2Fs bHMgKHN0YWJsZS1zb3J0IGFyMiAnPCA6a2V5CiAgICdjYXIpLCBhbmQgcmV0dXJucyAoZXF1YWxw IGFyMSBhcjIpLiIKICAoZGVjbGFyZSAoZml4bnVtIG4pKQogIChmb3JtYXQgdCAifiVSdW5uaW5n ICh0ZXN0LW1zYS1zaW5nbGUtZmxvYXQgfjpkKS4iIG4pCiAgKHNldHEgdGVzdC1tc2EtYXIxICht YWtlLXJhbmRvbS1hcnJheS1zaW5nbGUtZmxvYXQgbikpCiAgKHNldHEgdGVzdC1tc2EtYXIyIChj b3B5LXNlcSB0ZXN0LW1zYS1hcjEpKQogIChnYyA6ZnVsbCB0KQogICh0aW1lLW1zYSAobXNhIHRl c3QtbXNhLWFyMSAnPCA6a2V5ICdjYXIpKQogIChnYyA6ZnVsbCB0KQogICh0aW1lLXN0YWJsZS1z b3J0IChzdGFibGUtc29ydCB0ZXN0LW1zYS1hcjIgJzwgOmtleSAnY2FyKSkKICAoZXF1YWxwIHRl c3QtbXNhLWFyMSB0ZXN0LW1zYS1hcjIpKQoKKGRlZnVuIHRlc3QtbXNhLWRvdWJsZS1mbG9hdCAo bikKICAiKHRlc3QtbXNhIG4pIGNyZWF0ZXMgYW4gYXJyYXkgYXIxIG9mIG4gcmFuZG9tIGZsb2F0 cywgY3JlYXRlcyBhIGNvcHkgYXIyCiAgIG9mIGFyMSwgY2FsbHMgKG1zYSBhcjEgJzwgOmtleSAn Y2FyKSwgY2FsbHMgKHN0YWJsZS1zb3J0IGFyMiAnPCA6a2V5CiAgICdjYXIpLCBhbmQgcmV0dXJu cyAoZXF1YWxwIGFyMSBhcjIpLiIKICAoZGVjbGFyZSAoZml4bnVtIG4pKQogIChmb3JtYXQgdCAi fiVSdW5uaW5nICh0ZXN0LW1zYS1kb3VibGUtZmxvYXQgfjpkIDprZXkgJ2NhcikuIiBuKQogIChz ZXRxIHRlc3QtbXNhLWFyMSAobWFrZS1yYW5kb20tYXJyYXktZG91YmxlLWZsb2F0IG4pKQogIChz ZXRxIHRlc3QtbXNhLWFyMiAoY29weS1zZXEgdGVzdC1tc2EtYXIxKSkKICAjK3NiY2wgKGdjIDpm dWxsIHQpCiAgKHRpbWUtbXNhIChtc2EgdGVzdC1tc2EtYXIxICc8IDprZXkgJ2NhcikpCiAgIytz YmNsIChnYyA6ZnVsbCB0KQogICh0aW1lLXN0YWJsZS1zb3J0IChzdGFibGUtc29ydCB0ZXN0LW1z YS1hcjIgJzwgOmtleSAnY2FyKSkKICAoZXF1YWxwIHRlc3QtbXNhLWFyMSB0ZXN0LW1zYS1hcjIp KQoKKGRlZnVuIGRpYWdub3NlLWZhaWx1cmUgKCkKICAoY29uZCAoKG5vdCAoZXF1YWwgKGxlbmd0 aCB0ZXN0LW1zYS1hcjEpIChsZW5ndGggdGVzdC1tc2EtYXIyKSkpCiAgICAgICAgIChlcnJvciAi bm90IHNhbWUgbGVuZ3RoIikpKQogIChsb29wIGZvciBpIGZpeG51bSBiZWxvdyAobGVuZ3RoIHRl c3QtbXNhLWFyMSkgYXMgaiBmaXhudW0gZnJvbSAwIGRvCiAgICAgICAgKGNvbmQgKChub3QgKGVx dWFsIChhcmVmIHRlc3QtbXNhLWFyMSBpKSAoYXJlZiB0ZXN0LW1zYS1hcjIgaikpKQogICAgICAg ICAgICAgICAoZXJyb3IgImJhZCBhdCB+cyBhbmQgfnMgd2l0aCBlbGVtZW50IH5zIHZzLiB+cy4i CiAgICAgICAgICAgICAgICAgICAgICBpIGogKGFyZWYgdGVzdC1tc2EtYXIxIGkpIChhcmVmIHRl c3QtbXNhLWFyMiBqKSkpKSkpCgooZGVmdW4gbG9uZy10ZXN0LW1zYSAoKQogIChsb29wIGZvciBp IGZyb20gMTAgdG8gMjEgZG8KICAgICAgICAobGV0ICgobiAoKiBpIChleHB0IDEwIDYpKSkpCiAg ICAgICAgICAoY29uZCAoKG5vdCAodGVzdC1tc2EtMCBuKSkKICAgICAgICAgICAgICAgICAoZGlh Z25vc2UtZmFpbHVyZSkKICAgICAgICAgICAgICAgICAoZXJyb3IgImxvbmctdGVzdCBmYWlsZWQg MCBhdCB+OmQuIiBuKSkpCiAgICAgICAgICAoY29uZCAoKG5vdCAodGVzdC1tc2EtYXNjZW5kaW5n IG4pKQogICAgICAgICAgICAgICAgIChkaWFnbm9zZS1mYWlsdXJlKQogICAgICAgICAgICAgICAg IChlcnJvciAibG9uZy10ZXN0IGZhaWxlZCAwIGF0IH46ZC4iIG4pKSkKICAgICAgICAgIChjb25k ICgobm90ICh0ZXN0LW1zYS1taXhlZCBuKSkKICAgICAgICAgICAgICAgICAoZGlhZ25vc2UtZmFp bHVyZSkKICAgICAgICAgICAgICAgICAoZXJyb3IgImxvbmctdGVzdCBmYWlsZWQgbWl4ZWQgYXQg fjpkLiIgbikpKQogICAgICAgICAgKGNvbmQgKChub3QgKHRlc3QtbXNhLWZpeGVkIG4pKQogICAg ICAgICAgICAgICAgIChkaWFnbm9zZS1mYWlsdXJlKQogICAgICAgICAgICAgICAgIChlcnJvciAi bG9uZy10ZXN0IGZhaWxlZCBmaXhlZCBhdCB+OmQuIiBuKSkpCiAgICAgICAgICAoY29uZCAoKG5v dCAodGVzdC1tc2Etc2luZ2xlLWZsb2F0IG4pKQogICAgICAgICAgICAgICAgIChkaWFnbm9zZS1m YWlsdXJlKQogICAgICAgICAgICAgICAgIChlcnJvciAibG9uZy10ZXN0IGZhaWxlZCBmbG9hdCBh dCB+OmQuIiBuKSkpCiAgICAgICAgICAoY29uZCAoKG5vdCAodGVzdC1tc2EtZG91YmxlLWZsb2F0 IG4pKQogICAgICAgICAgICAgICAgIChkaWFnbm9zZS1mYWlsdXJlKQogICAgICAgICAgICAgICAg IChlcnJvciAibG9uZy10ZXN0IGZhaWxlZCBmbG9hdCBhdCB+OmQuIiBuKSkpCiAgICAgICAgICAo Y29uZCAoKG5vdCAoZXF1YWwgMCBtc2EtcmVhbC10aW1lLXVzZWQpKQogICAgICAgICAgICAgICAg IChmb3JtYXQgdCAifiVsb25nLXRlc3QtbXNhOiByYXRpbyBvZiByZWFsIHN0YWJsZS1zb3J0L21z YSB0aW1lczogfnN+JSIKICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCAoLyAgc3RhYmxl LXNvcnQtcmVhbC10aW1lLXVzZWQgIG1zYS1yZWFsLXRpbWUtdXNlZCkpKSkpKSkpCgooZGVmdW4g bG9vcC1sb25nLXRlc3QtbXNhICgpCiAgKGxvb3AgKGxvbmctdGVzdC1tc2EpKSkKCiMrc2JjbCAo Z2MgOmZ1bGwgdCkKCihmb3JtYXQgdCAifiVOb3RlOiBGaW5pc2hlZCBsb2FkaW5nIG4zbXMubGlz cC5+JSIpCg== --0000000000003785480611820e17--