From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1.migadu.com ([2001:41d0:403:4876::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms8.migadu.com with LMTPS id 2IgHARc052XYPQEA62LTzQ:P1 (envelope-from ) for ; Tue, 05 Mar 2024 16:02:47 +0100 Received: from aspmx1.migadu.com ([2001:41d0:403:4876::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1.migadu.com with LMTPS id 2IgHARc052XYPQEA62LTzQ (envelope-from ) for ; Tue, 05 Mar 2024 16:02:47 +0100 X-Envelope-To: larch@yhetil.org Authentication-Results: aspmx1.migadu.com; dkim=none; spf=pass (aspmx1.migadu.com: domain of "bug-guix-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="bug-guix-bounces+larch=yhetil.org@gnu.org"; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1709650966; 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:resent-cc:resent-from:resent-sender: resent-message-id:in-reply-to:in-reply-to:references:references: list-id:list-help:list-unsubscribe:list-subscribe:list-post; bh=8/uYqjGhORRsdU8T/KXNDYi+oqDuZIvYZcQPnSwtSm4=; b=TU+R24FL0Oq1+RX9BcVNdBF6l7Lf9n5Ife9jau15k2e6wOHcc0HCsr2WZYrB9iUn9vZNzZ 2GxFRrDFuj/Cb/isAsIpUZF2NO9RUGIJDx7X2uZ6ZHgrJatNVYERNBZlWyNuP4hAd805HN df5JM0fE482/LVI03rLbDtxoMximJA/c4WM28EoTxRsAyd+facRme07CpGcoSBFcPEbrpH ggKVlxCKCPeZ9tHGg1+fHu+81u/2tSoI4jWiDPHhrbx5frUUaBKPGiM3qtL1UtXDsFreM7 A0r6gKV7gGvAmNUQOHohddGMJsF8CUVUQUOojjWOYgIjmJndLG/+sTQ9e4qbdQ== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; spf=pass (aspmx1.migadu.com: domain of "bug-guix-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="bug-guix-bounces+larch=yhetil.org@gnu.org"; dmarc=none ARC-Seal: i=1; s=key1; d=yhetil.org; t=1709650966; a=rsa-sha256; cv=none; b=HI39Lm3VtrIUNPmjZIum0YxLViJrXOEMuJLnKx4+gdtInwIOzRpDghf9i13KXQsHQiZjmr n3at1FxIGm1IfE32bbgt6CSivzL6Z48ohvL3fnzJ+NDYlOfmFO23AQXdT9b4z7hM2Y6WJW GXbM4LmbVDpkNxggzMqLdITx4TRtrR1YbS+Fu8sbbZqmmL6MtwEOAA4QQufQdsc0s4KFL7 vNzeiDxwC2Jxfm60bG84y/5xjuBcwE6rv4/7FDxRqzCIX43W9DrE5DukP7UCGoh8wQ4ROT SRa3TxnMOk5seIdgkfIdGAbBq6XI3UDF2hCkt+Vi0s2vJc/YJbLgVYuwZ2vljQ== 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 8A9B9D7D4 for ; Tue, 5 Mar 2024 16:02:46 +0100 (CET) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rhWJQ-0000Ow-Vg; Tue, 05 Mar 2024 10:02:37 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rhWJM-0000IO-K2 for bug-guix@gnu.org; Tue, 05 Mar 2024 10:02:33 -0500 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rhWJM-0005Bq-Ay for bug-guix@gnu.org; Tue, 05 Mar 2024 10:02:32 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1rhWJq-0006bf-Ha for bug-guix@gnu.org; Tue, 05 Mar 2024 10:03:02 -0500 X-Loop: help-debbugs@gnu.org Subject: bug#57005: [PATCH v3] gnu: petsc: scrub build machine specifics Resent-From: Lars Bilke Original-Sender: "Debbugs-submit" Resent-CC: bug-guix@gnu.org Resent-Date: Tue, 05 Mar 2024 15:03:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 57005 X-GNU-PR-Package: guix X-GNU-PR-Keywords: To: 57005@debbugs.gnu.org Cc: andreas@enge.fr, Ludovic =?UTF-8?Q?Court=C3=A8s?= Received: via spool by 57005-submit@debbugs.gnu.org id=B57005.170965092625324 (code B ref 57005); Tue, 05 Mar 2024 15:03:02 +0000 Received: (at 57005) by debbugs.gnu.org; 5 Mar 2024 15:02:06 +0000 Received: from localhost ([127.0.0.1]:48605 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rhWIw-0006aO-5m for submit@debbugs.gnu.org; Tue, 05 Mar 2024 10:02:06 -0500 Received: from mailgate5.ufz.de ([141.65.7.212]:57890 helo=mailgate.ufz.de) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rhWIu-0006Ze-83 for 57005@debbugs.gnu.org; Tue, 05 Mar 2024 10:02:05 -0500 Received: from imap.intranet.ufz.de (dcs1.intranet.ufz.de [141.65.125.135]) by mailgate.ufz.de (Mailgate5-UFZ) with ESMTP id 7B2E71602D5; Tue, 5 Mar 2024 16:01:28 +0100 (CET) MIME-version: 1.0 Received: from conversion-daemon.imap.intranet.ufz.de by imap.intranet.ufz.de (Oracle Communications Messaging Server 8.0.2.6.20200227 64bit (built Feb 27 2020)) id <0S9V00500QHGFR00@imap.intranet.ufz.de>; Tue, 05 Mar 2024 16:01:28 +0100 (CET) Received: from smtp2.ufz.de ([141.65.7.217]) by imap.intranet.ufz.de (Oracle Communications Messaging Server 8.0.2.6.20200227 64bit (built Feb 27 2020)) with ESMTPS id <0S9V00A7OR2G8T90@imap.intranet.ufz.de>; Tue, 05 Mar 2024 16:01:28 +0100 (CET) Received: from [169.254.181.90] (ufz542757.intranet.ufz.de [141.65.235.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp2.ufz.de (smtp2-UFZ) with ESMTPSA id 52DD7E0056; Tue, 5 Mar 2024 16:01:28 +0100 (CET) Date: Tue, 05 Mar 2024 16:01:27 +0100 From: Lars Bilke In-reply-to: <65e5bfc8e0e0580eb9c86e1cc0dc8bb89b286a7a.1709650693.git.lars.bilke@ufz.de> Message-id: X-Mailer: MailMate (1.14r5937) Content-type: multipart/signed; boundary="=_MailMate_5935C150-E3B4-49BE-838C-FEA286D317A7_="; micalg=sha-256; protocol="application/pkcs7-signature" References: <65e5bfc8e0e0580eb9c86e1cc0dc8bb89b286a7a.1709650693.git.lars.bilke@ufz.de> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-guix@gnu.org List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guix-bounces+larch=yhetil.org@gnu.org Sender: bug-guix-bounces+larch=yhetil.org@gnu.org X-Migadu-Flow: FLOW_IN X-Migadu-Country: US X-Migadu-Scanner: mx10.migadu.com X-Migadu-Spam-Score: -6.01 X-Spam-Score: -6.01 X-Migadu-Queue-Id: 8A9B9D7D4 X-TUID: a0ZgjEtf3OGK This is an S/MIME signed message (RFC 5652 and 8551). --=_MailMate_5935C150-E3B4-49BE-838C-FEA286D317A7_= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable v3 of this patch finally makes PETSc fully reproducible! On 5 Mar 2024, at 15:58, Lars Bilke wrote: > 'Libraries compiled on' does not have to be removed since PETSc 3.9: > > https: //gitlab.com/petsc/petsc/-/commit/a970bd748978a4e12790be7c36b10e= 832ec0149f > > Also merged all add-after 'install phases into `clean-install. > > Change-Id: I41d82339e43187d7dc7e3fc189a338784c363c68 > > sort source files in generated makefiles for reproducibility > > Change-Id: I86e5b9cd0d7184019617bd8ae9a23eaf459891d7 > --- > gnu/packages/maths.scm | 46 +++++++++++++++++++-----------------------= > 1 file changed, 21 insertions(+), 25 deletions(-) > > diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm > index 1f61ee0583..b828d5d5cb 100644 > --- a/gnu/packages/maths.scm > +++ b/gnu/packages/maths.scm > @@ -3447,6 +3447,9 @@ (define-public petsc > (let* ((prefix (assoc-ref outputs "out")) > (flags `(,(string-append "--prefix=3D" prefix) > ,@configure-flags))) > + ;; sort source files in configure (for reproducibility= ) > + (substitute* "config/gmakegen.py" > + (("join\\(srcs\\[lang\\]\\)") "join(sorted(srcs[lan= g]))")) > (format #t "build directory: ~s~%" (getcwd)) > (format #t "configure flags: ~s~%" flags) > (apply invoke "./configure" flags) > @@ -3455,30 +3458,34 @@ (define-public petsc > (substitute* "config/example_template.py" > (("#!/usr/bin/env bash") > (string-append "#!" (which "bash"))))))) > - (add-after 'configure 'clean-local-references > - (lambda* (#:key outputs #:allow-other-keys) > + (add-after 'install 'clean-install > + ;; Try to keep installed files from leaking build director= y names. > + (lambda* (#:key inputs outputs #:allow-other-keys) > (let ((out (assoc-ref outputs "out"))) > - (substitute* (find-files "." "^petsc(conf|machineinfo)= =2Eh$") > + (substitute* (find-files "." "petscmachineinfo.h") > ;; Prevent build directory from leaking into compile= d code > (((getcwd)) out) > - ;; Scrub timestamp for reproducibility > - ((".*Libraries compiled on.*") "")) > + ;; Scrub build machine characteristic > + (("Machine characteristics: Linux-[0-9]+\\.[0-9]+\\.= [0-9]+") > + "Machine characteristics: Linux-x.x.x")) > (substitute* (find-files "." "petscvariables") > ;; Do not expose build machine characteristics, set = to defaults. > - (("MAKE_NP =3D [:digit:]+") "MAKE_NP =3D 2") > - (("NPMAX =3D [:digit:]+") "NPMAX =3D 2"))))) > - (add-after 'install 'clean-install > - ;; Try to keep installed files from leaking build director= y names. > - (lambda* (#:key inputs outputs #:allow-other-keys) > - (let ((out (assoc-ref outputs "out"))) > + (("MAKE_NP =3D [[:digit:]]+") "MAKE_NP =3D 2") > + (("MAKE_TEST_NP =3D [[:digit:]]+") "MAKE_TEST_NP =3D= 2") > + (("MAKE_LOAD =3D [[:digit:]]+\\.[[:digit:]]+") "MAKE= _LOAD =3D 2.0") > + (("NPMAX =3D [[:digit:]]+") "NPMAX =3D 2")) > (substitute* (map (lambda (file) > (string-append out "/lib/petsc/con= f/" file)) > '("petscvariables")) > (((getcwd)) out)) > - ;; Make compiler references point to the store > (substitute* (string-append out "/lib/petsc/conf/petsc= variables") > - (("=3D (gcc|g\\+\\+|gfortran)" _ compiler) > - (string-append "=3D " (which compiler)))) > + ;; Do not retain a reference to GCC and other build = only inputs. > + (("([[:graph:]]+)/bin/gcc") "gcc") > + (("([[:graph:]]+)/bin/g\\+\\+") "g++") > + (("([[:graph:]]+)/bin/make") "make") > + (("([[:graph:]]+)/bin/diff") "diff") > + (("([[:graph:]]+)/bin/sed") "sed") > + (("([[:graph:]]+)/bin/gfortran") "gfortran")) > ;; PETSc installs some build logs, which aren't necess= ary. > (for-each (lambda (file) > (let ((f (string-append out "/lib/petsc/co= nf/" file))) > @@ -3490,17 +3497,6 @@ (define-public petsc > "configure-hash" > ;; Once installed, should uninstall with G= uix > "uninstall.py"))))) > - (add-after 'clean-install 'clear-reference-to-compiler > - (lambda* (#:key inputs outputs #:allow-other-keys) > - ;; Do not retain a reference to GCC and other build only= inputs. > - (let ((out (assoc-ref outputs "out"))) > - (substitute* (string-append out "/lib/petsc/conf/petscva= riables") > - (("([[:graph:]]+)/bin/gcc") "gcc") > - (("([[:graph:]]+)/bin/g\\+\\+") "g++") > - (("([[:graph:]]+)/bin/make") "make") > - (("([[:graph:]]+)/bin/diff") "diff") > - (("([[:graph:]]+)/bin/sed") "sed") > - (("([[:graph:]]+)/bin/gfortran") "gfortran"))))) > (add-after 'install 'move-examples > (lambda* (#:key outputs #:allow-other-keys) > (let* ((out (assoc-ref outputs "out")) > > base-commit: 75bad75367fcf2c289fae3b40dbcc850f92177be > -- = > 2.43.0 --=_MailMate_5935C150-E3B4-49BE-838C-FEA286D317A7_= Content-Description: S/MIME digital signature Content-Disposition: attachment; filename=smime.p7s Content-Type: application/pkcs7-signature; name=smime.p7s Content-Transfer-Encoding: base64 MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwEAAKCCEacw ggUSMIID+qADAgECAgkA4wvV+K8l2YEwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAkRFMSsw KQYDVQQKDCJULVN5c3RlbXMgRW50ZXJwcmlzZSBTZXJ2aWNlcyBHbWJIMR8wHQYDVQQLDBZULVN5 c3RlbXMgVHJ1c3QgQ2VudGVyMSUwIwYDVQQDDBxULVRlbGVTZWMgR2xvYmFsUm9vdCBDbGFzcyAy MB4XDTE2MDIyMjEzMzgyMloXDTMxMDIyMjIzNTk1OVowgZUxCzAJBgNVBAYTAkRFMUUwQwYDVQQK EzxWZXJlaW4genVyIEZvZXJkZXJ1bmcgZWluZXMgRGV1dHNjaGVuIEZvcnNjaHVuZ3NuZXR6ZXMg ZS4gVi4xEDAOBgNVBAsTB0RGTi1QS0kxLTArBgNVBAMTJERGTi1WZXJlaW4gQ2VydGlmaWNhdGlv biBBdXRob3JpdHkgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMtg1/9moUHN0vqH l4pzq5lN6mc5WqFggEcVToyVsuXPztNXS43O+FZsFVV2B+pG/cgDRWM+cNSrVICxI5y+NyipCf8F XRgPxJiZN7Mg9mZ4F4fCnQ7MSjLnFp2uDo0peQcAIFTcFV9Kltd4tjTTwXS1nem/wHdN6r1ZB+Ba L2w8pQDcNb1lDY9/Mm3yWmpLYgHurDg0WUU2SQXaeMpqbVvAgWsRzNI8qIv4cRrKO+KA3Ra0Z3qL NupOkSk9s1FcragMvp0049ENF4N1xDkesJQLEvHVaY4l9Lg9K7/AjsMeO6W/VRCrKq4Xl14zzsjz 9AkH4wKGMUZrAcUQDBHHWekCAwEAAaOCAXQwggFwMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU k+PYMiba1fFKpZFK4OpL4qIMz+EwHwYDVR0jBBgwFoAUv1kgNgB5oKAia4zV8mHSuCzLgkowEgYD VR0TAQH/BAgwBgEB/wIBAjAzBgNVHSAELDAqMA8GDSsGAQQBga0hgiwBAQQwDQYLKwYBBAGBrSGC LB4wCAYGZ4EMAQICMEwGA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kwMzM2LnRlbGVzZWMuZGUv cmwvVGVsZVNlY19HbG9iYWxSb290X0NsYXNzXzIuY3JsMIGGBggrBgEFBQcBAQR6MHgwLAYIKwYB BQUHMAGGIGh0dHA6Ly9vY3NwMDMzNi50ZWxlc2VjLmRlL29jc3ByMEgGCCsGAQUFBzAChjxodHRw Oi8vcGtpMDMzNi50ZWxlc2VjLmRlL2NydC9UZWxlU2VjX0dsb2JhbFJvb3RfQ2xhc3NfMi5jZXIw DQYJKoZIhvcNAQELBQADggEBAIcL/z4Cm2XIVi3WO5qYi3FP2ropqiH5Ri71sqQPrhE4eTizDnS6 dl2e6BiClmLbTDPo3flq3zK9LExHYFV/53RrtCyD2HlrtrdNUAtmB7Xts5et6u5/MOaZ/SLick0+ hFvu+c+Z6n/XUjkurJgARH5pO7917tALOxrN5fcPImxHhPalR6D90Bo0fa3SPXez7vTXTf/D6OWS T1k+kEcQSrCFWMBvf/iu7QhCnh7U3xQuTY+8npTD5+32GPg8SecmqKc22CzeIs2LgtjZeOJVEqM7 h0S2EQvVDFKvaYwPBt/QolOLV5h7z/0HJPT8vcP9SpIClxvyt7bPZYoaorVyGTkwggWsMIIElKAD AgECAgcbY7rQHiw9MA0GCSqGSIb3DQEBCwUAMIGVMQswCQYDVQQGEwJERTFFMEMGA1UEChM8VmVy ZWluIHp1ciBGb2VyZGVydW5nIGVpbmVzIERldXRzY2hlbiBGb3JzY2h1bmdzbmV0emVzIGUuIFYu MRAwDgYDVQQLEwdERk4tUEtJMS0wKwYDVQQDEyRERk4tVmVyZWluIENlcnRpZmljYXRpb24gQXV0 aG9yaXR5IDIwHhcNMTYwNTI0MTEzODQwWhcNMzEwMjIyMjM1OTU5WjCBjTELMAkGA1UEBhMCREUx RTBDBgNVBAoMPFZlcmVpbiB6dXIgRm9lcmRlcnVuZyBlaW5lcyBEZXV0c2NoZW4gRm9yc2NodW5n c25ldHplcyBlLiBWLjEQMA4GA1UECwwHREZOLVBLSTElMCMGA1UEAwwcREZOLVZlcmVpbiBHbG9i YWwgSXNzdWluZyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ07eRxH3h+Gy8Zp 1xCeOdfZojDbchwFfylfS2jxrRnWTOFrG7ELf6Gr4HuLi9gtzm6IOhDuV+UefwRRNuu6cG1joL6W LkDh0YNMZj0cZGnlm6Stcq5oOVGHecwX064vXWNxSzl660Knl5BpBb+Q/6RAcL0D57+eGIgfn5mI TQ5HjUhfZZkQ0tkqSe3BuS0dnxLLFdM/fx5ULzquk1enfnjK1UriGuXtQX1TX8izKvWKMKztFwUk P7agCwf9TRqaA1KgNpzeJIdl5Of6x5ZzJBTN0OgbaJ4YWa52fvfRCng8h0uwN89Tyjo4EPPLR22M ZD08WkVKusqAfLjz56dMTM0CAwEAAaOCAgUwggIBMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0P AQH/BAQDAgEGMCkGA1UdIAQiMCAwDQYLKwYBBAGBrSGCLB4wDwYNKwYBBAGBrSGCLAEBBDAdBgNV HQ4EFgQUazqYi/nyU4na4K2yMh4JH+iqO3QwHwYDVR0jBBgwFoAUk+PYMiba1fFKpZFK4OpL4qIM z+EwgY8GA1UdHwSBhzCBhDBAoD6gPIY6aHR0cDovL2NkcDEucGNhLmRmbi5kZS9nbG9iYWwtcm9v dC1nMi1jYS9wdWIvY3JsL2NhY3JsLmNybDBAoD6gPIY6aHR0cDovL2NkcDIucGNhLmRmbi5kZS9n bG9iYWwtcm9vdC1nMi1jYS9wdWIvY3JsL2NhY3JsLmNybDCB3QYIKwYBBQUHAQEEgdAwgc0wMwYI KwYBBQUHMAGGJ2h0dHA6Ly9vY3NwLnBjYS5kZm4uZGUvT0NTUC1TZXJ2ZXIvT0NTUDBKBggrBgEF BQcwAoY+aHR0cDovL2NkcDEucGNhLmRmbi5kZS9nbG9iYWwtcm9vdC1nMi1jYS9wdWIvY2FjZXJ0 L2NhY2VydC5jcnQwSgYIKwYBBQUHMAKGPmh0dHA6Ly9jZHAyLnBjYS5kZm4uZGUvZ2xvYmFsLXJv b3QtZzItY2EvcHViL2NhY2VydC9jYWNlcnQuY3J0MA0GCSqGSIb3DQEBCwUAA4IBAQCBeEWkTqR/ DlXwCbFqPnjMaDWpHPOVnj/z+N9rOHeJLI21rT7H8pTNoAauusyosa0zCLYkhmI2THhuUPDVbmCN T1IxQ5dGdfBi5G5mUcFCMWdQ5UnnOR7Ln8qGSN4IFP8VSytmm6A4nwDO/afr0X9XLchMX9wQEZc+ lgQCXISoKTlslPwQkgZ7nu7YRrQbtQMMONncsKk/cQYLsgMHM8KNSGMlJTx6e1du94oFOO+4oK4v 9NsH1VuEGMGpuEvObJAaguS5Pfp38dIfMwK/U+d2+dwmJUFvL6Yb+qQTkPp8ftkLYF3sv8pBoGH7 EUkp2KgtdRXYShjqFu9VNCIaE40GMIIG3TCCBcWgAwIBAgIMKFSK/2W4nJQKz9POMA0GCSqGSIb3 DQEBCwUAMIGNMQswCQYDVQQGEwJERTFFMEMGA1UECgw8VmVyZWluIHp1ciBGb2VyZGVydW5nIGVp bmVzIERldXRzY2hlbiBGb3JzY2h1bmdzbmV0emVzIGUuIFYuMRAwDgYDVQQLDAdERk4tUEtJMSUw IwYDVQQDDBxERk4tVmVyZWluIEdsb2JhbCBJc3N1aW5nIENBMB4XDTIzMDQxMTA3MzQxNFoXDTI2 MDQxMDA3MzQxNFowfTELMAkGA1UEBhMCREUxOjA4BgNVBAoMMUhlbG1ob2x0ei1aZW50cnVtIGZ1 ZXIgVW13ZWx0Zm9yc2NodW5nIEdtYkggLSBVRloxDjAMBgNVBAQMBUJpbGtlMQ0wCwYDVQQqDARM YXJzMRMwEQYDVQQDDApMYXJzIEJpbGtlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA m3zCUR9nxgsrHJ+Cqnw0FiOm3FGHHmUoiJj4oLp0k0cdX7Ai1R9whcJLZObcsYwrGkm201RZt5Bb UU5D9xCpv84RH3nL6zUTVkEQofseVWXD1Ydncl3Hskv8qvh/C2FpEIVbqXviGDBjESkK+QA5UHu1 CDdc8nQi0fJWh9yKG7hGn4MahXjz6bgPAxImjab8taqnxbwLoNTi+ogZjFbt7Xe+fHWN3L6a35P4 PaLzlEA9t4P10qYa/FYPEAML8VinVPasaLw/p4tj9K+a9LXxQns3KuVnvY4vOM4fPNSk+5yOipqq oXyevjx8dnMjCTrdEOIsPmqZaU0p1dxBnarnNk6Rfq8i/kFzu8ySJ6LcwNBZVWVXqiBOxTgUqriG PPnTcT/KKayY/dpsFmbn5z0H27/ItxCxX4IwhBJvvpBTrM3cUJPCv28tz4654sVq6Ygyndv5vnn/ iooa+peMGDMgfazVxDGdW+Js/HNp1En8h4KttE5wIwzgW0HRBTD/yrXBCoX3xMEL7sm4JNcYfT2w dDttdU9LDa6Nu1mKVIIE+YZyEmAsZMpg3JqV9B7hIYU14l/1zL2GPgWgGp3LiF4uvwmr+jUfBj6k IW/Tg8dtklLor7tqPklA3iNVZCKH0jyPQ3szsic2EHs9x4HpGbwm7T23N0e1Iz7irLASEEAdflEC AwEAAaOCAkowggJGMD4GA1UdIAQ3MDUwDwYNKwYBBAGBrSGCLAEBBDAQBg4rBgEEAYGtIYIsAQEE CzAQBg4rBgEEAYGtIYIsAgEECzAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIF4DAdBgNVHSUEFjAU BggrBgEFBQcDAgYIKwYBBQUHAwQwHQYDVR0OBBYEFMSCVRA6ggxoP0SCkmTDebzHfWaxMB8GA1Ud IwQYMBaAFGs6mIv58lOJ2uCtsjIeCR/oqjt0MBwGA1UdEQQVMBOBEWxhcnMuYmlsa2VAdWZ6LmRl MIGNBgNVHR8EgYUwgYIwP6A9oDuGOWh0dHA6Ly9jZHAxLnBjYS5kZm4uZGUvZGZuLWNhLWdsb2Jh bC1nMi9wdWIvY3JsL2NhY3JsLmNybDA/oD2gO4Y5aHR0cDovL2NkcDIucGNhLmRmbi5kZS9kZm4t Y2EtZ2xvYmFsLWcyL3B1Yi9jcmwvY2FjcmwuY3JsMIHbBggrBgEFBQcBAQSBzjCByzAzBggrBgEF BQcwAYYnaHR0cDovL29jc3AucGNhLmRmbi5kZS9PQ1NQLVNlcnZlci9PQ1NQMEkGCCsGAQUFBzAC hj1odHRwOi8vY2RwMS5wY2EuZGZuLmRlL2Rmbi1jYS1nbG9iYWwtZzIvcHViL2NhY2VydC9jYWNl cnQuY3J0MEkGCCsGAQUFBzAChj1odHRwOi8vY2RwMi5wY2EuZGZuLmRlL2Rmbi1jYS1nbG9iYWwt ZzIvcHViL2NhY2VydC9jYWNlcnQuY3J0MA0GCSqGSIb3DQEBCwUAA4IBAQCKNXGlF7TWJ77tYZZ2 jCGaDb5+Eh/edygbcm8WCDfMVEYRVmOTUOcoHUHkW2gJ1TMuUlDYsA3m7wvFcbWfMXDHtO/LrEUO GFoSGuiCnzpQeX2iKRMSh7yYhLS9XGl1XE0W/C3GeaEEDKEuDYdSLy4Zd65ChxULwRgPIA8n1ixx L1KmLrjCND2Dqp/zhvyKGY3zBNAh4oOc3zqHFNHDveObV021QyXRVKQH89gEkpU4KEB6TCFDIdI2 /vSOfrgKd1Yv9m2HU1k+43Wtj7wvx7tGKXzhx4OMRiGNruD9fApVQKu1IbvRYRh8F6P2/HOD9TbC XFysJxpJpiWCojircP7+MYIDUjCCA04CAQEwgZ4wgY0xCzAJBgNVBAYTAkRFMUUwQwYDVQQKDDxW ZXJlaW4genVyIEZvZXJkZXJ1bmcgZWluZXMgRGV1dHNjaGVuIEZvcnNjaHVuZ3NuZXR6ZXMgZS4g Vi4xEDAOBgNVBAsMB0RGTi1QS0kxJTAjBgNVBAMMHERGTi1WZXJlaW4gR2xvYmFsIElzc3Vpbmcg Q0ECDChUiv9luJyUCs/TzjANBglghkgBZQMEAgEFAKCBhTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcN AQcBMC8GCSqGSIb3DQEJBDEiBCDMwexiLdreyNh9U72qdXGawLflWLAIrSBHN46TzzcxIjA4Bgkq hkiG9w0BCQ8xKzApMAsGCWCGSAFlAwQBAjAKBggqhkiG9w0DBzAOBggqhkiG9w0DAgICAIAwDQYJ KoZIhvcNAQELBQAEggIAmpqfX7cfwG4xGIPa/VQqDaj7l/ltnhaQ21uoMaIDyO1u98cmp1pChknx UnZMm+txBDHzhcrOoI8cDuiNfOIzG298fTleBlzMKe70Zh/CV4104Gq/BFyJ96dvGOly4n/VTvyM oDZDuJwShEmJoXBuZSIHHG3yA+VJxl60cM+ZrX1Mehtu8G95+Gr7Iq2pTHSe+dfdikTfeDs4ykFr QIiNjZX5aUPxvRvW1E+SOAAckDWP5wkuFQXavqIhBCw5dMtzASRE47UfbQfStYRr2GEugXB4yEtp 5/mjy4CpIgViKLUireSwVHSCTn39GvUbjlJWOP4ub5kqv1d60mjBU1dn6zRM6+p7eth1AqwT6WPO z+GcJMcm/yI1o0Wx2v3LyIHAc0pE9zhRS2Sxp5xMfC7DlZkCgOdXM45kRS8vLRXx4mawcFDYYOFU +c4iPuUCCeDU6R/GVnebMRp/VA19+CxECPPIZ+Wjzd6e8tChwePRzpTMnZnZq6+WZQVxiK1q7Uif siebAGZm3xrfJiPa8lRzQiY6M6oBUzqMRJc5z8xKa8CyZNd6uw3cgW8lfYkJpKMlE9FRxO1qvDrN cCexO3DxJ6ME0UCgP8/V99qZuN3ypFKExDZ7HKKmYLdrKQFqV9IZAxjSMXXVQ7HzxfVFEQQeeFnZ bsRbgyD3yH0KW99Wb+oAAAAAAAA= --=_MailMate_5935C150-E3B4-49BE-838C-FEA286D317A7_=--