From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexandros Theodotou Subject: Packaging ZynFusion - what to do with ZynAddSubFX Date: Thu, 02 Apr 2020 17:22:38 +0100 Message-ID: Mime-Version: 1.0 Content-Type: multipart/signed; micalg="pgp-sha256"; protocol="application/pgp-signature"; boundary="=-WkQwSQmD23pPX2Y3i92d" Return-path: Received: from eggs.gnu.org ([2001:470:142:3::10]:35592) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jK2dE-0005RD-GL for guix-devel@gnu.org; Thu, 02 Apr 2020 12:23:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jK2dB-00018b-SV for guix-devel@gnu.org; Thu, 02 Apr 2020 12:23:51 -0400 Received: from mout01.posteo.de ([185.67.36.141]:42772) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jK2dB-0008OG-HF for guix-devel@gnu.org; Thu, 02 Apr 2020 12:23:49 -0400 Received: from submission (posteo.de [89.146.220.130]) by mout01.posteo.de (Postfix) with ESMTPS id F1B5116005C for ; Thu, 2 Apr 2020 18:22:45 +0200 (CEST) Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 48tSyq0f4Xz6tnH for ; Thu, 2 Apr 2020 18:22:42 +0200 (CEST) List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane-mx.org@gnu.org Sender: "Guix-devel" To: guix-devel@gnu.org --=-WkQwSQmD23pPX2Y3i92d Content-Type: multipart/mixed; boundary="=-VLGfwKGYEBHjcZhjA2B2" --=-VLGfwKGYEBHjcZhjA2B2 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Guix, I managed to build ZynFusion after some help from its developer (see attachment for the current working package definitions), but we have a small problem. ~ Background info ~ ZynFusion uses the exact same source code as ZynAddSubFX but passing a compilation flag enables a different, more modern-looking UI called "ZynFusion". In addition to stand-alone binaries, they both come as LV2 plugins. Each LV2 plugin is identified by its unique URI, and each plugin UI is also identified by a separate unique URI (usually in the form of #UI). Plugins can have multiple UIs, and there is usually 1 UI for each supported platform. ~ End background info ~ The problem appears when when you install both ZynFusion and ZynAddSubFX and you want to use them as plugins. If you only run their binary versions (bin/zynaddsubfx) there shouldn't be a problem, but when you attempt to open them as LV2 plugins, they currently use the same URI so hosts will ignore one of them since most hosts use the lilv library for detecting and loading plugins, which skips duplicates (I believe it is undefined which one gets skipped - I think only the first one found is used). Since plugins can have multiple UIs, we could patch zynaddsubfx to present itself as having 2 X11 UIs, one for zynfusion and one for its current one, however current hosts don't offer an option to choose a UI and simply choose whatever's found first. I believe this is the correct behavior - the users are usually musicians and plugin format stuff should be hidden as much as possible. Also, it is very rare for a plugin to have more than 1 UI on the same platform, so hosts usually just pick up whatever supported UI is found first. Anyway, there will be problems if we allow users to install both packages as-is, so here are our options as far as i can tell: a) Change the URI of the plugin itself so that it's different from ZynAddSubFX - this IMO is out of the question because presets won't be portable anymore as they are bound to a plugin's URI. b) Patch the plugin's turtle code to make it list both UIs as available. The problem with this is mentioned above - current hosts don't offer an option to choose a UI (and probably shouldn't) so one of them (undefined which one - depends on the host's logic) will be ignored. c) Deprecate zynaddsubfx - this will mean users will no longer be able to use the old UI if they prefer it, but it will probably be a good solution for the majority of users and no changes are required to guix d) Implement a "conflicts" variable in package definitions where you can list incompatible packages, so guix won't allow you to install zynfusion if you have zynaddsubfx installed, and vice versa. I am personally fine with either c/d, although I believe d) is the cleanest solution. Any suggestions welcome. Thanks, Alex --=-VLGfwKGYEBHjcZhjA2B2 Content-Disposition: attachment; filename="tmp.scm" Content-Type: text/x-scheme; name="tmp.scm"; charset="UTF-8" Content-Transfer-Encoding: base64 KGRlZmluZS1wdWJsaWMgbGlidXYtc3RhdGljCiAgKHBhY2thZ2UvaW5oZXJpdAogICBsaWJ1dgog ICAgKGFyZ3VtZW50cwogICAgICAnKCM6dGVzdHM/ICNmCiAgICAgICAgIzptYWtlLWZsYWdzIChs aXN0ICJDRkxBR1M9LWZQSUMiKSkpCiAgICh2ZXJzaW9uICIxLjkuMSIpKSkKCihkZWZpbmUtcHVi bGljIG1ydWJ5LXplc3QKICAocGFja2FnZQogICAgKG5hbWUgIm1ydWJ5LXplc3QiKQogICAgKHZl cnNpb24gIjMuMC41LWJhMzlhYWJkIikKICAgIChzb3VyY2UKICAgICAgKG9yaWdpbgogICAgICAg IChtZXRob2QgZ2l0LWZldGNoKQogICAgICAgICh1cmkgKGdpdC1yZWZlcmVuY2UKICAgICAgICAg ICAgICAgOzsgdGhpcyBpcyBhIG1ldGEgcmVwbyB0aGF0IHBhY2tzIHRoZSBtcnVieSBkZXBlbmRl bmNpZXMKICAgICAgICAgICAgICAgOzsgYXMgc3VibW9kdWxlcwogICAgICAgICAgICAgICAodXJs ICJodHRwczovL2dpdGh1Yi5jb20vbXJ1YnktemVzdC9tcnVieS16ZXN0LWJ1aWxkLmdpdCIpCiAg ICAgICAgICAgICAgIDs7IGdoYWN0aW9uIGJyYW5jaCAtIHN1Z2dlc3RlZCBieSB0aGUgZGV2ZWxv cGVyIHRvIGF2b2lkCiAgICAgICAgICAgICAgIDs7IGF1dG9tYXRpYyBkb3dubG9hZGluZyBvZiBz b21lIHVubmVlZGVkIGFuZAogICAgICAgICAgICAgICA7OyBoYXJkLXRvLXBhY2thZ2UgZGVwZW5k ZW5jaWVzIHVzZWQgb25seSBmb3IgZGVidWdnaW5nCiAgICAgICAgICAgICAgIChjb21taXQgICJi YTM5YWFiZDhkNGRkYzVmMTQxMzcwODNiNmY5YTk2YzUzNmY1ZjEyIikKICAgICAgICAgICAgICAg KHJlY3Vyc2l2ZT8gI3QpKSkKICAgICAgICAoZmlsZS1uYW1lIChnaXQtZmlsZS1uYW1lIG5hbWUg dmVyc2lvbikpCiAgICAgICAgKHNoYTI1NgogICAgICAgICAoYmFzZTMyCiAgICAgICAgICAiMXZx emRkczMwc3I5ODJkcDdmY2xnNHIxOWw0NHJ2OHBiejZoNGE4dmNnaW5qNDk0Z3ZqbiIpKSkpCiAg ICAoYnVpbGQtc3lzdGVtIGdudS1idWlsZC1zeXN0ZW0pCiAgICAoYXJndW1lbnRzCiAgICAgYCgj OnRlc3RzPyAjZiA7IG5vIGNoZWNrIHRhcmdldAogICAgICAgIzptYWtlLWZsYWdzCiAgICAgICAo bGlzdCAoc3RyaW5nLWFwcGVuZCAiQ0M9Z2NjIikpCiAgICAgICAjOnBoYXNlcwogICAgICAgKG1v ZGlmeS1waGFzZXMgJXN0YW5kYXJkLXBoYXNlcwogICAgICAgICAoYWRkLWFmdGVyICd1bnBhY2sg J3VzZS1pbnN0YWxsZWQtbGlidXYKICAgICAgICAgIChsYW1iZGEqICgjOmtleSBpbnB1dHMgb3V0 cHV0cyAjOmFsbG93LW90aGVyLWtleXMpCiAgICAgICAgICAgIChsZXQqICgobGlidXYgKGFzc29j LXJlZiBpbnB1dHMgImxpYnV2LXN0YXRpYyIpKSkKICAgICAgICAgICAgICAoY29weS1maWxlIChz dHJpbmctYXBwZW5kIGxpYnV2ICIvbGliL2xpYnV2LmEiKQogICAgICAgICAgICAgICAgICAgICAg ICAgImRlcHMvbGlidXYuYSIpCiAgICAgICAgICAgICAgKHN1YnN0aXR1dGUqICJNYWtlZmlsZSIK ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgiXFwuXFwuL1xcLlxcLi9kZXBzL1xcJFxcKFVW X0RJUlxcKS9pbmNsdWRlIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBw ZW5kIGxpYnV2ICIvaW5jbHVkZSIpKSkKICAgICAgICAgICAgICAoc3Vic3RpdHV0ZSogIk1ha2Vm aWxlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAoKCJcXC4vZGVwcy9cXCRcXChVVl9ESVJc XCkvXFwubGlicy9saWJ1dlxcLmEiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmlu Zy1hcHBlbmQgbGlidXYgIi9saWIvbGlidXYuYSIpKSkpKSkKICAgICAgICAgKGFkZC1hZnRlciAn dW5wYWNrICdkaXNhYmxlLXVudXNlZC1kZXBzCiAgICAgICAgICAobGFtYmRhIF8KICAgICAgICAg ICAgKHN1YnN0aXR1dGUqICJidWlsZF9jb25maWcucmIiCiAgICAgICAgICAgICAgICAgICAgICAg ICAoKCJjb25mXFwuZ2VtICdkZXBzL21ydWJ5LWZpbGUtc3RhdCciKQogICAgICAgICAgICAgICAg ICAgICAgICAgICIjIikpCiAgICAgICAgICAgIChzdWJzdGl0dXRlKiAiZGVwcy9tcnVieS1kaXIt Z2xvYi9tcmJnZW0ucmFrZSIKICAgICAgICAgICAgICAgICAgICAgICAgICgoInNwZWNcXC5hZGRf ZGVwZW5kZW5jeSAnbXJ1YnktZmlsZS1zdGF0JyIpCiAgICAgICAgICAgICAgICAgICAgICAgICAg IiMiKSkKICAgICAgICAgICAgI3QpKQogICAgICAgICAocmVwbGFjZSAnY29uZmlndXJlCiAgICAg ICAgICAgKGxhbWJkYSBfCiAgICAgICAgICAgICAoaW52b2tlICJtYWtlIiAiYnVpbGRkZXAiKSkp CiAgICAgICAgKGFkZC1iZWZvcmUgJ2luc3RhbGwgJ3BhY2sKICAgICAgICAgIChsYW1iZGEgXwog ICAgICAgICAgICAoc2V0ZW52ICJDQyIgImdjYyIpCiAgICAgICAgICAgIChpbnZva2UgIm1ha2Ui ICJwYWNrIikpKQogICAgICAgICAocmVwbGFjZSAnaW5zdGFsbAogICAgICAgICAgIChsYW1iZGEq ICgjOmtleSBpbnB1dHMgb3V0cHV0cyAjOmFsbG93LW90aGVyLWtleXMpCiAgICAgICAgICAgICAo bGV0KiAoKG91dCAgIChhc3NvYy1yZWYgb3V0cHV0cyAib3V0IikpCiAgICAgICAgICAgICAgICAg ICAgKGxpYiAgIChzdHJpbmctYXBwZW5kIG91dCAiL2xpYi96eW5mdXNpb24iKSkpCiAgICAgICAg ICAgICAgIChta2Rpci1wIGxpYikKICAgICAgICAgICAgICAgKGNvcHktcmVjdXJzaXZlbHkgInBh Y2thZ2UiIGxpYikKICAgICAgICAgICAgICAgI3QpKSkKICAgICAgICAgKGFkZC1hZnRlciAnaW5z dGFsbCAncmVuYW1lLXRvLXp5bi1mdXNpb24KICAgICAgICAgICAobGFtYmRhKiAoIzprZXkgaW5w dXRzIG91dHB1dHMgIzphbGxvdy1vdGhlci1rZXlzKQogICAgICAgICAgICAgKGxldCogKChvdXQg KGFzc29jLXJlZiAlb3V0cHV0cyAib3V0IikpCiAgICAgICAgICAgICAgICAgICAgKGxpYiAoc3Ry aW5nLWFwcGVuZCBvdXQgIi9saWIvenluZnVzaW9uIikpKQogICAgICAgICAgICAgICAocmVuYW1l LWZpbGUgKHN0cmluZy1hcHBlbmQgbGliICIvemVzdCIpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoc3RyaW5nLWFwcGVuZCBsaWIgIi96eW4tZnVzaW9uIikpCiAgICAgICAgICAgICAgICN0 KSkpKSkpCiAgICAoaW5wdXRzCiAgICAgYCgoImxpYngxMSIgLGxpYngxMSkKICAgICAgICgiY2Fp cm8iICxjYWlybykKICAgICAgICgibWVzYSIgLG1lc2EpCiAgICAgICAoImxpYnV2LXN0YXRpYyIg LGxpYnV2LXN0YXRpYykKICAgICAgICgicnVieSIgLHJ1YnkpCiAgICAgICAoIm1ydWJ5IiAsbXJ1 YnkpKSkKICAgIChuYXRpdmUtaW5wdXRzCiAgICAgYCgoInBrZy1jb25maWciICxwa2ctY29uZmln KQogICAgICAgKCJiaXNvbiIgLGJpc29uKQogICAgICAgKCJhdXRvY29uZiIgLGF1dG9jb25mKQog ICAgICAgKCJhdXRvbWFrZSIgLGF1dG9tYWtlKQogICAgICAgKCJsaWJ0b29sIiAsbGlidG9vbCkK ICAgICAgICgicHl0aG9uLTIiICxweXRob24tMikpKQogICAgKGhvbWUtcGFnZSAiaHR0cHM6Ly9n aXRodWIuY29tL21ydWJ5LXplc3QvbXJ1YnktemVzdCIpCiAgICAoc3lub3BzaXMgIldpZGdldCBj bGFzc2VzIGZvciBaeW5GdXNpb24iKQogICAgKGRlc2NyaXB0aW9uCiAgICAgIk1SdWJ5LVplc3Qg aXMgYSBzZXQgb2Ygd2lkZ2V0cyBuZWVkZWQgdG8gY3JlYXRlIHRoZSAnWnluRnVzaW9uJwp1c2Vy IGludGVyZmFjZSBvZiBaeW5BZGRTdWJGWC4iKQogICAgKGxpY2Vuc2UgbGljZW5zZTpsZ3BsMi4x KykpKQoKKGRlZmluZS1wdWJsaWMgenluYWRkc3ViZngKICAocGFja2FnZQogICAgKG5hbWUgInp5 bmFkZHN1YmZ4IikKICAgICh2ZXJzaW9uICIzLjAuNSIpCiAgICAoc291cmNlIChvcmlnaW4KICAg ICAgICAgICAgICAobWV0aG9kIHVybC1mZXRjaCkKICAgICAgICAgICAgICAodXJpIChzdHJpbmct YXBwZW5kCiAgICAgICAgICAgICAgICAgICAgIm1pcnJvcjovL3NvdXJjZWZvcmdlL3p5bmFkZHN1 YmZ4L3p5bmFkZHN1YmZ4LyIKICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uICIvenluYWRkc3Vi ZngtIiB2ZXJzaW9uICIudGFyLmJ6MiIpKQogICAgICAgICAgICAgIChzaGEyNTYKICAgICAgICAg ICAgICAgKGJhc2UzMgogICAgICAgICAgICAgICAgIjBxd3pnMTRoMDQzcm15ZjlqcWR5bHhoeWZ5 NHNsMHZzcjBnanFsNTF3amhpZDBpMzRpdmwiKSkpKQogICAgKGJ1aWxkLXN5c3RlbSBjbWFrZS1i dWlsZC1zeXN0ZW0pCiAgICAoYXJndW1lbnRzCiAgICAgYCgjOnBoYXNlcwogICAgICAgKG1vZGlm eS1waGFzZXMgJXN0YW5kYXJkLXBoYXNlcwogICAgICAgICA7OyBNb3ZlIFNTRSBjb21waWxlciBv cHRpbWl6YXRpb24gZmxhZ3MgZnJvbSBnZW5lcmljIHRhcmdldCB0bwogICAgICAgICA7OyBhdGhs b242NCBhbmQgY29yZTIgdGFyZ2V0cywgYmVjYXVzZSBvdGhlcndpc2UgdGhlIGJ1aWxkIHdvdWxk IGZhaWwKICAgICAgICAgOzsgb24gbm9uLUludGVsIG1hY2hpbmVzLgogICAgICAgICAoYWRkLWFm dGVyICd1bnBhY2sgJ3JlbW92ZS1zc2UtZmxhZ3MtZnJvbS1nZW5lcmljLXRhcmdldAogICAgICAg ICAgKGxhbWJkYSBfCiAgICAgICAgICAgIChzdWJzdGl0dXRlKiAic3JjL0NNYWtlTGlzdHMudHh0 IgogICAgICAgICAgICAgICgoIi1tc3NlIC1tc3NlMiAtbWZwbWF0aD1zc2UiKSAiIikKICAgICAg ICAgICAgICAoKCItbWFyY2g9KGF0aGxvbjY0fGNvcmUyKSIgZmxhZykKICAgICAgICAgICAgICAg KHN0cmluZy1hcHBlbmQgZmxhZyAiIC1tc3NlIC1tc3NlMiAtbWZwbWF0aD1zc2UiKSkpCiAgICAg ICAgICAgICN0KSkpKSkKICAgIChpbnB1dHMKICAgICBgKCgibGlibG8iICxsaWJsbykKICAgICAg ICgibnRrIiAsbnRrKQogICAgICAgKCJtZXNhIiAsbWVzYSkKICAgICAgICgiYWxzYS1saWIiICxh bHNhLWxpYikKICAgICAgICgiamFjayIgLGphY2stMSkKICAgICAgICgiZmZ0dyIgLGZmdHcpCiAg ICAgICAoIm1pbml4bWwiICxtaW5peG1sKQogICAgICAgKCJsaWJ4cG0iICxsaWJ4cG0pCiAgICAg ICAoInpsaWIiICx6bGliKSkpCiAgICAobmF0aXZlLWlucHV0cwogICAgIGAoKCJwa2ctY29uZmln IiAscGtnLWNvbmZpZykpKQogICAgKGhvbWUtcGFnZSAiaHR0cDovL3p5bmFkZHN1YmZ4LnNmLm5l dC8iKQogICAgKHN5bm9wc2lzICJTb2Z0d2FyZSBzeW50aGVzaXplciIpCiAgICAoZGVzY3JpcHRp b24KICAgICAiWnluQWRkU3ViRlggaXMgYSBmZWF0dXJlIGhlYXZ5IHJlYWx0aW1lIHNvZnR3YXJl IHN5bnRoZXNpemVyLiAgSXQgb2ZmZXJzCnRocmVlIHN5bnRoZXNpemVyIGVuZ2luZXMsIG11bHRp dGltYnJhbCBhbmQgcG9seXBob25pYyBzeW50aHMsIG1pY3JvdG9uYWwKY2FwYWJpbGl0aWVzLCBj dXN0b20gZW52ZWxvcGVzLCBlZmZlY3RzLCBldGMuIikKICAgIChsaWNlbnNlIGxpY2Vuc2U6Z3Bs MispKSkKCihkZWZpbmUtcHVibGljIHp5bmZ1c2lvbgogIChwYWNrYWdlL2luaGVyaXQgenluYWRk c3ViZngKICAgIChuYW1lICJ6eW5mdXNpb24iKQogICAgKGFyZ3VtZW50cwogICAgIGAoIzpjb25m aWd1cmUtZmxhZ3MKICAgICAgIDs7IEVuYWJsZSBaeW5GdXNpb24gbW9kZQogICAgICAgJygiLURH dWlNb2R1bGU9emVzdCIgIi1ERGVtb01vZGU9ZmFsc2UiKQogICAgICAgIzpwaGFzZXMKICAgICAg IChtb2RpZnktcGhhc2VzICVzdGFuZGFyZC1waGFzZXMKICAgICAgICAgOzsgTW92ZSBTU0UgY29t cGlsZXIgb3B0aW1pemF0aW9uIGZsYWdzIGZyb20gZ2VuZXJpYyB0YXJnZXQgdG8KICAgICAgICAg OzsgYXRobG9uNjQgYW5kIGNvcmUyIHRhcmdldHMsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBidWls ZCB3b3VsZCBmYWlsCiAgICAgICAgIDs7IG9uIG5vbi1JbnRlbCBtYWNoaW5lcy4KICAgICAgICAg KGFkZC1hZnRlciAndW5wYWNrICdyZW1vdmUtc3NlLWZsYWdzLWZyb20tZ2VuZXJpYy10YXJnZXQK ICAgICAgICAgIChsYW1iZGEgXwogICAgICAgICAgICAoc3Vic3RpdHV0ZSogInNyYy9DTWFrZUxp c3RzLnR4dCIKICAgICAgICAgICAgICAoKCItbXNzZSAtbXNzZTIgLW1mcG1hdGg9c3NlIikgIiIp CiAgICAgICAgICAgICAgKCgiLW1hcmNoPShhdGhsb242NHxjb3JlMikiIGZsYWcpCiAgICAgICAg ICAgICAgIChzdHJpbmctYXBwZW5kIGZsYWcgIiAtbXNzZSAtbXNzZTIgLW1mcG1hdGg9c3NlIikp KQogICAgICAgICAgICAjdCkpCiAgICAgICAgIDs7IE1vZGlmeSB6ZXN0IHBhdGggc28gdGhhdCB0 aGUgWnluRnVzaW9uIFVJIGNhbiBiZSBmb3VuZAogICAgICAgICAoYWRkLWFmdGVyICd1bnBhY2sg J3BhdGNoLXplc3QtcGF0aAogICAgICAgICAgIChsYW1iZGEqICgjOmtleSBpbnB1dHMgb3V0cHV0 cyAjOmFsbG93LW90aGVyLWtleXMpCiAgICAgICAgICAgICAobGV0ICgoemVzdCAoYXNzb2MtcmVm IGlucHV0cyAibXJ1YnktemVzdCIpKQogICAgICAgICAgICAgICAgICAgKG91dCAoYXNzb2MtcmVm ICVvdXRwdXRzICJvdXQiKSkpCiAgICAgICAgICAgICAgKHN1YnN0aXR1dGUqICJzcmMvUGx1Z2lu L1p5bkFkZFN1YkZYL1p5bkFkZFN1YkZYLVVJLVplc3QuY3BwIgogICAgICAgICAgICAgICAgICAg ICAgICAgICAoKCJcXC4vbGliemVzdFxcLnNvIikKICAgICAgICAgICAgICAgICAgICAgICAgICAg IChzdHJpbmctYXBwZW5kIHplc3QgIi9saWIvenluZnVzaW9uL2xpYnplc3Quc28iKSkpCiAgICAg ICAgICAgICAgKHN1YnN0aXR1dGUqICJzcmMvbWFpbi5jcHAiCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICgoIlxcLi96eW4tZnVzaW9uIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz dHJpbmctYXBwZW5kIHplc3QgIi9saWIvenluZnVzaW9uL3p5bi1mdXNpb24iKSkpCiAgICAgICAg ICAgICAgKHN1YnN0aXR1dGUqICJzcmMvbWFpbi5jcHAiCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICgoIlxcXCJ6eW4tZnVzaW9uXFxcIiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAo c3RyaW5nLWFwcGVuZCAiXCIiIHplc3QgIi9saWIvenluZnVzaW9uL3p5bi1mdXNpb25cIiIpKSkK ICAgICAgICAgICAgICAgI3QpKSkKICAgICAgICAgOzsgUmVuYW1lIHRvIFp5bkZ1c2lvbiBzbyBp dCBjYW4gY28tZXhpc3Qgd2l0aCB0aGUgb2xkZXIgVUkKICAgICAgICAgKGFkZC1hZnRlciAnaW5z dGFsbCAncmVuYW1lLXRvLXp5bi1mdXNpb24KICAgICAgICAgICAobGFtYmRhKiAoIzprZXkgaW5w dXRzIG91dHB1dHMgIzphbGxvdy1vdGhlci1rZXlzKQogICAgICAgICAgICAgKGxldCogKChvdXQg KGFzc29jLXJlZiAlb3V0cHV0cyAib3V0IikpCiAgICAgICAgICAgICAgICAgICAgKGJpbiAoc3Ry aW5nLWFwcGVuZCBvdXQgIi9iaW4iKSkKICAgICAgICAgICAgICAgICAgICAoc2hhcmUgKHN0cmlu Zy1hcHBlbmQgb3V0ICIvc2hhcmUiKSkpCiAgICAgICAgICAgICAgIChyZW5hbWUtZmlsZSAoc3Ry aW5nLWFwcGVuZCBiaW4gIi96eW5hZGRzdWJmeCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoc3RyaW5nLWFwcGVuZCBiaW4gIi96eW5mdXNpb24iKSkKICAgICAgICAgICAgICAgKHN1YnN0 aXR1dGUqIChmaW5kLWZpbGVzIChzdHJpbmctYXBwZW5kIHNoYXJlICIvYXBwbGljYXRpb25zIikK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcXC5kZXNrdG9wJCIpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoKCJFeGVjPXp5bmFkZHN1YmZ4IikKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiRXhlYz16eW5mdXNpb24iKSkKICAgICAgICAgICAgICAgI3Qp KSkpKSkKICAgIChpbnB1dHMKICAgICBgKCgiYWxzYS1saWIiICxhbHNhLWxpYikKICAgICAgICgi Y2Fpcm8iICxjYWlybykKICAgICAgICgiZmZ0dyIgLGZmdHcpCiAgICAgICAoImphY2siICxqYWNr LTEpCiAgICAgICAoImxpYmxvIiAsbGlibG8pCiAgICAgICAoImxpYnhwbSIgLGxpYnhwbSkKICAg ICAgICgibWVzYSIgLG1lc2EpCiAgICAgICAoIm1pbml4bWwiICxtaW5peG1sKQogICAgICAgKCJt cnVieS16ZXN0IiAsbXJ1YnktemVzdCkKICAgICAgICgicnVieSIgLHJ1YnkpCiAgICAgICAoInps aWIiICx6bGliKSkpCiAgICAoZGVzY3JpcHRpb24KICAgICAiWnluRnVzaW9uIGlzIGFuIGFsdGVy bmF0aXZlLCBtb2Rlcm4gVUkgZm9yIHRoZSBaeW5BZGRTdWJGWApzeW50aGVzaXplci4iKSkpCgo= --=-VLGfwKGYEBHjcZhjA2B2-- --=-WkQwSQmD23pPX2Y3i92d Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEESBMjhK0999huJUuDAi6uQjE9cPMFAl6GEU4ACgkQAi6uQjE9 cPOlNwf/YNXlJxKkZdE8X85Wsp67IU1rCQM7EIXNOlLr8E6JAM+DKn0T9TFuPgKV wEo4LrbjqCO2Nheem7UkP8IIK8U0PrPyyWVX4WcUNzaQqHB2G7ntNRQUGI/fzHRw zhThGwi1KSeYM7iE6BIfpyMfV+XnffefqdTepFCaq6GQUWgYdrxWswd/XLFvEQh2 CUdZ2Ma9Wq533L0yfXsdz+OgJ1qVcNmNG96T3ydu62Cie1HqcCYDnDI8ddtuwcYv 3PqoAobmlrk7H23bPd+Hk0H6YoA6t94/oe10aYsjUHVcUV3y048UtgLH/yyM7AXX O5/sxOT8K1z+8tyatJsvy/p2uQVnHA== =hE2y -----END PGP SIGNATURE----- --=-WkQwSQmD23pPX2Y3i92d--