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?Jo=C3=A3o_?= =?UTF-8?Q?T=C3=A1vora?= Newsgroups: gmane.emacs.bugs Subject: bug#47711: bug#48841: bug#47711: bug#48841: bug#47711: [PATCH VERSION 2] Add new `completion-filter-completions` API and deferred highlighting Date: Wed, 1 Nov 2023 18:47:25 +0000 Message-ID: References: <3d3f894f-a6fa-53ae-5d50-c3aa9bffc73e@daniel-mendler.de> <56ab18b1-4348-9b2c-85bb-af9b76cd429a@daniel-mendler.de> <328f87eb-6474-1442-e1ca-9ae8deb2a84a@yandex.ru> <83fsvcbio7.fsf@gnu.org> <9f432d18-e70f-54c1-0173-1899fb66d176@gutov.dev> <877cnafv39.fsf@gmail.com> <9447dde3-b8e7-2ec0-9a9c-72c4cf9d12a8@gutov.dev> <7d14bc13-4419-816c-5708-c42988c39c02@gutov.dev> <5d0a78cc-4fa0-ef04-3462-1826f17d7d56@gutov.dev> <877cn8asud.fsf@gmail.com> <8734xtauqj.fsf@gmail.com> <5181f95e-61e7-c8c4-6389-44ee57e0c749@gutov.dev> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="00000000000084ce9b06091bb41d" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="14188"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Daniel Mendler , Eli Zaretskii , Stefan Monnier , 47711@debbugs.gnu.org To: Dmitry Gutov Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Wed Nov 01 19:49:15 2023 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 1qyGHB-0003M1-VN for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 01 Nov 2023 19:49:14 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qyGGT-0007ds-ID; Wed, 01 Nov 2023 14:48: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 1qyGGS-0007d1-1V for bug-gnu-emacs@gnu.org; Wed, 01 Nov 2023 14:48:28 -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 1qyGGR-0002BL-Pa for bug-gnu-emacs@gnu.org; Wed, 01 Nov 2023 14:48:27 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1qyGH0-0004WI-8Z for bug-gnu-emacs@gnu.org; Wed, 01 Nov 2023 14:49:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: =?UTF-8?Q?Jo=C3=A3o_?= =?UTF-8?Q?T=C3=A1vora?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 01 Nov 2023 18:49:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 47711 X-GNU-PR-Package: emacs Original-Received: via spool by 47711-submit@debbugs.gnu.org id=B47711.169886450217110 (code B ref 47711); Wed, 01 Nov 2023 18:49:02 +0000 Original-Received: (at 47711) by debbugs.gnu.org; 1 Nov 2023 18:48:22 +0000 Original-Received: from localhost ([127.0.0.1]:52590 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qyGGL-0004Rr-K5 for submit@debbugs.gnu.org; Wed, 01 Nov 2023 14:48:21 -0400 Original-Received: from mail-lf1-x132.google.com ([2a00:1450:4864:20::132]:61612) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qyGGI-0004Qn-CU for 47711@debbugs.gnu.org; Wed, 01 Nov 2023 14:48:19 -0400 Original-Received: by mail-lf1-x132.google.com with SMTP id 2adb3069b0e04-507c78d258fso15105e87.2 for <47711@debbugs.gnu.org>; Wed, 01 Nov 2023 11:47:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1698864458; x=1699469258; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=1S1P1Rvp+/E8RRp5zTdqQn/jlY6JT6Wqe4rWmjXpORU=; b=kGEIaAfZ/mFnVtjslnPwnDFgYrES8+2LGnDeSI5uC+3HRBp6cg/hPl1ercgmREiZwl yyCDadWu7dui+YsuYzEUMSQb6LOt9KYp+kvtwNy04wwXUZjaTNyI0H6+SUKUDPuqzaGM kFTvmeRGUtrgZ5aiQuxlaFd9HIc69hlb+9UVClepsUJ0Te+yVMoycamnpvs395OHPSWp UlciQLBQyXrBAqE0aoadfDp9MRP0nj08sxDAaIN5ycFiIxF5L4qVHLtTdSmIoG22fILB G5b5eUgcs73rnjmNM4ypyFzPZnxRvv5LHZVYFw3CUK6wAn1cxWmVrzOCmi5z8D/hZWym d5KQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698864458; x=1699469258; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=1S1P1Rvp+/E8RRp5zTdqQn/jlY6JT6Wqe4rWmjXpORU=; b=CFjGx7fwAHFnT4eXq9f/xgltNHfvKeJ5kZDq+BWhm+jsAGvqTnkRYSDqk6n+79Z2vb 7QDs5PAeY44i7Amg1/DCnQLAU3qCDCNqZ0OLS0CPwD/VsuxzkFf5QhmFw2TPf3rUuEcP ddFV1YeJArWkxdaSTBKtkLR/EGiozDRrB8PtaHsIN9yoq2uD/eZK7T0ci93jj8t5LkT7 HaOAq73qF1DcWYl5slj5U2n+Bl4rzja/26Hl+xqtoLKq9o7nBCauzkdSlLbHsJPDGgyp IJmj+UR05kO/AppHUdOgCjklrJhxNPQ8bsKYcBDXXbV4Sb+Np1vfZPSXXv5mlE3Cd87B 0zhA== X-Gm-Message-State: AOJu0YyeP/sN/6DiEYHa8EDpt/iVBHspxi+HpVrW7IuUpKI2/5HAiEXz iHRzEMq/52pPQK1eVFZ+r4Qi1MN2zzRDpzgHtms= X-Google-Smtp-Source: AGHT+IEt1v+diB7k5uf6Nsx0MzQVgdWq2pDuw6cshsS6yfUCBxTcTLGTfL3A3Vuq/L3zbnOu6rsRJjMKr+XdfR6yQEs= X-Received: by 2002:a05:6512:401d:b0:505:783f:bc65 with SMTP id br29-20020a056512401d00b00505783fbc65mr15313758lfb.66.1698864457605; Wed, 01 Nov 2023 11:47:37 -0700 (PDT) In-Reply-To: <5181f95e-61e7-c8c4-6389-44ee57e0c749@gutov.dev> 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:273615 Archived-At: --00000000000084ce9b06091bb41d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Oct 31, 2023 at 8:52=E2=80=AFPM Dmitry Gutov wro= te: > It seems like the only code that would be concerned with it are > completion styles that also do sorting, or completion tables that would > do similar things to this "with quoting" business. But I'm not aware of > any other examples of the latter aside from what is inside Emacs itself. If orderless (which I've never tried), does some kind of scoring of completions, it probably also needs the same complications of flex. > >> Anyway, have you looked into what it would take to solve it? > > > > No, naively, I just think it's a similar situation of display and busin= ess > > logic being mixed up. Presumably the quoted stuff is just for insertio= n > > (and display?), and the unquoted stuff is what patterns/scoring should > > operate on. > > Apparently it's good for insertion, but according to that comment inside > the function, the unquoted stuff might actually be better for display. No idea what the unquoted stuff is for, so I haven't really tested it. > I'm not 100% clear which of the versions is better for > scoring/highlighting, but apparently the unquoted one. > > > But, IMO, there's no need to tackle it right now. > > > > If the thing holding you back from the lazy-hilit-2023-v4.patch is the > > completion-score propertization, I can move it to the sorting step > > in a future v5 and add spread the completion--unquoted thing a little > > bit more. > > I think that's the main blocker, yes. Alright, here goes v5 then, with this change. Note I've implemented this unquoted thing which kicks in in C-x f but I haven't actually seen any strings that have different "quoted" "non-quoted" versions. The performance of the three main patches as measured in yet another machine: ;; C-h v ;; ;; Daniel+Dmitry: 0.696340454545 ;; lazy hilit v4: 0.692849642852 ;; lazy hilit v5: 0.683088541667 ;; ;; completing-read ;; ;; Daniel+Dmitry: 0.590994909091 ;; lazy hilit v4: 0.586523307692 ;; lazy hilit v5: 0.586165466667 Nothing unexpected. So if you're satisfied with the general design now, maybe we should start looking at finer details, docstrings, style, etc. Jo=C3=A3o --00000000000084ce9b06091bb41d Content-Type: application/octet-stream; name="lazy-hilit-2023-v5.diff" Content-Disposition: attachment; filename="lazy-hilit-2023-v5.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_log40lhy0 ZGlmZiAtLWdpdCBhL2xpc3AvaWNvbXBsZXRlLmVsIGIvbGlzcC9pY29tcGxldGUuZWwKaW5kZXgg ZTZmZGQxZjE4MzYuLjNlODg4YzhiMDZhIDEwMDY0NAotLS0gYS9saXNwL2ljb21wbGV0ZS5lbAor KysgYi9saXNwL2ljb21wbGV0ZS5lbApAQCAtNzIyLDcgKzcyMiw4IEBAIGljb21wbGV0ZS1leGhp Yml0CiAgICAgICAgICAgICAgOzsgQ2hlY2sgaWYgc3RpbGwgaW4gdGhlIHJpZ2h0IGJ1ZmZlciAo YnVnIzYxMzA4KQogICAgICAgICAgICAgIChvciAod2luZG93LW1pbmlidWZmZXItcCkgY29tcGxl dGlvbi1pbi1yZWdpb24tLWRhdGEpCiAgICAgICAgICAgICAgKGljb21wbGV0ZS1zaW1wbGUtY29t cGxldGluZy1wKSkgO1Nob3VsZG4ndCBiZSBuZWNlc3NhcnkuCi0gICAgKGxldCAoKHNhdmVkLXBv aW50IChwb2ludCkpKQorICAgIChsZXQgKChzYXZlZC1wb2ludCAocG9pbnQpKQorICAgICAgICAg IChjb21wbGV0aW9uLWxhenktaGlsaXQgdCkpCiAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAg ICAgKGdvdG8tY2hhciAoaWNvbXBsZXRlLS1maWVsZC1lbmQpKQogICAgICAgICA7OyBJbnNlcnQg dGhlIG1hdGNoLXN0YXR1cyBpbmZvcm1hdGlvbjoKQEAgLTc1NCwxMiArNzU1LDEzIEBAIGljb21w bGV0ZS1leGhpYml0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3ZlcmxheS1lbmQgcmZu LWVzaGFkb3ctb3ZlcmxheSkpKQogICAgICAgICAgIChsZXQqICgoZmllbGQtc3RyaW5nIChpY29t cGxldGUtLWZpZWxkLXN0cmluZykpCiAgICAgICAgICAgICAgICAgICh0ZXh0ICh3aGlsZS1uby1p bnB1dAorICAgICAgICAgICAgICAgICAgICAgICAgIChiZW5jaG1hcmstcHJvZ24KICAgICAgICAg ICAgICAgICAgICAgICAgICAoaWNvbXBsZXRlLWNvbXBsZXRpb25zCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZpZWxkLXN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAoaWNvbXBs ZXRlLS1jb21wbGV0aW9uLXRhYmxlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAoaWNvbXBs ZXRlLS1jb21wbGV0aW9uLXByZWRpY2F0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlm ICh3aW5kb3ctbWluaWJ1ZmZlci1wKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVx IG1pbmlidWZmZXItLXJlcXVpcmUtbWF0Y2ggdCkpKSkpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoZXEgbWluaWJ1ZmZlci0tcmVxdWlyZS1tYXRjaCB0KSkpKSkpCiAgICAgICAgICAg ICAgICAgIChidWZmZXItdW5kby1saXN0IHQpCiAgICAgICAgICAgICAgICAgIGRlYWN0aXZhdGUt bWFyaykKICAgICAgICAgICAgIDs7IERvIG5vdGhpbmcgaWYgd2hpbGUtbm8taW5wdXQgd2FzIGFi b3J0ZWQuCkBAIC05MDEsNyArOTAzLDcgQEAgaWNvbXBsZXRlLS1yZW5kZXItdmVydGljYWwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ljb21wbGV0ZS1zZWxlY3RlZC1tYXRjaCAn YXBwZW5kIGNvbXApCiAgICAgIGNvbGxlY3QgKGNvbmNhdCBwcmVmaXgKICAgICAgICAgICAgICAg ICAgICAgIChtYWtlLXN0cmluZyAoLSBtYXgtcHJlZml4LWxlbiAobGVuZ3RoIHByZWZpeCkpID8g KQotICAgICAgICAgICAgICAgICAgICAgY29tcAorICAgICAgICAgICAgICAgICAgICAgKGNvbXBs ZXRpb24tbGF6eS1oaWxpdCBjb21wKQogICAgICAgICAgICAgICAgICAgICAgKG1ha2Utc3RyaW5n ICgtIG1heC1jb21wLWxlbiAobGVuZ3RoIGNvbXApKSA/ICkKICAgICAgICAgICAgICAgICAgICAg IHN1ZmZpeCkKICAgICAgaW50byBsaW5lcy1hdXgKQEAgLTEwNjcsNyArMTA2OSw4IEBAIGljb21w bGV0ZS1jb21wbGV0aW9ucwogICAgICAgICAgICAgICAgICAgKGlmICg8IHByb3NwZWN0cy1sZW4g cHJvc3BlY3RzLW1heCkKICAgICAgICAgICAgICAgICAgICAgICAocHVzaCBjb21wIHByb3NwZWN0 cykKICAgICAgICAgICAgICAgICAgICAgKHNldHEgbGltaXQgdCkpKQotICAgICAgICAgICAgICAg IChzZXRxIHByb3NwZWN0cyAobnJldmVyc2UgcHJvc3BlY3RzKSkKKyAgICAgICAgICAgICAgICAo c2V0cSBwcm9zcGVjdHMKKyAgICAgICAgICAgICAgICAgICAgICAobnJldmVyc2UgKG1hcGNhciAj J2NvbXBsZXRpb24tbGF6eS1oaWxpdCBwcm9zcGVjdHMpKSkKICAgICAgICAgICAgICAgICA7OyBE ZWNvcmF0ZSBmaXJzdCBvZiB0aGUgcHJvc3BlY3RzLgogICAgICAgICAgICAgICAgICh3aGVuIHBy b3NwZWN0cwogICAgICAgICAgICAgICAgICAgKGxldCAoKGZpcnN0IChjb3B5LXNlcXVlbmNlIChw b3AgcHJvc3BlY3RzKSkpKQpkaWZmIC0tZ2l0IGEvbGlzcC9taW5pYnVmZmVyLmVsIGIvbGlzcC9t aW5pYnVmZmVyLmVsCmluZGV4IDIxMjBlMzE3NzVlLi4yYjBmZjVjMWMzYyAxMDA2NDQKLS0tIGEv bGlzcC9taW5pYnVmZmVyLmVsCisrKyBiL2xpc3AvbWluaWJ1ZmZlci5lbApAQCAtNjc3LDYgKzY3 NywxMCBAQCBjb21wbGV0aW9uLS10d3EtYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnY29tcGxldGlvbnMtY29tbW9uLXBhcnQpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcXByZWZpeCkpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIChx Y29tcGxldGlvbiAoY29uY2F0IHFwcmVmaXggcW5ldykpKQorICAgICAgICAgICAgICAgICAgIDs7 IEF0dGFjaCB1bnF1b3RlZCBjb21wbGV0aW9uIHN0cmluZywgd2hpY2ggaXMgbmVlZGVkCisgICAg ICAgICAgICAgICAgICAgOzsgdG8gc2NvcmUgdGhlIGNvbXBsZXRpb24gaW4gYGNvbXBsZXRpb24t LWZsZXgtc2NvcmUnLgorICAgICAgICAgICAgICAgICAgIChwdXQtdGV4dC1wcm9wZXJ0eSAwIDEg J2NvbXBsZXRpb24tLXVucXVvdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbXBsZXRpb24gcWNvbXBsZXRpb24pCiAJCSAgIDs7IEZJWE1FOiBTaW1pbGFybHkgaGVy ZSwgQ3lnd2luJ3MgbWFwcGluZyB0cmlwcyB0aGlzCiAJCSAgIDs7IGFzc2VydGlvbi4KICAgICAg ICAgICAgICAgICAgICA7OyhjbC1hc3NlcnQKQEAgLTEyMzQsNiArMTIzOCw3IEBAIGNvbXBsZXRp b24tYWxsLWNvbXBsZXRpb25zCiBQT0lOVCBpcyB0aGUgcG9zaXRpb24gb2YgcG9pbnQgd2l0aGlu IFNUUklORy4KIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBsaXN0IG9mIGNvbXBsZXRpb25zIGFuZCBt YXkgY29udGFpbiB0aGUgYmFzZS1zaXplCiBpbiB0aGUgbGFzdCBgY2RyJy4iCisgIChzZXRxIGNv bXBsZXRpb24tbGF6eS1oaWxpdC1mbiBuaWwpCiAgIDs7IEZJWE1FOiBXZSBuZWVkIHRvIGFkZGl0 aW9uYWxseSByZXR1cm4gdGhlIGluZm8gbmVlZGVkIGZvciB0aGUKICAgOzsgc2Vjb25kIHBhcnQg b2YgY29tcGxldGlvbi1iYXNlLXBvc2l0aW9uLgogICAoY29tcGxldGlvbi0tbnRoLWNvbXBsZXRp b24gMiBzdHJpbmcgdGFibGUgcHJlZCBwb2ludCBtZXRhZGF0YSkpCkBAIC0zNzQ5LDEwOCArMzc1 NCwyMDAgQEAgZmxleC1zY29yZS1tYXRjaC10aWdodG5lc3MKIHRoYW4gdGhlIGxhdHRlciAod2hp Y2ggaGFzIHR3byBcImhvbGVzXCIgYW5kIHRocmVlCiBvbmUtbGV0dGVyLWxvbmcgbWF0Y2hlcyku IikKIAorKGRlZnZhci1sb2NhbCBjb21wbGV0aW9uLWxhenktaGlsaXQgbmlsCisgICJJZiBub24t bmlsLCByZXF1ZXN0IGNvbXBsZXRpb24gbGF6eSBoaWdobGlnaHRpbmcuCisKK0NvbXBsZXRpb24t cHJlc2VudGluZyBmcm9udGVuZHMgbWF5IG9wdCB0byBiaW5kIHRoaXMgdmFyaWFibGUgdG8KK25v bi1uaWwgdmFsdWUgaW4gdGhlIGNvbnRleHQgb2YgY29tcGxldGlvbi1wcm9kdWNpbmcgY2FsbHMg KHN1Y2gKK2FzIGBjb21wbGV0aW9uLWFsbC1zb3J0ZWQtY29tcGxldGlvbnMnKS4gIFRoaXMgaGlu dHMgdGhlCitpbnRlcnZlbmluZyBjb21wbGV0aW9uIHN0eWxlcyB0aGF0IHRoZXkgZG8gbm90IG5l ZWQgdG8KK2ZvbnRpZnkgKGkuZS4gcHJvcGVydGl6ZSB3aXRoIHRoZSBgZmFjZScgcHJvcGVydHkp IGNvbXBsZXRpb24KK3N0cmluZ3Mgd2l0aCBoaWdobGlnaHRzIG9mIHRoZSBtYXRjaGluZyBwYXJ0 cy4KKworV2hlbiBkb2luZyBzbywgaXQgaXMgdGhlIGZyb250ZW5kIC0tIG5vdCB0aGUgc3R5bGUg LS0gd2hvIGJlY29tZXMKK3Jlc3BvbnNpYmxlIHRoaXMgZm9udGlmaWNhdGlvbi4gIFRoZSBmcm9u dGVuZCBiaW5kcyB0aGlzIHZhcmlhYmxlCit0byBub24tbmlsLCBhbmQgY2FsbHMgdGhlIGZ1bmN0 aW9uIHdpdGggdGhlIHNhbWUgbmFtZQorYGNvbXBsZXRpb24tbGF6eS1oaWxpdCcgb24gZWFjaCBj b21wbGV0aW9uIHN0cmluZyB0aGF0IGlzIHRvIGJlCitkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuCisK K05vdGUgdGhhdCBvbmx5IHNvbWUgY29tcGxldGlvbiBzdHlsZXMgdGFrZSBhZHZhbnRhZ2Ugb2Yg dGhpcwordmFyaWFibGUgZm9yIG9wdGltaXphdGlvbiBwdXJwb3Nlcy4gIE90aGVyIHN0eWxlcyB3 aWxsIGlnbm9yZSB0aGUKK2hpbnQgYW5kIGdyZWVkaWx5IGZvbnRpZnkgYXMgdXN1YWwuICBJdCBp cyBzdGlsbCBzYWZlIGZvciBhCitmcm9udGVuZCB0byBjYWxsIGBjb21wbGV0aW9uLWxhenktaGls aXQnIGluIHRoZXNlIHNpdHVhdGlvbnMuCisKK1RvIGF1dGhvciBhIGNvbXBsZXRpb24gc3R5bGUg dGhhdCB0YWtlcyBhZHZhbnRhZ2Ugc2VlCitgY29tcGxldGlvbi1sYXp5LWhpbGl0LWZuJyBhbmQg bG9vayBpbiB0aGUgc291cmNlIG9mCitgY29tcGxldGlvbi1wY20tLWhpbGl0LWNvbW1vbmFsaXR5 Jy4iKQorCisoZGVmdmFyIGNvbXBsZXRpb24tbGF6eS1oaWxpdC1mbiBuaWwKKyAgIlVzZWQgYnkg Y29tcGxldGlvbnMgc3R5bGVzIHRvIGhvbm91cmluZyBgY29tcGxldGlvbi1sYXp5LWhpbGl0Jy4K K1doZW4gYSBnaXZlbiBzdHlsZSB3YW50cyB0byBlbmFibGUgc3VwcG9ydCBmb3IKK2Bjb21wbGV0 aW9uLWxhenktaGlsaXQnICh3aGljaCBzZWUpLCB0aGF0IHN0eWxlIHNob3VsZCBzZXQgdGhpcwor dmFyaWFibGUgdG8gYSBmdW5jdGlvbiBvZiBvbmUgYXJndW1lbnQsIGEgZnJlc2ggc3RyaW5nIHRv IGJlCitkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuICBUaGUgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUg Zm9yCitkZXN0cnVjdGl2ZWx5IGhpZ2hsaWdodGluZyB0aGUgc3RyaW5nLiIpCisKKyhkZWZ1biBj b21wbGV0aW9uLWxhenktaGlsaXQgKHN0cikKKyAgIlJldHVybiBhIGNvcHkgb2YgY29tcGxldGlv biBTVFIgdGhhdCBpcyBgZmFjZSctcHJvcGVydGl6ZWQuCitTZWUgZG9jdW1lbnRhdGlvbiBmb3Ig dmFyaWFibGUgYGNvbXBsZXRpb24tbGF6eS1oaWxpdCcgZm9yIG1vcmUKK2RldGFpbHMuIgorICAo aWYgKGFuZCBjb21wbGV0aW9uLWxhenktaGlsaXQgY29tcGxldGlvbi1sYXp5LWhpbGl0LWZuKQor ICAgICAgKGZ1bmNhbGwgY29tcGxldGlvbi1sYXp5LWhpbGl0LWZuIChjb3B5LXNlcXVlbmNlIHN0 cikpCisgICAgc3RyKSkKKworKGRlZnVuIGNvbXBsZXRpb24tLWhpbGl0LWZyb20tcmUgKHN0cmlu ZyByZWdleHApCisgICJGb250aWZ5IFNUUklORyB3aXRoIGBjb21wbGV0aW9ucy1jb21tb24tcGFy dCcgdXNpbmcgUkVHRVhQLiIKKyAgKGxldCogKChtZCAoYW5kIHJlZ2V4cCAoc3RyaW5nLW1hdGNo IHJlZ2V4cCBzdHJpbmcpIChjZGRyIChtYXRjaC1kYXRhIHQpKSkpCisgICAgICAgICAobWUgKGFu ZCBtZCAobWF0Y2gtZW5kIDApKSkKKyAgICAgICAgIChmcm9tIDApKQorICAgICh3aGlsZSBtZAor ICAgICAgKGFkZC1mYWNlLXRleHQtcHJvcGVydHkgZnJvbSAocG9wIG1kKSAnY29tcGxldGlvbnMt Y29tbW9uLXBhcnQgbmlsIHN0cmluZykKKyAgICAgIChzZXRxIGZyb20gKHBvcCBtZCkpKQorICAg ICh1bmxlc3MgKG9yIChub3QgbWUpICg9IGZyb20gbWUpKQorICAgICAgKGFkZC1mYWNlLXRleHQt cHJvcGVydHkgZnJvbSBtZSAnY29tcGxldGlvbnMtY29tbW9uLXBhcnQgbmlsIHN0cmluZykpCisg ICAgc3RyaW5nKSkKKworKGRlZnVuIGNvbXBsZXRpb24tLWZsZXgtc2NvcmUtMSAobWQtZ3JvdXBz IG1hdGNoLWVuZCBsZW4pCisgICJDb21wdXRlIG1hdGNoaW5nIHNjb3JlIG9mIGNvbXBsZXRpb24u CitUaGUgc2NvcmUgbGllcyBpbiB0aGUgcmFuZ2UgYmV0d2VlbiAwIGFuZCAxLCB3aGVyZSAxIGNv cnJlc3BvbmRzIHRvCit0aGUgZnVsbCBtYXRjaC4KK01ELUdST1VQUyBpcyB0aGUgXCJncm91cFwi ICBwYXJ0IG9mIHRoZSBtYXRjaCBkYXRhLgorTUFUQ0gtRU5EIGlzIHRoZSBlbmQgb2YgdGhlIG1h dGNoLgorTEVOIGlzIHRoZSBsZW5ndGggb2YgdGhlIGNvbXBsZXRpb24gc3RyaW5nLiIKKyAgKGxl dCogKChmcm9tIDApCisgICAgICAgICA7OyBUbyB1bmRlcnN0YW5kIGhvdyB0aGlzIHdvcmtzLCBj b25zaWRlciB0aGVzZSBzaW1wbGUKKyAgICAgICAgIDs7IGFzY2lpIGRpYWdyYW1zIHNob3dpbmcg aG93IHRoZSBwYXR0ZXJuICJmb28iCisgICAgICAgICA7OyBmbGV4LW1hdGNoZXMgImZhYnJvYmF6 byIsICJmYmFyYmF6b28iIGFuZAorICAgICAgICAgOzsgImJhcmZvb2JheiI6CisKKyAgICAgICAg IDs7ICAgICAgZiBhYnIgbyBiYXogbworICAgICAgICAgOzsgICAgICArIC0tLSArIC0tLSArCisK KyAgICAgICAgIDs7ICAgICAgZiBiYXJiYXogb28KKyAgICAgICAgIDs7ICAgICAgKyAtLS0tLS0g KysKKworICAgICAgICAgOzsgICAgICBiYXIgZm9vIGJhegorICAgICAgICAgOzsgICAgICAgICAg KysrCisKKyAgICAgICAgIDs7ICIrIiBpbmRpY2F0ZXMgcGFydHMgd2hlcmUgdGhlIHBhdHRlcm4g bWF0Y2hlZC4gIEEKKyAgICAgICAgIDs7ICJob2xlIiBpbiB0aGUgbWlkZGxlIG9mIHRoZSBzdHJp bmcgaXMgaW5kaWNhdGVkIGJ5CisgICAgICAgICA7OyAiLSIuICBOb3RlIHRoYXQgdGhlcmUgYXJl IG5vICJob2xlcyIgbmVhciB0aGUgZWRnZXMKKyAgICAgICAgIDs7IG9mIHRoZSBzdHJpbmcuICBU aGUgY29tcGxldGlvbiBzY29yZSBpcyBhIG51bWJlcgorICAgICAgICAgOzsgYm91bmQgYnkgKDAu LjFdIChpLmUuLCBsYXJnZXIgdGhhbiAoYnV0IG5vdCBlcXVhbAorICAgICAgICAgOzsgdG8pIHpl cm8sIGFuZCBzbWFsbGVyIG9yIGVxdWFsIHRvIG9uZSk6IHRoZSBoaWdoZXIKKyAgICAgICAgIDs7 IHRoZSBiZXR0ZXIgYW5kIG9ubHkgYSBwZXJmZWN0IG1hdGNoIChwYXR0ZXJuIGVxdWFscworICAg ICAgICAgOzsgc3RyaW5nKSB3aWxsIGhhdmUgc2NvcmUgMS4gIFRoZSBmb3JtdWxhIHRha2VzIHRo ZQorICAgICAgICAgOzsgZm9ybSBvZiBhIHF1b3RpZW50LiAgRm9yIHRoZSBudW1lcmF0b3IsIHdl IHVzZSB0aGUKKyAgICAgICAgIDs7IG51bWJlciBvZiArLCBpLmUuIHRoZSBsZW5ndGggb2YgdGhl IHBhdHRlcm4uICBGb3IKKyAgICAgICAgIDs7IHRoZSBkZW5vbWluYXRvciwgaXQgZmlyc3QgY29t cHV0ZXMKKyAgICAgICAgIDs7CisgICAgICAgICA7OyAgICAgaG9sZV9pX2NvbnRyaWIgPSAxICsg KExpLTEpXigxL3RpZ2h0bmVzcykKKyAgICAgICAgIDs7CisgICAgICAgICA7OyAsIGZvciBlYWNo IGhvbGUgImkiIG9mIGxlbmd0aCAiTGkiLCB3aGVyZSB0aWdodG5lc3MKKyAgICAgICAgIDs7IGlz IGdpdmVuIGJ5IGBmbGV4LXNjb3JlLW1hdGNoLXRpZ2h0bmVzcycuICBUaGUKKyAgICAgICAgIDs7 IGZpbmFsIHZhbHVlIGZvciB0aGUgZGVub21pbmF0b3IgaXMgdGhlbiBnaXZlbiBieToKKyAgICAg ICAgIDs7CisgICAgICAgICA7OyAgICAoU1VNX2Fjcm9zc19pKGhvbGVfaV9jb250cmliKSArIDEp ICogbGVuCisgICAgICAgICA7OworICAgICAgICAgOzsgLCB3aGVyZSAibGVuIiBpcyB0aGUgc3Ry aW5nJ3MgbGVuZ3RoLgorICAgICAgICAgKHNjb3JlLW51bWVyYXRvciAwKQorICAgICAgICAgKHNj b3JlLWRlbm9taW5hdG9yIDApCisgICAgICAgICAobGFzdC1iIDApKQorICAgICh3aGlsZSAoYW5k IG1kLWdyb3VwcyAoY2FyIG1kLWdyb3VwcykpCisgICAgICAobGV0ICgoYSBmcm9tKQorICAgICAg ICAgICAgKGIgKHBvcCBtZC1ncm91cHMpKSkKKyAgICAgICAgKHNldHEKKyAgICAgICAgIHNjb3Jl LW51bWVyYXRvciAgICgrIHNjb3JlLW51bWVyYXRvciAoLSBiIGEpKSkKKyAgICAgICAgKHVubGVz cyAob3IgKD0gYSBsYXN0LWIpCisgICAgICAgICAgICAgICAgICAgICh6ZXJvcCBsYXN0LWIpCisg ICAgICAgICAgICAgICAgICAgICg9IGEgbGVuKSkKKyAgICAgICAgICAoc2V0cQorICAgICAgICAg ICBzY29yZS1kZW5vbWluYXRvciAoKyBzY29yZS1kZW5vbWluYXRvcgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHB0 ICgtIGEgbGFzdC1iIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgv IDEuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LXNjb3Jl LW1hdGNoLXRpZ2h0bmVzcykpKSkpCisgICAgICAgIChzZXRxCisgICAgICAgICBsYXN0LWIgICAg ICAgICAgICAgIGIpKQorICAgICAgKHNldHEgZnJvbSAocG9wIG1kLWdyb3VwcykpKQorICAgIDs7 IElmIGBwYXR0ZXJuJyBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQgdHJhaWxpbmcgYW55LCB0aGUK KyAgICA7OyByZWdleCBgcmUnIHdvbid0IHByb2R1Y2UgbWF0Y2ggZGF0YSByZXByZXNlbnRpbmcg dGhlCisgICAgOzsgcmVnaW9uIGFmdGVyIHRoZSBtYXRjaC4gIFdlIG5lZWQgdG8gYWNjb3VudCB0 byBhY2NvdW50CisgICAgOzsgZm9yIHRoYXQgZXh0cmEgYml0IG9mIG1hdGNoIChidWcjNDIxNDkp LgorICAgICh1bmxlc3MgKD0gZnJvbSBtYXRjaC1lbmQpCisgICAgICAobGV0ICgoYSBmcm9tKQor ICAgICAgICAgICAgKGIgbWF0Y2gtZW5kKSkKKyAgICAgICAgKHNldHEKKyAgICAgICAgIHNjb3Jl LW51bWVyYXRvciAgICgrIHNjb3JlLW51bWVyYXRvciAoLSBiIGEpKSkKKyAgICAgICAgKHVubGVz cyAob3IgKD0gYSBsYXN0LWIpCisgICAgICAgICAgICAgICAgICAgICh6ZXJvcCBsYXN0LWIpCisg ICAgICAgICAgICAgICAgICAgICg9IGEgbGVuKSkKKyAgICAgICAgICAoc2V0cQorICAgICAgICAg ICBzY29yZS1kZW5vbWluYXRvciAoKyBzY29yZS1kZW5vbWluYXRvcgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHB0 ICgtIGEgbGFzdC1iIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgv IDEuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LXNjb3Jl LW1hdGNoLXRpZ2h0bmVzcykpKSkpCisgICAgICAgIChzZXRxCisgICAgICAgICBsYXN0LWIgICAg ICAgICAgICAgIGIpKSkKKyAgICAoLyBzY29yZS1udW1lcmF0b3IgKCogbGVuICgxKyBzY29yZS1k ZW5vbWluYXRvcikpIDEuMCkpKQorCisoZGVmdmFyIGNvbXBsZXRpb24tLWZsZXgtc2NvcmUtbGFz dC1tZCBuaWwKKyAgIkhlbHBlciB2YXJpYWJsZSBmb3IgYGNvbXBsZXRpb24tLWZsZXgtc2NvcmUn LiIpCisKKyhkZWZ1biBjb21wbGV0aW9uLS1mbGV4LXNjb3JlIChzdHIgcmUgJm9wdGlvbmFsIGRv bnQtZXJyb3IpCisgICJDb21wdXRlIGZsZXggc2NvcmUgb2YgY29tcGxldGlvbiBTVFIgYmFzZWQg b24gUkUuCitJZiBET05ULUVSUk9SLCBqdXN0IHJldHVybiBuaWwgaWYgUkUgZG9lc24ndCBtYXRj aCBTVFIuIgorICAoY29uZCAoKHN0cmluZy1tYXRjaCByZSBzdHIpCisgICAgICAgICAobGV0KiAo KG1hdGNoLWVuZCAobWF0Y2gtZW5kIDApKQorICAgICAgICAgICAgICAgIChtZCAoY2RkcgorICAg ICAgICAgICAgICAgICAgICAgKHNldHEKKyAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9u LS1mbGV4LXNjb3JlLWxhc3QtbWQKKyAgICAgICAgICAgICAgICAgICAgICAobWF0Y2gtZGF0YSB0 IGNvbXBsZXRpb24tLWZsZXgtc2NvcmUtbGFzdC1tZCkpKSkpCisgICAgICAgICAgIChjb21wbGV0 aW9uLS1mbGV4LXNjb3JlLTEgbWQgbWF0Y2gtZW5kIChsZW5ndGggc3RyKSkpKQorICAgICAgICAo KG5vdCBkb250LWVycm9yKQorICAgICAgICAgKGVycm9yICJJbnRlcm5hbCBlcnJvcjogJXMgZG9l cyBub3QgbWF0Y2ggJXMiIHJlIHN0cikpKSkKKworKGRlZnZhciBjb21wbGV0aW9uLXBjbS0tcmVn ZXhwIG5pbAorICAiUmVnZXhwIGZyb20gUENNIHBhdHRlcm4gaW4gYGNvbXBsZXRpb24tcGNtLS1o aWxpdC1jb21tb25hbGl0eScuIikKKwogKGRlZnVuIGNvbXBsZXRpb24tcGNtLS1oaWxpdC1jb21t b25hbGl0eSAocGF0dGVybiBjb21wbGV0aW9ucykKICAgIlNob3cgd2hlcmUgYW5kIGhvdyB3ZWxs IFBBVFRFUk4gbWF0Y2hlcyBDT01QTEVUSU9OUy4KIFBBVFRFUk4sIGEgbGlzdCBvZiBzeW1ib2xz IGFuZCBzdHJpbmdzIGFzIHNlZW4KIGBjb21wbGV0aW9uLXBjbS0tbWVyZ2UtY29tcGxldGlvbnMn LCBpcyBhc3N1bWVkIHRvIG1hdGNoIGV2ZXJ5Ci1zdHJpbmcgaW4gQ09NUExFVElPTlMuICBSZXR1 cm4gYSBkZWVwIGNvcHkgb2YgQ09NUExFVElPTlMgd2hlcmUKLWVhY2ggc3RyaW5nIGlzIHByb3Bl cnRpemVkIHdpdGggYGNvbXBsZXRpb24tc2NvcmUnLCBhIG51bWJlcgotYmV0d2VlbiAwIGFuZCAx LCBhbmQgd2l0aCBmYWNlcyBgY29tcGxldGlvbnMtY29tbW9uLXBhcnQnLAotYGNvbXBsZXRpb25z LWZpcnN0LWRpZmZlcmVuY2UnIGluIHRoZSByZWxldmFudCBzZWdtZW50cy4iCitzdHJpbmcgaW4g Q09NUExFVElPTlMuCisKK0lmIGBjb21wbGV0aW9uLWxhenktaGlsaXQnIGlzIG5pbCwgcmV0dXJu IGEgZGVlcCBjb3B5IG9mCitDT01QTEVUSU9OUyB3aGVyZSBlYWNoIHN0cmluZyBpcyBwcm9wZXJ0 aXplZCB3aXRoCitgY29tcGxldGlvbi1zY29yZScsIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSwg YW5kIHdpdGggZmFjZXMKK2Bjb21wbGV0aW9ucy1jb21tb24tcGFydCcsIGBjb21wbGV0aW9ucy1m aXJzdC1kaWZmZXJlbmNlJyBpbiB0aGUKK3JlbGV2YW50IHNlZ21lbnRzLgorCitFbHNlLCBpZiBg Y29tcGxldGlvbi1sYXp5LWhpbGl0JyBpcyB0LCByZXR1cm4gQ09NUExFVElPTlMKK3VuY2hhbmdl ZCwgYnV0IHNldHVwIGEgc3VpdGFibGUgYGNvbXBsZXRpb24tbGF6eS1oaWxpdC1mbicgKHdoaWNo CitzZWUpIGZvciBsYXRlciBsYXp5IGhpZ2hsaWdodGluZyIKKyAgKHNldHEgY29tcGxldGlvbi1w Y20tLXJlZ2V4cCBuaWwKKyAgICAgICAgY29tcGxldGlvbi1sYXp5LWhpbGl0LWZuIG5pbCkKICAg KGNvbmQKICAgICgoYW5kIGNvbXBsZXRpb25zIChjbC1sb29wIGZvciBlIGluIHBhdHRlcm4gdGhl cmVpcyAoc3RyaW5ncCBlKSkpCiAgICAgKGxldCogKChyZSAoY29tcGxldGlvbi1wY20tLXBhdHRl cm4tPnJlZ2V4IHBhdHRlcm4gJ2dyb3VwKSkKLSAgICAgICAgICAgKHBvaW50LWlkeCAoY29tcGxl dGlvbi1wY20tLXBhdHRlcm4tcG9pbnQtaWR4IHBhdHRlcm4pKQotICAgICAgICAgICAoY2FzZS1m b2xkLXNlYXJjaCBjb21wbGV0aW9uLWlnbm9yZS1jYXNlKQotICAgICAgICAgICBsYXN0LW1kKQot ICAgICAgKG1hcGNhcgotICAgICAgIChsYW1iZGEgKHN0cikKLQkgOzsgRG9uJ3QgbW9kaWZ5IHRo ZSBzdHJpbmcgaXRzZWxmLgotICAgICAgICAgKHNldHEgc3RyIChjb3B5LXNlcXVlbmNlIHN0cikp Ci0gICAgICAgICAodW5sZXNzIChzdHJpbmctbWF0Y2ggcmUgc3RyKQotICAgICAgICAgICAoZXJy b3IgIkludGVybmFsIGVycm9yOiAlcyBkb2VzIG5vdCBtYXRjaCAlcyIgcmUgc3RyKSkKLSAgICAg ICAgIChsZXQqICgocG9zIChpZiBwb2ludC1pZHggKG1hdGNoLWJlZ2lubmluZyBwb2ludC1pZHgp IChtYXRjaC1lbmQgMCkpKQotICAgICAgICAgICAgICAgIChtYXRjaC1lbmQgKG1hdGNoLWVuZCAw KSkKLSAgICAgICAgICAgICAgICAobWQgKGNkZHIgKHNldHEgbGFzdC1tZCAobWF0Y2gtZGF0YSB0 IGxhc3QtbWQpKSkpCi0gICAgICAgICAgICAgICAgKGZyb20gMCkKLSAgICAgICAgICAgICAgICAo ZW5kIChsZW5ndGggc3RyKSkKLSAgICAgICAgICAgICAgICA7OyBUbyB1bmRlcnN0YW5kIGhvdyB0 aGlzIHdvcmtzLCBjb25zaWRlciB0aGVzZSBzaW1wbGUKLSAgICAgICAgICAgICAgICA7OyBhc2Np aSBkaWFncmFtcyBzaG93aW5nIGhvdyB0aGUgcGF0dGVybiAiZm9vIgotICAgICAgICAgICAgICAg IDs7IGZsZXgtbWF0Y2hlcyAiZmFicm9iYXpvIiwgImZiYXJiYXpvbyIgYW5kCi0gICAgICAgICAg ICAgICAgOzsgImJhcmZvb2JheiI6Ci0KLSAgICAgICAgICAgICAgICA7OyAgICAgIGYgYWJyIG8g YmF6IG8KLSAgICAgICAgICAgICAgICA7OyAgICAgICsgLS0tICsgLS0tICsKLQotICAgICAgICAg ICAgICAgIDs7ICAgICAgZiBiYXJiYXogb28KLSAgICAgICAgICAgICAgICA7OyAgICAgICsgLS0t LS0tICsrCi0KLSAgICAgICAgICAgICAgICA7OyAgICAgIGJhciBmb28gYmF6Ci0gICAgICAgICAg ICAgICAgOzsgICAgICAgICAgKysrCi0KLSAgICAgICAgICAgICAgICA7OyAiKyIgaW5kaWNhdGVz IHBhcnRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZWQuICBBCi0gICAgICAgICAgICAgICAgOzsg ImhvbGUiIGluIHRoZSBtaWRkbGUgb2YgdGhlIHN0cmluZyBpcyBpbmRpY2F0ZWQgYnkKLSAgICAg ICAgICAgICAgICA7OyAiLSIuICBOb3RlIHRoYXQgdGhlcmUgYXJlIG5vICJob2xlcyIgbmVhciB0 aGUgZWRnZXMKLSAgICAgICAgICAgICAgICA7OyBvZiB0aGUgc3RyaW5nLiAgVGhlIGNvbXBsZXRp b24gc2NvcmUgaXMgYSBudW1iZXIKLSAgICAgICAgICAgICAgICA7OyBib3VuZCBieSAoMC4uMV0g KGkuZS4sIGxhcmdlciB0aGFuIChidXQgbm90IGVxdWFsCi0gICAgICAgICAgICAgICAgOzsgdG8p IHplcm8sIGFuZCBzbWFsbGVyIG9yIGVxdWFsIHRvIG9uZSk6IHRoZSBoaWdoZXIKLSAgICAgICAg ICAgICAgICA7OyB0aGUgYmV0dGVyIGFuZCBvbmx5IGEgcGVyZmVjdCBtYXRjaCAocGF0dGVybiBl cXVhbHMKLSAgICAgICAgICAgICAgICA7OyBzdHJpbmcpIHdpbGwgaGF2ZSBzY29yZSAxLiAgVGhl IGZvcm11bGEgdGFrZXMgdGhlCi0gICAgICAgICAgICAgICAgOzsgZm9ybSBvZiBhIHF1b3RpZW50 LiAgRm9yIHRoZSBudW1lcmF0b3IsIHdlIHVzZSB0aGUKLSAgICAgICAgICAgICAgICA7OyBudW1i ZXIgb2YgKywgaS5lLiB0aGUgbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuLiAgRm9yCi0gICAgICAgICAg ICAgICAgOzsgdGhlIGRlbm9taW5hdG9yLCBpdCBmaXJzdCBjb21wdXRlcwotICAgICAgICAgICAg ICAgIDs7Ci0gICAgICAgICAgICAgICAgOzsgICAgIGhvbGVfaV9jb250cmliID0gMSArIChMaS0x KV4oMS90aWdodG5lc3MpCi0gICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgICA7OyAs IGZvciBlYWNoIGhvbGUgImkiIG9mIGxlbmd0aCAiTGkiLCB3aGVyZSB0aWdodG5lc3MKLSAgICAg ICAgICAgICAgICA7OyBpcyBnaXZlbiBieSBgZmxleC1zY29yZS1tYXRjaC10aWdodG5lc3MnLiAg VGhlCi0gICAgICAgICAgICAgICAgOzsgZmluYWwgdmFsdWUgZm9yIHRoZSBkZW5vbWluYXRvciBp cyB0aGVuIGdpdmVuIGJ5OgotICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICAgOzsg ICAgKFNVTV9hY3Jvc3NfaShob2xlX2lfY29udHJpYikgKyAxKSAqIGxlbgotICAgICAgICAgICAg ICAgIDs7Ci0gICAgICAgICAgICAgICAgOzsgLCB3aGVyZSAibGVuIiBpcyB0aGUgc3RyaW5nJ3Mg bGVuZ3RoLgotICAgICAgICAgICAgICAgIChzY29yZS1udW1lcmF0b3IgMCkKLSAgICAgICAgICAg ICAgICAoc2NvcmUtZGVub21pbmF0b3IgMCkKLSAgICAgICAgICAgICAgICAobGFzdC1iIDApCi0g ICAgICAgICAgICAgICAgKHVwZGF0ZS1zY29yZS1hbmQtZmFjZQotICAgICAgICAgICAgICAgICAo bGFtYmRhIChhIGIpCi0gICAgICAgICAgICAgICAgICAgIlVwZGF0ZSBzY29yZSBhbmQgZmFjZSBn aXZlbiBtYXRjaCByYW5nZSAoQSBCKS4iCi0gICAgICAgICAgICAgICAgICAgKGFkZC1mYWNlLXRl eHQtcHJvcGVydHkgYSBiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ2NvbXBsZXRpb25zLWNvbW1vbi1wYXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbmlsIHN0cikKLSAgICAgICAgICAgICAgICAgICAoc2V0cQotICAgICAg ICAgICAgICAgICAgICBzY29yZS1udW1lcmF0b3IgICAoKyBzY29yZS1udW1lcmF0b3IgKC0gYiBh KSkpCi0gICAgICAgICAgICAgICAgICAgKHVubGVzcyAob3IgKD0gYSBsYXN0LWIpCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHplcm9wIGxhc3QtYikKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoPSBhIChsZW5ndGggc3RyKSkpCi0gICAgICAgICAgICAgICAgICAgICAo c2V0cQotICAgICAgICAgICAgICAgICAgICAgIHNjb3JlLWRlbm9taW5hdG9yICgrIHNjb3JlLWRl bm9taW5hdG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHB0ICgtIGEgbGFz dC1iIDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KC8gMS4wCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZmxleC1zY29yZS1tYXRjaC10aWdodG5lc3MpKSkpKQotICAgICAgICAgICAgICAgICAgIChz ZXRxCi0gICAgICAgICAgICAgICAgICAgIGxhc3QtYiAgICAgICAgICAgICAgYikpKSkKLSAgICAg ICAgICAgKHdoaWxlIG1kCi0gICAgICAgICAgICAgKGZ1bmNhbGwgdXBkYXRlLXNjb3JlLWFuZC1m YWNlIGZyb20gKHBvcCBtZCkpCi0gICAgICAgICAgICAgKHNldHEgZnJvbSAocG9wIG1kKSkpCi0g ICAgICAgICAgIDs7IElmIGBwYXR0ZXJuJyBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQgdHJhaWxp bmcgYW55LCB0aGUKLSAgICAgICAgICAgOzsgcmVnZXggYHJlJyB3b24ndCBwcm9kdWNlIG1hdGNo IGRhdGEgcmVwcmVzZW50aW5nIHRoZQotICAgICAgICAgICA7OyByZWdpb24gYWZ0ZXIgdGhlIG1h dGNoLiAgV2UgbmVlZCB0byBhY2NvdW50IHRvIGFjY291bnQKLSAgICAgICAgICAgOzsgZm9yIHRo YXQgZXh0cmEgYml0IG9mIG1hdGNoIChidWcjNDIxNDkpLgotICAgICAgICAgICAodW5sZXNzICg9 IGZyb20gbWF0Y2gtZW5kKQotICAgICAgICAgICAgIChmdW5jYWxsIHVwZGF0ZS1zY29yZS1hbmQt ZmFjZSBmcm9tIG1hdGNoLWVuZCkpCi0gICAgICAgICAgIChpZiAoPiAobGVuZ3RoIHN0cikgcG9z KQotICAgICAgICAgICAgICAgKGFkZC1mYWNlLXRleHQtcHJvcGVydHkKLSAgICAgICAgICAgICAg ICBwb3MgKDErIHBvcykKLSAgICAgICAgICAgICAgICAnY29tcGxldGlvbnMtZmlyc3QtZGlmZmVy ZW5jZQotICAgICAgICAgICAgICAgIG5pbCBzdHIpKQotICAgICAgICAgICAodW5sZXNzICh6ZXJv cCAobGVuZ3RoIHN0cikpCi0gICAgICAgICAgICAgKHB1dC10ZXh0LXByb3BlcnR5Ci0gICAgICAg ICAgICAgIDAgMSAnY29tcGxldGlvbi1zY29yZQotICAgICAgICAgICAgICAoLyBzY29yZS1udW1l cmF0b3IgKCogZW5kICgxKyBzY29yZS1kZW5vbWluYXRvcikpIDEuMCkgc3RyKSkpCi0gICAgICAg ICBzdHIpCi0gICAgICAgY29tcGxldGlvbnMpKSkKKyAgICAgICAgICAgKHNjb3JlIChsYW1iZGEg KHN0cikKKyAgICAgICAgICAgICAgICAgICAgKHB1dC10ZXh0LXByb3BlcnR5IDAgMSAnY29tcGxl dGlvbi1zY29yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbXBs ZXRpb24tLWZsZXgtc2NvcmUgc3RyIHJlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RyKSkpKQorICAgICAgKGNvbmQgKGNvbXBsZXRpb24tbGF6eS1oaWxpdAorICAg ICAgICAgICAgIChzZXRxIGNvbXBsZXRpb24tbGF6eS1oaWxpdC1mbgorICAgICAgICAgICAgICAg ICAgIChsYW1iZGEgKHN0cikgKGNvbXBsZXRpb24tLWhpbGl0LWZyb20tcmUgc3RyIHJlKSkKKyAg ICAgICAgICAgICAgICAgICBjb21wbGV0aW9uLXBjbS0tcmVnZXhwIHJlKQorICAgICAgICAgICAg IGNvbXBsZXRpb25zKQorICAgICAgICAgICAgKHQKKyAgICAgICAgICAgICAobWFwY2FyCisgICAg ICAgICAgICAgIChsYW1iZGEgKHN0cikKKyAgICAgICAgICAgICAgICAoc2V0cSBzdHIgKGNvcHkt c2VxdWVuY2Ugc3RyKSkKKyAgICAgICAgICAgICAgICAoZnVuY2FsbCBzY29yZSBzdHIpCisgICAg ICAgICAgICAgICAgKGNvbXBsZXRpb24tLWhpbGl0LWZyb20tcmUgc3RyIHJlKQorICAgICAgICAg ICAgICAgIHN0cikKKyAgICAgICAgICAgICAgY29tcGxldGlvbnMpKSkpKQogICAgKHQgY29tcGxl dGlvbnMpKSkKIAogKGRlZnVuIGNvbXBsZXRpb24tcGNtLS1maW5kLWFsbC1jb21wbGV0aW9ucyAo c3RyaW5nIHRhYmxlIHByZWQgcG9pbnQKQEAgLTQyMDEsMTUgKzQyOTgsNDQgQEAgY29tcGxldGlv bi0tZmxleC1hZGp1c3QtbWV0YWRhdGEKICAgICAgICAgKGV4aXN0aW5nLWNzZgogICAgICAgICAg KGNvbXBsZXRpb24tbWV0YWRhdGEtZ2V0IG1ldGFkYXRhICdjeWNsZS1zb3J0LWZ1bmN0aW9uKSkp CiAgICAgKGNsLWZsZXQKLSAgICAgICAgKChjb21wb3NlLWZsZXgtc29ydC1mbgotICAgICAgICAg IChleGlzdGluZy1zb3J0LWZuKSA7IHdpc2ggYGNsLWZsZXQnIGhhZCBwcm9wZXIgaW5kZW50YXRp b24uLi4KLSAgICAgICAgICAobGFtYmRhIChjb21wbGV0aW9ucykKLSAgICAgICAgICAgIChzb3J0 Ci0gICAgICAgICAgICAgKGZ1bmNhbGwgZXhpc3Rpbmctc29ydC1mbiBjb21wbGV0aW9ucykKLSAg ICAgICAgICAgICAobGFtYmRhIChjMSBjMikKLSAgICAgICAgICAgICAgIChsZXQgKChzMSAoZ2V0 LXRleHQtcHJvcGVydHkgMCAnY29tcGxldGlvbi1zY29yZSBjMSkpCi0gICAgICAgICAgICAgICAg ICAgICAoczIgKGdldC10ZXh0LXByb3BlcnR5IDAgJ2NvbXBsZXRpb24tc2NvcmUgYzIpKSkKLSAg ICAgICAgICAgICAgICAgKD4gKG9yIHMxIDApIChvciBzMiAwKSkpKSkpKSkKKyAgICAgICAgKChj b21wb3NlLWZsZXgtc29ydC1mbiAoZXhpc3Rpbmctc29ydC1mbikKKyAgICAgICAgICAgKGxhbWJk YSAoY29tcGxldGlvbnMpCisgICAgICAgICAgICAgKGxldCAoKHByZS1zb3J0ZWQgKGZ1bmNhbGwg ZXhpc3Rpbmctc29ydC1mbiBjb21wbGV0aW9ucykpKQorICAgICAgICAgICAgICAgKGNvbmQgKDs7 IFRoZXJlJ3Mgbm8gdXNlZnVsIHNjb3JpbmcgdG8gYXBwbHksIHNpbmNlIHRoZQorICAgICAgICAg ICAgICAgICAgICAgIDs7IHBhdHRlcm4gaXMgZW1wdHkKKyAgICAgICAgICAgICAgICAgICAgICAo bnVsbCBjb21wbGV0aW9uLXBjbS0tcmVnZXhwKQorICAgICAgICAgICAgICAgICAgICAgIHByZS1z b3J0ZWQpCisgICAgICAgICAgICAgICAgICAgICAoY29tcGxldGlvbi1sYXp5LWhpbGl0CisgICAg ICAgICAgICAgICAgICAgICAgOzsgTGF6eSBoaWdobGlnaHQgaGFzIGJlZW4gcmVxdWVzdGVkLCBz byBkbyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICA7OyBzY29yaW5nIGFuZCBzb3J0aW5nIG5v dy4KKyAgICAgICAgICAgICAgICAgICAgICAobGV0KiAoKHNvcnRlZCAoc29ydAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFwY2FyCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChzdHIpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoLSAoY29tcGxldGlvbi0tZmxleC1zY29yZQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciAoZ2V0LXRleHQtcHJvcGVydHkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgJ2NvbXBsZXRp b24tLXVucXVvdGVkIHN0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbXBsZXRpb24tcGNtLS1yZWdleHApKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHByZS1zb3J0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICMnY2FyLWxlc3MtdGhhbi1jYXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2Vs bCBzb3J0ZWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgOzsgUmV1c2UgdGhlIGxpc3QKKyAg ICAgICAgICAgICAgICAgICAgICAgICh3aGlsZSBjZWxsCisgICAgICAgICAgICAgICAgICAgICAg ICAgIChzZXRjYXIgY2VsbCAoY2RhciBjZWxsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg KHBvcCBjZWxsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZCkpCisgICAgICAgICAg ICAgICAgICAgICAodAorICAgICAgICAgICAgICAgICAgICAgIDs7IExhenkgaGlnaGxpZ2h0IG5v dCByZXF1ZXN0ZWQsIHNvIHN0cmluZ3MgYXJlCisgICAgICAgICAgICAgICAgICAgICAgOzsgYXNz dW1lZCB0byBhbHJlYWR5IGNvbnRhaW4gYGNvbXBsZXRpb24tc2NvcmUnCisgICAgICAgICAgICAg ICAgICAgICAgOzsgKGFuZCBoaWdobGlnaHRpbmcpIGFuZCB3ZSBjYW4gZnJlZWx5IGRlc3Ryb3kK KyAgICAgICAgICAgICAgICAgICAgICA7OyBsaXN0LgorICAgICAgICAgICAgICAgICAgICAgIChz b3J0CisgICAgICAgICAgICAgICAgICAgICAgIHByZS1zb3J0ZWQKKyAgICAgICAgICAgICAgICAg ICAgICAgKGxhbWJkYSAoYzEgYzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgKD4gKG9yIChn ZXQtdGV4dC1wcm9wZXJ0eSAwICdjb21wbGV0aW9uLXNjb3JlIGMxKSAwKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChvciAoZ2V0LXRleHQtcHJvcGVydHkgMCAnY29tcGxldGlvbi1zY29y ZSBjMikgMCkpKSkpKSkpKSkKICAgICAgIGAobWV0YWRhdGEKICAgICAgICAgLEAoYW5kIGZsZXgt aXMtZmlsdGVyaW5nLXAKICAgICAgICAgICAgICAgIGAoKGRpc3BsYXktc29ydC1mdW5jdGlvbgo= --00000000000084ce9b06091bb41d--