diff options
-rw-r--r-- | debian/changelog | 8 | ||||
-rw-r--r-- | debian/libapr1t64.lintian-overrides | 1 | ||||
-rw-r--r-- | debian/patches/debug_testpoll_failure.patch | 6 | ||||
-rw-r--r-- | debian/patches/fix-atomics-some-more.patch | 190 | ||||
-rw-r--r-- | debian/patches/fix-atomics.patch | 34 | ||||
-rw-r--r-- | debian/patches/fix_doxygen.patch | 6 | ||||
-rw-r--r-- | debian/patches/hurd_path_max.patch | 2 | ||||
-rw-r--r-- | debian/patches/hurd_shm_flock.patch | 6 | ||||
-rw-r--r-- | debian/patches/series | 1 | ||||
-rw-r--r-- | debian/upstream/signing-key.asc | 250 |
10 files changed, 278 insertions, 226 deletions
diff --git a/debian/changelog b/debian/changelog index 8a01ea5..d80e124 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +apr (1.7.5-1) unstable; urgency=medium + + * New usptream version + - CVE-2023-49582: Unexpected lax shared memory permissions + Closes: #1080375 + + -- Stefan Fritsch <sf@debian.org> Sat, 07 Sep 2024 11:01:36 +0200 + apr (1.7.2-3.2) unstable; urgency=medium * Non-maintainer upload. diff --git a/debian/libapr1t64.lintian-overrides b/debian/libapr1t64.lintian-overrides index 5f13efc..d6c7183 100644 --- a/debian/libapr1t64.lintian-overrides +++ b/debian/libapr1t64.lintian-overrides @@ -1,2 +1 @@ libapr1t64: package-name-doesnt-match-sonames libapr-1-0 -libapr1t64: package-name-doesnt-match-sonames libapr1 diff --git a/debian/patches/debug_testpoll_failure.patch b/debian/patches/debug_testpoll_failure.patch index 721e030..a555063 100644 --- a/debian/patches/debug_testpoll_failure.patch +++ b/debian/patches/debug_testpoll_failure.patch @@ -4,8 +4,8 @@ # add some debug output --- apr.orig/test/testpoll.c +++ apr/test/testpoll.c -@@ -908,6 +908,9 @@ static void justsleep(abts_case *tc, voi - rv = apr_pollcb_poll(pollcb, apr_time_from_msec(200), NULL, NULL); +@@ -924,6 +924,9 @@ static void justsleep(abts_case *tc, voi + rv = apr_pollcb_poll(pollcb, JUSTSLEEP_DELAY, NULL, NULL); t2 = apr_time_now(); ABTS_INT_EQUAL(tc, 1, APR_STATUS_IS_TIMEUP(rv)); + if ((t2 - t1) <= apr_time_from_msec(100)) @@ -13,4 +13,4 @@ + i, (long)t1, (long)t2, rv); ABTS_ASSERT(tc, "apr_pollcb_poll() didn't sleep", - (t2 - t1) > apr_time_from_msec(100)); + JUSTSLEEP_ENOUGH(t1, t2)); diff --git a/debian/patches/fix-atomics-some-more.patch b/debian/patches/fix-atomics-some-more.patch deleted file mode 100644 index 786a9c3..0000000 --- a/debian/patches/fix-atomics-some-more.patch +++ /dev/null @@ -1,190 +0,0 @@ -# upstream trunk r1907541, r1907637, r1907642, r1907677, r1907678 ---- apr.orig/atomic/unix/mutex64.c -+++ apr/atomic/unix/mutex64.c -@@ -96,7 +96,14 @@ apr_status_t apr__atomic_generic64_init( - - APR_DECLARE(apr_uint64_t) apr_atomic_read64(volatile apr_uint64_t *mem) - { -- return *mem; -+ apr_uint64_t cur_value; -+ DECLARE_MUTEX_LOCKED(mutex, mem); -+ -+ cur_value = *mem; -+ -+ MUTEX_UNLOCK(mutex); -+ -+ return cur_value; - } - - APR_DECLARE(void) apr_atomic_set64(volatile apr_uint64_t *mem, apr_uint64_t val) ---- apr.orig/atomic/unix/builtins.c -+++ apr/atomic/unix/builtins.c -@@ -18,10 +18,11 @@ - - #ifdef USE_ATOMICS_BUILTINS - --#if defined(__arm__) || defined(__powerpc__) || defined(__powerpc64__) --#define WEAK_MEMORY_ORDERING 1 --#else -+#if defined(__i386__) || defined(__x86_64__) \ -+ || defined(__s390__) || defined(__s390x__) - #define WEAK_MEMORY_ORDERING 0 -+#else -+#define WEAK_MEMORY_ORDERING 1 - #endif - - APR_DECLARE(apr_status_t) apr_atomic_init(apr_pool_t *p) ---- apr.orig/atomic/unix/builtins64.c -+++ apr/atomic/unix/builtins64.c -@@ -18,17 +18,18 @@ - - #ifdef USE_ATOMICS_BUILTINS64 - --#if defined(__arm__) || defined(__powerpc__) || defined(__powerpc64__) --#define WEAK_MEMORY_ORDERING 1 --#else -+#if defined(__i386__) || defined(__x86_64__) \ -+ || defined(__s390__) || defined(__s390x__) - #define WEAK_MEMORY_ORDERING 0 -+#else -+#define WEAK_MEMORY_ORDERING 1 - #endif - - APR_DECLARE(apr_uint64_t) apr_atomic_read64(volatile apr_uint64_t *mem) - { - #if HAVE__ATOMIC_BUILTINS64 - return __atomic_load_n(mem, __ATOMIC_SEQ_CST); --#elif WEAK_MEMORY_ORDERING -+#elif WEAK_MEMORY_ORDERING || APR_SIZEOF_VOIDP < 8 - /* No __sync_load() available => apr_atomic_add64(mem, 0) */ - return __sync_fetch_and_add(mem, 0); - #else -@@ -40,7 +41,7 @@ APR_DECLARE(void) apr_atomic_set64(volat - { - #if HAVE__ATOMIC_BUILTINS64 - __atomic_store_n(mem, val, __ATOMIC_SEQ_CST); --#elif WEAK_MEMORY_ORDERING -+#elif WEAK_MEMORY_ORDERING || APR_SIZEOF_VOIDP < 8 - /* No __sync_store() available => apr_atomic_xchg64(mem, val) */ - __sync_synchronize(); - __sync_lock_test_and_set(mem, val); ---- apr.orig/configure.in -+++ apr/configure.in -@@ -552,31 +552,35 @@ AC_CACHE_CHECK([whether the compiler pro - [AC_TRY_RUN([ - #if HAVE_STDINT_H - #include <stdint.h> -+typedef uint64_t u64_t; -+#else -+typedef unsigned long long u64_t; - #endif - int main(int argc, const char *const *argv) - { --#if HAVE_STDINT_H -- uint64_t val = 1010, tmp, *mem = &val; --#else -- unsigned long long val = 1010, tmp, *mem = &val; --#endif -+ struct { -+ char pad0; -+ u64_t val; -+ } s; -+ u64_t *mem = &s.val, tmp; - -- if (__sync_fetch_and_add(&val, 1010) != 1010 || val != 2020) -+ s.val = 1010; -+ if (__sync_fetch_and_add(&s.val, 1010) != 1010 || s.val != 2020) - return 1; - -- tmp = val; -- if (__sync_fetch_and_sub(mem, 1010) != tmp || val != 1010) -+ tmp = s.val; -+ if (__sync_fetch_and_sub(mem, 1010) != tmp || s.val != 1010) - return 1; - -- if (__sync_sub_and_fetch(&val, 1010) != 0 || val != 0) -+ if (__sync_sub_and_fetch(&s.val, 1010) != 0 || s.val != 0) - return 1; - - tmp = 3030; -- if (__sync_val_compare_and_swap(mem, 0, tmp) != 0 || val != tmp) -+ if (__sync_val_compare_and_swap(mem, 0, tmp) != 0 || s.val != tmp) - return 1; - - __sync_synchronize(); -- if (__sync_lock_test_and_set(&val, 4040) != 3030) -+ if (__sync_lock_test_and_set(&s.val, 4040) != 3030) - return 1; - - return 0; -@@ -586,31 +590,45 @@ AC_CACHE_CHECK([whether the compiler pro - [AC_TRY_RUN([ - #if HAVE_STDINT_H - #include <stdint.h> -+typedef uint64_t u64_t; -+#else -+typedef unsigned long long u64_t; - #endif -+static int test_always_lock_free(volatile u64_t *val) -+{ -+ return __atomic_always_lock_free(sizeof(*val), val); -+} - int main(int argc, const char *const *argv) - { --#if HAVE_STDINT_H -- uint64_t val = 1010, tmp, *mem = &val; --#else -- unsigned long long val = 1010, tmp, *mem = &val; --#endif -+ struct { -+ char pad0; -+ u64_t val; -+ char pad1; -+ u64_t tmp; -+ } s; -+ u64_t *mem = &s.val; -+ -+ /* check if alignment matters (no fallback to libatomic) */ -+ if (!test_always_lock_free(&s.val)) -+ return 1; - -- if (__atomic_fetch_add(&val, 1010, __ATOMIC_SEQ_CST) != 1010 || val != 2020) -+ s.val = 1010; -+ if (__atomic_fetch_add(&s.val, 1010, __ATOMIC_SEQ_CST) != 1010 || s.val != 2020) - return 1; - -- tmp = val; -- if (__atomic_fetch_sub(mem, 1010, __ATOMIC_SEQ_CST) != tmp || val != 1010) -+ s.tmp = s.val; -+ if (__atomic_fetch_sub(mem, 1010, __ATOMIC_SEQ_CST) != s.tmp || s.val != 1010) - return 1; - -- if (__atomic_sub_fetch(&val, 1010, __ATOMIC_SEQ_CST) != 0 || val != 0) -+ if (__atomic_sub_fetch(&s.val, 1010, __ATOMIC_SEQ_CST) != 0 || s.val != 0) - return 1; - -- tmp = val; -- if (!__atomic_compare_exchange_n(mem, &tmp, 3030, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) -- || tmp != 0) -+ s.tmp = s.val; -+ if (!__atomic_compare_exchange_n(mem, &s.tmp, 3030, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) -+ || s.tmp != 0) - return 1; - -- if (__atomic_exchange_n(&val, 4040, __ATOMIC_SEQ_CST) != 3030) -+ if (__atomic_exchange_n(&s.val, 4040, __ATOMIC_SEQ_CST) != 3030) - return 1; - - return 0; ---- apr.orig/test/testatomic.c -+++ apr/test/testatomic.c -@@ -662,6 +662,9 @@ static void test_atomics_threaded64(abts - pthread_setconcurrency(8); - #endif - -+ mutex_locks64 = 0; -+ apr_atomic_set64(&atomic_ops64, 0); -+ - rv = apr_thread_mutex_create(&thread_lock64, APR_THREAD_MUTEX_DEFAULT, p); - APR_ASSERT_SUCCESS(tc, "Could not create lock", rv); - diff --git a/debian/patches/fix-atomics.patch b/debian/patches/fix-atomics.patch index 2c519e7..81813ba 100644 --- a/debian/patches/fix-atomics.patch +++ b/debian/patches/fix-atomics.patch @@ -1,39 +1,25 @@ # upstream trunk commits r1907442, r1907441 ---- apr.orig/atomic/unix/builtins.c -+++ apr/atomic/unix/builtins.c -@@ -26,7 +26,11 @@ - - APR_DECLARE(apr_status_t) apr_atomic_init(apr_pool_t *p) - { -+#if defined (NEED_ATOMICS_GENERIC64) -+ return apr__atomic_generic64_init(p); -+#else - return APR_SUCCESS; -+#endif - } - - APR_DECLARE(apr_uint32_t) apr_atomic_read32(volatile apr_uint32_t *mem) --- apr.orig/atomic/unix/builtins64.c +++ apr/atomic/unix/builtins64.c -@@ -26,7 +26,7 @@ +@@ -27,7 +27,7 @@ APR_DECLARE(apr_uint64_t) apr_atomic_read64(volatile apr_uint64_t *mem) { -#if HAVE__ATOMIC_BUILTINS +#if HAVE__ATOMIC_BUILTINS64 return __atomic_load_n(mem, __ATOMIC_SEQ_CST); - #elif WEAK_MEMORY_ORDERING + #elif WEAK_MEMORY_ORDERING || APR_SIZEOF_VOIDP < 8 /* No __sync_load() available => apr_atomic_add64(mem, 0) */ -@@ -38,7 +38,7 @@ APR_DECLARE(apr_uint64_t) apr_atomic_rea +@@ -39,7 +39,7 @@ APR_DECLARE(apr_uint64_t) apr_atomic_rea APR_DECLARE(void) apr_atomic_set64(volatile apr_uint64_t *mem, apr_uint64_t val) { -#if HAVE__ATOMIC_BUILTINS +#if HAVE__ATOMIC_BUILTINS64 __atomic_store_n(mem, val, __ATOMIC_SEQ_CST); - #elif WEAK_MEMORY_ORDERING + #elif WEAK_MEMORY_ORDERING || APR_SIZEOF_VOIDP < 8 /* No __sync_store() available => apr_atomic_xchg64(mem, val) */ -@@ -51,7 +51,7 @@ APR_DECLARE(void) apr_atomic_set64(volat +@@ -52,7 +52,7 @@ APR_DECLARE(void) apr_atomic_set64(volat APR_DECLARE(apr_uint64_t) apr_atomic_add64(volatile apr_uint64_t *mem, apr_uint64_t val) { @@ -42,7 +28,7 @@ return __atomic_fetch_add(mem, val, __ATOMIC_SEQ_CST); #else return __sync_fetch_and_add(mem, val); -@@ -60,7 +60,7 @@ APR_DECLARE(apr_uint64_t) apr_atomic_add +@@ -61,7 +61,7 @@ APR_DECLARE(apr_uint64_t) apr_atomic_add APR_DECLARE(void) apr_atomic_sub64(volatile apr_uint64_t *mem, apr_uint64_t val) { @@ -51,7 +37,7 @@ __atomic_fetch_sub(mem, val, __ATOMIC_SEQ_CST); #else __sync_fetch_and_sub(mem, val); -@@ -69,7 +69,7 @@ APR_DECLARE(void) apr_atomic_sub64(volat +@@ -70,7 +70,7 @@ APR_DECLARE(void) apr_atomic_sub64(volat APR_DECLARE(apr_uint64_t) apr_atomic_inc64(volatile apr_uint64_t *mem) { @@ -60,7 +46,7 @@ return __atomic_fetch_add(mem, 1, __ATOMIC_SEQ_CST); #else return __sync_fetch_and_add(mem, 1); -@@ -78,7 +78,7 @@ APR_DECLARE(apr_uint64_t) apr_atomic_inc +@@ -79,7 +79,7 @@ APR_DECLARE(apr_uint64_t) apr_atomic_inc APR_DECLARE(int) apr_atomic_dec64(volatile apr_uint64_t *mem) { @@ -69,7 +55,7 @@ return __atomic_sub_fetch(mem, 1, __ATOMIC_SEQ_CST); #else return __sync_sub_and_fetch(mem, 1); -@@ -88,7 +88,7 @@ APR_DECLARE(int) apr_atomic_dec64(volati +@@ -89,7 +89,7 @@ APR_DECLARE(int) apr_atomic_dec64(volati APR_DECLARE(apr_uint64_t) apr_atomic_cas64(volatile apr_uint64_t *mem, apr_uint64_t val, apr_uint64_t cmp) { @@ -78,7 +64,7 @@ __atomic_compare_exchange_n(mem, &cmp, val, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); return cmp; #else -@@ -98,7 +98,7 @@ APR_DECLARE(apr_uint64_t) apr_atomic_cas +@@ -99,7 +99,7 @@ APR_DECLARE(apr_uint64_t) apr_atomic_cas APR_DECLARE(apr_uint64_t) apr_atomic_xchg64(volatile apr_uint64_t *mem, apr_uint64_t val) { diff --git a/debian/patches/fix_doxygen.patch b/debian/patches/fix_doxygen.patch index cba7489..35606a9 100644 --- a/debian/patches/fix_doxygen.patch +++ b/debian/patches/fix_doxygen.patch @@ -18,7 +18,7 @@ Subject: Fix generation of docs for out-of-tree builds and newer doxygen version FILE_PATTERNS=*.h --- apr.orig/include/apr.h.in +++ apr/include/apr.h.in -@@ -464,11 +464,11 @@ typedef apr_uint32_t apr_uin +@@ -473,11 +473,11 @@ typedef apr_uint32_t apr_uin /** * Thread callbacks from APR functions must be declared with APR_THREAD_FUNC, * so that they follow the platform's calling convention. @@ -34,7 +34,7 @@ Subject: Fix generation of docs for out-of-tree builds and newer doxygen version */ #define APR_THREAD_FUNC @apr_thread_func@ -@@ -502,11 +502,11 @@ typedef apr_uint32_t apr_uin +@@ -511,11 +511,11 @@ typedef apr_uint32_t apr_uin * APR_DECLARE_NONSTD(), as they must follow the C language calling convention. * @see APR_DECLARE @see APR_DECLARE_DATA * @remark Both the declaration and implementations must use the same macro. @@ -50,7 +50,7 @@ Subject: Fix generation of docs for out-of-tree builds and newer doxygen version */ #define APR_DECLARE_NONSTD(type) type -@@ -517,12 +517,12 @@ typedef apr_uint32_t apr_uin +@@ -526,12 +526,12 @@ typedef apr_uint32_t apr_uin * @remark Note that the declaration and implementations use different forms, * but both must include the macro. * diff --git a/debian/patches/hurd_path_max.patch b/debian/patches/hurd_path_max.patch index b333eb6..d5f8015 100644 --- a/debian/patches/hurd_path_max.patch +++ b/debian/patches/hurd_path_max.patch @@ -7,7 +7,7 @@ Subject: #349418 --- apr.orig/include/apr.h.in +++ apr/include/apr.h.in -@@ -629,7 +629,8 @@ typedef int apr_wait_t; +@@ -638,7 +638,8 @@ typedef int apr_wait_t; #elif defined(_POSIX_PATH_MAX) #define APR_PATH_MAX _POSIX_PATH_MAX #else diff --git a/debian/patches/hurd_shm_flock.patch b/debian/patches/hurd_shm_flock.patch index 5f1919f..bd5ea16 100644 --- a/debian/patches/hurd_shm_flock.patch +++ b/debian/patches/hurd_shm_flock.patch @@ -10,7 +10,7 @@ Bug: #656880 --- apr.orig/configure.in +++ apr/configure.in -@@ -1375,6 +1375,13 @@ case $host in +@@ -1464,6 +1464,13 @@ case $host in APR_DECISION_OVERRIDE(USE_SHMEM_SHMGET_ANON) ;; esac @@ -24,7 +24,7 @@ Bug: #656880 APR_END_DECISION AC_DEFINE_UNQUOTED($ac_decision) -@@ -1452,6 +1459,13 @@ case $host in +@@ -1548,6 +1555,13 @@ case $host in APR_DECISION_OVERRIDE(USE_SHMEM_SHMGET) ;; esac @@ -38,7 +38,7 @@ Bug: #656880 APR_END_DECISION AC_DEFINE_UNQUOTED($ac_decision) -@@ -2511,6 +2525,12 @@ esac +@@ -2608,6 +2622,12 @@ esac if test "x$apr_lock_method" != "x"; then APR_DECISION_FORCE($apr_lock_method) fi diff --git a/debian/patches/series b/debian/patches/series index a8badec..8abedf9 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -11,4 +11,3 @@ debug_testpoll_failure.patch use_fcntl_locking.patch python3-hashbang.patch fix-atomics.patch -fix-atomics-some-more.patch diff --git a/debian/upstream/signing-key.asc b/debian/upstream/signing-key.asc index ead11cc..55d1933 100644 --- a/debian/upstream/signing-key.asc +++ b/debian/upstream/signing-key.asc @@ -753,3 +753,253 @@ ftgVGFvrwm/4EWpVIYZRWC511IIBF9p48/ijXJLKC7mzsPQX4KdtuTyORo9EnK8Y Tk+1Bg== =9S3w -----END PGP PUBLIC KEY BLOCK----- +ASF ID: covener +LDAP PGP key: 65B2 D44F E74B D5E3 DE3A C3F0 8278 1DE4 6D59 54FA + +65B2 D44F E74B D5E3 DE3A C3F0 8278 1DE4 6D59 54FA +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBEsCKnYBEACb/ldlhkVPPopZa4HvQhckhpQCQBE105N6Q7IPpzq9djl4K9QH +TVSOvnhTd0s3J+7bB08jsYbaN2xMLLLZxjGW+EsQppXIsrY6K0m/aJfAb7MtdgoM +a/r9G5r04hQtRcc4ivMVHnFemM0A2sls56wUwVI9OHC2BPwBSoacTwSFOwwV4mSB +XivBkRPfIFVk8iaH3G4Zc8/KxgoPXJxX6rQ3AZxx0ad7hh6FKGgNxgOKNTwkQoZn +hj7edM0KlSkzQ8O9asRx27H/8Vv5oRP8tsy0VYSR/FPzny3cJfOhyw3px/mZSOhq +loAOLtTqBkvyTC+888rfMJDlozWEKqNeallzTTBQ38Y6iSskNMihpp6RXAiStrYO +oO/OlqBuSxXvplI3EWilIvEkzpzyWt/uiQnmclGSU6uhLMKby96QpfWOQaa9CIJQ +liMth7eisGKci4z7lom0q//fPQpbKIqk0bhFZeQeld01Ozy+s0rhZA1CD0P/e4yk +0nQVPPMih9wiYKvdr8lO+cLSt7Ugme1JX0l5jP3JyomiLPNEfyeWGpwO8d4YSSoF +UVJctLKBw1UR3rCwladOcf1iriqtwOfpy3wPtrxByxU4jBIR0stcpIhkMs1Qfde0 +RT6POBpPlNrGBoiOXwAAQv8zqy/z7yiTDhYTvWqSx/J5rpkKdxvvg6l/KwARAQAB +tCFFcmljIENvdmVuZXIgPGNvdmVuZXJAYXBhY2hlLm9yZz6IRgQQEQoABgUCTNIc +xwAKCRCR0+t4+K6606etAJ9JUdInQThMRW5CcBH8/Pacwgda5ACgr8gvuQf1EkBg +K58SwrOt0lx2sLqIdQQQEQIANQUCTOJSoi4cSmVhbi1TZWJhc3RpZW4gRGVsZmlu +byA8anNkZWxmaW5vQGFwYWNoZS5vcmc+AAoJEKR9Hi3QHg4YtswAoIj238Jwspzp +1VJ6jdF03OTym+uTAJ4+G5xZO8b00Yjnfx0YSyjFvOiCzIjKBBARAgCKBQJM0rRD +HxxKaW0gSmFnaWVsc2tpIDxqaW1AYXBhY2hlLm9yZz4gHEppbSBKYWdpZWxza2kg +PGppbUBqYWd1TkVULmNvbT4fHEppbSBKYWdpZWxza2kgPGppbUBqaW1qYWcuY29t +PiIcSmltIEphZ2llbHNraSA8amltakBjb3ZhbGVudC5uZXQ+AAoJEIs6YB8IyXXl +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 +kUB1vVNJvIL29/HjPSFbCZWPGFlBulwSw1YNRIxa/msV95WdvygbauaR40Rpy3Ve +OZKUm7JR+wPbbq5XHK1SK0rQmCllPwM7FqSgk3Lqs5/DrNFlXtUuk/3ZP3fTJ4MR +GgRWktjmwb342imeqi740bA4i8oBuQcTpHWmHfEBnQvvYVTqHNbXLL5lmA2TbR7a +SQWCiXmw8wk79MNWmwbTU/8RTzaRdDFwDkAhhbk3ETqe2mh9oZgaZk+ZdmpakJ4j +CN71NcKKrar3G8tyI5/aRRmJAqkEEAECAJMFAkzS47EgHFNhbmRlciBUZW1tZSA8 +c2FuZGVyQHRlbW1lLm5ldD4iHFNhbmRlciBUZW1tZSA8c2N0ZW1tZUBhcGFjaGUu +b3JnPh0cU2FuZGVyIFRlbW1lIDxzYW5kZXJAbWUuY29tPiocU2FuZGVyIFRlbW1l +IDxzY3RlbW1lQGtleXNpbnRoZWNsb3VkLmNvbT4ACgkQm7hjsPUbuIobZA//c9PV +F5LXRY1WtK7R9lM3e2nSdr7z/A5Cj4REWOTjPRMXo515XNmb0od3reGRv2yDtXfy +vyjoYA6FU7y64INBWyLWPZMW5glKEwn9ILVxdD4z3XIJFy+XNPVIRZ1QJRrcMh7B +7P4eTPQDPRKdh6xyitYsfYhqUKX/YQ2lrxqmwEPd1KMGW77rjctHJxF93YNiqvr0 +O9fYF1jeKHa4w+wjcNbCuiejAQoV6LbeggUtyk3xZWobPLQt1Lr3JG58le5TUjAX +yWPdakTGwRRx8NXUmJ7ciwLAXUaq3jNMkunQ49JHgY89d3if4yhUyko4Im8I0FE1 +eV6YFK1aaPv+e4OUCgyGeexwMTyNl/b6fnllbtupBM8sTE/a/6LbOrcnieSD+qe2 +WLptU+E+HO8S4NUUahChtvtGbgQOv8Z9xqCQUvFTxUl6P7i2u+goXSnmhT8Ajoaq +cysTPGFPHY14C6hJFIGZ3Pt7hOpcX6/weF1bF79GLbn48SVpEzafMnxIjwNfxbJ/ +MWKZtsubwfEORycasiqx6PfTR46ILZlQVWK16w3rzkz+wZAsIof48vdT4/6dYHh+ +fPxlb3hKQoXQv4x/QPPIaH6v2N6HH2GYnt5j6lg/+Sm/DaGZ1YQAmo8UVDwrkSWD +K7OfLd4A5IE7dMsk9CvXD3NZqHk1jGlPs7/Oi6iJBBwEEAEIAAYFAkzS9KQACgkQ +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 +WwGXxqlWuvNdPjMVTG17+d0Rh8SR8ykGuA== +=PPe9 +-----END PGP PUBLIC KEY BLOCK----- + |