From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: =?UTF-8?Q?Jostein_Kj=c3=b8nigsen?= Newsgroups: gmane.emacs.devel Subject: Re: toml-ts-mode: first draft Date: Tue, 13 Dec 2022 21:43:28 +0100 Message-ID: References: <4E261A68-AB14-48A5-B19C-8981CB003F33@secure.kjonigsen.net> <86a63unfvp.fsf@mail.linkov.net> <83cz8pu9cr.fsf@gnu.org> <0f74be1a-8502-ce66-6101-2b3f060295c5@secure.kjonigsen.net> <7825A406-3F21-4E38-9E9B-B429B9E81B4E@gmail.com> <1711257d-a476-3f67-04e1-0da3c979594a@secure.kjonigsen.net> Reply-To: jostein@kjonigsen.net Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------hKfzGg6sKQqjHPWtHEmArwap" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="15085"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.1 Cc: Yuan Fu , Eli Zaretskii , Juri Linkov , emacs-devel , theo@thornhill.no To: Randy Taylor Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Tue Dec 13 21:44:22 2022 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 1p5C8T-0003ig-JX for ged-emacs-devel@m.gmane-mx.org; Tue, 13 Dec 2022 21:44:21 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1p5C7q-000096-OQ; Tue, 13 Dec 2022 15:43:42 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p5C7p-00008y-6I for emacs-devel@gnu.org; Tue, 13 Dec 2022 15:43:41 -0500 Original-Received: from wout3-smtp.messagingengine.com ([64.147.123.19]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p5C7l-0003rT-UA; Tue, 13 Dec 2022 15:43:40 -0500 Original-Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.west.internal (Postfix) with ESMTP id DB31032005CA; Tue, 13 Dec 2022 15:43:32 -0500 (EST) Original-Received: from mailfrontend1 ([10.202.2.162]) by compute3.internal (MEProxy); Tue, 13 Dec 2022 15:43:33 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= secure.kjonigsen.net; h=cc:cc:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:reply-to:sender:subject:subject:to:to; s=fm1; t= 1670964212; x=1671050612; bh=+nhkgwXLudPOVmtOQirGUliFpQ5wU97awe4 0dmkAitU=; b=JU8iUfg+3TliMk2XdA/sg5ikmbyp1NAGH8ikYZlT4X2dmMsfV9F 2qmWKWQTpUgC4rwdVd1dzo6dlRAxo3NDetD7EArxIKPCcQApcUeIguCjB8Di/GfN 8H+2HfB5EqaclcvI1PI4qctzIDjBzpXcgI7fyYGJPQB5XqK3dQJWMmXZvnCA0/Pw 03kFoA082NbS90awnHgD20c8i6ZCagWTFNCcDeyhYUA7067zwk8sUqBCa+M2geMD ty8qpgzhWahcQLFr23Ps2oSgr9Bin0XrQM0s4e30YauTYW+pBpmf/MKyzpt3uq6u 5BEO53eBwM0lZ5eCAoBHZbOsG6xWfpxbhcQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:date:date:feedback-id :feedback-id:from:from:in-reply-to:in-reply-to:message-id :mime-version:references:reply-to:reply-to:sender:subject :subject:to:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm2; t=1670964212; x=1671050612; bh=+nhkgwXLudPOV mtOQirGUliFpQ5wU97awe40dmkAitU=; b=HIjEOnokfwn6kK8JccX60fq4PTfGf 9mO8Nk1jS+mND6MxelC2Kz/HeB0wyYttV9c7GbB6XzVhd++QA7lP3jShC6/IevxK m9WUPNwfYU7uL2FRs2g3UKTDg66e9SV2MBi8lMTBkPBEL+zTrGcFfzg8qkvkW3NX oa1gJ0rkAA7sKFWmZbA8C67AhHO+rkAxHV4EBgaktMIMigz9xRaaslI1ngOjFuT+ +aqqfjkPPPGemB5FK6tJ1Gnurjwy4/jO6upgyry6/ayb40/Ga3Bv72yYagCd23WJ tUSl9ka0VpJzLbPhs4rcKRIQbvGeRAMPuXL7unOFt1WvpKjJLaRH08RPw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrfedugdeiiecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpegtkfffgggfrhfuvfevfhfhjgesmhdtreertdefjeenucfhrhhomheplfhoshht vghinhcumfhjpphnihhgshgvnhcuoehjohhsthgvihhnsehsvggtuhhrvgdrkhhjohhnih hgshgvnhdrnhgvtheqnecuggftrfgrthhtvghrnhepleeihefgveefffelkeelleffffdt feevleetheefgfdtgfdtfeeiveekgfevkedvnecuvehluhhsthgvrhfuihiivgeptdenuc frrghrrghmpehmrghilhhfrhhomhepjhhoshhtvghinhesshgvtghurhgvrdhkjhhonhhi ghhsvghnrdhnvght X-ME-Proxy: Feedback-ID: ib2f84088:Fastmail Original-Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 13 Dec 2022 15:43:30 -0500 (EST) Content-Language: en-GB, nb-NO In-Reply-To: Received-SPF: pass client-ip=64.147.123.19; envelope-from=jostein@secure.kjonigsen.net; helo=wout3-smtp.messagingengine.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, NICE_REPLY_A=-0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:301361 Archived-At: This is a multi-part message in MIME format. --------------hKfzGg6sKQqjHPWtHEmArwap Content-Type: multipart/alternative; boundary="------------SBYJjPbELx6lhSOUnlwCi0E5" --------------SBYJjPbELx6lhSOUnlwCi0E5 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 12.12.2022 22:17, Randy Taylor wrote: > Looks good! A few silly nits: Thanks for the constructive feedback! > - It would be nice to keep batch.sh alphabetized (so maybe move > typescript while you're there). Did this. I saw bash was missing, so I added that too. It's unrelated to TOML, but I hope it can pass :) > - Most modes put a newline between features in their font-lock rules > definition. I think we should stick to that. Done > - I think comment should be moved out of pair to its own feature. Done > - For features like 'number, I like to group them (e.g. [(int) > (float]), then you only need to specify @font-lock-number-face once. Done > - ;;(setq global-toml-node (treesit-buffer-root-node)) seems like this > was leftover debugging to be removed? Oops. Fixed. > - treesit-font-lock-feature-list should have 4 levels, and delimiter > and error should probably go in the 4th one (side note, we should all > figure out the "final" list of general features and which levels they > belong to). The first level should maybe just be comment on its own, > the rest looks good to me. Done. > - Indentation support for multi-line arrays would be nice (and maybe > even follow the indentation of the previous line if that's not too > hard and doesn't cause everything to blow up?) I was fine with all this until you started mentioning indentation... :D I gave it a try though, and what we have provides a customizable indentation-level, which is applied to multiline strings and array-values.  (Indentation was never my "forte" if you like, and I haven't figured out an obvious way to make it follow previous line's indentation though.) If it's OK for you, for now I would like to leave the indentation-ambitions at the point which is implemented. Aaand... With that said... That should (to the best of my knowledge) address everything you requested, and IMO that makes it a nice upgrade from last patch. Attached is a patch with all changes combined up until now. Anything else you (or anyone else) think should be fixed up? -- Jostein --------------SBYJjPbELx6lhSOUnlwCi0E5 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit On 12.12.2022 22:17, Randy Taylor wrote:
Looks good! A few silly nits:

Thanks for the constructive feedback!

- It would be nice to keep batch.sh alphabetized (so maybe move typescript while you're there).
Did this. I saw bash was missing, so I added that too. It's unrelated to TOML, but I hope it can pass :)
- Most modes put a newline between features in their font-lock rules definition. I think we should stick to that.
Done
- I think comment should be moved out of pair to its own feature.
Done
- For features like 'number, I like to group them (e.g. [(int) (float]), then you only need to specify @font-lock-number-face once.
Done
- ;;(setq global-toml-node (treesit-buffer-root-node)) seems like this was leftover debugging to be removed?
Oops. Fixed.
- treesit-font-lock-feature-list should have 4 levels, and delimiter and error should probably go in the 4th one (side note, we should all figure out the "final" list of general features and which levels they belong to). The first level should maybe just be comment on its own, the rest looks good to me.
Done.
- Indentation support for multi-line arrays would be nice (and maybe even follow the indentation of the previous line if that's not too hard and doesn't cause everything to blow up?)

I was fine with all this until you started mentioning indentation... :D

I gave it a try though, and what we have provides a customizable indentation-level, which is applied to multiline strings and array-values.  (Indentation was never my "forte" if you like, and I haven't figured out an obvious way to make it follow previous line's indentation though.)

If it's OK for you, for now I would like to leave the indentation-ambitions at the point which is implemented.

Aaand...

With that said... That should (to the best of my knowledge) address everything you requested, and IMO that makes it a nice upgrade from last patch.

Attached is a patch with all changes combined up until now.

Anything else you (or anyone else) think should be fixed up?

--
Jostein

--------------SBYJjPbELx6lhSOUnlwCi0E5-- --------------hKfzGg6sKQqjHPWtHEmArwap Content-Type: text/x-patch; charset=UTF-8; name="0005-Introduce-support-for-TOML-config-format.patch" Content-Disposition: attachment; filename="0005-Introduce-support-for-TOML-config-format.patch" Content-Transfer-Encoding: base64 RnJvbSBiZmI1Y2MyNTNmYWY5ZWQ5ZjdjOTI1NmRmMDM1MjAwZGViYWY5MzFjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/Sm9zdGVpbj0yMEtqPUMzPUI4bmln c2VuPz0gPGpvc3RlaW5Aa2pvbmlnc2VuLm5ldD4KRGF0ZTogU3VuLCAxMSBEZWMgMjAyMiAx MzowNToyOSArMDEwMApTdWJqZWN0OiBbUEFUQ0ggNS81XSBJbnRyb2R1Y2Ugc3VwcG9ydCBm b3IgVE9NTCBjb25maWctZm9ybWF0CgpUaGlzIGNvbW1pdCBpbnRyb2R1Y2VzIHN1cHBvcnQg Zm9yIHRoZSBzZW1pLXBvcHVsYXIgVE9NTApjb25maWctZm9ybWF0WzFdIHRocm91Z2ggYSBu ZXcgbWFqb3ItbW9kZTogdG9tbC10cy1tb2RlLgoKSSd2ZSByZWFkIHRocm91Z2ggdGhlIGZ1 bGwgc3BlY1syXSwgYW5kIGZyb20gd2hhdCBJIGNhbiBzZWUgdGhpcwptYWpvci1tb2RlIHNo b3VsZCBwcm92aWRlIGNvcnJlY3Qgc3ludGF4LWhpZ2hsaWd0aW5nIGZvciBldmVyeSBzb3J0 IG9mCmNvbmZpZy1kZWNsYXJhdGlvbiB3aGljaCBhZGhlcmVzIHRvIHRoZSBzcGVjaWZpY2F0 aW9uLgoKQmVzaWRlcyB0aGF0IGl0IGFsc28gYWRkcyBzdXBwb3J0IGZvciBpbWVudSBhbmQg YmFzaWMgdHJlZS1zaXR0ZXIKYmFzZWQgbmF2aWdhdGlvbi4KClsxXSBodHRwczovL3RvbWwu aW8vZW4vClsyXSBodHRwczovL3RvbWwuaW8vZW4vdjEuMC4wCi0tLQogYWRtaW4vbm90ZXMv dHJlZS1zaXR0ZXIvYnVpbGQtbW9kdWxlL2JhdGNoLnNoIHwgICA0ICstCiBsaXNwL3RleHRt b2Rlcy90b21sLXRzLW1vZGUuZWwgICAgICAgICAgICAgICAgfCAxODggKysrKysrKysrKysr KysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDE5MSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9u KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGlzcC90ZXh0bW9kZXMvdG9tbC10cy1tb2RlLmVs CgpkaWZmIC0tZ2l0IGEvYWRtaW4vbm90ZXMvdHJlZS1zaXR0ZXIvYnVpbGQtbW9kdWxlL2Jh dGNoLnNoIGIvYWRtaW4vbm90ZXMvdHJlZS1zaXR0ZXIvYnVpbGQtbW9kdWxlL2JhdGNoLnNo CmluZGV4IDZkY2UwMDBjYWE2Li4yYjgzNjdmZTZkYiAxMDA3NTUKLS0tIGEvYWRtaW4vbm90 ZXMvdHJlZS1zaXR0ZXIvYnVpbGQtbW9kdWxlL2JhdGNoLnNoCisrKyBiL2FkbWluL25vdGVz L3RyZWUtc2l0dGVyL2J1aWxkLW1vZHVsZS9iYXRjaC5zaApAQCAtMSw2ICsxLDcgQEAKICMh L2Jpbi9iYXNoCiAKIGxhbmd1YWdlcz0oCisgICAgJ2Jhc2gnCiAgICAgJ2MnCiAgICAgJ2Nw cCcKICAgICAnY3NzJwpAQCAtMTIsOCArMTMsOSBAQCBsYW5ndWFnZXM9CiAgICAgJ2pzb24n CiAgICAgJ3B5dGhvbicKICAgICAncnVzdCcKLSAgICAndHlwZXNjcmlwdCcKKyAgICAndG9t bCcKICAgICAndHN4JworICAgICd0eXBlc2NyaXB0JwogKQogCiBmb3IgbGFuZ3VhZ2UgaW4g IiR7bGFuZ3VhZ2VzW0BdfSIKZGlmZiAtLWdpdCBhL2xpc3AvdGV4dG1vZGVzL3RvbWwtdHMt bW9kZS5lbCBiL2xpc3AvdGV4dG1vZGVzL3RvbWwtdHMtbW9kZS5lbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzBhNmZlOWMwYjAKLS0tIC9kZXYvbnVsbAor KysgYi9saXNwL3RleHRtb2Rlcy90b21sLXRzLW1vZGUuZWwKQEAgLTAsMCArMSwxODggQEAK Kzs7OyB0b21sLXRzLW1vZGUuZWwgLS0tIHRyZWUtc2l0dGVyIHN1cHBvcnQgZm9yIFRPTUwg IC0qLSBsZXhpY2FsLWJpbmRpbmc6IHQ7IC0qLQorCis7OyBDb3B5cmlnaHQgKEMpIDIwMjIg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKzs7IEF1dGhvciAgICAgOiBKb3N0 ZWluIEtqw7huaWdzZW4gPGpvc3RlaW5Aa2pvbmlnc2VuLm5ldD4KKzs7IE1haW50YWluZXIg OiBKb3N0ZWluIEtqw7huaWdzZW4gPGpvc3RlaW5Aa2pvbmlnc2VuLm5ldD4KKzs7IENyZWF0 ZWQgICAgOiBEZWNlbWJlciAyMDIyCis7OyBLZXl3b3JkcyAgIDogdG9tbCBsYW5ndWFnZXMg dHJlZS1zaXR0ZXIKKworOzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEVtYWNzLgorCis7 OyBHTlUgRW1hY3MgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorOzsgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKzs7IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCis7OyAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCis7OyBHTlUgRW1hY3MgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzs7IGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCis7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCis7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCis7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOzsgYWxvbmcgd2l0aCBHTlUgRW1h Y3MuICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCis7 OzsgQ29tbWVudGFyeToKKzs7CisKKzs7OyBDb2RlOgorCisocmVxdWlyZSAndHJlZXNpdCkK KworKGRlY2xhcmUtZnVuY3Rpb24gdHJlZXNpdC1wYXJzZXItY3JlYXRlICJ0cmVlc2l0LmMi KQorKGRlY2xhcmUtZnVuY3Rpb24gdHJlZXNpdC1pbmR1Y2Utc3BhcnNlLXRyZWUgInRyZWVz aXQuYyIpCisoZGVjbGFyZS1mdW5jdGlvbiB0cmVlc2l0LW5vZGUtc3RhcnQgInRyZWVzaXQu YyIpCisoZGVjbGFyZS1mdW5jdGlvbiB0cmVlc2l0LW5vZGUtY2hpbGQtYnktZmllbGQtbmFt ZSAidHJlZXNpdC5jIikKKworKGRlZmN1c3RvbSB0b21sLXRzLW1vZGUtaW5kZW50LW9mZnNl dCAyCisgICJOdW1iZXIgb2Ygc3BhY2VzIGZvciBlYWNoIGluZGVudGF0aW9uIHN0ZXAgaW4g YHRvbWwtdHMtbW9kZScuIgorICA6dmVyc2lvbiAiMjkuMSIKKyAgOnR5cGUgJ2ludGVnZXIK KyAgOnNhZmUgJ2ludGVnZXJwCisgIDpncm91cCAndG9tbCkKKworKGRlZnZhciB0b21sLXRz LW1vZGUtLXN5bnRheC10YWJsZQorICAobGV0ICgodGFibGUgKG1ha2Utc3ludGF4LXRhYmxl KSkpCisgICAgKG1vZGlmeS1zeW50YXgtZW50cnkgP18gICJfIiAgICAgdGFibGUpCisgICAg KG1vZGlmeS1zeW50YXgtZW50cnkgP1xcICJcXCIgICAgdGFibGUpCisgICAgKG1vZGlmeS1z eW50YXgtZW50cnkgPz0gICIuIiAgICAgdGFibGUpCisgICAgKG1vZGlmeS1zeW50YXgtZW50 cnkgP1wnICJcIiIgICAgdGFibGUpCisgICAgKG1vZGlmeS1zeW50YXgtZW50cnkgPyMgICI8 IiAgIHRhYmxlKQorICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID9cbiAiPiBiIiAgdGFibGUp CisgICAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1xebSAiPiBiIiB0YWJsZSkKKyAgICB0YWJs ZSkKKyAgIlN5bnRheCB0YWJsZSBmb3IgYHRvbWwtdHMtbW9kZScuIikKKworKGRlZnZhciB0 b21sLXRzLS1pbmRlbnQtcnVsZXMKKyAgYCgodG9tbAorICAgICAoKG5vZGUtaXMgIl0iKSBw YXJlbnQtYm9sIDApCisgICAgICgocGFyZW50LWlzICJzdHJpbmciKSBwYXJlbnQtYm9sIHRv bWwtdHMtbW9kZS1pbmRlbnQtb2Zmc2V0KQorICAgICAoKHBhcmVudC1pcyAiYXJyYXkiKSBw YXJlbnQtYm9sIHRvbWwtdHMtbW9kZS1pbmRlbnQtb2Zmc2V0KSkpKQorCisoZGVmdmFyIHRv bWwtdHMtbW9kZS0tZm9udC1sb2NrLXNldHRpbmdzCisgICh0cmVlc2l0LWZvbnQtbG9jay1y dWxlcworICAgOmxhbmd1YWdlICd0b21sCisgICA6ZmVhdHVyZSAnY29tbWVudAorICAgJygo Y29tbWVudCkgQGZvbnQtbG9jay1jb21tZW50LWZhY2UpCisKKyAgIDpsYW5ndWFnZSAndG9t bAorICAgOmZlYXR1cmUgJ2NvbnN0YW50CisgICAnKChib29sZWFuKSBAZm9udC1sb2NrLWNv bnN0YW50LWZhY2UpCisKKyAgIDpsYW5ndWFnZSAndG9tbAorICAgOmZlYXR1cmUgJ2RlbGlt aXRlcgorICAgJygoWyI9Il0pIEBmb250LWxvY2stZGVsaW1pdGVyLWZhY2UpCisKKyAgIDps YW5ndWFnZSAndG9tbAorICAgOmZlYXR1cmUgJ251bWJlcgorICAgJyhbKGludGVnZXIpIChm bG9hdCkgKGxvY2FsX2RhdGUpIChsb2NhbF9kYXRlX3RpbWUpIChsb2NhbF90aW1lKV0KKyAg ICAgQGZvbnQtbG9jay1udW1iZXItZmFjZSkKKworICAgOmxhbmd1YWdlICd0b21sCisgICA6 ZmVhdHVyZSAnc3RyaW5nCisgICAnKChzdHJpbmcpIEBmb250LWxvY2stc3RyaW5nLWZhY2Up CisKKyAgIDpsYW5ndWFnZSAndG9tbAorICAgOmZlYXR1cmUgJ2VzY2FwZS1zZXF1ZW5jZQor ICAgOm92ZXJyaWRlIHQKKyAgICcoKGVzY2FwZV9zZXF1ZW5jZSkgQGZvbnQtbG9jay1lc2Nh cGUtZmFjZSkKKworICAgOmxhbmd1YWdlICd0b21sCisgICA6ZmVhdHVyZSAncGFpcgorICAg Om92ZXJyaWRlIHQgICAgICAgICAgICA7IE5lZWRlZCBmb3Igb3ZlcnJpZGluZyBzdHJpbmcg ZmFjZSBvbiBrZXlzLgorICAgJygoYmFyZV9rZXkpIEBmb250LWxvY2stcHJvcGVydHktZmFj ZQorICAgICAocXVvdGVkX2tleSkgQGZvbnQtbG9jay1wcm9wZXJ0eS1mYWNlCisgICAgICh0 YWJsZSAoIlsiIEBmb250LWxvY2stYnJhY2tldC1mYWNlCisgICAgICAgICAgICAgKF8pIEBm b250LWxvY2stdHlwZS1mYWNlCisgICAgICAgICAgICAgIl0iIEBmb250LWxvY2stYnJhY2tl dC1mYWNlKSkKKyAgICAgKHRhYmxlX2FycmF5X2VsZW1lbnQgKCJbWyIgQGZvbnQtbG9jay1i cmFja2V0LWZhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChfKSBAZm9udC1sb2Nr LXR5cGUtZmFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIl1dIiBAZm9udC1sb2Nr LWJyYWNrZXQtZmFjZSkpCisgICAgICh0YWJsZSAocXVvdGVkX2tleSkgQGZvbnQtbG9jay10 eXBlLWZhY2UpCisgICAgICh0YWJsZSAoZG90dGVkX2tleSAocXVvdGVkX2tleSkpIEBmb250 LWxvY2stdHlwZS1mYWNlKSkKKworICAgOmxhbmd1YWdlICd0b21sCisgICA6ZmVhdHVyZSAn ZXJyb3IKKyAgIDpvdmVycmlkZSB0CisgICAnKChFUlJPUikgQGZvbnQtbG9jay13YXJuaW5n LWZhY2UpKQorICAiRm9udC1sb2NrIHNldHRpbmdzIGZvciBUT01MLiIpCisKKyhkZWZ1biB0 b21sLXRzLW1vZGUtLWdldC10YWJsZS1uYW1lIChub2RlKQorICAiT2J0YWlucyB0aGUgaGVh ZGVyLW5hbWUgZm9yIHRoZSBhc3NvY2lhdGVkIHRyZWUtc2l0dGVyIGBOT0RFJy4iCisgIChp ZiBub2RlCisgICAgICAodHJlZXNpdC1ub2RlLXRleHQKKyAgICAgICAoY2FyIChjZHIgKHRy ZWVzaXQtbm9kZS1jaGlsZHJlbiBub2RlKSkpKQorICAgICJSb290IHRhYmxlIikpCisKKyhk ZWZ1biB0b21sLXRzLW1vZGUtLWltZW51LTEgKG5vZGUpCisgICJIZWxwZXIgZm9yIGB0b21s LXRzLW1vZGUtLWltZW51Jy4KK0ZpbmQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGZvciBOT0RF IGFuZCBzZXQgbWFya2VyLCB0aGVuIHJlY3Vyc2UKK3RoZSBzdWJ0cmVlcy4iCisgIChsZXQq ICgodHMtbm9kZSAoY2FyIG5vZGUpKQorICAgICAgICAgKHN1YnRyZWVzIChtYXBjYW4gIyd0 b21sLXRzLW1vZGUtLWltZW51LTEgKGNkciBub2RlKSkpCisgICAgICAgICAobmFtZSAodG9t bC10cy1tb2RlLS1nZXQtdGFibGUtbmFtZSB0cy1ub2RlKSkKKyAgICAgICAgIChtYXJrZXIg KHdoZW4gdHMtbm9kZQorICAgICAgICAgICAgICAgICAgIChzZXQtbWFya2VyIChtYWtlLW1h cmtlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHJlZXNpdC1ub2RlLXN0 YXJ0IHRzLW5vZGUpKSkpKQorICAgIChjb25kCisgICAgICgobnVsbCB0cy1ub2RlKSBzdWJ0 cmVlcykKKyAgICAgKHN1YnRyZWVzCisgICAgICBgKCgsbmFtZSAsKGNvbnMgbmFtZSBtYXJr ZXIpICxAc3VidHJlZXMpKSkKKyAgICAgKHQKKyAgICAgIGAoKCxuYW1lIC4gLG1hcmtlcikp KSkpKQorCisoZGVmdW4gdG9tbC10cy1tb2RlLS1pbWVudSAoKQorICAiUmV0dXJuIEltZW51 IGFsaXN0IGZvciB0aGUgY3VycmVudCBidWZmZXIuIgorICAobGV0KiAoKG5vZGUgKHRyZWVz aXQtYnVmZmVyLXJvb3Qtbm9kZSkpCisgICAgICAgICAodGFibGUtdHJlZSAodHJlZXNpdC1p bmR1Y2Utc3BhcnNlLXRyZWUKKyAgICAgICAgICAgICAgICAgICAgICBub2RlICJedGFibGUk IiBuaWwgMTAwMCkpCisgICAgICAgICAodGFibGUtYXJyYXktdHJlZSAodHJlZXNpdC1pbmR1 Y2Utc3BhcnNlLXRyZWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlICJedGFi bGVfYXJyYXlfZWxlbWVudCQiIG5pbCAxMDAwKSkKKyAgICAgICAgICh0YWJsZS1pbmRleCAo dG9tbC10cy1tb2RlLS1pbWVudS0xIHRhYmxlLXRyZWUpKQorICAgICAgICAgKHRhYmxlLWFy cmF5LWluZGV4ICh0b21sLXRzLW1vZGUtLWltZW51LTEgdGFibGUtYXJyYXktdHJlZSkpKQor ICAgIChhcHBlbmQKKyAgICAgKHdoZW4gdGFibGUtaW5kZXggYCgoIkhlYWRlcnMiIC4gLHRh YmxlLWluZGV4KSkpCisgICAgICh3aGVuIHRhYmxlLWFycmF5LWluZGV4IGAoKCJBcnJheXMi IC4gLHRhYmxlLWFycmF5LWluZGV4KSkpKSkpCisKKworOzs7IyMjYXV0b2xvYWQKKyhhZGQt dG8tbGlzdCAnYXV0by1tb2RlLWFsaXN0ICcoIlxcLnRvbWxcXCciIC4gdG9tbC10cy1tb2Rl KSkKKworOzs7IyMjYXV0b2xvYWQKKyhkZWZpbmUtZGVyaXZlZC1tb2RlIHRvbWwtdHMtbW9k ZSB0ZXh0LW1vZGUgIlRPTUwiCisgICJNYWpvciBtb2RlIGZvciBlZGl0aW5nIFRPTUwsIHBv d2VyZWQgYnkgdHJlZS1zaXR0ZXIuIgorICA6Z3JvdXAgJ3RvbWwtbW9kZQorICA6c3ludGF4 LXRhYmxlIHRvbWwtdHMtbW9kZS0tc3ludGF4LXRhYmxlCisKKyAgKHdoZW4gKHRyZWVzaXQt cmVhZHktcCAndG9tbCkKKyAgICAodHJlZXNpdC1wYXJzZXItY3JlYXRlICd0b21sKQorCisg ICAgOzsgQ29tbWVudHMKKyAgICAoc2V0cS1sb2NhbCBjb21tZW50LXN0YXJ0ICIjICIpCisg ICAgKHNldHEtbG9jYWwgY29tbWVuZC1lbmQgIiIpCisKKyAgICA7OyBJbmRlbnQuCisgICAg KHNldHEtbG9jYWwgdHJlZXNpdC1zaW1wbGUtaW5kZW50LXJ1bGVzIHRvbWwtdHMtLWluZGVu dC1ydWxlcykKKworICAgIDs7IE5hdmlnYXRpb24uCisgICAgKHNldHEtbG9jYWwgdHJlZXNp dC1kZWZ1bi10eXBlLXJlZ2V4cAorICAgICAgICAgICAgICAgIChyeCAob3IgInRhYmxlIiAi dGFibGVfYXJyYXlfZWxlbWVudCIpKSkKKworICAgIDs7IEZvbnQtbG9jay4KKyAgICAoc2V0 cS1sb2NhbCB0cmVlc2l0LWZvbnQtbG9jay1zZXR0aW5ncyB0b21sLXRzLW1vZGUtLWZvbnQt bG9jay1zZXR0aW5ncykKKyAgICAoc2V0cS1sb2NhbCB0cmVlc2l0LWZvbnQtbG9jay1mZWF0 dXJlLWxpc3QKKyAgICAgICAgICAgICAgICAnKChjb21tZW50KQorICAgICAgICAgICAgICAg ICAgKGNvbnN0YW50IG51bWJlciBwYWlyIHN0cmluZykKKyAgICAgICAgICAgICAgICAgIChl c2NhcGUtc2VxdWVuY2UpCisgICAgICAgICAgICAgICAgICAoZGVsaW1pdGVyIGVycm9yKSkp CisgICAgKHNldHEtbG9jYWwgdHJlZXNpdC1mb250LWxvY2stbGV2ZWwgNCkKKworICAgIDs7 IEltZW51LgorICAgIChzZXRxLWxvY2FsIGltZW51LWNyZWF0ZS1pbmRleC1mdW5jdGlvbiAj J3RvbWwtdHMtbW9kZS0taW1lbnUpCisgICAgKHNldHEtbG9jYWwgd2hpY2gtZnVuYy1mdW5j dGlvbnMgbmlsKSA7OyBQaWdneWJhY2sgb24gaW1lbnUKKworICAgICh0cmVlc2l0LW1ham9y LW1vZGUtc2V0dXApKSkKKworKHByb3ZpZGUgJ3RvbWwtdHMtbW9kZSkKKworOzs7IHRvbWwt dHMtbW9kZS5lbCBlbmRzIGhlcmUKLS0gCjIuMzcuMgoK --------------hKfzGg6sKQqjHPWtHEmArwap--