From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: =?iso-8859-1?q?S=E9bastien_Vauban?= Newsgroups: gmane.emacs.devel Subject: Re: Color-theme problems in Emacs 22+ (Ubuntu, Windows) Date: 30 Jan 2007 13:21:27 +0100 Organization: Sebastien Vauban Message-ID: <87ps8wvh6g.fsf_-_@missioncriticalit.com> References: <873b63os0c.fsf@stupidchicken.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: sea.gmane.org 1170187168 6554 80.91.229.12 (30 Jan 2007 19:59:28 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Tue, 30 Jan 2007 19:59:28 +0000 (UTC) Cc: rms@gnu.org, emacs-devel@gnu.org To: cyd@stupidchicken.com, Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Jan 30 20:59:27 2007 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1HBz5g-0001sn-Ew for ged-emacs-devel@m.gmane.org; Tue, 30 Jan 2007 20:59:26 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1HBz5c-00080l-LP for ged-emacs-devel@m.gmane.org; Tue, 30 Jan 2007 14:56:24 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1HBs0J-0004mL-Ub for emacs-devel@gnu.org; Tue, 30 Jan 2007 07:22:28 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1HBs0E-0004m1-Fm for emacs-devel@gnu.org; Tue, 30 Jan 2007 07:22:27 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1HBs0E-0004ly-6U for emacs-devel@gnu.org; Tue, 30 Jan 2007 07:22:22 -0500 Original-Received: from 81-188-7-133.sdsl.easynet.be ([81.188.7.133] helo=mail.missioncriticalit.com) by monty-python.gnu.org with esmtp (Exim 4.52) id 1HBrzv-0000eH-GS; Tue, 30 Jan 2007 07:22:09 -0500 Original-Received: from localhost (localhost [127.0.0.1]) by mail.missioncriticalit.com (Postfix) with ESMTP id 3A8389E01B; Tue, 30 Jan 2007 13:21:43 +0100 (CET) Original-Received: from mail.missioncriticalit.com ([127.0.0.1]) by localhost (escher [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 16181-05; Tue, 30 Jan 2007 13:21:30 +0100 (CET) Original-Received: from mundaneum. (unknown [10.10.10.1]) by mail.missioncriticalit.com (Postfix) with ESMTP id 3CC6D9E004; Tue, 30 Jan 2007 13:21:28 +0100 (CET) X-Www-site: Under construction... In-Reply-To: <873b63os0c.fsf@stupidchicken.com> Original-Lines: 140 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.4 X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at missioncriticalit.com X-detected-kernel: Linux 2.4-2.6 X-Mailman-Approved-At: Tue, 30 Jan 2007 14:55:59 -0500 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:65649 Archived-At: --=-=-= Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Hello Chong, >> I just installed Ubuntu Edgy 6.10, and still experiences >> problems with `color-theme' (versions 6.5.4, 6.5.5 and >> 6.6.0) under Emacs Snapshot (GTK). >> >> I see some of my colors sometimes (for example, when >> editing my .emacs file), but it's never ever applied to >> my Group buffer. In other words, I cannot tell anymore >> which groups contain or not unread mails (as I expect >> them to become bold if they contain unread material). > > I can't reproduce this. I did the following: > > - downloaded the latest version of color-theme (color-theme-6.6.0.tar.gz) > - moved all the elisp files in the tarfile into ~/.emacs.d/lisp > (which is in my load-path) > - M-: (setq color-theme-libraries "~/.emacs.d/lisp") RET > - M-x load-file RET ~/color-theme-sva.el RET > (the color-theme file provided in the original bug report) > - M-x gnus RET > > The resulting group buffer is displayed in purple and black, with > groups containing unread messages in bold, as expected. It's weird you tell me you see it in purple. Following my color-theme, you should see `gnus-group-mail-3-*-face' in dark green. See http://www.mygooglest.com/sva/Emacs21.png. > This is on GNU Emacs 22.0.92.36 (i686-pc-linux-gnu, GTK+ > Version 2.8.20), on Ubuntu Dapper. To be sure to be better sync'ed with your configuration, I made another checkout of Emacs 22 a couple of days ago, and I rebuilt everything yesterday. The resulting version string is: This is GNU Emacs 22.0.93.1 (i686-pc-linux-gnu) of 2007-01-29 on mundaneum. > Please make sure you have color-theme.el installed correctly, and try > to simplify your color-theme file to the smallest possible testcase > that can produce this bug. I've done the following: o ultra-simplified my .emacs file - see attachment; o ultra-simplified my .gnus file - see attachment; o triple-checked that I'm loading the last version of color-theme - see the Messages buffers attached. What I did: o launched emacs21 with the simplified config file (this calls color-theme, and uses my own theme - see attachment); o launched gnus (the default one, here 5.9) with the simplified config file; o opened an article; o added a window with `M-x list-colors-display'. You see the resulting view in the screenshot to be found at: http://www.mygooglest.com/sva/Emacs21.png You can see that everything is pretty normal, with `GNU Emacs 21.4.1 (i486-pc-linux-gnu, X toolkit, Xaw3d scroll bars) of 2006-09-15 on rothera, modified by Debian'. Next steps: o launched the version of Emacs 22 that I built yesterday with the *same config file*; o launched gnus (the default one, here 5.11) with the *same* *config file*; o opened an article; o added a window with `M-x list-colors-display'. Now, while everything was the same from my point of view (my Emacs and Gnus config files, my color-theme) - with the exception of the version of Gnus [but, from older tests, I can say this is not the problem], you can see that the layout is very very different, on the following screenshot: http://www.mygooglest.com/sva/Emacs22.png You can notice that even the `list-colors-display' buffer is completely "black on white only" (with the exception of the tabulations that I always visualize in yellow, as asked in my .emacs file). Though, as I already said, I cannot say that nothing is applied from my color-theme. For example: o the subject title is well displayed in bold orange, but that's more or less the only thing... o the contents of my Emacs file is correctly displayed, with my favorite colors (but this is not shown here on the screenshot). To summarize, why I tend to say that there is a problem inside Emacs 22+, it's because the only real change is the version of Emacs. None of my config files are changing between the different tests. And, to remind you, I also have the exact same problems under Windows, with versions 22+. But I guess we tackle here a very complex interaction between many different components... Thank you for all the support you already have and will provide to me! Seb --=20 S=E9bastien Vauban --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=.emacs-sva Content-Transfer-Encoding: base64 Ozs7IC5lbWFjcyAtLS0gbXkgRW1hY3MgSW5pdCBGaWxlCgo7OyBDb3B5cmlnaHQgKEMpIDE5OTkt MjAwNiBGYWJyaWNlIE5pZXNzZW4KOzsgVGltZS1zdGFtcDogIlR1ZSAyMDA3LTAxLTMwIDExOjA5 IHN2YSBvbiBtdW5kYW5ldW0iCgo7OyBBdXRob3I6IEZhYnJpY2UgTmllc3NlbiA8Zm5pQG1pc3Np b25jcml0aWNhbGl0LmNvbT4KOzsgS2V5d29yZHM6IGVtYWNzLCBkb3RmaWxlLCBjb25maWcKCjs7 ICRSZXZpc2lvbjogNzQzICQKOzsgJERhdGU6IDIwMDctMDEtMjUgMTA6MTc6MDkgKzAxMDAgKFRo dSwgMjUgSmFuIDIwMDcpICQKCjs7Cjs7ICAgIF9fXyBfIF9fIF9fXyAgIF9fIF8gIF9fXyBfX18K OzsgICAvIF8gXCAnXyBgIF8gXCAvIF9gIHwvIF9fLyBfX3wKOzsgIHwgIF9fLyB8IHwgfCB8IHwg KF98IHwgKF9fXF9fIFwKOzsgKF8pX19ffF98IHxffCB8X3xcX18sX3xcX19ffF9fXy8KOzsKCjs7 IFRoaXMgZmlsZSBpcyBOT1QgcGFydCBvZiBHTlUgRW1hY3MuCgo7OyBUaGlzIGZpbGUgaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCjs7IG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCjs7IHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy IG9mCjs7IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgoKOzsgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZQo7OyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkCjs7IHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIKOzsgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KCjs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo7OyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBp ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCjs7IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5 IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAo7OyBNQSAwMjExMS0xMzA3LCBVU0Eu Cgo7OzsgQ29tbWVudGFyeToKCjs7ICBQcmUtUmVxdWlzaXRlcwo7Owo7OyAgICAgIFlvdSBzaG91 bGQgdXNlIHRoZSBgZm9sZGluZy5lbCcgcGFja2FnZSB0byBzZWUgdGhpcyBmaWxlIHByb3Blcmx5 Lgo7OyAgICAgIGBmb2xkaW5nLmVsJyBoaWRlcyBzZWN0aW9ucyBieSBmb2xkaW5nIHRoZW0gaW50 byBhIHNpbmdsZSBsaW5lLgo7Owo7OyAgU2VxdWVuY2Ugb2YgRmlsZXMgTG9hZGVkIGF0IEdOVSBF bWFjcyBTdGFydCBVcAo7Owo7OyAgICAgIDEuICBMaWJyYXJ5IGBzaXRlLXN0YXJ0LmVsJyAoc2l0 ZS1ydW4tZmlsZSkKOzsgICAgICAgICAgYE0tOiAoZmluZC1maWxlIChsb2NhdGUtbGlicmFyeSBz aXRlLXJ1bi1maWxlKSkgUkVUJwo7Owo7OyAgICAgIDIuICBGaWxlIGB+Ly5lbWFjcycgKHVzZXIt aW5pdC1maWxlKQo7Owo7OyAgICAgIDMuICBMaWJyYXJ5IGBkZWZhdWx0LmVsJyAoImRlZmF1bHQg aW5pdCBmaWxlIiBmb3IgbG9jYWwgc2l0ZQo7OyAgICAgICAgICBjdXN0b21pemF0aW9ucykKOzsK OzsgIEhlbHAKOzsKOzsgICAgICBGb3IgaGVscCBvbiBUaGUgRW1hY3MgRWRpdG9yLCBzZWU6Cjs7 ICAgICAgICAgIChpbmZvICIoZW1hY3MpIikKOzsgICAgICBQbGFjZSB0aGUgY3Vyc29yIHJpZ2h0 IGFmdGVyIGApJyBhbmQgcHJlc3MgYEMteCBDLWUnCjs7Cjs7ICBUT0RPCjs7Cjs7ICAgICAgbyAg IExvb2sgYXQgdGhlIGZvbGxvd2luZyBwYWNrYWdlcwo7OyAgICAgICAgICAqIHdoaWNoLmVsCjs7 ICAgICAgICAgICogbnQtYmFzaC5lbAo7OyAgICAgICAgICAqIGNnaS5lbAo7OyAgICAgICAgICAq IGh0dHBkLmVsIChydW4gRW1hY3MgYXMgYSBXZWIgc2VydmVyKQoKOzs7IENvZGU6Cgo7OyBFbWFj cyBpcyBsaWtlIGEgbGFzZXIgZ3VpZGVkIG1pc3NpbGUuIEl0IG9ubHkgaGFzIHRvIGJlIHNsaWdo dAo7OyBtaXMtY29uZmlndXJlZCB0byBydWluIHlvdXIgd2hvbGUgZGF5LiBbU2VhbiBNY0dyYXRo XQoKOzsgbW9kaWZ5IHRvIHRhc3RlIQoKKG1lc3NhZ2UgInt7eyAtLVsgTG9hZGluZyBteSBFbWFj cyBpbml0IGZpbGUgXS0tIikKCjs7IExlcyBncm9zIGJvc3NldXJzIHBy6WbpcmVyb250IHNhbnMg ZG91dGUgZOltYXJyZXIgRW1hY3MgZOhzIGxlIGTpYnV0IGRlCjs7IGxhIHNlc3Npb24gZGUgdHJh dmFpbCBzb3VzIFgxMSwgcGFyIGV4ZW1wbGUgZ3LiY2UgYXUgYH4vLnhpbml0cmMnIG91IGJpZW4K OzsgYXV4IGZvbmN0aW9ucyBkZSBtaXNlIGVuIHBsYWNlIGRlIGwnZW52aXJvbm5lbWVudCBvZmZl cnRlcyBwYXIgbGUKOzsgZ2VzdGlvbm5haXJlIGRlIGZlbup0cmVzLgoKCjs7e3t7IC0tWyBFbnZp cm9ubWVudCBkZXRlcm1pbmF0aW9uIF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KCjs7IE9TIHR5cGUgLS0gYXJlIHdlIHJ1bm5pbmcgTWljcm9zb2Z0IFdpbmRvd3M/Cihk ZWZ2YXIgcnVubmluZy1tcy13aW5kb3dzIChlcSBzeXN0ZW0tdHlwZSAnd2luZG93cy1udCkpCgo7 OyBFbWFjcyB0eXBlIC0tIGFyZSB3ZSBydW5uaW5nIFhFbWFjcyAob3IgR05VIEVtYWNzKT8KKGRl ZnZhciBydW5uaW5nLXhlbWFjcyAoc3RyaW5nLW1hdGNoICJYRW1hY3NcXHxMdWNpZCIgZW1hY3Mt dmVyc2lvbikpCgooaWYgcnVubmluZy14ZW1hY3MKICAgIDs7IGRvbid0IG9mZmVyIG1pZ3JhdGlv biBvZiB0aGUgaW5pdCBmaWxlCiAgICAoc2V0cSBsb2FkLWhvbWUtaW5pdC1maWxlIHQpKQoKOzt9 fX0KCgo7O3t7eyAtLVsgVmFyaWFibGVzIF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgo7OyBsaW1pdCBvbiBudW1iZXIgb2YgTGlzcCB2YXJp YWJsZSBiaW5kaW5ncyAmIHVud2luZC1wcm90ZWN0cwo7OyAoMzAgdGltZXMgaXRzIGRlZmF1bHQg dmFsdWUpCihzZXRxIG1heC1zcGVjcGRsLXNpemUgKCogMzAgMTAwMCkpCgo7OyBsaW1pdCBzZXJ2 aW5nIHRvIGNhdGNoIGluZmluaXRlIHJlY3Vyc2lvbnMgZm9yIHlvdSBiZWZvcmUgdGhleQo7OyBj YXVzZSBhY3R1YWwgc3RhY2sgb3ZlcmZsb3cgaW4gQywgd2hpY2ggd291bGQgYmUgZmF0YWwgZm9y IEVtYWNzCihzZXRxIG1heC1saXNwLWV2YWwtZGVwdGggKCogMTAwIDMwMCkpCgo7O319fQoKCjs7 e3t7IC0tWyBNYWNyb3MgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KCihkZWZtYWNybyBHTlVFbWFjcyAoJnJlc3QgYm9keSkKICAiRXhl Y3V0ZSBhbnkgbnVtYmVyIG9mIGZvcm1zIGlmIHJ1bm5pbmcgdW5kZXIgR05VIEVtYWNzLiIKICAo bGlzdCAnaWYgKG5vdCBydW5uaW5nLXhlbWFjcykgKGNvbnMgJ3Byb2duIGJvZHkpKSkKCihkZWZt YWNybyBYRW1hY3MgKCZyZXN0IGJvZHkpCiAgIkV4ZWN1dGUgYW55IG51bWJlciBvZiBmb3JtcyBp ZiBydW5uaW5nIHVuZGVyIFhFbWFjcy4iCiAgKGxpc3QgJ2lmIHJ1bm5pbmcteGVtYWNzIChjb25z ICdwcm9nbiBib2R5KSkpCgo7O319fQoKCjs7e3t7IC0tWyBMb2FkaW5nIExpYnJhcmllcyBvZiBM aXNwIENvZGUgZm9yIEVtYWNzIF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCjs7IG1ha2UgbG9h ZGVkIGZpbGVzIGdpdmUgYSBtZXNzYWdlCihkZWZhZHZpY2UgbG9hZCAoYmVmb3JlIGRlYnVnLWxv ZyBhY3RpdmF0ZSkKICAobWVzc2FnZSAiTG9hZGluZyAlcy4uLiIgKGxvY2F0ZS1saWJyYXJ5IChh ZC1nZXQtYXJnIDApKSkpCgo7OyBsb2FkLXBhdGggZW5oYW5jZW1lbnQKKGRlZnVuIG15LWFkZC10 by1sb2FkLXBhdGggKHRoaXMtZGlyZWN0b3J5ICZvcHRpb25hbCB3aXRoLXN1YmRpcnMgcmVjdXJz aXZlKQogICJBZGQgVEhJUy1ESVJFQ1RPUlkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9hZC1w YXRoLCBpZiBpdCBleGlzdHMuCkFkZCBhbGwgaXRzIHN1YmRpcmVjdG9yaWVzIG5vdCBzdGFydGlu ZyB3aXRoIGEgJy4nIGlmIHRoZQpvcHRpb25hbCBhcmd1bWVudCBXSVRILVNVQkRJUlMgaXMgbm90 IG5pbC4KRG8gaXQgcmVjdXJzaXZlbHkgaWYgdGhlIHRoaXJkIGFyZ3VtZW50IGlzIG5vdCBuaWwu IgogICh3aGVuIHRoaXMtZGlyZWN0b3J5CiAgICAod2hlbiAoZmlsZS1kaXJlY3RvcnktcCB0aGlz LWRpcmVjdG9yeSkKICAgICAgKGxldCogKCh0aGlzLWRpcmVjdG9yeSAoZXhwYW5kLWZpbGUtbmFt ZSB0aGlzLWRpcmVjdG9yeSkpCiAgICAgICAgICAgICAoZmlsZXMgKGRpcmVjdG9yeS1maWxlcyB0 aGlzLWRpcmVjdG9yeSB0ICJeW15cXC5dIikpKQoKICAgICAgICA7OyBjb21wbGV0ZWx5IGNhbm9u aWNhbGl6ZSB0aGUgZGlyZWN0b3J5IG5hbWUKICAgICAgICAod2hpbGUgKG5vdCAoc3RyaW5nPSB0 aGlzLWRpcmVjdG9yeSAoZXhwYW5kLWZpbGUtbmFtZSB0aGlzLWRpcmVjdG9yeSkpKQogICAgICAg ICAgKHNldHEgdGhpcy1kaXJlY3RvcnkgKGV4cGFuZC1maWxlLW5hbWUgdGhpcy1kaXJlY3Rvcnkp KSkKCiAgICAgICAgKG1lc3NhZ2UgIkFkZGluZyBgJXMnIHRvIGxvYWQtcGF0aC4uLiIgdGhpcy1k aXJlY3RvcnkpCiAgICAgICAgKGFkZC10by1saXN0ICdsb2FkLXBhdGggdGhpcy1kaXJlY3Rvcnkp CgogICAgICAgIChpZiB3aXRoLXN1YmRpcnMKICAgICAgICAgICAgKHByb2duCiAgICAgICAgICAg ICAgKHdoaWxlIGZpbGVzCiAgICAgICAgICAgICAgICAoc2V0cSBkaXItb3ItZmlsZSAoY2FyIGZp bGVzKSkKICAgICAgICAgICAgICAgICh3aGVuIChmaWxlLWRpcmVjdG9yeS1wIGRpci1vci1maWxl KQogICAgICAgICAgICAgICAgICAoaWYgcmVjdXJzaXZlCiAgICAgICAgICAgICAgICAgICAgICAo bXktYWRkLXRvLWxvYWQtcGF0aCBkaXItb3ItZmlsZSAnd2l0aC1zdWJkaXJzKQogICAgICAgICAg ICAgICAgICAgIChteS1hZGQtdG8tbG9hZC1wYXRoIGRpci1vci1maWxlKSkpCiAgICAgICAgICAg ICAgICAoc2V0cSBmaWxlcyAoY2RyIGZpbGVzKSkpKSkpKSkpCgo7OyBgTS14IGxpc3QtbG9hZC1w YXRoLXNoYWRvd3MgUkVUJwoKCjs7OyAtLS0tWyBMaWJyYXJ5IFNlYXJjaAoKKGRlZnZhciBteS1z aXRlLWxpc3AtZGlyZWN0b3J5ICJ+L2VtYWNzL3NpdGUtbGlzcC8iCiAgIk5hbWUgb2YgZGlyZWN0 b3J5IHdoZXJlIG15IHBlcnNvbmFsIGFkZGl0aW9uYWwgRW1hY3MgTGlzcCBmaWxlcyByZXNpZGUu IikKCihkZWZ2YXIgb3RoZXItbG9jYWwtc2l0ZS1saXNwLWRpcmVjdG9yeQogIChjb25jYXQgKG9y IChnZXRlbnYgIkxPQ0FMX1NIQVJFIikgIi9ob21lL3N2YS9tZWRpYS9Eb3dubG9hZHMiKSAiL2Vt YWNzL3NpdGUtbGlzcC8iKQogICJOYW1lIG9mIGRpcmVjdG9yeSB3aGVyZSBhZGRpdGlvbmFsIEVt YWNzIGdvb2RpZXMgTGlzcCBmaWxlcyAoZnJvbSB0aGUKSW50ZXJuZXQpIHJlc2lkZS4iKQoKOzsg bG9jYWwgc2l0ZS1saXNwIGlzIHRoZXJlIHNvIHRoYXQgeW91IGhhdmUgYW4gZWFzeSB3YXkgb2Yg aW5zdGFsbGluZyB5b3VyCjs7IG93biAocG9zc2libHkgbm90IGRpc3RybyBwYWNrYWdlZCkgRW1h Y3MgYWRkIG9ucyB3aGljaCBhcmUgc3BlY2lmaWMgdG8KOzsgdGhlIHZlcnNpb24gb2YgRW1hY3Mg eW91ciBydW5uaW5nLiBUaGlzIGtlZXBzIHlvdXIgbG9jYWwgYWRkLW9ucyBhcGFydAo7OyBmcm9t IGRpc3RybyBzdXBwbGllZCBvbmVzLiBJZiB5b3VyIGhhdmUgYSAvdXNyL2xvY2FsIHBhcnRpdGlv biwgaXQgYWxzbwo7OyBtZWFucyB5b3UgY2FuIGRvIGEgY29tcGxldGUgcmUtaW5zdGFsbCBvZiBF bWFjcyAob3IgZXZlbiB5b3VyIExpbnV4Cjs7IGRpc3Rybykgd2l0aG91dCBpbXBhY3Rpbmcgb24g c3R1ZmYgeW91IGhhdmUgYWRkZWQgYnkgaGFuZC4KOzsKOzsgSWYgeW91IHB1dCBzdHVmZiB5b3Ug aGF2ZSBpbnN0YWxsZWQgZnJvbSB0YXIgYmFsbHMgZXRjIHdpdGhpbiB0aGUgc2FtZQo7OyBkaXJl Y3RvcnkgaGllcmFyY2h5IGFzIHRoZSBkaXN0cm8gcGFja2FnZWQgRW1hY3MsIHlvdSBjYW4gZ2V0 IHByb2JsZW1zCjs7IHdoZW4gdXBncmFkaW5nIHRoZSBkaXN0cm8gdmVyc2lvbiBhcyBtYW55IHBh Y2thZ2Ugc3lzdGVtcyB3aWxsIGFzc3VtZQo7OyBvbmNlIGFsbCB0aGUgcGFja2FnZWQgc3R1ZmYg aXMgcmVtb3ZlZCwgZGlyZWN0b3JpZXMgYXJlIGVtcHR5LiBJZiB0aGV5Cjs7IGFyZSBub3QsIHRo ZSBwYWNrYWdlIG1hbmFnZW1lbnQgc2NyaXB0cyBjYW4gZmFpbCBvciBwb3NzaWJseSBnZXQgaW50 byBhCjs7ICJjb25mdXNlZCIgc3RhdGUuCgooZGVmdmFyIG90aGVyLXNpdGUtbGlzcC1kaXJlY3Rv cnkKICAoY29uY2F0IChvciAoZ2V0ZW52ICJTSEFSRSIpICIvdXNyL3NoYXJlIikgIi9lbWFjcy9z aXRlLWxpc3AvIikKICAiTmFtZSBvZiBkaXJlY3Rvcnkgd2hlcmUgYWRkaXRpb25hbCBFbWFjcyBn b29kaWVzIExpc3AgZmlsZXMgKGZyb20gdGhlCmRpc3RybyBvcHRpb25hbCBwYWNrYWdlcykgcmVz aWRlLiIpCgo7OyBBVFRFTlRJT04hCjs7IE15IGxpc3AgZGlyZWN0b3JpZXMgc2hvdWxkIGdvIGJl Zm9yZSB0aGUgRW1hY3MgaW5zdGFsbGF0aW9uIG9uZXMuCjs7IEV4YW1wbGUgd2l0aCB0aGUgb3V0 ZGF0ZWQgb3JnIG1vZGUgZmlsZSAodGhhdCdzIGNhbGxlZCBpbnN0ZWFkIG9mIG15Cjs7IHZlcnNp b24pOgo7OyBjOi9Qcm9ncmFtIEZpbGVzL0VtYWNzL2VtYWNzL2xpc3AvdGV4dG1vZGVzL29yZy5l bGMKCjs7IExpc3AgbGlicmFyaWVzIChtb3N0IGltcG9ydGFudCBkaXJlY3RvcmllcyBsYXN0KQo7 OyAxLgoobXktYWRkLXRvLWxvYWQtcGF0aCBvdGhlci1zaXRlLWxpc3AtZGlyZWN0b3J5CiAgICAg ICAgICAgICAgICAgICAgICd3aXRoLXN1YmRpcnMpCgooR05VRW1hY3MKICAgKG15LWFkZC10by1s b2FkLXBhdGgKICAgIChjb25jYXQgKG9yIChnZXRlbnYgIlNIQVJFIikgIi91c3Ivc2hhcmUiKSAi L2VtYWNzMjEvc2l0ZS1saXNwLyIpCiAgICAnd2l0aC1zdWJkaXJzKSkKCihYRW1hY3MKICh3aGVu IHJ1bm5pbmctbXMtd2luZG93cwogICAobXktYWRkLXRvLWxvYWQtcGF0aAogICAgKGNvbmNhdCAo b3IgKGdldGVudiAiU0hBUkUiKSAiL3Vzci9zaGFyZSIpICIvZW1hY3Mvc2l0ZS1saXNwLyIpCiAg ICAnd2l0aC1zdWJkaXJzICdyZWN1cnNpdmUpKSkKCjs7IDIuCihteS1hZGQtdG8tbG9hZC1wYXRo IG90aGVyLWxvY2FsLXNpdGUtbGlzcC1kaXJlY3RvcnkKICAgICAgICAgICAgICAgICAgICAgJ3dp dGgtc3ViZGlycyAncmVjdXJzaXZlKQoKOzsgMy4KKG15LWFkZC10by1sb2FkLXBhdGggbXktc2l0 ZS1saXNwLWRpcmVjdG9yeQogICAgICAgICAgICAgICAgICAgICAnd2l0aC1zdWJkaXJzKQoKOzsg V2hlcmUgdG8gZmluZCBFbWFjcyBwYWNrYWdlcyBpbnN0YWxsZWQgYnkgVWJ1bnR1Pwo7OyAgICAg byAgIC91c3Ivc2hhcmUvZW1hY3Mvc2l0ZS1saXNwLyAgICAoc291cmNlIHZlcnNpb24pCjs7ICAg ICBvICAgL3Vzci9zaGFyZS9lbWFjczIxL3NpdGUtbGlzcC8gIChieXRlLWNvbXBpbGVkIHZlcnNp b24gZm9yIEdOVSBFbWFjcykKOzsgICAgIG8gICAvdXNyL3NoYXJlL3hlbWFjczIxL3NpdGUtbGlz cC8gKGJ5dGUtY29tcGlsZWQgdmVyc2lvbiBmb3IgWEVtYWNzKQoKKGRlZnVuIG15LWNyZWF0ZS1k aXJlY3RvcnktaWYtbmVlZGVkIChkaXIpCiAgIk1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IERJUiBl eGlzdHM7IG90aGVyd2lzZSwgY3JlYXRlIGl0LiIKICAoaWYgZGlyCiAgICAgIChpZiAobm90IChm aWxlLWRpcmVjdG9yeS1wIGRpcikpCiAgICAgICAgICAoaWYgKHllcy1vci1uby1wIChjb25jYXQg IlRoZSBkaXJlY3RvcnkgYCIgZGlyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IicgZG9lcyBub3QgZXhpc3QuIENyZWF0ZSBpdD8gIikpCiAgICAgICAgICAgICAgKG1ha2UtZGly ZWN0b3J5IGRpciB0KQogICAgICAgICAgICAoZXJyb3IKICAgICAgICAgICAgIChjb25jYXQgIkNh bm5vdCBjb250aW51ZSB3aXRob3V0IGRpcmVjdG9yeSBgIiBkaXIgIiciKSkpKQogICAgKGVycm9y ICJteS1jcmVhdGUtZGlyZWN0b3J5LWlmLW5lZWRlZDogVm9pZCBkaXJlY3RvcnkiKSkpCgooZGVm dW4gbXktZmlsZS1leGVjdXRhYmxlLXAgKGZpbGUpCiAgIk1ha2Ugc3VyZSB0aGUgZmlsZSBGSUxF IGV4aXN0cyBhbmQgaXMgZXhlY3V0YWJsZS4iCiAgKGlmIGZpbGUKICAgICAgKHVubGVzcyAoZmls ZS1leGVjdXRhYmxlLXAgZmlsZSkKICAgICAgICAobWVzc2FnZSAiQ2FuJ3QgZmluZCBgJXMnIiBm aWxlKQogICAgICAgIDs7IHNsZWVwIDMgcyBzbyB0aGF0IHlvdSBjYW4gcmVhZCB0aGUgd2Fybmlu ZwogICAgICAgIChzaXQtZm9yIDMpKQogICAgKGVycm9yICJteS1maWxlLWV4ZWN1dGFibGUtcDog Vm9pZCBmaWxlIikpKQoKOzsgdXNlZnVsIENvbW1vbiBMaXNwIG1hY3JvcyAoYHB1c2gnLCBgY2Fz ZScsIC4uLikKKHJlcXVpcmUgJ2NsKQoKCjs7OyAtLS0tWyBCaW4gU2VhcmNoCgo7OyBleHRlcm5h bCBwcm9ncmFtcyBmcm9tIEVtYWNzCihzZXRlbnYgIlBBVEgiIChjb25jYXQgKGdldGVudiAiUEFU SCIpCiAgICAgICAgICAgICAgICAgICAgICAgIjsiCiAgICAgICAgICAgICAgICAgICAgICAgIkQ6 L3VzZXJzL3NoYXJlL2VtYWNzL2JpbiIpKQoKCjs7OyAtLS0tWyBGZWF0dXJlcwoKOzsgOzsgcmVk ZWZpbmUgcmVxdWlyZSB0byBsZWF2ZSBhIHRyYWNlIG9mIHBhY2thZ2VzIGJlaW5nIGxvYWRlZAo7 OyAoaWYgKG5vdCAoZmJvdW5kcCAnb3JpZy1yZXF1aXJlKSkKOzsgICAgIChmc2V0ICdvcmlnLXJl cXVpcmUgKHN5bWJvbC1mdW5jdGlvbiAncmVxdWlyZSkpCjs7ICAgKG1lc3NhZ2UgIlRoZSBjb2Rl IHRvIHJlZGVmaW5lIGByZXF1aXJlJyBzaG91bGQgbm90IGJlIGxvYWRlZCB0d2ljZSIpKQo7Owo7 OyAoZGVmdmFyIG15LXJlcXVpcmUtZGVwdGggMCkKOzsKOzsgKGRlZnVuIHJlcXVpcmUgKGZlYXR1 cmUgJm9wdGlvbmFsIGZpbGUpCjs7ICAgIkxlYXZlIGEgdHJhY2Ugb2YgcGFja2FnZXMgYmVpbmcg bG9hZGVkLiIKOzsgICAoY29uZCAoKG1lbWJlciBmZWF0dXJlIGZlYXR1cmVzKQo7OyAgICAgICAg ICAobWVzc2FnZSAiJXNSZXF1aXJpbmcgYCVzJyAoYWxyZWFkeSBsb2FkZWQpIgo7OyAgICAgICAg ICAgICAgICAgICAoY29uY2F0IChtYWtlLXN0cmluZyAoKiAyIG15LXJlcXVpcmUtZGVwdGgpID8t KSAiPiAiKQo7OyAgICAgICAgICAgICAgICAgICBmZWF0dXJlKQo7OyAgICAgICAgICAoc2l0LWZv ciAwKSkKOzsgICAgICAgICAodAo7OyAgICAgICAgICAobWVzc2FnZSAiJXNSZXF1aXJpbmcgYCVz JyIKOzsgICAgICAgICAgICAgICAgICAgKGNvbmNhdCAobWFrZS1zdHJpbmcgKCogMiBteS1yZXF1 aXJlLWRlcHRoKSA/LSkgIj4gIikKOzsgICAgICAgICAgICAgICAgICAgZmVhdHVyZSkKOzsgICAg ICAgICAgKHNpdC1mb3IgMCkKOzsgICAgICAgICAgKGxldCAoKG15LXJlcXVpcmUtZGVwdGggKCsg MSBteS1yZXF1aXJlLWRlcHRoKSkpCjs7ICAgICAgICAgICAgKGNvbmQgKGZpbGUKOzsgICAgICAg ICAgICAgICAgICAgKG9yaWctcmVxdWlyZSBmZWF0dXJlIGZpbGUpKQo7OyAgICAgICAgICAgICAg ICAgICh0Cjs7ICAgICAgICAgICAgICAgICAgIChvcmlnLXJlcXVpcmUgZmVhdHVyZSkpKSkKOzsg ICAgICAgICAgKG1lc3NhZ2UgIiVzUmVxdWlyaW5nIGAlcycuLi5kb25lIgo7OyAgICAgICAgICAg ICAgICAgICAoY29uY2F0IChtYWtlLXN0cmluZyAoKiAyIG15LXJlcXVpcmUtZGVwdGgpID8tKSAi PiAiKQo7OyAgICAgICAgICAgICAgICAgICBmZWF0dXJlKQo7OyAgICAgICAgICAoc2l0LWZvciAw KSkpKQoKCihkZWZ2YXIgbWlzc2luZy1wYWNrYWdlcy1saXN0IG5pbAogICJMaXN0IG9mIHBhY2th Z2VzIHRoYXQgYHRyeS1yZXF1aXJlJyBjYW4ndCBmaW5kLiIpCgo7OyBhdHRlbXB0IHRvIGxvYWQg YSBmZWF0dXJlL2xpYnJhcnksIGZhaWxpbmcgc2lsZW50bHkKKGRlZnVuIHRyeS1yZXF1aXJlIChm ZWF0dXJlKQogICJBdHRlbXB0IHRvIGxvYWQgYSBsaWJyYXJ5IG9yIG1vZHVsZS4gUmV0dXJuIHRy dWUgaWYgdGhlCmxpYnJhcnkgZ2l2ZW4gYXMgYXJndW1lbnQgaXMgc3VjY2Vzc2Z1bGx5IGxvYWRl ZC4gSWYgbm90LCBpbnN0ZWFkCm9mIGFuIGVycm9yLCBqdXN0IGFkZCB0aGUgcGFja2FnZSB0byBh IGxpc3Qgb2YgbWlzc2luZyBwYWNrYWdlcy4iCiAgKGNvbmRpdGlvbi1jYXNlIGVycgogICAgICA7 OyBwcm90ZWN0ZWQgZm9ybQogICAgICAocHJvZ24KICAgICAgICAobWVzc2FnZSAiQ2hlY2tpbmcg Zm9yIGxpYnJhcnkgYCVzJy4uLiIgZmVhdHVyZSkKICAgICAgICAoaWYgKHN0cmluZ3AgZmVhdHVy ZSkKICAgICAgICAgICAgKGxvYWQtbGlicmFyeSBmZWF0dXJlKQogICAgICAgICAgKHJlcXVpcmUg ZmVhdHVyZSkpCiAgICAgICAgKG1lc3NhZ2UgIkNoZWNraW5nIGZvciBsaWJyYXJ5IGAlcycuLi4g Rm91bmQiIGZlYXR1cmUpKQogICAgOzsgZXJyb3IgaGFuZGxlcgogICAgKGZpbGUtZXJyb3IgIDsg Y29uZGl0aW9uCiAgICAgKHByb2duCiAgICAgICAobWVzc2FnZSAiQ2hlY2tpbmcgZm9yIGxpYnJh cnkgYCVzJy4uLiBNaXNzaW5nIiBmZWF0dXJlKQogICAgICAgKGFkZC10by1saXN0ICdtaXNzaW5n LXBhY2thZ2VzLWxpc3QgZmVhdHVyZSkpCiAgICAgbmlsKSkpCgo7O319fQoKCjs7e3t7IC0tWyBE ZWJ1Z2dpbmcgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KCjs7IGdldCB0aGUgcmVzdWx0aW5nIGJhY2t0cmFjZSB3aGVuIGJ1Z3Mgc3VjaCBh cyBgV3JvbmcgdHlwZSBhcmd1bWVudCcgb2NjdXIKKHNldHEgZGVidWctb24tZXJyb3IgdCkgIDsg d2lsbCBiZSBjbGVhcmVkIGF0IGVuZCBvZiBidWZmZXIKCihYRW1hY3MKICAgIChzZXRxIHN0YWNr LXRyYWNlLW9uLWVycm9yIHQpKQoKOzsgOzsgaGl0IEMtZyB3aGlsZSBpdCdzIGZyb3plbiB0byBn ZXQgYW4gRUxpc3AgYmFja3RyYWNlCjs7IChzZXRxIGRlYnVnLW9uLXF1aXQgdCkKCjs7fX19CgoK Ozt7e3sgSW1wb3J0YW50IEdlbmVyYWwgQ29uY2VwdHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIwoKOzt7e3sgLS1bIDEgVGhlIE9yZ2FuaXphdGlvbiBvZiB0aGUg KGluZm8gIihlbWFjcylTY3JlZW4iKSBdLS0tLS0tLS0tLS0tLS0tLQoKKG1lc3NhZ2UgIjEgVGhl IE9yZ2FuaXphdGlvbiBvZiB0aGUgU2NyZWVuLi4uIikKCjs7OyAtLS0tWyAxLjIgVGhlIEVjaG8g QXJlYQoKOzsgbWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8ga2VlcCBpbiB0aGUgbWVzc2FnZSBs b2cgYnVmZmVyCihzZXRxIG1lc3NhZ2UtbG9nLW1heCAoKiAzMCA1MCkpCgo7OyB0aGUgYCpNZXNz YWdlcyonIGJ1ZmZlciBpcyBjYWxsZWQgdGhlIGAgKk1lc3NhZ2UtTG9nKicgb24gWEVtYWNzIChu b3RlCjs7IHRoZSBpbml0aWFsIHNwYWNlKS4gVG8gZGlzcGxheSB0aGUgbWVzc2FnZSBsb2csIGV4 ZWN1dGUgdGhlIGNvbW1hbmQKOzsgYHNob3ctbWVzc2FnZS1sb2cnCgoobWVzc2FnZSAiMSBUaGUg T3JnYW5pemF0aW9uIG9mIHRoZSBTY3JlZW4uLi4gRG9uZSIpCgo7O319fQoKCjs7e3t7IC0tWyAy IEtpbmRzIG9mIFVzZXIgSW5wdXQgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KCihtZXNzYWdlICIyIEtpbmRzIG9mIFVzZXIgSW5wdXQuLi4iKQoKKG1lc3NhZ2Ug IjIgS2luZHMgb2YgVXNlciBJbnB1dC4uLiBEb25lIikKCjs7fX19CgoKOzt7e3sgLS1bIDMgS2V5 cyBdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQoKKG1lc3NhZ2UgIjMgS2V5cy4uLiIpCgoobWVzc2FnZSAiMyBLZXlzLi4uIERvbmUiKQoK Ozt9fX0KCgo7O3t7eyAtLVsgNCBLZXlzIGFuZCBDb21tYW5kcyBdLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoobWVzc2FnZSAiNCBLZXlzIGFuZCBDb21tYW5k cy4uLiIpCgoobWVzc2FnZSAiNCBLZXlzIGFuZCBDb21tYW5kcy4uLiBEb25lIikKCjs7fX19CgoK Ozt7e3sgLS1bIDUgQ2hhcmFjdGVyIFNldCBmb3IgVGV4dCBdLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQoKKG1lc3NhZ2UgIjUgQ2hhcmFjdGVyIFNldCBmb3IgVGV4dC4u LiIpCgoobWVzc2FnZSAiNSBDaGFyYWN0ZXIgU2V0IGZvciBUZXh0Li4uIERvbmUiKQoKOzt9fX0K Cgo7O3t7eyAtLVsgNiBFbnRlcmluZyBhbmQgRXhpdGluZyBFbWFjcyBdLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoobWVzc2FnZSAiNiBFbnRlcmluZyBhbmQgRXhpdGluZyBF bWFjcy4uLiIpCgoobWVzc2FnZSAiNiBFbnRlcmluZyBhbmQgRXhpdGluZyBFbWFjcy4uLiBEb25l IikKCjs7fX19CgoKOzt7e3sgLS1bIDcgRXhpdGluZyBFbWFjcyBdLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKG1lc3NhZ2UgIjcgRXhpdGluZyBFbWFj cy4uLiIpCgoobWVzc2FnZSAiNyBFeGl0aW5nIEVtYWNzLi4uIERvbmUiKQoKOzt9fX0KCjs7fX19 CgoKOzt7e3sgRnVuZGFtZW50YWwgRWRpdGluZyBDb21tYW5kcyAjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKOzt7e3sgLS1bIDggKGluZm8gIihlbWFjcylCYXNpYyIp IEVkaXRpbmcgQ29tbWFuZHMgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKG1lc3NhZ2UgIjgg QmFzaWMgRWRpdGluZyBDb21tYW5kcy4uLiIpCgo7OzsgLS0tLVsgOC4yIENoYW5naW5nIHRoZSBM b2NhdGlvbiBvZiBQb2ludAoKOzsgZG9uJ3QgYWRkIG5ld2xpbmVzIHRvIGVuZCBvZiBidWZmZXIg d2hlbiBzY3JvbGxpbmcKKHNldHEgbmV4dC1saW5lLWFkZC1uZXdsaW5lcyBuaWwpCgo7OyBYRW1h Y3MgZGVmYXVsdCBmb3IgbW92aW5nIHBvaW50IHRvIGEgZ2l2ZW4gbGluZSBudW1iZXIKKEdOVUVt YWNzCiAgICAoZ2xvYmFsLXNldC1rZXkgWyhtZXRhIGcpXSAnZ290by1saW5lKSkKCihnbG9iYWwt c2V0LWtleSBbKG1ldGEgRyldICd3aGF0LWxpbmUpCgo7O3t7eyBzY3JlZW4tbGluZXMKCjs7IHBv aW50IG1vdGlvbiBieSBzY3JlZW4gbGluZXMgKGFzIG9wcG9zZWQgdG8gdGV4dCBsaW5lcykKKHdo ZW4gKHRyeS1yZXF1aXJlICdzY3JlZW4tbGluZXMpCiAgICA7OyBmb2xsb3dpbmcgbGluZXMgY29t bWVudGVkIG91dCBmb3Iga2VlcGluZyB0aGUgb3JpZ2luYWwgYGtpbGwtbGluZScKICAgIDs7IGlu IGBzY3JlZW4tbGluZXMnIG1pbm9yIG1vZGUKICAgIChhZGQtaG9vayAnc2NyZWVuLWxpbmVzLWxv YWQtaG9vawogICAgICAgICAgICAgICcobGFtYmRhICgpCiAgICAgICAgICAgICAgICAgKGFkLWRp c2FibGUtYWR2aWNlICdraWxsLWxpbmUgJ2Fyb3VuZCAnc2NyZWVuLWxpbmVzKQogICAgICAgICAg ICAgICAgIChhZC1hY3RpdmF0ZSAna2lsbC1saW5lKSkpCgogICAgOzsgc2NyZWVuIGxpbmVzIG1v ZGUgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBhbGwgYnVmZmVycwogICAgOzsgSE9XID8/PyAgKFJp Z2h0IG5vdywgaXQncyBkb25lIHZpYSBgY3VzdG9tLmVsJykKCiAgICA7OyBub3RoaW5nIHNob3Vs ZCBhcHBlYXIgaW4gdGhlIG1vZGUgbGluZSwgd2hlbiB0aGUgYHNjcmVlbi1saW5lcycgbW9kZQog ICAgOzsgaXMgZW5hYmxlZCBpbiBhIGJ1ZmZlcgogICAgKHNldHEgc2NyZWVuLWxpbmVzLW1pbm9y LW1vZGUtc3RyaW5nICIiKSkKCjs7fX19CgoKOzs7IC0tLS1bIDguNCBVbmRvaW5nIENoYW5nZXMK Cjs7IHVuZG8gc29tZSBwcmV2aW91cyBjaGFuZ2VzCihnbG9iYWwtc2V0LWtleSBbKGYxMSldICd1 bmRvKQoKOzt7e3sgcmVkbwoKOzsgcmVkbyB0aGUgbW9zdCByZWNlbnQgdW5kbwood2hlbiAodHJ5 LXJlcXVpcmUgJ3JlZG8pCiAgICAoZ2xvYmFsLXNldC1rZXkgWyhzaGlmdCBmMTEpXSAncmVkbykp Cgo7O319fQoKCjs7OyAtLS0tWyA4LjggQ29udGludWF0aW9uIExpbmVzCgo7OyAoc2V0cSBkZWZh dWx0LXRydW5jYXRlLWxpbmVzIG5pbCkKOzsgKHNldHEgdHJ1bmNhdGUtcGFydGlhbC13aWR0aC13 aW5kb3dzIG5pbCkKCihkZWZ1biBteS13cmFwLW1vZGUtb24gKCkKICAiTWlub3IgbW9kZSBmb3Ig bWFraW5nIGJ1ZmZlciBub3Qgd3JhcCBsb25nIGxpbmVzIHRvIG5leHQgbGluZS4iCiAgKGludGVy YWN0aXZlKQogIChzZXRxIHRydW5jYXRlLWxpbmVzIG5pbCkpCgooZGVmdW4gbXktd3JhcC1tb2Rl LW9mZiAoKQogICJNaW5vciBtb2RlIGZvciBtYWtpbmcgYnVmZmVyIHdyYXAgbG9uZyBsaW5lcyB0 byBuZXh0IGxpbmUuIgogIChpbnRlcmFjdGl2ZSkKICAoc2V0cSB0cnVuY2F0ZS1saW5lcyB0KSkK CihkZWZ1biBteS10b2dnbGUtd3JhcC1tb2RlICgpCiAgIlN3aXRjaCB3cmFwIG1vZGUgZnJvbSB3 cmFwIHRvIG5vbi13cmFwLCBvciB2aWNlLXZlcnNhLiIKICAoaW50ZXJhY3RpdmUpCiAgKGlmIChl cSB0cnVuY2F0ZS1saW5lcyBuaWwpCiAgICAgICh3cmFwLW1vZGUtb2ZmKQogICAgKHdyYXAtbW9k ZS1vbikpKQoKKG1lc3NhZ2UgIjggQmFzaWMgRWRpdGluZyBDb21tYW5kcy4uLiBEb25lIikKCjs7 fX19CgoKOzt7e3sgLS1bIDkgVGhlIChpbmZvICIoZW1hY3MpTWluaWJ1ZmZlciIpIF0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKG1lc3NhZ2UgIjkgVGhlIE1pbmlidWZmZXIuLi4i KQoKOzs7IC0tLS1bIDkuMSAoaW5mbyAiKGVtYWNzKU1pbmlidWZmZXIgRmlsZSIpIE5hbWVzCgo7 OyBpZ25vcmUgY2FzZSB3aGVuIHJlYWRpbmcgYSBmaWxlIG5hbWUgY29tcGxldGlvbgooc2V0cSBy ZWFkLWZpbGUtbmFtZS1jb21wbGV0aW9uLWlnbm9yZS1jYXNlIHQpCgo7OyA7OyBkaW0gdGhlIGln bm9yZWQgcGFydCBvZiB0aGUgZmlsZSBuYW1lCjs7IChmaWxlLW5hbWUtc2hhZG93LW1vZGUpCgoK Ozs7IC0tLS1bIDkuMiAoaW5mbyAiKGVtYWNzKU1pbmlidWZmZXIgRWRpdCIpaW5nCgo7OyBtaW5p YnVmZmVyIHdpbmRvdyBleHBhbmRzIHZlcnRpY2FsbHkgYXMgbmVjZXNzYXJ5IHRvIGhvbGQgdGhl IHRleHQgdGhhdAo7OyB5b3UgcHV0IGluIHRoZSBtaW5pYnVmZmVyCihzZXRxIHJlc2l6ZS1taW5p LXdpbmRvd3MgdCkKCjs7IHJlc2l6ZS1taW5pYnVmZmVyLW1vZGUgbWFrZXMgdGhlIG1pbmlidWZm ZXIgYXV0b21hdGljYWxseSByZXNpemUgYXMKOzsgbmVjZXNzYXJ5IHdoZW4gaXQncyB0b28gYmln IHRvIGhvbGQgaXRzIGNvbnRlbnRzCihYRW1hY3MKICAgIChhdXRvbG9hZCAncmVzaXplLW1pbmli dWZmZXItbW9kZSAicnN6LW1pbmlidWYiIG5pbCB0KQogICAgKHJlc2l6ZS1taW5pYnVmZmVyLW1v ZGUpCiAgICAoc2V0cSByZXNpemUtbWluaWJ1ZmZlci13aW5kb3ctZXhhY3RseSBuaWwpKQoKCjs7 OyAtLS0tWyA5LjMgKGluZm8gIihlbWFjcylDb21wbGV0aW9uIikKCjs7IG1pbmlidWZmZXIgY29t cGxldGlvbiBpbmNyZW1lbnRhbCBmZWVkYmFjawooaWNvbXBsZXRlLW1vZGUpCgo7OyBkbyBub3Qg Y29uc2lkZXIgY2FzZSBzaWduaWZpY2FudCBpbiBjb21wbGV0aW9uIChHTlUgRW1hY3MgZGVmYXVs dCkKKHNldHEgY29tcGxldGlvbi1pZ25vcmUtY2FzZSB0KQoKOzsgVG8gZXhlY3V0ZSBpbiBFbWFj cyAyMisKOzsgOzsgcmVzdG9yZSBvbGQgYmVoYXZpb3Igb2YgU1BDIGluIG1pbmlidWZmZXIgdG8g Y29tcGxldGUgZmlsZSBuYW1lcwo7OyAoZGVmaW5lLWtleSBtaW5pYnVmZmVyLWxvY2FsLWZpbGVu YW1lLWNvbXBsZXRpb24tbWFwICIgIgo7OyAgICdtaW5pYnVmZmVyLWNvbXBsZXRlLXdvcmQpCjs7 IChkZWZpbmUta2V5IG1pbmlidWZmZXItbG9jYWwtbXVzdC1tYXRjaC1maWxlbmFtZS1tYXAgIiAi Cjs7ICAgJ21pbmlidWZmZXItY29tcGxldGUtd29yZCkKCihtZXNzYWdlICI5IFRoZSBNaW5pYnVm ZmVyLi4uIERvbmUiKQoKOzt9fX0KCgo7O3t7eyAtLVsgMTAgUnVubmluZyBDb21tYW5kcyBieSBO YW1lIF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoobWVzc2FnZSAiMTAg UnVubmluZyBDb21tYW5kcyBieSBOYW1lLi4uIikKCihtZXNzYWdlICIxMCBSdW5uaW5nIENvbW1h bmRzIGJ5IE5hbWUuLi4gRG9uZSIpCgo7O319fQoKCjs7e3t7IC0tWyAxMSAoaW5mbyAiKGVtYWNz KUhlbHAiKSBdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCihtZXNz YWdlICIxMSBIZWxwLi4uIikKCjs7ID4gSSdtIHRyeWluZyB0byB0ZWFjaCBteXNlbGYgRW1hY3Mg TGlzcCwgYnV0IGNhbid0IGZpZ3VyZSBvdXQgaG93IHRvCjs7ID4gcHJvbXB0IGZvciBhIHN0cmlu Zy4gSSBmb3VuZCB0aGUgInJlYWQta2V5LXNlcXVlbmNlLXZlY3RvciIgZnVuY3Rpb24sCjs7ID4g YnV0IHRoYXQgb25seSB0YWtlcyBpbiBvbmUgY2hhcmFjdGVyLiBEb2VzIGFueW9uZSBrbm93IGhv dyB0byBwcm9tcHQKOzsgPiBmb3IgYSBzdHJpbmc/IFRoYW5rcy4KOzsgSSBkb24ndCBrbm93LiAg T3IgZG8geW91IHRoaW5rIEknbSBhIHN1cGVyIGdlbml1cz8KOzsgTGV0J3Mgc2VlOgo7OyBNLXgg YXByb3BvcyBSRVQgcmVhZCBSRVQKOzsgQy12Cjs7IEMtcyByZWFkLXN0cmluZyBSRVQgQy1zIEMt cyBDLXMKOzsgWWVwLCBzZWVtcyBsaWtlIHRoaXMgY291bGQgYmUgdXNlZnVsOgo7OyByZWFkLXN0 cmluZwo7OyAgIEZ1bmN0aW9uOiBSZWFkIGEgc3RyaW5nIGZyb20gdGhlIG1pbmlidWZmZXIsIHBy b21wdGluZyB3aXRoIHN0cmluZyBQUk9NUFQuCjs7IEMtaCBmIHJlYWQtc3RyaW5nIFJFVAo7OyBZ ZXAsIHNvdW5kcyBwcm9taXNpbmcuCgoKOzsgdGVybQo7OyAoZXZhbC1hZnRlci1sb2FkICJ0ZXJt Igo7OyAgICcoZGVmYWR2aWNlIHRlcm0tY2hhci1tb2RlIChhZnRlciBzd2FwLWRlbC1hbmQtYmFj a3NwYWNlIGFjdGl2YXRlKQo7OyAgICAgIChkZWZpbmUta2V5IHRlcm0tcmF3LW1hcCBbZGVsZXRl XSAndGVybS1zZW5kLWJhY2tzcGFjZSkKOzsgICAgICAoZGVmaW5lLWtleSB0ZXJtLXJhdy1tYXAg W2JhY2tzcGFjZV0gJ3Rlcm0tc2VuZC1kZWwpKSkKOzsKOzsgKGRlZmluZS1rZXkgZnVuY3Rpb24t a2V5LW1hcCAiXGVbN34iIFtob21lXSkKOzsgKGRlZmluZS1rZXkgZnVuY3Rpb24ta2V5LW1hcCAi XGVbOH4iIFtlbmRdKQoKOzsgKGRlZnVuIGJ1Zy1ldmlsLXRlcm0tcHJvY2Vzcy1jb2Rpbmctc3lz dGVtICgpCjs7ICAgIkZpeCBhIHRlcm0gYnVnOyB0aGUgYHByb2Nlc3MtY29kaW5nLXN5c3RlbScg c2hvdWxkIGFsd2F5cyBiZSBgYmluYXJ5Jy4iCjs7ICAgKHNldC1idWZmZXItcHJvY2Vzcy1jb2Rp bmctc3lzdGVtICdiaW5hcnkgJ2JpbmFyeSkpCjs7Cjs7IChhZGQtaG9vayAndGVybS1leGVjLWhv b2sgJ2J1Zy1ldmlsLXRlcm0tcHJvY2Vzcy1jb2Rpbmctc3lzdGVtKQoKCjs7OyAtLS0tWyAxMS40 IEFwcm9wb3MKCjs7IGNoZWNrIGFsbCB2YXJpYWJsZXMgYW5kIG5vbi1pbnRlcmFjdGl2ZSBmdW5j dGlvbnMgYXMgd2VsbAooc2V0cSBhcHJvcG9zLWRvLWFsbCB0KQoKOzsgYWRkIGFwcm9wb3MgaGVs cCBhYm91dCB2YXJpYWJsZXMgKGJpbmQgYEMtaCBBJyB0byBgYXByb3Bvcy12YXJpYWJsZScpCihH TlVFbWFjcwogICAgKGRlZmluZS1rZXkgaGVscC1tYXAgWyhzaGlmdCBhKV0gJ2Fwcm9wb3MtdmFy aWFibGUpKQoKCjs7OyAtLS0tWyAxMS44IE90aGVyIEhlbHAgQ29tbWFuZHMKCjs7IEluZm8gZG9j dW1lbnRhdGlvbiBicm93c2UKKHdoZW4gKHRyeS1yZXF1aXJlICdpbmZvKQoKICAgIDs7IGVudGVy IEluZm8KICAgIChnbG9iYWwtc2V0LWtleSBbKGYxKV0gJ2luZm8pCgogICAgOzsgbGlzdCBvZiBk aXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIEluZm8gZG9jdW1lbnRhdGlvbiBmaWxlcwogICAgOzsg KGluIHRoZSBvcmRlciB0aGV5IGFyZSBsaXN0ZWQpCiAgICAoaWYgcnVubmluZy1tcy13aW5kb3dz CiAgICAgICAgKHNldHEgSW5mby1kaXJlY3RvcnktbGlzdAogICAgICAgICAgICAgIChhcHBlbmQg SW5mby1kZWZhdWx0LWRpcmVjdG9yeS1saXN0CiAgICAgICAgICAgICAgICAgICAgICBgKCwoY29u Y2F0IChnZXRlbnYgIlNIQVJFIikgIi9pbmZvLyIpCiAgICAgICAgICAgICAgICAgICAgICAgICJD Oi9jeWd3aW4vdXNyL2luZm8vIikpKSkKCiAgICA7OyBkaXNwbGF5IHN5bWJvbCBkZWZpbml0aW9u cywgYXMgZm91bmQgaW4gdGhlIHJlbGV2YW50IG1hbnVhbAogICAgOzsgKGZvciBDLCBMaXNwLCBh bmQgb3RoZXIgbGFuZ3VhZ2VzIHRoYXQgaGF2ZSBkb2N1bWVudGF0aW9uIGluIEluZm8pCiAgICAo Z2xvYmFsLXNldC1rZXkgWyhjb250cm9sIGYxKV0gJ2luZm8tbG9va3VwLXN5bWJvbCkpCgoodHJ5 LXJlcXVpcmUgJ2luZm8rKQoKOzsgZ2V0IGEgVW5peCBtYW51YWwgcGFnZSBhbmQgcHV0IGl0IGlu IGEgYnVmZmVyCihnbG9iYWwtc2V0LWtleSBbKHNoaWZ0IGYxKV0gJ21hbi1mb2xsb3cpCgo7OyAo ZGVmdW4ganVtcC1tYW4tcGFnZSAoKQo7OyAgIChpbnRlcmFjdGl2ZSkKOzsgICAobWFudWFsLWVu dHJ5IChjdXJyZW50LXdvcmQpKSkKCjs7IHNhbWUgYmVoYXZpb3IgYXMgd29tYW4gd2hlbiBtYW5w YWdlIGlzIHJlYWR5CihzZXRxIE1hbi1ub3RpZnktbWV0aG9kICduZXdmcmFtZSkKCjs7e3t7IFdv TWFuCgo7OyBicm93c2UgVW5peCBtYW51YWwgcGFnZXMgIlcuby4gKHdpdGhvdXQpIE1hbiIKKGF1 dG9sb2FkICd3b21hbiAid29tYW4iCiAgIkRlY29kZSBhbmQgYnJvd3NlIGEgVU4qWCBtYW4gcGFn ZS4iIHQpCgooYXV0b2xvYWQgJ3dvbWFuLWZpbmQtZmlsZSAid29tYW4iCiAgIkZpbmQsIGRlY29k ZSBhbmQgYnJvd3NlIGEgc3BlY2lmaWMgVU4qWCBtYW4tcGFnZSBmaWxlLiIgdCkKCjs7IGxpc3Qg b2YgZGlyZWN0b3J5IHRyZWVzIHRvIHNlYXJjaCBmb3IgVW5peCBtYW51YWwgZmlsZXMKKHNldHEg d29tYW4tbWFucGF0aAogICAgICAoaWYgcnVubmluZy1tcy13aW5kb3dzCiAgICAgICAgICBgKCwo Y29uY2F0IChnZXRlbnYgIlNIQVJFIikgIi9tYW4vIikKICAgICAgICAgICAgIkM6L2N5Z3dpbi91 c3IvbWFuLyIKICAgICAgICAgICAgIkM6L2N5Z3dpbi91c3Ivc2hhcmUvbWFuIgogICAgICAgICAg ICAiQzovY3lnd2luL3Vzci9sb2NhbC9tYW4iKQogICAgICAgICcoIi91c3Ivc2hhcmUvbWFuLyIK ICAgICAgICAgICIvdXNyL2xvY2FsL21hbi8iKSkpCgo7O319fQoKCjs7OyAtLS0tWyBEb2N1bWVu dGF0aW9uIEJhc2ljcwoKOzsganVtcCB0byBzZWN0aW9uIGluIFhFbWFjcyBMaXNwIFJlZmVyZW5j ZSBtYW51YWwKKGF1dG9sb2FkICdsaXNwcmVmLXNlYXJjaCAibGlzcHJlZiIpCihkZWZpbmUta2V5 IGhlbHAtbWFwIFsoTCldICdsaXNwcmVmLXNlYXJjaCkKCihtZXNzYWdlICIxMSBIZWxwLi4uIERv bmUiKQoKOzt9fX0KCjs7fX19CgoKOzt7e3sgSW1wb3J0YW50IFRleHQtQ2hhbmdpbmcgQ29tbWFu ZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKOzt7e3sgLS1bIDEyIFRo ZSAoaW5mbyAiKGVtYWNzKU1hcmsiKSBhbmQgdGhlIFJlZ2lvbiBdLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQoKKG1lc3NhZ2UgIjEyIFRoZSBNYXJrIGFuZCB0aGUgUmVnaW9uLi4uIikKCjs7OyAtLS0t WyAxMi4yIFRyYW5zaWVudCBNYXJrIE1vZGUKCjs7IHdoZW4gdGhlIG1hcmsgaXMgYWN0aXZlLCB0 aGUgcmVnaW9uIGlzIGhpZ2hsaWdodGVkCihHTlVFbWFjcwogICAgKHdoZW4gd2luZG93LXN5c3Rl bQogICAgICAodHJhbnNpZW50LW1hcmstbW9kZSAxKSkpCgoobWVzc2FnZSAiMTIgVGhlIE1hcmsg YW5kIHRoZSBSZWdpb24uLi4gRG9uZSIpCgo7O319fQoKCjs7e3t7IC0tWyAxMyBEZWxldGlvbiBh bmQgKGluZm8gIihlbWFjcylLaWxsaW5nIikgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiht ZXNzYWdlICIxMyBLaWxsaW5nIGFuZCBNb3ZpbmcgVGV4dC4uLiIpCgoobWVzc2FnZSAiMTMgS2ls bGluZyBhbmQgTW92aW5nIFRleHQuLi4gRG9uZSIpCgo7O319fQoKCjs7e3t7IC0tWyAxNCAoaW5m byAiKGVtYWNzKVlhbmtpbmciKSBdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KCihtZXNzYWdlICIxNCBZYW5raW5nLi4uIikKCihtZXNzYWdlICIxNCBZYW5raW5nLi4uIERv bmUiKQoKOzt9fX0KCgo7O3t7eyAtLVsgMTUgKGluZm8gIihlbWFjcylBY2N1bXVsYXRpbmcgVGV4 dCIpIF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoobWVzc2FnZSAiMTUgQWNjdW11bGF0 aW5nIFRleHQuLi4iKQoKKG1lc3NhZ2UgIjE1IEFjY3VtdWxhdGluZyBUZXh0Li4uIERvbmUiKQoK Ozt9fX0KCgo7O3t7eyAtLVsgMTYgKGluZm8gIihlbWFjcylSZWN0YW5nbGVzIikgXS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoobWVzc2FnZSAiMTYgUmVjdGFuZ2xlcy4uLiIp CgoobWVzc2FnZSAiMTYgUmVjdGFuZ2xlcy4uLiBEb25lIikKCjs7fX19CgoKOzt7e3sgLS1bIDE3 IChpbmZvICIoZW1hY3MpUmVnaXN0ZXJzIikgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQoKKG1lc3NhZ2UgIjE3IFJlZ2lzdGVycy4uLiIpCgo7OzsgLS0tLVsgMTcuMSBTYXZp bmcgUG9zaXRpb25zIGluIFJlZ2lzdGVycwoKKHdoZW4gKHRyeS1yZXF1aXJlICdzYXZlcGxhY2Up CgogICAgOzsgYXV0b21hdGljYWxseSBzYXZlIHBsYWNlIGluIGVhY2ggZmlsZQogICAgKHNldHEg c2F2ZS1wbGFjZSB0KQoKICAgIDs7IG5hbWUgb2YgdGhlIGZpbGUgdGhhdCByZWNvcmRzIGBzYXZl LXBsYWNlLWFsaXN0JyB2YWx1ZQogICAgKHNldHEgc2F2ZS1wbGFjZS1maWxlIChjb252ZXJ0LXN0 YW5kYXJkLWZpbGVuYW1lICJ+Ly5lbWFjcy5kL3BsYWNlcy50eHQiKSkKCiAgICA7OyBkbyBub3Qg bWFrZSBiYWNrdXBzIG9mIG1hc3RlciBzYXZlLXBsYWNlIGZpbGUKICAgIChzZXRxIHNhdmUtcGxh Y2UtdmVyc2lvbi1jb250cm9sICJuZXZlciIpKQoKCjs7OyAtLS0tWyAxNy43IEJvb2ttYXJrcwoK Ozsgd2hlcmUgdG8gc2F2ZSB0aGUgYm9va21hcmtzCihzZXRxIGJvb2ttYXJrLWRlZmF1bHQtZmls ZSAifi8uZW1hY3MuZC9ib29rbWFya3MudHh0IikKCjs7IGVhY2ggY29tbWFuZCB0aGF0IHNldHMg YSBib29rbWFyayB3aWxsIGFsc28gc2F2ZSB5b3VyIGJvb2ttYXJrcwooc2V0cSBib29rbWFyay1z YXZlLWZsYWcgMSkKCihtZXNzYWdlICIxNyBSZWdpc3RlcnMuLi4gRG9uZSIpCgo7O319fQoKCjs7 e3t7IC0tWyAxOCBDb250cm9sbGluZyB0aGUgKGluZm8gIihlbWFjcylEaXNwbGF5IikgXS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KCihtZXNzYWdlICIxOCBDb250cm9sbGluZyB0aGUgRGlzcGxheS4u LiIpCgo7OzsgLS0tLVsgMTguMiBGb250IExvY2sKCjs7IG1ha2UgYnVmZmVyIHNpemUgaXJyZWxl dmFudCBmb3IgZm9udGlmaWNhdGlvbgooc2V0cSBmb250LWxvY2stbWF4aW11bS1zaXplIG5pbCkK Cjs7IHVzZSB0aGUgbWF4aW11bSBkZWNvcmF0aW9uCihzZXRxIGZvbnQtbG9jay1tYXhpbXVtLWRl Y29yYXRpb24gdCkKCjs7IHR1cm4gRm9udCBMb2NrIG1vZGUgb24gaW4gbWFueSBtb2RlcwooR05V RW1hY3MKICAgIChnbG9iYWwtZm9udC1sb2NrLW1vZGUgdCkpCgo7OyBzdG9wIHNob3dpbmcgdGhh dCBhbm5veWluZyBwcm9ncmVzcyBiYXIgKGluIHNlcGFyYXRlIHdpZGdldCkgd2hlbiBmb250aWZ5 aW5nCihYRW1hY3MKICAgIChzZXRxIHByb2dyZXNzLWZlZWRiYWNrLXVzZS1lY2hvLWFyZWEgdCkp Cgo7OyBjb2xvciBzeW50YXggaGlnaGxpZ2h0aW5nIGRlZmluaXRpb25zCjs7IFRPRE8gTWFrZSBp dCB3b3JrIHdpdGggWEVtYWNzCjs7ISBUT0RPIEVuYWJsZSBpdCBvbmx5IGluIHNvbWUgYnVmZmVy cyAobm90IGluIGRpcmVkLCBub3QgaW4gY3ZzIGFubm90YXRlKQooZGVmZmFjZSBteS1mb250LWxv Y2stdGFiLWZhY2UKICAnKCh0ICg6YmFja2dyb3VuZCAiR29sZCIpKSkKICAiRmFjZSBmb3IgaGln aGxpZ2h0aW5nIHRhYiBjaGFyYWN0ZXJzLiIpCgooZGVmZmFjZSBteS1mb250LWxvY2stdHJhaWxp bmctc3BhY2UtZmFjZQogICcoKHQgKDpiYWNrZ3JvdW5kICJMZW1vbkNoaWZmb24iKSkpCiAgIkZh Y2UgZm9yIGhpZ2hsaWdodGluZyB0cmFpbGluZyBzcGFjZXMuIikKCihkZWZmYWNlIG15LWZvbnQt bG9jay1sb25nLWxpbmUtZmFjZQogICcoKHQgKDpiYWNrZ3JvdW5kICJsYXZlbmRlciIpKSkKICAi RmFjZSBmb3IgaGlnaGxpZ2h0aW5nIGxvbmcgbGluZXMuIikKCjs7IHdhcm5pbmcgZm9udCBsb2Nr ICg4MCBjb2x1bW5zLCB0YWJzLCB0cmFpbGluZyBzcGFjZXMpCihkZWZ2YXIgZm9udC1sb2NrLWtl eXdvcmRzIG5pbCkKKGFkZC1ob29rICdmb250LWxvY2stbW9kZS1ob29rCiAgICAgICAgICAnKGxh bWJkYSAoKQogICAgICAgICAgICAgKHNldHEgZm9udC1sb2NrLWtleXdvcmRzCiAgICAgICAgICAg ICAgICAgICAoYXBwZW5kIGZvbnQtbG9jay1rZXl3b3JkcwogICAgICAgICAgICAgICAgICAgICAg ICAgICAnKAo7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiXi5cXHs4MSxcXH0kIgo7 OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCAnbXktZm9udC1sb2NrLWxvbmctbGlu ZS1mYWNlIHQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiXHQrIgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoMCAnbXktZm9udC1sb2NrLXRhYi1mYWNlIHQpKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgiWyBcdF0rJCIKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKDAgJ215LWZvbnQtbG9jay10cmFpbGluZy1zcGFjZS1mYWNlIHQpKSkpKSkpCgo7OyAo bXktYWRkLXRvLWxvYWQtcGF0aAo7OyAgIkQ6L3VzZXJzL3NoYXJlL2VtYWNzL3NpdGUtbGlzcC94 LXN5bWJvbC9saXNwL3gtc3ltYm9sLyIpCgoKOzs7IC0tLS1bIDE4LjUgKGluZm8gIihlbWFjcylT Y3JvbGxpbmciKQoKOzsgc2Nyb2xsIGxpbmUgYnkgbGluZQooc2V0cSBzY3JvbGwtc3RlcCAxKQoK OzsgYmV0dGVyIHNjcm9sbGluZyBpbiBFbWFjcwood2hlbiAodHJ5LXJlcXVpcmUgJ3BhZ2VyKQog ICAgKGdsb2JhbC1zZXQta2V5IFsobWV0YSB2KV0gJ3BhZ2VyLXBhZ2UtdXApCiAgICAoZ2xvYmFs LXNldC1rZXkgW3ByaW9yXSAncGFnZXItcGFnZS11cCkKICAgIChnbG9iYWwtc2V0LWtleSBbKGNv bnRyb2wgdildICdwYWdlci1wYWdlLWRvd24pCiAgICAoZ2xvYmFsLXNldC1rZXkgW25leHRdICdw YWdlci1wYWdlLWRvd24pCiAgICAoZ2xvYmFsLXNldC1rZXkgWyhtZXRhIHVwKV0gJ3BhZ2VyLXJv dy11cCkKICAgIChHTlVFbWFjcyAoZ2xvYmFsLXNldC1rZXkgJ1sobWV0YSBrcC04KV0gJ3BhZ2Vy LXJvdy11cCkpCiAgICAoZ2xvYmFsLXNldC1rZXkgWyhtZXRhIGRvd24pXSAncGFnZXItcm93LWRv d24pCiAgICAoR05VRW1hY3MgKGdsb2JhbC1zZXQta2V5ICdbKG1ldGEga3AtMildICdwYWdlci1y b3ctZG93bikpKQoKCjs7OyAtLS0tWyAxOC44IChpbmZvICIoZW1hY3MpVXNlbGVzcyBXaGl0ZXNw YWNlIikKCihkZWZ1biBteS1kZWxldGUtdHJhaWxpbmctd2hpdGVzcGFjZXMtYW5kLXVudGFiaWZ5 ICgpCiAgIkRlbGV0ZSBhbGwgdGhlIHRyYWlsaW5nIHdoaXRlIHNwYWNlcywgYW5kIGNvbnZlcnQg YWxsIHRhYnMgdG8gbXVsdGlwbGUKc3BhY2VzIGFjcm9zcyB0aGUgY3VycmVudCBidWZmZXIuIgog IChpbnRlcmFjdGl2ZSAiKiIpCiAgKGRlbGV0ZS10cmFpbGluZy13aGl0ZXNwYWNlIChwb2ludC1t aW4pIChwb2ludC1tYXgpKQogICh1bnRhYmlmeSAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpCgoK Ozs7IC0tLS1bIDE4LjExIChpbmZvICIoZW1hY3MpT3B0aW9uYWwgTW9kZSBMaW5lIikgRmVhdHVy ZXMKCjs7IHNob3cgdGhlIGxpbmUgbnVtYmVyIGluIGVhY2ggbW9kZSBsaW5lCihsaW5lLW51bWJl ci1tb2RlIDEpCgo7OyBzaG93IHRoZSBjb2x1bW4gbnVtYmVyIGluIGVhY2ggbW9kZSBsaW5lCihj b2x1bW4tbnVtYmVyLW1vZGUgMSkKCjs7IGVuYWJsZSBkaXNwbGF5IG9mIHRpbWUgKDAgPD0gaGgg PD0gMjMpIGluIG1vZGUgbGluZQooc2V0cSBkaXNwbGF5LXRpbWUtMjRoci1mb3JtYXQgdCkKKGRp c3BsYXktdGltZSkKCjs7IHVzZSBpbmFjdGl2ZSBmYWNlIGZvciBtb2RlLWxpbmUgaW4gbm9uLXNl bGVjdGVkIHdpbmRvd3MKKHNldHEgbW9kZS1saW5lLWluLW5vbi1zZWxlY3RlZC13aW5kb3dzIHQp Cgo7OyBjb2RlIGZvciBpbmNsdWRpbmcgYWJicmV2aWF0ZWQgZmlsZSBwYXRocyBpbiBtb2RlIGxp bmUKKEdOVUVtYWNzCiAgICAod2hlbiAodHJ5LXJlcXVpcmUgJ21vZGUtbGluZSkKICAgICAgICAo bW9kZS1saW5lLXRvZ2dsZS1kaXNwbGF5IG5pbCkpKQoKCjs7OyAtLS0tWyAxOC4xMiBIb3cgKGlu Zm8gIihlbWFjcylUZXh0IERpc3BsYXkiKWVkCgo7OyBjb252ZXJ0IGEgYnVmZmVyIGZyb20gRE9T IF5NIGVuZCBvZiBsaW5lcyB0byBVbml4IGVuZCBvZiBsaW5lcwooZGVmdW4gZG9zLXRvLXVuaXgg KCkKICAiQ3V0IGFsbCB2aXNpYmxlIF5NLiIKICAoaW50ZXJhY3RpdmUpCiAgKHNhdmUtZXhjdXJz aW9uCiAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgKHdoaWxlIChzZWFyY2gtZm9yd2Fy ZCAiXHIiIG5pbCB0KQogICAgICAocmVwbGFjZS1tYXRjaCAiIikpKSkKCihnbG9iYWwtc2V0LWtl eSBbKGNvbnRyb2wgYykgKGQpXSAnZG9zLXRvLXVuaXgpCgo7OyBjb252ZXJ0IGEgYnVmZmVyIGZy b20gVW5peCBlbmQgb2YgbGluZXMgdG8gRE9TIF5NIGVuZCBvZiBsaW5lcwooZGVmdW4gdW5peC10 by1kb3MgKCkKICAoaW50ZXJhY3RpdmUpCiAgKHNhdmUtZXhjdXJzaW9uCiAgICAoZ290by1jaGFy IChwb2ludC1taW4pKQogICAgKHdoaWxlIChzZWFyY2gtZm9yd2FyZCAiXG4iIG5pbCB0KQogICAg ICAocmVwbGFjZS1tYXRjaCAiXHJcbiIpKSkpCgo7OyBCYWQgaW50ZXJhY3Rpb24gd2l0aCBDVlNO VC9kaWZmLy4uLiAobm90IHlldCB1bmRlcnN0b29kKQo7OyA7OyBSZW1vdmUgb3IgY29udmVydCB0 cmFpbGluZyBjdHJsLU0KOzsgKGRlZnVuIHJlbW92ZS10cmFpbGluZy1jdHJsLU0gKCkKOzsgICAi UHJvcG9zZSB0byByZW1vdmUgdHJhaWxpbmcgXk0gZnJvbSBhIGZpbGUuIgo7OyAgIChpbnRlcmFj dGl2ZSkKOzsgICAoc2F2ZS1leGN1cnNpb24KOzsgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikp Cjs7ICAgICAoaWYgKGFuZCAobm90IChzdHJpbmctbWF0Y2ggIi5neiQiIChidWZmZXItZmlsZS1u YW1lKSkpCjs7ICAgICAgICAgICAgICAoc2VhcmNoLWZvcndhcmQtcmVnZXhwICJcMDE1JCIgbmls IHQpKQo7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzogYSBeTSBp cyBmb3VuZAo7OyAgICAgICAgIChpZiAob3IgKD0gKHByZWNlZGluZy1jaGFyKSA/XF5KKQo7OyAg ICAgICAgICAgICAgICAgKD0gKGZvbGxvd2luZy1jaGFyKSA/XF5KKSApCjs7ICAgICAgICAgICAg IChpZiAoeS1vci1uLXAgKGZvcm1hdCAiUmVtb3ZlIHRyYWlsaW5nIF5NIGZyb20gJXM/ICIKOzsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXItZmlsZS1uYW1lKSkpCjs7 ICAgICAgICAgICAgICAgICAocHJvZ24gKGdvdG8tY2hhciAocG9pbnQtbWluKSkKOzsgICAgICAg ICAgICAgICAgICAgICAgICAocGVyZm9ybS1yZXBsYWNlICJcMDE1IiAiIiBuaWwgbmlsIG5pbCkK OzsgICAgICAgICAgICAgICAgICAgICAgICAocG9wLW1hcmspCjs7ICAgICAgICAgICAgICAgICAg ICAgICAgKHNhdmUtYnVmZmVyKSkKOzsgICAgICAgICAgICAgICAobWVzc2FnZSAiTm8gdHJhbnNm b3JtYXRpb24uIikpKSkpKQo7OyAoYWRkLWhvb2sgJ2ZpbmQtZmlsZS1ob29rcyAncmVtb3ZlLXRy YWlsaW5nLWN0cmwtTSkKCgo7OzsgLS0tLVsgMTguMTQgVGhlIChpbmZvICIoZW1hY3MpQ3Vyc29y IERpc3BsYXkiKQoKKEdOVUVtYWNzCiAgICA7OyB1c2luZyBjdXJzb3IgY29sb3IgdG8gaW5kaWNh dGUgc29tZSBtb2RlcyAocmVhZC1vbmx5LCBpbnNlcnQgYW5kCiAgICA7OyBvdmVyd3JpdGUgbW9k ZXMpCiAgICAoc2V0cSBoY3otc2V0LWN1cnNvci1jb2xvci1jb2xvciAiIikKICAgIChzZXRxIGhj ei1zZXQtY3Vyc29yLWNvbG9yLWJ1ZmZlciAiIikKCiAgICAoZGVmdW4gaGN6LXNldC1jdXJzb3It Y29sb3ItYWNjb3JkaW5nLXRvLW1vZGUgKCkKICAgICAgIkNoYW5nZSBjdXJzb3IgY29sb3IgYWNj b3JkaW5nIHRvIHNvbWUgbWlub3IgbW9kZXMuIgogICAgICAobGV0ICgoY29sb3IKICAgICAgICAg ICAgIChpZiBidWZmZXItcmVhZC1vbmx5ICJibHVlIgogICAgICAgICAgICAgICAoaWYgb3Zlcndy aXRlLW1vZGUgInJlZCIKICAgICAgICAgICAgICAgICAicmdiOjE1L0ZGLzAwIikpKSkgIDs7IGlu c2VydCBtb2RlCiAgICAgICAgKHVubGVzcyAoYW5kIChzdHJpbmc9IGNvbG9yIGhjei1zZXQtY3Vy c29yLWNvbG9yLWNvbG9yKQogICAgICAgICAgICAgICAgICAgICAoc3RyaW5nPSAoYnVmZmVyLW5h bWUpIGhjei1zZXQtY3Vyc29yLWNvbG9yLWJ1ZmZlcikpCiAgICAgICAgICAoc2V0LWN1cnNvci1j b2xvciAoc2V0cSBoY3otc2V0LWN1cnNvci1jb2xvci1jb2xvciBjb2xvcikpCiAgICAgICAgICAo c2V0cSBoY3otc2V0LWN1cnNvci1jb2xvci1idWZmZXIgKGJ1ZmZlci1uYW1lKSkpKSkKCiAgICAo YWRkLWhvb2sgJ3Bvc3QtY29tbWFuZC1ob29rICdoY3otc2V0LWN1cnNvci1jb2xvci1hY2NvcmRp bmctdG8tbW9kZSkpCgo7OyA7OyBjb25mbGljdHMgd2l0aCB0aGUgYWJvdmUhCjs7ICh3aGVuICh0 cnktcmVxdWlyZSAnd2lkZS1jb2x1bW4pCjs7ICAgICAoc2V0cSB3aWRlLWNvbHVtbi1zdGFydC13 aWR0aCA2MCkKOzsgICAgIChzZXRxIHdpZGUtY29sdW1uLWRlZmF1bHQtY3Vyc29yLWNvbG91ciAi cmdiOjE1L0ZGLzAwIikpCjs7IDs7ICAgIChhZGQtaG9vayAndGV4dC1tb2RlLWhvb2sgJ3dpZGUt Y29sdW1uLW1vZGUpCgoKOzs7IC0tLS1bIFRlbXBvcmFyeSBEaXNwbGF5cwoKKEdOVUVtYWNzCiAg ICAodGVtcC1idWZmZXItcmVzaXplLW1vZGUgdCkpCgo7OyBlbmhhbmNlZCBkaXNwbGF5IG9mIHRl bXBvcmFyeSB3aW5kb3dzIChzdWNoIGFzIGhlbHAgYnVmZmVycykKOzsgKHRyeS1yZXF1aXJlICdz aG93LXRlbXAtYnVmZmVyKSAgW2J1ZyB3aXRoIFhFbWFjcyAyMS41XQoKKG1lc3NhZ2UgIjE4IENv bnRyb2xsaW5nIHRoZSBEaXNwbGF5Li4uIERvbmUiKQoKOzt9fX0KCgo7O3t7eyAtLVsgMTkgKGlu Zm8gIihlbWFjcylTZWFyY2giKWluZyBhbmQgUmVwbGFjZW1lbnQgXS0tLS0tLS0tLS0tLS0tLS0t LS0tCgoobWVzc2FnZSAiMTkgU2VhcmNoaW5nIGFuZCBSZXBsYWNlbWVudC4uLiIpCgo7OzsgLS0t LVsgMTkuNCAoaW5mbyAiKGVtYWNzKVJlZ2V4cCBTZWFyY2giKQoKOzsgbGlzdCB0aGUgaW5wdXQg bGluZSwgZm9sbG93ZWQgYnkgdGhlIGZpcnN0IG5pbmUgc3Vic3RyaW5ncyBtYXRjaGVzLAo7OyB0 byBkZWJ1ZyByZWdleHAgc2VhcmNoZXMgKGluIElFTE0pCjs7IGV4YW1wbGU6IEVMSVNQPiAoc2F2 ZS1leGN1cnNpb24gKHNldC1idWZmZXIgIkJVRkZFUiIpCjs7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHJlLXNlYXJjaC1mb3J3YXJkICJSRUdFWFAiIG5pbCB0KQo7OyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChteS1idWZmZXItbWF0Y2hlZC1zdHJpbmdzKSkKKGRl ZnVuIG15LWJ1ZmZlci1tYXRjaGVkLXN0cmluZ3MgKCkKICAoaW50ZXJhY3RpdmUpCiAgKG1hcGNh ciAnbXktYnVmZmVyLW1hdGNoZWQtc3RyaW5nLW50aCAnKDAgMSAyIDMgNCA1IDYgNyA4IDkpKSkK CihkZWZ1biBteS1idWZmZXItbWF0Y2hlZC1zdHJpbmctbnRoIChuKQogICJSZXR1cm4gdGhlIE50 aCBwYXR0ZXJuLW1hdGNoZWQgc3RyaW5nIGZyb20gdGhlIGN1cnJlbnQgYnVmZmVyIgogIChpZiAo YW5kIChtYXRjaC1iZWdpbm5pbmcgbikgKG1hdGNoLWVuZCBuKSkKICAgICAgKGlmICg+IChtYXRj aC1lbmQgbikgKG1hdGNoLWJlZ2lubmluZyBuKSkKICAgICAgICAgIChidWZmZXItc3Vic3RyaW5n IChtYXRjaC1iZWdpbm5pbmcgbikgKG1hdGNoLWVuZCBuKSkKICAgICAgICAiIikKICAgIG5pbCkp Cgo7OyB0byBidWlsZCBSZWdleHBzIHdpdGggdmlzdWFsIGZlZWRiYWNrLCB1c2UgYHJlLWJ1aWxk ZXInCjs7IG9yIEtpS2ksIGEgUHl0aG9uIFJlZ0V4IEVkaXRvciB1bmRlciBXaW5kb3dzCgoKOzs7 IC0tLS1bIDE5LjYgKGluZm8gIihlbWFjcylTZWFyY2ggQ2FzZSIpCgo7OyBzZWFyY2hlcyBhbmQg bWF0Y2hlcyBzaG91bGQgaWdub3JlIGNhc2UKKHNldHEgY2FzZS1mb2xkLXNlYXJjaCB0KQoKKG1l c3NhZ2UgIjE5IFNlYXJjaGluZyBhbmQgUmVwbGFjZW1lbnQuLi4gRG9uZSIpCgo7O319fQoKCjs7 e3t7IC0tWyAyMCBDb21tYW5kcyBmb3IgKGluZm8gIihlbWFjcylGaXhpdCIpIFR5cG9zIF0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KCihtZXNzYWdlICIyMCBDb21tYW5kcyBmb3IgRml4aW5nIFR5cG9z Li4uIikKCjs7OyAtLS0tWyAyMC40IENoZWNraW5nIGFuZCBDb3JyZWN0aW5nIChpbmZvICIoZW1h Y3MpU3BlbGxpbmciKQoKOzsgdXNlIEdOVSBBc3BlbGwgaW5zdGVhZCBvZiAocG9ydCBvZikgaXNw ZWxsCihzZXRxIGlzcGVsbC1wcm9ncmFtLW5hbWUKICAgICAgKGlmIHJ1bm5pbmctbXMtd2luZG93 cwogICAgICAgICAgIkM6L1Byb2dyYW0gRmlsZXMvQXNwZWxsL2Jpbi9hc3BlbGwuZXhlVE1QIgog ICAgICAgICIvdXNyL2Jpbi9hc3BlbGwiKSkKKG15LWZpbGUtZXhlY3V0YWJsZS1wIGlzcGVsbC1w cm9ncmFtLW5hbWUpCgood2hlbiAoYW5kIGlzcGVsbC1wcm9ncmFtLW5hbWUKICAgICAgICAgICAo ZmlsZS1leGVjdXRhYmxlLXAgaXNwZWxsLXByb2dyYW0tbmFtZSkpCgogICAgKHJlcXVpcmUgJ2lz cGVsbCkKCiAgICA7OyBhc3BlbGwgZXh0ZW5zaW9ucyBzaG91bGQgYmUgdXNlZAogICAgKHNldHEg aXNwZWxsLXJlYWxseS1hc3BlbGwgdCkKCiAgICA7OyByZW1vdmUgdW4taW5zdGFsbGVkIGRpY3Rp b25hcmllcyBmcm9tIHRoZSBkZWZhdWx0IGxpc3QKICAgIDs7IERPRVMgTk9UIFdPUksgSU4gQUxM IENPTlRFWFRTIFlFVCEKICAgIDs7IGFzIGl0IGRvZXMgbm90IGFsd2F5cyBjb25zaWRlciBteSBs aXN0LCBJIGNyZWF0ZWQgLmFsaWFzIGZpbGVzIGZvcgogICAgOzsgbmVkZXJsYW5kcyBhbmQgY2Fz dGVsbGFubwogICAgKHNldHEgaXNwZWxsLWRpY3Rpb25hcnktYWxpc3QKICAgICAgICAgICcoKG5p bCAgICAgICAgICAgICAgICAgICAgOyBkZWZhdWx0IChFbmdsaXNoLmFmZikKICAgICAgICAgICAg ICJbQS1aYS16XSIgIlteQS1aYS16XSIgIlsnXSIgbmlsICgiLUIiKSBuaWwgaXNvLTg4NTktMSkK ICAgICAgICAgICAgKCJhbWVyaWNhbiIgICAgICAgICAgICAgOyBZYW5rZWUgRW5nbGlzaAogICAg ICAgICAgICAgIltBLVphLXpdIiAiW15BLVphLXpdIiAiWyddIiBuaWwgKCItQiIpIG5pbCBpc28t ODg1OS0xKQogICAgICAgICAgICAoImJyaXRpc2giICAgICAgICAgICAgICA7IEJyaXRpc2ggdmVy c2lvbgogICAgICAgICAgICAgIltBLVphLXpdIiAiW15BLVphLXpdIiAiWyddIiBuaWwgKCItQiIg Ii1kIiAiYnJpdGlzaCIpIG5pbCBpc28tODg1OS0xKQogICAgICAgICAgICAoImNhc3RlbGxhbm8i ICAgICAgICAgICA7IFNwYW5pc2ggbW9kZQogICAgICAgICAgICAgIltBLVpcMzAxXDMxMVwzMTVc MzIxXDMyM1wzMzJcMzM0YS16XDM0MVwzNTFcMzU1XDM2MVwzNjNcMzcyXDM3NF0iCiAgICAgICAg ICAgICAiW15BLVpcMzAxXDMxMVwzMTVcMzIxXDMyM1wzMzJcMzM0YS16XDM0MVwzNTFcMzU1XDM2 MVwzNjNcMzcyXDM3NF0iCiAgICAgICAgICAgICAiWy1dIiBuaWwgKCItQiIgIi1kIiAic3Bhbmlz aCIpIG5pbCBpc28tODg1OS0xKQogICAgOzsgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4g bmFtZSBvZiAuYWxpYXMgZmlsZQogICAgICAgICAgICAoImVuZ2xpc2giICAgICAgICAgICAgICAg ICAgICAgIDsgbWFrZSBFbmdsaXNoIGV4cGxpY2l0bHkgc2VsZWN0YWJsZQogICAgICAgICAgICAg IltBLVphLXpdIiAiW15BLVphLXpdIiAiWyddIiBuaWwgKCItQiIpIG5pbCBpc28tODg1OS0xKQog ICAgICAgICAgICAoImZyYW5jYWlzIiAgICAgICAgICAgICAgICAgICAgIDsgRnJhbmNhaXMuYWZm CiAgICAgICAgICAgICAiW0EtWmEtelwzMDBcMzAyXDMwNlwzMDdcMzEwXDMxMVwzMTJcMzEzXDMx NlwzMTdcMzI0XDMzMVwzMzNcMzM0XDM0MFwzNDJcMzQ3XDM1MFwzNTFcMzUyXDM1M1wzNTZcMzU3 XDM2NFwzNzFcMzczXDM3NF0iCiAgICAgICAgICAgICAiW15BLVphLXpcMzAwXDMwMlwzMDZcMzA3 XDMxMFwzMTFcMzEyXDMxM1wzMTZcMzE3XDMyNFwzMzFcMzMzXDMzNFwzNDBcMzQyXDM0N1wzNTBc MzUxXDM1MlwzNTNcMzU2XDM1N1wzNjRcMzcxXDM3M1wzNzRdIgogICAgICAgICAgICAgIlstJ10i IHQgbmlsICJ+bGlzdCIgaXNvLTg4NTktMSkKICAgICAgICAgICAgKCJuZWRlcmxhbmRzIiAgICAg ICAgICAgICAgICAgICA7IE5lZGVybGFuZHMuYWZmCiAgICAgICAgICAgICAiW0EtWmEtelwzMDAt XDMwNVwzMDdcMzEwLVwzMTdcMzIyLVwzMjZcMzMxLVwzMzRcMzQwLVwzNDVcMzQ3XDM1MC1cMzU3 XDM2MVwzNjItXDM2NlwzNzEtXDM3NF0iCiAgICAgICAgICAgICAiW15BLVphLXpcMzAwLVwzMDVc MzA3XDMxMC1cMzE3XDMyMi1cMzI2XDMzMS1cMzM0XDM0MC1cMzQ1XDM0N1wzNTAtXDM1N1wzNjFc MzYyLVwzNjZcMzcxLVwzNzRdIgogICAgICAgICAgICAgIlsnXSIgdCAoIi1DIiAiLWQiICJkdXRj aCIpIG5pbCBpc28tODg1OS0xKSkpCgogICAgOzsgaXNwZWxsCiAgICAoYXV0b2xvYWQgJ2lzcGVs bC13b3JkICJpc3BlbGwiICJDaGVjayB0aGUgc3BlbGxpbmcgb2Ygd29yZCBpbiBidWZmZXIuIiAn dCkKICAgIChhdXRvbG9hZCAnaXNwZWxsLXJlZ2lvbiAiaXNwZWxsIiAiQ2hlY2sgdGhlIHNwZWxs aW5nIG9mIHJlZ2lvbi4iICd0KQogICAgKGF1dG9sb2FkICdpc3BlbGwtYnVmZmVyICJpc3BlbGwi ICJDaGVjayB0aGUgc3BlbGxpbmcgb2YgYnVmZmVyLiIgdCkKCiAgICA7OyBzYXZlIHRoZSBwZXJz b25hbCBkaWN0aW9uYXJ5IHdpdGhvdXQgY29uZmlybWF0aW9uCiAgICAoc2V0cSBpc3BlbGwtc2ls ZW50bHktc2F2ZXAgdCkKCgo7OyAgICAgOzsgY29uc2lkZXIgdXNpbmcgdGhlIGBpc3BlbGwtcGFy c2VyJyB0byBjaGVjayB5b3VyIHRleHQKOzsgICAgIDs7IFdhcm5pbmchIEFzc2lnbm1lbnQgdG8g ZnJlZSB2YXJpYWJsZSBpc3BlbGwtcGFyc2VyISEKOzsgICAgIChhZGQtaG9vayAndGV4LW1vZGUt aG9vawo7OyAgICAgICAgICAgICAgICcobGFtYmRhICgpCjs7ICAgICAgICAgICAgICAgICAgKHNl dHEgaXNwZWxsLXBhcnNlciAndGV4KSkpCgo7OyAgICAgOzsgVE9ETyBQcm9ibGVtcyBpbiAqbWFp bCo6IGNoZWNraW5nIGFsbCB0aGUgaGVhZGVycyEhCjs7ICAgICA7OyB0dXJuIG9uIGZseXNwZWxs IGZvciBhbGwgdGV4dCBtb2Rlcwo7OyAgICAgKGFkZC1ob29rICd0ZXh0LW1vZGUtaG9vawo7OyAg ICAgICAgICAgICAgICcobGFtYmRhICgpCjs7ICAgICAgICAgICAgICAgICAgKGZseXNwZWxsLW1v ZGUgMSkpKQoKOzsgICAgIDs7IHN0YXJ0IEZseXNwZWxsIHdoZW4gZWRpdGluZyBMYVRlWCBzb3Vy Y2UgZmlsZXMKOzsgICAgIChhZGQtaG9vayAnTGFUZVgtbW9kZS1ob29rICdmbHlzcGVsbC1tb2Rl KQoKOzsgICAgIDs7IGlnbm9yZSB0aGUgXGNpdGVwIGFuZCBcY2l0ZXQgY29tbWFuZHMgb2YgdGhl IE5hdEJpYiBiaWJsaW9ncmFwaHkgc3R5bGUKOzsgICAgIChldmFsLWFmdGVyLWxvYWQgImlzcGVs bCIKOzsgICAgICAgJyhsZXQgKChsaXN0IChjYXIgaXNwZWxsLXRleC1za2lwLWFsaXN0cykpKQo7 OyAgICAgICAgICAoYWRkLXRvLWxpc3QgJ2xpc3QgJygiXFxcXGNpdGVbdHBdIiBpc3BlbGwtdGV4 LWFyZy1lbmQpKQo7OyAgICAgICAgICAoc2V0Y2FyIGlzcGVsbC10ZXgtc2tpcC1hbGlzdHMgbGlz dCkpKQoKICAgIDs7IG9uLXRoZS1mbHkgc3BlbGxpbmcgY2hlY2tpbmcKICAgIChhdXRvbG9hZCAn Zmx5c3BlbGwtbW9kZSAiZmx5c3BlbGwiICJPbi10aGUtZmx5IHNwZWxsaW5nIGNoZWNraW5nIiB0 KQoKICAgIDs7IGVuYWJsZSB0aGUgbGlrZW5lc3MgY3JpdGVyaWEKICAgIChzZXRxIGZseXNwZWxs LXNvcnQtY29ycmVjdGlvbnMgbmlsKQoKICAgIDs7CiAgICAoc2V0cSBmbHlzcGVsbC1hdXRvLWNv cnJlY3QtcHJldmlvdXMtd29yZCB0KQoKICAgIDs7IGRhc2ggY2hhcmFjdGVyIChgLScpIGlzIGNv bnNpZGVyZWQgYXMgYSB3b3JkIGRlbGltaXRlcgogICAgKHNldHEgZmx5c3BlbGwtY29uc2lkZXIt ZGFzaC1hcy13b3JkLWRlbGltaXRlci1mbGFnIHQpCgogICAgOzsgc29sdmUgdGhlIHByb2JsZW0g b2Ygd29yZHMgc2VwYXJhdGVkIGJ5IGAtJyBmbGFnZ2VkIGFzIGVycm9uZW91cwogICAgOzsgYnkg cmVtb3ZpbmcgdGhlIGAtJyBmcm9tIHRoZSB2YWx1ZSBvZiBvdGhlcmNoYXJzCiAgICAoZGVmdW4g aXNwZWxsLWdldC1vdGhlcmNoYXJzICgpCiAgICAgIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcg Ii0iICIiIChpc3BlbGwtZ2V0LWRlY29kZWQtc3RyaW5nIDMpKSkKCiAgICAoZGVmdW4gbXktdHVy bi1vbi1mbHlzcGVsbC1mcmVuY2ggKCkKICAgICAgIlVuY29uZGl0aW9uYWxseSB0dXJuIG9uIEZs eXNwZWxsIG1vZGUgKGluIEZyZW5jaCkuIgogICAgICAoaW50ZXJhY3RpdmUpCiAgICAgIChmbHlz cGVsbC1tb2RlIDEpIDs7IGV4dHJhCiAgICAgIChpc3BlbGwtY2hhbmdlLWRpY3Rpb25hcnkgImZy YW5jYWlzIikKICAgICAgKGZseXNwZWxsLWJ1ZmZlcikpIDs7IGV4dHJhCgogICAgKGdsb2JhbC1z ZXQta2V5IFsoc2hpZnQgZjcpXSAnbXktdHVybi1vbi1mbHlzcGVsbC1mcmVuY2gpCgogICAgKGRl ZnVuIG15LXR1cm4tb24tZmx5c3BlbGwtZW5nbGlzaCAoKQogICAgICAiVW5jb25kaXRpb25hbGx5 IHR1cm4gb24gRmx5c3BlbGwgbW9kZSAoaW4gRW5nbGlzaCkuIgogICAgICAoaW50ZXJhY3RpdmUp CiAgICAgIChmbHlzcGVsbC1tb2RlIDEpCiAgICAgIChpc3BlbGwtY2hhbmdlLWRpY3Rpb25hcnkg ImVuZ2xpc2giKQogICAgICAoZmx5c3BlbGwtYnVmZmVyKSkKCiAgICAoZ2xvYmFsLXNldC1rZXkg Wyhjb250cm9sIGY3KV0gJ215LXR1cm4tb24tZmx5c3BlbGwtZW5nbGlzaCkKCiAgICA7OyB0dXJu IGZseXNwZWxsLW1vZGUgb24gW2luc3RlYWQgb2YganVzdCB0b2dnbGluZyB0aGUgbW9kZQogICAg OzsgYnkgY2FsbGluZyBpdCBsaWtlOiAoYWRkLWhvb2sgJ3RleHQtbW9kZS1ob29rICdmbHlzcGVs bC1tb2RlKV0KICAgIChhZGQtaG9vayAnbWVzc2FnZS1tb2RlLWhvb2sgJ215LXR1cm4tb24tZmx5 c3BlbGwtZnJlbmNoKQoKCjs7ICAgICAoZGVmdW4gYWN0aXZhdGUtZmx5c3BlbGwgKCkKOzsgICAg ICAgIlR1cm4gb24gZmx5c3BlbGwtbW9kZSBhbmQgY2FsbCBmbHlzcGVsbC1idWZmZXIuIgo7OyAg ICAgICAoaW50ZXJhY3RpdmUpCjs7ICAgICAgIDs7IFRoaXMgbmV4dCBsaW5lIFJFQUxMWSBzbG93 cyBidWZmZXIgc3dpdGNoaW5nLgo7OyAgICAgICAoZmx5c3BlbGwtbW9kZSkKOzsgICAgICAgKGZs eXNwZWxsLWJ1ZmZlcikpCgo7OyAgICAgKGRlZnZhciBjdXN0b21pc2VkLWhvb2tzLWFsaXN0Cjs7 ICAgICAgICcoZW1hY3MtbGlzcC1tb2RlLWhvb2sKOzsgICAgICAgICBueG1sLW1vZGUtaG9vawo7 OyAgICAgICAgIHB5dGhvbi1tb2RlLWhvb2sKOzsgICAgICAgICBzaC1tb2RlLWhvb2sKOzsgICAg ICAgICB0ZXh0LW1vZGUtaG9vaykKOzsgICAgICAgIkFuIGFsaXN0IG9mIGhvb2tzIHRoYXQgcmVx dWlyZSBjdXN0b21pc2F0aW9ucy4iKQoKOzsgICAgICh1bmxlc3Mgbm9uaW50ZXJhY3RpdmUKOzsg ICAgICAgOzsgQWN0aXZhdGUgZmx5c3BlbGwgZm9yIHZhcmlvdXMgbWFqb3IgbW9kZXMuCjs7ICAg ICAgIChhZGQtaG9vay1saXN0IGN1c3RvbWlzZWQtaG9va3MtYWxpc3QgJ2FjdGl2YXRlLWZseXNw ZWxsKSkKCiAgICA7OyB0dXJuIG9uIGZseXNwZWxsLXByb2ctbW9kZSBpbnN0ZWFkLCBpbiBlbWFj cy1saXNwLW1vZGUsIHB5dGhvbi1tb2RlLAogICAgOzsgYW5kIHNoLW1vZGU/CgoKICAgIChkZWZ1 biBteS10dXJuLW9mZi1mbHlzcGVsbCAoKQogICAgICAiVW5jb25kaXRpb25hbGx5IHR1cm4gb2Zm IEZseXNwZWxsIG1vZGUuIgogICAgICAoaW50ZXJhY3RpdmUpCiAgICAgIChmbHlzcGVsbC1tb2Rl IC0xKSkKCiAgICA7OyBmcm9tIEFsZXggU2Nocm9lZGVyCiAgICAoZGVmdW4gbXktY2hhbmdlLWRp Y3Rpb25hcnkgKCkKICAgICAgIkNoYW5nZSB0aGUgZGljdGlvbmFyeS4iCiAgICAgIChpbnRlcmFj dGl2ZSkKICAgICAgKGxldCAoKGRpY3QgKG9yIGlzcGVsbC1sb2NhbC1kaWN0aW9uYXJ5IGlzcGVs bC1kaWN0aW9uYXJ5KSkpCiAgICAgICAgKHNldHEgZGljdCAoaWYgKHN0cmluZz0gZGljdCAiZnJh bmNhaXMiKSAiYW1lcmljYW4iICJmcmFuY2FpcyIpKQogICAgICAgIChtZXNzYWdlICJTd2l0Y2hl ZCB0byAlUyIgZGljdCkKICAgICAgICAoc2l0LWZvciAwLjQpCiAgICAgICAgKGlzcGVsbC1jaGFu Z2UtZGljdGlvbmFyeSBkaWN0KQogICAgICAgICh3aGVuIGZseXNwZWxsLW1vZGUKICAgICAgICAg IChmbHlzcGVsbC1kZWxldGUtYWxsLW92ZXJsYXlzKSkpKQoKICAgIDs7IGtleSBiaW5kaW5ncwog ICAgKGdsb2JhbC1zZXQta2V5IFsobWV0YSAkKV0gJ2lzcGVsbC13b3JkKQogICAgKGdsb2JhbC1z ZXQta2V5IFsoZjcpXSAnaXNwZWxsLXdvcmQpCiAgICAoZ2xvYmFsLXNldC1rZXkgWyhzaGlmdCBm NyldICdteS1jaGFuZ2UtZGljdGlvbmFyeSkKICAgIChnbG9iYWwtc2V0LWtleSBbKGNvbnRyb2wg ZjcpXSAnaXNwZWxsLWNoYW5nZS1kaWN0aW9uYXJ5KQoKOzsgOzsqIGZseXNwZWxsIGNvbW1lbnRz IGFuZCBzdHJpbmdzIGluIHByb2dyYW1taW5nIG1vZGVzCjs7IDs7IEZyb206ICJTdGVmYW4gTW9u bmllciA8Zm9vIEAgYWNtLmNvbT4iCjs7IChkZWZ1biBmbHlzcGVsbC1nZW5lcmljLXByb2dtb2Rl LXZlcmlmeSAoKQo7OyAgICJVc2VkIGZvciBgZmx5c3BlbGwtZ2VuZXJpYy1jaGVjay13b3JkLXAn IGluIHByb2dyYW1taW5nIG1vZGVzLiIKOzsgICAobGV0ICgoZiAoZ2V0LXRleHQtcHJvcGVydHkg KHBvaW50KSAnZmFjZSkpKQo7OyAgICAgKG1lbXEgZiAnKGZvbnQtbG9jay1jb21tZW50LWZhY2Ug Zm9udC1sb2NrLXN0cmluZy1mYWNlKSkpKQo7OyAoZGVmdW4gZmx5c3BlbGwtcHJvZy1tb2RlICgp Cjs7ICAgIlR1cm4gb24gYGZseXNwZWxsLW1vZGUnIGZvciBjb21tZW50cyBhbmQgc3RyaW5ncy4i Cjs7ICAgKGludGVyYWN0aXZlKQo7OyAgIChzZXRxIGZseXNwZWxsLWdlbmVyaWMtY2hlY2std29y ZC1wICdmbHlzcGVsbC1nZW5lcmljLXByb2dtb2RlLXZlcmlmeSkKOzsgICAoZmx5c3BlbGwtbW9k ZSAxKSkKOzsgKGFkZC1ob29rICdjLW1vZGUtY29tbW9uLWhvb2sgJ2ZseXNwZWxsLXByb2ctbW9k ZSB0KQo7OyAoYWRkLWhvb2sgJ2phdmEtbW9kZS1jb21tb24taG9vayAnZmx5c3BlbGwtcHJvZy1t b2RlIHQpCgogICAgKGFkZC1ob29rICdlbWFjcy1saXNwLW1vZGUtaG9vayAnZmx5c3BlbGwtcHJv Zy1tb2RlKQoKOzsgTGFUZVgtc2Vuc2l0aXZlIHNwZWxsIGNoZWNraW5nCihzZXRxIGlzcGVsbC1l bmFibGUtdGV4LXBhcnNlciB0KQoKOzsgPiBKJ2FpIGlzcGVsbC1tYXliZS1maW5kLWFzcGVsbGUt ZGljdGlvbm5hcmllcyCroFN5bWJvbCBkZWZpbml0aW9uCjs7ID4gZnVuY3Rpb24gaXMgdm9pZKC7 IOAgY2hhcXVlIGxhbmNlbWVudCBkZSBmbHlzcGVsbC4uLgo7OyBPdWksIGMnZXN0IGxlIHBhY2th Z2UgZGljdGlvbmFyaWVzLWNvbW1vbiBkZSBEZWJpYW4gcXVpIGluc3RhbGxlIHVuCjs7IGlzcGVs bC5lbCB0cm9wIHZpZXV4IGRhbnMgZW1hY3Mtc25hcHNob3QsIGV0IOdhIHByb3ZvcXVlIGNlIGJ1 Zy4KCgogICAgOzsgVE9ETyBUYWtlIGEgbG9vayBhdCBkaWN0aW9uIChncmFtbWFyKQopCgoKOzsg IChhZGQtdG8tbGlzdCAnbW0tY2hhcnNldC1zeW5vbnltLWFsaXN0ICcoaXNvODg1OS0xNSAuIGlz by04ODU5LTE1KSkKCjs7e3t7IERpY3Rpb25hcnkKCih3aGVuICh0cnktcmVxdWlyZSAnZGljdGlv bmFyeSkKICAgIChsb2FkICJkaWN0aW9uYXJ5LWluaXQiKQoKICAgIDs7IGNvbm5lY3QgdmlhIGEg SFRUUCBwcm94eSAodXNpbmcgdGhlIENPTk5FQ1QgY29tbWFuZCkKICAgIChzZXRxIGRpY3Rpb25h cnktdXNlLWh0dHAtcHJveHkgbmlsKQoKICAgIDs7IG5hbWUgb2YgdGhlIEhUVFAgcHJveHkgdG8g dXNlCiAgICAoc2V0cSBkaWN0aW9uYXJ5LXByb3h5LXNlcnZlciAicHJveHkiKQoKICAgIDs7IHBv cnQgb2YgdGhlIHByb3h5IHNlcnZlcgogICAgKHNldHEgZGljdGlvbmFyeS1wcm94eS1wb3J0IDgw KQoKICAgIDs7IGtleSBiaW5kaW5ncyB0byBpbnZva2UgdGhlIGRpY3Rpb25hcnkgY2xpZW50CiAg ICAoZ2xvYmFsLXNldC1rZXkgWyhjb250cm9sIGMpIChzKV0gJ2RpY3Rpb25hcnktc2VhcmNoKQog ICAgKGdsb2JhbC1zZXQta2V5IFsoY29udHJvbCBjKSAobSldICdkaWN0aW9uYXJ5LW1hdGNoLXdv cmRzKQoKICAgIDs7IDs7IHBvcHVwIG1lbnUKICAgIDs7IChHTlVFbWFjcwogICAgOzsgICAgIChn bG9iYWwtc2V0LWtleSBbbW91c2UtM10gJ2RpY3Rpb25hcnktbW91c2UtcG9wdXAtbWF0Y2hpbmct d29yZHMpKQogICAgOzsgKFhFbWFjcwogICAgOzsgICAgIChnbG9iYWwtc2V0LWtleSBbKGNvbnRy b2wgYnV0dG9uMyldCiAgICA7OyAgICAgICAgICAgICAgICAgICAgICdkaWN0aW9uYXJ5LW1vdXNl LXBvcHVwLW1hdGNoaW5nLXdvcmRzKSkKICAgIDs7CiAgICA7OyA7OyBXb3JkTmV0IHRvb2wtdGlw IHN1cHBvcnQgKGZvciBHTlUgRW1hY3MgMjEpCiAgICA7OyAoc2V0cSBkaWN0aW9uYXJ5LXRvb2x0 aXAtZGljdGlvbmFyeSAid24iKQogICAgOzsKICAgIDs7IDs7IGdsb2JhbCBkaWN0aW9uYXJ5LW1v ZGUKICAgIDs7IChHTlVFbWFjcwogICAgOzsgICAgIChnbG9iYWwtZGljdGlvbmFyeS10b29sdGlw LW1vZGUgMSkpCiAgICA7OwogICAgOzsgOzsgYWN0aXZhdGUgZm9yIGFsbCB0ZXh0LWJhc2VkIG1v ZGVzCiAgICA7OyAoYWRkLWhvb2sgJ3RleHQtbW9kZS1ob29rICdkaWN0aW9uYXJ5LXRvb2x0aXAt bW9kZSkKKQoKKGRlZnVuIG15LWxlbyAod29yZCkKICAoaW50ZXJhY3RpdmUgInNXb3JkOiAiKQog IChicm93c2UtdXJsIChmb3JtYXQgImh0dHA6Ly9kaWN0Lmxlby5vcmcvP3NlYXJjaD0lcyIgd29y ZCkpKQoKOzt9fX0KCihtZXNzYWdlICIyMCBDb21tYW5kcyBmb3IgRml4aW5nIFR5cG9zLi4uIERv bmUiKQoKOzt9fX0KCgo7O3t7eyAtLVsgMjEgS2V5Ym9hcmQgTWFjcm9zIF0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCihtZXNzYWdlICIyMSBLZXlib2FyZCBN YWNyb3MuLi4iKQoKOzs7IC0tLS1bIDIxLjEgQmFzaWMgVXNlCgo7OyBleGVjdXRlIHRoZSBtb3N0 IHJlY2VudCBrZXlib2FyZCBtYWNybwooZ2xvYmFsLXNldC1rZXkgWyhmOCldICdjYWxsLWxhc3Qt a2JkLW1hY3JvKQoKOzsgYXNzaWduIGEgbmFtZSB0byB0aGUgbGFzdCBrZXlib2FyZCBtYWNybyBk ZWZpbmVkCihnbG9iYWwtc2V0LWtleSBbKHNoaWZ0IGY4KV0gJ25hbWUtbGFzdC1rYmQtbWFjcm8p Cgo7OyBpbnNlcnQgaW4gdmlzaXRlZCBidWZmZXIgdGhlIGRlZmluaXRpb24gb2YgYSBuYW1lZCBr YmQgbWFjcm8KKGdsb2JhbC1zZXQta2V5IFsoY29udHJvbCBmOCldICdpbnNlcnQta2JkLW1hY3Jv KQoKKG1lc3NhZ2UgIjIxIEtleWJvYXJkIE1hY3Jvcy4uLiBEb25lIikKCjs7fX19Cgo7O319fQoK Cjs7e3t7IE1ham9yIFN0cnVjdHVyZXMgb2YgRW1hY3MgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKCjs7e3t7IC0tWyAyMiAoaW5mbyAiKGVtYWNzKUZpbGVzIikg SGFuZGxpbmcgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCihtZXNzYWdlICIyMiBG aWxlcyBIYW5kbGluZy4uLiIpCgo7OzsgLS0tLVsgMjIuMiBWaXNpdGluZyBGaWxlcwoKOzsgY2hh bmdlIHRoZSBkZWZhdWx0IGRpcmVjdG9yeSAoaWYgaXQgZXhpc3RzKQo7OyAoaXQgaXMgYWxzbyB0 aGUgZGVmYXVsdCBkaXJlY3Rvcnkgd2hlbiBhdHRhY2hpbmcgZmlsZXMgdG8gbWFpbHMpCihzZXRx IG15LWRlZmF1bHQtZGlyCiAgICAgIChjb25kICh0CiAgICAgICAgICAgICAifi8iKSkpCgooaWYg KGZpbGUtZGlyZWN0b3J5LXAgbXktZGVmYXVsdC1kaXIpCiAgICAoY2QgbXktZGVmYXVsdC1kaXIp CiAgKGNkIChnZXRlbnYgIkhPTUUiKSkpCgo7OyBvcGVuIG15IEVtYWNzIGluaXQgZmlsZQooZGVm dW4gbXktb3Blbi1kb3QtZW1hY3MgKCkKICAiT3BlbmluZyB+Ly5lbWFjcyIKICAoaW50ZXJhY3Rp dmUpCiAgKGZpbmQtZmlsZSAifi8uZW1hY3MiKSkKKGdsb2JhbC1zZXQta2V5IFsoc2hpZnQgZjMp XSAnbXktb3Blbi1kb3QtZW1hY3MpCgo7OyBvcGVuIG15IEdudXMgQ29uZmlndXJhdGlvbiBGaWxl CihkZWZ1biBteS1vcGVuLWRvdC1nbnVzICgpCiAgIk9wZW5pbmcgfi8uZ251cyIKICAoaW50ZXJh Y3RpdmUpCiAgKGZpbmQtZmlsZSAifi8uZ251cyIpKQooZ2xvYmFsLXNldC1rZXkgWyhjb250cm9s IGYzKV0gJ215LW9wZW4tZG90LWdudXMpCgoKOzs7IC0tLS1bIDIyLjMgU2F2aW5nIEZpbGVzCgo7 OyBtYWtlIHlvdXIgY2hhbmdlcyBwZXJtYW5lbnQKKGdsb2JhbC1zZXQta2V5IFsoZjIpXSAnc2F2 ZS1idWZmZXIpCgo7OyAoYWRkLWhvb2sgJ2FmdGVyLXNhdmUtaG9vawo7OyAgICAgICAgICAgJ2V4 ZWN1dGFibGUtbWFrZS1idWZmZXItZmlsZS1leGVjdXRhYmxlLWlmLXNjcmlwdC1wKQoKOzsgb2Zm ZXIgc2F2ZSBvZiAqc2NyYXRjaCogYnVmZmVyIG9uIGV4aXQKKHNhdmUtZXhjdXJzaW9uCiAgKHNl dC1idWZmZXIgIipzY3JhdGNoKiIpCiAgKHNldHEgYnVmZmVyLWZpbGUtbmFtZSAifi8qc2NyYXRj aCoiKSkKICA7OyAoc2V0cSBidWZmZXItb2ZmZXItc2F2ZSB0KSBkb2VzIG5vdCBoYXZlIGl0cyBp bnRlbmRlZCBlZmZlY3QgaW4gbXkKICA7OyAuZW1hY3MgZmlsZSAoaS5lLiBgYnVmZmVyLW9mZmVy LXNhdmUnIHN0aWxsIGhhcyBpdHMgZ2xvYmFsIGRlZmF1bHQKICA7OyB2YWx1ZSBvZiBuaWwgaW4g dGhlICpzY3JhdGNoKiBidWZmZXIpLiBCdXQgaWYgSSBpbW1lZGlhdGVseSBldmFsdWF0ZSBpdAog IDs7IGluIHRoZSAqc2NyYXRjaCogYnVmZmVyLCBpdCB3b3Jrcy4KICA7OyBUaGF0IGlzIGJlY2F1 c2UgYXQgc3RhcnR1cCwgRW1hY3Mgc2V0cyB0aGUgbWFqb3IgbW9kZSBvZiBgKnNjcmF0Y2gqJwog IDs7IGFjY29yZGluZyB0byBgaW5pdGlhbC1tYWpvci1tb2RlJywgX2FmdGVyXyBteSAuZW1hY3Mg aXMgcmVhZC4gIENoYW5naW5nCiAgOzsgbWFqb3IgbW9kZXMga2lsbHMgYWxsIGxvY2FsIHZhcmlh YmxlcyB0aGF0IGFyZSBub3QgcGVybWFuZW50bHkgbG9jYWwsCiAgOzsgaW5jbHVkaW5nIGBidWZm ZXItb2ZmZXItc2F2ZScuCgo7OyBlbnN1cmUgYSBmaWxlIGVuZHMgaW4gYSBuZXdsaW5lIHdoZW4g aXQgaXMgc2F2ZWQKKHNldHEgcmVxdWlyZS1maW5hbC1uZXdsaW5lIHQpCgo7OyBkaXJlY3Rvcnkg dXNlZCBmb3IgdGVtcG9yYXJ5IGZpbGVzCihYRW1hY3MKICAgIChzZXRxIHRlbXBvcmFyeS1maWxl LWRpcmVjdG9yeSAob3IgKGdldGVudiAiVEVNUCIpICIvdG1wLyIpKSkKCjs7IG9uZSBhbm5veWFu Y2UgaXMgdGhhdCBFbWFjcyBzY2F0dGVycyBhdXRvc2F2ZSBmaWxlcyAoI2ZvbyMpIGFuZCBiYWNr dXAKOzsgZmlsZXMgKGZvb34pIGFsbCBvdmVyIHRoZSBmaWxlc3lzdGVtLgoKOzsgcHV0IGF1dG9z YXZlIGZpbGVzIChpZSAjZm9vIykgaW4gb25lIHBsYWNlLCAqbm90KiBzY2F0dGVyZWQgYWxsIG92 ZXIgdGhlCjs7IGZpbGUgc3lzdGVtISAoVGhlIGBtYWtlLWF1dG9zYXZlLWZpbGUtbmFtZScgZnVu Y3Rpb24gaXMgaW52b2tlZCB0bwo7OyBkZXRlcm1pbmUgdGhlIGZpbGVuYW1lIG9mIGFuIGF1dG9z YXZlIGZpbGUuKQoKCjs7IHB1dCBiYWNrdXAgZmlsZXMgKGkuZS4gZm9vfiBvciBmb28ufml+KSBp biBvbmUgcGxhY2UgdG9vCihHTlVFbWFjcwogICAgOzsgcmVnZXhwID0+IGRpcmVjdG9yeSBtYXBw aW5ncwogICAgOzsgZmlsZW5hbWVzIG1hdGNoaW5nIGEgcmVnZXhwIGFyZSBiYWNrZWQgdXAgaW4g dGhlIGNvcnJlc3BvbmRpbmcgZGlyZWN0b3J5CiAgICAoc2V0cSBiYWNrdXAtZGlyZWN0b3J5LWFs aXN0CiAgICAgICAgICAnKCgiLiIgLiAifi8uZW1hY3NfYmFja3Vwcy8iKSkpKSAgOzsgJygoIi4i IC4gIn4vLnNhdmVzIikpCiAgICAgICAgICA7OyBFbWFjcyB3aWxsIG1rZGlyIGl0IGlmIG5lY2Vz c2FyeQoKKFhFbWFjcwogICAgKHJlcXVpcmUgJ2JhY2t1cC1kaXIpCiAgICAobWFrZS12YXJpYWJs ZS1idWZmZXItbG9jYWwgJ2JhY2t1cC1pbmhpYml0ZWQpCiAgICAoc2V0cSBia3VwLWJhY2t1cC1k aXJlY3RvcnktaW5mbwogICAgICAgICAgJygodCAifi8uc2F2ZXMiIG9rLWNyZWF0ZSBmdWxsLXBh dGggcHJlcGVuZC1uYW1lKSkpKQoKOzsgOzsgVGhlIGF1dG8tc2F2ZS5lbCBhbmQgYmFja3VwLmVs IHBhY2thZ2VzIGNvbGxlY3QgZmlsZXMgaW4gb25lIHBsYWNlCjs7IDs7IEkgYWRkZWQgdGhlIGZv bGxvd2luZyB0byBteSBjcm9udGFiOgo7OyA7OyAjIENsZWFudXAgdGhlIGF1dG9zYXZlIGFuZCBi YWNrdXAgZGlyZWN0b3JpZXMgKDI0ICogNyA9IDE2OCkKOzsgOzsgMCA0ICogKiAqIC91c3Ivc2Jp bi90bXB3YXRjaCAxNjggJEhPTUUvLmF1dG9zYXZlICRIT01FLy5iYWNrdXAKOzsgKHdoZW4gKHRy eS1yZXF1aXJlICdhdXRvLXNhdmUpCjs7ICAgKHNldHEgYXV0by1zYXZlLWRpcmVjdG9yeSAifi8u YXV0b3NhdmUvIikKOzsgICA7OyBOb3cgdGhhdCB3ZSBoYXZlIGF1dG8tc2F2ZS10aW1lb3V0LCBs ZXQncyBjcmFuayB0aGlzIHVwCjs7ICAgOzsgZm9yIGJldHRlciBpbnRlcmFjdGl2ZSByZXNwb25z ZS4KOzsgICAoc2V0cSBhdXRvLXNhdmUtaW50ZXJ2YWwgMjAwMCkpCjs7ICh0cnktcmVxdWlyZSAn YmFja3VwKQoKOzsgYWx3YXlzIHVzZSBjb3B5aW5nIHRvIGNyZWF0ZSBiYWNrdXAgZmlsZXMgKGRv bid0IGNsb2JiZXIgc3ltbGlua3MpCihzZXRxIGJhY2t1cC1ieS1jb3B5aW5nIHQpCgo7OyBtYWtl IG51bWVyaWMgYmFja3VwIHZlcnNpb25zIHVuY29uZGl0aW9uYWxseQooc2V0cSB2ZXJzaW9uLWNv bnRyb2wgdCkKCjs7IGRlbGV0ZSBleGNlc3MgYmFja3VwIHZlcnNpb25zIHNpbGVudGx5CihzZXRx IGRlbGV0ZS1vbGQtdmVyc2lvbnMgdCkKCjs7IGF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSB0aW1l IHN0YW1wIHN0cmluZyAoZWl0aGVyIFRpbWUtc3RhbXA6IDw+Cjs7IG9yIFRpbWUtc3RhbXA6ICIi IG9jY3VycmluZyB3aXRoaW4gdGhlIGZpcnN0IDggbGluZXMgb2YgYSBmaWxlKSBldmVyeQo7OyB0 aW1lIHlvdSBzYXZlIGEgYnVmZmVyCihhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1z dGFtcCkKKHNldHEgdGltZS1zdGFtcC1mb3JtYXQKICAgICAgIiUzYSAlOnktJTAybS0lMDJkICUw Mkg6JTAyTSAldSBvbiAlcyIpCiAgICAgIDs7IHdlZWtkYXkgeXl5eS1tbS1kZCBoaDptbSB1c2Vy IG9uIHN5c3RlbQoKOzsgaW5zZXJ0IGEgdGltZSBzdGFtcCBzdHJpbmcKKGRlZnVuIG15LWluc2Vy dC10aW1lLXN0YW1wICgpCiAgIkluc2VydCBhIHRpbWUgc3RhbXAuIgogIChpbnRlcmFjdGl2ZSAi KiIpCiAgKGluc2VydCAoZm9ybWF0ICIlcyAlcyAtICVzICVzIgogICAgICAgICAgICAgICAgICBj b21tZW50LXN0YXJ0CiAgICAgICAgICAgICAgICAgIChjdXJyZW50LXRpbWUtc3RyaW5nKQogICAg ICAgICAgICAgICAgICAodXNlci1sb2dpbi1uYW1lKQogICAgICAgICAgICAgICAgICBjb21tZW50 LWVuZCkpKQoKOzt7e3sgUENMLUNWUwoKOzsgYWxsb3cgY29tbWl0IG9uIHdob2xlIGRpcmVjdG9y aWVzCihzZXRxIGN2cy1hbGxvdy1kaXItY29tbWl0IHQpCgo7OyB3aGVuIHRvIHJldXNlIGFuIGV4 aXN0aW5nIGN2cyBidWZmZXIKKHNldHEgY3ZzLXJldXNlLWN2cy1idWZmZXIgJ2Fsd2F5cykgIDs7 IHN1YmRpcgoKOzsgZXhhbWluZQooZ2xvYmFsLXNldC1rZXkgWyhjb250cm9sIHgpICh2KSAoZSld ICdjdnMtZXhhbWluZSkKCjs7IGV4YW1pbmUgd2l0aG91dCBhc2tpbmcgZm9yIGEgZGlyZWN0b3J5 CihnbG9iYWwtc2V0LWtleSBbKGNvbnRyb2wgZjkpXQogICAgICAgICAgICAgICAgJyhsYW1iZGEg KCkKICAgICAgICAgICAgICAgICAgIChpbnRlcmFjdGl2ZSkKICAgICAgICAgICAgICAgICAgIChj dnMtZXhhbWluZSAoZmlsZS1uYW1lLWRpcmVjdG9yeSAoYnVmZmVyLWZpbGUtbmFtZSkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsKSkpCgo7OyBtZXNzYWdlcyB0aGF0IHNob3Vs ZCBiZSBpZ25vcmVkIGJ5IHRoZSBwYXJzZXIKOzsgc2hvdWxkIG9ubHkgQUREIHRoZSBsYXN0IG9u ZSB0byB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBjdnMtcGFyc2UtLi4uCihzZXRxIGN2cy1wYXJzZS1p Z25vcmVkLW1lc3NhZ2VzCiAgICAgICcoIkV4ZWN1dGluZyBzc2gtYXNrcGFzcyB0byBxdWVyeSB0 aGUgcGFzc3dvcmQuKiQiCiAgICAgICAgIi4qUmVtb3RlIGhvc3QgZGVuaWVkIFgxMSBmb3J3YXJk aW5nLiokIgogICAgICAgICIuKi1tIHdyYXBwZXIgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgcmVt b3RlbHkuKiQiKSkKCjs7IGNoYW5nZSB0aGUgQ1ZTIElkIG1hcmtlciB0byByZWZsZWN0IHRoYXQg YSBzb3VyY2UgZmlsZSB3YXMgZWRpdGVkCjs7IChmcm9tIEJyYWR5IE1vbnR6KQooZGVmdW4gbXkt bWFyay1jdnMtbW9kaWZpZWQgKCkKICAiQ2FsbGVkIHdoZW4gYSBmaWxlIGhhcyBjaGFuZ2VkLiBV cGRhdGVzIGFueSBSQ1MgSWQgYW5kIEhlYWRlciBrZXl3b3JkcyBpdApmaW5kcyB0byBzaG93IHRo YXQgdGhlIGZpbGUgaXMgbW9kaWZpZWQuIgogIChsZXQgKChidWZmZXItdW5kby1saXN0IHQpKQog ICAgOyBkb24ndCBsZXQgdGhpcyBjaGFuZ2UgZ2V0IGludG8gdGhlIHVuZG8gbGlzdAogICAgOyBi ZWNhdXNlIG9mIHRoaXMsIHdlIG11c3QgZW5zdXJlIHRoYXQgdGhlIGVkaXQgaXMgaW4tcGxhY2Us IGFuZCBkb2Vzbid0CiAgICA7IG1vdmUgYW55IHRleHQKICAgICh3aGVuIChhbmQgKGJ1ZmZlci1t b2RpZmllZC1wKSAoYm91bmRwICd2Yy1tb2RlKSB2Yy1tb2RlKQogICAgICAoc2F2ZS1leGN1cnNp b24KICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgICAgICh3aGlsZSAocmUtc2Vh cmNoLWZvcndhcmQKICAgICAgICAgICAgICAgIChjb25jYXQgIlxcKFxcJFxcKD86SWRcXHxIZWFk ZXJcXCk6ICIKICAgICAgICAgICAgICAgICAgICAgICAgIlteXCInIzskXSogXFwpXFwoRXhwIFxc JFxcKSIpCiAgICAgICAgICAgICAgbmlsIHQpCiAgICAgICAgICAocmVwbGFjZS1tYXRjaCAiXFwx TW9kICQiIHQpKSkpKSkKCihkZWZhZHZpY2UgYmFzaWMtc2F2ZS1idWZmZXIgKGJlZm9yZSBteS1i YXNpYy1zYXZlLWJ1ZmZlciBmaXJzdCBhY3RpdmF0ZSkKICAobXktbWFyay1jdnMtbW9kaWZpZWQp KQoKKGRlZnVuIHJ1biAoY29tbWFuZCAmb3B0aW9uYWwgdG8tYnVmZmVyKQogICJBIHZhcmlhdGlv biBvZiBzaGVsbC1jb21tYW5kLgpXaXRoIG5vIG9wdGlvbmFsIGFyZ3VtZW50IHRoaXMgcnVucyB0 aGUgY29tbWFuZCBjcmVhdGluZwphIHNwZWNpYWwgYnVmZmVyIHRvIHB1dCB0aGUgb3V0cHV0IGlu LiBUaGUgYnVmZmVyIGlzIG5hbWVkCmFmdGVyIHRoZSBmaXJzdCB3b3JkIGluIHRoZSBjb21tYW5k LgoKVGhlIG9wdGlvbmFsIGFyZ3VtZW50IHRvLWJ1ZmZlciBhbGxvd3MgdGhlIHRhcmdldApidWZm ZXIgdG8gYmUgc3BlY2lmaWVkLgoKV2l0aCB0aGUgaW50ZXJhY3RpdmUtcHJlZml4IHRoZSB0YXJn ZXQgYnVmZmVyIGlzIHRoZQpjdXJyZW50IGJ1ZmZlciAoYXMgaW4gc2hlbGwtY29tbWFuZCkuIgog IChpbnRlcmFjdGl2ZSAobGlzdCAocmVhZC1mcm9tLW1pbmlidWZmZXIgIlNoZWxsIGNvbW1hbmQ6 ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbCBuaWwgbmls ICdzaGVsbC1jb21tYW5kLWhpc3RvcnkpCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQtcHJl Zml4LWFyZykpCiAgKHNoZWxsLWNvbW1hbmQgY29tbWFuZCAob3IgdG8tYnVmZmVyCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGdldC1idWZmZXItY3JlYXRlCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjYXIgKHNwbGl0LXN0cmluZyBjb21tYW5kICIgIikpKSkpKQoKKGRlZnVu IHJ1bi1ldmFsIChjb21tYW5kICZvcHRpb25hbCBmdW5jKQogICJFdmFsdWF0ZSB0aGUgc2hlbGwg Y29tbWFuZCBvcHRpb25hbGx5IHBhc3NpbmcgcmVzdWx0cyB0byBhIGZ1bmN0aW9uLgpXaXRob3V0 IHRoZSBvcHRpb25hbCBmdW5jIHRoaXMgcmV0dXJucyB0aGUgcmVzdWx0IG9mCnJ1bm5pbmcgdGhl IGNvbW1hbmQsIGFzIGEgc3RyaW5nLgoKV2l0aCB0aGUgZnVuY3Rpb24gdGhlIHJlc3VsdHMgb2Yg dGhlIHNoZWxsIGNvbW1hbmQgYXJlIHBhc3NlZCBhcwphIHN0cmluZyB0byB0aGUgZnVuY3Rpb24s IHRoZSB2YWx1ZSBvZiBjYWxsaW5nIHRoZSBmdW5jdGlvbiBpcwpyZXR1cm5lZC4KCklmIHlvdSBz dXBwbHkgZnVuYyB0aGVuIGl0IG11c3QgZWl0aGVyIGJlIGEgZnVuY3Rpb24gdGFraW5nCm9uZSBz dHJpbmcgYXJndW1lbnQgb3IgYSBzdHJpbmcgd2hpY2ggY2FuIGJlIGV2YWx1YXRlZCB0byBhCmZ1 bmN0aW9uIHRha2luZyBvbmUgc3RyaW5nIGFyZ3VtZW50LgoKSW50ZXJhY3RpdmVseSB0aGUgcHJl Zml4IGFyZ3VtZW50IHdpbGwgY2F1c2UgYSBmdW5jdGlvbiB0byBiZQpwcm9tcHRlZCBmb3IuIgog IChpbnRlcmFjdGl2ZSAobGlzdCAocmVhZC1mcm9tLW1pbmlidWZmZXIgIlNoZWxsIGNvbW1hbmQ6 ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbCBuaWwgbmls ICdzaGVsbC1jb21tYW5kLWhpc3RvcnkpCiAgICAgICAgICAgICAgICAgICAgIChpZiBjdXJyZW50 LXByZWZpeC1hcmcKICAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkLWZyb20tbWluaWJ1ZmZl ciAiRnVuY3Rpb246ICIpKSkpCiAgKHdpdGgtdGVtcC1idWZmZXIKICAgIDs7IFRoaXMgdHVybnMg b2ZmIHRoZSBvcGVuIHdpbmRvdyBiZWhhdmlvciBvZiBzaGVsbC1jb21tYW5kCiAgICAobGV0ICgo cG9wLXVwLXdpbmRvd3MgbmlsKSkKICAgICAgKHNoZWxsLWNvbW1hbmQgY29tbWFuZCAoY3VycmVu dC1idWZmZXIpKSkKICAgIChsZXQgKChzdHIgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGll cyAocG9pbnQtbWluKSAoLSAocG9pbnQtbWF4KSAxKSkpKQogICAgICAoY29uZAogICAgICAgKChm dW5jdGlvbnAgZnVuYykKICAgICAgICAoZnVuY2FsbCBmdW5jIHN0cikpCiAgICAgICAoKHN0cmlu Z3AgZnVuYykKICAgICAgICAoZnVuY2FsbCAoZXZhbCAocmVhZCBmdW5jKSkgc3RyKSkKICAgICAg ICgndAogICAgICAgIHN0cikpKSkpCgooZGVmdW4gbWFwLWZpbGVzICh0aHVuayBmaWxlbmFtZS1s aXN0KQogICJSZWFkIGluIGVhY2ggZmlsZSBhcyBhIGJ1ZmZlciBhbmQgZXhlY3V0ZSB0aHVuayBv biB0aGVtLgpJZiBhbnkgZmlsZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IGluIHRoZSBidWZmZXIg bGlzdCB0aGVuIHRoYXQKYnVmZmVyIGlzIGRlc3Ryb3llZCBhZnRlciB0aHVuayBoYXMgYmVlbiBl eGVjdXRlZC4KCklmIGZpbGVuYW1lLWxpc3QgaXMgYSBsaXN0IHRoZW4gaXQncyB1c2VkIGRpcmVj dGx5LCBpZiBpdCdzCmEgc3RyaW5nIHdlIHJ1biBzdHJpbmctdG8td29yZHMgb24gaXQuIgogICht YXBjYXIgKGxhbWJkYSAoZmlsZW5hbWUpCiAgICAgICAgICAgIChpZiAobm90IChnZXQtZmlsZS1i dWZmZXIgZmlsZW5hbWUpKQogICAgICAgICAgICAgICAgKGxldCAoKGJ1ZiAoZmluZC1maWxlIGZp bGVuYW1lKSkpCiAgICAgICAgICAgICAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZgogICAg ICAgICAgICAgICAgICAgIChmdW5jYWxsIHRodW5rKQogICAgICAgICAgICAgICAgICAgIChraWxs LWJ1ZmZlciBidWYpKSkKICAgICAgICAgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciAoZ2V0LWJ1 ZmZlciBmaWxlbmFtZSkKICAgICAgICAgICAgICAgIChmdW5jYWxsIHRodW5rKSkpKQogICAgICAg ICAgKGlmIChsaXN0cCBmaWxlbmFtZS1saXN0KQogICAgICAgICAgICAgIGZpbGVuYW1lLWxpc3QK ICAgICAgICAgICAgKHNwbGl0LXN0cmluZyBmaWxlbmFtZS1saXN0KSkpKQoKOzsgc3dpdGNoIHRo ZSBlbnRpcmUgbW9kdWxlIGZyb20gb25lIGxvY2F0aW9uIHRvIGFub3RoZXIsIHVzaW5nIHRoZSBz YW1lCjs7IGNvZGUgYmFzZSB3aGVuIGJlaW5nIGF0IGRpZmZlcmVudCBwaHlzaWNhbCBzaXRlcwoo ZGVmdW4gbXktY3ZzLWhhY2sgKCkKICAiVG9nZ2xlIHRoZSBDVlMgYmV0d2VlbiBsb2NhbCBhbmQg cmVtb3RlIgogIChpbnRlcmFjdGl2ZSkKICAocnVuLWV2YWwgImZpbmQgLiAtbmFtZSAnUm9vdCci CiAgICAgICAgICAgIChsYW1iZGEgKGxpc3Qtb2YtZmlsZXMpCiAgICAgICAgICAgICAgKG1hcC1m aWxlcyAobGFtYmRhICgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAocmUtc2VhcmNo LWZvcndhcmQgIjpsb2NhbGhvc3Q6IiBuaWwgJ3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAocmVwbGFjZS1tYXRjaCAiOm5ldGZpbml0eToiKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChwcm9nbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlLXNlYXJjaC1m b3J3YXJkICI6bmV0ZmluaXR5OiIgbmlsICd0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHJlcGxhY2UtbWF0Y2ggIjpsb2NhbGhvc3Q6IikpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAoc2F2ZS1idWZmZXIpKQogICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC1vZi1maWxl cykpKSkKCjs7fX19Cgo7O3t7eyBTdWJ2ZXJzaW9uCgo7OyBTdWJ2ZXJzaW9uIGludGVyZmFjZSBm b3IgRW1hY3MKKHdoZW4gKHRyeS1yZXF1aXJlICdwc3ZuKQoKICAgIDs7IGhpZGUgdW5tb2RpZmll ZCBmaWxlcwogICAgKHNldHEgc3ZuLXN0YXR1cy1oaWRlLXVubW9kaWZpZWQgdCkKCiAgICA7OyB1 c2UgbG9uZ2VyIHBocmFzZXMKICAgIChzZXRxIHN2bi1zdGF0dXMtc2hvcnQtbW9kLWZsYWctcCBu aWwpCgogICAgKGRlZmluZS1rZXkgc3ZuLWxvZy1lZGl0LW1vZGUtbWFwIFtmNl0gJ3N2bi1sb2ct ZWRpdC1zdm4tZGlmZikKCiAgICA7OyBleGFtaW5lCiAgICAoZ2xvYmFsLXNldC1rZXkgWyhjb250 cm9sIHgpICh2KSAoZSldICdzdm4tc3RhdHVzKSkKCjs7fX19CgoKOzs7IC0tLS1bIDIyLjQgUmV2 ZXJ0aW5nIGEgQnVmZmVyCgo7OyByZXBsYWNlIGN1cnJlbnQgYnVmZmVyIHRleHQgd2l0aCB0aGUg dGV4dCBvZiB0aGUgdmlzaXRlZCBmaWxlIG9uIGRpc2sKKGRlZnVuIG15LXJldmVydC1idWZmZXIg KCkKICAiVW5jb25kaXRpb25hbGx5IHJldmVydCBidWZmZXIiCiAgKGludGVyYWN0aXZlKQogIChm bGV0ICgoeWVzLW9yLW5vLXAgKG1zZykgdCkpCiAgICAocmV2ZXJ0LWJ1ZmZlcikpKQoKOzsga2V5 IGJpbmRpbmcKKGdsb2JhbC1zZXQta2V5IFsoY29udHJvbCBmMTIpXSAnbXktcmV2ZXJ0LWJ1ZmZl cikKCgo7OzsgLS0tLVsgMjIuNSBBdXRvIFNhdmluZzogUHJvdGVjdGlvbiBBZ2FpbnN0IERpc2Fz dGVycwoKOzsgaG93IHRvIGdldCBFbWFjcyB0byBhdXRvLXNhdmUgdG8geW91ciBsb2NhbCBkaXNr IFsjZmlsZSNdCgo7OyBhdXRvLXNhdmUgZXZlcnkgMTUwIGlucHV0IGV2ZW50cwooc2V0cSBhdXRv LXNhdmUtaW50ZXJ2YWwgMTUwKQoKOzsgYXV0by1zYXZlIGFmdGVyIDE1IHNlY29uZHMgaWRsZSB0 aW1lCihzZXRxIGF1dG8tc2F2ZS10aW1lb3V0IDE1KQoKOzsgQ2hlY2sgb3V0IEtldmluJ3MgZWJh Y2t1cC5lbAo7OyBmb3Igc2F2aW5nIGluIGEgc3BlY2lmaWVkIGNvbW1vbiBkaXJlY3RvcnkgKG5v dCBpbiBsb2NhbCBkaXIpCjs7IGFuZCBoYW5kbGluZyBzYXZpbmcgb2YgYnVmZmVycyB3aXRoIHNw YWNlcyBpbiB0aGVpciBuYW1lLi4uCjs7IChvdGhlcndpc2UsIHByb2JsZW1zIHdoZW4gY29tcG9z aW5nICptYWlsIHJlcGxpZXMgdG8gLi4uKiApCgoKOzs7IC0tLS1bIDIyLjkgQ29tcGFyaW5nIEZp bGVzCgo7OyBlZGlmZiwgYSBjb21wcmVoZW5zaXZlIHZpc3VhbCBpbnRlcmZhY2UgdG8gZGlmZiAm IHBhdGNoCjs7IHNldHVwIGZvciBFZGlmZidzIG1lbnVzIGFuZCBhdXRvbG9hZHMKKHJlcXVpcmUg J2VkaWZmLWhvb2spCgo7OyBydW4gYGRpZmYnIGluIGNvbXBpbGF0aW9uLW1vZGUKKGF1dG9sb2Fk ICdkaWZmLW1vZGUgImRpZmYtbW9kZSIgIkRpZmYgbWFqb3IgbW9kZSIgdCkKCjs7IGFsbG93IHVz ZSBvZiB0aGUgQ29tcG9uZW50U29mdHdhcmUgRGlmZiB0b29sCjs7IChHTlVFbWFjcwo7OyAgICAg KHdoZW4gKHRyeS1yZXF1aXJlICdjc2RpZmYtc2V0dXApCjs7ICAgICAgICAgKHNldHEgY3NkaWZm LXByb2dyYW0KOzsgICAgICAgICAgICAgICAiQzovUHJvZ3JhbSBGaWxlcy9Db21wb25lbnRTb2Z0 d2FyZS9IVE1MRGlmZi9IVE1MRGlmZi5leGUiKSkpCgo7OyBiZWdpbiBpbiBzaWRlIGJ5IHNpZGUg c3BsaXQKOzsgKHNldHEgZWRpZmYtc3BsaXQtd2luZG93LWZ1bmN0aW9uICdzcGxpdC13aW5kb3ct aG9yaXpvbnRhbGx5KQoKCjs7OyAtLS0tWyAyMi4xMSBBY2Nlc3NpbmcgQ29tcHJlc3NlZCBGaWxl cwoKOzsgZWFzeSBlZGl0aW5nIG9mIGFyYy96aXAvem9vL2xoeiBhcmNoaXZlcwooR05VRW1hY3MK ICAgIChyZXF1aXJlICdhcmMtbW9kZSkKCiAgICA7OyB1c2UgdGhlIEN5Z3dpbiBnemlwIHV0aWxp dHkKICAgIChzZXRxIGFyY2hpdmUtemlwLXVzZS1wa3ppcCBuaWwpKSA7OyBubyBlZmZlY3Q/Pz8K Cjs7IHNpbXBsZSBlZGl0aW5nIG9mIHRhciBmaWxlcyBhcyBhIGRpcmVkLWxpa2UgbGlzdGluZyBv ZiBpdHMgY29udGVudHMKKHJlcXVpcmUgJ3Rhci1tb2RlKQoKOzt7e3sgY3J5cHQrKwoKOzsgY29k ZSBmb3IgaGFuZGxpbmcgYWxsIHNvcnRzIG9mIGNvbXByZXNzZWQgYW5kIGVuY3J5cHRlZCBmaWxl cwoodHJ5LXJlcXVpcmUgJ2NyeXB0KyspCgo7OyBhbGxvd3MgeW91IHRvIGVuY3J5cHQvZGVjcnlw dCBmaWxlcyB3aXRoaW4gRW1hY3MuIEkgdXNlIGl0IHJlZ3VsYXJseSBhbmQKOzsgaXQgd29ya3Mg dmVyeSByZWxpYWJseS4gV2hlbiBJIHVzZSBDLXggQy1mIHRvIGFjY2VzcyBhbiBlbmNyeXB0ZWQg ZmlsZSwKOzsgRW1hY3MgYXNrcyBtZSBmb3IgdGhlIHBhc3NwaHJhc2UgYW5kIHRoZW4gZGVjcnlw dHMgdGhlIGZpbGUgYmVmb3JlCjs7IGRpc3BsYXlpbmcgaXQuIFdoZW4gSSBzYXZlIHRoZSBmaWxl LCBFbWFjcyBhdXRvbWF0aWNhbGx5IGVuY3J5cHRzIGl0Cjs7IGFnYWluLgoKOzt9fX0KCihjdXN0 b20tc2V0LXZhcmlhYmxlcwogJyhhdXRvLWNvbXByZXNzaW9uLW1vZGUgdCBuaWwgKGprYS1jb21w cikpKQoKCjs7OyAtLS0tWyAyMi4xMyBSZW1vdGUgRmlsZXMKCjs7e3t7IFRyYW1wIC0gVHJhbnNw YXJlbnQgUmVtb3RlIEFjY2VzcywgTXVsdGlwbGUgUHJvdG9jb2xzCgo7OyAob3RoZXJzIHRoYW4g anVzdCBGVFApCgo7OyBUcmFtcCB3b3JrcyB2ZXJ5IHdlbGwgaW4gTlRFbWFjcyB2MjIsIHdpdGgg UHVUVFkgKHNlZSBgcGxpbmsnIGFuZCBgcHNjcCcpCgo7OyBPbiBtZSBsJ2F2YWl0IGNvbnNlaWxs 6SBpY2kgaWwgeSBhIHF1ZWxxdWVzIG1vaXMgcG91ciB1biBhdXRyZSB1c2FnZSA6Cjs7IHRyYXZh aWxsZXIgZW4gcmVtb3RlIGF2ZWMgdW5lIGxpYWlzb24gbidvZmZyYW50IHBhcyBsYSBwb3NzaWJp bGl06SBkZQo7OyBsJ2V4cG9ydCBkdSBESVNQTEFZLi4uIEplIGwnYWkgbGFyZ2VtZW50IGFkb3B0 6SB0YW50IGNlIG1hY2hpbiBlc3QKOzsgcHJhdGlxdWUuLi4KOzsKOzsgT24gcGV1dCBhdm9pciBh dXRhbnQgZGUgdGFtcG9ucyBxdWUgZCd1dGlsaXNhdGV1cnMgb3UgZGUgbWFjaGluZXMgZXQgZOhz Cjs7IHF1ZSBsYSBzZXNzaW9uIHNzaCAoamUgbCd1dGlsaXNlIOAgdHJhdmVycyBjZWxhKSBlc3Qg dGVybWlu6WUsIGlsCjs7IHJlZGVtYW5kZSBzaW1wbGVtZW50IGxlIG1vdCBkZSBwYXNzZSBldCBj ZWxhIHJlcGFydC4uLgoKOzsgZXhhbXBsZXM6IEMteCBDLWYgL3NzaDpndWVzdHVzZXJAc2hpdmE6 L2hvbWUvZ3Vlc3R1c2VyLy5iYXNoX2hpc3RvcnkKOzsgICAgICAgICAgICAgICAgICAgL3N1ZG86 cm9vdEBsb2NhbGhvc3Q6L2hvbWUvb3RoZXJzLy5iYXNocmMKOzsgdXNlIHNjcHdyYXBwZXIgb24g d2luMzIgdG8gZ2V0IGFyb3VuZCBOVEVtYWNzIHBhdGhzIHZzLiBjeWd3aW4gcGF0aHMKCih3aGVu ICh0cnktcmVxdWlyZSAndHJhbXApCiAgICA7OyBkZWZhdWx0IHRyYW5zZmVyIG1ldGhvZCAoaXNz dWVzIHdpdGggQ3lnd2luIHNzaCkKICAgIChzZXRxIHRyYW1wLWRlZmF1bHQtbWV0aG9kICJzc2gi KSAgOyBzc2h4CgogICAgOzsgZGVmYXVsdCB1c2VyCiAgICAoc2V0cSB0cmFtcC1kZWZhdWx0LXVz ZXIgImZuaSIpCgogICAgOzsgZmFzdGVyIGF1dG8gc2F2ZXMKICAgIChzZXRxIHRyYW1wLWF1dG8t c2F2ZS1kaXJlY3RvcnkgdGVtcG9yYXJ5LWZpbGUtZGlyZWN0b3J5KQoKICAgIDs7IGhlbHAgZGVi dWdnaW5nCiAgICAoc2V0cSB0cmFtcC12ZXJib3NlIDkpCiAgICAoc2V0cSB0cmFtcC1kZWJ1Zy1i dWZmZXIgdCkKCjs7IEFmdGVyIGFkZGluZwo7OyAoc2V0cSBjb2Rpbmctc3lzdGVtLWZvci1yZWFk ICd1dGYtOCkKOzsgKHNldHEgY29kaW5nLXN5c3RlbS1mb3Itd3JpdGUgJ3V0Zi04KQo7OyB0byBt eSAuZW1hY3MsIHRyYW1wIHdvcmtzIGNvcnJlY3RseSB3aXRoIFVURi04IGZpbGVzLgoKOzsgbmV3 IHByb3h5IHN5c3RlbSAoaW5zdGVhZCBvZiB0aGUgb2xkIG11bHRpLWhvcCBmaWxlbmFtZSBzeW50 YXgpCjs7IEZvciBpbnN0YW5jZSwgdGhlcmUgYXJlIHR3byBtYWNoaW5lcyAoImphaWwxIiwgIndl YjIiKSB0aGF0IEkgY2FuIG9ubHkKOzsgYWNjZXNzIGJ5IGZpcnN0IHNzaCdpbmcgdG8gYSB0aGly ZCAoImphbnVzIikuCjs7Cjs7ICAgICAgKGFkZC10by1saXN0ICd0cmFtcC1kZWZhdWx0LXByb3hp ZXMtYWxpc3QKOzsgICAgICAgICAgICAgICAgICAgJygiamFpbDFcXHx3ZWIyIiAia2lyayIgIi9z c2g6a2lya0BqYW51czoiKSkKOzsKOzsgVGhlbiB5b3UgY2FuIHNpbXBseSBhY2Nlc3MgIi9qYWls MToiIG9yICIvd2ViMjoiLCBnaXZlbgo7OyB0cmFtcC1kZWZhdWx0LW1ldGhvZCBpcyBzZXQgdG8g InNzaCIsIGFuZCB0cmFtcC1kZWZhdWx0LXVzZXIgaXMgc2V0IHRvCjs7ICJraXJrIi4KOzsgVGhl IHRyaWNrIGlzIHRvIHRoaW5rIGZyb20gdGhlIGVuZC4KCjs7e3t7IE9wZW4gYSBmaWxlIGFzIHJv b3QsIGVhc2lseSBbZnJvbSBBbGV4IFNjaHJvZGVyXQoKICAgIChkZWZ2YXIgZmluZC1maWxlLXJv b3QtcHJlZml4ICIvc3Vkbzpyb290QGxvY2FsaG9zdDoiCiAgICAgICIqVGhlIGZpbGVuYW1lIHBy ZWZpeCB1c2VkIHRvIG9wZW4gYSBmaWxlIHdpdGggYGZpbmQtZmlsZS1yb290Jy4KICAgICAgVGhp cyBzaG91bGQgbG9vayBzb21ldGhpbmcgbGlrZSBcIi9zdWRvOnJvb3RAbG9jYWxob3N0OlwiIChu ZXcgc3R5bGUKICAgICAgVFJBTVApIG9yIFwiL1tzdWRvOnJvb3RAbG9jYWxob3N0XS9cIiAoWEVt YWNzIG9yIG9sZCBzdHlsZSBUUkFNUCkuIikKCiAgICAoZGVmdmFyIGZpbmQtZmlsZS1yb290LWhp c3RvcnkgbmlsCiAgICAgICJIaXN0b3J5IGxpc3QgZm9yIGZpbGVzIGZvdW5kIHVzaW5nIGBmaW5k LWZpbGUtcm9vdCcuIikKCiAgICAoZGVmdmFyIGZpbmQtZmlsZS1yb290LWhvb2sgbmlsCiAgICAg ICJOb3JtYWwgaG9vayBmb3IgZnVuY3Rpb25zIHRvIHJ1biBhZnRlciBmaW5kaW5nIGEgXCJyb290 XCIgZmlsZS4iKQoKICAgIChkZWZ1biBmaW5kLWZpbGUtcm9vdCAoKQogICAgICAiKk9wZW4gYSBm aWxlIGFzIHRoZSByb290IHVzZXIuCiAgICAgIFByZXBlbmRzIGBmaW5kLWZpbGUtcm9vdC1wcmVm aXgnIHRvIHRoZSBzZWxlY3RlZCBmaWxlIG5hbWUgc28gdGhhdCBpdAogICAgICBtYXliZSBhY2Nl c3NlZCB2aWEgdGhlIGNvcnJlc3BvbmRpbmcgdHJhbXAgbWV0aG9kLiIKCiAgICAgIChpbnRlcmFj dGl2ZSkKICAgICAgKHJlcXVpcmUgJ3RyYW1wKQogICAgICAobGV0KiAoOzsgV2UgYmluZCB0aGUg dmFyaWFibGUgYGZpbGUtbmFtZS1oaXN0b3J5JyBsb2NhbGx5IHNvIHdlIGNhbgogICAgICAgICAg ICAgOzsgdXNlIGEgc2VwYXJhdGUgaGlzdG9yeSBsaXN0IGZvciAicm9vdCIgZmlsZXMuCiAgICAg ICAgICAgICAoZmlsZS1uYW1lLWhpc3RvcnkgZmluZC1maWxlLXJvb3QtaGlzdG9yeSkKICAgICAg ICAgICAgIChuYW1lIChvciBidWZmZXItZmlsZS1uYW1lIGRlZmF1bHQtZGlyZWN0b3J5KSkKICAg ICAgICAgICAgICh0cmFtcCAoYW5kICh0cmFtcC10cmFtcC1maWxlLXAgbmFtZSkKICAgICAgICAg ICAgICAgICAgICAgICAgICh0cmFtcC1kaXNzZWN0LWZpbGUtbmFtZSBuYW1lKSkpCiAgICAgICAg ICAgICBwYXRoIGRpciBmaWxlKQoKICAgICAgICA7OyBJZiBjYWxsZWQgZnJvbSBhICJyb290IiBm aWxlLCB3ZSBuZWVkIHRvIGZpeCB1cCB0aGUgcGF0aC4KICAgICAgICAod2hlbiB0cmFtcAogICAg ICAgICAgKHNldHEgcGF0aCAodHJhbXAtZmlsZS1uYW1lLXBhdGggdHJhbXApCiAgICAgICAgICAg ICAgICBkaXIgKGZpbGUtbmFtZS1kaXJlY3RvcnkgcGF0aCkpKQoKICAgICAgICAod2hlbiAoc2V0 cSBmaWxlIChyZWFkLWZpbGUtbmFtZSAiRmluZCBmaWxlIChVSUQgPSAwKTogIiBkaXIgcGF0aCkp CiAgICAgICAgICAoZmluZC1maWxlIChjb25jYXQgZmluZC1maWxlLXJvb3QtcHJlZml4IGZpbGUp KQogICAgICAgICAgOzsgSWYgdGhpcyBhbGwgc3VjY2VlZGVkIHNhdmUgb3VyIG5ldyBoaXN0b3J5 IGxpc3QuCiAgICAgICAgICAoc2V0cSBmaW5kLWZpbGUtcm9vdC1oaXN0b3J5IGZpbGUtbmFtZS1o aXN0b3J5KQogICAgICAgICAgOzsgYWxsb3cgc29tZSB1c2VyIGN1c3RvbWl6YXRpb24KICAgICAg ICAgIChydW4taG9va3MgJ2ZpbmQtZmlsZS1yb290LWhvb2spKSkpCgogICAgKGRlZmZhY2UgZmlu ZC1maWxlLXJvb3QtaGVhZGVyLWZhY2UKICAgICAgJygodCAoOmZvcmVncm91bmQgIndoaXRlIiA6 YmFja2dyb3VuZCAicmVkMyIpKSkKICAgICAgIipGYWNlIHVzZSB0byBkaXNwbGF5IGhlYWRlci1s aW5lcyBmb3IgZmlsZXMgb3BlbmVkIGFzIHJvb3QuIikKCiAgICAoZGVmdW4gZmluZC1maWxlLXJv b3QtaGVhZGVyLXdhcm5pbmcgKCkKICAgICAgIipEaXNwbGF5IGEgd2FybmluZyBpbiBoZWFkZXIg bGluZSBvZiB0aGUgY3VycmVudCBidWZmZXIuCiAgICAgIFRoaXMgZnVuY3Rpb24gaXMgc3VpdGFi bGUgdG8gYWRkIHRvIGBmaW5kLWZpbGUtcm9vdC1ob29rJy4iCiAgICAgIChsZXQqICgod2Fybmlu ZyAiV0FSTklORzogRURJVElORyBGSUxFIEFTIFJPT1QhIikKICAgICAgICAgICAgIChzcGFjZSAo KyA2ICgtIChmcmFtZS13aWR0aCkgKGxlbmd0aCB3YXJuaW5nKSkpKQogICAgICAgICAgICAgKGJy YWNrZXQgKG1ha2Utc3RyaW5nICgvIHNwYWNlIDIpID8tKSkKICAgICAgICAgICAgICh3YXJuaW5n IChjb25jYXQgYnJhY2tldCB3YXJuaW5nIGJyYWNrZXQpKSkKICAgICAgICAoc2V0cSBoZWFkZXIt bGluZS1mb3JtYXQKICAgICAgICAgICAgICAocHJvcGVydGl6ZSAgd2FybmluZyAnZmFjZSAnZmlu ZC1maWxlLXJvb3QtaGVhZGVyLWZhY2UpKSkpCgogICAgKGFkZC1ob29rICdmaW5kLWZpbGUtcm9v dC1ob29rICdmaW5kLWZpbGUtcm9vdC1oZWFkZXItd2FybmluZykKCiAgICAoZ2xvYmFsLXNldC1r ZXkgWyhjb250cm9sIHgpIChjb250cm9sIGcpXSAnZmluZC1maWxlLXJvb3QpKQoKOzt9fX0KCjs7 fX19CgoKOzs7IC0tLS1bIDIyLjE2IENvbnZlbmllbmNlIEZlYXR1cmVzIGZvciBGaW5kaW5nIEZp bGVzCgo7OyBzaG93IGltYWdlIGZpbGVzIGFzIGltYWdlcyAobm90IGFzIHNlbWktcmFuZG9tIGJp dHMpCihHTlVFbWFjcwogICAgKGF1dG8taW1hZ2UtZmlsZS1tb2RlIDEpKQoKOzsgdmlzaXQgYSBm aWxlCihnbG9iYWwtc2V0LWtleSBbKGYzKV0gJ2ZpbmQtZmlsZSkKCjs7IHNldHVwIGEgbWVudSBv ZiByZWNlbnRseSBvcGVuZWQgZmlsZXMKKHdoZW4gKHRyeS1yZXF1aXJlICdyZWNlbnRmKQoKICAg IDs7IHRvIHByb3RlY3QgZnJvbSB0cmFtcCBub3QgY29ycmVjdGx5IHN1cHBvcnRlZCAoeWV0KSB1 bmRlciBXaW4zMgogICAgKHNldHEgcmVjZW50Zi1hdXRvLWNsZWFudXAgJ25ldmVyKQoKICAgIChy ZWNlbnRmLW1vZGUgMSkKCiAgICA7OyBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgcmVj ZW50ZiBtZW51CiAgICAoc2V0cSByZWNlbnRmLW1heC1tZW51LWl0ZW1zIDIwKQoKICAgIDs7IHNh dmUgZmlsZSBuYW1lcyByZWxhdGl2ZSB0byBteSBjdXJyZW50IGhvbWUgZGlyZWN0b3J5CiAgICAo c2V0cSByZWNlbnRmLWZpbGVuYW1lLWhhbmRsZXJzICcoYWJicmV2aWF0ZS1maWxlLW5hbWUpKQoK ICAgIDs7IGFkZCBrZXkgYmluZGluZwogICAgKGdsb2JhbC1zZXQta2V5ICBbKGNvbnRyb2wgeCkg KGNvbnRyb2wgcildICdyZWNlbnRmLW9wZW4tZmlsZXMpKQoKKG1lc3NhZ2UgIjIyIEZpbGVzIEhh bmRsaW5nLi4uIERvbmUiKQoKOzt9fX0KCgo7O3t7eyAtLVsgMjMgVXNpbmcgTXVsdGlwbGUgKGlu Zm8gIihlbWFjcylCdWZmZXJzIikgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoobWVzc2FnZSAi MjMgVXNpbmcgTXVsdGlwbGUgQnVmZmVycy4uLiIpCgo7OzsgLS0tLVsgMjMuMiAoaW5mbyAiKGVt YWNzKUxpc3QgQnVmZmVycyIpCgo7OyByZWJpbmQgYEMteCBDLWInCjs7IGBidWZmZXItbWVudScg KG1vdmVzIHBvaW50IGluIHRoZSB3aW5kb3cgd2hpY2ggbGlzdHMgeW91ciBidWZmZXJzKQo7OyBg ZWxlY3RyaWMtYnVmZmVyLWxpc3QnIChwb3BzIHVwIGEgYnVmZmVyIGRlc2NyaWJpbmcgdGhlIHNl dCBvZiBidWZmZXJzKQooZ2xvYmFsLXNldC1rZXkgWyhjb250cm9sIHgpIChjb250cm9sIGIpXSAn ZWxlY3RyaWMtYnVmZmVyLWxpc3QpCgo7OyBjdXN0b21pemFibGUgYnVmZmVyLXNlbGVjdGlvbiB3 aXRoIG11bHRpcGxlIG1lbnVzCihHTlVFbWFjcwogICAgKHdoZW4gd2luZG93LXN5c3RlbQogICAg ICAocmVxdWlyZSAnbXNiKSkpCgo7OyBidWZmZXIgc2VsZWN0aW9uCihHTlVFbWFjcwogICAgKHRy eS1yZXF1aXJlICdpYnMpKQoKOzsgY3ljbGVidWZmZXIuZWwKCjs7IHB1dCB0aGUgY3VycmVudCBi dWZmZXIgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCBvZiBhbGwgYnVmZmVycwooZ2xvYmFsLXNldC1r ZXkgWyhzaGlmdCBmMTIpXSAnYnVyeS1idWZmZXIpCgoKOzs7IC0tLS1bIDIzLjQgKGluZm8gIihl bWFjcylLaWxsIEJ1ZmZlciIpCgo7OyBraWxsIGJ1ZmZlciB3aXRob3V0IGNvbmZpcm1hdGlvbiAo aWYgbm90IG1vZGlmaWVkKQooZGVmdW4gbXkta2lsbC10aGlzLWJ1ZmZlciAoKQogICJLaWxsIHRo ZSBjdXJyZW50IGJ1ZmZlciB3aXRob3V0IGNvbmZpcm1hdGlvbiIKICAoaW50ZXJhY3RpdmUpCiAg KGtpbGwtYnVmZmVyIG5pbCkpCgo7OyBrZXkgYmluZGluZwooZ2xvYmFsLXNldC1rZXkgWyhmMTIp XSAnbXkta2lsbC10aGlzLWJ1ZmZlcikKCgo7OzsgLS0tLVsgMjMuNyAoaW5mbyAiKGVtYWNzKUJ1 ZmZlciBDb252ZW5pZW5jZSIpIGFuZCBDdXN0b21pemF0aW9uIG9mIEJ1ZmZlciBIYW5kbGluZwoK KHdoZW4gKHJlcXVpcmUgJ3VuaXF1aWZ5KQogICAgKHNldHEgdW5pcXVpZnktYnVmZmVyLW5hbWUt c3R5bGUgJ2ZvcndhcmQpKQogICAgOzsgKHNldHEgdW5pcXVpZnktYWZ0ZXIta2lsbC1idWZmZXIt cCB0KQogICAgOzsgKHNldHEgdW5pcXVpZnktbm9uLWZpbGUtYnVmZmVyLW5hbWVzIHQpCiAgICA7 OyAoc2V0cSB1bmlxdWlmeS1pZ25vcmUtYnVmZmVycy1yZSAiIFxcYFxcIDxmaWxlOi8vXFxgXFw+ KiIpCgoobWVzc2FnZSAiMjMgVXNpbmcgTXVsdGlwbGUgQnVmZmVycy4uLiBEb25lIikKCjs7fX19 CgoKOzt7e3sgLS1bIDI0IE11bHRpcGxlIChpbmZvICIoZW1hY3MpV2luZG93cyIpIF0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKG1lc3NhZ2UgIjI0IE11bHRpcGxlIFdpbmRvd3MuLi4i KQoKOzsgdHVybiBvZmYgdGhpcyBob3JyaWJsZSB0YWIgdGhpbmd5IGluIFhFbWFjcwooWEVtYWNz CiAgICAod2hlbiAoYm91bmRwICdkZWZhdWx0LWd1dHRlci12aXNpYmxlLXApCiAgICAgIChzZXQt c3BlY2lmaWVyIGRlZmF1bHQtZ3V0dGVyLXZpc2libGUtcCBuaWwpKSkKCjs7IGxvb2sgYXQgaWRv Cgo7OzsgLS0tLVsgMjQuMyBVc2luZyAoaW5mbyAiKGVtYWNzKU90aGVyIFdpbmRvdyIpCgo7OyBj eWNsZSB0aHJvdWdoIGFsbCB3aW5kb3dzIG9uIGN1cnJlbnQgZnJhbWUKOzsgKGdsb2JhbC1zZXQt a2V5IFsoY29udHJvbCB0YWIpXSAnb3RoZXItd2luZG93KQooZ2xvYmFsLXNldC1rZXkgWyhmNild ICdvdGhlci13aW5kb3cpCgoKOzsgLS0tLVsgMjQuNiBEZWxldGluZyBhbmQgKGluZm8gIihlbWFj cylDaGFuZ2UgV2luZG93IikKCjs7IGRlbGV0ZSBhbGwgd2luZG93cyBpbiB0aGUgc2VsZWN0ZWQg ZnJhbWUgZXhjZXB0IHRoZSBzZWxlY3RlZCB3aW5kb3cKKGdsb2JhbC1zZXQta2V5IFsoZjUpXSAn ZGVsZXRlLW90aGVyLXdpbmRvd3MpCgo7OyBkZWxldGUgdGhlIHNlbGVjdGVkIHdpbmRvdyBhbmQg a2lsbCB0aGUgYnVmZmVyIHRoYXQgd2FzIHNob3dpbmcgaW4gaXQKOzsoZ2xvYmFsLXNldC1rZXkg WyhmMTIpXSAna2lsbC1idWZmZXItYW5kLXdpbmRvdykKCjs7IGVubGFyZ2Ugb3Igc2hyaW5rIHdp bmRvd3MgbW9yZSBlYXNpbHkKKGdsb2JhbC1zZXQta2V5IFsoY29udHJvbCBzaGlmdCB1cCldICdl bmxhcmdlLXdpbmRvdykKKGdsb2JhbC1zZXQta2V5IFsoY29udHJvbCBzaGlmdCBkb3duKV0gJ3No cmluay13aW5kb3cpCihnbG9iYWwtc2V0LWtleSBbKGNvbnRyb2wgc2hpZnQgbGVmdCldICdlbmxh cmdlLXdpbmRvdy1ob3Jpem9udGFsbHkpCihnbG9iYWwtc2V0LWtleSBbKGNvbnRyb2wgc2hpZnQg cmlnaHQpXSAnc2hyaW5rLXdpbmRvdy1ob3Jpem9udGFsbHkpCgo7OyBtYWtlIGFsbCB2aXNpYmxl IHdpbmRvd3MgdGhlIHNhbWUgaGVpZ2h0IChhcHByb3hpbWF0ZWx5KQooZ2xvYmFsLXNldC1rZXkg Wyhjb250cm9sIGY2KV0gJ2JhbGFuY2Utd2luZG93cykKCihtZXNzYWdlICIyNCBNdWx0aXBsZSBX aW5kb3dzLi4uIERvbmUiKQoKOzt9fX0KCgo7O3t7eyAtLVsgMjUgKGluZm8gIihlbWFjcylGcmFt ZXMiKSBhbmQgWCBXaW5kb3dzIF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoobWVzc2FnZSAi MjUgRnJhbWVzIGFuZCBYIFdpbmRvd3MuLi4iKQoKOzs7IC0tLS1bIDI1LjEgKGluZm8gIihlbWFj cylNb3VzZSBDb21tYW5kcyIpIGZvciBFZGl0aW5nCgo7O3t7eyBDb3B5L1Bhc3RlIHdpdGggR25v bWUgZGVza3RvcAoKKEdOVUVtYWNzCiAgICA7OyBtYWtlIEN1dCwgQ29weSBhbmQgUGFzdGUgKGtl eXMgYW5kIG1lbnUgYmFyIGl0ZW1zKSB1c2UgdGhlIGNsaXBib2FyZAogICAgKG1lbnUtYmFyLWVu YWJsZS1jbGlwYm9hcmQpCgogICAgOzsgY3V0dGluZyBhbmQgcGFzdGluZyB1c2VzIHRoZSBjbGlw Ym9hcmQKICAgIChzZXRxIHgtc2VsZWN0LWVuYWJsZS1jbGlwYm9hcmQgdCkpCgo7O319fQoKCjs7 OyAtLS0tWyAyNS43IChpbmZvICIoZW1hY3MpQ3JlYXRpbmcgRnJhbWVzIikKCgo7OyBvICAgcmVz aXplIHRoZSBmcmFtZSB0byB0aGUgc2l6ZSB5b3Ugd2FudAo7OyBvICAgZW50ZXIgYChmcmFtZS1w YXJhbWV0ZXJzKScgaW4gdGhlIGAqc2NyYXRjaConIGJ1ZmZlcgo7OyBvICAgZXZhbHVhdGUgdGhl IGZvcm06IHBsYWNlIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlIGNsb3NpbmcgcGFyZW4sIGFuZAo7OyAg ICAgdHlwZSBgQy1qJywgc28gdGhhdCB0aGUgb3V0cHV0IGdvZXMgcmlnaHQgaW50byB0aGUgYCpz Y3JhdGNoKicgYnVmZmVyCgo7OyBwdXQgRW1hY3MgZXhhY3RseSB3aGVyZSB5b3Ugd2FudCBpdCwg ZXZlcnkgdGltZSBpdCBzdGFydHMgdXAsIGJ5Cjs7IGF1dG8tZGV0ZWN0aW5nIHRoZSBzY3JlZW4g ZGltZW5zaW9ucyBhbmQgY29tcHV0aW5nIHdoZXJlIGl0IHNob3VsZCBiZQood2hlbiB3aW5kb3ct c3lzdGVtCiAgOzsgbGlzdCBvZiBkZWZhdWx0IHZhbHVlcyBmb3IgZnJhbWUgY3JlYXRpb24gKGlu IGZvbnQgOXB0KQogIChzZXRxIGRlZmF1bHQtZnJhbWUtYWxpc3QKICAgICAgICAoY29uZCAoKD0g KHgtZGlzcGxheS1waXhlbC1oZWlnaHQpIDEyMDApCiAgICAgICAgICAgICAgICcoKGxlZnQgLiA2 MTApIChoZWlnaHQgLiA3NCkpKQoKICAgICAgICAgICAgICAoKD0gKHgtZGlzcGxheS1waXhlbC1o ZWlnaHQpIDEwMjQpCiAgICAgICAgICAgICAgICcoKGxlZnQgLiA2MTApIChoZWlnaHQgLiA2Mykp KQoKICAgICAgICAgICAgICAoKD0gKHgtZGlzcGxheS1waXhlbC1oZWlnaHQpIDgwMCkKICAgICAg ICAgICAgICAgKGlmIHJ1bm5pbmctbXMtd2luZG93cwogICAgICAgICAgICAgICAgICAgJygobGVm dCAuIDYxMCkgKGhlaWdodCAuIDQ4KSkKICAgICAgICAgICAgICAgICAnKChsZWZ0IC4gNjEwKSAo aGVpZ2h0IC4gNTMpCiAgICAgICAgICAgICAgICAgICAodmVydGljYWwtc2Nyb2xsLWJhcnMgLiBy aWdodCkpKSkgIDs7IHVuZGVyIFVidW50dQoKICAgICAgICAgICAgICAoKD0gKHgtZGlzcGxheS1w aXhlbC1oZWlnaHQpIDc2OCkKICAgICAgICAgICAgICAgJygobGVmdCAuIDYxMCkgKGhlaWdodCAu IDQ2KSkpKSkKCiAgOzsgbGlzdCBvZiBmcmFtZSBwYXJhbWV0ZXJzIGZvciBjcmVhdGluZyB0aGUg aW5pdGlhbCBmcmFtZQogIChzZXRxIGluaXRpYWwtZnJhbWUtYWxpc3QgJygodG9wIC4gMCkgKGxl ZnQgLiAwKSkpKQoKKFhFbWFjcwogKHNldC1mcmFtZS13aWR0aCAoYnVmZmVyLWRlZGljYXRlZC1m cmFtZSkgODApCiAoc2V0LWZyYW1lLWhlaWdodCAoYnVmZmVyLWRlZGljYXRlZC1mcmFtZSkgNDIp CiAoc2V0LWZyYW1lLXBvc2l0aW9uIChidWZmZXItZGVkaWNhdGVkLWZyYW1lKSAwIDApKQoKOzsg dGl0bGUgYmFyIGRpc3BsYXkgb2YgdmlzaWJsZSBmcmFtZXMKKHNldHEgZnJhbWUtdGl0bGUtZm9y bWF0ICJFbWFjcyAtICViIikKCgo7OyBiYWNrZ3JvdW5kIGNvbG9yIGlzIGZyYW1lLXNwZWNpZmlj IChub3Qgd2luZG93ISkKOzsgKHNldHEgc3BlY2lhbC1kaXNwbGF5LWJ1ZmZlci1uYW1lcwo7OyAg ICAgICAgKGNvbnMgIipzaGVsbCoiIHNwZWNpYWwtZGlzcGxheS1idWZmZXItbmFtZXMpKQoKOzsg KGxldCAoKHNwZWNpYWwtZGlzcGxheS1mcmFtZS1hbGlzdAo7OyAgICAgICAgIChjb25zICcoYmFj a2dyb3VuZC1jb2xvciAuICJkYXJrIikgc3BlY2lhbC1kaXNwbGF5LWZyYW1lLWFsaXN0KSkpCjs7 ICAgIChzaGVsbCkpCgoKOzs7IEZyb20gc2FtcGxlIC5lbWFjcwo7OzsgbG9jYWwgRW1hY3MgYmFj a2dyb3VuZDogIGRlZmF1bHQKOzs7IHJlbW90ZSBFbWFjcyBiYWNrZ3JvdW5kOiBwYWxlZ3JlZW4x Cjs7OyByb290IEVtYWNzIGJhY2tncm91bmQ6ICAgY29yYWwyCgo7KGNvbmQKOyAoKGFuZCAoc3Ry aW5nLW1hdGNoICJYRW1hY3MiIGVtYWNzLXZlcnNpb24pCjsgICAgICAgKGVxIHdpbmRvdy1zeXN0 ZW0gJ3gpCjsgICAgICAgKGJvdW5kcCAnZW1hY3MtbWFqb3ItdmVyc2lvbikKOyAgICAgICAoPSBl bWFjcy1tYWpvci12ZXJzaW9uIDE5KQo7ICAgICAgICg+PSBlbWFjcy1taW5vci12ZXJzaW9uIDEy KSkKOyAgKGxldCogKChyb290LXAgKGVxIDAgKHVzZXItdWlkKSkpCjsgICAgICAgIChkcHkgKG9y IChnZXRlbnYgIkRJU1BMQVkiKSAiIikpCjsgICAgICAgIChyZW1vdGUtcCAobm90CjsgICAgICAg ICAgICAgICAgICAgKG9yIChzdHJpbmctbWF0Y2ggIl5cXChcXHx1bml4XFx8bG9jYWxob3N0XFwp OiIgZHB5KQo7ICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgocyAoc3lzdGVtLW5hbWUpKSkK OyAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKHN0cmluZy1tYXRjaCAiXFwuXFwobmV0c2Nh cGVcXHxtY29tXFwpXFwuY29tIiBzKQo7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0 cSBzIChzdWJzdHJpbmcgcyAwIChtYXRjaC1iZWdpbm5pbmcgMCkpKSkKOyAgICAgICAgICAgICAg ICAgICAgICAgICAoc3RyaW5nLW1hdGNoIChjb25jYXQgIl4iIChyZWdleHAtcXVvdGUgcykpIGRw eSkpKSkpCjsgICAgICAgIChiZyAoY29uZCAocm9vdC1wICJjb3JhbDIiKQo7ICAgICAgICAgICAg ICAgICAgKHJlbW90ZS1wICJwYWxlZ3JlZW4xIikKOyAgICAgICAgICAgICAgICAgICh0IG5pbCkp KSkKOyAgICAoY29uZCAoYmcKOyAgICAgICAgICAobGV0ICgoZGVmIChjb2xvci1uYW1lIChmYWNl LWJhY2tncm91bmQgJ2RlZmF1bHQpKSkKOyAgICAgICAgICAgICAgICAoZmFjZXMgKGZhY2UtbGlz dCkpKQo7ICAgICAgICAgICAgKHdoaWxlIGZhY2VzCjsgICAgICAgICAgICAgIChsZXQgKChvYmcg KGZhY2UtYmFja2dyb3VuZCAoY2FyIGZhY2VzKSkpKQo7ICAgICAgICAgICAgICAgIChpZiAoYW5k IG9iZyAoZXF1YWwgZGVmIChjb2xvci1uYW1lIG9iZykpKQo7ICAgICAgICAgICAgICAgICAgICAo c2V0LWZhY2UtYmFja2dyb3VuZCAoY2FyIGZhY2VzKSBiZykpKQo7ICAgICAgICAgICAgICAoc2V0 cSBmYWNlcyAoY2RyIGZhY2VzKSkpKSkpKSkpCgoKOzs7IC0tLS1bIDI1LjkgTWFraW5nIGFuZCBV c2luZyBhIChpbmZvICIoZW1hY3MpU3BlZWRiYXIiKSBGcmFtZQoKKHJlcXVpcmUgJ3NwZWVkYmFy KQoKOzsgbnVtYmVyIG9mIHNwYWNlcyB1c2VkIGZvciBpbmRlbnRhdGlvbgooc2V0cSBzcGVlZGJh ci1pbmRlbnRhdGlvbi13aWR0aCAyKQoKOzsgZXhwYW5kL2NvbGxhcHNlIGxhdGV4IHNlY3Rpb25z CihzcGVlZGJhci1hZGQtc3VwcG9ydGVkLWV4dGVuc2lvbiAnKCIudGV4IiAiLmJpYiIgIi53Iikp Cgo7OyBqdW1wIHRvIHNwZWVkYmFyIGZyYW1lCihnbG9iYWwtc2V0LWtleSBbKGY0KV0gJ3NwZWVk YmFyLWdldC1mb2N1cykKCjs7IGJpbmQgdGhlIGFycm93IGtleXMgaW4gdGhlIHNwZWVkYmFyIHRy ZWUKOzsgW2h0dHA6Ly93d3cudXdlYi51Y3NiLmVkdS9+ZHJlYW10aGVvcmlzdC9lbWFjcy5odG1s XQooZGVmaW5lLWtleSBzcGVlZGJhci1rZXktbWFwIFsocmlnaHQpXSAnc3BlZWRiYXItZXhwYW5k LWxpbmUpCihkZWZpbmUta2V5IHNwZWVkYmFyLWtleS1tYXAgWyhsZWZ0KV0gJ3NwZWVkYmFyLWNv bnRyYWN0LWxpbmUpCgo7OyBwYXJhbWV0ZXJzIHRvIHVzZSB3aGVuIGNyZWF0aW5nIHRoZSBzcGVl ZGJhciBmcmFtZSBpbiBFbWFjcwooc2V0cSBzcGVlZGJhci1mcmFtZS1wYXJhbWV0ZXJzICcoKHdp ZHRoIC4gMzApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGVpZ2h0IC4gNDUp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yZWdyb3VuZC1jb2xvciAuICJn cmVlbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmFja2dyb3VuZC1jb2xv ciAuICJ3aGl0ZSIpKSkKCgo7OzsgLS0tLVsgMjUuMTYgKGluZm8gIihlbWFjcylNZW51IEJhcnMi KQoKOzsgdHVybiBtZW51cyBvZmYKKHVubGVzcyB3aW5kb3ctc3lzdGVtCiAgICAobWVudS1iYXIt bW9kZSAwKSkKCgo7OzsgLS0tLVsgMjUuMjAgKGluZm8gIihlbWFjcylNb3VzZSBBdm9pZGFuY2Ui KQoKOzsgbWFrZSBtb3VzZSBwb2ludGVyIHN0YXkgb3V0IG9mIHRoZSB3YXkgb2YgZWRpdGluZwoo d2hlbiB3aW5kb3ctc3lzdGVtCiAgICAobW91c2UtYXZvaWRhbmNlLW1vZGUgJ2FuaW1hdGUpKQoK OzsgbW91c2UgZ2VzdHVyZXMKKHdoZW4gKHRyeS1yZXF1aXJlICdzdHJva2VzKQogICAgKHN0cm9r ZXMtbW9kZSAxKSkKCjs7IG1vdXNlIHdoZWVsIHN1cHBvcnQKKEdOVUVtYWNzCiAgICAobXdoZWVs LWluc3RhbGwpKQoKCjs7OyAtLS0tWyBBZGQtb25zCgooR05VRW1hY3MKICAgICh3aGVuIHJ1bm5p bmctbXMtd2luZG93cwogICAgICAgIChkZWZ1biB3MzItbWluaW1pemUtZnJhbWUgKCkKICAgICAg ICAgICJNaW5pbWl6ZSB0aGUgY3VycmVudCBmcmFtZSIKICAgICAgICAgIChpbnRlcmFjdGl2ZSkK ICAgICAgICAgICh3MzItc2VuZC1zeXMtY29tbWFuZCA2MTQ3MikpCgogICAgICAgIChkZWZ1biB3 MzItbWF4aW1pemUtZnJhbWUgKCkKICAgICAgICAgICJNYXhpbWl6ZSB0aGUgY3VycmVudCBmcmFt ZSIKICAgICAgICAgIChpbnRlcmFjdGl2ZSkKICAgICAgICAgICh3MzItc2VuZC1zeXMtY29tbWFu ZCA2MTQ4OCkKICAgICAgICAgIChnbG9iYWwtc2V0LWtleSBbKG1ldGEgcmV0dXJuKV0gJ3czMi1y ZXN0b3JlLWZyYW1lKSkKCiAgICAgICAgKGdsb2JhbC1zZXQta2V5IFsobWV0YSByZXR1cm4pXSAn dzMyLW1heGltaXplLWZyYW1lKQoKICAgICAgICAoZGVmdW4gdzMyLXJlc3RvcmUtZnJhbWUgKCkK ICAgICAgICAgICJSZXN0b3JlIGEgbWluaW1pemVkIGZyYW1lIgogICAgICAgICAgKGludGVyYWN0 aXZlKQogICAgICAgICAgKHczMi1zZW5kLXN5cy1jb21tYW5kIDYxNzI4KQogICAgICAgICAgKGds b2JhbC1zZXQta2V5IFsobWV0YSByZXR1cm4pXSAndzMyLW1heGltaXplLWZyYW1lKSkKCiAgICAg ICAgKGRlZnVuIHczMi1zaW11bGF0ZS1hbHQtdGFiICgpCiAgICAgICAgICAoaW50ZXJhY3RpdmUp CiAgICAgICAgICAodzMyLXNlbmQtc3lzLWNvbW1hbmQgNjE2OTYpKQoKICAgICAgICAoZGVmdW4g dzMyLXN0YXJ0LXNjcmVlbi1zYXZlciAoKQogICAgICAgICAgKGludGVyYWN0aXZlKQogICAgICAg ICAgKHczMi1zZW5kLXN5cy1jb21tYW5kIDYxNzYwKSkKCiAgICAgICAgKGRlZnVuIHczMi1zaW11 bGF0ZS1wcmVzc2luZy1zdGFydC1idXR0b24gKCkKICAgICAgICAgIChpbnRlcmFjdGl2ZSkKICAg ICAgICAgICh3MzItc2VuZC1zeXMtY29tbWFuZCA2MTc0NCkpKSkKCihtZXNzYWdlICIyNSBGcmFt ZXMgYW5kIFggV2luZG93cy4uLiBEb25lIikKCjs7fX19CgoKOzt7e3sgLS1bIDI2IChpbmZvICIo ZW1hY3MpSW50ZXJuYXRpb25hbCIpIENoYXJhY3RlciBTZXQgU3VwcG9ydCBdLS0tLS0tLS0tLQoK KG1lc3NhZ2UgIjI2IEludGVybmF0aW9uYWwgQ2hhcmFjdGVyIFNldCBTdXBwb3J0Li4uIikKCjs7 IFdoZW4gdXNpbmcgTGF0aW4tMSwgV2luZG93cyAoYW5kIE1hYyB1c2Vycykgc2hvdWxkIHN0aWNr IHRvIE9mZmljaWFsIElTTwo7OyBMYXRpbi0xIGFuZCBub3QgdXNlIHRoZSBXaW5kb3dzIENQIDEy NTIgY29kZXBhZ2UsIHdoaWNoIGlzIChsYW1lbnRhYmx5KQo7OyBzb21ldGltZXMgY2FsbGVkICJM YXRpbi0xIi4gSW4gcmVhbCBJU08gTGF0aW4tMSwgY2hhcmFjdGVyIGNvZGVzIGluIHRoZQo7OyBy YW5nZSAxMjctMTU5IGFyZSB1bmRlZmluZWQuIFRoZSBNaWNyb3NvZnQgQ1AgMTI1MiAoIldpbmRv d3MgTGF0aW4tMSIpCjs7IGhhcyBhc3NpZ25lZCB0aGVzZSB1bmRlZmluZWQgY29kZXMgdG8gZ2x5 cGhzIGxpc3RlZCBvbiB0aGVpciBjb2RlcGFnZSBDUAo7OyAxMjUyLiBGb3IgZXhhbXBsZSwgaW4g V2luZG93cyBMYXRpbi0xLCB0aGUgRXVybyBzeW1ib2wgaGFzIHRoZSBjb2RlCjs7IDEyOC4gQXMg bG9uZyBhcyB0aGUgdXNlciBjcmVhdGVzIGFuZCBhcHBsaWVzIG5ldHdvcmtzIG9uIGhpcyBvd24g bWFjaGluZQo7OyBvciBzb21lIG90aGVyIFdpbmRvd3MgbWFjaGluZSwgZXZlcnl0aGluZyBzZWVt cyB0byB3b3JrIGZpbmUsIGJ1dCB0aGUKOzsgbmV0d29ya3MgY2Fubm90IGJlIHNoYXJlZCB3aXRo IHVzZXJzIG9uIG90aGVyIHBsYXRmb3JtcyBhbmQgY2Fubm90IGJlCjs7IHVzZWQgaW4gWGVyb3gg dXRmOC1tb2RlLiBJbiBMYXRpbi0xIG1vZGUsIHhmc3QgZG9lcyBub3QgbWFwIHRoZSBNaWNyb3Nv ZnQKOzsgZXVybyBzeW1ib2wgdG8gaXRzIHByb3BlciBVbmljb2RlIHJlcHJlc2VudGF0aW9uIFx1 MjBBQy4gVGhpcyBpcyB0aGUgc2FtZQo7OyBwcm9ibGVtIHRoYXQgaGFwcGVucyB3aXRoIHVzZXJz IHdob3NlIGVudmlyb25tZW50IGlzIElTTy04ODU5LTE1IChhbHNvCjs7IGtub3duIGFzIExhdGlu LTkpLgoKOzsgQm90dG9tIExpbmU6IFVzZXJzIG9mIHRoZSBYZXJveCBmaW5pdGUtc3RhdGUgc29m dHdhcmUgbmVlZCB0byB1bmRlcnN0YW5kCjs7IHRoYXQgSVNPLTg4NTktMSBpbiB4ZnN0IGFuZCB0 aGUgb3RoZXIgYXBwbGljYXRpb25zIG1lYW5zIHRoZSBSRUFMIFRSVUUKOzsgSVNPLTg4NTktMSBT VEFOREFSRCBhbmQgbm90IHNvbWUgYWx0ZXJlZCB2YXJpYW50IHN1Y2ggYXMgTGF0aW4tOSBvciBD UAo7OyAxMjUyICgiV2luZG93cyBMYXRpbi0xIikuIEZvciBhbnkgdXNlciB3aG8gbmVlZHMgc3lt Ym9scyB0aGF0IGFyZSBub3QgaW4KOzsgdGhlIDctYml0IEFTQ0lJIHNldCwgb3VyIHJlY29tbWVu ZGF0aW9uIGlzIHRvIG1vdmUgdG8gVW5pY29kZSBVVEYtOC4gVGhhdAo7OyBpcyB0aGUgb25seSBl bmNvZGluZyB0aGF0IGlzIHRoZSBzYW1lIGFjcm9zcyBhbGwgcGxhdGZvcm1zIGFuZCBvcGVyYXRp bmcKOzsgc3lzdGVtcyB0aGF0IHN1cHBvcnQgaXQuCgoKOzs7IC0tLS1bIDI2LjMgKGluZm8gIihl bWFjcylMYW5ndWFnZSBFbnZpcm9ubWVudHMiKQoKKHNldC1sYW5ndWFnZS1lbnZpcm9ubWVudCAi RnJlbmNoIikKCgo7OzsgLS0tLVsgMjYuNSAoaW5mbyAiKGVtYWNzKVNlbGVjdCBJbnB1dCBNZXRo b2QiKQoKOzsgTS14IGRlc2NyaWJlLWNvZGluZy1zeXN0ZW0gUkVUIFJFVAoKOzsgOzsgZGVmYXVs dCBpbnB1dCBtZXRob2QgZm9yIG11bHRpbGluZ3VhbCB0ZXh0Cjs7IChzZXRxIGRlZmF1bHQtaW5w dXQtbWV0aG9kICJsYXRpbi0xLXByZWZpeCIpCgoKOzs7IC0tLS1bIDI2LjggKGluZm8gIihlbWFj cylSZWNvZ25pemUgQ29kaW5nIikgU3lzdGVtcwoKKGFkZC10by1saXN0ICdmaWxlLWNvZGluZy1z eXN0ZW0tYWxpc3QKICAgICAgICAgICAgICcoIlxcLm93bFxcJyIgdXRmLTggLiB1dGYtOCkpCiAg ICAgICAgICAgICA7OyBhbmQgYWxsIHRoZSByZXN0IGlzIHV0Zi04OgogICAgICAgICAgICAgOzsg JygiIiAuIHV0Zi04KQoKOzsgSW4gR05VIEVtYWNzLCB3aGVuIHlvdSBzcGVjaWZ5IHRoZSBjb2Rp bmcgZXhwbGljaXRseSBpbiB0aGUgZmlsZSwgdGhhdAo7OyBvdmVycmlkZXMgYGZpbGUtY29kaW5n LXN5c3RlbS1hbGlzdCcuIE5vdCBpbiBYRW1hY3M/Cgo7OyBUaGUgdmFyaWFibGUgYGF1dG8tY29k aW5nLWFsaXN0JyBpcyB0aGUgc3Ryb25nZXN0IHdheSB0byBzcGVjaWZ5IHRoZQo7OyBjb2Rpbmcg c3lzdGVtIGZvciBjZXJ0YWluIHBhdHRlcm5zIG9mIGZpbGUgbmFtZXMsIG9yIGZvciBmaWxlcyBj b250YWluaW5nCjs7IGNlcnRhaW4gcGF0dGVybnM7IHRoaXMgdmFyaWFibGUgZXZlbiBvdmVycmlk ZXMgYC0qLWNvZGluZzotKi0nIHRhZ3MgaW4KOzsgdGhlIGZpbGUgaXRzZWxmLgoKOzsgZGVmYXVs dCBjb2Rpbmcgc3lzdGVtIChmb3IgbmV3IGZpbGVzKSwKOzsgYWxzbyBtb3ZlZCB0byB0aGUgZnJv bnQgb2YgdGhlIHByaW9yaXR5IGxpc3QgZm9yIGF1dG9tYXRpYyBkZXRlY3Rpb24KKEdOVUVtYWNz CiAgICAocHJlZmVyLWNvZGluZy1zeXN0ZW0gJ2lzby1sYXRpbi0xKSkKICAgIDs7IG9yIHNldCBl bnZpcm9ubWVudCB2YXJpYWJsZXMgbGlrZSBMQ19DVFlQRSwgTEFORyBvciBMQ19BTEwKCgo7Ozsg LS0tLVsgMjYuOSAoaW5mbyAiKGVtYWNzKVNwZWNpZnkgQ29kaW5nIikgU3lzdGVtCgo7OyA7OyBw cmlvcml0eSBvcmRlciBmb3IgcmVjb2duaXppbmcgY29kaW5nIHN5c3RlbXMgd2hlbiByZWFkaW5n IGZpbGVzCjs7IChHTlVFbWFjcwo7OyAgICAgKHNldC1jb2RpbmctcHJpb3JpdHkgKGxpc3QgJ2Nv ZGluZy1jYXRlZ29yeS11dGYtOCkpKQoKKEdOVUVtYWNzCiAgICA7OyB0byBjb3B5IGFuZCBwYXN0 ZSB0byBhbmQgZnJvbSBFbWFjcyB0aHJvdWdoIHRoZSBjbGlwYm9hcmQKICAgIChzZXQtc2VsZWN0 aW9uLWNvZGluZy1zeXN0ZW0gJ2lzby1sYXRpbi0xKSkKICAgIDs7IChzZXQtc2VsZWN0aW9uLWNv ZGluZy1zeXN0ZW0gJ2NvbXBvdW5kLXRleHQtd2l0aC1leHRlbnNpb25zKQoKCjs7OyAtLS0tWyAy Ni4xMyAoaW5mbyAiKGVtYWNzKVNpbmdsZS1CeXRlIENoYXJhY3RlciBTdXBwb3J0IikKCjs7IHVu aWZ5IHRoZSBMYXRpbi1OIGNoYXJzZXRzLCBzbyB0aGF0IEVtYWNzIGtub3dzIHRoYXQgdGhlIOkg aW4gTGF0aW4tOQo7OyAod2l0aCB0aGUgZXVybykgaXMgdGhlIHNhbWUgYXMgdGhlIOkgaW4gTGF0 aW4tMSAod2l0aG91dCB0aGUgZXVybykKOzsgW2F2b2lkIHRoZSBzbWFsbCBhY2NlbnR1YXRlZCBj aGFyYWN0ZXJzXQood2hlbiAodHJ5LXJlcXVpcmUgJ3Vjcy10YWJsZXMpCiAgICAodW5pZnktODg1 OS1vbi1lbmNvZGluZy1tb2RlIDEpICA7OyBoYXJtbGVzcwogICAgKHVuaWZ5LTg4NTktb24tZGVj b2RpbmctbW9kZSAxKSkgOzsgbWF5IHVuZXhwZWN0ZWRseSBjaGFuZ2UgZmlsZXMgaWYgdGhleQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgY29udGFpbiBkaWZmZXJlbnQg TGF0aW4tTiBjaGFyc2V0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsg d2hpY2ggc2hvdWxkIG5vdCBiZSB1bmlmaWVkCgo7OyAod2hlbiB3aW5kb3ctc3lzdGVtCjs7ICAg OzsgZnVuY3Rpb25zIGZvciBkZWFsaW5nIHdpdGggY2hhciB0YWJsZXMKOzsgICAocmVxdWlyZSAn ZGlzcC10YWJsZSkpCgo7OyAoWEVtYWNzCjs7ICAgICAocmVxdWlyZSAnaXNvLXN5bnRheCkpCgoo bWVzc2FnZSAiMjYgSW50ZXJuYXRpb25hbCBDaGFyYWN0ZXIgU2V0IFN1cHBvcnQuLi4gRG9uZSIp Cgo7O319fQoKOzt9fX0KCgo7O3t7eyBBZHZhbmNlZCBGZWF0dXJlcyAjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgo7O3t7eyAtLVsgMjcgKGluZm8g IihlbWFjcylNYWpvciBNb2RlcyIpIF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CgoobWVzc2FnZSAiMjcgTWFqb3IgTW9kZXMuLi4iKQoKOzs7IC0tLS1bIDI3LjEgSG93IE1ham9y IE1vZGVzIGFyZSBDaG9zZW4KCjs7IGxpc3Qgb2YgZmlsZW5hbWUgcGF0dGVybnMKOzsgdnMgY29y cmVzcG9uZGluZyBtYWpvciBtb2RlIGZ1bmN0aW9ucwoKOzt7e3sgRFREIG1vZGUKCihhdXRvbG9h ZCAnZHRkLW1vZGUgInRkdGQiICJNYWpvciBtb2RlIGZvciBTR01MIGFuZCBYTUwgRFREcy4iIHQp CihhdXRvbG9hZCAnZHRkLWV0YWdzICJ0ZHRkIgogICJFeGVjdXRlIGV0YWdzIG9uIEZJTEVTUEVD IGFuZCBtYXRjaCBvbiBEVEQtc3BlY2lmaWMgcmVndWxhciBleHByZXNzaW9ucy4iCiAgdCkKKGF1 dG9sb2FkICdkdGQtZ3JlcCAidGR0ZCIgIkdyZXAgZm9yIFBBVFRFUk4gaW4gZmlsZXMgbWF0Y2hp bmcgRklMRVNQRUMuIiB0KQoKOzsgVHVybiBvbiBmb250IGxvY2sgd2hlbiBpbiBEVEQgbW9kZQoo YWRkLWhvb2sgJ2R0ZC1tb2RlLWhvb2tzICd0dXJuLW9uLWZvbnQtbG9jaykKCihzZXRxIGF1dG8t bW9kZS1hbGlzdAogICAgICAoYXBwZW5kCiAgICAgICAobGlzdAogICAgICAgICcoIlxcLmRjbCQi IC4gZHRkLW1vZGUpCiAgICAgICAgJygiXFwuZGVjJCIgLiBkdGQtbW9kZSkKICAgICAgICAnKCJc XC5kdGQkIiAuIGR0ZC1tb2RlKQogICAgICAgICcoIlxcLmVsZSQiIC4gZHRkLW1vZGUpCiAgICAg ICAgJygiXFwuZW50JCIgLiBkdGQtbW9kZSkKICAgICAgICAnKCJcXC5tb2QkIiAuIGR0ZC1tb2Rl KSkKICAgICAgIGF1dG8tbW9kZS1hbGlzdCkpCgo7O319fQoKKGF1dG9sb2FkICdodG1sLWhlbHBl ci1tb2RlICJodG1sLWhlbHBlci1tb2RlIiAiWWF5IEhUTUwiIHQpCgooYXV0b2xvYWQgJ3NxbC1t b2RlICJzcWwiIG5pbCkKCjs7e3t7IGNzcy1tb2RlCgooYXV0b2xvYWQgJ2Nzcy1tb2RlICJjc3Mt bW9kZSIpCihwdXNoICcoIlxcLmNzc1xcJyIgICAgICAgICAgICAgICAgICAgIC4gY3NzLW1vZGUp ICAgICAgICAgICBhdXRvLW1vZGUtYWxpc3QpCgo7O319fQoKOzsgdXNlIHRoZSAoYWRkLXRvLWxp c3QgJ2F1dG8tbW9kZS1hbGlzdCAnKCJcXC5GXFwnIiAuIGY5MC1tb2RlKSkgZm9ybT8KCihwdXNo ICcoIlxcLlxcKGRpZmZzP1xcfHBhdGNoXFx8cmVqXFwpXFwnIiAuIGRpZmYtbW9kZSkgICAgICBh dXRvLW1vZGUtYWxpc3QpCihwdXNoICcoIlxcKFxcLmh0bVxcKGxcXCk/XFx8LnhzbFxcKSQiIC4g aHRtbC1oZWxwZXItbW9kZSkgICBhdXRvLW1vZGUtYWxpc3QpCihwdXNoICcoIi4qXFwudHh0JCIg ICAgICAgICAgICAgICAgICAgIC4gaW5kZW50ZWQtdGV4dC1tb2RlKSBhdXRvLW1vZGUtYWxpc3Qp CihwdXNoICcoIlxcLnRleCQiICAgICAgICAgICAgICAgICAgICAgIC4gTGFUZVgtbW9kZSkgICAg ICAgICBhdXRvLW1vZGUtYWxpc3QpCihwdXNoICcoIlttTV1ha2VmaWxlIiAgICAgICAgICAgICAg ICAgIC4gbWFrZWZpbGUtbW9kZSkgICAgICBhdXRvLW1vZGUtYWxpc3QpCihwdXNoICcoIlxcLmNn aSQiICAgICAgICAgICAgICAgICAgICAgIC4gcGVybC1tb2RlKSAgICAgICAgICBhdXRvLW1vZGUt YWxpc3QpCihwdXNoICcoIlxcLmJhc2gkIiAgICAgICAgICAgICAgICAgICAgIC4gc2hlbGwtc2Ny aXB0LW1vZGUpICBhdXRvLW1vZGUtYWxpc3QpCihwdXNoICcoIlxcLnNxbCQiICAgICAgICAgICAg ICAgICAgICAgIC4gc3FsLW1vZGUpICAgICAgICAgICBhdXRvLW1vZGUtYWxpc3QpCihwdXNoICco IlxcLmV4cGVjdCQiICAgICAgICAgICAgICAgICAgIC4gdGNsLW1vZGUpICAgICAgICAgICBhdXRv LW1vZGUtYWxpc3QpCihwdXNoICcoIlxcLmpzJCIgICAgICAgICAgICAgICAgICAgICAgIC4gamF2 YS1tb2RlKSAgICAgICAgICBhdXRvLW1vZGUtYWxpc3QpCgo7OyBsaXN0IG9mIGludGVycHJldGVy cyBzcGVjaWZpZWQgaW4gdGhlIGZpcnN0IGxpbmUgKHN0YXJ0cyB3aXRoIGAjIScpCjs7IHZzIGNv cnJlc3BvbmRpbmcgbWFqb3IgbW9kZSBmdW5jdGlvbnMKKHB1c2ggJygiZXhwZWN0IiAgICAgICAg ICAgICAgICAgICAgICAgLiB0Y2wtbW9kZSkgICAgaW50ZXJwcmV0ZXItbW9kZS1hbGlzdCkKCihh dXRvbG9hZCAnc3NoLWNvbmZpZy1tb2RlICJzc2gtY29uZmlnLW1vZGUiIHQpCihhZGQtdG8tbGlz dCAnYXV0by1tb2RlLWFsaXN0ICcoIi5zc2gvY29uZmlnXFwnIiAgLiBzc2gtY29uZmlnLW1vZGUp KQooYWRkLXRvLWxpc3QgJ2F1dG8tbW9kZS1hbGlzdCAnKCJzc2hkP19jb25maWdcXCciIC4gc3No LWNvbmZpZy1tb2RlKSkKKGFkZC1ob29rICdzc2gtY29uZmlnLW1vZGUtaG9vayAndHVybi1vbi1m b250LWxvY2spCgooYXV0b2xvYWQgJ293bC1tb2RlICJvd2wtbW9kZSIgIk9XTCBtb2RlLiIgdCkK KHB1c2ggJygiXFwub3dsJCIgICAgICAgICAgICAgICAgICAgICAgLiBvd2wtbW9kZSkgICAgICAg ICAgIGF1dG8tbW9kZS1hbGlzdCkKOzsgKHB1c2ggKGNvbnMgIlxcLm93bCQiICdvd2wtbW9kZSkg YXV0by1tb2RlLWFsaXN0KQoKOzsgOzsKOzsgOzsgTU1NIG1vZGUsIG11bHRpbW9kZSBzdHVmZiAg c2RmCjs7IDs7IEphdmEgLSBYTUwvSlNQCjs7IDs7Cjs7IChyZXF1aXJlICdtbW0tYXV0bykKOzsg KHNldHEgbW1tLWdsb2JhbC1tb2RlICdtYXliZSkKOzsgKG1tbS1hZGQtbW9kZS1leHQtY2xhc3Mg bmlsICJcXC54bWw/XFwnIiAneG1sLWphdmEpCjs7IChtbW0tYWRkLW1vZGUtZXh0LWNsYXNzIG5p bCAiXFwuanNwXFwnIiAnamF2YS1odG1sKQo7OyAobW1tLWFkZC1jbGFzc2VzCjs7ICAnKCh4bWwt amF2YQo7OyAgICAgOnN1Ym1vZGUgamF2YS1tb2RlCjs7ICAgICA6ZnJvbnQgIjx4c3A6bG9naWM+ Igo7OyAgICAgOmJhY2sgIjwveHNwOmxvZ2ljPiIpKSkKOzsgKG1tbS1hZGQtY2xhc3Nlcwo7OyAg JygoamF2YS1odG1sCjs7ICAgICA6c3VibW9kZSBqYXZhLW1vZGUKOzsgICAgIDpmcm9udCAiPCUi Cjs7ICAgICA6YmFjayAiJT4iKSkpCgo7OyBsb2FkIGdlbmVyaWMgbW9kZXMgd2hpY2ggc3VwcG9y dCBlLmcuIGJhdGNoIGZpbGVzCih0cnktcmVxdWlyZSAnZ2VuZXJpYy14KQoKKG1lc3NhZ2UgIjI3 IE1ham9yIE1vZGVzLi4uIERvbmUiKQoKOzt9fX0KCgo7O3t7eyAtLVsgMjggKGluZm8gIihlbWFj cylJbmRlbnRhdGlvbiIpIF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoobWVz c2FnZSAiMjggSW5kZW50YXRpb24uLi4iKQoKOzsgaW5kZW50YXRpb24gY2FuJ3QgaW5zZXJ0IHRh YnMKKHNldHEtZGVmYXVsdCBpbmRlbnQtdGFicy1tb2RlIG5pbCkKCihtZXNzYWdlICIyOCBJbmRl bnRhdGlvbi4uLiBEb25lIikKCjs7fX19CgoKOzt7e3sgLS1bIDI5IENvbW1hbmRzIGZvciAoaW5m byAiKGVtYWNzKVRleHQiKSBIdW1hbiBMYW5ndWFnZXMgXS0tLS0tLS0tLS0tLQoKKG1lc3NhZ2Ug IjI5IENvbW1hbmRzIGZvciBIdW1hbiBMYW5ndWFnZXMuLi4iKQoKOzs7IC0tLS1bIDI5LjEgV29y ZHMKCjs7IEdOVSBFbWFjcyBkZWZhdWx0IGZvciBraWxsaW5nIGJhY2sgdG8gdGhlIGJlZ2lubmlu ZyBvZiBhIHdvcmQKKFhFbWFjcwogICAgKGdsb2JhbC1zZXQta2V5IFsoY29udHJvbCBiYWNrc3Bh Y2UpXSAnYmFja3dhcmQta2lsbC13b3JkKSkKCgo7OzsgLS0tLVsgMjkuNSBGaWxsaW5nIFRleHQK Cjs7IHRyeSBsb25nbGluZXMuZWwKCjs7IHR1cm4gb24gbXkgdGV4dCBzZXR1cAooYWRkLWhvb2sg J3RleHQtbW9kZS1ob29rICdteS10ZXh0LW1vZGUtc2V0dXApCgooZGVmdW4gbXktdGV4dC1tb2Rl LXNldHVwICgpCiAgIlR1cm4gb24gZmlsbGluZyBtb2RlcyBpbiB0ZXh0IG1vZGUuIgogICh0dXJu LW9uLWF1dG8tZmlsbCkKCiAgOzsgYWRhcHRhdGl2ZSBmaWxsaW5nCiAgKHdoZW4gKHRyeS1yZXF1 aXJlICdmaWxsYWRhcHQpCiAgICAgIChzZXRxLWRlZmF1bHQgZmlsbGFkYXB0LW1vZGUgbmlsKQoK ICAgICAgOzsgdHVybiBvbiBmaWxsYWRhcHQgbW9kZSBldmVyeXdoZXJlIGJ1dCBpbiBDaGFuZ2VM b2cgZmlsZXMKICAgICAgKGNvbmQgKChlcXVhbCBtb2RlLW5hbWUgIkNoYW5nZSBMb2ciKQogICAg ICAgICAgICAgdCkKICAgICAgICAgICAgKHQKICAgICAgICAgICAgICh0dXJuLW9uLWZpbGxhZGFw dC1tb2RlKSkpKSkKCjs7IHN0cmluZyBmb3IgZmlsbGluZyB0byBpbnNlcnQgYXQgZnJvbnQgb2Yg bmV3IGxpbmUKKHNldHEgZmlsbC1wcmVmaXggIiAgICAgICAgIikKCjs7IGRlZmF1bHQgdmFsdWUg b2YgYGZpbGwtY29sdW1uJyBmb3IgYnVmZmVycyB0aGF0IGRvIG5vdCBvdmVycmlkZSBpdAooc2V0 cSBkZWZhdWx0LWZpbGwtY29sdW1uIDc2KQoKOzsgYXV0b21hdGljIGxpbmUtd3JhcHBpbmcgYmV5 b25kIHRoYXQgY29sdW1uCihzZXRxIGZpbGwtY29sdW1uIDc2KQoKOzsgYXV0by1yZWZpbGxpbmcg bWlub3IgbW9kZXMKKEdOVUVtYWNzCiAgICA7OyByZXN0cmljdCByZWZpbGxpbmcgb25seSB3aGVu IHlvdSBpbnNlcnQgY2hhcmFjdGVycywgc28KICAgIDs7IHBhcmFncmFwaHMgd2lsbCBub3QgZ2V0 IHJlZm9ybWF0dGVkIGlmIHRoZSBjdXJzb3IgbW92ZXMgb3ZlciBpdAogICAgKHRyeS1yZXF1aXJl ICdyZWZpbGwpKQoKKFhFbWFjcwogICAgOzsgcmVmaWxsLmVsIGRvZXMgbm90IHdvcmsgd2l0aCBY RW1hY3MKICAgICh0cnktcmVxdWlyZSAnbWFuaWFjKSkKCgo7OzsgLS0tLVsgMjkuNiBDYXNlIENv bnZlcnNpb24gQ29tbWFuZHMKCjs7IGVuYWJsZSB0aGUgdXNlIG9mIHRoZSBjb21tYW5kcyBgZG93 bmNhc2UtcmVnaW9uJyBhbmQgYHVwY2FzZS1yZWdpb24nCjs7IHdpdGhvdXQgY29uZmlybWF0aW9u CihwdXQgJ2Rvd25jYXNlLXJlZ2lvbiAnZGlzYWJsZWQgbmlsKQoocHV0ICd1cGNhc2UtcmVnaW9u ICdkaXNhYmxlZCBuaWwpCgoKOzs7IC0tLS1bIDI5LjggT3V0bGluZSBNb2RlCgo7OyBiaW5kIHRo ZSBvdXRsaW5lIG1pbm9yIG1vZGUgZnVuY3Rpb25zIHRvIGFuIGVhc3kgdG8gcmVtZW1iZXIgcHJl Zml4IGtleQo7OyAobW9yZSBhY2Nlc3NpYmxlIHRoYW4gdGhlIGhvcnJpYmxlIHByZWZpeCBDLWMg QCkKKHNldHEgb3V0bGluZS1taW5vci1tb2RlLXByZWZpeCBbKGNvbnRyb2wgbyldKQoKOzsgYmlu ZCB0aGUgZnVuY3Rpb24gYG9wZW4tbGluZScgdG8gTS1vIGluc3RlYWQgb2YgQy1vIChieSBkZWZh dWx0KQooZ2xvYmFsLXNldC1rZXkgWyhtZXRhIG8pXSAnb3Blbi1saW5lKQoKOzsgb3V0bGluZSBt b2RlIGNvbW1hbmRzIGZvciBFbWFjcwoocmVxdWlyZSAnb3V0bGluZSkKCjs7IG1ha2VzIG90aGVy IG91dGxpbmUtbWlub3ItbW9kZSBmaWxlcyBmZWVsIGxpa2Ugb3JnIGZpbGVzCih3aGVuICh0cnkt cmVxdWlyZSAnb3V0bGluZS1tYWdpYykKICAgIChhZGQtaG9vayAnb3V0bGluZS1taW5vci1tb2Rl LWhvb2sKICAgICAgICAgICAgICAobGFtYmRhICgpCiAgICAgICAgICAgICAgICAoZGVmaW5lLWtl eSBvdXRsaW5lLW1pbm9yLW1vZGUtbWFwCiAgICAgICAgICAgICAgICAgIChrYmQgIjxiYWNrdGFi PiIpICdvdXRsaW5lLWN5Y2xlKQogICAgICAgICAgICAgICAgKGRlZmluZS1rZXkgb3V0bGluZS1t aW5vci1tb2RlLW1hcAogICAgICAgICAgICAgICAgICBbKG1ldGEgbGVmdCldICdvdXRsaW5lLXBy b21vdGUpCiAgICAgICAgICAgICAgICAoZGVmaW5lLWtleSBvdXRsaW5lLW1pbm9yLW1vZGUtbWFw CiAgICAgICAgICAgICAgICAgIFsobWV0YSByaWdodCldICdvdXRsaW5lLWRlbW90ZSkKICAgICAg ICAgICAgICAgIChkZWZpbmUta2V5IG91dGxpbmUtbWlub3ItbW9kZS1tYXAKICAgICAgICAgICAg ICAgICAgWyhtZXRhIHVwKV0gJ291dGxpbmUtbW92ZS1zdWJ0cmVlLXVwKQogICAgICAgICAgICAg ICAgKGRlZmluZS1rZXkgb3V0bGluZS1taW5vci1tb2RlLW1hcAogICAgICAgICAgICAgICAgICBb KG1ldGEgZG93bildICdvdXRsaW5lLW1vdmUtc3VidHJlZS1kb3duKSkpKQoKOzt7e3sgRm9sZGlu ZyBFZGl0aW5nCgood2hlbiAodHJ5LXJlcXVpcmUgJ2ZvbGRpbmcpCiAgICAoZm9sZGluZy1tb2Rl LWFkZC1maW5kLWZpbGUtaG9vaykpCgood2hlbiAodHJ5LXJlcXVpcmUgJ2ZvbGQtZHdpbSkKICAg IChnbG9iYWwtc2V0LWtleSBbKGNvbnRyb2wgYykgKGYpICh0KV0gJ2ZvbGQtZHdpbS10b2dnbGUp CiAgICAoZ2xvYmFsLXNldC1rZXkgWyhjb250cm9sIGMpIChmKSAoaCldICdmb2xkLWR3aW0taGlk ZS1hbGwpCiAgICAoZ2xvYmFsLXNldC1rZXkgWyhjb250cm9sIGMpIChmKSAocyldICdmb2xkLWR3 aW0tc2hvdy1hbGwpKQoKOzt9fX0KCgo7OzsgLS0tLVsgKGluZm8gIihlbWFjcy1nb29kaWVzLWVs KWJveHF1b3RlIikKCjs7IHRvIHF1b3RlIHRleHQgd2l0aCBhIHNlbWktYm94Cih3aGVuICh0cnkt cmVxdWlyZSAnYm94cXVvdGUpCiAgICAoZ2xvYmFsLXNldC1rZXkgWyhjb250cm9sIGMpIChiKSAo cildICdib3hxdW90ZS1yZWdpb24pCiAgICAoZ2xvYmFsLXNldC1rZXkgWyhjb250cm9sIGMpIChi KSAodCldICdib3hxdW90ZS10aXRsZSkpCgoKOzs7IC0tLS1bIENoYXB0ZXIgMjEgLSBBbm5leAoK OzsgaHR0cDovL3VzZXJzLmJpZ3BvbmQubmV0LmF1L3NyeW91bmdzL1hFbWFjcy9pbml0LWZpbGVz L2xhdGV4LXN5Lmh0bWwKOzsgPSB1c2VmdWwgZXhhbXBsZXMgZm9yIFhFbWFjcwo7OyBIYXZpbmcg YSB0b29sYmFyIG9ubHkgbWFrZXMgc2Vuc2UgaWYgd2UncmUgaW4gYSB3aW5kb3dpbmcgZW52aXJv bm1lbnQuCihYRW1hY3MKICAgIChldmFsLWFuZC1jb21waWxlCiAgICAgICh3aGVuIChkZXZpY2Ut b24td2luZG93LXN5c3RlbS1wKQogICAgICAgICh0cnktcmVxdWlyZSAnbGF0ZXgtdG9vbGJhcikp KSkKCjs7IFRha2UgYSBsb29rIGF0IFBldGVyIEdhY3MncyBtYWNyb3MgZm9yIGl0YWxpYywgLi4u CgooZGVmdW4gbXktTGFUZVgtaW5zZXJ0LXVuZGVyc2NvcmUgKCkKICAiSW5zZXJ0cyBhbiB1bmRl cnNjb3JlIGRlcGVuZGluZyBvbiB0aGUgY2xvc2UgY29udGV4dCAodGJkKQpJZiBuZWVkZWQgYSBi YWNrc2xhc2ggaXMgaW5zZXJ0ZWQgYmVmb3JlIgogIChpbnRlcmFjdGl2ZSkKICAoaW5zZXJ0ICJc XF8iKSkKCihkZWZ1biBteS1MYVRlWC1tb2RlLXNldHVwICgpCiAgIkN1c3RvbWl6ZSBteSBMYVRl WC1tb2RlLiIKICAobG9jYWwtc2V0LWtleSAiXyIgJ215LUxhVGVYLWluc2VydC11bmRlcnNjb3Jl KSkKCihhZGQtaG9vayAnTGFUZVgtbW9kZS1ob29rICdteS1MYVRlWC1tb2RlLXNldHVwKQoKCjs7 OyAtLS0teyBFbWFjcyBsYXRleCBtb2RlCjs7IChFbWFjcyBidWlsdC1pbiBsYXRleC1tb2RlLCBu b3QgcmVsYXRlZCB0byBBVUNUZVgpCgo7OyBVc2UgYSBzYW5lciB2aWV3ZXIuICBUcnkgeHBkZiwg Zm9yIGV4YW1wbGUuICBJdCB3b24ndCByZWxvYWQKOzsgYXV0b21hdGljYWxseSwgYnV0IGEgcXVp Y2sgdGFwIG9uIHRoZSBSIGtleSB3aWxsIGZvcmNlIGl0IHRvIHJlbG9hZCB0aGUKOzsgZmlsZS4g IE5vIG5lZWQgdG8gY2xvc2UgJiByZW9wZW4uCjs7IChzZXRxIHRleC1kdmktdmlldy1jb21tYW5k ICJ4cGRmIikKCgo7OzsgLS0tLVsgKGluZm8gIihhdWN0ZXgpVG9wIikKCjs7IE5vdGUgLS0gQVVD VGVYIGFsaWFzZXMgdGV4LW1vZGUgdG8gVGVYLW1vZGUKCjs7IE5COiBpbnZva2luZyAobGEpdGV4 LW1vZGUgYWxzbyBydW5zIHRleHQtbW9kZS1ob29rCgo7O3t7eyAyIC0gKGluZm8gIihhdWN0ZXgp SW5zdGFsbGF0aW9uIikgb2YgQVVDVGVYCgo7OyAoZXZhbC1hZnRlci1sb2FkICJsYXRleCIgIDs7 IG9yICJ0ZXgiPwo7OyAgICcocHJvZ24KOzsgICAgICAoYWRkLXRvLWxpc3QgJ1RlWC1leHBhbmQt bGlzdAo7OyAgICAgICAgICAgICAgICAgICAnKCIlYSIKOzsgICAgICAgICAgICAgICAgICAgICAo bGFtYmRhIG5pbAo7OyAgICAgICAgICAgICAgICAgICAgICAgYXN5LWNvbW1hbmQtbG9jYXRpb24p KSB0KQo7OyAgICAgIChhZGQtdG8tbGlzdCAnVGVYLWNvbW1hbmQtbGlzdAo7OyAgICAgICAgICAg ICAgICAgICAnKCJhc3ktTGFUZVgiICIlbCBcIiUobW9kZSlcXGlucHV0eyV0fVwiICYmICVhYXN5 IC4uLiIKOzsgICAgICAgICAgICAgICAgICAgICBUZVgtcnVuLWludGVyYWN0aXZlIG5pbCAobGF0 ZXgtbW9kZSkKOzsgICAgICAgICAgICAgICAgICAgICA6aGVscCAiUnVuIExhVGVYICYmIEFzeW1w dG90ZSAmJiBMYVRlWCIpKSkpCgo7OyBQcmVzcyBDLWMgQy1jIEZJTEUgPFJldHVybj4gPFJldHVy bj4gdG8gcnVuIGR2aXBzIChOb3RlIHRoYXQgdGhlIGNvbW1hbmQKOzsgaXMgRklMRSBhbmQgbm90 IER2aXBzIGFzIG9uZSBtaWdodCBleHBlY3QpCjs7IFByZXNzIEMtYyBDLWMgUHJpbnQgPFJldHVy bj4gPFJldHVybj4gdG8gcnVuIEdTdmlldyAoQWxzbyBzb21ld2hhdAo7OyBtaXNsZWFkaW5nIG5h bWUpCjs7IElmIHlvdSB3YW50IHRvIHByaW50IHRoZSBkb2N1bWVudCwgZG8gaXQgZnJvbSBHU3Zp ZXcuCgogICAgOzsgbGlzdCBvZiBjb21tYW5kcyB0byBleGVjdXRlIG9uIHRoZSBjdXJyZW50IGRv Y3VtZW50CiAgICAoc2V0cSBUZVgtY29tbWFuZC1saXN0CiAgICAgICAgICA7OyB0byBhdm9pZCB0 aGUgYCEgSSBjYW4ndCBmaW5kIGZpbGUgYCcudGV4JycgbWVzc2FnZSwgSSBoYWQgdG8KICAgICAg ICAgIDs7IHJlcGxhY2UgdGhlIHNpbmdsZSBxdW90ZXMgJyBieSAiICh0aGUgY2F1c2UgaXMgdGhh dCBJIHdhcyB1c2luZwogICAgICAgICAgOzsgYSBzaGVsbCB0aGF0IGRvZXMgbm90IHVuZGVyc3Rh bmQgc2luZ2xlIHF1b3RlcykKICAgICAgICAgIChsaXN0IChsaXN0ICIyVXBMRiIKICAgICAgICAg ICAgICAgICAgICAgICJkdmlwcyAtdCBsYW5kc2NhcGUgLVBocDQwMDBuICVzIC1mIHwgcHNudXAg LTIgLXIgPiAlcy0ydXAucHMiCiAgICAgICAgICAgICAgICAgICAgICAnVGVYLXJ1bi1MYVRlWCBu aWwgdCkKICAgICAgICAgICAgICAgIChsaXN0ICIyVXBGIiAiZHZpcHMgLVBocDQwMDBuICVzIC1m IHwgcHNudXAgLTIgID4gJXMtMnVwLnBzIgogICAgICAgICAgICAgICAgICAgICAgJ1RlWC1ydW4t TGFUZVggbmlsIHQpCiAgICAgICAgICAgICAgICAobGlzdCAiWiIgImxhdGV4IFwiXFxub25zdG9w bW9kZVxcaW5wdXR7JXN9XCImIGR2aXBzICVkIC1vICVmIgogICAgICAgICAgICAgICAgICAgICAg J1RlWC1ydW4tTGFUZVggbmlsIHQpCiAgICAgICAgICAgICAgICAobGlzdCAiVGVYIiAidGV4IFwi XFxub25zdG9wbW9kZVxcaW5wdXQgJXRcIiIKICAgICAgICAgICAgICAgICAgICAgICdUZVgtcnVu LVRlWCBuaWwgdCkKICAgICAgICAgICAgICAgIChsaXN0ICJUZVggSW50ZXJhY3RpdmUiICJ0ZXgg XCIldFwiIgogICAgICAgICAgICAgICAgICAgICAgJ1RlWC1ydW4taW50ZXJhY3RpdmUgbmlsIHQp CiAgICAgICAgICAgICAgICAobGlzdCAiTGFUZVgiICIlbCAtLXNyYyBcIlxcbm9uc3RvcG1vZGVc XGlucHV0eyV0fVwiIgogICAgICAgICAgICAgICAgICAgICAgJ1RlWC1ydW4tTGFUZVggbmlsIHQp CiAgICAgICAgICAgICAgICAobGlzdCAiUGRmIiAicGRmbGF0ZXggXCJcXG5vbnN0b3Btb2RlXFxp bnB1dHslc31cIiIKICAgICAgICAgICAgICAgICAgICAgICdUZVgtcnVuLUxhVGVYIG5pbCB0KQog ICAgICAgICAgICAgICAgKGxpc3QgIkxhVGVYIEludGVyYWN0aXZlIiAiJWwgXCIldFwiIgogICAg ICAgICAgICAgICAgICAgICAgJ1RlWC1ydW4taW50ZXJhY3RpdmUgbmlsIHQpCiAgICAgICAgICAg ICAgICAoaWYgKG9yIHdpbmRvdy1zeXN0ZW0gKGdldGVudiAiRElTUExBWSIpKQogICAgICAgICAg ICAgICAgICAgIChsaXN0ICJWaWV3IiAiJXYgIgogICAgICAgICAgICAgICAgICAgICAgICAgICdU ZVgtcnVuLWJhY2tncm91bmQgdCBuaWwpCiAgICAgICAgICAgICAgICAgIChsaXN0ICJWaWV3IiAi ZHZpMnR0eSAtcSAtdyAxMzIgJXMgIgogICAgICAgICAgICAgICAgICAgICAgICAnVGVYLXJ1bi1j b21tYW5kIHQgbmlsKSkKICAgICAgICAgICAgICAgIChsaXN0ICJQcmludCIgIiVwICIKICAgICAg ICAgICAgICAgICAgICAgICdUZVgtcnVuLWNvbW1hbmQgdCBuaWwpCiAgICAgICAgICAgICAgICAo bGlzdCAiUXVldWUiICIlcSIKICAgICAgICAgICAgICAgICAgICAgICdUZVgtcnVuLWJhY2tncm91 bmQgbmlsIG5pbCkKICAgICAgICAgICAgICAgIChsaXN0ICJGaWxlIiAiZHZpcHMgJWQgLW8gJWYg IgogICAgICAgICAgICAgICAgICAgICAgJ1RlWC1ydW4tY29tbWFuZCB0IG5pbCkKICAgICAgICAg ICAgICAgIChsaXN0ICJCaWJUZVgiICJiaWJ0ZXggXCIlc1wiIiAgOzsgVmVyeSBJbXBvcnRhbnQg UGFja2FnZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 OyBhdmVjIFJlZnRleAogICAgICAgICAgICAgICAgICAgICAgJ1RlWC1ydW4tQmliVGVYIG5pbCBu aWwpCiAgICAgICAgICAgICAgICAobGlzdCAiSW5kZXgiICJtYWtlaW5kZXggXCIlc1wiIgogICAg ICAgICAgICAgICAgICAgICAgJ1RlWC1ydW4tY29tbWFuZCBuaWwgdCkKICAgICAgICAgICAgICAg IChsaXN0ICJDaGVjayIgImxhY2hlY2sgJXMiCiAgICAgICAgICAgICAgICAgICAgICAnVGVYLXJ1 bi1jb21waWxlIG5pbCB0KQogICAgICAgICAgICAgICAgKGxpc3QgIlNwZWxsIiAiPGlnbm9yZWQ+ IgogICAgICAgICAgICAgICAgICAgICAgJ1RlWC1ydW4taXNwZWxsIG5pbCBuaWwpCiAgICAgICAg ICAgICAgICAobGlzdCAiT3RoZXIiICIiCiAgICAgICAgICAgICAgICAgICAgICAnVGVYLXJ1bi1j b21tYW5kIHQgdCkKICAgICAgICAgICAgICAgIDs7IE5vdCBwYXJ0IG9mIHN0YW5kYXJkIFRlWC4K ICAgICAgICAgICAgICAgIChsaXN0ICJNYWtlaW5mbyIgIm1ha2VpbmZvICV0IgogICAgICAgICAg ICAgICAgICAgICAgJ1RlWC1ydW4tY29tcGlsZSBuaWwgdCkKICAgICAgICAgICAgICAgIChsaXN0 ICJBbVNUZVgiICJhbXN0ZXggXCJcXG5vbnN0b3Btb2RlXFxpbnB1dCAldFwiIgogICAgICAgICAg ICAgICAgICAgICAgJ1RlWC1ydW4tVGVYIG5pbCB0KSkpCgo7O319fQoKOzt7e3sgNSAtIChpbmZv ICIoYXVjdGV4KUFkdmFuY2VkIEZlYXR1cmVzIikKCjs7e3t7IDUuMiAoaW5mbyAiKGF1Y3RleClD b21wbGV0aW9uIikKCiAgICA7OyBpZiB0aGlzIGlzIG5vbi1uaWwgd2hlbiBBVUMgVGVYIGlzIGxv YWRlZCwgdGhlIFRlWCBlc2NhcGUgY2hhcmFjdGVyIGBcJwogICAgOzsgd2lsbCBiZSBib3VuZCB0 byBgVGVYLWVsZWN0cmljLW1hY3JvJwogICAgKHNldHEgVGVYLWVsZWN0cmljLWVzY2FwZSB0KQoK Ozt9fX0KCjs7e3t7IDUuNCAoaW5mbyAiKGF1Y3RleClJbmRlbnRpbmciKQoKICAgIDs7IG51bWJl ciBvZiBzcGFjZXMgdG8gYWRkIHRvIHRoZSBpbmRlbnRhdGlvbiBmb3IgZWFjaCBgXGJlZ2luJyBu b3QgbWF0Y2hlZAogICAgOzsgYnkgYSBgXGVuZCcKICAgIChzZXRxIExhVGVYLWluZGVudC1sZXZl bCA0KQoKICAgIDs7IG51bWJlciBvZiBzcGFjZXMgdG8gYWRkIHRvIHRoZSBpbmRlbnRhdGlvbiBm b3IgYFxpdGVtJydzIGluIGxpc3QKICAgIDs7IGVudmlyb25tZW50cwogICAgKHNldHEgTGFUZVgt aXRlbS1pbmRlbnQgLTQpCgogICAgOzsgbnVtYmVyIG9mIHNwYWNlcyB0byBhZGQgdG8gdGhlIGlu ZGVudGF0aW9uIGZvciBlYWNoIGB7JyBub3QgbWF0Y2hlZAogICAgOzsgYnkgYSBgfScKICAgIChz ZXRxIFRlWC1icmFjZS1pbmRlbnQtbGV2ZWwgNCkKCiAgICA7OyBmdW5jdGlvbiB0byBiZSBjYWxs ZWQgdXBvbiBwcmVzc2luZyBgUkVUJwogICAgOzsgYHJldHVybicgaW5kZW50cyB0aGUgY3VycmVu dCBsaW5lLCB0aGVuIGluc2VydHMgYSBuZXcgbGluZSBhbmQgbW92ZXMKICAgIDs7IHRoZSBjdXJz b3IgdG8gYW4gYXBwcm9wcmlhdGUgcG9zaXRpb24gYnkgdGhlIGxlZnQgbWFyZ2luCiAgICAoc2V0 cSBUZVgtbmV3bGluZS1mdW5jdGlvbiAnbmV3bGluZS1hbmQtaW5kZW50KQoKOzt9fX0KCjs7fX19 Cgo7O3t7eyA3IC0gKGluZm8gIihhdWN0ZXgpUnVubmluZyBUZVggYW5kIGZyaWVuZHMiKSBQcm9j ZXNzb3JzLCBWaWV3ZXJzIGFuZCBPdGhlciBQcm9ncmFtcwoKOzt7e3sgNy4xIEV4ZWN1dGluZyBD b21tYW5kcwoKOzsgZW5hYmxlIFRleC1QZGYgbW9kZQooc2V0cSBUZVgtUERGLW1vZGUgdCkKCgo7 OyAoc2V0cSBUZVgtdmlldy1mb3JtYXQgInBkZiIpCjs7IDstLSAgKHJlbW92ZSAiLnBkZiIgY29t cGxldGlvbi1pZ25vcmVkLWV4dGVuc2lvbnMpKQo7OyAoc2V0cSBwZGYtcHJldmlld2VyLXByb2dy YW0gInRleGRvYyIpCjs7ICAgJyhkaXJlZC12aWV3LWNvbW1hbmQtYWxpc3QgKHF1b3RlICgoIlxc LlxcKHBzXFx8cHNfcGFnZXNcXHxlcHNcXClcXCciIC4KOzsgICAidGV4ZG9jICVzIikgKCJcXC5w ZGZcXCciIC4gInRleGRvYyAlcyIpICgiXFwuXFwoanBlP2dcXHxnaWZcXHxwbmdcXClcXCciCjs7 ICAgLiAieHYgJXMiKSAoIlxcLmR2aVxcJyIgLiAidGV4ZG9jICVzIikpKSkKCjs7IChzZXRxIGxh dGV4LXJ1bi1jb21tYW5kICJwZGZsYXRleCIpCgo7O319fQoKOzt7e3sgNy4yIFZpZXdpbmcgdGhl IGZvcm1hdHRlZCBvdXRwdXQKCiAgICA7OyBsaXN0IG9mIHN0eWxlIG9wdGlvbnMgYW5kIHZpZXcg b3B0aW9ucwogICAgKHNldHEgVGVYLXZpZXctc3R5bGUgJygoIl5lcHNmJCIgImdob3N0dmlldyAl ZiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgiXm5jcyQiICJnaG9zdHZpZXcgJWYiKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAoIl5hNSQiICJ5YXAgJWQiKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAoIl5sYW5kc2NhcGUkIiAieWFwICVkIikKICAgICAgICAgICAgICAgICAg ICAgICAgICAgKCIuIiAieWFwICVkIikpKQoKOzt9fX0KCjs7e3t7IDcuMyBDYXRjaGluZyB0aGUg ZXJyb3JzCgogICAgOzsgZG9uJ3Qgc2hvdyBvdXRwdXQgb2YgVGVYIGNvbXBpbGF0aW9uIGluIG90 aGVyIHdpbmRvdwogICAgKHNldHEgVGVYLXNob3ctY29tcGlsYXRpb24gbmlsKQoKOzt9fX0KCjs7 fX19Cgo7O3t7eyA4IC0gKGluZm8gIihhdWN0ZXgpTXVsdGlmaWxlIikgRG9jdW1lbnRzCgogICAg OzsgQVVDIFRlWCB3aWxsIHdpbGwgYXNzdW1lIHRoZSBmaWxlIGlzIGEgbWFzdGVyIGZpbGUgaXRz ZWxmCiAgICAoc2V0cS1kZWZhdWx0IFRlWC1tYXN0ZXIgdCkKCjs7fX19Cgo7O3t7eyA5IC0gQXV0 b21hdGljIChpbmZvICIoYXVjdGV4KVBhcnNpbmcgRmlsZXMiKQoKICAgIDs7IGVuYWJsZSBwYXJz ZSBvbiBsb2FkIChpZiBubyBzdHlsZSBob29rIGlzIGZvdW5kIGZvciB0aGUgZmlsZSkKICAgIChz ZXRxIFRlWC1wYXJzZS1zZWxmIHQpCgogICAgOzsgZW5hYmxlIGF1dG9tYXRpYyBzYXZlIG9mIHBh cnNlZCBzdHlsZSBpbmZvcm1hdGlvbiB3aGVuIHNhdmluZwogICAgOzsgdGhlIGJ1ZmZlcgogICAg KHNldHEgVGVYLWF1dG8tc2F2ZSB0KQoKOzt9fX0KCjs7e3t7IDExIC0gKGluZm8gIihhdWN0ZXgp QXV0b21hdGljIikgQ3VzdG9taXphdGlvbgoKOzt7e3sgMTEuMSAoaW5mbyAiKGF1Y3RleClBdXRv bWF0aWMgR2xvYmFsIikgQ3VzdG9taXphdGlvbiBmb3IgdGhlIFNpdGUKCiAgICA7OyAodHJ5LXJl cXVpcmUgJ3RleC1zaXRlKSBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBjdXJyZW50IEFVQ1RlWCBy ZWxlYXNlcwoKICAgIDs7IGRpcmVjdG9yeSBjb250YWluaW5nIGF1dG9tYXRpY2FsbHkgZ2VuZXJh dGVkIFRlWCBpbmZvcm1hdGlvbi4gTXVzdCBlbmQKICAgIDs7IHdpdGggYSBzbGFzaAogICAgKHNl dHEgVGVYLWF1dG8tZ2xvYmFsCiAgICAgICAgICAifi8uZW1hY3MuZC9hdWN0ZXgtYXV0by1nZW5l cmF0ZWQtaW5mby8iKQoKOzt9fX0KCjs7e3t7IDExLjMgKGluZm8gIihhdWN0ZXgpQXV0b21hdGlj IExvY2FsIikgQ3VzdG9taXphdGlvbiBmb3IgYSBEaXJlY3RvcnkKCiAgICA7OyBkaXJlY3Rvcnkg Y29udGFpbmluZyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBUZVggaW5mb3JtYXRpb24uIE11c3Qg ZW5kCiAgICA7OyB3aXRoIGEgc2xhc2gKICAgIChzZXRxIFRlWC1hdXRvLWxvY2FsCiAgICAgICAg ICAifi8uZW1hY3MuZC9hdWN0ZXgtYXV0by1nZW5lcmF0ZWQtaW5mby8iKQoKOzt9fX0KCjs7fX19 Cgo7OyBzdXBwb3J0IGZvciBMYVRlWCBkb2N1bWVudHMKKHRyeS1yZXF1aXJlICdsYXRleCkKCjs7 IGV4dHJhIHN1cHBvcnQgZm9yIG91dGxpbmUgbWlub3IgbW9kZQoodHJ5LXJlcXVpcmUgJ291dC14 dHJhKQoKCjs7e3t7IChpbmZvICIocHJldmlldy1sYXRleClUb3AiKQoKOzsgKGFkZC1ob29rICdM YVRlWC1tb2RlLWhvb2sgJ0xhVGVYLXByZXZpZXctc2V0dXApCjs7IChhdXRvbG9hZCAnTGFUZVgt cHJldmlldy1zZXR1cCAicHJldmlldyIpCgo7OyBob3cgdG8gY2FsbCBncyBmb3IgY29udmVyc2lv biBmcm9tIEVQUwooc2V0cSBwcmV2aWV3LWdzLWNvbW1hbmQgIkM6L1Byb2dyYW0gRmlsZXMvZ3Mv Z3M4LjU0L2Jpbi9nc3dpbjMyYy5leGUiKQoobXktZmlsZS1leGVjdXRhYmxlLXAgcHJldmlldy1n cy1jb21tYW5kKQoKOzt9fX0KCgo7O3t7eyBudXdlYgoKOzsgZGVmaW5lIHdoYXQncyBuZWVkZWQg dG8gcHJvcGVybHkgY2FsbCBudXdlYgoobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ291dGxp bmUtcHJlZml4LWNoYXIpCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnb3V0bGluZS1yZWdl eHApCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnb3V0bGluZS1sZXZlbC1mdW5jdGlvbikK CihzZXRxIEF1Y1RlWC11c2VkIHQpICA7OyBkZWZpbmVkIGluIG1ham9yIG1vZGUgdG8gZWRpdCBu dXdlYiBmaWxlcyB3aXRoIEF1Y1RleAooc2V0cSBudXdlYi1jb21tZW50LWxlYWRlciAiQCUiKQoK KGF1dG9sb2FkICdudXdlYi1tb2RlICJudXdlYiIgbmlsIHQpCgooYWRkLWhvb2sgJ251d2ViLW1v ZGUtaG9vayAnbnV3ZWItY29tcHV0ZS1kLXUpCihhZGQtaG9vayAnbnV3ZWItbW9kZS1ob29rCiAg ICAgICAgICAnKGxhbWJkYSgpCiAgICAgICAgICAgICAoaW1lbnUtYWRkLXRvLW1lbnViYXIgIk51 d2ViIikpKQoKKHB1c2ggJygiXFwudyQiIC4gbnV3ZWItbW9kZSkgYXV0by1tb2RlLWFsaXN0KQoK KHdoZW4gKHRyeS1yZXF1aXJlICdudXdlYikgIDs7IGRlcGVuZHMgb24gVGVYLWxpc3AtZGlyZWN0 b3J5CiAgICAocHVzaCAobGlzdCAiUFdlYiIKICAgICAgICAgICAgICAgICJudXdlYiAlcyAmIHBk ZmxhdGV4IFwiXFxub25zdG9wbW9kZVxcaW5wdXR7JXN9XCIiCiAgICAgICAgICAgICAgICAnVGVY LXJ1bi1MYVRlWCBuaWwgdCkgVGVYLWNvbW1hbmQtbGlzdCkKICAgIChwdXNoIChsaXN0ICJXZWIi CiAgICAgICAgICAgICAgICAibnV3ZWIgJXMgJiBsYXRleCAtLXNyYyBcIlxcbm9uc3RvcG1vZGVc XGlucHV0eyVzfVwiIgogICAgICAgICAgICAgICAgJ1RlWC1ydW4tTGFUZVggbmlsIHQpIFRlWC1j b21tYW5kLWxpc3QpCiAgICA7OyBXZWF2ZSBnZW5lcmF0ZXMgVGV4IG91dHB1dCB0aGVuIHJ1bnMg TGFUZVgKICAgIChwdXNoIChsaXN0ICJXZWF2ZSIKICAgICAgICAgICAgICAgICJudXdlYiAtbyAl cyIKICAgICAgICAgICAgICAgICdUZVgtcnVuLUxhVGVYIG5pbCB0KSBUZVgtY29tbWFuZC1saXN0 KQogICAgOzsgVGFuZ2xlIGdlbmVyYXRlcyBvbmx5IHRoZSBzb3VyY2UgZmlsZSBjb21waWxlIG5v dCBkb25lCiAgICAocHVzaCAobGlzdCAiVGFuZ2xlIgogICAgICAgICAgICAgICAgIm51d2ViIC10 ICVzICYgZWNobyBcIlNvdXJjZXMgdXBkYXRlZFwiIgogICAgICAgICAgICAgICAgJ1RlWC1ydW4t TGFUZVggbmlsIHQpIFRlWC1jb21tYW5kLWxpc3QpKQoKOzt9fX0KCihtZXNzYWdlICIyOSBDb21t YW5kcyBmb3IgSHVtYW4gTGFuZ3VhZ2VzLi4uIERvbmUiKQoKOzt9fX0KCgo7OzsgLS0tLVsgQ2hh cHRlciAxNyAtIEFubmV4Cgo7OyBMYVRlWCBmb250aWZpY2F0aW9uIGZvciBGb250IExvY2sgbW9k ZQooaWYgd2luZG93LXN5c3RlbQogICAgKHdoZW4gKHRyeS1yZXF1aXJlICdmb250LWxhdGV4KQog ICAgICAgIChhZGQtaG9vayAnbGF0ZXgtbW9kZS1ob29rICd0dXJuLW9uLWZvbnQtbG9jayAnYXBw ZW5kKQogICAgICAgIChhZGQtaG9vayAnTGFUZVgtbW9kZS1ob29rICd0dXJuLW9uLWZvbnQtbG9j ayAnYXBwZW5kKSkpCjs7Ozs7Ozs7IE1VU1QgQkUgQUZURVIgTGFUZVggc3R1ZmYgdG8gd29yaywg cmlnaHQgbm93Li4uCgoKOzt7e3sgbGF0ZXggYWRkLW9ucyAocmVmdGV4LCAuLi4pCgo7OyBnZXQg bW9yZSBhcHByb3ByaWF0ZSB2YWx1ZXMgZm9yIE1pa1RlWAo7OyAoZGVmYXVsdCBjb25maWd1cmF0 aW9uIG9mIEFVQ1RlWCBpcyBub3QgdGhlIGJlc3QgZml0IGZvciBXaW5kb3dzIHN5c3RlbXMpCih3 aGVuIHJ1bm5pbmctbXMtd2luZG93cwogICAgKHRyeS1yZXF1aXJlICd0ZXgtbWlrKSkKCih0cnkt cmVxdWlyZSAncmVmdGV4KQoKOzsgOzsgcmVmdGV4Cjs7IChhdXRvbG9hZCAncmVmdGV4LW1vZGUg ICAgICJyZWZ0ZXgiICJSZWZUZVggTWlub3IgTW9kZSIgdCkKOzsgKGF1dG9sb2FkICd0dXJuLW9u LXJlZnRleCAgInJlZnRleCIgIlJlZlRlWCBNaW5vciBNb2RlIiBuaWwpCjs7IChhdXRvbG9hZCAn cmVmdGV4LWNpdGF0aW9uICJyZWZ0ZXgtY2l0ZSIgIk1ha2UgY2l0YXRpb24iIG5pbCkKOzsgKGF1 dG9sb2FkICdyZWZ0ZXgtaW5kZXgtcGhyYXNlLW1vZGUgInJlZnRleC1pbmRleCIgIlBocmFzZSBt b2RlIiB0KQo7OyAoYWRkLWhvb2sgJ0xhVGVYLW1vZGUtaG9vayAndHVybi1vbi1yZWZ0ZXgpICAg OyB3aXRoIEFVQ1RlWCBMYVRlWCBtb2RlCjs7IChhZGQtaG9vayAnbGF0ZXgtbW9kZS1ob29rICd0 dXJuLW9uLXJlZnRleCkgICA7IHdpdGggRW1hY3MgbGF0ZXggbW9kZQo7OyAoc2V0cSByZWZ0ZXgt cGx1Zy1pbnRvLUFVQ1RlWCB0KQo7OyA7ICBNLXggY3VzdG9taXplLXZhcmlhYmxlIFJFVCByZWZ0 ZXgtcGx1Zy1pbnRvLUFVQ1RlWCBSRVQKCjs7fX19CgoKOzt7e3sgLS1bIDMwIEVkaXRpbmcgKGlu Zm8gIihlbWFjcylQcm9ncmFtcyIpIF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKG1l c3NhZ2UgIjMwIEVkaXRpbmcgUHJvZ3JhbXMuLi4iKQoKOzs7IC0tLS1bIDMwLjEgTWFqb3IgTW9k ZXMgZm9yIFByb2dyYW1taW5nIExhbmd1YWdlcwoKKGF1dG9sb2FkICdhd2stbW9kZSAiY2MtbW9k ZSIgIkF3ayBlZGl0aW5nIG1vZGUuIiB0KQo7OyBvciB1c2UgYSBuZXcgQVdLIE1vZGUgZm9yIEFX SyBmaWxlcywgcmF0aGVyIHRoYW4gdGhlIG9sZGVyIG1vZGUgY29udGFpbmVkCjs7IGluIHRoZSBm aWxlIGF3ay1tb2RlLmVsIFtmcm9tIGh0dHA6Ly9wZW9wbGUuc211LmVkdS96d2FuZy9hd2stbW9k ZS5odG1sXT8/Cgo7OyAodHJ5LXJlcXVpcmUgJ2dyYXBodml6LWRvdC1tb2RlKQoKCjs7OyAtLS0t WyAzMC4zIEluZGVudGF0aW9uIGZvciBQcm9ncmFtcwoKOzsgdHVybiBvbiBhdXRvLWZpbGwgbW9k ZSBpbiBMaXNwIG1vZGVzCihhZGQtaG9vayAnbGlzcC1tb2RlLWhvb2sgJ3R1cm4tb24tYXV0by1m aWxsKQooYWRkLWhvb2sgJ2VtYWNzLWxpc3AtbW9kZS1ob29rICd0dXJuLW9uLWF1dG8tZmlsbCkK Cjs7IHVzZSBvbmUgb2Ygc2V2ZXJhbCBkaWZmZXJlbnQgaW5kZW50YXRpb24gc3R5bGVzIGZvciBD LWxpa2UgbW9kZXMKKHNldHEgYy1kZWZhdWx0LXN0eWxlCiAgICAgICcoKGF3ay1tb2RlIC4gInN0 cm91c3RydXAiKQogICAgICAgIChvdGhlciAuICJzdHJvdXN0cnVwIikpKQoKKGRlZnVuIG15LWMt bW9kZS1zZXR1cCAoKQogICJDdXN0b21pemUgbXkgYy9jKystbW9kZSBhbmQgYXdrLW1vZGUuIgog IDs7IGluZGVudCBwcm9wZXJseSBzb3VyY2UgYW5kIG5vbi1zb3VyY2UgYnVmZmVycwogIChsb2Nh bC1zZXQta2V5IFsocmV0dXJuKV0gJ25ld2xpbmUtYW5kLWluZGVudCkgIDsgKGNvbnRyb2wgbSkK ICAobG9jYWwtc2V0LWtleSBbKGxpbmVmZWVkKV0gJ25ld2xpbmUpKSAgICAgICAgICA7IChjb250 cm9sIGopCgooYWRkLWhvb2sgJ2MtbW9kZS1ob29rICdteS1jLW1vZGUtc2V0dXApCihhZGQtaG9v ayAnYysrLW1vZGUtaG9vayAnbXktYy1tb2RlLXNldHVwKQooYWRkLWhvb2sgJ2F3ay1tb2RlLWhv b2sgJ215LWMtbW9kZS1zZXR1cCkKCihkZWZ1biBiYWNrLXRvLWluZGVudGF0aW9uLW9yLWJlZ2lu bmluZyAoKQogIChpbnRlcmFjdGl2ZSkKICAoaWYgKC89IChwb2ludCkgKGxpbmUtYmVnaW5uaW5n LXBvc2l0aW9uKSkKICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQogICAgKGJhY2stdG8taW5kZW50 YXRpb24pKSkKCgo7OzsgLS0tLVsgMzAuNCBDb21tYW5kcyBmb3IgRWRpdGluZyB3aXRoIFBhcmVu dGhlc2VzCgo7OyBoaWdobGlnaHQgbWF0Y2hpbmcgcGFyZW50aGVzaXMKKEdOVUVtYWNzCiAgICAo cmVxdWlyZSAncGFyZW4pCiAgICAoc2hvdy1wYXJlbi1tb2RlIHQpCiAgICAoc2V0cSBzaG93LXBh cmVuLXJpbmctYmVsbC1vbi1taXNtYXRjaCB0KSkKKFhFbWFjcwogICAgKHBhcmVuLXNldC1tb2Rl ICdwYXJlbikpCgo7OyBpZiB0aGUgbWF0Y2hpbmcgcGFyZW4gaXMgb2Zmc2NyZWVuLCBzaG93IHRo ZSBtYXRjaGluZyBsaW5lIGluIHRoZSBlY2hvCjs7IGFyZWEgKyBtYW55IG90aGVyIHVzZWZ1bCB0 aGluZ3MKKHdoZW4gd2luZG93LXN5c3RlbQogICh3aGVuICh0cnktcmVxdWlyZSAnbWljLXBhcmVu KQogICAgICA7OyBhY3RpdmF0aW5nCiAgICAgIChwYXJlbi1hY3RpdmF0ZSkpKQoKOzsgZnJvbSBo YWxsQGdydW1weS5ubC5udXdjLm5hdnkubWlsCjs7IGdvdG8tbWF0Y2hpbmctcGFyZW4KCgo7Ozsg LS0tLVsgMzAuNSBNYW5pcHVsYXRpbmcgQ29tbWVudAoKKFhFbWFjcwogICAgKGRlZnVuIG15LWNv bW1lbnQtcmVnaW9uIChiZWcgZW5kKQogICAgICAiQ29tbWVudCBhIHJlZ2lvbiBvZiB0ZXh0Igog ICAgICAoaW50ZXJhY3RpdmUgInIiKQogICAgICAoY29tbWVudC1yZWdpb24gYmVnIGVuZCkKICAg ICAgKGdsb2JhbC1zZXQta2V5IFsobWV0YSBcOyldICdteS11bmNvbW1lbnQtcmVnaW9uKSkKCiAg ICAoZGVmdW4gbXktdW5jb21tZW50LXJlZ2lvbiAoYmVnIGVuZCkKICAgICAgIlVuY29tbWVudCBh IHJlZ2lvbiBvZiB0ZXh0IgogICAgICAoaW50ZXJhY3RpdmUgInIiKQogICAgICAoY29tbWVudC1y ZWdpb24gYmVnIGVuZCAtMSkKICAgICAgKGdsb2JhbC1zZXQta2V5IFsobWV0YSBcOyldICdteS1j b21tZW50LXJlZ2lvbikpCgogICAgKGdsb2JhbC1zZXQta2V5IFsobWV0YSBcOyldICdteS1jb21t ZW50LXJlZ2lvbikpCgooZGVmdW4gbXktP2NvbW1lbnQtcmVnaW9uICgpCiAgKHNhdmUtZXhjdXJz aW9uCiAgICAobGV0ICgoci1iIChyZWdpb24tYmVnaW5uaW5nKSkKICAgICAgICAgIChyLWUgKHJl Z2lvbi1lbmQpKSkKICAgICAgKGZ1bmNhbGwKICAgICAgKGlmIChwcm9nbgogICAgICAgICAgICAo Z290by1jaGFyIHItYikKICAgICAgICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQogICAgICAgICAg ICAobG9va2luZy1hdCAoZm9ybWF0ICJcXHMtKiVzIiAocmVnZXhwLXF1b3RlIGNvbW1lbnQtc3Rh cnQpKSkpCiAgICAgICAgICAoZnVuY3Rpb24gdW5jb21tZW50LXJlZ2lvbikKICAgICAgICAoZnVu Y3Rpb24gY29tbWVudC1yZWdpb24pKQogICAgICByLWIgci1lKSkpKQoKKGRlZnVuIG15LT9jb21t ZW50ICgpCiAgKGludGVyYWN0aXZlKQogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGlmIG1hcmstYWN0 aXZlCiAgICAgICAgKG15LT9jb21tZW50LXJlZ2lvbikKICAgICAgICAgIChmdW5jYWxsCiAgICAg ICAgICAgKGlmIChwcm9nbgogICAgICAgICAgICAgICAgIChiZWdpbm5pbmctb2YtbGluZSkKICAg ICAgICAgICAgICAgICAobG9va2luZy1hdCAoZm9ybWF0ICJcXHMtKiVzIiAocmVnZXhwLXF1b3Rl IGNvbW1lbnQtc3RhcnQpKSkpCiAgICAgICAgICAgICAgIChmdW5jdGlvbiB1bmNvbW1lbnQtcmVn aW9uKQogICAgICAgICAgICAgKGZ1bmN0aW9uIGNvbW1lbnQtcmVnaW9uKSkKICAgICAgIChwcm9n biAgKGJlZ2lubmluZy1vZi1saW5lKSAocG9pbnQpKQogICAgICAgKHByb2duIChlbmQtb2YtbGlu ZSkgKHBvaW50KSkpKSkpCgoKOzs7IC0tLS1bIDMwLjggQ29tcGxldGlvbiBmb3IgU3ltYm9sIE5h bWVzCgo7OyBkeW5hbWljIHdvcmQtY29tcGxldGlvbiBjb2RlCihsb2FkICJjb21wbGV0aW9uIikg IDs7IGEuby4sIGFkZCBjb21wbGV0aW9uLWMtbW9kZS1ob29rCihpbml0aWFsaXplLWNvbXBsZXRp b25zKQo7OyAoZ2xvYmFsLXNldC1rZXkgWyhjb250cm9sIHJldHVybildICdjb21wbGV0ZSkKCjs7 ID4gRG9lcyBFbWFjcyBzdXBwb3J0IGtleXdvcmQgYXV0b2NvbXBsZXRpb24gbGlrZSBWSSdzCjs7 ID4gQ29udHJvbCtQID8gSWYgeWVzLCB3aGF0IGlzIHRoZSBrZXkgY29tYm8/Cjs7ID4gV291bGQg eW91IHBlcmhhcHMgYmUgcmVmZXJyaW5nIHRvIE0tLyAsIGZvciBjZXJ0YWluIG1vZGVzIChjc3Mt bW9kZQo7OyA+IGZvciBpbnN0YW5jZSB0aGVyZSBhbHNvIGlzIE0tVEFCIHdoaWNoIGlzIGEgbGl0 dGxlIG1vcmUgaW50ZWxsaWdlbnQpCgo7OyBNLS8gcnVucyB0aGUgY29tbWFuZCBkYWJicmV2LWV4 cGFuZCBbZGFiYnJldl0KOzsgPSBjeWNsaW5nIGJlaGF2aW9yCgo7OyBDLU0tLyBydW5zIHRoZSBj b21tYW5kIGRhYmJyZXYtY29tcGxldGlvbiBbZGFiYnJldl0KOzsgPSBjb21wbGV0aW9uIGJ1ZmZl ciBiZWhhdmlvcgoKOzsgPiBJJ20gdHJ5aW5nIHRvIGhhdmUgY29kZSBjb21wbGV0aW9uIGluIEVt YWNzLCBidXQgaSBkb24ndCBrbm93IHdoYXQgdG8KOzsgPiBkby4gSW4gZWNsaXBzZSwgd2hlbiB3 ZSB3cml0aW5nIGEgamF2YSBjb2RlIGxpbmUsIGZvciBleGFtcGxlOgo7OyA+IFN5c3RlbS5vdXQu LCB3ZSBkbyBDXlNQQUNFIHRvIHNob3cgYSB3aW5kb3cgd2l0aCBzZXZlcmFsIG1ldGhvZHMKOzsg PiBhc3NvY2lhdGVkIChwcmludGwsIHByaW50LGV0YykuCjs7ID4gSSB3b3VsZCBsaWtlIHRvIGhh dmUgc29tZXRoaW5nIHNpbWlsYXIgaW4gRW1hY3MuIENhbiBhbnlib2R5IGhlbHAgbWU/Cjs7IFRy eSBNLVRBQiB3aXRoIGN1cnNvciBvbiB0aGUgc3ltYm9sOyBpcyB0aGF0IHdoYXQgeW91IGFyZSBs b29raW5nIGZvcj8KCgo7OzsgLS0tLVsgMzAuOSBHbGFzc2VzCgo7OyBmYWNlIHRvIGJlIHB1dCBv biBjYXBpdGFscyBvZiBhbiBpZGVudGlmaWVyIGxvb2tlZCB0aHJvdWdoIGdsYXNzZXMKKHNldHEg Z2xhc3Nlcy1mYWNlICdib2xkKQoKOzsgc3RyaW5nIHRvIGJlIGRpc3BsYXllZCBhcyBhIHZpc3Vh bCBzZXBhcmF0b3IgaW4gdW5yZWFkYWJsZSBpZGVudGlmaWVycwooc2V0cSBnbGFzc2VzLXNlcGFy YXRvciAiIikKCgo7O3t7eyBDb2xsZWN0aW9uIG9mIEVtYWNzIERldmVsb3BtZW50IEVudmlyb25t ZW50IFRvb2xzCgo7OyA7OyBhZGQgU2VtYW50aWMgQm92aW5hdG9yJ3MgZGlyZWN0b3J5IHRvIHRo ZSBsb2FkIHBhdGgKOzsgKG15LWFkZC10by1sb2FkLXBhdGgKOzsgICJEOi91c2Vycy9zaGFyZS9l bWFjcy9zaXRlLWxpc3Avc2VtYW50aWMtMS40LjQvIikKCjs7IDs7IGFkZCBzcGVlZGJhcidzIGRp cmVjdG9yeSB0byB0aGUgbG9hZCBwYXRoCjs7IChteS1hZGQtdG8tbG9hZC1wYXRoCjs7ICAiRDov dXNlcnMvc2hhcmUvZW1hY3Mvc2l0ZS1saXNwL3NwZWVkYmFyLTAuMTRiZXRhNC8iKQoKOzsgOzsg YWRkIEVuaGFuY2VkIEludGVncmF0aW9uIG9mIEVtYWNzIEludGVycHJldGVkIE9iamVjdHMnIGRp cmVjdG9yeSB0byB0aGUKOzsgOzsgbG9hZCBwYXRoCjs7IChteS1hZGQtdG8tbG9hZC1wYXRoCjs7 ICAiRDovdXNlcnMvc2hhcmUvZW1hY3Mvc2l0ZS1saXNwL2VpZWlvLTAuMTcvIikKCjs7IDs7IG11 c3QgYmUgYmVmb3JlIHRoZSBjb21tYW5kIHRoYXQgYWN0dWFsbHkgbG9hZHMgc2VtYW50aWMKOzsg KHNldHEgc2VtYW50aWMtbG9hZC10dXJuLWV2ZXJ5dGhpbmctb24gdCkKCjs7IChyZXF1aXJlICdz ZW1hbnRpYy1sb2FkKQoKCjs7IDs7ISEgUGFja2FnZSBzcGVlZGJhciBkb2VzIG5vdCBkZWZpbmUg c3BlZWRiYXItdmVyc2lvbgo7OyA7OyBTb3VyY2UgcGFyc2luZy9jb2RlIGJyb3dzaW5nCjs7Ozsg KG15LWFkZC10by1sb2FkLXBhdGggInk6L3NpdGUtbGlzcC9jZWRldC8iKQo7OyAobXktYWRkLXRv LWxvYWQtcGF0aCAieTovc2l0ZS1saXNwL2NlZGV0L2NvbW1vbi8iKQo7OyAodHJ5LXJlcXVpcmUg J2NlZGV0KQo7OyAoR05VRW1hY3MKOzsgICAgIChzZW1hbnRpYy1sb2FkLWVuYWJsZS1jb2RlLWhl bHBlcnMpKQoKOzsgKG15LWFkZC10by1sb2FkLXBhdGggInk6L3NpdGUtbGlzcC9lY2IvIikKKHRy eS1yZXF1aXJlICdlY2ItYXV0b2xvYWRzKQo7OyAodHJ5LXJlcXVpcmUgJ2VjYikKCjs7IEZST00g RERXCjs7IDs7U291cmNlIHBhcnNpbmcvY29kZWJyb3dzaW5nCjs7IChsb2FkLWxpYnJhcnkgImNl ZGV0L2NvbW1vbi9jZWRldC5lbCIpCjs7IChzZW1hbnRpYy1sb2FkLWVuYWJsZS1jb2RlLWhlbHBl cnMpCjs7IChwdXNoIChjb25jYXQgc2l0ZS1saXNwICIvZWNiLTIuMzEiKSBsb2FkLXBhdGgpCjs7 ICh0cnktcmVxdWlyZSAnZWNiKQoKCjs7IChjdXN0b20tc2V0LXZhcmlhYmxlcwo7OyAgJyhlY2It ZGlyZWN0b3JpZXMtbWVudS11c2VyLWV4dGVuc2lvbi1mdW5jdGlvbiBuaWwpCjs7ICAnKGVjYi1o aXN0b3J5LW1lbnUtdXNlci1leHRlbnNpb24tZnVuY3Rpb24gbmlsKQo7OyAgJyhlY2ItbWV0aG9k cy1tZW51LXVzZXItZXh0ZW5zaW9uLWZ1bmN0aW9uIG5pbCkKOzsgICcoZWNiLW9wdGlvbnMtdmVy c2lvbiAiMi4zMSIpCjs7ICAnKGVjYi1zb3VyY2VzLW1lbnUtdXNlci1leHRlbnNpb24tZnVuY3Rp b24gbmlsKSkKCjs7IElmIHlvdSd2ZSBpbnN0YWxsZWQgQ0VERVQgYW5kIEVDQiwgZWFzc2lzdCBp cyB3b3J0aCB0cnlpbmcgb3V0Ogo7OyAgICAgaHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL2du dS1lbWFjcy1zb3VyY2VzQGdudS5vcmcvbXNnMDAyOTIuaHRtbAo7Owo7OyBJdCB1c2VzIENFREVU IHRvIHByb3ZpZGUgYSBoYW5keSBzeW1ib2xzIGJyb3dzZXIgZm9yIHRoZSBjdXJyZW50IGZpbGUs IHRoYXQKOzsgbmFycm93cyBkb3duIHRoZSBsaXN0IGFzIHlvdSB0eXBlIHN1YnN0cmluZ3MuIFRh c3RlcyBkaWZmZXIsIGJ1dCBJIGZvciBvbmUKOzsgcmVhbGx5IGxpa2UgdGhpcy4KCjs7fX19Cgoo bWVzc2FnZSAiMzAgRWRpdGluZyBQcm9ncmFtcy4uLiBEb25lIikKCjs7fX19CgoKOzt7e3sgLS1b IDMxIChpbmZvICIoZW1hY3MpQnVpbGRpbmciKSBDb21waWxpbmcgYW5kIFRlc3RpbmcgUHJvZ3Jh bXMgXS0tLS0tLQoKKG1lc3NhZ2UgIjMxIENvbXBpbGluZyBhbmQgVGVzdGluZyBQcm9ncmFtcy4u LiIpCgo7OyA+PiBJdCdzIHBvc3NpYmxlIHRvIHNlZSwgd2hpbGUgd2UgYXJlIHByb2dyYW1taW5n LCBpZiB3ZSBkaWQgYSBtaXN0YWtlLiBJbgo7OyA+PiBlY2xpcHNlLCB3aGVuIHdlIGRvIGFuIGVy cm9yLCBmb3IgZXhhbXBsZSwgZm9yZ2V0IGEgOyAsIGFuIHVuZGVybGluZQo7OyA+PiBhcHBlYXJz IGluIHRoZSBsaW5lIGluZGljYXRpbmcgdGhhdCBzb21ldGhpbmcgaXMgd3JvbmcuIEl0J3MgcG9z c2libGUgdG8KOzsgPj4gaGF2ZSBzb21ldGhpbmcgbGlrZSB0aGlzIGluIEVtYWNzPwo7OyA+Cjs7 ID4gVGhlcmUncyBhIENXYXJuIG1vZGUgZm9yIEMgYW5kIEMrKywgYnV0IEkgZG9uJ3Qga25vdyBh Ym91dCBzaW1pbGFyCjs7ID4gZmVhdHVyZXMgZm9yIEphdmEuICBBbnlvbmU/Cgo7OyBmbHltYWtl IGNhbiBjb21waWxlIGluIHRoZSBiYWNrZ3JvdW5kIGFuZCBjb2xvcml6ZSBsaW5lcyB3aXRoIGVy cm9ycy93YXJuaW5ncwo7OyBodHRwOi8vZmx5bWFrZS5zb3VyY2Vmb3JnZS5uZXQvCjs7IGh0dHA6 Ly93d3cuZW1hY3N3aWtpLm9yZy9jZ2ktYmluL3dpa2kvSmRlZUZseW1ha2UKCgo7OzsgLS0tLVsg MzEuMSBSdW5uaW5nIENvbXBpbGF0aW9ucyB1bmRlciBFbWFjcwoKOzsgaW52b2tlIGEgY29tcGls ZXIgd2l0aCB0aGUgc2FtZSBjb21tYW5kIGFzIGluIHRoZSBsYXN0IGludm9jYXRpb24gb2YKOzsg YGNvbXBpbGUnCihnbG9iYWwtc2V0LWtleSBbKGY5KV0gJ3JlY29tcGlsZSkKCjs7IHNjcm9sbCB0 aGUgKmNvbXBpbGF0aW9uKiBidWZmZXIgd2luZG93IGFzIG91dHB1dCBhcHBlYXJzCihzZXRxIGNv bXBpbGF0aW9uLXNjcm9sbC1vdXRwdXQgdCkKCjs7IGNvbXBpbGUgdGhlIHByb2dyYW0gaW5jbHVk aW5nIHRoZSBjdXJyZW50IGJ1ZmZlcgooc2V0cSBjb21waWxhdGlvbi13aW5kb3ctaGVpZ2h0IDQp CgooZGVmdmFyIG1ha2UtY2xlYW4tY29tbWFuZCAibWFrZSBjbGVhbiBhbGwiCiAgIipDb21tYW5k IHVzZWQgYnkgdGhlIGBtYWtlLWNsZWFuJyBmdW5jdGlvbi4iKQoKKGRlZnVuIG1ha2UtY2xlYW4g KCZvcHRpb25hbCBhcmcpCiAgIlJ1biBhIG1ha2UgY2xlYW4uIgogIChpbnRlcmFjdGl2ZSAiUCIp CiAgKHJlcXVpcmUgJ2NvbXBpbGUpIDs7IG5lZWRlZCBmb3IgY29tcGlsZS1pbnRlcm5hbAogIChp ZiBhcmcKICAgICAgKHNldHEgbWFrZS1jbGVhbi1jb21tYW5kIChyZWFkLXN0cmluZyAiQ29tbWFu ZDogIiBtYWtlLWNsZWFuLWNvbW1hbmQpKSkKICAoc2F2ZS1zb21lLWJ1ZmZlcnMgKG5vdCBjb21w aWxhdGlvbi1hc2stYWJvdXQtc2F2ZSkgbmlsKQogIChjb21waWxlLWludGVybmFsIG1ha2UtY2xl YW4tY29tbWFuZCAiTm8gbW9yZSBlcnJvcnMiKSkKCihnbG9iYWwtc2V0LWtleSBbKHNoaWZ0IGY5 KV0gJ21ha2UtY2xlYW4pCgoKOzs7IC0tLS1bIDMxLjIgU2VhcmNoaW5nIHdpdGggR3JlcCB1bmRl ciBFbWFjcwoKOzsgaWdub3JlIGNhc2UgZGlzdGluY3Rpb25zIGluIHRoZSBkZWZhdWx0IGdyZXAg Y29tbWFuZAooc2V0cSBncmVwLWNvbW1hbmQgImdyZXAgLW4gLWkgLWUgIikKCjs7IGdyZXArZW1h Y3MgMjIgKyBjeWd3aW4gZG9lcyBub3QgZm9sbG93IGZpbGUgbGlua3MKOzsgdHJ5IGFkZGluZyAi LW5IIiB0byB5b3VyIGdyZXAgb3B0aW9ucy4KCgo7OzsgLS0tLVsgMzEuMyBDb21waWxhdGlvbiBN b2RlCgo7OyBkaXNwbGF5IHRoZSBuZXh0IGNvbXBpbGVyIGVycm9yIG1lc3NhZ2UKKGdsb2JhbC1z ZXQta2V5IFsoZjEwKV0gJ25leHQtZXJyb3IpCgo7OyBkaXNwbGF5IHRoZSBwcmV2aW91cyBjb21w aWxlciBlcnJvciBtZXNzYWdlCihnbG9iYWwtc2V0LWtleSBbKHNoaWZ0IGYxMCldICdwcmV2aW91 cy1lcnJvcikKCjs7IGRpc3BsYXkgdGhlIGZpcnN0IGNvbXBpbGVyIGVycm9yIG1lc3NhZ2UKKGds b2JhbC1zZXQta2V5IFsoY29udHJvbCBmMTApXSAnZmlyc3QtZXJyb3IpCgo7OyBoaWdobGlnaHQg YW5kIHBhcnNlIHRoZSB3aG9sZSBjb21waWxhdGlvbiBvdXRwdXQgYXMgc29vbiBhcyBpdCBhcnJp dmVzCihzZXRxIGNvbXBpbGUtYXV0by1oaWdobGlnaHQgdCkKCgo7OzsgLS0tLVsgMzEuNSBSdW5u aW5nIERlYnVnZ2VycyBVbmRlciBFbWFjcwoKOzt7e3sgRGVidWdnaW5nIE1lcmN1cnkgcHJvZ3Jh bXMKCjs7IDEuIFB1dCB0aGVzZSBsaW5lcyBpbiB5b3VyIC5lbWFjcyBmaWxlOgoKOzsgKHNldHEg bWVyY3VyeS1kaXIgKGdldGVudiAiTUVSQ1VSWV9ESVIiKSkKOzsgKGxvYWQtZmlsZSAoY29uY2F0 IG1lcmN1cnktZGlyICIvbGliL21lcmN1cnkvZWxpc3AvZ3VkLmVsIikpCjs7IChzZXRxIG1kYi1j b21tYW5kLW5hbWUgImJhc2guZXhlIG1kYiAuL21hc19zZXJ2ZXIuZXhlIC1jIAo7OyAuLi9vbmxp bmUvbWFzX3NlcnZlci9tYXNfY29uZmlnX2xvY2FsLnhtbCAtZCAuLi9kYXRhIikpCgo7OyAyLiBU byBzdGFydCB0aGUgZGVidWdnZXIsIG9wZW4gYSBmaWxlIGluIHlvdXIgYnVpbGQgZGlyZWN0b3J5 LAo7OyAgICBlLmcuIGJ1aWxkL01ha2VmaWxlCgo7OyAzLiBSdW4gTS14IGFuZCB0aGVuIHR5cGUg bWRiCgo7OyA0LiBBdCB0aGUgcHJvbXB0IHlvdSBzaG91bGQgc2VlIHRoZSBjb21tYW5kIGZyb20g dGhlIC5lbWFjcyBmaWxlOgo7OyAiYmFzaC5leGUgbWRiIC4vbWFzX3NlcnZlci5leGUgLWMgCjs7 IC4uL29ubGluZS9tYXNfc2VydmVyL21hc19jb25maWdfbG9jYWwueG1sIC1kIC4uL2RhdGEiCgo7 OyBDaGFuZ2UgaWYgbmVjZXNzYXJ5IGFuZCBoaXQgdGhlICdSZXR1cm4nIGtleQoKOzsgNS4gRmlu ZCB5b3VyIGJ1Z3MuCgo7OyBLbm93biBwcm9ibGVtczoKOzsgICAtIHRhYiBjb21wbGV0aW9uIGRv ZXNuJ3Qgd29yawoKOzt9fX0KCjs7e3t7IERlYnVnZ2luZyBMaXNwIHByb2dyYW1zCgo7OyBFbWFj cyBoYXMgdGhlIGJhc2ljIGRlYnVnZ2VyL3N0YWNrIHRyYWNlLCBidXQgaXQgYWxzbyBoYXMgZWRl YnVnLCB3aGljaAo7OyBpcyB2ZXJ5IHBvd2VyZnVsLCBmb3IgdGhlIG1vcmUgY29tcGxleCBzaXR1 YXRpb24uCgo7OyBZb3UgY2FuIGNhdXNlIHRoZSBkZWJ1Z2dlciB0byBiZSBjYWxsZWQgYXQgYSBj ZXJ0YWluIHBvaW50IGluIHlvdXIKOzsgcHJvZ3JhbSBieSB3cml0aW5nIHRoZSBleHByZXNzaW9u IGAoZGVidWcpJyBhdCB0aGF0IHBvaW50LiAgVG8gZG8gdGhpcywKOzsgdmlzaXQgdGhlIHNvdXJj ZSBmaWxlLCBpbnNlcnQgdGhlIHRleHQgYChkZWJ1ZyknIGF0IHRoZSBwcm9wZXIgcGxhY2UsCjs7 IGFuZCB0eXBlIGBDLU0teCcuCgo7OyBgYycgIEV4aXQgdGhlIGRlYnVnZ2VyIGFuZCBjb250aW51 ZSBleGVjdXRpb24KOzsgYGQnICBDb250aW51ZSBleGVjdXRpb24sIGJ1dCBlbnRlciB0aGUgZGVi dWdnZXIgdGhlIG5leHQgdGltZSBhbnkgTGlzcAo7OyAgICAgIGZ1bmN0aW9uIGlzIGNhbGxlZC4K CihkZWZpbmUta2V5IGVtYWNzLWxpc3AtbW9kZS1tYXAgWyhjb250cm9sIHgpICh4KV0gJ2VkZWJ1 Zy1ldmFsLXRvcC1sZXZlbC1mb3JtKQooZGVmaW5lLWtleSBlbWFjcy1saXNwLW1vZGUtbWFwIFso Y29udHJvbCB4KSAoeCldICdlZGVidWctZGVmdW4pCgooYXV0b2xvYWQgJ2VkZWJ1Zy1ldmFsLXRv cC1sZXZlbC1mb3JtICJlZGVidWciKQoKKHNldHEgZWRlYnVnLWdsb2JhbC1wcmVmaXggIlxDLXhY IikKCihhZGQtaG9vayAnY2wtbG9hZC1ob29rCiAgICAgICAgICAnKGxhbWJkYSAoKQogICAgICAg ICAgICAgKGFkZC1ob29rICdlZGVidWctc2V0dXAtaG9vawogICAgICAgICAgICAgICAgICAgICAg ICcobGFtYmRhICgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvYWQtbGlicmFyeSAiY2wt c3BlY3MiKSkpKSkKCjs7IHRvZ2dsZSB3aGV0aGVyIHRvIGVudGVyIExpc3AgZGVidWdnZXIgd2hl biBhbiBlcnJvciBpcyBzaWduYWxlZAo7OyAoZ2xvYmFsLXNldC1rZXkgWyhzdXBlciBjKSAoZCld ICd0b2dnbGUtZGVidWctb24tZXJyb3IpCgo7O319fQoKCjs7OyAtLS0tWyAzMS42IEV4ZWN1dGlu ZyBMaXNwIEV4cHJlc3Npb25zCgo7OyBzaG93IGZ1bmN0aW9uIGFyZ2xpc3Qgb3IgdmFyaWFibGUg ZG9jc3RyaW5nIGluIGVjaG8gYXJlYQooYWRkLWhvb2sgJ2VtYWNzLWxpc3AtbW9kZS1ob29rICd0 dXJuLW9uLWVsZG9jLW1vZGUpCihhZGQtaG9vayAnbGlzcC1pbnRlcmFjdGlvbi1tb2RlLWhvb2sg J3R1cm4tb24tZWxkb2MtbW9kZSkKKGFkZC1ob29rICdpZWxtLW1vZGUtaG9vayAndHVybi1vbi1l bGRvYy1tb2RlKQoKCjs7OyAtLS0tWyAzMS44IEV2YWx1YXRpbmcgRW1hY3MtTGlzcCBFeHByZXNz aW9ucwoKOzsgZW5hYmxlIHRoZSB1c2Ugb2YgdGhlIGNvbW1hbmQgYGV2YWwtZXhwcmVzc2lvbicg d2l0aG91dCBjb25maXJtYXRpb24KKHB1dCAnZXZhbC1leHByZXNzaW9uICdkaXNhYmxlZCBuaWwp CgoKOzs7IC0tLS1bIDMxLjkgTGlzcCBJbnRlcmFjdGlvbiBCdWZmZXJzCgo7OyB0byBldmFsdWF0 ZSBhIG5vbi1pbnRlcmFjdGl2ZSBjb21tYW5kLCBzaW1wbHkgdXNlIElFTE0hCgo7OyBpbnRlcmFj dGlvbiBtb2RlIGZvciBFbWFjcyBMaXNwCihhdXRvbG9hZCAnaWVsbSAiaWVsbSIgIlN0YXJ0IGFu IGluZmVyaW9yIEVtYWNzIExpc3Agc2Vzc2lvbiIgdCkKOzsgIWlmIGBjb21pbnQtbWluLWhpc3Rv cnktc2l6ZScgaXMgbm90IGluaXRpYWxpc2VkLCBJRUxNIHdpbGwgZmFpbCE/CihzZXRxIGNvbWlu dC1taW4taGlzdG9yeS1zaXplIDUpCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnY29taW50 LW1pbi1oaXN0b3J5LXNpemUpCgoKOzs7IC0tLS1bIDMxLjEwIFJ1bm5pbmcgYW4gRXh0ZXJuYWwg TGlzcAoKOzsgSnVzdCBhcyBpbiBDLCBDKyssIEphdmEsIFBlcmwsIFB5dGhvbiwgZXRjLCBMaXNw IGNvZGUgaXMga2VwdCBpbgo7OyBmaWxlcy4gQWxsIHRoZSBub3JtYWwgZWRpdGluZyBvcGVyYXRp b25zIGFyZSBwZXJmb3JtZWQgb24gZmlsZXMuIEluIHRoaXMKOzsgcmVzcGVjdCwgaGFja2luZyBp biBMaXNwIGlzIGxpa2UgaGFja2luZyBpbiBhbnkgb3RoZXIgbGFuZ3VhZ2UgdGhhdCB5b3UKOzsg YXJlIHVzZWQgdG8uIFdoYXQncyBkaWZmZXJlbnQgaXMgdGhhdCB3aGF0IHlvdSBhcmUgaGFja2lu ZyBpcyBhIHJ1bm5pbmcKOzsgTGlzcCBwcm9ncmFtLiBXaGVuIHlvdSBlZGl0IGEgZnVuY3Rpb24g ZGVmaW5pdGlvbiBvciBhZGQgYSBuZXcgb25lLCB5b3UKOzsgY29tcGlsZSBpdCBpbnRvIGEgcnVu bmluZyBwcm9ncmFtLiBUaGVyZSBpcyBubyBjb21waWxlLCBsaW5rLCBydW4sIGRlYnVnCjs7IGN5 Y2xlIGFzIHlvdSBrbm93IGl0IGZyb20gQyBvciBKYXZhLgo7OyBQb25kZXIgdGhhdCBmb3IgYSBt aW51dGUuCjs7IFdoZW4geW91IGZpeCBhIGJ1ZyBpbiBhIEMgZnVuY3Rpb24sIHlvdSBoYXZlIHRv IHJlY29tcGlsZSwgcmVsaW5rLCBhbmQKOzsgcmVsb2FkIHlvdXIgcHJvZ3JhbSBiZWZvcmUgeW91 IGNhbiB0ZXN0IHRoZSBmaXguIFlvdSBkb24ndCBkbyB0aGF0IGluCjs7IExpc3AuIFlvdSBtYWtl IHRoZSBmaXggYW5kIHRoZW4gZ28gc3RyYWlnaHQgdG8gdGVzdGluZyBpdC4gVGhpcyBwcm9jZXNz Cjs7IGNhbiBiZSBldmVuIGZhc3RlciB0aGFuIGZpeGluZyBhIGJ1ZyBpbiBhIHNjcmlwdGluZyBs YW5ndWFnZSBsaWtlIFBlcmwuCgo7OyBzdXBlcmlvciBsaXNwIGluZmVyaW9yIG1vZGUgZXh0ZW5z aW9uCih3aGVuICh0cnktcmVxdWlyZSAnc2xpbWVYWFgpCgogICAgOzsgaW5kZW50YXRpb24KICAg IChzbGltZS1zZXR1cCkKCiAgICAoYWRkLWhvb2sgJ2xpc3AtbW9kZS1ob29rCiAgICAgICAgICAg ICAgJyhsYW1iZGEgKCkKICAgICAgICAgICAgICAgICAoc2xpbWUtbW9kZSB0KSkpCiAgICAoYWRk LWhvb2sgJ2luZmVyaW9yLWxpc3AtbW9kZS1ob29rCiAgICAgICAgICAgICAgJyhsYW1iZGEgKCkK ICAgICAgICAgICAgICAgICAoaW5mZXJpb3Itc2xpbWUtbW9kZSB0KSkpCgogICAgOzsgR251IENM SVNQIC0gSW5mZXJpb3IgTGlzcCBNb2RlICYgSUxJU1AgKHN3aXRjaGVzIGZvciBBTlNJICYgbm8g YmFubmVyKQogICAgKGRlZnZhciBjbGlzcC1kaXIKICAgICAgKGlmIHJ1bm5pbmctbXMtd2luZG93 cwogICAgICAgICAgImU6L3Ztd2FyZS1ob21lL2Jpbi93aW4zMi9jbGlzcC0yLjMxL2Z1bGwvIgog ICAgICAgICIvdXNyL2JpbiIpKQoKICAgIChkZWZ2YXIgY2xpc3AtZXhlCiAgICAgIChpZiBydW5u aW5nLW1zLXdpbmRvd3MKICAgICAgICAgIChjb25jYXQgY2xpc3AtZGlyICJsaXNwLmV4ZSIpCiAg ICAgICAgKGNvbmNhdCBjbGlzcC1kaXIgIi8iICJjbGlzcCIpKSkKCiAgICA7OyBvcHRpb25hbGx5 LCBzcGVjaWZ5IHRoZSBsaXNwIHByb2dyYW0geW91IGFyZSB1c2luZy4gRGVmYXVsdCBpcyAibGlz cCIuCiAgICA7OyBpbmNsdWRlIHRoZSBmdWxsIGxpbmtpbmcgc2V0IHdpdGggYC1LIGZ1bGwnCiAg ICAoc2V0cSBpbmZlcmlvci1saXNwLXByb2dyYW0KICAgICAgICAgIChpZiBydW5uaW5nLW1zLXdp bmRvd3MKICAgICAgICAgICAgICAoY29uY2F0IGNsaXNwLWV4ZQogICAgICAgICAgICAgICAgICAg ICAgIiAtQiAiIGNsaXNwLWRpcgogICAgICAgICAgICAgICAgICAgICAgIiAtTSAiIGNsaXNwLWRp ciAibGlzcGluaXQubWVtIgogICAgICAgICAgICAgICAgICAgICAgIiAtYW5zaSAtcSIpCiAgICAg ICAgICAgIChjb25jYXQgY2xpc3AtZXhlCiAgICAgICAgICAgICAgICAgICAgIiAtQiAiIGNsaXNw LWRpcgogICAgICAgICAgICAgICAgICAgICIgLWFuc2kgLXEiKSkpICA7OyAiY2xpc3AgLUsgZnVs bCIKCiAgICA7OyBjb25uZWN0IGF1dG9tYXRpY2FsbHkgdG8gbXkgbGlzcCB3aGVuIG9wZW5pbmcg YSBsaXNwIGZpbGUKICAgIChkZWZ1biBjbGlraTpzdGFydC1zbGltZSAoKQogICAgICAodW5sZXNz IChzbGltZS1jb25uZWN0ZWQtcCkKICAgICAgICAoc2F2ZS1leGN1cnNpb24gKHNsaW1lKSkpKQog ICAgKGFkZC1ob29rICdzbGltZS1tb2RlLWhvb2sgJ2NsaWtpOnN0YXJ0LXNsaW1lKQoKICAgIDs7 IGF1dG9tYXRpY2FsbHkgc2hvdyBkb2N1bWVudGF0aW9uIGZvciBjb2RlIG5lYXIgdGhlIHBvaW50 CiAgICAoYWRkLWhvb2sgJ3NsaW1lLW1vZGUtaG9vawogICAgICAgICAgICAgIChsYW1iZGEgKCkK ICAgICAgICAgICAgICAgIChzbGltZS1hdXRvZG9jLW1vZGUgdCkpKQoKOzsgICA7OyBHTlUgQ0xJ U1AgLSBodHRwOi8vY2xpc3AuY29ucy5vcmcvCjs7ICAgKGRlZnVuIGNsaXNwLXN0YXJ0ICgpCjs7 ICAgICAoaW50ZXJhY3RpdmUpCjs7ICAgICAoc2hlbGwtY29tbWFuZCAoY29uY2F0ICJjOi9iaW4v Y2xpc3AtMi4zMi9mdWxsL2xpc3AuZXhlICIKOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ii1CIGM6L2Jpbi9jbGlzcC0yLjMyL2Z1bGwvICIKOzsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIi1NIGM6L2Jpbi9jbGlzcC0yLjMyL2Z1bGwvbGlzcGluaXQubWVtICIKOzsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIi1pIGM6L3Vzci9ob21lLy5zbGltZS5saXNwICIKOzsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIi1hbnNpIC1xJiIpKSkpCgoKOyBGdW5jdGlvbnMgYW5kIGtl eSBiaW5kaW5ncyBmb3IgZ2V0dGluZyBFbWFjcyB0byBpbnRlcmFjdCB3aXRoIEdDTC4KOyBUaG9t YXMgUi4gSW9lcmdlciwgRGVwdCBvZiBDb21wdXRlciBTY2llbmNlLCBUZXhhcyBBJk0gVW5pdmVy c2l0eQo7IHNlZSBodHRwOi8vd3d3LmNzLnRhbXUuZWR1L2ZhY3VsdHkvaW9lcmdlci9lbWFjcy1n Y2wuaHRtbCBmb3IgbW9yZSBkZXRhaWxzCgooZ2xvYmFsLXNldC1rZXkgIlxDLXQiIChtYWtlLWtl eW1hcCkpCgooZGVmdW4gcnVuLWdjbCAoKQogIChpbnRlcmFjdGl2ZSkKICAoc3BsaXQtd2luZG93 KQogIChvdGhlci13aW5kb3cgMSkKICAoaW5mZXJpb3ItbGlzcCAiZ2NsIikpCgooZGVmdW4gZ2Ns LWRlYnVnLXF1aXQgKCkKICAoaW50ZXJhY3RpdmUpCiAgKGNvbWludC1zZW5kLXN0cmluZyAiKmlu ZmVyaW9yLWxpc3AqIiAiOnFcQy1NIikpCgooZGVmdW4gZ2NsLXF1aXQgKCkKICAoaW50ZXJhY3Rp dmUpCiAgKGNvbWludC1zZW5kLXN0cmluZyAiKmluZmVyaW9yLWxpc3AqIiAiKGJ5ZSlcQy1NIikp CgooZGVmdW4gZ2NsLWV2YWwtYnVmZmVyICgpCiAgKGludGVyYWN0aXZlKQogIChzZXQtbWFyayAw KQogIChlbmQtb2YtYnVmZmVyKQogIChsaXNwLWV2YWwtcmVnaW9uIDEgKHBvaW50KSkKICAoZXhj aGFuZ2UtcG9pbnQtYW5kLW1hcmspKQoKKGdsb2JhbC1zZXQta2V5ICJcQy10bCIgJ3J1bi1nY2wp CihnbG9iYWwtc2V0LWtleSAiXEMtdGUiICdsaXNwLWV2YWwtZGVmdW4pCihnbG9iYWwtc2V0LWtl eSAiXEMtdHciICdzd2l0Y2gtdG8tbGlzcCkgOyBzcGxpdCBzY3JlZW4hCihnbG9iYWwtc2V0LWtl eSAiXEMtdHEiICdnY2wtZGVidWctcXVpdCkKKGdsb2JhbC1zZXQta2V5ICJcQy10YiIgJ2djbC1l dmFsLWJ1ZmZlcikKKGdsb2JhbC1zZXQta2V5ICJcQy10eCIgJ2djbC1xdWl0KQoKOyBjb21tYW5k cyAoYWZ0ZXIgcHJlZml4IG9mIGNvbnRyb2wtdCkKOyBsID0gc3RhcnQgbGlzcAo7IGUgPSBldmFs IGN1cnJlbnQgZXhwcmVzc2lvbgo7IHcgPSBzd2l0Y2ggdG8gbGlzcCBidWZmZXIKOyBxID0gcXVp dCBmcm9tIGRlYnVnZ2VyIGJhY2sgdG8gdG9wLWxldmVsCjsgYiA9IGV2YWwgYnVmZmVyCjsgeCA9 IGtpbGwgbGlzcCBwcm9jZXNzCgopCgoobWVzc2FnZSAiMzEgQ29tcGlsaW5nIGFuZCBUZXN0aW5n IFByb2dyYW1zLi4uIERvbmUiKQoKOzt9fX0KCgo7O3t7eyAtLVsgMzIgKGluZm8gIihlbWFjcylN YWludGFpbmluZyIpIFByb2dyYW1zIF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoobWVzc2Fn ZSAiMzIgTWFpbnRhaW5pbmcgUHJvZ3JhbXMuLi4iKQoKOzs7IC0tLS1bIDMyLjEgQ2hhbmdlIExv Z3MKCjs7IGRvbid0IG1ha2UgYSBuZXcgZW50cnksIHdoZW4gdGhlIGxhc3QgZW50cnkgd2FzIG1h ZGUgYnkgeW91IGFuZCBvbiB0aGUKOzsgc2FtZSBkYXRlCihzZXRxIGFkZC1sb2ctYWx3YXlzLXN0 YXJ0LW5ldy1yZWNvcmQgbmlsKQoKOzsgYWRkcyB0aGUgZmlsZSdzIHZlcnNpb24gbnVtYmVyIHRv IHRoZSBjaGFuZ2UgbG9nIGVudHJ5CihzZXRxIGNoYW5nZS1sb2ctdmVyc2lvbi1pbmZvLWVuYWJs ZWQgdCkKCgo7OzsgLS0tLVsgMzIuMiBUYWdzIFRhYmxlcwoKOzsgZmluZCB0aGUgZGVmaW5pdGlv biBvZiB0aGUgRW1hY3MgTGlzcCBmdW5jdGlvbiBvciB2YXJpYWJsZSBuZWFyIHBvaW50CihHTlVF bWFjcwogICAgKGZpbmQtZnVuY3Rpb24tc2V0dXAta2V5cykpCgoKOzs7IC0tLS1bIDMyLjMgTWVy Z2luZyBGaWxlcyB3aXRoIEVtZXJnZQoKOzsgbWVyZ2UgZmlsZSBkaWZmcyB1bmRlciBFbWFjcyBj b250cm9sCih0cnktcmVxdWlyZSAnZW1lcmdlKQoKKG1lc3NhZ2UgIjMyIE1haW50YWluaW5nIFBy b2dyYW1zLi4uIERvbmUiKQoKOzt9fX0KCgo7O3t7eyAtLVsgMzMgKGluZm8gIihlbWFjcylBYmJy ZXZzIikgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoobWVzc2FnZSAi MzMgQWJicmV2cy4uLiIpCgo7OzsgLS0tLVsgMzMuNyBDdXN0b21pemluZyBEeW5hbWljIEFiYnJl dmlhdGlvbgoKOzsgcHJlc2VydmUgY2FzZSB3aGVuIGV4cGFuZGluZyB0aGUgYWJicmV2aWF0aW9u CihzZXRxIGRhYmJyZXYtY2FzZS1yZXBsYWNlIG5pbCkKCihtZXNzYWdlICIzMyBBYmJyZXZzLi4u IERvbmUiKQoKOzt9fX0KCgo7O3t7eyAtLVsgMzQgRWRpdGluZyAoaW5mbyAiKGVtYWNzKVBpY3R1 cmUiKSBdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoobWVzc2FnZSAiMzQgRWRpdGlu ZyBQaWN0dXJlcy4uLiIpCgoobWVzc2FnZSAiMzQgRWRpdGluZyBQaWN0dXJlcy4uLiBEb25lIikK Cjs7fX19CgoKOzt7e3sgLS1bIDM1IChpbmZvICIoZW1hY3MpU2VuZGluZyBNYWlsIikgKHdpdGgg R251cykgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKG1lc3NhZ2UgIjM1IFNlbmRpbmcgTWFpbC4u LiIpCgo7OyBwZXJmb3JtIENhZXNhciBjaXBoZXJzCih3aGVuICh0cnktcmVxdWlyZSAncm90MTMp CiAgICAoZGVmdmFyIHJvdDEzLXRyYW5zbGF0ZS10YWJsZQogICAgICAobGV0ICgoc3RyIChtYWtl LXN0cmluZyAxMjcgMCkpIChpIDApKQogICAgICAgICh3aGlsZSAoPCBpIDEyNykKICAgICAgICAg IChhc2V0IHN0ciBpIGkpIChzZXRxIGkgKDErIGkpKSkKICAgICAgICAoc2V0cSBpIDApCiAgICAg ICAgKHdoaWxlICg8IGkgMjYpCiAgICAgICAgICAoYXNldCBzdHIgKCsgaSA/YSkgKCsgKCUgKCsg aSAxMykgMjYpID9hKSkKICAgICAgICAgIChhc2V0IHN0ciAoKyBpID9BKSAoKyAoJSAoKyBpIDEz KSAyNikgP0EpKQogICAgICAgICAgKHNldHEgaSAoMSsgaSkpKSBzdHIpCiAgICAgICJTdHJpbmcg dGFibGUgZm9yIHJvdCAxMyB0cmFuc2xhdGlvbi4iKQoKICAgIChkZWZ1biByb3QxMy1zdHJpbmcg KHN0cmluZykKICAgICAgIlJldHVybiBSb3QxMyBlbmNyeXB0aW9uIG9mIFNUUklORy4iCiAgICAg ICh3aXRoLXRlbXAtYnVmZmVyCiAgICAgICAgKGluc2VydCBzdHJpbmcpCiAgICAgICAgKHJvdDEz LXJlZ2lvbiAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkKICAgICAgICAoYnVmZmVyLXN0cmluZykp KQoKICAgIChkZWZ1biByb3QxMy1yZWdpb24gKHN0YXJ0IGVuZCkKICAgICAgIlJvdDEzIGVuY3J5 cHQgdGhlIHJlZ2lvbiBiZXR3ZWVuIFNUQVJUIGFuZCBFTkQgaW4gY3VycmVudCBidWZmZXIuIgog ICAgICAoaW50ZXJhY3RpdmUgInIiKQogICAgICAodHJhbnNsYXRlLXJlZ2lvbiBzdGFydCBlbmQg cm90MTMtdHJhbnNsYXRlLXRhYmxlKSkKCiAgICA7OyBmdWxsIG5hbWUgb2YgdGhpcyB1c2VyCiAg ICAoc2V0cSB1c2VyLWZ1bGwtbmFtZSAiRmFicmljZSBOaWVzc2VuIikKCiAgICA7OyBmdWxsIG1h aWxpbmcgYWRkcmVzcyBvZiB0aGlzIHVzZXIKICAgIDs7ICh1c2VkIGluIE1BSUwgZW52ZWxvcGUg RlJPTSwgYW5kIHRvIHNlbGVjdCB0aGUgZGVmYXVsdCBwZXJzb25hbGl0eSBJRCkKICAgIChzZXRx IHVzZXItbWFpbC1hZGRyZXNzIChyb3QxMy1zdHJpbmcgInNhdkB6dmZmdmJhcGV2Z3Zwbnl2Zy5w YnoiKSkpCgood2hlbiAodHJ5LXJlcXVpcmUgJ2dudXMpCgogICAgOzsgR251cyBzdGFydHVwIGZp bGUgbmFtZQogICAgKHNldHEgZ251cy1pbml0LWZpbGUgIn4vLmdudXMiKQoKICAgIChnbG9iYWwt c2V0LWtleSBbKGNvbnRyb2wgZjUpXSAnZ251cykKCiAgICAoc2V0cSBtYWlsLXVzZXItYWdlbnQg J2dudXMtdXNlci1hZ2VudCkKICAgIChYRW1hY3MKICAgICAgICAoc2V0cSB0b29sYmFyLW1haWwt cmVhZGVyICdnbnVzKSkpCgo7O3t7eyBycy1pbmZvCgo7OyB0byBpbnNlcnQgc3VjaCBsaW5rOiAo aW5mbyAiKG1lc3NhZ2UpSW5zZXJ0aW9uIFZhcmlhYmxlcyIpCih3aGVuICh0cnktcmVxdWlyZSAn cnMtaW5mbykKICAgIChhdXRvbG9hZCAncnMtaW5mby1pbnNlcnQtY3VycmVudC1ub2RlICJycy1p bmZvIgogICAgICAiSW5zZXJ0IHJlZmVyZW5jZSB0byBjdXJyZW50IEluZm8gbm9kZSB1c2luZyBT VFlQRSBpbiBidWZmZXIuIiB0IG5pbCkKICAgIChhdXRvbG9hZCAncnMtaW5mby1ib3hxdW90ZSAi cnMtaW5mbyIKICAgICAgIllhbmsgdGV4dCAoZnJvbSBhbiBpbmZvIG5vZGUpLCBib3ggaXQgYW5k IHVzZSBjdXJyZW50IGluZm8gbm9kZSBhcyB0aXRsZS4iCiAgICAgIHQgbmlsKQogICAgKGF1dG9s b2FkICdycy1pbmZvLXJlbG9hZCAicnMtaW5mbyIgIlJlbG9hZCBjdXJyZW50IGluZm8gbm9kZS4i IHQgbmlsKQogICAgKGF1dG9sb2FkICdycy1pbmZvLWluc2VydC1ub2RlLWZvci12YXJpYWJsZSAi cnMtaW5mbyIKICAgICAgIkluc2VydCBhIGN1c3RvbSBzdHlsZSBpbmZvIG5vZGUgZm9yIHRoZSB0 b3AgbGV2ZWwgZm9ybSBhdCBwb2ludC4iIHQgbmlsKQogICAgKGRlZmFsaWFzICdib3hxdW90ZS1p bmZvICdycy1pbmZvLWJveHF1b3RlKSkKCjs7fX19CgoobWVzc2FnZSAiMzUgU2VuZGluZyBNYWls Li4uIERvbmUiKQoKOzt9fX0KCgo7O3t7eyAtLVsgMzYgKGluZm8gIihlbWFjcylSbWFpbCIpIFJl YWRpbmcgTWFpbCAod2l0aCBHbnVzKSBdLS0tLS0tLS0tLS0tLS0tCgoobWVzc2FnZSAiMzYgUmVh ZGluZyBNYWlsIHdpdGggR251cy4uLiIpCgood2hlbiAodHJ5LXJlcXVpcmUgJ2dudXMpCgogICAg OzsgcmVhZGluZyBtYWlsIHdpdGggR251cwogICAgKHNldHEgcmVhZC1tYWlsLWNvbW1hbmQgJ2du dXMpKQoKKG1lc3NhZ2UgIjM2IFJlYWRpbmcgTWFpbCB3aXRoIEdudXMuLi4gRG9uZSIpCgo7O319 fQoKCjs7e3t7IC0tWyAzNyAoaW5mbyAiKGVtYWNzKURpcmVkIiksIHRoZSBEaXJlY3RvcnkgRWRp dG9yIF0tLS0tLS0tLS0tLS0tLS0tLS0KCihtZXNzYWdlICIzNyBEaXJlZCwgdGhlIERpcmVjdG9y eSBFZGl0b3IuLi4iKQoKOzsgZGlyZWN0b3J5LWJyb3dzaW5nIGNvbW1hbmRzCihyZXF1aXJlICdk aXJlZCkKCjs7IDs7IHN3aXRjaGVzIHBhc3NlZCB0byBgbHMnIGZvciBkaXJlZAo7OyAoc2V0cSBk aXJlZC1saXN0aW5nLXN3aXRjaGVzICItYWx0IC0tdGltZS1zdHlsZT1sb25nLWlzbyIpCgo7OyBl bmFibGUgdGhlIHVzZSBvZiB0aGUgY29tbWFuZCBgZGlyZWQtZmluZC1hbHRlcm5hdGUtZmlsZScK Ozsgd2l0aG91dCBjb25maXJtYXRpb24KKHB1dCAnZGlyZWQtZmluZC1hbHRlcm5hdGUtZmlsZSAn ZGlzYWJsZWQgbmlsKQoKOzsgcmVjdXJzaXZlIGRlbGV0ZXMgYWxsb3dlZCwgYWZ0ZXIgYXNraW5n IGZvciBlYWNoIGRpcmVjdG9yeSBhdCB0b3AgbGV2ZWwKKHNldHEgZGlyZWQtcmVjdXJzaXZlLWRl bGV0ZXMgJ3RvcCkKCjs7IGNvcHkgcmVjdXJzaXZlbHkgd2l0aG91dCBhc2tpbmcKKHNldHEgZGly ZWQtcmVjdXJzaXZlLWNvcGllcyAnYWx3YXlzKQoKOzt7e3sgbGltaXQgZWFjaCBkaXJlZCBidWZm ZXIgdG8gMSBidWZmZXIgaW5zdGVhZCBvZiBvcGVuaW5nIGEgbWlsbGlvbiBidWZmZXJzCgooZGVm dW4gZGlyZWQtZm9sbG93LWZpbGUgKCkKICAiSW4gZGlyZWQsIHZpc2l0IHRoZSBmaWxlIG9yIGRp cmVjdG9yeSBvbiB0aGlzIGxpbmUuCiBJZiBhIGRpcmVjdG9yeSBpcyBvbiB0aGUgY3VycmVudCBs aW5lLCByZXBsYWNlIHRoZSBjdXJyZW50CiBkaXJlZCBidWZmZXIgd2l0aCBvbmUgY29udGFpbmlu ZyB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeS4KIE90aGVyd2lzZSwgaW52b2tlIGBkaXJl ZC1maW5kLWZpbGUnIG9uIHRoZSBmaWxlLiIKICAoaW50ZXJhY3RpdmUpCiAgKGxldCAoKGZpbGVu YW1lIChkaXJlZC1nZXQtZmlsZW5hbWUpKSkKICAgIDs7IGlmIHRoZSBmaWxlIGlzIGEgZGlyZWN0 b3J5LCByZXBsYWNlIHRoZSBidWZmZXIgd2l0aCB0aGUKICAgIDs7ICBkaXJlY3RvcnkncyBjb250 ZW50cwogICAgKGlmIChmaWxlLWRpcmVjdG9yeS1wIGZpbGVuYW1lKQogICAgICAgIChmaW5kLWFs dGVybmF0ZS1maWxlIGZpbGVuYW1lKQogICAgICA7OyBvdGhlcndpc2Ugc2ltcGx5IHBlcmZvcm0g YSBub3JtYWwgYGRpcmVkLWZpbmQtZmlsZScKICAgICAgKGRpcmVkLWZpbmQtZmlsZSkpKSkKCihh ZGQtaG9vayAnZGlyZWQtbW9kZS1ob29rCiAgICAgICAgICAnKGxhbWJkYSAoKQogICAgICAgICAg ICAgKGxvY2FsLXNldC1rZXkgWyhjb250cm9sIG0pXSAnZGlyZWQtZm9sbG93LWZpbGUpCiAgICAg ICAgICAgICAobG9jYWwtc2V0LWtleSBbKGUpXSAnZGlyZWQtZm9sbG93LWZpbGUpCiAgICAgICAg ICAgICAobG9jYWwtc2V0LWtleSBbKGYpXSAnZGlyZWQtZm9sbG93LWZpbGUpKSkKCjs7fX19Cgoo YWRkLWhvb2sgJ2RpcmVkLW1vZGUtaG9vawogICAgICAgICAgJyhsYW1iZGEgKCkKICAgICAgICAg ICAgICh0cnktcmVxdWlyZSAnZGlyZWQteCkKICAgICAgICAgICAgIChkZWZpbmUta2V5IGRpcmVk LW1vZGUtbWFwIFsoVildICdjdnMtZXhhbWluZSkKICAgICAgICAgICAgICh0dXJuLW9uLWZvbnQt bG9jaykpKQoKKHRyeS1yZXF1aXJlICdkaXJlZC14KQo7OyBDLXggQy1qIHJ1bnMgdGhlIGNvbW1h bmQgZGlyZWQtanVtcAo7OyBKdW1wIHRvIGRpcmVkIGJ1ZmZlciBjb3JyZXNwb25kaW5nIHRvIGN1 cnJlbnQgYnVmZmVyLgo7OyBJZiBpbiBhIGZpbGUsIGRpcmVkIHRoZSBjdXJyZW50IGRpcmVjdG9y eSBhbmQgbW92ZSB0byBmaWxlJ3MgbGluZS4KOzsgSWYgaW4gRGlyZWQgYWxyZWFkeSwgcG9wIHVw IGEgbGV2ZWwgYW5kIGdvdG8gb2xkIGRpcmVjdG9yeSdzIGxpbmUuCgoKOzsgU3ViamVjdDogUmU6 IE1vdXNlIHNlbGVjdGlvbiBpbiBkaXJlZAo7OyA+ID4ganVzdCBsaWtlIDxyZXR1cm4+IGRvZXMg aW4gZGlyZWQuIFJpZ2h0IG5vdyBpdCBvcGVucyBhIG5ldyB3aW5kb3csIHNvCjs7ID4gPiBJJ20g Y29uc3RhbnRseSBkb2luZyBhIEMteC0xIHdoaWNoIGdldHMgb2xkIHJlYWwgZmFzdC4KOzsgPiA+ Cjs7ID4gPiBJcyB0aGVyZSBhIGNvbW1hbmQgSSBjYW4gYWRkIHRvIG15IC5lbWFjcyBmaWxlIGZv ciB0aGlzPwo7OyA+Cjs7ID4gKGFkZC1ob29rICdkaXJlZC1tb2RlLWhvb2sKOzsgPiAgICAgICAg ICAgICAgKGxhbWJkYSAoKQo7OyA+ICAgICAgICAgICAgICAgIChsb2NhbC1zZXQta2V5IFttb3Vz ZS0yXSAnZGlyZWQtYWR2ZXJ0aXNlZC1maW5kLWZpbGUpKSkKCgo7OzsgLS0tLVsgMzcuMTUgRGly ZWQgYW5kIGBmaW5kJwoKOzsgc2VhcmNoIGZvciBmaWxlcyB3aXRoIG5hbWVzIG1hdGNoaW5nIGEg d2lsZCBjYXJkIHBhdHRlcm4gYW5kIGRpcmVkIHRoZQo7OyBvdXRwdXQKKGdsb2JhbC1zZXQta2V5 IFsoY29udHJvbCBjKSA/MV0gJ2ZpbmQtbmFtZS1kaXJlZCkKCjs7IHNlYXJjaCBmb3IgZmlsZXMg d2l0aCBjb250ZW50cyBtYXRjaGluZyBhIHdpbGQgY2FyZCBwYXR0ZXJuIGFuZCBkaXJlZCB0aGUK Ozsgb3V0cHV0CihnbG9iYWwtc2V0LWtleSBbKGNvbnRyb2wgYykgPzJdICdmaW5kLWdyZXAtZGly ZWQpCgo7OyBydW4gZ3JlcCB2aWEgZmluZCwgd2l0aCB1c2VyLXNwZWNpZmllZCBhcmd1bWVudHMK KGdsb2JhbC1zZXQta2V5IFsoY29udHJvbCBjKSA/M10gJ2dyZXAtZmluZCkKCgo7OzsgLS0tLVsg QWRkLU9ucwoKOzsgZGlyZWQgc3R1ZmYgdG8gb3BlbiBmaWxlcyBhIGxhIFdpbmRvd3MgKGZyb20g SG93YXJkIE1lbG1hbik6Cjs7IGV4ZWN1dGUgZmlsZSB1c2luZyB3aW5kb3dzIGFzc29jaWF0aW9u cwooR05VRW1hY3MgKHdoZW4gcnVubmluZy1tcy13aW5kb3dzCiAgIChkZWZ1biBkaXJlZC1pcy1k aXIoKQogICAgIChmaWxlLWRpcmVjdG9yeS1wIChkaXJlZC1nZXQtZmlsZW5hbWUpKSkKCiAgIChk ZWZ1biBkaXJlZC1leGVjdXRlLWZpbGUgKCZvcHRpb25hbCBhcmcpCiAgICAgKGludGVyYWN0aXZl ICJQIikKICAgICAobWFwY2FyICMnKGxhbWJkYSAoZmlsZSkKICAgICAgICAgICAgICAgICAodzMy LXNoZWxsLWV4ZWN1dGUgIm9wZW4iIChjb252ZXJ0LXN0YW5kYXJkLWZpbGVuYW1lIGZpbGUpKSkK ICAgICAgICAgICAgIChkaXJlZC1nZXQtbWFya2VkLWZpbGVzIG5pbCBhcmcpKSkKCiAgIChkZWZ1 biBkaXJlZC1tb3VzZS1leGVjdXRlLWZpbGUgKGV2ZW50KQogICAgICJJbiBkaXJlZCwgZXhlY3V0 ZSB0aGUgZmlsZSBvciBnb3RvIGRpcmVjdG9yeSBuYW1lIHlvdSBjbGljayBvbi4iCiAgICAgKGlu dGVyYWN0aXZlICJlIikKICAgICAoc2V0LWJ1ZmZlciAod2luZG93LWJ1ZmZlciAocG9zbi13aW5k b3cgKGV2ZW50LWVuZCBldmVudCkpKSkKICAgICAoZ290by1jaGFyIChwb3NuLXBvaW50IChldmVu dC1lbmQgZXZlbnQpKSkKICAgICAoaWYgKGRpcmVkLWlzLWRpcikKICAgICAgICAgKGRpcmVkLWZp bmQtZmlsZSkKICAgICAgIChkaXJlZC1leGVjdXRlLWZpbGUpKSkKICAgKGdsb2JhbC1zZXQta2V5 IFs/XEMteCBtb3VzZS0yXSAnZGlyZWQtbW91c2UtZXhlY3V0ZS1maWxlKQoKICAgKGRlZnVuIGhy bS1kaXJlZC1tb2RlLWhvb2sgKCkKICAgICAiSG9vayBydW4gd2hlbiBlbnRlcmluZyBkaXJlZC1t b2RlLiIKICAgICAoZGVmaW5lLWtleSBkaXJlZC1tb2RlLW1hcCBbKFgpXSAnZGlyZWQtZXhlY3V0 ZS1maWxlKQogICAgIChkZWZpbmUta2V5IGRpcmVkLW1vZGUtbWFwIFtNLWRvd24tbW91c2UtMV0g J2RpcmVkLW1vdXNlLWV4ZWN1dGUtZmlsZSkpCgogICAoYWRkLWhvb2sgJ2RpcmVkLW1vZGUtaG9v ayAnaHJtLWRpcmVkLW1vZGUtaG9vaykpKQoKCjs7e3t7IGRpcmVkLWZpbmQtdzNtCgo7OyBhZGQg YSBiaW5kaW5nICJ3IiAtPiBgZGlyZWQtZmluZC13M20nIHRvIGRpcmVkCihkZWZ1biBkaXJlZC1m aW5kLXczbSAoKSAoaW50ZXJhY3RpdmUpCiAgIkluIGRpcmVkLCB2aXNpdCAod2l0aCBmaW5kLXcz bSkgdGhlIGZpbGUgbmFtZWQgb24gdGhpcyBsaW5lLiIKICAodzNtLWZpbmQtZmlsZSAoZmlsZS1u YW1lLXNhbnMtdmVyc2lvbnMgKGRpcmVkLWdldC1maWxlbmFtZSkgdCkpKQoKKGV2YWwtYWZ0ZXIt bG9hZCAiZGlyZWQiCiAgJyhwcm9nbiAoZGVmaW5lLWtleSBkaXJlZC1tb2RlLW1hcCAidyIgJ2Rp cmVkLWZpbmQtdzNtKSkpCgo7O319fQoKOzsgT24gdG9wIG9mIHRoZSB0cmFkaXRpb25hbCB3YXlz LCB0aGVyZSdzIGFsc28gYW4gYWRkLW9uIGNhbGxlZCBFeHR2aWV3Cjs7IHdoaWNoIG9wZW5zIGZp bGVzIHVzaW5nIG91dHNpZGUgcHJvZ3JhbXMsIHN1Y2ggYXMgWFBERiwgYmFzZWQgb24gdGhlaXIK OzsgZXh0ZW5zaW9uLiBJdCBkb2VzIHRoaXMgYm90aCBmcm9tIERpcmVkIGFuZCB3aXRoIGBmaW5k LWZpbGUnLiBPbmUKOzsgYWR2YW50YWdlIGlzIHRoYXQgdXNpbmcgdGhlIHRyYWRpdGlvbmFsICEg c3dpdGNoIHdpdGggZGlyZWQgbG9ja3MgdXAKOzsgRW1hY3MgdW50aWwgeW91IGNsb3NlIHRoZSBv dGhlciBwcm9ncmFtLiBFeHR2aWV3IGRvZXMgbm90IGFuZCBsZWF2ZXMKOzsgRW1hY3MgZnJlZSBm b3IgY29udGludWVkIHVzZWQuCgo7OyBJZiB5b3UgbmVlZCB0byBvcGVuIGEgZmlsZSBpbiBFbWFj cyB0aGF0IGhhcyBhbiBleHRlbnNpb24gdGhhdCBFeHR2aWV3Cjs7IHdpbGwgb3BlbiBpbiBhbm90 aGVyIHZpZXdlciwgbGlrZSBIVE1MLCB5b3UgdXNlIGBmaW5kLWZpbGUtbGl0ZXJhbGx5JyB0bwo7 OyBvcGVuIGl0IGluIEVtYWNzLgoodHJ5LXJlcXVpcmUgJ2V4dHZpZXcpCgo7Ozs7Ozs7IHByb2Js ZW0gd2l0aCBFbWFjcyAyMgo7Ozs7Ozs7KHRyeS1yZXF1aXJlICdkaXJlZCspCgo7OyBzb3J0IGRp cmVjdG9yaWVzIGZpcnN0IGluIGFueSBvcmRlcmluZwood2hlbiAodHJ5LXJlcXVpcmUgJ2xzLWxp c3ApCiAgICAoc2V0cSBscy1saXNwLWRpcnMtZmlyc3QgdCkpCgo7OyBlbXVsYXRlIGZhbW9zIG1z LWRvZyBmaWxlIGJyb3dzZXIgKG5vcnRvbiBjb21tYW5kZXIpCihHTlVFbWFjcwogICAgKGF1dG9s b2FkICduYyAibmMiICJFbXVsYXRlIE1TLURPRyBmaWxlIHNoZWxsIiB0KSkKCjs7IFNlZSBuZXdz ICJPcGVuaW5nIGh0bWwtRmlsZSBpbiBEaXJlZCB3aXRoIHczbSIgZm9yIGV4dHJhIGluZm8KCjs7 e3t7IGRpcmNvbG9ycwoKOzsgcHJvdmlkZSB0aGUgc2FtZSBmYWNpbGl0eSBvZiBscyAtLWNvbG9y IGluc2lkZSBFbWFjcwoodHJ5LXJlcXVpcmUgJ2RpcmNvbG9ycykKCjs7fX19Cgo7O3t7eyAoaW5m byAiKGVtYWNzLWdvb2RpZXMtZWwpd2RpcmVkIikgLSBSZW5hbWUgZmlsZXMgZWRpdGluZyB0aGVp ciBuYW1lcyBpbiBkaXJlZCBidWZmZXJzCgo7OyB3ZGlyZWQgbW9kZSBsZXRzIHlvdSB0cmVhdCBh IGRpcmVjdG9yeSBsaXN0aW5nIGxpa2UgYSB0ZXh0IGZpbGUgYW5kIGVkaXQKOzsgaXQgYXQgd2ls bC4gR3JlYXQgd2hlbiB5b3UgaGF2ZSBhIGxvdCBvZiBmaWxlbmFtZXMgdG8gbW9kaWZ5IChqdXN0 Cjs7IHNlYXJjaC1hbmQtcmVwbGFjZSEpCgo7OyBJdCdzIGdyZWF0IGZvciByZW5hbWluZyBmaWxl cyBpbiBhIGRpcmVjdG9yeSwgYXMgaXQgYWxsb3dzIGVkaXRpbmcgdGhlCjs7IGRpcmVkIGJ1ZmZl ciB1c2luZyBhbGwgdGhlIHBvd2VyIG9mIEVtYWNzLiBUaGF0IGlzLCBvbmUgY2FuIHVzZSBrZXli b2FyZAo7OyBtYWNyb3MsIHNlYXJjaCBhbmQgcmVwbGFjZSwgcmVjdGFuZ2xlIG1vZGUgKGdyZWF0 IGZvciBhZGRpbmcgcHJlZml4ZXMgdG8KOzsgZmlsZSBuYW1lcyksIGZsaXAgbW9kZSBiaXRzIHdp dGggdGhlIG1vdXNlLGV0Yy4KCjs7ICh3aGVuICh0cnktcmVxdWlyZSAnd2RpcmVkKQo7OyAgICAg KGF1dG9sb2FkICd3ZGlyZWQtY2hhbmdlLXRvLXdkaXJlZC1tb2RlICJ3ZGlyZWQiKQo7OyAgICAg KGFkZC1ob29rICdkaXJlZC1sb2FkLWhvb2sKOzsgICAgICAgICAgICAgICAnKGxhbWJkYSAoKQo7 OyAgICAgICAgICAgICAgICAgIChkZWZpbmUta2V5IGRpcmVkLW1vZGUtbWFwICJyIiAnd2RpcmVk LWNoYW5nZS10by13ZGlyZWQtbW9kZSkKOzsgICAgICAgICAgICAgICAgICAoZGVmaW5lLWtleSBk aXJlZC1tb2RlLW1hcAo7OyAgICAgICAgICAgICAgICAgICAgW21lbnUtYmFyIGltbWVkaWF0ZSB3 ZGlyZWQtY2hhbmdlLXRvLXdkaXJlZC1tb2RlXQo7OyAgICAgICAgICAgICAgICAgICAgJygiRWRp dCBGaWxlIE5hbWVzIiAuIHdkaXJlZC1jaGFuZ2UtdG8td2RpcmVkLW1vZGUpKSkpKQoKOzt9fX0K Cjs7IGZpbGUtcHJvcHMuZWwgLS0tIEFkZCB0YWdzIHRvIHlvdXIgZmlsZXMKCihtZXNzYWdlICIz NyBEaXJlZCwgdGhlIERpcmVjdG9yeSBFZGl0b3IuLi4gRG9uZSIpCgo7O319fQoKCjs7e3t7IC0t WyAzOCBUaGUgKGluZm8gIihlbWFjcylDYWxlbmRhci9EaWFyeSIpIF0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KCihtZXNzYWdlICIzOCBUaGUgQ2FsZW5kYXIgYW5kIHRoZSBEaWFyeS4uLiIp Cgo7OzsgLS0tLVsgMzguMSBNb3ZlbWVudCBpbiB0aGUgQ2FsZW5kYXIKCjs7IGludGVycHJldCB0 aGUgZGF0ZSAxLzIvMTk5MCBhcyBGZWJydWFyeSAxLCAxOTkwCihzZXRxIGV1cm9wZWFuLWNhbGVu ZGFyLXN0eWxlIHQpICA7IGJlZm9yZSB1c2luZyBhbnkgY2FsZW5kYXIgb3IgZGlhcnkgY29tbWFu ZAoKOzsgd2VlayBpbiB0aGUgY2FsZW5kYXIgYmVnaW5zIG9uIE1vbmRheQooc2V0cSBjYWxlbmRh ci13ZWVrLXN0YXJ0LWRheSAxKQoKOzsgbWFyayBhbGwgdmlzaWJsZSBkYXRlcyB0aGF0IGhhdmUg ZGlhcnkgZW50cmllcwooc2V0cSBtYXJrLWRpYXJ5LWVudHJpZXMtaW4tY2FsZW5kYXIgdCkKOzsg KGFkZC1ob29rICdpbml0aWFsLWNhbGVuZGFyLXdpbmRvdy1ob29rICdtYXJrLWRpYXJ5LWVudHJp ZXMpCgo7OyBtYXJrcyB0aGUgY3VycmVudCBkYXRlLCBieSBjaGFuZ2luZyBpdHMgZmFjZQooYWRk LWhvb2sgJ3RvZGF5LXZpc2libGUtY2FsZW5kYXItaG9vayAnY2FsZW5kYXItbWFyay10b2RheSkK Cjs7IGZpeCBmb29saXNoIGNhbGVuZGFyLW1vZGUgc2Nyb2xsaW5nCihhZGQtaG9vayAnY2FsZW5k YXItbG9hZC1ob29rCiAgICAgICAgICAnKGxhbWJkYSAoKQogICAgICAgICAgICAgKHNldHEgbWFy ay1ob2xpZGF5cy1pbi1jYWxlbmRhciB0KQogICAgICAgICAgICAgKGRlZmluZS1rZXkgY2FsZW5k YXItbW9kZS1tYXAgWyg+KV0gJ3Njcm9sbC1jYWxlbmRhci1sZWZ0KQogICAgICAgICAgICAgKGRl ZmluZS1rZXkgY2FsZW5kYXItbW9kZS1tYXAgWyg8KV0gJ3Njcm9sbC1jYWxlbmRhci1yaWdodCkK ICAgICAgICAgICAgIChkZWZpbmUta2V5IGNhbGVuZGFyLW1vZGUtbWFwIFsoY29udHJvbCB4KSAo PildCiAgICAgICAgICAgICAgICdzY3JvbGwtY2FsZW5kYXItbGVmdCkKICAgICAgICAgICAgIChk ZWZpbmUta2V5IGNhbGVuZGFyLW1vZGUtbWFwIFsoY29udHJvbCB4KSAoPCldCiAgICAgICAgICAg ICAgICdzY3JvbGwtY2FsZW5kYXItcmlnaHQpKSkKCjs7IGJpbmQgY2FsZW5kYXIgdG8gQy1jIGMK KGdsb2JhbC1zZXQta2V5IFsoY29udHJvbCBjKSAoYyldICdjYWxlbmRhcikKCgo7OzsgLS0tLVsg MzguNiBIb2xpZGF5cwoKOzsgcmVtb3ZlIHNvbWUgaG9saWRheXMKKHNldHEgZ2VuZXJhbC1ob2xp ZGF5cyBuaWwpICAgOyBnZXQgcmlkIG9mIHRvbyBVLlMuLWNlbnRyaWMgaG9saWRheXMKKHNldHEg aGVicmV3LWhvbGlkYXlzIG5pbCkgICAgOyBnZXQgcmlkIG9mIHJlbGlnaW91cyBob2xpZGF5cwoo c2V0cSBpc2xhbWljLWhvbGlkYXlzIG5pbCkgICA7IGdldCByaWQgb2YgcmVsaWdpb3VzIGhvbGlk YXlzCihzZXRxIG9yaWVudGFsLWhvbGlkYXlzIG5pbCkKCjs7IGFkZCBCZWxnaWFuIGhvbGlkYXlz CihzZXRxIGxvY2FsLWhvbGlkYXlzCiAgICAgICcoCiAgICAgICAgKGhvbGlkYXktZml4ZWQgMDEg MDEgIk5ldyBZZWFyJ3MgRGF5IikKICAgICAgICAoaG9saWRheS1maXhlZCAwMiAxNCAiVmFsZW50 aW5lJ3MgRGF5IikKICAgICAgICAoaG9saWRheS1maXhlZCAwNCAwMSAiQXByaWwgRm9vbHMnIERh eSIpCiAgICAgICAgKGhvbGlkYXktZml4ZWQgMDUgMDEgIkxhYm9yIERheSIpCiAgICAgICAgKGhv bGlkYXktZml4ZWQgMDcgMjEgIkluZGVwZW5kZW5jZSBEYXkiKQogICAgICAgIChob2xpZGF5LWZp eGVkIDA4IDE1ICJBc3N1bXB0aW9uIikKICAgICAgICAoaG9saWRheS1maXhlZCAxMCAzMSAiSGFs bG93ZWVuIikKICAgICAgICAoaG9saWRheS1maXhlZCAxMSAwMSAiVG91c3NhaW50IikKICAgICAg ICAoaG9saWRheS1maXhlZCAxMSAxMSAiQXJtaXN0aWNlIDE5MTgiKQogICAgICAgIChob2xpZGF5 LWZpeGVkIDEyIDI1ICJDaHJpc3RtYXMiKQoKICAgICAgICA7OyBob2xpZGF5cyB3aXRoIHZhcmlh YmxlIGRhdGVzCiAgICAgICAgKGhvbGlkYXktZmxvYXQgNSAwIDIgIk1vdGhlcidzIERheSIpCiAg ICAgICAgKGhvbGlkYXktZmxvYXQgNiAwIDMgIkZhdGhlcidzIERheSIpKSkKCjs7ICAgICAgICAo ZWFzdGVyLW1vbmRheSkKCjs7IG1hcmsgZGF0ZXMgb2YgaG9saWRheXMgaW4gdGhlIGNhbGVuZGFy CihzZXRxIG1hcmstaG9saWRheXMtaW4tY2FsZW5kYXIgdCkKCgo7OzsgLS0tLVsgMzguNyBUaW1l cyBvZiBTdW5yaXNlIGFuZCBTdW5zZXQKCihzZXRxIGNhbGVuZGFyLWxhdGl0dWRlIFs1MCA4OCBu b3J0aF0pCihzZXRxIGNhbGVuZGFyLWxvbmdpdHVkZSBbNCA3MSBlYXN0XSkKKHNldHEgY2FsZW5k YXItbG9jYXRpb24tbmFtZSAiTGV1dmVuLCBCRSIpCgo7OyAoc2V0cSBjYWxlbmRhci1sYXRpdHVk ZSBbNDMgNDEgbm9ydGhdKQo7OyAoc2V0cSBjYWxlbmRhci1sb25naXR1ZGUgWzYgODEgZWFzdF0p Cjs7IChzZXRxIGNhbGVuZGFyLWxvY2F0aW9uLW5hbWUgIkJvdWxvdXJpcywgRlIiKQoKCjs7OyAt LS0tWyAzOC4xMCBUaGUgRGlhcnkKCih3aGVuICh0cnktcmVxdWlyZSAnZGlhcnktbGliKQoKICAg IDs7IGNvcHkgdGhlIGRpYXJ5IGVudHJpZXMgaW50byBhIHNwZWNpYWwgYnVmZmVyCiAgICAoYWRk LWhvb2sgJ2RpYXJ5LWRpc3BsYXktaG9vayAnZmFuY3ktZGlhcnktZGlzcGxheSkKCiAgICA7OyBz b3J0IGVhY2ggZGF5J3MgZGlhcnkgZW50cmllcyBieSB0aGVpciB0aW1lIG9mIGRheSA/Pz8KICAg IChhZGQtaG9vayAnZGlhcnktZGlzcGxheS1ob29rICdzb3J0LWRpYXJ5LWVudHJpZXMpCiAgICAo YWRkLWhvb2sgJ2xpc3QtZGlhcnktZW50cmllcy1ob29rICdzb3J0LWRpYXJ5LWVudHJpZXMgdCkK CiAgICA7OyBhbGxvdyAjaW5jbHVkZXMgaW4gfi9kaWFyeQogICAgKGFkZC1ob29rICdsaXN0LWRp YXJ5LWVudHJpZXMtaG9vayAnaW5jbHVkZS1vdGhlci1kaWFyeS1maWxlcykKCiAgICA7OyBkZXNr IGNhbGVuZGFyIHN0eWxlIGV4dGVuc2lvbnMgdG8gRW1hY3MnIENhbGVuZGFyL0RpYXJ5CiAgICAo d2hlbiAodHJ5LXJlcXVpcmUgJ2NhbC1kZXNrLWNhbGVuZGFyKQogICAgICAgIChhZGQtaG9vayAn ZGlhcnktZGlzcGxheS1ob29rICdmYW5jeS1zY2hlZHVsZS1kaXNwbGF5LWRlc2stY2FsZW5kYXIg dCkpCgogICAgOzsgZ2VuZXJhdGUgdGhlIGRpYXJ5IHdpbmRvdyBmb3IgNCBkYXlzIHN0YXJ0aW5n IHdpdGggdGhlIGN1cnJlbnQgZGF0ZQogICAgKGRpYXJ5IDQpCgogICAgOzsgc25hcmYgTVMgT3V0 bG9vayBhcHBvaW50bWVudHMgaW50byBFbWFjcyBkaWFyeQogICAgKHRyeS1yZXF1aXJlICdkaWFy eS1vdXRsb29rKSAgOzsgRE9FUyBOT1QgV09SSz8KCiAgICA7OyBIb3cgZG8geW91IGFycmFuZ2Ug dGhlIGVudHJpZXMgb2YgZGlhcnk/IENhbiB0aGV5IGJlIGF1dG9tYXRpY2FsbHkKICAgIDs7IGFy cmFuZ2VkIGFjY29yZGluZyB0byBkYXRlIGFuZCBub3QganVzdCBhY2NvcmRpbmcgdG8gd2hlbiB0 aGV5IHdlcmUKICAgIDs7IGVudGVyZWQgaW50byB0aGUgZGlhcnk/CikKCjs7OyAtLS0tWyAzOC4x MSBBcHBvaW50bWVudHMKCjs7IGVuYWJsZSBhcHBvaW50bWVudCBub3RpZmljYXRpb24sIHNldmVy YWwgbWludXRlcyBiZWZvcmVoYW5kCihhZGQtaG9vayAnZGlhcnktaG9vayAnYXBwdC1tYWtlLWxp c3QpCgoKOzs7IC0tLS1bIDM4LjE0IFN1bW1pbmcgVGltZSBJbnRlcnZhbHMKCjs7IGlmIHlvdSB3 YW50IHRvIGxvZyB5b3VyIGRhaWx5IHNjaGVkdWxlcyBmb3IgcmV2aWV3LCB5b3UgbmVlZCBzY2hl ZHVsZS5lbAo7OyBhbmQgdGltZWNsb2NrLmVsIHRvIHJlY29yZCB5b3VyIGRhaWx5IHdvcmtzCgo7 OyB0aW1lY2xvY2suZWwKKHdoZW4gKHRyeS1yZXF1aXJlICd0aW1lY2xvY2spCgogICAgKHNldHEg dGltZWNsb2NrLWZpbGUgIn4vLnRpbWVjbG9jay9kZWZhdWx0LmxvZyIpCgogICAgKGdsb2JhbC1z ZXQta2V5IFsoY29udHJvbCB4KSAodCkgKGkpXSAndGltZWNsb2NrLWluKQogICAgKGdsb2JhbC1z ZXQta2V5IFsoY29udHJvbCB4KSAodCkgKG8pXSAndGltZWNsb2NrLW91dCkKICAgIChnbG9iYWwt c2V0LWtleSBbKGNvbnRyb2wgeCkgKHQpIChjKV0gJ3RpbWVjbG9jay1jaGFuZ2UpCgogICAgKGlm ICh0cnktcmVxdWlyZSAndGltZWNsb2NrLXgpCiAgICAgICAgKHByb2duCiAgICAgICAgICA7OyBi aW5kIGludGVyYWN0aXZlIHRpbWVjbG9jayBmdW5jdGlvbnMgdG8gYSAiQy14IHQtIiBwcmVmaXgK ICAgICAgICAgICh0aW1lY2xvY2stc2V0dXAta2V5cykKCiAgICAgICAgICA7OyBhc2sgaWYgdGhl IHVzZXIgd2FudHMgdG8gY2xvY2sgb3V0IGJlZm9yZSBleGl0aW5nIEVtYWNzCiAgICAgICAgICAo YWRkLWhvb2sgJ2tpbGwtZW1hY3MtcXVlcnktZnVuY3Rpb25zICd0aW1lY2xvY2stcXVlcnktb3V0 KQoKICAgICAgICAgIDs7IGFzayB0aGUgdXNlciBpZiB0aGV5IHdpc2ggdG8gY2xvY2sgaW4KICAg ICAgICAgICh0aW1lY2xvY2stcXVlcnktaW4pKQoKICAgICAgOzsgY2xvY2sgaW4sIHJlY29yZGlu ZyB0aGUgY3VycmVudCB0aW1lIG1vbWVudCBpbiB0aGUgdGltZWxvZwogICAgICAodGltZWNsb2Nr LWluKSkKCiAgICA7OyBkaXNwbGF5IG9mIHRoZSBhbW91bnQgb2YgdGltZSBsZWZ0IHRvZGF5IGlu IHRoZSBtb2RlIGxpbmUKICAgICh0aW1lY2xvY2stbW9kZWxpbmUtZGlzcGxheSAxKSkKCgo7OyBU cmFja2VyLiAgVGhpcyBtb2RlIGtlZXBzIGEgbGlzdCBvZiBwcm9qZWN0cyBhbmQgYXNzb2NpYXRl ZCBiaWxsaW5nCjs7IGVudGl0eS4gQSBzaW5nbGUgcHJvamVjdCBjYW4gYmUgc2VsZWN0ZWQgYW5k IGl0IHdpbGwgYmUgbWFya2VkIGluIGEgZmlsZQo7OyBhcyBhY3RpdmUgdW50aWwgYSBuZXcgY29t bWFuZCBpcyBtYWRlIHRvIHN0b3AgaXQuIEEgcHJvamVjdCBpcwo7OyBhdXRvbWF0aWNhbGx5IHRl cm1pbmF0ZWQgd2hlbiBFbWFjcyBleGl0cy4gSWYgc29tZWhvdyB0aGlzIGZhaWxzLCB0aGUKOzsg dHJhY2tpbmcgZGF0YSBmaWxlIGlzIHRvdWNoZWQgYXQgcmVndWxhciBpbnRlcnZhbHMsIHNvIHRo ZSBuZXh0IHRpbWUgdGhlCjs7IHRyYWNrZXIgaXMgc3RhcnRlZCBpZiB0aGVyZSBpcyBhbiBvcGVu IHByb2plY3QgYSByZWFzb25hYmxlIGd1ZXNzIGNhbiBiZQo7OyBtYWRlIGFzIHRvIHdoZW4gdG8g bWFyayBpdCBhcyBjbG9zZWQuIEVhY2ggc2Vzc2lvbiBjYW4gaGF2ZSBtdWx0aXBsZQo7OyBjb21t ZW50cyBhc3NvY2lhdGVkIHdpdGggaXQsIGluIHdoaWNoIHlvdSBjYW4gbWFyayBhY2NvbXBsaXNo bWVudHMgb3IKOzsgd2hhdGV2ZXIuIEl0IHdpbGwgZ2VuZXJhdGUgaW5mb3JtYWwgZGFpbHkgc3Vt bWFyeSByZXBvcnRzIGFuZCBhIHJlcG9ydCBvZgo7OyB0b3RhbCBob3VycyBmb3IgYSBwYXJ0aWN1 bGFyIGJpbGxlZS4KCgo7OzsgLS0tLVsgQWRkLU9ucwoKOzsgR2V0dGluZyBUaGluZ3MgRG9uZQoK Ozt7e3sgKGluZm8gIihvcmcpVG9wIikgTW9kZQoKOzsgQWZ0ZXIgYWxsIHRoZSBjb25maWd1cmF0 aW9uIGhhcyBiZWVuIGRvbmUsIHlvdSBjYW4gZWFzaWx5IG1hbmFnZSB5b3VyCjs7IGRhaWx5IHdv cmsgYW5kIHRhc2tzIHdpdGggb3JnLW1vZGUuCjs7IFByZXNzIGBDLWMgYSBhJyB0byBqdW1wIHlv dSB0byB0aGlzIHdlZWsncyB0YXNrIHBhZ2UgZnJvbSBhbnl3aGVyZS4KCjs7IFVzZSAiTS14IHBs YW5uZXItY3JlYXRlLXRhc2stZnJvbS1idWZmZXIiIHRvIGxpbmsgYnVmZmVycyB0byB5b3VyIGRh aWx5Cjs7IHBsYW5uZXIgZmlsZXMuIFNvb24geW91J2xsIGZpbmQgdGhhdCB5b3VyIGRhaWx5IHdv cmsgZmlsZXMgYXJlCjs7IGNvbnZlbmllbnRseSBsaW5rZWQgdG9nZXRoZXIgaW4gZGFpbHkgdGFz a3MuIEp1c3QgdXNlIGl0IHRvIGltcHJvdmUgeW91cgo7OyBlZmZpY2llbmN5LgoKOzsgQ29tbWUg cGxhbm5lciwgb3JnLW1vZGUgcGV1dCBzJ2ludOlncmVyL2ludGVyZmFjZXIgYXZlYyBkJ2F1dHJl cwo7OyBtb2RlcyBjb21tZSBiYmRiLCByZW1lbWJlciwgZ251cywgdm0sIGNhbGVuZGFyLCBkaWFy eSBldCBwbGFubmVyCjs7Cjs7IExlIGdyb3MgYXZhbnRhZ2UgcGFyIHJhcHBvcnQg4CBwbGFubmVy ID8gSWwgZmFpdCBwYXJ0aSBkZXB1aXMKOzsgcXVlbHF1ZXMgdGVtcHMgZOlq4CBkZSBsYSBkaXN0 cmlidXRpb24gc3RhbmRhcmQgR05VIEVtYWNzIChwYXMKOzsgYmVzb2luIGRvbmMgZGUgbCdpbnN0 YWxsZXIg4CBwYXJ0KS4gU29uIHNlY29uZCBwb2ludCBmb3J0IGVzdCBsYQo7OyBmYWNpbGl06SBk J3V0aWxpc2F0aW9uLiBDJ2VzdCB2cmFpbWVudCB0cuhzIHNpbXBsZSDgIHByZW5kcmUgZW4KOzsg bWFpbiBldCBsYSBkb2N1bWVudGF0aW9uIHBlcm1ldCBkZSB2aXRlIHMneSByZXRyb3V2ZXIgZW4g Y2FzIGRlCjs7IHDpcGluLgo7Owo7OyBVbmUgZGVzIHJhaXNvbnMgZGUgbGEgY29tcGxleGl06SBk ZSBQbGFubmVyIHByb3ZpZW50IGR1IGZhaXQgcXVlIHBsYW5uZXIKOzsgZXN0IOl0cm9pdGVtZW50 IGFzc29jaekg4CBlbWFjcy13aWtpLCBldCBxdWUgZW1hY3Mtd2lraSBhIGJhc2N1bOkgdmVycwo7 OyBtdXNlLgoKKHdoZW4gKHRyeS1yZXF1aXJlICdvcmcpCiAgICAoYWRkLXRvLWxpc3QgJ2F1dG8t bW9kZS1hbGlzdCAnKCJcXC5vcmckIiAuIG9yZy1tb2RlKSkKICAgIChkZWZpbmUta2V5IGdsb2Jh bC1tYXAgWyhjb250cm9sIGMpIChsKV0gJ29yZy1zdG9yZS1saW5rKQogICAgKGRlZmluZS1rZXkg Z2xvYmFsLW1hcCBbKGNvbnRyb2wgYykgKGEpXSAnb3JnLWFnZW5kYSkKCjs7e3t7IDIgKGluZm8g IihvcmcpRG9jdW1lbnQgU3RydWN0dXJlIikKCiAgICA7OyBkb24ndCBzd2l0Y2ggdG8gT1ZFUlZJ RVcgYXQgc3RhcnR1cAogICAgKHNldHEgb3JnLXN0YXJ0dXAtZm9sZGVkIG5pbCkKCjs7fX19Cgo7 O3t7eyA1IChpbmZvICIob3JnKUh5cGVybGlua3MiKQoKICAgIDs7IGRpcmVjdG9yeSB3aXRoIG9y ZyBmaWxlcyAodXNlZCBieSB0aGUgaG9va3MgZm9yIHJlbWVtYmVyLmVsKQogICAgKHNldHEgb3Jn LWRpcmVjdG9yeSAifi9Ob3Rlcy8iKQoKICAgIDs7IHJlbWVtYmVyCiAgICAod2hlbiAodHJ5LXJl cXVpcmUgJ3JlbWVtYmVyKQogICAgICAgIChkZWZpbmUta2V5IGdsb2JhbC1tYXAgWyhjb250cm9s IGMpIChyKV0gJ3JlbWVtYmVyKQogICAgICAgIChzZXRxIG9yZy1kZWZhdWx0LW5vdGVzLWZpbGUg In4vTm90ZXMvUmVtZW1iZXIub3JnIikKICAgICAgICAoYXV0b2xvYWQgJ29yZy1yZW1lbWJlci1h bm5vdGF0aW9uICJvcmciKQogICAgICAgIChhdXRvbG9hZCAnb3JnLXJlbWVtYmVyLWhhbmRsZXIg Im9yZyIpCiAgICAgICAgKHNldHEgcmVtZW1iZXItYW5ub3RhdGlvbi1mdW5jdGlvbnMgJyhvcmct cmVtZW1iZXItYW5ub3RhdGlvbikpCiAgICAgICAgKHNldHEgcmVtZW1iZXItaGFuZGxlci1mdW5j dGlvbnMgJyhvcmctcmVtZW1iZXItaGFuZGxlcikpKQoKOzt9fX0KCjs7e3t7IDYgKGluZm8gIihv cmcpVGltZXN0YW1wcyIpCgogICAgOzsgaW5zZXJ0IGEgc3BlY2lhbCB0aW1lIHN0YW1wIGVhY2gg dGltZSBhIFRPRE8gZW50cnkgaXMgbWFya2VkIGRvbmUKICAgIChzZXRxIG9yZy1sb2ctZG9uZSB0 KQoKOzt9fX0KCjs7e3t7IDcgVGltZWxpbmUgYW5kIChpbmZvICIob3JnKUFnZW5kYSBWaWV3cyIp CgogICAgOzsgc2V0IHdoaWNoIGZpbGVzIHRvIHNlYXJjaCBmb3IgVE9ET3MgYW5kIHNjaGVkdWxl ZCBpdGVtcwogICAgOzsgKGF2b2lkaW5nIGhpZGRlbiBmaWxlcykKICAgIChzZXRxIG9yZy1hZ2Vu ZGEtZmlsZXMgKGRpcmVjdG9yeS1maWxlcyAifi9Ob3RlcyIgdCAiXlteXFwuXS4qXFwub3JnJCIp KQoKICAgIDs7IGluY2x1ZGUgZW50cmllcyBmcm9tIHRoZSBFbWFjcyBkaWFyeSBpbnRvIE9yZy1t b2RlJ3MgYWdlbmRhCiAgICAoc2V0cSBvcmctYWdlbmRhLWluY2x1ZGUtZGlhcnkgdCkKCiAgICA7 OyBnZW5lcmF0ZSB0aGUgYWdlbmRhIGJ1ZmZlciBmb3IgdGhpcyB3ZWVrCiAgICAob3JnLWFnZW5k YS1saXN0KQogICAgKGRlbGV0ZS1vdGhlci13aW5kb3dzKSkKCjs7fX19Cgo7OyB0aW1lY2xvY2sg aW50ZWdyYXRpb24gZm9yIHRoZSBFbWFjcyBPcmdNb2RlCih3aGVuICh0cnktcmVxdWlyZSAnb3Jn LXRpbWVjbG9jaykKICAgIChnbG9iYWwtc2V0LWtleSBbKHNoaWZ0IGY0KV0gJ29yZy10aW1lY2xv Y2staW4pCiAgICAoZ2xvYmFsLXNldC1rZXkgWyhzaGlmdCBmNSldICdvcmctdGltZWNsb2NrLW91 dCkpCgo7OyBvcGVuIG15IHdvcmsgb3JnIGZpbGUKKGRlZnVuIG15LW9wZW4tb3JnLXdvcmsgKCkK ICAiT3BlbmluZyB+L05vdGVzL1dvcmsub3JnIgogIChpbnRlcmFjdGl2ZSkKICAoZmluZC1maWxl ICJ+L05vdGVzL1dvcmsub3JnIikpCihnbG9iYWwtc2V0LWtleSBbKHNoaWZ0IGYyKV0gJ215LW9w ZW4tb3JnLXdvcmspCgo7OyBvcGVuIG15IGhvbWUgb3JnIGZpbGUKKGRlZnVuIG15LW9wZW4tb3Jn LWhvbWUgKCkKICAiT3BlbmluZyB+L05vdGVzL0hvbWUub3JnIgogIChpbnRlcmFjdGl2ZSkKICAo ZmluZC1maWxlICJ+L05vdGVzL0hvbWUub3JnIikpCihnbG9iYWwtc2V0LWtleSBbKGNvbnRyb2wg ZjIpXSAnbXktb3Blbi1vcmctaG9tZSkKCjs7fX19Cgo7O3t7eyBNdXNlCgo7OyBodHRwOi8vd3d3 LnhzaGkub3JnL25vdGVzL1dlYlBhZ2UuaHRtbAoKKHdoZW4gKHRyeS1yZXF1aXJlICdtdXNlKSAg ICAgICAgOyBsb2FkIGdlbmVyaWMgbW9kdWxlCiAgICAodHJ5LXJlcXVpcmUgJ211c2UtbW9kZSkg ICAgIDsgbG9hZCBhdXRob3JpbmcgbW9kZQoKICAgICh0cnktcmVxdWlyZSAnbXVzZS1odG1sKSAg ICAgOyBsb2FkIChYKUhUTUwgcHVibGlzaGluZyBzdHlsZQogICAgKHRyeS1yZXF1aXJlICdtdXNl LWxhdGV4KSAgICA7IGxvYWQgTGFUZVgvUERGIHB1Ymxpc2hpbmcgc3R5bGVzCiAgICAodHJ5LXJl cXVpcmUgJ211c2UtdGV4aW5mbykgIDsgbG9hZCBJbmZvIHB1Ymxpc2hpbmcgc3R5bGUKICAgICh0 cnktcmVxdWlyZSAnbXVzZS1kb2Nib29rKSAgOyBsb2FkIERvY0Jvb2sgcHVibGlzaGluZyBzdHls ZQoKICAgIDs7IGluaXRpYWxpemUKICAgICh0cnktcmVxdWlyZSAnb3V0bGluZSkgICAgICAgOyBJ IGxpa2Ugb3V0bGluZS1zdHlsZSBmYWNlcwoKICAgICh0cnktcmVxdWlyZSAnbXVzZS1jb2xvcnMp ICAgOyBsb2FkIGNvbG9yaW5nL2ZvbnQtbG9jayBtb2R1bGUKICAgICh0cnktcmVxdWlyZSAnbXVz ZS1ibG9zeG9tKSAgOyBsb2FkIGJsb3N4b20gbW9kdWxlCiAgICAodHJ5LXJlcXVpcmUgJ211c2Ut d2lraSkgICAgIDsgbG9hZCBXaWtpIHN1cHBvcnQKICAgICh0cnktcmVxdWlyZSAnbXVzZS14bWwp ICAgICAgOyBsb2FkIFhNTCBzdXBwb3J0CgogICAgOzsgbGlzdGluZyBvZiBhbGwgZGlyZWN0b3Jp ZXMgdGhhdCBzaG91bGQgYmUgcHVibGlzaGVkIHdpdGggbXVzZQogICAgOzsgKGN1c3RvbWl6ZSB5 b3VyIGRpcmVjdG9yeSwgaGVhZCBhbmQgZm9vdCBmaWxlcywgZXRjLikKICAgIChzZXRxIG11c2Ut cHJvamVjdC1hbGlzdAogICAgICAgICAgYCgKICAgICAgICAgICAgKCJIb21lIgogICAgICAgICAg ICAgKCJ+L1BlcnNvbmFsL3dlYnNpdGUvc291cmNlL2Zyb250LyIgOmRlZmF1bHQgImluZGV4IikK ICAgICAgICAgICAgICg6YmFzZSAieGh0bWwiCiAgICAgICAgICAgICAgOnBhdGggIn4vUGVyc29u YWwvd2Vic2l0ZS9wdWJsaWNfaHRtbC8iCiA7OyAgICAgICAgICAgICA6aGVhZGVyICJ+L1BlcnNv bmFsL3dlYnNpdGUvc291cmNlL2Zyb250L2hlYWRlci5odG1sIgogICAgICAgICAgICAgIDpmb290 ZXIgIn4vUGVyc29uYWwvd2Vic2l0ZS9zb3VyY2UvZnJvbnQvZm9vdGVyLmh0bWwiKSkKICAgICAg ICAgICAgKSkpCgooc2V0cSBiYXNlLWRpciAiIikKKHNldHEgc2VydmVyICJ3d3cubXlnb29nbGVz dC5jb20iKQoKKGRlZnVuIG11c2UteGh0bWwtbWVudSAoaXRlbXMpCjs7IHdhcyB1c2luZyBtZW51 LCBtZW51aGVhZCwgbWVudWJvZHkgYW5kIG1lbnVpdGVtIGRpdiBjbGFzc2VzCiAgKGNvbmNhdCAi PHVsIGlkPVwibWVudVwiPldlYnNpdGUgc2VjdGlvbnMiCiAgICAgICAgICAobWFwY29uY2F0IChm dW5jdGlvbiAobGFtYmRhICh4KSAoY29uY2F0ICI8bGk+XG4iCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYWRyIChjZHIgeCkpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8YSBocmVmPVwiaHR0cDov LyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vy dmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj YWRyIHgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJcIj5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNhciB4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiPC9hPiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIjwvbGk+IikpKQogICAgICAgICAgICAgICAgICAgICBpdGVtcwogICAgICAgICAgICAg ICAgICAgICAiXG4iCiAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICI8L3VsPiIpKQoK KHNldHEgbXVzZS1wcm9qZWN0LW1lbnUtbGlzdAogICAgICBgKCgiSG9tZSIgICAgICAgICAgLChj b25jYXQgYmFzZS1kaXIgIi9ibG9nL2luZGV4Lmh0bWwiKSAiIikKICAgICAgICAoIlByb2plY3Rz IiAgICAgICwoY29uY2F0IGJhc2UtZGlyICIvcHJvamVjdHMvaW5kZXguaHRtbCIpICIiKQogICAg ICAgICgiUGVyc29uYWwgV2lraSIgLChjb25jYXQgYmFzZS1kaXIgIi93aWtpL2luZGV4Lmh0bWwi KSAiIikKICAgICAgICAoIlByaXZhdGUiICAgICAgICwoY29uY2F0IGJhc2UtZGlyICIvdG9vbHMv cHJpdmF0ZS5odG1sIikgIiIpCiAgICAgICAgKCJDb250YWN0IG1lIiAgICAsKGNvbmNhdCBiYXNl LWRpciAiL2Jsb2cvY29udGFjdCIpICIiKSkpCgooZGVmdW4gbXVzZS1wdWJsaXNoLWNvbnRlbnQg KCkKICAobGV0ICgoZGVwdGhzIChtdXNlLXB1Ymxpc2hpbmctZGlyZWN0aXZlICJjb250ZW50ZGVw dGgiKSkpCiAgICAod2hlbiBkZXB0aHMKICAgICAgKGxldCAoKGRlcHRoIChzdHJpbmctdG8tbnVt YmVyIGRlcHRocykpKQogICAgICAgICh3aGVuIChub3QgKGVxIGRlcHRoIDApKQogICAgICAgICAg KGluc2VydCAiPHRkIGNsYXNzPSdjb250ZW50cyc+PGRpdiBjbGFzcz0nY29udGVudGhlYWQnPgog ICAgICAgICAgICAgICAgICBUYWJsZSBvZiBjb250ZW50czwvZGl2PjxkaXYgY2xhc3M9J2NvbnRl bnRib2R5Jz4iKQogICAgICAgICAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnbXVzZS1wdWJs aXNoLWdlbmVyYXRlLWNvbnRlbnRzKQogICAgICAgICAgICAgICAoY29ucyAoY29weS1tYXJrZXIg KHBvaW50KSB0KSBkZXB0aCkpCiAgICAgICAgICAoZm9yd2FyZC1jaGFyKQogICAgICAgICAgKGlu c2VydCAiPC9kaXY+PC90ZD4iKSkpKSkpCgooc2V0cSBtdXNlLXhodG1sLWhlYWRlciAgOzsgd2Fz IHhodG1sCiIKPGxpc3A+bXVzZS14aHRtbC1kb2N0eXBlPC9saXNwPgoKPGh0bWwgeG1sbnM9XCJo dHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+CgogIDxsaXNwPm11c2UteGh0bWwtaGVhZDwv bGlzcD4KCiAgPGJvZHk+CiAgICA8ZGl2IGlkPVwiaGVhZGVyXCI+CiAgICAgIDxoMT4KICAgICAg ICA8bGlzcD5tdXNlLXhodG1sLWhlYWRsaW5lPC9saXNwPgogICAgICA8L2gxPgogICAgPC9kaXY+ CiAgICA8dGFibGUgaWQ9XCJib2R5XCI+PHRyPgogICAgICA8dGQgaWQ9XCJsZWZ0XCI+CiAgICAg ICAgPGxpc3A+KG11c2UteGh0bWwtbWVudSBtdXNlLXByb2plY3QtbWVudS1saXN0KTwvbGlzcD4K ICAgICAgPC90ZD4KICAgICAgPHRkIGlkPVwiY29udGVudFwiPgogICAgICAgIDx0YWJsZSBjbGFz cz1cImhlYWRsaW5lXCI+CiAgICAgICAgPHRyIGNsYXNzPVwiaGVhZGxpbmVcIj4KICAgICAgICAg IDx0ZCBjbGFzcz1cImxlZnRoZWFkbGluZVwiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5m b1wiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPgogICAgICAgICAgICAgICAg PGxpc3A+KG11c2UtcHVibGlzaGluZy1kaXJlY3RpdmUgXCJ0aXRsZVwiKTwvbGlzcD4KICAgICAg ICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFzdGNoYW5nZVwiPgog ICAgICAgICAgICAgICAgTGFzdCBjaGFuZ2VkOiA8bGlzcD4obXVzZS1wdWJsaXNoaW5nLWRpcmVj dGl2ZSBcImxhc3RjaGFuZ2VcIik8L2xpc3A+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAg ICAgICAgPGRpdiBjbGFzcz1cImFib3V0XCI+CiAgICAgICAgICAgICAgICA8c3Ryb25nPkNvbnRl bnQ6PC9zdHJvbmc+PGJyIC8+PGhyIC8+CiAgICAgICAgICAgICAgICA8bGlzcD4obXVzZS1wdWJs aXNoaW5nLWRpcmVjdGl2ZSBcImFib3V0XCIpPC9saXNwPgogICAgICAgICAgICAgIDwvZGl2Pgog ICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYWNrdG9cIj4mbmJzcDsKICAgICAgICAgICAgICAg IDxsaXNwPihtdXNlLXB1Ymxpc2gtYmFja3RvIFwiYmFja2xpbmtcIiBiYXNlLWRpcik8L2xpc3A+ CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZD4K ICAgICAgICAgIDxsaXNwPihtdXNlLXB1Ymxpc2gtY29udGVudCk8L2xpc3A+CiAgICAgICA8L3Ry PgogICAgIDwvdGFibGU+CiAgICA8IS0tIFBhZ2UgLS0+XG4KIikKCihzZXRxIG11c2UteGh0bWwt ZG9jdHlwZQoiPD94bWwgdmVyc2lvbj1cIjEuMCBlbmNvZGluZz1cIjxsaXNwPihtdXNlLWh0bWwt ZW5jb2RpbmcpPC9saXNwPiBcIj8+Cgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgXCItLy9XM0MvL0RU RCBYSFRNTCAxLjAgU3RyaWN0Ly9FTlwiClwiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RU RC94aHRtbDEtc3RyaWN0LmR0ZFwiPiIpCgooc2V0cSBtdXNlLWh0bWwtc3R5bGUtc2hlZXQKICAg ICAgKGNvbmNhdCAiPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIHR5cGU9XCJ0ZXh0L2Nzc1wiIGNo YXJzZXQ9XCJ1dGYtOFwiIG1lZGlhPVwiYWxsXCIgaHJlZj1cIiIKICAgICAgICAgICAgICBiYXNl LWRpcgogICAgICAgICAgICAgICJjc3MvY29tbW9uLmNzc1wiLz4iKSkKCihzZXRxIG11c2UteGh0 bWwtaGVhZAoiIDxoZWFkPgoKICAgIDx0aXRsZT48bGlzcD4obXVzZS1wdWJsaXNoaW5nLWRpcmVj dGl2ZSBcInRpdGxlXCIpPC9saXNwPjwvdGl0bGU+CgogICAgPG1ldGEgbmFtZT1cImdlbmVyYXRv clwiIGNvbnRlbnQ9XCJtdXNlLmVsXCIgLz4KCiAgICA8bWV0YSBodHRwLWVxdWl2PVwiPGxpc3A+ bXVzZS1odG1sLW1ldGEtaHR0cC1lcXVpdjwvbGlzcD5cIgogICAgICAgICAgY29udGVudD1cIjxs aXNwPm11c2UtaHRtbC1tZXRhLWNvbnRlbnQtdHlwZTwvbGlzcD5cIiAvPgoKICAgIDxsaXNwPgog ICAgICAobGV0ICgobWFpbnRhaW5lciAobXVzZS1zdHlsZS1lbGVtZW50IDptYWludGFpbmVyKSkp CiAgICAgICAgKHdoZW4gbWFpbnRhaW5lcgogICAgICAgICAgKGNvbmNhdCBcIjxsaW5rIHJldj1c XFwibWFkZVxcXCIgaHJlZj1cXFwiXCIgbWFpbnRhaW5lciBcIlxcXCIgLz5cIikpKQogICAgPC9s aXNwPgoKICAgIDxsaXNwPm11c2UtaHRtbC1zdHlsZS1zaGVldDwvbGlzcD4KCiAgPC9oZWFkPiIp CgooZGVmdW4gbXVzZS1wdWJsaXNoLWJhY2t0byAoY2xhc3MgYmFzZS1kaXIpCiAgKGxldCAoKGJh Y2t0byAgKG11c2UtcHVibGlzaGluZy1kaXJlY3RpdmUgImJhY2t0byIpKSkKICAgICh3aGVuIGJh Y2t0bwogICAgICAobGV0ICgocHJpbWFyeSAoc3BsaXQtc3RyaW5nIGJhY2t0byAiLCIpKQogICAg ICAgICAgICBiYWNrbGluaykKICAgICAgICAoZG9saXN0CiAgICAgICAgICAgIChzZWNvbmRhcnkg cHJpbWFyeSBiYWNrbGluaykKICAgICAgICAgIChzZXRxIHRtcCAoc3BsaXQtc3RyaW5nIHNlY29u ZGFyeSAifCIpKQogICAgICAgICAgKHNldHEgYmFja2xpbmsKICAgICAgICAgICAgICAgIChjb25j YXQgYmFja2xpbmsgKGNvbmNhdCAiPGRpdiBjbGFzcz0nIgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNsYXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIic+PGltZyBzcmM9JyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBiYXNlLWRpcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICIvYmFzZS9pbWFnZXMvbGlzdF9pdGVtLmdpZicgLz4gQmFjayB0byA8YSBocmVmPSIKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9wIHRtcCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLmh0bWw+IgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChwb3AgdG1wKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICI8L2E+PC9kaXY+IikpKSkKICAgICAgICBiYWNrbGluaykpKSkKCihz ZXRxIG11c2UteGh0bWwtaGVhZGxpbmUgIkZhYnJpY2UgTmllc3NlbiIpCgo7O319fQoKKG1lc3Nh Z2UgIjM4IFRoZSBDYWxlbmRhciBhbmQgdGhlIERpYXJ5Li4uIERvbmUiKQoKOzt9fX0KCgo7O3t7 eyAtLVsgMzkgKGluZm8gIihlbWFjcylHbnVzIikgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCgoobWVzc2FnZSAiMzkgR251cy4uLiIpCgo7OzsgLS0tLVsgSW5zaWRp b3VzIChpbmZvICIoYmJkYilUb3AiKQoKKHdoZW4gKHRyeS1yZXF1aXJlICdiYmRiKQoKICAgIDs7 IGF2b2lkIEJCREIgZ2V0dGluZyBjb25mdXNlZCBieSA4IGJpdCBjaGFyYWN0ZXJzCiAgICAoYWRk LXRvLWxpc3QgJ2ZpbGUtY29kaW5nLXN5c3RlbS1hbGlzdAogICAgICAgICAgICAgICAgICcoIlxc LmJiZGJcXCciIGlzby1sYXRpbi05IC4gaXNvLWxhdGluLTkpKQoKICAgIDs7IHNpbmNlIEJCREIg Mi4zNQogICAgKHNldHEgYmJkYi1maWxlLWNvZGluZy1zeXN0ZW0gJ2lzby1sYXRpbi05KQoKOzt7 e3sgKGluZm8gIihiYmRiKUluc3RhbGxhdGlvbiIpCgogICAgOzsgZW5hYmxlIHRoZSB2YXJpb3Vz IHBhY2thZ2Utc3BlY2lmaWMgQkJEQiBmdW5jdGlvbnMKICAgIChiYmRiLWluaXRpYWxpemUgJ2du dXMgJ21lc3NhZ2UpCgogICAgOzsgYWRkIGJpbmRpbmdzIGZvciB0aGUgZGVmYXVsdCBrZXlzIHRv IEdudXMgYW5kIGNvbmZpZ3VyZSBHbnVzIHRvCiAgICA7OyBub3RpZnkgdGhlIEJCREIgd2hlbiBu ZXcgbWVzc2FnZXMgYXJlIGxvYWRlZCAocmVxdWlyZWQgaWYgdGhlIEJCREIgaXMKICAgIDs7IHRv IGJlIGFibGUgdG8gZGlzcGxheSBCQkRCIGVudHJpZXMgZm9yIG1lc3NhZ2VzIGRpc3BsYXllZCBp biBHbnVzKQogICAgKGFkZC1ob29rICdnbnVzLXN0YXJ0dXAtaG9vayAnYmJkYi1pbnNpbnVhdGUt Z251cykKCiAgICA7OyBhZGQgYSBiaW5kaW5nIGZvciBNLVRBQiB0byBNZXNzYWdlIG1vZGUKICAg IDs7IHRoaXMgd2lsbCBlbmFibGUgY29tcGxldGlvbiBvZiBhZGRyZXNzZXMgYmFzZWQgb24gQkJE QiByZWNvcmRzCiAgICAoYWRkLWhvb2sgJ2dudXMtc3RhcnR1cC1ob29rICdiYmRiLWluc2ludWF0 ZS1tZXNzYWdlKQoKICAgIDs7IGN1c3RvbWl6YWJsZSBjb21wbGV0aW9uIGluIG1lc3NhZ2UgaGVh ZGVycwogICAgOzsgKHRvIGF2b2lkIGNvbmZsaWN0IGJldHdlZW4gZmx5c3BlbGwgYW5kIEJCREIp CiAgICAodHJ5LXJlcXVpcmUgJ21lc3NhZ2UteCkKCjs7fX19Cgo7O3t7eyAoaW5mbyAiKGJiZGIp SW50ZXJmYWNlcyIpCgogICAgOzsgbWFpbCBhbGlhc2VzIChsb2NhbCBtYWlsaW5nIGxpc3RzKQog ICAgKGFkZC1ob29rICdtZXNzYWdlLXNldHVwLWhvb2sgJ2JiZGItZGVmaW5lLWFsbC1hbGlhc2Vz KQoKICAgIDs7IGFsd2F5cyB1c2UgZnVsbCBuYW1lIHdoZW4gc2VuZGluZyBtYWlsCiAgICA7OyAo ZXZlbiBpZiBVc2VyIE5hbWUgaGFzIGFuIGFkZHJlc3Mgb2YgdGhlIGZvcm0gPHVzZXIubmFtZUBz b21lZG9tYWluPikKICAgIChzZXRxIGJiZGItZHdpbS1uZXQtYWRkcmVzcy1hbGxvdy1yZWR1bmRh bmN5IHQpCgogICAgOzsgbm8gcG9wdXAgb24gYXV0by1jb21wbGV0ZQogICAgKHNldHEgYmJkYi1j b21wbGV0aW9uLWRpc3BsYXktcmVjb3JkIG5pbCkKCiAgICA7OyBjb21wbGV0aW9uIGlzIGRvbmUg YWNyb3NzIHRoZSBzZXQgb2YgYWxsIGZ1bGwtbmFtZXMgYW5kIHVzZXItaWRzCiAgICAoc2V0cSBi YmRiLWNvbXBsZXRpb24tdHlwZSBuaWwpCgo7O319fQoKOzt7e3sgKGluZm8gIihiYmRiKVJlYWRl ci1zcGVjaWZpYyBGZWF0dXJlcyIpCgogICAgOzsgbWFya2luZyBwb3N0ZXJzIHdpdGggcmVjb3Jk cyBpbiB0aGUgQkJEQgogICAgKHNldHEgYmJkYi9nbnVzLXN1bW1hcnktbWFyay1rbm93bi1wb3N0 ZXJzIHQpCgogICAgOzsgbWFyayBhdXRob3JzIGluIHRoZSBTdW1tYXJ5IEJ1ZmZlciB3aG8gaGF2 ZSByZWNvcmRzIGluIHRoZSBCQkRCCiAgICAoc2V0cSBiYmRiL2dudXMtc3VtbWFyeS1rbm93bi1w b3N0ZXItbWFyayAiQiIpCgogICAgOzsgZGlzcGxheSB0aGUgcG9zdGVyJ3MgbmFtZSBmcm9tIHRo ZSBCQkRCIGlmIHdlIGhhdmUgb25lCiAgICAoc2V0cSBiYmRiL2dudXMtc3VtbWFyeS1wcmVmZXIt cmVhbC1uYW1lcyB0KQoKICAgIDs7IHJlcGxhY2UgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGlu IHRoZSBGcm9tIGhlYWRlciB3aXRoIGRhdGEgZnJvbQogICAgOzsgdGhlIEJCREIgaWYgd2UgaGF2 ZSBvbmUKICAgIChzZXRxIGJiZGIvZ251cy1zdW1tYXJ5LXByZWZlci1iYmRiLWRhdGEgdCkKCihz ZXRxIGJiZGIvZ251cy1zdW1tYXJ5LXNob3ctYmJkYi1uYW1lcyB0KQoKOzt9fX0KCjs7e3t7IChp bmZvICIoYmJkYilPcHRpb25zIilPcHRpb25zCgogICAgOzsgbmFtZSBvZiB0aGUgZmlsZSB3aGlj aCBjb250YWlucyB5b3VyIHBlcnNvbmFsIGRhdGFiYXNlCiAgICAoc2V0cSBiYmRiLWZpbGUgIn4v LmJiZGIiKQoKICAgIDs7IG5vIGRlZmF1bHQgYXJlYSBjb2RlIHRvIHVzZSB3aGVuIHByb21wdGlu ZyBmb3IgYSBuZXcgcGhvbmUgbnVtYmVyCiAgICAoc2V0cSBiYmRiLWRlZmF1bHQtYXJlYS1jb2Rl IG5pbCkKCiAgICA7OyBkZWZhdWx0IGNvdW50cnkgdG8gdXNlIGlmIG5vbmUgaXMgc3BlY2lmaWVk CiAgICAoc2V0cSBiYmRiLWRlZmF1bHQtY291bnRyeSAiIikKCiAgICA7OyBkaXNhYmxlIHN5bnRh eC1jaGVja2luZyBvZiB0ZWxlcGhvbmUgbnVtYmVycwogICAgKHNldHEgYmJkYi1ub3J0aC1hbWVy aWNhbi1waG9uZS1udW1iZXJzLXAgbmlsKQoKICAgIDs7IHJlc3RvcmF0aW9uIG9mIHRoZSB3aW5k b3cgY29uZmlndXJhdGlvbgogICAgKHNldHEgYmJkYi1lbGVjdHJpYy1wIHQpCgogICAgOzsgOzsg dG8gYWRkIHRoZSBhdXRob3Igb2YgYSBtYWlsIG9yIHBvc3RpbmcgdG8gdGhlIEJCREIsIGhpdCBg OicKICAgIDs7IChzZXRxIGJiZGIvbWFpbC1hdXRvLWNyZWF0ZS1wIHQpCgogICAgOzsgZG9uJ3Qg ZGlzcGxheSBhIGNvbnRpbnVvdXNseS11cGRhdGluZyBCQkRCIHdpbmRvdyB3aGlsZSBpbiBHTlVT CiAgICA7OyAoc2V0cSBiYmRiLXVzZS1wb3AtdXAgbmlsKQoKICAgIDs7IGRlc2lyZWQgbnVtYmVy IG9mIGxpbmVzIGluIGEgR05VUyBwb3AtdXAgQkJEQiB3aW5kb3cKICAgIChzZXRxIGJiZGItcG9w LXVwLXRhcmdldC1saW5lcyAxKQoKICAgIDs7IGRlZmF1bHQgZGlzcGxheSBsYXlvdXQKICAgIChz ZXRxIGJiZGItZGlzcGxheS1sYXlvdXQgJ211bHRpLWxpbmUpCgogICAgOzsgZGVmYXVsdCBkaXNw bGF5IGxheW91dCBwb3AtdXAgQkJEQiBidWZmZXJzCiAgICAoc2V0cSBiYmRiLXBvcC11cC1kaXNw bGF5LWxheW91dCAnb25lLWxpbmUpCgogICAgOzsgb21pdCBjcmVhdGlvbi1kYXRlIGFuZCB0aW1l c3RhbXAgZnJvbSBCQkRCIGRpc3BsYXkKICAgIChzZXRxIGJiZGItZGlzcGxheS1sYXlvdXQtYWxp c3QKICAgICAgICAgICcoKG9uZS1saW5lICAgICAgICAgIChvcmRlciAgICAgLiAocGhvbmVzIG5v dGVzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lLWVuZCAgLiAyNCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b2dnbGUgICAgLiB0KQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG9taXQgICAgICAuIChuZXQgQUtBIG1haWwtYWxpYXMgZ251cy1w cml2YXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0 aW9uLWRhdGUgdGltZXN0YW1wKSkpCiAgICAgICAgICAgIChtdWx0aS1saW5lICAgICAgICAoaW5k ZW50aW9uIC4gMTQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG9nZ2xlICAgIC4g dCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbWl0ICAgICAgLiAoQUtBIGNyZWF0 aW9uLWRhdGUgdGltZXN0YW1wKSkpCiAgICAgICAgICAgIChwb3AtdXAtbXVsdGktbGluZSAoaW5k ZW50aW9uIC4gMTQpKSkpCgogICAgOzsgYWxsb3cgY3ljbGluZyBvZiBlbWFpbCBhZGRyZXNzZXMg d2hpbGUgY29tcGxldGluZyB0aGVtCiAgICAoc2V0cSBiYmRiLWNvbXBsZXRlLW5hbWUtYWxsb3ct Y3ljbGluZyB0KQoKICAgIDs7IHNhdmUgdGhlIGRhdGFiYXNlIHdpdGhvdXQgYXNraW5nIChhbnkg dGltZSBpdCB3b3VsZCBhc2spCiAgICAoc2V0cSBiYmRiLW9mZmVyLXNhdmUgJ2F1dG8pCgogICAg OzsgYXV0b21hdGljYWxseSBhZGQgc29tZSB0ZXh0IHRvIHRoZSBub3RlcyBmaWVsZCBvZiB0aGUg QkJEQiByZWNvcmQKICAgIChhZGQtaG9vayAnYmJkYi1ub3RpY2UtaG9vayAnYmJkYi1hdXRvLW5v dGVzLWhvb2spCgogICAgOzsgY2FwdHVyZSBhdXRvLW5vdGVzCiAgICAoc2V0cSBiYmRiLWF1dG8t bm90ZXMtYWxpc3QKICAgICAgICAgIDs7IG9yZ2FuaXphdGlvbgogICAgICAgICAgYCgoIk9yZ2Fu aXphdGlvbiIgKCIuKiIgT3JnYW5pemF0aW9uIDApKQoKICAgICAgICAgICAgOzsgbWFpbGVyCiAg ICAgICAgICAgICgiVXNlci1BZ2VudCIgKCIuKiIgbWFpbGVyIDAgdCkpICA7OyB0ID0gb3Zlcndy aXRlCiAgICAgICAgICAgICgiWC1NYWlsZXIiICgiLioiIG1haWxlciAwIHQpKQogICAgICAgICAg ICAoIlgtTmV3c3JlYWRlciIgKCIuKiIgbWFpbGVyIDAgdCkpCgogICAgICAgICAgICA7OyBYLUZh Y2UgYml0bWFwcyBvZiB0aGUgcGVvcGxlCiAgICAgICAgICAgICgieC1mYWNlIiAsKGxpc3QgKGNv bmNhdCAiWyBcdFxuXSpcXChbXiBcdFxuXSpcXCkiCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiXFwoWyBcdFxuXStcXChbXiBcdFxuXStcXClcXCk/IgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlxcKFsgXHRcbl0rXFwoW14gXHRcbl0rXFwpXFwpPyIK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcXChbIFx0XG5dK1xcKFteIFx0 XG5dK1xcKVxcKT8iKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWNlCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlxcMVxcM1xcNVxcNyIpKSkpCgo7O319fQoKOzt7e3sgKGlu Zm8gIihiYmRiKVV0aWxpdGllcyIpCgogICAgOzsgc2VhcmNoIHRoZSBiYmRiCiAgICAoZ2xvYmFs LXNldC1rZXkgWyhjb250cm9sIGYxMSldICdiYmRiKQoKICAgIDs7IHNlYXJjaCB0aGUgYmJkYiBi eSByZWdleHAKICAgICh3aGVuICh0cnktcmVxdWlyZSAnYmJkYi1xdWVyeSkKICAgICAgICAoZ2xv YmFsLXNldC1rZXkgWyhjb250cm9sIGYxMSldICdiYmRiLXF1ZXJ5KSkKCiAgICA7OyB1c2UgQkJE QiB0byBzdG9yZSBQR1AgcHJlZmVyZW5jZXMKICAgICh3aGVuICh0cnktcmVxdWlyZSAnYmJkYi1w Z3ApCiAgICAgICAgOzsgd2hhdCB0byBkbyBpZiB0aGUgcmVjaXBpZW50IGlzIG5vdCBpbiB0aGUg QkJEQgogICAgICAgIChzZXRxIGJiZGIvcGdwLWRlZmF1bHQtYWN0aW9uIG5pbCkpKQoKOzt9fX0K CihtZXNzYWdlICIzOSBHbnVzLi4uIERvbmUiKQoKOzt9fX0KCgo7O3t7eyAtLVsgNDAgUnVubmlu ZyAoaW5mbyAiKGVtYWNzKVNoZWxsIikgQ29tbWFuZHMgZnJvbSBFbWFjcyBdLS0tLS0tLS0tLS0t CgoobWVzc2FnZSAiNDAgUnVubmluZyBTaGVsbCBDb21tYW5kcyBmcm9tIEVtYWNzLi4uIikKCjs7 ID4gIEkgd2FzIHdvbmRlcmluZyBpZiBpdCBpcyBwb3NzaWJsZSB0byBydW4gYSBiYXNoIHNoZWxs IGluc2lkZSBhbiBFbWFjcwo7OyA+IGJ1ZmZlciAod2hlcmUgdGhlIHVwIGFuZCBkb3duIGtleXMg cmVjYWxsIGNvbW1hbmRzIGV4ZWN1dGVkCjs7ID4gaW4gLmJhc2hfaGlzdG9yeSBhbmQgZG8gbm90 IG1vdmUgdGhlIGN1cnNvciBhcm91bmQgLS0gdGhlIHByb2JsZW0gd2l0aCB0aGUKOzsgPiBuYXRp dmUgc2hlbGwgYXZhaWxhYmxlIGluIEVtYWNzLCB0YWIgcmVzdWx0cyBpbiBjb21tYW5kIGNvbXBs ZXRpb24sIGV0Yy4pLgoKOzsgKHRlcm0gIi9iaW4vYmFzaCIpIGRvZXMgdGhpcy4KCjs7IElmIHlv dSBkbyBgTS14IHRlcm0nIC9iaW4vYmFzaCBpcyBvZmZlcmVkIGFzIHRoZSBkZWZhdWx0IGFzIHdl bGwuCgo7OyBZb3UncmUgZGVidWdnaW5nIGJhc2ggY29kZT8gSSBub3JtYWxseSB1c2UgbW9kZS1j b21waWxlLmVsIGZvcgo7OyB0aGlzLiBCYXNpY2FsbHksIGl0IHJ1bnMgYmFzaCB3aXRoIGxvdHMg b2YgZGVidWcgb3V0cHV0LgoKCjs7IFNlZSB3MzItc2V0dGluZ3MuZWwgZm9yIG1vcmUhCgo7OyBN LXMgICAgICAgICAgICAgY29taW50LW5leHQtbWF0Y2hpbmctaW5wdXQKOzsgTS1yICAgICAgICAg ICAgIGNvbWludC1wcmV2aW91cy1tYXRjaGluZy1pbnB1dAo7OyBNLW4gICAgICAgICAgICAgY29t aW50LW5leHQtaW5wdXQKOzsgTS1wICAgICAgICAgICAgIGNvbWludC1wcmV2aW91cy1pbnB1dAo7 OyBDLXVwICAgICAgICAgICAgbGFzdCBjb21tYW5kCgo7OyBjb2Rpbmcgc3lzdGVtIHRvIHVzZSBm b3IgYSBwcm9jZXNzIEkvTyBvcGVyYXRpb24gKGVuZC1vZi1saW5lIGhhbmRsaW5nKQooc2V0cSBw cm9jZXNzLWNvZGluZy1zeXN0ZW0tYWxpc3QKICAgICAgKGNvbnMgJygiYmFzaCIgLiAocmF3LXRl eHQtZG9zIC4gcmF3LXRleHQtdW5peCkpCiAgICAgICAgICAgIHByb2Nlc3MtY29kaW5nLXN5c3Rl bS1hbGlzdCkpCjs7IChzZXRxIHByb2Nlc3MtY29kaW5nLXN5c3RlbS1hbGlzdCAnKCgiYmFzaCIg LiB1bmRlY2lkZWQtdW5peCkpKSA/Pz8KCjs7IHF1b3RlIHByb2Nlc3MgYXJndW1lbnRzIHRvIGVu c3VyZSBjb3JyZWN0IHBhcnNpbmcgb24gV2luZG93cwooc2V0cSB3MzItcXVvdGUtcHJvY2Vzcy1h cmdzIHQpICAgOzsgaWYgbmVlZGVkLCBzZXQgaXQgdG8gYD9cIicKCjs7IGZvciBzaW5nbGUgc2hl bGwgY29tbWFuZHMKKHNldHEgc2hlbGwtZmlsZS1uYW1lICJiYXNoIikgIDs7IG11c3QgYmUgaW4g dGhlIFBBVEgKCjs7IHVzZSBgc2hlbGwtZmlsZS1uYW1lJyBhcyB0aGUgZGVmYXVsdCBzaGVsbAoo c2V0ZW52ICJTSEVMTCIgc2hlbGwtZmlsZS1uYW1lKQoKOzsgbmFtZSBvZiBzaGVsbCB1c2VkIHRv IHBhcnNlIFRlWCBjb21tYW5kcwooR05VRW1hY3MKICAgIChzZXRxIFRlWC1zaGVsbCBzaGVsbC1m aWxlLW5hbWUpKQooWEVtYWNzCiAgICA7OyBmb3IgdGhlIHByZXZpZXctbGF0ZXggcGFja2FnZQog ICAgKHNldHEgVGVYLXNoZWxsICJDOi9Qcm9ncmFtIEZpbGVzL0VtYWNzL2VtYWNzL2Jpbi9jbWRw cm94eS5leGUiKSkKCjs7IHN3aXRjaCB1c2VkIHRvIGhhdmUgdGhlIHNoZWxsIGV4ZWN1dGUgaXRz IGNvbW1hbmQgbGluZSBhcmd1bWVudAo7OyAoIi9jIiBkb2VzIG5vdCB3b3JrIHdpdGggWEVtYWNz KQooc2V0cSBzaGVsbC1jb21tYW5kLXN3aXRjaCAiLWMiKQoKOzsgc2hlbGwgYXJndW1lbnQgaW5k aWNhdGluZyB0aGF0IG5leHQgYXJndW1lbnQgaXMgdGhlIGNvbW1hbmQKKHNldHEgVGVYLXNoZWxs LWNvbW1hbmQtb3B0aW9uIHNoZWxsLWNvbW1hbmQtc3dpdGNoKQoKOzsgZm9yIHRoZSBpbnRlcmFj dGl2ZSAoc3ViKXNoZWxsCihzZXRxIGV4cGxpY2l0LXNoZWxsLWZpbGUtbmFtZSBzaGVsbC1maWxl LW5hbWUpCgo7OyByZWdleHAgdG8gbWF0Y2ggcHJvbXB0cyBpbiB0aGUgaW5mZXJpb3Igc2hlbGwK KHNldHEgc2hlbGwtcHJvbXB0LXBhdHRlcm4gKGNvbmNhdCAiXiIgKHN5c3RlbS1uYW1lKSAiIFte IF0rIFxcW1swLTldK1xcXSAiKSkKCjs7IGdlbmVyYWwgY29tbWFuZCBpbnRlcnByZXRlciBpbiBh IHdpbmRvdyBzdHVmZgood2hlbiAocmVxdWlyZSAnY29taW50KQoKICAgIDs7IGRvbid0IGFkZCBp bnB1dCBtYXRjaGluZyB0aGUgbGFzdCBvbiB0aGUgaW5wdXQgcmluZwogICAgKHNldHEtZGVmYXVs dCBjb21pbnQtaW5wdXQtaWdub3JlZHVwcyB0KQoKICAgIDs7IGlucHV0IHRvIGludGVycHJldGVy IGNhdXNlcyAob25seSkgdGhlIHNlbGVjdGVkIHdpbmRvdyB0byBzY3JvbGwKICAgIChzZXRxLWRl ZmF1bHQgY29taW50LXNjcm9sbC10by1ib3R0b20tb24taW5wdXQgInRoaXMiKQoKICAgIDs7IG91 dHB1dCB0byBpbnRlcnByZXRlciBjYXVzZXMgKG9ubHkpIHRoZSBzZWxlY3RlZCB3aW5kb3cgdG8g c2Nyb2xsCiAgICAoc2V0cS1kZWZhdWx0IGNvbWludC1zY3JvbGwtdG8tYm90dG9tLW9uLW91dHB1 dCAidGhpcyIpCgogICAgOzsgc2hvdyB0aGUgbWF4aW11bSBvdXRwdXQgd2hlbiB0aGUgd2luZG93 IGlzIHNjcm9sbGVkCiAgICAoc2V0cS1kZWZhdWx0IGNvbWludC1zY3JvbGwtc2hvdy1tYXhpbXVt LW91dHB1dCB0KQoKICAgIDs7IGlnbm9yZSBzaG9ydCBjb21tYW5kcyBhcyB3ZWxsIGFzIGR1cGxp Y2F0ZXMKICAgIChzZXRxLWRlZmF1bHQgY29taW50LWlucHV0LWZpbHRlcgogICAgICAgICAgICAg ICAgICAoZnVuY3Rpb24KICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKHN0cikKICAgICAgICAg ICAgICAgICAgICAgKGFuZCAobm90IChzdHJpbmctbWF0Y2ggIlxcYFxccyAqXFwnIiBzdHIpKQog ICAgICAgICAgICAgICAgICAgICAgICAgICg+IChsZW5ndGggc3RyKSBjb21pbnQtbWluLWhpc3Rv cnktc2l6ZSkpKSkpCgogICAgOzsgZnVuY3Rpb25zIHRvIGNhbGwgYWZ0ZXIgb3V0cHV0IGlzIGlu c2VydGVkIGludG8gdGhlIGJ1ZmZlcgogICAgKHNldHEtZGVmYXVsdCBjb21pbnQtb3V0cHV0LWZp bHRlci1mdW5jdGlvbnMKICAgICAgICAgICAgICAgICAgJyhjb21pbnQtcG9zdG91dHB1dC1zY3Jv bGwtdG8tYm90dG9tKSkKICAgICAgICAgICAgICAgICAgOzsgZ28gdG8gdGhlIGVuZCBvZiBidWZm ZXIKCiAgICA7OyBnZXQgcmlkIG9mIHRoZSBjb250cm9sLU0gY2hhcmFjdGVycwogICAgKGFkZC1o b29rICdjb21pbnQtb3V0cHV0LWZpbHRlci1mdW5jdGlvbnMgJ2NvbWludC1zdHJpcC1jdHJsLW0p CgogICAgOzsgcHJvbXB0IGluIHRoZSBtaW5pYnVmZmVyIGZvciBwYXNzd29yZCBhbmQgc2VuZCB3 aXRob3V0IGVjaG9pbmcKICAgIDs7IChmb3IgZXhhbXBsZSwgd2l0aCBgc3UnIGNvbW1hbmQpCiAg ICAoYWRkLWhvb2sgJ2NvbWludC1vdXRwdXQtZmlsdGVyLWZ1bmN0aW9ucyAnY29taW50LXdhdGNo LWZvci1wYXNzd29yZC1wcm9tcHQpKQoKOzsgdHJhbnNsYXRlIEFOU0kgZXNjYXBlIHNlcXVlbmNl cyBpbnRvIGZhY2VzCihHTlVFbWFjcwogICAgKGF1dG9sb2FkICdhbnNpLWNvbG9yLWZvci1jb21p bnQtbW9kZS1vbiAiYW5zaS1jb2xvciIgbmlsIHQpCiAgICAoYWRkLWhvb2sgJ3NoZWxsLW1vZGUt aG9vayAnYW5zaS1jb2xvci1mb3ItY29taW50LW1vZGUtb24pKQoKOzsgYnVmZmVyLXNwZWNpZmlj IGNvbG9ycwo7OyBzZWVtcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgZXNjYXBlIGNvZGVzIHRyYW5z bGF0aW9uCihYRW1hY3MKICAgIChhZGQtaG9vayAnc2hlbGwtbW9kZS1ob29rCiAgICAgICAgICAg ICAgJyhsYW1iZGEgKCkgKGludGVyYWN0aXZlKQogICAgICAgICAgICAgICAgIChzZXQtZmFjZS1i YWNrZ3JvdW5kICdkZWZhdWx0ICJibGFjayIgKGN1cnJlbnQtYnVmZmVyKSkKICAgICAgICAgICAg ICAgICAoc2V0LWZhY2UtZm9yZWdyb3VuZCAnZGVmYXVsdCAiZ3JlZW4iIChjdXJyZW50LWJ1ZmZl cikpKSkpCgo7OyBydW4gYSB0ZWxuZXQgc2Vzc2lvbiBmcm9tIHdpdGhpbiBhbiBFbWFjcyBidWZm ZXIKKHdoZW4gKHRyeS1yZXF1aXJlICd0ZWxuZXQpCgogICAgOzsgcHJvZ3JhbSB0byBydW4gdG8g b3BlbiBhIHRlbG5ldCBjb25uZWN0aW9uCiAgICA7OyBzaW1wbGUgcHVibGljIGRvbWFpbiB0ZWxu ZXQgY2xpZW50IGZvciBXaW5kb3dzIGNvbnNvbGUgKGZyb20gSWdvcgogICAgOzsgTWlsYXZlYykK ICAgIChzZXRxIHRlbG5ldC1wcm9ncmFtCiAgICAgICAgICAoaWYgcnVubmluZy1tcy13aW5kb3dz CiAgICAgICAgICAgICAgKGNvbmNhdCBvdGhlci1zaXRlLWxpc3AtZGlyZWN0b3J5ICIuLi9iaW4v dGVsbmV0LmV4ZSIpCiAgICAgICAgICAgICIvdXNyL2Jpbi90ZWxuZXQiKSkKCiAgICA7OyBvcGVu IGEgbmV0d29yayBsb2dpbiBjb25uZWN0aW9uIHRvIGEgaG9zdAogICAgKGRlZnVuIHRlbG5ldCAo aG9zdCkKICAgICAgIk9wZW4gYSBuZXR3b3JrIGxvZ2luIGNvbm5lY3Rpb24gdG8gaG9zdCBuYW1l ZCBIT1NUIChhIHN0cmluZykuCiAgICBDb21tdW5pY2F0aW9uIHdpdGggSE9TVCBpcyByZWNvcmRl ZCBpbiBhIGJ1ZmZlciBgKnRlbG5ldC1IT1NUKicuCiAgICBOb3JtYWxseSBpbnB1dCBpcyBlZGl0 ZWQgaW4gRW1hY3MgYW5kIHNlbnQgYSBsaW5lIGF0IGEgdGltZS4iCiAgICAgIChpbnRlcmFjdGl2 ZSAic09wZW4gdGVsbmV0IGNvbm5lY3Rpb24gdG8gaG9zdDogIikKICAgICAgKGxldCogKChjb21p bnQtZGVsaW1pdGVyLWFyZ3VtZW50LWxpc3QgJyg/XCAgP1x0KSkKICAgICAgICAgICAgIChuYW1l IChjb25jYXQgInRlbG5ldC0iIChjb21pbnQtYXJndW1lbnRzIGhvc3QgMCBuaWwpICkpCiAgICAg ICAgICAgICAoYnVmZmVyIChnZXQtYnVmZmVyIChjb25jYXQgIioiIG5hbWUgIioiKSkpCiAgICAg ICAgICAgICBwcm9jZXNzKQogICAgICAgIChjb25kICgoc3RyaW5nLWVxdWFsIHN5c3RlbS10eXBl ICJ3aW5kb3dzLW50IikKICAgICAgICAgICAgICAgKHNldHEgdGVsbmV0LW5ldy1saW5lICJcbiIp KSkKICAgICAgICAoaWYgKGFuZCBidWZmZXIgKGdldC1idWZmZXItcHJvY2VzcyBidWZmZXIpKQog ICAgICAgICAgICAocG9wLXRvLWJ1ZmZlciAoY29uY2F0ICIqIiBuYW1lICIqIikpCiAgICAgICAg ICAocG9wLXRvLWJ1ZmZlciAobWFrZS1jb21pbnQgbmFtZSB0ZWxuZXQtcHJvZ3JhbSBuaWwgaG9z dCkpCiAgICAgICAgICAoc2V0cSBwcm9jZXNzIChnZXQtYnVmZmVyLXByb2Nlc3MgKGN1cnJlbnQt YnVmZmVyKSkpCiAgICAgICAgICAoc2V0LXByb2Nlc3MtZmlsdGVyIHByb2Nlc3MgJ3RlbG5ldC1p bml0aWFsLWZpbHRlcikKICAgICAgICAgIChhY2NlcHQtcHJvY2Vzcy1vdXRwdXQgcHJvY2VzcykK ICAgICAgICAgICh0ZWxuZXQtbW9kZSkKICAgICAgICAgIChzZXRxIGNvbWludC1pbnB1dC1zZW5k ZXIgJ3RlbG5ldC1zaW1wbGUtc2VuZCkKICAgICAgICAgIChzZXRxIHRlbG5ldC1jb3VudCB0ZWxu ZXQtaW5pdGlhbC1jb3VudCkpKSkpCgo7OyBydW4gYW4gaW5mZXJpb3Igc2hlbGwsIHdpdGggSS9P IHRocm91Z2ggYnVmZmVyICpzaGVsbCoKKGdsb2JhbC1zZXQta2V5IFsoY29udHJvbCAhKV0gJ3No ZWxsKQood2hlbiAodHJ5LXJlcXVpcmUgJ211bHRpc2hlbGwpCiAgICAoZ2xvYmFsLXNldC1rZXkg Wyhjb250cm9sICEpXSAnbXVsdGlzaGVsbCkpCgood2hlbiAodHJ5LXJlcXVpcmUgJ2N5Z3dpbi1t b3VudCkKICAgIChjeWd3aW4tbW91bnQtYWN0aXZhdGUpKQoKKG1lc3NhZ2UgIjQwIFJ1bm5pbmcg U2hlbGwgQ29tbWFuZHMgZnJvbSBFbWFjcy4uLiBEb25lIikKCjs7fX19CgoKOzt7e3sgLS1bIDQx IFVzaW5nIChpbmZvICIoZW1hY3MpRW1hY3MgU2VydmVyIikgIF0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQoKKG1lc3NhZ2UgIjQxIFVzaW5nIEVtYWNzIGFzIGEgU2VydmVyLi4uIikKCjs7IHVz ZSBFbWFjcyBhcyBhIHNlcnZlcgo7OyBvbiBHTlUvTGludXgsIHlvdSBzaG91bGQgdXNlIHNlcnZl ci1zdGFydC9lbWFjc2NsaWVudAo7OyBFbWFjc2NsaWVudCBpcyBub3cgYXMgd2VsbCBhdmFpbGFi bGUgdW5kZXIgRW1hY3NXMzIKKHNlcnZlci1zdGFydCkKCgo7OyBUaGlzIGlzIGEgc2hlbGwgZnVu Y3Rpb24gSSB1c2UgdG8gbWFudWFsbHkgc3RhcnQgYW4gZWRpdCBzZXJ2ZXIuCjs7IEl0IGhhcyB0 byBiZSBydW4gb25seSBvbmNlLCBhbmQgc3Vydml2ZXMgYmV0d2VlbiBsb2dpbnMuCjs7Cjs7ICAg IGZ1bmN0aW9uIHN0YXJ0eGVtYWNzIHsKOzsgICAgIChjZCB+LyAgICAjcHV0IG5vaHVwLm91dCBm aWxlIGluIGhvbWUgZGlyZWN0b3J5Cjs7ICAgICAgbm9odXAgL3Vzci9sb2NhbC9iaW4veGVtYWNz IC1sIH4vLnNlbWFjcyBcCjs7ICAgICAgICAgLXVubWFwcGVkIC1nIDEwMHgzMCs2MCs2MCBcCjs7 ICAgICAgICAgLVQgIkdOVXNlcnZlciIgMj4vZGV2L251bGwgJikKOzsgICAgfQo7Owo7OyBUaGUg YWJvdmUgdXNlcyBhIHNwZWNpYWwgaW5pdCBmaWxlLCB+Ly5zZW1hY3MsIHdoaWNoIHN0YXJ0cyB1 cCB0aGUKOzsgZ251c2VydiBwcm9jZXNzLiAgSXQgbG9va3MgbGlrZSB0aGlzLAo7Owo7OyAgIDs7 IGZvciBHTlUgRW1hY3Mgb25seQo7OyAgICh1bmxlc3MgKGZlYXR1cmVwICd4ZW1hY3MpCjs7ICAg ICAoc2V0cSBnbnVzZXJ2LWZyYW1lIChjdXJyZW50LWZyYW1lKSkpCjs7Cjs7ICAgKGdudXNlcnYt c3RhcnQpICA7U3RhcnQgdXAgdGhlIGdudSBlZGl0IHNlcnZlciBwcm9jZXNzCjs7Cjs7ICAgOzsg IGRpc2FsbG93IGV4aXRpbmcgZnJvbSBhIGNvbW1hbmQgIChtZW51IG9wdGlvbiBvbmx5KQo7OyAg IChkZWZ1biBkby1leGl0ICgpCjs7ICAgICAiRXhpdHMgRW1hY3Mgb3IgYW4gRW1hY3MgY2xpZW50 Igo7OyAgICAgICAoaW50ZXJhY3RpdmUpCjs7ICAgICAgIChpZiAgIChnbnVzZXJ2LXJ1bm5pbmct cCkKOzsgICAgICAgKGlmIChlcSBnbnVzZXJ2LWNsaWVudHMgbmlsKSAoZGVsZXRlLWZyYW1lKSAo Z251c2Vydi1lZGl0KSkpKQo7Owo7OyAgIChkZWZpbmUta2V5IGN0bC14LW1hcCAiXEMtYyIgJ2Rv LWV4aXQpCjs7Cjs7ICAgOzsgZW5kIG9mIGZpbGUKOzsKOzsgVGhlcmUgYXJlIG9mIGNvdXJzZSB0 aW1lcyB3aGVuIHRoZSBlZGl0IHNlcnZlciBpcyAqbm90KiB3aGF0IHlvdQo7OyB3YW50IHRvIHJ1 bi4gIFlvdSBjYW4gcnVuIChYKUVtYWNzIGFzIGEgbm9uIHNlcnZlciBwcm9jZXNzIHRvby4KOzsg SSBrZWVwIHR3byBvZiB0aG9zZSBydW5uaW5nIGFsbCB0aGUgdGltZSBvbiBteSB3b3Jrc3RhdGlv bi4gIE9uZQo7OyBlc3NlbnRpYWxseSB3b3JrcyBhcyBhICJub3RlcGFkIiB0aGF0IEkgaGF2ZSBv cGVuIGFsbCB0aGUgdGltZTsKOzsgaXQgaXMgInN0aWNreSIgYW5kIHNob3dzIHVwIGluIGFueSB2 aXJ0dWFsIGRlc2t0b3AgdGhhdCBJIG1vdmUKOzsgdG8uICBUaGUgb3RoZXIgaXMgZnVsbCBzY3Jl ZW4gaW4gb25lIGRlc2t0b3AsIGFuZCBydW4gL2dudXMvIGZvcgo7OyBVc2VuZXQgYW4gZW1haWwu ICAoSXQgaGFzIHNvIG1hbnkgYnVmZmVycyBvcGVuIHRoYXQgSSB3YW50IHRvCjs7IGtlZXAgaXQg ZW50aXJlbHkgc2VwYXJhdGUgZnJvbSB0aGUgZWRpdCBzZXJ2ZXIuKQo7Owo7OyBGbG95ZCBMLiBE YXZpZHNvbiAgICAgICAgICAgIDxodHRwOi8vd3d3LmFwYWZsby5jb20vZmxveWRfZGF2aWRzb24+ CgoKOzsgVG8gYXNzb2NpYXRlIGZpbGUgdHlwZXMgd2l0aCBFbWFjcywgZ28gYmFjayB0byB0aGUg RmlsZSBUeXBlcyB3aW5kb3cKOzsgYW5kIGVkaXQgYSBzdWl0YWJsZSBhc3NvY2lhdGlvbi4gVW5k ZXIgQWN0aW9ucywgcHV0Ogo7OyAgICBnbnVjbGllbnR3LmV4ZSAiJTEiCgo7OyBMb29rIGF0IEdO VV9TRUNVUkUKCjs7ID4gSSdkIGxpa2UgdG8gYmUgYWJsZSB0byByZWNvbm5lY3QgdG8gdGhlIHJ1 bm5pbmcgRW1hY3MgcHJvY2VzcyBhbmQgaGF2ZQo7OyA+IGl0IGRpc3BsYXkgb24gbXkgWCBzZXJ2 ZXIgYXQgaG9tZS4gIElzIHRoaXMgcG9zc2libGU/Cjs7Cjs7IEluIHRoZSBYMTEgZm9yd2FyZGVk IHNzaCBzaGVsbDoKOzsKOzsgJCBlbWFjc2NsaWVudCAtZSAiKG1ha2UtZnJhbWUtb24tZGlzcGxh eSBcIiRESVNQTEFZXCIpIgo7Owo7OyBPZiBjb3Vyc2UgeW91IHNob3VsZCBoYXZlIHN0YXJ0ZWQg dGhlIEVtYWNzIHNlcnZlciB3aXRoIChzZXJ2ZXItc3RhcnQpCgoobWVzc2FnZSAiNDEgVXNpbmcg RW1hY3MgYXMgYSBTZXJ2ZXIuLi4gRG9uZSIpCgo7O319fQoKCjs7e3t7IC0tWyA0MiAoaW5mbyAi KGVtYWNzKUhhcmRjb3B5IikgT3V0cHV0IF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K CihtZXNzYWdlICI0MiBIYXJkY29weSBPdXRwdXQuLi4iKQoKOzsgcHJpbnQgRW1hY3MgYnVmZmVy IG9uIGxpbmUgcHJpbnRlcgo7OyBmb3Ige2xwcixwcmludH0te2J1ZmZlcixyZWdpb259Cih3aGVu ICh0cnktcmVxdWlyZSAnbHByKQoKICAgIDs7IG5hbWUgb2YgcHJvZ3JhbSBmb3IgcHJpbnRpbmcg YSBmaWxlCiAgICAoc2V0cSBscHItY29tbWFuZCAiZW5zY3JpcHQiKQoKICAgIDs7IGxpc3Qgb2Yg c3RyaW5ncyB0byBwYXNzIGFzIGV4dHJhIG9wdGlvbnMgZm9yIHRoZSBwcmludGVyIHByb2dyYW0K ICAgIChzZXRxIGxwci1zd2l0Y2hlcyAobGlzdCAiLS1mb250PUNvdXJpZXI4IgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICItLWhlYWRlci1mb250PUNvdXJpZXIxMCIKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoZm9ybWF0ICItLWhlYWRlcj0lcyIgKGJ1ZmZlci1uYW1lKSkpKQoK ICAgIDs7IG5hbWUgb2YgYSBwcmludGVyIHRvIHdoaWNoIGRhdGEgaXMgc2VudCBmb3IgcHJpbnRp bmcKICAgIChzZXRxIHByaW50ZXItbmFtZQogICAgICAgICAgKGlmIHJ1bm5pbmctbXMtd2luZG93 cwogICAgICAgICAgICAgICIvL05FVEZJTklUWS9DNTEwX0FQUyIKICAgICAgICAgICAgdCkpKQoK KG1lc3NhZ2UgIjQyIEhhcmRjb3B5IE91dHB1dC4uLiBEb25lIikKCjs7fX19CgoKOzt7e3sgLS1b IDQzIChpbmZvICIoZW1hY3MpUG9zdFNjcmlwdCIpIEhhcmRjb3B5IF0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQoKKG1lc3NhZ2UgIjQzIFBvc3RTY3JpcHQgSGFyZGNvcHkuLi4iKQoKOzsgcHJp bnQgdGV4dCBmcm9tIHRoZSBidWZmZXIgYXMgUG9zdFNjcmlwdAood2hlbiAodHJ5LXJlcXVpcmUg J3BzLXByaW50KQoKICAgIChsZXQgKChnc3ByaW50LXByb2dyYW0gIkM6L1Byb2dyYW0gRmlsZXMv R2hvc3RndW0vZ3N2aWV3L2dzcHJpbnQuZXhlIikpCiAgICAgIChteS1maWxlLWV4ZWN1dGFibGUt cCBnc3ByaW50LXByb2dyYW0pCgogICAgICAoaWYgKGFuZCBnc3ByaW50LXByb2dyYW0KICAgICAg ICAgICAgICAgKGZpbGUtZXhlY3V0YWJsZS1wIGdzcHJpbnQtcHJvZ3JhbSkpCiAgICAgICAgICAo cHJvZ24KICAgICAgICAgICAgOzsgbmFtZSBvZiBhIGxvY2FsIHByaW50ZXIgZm9yIHByaW50aW5n IFBvc3RTY3JpcHQgZmlsZXMKICAgICAgICAgICAgOzsgYWRqdXN0ZWQgdG8gcnVuIEdob3N0c2Ny aXB0CiAgICAgICAgICAgIChzZXRxIHBzLXByaW50ZXItbmFtZSB0KQoKICAgICAgICAgICAgOzsg bmFtZSBvZiBwcm9ncmFtIGZvciBwcmludGluZyBhIFBvc3RTY3JpcHQgZmlsZQogICAgICAgICAg ICA7OyB0ZWxsIEVtYWNzIHdoZXJlIGdob3N0c2NyaXB0IHByaW50IHV0aWxpdHkgaXMgbG9jYXRl ZAogICAgICAgICAgICAoc2V0cSBwcy1scHItY29tbWFuZCBnc3ByaW50LXByb2dyYW0pCgogICAg ICAgICAgICA7OyBsaXN0IG9mIGV4dHJhIHN3aXRjaGVzIHRvIHBhc3MgdG8gYHBzLWxwci1jb21t YW5kJwogICAgICAgICAgICA7OyB0ZWxsIEdob3N0c2NyaXB0IHRvIHF1ZXJ5IHdoaWNoIHByaW50 ZXIgdG8gdXNlCiAgICAgICAgICAgIChzZXRxIHBzLWxwci1zd2l0Y2hlcyAnKCItcXVlcnkiKSkp CgogICAgICAgIChwcm9nbgogICAgICAgICAgKHNldHEgcHMtcHJpbnRlci1uYW1lICIvL05FVEZJ TklUWS9MZXhtYXJrQzUxMCIpCiAgICAgICAgICAoc2V0cSBwcy1scHItY29tbWFuZCAiIikKICAg ICAgICAgIChzZXRxIHBzLWxwci1zd2l0Y2hlcyAnKCJyYXciKSkpKQoKICAgIDs7IHNpemUgb2Yg cGFwZXIgdG8gZm9ybWF0IGZvcgogICAgKHNldHEgcHMtcGFwZXItdHlwZSAnYTQpCgogICAgOzsg cHJpbnQgaW4gcG9ydHJhaXQgbW9kZQogICAgKHNldHEgcHMtbGFuZHNjYXBlLW1vZGUgbmlsKQoK ICAgIDs7IG51bWJlciBvZiBjb2x1bW5zCiAgICAoc2V0cSBwcy1udW1iZXItb2YtY29sdW1ucyAx KSkpCgo7OyBnZW5lcmF0ZSBhbmQgcHJpbnQgYSBQb3N0U2NyaXB0IGltYWdlIG9mIHRoZSBidWZm ZXIKKEdOVUVtYWNzCiAgICAod2hlbiBydW5uaW5nLW1zLXdpbmRvd3MKICAgICAgKHczMi1yZWdp c3Rlci1ob3Qta2V5IFtzbmFwc2hvdF0pIDsgb3ZlcnJpZGUgYFByaW50IFNjcmVlbicgZ2xvYmFs bHkgdXNlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBhcyBhIGhv dGtleSBieSBXaW5kb3dzCiAgICAgIChnbG9iYWwtc2V0LWtleSBbKHNuYXBzaG90KV0gJ3BzLXBy aW50LWJ1ZmZlci13aXRoLWZhY2VzKSkpCihYRW1hY3MKICAgIChzZXRxIHRvb2xiYXItcHJpbnQt ZnVuY3Rpb24gJ3BzLXByaW50LWJ1ZmZlci13aXRoLWZhY2VzKSkKCihnbG9iYWwtc2V0LWtleSBb KG1ldGEgcCldICdwcy1wcmludC1idWZmZXItd2l0aC1mYWNlcykKCjs7ID8/PwooYWRkLWhvb2sg J0luZm8tbW9kZS1ob29rICdwcy1pbmZvLW1vZGUtaG9vaykKCihtZXNzYWdlICI0MyBQb3N0U2Ny aXB0IEhhcmRjb3B5Li4uIERvbmUiKQoKOzt9fX0KCgo7O3t7eyAtLVsgNDQgKGluZm8gIihlbWFj cylQb3N0U2NyaXB0IFZhcmlhYmxlcyIpIGZvciBIYXJkY29weSAgXS0tLS0tLS0tLS0tCgoobWVz c2FnZSAiNDQgVmFyaWFibGVzIGZvciBQb3N0U2NyaXB0IEhhcmRjb3B5Li4uIikKCihtZXNzYWdl ICI0NCBWYXJpYWJsZXMgZm9yIFBvc3RTY3JpcHQgSGFyZGNvcHkuLi4gRG9uZSIpCgo7O319fQoK Cjs7e3t7IC0tWyA0NSAoaW5mbyAiKGVtYWNzKVNvcnRpbmciKSBUZXh0IF0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KCihtZXNzYWdlICI0NSBTb3J0aW5nIFRleHQuLi4iKQoKOzsg a2V5IGJpbmRpbmcKKGdsb2JhbC1zZXQta2V5IFsobWV0YSBcIyldICdzb3J0LWxpbmVzKQoKKG1l c3NhZ2UgIjQ1IFNvcnRpbmcgVGV4dC4uLiBEb25lIikKCjs7fX19CgoKOzt7e3sgLS1bIDQ2IChp bmZvICIoZW1hY3MpTmFycm93aW5nIikgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQoKKG1lc3NhZ2UgIjQ2IE5hcnJvd2luZy4uLiIpCgo7OyBlbmFibGUgdGhlIHVzZSBvZiB0 aGUgY29tbWFuZCBgbmFycm93LXRvLXJlZ2lvbicgd2l0aG91dCBjb25maXJtYXRpb24KKHB1dCAn bmFycm93LXRvLXJlZ2lvbiAnZGlzYWJsZWQgbmlsKQoKKG1lc3NhZ2UgIjQ2IE5hcnJvd2luZy4u LiBEb25lIikKCjs7fX19CgoKOzt7e3sgLS1bIDQ3IChpbmZvICIoZW1hY3MpVHdvLUNvbHVtbiIp IEVkaXRpbmcgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKG1lc3NhZ2UgIjQ3IFR3by1D b2x1bW4gRWRpdGluZy4uLiIpCgoobWVzc2FnZSAiNDcgVHdvLUNvbHVtbiBFZGl0aW5nLi4uIERv bmUiKQoKOzt9fX0KCgo7O3t7eyAtLVsgNDggKGluZm8gIihlbWFjcylFZGl0aW5nIEJpbmFyeSBG aWxlcyIpIF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoobWVzc2FnZSAiNDggRWRpdGluZyBC aW5hcnkgRmlsZXMuLi4iKQoKKG1lc3NhZ2UgIjQ4IEVkaXRpbmcgQmluYXJ5IEZpbGVzLi4uIERv bmUiKQoKOzt9fX0KCgo7O3t7eyAtLVsgNDkgKGluZm8gIihlbWFjcylTYXZpbmcgRW1hY3MgU2Vz c2lvbnMiKSBdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoobWVzc2FnZSAiNDkgU2F2aW5nIEVt YWNzIFNlc3Npb25zLi4uIikKCihtZXNzYWdlICI0OSBTYXZpbmcgRW1hY3MgU2Vzc2lvbnMuLi4g RG9uZSIpCgo7O319fQoKCjs7e3t7IC0tWyA1MCAoaW5mbyAiKGVtYWNzKVJlY3Vyc2l2ZSBFZGl0 IilpbmcgTGV2ZWxzIF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCihtZXNzYWdlICI1MCBSZWN1cnNp dmUgRWRpdGluZyBMZXZlbHMuLi4iKQoKKG1lc3NhZ2UgIjUwIFJlY3Vyc2l2ZSBFZGl0aW5nIExl dmVscy4uLiBEb25lIikKCjs7fX19CgoKOzt7e3sgLS1bIDUxIChpbmZvICIoZW1hY3MpRW11bGF0 aW9uIikgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKG1lc3NhZ2UgIjUx IEVtdWxhdGlvbi4uLiIpCgoobWVzc2FnZSAiNTEgRW11bGF0aW9uLi4uIERvbmUiKQoKOzt9fX0K Cgo7O3t7eyAtLVsgNTIgKGluZm8gIihlbWFjcylIeXBlcmxpbmtpbmciKSBhbmQgTmF2aWdhdGlv biBGZWF0dXJlcyBdLS0tLS0tLS0tCgoobWVzc2FnZSAiNTIgSHlwZXJsaW5raW5nIGFuZCBOYXZp Z2F0aW9uIEZlYXR1cmVzLi4uIikKCjs7IEkgdXNlIGFuIGV4Y2VsbGVudCBwYWNrYWdlIGNhbGxl ZCB3ZWJqdW1wIHRvIHN0b3JlIG15IGJvb2ttYXJrcy4gSXQKOzsgYWxzbyBoYXMgcHJvdmlzaW9u cyBmb3IgZ2VuZXJhdGluZyBzZWFyY2ggc3RyaW5ncyBmb3IgdGhlIHNlYXJjaCBzaXRlcwo7OyBh cyB3ZWxsLgoKOzt7e3sgSFRNTCBUaWR5CgooYXV0b2xvYWQgJ3RpZHktYnVmZmVyICJ0aWR5IiAi UnVuIFRpZHkgSFRNTCBwYXJzZXIgb24gY3VycmVudCBidWZmZXIiIHQpCihhdXRvbG9hZCAndGlk eS1wYXJzZS1jb25maWctZmlsZSAidGlkeSIgIlBhcnNlIHRoZSBgdGlkeS1jb25maWctZmlsZSci IHQpCihhdXRvbG9hZCAndGlkeS1zYXZlLXNldHRpbmdzICJ0aWR5IiAiU2F2ZSBzZXR0aW5ncyB0 byBgdGlkeS1jb25maWctZmlsZSciIHQpCihhdXRvbG9hZCAndGlkeS1idWlsZC1tZW51ICAidGlk eSIgIkluc3RhbGwgYW4gb3B0aW9ucyBtZW51IGZvciBIVE1MIFRpZHkuIiB0KQo7OyBGb3Igb3Ro ZXIgbW9kZXMgKGxpa2UgaHRtbC1oZWxwZXItbW9kZSkgc2ltcGxlIGNoYW5nZSB0aGUgdmFyaWFi bGVzCjs7IGBodG1sLW1vZGUtaG9vaycgYW5kIGBodG1sLW1vZGUtbWFwJyB0byB3aGF0ZXZlciBp cyBhcHByb3ByaWF0ZSBlLmcuCgooZGVmdW4gbXktaHRtbC1oZWxwZXItbW9kZS1zZXR1cCAoKQog ICJDdXN0b21pemUgbXkgaHRtbC1oZWxwZXItbW9kZS4iCiAgKHRpZHktYnVpbGQtbWVudSBodG1s LWhlbHBlci1tb2RlLW1hcCkKICAobG9jYWwtc2V0LWtleSBbKGNvbnRyb2wgYykgKGNvbnRyb2wg YyldICd0aWR5LWJ1ZmZlcikKICAoc2V0cSBzZ21sLXZhbGlkYXRlLWNvbW1hbmQgInRpZHkiKSkK CihhZGQtaG9vayAnaHRtbC1oZWxwZXItbW9kZS1ob29rICdteS1odG1sLWhlbHBlci1tb2RlLXNl dHVwKQoKOzt9fX0KCjs7e3t7IHBhc3MgYSBVUkwgdG8gYSBXV1cgYnJvd3NlcgoKOzsgZGlzcGxh eSB0aGUgY3VycmVudCBidWZmZXIgaW4gdGhlIGRlZmF1bHQgV2luZG93cyBXV1cgYnJvd3Nlcgoo cmVxdWlyZSAnYnJvd3NlLXVybCkKKGF1dG9sb2FkICdicm93c2UtdXJsLWF0LW1vdXNlICJicm93 c2UtdXJsIikKCjs7IGRlZmF1bHQgYnJvd3NlciBzdGFydGVkIHdoZW4geW91IGNsaWNrIG9uIHNv bWUgVVJMIGluIHRoZSBidWZmZXIKKGlmIHdpbmRvdy1zeXN0ZW0KICAgIChpZiBydW5uaW5nLW1z LXdpbmRvd3MKICAgICAgICAoc2V0cSBicm93c2UtdXJsLWJyb3dzZXItZnVuY3Rpb24gJ2Jyb3dz ZS11cmwtZGVmYXVsdC13aW5kb3dzLWJyb3dzZXIpCiAgICAgIChzZXRxIGJyb3dzZS11cmwtYnJv d3Nlci1mdW5jdGlvbiAnYnJvd3NlLXVybC1nZW5lcmljCiAgICAgICAgICAgIGJyb3dzZS11cmwt Z2VuZXJpYy1wcm9ncmFtIChleGVjdXRhYmxlLWZpbmQgImZpcmVmb3giKSkpCiAgKHNldHEgYnJv d3NlLXVybC1icm93c2VyLWZ1bmN0aW9uICd3M20tYnJvd3NlLXVybCkpCgo7OyAoc2V0cSBicm93 c2UtdXJsLWJyb3dzZXItZnVuY3Rpb24KOzsgICAgICAgJygoImZpbGU6Ly8vdXNyL3NoYXJlL2Rv Yy9oeXBlcnNwZWMvIiAuIHczbS1icm93c2UtdXJsKQo7OyAgICAgICAgICgiZW1hY3N3aWtpLm9y ZyIgLiB3M20tYnJvd3NlLXVybCkKOzsgICAgICAgICAoImxpc3Bkb2MuY29tIiAuIHczbS1icm93 c2UtdXJsKQo7OyAgICAgICAgICggIi4iIC4gYnJvd3NlLXVybC1maXJlZm94KSkpCjs7IHRoYXQg bGV0IG1lIHVzZSB3M20gZm9yIGVtYWNzd2lraS9jb21tb24gbGlzcCBkb2N1bWVudGF0aW9uIGFu ZAo7OyBGaXJlZm94IG90aGVyd2lzZS4KCjs7fX19Cgo7O3t7eyB3M20KCjs7IHczbSBpcyBhIHRl cnJpZmljIHRleHQtYmFzZWQgd2ViIGFuZCBmaWxlIGJyb3dzZXIKOzsgKGZvciB3aW4zMiwgdXNl IHRoZSBDeWd3aW4gdmVyc2lvbiBvZiB0aGUgZXhlY3V0YWJsZSkKKHNldHEgdzNtLWNvbW1hbmQg KGV4ZWN1dGFibGUtZmluZCAidzNtIikpCjs7IChteS1maWxlLWV4ZWN1dGFibGUtcCB3M20tY29t bWFuZCkKOzsgU0hPVUxEIHRyYXAgd2hlbiB3M20tY29tbWFuZCBpcyBuaWwKKHdoZW4gKGFuZCB3 M20tY29tbWFuZAogICAgICAgICAgIChmaWxlLWV4ZWN1dGFibGUtcCB3M20tY29tbWFuZCkpCih3 aGVuICh0cnktcmVxdWlyZSAndzNtWFhYKQoKICAgIDs7IHByb3h5IHNldHRpbmdzCiAgICAod2hl biAoc3RyaW5nPSAodXBjYXNlIChzeXN0ZW0tbmFtZSkpICJQQzM3MDEiKQogICAgICAoZXZhbC1h ZnRlci1sb2FkICJ3M20iCiAgICAgICAgJyhzZXRxIHczbS1jb21tYW5kLWFyZ3VtZW50cwogICAg ICAgICAgICAgICAobmNvbmMgdzNtLWNvbW1hbmQtYXJndW1lbnRzCiAgICAgICAgICAgICAgICAg ICAgICAnKCItbyIgImh0dHBfcHJveHk9aHR0cDovL21zcHJ4MDAxcC5iZS53aW50ZXJ0aHVyLmNv bTo4MDgwLyIpKSkpCiAgICAgIChzZXRxIHczbS1uby1wcm94eS1kb21haW5zICcoImxvY2FsLmNv bSIgInN5c2RvYyIpKSkKCjs7e3t7IEdlbmVyYWwgVmFyaWFibGVzCgogICAgOzsgbmV2ZXIgc2Vu ZCByZWZlcnJlcnMKICAgIChzZXRxIHczbS1hZGQtcmVmZXJlciBuaWwpCgogICAgOzsgaG9tZSBw YWdlCiAgICAoc2V0cSB3M20taG9tZS1wYWdlICJodHRwOi8vd3d3Lm15Z29vZ2xlc3QuY29tLyIp CgogICAgOzsKICAgIChzZXRxIHczbS1ob3Jpem9udGFsLXNoaWZ0LWNvbHVtbnMgMSkgIDsgMgoK Ozt9fX0KCjs7e3t7IEltYWdlIFZhcmlhYmxlcwoKICAgIDs7IGFsd2F5cyBkaXNwbGF5IGltYWdl cwogICAgKHNldHEgdzNtLWRlZmF1bHQtZGlzcGxheS1pbmxpbmUtaW1hZ2VzIHQpCgogICAgOzsK ICAgIChzZXRxIHczbS11c2UtZmF2aWNvbiBuaWwpCgo7O319fQoKOzt7e3sgQ29va2llIFZhcmlh YmxlcwoKICAgIDs7IGFzayB1c2VyIHdoZXRoZXIgYWNjZXB0IGJhZCBjb29raWVzIG9yIG5vdAog ICAgKHNldHEgdzNtLWNvb2tpZS1hY2NlcHQtYmFkLWNvb2tpZXMgJ2FzaykKCiAgICA7OyBsaXN0 IG9mIHRydXN0ZWQgZG9tYWlucwogICAgKHNldHEgdzNtLWNvb2tpZS1hY2NlcHQtZG9tYWlucwog ICAgICAgICAgJygiZ29vZ2xlLmNvbSIgImdvb2dsZS5iZSIKICAgICAgICAgICAgInlhaG9vLmNv bSIgIi55YWhvby5jb20iICJncm91cHMueWFob28uY29tIgogICAgICAgICAgICAid3d3LmR5bmRu cy5vcmciKSkKCiAgICA7OyBlbmFibGUgY29va2llcwogICAgKHNldHEgdzNtLXVzZS1jb29raWVz IHQpCgo7O319fQoKOzt7e3sgT3RoZXIgVmFyaWFibGVzCgogICAgOzsKICAgIChzZXRxIHczbS10 YWItd2lkdGggOCkgIDsgMTYKCiAgICAoZGVmdW4gdzNtLW5ldy10YWIgKCkKICAgICAgKGludGVy YWN0aXZlKQogICAgICAodzNtLWNvcHktYnVmZmVyIG5pbCBuaWwgbmlsIHQpKQoKICAgIDs7IGZp eCBpbmFwcHJvcHJpYXRlIGtleSBiaW5kaW5ncwogICAgKGRlZmluZS1rZXkgdzNtLW1vZGUtbWFw IFsodXApXSAncHJldmlvdXMtbGluZSkKICAgIChkZWZpbmUta2V5IHczbS1tb2RlLW1hcCBbKGRv d24pXSAnbmV4dC1saW5lKQogICAgKGRlZmluZS1rZXkgdzNtLW1vZGUtbWFwIFsobGVmdCldICdi YWNrd2FyZC1jaGFyKQogICAgKGRlZmluZS1rZXkgdzNtLW1vZGUtbWFwIFsocmlnaHQpXSAnZm9y d2FyZC1jaGFyKQogICAgKGRlZmluZS1rZXkgdzNtLW1vZGUtbWFwIFsoc2hpZnQgbGVmdCldICd3 M20tc2hpZnQtcmlnaHQpCiAgICAoZGVmaW5lLWtleSB3M20tbW9kZS1tYXAgWyhzaGlmdCByaWdo dCldICd3M20tc2hpZnQtbGVmdCkKCiAgICAoZGVmaW5lLWtleSB3M20tbW9kZS1tYXAgWyh0YWIp XSAndzNtLW5leHQtYW5jaG9yKQogICAgKGRlZmluZS1rZXkgdzNtLW1vZGUtbWFwIFsoc2hpZnQg dGFiKV0gJ3czbS1wcmV2aW91cy1hbmNob3IpCgogICAgKGRlZmluZS1rZXkgdzNtLW1vZGUtbWFw IFsoZyldICd3M20tZ290by11cmwpCiAgICAoZGVmaW5lLWtleSB3M20tbW9kZS1tYXAgWyhpKV0g J3czbS10b2dnbGUtaW5saW5lLWltYWdlKQogICAgKGRlZmluZS1rZXkgdzNtLW1vZGUtbWFwIFso SSldICd3M20tdG9nZ2xlLWlubGluZS1pbWFnZXMpCiAgICAoZGVmaW5lLWtleSB3M20tbW9kZS1t YXAgWyhuKV0gJ3czbS1uZXh0LWFuY2hvcikKICAgIChkZWZpbmUta2V5IHczbS1tb2RlLW1hcCBb KGNvbnRyb2wgdCldICd3M20tbmV3LXRhYikKCiAgICA7OyBNb3ppbGxhLWxpa2UgbmF2aWdhdGlv bgogICAgKGRlZmluZS1rZXkgdzNtLW1vZGUtbWFwIFsobWV0YSByaWdodCldICd3M20tdmlldy10 aGlzLXVybCkKICAgIChkZWZpbmUta2V5IHczbS1tb2RlLW1hcCBbKG1ldGEgbGVmdCldICAndzNt LXZpZXctcHJldmlvdXMtcGFnZSkKICAgIChkZWZpbmUta2V5IHczbS1tb2RlLW1hcCBbKGNvbnRy b2wgcmV0dXJuKV0gJ3czbS12aWV3LXRoaXMtdXJsLW5ldy1zZXNzaW9uKQoKICAgIDs7IGFkZCBr ZXkgYmluZGluZ3MKICAgIChnbG9iYWwtc2V0LWtleSBbKGNvbnRyb2wgYykgKHcpICh3KV0gJ3cz bSkKICAgIChnbG9iYWwtc2V0LWtleSBbKGNvbnRyb2wgYykgKHcpIChzKV0gJ3czbS1zZWFyY2gp KSkKCjs7fX19Cgo7O319fQoKOzt7e3sgV2ViIHNlYXJjaAoKKHdoZW4gKGFuZCAodHJ5LXJlcXVp cmUgJ2Jyb3dzZS11cmwpIHQpCjs7ICAgICAgICAgICAodHJ5LXJlcXVpcmUgJ3VybCkpCgo7O3t7 eyBmcm9tIEdsZW5uIE1vcnJpcwoKICAgIChkZWZ2YXIgbXktZ29vZ2xlLW1heGxlbiA1MAogICAg ICAiTWF4aW11bSBzdHJpbmcgbGVuZ3RoIG9mIHNlYXJjaCB0ZXJtLiIpCgogICAgKGRlZnZhciBt eS1nb29nbGUtdXJsICJ3d3cuZ29vZ2xlLmNvbSIKICAgICAgIkJhc2UgVVJMIGZvciBHb29nbGUg c2VhcmNoLiIpCgogICAgKGRlZnZhciBteS1nb29nbGUtZ3JvdXBzLXVybCAiZ3JvdXBzLmdvb2ds ZS5jb20iCiAgICAgICJCYXNlIFVSTCBmb3IgZ3JvdXBzIEdvb2dsZSBzZWFyY2guIikKCiAgICAo ZGVmdW4gbXktZ29vZ2xlLXNlYXJjaC1yZWdpb24gKHByZWZpeCBzdGFydCBlbmQpCiAgICAgICJD cmVhdGUgYSBzZWFyY2ggVVJMIGFuZCBzZW5kIGl0IHRvIHRoZSB3ZWIgYnJvd3Nlci4KICAgIFdp dGggcHJlZml4IGFyZ3VtZW50LCB1c2UgZ3JvdXBzIFVSTC4iCiAgICAgIChpbnRlcmFjdGl2ZSAi UFxuciIpCiAgICAgIChpZiAoPiAoLSBlbmQgc3RhcnQpIG15LWdvb2dsZS1tYXhsZW4pCiAgICAg ICAgICAobWVzc2FnZSAiU2VhcmNoIHN0cmluZyB0b28gbG9uZyEiKQogICAgICAgIChsZXQgKChx dWVyeSAoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIHN0YXJ0IGVuZCkpKQogICAgICAg ICAgKGJyb3dzZS11cmwKICAgICAgICAgICAoY29uY2F0ICJodHRwOi8vIgogICAgICAgICAgICAg ICAgICAgKGlmIHByZWZpeCAoY29uY2F0IG15LWdvb2dsZS1ncm91cHMtdXJsICIvZ3JvdXBzIikK ICAgICAgICAgICAgICAgICAgICAgKGNvbmNhdCBteS1nb29nbGUtdXJsICIvc2VhcmNoIikpCiAg ICAgICAgICAgICAgICAgICAiP3E9IiAodXJsLWhleGlmeS1zdHJpbmcgcXVlcnkpKSkpKSkKCiAg ICAoZGVmdmFyIG15LXVybC1tYXhsZW4gMTAwCiAgICAgICJNYXhpbXVtIGxlbmd0aCBvZiBzdHJp bmcgdG8gc2VuZCB0byBicm93c2VyIGFzIFVSTC4iKQoKICAgIDs7IGBmaW5kLWZpbGUtYXQtcG9p bnQnIGRvZXMgdGhpcywgZXNzZW50aWFsbHkuCiAgICAoZGVmdW4gbXktdXJsLWF0LXBvaW50IChz dGFydCBlbmQpCiAgICAgICJTZW5kIHRoZSBoaWdobGlnaHRlZCBVUkwgdG8gdGhlIHdlYiBicm93 c2VyLiIKICAgICAgKGludGVyYWN0aXZlICJyIikKICAgICAgKGlmICg+ICgtIGVuZCBzdGFydCkg bXktdXJsLW1heGxlbikKICAgICAgICAgIChtZXNzYWdlICJVUkwgdG9vIGxvbmchIikKICAgICAg ICAoYnJvd3NlLXVybCAoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIHN0YXJ0IGVuZCkp KSkKCjs7IChyZXF1aXJlICd1cmwpCjs7Cjs7IChkZWZ2YXIgZ29vZ2xlLXNlYXJjaC1tYXhsZW4g NTAKOzsgICAiTWF4aW11bSBzdHJpbmcgbGVuZ3RoIG9mIHNlYXJjaCB0ZXJtLiAgVGhpcyBwcmV2 ZW50cyB5b3UgZnJvbSBhY2NpZGVudGFsbHkgCjs7IHNlbmRpbmcgYSBmaXZlIG1lZ2FieXRlIHF1 ZXJ5IHN0cmluZyB0byBOZXRzY2FwZS4iKQo7Owo7OyAoZGVmdW4gZ29vZ2xlLWl0IChzZWFyY2gt c3RyaW5nKQo7OyAgICJTZWFyY2ggZm9yIFNFQVJDSC1TVFJJTkcgb24gZ29vZ2xlLiIKOzsgICAo aW50ZXJhY3RpdmUgInNTZWFyY2ggZm9yOiAiKQo7OyAgIChicm93c2UtdXJsIChjb25jYXQgImh0 dHA6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/Y2xpZW50PXhlbWFjcyZxPSIKOzsgCQkgICAgICAo dXJsLWhleGlmeS1zdHJpbmcKOzsgCQkgICAgICAgKGVuY29kZS1jb2Rpbmctc3RyaW5nIHNlYXJj aC1zdHJpbmcgJ3V0Zi04KSkpKSkKOzsKOzsgKGRlZnVuIGdvb2dsZS1zZWFyY2gtc2VsZWN0aW9u ICgpCjs7ICAgIkNyZWF0ZSBhIEdvb2dsZSBzZWFyY2ggVVJMIGFuZCBzZW5kIGl0IHRvIHlvdXIg d2ViIGJyb3dzZXIuIgo7OyAgIChpbnRlcmFjdGl2ZSkKOzsgICAobGV0IChzdGFydCBlbmQgdGVy bSB1cmwpCjs7ICAgICAoaWYgKG9yIChub3QgKGZib3VuZHAgJ3JlZ2lvbi1leGlzdHMtcCkpIChy ZWdpb24tZXhpc3RzLXApKQo7OyAgICAgICAgIChwcm9nbgo7OyAgICAgICAgICAgKHNldHEgc3Rh cnQgKHJlZ2lvbi1iZWdpbm5pbmcpCjs7ICAgICAgICAgICAgICAgICBlbmQgICAocmVnaW9uLWVu ZCkpCjs7ICAgICAgICAgICAoaWYgKD4gKC0gc3RhcnQgZW5kKSBnb29nbGUtc2VhcmNoLW1heGxl bikKOzsgICAgICAgICAgICAgICAoc2V0cSB0ZXJtIChidWZmZXItc3Vic3RyaW5nIHN0YXJ0ICgr IHN0YXJ0IGdvb2dsZS1zZWFyY2gtbWF4bGVuKSkpCjs7ICAgICAgICAgICAgIChzZXRxIHRlcm0g KGJ1ZmZlci1zdWJzdHJpbmcgc3RhcnQgZW5kKSkpCjs7ICAgICAgICAgICAoZ29vZ2xlLWl0IHRl cm0pKQo7OyAgICAgICAoYmVlcCkKOzsgICAgICAgKG1lc3NhZ2UgIlJlZ2lvbiBub3QgYWN0aXZl IikpKSkKCjs7fX19CgogICAgKGdsb2JhbC1zZXQta2V5IFsobWV0YSBzKV0gJ215LWdvb2dsZS1z ZWFyY2gtcmVnaW9uKQoKICAgIChkZWZ1biBteS1nb29nbGUtc2VhcmNoICgpCiAgICAgICJQcm9t cHQgZm9yIGEgcXVlcnkgaW4gdGhlIG1pbmlidWZmZXIsIGxhdW5jaCB0aGUgd2ViIGJyb3dzZXIg YW5kIHF1ZXJ5CiAgICBHb29nbGUuIgogICAgICAoaW50ZXJhY3RpdmUpCiAgICAgIChsZXQgKChx dWVyeSAocmVhZC1mcm9tLW1pbmlidWZmZXIgIkdvb2dsZSBTZWFyY2g6ICIpKSkKICAgICAgICAo YnJvd3NlLXVybCAoY29uY2F0ICJodHRwOi8vIiBteS1nb29nbGUtdXJsICIvc2VhcmNoP3E9Igog ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVybC1oZXhpZnktc3RyaW5nIHF1ZXJ5KSkpKSkK CiAgICAoZGVmdW4gbXktZ29vZ2xlLXNlYXJjaC13b3JkLWF0LXBvaW50ICgpCiAgICAgICJHb29n bGUgdGhlIHdvcmQgYXQgcG9pbnQuIgogICAgICAoaW50ZXJhY3RpdmUpCiAgICAgIChicm93c2Ut dXJsIChjb25jYXQgImh0dHA6Ly8iIG15LWdvb2dsZS11cmwgIi9zZWFyY2g/cT0iCiAgICAgICAg ICAgICAgICAgICAgICAgICAgKHdvcmQtYXQtcG9pbnQpKSkpCgogICAgKGRlZnVuIG15LWdvb2ds ZS1zZWFyY2gtZmlsZSAoZmlsZSkKICAgICAgIlVzZSBnb29nbGUgdG8gc2VhcmNoIGZvciBhIGZp bGUgbmFtZWQgRklMRS4iCiAgICAgIChpbnRlcmFjdGl2ZSAic1NlYXJjaCBmb3IgZmlsZTogIikK ICAgICAgKHczbS1icm93c2UtdXJsCiAgICAgICAoY29uY2F0ICJodHRwOi8vIiBteS1nb29nbGUt dXJsICIvc2VhcmNoP3E9IgogICAgICAgICAgICAgICAodzNtLXVybC1lbmNvZGUtc3RyaW5nCiAg ICAgICAgICAgICAgICAoY29uY2F0ICIraW50aXRsZTpcImluZGV4K29mXCIgIgogICAgICAgICAg ICAgICAgICAgICAgICAiLWludXJsOmh0bSAtaW51cmw6aHRtbCAtaW51cmw6cGhwICIKICAgICAg ICAgICAgICAgICAgICAgICAgZmlsZSkpKSkpCgogICAgKGRlZnZhciBteS1nb29nbGUtcHJlZml4 LW1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKQogICAgICAiS2V5bWFwIGZvciBteSBHb29nbGUgY29t bWFuZHMuIikKCiAgICAoZ2xvYmFsLXNldC1rZXkgWyhjb250cm9sIGMpIChnKV0gbXktZ29vZ2xl LXByZWZpeC1tYXApCiAgICAoZGVmaW5lLWtleSBteS1nb29nbGUtcHJlZml4LW1hcCAiZyIgJ215 LWdvb2dsZS1zZWFyY2gpCiAgICAoZGVmaW5lLWtleSBteS1nb29nbGUtcHJlZml4LW1hcCAoa2Jk ICJSRVQiKSAnbXktZ29vZ2xlLXNlYXJjaCkKICAgIChkZWZpbmUta2V5IG15LWdvb2dsZS1wcmVm aXgtbWFwICJ3IiAnbXktZ29vZ2xlLXNlYXJjaC13b3JkLWF0LXBvaW50KQogICAgKGRlZmluZS1r ZXkgbXktZ29vZ2xlLXByZWZpeC1tYXAgInIiICdteS1nb29nbGUtc2VhcmNoLXJlZ2lvbikKICAg IChkZWZpbmUta2V5IG15LWdvb2dsZS1wcmVmaXgtbWFwICJ1IiAnbXktdXJsLWF0LXBvaW50KSkK Cjs7fX19CgoKOzt7e3sgRGVsLmljaW8udXMKCih3aGVuICh0cnktcmVxdWlyZSAnZGVsaWNpb3Vz KQogICAgKHNldHEgZGVsaWNpb3VzLWFwaS11c2VyICJmbmkiKQogICAgKHNldHEgZGVsaWNpb3Vz LWFwaS1wYXNzd29yZCAiZGVmYXVsdCIpCiAgICAoc2V0cSBkZWxpY2lvdXMtYXBpLWZyb20gdXNl ci1tYWlsLWFkZHJlc3MpCgo7OyAgICAgKHNldHEgZGVsaWNpb3VzLWFwaS1ob3N0ICJtc3ByeDAw MXAuYmUud2ludGVydGh1ci5jb20iKQo7OyAgICAgKHNldHEgZGVsaWNpb3VzLWFwaS1wb3J0ICI4 MDgwIikKCiAgICAoZGVsaWNpb3VzLWFwaS1yZWdpc3Rlci1hdXRoKSkKCjs7fX19CgoKOzt7e3sg QmFiZWwKCjs7Ozs7OzsgVXNlIFN5c1RyYW4gKG9ubHkgbmVhcmx5IGZ1bmN0aW9uYWwgdHJhbnNs YXRpb24gc2VydmljZSkuLi4KOzs7IHJlbGllcyBvbiB3My4uLgooYXV0b2xvYWQgJ2JhYmVsICJi YWJlbCIKICAiVXNlIGEgd2ViIHRyYW5zbGF0aW9uIHNlcnZpY2UgdG8gdHJhbnNsYXRlIHRoZSBt ZXNzYWdlIE1TRy4iIHQpCihhdXRvbG9hZCAnYmFiZWwtcmVnaW9uICJiYWJlbCIKICAiVXNlIGEg d2ViIHRyYW5zbGF0aW9uIHNlcnZpY2UgdG8gdHJhbnNsYXRlIHRoZSBjdXJyZW50IHJlZ2lvbi4i IHQpCihhdXRvbG9hZCAnYmFiZWwtYXMtc3RyaW5nICJiYWJlbCIKICAiVXNlIGEgd2ViIHRyYW5z bGF0aW9uIHNlcnZpY2UgdG8gdHJhbnNsYXRlIE1TRywgcmV0dXJuaW5nIGEgc3RyaW5nLiIgdCkK KGF1dG9sb2FkICdiYWJlbC1idWZmZXIgImJhYmVsIgogICJVc2UgYSB3ZWIgdHJhbnNsYXRpb24g c2VydmljZSB0byB0cmFuc2xhdGUgdGhlIGN1cnJlbnQgYnVmZmVyLiIgdCkKKHNldHEgYmFiZWwt cHJlZmVycmVkLXRvLWxhbmd1YWdlICJFbmdsaXNoIikKCjs7fX19CgoKOzt7e3sgQWNjdVdlYXRo ZXIKCih3aGVuICh0cnktcmVxdWlyZSAnaHR0cC1nZXQpCiAgICAod2hlbiAodHJ5LXJlcXVpcmUg J2h0bWxyKQoKICAgICAgOzsgZnJvbSBodHRwOi8vd3d3LmVtYWNzd2lraS5vcmcvY2dpLWJpbi93 aWtpL1JhaW5PclNoaW5lCiAgICAgIChkZWZ1biBhY2N1d2VhdGhlci1zZW50aW5lbCAocHJvYyBz dHJpbmcpCiAgICAgICAgKHN3aXRjaC10by1idWZmZXIgKHByb2Nlc3MtYnVmZmVyIHByb2MpKQog ICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCiAgICAgICAgOzsgZGlydHkgcGFyc2luZy4u Li4KICAgICAgICAoc2VhcmNoLWZvcndhcmQgIjwhLS0gY29udGVudCB0YWJsZSAzIC0tLT4iKQog ICAgICAgIChzZWFyY2gtZm9yd2FyZCAiPC90cj4iKQogICAgICAgIChsZXQgKChpbmhpYml0LXJl YWQtb25seSB0KQogICAgICAgICAgICAgIChzdGFydCAocG9pbnQpKQogICAgICAgICAgICAgIChl bmQgIChzZWFyY2gtZm9yd2FyZCAiIDwhLS0gUmlnaHQgTmF2IC0tPiIpKSkKICAgICAgICAgIChr aWxsLXJlZ2lvbiBlbmQgKHBvaW50LW1heCkpCiAgICAgICAgICAoa2lsbC1yZWdpb24gKHBvaW50 LW1pbikgc3RhcnQpCiAgICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgICAgICAg KGh0bWxyLXJlbmRlcikKICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpKSkKCiAgICAg IChkZWZ1biBhY2N1d2VhdGhlciAoY2l0eSByZWdpb24gY291bnRyeSkKICAgICAgICAidXNlIHd3 d2EuYWNjdXdlYXRoZXIuY29tIGh0dHAtZ2V0LmVsIGFuZCBodG1sci5lbCB0byBkaXNwbGF5IHdl YXRoZXIKICAgIGNpdHkgaXMgYSBjaXR5IG5hbWUgaS5lLiBBVEhFTlMsIFBBUklTLi4uLgogICAg IFJFR0lPTiBpcyBvbmUgb2Y6CiAgICAgIEFGO0FGUklDQSBBUztBU0lBIEFVO0FVU1RSQUxJQSBD QTtDQU5BREEgQ0w7Q0VOVFJBTCBBTUVSSUNBICYgQ0FSSUJCRUFOCiAgICAgIEVVO0VVUk9QRSBB VztNSURETEUgRUFTVCBOQTtOT1JUSCBBTUVSSUNBIFNBO1NPVVRIIEFNRVJJQ0EKICAgIENPVU5U UlkgaXMgYSB0d28gbGV0dGVyIGNvZGUgOiBHUiBncmVlY2UgRlIgZnJhbmNlLi4uLiIKCiAgICAg ICAgKGh0dHAtZ2V0CiAgICAgICAgIChmb3JtYXQKICAgICAgICAgICJodHRwOi8vd3d3LmFjY3V3 ZWF0aGVyLmNvbS9hZGNiaW4vcHVibGljL2ludGxvY2FsX2luZGV4LmFzcD93eGNpdHkyPSVzJnd4 Y291bnRyeT0lczslcyIKICAgICAgICAgIGNpdHkKICAgICAgICAgIHJlZ2lvbgogICAgICAgICAg Y291bnRyeSkKICAgICAgICAgbmlsICdhY2N1d2VhdGhlci1zZW50aW5lbCAxLjAKICAgICAgICAg KGNvbmNhdCAiV2VhdGhlciBpbjogIiBjaXR5KSkpCgogICAgICAoZGVmdW4gbXktd2VhdGhlci1p bi1icnVzc2VscyBuaWwKICAgICAgICAoaW50ZXJhY3RpdmUpCiAgICAgICAgKGFjY3V3ZWF0aGVy ICJCUlVTU0VMUyIgIkVVIiAiQlgiKSkKCiAgICAgIChkZWZ1biBteS13ZWF0aGVyLWluLWZyZWp1 cyBuaWwKICAgICAgICAoaW50ZXJhY3RpdmUpCiAgICAgICAgKGFjY3V3ZWF0aGVyICJGUkVKVVMi ICJFVSIgIkZSIikpKSkKCjs7fX19Cgo7O3t7eyAoaW5mbyAiKGVtYWNzLWdvb2RpZXMtZWwpaHRt bGl6ZSIpCgo7OyBIVE1MLWl6ZSBmb250LWxvY2sgYnVmZmVycwood2hlbiAodHJ5LXJlcXVpcmUg J2h0bWxpemUpCiAgICAoZ2xvYmFsLXNldC1rZXkgWyhtZXRhIFApXSAnaHRtbGl6ZS1idWZmZXIp KQoKOzt9fX0KCgo7OyA7OyBhdXRvbWF0aWNhbGx5IHVwZGF0ZSB3ZWIgY29weQo7OyAod3JpdGUt cmVnaW9uCjs7ICAocG9pbnQtbWluKSAocG9pbnQtbWF4KQo7OyAgIi9zY29ycGlvc0BmdHAuc2Nv cnBpb3Njb3RlZGF6dXIuY29tOi9wdWJsaWNfaHRtbC9lbWFjcy9teWRvdGVtYWNzLmVsIikKCgo7 O3t7eyBGRkFQCgo7OyBmaW5kIGZpbGUgKG9yIFVSTCkgYXQgcG9pbnQKKHdoZW4gKHRyeS1yZXF1 aXJlICdmZmFwKQoKICAgIDs7IGRvbid0IHVzZSBkZWZhdWx0IGtleSBiaW5kaW5ncywgYXMgSSB3 YW50IHNvbWUgb2YgdGhlbSB0byBiZSBkZWZpbmVkCiAgICA7OyBkaWZmZXJlbnRseSAoQy14IEMt ciwgZm9yIGV4YW1wbGUpCgogICAgOzsgdmlzaXQgYSBmaWxlCiAgICAoZ2xvYmFsLXNldC1rZXkg WyhmMyldICdmaW5kLWZpbGUtYXQtcG9pbnQpKQoKOzt9fX0KCihtZXNzYWdlICI1MiBIeXBlcmxp bmtpbmcgYW5kIE5hdmlnYXRpb24gRmVhdHVyZXMuLi4gRG9uZSIpCgo7O319fQoKCjs7e3t7IC0t WyA1MyBEaXNzb2NpYXRlZCBQcmVzcyBdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQoKKG1lc3NhZ2UgIjUzIERpc3NvY2lhdGVkIFByZXNzLi4uIikKCihtZXNzYWdl ICI1MyBEaXNzb2NpYXRlZCBQcmVzcy4uLiBEb25lIikKCjs7fX19CgoKOzt7e3sgLS1bIDU0IE90 aGVyIEFtdXNlbWVudHMgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCgoobWVzc2FnZSAiNTQgT3RoZXIgQW11c2VtZW50cy4uLiIpCgoobWVzc2FnZSAiNTQgT3Ro ZXIgQW11c2VtZW50cy4uLiBEb25lIikKCjs7fX19CgoKOzt7e3sgLS1bIDU1IChpbmZvICIoZW1h Y3MpQ3VzdG9taXphdGlvbiIpIF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKG1l c3NhZ2UgIjU1IEN1c3RvbWl6YXRpb24uLi4iKQoKOzsgaW5oaWJpdCB0aGUgaW5pdGlhbCBzdGFy dHVwIG1lc3NhZ2UgaW4gKnNjcmF0Y2gqIGJ1ZmZlcgooc2V0cSBpbmhpYml0LXN0YXJ0dXAtbWVz c2FnZSB0KQooWEVtYWNzCiAgICAoc2V0cSBpbml0aWFsLXNjcmF0Y2gtbWVzc2FnZSBuaWwpKQoK Ozsgc3BlZWQgdXAgdGhpbmdzIGJ5IHByZXZlbnRpbmcgZ2FyYmFnZSBjb2xsZWN0aW9ucwooc2V0 cSBnYy1jb25zLXRocmVzaG9sZCAoKiA1MCAxMDI0IDEwMjQpKQoKCjs7OyAtLS0tWyA1NS4zIFZh cmlhYmxlcwoKOzsgZmlsZSBsb2NhbCB2YXJpYWJsZXMgc3BlY2lmaWNhdGlvbnMgYXJlIG9iZXll ZCwgd2l0aG91dCBxdWVyeSAtIFJJU0tZISEKKHNldHEgZW5hYmxlLWxvY2FsLXZhcmlhYmxlcyB0 KQoKOzsgb2JleSBgZXZhbCcgdmFyaWFibGVzIC0gUklTS1khIQooc2V0cSBlbmFibGUtbG9jYWwt ZXZhbCB0KQoKOzsgcmVjb3JkIHNhZmUgdmFsdWVzIGZvciBzb21lIGxvY2FsIHZhcmlhYmxlcwoo c2V0cSBzYWZlLWxvY2FsLXZhcmlhYmxlLXZhbHVlcwogICAgICAnKChUZVgtbWFzdGVyIC4gdCkK ICAgICAgICAoYmFsbG9vbi1oZWxwLW1vZGUgLiAtMSkKICAgICAgICAobnV3ZWItYXV0by1pbmRl eC1zY3JhcCkKICAgICAgICAobnV3ZWItc291cmNlLW1vZGUgLiAibWVyY3VyeSIpCiAgICAgICAg KG51d2ViLXNvdXJjZS1tb2RlIC4gInNxbCIpKSkKCgo7OzsgLS0tLVsgNTUuNCBDdXN0b21pemlu ZyBLZXkgQmluZGluZ3MKCjs7IHRoZSBrZXlzIEMtYyBMRVRURVIgYXJlIHJlc2VydmVkIGZvciB1 c2VyIGZ1bmN0aW9ucwoKOzsgcHJpbnQgdGhlIGtleSBiaW5kaW5ncyBpbiBhIHRhYnVsYXIgZm9y bQo7OyBbZnJvbSBodHRwOi8vd3d3LXhyYXkuYXN0LmNhbS5hYy51ay9+Z21vcnJpcy9kb3RlbWFj cy5odG1sXQooZGVmdW4gbXkta2V5dGFibGUgKGFyZykKICAiUHJpbnQgdGhlIGtleSBiaW5kaW5n cyBpbiBhIHRhYnVsYXIgZm9ybS4iCiAgKGludGVyYWN0aXZlICJzRW50ZXIgYSBtb2RpZmllciBz dHJpbmc6IikKICAod2l0aC1vdXRwdXQtdG8tdGVtcC1idWZmZXIgIipLZXkgdGFibGUqIgogICAg KGxldCogKChpIDApCiAgICAgICAgICAgKGtleXMgKGxpc3QgImEiICJiIiAiYyIgImQiICJlIiAi ZiIgImciICJoIiAiaSIgImoiICJrIiAibCIgIm0iICJuIgogICAgICAgICAgICAgICAgICAgICAg ICJvIiAicCIgInEiICJyIiAicyIgInQiICJ1IiAidiIgInciICJ4IiAieSIgInoiCiAgICAgICAg ICAgICAgICAgICAgICAgIjxyZXR1cm4+IiAiPGRvd24+IiAiPHVwPiIgIjxyaWdodD4iICI8bGVm dD4iCiAgICAgICAgICAgICAgICAgICAgICAgIjxob21lPiIgIjxlbmQ+IiAiPGYxPiIgIjxmMj4i ICI8ZjM+IiAiPGY0PiIgIjxmNT4iCiAgICAgICAgICAgICAgICAgICAgICAgIjxmNj4iICI8Zjc+ IiAiPGY4PiIgIjxmOT4iICI8ZjEwPiIgIjxmMTE+IiAiPGYxMj4iCiAgICAgICAgICAgICAgICAg ICAgICAgIjEiICIyIiAiMyIgIjQiICI1IiAiNiIgIjciICI4IiAiOSIgIjAiCiAgICAgICAgICAg ICAgICAgICAgICAgImAiICJ+IiAiISIgIkAiICIjIiAiJCIgIiUiICJeIiAiJiIgIioiICIoIiAi KSIgIi0iICJfIgogICAgICAgICAgICAgICAgICAgICAgICI9IiAiKyIgIlxcIiAifCIgInsiICJb IiAiXSIgIn0iICI7IiAiJyIgIjoiICJcIiIKICAgICAgICAgICAgICAgICAgICAgICAiPCIgIj4i ICIsIiAiLiIgIi8iICI/IikpCiAgICAgICAgICAgKG4gKGxlbmd0aCBrZXlzKSkKICAgICAgICAg ICAobW9kaWZpZXJzIChsaXN0ICIiICJDLSIgIk0tIiAiUy0iICJNLUMtIiAiUy1DLSIpKSkKICAg ICAgKG9yIChzdHJpbmc9IGFyZyAiIikgKHNldHEgbW9kaWZpZXJzIChsaXN0IGFyZykpKQogICAg ICAoc2V0cSBrIChsZW5ndGggbW9kaWZpZXJzKSkKICAgICAgKHByaW5jIChmb3JtYXQgIiAlLTEw LjEwcyB8IiAiS2V5IikpCiAgICAgIChsZXQgKChqIDApKQogICAgICAgICh3aGlsZSAoPCBqIGsp CiAgICAgICAgICAocHJpbmMgKGZvcm1hdCAiICUtMzEuMzFzIHwiIChudGggaiBtb2RpZmllcnMp KSkKICAgICAgICAgIChzZXRxIGogKDErIGopKSkpCiAgICAgIChwcmluYyAiXG4iKQogICAgICAo cHJpbmMgKGZvcm1hdCAiXyUtMTAuMTBzX3wiICJfX19fX19fX19fIikpCiAgICAgIChsZXQgKChq IDApKQogICAgICAgICh3aGlsZSAoPCBqIGspCiAgICAgICAgICAocHJpbmMgKGZvcm1hdCAiXyUt MzEuMzFzX3wiCiAgICAgICAgICAgICAgICAgICAgICAgICAiX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXyIpKQogICAgICAgICAgKHNldHEgaiAoMSsgaikpKSkKICAgICAgKHByaW5jICJc biIpCiAgICAgICh3aGlsZSAoPCBpIG4pCiAgICAgICAgKHByaW5jIChmb3JtYXQgIiAlLTEwLjEw cyB8IiAobnRoIGkga2V5cykpKQogICAgICAgIChsZXQgKChqIDApKQogICAgICAgICAgKHdoaWxl ICg8IGogaykKICAgICAgICAgICAgKGxldCogKChiaW5kaW5nCiAgICAgICAgICAgICAgICAgICAg KGtleS1iaW5kaW5nIChyZWFkLWtiZC1tYWNybyAoY29uY2F0IChudGggaiBtb2RpZmllcnMpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChu dGggaSBrZXlzKSkpKSkKICAgICAgICAgICAgICAgICAgIChiaW5kaW5nLXN0cmluZyAiXyIpKQog ICAgICAgICAgICAgICh3aGVuIGJpbmRpbmcKICAgICAgICAgICAgICAgIChpZiAoZXEgYmluZGlu ZyAnc2VsZi1pbnNlcnQtY29tbWFuZCkKICAgICAgICAgICAgICAgICAgICAoc2V0cSBiaW5kaW5n LXN0cmluZyAoY29uY2F0ICInIiAobnRoIGkga2V5cykgIiciKSkKICAgICAgICAgICAgICAgICAg KHNldHEgYmluZGluZy1zdHJpbmcgKGZvcm1hdCAiJXMiIGJpbmRpbmcpKSkpCiAgICAgICAgICAg ICAgKHNldHEgYmluZGluZy1zdHJpbmcKICAgICAgICAgICAgICAgICAgICAoc3Vic3RyaW5nIGJp bmRpbmctc3RyaW5nIDAgKG1pbiAobGVuZ3RoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmctc3RyaW5nKSAzMSkpKQogICAgICAgICAg ICAgIChwcmluYyAoZm9ybWF0ICIgJS0zMS4zMXMgfCIgYmluZGluZy1zdHJpbmcpKQogICAgICAg ICAgICAgIChzZXRxIGogKDErIGopKSkpKQogICAgICAgIChwcmluYyAiXG4iKQogICAgICAgIChz ZXRxIGkgKDErIGkpKSkKICAgICAgKHByaW5jIChmb3JtYXQgIl8lLTEwLjEwc198IiAiX19fX19f X19fXyIpKQogICAgICAobGV0ICgoaiAwKSkKICAgICAgICAod2hpbGUgKDwgaiBrKQogICAgICAg ICAgKHByaW5jIChmb3JtYXQgIl8lLTMxLjMxc198IgogICAgICAgICAgICAgICAgICAgICAgICAg Il9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18iKSkKICAgICAgICAgIChzZXRxIGogKDEr IGopKSkpKSkKICAoZGVsZXRlLXdpbmRvdykKICAoaHNjcm9sbC1tb2RlKQogIChzZXRxIHRydW5j YXRlLWxpbmVzIHQpKSAgICAgICAgICAgICAgOyBmb3IgRW1hY3MgMjEKCgo7OzsgLS0tLVsgNTUu NiBUaGUgU3ludGF4IFRhYmxlCgo7OyBsb3JzcXVlIGonZXNzYXllIGRlIGlzcGVsbGVyIGRlcyBt b3RzIGF2ZWMgYWNjZW50cywgaWwgc2VtYmxlCjs7IGNhcnLpbWVudCBpZ25vcmVyIGxlcyBhY2Nl bnRzIHBhciBleCB1biBpc3BlbGwgc3VyIOls6XBoYW50Cjs7IGVzc2F5ZSBkZSBtZSBjb3JyaWdl ciBgcGhhbnQnLCBpbCB2aXJlIGxlIOls6SAoZW4gZmFpdCBtb24gZXgKOzsgZXN0IG1hbCBjaG9p c2kgaWwgbmUgdmlyZSBxdWUgbGVzIOksIGlsIG4nZXNzYXllIHBhcyBkZQo7OyBjb3JyaWdlciB1 bmUgbGV0dHJlIHNldWxlIC0gbGUgbCBlbiBsJ29jY3VyZW5jZSkuCjs7Cjs7IGNlIHF1aSBjb21w dGUgaWNpIGMnZXN0IGxhIHN5bnRheC1jYXNlIGRlcyBjYXJhY3TocmVzIGNvbmNlcm7pcy4gUG91 cgo7OyB0b24gRW1hY3MgaWxzIG5lIHNvbnQgcGFzIHdvcmQtY29uc3RpdHVlbnQ7IOdhIGRvaXQg cG9zZXIgZCdhdXRyZXMKOzsgcHJvYmzobWVzIGF2ZWMgbGVzIGNvbW1hbmRlcyBkZSBk6XBsYWNl bWVudCBvcmllbnTpIG1vdCAoYE0tZicpLCBsZXMKOzsgY29tbWFuZGVzIGQnZXhwYW5zaW9uIGRl cyBhYmJyZXZzIGV0Yy4KCjs7IGZpeCBjb21wbGV0aW9uIHN5bnRheCBmb3IgYHRleHQtbW9kZS1z eW50YXgtdGFibGUnCihkZWZ1biBteS1jaGFuZ2Utd29yZC1jb25zdGl0dWVudCAoKQogIChtYXAg bmlsCiAgICAgICAoZnVuY3Rpb24KICAgICAgICAobGFtYmRhIChjaGFyKQogICAgICAgICAgKG1v ZGlmeS1zeW50YXgtZW50cnkgY2hhciAidyIgdGV4dC1tb2RlLXN5bnRheC10YWJsZSkpKQo7OyAg ICAgICAgKG1vZGlmeS1zeW50YXgtZW50cnkgY2hhciAiXyIgY21wbC1zdGFuZGFyZC1zeW50YXgt dGFibGUpKSkKICAgICAgIDs7IGluY2x1ZGUgYWNjZW50ZWQgY2hhcmFjdGVycyBpbiBjb21wbGV0 aW9uIHN5bnRheAogICAgICAgIuHp7fP64Ojs8vni6u70++Tr7/b88eXnIikpCgoobXktY2hhbmdl LXdvcmQtY29uc3RpdHVlbnQpCgo7OyBub3cgJy0nIGlzIG5vdCBjb25zaWRlcmVkIGEgd29yZC1k ZWxpbWl0ZXIKOzsgKGFkZC1ob29rICdlbWFjcy1saXNwLW1vZGUtaG9vawo7OyAgICAgICAgICAg JyhsYW1iZGEgKCkKOzsgICAgICAgICAgICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID8tICJ3Iikp KQoKOzs7IC0tLS1bIDU1LlggRGlzYWJsaW5nCgo7OyBUbyBnZXQgYSBsaXN0IG9mIGFsbCB0aGUg ZGlzYWJsZWQgZnVuY3Rpb25zOgo7OyBNLTogKGxldChsc3QpKG1hcGF0b21zKGxhbWJkYSh4KShp ZihnZXQgeCAnZGlzYWJsZWQpKHB1c2ggeCBsc3QpKSkpbHN0KSBSRVQKCihtZXNzYWdlICI1NSBD dXN0b21pemF0aW9uLi4uIERvbmUiKQoKOzt9fX0KCgo7O3t7eyAtLVsgQXBwIEcgRW1hY3MgYW5k IChpbmZvICIoZW1hY3MpTVMtRE9TIikgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKKG1l c3NhZ2UgIkFwcGVuZGl4IEcgRW1hY3MgYW5kIE1TLURPUy4uLiIpCgo7OyBudW1lcmljIGtleXBh ZCAobmVlZGVkIGluIFhFbWFjcyBmb3IgV2luZG93cykKKFhFbWFjcwogICAgOzsga2V5cyB0byB0 aGUgcmlnaHQgb2YgdGhlIHJlZ3VsYXIga2V5Ym9hcmQKICAgIChkZWZpbmUta2V5IGtleS10cmFu c2xhdGlvbi1tYXAgW2twLWRpdmlkZV0gICAgIFs/L10pCiAgICAoZGVmaW5lLWtleSBrZXktdHJh bnNsYXRpb24tbWFwIFtrcC1tdWx0aXBseV0gICBbPypdKQogICAgKGRlZmluZS1rZXkga2V5LXRy YW5zbGF0aW9uLW1hcCBba3Atc3VidHJhY3RdICAgWz8tXSkKICAgIChkZWZpbmUta2V5IGtleS10 cmFuc2xhdGlvbi1tYXAgW2twLWFkZF0gICAgICAgIFs/K10pCiAgICAoZGVmaW5lLWtleSBrZXkt dHJhbnNsYXRpb24tbWFwIFtrcC1lbnRlcl0gICAgIFs/XHJdKQogICAgKGRlZmluZS1rZXkga2V5 LXRyYW5zbGF0aW9uLW1hcCBba3AtZGVjaW1hbF0gICAgWz8uXSkKCiAgICA7OyBrZXlzIHdpdGgg ZGlnaXRzCiAgICAoZGVmaW5lLWtleSBrZXktdHJhbnNsYXRpb24tbWFwIFtrcC0wXSAgICAgICAg ICBbPzBdKQogICAgKGRlZmluZS1rZXkga2V5LXRyYW5zbGF0aW9uLW1hcCBba3AtMV0gICAgICAg ICAgWz8xXSkKICAgIChkZWZpbmUta2V5IGtleS10cmFuc2xhdGlvbi1tYXAgW2twLTJdICAgICAg ICAgIFs/Ml0pCiAgICAoZGVmaW5lLWtleSBrZXktdHJhbnNsYXRpb24tbWFwIFtrcC0zXSAgICAg ICAgICBbPzNdKQogICAgKGRlZmluZS1rZXkga2V5LXRyYW5zbGF0aW9uLW1hcCBba3AtNF0gICAg ICAgICAgWz80XSkKICAgIChkZWZpbmUta2V5IGtleS10cmFuc2xhdGlvbi1tYXAgW2twLTVdICAg ICAgICAgIFs/NV0pCiAgICAoZGVmaW5lLWtleSBrZXktdHJhbnNsYXRpb24tbWFwIFtrcC02XSAg ICAgICAgICBbPzZdKQogICAgKGRlZmluZS1rZXkga2V5LXRyYW5zbGF0aW9uLW1hcCBba3AtN10g ICAgICAgICAgWz83XSkKICAgIChkZWZpbmUta2V5IGtleS10cmFuc2xhdGlvbi1tYXAgW2twLThd ICAgICAgICAgIFs/OF0pCiAgICAoZGVmaW5lLWtleSBrZXktdHJhbnNsYXRpb24tbWFwIFtrcC05 XSAgICAgICAgICBbPzldKQoKICAgIDs7IGFkZGl0aW9uYWwga2V5cGFkIGR1cGxpY2F0ZXMgb2Yg a2V5cyBvcmRpbmFyaWx5IGZvdW5kIGVsc2V3aGVyZQogICAgKGRlZmluZS1rZXkga2V5LXRyYW5z bGF0aW9uLW1hcCBba3AtbGVmdF0gICAgIFtsZWZ0XSkKICAgIChkZWZpbmUta2V5IGtleS10cmFu c2xhdGlvbi1tYXAgW2twLXJpZ2h0XSAgIFtyaWdodF0pCiAgICAoZGVmaW5lLWtleSBrZXktdHJh bnNsYXRpb24tbWFwIFtrcC11cF0gICAgICAgICBbdXBdKQogICAgKGRlZmluZS1rZXkga2V5LXRy YW5zbGF0aW9uLW1hcCBba3AtZG93bl0gICAgIFtkb3duXSkKICAgIChkZWZpbmUta2V5IGtleS10 cmFuc2xhdGlvbi1tYXAgW2twLWJlZ2luXSAgIFtiZWdpbl0pCiAgICAoZGVmaW5lLWtleSBrZXkt dHJhbnNsYXRpb24tbWFwIFtrcC1ob21lXSAgICAgW2hvbWVdKQogICAgKGRlZmluZS1rZXkga2V5 LXRyYW5zbGF0aW9uLW1hcCBba3AtZW5kXSAgICAgICBbZW5kXSkKICAgIChkZWZpbmUta2V5IGtl eS10cmFuc2xhdGlvbi1tYXAgW2twLW5leHRdICAgICBbbmV4dF0pCiAgICAoZGVmaW5lLWtleSBr ZXktdHJhbnNsYXRpb24tbWFwIFtrcC1wcmlvcl0gICBbcHJpb3JdKQogICAgKGRlZmluZS1rZXkg a2V5LXRyYW5zbGF0aW9uLW1hcCBba3AtaW5zZXJ0XSBbaW5zZXJ0XSkKICAgIChkZWZpbmUta2V5 IGtleS10cmFuc2xhdGlvbi1tYXAgW2twLWRlbGV0ZV0gW2RlbGV0ZV0pKQoKOzsgZGl2aWRlIGtl eSAobmVlZGVkIGluIEdOVSBFbWFjcyBmb3IgV2luZG93cykKKEdOVUVtYWNzCiAgICAoZ2xvYmFs LXNldC1rZXkgKGtiZCAiPGtwLWRpdmlkZT4iKSAoa2JkICIvIikpKQoKKG1lc3NhZ2UgIkFwcGVu ZGl4IEcgRW1hY3MgYW5kIE1TLURPUy4uLiBEb25lIikKCjs7fX19CgoKOzt7e3sgLS1bIEVtYWNz IERpc3BsYXkgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQoKOzs7IC0tLS1bIEZhY2VzCgo7OyBhdm9pZCBFbWFjcyBoYW5naW5nIGZvciBhIHdoaWxl IGNoYW5naW5nIGRlZmF1bHQgZm9udAoobW9kaWZ5LWZyYW1lLXBhcmFtZXRlcnMgbmlsICcoKHdh aXQtZm9yLXdtIC4gbmlsKSkpCgo7OyBzZXQgZGVmYXVsdCBjb2xvciB0aGVtZQood2hlbiAodHJ5 LXJlcXVpcmUgJ2NvbG9yLXRoZW1lKQogICAgKGlmIChmYm91bmRwICdjb2xvci10aGVtZS1pbml0 aWFsaXplKQogICAgICAgIChjb2xvci10aGVtZS1pbml0aWFsaXplKSkKICAgIChzZXRxIGNvbG9y LXRoZW1lLWlzLWdsb2JhbCB0KQogICAgKHdoZW4gKHRyeS1yZXF1aXJlICdjb2xvci10aGVtZS1m bmkpCiAgICAgICAoY29sb3ItdGhlbWUtZm5pKSkpCgo7OyBhbGxvdyBhbnkgc2NhbGFibGUgZm9u dAood2hlbiBydW5uaW5nLW1zLXdpbmRvd3MKICAgIChzZXRxIHNjYWxhYmxlLWZvbnRzLWFsbG93 ZWQgdCkpCgo7OyBzZXQgZGVmYXVsdCBmb250IGZhbWlseSBhbmQgZm9udCBzaXplCihhc3NxLWRl bGV0ZS1hbGwgJ2ZvbnQgZGVmYXVsdC1mcmFtZS1hbGlzdCkKKGRlZnZhciBteS1kZWZhdWx0LWZv bnQKICA7OyBUbyBjaGVjayBpZiBzb21lIGZvbnQgaXMgYXZhaWxhYmxlIGluIEVtYWNzIGRvIGZv bGxvd2luZzoKICA7OyAgICAxLiAgIFN3aXRjaCB0byBgKnNjcmF0Y2gqJyBidWZmZXIuCiAgOzsg ICAgMi4gICBUeXBlIGAocHJpbjEtdG8tc3RyaW5nICh4LWxpc3QtZm9udHMgImZvbnQteW91LXdh bnQtdG8tY2hlY2sgb3IKICA7OyAgICAgICAgIHBhdHRlcm4iKSknLgogIDs7ICAgIDMuICAgUGxh Y2UgdGhlIGN1cnNvciBhZnRlciB0aGUgbGFzdCBjbG9zaW5nIHBhcmVuIGFuZCBoaXQKICA7OyAg ICAgICAgIGBDLWonLiBMaXN0IG9mIHRoZSBuYW1lcyBvZiBhdmFpbGFibGUgZm9udHMgbWF0Y2hp bmcgZ2l2ZW4KICA7OyAgICAgICAgIHBhdHRlcm4gd2lsbCBhcHBlYXIgaW4gdGhlIGN1cnJlbnQg YnVmZmVyIChgKnNjcmF0Y2gqJykuCiAgOzsgICAgNC4gICBGb3IgbGlzdGluZyBvZiBhbGwgYXZh aWxhYmxlIGZvbnRzLCB1c2UKICA7OyAgICAgICAgIGAocHJpbjEtdG8tc3RyaW5nICh4LWxpc3Qt Zm9udHMgIioiKSknLgogIDs7IEZvcm1hdDogIi1tYWtlci1mYW1pbHktd2VpZ2h0LXNsYW50LXdp ZHRodHlwZS1zdHlsZS4uLgogIDs7ICAgICAgICAgLi4uLXBpeGVscy1oZWlnaHQtaG9yaXotdmVy dC1zcGFjaW5nLXdpZHRoLWNoYXJzZXQiCiAgKGlmIHJ1bm5pbmctbXMtd2luZG93cwogICAgICAi LSotQ291cmllciBOZXctKi0qLSotKi0xMi05MC0qLSotKi0qLSotKiIKICAgICAgOzsgKGluc2Vy dCAoZm9ybWF0ICJcbiVTIiAodzMyLXNlbGVjdC1mb250KSkpIGZvbGxvd2VkIGJ5IEMteCBDLWUK ICAgICAgOzsgcmV0dXJucyB0aGUgY3VycmVudCBmb250IHN0cmluZwoKOzsgICAgICItbW9ub3R5 cGUtY291cmllciBuZXctc2VtaWxpZ2h0LXItKi0qLTEyLTkwLSotKi1tLSotKi0qIgogICAgIi1N aXNjLUZpeGVkLU1lZGl1bS1SLVNlbWlDb25kZW5zZWQtKi0xMy0qLSotKi0qLSotKi0qIgopKQog ICAgOzsgdGhpcyBmYWNlIHN1cHBvcnRzIGJvbGQgKGluIEdudXMpIHdoaWxlCiAgICA7OyAiLW1p c2MtKi0qLSotKi0qLTEyLTkwLSotKi0qLSotKi0qIiBkb2VzIG5vdCEhCgogICAgOzsgdXNlIHhm b250c2VsIHV0aWxpdHkgdG8gdHJ5IG91dCBkaWZmZXJlbnQgZm9udHMuIEFmdGVyIGNob29zaW5n CiAgICA7OyBmb250IGNsaWNrIHNlbGVjdCBidXR0b24gaW4geGZvbnRzZWwgd2luZG93LiBUaGlz IHdpbGwgY29weSBmb250CiAgICA7OyBuYW1lIHlvdSBjaG9vc2UgdG8gY29weSAmIHBhc3RlIGJ1 ZmZlci4KICAgIDs7IG5lIHBhcyBvdWJsaWVyIGRlIGZhaXJlIHVuIHhyZGIgLW1lcmdlIGRlcnJp 6HJlIHBvdXIgdmFsaWRlciBsYQogICAgOzsgbW9kaWYuLi4KCihhZGQtdG8tbGlzdCAnZGVmYXVs dC1mcmFtZS1hbGlzdCAoY29ucyAnZm9udCBteS1kZWZhdWx0LWZvbnQpKQo7OyBOb3RlIHRoYXQg SSByZXBsYWNlZCBzb21lIG9mIHRoZSBmaWVsZHMgaW4gdGhlIGZvbnQgbmFtZSB3aXRoIGFzdGVy aXNrcy4KOzsgVGhpcyBpcyBiZWNhdXNlIHRoZSBmb250IHNwZWMgbGlzdHMgYm90aCBhIHBvaW50 IHNpemUgYW5kIGEgcGl4ZWwgaGVpZ2h0IGZvcgo7OyB0aGUgZm9udCAtLSB0aGlzIGNvbWJpbmF0 aW9uIHdpbGwgYmUgcGFydGljdWxhciB0byB0aGUgcmVzb2x1dGlvbiBzZXR0aW5ncwo7OyBvZiB5 b3VyIG1vbml0b3IuICBJZiB5b3UganVzdCB1c2Ugb25lICh0aGUgOTAgaW4gdGhlIGV4YW1wbGUg YWJvdmUgbWVhbnMgOS4wCjs7IHBvaW50cyksIGFuZCBsZWF2ZSB0aGUgb3RoZXIgc2V0dGluZ3Mg d2l0aCAqLCB0aGF0IHdpbGwgbWFrZSB5b3VyIHNldHRpbmcKOzsgd29yayBiZXR0ZXIgYWNyb3Nz IGRpZmZlcmVudCBtb25pdG9yIHNldHRpbmdzLgo7OyBbaHR0cDovL21haWwuZ251Lm9yZy9hcmNo aXZlL2h0bWwvaGVscC1lbWFjcy13aW5kb3dzLzIwMDItMDcvbXNnMDAxMDIuaHRtbF0KCihYRW1h Y3MKICAgIChzZXRxIG9wdGlvbnMtc2F2ZS1mYWNlcyB0KSkKICAgIDs7IFlvdSBjYW4gYWxzbyBj aGFuZ2UgdGhlIGZvbnQgc2l6ZSB3aXRoaW4gWEVtYWNzIChvcHRpb25zL3NpemUpLiBCZQogICAg Ozsgc3VyZSB0byBwdXQgKHNldHEgb3B0aW9ucy1zYXZlLWZhY2VzIHQpIGluIHlvdXIgLmVtYWNz IHRoZW4uCgo7OyBjb252ZW5pZW5jZSBmdW5jdGlvbnMgZm9yIGZhY2UgY3VzdG9taXphdGlvbgoo dHJ5LXJlcXVpcmUgJ2ZhY2UtbGlzdCkKCgo7OzsgLS0tLVsgRGlzcGxheSBUYWJsZXMKCjs7IGRp c3BsYXkgcGFnZSBkZWxpbWl0ZXIgXkwgYXMgYSBob3Jpem9udGFsIGxpbmUKKG9yIHN0YW5kYXJk LWRpc3BsYXktdGFibGUgKHNldHEgc3RhbmRhcmQtZGlzcGxheS10YWJsZSAobWFrZS1kaXNwbGF5 LXRhYmxlKSkpCihhc2V0IHN0YW5kYXJkLWRpc3BsYXktdGFibGUgP1xmICh2Y29uY2F0IChtYWtl LXZlY3RvciA3OCA/LSkgIl5MIikpCgo7O319fQoKOzt9fX0KCgo7O3t7eyBSZWNvdmVyeSBmcm9t IFByb2JsZW1zICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj Cgo7O3t7eyAtLVsgNTYgUXVpdHRpbmcgYW5kIEFib3J0aW5nIF0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoobWVzc2FnZSAiNTYgUXVpdHRpbmcgYW5kIEFib3J0aW5n Li4uIikKCihtZXNzYWdlICI1NiBRdWl0dGluZyBhbmQgQWJvcnRpbmcuLi4gRG9uZSIpCgo7O319 fQoKOzt9fX0KCgo7O3t7eyAtLVsgRGVidWdnaW5nIF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgo7OyA7OyBnZXQgdGhlIHJlc3VsdGluZyBi YWNrdHJhY2Ugd2hlbiBidWdzIHN1Y2ggYXMgYFdyb25nIHR5cGUgYXJndW1lbnQnIG9jY3VyCjs7 IChzZXRxIGRlYnVnLW9uLWVycm9yIG5pbCkgIDsgd2FzIHNldCB0byBgdCcgYXQgYmVnaW5uaW5n IG9mIGJ1ZmZlcgoKOzsgd2FybiB0aGF0IHNvbWUgcGFja2FnZXMgd2VyZSBtaXNzaW5nCihpZiBt aXNzaW5nLXBhY2thZ2VzLWxpc3QKICAgIChwcm9nbiAobWVzc2FnZSAiUGFja2FnZXMgbm90IGZv dW5kOiAlUyIKICAgICAgICAgICAgICAgICAgICAobnJldmVyc2UgbWlzc2luZy1wYWNrYWdlcy1s aXN0KSkpKQoKOzt9fX0KCihhdXRvbG9hZCAnc2F5LW1pbm9yLW1vZGUgImZlc3RpdmFsIiAiTWVu dSBmb3IgdXNpbmcgRmVzdGl2YWwuIiB0KQooc2F5LW1pbm9yLW1vZGUgdCkKKHNldHEgYXV0by1t b2RlLWFsaXN0IAogICAgICAoYXBwZW5kICcoKCJcXC5mZXN0aXZhbHJjJCIgLiBzY2hlbWUtbW9k ZSkpIGF1dG8tbW9kZS1hbGlzdCkpCgooc2V0cSBmZXN0aXZhbC1wcm9ncmFtLW5hbWUgIi91c3Iv YmluL2Zlc3RpdmFsIikKCjs7IGluc2VydCB2ZXJzaW9uIGluZm8gaW50byBgKnNjcmF0Y2gqJyBi dWZmZXIKKHNldC1idWZmZXIgIipzY3JhdGNoKiIpCihpbnNlcnQgKGNvbmNhdCAiVGhpcyBpcyAi IChlbWFjcy12ZXJzaW9uKSAiLiIpKQoKCgoobWVzc2FnZSAifX19XG4iKQoKOzsgVGhpcyBpcyBm b3IgdGhlIHNha2Ugb2YgRW1hY3MuCjs7IExvY2FsIFZhcmlhYmxlczoKOzsgY29kaW5nOiBpc28t bGF0aW4tOQo7OyBFbmQ6Cgo7OzsgLmVtYWNzIGVuZHMgaGVyZQo= --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=.gnus-sva ;;; .gnus --- my Gnus Init File ;; Time-stamp: "Tue 2007-01-30 11:04 sva on mundaneum" ;; $Revision: 742 $ ;; $Date: 2007-01-25 10:16:36 +0100 (Thu, 25 Jan 2007) $ ;;; Code: (message "{{{ --[ Loading my Gnus init file ]--") ;;{{{ --[ Loading ]--------------------------------------------------------- (defvar my-gnus-root-dir "~/" "The root directory for my Gnus stuff.") ;; substitute environment variables, if any, in the directory name (setq my-gnus-root-dir (substitute-in-file-name my-gnus-root-dir)) ;; list of packages that `try-require' can't find (setq missing-packages-list nil) ;;}}} ;;{{{ --[ 1 (info "(gnus)Starting Up") Gnus ]------------------------------- (message "1 Starting Gnus...") ;;{{{ ----[ 1.1 (info "(gnus)Finding the News") ;; using Gnus for news (setq gnus-select-method (cond (t '(nntp "easynet" (nntp-address "news.easynet.be"))))) ;; .netrc-like file that holds nntp authinfo passwords (setq nntp-authinfo-file "~/.authinfo-news") ;; using Gnus for mail (with the one-file-one-message back-end) (setq gnus-secondary-select-methods `( (nnimap "" (nnimap-address ,(cond (t "81.188.7.133"))) ;; authorization information (user account and password) (nnimap-authinfo-file "~/.authinfo")) (nnslashdot ""))) ;;}}} ;; do not prompt the user for his mail address (setq query-user-mail-address nil) ;;{{{ ----[ 1.5 (info "(gnus)New Groups") ;; don't save the list of killed groups ;; WARNING as Gnus has no record of which groups are new and which are old, ;; the automatic new newsgroups subscription methods becomes meaningless (setq gnus-save-killed-list nil) ;;{{{ ----[ 1.7 (info "(gnus)Startup Files") ;; don't save a `.newsrc' file (for using other newsreaders) on exit (setq gnus-save-newsrc-file nil) ;; ignore the `.newsrc' file (setq gnus-read-newsrc-file nil) ;; my `.newsrc' file (setq gnus-startup-file (concat my-gnus-root-dir "Mail/.newsrc")) ;;}}} ;;{{{ ----[ 1.8 (info "(gnus)Auto Save") ;; unconditionally read the dribble file (setq gnus-always-read-dribble-file t) ;;}}} ;;{{{ ----[ 1.9 (info "(gnus)The Active File") ;; Gnus will only know about the groups in my `.newsrc' file (setq gnus-read-active-file nil) ;;}}} (message "1 Starting Gnus... Done") ;;}}} ;;{{{ --[ 2 (info "(gnus)The Group Buffer") ]------------------------------- (message "2 Group Buffer...") ;;{{{ ----[ 2.1 (info "(gnus)Group Buffer Format") ;; format of the group buffer (setq gnus-group-line-format (concat "%M%m%P %O " "%(%-45,45g%) " "%5N Unread/ %5t Items" "\n")) ;;}}} ;;{{{ ----[ 2.16 (info "(gnus)Group Topics") (add-hook 'gnus-group-mode-hook 'gnus-topic-mode) ;;}}} (message "2 Group Buffer... Done") ;;}}} ;;{{{ --[ 3 (info "(gnus)The Summary Buffer") ]----------------------------- (message "3 Summary Buffer...") ;;{{{ ----[ 3.1 (info "(gnus)Summary Buffer Format") ;; format specification of the lines in the summary buffer ;; for the record, the default string is `%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n' (setq gnus-summary-line-format (concat "%U%R" "%z " "%-15,15n " "%4,4~(cut 0)o-" "%2,2~(cut 4)o-" "%2,2~(cut 6)o " "%2,2~(cut 9)o:" "%2,2~(cut 11)o " (if (string-match "v5.1[01].*$" (gnus-version)) "%4k %B") "%I%(%0,80s%)\n")) ;; strings indicating that the current article has the same subject as ;; the previous (if (and window-system (string-match "v5.1[01].*$" (gnus-version))) (progn (setq gnus-summary-same-subject "") (setq gnus-sum-thread-tree-root "\x4912f ") (setq gnus-sum-thread-tree-false-root "\x490f8 ") (setq gnus-sum-thread-tree-single-indent "\x4912b ") (setq gnus-sum-thread-tree-leaf-with-other "\x4903c\x49020\x490fa ") (setq gnus-sum-thread-tree-single-leaf "\x49034\x49020\x490fa ") (setq gnus-sum-thread-tree-vertical "\x49022")) (setq gnus-summary-same-subject "\\-> ...")) ;; format specification for the summary mode line (setq gnus-summary-mode-line-format "%V: %%b") ;;}}} ;;{{{ ----[ (info "(gnus)Sorting") the Summary Buffer ;; sort threads by reverse date (of the root node) ;; [primary sort key should be the last function in the list] (setq gnus-thread-sort-functions '((not gnus-thread-sort-by-number) gnus-thread-sort-by-date)) ;;}}} ;;{{{ ----[ 3.12 (info "(gnus)Article Caching") ;; entering of articles from the cache (setq gnus-cache-enter-articles '(ticked dormant unread read)) ;; simple setup for your convenience, if you are using nnimap from ;; home, over a dialup connection ;; removing of articles from the cache (setq gnus-cache-remove-articles nil) ;; cache your nnimap groups (setq gnus-cacheable-groups "^nnimap") ;; avoid caching your nnml and nnfolder groups (setq gnus-uncacheable-groups "^nnml\\|^nnfolder") ;;}}} ;;{{{ ----[ 3.26 (info "(gnus)Various Summary Stuff") ;; highlight current line in summary buffer (defun my-setup-highlight-line () (hl-line-mode 1)) (add-hook 'gnus-summary-mode-hook 'my-setup-highlight-line) ;;}}} (message "3 Summary Buffer... Done") ;;}}} ;; warn that some packages were missing (if missing-packages-list (progn (message "Packages not found: %S" (nreverse missing-packages-list)))) (message "}}}\n") ;; This is for the sake of Emacs. ;; Local Variables: ;; mode: emacs-lisp ;; coding: iso-latin-9 ;; End: ;;; .gnus ends here --=-=-= Content-Type: application/emacs-lisp Content-Disposition: attachment; filename=color-theme-sva.el ;;; color-theme-sva.el --- my color theme (require 'color-theme) (defun color-theme-sva () "Initialize faces according to my preferences." (interactive) (color-theme-install '(color-theme-sva ((background-color . "white") (background-mode . light) (border-color . "black") (cursor-color . "rgb:15/FF/00") (foreground-color . "black") (mouse-color . "black")) (default ((t (nil)))) (bold ((t (:bold t :weight bold)))) (bold-italic ((t (:italic t :bold t :slant italic :weight bold)))) (italic ((t (:italic t :slant italic)))) (underline ((t (:underline t)))) (highlight ((t (:foreground "white" :background "rgb:31/6A/C5")))) ;; darkolivegreen ;; bbdb (bbdb-company ((t (:foreground "steel blue" :italic t)))) (bbdb-field-name ((t (:foreground "steel blue" :bold t)))) (bbdb-field-value ((t (:foreground "steel blue")))) (bbdb-name ((t (:foreground "rgb:FF/66/33" :underline t)))) (calendar-today-face ((t (:bold t :weight bold :background "yellow")))) (comint-highlight-input ((t (:bold t :weight bold)))) (comint-highlight-prompt ((t (:foreground "blue")))) ;; custom (custom-saved-face ((t (:underline t)))) (custom-state-face ((t (:foreground "dark green")))) (custom-button-pressed-face ((t (:background "lightgrey" :foreground "black" :box (:line-width 2 :style pressed-button))))) (custom-modified-face ((t (:background "blue" :foreground "white")))) (custom-invalid-face ((t (:background "red" :foreground "yellow")))) (custom-set-face ((t (:background "white" :foreground "blue")))) (custom-changed-face ((t (:background "blue" :foreground "white")))) (custom-rogue-face ((t (:background "black" :foreground "pink")))) (custom-face-tag-face ((t (:underline t)))) (custom-variable-button-face ((t (:bold t :underline t :weight bold)))) ;; cvs (cvs-filename-face ((t (:foreground "blue4")))) (cvs-handled-face ((t (:foreground "pink")))) (cvs-header-face ((t (:foreground "blue4" :bold t)))) (cvs-marked-face ((t (:foreground "green3" :bold t)))) (cvs-msg-face ((t (:italic t :foreground "gray55")))) (cvs-need-action-face ((t (:foreground "orange")))) (cvs-unknown-face ((t (:foreground "red")))) ;; subversion (svn-status-marked-face ((t (:foreground "green3" :bold t)))) (svn-status-marked-popup-face ((t (:foreground "green3" :bold t)))) (svn-status-update-available-face ((t (:foreground "orange")))) (svn-status-directory-face ((t (:foreground "blue" :bold t)))) (svn-status-filename-face ((t (:foreground "magenta3")))) (svn-status-symlink-face ((t (:foreground "cyan")))) (svn-status-locked-face ((t (:foreground "red" :bold t)))) (svn-status-switched-face ((t (:italic t :foreground "gray55")))) ;; diary (diary-face ((t (:foreground "red")))) ;; dircolors (dircolors-face-asm ((t (:foreground "blue3")))) (dircolors-face-backup ((t (:foreground "blue3")))) (dircolors-face-compress ((t (:foreground "red")))) (dircolors-face-dir ((t (:foreground "blue" :bold t)))) (dircolors-face-doc ((t (:foreground "gold")))) (dircolors-face-dos ((t (:foreground "green3")))) (dircolors-face-emacs ((t (:foreground "turquoise3")))) (dircolors-face-html ((t (:foreground "gold")))) (dircolors-face-img ((t (:foreground "magenta3")))) (dircolors-face-lang ((t (:foreground "turquoise3")))) (dircolors-face-lang-interface ((t (:foreground "turquoise3")))) (dircolors-face-make ((t (:foreground "green3")))) (dircolors-face-objet ((t (:foreground "blue3")))) (dircolors-face-package ((t (:foreground "red")))) (dircolors-face-paddb ((t (:foreground "blue3")))) (dircolors-face-ps ((t (:foreground "gold")))) (dircolors-face-sound ((t (:foreground "magenta3")))) (dircolors-face-tar ((t (:foreground "red")))) (dircolors-face-yacc ((t (:foreground "turquoise3")))) ;; dired (dired-face-boring ((t (:foreground "Gray65")))) (dired-face-directory ((t (:bold t)))) (dired-face-executable ((t (:foreground "SeaGreen")))) (dired-face-flagged ((t (:background "LightSlateGray")))) (dired-face-header ((t (:background "grey75" :foreground "black")))) (dired-face-marked ((t (:background "PaleVioletRed")))) (dired-face-permissions ((t (:background "grey75" :foreground "black")))) (dired-face-setuid ((t (:foreground "Red")))) (dired-face-socket ((t (:foreground "magenta")))) (dired-face-symlink ((t (:foreground "cyan")))) ;; dired+ (diredp-date-time ((t (:foreground "rgb:33/64/4E")))) (diredp-dir-heading ((t (:background "yellow" :foreground "blue" :bold t :weight bold)))) (diredp-dir-priv ((t (:background "yellow" :foreground "blue" :bold t :weight bold)))) (diredp-file-name ((t (:foreground "black")))) (diredp-file-suffix ((t (:foreground "rgb:7B/46/8E")))) (diredp-flag-mark-line ((t (:foreground "red" :bold t :weight bold)))) ;; emacs wiki (emacs-wiki-bad-link-face ((t (:foreground "red" :weight bold)))) (emacs-wiki-header-1 ((t (:bold t :weight bold :height 1.4)))) (emacs-wiki-header-2 ((t (:bold t :weight bold :height 1.3)))) (emacs-wiki-header-3 ((t (:height 1.2)))) (emacs-wiki-header-4 ((t (:height 1.1)))) (emacs-wiki-header-5 ((t (:height 1.0)))) (emacs-wiki-header-6 ((t (:height 0.9)))) (emacs-wiki-link-face ((t (:foreground "blue" :underline t)))) ;; flypell (flyspell-duplicate-face ((t (:foreground "Gold3" :underline t :weight bold :bold t)))) (flyspell-incorrect-face ((t (:foreground "red" :underline t :bold t)))) ;; LaTeX (font-latex-math-face ((t (:foreground "black")))) (font-latex-sedate-face ((t (:foreground "gray45")))) ;; (font-lock-comment-face ((t (:foreground "red")))) (font-lock-constant-face ((t (:foreground "dark cyan")))) (font-lock-function-name-face ((t (:foreground "blue")))) (font-lock-keyword-face ((t (:foreground "purple1")))) (font-lock-reference-face ((t (:foreground "dark cyan")))) (font-lock-string-face ((t (:foreground "green4")))) (font-lock-type-face ((t (:foreground "forest green")))) (font-lock-variable-name-face ((t (:foreground "magenta")))) (font-lock-warning-face ((t (:bold t :foreground "red")))) (gnus-splash-face ((t (:foreground "blue")))) ;; Gnus group buffer (gnus-group-mail-1-empty-face ((t (:foreground "rgb:50/50/B0")))) (gnus-group-mail-1-face ((t (:foreground "rgb:50/50/B0" :bold t)))) (gnus-group-mail-2-empty-face ((t (:foreground "rgb:66/00/66")))) (gnus-group-mail-2-face ((t (:foreground "rgb:66/00/66" :bold t)))) (gnus-group-mail-3-empty-face ((t (:foreground "rgb:00/77/77")))) (gnus-group-mail-3-face ((t (:foreground "rgb:00/77/77" :bold t)))) (gnus-group-news-1-empty-face ((t (:foreground "rgb:50/50/B0")))) (gnus-group-news-1-face ((t (:foreground "rgb:50/50/B0" :bold t)))) (gnus-group-news-2-empty-face ((t (:foreground "rgb:66/00/66")))) (gnus-group-news-2-face ((t (:foreground "rgb:66/00/66" :bold t)))) (gnus-group-news-3-empty-face ((t (:foreground "rgb:00/77/77")))) (gnus-group-news-3-face ((t (:foreground "rgb:00/77/77" :bold t)))) (gnus-group-news-4-empty-face ((t (:foreground "rgb:99/00/00")))) (gnus-group-news-4-face ((t (:foreground "rgb:99/00/00" :bold t)))) (gnus-group-news-5-empty-face ((t (:foreground "rgb:00/00/99")))) (gnus-group-news-5-face ((t (:foreground "rgb:00/00/99" :bold t)))) (gnus-group-news-6-empty-face ((t (:foreground "rgb:BB/66/00")))) (gnus-group-news-6-face ((t (:foreground "rgb:BB/66/00" :bold t)))) ;; Gnus summary buffer (gnus-summary-selected-face ((t (:foreground "rgb:FF/66/33" :bold t)))) (gnus-summary-high-unread-face ((t (:foreground "blue" :bold t)))) (gnus-summary-high-read-face ((t (:foreground "rgb:80/00/80" :bold t)))) (gnus-summary-high-ticked-face ((t (:foreground "hot pink" :bold t)))) (gnus-summary-high-ancient-face ((t (:foreground "rgb:77/77/99" :bold t)))) (gnus-summary-normal-unread-face ((t (:foreground "blue")))) (gnus-summary-normal-read-face ((t (:foreground "rgb:80/00/80")))) (gnus-summary-normal-ticked-face ((t (:foreground "hot pink")))) (gnus-summary-normal-ancient-face ((t (:foreground "rgb:77/77/99")))) (gnus-summary-low-unread-face ((t (:low t :foreground "blue" :italic t)))) (gnus-summary-low-read-face ((t (:low t :foreground "rgb:80/00/80" :italic t)))) (gnus-summary-low-ticked-face ((t (:low t :foreground "hot pink" :italic t)))) (gnus-summary-low-ancient-face ((t (:low t :foreground "rgb:77/77/99" :italic t)))) (gnus-summary-cancelled-face ((t (:italic t :foreground "gray55" :strike-through t)))) ;; Gnus article buffer (gnus-header-name-face ((t (:foreground "rgb:33/99/CC" :bold t :family "Arial")))) (gnus-header-from-face ((t (:foreground "blue" :family "Arial")))) (gnus-header-subject-face ((t (:foreground "rgb:FF/66/33" :bold t)))) (gnus-header-newsgroups-face ((t (:foreground "rgb:33/99/CC" :family "Arial")))) (gnus-header-content-face ((t (:foreground "rgb:33/99/CC" :family "Arial")))) (gnus-cite-attribution-face ((t (:foreground "rgb:50/50/B0")))) (gnus-cite-face-1 ((t (:foreground "rgb:50/50/B0")))) (gnus-cite-face-2 ((t (:foreground "rgb:66/00/66")))) (gnus-cite-face-3 ((t (:foreground "rgb:00/77/77")))) (gnus-cite-face-4 ((t (:foreground "rgb:99/00/00")))) (gnus-cite-face-5 ((t (:foreground "rgb:00/00/99")))) (gnus-cite-face-6 ((t (:foreground "rgb:BB/66/00")))) (gnus-cite-face-7 ((t (:foreground "rgb:50/50/B0")))) (gnus-cite-face-8 ((t (:foreground "rgb:66/00/66")))) (gnus-cite-face-9 ((t (:foreground "rgb:00/77/77")))) (gnus-cite-face-10 ((t (:foreground "rgb:99/00/00")))) (gnus-signature-face ((t (:foreground "rgb:7F/7F/7F")))) (gnus-emphasis-bold ((t (:bold t)))) (widget-button-face ((t (:bold t :weight bold)))) (widget-button-pressed-face ((t (:foreground "red")))) (widget-documentation-face ((t (:foreground "dark green")))) (widget-field-face ((t (:background "gray85")))) (widget-inactive-face ((t (:foreground "dim gray")))) (widget-single-line-field-face ((t (:background "gray85")))) ;; (widget-mouse-face . highlight) ;; when replying (message-header-name-face ((t (:foreground "rgb:33/99/CC" :bold t :family "Arial")))) (message-header-to-face ((t (:foreground "blue" :family "Arial")))) (message-header-cc-face ((t (:foreground "blue" :family "Arial")))) (message-header-subject-face ((t (:foreground "rgb:FF/66/33" :bold t)))) (message-header-newsgroups-face ((t (:foreground "rgb:33/99/CC" :family "Arial")))) (message-header-xheader-face ((t (:foreground "red")))) (message-header-other-face ((t (:foreground "rgb:33/99/CC" :family "Arial")))) (message-separator-face ((t (:foreground "red" :bold t :family "Arial")))) (message-cited-text-face ((t (:foreground "rgb:50/50/B0")))) (message-mml-face ((t (:foreground "ForestGreen")))) ;; Gnus/Message (gnus-emphasis-highlight-words ((t (:background "black" :foreground "yellow")))) (gnus-picon-face ((t (:background "white" :foreground "yellow")))) (gnus-picon-xbm-face ((t (:background "white" :foreground "yellow")))) (gnus-x-face ((t (:background "white" :foreground "black")))) (html-helper-bold-face ((t (:foreground "black" :bold t)))) (html-helper-italic-face ((t (:foreground "black" :slant italic)))) (html-helper-underline-face ((t (:foreground "black" :underline t)))) (html-tag-face ((t (:foreground "blue")))) (info-header-node ((t (:foreground "magenta" :underline t)))) ;; node name (info-header-xref ((t (:foreground "dodger blue" :underline t)))) ;; node names (info-menu-5 ((t (:foreground "dark orange" :underline t)))) ;; special * (info-menu-header ((t (:foreground "red" :underline t)))) ;; major topics (info-node ((t (:foreground "blue" :underline t)))) ;; XEmacs manuals (info-xref ((t (:bold t :foreground "magenta4" :weight bold)))) ;; highlighting matches (match ((t (:background "yellow" :foreground "rgb:EE/66/00" :bold t)))) (isearch ((t (:background "yellow" :foreground "rgb:EE/66/00" :bold t)))) (isearch-lazy-highlight-face ((t (:background "rgb:CC/FF/FF" :foreground "blue" :bold t)))) ;; for GNU Emacs (isearch-secondary ((t (:background "rgb:CC/FF/FF" :foreground "blue" :bold t)))) ;; for XEmacs ;; make (makefile-space-face ((t (:background "hotpink")))) ;; modeline (modeline-buffer-id ((t (:background "rgb:39/80/F4" :foreground "white")))) (modeline-mousable ((t (:background "rgb:39/80/F4" :foreground "gray85")))) ;; major mode (modeline-mousable-minor-mode ((t (:background "rgb:39/80/F4" :foreground "gray75")))) (modeline ((t (:background "DeepSkyBlue1" :foreground "black" :height 1.25 :family "courier"))) t) (modeline-inactive ((t (:inherit modeline :background "PaleTurquoise1" :foreground "grey20" :box (:line-width -1 :color "grey75") :weight light :family "profontwindows"))) t) ;; org (org-done ((t (:foreground "green3" :bold t :strike-through t)))) (org-level-1 ((t (:foreground "blue" :bold t :height 1.3)))) (org-level-2 ((t (:foreground "red" :bold t :height 1.1)))) (org-level-3 ((t (:foreground "Purple")))) (org-scheduled-previously ((t (:foreground "blue" :bold t)))) (org-scheduled-today ((t (:foreground "blue")))) (org-upcoming-deadline ((t (:foreground "DarkOrange" :bold t)))) ;; selection (region ((t (:background "seashell2")))) ;; for GNU Emacs (zmacs-region ((t (:background "seashell2")))) ;; for XEmacs (secondary-selection ((t (:background "paleturquoise")))) ;; for cat <