From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Freja Nordsiek Newsgroups: gmane.lisp.guile.bugs Subject: bug#24657: Autoconf macro GUILE_PROGS only looks for guile without version suffix even if given version - patch included Date: Mon, 10 Oct 2016 16:45:21 +0700 Message-ID: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a11c364d064bc2e053e7f9e62 X-Trace: blaine.gmane.org 1476113794 24325 195.159.176.226 (10 Oct 2016 15:36:34 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Mon, 10 Oct 2016 15:36:34 +0000 (UTC) To: 24657@debbugs.gnu.org Original-X-From: bug-guile-bounces+guile-bugs=m.gmane.org@gnu.org Mon Oct 10 17:36:30 2016 Return-path: Envelope-to: guile-bugs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1btccT-0002vg-HJ for guile-bugs@m.gmane.org; Mon, 10 Oct 2016 17:36:01 +0200 Original-Received: from localhost ([::1]:50862 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1btccS-0005WH-4Z for guile-bugs@m.gmane.org; Mon, 10 Oct 2016 11:36:00 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:58721) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1btcN2-0000zF-Oz for bug-guile@gnu.org; Mon, 10 Oct 2016 11:20:06 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1btcN0-0003Il-0E for bug-guile@gnu.org; Mon, 10 Oct 2016 11:20:03 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:45170) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1btcMz-0003Ih-Sr for bug-guile@gnu.org; Mon, 10 Oct 2016 11:20:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1btcMz-0002OR-Pl for bug-guile@gnu.org; Mon, 10 Oct 2016 11:20:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Freja Nordsiek Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Mon, 10 Oct 2016 15:20:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 24657 X-GNU-PR-Package: guile X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-guile@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.14761127719147 (code B ref -1); Mon, 10 Oct 2016 15:20:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 10 Oct 2016 15:19:31 +0000 Original-Received: from localhost ([127.0.0.1]:51358 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1btcMU-0002NT-H6 for submit@debbugs.gnu.org; Mon, 10 Oct 2016 11:19:31 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:42112) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1btX9O-0007n0-C7 for submit@debbugs.gnu.org; Mon, 10 Oct 2016 05:45:38 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1btX9H-0007qV-AT for submit@debbugs.gnu.org; Mon, 10 Oct 2016 05:45:33 -0400 Original-Received: from lists.gnu.org ([2001:4830:134:3::11]:54206) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1btX9H-0007pz-1f for submit@debbugs.gnu.org; Mon, 10 Oct 2016 05:45:31 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:33065) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1btX9D-0003of-Qf for bug-guile@gnu.org; Mon, 10 Oct 2016 05:45:29 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1btX9A-0007nN-P3 for bug-guile@gnu.org; Mon, 10 Oct 2016 05:45:26 -0400 Original-Received: from mail-lf0-x233.google.com ([2a00:1450:4010:c07::233]:33944) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1btX9A-0007mp-Ca for bug-guile@gnu.org; Mon, 10 Oct 2016 05:45:24 -0400 Original-Received: by mail-lf0-x233.google.com with SMTP id b81so116672683lfe.1 for ; Mon, 10 Oct 2016 02:45:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to; bh=IRYHuU5LhgqXG7UFElnBN3Gn26jKZ6MiHqGtQdsJC7A=; b=tH8HMum1S2ltpnbntwvuwZGCqZuXjO5EZGsnzNnVvry3gNQ41nhWe+qQX47j6Oq3Wh 7Zl9LA2MjEDa/qKe8gPDgE8fZ5h0X1ZBgemzauNkk4hCBHwa+HrwAZek20/RU53QmB45 CNe/9iI5/Lf0Nw15hXWZFgMEZLEPNuidUJ9yrIHNQnDs4+Bj4Qn0DqSXKeV39wo857Xo OkCSwamRlpSdq+9OlLkXRj2ahuHEX7vNSFEI6ThjPQ1/+YuIlJTUzpggSmUGgNvKoCj2 xyY9OCKta9jcZ3gmADYryoOkKHZoFOYh/paIthGABxDwqS4DM1v8eWKvZ0Pf++w2yBFh ehgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=IRYHuU5LhgqXG7UFElnBN3Gn26jKZ6MiHqGtQdsJC7A=; b=dd9hI8y3I1s9p1PJXzY3ISziyiFGN9LL5UYS0Yv7nLMpXclbQH/rAHz0xYqyj0A+3E /A0fGjq7REZyerctsnEj3mTJlGq4n04X4R85iH5s0bF78257o2n0n3uRXUn8GcFy404a Nrh2MceMgGc1YnmJvyyAppY5wT0fHQAFuF5FeHvALcgFFR20uUl5h5inTEm3KOTeRDRH eiG7D1qqAKga9+tsp5Km7aY8IdaxZT2/VqR/OvKk9uFSJbUiX74cnsM5utRCYK8BkRbW 89WDNtyyQ3MXzIkyJRJjPcwByvca+Yiq4lfDGBvcUy3QIcEu4aC0K56y75crioPfDHWS LyTQ== X-Gm-Message-State: AA6/9RmdYY2i+3XJtSDCYfrsOYS0GQINx5+R4GCwM6/bbBjSrUDvMoWmtHHU61Mcx/JVzQphRIHE1FvAJOK/lA== X-Received: by 10.194.129.137 with SMTP id nw9mr35265413wjb.13.1476092722708; Mon, 10 Oct 2016 02:45:22 -0700 (PDT) Original-Received: by 10.28.232.139 with HTTP; Mon, 10 Oct 2016 02:45:21 -0700 (PDT) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Mailman-Approved-At: Mon, 10 Oct 2016 11:19:29 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-guile@gnu.org List-Id: "Bug reports for GUILE, GNU's Ubiquitous Extension Language" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guile-bounces+guile-bugs=m.gmane.org@gnu.org Original-Sender: "bug-guile" Xref: news.gmane.org gmane.lisp.guile.bugs:8420 Archived-At: --001a11c364d064bc2e053e7f9e62 Content-Type: text/plain; charset=UTF-8 While trying to build a package that uses guile with autotools, I found a problem in the provided GUILE_PROGS macro. The macro searches for the executables guile, guild, guile-config, and guile-tools. The problem is that even if the macro is given the version, it only looks for guile, guild, etc. with no version suffix. Version suffixes are commonly used by GNU/Linux distros to allow parallel installations of guile 1.8 and 2.0 (and 2.2 if it is there as well). Though typically one of them, whichever the distro considers to be primary, will have no suffix and will be just plain suffixless guile, guild, etc. I installed 2.1.4 (effective version 2.2) from source with the suffix '-2.2' to use the same style and not risk collisions with the guile already on my system (2.0 is the default). I imagine that others may do this sort of thing as well. Anyhow, GUILE_PROGS looks for suffixless guile and then compares its effective version to what was provided as an argument or set in the variable GUILE_EFFECTIVE_VERSION earlier by the GUILE_PKG macro. On a system with parallel guile installations with use of version suffixes, this means that the desired version of guile cannot be targetted unless that one happens to be suffixless (or have a suffixless symlink). If there is no suffixless guile, then the macro fails outright. If there is one and it is pointing to a version different than given as an argument or through the variable GUILE_EFFECTIVE_VERSION, it throws an error. For example, on my system (Fedora 24), guile 2.0 is installed without suffix and with a 'guile2' symlink by a package from the main repository. I have installed the latest version of guile using the sources on the git (2.1.4) in parallel using the suffix '-2.2' meaning its guile executable is 'guile-2.2'. If I use autoconf with the provided guile.m4 in the same directory as the following configure.ac looking for guile 2.2 with GUILE_PROGS AC_INIT([guile_autoconf_test], [0.1], []) m4_include([guile.m4]) GUILE_PROGS([2.2]) AC_OUTPUT I get the following output from the resulting configure script checking for guile... /usr/bin/guile checking for Guile version >= 2.2... configure: error: Guile 2.2 required, but 2.0.11 found If I instead run GUILE_PKG first and use the GUILE_EFFECTIVE_VERSION set by it AC_INIT([guile_autoconf_test], [0.1], []) m4_include([guile.m4]) GUILE_PKG([2.2]) GUILE_PROGS dnl Get the same results if I do GUILE_PROGS([2.2]) AC_OUTPUT I get a similar error from the configure script checking for pkg-config... /usr/bin/pkg-config checking pkg-config is at least version 0.9.0... yes configure: checking for guile 2.2 configure: found guile 2.2 checking for guile... /usr/bin/guile configure: error: found development files for Guile 2.2, but /usr/bin/guile has effective version 2.0 Looking at the beginning of the GUILE_PROGS macro in guile.m4 from guile 2.1.4 AC_DEFUN([GUILE_PROGS], [AC_PATH_PROG(GUILE,guile) _guile_required_version="m4_default([$1], [$GUILE_EFFECTIVE_VERSION])" if test -z "$_guile_required_version"; then _guile_required_version=2.0 fi if test "$GUILE" = "" ; then AC_MSG_ERROR([guile required but not found]) fi AC_SUBST(GUILE) The problem comes from AC_PATH_PROG(GUILE,guile) in the very first line and then the error 5 and 6 lines below it when it fails. Further on in the macro, if guile is found, it checks its version against the provided version or against 2.0. I've written a patch that makes GUILE_PROGS first look for the specified version (or default version) of guile first with the version suffix '-X.Y', and if that fails looks for it with the version suffix 'X.Y' (no dash, unlike the first one), and if that fails looks for it without any version suffix. If it finds guile in this way, it then compares the versions. The patched version then uses the same suffix (or lack there of) when finding guild, guile-config, and guile-tools. I've attached the patch against the current development version of guile (well, assuming someone hasn't committed in the last half hour). It changes the macro and updated the documentation as well (the documentation builds successfully). The beginning of the GUILE_PROGS macro is changed to AC_DEFUN([GUILE_PROGS], [_guile_required_version="m4_default([$1], [$GUILE_EFFECTIVE_VERSION])" if test -z "$_guile_required_version"; then _guile_required_version=2.0 fi _guile_suffix=-$_guile_required_version AC_PATH_PROG(GUILE,[guile$_guile_suffix]) if test "$GUILE" = "" ; then _guile_suffix=$_guile_required_version AC_PATH_PROG(GUILE,[guile$_guile_suffix]) if test "$GUILE" = "" ; then _guile_suffix= AC_PATH_PROG(GUILE,[guile$_guile_suffix]) if test "$GUILE" = "" ; then AC_MSG_ERROR([guile required but not found]) fi fi fi AC_SUBST(GUILE) Then, the previous configure.ac except with the new autoconf macro file named new_guile.m4 AC_INIT([guile_autoconf_test], [0.1], []) m4_include([new_guile.m4]) GUILE_PKG([2.2]) GUILE_PROGS AC_OUTPUT The configure script succeeds at finding guile 2.2 checking for pkg-config... /usr/bin/pkg-config checking pkg-config is at least version 0.9.0... yes configure: checking for guile 2.2 configure: found guile 2.2 checking for guile-2.2... /usr/local/bin/guile-2.2 checking for Guile version >= 2.2... 2.1.4 checking for guild-2.2... /usr/local/bin/guild-2.2 checking for guile-config-2.2... /usr/local/bin/guile-config-2.2 configure: creating ./config.status If configure.ac is changed to not use GUILE_PKG and look for guile 1.8, which is not on my system, AC_INIT([guile_autoconf_test], [0.1], []) m4_include([new_guile.m4]) GUILE_PROGS([1.8]) AC_OUTPUT The configure tries to find guile-1.8 and then guile1.8 unsuccessfully. It then finds guile, whose version (2.0) is at least 1.8 so configure considers that a success (whether that would be considered a bug or a feature is up for debate but that is for another time). checking for guile-1.8... no checking for guile1.8... no checking for guile... /usr/bin/guile checking for Guile version >= 1.8... 2.0.11 checking for guild... /usr/bin/guild checking for guile-config... /usr/bin/guile-config configure: creating ./config.status An alternative way to fix the issue would be to instead make GUILE_PROGS take one or more arbitrary suffixes to try as inputs. Another alternative would be to look for all executables that begin with the string 'guile' and check the version of each one till one is successful. The latter one seems like it would take quite a bit of work to implement and test. Freja Nordsiek --001a11c364d064bc2e053e7f9e62 Content-Type: text/x-patch; charset=US-ASCII; name="0001-Fixed-specific-version-of-guile-search-in-autoconf-m.patch" Content-Disposition: attachment; filename="0001-Fixed-specific-version-of-guile-search-in-autoconf-m.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iu3vcovn0 RnJvbSA3ZTZkOGQ5ODllNTc3OGUyNTA4ZjFjZTYyMzVhODgzNzY0ZmFkZDMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVqYSBOb3Jkc2llayA8Zm5vcmRzaWVAZ21haWwuY29tPgpE YXRlOiBNb24sIDEwIE9jdCAyMDE2IDE1OjUwOjE5ICswNzAwClN1YmplY3Q6IFtQQVRDSF0gRml4 ZWQgc3BlY2lmaWMgdmVyc2lvbiBvZiBndWlsZSBzZWFyY2ggaW4gYXV0b2NvbmYgbWFjcm8KIEdV SUxFX1BST0dTLgoKKiBtZXRhL2d1aWxlLm00IChHVUlMRV9QUk9HUyk6ClNlYXJjaCBmb3IgZ3Vp bGUgd2l0aCBzdWZmaXhlcyBmaXJzdCAoJy1YLlknIGFuZCAnWC5ZJyB3aGVyZSBYLlkgZGVub3Rl cwp0aGUgdmVyc2lvbikgYmVmb3JlIHNlYXJjaGluZyBmb3IgZ3VpbGUgd2l0aCBubyBzdWZmaXgu Ci0tLQogbWV0YS9ndWlsZS5tNCB8IDI4ICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIDEg ZmlsZSBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL21ldGEvZ3VpbGUubTQgYi9tZXRhL2d1aWxlLm00CmluZGV4IDlmZDRmMWEuLjZkNjliYjkg MTAwNjQ0Ci0tLSBhL21ldGEvZ3VpbGUubTQKKysrIGIvbWV0YS9ndWlsZS5tNApAQCAtMTgxLDcg KzE4MSwxMiBAQCBBQ19ERUZVTihbR1VJTEVfU0lURV9ESVJdLAogIwogIyBUaGlzIG1hY3JvIGxv b2tzIGZvciBwcm9ncmFtcyBAY29kZXtndWlsZX0gYW5kIEBjb2Rle2d1aWxkfSwgc2V0dGluZwog IyB2YXJpYWJsZXMgQHZhcntHVUlMRX0gYW5kIEB2YXJ7R1VJTER9IHRvIHRoZWlyIHBhdGhzLCBy ZXNwZWN0aXZlbHkuCi0jIElmIEBjb2Rle2d1aWxlfSBpcyBub3QgZm91bmQsIHNpZ25hbCBhbiBl cnJvci4KKyMgVGhlIG1hY3JvIHdpbGwgYXR0ZW1wdCB0byBmaW5kIEBjb2Rle2d1aWxlfSB3aXRo IHRoZSBzdWZmaXggb2YKKyMgQGNvZGV7LVguWX0sIGZvbGxvd2VkIGJ5IGxvb2tpbmcgZm9yIGl0 IHdpdGggdGhlIHN1ZmZpeCBAY29kZXtYLll9LCBhbmQKKyMgdGhlbiBmYWxsIGJhY2sgdG8gbG9v a2luZyBmb3IgQGNvZGV7Z3VpbGV9IHdpdGggbm8gc3VmZml4LiBJZgorIyBAY29kZXtndWlsZX0g aXMgc3RpbGwgbm90IGZvdW5kLCBzaWduYWwgYW4gZXJyb3IuIFRoZSBzdWZmaXgsIGlmIGFueSwK KyMgdGhhdCB3YXMgcmVxdWlyZWQgdG8gZmluZCBAY29kZXtndWlsZX0gd2lsbCBiZSB1c2VkIGZv ciBAY29kZXtndWlsZH0KKyMgYXMgd2VsbC4KICMKICMgQnkgZGVmYXVsdCwgdGhpcyBtYWNybyB3 aWxsIHNlYXJjaCBmb3IgdGhlIGxhdGVzdCBzdGFibGUgdmVyc2lvbiBvZgogIyBHdWlsZSAoZS5n LiAyLjApLiB4Lnkgb3IgeC55LnogdmVyc2lvbnMgY2FuIGJlIHNwZWNpZmllZC4gSWYgYW4gb2xk ZXIKQEAgLTE5OCwxMyArMjAzLDIyIEBAIEFDX0RFRlVOKFtHVUlMRV9TSVRFX0RJUl0sCiAjIFRo ZSB2YXJpYWJsZXMgYXJlIG1hcmtlZCBmb3Igc3Vic3RpdHV0aW9uLCBhcyBieSBAY29kZXtBQ19T VUJTVH0uCiAjCiBBQ19ERUZVTihbR1VJTEVfUFJPR1NdLAotIFtBQ19QQVRIX1BST0coR1VJTEUs Z3VpbGUpCi0gIF9ndWlsZV9yZXF1aXJlZF92ZXJzaW9uPSJtNF9kZWZhdWx0KFskMV0sIFskR1VJ TEVfRUZGRUNUSVZFX1ZFUlNJT05dKSIKKyBbX2d1aWxlX3JlcXVpcmVkX3ZlcnNpb249Im00X2Rl ZmF1bHQoWyQxXSwgWyRHVUlMRV9FRkZFQ1RJVkVfVkVSU0lPTl0pIgogICBpZiB0ZXN0IC16ICIk X2d1aWxlX3JlcXVpcmVkX3ZlcnNpb24iOyB0aGVuCiAgICAgX2d1aWxlX3JlcXVpcmVkX3ZlcnNp b249Mi4wCiAgIGZpCisgIF9ndWlsZV9zdWZmaXg9LSRfZ3VpbGVfcmVxdWlyZWRfdmVyc2lvbgor ICBBQ19QQVRIX1BST0coR1VJTEUsW2d1aWxlJF9ndWlsZV9zdWZmaXhdKQogICBpZiB0ZXN0ICIk R1VJTEUiID0gIiIgOyB0aGVuCi0gICAgICBBQ19NU0dfRVJST1IoW2d1aWxlIHJlcXVpcmVkIGJ1 dCBub3QgZm91bmRdKQorICAgICAgX2d1aWxlX3N1ZmZpeD0kX2d1aWxlX3JlcXVpcmVkX3ZlcnNp b24KKyAgICAgIEFDX1BBVEhfUFJPRyhHVUlMRSxbZ3VpbGUkX2d1aWxlX3N1ZmZpeF0pCisgICAg ICBpZiB0ZXN0ICIkR1VJTEUiID0gIiIgOyB0aGVuCisgICAgICAgICAgX2d1aWxlX3N1ZmZpeD0K KyAgICAgICAgICBBQ19QQVRIX1BST0coR1VJTEUsW2d1aWxlJF9ndWlsZV9zdWZmaXhdKQorICAg ICAgICAgIGlmIHRlc3QgIiRHVUlMRSIgPSAiIiA7IHRoZW4KKyAgICAgICAgICAgICAgQUNfTVNH X0VSUk9SKFtndWlsZSByZXF1aXJlZCBidXQgbm90IGZvdW5kXSkKKyAgICAgICAgICBmaQorICAg ICAgZmkKICAgZmkKICAgQUNfU1VCU1QoR1VJTEUpCiAKQEAgLTI0NiwxNSArMjYwLDE1IEBAIEFD X0RFRlVOKFtHVUlMRV9QUk9HU10sCiAgIGZpCiAgIEFDX01TR19SRVNVTFQoWyRfZ3VpbGVfcHJv Z192ZXJzaW9uXSkKIAotICBBQ19QQVRIX1BST0coR1VJTEQsZ3VpbGQpCisgIEFDX1BBVEhfUFJP RyhHVUlMRCxbZ3VpbGQkX2d1aWxlX3N1ZmZpeF0pCiAgIEFDX1NVQlNUKEdVSUxEKQogCi0gIEFD X1BBVEhfUFJPRyhHVUlMRV9DT05GSUcsZ3VpbGUtY29uZmlnKQorICBBQ19QQVRIX1BST0coR1VJ TEVfQ09ORklHLFtndWlsZS1jb25maWckX2d1aWxlX3N1ZmZpeF0pCiAgIEFDX1NVQlNUKEdVSUxF X0NPTkZJRykKICAgaWYgdGVzdCAtbiAiJEdVSUxEIjsgdGhlbgogICAgIEdVSUxFX1RPT0xTPSRH VUlMRAogICBlbHNlCi0gICAgQUNfUEFUSF9QUk9HKEdVSUxFX1RPT0xTLGd1aWxlLXRvb2xzKQor ICAgIEFDX1BBVEhfUFJPRyhHVUlMRV9UT09MUyxbZ3VpbGUtdG9vbHMkX2d1aWxlX3N1ZmZpeF0p CiAgIGZpCiAgIEFDX1NVQlNUKEdVSUxFX1RPT0xTKQogIF0pCi0tIAoyLjcuNAoK --001a11c364d064bc2e053e7f9e62--