From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Protesilaos Stavrou Newsgroups: gmane.emacs.devel Subject: Re: [PATCH] `completing-read`: Add `group-function` support to completion metadata Date: Wed, 28 Apr 2021 09:18:43 +0300 Message-ID: <87czufx77g.fsf@protesilaos.com> References: <39c93100-a352-538d-717a-663bcc5de296@yandex.ru> <23ebdd80-3ca2-4166-beab-e2535b6cc646@yandex.ru> <2be2ebec-cecd-8c76-19fa-75e15634a954@daniel-mendler.de> <87mttlfy2e.fsf@protesilaos.com> <87wnsnpt32.fsf@mail.linkov.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="332"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Cc: Daniel Mendler , Gregory Heytings , Dmitry Gutov , Stefan Monnier , "emacs-devel@gnu.org" To: Juri Linkov Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Wed Apr 28 08:20:43 2021 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lbdYw-000AW7-DR for ged-emacs-devel@m.gmane-mx.org; Wed, 28 Apr 2021 08:20:42 +0200 Original-Received: from localhost ([::1]:45268 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lbdYv-00036A-FM for ged-emacs-devel@m.gmane-mx.org; Wed, 28 Apr 2021 02:20:41 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:54672) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lbdXJ-0002Sf-R3 for emacs-devel@gnu.org; Wed, 28 Apr 2021 02:19:02 -0400 Original-Received: from relay5-d.mail.gandi.net ([217.70.183.197]:48047) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lbdXB-0004Au-8a for emacs-devel@gnu.org; Wed, 28 Apr 2021 02:19:01 -0400 X-Originating-IP: 94.46.225.161 Original-Received: from kronos (unknown [94.46.225.161]) (Authenticated sender: public@protesilaos.com) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 167B71C000E; Wed, 28 Apr 2021 06:18:45 +0000 (UTC) In-Reply-To: <87wnsnpt32.fsf@mail.linkov.net> (Juri Linkov's message of "Tue, 27 Apr 2021 19:53:21 +0300") Received-SPF: none client-ip=217.70.183.197; envelope-from=info@protesilaos.com; helo=relay5-d.mail.gandi.net X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:268557 Archived-At: --=-=-= Content-Type: text/plain On 2021-04-27, 19:53 +0300, Juri Linkov wrote: >> In outline: >> >> + The Completions' buffer is (setq completions-format 'one-column). >> [...] >> >> The overall experience is good to the point where I do not miss other >> interactive UIs. And I feel that it could be improved further though I >> am not there yet skills-wise. > > Thanks for sharing your settings. Such UI using the default Completions buffer > is long awaited. Recently we tried to do something similar with a new mode > zcomplete-mode. But it would be better to implement most enhancements > in minibuffer.el where additional features could be enabled with new options. > Then zcomplete-mode could just enable these options, like e.g. recently added > icomplete-vertical-mode tweaks icomplete options to build new UI. I think those issues are best decided by you and/or the other maintainers. To facilitate this exchange, I attach a shortened version of my extensions without requiring any external libraries (what I wrote before stands---you are welcome to improve upon it if you want, as I still have a lot to learn). Put those in the scratch buffer of emacs -Q, 'M-x eval-buffer' and then try 'C-h v RET mini' to get an idea of how it works (I implement a minimum input threshold). I also attach the original file, prot-minibuffer.el, and here is the section with my configurations for it: . If something is unclear, please let me know. [ I just noticed a bug in my code when (setq completions-detailed t) where prot-minibuffer-previous-completion-or-mini does not do what it is supposed to---will fix it later. ] >> I attach a screenshot, though I understand this does not say that much. > > Looks nice. One thing is unclear: the format of buffers is like > in the output of 'C-x C-b' (list-buffers) that uses tabulated-list > to print buffer information. Are these buffers in the Completions buffer > formatted with tabulated-list as well? That is done by the Marginalia library, which I think is a nice extra: . No, the mode does not change to tabulated-list. Daniel Mendler (in cc) is one of its maintainers and can elaborate on the technicalities. -- Protesilaos Stavrou https://protesilaos.com --=-=-= Content-Type: text/plain; charset=utf-8 Content-Disposition: attachment; filename=2021-04-28-emacs-Q-prot-minibuffer-excerpt.el Content-Transfer-Encoding: base64 OzsgVGhpcyBidWZmZXIgaXMgZm9yIHRleHQgdGhhdCBpcyBub3Qgc2F2ZWQsIGFuZCBmb3IgTGlz cCBldmFsdWF0aW9uLg0KOzsgVG8gY3JlYXRlIGEgZmlsZSwgdmlzaXQgaXQgd2l0aCBDLXggQy1m IGFuZCBlbnRlciB0ZXh0IGluIGl0cyBidWZmZXIuDQoNCg0KOzs7IEV4Y2VycHQgb2YgbXkgY29u ZmlndXJhdGlvbnMNCg0KKGFkZC10by1saXN0ICdkaXNwbGF5LWJ1ZmZlci1hbGlzdA0KICAgICAg ICAgICAgICcoIlxcKlxcKEVtYmFya1xcKT8uKkNvbXBsZXRpb25zLioiDQogICAgICAgICAgICAg ICAoZGlzcGxheS1idWZmZXItaW4tc2lkZS13aW5kb3cpDQogICAgICAgICAgICAgICAoc2lkZSAu IGJvdHRvbSkNCiAgICAgICAgICAgICAgIChzbG90IC4gMCkNCiAgICAgICAgICAgICAgICh3aW5k b3ctcGFyYW1ldGVycyAuICgobm8tb3RoZXItd2luZG93IC4gdCkNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobW9kZS1saW5lLWZvcm1hdCAuIG5vbmUpKSkpKQ0KDQooc2V0 cSBjb21wbGV0aW9uLXNob3ctaGVscCBuaWwpDQooc2V0cSBjb21wbGV0aW9uLWF1dG8taGVscCB0 KQ0KKHNldHEgY29tcGxldGlvbnMtZm9ybWF0ICdvbmUtY29sdW1uKQ0KKHNldHEgY29tcGxldGlv bnMtZGV0YWlsZWQgbmlsKQ0KKGZpbGUtbmFtZS1zaGFkb3ctbW9kZSAxKQ0KDQoNCihzZXRxIHBy b3QtbWluaWJ1ZmZlci1yZW1vdmUtc2hhZG93ZWQtZmlsZS1uYW1lcyB0KQ0KKHNldHEgcHJvdC1t aW5pYnVmZmVyLW1pbmltdW0taW5wdXQgMykNCihzZXRxIHByb3QtbWluaWJ1ZmZlci1saXZlLXVw ZGF0ZS1kZWxheSAwLjMpDQo7OyA7OyBOT1RFOiBgcHJvdC1taW5pYnVmZmVyLWNvbXBsZXRpb24t YmxvY2tsaXN0JyBjYW4gYmUgdXNlZCBmb3INCjs7IDs7IGNvbW1hbmRzIHdpdGggbG90cyBvZiBj YW5kaWRhdGVzLCBkZXBlbmRpbmcgYWxzbyBvbiBob3cgbG93DQo7OyA7OyBgcHJvdC1taW5pYnVm ZmVyLW1pbmltdW0taW5wdXQnIGlzLiAgV2l0aCBteSBjdXJyZW50IHNldHRpbmdzLA0KOzsgOzsg dGhpcyBpcyBub3QgcmVxdWlyZWQsIG90aGVyd2lzZSBJIHdvdWxkIHVzZSB0aGlzIGxpc3Q6DQo7 Ow0KOzsgJyggZGVzY3JpYmUtc3ltYm9sIGRlc2NyaWJlLWZ1bmN0aW9uDQo7OyAgICBkZXNjcmli ZS12YXJpYWJsZSBleGVjdXRlLWV4dGVuZGVkLWNvbW1hbmQNCjs7ICAgIGluc2VydC1jaGFyKQ0K KHNldHEgcHJvdC1taW5pYnVmZmVyLWNvbXBsZXRpb24tYmxvY2tsaXN0IG5pbCkNCihzZXRxIHBy b3QtbWluaWJ1ZmZlci1jb21wbGV0aW9uLXBhc3NsaXN0IG5pbCkNCg0KOzsgVGhpcyBpcyBmb3Ig Y29tbWFuZHMgdGhhdCBzaG91bGQgYWx3YXlzIHBvcCB1cCB0aGUgY29tcGxldGlvbnMnDQo7OyBi dWZmZXIuICBJdCBjaXJjdW12ZW50cyB0aGUgZGVmYXVsdCBtZXRob2Qgb2Ygd2FpdGluZyBmb3Ig c29tZSB1c2VyDQo7OyBpbnB1dCBiZWZvcmUgZGlzcGxheWluZyBhbmQgdXBkYXRpbmcgdGhlIGNv bXBsZXRpb25zJyBidWZmZXIuDQooc2V0cSBwcm90LW1pbmlidWZmZXItY29tcGxldGlvbi1wYXNz bGlzdCBuaWwpDQoNCihkZWZpbmUta2V5IGdsb2JhbC1tYXAgKGtiZCAicy12IikgIydwcm90LW1p bmlidWZmZXItZm9jdXMtbWluaS1vci1jb21wbGV0aW9ucykNCihsZXQgKChtYXAgY29tcGxldGlv bi1saXN0LW1vZGUtbWFwKSkNCiAgKGRlZmluZS1rZXkgbWFwIChrYmQgIk0tdiIpICMncHJvdC1t aW5pYnVmZmVyLWZvY3VzLW1pbmlidWZmZXIpDQogIChkZWZpbmUta2V5IG1hcCAoa2JkICJDLWci KSAjJ3Byb3QtbWluaWJ1ZmZlci1rZXlib2FyZC1xdWl0LWR3aW0pDQogIChkZWZpbmUta2V5IG1h cCAoa2JkICJDLW4iKSAjJ3Byb3QtbWluaWJ1ZmZlci1uZXh0LWNvbXBsZXRpb24tb3ItbWluaSkN CiAgKGRlZmluZS1rZXkgbWFwIChrYmQgIjxkb3duPiIpICMncHJvdC1taW5pYnVmZmVyLW5leHQt Y29tcGxldGlvbi1vci1taW5pKQ0KICAoZGVmaW5lLWtleSBtYXAgKGtiZCAiQy1wIikgIydwcm90 LW1pbmlidWZmZXItcHJldmlvdXMtY29tcGxldGlvbi1vci1taW5pKQ0KICAoZGVmaW5lLWtleSBt YXAgKGtiZCAiPHVwPiIpICMncHJvdC1taW5pYnVmZmVyLXByZXZpb3VzLWNvbXBsZXRpb24tb3It bWluaSkNCiAgKGRlZmluZS1rZXkgbWFwIChrYmQgIjxyZXR1cm4+IikgIydwcm90LW1pbmlidWZm ZXItY2hvb3NlLWNvbXBsZXRpb24tZXhpdCkNCiAgKGRlZmluZS1rZXkgbWFwIChrYmQgIjxNLXJl dHVybj4iKSAjJ3Byb3QtbWluaWJ1ZmZlci1jaG9vc2UtY29tcGxldGlvbi1kd2ltKSkNCihsZXQg KChtYXAgbWluaWJ1ZmZlci1sb2NhbC1jb21wbGV0aW9uLW1hcCkpDQogIChkZWZpbmUta2V5IG1h cCAoa2JkICJNLWciKSAjJ3Byb3QtbWluaWJ1ZmZlci1jaG9vc2UtY29tcGxldGlvbi1udW1iZXIp DQogIChkZWZpbmUta2V5IG1hcCAoa2JkICJDLW4iKSAjJ3Byb3QtbWluaWJ1ZmZlci1zd2l0Y2gt dG8tY29tcGxldGlvbnMtdG9wKQ0KICAoZGVmaW5lLWtleSBtYXAgKGtiZCAiPGRvd24+IikgIydw cm90LW1pbmlidWZmZXItc3dpdGNoLXRvLWNvbXBsZXRpb25zLXRvcCkNCiAgKGRlZmluZS1rZXkg bWFwIChrYmQgIkMtcCIpICMncHJvdC1taW5pYnVmZmVyLXN3aXRjaC10by1jb21wbGV0aW9ucy1i b3R0b20pDQogIChkZWZpbmUta2V5IG1hcCAoa2JkICI8dXA+IikgIydwcm90LW1pbmlidWZmZXIt c3dpdGNoLXRvLWNvbXBsZXRpb25zLWJvdHRvbSkNCiAgKGRlZmluZS1rZXkgbWFwIChrYmQgIkMt bCIpICMncHJvdC1taW5pYnVmZmVyLXRvZ2dsZS1jb21wbGV0aW9ucykpDQoNCihhZGQtaG9vayAn Y29tcGxldGlvbi1saXN0LW1vZGUtaG9vayAjJ3Byb3QtbWluaWJ1ZmZlci1obC1saW5lKQ0KKGFk ZC1ob29rICdjb21wbGV0aW9uLWxpc3QtbW9kZS1ob29rICMncHJvdC1taW5pYnVmZmVyLWRpc3Bs YXktbGluZS1udW1iZXJzKQ0KDQoNCg0KOzs7IEV4Y2VycHQgb2YgcHJvdC1taW5pYnVmZmVyLmVs DQoNCihkZWZjdXN0b20gcHJvdC1taW5pYnVmZmVyLWNvbXBsZXRpb24td2luZG93cy1yZWdleHAN CiAgIlxcKlxcKENvbXBsZXRpb25zXFx8RW1iYXJrIENvbGxlY3QgXFwoTGl2ZVxcfENvbXBsZXRp b25zXFwpXFwpIg0KICAiUmVnZXhwIHRvIG1hdGNoIHdpbmRvdyBuYW1lcyB3aXRoIGNvbXBsZXRp b24gY2FuZGlkYXRlcy4NClVzZWQgYnkgYHByb3QtbWluaWJ1ZmZlci0tZ2V0LWNvbXBsZXRpb24t d2luZG93Jy4iDQogIDpncm91cCAncHJvdC1taW5pYnVmZmVyDQogIDp0eXBlICdzdHJpbmcpDQoN CihkZWZjdXN0b20gcHJvdC1taW5pYnVmZmVyLXJlbW92ZS1zaGFkb3dlZC1maWxlLW5hbWVzIG5p bA0KICAiRGVsZXRlIHNoYWRvd2VkIHBhcnRzIG9mIGZpbGUgbmFtZXMuDQoNCkZvciBleGFtcGxl LCBpZiB0aGUgdXNlciB0eXBlcyB+LyBhZnRlciBhIGxvbmcgcGF0aCBuYW1lLA0KZXZlcnl0aGlu ZyBwcmVjZWRpbmcgdGhlIH4vIGlzIHJlbW92ZWQgc28gdGhlIGludGVyYWN0aXZlDQpzZWxlY3Rp b24gcHJvY2VzcyBzdGFydHMgYWdhaW4gZnJvbSB0aGUgdXNlcidzICRIT01FLg0KDQpPbmx5IHdv cmtzIHdoZW4gdmFyaWFibGUgYGZpbGUtbmFtZS1zaGFkb3ctbW9kZScgaXMgbm9uLW5pbC4iDQog IDp0eXBlICdib29sZWFuDQogIDpncm91cCAncHJvdC1taW5pYnVmZmVyKQ0KDQooZGVmY3VzdG9t IHByb3QtbWluaWJ1ZmZlci1taW5pbXVtLWlucHV0IDMNCiAgIkxpdmUgdXBkYXRlIGNvbXBsZXRp b25zIHdoZW4gaW5wdXQgaXMgPj0gTi4NCg0KU2V0dGluZyB0aGlzIHRvIGEgdmFsdWUgZ3JlYXRl ciB0aGFuIDEgY2FuIGhlbHAgcmVkdWNlIHRoZSB0b3RhbA0KbnVtYmVyIG9mIGNhbmRpZGF0ZXMg dGhhdCBhcmUgYmVpbmcgY29tcHV0ZWQuIg0KICA6dHlwZSAnaW50ZWdlcg0KICA6Z3JvdXAgJ3By b3QtbWluaWJ1ZmZlcikNCg0KKGRlZmN1c3RvbSBwcm90LW1pbmlidWZmZXItbGl2ZS11cGRhdGUt ZGVsYXkgMC4zDQogICJEZWxheSBpbiBzZWNvbmRzIGJlZm9yZSB1cGRhdGluZyB0aGUgQ29tcGxl dGlvbnMnIGJ1ZmZlci4NCg0KU2V0IHRoaXMgdG8gMCB0byBkaXNhYmxlIHRoZSBkZWxheS4iDQog IDp0eXBlICdudW1iZXINCiAgOmdyb3VwICdwcm90LW1pbmlidWZmZXIpDQoNCihkZWZjdXN0b20g cHJvdC1taW5pYnVmZmVyLWNvbXBsZXRpb24tYmxvY2tsaXN0IG5pbA0KICAiQ29tbWFuZHMgdGhh dCBkbyBub3QgZG8gbGl2ZSB1cGRhdGluZyBvZiBjb21wbGV0aW9ucy4NCg0KQSBsZXNzIGRyYXN0 aWMgbWVhc3VyZSBpcyB0byBzZXQgYHByb3QtbWluaWJ1ZmZlci1taW5pbXVtLWlucHV0Jw0KdG8g YW4gYXBwcm9wcmlhdGUgdmFsdWUuDQoNClRoZSBDb21wbGV0aW9ucycgYnVmZmVyIGNhbiBzdGls bCBiZSBhY2Nlc3NlZCB3aXRoIGNvbW1hbmRzIHRoYXQNCnB1dCBpdCBpbiBhIHdpbmRvdyAoZS5n LiBgcHJvdC1taW5pYnVmZmVyLXRvZ2dsZS1jb21wbGV0aW9ucycsDQpgcHJvdC1taW5pYnVmZmVy LXN3aXRjaC10by1jb21wbGV0aW9ucy10b3AnKS4iDQogIDp0eXBlICcocmVwZWF0IHN5bWJvbCkN CiAgOmdyb3VwICdwcm90LW1pbmlidWZmZXIpDQoNCihkZWZjdXN0b20gcHJvdC1taW5pYnVmZmVy LWNvbXBsZXRpb24tcGFzc2xpc3QgbmlsDQogICJDb21tYW5kcyB0aGF0IGRvIGxpdmUgdXBkYXRp bmcgb2YgY29tcGxldGlvbnMgZnJvbSB0aGUgc3RhcnQuDQoNClRoaXMgbWVhbnMgdGhhdCB0aGV5 IGlnbm9yZSBgcHJvdC1taW5pYnVmZmVyLW1pbmltdW0taW5wdXQnIGFuZA0KdGhlIGluaGVyZW50 IGNvbnN0cmFpbnQgb2YgdXBkYXRpbmcgdGhlIENvbXBsZXRpb25zJyBidWZmZXIgb25seQ0KdXBv biB1c2VyIGlucHV0LiAgRnVydGhlcm1vcmUsIHRoZXkgYWxzbyBieXBhc3MgYW55IHBvc3NpYmxl DQpkZWxheSBpbnRyb2R1Y2VkIGJ5IGBwcm90LW1pbmlidWZmZXItbGl2ZS11cGRhdGUtZGVsYXkn LiINCiAgOnR5cGUgJyhyZXBlYXQgc3ltYm9sKQ0KICA6Z3JvdXAgJ3Byb3QtbWluaWJ1ZmZlcikN Cg0KDQoNCjs7IFRoYW5rcyB0byBPbWFyIEFudG9sw61uIENhbWFyZW5hIGZvciBwcm92aWRpbmcg dGhlIG1lc3NhZ2VsZXNzIGFuZA0KOzsgc3RlYWx0aGlseS4gIFNvdXJjZTogPGh0dHBzOi8vZ2l0 aHViLmNvbS9vYW50b2xpbi9lbWFjcy1jb25maWc+Lg0KKGRlZnVuIHByb3QtbWluaWJ1ZmZlci0t bWVzc2FnZWxlc3MgKGZuICZyZXN0IGFyZ3MpDQogICJTZXQgYG1pbmlidWZmZXItbWVzc2FnZS10 aW1lb3V0JyB0byAwLg0KTWVhbnQgYXMgYWR2aWNlIGFyb3VuZCBtaW5pYnVmZmVyIGNvbXBsZXRp b24gRk4gd2l0aCBBUkdTLiINCiAgKGxldCAoKG1pbmlidWZmZXItbWVzc2FnZS10aW1lb3V0IDAp KQ0KICAgIChhcHBseSBmbiBhcmdzKSkpDQoNCihkb2xpc3QgKGZuICcoZXhpdC1taW5pYnVmZmVy DQogICAgICAgICAgICAgIGNob29zZS1jb21wbGV0aW9uDQogICAgICAgICAgICAgIG1pbmlidWZm ZXItZm9yY2UtY29tcGxldGUNCiAgICAgICAgICAgICAgbWluaWJ1ZmZlci1jb21wbGV0ZS1hbmQt ZXhpdA0KICAgICAgICAgICAgICBtaW5pYnVmZmVyLWZvcmNlLWNvbXBsZXRlLWFuZC1leGl0KSkN CiAgKGFkdmljZS1hZGQgZm4gOmFyb3VuZCAjJ3Byb3QtbWluaWJ1ZmZlci0tbWVzc2FnZWxlc3Mp KQ0KDQo7OyBDb3BpZWQgZnJvbSBEYW5pZWwgTWVuZGxlcidzIGB2ZXJ0aWNvJyBsaWJyYXJ5Og0K OzsgPGh0dHBzOi8vZ2l0aHViLmNvbS9taW5hZC92ZXJ0aWNvPi4NCihkZWZ1biBwcm90LW1pbmli dWZmZXItLWNybS1pbmRpY2F0b3IgKGFyZ3MpDQogICJBZGQgcHJvbXB0IGluZGljYXRvciB0byBg Y29tcGxldGluZy1yZWFkLW11bHRpcGxlJyBmaWx0ZXIgQVJHUy4iDQogIChjb25zIChjb25jYXQg IltDUk1dICIgKGNhciBhcmdzKSkgKGNkciBhcmdzKSkpDQoNCihhZHZpY2UtYWRkICMnY29tcGxl dGluZy1yZWFkLW11bHRpcGxlIDpmaWx0ZXItYXJncyAjJ3Byb3QtbWluaWJ1ZmZlci0tY3JtLWlu ZGljYXRvcikNCg0KOzsgQWRhcHRlZCBmcm9tIE9tYXIgQW50b2zDrW4gQ2FtYXJlbmEncyBsaXZl LWNvbXBsZXRpb25zIGxpYnJhcnk6DQo7OyA8aHR0cHM6Ly9naXRodWIuY29tL29hbnRvbGluL2xp dmUtY29tcGxldGlvbnM+Lg0KKGRlZnVuIHByb3QtbWluaWJ1ZmZlci0taG9ub3ItaW5oaWJpdC1t ZXNzYWdlIChmbiAmcmVzdCBhcmdzKQ0KICAiU2tpcCBhcHBseWluZyBGTiB0byBBUkdTIGlmIGBp bmhpYml0LW1lc3NhZ2UnIGlzIHQuDQpNZWFudCBhcyBgOmFyb3VuZCcgYWR2aWNlIGZvciBgbWlu aWJ1ZmZlci1tZXNzYWdlJywgd2hpY2ggZG9lcw0Kbm90IGhvbm9yIG1pbmlidWZmZXIgbWVzc2Fn ZS4iDQogICh1bmxlc3MgaW5oaWJpdC1tZXNzYWdlDQogICAgKGFwcGx5IGZuIGFyZ3MpKSkNCg0K KGFkdmljZS1hZGQgIydtaW5pYnVmZmVyLW1lc3NhZ2UgOmFyb3VuZCAjJ3Byb3QtbWluaWJ1ZmZl ci0taG9ub3ItaW5oaWJpdC1tZXNzYWdlKQ0KDQo7OyBOb3RlIHRoYXQgdGhpcyBzb2x2ZXMgYnVn IzQ1Njg2IGFuZCBpcyBvbmx5IGNvbnNpZGVyZWQgYSB0ZW1wb3JhcnkNCjs7IG1lYXN1cmU6IDxo dHRwczovL2RlYmJ1Z3MuZ251Lm9yZy9jZ2kvYnVncmVwb3J0LmNnaT9idWc9NDU2ODY+DQooZGVm dW4gcHJvdC1taW5pYnVmZmVyLS1zdGVhbHRoaWx5IChmbiAmcmVzdCBhcmdzKQ0KICAiUHJldmVu dCBtaW5pYnVmZmVyIGRlZmF1bHQgZnJvbSBjb3VudGluZyBhcyBhIG1vZGlmaWNhdGlvbi4NCk1l YW50IGFzIGFkdmljZSBmb3IgRk4gYG1pbmlidWYtZWxkZWYtc2V0dXAtbWluaWJ1ZmZlcicgd2l0 aCByZXN0DQpBUkdTLiINCiAgKGxldCAoKGluaGliaXQtbW9kaWZpY2F0aW9uLWhvb2tzIHQpKQ0K ICAgIChhcHBseSBmbiBhcmdzKSkpDQoNCihhZHZpY2UtYWRkICdtaW5pYnVmLWVsZGVmLXNldHVw LW1pbmlidWZmZXIgOmFyb3VuZCAjJ3Byb3QtbWluaWJ1ZmZlci0tc3RlYWx0aGlseSkNCg0KDQoN Cjs7IENvcGllZCBmcm9tIGljb21wbGV0ZS5lbA0KKGRlZnVuIHByb3QtbWluaWJ1ZmZlci0tZmll bGQtYmVnICgpDQogICJEZXRlcm1pbmUgYmVnaW5uaW5nIG9mIGNvbXBsZXRpb24uIg0KICAoaWYg KHdpbmRvdy1taW5pYnVmZmVyLXApDQogICAgICAobWluaWJ1ZmZlci1wcm9tcHQtZW5kKQ0KICAg IChudGggMCBjb21wbGV0aW9uLWluLXJlZ2lvbi0tZGF0YSkpKQ0KDQo7OyBDb3BpZWQgZnJvbSBp Y29tcGxldGUuZWwNCihkZWZ1biBwcm90LW1pbmlidWZmZXItLWZpZWxkLWVuZCAoKQ0KICAiRGV0 ZXJtaW5lIGVuZCBvZiBjb21wbGV0aW9uLiINCiAgKGlmICh3aW5kb3ctbWluaWJ1ZmZlci1wKQ0K ICAgICAgKHBvaW50LW1heCkNCiAgICAobnRoIDEgY29tcGxldGlvbi1pbi1yZWdpb24tLWRhdGEp KSkNCg0KOzsgQ29waWVkIGZyb20gaWNvbXBsZXRlLmVsDQooZGVmdW4gcHJvdC1taW5pYnVmZmVy LS1jb21wbGV0aW9uLWNhdGVnb3J5ICgpDQogICJSZXR1cm4gY29tcGxldGlvbiBjYXRlZ29yeS4i DQogIChsZXQqICgoYmVnIChwcm90LW1pbmlidWZmZXItLWZpZWxkLWJlZykpDQogICAgICAgICAo bWQgKGNvbXBsZXRpb24tLWZpZWxkLW1ldGFkYXRhIGJlZykpKQ0KICAgIChhbGlzdC1nZXQgJ2Nh dGVnb3J5IChjZHIgbWQpKSkpDQoNCjs7IEFkYXB0ZWQgZnJvbSBpY29tcGxldGUuZWwNCihkZWZ1 biBwcm90LW1pbmlidWZmZXItLXNoYWRvdy1maWxlbmFtZXMgKCZyZXN0IF8pDQogICJIaWRlIHNo YWRvd2VkIGZpbGUgbmFtZXMuIg0KICAobGV0ICgoc2F2ZWQtcG9pbnQgKHBvaW50KSkpDQogICAg KHdoZW4gKGFuZA0KICAgICAgICAgICBwcm90LW1pbmlidWZmZXItcmVtb3ZlLXNoYWRvd2VkLWZp bGUtbmFtZXMNCiAgICAgICAgICAgKGVxIChwcm90LW1pbmlidWZmZXItLWNvbXBsZXRpb24tY2F0 ZWdvcnkpICdmaWxlKQ0KICAgICAgICAgICByZm4tZXNoYWRvdy1vdmVybGF5IChvdmVybGF5LWJ1 ZmZlciByZm4tZXNoYWRvdy1vdmVybGF5KQ0KICAgICAgICAgICAoZXEgdGhpcy1jb21tYW5kICdz ZWxmLWluc2VydC1jb21tYW5kKQ0KICAgICAgICAgICAoPSBzYXZlZC1wb2ludCAocHJvdC1taW5p YnVmZmVyLS1maWVsZC1lbmQpKQ0KICAgICAgICAgICAob3IgKD49ICgtIChwb2ludCkgKG92ZXJs YXktZW5kIHJmbi1lc2hhZG93LW92ZXJsYXkpKSAyKQ0KICAgICAgICAgICAgICAgKGVxID8vIChj aGFyLWJlZm9yZSAoLSAocG9pbnQpIDIpKSkpKQ0KICAgICAgKGRlbGV0ZS1yZWdpb24gKG92ZXJs YXktc3RhcnQgcmZuLWVzaGFkb3ctb3ZlcmxheSkNCiAgICAgICAgICAgICAgICAgICAgIChvdmVy bGF5LWVuZCByZm4tZXNoYWRvdy1vdmVybGF5KSkpKSkNCg0KKGRlZnVuIHByb3QtbWluaWJ1ZmZl ci0tc2V0dXAtc2hhZG93LWZpbGVzICgpDQogICJTZXQgdXAgc2hhZG93ZWQgZmlsZSBuYW1lIGRl bGV0aW9uLg0KVG8gYmUgYXNzaWduZWQgdG8gYG1pbmlidWZmZXItc2V0dXAtaG9vaycuIg0KICAo YWRkLWhvb2sgJ2FmdGVyLWNoYW5nZS1mdW5jdGlvbnMgIydwcm90LW1pbmlidWZmZXItLXNoYWRv dy1maWxlbmFtZXMgbmlsIHQpKQ0KDQooYWRkLWhvb2sgJ21pbmlidWZmZXItc2V0dXAtaG9vayAj J3Byb3QtbWluaWJ1ZmZlci0tc2V0dXAtc2hhZG93LWZpbGVzKQ0KDQo7OzsjIyNhdXRvbG9hZA0K KGRlZnVuIHByb3QtbWluaWJ1ZmZlci1mb2N1cy1taW5pYnVmZmVyICgpDQogICJGb2N1cyB0aGUg YWN0aXZlIG1pbmlidWZmZXIuIg0KICAoaW50ZXJhY3RpdmUpDQogIChsZXQgKChtaW5pIChhY3Rp dmUtbWluaWJ1ZmZlci13aW5kb3cpKSkNCiAgICAod2hlbiBtaW5pDQogICAgICAoc2VsZWN0LXdp bmRvdyBtaW5pKSkpKQ0KDQooZGVmdW4gcHJvdC1taW5pYnVmZmVyLS1nZXQtY29tcGxldGlvbi13 aW5kb3cgKCkNCiAgIkZpbmQgYSBsaXZlIHdpbmRvdyBzaG93aW5nIGNvbXBsZXRpb24gY2FuZGlk YXRlcy4iDQogIChnZXQtd2luZG93LXdpdGgtcHJlZGljYXRlDQogICAobGFtYmRhICh3aW5kb3cp DQogICAgIChzdHJpbmctbWF0Y2gtcA0KICAgICAgcHJvdC1taW5pYnVmZmVyLWNvbXBsZXRpb24t d2luZG93cy1yZWdleHANCiAgICAgIChmb3JtYXQgIiVzIiB3aW5kb3cpKSkpKQ0KDQooZGVmdW4g cHJvdC1taW5pYnVmZmVyLWZvY3VzLW1pbmktb3ItY29tcGxldGlvbnMgKCkNCiAgIkZvY3VzIHRo ZSBhY3RpdmUgbWluaWJ1ZmZlciBvciB0aGUgY29tcGxldGlvbnMnIHdpbmRvdy4NCg0KSWYgYm90 aCB0aGUgbWluaWJ1ZmZlciBhbmQgdGhlIENvbXBsZXRpb25zIGFyZSBwcmVzZW50LCB0aGlzDQpj b21tYW5kIHdpbGwgZmlyc3QgbW92ZSBwZXIgaW52b2NhdGlvbiB0byB0aGUgZm9ybWVyLCB0aGVu IHRoZQ0KbGF0dGVyLCBhbmQgdGhlbiBjb250aW51ZSB0byBzd2l0Y2ggYmV0d2VlbiB0aGUgdHdv Lg0KDQpUaGUgY29udGludW91cyBzd2l0Y2ggaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgcnVu bmluZw0KYHByb3QtbWluaWJ1ZmZlci1mb2N1cy1taW5pYnVmZmVyJyBhbmQgYHN3aXRjaC10by1j b21wbGV0aW9ucycgaW4NCnN1Y2Nlc3Npb24uDQoNCldoYXQgY29uc3RpdHV0ZXMgYSBjb21wbGV0 aW9ucycgd2luZG93IGlzIHVsdGltYXRlbHkgZGV0ZXJtaW5lZA0KYnkgYHByb3QtbWluaWJ1ZmZl ci1jb21wbGV0aW9uLXdpbmRvd3MtcmVnZXhwJy4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKGxldCog KChtaW5pIChhY3RpdmUtbWluaWJ1ZmZlci13aW5kb3cpKQ0KICAgICAgICAgKGNvbXBsZXRpb25z IChwcm90LW1pbmlidWZmZXItLWdldC1jb21wbGV0aW9uLXdpbmRvdykpKQ0KICAgIChjb25kDQog ICAgICgoYW5kIG1pbmkgKG5vdCAobWluaWJ1ZmZlcnApKSkNCiAgICAgIChzZWxlY3Qtd2luZG93 IG1pbmkgbmlsKSkNCiAgICAgKChhbmQgY29tcGxldGlvbnMgKG5vdCAoZXEgKHNlbGVjdGVkLXdp bmRvdykgY29tcGxldGlvbnMpKSkNCiAgICAgIChzZWxlY3Qtd2luZG93IGNvbXBsZXRpb25zIG5p bCkpKSkpDQoNCg0KKGRlZmZhY2UgcHJvdC1taW5pYnVmZmVyLWhsLWxpbmUNCiAgJygoZGVmYXVs dCA6ZXh0ZW5kIHQpDQogICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dy b3VuZCBsaWdodCkpDQogICAgIDpiYWNrZ3JvdW5kICIjYjBkOGZmIiA6Zm9yZWdyb3VuZCAiIzAw MDAwMCIpDQogICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBk YXJrKSkNCiAgICAgOmJhY2tncm91bmQgIiMxMDMyNjUiIDpmb3JlZ3JvdW5kICIjZmZmZmZmIikN CiAgICAodCA6aW5oZXJpdCAoZm9udC1sb2NrLXN0cmluZy1mYWNlIGVsZmVlZC1zZWFyY2gtdGl0 bGUtZmFjZSkpKQ0KICAiRmFjZSBmb3IgY3VycmVudCBsaW5lIGluIHRoZSBjb21wbGV0aW9ucycg YnVmZmVyLiINCiAgOmdyb3VwICdwcm90LW1pbmlidWZmZXIpDQoNCihkZWZmYWNlIHByb3QtbWlu aWJ1ZmZlci1saW5lLW51bWJlcg0KICAnKChkZWZhdWx0IDppbmhlcml0IGRlZmF1bHQpDQogICAg KCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkpDQogICAg IDpiYWNrZ3JvdW5kICIjZjJlZmYzIiA6Zm9yZWdyb3VuZCAiIzI1MjUyNSIpDQogICAgKCgoY2xh c3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBkYXJrKSkNCiAgICAgOmJhY2tn cm91bmQgIiMxNTE4MjMiIDpmb3JlZ3JvdW5kICIjZGRkZGRkIikNCiAgICAodCA6aW52ZXJzZS12 aWRlbyB0KSkNCiAgIkZhY2UgZm9yIGxpbmUgbnVtYmVycyBpbiB0aGUgY29tcGxldGlvbnMnIGJ1 ZmZlci4iDQogIDpncm91cCAncHJvdC1taW5pYnVmZmVyKQ0KDQooZGVmZmFjZSBwcm90LW1pbmli dWZmZXItbGluZS1udW1iZXItY3VycmVudC1saW5lDQogICcoKGRlZmF1bHQgOmluaGVyaXQgZGVm YXVsdCkNCiAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGxp Z2h0KSkNCiAgICAgOmJhY2tncm91bmQgIiM4YWM3ZmYiIDpmb3JlZ3JvdW5kICIjMDAwMDAwIikN CiAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgODgpIChiYWNrZ3JvdW5kIGRhcmspKQ0K ICAgICA6YmFja2dyb3VuZCAiIzE0MmE3OSIgOmZvcmVncm91bmQgIiNmZmZmZmYiKQ0KICAgICh0 IDppbnZlcnNlLXZpZGVvIHQpKQ0KICAiRmFjZSBmb3IgY3VycmVudCBsaW5lIG51bWJlciBpbiB0 aGUgY29tcGxldGlvbnMnIGJ1ZmZlci4iDQogIDpncm91cCAncHJvdC1taW5pYnVmZmVyKQ0KDQoo YXV0b2xvYWQgJ2Rpc3BsYXktbGluZS1udW1iZXJzLW1vZGUgImRpc3BsYXktbGluZS1udW1iZXJz IikNCihhdXRvbG9hZCAnZmFjZS1yZW1hcC1yZW1vdmUtcmVsYXRpdmUgImZhY2UtcmVtYXAiKQ0K DQo7OzsjIyNhdXRvbG9hZA0KKGRlZnVuIHByb3QtbWluaWJ1ZmZlci1kaXNwbGF5LWxpbmUtbnVt YmVycyAoKQ0KICAiU2V0IHVwIGxpbmUgbnVtYmVycyBmb3IgdGhlIGNvbXBsZXRpb25zJyBidWZm ZXIuDQpBZGQgdGhpcyB0byBgY29tcGxldGlvbi1saXN0LW1vZGUtaG9vaycuIg0KICAod2hlbiAo ZGVyaXZlZC1tb2RlLXAgJ2NvbXBsZXRpb24tbGlzdC1tb2RlKQ0KICAgIChmYWNlLXJlbWFwLWFk ZC1yZWxhdGl2ZSAnbGluZS1udW1iZXIgJ3Byb3QtbWluaWJ1ZmZlci1saW5lLW51bWJlcikNCiAg ICAoZmFjZS1yZW1hcC1hZGQtcmVsYXRpdmUgJ2xpbmUtbnVtYmVyLWN1cnJlbnQtbGluZQ0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvdC1taW5pYnVmZmVyLWxpbmUtbnVtYmVyLWN1 cnJlbnQtbGluZSkNCiAgICAoZGlzcGxheS1saW5lLW51bWJlcnMtbW9kZSAxKSkpDQoNCjs7OyMj I2F1dG9sb2FkDQooZGVmdW4gcHJvdC1taW5pYnVmZmVyLWhsLWxpbmUgKCkNCiAgIlNldCB1cCBs aW5lIGhpZ2hsaWdodGluZyBmb3IgdGhlIGNvbXBsZXRpb25zJyBidWZmZXIuDQpBZGQgdGhpcyB0 byBgY29tcGxldGlvbi1saXN0LW1vZGUtaG9vaycuIg0KICAod2hlbiAoZGVyaXZlZC1tb2RlLXAg J2NvbXBsZXRpb24tbGlzdC1tb2RlKQ0KICAgIChmYWNlLXJlbWFwLWFkZC1yZWxhdGl2ZSAnaGwt bGluZSAncHJvdC1taW5pYnVmZmVyLWhsLWxpbmUpDQogICAgKGhsLWxpbmUtbW9kZSAxKSkpDQoN Cg0KOzsgVGhhbmtzIHRvIE9tYXIgQW50b2zDrW4gQ2FtYXJlbmEgZm9yIHJlY29tbWVuZGluZyB0 aGUgdXNlIG9mDQo7OyBgY3Vyc29yLXNlbnNvci1mdW5jdGlvbnMnIGFuZCB0aGUgY29uY29taXRh bnQgaG9vayB3aXRoDQo7OyBgY3Vyc29yLWNlbnNvci1tb2RlJyBpbnN0ZWFkIG9mIHRoZSBkaXJ0 eSBoYWNrcyBJIGhhZCBiZWZvcmUgdG8NCjs7IHByZXZlbnQgdGhlIGN1cnNvciBmcm9tIG1vdmlu ZyB0byB0aGF0IHBvc2l0aW9uIHdoZXJlIG5vIGNvbXBsZXRpb24NCjs7IGNhbmRpZGF0ZXMgY291 bGQgYmUgZm91bmQgYXQgcG9pbnQgKGUuZy4gaXQgd291bGQgYnJlYWsgYGVtYmFyay1hY3QnDQo7 OyBhcyBpdCBjb3VsZCBub3QgcmVhZCB0aGUgdG9wbW9zdCBjYW5kaWRhdGUgd2hlbiBwb2ludCB3 YXMgYXQgdGhlDQo7OyBiZWdpbm5pbmcgb2YgdGhlIGxpbmUsIHVubGVzcyB0aGUgcG9pbnQgd2Fz IG1vdmVkIGZvcndhcmQpLg0KKGRlZnVuIHByb3QtbWluaWJ1ZmZlci0tY2xlYW4tY29tcGxldGlv bnMgKCkNCiAgIktlZXAgb25seSBjb21wbGV0aW9uIGNhbmRpZGF0ZXMgaW4gdGhlIENvbXBsZXRp b25zLiINCiAgKHdpdGgtY3VycmVudC1idWZmZXIgc3RhbmRhcmQtb3V0cHV0DQogICAgKGxldCAo KGluaGliaXQtcmVhZC1vbmx5IHQpKQ0KICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkNCiAg ICAgIChkZWxldGUtcmVnaW9uIChwb2ludC1hdC1ib2wpICgxKyAocG9pbnQtYXQtZW9sKSkpDQog ICAgICAoaW5zZXJ0IChwcm9wZXJ0aXplICIgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAn Y3Vyc29yLXNlbnNvci1mdW5jdGlvbnMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QN CiAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKF93aW4gcHJldiBkaXIpDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICh3aGVuIChlcSBkaXIgJ2VudGVyZWQpDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGdvdG8tY2hhciBwcmV2KSkpKSkpDQogICAgICAocHV0 LXRleHQtcHJvcGVydHkgKHBvaW50LW1pbikgKHBvaW50KSAnaW52aXNpYmxlIHQpKSkpDQoNCihh ZGQtaG9vayAnY29tcGxldGlvbi1saXN0LW1vZGUtaG9vayAjJ2N1cnNvci1zZW5zb3ItbW9kZSkN CihhZGQtaG9vayAnY29tcGxldGlvbi1zZXR1cC1ob29rICMncHJvdC1taW5pYnVmZmVyLS1jbGVh bi1jb21wbGV0aW9ucykNCg0KKGRlZnVuIHByb3QtbWluaWJ1ZmZlci0tZml0LWNvbXBsZXRpb25z LXdpbmRvdyAoKQ0KICAiRml0IENvbXBsZXRpb25zJyBidWZmZXIgdG8gaXRzIHdpbmRvdy4iDQog IChmaXQtd2luZG93LXRvLWJ1ZmZlciAoZ2V0LWJ1ZmZlci13aW5kb3cgIipDb21wbGV0aW9ucyoi KQ0KICAgICAgICAgICAgICAgICAgICAgICAgKGZsb29yIChmcmFtZS1oZWlnaHQpIDIpIDEpKQ0K DQooZGVmdW4gcHJvdC1taW5pYnVmZmVyLS1pbnB1dC1zdHJpbmcgKCkNCiAgIlJldHVybiB0aGUg Y29udGVudHMgb2YgdGhlIG1pbmlidWZmZXIgYXMgYSBzdHJpbmcuIg0KICAoYnVmZmVyLXN1YnN0 cmluZy1uby1wcm9wZXJ0aWVzIChtaW5pYnVmZmVyLXByb21wdC1lbmQpIChwb2ludC1tYXgpKSkN Cg0KKGRlZnVuIHByb3QtbWluaWJ1ZmZlci0tbWluaW11bS1pbnB1dCAoKQ0KICAiVGVzdCBmb3Ig bWluaW11bSByZXF1aXNpdGUgaW5wdXQgZm9yIGxpdmUgY29tcGxldGlvbnMuIg0KICAoPj0gKGxl bmd0aCAocHJvdC1taW5pYnVmZmVyLS1pbnB1dC1zdHJpbmcpKSBwcm90LW1pbmlidWZmZXItbWlu aW11bS1pbnB1dCkpDQoNCjs7IEFkYXB0ZWQgZnJvbSBPbWFyIEFudG9sw61uIENhbWFyZW5hJ3Mg bGl2ZS1jb21wbGV0aW9ucyBsaWJyYXJ5Og0KOzsgPGh0dHBzOi8vZ2l0aHViLmNvbS9vYW50b2xp bi9saXZlLWNvbXBsZXRpb25zPi4NCihkZWZ1biBwcm90LW1pbmlidWZmZXItLWxpdmUtY29tcGxl dGlvbnMgKCZyZXN0IF8pDQogICJVcGRhdGUgdGhlICpDb21wbGV0aW9ucyogYnVmZmVyLg0KTWVh bnQgdG8gYmUgYWRkZWQgdG8gYGFmdGVyLWNoYW5nZS1mdW5jdGlvbnMnLiINCiAgKHdoZW4gKG1p bmlidWZmZXJwKSA7IHNraXAgaWYgd2UndmUgZXhpdGVkIGFscmVhZHkNCiAgICAobGV0ICgod2hp bGUtbm8taW5wdXQtaWdub3JlLWV2ZW50cyAnKHNlbGVjdGlvbi1yZXF1ZXN0KSkpDQogICAgICAo d2hpbGUtbm8taW5wdXQNCiAgICAgICAgKGlmIChwcm90LW1pbmlidWZmZXItLW1pbmltdW0taW5w dXQpDQogICAgICAgICAgICAoY29uZGl0aW9uLWNhc2UgbmlsDQogICAgICAgICAgICAgICAgKHNh dmUtbWF0Y2gtZGF0YQ0KICAgICAgICAgICAgICAgICAgKHNhdmUtZXhjdXJzaW9uDQogICAgICAg ICAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1heCkpDQogICAgICAgICAgICAgICAgICAg IChsZXQgKChpbmhpYml0LW1lc3NhZ2UgdCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgOzsg ZG9uJ3QgcmluZyB0aGUgYmVsbCBpbiBgbWluaWJ1ZmZlci1jb21wbGV0aW9uLWhlbHAnDQogICAg ICAgICAgICAgICAgICAgICAgICAgIDs7IHdoZW4gPD0gMSBjb21wbGV0aW9uIGV4aXN0cy4NCiAg ICAgICAgICAgICAgICAgICAgICAgICAgKHJpbmctYmVsbC1mdW5jdGlvbiAjJ2lnbm9yZSkpDQog ICAgICAgICAgICAgICAgICAgICAgKG1pbmlidWZmZXItY29tcGxldGlvbi1oZWxwKQ0KICAgICAg ICAgICAgICAgICAgICAgIChwcm90LW1pbmlidWZmZXItLWZpdC1jb21wbGV0aW9ucy13aW5kb3cp KSkpDQogICAgICAgICAgICAgIChxdWl0IChhYm9ydC1yZWN1cnNpdmUtZWRpdCkpKQ0KICAgICAg ICAgIChtaW5pYnVmZmVyLWhpZGUtY29tcGxldGlvbnMpKSkpKSkNCg0KKGRlZnVuIHByb3QtbWlu aWJ1ZmZlci0tbGl2ZS1jb21wbGV0aW9ucy10aW1lciAoJnJlc3QgXykNCiAgIlVwZGF0ZSBDb21w bGV0aW9ucyB3aXRoIGBwcm90LW1pbmlidWZmZXItbGl2ZS11cGRhdGUtZGVsYXknLiINCiAgKGxl dCAoKGRlbGF5IHByb3QtbWluaWJ1ZmZlci1saXZlLXVwZGF0ZS1kZWxheSkpDQogICAgKHdoZW4g KD49IGRlbGF5IDApDQogICAgICAocnVuLXdpdGgtaWRsZS10aW1lciBkZWxheSBuaWwgIydwcm90 LW1pbmlidWZmZXItLWxpdmUtY29tcGxldGlvbnMpKSkpDQoNCihkZWZ1biBwcm90LW1pbmlidWZm ZXItLXNldHVwLWNvbXBsZXRpb25zICgpDQogICJTZXQgdXAgdGhlIGNvbXBsZXRpb25zIGJ1ZmZl ci4iDQogIChjb25kDQogICAoKG1lbWJlciB0aGlzLWNvbW1hbmQgcHJvdC1taW5pYnVmZmVyLWNv bXBsZXRpb24tcGFzc2xpc3QpDQogICAgKG1pbmlidWZmZXItY29tcGxldGlvbi1oZWxwKQ0KICAg IChhZGQtaG9vayAnYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucyAjJ3Byb3QtbWluaWJ1ZmZlci0tbGl2 ZS1jb21wbGV0aW9ucyBuaWwgdCkpDQogICAoKHVubGVzcyAobWVtYmVyIHRoaXMtY29tbWFuZCBw cm90LW1pbmlidWZmZXItY29tcGxldGlvbi1ibG9ja2xpc3QpDQogICAgKGFkZC1ob29rICdhZnRl ci1jaGFuZ2UtZnVuY3Rpb25zICMncHJvdC1taW5pYnVmZmVyLS1saXZlLWNvbXBsZXRpb25zLXRp bWVyIG5pbCB0KSkpKSkNCg0KKGFkZC1ob29rICdtaW5pYnVmZmVyLXNldHVwLWhvb2sgIydwcm90 LW1pbmlidWZmZXItLXNldHVwLWNvbXBsZXRpb25zKQ0KDQo7OzsjIyNhdXRvbG9hZA0KKGRlZnVu IHByb3QtbWluaWJ1ZmZlci10b2dnbGUtY29tcGxldGlvbnMgKCkNCiAgIlRvZ2dsZSB0aGUgcHJl c2VudGF0aW9uIG9mIHRoZSBjb21wbGV0aW9ucycgYnVmZmVyLiINCiAgKGludGVyYWN0aXZlKQ0K ICAoaWYgKGdldC1idWZmZXItd2luZG93ICIqQ29tcGxldGlvbnMqIiAwKQ0KICAgICAgKG1pbmli dWZmZXItaGlkZS1jb21wbGV0aW9ucykNCiAgICAobWluaWJ1ZmZlci1jb21wbGV0aW9uLWhlbHAp KSkNCg0KOzs7IyMjYXV0b2xvYWQNCihkZWZ1biBwcm90LW1pbmlidWZmZXIta2V5Ym9hcmQtcXVp dC1kd2ltICgpDQogICJDb250cm9sIHRoZSBleGl0IGJlaGF2aW91ciBmb3IgY29tcGxldGlvbnMn IGJ1ZmZlcnMuDQoNCklmIGluIGEgY29tcGxldGlvbnMnIGJ1ZmZlciBhbmQgdW5sZXNzIHRoZSBy ZWdpb24gaXMgYWN0aXZlLCBydW4NCmBhYm9ydC1yZWN1cnNpdmUtZWRpdCcuICBPdGhlcndpc2Ug cnVuIGBrZXlib2FyZC1xdWl0Jy4NCg0KSWYgdGhlIHJlZ2lvbiBpcyBhY3RpdmUsIGRlYWN0aXZh dGUgaXQuICBBIHNlY29uZCBpbnZvY2F0aW9uIG9mDQp0aGlzIGNvbW1hbmQgaXMgdGhlbiByZXF1 aXJlZCB0byBhYm9ydCB0aGUgc2Vzc2lvbi4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKHdoZW4gKGRl cml2ZWQtbW9kZS1wICdjb21wbGV0aW9uLWxpc3QtbW9kZSkNCiAgICAoaWYgKHVzZS1yZWdpb24t cCkNCiAgICAgICAgKGtleWJvYXJkLXF1aXQpDQogICAgICAoYWJvcnQtcmVjdXJzaXZlLWVkaXQp KSkpDQoNCihkZWZ1biBwcm90LW1pbmlidWZmZXItLXN3aXRjaC10by1jb21wbGV0aW9ucyAoKQ0K ICAiU3Vicm91dGluZSBmb3Igc3dpdGNoaW5nIHRvIHRoZSBjb21wbGV0aW9ucycgYnVmZmVyLiIN CiAgKHVubGVzcyAoZ2V0LWJ1ZmZlci13aW5kb3cgIipDb21wbGV0aW9ucyoiIDApDQogICAgKG1p bmlidWZmZXItY29tcGxldGlvbi1oZWxwKSkNCiAgKHN3aXRjaC10by1jb21wbGV0aW9ucykNCiAg KHByb3QtbWluaWJ1ZmZlci0tZml0LWNvbXBsZXRpb25zLXdpbmRvdykpDQoNCjs7OyMjI2F1dG9s b2FkDQooZGVmdW4gcHJvdC1taW5pYnVmZmVyLXN3aXRjaC10by1jb21wbGV0aW9ucy10b3AgKCkN CiAgIlN3aXRjaCB0byB0aGUgdG9wIG9mIHRoZSBjb21wbGV0aW9ucycgYnVmZmVyLg0KTWVhbnQg dG8gYmUgYm91bmQgaW4gYG1pbmlidWZmZXItbG9jYWwtY29tcGxldGlvbi1tYXAnLiINCiAgKGlu dGVyYWN0aXZlKQ0KICAocHJvdC1taW5pYnVmZmVyLS1zd2l0Y2gtdG8tY29tcGxldGlvbnMpDQog IChnb3RvLWNoYXIgKHBvaW50LW1pbikpDQogIChuZXh0LWNvbXBsZXRpb24gMSkpDQoNCjs7OyMj I2F1dG9sb2FkDQooZGVmdW4gcHJvdC1taW5pYnVmZmVyLXN3aXRjaC10by1jb21wbGV0aW9ucy1i b3R0b20gKCkNCiAgIlN3aXRjaCB0byB0aGUgYm90dG9tIG9mIHRoZSBjb21wbGV0aW9ucycgYnVm ZmVyLg0KTWVhbnQgdG8gYmUgYm91bmQgaW4gYG1pbmlidWZmZXItbG9jYWwtY29tcGxldGlvbi1t YXAnLiINCiAgKGludGVyYWN0aXZlKQ0KICAocHJvdC1taW5pYnVmZmVyLS1zd2l0Y2gtdG8tY29t cGxldGlvbnMpDQogIChnb3RvLWNoYXIgKHBvaW50LW1heCkpDQogIChuZXh0LWNvbXBsZXRpb24g LTEpDQogIChnb3RvLWNoYXIgKHBvaW50LWF0LWJvbCkpDQogIChyZWNlbnRlcg0KICAgKC0gLTEN CiAgICAgIChtaW4gKG1heCAwIHNjcm9sbC1tYXJnaW4pDQogICAgICAgICAgICh0cnVuY2F0ZSAo LyAod2luZG93LWJvZHktaGVpZ2h0KSA0LjApKSkpDQogICAgICB0KSkNCg0KOzs7IyMjYXV0b2xv YWQNCihkZWZ1biBwcm90LW1pbmlidWZmZXItbmV4dC1jb21wbGV0aW9uLW9yLW1pbmkgKCZvcHRp b25hbCBhcmcpDQogICJNb3ZlIHRvIHRoZSBuZXh0IGNvbXBsZXRpb24gb3Igc3dpdGNoIHRvIHRo ZSBtaW5pYnVmZmVyLg0KVGhpcyBwZXJmb3JtcyBhIHJlZ3VsYXIgbW90aW9uIGZvciBvcHRpb25h bCBBUkcgbGluZXMsIGJ1dCB3aGVuDQpwb2ludCBjYW4gbm8gbG9uZ2VyIG1vdmUgaW4gdGhhdCBk aXJlY3Rpb24gaXQgc3dpdGNoZXMgdG8gdGhlDQptaW5pYnVmZmVyLiINCiAgKGludGVyYWN0aXZl ICJwIikNCiAgKGlmIChvciAoZW9icCkNCiAgICAgICAgICAoZXEgKHBvaW50LW1heCkNCiAgICAg ICAgICAgICAgKHNhdmUtZXhjdXJzaW9uIChmb3J3YXJkLWxpbmUgMSkgKHBvaW50KSkpKQ0KICAg ICAgKHByb3QtbWluaWJ1ZmZlci1mb2N1cy1taW5pYnVmZmVyKQ0KICAgIChuZXh0LWNvbXBsZXRp b24gKG9yIGFyZyAxKSkpDQogIChzZXRxIHRoaXMtY29tbWFuZCAnbmV4dC1saW5lKSkNCg0KOzs7 IyMjYXV0b2xvYWQNCihkZWZ1biBwcm90LW1pbmlidWZmZXItcHJldmlvdXMtY29tcGxldGlvbi1v ci1taW5pICgmb3B0aW9uYWwgYXJnKQ0KICAiTW92ZSB0byB0aGUgbmV4dCBjb21wbGV0aW9uIG9y IHN3aXRjaCB0byB0aGUgbWluaWJ1ZmZlci4NClRoaXMgcGVyZm9ybXMgYSByZWd1bGFyIG1vdGlv biBmb3Igb3B0aW9uYWwgQVJHIGxpbmVzLCBidXQgd2hlbg0KcG9pbnQgY2FuIG5vIGxvbmdlciBt b3ZlIGluIHRoYXQgZGlyZWN0aW9uIGl0IHN3aXRjaGVzIHRvIHRoZQ0KbWluaWJ1ZmZlci4iDQog IChpbnRlcmFjdGl2ZSAicCIpDQogIChsZXQgKChudW0gKCogLTEgYXJnKSkpDQogICAgKGlmIChv ciAoYm9icCkNCiAgICAgICAgICAgIChlcSAocG9pbnQpICgxKyAocG9pbnQtbWluKSkpKSA7IHNl ZSBoYWNrIGluIGBwcm90LW1pbmlidWZmZXItLWNsZWFuLWNvbXBsZXRpb25zJw0KICAgICAgICAo cHJvdC1taW5pYnVmZmVyLWZvY3VzLW1pbmlidWZmZXIpDQogICAgICAobmV4dC1jb21wbGV0aW9u IChvciBudW0gMSkpKSkpDQoNCjs7OyMjI2F1dG9sb2FkDQooZGVmdW4gcHJvdC1taW5pYnVmZmVy LWNob29zZS1jb21wbGV0aW9uLWV4aXQgKCkNCiAgIlJ1biBgY2hvb3NlLWNvbXBsZXRpb24nIGlu IHRoZSBDb21wbGV0aW9ucyBidWZmZXIgYW5kIGV4aXQuIg0KICAoaW50ZXJhY3RpdmUpDQogICh3 aGVuIChhbmQgKGRlcml2ZWQtbW9kZS1wICdjb21wbGV0aW9uLWxpc3QtbW9kZSkNCiAgICAgICAg ICAgICAoYWN0aXZlLW1pbmlidWZmZXItd2luZG93KSkNCiAgICAoY2hvb3NlLWNvbXBsZXRpb24p DQogICAgKG1pbmlidWZmZXItZm9yY2UtY29tcGxldGUtYW5kLWV4aXQpKSkNCg0KKGRlZnVuIHBy b3QtbWluaWJ1ZmZlci0tZ290by1saW5lIChuICZvcHRpb25hbCBhcmdzKQ0KICAiR28gdG8gbGlu ZSBOIGluIHRoZSBDb21wbGV0aW9ucycgd2l0aCBvcHRpb25hbCBBUkdTLiINCiAgKGxldCAoKGJv dW5kcyAoY291bnQtbGluZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpKSkNCiAgICAoaWYgKDw9 IG4gYm91bmRzKQ0KICAgICAgICAocHJvZ24NCiAgICAgICAgICBgKCxAYXJncykNCiAgICAgICAg ICAoZ290by1jaGFyIChwb2ludC1taW4pKQ0KICAgICAgICAgIChmb3J3YXJkLWxpbmUgKDEtIG4p KQ0KICAgICAgICAgIChjaG9vc2UtY29tcGxldGlvbikpDQogICAgICAodXNlci1lcnJvciAiJWQg aXMgbm90IHdpdGhpbiBDb21wbGV0aW9ucycgYnVmZmVyIGJvdW5kcyAoJWQpIiBuIGJvdW5kcykp KSkNCg0KOzs7IyMjYXV0b2xvYWQNCihkZWZ1biBwcm90LW1pbmlidWZmZXItY2hvb3NlLWNvbXBs ZXRpb24tbnVtYmVyIChuKQ0KICAiU2VsZWN0IGNvbXBsZXRpb24gY2FuZGlkYXRlIG9uIGxpbmUg bnVtYmVyIE4gd2l0aCBwcmVmaXggYXJnLg0KDQpUaGUgaWRlYSBpcyB0byBwYXNzIGEgcHJlZml4 IG51bWVyaWMgYXJndW1lbnQgdGhhdCByZWZlcnMgdG8gYQ0KbGluZSBudW1iZXIgaW4gdGhlIENv bXBsZXRpb25zJyBidWZmZXIuIg0KICAoaW50ZXJhY3RpdmUgInAiKQ0KICAoaWYgY3VycmVudC1w cmVmaXgtYXJnDQogICAgICAoY29uZA0KICAgICAgICgoYW5kIChkZXJpdmVkLW1vZGUtcCAnY29t cGxldGlvbi1saXN0LW1vZGUpDQogICAgICAgICAgICAgKGFjdGl2ZS1taW5pYnVmZmVyLXdpbmRv dykpDQogICAgICAgIChwcm90LW1pbmlidWZmZXItLWdvdG8tbGluZSBuKSkNCiAgICAgICAoKGFu ZCAobWluaWJ1ZmZlcnApDQogICAgICAgICAgICAgKHByb3QtbWluaWJ1ZmZlci0tZ2V0LWNvbXBs ZXRpb24td2luZG93KSkNCiAgICAgICAgKHByb3QtbWluaWJ1ZmZlci0tZ290by1saW5lIG4gKHNl bGVjdC13aW5kb3cgKHByb3QtbWluaWJ1ZmZlci0tZ2V0LWNvbXBsZXRpb24td2luZG93KSkpKQ0K ICAgICAgICh0DQogICAgICAgICh1c2VyLWVycm9yICJPbmx5IHVzZSB0aGlzIGluc2lkZSB0aGUg bWluaWJ1ZmZlciBvZiB0aGUgQ29tcGxldGlvbnMiKSkpDQogICAgKHVzZXItZXJyb3IgIlBhc3Mg YSBudW1lcmljIGFyZ3VtZW50IGZpcnN0IikpKQ0KDQooZGVmdmFyIGNybS1jb21wbGV0aW9uLXRh YmxlKQ0KDQo7OzsjIyNhdXRvbG9hZA0KKGRlZnVuIHByb3QtbWluaWJ1ZmZlci1jaG9vc2UtY29t cGxldGlvbi1kd2ltICgpDQogICJBcHBlbmQgdG8gbWluaWJ1ZmZlciB3aGVuIGF0IGBjb21wbGV0 aW5nLXJlYWQtbXVsdGlwbGUnIHByb21wdC4NCk90aGVyd2lzZSBiZWhhdmUgbGlrZSBgcHJvdC1t aW5pYnVmZmVyLWNob29zZS1jb21wbGV0aW9uLWV4aXQnLiINCiAgKGludGVyYWN0aXZlKQ0KICAo d2hlbiAoYW5kIChkZXJpdmVkLW1vZGUtcCAnY29tcGxldGlvbi1saXN0LW1vZGUpDQogICAgICAg ICAgICAgKGFjdGl2ZS1taW5pYnVmZmVyLXdpbmRvdykpDQogICAgKGNob29zZS1jb21wbGV0aW9u KQ0KICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh3aW5kb3ctYnVmZmVyIChhY3RpdmUtbWluaWJ1 ZmZlci13aW5kb3cpKQ0KICAgICAgKHVubGVzcyAoZXEgKHByb3QtbWluaWJ1ZmZlci0tY29tcGxl dGlvbi1jYXRlZ29yeSkgJ2ZpbGUpDQogICAgICAgIChtaW5pYnVmZmVyLWZvcmNlLWNvbXBsZXRl KSkNCiAgICAgICh3aGVuIGNybS1jb21wbGV0aW9uLXRhYmxlDQogICAgICAgIDs7IEZJWE1FIDIw MjEtMDQtMDI6IGFzc3VtZXMgdGhlIGBjcm0tc2VwYXJhdG9yJyBhcyBjb25zdGFudC4NCiAgICAg ICAgOzsgVVBEQVRFIDIwMjEtMDQtMjI6IGFjdHVhbGx5IGBjcm0tZGVmYXVsdC1zZXBhcmF0b3In IGlzIGENCiAgICAgICAgOzsgZGVmY29uc3QsIHNvIEkgYW0gbGVhdmluZyB0aGlzIGhlcmUganVz dCBpbiBjYXNlIEkgZXZlciBuZWVkDQogICAgICAgIDs7IGl0LiAgV2Ugd2lsbCBoYXZlIGEgcHJv YmxlbSBpZiBzb21lIGNvbW1hbmQgbGV0LWJpbmRzIGl0cyBvd24NCiAgICAgICAgOzsgdmFsdWUs IGJ1dCBpdCBpcyBub3Qgb3VyIGZhdWx0IGhlcmUuLi4NCiAgICAgICAgKGluc2VydCAiLCIpDQog ICAgICAgIChsZXQgKChpbmhpYml0LW1lc3NhZ2UgdCkpDQogICAgICAgICAgKHN3aXRjaC10by1j b21wbGV0aW9ucykpKSkpKQ0KDQo= --=-=-= Content-Type: text/plain; charset=utf-8 Content-Disposition: attachment; filename=prot-minibuffer.el Content-Transfer-Encoding: base64 Ozs7IHByb3QtbWluaWJ1ZmZlci5lbCAtLS0gRXh0ZW5zaW9ucyBmb3IgdGhlIG1pbmlidWZmZXIg LSotIGxleGljYWwtYmluZGluZzogdCAtKi0NCg0KOzsgQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEg IFByb3Rlc2lsYW9zIFN0YXZyb3UNCg0KOzsgQXV0aG9yOiBQcm90ZXNpbGFvcyBTdGF2cm91IDxp bmZvQHByb3Rlc2lsYW9zLmNvbT4NCjs7IFVSTDogaHR0cHM6Ly9wcm90ZXNpbGFvcy5jb20vZG90 ZW1hY3MNCjs7IFZlcnNpb246IDAuMS4wDQo7OyBQYWNrYWdlLVJlcXVpcmVzOiAoKGVtYWNzICIy OC4xIikpDQoNCjs7IFRoaXMgZmlsZSBpcyBOT1QgcGFydCBvZiBHTlUgRW1hY3MuDQoNCjs7IFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5DQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KOzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0DQo7OyB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uDQo7Ow0KOzsgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQo7OyBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KOzsgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0K OzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCjs7DQo7OyBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQ0KOzsgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cHM6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lg0KDQo7OzsgQ29tbWVudGFyeToNCjs7DQo7OyBFeHRl bnNpb25zIGZvciB0aGUgbWluaWJ1ZmZlciwgaW50ZW5kZWQgZm9yIG15IEVtYWNzIHNldHVwOg0K OzsgPGh0dHBzOi8vcHJvdGVzaWxhb3MuY29tL2RvdGVtYWNzLz4uDQo7Ow0KOzsgUmVtZW1iZXIg dGhhdCBldmVyeSBwaWVjZSBvZiBFbGlzcCB0aGF0IEkgd3JpdGUgaXMgZm9yIG15IG93bg0KOzsg ZWR1Y2F0aW9uYWwgYW5kIHJlY3JlYXRpb25hbCBwdXJwb3Nlcy4gIEkgYW0gbm90IGEgcHJvZ3Jh bW1lciBhbmQgSQ0KOzsgZG8gbm90IHJlY29tbWVuZCB0aGF0IHlvdSBjb3B5IGFueSBvZiB0aGlz IGlmIHlvdSBhcmUgbm90IGNlcnRhaW4gb2YNCjs7IHdoYXQgaXQgZG9lcy4NCg0KOzs7IENvZGU6 DQoNCjs7OzsgR2VuZXJhbCB1dGlsaXRpZXMNCg0KKHJlcXVpcmUgJ3Byb3QtY29tbW9uKQ0KDQoo ZGVmZ3JvdXAgcHJvdC1taW5pYnVmZmVyICgpDQogICJFeHRlbnNpb25zIGZvciB0aGUgbWluaWJ1 ZmZlci4iDQogIDpncm91cCAnbWluaWJ1ZmZlcikNCg0KKGRlZmN1c3RvbSBwcm90LW1pbmlidWZm ZXItY29tcGxldGlvbi13aW5kb3dzLXJlZ2V4cA0KICAiXFwqXFwoQ29tcGxldGlvbnNcXHxFbWJh cmsgQ29sbGVjdCBcXChMaXZlXFx8Q29tcGxldGlvbnNcXClcXCkiDQogICJSZWdleHAgdG8gbWF0 Y2ggd2luZG93IG5hbWVzIHdpdGggY29tcGxldGlvbiBjYW5kaWRhdGVzLg0KVXNlZCBieSBgcHJv dC1taW5pYnVmZmVyLS1nZXQtY29tcGxldGlvbi13aW5kb3cnLiINCiAgOmdyb3VwICdwcm90LW1p bmlidWZmZXINCiAgOnR5cGUgJ3N0cmluZykNCg0KKGRlZmN1c3RvbSBwcm90LW1pbmlidWZmZXIt bWluaS1jdXJzb3JzIG5pbA0KICAiQWxsb3cgYGN1cnNvci10eXBlJyB0byBiZSBtb2RpZmllZCBp biB0aGUgbWluaWJ1ZmZlci4NClJlZmVyIHRvIHRoZSBzb3VyY2Ugb2YgYHByb3QtbWluaWJ1ZmZl ci1taW5pLWN1cnNvcicgYW5kDQpgcHJvdC1taW5pYnVmZmVyLWNvbXBsZXRpb25zLWN1cnNvcici DQogIDpncm91cCAncHJvdC1taW5pYnVmZmVyDQogIDp0eXBlICdib29sZWFuKQ0KDQooZGVmY3Vz dG9tIHByb3QtbWluaWJ1ZmZlci1yZW1vdmUtc2hhZG93ZWQtZmlsZS1uYW1lcyBuaWwNCiAgIkRl bGV0ZSBzaGFkb3dlZCBwYXJ0cyBvZiBmaWxlIG5hbWVzLg0KDQpGb3IgZXhhbXBsZSwgaWYgdGhl IHVzZXIgdHlwZXMgfi8gYWZ0ZXIgYSBsb25nIHBhdGggbmFtZSwNCmV2ZXJ5dGhpbmcgcHJlY2Vk aW5nIHRoZSB+LyBpcyByZW1vdmVkIHNvIHRoZSBpbnRlcmFjdGl2ZQ0Kc2VsZWN0aW9uIHByb2Nl c3Mgc3RhcnRzIGFnYWluIGZyb20gdGhlIHVzZXIncyAkSE9NRS4NCg0KT25seSB3b3JrcyB3aGVu IHZhcmlhYmxlIGBmaWxlLW5hbWUtc2hhZG93LW1vZGUnIGlzIG5vbi1uaWwuIg0KICA6dHlwZSAn Ym9vbGVhbg0KICA6Z3JvdXAgJ3Byb3QtbWluaWJ1ZmZlcikNCg0KKGRlZmN1c3RvbSBwcm90LW1p bmlidWZmZXItbWluaW11bS1pbnB1dCAzDQogICJMaXZlIHVwZGF0ZSBjb21wbGV0aW9ucyB3aGVu IGlucHV0IGlzID49IE4uDQoNClNldHRpbmcgdGhpcyB0byBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAx IGNhbiBoZWxwIHJlZHVjZSB0aGUgdG90YWwNCm51bWJlciBvZiBjYW5kaWRhdGVzIHRoYXQgYXJl IGJlaW5nIGNvbXB1dGVkLiINCiAgOnR5cGUgJ2ludGVnZXINCiAgOmdyb3VwICdwcm90LW1pbmli dWZmZXIpDQoNCihkZWZjdXN0b20gcHJvdC1taW5pYnVmZmVyLWxpdmUtdXBkYXRlLWRlbGF5IDAu Mw0KICAiRGVsYXkgaW4gc2Vjb25kcyBiZWZvcmUgdXBkYXRpbmcgdGhlIENvbXBsZXRpb25zJyBi dWZmZXIuDQoNClNldCB0aGlzIHRvIDAgdG8gZGlzYWJsZSB0aGUgZGVsYXkuIg0KICA6dHlwZSAn bnVtYmVyDQogIDpncm91cCAncHJvdC1taW5pYnVmZmVyKQ0KDQooZGVmY3VzdG9tIHByb3QtbWlu aWJ1ZmZlci1jb21wbGV0aW9uLWJsb2NrbGlzdCBuaWwNCiAgIkNvbW1hbmRzIHRoYXQgZG8gbm90 IGRvIGxpdmUgdXBkYXRpbmcgb2YgY29tcGxldGlvbnMuDQoNCkEgbGVzcyBkcmFzdGljIG1lYXN1 cmUgaXMgdG8gc2V0IGBwcm90LW1pbmlidWZmZXItbWluaW11bS1pbnB1dCcNCnRvIGFuIGFwcHJv cHJpYXRlIHZhbHVlLg0KDQpUaGUgQ29tcGxldGlvbnMnIGJ1ZmZlciBjYW4gc3RpbGwgYmUgYWNj ZXNzZWQgd2l0aCBjb21tYW5kcyB0aGF0DQpwdXQgaXQgaW4gYSB3aW5kb3cgKGUuZy4gYHByb3Qt bWluaWJ1ZmZlci10b2dnbGUtY29tcGxldGlvbnMnLA0KYHByb3QtbWluaWJ1ZmZlci1zd2l0Y2gt dG8tY29tcGxldGlvbnMtdG9wJykuIg0KICA6dHlwZSAnKHJlcGVhdCBzeW1ib2wpDQogIDpncm91 cCAncHJvdC1taW5pYnVmZmVyKQ0KDQooZGVmY3VzdG9tIHByb3QtbWluaWJ1ZmZlci1jb21wbGV0 aW9uLXBhc3NsaXN0IG5pbA0KICAiQ29tbWFuZHMgdGhhdCBkbyBsaXZlIHVwZGF0aW5nIG9mIGNv bXBsZXRpb25zIGZyb20gdGhlIHN0YXJ0Lg0KDQpUaGlzIG1lYW5zIHRoYXQgdGhleSBpZ25vcmUg YHByb3QtbWluaWJ1ZmZlci1taW5pbXVtLWlucHV0JyBhbmQNCnRoZSBpbmhlcmVudCBjb25zdHJh aW50IG9mIHVwZGF0aW5nIHRoZSBDb21wbGV0aW9ucycgYnVmZmVyIG9ubHkNCnVwb24gdXNlciBp bnB1dC4gIEZ1cnRoZXJtb3JlLCB0aGV5IGFsc28gYnlwYXNzIGFueSBwb3NzaWJsZQ0KZGVsYXkg aW50cm9kdWNlZCBieSBgcHJvdC1taW5pYnVmZmVyLWxpdmUtdXBkYXRlLWRlbGF5Jy4iDQogIDp0 eXBlICcocmVwZWF0IHN5bWJvbCkNCiAgOmdyb3VwICdwcm90LW1pbmlidWZmZXIpDQoNCjs7Ozsg TWluaWJ1ZmZlciBiZWhhdmlvdXINCg0KOzsgVGhhbmtzIHRvIE9tYXIgQW50b2zDrW4gQ2FtYXJl bmEgZm9yIHByb3ZpZGluZyB0aGUgbWVzc2FnZWxlc3MgYW5kDQo7OyBzdGVhbHRoaWx5LiAgU291 cmNlOiA8aHR0cHM6Ly9naXRodWIuY29tL29hbnRvbGluL2VtYWNzLWNvbmZpZz4uDQooZGVmdW4g cHJvdC1taW5pYnVmZmVyLS1tZXNzYWdlbGVzcyAoZm4gJnJlc3QgYXJncykNCiAgIlNldCBgbWlu aWJ1ZmZlci1tZXNzYWdlLXRpbWVvdXQnIHRvIDAuDQpNZWFudCBhcyBhZHZpY2UgYXJvdW5kIG1p bmlidWZmZXIgY29tcGxldGlvbiBGTiB3aXRoIEFSR1MuIg0KICAobGV0ICgobWluaWJ1ZmZlci1t ZXNzYWdlLXRpbWVvdXQgMCkpDQogICAgKGFwcGx5IGZuIGFyZ3MpKSkNCg0KKGRvbGlzdCAoZm4g JyhleGl0LW1pbmlidWZmZXINCiAgICAgICAgICAgICAgY2hvb3NlLWNvbXBsZXRpb24NCiAgICAg ICAgICAgICAgbWluaWJ1ZmZlci1mb3JjZS1jb21wbGV0ZQ0KICAgICAgICAgICAgICBtaW5pYnVm ZmVyLWNvbXBsZXRlLWFuZC1leGl0DQogICAgICAgICAgICAgIG1pbmlidWZmZXItZm9yY2UtY29t cGxldGUtYW5kLWV4aXQpKQ0KICAoYWR2aWNlLWFkZCBmbiA6YXJvdW5kICMncHJvdC1taW5pYnVm ZmVyLS1tZXNzYWdlbGVzcykpDQoNCjs7IENvcGllZCBmcm9tIERhbmllbCBNZW5kbGVyJ3MgYHZl cnRpY28nIGxpYnJhcnk6DQo7OyA8aHR0cHM6Ly9naXRodWIuY29tL21pbmFkL3ZlcnRpY28+Lg0K KGRlZnVuIHByb3QtbWluaWJ1ZmZlci0tY3JtLWluZGljYXRvciAoYXJncykNCiAgIkFkZCBwcm9t cHQgaW5kaWNhdG9yIHRvIGBjb21wbGV0aW5nLXJlYWQtbXVsdGlwbGUnIGZpbHRlciBBUkdTLiIN CiAgKGNvbnMgKGNvbmNhdCAiW0NSTV0gIiAoY2FyIGFyZ3MpKSAoY2RyIGFyZ3MpKSkNCg0KKGFk dmljZS1hZGQgIydjb21wbGV0aW5nLXJlYWQtbXVsdGlwbGUgOmZpbHRlci1hcmdzICMncHJvdC1t aW5pYnVmZmVyLS1jcm0taW5kaWNhdG9yKQ0KDQo7OyBBZGFwdGVkIGZyb20gT21hciBBbnRvbMOt biBDYW1hcmVuYSdzIGxpdmUtY29tcGxldGlvbnMgbGlicmFyeToNCjs7IDxodHRwczovL2dpdGh1 Yi5jb20vb2FudG9saW4vbGl2ZS1jb21wbGV0aW9ucz4uDQooZGVmdW4gcHJvdC1taW5pYnVmZmVy LS1ob25vci1pbmhpYml0LW1lc3NhZ2UgKGZuICZyZXN0IGFyZ3MpDQogICJTa2lwIGFwcGx5aW5n IEZOIHRvIEFSR1MgaWYgYGluaGliaXQtbWVzc2FnZScgaXMgdC4NCk1lYW50IGFzIGA6YXJvdW5k JyBhZHZpY2UgZm9yIGBtaW5pYnVmZmVyLW1lc3NhZ2UnLCB3aGljaCBkb2VzDQpub3QgaG9ub3Ig bWluaWJ1ZmZlciBtZXNzYWdlLiINCiAgKHVubGVzcyBpbmhpYml0LW1lc3NhZ2UNCiAgICAoYXBw bHkgZm4gYXJncykpKQ0KDQooYWR2aWNlLWFkZCAjJ21pbmlidWZmZXItbWVzc2FnZSA6YXJvdW5k ICMncHJvdC1taW5pYnVmZmVyLS1ob25vci1pbmhpYml0LW1lc3NhZ2UpDQoNCjs7IE5vdGUgdGhh dCB0aGlzIHNvbHZlcyBidWcjNDU2ODYgYW5kIGlzIG9ubHkgY29uc2lkZXJlZCBhIHRlbXBvcmFy eQ0KOzsgbWVhc3VyZTogPGh0dHBzOi8vZGViYnVncy5nbnUub3JnL2NnaS9idWdyZXBvcnQuY2dp P2J1Zz00NTY4Nj4NCihkZWZ1biBwcm90LW1pbmlidWZmZXItLXN0ZWFsdGhpbHkgKGZuICZyZXN0 IGFyZ3MpDQogICJQcmV2ZW50IG1pbmlidWZmZXIgZGVmYXVsdCBmcm9tIGNvdW50aW5nIGFzIGEg bW9kaWZpY2F0aW9uLg0KTWVhbnQgYXMgYWR2aWNlIGZvciBGTiBgbWluaWJ1Zi1lbGRlZi1zZXR1 cC1taW5pYnVmZmVyJyB3aXRoIHJlc3QNCkFSR1MuIg0KICAobGV0ICgoaW5oaWJpdC1tb2RpZmlj YXRpb24taG9va3MgdCkpDQogICAgKGFwcGx5IGZuIGFyZ3MpKSkNCg0KKGFkdmljZS1hZGQgJ21p bmlidWYtZWxkZWYtc2V0dXAtbWluaWJ1ZmZlciA6YXJvdW5kICMncHJvdC1taW5pYnVmZmVyLS1z dGVhbHRoaWx5KQ0KDQo7OyBDb3BpZWQgZnJvbSBpY29tcGxldGUuZWwNCihkZWZ1biBwcm90LW1p bmlidWZmZXItLWZpZWxkLWJlZyAoKQ0KICAiRGV0ZXJtaW5lIGJlZ2lubmluZyBvZiBjb21wbGV0 aW9uLiINCiAgKGlmICh3aW5kb3ctbWluaWJ1ZmZlci1wKQ0KICAgICAgKG1pbmlidWZmZXItcHJv bXB0LWVuZCkNCiAgICAobnRoIDAgY29tcGxldGlvbi1pbi1yZWdpb24tLWRhdGEpKSkNCg0KOzsg Q29waWVkIGZyb20gaWNvbXBsZXRlLmVsDQooZGVmdW4gcHJvdC1taW5pYnVmZmVyLS1maWVsZC1l bmQgKCkNCiAgIkRldGVybWluZSBlbmQgb2YgY29tcGxldGlvbi4iDQogIChpZiAod2luZG93LW1p bmlidWZmZXItcCkNCiAgICAgIChwb2ludC1tYXgpDQogICAgKG50aCAxIGNvbXBsZXRpb24taW4t cmVnaW9uLS1kYXRhKSkpDQoNCjs7IENvcGllZCBmcm9tIGljb21wbGV0ZS5lbA0KKGRlZnVuIHBy b3QtbWluaWJ1ZmZlci0tY29tcGxldGlvbi1jYXRlZ29yeSAoKQ0KICAiUmV0dXJuIGNvbXBsZXRp b24gY2F0ZWdvcnkuIg0KICAobGV0KiAoKGJlZyAocHJvdC1taW5pYnVmZmVyLS1maWVsZC1iZWcp KQ0KICAgICAgICAgKG1kIChjb21wbGV0aW9uLS1maWVsZC1tZXRhZGF0YSBiZWcpKSkNCiAgICAo YWxpc3QtZ2V0ICdjYXRlZ29yeSAoY2RyIG1kKSkpKQ0KDQo7OyBBZGFwdGVkIGZyb20gaWNvbXBs ZXRlLmVsDQooZGVmdW4gcHJvdC1taW5pYnVmZmVyLS1zaGFkb3ctZmlsZW5hbWVzICgmcmVzdCBf KQ0KICAiSGlkZSBzaGFkb3dlZCBmaWxlIG5hbWVzLiINCiAgKGxldCAoKHNhdmVkLXBvaW50IChw b2ludCkpKQ0KICAgICh3aGVuIChhbmQNCiAgICAgICAgICAgcHJvdC1taW5pYnVmZmVyLXJlbW92 ZS1zaGFkb3dlZC1maWxlLW5hbWVzDQogICAgICAgICAgIChlcSAocHJvdC1taW5pYnVmZmVyLS1j b21wbGV0aW9uLWNhdGVnb3J5KSAnZmlsZSkNCiAgICAgICAgICAgcmZuLWVzaGFkb3ctb3Zlcmxh eSAob3ZlcmxheS1idWZmZXIgcmZuLWVzaGFkb3ctb3ZlcmxheSkNCiAgICAgICAgICAgKGVxIHRo aXMtY29tbWFuZCAnc2VsZi1pbnNlcnQtY29tbWFuZCkNCiAgICAgICAgICAgKD0gc2F2ZWQtcG9p bnQgKHByb3QtbWluaWJ1ZmZlci0tZmllbGQtZW5kKSkNCiAgICAgICAgICAgKG9yICg+PSAoLSAo cG9pbnQpIChvdmVybGF5LWVuZCByZm4tZXNoYWRvdy1vdmVybGF5KSkgMikNCiAgICAgICAgICAg ICAgIChlcSA/LyAoY2hhci1iZWZvcmUgKC0gKHBvaW50KSAyKSkpKSkNCiAgICAgIChkZWxldGUt cmVnaW9uIChvdmVybGF5LXN0YXJ0IHJmbi1lc2hhZG93LW92ZXJsYXkpDQogICAgICAgICAgICAg ICAgICAgICAob3ZlcmxheS1lbmQgcmZuLWVzaGFkb3ctb3ZlcmxheSkpKSkpDQoNCihkZWZ1biBw cm90LW1pbmlidWZmZXItLXNldHVwLXNoYWRvdy1maWxlcyAoKQ0KICAiU2V0IHVwIHNoYWRvd2Vk IGZpbGUgbmFtZSBkZWxldGlvbi4NClRvIGJlIGFzc2lnbmVkIHRvIGBtaW5pYnVmZmVyLXNldHVw LWhvb2snLiINCiAgKGFkZC1ob29rICdhZnRlci1jaGFuZ2UtZnVuY3Rpb25zICMncHJvdC1taW5p YnVmZmVyLS1zaGFkb3ctZmlsZW5hbWVzIG5pbCB0KSkNCg0KKGFkZC1ob29rICdtaW5pYnVmZmVy LXNldHVwLWhvb2sgIydwcm90LW1pbmlidWZmZXItLXNldHVwLXNoYWRvdy1maWxlcykNCg0KOzs7 OyBDdXJzb3IgYXBwZWFyYW5jZQ0KDQooZGVmdW4gcHJvdC1taW5pYnVmZmVyLS1jdXJzb3ItdHlw ZSAoKQ0KICAiRGV0ZXJtaW5lIHdoZXRoZXIgYGN1cnNvci10eXBlJyBpcyBhIGxpc3QgYW5kIHJl dHVybiB2YWx1ZS4NCklmIGl0IGlzIGEgbGlzdCwgdGhpcyBhY3R1YWxseSByZXR1cm5zIGl0cyBj YXIuIg0KICAoaWYgKGxpc3RwIGN1cnNvci10eXBlKQ0KICAgICAgKGNhciBjdXJzb3ItdHlwZSkN CiAgICBjdXJzb3ItdHlwZSkpDQoNCjs7OyMjI2F1dG9sb2FkDQooZGVmdW4gcHJvdC1taW5pYnVm ZmVyLW1pbmktY3Vyc29yICgpDQogICJMb2NhbCB2YWx1ZSBvZiBgY3Vyc29yLXR5cGUnIGZvciBg bWluaWJ1ZmZlci1zZXR1cC1ob29rJy4iDQogICh3aGVuIHByb3QtbWluaWJ1ZmZlci1taW5pLWN1 cnNvcnMNCiAgICAocGNhc2UgKHByb3QtbWluaWJ1ZmZlci0tY3Vyc29yLXR5cGUpDQogICAgICAo J2hiYXIgKHNldHEtbG9jYWwgY3Vyc29yLXR5cGUgJyhoYmFyIC4gOCkpKQ0KICAgICAgKCdiYXIg KHNldHEtbG9jYWwgY3Vyc29yLXR5cGUgJyhoYmFyIC4gMykpKQ0KICAgICAgKF8gIChzZXRxLWxv Y2FsIGN1cnNvci10eXBlICcoYmFyIC4gMikpKSkpKQ0KDQo7OzsjIyNhdXRvbG9hZA0KKGRlZnVu IHByb3QtbWluaWJ1ZmZlci1jb21wbGV0aW9ucy1jdXJzb3IgKCkNCiAgIkxvY2FsIHZhbHVlIG9m IGBjdXJzb3ItdHlwZScgZm9yIGBjb21wbGV0aW9uLWxpc3QtbW9kZS1ob29rJy4iDQogICh3aGVu IHByb3QtbWluaWJ1ZmZlci1taW5pLWN1cnNvcnMNCiAgICAocGNhc2UgKHByb3QtbWluaWJ1ZmZl ci0tY3Vyc29yLXR5cGUpDQogICAgICAoJ2hiYXIgKHNldHEtbG9jYWwgY3Vyc29yLXR5cGUgJ2Jv eCkpDQogICAgICAoJ2JhciAoc2V0cS1sb2NhbCBjdXJzb3ItdHlwZSAnKGhiYXIgLiA4KSkpDQog ICAgICAoXyAgKHNldHEtbG9jYWwgY3Vyc29yLXR5cGUgJyhiYXIgLiAzKSkpKSkpDQoNCjs7Ozsg QmFzaWMgbWluaWJ1ZmZlciBpbnRlcmFjdGlvbnMNCg0KOzs7IyMjYXV0b2xvYWQNCihkZWZ1biBw cm90LW1pbmlidWZmZXItZm9jdXMtbWluaWJ1ZmZlciAoKQ0KICAiRm9jdXMgdGhlIGFjdGl2ZSBt aW5pYnVmZmVyLiINCiAgKGludGVyYWN0aXZlKQ0KICAobGV0ICgobWluaSAoYWN0aXZlLW1pbmli dWZmZXItd2luZG93KSkpDQogICAgKHdoZW4gbWluaQ0KICAgICAgKHNlbGVjdC13aW5kb3cgbWlu aSkpKSkNCg0KKGRlZnVuIHByb3QtbWluaWJ1ZmZlci0tZ2V0LWNvbXBsZXRpb24td2luZG93ICgp DQogICJGaW5kIGEgbGl2ZSB3aW5kb3cgc2hvd2luZyBjb21wbGV0aW9uIGNhbmRpZGF0ZXMuIg0K ICAoZ2V0LXdpbmRvdy13aXRoLXByZWRpY2F0ZQ0KICAgKGxhbWJkYSAod2luZG93KQ0KICAgICAo c3RyaW5nLW1hdGNoLXANCiAgICAgIHByb3QtbWluaWJ1ZmZlci1jb21wbGV0aW9uLXdpbmRvd3Mt cmVnZXhwDQogICAgICAoZm9ybWF0ICIlcyIgd2luZG93KSkpKSkNCg0KKGRlZnVuIHByb3QtbWlu aWJ1ZmZlci1mb2N1cy1taW5pLW9yLWNvbXBsZXRpb25zICgpDQogICJGb2N1cyB0aGUgYWN0aXZl IG1pbmlidWZmZXIgb3IgdGhlIGNvbXBsZXRpb25zJyB3aW5kb3cuDQoNCklmIGJvdGggdGhlIG1p bmlidWZmZXIgYW5kIHRoZSBDb21wbGV0aW9ucyBhcmUgcHJlc2VudCwgdGhpcw0KY29tbWFuZCB3 aWxsIGZpcnN0IG1vdmUgcGVyIGludm9jYXRpb24gdG8gdGhlIGZvcm1lciwgdGhlbiB0aGUNCmxh dHRlciwgYW5kIHRoZW4gY29udGludWUgdG8gc3dpdGNoIGJldHdlZW4gdGhlIHR3by4NCg0KVGhl IGNvbnRpbnVvdXMgc3dpdGNoIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIHJ1bm5pbmcNCmBw cm90LW1pbmlidWZmZXItZm9jdXMtbWluaWJ1ZmZlcicgYW5kIGBzd2l0Y2gtdG8tY29tcGxldGlv bnMnIGluDQpzdWNjZXNzaW9uLg0KDQpXaGF0IGNvbnN0aXR1dGVzIGEgY29tcGxldGlvbnMnIHdp bmRvdyBpcyB1bHRpbWF0ZWx5IGRldGVybWluZWQNCmJ5IGBwcm90LW1pbmlidWZmZXItY29tcGxl dGlvbi13aW5kb3dzLXJlZ2V4cCcuIg0KICAoaW50ZXJhY3RpdmUpDQogIChsZXQqICgobWluaSAo YWN0aXZlLW1pbmlidWZmZXItd2luZG93KSkNCiAgICAgICAgIChjb21wbGV0aW9ucyAocHJvdC1t aW5pYnVmZmVyLS1nZXQtY29tcGxldGlvbi13aW5kb3cpKSkNCiAgICAoY29uZA0KICAgICAoKGFu ZCBtaW5pIChub3QgKG1pbmlidWZmZXJwKSkpDQogICAgICAoc2VsZWN0LXdpbmRvdyBtaW5pIG5p bCkpDQogICAgICgoYW5kIGNvbXBsZXRpb25zIChub3QgKGVxIChzZWxlY3RlZC13aW5kb3cpIGNv bXBsZXRpb25zKSkpDQogICAgICAoc2VsZWN0LXdpbmRvdyBjb21wbGV0aW9ucyBuaWwpKSkpKQ0K DQo7OyBBZGFwdGF0aW9uIG9mIGBpY29tcGxldGUtZmlkby1iYWNrd2FyZC11cGRpcicuDQo7Ozsj IyNhdXRvbG9hZA0KKGRlZnVuIHByb3QtbWluaWJ1ZmZlci1iYWNrd2FyZC11cGRpciAoKQ0KICAi RGVsZXRlIGNoYXIgYmVmb3JlIHBvaW50IG9yIGdvIHVwIGEgZGlyZWN0b3J5Lg0KTXVzdCBiZSBi b3VuZCB0byBgbWluaWJ1ZmZlci1sb2NhbC1maWxlbmFtZS1jb21wbGV0aW9uLW1hcCcuIg0KICAo aW50ZXJhY3RpdmUpDQogIChpZiAoYW5kIChlcSAoY2hhci1iZWZvcmUpID8vKQ0KICAgICAgICAg ICAoZXEgKHByb3QtbWluaWJ1ZmZlci0tY29tcGxldGlvbi1jYXRlZ29yeSkgJ2ZpbGUpKQ0KICAg ICAgKHNhdmUtZXhjdXJzaW9uDQogICAgICAgIChnb3RvLWNoYXIgKDEtIChwb2ludCkpKQ0KICAg ICAgICAod2hlbiAoc2VhcmNoLWJhY2t3YXJkICIvIiAocG9pbnQtbWluKSB0KQ0KICAgICAgICAg IChkZWxldGUtcmVnaW9uICgxKyAocG9pbnQpKSAocG9pbnQtbWF4KSkpKQ0KICAgIChjYWxsLWlu dGVyYWN0aXZlbHkgJ2JhY2t3YXJkLWRlbGV0ZS1jaGFyKSkpDQoNCjs7OzsgTWluaWJ1ZmZlciBh bmQgQ29tcGxldGlvbnMnIGJ1ZmZlciBpbnRlcnNlY3Rpb24NCjs7IE5PVEUgMjAyMS0wNC0wMjog VGhlIGJ1bGsgb2YgdGhpcyBjb2RlIHJlc2lkZWQgaW4gYHByb3QtZW1iYXJrLmVsJw0KOzsgYmVj YXVzZSBJIHdhcyB1c2luZyBFbWJhcmsncyBsaXZlLXVwZGF0aW5nIGNvbXBsZXRpb25zJyBjb2xs ZWN0aW9uDQo7OyBidWZmZXIuICBIb3dldmVyLCBFbWFjczI4IHByb3ZpZGVzIGEgb25lLWNvbHVt biBsYXlvdXQgZm9yIHRoZQ0KOzsgZGVmYXVsdCBDb21wbGV0aW9ucycgYnVmZmVyLCBzbyBpdCBp cyBlYXN5IHRvIGJyaW5nIHRoaXMgaGVyZSBhbmQNCjs7IGFkYXB0IGl0IHRvIHdvcmsgd2l0aG91 dCB0aGUgb3RoZXJ3aXNlIG1pbm9yIEVtYmFyayBleHRyYXMuDQoNCihkZWZmYWNlIHByb3QtbWlu aWJ1ZmZlci1obC1saW5lDQogICcoKGRlZmF1bHQgOmV4dGVuZCB0KQ0KICAgICgoKGNsYXNzIGNv bG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpKQ0KICAgICA6YmFja2dyb3Vu ZCAiI2IwZDhmZiIgOmZvcmVncm91bmQgIiMwMDAwMDAiKQ0KICAgICgoKGNsYXNzIGNvbG9yKSAo bWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgZGFyaykpDQogICAgIDpiYWNrZ3JvdW5kICIjMTAz MjY1IiA6Zm9yZWdyb3VuZCAiI2ZmZmZmZiIpDQogICAgKHQgOmluaGVyaXQgKGZvbnQtbG9jay1z dHJpbmctZmFjZSBlbGZlZWQtc2VhcmNoLXRpdGxlLWZhY2UpKSkNCiAgIkZhY2UgZm9yIGN1cnJl bnQgbGluZSBpbiB0aGUgY29tcGxldGlvbnMnIGJ1ZmZlci4iDQogIDpncm91cCAncHJvdC1taW5p YnVmZmVyKQ0KDQooZGVmZmFjZSBwcm90LW1pbmlidWZmZXItbGluZS1udW1iZXINCiAgJygoZGVm YXVsdCA6aW5oZXJpdCBkZWZhdWx0KQ0KICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4 OCkgKGJhY2tncm91bmQgbGlnaHQpKQ0KICAgICA6YmFja2dyb3VuZCAiI2YyZWZmMyIgOmZvcmVn cm91bmQgIiMyNTI1MjUiKQ0KICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJh Y2tncm91bmQgZGFyaykpDQogICAgIDpiYWNrZ3JvdW5kICIjMTUxODIzIiA6Zm9yZWdyb3VuZCAi I2RkZGRkZCIpDQogICAgKHQgOmludmVyc2UtdmlkZW8gdCkpDQogICJGYWNlIGZvciBsaW5lIG51 bWJlcnMgaW4gdGhlIGNvbXBsZXRpb25zJyBidWZmZXIuIg0KICA6Z3JvdXAgJ3Byb3QtbWluaWJ1 ZmZlcikNCg0KKGRlZmZhY2UgcHJvdC1taW5pYnVmZmVyLWxpbmUtbnVtYmVyLWN1cnJlbnQtbGlu ZQ0KICAnKChkZWZhdWx0IDppbmhlcml0IGRlZmF1bHQpDQogICAgKCgoY2xhc3MgY29sb3IpICht aW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkpDQogICAgIDpiYWNrZ3JvdW5kICIjOGFj N2ZmIiA6Zm9yZWdyb3VuZCAiIzAwMDAwMCIpDQogICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29s b3JzIDg4KSAoYmFja2dyb3VuZCBkYXJrKSkNCiAgICAgOmJhY2tncm91bmQgIiMxNDJhNzkiIDpm b3JlZ3JvdW5kICIjZmZmZmZmIikNCiAgICAodCA6aW52ZXJzZS12aWRlbyB0KSkNCiAgIkZhY2Ug Zm9yIGN1cnJlbnQgbGluZSBudW1iZXIgaW4gdGhlIGNvbXBsZXRpb25zJyBidWZmZXIuIg0KICA6 Z3JvdXAgJ3Byb3QtbWluaWJ1ZmZlcikNCg0KKGF1dG9sb2FkICdkaXNwbGF5LWxpbmUtbnVtYmVy cy1tb2RlICJkaXNwbGF5LWxpbmUtbnVtYmVycyIpDQooYXV0b2xvYWQgJ2ZhY2UtcmVtYXAtcmVt b3ZlLXJlbGF0aXZlICJmYWNlLXJlbWFwIikNCg0KOzs7IyMjYXV0b2xvYWQNCihkZWZ1biBwcm90 LW1pbmlidWZmZXItZGlzcGxheS1saW5lLW51bWJlcnMgKCkNCiAgIlNldCB1cCBsaW5lIG51bWJl cnMgZm9yIHRoZSBjb21wbGV0aW9ucycgYnVmZmVyLg0KQWRkIHRoaXMgdG8gYGNvbXBsZXRpb24t bGlzdC1tb2RlLWhvb2snLiINCiAgKHdoZW4gKGRlcml2ZWQtbW9kZS1wICdjb21wbGV0aW9uLWxp c3QtbW9kZSkNCiAgICAoZmFjZS1yZW1hcC1hZGQtcmVsYXRpdmUgJ2xpbmUtbnVtYmVyICdwcm90 LW1pbmlidWZmZXItbGluZS1udW1iZXIpDQogICAgKGZhY2UtcmVtYXAtYWRkLXJlbGF0aXZlICds aW5lLW51bWJlci1jdXJyZW50LWxpbmUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3By b3QtbWluaWJ1ZmZlci1saW5lLW51bWJlci1jdXJyZW50LWxpbmUpDQogICAgKGRpc3BsYXktbGlu ZS1udW1iZXJzLW1vZGUgMSkpKQ0KDQo7OzsjIyNhdXRvbG9hZA0KKGRlZnVuIHByb3QtbWluaWJ1 ZmZlci1obC1saW5lICgpDQogICJTZXQgdXAgbGluZSBoaWdobGlnaHRpbmcgZm9yIHRoZSBjb21w bGV0aW9ucycgYnVmZmVyLg0KQWRkIHRoaXMgdG8gYGNvbXBsZXRpb24tbGlzdC1tb2RlLWhvb2sn LiINCiAgKHdoZW4gKGRlcml2ZWQtbW9kZS1wICdjb21wbGV0aW9uLWxpc3QtbW9kZSkNCiAgICAo ZmFjZS1yZW1hcC1hZGQtcmVsYXRpdmUgJ2hsLWxpbmUgJ3Byb3QtbWluaWJ1ZmZlci1obC1saW5l KQ0KICAgIChobC1saW5lLW1vZGUgMSkpKQ0KDQo7OyBUaGFua3MgdG8gT21hciBBbnRvbMOtbiBD YW1hcmVuYSBmb3IgcmVjb21tZW5kaW5nIHRoZSB1c2Ugb2YNCjs7IGBjdXJzb3Itc2Vuc29yLWZ1 bmN0aW9ucycgYW5kIHRoZSBjb25jb21pdGFudCBob29rIHdpdGgNCjs7IGBjdXJzb3ItY2Vuc29y LW1vZGUnIGluc3RlYWQgb2YgdGhlIGRpcnR5IGhhY2tzIEkgaGFkIGJlZm9yZSB0bw0KOzsgcHJl dmVudCB0aGUgY3Vyc29yIGZyb20gbW92aW5nIHRvIHRoYXQgcG9zaXRpb24gd2hlcmUgbm8gY29t cGxldGlvbg0KOzsgY2FuZGlkYXRlcyBjb3VsZCBiZSBmb3VuZCBhdCBwb2ludCAoZS5nLiBpdCB3 b3VsZCBicmVhayBgZW1iYXJrLWFjdCcNCjs7IGFzIGl0IGNvdWxkIG5vdCByZWFkIHRoZSB0b3Bt b3N0IGNhbmRpZGF0ZSB3aGVuIHBvaW50IHdhcyBhdCB0aGUNCjs7IGJlZ2lubmluZyBvZiB0aGUg bGluZSwgdW5sZXNzIHRoZSBwb2ludCB3YXMgbW92ZWQgZm9yd2FyZCkuDQooZGVmdW4gcHJvdC1t aW5pYnVmZmVyLS1jbGVhbi1jb21wbGV0aW9ucyAoKQ0KICAiS2VlcCBvbmx5IGNvbXBsZXRpb24g Y2FuZGlkYXRlcyBpbiB0aGUgQ29tcGxldGlvbnMuIg0KICAod2l0aC1jdXJyZW50LWJ1ZmZlciBz dGFuZGFyZC1vdXRwdXQNCiAgICAobGV0ICgoaW5oaWJpdC1yZWFkLW9ubHkgdCkpDQogICAgICAo Z290by1jaGFyIChwb2ludC1taW4pKQ0KICAgICAgKGRlbGV0ZS1yZWdpb24gKHBvaW50LWF0LWJv bCkgKDErIChwb2ludC1hdC1lb2wpKSkNCiAgICAgIChpbnNlcnQgKHByb3BlcnRpemUgIiAiDQog ICAgICAgICAgICAgICAgICAgICAgICAgICdjdXJzb3Itc2Vuc29yLWZ1bmN0aW9ucw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAobGlzdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxh bWJkYSAoX3dpbiBwcmV2IGRpcikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdoZW4g KGVxIGRpciAnZW50ZXJlZCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ290by1j aGFyIHByZXYpKSkpKSkNCiAgICAgIChwdXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQtbWluKSAocG9p bnQpICdpbnZpc2libGUgdCkpKSkNCg0KKGFkZC1ob29rICdjb21wbGV0aW9uLWxpc3QtbW9kZS1o b29rICMnY3Vyc29yLXNlbnNvci1tb2RlKQ0KKGFkZC1ob29rICdjb21wbGV0aW9uLXNldHVwLWhv b2sgIydwcm90LW1pbmlidWZmZXItLWNsZWFuLWNvbXBsZXRpb25zKQ0KDQooZGVmdW4gcHJvdC1t aW5pYnVmZmVyLS1maXQtY29tcGxldGlvbnMtd2luZG93ICgpDQogICJGaXQgQ29tcGxldGlvbnMn IGJ1ZmZlciB0byBpdHMgd2luZG93LiINCiAgKGZpdC13aW5kb3ctdG8tYnVmZmVyIChnZXQtYnVm ZmVyLXdpbmRvdyAiKkNvbXBsZXRpb25zKiIpDQogICAgICAgICAgICAgICAgICAgICAgICAoZmxv b3IgKGZyYW1lLWhlaWdodCkgMikgMSkpDQoNCihkZWZ1biBwcm90LW1pbmlidWZmZXItLWlucHV0 LXN0cmluZyAoKQ0KICAiUmV0dXJuIHRoZSBjb250ZW50cyBvZiB0aGUgbWluaWJ1ZmZlciBhcyBh IHN0cmluZy4iDQogIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgKG1pbmlidWZmZXIt cHJvbXB0LWVuZCkgKHBvaW50LW1heCkpKQ0KDQooZGVmdW4gcHJvdC1taW5pYnVmZmVyLS1taW5p bXVtLWlucHV0ICgpDQogICJUZXN0IGZvciBtaW5pbXVtIHJlcXVpc2l0ZSBpbnB1dCBmb3IgbGl2 ZSBjb21wbGV0aW9ucy4iDQogICg+PSAobGVuZ3RoIChwcm90LW1pbmlidWZmZXItLWlucHV0LXN0 cmluZykpIHByb3QtbWluaWJ1ZmZlci1taW5pbXVtLWlucHV0KSkNCg0KOzsgQWRhcHRlZCBmcm9t IE9tYXIgQW50b2zDrW4gQ2FtYXJlbmEncyBsaXZlLWNvbXBsZXRpb25zIGxpYnJhcnk6DQo7OyA8 aHR0cHM6Ly9naXRodWIuY29tL29hbnRvbGluL2xpdmUtY29tcGxldGlvbnM+Lg0KKGRlZnVuIHBy b3QtbWluaWJ1ZmZlci0tbGl2ZS1jb21wbGV0aW9ucyAoJnJlc3QgXykNCiAgIlVwZGF0ZSB0aGUg KkNvbXBsZXRpb25zKiBidWZmZXIuDQpNZWFudCB0byBiZSBhZGRlZCB0byBgYWZ0ZXItY2hhbmdl LWZ1bmN0aW9ucycuIg0KICAod2hlbiAobWluaWJ1ZmZlcnApIDsgc2tpcCBpZiB3ZSd2ZSBleGl0 ZWQgYWxyZWFkeQ0KICAgIChsZXQgKCh3aGlsZS1uby1pbnB1dC1pZ25vcmUtZXZlbnRzICcoc2Vs ZWN0aW9uLXJlcXVlc3QpKSkNCiAgICAgICh3aGlsZS1uby1pbnB1dA0KICAgICAgICAoaWYgKHBy b3QtbWluaWJ1ZmZlci0tbWluaW11bS1pbnB1dCkNCiAgICAgICAgICAgIChjb25kaXRpb24tY2Fz ZSBuaWwNCiAgICAgICAgICAgICAgICAoc2F2ZS1tYXRjaC1kYXRhDQogICAgICAgICAgICAgICAg ICAoc2F2ZS1leGN1cnNpb24NCiAgICAgICAgICAgICAgICAgICAgKGdvdG8tY2hhciAocG9pbnQt bWF4KSkNCiAgICAgICAgICAgICAgICAgICAgKGxldCAoKGluaGliaXQtbWVzc2FnZSB0KQ0KICAg ICAgICAgICAgICAgICAgICAgICAgICA7OyBkb24ndCByaW5nIHRoZSBiZWxsIGluIGBtaW5pYnVm ZmVyLWNvbXBsZXRpb24taGVscCcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgd2hlbiA8 PSAxIGNvbXBsZXRpb24gZXhpc3RzLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAocmluZy1i ZWxsLWZ1bmN0aW9uICMnaWdub3JlKSkNCiAgICAgICAgICAgICAgICAgICAgICAobWluaWJ1ZmZl ci1jb21wbGV0aW9uLWhlbHApDQogICAgICAgICAgICAgICAgICAgICAgKHByb3QtbWluaWJ1ZmZl ci0tZml0LWNvbXBsZXRpb25zLXdpbmRvdykpKSkNCiAgICAgICAgICAgICAgKHF1aXQgKGFib3J0 LXJlY3Vyc2l2ZS1lZGl0KSkpDQogICAgICAgICAgKG1pbmlidWZmZXItaGlkZS1jb21wbGV0aW9u cykpKSkpKQ0KDQooZGVmdW4gcHJvdC1taW5pYnVmZmVyLS1saXZlLWNvbXBsZXRpb25zLXRpbWVy ICgmcmVzdCBfKQ0KICAiVXBkYXRlIENvbXBsZXRpb25zIHdpdGggYHByb3QtbWluaWJ1ZmZlci1s aXZlLXVwZGF0ZS1kZWxheScuIg0KICAobGV0ICgoZGVsYXkgcHJvdC1taW5pYnVmZmVyLWxpdmUt dXBkYXRlLWRlbGF5KSkNCiAgICAod2hlbiAoPj0gZGVsYXkgMCkNCiAgICAgIChydW4td2l0aC1p ZGxlLXRpbWVyIGRlbGF5IG5pbCAjJ3Byb3QtbWluaWJ1ZmZlci0tbGl2ZS1jb21wbGV0aW9ucykp KSkNCg0KKGRlZnVuIHByb3QtbWluaWJ1ZmZlci0tc2V0dXAtY29tcGxldGlvbnMgKCkNCiAgIlNl dCB1cCB0aGUgY29tcGxldGlvbnMgYnVmZmVyLiINCiAgKGNvbmQNCiAgICgobWVtYmVyIHRoaXMt Y29tbWFuZCBwcm90LW1pbmlidWZmZXItY29tcGxldGlvbi1wYXNzbGlzdCkNCiAgICAobWluaWJ1 ZmZlci1jb21wbGV0aW9uLWhlbHApDQogICAgKGFkZC1ob29rICdhZnRlci1jaGFuZ2UtZnVuY3Rp b25zICMncHJvdC1taW5pYnVmZmVyLS1saXZlLWNvbXBsZXRpb25zIG5pbCB0KSkNCiAgICgodW5s ZXNzIChtZW1iZXIgdGhpcy1jb21tYW5kIHByb3QtbWluaWJ1ZmZlci1jb21wbGV0aW9uLWJsb2Nr bGlzdCkNCiAgICAoYWRkLWhvb2sgJ2FmdGVyLWNoYW5nZS1mdW5jdGlvbnMgIydwcm90LW1pbmli dWZmZXItLWxpdmUtY29tcGxldGlvbnMtdGltZXIgbmlsIHQpKSkpKQ0KDQooYWRkLWhvb2sgJ21p bmlidWZmZXItc2V0dXAtaG9vayAjJ3Byb3QtbWluaWJ1ZmZlci0tc2V0dXAtY29tcGxldGlvbnMp DQoNCjs7OyMjI2F1dG9sb2FkDQooZGVmdW4gcHJvdC1taW5pYnVmZmVyLXRvZ2dsZS1jb21wbGV0 aW9ucyAoKQ0KICAiVG9nZ2xlIHRoZSBwcmVzZW50YXRpb24gb2YgdGhlIGNvbXBsZXRpb25zJyBi dWZmZXIuIg0KICAoaW50ZXJhY3RpdmUpDQogIChpZiAoZ2V0LWJ1ZmZlci13aW5kb3cgIipDb21w bGV0aW9ucyoiIDApDQogICAgICAobWluaWJ1ZmZlci1oaWRlLWNvbXBsZXRpb25zKQ0KICAgICht aW5pYnVmZmVyLWNvbXBsZXRpb24taGVscCkpKQ0KDQo7OzsjIyNhdXRvbG9hZA0KKGRlZnVuIHBy b3QtbWluaWJ1ZmZlci1rZXlib2FyZC1xdWl0LWR3aW0gKCkNCiAgIkNvbnRyb2wgdGhlIGV4aXQg YmVoYXZpb3VyIGZvciBjb21wbGV0aW9ucycgYnVmZmVycy4NCg0KSWYgaW4gYSBjb21wbGV0aW9u cycgYnVmZmVyIGFuZCB1bmxlc3MgdGhlIHJlZ2lvbiBpcyBhY3RpdmUsIHJ1bg0KYGFib3J0LXJl Y3Vyc2l2ZS1lZGl0Jy4gIE90aGVyd2lzZSBydW4gYGtleWJvYXJkLXF1aXQnLg0KDQpJZiB0aGUg cmVnaW9uIGlzIGFjdGl2ZSwgZGVhY3RpdmF0ZSBpdC4gIEEgc2Vjb25kIGludm9jYXRpb24gb2YN CnRoaXMgY29tbWFuZCBpcyB0aGVuIHJlcXVpcmVkIHRvIGFib3J0IHRoZSBzZXNzaW9uLiINCiAg KGludGVyYWN0aXZlKQ0KICAod2hlbiAoZGVyaXZlZC1tb2RlLXAgJ2NvbXBsZXRpb24tbGlzdC1t b2RlKQ0KICAgIChpZiAodXNlLXJlZ2lvbi1wKQ0KICAgICAgICAoa2V5Ym9hcmQtcXVpdCkNCiAg ICAgIChhYm9ydC1yZWN1cnNpdmUtZWRpdCkpKSkNCg0KKGRlZnVuIHByb3QtbWluaWJ1ZmZlci0t c3dpdGNoLXRvLWNvbXBsZXRpb25zICgpDQogICJTdWJyb3V0aW5lIGZvciBzd2l0Y2hpbmcgdG8g dGhlIGNvbXBsZXRpb25zJyBidWZmZXIuIg0KICAodW5sZXNzIChnZXQtYnVmZmVyLXdpbmRvdyAi KkNvbXBsZXRpb25zKiIgMCkNCiAgICAobWluaWJ1ZmZlci1jb21wbGV0aW9uLWhlbHApKQ0KICAo c3dpdGNoLXRvLWNvbXBsZXRpb25zKQ0KICAocHJvdC1taW5pYnVmZmVyLS1maXQtY29tcGxldGlv bnMtd2luZG93KSkNCg0KOzs7IyMjYXV0b2xvYWQNCihkZWZ1biBwcm90LW1pbmlidWZmZXItc3dp dGNoLXRvLWNvbXBsZXRpb25zLXRvcCAoKQ0KICAiU3dpdGNoIHRvIHRoZSB0b3Agb2YgdGhlIGNv bXBsZXRpb25zJyBidWZmZXIuDQpNZWFudCB0byBiZSBib3VuZCBpbiBgbWluaWJ1ZmZlci1sb2Nh bC1jb21wbGV0aW9uLW1hcCcuIg0KICAoaW50ZXJhY3RpdmUpDQogIChwcm90LW1pbmlidWZmZXIt LXN3aXRjaC10by1jb21wbGV0aW9ucykNCiAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkNCiAgKG5l eHQtY29tcGxldGlvbiAxKSkNCg0KOzs7IyMjYXV0b2xvYWQNCihkZWZ1biBwcm90LW1pbmlidWZm ZXItc3dpdGNoLXRvLWNvbXBsZXRpb25zLWJvdHRvbSAoKQ0KICAiU3dpdGNoIHRvIHRoZSBib3R0 b20gb2YgdGhlIGNvbXBsZXRpb25zJyBidWZmZXIuDQpNZWFudCB0byBiZSBib3VuZCBpbiBgbWlu aWJ1ZmZlci1sb2NhbC1jb21wbGV0aW9uLW1hcCcuIg0KICAoaW50ZXJhY3RpdmUpDQogIChwcm90 LW1pbmlidWZmZXItLXN3aXRjaC10by1jb21wbGV0aW9ucykNCiAgKGdvdG8tY2hhciAocG9pbnQt bWF4KSkNCiAgKG5leHQtY29tcGxldGlvbiAtMSkNCiAgKGdvdG8tY2hhciAocG9pbnQtYXQtYm9s KSkNCiAgKHJlY2VudGVyDQogICAoLSAtMQ0KICAgICAgKG1pbiAobWF4IDAgc2Nyb2xsLW1hcmdp bikNCiAgICAgICAgICAgKHRydW5jYXRlICgvICh3aW5kb3ctYm9keS1oZWlnaHQpIDQuMCkpKSkN CiAgICAgIHQpKQ0KDQo7OzsjIyNhdXRvbG9hZA0KKGRlZnVuIHByb3QtbWluaWJ1ZmZlci1uZXh0 LWNvbXBsZXRpb24tb3ItbWluaSAoJm9wdGlvbmFsIGFyZykNCiAgIk1vdmUgdG8gdGhlIG5leHQg Y29tcGxldGlvbiBvciBzd2l0Y2ggdG8gdGhlIG1pbmlidWZmZXIuDQpUaGlzIHBlcmZvcm1zIGEg cmVndWxhciBtb3Rpb24gZm9yIG9wdGlvbmFsIEFSRyBsaW5lcywgYnV0IHdoZW4NCnBvaW50IGNh biBubyBsb25nZXIgbW92ZSBpbiB0aGF0IGRpcmVjdGlvbiBpdCBzd2l0Y2hlcyB0byB0aGUNCm1p bmlidWZmZXIuIg0KICAoaW50ZXJhY3RpdmUgInAiKQ0KICAoaWYgKG9yIChlb2JwKQ0KICAgICAg ICAgIChlcSAocG9pbnQtbWF4KQ0KICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24gKGZvcndh cmQtbGluZSAxKSAocG9pbnQpKSkpDQogICAgICAocHJvdC1taW5pYnVmZmVyLWZvY3VzLW1pbmli dWZmZXIpDQogICAgKG5leHQtY29tcGxldGlvbiAob3IgYXJnIDEpKSkNCiAgKHNldHEgdGhpcy1j b21tYW5kICduZXh0LWxpbmUpKQ0KDQo7OzsjIyNhdXRvbG9hZA0KKGRlZnVuIHByb3QtbWluaWJ1 ZmZlci1wcmV2aW91cy1jb21wbGV0aW9uLW9yLW1pbmkgKCZvcHRpb25hbCBhcmcpDQogICJNb3Zl IHRvIHRoZSBuZXh0IGNvbXBsZXRpb24gb3Igc3dpdGNoIHRvIHRoZSBtaW5pYnVmZmVyLg0KVGhp cyBwZXJmb3JtcyBhIHJlZ3VsYXIgbW90aW9uIGZvciBvcHRpb25hbCBBUkcgbGluZXMsIGJ1dCB3 aGVuDQpwb2ludCBjYW4gbm8gbG9uZ2VyIG1vdmUgaW4gdGhhdCBkaXJlY3Rpb24gaXQgc3dpdGNo ZXMgdG8gdGhlDQptaW5pYnVmZmVyLiINCiAgKGludGVyYWN0aXZlICJwIikNCiAgKGxldCAoKG51 bSAocHJvdC1jb21tb24tbnVtYmVyLW5lZ2F0aXZlIGFyZykpKQ0KICAgIChpZiAob3IgKGJvYnAp DQogICAgICAgICAgICAoZXEgKHBvaW50KSAoMSsgKHBvaW50LW1pbikpKSkgOyBzZWUgaGFjayBp biBgcHJvdC1taW5pYnVmZmVyLS1jbGVhbi1jb21wbGV0aW9ucycNCiAgICAgICAgKHByb3QtbWlu aWJ1ZmZlci1mb2N1cy1taW5pYnVmZmVyKQ0KICAgICAgKG5leHQtY29tcGxldGlvbiAob3IgbnVt IDEpKSkpKQ0KDQo7OyA7OyBOT1RFIDIwMjEtMDQtMDc6IFRoaXMgd2FzIHdyaXR0ZW4gYXMgYSB0 ZW1wb3Jhcnkgc29sdXRpb24gdG8gZ2V0IGENCjs7IDs7IGNvcHkgb2YgdGhlIGNvbXBsZXRpb25z JyBidWZmZXIuICBJdCBpcyBubyBsb25nZXIgbmVlZGVkIGluIG15DQo7OyA7OyBzZXR1cCBiZWNh dXNlIEVtYmFyaydzIGFiaWxpdHkgdG8gY2FwdHVyZSBhIHNuYXBzaG90IG9mIHRoZQ0KOzsgOzsg Y29tcGxldGlvbiBjYW5kaWRhdGVzIHdvcmtzIGFzIGludGVuZGVkLiAgSXQgYWxzbyBjYXB0dXJl cw0KOzsgOzsgYW5ub3RhdGlvbnMgcHJvdmlkZWQgYnkgTWFyZ2luYWxpYSBhbmQgcmV0YWlucyB0 aGUgZGVmYXVsdCBhY3Rpb24NCjs7IDs7IGF0dGFjaGVkIHRvIGVhY2ggY29tcGxldGlvbiBjYW5k aWRhdGUuDQo7OyA7Ow0KOzsgOzsgSSBhbSBrZWVwaW5nIHRoaXMgaGVyZSBmb3IgcG9zdGVyaXR5 Lg0KOzsgOzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQo7OyA7OyBUaGlzIGRlc2lnbiBpcyBhZGFwdGVkIGZyb20gT21h ciBBbnRvbMOtbiBDYW1hcmVuYSdzIEVtYmFyazoNCjs7IDs7IDxodHRwczovL2dpdGh1Yi5jb20v b2FudG9saW4vZW1iYXJrPi4gIFdlIG5lZWQgdG8gY2FsbCB0aGUNCjs7IDs7IGZ1bmN0aW9uIGFm dGVyIGFib3J0aW5nIHRoZSBtaW5pYnVmZmVyLCBvdGhlcndpc2Ugd2UgY2Fubm90IGdldA0KOzsg OzsgdGhlIG5ldyB3aW5kb3cuDQo7OyAoZGVmdW4gcHJvdC1taW5pYnVmZmVyLS1ydW4tYWZ0ZXIt YWJvcnQgKGZuICZyZXN0IGFyZ3MpDQo7OyAgICJDYWxsIEZOIHdpdGggcmVzdCBBUkdTIHdoaWxl IGFib3J0aW5nIHJlY3Vyc2l2ZSBlZGl0LiINCjs7ICAgKGFwcGx5ICMncnVuLWF0LXRpbWUgMCBu aWwgZm4gYXJncykNCjs7ICAgKGFib3J0LXJlY3Vyc2l2ZS1lZGl0KSkNCjs7IA0KOzsgKGRlZnVu IHByb3QtbWluaWJ1ZmZlci0tZGlzcGxheS1hdC1ib3R0b20gKGJ1Zi1uYW1lKQ0KOzsgICAiRGlz cGxheSBCVUYtTkFNRSBpbiBib3R0b20gd2luZG93LiINCjs7ICAgKGRpc3BsYXktYnVmZmVyLWF0 LWJvdHRvbQ0KOzsgICAgKGdldC1idWZmZXIgYnVmLW5hbWUpDQo7OyAgICAnKCh3aW5kb3ctaGVp Z2h0IC4gc2hyaW5rLXdpbmRvdy1pZi1sYXJnZXItdGhhbi1idWZmZXIpKSkpDQo7Ow0KOzs7IyMj YXV0b2xvYWQNCjs7IChkZWZ1biBwcm90LW1pbmlidWZmZXItc2F2ZS1jb21wbGV0aW9ucyAoKQ0K OzsgICAiU2F2ZSBjb21wbGV0aW9ucyBpbiBhIGJlc3Bva2UgYnVmZmVyLiINCjs7ICAgKGludGVy YWN0aXZlKQ0KOzsgICAobGV0KiAoKGNvbXBsZXRpb24gKHdoZW4gKGFjdGl2ZS1taW5pYnVmZmVy LXdpbmRvdykNCjs7ICAgICAgICAgICAgICAgICAgICAgICAgKHNhdmUtZXhjdXJzaW9uDQo7OyAg ICAgICAgICAgICAgICAgICAgICAgICAgKHByb3QtbWluaWJ1ZmZlci1mb2N1cy1taW5pYnVmZmVy KQ0KOzsgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm90LW1pbmlidWZmZXItLWlucHV0LXN0 cmluZykpKSkNCjs7ICAgICAgICAgIChidWYtbmFtZSAoZm9ybWF0ICIqJXMgIyBDb21wbGV0aW9u cyoiIGNvbXBsZXRpb24pKSkNCjs7ICAgICAod2hlbiAoZ2V0LWJ1ZmZlciBidWYtbmFtZSkNCjs7 ICAgICAgIChraWxsLWJ1ZmZlciBidWYtbmFtZSkpDQo7OyAgICAgKG1pbmlidWZmZXItY29tcGxl dGlvbi1oZWxwKQ0KOzsgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyICIqQ29tcGxldGlvbnMqIg0K OzsgICAgICAgKGNsb25lLWJ1ZmZlciBidWYtbmFtZSkpDQo7OyAgICAgKHByb3QtbWluaWJ1ZmZl ci0tcnVuLWFmdGVyLWFib3J0ICMncHJvdC1taW5pYnVmZmVyLS1kaXNwbGF5LWF0LWJvdHRvbSBi dWYtbmFtZSkpKQ0KDQo7OzsjIyNhdXRvbG9hZA0KKGRlZnVuIHByb3QtbWluaWJ1ZmZlci1jaG9v c2UtY29tcGxldGlvbi1leGl0ICgpDQogICJSdW4gYGNob29zZS1jb21wbGV0aW9uJyBpbiB0aGUg Q29tcGxldGlvbnMgYnVmZmVyIGFuZCBleGl0LiINCiAgKGludGVyYWN0aXZlKQ0KICAod2hlbiAo YW5kIChkZXJpdmVkLW1vZGUtcCAnY29tcGxldGlvbi1saXN0LW1vZGUpDQogICAgICAgICAgICAg KGFjdGl2ZS1taW5pYnVmZmVyLXdpbmRvdykpDQogICAgKGNob29zZS1jb21wbGV0aW9uKQ0KICAg IChtaW5pYnVmZmVyLWZvcmNlLWNvbXBsZXRlLWFuZC1leGl0KSkpDQoNCihkZWZ1biBwcm90LW1p bmlidWZmZXItLWdvdG8tbGluZSAobiAmb3B0aW9uYWwgYXJncykNCiAgIkdvIHRvIGxpbmUgTiBp biB0aGUgQ29tcGxldGlvbnMnIHdpdGggb3B0aW9uYWwgQVJHUy4iDQogIChsZXQgKChib3VuZHMg KGNvdW50LWxpbmVzIChwb2ludC1taW4pIChwb2ludC1tYXgpKSkpDQogICAgKGlmICg8PSBuIGJv dW5kcykNCiAgICAgICAgKHByb2duDQogICAgICAgICAgYCgsQGFyZ3MpDQogICAgICAgICAgKGdv dG8tY2hhciAocG9pbnQtbWluKSkNCiAgICAgICAgICAoZm9yd2FyZC1saW5lICgxLSBuKSkNCiAg ICAgICAgICAoY2hvb3NlLWNvbXBsZXRpb24pKQ0KICAgICAgKHVzZXItZXJyb3IgIiVkIGlzIG5v dCB3aXRoaW4gQ29tcGxldGlvbnMnIGJ1ZmZlciBib3VuZHMgKCVkKSIgbiBib3VuZHMpKSkpDQoN Cjs7OyMjI2F1dG9sb2FkDQooZGVmdW4gcHJvdC1taW5pYnVmZmVyLWNob29zZS1jb21wbGV0aW9u LW51bWJlciAobikNCiAgIlNlbGVjdCBjb21wbGV0aW9uIGNhbmRpZGF0ZSBvbiBsaW5lIG51bWJl ciBOIHdpdGggcHJlZml4IGFyZy4NCg0KVGhlIGlkZWEgaXMgdG8gcGFzcyBhIHByZWZpeCBudW1l cmljIGFyZ3VtZW50IHRoYXQgcmVmZXJzIHRvIGENCmxpbmUgbnVtYmVyIGluIHRoZSBDb21wbGV0 aW9ucycgYnVmZmVyLiINCiAgKGludGVyYWN0aXZlICJwIikNCiAgKGlmIGN1cnJlbnQtcHJlZml4 LWFyZw0KICAgICAgKGNvbmQNCiAgICAgICAoKGFuZCAoZGVyaXZlZC1tb2RlLXAgJ2NvbXBsZXRp b24tbGlzdC1tb2RlKQ0KICAgICAgICAgICAgIChhY3RpdmUtbWluaWJ1ZmZlci13aW5kb3cpKQ0K ICAgICAgICAocHJvdC1taW5pYnVmZmVyLS1nb3RvLWxpbmUgbikpDQogICAgICAgKChhbmQgKG1p bmlidWZmZXJwKQ0KICAgICAgICAgICAgIChwcm90LW1pbmlidWZmZXItLWdldC1jb21wbGV0aW9u LXdpbmRvdykpDQogICAgICAgIChwcm90LW1pbmlidWZmZXItLWdvdG8tbGluZSBuIChzZWxlY3Qt d2luZG93IChwcm90LW1pbmlidWZmZXItLWdldC1jb21wbGV0aW9uLXdpbmRvdykpKSkNCiAgICAg ICAodA0KICAgICAgICAodXNlci1lcnJvciAiT25seSB1c2UgdGhpcyBpbnNpZGUgdGhlIG1pbmli dWZmZXIgb2YgdGhlIENvbXBsZXRpb25zIikpKQ0KICAgICh1c2VyLWVycm9yICJQYXNzIGEgbnVt ZXJpYyBhcmd1bWVudCBmaXJzdCIpKSkNCg0KKGRlZnZhciBjcm0tY29tcGxldGlvbi10YWJsZSkN Cg0KOzs7IyMjYXV0b2xvYWQNCihkZWZ1biBwcm90LW1pbmlidWZmZXItY2hvb3NlLWNvbXBsZXRp b24tZHdpbSAoKQ0KICAiQXBwZW5kIHRvIG1pbmlidWZmZXIgd2hlbiBhdCBgY29tcGxldGluZy1y ZWFkLW11bHRpcGxlJyBwcm9tcHQuDQpPdGhlcndpc2UgYmVoYXZlIGxpa2UgYHByb3QtbWluaWJ1 ZmZlci1jaG9vc2UtY29tcGxldGlvbi1leGl0Jy4iDQogIChpbnRlcmFjdGl2ZSkNCiAgKHdoZW4g KGFuZCAoZGVyaXZlZC1tb2RlLXAgJ2NvbXBsZXRpb24tbGlzdC1tb2RlKQ0KICAgICAgICAgICAg IChhY3RpdmUtbWluaWJ1ZmZlci13aW5kb3cpKQ0KICAgIChjaG9vc2UtY29tcGxldGlvbikNCiAg ICAod2l0aC1jdXJyZW50LWJ1ZmZlciAod2luZG93LWJ1ZmZlciAoYWN0aXZlLW1pbmlidWZmZXIt d2luZG93KSkNCiAgICAgICh1bmxlc3MgKGVxIChwcm90LW1pbmlidWZmZXItLWNvbXBsZXRpb24t Y2F0ZWdvcnkpICdmaWxlKQ0KICAgICAgICAobWluaWJ1ZmZlci1mb3JjZS1jb21wbGV0ZSkpDQog ICAgICAod2hlbiBjcm0tY29tcGxldGlvbi10YWJsZQ0KICAgICAgICA7OyBGSVhNRSAyMDIxLTA0 LTAyOiBhc3N1bWVzIHRoZSBgY3JtLXNlcGFyYXRvcicgYXMgY29uc3RhbnQuDQogICAgICAgIDs7 IFVQREFURSAyMDIxLTA0LTIyOiBhY3R1YWxseSBgY3JtLWRlZmF1bHQtc2VwYXJhdG9yJyBpcyBh DQogICAgICAgIDs7IGRlZmNvbnN0LCBzbyBJIGFtIGxlYXZpbmcgdGhpcyBoZXJlIGp1c3QgaW4g Y2FzZSBJIGV2ZXIgbmVlZA0KICAgICAgICA7OyBpdC4gIFdlIHdpbGwgaGF2ZSBhIHByb2JsZW0g aWYgc29tZSBjb21tYW5kIGxldC1iaW5kcyBpdHMgb3duDQogICAgICAgIDs7IHZhbHVlLCBidXQg aXQgaXMgbm90IG91ciBmYXVsdCBoZXJlLi4uDQogICAgICAgIChpbnNlcnQgIiwiKQ0KICAgICAg ICAobGV0ICgoaW5oaWJpdC1tZXNzYWdlIHQpKQ0KICAgICAgICAgIChzd2l0Y2gtdG8tY29tcGxl dGlvbnMpKSkpKSkNCg0KOzs7OyBTaW1wbGUgYWN0aW9ucyBmb3IgdGhlICIqQ29tcGxldGlvbnMq IiBidWZmZXINCg0KOzsgREVQUkVDQVRFRDogSSBqdXN0IHVzZSBFbWJhcmsgZm9yIHN1Y2ggdGFz a3MsIGJ1dCBhbSBrZWVwaW5nIHRoaXMNCjs7IGFyb3VuZCBpbiBjYXNlIEkgZXZlciBuZWVkIGl0 Lg0KDQo7OyBBZGFwdGVkIGZyb20gYGNob29zZS1jb21wbGV0aW9uJy4NCihkZWZ1biBwcm90LW1p bmlidWZmZXItLWNvbXBsZXRpb24tYXQtcG9pbnQgKCkNCiAgIkZpbmQgY29tcGxldGlvbiBjYW5k aWRhdGUgYXQgcG9pbnQgaW4gdGhlIENvbXBsZXRpb25zIGJ1ZmZlci4iDQogICh3aGVuIChkZXJp dmVkLW1vZGUtcCAnY29tcGxldGlvbi1saXN0LW1vZGUpDQogICAgKGxldCAoYmVnIGVuZCkNCiAg ICAgIChjb25kDQogICAgICAgKChhbmQgKG5vdCAoZW9icCkpIChnZXQtdGV4dC1wcm9wZXJ0eSAo cG9pbnQpICdtb3VzZS1mYWNlKSkNCiAgICAgICAgKHNldHEgZW5kIChwb2ludCkgYmVnICgxKyAo cG9pbnQpKSkpDQogICAgICAgKChhbmQgKG5vdCAoYm9icCkpDQogICAgICAgICAgICAgKGdldC10 ZXh0LXByb3BlcnR5ICgxLSAocG9pbnQpKSAnbW91c2UtZmFjZSkpDQogICAgICAgIChzZXRxIGVu ZCAoMS0gKHBvaW50KSkgYmVnIChwb2ludCkpKQ0KICAgICAgIDs7ICgoYW5kIChib2JwKSAgIDsg c2VlIGhhY2sgaW4gYHByb3QtbWluaWJ1ZmZlci0tY2xlYW4tY29tcGxldGlvbnMnDQogICAgICAg OzsgICAgICAgKGdldC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ2ludmlzaWJsZSkpDQogICAgICAg OzsgIChzYXZlLWV4Y3Vyc2lvbg0KICAgICAgIDs7ICAgIChmb3J3YXJkLWNoYXIgMSkNCiAgICAg ICA7OyAgICAoc2V0cSBlbmQgKHBvaW50KSBiZWcgKDErIChwb2ludCkpKSkpDQogICAgICAgKHQg KHVzZXItZXJyb3IgIk5vIGNvbXBsZXRpb24gaGVyZSIpKSkNCiAgICAgIChzZXRxIGJlZyAocHJl dmlvdXMtc2luZ2xlLXByb3BlcnR5LWNoYW5nZSBiZWcgJ21vdXNlLWZhY2UpKQ0KICAgICAgKHNl dHEgZW5kIChvciAobmV4dC1zaW5nbGUtcHJvcGVydHktY2hhbmdlIGVuZCAnbW91c2UtZmFjZSkN CiAgICAgICAgICAgICAgICAgICAgKHBvaW50LW1heCkpKQ0KICAgICAgKGJ1ZmZlci1zdWJzdHJp bmctbm8tcHJvcGVydGllcyBiZWcgZW5kKSkpKQ0KDQooZGVmbWFjcm8gcHJvdC1taW5pYnVmZmVy LWNvbXBsZXRpb25zLWJ1ZmZlci1hY3QgKG5hbWUgZG9jICZyZXN0IGJvZHkpDQogICJQcm9kdWNl IE5BTUUgZnVuY3Rpb24gd2l0aCBET0MgYW5kIHJlc3QgQk9EWS4NClRoaXMgaXMgbWVhbnQgdG8g ZGVmaW5lIHNvbWUgYmFzaWMgY29tbWFuZHMgZm9yIHVzZSBpbiB0aGUNCkNvbXBsZXRpb25zJyBi dWZmZXIuIg0KICBgKGRlZnVuICxuYW1lICgpDQogICAgICxkb2MNCiAgICAgKGludGVyYWN0aXZl KQ0KICAgICAobGV0ICgoY29tcGxldGlvbnMtYnVmZmVyIChnZXQtYnVmZmVyICIqQ29tcGxldGlv bnMqIikpDQogICAgICAgICAgIChzeW1ib2wgKHByb3QtbWluaWJ1ZmZlci0tY29tcGxldGlvbi1h dC1wb2ludCkpKQ0KICAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGNvbXBsZXRpb25zLWJ1ZmZl cg0KICAgICAgICAgLEBib2R5KSkpKQ0KDQoocHJvdC1taW5pYnVmZmVyLWNvbXBsZXRpb25zLWJ1 ZmZlci1hY3QNCiBwcm90LW1pbmlidWZmZXItY29tcGxldGlvbnMta2lsbC1zeW1ib2wtYXQtcG9p bnQNCiAiQXBwZW5kIGBzeW1ib2wtYXQtcG9pbnQnIHRvIHRoZSBga2lsbC1yaW5nJy4NCkludGVu ZGVkIHRvIGJlIHVzZWQgZnJvbSBpbnNpZGUgdGhlIENvbXBsZXRpb25zJyBidWZmZXIuIg0KIChr aWxsLW5ldyBzeW1ib2wpDQogKG1lc3NhZ2UgIkNvcGllZCAlcyB0byBraWxsLXJpbmciDQogICAg ICAgICAgKHByb3BlcnRpemUgc3ltYm9sICdmYWNlICdzdWNjZXNzKSkpDQoNCihwcm90LW1pbmli dWZmZXItY29tcGxldGlvbnMtYnVmZmVyLWFjdA0KIHByb3QtbWluaWJ1ZmZlci1jb21wbGV0aW9u cy1pbnNlcnQtc3ltYm9sLWF0LXBvaW50DQogIkFkZCBgc3ltYm9sLWF0LXBvaW50JyB0byBsYXN0 IGFjdGl2ZSB3aW5kb3cuDQpJbnRlbmRlZCB0byBiZSB1c2VkIGZyb20gaW5zaWRlIHRoZSBDb21w bGV0aW9ucycgYnVmZmVyLiINCiAobGV0ICgod2luZG93ICh3aW5kb3ctYnVmZmVyIChnZXQtbXJ1 LXdpbmRvdykpKSkNCiAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIHdpbmRvdw0KICAgICAoaW5zZXJ0 IHN5bWJvbCkNCiAgICAgKG1lc3NhZ2UgIkluc2VydGVkICVzIg0KICAgICAgICAgICAgICAocHJv cGVydGl6ZSBzeW1ib2wgJ2ZhY2UgJ3N1Y2Nlc3MpKSkpKQ0KDQoocHJvdC1taW5pYnVmZmVyLWNv bXBsZXRpb25zLWJ1ZmZlci1hY3QNCiBwcm90LW1pbmlidWZmZXItY29tcGxldGlvbnMtaW5zZXJ0 LXN5bWJvbC1hdC1wb2ludC1leGl0DQogIkFkZCBgc3ltYm9sLWF0LXBvaW50JyB0byBsYXN0IHdp bmRvdyBhbmQgZXhpdCBhbGwgbWluaWJ1ZmZlcnMuDQpJbnRlbmRlZCB0byBiZSB1c2VkIGZyb20g aW5zaWRlIHRoZSBDb21wbGV0aW9ucycgYnVmZmVyLiINCiAobGV0ICgod2luZG93ICh3aW5kb3ct YnVmZmVyIChnZXQtbXJ1LXdpbmRvdykpKSkNCiAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIHdpbmRv dw0KICAgICAoaW5zZXJ0IHN5bWJvbCkNCiAgICAgKG1lc3NhZ2UgIkluc2VydGVkICVzIg0KICAg ICAgICAgICAgICAocHJvcGVydGl6ZSBzeW1ib2wgJ2ZhY2UgJ3N1Y2Nlc3MpKSkpDQogKHRvcC1s ZXZlbCkpDQoNCihwcm92aWRlICdwcm90LW1pbmlidWZmZXIpDQo7OzsgcHJvdC1taW5pYnVmZmVy LmVsIGVuZHMgaGVyZQ0K --=-=-=--