From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Okamsn via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#70208: [PATCH] Add command `list-keyboard-macros` Date: Sat, 06 Apr 2024 23:26:15 +0000 Message-ID: <8dd6fcfa-2fc0-4371-b5a9-1f451ff1e9a4@protonmail.com> References: <86msq85o7n.fsf@gnu.org> Reply-To: Okamsn Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_ARlJZH7KfoRCL5Ziruu9GLcJJJDgayr6hFHXuYrPgw" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="36541"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 70208@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sun Apr 07 01:27:22 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@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 1rtFRR-0009J3-US for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 07 Apr 2024 01:27:22 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rtFR5-0000P7-EN; Sat, 06 Apr 2024 19:26:59 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rtFR2-0000Oj-UR for bug-gnu-emacs@gnu.org; Sat, 06 Apr 2024 19:26:56 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rtFR2-0002Ve-LE for bug-gnu-emacs@gnu.org; Sat, 06 Apr 2024 19:26:56 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1rtFR8-0003ZB-F5 for bug-gnu-emacs@gnu.org; Sat, 06 Apr 2024 19:27:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Okamsn Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 06 Apr 2024 23:27:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 70208 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 70208-submit@debbugs.gnu.org id=B70208.171244600613670 (code B ref 70208); Sat, 06 Apr 2024 23:27:02 +0000 Original-Received: (at 70208) by debbugs.gnu.org; 6 Apr 2024 23:26:46 +0000 Original-Received: from localhost ([127.0.0.1]:41266 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rtFQq-0003YM-6i for submit@debbugs.gnu.org; Sat, 06 Apr 2024 19:26:46 -0400 Original-Received: from mail-40134.protonmail.ch ([185.70.40.134]:33893) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rtFQk-0003Wu-3F for 70208@debbugs.gnu.org; Sat, 06 Apr 2024 19:26:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1712445984; x=1712705184; bh=nAxWnDFTTqhJwUnyWL75NqFSEwGUMPXKUXPeKXEvfxs=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=aIyiwTnGMaN4j0AdALiKAdTnwQ7jYj7KSoCqaw4wncXDrm705jMMngO4H6Hb60gT5 k4thRDbqFBy+w2q0CQ5qoe0nRacMzl5tnTrinPu2R1gCCTGZL9pAes6gCsplPA4tSc nxVTz5XuMBfhTb7WGUyPPu0JuYcSffqVnFO1CpdBkI5YUy+jt0cGNPAKM8SQTGd7qY cW7l6TKT283QavPLrUs7Jq130+Ukk97reTIcgz/RoXfUHuqshASXURxoeLsErHDJm2 wwRdYgK8puNZL0pdW5frN5579bVioFrBH22x5K2H8t33vONpgEpj/77I/Oi6NGPlCl uqkHA2//aiobw== In-Reply-To: <86msq85o7n.fsf@gnu.org> Feedback-ID: 25935600:user:proton X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:282827 Archived-At: This is a multi-part message in MIME format. --b1_ARlJZH7KfoRCL5Ziruu9GLcJJJDgayr6hFHXuYrPgw Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Eli Zaretskii wrote: >> --- a/doc/emacs/kmacro.texi >> +++ b/doc/emacs/kmacro.texi >> @@ -24,6 +24,12 @@ Keyboard Macros >> keyboard macro is defined and also has been, in effect, executed once. >> You can then do the whole thing over again by invoking the macro. >> >> + The list of defined keyboard macros can be seen via @kbd{M-x >> +list-keyboard-macros @key{RET}}. This command can be used to re-order >> +the list of defined macros (the @dfn{keyboard macro ring}) and to edit >> +the properties of those keyboard macros, which are described in the >> +following subsections. >=20 > Please rewrite this not to use passive tense so much ("can be seen", > "can be used"). >=20 > Also, I think this command should be documented in more detail, > including the commands in kmacro-menu-mode-map, later in the manual. > In any case, each documented command should be indexed, with an > explicit @findex. I moved the description to its own section. How is it now? I copied part=20 of the Texinfo documentation of `list-buffers` and the Buffer Menu node. >> +*** New mode and new command 'list-keyboard-macros'. >=20 > You say "new mode", but don't mention the mode or its name. >=20 > Also, since the manuals have been updated by the patch, this entry > should be marked with "+++". Done. >> +(defvar tabulated-list-format) >> +(defvar tabulated-list-entries) >> +(defvar tabulated-list-sort-key) >> +(declare-function tabulated-list-init-header "tabulated-list" ()) >> +(declare-function tabulated-list-print "tabulated-list" >> + (&optional remember-pos update)) >=20 > tabulated-list is preloaded, so I don't think these are needed. Removed. >> +(defface kmacro-menu-mark '((t (:inherit font-lock-constant-face))) >> + "Face used for the Keyboard Macro Menu marks." >> + :group 'kmacro) >> + >> +(defface kmacro-menu-flagged '((t (:inherit error))) >> + "Face used for keyboard macros flagged for deletion." >> + :group 'kmacro) >> + >> +(defface kmacro-menu-marked '((t (:inherit warning))) >> + "Face used for keyboard macros marked for duplication." >> + :group 'kmacro) >=20 > Please add a :version tag to new faces. Done. >> +(define-derived-mode kmacro-menu-mode tabulated-list-mode >> + "Keyboard Macro Menu" >> + "Major mode for listing keyboard macros." > ^^^^^^^ > "listing and editing", I think? Done. >> +(defun kmacro-menu--kmacros () >> + "Return a list of the existing keyboard macros." > ^^^^^^ > "the list" >=20 > Also, I think this should say "or nil, if none are defined". Changed. >> +(defun kmacro-menu--map-ids (function) >> + "Map a FUNCTION to the current table entry IDs in order. >=20 > Our style is to say "Map FUNCTION", without "a". >=20 > Better yet, say "Apply FUNCTION to current table's entries in order." >=20 >> +Returns a list of the output of FUNCTION." >=20 > "Return", to be consistent with "Map". Changed. >> +(defun kmacro-menu--update (kmacros) >> + "Update the variables for the current and previous keyboard macros. >=20 > This doc string doesn't say what are the "variables" to which it > alludes. Changed. >> +(defun kmacro-menu--update-at (kmacro n) >> + "Update to KMACRO at position N." >=20 > Not sure I understand what you mean by "Update to" here. Update what? I changed the functions to use "replace" instead of "update". What I=20 meant was that only existing keyboard macro at that position would be=20 replaced. The others would be re-used. >> + (kmacro-menu--update >> + (kmacro-menu--map-ids (lambda (id) >> + (if (=3D n (kmacro-menu--id-position id)) >> + kmacro >> + (kmacro-menu--id-kmacro id)))))) >> + >> +(defun kmacro-menu--query-revert () >> + "When the table differs from the existing macros, ask whether to reve= rt table." > ^^^^ > Not "When", but "If", right? Yes. Changed. >> + (interactive) >=20 > Interactive functions (i.e. commands) should never be internal, so the > double-dash in the name is inappropriate. That function wasn't meant to be a command. I removed the `interactive` use= . > ...=20 I changed the wording of the commands that act on the region when there=20 is one. Please check them again. >=20 >> +(defun kmacro-menu-edit-format () >> + "Edit the counter format of the keyboard macro at point." >=20 > Should the doc string say more about what is a valid format that the > user can type. I added that. >> +(defun kmacro-menu-edit-counter () >> + "Edit the counter of the keyboard macro at point." >=20 > Any motivation? why would a user want to edit the counter? Sometimes, I want to fix a mistake in a keyboard macro and then re-run=20 it with a previous counter value. Another possibility is duplicating a=20 macro, changing the definition somewhat for a different context, and=20 then setting the counter back to 0 or another value. > Last, but not least: please consider making at least some of the > commands in this patch specific to kmacro-menu-mode. That is what I meant to do by giving the mode in the `declare` form. I=20 added the mode for the `interactive` form too. Is that what you mean? Thank you. --b1_ARlJZH7KfoRCL5Ziruu9GLcJJJDgayr6hFHXuYrPgw Content-Type: text/x-patch; charset=UTF-8; name=v2-0001-Add-command-list-keyboard-macros-that-works-like-.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0001-Add-command-list-keyboard-macros-that-works-like-.patch RnJvbSA3Yzk1ODlmZGJmZjIyOGE0MDBhMWFmNTE2OWU5NTMyMWZmNDllZTdhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBFYXJsIEh5YXR0IDxva2Ftc25AcHJvdG9ubWFpbC5jb20+CkRh dGU6IFN1biwgMjQgTWFyIDIwMjQgMTE6NDk6MjEgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyXSBB ZGQgY29tbWFuZCAnbGlzdC1rZXlib2FyZC1tYWNyb3MnIHRoYXQgd29ya3MgbGlrZQogJ2xpc3Qt YnVmZmVycycuCgpUaGUgY29tbWFuZCAnbGlzdC1rZXlib2FyZC1tYWNyb3MnIGFsbG93cyBlZGl0 aW5nIGFuZCByZS1hcnJhbmdpbmcKbWFjcm9zIHVzaW5nICd0YWJ1bGF0ZWQtbGlzdC1tb2RlJy4g IEV4aXN0aW5nIGtleWJvYXJkIG1hY3JvcyBjYW4gYmUKZHVwbGljYXRlZCBvciBkZWxldGVkLiAg TWFjcm8gY291bnRlcnMgYW5kIGNvdW50ZXIgZm9ybWF0cyBjYW4gdGFrZSBuZXcKdmFsdWVzIHJl YWQgZnJvbSB0aGUgbWluaWJ1ZmZlci4gIE1hY3JvIGtleXMgY2FuIGJlIGVkaXRlZCB1c2luZwon ZWRpdC1rYmQtbWFjcm8nLgoKKiBkb2MvZW1hY3Mva21hY3JvLnRleGkgKEttYWNybyBNZW51KTog RG9jdW1lbnQgdGhlIG5ldyBjb21tYW5kCmFuZCB0aGUgbWVudSdzIGNvbW1hbmRzLgoqIGV0Yy9O RVdTIChLbWFjcm8gTWVudSBNb2RlKTogTWVudGlvbiB0aGUgbmV3IG1vZGUgYW5kIGNvbW1hbmQu CiogbGlzcC9rbWFjcm8uZWwgKGttYWNyby1tZW51LW1hcmssIGttYWNyby1tZW51LW1hcmtlZCkK KGttYWNyby1tZW51LWZsYWdnZWQpOiBBZGQgZmFjZXMgZm9yIG1hcmtzIGFuZCBmbGFncy4KKiBs aXNwL2ttYWNyby5lbCAoa21hY3JvLW1lbnUtbW9kZS1tYXAsIGttYWNyby1tZW51LW1vZGUpOiBB ZGQgbW9kZQphbmQgbWFwLgoqIGxpc3Ava21hY3JvLmVsIChsaXN0LWtleWJvYXJkLW1hY3Jvcywg a21hY3JvLW1lbnUpOiBBZGQgY29tbWFuZC4KKiBsaXNwL2ttYWNyby5lbCAoa21hY3JvLW1lbnUt LWRlbGV0aW9uLWZsYWdzLCBrbWFjcm8tbWVudS0tbWFya3MpCihrbWFjcm8tbWVudS0taWQta21h Y3JvLCBrbWFjcm8tbWVudS0taWQtcG9zaXRpb24sIGttYWNyby1tZW51LS1rbWFjcm9zKQooa21h Y3JvLW1lbnUtLXJlZnJlc2gsIGttYWNyby1tZW51LS1tYXAtaWRzLCBrbWFjcm8tbWVudS0tcmVw bGFjZS1hbGwpCihrbWFjcm8tbWVudS0tcmVwbGFjZS1hdCwga21hY3JvLW1lbnUtLXF1ZXJ5LXJl dmVydCwga21hY3JvLW1lbnUtLWFzc2VydC1yb3cpCihrbWFjcm8tbWVudS0tcHJvcGVydGl6ZS1r ZXlzLCBrbWFjcm8tbWVudS0tZG8tcmVnaW9uKQooa21hY3JvLW1lbnUtLW1hcmtzLWV4aXN0LXAp OiBBZGQgdXRpbGl0eSBmdW5jdGlvbnMgb2YgbW9kZQphbmQgY29tbWFuZHMuCiogbGlzcC9rbWFj cm8uZWwgKGttYWNyby1tZW51LW1hcmssIGttYWNyby1tZW51LWZsYWctZm9yLWRlbGV0aW9uKQoo a21hY3JvLW1lbnUtdW5tYXJrLCBrbWFjcm8tbWVudS11bm1hcmstYmFja3dhcmQpCihrbWFjcm8t bWVudS11bm1hcmstYWxsKTogQWRkIGNvbW1hbmRzIGZvciBtYXJrcyBhbmQgZmxhZ3MuCiogbGlz cC9rbWFjcm8uZWwgKGttYWNyby1tZW51LWRvLWZsYWdnZWQtZGVsZXRlLCBrbWFjcm8tbWVudS1k by1jb3B5KQooa21hY3JvLW1lbnUtZG8tZGVsZXRlKTogQWRkIGNvbW1hbmRzIHRoYXQgbW9kaWZ5 IHRoZSByaW5nLgoqIGxpc3Ava21hY3JvLmVsIChrbWFjcm8tbWVudS1lZGl0LXBvc2l0aW9uLCBr bWFjcm8tbWVudS10cmFuc3Bvc2UpCihrbWFjcm8tbWVudS1lZGl0LWZvcm1hdCwga21hY3JvLW1l bnUtZWRpdC1jb3VudGVyKQooa21hY3JvLW1lbnUtZWRpdC1rZXlzLCBrbWFjcm8tbWVudS1lZGl0 LWNvbHVtbik6IEFkZCBjb21tYW5kcyB0aGF0Cm1vZGlmeSBhIGtleWJvYXJkIG1hY3JvLgotLS0K IGRvYy9lbWFjcy9rbWFjcm8udGV4aSB8IDE1OCArKysrKysrKysrKysrCiBldGMvTkVXUyAgICAg ICAgICAgICAgfCAgMTAgKwogbGlzcC9rbWFjcm8uZWwgICAgICAgIHwgNTIzICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA2OTEgaW5z ZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RvYy9lbWFjcy9rbWFjcm8udGV4aSBiL2RvYy9lbWFj cy9rbWFjcm8udGV4aQppbmRleCBlMzBkZWYzNDQ3NS4uMGUyMjM2MzU1ZjIgMTAwNjQ0Ci0tLSBh L2RvYy9lbWFjcy9rbWFjcm8udGV4aQorKysgYi9kb2MvZW1hY3Mva21hY3JvLnRleGkKQEAgLTQy LDYgKzQyLDggQEAgS2V5Ym9hcmQgTWFjcm9zCiAqIEVkaXQgS2V5Ym9hcmQgTWFjcm86OiAgICAg IEVkaXRpbmcga2V5Ym9hcmQgbWFjcm9zLgogKiBLZXlib2FyZCBNYWNybyBTdGVwLUVkaXQ6OiBJ bnRlcmFjdGl2ZWx5IGV4ZWN1dGluZyBhbmQgZWRpdGluZyBhIGtleWJvYXJkCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbWFjcm8uCisqIEttYWNybyBNZW51OjogICAgICAgICAgICAg IEFuIGludGVyZmFjZSBmb3Igdmlld2luZyBhbmQgZWRpdGluZworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGtleWJvYXJkIG1hY3JvcyBhbmQgdGhlIGtleWJvYXJkIG1hY3JvIHJpbmcu CiBAZW5kIG1lbnUKIAogQG5vZGUgQmFzaWMgS2V5Ym9hcmQgTWFjcm8KQEAgLTYxNiwzICs2MTgs MTU5IEBAIEtleWJvYXJkIE1hY3JvIFN0ZXAtRWRpdAoga2V5Ym9hcmQgbWFjcm87IGl0IHRoZW4g dGVybWluYXRlcyB0aGUgc3RlcC1lZGl0aW5nIGFuZCByZXBsYWNlcyB0aGUKIG9yaWdpbmFsIGtl eWJvYXJkIG1hY3JvIHdpdGggdGhlIGVkaXRlZCBtYWNyby4KIEBlbmQgaXRlbWl6ZQorCitAbm9k ZSBLbWFjcm8gTWVudQorQHNlY3Rpb24gTGlzdGluZyBLZXlib2FyZCBNYWNyb3MKK0BjaW5kZXgg S21hY3JvIE1lbnUKKworQGNpbmRleCBsaXN0aW5nIGN1cnJlbnQga2V5Ym9hcmQgbWFjcm9zCitA a2luZGV4IE0teCBsaXN0LWtleWJvYXJkLW1hY3JvcyBAa2V5e1JFVH0KK0BmaW5kZXgga21hY3Jv LW1lbnUKK0BmaW5kZXggbGlzdC1rZXlib2FyZC1tYWNyb3MKKyAgVG8gZGlzcGxheSBhIGxpc3Qg b2YgZXhpc3Rpbmcga2V5Ym9hcmQgbWFjcm9zLCB0eXBlIEBrYmR7TS14CitsaXN0LWtleWJvYXJk LW1hY3JvcyBAa2V5e1JFVH19LiAgVGhpcyBwb3BzIHVwIHRoZSBAZGZue0ttYWNybyBNZW51fSBp bgorYSBidWZmZXIgbmFtZWQgQGZpbGV7KktleWJvYXJkIE1hY3JvIExpc3QqfS4gIEVhY2ggbGlu ZSBpbiB0aGUgbGlzdAorc2hvd3Mgb25lIG1hY3JvJ3MgcG9zaXRpb24sIGNvdW50ZXIgdmFsdWUs IGNvdW50ZXIgZm9ybWF0LCB0aGF0IGNvdW50ZXIKK3ZhbHVlIHVzaW5nIHRoYXQgZm9ybWF0LCBh bmQgbWFjcm8ga2V5cy4gIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIG1hY3JvCitsaXN0OgorCitA c21hbGxleGFtcGxlCitQb3NpdGlvbiAgQ291bnRlciAgRm9ybWF0ICAgRm9ybWF0dGVkICBLZXlz CiswICAgICAgICAgICAgICAgMSAgJTAyZCAgICAgMDEgICAgICAgICBOIDogU1BDIDxGMz4gUkVU CisxICAgICAgICAgICAgICAgMCAgJWQgICAgICAgMCAgICAgICAgICBsIG8gbiBnIFNQQyBwIGgg ciBhIHMgZQorQGVuZCBzbWFsbGV4YW1wbGUKKworQG5vaW5kZW50CitUaGUgbWFjcm9zIGFyZSBs aXN0ZWQgd2l0aCB0aGUgY3VycmVudCBtYWNybyBhdCB0aGUgdG9wIGluIHBvc2l0aW9uIHplcm8K K2FuZCB0aGUgb2xkZXIgbWFjcm9zIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSBmb3Vu ZCBpbiB0aGUgbWFjcm8KK3JpbmcgKEBweHJlZntLZXlib2FyZCBNYWNybyBSaW5nfSkuICBVc2lu ZyB0aGUgS21hY3JvIE1lbnUsIHlvdSBjYW4KK2NoYW5nZSB0aGUgb3JkZXIgb2YgdGhlIG1hY3Jv cyBhbmQgY2hhbmdlIHRoZWlyIGNvdW50ZXJzLCBjb3VudGVyCitmb3JtYXRzLCBhbmQga2V5cy4g IFRoZSBLbWFjcm8gTWVudSBpcyBhIHJlYWQtb25seSBidWZmZXIsIGFuZCBjYW4gYmUKK2NoYW5n ZWQgb25seSB0aHJvdWdoIHRoZSBzcGVjaWFsIGNvbW1hbmRzIGRlc2NyaWJlZCBpbiB0aGlzIHNl Y3Rpb24uCitBZnRlciBhIGNvbW1hbmQgaXMgcnVuLCB0aGUgS21hY3JvIE1lbnUgcmVzZXRzIHRv IHNob3cgdGhlIG5ldyB2YWx1ZXMgb2YKK3RoZSBtYWNybyBwcm9wZXJ0aWVzIGFuZCB0aGUgbWFj cm8gcmluZy4gIFRoZSB1c3VhbCBjdXJzb3IgbW90aW9uCitjb21tYW5kcyBjYW4gYmUgdXNlZCBp biB0aGlzIGJ1ZmZlci4KKworICBZb3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRv IGNoYW5nZSBhIG1hY3JvJ3MgcHJvcGVydGllczoKKworQHRhYmxlIEBrYmQKK0BpdGVtICMKK0Bm aW5kZXgga21hY3JvLW1lbnUtZWRpdC1wb3NpdGlvbgorQGtpbmRleCAjIEByeyhLbWFjcm8gTWVu dSl9CitDaGFuZ2UgdGhlIHBvc2l0aW9uIG9mIHRoZSBtYWNybyBvbiB0aGUgY3VycmVudCBsaW5l CisoQHB4cmVme0tleWJvYXJkIE1hY3JvIFJpbmd9KS4KKworQGl0ZW0gQy14IEMtdAorQGZpbmRl eCBrbWFjcm8tbWVudS10cmFuc3Bvc2UKK0BraW5kZXggQy14IEMtdCBAcnsoS21hY3JvIE1lbnUp fQorTW92ZSB0aGUgbWFjcm8gb24gdGhlIGN1cnJlbnQgbGluZSB0byB0aGUgbGluZSBhYm92ZSwg bGlrZSBpbgorQGNvZGV7dHJhbnNwb3NlLWxpbmVzfS4KKworQGl0ZW0gYworQGZpbmRleCBrbWFj cm8tbWVudS1lZGl0LWNvdW50ZXIKK0BraW5kZXggYyBAcnsoS21hY3JvIE1lbnUpfQorQ2hhbmdl IHRoZSBjb3VudGVyIHZhbHVlIG9mIHRoZSBtYWNybyBvbiB0aGUgY3VycmVudCBsaW5lCisoQHB4 cmVme0tleWJvYXJkIE1hY3JvIENvdW50ZXJ9KS4KKworQGl0ZW0gZgorQGZpbmRleCBrbWFjcm8t bWVudS1lZGl0LWZvcm1hdAorQGtpbmRleCBmIEByeyhLbWFjcm8gTWVudSl9CitDaGFuZ2UgdGhl IGNvdW50ZXIgZm9ybWF0IG9mIHRoZSBtYWNybyBvbiB0aGUgY3VycmVudCBsaW5lLgorCitAaXRl bSBlCitAZmluZGV4IGttYWNyby1tZW51LWVkaXQta2V5cworQGtpbmRleCBlIEByeyhLbWFjcm8g TWVudSl9CitDaGFuZ2UgdGhlIGtleXMgb2YgdGhlIG1hY3JvIG9uIHRoZSBjdXJyZW50IGxpbmUg dXNpbmcKK0Bjb2Rle2VkaXQta2JkLW1hY3JvfSAoQHB4cmVme0VkaXQgS2V5Ym9hcmQgTWFjcm99 KS4KKworQGl0ZW0gQGtleXtSRVR9CitAZmluZGV4IGttYWNyby1tZW51LWVkaXQtY29sdW1uCitA a2luZGV4IEBrZXl7UkVUfSBAcnsoS21hY3JvIE1lbnUpfQorQ2hhbmdlIHRoZSB2YWx1ZSBpbiB0 aGUgY3VycmVudCBjb2x1bW4gb2YgdGhlIG1hY3JvIG9uIHRoZSBjdXJyZW50IGxpbmUKK3VzaW5n IGNvbW1hbmRzIGFib3ZlLgorQGVuZCB0YWJsZQorCisgIFRoZSBmb2xsb3dpbmcgY29tbWFuZHMg ZGVsZXRlIG9yIGR1cGxpY2F0ZSBtYWNyb3MgaW4gdGhlIGxpc3Q6CisKK0B0YWJsZSBAa2JkCitA aXRlbSBkCitAZmluZGV4IGttYWNyby1tZW51LWZsYWctZm9yLWRlbGV0aW9uCitAaXRlbSBkIEBy eyhLbWFjcm8gTWVudSl9CitGbGFnIHRoZSBtYWNybyBvbiB0aGUgY3VycmVudCBsaW5lIGZvciBk ZWxldGlvbiwgdGhlbiBtb3ZlIHBvaW50IHRvIHRoZQorbmV4dCBsaW5lIChAY29kZXtrbWFjcm8t bWVudS1mbGFnLWZvci1kZWxldGlvbn0pLiAgVGhlIGRlbGV0aW9uIGZsYWcgaXMKK2luZGljYXRl ZCBieSB0aGUgY2hhcmFjdGVyIEBzYW1we0R9IGF0IHRoZSBzdGFydCBvZiBsaW5lLiAgVGhlIGRl bGV0aW9uCitvY2N1cnMgb25seSB3aGVuIHlvdSB0eXBlIHRoZSBAa2Jke3h9IGNvbW1hbmQgKHNl ZSBiZWxvdykuCisKKyAgSWYgdGhlIHJlZ2lvbiBpcyBhY3RpdmUsIHRoaXMgY29tbWFuZCBmbGFn cyBhbGwgb2YgdGhlIG1hY3JvcyBpbiB0aGUKK3JlZ2lvbi4KKworQGl0ZW0geAorQGZpbmRleCBr bWFjcm8tbWVudS1kby1mbGFnZ2VkLWRlbGV0ZQorQGl0ZW0geCBAcnsoS21hY3JvIE1lbnUpfQor RGVsZXRlIHRoZSBtYWNyb3MgaW4gdGhlIGxpc3QgdGhhdCBoYXZlIGJlZW4gZmxhZ2dlZCBmb3Ig ZGVsZXRpb24KKyhAY29kZXtrbWFjcm8tbWVudS1kby1mbGFnZ2VkLWRlbGV0ZX0pLgorCitAaXRl bSBtCitAZmluZGV4IGttYWNyby1tZW51LW1hcmsKK0BpdGVtIG0gQHJ7KEttYWNybyBNZW51KX0K K01hcmsgdGhlIG1hY3JvIG9uIHRoZSBjdXJyZW50IGxpbmUsIHRoZW4gbW92ZSBwb2ludCB0byB0 aGUgbmV4dCBsaW5lCisoQGNvZGV7a21hY3JvLW1lbnUtbWFya30pLiAgTWFya2VkIG1hY3JvcyBh cmUgaW5kaWNhdGVkIGJ5IHRoZSBjaGFyYWN0ZXIKK0BzYW1weyp9IGF0IHRoZSBzdGFydCBvZiBs aW5lLiAgTWFya2VkIG1hY3JvcyBjYW4gYmUgb3BlcmF0ZWQgb24gYnkgdGhlCitAa2Jke0N9IGFu ZCBAa2Jke0R9IGNvbW1hbmRzIChzZWUgYmVsb3cpLgorCisgIElmIHRoZSByZWdpb24gaXMgYWN0 aXZlLCB0aGlzIGNvbW1hbmQgbWFya3MgYWxsIG9mIHRoZSBtYWNyb3MgaW4gdGhlCityZWdpb24u CisKK0BpdGVtIEMKK0BmaW5kZXgga21hY3JvLW1lbnUtZG8tY29weQorQGl0ZW0gQyBAcnsoS21h Y3JvIE1lbnUpfQorVGhpcyBjb21tYW5kIGNvcGllcyBtYWNyb3MgYnkgZHVwbGljYXRpbmcgdGhl bSBhdCB0aGVpciBjdXJyZW50Citwb3NpdGlvbnMgaW4gdGhlIGxpc3QgKEBjb2Rle2ttYWNyby1t ZW51LWRvLWNvcHl9KS4gIEZvciBleGFtcGxlLAorcnVubmluZyB0aGlzIGNvbW1hbmQgb24gdGhl IG1hY3JvIGF0IHBvc2l0aW9uIHplcm8gd2lsbCBpbnNlcnQgYSBjb3B5IG9mCit0aGF0IG1hY3Jv IGludG8gcG9zaXRpb24gMSBhbmQgbW92ZSB0aGUgcmVtYWluaW5nIG1hY3JvcyBkb3duLgorCisg IElmIHRoZSByZWdpb24gaXMgYWN0aXZlLCB0aGlzIGNvbW1hbmQgZHVwbGljYXRlcyB0aGUgbWFj cm9zIGluIHRoZQorcmVnaW9uLiAgT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgbWFya2VkIG1hY3Jv cywgdGhpcyBjb21tYW5kIGR1cGxpY2F0ZXMKK3RoZSBtYXJrZWQgbWFjcm9zLiAgSWYgdGhlcmUg aXMgbm8gcmVnaW9uIG5vciBhcmUgdGhlcmUgbWFya2VkIG1hY3JvcywKK3RoaXMgY29tbWFuZCBk dXBsaWNhdGVzIHRoZSBtYWNybyBvbiB0aGUgY3VycmVudCBsaW5lLiAgSW4gdGhlIGZpcnN0IHR3 bworY2FzZXMsIHRoZSBjb21tYW5kIHByb21wdHMgZm9yIGNvbmZpcm1hdGlvbiBiZWZvcmUgZHVw bGljYXRpb24uCisKK0BpdGVtIEQKK0BmaW5kZXgga21hY3JvLW1lbnUtZG8tZGVsZXRlCitAaXRl bSBEIEByeyhLbWFjcm8gTWVudSl9CitUaGlzIGNvbW1hbmQgZGVsZXRlcyBtYWNyb3MsIHJlbW92 aW5nIHRoZW0gZnJvbSB0aGUgcmluZworKEBjb2Rle2ttYWNyby1tZW51LWRvLWRlbGV0ZX0pLiAg Rm9yIGV4YW1wbGUsIHJ1bm5pbmcgdGhpcyBjb21tYW5kIG9uCit0aGUgbWFjcm8gYXQgcG9zaXRp b24gemVybyB3aWxsIGRlbGV0ZSB0aGUgY3VycmVudCBtYWNybyBhbmQgdGhlbiBtYWtlCit0aGUg Zmlyc3QgbWFjcm8gaW4gdGhlIG1hY3JvIHJpbmcgKHByZXZpb3VzbHkgYXQgcG9zaXRpb24gb25l KSB0aGUgbmV3CitjdXJyZW50IG1hY3JvLCBwb3BwaW5nIGl0IGZyb20gdGhlIHJpbmcuCisKKyAg SWYgdGhlIHJlZ2lvbiBpcyBhY3RpdmUsIHRoaXMgY29tbWFuZCBkZWxldGVzIHRoZSBtYWNyb3Mg aW4gdGhlCityZWdpb24uICBPdGhlcndpc2UsIGlmIHRoZXJlIGFyZSBtYXJrZWQgbWFjcm9zLCB0 aGlzIGNvbW1hbmQgZGVsZXRlcyB0aGUKK21hcmtlZCBtYWNyb3MuICBJZiB0aGVyZSBpcyBubyBy ZWdpb24gbm9yIGFyZSB0aGVyZSBtYXJrZWQgbWFjcm9zLCB0aGlzCitjb21tYW5kIGRlbGV0ZXMg dGhlIG1hY3JvIG9uIHRoZSBjdXJyZW50IGxpbmUuICBJbiBhbGwgY2FzZXMsIHRoZQorY29tbWFu ZCBwcm9tcHRzIGZvciBjb25maXJtYXRpb24gYmVmb3JlIGR1cGxpY2F0aW9uLgorCisgIFRoaXMg Y29tbWFuZCBpcyBhbiBhbHRlcm5hdGl2ZSB0byB0aGUgQGtiZHtkfSBhbmQgQGtiZHt4fSBjb21t YW5kcworKHNlZSBhYm92ZSkuCisKK0BpdGVtIHUKK0BmaW5kZXgga21hY3JvLW1lbnUtdW5tYXJr CitAaXRlbSB1IEByeyhLbWFjcm8gTWVudSl9CitVbm1hcmsgYW5kIHVuZmxhZyB0aGUgbWFjcm8g b24gdGhlIGN1cnJlbnQgbGluZSwgdGhlbiBtb3ZlIHBvaW50IGRvd24KK3RvIHRoZSBuZXh0IGxp bmUgKEBjb2Rle2ttYWNyby1tZW51LXVubWFya30pLiAgSWYgdGhlcmUgaXMgYW4gYWN0aXZlCity ZWdpb24sIHRoaXMgY29tbWFuZCB1bm1hcmtzIGFuZCB1bmZsYWdzIGFsbCBvZiB0aGUgbWFjcm9z IGluIHRoZQorcmVnaW9uLgorCitAaXRlbSBAa2V5e0RFTH0KK0BmaW5kZXgga21hY3JvLW1lbnUt dW5tYXJrLWJhY2t3YXJkCitAaXRlbSBAa2V5e0RFTH0gQHJ7KEttYWNybyBNZW51KX0KK0xpa2Ug dGhlIEBrYmR7dX0gY29tbWFuZCAoc2VlIGFib3ZlKSwgYnV0IG1vdmUgcG9pbnQgdXAgdG8gdGhl IHByZXZpb3VzCitsaW5lIHdoZW4gdGhlcmUgaXMgbm8gYWN0aXZlIHJlZ2lvbgorKEBjb2Rle2tt YWNyby1tZW51LXVubWFyay1iYWNrd2FyZH0pLgorCitAaXRlbSBVCitAZmluZGV4IGttYWNyby1t ZW51LXVubWFyay1hbGwKK0BpdGVtIFUgQHJ7KEttYWNybyBNZW51KX0KK1VubWFyayBhbmQgdW5m bGFnIGFsbCBtYWNyb3MgaW4gdGhlIGxpc3QKKyhAY29kZXtrbWFjcm8tbWVudS11bm1hcmstYWxs fSkuCitAZW5kIHRhYmxlCmRpZmYgLS1naXQgYS9ldGMvTkVXUyBiL2V0Yy9ORVdTCmluZGV4IGVk YTg0ZDU4OGE4Li43YzdjMjY2MjZhNiAxMDA2NDQKLS0tIGEvZXRjL05FV1MKKysrIGIvZXRjL05F V1MKQEAgLTEzODgsNiArMTM4OCwxNiBAQCBXaGVuIHRoaXMgaXMgbm9uLW5pbCwgdGhlIGxpbmVz IG9mIGtleSBzZXF1ZW5jZXMgYXJlIGRpc3BsYXllZCB3aXRoCiB0aGUgbW9zdCByZWNlbnQgbGlu ZSBmaXJzdC4gIFRoaXMgaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHdvcmtpbmcgd2l0aAogbWFjcm9z IHdpdGggbWFueSBsaW5lcywgc3VjaCBhcyBmcm9tICdrbWFjcm8tZWRpdC1sb3NzYWdlJy4KIAor KiogS21hY3JvIE1lbnUgTW9kZQorCisrKysKKyoqKiBOZXcgbW9kZSAna21hY3JvLW1lbnUtbW9k ZScgYW5kIG5ldyBjb21tYW5kICdsaXN0LWtleWJvYXJkLW1hY3JvcycuCitUaGUgbmV3IGNvbW1h bmQgJ2xpc3Qta2V5Ym9hcmQtbWFjcm9zJyB0aGUgbWFjcm8gdmVyc2lvbiBvZiBjb21tYW5kcwor bGlrZSAnbGlzdC1idWZmZXJzJyBhbmQgJ2xpc3QtcHJvY2Vzc2VzJywgY3JlYXRpbmcgYSBsaXN0 aW5nIG9mIHRoZQorY3VycmVudGx5IGV4aXN0aW5nIGtleWJvYXJkcyBtYWNyb3MgdXNpbmcgdGhl IG5ldyAna21hY3JvLW1lbnUtbW9kZScuCitJdCBhbGxvd3MgcmVhcnJhbmdpbmcgdGhlIG1hY3Jv cyBpbiB0aGUgcmluZywgZHVwbGljYXRpbmcgdGhlbSwgZGVsZXRpbmcKK3RoZW0sIGFuZCBlZGl0 aW5nIHRoZWlyIGNvdW50ZXJzLCBmb3JtYXRzLCBhbmQga2V5cy4KKwogKiogTWlzY2VsbGFuZW91 cwogCiAtLS0KZGlmZiAtLWdpdCBhL2xpc3Ava21hY3JvLmVsIGIvbGlzcC9rbWFjcm8uZWwKaW5k ZXggODk3ZWJmMTQzMzAuLjVlOTg1NTQ2YzM3IDEwMDY0NAotLS0gYS9saXNwL2ttYWNyby5lbAor KysgYi9saXNwL2ttYWNyby5lbApAQCAtMTM4OCw2ICsxMzg4LDUyOSBAQCBrbWFjcm8tcmVkaXNw bGF5CiAgICAgKGxldCAoKGV4ZWN1dGluZy1rYmQtbWFjcm8gbmlsKSkKICAgICAgIChyZWRpc3Bs YXkpKSkpCiAKKzs7OyBNb2RlIGFuZCBjb21tYW5kcyBmb3Igd29ya2luZyB3aXRoIHRoZSByaW5n IGluIGEgdGFibGUKKworKGRlZmZhY2Uga21hY3JvLW1lbnUtbWFyayAnKCh0ICg6aW5oZXJpdCBm b250LWxvY2stY29uc3RhbnQtZmFjZSkpKQorICAiRmFjZSB1c2VkIGZvciB0aGUgS2V5Ym9hcmQg TWFjcm8gTWVudSBtYXJrcy4iCisgIDpncm91cCAna21hY3JvCisgIDp2ZXJzaW9uICIzMC4wLjUw IikKKworKGRlZmZhY2Uga21hY3JvLW1lbnUtZmxhZ2dlZCAnKCh0ICg6aW5oZXJpdCBlcnJvcikp KQorICAiRmFjZSB1c2VkIGZvciBrZXlib2FyZCBtYWNyb3MgZmxhZ2dlZCBmb3IgZGVsZXRpb24u IgorICA6Z3JvdXAgJ2ttYWNybworICA6dmVyc2lvbiAiMzAuMC41MCIpCisKKyhkZWZmYWNlIGtt YWNyby1tZW51LW1hcmtlZCAnKCh0ICg6aW5oZXJpdCB3YXJuaW5nKSkpCisgICJGYWNlIHVzZWQg Zm9yIGtleWJvYXJkIG1hY3JvcyBtYXJrZWQgZm9yIGR1cGxpY2F0aW9uLiIKKyAgOmdyb3VwICdr bWFjcm8KKyAgOnZlcnNpb24gIjMwLjAuNTAiKQorCisoZGVmdmFyLWtleW1hcCBrbWFjcm8tbWVu dS1tb2RlLW1hcAorICA6ZG9jICJLZXltYXAgZm9yIGBrbWFjcm8tbWVudS1tb2RlJy4iCisgIDpw YXJlbnQgdGFidWxhdGVkLWxpc3QtbW9kZS1tYXAKKyAgIiMiICMna21hY3JvLW1lbnUtZWRpdC1w b3NpdGlvbgorICAiYyIgIydrbWFjcm8tbWVudS1lZGl0LWNvdW50ZXIKKyAgImUiICMna21hY3Jv LW1lbnUtZWRpdC1rZXlzCisgICJmIiAjJ2ttYWNyby1tZW51LWVkaXQtZm9ybWF0CisgICJSRVQi ICMna21hY3JvLW1lbnUtZWRpdC1jb2x1bW4KKworICAiQyIgIydrbWFjcm8tbWVudS1kby1jb3B5 CisgICJEIiAjJ2ttYWNyby1tZW51LWRvLWRlbGV0ZQorICAibSIgIydrbWFjcm8tbWVudS1tYXJr CisKKyAgImQiICMna21hY3JvLW1lbnUtZmxhZy1mb3ItZGVsZXRpb24KKyAgIngiICMna21hY3Jv LW1lbnUtZG8tZmxhZ2dlZC1kZWxldGUKKworICAidSIgIydrbWFjcm8tbWVudS11bm1hcmsKKyAg IlUiICMna21hY3JvLW1lbnUtdW5tYXJrLWFsbAorICAiREVMIiMna21hY3JvLW1lbnUtdW5tYXJr LWJhY2t3YXJkCisKKyAgIjxyZW1hcD4gPHRyYW5zcG9zZS1saW5lcz4iICMna21hY3JvLW1lbnUt dHJhbnNwb3NlKQorCisoZGVmaW5lLWRlcml2ZWQtbW9kZSBrbWFjcm8tbWVudS1tb2RlIHRhYnVs YXRlZC1saXN0LW1vZGUKKyAgIktleWJvYXJkIE1hY3JvIE1lbnUiCisgICJNYWpvciBtb2RlIGZv ciBsaXN0aW5nIGFuZCBlZGl0aW5nIGtleWJvYXJkIG1hY3Jvcy4iCisgIChtYWtlLWxvY2FsLXZh cmlhYmxlICdrbWFjcm8tbWVudS0tbWFya3MpCisgIChtYWtlLWxvY2FsLXZhcmlhYmxlICdrbWFj cm8tbWVudS0tZGVsZXRpb24tZmxhZ3MpCisgIChzZXRxLWxvY2FsIHRhYnVsYXRlZC1saXN0LWZv cm1hdAorICAgICAgICAgICAgICBbKCJQb3NpdGlvbiIgOCBuaWwpCisgICAgICAgICAgICAgICAo IkNvdW50ZXIiICA4IG5pbCA6cmlnaHQtYWxpZ24gdCA6cGFkLXJpZ2h0IDIpCisgICAgICAgICAg ICAgICAoIkZvcm1hdCIgIDggbmlsKQorICAgICAgICAgICAgICAgKCJGb3JtYXR0ZWQiIDEwIG5p bCkKKyAgICAgICAgICAgICAgICgiS2V5cyIgMSBuaWwpXSkKKyAgKHNldHEtbG9jYWwgdGFidWxh dGVkLWxpc3QtcGFkZGluZyAyKQorICAoYWRkLWhvb2sgJ3RhYnVsYXRlZC1saXN0LXJldmVydC1o b29rICMna21hY3JvLW1lbnUtLXJlZnJlc2ggbmlsIHQpCisgICh0YWJ1bGF0ZWQtbGlzdC1pbml0 LWhlYWRlcikKKyAgKHVubGVzcyAoa21hY3JvLXJpbmctZW1wdHktcCkKKyAgICAoa21hY3JvLW1l bnUtLXJlZnJlc2gpCisgICAgKHRhYnVsYXRlZC1saXN0LXByaW50KSkpCisKKyhkZWZhbGlhcyAn a21hY3JvLW1lbnUgIydsaXN0LWtleWJvYXJkLW1hY3JvcykKKyhkZWZ1biBsaXN0LWtleWJvYXJk LW1hY3JvcyAoKQorICAiTGlzdCB0aGUga2V5Ym9hcmQgbWFjcm9zLiIKKyAgKGludGVyYWN0aXZl KQorICAobGV0ICgoYnVmIChnZXQtYnVmZmVyLWNyZWF0ZSAiKktleWJvYXJkIE1hY3JvIExpc3Qq IikpKQorICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZgorICAgICAgKGttYWNyby1tZW51LW1v ZGUpKQorICAgIChwb3AtdG8tYnVmZmVyIGJ1ZikpKQorCis7Ozs7IFV0aWxpdHkgZnVuY3Rpb25z IGFuZCBtb2RlIGRhdGEKKworKGRlZnZhciBrbWFjcm8tbWVudS0tZGVsZXRpb24tZmxhZ3Mgbmls CisgICJBbGlzdCBvZiBlbnRyaWVzIGZsYWdnZWQgZm9yIGRlbGV0aW9uLiIpCisKKyhkZWZ2YXIg a21hY3JvLW1lbnUtLW1hcmtzIG5pbAorICAiQWxpc3Qgb2YgZW50cmllcyBtYXJrZWQgZm9yIGNv cHlpbmcgYW5kIGR1cGxpY2F0aW9uLiIpCisKKyhkZWZ1biBrbWFjcm8tbWVudS0taWQta21hY3Jv IChlbnRyeS1pZCkKKyAgIlJldHVybiBrZXlib2FyZCBtYWNybyB0aGF0IGlzIHBhcnQgb2YgdGhl IEVOVFJZLUlELiIKKyAgKGNhciBlbnRyeS1pZCkpCisKKyhkZWZ1biBrbWFjcm8tbWVudS0taWQt cG9zaXRpb24gKGVudHJ5LWlkKQorICAiUmV0dXJuIG9yZGluYWwgcG9zaXRpb24gdGhhdCBpcyBw YXJ0IG9mIHRoZSBFTlRSWS1JRC4iCisgIChjZHIgZW50cnktaWQpKQorCisoZGVmdW4ga21hY3Jv LW1lbnUtLWttYWNyb3MgKCkKKyAgIlJldHVybiB0aGUgbGlzdCBvZiB0aGUgZXhpc3Rpbmcga2V5 Ym9hcmQgbWFjcm9zIG9yIG5pbCwgaWYgbm9uZSBhcmUgZGVmaW5lZC4iCisgICh3aGVuIGxhc3Qt a2JkLW1hY3JvCisgICAgKGNvbnMgKGttYWNyby1yaW5nLWhlYWQpCisgICAgICAgICAga21hY3Jv LXJpbmcpKSkKKworKGRlZnVuIGttYWNyby1tZW51LS1yZWZyZXNoICgpCisgICJSZXNldCB0aGUg bGlzdCBvZiBrZXlib2FyZCBtYWNyb3MuIgorICAoc2V0cS1sb2NhbCB0YWJ1bGF0ZWQtbGlzdC1l bnRyaWVzCisgICAgICAgICAgICAgIChzZXEtbWFwLWluZGV4ZWQgKGxhbWJkYSAoa20gaWR4KQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxldCAoKGNudCAoa21hY3JvLS1jb3Vu dGVyIGttKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbXQgKGtt YWNyby0tZm9ybWF0IGttKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAo KCxrbSAuICxpZHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWywoZm9y bWF0ICIlZCIgaWR4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsKGZv cm1hdCAiJWQiIGNudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLGZt dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsKGZvcm1hdCBmbXQgY250 KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsKGZvcm1hdC1rYmQtbWFj cm8gKGttYWNyby0ta2V5cyBrbSkpXSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChrbWFjcm8tbWVudS0ta21hY3JvcykpCisgICAgICAgICAgICAgIGttYWNyby1tZW51LS1kZWxl dGlvbi1mbGFncyBuaWwKKyAgICAgICAgICAgICAga21hY3JvLW1lbnUtLW1hcmtzIG5pbCkKKyAg KHRhYnVsYXRlZC1saXN0LWNsZWFyLWFsbC10YWdzKSkKKworKGRlZnVuIGttYWNyby1tZW51LS1t YXAtaWRzIChmdW5jdGlvbikKKyAgIkFwcGx5IEZVTkNUSU9OIHRvIHRoZSBjdXJyZW50IHRhYmxl J3MgZW50cnkgSURzIGluIG9yZGVyLgorCitJZiBGSUxURVIgaXMgbm9uLW5pbCwgdGhlbiBJRHMg Zm9yIHdoaWNoIEZJTFRFUiByZXR1cm5zIG5pbCBhcmUKK2V4Y2x1ZGVkLgorCitSZXR1cm4gYSBs aXN0IG9mIHRoZSBvdXRwdXQgb2YgRlVOQ1RJT04uIgorICAobWFwY2FyIGZ1bmN0aW9uCisgICAg ICAgICAgKG1hcGNhciAjJ2NhcgorICAgICAgICAgICAgICAgICAgKHNlcS1zb3J0LWJ5ICMnY2Rh ciAjJzwgdGFidWxhdGVkLWxpc3QtZW50cmllcykpKSkKKworKGRlZnVuIGttYWNyby1tZW51LS1y ZXBsYWNlLWFsbCAoa21hY3JvcykKKyAgIlJlcGxhY2UgdGhlIGV4aXN0aW5nIGtleWJvYXJkIG1h Y3JvcyB3aXRoIHRob3NlIGluIEtNQUNST1MuCisKK1RoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBs aXN0IG92ZXJ3cml0ZXMgdGhlIHZhbHVlcyBvZiBgbGFzdC1rYmQtbWFjcm8nLAorYGttYWNyby1j b3VudGVyJywgYW5kIGBrbWFjcm8tY291bnRlci1mb3JtYXQnLiAgVGhlIHJlbWFpbmluZyBlbGVt ZW50cworYmVjb21lIHRoZSB2YWx1ZSBvZiBga21hY3JvLXJpbmcnLgorCitLTUFDUk9TIGlzIGEg bGlzdCBvZiBga21hY3JvJyBvYmplY3RzLiIKKyAgKGlmIChudWxsIGttYWNyb3MpCisgICAgICAo c2V0cSBsYXN0LWtiZC1tYWNybyBuaWwKKyAgICAgICAgICAgIGttYWNyby1jb3VudGVyLWZvcm1h dCBrbWFjcm8tZGVmYXVsdC1jb3VudGVyLWZvcm1hdAorICAgICAgICAgICAga21hY3JvLWNvdW50 ZXIgMAorICAgICAgICAgICAga21hY3JvLXJpbmcgbmlsKQorICAgIChrbWFjcm8tc3BsaXQtcmlu Zy1lbGVtZW50IChjYXIga21hY3JvcykpCisgICAgKHNldHEga21hY3JvLXJpbmcgKGNkciBrbWFj cm9zKSkpKQorCisoZGVmdW4ga21hY3JvLW1lbnUtLXJlcGxhY2UtYXQgKGttYWNybyBuKQorICAi UmVwbGFjZSB0aGUga2V5Ym9hcmQgbWFjcm8gYXQgcG9zaXRpb24gTiB3aXRoIEtNQUNSTy4KKwor VGhpcyBmdW5jdGlvbiByZXBsYWNlcyBhbGwgb2YgdGhlIGV4aXN0aW5nIGtleWJvYXJkIG1hY3Jv cyB2aWEKK2BrbWFjcm8tbWVudS0tcmVwbGFjZS1hbGwnLiAgRXhjZXB0IGZvciB0aGUgbWFjcm8g YXQgcG9zaXRpb24gTiwgd2hpY2ggd2lsbAorYmUgS01BQ1JPLCB0aGUgcmVwbGFjZW1lbnQgbWFj cm9zIGFyZSB0aGUgZXhpc3RpbmcgbWFjcm9zIGlkZW50aWZpZWQgaW4KK3RoZSB0YWJsZS4iCisg IChrbWFjcm8tbWVudS0tcmVwbGFjZS1hbGwKKyAgIChrbWFjcm8tbWVudS0tbWFwLWlkcyAobGFt YmRhIChpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoPSBuIChrbWFjcm8tbWVu dS0taWQtcG9zaXRpb24gaWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGttYWNy bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa21hY3JvLW1lbnUtLWlkLWttYWNybyBp ZCkpKSkpKQorCisoZGVmdW4ga21hY3JvLW1lbnUtLXF1ZXJ5LXJldmVydCAoKQorICAiSWYgdGhl IHRhYmxlIGRpZmZlcnMgZnJvbSB0aGUgZXhpc3RpbmcgbWFjcm9zLCBhc2sgd2hldGhlciB0byBy ZXZlcnQgdGFibGUuIgorICAod2hlbiAoYW5kIChub3QgKGVxdWFsIChrbWFjcm8tbWVudS0ta21h Y3JvcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAoa21hY3JvLW1lbnUtLW1hcC1pZHMgIydr bWFjcm8tbWVudS0taWQta21hY3JvKSkpCisgICAgICAgICAgICAgKHllcy1vci1uby1wICJUYWJs ZSBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBrZXlib2FyZCBtYWNyb3MuICBTdG9wIGFuZCByZXZl cnQgdGFibGU/IikpCisgICAgKHRhYnVsYXRlZC1saXN0LXJldmVydCkKKyAgICAoc2lnbmFsICdx dWl0IG5pbCkpKQorCisoZGVmdW4ga21hY3JvLW1lbnUtLWFzc2VydC1yb3cgKCZvcHRpb25hbCBp ZCkKKyAgIlNpZ25hbCBhbiBlcnJvciBpZiBwb2ludCBpcyBub3Qgb24gYSB0YWJsZSByb3cuCisK K0lEIGlzIHRoZSB0YWJ1bGF0ZWQgbGlzdCBpZCBvZiB0aGUgc3VwcG9zZWQgZW50cnkgYXQgcG9p bnQuIgorICAodW5sZXNzIChvciBpZCAodGFidWxhdGVkLWxpc3QtZ2V0LWlkKSkKKyAgICAodXNl ci1lcnJvciAiTm90IG9uIGEgdGFibGUgcm93IikpKQorCisoZGVmdW4ga21hY3JvLW1lbnUtLXBy b3BlcnRpemUta2V5cyAoZmFjZSkKKyAgIlJlZGlzcGxheSB0aGUgbWFjcm8ga2V5cyBhdCBwb2lu dCB3aXRoIEZBQ0UuIgorICAodGFidWxhdGVkLWxpc3Qtc2V0LWNvbCA0IChwcm9wZXJ0aXplIChh cmVmICh0YWJ1bGF0ZWQtbGlzdC1nZXQtZW50cnkpIDQpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ2ZhY2UgZmFjZSkpKQorCisoZGVmdW4ga21hY3JvLW1lbnUtLWRv LXJlZ2lvbiAoZnVuY3Rpb24pCisgICJSdW4gRlVOQ1RJT04gb24gbWFjcm9zIGluIHRoZSByZWdp b24gb3Igb24gdGhlIGN1cnJlbnQgbGluZSBhdCB0aGUgbGluZSBzdGFydC4KKworSWYgdGhlcmUg aXMgYW4gYWN0aXZlIHJlZ2lvbiwgZm9yIGVhY2ggbGluZSBpbiB0aGUgcmVnaW9uLCBtb3ZlIHRv IHRoZQorYmVnaW5uaW5nIG9mIHRoZSBsaW5lIGFuZCBhcHBseSBGVU5DVElPTiB0byB0aGUgdGFi bGUgZW50cnkgSUQgb2YgdGhlCitsaW5lLiAgSWYgdGhlcmUgaXMgbm8gcmVnaW9uLCBhcHBseSBG VU5DVElPTiBvbmx5IHRvIHRoZSB0YWJsZSBlbnRyeSBJRAorb2YgdGhlIGN1cnJlbnQgbGluZS4K KworV2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgcmVnaW9uLCBhZHZhbmNlIHRvIHRoZSBiZWdpbm5p bmcgb2YgdGhlIG5leHQKK2xpbmUgYWZ0ZXIgYXBwbHlpbmcgRlVOQ1RJT04uIgorICAoaWYgKHVz ZS1yZWdpb24tcCkKKyAgICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgICAobGV0KiAoKHJlZy1i ZWcgKHJlZ2lvbi1iZWdpbm5pbmcpKQorICAgICAgICAgICAgICAgKHJlZy1lbmQgKHJlZ2lvbi1l bmQpKQorICAgICAgICAgICAgICAgKGxpbmUtYmVnIChwcm9nbgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGdvdG8tY2hhciByZWctYmVnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg KHBvcy1ib2wpKSkKKyAgICAgICAgICAgICAgIChsaW5lLWVuZCAobGV0ICgocmVnLWVuZCByZWct ZW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChnb3RvLWNoYXIgcmVnLWVuZCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoYm9scCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZWctZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb3MtYm9s IDIpKSkpKQorICAgICAgICAgIChnb3RvLWNoYXIgbGluZS1iZWcpCisgICAgICAgICAgKGxldCAo KGlkKSkKKyAgICAgICAgICAgICh3aGlsZSAoYW5kICg8IChwb2ludCkgbGluZS1lbmQpCisgICAg ICAgICAgICAgICAgICAgICAgICAoc2V0cSBpZCAodGFidWxhdGVkLWxpc3QtZ2V0LWlkKSkpCisg ICAgICAgICAgICAgIChrbWFjcm8tbWVudS0tYXNzZXJ0LXJvdyBpZCkKKyAgICAgICAgICAgICAg KGZ1bmNhbGwgZnVuY3Rpb24gaWQpCisgICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUgMSkpKSkp CisgICAgKGxldCAoKGlkICh0YWJ1bGF0ZWQtbGlzdC1nZXQtaWQpKSkKKyAgICAgIChrbWFjcm8t bWVudS0tYXNzZXJ0LXJvdyBpZCkKKyAgICAgIChnb3RvLWNoYXIgKHBvcy1ib2wpKQorICAgICAg KGZ1bmNhbGwgZnVuY3Rpb24gaWQpCisgICAgICAoZm9yd2FyZC1saW5lIDEpKSkpCisKKyhkZWZ1 biBrbWFjcm8tbWVudS0tbWFya3MtZXhpc3QtcCAoKQorICAiUmV0dXJuIG5vbi1uaWwgaWYgbWFy a2VycyBleGlzdCBmb3IgYW55IHRhYmxlIGVudHJpZXMuIgorICAobGV0ICgodGFnIChnZW5zeW0p KSkKKyAgICAoY2F0Y2ggdGFnCisgICAgICAoa21hY3JvLW1lbnUtLW1hcC1pZHMgKGxhbWJkYSAo aWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod2hlbiAoYWxpc3QtZ2V0IChrbWFj cm8tbWVudS0taWQtcG9zaXRpb24gaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGttYWNyby1tZW51LS1tYXJrcykKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHRocm93IHRhZyB0KSkpKQorICAgICAgbmlsKSkpCisKKzs7OzsgQ29tbWFu ZHMgZm9yIE1hcmtzIGFuZCBGbGFncworCisoZGVmdW4ga21hY3JvLW1lbnUtbWFyayAoKQorICAi TWFyayBtYWNyb3MgaW4gdGhlIHJlZ2lvbiBvciwgb3RoZXJ3aXNlLCBvbiB0aGUgY3VycmVudCBs aW5lLgorCitJZiBtYXJraW5nIHRoZSBjdXJyZW50IGxpbmUsIG1vdmUgcG9pbnQgdG8gdGhlIG5l eHQgbGluZSB3aGVuIGRvbmUuCisKK01hcmtlZCBtYWNyb3MgY2FuIGJlIG9wZXJhdGVkIG9uIGJ5 IGBrbWFjcm8tbWVudS1kby1jb3B5JyBhbmQKK2BrbWFjcm8tbWVudS1kby1kZWxldGUnLiIKKyAg KGRlY2xhcmUgKG1vZGVzIGttYWNyby1tZW51LW1vZGUpKQorICAoaW50ZXJhY3RpdmUgbmlsIGtt YWNyby1tZW51LW1vZGUpCisgIChrbWFjcm8tbWVudS0tcXVlcnktcmV2ZXJ0KQorICAoa21hY3Jv LW1lbnUtLWRvLXJlZ2lvbgorICAgKGxhbWJkYSAoaWQpCisgICAgIChzZXRmIChhbGlzdC1nZXQg KGttYWNyby1tZW51LS1pZC1wb3NpdGlvbiBpZCkKKyAgICAgICAgICAgICAgICAgICAgICBrbWFj cm8tbWVudS0tbWFya3MpCisgICAgICAgICAgIHQpCisgICAgIChrbWFjcm8tbWVudS0tcHJvcGVy dGl6ZS1rZXlzICdrbWFjcm8tbWVudS1tYXJrZWQpCisgICAgICh0YWJ1bGF0ZWQtbGlzdC1wdXQt dGFnICMoIioiIDAgMSAoZmFjZSBrbWFjcm8tbWVudS1tYXJrKSkpKSkpCisKKyhkZWZ1biBrbWFj cm8tbWVudS1mbGFnLWZvci1kZWxldGlvbiAoKQorICAiRmxhZyBtYWNyb3MgaW4gdGhlIHJlZ2lv biBvciwgb3RoZXJ3aXNlLCBvbiB0aGUgY3VycmVudCBsaW5lLgorCitJZiBtYXJraW5nIHRoZSBj dXJyZW50IGxpbmUsIG1vdmUgcG9pbnQgdG8gdGhlIG5leHQgbGluZSB3aGVuIGRvbmUuCisKK0Zs YWdnZWQgbWFjcm9zIGNhbiBiZSBkZWxldGVkIHZpYSBga21hY3JvLW1lbnUtZG8tZmxhZ2dlZC1k ZWxldGUnLiIKKyAgKGRlY2xhcmUgKG1vZGVzIGttYWNyby1tZW51LW1vZGUpKQorICAoaW50ZXJh Y3RpdmUgbmlsIGttYWNyby1tZW51LW1vZGUpCisgIChrbWFjcm8tbWVudS0tcXVlcnktcmV2ZXJ0 KQorICAoa21hY3JvLW1lbnUtLWRvLXJlZ2lvbgorICAgKGxhbWJkYSAoaWQpCisgICAgIChzZXRm IChhbGlzdC1nZXQgKGttYWNyby1tZW51LS1pZC1wb3NpdGlvbiBpZCkKKyAgICAgICAgICAgICAg ICAgICAgICBrbWFjcm8tbWVudS0tZGVsZXRpb24tZmxhZ3MpCisgICAgICAgICAgIHQpCisgICAg IChrbWFjcm8tbWVudS0tcHJvcGVydGl6ZS1rZXlzICdrbWFjcm8tbWVudS1mbGFnZ2VkKQorICAg ICAodGFidWxhdGVkLWxpc3QtcHV0LXRhZyAjKCJEIiAwIDEgKGZhY2Uga21hY3JvLW1lbnUtbWFy aykpKSkpKQorCisoZGVmdW4ga21hY3JvLW1lbnUtdW5tYXJrICgpCisgICJVbm1hcmsgYW5kIHVu ZmxhZyBtYWNyb3MgaW4gdGhlIHJlZ2lvbiBvciwgb3RoZXJ3aXNlLCBvbiB0aGUgY3VycmVudCBs aW5lLgorCitJZiB1bm1hcmtpbmcgb3IgdW5mbGFnZ2luZyB0aGUgY3VycmVudCBsaW5lLCBtb3Zl IHBvaW50IHRvIHRoZSBuZXh0IGxpbmUKK3doZW4gZG9uZS4iCisgIChkZWNsYXJlIChtb2RlcyBr bWFjcm8tbWVudS1tb2RlKSkKKyAgKGludGVyYWN0aXZlIG5pbCBrbWFjcm8tbWVudS1tb2RlKQor ICAoa21hY3JvLW1lbnUtLXF1ZXJ5LXJldmVydCkKKyAgKGttYWNyby1tZW51LS1kby1yZWdpb24K KyAgIChsYW1iZGEgKGlkKQorICAgICAobGV0ICgocG9zIChrbWFjcm8tbWVudS0taWQtcG9zaXRp b24gaWQpKSkKKyAgICAgICAoc2V0ZiAoYWxpc3QtZ2V0IHBvcyBrbWFjcm8tbWVudS0tZGVsZXRp b24tZmxhZ3MpIG5pbAorICAgICAgICAgICAgIChhbGlzdC1nZXQgcG9zIGttYWNyby1tZW51LS1t YXJrcykgbmlsKSkKKyAgICAgKGttYWNyby1tZW51LS1wcm9wZXJ0aXplLWtleXMgJ2RlZmF1bHQp CisgICAgICh0YWJ1bGF0ZWQtbGlzdC1wdXQtdGFnICIgIikpKSkKKworKGRlZnVuIGttYWNyby1t ZW51LXVubWFyay1iYWNrd2FyZCAoKQorICAiTGlrZSBga21hY3JvLW1lbnUtdW5tYXJrJywgYnV0 IG1vdmUgYmFja3dhcmRzIGluc3RlYWQgb2YgZm9yd2FyZHMuIgorICAoZGVjbGFyZSAobW9kZXMg a21hY3JvLW1lbnUtbW9kZSkpCisgIChpbnRlcmFjdGl2ZSBuaWwga21hY3JvLW1lbnUtbW9kZSkK KyAgKGttYWNyby1tZW51LS1xdWVyeS1yZXZlcnQpCisgIChsZXQgKChnby1iYWNrIChub3QgKHVz ZS1yZWdpb24tcCkpKSkKKyAgICAoa21hY3JvLW1lbnUtdW5tYXJrKQorICAgICh3aGVuIGdvLWJh Y2sKKyAgICAgIChmb3J3YXJkLWxpbmUgLTIpKSkpCisKKyhkZWZ1biBrbWFjcm8tbWVudS11bm1h cmstYWxsICgpCisgICJVbm1hcmsgYW5kIHVuZmxhZyBhbGwgbGlzdGVkIGtleWJvYXJkIG1hY3Jv cy4iCisgIChkZWNsYXJlIChtb2RlcyBrbWFjcm8tbWVudS1tb2RlKSkKKyAgKGludGVyYWN0aXZl IG5pbCBrbWFjcm8tbWVudS1tb2RlKQorICAoa21hY3JvLW1lbnUtLXF1ZXJ5LXJldmVydCkKKyAg KHNldHEtbG9jYWwga21hY3JvLW1lbnUtLWRlbGV0aW9uLWZsYWdzIG5pbAorICAgICAgICAgICAg ICBrbWFjcm8tbWVudS0tbWFya3MgbmlsKQorICAoc2F2ZS1leGN1cnNpb24KKyAgICAoZ290by1j aGFyIChwb2ludC1taW4pKQorICAgICh3aGlsZSAodGFidWxhdGVkLWxpc3QtZ2V0LWlkKQorICAg ICAgKGttYWNyby1tZW51LS1wcm9wZXJ0aXplLWtleXMgJ2RlZmF1bHQpCisgICAgICAoZm9yd2Fy ZC1saW5lIDEpKQorICAgICh0YWJ1bGF0ZWQtbGlzdC1jbGVhci1hbGwtdGFncykpKQorCis7Ozs7 IENvbW1hbmRzIHRoYXQgTW9kaWZ5IHRoZSBSaW5nCisKKyhkZWZ1biBrbWFjcm8tbWVudS1kby1m bGFnZ2VkLWRlbGV0ZSAoKQorICAiRGVsZXRlIGtleWJvYXJkIG1hY3JvcyBmbGFnZ2VkIHZpYSBg a21hY3JvLW1lbnUtZmxhZy1mb3ItZGVsZXRpb24nLiIKKyAgKGRlY2xhcmUgKG1vZGVzIGttYWNy by1tZW51LW1vZGUpKQorICAoaW50ZXJhY3RpdmUgbmlsIGttYWNyby1tZW51LW1vZGUpCisgIChr bWFjcm8tbWVudS0tcXVlcnktcmV2ZXJ0KQorICAobGV0ICgocmVzKQorICAgICAgICAobnVtLWRl bGV0ZXMgMCkpCisgICAgKGttYWNyby1tZW51LS1tYXAtaWRzIChsYW1iZGEgKGlkKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChpZiAoYWxpc3QtZ2V0IChrbWFjcm8tbWVudS0taWQtcG9z aXRpb24gaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga21h Y3JvLW1lbnUtLWRlbGV0aW9uLWZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoc2V0cSBudW0tZGVsZXRlcyAoMSsgbnVtLWRlbGV0ZXMpKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHB1c2ggKGttYWNyby1tZW51LS1pZC1rbWFjcm8gaWQpIHJlcykpKSkKKyAg ICAod2hlbiAoeWVzLW9yLW5vLXAgKGlmICg9IDEgbnVtLWRlbGV0ZXMpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAiRGVsZXRlIDEga2V5Ym9hcmQgbWFjcm8/IgorICAgICAgICAgICAgICAg ICAgICAgICAgIChmb3JtYXQgIkRlbGV0ZSAlZCBrZXlib2FyZCBtYWNyb3M/IgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnVtLWRlbGV0ZXMpKSkKKyAgICAgIChrbWFjcm8tbWVu dS0tcmVwbGFjZS1hbGwKKyAgICAgICAobnJldmVyc2UgcmVzKSkKKyAgICAgICh0YWJ1bGF0ZWQt bGlzdC1yZXZlcnQpKSkpCisKKyhkZWZ1biBrbWFjcm8tbWVudS1kby1jb3B5ICgpCisgICJEdXBs aWNhdGUgdGhlIG1hY3JvcyBpbiB0aGUgcmVnaW9uLCBvciB0aGUgbWFya2VkIG1hY3Jvcywgb3Ig dGhlIG9uZSBhdCBwb2ludC4KKworTWFjcm9zIGFyZSBkdXBsaWNhdGVkIGF0IHRoZWlyIGN1cnJl bnQgcG9zaXRpb24gaW4gdGhlIG1hY3JvIHJpbmcuCisKK0lmIHRoZSByZWdpb24gaXMgYWN0aXZl LCBkdXBsaWNhdGUgdGhlIG1hY3JvcyBpbiB0aGUgcmVnaW9uLCByZWdhcmRsZXNzCitvZiB3aGV0 aGVyIHRoZXJlIGFyZSBtYXJrZWQgbWFjcm9zLiAgT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgbWFy a2VkCittYWNyb3MsIGRlbGV0ZSB0aG9zZS4gIE90aGVyd2lzZSwgZHVwbGljYXRlIHRoZSBvbmUg bWFjcm8gYXQgcG9pbnQuIgorICAoZGVjbGFyZSAobW9kZXMga21hY3JvLW1lbnUtbW9kZSkpCisg IChpbnRlcmFjdGl2ZSBuaWwga21hY3JvLW1lbnUtbW9kZSkKKyAgKGttYWNyby1tZW51LS1xdWVy eS1yZXZlcnQpCisgIChsZXQqICgocmVnaW9uLWV4aXN0cyAodXNlLXJlZ2lvbi1wKSkKKyAgICAg ICAgIChtYXJrLWV4aXN0cyAoa21hY3JvLW1lbnUtLW1hcmtzLWV4aXN0LXApKQorICAgICAgICAg KGlkLWFsaXN0IChpZiAob3IgcmVnaW9uLWV4aXN0cworICAgICAgICAgICAgICAgICAgICAgICAg ICAgKG5vdCBtYXJrLWV4aXN0cykpCisgICAgICAgICAgICAgICAgICAgICAgIChsZXQgKChyZWdp b24tYWxpc3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgIChrbWFjcm8tbWVudS0tZG8tcmVn aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKGlkKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChwdXNoIChjb25zIChrbWFjcm8tbWVudS0taWQtcG9zaXRpb24gaWQp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZWdpb24tYWxpc3QpKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICByZWdpb24tYWxpc3QpCisgICAgICAgICAgICAgICAgICAgICBrbWFjcm8tbWVudS0t bWFya3MpKQorICAgICAgICAgKG51bS1kdXBsaWNhdGVzIDApKQorICAgIChsZXQgKChyZXMpKQor ICAgICAgKGttYWNyby1tZW51LS1tYXAtaWRzIChsYW1iZGEgKGlkKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxldCAoKHBvcyAoa21hY3JvLW1lbnUtLWlkLXBvc2l0aW9uIGlkKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrbSAoa21hY3JvLW1lbnUtLWlk LWttYWNybyBpZCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHVzaCBrbSBy ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3aGVuIChhbGlzdC1nZXQgcG9z IGlkLWFsaXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdXNoIGttIHJl cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSBudW0tZHVwbGljYXRl cyAoMSsgbnVtLWR1cGxpY2F0ZXMpKSkpKSkKKyAgICAgIDs7IENvbmZpcm0gdGhlIGFjdGlvbiBp ZiB3ZSBvcGVyYXRlZCBvbiBtYXJrcyBvciB0aGUgcmVnaW9uLCBidXQKKyAgICAgIDs7IGRvbid0 IGNvbmZpcm0gaWYgb3BlcmF0aW5nIG9uIGEgc2luZ2xlIGxpbmUgd2l0aG91dCBhIHJlZ2lvbi4K KyAgICAgICh3aGVuIChpZiAob3IgbWFyay1leGlzdHMgcmVnaW9uLWV4aXN0cykKKyAgICAgICAg ICAgICAgICAoeWVzLW9yLW5vLXAgKGlmICg9IDEgbnVtLWR1cGxpY2F0ZXMpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiQ29weSAoZHVwbGljYXRlKSAxIGtleWJvYXJkIG1hY3Jv PyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybWF0ICJDb3B5IChkdXBsaWNh dGUpICVkIGtleWJvYXJkIG1hY3Jvcz8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBudW0tZHVwbGljYXRlcykpKQorICAgICAgICAgICAgICB0KQorICAgICAgICAoa21h Y3JvLW1lbnUtLXJlcGxhY2UtYWxsIChucmV2ZXJzZSByZXMpKQorICAgICAgICAodGFidWxhdGVk LWxpc3QtcmV2ZXJ0KSkpKSkKKworKGRlZnVuIGttYWNyby1tZW51LWRvLWRlbGV0ZSAoKQorICAi RGVsZXRlIHRoZSBtYWNyb3MgaW4gdGhlIHJlZ2lvbiwgdGhlIG1hcmtlZCBtYWNyb3MsIG9yIHRo ZSBvbmUgYXQgcG9pbnQuCisKK0lmIHRoZSByZWdpb24gaXMgYWN0aXZlLCBkZWxldGUgdGhlIG1h Y3JvcyBpbiB0aGUgcmVnaW9uLCByZWdhcmRsZXNzCitvZiB3aGV0aGVyIHRoZXJlIGFyZSBtYXJr ZWQgbWFjcm9zLiAgT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgbWFya2VkCittYWNyb3MsIGRlbGV0 ZSB0aG9zZS4gIE90aGVyd2lzZSwgZGVsZXRlIHRoZSBvbmUgbWFjcm8gYXQgcG9pbnQuIgorICAo ZGVjbGFyZSAobW9kZXMga21hY3JvLW1lbnUtbW9kZSkpCisgIChpbnRlcmFjdGl2ZSBuaWwga21h Y3JvLW1lbnUtbW9kZSkKKyAgKGttYWNyby1tZW51LS1xdWVyeS1yZXZlcnQpCisgIChsZXQgKChu dW0tZGVsZXRlcyAwKQorICAgICAgICAoaWQtYWxpc3QgKGlmIChvciAodXNlLXJlZ2lvbi1wKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAobm90IChrbWFjcm8tbWVudS0tbWFya3MtZXhpc3Qt cCkpKQorICAgICAgICAgICAgICAgICAgICAgIChsZXQgKChyZWdpb24tYWxpc3QpKQorICAgICAg ICAgICAgICAgICAgICAgICAgKGttYWNyby1tZW51LS1kby1yZWdpb24KKyAgICAgICAgICAgICAg ICAgICAgICAgICAobGFtYmRhIChpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdXNo IChjb25zIChrbWFjcm8tbWVudS0taWQtcG9zaXRpb24gaWQpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmVnaW9uLWFsaXN0KSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZWdpb24tYWxpc3QpCisg ICAgICAgICAgICAgICAgICAgIGttYWNyby1tZW51LS1tYXJrcykpKQorICAgIChsZXQgKChyZXMp KQorICAgICAgKGttYWNyby1tZW51LS1tYXAtaWRzIChsYW1iZGEgKGlkKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGlmIChhbGlzdC1nZXQgKGttYWNyby1tZW51LS1pZC1wb3NpdGlv biBpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkLWFs aXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIG51bS1kZWxldGVz ICgxKyBudW0tZGVsZXRlcykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdXNo IChrbWFjcm8tbWVudS0taWQta21hY3JvIGlkKSByZXMpKSkpCisgICAgICAod2hlbiAoeWVzLW9y LW5vLXAgKGlmICg9IDEgbnVtLWRlbGV0ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJEZWxldGUgMSBrZXlib2FyZCBtYWNybz8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAo Zm9ybWF0ICJEZWxldGUgJWQga2V5Ym9hcmQgbWFjcm9zPyIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbnVtLWRlbGV0ZXMpKSkKKyAgICAgICAgKGttYWNyby1tZW51LS1yZXBs YWNlLWFsbCAobnJldmVyc2UgcmVzKSkKKyAgICAgICAgKHRhYnVsYXRlZC1saXN0LXJldmVydCkp KSkpCisKKzs7OzsgQ29tbWFuZHMgdGhhdCBNb2RpZnkgYSBLZXlib2FyZCBNYWNybworCisoZGVm dW4ga21hY3JvLW1lbnUtZWRpdC1wb3NpdGlvbiAoKQorICAiTW92ZSB0aGUga2V5Ym9hcmQgbWFj cm8gYXQgcG9pbnQgdG8gYSBuZXcgcG9zaXRpb24uCisKK1NlZSB0aGUgSW5mbyBub2RlIGAoZW1h Y3MpIEtleWJvYXJkIE1hY3JvIFJpbmcnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgKGRlY2xh cmUgKG1vZGVzIGttYWNyby1tZW51LW1vZGUpKQorICAoaW50ZXJhY3RpdmUgbmlsIGttYWNyby1t ZW51LW1vZGUpCisgIChsZXQgKChpZCAodGFidWxhdGVkLWxpc3QtZ2V0LWlkKSkpCisgICAgKGtt YWNyby1tZW51LS1hc3NlcnQtcm93IGlkKQorICAgIChrbWFjcm8tbWVudS0tcXVlcnktcmV2ZXJ0 KQorICAgIChsZXQqICgobmV3LXBvc2l0aW9uIChtaW4gKGxlbmd0aCB0YWJ1bGF0ZWQtbGlzdC1l bnRyaWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1heCAwCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkLW51bWJlciAiTmV3IHBvc2l0aW9uOiAiIDAp KSkpCisgICAgICAgICAgIChvbGQta20gKGttYWNyby1tZW51LS1pZC1rbWFjcm8gaWQpKQorICAg ICAgICAgICAob2xkLXBvcyAoa21hY3JvLW1lbnUtLWlkLXBvc2l0aW9uIGlkKSkpCisgICAgICAo dW5sZXNzICg9IG9sZC1wb3MgbmV3LXBvc2l0aW9uKQorICAgICAgICAoa21hY3JvLW1lbnUtLXJl cGxhY2UtYWxsCisgICAgICAgICAobGV0ICgocmVzKQorICAgICAgICAgICAgICAgKHRydWUtbmV3 LXBvcyAoaWYgKD4gbmV3LXBvc2l0aW9uIG9sZC1wb3MpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoMSsgbmV3LXBvc2l0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5ldy1wb3NpdGlvbikpKQorICAgICAgICAgICAoa21hY3JvLW1lbnUtLW1hcC1pZHMgKGxh bWJkYSAodGhpcy1pZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxldCAo KHRoaXMta20gKGttYWNyby1tZW51LS1pZC1rbWFjcm8gdGhpcy1pZCkpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLXBvcyAoa21hY3JvLW1lbnUtLWlkLXBv c2l0aW9uIHRoaXMtaWQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo dW5sZXNzICg9IG9sZC1wb3MgdGhpcy1wb3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAod2hlbiAoPSB0aGlzLXBvcyB0cnVlLW5ldy1wb3MpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdXNoIG9sZC1rbSByZXMpKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHB1c2ggdGhpcy1rbSByZXMpKSkpKQorICAg ICAgICAgICAod2hlbiAoPj0gdHJ1ZS1uZXctcG9zCisgICAgICAgICAgICAgICAgICAgICAobGVu Z3RoIHRhYnVsYXRlZC1saXN0LWVudHJpZXMpKQorICAgICAgICAgICAgIChwdXNoIG9sZC1rbSBy ZXMpKQorICAgICAgICAgICAobnJldmVyc2UgcmVzKSkpCisgICAgICAgICh0YWJ1bGF0ZWQtbGlz dC1yZXZlcnQpKSkpKQorCisoZGVmdW4ga21hY3JvLW1lbnUtdHJhbnNwb3NlICgpCisgICJNb3Zl IHRoZSBrZXlib2FyZCBtYWNybyBhdCBwb2ludCB0byB0aGUgbmV4dCBlYXJsaWVyIHBvc2l0aW9u LgorCitOb3RlIHRoYXQgdGhpcyBpcyB0aGUgZWFybGllciBwb3NpdGlvbiBpbiB0aGUgcmluZywg bm90IHRoZSBzb3J0ZWQKK3RhYmxlLiIKKyAgKGRlY2xhcmUgKG1vZGVzIGttYWNyby1tZW51LW1v ZGUpKQorICAoaW50ZXJhY3RpdmUgbmlsIGttYWNyby1tZW51LW1vZGUpCisgIChsZXQgKChpZCAo dGFidWxhdGVkLWxpc3QtZ2V0LWlkKSkpCisgICAgKGttYWNyby1tZW51LS1hc3NlcnQtcm93IGlk KQorICAgIChrbWFjcm8tbWVudS0tcXVlcnktcmV2ZXJ0KQorICAgIChsZXQgKChvbGQtcG9zIChr bWFjcm8tbWVudS0taWQtcG9zaXRpb24gaWQpKSkKKyAgICAgICh1bmxlc3MgKD0gb2xkLXBvcyAw KQorICAgICAgICAobGV0ICgobmV3LXBvcyAoMS0gb2xkLXBvcykpKQorICAgICAgICAgIChrbWFj cm8tbWVudS0tcmVwbGFjZS1hbGwKKyAgICAgICAgICAgKGxldCAoKHJlcykpCisgICAgICAgICAg ICAgKGttYWNyby1tZW51LS1tYXAtaWRzCisgICAgICAgICAgICAgIChsYW1iZGEgKHRoaXMtaWQp CisgICAgICAgICAgICAgICAgKGxldCAoKHRoaXMtcG9zIChrbWFjcm8tbWVudS0taWQtcG9zaXRp b24gdGhpcy1pZCkpKQorICAgICAgICAgICAgICAgICAgKHVubGVzcyAoPSBvbGQtcG9zIHRoaXMt cG9zKQorICAgICAgICAgICAgICAgICAgICAod2hlbiAoPSBuZXctcG9zIHRoaXMtcG9zKQorICAg ICAgICAgICAgICAgICAgICAgIChwdXNoIChrbWFjcm8tbWVudS0taWQta21hY3JvIGlkKSByZXMp KQorICAgICAgICAgICAgICAgICAgICAocHVzaCAoa21hY3JvLW1lbnUtLWlkLWttYWNybyB0aGlz LWlkKSByZXMpKSkpKQorICAgICAgICAgICAgIChucmV2ZXJzZSByZXMpKSkpCisgICAgICAgICh0 YWJ1bGF0ZWQtbGlzdC1yZXZlcnQpKSkpKQorCisoZGVmdW4ga21hY3JvLW1lbnUtZWRpdC1mb3Jt YXQgKCkKKyAgIkVkaXQgdGhlIGNvdW50ZXIgZm9ybWF0IG9mIHRoZSBrZXlib2FyZCBtYWNybyBh dCBwb2ludC4KKworVmFsaWQgY291bnRlciBmb3JtYXRzIGFyZSB0aG9zZSBmb3IgaW50ZWdlcnMg YWNjZXB0ZWQgYnkgYGZvcm1hdCcuCisKK1NlZSB0aGUgY29tbWFuZCBga21hY3JvLXNldC1mb3Jt YXQnIGFuZCB0aGUgSW5mbyBub2RlIGAoZW1hY3MpIEtleWJvYXJkCitNYWNybyBDb3VudGVyJyBm b3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgIChkZWNsYXJlIChtb2RlcyBrbWFjcm8tbWVudS1tb2Rl KSkKKyAgKGludGVyYWN0aXZlIG5pbCBrbWFjcm8tbWVudS1tb2RlKQorICAobGV0ICgoaWQgKHRh YnVsYXRlZC1saXN0LWdldC1pZCkpKQorICAgIChrbWFjcm8tbWVudS0tYXNzZXJ0LXJvdyBpZCkK KyAgICAoa21hY3JvLW1lbnUtLXF1ZXJ5LXJldmVydCkKKyAgICAobGV0ICgoa20gKGttYWNyby1t ZW51LS1pZC1rbWFjcm8gaWQpKSkKKyAgICAgIChrbWFjcm8tbWVudS0tcmVwbGFjZS1hdAorICAg ICAgIChrbWFjcm8gKGttYWNyby0ta2V5cyBrbSkKKyAgICAgICAgICAgICAgIChrbWFjcm8tLWNv dW50ZXIga20pCisgICAgICAgICAgICAgICAocmVhZC1zdHJpbmcgIk5ldyBmb3JtYXQ6ICIgbmls IG5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IGttYWNyby1kZWZhdWx0LWNv dW50ZXItZm9ybWF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGttYWNyby0t Zm9ybWF0IGttKSkpKQorICAgICAgIChrbWFjcm8tbWVudS0taWQtcG9zaXRpb24gaWQpKQorICAg ICAgKHRhYnVsYXRlZC1saXN0LXJldmVydCkpKSkKKworKGRlZnVuIGttYWNyby1tZW51LWVkaXQt Y291bnRlciAoKQorICAiRWRpdCB0aGUgY291bnRlciBvZiB0aGUga2V5Ym9hcmQgbWFjcm8gYXQg cG9pbnQuCisKK1NlZSBJbmZvIG5vZGUgYChlbWFjcykgS2V5Ym9hcmQgTWFjcm8gQ291bnRlcicg Zm9yIG1vcmUKK2luZm9ybWF0aW9uLiIKKyAgKGRlY2xhcmUgKG1vZGVzIGttYWNyby1tZW51LW1v ZGUpKQorICAoaW50ZXJhY3RpdmUgbmlsIGttYWNyby1tZW51LW1vZGUpCisgIChsZXQgKChpZCAo dGFidWxhdGVkLWxpc3QtZ2V0LWlkKSkpCisgICAgKGttYWNyby1tZW51LS1hc3NlcnQtcm93IGlk KQorICAgIChrbWFjcm8tbWVudS0tcXVlcnktcmV2ZXJ0KQorICAgIChsZXQgKChrbSAoa21hY3Jv LW1lbnUtLWlkLWttYWNybyBpZCkpKQorICAgICAgKGttYWNyby1tZW51LS1yZXBsYWNlLWF0Cisg ICAgICAgKGttYWNybyAoa21hY3JvLS1rZXlzIGttKQorICAgICAgICAgICAgICAgKHJlYWQtbnVt YmVyICJOZXcgY291bnRlcjogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IDAK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa21hY3JvLS1jb3VudGVyCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrbWFjcm8tbWVudS0taWQta21hY3JvIGlk KSkpKQorICAgICAgICAgICAgICAgKGttYWNyby0tZm9ybWF0IGttKSkKKyAgICAgICAoa21hY3Jv LW1lbnUtLWlkLXBvc2l0aW9uIGlkKSkKKyAgICAgICh0YWJ1bGF0ZWQtbGlzdC1yZXZlcnQpKSkp CisKKyhkZWZ1biBrbWFjcm8tbWVudS1lZGl0LWtleXMgKCkKKyAgIkVkaXQgdGhlIGtleXMgb2Yg dGhlIGtleWJvYXJkIG1hY3JvIGF0IHBvaW50IHZpYSBgZWRtYWNyby1tb2RlJy4KKworU2VlIElu Zm8gbm9kZSBgKGVtYWNzKSBFZGl0IEtleWJvYXJkIE1hY3JvJyBmb3IgbW9yZQoraW5mb3JtYXRp b24uIgorICAoZGVjbGFyZSAobW9kZXMga21hY3JvLW1lbnUtbW9kZSkpCisgIChpbnRlcmFjdGl2 ZSBuaWwga21hY3JvLW1lbnUtbW9kZSkKKyAgKGxldCAoKGlkICh0YWJ1bGF0ZWQtbGlzdC1nZXQt aWQpKSkKKyAgICAoa21hY3JvLW1lbnUtLWFzc2VydC1yb3cgaWQpCisgICAgKGttYWNyby1tZW51 LS1xdWVyeS1yZXZlcnQpCisgICAgKGxldCogKChvbGQta20gKGttYWNyby1tZW51LS1pZC1rbWFj cm8gaWQpKSkKKyAgICAgIChlZGl0LWtiZC1tYWNybyAoa21hY3JvLS1rZXlzIG9sZC1rbSkKKyAg ICAgICAgICAgICAgICAgICAgICBuaWwKKyAgICAgICAgICAgICAgICAgICAgICBuaWwKKyAgICAg ICAgICAgICAgICAgICAgICAobGFtYmRhIChtYWMpCisgICAgICAgICAgICAgICAgICAgICAgICAo a21hY3JvLW1lbnUtLXJlcGxhY2UtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAoa21hY3Jv IG1hYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGttYWNyby0tY291bnRlciBv bGQta20pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa21hY3JvLS1mb3JtYXQg b2xkLWttKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAoa21hY3JvLW1lbnUtLWlkLXBvc2l0 aW9uIGlkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICh0YWJ1bGF0ZWQtbGlzdC1yZXZlcnQp KSkpKSkKKworKGRlZnVuIGttYWNyby1tZW51LWVkaXQtY29sdW1uICgpCisgICJFZGl0IHRoZSB2 YWx1ZSBpbiB0aGUgY3VycmVudCBjb2x1bW4gb2YgdGhlIGtleWJvYXJkIG1hY3JvIGF0IHBvaW50 LiIKKyAgKGRlY2xhcmUgKG1vZGVzIGttYWNyby1tZW51LW1vZGUpKQorICAoaW50ZXJhY3RpdmUg bmlsIGttYWNyby1tZW51LW1vZGUpCisgIChrbWFjcm8tbWVudS0tcXVlcnktcmV2ZXJ0KQorICAo cGNhc2UgKGdldC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ3RhYnVsYXRlZC1saXN0LWNvbHVtbi1u YW1lKQorICAgICgnbmlsICAgICAgICAodXNlci1lcnJvciAiTm8gY29sdW1uIGF0IHBvaW50Iikp CisgICAgKCJQb3NpdGlvbiIgIChjYWxsLWludGVyYWN0aXZlbHkgIydrbWFjcm8tbWVudS1lZGl0 LXBvc2l0aW9uKSkKKyAgICAoIkNvdW50ZXIiICAgKGNhbGwtaW50ZXJhY3RpdmVseSAjJ2ttYWNy by1tZW51LWVkaXQtY291bnRlcikpCisgICAgKCJGb3JtYXQiICAgIChjYWxsLWludGVyYWN0aXZl bHkgIydrbWFjcm8tbWVudS1lZGl0LWZvcm1hdCkpCisgICAgKCJGb3JtYXR0ZWQiICh1c2VyLWVy cm9yICJGb3JtYXR0ZWQgY291bnRlciBpcyBub3QgZWRpdGFibGUiKSkKKyAgICAoIktleXMiICAg ICAgKGNhbGwtaW50ZXJhY3RpdmVseSAjJ2ttYWNyby1tZW51LWVkaXQta2V5cykpKSkKKwogKHBy b3ZpZGUgJ2ttYWNybykKIAogOzs7IGttYWNyby5lbCBlbmRzIGhlcmUKLS0gCjIuMzQuMQoK --b1_ARlJZH7KfoRCL5Ziruu9GLcJJJDgayr6hFHXuYrPgw--