build+ci: upgrade waf to version 2.0.19, switch to python3

Refs: #5095
Change-Id: I75429ca3617ca61769e1964f556ac5b779bf01ba
This commit is contained in:
Davide Pesavento committed 2020-04-09 21:10:54 -04:00
1 parent f291881aac
commit 5b9c85a7e9
8 files changed
+116 -97

No files matched your search

+25 -3
View File
@@ -1,10 +1,32 @@
#!/usr/bin/env bash
set -e
source .jenkins.d/util.sh
DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
export CACHE_DIR=${CACHE_DIR:-/tmp}
export WAF_JOBS=${WAF_JOBS:-1}
[[ $JOB_NAME == *"code-coverage" ]] && export DISABLE_ASAN=yes
for file in "$DIR"/.jenkins.d/*; do
nanos() {
# Cannot use date(1) because macOS does not support %N format specifier
python3 -c 'import time; print(int(time.time() * 1e9))'
}
for file in .jenkins.d/*; do
[[ -f $file && -x $file ]] || continue
echo "Run: $file"
if [[ -n $TRAVIS ]]; then
label=$(basename "$file" | sed -E 's/[[:digit:]]+-(.*)\..*/\1/')
echo -ne "travis_fold:start:${label}\r"
echo -ne "travis_time:start:${label}\r"
start=$(nanos)
fi
echo "\$ $file"
"$file"
if [[ -n $TRAVIS ]]; then
finish=$(nanos)
echo -ne "travis_time:end:${label}:start=${start},finish=${finish},duration=$((finish-start)),event=${label}\r"
echo -ne "travis_fold:end:${label}\r"
fi
done
+22 -21
View File
@@ -1,29 +1,30 @@
#!/usr/bin/env bash
set -e
JDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
source "$JDIR"/util.sh
set -x
set -ex
if has OSX $NODE_LABELS; then
FORMULAE=(boost openssl pkg-config)
brew update
if [[ -n $TRAVIS ]]; then
# travis images come with a large number of brew packages
# pre-installed, don't waste time upgrading all of them
for FORMULA in "${FORMULAE[@]}"; do
brew outdated $FORMULA || brew upgrade $FORMULA
done
else
brew upgrade
if has OSX-10.13 $NODE_LABELS || has OSX-10.14 $NODE_LABELS; then
FORMULAE+=(python)
fi
brew install "${FORMULAE[@]}"
brew cleanup
fi
if has Ubuntu $NODE_LABELS; then
if [[ -n $TRAVIS ]]; then
# Travis images come with a large number of pre-installed
# brew packages, don't waste time upgrading all of them
brew list --versions "${FORMULAE[@]}" || brew update
for FORMULA in "${FORMULAE[@]}"; do
brew list --versions "$FORMULA" || brew install "$FORMULA"
done
# Ensure /usr/local/opt/openssl exists
brew reinstall openssl
else
brew update
brew upgrade
brew install "${FORMULAE[@]}"
brew cleanup
fi
elif has Ubuntu $NODE_LABELS; then
sudo apt-get -qq update
sudo apt-get -qy install build-essential pkg-config libboost-all-dev \
libsqlite3-dev libssl-dev
sudo apt-get -qy install g++ pkg-config python3-minimal \
libboost-all-dev libssl-dev libsqlite3-dev
fi
+19 -20
View File
@@ -1,12 +1,7 @@
#!/usr/bin/env bash
set -e
set -ex
JDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
source "$JDIR"/util.sh
set -x
pushd "${CACHE_DIR:-/tmp}" >/dev/null
pushd "$CACHE_DIR" >/dev/null
INSTALLED_VERSION=
if has OSX $NODE_LABELS; then
@@ -22,35 +17,39 @@ if [[ -z $INSTALLED_VERSION ]]; then
INSTALLED_VERSION=$(git -C ndn-cxx rev-parse HEAD 2>/dev/null || echo NONE)
fi
sudo rm -Rf ndn-cxx-latest
git clone --depth 1 git://github.com/named-data/ndn-cxx ndn-cxx-latest
sudo rm -rf ndn-cxx-latest
git clone --depth 1 https://github.com/named-data/ndn-cxx.git ndn-cxx-latest
LATEST_VERSION=$(git -C ndn-cxx-latest rev-parse HEAD 2>/dev/null || echo UNKNOWN)
if [[ $INSTALLED_VERSION != $LATEST_VERSION ]]; then
sudo rm -Rf ndn-cxx
sudo rm -rf ndn-cxx
mv ndn-cxx-latest ndn-cxx
else
sudo rm -Rf ndn-cxx-latest
sudo rm -rf ndn-cxx-latest
fi
sudo rm -f /usr/local/bin/ndnsec*
sudo rm -fr /usr/local/include/ndn-cxx
sudo rm -f /usr/local/lib/libndn-cxx*
sudo rm -f /usr/local/lib/pkgconfig/libndn-cxx.pc
sudo rm -f /usr/local/lib{,64}/libndn-cxx*
sudo rm -f /usr/local/lib{,64}/pkgconfig/libndn-cxx.pc
pushd ndn-cxx >/dev/null
./waf configure --color=yes --enable-shared --disable-static --without-osx-keychain
./waf build --color=yes -j${WAF_JOBS:-1}
sudo_preserve_env PATH -- ./waf install --color=yes
if has CentOS-8 $NODE_LABELS; then
# https://bugzilla.redhat.com/show_bug.cgi?id=1721553
PCH="--without-pch"
fi
./waf --color=yes configure --disable-static --enable-shared --without-osx-keychain $PCH
./waf --color=yes build -j$WAF_JOBS
sudo_preserve_env PATH -- ./waf --color=yes install
popd >/dev/null
popd >/dev/null
if has CentOS-8 $NODE_LABELS; then
sudo tee /etc/ld.so.conf.d/ndn.conf >/dev/null <<< /usr/local/lib64
fi
if has Linux $NODE_LABELS; then
sudo ldconfig
elif has FreeBSD10 $NODE_LABELS; then
sudo ldconfig -m
fi
+11 -6
View File
@@ -1,14 +1,19 @@
#!/usr/bin/env bash
set -e
set -ex
JDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
source "$JDIR"/util.sh
git submodule sync
git submodule update --init
set -x
# Build in debug mode
./waf --color=yes configure --debug
./waf --color=yes build -j$WAF_JOBS
sudo_preserve_env PATH -- ./waf --color=yes distclean
# Cleanup
./waf --color=yes distclean
# Build in release mode
./waf --color=yes configure
./waf --color=yes build -j${WAF_JOBS:-1}
./waf --color=yes build -j$WAF_JOBS
# Install
sudo_preserve_env PATH -- ./waf --color=yes install
+14 -22
View File
@@ -1,34 +1,26 @@
CONTINUOUS INTEGRATION SCRIPTS
==============================
# CONTINUOUS INTEGRATION SCRIPTS
Environment Variables Used in Build Scripts
-------------------------------------------
## Environment Variables Used in Build Scripts
- `NODE_LABELS`: the variable defines a list of OS properties. The set values are used by the
build scripts to select proper behavior for different OS.
- `NODE_LABELS`: space-separated list of platform properties. The included values are used by
the build scripts to select the proper behavior for different operating systems and versions.
The list should include at least `[OS_TYPE]`, `[DISTRO_TYPE]`, and `[DISTRO_VERSION]`.
The list should normally contain `[OS_TYPE]`, `[DISTRO_TYPE]`, and `[DISTRO_VERSION]`.
Possible values for Linux:
Example values:
* `[OS_TYPE]`: `Linux`
* `[DISTRO_TYPE]`: `Ubuntu`
* `[DISTRO_VERSION]`: `Ubuntu-16.04`, `Ubuntu-18.04`
- `[OS_TYPE]`: `Linux`, `OSX`
- `[DISTRO_TYPE]`: `Ubuntu`, `CentOS`
- `[DISTRO_VERSION]`: `Ubuntu-16.04`, `Ubuntu-18.04`, `CentOS-8`, `OSX-10.14`, `OSX-10.15`
Possible values for OS X / macOS:
* `[OS_TYPE]`: `OSX`
* `[DISTRO_TYPE]`: `OSX` (can be absent)
* `[DISTRO_VERSION]`: `OSX-10.11`, `OSX-10.12`, `OSX-10.13`
- `JOB_NAME`: optional variable to define type of the job. Depending on the defined job type,
- `JOB_NAME`: optional variable that defines the type of build job. Depending on the job type,
the build scripts can perform different tasks.
Possible values:
* empty: default build process
- empty: default build task
- `CACHE_DIR`: the variable defines a path to folder containing cached files from previous builds,
e.g., a compiled version of ndn-cxx library. If not set, `/tmp` is used.
- `CACHE_DIR`: directory containing cached files from previous builds, e.g., a compiled version
of ndn-cxx. If not set, `/tmp` is used.
- `WAF_JOBS`: number of parallel build jobs used by waf, defaults to 1.
- `WAF_JOBS`: number of parallel build threads used by waf, defaults to 1.
+2
View File
@@ -16,6 +16,7 @@ has() {
set ${saved_xtrace}
return ${ret}
}
export -f has
sudo_preserve_env() {
local saved_xtrace
@@ -35,3 +36,4 @@ sudo_preserve_env() {
set ${saved_xtrace}
sudo env "${vars[@]}" "$@"
}
export -f sudo_preserve_env
+12 -17
View File
@@ -1,5 +1,6 @@
# ndn-traffic-generator: Traffic Generator for NDN
# NDN Traffic Generator
![Language](https://img.shields.io/badge/C%2B%2B-14-blue.svg)
[![Build Status](https://travis-ci.org/named-data/ndn-traffic-generator.svg?branch=master)](https://travis-ci.org/named-data/ndn-traffic-generator)
This tool is designed to generate Interest and Data traffic in an NDN network.
@@ -8,25 +9,20 @@ used to specify the pattern of NDN traffic that is required to be generated.
Sample configuration files are provided which include instructions on how
to configure various parameters.
## Prerequisites
Compiling and running ndn-traffic-generator requires the following dependencies:
1. ndn-cxx library <https://github.com/named-data/ndn-cxx>
For detailed installation instructions, please see
[`INSTALL.rst`](https://github.com/named-data/ndn-cxx/blob/master/docs/INSTALL.rst)
2. NDN forwarding daemon <https://github.com/named-data/NFD>
1. [ndn-cxx and its dependencies](https://named-data.net/doc/ndn-cxx/current/INSTALL.html)
2. [NDN Forwarding Daemon (NFD)](https://named-data.net/doc/NFD/current/INSTALL.html)
## Compilation & Installation
./waf configure
./waf
sudo ./waf install
```
./waf configure
./waf
sudo ./waf install
```
## Command Line Options
@@ -58,10 +54,9 @@ Compiling and running ndn-traffic-generator requires the following dependencies:
* Please refer to the sample configuration files provided for details on how to create your own.
* Use the command line options shown above to adjust traffic configuration.
## Example
### Sample Run Instructions
##### ON MACHINE #1
#### ON MACHINE #1
(NFD must be running)
@@ -69,7 +64,7 @@ Start the traffic server:
ndn-traffic-server ndn-traffic-server.conf
##### ON MACHINE #2
#### ON MACHINE #2
(NFD must be running)
Vendored
+11 -8
View File
@@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3
# encoding: latin-1
# Thomas Nagy, 2005-2018
#
@@ -32,12 +32,12 @@ POSSIBILITY OF SUCH DAMAGE.
import os, sys, inspect
VERSION="2.0.14"
REVISION="e67604cd8962dbdaf7c93e0d7470ef5b"
GIT="353ffefa21e6f8795469d118d8059aa16ef49109"
VERSION="2.0.19"
REVISION="1f3c580272b15a03d2566843c5fe872a"
GIT="61ee22b598cf80e260beb64e475966f58b304d0d"
INSTALL=''
C1='#('
C2='#&'
C1='#6'
C2='#.'
C3='#%'
cwd = os.getcwd()
join = os.path.join
@@ -140,6 +140,9 @@ def find_lib():
if name.endswith('waf-light'):
w = test(base)
if w: return w
for dir in sys.path:
if test(dir):
return dir
err('waf-light requires waflib -> export WAFDIR=/folder')
dirname = '%s-%s-%s' % (WAF, VERSION, REVISION)
@@ -165,6 +168,6 @@ if __name__ == '__main__':
Scripting.waf_entry_point(cwd, VERSION, wafdir)
#==>
#BZh91AY&SYCU ÂT>ÿÿÿ´Ðÿÿÿÿÿÿÿÿÿÿÿ5 ‚Ä£ 0�™E€(b|s×¾÷ˆ#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%[yõË™JÕ…¬Ã»ì#&´ûnÚv¾ÝÓkh3cÎ5We©‰#&[r}à³O4Ù+±ºwaÚ5<óë¾ûp9—[uÌ=Û{JQ¶Ý—»×…½¹ëݯ@ËÒlvÎuo;ÁëÝ�ß{»®;jTn[÷lwªÜ2{€K)Ùëç½Þøô·Åö¶ÕïznS‘¾·­Þ÷½÷Ž#%#%#%P#(;ììhÓ€'ÞÊ#%÷Š:eïo0 Ù뽤#&›v=]¨Ãc[4¦€-€§¬ímßJ=:#%tô��»d*Š#(P£#%P‘D©R(îàäQ$#%#()è�E”¡ÞÃׂõƒß|ÏyÖ“±ÚŸkT®Ç¹ïW·›¬Ô´ëŠ•Nlºd•Ûw77ÓÔí¥íÝlú#&uÞ>ûªïîïví•yëog®»Ïqõ®½>ìyï}íÙ¾ÝßuöOm±ÖJg¾ç¼M÷;ëÝ·º»Ùï¾ô{îßEç êÛ¬µ…Ö@¤$!ì^ÁÌÝ#(wg¶w™ïvǽ½ïyc£$¡Û]ÇGaä\ÚbR‘ÛΦ h#(’‚H¢)G» ô:oniÑJ]ë�Q!{·z ¤}ÀíïióÝï7olQè#&#%úÒÓµµ®îSï4Y`;ìí�€ßužx§s{ØÜÝßa�w:·§ß=ñéã§Ï=Ü{³ÐÙŸ{‡¾ŽŽ85ͳl¾u¼÷>{‹«íÝbÇv�ɺscu¹Îòîj{77.7rÝÝ{{­¯oxnGu}}ÊÛÓl4ÕfŸw¾ûï¾Ï­wØeð�<šÜXQO+km«ÜålùêR[^ì«Ý8ùöoO»ÛWwu«jößOZÝÄÇÞÓª_{ºõ³íµÈ{²=ÝãÛ3O¸çK£ÎÌ#%;®o/wœkîîîöó©kp(¥#%¨•Tª*ŠA¬ƒ­;­2#(µ­¶ª.í÷»Ôë±ÓÐ7Y¹›µN‡½µî�ÇFª»“SÛǼԪï^ÛÚ†„Ø÷3®æx#%{�v #%kÞêå¹›¼Nû}Ï”•×w6Ù·3FWagÝçwe¬ï»xîwPØúÒ킟{¹ë}™:­3j¹ÑwÛŽ¦ñ{c;úŒçs5Ï%Z ±î²ÃÖ%ÚÌÃ{{ÉæªOD»Îºsho1Ï—žÇÏ·pmvêÛ¬Ú]ܽ«ÅÍ‹ßoîÍëÖî¹ñiïnã¹N7kœç …j[b¢÷p(ݺ2–}áß·; Õ°lªsäܯZµ³qÍëzÞûjsçØ€öz8 æÚSÝÞÆF™£¦ó®>Ï=0«Þ™w�¬îî×¼v/s’êÚ×ݬ�½Þû�Óêµ–©l�ºgÐh[µƒ;±Ž)mNçX7í@!Ý£s¬½½Þ]çßk°ÛÈ=Éf=½wö#%(r8y5íº^û¬÷¹ÀØ•#(hMëÛ½ݭ¶#%›½Ú¼måvÎîêàc0ÞµÚ¹«\íe»Ûº¤”.]»­i'YM;¶5œ¹˜êfÞ]í’^7gœ½¾Z¯�{ÛÕñ{çÛofÁ—£à„(ž”ɼû¼BöóvŠ×½·³"v²Î­××»rï·ÒûÖÖÙ¨îï·½½Ÿw=7“À ã_¸i¢#%€ #% ÈÐÐ&FƒBi¢m)éª='© Ä#%h6 õ7ª~”š „Ð 44&I„Ȧ`$õ#&2yMÔê#%#%#&#%#%#% ˆ ¢24#%Š~“%?)i“D~¥Qê6Qê§©§© Ð#%#%Ð#%#%'ªRD#S ¦OTõG¦�ª{T~¨0€=@d#%2††€#%#%#%#%#%D‘#%hÐ&&@ F™=™#&'•?MM&€4 €4#%#%I¨ˆ #%�4M4š§å6…OÅO£ÍSj~©ú5OÔ‡¨ôÚ§© #%#%4#%#%åÿòOôê­w?׋mN¿‡U¥Ñ &LWÆ«]º$ ¶Å¦ÖO}UµÊ«TUVû¶I?Iú�Ý?_ííeý²¹«½Íl¸–“M×·¾4á5�ñ#™8—tÍÜã�8|,çû£ûOøé|@²Á@ÌAÎ"Ð Ö¹¦&ɪck(Gã¨Ji:÷ubá‘¶ôÛ# ]ºøÙUƒ"ÂruN¨‡�Þ°ªpäÅ]¥ 2ëSMRÝ1mgº„!_·�rý"WA„ƒ–Ó6Êåv«MkY6Õ“R�ˆªH*HȈ#&À#% Q$P�Ã�”-"©™Iˆ„T `"T ƒb#(„"{n›kÍZÚ[jjî‹b±W´Ú«mµðÚÖÖ©™2J35#&3M‘&0H¤ØÚˆ™š„K#%š”£J)¶“a‰š$ÐJ2Zš�± ÂÚ3IdÓH�Ñ•¤MJPH´jXИ²¦Ñ¢)6KFÔE K-)¦´@Ä,´†ÍÁ”ff1©#Q¨ÚŒ“A¥6C¡-1¤ L4ie¤c)KF¦›"[JÚËmhfÄ–32fBhŠ ²m¥¶šmjJ6Rjkc-M¶fÌ´™&b(6#f´ÄÑd¢‚™l‰„H¨³HÚ)0*$°lRTÂ3Jˆ‚¥16!PH‰,@´2#$�©!Xˆ!¶f†DLS Ì‚–VX31"’ÈÄRɬ›5…H± –R4ZSLbJLŠ2‰4dÐÑ“#(’�"QI²#(lh’,E2–�E3ØÖHfÄIŠhfl µ%€Iea°"II±¨"MIE$IQ "Q ŠEƒ0Èc$¦„Ê)%&¢ÌØÑ¬&É©"IˆD%¥6@�‰"Él@I‹,Ê)2J&ÌÈØ‰›")FlŒÁ2©¦$„YJ#&š‹dƒM461©Y,‘±D© ‘M$ÄR%M2�’jIeA�F“4�¢€‚)¦Š&µÀbe”K#!²RdMÓ)£Fa3iB“Á™H$$Rf0"HÆ‚%’a1A$Ê™•f(Û)lJ"fCR)ˆR#6,¡YM$QF¤’M’1±Œ›4�LÑbÄe$)33²2³i„¬D`ˆ¢JM52i™!Œ¢) 4EMŠ,Ô©JJh¤6FLdȦÒY#£)!HŠ,U’bI4¦Ñ¤Ôi(ib1 ™Q¦™h4lf ²I”b,i!fD›%)ŠQ…šd%¬Ù±µ’Àd�ÒY1�ÕAh$MaH“!�ŒÄƒÊ#&IcQe‘(š0Z”Ò�E©†„™”˜¦dÙ”Á"–hÓ,!¨(M&R"CDÛjVÖŒ(MLÑ”ÈÄÒŠI™ Ô¥°)f‹1I¤e e•6h‹S-¶Q‰ Sb!J#4Œ#HJm~ók¢¦©aˆÍ¢ŒlVÆÖ*6L¦i¨¥I4hii Q°�’j6²##&CIŒ£$YL©"Ùf&f™l–Ñ™)lmE!hɦ,Mf,hXÔ‚”´Ó&L©5ÆÊ´�6PŠÙ2ȪU+0¦ÍŒÆf­‹DkdÓ+"TË)µ’¬¶R”Ó#[#@d¤mEŠk,Ii ”µ¨*£j5hÉPQU’²QµFÑQR%Ñ4DÉbÄZ1bµhÚÆÀZL˜X* 4ÀJ)±£ L“JÓX‹cFÓ±‹d‹i Úªšµ–* ”ÍKY4IR1!M¤Qd�­J³lb”ÚU,¥L²ÃjšDF¶•K"e5MM¶„”Êk,hl²[+,…lÓ  ¨ÒD…Š"Å�4`b$H†ÐhLb�P”JŠ-EdšhÙ2i(² ›,R)²�4lˆ¬² ÆS1(RQ³LÐ1‹L�ˆÍ¦ÒbˆÆØÙ#(a¦@Ć1£%bHÌÔ#!4LÔQ¢JdR�–P5BTÀhÒcL%*e’QhÈ@Q™µJ6e$”d#&#(CSXˆ¦I¢1©6KÐY"ËQ’ÑCAb�ÌI£E™M™IK)Y†JÆY¢ÉƤZ�Q³Z3DT4T¦“a¦*X¬Ê-F�#!&@˜È4ÄØ’¤©2†6SLl’™l”¦¢°m˜lÒY63I£FÌD¡¥-3ZÈ�4*fˆK HˆA³f†4mšFÅ k4›%1 4”��Z-ÂTj5b±‹Ff°Òa¤“B…“#c¢Ø£`KAY¦Éd3(ƒb£!²RÊJ™m@F±ª5Dš(L²¨ ±Aš“Tl0Ä,#¥(jÆÐiM2ÈQF‰"©’Z �Qb,FR¶È©EQ¬i0DY4E3(Z”R’‰*lJ"fÚ¢5`ÑS*,•FÅšQl™+Ö“•”Û"[&ÆÐÑ6ILƒ)QaA±±²Q²h’#¶H�ÔRL‚#&Y“‚SflLE5�QS+&³#HSI5EM6¤¬[)%�“�¤Á’V¤F‹K-C-D–‹TUŒ¥I­‘*�±©(±H¦„ȦFdf4ÔˆÄjfÉ3Z#b©,[F¤©eY5¢fÔ-�DlldЍ¦U4«Fѱ¶Æ-©3J!,ÖV%¨ÅbÍ*6¢6•*)MiFb¡HFÊ�’£I¶5‹2¤‹RVÅ“l¤ËQ¢±#&"ÑI�FÚÛ-«‰•#(‰‰(ŒT0’Æ�Ši&ÔÃ%XÛØ´Í[F5¬´•42ÖÊY6ÔÔÛ!mFš±4eDhÈÚIEÃY©5&fË*"�#&D˜’L¤™‘ˆÈE²[R,b¬dÿ— ÿ’?ðˆvCýaþ?ÝR_*tÓ#þXt¸ÿ²Ž9hË’�÷‚áÊ�- �MŸ Ï;oô|ìoNoèC¯Kze5#q’ö/‹U6»ø#mz 3¿ûÓŒJ04P`¸tq�Ká‚’AÉÙ0U#wÃcDãû•HÿǬ3ÿ¿õZÑÿÂI(R×+ˆRÒXHÄ_G=šÅ·8=EZM‡¼íõb8ßwpu-,žë£’fêe»¨ÕrpáòC65%"†É8¡·'%ŒGøëvÍš“…Z�FFcHí.Ùf2cD«Dvrhë²w�Ò×.ôô«Ô¼k–s¹eþƒ¯>ÇYœÕÈ$Øu¨S «Åš&U;1¥Ì R¥!H‘a"F(MîÛ©Š•Ò2Ö‰M^<ëµ ¾-Ë#+ÓsI Ñ`ÄÅâÃ Š k{—¯ýË,?ÐÀ7p‡ Ó(°R;´)L7acƸ¾ÿW)-ˆÆ)?oú=ì¯Âú˜­Díz6"Ša…6…"ÉßË%cü\È›3såÌm46'š©3Æ�Û¹rýQ‡jXœ�ж (D0šV+Ä÷«=››No¹Ê.U!Ù6ý»ÃÀÛâÄÕªÈņ{w�×”cœº.â™\Û¥�ÔUͺyÜhبŸŽëå5¼Z4E‹}ÝÕô¯Ò¯æ[‘L¯‹‘m�ÎCú-Ö¯¹¸|~ž¤BXxxf{Úy2ÄFm˜ôÓ²!�·ÎêŽ\º  Œ‚ƨ¤ `Úï9ÜxIoRŒ¬#[aDMuÊï;±¹GJåÌ”e×t’9Ì…ö5·—�µ�w—Áu5JŠAТ¤E†)¡�Ûc.™8ŒµbÁ_U£è†Ÿ±Æ˜ÚŸ“Óx ‰_ô¨¤Ù‡=0Z¬@Gö!€dž%lþ„Õ€¸IK��õöbÐ1Ñøha»$ïè (BI‰ŠÊ‹|Ù{+âdu²ïæñÅËG³^ýzÞÜC³Uá�Û^?¦Ë<ÏÃ#(q«ƒ-ÑÄe''Vv¦ŒœÙ%ó¯U×e™•‹ÛÏ[Â}|H<j¢”øtú_£žWÐÁíNÍÚÝ95õT)",m S!ÈY©Ú›¦tj#(M4+É1e)Õ–Ód|(*ô¡ã¡e³,YL#(N�*}±ÆyÞ>�Ë:«”‹×Z6LT >¼]Á¤¤Rm<‘_ƒ(Wá#&^�adMŽCRßó°ôõÛÓçLžë ÉŠ_>ºü½tdc¡ð ±#&ó[bV¯DFÆ ‚¥#(¢hÓ£/8‹B«rÐ"cÊ¥^ÚV6V¾Õ0ºR…A@P e$FËd#(d‡ýo²¬A`÷´ d2…xPPÅcôðþ+¹¢) ”È ¬Uç·ö>mzm"c”ÔR|;·+½Ú€J†’R)Ýt‰¢rºÊREÂà”\×5±yßnõêò e*ÉP÷»–5ûÒÝ{»o\clP›éëßáëx§¿wG\ÆÅ£dÛè}öñ�A¤·åtÐ'Ã=.Æ^O~ù¦KæÈ²"4£�~$–�ßPåÌ Â#™­lÕŸrI„C>×gÙÖÝ”25“b¾¾ê¾/��I\÷²ðÑ$ZA`°Õ¶K ¤i(bÒC‹i¶¤ZÓ¡—CÕGƒ�ÒŠe¤º«JEvï«YøÕ©á¥.þ”äå—§u– XEFœ#((SfˆZjÒAS¬¾wPJ» *”Ó#(dÛKMZûÒ—ucg¤"üØNýèV›lV'Tžlµˆ�$#&.Ž”Tä…O7ØÇ«ƒ¦ìãˆúÇ0m‹Ña6¹wLine truncated
#BZh91AY&SY9 ½´\¥ÿÿÿ³DPÿÿÿÿÿÿÿÿÿÿÿm (¬#%0�0e€(b÷/mЀ#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%öÞúzómmkîÖZžÞæ—²U#.´[iÚ¾î�õ¹±µ–ú:¥'kd‹î7{ÛïoºµÛ¶ÖµK“¹]Øvµ'ÛßO¾ö¸gv÷s½÷¶N)#.Q+Ù½íp·µÞ�]/{mš»<{guÒ‹@Ýó{§«�vo;¾ø;ŸvÎiîáÉî44lºï{ß|ûëËßÚU9íõÝŸÝšî·¯y½÷½x#%#%@(}ìh#%` ï²€=â�wfí˜:4§[aÓ¹½ y©³A¦€‡¸ê»´ö4=¦öìd+Ö¨ª)ífš0#6 *”¢”{ƒ’�Q$#%#6#%YJ�zÚV½ƒ%çÍíîæ}»�j½êºa’ïjÚØá3TTf˦Iv×]s}6óu7¾÷z:#.ÎxûÝW_=³ÛzÖ­åZ;Û»ÍÝÛ}Þsy¾¯³»ß{¸ûížÖîiÉÔ÷Ëzõ¶§rç>^æû}ñ¾íóÛa zúz{x¹-ì�z̀ݳ­Ö²4÷³¼ÛÞ÷fÞÏs¬ô`u¡ÒãF°Û"’EE7w¼#%(J*’OCÀ#%lîè•=÷n{Ywº¹½»ÐdÜ öï>}Ü[vÇGÐ`>†ÛEmk®¥ÑMã�W`×LæyÛãÚ^u½#%}�÷aŽît;o¶û}|{mçO—vpòǼ΀Šo·*WµíƘܶ2>öí®®òÏŸwÖõ»]´î;ºjîí9QÚt×·Zt“ž>÷»Ü®¨ÜÙu÷‡ß|}í­«×ܬ‰&ÞíN«îq\îû½:¾Ã.ñŽ^ÙéyaC§¶Ó¶Û›—³®÷Ð¥&nCzî¤|öilöͶíÝîвë[¸˜÷»³Ûºû5ÖkoX«èqØ—nöÐl­îõÞÞ/`{´žó½wÌ>ï†Ðê¥PJªPTT´jB¹7uÐv�&i¶v­Üèº]vú‰Ý›:kÛkÔØëUUܘ{x÷š)º¼»HЃºÚɯfw€#%7ZI#%#%;Ü^êåÉÎó²û3ÊF-Ÿm½ÜözÔíÝ™Üì_U.us[›¶ õv]]ó¸|˜Hû†,ÍqÑ»ÝÁæñ{c;úŒçvåJº{+¹éÔ²õ§l÷+ªWg¡»`úùÛÙ;{n#î²Ç]÷}çww»{»»xîvÛ#.¾Øú½mÝEfù‡"sž¼ï¯¼ùÚÀ°ËlÐú$/g¬íÑ”x<ïÜë°VØ6EÇ‘µÞ®ÚGxO{×>öø½ïwÞ´#%À*×Û;Fªµíí7¶;g�<�ÂÀëu´oSk´Ý­ëÓ­mï 9.ó’®Ú×ݬ» ݾçwÅówwtåvë¥Þç:#.[.ëwc Ó‚àéÕhÁ”gu“½Þ^ïŸnØu¼�ÓÐŒ…/=ÝÚ4#%•c�¹éî½Mö{ÜàìJ…U )½{xW»´×`ï{®ñÝÊäÅÖÃV¶•U[}÷IzovƒuÇH*Ší·u­$ëIÒÖªîúãÞncÚ[ÓµŽÛ× &Æ»»}öøø‡½óí·³acÜ| ìÁ“G»îñÌͼÜ&:·»}½í6µî�Ðíç;ï¹ßvÛRÀîï·Ÿw}-âò�ó[ãnh€ &€#%&€ £CBa0š#.#%‰ä™PÏTz†Ðš#%õ§’{SÔõA) B @†@©©á$zzI☠é4#%#%#%#%#%#%#%‚D!  M5TÿMŠoU<ÔôzTý(òÔõ)é¨mG¨#%#%Ñ£@#%#%'ªRD!4dÐODõ$ÙOFž¡£õM#.€ò@#.Sj#%#%#%#%#%#%$!#%&@bh&M#%M#.4SÓiˆŒ4 ¢ #%h#%#%#%I¨ˆ L˜#Až€&Œ¦�=&”õmêˆ{SIé” h#%d4#%È#%—ÿÓ?£Uirê\ÕQWwk¹úµZvhʃ>5Zu!LA³ ,L•Q*"€)æ°Pcõ§óü Zü“•5OùÓ¦¸ üæJt¦î£Ä‘8•WoT"¢]^SÌÆ´_3ý†os2ì ÀlDs‚4;m»qE6­›®ñ‘ÎÊ­´ÚMí˜ÖØ`Vd…â]jíâ—˜•5o‚# åñ÷UŒI7wD¼áÌKUå¦/žÝ~«oÔB�äE"ªSº»U¦ÖÖ5k3khÈ‹ €7#%H*-E Õ:¥”$HŠ&� ˆ" HåP° !ß#%hŠ–‚¡#%ª$@d PÉ@mªfL…’ŒÍCLÓd@M$Rj6Ñ35–25)F”Sm&‰š$ÐJ2Zš�Q°h[Fi,ši¢Z!#.F)iM€F¥� #.1eM£DRl–�¨Š–ZSMh�ˆYi#.š ƒ(ÌÌcRF£Qµ&ƒJl†BjcI@˜hÒËHÆR›F¦›"[M¶³U´i˜’ÆfLÈM& ²m¦ÛM6�5%)-5±–¦Û3fZL“1‘f´ÄÑd¢‚™l‰B!Qf‘´R`4TH!`ؤ©„f•Jb0lB ‘X�hdFIR&B4±ClÍ ’&)BF�RÊËf$@ÒYŠY5“ccE�#6‘d†K) -)¦ ±%&EDš2hhɉIF‘(�$@VAM�Eˆ¢fRÒ¦`›É ؉1M Í‚ab6¤Ø–V‹$”›‚$´”PRD•’%¤Q0Ea�ÆIL# ”&RJME™±£XHÒjH’b iM�$"H²[bË2ŠFÌ’‰²™3bdE(Í‘˜&U4Ä�‹)A³Q`,�i¦†Æ"5+%’6(”R"šIˆ&¤a³L�cI¡ &¤–Q”Ôi3HÚ("šh¢kP,&YA¤²2‹%&DÐM2‘*4f6”)1¨6ÄÊA! "“1�F4,�Ë ŠÙ&TÌÕ˜£l¥±(‰™#.H¦!HŒØÐ¡YM$QF¤É&ÉØÆJšF¦h±b2’™˜²2³i„¬D`ˆ¢JM52i™!Œ¢)#.š1Sb‹5*R’š)#.‘“2)´…HÅ(ÊHR"‹E$˜’M)´i5DŠFÀ˜Œh&Ti¦DÚ#.ƒ,„Òe‹DÈY‘¦ÉJb”D!f™ k6lmd°$4–Ld5EPZ XR$Ècc1 Â2ƒRXÔY¤J&ŒE©M(Z˜hI™IŠ$2ɲ#)‚E,Ñ¥1„5„²e"$4M¶¦¶´`™BjfŒ¦F&”RLȈ­¥6À¥š,Å&‘”%–TÙ¢-L¬-”bC؈RˆšD#HJm~Ãk¢¦©aˆÍ¢ŒlVƶ*6L¥4ÔR¤š44´…¨ØFÉ5Y†¡¦c(ÉS*H¶D‰™¦[%´Q‰IKQµ…£&˜D±5˜±acR#6e¥™2eI´*Ò4TÙB+dË"©TÒT›63š¶,Y­“L¬‰S,¦ÖJ²ÙJSL�l�’‘µ)¬±%¤2RÔZ ªŒ!¨Õ£%AEVMd£jŠÅEH”kDÑ$m‹hÅŠÔl2ѵ�€´™0°U@i€”R £F2™&•¦±Æ�¦&±‹d‹i Õª–µ–* ”ÍKY4IR1!M¤lY"¶¥Y¶1Jm*–R¦YaZšDF¶•K"e5MM¶„”Êk,Xl²k+,…lÓ  ¨ÒD…�bÃ4˜‰!´…-£T%¢†KQY&š6LšJ,ˆ&ËŠl¤#."+,‚E1”ÌJ”lÓ4 AE¢Ó$&Fm6“F6ÆÈS¦™cE%bHÌÔ#!4LÔQ¢JdR�–P5BTÀ4˜Ó J™²Bj-#636£)F̤’Œ�£!HbÊkÃi4F5&Éa $YP…-4) Äš4Y”©””²•˜d¬aš,‘± jE¨Õ5£4ECF¥)6b¥�fQj4  2ÆA¦&Ä•%I”1Ršcd�¤Ía)ME`Û0Ù¤²lf“E�˜‰CJ2Zfµ‘hTÍ2–H’l£0D2hªih�¬Òl”Ä,LDÒRBAh´[ Q¨ÔQŠÆ-–ÃI†’M#6L�ŒRˆ#b��-f›C2ˆ6*2%,¤©‘Ñ´k£TI¢„Ë5EŠ$Ôš£PdðŒj”¡kA¥4Ë!E$ЦIh‚5Eˆ±JÛ"¥F±¤ÁdÑÌ¡jQHfJ$©±(‰•j#V#.2,Y*6Œ)‹4¢Ù2V-­&)+)¶D¶M�¡¢T’™R¢Âƒccd£dÑ&#¶H�ÔRLÁ¬ÉƒA#6�)³6&"𯍩•“Y‘¤)¤šŠ¢Š&›RV-”’ÆÉˆ£F‚4˜2JÔˆÑie£he¨’Ñjб”£i5² …Q¶5%)ЙÈ̌ƚ‘�LÙ&kDlU%‹hÔ•,«&´LÚ�1lj £cc$UE2©¥XÚ6��¶1mI˜ÊQ f²±-F+iQµ´©QJV”f*šB (4X"J�&ØÖ,Ê’+I[M²“+F�bbÑI�E[l¶¬R&T*&$¢1PÀ"CF�Ši&ÔÃ%XÛØ´Í[F5¬´•42ÖÊY6ÔÔÛ!mI¦¬ME26’QA°ÖjMI™²Êˆ B¢LI&RLˆÈÄd"Ù-¢Ñ‚±“þn··ýÔ¥C)þB51jÄÿTqôe+(a(Æh”‡÷!þ§ ûbåÕ LÿL$hÒlùNzí¿Îó±½9¿‹øºô·¦SUIPª?ë[ŒlÈŸÎÿ·ÖYLâsÈ †ßùë;�L(0\:8À¥‰pÁI äˆd˜*ƒ‰Ãß±¢rý*¤çÿœ3ÿ³ôZÑÿÊI(R×+ˆ½”g™,$b/­Í0ÿ-‹npz%ZM‡¼íõâ8ßwB¹ÁŒ¨d~Ë Õ‹NØœ“ÆZþ,3cRR(l“ŠrrXˆþúݳf¤áV…cÈÌ`I¥Û"lÆLhƒcôzç““G]“¼î�˜Þ¹w§¥^¥ã\³�Ë/âuçåu™Í\‚LŠëP¦"W‹4LªvcK™@¥JAF&Ä“M‚ê×bÈ‹Ò3ˆ(êñç]¨eñnY½74h6 m `Ù—(c2@sªªzoþÝ(‘ 7p‡ Êc#6Gv…)†ì,`¼rÂü®R[ŒR}ßÒëdzçgsÅéšÐN×VÄQL0¦Ð¤Y;ùd«Ïô8$ÚÍÏ£˜ØÐØžj¤Ï(%?·râƒþ°Ãµ “ºÀ¡…†JÅxžß÷k¶Œ¶cÂx-›2KËw%€•¬C°UyáyÜ–íÞw^QŽr車esn–CQW6éçqllO²ëå5¼Z4EA¯»ºŸ?_ÆW‹ò-ȦWÅȶÆåÈIºÕø¼u‘¨Û?Go*„Èyùæ|m<™b#4L9cuPEX°ž«©#.¹t@#6A�!´ä#ñÆ#.¯)ÎãÂHˆÃz”^+›Ý\Ѩ8šë•ÞwcrŽ•Ë™(Ë®é$s™5öø‘ZA„�ÿhÿŒJrÈ.YÚlCÙ’,0!M ðÛtÉÈe«#6ýR�­‹ÁÃ79ô,ýפ�¾ìÉþ˜FtÃÏxV¬@Gô¡€dž%lþ «p’—<kìÄ9 c£ðÐÃ|¶Ç™“#tE]H P0îT[æÈ؃Ù_#¨½—zírH È¦wâÔŠŽÍW†7mxþVYê? )Ärvj³oQžwE¦m„e#.¿ÂdÔ‚™ç™×¶b²àþN!ïe §&¢”øuû/ÑÏKà`ö§nínœšùT)"*�¤#6d9 #c*w&é�ƒbÛ†ÉðfR6zš®:'ï�.àûì¥k,YL#6N�*}±ÆyÞ>ÇãŠ�UË"õÖ�“UO«pi)8ª—â”+ñ §Ó¬,‰±Èj[þv¼‹lQôÇôa™1Kèë¯Ç×FÌ÷¿SªÄ7Ím‰Z½&#6”*‰£NŒ¼Pâ-#6¬AË@‰�*•{iX<ÙZøW÷»(Éðâ»EEE¼nY5ÆÕ͵þ—ìw’�>ÇS6½•ß‹«¦öøÿM‡fhŠF¨%2+zmýW!†�ŒbSQIðîÜ®÷uVé(i%"�÷@Xš'+¬¥&D§)J²‹šå¢¶/]öï^¯"R¬•k¹bÑ_·-×»±öõÆ*Š|ý{ü=o÷îèë˜ØÔl›|ÏÀÞ1¨4–üŽ�‹> õÝŒ>¬žýóL—ÖȲ"4£�~"U�ä¨ræPaŒLÖ¶jϹ$Â![ÙùzÛ²†F²lWßî«âøùÑÊW=ì¼4D‰Áa«l—AHÒPŤ'Ò'mBµ§…C×Gƒ¶éE2„R]U¥"»wÕ¬�ü*ÔðХ߲œœ²ôî²Á‹¨ÀS�E#6lÃQ MZH"JuœëJ» *”Ó#6I¢L²íãe—¥Â„S²ŠŸ$+� bLine truncated
#<==
#-----BEGIN PGP SIGNATURE-----\n\niQIzBAABCgAdFiEEivIt5aBoIuNHTzxwSbTGfAUneqoFAlwfbtMACgkQSbTGfAUn\neqqeSg/9E/RgAhaR7IretWLnTPFE7FvtcwQ3XjAZxyom09Tpu/uWPY9EwmHd2e5c\nduXjen4E1XtJq3FBRSGom41XSKVbpsLxxK3nGdYkYt7nVIR7RcmuYRCu+P3rTyBg\n/2cALYfEDSsGFxkoV0GdSlKbxjKzyMahG07b1fC0cewpFKFdEZJW4iDhekFaIl76\nNGz0uHKF3hfmbB+vUbvwVQZjj2vVAXRZybFqcKNX6lhQZ1tdsgt5PKorPWKdzZzH\nkGsw32M/deiRkq9dBNtJOLhjTMfulZwtMvTNsN6jDWNL9ltcHjAxUJh4TsDuOxH0\nyTxzBSqNa3KmNNURCdET+bdKuq33NceEZEwKf+El4rzfVbEPhvUBq+vObNVvkwWB\nHMTEiJ59zb0qjNKtVS/uFU77OUFLgi65DqLfWwD7KFrcY5tJMvbdSor6YJeVlyW4\nqWWccfl+nvssUL9SlK9dQP0QN6oRa3AEaoEHyPklT1nc7n/Rf0oBg9qx/1tcsEC9\n8GuEV9jWw/SBPtsFq7Pv5gYYC5pt5b1ZzKF+RpbWYTHXiuugQ5/1fV0lVsLQn5+3\nOYkqiEib5ynLW7J73Tj/dfNR6fW3LFf/Rhbcjyj2guSITbtf950y+cF95qEwvmCw\ndS2DOqX2CAU6OnOwMRqsFSEVIZhYySYCdVfRet0hawlRcImLMYw=\n=AByx\n-----END PGP SIGNATURE-----\n
#-----BEGIN PGP SIGNATURE-----\n\niQIzBAABCgAdFiEEivIt5aBoIuNHTzxwSbTGfAUneqoFAl3aW3cACgkQSbTGfAUn\neqruqA//Y9oJ46ZR8W7YB/e45bfrYxGbN7NnkvkwSPNziObYur+n1QpQEOaPTn/U\n5kFtPWHXRJzaG/A9poKn7pl1Xd7Edcu1aalfoEazZbuD37VOxIp9lnrefCAeICqj\nGv0SD96Zac91CbA+b20Q4xnqxKMi3LSI4NPjfFGy62FkSk3MS4p6Rdp0/WAKwwNj\nw7WEjQCNmLb37z+FGSzXg28aljYeteBZEthsVmGJ5QqVwMBwgj2+y5FOTzFfxmqB\nrWgjFYS0l85kgYRZv9yzdNmFs5SScwafwpT8Xmdr49tFn/+0LxXyRxX+rdODgrpV\nY4EOiQz0fd6mMMnaTDXlLSXls3JyVYmbTjeNL/9gcHmnStzJ851CJQfyQg7A+JoC\nc7nz0HbiFyTgB+PUZr1OhGj3A7287o8XQ0tqR3oa7jXIOX0OynrGplMQKr++0jE1\nBgKzjLoE9CTbjkQfICLG+aUy3S1ZyDk/BcO+5+Ytbru+qXuDsIgAdVosMfNSv9jJ\nXvOINsbRMekdejYMZv8fIkn5OEjCFHVhNpobEsCb768bjB3p7alQGECBvjHCm6dy\nXZPzl9cBMWIXcBjPTS+GZj+PIXGcu76pbsx6HBHWf+uJ+4xgOsUCVu//0AV09jvA\n0MjtLWwQ8mdRH6Wt4hsp4HKtSvQrhmljf2OnuYBgaFmcdJkN1zI=\n=C0oT\n-----END PGP SIGNATURE-----\n