[PATCH v1 0/4] Add aarch64-none-elf-gcc-toolchain.

  • Open
  • quality assurance status badge
Details
2 participants
  • Denis 'GNUtoo' Carikli
  • Efraim Flashner
Owner
unassigned
Submitted by
Denis 'GNUtoo' Carikli
Severity
normal
D
D
Denis 'GNUtoo' Carikli wrote on 18 May 2023 20:24
(address . guix-patches@gnu.org)
20230518182434.15531-1-GNUtoo@cyberdimension.org
Hi,

Here's a patch serie to add a GCC cross toolchain for aarch64-none-elf. For
now it doesn't contain C++ support but that can be added on later.

I've validated by building u-boot locally with it.

I didn't test it for microncontroller development as I don't know what board
to get to test it. Apparently support for 64bit was added to Armv8-R, so it
might be possible to find some boards with 64bit CPUs at some point.

Denis 'GNUtoo' Carikli (4):
gnu: Add aarch64-none-elf-binutils.
gnu: Add aarch64-none-elf-gcc.
gnu: Add aarch64-none-elf-newlib.
gnu: Add aarch64-none-elf-gcc-toolchain.

gnu/local.mk | 1 +
gnu/packages/aarch64-none-elf-toolchain.scm | 159 ++++++++++++++++++++
2 files changed, 160 insertions(+)
create mode 100644 gnu/packages/aarch64-none-elf-toolchain.scm


base-commit: 5b700945fb0b33eec410de8979cae2fbf0d4f118
--
2.40.1
D
D
Denis 'GNUtoo' Carikli wrote on 18 May 2023 20:28
[PATCH v1 1/4] gnu: Add aarch64-none-elf-binutils.
(address . 63576@debbugs.gnu.org)
20230518182814.15881-1-GNUtoo@cyberdimension.org
* gnu/packages/aarch64-none-elf-toolchain.scm (aarch64-none-elf-binutils): New
variable.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add
%D%/packages/aarch64-none-elf-toolchain.scm.
---
gnu/local.mk | 1 +
gnu/packages/aarch64-none-elf-toolchain.scm | 26 +++++++++++++++++++++
2 files changed, 27 insertions(+)
create mode 100644 gnu/packages/aarch64-none-elf-toolchain.scm

Toggle diff (46 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 42514ded8e..9f914580a4 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -106,6 +106,7 @@ GNU_SYSTEM_MODULES = \
%D%/home/services/xdg.scm \
%D%/image.scm \
%D%/packages.scm \
+ %D%/packages/aarch64-none-elf-toolchain.scm \
%D%/packages/abduco.scm \
%D%/packages/abiword.scm \
%D%/packages/accessibility.scm \
diff --git a/gnu/packages/aarch64-none-elf-toolchain.scm b/gnu/packages/aarch64-none-elf-toolchain.scm
new file mode 100644
index 0000000000..14569036ce
--- /dev/null
+++ b/gnu/packages/aarch64-none-elf-toolchain.scm
@@ -0,0 +1,26 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2023 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages aarch64-none-elf-toolchain)
+ #:use-module (guix packages)
+ #:use-module (gnu packages cross-base))
+
+(define-public aarch64-none-elf-binutils
+ (package
+ (inherit (cross-binutils "aarch64-none-elf"))
+ (name "aarch64-none-elf-binutils")))
--
2.40.1
D
D
Denis 'GNUtoo' Carikli wrote on 18 May 2023 20:28
[PATCH v1 2/4] gnu: Add aarch64-none-elf-gcc.
(address . 63576@debbugs.gnu.org)
20230518182814.15881-2-GNUtoo@cyberdimension.org
* gnu/packages/aarch64-none-elf-toolchain.scm (aarch64-none-elf-gcc): New
variable.
---
gnu/packages/aarch64-none-elf-toolchain.scm | 59 ++++++++++++++++++++-
1 file changed, 58 insertions(+), 1 deletion(-)

Toggle diff (75 lines)
diff --git a/gnu/packages/aarch64-none-elf-toolchain.scm b/gnu/packages/aarch64-none-elf-toolchain.scm
index 14569036ce..88a2abb1f9 100644
--- a/gnu/packages/aarch64-none-elf-toolchain.scm
+++ b/gnu/packages/aarch64-none-elf-toolchain.scm
@@ -17,10 +17,67 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu packages aarch64-none-elf-toolchain)
+ #:use-module (guix gexp)
+ #:use-module (guix utils)
#:use-module (guix packages)
- #:use-module (gnu packages cross-base))
+ #:use-module (gnu packages cross-base)
+ #:use-module (gnu packages gcc))
(define-public aarch64-none-elf-binutils
(package
(inherit (cross-binutils "aarch64-none-elf"))
(name "aarch64-none-elf-binutils")))
+
+(define aarch64-none-elf-gcc
+ (let ((xgcc (cross-gcc "aarch64-none-elf" #:xgcc gcc #:xbinutils aarch64-none-elf-binutils)))
+ (package
+ (inherit xgcc)
+ (name "aarch64-none-elf-gcc")
+ (arguments
+ (substitute-keyword-arguments (package-arguments xgcc)
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (add-after 'set-paths 'augment-CPLUS_INCLUDE_PATH
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((gcc (assoc-ref inputs "gcc")))
+ ;; Remove the default compiler from CPLUS_INCLUDE_PATH to
+ ;; prevent header conflict with the GCC from native-inputs.
+ (setenv "CPLUS_INCLUDE_PATH"
+ (string-join
+ (delete (string-append gcc "/include/c++")
+ (string-split (getenv "CPLUS_INCLUDE_PATH")
+ #\:))
+ ":"))
+ (format #t
+ "environment variable `CPLUS_INCLUDE_PATH' changed to ~a~%"
+ (getenv "CPLUS_INCLUDE_PATH")))))
+ ;; Without a working multilib build, the resulting GCC lacks
+ ;; support for nearly every AARCH64-NONE-ELF chip.
+ (add-after 'unpack 'fix-genmultilib
+ (lambda _
+ ;; patch-shebang doesn't work here because there are actually
+ ;; several scripts inside this script, each with a #!/bin/sh
+ ;; that needs patching.
+ (substitute* "gcc/genmultilib"
+ (("#!/bin/sh") (string-append "#!" (which "sh"))))))))
+ ((#:configure-flags flags)
+ #~(delete "--disable-multilib" #$flags))))
+ (native-search-paths
+ (list (search-path-specification
+ (variable "CROSS_C_INCLUDE_PATH")
+ (files '("aarch64-none-elf/include")))
+ (search-path-specification
+ (variable "CROSS_CPLUS_INCLUDE_PATH")
+ (files '("aarch64-none-elf/include")))
+ (search-path-specification
+ (variable "CROSS_OBJC_INCLUDE_PATH")
+ (files '("aarch64-none-elf/include")))
+ (search-path-specification
+ (variable "CROSS_OBJCPLUS_INCLUDE_PATH")
+ (files '("aarch64-none-elf/include")))
+ (search-path-specification
+ (variable "CROSS_LIBRARY_PATH")
+ (files '("aarch64-none-elf/lib")))))
+ (native-inputs
+ `(("gcc" ,gcc)
+ ,@(package-native-inputs xgcc))))))
--
2.40.1
D
D
Denis 'GNUtoo' Carikli wrote on 18 May 2023 20:28
[PATCH v1 3/4] gnu: Add aarch64-none-elf-newlib.
(address . 63576@debbugs.gnu.org)
20230518182814.15881-3-GNUtoo@cyberdimension.org
* gnu/packages/aarch64-none-elf-toolchain.scm (aarch64-none-elf-newlib): New
variable.
---
gnu/packages/aarch64-none-elf-toolchain.scm | 49 ++++++++++++++++++++-
1 file changed, 48 insertions(+), 1 deletion(-)

Toggle diff (70 lines)
diff --git a/gnu/packages/aarch64-none-elf-toolchain.scm b/gnu/packages/aarch64-none-elf-toolchain.scm
index 88a2abb1f9..9863e65dad 100644
--- a/gnu/packages/aarch64-none-elf-toolchain.scm
+++ b/gnu/packages/aarch64-none-elf-toolchain.scm
@@ -17,11 +17,15 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu packages aarch64-none-elf-toolchain)
+ #:use-module ((guix licenses) #:prefix license:)
#:use-module (guix gexp)
#:use-module (guix utils)
+ #:use-module (guix download)
#:use-module (guix packages)
+ #:use-module (guix build-system gnu)
#:use-module (gnu packages cross-base)
- #:use-module (gnu packages gcc))
+ #:use-module (gnu packages gcc)
+ #:use-module (gnu packages texinfo))
(define-public aarch64-none-elf-binutils
(package
@@ -81,3 +85,46 @@ (define aarch64-none-elf-gcc
(native-inputs
`(("gcc" ,gcc)
,@(package-native-inputs xgcc))))))
+
+(define-public aarch64-none-elf-newlib
+ (package
+ (name "aarch64-none-elf-newlib")
+ (version "2.4.0")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "ftp://sourceware.org/pub/newlib/newlib-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "01i7qllwicf05vsvh39qj7qp5fdifpvvky0x95hjq39mbqiksnsl"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:out-of-source? #t
+ ;; The configure flags are identical to the flags used by the "GCC ARM
+ ;; embedded" project.
+ #:configure-flags '("--target=aarch64-none-elf"
+ "--enable-newlib-io-long-long"
+ "--enable-newlib-register-fini"
+ "--disable-newlib-supplied-syscalls"
+ "--disable-nls")
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'fix-references-to-/bin/sh
+ (lambda _
+ (substitute* '("libgloss/aarch64/cpu-init/Makefile.in"
+ "libgloss/aarch64/Makefile.in"
+ "libgloss/libnosys/Makefile.in"
+ "libgloss/Makefile.in")
+ (("/bin/sh") (which "sh")))
+ #t)))))
+ (native-inputs
+ `(("xbinutils" ,(cross-binutils "aarch64-none-elf"))
+ ("xgcc" ,aarch64-none-elf-gcc)
+ ("texinfo" ,texinfo)))
+ (home-page "https://www.sourceware.org/newlib/")
+ (synopsis "C library for use on embedded systems")
+ (description "Newlib is a C library intended for use on embedded
+systems. It is a conglomeration of several library parts that are easily
+usable on embedded products.")
+ (license (license:non-copyleft
+ "https://www.sourceware.org/newlib/COPYING.NEWLIB"))))
--
2.40.1
D
D
Denis 'GNUtoo' Carikli wrote on 18 May 2023 20:28
[PATCH v1 4/4] gnu: Add aarch64-none-elf-gcc-toolchain.
(address . 63576@debbugs.gnu.org)
20230518182814.15881-4-GNUtoo@cyberdimension.org
* gnu/packages/aarch64-none-elf-toolchain.scm
(aarch64-none-elf-gcc-toolchain): New variable.
---
gnu/packages/aarch64-none-elf-toolchain.scm | 29 +++++++++++++++++++++
1 file changed, 29 insertions(+)

Toggle diff (46 lines)
diff --git a/gnu/packages/aarch64-none-elf-toolchain.scm b/gnu/packages/aarch64-none-elf-toolchain.scm
index 9863e65dad..a9a7ca2866 100644
--- a/gnu/packages/aarch64-none-elf-toolchain.scm
+++ b/gnu/packages/aarch64-none-elf-toolchain.scm
@@ -23,6 +23,7 @@ (define-module (gnu packages aarch64-none-elf-toolchain)
#:use-module (guix download)
#:use-module (guix packages)
#:use-module (guix build-system gnu)
+ #:use-module (guix build-system trivial)
#:use-module (gnu packages cross-base)
#:use-module (gnu packages gcc)
#:use-module (gnu packages texinfo))
@@ -128,3 +129,31 @@ (define-public aarch64-none-elf-newlib
usable on embedded products.")
(license (license:non-copyleft
"https://www.sourceware.org/newlib/COPYING.NEWLIB"))))
+
+(define-public aarch64-none-elf-gcc-toolchain
+ (package
+ (name "aarch64-none-elf-gcc-toolchain")
+ (version (package-version aarch64-none-elf-gcc))
+ (source #f)
+ (build-system trivial-build-system)
+ (arguments
+ '(#:modules ((guix build union))
+ #:builder
+ (begin
+ (use-modules (ice-9 match)
+ (guix build union))
+ (match %build-inputs
+ (((names . directories) ...)
+ (union-build (assoc-ref %outputs "out")
+ directories)
+ #t)))))
+ (propagated-inputs
+ `(("binutils" ,aarch64-none-elf-binutils)
+ ("gcc" ,aarch64-none-elf-gcc)
+ ("libc" ,aarch64-none-elf-newlib)))
+ (synopsis "C GCC tool chain for aarch64 microcontroller development")
+ (description "This package provides a C GCC tool chain for aarch64
+microcontroller development. This includes the GCC aarch64 cross compiler and
+the newlib libc. This supports the C programming language.")
+ (home-page (package-home-page aarch64-none-elf-newlib))
+ (license (package-license aarch64-none-elf-gcc))))
--
2.40.1
E
E
Efraim Flashner wrote on 4 Jun 2023 10:43
Re: [PATCH v1 0/4] Add aarch64-none-elf-gcc-toolchain.
(name . Denis 'GNUtoo' Carikli)(address . GNUtoo@cyberdimension.org)
ZHxOpOvISOWH4UUk@3900XT
On Thu, May 18, 2023 at 08:24:34PM +0200, Denis 'GNUtoo' Carikli wrote:
Toggle quote (7 lines)
> Hi,
>
> Here's a patch serie to add a GCC cross toolchain for aarch64-none-elf. For
> now it doesn't contain C++ support but that can be added on later.
>
> I've validated by building u-boot locally with it.

I'm not entirely sure what this means. How is it different from how we
build u-boot now?

Toggle quote (4 lines)
> I didn't test it for microncontroller development as I don't know what board
> to get to test it. Apparently support for 64bit was added to Armv8-R, so it
> might be possible to find some boards with 64bit CPUs at some point.

Pity, this is what I was going to ask about.

Toggle quote (16 lines)
> Denis 'GNUtoo' Carikli (4):
> gnu: Add aarch64-none-elf-binutils.
> gnu: Add aarch64-none-elf-gcc.
> gnu: Add aarch64-none-elf-newlib.
> gnu: Add aarch64-none-elf-gcc-toolchain.
>
> gnu/local.mk | 1 +
> gnu/packages/aarch64-none-elf-toolchain.scm | 159 ++++++++++++++++++++
> 2 files changed, 160 insertions(+)
> create mode 100644 gnu/packages/aarch64-none-elf-toolchain.scm
>
>
> base-commit: 5b700945fb0b33eec410de8979cae2fbf0d4f118
> --
> 2.40.1

I'm not opposed to adding these packages, but I want to make sure that
they're useful for what people would be looking for. I also think that
they'd be best in gnu/packages/embedded.scm near the very similar arm
packages.

--
Efraim Flashner <efraim@flashner.co.il> ????? ?????
GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted
-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEEoov0DD5VE3JmLRT3Qarn3Mo9g1EFAmR8TqEACgkQQarn3Mo9
g1G0/w//SG0tmW3Iyv2ga1o3/aFuU8kHGD9zY37kyYIzPW/Rzs/sPyD2qeiNe8wQ
e0uMPFa23PbIzmd/NSLErAwQrjLi7n1/sWg+7PY969rRzRiHdkiGKQNw8iW170kO
LA9YyNEoy87YTFVPVwP8mzrupfHNlPXybuyNonzJYx0LkrMPv/Py68YRiqyjzG0N
ZLj9O60xDEGYsqCpeEs7Ozto6wUJe4jSephvjyXMpvpWZ40S/flANgxDr6LYiLJI
b25uVkaC+n6M1oLzrI8OXkhx7MlWLA7uEkz1Mqwoc7etUuFI+1+KtKpFUQmnRFS3
ILX7px32kUra7BC65UVED3CL2Z+ZCw1XtjXOkwg9/MgywiEzvjs50mzZBn14zZKO
sDENd/7de+Nma6l/JicvOC3DoeEWDJvdmyYrYIgv4zajL5hyXVy+AQZF/fMWUrwc
OQwIiX1JTbA6xgMKcTd9gCLrHZIjbl5jL7i6q6OQt/qy877Nel7fod4AvwlJoBI5
zrr7JIGFCPbii6IMfwtZJr0ecbLE4lq2jq6jzDpoRMkFe45Mr2DwMY9s36cxlFpM
5IiY8dkMUxqPalc++1FkWtnGt3t3ihCjysFQN5lykTOSIWKF11toFSjH4ax0IHSr
n5kWgTsN8euxRI1VegL+O3hTXuPiRoqK7vS6sHGZW6NsyfpXyKo=
=5Gd0
-----END PGP SIGNATURE-----


D
D
Denis 'GNUtoo' Carikli wrote on 5 Jun 2023 23:10
(name . Efraim Flashner)(address . efraim@flashner.co.il)
20230605231050.14dcc398@primary_laptop
On Sun, 4 Jun 2023 11:43:16 +0300
Efraim Flashner <efraim@flashner.co.il> wrote:

Toggle quote (12 lines)
> On Thu, May 18, 2023 at 08:24:34PM +0200, Denis 'GNUtoo' Carikli
> wrote:
> > Hi,
> >
> > Here's a patch serie to add a GCC cross toolchain for
> > aarch64-none-elf. For now it doesn't contain C++ support but that
> > can be added on later.
> >
> > I've validated by building u-boot locally with it.
>
> I'm not entirely sure what this means. How is it different from how we
> build u-boot now?
My use case here is not to build the u-boot package but rather to build
kernels and u-boot images outside of Guix, to build not-yet
released revisions and/or to do kernel or u-boot development.

That use case works fine if the host and target architectures are the
same as people can simply install the gcc-toolchain package. But when
it's not, it's convenient to be able to simply install packages of
cross toolchains.

Some distributions like Arch Linux[1], Debian[2], Ubuntu[3], and their
derivatives (Parabola, PureOS, Trisquel, etc) do provide packages for
cross toolchains.

Here I've confirmed that the patches I submitted work fine by
building u-boot from source (for aarch64) on an x86 laptop running Guix
and by running the resulting u-boot images on hardware like the
Pinephone
(with u-boot patched to not use crust, and I didn't try to boot Linux)
and the Rock 4C plus (this was more extensively tested than the
Pinephone, I booted a Guix image on it etc).

However I am unsure if the approach I took with my patch serie is the
way to go here as here we have some duplication as some of the toolchain
packages generated specifically for u-boot are for the exact same
architecture (here aarch64). I also plan to add more toolchain
packages (at least for or1k, RISCV 32). So at the end it kind of
doubles the maintenance.

In another hand my approach works and it also doesn't interfere with
u-boot packages (so we don't have a risk of u-boot breakages when my
toolchain packages are updated).

What approach do you think would be best? Do you have ideas of better
approaches than the ones I proposed here?

PS: I also noticed later on that I need to update newlib to 4.1.0, but I
can do that with a v2 or in a later patch depending on what you
think is best.

PPS: Note that when building u-boot or kernels locally (not as
packages), in addition to the toolchain, there are also some tricks
needed to make things work out of the box.

For u-boot I use 'guix shell -D u-boot-rockpro64-rk3399 openssl@3
python python-pyelftools'. As I don't have to redistribute the
binaries I didn't look into not using openssl@3, but I'll have to
look into it at some point.

I then have to pass HOSTCC=gcc to make as cc isn't defined. I
also have to pass the usual CROSS_COMPILE=, BL31=, etc to make.

For xconfig I have to use something like that:
'PKG_CONFIG_PATH=/gnu/store/[...]-qtbase-5.15.8/lib/pkgconfig/
make ARCH=arm HOSTCC=gcc xconfig'.

References:
-----------

Denis.
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEeC+d2+Nrp/PU3kkGX138wUF34mMFAmR+T1oACgkQX138wUF3
4mOr8w//TSdr4AK6V9HFazETFgtwhAw5FjTXSRqT71jC0dB4kOLQZ7bEqIlKmOMm
zN0YhGYnsWA2attaikxXbCpAzJyTaoDBtRBJenYeaYwk2DWsPKKRbkAsVQCd+hNc
b0lAX/YK/U7VaMnevMMRqRupifNlSwZ9qmbxw1Gw9raWdNw/r78nHQiD0sl87dNA
aEmZ+6vTa/Sq1x9neunEddsJQ6YRSLXU/edlgLSxftlLCFTTmz9KYiOr4tTMR/nn
wBETzYAEWRF25y8yt1Yde9fIG6rGEq25HZx8qi1mijJ6b/yzdGIDHqC1IbMCXNXK
51Nr18lgeT+cuify5y20/ODolGBMSvZeu64ssn90XO7UMIkgFBBJ1olcqTAaQajo
MQmiQHSB1zCy71W8V4NSPzHY7Z65hhrwmxXCokZHDFy6E5DSV8Ek1oHQtIGTtI32
rXlCwHK8rsiUOMXMYzupKF9iCCyJEjE7MG3FEWekhIGAcwvmlsnerc3Eh4Er0z6i
ZWAUaMGuIIHX4Sl9KfZREhZS/3oh3A/EeSW0BCcI/UH+rb2XdBlQApuDd1hEX9x2
wNGDZFhcgrtlmWyDXQs5qboQ5M2j+zzIym5J+eSLX8s1p4mUntxwIkecldDSZ9jY
ewBgvMq6q+4VHuA4pRnfU9PXCDs7hf0NcWJhHKdgDoqpTzjwsdI=
=x/OZ
-----END PGP SIGNATURE-----


D
D
Denis 'GNUtoo' Carikli wrote on 19 Jul 2023 03:00
(name . Efraim Flashner)(address . efraim@flashner.co.il)
20230719030006.3dd82d4b@primary_laptop
On Sun, 4 Jun 2023 11:43:16 +0300
Efraim Flashner <efraim@flashner.co.il> wrote:
Toggle quote (6 lines)
> > I didn't test it for microncontroller development as I don't know
> > what board to get to test it. Apparently support for 64bit was
> > added to Armv8-R, so it might be possible to find some boards with
> > 64bit CPUs at some point.
>
> Pity, this is what I was going to ask about.
I've looked at it and there are no cortex-M that are 64bit yet. The
only 64bit ARM CPUs are in cortex-A or cortex-R.

Do you want me to write some simple code that outputs something on the
serial port of a cortex A to validate the toolchain?

Toggle quote (4 lines)
> I'm not opposed to adding these packages, but I want to make sure that
> they're useful for what people would be looking for. I also think that
> they'd be best in gnu/packages/embedded.scm near the very similar arm
> packages.
Should I go forward and propose a v2 in gnu/packages/embedded.scm ?

Should I keep the patch mostly as-is (with updated IASL, moved in
embedded.scm) or should I rework it somehow?

Denis.
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEeC+d2+Nrp/PU3kkGX138wUF34mMFAmS3NZYACgkQX138wUF3
4mO+rw/+Ivzf1wYNHPFtyWWCPquj+xPHYBKR44g4OQ4f6WXcoJgXrXhSpYAr0QAl
+2PDDiL6NgjHXLzpirktqbcTal1g/mFAKCAdE+TonMhsZLamcOgzEbvBFMsBgx0p
yUsKs28KMzY3Uzfbbv1DZV69UGZ6bD0Octv43cay8vhVa2J1WQAb2f7yxWx8MZoG
iRavYUQn9qUz9tx+7uQ+1cfZFoCGMhQIbEKxcXKhvrDvh7poj2PTkNfsDtlJUBeQ
WkWbvnUWPmuUSScTzdlfLJ/dz3Z4kBVxIDQGZoN5wva+5zEAhy60RYqx9E+xI45S
8dsx4nESZQCfu4kk/h9kqa6szo/g04uCO+La86o4v15Wn+aqWIzPsSVV6W2UAxHo
JxCYPbvKyFxECGz137PHA8bE8fUF4vDDOWNMoWxEOHcR/gbdyCE4NLfz3BHK5Wod
IRKtF3lEUE3R7oL8tMyMV3sEqfk4SO4QSH0ao0Iw8cbX9OYpNP+aEBfzlMhLnjdc
+mJr+Yu7RON5R5X8SiwlyZzqtLx71vhZLIdPopuFFFM95K/zLYVqQZuzCYgleVNL
kou3n4mMdi30WB8l75yovSxdG24zJnVRl1VJ0IxD2xeDzoQzjF2Hjjxc03I9TCbb
H2CGuIHjYBakwaDlxKvBLeOONXs0locBYIeNEuhRnxdx2oMOTC8=
=iR/I
-----END PGP SIGNATURE-----


?