From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp11.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id YD7xKZVSCmPK4AAAbAwnHQ (envelope-from ) for ; Sat, 27 Aug 2022 19:21:25 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp11.migadu.com with LMTPS id kMvtKZVSCmPwbwAA9RJhRA (envelope-from ) for ; Sat, 27 Aug 2022 19:21:25 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 3D1AC12B0A for ; Sat, 27 Aug 2022 19:21:25 +0200 (CEST) Received: from localhost ([::1]:34116 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oRzUq-000806-4Y for larch@yhetil.org; Sat, 27 Aug 2022 13:21:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43158) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oRzTe-0007zy-47 for emacs-orgmode@gnu.org; Sat, 27 Aug 2022 13:20:10 -0400 Received: from mail-lf1-x12a.google.com ([2a00:1450:4864:20::12a]:38883) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oRzTb-0004n3-9O for emacs-orgmode@gnu.org; Sat, 27 Aug 2022 13:20:09 -0400 Received: by mail-lf1-x12a.google.com with SMTP id q7so5832916lfu.5 for ; Sat, 27 Aug 2022 10:20:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:cc:references:to:from:content-language:subject :user-agent:mime-version:date:message-id:sender:from:to:cc; bh=bD85gzfR0tvq3kvPRjyxJ1Q2QGnSz8NU1/Vd+Fu3xjU=; b=GnwuXV2yJYheG1l6EpQ1ocLCnIt11jHGSKgIYBOHZRLUXugwKAaioHe+oLIKE4nQnS ZxHGHOtOymWmKOQVAsIky4i2zXlI4DU4wUV7w2KZ7z8tywZxrGjwVDdR+xGwrEC1qdMq h9EeWlIlL26O2oUamZO0DefDz6HSEF3EWJbJRRLdDwvu7EhfdBH4dI0rIxil8XuNK9GZ VsrK0OwLTA+zPVWcXkpNZrprkBjzNLLBYUzdQTwZh04g6SHZsFXEUuyKMBxmGKr2XuJn IXBhmo/TU9xkeNWynpGjVlTplSYp9KLEW3TOO1sMoU++ShdPPDHz5VM3GN7vd+dIMKik 2FfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:cc:references:to:from:content-language:subject :user-agent:mime-version:date:message-id:sender:x-gm-message-state :from:to:cc; bh=bD85gzfR0tvq3kvPRjyxJ1Q2QGnSz8NU1/Vd+Fu3xjU=; b=cBzq5IddLR0AgB2bJQ/sO0q7TGQ8E+qtCOGHtPNTGuSe9KWqmFWpkTeNIvmoXgPwBi Gr1MfPkzXrT0Z4/y2VCaWCfLXCDddiRat/LWZpzB/NXxeRITyagiDfOWAwQawvzJ20Cc Gf0/QhbsaIxuKedZ7v5I4T2btQ44DVhGWNlp1ZI3vkMcVyAk2jjYbQCIlsG7U217SIiP Az/Qo5Gdd2Nzvzz3rjgbHdTpHDZGA7B4TMYbhgegyBRKEPnIVv2RrGRgn91j5BbtgnYf b09L9LdUj07MzMEN3WVm+F3Aiczw8R2CZCa7MB/QBSyzUIu1elQjeaVQP7pqfD8FzTfd TBMg== X-Gm-Message-State: ACgBeo1s496jD6Q7i3pP32pTW/DlXHmyNgDRmJJWORATjCgKSKe9q6W9 DIEGk9MpU99FsU22g/1Um8JLxLbCg/U= X-Google-Smtp-Source: AA6agR5gt43ghapqxt2xgW18HgPEk0jZC26C3qwQUewU2wXQBICQqBacPetlP9bknNbCZLGZdy3+iw== X-Received: by 2002:a05:6512:228a:b0:492:b0d5:910e with SMTP id f10-20020a056512228a00b00492b0d5910emr4562131lfu.616.1661620804431; Sat, 27 Aug 2022 10:20:04 -0700 (PDT) Received: from [192.168.0.101] (nat-0-0.nsk.sibset.net. [5.44.169.188]) by smtp.googlemail.com with ESMTPSA id s19-20020a056512315300b0049465db4be5sm105310lfi.34.2022.08.27.10.20.03 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 27 Aug 2022 10:20:03 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------C0IieZsLcPZkV99ddFLX2qQc" Message-ID: Date: Sun, 28 Aug 2022 00:20:02 +0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: [PATCH] org.el: Fix percent substitutions in `org-open-file' Content-Language: en-US From: Max Nikulin To: emacs-orgmode@gnu.org References: <874kih92nb.fsf@kyleam.com> <87mtw8fupl.fsf@kyleam.com> Cc: Kyle Meyer In-Reply-To: Received-SPF: pass client-ip=2a00:1450:4864:20::12a; envelope-from=manikulin@gmail.com; helo=mail-lf1-x12a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, 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-orgmode@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Migadu-Flow: FLOW_IN X-Migadu-To: larch@yhetil.org X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1661620885; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=bD85gzfR0tvq3kvPRjyxJ1Q2QGnSz8NU1/Vd+Fu3xjU=; b=bMFlr1+jiGq0OCMxPHWWQRlVubvLUDwWS79mnJPgFsaHiQB9hIKMbMogTIoq/9lh73+26a KIPS7rQQuzrY8e8eZU2Iida8OB0dLcsCIhE8CaYYJzwzFEvo7NyS3WkvyLFLc9V3+UmF/b bpmqsh1wDJZ7Rt2D/VD1lx3o+ebts8t6UoJyDPaCa8aQZYsGFgVlDw0BTZufYQd56yG+SR M+MX/JnHGQ2jZ+Svbu2H9h+6zLUEFkS3DU4e0HqrCQQ1VvfDGfAkurDVUfNGoVe4IDqqL/ U602SnJv4Ncn2xp2G42X2j4vhTScugPRufsBy60Sq9f/L1My2ccyoY2BVz/T2Q== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1661620885; a=rsa-sha256; cv=none; b=m9EHJiDmglo0ee/Jsm162M6HwdWKS+Z5J5gsHyJU1ZUvfA0nnUMe23k36L7scJQYHqeXed ZCyd6ZZvS7TJodaePTt9KTVvCOrvDaqEZe9NskQ5ZEwhjVvt788AcCkDlZjDAWMOiZ4Qcn 1hQJLVCP6x4y59/K4dLS5+q5wBwOCZiMTk3/h4+ptmKGNKHPMuLbKTmhYJEteY//vr4+wO BNlNa8ngwGLi55leCKEpfSIP13B6brMOMenO3TxzbaVcDZ5dBToBuYveTB62cTFakidkIU Cuw22192TKvO761lfdqe7lm9wsEIzFCvHBuFCHcDm7gdvJJjq94ymF1BY0Fa0w== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gmail.com header.s=20210112 header.b=GnwuXV2y; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: 9.00 X-Spam: Yes Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gmail.com header.s=20210112 header.b=GnwuXV2y; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: 3D1AC12B0A X-Spam-Score: 9.00 X-Migadu-Spam: Yes X-Migadu-Scanner: scn1.migadu.com X-TUID: ylPZcbVKRe0o This is a multi-part message in MIME format. --------------C0IieZsLcPZkV99ddFLX2qQc Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 21/03/2021 19:36, Maxim Nikulin wrote: > On 13/02/2021 11:38, Kyle Meyer wrote: >> +(defun org--open-file-format-spec (format specification) >> +  (with-temp-buffer >> +    (insert format) >> +    (goto-char (point-min)) >> +    (while (search-forward "%" nil t) >> +      (cond ((eq (char-after) ?%) >> +             (delete-char 1)) >> +            ((looking-at "[s0-9]") >> +             (replace-match >> +              (or (cdr (assoc (match-string 0) specification)) >> +                  (error "Invalid format string")) >> +              'fixed-case 'literal) >> +             (delete-region (1- (match-beginning 0)) (match-beginning >> 0))) It's pity that this issue has not fix yet. I have tried to implement another helper function. It is hardly usable outside of `org-open-file' (perhaps it is still suitable to make mailcap commands), but separate function makes the code testable. I hope, the attached patch fixes the problems with multiple regexp groups and with percent characters in replacement string. Notice that "\%", not "%%" is used to escape percent in mailcap, anyway neither variant was supported before. --------------C0IieZsLcPZkV99ddFLX2qQc Content-Type: text/x-patch; charset=UTF-8; name="0001-org.el-Fix-percent-substitutions-in-org-open-file.patch" Content-Disposition: attachment; filename*0="0001-org.el-Fix-percent-substitutions-in-org-open-file.patch" Content-Transfer-Encoding: base64 RnJvbSAyZjI4NTBkY2RjMGNiYThjZmM2YzBlMjFmYzg5M2M0ZTY2NGQ1NzVjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXggTmlrdWxpbiA8bWFuaWt1bGluQGdtYWlsLmNv bT4KRGF0ZTogU2F0LCAyNyBBdWcgMjAyMiAyMzo1MToyNCArMDcwMApTdWJqZWN0OiBbUEFU Q0hdIG9yZy5lbDogRml4IHBlcmNlbnQgc3Vic3RpdHV0aW9ucyBpbiBgb3JnLW9wZW4tZmls ZScKCiogbGlzcC9vcmcuZWwgKG9yZy0tb3Blbi1maWxlLWZvcm1hdC1jb21tYW5kKTogTmV3 IGZ1bmN0aW9uIHdpdGggYmV0dGVyCmNvdmVyYWdlIG9mIG1haWxjYXAgUkZDIDE1MjQgc3lu dGF4LiAgRG8gbm90IHJlcGxhY2UgcGVyY2VudCBjaGFyYWN0ZXIKaW4gZmlsZSBuYW1lIG9y IGxpbmsgY29tcG9uZW50LCBmaXggc3Vic3RpdHV0aW9uIG9mIG11bHRpcGxlIHJlZ3VsYXIK ZXhwcmVzc2lvbiBncm91cHMgbWF0Y2hlZCBpbiB0aGUgbGluayB0YXJnZXQuCihvcmctb3Bl bi1maWxlKTogVXNlIGBvcmctLW9wZW4tZmlsZS1mb3JtYXQtY29tbWFuZCcgaW5zdGVhZCBv ZiBpbmxpbmUKY29kZS4KKiB0ZXN0aW5nL2xpc3AvdGVzdC1vcmcuZWwgKG9yZy10ZXN0L29y Zy0tb3Blbi1maWxlLWZvcm1hdC1jb21tYW5kKToKVGVzdHMgZm9yIGBvcmctLW9wZW4tZmls ZS1mb3JtYXQtY29tbWFuZCcuCgpUaGUgcHJpbWFyeSBnb2FsIG9mIG1vdmluZyBjb2RlIG91 dHNpZGUgb2YgYG9yZy1vcGVuLWZpbGUnIGZ1bmN0aW9uIGlzIHRvCm1ha2UgaXQgdGVzdGFi bGUuCgpJdCBzaG91bGQgZml4IHRoZSBmb2xsb3dpbmcgaXNzdWVzOgotIE1heGltIE5pa3Vs aW4uIGdyZWVkeSBzdWJzdGl0dXRpb24gaW4gb3JnLW9wZW4tZmlsZS4KICBXZWQsIDIwIEph biAyMDIxIDIzOjA4OjM1ICswNzAwLgogIGh0dHBzOi8vbGlzdC5vcmdtb2RlLm9yZy9ydTlr aTQkdDVlJDFAY2lhby5nbWFuZS5pbwotIFJvZHJpZ28gTW9yYWxlcy4gT3JnIG1vZGUgbGlu a3M6IE9wZW4gYSBQREYgZmlsZSBhdCBhIGdpdmVuIHBhZ2UKICBhbmQgaGlnaGxpZ2h0IGEg Z2l2ZW4gc3RyaW5nLiBUdWUsIDAyIE1hciAyMDIxIDE1OjA3OjMyIC0wNTAwLgogIGh0dHBz Oi8vbGlzdC5vcmdtb2RlLm9yZy84N2xmYjVwYmVqLmZzZkBnbWFpbC5jb20KLS0tCiBsaXNw L29yZy5lbCAgICAgICAgICAgICAgfCAgOTUgKysrKysrKysrKysrKysrKysrKysrLS0tLS0t LQogdGVzdGluZy9saXNwL3Rlc3Qtb3JnLmVsIHwgMTMyICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAyMDYgaW5zZXJ0aW9ucygr KSwgMjEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGlzcC9vcmcuZWwgYi9saXNwL29y Zy5lbAppbmRleCA4NTgxMjNlNjcuLmU5NGVjMDJkOSAxMDA2NDQKLS0tIGEvbGlzcC9vcmcu ZWwKKysrIGIvbGlzcC9vcmcuZWwKQEAgLTgwMTIsNiArODAxMiw3OCBAQCBvcGVuZWQgaW4g RW1hY3MuIgogICAgKHdoZW4gYWRkLWF1dG8tbW9kZQogICAgICAobWFwY2FyIChsYW1iZGEg KHgpIChjb25zIChjYXIgeCkgJ2VtYWNzKSkgYXV0by1tb2RlLWFsaXN0KSkpKQogCisoZGVm dW4gb3JnLS1vcGVuLWZpbGUtZm9ybWF0LWNvbW1hbmQKKyAgICAobWFpbGNhcC1jb21tYW5k IGZpbGUgbGluayBtYXRjaC1kYXRhKQorICAiRm9ybWF0IE1BSUxDQVAtQ09NTUFORCB0byBs YXVuY2ggdmlld2VyIGZvciBGSUxFLgorCitDb21tYW5kIG1heSBiZSBhbiBlbnRyeSBmcm9t IHRoZSBgb3JnLWZpbGUtYXBwcycgbGlzdCBvciBmcm9tCittYWlsY2FwIGZpbGUsIGZvciBk ZXRhaWxzIHNlZSBSRkMgMTUyNCBBIFVzZXIgQWdlbnQgQ29uZmlndXJhdGlvbgorTWVjaGFu aXNtIEZvciBNdWx0aW1lZGlhIE1haWwgRm9ybWF0IEluZm9ybWF0aW9uCis8aHR0cHM6Ly90 b29scy5pZXRmLm9yZy9odG1sL3JmYzE1MjQ+LCBtYW4gbWFpbGNhcCg1KSwgYW5kIEluZm8K K25vZGUgYChlbWFjcy1taW1lKSBtYWlsY2FwJy4gIE9ubHkgYSBwYXJ0IG9mIG1haWxjYXAg c3BlY2lmaWNhdGlvbgoraXMgc3VwcG9ydGVkLgorCitUaGUgZm9sbG93aW5nIHN1YnN0aXR1 dGlvbnMgYXJlIGludGVycG9sYXRlZCBpbiB0aGUgTUFJTENBUC1DT01NQU5ECitzdHJpbmc6 CistIFwiJXNcIiB0byBGSUxFIG5hbWUgcGFzc2VkIHRocm91Z2ggYGNvbnZlcnQtc3RhbmRh cmQtZmlsZS1uYW1lJywKKyAgc28gaXQgbXVzdCBiZSBhYnNvbHV0ZSBwYXRoLAorLSBcIiUx XCIgdG8gXCIlOVwiIGdyb3VwcyBmcm9tIE1BVENILURBVEEgZm91bmQgaW4gdGhlIExJTksg c3RyaW5nCisgIGJ5IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaW4gdGhlIGBvcmctZmlsZS1h cHBzJyBlbnRyeSBrZXkKKyAgKHBlcmZvcm1lZCBieSBjYWxsZXIpLgorCitVc2UgYmFja3Ns YXNoIFwiXFxcIiB0byBxdW90ZSBwZXJjZW50IFwiJVwiIG9yIGFueSBvdGhlciBjaGFyYWN0 ZXIKK2luY2x1ZGluZyBiYWNrc2xhc2ggaXRzZWxmLgorCitJbiBhZGRpdGlvbiwgZWFjaCBh cmd1bWVudCBpcyBwYXNzZWQgdGhyb3VnaCBgc2hlbGwtcXVvdGUtYXJndW1lbnQnLAorc28g cXVvdGVzIGFyb3VuZCBzdWJzdGl0dXRpb25zIHNob3VsZCBub3QgYmUgdXNlZC4gIEZvciBj b21wbGlhbmNlCit3aXRoIG1haWxjYXAgZmlsZXMgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMg YXJvdW5kIHN1YnN0aXR1dGlvbnMKK2FyZSBzdHJpcHBlZC4KKworRm9yIGV4YW1wbGUsIHRv IHNwZWNpZnkgcGFydGljdWxhciBsb2NhdGlvbiB3aXRoaW5nIGEgUERGIGZpbGUsCitgb3Jn LWZpbGUtYXBwcycgbGlzdCBtYXkgaGF2ZSB0aGUgZm9sbG93aW5nIGVudHJpZXMgKG9yZGVy IGlzIGltcG9ydGFudCk6CisKKyAgICA7OyBQYWdlIGFuZCBzZWFyY2ggc3RyaW5nLAorICAg IDs7IGUuZy4gPGZpbGU6Ly8vdXNyL3NoYXJlL2RvYy9iYXNoL2Jhc2hyZWYucGRmOjozNDo6 b3JkZXIgb2YgcmVkaXJlY3Rpb25zPi4KKyAgICAoXCJcXFxcLnBkZjo6XFxcXChbMC05XStc XFxcKTo6XFxcXCguK1xcXFwpXFxcXFxcPSdcIgorICAgICAgICAuIFwib2t1bGFyIC0tcGFn ZSAlMSAtLWZpbmQgJTIgJXNcIikKKyAgICA7OyBJbnRlcm5hbCBhbmNob3IgYW5kIHNlYXJj aCBzdHJpbmcsCisgICAgOzsgZS5nLiA8ZmlsZTovLy91c3Ivc2hhcmUvZG9jL2Jhc2gvYmFz aHJlZi5wZGY6OlJlZGlyZWN0aW9uczo6YWxsb2NhdGUgYSBmaWxlPi4KKyAgICAoXCJcXFxc LnBkZjo6XFxcXCguK1xcXFwpOjpcXFxcKC4rXFxcXClcXFxcXFw9J1wiCisgICAgICAgIC4g XCJva3VsYXIgLS1maW5kICUyIGZpbGU6Ly8lc1xcXFxcXFxcIyUxXCIpCisgICAgOzsgUGFn ZSBudW1iZXIsIGUuZy4gPGZpbGU6Ly8vdXNyL3NoYXJlL2RvYy9iYXNoL2Jhc2hyZWYucGRm OjozND4uCisgICAgKFwiXFxcXC5wZGY6OlxcXFwoWzAtOV0rXFxcXClcXFxcXFw9J1wiIC4g XCJva3VsYXIgLS1wYWdlICUxICVzXCIpCisgICAgOzsgSW50ZXJuYWwgcmVmZXJlbmNlLCBl LmcuIDxmaWxlOi8vL3Vzci9zaGFyZS9kb2MvYmFzaC9iYXNocmVmLnBkZjo6UmVkaXJlY3Rp b25zPi4KKyAgICAoXCJcXFxcLnBkZjo6XFxcXCguK1xcXFwpXFxcXFxcPSdcIiAuIFwib2t1 bGFyIGZpbGU6Ly8lc1xcXFxcXFxcIyUxXCIpCisgICAgOzsgTm8gbG9jYXRpb24gd2l0aGlu IHRoZSBmaWxlLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IFwiOjpcIiwKKyAgICA7OyBlLmcu IDxmaWxlOi8vL3Vzci9zaGFyZS9kb2MvYmFzaC9iYXNocmVmLnBkZj4uCisgICAgKFwiXFxc XC5wZGZcXFxcKD86OjpcXFxcKT9cXFxcXFw9J1wiIC4gXCJva3VsYXIgJXNcIikKKworU2lk ZSBub3RlOiBwZXJoYXBzIHlvdSB3b3VsZCBwcmVmZXIgdG8gcmVhZCB0aGUgc2FtZSBiYXNo IG1hbnVhbCB1c2VkIGluIHRoZQorZXhhbXBsZSBhcyBJbmZvIG5vZGUgYChiYXNoKSBSZWRp cmVjdGlvbnMnIChPcmcgbGluazogPGluZm86YmFzaCNSZWRpcmVjdGlvbnM+KS4iCisgIChs ZXQgKChzcGVjIChsaXN0IChjb25zID9zICAoY29udmVydC1zdGFuZGFyZC1maWxlbmFtZSBm aWxlKSkpKQorICAgICAgICAobmdyb3VwcyAobWluIDkgKC0gKC8gKGxlbmd0aCBtYXRjaC1k YXRhKSAyKSAxKSkpKQorICAgICh3aGVuICg+IG5ncm91cHMgMCkKKyAgICAgIChzZXQtbWF0 Y2gtZGF0YSBtYXRjaC1kYXRhKQorICAgICAgKGRvbGlzdCAoaSAobnVtYmVyLXNlcXVlbmNl IDEgbmdyb3VwcykpCisgICAgICAgIChwdXNoIChjb25zICgrID8wIGkpIChtYXRjaC1zdHJp bmctbm8tcHJvcGVydGllcyBpIGxpbmspKSBzcGVjKSkpCisgICAgKHJlcGxhY2UtcmVnZXhw LWluLXN0cmluZworICAgICAiXFxcXFxcKC5cXClcXHxcXChbJ1wiXVxcKT8lXFwoPzpcXCgu XFwpXFwoXFwyXFwpP1xcKT8iCisgICAgIChsYW1iZGEgKGZtdCkKKyAgICAgICAobGV0ICgo YmFja3NsYXNoIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyAxIGZtdCkpKQorICAgICAg ICAgKG9yIGJhY2tzbGFzaAorICAgICAgICAgICAgIChsZXQqICgocXVvdCAobWF0Y2gtc3Ry aW5nIDIgZm10KSkKKyAgICAgICAgICAgICAgICAgICAgKHBlcmNlbnQgKGFsaXN0LWdldCAo c3RyaW5nLXRvLWNoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKG9yIChtYXRjaC1zdHJpbmcgMyBmbXQpICIiKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzcGVjKSkKKyAgICAgICAgICAgICAgICAgICAgKHZhbHVl IChhbmQgcGVyY2VudCAoc2hlbGwtcXVvdGUtYXJndW1lbnQgcGVyY2VudCkpKSkKKyAgICAg ICAgICAgICAgICh1bmxlc3MgdmFsdWUKKyAgICAgICAgICAgICAgICAgKGVycm9yICJJbnZh bGlkIGZvcm1hdCBgJXMnIiBmbXQpKQorICAgICAgICAgICAgICAgOzsgUmVtb3ZlIHF1b3Rl cyBhcm91bmQgdGhlIGZpbGUgbmFtZSAtIHdlIHVzZSBgc2hlbGwtcXVvdGUtYXJndW1lbnQn LgorICAgICAgICAgICAgICAgKGlmIChhbmQgcXVvdCAoc3RyaW5nLWVxdWFsIHF1b3QgKG1h dGNoLXN0cmluZyA0IGZtdCkpKQorICAgICAgICAgICAgICAgICAgIHZhbHVlCisgICAgICAg ICAgICAgICAgIChjb25jYXQgcXVvdCB2YWx1ZSkpKSkpKQorICAgICBtYWlsY2FwLWNvbW1h bmQgbmlsICdsaXRlcmFsKSkpCisKIDs7OyMjI2F1dG9sb2FkCiAoZGVmdW4gb3JnLW9wZW4t ZmlsZSAocGF0aCAmb3B0aW9uYWwgaW4tZW1hY3MgbGluZSBzZWFyY2gpCiAgICJPcGVuIHRo ZSBmaWxlIGF0IFBBVEguCkBAIC04MTA5LDI3ICs4MTgxLDggQEAgSWYgdGhlIGZpbGUgZG9l cyBub3QgZXhpc3QsIHRocm93IGFuIGVycm9yLiIKIAkgICAgICAgKG5vdCBvcmctb3Blbi1u b24tZXhpc3RpbmctZmlsZXMpKQogICAgICAgKHVzZXItZXJyb3IgIk5vIHN1Y2ggZmlsZTog JXMiIGZpbGUpKQogICAgIChjb25kCi0gICAgICgoYW5kIChzdHJpbmdwIGNtZCkgKG5vdCAo c3RyaW5nLW1hdGNoICJeXFxzLSokIiBjbWQpKSkKLSAgICAgIDs7IFJlbW92ZSBxdW90ZXMg YXJvdW5kIHRoZSBmaWxlIG5hbWUgLSB3ZSdsbCB1c2Ugc2hlbGwtcXVvdGUtYXJndW1lbnQu Ci0gICAgICAod2hpbGUgKHN0cmluZy1tYXRjaCAiWydcIl0lc1snXCJdIiBjbWQpCi0JKHNl dHEgY21kIChyZXBsYWNlLW1hdGNoICIlcyIgdCB0IGNtZCkpKQotICAgICAgKHNldHEgY21k IChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcKLQkJICIlcyIKLQkJIChzaGVsbC1xdW90ZS1h cmd1bWVudCAoY29udmVydC1zdGFuZGFyZC1maWxlbmFtZSBmaWxlKSkKLQkJIGNtZAotCQkg bmlsIHQpKQotCi0gICAgICA7OyBSZXBsYWNlICIlMSIsICIlMiIgZXRjLiBpbiBjb21tYW5k IHdpdGggZ3JvdXAgbWF0Y2hlcyBmcm9tIHJlZ2V4Ci0gICAgICAoc2F2ZS1tYXRjaC1kYXRh Ci0JKGxldCAoKG1hdGNoLWluZGV4IDEpCi0JICAgICAgKG51bWJlci1vZi1ncm91cHMgKC0g KC8gKGxlbmd0aCBsaW5rLW1hdGNoLWRhdGEpIDIpIDEpKSkKLQkgIChzZXQtbWF0Y2gtZGF0 YSBsaW5rLW1hdGNoLWRhdGEpCi0JICAod2hpbGUgKDw9IG1hdGNoLWluZGV4IG51bWJlci1v Zi1ncm91cHMpCi0JICAgIChsZXQgKChyZWdleCAoY29uY2F0ICIlIiAobnVtYmVyLXRvLXN0 cmluZyBtYXRjaC1pbmRleCkpKQotCQkgIChyZXBsYWNlLXdpdGggKG1hdGNoLXN0cmluZyBt YXRjaC1pbmRleCBkbGluaykpKQotCSAgICAgICh3aGlsZSAoc3RyaW5nLW1hdGNoIHJlZ2V4 IGNtZCkKLQkJKHNldHEgY21kIChyZXBsYWNlLW1hdGNoIHJlcGxhY2Utd2l0aCB0IHQgY21k KSkpKQotCSAgICAoc2V0cSBtYXRjaC1pbmRleCAoKyBtYXRjaC1pbmRleCAxKSkpKSkKKyAg ICAgKChvcmctc3RyaW5nLW53LXAgY21kKQorICAgICAgKHNldHEgY21kIChvcmctLW9wZW4t ZmlsZS1mb3JtYXQtY29tbWFuZCBjbWQgZmlsZSBkbGluayBsaW5rLW1hdGNoLWRhdGEpKQog CiAgICAgICAoc2F2ZS13aW5kb3ctZXhjdXJzaW9uCiAJKG1lc3NhZ2UgIlJ1bm5pbmcgJXMu Li5kb25lIiBjbWQpCmRpZmYgLS1naXQgYS90ZXN0aW5nL2xpc3AvdGVzdC1vcmcuZWwgYi90 ZXN0aW5nL2xpc3AvdGVzdC1vcmcuZWwKaW5kZXggYjE0Y2JlYjI2Li5hZmFlMjRhY2EgMTAw NjQ0Ci0tLSBhL3Rlc3RpbmcvbGlzcC90ZXN0LW9yZy5lbAorKysgYi90ZXN0aW5nL2xpc3Av dGVzdC1vcmcuZWwKQEAgLTg0MjEsNiArODQyMSwxMzggQEAgdHdvCiAgICAgIChjYWxsLWlu dGVyYWN0aXZlbHkgIydvcmctcGFzdGUtc3VidHJlZSkKICAgICAgKGJ1ZmZlci1zdHJpbmcp KSkpKQogCisoZXJ0LWRlZnRlc3QgdGVzdC1vcmcvb3JnLS1vcGVuLWZpbGUtZm9ybWF0LWNv bW1hbmQgKCkKKyAgIlRlc3QgYG9yZy0tb3Blbi1maWxlLWZvcm1hdC1jb21tYW5kJyBoZWxw ZXIgZm9yIGBvcmctb3Blbi1maWxlJy4iCisgIChsZXQgKChzeXN0ZW0tdHlwZSAnZ251L2xp bnV4KSkgOyBGaXggYmVoYXZpb3Igb2YgYHNoZWxsLXF1b3RlLWFyZ3VtZW50Jy4KKyAgICA7 OyBObyBhZGRpdGlvbmFsIGdyb3VwcyBpbiBgb3JnLWZpbGUtYXBwcycga2V5LgorICAgIChs ZXQgKChmaWxlICIvZmlsZS5wZGYiKQorICAgICAgICAgIChwYXR0ZXJuICJcXC5wZGZcXCci KSkKKyAgICAgIChzaG91bGQKKyAgICAgICAoZXF1YWwgInNpbXBsZSAvZmlsZS5wZGYiCisg ICAgICAgICAgICAgIChhbmQgKHN0cmluZy1tYXRjaCBwYXR0ZXJuIGZpbGUpCisgICAgICAg ICAgICAgICAgICAgKG9yZy0tb3Blbi1maWxlLWZvcm1hdC1jb21tYW5kCisgICAgICAgICAg ICAgICAgICAgICJzaW1wbGUgJXMiIGZpbGUgZmlsZSAobWF0Y2gtZGF0YSkpKSkpCisgICAg ICAoc2hvdWxkCisgICAgICAgKGVxdWFsICJzaW5nbGUtcXVvdGVzIC9maWxlLnBkZiIKKyAg ICAgICAgICAgICAgKGFuZCAoc3RyaW5nLW1hdGNoIHBhdHRlcm4gZmlsZSkKKyAgICAgICAg ICAgICAgICAgICAob3JnLS1vcGVuLWZpbGUtZm9ybWF0LWNvbW1hbmQKKyAgICAgICAgICAg ICAgICAgICAgInNpbmdsZS1xdW90ZXMgJyVzJyIgZmlsZSBmaWxlIChtYXRjaC1kYXRhKSkp KSkKKyAgICAgIChzaG91bGQKKyAgICAgICAoZXF1YWwgImRvdWJsZS1xdW90ZXMgL2ZpbGUu cGRmIgorICAgICAgICAgICAgICAoYW5kIChzdHJpbmctbWF0Y2ggcGF0dGVybiBmaWxlKQor ICAgICAgICAgICAgICAgICAgIChvcmctLW9wZW4tZmlsZS1mb3JtYXQtY29tbWFuZAorICAg ICAgICAgICAgICAgICAgICAiZG91YmxlLXF1b3RlcyBcIiVzXCIiIGZpbGUgZmlsZSAobWF0 Y2gtZGF0YSkpKSkpCisgICAgICAoc2hvdWxkCisgICAgICAgKGVxdWFsICJubyBzdWJzdCIK KyAgICAgICAgICAgICAgKGFuZCAoc3RyaW5nLW1hdGNoIHBhdHRlcm4gZmlsZSkKKyAgICAg ICAgICAgICAgICAgICAob3JnLS1vcGVuLWZpbGUtZm9ybWF0LWNvbW1hbmQKKyAgICAgICAg ICAgICAgICAgICAgIm5vIHN1YnN0IiBmaWxlIGZpbGUgKG1hdGNoLWRhdGEpKSkpKQorICAg ICAgKHNob3VsZAorICAgICAgIChlcXVhbCAiJSBsaXRlcmFsIHBlcmNlbnQgMTAwJSAlcyIK KyAgICAgICAgICAgICAgKGFuZCAoc3RyaW5nLW1hdGNoIHBhdHRlcm4gZmlsZSkKKyAgICAg ICAgICAgICAgICAgICAob3JnLS1vcGVuLWZpbGUtZm9ybWF0LWNvbW1hbmQKKyAgICAgICAg ICAgICAgICAgICAgIlxcJSBsaXRlcmFsIHBlcmNlbnQgMTAwXFwlIFxcJXMiIGZpbGUgZmls ZSAobWF0Y2gtZGF0YSkpKSkpCisgICAgICAoc2hvdWxkCisgICAgICAgKGVxdWFsICJlc2Nh cGUgXCIvZmlsZS5wZGZcIiBcXCBtb3JlIgorICAgICAgICAgICAgICAoYW5kIChzdHJpbmct bWF0Y2ggcGF0dGVybiBmaWxlKQorICAgICAgICAgICAgICAgICAgIChvcmctLW9wZW4tZmls ZS1mb3JtYXQtY29tbWFuZAorICAgICAgICAgICAgICAgICAgICA7OyBTZWNvbmQgcXVvdGUg aXMgbm90IGVzY2FwZWQuCisgICAgICAgICAgICAgICAgICAgICJlc2NhcGUgXFxcIiVzXCIg XFxcXCBtb3JlIiBmaWxlIGZpbGUgKG1hdGNoLWRhdGEpKSkpKQorICAgICAgKHNob3VsZAor ICAgICAgIChlcXVhbCAiL2ZpbGUucGRmIGZpbGUgYXQgc3RhcnQiCisgICAgICAgICAgICAg IChhbmQgKHN0cmluZy1tYXRjaCBwYXR0ZXJuIGZpbGUpCisgICAgICAgICAgICAgICAgICAg KG9yZy0tb3Blbi1maWxlLWZvcm1hdC1jb21tYW5kCisgICAgICAgICAgICAgICAgICAgICIl cyBmaWxlIGF0IHN0YXJ0IiBmaWxlIGZpbGUgKG1hdGNoLWRhdGEpKSkpKSkKKyAgICA7OyBB bmNob3JzIHdpdGhpbiB0YXJnZXQgZmlsZS4KKyAgICAobGV0ICgoZmlsZSAiL3BhZ2Utc2Vh cmNoLnBkZiIpCisgICAgICAgICAgKGxpbmsgIi9wYWdlLXNlYXJjaC5wZGY6OjEwOjpzb21l IHdvcmRzIikKKyAgICAgICAgICAocGF0dGVybiAiXFwucGRmOjpcXChbMC05XStcXCk6Olxc KC4qXFwpXFwnIikpCisgICAgICAoc2hvdWxkCisgICAgICAgKGVxdWFsICJ6YXRodXJhIC0t cGFnZSAxMCAtLWZpbmQgc29tZVxcIHdvcmRzIC9wYWdlLXNlYXJjaC5wZGYiCisgICAgICAg ICAgICAgIChhbmQgKHN0cmluZy1tYXRjaCBwYXR0ZXJuIGxpbmspCisgICAgICAgICAgICAg ICAgICAgKG9yZy0tb3Blbi1maWxlLWZvcm1hdC1jb21tYW5kCisgICAgICAgICAgICAgICAg ICAgICJ6YXRodXJhIC0tcGFnZSAnJTEnIC0tZmluZCAlMiBcIiVzXCIiIGZpbGUgbGluayAo bWF0Y2gtZGF0YSkpKSkpCisgICAgICA7OyBVbnVzZWQgJTIuCisgICAgICAoc2hvdWxkCisg ICAgICAgKGVxdWFsICJmaXJlZm94IGZpbGU6Ly8vcGFnZS1zZWFyY2gucGRmXFwjcGFnZT0x MCIKKyAgICAgICAgICAgICAgKGFuZCAoc3RyaW5nLW1hdGNoIHBhdHRlcm4gbGluaykKKyAg ICAgICAgICAgICAgICAgICAob3JnLS1vcGVuLWZpbGUtZm9ybWF0LWNvbW1hbmQKKyAgICAg ICAgICAgICAgICAgICAgImZpcmVmb3ggZmlsZTovLyVzXFxcXCNwYWdlPSUxIiBmaWxlIGxp bmsgKG1hdGNoLWRhdGEpKSkpKQorICAgICAgKHNob3VsZAorICAgICAgIChlcXVhbCAiYWRq dWNlbnQtc3Vic3QgL3BhZ2Utc2VhcmNoLnBkZnNvbWVcXCB3b3JkczEwc29tZVxcIHdvcmRz IgorICAgICAgICAgICAgICAoYW5kIChzdHJpbmctbWF0Y2ggcGF0dGVybiBsaW5rKQorICAg ICAgICAgICAgICAgICAgIChvcmctLW9wZW4tZmlsZS1mb3JtYXQtY29tbWFuZAorICAgICAg ICAgICAgICAgICAgICAiYWRqdWNlbnQtc3Vic3QgJXMlMiclMSclMiIgZmlsZSBsaW5rICht YXRjaC1kYXRhKSkpKSkpCisgICAgOzsgTm8gbW9yZSB0aGFuIDkgc3Vic3RpdHV0aW9ucyBh cmUgc3VwcG9ydGVkLgorICAgIChsZXQgKChmaWxlICIvbWFueS5wZGYiKQorICAgICAgICAg IChsaW5rICIvbWFueS5wZGY6Om9uZToyOjM6NDo1OjY6Nzo4Ojk6YTpiOmMiKQorICAgICAg ICAgIChwYXR0ZXJuIChjb25jYXQgIlxcLnBkZjoiCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAobWFwY29uY2F0IChsYW1iZGEgKF8pICI6XFwoW146XStcXCkiKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVtYmVyLXNlcXVlbmNlIDEgMTIpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlxcJyIpKSkKKyAgICAgIChzaG91bGQKKyAgICAgICAoZXF1YWwg Im92ZXJmbG93IC9tYW55LnBkZjo6b25lOjI6Mzo0OjU6Njo3Ojg6OTpvbmUwOm9uZTE6b25l MiIKKyAgICAgICAgICAgICAgKGFuZCAoc3RyaW5nLW1hdGNoIHBhdHRlcm4gbGluaykKKyAg ICAgICAgICAgICAgICAgICAob3JnLS1vcGVuLWZpbGUtZm9ybWF0LWNvbW1hbmQKKyAgICAg ICAgICAgICAgICAgICAgIm92ZXJmbG93ICVzOjolMTolMjolMzolNDolNTolNjolNzolODol OTolMTA6JTExOiUxMiIKKyAgICAgICAgICAgICAgICAgICAgZmlsZSBsaW5rIChtYXRjaC1k YXRhKSkpKSkpCisgICAgOzsgUGVyY2VudCBjaGFyYWN0ZXIgaW4gbGluayBmaWVsZHMgZG9l cyBub3QgY2F1c2UgYW55IHByb2JsZW0uCisgICAgKGxldCAoKGZpbGUgIi9maWxlLSUyLnBk ZiIpCisgICAgICAgICAgKGxpbmsgIi9maWxlLSUyLnBkZjo6YW5jaG9yLSUzOjpzZWFyY2gg JTEiKQorICAgICAgICAgIChwYXR0ZXJuICJcXC5wZGY6OlxcKFteOl0rXFwpOjpcXCguK1xc KVxcJyIpKQorICAgICAgKHNob3VsZAorICAgICAgIChlcXVhbCAicGVyY2VudHMgLS1maW5k IHNlYXJjaFxcIFxcJTEgZmlsZTovLy9maWxlLVxcJTIucGRmXFwjYW5jaG9yLVxcJTMiCisg ICAgICAgICAgICAgIChhbmQgKHN0cmluZy1tYXRjaCBwYXR0ZXJuIGxpbmspCisgICAgICAg ICAgICAgICAgICAgKG9yZy0tb3Blbi1maWxlLWZvcm1hdC1jb21tYW5kCisgICAgICAgICAg ICAgICAgICAgICJwZXJjZW50cyAtLWZpbmQgJTIgZmlsZTovLyVzXFxcXCMlMSIKKyAgICAg ICAgICAgICAgICAgICAgZmlsZSBsaW5rIChtYXRjaC1kYXRhKSkpKSkpCisgICAgOzsgRXJy b3JzLgorICAgIChsZXQgKChmaWxlICIvZXJyb3IucGRmIikKKyAgICAgICAgICAocGF0dGVy biAiXFwucGRmXFwnIikpCisgICAgICAobGV0KiAoKGVyciAoc2hvdWxkLWVycm9yCisgICAg ICAgICAgICAgICAgICAgKGFuZCAoc3RyaW5nLW1hdGNoIHBhdHRlcm4gZmlsZSkKKyAgICAg ICAgICAgICAgICAgICAgICAgIChvcmctLW9wZW4tZmlsZS1mb3JtYXQtY29tbWFuZAorICAg ICAgICAgICAgICAgICAgICAgICAgICJ0cmFpbGluZy1wZXJjZW50ICVzICUiIGZpbGUgZmls ZSAobWF0Y2gtZGF0YSkpKQorICAgICAgICAgICAgICAgICAgIDp0eXBlICdlcnJvcikpCisg ICAgICAgICAgICAgKGVyci10ZXh0IChjYWRyIGVycikpKQorICAgICAgICAoc2hvdWxkLW5v dCAodW5sZXNzIChhbmQgKHN0cmluZ3AgZXJyLXRleHQpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoc3RyaW5nLW1hdGNoLXAgIlxcYEludmFsaWQgZm9ybWF0IC4qJSIg ZXJyLXRleHQpKQorICAgICAgICAgICAgICAgICAgICAgIGVycikpKQorICAgICAgOzsgTWFp bGNhcCBlc2NhcGUgZm9yICIlIiBpcyAiXCUiLCBub3QgIiUlIi4KKyAgICAgIChsZXQqICgo ZXJyIChzaG91bGQtZXJyb3IKKyAgICAgICAgICAgICAgICAgICAoYW5kIChzdHJpbmctbWF0 Y2ggcGF0dGVybiBmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgKG9yZy0tb3Blbi1m aWxlLWZvcm1hdC1jb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgInBlcmNlbnQt cGVyY2VudCAlcyUlIiBmaWxlIGZpbGUgKG1hdGNoLWRhdGEpKSkKKyAgICAgICAgICAgICAg ICAgICA6dHlwZSAnZXJyb3IpKQorICAgICAgICAgICAgIChlcnItdGV4dCAoY2FkciBlcnIp KSkKKyAgICAgICAgKHNob3VsZC1ub3QgKHVubGVzcyAoYW5kIChzdHJpbmdwIGVyci10ZXh0 KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1tYXRjaC1wICJc XGBJbnZhbGlkIGZvcm1hdCAuKiUlIiBlcnItdGV4dCkpCisgICAgICAgICAgICAgICAgICAg ICAgZXJyKSkpCisgICAgICA7OyBNYWlsY2FwIGFsbG93cyAiJXQiIGZvciBNSU1FIHR5cGUs IGJ1dCBPcmcgaGFzIG5vIHN1Y2ggaW5mb3JtYXRpb24uCisgICAgICAobGV0KiAoKGVyciAo c2hvdWxkLWVycm9yCisgICAgICAgICAgICAgICAgICAgKGFuZCAoc3RyaW5nLW1hdGNoIHBh dHRlcm4gZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIChvcmctLW9wZW4tZmlsZS1m b3JtYXQtY29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICJwZXJjZW50LXQtdW5z dXBwb3J0ZWQgLS10eXBlICcldCcgJXMiIGZpbGUgZmlsZSAobWF0Y2gtZGF0YSkpKQorICAg ICAgICAgICAgICAgICAgIDp0eXBlICdlcnJvcikpCisgICAgICAgICAgICAgKGVyci10ZXh0 IChjYWRyIGVycikpKQorICAgICAgICAoc2hvdWxkLW5vdCAodW5sZXNzIChhbmQgKHN0cmlu Z3AgZXJyLXRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5n LW1hdGNoLXAgIlxcYEludmFsaWQgZm9ybWF0IC4qJXQiIGVyci10ZXh0KSkKKyAgICAgICAg ICAgICAgICAgICAgICBlcnIpKSkpCisgICAgOzsgT3B0aW9uYWwgcmVndWxhciBleHByZXNz aW9uIGdyb3VwcyBoYXZlIG5vIHBvaW50IGluIGBvcmctZmlsZS1hcHBzJyBwYXR0ZXJucy4K KyAgICAobGV0KiAoKGZpbGUgIi9lcnJvci5wZGYiKQorICAgICAgICAgICAobGluayAiL2Vy cm9yLnBkZjo6MSIpCisgICAgICAgICAgIChwYXR0ZXJuICJcXC5wZGY6OlxcKFteOl0rXFwp XFwoPzo6OlxcKC4rXFwpXFwpP1xcJyIpCisgICAgICAgICAgIChlcnIgKHNob3VsZC1lcnJv cgorICAgICAgICAgICAgICAgICAoYW5kIChzdHJpbmctbWF0Y2ggcGF0dGVybiBsaW5rKQor ICAgICAgICAgICAgICAgICAgICAgIChvcmctLW9wZW4tZmlsZS1mb3JtYXQtY29tbWFuZAor ICAgICAgICAgICAgICAgICAgICAgICAibm8tc3VjaC1tYXRjaCAtLXNlYXJjaCAlMiAlcyIg ZmlsZSBsaW5rIChtYXRjaC1kYXRhKSkpCisgICAgICAgICAgICAgICAgIDp0eXBlICdlcnJv cikpCisgICAgICAgICAgIChlcnItdGV4dCAoY2FkciBlcnIpKSkKKyAgICAgIChzaG91bGQt bm90ICh1bmxlc3MgKGFuZCAoc3RyaW5ncCBlcnItdGV4dCkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoc3RyaW5nLW1hdGNoLXAgIlxcYEludmFsaWQgZm9ybWF0LiolMiIg ZXJyLXRleHQpKQorICAgICAgICAgICAgICAgICAgICBlcnIpKSkpKQorCiAocHJvdmlkZSAn dGVzdC1vcmcpCiAKIDs7OyB0ZXN0LW9yZy5lbCBlbmRzIGhlcmUKLS0gCjIuMjUuMQoK --------------C0IieZsLcPZkV99ddFLX2qQc--