#!/usr/bin/env bash
# create software release
# =======================
PURPOSE="install iops utilities & dependencies on a linux system";
VERSION="2016-10-16-1476570292"
 AUTHOR="fidy@andrianaivo.org";


# SCRIPT HEADER
# =============

# -- auto: path variables
scriptSelf=$0;
if [[ "$scriptSelf" = "bash" ]];then INSTALLMODE=1
else
  INSTALLMODE=0
  scriptName=${scriptSelf##*/}; scriptCallDir=${scriptSelf%/*};
  cd $scriptCallDir; scriptFullDir=$PWD; scriptFullPath=$scriptFullDir/$scriptName;
  scriptTopDir=${scriptFullDir%/*}
fi
# -- /auto: path variables


# -- check: script requirements
# executables
scriptRequiredBinaries="awk date grep sed"
for bin in $scriptRequiredBinaries;
do
if ! ([[ -x "$bin" ]] 2>/dev/null || [[ -x "$(which $bin 2>/dev/null)" ]]);then
  echo -e "\033[31mERROR: the binary [$bin] is required but not found. Aborting...\033[0m"
  exit 99
fi
done
# -- /check: script requirements


# -- vars: runtime values
# - directory structure
tmpDir=${scriptTopDir}/temp.d/releases
[[ -d ${tmpDir} ]] || mkdir -p ${tmpDir}
# - log & tmp files
logFile=${tmpDir}/${scriptName}.log
outFile=${tmpDir}/${scriptName}.out
# - usage options & commands
usageOpts=$(grep ") *#OPTS#" $scriptFullPath | sed "s/).*OPTS#/	/")
usageCmds=$(grep ") *#CMDS#" $scriptFullPath | sed "s/).*CMDS#/	/")
# - verbosity
DEBUG=0;	function isDebug  { [[ $DEBUG  -ge ${1:-1} ]]; }
QUIET=0;	function isQuiet  { [[ $QUIET  -gt 0 ]]; }
FORCE=0;	function isForce  { [[ $FORCE  -gt 0 ]]; }
DRYRUN=0;	function isDryrun { [[ $DRYRUN -gt 0 ]]; }
#-- /vars: runtime values



# SCRIPT HELPERS
# ==============

# -- script usage
function printUsage   {
read -d '' USAGE <<daer
# $scriptName version $VERSION  (INSTALL-MODE:$INSTALLMODE)
# $PURPOSE

  Usage: $scriptName [OPTIONS] <COMMANDS>

AVAILABLE OPTIONS:
$usageOpts

AVAILABLE COMMANDS:
$usageCmds

daer
echo -e "\033[1m$USAGE\033[0m\n";
[[ -n "$1" ]] && exit ${1};
}
# -- /script usage


# -- /helper functions
# - default output functions
function printVersion { echo -e "\033[1m# $scriptName version $VERSION\033[0m\n"; [[ -n "$1" ]] && exit ${1}; }
function printOutput  { [[ -e $outFile ]] && out=$(cat $outFile); [[ -n "$out" ]] && echo -e "$out" || echo -e "NO OUTPUT"; }
function printTitle   { echo; msg="$*";linesno=$(( ${#msg} + 4 ));msglines=$(for i in `seq $linesno`;do echo -n "=";done);echo -e "$msglines\n# $msg #\n$msglines"; }
function printOut     { echo -en "$@"; }
function printOk      { echo -en "\033[32m$*\033[0m"; }
function printInfo    { echo -en "\033[34m$*\033[0m"; }
function printError   { echo -en "\033[31m$*\033[0m"; }
# - default exit functions
function exitError    { echo -e "\n\033[31m[$HOSTNAME] ERROR: ${1:-"Unknown Error"}. Exiting...\033[0m" 1>&2; exit ${2:-1}; }
function exitInfo     { echo -e "\n\033[34m[$HOSTNAME] INFO: ${1:-"Thank you for using $scriptName"}.\033[0m" 1>&2; exit ${2:-1}; }
# - custom minicheck functions
function isInternet    { curl -sI  --connect-timeout 5 http://64.15.113.150 >>$logFile; }
function isInstallmode { [[ $INSTALLMODE -eq 1 ]]; }
# - run command wrapper
function runCommand {
  txt="$1"; shift; cmd="$*";
  echo -en "=> $txt ... ";
  if isDryrun;then printInfo "\n--\n${cmd}\n--\n"; return; fi
  ${cmd} >$outFile 2>&1; rc=$?;
  if [[ $rc -eq 0 ]];then
    echo -e "[\033[32mdone\033[0m]"
  else
    echo -e "[\033[31merror\033[0m]\n--\n"
    printOutput
    return 1
  fi
}
# tasks to be executed on script interruption
function exitCleanUp  {
  printOut "* Script was interrupted by [${1:-"UNKNOWN"}]. Running cleanup tasks...\n";
  #[[ -f $scriptTmpFile ]] && rm -rf $scriptTmpFile;
}
# cross-unix file modification date
function getModTime { stat -c %Y $1 2>/dev/null || stat -f %m $1 2>/dev/null; }
# -- /helper functions




# SCRIPT MAIN
# ===========
# -- run cleanup function on interruption
trap "exitCleanup SIGHUP"  SIGHUP
trap "exitCleanUp SIGINT"  SIGINT
trap "exitCleanUp SIGTERM" SIGTERM


# print usage if no parameters provided (normal mode only)
[[ -z "$1" ]] && printUsage 0


# -- OPTIONS PARSING
options=""
 params=""
while [[ -n "$1" ]]
do
  case "$1" in
    -v|--version|version)#OPTS#
      options+="$1 "
      printVersion 0
      ;;
    -h|--help|help)#OPTS#
      options+="$1 "
      printUsage 0
      ;;
    -d|--debug)#OPTS#
      options+="$1 "
      DEBUG=1
      ;;
    -q|--quiet)#OPTS#
      options+="$1 "
      QUIET=1
      ;;
    -f|--force)#OPTS#
      options+="$1 "
      FORCE=1
      ;;
    -n|--dryrun)#OPTS#
      options+="$1 "
      DRYRUN=1
      ;;
    *)
      params+="$1 "
      ;;
  esac
  shift
done
scriptParameters="${options} ${params}"
scriptParameters="${scriptParameters%* }"

# beginn installation immediately
isInstallmode && echo "INSTALL MODE"

# print debug infos
isDebug && printInfo "# PARAMS: $scriptParameters\n"
isDebug && printInfo "$startMessages\n"


# -- ACTION PARSING
set -- $params
  case "$1" in

    show.output|out)#CMDS#
      printOk "VIEW LAST COMMAND OUTPUT ... \n"
      printOutput | less
      ;;

    self.show|show)#CMDS#[dirpath] show a tree view (default is topDir)
      dir=$scriptTopDir
      level="-L 1"
      if [[ -n "$2" && -d $scriptTopDir/$2 ]];then
        dir=$scriptTopDir/$2
        level=
      fi
      if which tree >/dev/null 2>&1;then
        tree $level $dir
      else
        find $dir -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
      fi
      ;;

    self.edit|edit)#CMDS#edit this script
      isQuiet || printOk "EDIT FILE: ${scriptFullPath} ...\n"
      cmd="vim ${scriptFullPath}"
      isDryrun && { printInfo "EDIT CMDS: ${cmd}\n"; shift; exit; }
      ${cmd}
      # check for modifications
      printOut "FILE CHANGE CHECK ... "
      sleep 1
      lastChangedDiff="$(date +%s) - $(getModTime ${scriptFullPath})"
      lastChanged=$(expr $lastChangedDiff)
      printOut "(last changed ${lastChanged}s ago) "
      if [[ $lastChanged -lt 5 ]];then
        printInfo "[CHANGED]\n"
        printOut "BASH SYNTAX CHECK ... "
        bash -n ${scriptFullPath} && printOk "[OK]\n"
        # autoupdate version
        NEWVERSION="$(date +'VERSION=\"%Y-%m-%d-%s\"')"
        sed -i.bak "s/^ *VERSION=.*/$NEWVERSION/" ${scriptFullPath} && printOk "FILE VERSION UPDATED\n"
      else
        printOut "[UNCHANGED]\n"
      fi
      ;;

    archive) #CMDS#	create archive release.tgz only
      # goto topdir
      pushd $scriptTopDir >/dev/null
      RELEASE_NAME=$(git remote -v|sed "s/.*\/\(.*\)\.git.*/\1/"|tail -1)
      RELEASE_VERSION=$(git log --oneline -n1| awk '{print $1}')
      RELEASE_FILEPATH="$tmpDir/${productId:-release}-${RELEASE_NAME}_${RELEASE_VERSION}.tgz"
      printInfo "CREATING ARCHIVE RELEASE ($RELEASE_FILEPATH)\n--\n"
      git archive -v --prefix "${RELEASE_NAME}_${RELEASE_VERSION}/" -9 -o $RELEASE_FILEPATH $RELEASE_VERSION
      printInfo "--\n"
      popd >/dev/null
      ;;

    *)
      exitInfo "Invalid parameters: $params"
      ;;
  esac



# print exit message
[[ -n ""$exitMessages ]] && printInfo "\n\n- EXIT NOTES -----\n$exitMessages"


exit 0
# - end of file (but not of life)
‹     ì<ûÚFòùµüs²À©xùÕ@HKl’puÀgpÚ~m‡
´Ø:I‘„×ð¿gö!$À�öšôs=ÓÐîììììì¼v°o~îŸ9ÞÀtúçÌ´XðäÏ•ðµ½½Í?ñµø‰�›OÊå­­��í­-‚+onmTžœ=ù
¯I™Nx^tÜ}ý‹‹û/ymU`è�ÇÌ�êVy`·Û•RùÅöÆNe£ô�9Ú1·†%Vz1°JƒíÑæÛfž<¾þ6¯¡°°/·¾øeæ ó°³³uûùÇïçcs§òdëñüåý/œÙ‘cŒ¡]¸;®þß¼mÿË¥ÊÎâþo—+øù¸ÿ_üµo[½ýÆkc·ÿö`±‘íÚ‘í¹0²#/€èÜ!`¾Ú‘\gÖàCó°Ûê´«€¶bÛ(—|Ç]Ë`×Áaz�î�]ü^W¯Ì€!"Ö‡�íGÕ€lxî�V‡×µÝ30C8ê6AÏ]�{æØÎ�xÛ¹F®9f`ŒòZÁO^pA,; ¤TÏùW–„Nã’!.)Cþ³óº½ÆÛfŠÂzåàŒ…‚¶×G­ý½þas¿Ùè6ù¨tËÄw<ÓêÌafÈúÄ)>’ã¨. cs¼lB^(&¶c‰÷‚ÄQÏa03b†ÏíKö@hÛÅI‡÷ÁšSðžë\+ªÆfa#.•y£Gÿ¿iÿ¶û|€?`ÿ7+›�öÿ¯Ù© Pe|�ý/omo–—ìeëÑþûÿ�â$øÆ3÷fxŽ&@Ø½Qte¤IÌÔ+sptxÐé6ëš°=?„Id;èL°ž¡gá3×bî�Ñ²›àØîä3„×hxÆZ-#�Šº–p*Ê›;Û[;¥Ê‹
ÚóÆQï]ç°®�lëúÓµÛtMûÒ+xÁŽ'ÛÕÝ=lôà]³±×<\$— ÌIäUÁ7£s¸4Ç �wF˜è.sFu½TËØ#8>MŸ7kP�Ø£Áéi-:g.´ÚèGìï¿ïì5ëåsB²ÙÉÆRlûÛè¹Ôõ›9ºµµõâ¬&{w‘a{v�xZ\ŸÕpüÐ=¥½™ÈA?í%Ûpau=SÔçTÔbšzžŸœTÂÒ¼™‘-XU\É+ÉÇá9^T%2‘O;`”IÉ‰øÌ†“(ÉÛC`½¶]ÄÄÂºf^]€Erv†Î%„ÌÒ2än¢,þÓW«e,�¶ç�Ã2>ã&á Ú¨¼*Zì²èâB`:Õ�î¤=<K‚äiLžï$²„;“í¤´±q¼Q7;‡Uô}d×pLN�ûÂ‚&L"p½½ä‰k 1ð‚=ÑB¡ÀÑ”Æä…²Ïv/^S-Ïe’³wpOòV!˜¸‘�nï¥éLqÖ ?—ÉG3˜£IÀ2Ñ8µ™bogE<Y~Á*Êófˆ'(P7|F\CN�/Èu6üyŸÇñÎðÜbÂ>¿Á/õª¨¦#Áš°?ãM¢;a°Ÿãž„è)ƒçS¤AÚ�’Px¤ÃïèøQX×s\.´<¬¯uzÝ5ô´˜Ã”¤´°˜/¬s�â7E-/pìŽ­4ŽÝ÷{÷áà ‰aÃ€‚žëÌ^óõÑÛz©öÍhâytd‡{l09¸!AÓ9 úÑ¸(ý¦\5ÊÄÛÌ2ÿ:j5{#ÿ5±Y¤Fr AIŽyÓ9Üm.ŒyãC¦Æp€ô˜½Ã_�Ú‹$×(?ŠD‘´F’¸RÎÒÚtÿ uó’ö—r*E˜3=Oî¶ñ]Fª3hP,½lƒ<¾àåKËÄxcº	dœº´ 9©OR¨U=¡]i‹tiv2xÌø\Õºc”	ÄÒ=…—»�÷ïí½î«L¦ñ¡ÑÂˆw¿	²»šÑc©Kv«1ªŸ$*“ád§ÕEy¬óEÉCâ¢5¢“æ¢ö)sÕôì™P(¨ÕgR¤8'¹Y<gŽÏPŒ”Gž�Ì‰uÎ¼3Íï’7°HàÝ|NwŽ“ž¯#È†³éòøË‘ø„'phFqG~Ž[â±¢5RÜÒî@ç¨wpÔÓ–gïÙ‘Ã¥‹ƒ×`žÕ5}]«¡cÁB×Ã¹sHø¶Ïà9lB>_Ãï¼ûÈÖØdi~Ù'Ðå _k–'§G*ëZ�tv¾6'Qa8q‘§ø k'nÜ¨­äEØó=¡Åÿ°
ð– …5ªŒõueP–ÇµÜ‘·zÜæ�ãšA€X5®¼0.)�\VÈµ+Œ)ùsÎcý]§Ûk7Þ7OAZW®*µ#÷Âõ®\àÃµYšˆ+mF¡üêY¥¦D±Bú5µ êP|X5ûfjöVûMGMÞ;7Ý¸ö&<Õ5	)‘”8*HÎ=4¬ñ4SycÛ®Ííú*ÙaË�Xà²HÐ(RSaÕ¸1ô\MºA� lÁyùÕbq{³PÞ*”ËøQ‚W¯tiƒS‹'ÌÜé{“Ê>¡(‘Ÿ ¬4>RK&AÚ[¸
LÕÍvîÊ¾ÔªÑç¨Nº =Ìs{Õ`8¶Ä!›;M.ÏÂé
¸eÀ»ÐCSæG8ËsQÅM1<37ˆj&¾#ú€¡ãÖÐÕÀÑ¢^Åú¤òêYa†uý{‰�ùÚJÊ#ç©¬xï�Õá¡,7ñ”;dÂS_-�‰ ‚•´qÐ„ºãÏ‚\(ãRL|�Ìð"„Èƒ“Þ/ºÈP©ämÚü`Âž´Üî¢oæùÀù«mºbä•ÎG“ÓI®¨88íÛ�ŸÚÚì´gQ‡„mârè¹|?ÖHíŽ”d÷Æ~BMc0‚Å>a¥†�†ÆÄµ?‹t0J˜=²Q£ñä»Ï—rÆ¢÷žÕ#â†¡CxúèåEÇ\tŽàéx¡S
è*#˜rHÞ7Zí´7"†qÁ–ë�é¢’ä}„ZÌxí¶Þ¾;:Ð@~Y„8â­vO@à—Õ½æá{M}áäòÍ”®.Š¬ëa$ RAjBìô.m÷3çzÁØt€Ÿ^JÉæ¹óð[Ò'¼©’ò¤÷´áí·éL×5”X>ÿŠÁî[Ê¨S…�%¢ÅÇ¸œÆ™ò©üÌÏ;#,“œá9iÐdcÊñ(ÉÆZM <G”´—Sz{(2µÎ4*QYär? �p×Ë>!†Oäz? ƒpÛ1ŒÃˆñ`Nü"—VÁÕâC–!|úëyÅ,¾Éé!†…æ�Â|ÒØ"æGû –>s#§œ¡¶˜fÚJ¸Å¶§ë€�(ƒvf»tº¸ñ:Á�™e£bp®3i»¤ü<Mš& Û¤Í�	ß[D6òÂŒ
®”ä»±F¢Þxß��ü9M¤¦WÒ)¿½g!	‡“Ç§±KÇ'>=!ÚelÕ+Ïçnxî]„>Å�¼ˆ(“’‹.œö¡Õü	öÝžŠ¤Ëm£2')ƒ‚!(†×á|ÅlÌhÊ)½ÉÉŽ1P§lÌ)'Lˆ†î¼Í® §<4›¬ÅÞJN,J$ó²Ýa—Ì©kÆ>”UÂ°rUQÑˆ“Fœ~C‹z%emWâG ¸SL"¹q—óˆ¬§?a¸¡Oaç:Gºq�Ý]$1¸0‰ M{6¬,ž®kÓ>¾jgµ°F_¦5˜ÖÎ²‹t¥˜�‚MéM2Ÿ¾ŠËP±XµÏ£e‹… ¹×êÁ›Ö~“ÜÌtÂaÂ*ËÑÜŸº´ÇËpñž¨0·ã&)Ú|¢¬
Ê™šûidœÈž
¢_>¬�tRÑáMôpA4A£Àî»Fû-}4wž„Æ|PÚÉ1Ãh�é3fíÙ£jŽOî=æÑéÔs	ai­ym†hì³àÞ§1ç—ÈÌ.Šƒ òÄ€Yæ™—‡´€'Q‚á�Ã½(Ô	>ì�Îw-9ûëF÷ti÷?¯`ðœ:©eAPšŠ$æ¸óc
ÿÏSO|ÎCu­:ÛÍŸâl¹bsVµœhO1žŽ�§–ñ4<Ñ²ù9R~(ìÂÀ¼ „×GXWc
ëE}Ž´¨ÝC,—•£9:Økôš{sâSGsÎ§ã£ö2#—Nž¼ýÎƒ8sßÈ«Ù¬n"
ÑÙoÜWŠEúÌC×õÞ\Cø“ð|A{%4�’—ô}
)[hS.vìáŒèÉÄ`aý¤x’Ã÷ü	È ¯NÊEm™6påü&ÅR�Œr¨†�&˜Ò(å)PÚ;{#ô”^žes½w¸µ"‡ZDxÖdµ¬ª!903ô›$ñ³þüY’0#.¥ì��çÝÃf£‡6‡»ïZšjfÈé‹4ä“1 ­Hí„q‰ó6²)É~/-(SÆ0<XšcÞ"a—)NÒàã/ï£ŸØ9Š3ZË½4ÛJøÞUeæ—½¦„ßÎý±pT:OÓ©UyIç\…¶È0hþŒŠ¹Ýé5»È"ƒ»Éaä‚pä%Ž3´]ÞHÄW9u£€Ž=bùÌ×¿ÿõüðkÞÿW¶7·–ê¿¶ÊÛ¥Çûß¿ìþ×tC{€â8ôÜ(ðåïÜvý›�øúw€l
)<¦\Ä3›®yÆ‹»æGöYH9‰ô}oiÇ(ã¿Ííïv67*ßÑ}ïý¾�7¾_õÆ×±!õ]›c‡ë¬DV™:ú¼ƒRYŽ74¢Î#ÑÖ³ÇÇÕÐ7‡¬zzºž…+l0�ßÆÿ•Œ}jQ~žG‹?L£ ~€ìIic“[JîÂ )ÕÂéÇ“œžä«Ó“òTƒ©Ë�d¾_�äõ°ª‡Çè
�
3Î¿b·Ž#õQxR¡·�©?1~åPÊeMq8™wã6£‘WN'Õ=D(NsÏ¢óœ^Î+5ÙyIU�Çäaô¸‡üó¿¡à0y¸A!Å†W!6Xè�(pœÎfs77§&ÛÈãˆRnbŸáë†
b‚z©öK�¿=Ž �»tó9…8ŸÓúZ~6ÇÀmÞ(§=é?ò9ÑÕD#ý-hY]ìyVûöÒý×ƒÿoäÕ¢8ŽY6¾[-Sê2LÜMªšŒÑé^@\‰QÀNÝ¤c&Ø{Í—“Ô?™ØkªkRÿÆ“IATœ –�}‰_–§Ö5J¾‡ÕbÑôýpóÚ›ü Ê¢CoÌÛ
R‹W`-æUQS#Ïsb aä,ÏHUµõ,¢OLQ½o
rB³K¨èÈÖ³EÕ˜e‹ùxúb]L7äÒù×Ñ¹ç¡=ööïÐs³œÃbSè& ;¼ ñC!TëTŒ+U9‰îwˆÂ“IdÒu"•0‚Åò„ÐŽØptFÅæ±Žeè­QÕFB›Ü1,Oo2Ãó¼®­AëýAç°W… ÅÆ¨ä~7‰´Ô?@bbØÝ$& %‰wJ~ú`<´8DéýU23Ë	¡ ˆä‡ß1¯:xS†vºƒ7e¸†Owð¦ÛêI”ÖR¤ÚYÃRÄÏ¸PEÀ¬(T‘¯h™W¯È¡´zåŽš	u![•ùüß¨%ù‚U='ÑŸPÖ#�ˆã³¼G�/�/�/�/�/_¤àåËÕ»<¼üE/¨Óèìí7oµ£¸}‡Í�Ü¸¬Ú7‡ä('¶\€ÈQ*#úŽF|‡¨ÌwÛ¦@Ö]+ ‘„â?x“Þÿgˆ“^&š£$3ýqŸ6Ü”·{srqÖå¾QÞ,|ÃÕ+Ï0ììÆ'Ð>Ú6hâÞ�9ËÓ]OÆ7MrBìPQÿÊ)ŒøÍ•SÒõÿíSþvMò¾zVÑ÷'LÌ…˜3_îåØ¹f‰·R¤3ˆqTÛŸÜ;ìâ)�œX¿Á‡YÆÄùT?.I †cOÑÿKŠ	0®�z8r—Å{¿ÌÝ"œ	L*+B�P^'dÁeR£(aÙ.«IÖ`ï‡¥^­ùÂ—=3q“€»¤m	,ù‹�øB™ÿ.b®we´*r.Zí^ó°Ý¤ê„v»Ék 4©„Ùr¼HùƒÙb•šMaâ+%É‰Ã3Rî"}àÔ�"jTÅãùo�‰xŒDc¥$®ô¶Åk „¨dùÍ©`”B–…,Ïv x6u�¹zj;Ä5‘gÐýjLÁÒíS¬\ÅR“	U_— ‹./‰,Ï±âI1VÍ‚&Ëð’´¥eÏ]\•F«¢¶bËp6g™¦HÕ¿çiÔRÂç•B2ô&H]B	œò>t>cõ¶i4¥	’œMÊ3ñTý ÙÂ£P®Â¹Nˆ¹0˜8l®( ž~(ˆ<räqÃ®ü4êxÞ�L^¤16‡çè¢þ^ä„ó¥BfPþó•šÊt…<rý£¦\Ñ4·)™ûuÇ‚Òá“ÅS¤|•5/7�òA$ÿRnûf_Õ’ÿ�´Ü¤Æ©œIBö¿ðò•eØùÏ�¿vâ‡}ELŒ§ºŒˆ§ÄP
’Ú"åAe.�92Qî"jÄ›°„]¿I2`¦Ž¯ðb”˜òÀïÆwºi*—#~€Æ=6yÌV-ê?Yù•«|5îÈÝXÔ³¤²S¡0æhÇë²~¦^X×âð5ííÝ"ž÷”æ~ÁBØÇ:ØÇ:ØÿÂ:Ø´ƒøW”À®�iYÀsödÜxs/íÀsÉ£ÌÄ>>9"×?Ó„k’“aé÷K:NšÑjuZMà¨NW`Å:‰Ûö;o;G=@[Dºæ8ô&”±^yÊ3£¿kB	� ¹Z&ª®ÿÍbßè�”ùFwøF,í½¥^WÚ¿Iu-ÆØî„ýU¶õ_yiìR�­zÂHbU‘í¯«*ØXÉ?&ëXï­‡]UÞú–®Æ¢-â
Vz \š¶C·M±ë~³\ë8¿Ž!çðu§óc7]„‰*6]]Î×ùÝt\ñ®…k‘kkšx*R·^,jw—U®XEYñ*Ž›?÷†0?§\-ÓßF¸5úâ%9‘^æ˜¨A))a‘%=rd}¾"‰”—@ÉÀG�çÒŒ¡¬)2ø_*²>ì#x½L˜Æot­Xé ?eq£O–û‡×Å¢óRßöëzÎÉz
jšòá¢M¹s4ÔAnBß±£œ^ùÖö¿ÕªZ¾&\Û?®œÎkˆ‰°>QT1ŒMÐå$I)¢ˆ€ªiÖE=ó�½*ï§}œ—jNOžkù´Jù~E‚ú�˜ =þú �MÚ•‰=¤a$¶�£[0R)Ið.&>ÕÜ« upkuzœ"ˆEç%Ý°¼‚dBè³!éþ¥d�ÄzWtS~˜HÑ5eBž’Ð·°|ù@Ä5SóóoÀiœÄ�‹”Ì:Š?âã¢7BÐ+˜o(-ñaë‰iI,*á­Ä(µ%	K@5ÚÝ*Ðþ‡ÆÑ~¯Ðèvêîñ‚sXx»p®–É”ì-Hßí¸3¼0.éøÿ;÷“Äø*. ÈÎmP¤,”û—§äoJ¢¾ï ³ùÍâ½iš¸/†!ºW|iÀ«?-·çkÙË.ž#]âÏáÐþ»l§aã~lµ�Zm?üelãÿùþ_U7_¹ÿ—¥îÿ½ž×–Ÿ¹ÿ˜È     à�¢ sZ x  