From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Dmitry Gutov Newsgroups: gmane.emacs.devel Subject: Re: Adding support for xref jumping to headers/interfaces Date: Sun, 5 Nov 2023 01:16:08 +0200 Message-ID: References: <865ybmu2ha.fsf@stephe-leake.org> <39e25c9a-b4cc-a0ce-3f2a-1d2a1fc243d0@yandex.ru> <83pm9sfxfa.fsf@gnu.org> <861qm4tkih.fsf@stephe-leake.org> <71ea5e83-183f-2ae3-8146-6a31045a0309@yandex.ru> <834jqzafse.fsf@gnu.org> <83h6uv47e8.fsf@gnu.org> <4639d7ca-2109-864c-33c0-38e65f26f262@yandex.ru> <835ybb3txt.fsf@gnu.org> <83wn3q311i.fsf@gnu.org> <412afa2d-5dbc-52da-39c4-99be3873929c@yandex.ru> <83o7p20wdi.fsf@gnu.org> <72b09256-5a1b-8962-9e3c-7d2ffd0dc0d7@yandex.ru> <83ilf925n8.fsf@gnu.org> <95afa441-18ae-e62a-be16-be73a545bbba@yandex.ru> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------DvWKR5tSyNHYxoo25HG0xwrP" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="37186"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Cc: Eli Zaretskii , stephen_leake@stephe-leake.org, john@yates-sheets.org, rms@gnu.org, fgunbin@fastmail.fm, casouri@gmail.com, emacs-devel@gnu.org, azeng@janestreet.com To: Spencer Baugh Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sun Nov 05 00:17:36 2023 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 1qzPtX-0009Tp-Ly for ged-emacs-devel@m.gmane-mx.org; Sun, 05 Nov 2023 00:17:35 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qzPsT-0002ge-KW; Sat, 04 Nov 2023 19:16:29 -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 1qzPsR-0002gL-KQ for emacs-devel@gnu.org; Sat, 04 Nov 2023 19:16:27 -0400 Original-Received: from forward100a.mail.yandex.net ([178.154.239.83]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qzPsO-00060J-ER; Sat, 04 Nov 2023 19:16:27 -0400 Original-Received: from mail-nwsmtp-smtp-production-main-64.vla.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-64.vla.yp-c.yandex.net [IPv6:2a02:6b8:c1f:1492:0:640:cd24:0]) by forward100a.mail.yandex.net (Yandex) with ESMTP id 477B946C88; Sun, 5 Nov 2023 02:16:19 +0300 (MSK) Original-Received: by mail-nwsmtp-smtp-production-main-64.vla.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id EGjjHeKd80U0-zqVzm7Br; Sun, 05 Nov 2023 02:16:18 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1699139778; bh=fk4DxGc+EtT0OwCMl+K3tysEdmFYKxKc40+ch0y2dZA=; h=In-Reply-To:From:Message-ID:Cc:References:Date:Subject:To; b=BvzE2gE0qoYGYlsj3MwSIrRBEjVFYXsTHS8Q1cyqiK+iPQYWdbXD8GVn+D2KrmH1g CvxuvcWOOmXB9LK+UKvgjNLLosCGt4icW5O+ELZnMoQnyDpjJOsDX/yFltjSL7KbKs F35cVCmZfGc9yklMzBGpCC9FjUKexl2i4LNMd8xk= Authentication-Results: mail-nwsmtp-smtp-production-main-64.vla.yp-c.yandex.net; dkim=pass header.i=@yandex.ru Original-Received: from compute7.internal (compute7.nyi.internal [10.202.2.48]) by mailauth.nyi.internal (Postfix) with ESMTP id B7E8427C0054; Sat, 4 Nov 2023 19:16:14 -0400 (EDT) Original-Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sat, 04 Nov 2023 19:16:14 -0400 X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrudduuddgtdejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurheptgfkffggfgfuvfevfhfhjgesmhdtreertdefjeenucfhrhhomhepffhmihht rhihucfiuhhtohhvuceoughguhhtohhvseihrghnuggvgidrrhhuqeenucggtffrrghtth gvrhhnpeekvdffteeihedugffgudevgfduudehledvteffveetleevhfetvdduvdffledu heenucffohhmrghinhepghhithhhuhgsrdgtohhmpdhsthgrtghkohhvvghrfhhlohifrd gtohhmnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhep ughguhhtohhvodhmvghsmhhtphgruhhthhhpvghrshhonhgrlhhithihqddufeeffeelle ehhedvqddvleegjeejjeejiedqughguhhtohhvpeephigrnhguvgigrdhruhesfhgrshht mhgrihhlrdgtohhm X-ME-Proxy: Feedback-ID: ib1d9465d:Fastmail Original-Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sat, 4 Nov 2023 19:16:11 -0400 (EDT) Content-Language: en-US In-Reply-To: Received-SPF: pass client-ip=178.154.239.83; envelope-from=dgutov@yandex.ru; helo=forward100a.mail.yandex.net X-Spam_score_int: -51 X-Spam_score: -5.2 X-Spam_bar: ----- X-Spam_report: (-5.2 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, NICE_REPLY_A=-3.137, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-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:312230 Archived-At: This is a multi-part message in MIME format. --------------DvWKR5tSyNHYxoo25HG0xwrP Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 17/05/2023 00:10, Spencer Baugh wrote: > An option I didn't mention originally: Perhaps xref-find-definitions > could just show both implementation and interface. That would remove > the need for any new keybindings. The UI might be worse but perhaps > it could be improved. > > This is inspired by this comment: > https://github.com/joaotavora/eglot/issues/302#issuecomment-534202561 > > The relevant excerpt: >> By the way, on a tangent, I think it's a mistake on LSP's part to >> import C++/Java's ecosystem of possible symbol loci. In Common Lisp, >> there are many different types of construct associated with a symbol >> and they are all "definitions". A good IDE like SLIME will use >> something akin to xref-find-definitions (indeed xref is modelled after >> SLIME) and categorize them properly in the result buffer if there is >> more than one. So the command should have been textDocument/definition >> with some kind of subtype parameter, or at least this is where xref >> should evolve to, i.e. xref should keep the single command >> xref-find-definitions and maybe augment it with some "definition-type" >> parameter. Perhaps it /should/ (xref-find-definitions to include both implementation and interface). And include the typeDefinition entries for langs that have those. Etc. Would the UI be worse? Let's try to find out. Attached is the patch along the lines that we discussed: a new command xref-find-extra currently bound to M-' just for the sake of this experiment (eliminating the need to set up define-key to try out the "fast" workflow). It uses the symbol at point or asks for it, then polls the backend for available kinds, does completing-read and asks the backend for definitions of that kind. And shows the list or jumps to the unique one. To have something to test, I implemented this for Elisp. However, all known kinds are already printed by the regular xref-find-definitions output in that backend. So the result turned out interesting, but a little impractical: with Elisp, we already make the choice between the kinds in the Xref output buffer, when that buffer is shown at all (as Eli pointed out, actually). So... we could proceed in that direction and recommend that all kinds of definitions would be added there. But let's try to answer the question: which workflows would the attached approach work better for? I could give one example: in Java, you sometimes (often?) want to find the locations where the current definition near point is overridden by subclasses. We could call it "find overrides", for example. But it does not just filter by kind (e.g. method overrides), it also filters by class hierarchy, i.e. showing only definitions in the subclasses of the current class, or interface. Examples of such searches: https://stackoverflow.com/questions/11849631/how-to-find-the-overridden-method-in-eclipse https://stackoverflow.com/questions/1143267/finding-overriding-methods Is this still something people care about? Does jdt-ls even support this? Or perhaps the main value would be in actually having separate commands which could be bound to a submap with faster key sequences and/or to the context menu (with context-menu-mode on). Then our solution should be more in line with either defining a number of additional named commands (for mode universal kinds) and/or making it easier to define new such commands for users/3rd-party packages/etc. Please try out the attached (with implementation for Eglot hopefully coming soon) and let me know your thoughts (you all). --------------DvWKR5tSyNHYxoo25HG0xwrP Content-Type: text/x-patch; charset=UTF-8; name="xref-find-extras.diff" Content-Disposition: attachment; filename="xref-find-extras.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3AvcHJvZ21vZGVzL2VsaXNwLW1vZGUuZWwgYi9saXNwL3Byb2dt b2Rlcy9lbGlzcC1tb2RlLmVsCmluZGV4IGZmOTBhNzQ0ZWEzLi5lYWQ4YjYxODU5OSAxMDA2 NDQKLS0tIGEvbGlzcC9wcm9nbW9kZXMvZWxpc3AtbW9kZS5lbAorKysgYi9saXNwL3Byb2dt b2Rlcy9lbGlzcC1tb2RlLmVsCkBAIC0xMDM3LDYgKzEwMzcsMjYgQEAgeHJlZi1iYWNrZW5k LWRlZmluaXRpb25zCiAgICAgICAgICAgICAgICAgKGVsaXNwLS14cmVmLWZpbHRlci1kZWZp bml0aW9ucyBkZWZzICdhbnkgc3ltKSkKICAgICAgICAgICAoZWxpc3AtLXhyZWYtZmlsdGVy LWRlZmluaXRpb25zIGRlZnMgbmFtZXNwYWNlIHN5bSkpKSkpKQogCisoY2wtZGVmbWV0aG9k IHhyZWYtYmFja2VuZC1leHRyYS1raW5kcyAoKF9iYWNrZW5kIChlcWwgJ2VsaXNwKSkgaWRl bnRpZmllcikKKyAgKHJlcXVpcmUgJ2ZpbmQtZnVuYykKKyAgKGxldCAoKHN5bSAoaW50ZXJu LXNvZnQgaWRlbnRpZmllcikpKQorICAgICh3aGVuIHN5bQorICAgICAgKGxldCogKChwb3Mg KGdldC10ZXh0LXByb3BlcnR5IDAgJ3BvcyBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgICAo bmFtZXNwYWNlIChpZiBwb3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWxpc3At LXhyZWYtaW5mZXItbmFtZXNwYWNlIHBvcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg J2FueSkpCisgICAgICAgICAgICAgKGRlZnMgKGVsaXNwLS14cmVmLWZpbmQtZGVmaW5pdGlv bnMgc3ltKSkpCisgICAgICAgIChwY2FzZS1leGhhdXN0aXZlIG5hbWVzcGFjZQorICAgICAg ICAgICgnZnVuY3Rpb24gJyhmdW5jdGlvbiBkZWZhbGlhcyBkZWZpbmUtdHlwZQorICAgICAg ICAgICAgICAgICAgICAgICBjbC1kZWZnZW5lcmljIGNsLWRlZm1ldGhvZCkpCisgICAgICAg ICAgKCd2YXJpYWJsZSAnKGRlZnZhcikpCisgICAgICAgICAgKCdmYWNlICcoZGVmZmFjZSkp CisgICAgICAgICAgKCdmZWF0dXJlICcoZmVhdHVyZSkpKQorICAgICAgICAoaWYgKGVxIG5h bWVzcGFjZSAnbWF5YmUtdmFyaWFibGUpCisgICAgICAgICAgICAob3IgKGVsaXNwLS14cmVm LWZpbHRlci1kZWZpbml0aW9ucyBkZWZzICd2YXJpYWJsZSBzeW0pCisgICAgICAgICAgICAg ICAgKGVsaXNwLS14cmVmLWZpbHRlci1kZWZpbml0aW9ucyBkZWZzICdhbnkgc3ltKSkKKyAg ICAgICAgICAoZWxpc3AtLXhyZWYtZmlsdGVyLWRlZmluaXRpb25zIGRlZnMgbmFtZXNwYWNl IHN5bSkpKSkpKQorCiAoZGVmdW4gZWxpc3AtLXhyZWYtZmlsdGVyLWRlZmluaXRpb25zIChk ZWZpbml0aW9ucyBuYW1lc3BhY2Ugc3ltYm9sKQogICAoaWYgKGVxIG5hbWVzcGFjZSAnYW55 KQogICAgICAgKGlmIChtZW1xIHN5bWJvbCBtaW5vci1tb2RlLWxpc3QpCkBAIC0xMjEyLDYg KzEyMzIsNjYgQEAgZWxpc3AtLXhyZWYtZmluZC1kZWZpbml0aW9ucwogCiAgICAgeHJlZnMp KQogCisoY2wtZGVmbWV0aG9kIHhyZWYtYmFja2VuZC1leHRyYS1raW5kcyAoKF9iYWNrZW5k IChlcWwgJ2VsaXNwKSkgaWRlbnRpZmllcikKKyAgOzsgVGhlIGZpbGUgbmFtZSBpcyBub3Qg a25vd24gd2hlbiBgc3ltYm9sJyBpcyBkZWZpbmVkIHZpYSBpbnRlcmFjdGl2ZSBldmFsLgor ICAobGV0ICgoc3ltYm9sIChpbnRlcm4tc29mdCBpZGVudGlmaWVyKSkKKyAgICAgICAga2lu ZHMpCisgICAgOzsgYWxwaGFiZXRpY2FsIGJ5IHJlc3VsdCB0eXBlIHN5bWJvbAorCisgICAg OzsgRklYTUU6IGFkdmlzZWQgZnVuY3Rpb247IGxpc3Qgb2YgYWR2aWNlIGZ1bmN0aW9ucwor ICAgIDs7IEZJWE1FOiBhbGlhc2VkIHZhcmlhYmxlCisKKyAgICA7OyBDb2Rpbmcgc3lzdGVt IHN5bWJvbHMgZG8gbm90IGFwcGVhciBpbiDigJhsb2FkLWhpc3RvcnnigJksCisgICAgOzsg c28gd2UgY2Fu4oCZdCBnZXQgYSBsb2NhdGlvbiBmb3IgdGhlbS4KKyAgICAod2hlbiAoYW5k IChzeW1ib2xwIHN5bWJvbCkKKyAgICAgICAgICAgICAgIChzeW1ib2wtZnVuY3Rpb24gc3lt Ym9sKQorICAgICAgICAgICAgICAgKHN5bWJvbHAgKHN5bWJvbC1mdW5jdGlvbiBzeW1ib2wp KSkKKyAgICAgIChwdXNoICJkZWZhbGlhcyIga2luZHMpKQorCisgICAgKHdoZW4gKGZhY2Vw IHN5bWJvbCkKKyAgICAgIChwdXNoICJmYWNlIiBraW5kcykpCisKKyAgICAod2hlbiAoZmJv dW5kcCBzeW1ib2wpCisgICAgICAobGV0ICgoZmlsZSAoZmluZC1saXNwLW9iamVjdC1maWxl LW5hbWUgc3ltYm9sIChzeW1ib2wtZnVuY3Rpb24gc3ltYm9sKSkpCisgICAgICAgICAgICBk b2MpCisgICAgICAgICh3aGVuIGZpbGUKKyAgICAgICAgICAoY29uZAorICAgICAgICAgICAo KGVxIGZpbGUgJ0Mtc291cmNlKQorICAgICAgICAgICAgKHB1c2ggImZ1bmN0aW9uIiBraW5k cykpCisgICAgICAgICAgICgoYW5kIChzZXRxIGRvYyAoZG9jdW1lbnRhdGlvbiBzeW1ib2wg dCkpCisgICAgICAgICAgICAgICAgIDs7IFRoaXMgZG9jIHN0cmluZyBpcyBkZWZpbmVkIGlu IGNsLW1hY3MuZWwgY2wtZGVmc3RydWN0CisgICAgICAgICAgICAgICAgIChzdHJpbmctbWF0 Y2ggIkNvbnN0cnVjdG9yIGZvciBvYmplY3RzIG9mIHR5cGUgYFxcKC4qXFwpJyIgZG9jKSkK KyAgICAgICAgICAgIChwdXNoICJjb25zdHJ1Y3RvciIga2luZHMpKQorICAgICAgICAgICAo KGNsLS1nZW5lcmljIHN5bWJvbCkKKyAgICAgICAgICAgIChwdXNoICJnZW5lcmljIiBraW5k cykpCisgICAgICAgICAgICh0CisgICAgICAgICAgICAocHVzaCAiZnVuY3Rpb24iIGtpbmRz KSkpKSkpCisgICAgKHdoZW4gKGJvdW5kcCBzeW1ib2wpCisgICAgICAocHVzaCAidmFyaWFi bGUiIGtpbmRzKSkKKyAgICAod2hlbiAoZmVhdHVyZXAgc3ltYm9sKQorICAgICAgKHB1c2gg ImZlYXR1cmUiIGtpbmRzKSkKKyAgICAobnJldmVyc2Uga2luZHMpKSkKKworKGNsLWRlZm1l dGhvZCB4cmVmLWJhY2tlbmQtZXh0cmEtZGVmcyAoKF9iYWNrZW5kIChlcWwgJ2VsaXNwKSkg aWRlbnRpZmllciBraW5kKQorICAocmVxdWlyZSAnZmluZC1mdW5jKQorICAobGV0ICgoc3lt IChpbnRlcm4tc29mdCBpZGVudGlmaWVyKSkpCisgICAgKHdoZW4gc3ltCisgICAgICAobGV0 KiAoKGRlZnMgKGVsaXNwLS14cmVmLWZpbmQtZGVmaW5pdGlvbnMgc3ltKSkKKyAgICAgICAg ICAgICAoZXhwZWN0ZWQta2luZAorICAgICAgICAgICAgICAoYXNzb2MtZGVmYXVsdCBraW5k CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoKCJkZWZhbGlhcyIgLiBkZWZhbGlh cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImZhY2UiIC4gZGVmZmFjZSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImZ1bmN0aW9uIiAuIG5pbCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInZhcmlhYmxlIiAuIGRlZnZhcikKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImNvbnN0cnVjdG9yIiAuIGRlZmluZS10 eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZ2VuZXJpYyIgLiBnZW5l cmljKSkpKSkKKyAgICAgICAgKGNsLWxvb3AgZm9yIGQgaW4gZGVmcworICAgICAgICAgICAg ICAgICBmb3IgZGVmLWtpbmQgPSAoeHJlZi1lbGlzcC1sb2NhdGlvbi10eXBlICh4cmVmLWl0 ZW0tbG9jYXRpb24gZCkpCisgICAgICAgICAgICAgICAgIHdoZW4gKGlmIChlcSBleHBlY3Rl ZC1raW5kICdnZW5lcmljKQorICAgICAgICAgICAgICAgICAgICAgICAgICAobWVtcSBkZWYt a2luZCAnKGNsLWRlZmdlbmVyaWMgY2wtZGVmbWV0aG9kKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgIChlcSBkZWYta2luZCBleHBlY3RlZC1raW5kKSkKKyAgICAgICAgICAgICAgICAg Y29sbGVjdCBkKSkpKSkKKwogKGRlY2xhcmUtZnVuY3Rpb24geHJlZi1hcHJvcG9zLXJlZ2V4 cCAieHJlZiIgKHBhdHRlcm4pKQogCiAoY2wtZGVmbWV0aG9kIHhyZWYtYmFja2VuZC1hcHJv cG9zICgoX2JhY2tlbmQgKGVxbCAnZWxpc3ApKSBwYXR0ZXJuKQpkaWZmIC0tZ2l0IGEvbGlz cC9wcm9nbW9kZXMveHJlZi5lbCBiL2xpc3AvcHJvZ21vZGVzL3hyZWYuZWwKaW5kZXggODE2 MTg0MjhiZjMuLmUxZTM4NjIyNTZjIDEwMDY0NAotLS0gYS9saXNwL3Byb2dtb2Rlcy94cmVm LmVsCisrKyBiL2xpc3AvcHJvZ21vZGVzL3hyZWYuZWwKQEAgLTMxNCw2ICszMTQsMTcgQEAg eHJlZi1iYWNrZW5kLWlkZW50aWZpZXItY29tcGxldGlvbi1pZ25vcmUtY2FzZQogICAiUmV0 dXJuIHQgaWYgY2FzZSBpcyBub3Qgc2lnbmlmaWNhbnQgaW4gaWRlbnRpZmllciBjb21wbGV0 aW9uLiIKICAgY29tcGxldGlvbi1pZ25vcmUtY2FzZSkKIAorKGNsLWRlZmdlbmVyaWMgeHJl Zi1iYWNrZW5kLWV4dHJhLWtpbmRzIChfYmFja2VuZCBfaWRlbnRpZmllcikKKyAgIlJldHVy biB0aGUgb3RoZXIgZGVmaW5pdGlvbiB0eXBlcyBCQUNLRU5EIGNvdWxkIHNob3cgZm9yIElE RU5USUZJRVIuIgorICAodXNlci1lcnJvciAiRXh0cmEgZGVmaW5pdGlvbnMgbm90IHN1cHBv cnRlZCBieSB0aGUgYmFja2VuZCIpKQorCisoY2wtZGVmZ2VuZXJpYyB4cmVmLWJhY2tlbmQt ZXh0cmEtZGVmcyAoX2JhY2tlbmQgX2lkZW50aWZpZXIgX2tpbmQpCisgICJGaW5kIGRlZmlu aXRpb25zIG9mIGV4dHJhIEtJTkQgZm9yIElERU5USUZJRVIuCisKK1RoZSByZXN1bHQgbXVz dCBiZSBhIGxpc3Qgb2YgeHJlZiBvYmplY3RzLiAgUmVmZXIgdG8KK2B4cmVmLWJhY2tlbmQt ZGVmaW5pdGlvbnMnIGZvciBvdGhlciBkZXRhaWxzLiIKKyAgbmlsKQorCiAMCiA7OzsgbWlz YyB1dGlsaXRpZXMKIChkZWZ1biB4cmVmLS1hbGlzdGlmeSAobGlzdCBrZXkpCkBAIC0zNjQs NyArMzc1LDggQEAgeHJlZi1tYXJrZXItcmluZy1sZW5ndGgKIAogKGRlZmN1c3RvbSB4cmVm LXByb21wdC1mb3ItaWRlbnRpZmllciAnKG5vdCB4cmVmLWZpbmQtZGVmaW5pdGlvbnMKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZi1maW5kLWRl ZmluaXRpb25zLW90aGVyLXdpbmRvdwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB4cmVmLWZpbmQtZGVmaW5pdGlvbnMtb3RoZXItZnJhbWUpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWYtZmluZC1kZWZp bml0aW9ucy1vdGhlci1mcmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB4cmVmLWZpbmQtZXh0cmEpCiAgICJJZiBub24tbmlsLCBwcm9tcHQgZm9y IHRoZSBpZGVudGlmaWVyIHRvIGZpbmQuCiAKIFdoZW4gdCwgYWx3YXlzIHByb21wdCBmb3Ig dGhlIGlkZW50aWZpZXIgbmFtZS4KQEAgLTE1NjksMTEgKzE1ODEsMTEgQEAgeHJlZi0tZmlu ZC1kZWZpbml0aW9ucwogICAgKHhyZWYtLWNyZWF0ZS1mZXRjaGVyIGlkICdkZWZpbml0aW9u cyBpZCkKICAgIGRpc3BsYXktYWN0aW9uKSkKIAotKGRlZnVuIHhyZWYtLWNyZWF0ZS1mZXRj aGVyIChpbnB1dCBraW5kIGFyZykKKyhkZWZ1biB4cmVmLS1jcmVhdGUtZmV0Y2hlciAoaW5w dXQga2luZCAmcmVzdCBhcmdzKQogICAiUmV0dXJuIGFuIHhyZWYgbGlzdCBmZXRjaGVyIGZ1 bmN0aW9uLgogCiBJdCByZXZpc2l0cyB0aGUgc2F2ZWQgcG9zaXRpb24gYW5kIGRlbGVnYXRl cyB0aGUgZmluZGluZyBsb2dpYyB0bwotdGhlIHhyZWYgYmFja2VuZCBtZXRob2QgaW5kaWNh dGVkIGJ5IEtJTkQgYW5kIHBhc3NlcyBBUkcgdG8gaXQuIgordGhlIHhyZWYgYmFja2VuZCBt ZXRob2QgaW5kaWNhdGVkIGJ5IEtJTkQgYW5kIHBhc3NlcyBBUkdTIHRvIGl0LiIKICAgKGxl dCogKChvcmlnLWJ1ZmZlciAoY3VycmVudC1idWZmZXIpKQogICAgICAgICAgKG9yaWctcG9z aXRpb24gKHBvaW50KSkKICAgICAgICAgIChiYWNrZW5kICh4cmVmLWZpbmQtYmFja2VuZCkp CkBAIC0xNTg5LDcgKzE2MDEsNyBAQCB4cmVmLS1jcmVhdGUtZmV0Y2hlcgogICAgICAgICAo d2hlbiAoYnVmZmVyLWxpdmUtcCBvcmlnLWJ1ZmZlcikKICAgICAgICAgICAoc2V0LWJ1ZmZl ciBvcmlnLWJ1ZmZlcikKICAgICAgICAgICAoaWdub3JlLWVycm9ycyAoZ290by1jaGFyIG9y aWctcG9zaXRpb24pKSkKLSAgICAgICAgKGxldCAoKHhyZWZzIChmdW5jYWxsIG1ldGhvZCBi YWNrZW5kIGFyZykpKQorICAgICAgICAobGV0ICgoeHJlZnMgKGFwcGx5IG1ldGhvZCBiYWNr ZW5kIGFyZ3MpKSkKICAgICAgICAgICAodW5sZXNzIHhyZWZzCiAgICAgICAgICAgICAoeHJl Zi0tbm90LWZvdW5kLWVycm9yIGtpbmQgaW5wdXQpKQogICAgICAgICAgIHhyZWZzKSkpKSkK QEAgLTE2MjQsNiArMTYzNiwzNSBAQCB4cmVmLWZpbmQtZGVmaW5pdGlvbnMtb3RoZXItZnJh bWUKICAgKGludGVyYWN0aXZlIChsaXN0ICh4cmVmLS1yZWFkLWlkZW50aWZpZXIgIkZpbmQg ZGVmaW5pdGlvbnMgb2Y6ICIpKSkKICAgKHhyZWYtLWZpbmQtZGVmaW5pdGlvbnMgaWRlbnRp ZmllciAnZnJhbWUpKQogCis7OzsjIyNhdXRvbG9hZAorKGRlZnVuIHhyZWYtZmluZC1leHRy YSAoaWRlbnRpZmllcikKKyAgIkZpbmQgc29tZSBzcGVjaWZpYyBraW5kIG9mIGRlZmluaXRp b24gb2YgdGhlIGlkZW50aWZpZXIgYXQgcG9pbnQuCitXaXRoIHByZWZpeCBhcmd1bWVudCBv ciB3aGVuIHRoZXJlJ3Mgbm8gaWRlbnRpZmllciBhdCBwb2ludCwKK3Byb21wdCBmb3IgdGhl IGlkZW50aWZpZXIuCisKK0lmIG9ubHkgb25lIGxvY2F0aW9uIGlzIGZvdW5kLCBkaXNwbGF5 IGl0IGluIHRoZSBzZWxlY3RlZCB3aW5kb3cuCitPdGhlcndpc2UsIGRpc3BsYXkgdGhlIGxp c3Qgb2YgdGhlIHBvc3NpYmxlIGRlZmluaXRpb25zIGluIGEKK2J1ZmZlciB3aGVyZSB0aGUg dXNlciBjYW4gc2VsZWN0IGZyb20gdGhlIGxpc3QuCisKK1VzZSBcXFt4cmVmLWdvLWJhY2td IHRvIHJldHVybiBiYWNrIHRvIHdoZXJlIHlvdSBpbnZva2VkIHRoaXMgY29tbWFuZC4iCisg IChpbnRlcmFjdGl2ZSAobGlzdAorICAgICAgICAgICAgICAgIDs7IFhYWDogQ2hvb3NlIGtp bmQgb2YgImV4dHJhIiBmaXJzdD8gVGhhdCB3b3VsZCBmYWlsCisgICAgICAgICAgICAgICAg OzsgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIHN5bWJvbC1hdC1wb2ludCwgdGhvdWdoLgor ICAgICAgICAgICAgICAgICh4cmVmLS1yZWFkLWlkZW50aWZpZXIgIkZpbmQgZGVmaW5pdGlv bnMgb2Y6ICIpKSkKKyAgKGxldCogKChraW5kcyAoeHJlZi1iYWNrZW5kLWV4dHJhLWtpbmRz ICh4cmVmLWZpbmQtYmFja2VuZCkgaWRlbnRpZmllcikpCisgICAgICAgICA7OyBGSVhNRTog V2Ugc2hvdWxkIHByb2JhYmx5IHNraXAgYXNraW5nIHdoZW4gdGhlcmUncyBqdXN0CisgICAg ICAgICA7OyBvbmUgYXZhaWxhYmxlIGtpbmQsIGJ1dCBsZXQncyBrZWVwIGNvbXBsZXRpbmct cmVhZCB3aGlsZQorICAgICAgICAgOzsgY29sbGVjdGluZyB0aGUgaW5pdGlhbCBmZWVkYmFj ayBhYm91dCB0aGUgaW50ZXJmYWNlLgorICAgICAgICAgKGtpbmQgOzsgKGlmIChjZHIga2lu ZHMpCisgICAgICAgICAgKGNvbXBsZXRpbmctcmVhZCAiRGVmaW5pdGlvbiBraW5kOiAiIGtp bmRzIG5pbCB0IG5pbCBuaWwgKGNhciBraW5kcykpCisgICAgICAgICAgOzsgKGNhciBraW5k cykKKyAgICAgICAgICA7OyApCisgICAgICAgICAgKSkKKyAgICAodW5sZXNzIGtpbmQgKHVz ZXItZXJyb3IgIk5vIHN1cHBvcnRlZCBraW5kcyIpKQorICAgICh4cmVmLS1zaG93LWRlZnMK KyAgICAgKHhyZWYtLWNyZWF0ZS1mZXRjaGVyIGlkZW50aWZpZXIgJ2V4dHJhLWRlZnMgaWRl bnRpZmllciBraW5kKQorICAgICBuaWwpKSkKKwogOzs7IyMjYXV0b2xvYWQKIChkZWZ1biB4 cmVmLWZpbmQtcmVmZXJlbmNlcyAoaWRlbnRpZmllcikKICAgIkZpbmQgcmVmZXJlbmNlcyB0 byB0aGUgaWRlbnRpZmllciBhdCBwb2ludC4KQEAgLTE3MjQsNiArMTc2NSw3IEBAIHhyZWYt YXByb3Bvcy1yZWdleHAKIDs7OyMjI2F1dG9sb2FkIChkZWZpbmUta2V5IGVzYy1tYXAgWz9c Qy0sXSAjJ3hyZWYtZ28tZm9yd2FyZCkKIDs7OyMjI2F1dG9sb2FkIChkZWZpbmUta2V5IGVz Yy1tYXAgIj8iICMneHJlZi1maW5kLXJlZmVyZW5jZXMpCiA7OzsjIyNhdXRvbG9hZCAoZGVm aW5lLWtleSBlc2MtbWFwIFs/XEMtLl0gIyd4cmVmLWZpbmQtYXByb3BvcykKKzs7OyMjI2F1 dG9sb2FkIChkZWZpbmUta2V5IGVzYy1tYXAgIiciICMneHJlZi1maW5kLWV4dHJhKQogOzs7 IyMjYXV0b2xvYWQgKGRlZmluZS1rZXkgY3RsLXgtNC1tYXAgIi4iICMneHJlZi1maW5kLWRl ZmluaXRpb25zLW90aGVyLXdpbmRvdykKIDs7OyMjI2F1dG9sb2FkIChkZWZpbmUta2V5IGN0 bC14LTUtbWFwICIuIiAjJ3hyZWYtZmluZC1kZWZpbml0aW9ucy1vdGhlci1mcmFtZSkKIAo= --------------DvWKR5tSyNHYxoo25HG0xwrP--