hashrat-1.6.1/0000755000175000000000000000000012471372011012670 5ustar metacosm89roothashrat-1.6.1/.git/0000755000175000000000000000000012471372013013533 5ustar metacosm89roothashrat-1.6.1/.git/refs/0000755000175000000000000000000012470646505014503 5ustar metacosm89roothashrat-1.6.1/.git/refs/heads/0000755000175000000000000000000012471371755015572 5ustar metacosm89roothashrat-1.6.1/.git/refs/heads/master0000644000000000000000000000005112471371755015761 0ustar rootroot6c294b2661552bfcaf683962c9218644d5a1f99d hashrat-1.6.1/.git/refs/tags/0000755000175000000000000000000012470741010015424 5ustar metacosm89roothashrat-1.6.1/.git/refs/tags/1.6.10000644000175000017550000000005112470741010017036 0ustar metacosm89metacosm893b7247e9a6955a7243205f55b642323844d02368 hashrat-1.6.1/.git/refs/remotes/0000755000175000000000000000000012470646505016161 5ustar metacosm89roothashrat-1.6.1/.git/refs/remotes/origin/0000755000175000000000000000000012471372715017450 5ustar metacosm89roothashrat-1.6.1/.git/refs/remotes/origin/HEAD0000644000175000000000000000004012470646505020066 0ustar metacosm89rootref: refs/remotes/origin/master hashrat-1.6.1/.git/refs/remotes/origin/master0000644000000000000000000000005112471372715017637 0ustar rootroot6c294b2661552bfcaf683962c9218644d5a1f99d hashrat-1.6.1/.git/info/0000755000175000000000000000000012470646475014505 5ustar metacosm89roothashrat-1.6.1/.git/info/exclude0000644000175000000000000000036012470646475016060 0ustar metacosm89root# git ls-files --others --exclude-from=.git/info/exclude # Lines that start with '#' are comments. # For a project mostly in C, the following would be a good set of # exclude patterns (uncomment them if you want to use them): # *.[oa] # *~ hashrat-1.6.1/.git/branches/0000755000175000000000000000000012470646475015337 5ustar metacosm89roothashrat-1.6.1/.git/hooks/0000755000175000000000000000000012470646475014675 5ustar metacosm89roothashrat-1.6.1/.git/hooks/commit-msg.sample0000755000175000000000000000160012470646475020154 0ustar metacosm89root#!/bin/sh # # An example hook script to check the commit log message. # Called by "git commit" with one argument, the name of the file # that has the commit message. The hook should exit with non-zero # status after issuing an appropriate message if it wants to stop the # commit. The hook is allowed to edit the commit message file. # # To enable this hook, rename this file to "commit-msg". # Uncomment the below to add a Signed-off-by line to the message. # Doing this in a hook is a bad idea in general, but the prepare-commit-msg # hook is more suited to it. # # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" # This example catches duplicate Signed-off-by lines. test "" = "$(grep '^Signed-off-by: ' "$1" | sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { echo >&2 Duplicate Signed-off-by lines. exit 1 } hashrat-1.6.1/.git/hooks/pre-applypatch.sample0000755000175000000000000000061612470646475021037 0ustar metacosm89root#!/bin/sh # # An example hook script to verify what is about to be committed # by applypatch from an e-mail message. # # The hook should exit with non-zero status after issuing an # appropriate message if it wants to stop the commit. # # To enable this hook, rename this file to "pre-applypatch". . git-sh-setup test -x "$GIT_DIR/hooks/pre-commit" && exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"} : hashrat-1.6.1/.git/hooks/prepare-commit-msg.sample0000755000175000000000000000232712470646475021617 0ustar metacosm89root#!/bin/sh # # An example hook script to prepare the commit log message. # Called by "git commit" with the name of the file that has the # commit message, followed by the description of the commit # message's source. The hook's purpose is to edit the commit # message file. If the hook fails with a non-zero status, # the commit is aborted. # # To enable this hook, rename this file to "prepare-commit-msg". # This hook includes three examples. The first comments out the # "Conflicts:" part of a merge commit. # # The second includes the output of "git diff --name-status -r" # into the message, just before the "git status" output. It is # commented because it doesn't cope with --amend or with squashed # commits. # # The third example adds a Signed-off-by line to the message, that can # still be edited. This is rarely a good idea. case "$2,$3" in merge,) /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;; # ,|template,) # /usr/bin/perl -i.bak -pe ' # print "\n" . `git diff --cached --name-status -r` # if /^#/ && $first++ == 0' "$1" ;; *) ;; esac # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" hashrat-1.6.1/.git/hooks/update.sample0000755000175000000000000000703312470646475017370 0ustar metacosm89root#!/bin/sh # # An example hook script to blocks unannotated tags from entering. # Called by "git receive-pack" with arguments: refname sha1-old sha1-new # # To enable this hook, rename this file to "update". # # Config # ------ # hooks.allowunannotated # This boolean sets whether unannotated tags will be allowed into the # repository. By default they won't be. # hooks.allowdeletetag # This boolean sets whether deleting tags will be allowed in the # repository. By default they won't be. # hooks.allowmodifytag # This boolean sets whether a tag may be modified after creation. By default # it won't be. # hooks.allowdeletebranch # This boolean sets whether deleting branches will be allowed in the # repository. By default they won't be. # hooks.denycreatebranch # This boolean sets whether remotely creating branches will be denied # in the repository. By default this is allowed. # # --- Command line refname="$1" oldrev="$2" newrev="$3" # --- Safety check if [ -z "$GIT_DIR" ]; then echo "Don't run this script from the command line." >&2 echo " (if you want, you could supply GIT_DIR then run" >&2 echo " $0 )" >&2 exit 1 fi if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then echo "usage: $0 " >&2 exit 1 fi # --- Config allowunannotated=$(git config --bool hooks.allowunannotated) allowdeletebranch=$(git config --bool hooks.allowdeletebranch) denycreatebranch=$(git config --bool hooks.denycreatebranch) allowdeletetag=$(git config --bool hooks.allowdeletetag) allowmodifytag=$(git config --bool hooks.allowmodifytag) # check for no description projectdesc=$(sed -e '1q' "$GIT_DIR/description") case "$projectdesc" in "Unnamed repository"* | "") echo "*** Project description file hasn't been set" >&2 exit 1 ;; esac # --- Check types # if $newrev is 0000...0000, it's a commit to delete a ref. zero="0000000000000000000000000000000000000000" if [ "$newrev" = "$zero" ]; then newrev_type=delete else newrev_type=$(git cat-file -t $newrev) fi case "$refname","$newrev_type" in refs/tags/*,commit) # un-annotated tag short_refname=${refname##refs/tags/} if [ "$allowunannotated" != "true" ]; then echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 exit 1 fi ;; refs/tags/*,delete) # delete tag if [ "$allowdeletetag" != "true" ]; then echo "*** Deleting a tag is not allowed in this repository" >&2 exit 1 fi ;; refs/tags/*,tag) # annotated tag if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 then echo "*** Tag '$refname' already exists." >&2 echo "*** Modifying a tag is not allowed in this repository." >&2 exit 1 fi ;; refs/heads/*,commit) # branch if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then echo "*** Creating a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/heads/*,delete) # delete branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/remotes/*,commit) # tracking branch ;; refs/remotes/*,delete) # delete tracking branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a tracking branch is not allowed in this repository" >&2 exit 1 fi ;; *) # Anything else (is there anything else?) echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 exit 1 ;; esac # --- Finished exit 0 hashrat-1.6.1/.git/hooks/pre-commit.sample0000755000175000000000000000315212470646475020160 0ustar metacosm89root#!/bin/sh # # An example hook script to verify what is about to be committed. # Called by "git commit" with no arguments. The hook should # exit with non-zero status after issuing an appropriate message if # it wants to stop the commit. # # To enable this hook, rename this file to "pre-commit". if git rev-parse --verify HEAD >/dev/null 2>&1 then against=HEAD else # Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi # If you want to allow non-ASCII filenames set this variable to true. allownonascii=$(git config --bool hooks.allownonascii) # Redirect output to stderr. exec 1>&2 # Cross platform projects tend to avoid non-ASCII filenames; prevent # them from being added to the repository. We exploit the fact that the # printable range starts at the space character and ends with tilde. if [ "$allownonascii" != "true" ] && # Note that the use of brackets around a tr range is ok here, (it's # even required, for portability to Solaris 10's /usr/bin/tr), since # the square bracket bytes happen to fall in the designated range. test $(git diff --cached --name-only --diff-filter=A -z $against | LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 then cat <<\EOF Error: Attempt to add a non-ASCII file name. This can cause problems if you want to work with people on other platforms. To be portable it is advisable to rename the file. If you know what you are doing you can disable this check using: git config hooks.allownonascii true EOF exit 1 fi # If there are whitespace errors, print the offending file names and fail. exec git diff-index --check --cached $against -- hashrat-1.6.1/.git/hooks/pre-rebase.sample0000755000175000000000000001152712470646475020136 0ustar metacosm89root#!/bin/sh # # Copyright (c) 2006, 2008 Junio C Hamano # # The "pre-rebase" hook is run just before "git rebase" starts doing # its job, and can prevent the command from running by exiting with # non-zero status. # # The hook is called with the following parameters: # # $1 -- the upstream the series was forked from. # $2 -- the branch being rebased (or empty when rebasing the current branch). # # This sample shows how to prevent topic branches that are already # merged to 'next' branch from getting rebased, because allowing it # would result in rebasing already published history. publish=next basebranch="$1" if test "$#" = 2 then topic="refs/heads/$2" else topic=`git symbolic-ref HEAD` || exit 0 ;# we do not interrupt rebasing detached HEAD fi case "$topic" in refs/heads/??/*) ;; *) exit 0 ;# we do not interrupt others. ;; esac # Now we are dealing with a topic branch being rebased # on top of master. Is it OK to rebase it? # Does the topic really exist? git show-ref -q "$topic" || { echo >&2 "No such branch $topic" exit 1 } # Is topic fully merged to master? not_in_master=`git rev-list --pretty=oneline ^master "$topic"` if test -z "$not_in_master" then echo >&2 "$topic is fully merged to master; better remove it." exit 1 ;# we could allow it, but there is no point. fi # Is topic ever merged to next? If so you should not be rebasing it. only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` only_next_2=`git rev-list ^master ${publish} | sort` if test "$only_next_1" = "$only_next_2" then not_in_topic=`git rev-list "^$topic" master` if test -z "$not_in_topic" then echo >&2 "$topic is already up-to-date with master" exit 1 ;# we could allow it, but there is no point. else exit 0 fi else not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` /usr/bin/perl -e ' my $topic = $ARGV[0]; my $msg = "* $topic has commits already merged to public branch:\n"; my (%not_in_next) = map { /^([0-9a-f]+) /; ($1 => 1); } split(/\n/, $ARGV[1]); for my $elem (map { /^([0-9a-f]+) (.*)$/; [$1 => $2]; } split(/\n/, $ARGV[2])) { if (!exists $not_in_next{$elem->[0]}) { if ($msg) { print STDERR $msg; undef $msg; } print STDERR " $elem->[1]\n"; } } ' "$topic" "$not_in_next" "$not_in_master" exit 1 fi exit 0 ################################################################ This sample hook safeguards topic branches that have been published from being rewound. The workflow assumed here is: * Once a topic branch forks from "master", "master" is never merged into it again (either directly or indirectly). * Once a topic branch is fully cooked and merged into "master", it is deleted. If you need to build on top of it to correct earlier mistakes, a new topic branch is created by forking at the tip of the "master". This is not strictly necessary, but it makes it easier to keep your history simple. * Whenever you need to test or publish your changes to topic branches, merge them into "next" branch. The script, being an example, hardcodes the publish branch name to be "next", but it is trivial to make it configurable via $GIT_DIR/config mechanism. With this workflow, you would want to know: (1) ... if a topic branch has ever been merged to "next". Young topic branches can have stupid mistakes you would rather clean up before publishing, and things that have not been merged into other branches can be easily rebased without affecting other people. But once it is published, you would not want to rewind it. (2) ... if a topic branch has been fully merged to "master". Then you can delete it. More importantly, you should not build on top of it -- other people may already want to change things related to the topic as patches against your "master", so if you need further changes, it is better to fork the topic (perhaps with the same name) afresh from the tip of "master". Let's look at this example: o---o---o---o---o---o---o---o---o---o "next" / / / / / a---a---b A / / / / / / / / c---c---c---c B / / / / \ / / / / b---b C \ / / / / / \ / ---o---o---o---o---o---o---o---o---o---o---o "master" A, B and C are topic branches. * A has one fix since it was merged up to "next". * B has finished. It has been fully merged up to "master" and "next", and is ready to be deleted. * C has not merged to "next" at all. We would want to allow C to be rebased, refuse A, and encourage B to be deleted. To compute (1): git rev-list ^master ^topic next git rev-list ^master next if these match, topic has not merged in next at all. To compute (2): git rev-list master..topic if this is empty, it is fully merged to "master". hashrat-1.6.1/.git/hooks/applypatch-msg.sample0000755000175000000000000000070412470646475021035 0ustar metacosm89root#!/bin/sh # # An example hook script to check the commit log message taken by # applypatch from an e-mail message. # # The hook should exit with non-zero status after issuing an # appropriate message if it wants to stop the commit. The hook is # allowed to edit the commit message file. # # To enable this hook, rename this file to "applypatch-msg". . git-sh-setup test -x "$GIT_DIR/hooks/commit-msg" && exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"} : hashrat-1.6.1/.git/hooks/post-update.sample0000755000175000000000000000027512470646475020354 0ustar metacosm89root#!/bin/sh # # An example hook script to prepare a packed repository for use over # dumb transports. # # To enable this hook, rename this file to "post-update". exec git update-server-info hashrat-1.6.1/.git/hooks/pre-push.sample0000755000175000000000000000251012470646475017644 0ustar metacosm89root#!/bin/sh # An example hook script to verify what is about to be pushed. Called by "git # push" after it has checked the remote status, but before anything has been # pushed. If this script exits with a non-zero status nothing will be pushed. # # This hook is called with the following parameters: # # $1 -- Name of the remote to which the push is being done # $2 -- URL to which the push is being done # # If pushing without using a named remote those arguments will be equal. # # Information about the commits which are being pushed is supplied as lines to # the standard input in the form: # # # # This sample shows how to prevent push of commits where the log message starts # with "WIP" (work in progress). remote="$1" url="$2" z40=0000000000000000000000000000000000000000 IFS=' ' while read local_ref local_sha remote_ref remote_sha do if [ "$local_sha" = $z40 ] then # Handle delete : else if [ "$remote_sha" = $z40 ] then # New branch, examine all commits range="$local_sha" else # Update to existing branch, examine new commits range="$remote_sha..$local_sha" fi # Check for WIP commit commit=`git rev-list -n 1 --grep '^WIP' "$range"` if [ -n "$commit" ] then echo "Found WIP commit in $local_ref, not pushing" exit 1 fi fi done exit 0 hashrat-1.6.1/.git/description0000644000175000000000000000011112470646475016011 0ustar metacosm89rootUnnamed repository; edit this file 'description' to name the repository. hashrat-1.6.1/.git/HEAD0000644000175000000000000000002712470646505014167 0ustar metacosm89rootref: refs/heads/master hashrat-1.6.1/.git/config0000644000175000000000000000040612470741145014730 0ustar metacosm89root[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = https://github.com/ColumPaget/Hashrat fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master hashrat-1.6.1/.git/objects/0000755000175000000000000000000012471371755015200 5ustar metacosm89roothashrat-1.6.1/.git/objects/pack/0000755000175000000000000000000012470646505016113 5ustar metacosm89roothashrat-1.6.1/.git/objects/pack/pack-6750f0986518dafccbf46a482ac47bae64435aa7.pack0000444000175000000000000537254312470646505025434 0ustar metacosm89rootPACKxKN0@9*ǎ?B qx\Rřș^zzBMcS2X0-۰ 21!iƌHnj # . JO[׊r&oօ>X<ΪCymOw\3BPUV6iYaBeN[xPAN0sJhH\x$3eMLA>YeK aA 'k|vs<;'}LuD cmRt~-KٞxAn D+YQRUE>`cܾ iFJyS@3&(>%] i"QeVFKS.ZV[mSL8Fk]NKp+gb І ܮkBپ@=v+iCvN1!\1R.WoZ[Od-蠚_At`̘xA E}!QGB/+:ISj xg_|xIp9h4ཛ ", (&GJl2=9)1ʣ nLRA`W}zO5)q+.!zɋ:#ε.B S^K[TL˜xQ D=lPJt]ӔC:`#;6RCNgBqʉ0: 첏-켊&K4IB>`Ow,L8Q*~Y3,Jrt^LrOGܴx^_Lj,"B[ IJgi,uU_?Mݔx]j ]ż.h̅riqK7YCIeGσ5zvIۙ'N1{vFX 3GN0zl<0biz(]Rl}o\Xng-?L>Fx3X o=?.g,U ]8c i| 6Ej]?]xQj0Du/ JC/+ubYA^C_ Ì6@912@^9&&Œ9:9fB 1Ҁ6>Y|,Q?s\_~KQxݮwp-9o sY2,z6\@_u(K=T~/i\w],^YxKN0>EtBlC#sxE=" ̅b ޲cyoes.? eOB8c@tsݧ ~;|Ut-INo3{\vT <d5 PRJ5POxAn0 EJ@ RUj$8훌O0xrȌFqVvt^ms,=-}:4 )főm|kbxO{Wxڜ7k~^5˾2J4M!Ǖf8R jE8Ss-ELcQ;0bN|R+pq 1;zE{Vܳ E؄Bunfx1n0 w{b@ KS"C nU$lb9*FR\Spt} 0:{+&H9L$ %O)Q1[v?*\^짭cUYq^{ֺXϭ_=rԤZvMxQn C9ww$ UU@0 I"2h_zZ߇eKaivnlj ;g;ubC0y)].y*e=U[xJ0}tl x9MvHQވfaZa&\QG!Z+5xHdktw l:zEhTjtn!P8jF\:{{.-ݸ£5g[!.'@5Z-fnhZBpG3mcv.V=]v{ %' mRbSxM 09$OADp-xqJӔ4r>뇧YHl`L,Rl16C597h.yi 'eL4G 3CtFTP\E( vN472-㦾NS1xKj0 E^慇?( t ,)qp򛮡gt\̐ľP$`ft֒{\r;wMp֢piGڥPxKj0:Ec}`sl-8H y*ǃыq|FTtN/.ؐ1+-tJ8!9%huQvѧPrFRWQ%'^_=1P6zilolۘⵯ3eA75 PExI @D} DDq+#H:*^-Uf"WS&&2RcvV@`b44FBGYy-5-m`-q深[{ ?j7aY.MmW؟42%0`ڷ v]nR>AHa;S(7S#5O;!ĝWm|[H(U 6L+ `Qgq7dיxAn Eb"6REzW&Duп{oG7O'6 s0Ė5f \֋fIEM^x13%+s<C8'Ê >~U?W_Gk:9xΩӖm GBݏ5oߐQ@}Nm./GRߔxAK0.&yݴ Ⲭ"A\<-/KIIo saA:Go{F-832f̱ k&/{~ֺAcFjhϔB]&.po֮9}-Z(F}5u.s)&Pρ78 cO5'8n׏r|{>?\-s!ꨰk_`xKj0D>Ef!rlrIݞQ,# +IcH!)h8G䕔C8ĀG%Q)&7:+RF zU|ֽ Ox?g?x{hs752d}R&zAr=@*#n^ SÖwnqxx^xA0E=\2SѸ e:(Zˬ  s+:l릳 5ҹ9fIQ͍][^X˞6a-<5kGxj`9Ls~La *W1#64\Kaw>n4.;H9ȿM*xA EI/05Rvx꿿xr0k}b$3 q>eF"S; &`4Dj@0=KʫQ>5'-,pvQ/OKi숾iQmͫPĚklLxJ0Fy݅Pt@D7n3S g۝8|ҙ!ft̖"PbuD\bVG-81Zm[c 1.v't* l^}Tx  o5)z~d<|M]"z q.POAM8 jˬ~:TxAN0 yo{@n !$>Aj;!,o`n3 R R_$9xcAZ/J3pBM˗}o*M Oۗ[1p/08<<QnXGnܯb7(6mOxAn0~ܣ 1VQ@CeF燼!})UluI|r<bB`{{P7–96ʞsp=[HA::=Ϻ: }Bzl Vqil]ވ#Kn%ҋ?κLzyzbc07Fyq/sOڙxM0F=\$hW R0P/o嫫`[o%eGzSO7Zqv2yJV3lCm&L ?p[O;RD?ؚ&:- m.e=3DnC)v PN5vټF$ث3_-eDlMx]n!9żWg#UU\Wa] !~gɖg'N`0BnW&󸑶E-;v".RʮvIEWcG| gs$+Hܗ3Z/`dR޺_JcKxNIn0sˡi`P-~a</esIkfB`jCcKgRYIfkzIyA옅0+[-H{2|e#Wx(-+S-cyP Ik:xi4ZgGʾm)WNӭk̀kRgb.; =ۼgxpXi:=o8hxOAj0s/,vǥB?P l8l3}~7P^1a+cBL&#D%}h<+jR56 Cɳq |5 Gb?XO&o($b}[ qb|RYir ig3Oh:?*guk1$|(Ҟ6>W{xoto\i Rh3q-J> ZӐBH6! R|B-. EO3:|-/8.?z|, 8aL.›Ekn#a}Ca~aX<^K5iieR~xKj@DsLk 9AOO`yĨ>~+dSţ˜&JM9JGɧz[k|l婀8{Vu<\=r6)pȑRa C[8͢o/[oº+- GoDs*7cZW &//R@H1vRʛxAj0zȒe ²9_FZd~޺Pt*.|gg(42G=m1U O :slB 2,[NfWtT*˱M/oZmL+eD;@vͭ !#xr|tlrـz][`JT[xxA0}5؅nKcL_XE1@ ]/FFB J. Dؓ30F(#&- V%$Goё0w,rgϲ̟ ڼI47,@gѷ},ZkL֪<i#ETw4_ Mx1n0 @]!H J -EXJ\ؕ!o{ ߆*0[X8ƭa B\(rIJ6r6 PjԆ!$K橖a>/ Pb\#{lXZIX0OۖxAj0@ѽN1B%4YJG3G3t]"W f)X(Ji#sh(n^:qOS\2HTf#j)z?o|[ೞóe&H~R{')v+YFzY Ý5JǛN=Z}$FQV1icIc]Ft>(:&f̄/{+GO|kq{kl *BLO[WfGbX ?'BoߴAxAP[RmD itd\*i[{xAN }O1{cRH1z7`: m_403/Ga*Zk݊.L{ 3 q)uJIy%Fc%rd5;.e j |o>^>lcf3;MmBrD)J.m>*eѵ7DU۳GKCCΘF3BȰz{ELȮBu7>=dNu8_.Ԏ/@&xKd7Dvt:1-=|i~Ejv D[o)ZjO#pxPXHۆZzp6a|Vf hLP镼p)-exmֶ əTl羱rN-l 7M7vN[m.F؃>r&45f{1\3z3u\0LgMI"||Ȕd`xX03uO@SSw.5HY. FD*EO$%NJ6]WM{ vךIv|3#Dbʂ҂!phMs*"piKf]+j|j#Y5StBa6Oaf LOs]_QbCY#uۄ0;ί /$_YxlL14$^R %xn=njRʕy cz=!I1sΎ+4HK.rKXF:e##'$`6;/#%7 :x0ܡf-f XhɊ8z|дSTOA%˝*x(,/x{ m*^Y}bdqA{fNV*:E9+Xf*SjXqeAS(*=ֿ#ZŤڏ>%E3CGd}ZòN^Rfr̀rBUR b?>k_Cd]A>2hcS]ԷC6~eD/~?<y@2 7-3ע,qӵ~$K-@۪>ܠzS_媵e3ռN@>kuO}:,a/ToM_ ]`;Ӗ+;jj@W߭HNw&)1( \KM xkF9^4<ɝyYWu{:*u#Ko1SҺ:F #1_gm'nm!ܛJAjÎTئ\`lbL>"#,f"S`k3c?]*P{J#a C~y Fs_Us-|Db߼Z:L ntuݘWvs}Y81SV^N[,r5u_w:A$d##䔶brk%Ś;)*_X;Tєv'NV(ok]j-XuBijڅaԾÂј ¤U7ddJu޳=qYBvvܲ{7&:6yKGmjM}TYsЊ-8,&K{,x340031QpKM.MKLO-+(a`Zrv7 sO47jJ"y拃k؝DNUQRRV1;ͺHiJiÚ|K)M{& ?Rђ;.&OE$A&󮾱rʞ UY QÖ:UaT^ѹϟUSPR VNqۗ6}UR uarӫOKޅ7h}-WUVtӝHjYGCeSTRK;b:޾ vmWeHv:,rTUi^fE<\;_E- =xqMx340031Q qaHsuhpoϕ=2(tvsve-EdȅOo)MNMIeW_I#rAcxWĵjC%4g=* rutue;m+eJgZwo9TErz^2ծ5bj%μS<IAÛӽg\~ǵi&/a 2Ru33yL=yZYg?P^̈́.}9/wRHpFPB2< ՓvM|w&bbFHח퀙X^ z7?,LO:~)9i8g0DE]ܝ1!^ʸS]{RwFRG&(` oq#,jCl/8Հ}^Zp>^вs[/U{unT^b2C/MVup?xv}gg5ϽUJ o*_(x/BQp5a'JvAd%yy@y^}JvvDŢ0!:UMlv)[伫\a^ ȨSo7O3i" FVvo*ϾF@HO-*(+Pa>W?;k" k7*ەCz\lӧA3D 3Ksrt=ݳ.jH۸VÏ7M @!'3)854GHϐ{znmۿ5iQ%ԴLPr` ǹ)80Sb^T&'S.((b-E-qN|{,g,#2tt\^bp^Jq+eD>̛-kRt~?UPXRRt''o9۶jezü(`ڽl} 7.8) b\xsBXqNܷ=U8Vً}\D71;5-3'U/3yݰ3gwtp ,וaC;xeR٭77O(!Ikݰم3<%.G60]:yEJW'Zڅy%>k569?77?O/!iZ1^?~;TXuw3?BF&CEf}<}9;3jc҄W$O\kKf|'?c-~å"@ %Q~{y53b'w%w$x[˹sC(d&2pOtR1mm¾y&-굜̓dx[˹sBu>˲3I:7*6*DV240031QMNMIc8dЇ;,AlԻV>}8qb^2CEAOΔ5?~h}zJ ٓDl73Lz~Rϳ NݗU \˜\ldoo~sJ5PBr~^ZfziQ*Cut34T*Ŕ "+Zz_,S}#O̐Pu ];A+4s֚@)(֒lV,D&9V>ACCj~0{o˙zBNfRhqjZiCX[ [mJ<(-jSnbf"Joz3xo6}3יEMro>E7jOvc1{œ-A;Wcr],oU\=#zظ\e7'K8;7z@u'g5G^To>Yp5y)@<|[7K)<ƑޱFTbegJ6ޒ9sT7Lc&aeMG+5*q5dA^a1yK+,Qˎ09Q5Qx340031Q qaHsuhpoϕ=2(tvsve-EdȅOo)MNMIex{`CπL~>xBfή~ή SVe򵈬4[0c魏J|S2sRL?\u،iK^ESpl< 7nٿPeA. _mo_h2 .L @!$?פ$U/919#-ל7K޵[F%g%3XҋWͻIV1yeU= 77{ϸk+JM^&d&k}@ugn<*SyLdZ_Iy~Hr՟uoaz*6 EeW̼1{v˳?|۸&/-3]/'?w,,3b|x{Ӷ;PBr>XUqIbIi1}kK.ZrCg;8gh(,-Jeue򯻭qNbo6@Eǝˀ; UJP9Wsmø@ۿS8iDQjG21m[cv}ҩKiyEEy%@NFUrTe13G}p 3E-7~4ջeu*DNnq{-g].M5»w1U %ww^^uLaĒ"E6nX:$}/0>̧R% Vyz\v)o>[V?]џ xuyKV~Th(?VmGg, kCq"#JJqC-y1P~:ty ¼1؆cp'0&w=DD`=?wݭ.-5'k㨠1E쓺/Po^PXh3.G]M D<)ԠP폞H-o!bl}X:# `M/qai5 !̸4' ,Oe~e)ܦ#WU 現KwԱOԙAaxb԰J}dwr3`t&>;:̠Z"h$As_(2Vıbiq_ ;&] s6$39 !ٍZ}1G}[j ,:ĠEnE|{.`RfmfƋжJim0޵x9Q<?.~"0cc^+F8's\ 0}u%{#yV_ԭ\ם nDv̾6(`k Yq`Ž=7ebgD7\ U H lQnI 9(t2RpǑR^^Vj00:HYj 6V{WGBJK xu VZyxU1a  Kf<(͕׉sVUpXCƯ +6͔sJFU5+N5Z ,}"PT6X oogd܊}|`W4 `G-?(뻛,g*,,Ƃ`r D|"H\YE)$k, ؎[g=ʪcI+I4}aUeGԦh$ >m=BW1}d i'[LtB_eюaYwSAR`n?y~+UY{Ų[wb{vN%R< x$j.'͢$îKؼgj\ِzb!ó /^RnGFbNMT$70HVK54/s%Δ fpvqhM!0/55j6n:`CIq#e ,J@̔?FSr˾>. ЇK} ~(1HA$/Ĝwv'} N=hȤaq+I_׉^V˄ǟɘ1C`xRPq]gG~[@c Y X#A+n6BUR3I$|9iLIn}iHIE{eSzZ/_ꈰ;' v] ˣɈڦ-ˌFait*~QW Q` )x ܀˝\IP~=ur!5?!73* 8 )dYQptd;w&d-^b @Yy_ ٚasW׆qu돛:83+ҋI~cN -&2LKF.}H9Z9.ZhbMk_j W{|WdSa}K f<\(ךN.44'4?~+N@Fsu͞G[ +8y_Q\he@)XQZ)Re#"ң tu1h4r_OyKGgYG03wf\G&=pS6u.`XYEԋN%Ocٳ0k9;HO-x\> 3#]M批{4N] UM-*r+yC3bOŻщ*jX0̬-Z }+xɚke|=K)YzO 7P4Bg`=k-k;srjo kFh͛o?x.{$7rmD_U2!38^7 ryH.}_@RtV渨{+Ry`Uvpmehc|†ڃYPױ  D%+*+֝e OWmw"%"!WVђ)3YY9 VFIO#[0%+LQPzY߱fXv٨^>of 9 #ɻ|;[b~v~%>4Org^$̜ |ou95{+WVvΩ]!S p:tM|.3 MsiE Q. PI1U@miBY!(u )太C~,OSPIg/5zafKOt#N>G>D%UƁqVm|b:N(Tg b,!?v@BonKQAfDAvudsn(?u @0?*ީS!<op&eY_o€gL3%8,Y3ˡaw74%Zi;Ys2Bu`>҉llM)viA 30 >XXv릵x\,r)P3/|&+2_\)K aN"b4(NfFcIR`/Gr'ȊNc"m⿺kwk9IkˌO@!Ѥu[ǹ\=\MRJ_g x340031QH,JM./dXpr} ޸HTIFW(Dπ!cKa䓨Q_KlUSZXZ\R`Io_wfAՔ%&͙`\F5/ȋϧ??'"x340031Q qaxtTܮ7<yQF? !J|<]]|kYi&!4ra[A&fe2~taŞH7!.;JwQD[nѓ=ދHoWfLTB>ϖ100644 filesigning.c}7m%S-]Y婍Q7hh~Ǔ 6mo}%kͬ6_100644 main.c]Q$AP)^ssN_YudL#7&kBx> V7ψ=kՇ^ VOՓ;5[y|R?$Eֆxm1n0 E@ǎ]hd QirJ6P8@4H ?oF1d%p6La.BBH89k*(ea)v` $AKsdX 6p܀fxiXZՎNrd4aKUk=x#l}U㪉HF shjΝ?r|:cOA@x][sƒ~_⋥*Xs=q*UL#KZI$" E4o=ڗMֱ$`7$\J]WW˄v}?3Gmu&?#ɏ?1e7K.^u򬣷d^-/]իUWdd}Mmͦ:'],i$$/ڮ)}gzvAm¶&WI7bi&y7҄Oz,Ǥ|UwIVqfEi leLn\鎴n)C\UYՍi2p[&VTy wup[-^K6u%G6ٲ+௹m憰e]Ou0`y>۵[b qV!H{ꚬR鉋U.gMF?`GB>8cm^6nr )6[Z@BħI3yT8 `ɶےvnk+z@Zڬ2@@bf}Ưu,W߰ cK)VɎ7 xxR k6 h08OAfЙhZiT P߭iٓHDB' u7B&)VX2<[x}ĒMG1fGE?F♈:n`[ tXJ*3 g7}_7& Wƫ]vB,Z }"#%pYS^YM7 XS,k\<ĥm: B_%F*EYt E[bb $ϋH, ,gd̼l-i h:pIfmgt-dB*wBOMNJ&d{PC,^򕳪,l"*QsfUm6k:wxgW$ "=X8HÄJ *C&Rtd&HM&p~[ɂ+<di-z(*lwU~Ohy^ݨHwgĮxΙLKZ!#??=y@ b#ӵCpiv˂ SQpE˧%?w6;y7WS&:V B _ 19rƇI,TSȞdPx7[v1PZB$V+Z._铸2;[&GOvLSZ ,luiWoz>P26^^3֋P|L)ȍÂ~mawsxCi = *deYhrl= V &G;1u '^^&;VӨЦ,kpH{Y~@n %;XzިWIzB_(Df:pea)X5x ZHe#uT؝^>_q+iV VC|H"s[Ad8O ""WXN,cCmh &%y INUő ?or[–1A),˲`{- =LլɓCZx=BFi;L]æ ɔ#<=@.[H*X~V;$fe_f>ڶJJ3{1ƲMM͒Uŋ["=7DP&PvTQ>T[)1uiϲs۹CBECrA[(Bc_KWuYT &mq9i [K`u & ?9$0, @$PD"(ـj;J́Gac_2gK%D|VPC)i< -KJX6g`,= Tl_qn!h/n#!Ѕ0^֍r'f NLT4XPo!( %bjf])UIrˎ|E]^k uV[EkH;]]  Tvۨ7U C#& 2%J_Ce h!HlO("j6pڋ/;NgĚZAU\28SYBi$C4.+LN0D<5BΆeA¯p2xJr%s 'ֶ 9\aҹȉ#U聾F.$D:PC3do4+{̚D lm)bKC\P5p\ X`GC,ƥVl9ȵ)@Z;2h-.{0W(T aXϒUN&^7_(Nz ֲ;uӻ%>R#qx z[ahC 4 - %̇a(v}aW&biPw40tXW wRsc Χp"5TFI!"Hg D)LG4򶅃4ߵQ:|ܸfd*N/<,,D_!N82H=U>22ˆ%!b!>b9֩d:}OsB%G^02A$TQBoCIP,FFMJ'R~Q0 r{H۰ eX˼x8B){mV.$Rx.J}#3,($WYцr@ŠzLZ+0MXꋵGzL 6k$t="3?9cr+ڪkLddJ`I(dN :NVK#Ɣf2 W.mEǗ)@!R;d1=NrF_eHrW-@Fzm]i$ݞ✆3!b*$Vu~ܙ $SGU ,8H괢#Cz 'Z0EJ(ˬeLQԑ@`A*,bWK؏/:3#$?/]t1;)%3qzIq;ǹn WJ2l|2R6g UV}#AQTNR`2WnGh^N<3$a%=$) I埰wrJL"C"X!?5Xxk+B(_q"uq~n{ mƫJ5 BR'K(l!$`g_O7 nFї1/4JԲ*#[Pdہ7*ؓ\s\pkm_˗9 :$^ @E%#anK(bŠ]kl\#1+!k"(?I8Qh,$I z]Dv>̦¨ xaС%\;q2J'ӡWOMŽ4<3K̠&֫aҥن4n6uM';wɫ6h@9)oVe $ Ģ+.CQA8 ܢRCfz(opuV}Rm:y=\ȖGm *jE%Vp{d2@Ԡt-ۊTy2""em.oކ$Pp3zԠA)Wd#Ϛy+LʎC7#}h D &PykZP(@+^mrE@5㠦ͬ0: p%\vAŢ 9iz"yAGڶo $ޗEg!*dvf4UaW,G e8 -$Rk)]V*sIi6a>@&"jDDeuB_=>l'i*gݴ A/[$mqVhha`p(kHyN뫶nR#4 o!lY9Od [sTɹmT%.lS<^HqDGz8c9T᮫ZHow &I!{F4Mby0΅{,;]Pts_Q~XKۑ] ",a lDG[t*)xj.lQ( ej"PT\B !ˬCbqR"}FSQ܈LJK)zƕ*PU-mㅴD^p58yy3_1eܘH2>]0lƅss$!zц(fL}'[\$Ӑy.:~hkl\zzk;j=tTH VV~^H]@Ιf4&$'lF4ir d6K3M\\N;yBUk(F"߮J=y[ml:ǁlʇ|qM`M*yI" <sܱdA VZeoY-JsAR_f8-qvJy.jv5_T zNάc88CNPL5wq9aݨiVkNW~qAʸ"8ԱG]j8e`Giyp[YA1,S?;-Hboҕ_ Έ1)W5"6yw6KBvSv['B O~/{ԨOdݝ;[<ȶ"qu9YA`ydl]~y5oD)`ǢmY?tܞQ#0㶽60K(9]^6uJ\a*?$ϳ.>8ldQFX 2lrfpLٲBxFYZ[5ѱc%QR>f 3x۸`q3g|>P|/`R.! hPp3$!uvY\2EdP6 +zQ3d]á6*xr6W3{-k#'H4kq5@J vPJq0 jts0@dL{J:,Z0]醶]7"NSHLqW]Vhր%\0[DXo@lLJ(w?CvZ3#%`1"/|n* e s@9說r?ƞ d@jtqf4g)t̠m+c4 CU&ÓGmk /!DHtp$mtgI VEʖbcLN5~G+AqCnpz?kqDkE_uDi7O~BHew*x-;^5ィ[n]ƨ?HGۨ]N]6$.̥\JIqZ-InfRr4MfBd.E0N?I,ÛX{pac)jy衸Z8rX~|LH j'x2p'}7R\pq~Ǝ LS-`BV˸!-+ptűJP HE<1.J pҹ8Ǒ`n"v)*N&#xr=3;wU]Pru`6 sąj]M }sԒ} hu MXLm}VjJ{+2l}|bLL 9R "ZJ{J>{tN u}8IJ^HnXK7rcL\dO.qGJ:L7s&pr(ַa6ahp% &qc {HOa815K6!chGONCR)M9t;PbߦNS`xg o 7%ӫ1qpPz5-6FJjQe'AJ[8āW>PE$ | .sFwfIȮG| TI{g:22kzؔ9jyRf \H ¸02҂pR\.,ƾTgL]~0$?Q-B:uѧ"$ zjtJE'7/Cq@K*Tveg~\V>uJ{G{U&^D<{\N'~A ? SgKˑFrBPsW`)6xut,N 7$bXF)g`MO[W۞Wm2jyJ $!`:PEp4*}u b'Jg@ӑuPd8BGEV$|luD~{~;D2A"n)c{D9&7Gf4$2Fdir1LVᛢ}zh$5#%:hZFH|ϝ]` 9}C.E3)YT(rXTGzL/Zd[4 vwCi|-zB=uuClUoB M=o:B% hG!l!e `8W^n!9SG:#`HSJ=w'y:G2<_ڱ"uzy bGgT䭗P4,G=\ rTi$C1IRsFsM XZD9N>!Vl::$tT M:$p/*VF3km^TH;xM-)&餇Ra؉7iVwΤ~Ѿ/ɨ\8Jgڳ~Mu2GX)r JAX:.s?[1k4W_.h(;5x\Q;(D偟lr|f0W\ SHyqǙNwPl 1 2W^o6'!\%g?qv=OtFd?`bCC^,}YXm"n ~"'h*uk-kM_vNTL܈)H= .@|ÌCEN& 9q]'߮K=F8?M ߂-g-0HQ)v$Ɵѕ.X.8'V X3]ڰy,f Tt+ߥƒ<)7Hqph O=YgOLl4rY7x 2" .-tBָZWk}hӥ'~zml/.bIAEǥJoɝ&?Kt[R٪]M? c\0}ꋅgHp_pH8BۍÄmW}ԋ@)Ex!GGIБϙFbQɑ'F&jDc2\k@5KaGWfu<?p)!b<'>+r|b (Ѝ tsXmv!FwBr],[O>s j!<@{"ndy=CXB ]=?~j0eX5L4%Qީ;A p>FB>j$Pk~oD\Bײ@G*\2) > a2 JvBJ_8\D܇,'7ɗkHnn~LyCr;8xK~5۫,~u9}H|]'7X~?L:r7_ ^~|z7/Tvz0wd2''ɗÇOxss~.Mfs^hۻ=@k?3;%M 7՜NF=ܤnuC]~oWs>~pM[0姫靹tw{s?H!n~τNOSa8ă M|s_ %fgϳO6>^]%׳Kwz5}_2ftyswUn~rrU"1AAϠOW?>YA%ɐJ#: eNϙur8 G_."$&Xy;b`9 P~|Hm>eaҼ"YpRR"l`ڝ@{p_ T])۩ώqL˲NP4|o$1E[b~F/2H$B!7(4 ڝ%zP~GIۏǺNSFs=Pyd*mA/ _%v i͐9ϱ%]koGfFNfpou_y3Og9ğDhT'1/9}$kRUg k򖿫 sV8 oodQIEevELF3áļ/eMcgm e $ۚ:/9vO6U ݌/Zn'ҥMaWȠd~8/~שD:k%gІ6|ܘBagsqUk\{buTZ\q&W  ~a%mWcˋ{Juo .!n|DL׾yXYwza+" w6mu__vUQ7\ǫ )Jt6O{(|+$ۢr+mju[R'V2(ƕ FvmYM/shfէؓywיt{"/^\Tr[b L؛WnM>&n"zEӅ ao+ǝÁ'IrbC't[ _&Y8j?>cs!DtO|ݤ̵(]-uGEƫWls5]oIp8 H2̑K&!ǺcŠ{S2|9Xhz՞mbRL*g$H[<,D|?29lKF\P cZ^d/uG"H A [Î*4 ]$1=H^-4?iP>fʴS@>K =e%Zҭ .a*gYFO{Eˮ]+avhD dngW3θjͤ?|gW>ifB(Qp)cY01^RyEah l;ѝ[L7&]]~ϼWp XJ=#"ADIU (_&sOh6:mw\<^y? ̸,x{CpFjr~2Wٗm &Vx}{dnFwF9Iũi9Fz2:2 [)$g&ge@$70`} JxmJ0C abJx1i-v$x1[bdu0#؍o_8wI|"8<ʂ8R/>S'c "q"s|\La>G欜D )Tom墾0.vOD {u8U8 "jħS^ 1:`W,%DĞvT:aD>Iyy%@IdԴ ["."[ JujEjr1$$prf," @*hØhM> kkNxYV!=9+5(rvqttt|<@<.OG[<̼ĜdԴ ["."[ JujEjrVPxWGɶ@x7Ox7`אx'ϐ`[3phk|cHH ,,)%XE|IU҇1'eњ|%k(\xmK0KOo젃R&4I*v˔v@ =ٳ~ˏw'- "XdB82 P)_}, srfVt2XwOMVYZ3)k49Z|gzH/y[k TGxI^cJ(" ]BHM*K}s3SoeBIA $I VJM:*N27kW9enM/K~q\wxɵYV!=9+5(rvqttt|<@<.OG[<̼ĜdԴ ["."[ JujEjrPxWGɶ@`ǐ [ÍˋXWOx5YV!=9+5(33rvqtrtt|<@<.OG[<̼ĜdԴ ["."[ JujEjrxb`<9Y%)3 *%YxbN&379 TxmJ1EQ%_JJ.L&8Sbq,Cn] ~E Q{߻m׀9pCy&1^Ds@S@d`)Q|W-j>F<5CDKO5迖٠V<`rK|$ `N0œ _S4M{?}.FҤNre~Bɟ6)~3z`%V2!xdu^(BDƣ^q{prvO~gf{x;qcdy5<.-l x;1c2 LiJl3x;1c2 oL9D-xͱe"#+|F't O&`n 0x[e"KcI|h!H$lkf2Yч=XsrAn}x[Ͳe>#Sjd#Ɵ"mx?oN/vF,J7OFx({;櫅nnf^woeVڰy݀:NOXgܴJZą?W2s.vcNKkL]Rr;q\,W%?-$vY%p[fy]u'"K$Y2a} da 2CWóa_\"r3׽Ә[ˈZڲE>|fI>_f|}u_zWF~em覫t8a8x)3D.[P%y4IX4i/n-bCH6կj{F.{H䞓@C1U6n~şHcĹXWv򚞓$G|4Wv]c[I6RkG*LZjAۇ9~{q ɐq3g%D'%P,[- qsHfxγY!K8[c{ ĸ 4γgN^kf⮓(y#c%>"Xz t1\P[UV}ӫI?;qǜ-g޺ުgp /V=kE(! '#>` 5\%o-^#Xf tD aa꾛'Eg^.nӌЌ}o"^M5]$hFiҧOM|WHڗh_j TvѺ mV9>GE, .vqX$5K8x 52ݶenJV"׶zs|hE~S&~g۰͹nhSmf!! 'rx13T9 }m64ʹ4C[h$]$iLR@R\:zغ^礵(#Q`Z $Y7]?!^^B<@*m@ڬcw/iv1z'bf׌y,n w J=-)-[fdFIAk`7g'a^fsHU/gy.C>VxfE^tE'בu5io \wj$#1zXn Ogǵ_S!WrLǞ+֋yBңM K m?f֊5{0$Ԁx,T YREad~Q)W ; ]ߝ ~<h ;>;c찢t$D M,衽[iߝ]?9xˮkpp\%#e|v+,H كN<&7.O{s(~?um>5)8r qrǥH:z+x#'& Z-ͽ>xrUZ&dθߩ4sr}쉸@jGf"C2xeo"]ȍt6_0y `yvQpɯ_dHt21Sx40_s֤cd'R;P6bۗ>C> 'R.Oy '?=2O%Zò77 @hi0q)WqԱ"#-빷&LB*oJUlf•MOu09pACxr.d45Q{Df((:\Ej#`V6YS<)* P5bܐHB,h^6Ecu3Bts\L1b2NUᖫ|I0wz޷ *fPo쀰N+"0۬Wf/[D"^F:{]!}~Ux1B였u\:Ґ`JnFp0N#F rRFG"i=fe$k? drN9My s@бcIzT=Jg{< cU9%j nv,7s<mwp&_uxA%VX%`эbqR/;ɽ-dpqﶷMkvPPU͗٪Gu|/øPr8eaЀɂ`fm1PhA\H7c[G _~͍sn[3ºOnol7BЫ.J_'w2=% o E`N)E25)4yVfr] 7WY~f}U *͕ͫ0fQV?9F܋ު&R>!Nv[cWIbQ:ɶMܛkGJp;?T88Zj۞ƲD1ʬ]JHGRڿ"69ջ,wbBZ͝ɠOܪdjkR7&],I&ng\pzv3^{#&'PGՑHоpyOV""jKT>"&DC^T/I}HB` UC!/Nˬ!jt}??w?]o.C"$kO]&90b{pyXg9ň7 KpQ'~rzE..odJ ƇN؄y?8w)JbvpLA"/DJo*< ^V־SIv@UP%L/%kd0V57_o ݁v0V`h(xsUx1Tc0]'PUյ tۂY_K3i}[aS3&xyLrf~z~+JM% ϒؕ /q`$)ƴA=tE$v@S,[}w]^'KB)#ȭkw*J8s)h;3f-OEusπpPCO{ qhe x>%_Q1_zEVY~93_͑\nl0%Ӫ`8 $ 1zp\And:6,kC|mK@mb5տHV9,yisY 6YxɔK1-bFRliJ*F KڏSKEƬ~i)̬hI6_v>.-^HX'ޑyr.`l*+o ʖhܩ <󩡏"3 C.T~un,Q0.P";]9r1jTd4#(i:RDѮ\CDjazqkX7vc..ToXGߧNZd,A=ַ/yxEuFmxd3yr;Cy*WVgT5m&Er㉅Cx &"6Qu 4OK̪Cf32Gru9SiO$R͊D/#AJNgT,p W7/m /w8 SCb鼗s˹j۫\h*!xvحŠq5Sssw g0mQ5j =7:QE~+aK%wOJǗֺF),Qg%; ͔ԞZ>,agUլ{-gb i8Gtx@Vr1N ̎l!Q%d''ؤXX(?#LnM]JݥrS`h[[Im`e@ /dUAmʙM:!mFHl(jz`Lby`4ċ 3 5{ E)iT˘ْSOC/tFA5O(g7na M`.un2}iLA& d[h|MEI^^HYМye4${Pmli`)YSh7#+[Y߈ID+Sc&&0-]+/!ݪW>XD_@h ]F)b>k w*rhjPmCH03;{ 6T~G}J(>u3lES{3>j!kh=֘D<:lX NaB3 l0"X7%&3쐨sM]ZQ:u6[6+"™L|So5e(\Y~DzB_y"/vUٽׇ@DI*ɄW!u %SmDFuZMҶ:s(wٻ=]Wo AHb yUTSЭdRpaû4+<-!՝0zA 3P*? .N'iM{Kv{n'ADMa#xݨm`׻=nP,1yvGnh"3Q|#+:-G6",S 3m}w3{ncJoVe Y"G7>Bh) G{xjh: |dfӷ̔ ))H7Q.EǷFҴ1oQ!7R0̌0yrdsnU``]2?aOAݮF$|oZvm0l*D0 wŶz03>JZG|n UeRBT}zEh:- )uc$0cQ)*䷾2?9)z $t ?,̄guV6LqG;L}=k&:ր{ 08MrY%jsi[YҨ 4I׶`se3Uik0[*vZ~&$@_$()@=+&~Qe^ɦi[L ! i E SK23K2K JSY@7{&"=hx[|k{xR>`tq^Ӥ&ng` o5xR~"kC;+'ɬ <#oWm^7}s8/iRܛVsngiyU4#Kx;3cC!BIBFbqFxE% %yű љy% i9 i`5=!~_JMd&ٗ͑m hxq&lC+KqbzɻXJ222Rs tAe(TL*ble{"3R';s۲-J'Ϙï=7"';o>,2fFeGF*S&Vi\j噦P_PZTFbqFQbnqFnNf^j17a|Wi~ +JoZx;vooU&N͟5#;~x淀14?Ȋk"/StF=.H?``;rSLu3 Bb^ ijhX+HUMLV(K-*+VO ե)pF%$vx=NA 0DЋ Uhmūxу?)I&z+~@-$5yF'tjʋ w[3\(ˈ)z[LiCKNYYHE8v{уmӲ_P`jTtIڡ#9S'@WRKXKX/6KmxZmo8 $vmbHKv,іhHm3(KY]lyp8 réY˪~ar6,xœu[㱈[G`q9uďiYgo.;, ^]@C/ C7{]v>WC;y*"=/ G+/;·>;zYD&^YLIu$q 񐻲N8o*H䵀n;qbˢ&McEVk':9A BNIVafBJ#QdXyӐn}?Fk >Vi8 ړԘj"cw8;{]4=*Τϙ7bAHCKιSJoޜ]\#$+?>ÿy dctOG\|z#MIۈI >˞  n<>3pZ_,=V G?o9e\m2?lpo)Lg0ҧe;vA©bOa;Dh6;ďt`ٔrͻ@Z% N;D1,D^̯W$HoV)=!kD:ݾ8=5ҵMmS8(x`ՈCp[#ۄ.CxKgـbv0êO10w}܂pe2۹sc M8?Ƒ),BlOHLQr~ 3FQopξz^MP0+5μᄂGP`(AZ_eS:yVca7-xdr$s{9omQD& UHy01;a(|b, ŏ_M>V2n A IL@Z=_()KɛUUJDe$5$?<R]sS 2u#?1RQj*,GV2SmR*^z֭~HH5*bi)ajk+|ߩy&&2>QT ] 5G\hV׿~ʽ4I^PRxn b.|YwQ8"U VPM>z7BӀfϫ;CkiXV^*5LOͶ,Pf#63\tKx)k VtDD!?RdV_TLj8R") e( sBej ICRHK!p+Hk;6rVTzUrG1[FƄm6FepUw^95s}#Vm .241՚ `he{ϦEЉGJ@{ٞzPkv?;3ߨ7]5NU&f`]WU/w%3plVwҙZ!?5o]wojj̦K:1ۛБ"ۤ^BFƚ .v UXB{oofmv:aG83ett'" H } ;t Sl4Ƈ Oqc]^=g ؀7hk00nЦX.maA6K ʛ&k\o; hTT DS b[1S%t:DrFZG5X!]!fr$S1H.]PGS\75|6 W/|ME+]O kNp˕{oJS ^=*UX36f 4tVrܶQ2.2|x[WA93/94%UA)9=S/C !Zw,()x[{c@Q6Ɂ&wEN+k8Wkr2J($ۚ(&TNv l$\YeK*t;@T|AC#86(?9%$QcJMAxqc$mq ];b[W?gx׈] 0a琈;4QDN\Y%QLI[dmWT*9%xqcgLrՙ=Y x]ͱ 00K$rK=Ћ$W:v#A=,D_E1.KT$cqMqI:a밡?t`@#c -)Gx.י^| _4нxWko:L~4+h†ϋR ARRJ(J dۭ߯N JH- 3KE}L@$!K]rlM莦?ulCo0 xC Ӎ%!<١4X&)k@;Ʃ=]=MHW`p͠3 aeMd<6St?_yL |XzЂ1-2f:&fOk #MeR1ɌaZi (6wftx,r R8ٖ 75d[85MY~V~r81ą&$FkɌjd%KxVK뒛P?p\`5>FT1 08^#C Jf>K53xSY`oh^3{Bًr ߀2zO(+P7|'-Vt33C[nA-4 4)n Fl (sg ظ#7hCnE o-QQH,WΎM6QU ?t"/%v[zgo8ӲUS]^F|Jzduja?p%T&R[+^*.W;T/.%?KSW{_ǹ@.`&" Tٛê'1Pf7Q8,wuJuz \_n v9ej1T3nWjRš4tE!c$a.ͷS]g)t,eA{ivi~9 1XDmO mwӪZRG !_'xγx`5PRDwtpH:nm+4xDwhtȣL>Q=7VWHpd#?Φxܹ]9G¸TJP;W*;Fl Cbx&$8kW5WrFbGbqFpI_5Wf^BQjqiNO5'Ls~A%րu4!%%: %: %%: jP Ui %Eɉũɹxa ?2o6e`d O>Ϋ?9XH׊y2j@c:hAirB1v6q1JXn9`ݧҴ<3QmwNu~5aL2Ãd\mfGC-@ `n c&*J-)-Ӏ Z..⾁(xk~-%SĵQ;QmsV i/x{-uEj!ɇ9e$24rӋ=CC4&sse3rmr%exWiscRQH}ȅ(PL+vT4"KH<,I%[,b>^ysWN#T.aٌ"Qv#<3&dB?7-3N(/X=h|k.ir5y29= ߺ'j{]#4 L:[)Zb ՚F#պa&i.+kJJ#7ZNNI8zՁF -I9gǟ<@<Ʋ;. ??/hRۆʕo26_૤6$\6ۨ” l܍ 2م$o#?wK``Di nЀ+pJ[)RqF+@8B -z$F_L$HKTlmd-s9hr\ arS~~= XON 9L&0/oD051#[aQ Rۖ"0vabJ.>*t@3wN*?:ysZhG6-;e+wߞryό@~p~r4A~&#|3-NW[q ^#>,1uOU٠n>F(xo1 `2tKt9! iM?7kޏpv"y@b )3+[%&Rl.D%"$X|/^\y)e&$kǨm !c0Z"ŻTfA<hdrpF{tnSo0w h2|{V4SGg!G8x=zc$-V:f$=:O"Fà!OL6%̂j~^^H`_ݗnJIHh(>chgwWycO>8':1c%~+C4w3>emOeM6?C5jAbTzLC!S_7Cg x\msȲl~[g,8M989~+IN\@1HI<=#! v*ufzzzzm'wVn0:~:|]u^T~J?8qU᧎9=<8nכΏGóڜ<9:?79ۗJ+mQ;tFc :@w R]9kXtD~c㯉kup ;W\SK=y& Cfhf󤹥]iٿJ7^\zi~ @htebKvǾ˅Wxv{&]{|"u9n֝aCl HH CT\jH W,/fct(8:hq儞s1jQ__Ph< <c,Su1pH@'qcc,0X`t(Fh=t}XtSpJ3P: h߯[S'o'ֻMV֫1fPfYqy<8n H֬EҘb"O泒>XY"yv^ Vb\}zY ^V#̇'gY7 ^)2/P{R(bp gt*Y`mo(B`3C"L7 hƅfq6:a0z>V>ԣ bq9fSS;Äin\hnvt0iP~Bʆ٢ʤ”eԀ{a84ZEYv{~r>=k.U fD@Cw6H|sa x9DB=Pw"zE#FA0xcƗ~܉w p_|;7eMa5nS+QknKŴ`Fl֌iz9 =ufNf8A= فs ^m# 5b9U1 z$fp0 ;bl|CTyKt谗ͷʃ/MhW[H*,V3 i7$Fupr ѺT `-4,Sk)ϴ qv$r-YTۊ";\ΉK?usv\@~W?8lA߬N,݊Gy?`‘׳Lv贄| X7WYBk.35cx|WA.Ó#`wƣ\ݳÃ"|bUNٯׯ&0!HEnMb(%~YLʎ5]Ljߔ0-Oh I"\&x81Ә/j*_mFTt#AIOijUHǧgBu&SьV]4\̈g?>+qxsrX Y~7⅟㻍KO {;l|ӞTUo5VZ>l&jz<((7>:DN@orQwMϞr؁GfcwHFcBn|l0}g9 hZ\i! 8-$k|(bCF_g,AH?d6l.F14KZoEtW!Tr:*qPsl5ecE`XXDP.L< >gjf&I[hx(IIjg+>i~byE_'wٲ8Bӧ|qбxh$Ur3"$176H@\4/yHѐLLVFNf~&8_'ك& Urz! M`VLLz@a$`c]$[!UtA8&Ff9II4i^]R,M#&*Iٛ`A؏13”k'1eQ$I5s fkM֖H?'JIv%'\}2GKmmuInb/ՂUHw9zLQ{*l,I`$X2uD0lILnNh|[d\4JjdN{ΎxIg`4e^FLkm g@1c҄~,jeo v ɷf<_s"mP2BLghd!2#yNA;doT"e!SL:3,Nʃ~ήp0N}2gI0볝gUlOH&m בp M$#KV|Y^7D4Ofm+us!Dtl{0oNIe*ah6G4C+W+7ioZަk&;ͅY< ^!L^3wd}5*J ~; V=&crTEn]VN0p8Bߔn  U'w7NoAJ0oBzyXH0p,|k&rXzbǂ9ɛGxt@[Są0T:C~HBGV "Ȍ™E`9];I:}t7 2Mr@!s:@:)p0B).| NV9n2͸ɝ/E [jԥ[N@.P/.&#Z.I$nQ~ 3@RT\{~9\w -,"ڏ.L1"!y@!vݺ`4H@KB: 5fڱ›A/`VaT8ތkRz ʹ(9!.gf3HCȤ!7Mt 9',9Xī'u7^Sn')rw2Gٚ*!xU '+˒})f갢`2~vG\\:#LYmY!kHm1`:0H)?ѐt9+_.fVku@Cw?ވֹm;{jEV+dkopDC!=+רnd<{ k7 '4Z^?fhui oW`\KJMԫ`L@~BrGXaYIzWR ''&*y"ps8 )*Y@6+3vK47ɞ:h[`q<&@iQq1ƵǏ\vL% חɅhʄN4w&S]]y,"eAH)?ءIo-Bd.QrYb쒞aި &:$QK "ɶ2.6bKn@c_C,;ZΡIᶘ׼Fd6xw x0U `'uK1p~gyoOK9q%)rQYqk}Qō0Z;NL8œ,${xuo@eWH(LËA(MY ?ZT))sb_b"ߥЩ,Tbcg_7gn{{[j|0ΣUu~(T~74Z~ڕ%Wxm룺Ґ[va\K][3LǃkViyXNXQL'.|Hh);fcɟP\>nH! s "6 e-؃9R"9p€߃QwY! nx;kAӃ3:xnAY&ԑ\: Axضq#ͯ3nv4LWlť5Й1nZx{oㆇ u5@Jxk[8y5,k'O1Jrr< c̘k,KɷM&KM5$\PWf3ydN3>FLKaJ|*A*K*t|2KK26Ǚ,/7Oxk[`)}-,D';HN,`FSJ6']d@f^d_wENF(j'(&%g()e+&$gU)d*d$gM.|;v2BGWg <x1q4 +k (8:;:{L>=:_%&f[o2nGx,q- 'M?A@:AeGxJ:x}TOpOṉm@c\AD(u[nĨsa`!hM4 xAx1bB 1^1_yX{^/0 Bp65*QL m`in[cqcBd4 M~%Y+c!Kqu1._Lq՝P -NK&G\o%дQiK &슷.XhQsZ=%BmI`Ti eLn>Kry|:C囘D7PBac`o(R6oX8GvumqEGt*WT8]ѹK8%T ;PFW|@{P?x[Z~xC-鬧J*trӋjlC"]-&/W*eh5SҴ5TpPT!OEh@kH nI*LprdGI-M|B+ʯwN=l>x[Zd/jB* x[P;c99"̼ 8\<='JO>'͔X+o1O!)er Tװ(1EIGAHgd%(h䦘(g$iMҒҒɉ2L ̫_8О)lQ|͌^7J xu 0KsE|O )U9%Iۀ@o^ }3 ƎU]mO]'CA!czy7(Ukb3heb8!IoLs;{ɖl__9ﱲxXmoHl)UhhOD$$ )8T 9f VF^{fvmp ]󶼌p(bćQ7n֛΂:tz$wW~Ix X?cd_-@5^%j4)qkv;e)뙊ic}Hl/QhZѵC&)@ipxJ.6Hl-{-92qN{'cPzuZQ“|Au!#ESuƃ+ʯQvT-SbpD+ ?:q6%|&Xw0Ʀ)F:L8 I(FX4+(N֤X#uFu.,DPGIly &eØ@ܠnBU4YM*xcF%V(}M}&z=icUDATa95V2ʢ uɐ:E1ke-1d0nl< HWn tq@caZqeE,C~Y`d0TյDxWM#*.D-*J"ڜ뾌5qt{gwjN$] 6Ң2C^_eG}&' >!슝KI.,Q+rKrf>A^/v@z#qP!m}~)y̆>f'1"I~)p4-E./r+!>v+ۖ\g*Ѽ̺ٛIzn EeYB=VhCzB[zM;y_|7e9~ !T^T0$*Oe_h#8U~s=Yb*.<*[uG|bf0AF`o Cܤ>i;|@!m¤"pGW$sM-S_KƃڋLPDi)}L([33pn#Cr|F׀I(a(9TkADi4B]&.ι54߈2F/a1ʽ=VM&#zѢ@4&%x9{~^3iLsyٖpl21X{yK(<4a#Tj0td*\,%kB4<L(_%sq V:8NB؞rM~[=Z̸c %K<w3fc.] =[Tڧ[KvAy0`›n*sPݶ5%p|*x|}d_"Dن%̡H^qz:XзokF~l};7 *J?¿o? ^g1f\bvI$F#xeOP3DO,l F HBג 1h:;A2}/ ³/OvIsO{n/S,^3h9mBКs׮mMiQҪ״;VW1<ʧa2dKqaX.IX>z]<㻭 ? ;蹏>9I I+Iįzd*џNw˦ B9'tFnJTAY6Y& G5ZEEH?qJoaxTn@UZU4F  (%bM[PT2C:qehII#RJeAĝ ?7~ vvj8Xy3fǟX[]聂Su1)7vu$!\A^G~{='pJnsuz?28k)3Ǵ v{m`Wz^o@&{(rGaL$H)2($>hlo@: xAIHe1IJh,@GL87L8[$?3c Rbxո3 |>3y65 ƈO3ڷwSWARӵQX|T-P.}88wJ2$q=`;cNӫ|ԦAQܾ@m`Oeݙ {lֵUmKGB/RŁ @EW7-g] sL9y{8l9-ꢶ(t!g WɛMeF ]c4d`HN"算UAAB"\k9,xe" /u\\>j)PA|#Ԭ]nk yCoDEU[%㮝?IQ,+E~ljZ#Ob?tKЏ 3EWd/> Kn]g2niKʪyưCwsY/JT>,}2˚"G0V8jmT c[ ~e- mPxTQOP V &D^-2bum! nmڭKG5ğ0|w޶$<4=wι;,@,vZbmW ;$8 x)9;pO}#QX{`~YScE\f@VxD+ {rFI a'"w, ".I8@ "4_{ć DN D$ TpP-F˛L& N 帗^@rep&GBQ?EGLx;/A m}Le0*q5G( 1㢶YdA@עj9$P$:&Ydhakq"z<@dO$`_5 /2_{|Bf6 Mx ǩ3مQ2$&lo'aL%WW^VK,\60'ptl =;hsUUEh%IH I*e 1ȀlԴ}s#'ɳ3Mu3mDe*5aZ&"? 7#19 vX%˛X߼b20 $ޯ{v*߲jACW.1 b7='K-)f8/h!_A|%]qPU*4%)pm}#(mP*7tCI 4c-Cj!}}Q&C1vqo4^iƯ)eRe%9ЗUs۩"anF*A ,r44XQcVw$=?\%'>$xeNAS]b,tqXch ,[Jۆ4dle`^ ^Ι334`Ɋ(lDn8-˪)Jn ĈsשP%ZMJE".Nn~ .XTB\䑻BDqE[c>sozn%w@A|Jf?f+ʇi[>b,4xYEɱNTʱ2fnsCSdto~=bN%g2xh sKSrJ.=z (o:fScf{Z3 iTRM(@y3I۸Fw|Lq4qOh|H7$$hA\ zδ uޓQ )3ϙǵ 偓NG10;IKHDtegPQeHZArڥ~jںˍ\ҍc莿jm:x3Mg_uϹB2-ݟ/&e c~%=d58YE`pzQ4\wW`dz%6xejAICivE(R䐒4[&]eiB&Q(f nagR⥗!Cc  >LY97egkci0MbiNK%z%zpT&E$+TӦih)a&$qbJ HYlq􁮺,ZO_ WV'X)X;mjP.xn:x[#!;8$WA˿dr4j&GٕŹ3S<3KKRAڂ2z2sN6QN)NUN)H :;:{hrqVsqr&'&ghQ0QH,дFA@ҵ@24K*tK+4&Wq!($5p F xK&%{NI printf("CACH: %d\n",; 0 # else n ?<l cx[֢;8$WA˿dr46KHeA*Fy: %: %@,=̓qjv2N߼KE-@#8d\Rk皗= 5&ܼP@qA'#y=C ^x+%MGAhr#SxBf[Nbz{SKhH@hW5gHjnAqIs~AepI\RkXRYiř_4lz -/-(H-p@a:' ۢXdk**y [uB}|Zk7_fCg&x(qIx%NQzxV[o8~_a/ݨrSP D:ծV&N6V{l \ڍs?GLف06b[4gzfSu`>G%;Vrʟ)ƞ4@"}b Bq l;xa{q {aA8?0?$~aH6̳6mh"M>68S!xiH3>Nfs}ֵr}Lр@_oo9:H+ 7'*:#+X>8{"K()r#_|6Mn}M$6@ ZvZ;4v<ˇVtAT-pW4FBB͸vBh>[g$/?knTyrE"ו3}enoQ3CŬ,vL5CHi(vba֗6vCWjDN&>[iỰ3#az=[Qa=\VdiOq}L@hSEBZQ.@mjh#Tuմ9RnJ, 8!=Y [4]_ ԶNwށʡ5PS߇]}_dwF\* SDnp&g b~ u}1?Lԥ#X8x@bF]  v DyL8c##p|]h7M㍉EO5!dQI&vRCX̄'hިPh + [ ocȳھߠ-I%b#{B;yL (E .̊ 5 RwȄmߛֱq}r0 hԜwy?DZI(X\&%\)r^7D66<=b2J“Z5r x^0\Fyb&B1YJVq';)[r7Ue3ooI(+X?*2h#ȋ-+A%BWR6x{'FxFoG6FlG1nUx{'FxC~xf-#nx{'|QxC?+kk歬,[ x{'^hd~fRf& eLM͸SR2R|B}|=\'g74005GS`d`inhj*`bhibl`*`alaaf`*`hfnnndhv\"`b`iy+% wB6}x{#]deFCԴ̼TGx'Gg#.dQgWgo)K' &e16tqt rt  Q03As K)Y(LY6)mx.2OdY&&3ę ,&+1{ 9((Xmc8a lx{#FxF"Al`x{/Vhfxf wx{/tJhfϳ22gL t1x{/tGpfm93gL m"Bx{/VpVɗ?E8(m`d`b1ٌ:d6)lm9D2J<3K3R2sR'Wpȩ'g$)hV&(&-` =9c 3АQ-n6x#xGp/f>sL&#i*x{+Ipr͇|T#CBC L,SR2RC"]#\L ,6Kz0ɧV)$g$)hy$g%ʂqs3wx{+3䵬NF?.fRNKLJ  =x{+|vgWgo'2r3N<5y#w%rJjZf^sHcPu\51=5'UC-738UC>1$$Hn潌n̓ײ:1m9ݘK95/%3 7ox{#t:6+7x{?g‹&d쭠`hƥǩ`l4UM[ogp{L,F&2IX(s uqU01D35b.k9Ofr5627@U`fjjfc{kO,f.?S## Y&:1Lb3O̼Ԣ̼-Mk.#8(1$3?o#'rj^Jfb_zlx{zg# x{!srJjZf^{c kDh@kB>`1fF׼̼ͯY9E+rx{{Sff=/:6Fxc78sP_@iB0@C^;{ػfKoEJkr|றV/#i$F7F|ꬊ's/ř;_1 #_3oRxS/x "! y7Ї:/؁]'_,Pl9b7^Ft&vb㧟6k~?676D;y0pg~T^WpOX t4\q?3qC,bv-`FtiMzďcHO/bdz͡I8ŸASVE-X]ŤgSh?ݱXIJAzP4a80BQN4fBEUgj O(f^<@~u;x~'f Ě7qӲxxg`>m䂏/w=jbª8ڽ8"DW,¡tx0x:g3? eƝBUq~O ,rKD6WcwՅx8٠!80`PƢ6% ,o Rw!L'ǎ7=H뻱'N ey*0/*e:"̣R!b }qܸ%ȑWC?ȍOa1,X 89:aktEtA>C/9כc@0!9> ȝ|h XܟƄkX o~OɺÝd]5R_\$ j[pRMHSkN QJAP7VŷGU:A^RRKD]8 _in\ЭH녃fɃ Fd EZ-6b\ذ"DFAloVt:4`/eFfqc[~(B RͬUdyyWpݴmU+^ ދLPLCKfRг ( HODܠ= 簒s2'ÝvphHnO4Ydg `z?m񘢊w[p2;.w֍ /(լ6bqp/t^Uqw.~10co {;Z5"<$R0쑐 1opB,ezHT|Ptw]jo;4$Z"|<@`Jw9)Ud:d^v YŠP>5|pan@zpM߈ڐ!K[‹0ڂ-"Ccd<"wă6ސTr0Ck \+V@ե (>,xsd_0ª0B4b@6UA\T)c:U]BM`yQA xVHiTZ[+2%H({u5FO{O ]t\(2,b " !S.2c-a{Y*ulP^tгḿ}<^vwog;OZFAsuG?34tqLq $g~\~;eߛN*zV8=*ߒc.0=h{kkCU.*3O5n.6VkMPXSVfnr"| &{ev 0>,D1Mjdz']Ow8#j4('؜R1h/"z{LSs7]"/Sh0jSw ( ۃ>Qٺ߻ؖZn_jĦHlC)t!cs jYke:'xh"s OZMNq ;>`YO2$GʹdZf`Pl]?xT`'}'t*qyxֳmƃТ*Vy;`4𲆘Ơf,lz[5qZY/%52 eN@&PYg$WȈ8 )XO NBG31{LEs`v7m+h~,Q0a͎,ul~:6:w,Q;@і}TwTXx#6:'XNqmMl`iQ.CM{pbQohTd#OF ЗK/V+m^+4'V$ kpq _.] (t*Nƺ[F5_ -aY>Qm(n_ǰm&Hb3l "$!ˢv,e2Ԣ*: nV\̒AtG0w&5T߄مN_jT(Hݮ:Xx>K>J !:+( J%9yMI7Dv&uσ}h=aØRH8J{p}|pj'G1qHi,TGڄ󠏤8^;QudF K^c"ōirt1flv F[yF.n8DA4[7ZCym}xb@@bV7T}@$1I'oNMF6^%P_Uu WS؍.U[e|&\_ސI֍ٯ;7~?Bzٯ |ȸ9mt"G.;g{WyKq2 49!9\ݴ+HFXjP&ܪ ȀAΐm Rz ՏI #dS4!a|IʒCFAKրo%Eu{)*.X\df9/bH:`"xt'1 8"08s!ia!diCOF2`PxE9v+w)㹺M˩߇v"W-g62{7u)qElBK,H I~)!>ZV7d`=  s^6 eDPމZ| Y@Q1ӉS6gRwaO6PTgp(QrGl&y\1e pV.SS/S Ds'Gr,(#TКVld a8I!hW,O^Lc X\?њTAq3` Y"DҴ bQ!D WzA'%dP݂7HةuM IQnCj J8rlaPҋdi5[tV(-|0."G@似-ЃP#z:ReJ7cUwѤXASE"ۑ8j-䙻6HFHTQJeAqRS +Q[9)U*6 ծT~fAqw81<2Fr )UJR3 f wf "7:k SWN \WH_l܀El܂ID>~a>iԍ>Ȏ`J\?ꎽ^6Kn\$ox6?;$[Gfi'OgQůtV hURȬϠͻÏ?) 8O} "kA!6Y7ͬƍ + XmMqx{)8Ê8{C Rt2"OQ~%w \Yv}IkX fb;BddP 後jUWUrJ 2OHB>i\W#zdn L(Z]%SRHffNrCD,BRE^bmx;=RE !Pԏ X(/z}D:1ȸ˒DI ')_2d5v*K3\KBMN-s..;~VJ+ۄE(sqYB6ƹ`M|㏤ dg&Ɖx *^VRjhԵǨڐ^BAUçFїb1L0Jf#XDT^?0?W@bѪKyy+ Q9&8Gz%P}vQ8኷d8ij@7Nn}812[,YPzh/'0^I=ΞGH"Cqռf1xҟąa*=: FOwJ<7qoҐaF$IWԬ&w4Y2qDMmzbfIg"<}W ހd@-W_6 B݋fI!'k^% ~>{$~CGP9tfoY A/NcE8q< U4u'O8ybbfHs<aD !x+[Sz^ƍ[P8CqRNl#<ę%fAoEB0S`d9m74$r*gh{P.$ 4Ua}\qj9-"[]\g$^;-;bZ#ݕ?\O̍tIAB#r~ P{9cy.dQqA7"%|4! |9M g>єxD$8+$1)\L69F#f1^tI Ƅ6I$MR4)ZUibf:'CK'R2(?xrˌ|и9139χ8{.7ω) X[jh:^CąnEE( _%zl1q'oLd ^).+an$UzP҃4==R3*:֟Y]ńnؼq%ݖ s{Uu.r}oJ i42^$Gjݐ$tҍq,QT|gP+SjB2dR$I@ZRSJQ5K J)k&+Xi CY2$cK tD%mm@t >UPRJ&ƗCJdE~eGp_JL;8$7L2D@ DM~SїdHDlI\3=tuQ@ D:̛Dm%)&&{k\g/UBE<>y{u҉knNYT$0#$JdRQ3/߃ؽsƗTj໣ I"fvJG5S6a*/e82AR[p-KQ%fŀg~$C Csf+7վ+PUk*uH7+6]k$b>/21`D$C* kˮ&͐YT N: bL!Q0l8 R9UjөP/CFv Xi}1F8 f{Iz6J-t1T2?LrOkҝB J(|"*5yvPr̚Oû߱~%œ/捚dҘիkw ,t"j Oɩ-aVnoF :[H,m+ōW׍nc$7 }bU NA6`3*üMf1\:: dx p< $5Y SX!O r0_W1IX|9S8:Ν Tl arl[rU,JYo뛯.{Y3Ve'gj]1E[D:2?pʫW&^nF*2t31>#SOHAJtHnqG_)˕z6ƼrH@)fՈ_]2(#f@ϩFr"1#3b*N2tUrIyՙgB I8 i1>E?sBF@'?@;CjВ9c&\$N:7J A6Q !*&t0IИ3! )ۛDBE}Z_懮o"!ީH}۟F9L6IP!ɨ0O$,n0eY.ʞ5cgèT3^#a65ĥ_Rxyх[PhqdNgLtDz4yrV(0TPT@FKQf0IPt۹\N[c>+7վh^l4(N:-{;=f$ _Q#ʪT p6uH䯍 -]/6%&ㅺ>"*ɈMG 'A2BKZO~EX5Y31Hv06OXj\@ {"q'>ͩ%ҢtPT@ X1F8 ni@(q֗}'ARiRmWI(?͙B1fN:qԜ StPT@SXbdkF8 >szq-̆1h~kl RYeLaW.ECo)t Ͳ|J9,ϽW[tC.QuIeN*O?aob%!$0I兺d2?v^RPTprIj{Էil]pT{|#\/j-,41N:i%+%L*eb8b}F8 &L&H &$dYQJ#s =aT =34۷͹ 9\e+TTZqVyMW+|-*T(JK7Nh>Sg-i  E$2̡Yg1|L~P'h`0yD: fKf D<ǜuǠXXNJ#l}&K1m{LjV nAizU<ć웗ޥj7kltY[$R˖v__jɩ;! E΅QH \0#WZLӱV5mv$Iw2&SpނOCi9Oq ^mOKٹ|"zf=V|) IPyRWKf1Y?/keI|kym0)#G.Ƌʳu<% =#3.z)P7=hh$פBJ]1,#A$.^s> k~E87.~"!JB"J63W롅MxE7egѬ_bxe<-S{Ѯeq8E3s>YilHB镴piqJgt sJk^9ɚW)7loY`> 04q/ʽ!W72 #< f^H(cʙH 6 +^/UG8X/SwՐ;QN ٚ$MM|v̏Uq0Ag i IJ-½a,d\cccC{nCʏ=9jra ښ/ 7^#Qm;=Rb ̔!XwNgܸR>= \q^`c])k4ם&9O95<@_^ˁRicGC <4:8x{VN Ҍt]sd@\nT͵R1Ub~Cn@kɵ4{dfU+xES%n j#usAG,L|XF ֓Ö?z[WW9*`ŴTbcFR9U- U֓%MBS5lH;IbW㑐M?<%H_dӃgPǐGfDQ|8դDD0Ƶt_:e1)^EvscJG<-ɤ685EDEd  OLpiCހ+vꔙ J  6+ 0l$'Âg1IvFThTpY\ϣ㝣c(ÏmxZq=Ucƭ֖.M[1T(5piI Y$L/gdt4`ԃXM`WOjHW~/+$u_SPvY8ƋHfU3!Df\QXuI7 &5Ͱ`[ҺP |qqkQK&^%%'ulFG{E߶҅JĸD'5~YZ8K}{k ꜱ"IϚ>IJ2 %)\1㌼ hZ;ڬ ˈ6vbs}cS<yE&r檋Nz3豧SY] E"sx}\ÜjGސd!L;f/rԹt[>*קk tz`ˣDXD{F++^2F5!~ὐړZ.fwf8 k+ kwTՋ[-왶 /6)}7YD {sGt`ytFYy)#}.\j00(86I-Kfqx&酾Roʡ{;VTZ!k|ֆu®ޫA|<~cԌ )|ˣ#%M8*]7Cϟ {<v[xՏYG}W [ 9:٢kyHYAX߱%֌W/YYEQ?F>\V-bĈzSȟM\zU<2n{;!ySm'pǗ7iDj M0O)^$r۠k7l?Q.TۅEIi8K1ΑBWHS: ~4zJ| tl?T^4/n}hELnԠo<k' NIDpj( 3*U}dI:4$0HC3z&6&4hBVG3w>g+d@LT%kG`ЊVQ{>Дj"#nH xeh(TOĞCsPwW>ѹc#MVJDoyR%4v{>|m4(| }C@P#tL ?`Hl71۷c tլsV="PLӣL\_*Hq·g+$Uy,􅞸p icb+>hY,ULaiSo<H*eXԆMaV>lg;ތ<#*W $^x/8S$R y&]&2D+e93˜]Qơ=?hS*M3ֆr龰iXeA0koLx<`"y `Ub8 /tT#p lTRNAِLZ 1p(c>t=> )t(vϼvwvۭÝ#6:׫ʶo)C wCT 6ЖP(a Oz!$ZEb;2DȒ_7j=ܾ6[eXמEY֊0GʁkL/&r4iIx JIi4v b -%2jvhvΘ/6eu`qF!# 垑s~6`o>O4G(}57Q9q7Q &Δ=;z)skCl̒lbGh'_ZKɩBsJbgXξ[iT:a=#Cz\F#JQ$c^Jb"7q85;xp.SE7²o3,9 &pzO؟%|3X!yDDe$_hu N6?F.;D~TNJ*2{(3)cd(TqȊW(PJ=yǞԴ9Пw93 y%6&%2ZJhN;$gAUǞ̧0'ӐJ2]xnȣ)r**w!;n$u@[Cq)I+Na\W\u֒}Mo=YGJƅc7~﬽rk}-뵟䀥^ASxvE~2V -k,4 ^R"h<9+L]r#HU1Z.xMAƌ1Hvw n8mm VBN70 as,'kx6Il ]$ouУ.@Y C_m;0+Sxpj:0I;dSnt:MI yK:4MX{,:ڿ*߄N(BqG9"k9`D̔A.e51>& 6H.@G{, 'y+# ,11Xٸڴ988튶cG1< l}0bhda@Vb%= +tGZ&޳7gظ%fˬs+a*ob}*`vp(g#V!9ԥ=Z^Q-ጵD^}PXHʹ)uuظ+673J:K9zdԺ㘣N8hb8k/f`K<;tLFAV9WOݭXVL{$y`u)lvQbn~$`!ɘu;xn1>>NǀœѱM}|L!ھ'RKgK ݋L ^(\a(ghuBxҘB<"nP'bfb.M݃t{-k ɹ%PI3< /,y¾ݶz̬@ Y|yەXĆrc(uTMӛ|~ҕ(Eae9DjTTfEFv]mzQ2L]I.|C8tIV4\0t[=-#=XϤtMî'R@Ҩ|PZԏYr:#PcPN8P`xIxpDž^|0R(qx3rsSODY+Lkd4Xśj- B:Px%^İk4?eoU|Pl ;S0Usl yDJG]_ %n%X)'qs!92U@9ad7.,{d}ڷ5>12xIe(RR`u'[-&QS ⦤I&- @mΔРZh'^ӼHo)YJEI$O&t~d7t͎5/}ʁe21\YZЁt4snHG8 fL$MvS|!N(*EB^W܈.QwKn0Ú(—}7蓴AH~ &NX j ;ikz_vI 6"mE}F1j џG[' PN%X臾s%5&T0?t[6 #łxuF-%TDYXfwCzl_ar>EY8nU?zAL~>ۿ' nrE"6ZNo8qJ tjJiN|\q_Ѳ[BChNB$,t\E,%E? \<8Hfqv譑pՓ$-0Zhwwwo:ɖ\Z޵MJPYYhߡ*ON @r#1É E*- љ|рl /8ʛnwKcH.֮gdH_lBUWhh5Y87# qi`0 c ړycTOK-iGT?aPrɃF+XL*|}V!Y#9mlƩpW]rdu?ze4ڦ0 I{R"cfPNrQMOR '8qKQm)@wuKаDXٚ$vGjQݔD,gG޿r|!9/ާ>+KhץdSa*3.[MQg~2ԚЪ<*H5 #r7씖' QR 337U{M Όy^\%PulCfݢaNX1e96 7*bxH;fder&GмsǼm./ԫ ńĥev٦Ɲ(}(5,Yw23Âp~rX|P_gfO`7 b BB2JE+Wқ!0!E*<)ϋZ:"O b⯢O,D-Ύ>E @qՇ@ BQ҄gH 3o U@=ەk#Fs;/Nn[8S\j¨*jop 7%@_E֤ƺqp03hJ0lw G"X{[ړrל73=-'2,ZCidDm<*uX/3v=(~ڕ)*ÃbP8QMy#Q>f, $v٤g*2ɺ*NV1߂1Ml[؎7FuY1quY1J#KdvY~+F*Z#2"3<YQc~4Ʃ)~bŭ! ^eUE9 R W ף5yGZߛ*uV2}^)-GTYhUƘnp6KM/E c17};s [CyY Kn;+]nW f"խlhHJ";684$01\S3NGψ? O#JNpTmEYޗc$~*Rd0W$B\y Cx+ARݾ4YM,$U0~BALR:[h1-n{C>K ~ģJHD,so<\m LˋѹT8-I*7҈0l7k~ݫc!lY c@NI)vcbdnHqq۸5u jm>ue8OWt;'ޟu+W/PoKf!e{S]%#t՗kBhSڷY `y=9)G:-:#rӳp8*vNb= N $~4iҳIg҇Orx\pJlfb۠Ll&뼗nP]Γ]M)5,t-48@wod 52U"~ĚAS3uλv~wtŠiy6cyhT;!$ 5V+Y.&,QPF?+?3فuVqY<;?,Ky+h(}58[@H̦ik~ڄѰ!Ezh Q;شtmRc.|p7?>:K]әP{OW=YR*2[z eVcov> ݍF>+\gѼONf4YȊ3sVY" n[|_8bX.xF <JXDefTm>xbm .UJ6o;7}Fg5@KFe!jUT$.43&$ L~<xDm4t),X cnV('uxtQ󼽇!6 "As,]NQ)l$鋕U\<}ZޅVq h\3dQawsTП?Jw)GSGK1cDpcQ ck^ߍ(U;Ǣ;r4"[+PnwT^ K3tz>NEQrȽscFc ]ࡻY'A7-4*艐1rD2D53x>bY{޹W P4ћ/bClS{>ug%!wy0:KƉۏQnB<#C*fhBހ3͐S]qĨ}W薱h5ZU;sT5 {Cĵʰ$yL9FO]?BŘZLW* Uێg)FJ$5A*ï_+ +y#IF,dg] Fq(;l F v]Kد/mC>muٗ"ܪHlx-"T,>~ݲynfkK%%I[{7D ܮ-y\e$M= NUr·qlGl=W[>I(F#YXQL!`=4iLm7^nmt lXǮ< ~{ir [6?ܑJikF[? ~mSɟ%#m f;VhжD }K#R*g&EDtO07ղ@9lTd$SfKp ]IR fJUH+|Z}e!ڭ.6*(_sMnNNsrX>>cEVA ڰW5I8g^LE^FCA@$f֎#cvm=b^:jPoY''>)ύ*|"jr@f;ל3Rc N]rolPI 'd/իU0axxJ"?F>=Q.%pGv!a L-I_?n{ |j?vX(}V+ A0z> m<|ԓ sq[TD$ %Q8Zp⅓&4J0P q^`^龀gLD @\|XzR1Ҥ44 MۀUt72mC%L9V^`[&?{WB#\i95N E3I>oƖPB Frk4}}$1S] G$$/q1r|y#)4K1|HJJU]v{[,!go4q^W[UK74I7 q/j+b6ޱ8px+ƃՈGtᕷ:]9r"6[G؜eQxXI$(vL@*ߌ :!5}\JVAcBUV"S+hd*OO>CѺ>G8SnTRe/h]8/h5,D$[_؈Oe$xXy[RB۾4q GѲYVh}SAʤg9%1i>{x%Y@V ^:7" <8h{ Kc?F]7T 4ΒO.NF}:Uwq1ROkcJڻb^jNfQ@ Jբ8bs>>^_rG }i}|h4w7ܹJu ,FZ[ 6f(Z02k%Q߉ǏIBh O*~kbG~|Pf7"J;%&PYl!%tJe zqnP=˃#TǷkkڰL־1QNQ҈ek>[m6CΝbNנs uQvVY8N9e8.l^oAoTY*uD^]M€ll3ƍK˷Nru:WYXrd/505yikQ-6dy3SZu[y5#2Nwd{n<|ٺ:i E (v.mB&]٬m9h}1 c2/(z=KD7/㤳K<{&U$/6'$YAh兩\ّ$ރJUOVE--n.Ӹiޛܠ[ nC .{Ûf2*6+wN_]۟LǗ=iu?Kџ67asC ?ܽs'ѣ?~;PaUlS ʩ*WNl 22uwT|YnzfBVlnޏwojg)(_Vn,q_+1j\$K}%D|AROdwh⣅-V%QZդ \D_f<^Rty3c6t%K6缬i 2$ku ~ً~M>^KКO #S^[jUܒ_}8Vp<@Mޯ WyVcr~7Nޯ7onY :'r#˯;>=?acc{1r: S 83VAbqʵ\Zr][X l h<6ZSԙ a!0ݪd亰$c)ߟC'U+`h XO W1Ќ>)QSX .j5͜Xw!E0}fQ7>=qԲ'Kά^ -4]LB|:эE*  _D^>߻tz,Jsqy}1~ZHפJ.B!kiAq@}GY^ZI+ޚV63={[)%+ܟ_!õ5KWft_з+_AIV}9laE.Ȍ V*oϡ`Z#_S^%KspVΑ{QM[$g?/ŇdPYGAonu]I6UP xKr |ʞ|TSdO)1,`DeN_\Y"\.]n[꓋hX缢I~mz;|:4HsWP+J/mOp\W"w3"7 ܢ̟-:oIUKKBIrAw}x|K :]@Z-t?y@ڱS/@]w4u{nק`4ݻ }g#|?n<^p e667'9bgĆQv ʅ9*XvOyL8{”[ܛT͑KB=[Tav3@.I$"b~;Lvu_<{:Hz!+RC( }?Jo.Rn_Y><[q's\Vڙqte?i+x3~Q B B=$=XYytF`˽qׂ+ I^J!õI /eH9%7ܾ Umef̰fwTƃvޙBlugszpŃx%AyTƆ*WyQ3d$" Ÿ`/7"_jNEbD)dSJ ½)''ܢ$iedϼxY(wG`O#ZAW6I] <7"qS CUqfh7O=Xq?3ir`ĸ޸yV1Gw7SPRYaxhJbvy+NTn|XC7Aeq 2!YbL}UBE+q*H\͑h\T/s@Lt\a36&~l9 pZ̹'P]!!u#4;qt!"4hn*$ۤ/Ƴȿي# l(pE@ Ɨn64Us ;EFj&7 j@)$Ohdٸy˩䰾=t_2\T:fl4mJ9oA>S,2x&J s()6h!+ΛJ2v=%ѢFGKU> mnKw^Tܺ]6%Yp_!>8VB+X}dcY)95FxfIz7:oGJQ r5hxw0.H}jlXt2x!r tLKrwB(5JXTjHe렋]G]w'i>:, kNg 6K2* OJ&vv){/ qT' ֦߯,=r{Sr'[D : 7te$zxykNPGΆy$F35T]ABbfg,J[7+wex[m' WgA5t [kUOA6Admq inW1NbʣIBH$ElT'% ނ^,KrnUqZZxݡkqj0i\{$o2'B^ :vo`{ ӱ^Y٧dj^ Y Sy^=0pcނ@ߴZZۢt\1̃ R$6t7E, rқG^+|"g>YOEN,ч^7 *s+PGc3- Q̀ӵv}Lҳ U0'"WRQ:HQvgO^o~LkUc0Mf pZ%<"G3EFw \tYEaVfo|D4Qo}棂 | JMgNhL|9*u2#=Wx"#bރy+~stNL FSט|_Y1AZNf$`zvKUˈ..qS#m]3+Ϭ{y6p~GWDaID+*JKCfc M2+<ݣ;> DڈR;@6?ZRɃ5^v<|) KZ9;SG 3^tW>ĕFyKK%0|4GEI+kt DU&q5& SXdfv_?y`ׅ̓Bf\uV+dΈoy ':,}u Į,N`j0Q$N*ўr0mlJ}ap!Hω& kQ_ '`1^jC`̉0"8^Iq ƄO,@Ofp\ȏo*D& m0Ufa[kpo'ѫ")Gŗ 4|hnYT-k_r|#jwWsP㫊϶\r_̈́yh 5Ǖ$(C0&>n{S N=&\1~k9H劽"J-Ь-Or~8L%yFrt]28=_U=TKK\B:X=^?cJqL6CY:=J+r˪TIX|1)Xj5J8Ԩ er q?ESy ̀g]٤E)WDWQ|q/Ӗ^Xn|b;Dgez*aM!a=G]VY֌ת [ aN)`VH7͛ߟ}Y`>uxhn Vmb"j>M#Ť/sL )3ZJC>`#hǧIԏݴ~/YdZN-6(_mȹdjsX$v'/ɠD-\.j1ި[Kq;dDY@Ix7I7Q|9ЅJfRU8$̲id6luݬ+Pi̕C|Y|C=D++6: 87*,"Ȯ 2u0̢ѥ V;LFEl1v^,*]h,TӢkL[jP(ԂeAgb'n8Z1S"#%[2|rF@nx`˦m" 0EܸlIPd^[rM+*wu%+ڲGԬ{ѧ(Uҭ!Sc2鵖Ad4?", tǧ4}:p!(]7LɀpEiu *`kC`yY֕,ͻ[ѻePO* JNUtT @eG0 MrmzƒMYy{+2|,ULBZY=űޙCpys7R%]{^HyκPVʰvښbϖwvU7irjxN4QYesE%+ a:O Cbĥ2jZE&XBTYo7ul?^8Mj.jԖ KlMナ0(%Ҧ\miGP/a5m--)0k1("+:^$' ϬaWӺyk3mj+`)=-+-ښ*@f:lE->G7DSJy ?-kQ͚(GZ26m]„GDw U6)X iȑft qx<O>MD<~fO쟿<}_^oUkTz4kwЇ٤i+a )[NPyiwW_+u߶<3e/Xˑ: $RCľVHn袎,dl Z|&,HWihI-m\Qo[sVMo>R֞FԎ&Q &}I[06ۤ~ Pv-硤`tIQ}{Wr3eL5]Z_0} 抁́2SaENǦ?t D拑y߄hK(#[ E dvf˗Zn3T5XN9;>[Z_"Ytq",H`Y@TT')tH7plH7Z?se.y"\&1ЗZK2Xkarݟ/".8q̱¬$4;ǂ:L-i 8ǟNCW, 3|5趹c v=` 9Q6Aiס/dOV"|[>$TY@qVBxͶ7V&Q,43N*;`qG` <H[<]=Lm]%\ ,q]_<}@Aėp/WVm^X2;/w,&. vHk ^:)X $€ -qT1gGx (\wE k9͞"!y 0ī_y.3~%EQԆlgD\RPBIVOh0iJŮgK3zOzb[> o[!q%>8Q ;&ڌ0/D]S?aThFZZR(9jxt<;g:5NS ~ZRƃYc`ǽ P0Xܙt j#)(⾹7%6*͞μxl&l>֌b,k*oQ׈{lgc "G;䎏9L HQb85sRÆKrhRgZ8ȡb=/MPEcX_wh-x#?0,t(&\<ҳ g[lZYwdΕ udt)'8B@IAuv!5Vj*JDex40 Ä!$=VkY{&+:T,=ZFgjG+#`6a8?`viAX4^|{P_8GtD!tRzyHU|fSߐۺrmi`B,yX vP'i>&C* &TT+^FWO59vQ0PcLe2,@⤧F)!һY"N]/w_?~ @I [$^ ͒k]g6Nb#}Vm$M6㒾SϦܒ.055BTڻV+[VlcSmVVN sy,ܲ ڪSFsrLf!ɴ3{)L}6r%痊\qUleEO"ؤs(u Ftm5 0brm&yH|͖T!po3;'P!ũHUUٮiv-ņ;PΰUy ,( 6# 6 .ju„˫[RE*E$Y>v̗_SSL=?.tE~Qeyߢ=i&WFoQW<>xj ;hpţ{+?7 OxKژ^-=ZJUqOAvR1pp<8tr͟IQZd 9\RcYs$Y[́5 Ƹd^rl$k"KID֔H.GWm|BF>= BiGdW~5f*<ټnPfu<`# e_6 a$zM=m$bR9f"iA#cm]p)&ɀW؀`I'Z֢9.s_MIV!p\%})U⋛3ߋ׳A 筚RL"⢅7WTO%7ƴ;X7_jjʺx3D@vb5tu(dSlۡ<ң֪>~ jb`9IYYmM"k^?v[ӔMGhb5QK|teI s".[y`$1 +v`c1fg-jCu+p0s'$zˆ(T DTgaa_W0% piv4v$ʩ(A5p03=`κc)0 aI4#,w{^ZOHd qs^ kGZLpJFި%`̶)rk')m?Enr0#Ԙ(;aZzSE g*ĉ6;p­B|^虵Ň?u BqwH ZcӮPג4(&w!IxcLl,MsU8}`"m\?zG Q8QOk?e! q.'H:?f\1~qz !z@Dz?b}Wۻ^΋Xu(Q h9X+:Auwؕ k\h-c(IC]^ &ִ))oIZ8|>m 1>A3->w$jQg(x Za=\%Wa'@5Y\K&~a=dWQg){kf OGIi3"∺̗)`t[=bWŘ7L|?:&U~͂2vتΝ5MM w1Ac3菭Ĉq&jکvjLkz2;;냑_L\vݾsg/Hؗ;ZBbfeЀ)TZVKkzAVETZGKqdeHOa$2q :xD1H%͎<< ￿Α&+8e_r@xTꙏuUDk+rt`IDi _AiJ;W*y4'e4ֹ:3=u4×o/+÷6 z(S1$T~}GT|nK|/JnWݓ_vg+sٺȺXo1f!di  uiFH^wZ`C @W2hD@6`yĔ*.<: ; W>O;^FuT؆TI-[fqf!zTiPV˃eƱH|C.TêE0кAլ**"DDl a}ogRvѥ^U\eIo,WAND+o,Rp鷂562fAҖLDuiKk +^R/h [KVw=Ү,5cNfnE  Vnhk[ 3'^Srǣ5ں  9d:fRkHb /8npq_4y\F; 奉6V&:B>0vѪCzdbv{s݇?TU g ߟWCW0#TabU 9(uGzB~ZƢ|",a@yԌw}ti!ȗ^{wQMjAo1˷vU'e_ [ZLwJ,-9:λuhaӿޖ#,Ԙc1˵U|9@=Z׭._H4~]vtMW~>?iFpW fZ/Z:5J7gDnș_ V -6vk>ӨZ^x)Ů,U+[4׾qHĚteԊ>Q6BrMUaxMη(\FT#˺3WpKa,hZ]p;*wTiFf]Rdx;_X;ۏ}=e@Upؙ]1zC̓+Z]2K!e\a(WOWxz)QU-:(ˡĵ]7e.uϡ̓go?nX[#FAީ9eSkEr7&+zt-Լr\C3j^3p~.}|_eqPr/q'+lL9Vl^gC+^m=7Y¦q]XpтJ)|{( !uRzZ/S5ݺnU"S_^E}2֔6َ>$ܮgQvE4gKBnw< B[⒙7MN᎜ CזăcHviW¤xnt4f b]T|?1 Z䵿YQ~q߿۵ .͘ݿUoRvMuٕ}ș}*\Yr0e {h߂,~BYT^Y8r!k=B `Zdq1}7!qeĨzrmfnPVZ+muC )gRZ',nJ~o Uh-)p֡aϋ'ƾj ]'TXrB|>)J3|MnȺt)|MDE̯q̕غUt)N}U URbN 40Iݾ~۴yI"zQ2^yo 0^[`\Lͱbl s2,]Zʈ0ǧ#RL |DXzR` {E9se?&3hЉ "y`c )ѭ *5 EV'gG(x71x ǹ/VNrN{k肸.(0py9ăN)k. oK6;zP̙uGdށ -*L8b5m0\o[C[aA *._ Wo"/.6x߾Qfb>b.ˠi5P >}xlH,hX U8;k@r60R GƱWù}Fy4vw\%|vƺp@B? Fx[c MRũy)i9\yI99E ͳ]M>3R! `og~},,.3! [DK`6-U}]<}\LC] RRӊ2/(,R`f2}|FBJW">xZoluǪ-nHR]i?#EZN$JD"Xxk^vvI1H ~HQ@`C i  'EIA$wGYԀ yޛ~͛oOtJ-ڤ횶U14eS kW+Kk%5zY-,,ů+KWJ1Z3vnM |RnT$iEo6M u+O͛+~d+!cL0ݶmfL%$r\?7]jhl7KYNUW%UozԺs+׎/ (\TQ(3m9yRA;N@Kru sɖvAn.f0wHFdPNS9(dO'!ʆu ~ @L@IuMpfn%=7V i.5k^",'߯L?ՋI࿿wn|hɩr; 2 U(Vo|N~xD:S xZ0lCڨ)i-n6!"3idQ@@l#auh΀/g|45ncωE\>wc}}99>$yiU4ى(*&33idL4q[VKdȟV 9Gv#`pˆ-a+ВXXK8dWu,'|sS9|,6l|zL*^)/~?<+/ɲLI1}$4&5n r,|a_4 HȂ+h(0+9$>F{݄ IYMXf4I(ʲ(iSG^CFno>hr!/Ո/d&#LkCvt-="рeo;߃. R4OyR*x^J&+}/vfC) 5|Q-dLPuok`?Kixϣ4$%%]H/$qTcM{e)x C-&%-vZQTy)8G!lGmÑ,oH[76 )o2B$NB$;eoAv9>'R1L0u(ǿ|%R ˏ*8:A:b^ ky&5 SN6F4"d9P6Ff'MUCD71-]`[crXb;*sMT==VxQ~=Z^y~ay-W ޱ+2Cɵ2:^{I9WK~%e8(}JA#bR&AbBa [ 92pgѡI /W$ZZ|4?_Y;ⳅtSg&OHzʧN`yk /Uy:C `ȘC!øΟ'Sa>SD4c^[|17Sč40>9=T,)ta\7$iHn𓗕aȪ^^QFrX ^`40(ҐpPy QE&41X5߯}AcC8Kt ί1ce>Ҩ\ޅ\$A`͑U>ӫ*s k2DF8Zp RW·攩:-Zp{ٷVo}Uwג#)sK39n{T'K[wjOMV{Am@w?޹MkhWdkw;CBzs4?ܛ#g 1ظs qz {Wcw_S1{0* F~̎,"#*8XH C(T[=fq>w`ϧ|M'Nwzx>_WIyiq~re +Gj]?WǾZ \גr(&zG.:+ phw)`W/HAӽjrXӣThMs5:n-Qond b?x$kZwWq4_^~x4`juNp Y'DL9^)@r"m?HS#ؾPDvΥDӼ),LJ^|+3Bauy}_B˽{ <')3]jn;x"N۔/TZ ֓"3oË^΋@y\Q O7'\?uaoeA޽BZC\sS-^N6=nUĹL mݱgEQ4Sc'RIStGz [~*u-=&Mn~&tDwzҏcZݴFvǦG~RK#u_XK 2 )ǴZrIިȭ[ D b`E|1ˡ #:>FDGQFFw4Ezߞ{r#ŗ45W'fD~+lX4io\bkgJĐ 7--S&[0&i^ٗKž"ngOߧh^_Pp}<ލDeU4$Fx#Ͽ-1>#0қód/r(+NGP` '"1Ȅg#Ł9Bu}^b.`YwMfle& !:eo?;U+#x푺|.:CSM޻yXUa$CT2Hkpdh4W᷻R$Ԥr,22D.9HTEi*wZB=qJg\2dh?l/U!ޥn]Q:x$EEES)z-!B $x<@s]{Hν瞟{}sԾa;E33Ǩ6Yu*fS/9n|jss+gdPY[\NK /.M{3'afOg? fEQ+FYm Yapx`G q.̩X6nWÀq~p{ݷHQ^n>v 羉߹kXx j`[(X@ʘUA9:٥0ɕɼbFIQAπVW}fkEsq{rat7m]kRR([4[^sJyk{seS%J.Ƴ43t/਎ð`N1X3|3Ba9 tT- Um;h|yXa0pMױgMfpV4r|hEӀjh7kpCDcVK=f `51Z P_F̆f|^!{z2Ξ?aD8(VaQi ϡ%n[eҐ|/"}wYHKE1I ak2~P,p(H9-*y`՘e`t퉽tg®PTgN Vz[63=th0YT)N02Һ"d\%b%%Lt"};.Nw-}YV yX:ǂۤ ş:"%V>RΡ5i(7wYjEsT%K|w?vQo~8"ƞmn=ߢ9ђ&>O>z2?hv+DӳnЃ3\(;Wka+]7lPT/Hyr*arj;)BҜ.ot;6hoxMlWY떶*TiҤme;_SI'N,k;mEnfgxck Hը"Q) P T N\ 8pqNff?iNDw''~:fYcpXCsf+۪^r~؋3KW/N.Mjbqjaf~)[/]^|%<ΣFN4AYÒ^b uqj#ݸƙ9ёBFo'ʚ!ݬ#^Mp`Pr5'i!!T-< i.Q*o㩰\<1:+:o%X!Jt#` ~18Ks3olnE"wnQB"`fa |zXuA4rNݶmSphx^pnN9>_q@ .1yS`]JozUWtD%X)& 9? y&&pk(eDYKpB?޵* ey.tE!_ak,p(9,2Rq5evgG)zȠm=NX;0Pz`fQ'?Z&6HL[oAvX:|xPCY$'L(c-G,XV90UibMxai *ȪgmfGQ"j+2jVp&AEB[$N#[]O.L0-+^H`gl?Jk{,~yc)T.E[hMDvQ8]T 5 n]EΈ&N%/pѹ>0f7Lw/틵ctMN=]|pN}}J&)1bYÕcr3Ɠc:8x]lYT2oz`( 1dWQEҴưfVԟ-DVt;q UF$U^bV_cJ0jH)Qߢ|XM`I4*"^ꕖ6,2IT^ZV-<(:UhLT. c0j Յإ#tM{ظR[#64 rh\T xя:yrdワG6N]:WXqRk6[<,ީoT$+E#13izZ>X]0ƫ_c{y:?\q6>3jfg.]8agJ# iy^3x`qUVWWÕFDQNJ`suU>TnB :i_S$/z6ԩi*}2t8RY7Eu+)mz*m dH~I'dTS@JϞIޝޟ#Rgs/ I5ހ:rwfONM*K_ɎeeT6M4,\ k/I>>6#hÿ=)@~G٧=QwOFk0M܈5%޽kMjɝ{TrKۃ2bI\$"I#Z_inZ%S{܇gN4ՑjL D-jCIMZ滽B YuB< o`ӓK8Έaώ*@T+"(;-Tm.Rm%\W^.XAYȵY0|ѳl=A,J;qz䅅.AN({e%2~mlb)ED&xB=S@-+ʹm,4E:2M|ݒ̥eM__88di@_xTEEER̘5*]  no"QN$Shc&" cxXMV/v!clɎ``{cobv7;k:COOL3MW{%ADJ+L"E"()D>lrHHF`B$Q.%WU=?^S,y^WW/ƿw<11,`f{{vVDss窧fgxP)/-.'ťgf;yP[v=-zaV\hKU;Y#h,<7z]}τ2#\"OIo8!垉ߙX( h|`5g܇|HE>-\巘 CV[%!D)'h4Z]󘱊_} ,7o}-[ok׷U EٹaufzϮ66_{4L-7Yfl+KW27vh(fO/d蓰bcfxQk3 cf]:gh :1Z~]3. |tx ru0 g\A%:!4X:rx&*KZ\1wum9(3 ax`lajVX9{9H䊂XExT ھzaE+?aB}'+}Q8z׿=vB8>u(l Vn㞁eJ޵*hMumm4D=e) \ 3e7 YlYJ1V.R=kpQ>ovB[`/ D.@LH Nc/̑ ++ŋRoZ IVvIBa eNѣ8Z4G3DC`23/s&R)p3a`,H#"OSmˆJzwPuy2jX&fE 좒'MiP@k R@$]G L1"%xْ_ȑ*d>vDKnR?XT]FI DnqHȶ{ MBC q4/ľB}Z"f 4;͸awk{[o ]ȍC5sb8gF8q٫SD} X#I!o;],g6Y\LD$퀉 v\QQX`V4%GXV"p shby 80)#$S_"qXYC(N)y°cnFl_ĭqY; {!BD$S{M6DYhFǗR8|=}3U/r%ؓKROL=OmDj8ѣ6ͮY-{.I)0]2:c٭o߁!]O^.QG%ZMjmg͢'":]2Y@C#N澗 hJ^'rvnJt=A[71Wd'^lJn{86c閲#;'m۽ojCę} ݚ88>l+JVl%+3"-;<}aW˃32U0PN]Կ?ǮY_œzݷ;v6U/xQJ0}W\"> ]bmIEk'MM&{r͹'071Ɣy7$aÂ$3{5 S+m5<nti2A9'|_N "aLEpA I9e^B4H8"Zh`8Z,*v (\yK*l׽ 4,5,}C:z51c3JXj(iP4( h=d .൑?n$c>0>vwowPFh* Xե|8/wg7m{*K/V@'Ǜy"xpG1 6߈q¶dĿNm ƦƧgHqw箿xZmOI<W 6+Nd;X1&Ǿr1x̐KyƐiWtq7 Lu.u]6$偛f:^<\^m.I!@O]OVQGI Wϯr~/o&TU*Y~a:S, /0tpmP^Ob{>I}#br)LR ,i ^87ZGWm5_Q^>U<r:ImM0Wêc88H%pÓ@iz BFO%iw-r'ϟMO{GI:fɬ9PNlks[ 3p̀3u4KR f-oIbD+Iӿ`L߼ ;kD\-;,tǤ8`FuZoL ʨef*lM>D. ?8tĩFOe%] \x@bD[Mb%ZDoyqk0s|[q'Ti(pd΋"Zb1Fw˔oM\!D}RP0ĥCG>&j!"1BEy 'NQrڊni\Tw f jD-&4?)_-T)=)}p Wu ϫuS+R+Do'ܣ,fhMk?I 8 w挋[ӆޭQ٬G39f63hnY~= Mk\F6a6'/k!yG3s(u- (i$cD a4oMԨe?!p4h7Ohʈuj=x DSo}37Ltia3I,1CpMr$a!\˩@Sd `VO%pZVaF)l,OyL^->Blw*AnxD ts\UMşO|rס8CB)!e_>ii=>ȚpB 9wabO$ uEg:}i0IzOvPm̑5~ X$Hʙ%56.6u ЮMh~RRC;;MR&CoUuYC.w6ݘS]# @c1GrWw+2|=H $:^(aV6 ބ 2"JpfkʚP=^vUص>0ՙr'3Y"׉`LiٹBƃ mEKroT8Q8Q"70\m&O-R|%&K4k@J){&XNd0RtW 5|)ly YkDan#ǔrwnuOCOhw0IBg5PC!Y=K6%//Wst6:_ | Uu+*MP+%gTt67d,>̦zKzdWi{ }>!y6Qd{ zH}aT߿e?m*Egne#iovn 2Ox+Ȫ~qo! 61,*Ïqɟ7ƠƏڊWs?4}$OXr6ZSD;۔kDuސ8oNƧK]edF$1P^H }Bqȥ4-Dу:!xT6;%_EI/n$ 䁌Jʝ,rusj$ۗN;-jVwnv;e fl'IK,9Tt|mOoEeow9h FYp4+ËSkjEp~%m,pyC ^4s^Nms>t84,9'_ )Y^{: v;: anc8hf{~K;dfA}nĒ[_*q>k$"".eexƜ_\+ Mq"}~ᮦ xFvFT-0BU$JRl\ipoOg؆w~F v> 9BKngj73fUmL5:1=\~]?>m 5F*&ŧ 1^U{g}LNa&K>kS&xT/{]<7OVӿD A9qd-#bqQ."|JeVEѹW_]++BؖX_`ZkK.XJea)]E+1 ϰlF$ .[6sɿo`^oRDMc!~R>j!=ƅ 9u z^wӚ´畾5 gyUehr.)K@5(<< S,޲MIhy<KNIk.ř}>\ԉT{c-F\: ~OzBI♷K,MfjF(pn%rk`e9Y̳?߬ ?_M*˷A}T%}e%]a|YQl8$ꐽ+:mB~(EkCr\xv%PMIȩoaWgcƂ%S- hexzʑnѸ,0x;$zC*jjBbfU\*JZ1rqqrrV&gN^)*`▙ZTPW\XX\R45XobIrcJ[B@bIDvs)V3&z+6x]ϋ@**uQv6)Yۓ5mB]PʹLLUʂxy"U z^D/$y˝YG CGӯZtӺka֜=pe/|hr9҃| !-.mt #{rJR|ْ$~XU.nG0oD%լ k!*{"BV{Ƙr*BG"%&x=PKAFAPKJެ@jEHD²;Qv^ATz2*^zܫBգ3:0ޟ{W'3Qb?̐٪!${mbd`VVIwɤ$+0=+*bz9G ba@CiN 95->F\uvѭ+:Ŧ'"E0Ʀt/EhQlch1?"F"S`:B B aAxh Ob`{}пP5j҈URqL2\D͸I:VtTouVW_ Uш!6(e\1ʔE0:%י#jSZ{M:WnJ$ַ)| 5g-ROfW\XxYVp"check.h" #include "findc!# dev_t StartingFS=0; & A Ctx->OTV&\#:''>(0(s)fx[y6bG^=K3Mk.[̜̪Tk4 X^$ bM6[8 d5~ ~T))W' _QVlrdY9ͥ"z?i!Bjex;;bBAmyx;2bB^lR)%E%\i Z@W5gZXдJA-$Vp«IHmZa5S(ƥ{2.s*K7 iH ”8Pka3-2Rk͔_6QsB񢽽&5J@GH("H!e !HgG3v:ft҇r+iOBW~2sE8;+ooA*KD)UJcuƹ,|~>?zb+̂x̎-[Jea S'3m-/^wT;!;#%^+%x{gBƂbIũy%E\)@6is",nԒ`BYbYTh Gbqg;ydO*O_y(Jjx;cXY{e 2J4Cb6+1ry:8{lQ ts† 2sʏ|&a\&,BY@N/9ǖ9 mۧ&1jݶm&fdRwDUInG6ǔ3=hpuNQuJ}*cYAH᪵\d qkkx=C{BOVGGK-H$u#YdEu[;_%)I$R-pU?-j~V2<_U]5kJiN$z @*A{Jh,iWJLβ)]5'G0)U? 4usGNڪ,_8x7ΔDYf"4Z$,+5x]u\![sgWm' @4)Od+o%%[I2:hKN~zg(o.|Ãa(4aYyM횋77+!W6.vxաKqI(+xi+}}N4 EM̼4 ) _XaK2`Fx&fͩQlrf0 '$dEgnne6,HUPUp  TPSSH,I-/JMLQJ$gVjn7urc"@:zd鬓HNy8YY7]0>xQQo0|8QZMF@-yGn4S9]_?; ̓;ߝ@FɌ'Y&l@m ^*\nW;\"`%!kď' 0_brBq?Hg7GRI1>rד)sx 6Mj!is| AѨTnᷮ*~ AZb&e/ !doj6Q<|e~XWj-Ў#4d9 Dҳ=kTVDE'nj;ֹj 1J#W <yW}%>⡁ IyiڞЮ.;+/5F7OTU|ZX][s=6PFFl'x{~mL c.>x{~}C=›721<%4xv}Cdf^GbqFQb KIuIQ$ a J- .)ҴRNKL`'ex2}24"-̼T̜T 逢bĒD\ʩy)i\*xVkOFlYBv & IRJ ±-Y@+{ϝyV3s>sf>F*ޮs.XU%WCX_){qPyP0c !7ki]g+˅dEg gÞNƂeiѳ zY&T\q͞]2,6Oæ}9IE>C-2 :Q! E.V;CB\>p-)tfw *@+x-Ve?((Y;vcnY86|2M3wʊrtHeOc|GDRBmoQ D[`GH{gr|28Sg⦗˲I@%BwM_PjtP:k0#QyJ-F#yrG(Аh-CvPyI/ViRLʻĪk2UZ3@_tDPZ$Y>5+1}$\۸CY >l;LNz+#F` d]sP,Э 'gR 2WU!3y< ėL҈T md0eR>;M~ߢ 8*OGl2[QNSpAn4}DF??k›Lfu˅l~*D\@u7@򸤋{!<,IcPYiU/!x?o >2h+;>@8{*^p'xO\+x-͖ dAńV׿<ތ[ M{@x%+0P?Uէ[\<&뮔Zr%orQfJ7w~sǕrK×/qZQW\k kn'SϾ cf'm D-PB:l6/dǛ¥7fs{l7- 5HHӉUoTꀴ, u8SBjux6t8y_z9agYu=sVI* 4hfR[gR$sdr܍zܔؖFxмu/3 HrI_D xk萘p)mw@jA9x Z1xk$es< 쉌8YU4"x$G|dͳ8UXkA / xRLKIMSp r wq tRgbRK)MIUPJP*LQH,(J, LsIHH,R H,Ё9T(h Mk̼hFjr6H[j NHKLn>_xVn8}b U8@* ÎZVkX.v\Z6E^bYvb g8s8p7ES%oz+;.LYꞋF[b7˅vCL}oY4vjdBT(ug[wBxګ x6{T hE߽åNvN応~mxW1BSŽ7[t0mXq8lLBg_="*F7?4l MW6L{瑪}tB/#r\ke&w(ڤ"TSV'/&>=k>{yV" 2JuRa8B(A?N?v[ "ìJZm\s򏂚G@aU,`WpaY8;2HۢRGjWtqMK uMaiXMk75AUWAr<"sya<^LY{=X>Uc. %n+#8u嬿$֛i3Z}zzsqa#4x}quշ-RkTXZPFx{+RZf^zjQAQf^Fsظ71maԀ lsx{fo"x] 0^j) *b{%ٚM$]Em= $ZUu/C.$œ |5&:t]3;[pFedm_4tMPQ^Ƥ:UVaosODž~pS:xγ qJ8|9$ssjAɕb5G)HdfHxŴiBUf^obIrcJF[f^zjQAHT-@G!9?D!9#HA+ $CG$喓^y'zΈUesq8KcNV&|N`#{jQdr'aM b"}-R11v}땸N_ P"9,5W;2TdB*޵b lAPn,@}F t]T f'E^ hE\4m :S1>E u: w2~ylBӴHW?Xw$DP/ 7$h vXPu$DUm%$4¨.aInQ|{5AZ%fY )7wөG1'MRT! ?{igYB5aRXV3aH *.9dN7u csf7d/5 "4hZqEy kK}p'YڵV}v*=#ʨߘ@%!< ";xXtx2 )mu!* JJ#hF֏ǙjB`tv=xCamNj1C]ϙp8(R[d  X߬//}yÛYn,3x遲o=s\~ O'}j0:0pz]>%sѳ^W8&Kk@k+zfӓs8զqq #E9y f.6Q/93AL7Mxcu6EVJ|Cɳ#c Hˋr?ij0@HJҋ;L+ZG[N=>#(6?C5xxRMK0F " tVeUYEw(eEWښfʐWw(&I'yYξn kסO+%%-D| QyᨹD~#jLD xC!~Iu\9@xD L-;򒠖Պ ⢢camϾ2GzN)U6f*)PVu*ȡzvAAXAO :H.85?uU0 .x/ e&y㝰0%|(/N|c=fn2MæP ḑĩ<%%^86(uIqc.3 2(#xFla)Re`fQc`%MLۄ?2s?/ .xk=$0Ar3s:jY~f[f^zjQAQf^KjqIQ~X\ -@zrFm.*Np е H,&X[" (V j7q2$3ox;$.0AJ?3D-3/=JML ruU QASr h>qV7G`E̬,!AN3vK1xu 0y^jARKH6`F7oMT%vPMAs긧5-+$ HiCI\%La0zHQA3:;3 2Fh!qXmr0z z +/aw{?ע&LF &$Cq jGRu<ZtDxϼAqbX@bQqFr~^qBrFbKbId F =uxqBkY~f(Mk̼%tB2S @BZn%]3ng˕.O=+eQyMښLτ"^up2NTN)_K헍2rped՛܋<9S;qK7^ *+S͎SiS o.̠FdzL;o gBVp xRיJxY{̤M*/=avnlm+#V4^AэΰsFȕQQ02^Xk%-.5#5X )R?@uM]uԨY/dɬ.N +E4f\vnVNߑt/uE;#Aw$ZzV{*pAroBTFXU[ZQڰqr ҈}ɇ1UTIe]hr] WmfIm]ZY}ψ( ]  mVIҎK`d309($\e/Jrz]%^wmfÍڵ>KĶihL%\TP%%|Gq[1i^xb:Xa"I/DЧ}:{lT2b)GZHG;d.58$3'ݘ׍ X9SPs9t]i"F. X|萂tQBHK7d97K)o '՟jZjmzzvhͶ~{yDel;ضew~jyi`-] mJ"OQQ~nh0Ұ-^իh%oEwV4~e54/ٔNf󇶭26`]|Oّ(±vU.'#:rkj*dl\E+F=q21C91r6@6Ғ=B@ܾ4)ы} Qw97OP?%-ӫ'V|npHA8J8G(&aIbPrmҚ5I7*PqBkXmK8IaJG Xf_&tEul*G$ :}t2QLQ2+LLٟiDfOi>dἁj3sJJicx!i}Yd*yJ%hmci xxU6Cci5EFY{;yD|ƵCG2a^+b(jD$ᾷD8h@5cWDRK8mFBuFܡ;̨IPB`O]dl<5-ʺ2~wΫh 44B?0]u3܉JTm0b~#C`iiu6sg2Wm3WcbR]"TFTh XjK EePWfX1l>>Lf* ̧ sU>d#5Þ&4E6s77is l'4{4'Y_;FxƄx&t#8/X'4ĊQ<~]җv2_EC`/kM@0|'>㴻_Oh"'>ӵT"7&>fmkeLTiwf7 ;W$ճsh3<÷xٔeqm}aHaA1@cASE)hsF9UԾY1 FfV Eی\qtX`5 $nrF(*C? /o?bBG%}@k6x$9wy"#Ҍ $(xSLKIMSt vu w r RJfRK)MIUP22@i c rJA+$(OAYIK95/%3+3D9?(ة$X#9#HAK˿DGvI1=t@Z|RጲMkmႱsK`xXQo6~mx2:vkQـ$Bm)dY㑒,InfC;m%R7Qx6LȞ " t>U"H&[LpΧgKC( Mshˈ^Op b nBj9WìťIZ@NC/VКr+-ݮģ|)$ͳ aS z*#83A* 埪VgL^ zmEa<ggP?DX =HwGP4(> 3\H!lx` S?<ObXB4LBVecDVXC^yBćxC=gqwr>bćR>h4 3נMon墔J\zT[~/R%ᗖKg-dYL$W__t.AςP"=&QP|iBqvgwA#V865K ;Эa0hŒ. 8YK!/)z}`0kh LN/}7z46{[SO^CgQЙnz7M\hPhL{`fHQB$Cة=oi,wޞ@˟ >dS.dJ T_ڣ5\тo#TFAHi6ΖZ:@o# bL.\W.ZoKſ|1ٙ ݄J(DrHڴNz"n Q\ǩAW7WiB;fV>Y2w܂ȷk1L^RWur۽)F0%K=>aa eUwz[3}n,^cdx~~57쾳cŋ=mm:"ސA(\h6nO 7!IC z~F5^cE[5?o` 72^KgyB8E*-ϕ]V%A α)rk|ĸo}-~sȢ~W o=E8b)sW*ab7jX?QMoHq!dd/Xm*}l4" ivA{@&ڌOe yºQÇFw9!(Çڴ+swely%:Əٴl.=˱RQ=1a,ԇqΐ8smg+oW>εD=~Xܜ03a.=iLcAjX9.'BVWy0xxYoHYVN*sY'9WGːݫvW5$WcۜNDagɏQ78M,4(y /mzY!>2 Ǔ43Y諕+rY>=MQ܀W2RƉ;}% 彐f-oӫ##xl1cs&;v[Ó+]o.;_%LQ#'lϟ_]܈c:DE\Hc$MU   !TeBn?vGt*tSGzTrdhvy0'kΛ,*U'C=$v(dA9@S-+ 5)*p;;6`(iqyNjpui2ImJ֍46vX;x烢Fz`rs϶Lj/3S}' E,ރ:@[JyKZURmO@_}  WbQj7\f#LEpJ}RŶר5n++ܠ!zG{6P}v(5IRcV[n90LtvˉpAΉ,1tmƓ3QAܱL$D1(9WMP.W4tk7iy|@+#FkIXy7Lo?S0U`:S)X__xu֫Z{#T;C6Gc9`,@޾ankʶ~ZӦ6H0)Omó-5j=c{#"P`*d=!"ؘT*BosZ$-<~HJ'AFbφ4=0ҢM~q&?Y蓾nYg<[>n5r%iCX4[ |΁NF9`{p@^V2N! U-ya>c|؛a9Ӣ;A<AvD ǪͣSv?`yX;14phQU98t|ϋ [Jj^P2mvNQ(8Ra lc  =>V?ͨQ}0;6MSN^]; xa33N#include "expect.h" const O&SF> s;Tks,2'D|x;ohrf^rNiJRjEAjrF/m,L 9':?d6ѹw%1RlNx;ohmͺ8)gxuQk e+eЭq4`mf[jL ue,\9sMmiRגUd9%lpQ<-8H(B!gE&qj,(,:}&'=S3XY-CrT;jIUNAc0$Rmn*})=3jtfbX0{!2˟X3m;wA`d}Hź&xmj0qu̷YHΆ{5Git7%'7Zm+XYCq8Q/wUXB#9P#g\m@e|ܓ}? aGXƮq4I/nCybW39MR9?.$@d,'p~0دg`2LYg.tQwՏ᪀2+*XQ 'i룩 LtP]lcD2 5 B@4kK{ y㘱KjGbk'~*O4cQt%F Ӧh*pPn,{WviT(7OPb+1w~4JlP,3w\[]FD&Tȩz|z.dwG? .Ov[}Gvw{;|w<3g'p~NJ(}3b&XsuM%rTb:pTGvˢO@Aܻ0APuzTܨ= ?/~y42&2,<.lXhdn~SС}TQ˴{)Һ*QJRFRu2z$S }K62QoO0>T A۝ {^NV{q4G2&V Cpа]m2FjPѠYFy%gM* im0b %gFD %{{ˊe UN1̚yƺ5#RBgfK*0LlfLn-S YaLLQ13*#lIHmH#'ڋpt1j٥La55oFZ9 k: <8/zo"f)Up2iz &rtwN[vTZrNz"-;ouũRm;o= ]2 p(6=n[ b(oν|,y;+G#Ae`K$tc\鴐RG!y!ζ5EOW!{z0Nkì*a[VI >O`Rv4~\{&T]Q"zVFo_m; sTa-v*nE:B|GUT/\glӒ'ǹs4*@bݻ@508 D?,H)H"Ba](Qh9;VV\*w amH۔Ֆ6e˒ydl;[fyZ4v^a$1a\52{NПc5-Жc[YpP(>߷.09=y?0;WI>odOWGDr['=JVI   !?Ϧ$sn ,ދ"LQ_nxN: DZq"oapGC:gZ/ͪV&lu'mMNp^%h9 )XUZđ `*("Z04f) hX˹@Fbœ,yLgd: Z: yҟϰ̿mx `bNٞub 7\"Ǝ"+9뾳==d%:4 Fhl}ǿf z\l$ʉ]۹r+M/}*r9V dCFe^iVXA+ v<+4;>*,cD6MeCf`Gnoo7}:@?~-纾iu: Nam] T\X`M#xQgE37)M1LT4Z(YQ0;a B "S8mTT Qeԙe *z)~3ʨ%#ㄟp0`:=#9ѩg 8S?ո<%Y^?J|aUi1fK.~ko٠xR%1uqYx)<$I$<諞yܠ F(.Mk#r=VѻME/SL J]W!& >DI8 `e1,0dF6|6ZP"`֐e3}'/X \$eAP鐞ՠcE %)v(u?XMw؅HI ryYJ\! 5NC=K+ؚ:LMcyr KY

o2;tUvz`NKqFEZ]5r:h ^;/۫ΖWK*ʙLe6 {Gs~YҹJל7^F(+PᄉEF\g"/dtƸ#g"N>BA!\8+Ou0EuF5 놋 U˵Y5{2y1I{Mx;r ʙy9) JzJ\̜ԍ޷&Lv`6۲Le5|VIT#-%5M15)+3D,1zI+vJ"W2+PZZ\STU%@rFbcQz_dGgɅ"h}8'/pc䜼YKs $,R$oprqnfuM\pirbpU4x;qr oeޜk#m x;qr g&VLJrɟ6s+12VOVўܫ¤?T[k..}-̼Ҝ[Uf5 ֶ~4Ӟz3D"@ "+#+mK:Sc"J?:BVV 2ŸaV?l iPRP sS(g)9_V5DCo].5D5[h^uf1\+ukLvYWz_ -ȯ\2l7Q<\ fP۹8Ytk|0OHxSn0+FɅ ^9QJH@V,R`GSmUR qCa޼ռ>iyi'dlN¢f ޽,&!P&Um Uaצ(I?%ED^ߏhJSAEKy4s,uB9=t9Bb\^_pX(ۦA ,EAnAB%)mB7IOyjzE\䃌xu|btr֢|MSϙ5'> BvLfҽħiPNU|C3%T]Ã[΂7aÐkgÃ}nAͥKٺ7mlx)Zմݜ=˰TU}u[KĵWC ~}Di79%fJ{Qƀհs\B8c){sxU]o0}io<h! BK.Œ#۩ƪqhP(8cgH=t|y v.4Jhh(1hHyΪY/Bֱ,/Y W4^н ԧlҲ5YQEw)rP(*6rGn7YDlE&+xg5|FuDnN4( 1+}Wlbˆ:QּMhU]l%Az j7ϓ7&GȵἥklKFҙtNSa$1y$?)q?8[Hq$჻L("h7CoVx /,lT2@4QWeBvcGg蛶\H'|CJ?B4z[-G;<ƛyV=*(V%v|^7a7@Cáhk gp i~T– aRTDӭ i?e2\9b%t2}P#Yhx{5Rgqi`PC%40u.?4(MCXa.oX*}c]edp4 oMzX!)grJٱ)W?7QfItI$ˊ.w|uv| 3o>A~!;Bt瓚\}cQ\uUʰ Mpu=q.ģ"^ge Gj# cA<]0F#ٹ 2^-L#v=*Abahe!Vpk|"xC]i+Aⴎbo؛dQ ≲|M^aIkҽ3mln߁'G?OF(jҜGJm~q21%)8뤋'eHcPRsxIEUL2l Ǎj'lwc+q{݄Z$" =4z~^B'g5 Cʬ^:IRf~s& :~b]ut:A=GT_S3CmAjpQuOn+C_S LonDE 요:oxCaoqtf9Xo [?Q{oa|N^g% Z\tr7 +@J",/ k :M#: 2EѺI-Y?2todR0WxTmk0clK iq  fk GYvӔ M/ws<']H[*}E3jm`* ʅBx $Ji`zp,FZJGr%l)1(2}Tx p'4_Pk@cj34aYTڂ]17\: As-4(j'B0>4zf Ǚt2j9q?9#RgX(>0s׬R\T dRNW9Jcdՠz%W۝ɽ\o*N vkA=p [>woh+.0#j%jp*}p-E.<đs"5S۰ aѵ)16E^D,68aA$n&2b?qp;q "Ҁ OX$dqb*`\y#9s'cӈV-$U4ؒH$ JRLV)l)Ъ;#~"Ishv{OaikÑKLތvй(RYRI9#03x32( ss(/ðkʆ\!teE MB2FAisIn2 >ca0(*۫{D+ 7g3:C ~$VJ#yW._n,Vߞ\b/L:o&,܋zƆj^3 nr] PlPF 4r oxV]o:> ItjQ@'WiM1)tE}CIQ{ MkDJdRL h$y"Oۉ.r\w ʸ(Jy]? =STp_%")4Qst M\O ׳!m!~?DBdΓlURr@خ $Vɒpau,=5uh3r^k32<}C<F#>lݴgRfvfCf7=.Og} | 2uW(2> P{ PSjr%'~wYAںk]^$:@60Z";9dm5hY'T%ckl J0*j*`eř]k5#A)2n'@l%I"hQR EUS)?)ϴ΂[15d_ *L7EZ}fyh5gCX|%)]rs4b43'HayQѫ26! ,"yx8ťL@o!BO QE}#Ul|._t*|{=}%&q,qz ҚIj}=yZ+q*,aӢ2sʘ+DlN_]XeqgQ2LQWCL6P)i U\UEhQBl+5f FjL2=Jzbo:}lNS^^M8'jBR-jB[=ŃHs{QʯSig5$&1kRJ\>t3?tOw%XxT]o0}WXKMSuU<pT@Y4;-gCMӴ==s? i ^&I^Z; 6*#Of6 0;fd۱0p0b$\ ?}n<*?>NIA,4pRo8D(DCNۨ=wgiV-<CD)̅T,^Rv!v~Uc01]*DF=@0}0^)@06x/|[ܼQ[E~,gf 0+E]Cù Z珜i#eUKRq}69t+m/Z噶\iI)(Â"R8+32;d#",҂&z11xWrԯտV5kz[͎jKh[i eo֗,BEWEzJ1y'e&f%~9Bߧ ɖLwD頺yr=y|~QٜXRtc›v]8]6@iI QJf'F\:oQD|$ rZXE%ڛڹu!I[# xm0 ;OA./`<$ Lu8ٺo&kwS$@Uylh5J Q++ ˞XYB7К&l2_`|fah vKN܅8P|] !\Wj P)?ci@iMr}Tag(Ȑ HuD@e2Rx}T]o0 | M}SVȆ[ǁ[-y6~ei 0`;J Oad 2DjI> ZHX)JbN7/ITEqG:t 5$(VK&Q<*S2 !֋5,> 1+\fc.Ւ2O-z{^{xXVl,T-y21CDNX3$ih@츄o:$}UR? gڲZZӔ&gLV%h>4Aoqxz<9F0a q N'nxUMo0WXͅ .{%ХdÞCDLd٪}=|=Dr3o*Ky)ܟ>yn f&qBVY(Ow ~$KI/CFyg6ARcIs^$@>H%u%Cج99{)Mz^LZd e>꿀%x~ x|ՂI>WPӫ6~VmZYC'Xηp^Eu:IJ5ڕ?0hו$`_d,c J+ɠ XVL|3i/qq*સ।2ogo_8G߉$7F;/ u^=SN(sq|SM^>$ҘtL6kgWܾ?,<E~55{[yY㜢E duΔVI/2e&/3Sh*6W]yBڋ:;(Oc5!26?ʏTl *,L~Ow?\"GՅK6,IYbLFNySaA[PAv߮T U`e쫜Ae6~rK@/}cb[|̿`ٵBӑk1Q$rYO&@ 2mI>9Рa^2o՞IOִxVkk8_!/m]X0IcM<@u"HA-GbtM-st˹dϡ QxIfMMV_%1%YY@>)3qm]ײr9rOLIEx_'%boS?e,G" Ie1h΢,%tҭ̂!\>ޛ&mv,+eK(t={$Su I{+"iF{0iOQ0W .erOyɱPuop@xdƖQaςmߴ`x%=@\ChWS 4ST _qr&1P)C$x;#Z)ϩz؈(Ey%L*YIʯ|3U_`Ҳʴ-+}.WM;Cclz1+&VcQ J< or%Sӥ76֒@lF3}9t\WY+҆GDw_"w4Sҭe;PS vhz2u7 :FLu R @7 f,lW3a0'b.Cϸ S6z]ZCKl x"8s鐴pFf^Yc(Vpv@q%*[+77q PcO:fqlFa"=EBY` ?1|Nnr|-p FQ8_p7B˪Ƒ>wU(Wf<19VQQ x罃NEG^PmY"0CDmVRHs) $Aa\FA,7EJ2e@ʟ>O$ɹa29*ggkF2!Yu]>pD-$ȅnњ)G>"6Zӓx2˙BR)B~Ւy2Z.%Ch[c_ Ayφ<%2тUʋ=4(=: 9 69f?+wfx3E5$mnRܨAI0fX""ylFbzX"ATy rLPJ: STS9kOv CBV\>gb^j>1CbddZ%4n}0ںÓ=]>L鷱ޡ{LEkގS5㴢9iu5ǿLx @EgS"@#2ډo[r@\n *(OEiA@Hm%RQI.c6\t>u~eF r f71v:" k n&b?TE-@tG@m9 +SzF~~9\3j ~=;3J r'@e:_ݝDO5 f8Ij:gh~r .+h@ULp/N>O>羃NThdy>xJ ĆQ3FwԑY=cH2`v<H&'zu@WT]f ˂D$SVy!/Z`}IjT{Ffd8C}b^=FDSJ6t#tiض;4k5z,Hƒ){J0,".y$M+TirV溜WQ/JɃX8~DJֵ_icx˿a 3d;V 'd  ru /,IKI-(.) ִEIQad9V=̼4 %̜|̼̒ĜTԼʂ<Ř<%MX61(W,xQk0+.e M;W|*@Jd쿯)V!w9uU%yyhgaē4 n͕ƿ,U:+aŠؔVҫsrU`">A 2Z+.W Ѿ&I9ۏ/&1e)3 ހy46ŶjwF3r _WancYU>E;湧ʃԕM[-Zf0&p@l*w*uB$)OσJ%!ZOUm?O>^&wxWsH ՝&vZJg(I@_v^fK]aH3rwi&e%?i%2t1GIf\usi[/ Ml.ZV 8yĻ,X3GQt4#dRu, vg`#Cnۅm9]t}B]!c.Wp o 9]8:焤Xs.'Oұhh- L|if4o Gv8wGݝ9nj($wcB`UW v#;w?g/v~Jx>3ʕfZEv'ԽbX"3`>pylH9]9=v:ߔuR|HcK>?m%O7ƑAyI tFd>pnPY Am~an*x[ze: S%xYoTI qahԕIT@+bl֏Pn<ȫwowu<93~Y]=${<v~xP;wEeUIZYΒ-^C7݅U/a|5Ȅ/WIۗc-I`ܷ;6@n|mvLE8Mng*!RJ!^Σ%?cG?ǖ,0Ed/Y+( |> NM0FrN H"@{IyJ =^9B^ɣ,m B962<+Ȕ 金ŪU٫vPQ2) ٝZ 3NK :Qѩ.*eҕM'dSa@{Eоr`r*zK);5<ᜆluge+@(9TNݠ sC>V m1l'I P0v6<; F7`BI^$ 8F(0L婓:*FxJ{Zq{=h8)PԶzAp4eN`e(<8&uiV9;q]_hEm+#Ѳn SKt*Q+nhTl5>-Xƈ'3 l.v^_J]ViCYV>bEX,3|02O wU.Jj\ 1yzҪȣɧI-v;}?剳DynU6aso/N.A>Qz'qܽɻkpckXSP3(8/l#tKo:جDPm#V~v?Yi0%MLZZZhvv[k0K$IRy9 !sNC4p_#U($ܖ^ D+IVM !/u@D'Z% ڝDMu]eU*ӐD-T(j}u 9p-N껪R´v[՛wg{jҧ M?7Hs8:ԧ+%u㘒a$-hڻ78ub$SO 1ݷSw".KS\H\ TV+\jVF-)44BNhYR@_+mc>Ҁ\ ( lmZKVkN0w+5pxq|X ; qSO7[aF[(1| O#' OZ5C>$[jY܆I),P-nAvu}iզURzN#L\ KR,YDYkβ#t8PP[dU@)HjYZN=r18CՄT*}y VVONa,6VUtj\:|pw( e Ã]L-V9,G pXC:^A bxߊU +x{mj+RHfnD z̼ҔTb̜T ;.RRbq^~EnjnqjBiqjBzY~Nb PBA~f^IjBqBIFbBfBy~zBRB~AIfnfUjB~i WY~f 䤌""dbMj.-Z\\iE @}  6 @6X= Te 2ʚkbҌJo~i3yřy@'ATJ-Sb~Vf͟8R0n.OTY&:M](#敒Xvy]x{msz+RHfnD z̼ҔTb̜T ;.RRbq^~EnjnqjBiqjBzY~Nb PBA~f^IjBqBIFbBfBy~zBRB~AIfnfUjB~i WY~f 䤌""dbMj.-Z\\iE @}  6 @6X= Te 2ʚkbҌJo~i3yřy@'ATJ-Sb~օ Lu twhplyx{mrCm)w9xmRkAj XZ/Uj6DFT1n*f6;tw&L&ik ÞA<#?ND.}̷75-<t(|V'n;՗`y."Tǝn,*5"|彊l1$1NavƔ$3ʅA=|JQشB$YpV^:~5 ǔPy\NǬ%b3"RQOk6vv*59^Ps"pPlkk]݌H3bq%%o&gǢ˩-6e&xD+ZO :K6B'-z6Xm?LEH*#˄WF)pT2Mw I?Z. T@Q򲺃>"S4^88ҹȳ 'nJ'1:Y颾ȂS > " AD&t B"g8vV.)6S!:amEuJ$8flPv6쀊 PـGmrf NS qPAY_(0К CbbZP^=8elVGlt6۔;WF/ݸ^h 'I:hoot#sAu8D7&E$@L#D#N#?,@upm7@?LGL)aZsbFDE< 41%8Vj d/zJkG<˜ r+q}vrlN i("by*J@se2+avQR@e`&ȑLT[=4 >ă(i?P U/h 3 ?NR73Vט# dhx;™x"> 4#/,2~u!*"o ͣ8p硟% pߦ.]~JN$#0LgC; 2 `tudDܶCQ'f)=,=Жb1W|+PtA{&MaDH`ǧҶʨlfD2ˠ | =)5uA4N#4SܬRhT\lnf>Q D(, njH.oɶ$Q+~ڰ}/CW "2bCۧ$ʆNrXC#TFD9MO4~D#5hF<~DQSYo<@Fsf W ~xs^Q-R -` N_r*9u TPϊxҷ|\^ ~%v 7P_ #+32X| A"7 UCn`"#uc&JhZ( 3ޣG9_ d+ NYZiXetq}R JPNNY'򭃊NqSU'BOd2f8I4>ķ ]] O&R4 up/ 4&ڪ*QBTD/O^SQ-#pF4vsқ̣?Я#8:w @dT$be17d!1v?N餀:שs( 餐:Q N*HkdNM[i.ץ-5xZP㳡}/h_P_^^8Vur:EJRBm[NqW{M1ʺy2nũ$NJTϝM}(=hiIu2ʳ^e-)R&ǥTSҧ]•]ay =M4 ҽ~Ek:M;!=zKXᗣ 6]uh[IC*M,_%RRխ=W $#cJ10M1jNs }n46єH\ܼTR*Q'JeC6ԳјG~^b8Q)/{l@0ȥOلQW99ZNʿY^7s ib10'Ҧ$rﷲ6)@}eۅI.59ۏg%V˘VN^m-;hYSG%مoGy;֯g.P2W63h}lpPN_chŇbaٻugv.gO8@W*qZCI ("$zx3wEJ)D[!4]ϖ$=D\VsY+<Ϳ@VRKUo oԫ~<:=~_r%tbXIj`CyM=n Ŕ</SwG^W؝;:#n](9gMW'h=g0^ [x;t0qC3BNj*f6FƜ͍,V,6Xȭ\lQ3= B, \\U'撟,̭6䈾btPpM$ґ<͈E~Ҋ,@SHg lVR0ffbJ&~*XJ%jӜw~Cx;x>`i|?scM+JM՘On!"~<R|) v/+M'9m N^+tXis0;yhEŀo#È:OrdUdO'~ 9 $}:'KNީtjbH穄2nfVgbqobvIU @=xkQiZL36%#MlLE3$&mB[ZL1mofR&n"YkW pE܈J<иp5ssLkyY]Q %mT6qX0I7R ҪSH%g:CYE1Ϫ 8}L Jy]T6$ ># zuFϘd<KpJR]0[rFJV/l ^qX9R myq WangCZg21~؏Tw $K,!Nx<2wc>UH&hG&/wTȈgbHDW$/޼y3:D  Un(=;bER4)P- Z)8NESTs4z!:g`{Ejޓz*yJ ~0:5&9f^(HUXX@Ds{1*[?Hʔ *nr!=a/ŭ~"A@)H1όe0<[d)C7u*)J!YWiR#' S2Yq[ʝ߬H}ѸMxJSTÑpZdVeETEioSQPkwի 3sc?IuX+dx;϶} "-׼TT3 PPjIiQZQWiuIũ T >GbqSeIj1PL/!cx>!N;%5-3/U55BKU1Dhbɒk6k2MeY Bxkcod'Q,?3E#8ñ,13'1)'5 X'/?%UA+,XzGƩH xko3SؕCi%ajrPC-9mHJgkL~Je)NOuI/̓ VU>)B]:9?D%9]4&"_ҲOvZR }L)a9iJ=/hN<_%neD%T?S-ɗ"aIO,&bu bzhtAl؁#|~2 .iRt:NRZw1h28yR*s::[Q@ i/7~+yMgp i[@woǓh1܌=Ӈ7~AC81h { l!q+O]8ij-eO2J 7n :o`֠! y*p^SvE"7P`~ uA#FRw%DI#xU}-$-uvKӒ:P*Yln8=̻D|3o'@fvܟSp IITtvxu?N I>V2svyupo[\kղa‘@x6 "P*A|yآB W1"9%sׂ;p2SKi^R+))0!A#@=w!d :$7E WRPvNؕRY 6VQru1ZdQ r3 dK zFIC x&2-zW.}"tg wȷd%ӪD A[WOqy"Oih&!PnâYS4wcQͯФ tIc]TLNjR^?KE%RĮ;ӱD) vd D|` V&2!4/H?QMIJ8K`4ig;ą5KV% CȫNA{Q\x*_]I[bH_E)i z/~fv]q!$ALKnq^l"@WW1E% Z{dIٕޑLlkS| G8 !ISVl0#1Tڝ=/;-B$抍¨`L0A.a3+7ݾp:]qk8FGrcj[ ._J !T:mB~PmY?uwi6gOm==-pbi:vy.}& }Et:Qu+O=a`Ìa5 #/Ì ii+Gd\ќ L ͔h( ufmr;vϡ4Ms P@Pii̯NƂjD<ũZy^dhm+=Ϯj7_|8;ھJS_CܔhIͤ"r(xi=O JC5A ƻaA2ڜéKͷR' CgZ5AאD6 POֽVsDX!Mg bZ b^ԃg(m%kk Um޻ {ͺyA?(=`ՈeXu\!>Ywxъ}M qkm)9ҩ;8TTS˵sAtxmSMLAbw_2.*[ MJd#[$LV-.(J4ƛ^!&1g=x»?'OƋv 8f|7}~ǹGǼŹTjh$UɒsZ4/ R^+HQkK*mW݃K%eiU1tK,$fi4"7TKf5)+|yچ$GFJS!ԕ?([r3K0!Fӥĉ!$czTI B\X/)F7rUf` zbbl;!Tz 0vbV!FյMQqD&$φY>3/$q-+Rs 4{0e-C Y ի6FQxh: M/7etG  r94B "!CϘOHܣ$! µ8)/]حdN?9zi Fpf05D:2'l'p6쭿p t7 ,=M;BqmW_8.SyZ((x) !2>dV'8Cs&Ux/i̹鎛Do@'0WZ蚙!î7߽i 0k8&B6U$EXy ʶ\{|L`0: lx{o|xCŬ>"&x{ox+d'VͭY"C*5x;e`ᶘ@f^BQjqiNObbL` uVŠ((O">YErWwKxS0+F%PmT)'6,*$6] Y` pVN ̛7~'"f ]-;pCw X\\D1f0j:0Hv m70VA Ǎ̗8p縮5p#&mY>b8x6èȎ{0Zy<L+Y#^@{*ӕʸ`gj`uR?T^7i3.OWVVRmG(M4 &ez0+DQ>jBIK4rQZ.l}YPs1ivddhw3Z5T14פ6皙e31/뮳b= Ǿ^( *t 96Y)\jjrNDZ,[%W{MrĂ.LKRޮϣ _(N ]xyuo _O`W`c#.ԊԢ<"-xt̜ԀĒY&2f(@ŃSKsJS5&dҙ,0:XspIdCf| _bn[iU39'8Ucr.:/XPkuPjH''oL^UW[j&{ȶ7WMWrJ k䓥\rAՏږ繕R2lu?:zadh\WgC/͗{ :KO8 ewa[=su !c*sehHELRԼ47&3,!iaڐ&);%q+(D vðLfޏҰ !"=Nf5faD>E=Ne5fY$cOO| ;T#?nz5bn E ZRԍLR}7"웒=o]ٰEdv>3_ʦ͠`:p:t!z4Ӆlx|!1"=0t8{fde0\8ff'SFS` c LA%$@di2!LE)麪eEf0@`b `@8> H )LJ%%@had\*lTPPbG#JjC{Op@Ϧ@ "3B" 1 ST;ks-Vm%*{-6[煬Z(:(V08fd!bCJKppnBK=HəEUۇr}V:/։ 杧w) n.%Z;2DeI=o#UVKJ3ſcT?:6xmQJ0g `Aʾ-i3mmR2ӅBX.‚"V xc*ڮg&"J6`Pj(µЍWȸY *^.K4?H5364MDbsmfk6XdcIȮ|4hmE$N#N(JmdTtzR+p]苌}?xwVg/>nϿ}5x#FjMOM'11LeLrW03ova`ݼیQS(WAH!$?פ$u2*P 6Vx[#WjMFΐԼ̪ԢY\|+'\"1';eg x[#ZYV!=9+5(333rvqtrut|<@<.D^SA7-YA%56F)F I,10z!A~NAA!A>0xWGgl a@"C"\=PCCPC\DY?(S ~!6EB,=P`W?7OW`O R2+lKss66Mv(F^>1<]x[#@rE i Zz@\ "'\' 0:x[-]f{s@\C(WA7MAK/AD"'H09?/-3]/'?,.I,)-)$皔%'&gN!x{ yK|TrQ^Bni2*H4PF'ggUt,̤:ّys+S36.? r2SKJ2ҋ( YD&?柬: G,/sxmJ@iȂ"2V ڊ+BdӤL0ilT\Oxғ'|e'T~{Z+*T`u&԰-JR Ԫt*m 0Jnܸ5zt-Tq8C#cʈa7lb*Q&5t$ fS^!6Ø&4K]Ҥ6ie24nXDI&eHa &":>CԄLj*ŌW FiM㇃;+gp7VpA3+= 0(g˘03׋0x( cfCv;Pz^.loM鞸ˮn?$(w*&OKדTj^-pv6v< ;{Wxz`+8o]DA7<`myFn Q-=xm=O@%Y9A4qФCiO&$& 5N,N: nϢx"ݞwޒOkyIl68EVt|.ґ*1&{@U ~V҉XD&p:K #bL E+҂Y4PE7iB?dȒUB; Sް-R l!&"bDw&.QRFeݨd<4]߉D8JLM0$&G&s;WvzXn|8}]n]-05~iS걗`:|d0.=wH!;[l_DQx.\}`=!ȎFIpبmס`ͻRXw_v\i؂[N߃ab݃% > 9/xQA$(LIB]%C 5B 1  c libsettings! 0 s U> IvxWYOH~E1/`l,H:v؋ۙE+SUkb%HvW_ݝ7*0}U%#׍QJ3ݟ2ΕXJ]H'(9{(,L?7U2ƒJ^NnO&a݇RT㫻 Ÿ,0<6?#,I5HRjXI%?b)T-`Te巫]^<ܚr;L8ܮ[D/6uVIIRWau}fO\guڈXLX`@1.}(#OdNx0j>=g #)=yL߷EՇG|Fe W&R{pu}50;^zo Mƫ( sEƢ3J)b62Pl$;5fQ )8%3?"=9ݪ):/* *,q|OP 3"ރk,W)s噖ё%DQk+\ɾt&FFKƷ0MhCvG%3$ CK/& e(yTZP,(LU ~%A,sw#(1*8a{$t#J Q{@:~V܌6JVdm}`Pzœ$e^-j޿VJk Az ZPF׿?U/劚] c 9H#S*`]>b{fx,P945J&}b| 42X Uy=UWF8m<4C?6uWvvS;~X.ʕIUEPu5͗SknBI;{xܽZ@POf%Pit=[لMdekSf;Wj~ Y됾ۼ2{qS;^c aYkJm R9HsKOJ[k^WxXY~Mެ?V-ی֞֏HT Ɲ$X5m{ulSp"Ch2 y|߲ 7^[g5$ǜ˜&|w0`[7ʎ 8)+ѲWX#? $?3/ß n=XhQzt߮Y,2@C`?U@?> uӁT8F-^GjktbHMx,Jn!KrFb\[oZnxO] @|_qܽDJI8@/;(D 3;CP)칫8lc/>>&.&LzP3ʢ K^nMC0Y@T*Bgv#vtU3 K4ѽ6l]?p2W ?j0}~ m簣xWmo6,R,g] 81'݇+8!QI}wGŲaAdǻûhEoݲc[zȹ\@,T*N|{g7+ *2oڷ0^ ed3SIY}||\|^gǻ~1\gw0٤4~t:5_}1W!>·5/}6Xp19go[_φ_.N>N3Bx*Ob= Lꈻ\ noTQD0ʃx6PKh?ąD,Y;4oWw?!1x[F݉t5]t6JEGVͭm=ٶeyx fY7 ncʋ8%}(ʢJD_ϼ, 6ūycrb>؉Ãep/CF(PK ۃ4cg HQ2cbO\aaGR6V^z@!|PV'5\{ 0a84In+vġLӜkg2]@CJk>e rXC R~SU<"uAָH)0p*~\ H;&{蝘]h ЋY B90S8`JOah)ٸ\vWGv"Kotl1C0LZo9<[ 19:Ꝑ^ 楨0X9//NW;p |NA QJG/4/%m#v Fٲ-hJe.Т9h.p1I}!S_(`4ɂ#SEG\0I.OfYuln_5{Te"F;4,X9Hǖ^, `\15h?$ςixn@l~{T [gx=RNO_2K ~ՇuJ=2Lm  sjDnVXd}=DjITs\p8͸zs&bF/Gb |bdž=j1e#~T qldzX^̱^ցk{AlCj L9*X*Zπ`b^V\?{s3ܦ5SPz@ԅyRyPmѐX"ti`7Z}aڽקܰpuG-Mtݻb]+n.\ڇ$#N Ng4"i8Xj ˀ WDg'T?,|7JR4Lw 5*wK|#q,qo_Gex۠GeBƨlql]GA˹h+F Z-xۣJe!yD'<} W  xSLKIMSt vu u pRdbRK)MIUP22@i  rJA+$(OAYIK95/%3+%4)'U,14$7$#H#9#HA K״j^-. ?̿xVmo6,DvnE n|F#(tcݑzkeh Dy/>EJn%}]('2]YY. ^H'l+m imf.~ZTusyеCSfs:=33(k6!hBބqu&Mћ0ΤA0K3&͌08ECKUx`h^%Љh'8C]!"ϧ z=^ZJPe_QrB"aBa4՝_Ϝ0_O4ވ`sh/FC.>~7w8&7b^U%q:BL` rJ 8 NHȰJlt&FהU+tMK7bU&=Ȃ̉m$`1aeQY{o1(Z.[e@o!Y.\TXŋɋR*2a~QіӝYH~wָV|AwL`!g!qWl]; ? rFyn3B肌hQ@qynba2ҩ;JɡxGCĖ4ؖٚ&V:xr"hZ ~-5>%ɲW#C"%NNg4`rحvD~j4jJ1s򡍰[ǹsuYx; 1h_V|>e\ #[=E6N"dG\b8K KAAz)W(-?npqx/zGtD F2NƔ˓XUPR8Yys#L;x#zNt/\AI{jIH~vjKbIc01gS~!xQj0+}ICAB}0q}6FZ fe!#k'`zAhgfF+Pg]mc#b$Ӝ-:̊´͙G֑bši8bѦ.yꝸ(9?J}"ʟmvD`dRb/U2]-A?wKn>}D?;l~m!yj=a'̩lxyBbEBxZmsLs&J:m' Qd)B\c;<CY}vpIEngqs{:NjWQY<%*r3=W:]ݪ^:9|y:P9_LJl]O./ыËӗwWKvty覟~I[䳺1^.4&PNrU\fE\ju4NoT9:]4K?:x>c_zyqxt~ēYAפ)6"Harq?o/Koƻs]gɌ3 IRboLR=?(񚨬-^ϦTWe8宖XzXomO"0CTu7u1N6#7GPM#CIvxhW5!7UwGr=O!0 ;Y|'ߵ[a?"0|8 /S^?훠 \ ITw'@&]SŨP2-ZEh7zOT0->*'x>~w5G) Cˋ ![&ř08w]h mQ/>kJpFTC-i>L~'$M[7E*I`x]nkn͡)O 3#:"(HM~cV[_>G펙0;'o>>9Bn=aVrĨq|s5rM0PW̥d1 `˻2aV $Y+9`x&@H5q3#bu¾ڔ+<¬RaxbKe(E )1t>4nta>- *JT ff"vB;0N>PvR I& Pȝ;̃]j< _jjC D' Izo-RN^4h3C6eB .{(qݢ^.AۇX I\l,y^ͨY$m63K]!"EyԞՋl!p *hx G" ޡgpT}| I}o|,P, *gHA!x߀"bVHg~Wz) -eg#=0SITe>Q㭄x }Rj}%$V'„TjCXmnG}hMQҹеZ- !5z)6deFcOgh'Q 8<0BG2G++Ӊ6wr'm[72 I\h#՝[M@Du!їJ#`mA@^j!pI/ 890} DA%VWL=4뫸ױc! TNK0[]jII$cs@8J e%G Oie+_ғ |F8prlaZ"`\H6Fɥh-ڟ׈'>2 *Z舣К07EY ̡V1bP7"C#\;DMD8m8QEI=r&`5bxK$fGb '=1(ڪ.=#@5Wh MC6(8U. ĭӥҥzQ#%J6&!{FVHkQ#.TY:dCzIɫbJM'07UTC&uԚ 3­jIt* Rbц eWcC@q!i62D0-}-v{S b&8=ws=?<h^Bq^!"yM5t.[G))i8,7~?ߩ h#WP@1Њbr-َ3w(}sAhPts e&d."I8/+s^#j0ڵRnpn /h)8@$ (Cei͛*G4e :R1 Cy/^(+[`g ;Aks )pjaI$4g]béJz5M_[:]Yt%S>sAW0 1 CӕB6=s-'fƇTBHWkJG*WV0Ӱ[>V-KTԖqkh[zOD.`sobGRv& mL"mЦ1v@~`R.xTVv-gl+`д#bADWϞ-3[mf6۸!cH9x~ezXd^iOJ~cUǘJ~ÎV~i펳KyP4_ՎEGmpB{Ld0tCL, mڳֳđV#NG8׳3Btfϸ8% FM#k9. E!\Ž<j6@_:w]>mhb*2{ ylFRfzE Nǎ{O܂lN%'^Z,GG.FOkr2NF'|eҎiP'XtQ} o>5`m[n{;%MwdMD {"H Beh+taUI6ew';UJSSNΪZ.U򠸬cMJrL{=Ͻ84ץ^aH"Xg\ 뛶Y3L!k[ !lYjٯ2 Ї-ڡ]p;'?O 1x;4'iL~&[3oJonѾ29 ~e xuPMk0We+eЭTS*NLhQgZ!y!T)*:edl1$;pR;_kXţ}H')cF`9'O}B= #B3oVqY-RM_ pƇ~ W;h^ۃķw\JY!d~Zat}a u38Uz <妨=2tUĹs;s:*Jm!4A?gĵx%ɱ 0 )A,+0@l#Dyy3q8hEUCXE3D9NwO(z0Ua;ax9&$(xrFQ x!)+ީdmPc%`]s[B=ʾ$5};kS$ R$~J"=ժ[ԛTDEeMPDgL$pQ`&p r@ٹ>L(`Tr%z?P.H}_ص" m.{En?uG7UN Q2c/\$rك# ?WeJph~b-y:C-s1Y-Q8j7 sd;" b2Ci>W$rxZ]*Zs'^,DU$C*!Ω+V9ʇӥNQ\Fl&\V#*T[= voDɈPۺi&xⵚ-?Un(2Ӷh.8OGh5i$A}pcPyoތ~{vd#u'Rq]}Ν}a >>!!@% r}43V@>$_s-y,RvakƁs 2HV"orՈ2d!1IHub"i'ۓlNC0LkeDNቴW =Ifεo=ntpI$ɉ1HI!?BUTxz OI 5S4hM4Ak&G>-[\J\o`Bb9[v3;qZK%dgVd}9 iĔ9[D[η "wm O2]h.ƪvOK@Jx-îF^Pi܅pzSè1v"T07|ԀX2Oضa=fDR25u~8h0RF%FO|HMUJeRk< #%ʶL&9vsRErzw^ފMXx f]{+`aϝH"_tG{&RkQFv;͕gŻ}?ٛ cxsJg5kä#p(lJi[Aw[`eؒf}EZs|2 ӁGKy|~{xJK2FlqN;c>c7?(yfɬSZ{3 7UJLOᅳkH8-)4eJ\%UA1q|Ļ11]Kb6=c8N~Hcy6ܷn=_M0ap0^~D=za9cϋG$^讻gK2F8hx0:p('8Hhɾ?̫5:ᎍу}x mFzWJkeN7Wf q6[MA}(Q5| y|QL(SYg^ʸ :`?{/>r79C}Bo*j5"I]_ט7|ew#r%ro5v#,?Jvx;cud*wNfRqjIIf^zF'3BStlL X%'/eV>BLT=\\nAI_,`a`&4ǀ33D!-EG!sJutTyXS[֚_W&4Ԣ[ BL\Dd @*KJ*u @D5WpHV5ԑ!%E~>>L6.3Famx(44%>`$kn=% 3C6[]Ck̼J_T  Jxo|dK~^qBrFbs~nnb^Of^B2X*ZZ"^_ZSٌI$z$D%&y?K;+XjY{$EE~Z1 C|U`G)x[m4Ugd=i,%E>Iũi9%a9JnAV.EJ\i %E>y@嚚 )E`6P @AFg$gc{Q~i> @"XK7cf|ir &W5WQjIiQFpAby^xfIF@Q~_bnfcdK6NN0MXRR +3?$ wv 1д'zTt;LxTM0+F%EQ]P'B`|(&Z\b#l|n"Z=xޛ7#YS ;0&i?ZcfN1IQPQj8NʢRc7k[ς@L'F[+N'TrͷSxAv-4)ꔾ'sWpm&01 QnZ*h&8JrPJRu(x2aj~w0IӛN޵u{ۓbHIϼ"u\ vQ&H5*@"ei匐P#-2Uʌ4Ƞd%NBNF+,آҽR ߭\aShv^PMk/4 TUAH;e$zҬwm]d[lR0Wе%'[i!x;ycCVFbs~nnb^Of^B2X(8v//-Й|qR&GuX@Q~_b.23N^Ģׂ$Sxǹq0>Fv""d$5&g2# (OKMEՍ߼f2GP0b*x}C䝌o6dg@o7axT]o0}ƿJ4t!-N<4/ Njձ+Mﻎ Qi<~{| .sѬ3^>! 0gfB KiU,֙5!YۖyV TD6 CS>) r>|UomkVp`dr6[ͧ vsCV-^@L[0pwf~E!6T }7z\%8P,TN8 "4i`44&j{}=öntbw*,Eij2ポ!t8vYlD& rC:43TttD9'ŲP?#׻G-!vH|M2v8˦]2>&w%O rs,L~kҡj+SxMkDZvWwl^2g@'o$P24po5/hdn!,kV4 rmnWɕ >a.yW|"1 4k;MKօIn&ʵ:SbLXAa/xp^Zq4{H;+Y%A>?=d `? sxϳgC3{f^BYb LI xu 0j]lW41;H.=X,h!`V3%Nx$BjG€쀑6k.1|DxW]oV }~sn,M^ 72 %UW5#y?$9X_^O$k{A ꢸ<4p4GX\y3<00L>c-X~Qu%EkH֪KUXځUUr lSt˲poצ1~;N^<Mp2IW n@K P + Bjcט XC:82QEPaT|q!cni0:&d=*$Jdަ-BP45+G<`+(.pa(D 86,Q{Br4Yj,UꢂMAV0|B/3Ja]0?#ق0;r}8.ONW( ~Ĉ$KC y`^$|u2%نDv[r rMw-Y:BnicZkH,su!$:X4&dG:s c2L_kX+h% !hy ipZv1 nj8z}LmփMF0@dEdILQpk*Z:BcEPӣrjlP醯J}S銲#۪MIhY{{|md{FGEkl\Z*l g\R{nù3W~ v>>9 Ӏם~B܍DUe}P];CmNKr䯭L_$5LȽm|b)`Z`6b #{F:)AY~DT{#MIzr,MQAN(S, NeЊ8>g|sԑUwJt>7/|--/5x8f󞏘ᾙZ=EK3R}Wkj UoH{`2fkɑ{eOEc`}h2!J$\J &ݭxߞhb2nÞF3h r'=אy$^$..U[$ yQ2%))f+*EӷDFZ[id 2q!u>!7Fu/?P`~R%Yk E`Ǖ1)L Q:L]U|U&m %CRmRleG;SEp ;,͉Zt郈:iݙ#w?~,œokwv{i&&zjWmi0d }9 kz.kBeӗv E˚q1.U?tZƪP\8lV/m08|P+r@%ei5D|5a p|ACBr@j/ck_7j ʀ-mg\Q XnyŬ5 MHiZdP鵆3z7{u{}` !XRT(8 [3R<FI6]Jy8aVݼ֑{KuW%hMC_r#%_o<¼XwdvL e4\RKtKtBӡ,ϒlol'xN0 y8¤jBwBlڤJ $* qob[ε2vm˺jOy$yj?k# fx{ʒK%Hӈ >gghHyZR|A[T/#'r;z6yAA7w#>[R,amXoQc@Hy;is\ *(nZ~MpCieˏޞq::~H|,jxòeBcxxT]o0}N~mBt [uE4lJInZD AU_hæ=)9~l.B ʊ}l>fwy$ӜX{bhzAM:Ѩ PtR٧ L@J6V: .HfFC88[bUz`5];>E0P`ʋˁ$1ŐϠ(%ɤ[Pp0Ey$1"@  4\Tc((q210_fs"5NT>ws4t/vKv;+G:j 2e1pmۭ5f8%/ldOɗqjO~аH#EpK_tokEv|ׄԂ*Wjy-/FjJn;5pT>TnWI8&Fe%S5a8u=߭|cz3Q7n̓ FaWԔasG?4}>^gOẔ;R/_Pn]Gz-M%_I8p,p]~g.(]Gj`t=kYQSSeTR'w:qnb0z: yf\m(l ObB0z/ZLMy$/$3,2 Oŭ)4^kR4%c{ajs5"΋R`|Ͻ/ꤛd B+%. wn߅ d4_e\YYE <{Q~GܾS,x϶uL/M>d:ٜYV=xV]WF}~ńAkLNJӦm k{V2wv%c8}"yuޙѝES7e$6j}+dԹR٤P7eQi yrۡI?y+R)TN=eRd"8]"4z*#eB=|wx $&Ǯdi?K Sy_aɳҤ@ȘƓ4++2YIʓKPJ-9MJѤ'i').ȍE\{de=5PE:?8l|@ Ƈ6>'srB*e RFm_}C֥ j7 aQмin- PBTUV,Qbb Yf'.Ԍmk#gA(OxvemLqՒrͧCˣep< &v%0ωr[XQMދ*$ࡷgB4LUDB$&imꑤ%B,ϜQT| PM8V [Q1pS(G0@ n|-[dkI#RI{9k" b!j1rbYԣ(TC=K4.lXv J떞5j(x|r0o#L YZ)t{Uһ`178컔{FaA-m}C=THJ]i~x6!Vl|^}G&,P'si7Ix^~LyO~#]>>ӋGEvz }FO/dwsPNOalM3T"(P ڱTq aՆFȵCRf3UNP!K:<;P%SN XWR^|^L}!a|4>a+,IA0PVPYX6I>l ۲.`@L p:.:Aa,WrO-^Fb~߾2zV=T?(Ǜ$eB{I_\& .&޽]ˏwry}3}u'fO/oUnnSô|% ^8_Mw۫y?(ô{}|%vonܽY.g=;Qv~~n_n2ri9^O4q|h |y\_X~bZ7wW$9Kt]쏻r r;l<}Z>owɯZDF/.>b}Tnw7mn~wzmuhN>zȬQn{XltyË?XxgAkz 9*.7YQѕƔ\)(вil94PWKjdb%VTdl( B`QƧ yjp…}7{QcB6H%U%3ڞcQTPs6tXY ctbH=QY 7M+.c4TH52W!Q9;(>ȊƦ1Rg@cp .($WՉkCVB)Km}XJYi BJVYRjcMJ[H|5Jh5 !eg(=UMl-V:v+2)$Qr|ъ[ C٩2B.)i@ ŎdAPr*lD5k х _4XѠN,FNDR(-a̡ixC`J:q0(YUi3bA MDRSJk/Y6J \,{%4UvvJ'B/dޕUi+*@Ԋe3 m%x1Xi+Q+j>f/5{q*SZ1Y/[s,*RbfXW8 o#XoNL DF W(X o{ SFdJhF|n=f,]J#dU(5r,B&(m )Cu* TsKsNC[ OmjN6ƢYr,N_6MFrFXRV;h޳ @iV+Ȳt3^ ""T)70b+%3`}G! JTT0*ؐWo E-evV4(EEf_WϔYDE5jM STk^"څxLf_ jV;n"]/HUNS+*u臿X_Qt Cptf_R^5T`KR38U ᩢ6`g[ $ǁPcGЉ5X_5lFTdPKC*P>Ue(mdTB,DQĭ43u>|i*m1`).kpUAY4F:GiVΎ1ipޕ*P%iMZt,FIlGE+3e٦58xUrmb &v4}^'L+sIf䜦(Y+IQ ƦD8/BiJ[ 7*VT(f݅) !J%TZ-*#yK9mMi |rA+vYGWEF:ʘ}ZkiD* ٳCaݲV"'G}d)͞U>=jŲӆy4|-TM:qBA'_\ ^:q5UB㌑6Uڤy_H "P؂R%tJ[urFoE lT(ra'~+qzc{x[o|~oGry[uO|{9;/7^渹{_9?fY>ܛP~?(G_O{?,/֧Ӹ(Qn8z-Ooc]'Ϭ:ͿwC2xRMk1=~:ǖҲ&I6gHޡHGBR[B3Oo|HoQh8qrrF/G=eȱ+VNUfJS(@;AbfS%teLNeJ(m . x[zh,\HƜTBtt: )fl cf:l6MZn23%A'R >#mfȞ:c<8qWr2p-k!oN?&o Mv׶D~Ҽϕ&?NX_tf$$xu]O0+HLVUםX[@oM8nG\^4M=9m4fq\j p6IG3H,+]Yy$V袭~cWe)>QEB ]ԫÄ@G@(=`񈆇29r(bkRHzt{˫klzinlw=?b8?׶t$oğ2#kHx;ϲyBfFwFxVmoP<~řKmKԵ]`kN?1q# ͪs/PhY}[?9iDExɞOJI[71 Ia?ldJpS8p'29B  SBMCfy&YBƋ sl{>"F_x4ӗ'gg/(D0PA%=7QBoxthKr ØqM+]èmsMύ3O:ITnxOE2_Ldj]vcBR8)UJl֫xXL.WPqJNķ+)ap'Au"8tYLĠ)+<5n/hN(PZvxȮDPI" K؝/Ql,Rau-%X4;;;.-O,.}5)f`܍(DqjwX2 ]&^gǔaVd  $ߴD}Sڕ^qu>vQ4ZbAgϺ_zpoUV?:Ӯ[]woPk(467C{WNI4j<9Stf6اݱrւ\,^ՃpšFw ˜3LKجvGՐ{VcZG:7Y_mds]A cXau;,4 Y9XӯQfjBm=ܻBlNG7U`M \R17{rx^ W6QSŕ-=֝& ,SDGݫ%ŵJO'zx/vLl3[Njf}f@px;&XlC:6ΠԂJ`M͋93x$x}PMk@_ЋRh͓ h 7g\FB{ v޼a@bB;{ܹ(ÅBZ*rz4ql?{t@%yjU5LTɩq(YB=S\1qG$yqOqʼtVTIV^@'E A]{=*ؒ>y '>캑=7cO!8γڜզ5GrYpڋ)/ZcXV4 xi\Iv緭GE*޻Ǣ\FŻy^g\xd2vz8+?]?܇~[VonkjY2v_dIK5d23Uj*Tnjru9:xGE.<^ڝ{LHÇ,T2Pz3-U,(U}[w>)R:_ǡ}X'e :.P]t89G5GW7 VJ954"kϥ%~EOwUWb_?5jqf=:2!Sz>;P @CB'CzF|8?:9 qZ ީ/Jkg*u4,unȡ1A0lA5s:rKC9 [Yg=.d=+>C6oqv-Dy}"a#Oq=.z{Q%]]^y:=OFw_NGX?Eܠ*t^`WB<ؘ%+-X*{qO\>:`J쿓S6T~6dl0-Q6KA,n}Qs }\(kQܩ|> iV=d7@ӛq枸"&7?>sa^:SݶlO=L c|'R\f}_*>fCnn*W1{]A*||';]FS?=|bP[;_O~9>y*~Q>].N.7vp 8o "V'$Z$?5]l/|"vNT8C'tT?w%tfRy רETsv2*c&r!ç.f{x+{@N' 'Q=SSv)A βզ5M@#6x/646͕fig*4-(%ml]SWxvy{r*[&uU>Tj'l5ـ7@sjURW+51z@K~j&7.?\Njt**ӕd![+hM</>kJ>,Xߐ} j9.76ۢ!vD`ۡOHrej >plKQzakf7b B7fM f+LL@=\ZX5 h}s<.wP+ nwrtut3l7읨E2IQNJg)qx[9"75@X$w 8$c$PqC!._#l]BS24Pؐ2^ ^Y@GY@=xKf+hnGFz9]/@)-$({,Dg{Z -;)Yق1venUCvD*,W႟b+r\$_XHxH5O |F"4QCy[%[bu`PUve.֞-=FIiIKѰ ,[wn ~x\Q[Y2_b܎-\53'@iFlSTh5yUvkZ9? YyPB/K>CRL'M av2i*JY ` N\B.n3:2a<`v;7Up"yuqtq}vAsm OfIy/~P=ٻ}9VrP6r5;l%1 >G>iԈZի =⫣Gg簨@݂`rX10% L!%ʌ2lSu ^9 }>&3f/$È4:<#?=VpT>k>ڧ=!3bHW}>\p84v-dk\stHlA52 I\ vVj6i\ ;3;]PM<_SE4f19:-()N|g&JG ]D(4bH4_V#Z;De\Gڅݪ72 H Jg spkP!a'BE4$ L0c}_0hv͙գ~KS,TU׊gC˰@ G~rWZ\+쵫C0*=Cꘃ5p_pn~g78lUb8ӫmrBq˖qp2ት]!%Oc$N~gp V=c'U,M:SYa[ɇ5Ӯx`Ysk! E({AL > C<NV9#R %DÎ%4oɑ m2:x u]2>> 'xT2N]I2*o;eeY@b4 G pwt5PWxZ%^Wϸ.V#FxyzvLQc^: )5viakX1(6(bCF]/tP=s **)ґZFi2MM@ͭE@5fҔ3}`{Rޖ1!2fퟣDǀ 1go:6iO7?R).6xf9hL>KPS<i~_|.i7>|>Avq5bK[jFg`8VG\ЩҳfKijbk=R9_0 )b{ƸA}tqGزXmŎt2 xKVttbL y ʉ"5$+(?nRcܔ{y&?{7 4<^-N-̈+7>~ͣsT_:W':%p@. aYyDE;Nb[)zYaaYVq?68nhwB)(dj m4iƿ$5eo%pu$ 52c2![3@,ƞ"Ȁ5V" fO#I+1%`xnp HpIpM p;j{rkuo|_R 8A{M (9Š͜nzZTynN)S ?KBlWyhY 1{#Xmy{KJ'+{ Ϗ0trq}} @O>`^b cہHN]DÐ(l0ieZ*s;wnEy,Ff#f '4m^9գ*=jcה3A{^qU%N'oPhBg)jCgb>ޚ@(Z{FC MК9ug :ȓOd[Lch:83djUnѐjZp3 ,/E-M6[Ydp1T V VOs[U ._#+]-( z$0qz!5Gu֍qz42څ@uBOtExiCL%oASVڞcѰJu-^Mpt~Օڒ7U{Urm2s屍tR=8 "aסg^ /TL=&X:MF)rG’5UF(+'0B%޵Lfe"RZAY236piʤ?(&$9p`( {;  v ZG66/t Ҫ-Ֆr}")WcUc sPsru,.[Ju| h0QrsNw6Otg.t:f lz,I.˽!f: .ѡTJZMyJ{nSB2C;vG|Z۾O@ZH,eT8$&&|bPbה3(MJ4纊ؕߪ\3 0q:gK $ !7ᄕY.^Sst@.+)ӕYEײ^BKT\1-Jr'*N]~$靿)[DC hIMzyC]7`zApo6U<WNpP0֣i7Sx BboPSѽ0}邹YTn mRyPWc = ]86jyvhچl%MݷZR'4}ISҐXۢ$4ր&1M7G|"(ٌr<$ iN[,IjJ8;lM llʽzFh܍3C_ͻ޳qqKp}o FzyAR%C`Uyk;Zf֬xvHnfQ<2[en=f!>3ZؐU4J&! ;AF<*MqFi%ؔ5^Ӝ;Ofl말$4 L\YMr^SCmm7`8܁&RuHOc:R9n8ZO·\Yi8zuP٫%[RLe;++%u{ja\;N Ȼ}#+'a*֌4"7qb й?Ռd9jo/`#=OWRߵmŗǿE@dy1E|GP=*TpۀhC-{a0'nWc/ Y{a.+ &^#7'*Bhєr/P`NGOp:tx|QUPŁ-EPUcCu.)1wWοcs=JghSiyڂmy0|5,޿ +2I-y{-(T_a@P]RG_8FW^ak-ۖ\bL' >$/1V9&Wek%%ؙ(J!۸|1 VāoՏvCJ1EBS?;  hm%"!f TZFYƵuч s1 @0$ԁh): ?ț,ew1lImH)bBr3_u)*v^=>iqՊIv-Lb3 N'1tIy H9s߲BKKtpd p܁T0R8]CdszMڠhtE d~X[-74s<\|?_E%,,C?̞r5= {*KcMTiì/TCXaӅwCXs-·^0EK4A]`%߯oR`u|3S\X/[r3_-s7(`vtt6;Vr|s+'6{ՊՠS.s+=O6f}8(փ+ВB '4)ȠcO^KbqI}\4Eߌ&i܃M{~_6pN'#svlX앂gneFSȁEHxѱg(vwuFYȲTȃT0Ʀ :qs18L^*C~HZJfH(]K!msZܜ-œZHR|QA?C'|<!|@GkJ>sDhNjiE`a2$kGnRqC+ȣ{irLD?,ǡ-{2GW={'P/Jg;k%#.Mh>|Cd6=uE|ik A|@q Fn)"lV1l}f9n$h5(8:Ī7qeq.fN%Q{t'c܆3&]wd(,+m9V(N`AvJvQf\TJtŊ+7Fz8a4І["R'iuQ[l+[}Bs5_g a=R0IG`@}56R*LWCI05oN̂ЂAO Q⮸KDQt򺕈G^j0xf*,*K;y/: UpU_̆D֒DFuDX6D\/iu y|w׹мbTaM{ .NI7$KJ<©īn"-R'bc޽4>ۅSݵ//Oouy]>׍NO֪.+ϛf#zV& .+kNK61gx[PKZMFr!bSIe0_?×UYnTTC3㸚9E&3ܚ5?z4^ 9~=xt.;è5@ .AḂ~EĎ8l8xؿqonOxضq'?}D4hxضqBy uJ36g+q_U̓׉Km>)ǞW7 ֵ/-qKV⚼H~3ZHYBN5WY~fVpOsH_ZMV,_dg^pIbQ5P' 6q*MK άJ|C;iE Z%EPCL@<Ԣ^*/*osqqglSR6{WZKux_o`ƃ FMLLp" \Ű@ fJ?֥aFҖg.ym|㵷tow&f %yvqhxV I2N&Y[Jyrd'n/& N7䘜m9lQjqiN5g-W-WfDLAvBb Of1(KLN.̥?湆ٜJR63mx\3Y'Bzsi(vMpH[Niqi&кhmP`ϨɆ1¶@pqVsqruhBl9D7BZ55 ;[BБ֓ufi|>yGɏ. T%,8ФZ.@x8x;R _7~瘬mϤ0YWJK((OPӚKA!3MA#X.3/>-VP&miy5,,&f#rI{Xs%E% ^f6(Qt3O5Qlesb\J\ $U+)h8gV$hj*elŭ88sSs *5 JYڶ`mMU7k o^49; l9gΜW.];dW5]tn[L4NqP.t[mR|AŏGz,G (%NI\ EiNϚ,Bv}D7L89 &F`Un2CB\pTH0ig{OHڼ*=D^x\ ^'`}6lрs\#Gt[9oG/2Y.-xM׹]u7'*ʜ{x]` c*5wܩk -|H8Uߠ6W:=4 DAQBpqt@_>z13W,^Q_c!UYD5 ɓtYx5Zs2eՇN EUGP `ς OW?O/w302;EdiuJeݒTf3O_JB8@7 G _1!8=ZYFddYE>/m'GU'&1Ѥ%) Uw)0.OxUL'xC&9]$y5/ l4˫֌=:>;pJDJ%5iWYDWXLYѭ~ 0@0"t7YZtJ%3 -# ٷ:r 92xAd #Qޖf%d p#cH&<g{8Җy+[K0K+ t"k:Θ %EgMS٪6,tDϸ,iD7[]E;2!B}Jmyv8˚eBl)[jdCnGj)ӽCQQdvF[Bm(ػQ!v&ͪ9gU>}=܁ԏnlnJ. Q*uKLϫSl "(&PB}6T6;3)['IUVi+[alRYspJÙXi-->Qt{buԘΆxUB^wx=?jLl CxtFa` ?H .Դ̼TXxX Y0%y֛wNb<%nlx;UaC)#?x۪SnCRnɺ}#2Lݳ  x=ksF_1,RBlJL[Gv|ɗU5OY~@'{$8{yM?5ϧd>SX$N,O/m:ߛ|iϯUj*uot^)@_IS]6oYMq2+o8DrE  S5U.`-0N|3|.#Ucp|ߓkz9nJSFgd+F )HfX.O 8u=m4{T n@Ǐfx208=q}b&8_U_q! {$.kb~ : <Jb ۴*DžMQZE "%<Ss @]n*.f~2I#5e6YC5pBSϛ$WI1i qeS`fC@ 5!q 5%a=/fS2(~e2dGkwS0<"XKP/T5-2BTO;R!RG"A8ӛ'u,8*&9FX, -_M)QQ _W\]h 0l\-y }? zբZ (J-c>@IWi%֚߀J 1dmV"ɢIX=~73mqR^[h6 /#|[%Բ']0ھ(VB3{[pFm%h!b˩P`RM[Ŗ=EpmcZ8fC$l2SV:DwZ'`Q$vs2nMBz-~!e4')M4}Opj?違ɜLEֻ ݹdP Ä$a^Ӄ#ex#. CxSJ/(ȓ 3PWW.IcaCFK l"ţUJ=V_:SQJ&lm#Jy_ */&f jYM?b-5_d=Ըbh0gć U.CO(9x] W4&/.eJRjJQүcoO"I+uE^Р\0FeZsyy|<ϝw;Ϗy~v:=6Hݗ^GEUO2jUkU组=5:JG|ּ$spf]Y@N3#{ؙ~ Tu^ z4RqoƷ_P)CjA0dEDѪbeqVE`ߎYÑS79^9ٹ+(3+.T Ӡݤy;_  U xy&KY_{A m \ⲱ9R"ujܿ_ x,4CѺ8OZ~: ܆zLO1p1u%/l/Y孥a̍^ Q"ˏ+M͈Z@+OM** (Z[!$du?fN ]b^ MlB[>j>PP׫[H-űv[i1Xy82%hʌj8Y kI w6w =Gү#t&H L}!! 5$`DymPFw@9&~'3VsX`Ϣy[25tb> ҡGGG7ȡ{3βpԽt~aK| S8xT/P||z8ܫ%c[eEnL85d%h7VjLG.&yӱ~ۇ.'14F N9vGv|/5l~l*dJx|WwIN9cI߉铱\qSzT 3vs:*: 8^joCJX~bn#uwtzݡC*+gP9Iqakb#$vwlW%YQ[*?3 \J-)z(-lM41 E2 ?s\3 &^ОMߵm=wtMuF*4xsyؙbun&^cؕ1ͱ]9m2G03v5Lk0GO7G`15. &pߤ=`P; T]}QaxB,Gө5-ILa'(mwiPE9&lx$^7nvsC9Ӡ=p:3hEf3M2bt@udUq&\z%-;>~3qc6AAk9ec!|ΑȈ%*l1%=5WOL"" @Q}-W6/OonIg90X);a#e4K/LNct?̐r8u:׏LV}YO8`˛ 92ujqecWuXI  J Om乱m"%8tnbm %hOjq$D5ۃBBwg/iȓ^\jg:71QqKg*(~An#W RsGO4XҢˢPWD/&[gZVL;9Qj.1XDaꥅð+V&Sj>8_禑6 `<A̭że>@G:5՟2p/+y:m|m~u',2]tB̜%He2Ö{!49uXOpoJwO+R!34gQʠ5>-uD' KU[Xh*Ou|zqOjHhfX/rix aڟ4)L,hRG4&nX>nOh62P<_QoF9'׸y$XrK2HT Hb>YVs `Ɠc<͓뷰mG4Ɩ-8@|8fNΕE9y{3VN46 ð#+V\6 {! $.u<<NzGr7u/.'jAgk'MNۋp<82} tJxڭi\ v8rkR۾+qsGJ-Pƫ3^{Q[8x\^)l?7{Z*2Őn21j'q~b(6V >#͘Sm8ޔicG70jen-l;Ҫ,RHMQ LnPF7fQNSQ<*Q"P/? ?@e:Mxlj89}WFq1<;>T}'Ăݤv]:# 1M]zAڽ9{ <{M_C{\n,,EG3%6Hv.ׂzb x`D4333g㡎> 7 owu\(#b2g JѦ tޛ"\ Պ2/Hl;nSJOnț?B wE]-8S*XoXkQMDIaB2wP  OF [ʣzS2G&g<|pܧtxAl2 \)/Q$_F>tl7iLY`jqGM%}5ҍ8vawv>y{~|Bb&Jǧ}|n_owBq/AAA>|zxg{Ŝ67[,ԃhdi,,m|X]LG3SEr*16}LfGuf*b?/Aؚ+X<մJ= s: VDD6 J`;2sPEZ hd2P"_"E7hdtquN NrZߪޙ*`iN|f Rb8)SK\6G<<+>Ti gbAp"[H"6Jrjklڈ:k-0TEUb]X(375\9_jjF $=I"|zZ\Ut/R_i X;G 3w-HЇ _IHEry+%}(ԤvcAkp$eB5; ʈgOlJk~xMp"O:ZDZ/zŠY,~rFU5\ܯştuSN |ܽp>ؓ?Ovzi StJcCM%-:S=$a.zH嶔ue z|49eJ7 fg ,N!NԔD451 Iq"p5OiU0;! p^N~}ѳX4l&;tgqf9pr=Yon{egrB[4d"!~)Y\D- U㟼lNSE *:tkMw"iK85;74ZwP1L:i"C:.´~t+ݭnH!ez|XGTV񃵴+esEr mRv-5p.Q08(T駤s P~IoWұs$z]"ʶY1t;n]kUzU u{7*Y n8V%!쯹OwX4x"f2+5bm%̙kg담| Wiic7\~G='x9LE[ܦnuMR`uÐ &v q!9K %Y-T)y dd$ԀVyeW|^hM0ypDL4t={7W 7%ثw?\hFV ?q7 V,Ʒ(Dɰr9nlϹL8'w" g% !qP#{&܈p{d0$6{)aULz6f2,ƵmPV&zC|Z7ۅhnp#9M㵮N<XxUML#eN)P:Bii-ftgYT l,XJ$2Ct3S]pSɮoܒ3z sZXeSP|ע/]R=ttaQ۠CO"U?cI-Q*A,]NH;|{~#XנF(3F"||( D6g Lդ ʑQϿd `>J!ף6fj|TGFa+_p6!7B1}RZYDfřtlmFู5K2{r>ypGWg,P[zwݮ$CP ґ(M?Y!snwPN>9!T|U9>~gNt:2+ 1<ktUnvxZaN[r{j;d@Wc.1$HX_XJ2f_&H۩g)\*A ѣZFϻN{Hŗ%9֋}h4|L>$YwBjl{qmnL1UutC-ܟSCS~Mղ01) %YJE4݊A2_- ut&gެZeJ,!ɨyLF҅mYa'!ry3wCQ@[&b?H1x!{ABS;2ZƒƐP,UrںJN@7a9iWRd>~r&곑 <;>h,O̸=žDϦ!(s; RcM2/,JE]M¤ҙа; ;ƄJ$Se{+6&nA#oVqx+GyM ^.m&pn^n1r=T}e`T#N&'{) ܰMC{T`4 Z mZU|A87cm& PaB gn펆^B07h$zsxUMlE8n*7?U),Y; 88M/iB#=MֻuBBJ<$8rT'8BpBJ8!$͟PU_f|{o#߇+kjIi1:(ML+|] 3YN|MPecN+f2y޾O.Ao 6uS]pre`,.[Z$V+#WKU@ь\rl:rl%i^-,Tâ $eயMB49aV\kgNjXUcfQ6Rl~iu-C0+T,x$m5TE͆bB(ɄqT0=h9NR~Y )ؙ$c3 g qDE'IBVEqi!!f98`a>BMUw3hץ|<܏xk {[`pEl,7;!&UXD,#<Wo_dOf3n"UIAf 4s\,jo_3!Q8b6b1F-tH^VQ>BFyiR=ܹYJ.;N>Dn.D`gHkJZ]'ug Pٯ!r^xo.|/ ,r\h,huK[jȕQli1]+`hw ~{;4/ز 4.VÅl:%J|y-us]d=L&O!d}}2s1gt"H\,NyZ.g˰M2ʣy\3,۔-^ӆ{Ic+ƯRBW)8"YJ }|i:EpgA,AJC R>}h~IgȅItgZ5yVp; ؽWOWV3Y2rS,kI-nPɿ;P 7X Κ{lۆ%0=h_L 5CR8O$a *a/7(WF蕽ܻJ#*I|._4K]ӯ_xW(ptr=Chunk->Buffer;  if (InLen==0n ' n T+ ?8:%s %s\r\n",AuthHeader,"Basic";Ze=D(e0&gh!!gɓhee" "POST", URLV]fZ" Content);' { if (! c^O@g6 ! gbi ZxwE yy%yy3sJSRSL6$n~ ˶YZ;fm[%MOhg祦($g$)hi*d(`l~iy ~󥘸p.ܹxUKo@W EQ'c/`alG,%);k^%ofypGIH"dS\=o+ (qCn·;‘7gS}o!m 5<{-o$+MF.<)B{>NlͶ,yr̖Mm׿qlGA37Ur֍u4}NwݑğQisZE*;Ucð `p/1~+?< LM5;M}GO4cUǎ{\zj!5: W/Fmh1)jW^sN·E)6XV4S. Pt)$cq&rHvD!)%+m+W\ 8% V` 500!`(&I^8tr0CzZԠ:> ђqЅ- f1 Gm$ $iVhnjѽKԼD4׊$]_7#sW{ۻ^oc?b8nGq(!v]>wH @MBqYYFP܋!n"/3TP!>ի8A{JZܵekb6y$ K6v@R ɂuKtҽ?UZj)dFXs%C>iq_-yXB"i6$F'ur-Uuh6F7D^%?#3^/[)VT u&iآ)2ߣ^x)^b9 x3.Դ̼T`WfFc̼bk"-ҒĜ\d@d_~^r*Aba)\'?=? H,../J;<4ĚkK,|rc2K2AJOz#D% ـĢ  ajy%: kŁC聺{?3Wqex[/^|`Wx7~ʴYed .8  'xmn0 {;0+ Y=R1icjϚ[{|4xWu bU#;% zBWD$~Rwo0mh SI8{ęԽ)FĎ:@r DL PvHb? 7GȒBλԻ@̡/X0HS H&zT@ir_\`ЈkhxeC䩌x{re zLrO0pp)dqpw k$x;ŲedE&M\%xUo62$W̰u0tGQ}GR) 0 xw|w|pE@llm뤴U 6Cɒ8xt ?RPފd  gR$=Lbi"!%؇x%u5 1i&[J11CKѷ|4~"[ u(Jph >m-3Sy @#;C/kR4:)e>ӰcrR`ɥ|TPS>ozWN 1M~J_M Īa TQ(hbkv 6Ns,dkk;xfo_}IRprf%hߛs/7# ~X'+/+޿_esKDd@fPoR1xPR9%&lUĪ >2ތvq5+%0qyrE=9ckD{A'&ۖB=ְ8͋z}&v,Ųwq ;KJK봗\\Gh'ղwy{^tWm_.ۨIL|JrKQ-p%KBup{C%-UM G$!apǟ0b)vCDjdvtwL3jT2ig?W:`[=qupk62"x71;̑Cw$T*5/cqyhr1 & ɍz@|zv)hoO%/9"3VeU{SV޵f*mc~D 5ZM3 Řp+QF͞SDLF'o;Ed$"m,3Q*fCb0pT @ 03Cago xM՟3Qž[s8]CyqDI^x!ZpC 3OpHV58&ͳ/3N.fՔi9YZ..Z[;x{-8IhC aLy% Eť9%n>3pBBB]'s\*J-)-ӀkZsrqExmO 0+B{RoJ(Z=n@M%݂ K=,*䔳Ur„l-q-4 UZVmA(v0e.=MjڡTN,^pG#$r!<%1E ,1sEŢ8;YXR഍E>}mN4v+xRlxZ[o~~ŢzrHb9 Q5(ieHbp\JrT-^fggK=z_W_i=W"eO+iQRen|Lwɂ,]7/[$vI%|(cʨ, n?eWg*o~oy t zp{7N7Pj C)oXZ}YMTi{Xp0/AoGuuwtru9 d}җa} }WQ*9~u&a|{lK6 "eZT~&YrЩ+f|'qG;6[ :PϤ8)R65YTI!zCg9G N 0{՟xsC'jmh}oITGq(di}YK\I.x7pt6-_PG(!id M@ȺrN7Nn6֢1Nɟ,tƔħa1Z\ֻdc*v-԰(@9 e3<ƣsHs A.[fBCCGA#ws-/&`i\.(~d#܇6cq r\O n:R2]{,8T؂5;1 Oه۱5~X~mه0%AHXLZ蓀#B_U p, SV3J.hRmtKa2BQ鶕o¦J 3 l2IUM w<4 T]p2Hr}aQإRbP#&9/XC[O5Xz44hD_#D-Z?B+®WbW}Ǹ~֫QGJҦ\6fpZ~7͛.V2YYR+Ţ|NZ ^@0?ZtRM^u> B}~:Fe :gj ׭y7{"+Q6"y"=x,Xc''' .SZ8PKi\hIg:h[hJlpz_^;Udj(v|ڜk OQ6VV<y(WxsS֝6Z,J/],0K'͜o#ןzJ@inm!関D*= 8b1Af/u8Ქ%q! KYW$hA_\FEgR5<U2VWjSVe^.6j* ˸ ++eqDUZer}e}iii[( {/_H}z;̮c7:vt|4kOzװ6E6;J!Ti ڜ5x:KX3o;W?AM")6Ex\Ss*(#55&΃|e5$XY^U^+"El\N&R~pudٜCi,Eؤ](!aa=ш)ȋ]w@w! <9-i&dk$Z $n`)GJ=qf:NI(w7:<La ySDɨoY0aTV,;NʹDӫ*4`&w3mHrӞ0rScQ{EL{su\B0j(u:caηEY[ɗ5#])_`Ry{'w02ʌ5ɂ?L;(h 7z:0v_{*L^QWդl g|-_nF fDDpa9U |X1Ϭ!Y](6٭x&ɱXi'iQI4̘[L?!2h c._Nq^\kfo`T j'#2]\P(}6|3~n[])D֎C% z6'muUS#H%ߕ>F<$ (tJ|9ʊq 85{bL ށit6hsyesub,1ўoMޞQRZvՑP% +[%ƸIm`ui i}.ayp 8T' t.焾NˎESuֱ¬}leoԕ`~ap)W:+"j640t-{Pzhb]̣UQ+)AC5qFsN> `fY(g*FoVJ5{F}c۬≒n;[/jA`tYC88FYC?{}Պ>\- XktyOu⠍@&Xm]ߞ;ZbUga dJxI;}ܴCy < +"}8d"ڡe^< R'l.nﮘm,6%$CdfiJ1ZuL~d2 t ِ۹et"^sʫ%N#< r̂ ?x}Ao0 aIlT6D)(FNݯ_0Aş_֘:'"MQquD!0AD* ZUyz9b!`͓aw׹yM'P it1Eb!|nPY{sT+Zۧ{%UC *m^ѹ`Vg[ 9睸հdn|2+]rU >YI O>[-ۜ; YHi~w(IΌګf پ7&Jd,mUm,b/aVSiMѮf3I]3cZ~scde&c!}T{fVZ6Ģd%ZŜ܅c8{?mBĿћs-:xn0ESgCj> y4E"Tj [P,&RTkHԐTn4wޣGe! sQ>]qRq).ץi%B^TK8$BT˕J1G*ݕ(AT;1.T 3؝LI,s3bLҾn˛P>qLoliY\zE9cjxjb53rZPnT!A mlYZЧz䂊B/Io/ql-Lƥ^ϫi5~b?X$h$rC _f5+x]h@]UE;EM~ aHA[7}s^EF93-/%5M)4-'>5$=kĐ'0J0On`hr6rj^Jf QxmNj0 )DrX.+\XnS,lߜd:vf߶lTrv ;)Sj[@;8‰B`w z@0@]\D! 7X:!-pfpTl,+;2Q99F%s/m$))|N]fְ +c3N表_IpVE_H*bg}x]SY+heq ,) .RFiWs>{c>wgw$~ڙ23)ި7/*z/e:QGߢ\t}BV"^}a`a I/J ϲ믃" 6U1z;9 .N\Vr  }1{X_}h&m+'4%a!YVL xt (О<8_$!sHO4Pd!EZeU \f_D0+@)]7:O@%7S1,9s%&=4Ia/g Ik$ &XhV2-jJ Odw0粬Q&!,ٶ(=xfYScA Bׂ aa\IE(g#  d] 0.1(޾ F:3 p50Iy!%C!<:&hۛ☨M9fFr|oQ}R#Q?Uշ g뫑pZpuTOZP/:P^Ipqji[ԡ) kfWZpO8˲`Т3%owy%cgV~:U f\ń y/9X8H*Ș=6:J˜$97QH>MY~MTe%\Mٓ"B>a/0$hViZnYIH`g- ?ex ;z #oփJ M  f q=&6 1lbTqxxx%acDe*)I{$q,@&f- U1 s9) 9Eś@PY)*j~EñEgC6G+X l0DaHz3㨬Eh9.*V;5 I7$8o!mŅAΡhBT~خ7/|:$#_ YnWJ唚ՙT cUώօy X&lp>ĉ6 j}3߳7ʯ˪;Pj'?a(x dX<< :zH'LMJw89W2 Bʢ6(/Ͳ쌎#̦oj4N687%eY:;Au2Ԩt8cҞUÈL٭7?Oh!8 i p9o<;;ㆌ */l]|t3:G/ښP9;=q4D%! 﨣ՇVE>)ōݸ(CYlkh"y<5*6ZCn:[IHԻʖ&K& ;K=w}Zz*7ur-:U_އtcKq^BURAdcED07̉"C `f|2gs_b:{|manܛ _~tP7ϱջ{\jF59`_Rsݳ*- cC%~x-T$fvh9EyώL.5U~\ʮFXdflwy^CJ=&EwM>AqNtU/pNs5S~g6Y5IF*Բ@c9de9w\Dy_).e]E|TO-aQt% ߔC_ݕ6o y$&}U@NG)̪`JlrV7PNO ;Qh$t ,t2* 8'=`"bPCf1 S*8&~-j=T#ɯE>^gC,/V0u{P}  L\n$כꑈ}6>-g@5WR\TSyӷtvl:EՊX.!%x}Z?(CTر_@l DTJzHJEgOf=SPVv^|y'Dќ3w-cQ_4x{{;a YM7?aꑚy;~S7WbQH/+5QHLI*-&$ϢS9UHI>'$8*Ud5T.LEy%iJn~.V ) Y "DMQMS/(.,.)֜,%lgp0IXOILS.I,*ѵPPSSPTp.-*hj*pUsU؂D 7z lXHA@ p5' ȃ:`1/d: Z;3SԼbk./RKsJ6yйBx@``  ; void *Contentsp. return(NULL); } y%Bx}kAljHB$WKv&PD(*iEbz4vGMRLW*'OȽz(xTgfwH 3o1?~&MR{ZE7WhM4; 8N.Q)-(^:U-,OI`{be)16opgçϝ5Zlrhd|MNAA7t@gӽi>%pm|o 0IFI&";•B[G}ݬjڈTDWʭvm.=aTjMus,'S!]be.Yg(c؏h&S=щ7/V{69L-CtC9RvdxM{!j«GpkppVs% ]z/:ԋ5%.U/YJ0R.ҏO({ц[!67X`"^ `q6f2?ĺįzt×W6@Lg(vs|PũfqNN!U ͧ iXiZJyEρ(su8 N9 e@|egȀaF TFA%-Oc!OCzz'l㢊7^BWT3E#;M3-&|U_k+Yo#A8_N Qw{QDu3rA `t2jQI~y׃YF v(\x70q :yg]bRMݎq[4-org +rgv}>OR} dx+dvWPwY'(NVe\v ,xoB&g1&L>(Yi+sj"xol 0xAO@p@7OjPIOfv2Nm- =HOD`,xi6V^҇㋋n&0^*L1$ǬaRUu`ѡ]c qRH  T. XV-|)=(/ګ\ѩtt}ĉ5:' MU΋IU(YUPm$-h 3,hQ='=ȃN9aOʙ? #vBn^}t@ t!-J6ֹ5u{'[|)>->eLE iV@oKugmёZMKHTE `w3zdz#Y7HU*i 1cyE7>\$ Y:.b aGyd%!aTց\!Rib3)Y6 ut3z˜4įۑi2:;Y*.+f}~`98oCutqp _ [23&5A P I+jɟSUnEOu~ S{C 9 3^TA0/{_ 'geT_4U%9p:Sk2Λify5CAم7[HB(+MAXOK'E'OxZoF bWd&ql mCf#H9No79Iv q4}C{?9yW,?GMy2W3JvE}%U SWu'Ipdl$N2md'77RM'Qߢ#UC][F"|޴75Q0zytR44j D+P{SsM\vjWr#R5w `PwTۦT 1ˮ+VDtFwm7 4n[^mG MҼgi#?Sư ,XviVozv禔-]r(+)D ^ hK0H?'T07њo.ut+_sn{$oZ^ R9M @p[Xn !kPШhj aсÉIM 䕈Ol5]u( m,?^cI L&Mt!2%œAH6i2rMd¢xh2i&h2::QAX&yꇋ~zqf?%{3Gۦ 62aop#YS`z' @ bwo{uz*ɺ ~Ji%W%r/q^ tH] ]_>~ʈ!EY4Gge)1DžN9z>GgX\P;sCXnjL: Wh> ѯ4?a8~`;n3l:WW??L&O'a5A|N/zsZݢzԠxM+͠hX}Qr_uuNƎrAkD$x2 e4#B龁 ElW뭁t稘r)C Of^?|x ОFmk% Fo,0qNUԁW*BKiSsRCuvr;Ei<_ bzm8Ɏ3lIxs'PTFJ TCeM(E]P)%Ҡ>ċf\v2FV{ .R*MkMM{ 3j1Akhܯi} hRSt:c o'P>M[ѩZ2 3|7dTeh%-d;C+2{SS"&595S=󽄜l/aSWt8ʼn-CC::TJ*hk7hI4&l!405^K[g\jо#XYup:s3^yQʿu< /Nu3­A'Cg^p7@xq6fvr\v'Ep+uuA;GK}f݊4ᜥY@` 2+" FAhUHF0 V\C0)q!J)0/TqZF $r` x$ hL $rIJ$#l K$y噰~ɽ\r%+ҁ>|dpT'. >6;6Y"-g0dB# ラS>& /2,B|؄O*hU65%.jV&4R1`S 8Yj1C2G1L|LrBɊF tF}|LeU| !9'w| 5}|L[>(\$x\qCˇ8q d e >1P rs&f^U-gq0`ff6 3 U攏Ə1qnbCʲm'r|_U,9|(N&|* SIRDč3?4Œbqca20OyI1Mefm`/P !"wz;>A 5O?D|1vuQ;k?qݹ޺Uw ʾ VD辝{gxwVejRgv;\ݍ!zޠ͔ڷݧzq9nB2iVˊ9SJR!=BYxG>A ,)}5ѿvl|G;<u׃%WkM{Np|y'f\Q7\/y)ё|ٶ#~Gx#F u5yCו+l3 ڿ{Uή뇩A\Ue{#JUT  P>MxWmo6\ 9CdM7$C蘨-.+w|iY~I: t<>w<>ϑzMdHIr7S)ocy!m}N 98J6sұobL/#-H;(nzN/KIo=K^a" ӒZ $:3F0U0*9KpIyIW!=vڡʵ{sr9to%BA.G^kŠPk1m=Ȝi>o)84vdiG@!fw20}X7<JP9rڢM7#ђr%MS~Z=cFMjAM4* 0"oٴ4v#_a{/Yj^+O˨%뱴A.BSY11jy,n(eşKvo_t+ תObO)%fB_)d4jƍڪx8F=")e$l^[sryVOWJWY==bi#ۃ;.Hؽڣ cEm$ێUܐrFQ"D_J܎v.zjEx3e4Aue$x>22_ g O!rc[j//74xJ0ynt_US(u?6XҚ LAdtrn9-+Y^mTDHXSUkz;WiFB1OѰuDȡUnkG>)}뽡fE~Eg?m֋_'Y/646.g,n^O4$p` vU7 Du9 * w^~pI/~?jjx;mBƒ+Lnx6m^Fɴ⌐<"--͟ xks8Z.)g*D1 r9XeL,c2ue*H~A4># =V~.F7f)/ꥉ"~* @#o8 q'>qK]w8f 4NXy$WѨo~> >tDE`%-o66,gz? HȢwKzfKɅWYzPoS[~Y " gY1FF=fGdAvyq*#KH69#wHI_Et>a@K8%*K ԷmSjSgD%.d4MT-e ^AIm2_2' &fjv|d2p3z_?8zKN馞㛄s>K6j Yɀ=7g1x kkv ӡ `a߽'kG#PqEleA}PlF=Ҩ"#0 R/]᚜CZ*&|}786'zzaqdSh $Ч čcU- 9WC0b`8U׫#b ըg]#n;XcN]M5250/L]YUW ;T6@Q[V,M/ 9!رs ŝ Lfv98N>sNv^ ]w#(SP(9Jk[i&A4uΰep8hRsb.,54 Rl;a,ON 4M j'k!8ߞIA=K$e&~iQ>R˦xzzxXecA9$l-y8Ȃ3|%1ggmF[/2<>C]!cɣgypK ftHzl}`R @ NE#X#8Ua6h>;8?(FP sݳEԓCe pP2%wqIPVk/׎p@tj $xmMզhl\M5w֎|+ ,vg:wU#OD5 vmr~Kuo&5[v?W\oɦ/ډږ?(ݠ;!DûXĠ~RߓbJ!ƥN '9쑇SEIҭR[ EȰ*G{Vs ﬥ$ѥ)4q"4@c]C)!~I6A/ Ml,7KEW]ǀ M?|#nLrWM"\~w@)wt:v!z*t)N`yB[nmMs$r-.;_߹Iػ>`߾xn!_4%."P$e=U6r Hy0W/zyPX@lzQv;miCj߸p (u RM[D#~m@o\>S"_:X/:+"8BD'fˍ Ad|TW:3b><@-^MNW]DxPXMKL WbsNLvf$x@|rT!DΈ9~"E[XLةvQWJzjJ$em[ۙWs3uI"h╛]Byt|pmв(*:x_%Q-XiD[4|Cᦍ_W!Vow*vCŖt^o6sϝW'Q7?zZSMUVYux[83q+dyFQֲD'03lc<ĖWPYAVL;x81qC'{f^BYb$^ɹ&qIO6+ٗ˟ ֓T'3l)Ħ6TYwrr$dɌ"o*mQ2|A}( xؘAEOTA!3MA(4DAV!$(UsF=OѴ̼4⒔Ԣ"% _4yd-}vzYuG=jSxkL|0Aln^5xA0F^tAkj UC]T@HMef{K%-/Z.[&gIHC:ڛ>zd,Bxk`᛭\N.h>+nʬ>u? |*: [8`KnPgxT]oJ}>iMZ܊{TD'@֞+]kwmSwl4QnJ8ufN-bzyWF^ԯIc7>]S'[:S秷 _頉Z-jm46 A^ &X+#{+NO;|.8[8n͆jWlWKLE{xgt6)scBmW hpX諾h2ҹ~,ڋfbQn5r18# Lee# .&gNaxT3~0)itόiaNirew}o2J"m@-?$6V`9L/ai3Z`6,%+/q'Jp0QXwfJ X-@5i/S@ᛉEʩIJt 8k6!B@a&%T^>ejse<MC w v$^jT9=L錵k$̯5&zOߚKbGˏXX!Rwi$'XʶJ)mA?lԞPU/. OFQ[( THkKRyʥ,S5jEiO@lNK%}3!a Dw-e#vg[j'{ t$}sTfR> Ǥ?\1xb!Y z\!6n# HhGnEOXBC]"{23dY'$4!$(') xSLKIMSt vu w qRJeRK)MIUP223SSSKB2KrR53t ܒ"===Mkiy)i\6U-xXSH98mb%RhFx\\;$aJMm{oa^gty}ތ^@ntNd=ANM_(gO+a^l',"-b+$l(UrV:;"{"x[l%l{H /a DN #I_CoFa0jJ%~WәlL|9`V*mv9&yIDL^ӕ URLr-G H>Ke>e )@; ߤd20788X GFQ/gut$P yS*%SY%2cl5&o$(tx: X C>eO]ٍ)P]RpL&2 *Y&V3CD بOdr3cj3*b2(c~-%%v:Vnx1P3&ڨ[.rTN yASr~!XODvqƉ$ v - ;Ƴ'[E^a Fj׻m*@$>c~1e8 ,$}C%l5v0Fx X`?x2b;,!i0}}$R 14t3T#„Eq$E<0)P3BWPȴx\p8^L}^nɭn1һgsԷ>tǽi}?hMr7;_Vwl}}xghn,2v>L2 8lcd% 瘩ʎ-axLqN 1T`9%Ĭ9%5.*z,,/r:6,܍BVv < 7LJ2qJ(Sb5{8K[izn*}LΉ/G9 IXUWe'=;)teyve:k|]d9ݸ"䷍m2:YE5X y.< [Rk)`k0Z?ZjN/XgV ԋWjN>rMP>+/Scd+_)o8OlG |0%ߑ2tB~ \mBP 3SRv7 2𾝝|*4$yŷzf6\0q*n/9I `E1-ÆBڊX8Nc.% G"hKdanc>$z YVMrԸlMԈ#*X;*_O|s0"'>bSD(ÅB. f c";-5:P)4:8HgT5N&_!(Bv^:/[vA2 +q񃠋],nqqX O))˷h)_;ΙAUllXԞ~vy/+Ĵ`z~O͒ǧ"UV.<$2!Ә9T7R ǹS"[``J{' SW+ [ui,gCJ&6NEk| Mq-E\;k3$Njוa>=za\ꑆ_sd x;Au%#wf^BQjqiNYRb9)%%)%\\\)ɉ0v&VZY\ӧdi yW,9ϨuFnBYb:~ŹؑUI`ɨ:xQu%&ɷ&1˖$$iTĒDMkuRliũ%2N(3fEk3pyʛ# oix:Ku^ 69 x:AeC +GIIe|JbI,Eyْ8YJR'Xd)h(hhih$g$)hi*%jhTjij*jrqVsM& UZRZai=@"[Ē" 51:P q):(hUSP (״edrqq^Gl1xҢ]`s^F 8-xPMo@+&x4J5=!+R0iCaP@Ӧ/T6k&>u'ΖԴ[kHzqR' 'Fy = ז4Ա&,+xA@#h"5TiY^2 )6q榹 \ۧ x<Ԯ0_BFCPP% |@mLݡldCO/ǫѕ|gE] VrWcnCSNM[xw#F,?UI(x@KAty GǦ}uVJ#υAa0Yh&Ttzlnlng `+;L:ݡ3&d I '"J/tɗ`N%ަ $4rݟC; \vgvc#a$:.Ud7YEH=]˓d?^%ܿql,0MIo555\ѐ {[~+ZYsL.j{<#j`j"W^pgS(mC#crb& R'baV-GIyF,2t۬Nɴ .G2[MPcK hp @~`{jE}JG k0A(;;t@2yEfA94qUMЎ9[9xE̯w&*gTXmOg;* fwl *\7O$<sT@݅!e<;y \؉d&~0Fni"82 v~.HrlW)6f-)Lqɓ0/ n{# })z()oKf(@ƌ1j=X*iUsՖcEYNXg,jxQ ;<*]à"`|&i Xo5oɞcwe~zpɍ&MBy; oM^P`͝vH ?Qɬpi6ҠsCis9:4i2Gq<[ZZkDTp6"a9U*Vq C”i ry9"Bnf*b2!b(:K+Wwj.uT: Vwj-u:t:YݩiX4N /ȗ&9 S1j3TS&,"I"^X>coS9!:G`3KcY弲 ,> Ns<.*W8b QQJ娜*cEШ)Ctu;o]X7 "8IuZyHZP5rڪl@U^X۰'p%A6y|x,vgeRJEMMΔHZ5TВu|W]a,-֤3YVzK/ҿȵjd{zSՁBjI[qR@)eɍ{P*!MgP |L(s:i2S-.cey]7Qp& cXŐ؟DuDc˳ɩn|0SMryĔ,A&E(YnkLy0![GgS(BSnz˷=m+<~#HkoUbJQuPj'ZN ͶŎJ9,y@yoߚge|?/MԜ}^ZRhKr*%ŸyG߳RClPZ3=Hǣor|~zG}*H BWKBGJt"1f75oX Dcy|xrsuu/গ"JͻdӸU&*6c+kZj)}VeV}̳I>w[O֝w+AKI~4Qis=RVS_OqHRX~Jֽ.W/\ά(T'yP؆D`s{r/`itvly ͮfa!5rķm{ek iY싉edb;v!msujut嘗rꈓyfPl稭ڱ10Nt~c]OHn3=FT) Kʀv^KɟRR^e\J|hxi{1[ΆzHԩ,v܊Ōh^ $o:Ynel31p%i8|*]uzP/K0GeR YUjp&WVj\E&fg둼 S^U7qYٵZUH4c[FNIKY,\6|wg>^r& _9p,_,B ` U@ T tu?Z%}[cMicd&;~xh_^_So+dn{v*9$3L=ե7dCcd7tt4EN7 S{٢AC&^;Nׄj~Pߓ:i8lG8Ç\zϫ;Q=Xeo!Q{gVQHoyyEy"aNheAg*RHcPZB DAl7@af?&@[#+3u:s|t[zoHֿ. mdKZ e 倯>lu S`x*3bQ: <שȶ Wp+c'f<a&BD•j2ؒ0XscQ^ 0S(N 3 ndno4=tVan-r>og1xL8~裱[iyJa!- »0~ 0FS`Lp0 0M'Ѱ qF3d- i+EVl1 kA"'Lj xOcDJlpz.CeD#c$2?Z\iXu%, EZdXsom5΄ ]&L9b]*t{cr$mF󤐥o Rj WXhyxux3y>k4.L\i<KXNt^e6+R/lz'5֝'S Vb(]I#Hӎ?le&zʸpI_ pIMªSImVs"С#p34q֯9eƉ}Q R:?`ɱ&e=thN\%IY,y%# w1N'-9HpB\FO,zyBIuSMe^7AuoX?;3sĿUB& G3-ސ0Bzڴ¾%WHy1+.s~~s t~sB@{6?;>8韽C#rAѠ"zO2xA^Ώ_ey?zYzp/E{>_vɛ7!;O=pr`&{g#2|==-Oyx>?@0ϓyx*>܀C̥{# {u!R;ٵ (9I /GŨG^'C$䇽ǽ9 . 2 >\l;?x3H' 0ۅ'\ʃ3>g-Eyp%tOzpEY A~#Vj DGɒqOa :A_S->j xK:%{c}i5HixqJJ__i8YL~.?z:~]V>dljop/S4JyP{CJwzq(*&[Y@~ r"u,{0%׷ŜCm`>i$PNNy:ET `zL(ǿH'bq2H1rCn!f*Ŧ3z5-& h1Xx O}p5%Bc$ APWq|pz.0O| >xSHmܢoehc/ss:00!IG6Ghśi6.yFiIHM\pr\`DäQ==6${Tkb vs8DgLN0$'ͳ9)$_.x|A,her6uhyM1%d!'HOF?Ο.'Jkẍ́Q5 drYyۈ< O ;hPH ɂ@OAQiP=L7)iƇm"/e<](s3H}Hg>q MX/Q]yUuôϟ_2 ]]4~QTG+ɡ:l9sArJp#Ij(?Yˤ0U-[9졘ϕJ+,TS0@:p]~W~LXQ26?+w+}Tj D"1S K N4V褰A. '-(*Y*R94m9T}U;fI[e`};(Cs9=/J) ka9%U2ME$˖WW,[ ]!z废xNȐ\dZVb FJta2]#zm+tXi@Dd.qrǪ>w^߼AN޼_>qG eFN\lAd <d0iHa; O?\^^O5*F*|7 d%rl=%:5#Q)R|pr =ht>wAS# _,o+ަm'Dǚ.N}YS qWs&k#{Qfmjl3\0^a ߊ]#1Vx?q~S sD|}%Wq A]+֒QVF7JnNJ6Ⴡ-x2Rݲ#wONg@T=žޓ}hITВM%pMx/M}R+ #=2L?\ʜWy+2 QȤSHX1$1}b(rP9eΏi8;*˥+r8~{=bo16;\>?@ЌpvS"x9 )p1/i_J?1)Fp@RF$qpTt&<\u V`f³QH8E6:,U%@+9jWAOPJ.՚u&)֬!Z&v5tcN&ۣZoem#kXv9sxabhet$qo^!H8;ƽdW`<1E?7!w'8?+WI.3H^vJDl( 1Qgt; 6[h_ 5w.ߵ?jOk5ׂm8O#A7ĹYç$[ڂC~`}=CR6 K>7IXV͢V0p茌[r^RruMKBI'>^f|i]%WH8+$* {DV]!$[&DʅV ]+HO+6$M- 4 ҴiI>zf+}HY]+ ~I8iB8[g8`_nJKqD"_2TK$|_ ,X$\. t1UGQěs6ĥHaTغYeF))j )60FxI^uȏ P<]gjx1|: `V$#c?vwOQ#SH>Z8cqjv4} ;m?u=}Ì=ZzhHu<ͥT4ѰLݳ&ZF);FȕT=-b˦~C]q~%vd8~(`q,sĕC(tZH0FHXԵƌ$ }0 QمrZ|M"=P=bMqMD6s`X`Ysfl([bZiNrD= g;N2UVY[lakT [`bWJX9̎F #*"3P# Dyg d\^Q]GRӏlJ% <"dLO{\ciEUH 5`ǵ=/d@_kXHf;>Z9v35|mK +٧EuyO4ko3gXuywr| ;|`Np$Ghqz qծS|Y4NaG#5嚓.W^OdżzD &8Ol6-W,9,ET(gܜHf=*Q:}܈ꁼ60=2d\h&xou!"qN)~@+Ffg# 35!й=' H|׉ixCsdx9QVS?B  \*V*^p.ҊX: xB䯕ךče3_[i#N7‹)IZ4 P ~} .b6ԆW;SGJEv nY!9{DBڝ#1݂9 eHڜ1"Zb GLΡ|Mbx{׿+S}.#y2_c+X5a5M(=7W6'o8S J"Bx9-ANzLi@Ƭ5C**v3RYm}+3s/QGi5_% i, m>SvrA$]6VnRݺn7hs^HtRfXS(V - 7QF\ ՓyrYi܁rk3GB6'*W`dP UPABȸUyeĻ,dbƫS(Gi|-VlX1a{iEZؑz}xx2߃L@F>˅+w"QSFk (ʍR-(7Z[XQn U@H SЧFnFynFm۝?O~”9$”?a7/Hټw)m:G=俜OkIcO;ymJXZ~RIOVs 'LX=Ÿ́O~S#,O7g,O0vTl /OTg ( ߏ.@)~DR":<164no%F)7*Im{>$e+%)ְsԦ48`6UY;*LݙoSDZWrMߦnzS7}8s=dymn?*akeT\W 'ebݭ ?vY'Vx]Țc1qci#z.R"xl^Y--2\;;z,}^&%& аV+<ʺdοW=a-U!8Y_Pq#CI 0RrW4SUE%;eۗ&KtVlz5USſkNIw4cU;=D49Di]JtLr%:Jujs"%:KtVKHtelUVM%LKM41uwooKF kGK?bB -i >+' .}BPLV|p{%Y&%ߙ4 􈄠4膄@N)!ȣiSBP %Ҝ~@0xmKLSAS B"qSB@)B[ i+ʫ/o) }ĕ ioLD +n `C\a4jp.tPPW?gyKp Л8sbBDťK}g]lj`̽l^{ #UjѢcfRGʼsMJDFlUiMJs}E!ScXm2́e+W)iJsF礕O-xhx6mB4"hטާefy1ihSIriK1-L ; )TvrJLh%zbr}u3jp0 whC Ja/XVAz)b| }oP%eQŔW=0$ar4+<}L>8<579eeJDxnuڈȼOmKoaz5̽yX>4\dM@haD V 9j1WZs>1Ju\GCJ,=Ww#%$&lV*1{U5zK!C@Ecx+$;;ĪE"!ƽzk66_I|@o>n-|I|Bu:_uJ8?!gE|ɱ&7J nʊF7Jxt˴˸_ AZ vxqP\3G+lx꼲xXkoX 4=R+("cfmZ-c_5fHߪk!QުN=nѝ&HȃF}gX юm0r It:ooomv_.;J/)\#e@9~=÷e{,.Cb2봥3׋{N4fi0v4x ӄ,Cכ{M6#+-$a.s!Y 1GJ1Y!%Kk7E4NНFd~_i+煌_&bń:-YDAX`dtSc@en tɂq?ȳxK<.;o8eTQ e]TME6PTi2*hT̈́r(fjH5AKc*(|Fq#SQ7i6ufpkP1X^VM0dRtx3APe$O&SYRA~QrÆ &Yw-z: E!F&ٍa*̔VӆB+l\D38e3CSǣ ff(9E5e]MMESOX{@jCβr%M"cu"&'d "fYPۉr+LzP c$d'?OwزB <@+>L08aKX0{D98 ;xao^r؟bİ"fpWR%`j٩IUZgg &)$UH"'Saye(s8I9 /a\ǦH [<@b6O2SEy X|ı(Ñ /9td+ b%@;X9++n4ЗGh]={I|yxchs*E'썫_^:j_m//y']3ۍ1‰͏K7L(I8؟xA)F#V.h^Y$4;/W?`F;z6d4V([vK5NNx H';r2_Z J~=p!Y,t].wQ6jT;'#ku _L5_q^0/^bu áߔS^]3{5qJTl2j&9&vUAW?qaljtu\*fkA:'"P#Q`lAELEԮӴҕf$\j(m}.ΛtJiNi)_ްx;ks۶_(S[JKiި̌G1nhh - %m}9Hd;͇vDqpznY#\Y[O1HĽUؙ&۰8 h鶥i;svvݦ]rmzK6JGߟ- O\ĩdUgLZvV&]r6Xp^O}!8t50.wIܤt-Ešʇ.eO|vks\χנJk X^;tDkÙL/;EaR]TbcXn7۳ot^~q-/^0|Mð˹ }u]2īf]zxBF횳.&#`RGR E 肅g,LcKl" He{!6`J,7=`e9 G"᫉uxc?,qnL); ,E1fQZU1]/؆> *vs<Ұ[w@q=!Jp9:#|E^ѿX6Z<- f{~ V= b'OX`r>O&ِ z !QQǸp9%Oᜏ.ڕ}# /cDD˄~`rͳl4L=F8\Xmjph"?Cln-Բ|{4Cp]0'@' .Rh"f4A¤`;fU. N5H.Gį*]B\ P r-;I #UM&fg_WIf"ӜJAV#a:bb(wU" -\l,ZђQq4Fy%5xCpq+fܸL.1a|{?OoARmPrpNY}08v{"%LU !5IaאdC"C2ODJY <Kя g`:Cz*s$00RlgH|v9IHM4C[˂u '䚈KD1sE{- zXy_ܔttGlnKYS5=㽋IwWQRtGUE'TlGE 4sװiW֨V:Hf-}9>$c\&&g̦~ S/e=7ƫ8|A^ru8)=x]MFﵚ?A-l~ *VU%6Kմw|=obNЋkTҢP-j-NJ p={CS/Ebr䩈|>i eUVɨ*ƱwGZ{K8+Y=j,ct Z\}YղShPWG[s # =}qu ,>|L-T)jo"dOZ z:\G1~2jBðf/"cg]ӎ>R[ [zW?)Ad [*Dt+yv*c,,㭱văr`:0”Q"F\l6*TDmTZᱡ \9|E%@>6a1-%DQ7* 4DADmS9KR9FP% Ҹa ⌨{3TheZQ޴G>4XȾ@H >O,Ѣ3KC+~jU<͢ :YG q7n!c3'?Ⲧ/䃸lР*j55>FTT({2Y͗7DHpw%ua.OY&ccPc apWBRW}, 9lz]aJ֋*W0)e c]$|I|\xUo 5S tK&"i"Ef$ o֮~cd5O{a"6þR]Qkf[l_Qj1\ 5 xZo%5rPNmK(im+t"V+撪٬ȡj]*Rc)z)ZMN %@Qi-?襗@=E,%D ~s޼>y+S; R'$yj6pɛ+%{+p}{wu7fngx7~‰yl&y; M\r\˴V*hx%I4F96n.Lv1MN{8xT5]I/'CEMN7md6Uxt@t#ѝ]s(z܄ggҟ>& w.3@?=$}ק4l\~v~ù4 w A XQ@_<Tާ7Գ ҠӌF˷.}֒DdZLe}sÄ >XNz' H߿⥝34AΤÉ8|b'3lLĵy ~fq0}ꋇʵtˇ[4\?PL~~=j8L/2ߚ|:+6SAߋ[n$hf k濦3K-o_M--{KzLVՊ"ojTf!jXWX=UzO߻ylbj,g5M0bl->Zu@;8(@Ҭ{Ӵ;؇5l64BےN d&X@`߭4ze$n?IqJjTM|- N9$ԕبc/V ; J $/# { xD^9 ؑ@=XKG*{@Z# Ul #RQ jPDo% F)m수viH sn:4ч]N$ۯΓS89ӾdG#yڗh8OB/+PI1wKَp*$GX_3y'$N=^NQ 5eJƁŮe6là mp&U0O.{|gw5{N*CNVaD:$ش;~K#]L}QjQr~ʫnwgd4a]FamPxI֖gz!RjV6t[MBa ۮg]_ ! Mȃ? &{20H ®-jF0 vEFɍh{:?qoChn-w9BubU5B K: !2Rխv {\U Y{uɨvcl,=%X~$z4}S:Y5aFP1lH0ﲓBuR`BMm=Mi8f!uf6fff1gAf&A"ܖ߱zŬH,"fRc(eQϽyRTi=^F[&v'ŲD(hQ-JPuTxZKaH,`/o-⛫hg9P8K㼒<(WE]E sJ oQ,}[ێ a"q0U h C!'R+](V45h\ ٲ8#5h ڸ zGW 8_Vc4N(5IX 06eM͟Z\GˎHkn(jE9=ۖ#߶<|zI_vXBxxdba iEg"" DF?*pmJTELbLt؞q8X^n؋czըr,3ۦ 搏 8r1p~Z( DxFӼRoBWRI+?}l7ybHDxSkH?(9Eɏ)\ Z6|.&:ƍ#PN ZU%}ۮ _].T+VIW`Mv4t(And\>\VnP [:[UX&]5.8F$Qf. s.̑Հ;l I( .1*ÇYȡNgw뤀RUj ,2$^m.5eqbarPrU-ᯱlmK42E.h=t|( -6ƞA"ö뽰Qt<U3\mv3s ru#{bFʈ{@ŨZؠX˻@yX\'Yx69{q6 9~ˋ /Wknŵ̦ 7V25F=C^Kw {}fہXi ^̢,YC狎: fB1];vi :{H(z,bBߥ ?БxK1Kަ6,{P}ZYe0Yiu EXx9MgAjC!="OA麽}\2ܙʓ:Mѝ\Qй7?Nӽ@?Jy<=3A |[j9xVoG;a7 " 2I`'LY$;d1NZ@ղ'[]kgLIȇ=йj+*PUԞzhU@qPu>v8i+_>l\-B06ıχ 5qrT-KsQm#ZU')ӷ\hN @5Wݐdg(Q$ 2}9߳ߒgl?2u Ay Ot-wEƬM,2,%D.@t tG"y8 0D= ck @ 91%ZpQswQX!h/64C55y-C&v܌ Ɩ} l ݒaBmqW<6E\ 24Nq4M^sYp0܁,[75Rt^Oe*Zð#L>#Q Va/0jHPs+23yIjcd:[E*鶱cEx-N2'L φXАC~`; 5 ^:ŭ>ؿntmx8!Cd !Le@PaxJɴq9Ĝ`^/dt粗3W3sq b>=B!v>2& b mh͝drK K,HN$tw \JqL^06WE9%._{J&@&qe,Xk[do w:Q*V{;>^sg27Ypw> hl;Fm~0+Oo䓇k,wJFjG=-yB'@B}4>gFo+͵It?kGW60rkW ׇɞgvўV_$}=^@@RRR:jeA5+?ȟ\pP+}~}'v ֿHYkyăv .*-ixUoE;a7Z5%d(:v0dl'uS;h]n3) |!T愐pn8 7v8H3}D&g׮U1ϾvѻC:.E1Vժ mGS'KzԴ=곁![{=/fBjHCmc绚$U|ތE1Mޘ %<Sd X8w ]QZ%z2@Up:[ ]@[( ʆ7_ c%oڞK( [Ζ+z|vWӗ^{ݺiWq-v._X|c"D򮃄E>9u+ka)4;uzܩAihR0Ra5>*omaD,?"{iQߋ 襵b1%AEjR8ȍžhҶ?Ě&ĬY;N}_.yd8XaY/eS_p)kVZ\;Ч܀:} I5 b.ƆҔ q\4(e-md|Tߦй }(s4/l: ! @Jw Ǖ(М͝sF2bt&f }c:c %E.cg3N .W߱^ћdiMU.}>dG}#)g^>'/{d#7bJ ; qO Jv}je”Qi-Z;0jq׿R*zU_0NJ!^;XZdXP~B9ƇL|lvGqWBDX)/1ްДx6F[>cyPncOs1`=r#=C)qy?0HeArxk-}T!Qys( қLf6|9! V|h-;?J $xk-m,Pq2 Wf^BqbNj,26a_ kyuA&)dIF!̏:D"4YNTrQf4IRʦrLNU33p1f2nvD;/LU2htte%$RQr}1&lC%Z^xȷ!;G&e%GPo71OR I*h29S=zgLN{ˇ 7.& 1&`ؘTt|(S,f;MJ5"8X0ZcM(ZVh8FYHV%g$U ΁i 240z^Bv5Z.y& Hdo=MSM[䈣bGgmjMjc5Q] %ގB |r|Uf1|TTH}t/c]t J2uٰHz'rH0ij^Fň꒯Dis*sb#7N y-jˊ5:$ Xx-#k~^qdEF98KD1%(X#,X5ٝ1 d .6kfɚP kf)Fsr0KBc,7'O`ǏdG>Py TTv;(5f6ĽxkoF+6 `H6mK[Ui@F(-BŕE"Urkof.I)Nz8܇ {9;;;;;[?\;_l}UÞs?Z6hzgkC$Ayt4сbzF`n.)黩nv 0_T x8t*Vo! NtoSףq^rd6 >^n;3+CaA|Wֻ1g;ϏT4g!SĖ}@?MnhiQr:D_]"e&)a?D;N>iml$a~.=3;_OG#_G!C9v) 0hɮ tw=3qx߽>5pbðoO9Nv> vl/zﻓ=rr %Nw|3׉'mFW\]j C ވ`.w"r6Ap*)6xyDaD҈G 2+ORXViN,&[/I^*5_i Ï> 7 iOü K˜ fAa4VHlj' FQgZJ]:Ux́c <<XTE7&NX pp5{LT3gEY8ӹl 5% 9r8'p봝- ;'X&g ?|`DV,f-p!WWXeN,f\%ǘn0{E.~Q/L iljQ k)~3谓NLn6!,>#,>+,n3? ICCC-Lo).Y&7VTM5.j;,]) i1MvAjagGPf'i##?@6 !Xxh/_A41mRi%ʋUx-ɯ䇗ˤ:]7L)!`5+ѫc.dح)؎wXxN7[(hbAI2DYc(`OIPJRu-.*Gc rd96,w ID\Q@D\O0!Qzn F-.X){W][+p‹`1yc5b@JoyU+[,VV5T LɎMX 7mj5U?X=&u!wܞ ?ޫRc`[ M}~ MMv#i/GeM ;D΄xI>F|V0>ōYBêh r:GGBHNIvg "PLKAOAt3B`F OWFXA[aoS.5 4^N_=фuK_iڋ@7R75 }Pu^h-3,X'B69{~TFY`ǧ) E[b^pTEvd=A74=~3nX̞ˈXX5KFin0h[t0$;[WH=?HsyvRb+Q|@0R,PIsĸWVD"=hs\{M#`>dJJXge)}!%!ln(k⩔+-'Eg-9niLVSտjaɫFfߨ8 )?JcAiCl,_6qI ^fC.F⋦9bݡ<=N9噾pKߕ |" aɥ),Atu\q+n9+&)UM3lp ~!rX:]AeUU-! ٽ:e{5-%˵ ⸢Ds|^tnLy/ d:M{l džǒFYa&,9y_ МS*)u*))jA?iuUԊ?w9p_ƴ-TnɜU&5!"WUdOzs(kHeCJOϻ8zGΗA1xu.jf#J%Ee)zAnn:J RIӚKA(=YC ؜a ,ݼ;3K#N Yx;u-j3GbnjnrAFxbGjb^T1ѴRP@S_XCSN~rRZnP8cF%4%.% FjR Rs2E0JCx;u$jC ZxILk.Ҽ"Ēw;Xu23Js6,gc)5@K* RuRRsJ'ʸq:*h[O.qasIL/ټS&}dA*8p.|x;/j'fQҒL-X[ϼXk.NNf^sM+ n -xAwD^""g #1$(4v2#2yMY}]'?UEUfkc>ohfciJfg^Z_3|2WrO-|gJYg"'G+b ܥ"^?71kxT[o0~8vka*$ME 5KĪqPTcUlBeF}߹>mn }o2s8x&mm-2yrqut'kCͲ޷k\n-^QjD <<3?֨%й,G)[kw` s993"e@N8sz݆1K37j^d*;Q׉(SvYU ]v{9Pv(\rU/n2f߄D|Am25_ü%<*BoRPKTeď^pJ|0hyeHK߼KJ h4.gg]ek[Ln瑽ɛɵr8 \j;g&sBh0xix A춂<0$QF(N5o 6@ 6^Њ&d.m48*a_}x1=݌j -S _C!ϻfpnG۴q?xZpf=OpOOhƙ1DOXOg(3*zjƋa X0T]_{eP8T=$SUvfPl@(}y}"`6'LMR1{ </d3|e A/FwKʔ54T,Y#2!yU>%s%4%feo3tS iQvvq8NLŘ9No0@a1exBOK[~:( )L(߂GLsDS"*W>F+<]T?N3agz}%U00 Ct) l ȶCIvVFBP@AY X6NUe##P6ʬʚd`a:ẓ?<߃һ*)Ĕ@Z幐/ƵA }TRʹU|5iY3͊1QOSr.m)o\GyM)@}6u/ӄEIb2H5"l1)}Y ^&s: >.¦JeR[9M֟lVvɻx\u|afJ6ah.Z$68LbBxg:5yQ]0u#2-l}i85BIb>h/¤{'7KRHRnr WI#FGWv!|6 T#6g~^ *`ԐHPvò> /muSRJZ80=Jv̧ш$N`9u`sHuenaqa0TbfˁXs֫d7s,ۻXY"Djxs^k%dJWKxޱ_VZ1hNՑDuեtcSh?2R>7t1injM޴{TX-]]L/B_ou:q(ݽ5i1}czEǷt+ycj ۜݡrjM6RaE`;^7_i;̎:HO`EMCi#7_C+nӭ6}k0v/9dS% ?(Q8l6n#lJa5  u3ŭe:-٨6vsRfQYIQ6dž}K\JhhҟQY 'Emc78M5H!( g..ӭhn;U`Vrٔ!kF)} fWC|vm f2/HE`MLZ^\SD̡֠)|>@ɹΓlZb$;~]`}>vG$F0=dUuUr-[ߪŷ tM6,qJ$v&ٯ*.^Xoc-= V5WYGyVsNAAgjN÷l |_aQ]`XM.+=Zē6mEawWrgl<[D}~~^lB4.Jqǯ7\-;걁U`Y}-ZM*/Ó<OMڮ[4twCt~1Qro*7-aj>|r6njx)﬉}[Y>7s\鶧Gŧ KD.a7Wdy,. F\x ޞ_/]nV2i<Lۃ? }s,߃]0$16gA x4ől05NH> q2 ܺ,FUk R:\ -\ /X룉;C0Yx}^*˕HF ~15%w~E.нsZ-TݵzߊiܝB C z@&E-lj?sW'R7D1A N\@H35\QHB∨E1)n+لGy^fMxx٧xiCp(mܽ*=?I=j>QtSGGHI.<9}IwڈW ׊&Et/<{rE\}T;_C`?Gq誵~׀+Mwsn@TbsJx_#%uO~2YQT:J׌3|ZKg X;"HvxXoYWh:"Y'qpݸϴg&sZ4˜nI͟B5\]OEuguQ)opU҄`c,;fK"8G%+xlz}cֽfa%Ef  $6Fw:ͱIei)|/=]Y|Ng8A1nv oA!YHsF0اg#(aȢ9s(.{TgP"w=AaTmDزUqdDh4TZ.ayO p .Chĵ]?ŒQ@d[ oX*v XͭJnV5B]T0UĀP Q{ThL{B|VξE;IţxP}"[:qΊv.pe{vV3Tب"t'.0!RrOˡ14qFhd\:+l? )e. gʖ|LRx6%d{1Q@a!ł{!pDsn+!%W>I”=4v:Z 7{Q#Pq}|NJ4NB1}c^)0hj})ysTD~6@ Ք~P,oݦh_t:B˥/dճl!Eb%X( iCAX`;M>14t=]Z0&W=12>f ێ<%fS@Ni.oSJޡWٱzj^ Q$X%8-w͇'M/&QGYUI8oUui|[HUuE;*rNmF@#.xLy ؞"IJ`9<}P:tj0|\7xC&~C8=tB\ANRJW"ciQIφhz4py3o. ]5\ՏTw4 (z/>eBUQ45ut6]Ӷv]HćqimR^VdjR+qw2G;#Bs 8$W;|p⏼$( =s\=9{5$82yiBTh$Tev!Ҙ,< 1Թ&? >"LTU?BM0 Y 8 BD,Or8[>( 5&2xIUSgr0س,&ٽahe!#7Q˴8a nQ,+ Z-Y|H,jS4 d@!!Y1gNqW ca9b&24 ȿ!i c* Ng>Xj 8; (.4za-"QKJ5 Bc`[GɴG B,m+LY[˭޶A/^9n('ۛh.CXDU0[/_2̈l2@Pq"x{tɿ=9=k#5񘮥RڌHRF `K ϶S'0t1n=ht'6xUtq1ʹ@p;%WknT[AcJ~Vx/Hזk[9>޿dOb@U@VyRq#S9V zMـL[ J/guü37}V/X/k$oYjD;? phjz̉Ї o_Dd'FRYRHu ns5&a+K.}ZkNr&`@N{ju:/{=xVoED,H|ʼnglz^WJ( U!!JF 21Yj.D-,q)PQn@%ġč3]oR~y;jxu ]v-^FBk :Lb<5`8ak"MP-* 7ģs{ _S>Ht~oWǯ g攼l1WGpD:3aU#J)wPUS S;V0lUQ ٹ4PR1"!h&s19B] ,O!C!ā \?a%5¶d0*MdlK-bֲ$uI. F+ L-LDp(;Xu3jT9GzcQi"+V(kf|GP\p+$;P ,pG##̋6i`Dqjgp"!JB3C^XˎH'RMuy7c`$2пKsZnχ˥<8.guٓ7-# ^}=js.zsUߔlRcJTS{!_asm?˅}{A? ʣ /"S C x+"d~_'x{xѿ=yڇZqJW[F2cW::yGvl&=&17Ni"a*FYD#cެ+`KWPB_]+*:GWJbur{*Jޱ^[p̞byv4UN|j730a=SL}9js[U}6+A7*ǃZH>rLz琉%S!?$v31D|ʑ-)pGI":0a+K.rkFI`L7^ۮǩ/CY+x;s1yBWf^BpIOjFrFbU=qdQjIiQFqIQP$iU˥?YQV(Tʕ)B9k'aOlɺekMyU&[rA-t-9[Y%-2&e5YL|9'UҚ̮_PPRdXRZg5J,O*HL$z'&a}]nڼYs*PgfNd)ɩXn|ܸ wvajxgrf^rNiJMrIeA^FQ&5W ܴtxUo0~篸Bq[[6݀n/"7:N[HRƶHQ|}g-B1ozq;On=M߷ڄ /AqwLg5L i1Ce9aV $̍PQF 8?f 8٫rG1)6i(K#~([p! R'BJLF(B$e y '\$1 JN TZ3( n53ԇy'm\#6Pq`GwU r{]pl|{Эǒ㼂| NBq@,pFͻDdCbn7bv;-țhۚ2K85,ADyR%R$PtBpU0&&~tU.@J 5%tKrTcR_%;Ie~*vnd)o}~*Yh&"b|] *6a:{X]%3o)jvҩz!cL7MKþ<cXL>K⊙`P('ZMy6=郵D>I 搯{Z)rJf Kx;wBkH_|`k!rJjZf^\7'3>511?(Xhc-F"-⒢̼t <|\/y@Tgi$(@S3:u]Rs2su-6̼:>@#xȿoBc3S\RK+K25@B1-g]Yxȿ3Sfd^c "UbH,@j3#&4xo_F>.}̼"<]L %xXmsH,)$؀_]V18`CxS9gR: 9.4B޹l#M?2== &ʥDK`ҁ?f~`~.,nq`- Z󩽉@[;NpW:fIAH$ZM /MBI84!C܉H,#LvY\.}<+ HȕV9LB^B6O%dllq&ޢ#d X=Y٦O9eȏr̛(4%Dəg*:=37ٻKο¨'@~BzlsA]yrR<q^u 7l_d4rOqiVU C=v/nI6Iߋ;(lRӉbC2c],akYw~i`+?1ɐ&:ջݶ#udéK.+d~8ћ&(x%lXMfTeMuSw璽["΂)ѹX'N.7vD|@79IJSwf N@-'fCjjd N? _ilU/Eoڞ𐄾=cM\%؎lE$FxwF0[. dL nhSx0{ŝBQ>Lm ǣf (r<ٗt&4u %MKY`jkͰd2'R&2qbJj*(RyCQ穝jvhěE@Oe JEtFR¯F(2ĝ)FW-* tk0=9\$)#1-h 0HiL"Nl9E<'!TI (3!:`h%Ts()yLx &e|1K|`Omغ.ȐR.qI*P <' =  ˿mo$Drˍ3؂K`voe8 OX6 2́{tyJS|Y4*2i@eH-G%?@JɒTw s$9'Ea G0ؒ W8d d4 RNg!F1qca䖿D@鉾p}+݁ CaLl[ vOe- Dj.*ɉ)c&6rS^WKHφK&(:r&N]P[c(\-IZ/^^ iQ.H ca  ,7zH b %1;ӤBk| 5ژdXK0XFΪ*$lWAH ʈ+k Ȧvƾ[i.Xp‚ˌmQuVI ގJj7x;.nzN3mIr4zFj i^lrv9{5@vMk(!TP]n̊ohUvEYn [حӄqxrSc?+E M/n`/R򓮬L_~ f(\`|FDg!.7{[u$}mZ>cxֽ0L$dXV?Sy(J>gOTgp]օIs7I<_g*$yN@EP"'B^ Fb*ziF2]L(/n:]7_Q8k1+Wp# r `X4댸W'X?ɑ}fkЮsnk1ʝ׈]O~JDEvs\/wWE"/pNH0-,{~2]qjd4_juhw׺η+Jק7 * ^՞2W/̝) A\wxcQ0M%J7[+ඪl;:z/ Nx{jh|<D LJD;:o`aWҙͯ 7aT*.)J.HMLѵMLLQ*-.I,RPPҴ!Q(3$ .9#4WGI,?`3+fw 9F/*tx[kh5gnjnrAGjb]YjQqf~BfMAI lHx[kh0fVAw Mx[mhrf^rNiJ[fNjpeqIj^FW,7Drt4J3RSr5&kcNZHrq-1vTd/W=2a L^S,2;orQ]TTxTn@={bH rFBTQSaړKYŬw{gvKh#a!ϼyfɗBfEs2{຿`.IJ_;{%ŘnkyȫY)lVpumru@U]1:@O#وu>#j\>}_\4\nz{~o-_^zWjCO/_6My/^ߖoEoq|ys)qﲝ͋\^?/;}7xv~a//=gv|5_؛_K?a˰S 7om?>>.&~cǯĶWCOOl>n[?c<y;c><}g䁍'_\~/.~O^~O/ry_=y)\GsO?~vy۞=!'/s'~=o>ҎxO=G\W>8?l~?N|y_>=?>5-6~۵_?}\~g?<o?m'?Igg܎=zrvm?uϮy糫^|Gۨ=|zểe^ɜzy/x=' ]]__~g?KovW :=Ϸ=\jaoM>` w1O?{bo'pW|/򗗏p޾?6~|.u }cY敕7]^aUȯ7߾o߾|cWBǜqSO{.~'sysx~XHYk/lUץmՋ%x~O]䞿|s?,3幂C fC{7uQ7on;] //vzVOj}P_z8n%ڂhg:ݫs~7VE;38G^Bo!wwoPѷwoI?pL@=3/ܼ[:g_w~ s;f\lNu|wWB_8]j.%gm;_ziLg杯׬Wk%ϭMׯn9#}Û˷͙ky-~Uw>z޶2)>'a?<z?W~g}3=s1[~}~u!m]j?*̜zb'm͇=j+Uw:}O\]Ry7΋oo^vyŝ3Bnryaf[5v}d!\gmcs{4yWoo.~ks5;NbWo_3T_޼}~{6Ȟ1pA~>~oBvf[<C Kqq.{ KKu|HՇec>~xèq8\{)=GmW>#i1k΅Z>LI%\R>͹/l_cٟ>/!Rch9nDznJ7|g/K?~%}؏ O#h?d;g/GyqZjͥcq QţZ/A苷߫ K9PbsVWץeq բB} gG#Σa+[w1η/}{_۾k ^P}~Tގ|[]YkYKpk~?CK3mx웝'omC;6#˜Vs޻Aj/mVBvf!t} *cH>8c,cXZp ~/9l>+ZnN-ҖVG=l%֜F?mW-%%Ĵ!+nb}}l:/XUG,5.Wvi,Vm&ֶY7Z;D4dl_cT+v.4y~HW>zs'wXy׾M~Qϭfܭ ~K:P;T|=u2ڑwfYRd뇅EE8c!IVSK-lM#-^ca=5,ˮ9a[ySwK{TJ[0>F_K-Գe &aIk=k}gj?\itOk9n5/^t4Ţ-aj<&*Xe# b ^\Yz skA[gi=aK}B !ڢVJW5map11|xdTi[z+Z׎SU}jZvH642MM9|=#o ƯXC;lȶDm#l \M55òm{ұ(vr9~iǑYkMCoȑVZDS9Eabyc͖c,KV*fxXruVuwKcn[R0 ^5vf=^z՗~{j-+tllֶXn$*)5Yڰr)xjVXX->K1c{ÆDsrXmmQ?˫R@ >D,D0hOܶ,3gg)لmBլ';|]]ANegTzlݖYۺm=;r ܰ[ k߂TebgݸF뉸.VzZqBAk%Ch[mМu59Xn㱞Z^բBeՊ?[4?j,'g=V{=nd/ukh-]Vc.S_Y[:׹l,o-X+A++%Վ;Q\ê} ֡[ je-#m!^qy%lFD뎮[wxkRϰ m6bmg[޷wW FKѲVk/[cŗ濕ow^mTWUVZqcT-)`Ky`pq6:m]Lg4o~%8 8,AEWmؗ}mYKcjVy-ܒm7xΧپ:XM{+:%9g+@HԘ['n^7Xs uu@϶Nږ]n%Ce>>l~Y9iڱg]?GD'R'QO':ΰIxՑN23:*pqsdtTNt}V*NcD:܍IL'I'AeItNw:U 'AVt$N: *N tYIfuF'aF'gtͮF'Q$*O'QItN'A t#IB'++\]uhta`_$:A' DqIXIN~C;W$h<d$:D'yy:>+ItH'tA'јG: Wd:ƼIfuF'Q(t}IԎNxtJ'QDc$ǃNr O:r̠jN9X$jh~:bIG:~I'NtVtyO:^tIfuO'g :qI=tN'Q_:jNjr,dVtIW+D$%V:!I0NtL'{: rI̫t3h:g2DǮtNܗ$N9;$DIt G'qU$QqI : x8:GhDtJ'Q,v:q2}I4oDIԎNu0I3;DS$jA'ty(3DIxDS$:FhF'12D$N',t}(_u:c 6:7ItlG':$:$N: bw(v7:ItH'AݾID$z`?IY+D}$N'A\y:|hn&:ΩI0N$:A'Q>^$N$zI~ltK'tA'Q\tԉN8t嘅Nt(IhlW:$N|DcIWN$KN$jF'A_U:A'јg:Q$:ηItNv': N'Q3DI4~N$jG؎NY$;tW7:IpN|IJ'NcD:ڱIWNv8: jh>:ITE: 򮧓NtF'A\mth؅NI~ZI(ȵ̪N2wBtI*0DjtE؝NlP$3CIdF+W<$N'QFteNUfUN23 df": wt͖D'QD:)Ip#IWNtIxENtHG': -N2C:ܭINc:ɬ,$jJ'ڳIqdx$N6$F'YNctt2I4?vB*t@+dVtN'JIΆNqtI0?d$W;Dq$X- Dmwt;IJ'AeI4NtI0D$Nt 8dV[tYaIv/p d$N$F'Qx:򕧓(I3 D}$jw tYII+DyI0N2+S:ڱIF':If%K'8-t;W#$+D$j_:|+d $$D'1 DX$D'Q_ :Z(_tN8Y$B'Q$ȻN8$k;D#IP':>G|~ItNNحtA'Q::b!IW;Dq$N8\$L'Q\:B'ј: $:L'Qt㠓`~d:NntĮh DspN=$L'QLW:^?$BK'Q8:bIN'xt̓NntI0DItL'9y: 3ltJ'Q^tS`U$ DX$Nc :N'Q,tAO'Gth-$J'Atoh6:*IxD;$L'ѼtA'QN tBoJ':AG'Q=#Ntn( Ht(~6:0IP:$7N\R$؟:IԇD$kNMtI(Fw7I:1$H'.I4Nq$D'I3D}$J'ch DHtcIt͵Nt _-tI4D| otJ'Q_5:F']to(D}$?$lM'W0$NY7$X$O'DtDFV:Ɍ :jtL$N'Ѩ :MIpuINc7:tVtYIYN9: A'QF$J'O'}=N2wtTG'ٜN$H':I"tN'Qj ;otOhdVatՠ N2+V:bIP:bw`P*$H'YNXt dVntYI: bG'ϬtB'W :\$,G'Q_: nDG:ɬp$N=$jA'Q,: 5N2wttyNqtJ>D$7N9$O'Q4:ɼR@'Qf: ֨F';M:0It O'l:INst7M'Q:܍ItNNX$N'\[$N]$Z'DtIP'.tc|=DP$ȻNy{IԎNqt^U̝ D$Nv4:ܹInN>,tW DtBh<$WN|#J{;WDsjh<:j#:㠓̝4DntWNHt嫅N2wt@'1*D/t6: ՊNIt@'QLt NcT:ƩIN«tU:DKt1D᠓(F:$;D It O'Qt5G'D:I4N G;DsIWNv:F'1Dt+O'Qn(tNMt^6:$H'ANtWhl Df`$Zsv:^_$N1$ÕN\$Nro8ΫI4NIx'DcX$,G': ֏J'QD$J'ᝒth<*D$N)t#IԎA'tNvt:bd`=Dc$ZS=DtUJ'|$@'Q:: ֨N1<$:߃N tq"DIY+D{: nO$;ItNtS D$z}ItVÿGItdD+YDNt}t;'$d^A(: L'd$;D+A'gU:pઊՏNv :fF'A_%:*IfL';eN2~:IWN9$ʤ̫tdJ' DtId:$IfE' c$:߃N>tIUNCztUN+IC'gmt3NJIb :IԇN N t{v: `*N2+::I0N$kNqJtDq$7Nr#`G7$߅N2wtA'A;:Dc$CO'W $ZG'Q P$}+qIfJ'6:}IWN>It}V+W:$7Ncd: +(tIfL'I4v:AIquI43DQ$1NItN2 ItN W$ Dkjh~: Bh<D^$N«*t(ɇ䃓$jJ'v:/IG'Q8:N'Q,d: 懧hN:I 5F'gy:qI4~N1$jA'8mtyJsh>/tI4o<}IN :bwh tB'QL': rN'Q_u:(W: `N$ji:vh>oty`g:jNIpH'Q;:^tӠP$:NI4 2tI ]py+DIx5D1$:vؑNkKNܰI?N$L'd:wI4?^D$H'~ItUh*D$X?6:}(~D$DsI' D.t䫅NIWNJtN'QtIB'Antb(V:qI 'Q;2Dq$:J'i%~_oNtEe t\(dptTzNHtW6:Ɍd:FIfM'Av^$sէN$EN~t2NrUIxŃN2w)tYYIoN™J'Q:N2W>: ڱI.N>$jF' 0$\U5p=$8N=$s'D' +ՄNyS$ݍNc4:ưITq!WJ'AZ$2O6:ڷIæw:!IWNՒN2F:rF'Q\%: B';l:ɬ$sL'} N$ڢ}N/D$ǃNX$|:ܕI4N8 tNtL'89: h<:ɬ$j ItD'1Dc^$]G'Qotł(8: *INtU _:|hV:bzN0:ODhtaH'tBoW: nh D}$G't{(t[NxwtJ'Q,tA'QD^$@'AݾI?NX$@'AF:c(D1rIPSg:ƶIG'Q tJ'Q Dc$J'A\9:d(~"D}$؟W:b(V:懣\:։L'QtA'AI4NyIԎF'MthDINXtyh"䧕$UNtNt*I N'LMtYI}N2wtVzt]#dt㠓nteL'gE:ID:UIN2h: fJ'Q_tUHtIfUC'vtޟD' DǨte@'A5$R;D$jǠ`<dt$D'tuG'1:ٹIjB'Q!YIpOA,L'%dVtN':qIz :ꠓ N>$%:1$s奓6: `ՒNvtIx+D1I4#DQ$إt:rF'$Z:IWN|I4NIDt{I0?:恧N$N]$:v5:b7In:dIӉNvW: ӥgv:'I4?<s0ItNctA'A:vhެtyP$qNc,tL'.tN'N><$H'Ѽ]$NHtQN1/tN'X$DyIWDINc:|h<: ֏J'D:dI4N+G(7:$B'A\-to(gd:Sp8^$ʕ D.t DIԾNy^$Nit(F:Ds-I NXwtNϪtSosphmtϠo7: L'\tB'Q;w+I4N=$ەN»J$:htU tF'Q_e:*I D$NtV%B'љD:e: %(D$]NgI$H'9d$|NQtE(b<ϒINN2wKB'QnHt[(;ϒIt^+d$W7ϒI8:0I>O'$tU(DI(ct(FD$|Nv$tGY:I:ƣI, D}5$L';o: IWN~_$A'$tF'Q9$ۃNgI$H'~كS%a%qK'|$n>X8yqjPҬ~I֓M`{d%mZkڊ5*[~MV\.>/Ǽ y>Oj tjf{cqYۼnwX,ϓ,~[X-}:'I~/WaSbW+Ǻy[濔w>O2Z^ͫ[߻e |$|,GՉfCK;/L+L$}Ƕ| e*VumlfIlXQ7Wϓ^W[AZ֥&P˓6bo'Yi{1$u-vnfWVWdFu>O+m-q>O2,L >ϓ$k6 m@U1|ĺ6Ye{^bϊ`_ݿz>OǹA*oD:'IV[*eJ V6~e^a_=|/[Z;"ydٟc0\ϓNKM;'{S۱[wd}q2͉m$ 5IsْK8byY=k-<-e*N,ɤn6w$V-aX~[]mft-m=c)I$޶(6=K~SMaPQvoJ⠺n'y|dT[-kw>OJoӰ_ʋm;3OJIT$fy[aٔyKUgkWBas#pWkZab%Ι5-FVTgK \uvW:l1=տP|٭OzM0[Gժ>j[b_֌->2f+|r>Ob{zrK@՗jU[ڞϓyޭUWۙWI #$=.U[uo$9@Wj҇e_}c^Im,RsK_clԆyQweޕr>Obyf@ oU PUfnw+lXy#a[5WT}Nsr%̫tMJ)[Qq{>lJƫ;jyw~{Ӭ{zN6- *͝7jo;hɟKZ1.|N~>Xe1m~<=X{|ğ3v~}<+mﲍ'GgKH% oSݕUHen?MP-މt>Ob[dKG~^:'|Y]m㰭 |,<mmydhٺͻIVK ׺:9'iZ۲ԆyJ'iBc?/sV'Zvߖͨ+5~/Ew^]BnuK4NaRv>Obޖa^<' \lBvWbӵGk5)&ہoS`Iq^Ob)es&m%R핚$wzGdڼZjc_V}^P݊Ŧ i~c:bzN'y5:I6: rA':>IN«t}I NXt;D;$J'9%: bI?Nv:1$:A'Q;:D1I0N1ltNvx: Q$;D$[G'I4D{IԷN=Nw:>kuO'AtNmtލI'X$ÝN:IxD$[O'8u: *INDkJ'i%?$#NQtY$N{$ZdF8d $:kIfQ+IN9$N23:$jF'Qe: |N1tRIx D}IcDtVtI4?D$X#d$B': hdVt^$8F̫tӣZI;D}$V: N)tʃNc{: jDJ'Q5: ƣINN$꧓ 4:>I4NN?$:~&ItJ'Qz: ڑ$}N~$NIt Dpt?I t(ȵ(:WD#I4NNv: c(;DItNN$N\$jJ':$N)t㠓ܑc8A'v:ID'(IL'gt`~x:$:hn: +D$Nxtc(_mtIzNvtUNBqh>:ITE: 򮧓NtF'A\mth؅NI~ZI(ɻٚN23dVatt(:\M$sE(2<~F'W0$N'Q: "cItA'$WN+tyeNϪtI}N([$jǠA'A_%:̜t#IA' $j̊N2FIWN2b:I4o +2D1$j_:UX,L'QotIx5N2I:dItJ'=thl\]$"dft:VD';l: `NIC'Ij :I: #D$ꫝNʂN$iO'Q;V: ƼIDsI4NNDq$7Nvlt\ityՁN2~:ؠNMtjNrf8jB'Qz:IXyINmt D}$H'W: t#I4oDtUNW:ɬX$F'<$W jquI:ƣIcc| D1$:N{$Dkjh~: h<d^٠(6: =DI}t{:ڱItNKt^ODsm6I4 D$WW#$6:>IԎN t̏A'Q:ih;w7u:B'ѱ DIW+DĠ(v:cn?$@'x,tt tU|:p.F:$꫍Nvx: %N$Dc$N$:F(/tޅB'Q;:^tӠ DI4W:cZ(F#D$jB'k+t?I:Ɍ2:fꠓ; dVt9$NF'ـNtIt $J'1x:*IjB'Ѫ$XedVHtIU : v:7$Ym(~2Dc$CO'A_ :\$3I NB](vW:]<B'Q_E:$H' $sN'Dc$*O';:r{NB'Q::>I8 n(:ɬ$J'.N=$jA'Q,: `,DI4NNg$:h$:`dF$z}o3W$W!dVgtIЎD'Qw:=I.N$@'QG:)I+D$k+DI+DĠN2wtԉ D$:_O'Q,T: nhtch2A'1tIԷN'$+D}IT'v: U;Dc$N'A\%:IhM[$?$tBN2watv,E'Q9:oIE:ɼ@'QI'Q$qIqDIIN`ʛN2Wd:VN', t2INN$E'Q,tN'NBϤ(N dt9$%:1IE'Q7: F :IԾL'Qf: VD'W0$swO'Qd: {G'\$:hta]A'Q;~_oh< u{|=Ds0I4N$A'QLg:p&Dq$N1tDI>O'12c(f:vI $J'Q6:rb v=Dy(#Dq$bN'QF:ɼ@'Q$+Dc$ʕN㠓h 7:|(: 3th~tyP$:FN1tĮ7:bIcrL'Q;:ƶIWN|$N9X$NptA'Q4:$L'tBoW: N1/tah<cIN|IoNvT:I4N+DIDmt{huN'Qt:c($NtA'AM$B'Q;Dy7I*Dm/tyo+q$ꓕNtm`^$݃Nx[$N뉑Nu"I'D}{IP.tyh,tIthDINXtyh"䧕$ht6:p̪Njr+t̂z d:̶tItlO'I}N2wt9$Nt{(2~YO'_:baI;d$Nc: d$N]#dVatYInO'_$r}N#I':\5$B'U1INmt`EteN2IԷN+PtIYN2: W}:\$^Dss`tN'z:I/tyeNct;I03dr$꫃Nxt$jN'tYI03D$(ltD$:v؁N«uty D}$GIU:ɬ$Nrs8`#D$?N2wtI΂N8$WNrUeI4NNy^$N'|nt:m(:DtQN5IԎD'8E: w[tN'ntz Dq$D'Qt$N'Q,d:pV:GdDIt{hlw:I0NXtto: 1$D'ј/tID5$zIt@':OhlDktV:Mv: Q$A'8e:M:rN'Q;tIp}7IWN~$L'mt{(*Dw: *I4;D}R$B':INy$Ny~ItH'Q;6:IWNx_$꓍N$?$>KB'U.dDg$|N2wtE̕NgI$‘N2W:t;ϒIfEG'8:ɬ $R@'Q_U:I : %jNUID'$tInNxt>KB'/d$NgI$ꓝN2w/tY:1IԾL'Qf: %:A';=: %h.t͛B'Qnt>KB';f:2rU߮tL$s\UBpoY:}hD}U$|Nmt咍NJt>KB'Qw:YIWNgI$sgC'Q_tYI, D$ǃN23: %(v3Dc$s'D'$thnf:Iæ].DqIWϒIWN>,tyN«ty=DIXyI4N>$jB'$tF'Q;V:)I, Dq$k D4$|N2wt[(;ϒIt^+DtňY:IԇNy:ɇ(D$ONgI$D1$F'$tG%h< ϒItN9$sgJ'$tՠ(3DqI4Dq$N1tD'ymtItL'$tL':baY:ưIԇN$|NIӑN8t>KB'QF:$jY:J'ј':reY:ph7:Y:I4?:ƼI, DHt#I4NgI$NXtG'"thl+Dq$wl'K$Z9Γh<ַ)ΓwIpD뻍$'I.8O%y=wI43'8O%y?I4ΓhrqK$I^-pD+'y_$*KW }<[v+wͮ?kٓf2+ I8Xv=[F,|]ze3%a8Q-~J鄞 - ɟt:4P'6J^f;9es42C"ַی-t'ۏJ/ߗR0ҵ3FsS37ʪ{(hTut@U:/ _QU=YUʪ3tT tUGVe uUp]Ua BAަ#oёt}:ySGDA١lQ(t:>eۇۃKG١lQ(t:>eeeKG١lQ(t:~~>eKG١lQ(t>:>eKG١lQ(}(=(t:>eKG١lQQ.b26 mUhBG:U.*T }U@0TQ3q,^1PzAG4qMtFS0ҔLG4E.MtdMS8˧RB1H%aKxm׺fXv|zVгQӷG n~Ig[lQ/y4a#dh%Owٌ$U36-<ta߫e^e:!r{: N*o߽ruKEoє&|\23$Pg=FŧyUkMvzUGz]E[mO1'ucP(~tЂwHT[.4E@{!t<|j)PlayҌ0QwF21madY8ۊPaCXGUk=ԲgR-wDzt6mbuӧB+rleCU6t^hk,}`qmڅov]BݵV4nQRlw5BP < _78Ÿr䧆9KkX|@E|Q 7qr8㱹ڣSq ˈdjBX~ Z"VU7g0IU6 baP\?AV(_,Ý)`fi4[trE8_ ߧټhg_ gæ5GGG,ʁH۵a\]t[D\NyqFlsu5Jj=189Fl kޭ)/!j )+}hkb4a?3k25[qƦkIs,A 60+LmMmvK /x{AaI/(gO1X]A #OQ{ %'DXQ&ġĨV[P}P-EABנ1lQh#ʸ߻m/*'Q7@ѬNSƓ-M2lGF4,"٢kqE/Ǻ-tjs3RMhcxM@9$j1WV0WAmwΕuo˙Y%yaԖ[p R2hz_/<c?ӰЉ)Tw}a')qoai:Pí'na-ۅ2pc4i:ŏmt݅3laг̓tg/0 h}NJNeV]VYasvq&N/̰Exj@)|#'&nb*:5Cm#FfW!{Gcvf:"W}Gh#~U: OXG(.}ٺL(w]|alcЃBYj-l\CNheI2`;r 6}㟋F  w7Cq<{x:%7Uē|?({2)jusjxeZaH @*\j5kDo)9-(R,dyEoWM?ATSr؛_D-S*vGG0LрVDSkhȣp`~S*8brK11eLڣ0@MM +_xpvը}Fh@l'w0/;FEk-P{2ۻ~ou7{PK֠C7%7hj1,WvZ]C>z jOx#xEyD_rH?P g?)`asw]| 1 C֮ŧ&W3 6n@Ġ{uɪb1vK/XARnp1bڡ ,[K|^&I2ۏ3 u:#wP<r ޢ/BݪD3x<[;}瀷Y-_C;ꪪ*(.$隒Cjk YѝTG$}R?QT%\xR_6!5-3'xnFbq2e5̼ҔT%\fz^f^^B"9=sԓLn;̸889=x*++)&'d)hTMVd$  .)T56Yvr23g-j@(+)Z[P lRP@NLEuXs]㖓^56$$2(51%85+ gԜT C𛤀bTkDXS0YyFۑC'gUľq ͏8Wp.M$(xRoQŚZXO7܎:<&Lq٭axR?2!5-3'xrf^rNiJX(3=/3/]/C !qjg5'GbqgIjBQjIiQ^B~Bqirrjq1PMfLdEvɬL"j "M[[M*iՙl''31srM^ tDBIB~AjI 1yJ:!@\ +TYu9G+8XMCj-xR6jOB{Bx$'&z. <. Rx[NmCobIrFjO~b{D3 6,dVRx;rQy &3F j&m` ^xvJm Fِ܂" ];⌐ʂͿ9Y@|fmv-Lx;6WeC!DAQf^IRBjqlLGbq̓r\:ى7zǹn\閙XZ\RX &498344rӋ|}]}=\]4588'hhjAR0+dZP\ZP2Y^PH3"DP &џ<{IFF DUxWa~E+.N̼Ēb Ģd0Yi9Vpn5xBx?o0S\X;d1<3XJdQkDTN=62lt|RUFvUY5Xl80`y\mbW7YcW +T2p~B?L$:Cbj bWX2BYci1S9ޯƺCb!`:ϜЇi{K1Z,E&u໲ݣs cubH }ݙ]iV*030YMσ~P3㾹p1\??˰{--fR$GGhe}k3HUh!]:hߡKqH=g$'xպIƈ9{Mه}ߍl&4_W0ئỤ̈̌B"e=DHf)B2i$(֜ߝJ.*ON/"uQo6B.We^CWspjکqx7D!i© t+:NП:y贽#pu`))HLy8299y5r4{fS:CQ8F#u &1\h ;:PdCvPI_TLdeTt-OLIuzq!GIvke.U"sTgBv|#ďg}!!}@5{BxFT|=Q "b ʖeЅPnX̵aSOkS>W)Q~u*0FŪ﹈74>AFmX1]d?mr-ٸ\<At>?""<lEļyA>1>|2;R7m׼A~>5hz4}f~^߈Ņ1j xK"?Kc Z]č0񩵓FJ| 5F(l8{u1V*|!t *)Xc@ k![IVTBT:Á̉k`6/^dMJq.)뤁XޛAT8?؆AulPjtsE ;6O0ɒVe.lUZ>`*eQ32}$QJ(a7H+T!y"Z0)R%"NnM 7|FMch1YHRUG[`*t$`{Z]也Ȼ7n*Ąyuڡ`ya,NdzOy~Pwڮ[ b}skSy[Lj{xKvN[ظPa%O>T4бH"p޾}=?:<$_u ߾;fHfMi!@3Α+Ёf+cŇ-W%͎,eL01aס57@oB4kv$x F)l[ȚjeFD},'s kj;DHiiF8v,ed}Nn7{_ Ehwwx~!?\T񬔮t@:~'w]/ka{E^}+E.Agw삱8~q()pK)WIm"} ۝B?/g*Fc3ӭ#^4̿^Xim iP#Y3wv))/fYt_R9}~riBQfzd7@(G1ӕ1n'* JeOc>o!Bv"#5LE7<@UNv\`}秒lu#hvZ$ u Fk*5F{(/e?BG Vx *x`Z7G o4!5:c5J p͐!F-!9լ})b6eUUAaE|y;==룪j%`B$zT&+#u,֊QC~Ӯ Og *,hݬZ**4v}b{dS<'x{Ǹqĝ:8SR2ӸcVxVmOF ,z_H Qr@ JD2:Yα /Ez}Nr)<̲iIh$USR--J:)\oN'Q_ͫ9+i|z|Mv^(c?/.T]>(x+No2S+ѴXM5X&k#A>T v!!U.5s˕}- .8Q( NX'̾@8\%v!2S&/ө > ] jcy^KFZ}VfYqp0̒MneGZ-q5 8>"H4rŢ-דc2C:?8 m3O31Ms9"+yV-eu*{R C&B;Bn BG$jç 徔ΤbF&:@|p%ҪʹoʛJRt4ނFMG6>]-vԛХ O%F=wC=|BY@op@OT]&nMX~ /1>C];i~I(y ߔʆo܈'`C(EpJk7E'4x(>M|,F& XO=!x&W_93/94%UA"hF7m)Dx&M_93/94%UA"h#̖ʙi)i !!A&oe!9y>$ɳTRKsJl}]urR󬹸04escdSNKL!YÂyr (5xmRAkAؤݩi[dn&Z]6bVkmm,$;솙TMyA/'k:S#1}Gi ^k[5T{q,WqAl"91N~|wqFfLɏd&෕ 5 ԰eˑ ,(&1񋦡^1**K ع'Vkh7z}/K@:G*:A)R/FO Vŕp H9+>:});I؋LnB0wjT_"cMbhM"lB#Mx}QAKADKuLdWS  &抺2,S(Z=k^k8Y 'ESeٱ7frDnN?APy¯}{#Ux}QAKADKuLdWS  &쓲Եn- ~B3V^|{o}w}) 6YD"BPNhy=%v-U 3tE`TUF@쾚C#R|3DZ4$99WJ%Uw(NVӜӹIE, 7M \R lx.FFM㢊hG66Z_H+kY1+#kݾ10'\ؘI`Z Qઆ*` E+:ӫ*U (bg}$pXFżEPk:J[rU]*.svhbaA` N{e:Qu cP>[ ;TWզ^{evU4o6i#C?Ѡ̚= z!k|hܚ4=s6s}l NO) Ւbҳ鎇<ʂ/Q' +c~qQ~UL$śqV0й\yg¬ #9dN43cG!i54>P c87 s"-ruun8;@vklJ֚@ ?Mt:YƜ|֯VKSղ@̪"LV\AKBKa/,G] $tfL0/zOu p:7:hwya,V9Xы*F JVn9Ғ@^"&|CzH/b.0%Ɠ~y(s?wIe_۩S̈́]?Jc؇"۳[{a@'; O@|kā+!JueЖ؃`Q>ҟpl{U/6 Zʖ*r"B !QCnQD9OǨ@Y&Sei11gr60O]ϩ™-5+V;lMx[$2_dCRLqx/E93D#:713O/9Vkb{|pgPFtNfRhqjZiA)zA@!>> c<\]\C\&1$]|\5*KJttuSrRuB RH(IKIMQH@I% ťE%: iũ`͓ײ+L~Ô$TU"Y=1$$(VsNg&..bP/wx/Y93D#:713O/9Vkb{|pgPFtNfRhqjZiA)zA@!>> c<\]\C\&1Ӗ S:hx/rL` #S^dvFL7`6gZDux{u4AGx wW7OWœ26֧&gs %edXQXTnF+3M$DAI%19>,8>-3'5>?-8$>)XIVAD$#5jObQ[*HeBj^bRNjWjNq*J ~!pœ_2jeCԺ)PXRRTZW`7d2%kx;&pY93D#:713O/9V+5(Vib{|pgPFtNfRhqjZiA)zA@CC}|@z:8+LVg|1Î 9 j|x;q}8P;x\UWV`:l o5\[_UDu>HK100644 pty.h, bT0C 3Lsٶ @b &i 'x/?Xg,4Pb($S Bkn 1tAڇ100644 GeneralFunctions.hNj~Zt G ٳ,#yUPiPhmy0m풃M'_7qY0beX?3j0!Q_k{# FE2r"˃%U/ѿǺ(4Ŧz@L w wmk\vÌ"s}-rr<(QkT)sik32sRÄ_/Itr;UQRRtZǔ[Eh:Xt;k KyRWd0]心Tkf^j PʼnK~~NZj"==Uw2|Ue{7sč'4cs~ɓq>m޳'^pDx5<4. ,Odo/a2 NFfs_ dݘvw|G7r4 w7td?a we' |8 ٓ[xEjLXݏ[ k+Ќ:ˆm[x! ڳfŰxx#Q MN+xxt͵-CHR\cCQqT.1̛P;zLz$2 `ggi;?J@_ó 6[>jG8԰6;歓 z;>hdH0L_2LW :? tW8x;*uTjCȬy~W1-m|'$Y])> Մ -xE`B›/Ad5okto0100644 GeneralFunctions.hiAs+K RD0 :QʖC0%MRzP*|#`| $NRŪE+!ߠꨬ-\gR6D{ pcnTv>y100644 file.hGGbJo66'KHTa 6L^i %;7&m5QZ%gv&fee1J2ph󷜔c~)ϟ9O.b^fuך3yrVfe˟|ҢjĢ >ŻNީ.Prԛ˲ lGY%+#ZQ}!fESY3DR6}U[O[10YDҕjSSΫ_M`eH"GŷO ͓sov׿7q 0kI ǯ:|kuh~biIЕcFC&2'}re^WuekgB]©fjlq~rvj ʩ1\'u3 +,]WSxG߰Zl%?#KD6exeDVޒ̼tU;S4)7BՔ$M_XN~uSF lx-]rC:湜!.xH[;x8'j?Ons100644 Makefile.inW1#xrpf1s; CG.nx.Bj=2I]j3իO3?P8}br0c}8uB'1)O1ġRLϾ\r@rC3ԼԢҼb LǮ|؛7Hxri1qg>)Nwߞ7O.b^f$aI񙂑d^/ǦXEũA> s/\$~>MXEjw%ôe勽*$IMRYZlU[]Y/xbn )n[n抢X3KRK}MWjCǍE[@ ())p^~M+ngM>n"v+C+ 4sW`z7Ha]z|+nRC1f õyw>\{_Ċ;AmO,-:9bm߶Th756 58cwOf\8iN2X( <9ei\;IFe-wrekO[Z:6"|74qς)KZܴ6xމ~)džɫ#2R<27 Z (3/h]vEP:kk JjJA:kU }K_ IVpO69Ѵ:nxT]0|_UtTKmN*UUd{Xy:# 3Y5| Abr@9f d2*CgT%MLZxE_XpqC%H+Y Y[z%Q>ף$M!z.@Ay<Ʊ?CVX$`Bi,M<5vT7d7Xc >`r[&U0 h/1ӕGM%SP3BcX2ϩ<.ظbG7H.%G68kݭ-.iCr˸$Uv:?J C%le"0y;pf67 պxG]I%N$Ubc)$jyY"#O >*}%)<έ>f/cc2zvѼ~}~ Nyn`eZ*_hZ/_)VB+bDf/&u.27A/( Z$AZIEvA(_nb-_϶:DoI.j. x*Ն, nM ;6T=XO/C.__.}m7І[lCxŵsBȹ2ΌY<* &oe* /(lJ w#ۉwEW?m=h4ݝɎv"~yn='Jx &OfWU팬)CASߍ*C3< #/~Uwf՘e2T^N;ANCYL_ *cxk}L/>Ug3Cf6Ce%3p֖_lv &dj6[%'4hY/m:כtZ+{g4Ϙ`Ư'71)'?'gBl8TknbfKOT& k1q忓Yg%xŵsBȹ2ΌY<* &oe* /(lJ w#ۉwEf/XR 9O=7Ovdȳuf9Q[ 7y2}zhgdMI7* nW($e0YN+ky(no%175KL/-Jew惜YrށUb_|}ϖgl*LI-Kf8.m{3r,O25Ϙ_عQrZVn#py)@e~w@9Of!|rs_Eo֖] 5^mZ՚Uϗ5qZ#j`ldk+xŵsBȹ2ΌY<* &oe* /(lJ w#ۉwEf/XR 9O=7OvdPuf¦Ŋ_<Ѿ^W=3wM~7 LLss2 'ϕUg3Cf6Ce%34=9dZWV!})xٙ&dj61CsqS1Fk+zRn]tesU_C&3/-/(kH1۴5713h/kݓTFZw6.,z#1x< V9F蹕E_;>j5c\*Ѫo1\}x5k.c~3(~ò֧e Y\" LL3R2Wm~mb;SX^ 9N'Nk/kj%sk,*s&MckJ3ݰ‡҂f?$y@Ga=[<^P3+KJ8=IUD >n߶ۤVOx! =ܑtjDe؟_QQxr >;19nθ1F[cN\Ĥ~Y?KorT]Q/q-f{\ 2/y60&9플mAOad100644 main.c|/lBz;-k= x; V+c%a' ,2~ |% Yߘ`[mfN1QQM Jx[ĹsJFG6qs؆-O. X*됷r^ƧLV -x[ĹsB嚣noyskVvoJfLT;5Ѽlj;u>px9340075UHKL/-Jec~mЅ2U e1wKKt.ڬǔ(Rin^Z7jt{!r*SF'x c\*Ѫo x l0u`[@˴"<8x -gc]A\ζFA>GC1f1fa?8cI5Ӕ%s p X100644 common.hM!^8Tu y%NnP 76m]œ6Mv$_ 7100644 find.hSؚ[@@̬%:,gPH<gnL"}Ju}.蠺T߉ ǓgZFq^ x8 }:/T|peVU}>?s 7eKDyY".{Gx] #100644 INSTALLBQw<ƨH#|$w"a \/9 =ol M]e: L!). kx? -9qW'N0 ^%zA>yjisyw5k"EZ@7:;] ~yyO77!["100644 common.hx"~P : C ~y7|wt˪hXn21ήΖٹ>K_>`&ğքm ]CDD W\Nx5kBXlӦ E2<h呸D71;5-3'U/3s~V#uj]̼&,ו 2Q_&ݾU".09p3Os[Mh'eqX|1ˆ!sddIW >$N}frxAm擡]wn+v[ uDr~^Zfziرs7zb絕Qb@)Kfr埁D_kLmk8$SYިQwM);zR2&z#Qdϻ^g-SfLKskknjc/TknbfwMػ>M"57919#5䂧k'^o,vu;tNvtd3$&Ob Ʊw?gɰęϧr1ٽ2;2AxVmo8  .6K?.8nסl1؆#%+/t8 eJI-.C@RX\kiN2VrV\,_ "Ph֟^Od9ؗ,ϔ2{ݴqiNn_KQxx^2*:JMssr¾Jmc*k:O/2M^^a&߁IZvq# ~ Vj&7-dzsǸ5v/Fi_&/fJ -9HJU3EG}8 OtjTBeβXbⲖ)ӋȗAUfJUY?.ZPiT_$os`xw# *ӗEq#6XhN= /Jא>wHp뙜Rު7YiѶι%h9_S,OP'xc2r'OXr~$CYoZO/a9=[tZy4[S.?Ծ Ӑ "F1g䢪[6>q1A44ooL{QD)dPV'{0ԏNcasZQ ~-zB R$ɞQk4vғ ľIO^\+" Kn̞^t~]hDGLǂ0j9.ӹTˮ KōC\^Α`#N3_0Lv-3rY@R\hhݢ Ua],Pf ~ 1ƥS{Hȇl00n{L7p3*8aBN/hl0GfDuv]wv eR_MlRBĒBĨ3W!'P7ĚUJջwf`,?{=Az) S $JQڊcA%_xeo@ir( EpAĄTP8jvłTYUYw vfmu ̈;3 \씅[ڟgei/] ]-SEDѤı8<&Y;ٖ Tߊjo-\끹%)!Sa=Dy85 H/)֧'~+O?WUU O# ;;Kexչ.X9W,l+3-/e/b. @s-`d<#زl'[poߕ3 CU͇@E/ øysI^_Z]X񸱱-Q3>պ=%Gyɧx7N0/TrvPr} Lj>ms1IJUBx{&*4k2wDC\}SKB2sSKK4u 'cTSLSPT.)II-(.)T(J-)- {s)>k:9AK*tK2lmC<\|C=\}]},M.NU99kԜT U 5fU(caR9'/e BpL283S|S|K3RC}Ssu!T +Q(./JM5q:`Phg((= Qm9"LE@s4r ) @{2ra))@ Ѵj\Cxx{&UpBdÓ0:d旖hN>Ǩ\R䓚[P\RPZRZ3#R}װu0rNa\1A358HUdcv}!NN@s")%!ɉ@:(h[se(L͸BdLq Џ!٩y: : `@Tkk[sqN(?y/eAМ4 `jBFb1^<\a ũEeE1yJ:PC4';0rqqm[ xk(0FX93/94%U85(9C/nMhr~^qBY~fVqe;sf^dz PZ\Sb:y#ɳXt'cIʄNVe݁*pUS((O"iU؏3W4пCx{C7?w*6nnKKB~@oc]MI#iMI/ۧ-r$~lQ_MO ?<$ij[=Ȥ89+wa$1>%qb^%]$Vl5I?C]OxZol&ͪ{r:6%7ke.Q^[Y]3FIb׭Qb &Nk~{F԰;VaƧmN Iݝ{ݳ.4LFg4Ef<@˻Mǣq9tǗ;n6莻^P~QO^Щ{ɨ!bV m7j&Fcm7'ؔ5}r'Mbr6qz%]W^Ϭ}9jǸz,^<٩?_()YY3ɈÕ?t30Ix›;ŅקԠs8FlLIR1~7%"N*\A! d+5S5j%\WnNFVgp2jEEXuw|:o+{l@~IO+f:R4 `"kP0ּq}8,)>wt!?ADXJK}zXËQefmBq^lDAu5sw>ѠsY+%؂Ú ߓ`,Yndhh,V|ͬL5V7P8\./nƐ/n(b|e;%a}hޚ1P$qԠG/|IDٗL%YHTU3j*g$49&IWFsUin7o˼fmVH= -! : !Lz?sWG-پ98Tp|,feZ.8 &LaO7fg0xWsj@]1Ƞln9ɾxv:te*Fr,mƅXΓ&A\ &HaaL2}-_ j@2\RpYX#r2ՅyJvDƒ|R>:ku17s{$xAlGKLhG!H}'KS4tRQ&y8[" |n~ af:/dˑү&u@Of;`ZGGvo%Ekhj 3"zpe.e`qyT0 /O,a:-_#+lZeE9lS|T亚 QY3p96֤7.3|d-KX)X,ɉ0Ss4쐫VYg<~gɏ=ޑ? p#[`Ec gń(sb9jx0B.dA%4FwJ Z;yVξO@mCw͝Z1^|íMa\`+` , CgѤ "BB)F#+Ɗ+ Kũgйn2X@"iOL&-2<}tB}ɃG[;;ݯ-c'/ʃik3JGy>48v O&8* z]pcCE9zű퀋oHcn&E>p:*rLRuq%vcARpbw,\`v*s(f0nU8ݩr6d .o"AV* F7;c6;@҃Cf,wtwd(_ )\Z~Z*H&8i* AHpq)d|0¤7z{N Ԙf. xy=B*ܛy_7_f= 8LS+UsR86~ XCp~h|BLT+d4?4fiLPS@Q%ZQj@7K@EAxyNY2չH-Q&&ԌjM0KT"`ۃNR[-0XqP4#`'sa) _H/kEӏK?^!:bazAT$ ~pQGq4Pg -Hȓw`u er5[ZX"Y\L'ݰ}7y*}%o ;O^ȁpuj [Bߦ}6֢6,ɠ4$XJKZ;sj3wju^]e)YeikYQKz#G8fIDp(e:u'a3(<#hҝ8U9B~):qd VO*ea϶ XaGNX*Kj0F҃A,vAbt7t@5.r- HI@l~f{A>'J0‹,bPf)E©XgZxNHVX(* IT 71HE"'HT!{Mn'}I#c-]w%Q?r+)CMBpm ZV)_'9=7c_'$G /x\mG)n(W]:T!<w .Z¶tBxIJT,+ bF8*ҩmZq .Ց&T:B|3%;Pf:l2-!¹y/+_TJUd1 O{ ˱ZO-kIR@ۥw e{*^Vox`Qbۀ̠~ +"DJ *` -r+y Ud;Q^cmg &ī!E;#œܨt Ք I_"Ft goSYV*UƓ|bA4dV-St r}LFҚ@I]Ϻ08~Xn a@Y`RݔJՓ!lnHR +q'#>ꗴV,1sd!J]TYĩ yP)ϳuSzN?U_6Uyruydo5]Zm,19$e+IcHUsDK՟pF0o-p?HaR+~͊WeZEJu\:8gg!r[=HN͗S9!i^0;‰w1P)Z~kw"dVis$A MtNT7 px%`v젥UWb+0JN֑3ZTNG'd8d|K^5γ+ArZėYJrKa"Î,_i#%xZH::P1r-pGzĆVjiJ8צcuQa: ^CA7)vvJ|2OIC6vaLnA2`߂q=D%dp(9+ աM>ݩ׮3 t`z[f)jpz j$Fosab3luOi2pu"J@q#|ղì" 05!;Kea ObF"EB$pff=a^@!Zm,vjtqh mƃZVicmʑc{luXaQU!MMV |zh3$ͣqU(ض20S\G-xSsaPiʢ+e5C摢VőTʩq"/&#]P_!@Pi`S7u`"“GpX+ FΥtxe|gO)T?5m/?k~vR\ q4͝φëڴ|{*o?_1ff75}BOCt<c]u0/qpzYuK`*=@i& nK+0NhbfvӵT;\thr?z0̬|Qk쾎mhHpܽ%Xoy$?`7P]J +'Opl }HN "u+m,`g!<ז}$T WЅ)6?սxf_i>|Uo{qrm?y{FlW峽\Оv$ZQD8t҇(!`t<;GcQHGvSk JLkFM4ߦNwP9I`mĶ<ӭ#L {Gc&dQ״JLNЙNTp̢TYsbzijiݝӍCl2dm:Cr&2gA$dVʳ YI&vc17(-FZz+ػ~ h"o]ZvDqb×ez=իJc%Ax n<%=h<9'\bϠfFz<pyr|6;rJg2PQ -jݚD\u6j霑a( *c(V{wCw$vEUD- !, ;c=j `EA"wHAM֨«^ eT坄.pDi#UDR SKpjLG`*ԯ| 2B?Ͱ" ~ qSYQwt;dSK1BGX.*M1%WXPB7(i([RĽ*JMI!w$)M»n%'N}V 4\ G4 B#+3 E#x~Ahow9"+b+?ğg( n'>S<kbkJKSA%ыj/k*OL[56A*=j23_TÒ~ X#nSw*DH:ITƀr v,|eaBsS>=_ {^Hm5z—9{O5A ,6nRʯsJx w1{OOl]u-۝ xm` K='1q(ux];IqA &N?gh͂;-zM#+-0=9^vVWf[)͓O{"+g—p\3I-dw<H#PsFl#ut%;h9fϧQӣBCsS2ŎYںܢkN%BYiU q̙Ovڦ1(3kT`z&Y 6!='ΪVQڬXRB9@p=E05 I&& R$J\vS"=-PQMdD@˛e-8Plc"|uPO>~|_lB\o c J9xF53cT(@P{1-<޺wќs;΁2dCFX%z _#Få"m:Rn=l5z2=ƪ&}{-/C܃-? yXّWA @xp7P#yom)x&>Lf\ aZ&٣C/RKSYu*%\̹WHUmut^T)Q2)~==?!\iYHkFN#hۜȡ,%$>!>G#~XqNEf}FY2ʀ8%~bdM/)SW.:U_dfygdglLe'WQYDLtZs>=ܬk)Kʩ->dîf\N(ѓK9$O/,tgFAK=@u #~rIWB)}{X㫀ݴ-0 ,?Mʾ1~ ذ7鱌Dh:)k)Șϖ{_j?٣ ܀@yf5(D5ܨNg—OrL:fCn" u͊1 Em'݃,jhzqCanB.C!sY<7n[Tnk#3}1X9."K3wik l~e){EsM~k@(NMu+W k%T'a(Ƽ!\^eqg]Q}.0;mc[w;\^F@Ω[).0]8҈f+1_X.c`./sXTfr6E&%N\/bk 4! -nw0' mB#C-ۛ㈡}q9Q3EF1U:H6pw6;C0UAȇPtDt@EHP 8Tٮ:_vKpB]{LH-YzR+,uKP)#\EV 4B=n SЃuF9Ǜ`0PCsEHTF^M 2XHBX'jx^kL]x481Q$WFWq 1l($niO 18Y-19YaɅeBy>*Ϲw_ρR6<)b/1q<)M] O6f4IѺA9OPTa{R$*A![$KDPn'~@·˨5ҋ\uq CH!lOk u1I<*bwR1d&lܟ<v@VY}GUQmomnַv]<Rt E#cN?#BK ±@R-[b^Q/'ɭ|-kh {A_I宩DA%,L/y|pG hz@֑jk,M', ๯RȱRHni`'1"ҡP0 xYF?8l &E`Ebj-TS [rX(pV.*,x`ni˸ 8Gv#{oGܗ@x3I o6D2!6.Èy FNUHzyu-/c>u^| X~Sw n453S 2k)?6'\RTRt\H_˵ ¯1C Ba[CőH=5U=ڧ)@Dlĭ+09^Z?|\w?pt2Bny@f0[=hdetO*!z3QuDdmXJI:>BGیN ,"?h gb()&M-ĝ-<:Iy>%s@H(f5ьo1= pOA£ԼeUv&PqI}g֐ jA%rva[BYTaw!czI)G9BQMH>Auy(lB7B4l C3b-ΊeڃS$-x\C{ uFf֒7+ ?OmBFuBQ_,M R%"G2G ?NE\L"swwr c $-~֠s iOjFJP `g;$!W:^;Tmh0Ol\S`٭#A7ą dWarze!1Z͕{^bGm&{gnS d \\(+.蒐 ^xHRbQVե1lн-v<]^}\hzn ƨw'ίJz^ .R!0">]CaCisscgF 56;K\ (UvZaKaV^X.TfƝ pX8"&h RnkO;q h ǽ 9QVCU򊔔 SR ^+!4h #POd?WVJ֕Ȫ?ĉIncyy;e#ڲ]b%Sܡ -/;Mzۣ.4{maVª&%D/6Cف;p{Ʉg]lg myYg 6[;nlF'lCE"d9_Հ :ꂥ-.:Ik Gr2 r35H8Ys OOx"6D+&AuH68t2=[_Z (X#FJu5E2uuVUC[-=2QFDnUpQKh"hU*C_Qk()eWC~fjojTDEؐ l"DBp˹@[A-,bnOR\~[TޞloWF{E܄8Ce܀7VO"C6>ìbTpZ?@AF6K5" 9u%ruL,Y)&uDU۴Y#ಹ.Y1U~kB3pǩ}IY[5\KЯ +(dhbH}f˙N\_uӔ A ƃBm0tEH S Oxk;Sb7@f ^&{&fb7)mA_Q7YA3iy a4!=B=+3zWSjW Dnϕ!%BuRƔsG@dd% 7d%^qCI$'LHYkwx臧cXǭ!<A?8H%9OޮD*`ޏY.UNPp2C|mg.^?-('\Jbz/q0of3Qk K+첸퍶m^K =o֓ai fs4jgF?Nދfkt( -#S`d2|ux^+N1<()phTJ۱egE?EݱEmO:.j정Uش~ةŐ$e*^82Z[nre_{6˹~N" sWOuPt5kdiѯQ ܬunJ?;drLX9ճ|⪅ 7+l 2PDoM \ʢ!H_8<+ 7 *_Ťc|-7%7yfI@<1M: lMqL 4 %k+FpdqQ"c`V?Uߚj0l7ų[Y$'VVtAqگ6`7KZdr 8Rر9Dd]Y%z^GoZ"T!E$Cxs8  WG XK(Zta\ݧIRܞ ImlٓdY)BkRHs}4uJi Ư{iv_gx3.f) u k*qF f)J&#>翠4FCXEΒw$ι2`%KMٛ29=BuQ*a?M5JyV*^'Sчxasa7/vF&/r ha5aڥuT B (PHn߶\X+<qpmϛDTЧ!{8yMx Wb6@. pK59y8m t, GŒ#*dͦݤAa>A'FUl|"*IC.vC 2zkk$.浮P(: ?וJҁL+"V6 !%7-Y[l@.ַLG埈^дPor)Ȭ l{OR\_ ꎥUuzv0ė#וZ;@rY.UR4)}9*Iعz[PA> <,SVMVp W N0Ø9fӍ pDKj]0U4:Vw& 7%vLptbDQ,tTUش;g=AC HЭ4G+:b B"sct]Ve/L*3h(PX%E.#cXBY:}^I]n7VƳXfn; cMo{zOqhbj@Ar:% :2F v-o6}#nW"$hKWDl6=$*3Tum:ETM f/ptBWpbIܸi7%0Q\Ud*eW 2J!+q0i#{Z𾿊bB@fŧQ{ *cƑ'xq2kë.\{}Yǹ59i.SW rf͏vo0tg;gqW,yr&Tl@'?,3w휃sYS_J3u&=N'`~avO*ƫ9w!͠3:&Q](E1 6 y+:[B ^,m#҈wcmvEjTQ Y_`И X,. dm۽@?' gSbP} pѿ@":T\j|XϤ{e~"uߗeF+e9˜LAj;3S渚!\ 5pS`~iqB &(kjV9O.P=!UوM}k]((U |S\䛮u~Xӌiqr|Ӭ:gÇ %ܑD _iVe:Uhi)W]#(ШFꡑ'm*O\\pMD#F (ZBrk. 6  Lg2Z>_e!L'C%Ѐ~lm⤕iv6IW&Ajmw=UŞn4"h?jST$-5ŋoxJnRc[67CtcbB^醵/L2}{pa,7J64E.;bZ-UK T՛LVjceGVW]P֐8ɃyCɎpẂ cyWҠX E`1GDHWCH"$ _—z[@(%qv3Dՙbh e^ml(˫yͣdC PYQ qKEap_ <=X+V DJ ^(℗2N(QC ľ{f!H;=R ;6چ{gX_b%@j%©&" +v/i,QUnC4N:b A<ԡP8j6H8w:n1V #vw^2b%jA;C\FF2fqcqڋ.[ 7mr J$qJ|Cu AfO^G[L77q׽|YYD6Y)6rFvS $䡞b6.u!/$1G eY \nBj'JXy.E菉zw`8j9#ul LnJ *Z'*H dsV,/k?rT,W!3|Ow҂`'jeY!eo=Z-MD{ymiGI!+s?&iݖrn0 2w&?l6 O rgG{@BMa<\`d"ᬩ%ϺE;l^,P!{I8OV!j@Rd,h ƚT6#(?yX՟UjV R⧠5鄸~jtR ϑxysnl/R}MIڧk\Ḋ:aFp!ER.>}T0 .&C`\ٚr`aoef]Ӳ )7o`i kݽBv:-SdJIw/5-!fl|VV(CAMʥc8h-`CʆMA% dB]ƪ(iM*/`gEx%Mhpb?;OE "PO BJWREekn尐] YC6PئrYl*xP>a.PQwJk&HO@?v O߷{8Pp ջ9` *ַkc,\Y1C hz ٨ƕ] *?KyXn!a ~<k]cdc bTq`jBpA oN@d3c;cz :, gHRd2ins847rFJ.)V76M$>c[:Ɉe[NW;s`.5U-{L:`F\͜XHFMD@悕 ֊+j\TKAvwz8RNnkrűzMh}2ji 5RuZ@39;dݩz ^G|)TCk/ء?(dI07^6 $:Չ.* hA7~sP+X]6'?`bH'{D-@tF"LNncd# 4rBV9ry,-]ٺ056%? 3A%hRuGZ,d'7ù6:c7PĎIyrW-bj]*_]7?#TX#5t#v%Ѹ!@?IpUh8E* xՄ:Ej2 ÇS _GngïK=2)dD )% Bc-K- DNGwft}[ŵ\rA0bVmj*0R4O#L y]b !m(\b;F@DQj$́ͦJ={jD,#t>=?p~8{0|Bg\_ؕ+yт=9ɉ͸krt{gFH};iU·}6@j`KH}_յ踑uG|JO-HNxHgDHY1m!?Ɣbh{l 8.t֢ur𤁪 2r*F>U嫃MqV9mh  b:Opn}s ]cWu*o FmV+eL\ntB)U\UzyXrwjcpy%siiXU_` ?6up#`8?:S8b?%&,;0v HaDܶil#e`ō_"K% kɘ)v/%I.g-Yq&NKH .bL{w6M!qenS4U7;7Vy^1(wgo֙ψ8dQK&[S$?0QnY\b߭wҪi@͏ fO*0}UA$-|Wv3eAT->+Ff Pi;GC?:9d eVW~Gf+oƂԋԥܤ>I;eҜ=H8D=GB5Y,ժaӪ0[ [<#&Js`o%9wG(X DZm^.*@u#.ko=MaP@)r~kXˣj[ 4HDn=z~Q3v0j1Y'PKk<v%*:wQsdN:"6oDMqA ?NF)JI,RA]0W \H˴^t-WΫp. X PY\{"R_iә2cvlN6X{E$X@Q#;DwFPbđ?@@76xp?s1N: b&-6*F-WraqlxPW\O2>v9m3LmH9Ch(gF dp@ިr s䔢DM&pwNTÞށ=Jo6(Qg<0@3/ڒ8Zs8ַNh/m[/RپK~8] f$ZH~n`9qX ΒĮ ̔@~4=žҾpR- RXO~ߤ<̵<}ryl3qMJ 57M <̛$gyApOGJiqx"p:֌(b;1-dO Y9LèsdɎ ŕDKwkxY&^Yܟ+~1T׈spg IxNw{D, .\⾌T6qy*ZŐ~yw!]pkp!ExapJRO B@b o/ %QӮ,2aQ*.`^̟${FX-1kDm[5NDY0nn*IOG7 drԇcIDWO- Sx7&k-s8ޡI7ĸ"cKѥzuM9'zeq;Eڰ C[Y|]\^à+K<{MvZiYW*A=jNj$0# ZG-EJwMPs_< @GR0?Fz HksWɯf猪!3Sv9/[mSG X xtY+U$$",%,΀{5~ jIBs߲OrFsqS|bK0i WEZRHLVڐ# 9uEixh̝~b7Jp>sPj5dDH?ΎIm,X]&^ !]r!6ePG@yU Q9&rS)MG=~6]sq}Kײ̆Th|4َ}Y{N}_1Ay(߼Q<#\xDUg:$w0S nESK*WqǩS7Qrx*-2Pl@Y_6("{YH-,oZ^ cթ熇Oe1¢⿫y50aE(qOlbͦ[wS Wa~p`vl=g< ѧv;ةcZ>n"V}8 4u 33 ;={y{m\(Drj oo(>G5:1/OM:ݸAMnl1n",ǽR(Ԧ[Z¡cǭ2oɂ}b au@=pH=5;\Ѥ!bgh]~3K94QQad1"Y߁S lP`V B@1LyE+nӪ>d=#58FI5|}}ܘc+wӏjħmsF~o!JIeQqqm1@An2X3b+b0ȺW7_U^HWS[фU\@RQPY\Sp˰8+JBOmve`cjAcK \( EF]\DZYԂ0Z=\' - 6MJy sFcx~wHŃ'#2bݐHfADc@klmZMZ1Axo:0l<_mcRţG%X]H:VԟzZtp -,~XTvN&VRJKIi.'(SWbҷú\(PT,tE;⪅Hh=]:Fpngf5Jp*OFAХjhK ݇Mnˆ4"*> d'Pؤ9wBV]0 ȬB^b9cr@[3>X9H$ؒv_hˆ;림 <%l{3sӮ c*`C,gX 4Cܮ{vaM03Z>E"s~@(^`wwb3&__{_cksCOm/: `B `[ث ?..C 'ZK Z,5luq=zʢ~5JWONdJߐa7 v$tba925+A󋕗rMq-:WhecȈibL=j8akZG]bye>{{&[OM{[Zy.h[Yun_dDPrNz D.4wD˜&t5gӱc0bfVAʬZZ].ZJuȤDOM*.q5tkOYkC|pJ`߬3*M^fp:N`C}yq` Q3ڇ);Q›Ǜ*3z;8\dR"#.v׸ h&#NuX{Z}މ+WVݢn8,ה # CBpE]Y}PVzu??q~jvkZrbs>2.7! z/V_>8 aw8!d H!Spie;!6BУe 8KŜ`,KJEfCj~7cNy1NM11[M~͝?+ӃL8{mO)"p2u,Vx2#ue6߾.O (%2 7ƃ0ܶD>6JpV2{9 Ϋ c.ԚQB&~ň`ʈV"J"8@!EU[+O]n˅-[; 9>ʑ1wi{) iXXjwWvFS][ bȷL|t4Pl I6AQ\J Bm b ,!sv_'p">k$6:[؋&@+-S`Íi^*ۿυJpЄna î!B((v/1$%k1?.B8m Z[¾SF!S}ZemsOE0pG3ctxnHdg7{t'!a?72kN[8ppyg)!Zد}^uMqE *Pj)gMVb((<55tnZ޶u+. $X$ ם9EPꂧ)|+ov[;[XBzK"٥Ǟ_ cfpw@v[7ovgCkۑ(rD;ce[I6_vIE"ۙ4l;0O6!F225K0nhS{g%&%Cރ-;0ƥ`vGrferkw&w"'7e١5ɓJV=ɨʛٞȀ sv` 9n}Zٷ5czdVyg{ U4rilyzy𨹿tso`wOY D1?Y }1<4= N݃=ARTE ٔL ZPo+ :q35.LJjy]c)wXF65ӳV f$ \8s'ӑ&=z0:)O'|aaQ[|& "\F"AZA8XZ70!YY]˯;neN>Kin 8U|9H Xy d=p4dAWN@eW H,ÔF$Gd(+(! 0vff4*yޠEM-FvXٴ+Rm 8#zMޚA9KXwa~AC~!^{4?K`OXK>b1A73(AB> mӤ OY1LI|XalY#5u{n*+5 jGrzPMUng{A%琊U+f{Խ(DվW;& +~`d(ba$ΌB;4=Pp䓒)1>GEf>7++>VFo{ko {R l\ 0K<o_JAgOAMi" *ZO^PTmڃ!;m*vfg7ʖʆ^\ҁ/!=Pq|w`X\Ldbclo6 KVw.(w^ v ̡H{YЎ7_bvn;fvk^V k/˕6W'y[6'gs>:I /#c!t%?J7AXU@cr{ xFFvىף[{f%/>"ztq"JiI]ǃ\/;@%I;L)9T]b9CrLBP&}"aL #[5|yJmmaȆAW jqP@O$Ⱦ`w&9FGU'0' Ȳ"wdTh htCbq}ԖQ{-xҦ}b#I¿`3/-Y]G/aX%yk\F4NdǣfzzHAPOOZq@1Wh,aֈSFpw+d4䏇ȉG'9u slv]6qVT=^/a§pށL(2F 8jr> xk?qrF|gm JAoVWcAebo9.,bu7_| aY>?h'+g:S\=)<`Yo޿ݽGe pˉq>+E'.\]TjOXNFqΕ_>Ur3/D-Hl9=BiZKҿ\I#rF~ፑW&0FMsr2fUv ^?>lCN~ 9}W@whMBJ蠥kܿJ<W\ K*\i^3)l~yJ={N7732ZR',_&Ȣ9?~I[cg{:nȐkُfA2'd*PpzФfFM+w}W9h\w5G-~dW yvOA//e=C ] |aFڔ*Ѓ2͓q25/fR#~2jD[ y=yR{glέwtrjy}?󬱰pm@tQ=\rVd|iF)rImw"5\x,?x˓s(Uno vZ~+yaH"YTrA8UV_ȂgB ł YA07QV&e+p+ _̶*?EJ\V`h"O933%ߤ$7q[Vi/2tl,ۣتxa M) )oplzYO ^z tgz1^9 cGAx!u-f9ChEb((̢!tѥezݓVXr1:x͕Jb 1lr*q71VM϶D`Mɉ)8E(LJ'uO'j@lpp4|Y\$ؐG}ُq7?`/L pk H5nȟÐc0=)-^͕P ڋP6 { \ N^2Fg~B,dWK %h$vηP GFv<ˑ eV}  '>srH+BU2jؼ bo xZZ!΂&/z Q ?*Ce5P9[/n+!)n\,Ȁq ;/mlh-^2,lyлvo}H>,1L9 KM/jP x ܆4R )*>u__gF$NbV݌4MM(X9H ꨥ%=\g_Árq*_W~+{0J,8zӄ0˖F>BrcIҸ"*p>r*+҄JN֢AF{t!G!PP#'N&NI dG0`8-|1{&%xqnrIH=2m}>5`ۂdͷ{.n7-T{ed:qd;-^<_yjMXFLt~;n TeH^ +I[V{ho1 q;dN@vD/4.o>1:v0[:֎۠zw<耑tٮݞX|N.P܉7D?r@E0 ȳ)JGa'G;ql+ 7C]ĝV]^/w}l=Ukc.kU_/+~c-dAVҟ;!wع,5;kʗ]5 մ?C_=uڢi2N:|L~XP ae1DL$yŧgϟ=ḿkAd)5XWhyVi0fw^YFn!L)Bxi`hzدN`fAH%<~EYڃw?Rcq'Ma a 1Nbt "ɘo8` G;u?pqxNq_;k搝c*xn9[i?׊gb|Clxp[|o/7_ HiRx\k07;䈮uP{omhZGkWjWt m=#5.L&As Ua>ʦap~&L+k"v߽~|4Ķ[RElCvP *^PkSFic6& BhqQг^juhQ)~.FB~̘mboS0%V9W8PRƋ|_)"n\нJ!ǂm3#O ƽhsjXIPPpJ1)kyYti4Z՞ URp~ǏJs|y]뻛"M ̢ rrLJFP\&RhZ))Vg9/.ctDFUfB,tKkWH<>#;#j҂9GqtRTNXhGq}R^HȨ3ݷrXhGNjg%hm/X,Č2aGE~aB,x=d*Ɩ'ܢQEsl%(|\֗5v.ijd 3^C:4_qCZ$q$'?}§:İ#܊~9% |j_/?.%k?hxc>--& MAo3ʧ,ɓ{Owg%ͭLt(hlyFq~f)OLG(`k`f)"CDtų돞 ^:96M6XdB C2Ԩf QQ_mjI3tEvI/\=aU`0Ս;6Fjs7\vc\k $6$2^<1KQI|ܬ^8 =6i:׽XOSȧs >ǏMSi4U7W晴*9vQCsz b?HP+k8ؙ:tY7A8lOMռ;w] W+й=s"^nHnnMMmnJ&( ghQ'FUi<HPyQϒTWHHsb渦ˬ¿/?mo 6f':ՁRUCNpDL\L]L\WC rEG=_G=O߫4Hiʻ͸tŃSFkĶozB1 R;/\T1̮zNErރtLT/e %ڍ[PDЫA345T"a+l?K BbOԱKEFkڥ`{M1t Q?$UKle[8v#O66ni[06At>G ّccRG S/+g[[ i)i4S2nǨŬN66ƾr(՝8 1{sC [?3ϊ`xRBxw_˚#)"#DSvm ':dHֹg2;MżN@7gi"vUغZ!*yB# CA;m٠e>5jsF.Ņ>ͤºv\.bUOh^6<гgOV d/H'`I^dwG=>7q:QERD/yx-A^$jY-Mdʇv(cU 9YS6o "hNy]j*WMkJlܡ㏇!a6Ǯ"żR>]Eq۶FR6,H6|q_Օ[?Hˬ=Ni]`, &{ yOs#P<H AzţMfst$mP^+# ;١_M Z i)!sVY>+6UKhz:9/COmŮ=Wu` 4*h+K[XPsBZ7Q`0Ź!. OF:]ܲQhL0a#s-S7 $c PPх^Cl۶YQM$[`.e\GQ\kQ<7j#3$hbKJ7.Mcd'CdB2r~| Oqa-@9`  xTAJ,t 1lDdoP"u,E`(Xq _q(9z,΄Q] I I|mvE#$)L-tg¶źKl&d0Ӑi\Mpi96dLo)?δ*}X1vQ,łJ'6CyfCsˡDxJ_'H@<,͆)ikm)zreMCRvÌy̹ýnVpJ˜%j٤xwjev֎mpa~VW:[ &d#-Ks)+`b~J1\*_%U)TaIɠ{t5ml?Jj?>gc=ijd?AQͶ-Roq,`yCCYxhE|2HosH -EaNLl<ؓ+O_=X#؆:qv/4^~kjNMqabr潔A9j;,7җ7٭.Hl08%W瞘LȗgFLKF! @|k(##&^"~Ȍ>n'puscQipȼ1GfNU݃"+qsmcMVvϤ n1ZV5FBp5[D2)G\xdͶA&`-lcűf}Ax;\Mws?owV"iQV2A*/{u,c.'gX*^mH ]4]-7rBu,..t6l=9m(-\Qw7VBA38ˆv >7G'#K[5NuŔ!l:3{_W -飔GZ++3FH+d8cTg|fφ)>'JQЉ gd)>GV8p݌$ 4a|?Zu{LO!?v(P/dx @x7nU  oٴ3L"[󶐫6RYB#fWa1d=Hb$ju &~vJu;LXM,0K#31ƷU'U0. Twe|OnjM6e .Rl2'C1{C3})`GWS= #4hJ{mGQ&01̃/u- ꨣ~B>>Θ4DZ s._M;һ GAل[va l>=wu34 IA>@.-Cs\:껲7<\ .{>梜 cf> JIuO*ZYI_YRp辝38~(]r'cȽ9 {Ὁ8h0q\'ڲ{1s6s,j9I'iV~yj23+ ҭTIB[! SGHae%iSGh$(sهb+*;Mr헳13j㢨Gpllr!g2n(YХwW#*67ѭŏ%'ᛞ^?v~`-]]#"d.(*{{R*z^fy=P(|v1ER7v2xJkżD, ldD=ΐqaǒԈ~@ g̨9(ZߛEB!0ִ5dܐ| <3n"UwRXr'N۲עA_ʭ1\/dNS? L'>m(F.@icRDb=UdLa /9Ƈ2B^/Y{L=aLȮHC (c䳪D2 iXqY`v.ӳMٖ:Q%jջAZkπj]̥0Rh2:]C0 Y]W[ٞfYIycӦT+8P+1 v2].;Ź$62&7بs\VfabbG"1v馂#qRi껃76Dգ_*k1jUdEr>b^XlSObu, ᥊/&1!=1Zy1{+ߛj#dЭ(NP݃pe 9B6Nq]ނ=ȚnL1Y Rsmi{L$Űxb!wkG2yt 9\3=-z"c& Q"mÖ'6!@" GA04{]::[H( MCi%|0!zJ K5Ւw;^{1/-9H0뛽a8ۙ[Nlw3B3˽M?:ߊoIa4dj"5Ăl+R ,Fg hXV91 m[TR5ׯ6$mrj:|~ZaɘE45QYH78v:PgH|gv|˺v]]z Lp8FǨ8"Z/,"n|}!^|%:_\b۬vs6cg_{GW%FB VQX腦+xLj(7|nߐd``vƔ09}$^,w=LH\]ˮ;~7g,͸V(s9%0:7kT*ƟV@eOJJj5 ׫h^~БtPJ5}#pޛ^H4=<+ݾqc:^c!4$G 90yBѹ mKD \n{nיY,a>Z~@yw?'(Oշt;.-,v羋iQpSVOe?{&V?Nu#=-poA/u;l|ru?rG-ޖFP[u@S戥1L\[hO-3s8MȽx!fw<ɽ5[P1W3Ş+QbKEpi;OósO/x(Se|B0ᶶhQYtz-V/" pZDθCǂB1AA( %tvk˫HPVw}KrHENq*b/$R@Mk2DD?]g)+Nw(Q#y<%ޔr`;.к9v{ 8 o vK?_YsZ!_ipdʷ~%\e{BebQ?*aw-B"Y=cZ%_Jf|m4Q;c/.;=!ܣPa46!Ҵ0uyX(%a~ nmRC I&2C` RLZL`Vу+pX:\]@4ӣ!KdSj5 B81[X>}D0,#~U-]6Jf9MgȝٝY'<,+MY %-wzD/AF.ÇOS* A,-C0^W2I~m:,c9sSdNwBa#"䳥m5&et\>? P5buޙjA xSτ̷L0N)J:ˬ3OND ΀V:XtŎށکms[A M;f0N 5d-dCÃ3(J2|D.q.RUn~j͝ .TG v;RqQe+Q+=c5-c{}[i;Pη)deA Yn ŏd Va\m SVћn0~CT>HၩE 2͋J8`d+mߞ0-)S)j 'v~[:P܌4c(\ʝcʒl /bu_,`@wma`ZEb$zkvb.;Tm'v+V]Ίa[2?w£CTl"[qiU /xx)xݗ}hf X$6wTғԎ4b5kPecvxk]f2-Qv󥙨6-ֶ$B:1),+ЫOtm=&pp6.AOlKP\%I wC\C.!~ m;>Rۄmr-T>nH?e2J?x=~=7}mtP9GܝZD^7 3D/?dbN.x1K HW)W8}0U];,H)dE Qfɠ|d*;?z#냏5!~r7szk sG"l{M0;`JaƭM)԰p2D⪌)]]c( 6:A.3. =Nv=2a:dA@ |sFL:Nֱ[݉+3-I~8KϏ߈ɺ>U4Tg s"\NEӧlfbc(A\ÊgՊ/HR,h֋kȳ%o{䢚Q[PPs [adoQZ_R3zp /8|=dWDH:m'}tNyJ! 3/do=EP(@~.TZѻ>L-1#^ hq9$L^ զ(*Y23 Oq+} ԩRk n|1&"FvCi7LSVF6&K[+d[jL 7 ֤"XW4`3ٵ]0c'fmi`x'hDO̫v}ib(Ⱥ`J N*֞4(|'aѴ54#6M4Fc7~nt6􎑶ֱ4&EfR='S|ij[VGLT:đK!u@Fg< K^4,(o4d}=/QK#Jv&xX_lG׺Ro)mhM)_7/I}w4ιq:1$9vڈm}{$$$^B+qJ_@TE@B $Է"@DZx۳ݔ"ŷ;3of?:OwM-[\au8[ZwV{?xqeu꬞-/.K˵˳Oa?{- SUWcuө;Ngv)M-^ۏ~:=gBfxRU|w|} R.^}0@<@EJ6sq0d\ y*@bC@PB3u|bOعrٹw:mzv l;zs5W^;Ǵ#qqϚy%]3gtȫP8x5먔~Vی3g 6Lߡx>mzVen`B^}Ei9mwI=0qlx39+˽72]rZt9Ũ 4_зPY?Yo"^! O\ 09*6} ˔FӪB9s%J*W , 1bjĜ] m X8{7*2 Wi ]Tv-ZbgS;}%: &I0ocJb\D[ʫJjR2tX!B(aBV*S8߅6ya M8nXQՀ3x_Ų؄{LK!Րeh`Ǵ̀P1n  1ZivlnY gVKCQ$}nr 81 7]5\:F!>v8`66kY^c5 z o:;&ǚMoivv5F%+E%`rQhO>|O7\^ŧ5 A/Jgs,N^Y[)>O<5][8#GLO#R-<'z\ j|Y H|<4T0[%xIhwq.p5vp40w$D$X ;bHe9ɴkGjҨ2B0;!UD*Z⦬6Ķ(h}G#O3u%0ؤܒLAr) 0%ﳮLbSE#bDm-oQv۷Q))DDJe0iط/| jЂ\]u$%&5~mdu.4X:3 W_%5Nʊ]'guJI ͢,ͥ՜ (]h`X J]8qXQ7m}oM᭏Ѿ27I1ۚP|QIs\=.c.uc2-ds?;oonrrpCǾ|~>qZ͟(d[HEs g+/.`Y,C] RoUd\NQ,J%%bn&`p89$iJV;5D~ ,<tlz@X(ELvk a.˄q:y!eBq!qIrdԥj$Ղ%Yz*h 1J(ķ0W-S פ,UhddD l]HX7XNqNlgS/UYIM F|$3vWJ}N4ztG'8ruzxQz/NRI0PI/)ĝT:(Nl gmAKх=dN\jfװRр7O8V*=8Vafzjӷ'%; -,us-7Sf/:wԉĿu|Ǚp7_Yo{aI~M*[Ίes+0Zg{k;}+/M ,z BCr|W2@7X]>D"(DQ)}fN]HTKkzMQJb6MV4w+R,Yfڒ¶,cD$˼9j "ѼÛ丁uK"Nv5>*f8TVQ^mHOPTЧnu LҼlqdv8cBVLjm6kŽ!x;Q nũy)i9ݤ3 6qD 5/1 ȁL( ԃ3lsLMy7$8J+7n~~){sejVF%IJxy1ʳC!s1jI@9 @y`<%E[f3J1BE23RSR+&c[8Q4}@sr)(`q;WZ&PLS(I-.QPRAW7ݲQE)45>UPI.9?/-%5X/ l( &G>Qq4FYPL(fCȀH `Y5R k<\C0.8Qi6?"n5ջwxYmk9_!P;.PdVV8=$w^8wuR81\J#if3([ZXTkiv??{EĞm7zi~ِݷd nےnI6͆wz^4ɮy~ ߝkzl=@^?m_?~`1iW?^.EwEBё?9rq4(18kWH4S0s1ITš̛߽å/}rè6Z0*1;&G Yn M{H䘽JC$Ҕ"ìqkEb1c+E<4;A_S~I{aƲ H@!}6:$QS¦:ݞG11c/N1YO Xs M y`R FtxA N8zgč#(*,(wHkJX0G T"; A`UQ@ '^$P(CUpt|qwS@#]S~+ڠ64\ӵPM) q3* NRHҁpL@%3g4#IcPNcX;o+yGvӵs¸أ][8JH&P/1SR!Xs{Hi=U>*Hn9\BԛÃJ+m^r>KIo03fN0Z>P׎㳩f8T~>)țnIaDozC`568'RLxP0Н@<} ݐx]y`?? {dD޼4~wVU2x=Kqq:owzx)IH'inYiNe/֚%wPKCRC~|W[VW$ؓRicm.IE4[ip&ˬ&KD}b Ԁ|u*`ƨq/rfŸ7F,E̳\LNCz0H|ömv*ϻmx~6~ &W2}~n(ECmJٻPE^:(D_*}.ALzLA@[0hW6TQ1W& s`FWL 9 Ӈh <*ɦ5Mc4k2SDTsXzhvccLkw86*Y ˲UM]P_luXG[ٻBdl4L'$:K+ɟOų3z`zoK585`+G)ɇQ(*n"S&t rjDq{ɴĆ2lgݹ2Ć2kS`M]fBAaWVP:̈1e\gaflRT^* uzJ#an*PubL;I@7 e̴QgA'loTrV݈0'sk:|VgϨ=Aiҍ @EkxOYy]sݟ/CثFC0GNf87Bv8j^(=nQM*av]j= {/N3.B-=1?h8b^  EʟR]:z -H&uc/I׍{hC dGkև(aAףnU W1yI8*廹0>fNja CHLnH\8NViie\'}ϸ6Չ"Z&Q 6*EݓOўޣ94`⻺n` Sު=|ǫ!2ؠE8vݓal{piCw[up7_D㼆ecIL@@FHT)lӿ ol D̵i:\H+өË055I8Jva3eS$&<|SKF )̐0dR"[fCOxO!vV QͱS#ݍs966HGq>R}*Q1(B^Ɇ H׳xd32^d>ӅĄcE&$LcOq*ZFx@68N }`f:$ pȆ.vG]+}}0M0%__#R' 5"z`^F-lL`W.p$S[N0GRgD&9A5{8ۢPSP˙vn@r՟z>bBܑs~&rme:c^.Wg){]^¾~(~Y9IzQ滞Sm̦hN{E=:hc~Ff2Z[Sb\M!p֯tಕ-f ,Hp+sūs)sކ:әQl0"d$aJS,G c9t ,]3 "I[ FWa} qQ~ 8|x^Q#S$@w^sVY,gPoPf(@sܹxާ4>|#YlFO7nQ; &Z"Ќ ^P4iB+l7xaz}AMSxE ji}w-Gn1饏; p,H ^~x/6w w0- C,79N}dr?8@LWd֧)企D;?{wr5-hp9TYPyaU$w@qQelYI0dIF¨"L~O7840qJ<ñ0ʑHVD}5˵,4Fa!H`hl) `r^/qq $Em2u Wf_"~1!&m  1wJ8'%`\76ޥ[w8xBz`.?NR^ }Mh"8AӤ^StN %}!iagSg'm%Q9ag2a'F*i[R v&(ޅ~C8msZwgETT9nļ픸ŵ>E[O޶`qx]L[eUZJiO{7 Tfg2h!q2, (,LIY (B 7~lh,cY]95|=‹yOsÒ49 Hc2?A 5 j*wyEX.NR!erd@#)! IZ5RRFƵvPa+9oHn3ʩȴ72ze79^qWTY ecY}ixd3@aFzOI#M9ε\ӒW<'ާ\T;tþ己~$Um-HȹSr H ጟv"ASԘ'Ә_]V%I{ݢ_sۡn x<62U*y$U~ϟE,wJVl>_TRR*ƒ^A{7Ymw>6&}AM̘_ʐe%Zc7wFHɖhotbjzpl749qӊLDbdWPk<RZ3y[] 'Ѯͺ-Ъ]6Ez"5 wӊ[ô{ [M;PDtHBx |a4/d ܇CP##YV\ A%x@:~U#muv e#|L>:!x>ףȢȞjRJ% TGw8PvȨ~TUF̍ZxU,f$7M|&h1VxMOhAMZ4tXl7MY&(""PP[ADԊ  H?Cۄ%H,s}~^w[f\*a"Z0$\\V #qLq`״[Qqnw>ol7hʬbSbP;dH"e;݋ի1aȐXӄ"Mz$4wux^ZoT*p?pfM`~+pkv>!IE W5wP\Ln =,kV;*cc޳\rkKq\.5^j-Ւ ׽۟H[]yעm rwW@n0]-04זF" |{}CÎhl݅Nj6mDHoYQ&HICvdƚC*'S -7|^B͇1x7Dh`9`n7W9gqAYvz'8{=NMr/lq-b ueAUNFCÄ>ʘ?h.s]QAw=+7 6?n}͠0-bdh^'\XJRu!B_&*S@3X ڛhv#6ND~oRLk,9+y9JvWe}7`H/L pya†<]W/f`3-[xS^6KlI_N 2h{n,[Myy@k 2_FOR=$tC[ߐg qEU8R!+D@s]I% Borpzk2=m5{XsOȡ?=dk;8CM`O6+R$| s,̋dQTՎH9VYl7'>Pb<* ը%{\̼4e:-[(}/@ M8#R _7lYiU4ZK#I)*M]/GJ7w;,N #7RmKGq1-LV=̉ZI\67U hFtEN0xYO(JtoYw!J>i^3,Qel11+TbŔ ONa:\ui9yQ< 1r BK2QT. Ng 8QQ+ [0RY )N{R3n Km9QVnXEef BYVTQ4vZg?z ŴڢPDŽom*j_mT@GPw6~?zU1bɄd3,8K׸*)T&zCâ%y R=!w%m J?9q=[Z-gBPud>KyEƹV-/8`/漏NK._|]"[ Jc#BXkt\"X8'|3xV&Z>ϞS v(hgB!LhT1^jСN&ӡbm[>ֺĂM,sJ2U:hY{F~nB PLJ!k'mg$[I/F3nQ@G$ofN+*{HIo5NjTϐIhp) O/P׃"f7WI+ib q&]\[_#1' YI Պ CMTHi{T&ztܽ7C~rom"_ .ZxGAlfJ'"]A+(Eim+k |=QΦ` \w9_339͵_08"=wr ycR5> Xu!N\ʐU cpmѯi[E tM0(#3 8mL4$;J> i7^ h,QE8DDOqWB\ H6۩_3Aթ` ltٙZWl5g71MZhѰ6ӛP dN#|76N;t7*hx95 ǕZУa+ L . H!ū3.ML J$$5W ( Zie0 tޯ*J +5XWTDZrƌ7=oPy3h/]єOJҒ.7 rD5XOArY;p""ڣZMSi(TЊtu"xEC~,p<'hW\+Iv5*"U4ޘgyY"Z i햢kwH+,Pt\&=+G>ț38%hbe }2S4~V4yz=W<\y9ȣw^^>O|Fkދ0._غ seODYN@ESվ): St-T Jb6 40Ӷ~2F:aÓ+F0|$Ÿi d.Nf"ʑ?XxV|re->:] ~X4/*ٶ Ex>p d X̴Ԥs9 u Lts &cS4T Pru QOMQpKMR04R022620q%1s~AeQfzF&PhNOFfdV6G_,y@B9ɲW& *ox̸9W-7=,Y*S'+OUe߼Sk:ҌdHh= $(x[jͯYI@W4^,7$198R?#8(DPpJLy%8}]msS7~ jud#Ux[x#eC##{zbIjybNFE[ݢdc] 3ҼTb[̼ @P@P!<5E-5ILbGƕLbzF\E% Κ Fƛ7x22&auћ84R2KRS4ӓuMFls>{dYnx/O%(+mDX |ʛo 憥kd,Y&3ʊL> ͺImnbvYXzxuTOlTWbO 8eM%k7AYNI&)Xs)vI*qD9p \ #\v8)1}}LJ?+ց5;=sVaBH=fW4V#'{Qm;g~GNAU%J@M!w\1&^0C˽HRI~H O ˆd8AD ,-b**ҕ`k3G).$:F,%,eY<u`E6)zܴUҦ#'L=U#T>)N}]`dg%K+$R"\ZVVCn,z"Yȣb |Wc<(BU8uXDS +f1$/VU2X9Ru|ևh{w\zXz{[]+r#R]4#\_<!cN&_NVY':9F;pR["MJkt+ MU[mNv7EJ+RCiHmb*EO PAŋXxPO&489|_f6;w.^GG3RiY3eOuib3e| /.UX/*42GdžFF/+i<\ 'fP+"F&%"jՅJNMyJK3J!OuB`3, JY3XZ^[)Up`DLz YuNݶ r"8Eڑ SMяwEl8ㅿNQ"bɊTn2VjȖ1j> |i43ᆯ9>xK 9J?QfqIGR(7))pNr5_nGr[NɾRӰ2)|Ks6:TH7Jc`Z[xZ&smfc545,jB{D|LX?DvM:}+BIjYfI4XtVXF ӈrc;yT yqA&XFHyꭰ>\ը8P$"s0qTnI`:\S?"Z4 Zp5^)fcnH1xwfP)];'LqoS!`_=[BHX+@{~ry*AFTmnxToEzhQMH2I7QY{v-2i(:)p"Zo6*7]ӆP. ޑAő8 !Ǝ8@^ޛo_ {=D ]ERM]h6xo4l6^d_ʘ҂L eK&3` AX $:, xE&#HgV1AhUߐܠ~aN[aeÙ<RdI&kM]8Amt6j=tcgY]g 30̬Ϙ-JR0zYFDiD4#9D OGua lJDdHBN E[2%Qskkߊm5QU CضO@k~Nm7k<u/_b iNT X"9Y"R͟;0 CfN56uǩ8&Jnݷ(שi=x˅/&L8qu;@8p4y7 OޟJpdK,o7o78~:UUNJk7Kŕ^ҭw(df]g^]MQUZ,/b˙k0njo-tAdxuMLAdz@8nځZnggfwv $_GSp)ֶkċτģ1ƛJx1&8I9̛Og_*n=%+Sne08Sjq/x/@7o]ob#n3LA@'dpկz{BPsԲ=q`]lp\ٯ ;u<ƔXn3WfeC/J!EYH#!mC].S 1 \K" ^r؟3TF99&ÛgˬVyc=7ھe25a;ڎ_ʖ7kvPPېs'p4~LPCu* x|W9 `g2f:B a nLmm~JdfνsJT*՗z/~亴dކq8 a\ޙ(IXC,6(1W 4ӑIP;Lx6 (fp3MdzOFYw%l`F /g~:`͠(o+MMx%ӤV*I3*$a)vI^ݏS[Tj+_wvvj'ގGҒ.gXErmvh7ZШ*uhIh^fsBAXzs̒[+ITcS|w]$>ӧf9\zżx6/;/6͒1^O޿Yd'aEN,kbFWpodnFIƃh:ŊQl*_ʕW5ssuK9;Ƌa͘7Q`ȖPo`"TK1zGPbttN^K!ޘnb :Z81_:% ]Hذ0%0 T*I'^s "XI,f0d$SMw$abZA0DgDlW5|K{خO7pe^+|`*{h2# b43B)џC򓝶5 %&Hd!1>B&An\b ~Kkپ f/*=R6mM"|z!ݸ1\oʧ\)B.bYՖwbs51}ؽ˅w["hNje -,8^ɂ$javrt0/G; ?c1a.Wdgm05%6TpMeo\[mWw&5Ɔ}YQAY*eKJ @ž,F q^V %b107Sa&91B[2NI|Mײ G<{RVJO9|3:wDi q6n봶76<">,{@CoHQ7 O8棓LHCOȃmp4X2;-Ȧ_CPkq 4\ %vch$Qp^SȪ^8 (pF35MGh(* b+%WEwTwLg[7 @E'5 EGAX: 8Up<3ܳRB_6Ǡha7$7!O#O= 557TR!PL<ݍ蟣;֕_]{Tv~jVȊsW s!}}ᘌK<4Ԗz#``8(R%JdW#PQA漄-{8dGA^4bbAaj>TH80/Fqbe'Pס?]`l`+$H!p*oImib=ΖΆm &9ldid4i8Vmp,h0B+H òy9 4T:!U'D nu  @ak6aں9uw 5v F4Q@U6{KPj6$!A|gʭ?S\lR2=y (@E\qƋcf ulb=C7r8 G߶+_h& Y^D,30+&B[&l݁[ ߫} R"$"iθ43(2ZНW=zg`K#[Y܁Od(\G6j>ýGA(yҸ ‚,XNZpx堽;8Š⃳C&,cL\(NuT >8+S'3dǨPѠ_KÁ!׿+lGZ/Gt rA vm:*ibokWHA.ʴ|`<\&.E2ه9[mW+iC|bNi{^o|_7,ۛ ĝW.vF/֨'SA$Q ,{"' *Ť0J ʝ֑(dPpV˃hsv P! T^[x QP_oȈ,9r d1j$t\ S7x6獶 .sy's0,$<.`Xԉl6yPog'긨 X`KA%MmDQAbL#s82-"!=:cuW@m (1:y3YN"eo}J.t:}z+i7f[O{ 4 CCR1l/O2 v. -Bt~YDwI3';gwwg:P:=0qIyx>nG$|-קpα?aITN$R?ZkZӴDiN6(| 1R'8Fm` r0aa,\ Q̼+ I%|2PG Wd+!t81(MtCv;/ӌ0S1.qO 疽?1鈚 xnyU rVБ\vgpH(?nKn{ l<-` FUe6lT:T^JXkQ?ӳ0.Έs[4>]wp;dԫαb;TDZ/g7IR[abkӧz 8G%[1f$A% -OHE (X~}Ɯ P\RbGǨ7j9K՟wX{vpxTs gh2Bz Z!\@ӼNd)yBܵ l̐tm7;Q3 5?UдآEWAEd@qvO8UItySl!

e:bӳV_E)R/TI`ֲ#2,>)nbZ_0KPUU)jzu8஢[_R8)Eq*NlDJS_*I_y{2wa}CZ0zMuI]3k]8܆>#A$,oA1cv&a 7c2kݚ.$&V_EW#@ `X&0J5.[cj H܃}6;d5s=u8у(w䃈 rJvƽWR9,Z&~#c#gx2#QRIRoʙ M3hcj@ǢHYY2YZ<551]nG, <5Z2g|z>}@fAЗ68pr]M%3h ̡–3>\/$X/RLdZM֒y~2b4IE=fՉg-N܃՟tVrM7iN>K#yL܃(r*9iŸ/O`_܃՟=;ZOb Y ˜ kJC-k~%wBX8+XXb~Ek|OkQ$ D(t]iu@32MamwJqg 2Sp!u:3s+/Xqq>H  ei{y{Aædg&LQ&*^SRag1~,dݗM ᕎ^iΌ'r!&.Svaxxə!KeK + Lv%HN]@3!!pnIG`M $y,z.+ֲe}YAvƔSwģTx Y3S6~'ʕ3rhUjI":[aR޼!*kKBD}#JY=û@^6A7p,*u-O?!)mz`2V3Ķ-û˓?BLhl;6ϫ )e-0.cʩq&HZ j`vg{Labu8Ze!qצDى zn^_Lw0C(E<&5ì"9#W7P9aL WH<6(ijӘnҋ\~@̆@gJ ]{ LHu5k⃖yQkԾʎ$Je{"l&$ T|`9s-s e!\m&j[ӌfzH :0.'vD"IpN 5-!z1詉!@ UgM]+9%T5ixynߛH[KCae7ptg0(čby6 f%ÏzJʿbzIH6d~ƴuR!={۶+hbG}ɏs#' pHpvP,{G5,rZ ?%2 WPMcAP"0B4<ɰWE  (#5""  %Ȑctnle' ]ە6"\2bQҁ}/Bx")u䲌t3Sc;b}M*i$ !Q#G2Ѥ#0d=]&cYʟ~jw688{{^U>e){~{}ZQp@>Rmv\k~mXt}zonwy,L;[[C6GVՃڪ_&z fBͅ f>W$\0#HuRj,8@WdNI*l>nʏ7VeGUhw'\E'G{񛭎p Iػ_;Țpy7L/<KHZKA17>bPJ;{Ȟ/:-[΢qA_;BZg0(xBtj"S2aQ]0NވahܻZXEt8XXA:ȏ5җ`ޥ05B/.>p[$؊Օ/ny ƫ Ip 0w tx+$u`nZ_Ŵ.5EKq̯ ߕ\,] F@ $` ;PưC%k`QY"GZa4Rd=+ exTQqNYR-W od:%=Ⱦyeg.@;[K+Չp(XTy<"+aĀEWF4@eVAE)*/c; xzYR"BA/ϞD.R+H`(*Ļ:㠁-QKƉώK؁4H 6x(gkt_`aϞE2pv% hOywNC$k㦷9i#efrio[URGtCP9 m.IJt0_t,&+-!\+n3^c!wICI1a38FfK?s>#`oλsxʻB\ IEzf\2|"ͽUX-<ɜCD0@:\@"mU! ~YU,&ZinZ<5gu݂ۨ}lӣz+5Ώ1 ^\RL 08v-du$fnEF({+fV\\A i @ 1)Kz?88-|l^D$!du=ek{ oҼ|6]L:)(r2Q*YY^0)O`pÔ. ̪/ .@dzwףZXC؝!quy!F?½̘OfoJ\>5;d/O}J5gWuiҦCm5M&B:^rC|~7{'^sdzNʭ.lj(iJAu2# c#Qp*hv8N 4x:sS0 gP1n:>Mog 7H"  l ?SrB2۱f{iƞ4D[l@`]É5tHԱu M-/rAf)7!fū2'f~眷lar~Gqf!̑r`5,ʁfP^@N-﷡,biAys(޵6k'kBO.+# e;`vJJ5PIfWL(g4f(kR@Xa<0L]K>.r p!TӜۜܖG|5H--~gs;#z!-:2Q7K?xc/ eHcQ$ekB3̦YJ`~.< 7PNAJÛ:ssf|Jk]y [|*7,x"<\<凳'|C|IJ|%|#?MHyEvʊ&JF-zH^i+W*AtVeO.oYk lekN΂owz端,%Wn7B qKX)%d>"zܖvS* |ud">fyN_q\K `@ Ι̱\\J/d!(y +MB==)g̗`('!Syr1C)!m`ۿ۫mC H\L?hk(LYO7gn*e34W}b3d8=xXᑑca-= t1}o LzU*ؾȑ Tƭ ~J2/ CK,>O(A/~N&ZUak\zPrQyRYK˝Y^oHsK| hzH&x;q^ 6;h3:%&薥g{$g%s%d٪sy8ت'eg$(&oޤsQe?#Ϳ ]CbmT" f&&J\J0UA!P9bQ  ;yFL+,.M$ZVkgV<Δq"A ɉũ *P;2cbUbj@l SS!19p@ZrPU'&o. }*^qPSAZx<˾+3"@+Gcolum/recent-versions,3J >@Ջ&%x1˾+3"@+Rhashrat-0.1-ssh,3 @ߛ?xq^ R:b%ŹE%zu*9}]msS7}Lx^ :b%ŹE%zt9}]msS7T'EBx^ ״SrRusS2sR7kj3x$g%s%d٪sy8ت'eg$(&o^s A{eꡚ]CbmT" f&&J\J0UA!P9bQ Ѷ٩J?Vk&P QL -NM+53k s nfԉq rwuq53 rv5Tu r 53\D$HA!98UA <.}X-{+THL#\5Pd a!TʼnɛC߰9@eT6Ff宏x^ :Ezu7-b\&#<1xq^ 6ki{3Z'ZXg$g%gs%d٪sy8ت'eg$(&osm?#獹ꡪ]CbmT" f&&J\J0UA!P9bQ Ѷ٩JVk&] QL -NM+53k s nN3eX$@A!98UAjBfBtLJB dj*$&ÂZ Yn` tjqb_!oXŋ2j*-D}fÇ|v*x{/9n"]=&:ھR ] x] 0DKsR"XڛHY, ċaxPQ76%ZdHaZ46fUO~ ʉ>K 5chx[Θ3kb'o"x[8K95/%3 %x @)b.LK׫ Zs4ܕ.wo5_f`9_80 EE21B琧>s҉[E:BHdsҰ$G&e}&FILRgnw tty@S~u%穌4Dc芍nF@ԳEXRu[S?ya'4ETV xe1@ {b?@U+}B$H(N3}`3 j#>vq#zCNεz z_!cX`\f^-x64_/3emx2" Vx}K$9"TT-ӻا2oW%k4Nc\rvf&& yz [뽻k fl*Wΰ LچAMlI|zP)LUqIbIi1CԊlm\&u[ϑi?1Yfa&yFOݛn|q^ru=K'1.M]=i#ЦN'eV2_;x}BȌJKڊޟ?vzmĬ",&:Dp˘MH9YQrrZsUo K(ZD!9?77?O/A#YEw9z[h8e3T=.gςWcϼ0275*.I,)-fdU :9rώ95Y)Fd);.sN[Ӊ!ą{'73p{.sej񝋜0ٍ %\" 5:^uZEbII$v^\eUޱZWV~ x^8 w%wXOh5b100644 common.hfؐ ӛ+u#%-$x}KkZ8meݿ"7)wƿ4,x]D/8LJrRqp2DIWll})a9O玘ebiTobvjZfN^fh+˜˫~"pCƉ65)gtx%9(R"YBsfS!z3x}BȻgVΦ799]ɾ?1T,A|%OjwrU[:qk5;Y?zJWBr~^Zf^N~:ӣ3&e֥)ot^-Tenj SU\XRZ`uG5I6+[7MZYE .~TLL"}2)ѯ锳) LD*c;s:3K '.`=ٍyQjoxVso IztΧ`tXX둳 ؓf&O@A'f  _Z3ӢmL'dCxe{4T of(!F1Y Wa$̸aθAY=6zT8*T҃du ٝ"zbԨ~~ソ!GX{A.#G}(5v/kT޸٬(`d `8H 1F1ZWuJ])ܸX.͍dktu|txWP4C(Dz}&nEk o=cG0u,U9;p|f63ؼc Ev.u\+g67"s ?LA@y^ENI~0ZR0t =q?l?@Fe6 >ai0 F#eTHD׉;ao 6x CA M{i&vu5?%q78׌bk#lN{кo}6L|}^+Mw3QHԝx4Qaݻ̌1dp;K>_A]~h[@Eń'aV*Z[4mlc4=$ީVul?=t\OɰtBCA1aФn17qIgDJOt}dCxewT$  y 8@D Tpp2EjdSHE*RDZic)"U˨@/޿}wqQ A΃yɠ.!d뺩|FT;Nꕘ,s#8 lyvzc$-祂IBn>Щ*?F*j% ]܇##CJ6UDa Bgpcdsd9O͈ׄ ͞Uȕ{PSEËa$/^>; ̓Tz+eJUAUbTzG@"ltJCi1g;x T"f ]@ 0,si+إvlqT%:0Z҅-x'tx Ԟ\цh~#)o35^1e}+KS@ڠH$a2AyukW2b1!L< @KM h/X5H7':)6&4iCK%pD|02$!0Fm ]G%_$ݰ#@_pK<-\>AA|uTnr ģaLh1[OZ,l2їB(*Kj[vH`63y X7Esg !mD=HRp,AmIfUs/㏘:>@@&8v>iPgDB~ &)D8JPȉmi‘NmsW3C ,NQ8L_{*MWǧl:s|8j=eV3E^=grJ݉Gț'+߭yӖ=؝96^SOS]v;yw$RFIcWyt g5m0[@鉞 rOZ3إzJf8z6OjZԱJl-cE@\^28qP6)^7  l^F6K:zUS4KHt׃[XMDEjgK2zT?e `oFV[ ٪<DBXFFxp<حYۍ O[SSX5G01 &aZ2 "Dk@(u+/ ^D{>blhs΢f]%b )Lf/#хdCxe{4T /3WFpᾞnw?G'hNr"[=1K5n_G Xԥ.c?>}yݪff{>2K''"1pKՍ/Ѓ5}`dpJ1!OzL" Q&0)\4I;q/fZ'jQG\XB=y|WFOb8wzUj2\{T]K9F3(8%rIEte7JT*a ]B 4m+Ug;&wZ( OtL>5,m?ْ*bkW{{;L@Ϳ)h$gןe`&kUv#li(eĖX Q/‰$:Q%)2`C/j<*7? h >x.  2I,A tfqM:N$.% ; s-8Jc;H#؟4|a g} wtD{): wxm6c#uZkv\l#aJB(*K][tH`̨NvqXU۵|Gۏ^rly(c QdhxW7'LTX1J ЫMRThKcYX$BDZiu(>3Yi! $&DEC,φ`Im>Ƶ`"(Xe!vo_||c:h=8%YSrw~/PVO0 `C&.;WN530 ކѠHˤR}}9-GZ0cKx}E>all7``iQgDJS\RdBxe{4T ofl/x$ŬcW&fNf{5,fV֑ɣN1ENI[-ީN}κE 0 J,J؁lg}-ضUs)bin1CADD, %JGR_JkD@ͪ,e˙ɨ=«ïAIPu$.IWt}(?sk@ ~եF5Py7Ճ>ߙ'爇{_^>9q+UgQERd JL 9yS)u&S K GO2Ȉ>e6ꋛG H\l&*F)J" hUGWi# zi7OD!@n5\3eN]ޣW ƍqDAf\hP[SS5L>*tPQ Jiz+׃x"s1%I UORݺ/E' TT3$:d*:v[3DR// |^ 1&j^!_(no<9OT_Os+zNPLPw/F@m9 P@k]-dЯȭ=[hc(aR8Ű /m$LNᖲ<@{Xr|Qxi6HزQ$+]uՌO VDnEWen>M8f)GmɳTmZ"88VzIR04{g°\ܫc+R)#H O;Y}=%v|DP@ C&B*C{i>9Cهm!e`( 5@ŏ |d#i0:ݘj56Btю LOJ|ۣۣH,Mƽ+Ym?%kAxu\ z>tp\RFuu8.n4x2ZH/C>&R5nx!]:c[R ' [KHWɇEN B7Z?g?h >?0B0ҙ._魃'V9$HRUxLitD"wFb"]T U|dRI2!Elno|{Xs*٦B-AnV y'CJ*!ƃIO"S;IRMDpndw 5J(ёLzږke'NTgTeRoH4voLB9aEa($M`dszʞ~== P?<.wIh[9|VD1]f,:T  jrs!}$/or;PGP4sX^%0IW פ^?p c2i]=H@ h2fft%GխK3k~}CRN |1wͺ/uɁDe'; S^iֵ3MHu& Ҹ&s uHX3iҴ2yx^\_ .פs]:G\Cڄ濤KӺ&e4I]4^q[3/NY 0/^£ u%\IKvݟ3s]O 1D=]?4iʵ3Ci tiꗟ>Xbc{i:=UwɃ|hz$Ó :t|~^ޒbTr9vLa`טmUGW\*5bFWhCzil8 'N&~@F]C/o WKw5voյ7fKwҵ߲k[k6(ov_A)8N~Y.wf4eW|rsv>΁&Oո \u'm^zGj&?:|X]B~ʏQU@)_kC.]O7la_T 7t  L +=9}mDe9Dq@`wH 19iov:wUb/U?XQI0 1>}mMe-xA*[-o-eO@>~0Z?Cxaڿ唼|qt>tyζչ7tt:|gv,hkUML  ΆwjH[baw@א? ?ץ.B8vq3pgacw^,h|C!!Ӑ|Ֆ@R3-:! ص.ʲzo\ɾn5`y(PIo,*^ߚ@0bАjxb)%cE E+DU Z?#{qz*a3Vp(QX 9HX `Aq\L W ƻsǘck:פos- M|cE|CA,@ 9[Wվp!ڽ `Iv'qD^Ys|涹HGM8\DVD?qO1ⷪc001gˋq5p(fHaܺ XqOp4Pb V18-|kt9b$"*U=5popË5p#'p8n6ۉʯt=3M,ಕű C\?U1]B/~ ]g<.+_N߂3r6 º"!x~ljh>ì3guy i)f}l"I4<͢RyzoAWPr0O;AW24 "4[FdfQc@^DoyYMMv1& 7,~CF{7~kcW :d$_@H(_ؿ*gr0nFEU6{1~0~- q8ovr0C9,dycxtqy8[%h (f[q\![a}!_d=@cL߈io: 5񱿯[&}Z,qRy$Pj|cܲ~s,BTV ;D,rW4!5HʁT/\OTQﺻ4H.e%WR}DɅ%v5 V+/kdiCqiwrno, ږk|-R["F5L9!fNo=AY b۽o\ ^]]3Z:,Ɩ`Jp [PK*;Hs0Kй=B ̱܇=rxgQlƬ>N+Ef %񦀺,a(_pxSK)MIUPL -NM+PMJH,R I-(.) qrKK4":J yJ:J%%J:\Ey%i@T)P s`(Zx5_k02i)cuVRM1]FC񻯮xy4Eƭ5`  |f1xPLsDC 烐 7ZQN0nϓ,ɢa0:o[zdx㘞ԈS+Ӫ/#kczW {#,1RvUMSnKsGxmSo0<LlmeҾ,󤶌uRMQU)8RH"tbSq"ݻz *Uź|c\W\Wr0a pV,N>]|^Co KukG5 MRfiZ55aX0Jp3*_6/cxQD}2铎U usӿwxB/mhp#I0U?KT>_ b*@n656ge;'N j VQbzNZ]EaPHcM.cTU.! +-y$*q) pz ;<_5kN(HNy֚-9elgC0صy>f-:sCW;fgL]> {?b8 u=FI"9lU=#hMl\/P'mzGT>L85 "&P]r&bdnw=4¶;*/O,qT j|]=ssa p7$[vAxSQk0|"d/Na tWZ`P2m@ĸKL֭8/{Rдh3 `A bR xUY34 fejx7$OSXa]#"i瘍 p B9Ķۆ+1#6JvA;\{=I\x* 㥫OdYfV]Lq `풊BّZ>^yY͵i"E/i/baM8nLȱVS-bcœ5QAu3>t2^Q5XJR+>@Ns^oԉvr&kjco]ojE%"koP3MnU''*X'fv4 $55L%UN x\SIY+0|M<#d@ n!K%TcI*fˬCwcac)+]`N{ ߟl߶a#=}S?l_6naM4ߚ'1N:9n' }٪ngIE!WgpŻ#BqDp TV2{QoOK p~lbi=Akݾ0yq.YLU~|2{O"ՙL2Ov4R Ư䧽Ϡ ɉ=)/=K]ocS_me,YhI'!N'7gI4&o`sA'2d>ąm>(Z`i ?Mh eU_Ej?_%k˚AFwװ8Wo:Ž~M~ ոOγjMCۃ$8?}2#`W3yV*Mؠ*6kƪ`z6L'h\1J{ll |$$~wzVQg6[^a7ft(m4 ܎+Z£z{dFvn#̍v۸ =,'i{,Ȯ Kz}ӽؔ@'h>:$oFC$B ŠWY0nbt+StVX &u{?r]God.Qo {d| 0<`s60֟%nJ}Qpq6M&xS!H# 1HNA.N;FHa% d8C8$LPy`w\\w흋,)nt:tg:qVFZa4'x.|9GcL4%` 3}dY ˌ`_ҥbx:G:>Jb*\`Daw 1O2 gb=i.i FeGB4n6_Q8M/'r=V0_t" %+3D I`&G<Y /d0#SdwҵqB 8䈯,(d'{N]jDn#`؁ut~li-ͮV ./}Sris\֔㌿xqn$Zz麡OG eY;#>/UW.x[/!!CM/*r=JqwI >fP֐(H|BSК!$~l _9H{C.ktiJt|5gTlժ)fGUZ6Z"&XegWGg',B|dZw>n|J)c2P,b?[Ֆ73 :ݼeCQlUN Uq1aW{-#R.l. QvMBy[}vۉP kQi^dJA?A"q9TG]FWA!PQM%|Z~Y1K=9rL {4ҁ'( W֔d\F=R$ >m!6FVQo3~6{O0lp\D`+g<Ԟl= UE^#1̤IX$hs" '5'<$J&g>}u;?F]3%0 h4;'"ڗ$pjRѱU6Kb(B¾1/LjnY׀T杝 "$dAxh&tbO~cW5Ga "y4+OWi± "Ps(~P{I3&QANA}09#9\S]]#Ak-~/ w(=@kUZe] qfj2I<1jUdbb}ѸGy'^VbU݈:FLQV+pi+Eb`ʊj_%F7N( 1D1;_[3d{ LRRyyqlP;q@*UABl7W꿊]aE*]Q1W`a0:5tth*kfY%@bHB\ذ$u,ses7\$ 5`n\$%|l:2M(R%@\e$lBZ5 @"VRqvЬ].)p37\PGOKz0 M"r u;frl)Lq LqitŐ(@R>c!_A4+̱n[Բ[ɛ* 28 R*]'ER+6!M!g܂G!s4 ;\T[+S*ͥ]r,C\nMu୚J[%p!)r.zkRY5@SgٌIPC?c^"! Bp3?|ָ=쁋dY)+)q[}#lQb4цռ%Dİ"r7 ]A  yYpJ3d ˴̙b% g^J/LTgwTiQ^ڑ!Q LQ.Q8Vq&<ʛ"xƻ5:R:xI-0;ⷹb Xw%}XKXB942KJ:sI1#cȢ=8/,+@] ))DNwpO#'vF&ۮynɺr1f,OY8NgV%[ 5s}fWt:fYc1A(, )| ФBoR*hZz/:#'X鹦d; hc#*f RqL·q-~lW;ލf?vJ4g]6=!B10qR,9UQNtue<|mNX? YW%O9q+ 7TBc$&@m~4{p'^>C561Zru0<b:ljd~A.Vu'7tKN 6Aڂ?OGz'K,ډf <|!<І}%n h^7[0N~ة;DnNWӅ H q;5]qӓ#eRಠp#uXp| T+qE4`(RU.^riX'w? N$#^Z/vșϠ縉R@Dzdv?xy#^֑{50 1dx:r3DZuVTh<*~rW񠳗ϳ؃( GB9B%q;/(pLk{Zi%orrEQ ĂYI5g}4x:JXP * Ur158gCX2jϩR] \Ꚛ*1.pVRo׿`vkړ͡2T0 nk0a.\}3 ۹h=lej(-7–K0qJǙl39@4ȅ3R™;H$":$a" 锎9T,ew"bXlrQ),EQ]@EqNSʋ=c )-D xZD+XI6֤B+QU_"JhljƽT5esoѯ$^` wXŸP4Jێ+A|FFoAYZ\yl%1+L 9p4iyZ ʴ^'ڢ$l2> @--@4Jx-\X6i\ECb m#JI҅{qIXXjx&dՅLFh0v.udba8^ ]`p#9ۨ/v7g dQ/BGN6'a˄|oʱͥ|a{ue[`;Yԓ`V #eL1hȃ6Ji8"u(|i lv(l']ni>7!k c%*(([C5*IER~Z&j|zFsz|zNX+fGe% 7;=1ኗ ݆`\"!4Kf?@ڒmDnkcQb.|`%32_Nn⤠<ί`m0a'ߐ3o@=ME.kX 7*(c#=:ͺ4VKֹk(sCGGXܯ I۟x~1}ۼ  TpNW!޵7oF2Ԃ=Y̆>* ᣣ47NY[n[m!DD'xx @ v 4j,.];߂#'nYֻB(iWJt~q},TfIuQf^ c!xbȩ'ۃ|hE2r#x/.lYcݙL-J.n`j.+KR,pI}nDZB;i!2\"#;@B.[ܭNgoݡr] ݶ/߀\aqvn.dߩp7r̠c0۵~qoNCQ[q70/QY4 Jk g3Dzs$˿r@@n(y!:cq͠L0% #~ρqJ>jJ9FD] '<{plEuK_F+rxx$g_E68Ue9Ho K @kC)vp-|f/>n nDx}ToEKI J%oBl;DAƏ! @鰞Kʊ@!D%9_p q8s ̮ץ\vg{~[:[q$[7Zo_ބ($RvT*v67Mo2Wg'//׬|9;of"È4 a=~,kGLaGPxM[,HIBmv;|"k_?]Z Y>URj7K*h ϰ }kۢr=)FZFUZjc4(:ê}W(\Y\{S򇩕$z:SPGHFA$i[>yFo;$VK7A *cd{!R"{b}y0|BG$4"CY-5isJ'jP}i;rt#VȪJz^xȾq- M8lB r?#2))hMHXPØ8) 2A !P0<ӘBdp|hh?"k &aRR nT@ndO770sNWT9@rrim5SlSAȥnDƿL-mC'~tW`C\xhfnk9IEC= w[gtan:ɹ (wYHɉ~~>*T~OF ҥ:7RZ#TQ7"OaCjϫ+ :uqBMu`yؓ7Gח /%Nxk^شqCd}mʵA|+xkZ8qC L!Ř582J3R730X֓V1$LfkO,Ԙ|Mzs Zi; [ubub u՜u*̅2tjuKKtKA'pѴ I-(.)uN, .)Ҁu2(xʂT%+GG d_P{KUL> ;T H/ȀرeslTa_əiZ ?jj$EIPR-VpsquSpI9\!787$9CoA=a[עbmmkҜ[7G`W"|R4\2l3DzyR&/p5Rjs+kɜxiV /O>W~<ɝj}GoFMs+P0Tlqh)Bldwx~11N^jFY #C/t x_V;c; Fɦn=/T +100644 Makefile.inĨgAKx.;iL0dC`JUU(VԹ #(sޛx} `TE0%bԬD5@D&5\`(!B !d7#$8ukeUU <QAEEq@b ̿~yIX/=ߊͦh^ b [ %Yq()[9]qz)=\ w/QAT3,OBzfӏɦAD?Jg y<ۻI_&#I?F9+5?Q׳鹐!8S(Ë1Fs<=#qMTz)g|=v*OO=c!cJ9q=ce|=鹜;UcYd3:k ǼS-bZK-JljKS,ixoR<>Z?dw%#+|QbC<^yR~%f-{%}%l)%^n)l;RH{{;> Y`hK-oPoG/^?osv/?jIR_%}o= پ[?iWKݒK<$yo%^h)nO,}0?PYjRؒmI?Œ^fɖ+߶Z-_KhOxDYih7ђ~%}%=dQՃ{;(RwQu_)fX/{BocZF% uÌۑ#*-X~!x&z`r/1ѣ@ʟLSOxq6tn_fgZwX╖OZ`%}vK|&cBMm -) S-@̜pZuJEE֣T,X8W)+STT-plR[3jRTYPT5ު9rQW+*^VXXsR[̙֔ulUVѺ sTeus(5++Qfͧw R]XJ_Y* uf+N_[[={.+Jz;[U+k+STFk˩ՌnQ;,RU.jLJ_Xs<Qx$s Sou5aJIu6VjU3ދjkWJZKu3s`vԖ\KpZ̮]S(s5Aj3sfV̝2*͜͞.OmlA=F̩\X[,&" "HU!:~Ι'T[Y^^ NscfP/X\=gNym-ϛ}(Φ_0{~r}|>tUEMyr 5P4S0j~gR(%,\^ɛ+() ̯,55ReqS&Y0uI&)Wn&`]MӘVϿ&bR2^"UIjJ?Ok,WK0)ཪyJa3;|w +8_/W)v=RzlN ^o-onqls|aw]=e~?LKY-.) }}hQy)Zg*ʫS[P(bs LtKe)!) !p݋™,+!aPO:jBRnh]p1 RM˛d%Bܚ4!= !-3!}a_҃:HAHC؟I.FH,A8 <!MRŃDv&]!-U!؁p7BR?Cx7,o!$%v‹^L08oPS8a7|o %a$"(IIOFXLp?/GXB2S#,G8tWP#!)G85P#Kp?B VR#\@a5??Q#GXK_-Q#7P#$exo#t1ʍ.)ߚh4تjHԏD!gb2Gh -Up+1<0p̓*cy p8F&p51 =98Fp 1*=0s89-qR,ē9A.cz`Z+tn?8FqfO՞n?1=ws9QY8Fg55~c{r9)isqH6n?!<;ssR8U6p#㫹oWqy[8zx5[Mp| ?94oG<;wq|'? ?G0{x}~ss9~Nn?ss9)isгqHE6n?!=;ssR8␢غ{8iq 㐪t$"㐲dWq֓x !u=09 \qHaO8i)Bʞs8왎x!=O8ǃڞjCz{o?zn?!=M~C{Zt8g~C{p9Yx=? ~7qs9~3?-~~?GFWm/)ܓބɓyvGh& --I3HY;| IS_%Hnۺ1"&kw7nm^Wv?m oߺ|[5Jnzxq6Gh)5isoQ[qPi#B$U#R̤gbr'Qu ᷻C9mJwc֍\6-Wi'(RFBDOlCJݜL%m9CT׎ci+ܨ02RD&2g9;"`> Qʈ?53lg@'E~+VKv8[o1>>^;"-.$/DLю{Jd((p$'C7Q5,FP})"WRV^cJP 0͊s]+޷L5BgLH?ӆ\)JC9b g#B'E D,BF{Z#)xQbUH&-YzsQ *Ǐυez\ ?DOQHG*Q5 <y&%A9ԹZ1OE1nn]-qoN؝@p*㵎tBY& 9S8&:K1Q|B􈷟6b MyI-!]e^Μ5#s|OM3X4!FJ /}7ɀrړtl8h9&ezoP_]`Am#ȢPF"n7Q~Z^~gb+r'ϭw "='N0B+NGr;trHD2EJ LJ@Pt0a84qv'ŅO;V=`e(yvz\zz&k={k|FU c$-)kC{kKA;l߲}@N%Ypm3r٩.%Qz.Btnndo)C%xpA>,HD>{A֩ĚCMiW]ع=ȭp 1^NCpu~̾H:ј®Iߌ42u?muڪֈ%r%yUA Osm,0)5HML8߅Go+Ir(fߩGOSPnj5_Z%̕5-1V\HפrOP pY8J1pLNB(3hY/, Fg:KRѫX!DXB$m "1h n F ,ȡŎgѤf!XTboTȗdF~wĝERc4{ǘQx( 3D ݉Dg*fg]-5 L ioU i+DՏ~ۑ] k-緱kr-Y]{Q&'|o1ejO4M/hrIC_Xq1\jU&*WfR~}}ɷ2u` :D[5qo'?J_և':Hd=Gc%H6@'H gbG[$r 0g*ؗ~i[4ڒy3䎋krtVOTpKPzh#Lfq%Dm(Mz*g LMP't$zgcwEp9.+ċNaQf;^QM쎧u;W[σB|MgA"F0@d$c H= kG4P И H~ew@̓q~B-?-d=\zffL]9귻S [OEO, L62i౐L/J,C7쯈ĎqJ7yi__ J 菐0޺d(?Fso4rWTCP0H0;]2019x,i][=B+v`)=4 Z̅W}tcC2I G)=տZ~c/tka ߻oEԴkzRO_E8 ?{^z|'kOߕG|~ Z+A_=.Ao}V/{mwK<]=ƞ@O9ֶh]#z ώA@ z=X]=v:,A;@_ЧzԧA>#7?HSwOݸSg=> ڶFszTws)@s]jʺppӻC[p`=Ytlywe7V8kloT" I`vyɪE]^kxwD/ zI[tD x1ʿs=~¿[''8FlN/u =36m)vKϔHHܔv%m)"6RmJ* eC>2mL{Ɣ")]vL{ה%m).LĔDi{LiW˴gEjSZLˑi5Βi2SZJ7}H&n4շ])ω4)EiLiiy2\-i;Z5i{W["~6?6~?o6~6ȟ݉cݪbR:xSaZbW #Rܐ\ڲr)4yY>Nkޥ!ƁI@ Y|vhddSU.h7[/x:ԡgElL ng/gC ?I6[:"NU&.>PP+lLjXxe9XnV@Dϡp@^r[aGO2BORw{3J$305ht[AUwPz W}MSƨ$LhUg_t[\#dߊnYwƽJc3|B Y0t, #͊^f=d;DkީV0T2; cwǛB3UhGS4BVߦī('N>zRE:/";-ԝءV3ܡ1Ahl lZx\6%]u?nl g/ɿXJyHoy_M{Ih!#Dџh~kM~[;t?A5L8(Wpi_-aVی}`Dnk,dʿpl1?>1٦kyn7;F=7L!r8TTb?F " RDz9zlu8?^zDKY.229TQuN#d}VJ ~h{)qhI11@k~ =%ObSz,*Y)"H']›MbvN ty( :5t/_Ţf~4(J%3ܧms&TpUfy„bn4 TI6w5PSB4b4CSy78K)C3ӷvlSTV/Cu}eS4' lJpjkÛk2xhdl&ga2.||Eދb`{%:? fո=Idj:7G߶k/%5 dK}OOdHp6`YD{(9hPHr'FFn X">coP%E¡RVB Gfy&1¥ؘ}{Oj|;9A-!8N{eKA_:6/(Ż$-& w ^¶1P9˚ bwF3qYChi݉ 9GOMӒz|f`odL/?`'3?kb vq9yHV;]D>5=w""mm¬Do9> /b$yA3'/vENC ɾQեQ[^FHx+pRwssP~;܎$8.m.,?jC8x' ko7aR]Bٞ*FzT.!t{B]|d}mT"S>S{G)! 6%\u5|NҸ!| b@ݭܘP[.V=dz*&7O(X'J,5dLQYTlHBAȧVyz] 3sGh'!u6 M>a&Zl҈*Ά[*1 ʦRwG3ЦB*@T?tگ fFJ?ԋ3XI p*ᖦ(GBGb~ ^lxOj40+ $ٍ+{(?_˟l|&x@J~g>&+oD>)r^EKG{Tlf ;ZUR*vB 䫩 W6PNRf!J_tzڠ>NaRVYzUl3Mzk)~ǧ y=A7 =UYty/404/,O4 }fZET}\A %ҧwu $ZUO?x6`6\[7Ք"n`b`HĦ~,_4MG;lBh$)ΆXdllNU0j>ti{|mcNr6«}9]jkت^\Wf#$jEuXd?8?$"]\W`s3DSӟGz*`e%7|u?S9Deh? #|͓jEE$z_DJݓD4)zI"&5 ![ϥ 7O|C [y7RY٤I"n/]D*8B FCojGF5qbIP,>0%'Ԗ ]O ߻+ςT8 ]-Բ 0gbS#-ŖMpA$d.'ܪD01|e7Gh8JAxԗ[x_㧄eV КWK}%H6MxMg)`="(mX70|3l,'CQWek7J's LJIv@ D{M^q/UpY9 O_}Y/<|Pa7ZAp;&ԄCxBMDmT0S3'>2YS~ID?T^RHީY>liVIof|\ "שZ.>'98=$6}Hﯧp?1΀}BOyM XF[Ę)l 4RQ9ңԇETwbE I%*ظ}!nRneKnĨ:&'oGpy4azE "9/Ӧ揭eӺZ/z$Ȝ!Ső'Iȟϡf<v9.ڛmfc֯PWbGrq&C88V(4D+,V8Ŕ⯶$YQo ГIQ(n)J+MG5%Y(a+Y1$enm9IR , ^& 'f}4)P7F*~wsEmIDV .&W[O ;͠1RJQ^[b*EqdmP&&Q #{%Wg,L6ezƲ^D 2 EO} 7ʊϽ 0PBS?+ǥYߣmz:Ċ&Vz.rLr@7/Y8 G\sϷwWlIk9/|G ~tL{( NFh'kl%Zj@ ]~ A:: ?z b< qA;KŴY!J4?Xu'߉/'0H ^>pp qAq{P? Ls'qZ8ӏ|ߑbE, ^~K<ػ'QB-u'^q̟?r+QuX$]8%XZJ"hqCUtEU8IL2g!IQ_YGM˫x}WXE^`5_[!6=l \!;aX&}T:.BZvD]Ѥ߬'_#SJ!Ϛ&@kx~Tv!EI.v:,:ݷQB] Z:AFmغɾODz$aM[ Bx" 3Ѫ)}ũAM:._=kc@|dE_ss{XOظ(1rU(txV_Ek251$" YWDYX 'g^, Foj Iy_~D?ogSΥf{/l$*] KD0媯* ֌FZn__*Em >ՌiU"ӟ=%C;)guGޕD!)uMŞ%Gj5uIjӰ;?2#F\ i3t <ƢeuD,zkG`ft宵 %lE QG~)#x N9!ҷ%:^0/Co\Mp6,szP[G?c3((>r40FTO La%[܉h?CMΥt3b[btދ;Wq~(@ҵ9|fq3sx?Yfq"}9Pq|_ޏ"`.uMj5 sM /cָٴ~Cل/T6*D}ڨ"B7~й=́X䫼iAl~{/Xۈ[!f 1˭Y<eL???j Sm w4־F_¿G1罦Mm3Nـ-p?bK3%P.h߅Cms->L/4y `]eXu(=;jMT C<FZEM;Rk4Y#47[ 4hf,0Oߤ)79~\] k͗E_Rz51u=J`w'ؼK6j)xߞhge&{lgNy Qxo˓.OV^U.w[NIHm= jgn֑J(I*q_?"c# T5h^%1+afs-PnX !qQo|܈xҽSH[-7 .ųѱlŕ.5,$Ni i{W6mQs]>i;b+խ@Aʰml2Kh&`mO ho_/Io%1/'K - 'hzh#M_K1^+,&Wj͠$jRt[XF"-o^|1zwէ"l* I8mվq!qeC;żޖcgSC (.A)|P]p:9ԀRmW;O=I|2|,F8W$@u[c,C N ^u_aS\Y{loGrA6jՆN׏6þ~a͜0ү`6y ~ڡ"S™E7jx$@pk"խϔCQۙ~Y0;v KdϣhqYGlik﫩kc){^R[1N ӌPj'TMP$|-nwE9WGl\ҋmuЂ k]Y,iR} $J*|sW>1Mf!i~I%$S"ef$k5sr+ŔxvZʊCGC| Vȶ0j\,>I3[? t d, {W.uׁ[[\l֧ B4#Jnw&vmgY`?B%(µ7ղ?l LJ LM&-o5)ͿJwP8۶S)c>6nUڲ|z=M' CUκ7;C,Ά}ay&ݲRagD%PO[m< 13SRrD'U|zsV&|hzaz-Kc>Go,GE[_j xjS}7+ ѝ| s$?c;V:Vxy>O27n:IjA$yq;^B+֠ulF5m+,??I*'.@U S#OZ&‰ӻgu: t$F|w#Us$Uyr{6~R8lf H+p{QI_TK>Iu x =UX[wsK'l6OV\'xsRt7h }:m\)۔эA{ +uq[Gקq\O~I`9M'ճ -e'"L{|}#5rE6W+uϬG@n6b[8&7.sє0Ugmp6X;O4Ж_m` JÝ{ cmB Iz_>ޯ3oW H/# /|FN;$lZ3clѢ9/QǷgؗlR\_gl90NT`1^oJBo.I4W6+9<-='.O4@0>nĻ_H%ӣt#Ae@M?䬶eq6ﲌZwa[Y`@`Oj<:F_|J!)vxխ)ȑG>ŭ.G0ekFJLMޛAퟋ%2_\lٸuˆ%06n<]^uy2vn`?P:rmQmYߤ. ϟ D6u"k}=ZdI8pٽS?n8Ql&m9󫴾_ Jn|'e_bit__i_?{1dT`Qӝ}0q.jvK,wgr0Plp֛>a۠.ݔ+>;lFoimnMeI# :KΪ"CdMAVvu+46B3P4HRmQ3I ]R|,aׄ1돘,J0~KL Lˬa.2 9c]""=?|CM$U=SJISpgHxj{f){(%QR|O'h<](Ku;.6˿|O{8/fg;&%v[,X~5FWL oޑN5n LM&?8k0Ybi[pj Lu:hRx^^Rykc橹cͻX*ؗXhᵢLm+4b4n%011JjY_SBEFv goVΑ0SɽD!= GO9LҙL]p$QQ-aq$5W> .^|d4n=a!G_:nNؖN&VrYpC)R>C[}!a;jYFt4>5V^X5&.4ԁ :oj(3w-u -tAoW~R2 m9z BIjX 9G7Fc^杖-ݜSrݦԘbib:`jrCq8`6}tHYj/ұ[nM]-juNZ `f6CG^6@]3g~u9{c̆@{DA2ɫiFU:mUDO@=#U-p~pZN8ĩ|*_/ש|2؞U7E;PШ3G:U*>;ݲ:Hzi<3֢pr Gw"̮q+KE?*ToIU"|ص}4;+幉_Mx*L8ƾK#ڍ6e< O?b2sSG˭GuLXc-g{os#Q_}m[Wʾ7 R!率Y^sp'|#_w6Iٯn7gNa=Ӹ޳[B<8V|A6XH][M6HZ6+4U G֊=.VL0W#5-~M?gr,\^hЗ!1)2r@;g_ sճ䍕@4giYǫDvO3;漰15?p?a14ukQ ~+ՀGя]au>I"xAw/QNB*V;|pcU cX 3Tr" Փ+cL#lAw4F>޿z>Ӈ yGz8IrD_-vWnRa2&&P" 6-ku2jRkCԛMb#NA:6[v1΅1/ DMm9O4ˍ+~O1sv_S*`mbP\ࢴ]Ut w.#W.j+-(wY3SxqNҥع:i"•9x!(&|?6@oSy>{ReՏ? .31dzZODq6deP},${:6;m][w/ywɟޥ:vp"LՓ1Uct z-r̷)ݻފM: $^tN~S77޵6~WmcK33/oŕ7GZY|テ|D_߀}d,}d^кIYR= Jc{[X%ô _L~~"zNb[w\aoaIkfFƯ:|IsДDݛ}HTAS߲ U?ZL(yaXoW[>bm}5WVKAZvl >ǚqAHUMK, ^%R"giI6\,nI&;c*@,hlgnjdPNmܮC8io-~3S[0EwB_9[ r(B3SÀ+\ 7dͪQ̟!uSR?e uS ű<|#>h뽋|tB;<ڻ)b*NJZVk{TT}}:P;ݨv~G$;3%Ƈz_y\mÀ hk3Nt Iaj&F/p/n Sc9o].fb>=|ZN{maqWۼ56ٝZj#=rGHJEַpp_YyJxu>E y[^f9'#FRFpW` !GwdX_F"T`g;̐d2(xG(\X|6]W=wM)20|`J9SA7vvR dKf?ɉVKqS}`uݦ뵺czT/bscl?ʔ2iAo[ ƈ; f_ LX7|>g_l ^}7ppn mUIF\s nIIgqyiM[ypMEh /(|IQF ~0:@ ]Z|}&suV{ o^Z2'ĎUItldLJ\r̥h.Ah; >!*s$b-1MW˛wj}O់ߚWx?VhNL6M9ܵE:Kɇy}'Ю b.7n:`xB8ěЍM OdzY+xCp 6}V\e䠯ܒRD)'l, әHL\ ]%&- h>yP< +71q<-c( B`dLFQ.%PFGRIhG[XfǺz ^5;PK5+Ͼԏd@n9Ե"1MkrD'2 œ9{+L ǥ##;ş+.6+ivG ͏c< 3>ƣ0e NEߺVߥ?;!6*w/_pU89Y +)>O'K69Vi Dx&ܽrx]'<+bTykyUsP.1TwٿyR~B"hisۺj|Ģk-}!|}+~8xhWJ_d/h_(co+۔lO[?qhj!pE;_yG^3 ͱ vd>\l'?\gE;? 6b ЍP$$.Eۅ{8b.?q]>c۵_Cњ=?1{=Vk0?p}- )#gϜIx:PFmfiyzbyM}qȾ5^w, 6S·A4kG[Dީ._Z&IYR|1N3Aʜ&VO?3?46{$< n|cqՍWlF*ik{CDͅcqH% |P^lHr?ZܯhfjNq cyynR4WsqÅ7'/›jXG5oQ+@/z56ks:١Mz֡XI/0/['b׶x[4jPt=7Zң*c339-GZg==96=uz~N=sH =w=]435W?!EJ]:垼3q$4 n+TaZ)!q}͗.4v߾k!Vo& p@> $|$~b7og\ۢxUo ^Zx`xKL<&x3ooGpm&x:?N ^{0OV~k9Eߥ?yc_=yk}m lBpna_|PAĒSaZ,R䔿Rޓ)7qʽdʿ8aS=29NyܔRSGoαƔ#z-rB0Nd~-dWF{?%}I_FnGª_?G WdGqU9 8l%oqEG4w,e??wtCAXjڙ&cm𷱚gGy@8p8o>xl."]fSbq7>W^ )<\6-Ҷ|W7|?n;יJ@MbR)EGw6a޷]ۚUTlh<}c|N5fOِ=\NtY]0g/*]ѷa 92]/6l\b+(P<_VvO0rd>.&؆^o*!oV1 \NտB:i_0z+@@B>7?\@ 1hV&|-eSiO kA1fwQ7z}Q)SLV"|ޯHz5rWV}|Yљ-.ClxD'? :?\q)Ά%|r6#{ZЪV+ݩu["#)n<,Rg^5lUt{?`ОbA\]ht,9ߗoR _ I 48+Jr6Ÿ%0I OeC0%Q@IEM{8 H+&p4:M<gވ?s]NΆZ^|g{${VKt;$ 0Gy xl FyMV7zy$:mc3y;<5<$F?H.gb,n_gqfWoF赓^}s㈏{UlXg7K_7}~&lX[T\wh ǜ4nUG.oպCnu<[:$QIM0(/[!)RO??' @[LbW#{]G[2ޥ0?SЗzKF^޹WHgIタaWiB ~֮ȗxZ_N%"ö7lAﮐ0'M~E4W3nr2 ͼ%.WC.t\_5ʮF3W7ыQ!jː~`O UcN7W)2Om@7ҩJo}kQm&EqN#T,T7hWXl9yޛfibI K@:g>14pT"V N, Mj>:HgUܙ4?<{4<>I:bT|]|9ȐTAuW=X|v0|(K>-j󏸇KqCMCCH$%Oꏕ8k W[fw6\C-Ef+*.%O30(ŋl11뻔TGIMr= $҉#46ݩ?{x( MX>^j"[P-4Vޠ/,qn-}+h6dz,{ȡl罊:5Gq޼GY)}q/jS6Oer;w$T(a?]5my/Ys\Ʋ_#[|4BTN|cvS4%~ewC_ɿd l82J(~~oQǻq.7[0zxGзވw{A,ZOOD^MΥ>(-5RtyZ 5jW,~Tq|OXei*>Yq a2NE $1,R]^Q$(ۧT(ngS 7(5)5g-~3 p)ҿ_*6*;RQveap)c_hRLfqT˘r8M: . q`=S wLV{']^eUbKxj—@9klo}J?8ڝ /JȉJ/ڦǷ$9`R4kZZL"8萷ڃrM \ݡAɡ{+ \nxkofvsU;tmw$@IW,֑6zu ?O__nѹU"v<ĭf=씥A+;JenIr-M43VdCO?ƽСI]p69B6N_!Mf4|N뺙4y~5\̖\ 䗧i='\3b_JՖk|%lσM&/u Qj"bOI[?f~MQۃ5Q,N9k_G( Y/99ԦSOtz2zc썬LϺ;*Von11{KF})b9:^9ksNr?\&$>_(4wIj\N=-R fMO'qN0i#-4&-w Cǫ<]$*&Ŭ2}&W};'<)UJ 5LffeVLd:&ĹB R^lIMMKt7-$jj!/^B1tuu}WoJM>\[5+{,ilzIjcFc~m)U%V'~Ѷ(cC3kxLxu]襉 ^`qiv$,ϸ> :,[('OP=XI-NjKp)_,6A~x@ryQl{(=_L=w^7 &o=} XT`0Q1цTTAQQQѨ&ȇbƈSVVtȀJ^R4S$弿0}}㚳^c^{}>M'돋k=EZ,Ì(.ӉO)i|Wt0Ofs$/JjU~sǽ˪L2xJ^b8W.tL>](Ybh}toKB1EqvՕdjETl 2O^kS!XN-SF&oz;ݖqE+ `Ptaܖl`%%` XBnSN-S"-S [mߧ4^7^Ɓ>} tV2~%h{o(-Zi (~d%Nn*HC<6W nTFB꿟*;e? #?ޟEoY$H$?V:)"̓|J""t]IvX")y \B-ZbfȒDe6ߣVYH[sZם-C@pnyV ԉ*JOiwm*ۻ+i}C*o8ۻީgY<_eyklgWJP® qKjtG;9VZeVg(N;Vjt0/<_]c5 &D0 #ލX)Zn0<?cқ~!&x(\ͦ[tuNfCuɂ|jd-*ZYvH~Ė2eWrZkVH9vE;&zmZE't>y^I/ɏt(Xfo[WuSqbW2zF'cW">i *piNzJw>b&A>.{e26?<@/V\B!}C0ONE: Cp:Bbن{﻽JER(YRm(`e?$яP K %5.ӞlC#e36.g"$5OYmM/TӱsQ6wM_[@c:jlPS$K2b?lq?Lzj2/~;y_#` my}Zh3ɪ_x->=GQV2{XpUBPſW?:?*%G0X-~t\@YۣpԲis#h '5sqR) k_G  0(do7ϚDn2IYSYfSV:C:bUQ(̈́H]5jШZ'}N^ecW0YV;dctQwyl-o0b/}:=}b1r@ b iqlPSh zΡƯtug`n?cхYxiYc:|O{=i^%˔.F &-z>@жlH.wIla2*! děxw-'f;}gRIEFצ)rq{q fZdn󔾖ZNw^36 #2CO_/(O[FN4QvtGya9n;Дwpik&j<|4|-ddۯ`)w8Ed8MJ~iv ,D3|:BIW ]_9ނ$zŔU?nAv-x"mxgw< l~*إe-zW$~׺tu/#nY<켔ZϿfY6)˶ci_MSfsՂ;/LDʑ}&MЗ+^:DzLc<--LdC-}c篶c[SIMlKIo-5M0&1!\fku(2X<;}m6oYL*!3Ia{c>]|ԣ,`(b|eiȗv9,mS4')UעԊƖiGm\ꥧmj/|/vZl:B}&'{mZxv7m{؉~ͯeS&ya^>AE>䇮og+^BAlwj^(L[ԦQ"+d $S4tJJ rKLjjI\/jeqmm"UgA\[5g3[JT,9Ri$?)71m*թoL$KQt3N?V4k;(j~R3 QU-ܼ.ښvkclEqN5٫d7#3SY1n%I ʈf+9 RsMa`j՞I}k>kwQPdZMEMJKqKT%[ퟐW jɦ'ZKjW/P>Ҝ0d!~S_̇Bh끏^34c@m2%L&{:*ﺷuG%WBBmQFBj.jL`oH7c)^T#W] 5N._w/C-^3-^R45՜vm]"Neum5Ez6|We'Yi@׺UԹMkfS+KI x(.ѼH3o]V3RMG)jkj{+SUNRc:zW͊~q\WMMO^Tt. :G=\5⮺G._oo4еEqRPs]}]?_kvKaSѷrOg8.׀rߺYH6uXn rq(ۖ;.7>rMGPT(ikvGŮ|IP;4t\5vLuiÉexPm߈W_K=\~:6t_? +z.׿b_GHDsM-G+?=ʥ&tP\^ |"T.5ſRnxSefqGAo0W'S0hJrRAě+<\fAMp˭kl>UnM5u4k3WL(VGx|WP8PéPN :йK7QeVzW}fN3ݐjUk婸Ag+m̨Q|{}NS'}ZIxm#&a}qܝqRWjko&됵ae")8E߿ "6?׎0>^Kf}|>9U=nsRࣚ:,}MGhi-wE^/7VECMI־NJȿ]_hS8oL+($}cwLPvŕZwE;Mڊ^7虶V4YnުIYTqiC5?\59WI D!gEDgĻ\?*MQi=! tmB)LIFF__Vgޟb-rFKHn~KH֤X["uW/]Qo/I+@& N).S95]'U⬳03}Ϝ 0բ=W,µ4R9n^qڋ5sQ/g؇/.Ս-p앉%):;ycԠ饸^[␊F`IAX֙*VP1ÔaD Ôf{t; ?SWefc[B5`BWc[:YsTb,;rДy}nҔTĨfj݃G|oC8ψ|~Y14*U 8z-e|3tl+A[%H/YD5HHT> Ӽu śۇ1ЗЩld ̨m"mgBGc6F/|EѬ_AfjRS6vو냦@N4CYN:_X\7ULA![Y(Byc7j/uYIkI;!|7F]IhH\&M %ڦZOZ8IP*Rz}60QYFBV.ɭ\;!XLlCϡ/Fl>eAhCuWaġJHZF ^GPsE_O:ys>cB*X0 9ldlYĨQQ`Ȉ~ĥ]K;8t`PB&VXY c y0w@7]9xsN11`eA]H<,|Zt+Ft0!$N $Xa@'begH D H!G@ PE} c^D!*8dJ[` *uh#Btq zd*\1eqDR]qK\>Lo`HilJ+D;FyIV&ԆLPMQZ6oͲY-LID6$@ n4֘cʓА ۢGÄO5E͵Zj1 8]53MM0 n$WLa!=|%t fJ?0&n 4 H27֣5XN`l2_C.Vrq3̢Oad)V_f3qmo5pmD d Q I OW&k؁p~NsB.;z]l ɫlP)t,yH s00dy6pjklr6T |vtއ@s*6#ҿ2yR/`0,L&ZZe_fD՘yIy"W\"o9ܓ(!40 JAC\51B!>\ \aJ »LDTS#)^n;R}k#;ؼɂh`pme4DEhӅp!\GY lJFLd aJFF hFEF˜x̿i-1O tA#Zrſ"xHrmiE'@8Y&R&04,W\ nSE=X 5o%':#9Pi#D8$+v mra"<$[ G5owEM]ae]|\ՅI W+ᆙKA/Sσ 5A@h.l1*7,=Ć6ʇ\O]1]QGG1a(AfБicrIXq*j@W'sF~Cy4!U璨on$hǙϵ"q$s!IL*>w7+paU(:-U1$F])1> sT0&E 96k`_69!Rfl0tDC:f9beB GT&%.RGL@$]'-Psr0 t!:6TLfS OZ [feϔB)ClPU~&S4IrVۑ'L*M) &zֳtb=<&^Xbg dGrblOt9@.m_dLY^*SJm5j3"eǍUXǍڨGl/mimce3 \5\I%(*NeLFZ2輣b2&[qB#~c}u`uܐ}_Ѵa=ze9>oEoЮlIj9wjAǸ:8ex'mٝe)R(קe(Gf|?xmi~5[ec +,KzYfv_BdXMj6Onb@3S@u_̽:@Lbw v0tȿ?B-;$~gI_Y5vmQ'0BۧeW>3ejVM5TPfv)9 c5g֚Z "Ҹ\ldbշnFqYqX&+}Q&}}JuWͫ~B07x$nfG>jijk/yF>~?**a<żZ{L T9"?`c ُ6d )b4+kj]_GֹiD )b]{MO콦_Mݫ8loekAHM?58"守P{+b|%P`dOXdld>>(Ї^%IJ.' PUqTE5< K FLc؆U֓DhB`h0SV̇3cRVIqXLjYo?B!үtƼƕm/KRDc҅P%Iz35浮4xĴX㗳(ssUw=eٝnٟW}@d,Kgj3m49Z"D[PlSü6}kl7p{ͼ(@[Ύo; mNV Wi3kPˈsIZ_bJl\oA>ٌZBo} e w HRj+g^\VMrO]_.UPmg}Af2sP8jr*m ӧGSA^%"drOuw,W ;kky(oUCien¿"4z _yO -nɒl9wy|aGNٲҖ[YHuλy׹b~\]? -?[t㖛$PP}^mW('1Z^mAy. 0KM_ [ 'Jz&{A]zf1ӅwCr4ey|lw^A>!.Dqv&[Gtllmc bvGopwgqog_Qe6±xF&W&O |2Mu/ -24ΒpzOO*^ٿǻ?Iba7%aWͥJӃ]I&vof^mv󹺩q v*?\͉ND*:Xg[ʶdsӧa}-@w0-YLՖ1/YR3L[*k}|o`$Zj%yae36w-.U#_m`<ͫm4/6l1$zZH?}#tbKh]CoTJ#^m qٳ׏b%-Qg*=;Ii5n&ԇoPabӇvEp߯~QZ"0%=R{% +35m06XFKLQ?Jm'ziI5~giLq ՊP]oڅZWDҾu]aՏ6zOё"&,@_ #X{.wq:'4oBJ'}.}I.nv׎U;/|ϝSP?1ѬKzY|L]CUѤװ97a0l!'aauxK.Ds'P%PY]M*]*RUH.ᬀ=k.9[˘~W'0]¬Wj9_^e|TuB#,bK{*uKt-EcI --ɘ/K6!dz̬3/9 CYBNtZR2 r6k1 G<4pWȑ8=]qO[Y(<<P表}fG:h.xH&󣄢py񙽮Sg'O,ٽYg_>p-=utqҊ^D?߰j-G|wM 6CAm|(.H_7&vL]V&Mv.p^Ü?X齆vO##PһkA)"鬼iP 轆s $:E\pPfao ^6}7#:@8c)`ZilV{MQj1*Fa\+늍Vpg -6\̜![{s GMt'c?k2՚zY=ԷD! BCّ Gr=6ITW$,1]Ŗ-ךJ'/R0Cui]v һ?/EK=(У_j~R vUHΘ 'ލF~rBcoѥY:N6_lF7*))vQ-s&\<z L?V ;+-queg˳ҵiPbEϢtKe wƼa@Wu@HΘ7:Įͯ o+Lʲ"^ Eeb`/ΉӢX+q_LI m@Yq ]*>ZO=ȹ̍S`1`^)[k\M<{-FE67/;M6?22/'6d*9-Ɖid]>ʑvY[:h-uqŌgۘ?o:ΟWP u'#R[ly?Yq-OeDIInA6Dyk 28;'rH[Nq-}0-;LOFKۤ4^'qu(Et1s{CTcz,2G)N͜s?}tC6Kλ|{;G8f~]_lH%wu${klb3''Ph~ƣ!-ؼ<-^9#ȁn(rjEށ _;Խ/2Uid,M;W)L7?ҿ?|rr}[bIgH{!=_o;&͗MW+e$K}&풺%‡zv=AF /cZ we" YS~VGG-7?׍5?o:7O[prg{S:1_W&D>Ŧ5?7Nu&gXvݴ:I2gJXuU hv mQVӮ$GP2Zq4zRί]~f?ߗӬK-\uf?`zH-4i;W#l:$O& ZKX"' V>4ob+3yvEv2_+ႛ0JJ]5+e$ R3R2Rw ϟ;6:1#3%YIRynBgh6:bFlTd6iy+҃lY ۴oh6Q&HƧh*MYYhmb617`EJV> X<6`!_"')Pzoq+~#0jԪ<%XDTd#HOF%_0*9#5uTzvraddQ^QrBQBQKRHD(d!*DTB.q?RVy,tը\F܉ZҬYBيZrO&Q`^PNn q)1_k&w%_zY9wa<‚{Ν.f C=th Cc&=q!hhpHVhh=j2{^ῑ|s;)?#IᓥPAT]4n<{ǧox CaF52pTh"G.=/~4V{'֯lXMsRd?zi ڬIΈ=DʴϪ§WϺױﹽҾ罱Lm 7*~<5`QGz5wr (0xɆ~G?}>!]Sz*RƣN#E٣{Ǧ'1(fE^;EX]'.6w~9^.7G>[ǽm5y]|LS)KsC(\<|?ٛm+~xA/1۾}5% ><iB?|<g|wye-n~]ϣK Uȃn^NqG({{߬|{)[z<M|aߩNKɤw/[k}ֺ<7_pYW뱗5_Q ux׿HK)^9.sgxȯM˙ߧe?:mO:;Oܷozٻ_O}o{kv%//+p{r5gSy^ؔᙟ>島7GP={Nc_om~exzoOSK<49uBco.mZ\u$_n;/u2ިSjBⰴW[rt߭κ{7OMI/x굃/|Æ#Lo '[j?: vO4GO:j=?͐VL<wG=>}KQƃ$!);+?0_?Y &Că,l´OaĒ.&$,#t_v0mrb~"g2|nO߳V!dyo>M20aI~}$ ?$?$UF2$m:Ƥ|$.ǒ(Vi_>^~W^- I7!}ɽ<5}KzZ"PIA ':DWAwC lc6C< 8 wEy;*:Ӏ]o! 1pq1#T%Ԣ$a(Y}{!0 0 p`(L< jD1p`AWQ<x0 P`<)Rw=P &ŝ{;`3`Rgl,l9,< X Jw!> 0p0!{(.lKG<`2/G| 3Q?r̀_@,ԍB ' ٠7&tq鹨?`yMWvd ]]pU_^v k!fTN.D|橦 ;uxDYct#<="{SAh{H(iom(Wuڷm-cG|!Wx*7Tʏ@H?Zϟ6HP))#ϐi0=6ύ112֭3,w}^.Km8ň+ζ*?qyJVnЮSQWI@;ę򺦹D'@<ڊ:= ʝxy%϶;ZW_Ed`j 7c9.%~}!킕 N'8=bt1쩼59gK ߨ⢐3$#>S6iOfK<=]p/p7CᘖLa<5BUо/o#Db`I.v̀p abثz+hn7ʗڏ|oEOu<D; 5O>"oAv_8e`I)D)?r,\DggrO2c~J]{~#6"8$(4 fj]?2|@I}u]|{A>J'P;DTd㛆|H:bD?isvToC ¶",TDIgJb&\fC<^C)į}i9ByxbN"u3ٍ$ PeeT*וUo(S[9n *wЅ_EzaEEݴ;֮cDGMSzM5$]a|݌ R>O68 Wv76CtCz4'h^]ʒ?k87=zC=E1J[A| @? =m|I<'ʑ=dag=ma[ eˌVNvybbjm';E{U(wH@U>>J<@"{qU7uDt?#vjy!a &꾢x`1əGaܩ,Fx7n&<9t9ewC;XA3Nl ȫ(UwK{󁾼Ba@(o' i 8{AـON;Pi-ozQUŎ3ʝg(袻;.*+iuH]Yў ^JڸEq~$A;xVF0r^R^@3Gwk}R GZ)I{c-#.-Ɲۊ=G'mEbII:TCcg$suGv]bch-iIrFm/f(NeOiB`_{?vH=>XX?L&#>=ν3l9ͽD9PK='aS:0ɁPQ|'C]XO۩iu aơ:JƣT0V.&Җ Oz#W4]=PMYEqO)w8)+ _bPZh6O@0Ύ\*աH4lAbh/6w3>=hǯɮ.^5vѿ #D|MXDq6EvOdS?dcrZ~@&D>RO1(K%OcuҴ!o=iC%fڣ(."T!.iylus|tӍW c9߉ѓ.IoS9*Ap>P)bva S~ۅ"aRюC؟!!٨%wxQ|'a#u1wbC̲Iڀ zL rpyLp賜.Se+TboJ՝A(Eeٳ[K"6U ~g?!^3 &;Zb>p&|cE <^w^J_In~$q=:2V.lc8ڌwSy,N2pwxxg(;ec6i@zowЂaSfRGLeOҴ"MdOޱ$~11"VFhgUbҺW#sl'ڄ{m>hϽ 4-FsmLnky :)4U2a9>]:)wrz8<4S]֓: 45Y&=>OcegYf4ۆ4I$Eӻ(_~]+mI9:;6P^HPZ糮J֓w?Oݷ/|aNjn3pӻfps:fHk@ڦx-n9m@-= D~qחscD@=$ŊH!\Ek#S)[ UtH>j~MXzѢh '<A~`NDf"Q|y4Gfu{Cڐ BY1xO׾3W> GH{gwd'Ym =m)t odQw܁,du?k`䜢opzXWU8waiv>UnXG]jPZܽ}Zµ lĹMEBG/Ӻ6FϿQUn]2x( Qln~*㵣l&O֊-EQA1;G}H_.$^6H i2Nx"!Y'MdtF=H5/[A>Y4&^=:6wk5^Ž77ğ&kZCqVvvFRuPCSZC?Hc( WTQ.AHl,}ſ5axƳO*Ux6yn<ӄkxˁgqx,“gxƳx49ggqx,“gxƳx490h}@ZuS_ivk8Sc/Yz^N’0 Kj}B-{O5 gYofٝbW'n/oI3>~nKV礩m?>kKѻ4?Y Ӝ4]af}N )z,99iHKd'D}|(K4'j>~I%>.IQׅXs4n[YW8ivt)?c~_%A>'/X|KOSs[!Xԟ &/9%'otFHظyA +RF'eg&sU32SF ևf#'fNX4jL>lT^n褼}X@;&hAQ H*ۀP*4Gt%vqpsaqNGv1J,Gx#WM%*|r],MxYE泊a>p+vt+@T/ \4Auoz<OdTnSe?REt{z+Q>W)z=GQjD@'O3mURF%6R(8(gEM`O-Q3U'XID?]֩Oƺ!n)Ha9Ow[HY) k"8ǺP%k[&^5Xz]춖^:F150)*(Ts;N+7SpwZ%ἓȠ $/r@ %N&i@;iI573;IXh%t8BNj'B}K$k 0%xbM*ə3d2d=$$, aߕEDT zAY Q\@\pCAQ+xEDwD\@Է~Ug z}{y<τS]UէhACEwMB*u%fr4~j> *gy9  'ꝩ vlLE΃a.(7u8BEh:7)ua@#jDī{7йc˘6sFw2쯴"jI}N$~EJ:*tp+#P)DCߎ1h*oWv9&7<<(\jp8p#q!e%v3Ӑõ Ԣ%R3|pni>Ѣ 4֢nCZt-*3P3'|XnH8o;59Qݐ8>J1 }-AUѬe4/ - g i6`mstr@㚵| *'w*"g. y8NBكA{"GMyTi|NS3myTgE jUZ/&I01c,.ց|Џ,@d,0z pP%u /2R*Rv_8eTTTMϡ_z [UjNJէg/ I4=ζ*03EIT~V|J vp\A=Jh&Q]&*9!CPg@hrOHE&'ĵO#V|/;ܪхZOmNt u-)Yr]m6rwK64?& EQ"Z\qI1RBm VlL K2巑<,ALi `bJORV[`!ʃT4 \dkJVfVR5IixZa +y^_xM%_U]}BDEESEd12G|_ QnQp>ۙbFO=="X#&J]#e2xWO\=_EHuBwLG\fWMhBQ dE3l=ju-5BmYn;K՘lgZ>D@S#Vl6-_֒$Si\7 mg9o3(-AZQ!3$aeQ[͵h5PbWu=2=xQݭZu[DOתS6%Hw!Pl1wUKk1{WȾ[ i*n/nΝM2<=J !&kY)dGK Bov #`!v͔SOOc 'svɬbӶLglz ]yt\\o8gH5UDf4r;w2S=! `g=g;\͟i( .S}Fz"/Ь zAEhOæU/F*ZZ`ڤJk$`JH3l\#J::r͟Ee~`uPԤ&}uMʹ&QrdK^F勂{K{QM vYXkV̪^ODg YDj_5k<twI<aR#FO&M>1:#8 =RkhykE98%֮Kғ@vtaϠ_-{  ߮`n&*S&22=J@kTS_u?I[q,p,9S䊵{3eӣMU,@&l3F5QxDj֝|l5H$fi%9wjɯJÌo^[7dQ2Y/J~2%[c\fUV2Ku ֩`#,v&c"/-Eh5Ӫ&V94,|F5URi\[)Ǐth\IoD$ f2,>'lB F֑׃j;o4oqKucǹ=bd2{7p#h\ qca!:= d%m׉uߕp7%WD}**Nջٞ8ݑ"\gWic# hQr;e4kC5Mo{_h.HȻ"/Nj?RQ"aͽkAwgU;Pb3O} _[% @s0Ļx:'Ɍbn[62hr=.UblZ c 69|K9~!u<*COO~ Yr$~J1Љ]T \&0ydۢ߯<P"lh6Yb5^ ""d-Ŗf+ZZ&\H¤?LEJf#f$z\Oݹ5&s; N Ol57C\-&O+FB6q';JJI>Nz)y'mk)lLomszYT220"m*j0dE)ɂJ޳zC|=z}J>eTѻL6wszS(õ{Go=lLC;{/zOS3C[Q+wŢ~]3Щgǹ&Ckcί7f*pz^$ܑSgfj~&+{-YQvMgU'rkNJmw2^\:L~2ѯ ?(xDhr]=Cb.yj,8N,ƱКa/IJ%?ļ%/Dc/<K/_"/" f D`NԼ/km&gL8g,A33s"^E ^ d/3ىq"(@L0Xr |=XX |<>.s ^P8gj dbFމXяə¿&[޺j?+ * TVRYje k;|^FTSM9 2}wT C$Ձ'-!1TOKپ82<伴 -Zw-5<@83%'Mz: ` FJUG*=' .[Z6Vj uH* |L 5c+0:e Lw` #(~H̎(6Ƨ5F%伪ac\Vj}DPZU*&{Wm'%me/6T [lu"_؏HTu8XǏ)GkP\Jy4S0ϯT#JE bYJ면@U'HfQzFBi_ q*;X򛛥_%5/E \a Ku3PzoOF}Hsg؇3Fj٪ΤPIFb uq&tԶ%b}n/8zJ(&Ph!]~.??RCSkO"qYft&C3 p`Kl6רљZu )$_LMPr7=\CC{v"g͙CCap7_;,\pty`pUj;ﴘe5+F@9 }cWJOen\O9yN߫\?г:f8*heICA\'Z2Ch5NPt\I)˅!GDcNɪ&A_b)1ꊩ')Lx^Ρ r | S 2|3oDp8+D~n\ nV]yI$.K0?K"dGPw=ɢM1ԧJel:(K֢tIzG;(u ?"韹".qB#k@${)WOmdv ^wB}ԷT64˰ q>DW66 !Au Xi 뇒щ?ħ2N=ijg>(⣂F%3*骄k6<`OyʜBV$/@GLC]6N~S,Ao4slw<;1$C'>㤤5 !3ʺ#nA:#&F]GD$[ 1T::wOvw >=)d[Ov'{PKdo}ӷ>u@}x<&ʞv+ote/ǟHrBAJB*vO}>1d!s |G8|V1db1}> |b#G sPiheBu6W(y͋Є.G){(Ck.hdUfWV/i=M [YNҍr%2Nxr WLJm} W!H"vk"{k" $pE~H!P2-,B(H"b$bk&-H@QlDlIQHQlD vb$ѻ=8kO[$I@ b${C"ߘ~QlDJUoIV͙Gaa!GFadNIIc"4kp|[$n"t2Ob$M1IV [$} Wd pEn5\E!yܭ/"xqE`[ :ڤb9GWBȝTNc%Ѱ@v%,c<َ6UÞ;ч=wREc{*M{wi9לZq4TtZq{zdNTSVDPe#KT#UT ɡu@NLGUINX~U vIml\uĉyg&@J hвrrsݒLI+PxEqz&ωr %鸌K%,%DŒ"'UOe0^!TkbD*>,5aC@fO\8msQt5e q}SRr&bS/I]4l7Q+`vSFsZ/(;x±,= e6pmx^jxl_\k.A`emgpoKvYuhUHw0HuҧF6迈jwU܇r[J'mi&Y݃xNujfvFa)mUIF-Zmήs ݄ڗ|^K̵Y0tg[)os`-O6t&=H5QW 4iVA8vPM>JM#TFTPdU_Q] UNgکY0qj7)ѝ|rrP0VʿKY˜˔2'f r[\*+Z/w0|v!±S5zy5!v7tI6 Bͦv.QlM.@ Bj3@ݿ%PM1)وr;|f]zvI[`TIz@^F1@s9sPB9}w1Wv/?f> 3&҂xURWNt;}#8{QvӹVM9lޡax}o]G"UC@:L_ 붎ىVyJ)UtԷjFki,a|(K D"Iΰ3(g.8Ry$kAeL86e5z0>Ȱ2pj$ f/oPH/6OU2נ]f}/=YeɃԣP'Twffwkv&|ۀ_G? p򿑝3jC> 4| icij: ~O@ <gC ~$ׅ>9 wI`0aH܅<fB>j8Gq-C|+6>eg:tvf쨟D~9x{϶RCz?Ec_McnECR{LaBTsC8ބژjiH}G>CbT HݠIФ y$w~ٔN"pMu?᳄M"yJ|`t:"֊{tdAH!c mEpCnn2nځ\N ɖeBx3d_IGiE wK6\f}6=w(l1b1̥nΊQf".KW/]oTBr8;X#aȷT vGB3p|ăE3ܑw7eǎ}4cG,aůT LU=a5Іc~X=W?|RY$DGPMv_cE^PIx~(ܣ[(y>Ǘ5~uُm,(*KDIjx3+?5enMWV*~$yˉpE|uJ̣9ihoV .,.w=b wI|ۦs('T jBC~f68XKEdAB/IPef9r+Īn2^<-qM^B+%LD쀳ijW.mWfˡqaOlsSŒp qxylxZu-2>VRjϴ=Og'2{BeDIuԂj`7޿sea|Kpm6ͭKA씚(OiTC;d'sx3C# 0٣'2F#,C7TTO$<JϠP})*X+_T}3eILa'WZ)PRhD7V~GjPK^ݼ_.d8ҺyuD'ht zDtݠ?M@U{&36խUcU_ t4WAJ"pbLɭqqvm L`_$! eKpWe;?XtXhx Yy`(≎VQBc QǑ*K.y)x-s.CUW[gRxuJ0Y|QCj YQAghw˕wUza&1oNȎ <>vU˜ㅽDJ g ȸ,c ̻㼃=LK;\~ߊ0ʁeRK:UOԝc4؞قewajA3J!_RZ-g40 g?"ፅtb[|{)+/7!S|>m/*_b0nRCBpiKbN6/5L6Q% !1m ,Vjd-C$ړXc3gR+܇ɛgXxMyOB^v 8Z77=ڔ n',3nl6=`kˁl$^_뚹T4p;/롈?\j]ju#CrAp@rA7Rɥ?r?)Lg ~8S@Ùp&.|833ӌL2eÙ5 ΔIgcp3t?)g60_Ùp&gFRՌ8^l!:QTX2u}{or!6So7p|8Yt7$f7$ @r#; 2ߐcېa߷!þoC}߆ }26dmȰېa߷!þoCې|mH¾oC}߆ ˷!%g|k~s@X )Р|R ԕoC]kl#<\JղQkldu1].@]OںeV3p:#_#gO gO-$znoub ljdv35u;.е3U 8(i \pFIt>ȣ`o~L@B@\"Ko $>J(R7(>kEn;RSHYE$ ޕHCN2c#t|2$ RgS 'U?'aᕷp!ىʱX]G\!?sg+ՇH>H4*Ok^rD u~G8/̛h:hR>6\w`(@o.:6WO4d>06|d.!Mx)."=7؜?F{bsifgsN]j꫘)H*DLLn9@ EwXvjje0 {%^#Pٲl:ǜC)ʻ?`TpUzV*IRϢ\a_.90Xƈ}[ŇD9TFCTP%!` Eg{%á2P|ނ1P(4ԜDr>lpN?VES_yO2Gnc l-qk^`.hSAXJ>3cFJ|* HYd gyN$08r z06`pa36')k*}eRU(u>h I.*%"_老9BABM|W=mO;KB=vBD5p.SL\~f%B}5tiq:l׳ő]I6zlTw[p-4cޙoGjm ͬٱg)p!}_pSdsy 'c K3Dr9Ԡ{r(D6ttHiUkkO}C9?$!^H"AC?^"Y&KqE%b Is4F#Hm/ǟ<TX8Z)?]F7 0L,Io!I\bn͠689k+Pq6b~pgjeXd ,dsv&sb>`\DS٤(ǵ1[Em(q*d|8qCiU&U>o|Vy-oQQ|c\Ce3T`~]ȿoȿOvu-nS`"v`pc@ݔ_> dw>GZj'Jp x yPCߞE 8QsoL#bp֨Q,jTwqQ%js K%<Hr@TЩJs]D VcA 1g!?,Ep;/LȔQ,{"7La(=!稼z (,<] 14c؟x#S),1I/Dgh&#M7լd)Av[ V !ۭ$khjWbq`n=DU{'쉪b'{ݨ*J(^+fU7d1r-7!נ/\kr BA_5 }!נ/\kpmr !\kr r Y ^ .wCkp t(W>Jp(kp :TlT*1)P 8mxCm֊)hq :TvVNA"SС@\PT}C/Dq81 )P@=8a2ԧC9ocێ;w)PƠ `:_q̠ܒ#LI+O휌1$7p mK~ȉ{ ԉ?A *B(dJ]K%7ƣ$'y5o"Ds'`ΙA꫞&]\G\Rwu%єieO;Z=--} rEWTYTаXSQ+*_TrMx^++XUq )Cߜ-GȏC=^)A68?Ѓ=aRTe  /pFJEf:_8JT_F]ϧzzxʿRS|)u:I!#w7ME'zXF@o Pt~pŰT3tZUKV O9/W=vUǔPk(ai-6Gózg`y{X$a)ZnBK$ۏ`2yUtDb~cSsn{%b&=T~(N3ctTI 9®W]oKSĩSbOe9#/שMVJK|OG)'edH>X q8{uXɓV밓fА(`I$ɇ[GQ.:X /NKB,WMQsl$nݗ/,7 oXdwDH'rqd8?K&ko PMs a0B D XYs0+|C(kq{yv1}_*j/xj6{\{cg,>Fp~u&;SXEk6FSh+g~EZw_HL-=D-*,Zu虭3zF_3܍օ^n](( ]EM)*m\G_+WMkK`Qh#5D^2S5ϞLdM&DZnpE*vHq'O+nH"/nH")DK{\~2$qjrH3HV[ )M2T_@i_Qu5;FxN2 -L8ǣN^&=\ˤ >*<\o/,/- D5 _ ԩ*7xrYO]qjN< "ϥ^#B2Ya4񧕩8+>_Ģ\V.7۽ЉjR)O!" ؠ>|\f<g=rשp&$t]8\7&p;EXW}]b9pVdå҅AvnsC@=sg9@'6 N}!pN }_p Jls",42Fe\]30(}eϮgЊ#@37b`-{#U4wj6Q-D* "+x*vxg'<ȊHx縃k"M~HT# +ei#WaŐ#w \n&t!x*02=C(FOkøz+v%`2!+6tO"ѩ`7DO?0T/C9ÌaxB銀mٿL|#I$dR5E9xT~3EgaapXJ1~`j~ZBPD^ 2+fm*]2ȔP6j:Sj/_R#VeL`Ҽʘ83q ˊs4$`UgEMذgϢ*j}}6Pڀs%8\esʧ|ʐ yK Ũ*N Gi ~Tn_HZ,Я22GjWTn>@ތ*`$|*~Gُ`B*"6Π1-~UneF7QTmo8K2wip~wdIZR-:/wm[㴤g΃y|s#IQ~D!5ymE˲[m-8,mJ{-pK鮧, | xie*Փ(=`eAnGc_G.3ծ0 暥IPD6B7hA ˪hsNĆaqyBGȵ1]WgLЪA]8*TVk.!\AeJ* `(jp^y8sa- 4+c'mFD ZZ-  ]%R_K~-Tђ<^eTR)s85ۉZjj~TqX;)DKU9T.o' "82'yTfADjZp꒸o̚^+S{G#jYM8`>UXK;YIŬ$~AsDGq`*@¸ AqԠh 86:qF ? Ӓ뱞/jE5cs.X^k}{QB5=tܴfm uLڸCeuzJ߉F4ifmi _Kt$̻LVRzw1^VC1w jB}#_ E@Iw g\WԸ >y-O'!cj/R{rz"7j\Ex&wVJjDvs: mmU#>Ge'+DISpTBM6$xy8^?TL$of34[ .=Х4HaYzm508oȌioN%j'TPͫx%nHny/êLkѪIбV]ZW0Fo[ai>[_xOj՜GLd(71JDz͛a{D.oCW+H'6S"̋zYoUA)c跚J +0l} "3 | M2Ucf1V:yBD  ]&o:9켍L_[VEj5s&B [g ?~JEzy%_h}k޾yo=Ɯ/Zd t<@<~cjA2C\Q%:q7JD !3([$[:q^cmv ߓEkcJ MIpնȨ7FZ=K`9`Fzd@y; hkvotUӶh!ȬhPqsM-"L_l2hV]dk#@=YllVm6.1jl[667Pվ(&[.&cwr ) 9#Wkwn} *:{- },j (0qٿgJulb c=NJ| .hu)n"~VeLV&Mʐzbo8Aezbo8L^qP?l#lze^\mV*;"T5"}F[)@j6n)"ا"÷QׇzQO ط@~iunB 1'j{x3 ˥~mKc Ph էh5K=ީ|b@TW';Yw{ ] n4pj)[ f"3D4qz]_!{Sa%-K=yS S&])Rޏx \1{ )|Xd>Nl~@=`ï#uty ?aO⌵iaaT;ew+uU=iN]r8ߩqSSҧ.'QK\ n ZcJ|g00E.]Wrr!suT[ 3;nA'^߅bzgh"-#\#Pݥ ;t5.5IWB. չ~jvTTJtYS`ZVb|015ȲH,S+#!*ibϨ4ջ?%#ݻ'TO:r/{kaDp91N<3<pZ/J9R,c}$虥\Ps|H=Ͻ=aF.Ȁ.1`mUćƈ u:4x.1) &-Oyza+Z&Wp;넃j9nHCLRσDm71J(obQO{qK@:G{SܘJGe [V ہ< Wi#h:Ej}`Hx@ve0Q==[WÉ>ĞrnurK}ZMs`r;M3}X¾w=$vlx3,ZH#Vr:>'FMo=mdF_[ʔ2ɍS˺''LGAmdQw᳔cľ" qB(sʲ*$pbJ[^)eu{Tq{Ti쨪^pL_']&a x?}E͞3L fʓ}?it~b=(K+SoT#oW#oR30P5jE x2H,Cz[ߺBpB|yP[)9SrѦ$חtO:. U ڛ@ă1_EV۪dF6iuqW>T%aB`w*]r9Ub*Yj [Q,/+rN,7P[po]R{E֟]dח5֟-yG1{𸊫޻E+ҪK+FrI.`$7e-X6M  I!@ )!$Jb0P"2w^IvO{jΔ33g9s_df}եF' ? H\ûso }_9x.- -]Ҹ]{yC!Մ1/g(A]wj35 ӕ`̫Sgc5D"*B o#c˵.1_@?K%JL  ?J> |Wذ>|ZX_*+(r]X_(||g #pa}}~X_x>?N_dP|}>S7[2AxKO>`dNE"7_l#˗ x%~s wza"o::G݉R|58xV8髻A]M9 ؄2T`i1dJI~;Ӆwrg$ɾy^Nd\,"[6°ŹeWԸyvzT$&5S0!5oёLU-F6.>;S4rމ' #:ϢIsV69Hx#5EVI[܈5hʨ m=wVĔc&}]$I61fwhx>/B?A*5tb&bO=O?ď!?w4:AgEdՎBGi2LwľŸG,pA}+,,ԯ1ղRa GE:$̓۞ N~/IZi>L7}nV,Le~.F&N580LO54K`IGcL:XCǝM&,#g$x w8u)š_2!fr7^b?7g:E^)yN{;{2 ݀8wfM35):ԍrlTrr\b%t, :Ž l*SLx/3i>AXl#y6D 3[(o= [쁶}LJ4TwbA;Ro>hHTV9bkOLn٥0 ن op r@)LjR:l 42A(f[0>y,G{sz>2@ _M41[O-8Z_bH#'n<;R5?BLǍgܬ}ȵw~𘅾^Ǥ QNog;SdIxCi8W{:7l_B&칬Xhu_oxL܇5h>0bC@VmxKyqxx!!iY8d1d[$CkT,7 8d1e(!C YI YIShJ YIӫA>+i䳒A>+ -^f@EQ:+iJftBg%MYI}VL(4#^ftBg%R|V, 45g% YIR@ 4g%B! 4!!)bqbqbF,{>uCF+/r}K >^Kq,J&/کzqgS{4N}p|H3BiN}q %qf(=kکcvK@gby*ĝT>eS>eS6>eS>eS>eS>eS>eS>eS6TS>e4f Vg3TS>eS>e`j&Ǭ )k5UK )k5xZahaOYsR>v\ N$hZh܃NUK=Sx+>$@xb/{HY \a 3Ȥ-]05Bإf}-EfH ^sC^EZE} oT,#Dq܍:kF "hW @-..:s0K<#cM!`p_USqs\\cްD(VzpHfcrR= >g.%DT2~ֲIw?j]_x!׀;J}$ki emm\$V +SLD\=p`uExՈ<Α:—3tMCp|)%;P}_' '͙H*t:6pㇴT  ci rbFSU]oZ#LLD+>x3 Tx)bW@EC~h`[G|ŽXiD_#}HWo$q~w5gT2TN] ~*x4mN4뜞5z)7 Wj<uZh/ $V} ~52ЈiTu⠆n*j8 )n8 ᾇ8.z^j|l2x~PGh%4<Ě ^p+˸o[,SML?T b%J'A~R4B L3:wU A馺8m4=țxv Ri7b 5}Өsw/pm6!k5ga{C~MwF&AQ7anj6ўS2gQ4+Oc(v~^EYS ~bOmW}ʽ}(psuk  ڐ—=5e? 8PcZ, >ovE!. qi@1]:[SUܼo\m]Ҥ0rlH N7m^AKK 0FxIaJ8߇kL~k4hToQH[{қlU F >3 n*z{%HшyBH$8!"WiO7!{qnΈr<b2Q jyF0`8QJu e ~~jemQrˉ1N;KKZˆ 6aWPc?r›k.@8ǻ Q~W7D!pbe+ G!p54хƔ;Ai2f @< ؽ vFA = ue) I6Gi?CNdRFI1ii8@ P fr 4c1 mh }pA(c1_Kw|?>AQuQJqL/z m`.JF38*)pG W" ~aR#?6pr" K} L</.DC)_ Gk0z,2M2\,lYat{̌cXIvwD3XiR:tiPţCiŇx.ZH؟cF?Jx|nɝ2%:_xBGay(1&IxǞZiѴNQG0.#6 1DeNtrP.O@^𙦚73)y4/R> dSh}"cOFӋ8o)y޲mNav”{D^qL71ބULtZdS]s2N2ֽiмz$ bè7K܈9u:"U|R\0:@RR٨JPqğX^vNWs˸Eb9);sV⦦} R+1*W )4Tt3 #bhz5 Qn aCx'`yd/{z)/cȾ!b<0>C0'`|B| y5'`| )1&/ '`|0> _0> /]4f>㋈&< xS }1|WA> U1|1^}1^@_˓AxH}1Sľ bTdtLՉ{En 6 Cx|oPwнuorQkpFWB3*LUq *ߛ0{JjkN܁x}An ŽsX"a(Ә Mo12S]H?{.293C;srRyrOG,rVFt0fB }|a>[:NAMƟ̓q#g)Vsx6Y}+\_4XhX!.%(_ha@Ly:Vyb*g/{Bo8"{VeΦzG`+GC94zƽ b h|®Iq<;CDNX(`ﱰVxQQ<yGWXĒL>s,DH @g+ =S7{tN]cKgiȊ3 296>Or&}/Pnq2mWC=w 2 "zn!Ne!Aqh*817108z='C 7K@G%BX D(m"/YPB1_GT>#*!JHQYN ,~/+]|GTB)>,n|}7ߊ^rQ #*~=GT|#*ʽDp\z3 SEn dݘ/ fN5kEmE+[!d5'3qDn{wcYGmISDA*R&H3~GrMuna`{<&vj !%AgP9} (Oի)Uc)caFg"e юo#[65҉6H'-!> jaqN748'u肢y.Yʯ!J[tٍ4Dz],V|*,]eĠׂRKRnXOAS9BN0Jf lƺ!|T&<|lkDnhz E5 )fJwү @Uۥou(gmC i\*;nWvψi̎b9q'N89;aB-g;vT6,XS,<гlWSUF:ުXrϙ];WDۛ ~(]hMC*>Vy*@ 2جHBq3.]&LW'L`aq!H<³,l\}\%GЉo4; o? * 5]cF *5cʇyP!?=xT O y^`FOl0PTp@G>8 \՝~4F`Ěש$cZoR/R)60sKeaS^(EnZ2W· (WZnbn:)SY)r|{9{?VA3ÞG>kvaʺ4K\g3^ȪE1O@TBC8CLy*΋<>¨\dH<8 H>V'52IJccPqX@N(31b7蒾}I*,UIG,?.o~q"`b!q!9Q 8>n!SzUdttF5A `+ 3^= u"?+5pV/k jE^^5g"^^J˫kyr-ZU˵jW-Z^\˫kyr-ZxW)*˫*xy՚/ZU˵jW}Z$oIG9;io-`Ƙ?9iW?m$&C?$Y|O`E } 4AKD!)J:CY`#Wh%kr/~c%k?S~`@lSkoLSu~ðTr>Z~F #)Fs-G_b< O_W4ީx,xE'wzIxl= }ٗƏ5$FƢ7 ҝ69zL\ߏfUOYr2 hE&l >EςQp<-gû}w0fjNڋЎ}I&*7ش;~i7شXo6SkxQ=eQ_*p4pr9h,s + 0KF*ʾI$ !ҕꇏ)Apoön{&n acqhq^;g1}P= K` ?B V`!Ai aApTJz*Cu%Ő^JXQh4x /՞<57_M8-Cs4QϟH|q\ L5I9SlI^%^O%!#bN9A<T`~~gݘ|3),y(MH9P2L50aQ*~qo2vRetqˡ|ҿ`oȷSL:kZV߆bfivnny!ʷXt.ha]r+!ΎE2hrG3 hQLQ: Dhq>S>Z}ɍRk%i ϸcw*DƗ-SHF4~̙¦;)| dWy:>񅖈Wm xUK,*Ź{18k+|Hmט }Ax[Ϸ=fV>Mw=<"0'ZAgg.x5kE\1 }b$5_CSG Y%5=f Yڠw0Rſ2ao}^ LnW|^e}b4^_RN`(zc416| Q6q0{nKbBˁ1 _=g-4Us8K,TjjTv:A/W.*($6w>@!sk(ײ\IΪo_4 F}m g5 |$]J .Or)F$ X~v&9h/ɥ(A`!?(JW)srGU2m۸܈.dv4FbaB]3iĪdٴf >[ה _䒅9HށCf!F\tNNELfE/L -`zy%|ϵE)(QYi7'lM 檰QMAPbSV 'w _ _@!%*$[.;%Nz*,1Z\mB[CS!(CWPY%j:-Rh8Y5+3Td*2%ᕌW*1&4h'@O{eв\CCj|ZRR㾤ޗfW\. q=HRG֋gҫ( 2 Ʈb|-^dDAHAA?, o'tyBWֽVy ]֍pVzȝ9dkPCxK _SsuAG^[%nFx#pXTӕR~9f%áb6MEJjOwV (^&0@PH5uWS7 gGQRuƉ)L0"1D/6V5O7jM]+ w '/RDߍEz ;u5yش ?-@jo".DzD6ـVSVI)ބin-Qj/ɛ ԗ ,d~Ej"~XX(.b-BP~Lm߱xQ;0VRq#i8lG1r&Czx_N; Ej^ Фia"Mjj:=wGܝ%X!̻C ~ ?1i}- f߆@tk~$(8]\խEjĘu4Ԅ8I/KQLURe$itX h즴x^-`׹ Ȍ^@$ 9JD"\#GHyw KnεI9HΝ~ S~"NCx&F{3y``w#0_{_­8e _15 j޶4$훐iA e #c8aG ΂+qkxH"GsCM̅\e35gEʥGĪqk?{:v5!ZN toy`cI\`>. Y}?qnYGvK/Sȴcf >9t\0΄CCü5fpd1 %酗R)`3=FQ5W-FR W\ 6$N6iLNc[O.K0?DJ}(x2V1`PtKkrtE[W#ӎ5UZJ(H JAঐ&LQF48:@ NQXu4Ss(rj-l58 eGk-ufy,!jV[%m /+.ɶԶoN޻0xrh1in*_G/-{? _e ҲxiV_c(ٯ_c0ݯ_c0ׯ1ׯ1Xׯ1ϯ_cp_cZ-W&p_Ǖׯ1Xׯ (Uׯx_|_w ~*ү_N4~z~Y~*sUb|\%~*ߓR#|Hů1Ex{+W12\E^Fc4LX^\A[<[bx;c}/i#%ƁVq'V1UɆ՗ݡS / 3%/0XQh1XQXDo4΅2E!( y @ V%HBEa[ɝgA3tY酁m~0I4!IBS vNqit3=#y5GJCL s$\?qY^"-LtM(Χ?E}GH.kpb9 Pp3&ti ~;#b[~¨QU/ƈ#iucȁ1dc C` 0#bۈǰ%8%ll `K؁ ʔM)N{Z\] ]d=(0_Kb(̝x ,Z @R{>Dp"A #É-X>E!'hځ>ܖcB__dm*̣~V-n2GӮǴ@y Kcpm CA#O w[E"|"OUexr$\$Z_ taV]ΙBo3s^)8̊`|~p(Wk8ENSe`JpBwjo!JpBw'rਁ"60,6;ã3 26KAd;Cyeg8zӰ'30Lcy1</A 2wExûmiA$  ?jQ81<_B^~罫& ;ftFsh9Cr~6,86n3䷘t7(+GJ,6;^yg!LC@”6URp +F՗[9[XK?# yQ}kd};|ۈ6'[bG]יj,ޚx D4Lṅ"]m/6HH:*e ]T ,yC-?s79dB߉&biR)t5v-`, Fkg<uXՋQΞz(dzu! ?EVk7 Fo2ZMk QUusD}v/G>*I (޻TRn v[UnنOתPMUX"BFԿ wǯ/te^ջ][ZNE:ĕP~A(!ҳK.={X9mx@BqXTU QTŲݳH{\F{|I߄ qvӽG)-zʪW~j*@ p d5(lKn @L!It`,TwX"QS0.[! 0$ .1M4sTz$wCu"l1dd x1 '.A/Ÿb}US'B?̰{,+L<NPfK\! (x$ޖ|K. $$#@r8aSS RE 5\|TKy#&ŦXG%G?7hcX. :d#1(G Z AGEZxER#;|Z\o'$!#ȟ0㔃1,:?1'ʁ&7'exzQV/-{y?x3&jSNfgМjQ|i ﴩ"\vak!+Bx*Zk!r?Y/gZ%B,/g }9K@Yz-D_k!r^ Bz-^  M #. ga4QC Mx-$B嵐^ i|?TYeYYYYz-z교 (dZSZFk!ki-O:qW/[^[b(}9xN9bd^-竅iN᫅Α)|C~Zt?_-PD/M|آ" ׎vn^H#?QL+TXqeN"ow!olI%-zm)t;|˂ztOB^7c34x&6pӺtlkwNTm];,0L +Y;%L"F,}, P_,G c9Ũ0U1 A*'1b2$AXmc}'a=FЋLX8)M*ު`@+~UFF" wA6KCUsaD/,c;rQ>T{6y|\{bg=3O쌿wi~>&r~vv"{yr5}qbOuO*\gнI8fy}or}^fp}/(>`y}|z?ޱny}-ܛXx^{ g[x^[çYx^;)o4ޙ<?Y Gzfhy} Gy}؎R5Sg jc ~b.a>b^kWt&,G0qȻ 2y ti_Ǐ xDihfqeYhf2 qf} ihr3kY+mf_g֔>xñu h;>%PZZjV*k2rxقJeKl /X~WW )[bтyK6_0bU+-Xb6iz޸yH$ V#R* 9 pRP 8\dTh2<*xb1!.}ӓ(5`ns:(N:mF¾$! $@ w$ ~A 'a|(%QD$K4)œ2)IrO.cBñZc)fdHT3iC]C]AdepzR^كk~gL:HNQ/G(ٰ C]`. \hLWXDA"K ;4ƘN4sـ]d~7u/L,Ø.c86#o& /,F> L$7O%wzW ]I񽰚1Pbt2OC"+MPܘUJ܀*U6`}{]ͻ 쟭L>a [cGeI=hgpT]!TA@0tv CpxPL0ΈX= cd/hd' C|'E-ݥm3#փccudlKEcVgϓurJq{ w7ow LX7ћzb w"nMC3C\2ޣS˛Ty1Œ-pKnqn!˕v|H~1q{[:eo1xpw)MzcHSEO)!hC,-Bq疚D[j$Ť&1t4DLs6QӮ^z v"_eGr<)N*rgqLj;c S??@Գ|ݹU "֡N;Е0Xw]#zdNuLX:=u1>m5JS#GR%nn^;$fǁecPo?ì*ͪrJ Jtσؖ0ņ̈>'tQ=eĘ{T&|ս _o 1!-nd$8̽t9ҝ6[2B淈 1Srҙf|d uE.kEQ1=7c'6m^ ؼS͋a7ǘ/!11Q>i$9<)L$Mqwk[nr3rFΉdn f'E)r}3SIoԯ7ﴊ1B}k ?F=:r[.1 qq;HnTg\cOu4'WPFwtS=YM$1~qq߽ʛf7KƸ=? f[oc]o ?CR[Օm WJtCFPanSaTDB=]FNMXƫ{=U˜glOI2m)ԛcϽGy-pZ8Lra/܊:smBy4V_UG-tL{ة](oPS%YnU3VvR 'TOArui{Ś?l#p?޽,-ǖ1qQ^JvS4MTt[9d؊&Ӷl  ^n ^nm ԑ\!Xs16ۄlswa61ǭ{[ 7N;,^/=Kns|ۢ*5銝@_'tYvrMwV!ʹ-kgr8. ;'II44 waZ3%ɭBtBnœfgQ!+9X3Y:XC]q[=upǐ%~v[ PA!YoyuI=)O%O<;7lmTU]'/5d#E&<[e-Ar+ychZ%V_o:Z;hIW?l.nȒ֭nGm:ؤ@U/YY=h/eV7!]j& 7שOM "eƲfՍO헁ݏxU_1ng< DgTUr0Fٿ^NRTI~ZM ek|*U"ԗGdB`?.}Emk,,rMs.$Y ~yL6VrڱS&sA.S $s͍L=jz׌[p2%WvɌԬvOeFܠE5+mȆz5Eei<{+Dp-Ƒ5 "ذI'Ȼ@F.#T, 6jliH52j\I%7mA6쭗ͥ2at`Z̓M+\Tz䅙c su-e6̮%er^,~fW9韼 )nemlQ$O.Q׫I2^N=(˳`Dld3ODA r4NU{`T/vɴ;P;a+NS.F% G灪v0 {k{LA&542w,>(gmC搜Ƌj}:XFC;d^.[LUש=;թp{9?T;F]܎첵^=9dnI]m~P51h\~v#rG'k=yVLpi@P)CKjV%mKmit`hZr'=ilsOn\eJg&[|.sjq v>봽X`>vMl߬R6&Pol'fkMSQH_ yN;o\W &9)%d$n?,>qw7CT}jTPUp{_-m'] uq{j )U  F["z[~EMA85Ed&v5k&J*OX-èhL X,[6fk_:zIKIjͤfSfq[;;;a8!۪:K?YٹA^,8VmgzZGYQX/E$F智mVw5`S=_wxF%wU֩IŬڥGޓ3zjEmlYmP23Ѷ؂^)KsO>MڻLlX-s4uߔx_6jdu'{>>_*Zߤ de=sU=×+ؤaJ l$[LLJC2Sy0Og0{n/Rk6˝jM ζv%dw NKﴡ Fer^߿rpK\/MAi}]c)?z{!K%+qҎ$=nf^fڭxHKd.̨)z{{gS3ۚsFqkjXf20즵U:WVh5x:=e;%/w?f?ߪdiw}=nf UV{;T)ֲa{(O2Ve*[}^5>yst{\}}a%`ʤ"%:^~U: >Ϫ$y{ݒyeM+{i &Ċ΃D=p*vBiJ7O37:FgqַvFzhŘI0ff{xY$): mUPmp*XQinoz2ж殰[VVnsX#Ӷޱaþ6c X;C7 h=LR}[g]z֦" s|هֿ荷 Q'-/*~9T>vW+ru}S2<)i M=jZ!^w,_U'-/eļZ} 7`OH&yY]+Zo^4OVn*e)vxznl ؛gn>b_F͍ ;blߘ)o{5SwMbgq+Y-h'(zWY۴ nwO( qs;d3z{CލقxщvV]yjt!֛#tZP}u;XUt毞^r& '\k/2Zw惹*}h7i0/>?luWd؊f4NCftȤroffjU)Z݆[Mk.qvL/lr2wyp$ѥvF s>C#j8R[]zHߝQc9p,~.5~_cɄn=/oHko+U׊w~k_lRoϋb'KuV?} lšiFVA&NdBpTo_Z<-mҔd+O2vrXj_h75o?5_Vu&*{WppoӭM#Û.sӇ߇W~GᩮՏ=Zk*XI n30SX|iHڛc1{~>lv圦o-znU- ~Ž͒]J{ҬU!.Z7@niZ'{۱m[5,K{Zi 7ipDRs4ߑ[W.?Iw9'AGA+z6oAۺ\۔km'?`b`g:wB)_cP)HKT))S]rH:A ꫫ .x{Xm{6Y+:>jud-`充o3de]5Q-{A>,Ęrŭ3vllt;9a֍VzTm<,]8ٞ;ZBFirs[%\UCCVd\HV'ђ2E/\^[,DLHz¤chuvj=czY Rɚ'mJ:OF[ŗʢI-qu 4\?|$83<+’fa{9=p=GJn[2ȓEX{,r\ {Z+#w;p'idJYWx3Lkð@uJnZR3uhpF/O|iW߳ߗ&IZߏmv{88}R_Ck:̞RŦΣ8Ej=Aɪ~Լd7ϔ RMd.SMd3uLMU%M~Tq}LTksi=hAc-\oY7R\ VśeQư> [][fXˍo9+tJe ƾw-Ł{u{''d*BOB鎠2'3LWbux.7A\OYUi?QƪHԯ34mV2Cp9CBc0- UV4d$\ZjF!1N .T&*abR BF~&TQSZHkUUóz4>5eK Ő@܍#/V&TWbцXtZ]E} '\Q@l.+;ӢdÑd@ pt-%GuBĵaSWNu2S6:$puccCiJ*VR#5Kѓp_0-U!Xk,*Ab) HL+wT7QVS/։+ƒHu46uWM{I˵jMLk<?-5|(\ !+ASFcH B+A4ْ@}{兒԰m 55u)MbH! _(+VX.LӤꂰT5;L 6yZ$m=Bnap4|JPȬUX].M7l6Um4n=E -]\vM6сZxeKxbsJkba4ɅPb0vN:7{H-Z1:vM&Q-}Qi0 hS^Ѹ+&0F-PZ:pj8?gB$O2L7,Ht+T6iH7]Z$֠m C=~1bIM!+bj}ӱHKkMcg5L4r+ck}0yiS `hM-z4)L)°Yi>XHuCQZZKeI:@7WsW6٥0y ih=NeZ)3-uEZH`f sk=,9*T fB@B꿩4W Zkhާ%eDmYm:;V 3HA1M CTfC:[6()L[ȮoX_QpӞIaT~Y81YBӴ:cXc=?3,HWQuj0YK E325,sԃΌ̙\"/u편#yʤ6PRY U2%$ {hT'OzE!QՅ1݈qGf r4I ` . SeM5)?);SOSӺJ-c:m \fL֭m':@m).țg$T&MPdDñra[Fn 㔛q=.3YҹFJNǤ=i\rbFLdVD#HLV 1&92S Gu$2 3?"]e 4rVW: ϛVXV4iF(gRaQy3UQHtEBx+/7Afՙ uBZT]+E:p1";oIjYI]EUmb o]_\V\v}̿ZH,כ Q)1*M ZKUʨkJ2g$ܔT,Mmْt:rUCfnmNIf`֞_Nm5GNi5HY%F3[$K49nj3.L Mi8 nu\`FD&`ډ6"p(K9Ս(iաrp4 FtU7U0~[E'L3StL+1f.%N%Q7˪u#)L0jr !L7KL8XcJɾ̍& feO*, M3 9g̀c;yDe;VQQFȤ%ehU&9+ƪͰzXUV\<ЉVi9Ph<EQޞV1)"¼Pv\!'tQ%s"- H6vq*NJ4PТGd18LĜ49feiz(i0Sx1e۲>OcEkBkLke4z3i m8߱(DD[ͨf*LD ²R+oao8@)t!isA!n ŭ©T\nRi.`鸌fMmFY&:=Fz0T;f`O"kY}Ƨ;jjr2ɡDe$d]h2q(0oXfVI˪eRjU({yPbdRncrg!/Dn -\T*L{{٦K1X2cJƢ)&X.hwY}~u,W15&DqD ̎6NS}qHU{d&U&ty}hey111I*ll i9BhHȆd2EjJV Z}02:AkźUU4`/%&TQ$ 1ܪ!\5yՋQVhOgL:hDl@LtzF֙>O#mYKX)WjjQn',adMWH/3=(wwdkF̢Q*na0DՙEϘ6;b>;Iq뚤II0-5_ϬӧIX*$Y"h]E1[6' ͩij ,T_!Qݴ9iÂJۭvS5I'::ˮn@`F`  N0&kdLugT.0sqI/S;*qhn@IԫQ4kxn&zהFGlƠF0BH Ιf(t;fted !< E#QͺWP և{giiy)E ^hܭ0E%3G#&&-S FUbs,di6|L7[k樚SSFJOY4ک&Crr=n 6; }̎5 IeNQS#krK0馌5(-nVGcgoa7aPXȌX֠fW p~Ě\ cn30dr3+K,.ZDաrC@]@c)ȬE:Km$}B ))p၅M>fu eR8ՕʢFyu%j蝏eZ+: "^kaLsI1CS#4Bucyy=>_J2A[8f+$|~r^0\"ה7"(%Q̷q<6s͜ x g1%Y68TI2_eHG;4,uMQ.gxp+\tkzzzz{zMn1R8ۨ|z}&_"L7>Gv+3u_hIK{q"÷h[ƓlsTUȿF ?Q!_d,;v˿טu|yd{XV$;XtPi`Sbuu'I2]A#k'莇muaf,2oWăvs3</B(R&IP?vlJkkiW3` O[7O/k*⪺!-):za& 9ǔyFhz~em#*x` K|Ŕ<~͖a uV Vw:X4Pݩ`gA"ΎKyO ΐv! b~7f43'2'qi&h;LQwX rbQ?XθNcğcrB X>C{ww&.ĿiQ)oJyow0,37)JqwӶݼ~F?*#%1 Du}՝ d쟰0 pu0K 4R/pO%H"ޱQ1:&Ղ*g ^ <1a!Aҁj.x_wi/| 0?Fpn,Z@ -uYmNCMl3dRXіَVMbfUq3*Rx_8C̜H㉵ b*Mgj,d$^fӉtcܹJ~›kLp(טLug(֩#ğuO%TLW 3o`6ՃL,L(,RwXtF9x3ÃPs7$d+*:ut.KVWRR!xo4 2#)?cxO'w!>³y_ןdE/&aC&4pSܔg%l` jppLG3E(Đbjۚ; 6%ٚudV^gpyvblc$|osYr^dsyFi>C i48ui}S 5D{=CB p0ՃC,8':m8x#Sx0ap0tJ Vune4o>$օN,hR)>M#h<عVEݩ`mk'/c'(MA`/ԝ .,exz)Ã?cxp#Ã`x \I[ mI K9kչZx5,h7xN-}f2;C&k;kԝ^Tu,a.byNl`Tg3Hjj8k[7R+2P2/R'ݧww=tQg7GG >kY8 .`'w#<؅_xTa` }T*<4pSqTJMΔ.ꢷj:-%ܩ{.1WgLYA{*jL| =w6- h!XH",aN_;r.uU.U3}N'?2÷SuOOС 4V |R`JoT Mc ޡWT Z`OuN{;3)`xK~0<)vPw&t@[ݩ`'>E;Sؿ:Mҩ4YD4,nS)J?lrZ Uv{TƂYp!S]gHj'p0 aCY6,3xq'/w1x70p u[|mT"׎"8^"pyz TϥRƙ/vOiWUnz1 nUv7V|PWvU pԯ7P$&Jk,uK | a)?8nqz;J6N'"8>"T~FEiTw3QXz)-ՙ&QzƙJKU0DڼLqF>NWy$iiiEi%iݻ3p`OuN{?$GBET*Q8={ij4WZ VJfӢzǻ-|f`M i"XDf <8 `?u՝ P f` 0uica9P0F9\Ϋ7ݫP^ 8gg?Z L].Mja6lՃ^AaIB]]+]nb䨳\P꼃jŹ~SѢI7mWEn`i88+v1W m^n9ZG00+nZ?ler|EOOϰIϲ-dcIPwxSP}]=E=5=8 A1 d( qj8⽯ ӜD W(%w383m^Jzۉo$nzh-!oOx9:6݀Yę232ߠt NQw8r0b0 X8U91 `"WJ-bjԝ V; \Ok@{J{J{nf\>g\l?,/" ΐcO1i>Gi; #nZȞ;Ct>8v(\D=R# khB>T5ǧ19IOWՌǪcDkoѮxrpÃ$K?<ϠX2̀{'?Gt%Qt2[B\N_w7O<1<tp8O]#x) 0+DGj10\ gHO>vUg;^tl2 B{;.z{tmnpOP+po!_s'B>b2π p%=j8XOLg1:8jQ<,u7;r n fk Tg1LUɾv3ݍS:yfnem4wpNfc+3鞳3i8;c'%y9YHja{7WݺYT dXXO9 [L|r}2Gd^$>%O 65 =WOO80gU2ś`hF/Z0D9(A-, '&J_7|zש|{R}Ox+sz /]UNKU`I%h!? xZll܄D8C?I;^C9'!;fx'P78iٴ̡ S:qGG}V|n vdl0ϟ "8&RME`̧"0)a3[>=>`̻P8(?SHr#-4Z=RnP1IZz{Уiij)sU PY܅9gܶJQL{®%bJ_"h}\{K`,m%S%ZNyz 'nL1ɟ9&<{l涣zѮMſd.!64ʊ }Ubn9ݜ8w-4$؟cn]ՕtWG:VӷL?!:EwwV>Pg<+8<_f5ͪ:+{FsX%ռ5fބ` oNJ޴`2OԝؑF@FN<5~C &U:|/Gԉw,/ݐsNvSWRAwtj'r]MMNV,ad7y93ia(l&rĿZ RF#T62 >M3g(ex9yg+&ujpZg{/?i./ME)zNc*ϴHv21膉w4sx>㛓zD/x,O,k0Yynoeۘ5vfEqG񚳺:e'yB<'DsyB<'D~UcG,zX8/=@D& N)`3e\`EkrWw5c!s x O3'<Ip :$7cWv5*xKowGpboxxTlրE '1^?d#*2`wJ@oSQ}r[ (IC>0pq+jGQ()juK8jQЄ18Uom]" Z!7a,.L&4>pH}F[a2W}X]{o4[` wuܭPѡC p wrw ؑహv ؙ[7`n逩88T"?v-T@9/vvuK\B<}u*\#/b\5jTp.߀;U3nTjWmZZ7QOon W"VR[;I&=;@g;`f_ehD2Rs.& M1]/|pE/|LvF+R`JU Fq⯫a~U|f|r,PT/8TI xn.r72Z^LxnA}Oq'՝PNNyrxg3XE\b,lmU(+j}|ka 7)bx}2ݟQTd`?.\p3@0<8>l 2tCݠgVL\k:η!pVX|R`37t|<@R9*(oMoQ1p%O# qXd*on|rPw-~u[;ʍh<q>+q_:aSx?IS7]~8U9VN3H`:6^d %9tj͌fRgFA[=EmNjz6_(//6OQl5iR2[/vWC'f@4[qh^ൔ1$4_<~ٽxs՝ ndpy)L攮KtJ,nU)JWT [*v~jln8ő]C=8Pޥ_`MuJT7rCzag 4hH٭j\òײ_;r.|:Y/6xZIp,9^/5Nk՝ ֩ԝ vMEe_"4PPGSA޾9^ÈunU ܯRT{Z婷l~&d T-U' B${\x 2nNN ~VS Y lQ*WH3)ދha_x<-7ۗMo.1*f zCqMnxb*xE~͢㡁z|Xi#NU Ȳr"/Q2P* L3EP8 Pa 6ka;e o/a\HJp:t=CUYRjʏɗ *}y#Yf3Wmfeh nL$N؃aN՝Vw:* j^0LE` 1ap6*7Rx+QEpl"q*Q sk2L ԹVp:o|'T=9X8Cu۠T0Eiϣ<~p> \ȸ .b\;]9 2;ϔp i3 >K=n$I߹(p'8 /^J 8H3b;jɿ^6Z_qܑV]F1vf$(*x͗{R+`~h 9,pd$;ь$aXOMGnlϏܤz~& ,Qw:x|7ȯ7$MJ4Jӷ(('*4 dNX)\ hgq;O>`ЙſmGHb;y|?P0 :&Z{A`@8ר%[ Kפ UzvsEn7[?dv?gLy x,6n8Zp-OׂW-x%O^?x~ Ux4ph w$J#L3P)̳| : e €o3@&T#_7'P/þI LlC^~Gp&~~9Li\ǟ3}y/$pz?5HjP+< c ǔz/LIv&OGT $w5F2*d_[Jy`Oy͓:sI^w2O3𙄯8䋿T&2(>ɐzh&O5  I=|G,eE6/_Q.`lp`/W|UZئN#x!C𑾋 UOiz`s?1CNp kAݩpug#(3 oeD'Q_WjUmp'1<:ÃRK- fP@~}2v^L;cK8>=?2 'pMh漾9` +^< p!2ǽ?g\M×e_$9*_>[d5(ubD*vt@zE7YI@ԔI$~|+e^ϲ 3?1<2ץq/{W71mp(CO Η5w{"u]/)ax'6OS RS ^fr77%di~ sB%x.'y\s} 9N(nWZ _sa#6NK; +d8uvJ8ߔyP;} v? "l5+?P)Mp0lchm]m~ܩI U <~j` }U su:UU-UG*q;[.VI%l#+C/f?2p4Â.,Kѐ~a>yFwMnaG|zoEm *{ ])F|0 4+`7.ӸIw/`N,<"p00ap( OJ\d|;ix|WcqZ>C&)p)Yp }ftaފC&N4z+2TՅRirVtz:m|茄gkaOY@s! $JX'tx YQd4qS;ǝ\}KD K:w5w݇e}.OM~H%p/7.Te9x9/y"{u§2]Nb0o0EƇwxϤ%]>b ?JH>G ȏg >I[_4SX/wN>zn'm`F?RX1B׋+S0S(p B| +F_"f}éT/`&dr[0ԁlW?4!ǷƊL?:Cr4T>e*u=>-o2ez wQKNS2uߢ]g}O"ٯOSQfX$% 1ꈹ q緓ܞz2>A~8A"7,ܰ$|E>8܋:Y S $^$R QXBvV8`V8ΧfL;^ʸe ^θ;*:?g\pm nd\p O0.+d\p'セ;:e/'_[uTqVHWT:4>m r_|lVo-> (?[ j|MJ|C֝^$GOQ54).{;AYp<8`on&'p3fG_k7r ?m{@~ Zmu rwN;%NfM"8m#6}.3"Ek~cQsPg?+}  I=;]8Zpk՝zQܨd"8~IETEETn"pG@7_!:KTcyo$kz5Fzm*3b}8^m.\ϐ ǪNET ٍ-ԝ .Vg +ճe Lz)?fo ,g?`PR^ޣS8S-B@6A{e~Cz1rJӰ^hZH}]Gxjk\?5Pʋw0:\=Μ߬([&xmof'x7;; dc7 ATn۹Nq U'UTy,갖;:?H7ZՉשsMm￙c19:aN NJN*=*I E8X H<]'#x[t4ꍳ0[t"LТRF>OޓU( [_4[E71~;풯W|0//=Gs>6*3p',*cYp9|$EJ+MvrGy%urly C^)lZ"KT {U%QUWo7Bհ֊a\1Y&;.&d$g&,. uq\:[VlQUJ]c-ZTi9^/:ι˹w}3sv\riǣAH. '0|`Ugwu)=?L h@44=Z/ROt1,42 {,g;S7O%~/  -wxON5_X0Ed}*JysW!!G@0Y" x t p UCHUC8jaa~.7=cL(3%W6TKƦL}Rw0XW䗐eV&0Lb x p5_-;1`nRT.L9㵻'))=}uث3)b;]b7[LV&,~ly17J~ = [P2< fNNfٙH. W7I!#sCAI(QJCLO7O>0Kj2r/cľV3^lp>Oҏ}}  'l%rݥ=pJNڂl!y_3*5t4p0Ky+,`SF|t /a4Ůoہ8V<C6))u&1w߾l}mqd &B΂jgAYl,q ؿl&P^S*^SNi8YYA2yQhyo(H_WuLxTn}žI(S%=I/_fJ.'>-C4'Ѩ@3"enGMLWG>i N"*\F8]DA +sxg} Ӡ>g ArӠ ;.]H}4ŧN:a|@~R-xFg&>'uA ZuSZ@sM9fkzɧB~: M #s1pӹ NU-YW*xr ` ^^ Q7ۂGڣ>]Z}k.*JYNv$a13G% G%Y8[G%,of@r=B0 s>T&:sa04BbJy`d@2||' &ek_jٯ/vE6Qub$NZ ;av7J\RMdsi^qR^bߖ/#TO#+` 0G^>!wk?jw=Q6~BbJ\sUbHO&qĬ^,.1y xy\{D |RWwPbM5=L\@pX\GWc*p|43̱ eeHQ@\I9N,2ߕ_YV86SDwM`"2\" UH~c֟TIAڮvMtiD_&a/ڰâJ['wln]s-cU,6wX3g[r:욳ۄSv5g2bW]vZWZ&SiKÇ`2Y7sZ.vu7j4qӟ0ѫ>RvU]zsT2\z\kp>U-2B ֲr x 뾱+.o|m] [Nqss':pbF̏X^CldՔ$IL`\J|Z1J|RWJY#x_&+KCsc#ܚKwlG:%y5a`%!ô(f!%GwhBZLʥ1Xw@wJqUܿ@-r B~vv&u2U &hVd]e U]DΕG4D|cj͚kj '^jdgSCe% J8LQY^GK\;{ݥk˾m2-8YjW"‡L"Hs\|K󺬥ɹ?k_A9ն6{ 2u&Nu]o &v--n0üG73piRꃼkc|f4p4*p46 {eq'[D~o|>Fg{kf,n`i={4i>BnMǻԽo(VGgL[$L'*bkɹU2s2GϦv n 8wqOqxG֏0B yG8e7r.~Ɨ) p ] JTeh6LRr$_ex/[Ž č|a*ep_) ? ^R^ 1>ҩ™5UjzL0\*7~34ݘaNx c̄ιqiw#:\bOH";9}';e1읜J@3w@l!Uy l%❪f6AdS{<|ײ v-,{\$R &\ס=@g㋊ pvDqqU3eK4\;;g;TUmN5a,s׻N3y9W lX^#SȒҽw<>d7@ D2C>rJ㇑hJ w>$H++x<jY=RS^K|=Kн0p,N5$/ xCQA)r^ݫ([+:8 87(ޫ(zTZY(d %\\9?*^-׈ ൒p$ |}~ A="xhTr<'׷#8BudO*h9lS@q#1y(ZÎR5Pd=L~LH0EF#NY=sd.eHC&!Q838e3_,&hQdőTI2 I/*IeswR玖}?yeߏhP ?F De: t6i av$ UCU؎qń+(g@8ip6yVtϡn |ӱE%& &152^տ;|Prr{M.PnnhΗG(%=%d&70e~Q sټ6Brt~"Jgg@Ks2  (bHP!qy6I 瑊<ț2'ŚXG܄ӵ'<]ӍZ0%;>o$p&Nm[S.tjK,~x?l[3]3ADӮT<"wvP%@>E],3/}JKf)Z2KdJdhɔ W)h լInfN2Se^Z-_KWN+ӹ-KjGn W;r/PN 0N ؟^B%KN ^$Q5ynBkU@IenU/غWz+4QpFHXtLNp$4p8Fzi7`IY+`xMh]$ǹ%qw%MϧXܹ8xvɪ . UA" T,dbR$M4ߏ,n6pi<]jN_Jsӵ]M)mHdv%&ne=\ɖ ?*;MpQsl%f5@jcgr,Li[OASB&ߕLoƿ)`ϊjoc-–h7)n(KbM=-"7|lWs5Iש(|3a_֛! zzS{w{ϕE+` oLk2B s[J7aP# \ #cҁiזVaG~hABK' >}\FK#)% {cnCiOl^ρ37(p\ /)#p_9Hvś_cŁ=/[ӈ>.Um@s_O2@b8 ˒ 1.;X7\o$u/`_X|JH1zE(O'8pҨN2#?< P8SmB][V[en弒Ip_'Nvx)jR9,Kr9N@~߉f —yxT+%AW%k0|svU^fxx+t{uCtas;܁h'~-NNDD*y kͩZۉq6@<,A : l #v 0_>̧+Oa~gxNp|8Q$be:x o ȗsx:NsD:NCf 6I⦞,?$b9MeM Eݽ䡮MEu@}jy2"̲M&臲6™d>lq3O^mtӲS.=;6wmK5N˄M&U;RE['gvn-N-lnҲkݝZtjG5)aU{TmunU 1\ Ԇ+7-OURCQoݫ7)7cף>SGև!Y4T"nnvK"!\ֳ򙞕_١f/q r9AN*)9l~dTVϾ6P`gpX_^9_2SҒ8_b&q-91"L K=XMPHwƄ#k Ma_kk.Ƚb?,2LJolKU47e>ΐy8S_lG:Ġf: t6p0eq"ၻDWv֕[P|av\Ox9BCsƤ<;zHrIg}Tice'>V{ce'9V{ce'6Vͮ{xEG>! '5) mr#egG'vXu)NJ9{|.RÙ,%jr{z"ǹc0 FJqxݧLEo*.d:X´0m{7Hg'ןBk{7(&dNe:x 4qNH"%YTd&%Vm'|{8`ᖩL e\6"m[}+puEؒ4C~_J4sV(=]A8/Rsu-Z{6=>SgP}ХFr] KzG=S &}&xs8 sp[ }­:BZOs^mۖwnɳAkrTprrmuxz^g C%6 mt#vNS;kM=!FO~krG U^7wa@_ے> Y%Z8(5 #++pm~} w%M xÍx' OѾp74~3oIo9N4>ܷUi;o3=Z57-b@C-fr ag>y'L$=O?_CP%)79<~?=4Qb*>aD? ]ѣrhp7@{a~Gq_~ǿ񰳋)?>/?Ǐ®Dw_ lYКAk)_xܽ /bHS[7է>6-K^ꯅJ(uۋ>EPq*z󶠕/!0{ ZCߚ J*5 0Tcnzp /$q"7=<ǕϕOp'Gn_ 7}?_xx }(au> _Lw`ͷ;s][5 Ɏĩl Go3-Bҗo-vA?M*І@ߚV GGÿ47_yʹܴvHX\ ~eZ$l#_9ӛ>>-ZOdp&${ɴ>_,0V4,RB-QA5+*_ OMT߃E|i :$R?~olZ?HR_(7NZf)UCVDZ?gZ-&~˲KhLHPִ%|啗G|Bq`޶_GWLkX_%|2o??|q-Mx;%~'Lq+wț~=KVK!?M+*9"wxК&O/?Kggbc9)hvriкWYįz/, ZK~KqǦuF|_"@^}Mz?y׵z]n¾9AM[ć =—dο?U:t7|!⿜ _E|ό5Q[_#|wA,מoko@oEr[j5vÿn ZWw&{?|xW^I|OYP=C}_pȏsEкZ'>!կsBmU>ywyyкN?Lˈ;~JAO#=Lj'oշCM[L?t7+c; ~߰QF+񽤟J/7x+4_ߨb .G_pxК'ckaoQ>{Gh(||S_m :Z'}_C [6_>Y7~#_4? F'}HaӈyG_>0QARI͇Mgе ~ ϐ=OZo?&~ҧ {A6q\AfкOқB?&.O2>Rs61QOLkW#9xZ_zwmϖAg=]O Z¿ ã>p/?-d_Myq'ꪕA+G[5O'/>kCJsAZ".ߙ~vZϩLpO!|Nz]7ՏLe{ߟB;~I|?v-vRME|A {~-Wn9/IDÓ]; sjZ >|o u+k>;%|hF)ߤziQ-'>EA|! eCG%+#OóLk]~t{.ڟDC\?޹s#{b ,ԿNol:g #u׷#O˶/߮#+9ZڃTW !f {toFf>Gr爟@//ZezJ?'~׾#gLfG܅~2ʛQ>~){hEŸH|AAKwjw%z}iih7;?"_'oCxZ/oX"BAg=Wuӈ/Δ,!Y{-٠>|ȏj HV$aIBD~~9"<m^5%>8=Co惣1ҮQō4RW1~=@N?v]& am=xo}<ſOџ2H_Oq_.{4{$?h=`w#>>F|M~ T7ҾW7,B_G?ګBy ]'w^Kpb71W̱TA+OFLg?xѩc֫GcQIRV7 S}~O&ħ~8@z4^ JWs~K>y$^o ^'Y(?oA9ķ_^l2m1kWr7?$~oMk#=5>yw>!O/} Zg%RTGC55j,*1cXcs2KԤZkZmяSMM}%^mOɚh:.K1{ոjbmzw(WN6r2hnk$E#Xk%- :R$9SqTQME#x],%dAU4pͭ0$F15(om(!Y@zh%=]h26kC776¬P]͘'[돨#~~[]>f,->"mK6Fdnqe dSt,$Gk(qSEWTXrYQŢjjN//}Ƙ]6ߔȽxӦ؇#1sRqR?ʬ=Cm2JQb- IwOesί<zes.*DʨYdKj/XP>b%ksŢMxGct;$[WSPCB;Rfb 6*SmMa%LZ@%VGX}m[U0Z[*GQzF h"FX(_Bcgn}v;x2F1:kf*^^L#emGxe-[F,GBqA5j"NFyGm2՜H04Z)gADfHmK@|`(SV6]TQ[ t^^O h/nN6חn͢5Ƭ@*-jTluGΚJT^Wjh[=vCҍc0(%ͩ&Q@͞wPW*IFܓ>ojzlțL<<kD|iGKVqIe[TjmDG3h!K# [i%QjEjz(EmJs*Ku͂'Źk-jny_ux *)GʉRQ5fcuIf"Z` .da͍4w;hP5EO-$ChkvYN KbMY[Plݺ5G%^LerNO+:TSQM y,b9Xߎ.{F~wTG4H4+1?I&R];`Ex+ZK%f4%^Ɲ]'p.QVXM#&#C*RMjզFU-g!ͥJ Jo(%>e#Qd1P;,^tLщkEFjh9#GH#ʡ՞k3`&)hߑXܜk HgNR3{;ߎUT[ 2+jS1ߴuSY3TeJ1ΑRqXJq-F搅w 0xL }52U]晛` 5|Z/ӧޢ">S5-յtԓzmn:jS%ڟ*e7l/,Vב;;(cNuo갸#ڂ^J䅮&gm%V7fպű(͌IFo9%| -Ax0 bI-[綴7Ekr , / o2{44ERqߪ䳠DJR|yzG?e+{ǹ|)UGڙ- Zn$gWLsPTf WKa=#ntɖ}$E-xP{mv*H5WB:3v1Ւ]ZKmXSSLJCHp{7THB[ԼΥi?*0 ʣGG774&R\jBn\Fv2cdk֣WTc`JI}D&ys +-_tb{JWhB rT!ƫXw} }ë?ǘ^BL{mܓoӦ 5wsi~ LTXۛiTϰxMMдJѝdq6&}0Tt31,Sև҈*UDV-a ]ikKF՗WUbS~M>v*KUZK'@z L3xrQRS7w^~<3gA Xg9 SHys#[^1&i@iep"Yg 5jj*.2A! Y-}x駭(u5 #OljoߝIPr߮yوj)`ލ"9ILTʳ璪kHZV[F6esyKŲ vN3\ң ZcY.>=FF$-Nj,Jw;Ȳxi]xX}pߕNYe[Mlv&) [Y:"dS3a(6_&JK:@6 |Sa0Sf:-ӆ4@p}NLۛc}֭>9+>Y1%KXk*oڲyhNv=w =Ө-¦Л92A (!);vaFEa*I8,0+-m=t69>FV]Ov#{^sh1 {]֝ș|*e,^c[BGe%V!nÎӄz?\c q)Ur'qO3nœX̥zvj@+7 >74wbY詚(^e՛*2P*=3KT,dZ+zP0EzZ2U5?̧dԜ,"c\& 1CD[h"ڪ?n!}!R%*mG0k?C_KdV_@ Z:t]m跢r#ڧMN mt>ۄrTAitX߃ Ji}H;ޠG4a]ވ 1nUCa@Nv|Gvb((6d3J`҅p3^Q^Aػz26A=QU!$Sñ$Ū ʪR<̓,dMj$kNbϢIM8xy큷 oݰc9Rx-(5m9>A_-Ţ>dc>t~ jo2kyd-Rk~K2[%QuHM+ Y;j-l6,tRErR@a5{oFS דrp4=Z=YA=Q$q:j?s%YZ6(s*8( ѩkEI`bgLuQY_ݬ+ =8zkH5Ua,=&z!A$oBč.ފǍ!BKul AiyA)Wܳ\ƚn@o@+u]IQEEf ;0RP+Dc!9o~㒴pz89XsY ǝpNfL!iZ~@ _GRx(dqx/L\8*>oPx5䛳ϑڍVR|9 ٦ѦޔEsKQv٬z#R!%F)}qV~>r?Eo~|= }$eIFړx{kՊTci2Sh //Z09=qؚ01)o%(!PBӍͼ-xzbVl0}&)rnؓ"uGh#W[pvrUAvqS!0,3鄑͛ GݽCCFaoӆn3|li 7Rdljkn>׶pN ̊LX9fⅎ6M0R5Fby YL"KTΙ1d[gXa oX$̳~01´2[d |*1"4#ocHYΈrF<.g1m3syfLdb.X&yHFDe1KtX,džLkRD 6dz' ʁa \ e6ljn 2/(d y3nZX~-wBzpK<++ Ș;,`JbIX.KT5"Q* (`3 }x Y0HLg)X|[aB 4XQ,elRHC"  ʢ2[Y(S163Y[d rq5$uw_ںbZrx΍RyOQsg531WpEN%N{k\t0r"j_f:+Np~rrrNJ[H>Y$dB6VeL k!H!i2YF1b,$ͼ kB87B™ea-X~ic9<\0mqI|4_wL>kߧa3OE"&=Cm.!AZmzdWJp~o2lm|ڀ|=SZG?|w|U[By؜t=οrz3vG|Za|>[|ZR׳{/\Ȧ|0ez<{L9UM <,cO𗄿!|߄KbbÄq[ CpH${GOOx%.#\GxW%N&JEMB.?{  x{ |Tյ>3gfNa @ HBE@Ze 33,`! rQ{mV/U/X{ >׷:3'|{zdX4ah."LW0M~f!bwIY! gɲU>?w…Mmiy}=/^+Ӊ-R՞ŒŃ rӺ'f(~Ni4٭3$eBMi?^8}x9f>#–\' ֏w=ʷ 7bfåiʁQByE(;QT$L=E n4Yܳdp;b04ٚ nOId#;?=N<:k89?2= }syb&MA:8@ic'`/f1|2H>k1t"yoA|uddj_͡ !gL:jG*MgͩOB-{6{gn4IUgө͔.~g澌ģv5޳>#/wtB$#sbQb{f`>jёS_]߾j#kaCgvLb'jCKN< qrOO [ؕs/*ڈ<{y(nԶuA1U];I ZҞEzm}fųS-DTy}Șul\؁M߰{TgdK ͻ0bCn31TϸpW,]ӨU)Wל]{2fwE ZhBOAuFO ib%:¡p'3RqyMD%p6ݳJ[|矉)W$S5r֫F~8U ^w^ 8T_r& K&;1,s<1*ybQJy.8#O>'"Uߵh JTc\҄eYˌi=Y=6^|]փ=C…|oNJ₵H*#{)Rm#F풔.?th#C֍|I":F/)dq7rYIw:Ĩ_SikɊ3FQA8cH0V:/aIWi`¸J6ӣ PJNj<'SZfl']%'?"R 饫l*{R \Q ƷUd .V`cETTqn|ePe2aTaQqmL\˕4cHQ3\HXIvXaE? E-Eߠxz)q9hm1_!0C*6Aa|WK>Ɯ3&^y1 M=kTc2ͳ mL{:Ju0yFLNJ.%3c4O45 tdZ$t%a ɴr.@ 7 P#yUcjA_h9fAS3vRas=r\$Ehj%"%5P'1-Vg/vlSS$!vID4>Nw26F t,:^_{-(mFH7e |#1o%[wNq?a]#224IH(=0%D%c%t)ZhJA'K0.&mb|#c2;Bz$nԠ7Le+qXnqP58ťoqm4,B5r9<`$^!(]5( S4|M[S)OާO_4MS'Dm')Ij 4g 7XTn 犸Yq (+kЮ$CF1 ,; >&Ij$4FIIq*=áy+hJGCU7zH7Da_l'yZtbLrA6kRCZa5:"=xJi0il 7"OPFf qv;ܦK^$ *Qz3zZ/c"sݹ&ʀذ^+=aXNMyV%5j,mpA]l@jj']jg71;.vd=XnM̦|cE>f/<$k>րO߰w@5fNvvS.6;4,|`='Y)fﲳ#pMӁ3U;xj!T[.䱦q@!]B*nnXAnSz !Rv;<|,|c|AMʽXepf3l %{FWv2D,Wme%o-"s?Eȗͥ; [sڕ^E{Yxr\n+=` p8L>ߙ>vf=gX7,>zk5Y["^kW.6.{'OG T'Kjq3m?aa_r /8/VkAԬJ!,W,-]a︍**o6pCz xٳ豍ܴ,!;NfX:4JՐ$c~Es5btDCIXP5F|s пt=)61z{ig7M*R^ab{iL3rXep1mWuuo8eë+&ɘeXʎ>&cts0RIyqPUO9 6a3\*%wpKT+/+HK"?HdKUBGRoqik />SM\4!?5_|MC.N%ɡ@&ms7yeS0 ^:mnZ9vrӴ'Muyh1Kk5 Z8\j`SZpx_36%)75T+S[GʦV ʒ)jvSv[EZkWFPSspRʚC?#cy(1r{e6]62 2C`Xގ.gй4{ڸ>)au{<١2 kQ]F=垒R.!xF=n3Ɯl:g^8SfLDl(@c풤v6lm]l }Ȣ{f۔Nrްsn[f۸$cԽW~^-=leS|~%{{ɮٳJNۤ3iFc}}]}1s1j}.i2O-̍;vw@vQFIAqmtePU{ޠm »櫩 EG~]]5U\64Q-kD [ۂ+C0:[l,/e`uխ Z{W|j4VCM ~_]:e#uUe~9Jf[CAQYܯWXXrCaZ> Epb^MZi}QH-5(WKkCb[EXrnaՑHsMIzS$NO}6omks/.Dȵr潭u/(МPTϫPWQvkk}kL7Z[ IӚ$CE-5~oB/X5ayYҢJ5pm5 *QE}F$o/XkeA6)>.Ur=㓕 V[{Yz ]5>Uo H `AYMM~.+MfV8E5BF$B~+eNZ6 yaiVZKPQՐ PQdC.S&7&5kIY9x- C͓deK%E21lItXG &#GV+0-&H]4C1ا57h60ׄ("@_MK:\2JRZ^VV4ZU_xbE(k[[%#\%(`M[(zzۃ5+},^,l2Ţ2rCԃR ZT]je!@ihӔHt#%#5\ Cl}RڙKZ[ר5>ET\F%j˓YZ (]uflc!?EHܗ<⪭iMPʚա5ؐHJ^/j %_J\ͻ"=Jd>i7T m sV:U?K!˖qd$l=ylۺXOrAOBwk#^Ww~PzBK~@h2zo-:&SY`}Y&_ {AVC[kh~-4 _fHK9z?r$H^;Y5cP%0.1}&|cY垶"2X*G.-rcIܳk$k@cT1xF+ͬ;-Qr}n ~5Woſ'}QrK"o41V0yq|ޞ"@W(M~̾? NlK\GaiđlSn%\&kg G/mZe~c}^A;hg튢(:&Q(:>N(z`EѶsyy 4DyH|4FF(zGs9CDdWGџEgh ̳􏰜@_)2j[E_E[,E~%sE}hM'DWDQtn?K KUE"o?/n5m/v{uV5K%7]˽z?|_/F.r _8azc}!4}Æ/&=ݞ"B~IF9:=8]'}OC8<`UЩw8Ը.ew"]<1Cc8oO#Ĩ 3 8U/6b܀XU9qZ u La98 w8q6c!㕌e1aw3>ˌ?b3Vx)tBk1ƷYF=Ɍ00VeO3~ψo`2f2Ng,dda\x#͌2e| bFuƘ8q1㵌3+^Ƨ3!c1e,e1c]?cqƣ3NjLeHk3a\͸_2>6_yFͥȯ+`}3gqbt;?q)O0 YьS0VJ W2zx/W,c<Eb?1q.c)2_ϸ~g_qo2}=b1Utl g9/c\ƸCLczow3e)o2('qs#܊V$' /b\%+b~m2>㳌o1~˜6@X++33ȸq'ヌ1`| FghYSg1V0o`_b'Odj*j) XS4-u5EzVϷP@k/jEX*z_轪H,"j^J\Z9P4t;,TZB|f[?ɑuӮQ'龍c>TR]]o<?s"BMPi_dUgn؇5ǟKt4\#&5A'M۷qWSھ&ZriUEl/퉧z?4ޥYӷh=ausCV[ 7~ZO탶|ZGJ',ެ"Y_^)ľ,~&'\Pt3nw2H"jS Ye}6<ˎA`_ur$ vfCH{  ]YVl"z޴EB _Zj ݣ˴-22bHBDg\`]'h'KIIUa*9(&荻66'Jzj鴺;\{TL>_G}gwެ߬mجڬccFJ&A H~nIԓKZ^3Tpp&|2z8 Ǔ 3uNؗm 0R*wm8JaJez ZH[2pmʵ̫9o/(gR峌-iMk(ڽ}3ޙ05=ܓ ǍU7x)՛_hob2V2NbƘ2 g RI+a4Sw2l}g&-;Dմ=$CRYi*O3 N*W}=xIsC鿍'S>3FؽS֬ܥ ,'<q'iɊ\Mwi0툹V%[6}e'wöiߝt',Qqc _nV뭕q*H`5?ylMdM)k÷X=|L7^ wfbkrl}²> RXI]`pOp1Z̰ )H]}D=L - -ygr/c=Ak^3k"WŸTk Q0oެꀿ-ƦM Kʊ2niDDW ?IAq3/PZ [E-=*6*k/ h_:Ō$?֮hMţZǏj?> KZCJ‰ u5Ωu,Mij`)CknͱHWQV>W&⡎p(? -b*5lOՑp8D#bG!uvE֬A_<"I>O ß/}E{!)Mq^UpCہpJ;$g4 +?PV'.b u_JA6T=ȼ:Q76Hf%`}(9H[GAL `7+9 nGLG9#h7>yL*)\cP$怜8Q:t(ZpQ>@$QMN(D滟e `~jL+PocةqaDQMI|:u+o#07\^;p(8[tW:ZꔓZƉ<5.F᠎/Ki7zZ \sT0vA2ӘLfzc7i)oxjPL1i6kZ Aw'ɠf]PMQKrJj0l5 |G3m- &qנe=h -[  gSS\p?!c%mk o# u@]dyvJ ٝ4d~rx!!VJ(8•]FA)xGbjJ((aP7(`FycZJs2IΛ(\•!.hs*MO^Q2z- Pcx;;%r^dɺ\;J,͆#5~!#Y+e̅7uvJ` .Dw.ɦH`cvcWلy`;(I@B$CwPzCL5R%;x /]$ȗ .#ɤa2ELwcgC/3mSmbTH<Be :ye8dJdbJ xw[3/Xu3e1f)y1MLXbve[Oaֿ`jAWkuqȕ^)-^uJF;lf3\ɲCVf)4YɌ\+elqE! *۝qJ>dD=t4BGCpyD2ɥ2zxc-BN  PR7Ϲ}vN~щxp?^3(J`x/Z5+oE"q99W\ O_گ.R9Y^N!#`V6=NL<ҕ?6F3Rc3Ma$wPPB=K IMgZch} hLkHL]l K+-]HYryi+AuhȰ bfq*yHnՏ>xqPXT"jTir\|/ b Pه8^B*~*ks EBSĥF,.DjZS-I`":q l~'*bI6ƢH#K y#M){q{q=b Nq*Ө#Nfnb'g\/QJ -nj_=B\PBJh(6$wū*q&GX#GALZ.׈Aeb'a*Q*kx(-/{ښ[iT6oya*Ljp,6"Xov\ JōR\Ldw"!=A$i" x\2bW#nL4MՈnR)ϭY"[=!>GV#BoRI!|!f"MTj^WF&:3G"ƼIt;^|F:GT"~LeS9qGKR9q}E\Beq5XaُX#a0%[FWWV. 1V :l5K^b T!jT"QYGtzcp/%pj)ka3;d"/" D=ґh 3Q=%+[ZJ+'MmN2(,X\ln|=nkn`x+((nk5ʰ7;C$}Ż+:Vol̯C)ڼ:Y*R7 8bٞzg9o]}s/}?G9|/G7t/|?Nucz778'GYHmsT(9zL<(ܪOק/IJ~wSW<9T1=q^?QcTtuc*F@:ZĎsVuj͡~#&hj%euq+Yً?7nuJGWv/UGwLWؠf:J+1uB%U_Uϻ{=r,WŪ>6XY 6&w\ZuF! FVE-ɂs] [0DS`0-X,;k2k#]&/&ͲTEPv93; dHx_>XpUZO;"1CAS($r!i)uէZU?oV@GZ;ja}Yk0pPcļ, pVht-ZܑD ry(Luh^3+Vȱ4BH Da`]HG3l ĀtTBP'Yо&_ mo=ێ3hskW%mM45Y/f)YȸC]2YNxKtCmW%q`g5 Q0$ 0S_e*M:Blk^Ɓ+ZE B |>\^.Dp p١:1/&.;%@p~B+9cTXͪVϭ1 5̉:UpHdJ@`K"P9_Z\;ǂXhEc|yqS?9Fٚ=X;bbjZDcWh\AN4]F#1Z0`&Â"&T@ȵţtv7dl6{ 58aצxs'b!xbҌqo'& DgTH (!P0aZ8$a}Qƫ̑*( jmMmrXFtR^i *`h%TT}`KA+0%s#H5sԃ iO&B5 & QXf Qs剨y2<j̒0BzFL/uvbx'Sc Xr a\ (W)C_g4/VeUޟUkF5[qgVUz1Sڗx@x)Jӵw|pjkA?hmUG:{ۿomLܟ=^+æ^|G+tHg86SwQ3y2.턅 6(*nm7^"HtYq,&TEeB8!k&M(mװ|hybe=""ܼ|9&=@Y6qk)n<\T1XV WZ$7fhg5N/r3]Lj\&}/bFօG>32,ɕr\Mv\(ydܪ祌Z7;6ާ!l1KmBME6}_M¬3o"TO;Un1BrS~.QS&h!>t*M2_ om.CMbwH>ũ1;m;`Qٷ|| aVИmsq*^M@IӅȲŽ&w;f +bOeuB 's&vS-=#46Zn6:Fltαm )CLx圥>N1B3YdL8t .3ͣAckgs%(4E;{ךhsb7 7h;1x_Dc^DO.2υm&z=<&+)kі'L4^5 M=Ės_s O~m"F+\opxoFqTt>F96z^Ϋh*ުΨ(ƿFi{m6=F>fl `/W8RgpOpHQ[66[PSgrl+Rq$8!WG%>&c">&ceRL I2)r,ғIY&Sw\)rb k]0>P[4+ Tͬ4]0_ͯw+&ߌ@ߏL׋[뷼d{.yhbaeX;f]hmw\>җ.1/.ے.%oMBQ)ŋ 68'5l Nf/kS،ӌX7(?Nj hr#߬e 6]  c%$!S~68~S|ik|8p9pkpįwΤkX">z8܄4v;b:4~bD8(Ui9 ev㯩]|?Fz GP|8 $?!Ȟ?# OpDuPi8]$;sXRFѯD\g q۽>Cwl;48եӼ#))ˢAāame@0N`Xxe!(70nfƸq'ӌ{a(C!1c8qbƕ72x7c3g 㗌d:08q cM28FJXxc-cq9cq㍌2d͸ό3~ϨkyE31.eq 571$~ƃ1~xKƣ3O(f,AE2M͌Ƶ,雙_1 h*6G00ckƽv;Ng@:Ō҉?9M\LL'WSۙ~ :a9ctfƭ:wg:_Lgt"z LabL_t;c0c>ogI?"\72?MX8ML/ad`gzo3e:C8qㅌ+#koۙ#?Ktj0enǹYd]2=3 <4_m_x=vbQƗo3 QFG&a&c~&ɏXnd 0^Lq$?<+L{p"Y>bCLc;e9cp,cf/0Տ#0q82z`6r#l&],&㧌0zx|2a =K^:a'a99$?)Ռ71>21j/dlex)c@B?d:+oc| QƼv򀢂9rI upMk$7P/ϬI5A!&~ ~^-*ޱu˯ǣmކWnh+BVz6|wIåo%۵UMiPٟtFj=9Ƚ}JdN_}Gphpf%up ۫tDHv6jlY54L'ss/<1⻨(=e5&n{Nqk{ (uiJj'KE"f}s䠙Y6+c9y7_^rl톣WO?C&;򚜚 G;b?jzrt)zf-4zJ;<*e#q#as~'% ЃkLðJGپփ?U/GCQ틃w}C ~MIs*~>[SwĴX%T J[ԶԐ_>ZU4-7)_Ok2IawE{ޤ3f.,9(\w+(.ff.qM7aR)9q I0m(nhWVt}~eٮGżFj}]ۣm'm #\U;+lB8:N2B26 HMWkjfj'ImRtqÊoU2F,Ȏ"p~eܒ1KK3ƣzT6f_Vm|2--ŨNWr+Px6؉69Ka>=I=:l~WK_X#=Aצ8XD-kS){$܍U)/I͎MtZ>YsKhXF7guٖ ֏q,a֘ZbN_ƢR))i/T.K:tV$COpGX72[&\N lp(㉙*rU 9,s%}h;ܷ9mS:C'!D)P66Uh[1խE{ʧ-vq8~([^Ԭz*j]ZܹCK`4*Ex״,ڢ}_" ;[ߧN>}yr{d6Վd=(- ӣrbLr[)D'*@P嚓(#CG}CHc{“jz([Vm$3oNa*+6 }mz:UkSo[?Pb.e;2C'P![9*p4w iW@:\~ __=1sCyJ)YPʻn/81+AdpxTb,;i~O YV-EG 3*߆&K0MTvuBM}zܜ/QM͎:<&ݸwI|>=Jy dedCۊ}/gzPfhٝ+V4v4keU춮V@;VVj]BS3UWCDPPZdͳ;.j+jM+nmM{2m.mL6ۛ1Aٓ&u;CIk"keQhY#9&br6RC¬5mѦf q6tB؜[Ipu5|L# 54vCm=k t8Kfʼn rX겹H!?LWq?#m/{.:c577*'2ܗ'S^qD}˔[28Tg6wh:# =]C32x^%X%z)ޠ@IT%BUsR(;'w\WHsxIKZv{<X;^xK?lbob0*7jHW<=;ԡ,:)e o bWpZi瀚Ju2̈'@>lԱ ~KÍ]C?3I従͒;k;f"r2xOǓ)"BWي/L!\Bz\$33Q H+ t*ń*,vr\8Z=רxT$J-^=K7}ŊOSEl$Ĉ(G"+vIL,*\F#^ b+/}WŊhzoHCL0~Tz.C"~_8E!#vqlljbT[ώh7DZu@M;$V {fwʩ;x MsNo᲻䥖Kaŝ]i5{SfS6$*޴ԃa m(韚CdaڻW$UyM_ڽ;m|*Z-JX}-іneP~-ebiϴbؒ:9hZN/4V^i:ױxҔ~)F^_i sMj%tԹG_Q\uxSM=A޲3X2(:G3=0ry?P~IJ$#ߜٝbY!z'Q@Jx|q#to#_cý.w$TKO%f61ӧQ i"j\HeMnd<7D^S͑ZLOH:^OA'vmP+x\¹FI6*j\^s\+D9 i<02c]1iX/VB^EVYj11/dLOl2 *W{nfW#*#Wxuw7Uu`rѴ,julJ,hqkL[w+nݟΣ4)$ ^,&eG(7b>/.ޔp%8x>LhyB5_g`Ǚ>^_\O%1f\?|4SM~䪉4P ]Aif^KFd1+<ۓMKpc5Z) gzJ֑Fُȋ 5G^L&%o&[LExEƛ)$q22/? >}kK4҉8gDEP^u+/_gt#v:"op4 ώr,݃[LG'qWܛF2߯ t<5mM<_l dz/>‡$3<FfzdNY'Hib_]&^[ SرaKF(]UKLKL'L}%=xHois_7On@ǍFnON;!\kN&M(]NFd8kD&P9UCÒH3!L/[ =*u>HYnBDX!6mo|D{e"WEZ/{pRєMw]i}Bgׂoa~e/.#\v =66^\6m}*^ ;Z.B(p); |R;bgI;f:.w[l]x@ ߑJ!(ġ^U89\e/p: `)?|bC"L_T~.f_HscQsGT+ >泛P?e+@=װp@ńWH8V#'l U iekc 0ک4A5@7 X\C ـC T/T ~RVUѹ5+┱ U#14T3OD)(]j]:%b\u2Qת(x8< Ͷ,'sh- < ҋr3B2sb; = |Sߖvlx=S7pe/F.ښ░=JO &inkI`5ZLfSWKϱ=<a٫Ts3m/.)/L!" CDX CDX CDxQ aWLHd0e^`pco:1&*PZiқpGn~^e. <X ܤl]M'=#>ꏉ`n!T#bm#LU\F,a"*a.'4Vp8*))IQ}2{Zwj0D^(!qx#7 x,גVǖNnL8yFmh+c3ucS1n"-3G1c?}RGExL &y!-b4JyR%\6N.{ӹ !|๢gZ=@/ (Y:i!^&1^շWB݁P`Y[[Se˛ ڊKMjZ=iyG8)f Z&uc6nX߄Wv[XwBeh뤢 \xTݬ:\+CMΎnS92_ոZYh\!h,T uݘkj 36j6 zV=`/5_ڦ%5Jf]1骸eOغ{n{B.)^Ūݻ\lcQz]vxpxǍm?*z>awnŞѫ}'M=xθ2.gJ.1VOMm0q(\OŶd[qmZ=EG}n+f_dkO]Oƻomzd?RL>s{~RE\z9Ӗqh\{4O4^76nAxx֖<0`l+l2}qi.}uɽF?5V2}mnk5>X c ==6y cs>֡ϯ(-33u750|8+Ң5tvB-ZS{gw\@}"l@[Я+7ٰ*RQ+ڪ@'wv,V/1ot-?[5xb:pac{j5Vlhn 4Gun6Z Zs;)4`-wtj;6+˵m-lHqyN^и:IG3E9hhlQzY}YCy+V7T.;jU^(XAQ}k35ܗn38+; PP\F-itCCWcM 2*2~J=WF3V67.kh \֡EU0_хOHNij'f:_ tTuXt*XH8Q.j ݘUI[Ql"Fܿu 4WPK.B#\n\ilNMc ʋnBs@}gÑWda&ĽN}V5Yf̫`g;ڂ1c.崤;VjGn!7O 4zPMyCMtDƜQ @x5@ hv ZEغt[B&* mٳS qF]2 1;(MM: +δVtiVTdM&ңV~-4D y[&nJp]Cp YʿeE Pg<9aWtuc_B*b=_S_Ɋ8O $)ڍT^y9VNsSCx^rty{lh%,8C  kXDj$w}'G%J_Y ØjD/wcCW'&8f6gssiM"Gp}|M_k#\9O},ѸVNnK=h==~ ?WRJں= #=it6}:Sz'1jl~21+v`.5׿t/ gkrZTOt{MSXheCpϋ'3:_L{!,ǫxĉSk! T 8Q<j>˱gR(ʫ!>bWt)cnHm]ϱ/}^{"vMM<־jӍ-8RUz*=EdʳDyUjWX|)hz_!9Q ToUԚCHWB 0=?ߌN./&5аdZ>.fse m--YF($.bccʢv (mZ~=#Su -dt(?|7ltߋvT0#5,kZ{Yge3E?ZDޢa7=m0K#[FhqqC˚{ɓX{bz7e+=FXxL_ſ{cMڔc/+2,:2MK5"q{4Fo{ =߯?S|v*G C;chW C1;1tB Cc蔨9d9iGkUno2,4i_c,4K٩BGZh.и5_h" B |AsI#tZu:`]?0B! }fni-3zE{|"n3z4N'YhzJ }v ]C_G䰿2F1>Q #e p /~Cϧ1X{l,[6ow"nȯCCo ~NҰ -[r#n)șt=bhth~q< E5ak~mM~}/hz`xv]`=NxϏ%aJlE{I"R+]Pc=/KwA BY~t^ vS `w9&v;chsg"T8Η%p!H9q=;3x#"%49珉ΟCIBDgI^nB =4$I\q_F>u֛|E6\>ɟ>>xB;ٙ z)[VO;` ;u?o{  ,<_b~. ^'xO#ૂTi\+6 v S> an +^+Mpূ T0 xv' : 'HE0(^p>! :ɂ g/xr`w >+xTP|K]@ݝ"JA,wG_aA=ΙՂKZ 6{-O 'FP7d nRp%_ z tƗ 2AJ_,Rf7Ap,x./|_}#({2;K =KR2-"^&[.J.O4mЯ П 3&X#&3 S.o ~&̘#xn2+zB_-tз > dWBbO,~еB/l-)lo? OeL(x`loIe?_< ? }P该~bc~i .N#1 N/IϤcB{Y?-LQ\oW< 7 J;D"Z# dU ^.En -`NSU ೂd\v /đc\$.+ WEgƽۀ\u{'0E0Wp``ӄ s xZ t[Օ#=YXq~|&N`|I8JzȒB~ NB)dH2>J~S:3 *eZja ,~C{ϓj޾s=s{z[[$IbGb +0|ku.*^#6w_W.\}JɁdx[Q?V4G09xKª%9{?(X=OBp: k{06E3`\tݼeqW3Uta@+Y@N|U#uI{/ٵ{6rKX3׍3#:199~\<9HSj{k_z50j ^|#fX=+x4Qo}dyk*ު/*y> ,|!t,k8)/A-D҈t(JX25BF$ҩK؁^d~$R;4 cC(KڿH=p0Y\*sC&+ɮX*+2fbSeqvމu5*{\ՇSwխ> W*/Zi~n>L "חqꯡ+4Qp?|6Z~-/CK& :TJD+L4=DwQ":þn "դ137b_SNkmIb2u޻Q ;4HBZiy4,5p]aLqWxиRk,i77nEmD:iqU?Q[MZ5Do"qCF-} KqRVzӠ?&081U?pA5쑱&|X8 wuX \%ôkBnVJܚU)tTWVCT)CX)X _)!+BH ( `ճnp/ O YOJitVu ?V ,?6 6WfV]%Xe~lNB5r6z -YߍQ_/ nCfLzT c$JzY[ ma$glT-u'9&^i 噯_l@ͨs#-YQ+ Jd) āl$Ѓ@>LreTs &U>X t.u=MFvΓ?Z<(A-ry,9 g6q$\v;\n+L :_x25&K4R_ǎ.לUc/0dm] oyU&!dWm>g-ݨ[I+6#LJ`#i%-A3äzdQZ\ۀ/~^5KɈpa\ʠj]AnܡYI)#C8شx[$MT RCO 2]jcm?$[تٲLSmA Eʋ@]|H8ĄrK˅E.fz1Rn->zh>:_kRy! =. w1o^V_}4_^ˤRN 9JJV eV0ſ[%kၡx#@rI񗔠T.u0K!ԕCo+iymA  !kГm K{>XPS\EΦ:0*r,Vq˹JES w 63rWA(Ըg m Qm*<PghW#J(DE"?XG!D[EA:ҥLETu?6;`^?pk8V]G7۽j þ*{.g9RV$;4)43VHFL,Hv0tg L#AHM1e<[3`OϥEwwq;Mzӌڱn}b(vX&3vQkxEzTi$6¬ A1ˤs/ 2wj S;C-;N -E,m6]5[d;hga8͚xaU]5ekg-=k3H~ȋ y }&v'aN(cpmMg/`I=N|_R穏I-%Z:/lݫVLcEK~~O=fgcG.O@8!i#^/fK 2@GxVRDU!xQW(brxJĽq!S$;sxJ>0"\JJ« o 4 o% {?"B_"~-_#[I8#pbaHF#ƻq%O8[e[5};51n{ G41äYŸuoRh\UЅRU$]. Hz.%\NAp?!?5܁0YG ܓ!1x[ xT>w̐ @ "{(aSp2II: DjiՊEZֺ/UQ[TlQK"Tm=3wd-rϙlU1[4a4a J2^$>RbmemwwUmDm?]^/G+Niq󏄳.x;":uBqdkImOg_z Yu;ۏ۲k]v~O I7M%;)M5n?ۮ#|_?@m,|х$%rm5ɬL<t?t:@ckkۏ9~6#e_2y QB7cxM%#/jϡ?'2\iQfEQiΎPad!wA/i*APaO&6N0'%؎DJ)E=Hјnݖ`j5RԽ@DTDlJ~w&$P#,;MTƸc.^)G}a5UN˜nkc'U];S6ɲpK%+Qn!ךj:mOOJ^ߪoR_:s뱝TQ9rٖߚ7PlX#7` S|mEVsfSM3Nfs5Mw hBȣuG06ñp] mf ~dҾ?ft, -ĠۯSVDlp;9.j%e#xqv@ǡpy31L6 N=[)Lv\S$18 CoAh]~FT+ȟ V jI+b̭c^IeɁc6ȴcvIRSRF'嘥<Qas>I0΃%Ub|NI̸ ԥd XYic4&~հRTЧjo[DP@W+%s p'rAh 7rFȾUaENQ^?4ȶ[Q v4Elر1nEW|`} N&G ˆv.knm$8Jf$w;4Ui hjhfQ_\ `9G[!-q\-(ɹn(^nL#ORUwc]L.wYJy K] riR~8D5Vk~"8ubnG?CUa,F P߫4KHNjtz- [Ln!qQx ,2g8 ؘKm0g? 4EUpf;=]nbfu`3]Q9WXʥv5eYK m8gv Pʞ.Vg_B Z*0d >´Jf˩sڲh^ڏ"Lzv;6ބzEqp̜o$C&׌1`-8޳]$˥M?< ->Po}5l}g4:T)<̳6i?m̫׏R地uҩ. OxaJb8k8M&Kb6tc:7)n [y j Q$PCLf>C?$7uS(-G•&ϓf7SBUCCQe *0 BRRR&6FIZ5,6gRUθN]t:y}|^m_N'"I\fpD봸 6lT{puZ һvNQ'c$,'ujmWYp3[YoJHelӟ]=W.MUE "S+S';^os?2_a;7Xxo>(O$k!]b-npiSԽK xKjtJ<ڦ1,?aƝKa&yc}43w֬4< b6\. \v Kb}I~٪]> ^`j<vODSnUo'PMOdsy1uXA^}/Cڧ4|'.8Kxbą>~|S%ɛGU_ <{HcKLr\``8:GX&GQ [ 6U7VTͷ T87رRlj<+5?Uc>YnPMDRS:8qWA*O8X U;X+񕂈 Q JmT[>j2_c*X~]i&q knAefb+"-.V)ջQuƾB~3_9|Ɜ'Ms\6prŀOs%b%ڙ#~' QsJC _8Muu9vE{ qb Cuv^qΕV/y=*-ZD?IX0- #z_vї8 ,=\15'?u6&X0/\:Y=rZ8Hi-#2/Vir_ȕo,ŀ.EPMc6PI`4`uq}MMqlؑ-5#Xqoot\Y6oDMVE} pP"Բ6jkuԦ[Y)4#PW}cs٩G`>MX*X1:2wj"K:>4aq/.t`$_#'=n=mLCڌ`G#vq,snwe9s{ ce (јUag bۊv={ Fcпuzn =m1mNc6"k}H{k7n5:9!1hq>Z[ 9c1Ijc1y6mF6~}8o?#(MCU0D5h@$B1bUЎ,YHCs8Z5VC* CyvH_] (|"PV̈Ë 3G4 Łb (/GP\8Jɣ`e_!b.j 2*t]@#uBHLhnKJB$n\S%1'N `%ȴ kcM!0a $re0Bq͍H *RVZWe^hzNp$ilȃazԝr~ucsيke^MU5\c!TzZ_PA3օр$ԣ% G>;EBj$11 Zi+R6Mg TcU2n p& mUZ"!%H4#v&`sL3(GEt? 9mKo ɉ K5hQz"5U4P i747Ѫ&Y+.$5+UB4x]Y$oF|@&(X %lw/Ef5#YHnM%%N\JfV63KyqS3ÌLZ%H ʳ6ZU0KHB5 1ǒtǚZ&L2,JªudsąUkf=~٣洎0rL3$r X"jKR0ZA1ȝ^h%T6#S)!kYU&֢b bϑ߿^;Xb>IEˁHQOA93fL+2 G]q6_K|K~\n\m+Og.w{y , 싯G}c噞YIK\!n|2猾-Iڕ8 u?ºۡ{<=j<=1#Ķ۝M20uFv? w. &_7/Եh[˴(."i_d#iЖ/ua!⿝[x `zm s awM/δ9E~Nې7\z,~K#T{צ+a'Ş{3ϒǭ)f'U޽hMCd{{8E/&F/qS) .^5a~^EaΉSJnI̚S9*'{&ZO)3vF N=)t:#Bg"=ֺ9~uzКmzQ|y/K̴KR*8Sh|1b/<SKNOB9o>aCK{)R)zA ,r^ZyR_ŌmF'_fϩX8¿pų*+fͻ%+َ̓#=i,wPG.x/L^DG^Q3į{VE?$S&a uUpp0|7rdS/ćУA=NilOS˙=U`Y A)oSvؔ6ɀ\ie܃[Vv/hz=JqOBO+Ui5sChoH(5>@zU]kf\ ?sA}o߳%]}zYL/gzCʼn#@z`֡s8eq*L6JPCg,7c? p ߭ /f8q&+/g 00ndq7/d|yƗa ӌI/c.cXY1723 1`|].ӌKQ8qRj+cnƇa|#]a&㹌>Ɍ2fx-M{4k2&c_!ScŸ03 1^x㵌?eAB/@ь/f1̸٩Uہt`1ÌOޫo00b\J`؟qd 4K.q),Y~/0 ?c?f(:3]h(;32Ƹ ƗLbiƞi'MyL0]tYq c+ifYwO3z<݊x[q3bj0}̿a|Q8q*c%jƛg|Ə=qd݌3N`\x%ncZތ#/`L}NC1IaPsY g dn[rQ~ru('#;cFmؚ%^33# KRB^x>RYsapHBCȣ A9S朗4}89 (ؾq1`Bciؾ]T6e+RC i1bs==k'Ǵkk45U:й{yadM"EeZ̮IOXoD[VQQآbV~Z]Cs\+B5$`(Aņ UqD59iA]#Z㏩wnh8ə:ʙWsIt+Ц+t1e|s&'p퇾 \4e-5vC%_cFb854T72X]֝tvtqFBm٩ݍR:~D9"1VU8h8NhwJiD u>X*)74f*îcU9}5ٿTk$ĺ/|3ƔR) VƼpߏ<o}ےj8vUo}b5KsF홺79ǖ~cO2$Syz _%mBz@b6 Hw _C:]9ey2~>{MؿX7`;E^Hg,;kc@~ ܒ?8T'9jޖfQP8rT3d|iYyH*'L4jiӯQ]3s9s]T[ohlqmI  /]|J:.n*rBXYF?~l}VGz a aӪiQs脸Т_bIӵ`p'@ KQjKhj L=q<<@͛G-ynM_=x%&L: Cs&XlSTmYm <vLm-YV"7_"گ QLd_KfuF,qkpN stAUJ(,KN ;z) bŖe${dSH!sC9M1Bý)n8sQwV#$ljy0R:iȘ6[G%Ρ_&LoPdi1nZh |:5F5?\!Ze}-Duۭ|-PmU; "IW`raMߎ09°͑HZ)%wTClڕ#bY㨛b:%yՈǬFLĆq--2:Wb7= 2Ww6#{}qh#E&ZAZ-9V,2dB{TB к0 IHDkkeNyq3fUy9L83}"6 1OH}G̤YrںhM_Cx6@r67 ltK}V A@=h~)!t/WBEt pJ([R\=ӁfU_Q@-f !xHFN57hmY'%w`= M W x ~*DZg{7Lh1tq NʼnN+P"6ط{`'asHVfn w["=rseژ?O߰ 4L?o`{/'lڌGsحAFȔ% j)?#H^#Ct Ha:&"Fqpÿu/=d::ﱴqIFj?kl08kg FN9}MbL'>IʉI䥣1BINP.!w܅PTtV^_{[zSv!GA7i0~o"ڎeRE#D)Yf<dHSrWdإV V*WOU(JP9RE 29TE|xSCUe_-õB.dkOb R2Y 1Aspʢ(33r֕82pMԸ$. #k( )A.+bv7ɓ/dۉA "'~ISFG/p ;ʢFZtQQ%j? 9#yk;,o YuReZU ݆/5MCp1FШi.7 N)Ux?r]k騃 IFBQțRU3*Tmprz5T9ݸII&m>š|UIiRON"zfMNJFWd ͈E&)&M^O>qIWkQ<:2ꚘwwA҂{QEHfa;qb8O_JNf-TPk5aqv'H СQ71Ae%D%c/.sX1pd`EqPQLח&1'$<N솰&H㰢2E,Rn&ˣ\GM'be2b A}(Va?f-ΖBقVvu!Ql>pb@+2Y>k8]QR6ٜ lsT[" n㑑*`r?2[ڀi{ X3X|?lKިcY4`z]& X]kT CEhll*_0w|;~ޤ#e(V) ]] 3b{e9EܯOpwxÎ{=|iD{eӽJ4.e|s\#/vxɮU <.+ O LknWk8Fi6l&1ʽUt:y?8TcҢk[B~"Aѧwv_߾}N:j&}5ݚX9~~ufpKVV.b]C&#x.Zлj]Vp$꣢'鿷Mus'k-ҧw.|`GO>7Z{oן1޺vCOA6* ޡЛ!54ZUWQD?tBR;mzȚq=9}$P2>ܹyaY2L,S=m%(ZP|r@&{F2cYRF|U\/+W.B|fH"Fu'ZZO%nQjZTjJ?rBl7bdjK3Y+009mj`r7rփǁ0z٥ԴaRӪ6}QYZzU0*˸S85!Uvf_G`*CgI~$ٵZn&g[;%{]%ɶ*|CB٭]LZIy/)HQwP2zmc$9=4ز™AvnsQGzd[I8{'%1Bc4uEZɶ2')M%I.2ct;!MMn,2.b݉I~tl"u辨u/ cn~wabnOKƢ~FWC^I^&pgGhMJIզJDGir;'4 caUL6N^Gy?{h4ak8;tLn?G2N839q=?,΍G/O6!'_GMq8&yכߠ5A?gL%z>>PcAtIoY5@UʗB( ˕xRYHBiT( bz>{*/L.Ԕ*n3rW3E6̸]5딸96z}ϷH֋ۈȵ1]JE- K"{;㿹B5]x?u|]4_ކʋpu&Jb$; kᅪUN.:wO@:Л 坬k =-{[lyj ,Ajݢ,M_(Ed09tALj'@mcEc?5J|,loa{ڛquVw#ϤkiVewUb!йYp>aWؔjOɞm,Oǁt|(Jom*o} nR Ho60{T>vo݇OzU^3dRU^W1gWq=mjXCu`W4*DuE"'QK C\/e*9yHt9>8WA;.bޔf|<=+Ownp{3=ȡs(yCšPϡ8#NZ:cjn>؛g_͢θuy>hk'3e\clcqc7_3q;n?3g|,4/gX8q Ɵ0na|q o0b1Ѣ`"R^6Ռ?fv_e|#o*bXϸq#Ƈf|Y1l 3cX8q!c *2>m{1[53`q,: j 0)} j<(O/,cˈ >C)@z[܏ەƙ L{3~0'Q剼X1Yvĸ~_d?d\BпӕDflf*`3)cCPƱ巘2 o20?gmxOp*˩-03&1cy=72rc;YA,?/_Y~,?--I3^yLd|*72bz%`RRC1ߥey%LZ%]cfd3cKa1cu/E6̿m;g)?fdI&?oeq+6ɪW~hgp(~e7 H{X2vG2]-nn8حgƅ̯cld?ʸHϦY(?3c_ƘdyB1Yc|0f<ǘ0q$4Ռ93f+,fxf'2^X81x+b|FKg3elMMa6a`LjbF?w0b7941 fʳa;4T~){ i~E[[=}yG`;hM]@ ^e}t_F١%];T<zR. O`I{Nޘg2@6F{9/'|>>|v,Y>|ǑDGBD|>+.YY>~|OYwg`w g fLwsx|>d/N~$ʂ?^2ASg-\Rm $c77;usEY>zޏʳBNY,޹ mߞ߆i<-z=^h /ݝrE>.@u*#zN} \?+g%eJVC~K]Rdo%֔kZ_۹=)Y?7`lPAaleUcp&8TPE9s}~zBDZ^l׼MqŊIj]Zlek:f]g?Ī K?W [I?Ͱ{Pfu!ړ5z:WWoRp $:ԹtwYH5PZãTuf3 */rQE7 (5M1Zd0uenweٓBgz?RX;Wa}}#fd7CXŏ"J2qYav~m~4:uf)O4˧RG'oY;U>,[OYsrvm,pbCA֟ƕEܓC!< XR>yUw4 <o k^w;vIݜ'xdf&sTO}Uyh"ꦸ5Id{{Bihza!ۦ"&0ov oBۺNg1A)GX#F){iXK=vL~ҡ#?j\;hO>F S0ʨi=hh! g@J c%)f|u,dӥG>o}Y&qX+ďo^/ߝ=vG_1ùL^Qx.['}5;dvCg ,\$s]0 Άr!;QBZfGe98_٥%`ƌ<A;!4[Y8d/s"KsoX偉mQyW9VEN2OSodԌ$ OrQ d% GTpUȘ k^m2Rw|D;ۆ4Xgrʕ=wN*A!P@ ihNYjz0N{$[jTJ\9[}Mԃ^ 1jL䬦$N^r}+>{cl(LGs퇬=ƞ՗S8$Hw=& 9$ķZ>3s3S}yl1KÒ3R7gG2(eRuJ XcXPD `WύUğ;DQFړBBR64T1ަ3G>ͳU-53Hݟ8gG/60͆w`O+`~ L+s*y|jFvQk- axh.k$S*FAȽIė0Z q9q0HIPE]|$Ji؂X$R7eT-ݷH** ~3?9? 5U+3\Qߞف}[%T\.;u2;FVuZzH^N_R3b!5<ߓбtu w:Mk"|BW͑3n(~#·D+È{z2%%bRv|㳔,b~,a(-Ig, 0BT}hڰC%2R#sa%󤏩ħS8#>5ja沘pQ(ML wAd̫LObn+pQ{Q-*]0D GCqϓ10p6s$;/ FBxLbIf'/d7/R/TG ue ;ĭyJ~zmޖiwuɺ'ˌBc"y5GSusp?uefᬿj:^~Y=+^BS{n&F9 ~* 2/uwݝv0kMsj=}uWuݽn1s;<-7s +ɲݵ9l](e!¯>V:H(%sdK\3!rٛB]~%Y E4^"5ˈB|aɊۻIqf7' z&S;G$3g@+}x$'sHwxSx~x1FZm#>'ab =d#L޷̿c'=ab)IcR^20LC3I~ˏyx/{5#e1dbtm'"a#?ȶkN-@7qd?01AZ{ }lɠBg!?(q?نCӿzŞq+p?D pB(Ug':{"v\,Uɏ9#>O{w43ēQ~<~LW uwE2^_SER|o{및dҴޱsZT2w2"L\$dd;6OcYoXR: d"A wlNǠ|P>;X8O]|T!d_ՊLM3|^!^\R'q CTjL1Bޠk!8*jD  #chnc{OPɑ?F6.֣V{l|ᐹyw1-W*L{_/:Ob9OZr>i:$C sȎ4M٠PX+veF߸1R-e#aq_"L/aGZ[&̳@l2<>dCW0ʦyN] ٸ4?|:[`z Ǐ f|oI^2ՇS7%l8(h~#?M@1@DMsLԇ}&::"8fsyTT7& 2Ou w)If\oCcbRC [ lT,|T L<},LM0ԫLK[)擨-4@ b ya !$ pWVvdz)2݆ʴ2&1lT/vON0oG<&L: f\^aXjt&S:Clv?ӥj+-}؋:mZۣjXL2 m) 59To-۵ fzi2L3*KVD-5i3d BstBZQrLҊ)=̘Z$iT294&NA2zLRz֊YyamVg#^рdv#E*1')joaL*Y׵֔dJtZpl*:|m0H$sQߚ8'd3zLR8S 5qvhPBUKL#pHth耇:2="F*/OTd&PGBՇV7Tʡ$I8l/CcaIr̪K3&g^3'ǧO38uXw(\lmUȧ!AEjӨYxYR@5`.[j.%XoC Sx9} xe︕<A7/5>%uLx.[f( XH]`5}o:!rvrBx;~ g } Ѷb)p'+bKL 0Mt]A]hkzED3 ԶrWx+dY$$jZU+)¶I:5ڰGWCU(@7.5 \G`.t9 R~?u:ߠ8Ss}HԀUp,:g[Fsȗxub˴2V,톇j*VQˑ˹'>I'y>O]KNѾ}t9_Jo@ q|w*} S= |}Կ[dyG |>_&r(3 I $x$oA&rXrؠ`.[DZjO-p mKi n--!-p;m{h v" ~P7B@seFS Npk B RsF;SᝉU0ICu98|DObS ,府|B?;7_8cY,t}H=]m{8Πxrajӏ;d(Gu9ܭYt =ӵK޺fŶ#49νWpGZ\/K_j1Uq.LWEU\úk bײ }*تA`.uNۑ^\|n gPpOZ˞7ī`\9V|_`86_P. 3x.rE-6]p #ut@0f'6&AnͽVy4ͣ-s+poGWoy^J|tNO>^g.q=z.UM1k<2RS} 葑-5MںK45.fdc#jF45DVXY7.omaęwcꎆ<\xUmuy #6t#\[[W/eWL եR(Ɩ.+ʮv̈eMK46TDKԟWƖe e]T˲E]cgXR\ bZ3#ìL1˧2|xkYY ="?*EB(>a`6ubZO7Z[ܴzGձNAJ+lMvM ~ԕoZiPw_R*37TAýgeMYT2݁Ϭֲ͛݇htSdn[;bIϭͱoנL*h 4! M~oRR㕮rz#'Zm_~{d$5T0.>ǝzGξ~wZ "SgֱYY[]c{ \5Z.k ŝTˬ"ޘ56*3d<:\Gu55ǘSzJ<ƮT!KȬVYa:J~ֶU09)R Oe5ae-5I\UTØW U5֦Hs#O*=U#Qt'QT[Z_Q6K'#ᲖZtü:$h,wFuG7ҥ>YtDsuuzM4IV0"jvߥ'Heuz|1M UZzE-hD]U_k̫kn@g[jDZܦ-.10t{:pkX^iF1׷6- hV03'ʛ!=;J$tSɜ5G@ 4^ijbZ[PYB3uͪ#sݟaR`VR )\7.\=MkWv~G]}iĨ|^> a͚[[{Bh\5c*:Ea'm|pqtFdj:4W%jpt0-sxMuvšsWͯ,-Wf$ *txs@B 5HTbj4ae[$l4`ĪVautT-UI+Ws_⬗ dXUK-Gr!:;S#:WG"V$Ǹg T0P|Uha8R7BH4*k=Gh:deY &vYg춺5#@Ѧ/UJM)2 㓝Xfc~$bCS& "-F{]GIItBnJU0g̚1waL+);DfPN#_9ye x~ON7B];-u;_פ5}ܭn};'':U&;Kn0&4N0Pq[bÜ}oW&Ĵgb~t[iv;`_}kϏp8W˺NC=sO':zױYNv v)Ojq[!V.+0_|(V%uF+zg$(vKo*W/n;?_xIs6{~Kbvvܖ7Hp47wB|UGqlٳ,{%פO%I: 7GIGkzu_e`oN{K/YjM9N;fО:)&оJShH`@HыmWY$;h5Act䳏/:h+4p_FmcXz]j=339hdcu= F{O7A{.Fr/@x&,Y= 5 q J] M 4~M>9f!6A3v6>3v㊗-349 r|T|+vV|Z|+v>6A抝!_ w4`=dYA ]s&]s#hY}~+v.T7鎧3h ,$(|8|w^%ֹ_մS+f-W5xjEYUOnYni_8㮈b7~q`qw.MuX:c/x7 eQMU`}ReQ%kmY.6:yI]9%q7 /7X 4/.+K<"2^~Xt\n7 7p/K6Q|\s'90"D>!ӓkw?ou_}e>4ǘo?@j/7nʟo1~=ĥ\Z{D>A¶t}?is 4̭_6ѧ2P=0O_G gyx$pI_E8IkH~˒?|SM2^xࡆ«]njxGy3||X>i??~S,/wKɆ:AO~3+Y۝JvW%8nCܝLy|(+~`%esNNH/!#e# z[@R)?J>M@3IJ.])]?_)u~]AV8rgϑydhYqL(wigt3C=x'y{BG'KGmĵ?/#^I U/n!&JFO!.'!n$^Lx71 7 ]'`%+g/ ^Cqh*8b9q>A\KLF_{=ˉ3 ˈ]w'bT fEħ'~@xx"uWo?%'XFK&n#H|8>>=1I@ٻ--O&]F)^?S8^S|&h(_IBHE_kK.˯)"vՔH/i?1=b H1[B8'WGĜT?$UÉgO^'MċF_%@iGI"=xT@y+FUԻ]7әb1q>%][Ez5t%I|zϒ~?}ˈ5]A/ jP~;}DtO$' k7o7I%ߒ;SP(DĆL2(# ~w_#_DN%fv(?2b% H/".q" q+גfKE}%H; ġQ2Iz>qaSCy;q5kw)6S@9A\KH[HOz;+3bZ_a BxqXiˈ$1;Gc>qx1nkď?3kL@<!^@ Q=wN돩1WJ{!LuGx/uG9nӉa6įon!n'~Mĸ#W x| |T}3o&/!H @{ $S!$ḚV%%hk*V VVq_@mRպ!.s̛g{r=sw +f?CUR3Hu)"_=vE>X4sfjZ}4\K,/=g,un)Zh֊:-^8Z,v,,Xrdm;u5*tڶ'26&.rK.3m{02~cVZȎpUq"}7:c |'cryb=- hB$"fݹDazLk."ϕsW=Wy*k]bu[riT{V3ͮ3 bޛڒH=H=$᠜]1FpglXٚ;PjLOrW|o<9'Gx iGvm+͊19%Kn $qdfw31|'ĈnֹS4W_ֶ#npC~xc,D.fl=SWwrspdWtƃ܌X?ld&X>m1X23e%m. Lss2hu=d6J%QD rb1hrjaYfdg\m V׌1j N\v^Z+cO:-Nc*<15Jh&>rG_-Nj!JXOtCu; +q}J( H2T؊aFmvK+ Su/cpxq4s`J4tHlLP?|<cKoᢲŋAjբYMa5V [?9Xm37uB7`|mU+ծUюpt45Cu;[)i{sz{LG]4Fa%˕҇Dui`xsMOcKD,`Z)^QIKP<ܓWXD78e(""p/b&,\SIýE᛻ Z2=b*[k! l”5/{tAjQ}.~<$<◉!U<$$uy:Fql: Ն*]b/武V먾,ݝe^rLWlNUe02]P3 t͠//u;Nx&ZX"ioaLҗe f5 ,VZbE\V1Uf=?f @l[ !^1A`]\B# ,TFf4te ,k?>@14ހ =A ^]n#K'w5L0n!f?^[a:5Jv12]T'1>Ex` \-eP7ddp$,pMty=Bwg5l!r%BǞ4==ߐi GaDׂԽ?5wy hWD }dyv''Ctgt1 "/czzxÆ<^O&tAw7볘ެ. ]})tHLw z9ÙҴRSW’0[IRL$X{ˉZ(9 7XStS71%]M68gn#Np%1w8;0NuQOJ=zdhb]!2gGkѿ}= Px )(ޡ~kp*DZ ɖn~LQ1φ"@zy6Nm7ljQ΃lh8N7!uVh4ꖹnXE̥}0p%XDŜܜ$a-|.t^-l8=7awѤMzm1U(kM3|dZJ_~dkx,r29R\5!8rPVH;Q!zcRcWDo]]됊=ˆ|hNjgHJ}SR?EG+p.}Y#ǧ$Z`61Itǐ.k N&Q]oGT'E$6Nc+uo{9x!IDK=$k '#A{3)o'`Fl _$і${d3 /8-'}[G*fz?n灭K؈*&ߣHD'Q RƸirε&9Y&z"VJ'tLg%1ITޙV:XNft[o .&ޥLXT?7d:bILXtk3*x{^Fz4{R9ٸ@弚&"''|8Bctdٙ75w/ט_&W\̆1i2C]ã,S+tpzc 9CQ[g) X7?#bi۵~SӍ~Mb(Q* :7 s59H3^`n1Jvk`vݔ`X>4g)8(=&;CoMfM7>ǃENkXp['/@v]&z<_?Ld=vm6FrNvU~ӏӍvvׯDZ;.; Y[]FӋĮ;ݠ]Ay>%9<:/aŞn̤Gkј'Qo~8-ԩpess'R:^rU-F*O\d<paKvMJT : 55.v=6A2Nom0 ,oeT+0XR?ٝbl1nF-ZxN`gq7e8f'ޘIݝRSܧU90m KONm1 *4bRf?N曓O>Z);%WLw2-Y$Ҵ u|a%?l!e7E}191*'@լޙFrp1ꪅ\#rX, ǭ"">!O!_30E /!b*o! VEmŇBzS)uq/*>B2Z5hi/PeS|z6 8[\q"pfXf uapqזW &ޑ ܒ)4Ȗ'ಝsQ"_stĺ #ޖ=cG\q9EW:shKO&3\Z\nB\y@a\p\e ˦FS ٞfsL_|7nv`;sQuW|ci,frZGEޡcoCe e?0`.gq]Exv}Niw܁ŽӯsM^:.\XU3!py~Rqg|X<>"ρGNgt!e0p\rT^ /@/u;Zg^lXcN\Zvhx4 rÀ-{ xpJ.nbe.U\ڱŀ]\{^u"Mj?{xdMwqD\g==՗p\tN.>$:=G+nw =?p9El(LXp\SDg_p^K[c;V;bIӬ %b4!gY8~.>A>$vψgu"dw Xx5۵x}RN"xM1@lMGxq/ -8m  dT^s9 @oX‡R%ϤJ`Sӹ+T)h?,>[ȉ{` WK39܊t8Vi1c!uU4'\9i7 .^bA?ߨLݲ7>Jw>OwG{)tÐholiֆ;6vƚH"555E'm0%_7)o|LYUGuD#y h1-AEr%DE4hP QٌɉKm7ڪ@e *VZkl 3Ʉm^;ZY;B&jYSz܃ϭ}ѹQ+5n|=>ؽwngE+Ys4P7WizaX;wz}5t~:>캍*|+so5"}4pZ~{zE4Q@ޟY?&GUtYӷ^/v:gE6wnۭ/KJn;v{@q?Js9zwGk֪{!{p__qYgoeXu:jՍq{~kpwo sV>Xn6Zˎ.%p(ZWP Bs*CP[]ٟC4T7ЀjHjECFQ0.YSD5-jn_ wUׄպrL-\tnCk;j9v!Ty-a>WE[:[µ82yV^nBiDhDյz.8꣚Xy3cUcK+uVz<,ΌS$P!Lc"mvkֶ) 41C2 5UC1.D&mhP1R֦h340GBՈB1^UMS';je tB~Cks89oh-+#\m;.@ϚSQ3Dsz͞8wf|߽Ma0p1uA+e5!j4Gۢ:J?*j54<\t V(ԦkNULh(mj{dhTi C]QMےN7GZᯘkh]l)Qr2"SB6N#y.-@$$RS QZ5*&,l=XV;T2Ģ#4\+O@E`W + Ǡ}qן| 3[tQ7ץ#H9Lb|t )]?k[ |aϤŨu;MvCy:JwȽ? '@.5qsu+|'bL"a."Ij#*oMG1[A@0Piy^(a>1XgJC IʥsS9}\)ʹ#o';M{K&߮g/w?r~Iy%Mg$It?$yU}v}N@<ػ8I3:qC;6K_O%џ$$ц+NM'#I$?G?\"UIkW| I$Zǹw$'O&:΅YcW1oxx+MRJ6oSN|qvahvEҊPY Ψ(Wky=~z?*,~ =-P|pxܽ8ܯfľ=.mqϲ'Jxiǯjb'oooCOr*Λkݢ61^9O."Oz˸y/-7sR)|wyt.ADEac7)T 'gT|i E|؜0[sRcISG[?ASj.zc.f=8VI.ng<\?`ZLڸQ;&{KnngYxջ9~;AOPWn{!It0x8I<=|49>L{Ln@:W.ǥSR%w4deT|t#AÿH_~Pꏠ)Ixx|1g(2g*Ui,>k^8#h^mg/@/tP+)~A V p<֦p<e |zG ?AGO,lzY\PN M@:jqwYHoOt*C)CTz&r|ܬN|c*b*e*w4KI2_ ыa}OR|(84' N,+\p`XMpv_}O >-!Ǚ .8Gp`` B? [~/w_#' .l\/)#x݂|[Sc'dQ\%Vpł? >-OQg . F;w (xO .QA`񂥂;+xೂo~,xT08Hp?l\'Up +K ~!?H$8FpK n%x= ূ-l1S+Cn.xX-xп+~+SR frRY>TBzХB\(v Q$ /׉ޯDW|L"_ۂ"OMc!X*T0"xrZ-OO & }H4nK}|#tC|\o` MmR=B|@ W@zgy???J'J0,x%{ s\y"XτVsbѽNd'z ER\͢w݂KD{_?~_B{ҙNKg:K衂#ӹ;ws\w 'eo`zpÄ.\""MBI~?*GB[ނX^ t`8W }˟D ʹW07gfyT/5M ^*xԿY}w"E] B# =-,l<_炷J? __<$ȿڕt@o&-X*J\(xೂ d1z,n+H" B? { MW3{ 2לiDfk;fo=+CFrމt>go̕n]u^D>c;g5ZwcSG:vi}MSr쭍QUcЁ:v.g%%Z6ϭ:ãYӹSM禅GvK0Nҹ{4 3hyNN[ۿ7%˙йhA Wgo+7i2`FO,`U=to1j9+\ S2my6qw_>}849'H^Hx:o턽XRG_ӕ9.ةy㟎q@No?*Sw4М*26-z EJ?Bb ׸4h `R#hO^ҳ:;qA7X.gہMYbyNtr8Cu\]o| 8F/v-.A|DNK=ᙊ|=K]'`0A4j{j!l6ptx J ޾ؕ>1vFl6 ao ӷ>hr2\rgoۄOJ)ihZ)H5t!;@BO[^4? /vFB^!]~Y .c¶{$v?/v Rno^Gڞ" IN7TOx#Jo,u/}ZyaDYXa"7iE~Wlpm$Cш<肱@U!nxYuCc5|ud9S(wic k(K0Pɲe4ʪ/D̥f jj^vlI7b'cըPM55\cT0>=f[ШYԣ~ccl<6/8SEy_`I `yh,z2& ngh:oJemGj":֊/Lt! ǝk]V9N !M`&["u-D,8n!8N{yT,zL2]#϶6fHq:Zt;Z/[2+h$D[S]b4_zH (zN߇1?.~6hv/׋Fg0*#u|8Xij/jBEpK|ETzE,=ЖC[Կ0սXRE1]ҲL~mӠt^c=^Q0qk|7NIʼ)Ah{%9&xK8(qcO_acjW˜i-MЭePOep6wI R|+&%Kl)m-Y,9`dKL*JI۔īA@nI%&4aPd+cV&A𖑤)bP&-]$c`jHB')V8hD,YRۧRYZ{Yb{ t.cd@ %Q`K?x% 5R0Jf^T{e 1lqWM WU\dnD9 Q"Tw_%{} u u8I@(LE +@"$ī! YEܫү᷆sBxź/R6+G RaFH\0j/aȺ(p`l\!bF)OY."g8D‡z:Yw1e@: ~e|s3A!61z$zP&d'AJ>z?g1|qSoRSnV!; 9 V!kK"qүL3Dp/"+c ksq 7qm-@ԯ1x>Ano AL!x.QK-z/wVBN؊~$}]b\:D!SD]2 [,63v;_"ӖIA eRv ?u3׃靜NdA9ym8EJ"EFE" GSDl䋳|ó)$dm+ ula.o (ap+v.TNJ\B+SKN ApЂ;zN$ԘEj9U _CUN]uuNC} uHN{{ނ3vmeH?օW!w=v xkA4 pCDȲ* o?t pc]Ojh"p6䓐Me]LVes3%Yyr֥|̚'sPen6+}Ty'm 9JrC{c {Yu]].%#29}mQvkV澬#; j{7+媗#-ڟj7ihO+yh7m8ŘJ3ѩڄԚf-SF)Ԯ-ʵߠ\kV[8- -M{yb˱p[d,He'<_'P[ y W(Uͩ ]W̛̩ {a)yk#\fey,q/1<' E|a6rL'ܸƆf&⏄5I R8< 2p\?PVqmlo%\8vw%F&O@  \؁X~#xlTì< PB PY &F!P ZpeϫW\?\*KmZK: P#Hf&\Y`F ڇ3gNqTk /iixni1lSfMklIw)E6ǝj-46]ՖZt(:jK*iEGlDe4('0'HWmgڜ?! Dӂy'q :N !ZqV-c.5z}0V,wU(s b<] {՞p}Ŀ]Rx"um\YU]3X5cecҭ:9̫[!,[慢paGqŽ Eo:w]c d-  ~o%F13t\ b^P$ ㏢xifr)\oK7adq9GepnqX G0b<9 ~b~aM_q޲ϠŶ8,s0v䊵lCg_|qˍiߗM.t+vzK(b{qwS] ~zM9ns<8Ɓc2vxn~}uk$R<iċ!>M3r59[xB8>(#'8{ F-3x0}Q28fߑ |YÙ=&?ѱ^F$] 'Gx0˄A;O I RXg&si|Ż 1qX_N$JXL8&%^ Zf{>J[~E#aD K8pa9a apN Ox!Kb:‰%eՄ!Մw>B9wX?"KԢкfUu+Hψ  {' $4& ^%zUs7{T |cK0 j<0$ڏ&{ R_OJB~p'ٻ &6?NM|?#1d_ MȮO3 K>pM%{5d/' d_Kxu!?N%ƒd?N>@GEx'a>maµ$ _YW.">Bj=q_%,c!x[ |Tտoޛɐ $@D !"$Q\B $ 2 d!33MSZs|"XZ嫟 ZVEU!~3s9L&TTj&&t䄨p,HOc%{>ȿN8q^Icg֒ #z_g-'r#a ̧9}_۸'~=kA˱ '=yWs~@R}3Ojn]7[}+ogx"je, k+(p}{|e9cܾO/FظKlyr"#l94c'O3m_Mq7ɭ,OgZA=nyDOU=_ikzrdn"ˍ/_>4_NQ>_ >  ?GYȩrRg)!,cA%~Vkط0@^EQW{[꾡L׽ۿ0Bo{nZK=<W {4٪4f9{w"a-C9 dý OߥUNDNo(vK=_3{EƁx譿yg+27k|fyr=6zZ<~I!G]e27V%~f?Ixi b 'x2Qn+^9W*F>.جYd+6cr+Jc QP[glWffkha:zpen&Q2_5*NS$QL{ibXiCQt#~f}lӟߛ5DْD(pٙf~K9+t=Gp'8u:g;Yꆳ=&&;H``g,F'Pr85@ZMR#p.GWWYψefgz~i<W#ɒ-sKCOЮ5-nlQ3Sv*+<`K]4.6yt.8K{YWC}y-^OP3NUܥ b*g&M LB^L3{j R%HR\@.WzJJ.]5_8#!"\kt+&/+)r.0_eer҂2K!x*DdȑLMI^M N"i{)ؠxlHݷ9#J'B*"S˒qq fVHGN+$tJW]Veۋ^~岞Hw.ŗo=,}mK_:g6H4nƣYmj͘$^C9쇥&'_YNkniɡx}CbsҬ!ۍAYFl^S4[TtL+vZJ e$4ۺ wv[5=HZ`$4rpѬiSӭUm^u$ztSP#v\U+F=̰0)G Sd$jr5y4~̦]ۭ`oJj%Ww)3J+"|(Bm&a[p4iŖ̇ZCS"M4 ĊW.M4I)8hZv':]5Mk>B#F.S5m 5?}# @eU'DCTLh=#U|X &dd3j4/gEL1F=ҫ$9~`fizFz:pKhr6MINŦ[$iYh1d,)&Iٚɦõ^YZaI6REb:+_j;mihu2O42i2=jttQIIY3l}Dfz ݚpx#cH!%ŲbG2gu@ԟGa4}LyS s3iL жp`AT%ΤpRN)T|I!hmRN ݊E#b{$.+qw;qrhЯh/pMTEV6vװ#`ײ#`r"Ύ]׳#vrdFqYŀ'd OpH8*:')@u6rrD^9 D@[p:-dDhSwpkЖ׌8]`7n+ T8_^`M` `UW*g\@)W+/Y퉴7 4'r &)X~~aR{]zRƠD%ְxM#2. Kr 1.-pu R'(,P8Q&p_}*`$VR@.BI/۬DTA+KxoIËڋ,󉶋p#euL_2tE,\JJy\=`WXQ/Ib2E+m ~T u_*Q%\Jجi*%YWɾlÃj 6+KCw1|-576X OB颤ĸ]y͊.>.>]|C[7? n E{NE@{ )9*N5]|4hgq[{c8*^ ) .nil,n~YS:맴Nj(:j!inc;:k4Dn4#XQ+zmEIʦP3YEAFaZ[™mؔJޢ4 :ѝ/JԽyIps}j.s{>P<խ]N}ݫ/G9,; 42s;& #afzA~v}x̬5{jf̉o竞bZOʮf>S5=S=fKZZzO~e g9S*FݎhǑ|aܣcdNscaszvkMq#uYz:ywd.shwYz9n.۶xz̯1;lگ=&MںꅋE pY<HdžXgM]4DքڣXR@k;D=B,P]BP{dumth!ꬶ^N`@9HG3th#Hp ❝" ,Hc(l\ɠ)&"X"킲n^PQ/xH|.CB$0?rT5wB:Zۀ0+e0h[K{I #"ioɗ&ւx8Vօj_#*U0B(x—ʻ1hke jE`msM3*5@tuz u{LBeuMrG5Dv[\*\d(n  łŭhksԢ,8xxʴҞj0>&iYTMMoT7T,W7\T,PhaLEO!cvUqxVVS[_!/\_/8J4p5nu0J3'Em]B tWŨ} =XS5tIM aqi[)Cd":M +8SH41* Y0 qch@(!͈ab12:Pýp5|]ӖsPwľkeM_ (&K5u?oB,#l WWw:>r"`K̞`>9azoޕ»Sޓ{S!)|F Kᇥ)>+\@wBgs3l+jw@s2~$0ӕ],ԕYcRWuCaڏdl(;~4 CKB+;@:$}߲ǩT0rZZXSg'BҞhx]hj'LT],_R8,]Dƒtl匭};w0>#6N302{ocیr_6yx?gľps! - _`xZ xSU$ ihZZ@4}Pj D`A@4miRZ+jg;8uQDT0Ws?f|ܵ^$rk>'KČl,1V4N`NbE_z64O>}ó2Xt);زz2WETG5=jz3yl޿o>o @п_ޕ٘Q?_x6kHA`g ?Ö_LbݾJf>;^,UDѸkW\-3[L?1؎ n1t)s.0ZA=6K_к~QhҟL)y a>P}gfEy^#U=[`X~y2iuRYj8򟳱LҲ:32Wǜ /`7bFa4i}fsA6LSr5܆rYWҋcl6݆qm1Ws{ u$ns{xR ׎Ǔ8~ܻZ/ r{?FowNuܾM lVJ|s{S4{z>{)loU"6x0~ٚ i[!ԍ-(4w`}[f//8#|[Y>:Tvkv6ꩆo}Ab"HF>Zך1:Nq5?WkYho?3N}6A܎ aN:@1cvd'ݝ3͘g zL\Z+LYkɨ!sWfɖAucz7)dUUSYe%`z$r*Kvr wD8+aXiw8\OȺ֎hֲb0Ę"Eփ8kTUIˁ++$X6әٟvc eɽd3v"+pc!]Q^S`?Mtj pVڀvj1Ϝ.ks4 /"y<-|dP\}|H-v+Z*R'k'uBrnw}WyQ3ܦ[Y-3œ`ř"%NBx t7gحLU[1L+aoJ3׋eI i^Tr Դ;ּѨ"ʪzm[$O R8nມ}9eO,Z!\ τ~Y|vpQ2v H -3K乊у AN3I=H & vk.Nxi?X gኼKaM7NxcmFY4Mxcmv[|^RaъrZbn`{ =b'm5:p·5QqC4Mx:x-O󸸓nCH Fq;ڗ`;sx^HzU#x\P \_t*{w]q5 :iH&ƱJG.NaaUԯ(DZ˃ʹ34{Kb+҇@r8̇c0*ܸV]0 ~yH;N$۠I ݶA/62[XhpϽ̐^}.6xlopZp'EG,)*T( vbQ7@awMg``/F"ocu{ZU 0W{fʚtpgpI؏<EÙyUˍ)σx7X4VQUhݴ|5q5ĪCw]trfT=E{fRpN3h*J!(3T:}/"nJr"E\60gxQa XuBG4W1H@uC9shܻXڃy,聍Uc-XBv|03R3Acu`D̬XKr-K8ap/.I^~?ə &xb%Q'4f\s vcC|͓, T0I E]9F@xڑ>l1l)' r D7&6[{)v3 QUpP5Ra(y/M &ɮ9XQ`Ğ EU)PFL4a{|**boh;1ϞM7i'm/)>LWrYC ًٍr>#\X.  !{W ٍx5BV6/||;k8 pJN,F\$U]BL#(> z > *>=M ">C#>KB<@E|&ѡ傦S^D݈9BBV3/(aJl..Yp.qLnEefP ~% |-cTaOOizG3-߁8J@Xʛ-5 F|b|φ#i(6?g*B^erܛMT w; .bPA4ox3-`;P s@OIwJ鳊wa0d2bj%`Sƚ23Qcf^̼X- R52V4b(>,Rmu2blu4&*tʹ{ic DqJ*ًx݈!6YA\fW!bK l@b~aExFXN+7Š=2c.5;xUVM7mZL6 _+0uh(K%eh%Rԡ'D;ښ:jKKҶX*p~`тY| CL_Iڱiqmܜ6ETGT/Cq^e"ڊ36!^y/(OJ. [ ?Ol^\ҶޤR0=3jyjH\=|ޓ ٜΩk;wZvR;_۩ïZѲHiwl[+`ҹ{9wʼn_>kDD"] ߮\g狁𫖯MКBZlILPl8c&C]q8A& & hĘ.X/QFYbq }S"o8H> 8Mpn1`ڒI$Ҋ|:KAFf8g/5kG}2gckѫZaѭ<׀E_%gZ`ѿב`~Xcћ:~XlcpouZt˖q3$;eϓ>h,,HH{,,,Z|H?>sRJLK^CsӦ|p#R\![=cܐOsꂡ_61X7'8/d~v1Ġ5=[> S<#ę&Ogk"c7g%e1I_Mzo%-a@P"B} pZq ^D~^ `0}^v', l:c"OM } "~?#OTJR 6E  nD8@""u"@Q脃.Gصv{#|UF^<(ℐ4qfInq_C, ijJŸl!?fBzE+WF %Dx;v$Kx!_>I'\JB$D8Hx/n§MxKBObDjÿ́I7ICdN'.o|} ^@0lZI&=eqoBZB'Qҟ$9*B ew  RD"> |$!.ڏ!}饤_@8E^N&(!ImN>A_#wݪ?p,'V3  *50N'­俇 !+' 5фesH&DH9 {qOr|<N&!OHDkHpFLv!^g S`>—# BKWKGXF$pA݄?"TrMK &,YG%sf&gL @A"B #DACH$&3PBL V{{ZVmZTJ[Vj[EV-:3g~C^{^{}py ]D9!U''b_qn}F@q|Wh#w_J_S`8`=Ł‽8ml I7.L;{@|Ȫ@S?vyoh}~?+xBސ/И]h;[jWxovY$LnCܯn4۷~S} 1ϩ#ޓ?VWRJ3,)i"4Q=ۄo_Bgs&cqNCJ㡧8*_w%, F:980ש/ެug}t$+IO(ݓc1o^ͷ[vc*#a~;GBe2=r~gonw lE<-+ 3cL3'wIsho\,'"%Ayr"h}]Li6oWnDu|zӡso\н?B}TщYsǶs|]SH~5ģۻ}] P/M|.._1H \\}OTcu~Vur:hkjiݤY}PcI9aFbAK- k˭w+]4 T=@}8LnhDʎpYn$CzjSKU]ۍgc 7wSёOix_NڻJ4Y|+RHy@.'{vL.\WI~buRP^< e<K;ĭϞ/!1x/3vs}i Hv&w>- *6xCВJIWjr-.f8XH(/=Qת: $R_bu XcԞ'ii˧|~?RPj~GZw{뵪Uh]T#6_wjxĉ&s q;aܶ?.TW=d8Sn= vܐ>{[Ĝ=M[gw\s!Pڽ5P@qn>題ΛN[z(lMB4p啲r a=zI|< 1b$PUrr^Ҩ˴/8p B6,RZ:]UipB; 9]@%,ӢY9w[y^Z{,Ra>@GS0뵗C_+mdžWågAD;{&d2Pbo)neGmfuCq5P}]yahfuȋrȥȱEu^2G_WڑߎvWMDvcΎt:5`PjJ~m%-г_4( ;ϻNd~c6M̑ue#'4nj.S mOvȳ[7'JK46B/a"a%Dl)&#%lѱW?y^Y,\®5YV1qtePЦP l Hk'I8МB&Q6ÁH:ӧ\ +M1wѬNJNiOF:{ڽ= ~;F8 Zn3:NN=ϑKW3<⼞88džXN5fӼylw`v:u2<Z?R;&;y٫{lw3C&z 2$[] Zdy8Rפ2M{Wnƥ^?bԾ-JYVy/*X9̮fl.x{gC;Y;*my^s?2"<#A0rfP ti?d#RT2IzӝΛȧBzsfBpgOY'njvostRҝ^@lFDťx~yOqiyD4rg$ yd[BS$m ø<$ LvMLuH-y/Vf~ߑ=y|!I~iID#)r%d$nV^1Ds`Sm]JE6Zjnk/o2=Uva?▋z}HLNc8n<5ck- JKn.]LN$4I"L^!؄uv-[|4WQڕnOv 2jDi11IKL7#i m?'cs;a50%UNP nuw>#e&JR:,{m&[BF< ^ v>5r!&"@@'EGχt@YtIm!3f׋(ǁ=c%"G1Jv!)F4#r{>03Mθsܗ2!R3L'Θ0lو[)0XCi81L9trSt0G=3f3cF=H!l#ʜ! ̜H^dt" $`I@pE G,i,DT5=b-Q.i\)JN7fa>Jt1#Dqk@'" bҋۢԧ=v=U5#TzIsR4rK1! }QO-6 * 'r38YF E \YXGJ=eYx'wBj|sd/[# SOP#GIXj5P&丁mv0+W .ʯyP;,THA@jyp8f=6׃aNZU#6߁2 0;A&IA&ЉtB=38^YʮZt1RQ*|9väyܭj' Yv(axGH]&yR$U'*Rg;i-Obt)n1r GDW%GصfYGJx`#Xxp K8%lÓIv0h]F )1fWW#FIu Bwr(1}Ssfx3ՎHpH-ԾA C;t9Kx4W7+#ȎϼLD-BATeܙ*){M2 t@nJħ>@9RYPobFwV!ԓY*ȥ#k7_+lΌ׉3%ΒCMK6v20RFr>*昌6m+Wqz;}{:ĂգGͦjZόGŔ3JQ-4WcSϒf۬ &NqrM\M"KV/ՓEHBJ2 D"$r~Czw*\?TLV*/{duI&> 7"OGg4Uk8)%4LY̸ )Wr%u۔COBZ5 [T8}^KEvlc^j1ӾK*.Z͸yհx&UQ?һ3]n1yIVMA#s)d^_5MStl& I!Հ3DTmLҾj.iTqH>A Ո0FCH'p$$Fe֡D !HcD }C2MLmWy]04]j:"С!b[^sDQbݮQr/AW6d7Tڙ]9b]і6"j`h48'\ rG#.A#cbG3@tؼ(KˋюS g턼H^ja ) UJrȑ2332Yy1֑Č#'Yr0 V 5;JwElpUX ? OEhWGAKb<+ad#`Fb5LM2HK-tSv)<>Mx 1pX Wb4+1`!apvC;AL BiZa_ADnj@_r+A6#sLdⱑ1Ί $HH}>rG9͑l&K55 Ee+Pt P*WAܫh?9E{++-!/`UvXnR|L>\lI.,QUCIەl1j5M\TS T{6%e[ۭz+bG<z<   <Ɖ.9 J,SXh/p jEہMG  5E{%*mN#ӕ"X3p&;# f.g 0AxPkPvI"Rd3ӊ|{c<#""8H8\6/JEi"p"pG|;^rxMG-AQr|tt$ȎH™E@ [v##p;#xQb12ʝ~"$W#wrTޘJV0d3;>$b]AxJ>""ͬ㱶ZiHԪFe,o䁐anf |n> XQ˒X[`aR[6IEK^{ߛÉlQ=SNm|-SOsBT7yt(M2)!+ڒUX +>Ԫ$ kfO\;1ypV^I梼& 4. ծϬEϭ:j}nliZ)07)Q"Γ 7&7dfPK}:e]wkF-Mϯθ]> 1c>$sZV ]s.tC! Vc,ԇkꅝlyZC5So_O[*۸ - Nvez]PxXWuQyث/1uw>6Fݡ75n仞Ih۾Xb<*U^oU }C/hcŧWn>e.}tH]'t)ڍD>_T*#el1ܕ{(Aq85>gcOkevn=aPƺ=AQF#`\EX3nkX/n(J~wH_eak\Θ<~Xdn9sRW_nD7?]ݙoyt` Zqcg36}RQ Es7v2}uYL~hҪkqBXo0q3Ȕt:H!Ջ:z;7GrtN]QU@F Svm)<+MkVDmS1$UkhuFj\k Uoj 6ՓJZX]7u^S˪C-O445Kout|%lZ,צpHm R^ŜG/E Y\;x[D)mEuu B bqQes*J|Im@j<2*jUC][llQPSjֵyQpKumSCxC#Pn;f"dnm”ΐ(^i45!O49,X 0o]EeK2hUrk1i]VpssEfSK}(7RZxJ!;DMkm}=+ZP*l Y5mnʈpS[Ο[%j0;AF ds0MNfʢJ[\TFS\Se uMd`rQoA\Qdytyk䀂T]5 kVe-Z sL56Դ\)lFiW-[TMӆf*bZ" 5՛-Mh ƥ].TZ2Q1T!hflblmEU, ohj<ڐDuS# ud 7)L7l ִ`7kD=mrMn,H,暺 &)Spi*Eu1$c-dUiQ[@Sc@PZ^nV1) e yEKR[ ^jf!J̙>*R.4:mKж(ݾB|K~3(I*\N2^I/ؖ1YJ =NM%yo׋ًR:RI)_t [t2^9lPM}s{Ayl"^nlOjo+{ yDZY?lWP$iCe|-0D\w6`Y _d\W!lYZCl]K֯$EK'Ɗo}s m BUwsP77Ⓤ9-dr[*x꽀lqot0ޤZ !l;u56Q)liR(37O\ U7Vև\YׄU7mL׬Y s,5-5E +hj)HI Aڲ3BL#&hQm׶lZ_57\;],Md!{o3?_M/x_97%sc]ZeO]U\_U.K-Oncu!]W]!Oݭqy՜"DK|w3EB! 2M֟OӅ#^U$uq=^$b^O" R8̚87@b,@iX89H>:掜\@e}Zm^"gY89`1=8q+8>18~H"-><0qZd/Se5gj O=-<4o{ -<[_kβC1~cnǿѳ.s.xkXGZΚgq8~I"3-zSmq|o=O3oj?Ec#NY3%9SdeKz*s%+mrs$'߯U/eI$vl;EKS)aʔ!KJf)βՕEKVG{)֛s4|c>L0oͻlyGh#:)?}<3]{>{2as"O^%lˏa;C'36G9 v{$^+۔?l.YW2o_{ eP ]׉І߂b/`:K+N! _ 3F=A{ Op<,Rnn[{>㋌o01㗌nqy[;w0~!Ɵ20zt 9K703,b{e< _2/E&0&2e8q:Ǚ7,#G?g9/(c\͸ˣ(?ϱW^Y^.ϫfoc>f|5?ݻcc`+FDŧ2g3.f a~ oa~\o0gOngKRdt˓x3?EIU!kcq;_d|Q)3vY>委q c'd0/10XX͸Nb|7c%sg0duΈpu1\ b.cHGy x| |T}%3$M! !@DP a5,B؊:dd&¦V`EBŪ?Z[p \[kjkUs̛ys=s={o/00 e} TiN10Os|φ}|ѣuU}[6#LQMr]c3Ö]Dm6\T>H O#KEXjܦ/6Ԯ3[of-ݸ'(A*R͠2%G#0ᙒe{[VY.\a iE3R\F:I\l\q; 56l ]u`M ;t#U8"m#"5YU.TXN͝ !Ǣ.UZUIjp ͬW{/.V â˸rN-Qr9bp8rzIWH9TŤt;" 0?s#,_ z"XB-o؈=.΅stz0w ŗ2]Olo, nLeX.v6ivB'#4[ﻊzטi>%myoL5;w l\|cdf}V WJs|g%`4{j$vZD5p:U~+/@Z>Q=1Կ;}w1RW$ 7ѩ)AK":2* +2{ {gػ6̕x 0z Aj0gM0Y4HȜ-xHsҜ3Z"yђaes+ g3WmE|ޕ\w#͕{ ͅ $EG.fʋW5k1W}Xsw)yJ5Qv.s8cn#?>6v@7É,JĔquu(,6H(u1 gqۆs=TXz)ϑPn1(W2z%ܦ҅={\}#Vοmfθ;D sG IW(=Drnsy8>vz|EzGO\X%MJ8?%ŵ$P1'9NcJa8&}@aul)*!d8B'VAR~Z>BSr"TD"y"h'b]o]ȑ9\'ٝ(.7^BBwQC^OEQd;QC9uiZl67[ vSvA`G ԫT1C7l#(}jG"zV7THfժMYҦl Z Od%C=Kۂw%KJ6q9WleP=aN@wM\i\|bMc5)EYKZH ͱ%۷J\ EMwR!7=1Tx x\b7 ƷۅCl7کReb KC @'#M \GC5opn 8L8|zqnQl%e<[g hF:nB7B6҈רY[s1 *%܍E^+!h qk;͹̾pxWBa-YQ>p.1p[>%j؟׺SX7u]^Im3T$>S .Qe]eϨN>*wymI<_ ?F>S#_dtj l*,Sr <6GRzE"pOd.gQ/EUjxVXCeҺ׽ƷzcJ5#u  C6~?㺲He)9Ӂ ȿAśq= *beyqTb35 RJ{҉1X 4C#/9C>T7Z9D*Êdaj8G-w0k Sӏ߻2BIR^-wNaŞ.KZ52̸[Zx?Ikfm H^MB40ٮِl :#LըCwƨLbDk~Q~ ݷGUHF۟5OkPqauP?fP֘eij}~&U~oKɫ)F? .C%cGA7iǨ1~Jt0[m5(Xl Wsy`.GAƊZj7W6daLIUk$T^DzT8hx/ jR޼ed( yI4X 0)م%,ʒC755ޱL\؇cz=oS^# ; Ӣ*RMzzKy1%I҇މO 1Uמ`Aa5 8^`e6hg=D4B8NPNxޙEfmfAgYTiu4r(@^{uo~H-@}ºͷ\P61E[[MLWUd0YK&T|mAT{BZ _h$uS|ם AJ67FqzC9M!qu܀J XADj @ c:'|cgwn /1>Eaۛawp!mдpjSkRC#RVHw 2mΫNJr#U0:sXXS25i+X-23퍳cQm MO.` xȁD_k~ȀSD8i"Kc^*vE}#Ỵj-Do";ĚY mBi>+?8D\_ ^R13m1^ V\GG8R0U)Zpå:ImMHYڌ5J ?ED?+.{pIu=LBLǸ;Z &ɴbt1p-Tb&IBH /K1~bS C=bh܄iCg :tJ`4pYzx!)Y wj)$M93zRuvHZ QMYZˣQΌNȴ \t)pȁݢ-Iǵ.pasT!7D\ؗѼ/2_E7}.~t1pK{LbZk &j]@\iCg 't'=,RkZ 3F[s3ܾ,pjAUA\& )K"*>y ߸fk6]LWW|\XH ^t{=">-r}NѥF<&YpŔ;Cmk[*ɞnk?n_j0_;4=zGF͎ԺI6n i<ӥDGWD|Ut1t! LY@6Ӆa1e%4 c%NG¶% rt9L2jK Ԫ \GI_/\ ݘ)ƀ#`&nd5$Kŀx8&ɗ_:>L-NΟK5Lcp%T#Wv 3m͕5cGv5 wDkFE5*Fg*[k㴈u5̋EbMfĒXWyks$&'ZZBD2H:,&YGD+ Z;!Pye.i- P$k OKFHܲ.m갡Z.6X8?7#xɡU[ͥ\sC=Ig,皭ol>//?zb-=˙'e8[nq4ۓ 8[[@Oz˝ D؜@39|c|浰Y8+'fuг'sߧc dOyBDOto{~צ{^sY7[!{ѹzǜ%:*̚o(nu%I6QUޖѓ0>Cvi:Y}lv\`&eVͥ~g痎J`0Lx3c lnoꈨxǺiL: GcV5iEhA{(^ZK5񐢪H(<"-b.EF˛HJ8ڼbyRK*G2hZJ;dgS|%[5 (̫9M!%A ˲h 9eui ԩ)M-uWA̪HTEN])@`Xi2%ڪg9iMƂp3bk+l+4DD- j LL G!oB5^S$4Ο:y4i ;:CdB5rMcD("i-H[$2|)8uԺ`ٳ'ϩWǎ&!Ϊ82VXKCk:tnXܑh9W+ǛV8-fF\ zrZn|twxңC]+I@@ޮEMd($ғǺqG`9Eݕn4g&BKx7%:¥lv*;Cx{(6b^& dxduEV6a>gai]~PbVyqfާ>IwהhWh)ӕL Uez(d|jDs $χDHgR>5ztDh;r Jk:1V >񃱝8QF"?D/|4Zg̹^qo5qw ¯ zz^_Is0clX(\kdxQ0U1J`pM؊6lddE5\%<5)nZ pbM6Z\Z!xT4Ŭ"BbM%jưרhӋf/9Ɋ=yi? MQLr=؂bO~+T^MΦ'*}Ǯ!ѓk?ũԿ h|"ˊ[ޭ(o󸽦+M:3[ek^zWdM8׉l? l]eSOݓwթ|,]gwԱ|mPL{[I[BV|jT*{GYO7mrec ]Qlkm8c~>yt#dX ŧ^$Z׏ܥy^ ޕŻxOśY|^}Y?/{eEY|qG}*V:e66TkO6>3Yއ$u;q8l, MYeUz/f9?*?|3_,~H?2fea3l(/*oö=c=,M=ʯ*K,I۾0 e3w92ybjѴ QxT1<1qxS&7N`jcq򔆩A9sZ'Kf](t|)87kC_]Fƭy'*E[\Zpўg5R2奔@|ȱ){Q y9] }z=G!DӼȥt/y3}&iJ5T`?w ?W&E/"kRk$ ~K/#@E//y1l8YHvỄ~`{7{^u"_a僜\^Rq.srQ@z ^C<ѻW^s{"_J6 M@ 7c`\7nnw۽n[pD` <\~c<~,&6Md\ʯ!+y8 ~/Gp,V /q6ߘF9|ޔHyy6=tJ')u a.m7L %#c ҁu &'|wN'vF>療}GïPNbJ\*x`HKB+^/[_D ~-X*X!8ApRvՂ ^+xo'{<"` *8^p6U !x & <]pBnQ'_|Ww.ƾG N+x ?V >% :Y;^ ́RH-@F^-z7͂{Q}|W> {Hx:~"oMpX_Jn)' (^xOc` r=uO<+.Q/koKp3o ~&x$3lw V4).PS/TmY7 -x8-<~:,'8[0+TZ?./}U? +y%_ JzgI JFR)X ~!Jeۙ-/G/Kf-oi[#b˸ V Rv`m݂O |[ƾO<_0&] ]A)#Xq<_W!P&X/3oE0&Z  /yQЋa~`X7bw |Mk޽k[/Vn|W^E \pӂ _X+H0"9|v7$z]o OlL|]w]R@xZ x\U{d$3ن6i3m biC4El+$3INf̙+ m ("B*"\ࢂV/dZ|ߜk}>\նZJ)n1A lZ/D{YCWo|sk'O>8V5MZM&.ٖ1b`2yTH4ehtFsAu=?N~qb-XGf)CmEF&>~5h" 6p5{m#7I'#͚QppF9mJ#VФINTܼ fKhC U+D44%&P0Up^1> zݻ^F*4eX%cDSDA26F5Ub0/1MU~}RSf7"|JS5"i媭q1\zNz}3~8>cqSQk)iMUfc `<|Dt1Yd00&Car~Nx6a,xmc`<'<~'$<04 er"W*+5Wx&[:A?TU"/ vRn ܏$C"l`aLn < ɏPX6s e7!,F-~ K92W@K"\/-GU8Nօ\t։щޚ Q:NsZ|oz7#?W{z22G⊔n/{?J;ػVۻf F$)ɇy-)Gr&ވQ`tN2&3I&nrޮYtXx5Um=.0 왙:(բP0+'?J`7ڞ^DDu \,WȤwPZ;BFiKxEuK߀TkB5Jc&߁W"t7.[eDe ]iwbbTCZ[ݕE%eT2HB>Ksگ >oStnzK`#7't?E-bfIz3\njb_-,1VGĻxk)L䒁9 Gj]`Qj*!gX,AɆG31@z A$%$Dߒ,n[@̛c;-DqMm1UbBu| %[X ukZ9uӫ~d(PI#!fM#gox4=.<=nYg! R3) $+qCw+2gjF&=N. {l۵^|r,)W\r5b JUǥW`إ{|:t&\[4ф8`)H=nz-uskiQtQ1λ:ccz:T9rN({Ϥc1;p1W.ECoe׍2#h+jոͭ!sLOA7O4(V{pBrs뚨x10pą6I?Z^ͥ(K]& ބY䢜N>KWtG*1wV +&vT%yc&b(u৵/sYTG|U'⟦ݝ-!r*U2}!aUd` qmDiixV>}]dSGS=p=_΢I\Frn2Y^P|ˈE=CiLž֖ӣf 1\|J"jB)ז_4[-o 3_ty>K2OiKMs$RNӖTT:?*JQG 3-$}m9jsRYUiιsQ7Op$#Mj~|KIo& ıuMJ &sxmRh L&cDjKiu'Bb p]QM[qV4-JI `'Ewcz\c?[M`mGg2Ja| /R\ c pjRWRjv$`Hs4IJ\tY7~1:TVaИH7D^_Ը8CM`*f38uzXTRXw6>̎p w# npkGmz\c?p]zlqDR}K8RRëf.w1p[iLHpbe75pw4Ύ|8s#g'urv6f켑=;[uNcأkt ΂8Q[;S&¯rĎ]]K L!Ldw4twv6ě,^׹ Of-NfCiN& u"5˄z"cE.0j2L,ʱɮ[ƻDNdiĊ{'Cxi?3Qժ<0$\\k|=b)4py%r\ͬ:K;;<Κ]MϹ-=s1jN:.3*=KCݕ!w߳:kIeKϛϝ}jf7~sY{Cqp+lD3t, I'O 7ܓʦc#(p,NDkĊN{#gzRi#%2pW"ҝQd}֯'&bi7].$99;{ZZ(5J!fŒ"O(n]KFw$"(l4J5ҹ5ۧ$"^73w$MS!IU ܞ̈ N>K9 EޔkNd:Ԭx<61T7j7C!7M_1Ob kڷvxkV<^ZTW y)g c=cKv{-@`-(Pr4Pdr<`<0`ϓKt 4рM|V|*WK\ zO*rqW:2Ɉw[ RZi=(K,M(""ԑ3M&pxے!ΰՓMn ulXG;ۉq#)ڪNH:e,:lmsBP2eB h#Gz]mPw:?:h~ʽbw>wYw+aAB%]j.sV×s.`}qFСvR,O<ۺ;|Ƌۜ7߿Ood=_1߭yZ:@>Zg W齐7=Mzߑ$%g@&%w74ާvsheLG{}e?o,*la<4?<p_jwΘJ J8_;slsi=)2h#.ȣ=jngȽyGѾ<ڟG<,.=Ǔ'/ͣ8xvۑRy<:Goϣw{OџɣG+&yr~Bt<N-O<~GЅM[(Bm+v;c1m-mWoXnomU;~ab>ĩ4w.|vδtKPL[T-Sg >W0+\WT)y[TWHES4M=_R>#ИD/_ Ưģl}^zW龷ۤw/{aoRoϦ躴<ťUL ߻|MΣحzX,?,?_-W:_+ ,0O;Q'ĵz}W9(XɈ{e-_YV0~1>11~k`. ?0971031x[O1> [p:c=E72F3{2(ӌb|B*:Ō;ӌ{Goc o3bT}Xø.Fqƻe/_cx4^qOa:3,͸f|?c|Xx!UY]w0>(8q-1Rc !.|b|$za]x[ |SUֿ/%yMCB*Eb)-V6+U(PV%]Mj,-eQ( Sf~~ l~ 'SqQι%ř/_g?s7MWL*/SE/E"N z!a$2EO)w|ysZ3gάeκ&_ẉ>mC%)m߇|Q{Agr֜0+sk,f 5[wg]v]A'^}zuvFyM9 ɎeZk&[w{箍E;;3gi譻3.bWg1%`L,6{#ވ^mX*60ݚP/9x]N8$ga].g,Q>2$<핾AmBy):Q24|;^<_ڷCbK oP8}eσm1+EߛlX zidIv А We fYO_Ԍf{-0uϺJ_֚CFƆV9Qű'iUYԝ6Z_qp| Hrʌ<:R1>f fCv~h3Ihg&&D_DkN bVL0YcOpm 榷4!6-kCBS⋾V N:],{ -a9lݝO&v mtpX,C_Tj"V'5WsZ3dL|k'% 1FT`;'A|@v<պ;]E:`C-9r/8/:fk=0c7F<5SW,;W}vLM-\]Z0T]N@R5;1MܻC8 v_G˳lcʼn'+Ar>47bjn{5Ͷ8;) f8Sf6 3e )G2γ%%S9Qr,g`2(S 0r2k1IW:kQ2kIv$y'`WS-7v\p@F!㗝b37Y r|jn)zAl3w<9=.}T*ыt[92GwuÙ˲2*7E/X;O>35MoqG'fW;xU+,[pRt^ գ\ 5\onr O(f)R_}deHR2&YX-\}Dj#sLMWӫ)&dG2fi4k$w^5.0ޡQ=],W y t5L;1oO =-Avd{] 2vbz~:ފ-xB-ν4Rxz.g8SLrr~;qN?ig v =Mқ-y_*=xK26IʻA#MGOsTd:Jd`׼t-MRSVà5U!>[>3 0ɑXO)> tF;b-C7Cq*[ƭNvD*[C';I$BR\9,]+$g/]=c>C#'Y~t"; 5 v,6ׇvVUV-: 35`'rS ?OxVCw$§B:WFWS^#j0[pq&Ki (pS 4v$hy(;|Ǩ C~6~C>%ci S9DQvŢ)y;_Qx |SDuevj|.yNJ$3-S09Qn/ " E!&)Jwe@ZT5OZwX!qOdMicR/J E@ڙ'Z )b&]LډL5(S{E3 8iM Kܤ=Ѝys9{, ImW+"Պ:&pVS{$xUK+AVq ,j\{'St-8!Ŗq=/K.C8 p L'(]kݗa]bUFysPA/'<}[mQQ6v!Gb}jX[8..x7A nf?1ce*r*Wޠi*vCnAIF#9gE̯4>3A3D|3Gv6G<߰o?lkޟRdOִ$q"8.C(6$X MY nv#v6b>b6Alf} #X?`\"ۈ8q^!.^"fOؙCm ZOcb߶vx;vߥ03va㐃Pۃ.݈Q[G"^a+~y# KT)[qT?ʞQt$F( E7[\Ys댝}o]ɪ= yGll9M@oxEu&.^S[G\Ol Go+hP t; ěej|AՅR< !*MMxec"n\wqj{vjl(@Hm jS[G,xDO4 wDW6+&`*NGjBب'}@:+h,yZ)7z .R â`MS60шijV_S3xԈ-5CCa# .0-\yUHqMK RЀ!"Fmm|nn ASfĀ &3b&N_o}谰i9!~G[_{Vɟ꧟Tjuj}amWoӷ,S>`+luvalE zUjUL[4pKk5r}54Iݯ/]3]-0#OgTkUTwϿ.y5}]EUnz[^s{dmTcBKD]V(t~< ֽz.[U4W8EPJl7v^ }l>P|ȹCI\ 6-T{_TzBK5zBi:pLթmNbӠU~CZcAbΊ9?ulj$1-"HҀ?PƿG ȤZSf H3B_n4~._TU3bfh{u|Fm|ZF4ж1~Wg4}i=iڥ]mZj++U+M˶Mr. VҴ d]ûnDVL@{hMJSmƩA%*p(,}Upo6+15Qj?U*gT_нm?Y';T;Sg*F'js { 6^_Xu톳Ę*<`RKA rM3@#L`wZܸ #`@"!~Q# o4DK }m:Zo օqc  VŪpU>p1qm5 (44bA6]`A}8m~Bc KDq"aĿ.Xin#6f؟z>egW[T%f?X"~K[zsһ] 1J.IwC3m]]ƹP]nJ+ڒ{ s[',vLw4^/i ˌx6[,mǓIzCz'tHxgz-=3ג5c6u0ϓZck=,O1F qc>ԇXejBd$ڞD;hg'Ѯ$:5v'iI'&=":.f'J#`yE90 LJ/MIts*虎w|雓oO3?$N(%x_O04>D[/OI.I^Dog8/Sk7$'B(2Og'Ϝ0?lΤJ l{a⡳˽ ߻zI w}߸E,Svng?͛WrA{-rWO!!^t.z:AZa˙n#b?Y19s/Qo ")?W(dWǸcȇ0=ì1|/6smDXo~\!Eb/b!!3Jy  UқYL_R^5mz2[q8R>UG->RQ~4}$˧ o@&/0~`x)E x q$<'NIkX2?S'Kጰ}>ġPt:(nz.#d^˘Ka#/f8q!㕌W3x/agd1U~0bX81¸q+c;`c0q I5kodqd1^X8q9 滕p`Ggz~Ϗ5%M+4q=,㳌|o3>gLIo0Cdw˧2gby c+nc?[fG3NfXacz똾L?^aѥs10bc\͈bJ! k2b=x }N czc~ 7d 2.gng~Gc|>x?P^2ueX;;d/.dIbT_83^L3w_Z%W?f&L7Yn70ay c۵|#ӷ1zXNƷ?a4f<ˆ?8CƸQbl@`׃ /xY pTw۷ݐM @fB@A!?C2Pݗdf7 ԟOQ(Xkuj8Ti?vcա`LϹB7;9{`gegm$A V.Ed~ey|kutOw};zFA~)b^ξ˜ FRVA^J:K@ wbEjubS7\TW~$Kj#ۻA?⚑OAnD j_3Moޑ_m؁\v(S*Tѿ|>>E>P_%}K|ԣw~0\3z2eƨ_RcGDΉB Ա@= 4"XcA;V%@9,-ƵيƦ}<;6{(MV*ꢼz 2C_F5q]uYŸXg^FhԢ0$x8a3kpl\>S00I9uy2\zKV?6%o"Zj#ZcXh.ZDWXH5S\7tmr1Ksh-!Lw']7`'$h~y]tC;s>aA{4Z_ӿ4@t i-^AA#i4Pl6ż1ڃhc[}Gʊ0g}PDu@cLnFxSѦAh0Z:L=[Y'p{-)]w>ҽANĽA_} z;@;I hJY  t\6kbRFC4ɳO7jՁa ( 2qeY@˱Nd[Z+%8F%^ʝ\/g J.]B!3w ߜ1ߙOߐ~П&Sz-keg@i?myNG%/n&ci(M{M/q4's|`;1o8|R<=x)/qU3PAUve+ 8Pgqn]RW6 %>Q|)ĩG8yYY mrPÇ pF'Gv2D/PXaa|.9L޷3~d /!P,YLBL/A+bT6V% YCKٍXʅ\蓲LbUlr)&f9։w>M2Is7Y1P;̽mP 7\’GB+rR37EIC4|M5Bd'D\ܵ H1$ŲdbZrgopx\#{ mgyms}J*FeP+=tmOVVJv9Pcenha 㛙PH3#fM]:`KV֒ھ.dF_4fXcBLÌGXj LWkY*4$`X6$ߘMcHSBٛ3zC)SѾڦ`WO3CɭfR%MH~k6Psj> +*Zmb6 @܌tcx8!Z66uYbڍX"܌p&i`C{ʎMݫ55ut!ٖD, j\̧%Y@bЬ4ӡځPjL.yק̾LlA?uLXCzBB]T{*jl0{%63)3Ru}mOsgSj&2k{cal "u%, au҅{4AOglK$etbp)C4. fSB"$EoKzc+BS$w5[YJنΏ5%aAά媪y7$6Q&t4r{w1ʋ_`/*Z CqW2kMR8ϲppp˗y`g2WU$=k^j+bQ uZ]o/?|ꙿOWNx^'a^F<-</k:5mm7z;FřUo+X%^ϔs'$j@ ;zämch C\\bV.ǭ"ރGaDhQ#ЌGI_DOuҿoҟ!,\7l6ztq/#rBQnD["W&H$"p>D,qM!yB'y FS>@OExSBMba a#a0L"Ax O~Dx%2 U%G"_v3Oy߅GgAZ|n3yA_(s?F>~hy9il# /Tviэ`<+j|BKd'E&`ۻٔN"% V=!gjjyVV'i/Η̡؉Kcj%,}Wv@d"Ϧ2N]B{0!k| ULb\U.ӿ!4Ъ^)WM/ ~FuTGޘL>Wg]WSedjz6ǧT~ho)0;J:{CxZ"MDt\gTK1? :4>ϼGyQ/?-c6. 9ؗ\3ߙZ8 Aפ|bҽh ssJno,yScE.y6*]TL{AxAp 1[PA:]52:ypNs ֆ=v1/'2:dD{u@qՎh4kk@DZ컩92Cr`U0[T]Xe X1nrv@ 5k cU"춬גMQSRcqBDCrq9=6^{í~eX Hgs[h{ g S*q9W+2e+Cup:ۍϖ;Wv|'[d0a @*̄` Yi3ڼ4>gy_6ckU :2qe.Ĺɒ 䲆ى ك8oi=+dbs! YE\FǹpKj@)q EGgBQQxCx \5Y;L2^`:V)}0A&櫙j+Bq1!I{m_gthkb0?)'a`YiCKܧ Rm{|n*[["|NJ_w%]R~•ƞ8gljQGixY5|_ L|i}zUyLIjm\v>gɻ߰]Yaѝe=ǢY|kљTL2>r>~x.?Ԙt\xv}O=Ӟ??mXkڰzڭM[+j2X, 3!ƒ? |߄N&p L37L?! xV TSG@qAjlHHq(qA\hF JjŢTE*m-Պ,P."h[m][ W${7ww筛B50A~h0 ={'<聭f6^u960)NcJml?E6t \wi[)7lohG`ޓ:U8yHm^;:.˺.mK]WjiQƩL/zѧբV놬j֡wn'F6?y%cqta:.jޙC h1U  bc >,jJ6f)hH(|ZX!ش?/%ceASAxM7"G^ন._2睼t1rkmN7:GP +.k[^y7*zwKfe샷o,EOSN!O % D JaXT9(c8Md||05@x'S VyĻ͉e9 ;UW:~-}Du^cÕM:=.n3ZVa׉?5R2+)ީR ;.G8hQ>ғyයg^ Շ]O5N ?Ҷ%g`#]pƺBzJú++9{48%u's׾}caIZ\qy[*^G92|yaAbX+ma␊AlAV#),,bDdu; V9*H2BAa+QZF 'V fI7[Cd#IZj" G Jm w?=zPx2zrœ931Rc ݅΄ !bC'b*) #e0w4> gr>̕9B3:lT_Pc1?cV+ʭdAU'g g ,%x&2%O'QQDfܯ=b}x4} "m IbeԲ6Ʊ/[2!!71eBQ1FȗB-E/{,߻#DlIPg%k fHh$J*M |Vc']1A\M Tk)ZgP*5l'*Fl2$*Sbhh$p-}*p6ٔWP=B  S1/?"ϱK1/$ļrZ\=I?OachOzaQ$oB?Y0ۀʗ}i(z4^&\/mĎ}9ⓊBE Ev`QyۏH1o+n.vMRe+D~f`hdzu--Y"jPvywiǫʖk?'jXr%_Utfg{=6f̢}/6Ni2I4G4YHE4م&dgL@3ѝa<ڎpSdC~@K?.W}yhļi e"fݽ2c(D@C䰩zJpwP @C<0@ɣ]~bb1UخŘnc F,XeXX؈0>F_4F;heЎ],]sfsu{v[RafEjjRZWМ.8Zz6-*Qsr"٣6*=ٔiȵ6r4Q O1A/-ErvUPV+j'51l4 hzS vk0*<'K~]rl%]5rջ . `Z0,ݺ7f Y #F\Wpy~HHImݫz?\?KyP>$Y^F3sӟL@b[_?Xw,[BO;Xߢt):+9BLiuPe: О¨]<ۿ~yIk4U|Qh .πXKZ?͔ 'j6HrԿe;.߇PhwHVi{%m"T5Ag3K@h%r=!yڻߨȟOa#BdkC>_bqzU:fkob}ݠ,k}|1mP|_mDP}F}M-121!>H¼)ԟ7%߼=R/AW`Y3X!nZ0(ޡ_b&=B}_2,OSk`X/jv0A2p-D FjTNC0 J]jSD|4[Fw^Q3R+ECEp /4rieЧ6AKQ=&:,Tr{Ԛp?}NxUOsGtD&wSxaNPIc$Gl1}rԌ ^ 4.>+PԥHJ>lO$-#c)Fk/Eg-nv;\fuFRSE5&Q|ke-b\O)BIsEJ[%uźlj%4U-0MBͥ;5Lk@xZNߠ%Rq4T- i>K=OPP?v1i"Ph_q G1BkL,;vhu8إV]qOtMZCy?RL;?j,Ѱ#ʱ6凸@[L)԰1*B)WZaiJJmDyj4OkҶ'cmCachI~9zz,H~Oە=&_fʴ3HǡvZRRR @~4*. 仃SEZVHU)!iU KpҐr]*FJ#qzͷ٩i%wũ&IlkA [X]PH4EL.*Rd_rkdOk^Lvm=)TsQMdCGk3wj6k4WD^$C{^0WDv(MmQpjW,}Va@\.㯹M5nkq0$Gc30ˁ|8{]V=lk4Pg s]jF-Wec}]|@U>:;r 8 @r Sv ?VcxJog֤0G6*)`>9Pv$ϓjf}2S4g|>QGբqK) UHU֩\bBr 2l@))~4%$5R JA >7pSi>q_,VM8ݠvPr$L-,DAA~8_wqDeC:Ievx4GD"dxe0Om hh$%4pFdV> WS=fru)+5jh]ԴV[-^ a}$"sU/V@Ia `tպ s-KiZ VRaJ* *¢#RP m?۴BΐՓmت"fG; n;:Dak9 pCJ6U>vHU,nUff,k u%}ѝzE?<Зw1:/a N2Nbq<BK8fŨ=7bn+k;xPsknw]KNP=UG9~N߫q-9vAZ9n[us\;7'^i;9˲`#wg6&c*MXo9M"FlݫBr8)SǎTQֶs)coh#`P3rZcs_N.>?ԹG pO^Ësxa2= +]f ^n+ss9uo}ߟq>3'sDL> 2Zڲzq}KhuSS뒶P[%!fp7ǺȻ9[nk̻:sJ{1R犋~gNϾ+Z봙7|2N;vW@35;t PS~ggVIw]J xo]*/ԩ:|g/"_頯fx5c# of4x?C?c|?f ?e3(?bݿ3~>*>ܫ~%zod|4gaƗ3zoR ~/b^3nbq?fcƟ|ϱg(4Telc2x1ˌ93cle2W3F+.2+`^ x xTE>~oNrt@@:a d_C /jH$$1fQ-#::2ʌ 2 ̨*.AT@;oso7:N:uTսEk֏ZҴ3,A囒?k/9VEMT'iM5ڰ5=B:Kͱ4=T[|\x/=سwh'E ob)V7QoGZo{-;=lN5d]lkJ8 mNw mi.p5])bo|ԤWθш4 Tϯ)D8 ٔ$9x IuЦ39`nn.y aBա{Y?՟s S)(' ̦r&^~bVaș4NPE#ܔ&‰!Z8У=q/l*A'Rt$V?hyk\ϵRݸ\h!6 Ʈ"$ 18hm7"dp˘uY6uY(Zj^~ISpú7zWj{ 1I }pjl͚zx5*H4uA2sCR5_˞S{ɵ(Y)6JgWxhYX/̠i %q[k"c69-[h>Ȼ(6:T:Z?r,d.i SSGA{_xaׯU#(-2Tnx7&E?Z5|6B*?K kg /X@#SȌp $}i뛧d5J*xCq464mzLC;ȸ01!vISܳ6b7&餾'7g56>yJJ\W79ܷOKwP9jBy| )j= ,5wU|aҪyDMKi:C{q׽h:ۧfKFP(SZ/4&H{V778L#!ӪֿS/aejyžm!7jҧ`Sq>Ɖ"K~eD1J$wպUNZ[15 ?o>lڲx rݹxޅ4{A2^Byez2<u JO&/kשx%0C <+b2Ԧ4O+M'e[&n?5j7!v{ i SҚ3oqs }zf):^m|e.NZ[oDB̵xV[7 7{^Nԫ@u_zFX}ǟ 9d4+dSy'\Ǐxl.M$iЊ ?|ʧ-Qo&4v~޾k.f~e*|| +pN'lwϐq(M/27nRD;)y{[<4չ w:gW՗Yg%^Gj[ؘ[g9{ 5xH-lp GI_V'}~dٞ⩤|y͎I<b<7q%ߴd]U/<{[-AOZf>Ϝm*k;6e==S4rchशlنUU{sϜ?K\S/Oq/,?Xaqq/B{8/pO?7[T &:[?ҿ?9/ S~# 1տ/ڛ{Se?@WpKiX*pKB[ІqХկԟ/޸6v6z>3GNx`۟kfz(ZlJrLE[zl^o16o7woo+ȐVg1';~d :?\7qƓ_NA7iڏ l)5 9\7'Ksat-iR՟;~sUv/jF1~ Mo[3ښ{ < ^Uy9?}~o_e n..gZWbSlQLX|ON1s1SՔUTT([[j{eyY[j[\wf]rϟ6].Z6J+,)-M;kYE}g(;n\jBg=S]q=[Ѯ0i jgĸpbHረBם`Q̰q(l  ΋.E]YO:YGTHދ5*-TI>+TsJv7  ;=N2d>*383 q!jsaN'^/:TkQ=*9 ;PBO^뷏k(iZI)09C3R¯bN-9FdRf Y/ȦceHI2)*rv)*,!UoPT\1vEG7kp \C=$'STZ15JcU<MԂly05ڌu)S俈JgTS35'n3bKL$^tbQ]E- 'i9g""E~򿧏B$I^:NBie;o?Ч O[\?>M/#S}—σϩL3:ǔJ~e*NfZJdJLT s!;ϕ\N!=1!7LȬ[PM}bN>SΩ:)eӊ̋+\:7fpqbsJйG`<c֡i,f 1 DŽN͙%\qMe 2W?!<2GKbvras S=8d\鉪J-v)0tk;`>Keh^4߆C̤!ۉ@@sHAq3,n>Jb eE#;&i"Li@KҟO%0Gcc*_Z~0jIҧ;ltxvuiKψ tw'86h8D+dd;>Ht8HMGq끴֩~)q T[slT#.YLyjl0F-AȱtתV{v?kZw T-C'1 {y)YMYeI-zʿ~eR2*ȩd?J2L KϡxceIcHrKj$eKG,&$3GqV-5[ˡw.\8J=L л;ʮw7hCo_o} L$<&"4b|ʮ+J+qʌEDaHKwq'X{(Y<- j=d^Ŏ ;J*sF0ɷH}RfIVXcXiʤSҫTz%G1ReXJG%)w!6FJM%LA}{FBJb >3mFr0@ N3 QX.ebᷪi1?ve1r=nܖa)"x9Q~7&F=n|GjOks{~0$]Ӻi*HOFZ8E"f S5Z$!ɕd-f)zFޣ* Fo(< Isސw?/&^Ӳg OoCv[\R\3Ve%]cG{ҟD;ʲ*:+uIgKrt?9Jf\Ieд839t5z%G$jRPrl gRMIz1M gU""M UWp>)ENDf$,Y +F<~l5 8sT7!#oYت=Y({;tdǼgUΓѹCJb3 ꏈw231[GSUkL-jt<"K׎`sj5easp])ۋ6 W$.N⹘Jsi-%heG%^?Y 3Yz.5wT&iC u}2j~tRG;..NaiG_BW;*7 1N؇SzgxufF  n5b7ıA}밯L20e:%l)dl X,d«w'0Nz9vO=6->&%l[KUK14-?v\QV Z%⌹Tn}Vg[`Nn|.}׻Ď~ z7XՠC%5g9uoϯ={DG؞E;Sy=_?וP?@K5˭ՙ)ķBP==h ݌ZZz8N̢M6W@Gsz[ˑu$~ϡVhUQ?<%Rv2:1䧐2D%ʲ@фN0uN[H.yd摖~Q60>RK@9ii=LdANM{5&5q|p[&P3'u mp<IFߗi#ΙJ q5xt}Ρ G9"xa;jʟOR2JTn̙XMTTeb2F]0EѨqFBo.eo{!U˘H&@nxmW3 tDێ,y)y{4ket0-hW.ڰ*\f:s.M .spea.h';>.듢v8G]քq@&+mۋ1F7cr7eI< m}mSCorsboU֝7A)2⻰܁%%.6}T@_IAb *mQqt--s_0%9NߢݬR@Va3ْTvvhLLtWQ®| v 2fS>:tۢzjZLz k7*l+-Gwi|m.+OĆ gXyW%y9߼||tJnMv@ϰMkdF˸F |/߈xKQʎ2'<)[8]33$kmbzG5>OyOAiÚxKLGv\;/*wi#:c۞-˅i۪^ nʹT^ϺYϺ'[ zz~~*n{#-݊qmꒅGB-ލjσGB~vKHlbHxnmCk(3)&qMBS=0Q!#ᮎ/qf.LП2g,_:(]]mtt*JP}h:W9=Q)ЧY:// zj55UH{nZxM{*:z @N: H]N:KB.*D&y& v@ݝec~ϰG8],S\urM+X⋺'{0 w꒐>0^t3:na8XEaDZ鄣hܻ8(%S&?G5 JhaRlO28TtR%SD D e !s ì@O"$t 8i+Icc()@ϐ v(tTJTIL:fC{3cα=}=X}I2c{͈=,z"∯ilH3/;*LyHDkWw :bPӴ8lY) lpAMB*'e\ ,69̯hRD<[NJ-c0:]EUo 7A}ҝ : \<36蔓~9Vu ݦ Ly`"+ O蠺.F]p3ZpS5/PcH}ÂT HtWwV!97z^ rUf/N٢/0B KGi('ǠIڱp+Qd~^zj x'MfVap0sb\™]KM(]Z?dTihplJ#8<伇U~*"1xB*FRduٖ%um$MI Axb,tmIخv vluBD-ppų/PU1P`6kmՌKUm?k+NB)bww1Ϲ$2'EKdϊ̳rn $<^K;r: .g0nt<.`C (-a1?"$N"iNp&,U܈QFq tq h)B(vETQ"]Erz!wzrH'q?j`;TrCV'OTv*?˪>q *WkiFeH[ HO<\ɚ3Xs!pk,dͅUʴ9:Dž <+٦B(BK=вz*Wco 7V1!P\`R<pof6n@gÀTճI4U,@7|Hj@ QytzUfg[l9EqEl;ߩdıf.Ud.(U2Ad%V6UfYUԼl݆&xr4AH% 2,^.0&p|u<{ǍaA{ ܢXĀ38>,֝]-n]7,b8iNp:GDxT[yͻƭ~/US] ؅.`WN@7 zD)`4۪4<~ѭZ4QK&u_+nR9 I#\*(ӑX/ RX/[)ļ. ipMBN;⻀"@KUp=so x,SV TJkU h`.qsqzz).Ps0s p/Z3nNXBJ]3-Å;nC8j?SV km m1;ғws: xC*)39.NvqP)~6js*~AVX -tSef7lWbqAܕ+Z)]ɯ`J ـYM֎vom|]ODm}~\FEXjaOe`wUӳp0߱^J<|xfHEI9ē#cy 𪉾ԋ$L%g}ߋm6xFm I\m\j3m6WvS@ٵ ~d Yʣ Cdֻ]u]u]w*&€+ryW/~'{eJ64o{%gmdn``zQWJ'̅ S)5A5MBmgka`l-]Bvuc?7]z҇{zD&0n`?{ \,p@%>zNA䁛D&krWo"N96ΧLݶR ṱZx'~K.nNb TQV0N ܪn> ok p>m p"N5+9})gAcP8Ni7foyୢ]o (k ћ~\>%OKR5N'/J"183C8ipMhN;C:gF $>\23dg&m=sVi(\67'r(϶߶*GޮVS;"ՄpwA|lGb}|JdONn/:sv8mk8ұRdYvWS,Nw{9B!hq,a!Hik.A,4`sO0s?lW);UI΁+9 P>qApa8؍&0.XNy`VpxD(:n> 'Eϓr1Fp秒m?w ZSx J YpWx" inW@䂱]7n/O ^Ā RSE="G N %Eo*ޑU#86eMwUvp=R8Sd\( f] RX+ub2xUNn(đW2IT|R*n$Ċ 6vOx-MN;,EH<+E9Q|^" P=?Lf~DJVK݆tr{:wY}?|Om=we\%kluVi-&'R1R&Z\V$Ftf `>q~z&@dQ Vrl5sWKa b/q'wyn j@JjT:5X$ =Ǫly$Ԅȷ:ˤ&|Lj#eRxZ3"R%LEl$mut)*N*U=tGn!Յ3=9i7M`79g&6pS*6>O88on}˻<]bcaX1RWTsIe Hۍ{%ݖqdݕWH&0|Aa{kqjS5x.ݤ&`FW=DW==!Xψ+{=rޒDW{TrI>)ʈ[6+;_Oe>DzIDbUr:砢w84 xR ^\A\<-.>&8p+M4%+"$^EDuQ(!L 9ĘX<\:4¢&ӋЫgP='o ψNd_V P9~M^sPsHJV%}mn4xLusqƻw  DNIvtp[znzQl [b="$"vQWE'EKDYQ-ω"!7*ݪp' n;A&in6Mܯ/`J6UVKbp 'MJ_s:x\<VOH8Iᜎ 8&p4ӃcHFsJWp: &f.D8^!`qX>i fNx ֧bm% pGh/e ,) TJم nA*埣Ջ?\Դ~pTJN<ꏖ6틉WCOUwMVsl } _EբJ~u4;#wyW++.tѢ~yYԷʷ*_싲kK**˲:o7UySyJǼk(i*op+qJJQ Zŋ˖P%ʲERUPQ•TRREeuuUKGJ"uZfY]WYTZQT]Z[eUl}޾U#1tֿنoJpDDdI 6o'ͭ+CuBŎ4gsB {Ï4"Rc-g7<;Uf֙^3Ѩ9g3i+hxoni>nc2Vڙ^eTc!#y1w11t k0uXu9rw"s#'ƈ6*Ovo3"'}}טa.1\'JGNN]N.5o4:1twio?973c#3"O )b܁4_&WަۘgN2Vn0"y&#Lp: Դqf63{sq!yLѸ$yüm_X19鯀pdtXG"0Ũ0JIyËiTޣԧRn0Ds{̑ϛɓ+FUKgJxf/1kF{[L\@XuRI^꘦Ffz}ƃkCtcIq^7\k7}ƹ1:+o1W0wV;tP%IV<Ըeל2yDc=`2'M c/MO)9nrhpWP]sMq4? 8'Fek/#5ĽFϨ=Tl[0!0s9JIss57GMf/?iQ>9}/y9ga| ohqB6nYKGoNUqF9|F5`ܱ֜3bw֞]f1kB:j14\4 O0"rPGm7Up/lW]C_p%*j\ l|eX^[[Z.mDd-y@ի*TW.ܤf Jc/"*h|xjՌlX8"}؁Pj3Թ7"^>cFQ _[)ȗfSB]O*S'EMɂNojZQP+W!я?B"?{_ r,Xg <:[;: \}16 [׆]!r˯=qr;C-zK+𧳂9mڊ'A} +ߒa%܇f@ꚯBQL܎d[;0 ܉4\T?trY苗:1^B|]=hgB!BG!+ B:!N C, !Biy֗BAg-?ajl48B_Bc`J-p^ ARN-p^FY Z pHyL| :JC!t?& KCheW遳*4u8Op=pD}'u83ts·@puG/'sBh[}FGl8g0?@@@#pnB~Bo @ g6ȟn//75}ݭ3gЯ3F`l>؃##BAp[˳#1 " pɄicL+(1~f1cƗX{Em }|X~}6^>zmK~o{ɏ^Կ2k^7]~K^ӄ^8Jcw(}&@[Kxmyۯ%nUZL٠Wo_B]5P+6^EW.]Pz o}!//~-Lۯ.f+](X(ރ='='A_3NG/GG|)|Tȝ9/_ p0 v#8TPpb:5M /˂ \ LRHp`*o|Pp>?.ૂ~!3sG N\ X!RQf{|A5~) 0Ap* %ǂ>T[-Gp4k7 )ೂ4 ?EH4%~:UBzO2;RpOL . !{ fh3{FSBNp=(o $?n8Л(_aw]\ǒo#v0йcdg\e"V7 %'"~H6I{JUQc?Tp*& 1?r$}Jh+xqLB xbϊzkW n;-'gN̈z&JL ])rnFE!G@R Vۉډq~ +8PFI$ =_Z_%k^p!#Z賢W' )3D| E¯R[o&z,+ LNd%8JpՂ[$"M"L Mb~G=V)BOR+nzw ]G~R#kB_B'dpW "So~/\_b{gQBО*_/xЏ >!$ЭBv؁=^pb.7C+RQ{wJ=B<$zG"KC S xS$8G/e_#> }="7Co ~!xV0#c``/ ^ڑ/BpyGAE>7qx6:_S:TL.^-C%ץB(xTZ;3&u/z\r_#$"wwEr%G ] $\F'rO3"$9 #ȼlׅ$"_,X-^+X//"wX]$'] ѕˍ>b\+ n|D)gDEூ i' ^&QfpkW_Nc%='$gq sJ !r#%2 ,mB%|Vu@JӒHgRtY~.,ْ_+^ɿ[^Ϣt[B)ۍXB wcYK.H迋/=`*8@ Oz ַX >)%Cg<,, 8bY"LW 7 } SBTG(NA3w, }#& .~+r7IO >'{DI_D.;cqsW"O `(8ELp?<+%'BF_L`Ǟ^"FP=7N Zѭ3م <&xFϑU9cc`-S K|R`q`~_ wJpfWp1AO%x7 TZZ"xy|T|&$0 !$aKBȒ¦dRY1R[n(;ZEk]XkQ"b]>&OE3r<99sgTES,JQa Q/dIkQ'Ҽ=M((OKi10Z%]vtSK$tt4N{=x/LikQz{yZŊXAatdG8KoBK:[[ t}%M:9 (cՄmZ#:_a? cZX*k/L#[_mHcR''*I?%^QTI<TzP{iNڅ;HC!u& &R7~0Tm65j9y*.?[QW:Gn<3NQ#< m; {@4wS:cۛ߃EW9Y̝3[]ׄ?Wwz>s]]7La zE W0~އTn4l2R~X4':JVgu^ 6v]^Wvs7`i9i9iYwm R3װ]T||(JKW;J.I$&Y$fznnnj.reZ>+:[c R˴hp11 &[)Y͓Yi ԗ(Gqܨxb81Tkt$34- G'>tGDiݑYiut%G^CJT$2$siNtKg  IhƸjUj4VD+ѴuڹKgֳe},%M<.~L3?hs m'[2Pϓ-D1B" RGeN]]F!( pӾCg'PnיV~\7vM<\aK?zi{O5ƿwVQU}݈Ѩy{GWm =_}~[q4Oph<-MtǜH|QR~ 9,źjcKڴAam^\@gksT@;p,(4Xh\idmGP*g4dN:#vQo):/źK(t%n'{ڋں1FGp%RDEB?l W*a'\k/N~ fԶ%+$6S|mn# & 3%tzl /2P 6mۂ#h]ŨYx ivk/w7*NhREҐ0(ZoQm^bjym*.0'k͊vl[gGJo&:`V9ηy[lOKhŰQҤ\\3s >*JB&iYPvE)dԔ6ٶb]G~,-aWYcE 4Li1R_Ƞ3ٯ7PxF|j\#oiʚ֮u=ƖĶNxmKW3HW\sջ{X?(ӗzQ9Fz} k?nnOQذJm-EϣLW8yB x}/=z/G1g\B{S+=G>XiIĨ X)xmQޢm] (q c :Lle)37 ȽV5?n ф["i{dm5 Ŭq,/_U(n9-k F$V q9kS;#.|pK,umkrlEOc7֦/~@7ykT  m|#;t]"3;KPw+|zg$y>Fx>~&_pض_PM+ebAtlR ߪ;fブ|m?Pp,Pjr#[3$;?n'q T`iWN:l\1IMR>m msw캧?Zl$R:c|[Cfd%^ LB[_B}鐪V'SQ@iBAnRӤ 6-WtV|s!w\]j%Q=a'Ȣ΍jo#k{al-MRh(Kh{װ)'_8KvǾ{wӻ#. W\ yqtA]H[otL.l K>Jhlk|IhU8I\UʼnߑN`{kv HI#e`QէM3R;,ͳm29ܮ]r;Q+߱l߶mo ywF8o^tD& $ڕ%BqQ׷Eչ'\9u\tԶ.@5kyQ#]ĭ&x`CB6g-rZ)0S7r~@X+CCrC=197rl/}-Tvc^!꜎y:8鏿=\oI+ޔcbmVm?~~Vr 5K֮}Wg% 8[Y%oox:ӕl׾ڏw *nРw"8Ve mE^4,1+(7zRaBywK34Sih4z= {5jTr-YuZ{L?";'ґR$f5LF55U˂J \wE4j:eZ_5oBVrF=yg w#:O~}Ŏ;R'yuwwzAVqw~ O0ox>_Ԫq/si9+k1oӨKLy"W=Ўo90]#.ljOtgq3/eLҦuXӊZDR~WiG`gPTVt~:.$RӖT?)I986+hźmyN$o]h}5ihn3) m/sQA̙A/H]?Spj)#5zsϟ9RpWg; .pә|F (Ś۹`ڹ8wSO*G(ifo?rHnE-_~y%`lr㖕h#0'.fmn*J34mL$gKȕӓ3F N+;'B|}s3_I3nGnr>CN<\D^>cF.1͈Vgh/^5 $z$P' !Pb;?Cj'6ZGMkXjLA,wЂR}ȕbm$mSNp.mi98h :3dq4%AvbxT*n8D?]~vrOv%IcGzuzR`Q2a]mͤer+VT(M5u+H2J)]SVfO/*^8)%9VmpM}8~MxIjQ_SmWf54טU յk5kMYT׬ (E(mE,.]5=^KZj &Q+ÑfkaMscC}s̆yuMn#e}8&M79OKA#crs&W\bٽ0kR'bVZ[/:*зy1YN^QMY?2U)SgOJ7)}QʬyʜY󨫫kkҀEťbňM5кvb*jU=%xR55Yj7Ը 0Ffq3 5 B勊MJbӛ%,,^T`b>k֗N 7YJ!6iR#*j9ٔqƬ M"Mmib!isJS})ͩ"3*R:ZF(OAjˬTYejSPp-IrI) YUUki>ȪPg/P:iG;iGLUW% }|t6C'j<F`U|zPULFhިZJ=61:i KȋDk--8Ղ7Dy}d/0AŸy/>QrpFVb%{/aJL]EOPu)koǼ2 ]L%:L&ƣ U?Q=L@=J2-rFIrDЌO>]}nuc7VULAap@ im_dQOhYf$g~3G v!\[f{Y r$n#AJre ԇY|iꧢ:%8 uR=ns#Y wty~z>/Ap5Mrw([ >QA^I~K}7sI7g- k=&>=n Y pb*1f TRL>dC (xT}πz>{!Oi1SbJ 3OcI3cNz-J]?V{j'fXPVTb%L%t1 QP3"6fQo)S91ٰz9KǤK*yda@?Q+U 0.g(15t68,G*#܂9Ygd:;ЛQoddA8#(4bl3<;A&;ډ-8VWN~Dc@=OzTc|>EՄ*%vj u#v!:hUd9>آr|AgL@1-'&ed=v1>Cr|r|u>9>/*5g*u6Vش7s>lg5;rYƣU b~ - 0J21񨷈e R w?ܾe4Vq^#Y:[7w?G\Q 2śۇYT yNJJMƅ H9dt ^!B8.;8 w%hvm䢸aLļ В9g-t}>,aQ΃/'`N% Y(d{ٲw&I{=M,1k.1j*}vL;id"KHZl$#o{: :ݞЪ=I~#ފsD1KF]誊 agW砞g7yE +j.}zB(Gq!N0zpP&e(@q1iL%Jl^ x[DF HVk0*/DI@ ѓ?`$<{I],FPTE!i:I&-.ūMH{0DLB0mu##VtūYSBIϭĝ+;QP=EE\E9ӔI;G٨lPHL2DM^4F-#~B1)E1"%Ð՘}aH'aATym$ _o~y}J.eQq^BOw{X1(!0$Q [y@Nȿ K${~ T;lvuaFt<'x2@HUj 7ȏ ^yL" (8P%d^ncNLZDtw=(ׂ{uV{ df/ҹ"Qr?f4 >=z8Ҝ(Mdf#2m0Mr&2_ۣlQr+R}$ Lx_q٘eZzE2hPA~gHA@i="n, f ${;1Ѩ7BRBiJ(#J".b9-U1qZB9-Roƥ|L~u p;$h6CIQAcTvU8-䰡"Ŏɗ<6TaRlXl R*V1\L``\ =~*m;R !ՏWm1l&av1loڄ " 1) lQg 20&Lj/ U9%\ >Fz=%}ll lr&T(]r3ArTnpv%*#3ßj SWa3[MU&}$*Yevl%/;k9YM gde٦ 41fsy'7t^OtX}J%O"+IDUQE0QL Z)™(ADr/HDn&J .^JH ߇۪Ncq E2},^%՛0S#JhHn\-bDbDMO=JuBCn6&ьH 6Ⲍs>Y|\!A."a "7EH4k WFB$ϨBK`>%rx?C6#ow/E.zX2& h2L,оt%k;vVQ,1X}Hv-?,/oɑBkԞr4EC;_ Ir+]T-1 #bz?JZMD%YA#8h&z)W? >샘*?Kq6,c)"/YY^mu@E~pѲ6§J/<zI(g (GI2xɾ=P&"E9)}TVkeAgPOKTo6j#{GYm]J YGH(WmbrʐϺ% I}ؼ7=FW+urw6g CCf`_ /ԏON<<#Tؗ3WuPR!#QmP0!Rn84Id11GGOVsAȑ ӟ>XFGxe댜DR/ϔid !o)9&~Ҽ$o?5s`4J|1m+2F3W4TK=r-njD2wLbuT3vLщcB ME*ڏޔ3/dKbY2R`)MG#d-F'P 7!WW}8:OHCV5 u;YӏgCtbz rb+uJ9C\*x8Uۏ+8sX~!Gi#EͿHK쟺8~mu:N BgBx%TПG7:4Q ]ڟ[Hq)Z:unu.u׹My\_.O(owS֡S\]9(pD1=Lm&&6ta=~?{8x^I|?762a#?O!?QR+.e6zsrB(>?ȫ;{znʉ̳eiNL$Lz鵊}@QD}_*X5C^Et@vT#1(_ TO71>mSL@~:/Ko|ʙǏ:($R]#]U䶔/4_VY'mOq[T%qIp{w3?i3. ,1WLq%CuO&M6BLy4߄ Q}%]TxƵ}G17 0̧$#}D1Ld*!9՘aM k̰À Ԇ Ŋ؞¾'>Βdny*Yx"H6lz-._HzLӆT=./37٥fC _o9 'C̋ڃ]a,x(DtCQb4 ^#.ĩ`rH4A?ž *G?CZ-a qG8*BOx 6{l[cT&5Sw])* a?xv-C%"%–yFp!1mFiwdg!|SrH[r?v }Cxz\?AЭYYw8JnJu%)9(EgguQn^hs 0gT Y[Ddkz4s(W_8 bi6BSA#M.梡lOh{&j,ւ[ۨl--/ԡYkhX DҐ6r?D\KeRͺdW$8Lk `8"74й¦4Esй4d\!t^GףȍWIHq0Ef.Sfՙ%4MVQcD|L[<N ~<52SP`_})W?Ɨ`,WKU8K1KygW&na5|驮CN+J|1ĀZKx?uXJCc  SdÂ*_n"o%oʰ S[5c7Uj6]9?3t_$G! Y!3PiQaQ]ҟ.YNy[.{q5 H1ԃh#1ԗsPi%OPR#S"Ʀ%rC1DrhDE Ejr )x ǹA6pa},[`n<1 }D~RyΪ mH\c@q;GFZ=ayT0ZSM~m* m}ϳ_sxx;Y\.GTk<+C3ܺ!ϖD|C|̤`d;>JfCZ'f3kM"No(8]ysy=s2؛Hb$ɔx/ς<`g R0H??)#4u ^4QG-<2msaқc4zL"cm'1qV6f2ŮR*d/|EvusV3=6RO&c ќ4{<@W7H5PxLŚqFmΆۜ .'/ ?h)Ftk؎g g(.<~3$w䖌3elcx8G0xo6aA|Lg|T^uL3a~Tp/6}ÙZ{p]qK'w5ZUqctFɖ3I 7xd1SU?s+8<bc={yH"5Dly+FmLRFQY'EI/ҹDsD笨HornV:oj'txjb'D5uXgٲNB#2g6⦇#ҧ>DUq‘~™*bi#vSri\ͤhowj<^l[+[lLVek㘏UeFSL;v)*%fe jE}5=o?(G h7XIg+Zqs*JT)@Gg(z_UJdL/J^dqBU5z %=cx`@t~:Q>}U(d%E~n Q/l.QL8H|DzѤ( w\nxb|K<$)[$dGSCf8HwQ2IJr뎚iVM$=ߪIdFCp4H1*92Njho3,[(%WX nEsrʜ$|G>g[2m[7J/LV,fX#x X1[n~3YhdKnxKt>.,d9N)!O{;/x_N! <pKyY]h9]gHYbWJ}M,.Ke,1Xo!Hw2x)C9rq'/d\<ŸpG*7p2BS1ěB&Gs  Q>( הDBeC=;TF=@\k 0Se ky^T0lPx\lwI' %Yf1Hh\S eYEٰ-)odV]Õ֘ ,6CPWd3E _Ի&&2SݒM˖de 5|dߤߕr?h9(@ގ2|q??f wp{GsG 8\=)#.Y枕7ښ!ZEp=KC^dcTewrȔ\bI.驥mR=-~Қ:`[i`] |.2x" @Ne"OɆOoڇ.Se o\͎hc.x "s1l4Z6k5Һ}*=/U=߬ESr .ӝE"ch#G`?O\ eRpԳR1 y][>$3F2 .x`9㉀.aqpe`^zFpxco7z7K}vor@ p /b\ƸPzpTxTxT[*ȝR^.pTxwkC]<+"Fd1l'4i q C[%x;>Q=On5DB&'}|R igl%@0`.~ܲQ!vވQ/~a)+= m/} GA>Eb7#2B-Mu/U5tjTźLYah[HwxLI9l^ KOxp6~9e{J=ˤRReR3 Cv}%2, XDl6l/{ƳdoIf e3;C6K > oVnn\#x pAfxqT+B!<^}xUK^g."a%}5Flz Z A¹}xʾl'`:`3~0'LzG &r`;v0ND~U(2D9& =":7T#'BbH'% /--7=J&֋o[bM0yPۆ&qS1Lc<8DA2\7 ;^ϸp:AՃ ;G,N"IG?l(\Zx@=ـ 65̞vl"F>ōD'/2[ )s Ӗ4m@nIwG=A-(}1O0ia([~_,%8` oi ط6, k﶐Gvſ~}f.lxW0mNb[iU `x2 }x,|} 0a0gS6K6-{`HG PlhG$Yf?+; 6'[cDwe6 f4J6`6K(Z2g7P".P1/P Qb| p?x-W-P\p#rU&c\ 2rU&s\ ~:Z.@dR@%S|&X#زRg,k.i͙θ \`>:ZSk%VXcHr6IYL gLL˒}3øpKI?%; OkJ0]*!lJ#wJ0OHKo?{5Y<:l Ӳ# ? Ɇ'd0Nc X,eK lxE%;[4=lxY\j$[J򯒯['%U> u\.U/L7e0Ao,jSYWS+c"Mcj"56̜UcTU/XUW[ٔ>2&?{BX*Zk~ׯP`W׬&\#v nmTBÄѿյu5VT,kjկa^Hm]8~*d87\̅eM525yPF@[qxE}_[{Qї}M{lZO<\)oxoWՂ\E󴰞攖).k\Q+~N䨠JO@> m~Z/ח~Ѽyw=l{D=-k1`v=7CIKBOO;z=E۴C-b۩)Zg%8]ATkޫuUo'f4h>m Zdxhy֬gZumszVn}6"ܪ5֗]VE =/՞m@y'{Zz3;MJOfeڦHM`ށ6}ŚVm/;=}EE}/WMRMQ/huzW9 O$}nzںˡBCK8W:{}k?m7C?s>zP{OD1Pi-FgY_^O5hy],$5qZgJInݿ_OXHOv?)𜖰.(@ONo-,[:yimg'9gTO=M+<}kR [>GVѼrMX;!׼BQG777^C S1.#B`ozd6. jZxMVһ=Y}M;en%42a!0W8cM[k+u>F&Wȉ a}9{ oI6 䑻X󿾁Z)ՇhwܭsR ?gzłڧ-Zs< ۆobix9E E?-~Z4d'`OճM,$kyUyDXDMo=![=DPqBmi-pVh[3Rra(ibɫxr9NQKʲӞJC2Fk>v^\&)ˏ.V}KCv~3M%U_z6C9bW~z.-,fǢM ˵M=F:^Di ǥg/?2Ӕ]iJK\5zF^*X 6Էh+vhckeE4S.;EwN߰i2~޻KxieMlri"ɭbn=JRӓԳ% UBd'C. bG=W䇫rI4oh= rF{y=ߣI"}imS,* 3(od>/tӹo/nךUƯ4/ 745_TSլ4n+řYWS$W#+j.]5ʢ-m ̸*\,3j;S+5ʼ W++,hPSQS_-^mBjeNf}9/bNy񼊢bҽ`yE3҆5bFfCFTXU\U ~*vN1[ҕUaA7ASf]ehD5so&uꅢ7ԯnP*Vo|OEU.^j^]mFl¼u 9fs_oiԅpCRNiWzZP&j157lwa|j)kk+ܼZ8e}eӺ(l6S[4DhNyzD!H׳C&DYRдR8Rp&9Dh`Gɜb)Fg`Ѕ{ƬmX_3f}MrZL4ed""mu.+/;GĞ%clN74 #j^ x<1rRRWInh< qElԇɁG7ƍ_mohlj7(3#M,F)1 hwFdjezs"b6ۮM'lJ5nVᡢUmsK)2 .yZ Uu5F)Y߈޳1 ObklEQ$rG L@A('F:SoMH-F)bl*oiܺH.RWc8wӕ9'r.nF1yh0[] L㌵"VLΘhLsnyW4E=ډUՈ.wbk4V^RE+fΜ26#^Z1*]zUrPxfƧӏ{̯ʯLh$T'!}x܏. Ze S;=>%jf4PO~ΉC n[OSgv]i$}D5ŋ 5G t*N/]]um*>^/z8Q/(f|W=_qoɝS=/aO{[|zUӲ8@߽_K=@iܲ8W~]QUpf +sufY /i٨-8/!{+@O*V8}wJ1~0O";*S}n_pgc)=?眆\z^ʱ(>yX[9֐Ӄ>>$Rmn8{DhƂ ]sjDM8{u=ƾXY3 wi{4[OFCݫ#^ϴm̌ef3"d4?yefO{*(޷W&<]o$L:^/SZO[EAp5e_X56٫h5rsY΢|ETϮT0>{MM"Pvզ $YYSQWZ=pqfl_C;-I%PıήjXqtM0]qpp!Ҩ+Um4"܎Eۃ\M&7D]t@@B X&uAHO3oOҷۂ(1aڭ/_gYr2KB_OXr.v}eQl_;v)3.P= }2r?wM.CW?p?mϥ/V]ÿ']r76Q\} ?ܯ]%%fK}V;풛OrWt{jטl~,^J[@qKnSl[Ϋ:[g%8-#i7b"Qu#1B~ 64Wm6h-Hg/EoI4I}c𗉸^.{:EGhEǸ8wѽ\t.Nt\,zШ[XИhNtҠzqѴEYϰƗ4.6)f Y6z9֠8Kmb]IlFm4ֲ }}hRkq`;FcS-6N3ߝiγя+fޯ确;I6eF^mд,+σ6_|F?hoFChl_l?hJG*ݏ6zlPLqp7$zM>]6_h\ o?g{,Dl6}cѷh2Q=hyF_C6{=!}mF%z?!_Mc?d"|M mUKhe+#}m=Fcm?b=FG/W-e-m-:6:@,?Klt.[~N%uV]G!}k>^uEXYQ:}Ǻ \?wя]4OѸ }/k}U#֍{?u#6(9˳5('ʧK\ ͺ'\EBW͚u?Ӭ G\'iz Wyv3u'Tu)oZOrɗ.R۽A[kzK:}E*EG9~.zNs9Q}C_*/sы]*}Cor_r]QG}F|}E1|Ϻo(U~^䢯plE%>d'>vÁȥ[oAk3SmP~~e6>Rm[CqN,47o"}O3#!xQ+>9QV+劊fUD}Fiq4x>ih E㈦q⩧cS:vS#S2l4ϱp~.t}g Zd݇ /|3ơ>" gqqtEtt0wgX/pr~}<9Kh;mf!6u;{Ǒn',sr9tiV]0?Fh,Oލ|ɻIQ7rnVq~_Q*(tQU/!LH{%$!C 14 MiJĀ!RTDOEy!<_r}os=fVf9-It9Yߦum m:0O'ii;Ǒ8l|WZb]q/]1z6z[.yݵ폾bݧg:qFE2O'ዴ;y8&}qw.KWW:Ω0]mog. ;<'|Es{/Swi~O;q~A֯ew]fyXJI3jr_H[Hۮ v^nF8WUy!^ϭ]]QewFq?‰X3\ Qoh}hWmܦkr?%?7<>;ԮrGۼ*i\yEi.s'zzbl1P\16eZr;Tso91vG;澎Cs?ǹY^Cb> k㎢>/֖+G92֮vS?SoK.?J֓h9[8m}eOjU^}dʹ$o>yK9"Ɏgq#I6#M#+ȎGGyj=_}y-uTil6=\eyl,c)))A)vP}R&c)6Jk>yKIqȥ~9Uy=j9j9jϝh43?O~#~q&v>1͞ ټup|MrT_ hb&6'2&vVMEr?AvLyq|nǩ(ݎӂttێwBUy^V= k9rd~˰drC2xr> 6 ? {}i˴Fdzdzd2Li/'crR}~&,GyEqdY,kLhFm#vn aW]Pp үXBEz)Q/' +q+*܍ Oߒ/U c5;Xqn pxl٘;bVǶ?y0QXpNB,q6\˰˰z܄w`}x'ȧrՉrUyu OxwO\O')UOF_t~%U:٩Q?w=~WDsfc.c[]~ömp꣰'$XaX-'sMrnB:rLԽ\wPtYf%?@{|'Oc^`EJ>ꯘ|,7`'| c˽I^g{3o j`c1A{kB;aXgᫌ2ԏ +xLt8\H.2_g~VPM3lVvӓ"lR,^A^GBl>ƻ|!SY?s]ϫ0_57wl=q6drk~ޢ~M/_hrfZ%Ǔb.G6D{ y.xB6OCƏ=[cwLz-|ҾOwxaD-m{s nē,|y]~LŇp?lYXd㿉>6Ãm;b),NhO4+&IBr!}Blkow"?21^9n w3aڏyɷ;IQ?}#?NތzI|o&[=PF.$O'/'$o'Wϐ"_Gf$X6 {~ާqYo o%N@BA:V}?ʳcDW'hJ~ qx+cXrr?i_I~eflCWzWE/Xd_Fl}pp&%?ϒ&vVqc|_,w|#3ŌIzrgr?Db|z%8*gr $7fq%~~M,4I'_!"%9_ gcn=icO+跎XI&!YwI=(AQ 뗎0oV<zer2YcLG/38 _Rrnw?9xkX; βzӃ<,?eKq5¿пߔ܁ y(NnjFs^Wf#%^fȿzVfmy^8Kp1nCxK9Bs8Osͫ/QcM4LWQ2^b@339+7y > i_J.-Cx]y4y7z 6y{pO8#a*9N4UiJcq: c F2aKqb.‰w7xm̖8'|E?X~!8Kq'33AE\{ ^:T쁓{>}:~þ'NƒX}Aw]p E%j!@_OsK_v\P?UVFEXz3*.zޯxZ xTյ{0 `x(a@Q$$ 8pdy&Hl4%W^չUu+8sM$=;P Z*|kZ{uxcRU(%Ϡ(ce`xɇs>ce9Wsƌ9ʆv7}ƌRp6p //7G7mk`ƍ$(hT&Q,*_xB1a,)PiesUPWs-Ů@hH0;ߟH\0f} i+7|en m`wp9*>Agm9*<{*pR I1 9-X7./fVX*.:lv262.2P_ԈHc_,2e S= '" > ZˤfW0:6ғ:IG}8<9cxŻ xY ɚd#DiK`P0 tNf!* XkQy K:Gw 6U+ 2Z `6X2_wCc7Hwu9S UQ\v*s9V9+kZPng.WP  %7$U*Pxd΂T# w UYKv\`rfAC/rVq#l^ܬ~停\_vʥqT/$f1qc(rh '_T.wz%17XM䇠>4m_! O4gU-{sCs\4D &s5\98nUDAy\`1t-.cva26ܔӓ_):(i |hI?HUqkc%bߘSx!I񐓿b]ʸbeS|N0>C.,ƭIM;R<2tTr8ڐ\.I!1b!N5p|yQ%V ^ijhr_ K]9Z+gfGX@KAyT]A=9kj496q?3,1pͷ`yr&Ch+mW;I$+S&XPJxRr0ؖ|mL"%&D 1Q8,Q.l ȶWU>٦GKY) L V"l 6b6؅X78O*ziv+zt)vĈD [p@rfȁ$*cxX*>t)ƗSy{p)Cb,#J#CGC8nfGWjnE/K.΂b*EGxPuVl<)OR.@lގe6%4ҲnV?[(qtu,gzuw0Ǻ{#X]CTdf==&PreFg ԰bMeDPOBdm]B !lo]4X&g0LF0Q8'lqʖJ- Fwci=څNkX$8<5Xn@0֚eAH&bX(o22EbfP6@zkG%a;ڐ,ve=XbL*THXX~> P~fQ品p0qI c5FQkV$ND*B=6nPQ^aDrPjyBh- v  1zw*ܫCM>.Du-=A'pmT$g[ZίpU+ *հ7х5]f*gd+j59r_Y_I3>oQoZd-E17lU:6P~@|5@:um3GkG Fн Fè # ŪNzʊEm^~4Hznfƀ#}4`M'),4>?FӼ+ Mz8WSI !#l8̥=B='Sa81Sl2@jB޶G|-Ѹ,z-ztb-6rc졼M=첞XiK?WŻK v{g3n%F·)oF=wu`ﶳ `MJ,>5WU=DMq gghqcfӴ zoYLGW15KTuqc`:oc^ iTvU,iFmtVmf=6kh.mtaH-t5WϦIL92B2eb6t6.~;cE>ܡ1Bc6ѻmu6V}~Fjߴ'l6Zp=oϟnmtF_n@/᥶F\ku։q׹g;hZ\9ZhQ®PW(i>؞S}Km}+<$Z`lvg 3k]؟,8pk{(Xt59H!ׁR)/ 7n!>OI=8Y7o^?+p#7q7 RD;6r.Υד# Ƀ|ذ@JFވ`"΄CMn$[GF$/lVw^{ҟG2_/9d^T8;!洆hUAel_:N2&"J%,!,#,'; Ho?" P+bW#l%Eu 6Ÿ>J4 JׄXg"s $fAx?o_ |C/ )b94z…] f݄?&IBS™&^Nx /!|U· ?&8p:a=a+a:o Ⱥ|D8޼EO\ǹ$UD_@DD/wIk.~n'F!!.8&'NSƒ#|-o!|-=ASDkER>Htډhpgw3ÄOUw*q* #\@x*&T&w+Bx~NXIGI %| w]pJل+ ӄ?" _"phiMkSW |#B+~1ⵄ/!xԽ xT|$Ld0@ D&!@@E!d'3DDI!Z- m.ZmzX񊊗wuΜ3~=<{k3g،@agB_Ѥ&_8ֿS 's\Ӵ7߹'߹~Yq<i3*hWW/iWٯu`ʕ}OWys^|n޿%<~~,_ [_^~K+:u~wyˣc&??]o2]Wi-nT 7i55L.i4DC_QIF[1'.25M"jj )-%uus1;Z_TM`ɨ  Vxoڠ ڪ l4Ѯpj̯꒰,(h hsC#6T [+"̪hD.Ꚃa^0 U[8#DHKؔ(k j &<6?\95F7{HM5, 6)Pm) &r愃HP%{u,ـH-ncj;9? Ĝڒp]0 ͭ1%!͂8{~(RpQ)*z#]iL5k4$/8?TX6- )CDKubRw5#Ap̃܂†@kܽh0k<bpLk2XFFmm洄BZ'b @_IMl^mX !UϩS%ֈf`-UŤԜ`y4zf2RKR47PT_+mjj U@b|U)UmEd:dYF QI\5HtD:$J0#-jK-Y4-%UUsaW]85ϯ(Qt6P"45CZ"HcKHԖTUZxv_lNK&olm,)V(b5Z^ZiiGU0TW.hZ$(Wҳۃ^H( `ᗕVQPt~pcDnB-T76[8)P5(e6 5K\|(D*Ce4T] 6*|Y(R 5fH:d60hTV ;j)hj i̊F٦x epYi,0qGbjhFؙ4VxXIL'~TkV|UW|lUݟ]ݲ(i"iKʶͬEbe1B~8%;!$UaKmJ$ƖwQ Xd«xu4,[ I$# 5MnXNͮjs+|jJ<5ٛGnډ'ikƄR!1!P,X7G[[2%+PI)P\푖TU7Pj-5%шJh_mmsBr+Tej[Ujg0i_(VG!nyZ:Em *Ukyj Vu-*Z֡.32"jJJqW9ȡ7t/,k;X5m% BږvL)INI+5:J (y5T+ayuu40%oEda43m۠VZ=eQsCyJǟ,ISUn+,XWSXgW,_VaRذZН[#566ʛ)V\)kb2#BR%Xi,z$G gZ*D {_nԐBm!# -#7pc'Z7qjT=I:L s6n2d)Mcڈxwepm+Mr iCys7RJinYGKy_Sڸ I % & >w= c^4V)[e\PEU@orGDIE]R5NMsj殚;fΒEJIMMUzy+# ӌ`sKhU !kZݪTY4ě[xRk&VK DM=>1Z6Bi|6f DAѬC;B2G|bgZiDĤ<4i;$LT4Hil6nRNo=6ѵM4W]cyKkUUĒmgitƬ-( sD~rYx?Zl 0o2cy@<:9p4Н1X6*\4҅iɓ'M9bEs+t]׌┦1 mO'.> `s(nO>Ե^zx4䗯\AEE"[ ;Gb\,TljȌ 0:ξ۟[}Nꊌ:^ŶF&I?5d cD=s؁/_*9ѽIk*(l'}D,S^q׽0i!յ%MOX-Xq9K HՔΆoO>1l;RZG\)ۻ~e/]cbnZ@fuYp<2#x 8/E'p7T#1vC`*.{ij>* p7;K u-ތʏ*驠kbio\m#9#QߙYzeGRw3wn#Dc/>~Oܑ5lA_fmۏ8vl> DCΒm=e]eibwmW%L:gOtP|G,yy'cz*)'.Ɨۚ$~(38sQhOTEo~CFn5U~h5| -c-syEٿYN7p^6~>.?aYQPqY'/"(19ٚ[RwS_dO'p Fc |I%R0˥fQON쟩H7k9oꖂ+|rOR02vx&_Pv-SȈLOIS]0VZYXĎ,8"Eǻ3(~ʺS)RݻT*Ԭ #Gq U';۾I'9JiHEnҿW!R&}Ҙڶm)8ix$0:dd{]թ'(N`waO(a<ǪDV]hx%?dFy䕬šX(wTI ci(Y ۾m}t7#۾Y=\NԋkT$[]C }^2JoV jKߗ'-4i aVʭTQ'1uOթF5\9 ʬUFLLwt?cS4ϡ2X7x`T>~Sћ)QWXAYmØovO ^ֱ.GIXC&;'x52A{0ҧsܯi?Y~N϶Goz4m^8dOww.ӧ<RowA 3%jwWnp:d_z9^Z0Cx O3۟j߭5 [ՀZct'ݓx)L60C6Q<+g=Do&,:yozMŮYo*z$7]4?E0,22}l=;cc7Q(~?ՙfOҎ?IK(v!} Tŧ'bi;iԪ۾)'.{Ojͥy"O3b/O2twjCa߯USK;1rG2N-}>yHuW&9 *nO9m̉4j.ڗO6T.vͣe6Exc0o-B&Oyj׽ؒܪRe ,ʥ{_x~SYw C Y*JUO5i5f5cwkekH'{,ՖdchsaZ(^GE$BuXe'fL톦G~!RPVl=}H؏D/]KuZv.շ}j .!~%45 XPX]S4,eDwfS|ǜ |L9sm&YH*ZFӍJڛ kHm$!_4crokc5}&4K?cXJG?yE'˝]4+Q񜎗5[4SLz,zka,4wx.kNo۴Kʄʔ5,Nw利c eHAӉ IQԙWp$_ Ms.MKz˩83Fs8~GW zjy)ϓӕhwJ[IO_d:mߌf⻎Pe:Ik&"ŕA՚: ΤI7KLw v0~ _2#W+ʕ~6eʝ1MJԿTN0 K\dJ!!<@C|Qu YBocm(F#˹!"Z!ʝ az i+Pr 97C"cbcqQb|K̃գ3( Oi> l 5n$F݋h 6HsrdKjyh> #(Ps vv騪վ OOUGmUGUo@-fQoQ!pvU'$ Yvz@U({zeѫBDpp]ܓyCjK|)zŬj1RU5vB)*:%2@׫"j*䙉¢`EnÌB63 mfLdjy-Ü\oifm|s=,] 7+K[): nLf?tTVI'E(%HR~Zwl}nn~=9vG!J_pgdn&6L_ =ǔv*=zxZx ^PzVU71j/`J+XUЬ=r#^xtaGXQ΋X>=N_~6F0k0ݒ][rcN=ÿ(i TՈ, ձvK܂Nnx!꟢g!#yc )(GE,k_%1? oc`V~; fL?Ɉ&0qbD4(|79U~sS 9OajgY4@P0e)?ͰG8ܳ)om!̰ ާ~?x51/2̕\寮/ߛ QlNZt,(SYw)^!F%]/>Fn6NuŸSU>X_sj_IDHug!sx=tPYZ2o|fcQF Vd&Yi9MSVn$P-7}']N̳ORCx*]>׿/1}L|{U}1gu'>L0ᅌb/ISYs åeVn%lXeM0Ӱ+KKXFOI}~25˨}Y;ƀIJ쵟jeYDndY3:3u eeSl$y38:cB>tzY3~e `w>ǥz>uw>r{ T]8nݧ.ss}TNJXxq_a,'ǐdRGa ؘʘIe*Jt'D6Hޟ3讦? h׽N:/5\-eo$z5j_ξ d+GN&~r^^P>J]ΖM˶I<ỉDګ}~2}I4\1}( ]ߢog腪'dTVڧZ&aj9H`/q>%E?c.`oҘ}C鵆UJ 5(>wBi4(MR:8 mJ?6#P[ҵKUJһ{R/BFCmG RCT)=GzMӠt }hI88{1RX5o314.446C!g2zXSz|mn_;|*mZA-NWU}SčLQ|@fɨԚCgX`l0o-{d^?><,OM˧\Je z}RI;zZ?myO7|N**pe#%F$$MP9$B5GS2ʻ&ǘVDOSvBvHZz"QR65SR) I7wWóo`Lz%?*=4imНdʋtu@ E3xЊd9:U )6+ClѨ)cR 0o~%*;?OFf_-K㎁2ȓ 1O5k~;q;2{ wLsxZLؽġ<I,SZbw 4DW"BzK;'sKlt j2!׌CL0y#ޘ>Nt,s,ܵE\ٮV 5X[gHm@4P!7kIћ"wX~'o j3_G9D*K)'\c_|^ꑏMr٬|p\ybbG^<O/^ZZ!o\#$W0il; !l#rPs@{xW2ʆi)hjEXCL &dje}a/s }] }SsMo,gB }=}oorr}Į6KM)}_\_+u,}[͂>CL髂-"-cަo3bJ_C=$cd@;ؗ?77C@;j. g6⮭Q?Pq $ۉs4Ga+#-gqxp%@փ⚙k*,%e="mP#k(3n2^RJTN_C-$Oܩpd6|\g籷31S:vpg3DmG ;h%HSW?x2M(0T 9m;<<8BDTE5}E9>G1X攤Uki3Sd< 6J̌ HD1LiLa2(5tkZ]3 g^.=;_ҟ9ݬnM H1R`]S(Kt=DH 䕜⸎T<Q.x&Ѝ[!6Cq866;ٛčbmxԂHY,Qv٤G]1q q7 eMN~h5f$@RP\,A3婐9=J~(bkx9^lΌb[{ΈL ki[tfmlV&i̜mufα2UXX@šEױ\v 8)|( zs+nwIOIڐ]EWZ)k/S n7^m^CU=]m,Wp(gB81{i;e 5pm.Xi^rN+8v.vVH:.O;t&QNۛ8%0]%+ĭ hҹ\x½b-R܂x/p`8xq+S)k~s\jC$:0~.J9w{s跸>\wWk٫R%6pS xL,~&\" D \i?p}*N{՜v x9Dc#K 8.֪E#fxt%%,gz)oq\,d]9_c,Y/_ny8NfODMyG:.j@v@NNN{q:X%|`๢\9F]T& 2i3?#<GHrL4KF^+kՁ8Gs,.,܍U8! [RM\ |G\ b9r 8e7 a 8\d#Dp^ ux6ѿMNX{*ы\Eo]|Q_*ℌj"a8NIpÄ.)u' i?H NJ<-gYQT|A*~A(Eƿ<_iwE"#U@ %J]^C{c8BJV>G'骆 - hۭZUn9Vq4u|\BGxem(Ӂbq2Mω(i60s5R 8.t>pakL zxc[vәX4,I" RQ\&Req$~.HDxXXX!z4kUvoԬfrs$&QY*D "&JC -DC6IIw{CljȳfTIEq1 0Vp\i/p1%ivG=! ."<-Mmfq2Ql`4ȥLV-j2Mi2 qdE!!9dm%DF'V#ZCri2qq|Bj 2`7_`&},N{>Nn )^ 88Am 0Q.#Z`향p[!Fぞt `@/>N9ثncHTRӅs 9ܬT *F8[a@eGz5jXb7RCǰ~.f!R }zi8^i/N<)7ѣ$g{b>׊:Tm d%4I(; >\JyW41o}/N/|$^g>N3iNiˬ,C)Ӿɪshf[ej?ǮGӶY7YˬPaسBc&Zqkŝdfk}gpLu\ux٣lvSGMҳdѯ6fXIfW= pٰ Y`gC8"C‚ Y`GgCY H|./(~)5ńӼxvg"oJ5j:'ńӃIdml@Gw~AG~5L%z8T,. Ub9ZZ\)-BτM䁷9 g]yWho)λwG8vy _3=㤛^=!OH1 =\? 2Ru%2,}ҋo.p si?CN?>c~"z~)^%Lt!0~`}@7tNi_R=TWz%*p3s/3WZ-;r.Rs15i4n {TCjct&mGhLHL2IxTG*PįE~Q|@ExPӢ(>+EÍ7M,&T;z|CsO0 SU|xAUS&c`z8Y*͆e.3 l EdN4"_/_/^,&^RA%bYi^vwq|PQQ|_EQDqS)2 &,ل,{~ISqU0ɗЫT`*T j+Kz𡰽fPWKK}.DX%'KJ,Aj$fs}@?v95!Q&D\"lx p fo_{Ifv\>,d>ɥR%pb:p4 8H `}!r +Ng7m[{^[@_&ɓNd)jN6\.*^nohKw2_ko<_iRп-AwF#t뢛V>$JQRNe3'qZJ%w~Z֓tҬd}dhYO);`ԽVivfLV4С-k孶1`팽Vv-LV+*Dƍ^|\B.4I u~Ht ड़/n~2㦶x ql L5R 9>,i]WW#-3gfT"+oQJ&3lK\bqj.JR$$f}&kk-v]6ջ~4X{MMV6(?cn хZޤ3<?!m'(NS jk'4O|jkMSׅǟ>~QB4w"} -RW4N[(T@x)mg66ENm ̈́ʠ"F^{}75E4KO]辒^}}S97_ұڹys%qUsWLPI^GŸ"UԹ3=~-to\$=uUgC=  szRqE{ҟ9 YB^lT;w)r#?g8О~oYݗZ}3S_.\]tw,nj3;w:7/H$7gK!\w{yUg W϶:VTGzܒUOVӪaIQt񅊩 ?ս]-}tw~\Zuުrйl.M3f8ػ =y [d&Pݫrfwn{ Prޅh8Z\"a>!\x N7.gۜܫ\^>י~Y/:D_=c S/t;e9̙^UT TeUgq|P5rJD:ɫݫǫYts 7(iCU.u>X5aXyk3sݻ;=[#4kr| : ~] {>^IP$\D#jop ,o㜞c1v8(|hsA٧nY>3|ع9~s.B8,p޺U&*r84 g*5V>\ՂLL vgg+lY0kwrF;}/; 窅ζhjoiU/ԫihxV3 M TCPk[5_CYx5Wq7F>'㚶pdm^&d~you8Hĺ `[k6Ԩ7jYh jxmZDCmB|^$܊@hwªH (;*/iQJzdYxz *Y*Q/M-bZ]TsWĵh[Գ(^QӅ(Ȭܚzy^Ě&f#5j=E5pM-ހ"-VTODkAy^3HP_tAyH8lՔn\r U8_m}ccwn|O[9gYxzM[8s^}[ZV0U *)_49"-M-T(fN\,VWNR74=34j;1)cCu "M^UF v:Zc|6V:vKfP[Kn@,;5z'cDOhhiNhFm ㋰c׀:q|/_1Wxy|iB+:5mE )}P4[Xj%E굚֖64C]"MkS nPC-zOxD\,Rl"WmUl@5Qm:JFлheCXSL}"-/_!cvJ;[SMoZD!̠B L5kZuE &13)#\d3 T6ɚXhК-3sUi"Lh+[F5URd*Ɗ%`8mNTmޜ9P@,Dro^[zڡJ ZI{cNfC.^ (LeΒLߥL9y2$+9-9BeteT%dT&fM*`O~U۾y} ӭs>5XvwV+-:a`_u>\.AпE[I!RzJ*/nqTxfp?|4wՖq_q,-q[|f%u כzuy3ؾ{|uu64c'8>Dthc_>}Om!d12X|jpwQvO–|6& >p򙴦ŹC`K{y k Nd6%g32-v'K‡H0m{ŧN-t,ąd4X >Ө'_pa5 GKҾf%jU)%=pnGOaSc>Yx5EKz|5_fG/eIz2a?ͽ_yñ*)[SMOJǃI,d|H+&%}ߕӿ#Iʗgh先mi{~HMEռ׶i*|_uu5Mҁk]EuҠMئI-xmbT-*lĺ0yiwʶИp*?_ ?ԃ0>ޟٟsJ+PV>)r^fg)" ED"'3v8$rWcI㟟[-Кԏ붴}gFަ4>VSnG;khJҎᾂ}^}&K~K䆒܇)=~Po5ʲ{1εdRv0AQj=I/ڨyL1zB;*=soiƐ;UkGI։4c:٬i[ Zۘ}܆OOX󜶚A:5NK 'H tf@g'hBJB&кy߇{41_'UZI&sj$oI';_@{1Y 4oK14~˸1]@= hq:jJ}O'&O/Iȟ_W%=7$_ȿ&!߫#6=/P{lo=wR?&$ GFyܿ^=/Q^"G|/z#pe}Oy:bN!%깯<>2O6xAG=-ZtZ6^zJo<)g#cf/HOi{yQw򼱗gzg=I%iWM}Vsg9] M;W/p ִ?"uQ<^'Mմu\gS !!ou9y!8ak?"Wo/}^&D N._"tT.+¿SIw+3{?_O\)ܾ1)?>gp ^{s.ק']q(n᧤2d*ŏB<~sJe;0&$QHӾI4_&zӘY7iDH5?n?_`< ;,rωܟEn@:ҙ?3-Hs_#"w0$B$^/;[./z 譒`&!xw~*'qd +XpJ - Q >)݂G$7Q?+)QLrS$"w?|^R?J888MIB֦IзJIB#.XGA, 7/ ^,r K*)_"Я.rәrҙJV0$I0&]EσB*ro ";=}  /,:$?&tM?[7GEB%S#U_N3/bW = $z/C\i<% 2N\&x^*Nx$V"П }\ }>Y>,W&K&з %KB%L/SdS3>_.X'" Kk%'BLN{R//AG(86& =Y_|W #`DJo!+)wP'G/>.#8Lp D߸R/"eB_.{3[~/7D3:#ˍ." ]/l.M"_g_ۂ݂H>OzP}9tYs%2EMp_.x$τ_'%ǒǏq&8D~?YLR/\*BÂ;$5OM= >s|;q0YgYO n]Wi#wJN[7.c' XpYo'YC[Y{U? +cR11m OpK`"MNw }K\!?/o vKBS[?Zd = 6ɏ ^)kSgK} EW_%# zss N\)6?G#9 PA7N . &OeAq`6.K >,8㹂t} ,x )|nEƷL7M:hr䢉.,,TOS'O?qj\Es+KOW*1@o;7YZ8qwꊌҊk]wVm oO8q!@q;gy;O>u:^tPQR~ jwn)(y/ErHQlJOVSskQ5!.?'7U/x&2slҿ]ߩ_{)߹"'VchWI|#EʼGT>:vI,WgmΦ6//1z (|GTFŚ \TH6 򨧾t#k{oYp36;I2⧳K S\G9$+GG:c%9ziOK^ؚ 6u#GX4 3\.6EHjl٨MbOxd yP޹ݝ' \GCXhxl U<׬xWEoDsX`:ȹϛ-ֹ-|6 |t>:Fs'r8~LZƞE ܝs/Q)eh1bBW -FuF^jډ,5xe>2[tl/,xi:p8eQi-CॡA3u/F=T>ߢs%cbE؀=xJ{>ž9B% MO&&~< *,9PkX Nt1'ɪ_BLw$,. Qqq<+hfչ"2Ή=? +z?|w6ܚGO1sz~ 7*UPC۸s;)r|1Ɋ*snaT$JJE T '7>=zIu w.Ρ\ 2w|чW UwwV5Klp-F%EשSw(sn^h^\4ߩE:NM+6Mn6Ch&-_t]+\o>>N.7Iw_ÉhH+Ja%l/jٯT'.G[`aS~JPuYcðڹUPx/Y0éF$'e9MQlrtnƷ)pqEٮmchCzcJ<[/_j9g݇Խuܪ`ȡ,Ñw8])ÝN wBtRخ^J\q7^8i?ŕA՚:5OiWmT/o23IU/dB:^:^!gx~ܾz"gy Y@DeМ?4-<9E{ Hb%\ #=՞ANrgB!xY$乞k@NTou!} DnbhЛ!u)69x\i ѠoEY|9%5HI)n#^S)L2/RJ%^ SPx>Lq(%t"S#T7fSIMxFxTC`Qx%Sr@sxt˸po@uO0EM?4)'œ:pS|M_^B@iDg|O7hc>"܂/ -R ĎRި+igFs< LNstcbLm 5})^-{l,Gf}j">\%nY}2%>0s+>E!ƹI&)#n7Fj g>O֯"J5ԾFW:P1TGy8:I(369YR{?]x-m}H7>XQ3R ɌH_;p sdž@NV*'-*'ʶ5TR1P)˲Oc8fcsHΊE怯z _pidď#tOáNQ B`m/l-8=r',=3 J5uL͜DssB{6i(|$,d~ $8s۬>7͵*)CMJixSLgIyhmWgIwIf)DA_ijL׀|O"{%;N'QCmZy z pH^ǟW+r* π&o,4^S}PD9`6f9[k_|vp/0`v3:懤2e9+^öQ\SfVxV\tӗ<^UNm_b?NWg;>KUWoUUBiwx9]wM JyMPQW(|0YS~hLy=K ]V~NKe4\)XEwݦ#kcݦ%BWNӫ@'Ƶ06EןCxTtbEk< JXMLOXϣ;\SػJhr$+&Y3jqʋnSk)k*v6}xf}xn!M8$NyE&W01=TF~iK {&`L5 1Qc& }ͣx[6 M|ij'<Eޣ"Q9g W!XRH Z[f/{& itJw*^:L+=޾Ų tO2IȠ#P]Msbr*9}ULY3ZDžN-Y2͓C"QDq4wVRLk2Y[X.lq,U)uK6*UwDq ;:AtrѷsG.E.wm4A#cJjVnI1CxX=\=qk|o ir% yAqz<-A% 57G@wd,F;9|})̓ /KI,g)GQ>cY8ƛ@BJ.pX-0Rj^N9]˼ۘx;`^jۛ ; yͅLEeHD4o#,(>A_RwW~M~~*Lp0C!`X6"mz4HOX.`BS,%?p@~`#]<͟ cy{(_̮zay\rX>U|:7 zݨ'E' t-03} ~€J8 X>.Αp6pS%Γ \}-s60f`)`rvCiȮd<9Gnъ#5IbMw{Ys Q` g%pX aXhy]ģ4 z>9]x'\$GhC/&x3ほrR> rPpC|r[Ҡ ؋A|kl< s ;uݜ]E[ G$p6j xr;)'4jЩ*`XfL :E®ez*ob8J8Ma`w yI\M$ɶ( IgX)BcTX'`=ȿ;n7)wI? x_e|q< $.{d1;t3{n+\H^" K8 3/R%r_{DKuO,^# !)vIܯKf?}jZ?bmSIJAK8Ca:R%9 vt1؈vHb8:ǧ*09@_$hK8 H8L KB`GSp RGw-Ok})-AVA8,,x,..ӕVFlvօh`?= 09 X15gYS6,YTԜt<+RK h/Ŷ;0\SG;zXlCѷ+3^srObI [aN rS.5j]YKDkf](:vhnëb5$ʆkZYTbL-uUmJ;hVU%J{DZn5 ݪƌ*Q[[qPq898p2$ Lp"Ж H<1;cG^{JR^)3/b%ś%@b-ޔ2.sSVVS=ߵ~Z! G[F1XOz˹/cRG,p1e˙@QF\f>J518OPܰs+E;۝N0s+o< jΤl͹2c,wIv2[ ̔ ̒p-0gyAL&ku,/ޟ Rzj6 :3X"cyuD7x73PVFOEwv'*$rUp!(q#¿\^;\pYO,/;nu|5_>ep7KN FUbI'ۻy/iE; >k)+εE9h=o9VSxS_kk^ վ;.:w=6YgO;|v}o}д' C%_9LsWni Xk#S%M5S #>eط70v{V8]{=+':y >eoZ[a4C$nvnV=̚iWo.2ۧ5ujߺM|k.`EOL{$ [J+tکvݮmnt}Çސrv^ʘd-.לc|'YBc5vZge߯BůX)YaVۙVZ;I6l0Y{]^̇[[u%+\qVjD԰juMv򈦽ӷZ=|l;M$5'5V5Dcoh7Xn'F62F XZUHW&=$Z;PYPU#++'EhKPWh'Ά@T4B>8Aq#T>&3*R39KD4w o^.O6)zѢzW;KkE<4Wpiмک/8|bSnjQ6}q3NpM7$̦/~Ң_hobb]e*oj6T-׊*PX-A?ѝlIEݸhݢΤu]2uXրm[[ (|J=VkĺH=$drEi]y+ "UuO\O9okҺṼtGVG)tСu1}nU ^S0(J'x:X﹓1izAR?0 ~Lhq,:>eNr`(*C"V+hPXiS{St؈v<2WȋwBpㇷX%7cmo>e "?SsXߛS|Zi|^ YiW?~e?)~pӾjʻ9|\~h~Tvܯ Zqұ_ mEK>Qk,W=j} tlo>kyW7ϋ6Y}A٬MWT?lVݩ73bK] I3%9ͳ"K%#ْBKvWZ"%u? >$Rߦ9_IB=*u&Cyg9t0WJuqlpetױI :@%ɏppm<c?'1~v;3}Fu>YSy[7&ugu̠3e50dײ^g ~{u+3=ʛ@bןkט4^v֒⵳v}_+Ҍ@_ouY~֌@/ޫvTHތ\_|:_h{k'k|p@:>tY;d6~侹?m̱0{vުyGcW%3S2P0*٫!RO98Zz<{Q~_=t=7:ؚ+|&qADz%o>!oAbzw_q >0* fF'00{сI?,I˒ğ>O-&Mw Id|q=YHɒ> ķ5ɢ{IRhI/E"[>>oqv^:>v0 /R]g"5҇S%{SiTB0Ʒ J|2b_SV-څ?$|'$X\H"WAr8 iBK҄&M/`?it~?pzܧKn'OԊؚآT ҏl~d#wA ҏl~dy.#C\Gx z}'/A3Q ҏl~d# G6H?A ҏl~d# G6H?A ҏl~d# G6H?AUx|vuO-K+q(q"q6x N)2OLlbw'݇4AqFz&q.1} q#/&}%3WM/1=3i+R%ҵes/$ ^KC/2[Ay[)(t''ן8#^J0~ &ĽO_ uoۆ!$yLG,fBKI/'Fo ӷ&鷐}#H1#Mn.{2%]I/bK=obLj/&{?#.tZmIw"ݓB?#>X o"^['G78XL,y HWd L?H#}׈MHۏ*9I#xqZ|O0Eү$L?L4[ [ _IЏƟJt♌?KҷK|O0/-_H[Bg E=Oq >x:q)q!}!-${ʽx7?Jڢ۔,*Ks'2PŤ'.2iL!F'2uӿ&%fKzv ݕ~skɿVv濆{,_g?vU|1M+<}I>ҥ;xwxblb7b14"[O}urD<" w٦ѢěL8 '{Kg!^I|CZq3Y"&7Oc3\ _y4j?6:jΆq(-|)Pیiʏvu O Xg%K{7p42>^_u19nGck"Dq؛IG=SD^NJz ~4 t_r|3:ɖ18g.o#bT% e-MVki$:ڰ9a׍*en3M-~.RݝCGkk]'BՌg>\a謇ynkV!mqѳH$Y;kxO>ҩn ҺiivqW7=|iM!LqW?]Dfl5^/7#3:enTRsfuTdlBeSZNvܙ#Е_umX 47l-G4;NpT 9.6:q&k/==лq[+,h{Ӹl32LM1Pv6CBҁqdZ)VoݲxnqvҁtxC%7įM9?:MpXw&p5=)PW(ǠTRD=%S&Hy'.' v];O%r)v,6/e2][4v{lA7=~J}1fW=zRsϱ*⽮?UnTT?x,O`pS[qww_8D8W~E][[}oELq*'sH| ob+oM?*+9۞ejs۫,o<`8=>F5]7pF_̐ʐʐjBҸH{xY#fYmxWY*&GjlAv r۱ KL~ r2l3>%ӹ(:[땸^)^J$qaS{…7bPvoLaҡ̹g`ړ*EHjWTHNb>cM,)\ ۣ3U^Xlz|{ZOokJn´q- яg}[7 yԌ/M6 KBӂ^ۥov=^3?8?ۄsatdh~wlDɗadwnjsMvv](/jY^صdd! EJ80T {~J,/v=>?dFkSq =aqfjRXPb\i0פPq԰MP:&RCdzoUOV²cE18ov(n{:O=ى.7/sꖭ]CČj4KMZI? =;Svk7ҘJ#ы739o*+tda#T X;9uiӤH]1j?VS.n*Q-pZ7iR؄`,~>_G3u ч4=թɣ+?V}&3Sb>?FfrV[f5;Tyz.?7pڍwӪG]xhN5 Ǻt-qV\]GVشVޡ]ӡ7Z|[ur|`H؀8n؁d#>uCy瞬=HKOK5 /P FiUUR#hِCzTCi]բȄeFQ3g7ό%}F1ˆ \O;Af~#1ƛ|gڻC.?EOyO!:-}F<-Sr(Łcxq ި۬:ḿ+ 3&2Z$x~A<+oc&['x ފz.`s2+{F uG8E,G WKʽFS~U xzn2/ц!mp?TgT89oUKwڜ^][6XNTR8P*c %^TL)W֔HC)",*SW8WyߝL.ųw{TaS}Q?>" *$8~*~*8*; p21!`q7HddB}?ɼ1HM"+c9I&;d'J ZEy"6#5bo3pj 6yco3JPטی2<%xjt21)OX 5bo3%3odY\q>3_,PHrAv5YȘ / 4CZ#|**+t.!p>4V,bF `pႮ :{oLF~8K?U0X>Xtw(Ex)Oeõ* /O?â㏻Kh{GU}[iX`(~}lQ %4E TT33cB&qp+_%_Rp~Z/ 翙pꌘyzi, #&iiBek.T9M qF0$}ϪG7aSI EZ)_9vR˕ҧ .7ӧ )Q˄ a*/I)>S^96#g U gQ ҩB y9,pgQU5`vPc@.e`"TN(QnS l72 WNQJCIJ_v%J!/kSwˇ`oBmp+vfMr#owOͬ\ZaB!ߊ,1;^{%uR$A{S3s5Ftx;|.ćtY7C(flT)KP#V^Po/C2|El kӁU{7lq _7EFTs,eomaa[KWΜ&2T:%G݉uƻ˻ 8R_ux3c5Tz:kXa=0s-h͞H@q U(Vf0xDTtWmnqgw M,1cB]eO`P4Լ0>XM3je"o[ing_ 0AkFx~9P颽6i]md#wd*YVKj덺ʆR߳|D]UW^jZqvgʷC/u}C'YJׁ>뱘[#_US oTd#,ԕ-t* B:-~S[#_*5RRbg8 lg1:kzCPgї/ҕBJm㝨s[u=/^j}Λɺ*oݵu.֝JC]ٻ ]ѩvhv)ĐwϾ1[Y~:WžBEb\ϋ`xk|E4gHǃ/JOjWB/rGZ_UI)8Csl*JkRiy8 E_+Ԅyw򕗯"J4r{X}Qp8$ԀOmF.ZVBlE_8DbA3R5"j;0;I#)[acGM⊛5$FQJgʈ"ҽ 8|S;Oˈqm0iRM]*[U 쉻NqMny@ n))ޫ 9L^xCy)\O|1gƛs3zzj?+^B{E_9.=&9:ޕ^c8 z=wdk~2SbDgO_$g}0N] 7w^fjTvݺӫsV8ۜ(Z⦅&zrHS܌9B ;ɒTT`ʮr߃rJ-aSz~i=,)]Ol N';W;>o܋S+Vnq{Jꡒ~;c>@/[| '8ܼ Ucw+cҳB=YUe*nQ M02/8R읩_!pOD`r'F&'!(-r*}W1 TۆNX=̙yJ5륨֟:FMFR`-|/OTs8*{Sj/.5xQ}:uKmldep ::4Kx3v.k7:a`ֹQ.vםPia,RJdnT}׸ݢ`i;J,]e9{p]qH>u/f'uo**sLv~VE t_;\#KFy`B oVznX~*>ZS2z޳j&=ѼNʕq,hqxsi zL*#Kii>0S8t%ŀ\akZ|U\ۯ!5"#wB[k6?E֮TY~P4I%/cK#.6nT$~WPMC#̝2g ^m&Etl՜7E7j;=-ዐ ]0 \#|s\p`}#9T}s˅(0W5iV튂x3n"qc௧̓ڊ ^T]c+Y5I0'1>wL1DL?9NBwk-4#Q^Gͽ$'%NqkR)0\prqJ 3'V/qk'30"nt*nąբ!@r}I11SէYygp7Br+rP 2|JvRl gMmn;Gvw-3}U 4fkn83ŗ{+PWӘAV̍D-V<O#ymcTqa{&MZyO{'ͬu3Y0iUW^mN:5ڥboQ;!'bɱf3T֑J0{CmfkUzS o{a7fo\JS,deO)(Ţ  Y;ߧ؞_TsǨ\nG+9 =ɇT5dρ2"\ H7Ƀ7},^n!ON4;[~J:{A~!,̆=? eOc[z-+ð燝RtlEuT{m`ZͿUѹ1ū}Z}]1d>?soEK+/k%]r6O7]t5{gBgcL[Z%<~-nNiKV`>d5ˁA&fm{@ #2pLJP~^}%/\r~}ZߓQ)P%x~#v!TQw*LmڧPWOxVfL<i3Q8~T!U d™dFaANTgoC[ݛ[NEu]s^[N*5_a:щވ~ 67V 1gI=$6u⩆Ǵڻ][IIT^̲w TЋ*̸[Jx ROʝVrd"\6qp5^D>j%<0Z#qB+ XDbVa mib'!aT18kyK9n"@.g&xJ8.Ḡ%HhGTjqzUeb-2![ٯ]ɅG\aU*"3S-taue|6#.;zwAf]oDL.~3B5߄%ϓY)0[=ҳVzVfw|yF08BE A[`c  NTͤ l $vi5He=~Sb[iNBLzKFZL6= #3Ueƥfu\ho,T8Q!0iؑSIbb@v3c\,y:o\g*cu-uۨT}IL"s<%: " нȓ+/hBo0Ԭ:=Y$u\R̜ {IUbjqRyb{y+ Oex y  [#KC}o(nCh^q50IwA^!i o||YKDa- ƘƒpA9b^`53/p ksN:ǼB2]= P"pA_d< |aBM2#ÄGd~4>9|KaQ}TQzo(xҁT#4!huXaJpCUk%nt2#p3713p33:v5yXQ:eƬՔrņFyKY2A>VO$fJH<Ɍfef0f33pQazFjHfQ e.Wqޡ~(y,îۉl/]a+Ali8d=` f[D^"p{Lxn!q~KEGBjK %.pX#aL~_,ʼ_a^Gwow^1ǚ݋,8(xx?} u7c^W y0/0cL5kB+PI*R92xWS܇\xvQ qT,urؚy[<kY":j5f$a $l3c_ObE 8 XZf^0!L]dvLpm5uU}Ej^fGVjuUY7aYEEPn@h]McRTZ-RJ8!N)1̫I kc"j"Ara(*J]%jPzIK!V<^ӞԍEj%Q!uXNG94Y֢U54K0t2MI)yR:ZsvonDOg-Q{=|Yj5v;S+ӛNVs+o=llJ1K޴{4oXj3×ҧqfl5f;1֊=i{JQUuq_6iT{w/2"ɾ|gG@+ngo8h?/sQZ_+?0ucDi9wřQe ^]|Kϝc߹Ӟkho&^Sv8aN:eYot>;dv_s^Kׯ~O`&ʷOV"V} NU\\`ZrnC+t G}aZ;{Uc1:*9+ud&{ި*v1ZՉV9jmhwWl{iYU׬pףW%-q[gFo 6djE?ֲM6i=aì^psVYi߯hzFWԧߩroPb]Ӕ'PĞ4Y)>^".`ߝ}\~5aVՕrz mb]MdFUÊјQ6}SfUՑFtgTꊥ5;uYU1:6/jltsI]^0ޘ1u#gK#x+wvUoLZ$´5 Q)\Vj|Z)剆*(tb22Yb,,Sa]B"7cEцEѥunaڒiqfQUEUUK#UKcF.5jk**kf(P@#9EO//_Ҋ3-cUѵ5Uu)U#5 ]M:t1p6R P4,oXZqcĒ4W7J7._ZwiU%U } qXU/@ U.pIyEm_oݘƚ iZՐNGV4 :N]PW[`klm]IE3-ZD1,\hXu-.uґ'-]iU'/yO[UT/G :)zűDr\`UHUCuŢ*](`:SYCt\ gBYU k snшFL .4PU+(>lpl+ы/&S$FhFX\F}u5sTU,58LSdu n3nӆlh+/A*eĺʘueTW)z0AŘme֩WSZUU*UNݥ ukcHLO~U]hܦJK"US}:>-biY\uOѣQ1bhqܘU(LǎgFt\/L^b)q%zb/WƩ,'_H`QިA_DlT6I\ @2uʨ`ZLzx/ jO:Tc4=bHMG?Ru5׿U-ş$, ҘUڪ ebb=Zg;rEEMmB5c`t Pqڙdl*SDS@N gDIT 1/ju5,MbQm= ӇJU>%dLŢ384 \Kee56zU:Lߺ"0aֹҸ*BV9h%S;Z(:~ D\=\.MutCh'XjjXQj}!X7C43˪.ww\BShfgak1*R}R6v%cO2(`}aBc-|Kka rܻ3vZa5 5˖TF{ZA۫#z׃2QT^Um"ّ7zIբ3ZC/xPmuJ}eV5NfcuQmB딴K)zk1n=zHN/d=@Xo!~* yn%4FJRc Wu/}kʟج|ս-jV'3&hJKQ(|jNbL? o/k]X![ԭ,AA߼Q W5^Y[ofj\9])\v 3.85x܇cK8To4$^;mWɻ|H?WʩVQ5LY#ӳ 1=[ԐRDm#K6S?Yo _^j|ukTlQydI$ebu\]o0\p!kXPQX-H:T1t=(t2$_- [ yW7&qC}t},Cሁw>3B+6abGg~RB sW/N$+~.i.>';kΟrW_%2g&50"VvV'edmwa$OЯi+ "AcJ^N{TMCBK*U9Пx+8|O'avWsfB=VhgJ=]Pp5^b_PL}Rdu' L91;'7Gid:)NNSh;NM t(NO3V tVPb`hQ+CG]4xǐCc袽f&Ц1a\2UsgR.!|ܳ!ƄNHߗ@?@?@@'HHgpݷ!MWCz  ti}z]7׽5 C!Ƅ'HH/ҌC_ t9@M?G}/~8¹Az/~Oz]ž s wH?/~o_4.Wz򖗟@O%s}&H%Л mV|8Y~+wˊA'wЭwtH?!!}?tV% S釟" @ `zB||Q#Kʧ7clYyQ%cczv7s!7y\|[܎C|:ғ=>.m }ol9CbQcm'l-y={78q<{mwg{ξzz7G^pmW75Oءnڳ%r]v[[Jb5ߒni7Zm?61v$[||}m.[g|#gǽ[_a]xn0 o@|av33<.xan r`8ޔ1[@n8{boO2G|a*gόUs2*y~r/ ~K%?$=.b- ՈW?_욒D{' _G+ o٤QkE|VWwb* kDULc:[Ik[:w-r3~ [r.f x 80^cK|> DL''gˀOGd~u|I ш?|o>HS=E4S@sIH ʈL?tg32WS`!qX*Dz2qjș_Obҗ=(Q{D+(؎X|H"La|J俋ä#'b $|}BB&=/S:fo#}5齤%_fǤ"bBJl 6H_Jܑ&v16>3W&HB9vt+#=8?]E[I?F<1IH:!''eߒ>X!rV3BĻ"#7LL w!ad`|r/".fL_Kx q7nc;0eNĺGJ&Bė{?gW07Fo&xgď0;d v'g #2%_ kƯ&Lħ2ӿf?K,m?}ÉsQFyofcb0[0ؙ8883[ʫ ]E[IJ{HO||O15/ЩI'ݥF1I?x%~ψGmXb6RnamL?"1>Jz5q;wx&>/Q;?&߷'j+9ġm%}2qj[W(q-'Ŀ?s)>qDtҳ˙x nFi+I=)^.$=x:1BHKCS:H>wc[:%Ag%oGu9#^JW>w0V!~Aċ'fw|'2}q"1J\GBK?LmPg"o>"w0j7&Y#f⿙K]/tq]*b#q3.S "$% ^OO|#xdi5+w_$~JKy1jĻ/&&XHJ\LSwA|)E u1sdz]"~B,2_ b8gD&.#L|,!n'CyD`;`b l]ωܵd*~ޗ_7'I  ,w8p`N~EE9oAꚱ%;3#ւEN]͜=ky-O~:zyMBu6/'/w㋏|+M"I1yLc<0t*AID>>\m)^&ˋ8?u8{?MUɏyY)c[a^8YQH3B=S^ RLE^IIfg'!NўIHssO򟥅&¢d{|)%_r@}d;nm/U ݶwoU۷\B @6Y @}рH4$1–DuܕA@eA((oso7yϛ'S˩SNU[ EQr]`Ȉ3TTy)0T-̉ ~ GIؕcX׎wX׎z2Nqu ZNqoֵ͠kHg];nbEy'Ӻvăe,Cj6S&tvZ׎o"u1s& s7ayS&LBHG5\, ;ai+ 5}_WD`PGUZ |;,OãK?2c]Ǵ:#"n*FkbSUqp$?PC$x-Z.2Sf&S4Ӭρ= Ix?~;KzK=WX;j=luc?auLcH~N$] IW3RI}'1z_y%;þ$5n* Namdh;[tKs`c쫮=+7KN=μY p|JYPnm:#u4D9("ufc;V:JHm :~Έ0˫h!9]gJmnͧiB{\dG]*j(%p~p)bgn2ǑSsb d;#P;F($֦uu0h/|p>ϲRMt|I*nXh61fq4Fh4j[˜tv> dx߷(*_o00̕!@ׇ|=-hG?x_}E_g>Н{FY9W{;?deL?8a+ǂ~`r^,~ yCL1B%E .}Hv'u܇/x;w#=9b\7Fg~~즩?/vw{X%]u}rv )X 8YpBeUW $x}{!'8Zp| M !s ~ C*&8HpL"x >.ૂ_ t@sjw>Me^)M7} L]gkB$hL1+oz'FB< 0N?ALp^('o p4{ .\+] gg}  ,Gf` l ߠ N^0`)izf1ZlNsGl @މϜOzxi4dSm*;fiwc9gb7VSao$ o)-W4io5|7z8޲xryۧ}֞JcZЛO5޽= o8nڎeӟb?Z QvrA=6h8B~po}φm/xNk] 1O(Mky3PiZɵtKhM{VպW;Z!k/5h _+lԓ"jRMDc Ԧg' }Y_C"bF57LuĻgc̣[ _lYl Ѱ3½[P#'O-lnĽB;[ƺޜ. t5Mm?G')l'f܀OnsW"jawYU-Ş[M*}"?h)q+ے$bUooK༛YD76b!l6;`ֶT=$25&<hem^&%*w`gT{E7OFSԶzx)^8tg_f>\E 隿\R'ep*bSdVTVbjNآ31/XfMv)3iJ$SE-*[5nr7DZ|M"a m26KQ1ΝͺݿQZ"BVΰ'>5 {6>6 yLEmP.&ҟ;}O[O[y_;/퍭SN*fFvn˖3%vpQ[p0Miņ` 9.-cA=6,cԎ8KRZwj%ZRBQىCqm)%JcA8EcRLRmm_DoԴ{u˲jA:UwUNi\>oҖNKwAm]6ڂd WxcL̦W2=eT!F3_5'1<,3N}b(>%FUb kv] z%5 $i+x+VMh&'VGP-pNYFʍs_xq#!VIk?455ڣ ?yY5>T"MֻȏubG7&hҖѫ׸W+{m_T_)v 7&iL(4M4+-a%G×w0+ sS\1ϧA>;(;!Z竔^R~h]*)'nZ3+q7Rco୥<'@hMƩ|'ߟo2$̻"g%Y Huj58ߊoo-h~Oh13(*x|Z<>"a8 J̌ub|\\le"ZYSCxLՀ, (I-5؅C #65Ho/$dYjAsS]4 NyMk%^EkE. 22v(p7zK g, (ɃGo[w:|_v"A=i6DϷqnEiSVZTOG`k(xl{@+b)Y-3S{aW;Sr4A"d 2;DxYDYM:MɍY2%%{:^^?k:]/`s{/b]┸85hi2-]$U=ϻu[3 xJӄ_J)D/ OFɸ2W&P,S2/Eh; !6^jٍW65xA/A֗A~2_icG&مJڎ~7N[NZGYX2Akkw9qWo!Ԥ dGNt)V) H Ixj0ʔyq uؖYˈaL&֯+=}WښdO'lZ]P/`[DX^Jb"T֟h\YJA9;\Ko>>'am 7o7ʐ$)8P_zIZV-mb{b<ުCS|t%z;7Ó_u[Ǝ yu\[Mue[3~!aEq8DTZ,c\Y^$5ZT{Rv z76gRI}G}d`H|OqBdn09NZl}Ob0)^[LIտ=7lĐ`p oؗ){C7?hOKi̸O4KiE2J˫^t^?ѪWY}&ZۃꇺwQ4^) ׺|g_UoPKҽ/Z3!뛬`1hc'2Ti <hb%鷄_ , DI-.^p7_מ|-`PA"oO)_|½烁ySr )07[Zj^4j-i9{:cnflZ-X,"GKa-3>ش>Ḥn2fq2ӣ9E}: cJz^|b[%hʳ:~G I9 kSZ'l;|}zUI%;z[#'`-@ 'gֿڛpwlé_b)\o Gt"SDX@JG٭vv}53_!w!Tˀ3SO߇wF[f73>_aqp/ Bs_rapoȩ\JM [;Z}a ~>ʩ?zH=l=\]) *Fj"^'EOw__%F`J.e5 oqAVӯ/?=~TƞTFo: l/_rj6nw&AvC+0b"嵑OʺOJ,PwX0R@7՛w.o_PMmO7w,k~#w~18ٙohc|g8<ݤn?&0I&23`ݨ.u_eo4HpJCV=hahqWG ħչ~z^F+6_|9gl}t-T@9Br(}Ddtzg ڒ|(Ubq\톣lnrlt,/r{kWUT-s{άqTU\D Mw/bohdbV߸s\kSX!Q/08:1.\vG:&RZSV*a/1|G%̈膌8+ҝSp"@D5d#N#l<6E8,8bNګ;15R+7$IQD͟I*bS&F\Ty/byYb.U ͉LG`;:!447XsDF A-tX6~Z$x(|FUFZSÝӯ Qxѷiu"[2%pUd_2H*4S.J8s;jc*1ct&Sq(K25αvs%SHO ]BfG|SURt9F'9(zp\G' U՝s[(^&|NGa F~Zqȩ:ݧJ Ι!8֕JhdBΉ~d q+Oȅπ_jpItA"syt d'|+t>_\ۡG`h4B{IM` GJ⨖_a"_(>'`  '0=ڴO6݁)gN`MaLi<Hz2LE3hNa**Tt  7 !BjFۡ8f)| 3E4l?e06<ς1YI,dz;xc9KZy7C@j,7ox9c0_vE=*GL"RF%JR`L'Jk?a L;A.MH`$Μ 6"uTRܭR-KgllQR٢666-[RusM!6"Cqh&H ʐPXJ\2Uky`jB-=7As~q~q5҉eTܩ++)w0qJџf+}IG*7X}F'IR>JDPSTNAQIKqtFut Z{zd=S+4=ށ%JOYcŀsLN~$4'y?6ZnKW4VcOe7Ǫ2Bv_T+٪Z;E$V]Jߏ6-;J.' yICIeN-j (1~h i/s7jk8b 1ՙ;C'$3Ѭ|G@8k̍Vhtu@\\NGrr{BԱ<B+U;* ;w7hoo/GSu7{[@NqOjSѾewunTiYR*3E!-ŕdZF i_pT>G!_I xQ$GAiAK^fY*iҾQq68eR !D-O(;~ ѫIF ]GevR2AunaB.NA}P2#eBB@( V3G* >E1#ͭ1#K$^oT=;II zx5A vc O*ѭʶۍpԥEb>y<'sMŰ*·:}ZTt8uEH ~X⨞jBT{}ᥘoS̕VZiG=ӇA 6It"Nr#L~FۭorJQej[:F>o>*FKhA2WwzbH< @,a /Lq~륔S/>]ٙ\6lQ  ̘g OvQaNL˱uI9$Z4IVeT%T_ µ>{%II8)@?\#mOբ-Nxg".CspԽ>Ŵy $[p3TF][キw}2"ig]ǍG6Xu6ZM*_(J(juݨ^q-{('61PfV@Ir8FˍѪeˠWc,eBmRXLר_l㬷+C0CTz"1 {A=j6[?NJ.ǸG gFvP4>+Sן׷aO_ {#թv-khZ@|H#z,^5h#>Z2⋚4<-BOz#yy&&+"re$Shshf3*hV܄`N }y,bx=܉!y S)Ks#DWb~pnЙn\R@i#?O➬Tn(_Bd; v: Χ@g:Y݅lxk-X 9B/`j*m L}Өh\OPvP pgЛA+t o^SEw~"OKf0*Lf>İ,9MW[6Xˌ$~IRvRw@PTp.U!uƗ@2wd!%总D6|?[pC^'naKA%6VKPE;t6 EXV5u~ЁIo}'23>>^KDcOyઇɜX?Q3<_h(ۘD@$L"@Fj́)A4+RGe J_Ӗ:nSQ?(K$&[}r\f9đ)7A}WF6 'vάw̹&:u&2(ip+WYl&<~H!Sw398bȶSVk,8*9VD;O5v+$ W)giw'Dobh}$ s^"Ōzq|b[$>MvDleKh9$dSjln&5x 9 3Ou8!)pl>|dΜ w#+1n\~PN( ȥ$ 1. ~tII tw5—2v=pƛ+ӛ:䣮!ƣpOs4ket(-hV.e`0*\fdېm{g|W~AP>YNq<֙ŷ\uܸ[խVgeq@12MM/F̏"6]ʶmvXO]E(RVj UNr[SwIK's*?Oˈ2t̋)7E L_I!"_ mQvt,J-wt~PFMo=,L@*ca 3YUWfhLHtޗ/32bڥ 3Y (ymPXEɽ5-GXM iXc}RbIN 39 \TԵ*J, Kg%NS̅oR< x'6&+(g`6RCf##^qco|`P?DBD]m_͠Gm?Ei躎HJ wt5(BB)l;^sJ-/%cSN[9J)do=5ĘM97t,WEXXQZ".~w]Cq{U1?.%>-Ȼz~^@z]|..~߰0?oK{u.n.Z)`=}89?[&,y]Ǔ<`̩$β4)Nš% 3H\yc!؟|}7ukx9FY?C:ެ pvZt6|? ]VbEL%č6f!.a!W@HdcDP`d5C,У;.V LP)t.MpՇ77m55 U]Q].|#Zq+?MŔ5.Iz/u%E<_W'jV&Sk0<29J] kT΢o\=[An1Ȧ ۥ@z_.SDYW>#bDC5f׺$I+:(WAԌAArQuP ǐ`J-V FsN0 b}n*#r?HŃ$5HFm a>ٞO u,Bk+l6 v٫]&hLX^c|`w"=HSI0 ;_#I1:KEݖ% um&7`bAZHf"51`f[@f g^", 9oF%>n%=)9*b][E[E}Tg%-1" bvO Vvز5ld \>'[`{қ|G;n`vtLvYWK|E8!|'cx\O;˸88qvw [p,?p#qJcS8O$,bH\^)p køp zv6I"&CK2#8N3#IvO&'v3;;n0&n'.US0vF^#KETT+&؉QU\N?9 1*L+W{&< 8@RIH#:RV88qvmKb'bdGKMeAI }'B)p#Ik[ OD%}HvcW72VH,|J Μs3`!s.+f$pT;p>JX\v7p7{H]dI=5j*9Ӭ(9o 7XL gom9@sYg&i*癀Hj@ Sa%TzU`g[b)|- Yv@%TΒ+E žWމK|3m7:!Wa~:ޡ7n6(EGYn[Vwl] n8n`v<ǎsEwDΐ؝ _]wviwU0[{\'8;<$񁇅aٕV>yVpu$V0Ŭvg t ̐@fJ|`OWf K۪yQjDu [j0[\+0Th̓́D(@8D \RFy: a"DKb8FsbشUx<7,_P[9${Őn'{nUoE>mkx^@m °v639~h)VL{͂#NJqv nAo>l0FZ+DoJqI|BX,;$kSN$:ch;8.6vB*gz"5D^\3w/`/ʾ찵-^'9[5YfC~.+$qGͷhnWDA aC:)3p$:n7>/އ |RxwHwI}/Ḥ+\n&N 6+Fd"NjtJ#?ao/;[ "G8N<d+gIjz<ʾ"^8RvB $_l=~S#lNO{fn7p $>D%>F/Fe{&u\/qMx%%>1lL,D~' W`bmRB/? nnW> vE<%Ȅc{:lO-wba `Ɂ᝙0.nYƴμ؞5vK8#3$.pJ񡂭(+|$ +` ;x;3q8x0-#80#`#M]^nNNO #.a|FF-AVjZ6۔:gޅaE(+<{Mxnk(xO,VEؠRo՞lrg UΙܓR2\i+T3Dg3]-fWԄouNMxtjvO?ueRy#buljCd$Hq'q@〽؝M[pdu`ovnn'n!!}v*\ &{`r8ξ))08="b!Xc9.T ~)9_2B =MQ!Q-0;@M`\wy"T~Ֆvßt!93KWݥ.O"|Jw [-%Ct ]9gcDŽ"/#wY1l3%r ha pTN<&EOʀOI4`wOvn;MtIWUa|M* #i!=:<)* f_:"&݋Ыg!Q;!;)mԓ~P+Jg#KdX"iAՆHGD7_`,M`;x& %.0.`"NuX' pd b6a.w#0>e1c0>-a|6D=ҭ*Ww켋`;9f?l$DQ _ "R>)psGOZo%_t<݉d 8&0NEo3Qտ;JWp ;2 &H f9-D8'BIB9^RX+R}Rvo]l*SF777Cd!T<&xoK"+Rg\=X86]pv p ct w0~?3*#F1#H(V*E# C W)1L`y;蝸(x_.k>b#2R:^%TFccc67lh4y̨?B 7a^9ґmt1*ɻ& wd.hаm T^i+FGGe {%P~S]U,ox1y+]#KQܾsԳf#/aQUq4l4SD W`֯0r LV)IW≮aל2yd?hԛ9Ƭc9&ߩ 7_L0i>dRqz>9 Vդ $ff5{{Ȋ#WoqM,L2nI^Z9y_̇'ts TϜ{򋇏G3U3~)xc%ƷZqM=d_xȈ4Gl3dFטs|F.퀱sͱ2)^eQ{ᢆVt񄃊>zooF.yxq$*@#1D=ƅnjj Νkt'. w[w4Zc\ (.)s9c7+L%v7lZ7 ͆m ]8_S'/$cDOz;˖5sWD}xrrt+ל`Z2z׼srcmyCm7˷޻6\cN2GSDWI6S1^8f6qXq k4J/-ZRꥱt1G46\VVTh5R*/A;_R' ̮]-JK -[-Ӧy{k˪{b '8nъҲ%kYS3ʖheg@gN1~Jix8mni̩㴕 4`|J/ZTWJibGCmAիR"{g-Tڄ3jP+)+d\Z`\yK kLUTi^JjKWWWQ ?6U)P^oBky˵ڲ:_W[䭮ЖT,]*V//,HU8jw*,/[zPV d$uWPTj/)E (Ň3jiuT t M9Ԥl[* C ' VWd͖*p4JؿzyYeEՕü*x߀\a钺R5kEsVPٌ) K[]*r QVu-*"V$DEUiWMGSW-:hJvLYTV.ZVUC;JIؔ%>b4{Q_|X\TO̫~8TM[QMj>(R%eu~UcҨm)JX/1&VIyq꾵 ~'k%w^r58Ÿ4{KSm uMV75^\رeg_aAvh_;Yph'}I௴]etW?kCtKԠz$ڪqrP ெS7Z5^G53]o^I5;%q _Ao)GGg8ywhP9݋RjZ'\t cvklʈm矑6GrpɿIF6^u ^aɯ ^ʋR; FU[&RlE86Mȏ>9eko=)U ;ƜYAI8<[Lkφ zY)e/Rp8oyU;kd1!J:]_=}v4]Z۳h7G+~+ߊvlj;S& \7kڎ9&VpF;06%kNyCԸyg/?_ԭZN3UB+,\e9^LsSȳb &4=~萜eeҚťr_%93%eѬni&E]ɵPXz".]T&|BZT B%&&˗3[CӸ~uӔ."/gkwуYh)jx YoQWx oν  3!c_ xC!|tH-զZZbe3_ Żоz}ʕzrY'i>d l};.$_/(4! u mkⷶ~;C-goѾ@OXF^^xf5;#!oւ[H>22%$pH}Ͱ&M;N<-἖I~qvKߩ}f3s&B!tDmBBGб!t\B'I!8DhDxG`z#=:$}a=9B[k~Zt#6;k0?@?@@#nBxBcoX'X |#~}Xh7Cݭ?c_1kЇO!tg`02z_S<.?y)OK'O;tZa3Jg[ye%^mn y]d{*l Bޘ~,B^zo%~.P0rݍ!$]9^'!;W"SNoa?3q$KOo'%iN,sr%N 5US^̢um8H޵>4nEpQ~9!^d<i=dd_6q`+F1QL/Q`߲]~4|/?Gb._ Z{49#&Qir>9 3Ӏ4TFsh A}aZz9ߏ9ߜòۂ. RΞT8?a/*y#I>)%%v&87%-KXtKWӎIDӔD.\$W{4p='/Gi)3H!r-I|JbIbnNb$7cNN/{&KM3EVr_#;$x?K#Rؿ(b(/"+Q /Cx^ؙ].8<x3wnө?t^х߻+kLW+]Eݮ"_W}ITIel\8|nb?I<Ϥ%}wD؁JAwxnN _+ӘO48 V,MN6I7ww7< KI7HrhE:ǻ"ݗvHՃw:p_zp; ~nL:YwC`:0#|Hɂ \(LRpzM7 %ӂ|Wo * G N/X!X/(xvG|E}t8 f ,%DNp`w >!& %X,8OB^pM+' "`โ JFw>#_? c'xr'x.<%.!+8JXp` F >"+ ~.0Y0C0Op+CQ_@ q 0^p`)ǂ%|󄮔xknZ%KJυJQQӑſy%h $4 ]*BWK*,nwB(%OWxOtdzGg>Ä.zě.X+/7 n> ?O &%0-8Or- Hc o:s&J%G =V)B/tЗ "oz [W>(߄>,QMrDO#A'_2/)_8NLF =NpB'W!X% J~PQ/txƆtт='s1BKxЗJU ,xI[}{GQsvgwg7BBIH( "h HP E\;V^]RrU,p- ņX|$ϛ'=)ϩsfy#|}1g˅=ebqOa 9U,_a|E7?c1Ҍ01#c!cQg7gq_J*N?`|=YK֌OiIsܙ?,XXx+=2>鷲w2+cr+¶a\x%@?vyg+j7Y~VT#3|pV,alMrƹ9B/fkX4=2~~pOɠrzXXrx9jƿpM,?z^ɡv~ZvbXښLay:֤/cq3?7X筩38xƹ쿈%r+86Ƈox3.fQw0ehG؝q uw1'>3^θq'26@؛?$j=%}.Na\x+1bYcbxY^If1C'ϸq/}+cxeʸ1r1Ĩ\nuoe]e['u+ߣPowۣGnE={R1V.B'LџP;*,\P.1ƎO8qb51݃b:6^S!5;Z;(֯FQȮUgU.]p୚TۙHՎϙ| 37 Hn]L1bnjv}Rf˭dHWB*(nW_^gkz74­x,w)"i\Eo7J=.VЪ}%-s߷v&;ڪbnix}~_'3g*9YC`%9KŔidkZyU/ *5OFZ}LCߊl '.Ni8' mhً[;İßK[dT ު>/ [\<־fϡRs'dÑuaP:]-_I;WxjWȒȊ#G50Ğ2zԖw88ʹҿϡi5ㆮGAM}W?qBgh? wE[ye,ck"69xU߼Zk:jm;6{*f6Y 4mKtٚjDsm~ srZ?ptV:i/Grgx?!i S~rt?|,T)p>Q8;H.5 ]ީ/ 11V.']ٚYśZ{}uP PhZGD.u[[y|}x)ʯ1W3o͵ysuaK!p*zjntr8t*Ϯ=3VO#'ND{""sWٵpFeSe/R̐b,pFh kTiq3(EKpXl^o4,oUxns~؍Вo_nT3w'ݞOEwW@ڶ"~6g^SU;.ّKgNʲ9_X}9H&_ߩKGk+L}dYSU[WyGQ.)\)޺b+,U7kW8>KhfwFÞp? i5qF|B+Rs}iLl䅽\bX6ë~j,O prkvi;Ůw&<h)vKlt*T[mSoYavZ*R;J'&*ռ'%s!5]*3SB^եEהܒgk_O[f)8UӥZEށΦKROqu:ٶץ:NΝ(DgNF[@\\=|:PiѲy qBNC:l.`*/r{.? IZC=f^К[+&G[t)[y:gZO7x sy}Ќ'L_O!^!ӱAڷ 0'0PBʓ̅w8QNv#'݇CPv \>u1]A0-CpT Smb]N >z 1=zZ&]adt _ond~RIMJ92@Gj+UU+)øZoPR9 ;6rho\mQRg|yXI %jMMlˀAl`I :&iqJ=d|J5VF; ,G} VJ>ϔmJ!d_>OQ#=Guc$jYY/$YqU_IK$> 30= §*=,f#XXlL,vtզaD!HEKXPezaz'&BN A۠9]W0.b<4<DBWfJc"Y~bSOA&NUKˠ<;!.Wi#Ѳ7^ފf0pF6j:vj؃H! z |1FӷE [dB s<$IO*:K r9, 1PP"IЙDR1#$e"ˌU4Xt8u%"JoUct7Q;M.N8m.b]W.1 U\4Ec yYIX H7f!݄B9`pIq&R>2 U<&i$#Ɇ‚ uV['s`=-+jr>Qw{edi/fx+±E z#n[3L#db uyRWN\3%zTR_9T 35m݂ gk1ǷUPׁg)v v1 eyW>vPg/G ̹GwԿGV[GR̒sbWxl~<@)y~ i<68(i7anŪhmLI[: Lv |^upR⎛=j'7j-I 2kb%HoZ1:_<[0_dًhTyP5ff+RT'Rs?P`|xX 551| PMR!/,S²7"^}c3u6:cqj2)~M^ Ҍ:yuTe"mH0B}_IuKC*<J<,CQM eVyW<_X_޺+کF>^As/NM.RVb NAwůRa:MYr:"Mߑ??]MY& V\ʹTCEOe)߰^ 9K e-:O=]k@S~5)۝@MViQSeLuD60"sJ;2)Hd  9WKo3T6i8h]E.iQ[˰<5 SD 9osv'G2uyS&ck,c!k_B=$t-ԲpKh{,Sc)Q'RD;>CKm;@ DGv',0édZb# uZ(PIByGCZP`;g`w3&!!`/-p5h') TB1RñQڡ~wz30ᅺ¶5|[%+a̭I𙣔V፸+*nGAcӌ  vj(%F(u=X(bM4cD1Pj;MTBj_,Z q3xS֛h\<&ɵB-ߊ=~I RɎ6s6x5Փ]8ZMUxEM;Ht'x`¼Bʩ  J|8F W2UL# ´](`,͢tV`Z!H&ܤoR&"Y`&Nܱwz' -HeV@&%$ XHH SцɄ m5$ s<K4--CHhO%lt&x)RBjWqj#rLYY[#!#gh3,|V=OyQ\UdEִq!K U-츐%$f T[_*On̪  f`/m٣ho C\>*eG;p|b}Z!drCHW{8ʐǍL ^S}佦/4!"{LnG^=^ǽʻBy5:Ub"%w w*p\p\ 9p9+^Wq@,H:qoU%B5 My`ArVqK(_,!__Q9G KH\B +ve,^HBcƴQLcCJrW; ܩj7W']( r(u ̔">YUؒgyAͣKm\ke`3P9Kt خ T7 ̥GL,&504Iq KVj&ÒX*6Y73N3&bFlnA6<մP*Dj:eXXZNkuȽK~PjNm܅;k6I=>N$+hVx5v^X9jZ5Jylu^j{M{Mbfɂ5k"4r; L'wAnMnXz5#e%ԌS*LV řGs!\88.4ܩ wpU!ZW\{i* JY32XCҍBJX⌈5G8w\*_Ǹgv@E9L{K0>rmc0OP@PA #1+ k"aR%ԄW*1&8 _ǹZݺڣ"q 8ba'Ӓ*R*,)̢)GJn\ǹ;1?𚇽yq&<sq T3-YMwmZEEysO+>C y-rz(ZS6ܼYӦ)գi]̯\e<gSjPEeThkL0 ekx;w1aq0EtO~'&x3b,cM1VѴʻxl^|3~O4U-1gu.aty=j8wD/=dAbUƌLpHX9m ɧg|ۻTa2Eg11vڙgͨU1O,:cVgu9qK[Ԭ&fA[s)s/2{U; Sb0[J2RϓmPnq\wu:JI =N9ϼRἩI}'ϛ1i(6ogjai9r7Ա Nt .Zdy4*{JGI(Jå\QbOs[ .NRyǎ327._hǹMjk}u&\3fYj1њg/9X*=3D7KD̮ZN_(ǟ [r JƝxM6z;EБc2S90,XP!KZѬE:uĖN25;F>X'_V,b3L^>"𼩳L C5N\NWgLe]øk<*pIK4NY.Kt5T.v"؞,>OJj\it}XjQmԹ3)W6%En^8h1H40`go{˺>sJ69-rg9pK̕ dF:p͆-g)] .Sd&ubKJ+f]TYp2<(,ٺڔJgF\)Wֳ>5V/V,op qJb 4;!n3%r7vi[jگ\@aT,AocE齱UXzpzi&AXݸqn|8oDqߖ'Kq^y'nK7hmqvKǘPQ>̏&Jl@ߩzMq:3yLkֹ*smn=Hۻr0ĥ Y7.aծx=*Ww ͞B}%wKߋm]x5PG\.Mln4f^NҴ->kyq/_sa5Bl 1oW=VMk hjM|y/kDtGc6:6T?iG7c%cKv<6qn4UB*AMd>Lɸ3mrFs)c̵賎69Od#m2L<~MFXwjMddm2WγXƛg߅0)6<%6ۃm2A. O† pa.o<.6<߂[  5 Ng4XœN6X L͆ \LAZ })^Ay3elJs•|!4p9ؒKF0dyı A WWRӮP; pÁ } d([ʓiVZzTSOR/ npm^j;]/g++.A"P~ OSrBω_ԟG}lۡdρEf2&!v,ֺ|b8Gd˹Ec0чkZo+OeTgXנڠ abRsf[|@| ~'Oڽ(kˀ%zʋ(nS9S9op=%؆у1!ds{9Xqf0.db:ƛf|o/3θ/dĮFu.cc{d8Bkb+61b1vglX؏q1 0 ㋌2;FX3sMSG2Xx!㥌3nf|q;eQٌ=28q㣌[2~x#LeXĸ"Zf|7?b<3#65s 3x6\U38 o2~xS&]32NaϸR71>1؄Z1g8q-㕌3>¸uaI5u.MO9p0~xvc>1C*D]{)_c,` 1GVJcl[ޛ~,,O`y6<_rd:og!8qWx{9cƃOǘuMJ"XoؓT'0X|)݌;DÌ 8q&rU3U,?z F9Z0Rc /Y9R0a,gy|*Op 2npqg(c+8 +W.?ddƣ}aA՛q8b͌?`1R2aF_aqdӭ;qd}wȦ^{o9Wmowp:[V=6yYdW C'^%jZ{Nz+ nZ~]SYůw-iSakkG|)GUa>|& |#[wK IŠ|̃\ȧuurOUu"@S]ҿW{0̓E竕B/$Վ5WA$zT P١$c!>ۇNBZ?CX 0&?"J,  :X4 BEC'J*BZ2P `x EiɺzxUBS*WVCQWqKCXb>BX XMܮ!Ű aC!Ri |6h,DZD Cvj=`Q@@u_hP$=Ռk͑3寈dC]_H;/ xa @׈lR8fWdڤ'Ty^VB-S_P`PTraJ&F (j<ԩFwOݩ )a|'8,#7UꨯiXmk%fi8d_i`&@k?LPgXk|:W_g- oc[鎺jXm0"g!ђE@_&\ Y3ϻ\Ϧxw A !A IH{3KFпӲ?Oqϧ:FMmFqK { 30b]H4`; Ld3L!wJn-جPbv$w؉0:plUu:g75UQ|6KodEףPV>a#aZgm&?TKLgL-tk%ldb(e%)ޒB i}uJc0nȴ̜WeST0sXѣ2 3-N-b6Kqg埒SosT=mSK亾U5.xb)Ny:K񶝩ݲxكLL%G>yGsA֗u"ƾ;׳Lpn0v SJG:xdi}7apqf(C1[ɨ;ѱ-i.4 MNfV4юE7lx`ul lbC 5pAقr[c=~#S**~2߲c8۶[ <F.!JHfX?jkrV?6T4{4*-~u!9VkvQw=[lgٲ'l-8?+V_ m<@XeE:V &5REs턭0mD=uQ~fk[?}m3M,Rki^4d(eĠmp'W㭏;ZUkp!^3];T㼾)5?<sd-5zcY[7fF._@yZWdaF4A//pSu#jlڕ%Gv\ow8O8W3;(7"m&UzW Z#"\x% HpQ6Iv+|$ 0}kKK$  n{:Ipz}叡 .ttCz}D;_-4H .+} a|Hp{EZE HE\>',\X9,܎i~ jH BhHpqA,\1-3N h?EGgX%+sUp <,[g;k b<"+m]BzdswscrAHK&8*Ml=t %,˖?%EL_ *4ep4bMÜ3f lpڪaJQD j>G3ysytX Nn\pUy'DEA]WmVTdl\ܹXR= &3xVZUu~(Щ&ݮHOe fo/=OH9 fYX\Ǿzݝ+B,:xv3BHRͺ^wOQ8RШ',q~Xe[evl7S7[ wԱJ7жXb?[% #\aMTm磦y 4t̫n08aUPnL1!*t>\}U'+|:dtuDAһ#[e&0/EO i*oqU-*؊c͖YHJTmSہKRaivƯv^2d~c7rp!23Xe\sT\؈׶3iU^%PkW3^8#\\0\+|`=w8>]s|1WZ sX6\났nj{߬o*:NmktS1ئ[p7U@fAT7 UR)=ؓ~d> GLNŪ9 `)qN~K|wΊEb*iN6%wN000۲~ Ώ\I\+(^Խ(}\#dN6B\ ]GSK%n1 MUͬćJ<=>*xF(#HpqC E!?]z~ǜl(VQmrmZ ?WR{$KZm-I܂1` nZH_d%9G% ,. 1U6[!w#w؎ܩ@lHGoF|p:GAF,HX(>_MT뭨q:FD;HQQb>`qF⌦|Uؒ|t)?sJۥWLi8_*Gv,t үrtQZ֭))!("yAE&QA封Y;RDfc1eyDZ 1eyLY̏ՈmΪrL7[9˜Pq~6멪:(hQk&μGC`*czC~-U'-S{mybfmmWUW(&W9V}{zYƿ߫U,ˣޤo gŕo{:l.-U޲5F7F9k+^O}›ջN}xk d}c/:aM'_]6u̟Z#xgLXPL2)VO1|KʬK$0y 1s'nElňcT:fki(/Kv= ָ*Tsz"b_z^c~:omWN oz~הvf:mh+X`/.}_n&tK_M_MFPSrѥoPiur`9 WN ۄ>*_N f_{/l9&^wգXc#VMhQM@<_7:'ҴmB9n}?y>?k#.R]V~C n~eN}nSaًY6]mdOgZy/r_a|@||6u%p/]27.9%7+%.yKb{^@~n~Ŷv;q sW~WW5{УilPQKVe.Kiz(uzr" |ʧnN'&/X`}gs%[{@ ;[ . Av'8APg%,WV1n}i`[YnsNӎy|0ޮ^;Kv͕0@|x ؑ%NZ,]%@9a jNNS9S9rp<7"6CI,g<QΛoQ9^dognqIef;09sw+1`^wMw12f2v`<(4+T,W1^ u~r67x0 A3Xnr;aϸfM2>OX!IIf9< ƹlY~q㏌hΨ;dޓq0hƳ9޹,|>˗|쿙y#FTRg|IW@a;c TL럱%cgaכ,r)g:b3'5㩌g3.L.dy%cU"廞od|e{pǑx YS/dYƗ?a<"Bx2871gQ4.3&[8SfR:r^hڡRyibܰrۑl"GxǪvD'3~^}r?qhLfwͮW+\9tv[߹8vylYS˨IVqsT !tf{ew VU2-eB`yՖUYkRc5(@+qcd[WɢFyx}YAi/<d@,a,<2j8uU<+b7kfZ{ADSp #%Q0#>ZdӕO:<C }VPnhՉmaer#)s*^6u5ڎȩG2,8'vH>@_#<R헪l>^8*A]5U][XׄuZWh<_9h^$~>qȫQR7,w];% j2h}N T!Êy8Xᥱu܃mrk;`^ sTTȨ86&WޠX+ǁ%+5+޺bfCCf| [(>/-l]ъXo#sz0D^YՇ=E. whm>\a:5;f^Iuv=hykUP*8BOG:gbzazKtJI_OM13`)>٥8i΁UcF֪9b,`hex,X{jG~eor__Xl^Q WN%e}eߧ}|tڵ/DyT>;+R/EߟeCeSfnh(C5<y}),ˆ}?-]Wvd5lxE E˜;]SoQVSVCA͞z+Gʶ?nW[spASxC9d@ JP񺣿|{=.oΔO9-oy.3]˝r-&g,Ϋ,:yZ~A¢=z:Ѻ̝ :liyFəF;n;mf9onټ _r.Osb5Arҽjy(%Xn߹Sa|NOߊۇ~B~;p M~IJ, Cs9??dA =1~~ʙ(~~ ̝"UiUYBmo3,:\&)5C eԦ4oi<LJ,N aÄJCOʷLKh`>;܋QhAoу#7GeNSju{NӱLU:DE|k;D%Ws|!*/FE/ :K$)5s#!BQ:N1pFaa4x>SldAz㒡JY% :: ddЁ8d@ĩpSܛOTony M^Tf%ptXQtP|iͰR8;$*R.2T9c{R3eD?JU:2H(LխčH:p18БSעȷKfdBY %b" CIwEsfI“R~V$'$J*m$>)etM\ _imiĽVM `s-+>`OK{ *91]c~5O s62O'ۋjz *q&PDoVٲ$&MR &cmR{C+y&D({B/>o]VWmϓ1?::ζXMVb@98ꩉf[5d>llo/d'K қAmB/M>joGH8PSesPRϡ~Tz+#> h:#yqĜ`Tghdb&C RF  Cb5*1M`FXSP,f]Tew􏺮2ٿd-b1t(d2n)mu7Q:=>YUN(|2m@JJ NU2Mnoc+N3C YUBjJ2)wPU%ڎ )>ooQdlCX!)TbOp赉z;Ô8AvjP WuNJi8 Ҥ칟w'($nS: %uӀp PO]Q)MM5hWx%DUcgLM<1 -H9U@PonrI\d%xRhO⪘22ϧY9pbۦSv8#I: z-rܖ\G$FKT`g1HTN * F!IYKe@i^b/i&'bLwFeo "p#H!𱕾BW+\IJ*G&COAl5P౬ ^ՏLN_ ^](c0[ڣx`k뵦rn/yxAH4joMӼ UkK!5@m2#q"PR)Ut9ulĖR!nb/QB^AE˶p$aM(MrD! "(hu=fH Q\Gq\pqaFtܷA\Gwq շηVwn\~{y[SV}T\TR+8zM]'$iZ9KV29~߾|$[J5\S-q$jepNcI3u>}}FEՂҴߗZi/cq# tuu뫺_VU9Mcr]bWC (@fV㫤{"G&CG1zDVjꐨލ}-6XXI`L¸/3b0@d<|z&֕L( |*)%FV#KPxUl:%TU~8v`Y~ ޛbTVâa]i>[5FtS $?mq;'U:Mh} Vx ],KjP|_`/pM+rať(7iqqn^տzz R@·uprX_{ߤl'=xGAΐ$p x{$wH8 t O IßVhªcH7 ^'ԪjMb`|jPx{3TrNrN~TlM66 &L#Z I8 <_p]S`?~QXWD=T!jWrc1k2JbX._iDhp# >)bSd~ |y^H,!F>`W=Kߦ& `+ ;b G؅y]#~+[+Ye,KM)8Y?K p{fE +Kϓp kx{|zR\4J$nGW D}وkR}"=*،\_Q>9r %J8('gp "A.G=f lfUwӸX:ݳzϱ~-$Y>INwJ8 |Vp#\E!*bxL;{[#ɽ/9up*`n *KbwVsZEwXZP3ݸ8'I6 ,Β a1U֛q Eٌ9SNey5Nu;u 0,\5njY9~WBP6TtpϠ6[.w5T *kȐ>H!}>Mz_Ȇ8(. 84.B_ _Il;__9\`ؙ̔D5xW_?x{E8e*g cEi,WFl5UTS%kFS mnz&cSZnoJLaT^h`pj +%l@ ?!  -%J'8a8u6NĖUH؄qe\LLn:E:_R279N^Re8oԲmN9i°c+V]PQ*uQotY 5AOEE50SWYUEHU}9(f\L-d-AA-VV+hҕf9IU~\&E̞#sz4l`Պճݪ'ʹM^Q(֓g媅O*䧚eSWOxm&X|+tzZYn-\'SlJ]<_x[dӛ+7%8f%CS.+qR wg_+ݩ_::?+s9Zfghƿ2΂VZ˟l鿄>/Kv-]wY; wƉra_aߝ}p ?ȯh|͉q̨YqW}qk| \N,?7 !U3vc@;6(haX9Z7obh\va LXMsn7km?߫jwhș0'kPBX?O?9Y2u޺T_?^,gpqWf\ 1Wo<.MS_M/Ayku_jl!+9ƢTz]1WX(.UgX#K(E^cSrh.WCB,Ҙ.!g\&kz5kdS ګ%~B?Ey-dop`7Oj = xq)/a?XOS'xqEzTclܷ|{ܙ<*~ջE 5^a>}| u G|yY D 1a{螺U{Rwa)w, A2+|uxDҏHz⇓Y=gz_xrr7P{>O."**Ep4Ջ]kux'K#]L?"]}<_ T//tx=ѷ}w:/A7㢿[\UqV\_1.e7o;&. yȃ"v<)`ȃ"v<)`ȃ"v)`ȃ"n# >MM|);}AĹS%^CJN| qkN}oJ`_Pl2 W$"N-4| k[A|)b2"؆؍؏XN@E\B1>ݟH1#j>̇>[3{L &N& FӼWD;y-e;Qa㾦<8Օē&滒雉O1UOX.b>E#(E<Ƒ>gW7'!6'/uW‸-\N}>x2O#`%G䣎sLl#^|b|'0*GKv?B 32ߤ?%~tW;F-=)!#ov+2jʧS^OD=w_!~I])w'" N&%Jc )_NjʷP ψ81GϠ<8<˘]Ŀ1I+3}叩?+M@< ?L/%n"E|$W{ -`V;I|i%'O`@52x N RsJ !c$,#.*CM[~Ji⿈?cfAh&LY_Fa 7'~F6'!'DDR:Y,=nv^UX:[5Lx:@njXWkklhg?P|U{Ajxeެ!e?(1~LqcꇣҨv뇧'goĬ_oߝT}y}Y%nwQU#/_Tҷ~.[dxIxPդΆuU=E'CcIS E#z=_ȗ XS2~*C5659ux+7aH޽_;.fGqkFݸ>ګݾ,Qgԅx/Y}uԔse%0$"h^z^z^X0r'VcU? M\=ifWZ 37ܘ1P>o/ͳ/ |_#o_ǺY Tx:<{U|<_~,ҺG?5U[zxɠg=x˜'G,*)f2d%NyA/>'+>A|PfRSJQXϻW#?9`C`d?[UFVgf/bCSG GGWwqus(>f%}a6G=|>*ئb/j?ُ;QUx_%w'ͬOM=l,1q_o_C=}WD5BxѪU\C'HlP,I (nQibDgTpyJIؚSD{hN.D0e l ]`oA$BDoieoךG$VBUG&@l3IܠھX[ aM) GzSJK\.DN~.]"+{+P\nKX/Qu!xB=a" OuhNo0E0tnlW{NdIhl9cRLDy_k4bTGPQ󎺚TU|<={w"HMH/T,^ͳPS{٘-*s-Z1ϵ\,&Z<"ExEe!R5(ioH%s- 5Lᰎ!tlHqv<"\hޤ_I΁ql|MGSZVE*&6C$q;>b3нvYQݒ3E]ǣ Y/aǁ*;+ں'YE? -gMKCj77ѐۚ~<;\ndV4G]Y`2:S˨t\ N"|CV FAgge>|ҤX(Q'*-w؝1z7y87niъyV#u2d[jaÉ}37Q3uj pVԓض^*S?o[{i[j=Kc&"y}^5$ s -'Zo4BYdvz_IE**8FjT 0C6O:nCg Őgm,k6`ogcb-=Gچim߉-5SQsr8(CԷl*SFsH-Q?* J@t TիzZ T=&f9!֧3a ѧE6r h JOQKTccγv~SCon]ANk%~4$̆pfܱ*^zIOjt6֖wG'oWOXA_UIJTwdP]p11A&v5c{µwLx~ ᰮxxT;U\aFTi&˲սdva2uDDӒ&-Ia2ZjWeZ_ԏiDzSgv"j9׶IҒ?Vs%⦥iԪOEljs ? 'em 6U6?C\dk>SSDgHßϖ9a30` '\#+J@*=d}̪E&;9:C&w &wjE*pr8IiW8+zaT@dMTjkT-[<WГBcu{VcA - *כ(~fs}u48 Kzp^90*}p_[p[YI4) 73F2?5=YwhsV3ܩnbß~`9Va4[ e.+.ۓUǴ~r,hv1;fWWtz^˻A8MF0Ng)]l؋X'aVWn)f]Vn+2 -]FWtfqŤJx>S4B EA _Ah{ wbήu]uB}xBzԤrPc?x%{o,E)IK /cɱ0av_6Q#G{Ꮺ>6R/UiJMR=R=,7QL0u㚵OT;}ϿjESԕm'Nk_ϖϨ9oٶ;U{pac1DҖCbIKEvmt|}XE6^uuEˮ6ܺn\_쪇0H߸O˝s tbCO{/:HaA= ,wSAw[ފֶ1CY7t;^O azGv-],d2*jWB)qFGRŏ*HjwK^j߱U[㨢s&=O*\R3r=Ou*1@vˏ RQ+*ûRj zɝTL.~ǔDGFNE%p1づM=TM8c~>]|l֔mjx|ح%oR-|[){aE=@`- %~$$c ;O%"քDV)Z 'I3Wi{^aK:p7tPFb*Ƹ*}dT**S+<]%v;@B+7~`UjyVE%.eD=MJP۾J^.M^NTg7PyS>dX1Rh(~Np8PLCl9n _~FY ~7?ՁſH> J8 >H=PS/fSš$k@DX, oQFSSoF6+ <\WXq8V Պ'FJՀ I4`d|S?=ƕ98TCL;rzo]%tݝ%gatl0LTCjFf~zʾI.3te7I}16b(H/zvkPEeL>m2^n^½Rt+ʍV=đlvz2N$z>NGK.x? _~n l=$X)F 'H^*7GsB} *Tu#-`,k#UTXN<,7+P`$P9`x'"dDK/㲤i,%pyqt>K; Ƹܼb7a1VϚ !-~xz_2?pbi.%?_oy(u, @F ;.biKoںuK93[gcK%;Shy8䘱:kJo U(c;/XRPБ-.Υj@1Nqڃs< o9'Gصl ΊACBq]<ᮡs|Eo~_mkTnYYxZ^,|cN !pW{_X5,Mᮟ'X3-M}tk r6cڳ΋κkPt<*i{+p휷k:8 }Ӣiqs*UNVzpPW_Nm3x^qq0/壟k8džblW.4F*"Hg( NBx4ݧnjӔ'eҁ[y;WUz'VVO$gb%fW5NH5-rObq:v&9yOT x⼄{lRF0ΦNYFo)Z%30%8mSWrs*uJu)G288}OI]R9a3=F2dxgqzcI<*3t=%3?㣣Cty= K1?c/֠clA2sO?jl`7ՔnVρ c \+)Sol7p<445ԇtg ke̾awy6Jĭt̾ZguY _9]o\SؗcǀJߤpZvn _Wy{X]_?ز WIu{ Q}\=QH{h{_ h C;v}\ch\Nk1'v(>ɲ1}>C=҆yW~|ZeiʇUo `vrW{ZԐ;XQkFsC|cx3}X EGCEgCېߐhC{XCƪCo tCㆌҐ-{\RC^mYƶ1ՐA0ѐqƐ/Y'Fl Q0>2қ}?p|[wmoiӻrը|~'Eʀ9  ÞO_HOE;҇dlvˑA >n6~i@> ) k:KC;8׌o~NwC߹!74O / ȿwks,=ʐ|@C}_ ,HX }t>A~d=x2Û^ jbQ5; ֒\v]Zr` B '2N̫W3/N6Z6ք^MvW_~bq LKw/eQO僫^c-5j.~*2XkׇXkz%\sb7Jo71Bߨ CvKv,x gS614rsk|-~/~w1re@|?@3$~0r9D+xBb}*caJ,ď KBڱ 8̲ _Yc|5j:"?D$_T<*7-*:*~.k['ϔ]_)k1eHϬ[L~҇8bk3bg r_\wPH]%2YYR~e0+ߧ\3 j0^EaBV/9nėo?%NKHHHV%D vABژ`ScB==OO 7$˖ς!do=Sי>M9nx'U_Rd0\K<yGau *ȼzc-Գ+Շѻ1|E= ]8v9'|qqrzJdv>-HӀ'+u?/J=ʕzJ=?X<[܏.PgJ'('_\o =@KqLIzQvuQVz<~.'Cr9'ӄ?$П\П\П\П\П3K_#A=Ӻn#Éˉo%45^xH+qqq.q9tyč눟#ÂO$V$^G7SW#bbO@h4|b5\5;A|1lA@ED@|%؆x0?q1TƯ&x q+q;ISWH3Obi}S0!G<(jxm"(k.؁؏87S~?Ĭ%ģ[Hr3(ϣ|ZWd_(?G?l!5D /?rY?>_]GN'q1@0x0h\iѿFbǭLiL)-{~By*qqyK)65[_Kxӟ (- EnClW(gz9q"q1ӫ2L߈2L;{OVoq"z Ŀw&}JI\Ix/ {m"#."%^G)1`GiEZs~{ڂX7 zeq5q?x݈yDtF"~w^E~{={FfSd |5ԕv87)=ڻTC88+/3ڶbIK8P~^Pʫ( L&=< d_] JݧׯGkT_?XkQԁj g":g}-ek\%w55{vgR]2R:IWX}8ZQH~+KL|m˧u.5*K{ xXt{bR#85փ-pYR^#2Pw;DSiGuNF&:T6HVPT:*^PuU+*rEՔ d8kظ;/OXCSR-W5q#y kdQ^r^qޯIŕI  >N%+jv֓b~E:4dZ /=i/przG|ϋHҮ-͘n#/o_nwl~yƧ|QϡڢC+Qϡ)9،CșvW$z`+v_i`zFٴCl:6tADZfߡG4˚ѴCŪi sڡǑ0<"'"%-L`[4zhڡǫHM;Nhڡ6D=~3=Cj?_EVvtz)9Y~/=bűFN:$l2ƀv݁x=0tG!ϡX0nZb>'1ω<'>ա#:#R~|+ U?tDXAd 1Y/TXt,OǜpZrY-i]RcFZ7VZogv:+b=.WWjz*h Mr?%]k'?we)e͇78,m6T`(->LZNE{ݴz85U=Sޘc>Ѱ$ .v[rSdvq'Sú>eٴ72쟖S6؇Iv;n ,66Eqoh!qohXXrơqAշ>4Tĩ )@S/O ,KO0;,_Oa &2nHH9}`s6o_8voBlgHdYv \mL[xmtWh^VFE:vPifؽq!RbpABtx}DUD>IL]jWEKii[`B͌_X|CS $NYBOʘj|4TҤ:HhD9\ ~a;l4.)6Es vn5iEXCi4/j$(# ,IVA/4u~|%j|Yhw|3 8#h&ؙ_Sg׀ΤRJBSg7Wq$MqMcype vX+uXQ]MD-:rKcSa[ULWX}`lBN<07Y>#cI5#U.bt%?~`H ]Q{=m~ ?U&Ƿkw8.ieit}MGzUu}T^Қ5/YN5}^ ?W*|oPTݱlqߐ8]9Ro|s>c9I:tY԰Xuw!WVz`-XYo%dqɵj'%9Uhg^4~Q]j=;~ n/١T8XeE%mѺgyC%Sm1x.PލWo)ҙ =+"꿺:'{_݃i=0LTAKLsz؛W?$R;u qqyBay{3>iKQϊalD ]y͔}CRv!#uk:_w[jo.;F6=@^-D+P䭗0d$~ ~]ݼ}u&^FQyGEJˮ~I~X8eU[v֮k!Ms/f޺Ϡ칯7VfŒ|JC9;ތcRII!g09}:W;E#%vڲ Pn\bJ +[3PE@7,etRuI}B7G;9y8CP^!+Ё)S'GpJRB|X֏˝1F@V_z2d VΒ}*>yuTV`W"nO[>XgI߫HK3{nUҿ/h^{QjJ>r!WiMzX_f3w*,y/xQS3gus5b 񠳌HГ8}f!#H䌏'?Kk^09>s:?q|L5c]?O~o|LdHgHw$US ΏcK-;#`OJdqf龋wLQB' eQd^[#} G!' V3EEp 3rʷGhA>]^X2KXˑ9 Rk"Ʃ~_-U;5AJ@G;%d\B{+r?zWʰ>a㈂3+jQH[8e߬=L䍺s刔 \Z93 剄# 6O!5ԐqD9!jQpQVzGIQ㈂XgeQpŌ# zG0yG'm㈂5L~`"kHӽ# vsyGԬ_I΁NOGSCʜDʝ! pDa ĠY3{ FIpFɍ/onSѕ$knaJ~:^ ޅoaƯnaQ? R~M(g"!M(CscbI.\QrG1=r/™ޣdބP;O/Xr%˶ܤfNs%厀VZ.PUdFut.ޡϡ-C|RKPՋ\K)N}borc/~hw().^DWfb9$~-Q%z:鐈&$Pbڻrv%a4ضnlW;^i<IrBVvQo]@ah~h<(}vHxQ>GZQ"فu[;UXEM6 =/~dKQ[D,LQ#T: ܟU!(G7>ݮH N48->i% | ͻU,'z\K Tb`%Te2  E*i(l77XQd pmtmUCWNQf-lZ⑔ ɑV2gRZ)׫!%l/o5Ѳ;UMhrsiX,6pdZc8>aQOf5(>y#퓤*pcb-ŭS:8!Aup}[cszl40>l{0:yvTT[ ٧Q2C,;nt#}u taF F^ȓpXHcH쑱1 R h?7ǻf9͖1gshx#ѿFcG(ճ׺JِFCI7^c2T 1}7uQ(4v%!sΞ=+-6DVia.Ze|R*=TB0S1À;>KZ{| DfV ]CqNO ] CNJFm}sʳVAYµr] r؞]m̵v=Rd{O} eQW6Z~!d4^sprEC0tln}fC3_ x Un;CD_T]EfHܜΣVA2"=j qWp <(8#0#[VE͑Xcg:r>Sfga >~2z 1Ls[x*s}LV;TK\d};)<9՗Wc2֠ Kz ܟcLuLy4,93+׋]bQ})5umD~ȜoY"˛ iy9. s #oSU?9c?f<"UdL},Lf ytxBnHڽ-Sٛh۝n}%aGqr X̌6;ˈlQ}ưh)Ik=#>Fѯ6~])ob[WG@3W6: .2]g:or$J-p͘j!zToV=ʈ/S=#7t8@?v#Gm؋ b]a_uT<'KR:Kl)]]0+{Ym74l9^9rG- ;T)3fbR@)=L.3k;!ǺI o-۶Ot''DŽ{X2=,̑Øy㖩' y^yȑ#3ʖB`V lmj}2[cKepNln4RiLt뫿Sf3hgt Tn!nV6.x\C=Zn`Kx)/zRp iz`Ɗ48K{vA;Y.ZڀJXS$p X+$pzQq^3eL5>e[͞p4p>p @+^ЫeI&ӔUK*`Ď`Fbaы+Ctw8c1:48Ne37?2x Pp+ocx ?knŅVogIw.\&|wH4Z|o&[6m_acV0/q`y:"Cco@'GeXlDG}TT e g#GuU Ηz`Ƀ*m>u]!" ^2.XvES` PS҇G$tJyIK?b-]@DwT1'b֩NM#4_H\ V" <;//D9Wo0quר{w)+mrn3"q'b"-BCe yDW)+ysc`Y5&ƀ{Yns&R1(|Hr[99}L@X4t/_ܽ |E6=3 I @n#\ r r% !T$A uXw]u]]EWwoUPt׃>=ݙԷ[:SB;$:U\u&X$Dx9T,f}da_b)_q` ZrnKfϯ\ֈ֠zJ!5K-\b$AQJJq'iW=}55؃N5A`!;uMK>+Hm8C$FmO >dn=XkW fT go\P6Hx4 _=.a{ &]RuO蟣q=l{sϺe ]slur]m0.3N)z+8]r: s8`[z[.X`ts얺A6%"p|6{aG^c? v? vm]Mo|n_7mI[t媦3bwk?5n}RYEըqɚ@-jU5سmC+*q-^>$&/:y̑Swx"\5jy!U̙`4(I6j9|O\,㪖|nfǧ7.7,[Qlr6,#a[27f93SY๘LfFpI,X8p;y7OZ˥T ;r˪,u%gZ%dKf.D=O3nD.7hJ$qc^Lsy`| ^fyU~(=OԴ-p}#V-YNgI0HX,tiTC0&,a$OEd79&U]ޘ6EV&,YE$aK7p␎<b \cIQf:\>S5VzR*Y;U.4 >a'K轎dnbliDgxjFwZGlrW[^1-SqWPgH @cGhg$IҨ M)W0tmqki˪:*! S&,621Nn%A:v.T*7 Ѳ(fYE$&'sI1-IS$$'()NsSrH; axcԋM})љ)|.߀X2^t/ɈJ)o"xeQ9 cYgϤc ^bcM䬟;1EiGG4=QX.ěmb>S. 7 .1.8Sx~1KSL.sW_y^I@^ m@LI&aYO˖a4X =o3e>ǚ[roһycV 3=۪)es)ʱŗney^O;|yyqw=V]g|zLǗ}= ϟpJ\}(-6x^)ud6ޠeMt$g+y^Wx<&^9\ [tudKFc uhNwxO^|f :XgHHy>OƜK~[rV@knJ_9>=5{9߹i^g>'<[| >yOnA1x#턾wSo[?Q%v&W[r.1{Y!#f[XKWg[X?| 0l@;,IvZh~b5/%PB1 /#PB1 /#PB1 UMB "n%>J|5߈_kJK,%".!&n$^G|*=gx;eӈ +u+ۈ&n''"&v!%'g/#L$%;oa'"#BE"^HDx?7g%v 1=IqӉ +Wo%>DKP͡ @S=пO!gEWP>}ƺ‡/? ~GlFޟ^I?"Azx6M]ķ_~AihDF$#xqT;g$n"JtVx/S~g?'C"CS'mc%&1)O  B)3鿐XCUěw$>F|`'s{99}q qq .7m^HI5D"L! ٸe,:~OdY!p-;7`xQ2OA )yݫWo-k؀j>OڞYe&˴dax09^T94WӥVЭ<<ҕ/!y~rxDmz2O ];CؽՏ-k^x߬6Gja<ޫ3 ɆAI>pZx8fH:BaѼE YN*:XLa5O]F e|?!TJ Jqp}N@ܚ Ud6}W5#5؍58+A"rΏ ܣ»WW`|XK YTϨwzսו|WE׷QelOqțq9/F.Gwlvy/Hq3IwjFz,W0o/tz^(ktZ҄J`aYs,qp6B Ѐ7t#>H9JS7{O?0+I?0]i]7Ep ?S7IlJ%?oO1-$G6`]Ǵ̋}炫r"Msa@4>zApf^WCm~k,i< GZ]W:c\@j|UhPe8Tr|Dw}E.sYkEY/jqx;;|spq/o/n[,_2|x%;,_2<|LUdޘ/:^@M9$_!En$db|txz'#&xQDz iI;=w_&x3N=>]]yea$o2(J5wpw!OuXQvp&mr ThZA2<ߵ;K E0;Kx ߍ邡oNN~H#yuoniրVNخv^cjU]|E+r4O9yXH&hmq?7$/}S#>zʟ~b58xcO̚c4KzHrtksVCA3vͼ]7/^HMaj›SM/= H=**WXXX5zQeUCً.,Zsݗ/00\f,ҹs ЊUK*.ħ-2# hvi5[o;U?߅M] Csm)1UJwxU2IUz M;@*zj\+*Nlփm-dS]zm;ptQ(uŴH%皧WDԩcVoi . ޅ0 4f %[ %*#%;X pe*w2;/!O;yɰ9H9ǚn"g<< "dFm(eCtb<=!]2p|Azb`6!}2.=݌hwƋc& 3,3!lR-X-Mݑ;f\*#=O 澎0ofjˣ2p0nzN3PL,{MW34\2™^LqFH/8+/Hn*2~z3 2]dd-s i@% `/[F {&bx~j/ZȽn(nEkо}_0aCWVت3Z+/NcA4Ɔ6nfƆVmfƆofL٪> `g{,0ښZkC&*QDZ(RKQ8솕vqLh4ǔ|el/RjvRaMj6X[o0c~igE^ ۳[b.HmcL }==hwgM ޷8k,MMrB p [c(A-V˲JH1l[D la{ Aoy )5mi-(A`$5##uX";ʣR#xh럒Z?%59G(gg#?f)bOԘŗy:(&aRmN0D%4:\xjuI!c/3]_P`B|91*łq?kq]_ɬ䃸VrMt8FчuH*J;?_2)f$/*n{|ױ }x`'>#?םޛ\3W9/&/ E W;X/PF|^l_+ Ղ81 W(;d˭{5m~{<*{~>PAO%B[&&T=(Ojl=[F]yD֌l]#f;qƗF};3;KQc̒ϣXt2 ߌH}ܒ6fѱԅJgW"R,-8'?ccOgJJOp+|Øus[86 /OKE*Qx ptW:Q' TJ̕{^j($E rNSg)#ETڙdBG)R:"dxINhH'S%r?_4ݒHϻ&UB55W1&4-υ.puO- *kJkW>Za6.L*UDQ%y^,.7TSTԡN +.%N ;Ri3gV3QpJ &$NTz)2 (yı1N>ZA4`9GAV[Má1j 0?ZL%?M%MwSF606sk͚[.#]T lL鰜+߹?CbK4eO˶rQض2߶xp DmYdPŀ´t]!DsQziJT,wtHR>6 jݮIQz{vK"7Mdz#I\-LEKȊ{E2z s/ALe蟴-:)Zzvtg#iXC01F6Rn!e4-E=uN)ç֭uh7oh[[&X¤W1 ]|O~ jxM;.n8Kpf` > 1ٴmSi4|.C,˒mr @ ǀؖGۈyjl{;Pؑ6qqgwItvw n\Asr@dS\ Xu-`%2Wx*>> _ _ c5Zlq[; ?Mߢ>Ǖc7)4>8[WY9UP-]> &s0&jz--9*{~7z.ۉɔm""Vo庬B~; |6ON]lwpS)xnw E6p- Vo!~y'ސCf464z(O.I4l>ZǂװbD"@lf, L&8Z%:ֆ86cѷ.N}U?Xr6$USDK4q.qg ,`-+,`KqǀyⶁEⶀ8qcx2ަ,!W w c'pSNfSŝ͛3#@`Yl: q]^/, o ܖ!8~GC1>NC4c(1,_*w)KbSڒI<"<0 ͺ(oqgD#B ^Ȓob$7<_){L^1 'cŹ:)B_ѭ(@8۹NwKP:n+͐F9&XvSs##nN0^?(<2cUŒiNVTˬ_)RO$w"co%RKD_[FQYisǣJKhFZPG,g`#pGq͝c;i cEqN: ;n>p3o>p+ۨ|q.:`/6H7xcUqR{51|+ gޛYa +x%fIGĝNj; 8A1`rt_Ő;$14' Q( E;6ݴ/JkOS<0O[jFW8Wwypؠ&Ov<;%9!N'[fҭ .l?ŕ=oE %f/YDq_%r-z N R@ ~#Ӟjg}v44`@'9ؗh'/#_!m'ͼ}g0h\oڝޱ7}33ukN,/޳ƮwGvvM0NTӂ ή0ZgpZ'OzbOj%+>tSvͰ_[rZ;UcIxv{<]YC{KUQ0 ;}ȵIϹz𼓃9}}2#v=^rrxҾr} bp;~ByMP@W:E[ۚi%# mMf\|**W,[5GC=aҤ+MuYQfYf˜.%ɱg:sdO</4$tEEy b&hT9J+4]vS󪖝 iz5<:|ٺAU6MܘDⅫUx9UΫ)5J*髲8uBqC'M1$W Fevc &W.Ⲫ $?f<٧1rB^"!Zn[rA;tJB]Z*\W]GO$ufSc7A]_6=|%K*-7FL*EH?VMdE"#JaڕgLL<7Fn aN9LFC Γ+/ՍXhS2uf5zc=7 5 5R{&8 y oDܭ9`ieU˼G8H9o#oLt”)Ⱦ Ir#?NI=d^ J TxVOKʳP<x ]\tk3ҕg eCoj瘝p,cGSolyVz 1Gxq)G88qPKMY -v,)>q\&‘o/M_R^)e F|=&:a73N:EM>H7ő{{i\8ˑޔÑӥ9S1p^%3ͤ,~{'q9HscO8gTM{n.pkj$qw[X|_SXs೗YM90NhwO_.zwz%/˕'}n'tg9pC8Ϋ/N0xN{yݧwphjw}qsix۟1LUZ*U ,G~#1]p齧& _Z_Mspo|9 #.mU;dq .'d0CMTK@2%vKƾ"<fc1N綹J~+|k]9%c %/b%eHߕ?| j^l&~̯FWxv jlsɸ;\_5h HΗnVfrNb}}\ #/]s]׹ḷ5W-6o/O}2:sR 棐[柺\MȽ^{}(<.s"3r)OOOO??O?DhvA>q -Nڎ!wuR-4Zp/~z LV-YXxboe bgvߒ{XV-x+z5ַh-˘eG>~5>_M!KM 7DwěxvaR^P 7EaDM:Dߝg1ުiWly <u3Jܝ&}%M!_R7"|XFBfK"%M+$O|M_}ATW<-]_S!n"H,KʟA{ٶ"%D 3f?C%ʯ_~!KЌX@Δ8QĩEPP~;?qEts DK9g Cxq'q?13SP+!K3%>z3޽@5-??'Ʋ$^~(Kte,WR^J:&DS~ʯP~xx3_Gvs !k.zKĞ LC ?x^7_2EGI<,SN-خ ěZH|?q%~I0A Hx_'2TϥJ80 x?qq xZs\ש\^s5.$蜫hÝk`_9Vf\qE,VW'Բd!'1eQE!/y.t&8wka:`IjC>M@3@%[/YO]|d,=^d⧫+5Yc8fqnT{u<8Ҕ}* %6(՚A[M9.|k 8 ET?nyQY:p|Srt:J)?*_c.?JrT j _׀sOJ7IFHF繋]Y qnd~xS]]rHna`pT!|Kr\vi@Xb#}MlNY+>ƝL{p6Y<PHMI3`9zJ#P {5 퓆!+lݨS 0Vf)pk_a3mhhzw}q[5[|;,+H$۞ "l|dux@KY6 B֧8{QuA팴16o#3P0{3sZ\"YQᚿhkJfF6%3'!^3rlp2Dʷ6)ky8oc qW^'L>?^C827|<*- LM.qtl(ɼH+ŮA\1rAqZgXBqV=۴X V7 B"H7Xx[F OۤB]b A҉s8Ar|AaN 4W>NGş9/WPt*[21dܲ^xǚ+xj c?]HZ OXKF@TaE^RF.vwʫM_n#xSX4[40,Rݨa163V5ȅ6TW7/j*d5iqM"4n s #[x;fN04[_.(&Q0ysiʺ⿒5`Z0.eS>%a,R/*BN$fg]dSDf2mJY%GHVi.ɖi;1{2T^-|uډHRQzzI\S 6 ^(l4#o79IKָj0Aii醠ċRmUa?}"(vG0}me3-y)sщڨ;NJtr@#w (Yo*1ymgb|HBkA+J]hy.%P_G ݄ƩKTu t5_}Yy{S/Df?D~֙-+2,YK57JVy܁ / %swA-65h^66!M^gK:G{ ^wUSc+`D9r KQE̞FdWˮ9"-L|jgi=ƍڮ/eFX,Ltt(HmwWH=5{t/ѣ J~X/?A;tQ/d,!M+fyyyԋ-F n"ǖ.:ȼ$KdU;kbx$ m~Dz(jN kH?b?bTT܉5LS1tqzp\u70LMJ?mN;hx700;;wcⶁǘ޼` ?#l=]wNZ3A JQCw`W= `/f؛cqu53wpcm_wZ&3A"}?R/p_~` A0C!yˊ7n&UV.[Őz95 Up`8BAw`B$/(f>|k{oNAvMZ;K >]vffDiv՟'jҌ5--H\'+/5{Z@W3qȡC~}^S[f]3 gصeW5m(LT oh/_ t &q\(6-t.TTX ţg/?ei^,Q%ajԲsʗWTTMM]k/ 4O8sOpIc[V1l2!ᩈ2Eg-|[!.^ b0O<yFr?;pϸso4~V&y&gL@qz.AcioˍJXc}0~|;=gogK; 5C/ȵB<m,1o^ޮTܣw/$U+2䶫Iq>=lO/ ϟWY;r`1ˑ*ᦸa#E4W}'ǢZKin޽2*7߃}r'R>O(SdXhQǭ]מ_pή@;n} 'W }26CH/Zq%w/QOqд3/@z⓿?䈙#^s5'@x'Ƀ|2g\Ld~rCyH̀OmU?z:3NW}OQ)3 އ>Q-LU@ij% rF@> X(@v~M;Z8j'r/ {I-5.ƅN|Gozq3=nƽ͸+A\@\AkvKĿ$@L;{ˉ3K/%Hq^'oV@@,!!N I\L\Ml @aS?!v=qc4|Jb=$$G*$x@q?7`!Dĥˈ%&JZr۷"rDG2WhY{{^&^3,q,7xuh߄jG[vҬMT5iQ\gfy.YzjCi|F81s:ЀQN_bfޱBQo @rEu{ld 8 I:>]u8/34^T߰jZzgאU(Ί}ך@atVr~0Įa׏%V5Up=6%L*aɭnC >ދ\[ƳD'$J_ϬAj:B__jnb@ #;.@ TȽ*4еYwcKA⫠`;J%{Ӭ=~QSP;A\Rc +( J#N;`nd*QJzJKÊelw&8CS-y a Zu#X/iUD; XwА=i":ۜ-#c/ߺ+g]GpOّgz^ mǘ#~'ܥ,rl|O^Kv: ݬB£$.6Oޮn^,A=.Ro״{aeHCl,iZx f b&xd@|8Un5RsFP?_e!tm6p+}?H'lj ]:847M`5v5laHO`5vu믗CW{2VJXWEǮ6" |xDH18pq$R Qr1?`OE,0XD,7DKH4L[<#[Cts{Gr$4z,'6FCh)jHFQpFMrP[]SZNZ,鮟U{5GzPQhg%gED tVBz{": _+wUbJ=.g'}lC'z*դ?rԒeW¦kigt0 \02f~԰.Dc 74] ^,6߄,l;-3գ&[k c1jIg!^3rl쌍eoRHF} w,8Ӱnfm6}2NHCV2kUqNw}%ٺ8{n4+nN]qP)],1+>Ș܋uT0)mrfL1d05851;3fo'R?MHthތ(*FDЇf!RyHUeƁ73Qa,Լ5fؕk6wjJ/g&f4q \gXd-970~fXok0;o;2۠ћhw\p5rL+bb΄3 &gC'Ou?EɯAP/DD[`ߒ NOk'rjO.9\8W |{6Q7X)GVmueE}.,. oͿiOQ>%_{CX\QץxA]p]g>Cvq %h (PGNm I=Jᆌ//%%s>JLi'q<rUKUbmq]DS>2`R@IUcJ Tz˪w˷-e?Pʙے4T(ZW>*۸[|r</&c{b&\ f_Cdg&\Zri'UbVߨ|,؋ y[TµsuWeK=c6 Xwg7UBl;+s;ax;Qz*PdCi9ŽCUĜ99lX9}&-9T*{T9>^᫔BoViݰFUAX*Szň 38?5Jfѱ +ǠDT؝;x;c\e? {9=|\mO{_)ٝtŤ%\رBYR'6sW}ikLjK@6KEo-i*n^s yqaPCzbtމ\dYqK[H*s-GVV`lDbtڗU\QbTiW`4 u%e,+ӓ*dߔ %v#_}nqkT4"6 mf=>0{̄k8BZ1Pa VwXpK,,j|o)動r<3q7;'OUmwQa;TؔLWC mĻI5j\MxjZ ߮{p“`;滺G`zu?_:=Bw#+}.V{Gߵb#Ԍ)*ЍFI!ӳu^o ݏ^J/9^rƢ9Y-3҄S/(SxCS6esR;{ 5oquRzCAPy18Ⱥs!.gC*9Bm^=UiE/v5Kl`Ѝ]MW*]A[Եin;~GWƹ6OTM7ѭT ,?pDK ZnIJx9W+M~?][Saj8$k)ߢܙf|q [ ӈOQ~_C ꨊHUS{ Ф#@9O.-\ՏPǙܸ(x7"g4J~+kHKtD6>'"%:`ºyyl41۵1u3I\ʁp st015Q de/݁p91ob|ف&T[L܁5Гb[y3Rg 0h}"#^Cf<'P7 !1[9*scY @Ő%Cyq˅1 T`k\R!蜒/`Zvb2i]]uُLιD}1?R.tbN;LjǦ.@bT 4;*3Kf1I1y9$ɻ&uq_)A*Dt0zINb@ġJtRT)[I g)r}iP"YuSHxːyn&8iO[w7K$m 3-:]*H&SںT~$!Xi[N阤_[:5IrL(ю. X@ IM4uf!j2%kT䥁j/]O金Jo金{L Ŝh;$Qt*Bf3(7'5&6+^C)\m:MH1dq8SifZlP86wp4%{|/Lu 6 ߡ!_h. 6..Eofnz: nI꒵(g:=s%88b Mc e1Os `]@4REfpXE ӀT6 89ɂ7pPHP,:do"sXo ?sRfu+dZ Z1.?p (# !"W ߊ;8)fA NwpcSmghѐ3lJ}M!d`sUY*yA|;eÚp]$+u|w!7'ܖ2jbᎉ XlnIUm[;w0O9.^L%n`=73\u!_X2tlL'J^떿< kk;"ps|9>ǜwDaH^`+ \+n Sm{˒(kp ;q*ׄEx^r 8*Qi J f$ XSw/`^_Jd*q,h(360ʹ͓Δd5P9t<p.z& 7Nm‰itX q]m>xuⲢ{p >B]o>*,ŝm G[}ŝ'mۛZSzWQ8^|g|Wؼtu*N-=C p3 G2]|k,I%%iBtW"VT)yh.[UNaT5%&R0SgIY4"9ź, b㫪6s97 I K ICHHbr/S$b(Vm+`*N:V+ujVVֹ}k=sF ^,߼"X|Y`|iY>n%Vݒ!Iiw(r՜ np(.|8]Nn\?SJ r1OݣX=m']d۳fߨL]2T8+dp YV^;6iԎh _gm7ðrueMtl.Y7JPV،LI.*VZvsX|[__USIJ0o>KsO`fAbwy6{y (j3p #Hd=Fn^^ P[P0=px\9n1<+=׸kW{k64sKeo}(32f= 0G[sj^L5O>m,?wB#~'f⛅3 ǍF<^6bG2m2;>zm s05rQEgxoa+n|tE% UՔU,]QeMӅL@mq]Y%ڲ mMY)tL_ TdJC"8&@SRE`H]#Hcrڣ#Hҕ.c낾f~7j+ΪY\gY@djDikXTi vK2+3=J}1M,WhɉnWVM^M Qh=XsROjD)m5h,yRBv)~n15'd֑*LcϦ=S ՘^Жyv` 8mkI;MF~eqyg۷:2(2kϮhq3UopQ5DQg |v%:uyے`whw ^ nv]y[o4| S:8V'Ŵ.V'ͱ|g:^SmӅ|3~VgUoN/VhFanʶR5mf< y6]K3[ ״Ef(n 7AsmuN ct"V=Kyn)[|:}muVg 6?2bc)y85JXhQ6?^cOI6>mm&ز[zsUҰy;,=-xk9鏆;I0ͼDžq$̏oum 5̿۶Cl6-n0aa~{}C;ZG>\"8{ׅ7i["a{/_ Y9yg˕~r3 ?U,QFg$~Fpl=Adڽ= ;vmٜ/Mc8Dlsng;~u4{#2]6{vϿo3QM8t$it+4ľsU٦OfÏeT~uvlǧar.ydzRx~-[:1x-of۫0RWKzllP$zZض6saia6gu&A\>[|u:t`gZ ۴_3\눾Lum\Ŷo c y_Xk[|<Ρ= pcu%~Sfz,o47="7iaM;apy,P>@yS]򷻹<\ ry<'$ߒ|D=^Ac; ?HiaTV^.z~R#>OF{H-d~;͈O4sQ=\ޝ.+ŴP'"H.߲Y!U,N%| y==adL4n_O59,/6`s! @D[(r5HJf>LҾy.6\ϵsw鷗^.M/EFqy_ o3 Jn|Aвǂl:uf``w,!m%7 ^'+ >.xDu-?Ƹ/~ V l.xe?B /8BpE nI7/ 'wn`S Vw.ӂ|W Fn)} N#Mw >*?Va &8Ekw_p o <-^R$ f &Pp`݂O >'G_13G ,DgW S5ƻ'G,q$rIb빷Gg :%UIgٜRjA6I+Ŀ,(Rb$AubCp_جP xClRwNOj4!8Qp,`SB݅1Up R~o ~!='8\pZ|_{g ^"x<-h$ /Vj:睨3w !xLкHp> fkqYWKw( oF OP4uB/-Yū=fW؅m_$u\P,ΝUTX=u4_kmcsHuB^;vVǑXq0pơ!c(CdžBb]ќ?5?fnzl^"K $mȁKwaT5穹u%tp)/})>,"DB"6H ID|։#@aI$^`Sh~"!zf%b? WLA;zCYLm.$f/N &I#k=qDm"w`?LAƩҫxŞܯRdkg$DK&JnGD%a+ 3nv2ɤRC5U ~\-Zw5[#Tװ Mxo:s۸g]YTx|DVw]swYn}6򮸦J4 u֋Ԝjz='2uc~4絟/ꇍR^`YPcgY?W6mn{(C_rg'/7B3cZxjmԤv?Ue~,xAJ>۹(0Npyk5\YW❼v Ń}];x(0>5?hZHִsN4 KHı>T:C^mחwk[`1:dS hm"S˪PS/V6~Tm\`MV8?%J]' 9<3<9 h\G,-5Xu5m9Ǫ^V`<ڨmCXu u4Ruehc\FͶTɦalݐ;835^؆~hiSlwIϞϏ۟o[ehiC l(ĄX6WIc ߖL.Mmix7^i L4},sZxAc})"1+eg$aP~ІUAIJcT {9.fH4\RaF"k{mtxCaJJ>9;Uwpim4zׄ C,8YJQ;o?qLgLy~p]sQt}kbn[Ѫx7lqqMX >ES5;nr).!l} wvsJJs ztFskiz'4A 4lsdh>ə|l~ځ3W ?2:Aw4BI*,^R8 L괮er*cy!Tѿu~-!liv9綶rblKa?7~ݪpldsݫc7P=s<8WxD>V6쉴*Kj#ۼ#TڦZSQ)3ȦFDȥ&psxgMfiV|Pf[3)GUR5T;$D? 兎qT'Ϲ9DzsŮx6Uqysu9ӿ{lvߗSmCTղ۾Wm~Ԥ,ZEᩉz\#n -[ nyaeĦWdHosXA϶L %+e`,~* Ukƥ=K(=V/BLX _ێRu?~Aj;jz{szELeIս(j3[Z2Z}p/ÏFǣtHgv'֮҃laNN„ Tln{e{i4tUʪZvC 56%m݈֣ߝo3ӱ ItP5> iOiZ;ۍL>Xߠl#\k|'4 osn:0|mh2nwD88HSy_Dx=ljV~wΏmS05w=ܺ%*zܖG,u,#˻!yG95漺ⴆЩg.5ߐ\9gNtia}J>pu9N^)ޟ4f*sns<ީ,V[ÝTAԓTa#/}/B#6OJ`՜[+/m~ 5fҙFVÍǿ'z?v|[#r޿/CBl=윢Zudθ&G'Oڼ1RlN_ƙUqz#zAl-¦!@B3?RM<'^5fU i9풀&DuΫg.UsSUh'ir<<%aǞ6wUp$DFGM2-g֟szdiFTגfYEM앆ѓ>MśrO"2s%sg~I'_~,sE;ދwZLٖvGQx˚+Z?5šђa۞OS b _K{}+ q8y};{!Lv#?W _)*gh;r|< MZǪʷN~-+a|)ae}@-ׇ6==nҸ-A}n=C/ߴS`=bedddYāEu5֫wGzK"ͨ=x0d,˨׊/֦ԬI:Di8jviMV]S]^Ԗ]&Wky+`vZyS2ꣴ\6WT*WWʦ,y+5[bk,Ȋ ں,*WHE~ kTFU%%%YD\#gqu)@=5b LוU/ [.rY^6=Z:+4{2`"Qs$B &z? ʡ Fs+PɉQ lTVJ2ԭrW^l3,6?,)d,Nɘ6:c)Sgkӗg͢.X58//W-Rb-3jITLP^MȀAZģSfVTfM\SQƇ2 !& ??v,/*^QڼEsfgSfz)*UQQR5*vj~e%`^VnWV[[UuYk׮Z^S:+PG-CLjX9%PKH+ƥeԧejHgg4ԏЖY]>C]f-U A++[ltJuMVyYJSY4T#gZӟl|~[ A.L0YѸ#25RŸsIܩA'& wl^̈q+c_S:c.s;|a# ܬm4.S!X3҂4n.ŀ)ܰ!3 %3/.DzK1_'n/"<ya'J߱MF~Ͼ+ _!9%D끵BQ(Bor.tt7%j4-!~Qx3nshQk7JSys6+32`8^crU'Fy'F5!oW=Sy~EMMQF<5 F&)ﴨAoR PAN-wxEm7[K6#ޥQW;Dߣˢo2(h]E?KM 1!vpz;KD^f!IڀSU;{3Ttyؗ=e_c_Fٗ˗mjI](} Jؗs\o}#'BN9 %*)(/{a4ҭnTR{:%G VbAr,IDk4"JQCqhPBD F|5\F|K?B=ʉy.X?rոR*.oH>AJ˫)ע&ZzaqjU:*UdidTi./c|C_ 7 qSe~J5j[@si*7cc-|V3ѱ޷@s6yq^ԜǕo"YĭU]iQsWUvA`4xco>ע?RP)0) q?lEw{D'Yb;U._t[_%!_9Nt9"v7KR>KB/n5GĎ˻-_?)\L/nNm$fQto~Յw$QcD=dPi}FٯQ< Yt? vqǝ <Ci;"#Fˎ^CD sSOEs`)ϒ>.-$P5nՕqSA#A_wG(iQwoBe$RWq ybp 00qHy5X[G6/hQD禑lHUpGkrE]M>Q[ZgRxjkd*$MKbz>e^D,c!"H`Knag&bBy[Kr{!xULuwc@P j02\o[_8pCiz?E:  a7Q &E=On!=r̲,G娶-Grri9YrtibXpԠu !ՒO#lx=J,HS*D/›فhΧ`5ozr7zDJ{vyof7쿄C %Cۤ`wg5MKO]֔GB}7%ds  %~e#~ >:GH3#zTCFQa(5{Yj:OY}@C|Du~j+IB{JʀtK]u!г:S{vraո RK:,R#ARQb|×*s/YbC:8,\[>.|DZBU٦%Ti =Hq~N^_L$ 5==X:*&T"mX"_Ⱥ8pS.j[B5H`o#AO:ۋiz+n ¢~V 6I xyPY`:SmahE Q(wi%!+,Q*Nƚ,ʚDAm?Ƭ,=(;Eh|U!&BC|߶ApK4R:I`j_X^Yl,f5$J/nЮ1m)O]0^6`eNOÃ7! 715]ArI/7N{L—uͲo$tC04B8t[0)_ M&Aါc@e̐iҙ+l,ܾ44š&UrS kZPvJX7eyXXӂS²('68)Cu*j`3Zs[p ta&mRZ"L0!hd0E 39'HaP,rt'G.&Pl$'4FB H' r>z0WZiX 2A@0*vMJ˕?jbW4[ۛ`KCaS`1NַzXbS`w7jzix:5*+>ssk$2jy<e.V˻҄ʫS75qIt,G^׸kpi(+W!n IIoeF{?N:q,ڤ|Eq,P4Km8ͷ-^{{EJҒ1zuF<2%$`G@ʭb Fy 53ʻ|=̝Y4EYH ;KK‡#Zr\<9I ;#ژLox0)5MѳWGחR4MdV +ɳ_P>?T*ɧy-샋ޢ>%wUw{6t Mt0X u`/R%@N#v==l4i ۧ^N#O 0J^wLDvA;'GZb}%vdx> p{}Wz(%-0r>X3E{88&J_IDx"+Nޛ=H%/$35N2OXO4;XxA1hqą3TLw鵝y sR5 .vD%ˀTWZixpocor+]+P:<K> }ߟFg~4XMߐ`~X\HoI0`[JvbMWRʛaL4usOߡ$aSfCE{A_"ng4$+)=[2GmPK*X+&B #4E%P^VY> (>k,r?Ky62aEVUu Ec ;]8yǨ/(g7]ci;+lDٽHvSћ%zNxt O×rECI{9$aW9VWQt qR8)"K}ٕ OJ4\ʭdQ]ЕKVz*= y,y.sDKEQo VoY.яUeo>'Sl bO㶚Z7aP :$Im-j6a-?OGi 拻f䫶2k]rIuVD3vLx׫[Z9&h!VL!!}Nٛ@leȟQ?So{-bXܗ] իѳ0~ӝ4)4ߣyq8͒jsX}oteڴHIw~;#7b}]E !ߤk,Mqe-)GhdlϳuTU"$_iƝ{;B\|No|v24NȀ "-q-S R_> J@)}7H19Q:{?1?|yab1ǫeA:y;-.N؝ymՄ՞$w /*]sh*2EN |AY,Z߆j%o=l'kԪ:^~6А&z ͽ΅ͽ†;.M:.?nXlmwa1Rr>\T}@ in5> d>"wa\ZpA'>yzذv˒"9d*Hrr:LOh|-ҮXľg*vE%Hk٪zdVjq2H{P}!!EbڿoNȈTsSړΈ2oғ=Fɓڽ}:d%~!9J>XUZ?MLL,I]spUnlKPcE>ϮjqS?"K!B3W0<3{HҢƭ2kJo]^BUZh*iw/Wo,*)~!>ȩh'{Z $(FobE.+Nd0Q_Vt6l{AΓ%|EO"%qĺ1bl}4KM봟c>cbWOfU(e*JwIztPEGP/ΠqM*vWݲTM݃Oɘ-MC]-iD:&ȈiȶڦXP54MʈH/ϚM丑ܓ\`4ⰱ>F1k=ݱ{P6-S?nqtɱ4KMP˔k@N(W#;[Mo I8تY $_oRr 87$WO՝qnU`6r umU`[ zPoF>F#mubM5!e!]({!!}E$5Cl#v<_7|.zRr` H>s{8k-o|`c y@^\&mh|2X)E/hWcɳ`+ X^ygjO^WF1w?G7u1?Lzk ?|bhpxzL)4OCm]mIޞbU_)zDi.y}&UҪ9W`ͧl^3_ 6yl5|Zyx)O nr,)(rI&آZ nU J3Ln,ơ塍ǣCrY1zTB ٔL>p1Y܆W s c7 V>tžY܈Y*n}#N T3f8qJM5bdymJNX됝jx? (V(xM=ܱRv⦍U(^ZBߩ4 ;`07蕶:dQ.zv/i{DJ=֋(nc \DܥwId}7"s;&'a(n26b,2w:t6\_%~ zσy}i#tu3* xG z=ZJGy~+߱g}Ń(_5 5T /tL~S?} >u.m{|5P)li~ vH7YqH< T6B#P,bJс2jY܎qF]ܡ;WxVLJ; m=xv(#6r !8Eǰ;81q6KREC ]֥m_bOIkJI F9.ڟ`<;\L{Ciqi,҈w#Qx/#cw<}vn9@|h3D=6+*8CG9GSzJJ (ku1jN آ%N|{]Ⱦ`ʅ +iiآD:v4e dʰ{ x8x`7v'XD )xL >f}ko>8^*]hP xC(GRM (v*$DL pC)g3-c0B{I.2EI:z;y;8)9,Bg|1V9bw7K>`6zeI+LQʝ ,fwp ,a \%|V j::BxбꇯjKي\i% OWGnǤA1218#;8&pb4O p<| G(h\1@JY2T(;7rJJZOb`(GV R5`TX" ǡ|>nx cE$Q?8EG$MPW, Ր+b:OW7ʸD9V%†Xce\"+8iO8d`"\'S&’8DKBۄpBB?.L~Nlަj]xC9"q%`سD»U¢ىˊ|30ER[Hj+5tW >.'E"r([8VGӊm H3KJy;8iNg ,bX"tp^ t x(>)W#^0@9Y m,R^%RgYz c9eGDv*炁9t-jRk2b.\\&uRsxG;4cmuARY#3niQrP Ѓ"6CCs:;b饝O`M`=c~vײ;%A}:#^` MY?$goQN`vOPU $H&G2EaRꢜ FvSN|`a_!إ|:S -  nr-5k Lc `:}ٝl!*5=8xne CD݃sh^r^Pi*0gP8xuR [  D&)tU"M ͡ C+k %C%v!3;F crcrP 5P xC86>I-C\Kק0d:7y(;<*Sn%$f NlVb ېȼU kWDု"_. |SOVtp|`+た;x&sv̱4\cvٝnxt)C/dg H)S`@ ^B9#(cJEx?Q^PHB(E+Y*> VRd(g-R { `?/Mbw K @?;`ZْoLj_}|pWП$MaMPCd`.#؝qrgobw-6A:Dž |R >r sq P{+g@d|ʀ/h6 Yp@ ʬL8Pfe-eV&rLpWxFZ|&㘕E &Yrٶ4@^P)n)J ko^.0`gCϔ pmL0YR7828؇c fxYV~MbqƮԶ‡+Y MBY 63FaEdw6L)t/_а+^fKn[EBOKA#m' ̗4I:$>Q4H=` d %:)^*& 6JZ=B[ |b&՗Z0(x1mM=hvoPO5[YWǛW . ,W9+WU[UUYX:08wЈACQbe^zrT6(ru'vRO.]+Ք㚺6@e?z{~wާQeRSj+VuJ?n-o;+dNt50!ȅkg7RzӕOW/ƝbyNfUo5jo7o 6 Wu cH]`6wx^Evrs,e*~if#]tsѼvWV >էM L`7 PAղQKgjE H['lvtC IZ2;hކ3ƚSS}IN9k͂qmļJsjN/4{]7nY}lf! 7fLc>徽 FœC4&#hlaDnx1i<<ԕTd+@7\Y: !qU{1MÃ3M3&{T<ոѳBUj~'/3)`L=nğ2'lL3F=?;Nqیnֽch񢶨)+iv3S3&c3e3wm&B[~暨nf*krϯ2|_.GҠ\lP?Xl[A$x<|H .cbġOk֭Tk|G=?xŋ_h/pc K\h1mQz|vʘ"lpI6;>}5(}_ݼI }j]+c/ϳhG14,mm\A@ļէqEW0rc9od.~{{\:VqK|]A]Z}冊RVHK)Ueu*@KxU/())q2"PZZRjWVkXfM)oj VViSVA:~mM2%eu*hjm[OeQT:,R (TPsr A*ꠑ++괂eJHa; 87PC > eu~:3xe+eWb.+{P6iUYCekj{Xs:uT:DU tq C5f H 5H-k$mJMOKqں6%PǩY@¨!?Z&WN,_M[ͶIM_eF(T?QY.@i+иښz*k+wEn6[HB CHBDE@CHB$ MPBQT Xm4|TDiac=̹:w̜'JA!QvySuq Pu욕1h`g C(r\Þ]dJKtdջ;V.N$igd̡|r*;Vܟ)h0S2/.r3HnY/O3wMTגٮqh$gXT9Fhuzw>('U6牊]YQQDO*~.;EMu/.P z5+:ESNz sj}=v v<4׫~W[ڻN#4U%kHU"ux\dU\kvrz%N44RGMcrɶPZN 0+K(I)¸UHbb$3Z+YEOQ m2D*nk(&f"G9مb`pWof1U.]Zf-SF"nsȚ]X&:F2D&h9[0Q$t3QdW:%T W H}z*gaq ]J҅*q6N0+Q[.-:;}0]鵲qRr(nﶔM1PϞzT7ãN9JGeM'Z؝^ZjܒtE%%9˥|=+b幉Y2NTƖʽNtTZxΜvmq,2٭>ad(%e<1ɓEgrBX=3c޽]t1n3)LZ;bY(ɭ{M݃l]wY_~SנrT ٺ љV᯻8| kPA~݃;p1DD _(d4pT(;6@a[(·"7E}"~⤫*cC7GGժu;U@џſ#@O+ʟG\]LVmu: 'B{Pu^L>\3W{LSfϧs9}kKqKlAy󠟬ÍfNӟ:gQQSpɪ˕`CC/g/_EeeayJ%!&MK񟴰 KGC|U",1f ŏckӗB|i)`;'me+~lT6}#z:x'6w_1=F"9uvS?xRʹiM0C}5gZ~c!1eYt߃1ch ntKL &yҌ4)8nfUw'o\R /-.+QRUM'ӹHNA[| 7Y"_Z{u@Hv.! ])<Zhh7EtZ.-Y6KFIp}̞p0]Pz&/֙<4} [*7АnrkEj ZG3 .Vq1]t=ܣrIQRAr+:~!KLH'?,¯lJȋu?$c:}zEOԅ&A:yNrtA!=2uKRa:BnuB/ NJgVɴro"{!QB puAV IikpI]|CMnA`yYɧɊ|jpK=23Y)?zc(Ŝrdg*r/mhjxtOBhlEz0s (5,' f2p||\*h$>1$9:C8~\m޻@As 'NWlO 'P8O;Y):}z";E_̽ĜH(35X\;!ge?YY5+Z7U^C/ E>eşһYJ'XO~⏲i$/QHyYGYsb;?;+t0ct8V:X*y'>(8,˄n0V}X衝"i\Qh5;BXKt;Eū(J\?Wֳ4˽-Um$Aɏ{@Aq#;˕"׃[A N>1Z ._ n  A /BW3$?!r"Qܘw Fsc94y1O#ܳ>[@0`0$&פwiApƐ^q!(Ob ;@kD9C="iqU|FXP'DqڍX(1Žea5nyXIZQⳊb e`J(w?T(ۋ7C?2-;+ K{^aΧa\_ȝ7xI|Ac8F\(pࣂvqﻆ7/K>y8J¹H(jp>nGh|i;*ǓqߗI_]r,Gb%h.&kS{ ڻ!b=U9JD;"CŸP]8Z\jqZk\lceyC!6RNg'js=*#BXmI|DeAΏqg188_7>"uX'h+ҩ:x#Ƚ(ɯo)$oSvG EIVhQuYh_=I<.[Dz> ^xzj'f8DQq9Dq}-%q9d=$_={=!"hY%YAb|tJQ"h>o$*U7y h[Q!w|` Kܳu9+cxo ߈o(hN})J\Ѐ: xlڀ͞$g+JFnϻp{NkH x|rkee]ĵ/rGܪ(?酿K܌uR3.fOMWQAso5y c9ӔN 6rD1QW?'5ĹN\O\ Ѕpp-\ J? y ,\n7[mNp?axC> ~ ~^/AzO60 H0 c&`&` V|3 gBG8,]4p&8.KJIp ,\n7[mNpxadb/O/ڟ(N_߁? ٞ'LD h⤊$NT Gn^H[0L;]47f&.pG8,]4&9!p"2&x< ~^M*3 Ɓ>p0WkWJ0%x~J 6ۂaX __wdCl&`8>>/r;G ƁP0,O/[}ge|u8πI; h2Ch0cAx\?/7A?k1f{ 195< ؠ.ׁ[J{ARWw;rXrWs_I%p+xOo,Wsp:n`\x!_M~~C[`k9Y w8#\p"8 > =4o~ᎀ'3 `n0,+p>B^ |n߁ {.Bd;]YO?烓>+ Z r~Cx B~H,C{Ja n}C<_ _l f?өo8 .Wo~ +s!Lٌ# GCn &ýCLJpK ߁jQ 0돂sG 3з;o`PfM(ΧP.@y=2 ⟄| <06{C\8煱e&h gFs9Bn &!w{ gEtW_WA qg!_AM6p 6N ?_wouTNsZDu wgD y%WB^nwAzV&`7np2 ?O@<A[M&#H zy5]&@vs[ ރA(_-vwb:Z`/0  /jq+AzGK&X6- N+W/ c&u9  2p\pk!oC_BY_u8<| Q-ۀ]Clepy%3dzGLۂ\pJ]WI@)ȿ=!'B 9pB^ EȻ -_ ۢ1rpGBvAy9A~VG PFǠ½H8p*x?ៃGOA> 'ȿj}vQk=>Y?r8 > x_g~р}@n9. o5cI<)m1x kȌl 9lҐ3wn^Aςup܏B!"dz*F y8 > V"~_A1Ncvo; !@^>B~א;dӔ`k/No|<~ DxsS7e |O%ައ|pXn܌pp ܷAg/C99ks?q2p@*[  |ᎂ[]o $g@ ~kG'^$n;w|? "CWзO@xxfx<'Aw E?| |dFDr#-9D| _!7| K`LH`֐!

 !xᯂCOPkN'5I`/p8\VfB<ߔ² ˡkpV@p y.8Vx "-0 nr=A޷ Xp<_e4_-I,/7AG*qNVy 1)p+xٖfM!l8&xiM3ҞW__{w:px wdƁ=18||<N&`_v IU&I =EqwzQn|G8fL.)v -FČ⢼ҲZBb)vqвp5Ni(*] {:\Eۤ^8J@sIUCu |RtԦt[BdhI8A+YgP)8G}MQt b~vjPFq WNúyVf]`:PG.j ]h+UB3-kHN~6$Β%(3;_shlT_ /dgR b)Ҟ$RwT)H<$[[s͔o*WWj־>}1ykٔ%lڏ=M:9Э`)Uwi' dmd)ڞnHvZ:& CxXJٵNloNZFjN~#9d[$lN!b)Nj,D Gq5k5Z TF|jsN(g4`/VUaѴR=բ%[2eVq) -rA[8I5~$_#i'T\1er)eO.&l|Ԥaj3M^KWzӭ$S*1Mkcx GwD2I&=~JMžh^xF8Voe2eN3Ԫm̛y(KUE9/zrԤa#)*EKy& tt$\mjEItRvj6BJDAm ;}@н`)I|k>7ײxzKgOъA^(da W#kx)ctzY}2IZ)B}3eI](`HNNegש,EZNCmv:])uӲ.5)+i5Z> (rc$}5@U6}3k(5gG~|IJYseͫ~3q;e٢EY_kYnlB#d:;5<+(;K=Zj!!='RĿW|}.^1sq2kUt>bScsF~s8h),J_DPutUպEpY~GZ Ujh%F mJQ쇐:ϏAZ'ZAgskŞKܞ(f}5.TiC-#ۭJ=±HS*V[h! yz<QNNjWkߧ+L)%t}N뺪aYFx.5X8ZDp>tDqutۣY>Tty~KϏ6$r/2\;V`u\TSh.VS9Aj=[ICLbjlFS.j@#` SAN'RiQ@wTZ#NM!}1 1BOK\{lD 6!~2ja'xsj'X7>ϝ(Z[-YW 1"+HYqTS֚PCJBnr,#ښx7+s@q'VS>adiR%ƻhS_N N~p0UIqYX.mcL>kpbJ\;}6H<>!b>ۈX`+/ oRI !L31LF[I]2pC*"*|ſARoaFs! r|Qx ?М"ık h! A4͛6d̽>>Mb&ֈMbj#G;_dH_QNOr&<{U'?C WM̲QpɃxCqw>oH'H;M\DZZdpS&*.ZD} 8 K[#aWcJXͮ^Hy䀸s@8!,kl:xA]оrڸO k_@UCʏ[M.mYPSXR.(] ƴiYҢ$EaAQٴEe-&Z Eo 4Qh(ɮܼ^)(f:슗.ƛ|D[R[ GZp,B . yP?tBb둬H]6̳Ř)&jjdK3O:^>M־[G[GǦf5V>N@^å)6Ld?6Vf'=/Ymۖ6[{<ͶklsK3׋Vo3mS{Dwoۙ:O$=(:9{ ovҚ$~mX{X{Oݏf6O/.3kGWj5ֱ\=J ŝ-)TΗb bѢ홽6ZޜNw#۳6jrJr &ZV[߾'gGj:ڽw_36{OWm9xb^ˉy'+mH%/}")>6Q׶[aw} }gf?+(;={s36C# X^,W˱0$;vnAi^n&5S~cz.7ĥU;Ki|m_nٽP7gt-\ָs/c'ު֧-enoT{6ŤSZ;KH>0 tE=ypİaeٽhTրɽQw":aiY͛6,oLIv~o w:3v+Lй!r,?''X>jQ=U1(LE(q_i}y(@LkjV}m**: {} ۽ _ߍ^hw JB@Mx g._{ D.vР/˛=x݂xqA .Rr@}H?EG@m6m'Q;?zk =\ס+,j|`Էeqϸ|{' j1C:$pS{lзG^2#{P8 WSQUn{ ACQ43v7_ᵅ?- LrTוøtiߞBG }!HSFog=Ll1VOsO 5ȷ#5Y=d鬓i:_NWSfU޻]knh|&n< )A~ 3ȟ 5lQPLhs*ojf0# rAj(m;d?C7nH )V143lM$QcSYn~mM(8|Fs1]4Pk^hW%כ#wX+ʫ| 3/-b2A,btcoeS6>Og|hT뒽WE شG=1$=R~Yx}/K ^Nju!ob lYydVa׋M|Q N![K,o3kz)gnџ~D`$(zX``=@X  z`X,b=@X \_ 3Y  s}2p <)1l =L0 Wπ_AYlBp*$π?@2R%)`8 3Jp| x(7!1i r9r{ B}3Hpg&xܟA:0p"x\VǬ/!r~o}5(݈"$Yy'Y1~W,qr"o8គW0 _GYV|\ /Nfc 8,σ@9~΢kx_PhRmrj-zMZ5TޟTkgL~@`K6';O#yhxKg*3b*LiA_TTc*~^ћө1 =c*N|L?VLi f-8-~3Ng*NtOLť]T|T:SqZVg*~e*^l2ud@g*Nu!f/Sf/Sf/Sf/SqLe6OeSqL镹T<4oLm4";*Zc$]H7F⤂zHꥁ,㤑8Kv4 fғ2in[New6n;pʥ؁' Uفgv <Eowz;p$؁_2w+z;pzdU;)]n;p2Y%R!Cڮ,VSh.&`hqe݊=NFqt"cFeJ5ҧ:`N^NU.%҂j\a\p 'p28Eړ ͪT'lla,3Y0PVԧqTj!23I;."6qTS Pݨ! ^+PGsYjғ&5V> /{cjC HAF4!ihJioܮT[Z>W1^.Z,JFCjB1aEs!2V:ë!B2tӒZRũR$0!Ql52u3lcD p͞*.ebLy6.KV_)I[k9F[8ra\K"x=,ַ C3±͝o_Dտ2q/ Ԧxlk'|`ޤ*%*uoM%FN:tTg{Q5ZRzur,ὠTuYq@&t~VVӪ~9j%pos8<5GRN͌yD>g B <7lu!zT/j޶ƶaz pmum ƟGzFm̍eY[έS^c8(>Mq88p'NDZm;ԟ AUeKIA,&bR >Ý¿ >yyi QB5$A!78HOҥ1,WكCq-\]6c|l!("> EgBqH;A(.yӳ_* Ip=cȃ8ԒٛR4;Pqnz7!WQ*k(-q3jjHPA;{q;؅-": E^PD E>PD E1&C'y]f9a5SE !␢e8q$;6-); eDNy(1&V>3Z']ћa'n|HC-]5]'R8BtSQoJoA砈= G1]e8jAuEwϢ ~ބpI_XA DX) =5 wPOk[߃ij- ih0PCQ;mEH꯶;q̷uٰ3۹_mw9@yܪ+lIǕIgз%Y6 7\-rf[~ox߈4ŶBfZ32pl}mw:̺c|s*,=/K{ZᴷY]4sif?16=diمCjFӷ댕5c걥yy6qVMpZo0Wܵ(WB^F$Ks$}tw%kcM\Pme-ʼf{I_A }@+m0u6اuV&(9مd0y46l}G?%㿵q( E&;C~ |(9ܿ| 6`O fcm8jp)3h` 8,8kuBv40HQ."$};ϔVɼ,߰܊fYS*_ݝ`8-hflT-S Gߛ枡9Cģ C*X$o)Q+~yRqp7~L233D8gZ!tv fC3Ȟ֬l.;]ԆRyT~yrji_sG"@=ѱKn]Qd0b΍&ڞs#0xi s<J:ƭysaOuutDsAZ鏝(daOSz *~%TgI6'ZDoX]ut HF,cM*oYDo L"kBF]7L# sfƚ;)miX(VYo'Vb(F c I~]+&t߄fCaE01v{Fhj&!pI:RemЬ"2 HPy6t1*WR'9q L|i5TppWIjJqZXűZX6/#bԆdF[~(Cœj[Mo?55KיH]wa[w4ڰF)lWViWV[` ڶuէcJb$eҲڢך?Jk\r)y%smibzahp}VԸ1r{-x;E4[/ ܂|2x);%c'!#&2ɾ^лSǖOfFX_Jx 6*`T[9_o͵U1 {nT{PoW}([==1/}1V|;15zwzw BϤTx|w\U8ݱ 3MSr }p1@﫷# }y#EAÐȷV\Vn4?^fE;湆ps|cאV] 31*9|*C"=*Xp}nG4;].C~^w\/y'ʱ1+]aQo}Oքs.:ZG>w _W*9Z~wtzWm\˸&_6qe\n[菮cn7^*i:Yx]s{^W>2͟rTg ^"\>/*[e}M [u#2;` ;*ށh0ށh0ށh0ށh0ށ9@,ˑc\s=d7BkIi_LO>H $h0ҝ7K|䑐GCtA~(uȕ5w#qQ ڣ34UnsοzDn ;H _ ~u\ Jhfl[V"hKuG*ْB;*"VvvY {qRzWCv{&O;gCǗ~.GrW%-,٭O{ >=X-wfnbXFK/nwﱓ;^?vyʇ, ۹nBcnnO 99oh[r !_wqg|m똥G'xƺ[|wmH*eC?OQ;s@D_`kC[{g몭&~Y~/s3[VK7u+;eiϧX'}n>Y*oT-ޱձ=JF [th{0w:*wL0&0DBʘK?>b-9ve}Ӎy~E3uӧhq^߆gs)֞IxX#':Ns.hZsA[G’:VY鎗ޝEI~/u55 qn?:݆ho:`Sw|ӦW޸y'kt|ιۏz o.v<pf\m{}+S>Ug':skF<S867myţkmcac7gRJao>Uq2䃾_?}5>~p?>k::җHma}sW{lx"+})gX0!_毻`Q=~-nrfܠG|`|Slo&w^}xz'~}ѪO|j]O4ÓkǗ9O4h?9%|Ұa}}w<>c뙗o''{cG9jV=TkݚPaĴ35? $2`kٍ_1p^}>Zԩ#/>c_vD/o{q覆O>js^O; w^?vs_ᷖ[?S;?m?ck[f1w׊lwn~ݵ䂩c P=X5bp TڗN*=JKՓtC2zA+gY*dωG"3\k$Ţ,A*#4XJ6[E,ʵGT\P{m5W~?:T);E+E٣Is 9:8#3Em xe`j_^Mؼ_?صC:dУ]b(ۈa|@CYp'Fh%צ.ޅx24)]O|=xzKZgq|]~w\1U4nn-I\uU-2AYPT0ys9BIw<;n%Ӡ%OQg?{IyLD>d{Oχ-~ u+Qɡ7ͅkNe}=P㳞Vvg=YOBOgA_2[j%_밯Q,/Hg36kn g!#(c(G?*GR3=6~kL gt +MJ|=9cQ}.g6A)3fh3N:y]3"dXj?]:DeO!n x'>?$zVSِA~\-g?x 7@zjԭ\~6 *:M8s[Q8ۤ$gӢU9dЊfƆ$;+yBcAZ(Q8Vq<6-Ls啖~Hmn:QEJEZl"q"#8ɣqn'g;m 3aYqŅ, ?/~"- JzTEQK6O{v'"Eau_>306z&C]E&BZb.p"Mh]g%ѱd(Kšk]Ml;Xq̇k;#"Dܒmb1+|lICE'|lkl*~z$Hů1{Zlk3a]{W0W -%ۚ;"+NHi|&4-ndTtE-; I+oHO*fƆP"O^I!OdHjGms1=KӰ}1Yˇ̇.uYs!Fj%\_w7xO'oW )zzo9WA*|]pLѢ8KE;Si&J~]=;\;OJW$}L׫\U]Oïb*8("O%jt}q6+*EDž9JɒHFMyԃ :,Y=*.!W8W% Q~ξ(ru@*׆lXQ^]ǢUd}⧦>Uz]9}͖'|}O9q@ʝ}W&=Pq<`>jqlqkg?52H!V= ?7+.%J|zY _?+_~ _-]dgoI9Cփ?>(s0 ةM#$߅NguR>YO!='`Mn5A~'o^w`>$)F=r܍NƬuɥ:v*7zS [nZ?KPK'O7ז?.[֦#CV*ԫ|iY.[¾~([EE?{=0S КN4k(W8rNblf _3_98',rx16|v#=ş}xc~oߘXZ&)T~Xz˿ TTOǚ?5ؽT ;J<0Y@QD_]#rÒ3-(NÏpaVp$6"wok(00!'0¿e}_>ԃ|pGw_.wZ3pו;u^쥴{ ߬ l(vhe{pUDxpemKx}XXo-pK)W^qx7$Xڔ3J7m˘Qy*=b{)r|@{;fquVTV k$v"&il=ێ -i ;ZMr`9S<ϮD%?@:~4p>{?oxJ$3܃ ix9Q (:Z>L^1߆OЂqUԱL)B2ū߲RqANقo bZp:)GpL{9m/5#w0OP7c#exp2 o@.̽sx[ʡmo2\xQC~ euΨn;X $*~"]ҁSӥV^gHG[FjHhق :>߄}b "6m`_rHwAK.]Swl3fw͊.IeKhF# UX;򗔥|yO]څ)pzLE_KUxq ŧ} pF<0m,x1C.9%ۈH6b2_2:2M-,BDŻP|4|#3ń,riȶAj\6 Ycf#8$q%ql :ǐ3 ]T  d#f{ty(3 09Jݐ礢 #.8,Ĭ%sh˓̬f|].EM-F_t *z8~TD-uMC!A؇,g\L(aV sIm8?Ňkfo6cMImkh}- *y>K i;\^O{!%˂f3i&3ސ.^Q"V|")8f*NUU&1ʗjA 0E|Eن%[?`Ÿ5`,P8^X,k ĢHSJ>gF l#hëLտ^`FXa+0ȉD u_ingZRsS–\P ԚDuvn7SK*;"q[B]o)4XKG &nwtww} _09i @[/3YAHF#|Hk"4 H#uWY"'Y0%ד/A a;PJ{ J \BX\($ r "xXj)(J ,ȿ6bexʔ^#-T4`u/q q\ e m&@ٳzD-E%j[/c"jSf.]Dcu!dY_u=+5$VF W;Sr ` ?Ab&yQM "3yR:עBZfV$XO@A{AFRB[RHnksY 2Y뻂 @nBXxTMjʈk~o5|wHC &'^9!cJDS.K`u`[A[2?ur~o\ N ҔH\'S 1ٙ4"9tݒ;?ޭT*<64>&,N -k|Z6p6c]BBF-VRj 8 ?,Ō""VedcN|NJd|vFRE*4MjS9WxH˖IFj[zGȃt4~ I&v6j'o| +g[py4<EhKi[*h_)[zVSqgkguZ7HQ/eze[}[evi摿/}ۗѶ*_a2hze{ֹ\}gYIZIO}UV[#)Yew0~GTs(g1ߊ`c%3+saD0ne)3`>،g.)Q;eX$>|>s$Ϊ Run @ /(|F̝?mdeL_\)vآFoZ¦'dD &hKf-X|r#۪@I1s8`Hn#3o=Й7jh10* `m8yڋᚏ?]E1Y~|$ZD]l$_txb2,w"Xұ]MulS.<^w]nqS:Ėgr\F/v\7=Ɩ6z]e6zq -R׶e6zڇdaF?FB%- tFm@G%V2z6%4ں޿uq6z7wq6z]^i>ڙ]ZoĎw|9"Ϥ_2m"9"(o$>l#n^Bxt7J!>&;8pIJDFx JwwΔHWJ~K\'ZOK$J<,K aGCUmrK#1O_#{tv^H~K$!%n Xĝ߰{@2KmvYaY!ݽ$2|IgI\(Jwt|I|Poe$vewKgy/!v8!B{LUba=$/Ѱ \l-398G:~?p} ]Kiq7sx'xIԫoVcY9Ks{}Խuo[_( sw|Rw#;RqK["8ߞ}=a" ,soM=; Qޮݱ:߻"QNRq|88[_ױzwU2gɳ#S"ATe]:MC^_zG3O&[X828;zwX#DuX^F[8ICZūuC?XM?^^ 3yp² !I6r/SfT}#FJNIM⨴#73O6jD F!!;hW fA5X lE^ؔ˴Ր0I7K6r$&ˈ &.J62 T=4|T}C?*mnJZpTqIe7ɘ9{\%C,aZML'R'd^'}a]] ǡB qnDNp<6Vq eVq SO$hO`,D='DOFdnR|A'0H,@g6aE^/5M]ݦC en"QjE |0pD&s jzbJ 67Pް$~P". 1}V,Z!J^jO`XxY D&J755&>88$K5f8=ə {''89q{i$ O GL0nj;ZM* 6HhfpB5\Y^/} = 0dyaɏv3w@B!K#zOI09}{4P ›H,\l#')0exwwZ=.bZMyޘ6il)Ȏ%/g:̄}"'h\AX,pkf^ PQse3y:;٦z?+ Eȥ۬Ow%Ϣ{XZsi§m{'6iI*x0 PA(Q&On_GJ`FwAn$hz|8kljd 䔬TPUTZ䰮>.YTXlLgROS  1rH$x1P Ն"oH9pHmU+O,Ɇ~M=BrR߱bŅ<^Ѐ VFII~&=1^&WRϧBY#/@gH }s7fv7!*"ۛRoz~y(HȠ#0I8_$ UluJ9#";KC%#:02- (6((y CLN$p%+L s<^wX; ARDSNf6FɩSa `qP ECפA)پ}<\jo6ȾyN=}; DBp$ڄ]Kf" ז4˹gfNz+ܖͩ\cԖMF9:'3qI&`ЙYfS&uE,P$ϢbL l6 2 @Oюԅ32`bbu-{RpAS;c-3sJaȰ!?bU&\ %L, }PiT#OGH BMB`N X PfMO7z*#ʍ=i(z.bfa`K_N|wzL{24&[\m}4\Mf<;_5 ,Z=|=m)i3,«QqZkBGDZ?:fy6/вC߈GЮi|QqoF .쯯o|j?87MK&7;p}~,a+Z32:!}h0I2RW~Z+Y-K; Y.\ՙ" Y~S} o|{P1oMw?bBx|_e#*6+z4|)\v9MTDQliECWa\UЎክ]:l K 39̣7\UK w'*mq :Bq5}!.D ~<"^ABfǩ|Xb,P-)0R}77_4XQ 6 .%@_::D)AuIe2w76*XqiKOXZC|@x%Vc%Z sauGV8#I3G08:ZUؠ72ZE>JeJB&]Ѵ{n/y\6Eq{KEOh{mW=KOH)lmDE}ԶAċ>`j)>Ip6q:LWCMaI;Q(щGP;ܢ{.E||P31$܆╪SU8" ֝XxX:Kp JHA-Tmis)xK0mH:LA^Drv]V3iR*YXF|1ebzt*7Q/ r ;B(]4k$M72i5hTs6V0z5CbfԽS$tPn_b}vnDoUC֐rȆtdńԦpi{tP}(?e C:::1Xi9 nf SH%Fi5ǵrSaT+QlR9PN הN/i}rsJrp쎆upmO51L3^enh4)JSW4kVw vd#&E.\"hp]Ymw zNxu/`<5=TSɪBw/? SUP#q%e\'_|ibm&T 8H-TjqW V L$B7GN ZktCk$ BmH+@90́eS hvpu fќv]XZxq2b8 cp$Ӯ K $E0;ɥmր,n x[qB1qW <+mҭTR2]tq}Sj8dy6sAF9Ѳ?!"w;>;(sEy6:o,/*I^}`9BYB;y LN<,T_$^; z?'ʅ%Gw& "DJs³ę.b' n.t؏`:hM3LNNЎ%=4&A?4[ĝDBЛ*@ e!'B>A(4 U詿e (8`&x@b9@1:QV<C0!D1ݢ[ix^q E|AQ J\,Nį :[pN6nB@nqv -O =9\⟢Ӄ=ޛM57WH-+cr56lJ`P`PXE#+t xB1QR cMC8˥E,b9XLXV&q?7X2o4 _c_y Mb§iPbĞ'9&'!maË, 8Y^/W .&X#PKP/T|)p$bX] $78l<s҃xzEK ȁhяJcd R1W8[S J 7:FA1S<Z!>:r"`[8S?l\ckAVa]n57֭ohHDN"b͡ *~9XˆUjrl`ڍ8[-og!E,%ry[9_ ǡ_J!DM n3 AU |쨪Q&xY8N8+_K)(eMA( eu@:>):\eu@Eꀘ%(YFFVĒ6: ^ncTo0"nsx!!bHѲ: eu@(1: rcdu@3FVDSVh;: :eu@\: qꀸ%%t(q_: Hh+BoQއ\V< ։xhA5y9`[XUxvd|ਈ9e h 2[-qVaaɵHaG Qrl xOc ZO_qˈ-80kM'ʅDxY<Hf`YDmxPTǘՌ7:XypxxK&_7Et !_,nouLl{e$#}2&1`d<*?_HF 3ƌU-ov @:u0S2`x)YJ8Q%Vػ` Lw< UutL#KGoaxleIɌ3g<`c Th"51w~nLgD}駎]ZZzU[tV/^/i}Aќ (taŒwDԒɗq 1gCW9ggϞ8vsw$1Ag;:C Gp^Ws߫9m( sjV|}О-UO?ڕh1wh%Z͏gk?ߢgX2km֏:mgGnvjUbp}]iPIoLeˋɴW&ZzYW]5/-nKV~ڭzeu)S̚5DY2dJ)5feʨk,9mƔ%)L;MP)lYFB\rN5Fg,?IV̚;ogΟO5o%6ez)+e2eʢRJB̛ 7./)2m3~naB#~%3Y 픅Ldaf!L̛9dʂx,t|!)dA Z$[OZPZÙΝ?d >%t[n*.ˆ\Ȇ$c QÌ-pYHnI [@ܜ(ciɴ ʾt>hEd.*4CuXL+4?eM) fP\) # S@ʔKfio.]b$$޼l×EܭQT|#8-l٦jŅQ}I+z- qWF əfxQm,ZF}Ki5m-ئ~!u;C rv+Kz>WთEMХ⵼PRvZIqwy)4x-UWW.} jK~-{ޫ(^ QP>[O-="?(z<"_ϨPrLc#=g2#+-enEJ?#_ed@('kQQ qfkv(JSG-_2yFQ9[^xDolw*QI$$l$sI&qHW2(qĕk%>)m =#mtMi/m$I^I|l G qf[@OK@$ ^?'v6!q'J!RS>HM WeNt] 2\zH3ReXexJwed[,?@.q.)E[D'q$8nFϿc)oki\6:ҪQbxJݜBy^/J^D+xD`eSKvh}}rtVvcrt-NHFWne]:Jys!˭e{]ƪ^CWU` (^qU)zJu^"EM^;ˬs4U߆TU(g, tTm7lB/D6Ae?ߛ  mxp޼5o rХz8#t; 4J\9T˩l̩·c| ecpn.4t/3t/Ov7,c7%3 Wԉ.PXMwmLZx(R6sv+5_՞l'c?ru{e:nm|tYWr<9D(1.eu0!NT򺿅;_,kzP9[T/Myc024UB=Xez4ջ7nCW o hK.?NicJy%p:bzsԅuCgZtZ@7kGI)џo|gx R/VcXiEEK[/To _+<9U娌\X]w|Qz l}t:̵jd &\ M=X8za#"h8##%~a"7y1 I+$9R0zB,`+Hr۽wuIoss4vuwj[j+R-̥yֹeo[ۍ9$Bb`ML0IkbÓX%87M_Z 4G'L=iAB:i0# [nLa}f&=~aTOㄑD^l`Q1:xJ=|o>12]iB-a֑$#d˾MJP40ф'Q${as^Xiy7Av'`w{ʭ)< iuwf\̐&Ұ?[hix%jw$S+ś7lcm vvu5q[{4W]%gwGHz"JK 30JR[/%Ř* "_}7j?=x"W/v9oȚH] .r.f.J]Ďf(=v9 wyYP-#g߾sX o Ϊ+b_9F@P=y|*|۝k+{1 kj V9W_5U|=KL)Lt^W]_Sͤȩ.>ŜQΔS DZ݊4&mx}(M~ĦE^_]hK.u.mv(Xm6k=類{~  d2z׊-?hϛsm:, [i}g~AaJL =J|܋+M6ӦG #/h@lݜӜbOZD]]ݕRx<`!Gj~#p4iEwG ,Yڒso|]dwXeO^fH*YEoiwrJh*Nhg˳Owy޽x$D};s;.WJprΙ^D7wX̉9K|&C;߶ԛO.T?mo1$M#;ed?gooEnܕII7O~G %'3oNqZFcDm9 Q.kWN@sJ8%sLտ/gk(nNăSۇ]Ckr/zۺ?o(x2u|_<{3Wݱ}scB ;}5#wpO: z6_LU]{viḫe=ݴ+{6vyj{mwwzۀ5q-ZMK{pꞋy1 טt&|pMvy;u^r c_.5w,2=Uqݹ ;WgwZhP=1|  _*3C'uy7syyW_o!qߦD=xڡU|vǀ}6I˃&mx-E hv,X8OƢ>za?kSh~*[߶]v}蓏 h_WЖ2gЦ<9C^G~|l%:6vz%yp?9pӃ]ڀv_pvmp~L@V_stj_,F_D߸n|5cvC_QdCI,<~}ozxMDZ=ۆ>4!Џ8/=GO.?5_WK5 }m/@7M0 l'E_|d_wwwB{hZ#\modC]j5MzʿY4Xŵ+~uAgf=yv;m?2%oEVZӾ.0}1gپdG9ð? ;ߕߣ|wus~?NI4ryr. E}cf\fu1?wM݅]3gOs譿|3{9>|~?R΍@n+d4e0ǟ =:|۲_-ȏᐛ%al@j[a,; KD.<) \LYgmLB Cۋ<5X*DBUau!ٺ$BPgqͦuJW웈# P#;ѪtVɈHg]rjP2Cv.`WbGSPp/0ܪȱpW(ߑ 'X!PB!b\#X,6XxT<iݎh6m8JAH=Z$cFh'œ @"8|a_/d88ZRaUVL|NUF B@+$R\/*ކq(*;qS),5Jl+knS n4\Q 0\C)mLWf.6\5pθ%s ;}&i ;GpG_QǴU6{Ǩ"۸[*8ًm0enby,iQ ( rn +4Y yEZiA_(#-h-hroQtU#4J#ƻrÓevUnV$\_z kQ. Cd=%Ԧ-=ӌ{Q02v! ehzӨ@#NY)>?`G:la0˳ޱm'um6˂6' y H4ǂ9Ϻwۄ0`׋TcixX )ɨ^HBH([J*zEp.<qSԵRz7y&?*lFY# '-LBeD@e,gUe,`IX8k ZbSQ6YëvTruu5Q a)*k8D]R_ ~QmyxP];rpQi"nvX0`NjV$V+<#C p0nȰE0up͏ph'Ek]˞(Ez(Q̋-I΋v%$9/~([oy~gc繋=EghZm N&%="~;ak:S,X?zK241Z=Wfԯ3C7 ,fFGi/|N0` ] FI;1LBкS͘ŋ0P){*KV+P&+ԭ5uՉ\}EL1]Jؐ7\RʵGȧ9CH4(jpuT4WJUXh]ȟP1"nUgrhcLiacy #EG=F^ Jz%y5jBߧ?)ߋ/]iOEb uz o 745: QMl -w>]d#bE'EwieE)._2WY.˕gqz@Ts?@TuØgha-l=ͳ5^l*OB0[tٕ2zԻMl29D4((a1@݅'xU]IYS;]}]t͜ݒ+,+kmՓ( 6l;)hۥl"iNBV=cEB#nD fVAE-o(j<w4F<yW/b|m(TiNN<QV$.bGsHe1eb# ʊ7#Qa'mc M#aEAeN:2GPfh=1qZEe pS**W`;p# 6Ra# 6:s0XaU8M#l0߻Gpf3&hFAӥ?p\(ӿix7M1,`L̔3e2!9t __n_8Md"WvG)h'h00 c6ʇ Rh Uj@ q y7-&#Y6smɄJHL"T"ZuaA3E\)ÃEP")ZM͗28g3lksځO8{H2VC2 _=c"WpoH"t0G ^$>S6l&7eg&ߔM^k{m:@zEaL6&T8zWr5Tu!X >- ȏ|Cp9okT#B@/Ť9L> 'LEt0q&44njBRdj©@ˤCZ6.J8g3nE nK$&ΓZDJAWǖsi°3/XNCHL Ȃ^izb `fߖh&ȃB5 yq5ᔪHt.w#>sE+ z WdX+$TIk-2L6Q?=[ J1=NyxbL?vnL ͧe쀅om78Ě\?ѣ3oFψwFb%1o'0jcL45ږ*rt2H1/p5髑f2KN&w${UعX)gϖl%*XJ/jխH >[>e\WtE<\ IcRަx!P5A.X>fp,JOM)+].aS~e )2wntK7-C:grB d&9CvSl\ 8^.Er (o4ii<#JFs2bkn0Ì@V $:,'DF@M.U`uKV`gע}$ <˚, oܵ`tFI"y,Luk=ĺZ7Mu9H qO`.*zNǖٵkƛNN="%QF9'Y$ HP_"Q RXP@-ۀ Fu h7phlj"E0W.pA;# m3]xI肞fc(d[7B\ő.e)MRKSkqCS\j-8N_H]Eo- [aDh}؈bs["ajޥ #>V\ӂ.nO "|ZN˧1<1qP? ?(?3#sֈdwpLfvo"rq1LNmy0m%Aīu5L u\ &FA9v ^ n ]*|0~F8[A=z9Bxqœ gHbvLl=vs|9z`gy=0M^qIoK?FPxSH7׊+n/nS"-CdG ҿ帹сxu+Zu]`hJ.|}$ V\LkyPke9{dȬP\{lJk+ 7 `VXW(|2m2㙊\Ew٢?jq#MJb] (6X2T`S1?0s[\oyԾuv+*X@_Dž/G&NB6Lg?SsJ[T ֒P{\ˣȸR($CE)4T Bهr4ۭRbr\3lQ⣃M\r3(ԃ2,JB=(T3bҔc*˖1Jt -ƈ~tH[EYr_./YrYN# ( ㉊V{|kXiY-đ| =!9}U޲܅x .U:HF)mr.^m]&^UC+y8?S`|_>Q=Dxt#h芗/ٸ4N|[oǟ:Ro:dNo {‰rAk"F\/w1nWM<$nm;&ni'qw$݌Aw%)!;w)ok( λPVyWx!qo&80~WŬD_cH_UZmonq REJJmY^WVxϔ=YgDBT77!07HpDJߡ+k!\fx8h>Y.Sv+c*yp F^NS^Z\//3T"j$އByckhY$ 6%ɷfے`~}"DG~KeҠ\) & >lɀdQ̰WtSOi^_G|^x|Li_˛{[Ҋr?GE6OQqr0YOłv < e|HEZ#W2XJeǯYԂ xZȌ8W8Ηv=^> {yO^> {zepL|C2 2zyK6x6"dg$3?F/Bͦ_M@3PD9E2%79aM3CRDCJJq //)pQ|L>.yGt"'hX h+Gu{7g#M{7I@u`/A{oy\}Gfv݋,7&$:y<\T݇V4R+--;;R>]:#=JRS:rUmϞ=?IN]-?5yT.}ު]Tp.gpusxᬷñMUc}yxOgՖ zx1nNYM>ޮK[)*.gBtx e=4576Je5{ЎpK-B}  .nlq 6,U KOWM].hjs Qq{K=o^'rw_԰9P5C0E;sl c'~9zi;u~<0AExzyUZrۙ߁W18ɭ>lVKCc:|A]žLÑfXtoB[R蝘%EиSlXk>C`qnhS N׆J}\_e|џC׆'fo2CŽSi}q)籬sC6:cbߩweG&麽lI&flHOX0g0_݄OѶ#3CttkeHKo뼏Ct=FG=.|ڐrjeh}}?,o}uxQ>[OZſ6ZrؑA [?fLī~s4"o7fLg6+U۶ǃ;=n+1S܆M 0\AAonz_6YoOWy\7YѹolC<|<||sվv| cq@ҧF۪s߳ ǒ6N.7OmMtI&^=Reg>3F>v{axpG.l7z`}n?v3my-A^GVR{=j]ygS lR'7O2|vZ鷿2O;ko5[َbO;kTJ'G}.Sp@\+P$KG^ada\T(<`06uz_UUI3uIj|m7["rKꅣOYzH%RӧTZ*rɥ"gz9f8\=s5仑|RzHzfI?1C;zO|G"~vBSI/99e"23LB(UzQ\+fwYXHs(NN,J<88@\Bl""I\G@)J{;Dúľġqij?%^Ixq'9_TđĪ譚8 :'>t3VuLxo&O|mDցāQģRH/!.KN!%;?"oH#g 茈)9@-ȿ'ߏFDL~ˤߢ?SDPAgKߋt_0Ə&=xzc=4)4'$^f{O?sb(uTRbj]|w($~B u!".'O\.V2tkHO/dLx%>G|kb%XDGF&$'.8IM\oIډ?cݤM jd@u$؃'&I#VD΄i Ab aweeC+Ԝ2ΚP3Qɟ*-(sg;oNg~PV%#䷵Ek-=dJE>)"Y~k'*m7Fjouڿ5?ZJy|Sؔ#bgd9}G6LpO]p9b;F߇t= ]βlwN{7J]-I{ߣW{62DuS)#OڥTrt_ӀkHքZO\V E:~JUyOgz?־Qg$ڞu?]*\epKW׉3#Qg0nXHcDfoҝVÏސ]=TISvW R}@ґt}qy",+0@?P߿>{3S|ίϲ>R_gL=@/>%z5JOY_gA*}k,3اg⿢D*}&5}&cs_U_t:)% H%1|#k_k]^m  U"Unn_QۂV[=5";PтOܡv&oX%ay6Lt&Ɲ`qwz(y?geEWAT?X W Xoʕi-i rRrGUŴb]X}'xON0;tߊ]=釉?!t1MŌH*cU*'T9~~S$QzQ]6}%m_+#cok?k]iaվgC[d헑8 =*/5a8}B|\kBJ7P=h t㡵 ?/*ݱ@$):)-~n҅tv A,ޞ| /UQ{_67toTSJO3=xu[U}olˀ/I{#0yzިaAZx/H~;}*@ê'*t$̫xbzշoG wphHNIKlqHC|5Gx#C5Y ַ^_ڸzoUo)lޯ;-T''9} [9.$fĢMh[(e|:o~\laspw,'R-r|0,@ cAC%Znwg?~\l}LkJߍSO#Cf(VBi\'p}J?tpWړPhB>Q\dU\Y8 wp֯5} GƄጟhʲѹi*n=2ꓰȗ%TjE8["+r*5F@fD {]Z;5~r)K22m(kRjP -H:e#Tu&fUja%`N2뒐K%9KDpa\# UnaHEg 5!7M\ T5i' 5I_#1/G"FX:8tGpjI ѧN@Zg?V8 *,gӸ ;@mwuݫXӿ ۨd+TA|Eq\I4~*6=D,ގ8_[rLr`-smDk9 ]q,tLҘg!9Art|R&MV/T8MN"ZQ!ܢI9&7Tr)c.$gqHsz9ɹl$ A1t/;sz%$>_rYKw<}+`]WF ^% XѨk9> `;٠rgМ '5ػ؃&UUl y"XM aEXP+W=c]~B ι6oVlӠqƷfJ.~i!|KbWXiߙ7׼'Qϛ.m~#jX,|#j?dTDgК7Bɘcƚ=D !<^zj%$l|GVqX6m(bMaD^^/*5 cx#xR‘x#WVڈp<6${DEϪ!VkSوl%Y+ҩ&%Y+BrجSF6ɀbҍl,i=4m4:&~-MN MJ+.aՏ5Ukd<%qŦRjVee:͑Xr6sSW\ k( .ERa2۽a^?;%PRny"@bEP6Ko@BnĥG1XxTnԬ7M,^`pêZ@ɲzMSVo2K!;4 jOf2f1_0Ü"&R&7j?o1תt {}^[Gli1q"Q +o:Yڗb1̅ta'B <dziݎ2?+TU.Ba_>FEQ"8iҴ%n3*g꼐a+ 2*F٭*r6tO'jT5ݮ T9PՙvM-ԛit߮k7(55}CIMU5Q'?ctoZv5jS2ŀ\'ͯ2z ;xJjE:q<˱鮓7^Wa떥Dùdإ])H_zHŻ]*L2ѐ&)R<DVWFXyS߱!l# $Ǚjcs3nX7vQt)]'.pf4և=Fo$Ts.ܫʶ/.㝋x^M"=2|J :֞ǫkM`raC`M^AU Ufc|F%ըgV <N6FDYVȪRNJE8ز uvE%3r#5lF5hC#E%h<傋rl-TR_K>j=}ZM:Z ;TksnZI:|VAQ8Ց9H6EdcT֨:SYj22'<z>2GPZ5PnWڪSjvTвUӣ~\%%oMFT=*ehzLj>N՜WbvYL%,b\W3XhF A7R ҵ.F5s+ȋ%wiq()N2!0\oN-PhTSubyl湺PTeLZna=pyyJ+ĺ;6y}Lz<_OT[R-R *D9udn_f*ˇ̅)df:Y-M˷/]Y+9)CUm5"n*p0c/q;.VIZm4/SZq8:Lqo6|" L(13Կ7 n|-n-n<*2n(ɔf-4 s˔ՙcBW>f(чN׼{S=Sj~yeFg*i q(y"wia#8 & 7C}Y:L>47l' \L.Ƀ|r0L'[T`r?yyaF!.Gf:7 yzyjZ߼pKIv7r*F+lGb%]QĶ^*ֵ̠IT}X`:2TzZ&eǨ4iM|NcM&Ą.&H&D_Km89uK}qxW ?R  2 ,юc]ͳQQv\d?[=3 xɾq~,RFX17i\j:GIْ^W9-y6#F"1[)}ndwi9,2 T*vr~Ŷ:}}w𾼃A|:aO즻Z1uL>#Wj,'U#F2-`:epxc*"HQЦl-bۻi>!um{߶8uĘض-|6o3 **P58ѽ~ۜg5:/ܧr#W'Şa<$Wtk9ꎘ0FUi}_pTL yKtd}X‰<*Eh8SE^-08K8e2([qX?L_Ie< ;op6ϔ<7`:[=c-^L̷nbk{%[%Ox1x93cLs"DRpxE ZSǩ߬kL WmǚOL YD<4A* U-FOJ|P/xBԚVq*t1Q&jٰ0^=yy'S#Tp3W&.5ҤXh7}ƘKZu]]S_hry>6f&v'1$1#LղYTfpvIvg⤉PR=TUQȠ]9Y Ausg:= ggf"TĖpEZ.o 3Gdمao999'@x0-4#:/M -#Qe4OT:Rwk/;tPH-R*NsrV*12Օ5|N 4zR62V{[M?ZGYI;;bE=ywPS)u˩t7Tu!.DC*<ңC] R," T !<;sáWVi"^W=i!J_GGýZ͍r$b_9Ư>더#  #2`dGOjXRA6`-`E3 _CNa+)xWd{ǯ7(&od'~N^`/Sd{K12墂qJ(8çE8`3y-WI8w1x7P=-2E_eꮽqp|xP(p d%T%0[q`-`B`a^Ub68b.EA,؇ Hu)ng"|x7f9X>pYHp$8ph*,Q|>)j-8`VX+te,;כ4rmm*YB~Oad `o$l*=%h.%l ǁHnJɧjR5`O(?̦ ;Wۻ|`dgѪ*8XG}Y9*8ho+ J8p8B߲I1 ),_g W5wQ5993sEE1Œm1 V톄tcWSG1 ϑJEk$lJ8\ s%\nI=$\)Lq`/ [r G-b"j 譃vY';.S5=]S7KK ) (䳬 9V<| #lna <~XE Pp!)+) \꫘Q:>a~gy%\|'$x4-Y#/EC2`1si7$_Fz1؛$^\xI?_X|Oe~o l6yyx?9&28/ALl|@e0BNl`-ǐ~2^ēyp1=9p)=Wi d^xEW ļ_0/ na^Vμ0/A>ļ ͼYLP7g @Ab8IkO۾#簪*p^JX Bbpj>SSIUqD-`$\ _`Ł{ \v؜+ %^$8b [i BZ ^GA)xo lqpbJ?7*Wbe.ϸR5-"VZ==DU{kbot;Woruq?!1"uN >ʜT^-AUfTFJ/pc O NliK[tYq!5 KT09h-_8˚7,sh \Pᄆ8*;yŁ㨮<͚~(;֞pU,Z*ZS#>T] D^?Zs9m߄j0>u ^3+8- |xB0o.s:K{cWM4puܴ~LG$#ӻcvk Y56Œjݼ9|vP_;+k-lYkSO͋7 Vl!Hf J ~*sUա+홂x`JVYex/Y;Wv,4 )Ti{y?w3 m /Y>5Te*~fxu-VkKhxaB%tv|n]5ĵtAAe/ E_Y776,_l/XҰt1z>CΦ4*MZgO;߶Ș4ux8B 銭~~CKq䲦'T2;sܶR2̬1a˚Tx4OS[_D9z,, ^\Glu ֤0hU17\, oK' +(I5,n1l[HWU}Mږ?MuũQߴla}ӢE-$ՉVk*Pty#Tg\r\Vե>YU-E%UG,oh>Y~p 9#NI:U(1`OKêF+UE +F[@.XR;Qu:'K{f!FkS2F }M!O>{]KᕭMV4 D3HUդ|iK9  ZO3^Y&DnayHv&6.=؊?>30;O\3`y>Z+A3ajZlj胃p|Ǡp]@s;s7yֆV|n_jmֵrIjM0ڄV}rtm4, eD+a(Hq_kmVʶVfc Xn\=Q͕M [Z7ctJ(\Ьjڴ0 жG3V+R vx:RIV6,"0TiuWZs?4cH/4 5!G_ml5߼'dO+r^QX渧P.{iY/>b@x/˜>9<,sGvU#řýL9.†GeN P g׭W7"2xZ<47垚9% Lӽҹ OMt+Z&S\}:_ٹͶ__9!EQΙ{:Mǿk_wn"qxS*UjtOuf|↼ѹǯn:_#qh`<8/zO*tw|.Uc.Gky{r@^rY:Vwu;/7yhǺ@VK_~qO~Tɻ#E. [ڵl.]rt7wg@1|v3 {y4XZFv}&>Nz߫0L S>C  D bF^<4Uy!>l <4+<4o/41~5ϼPϿ,qfSvOO{Hp i }/@zO/ н=H{?lzNA>)@yG@e=HGgw?H>#@:9HXni?C#4-/=C采geHr0?=gqFtCf?>@gW)9 !4ϯυ~Ͱ XT?HTRY~z_}uϳfS4'?ĎwZ7E|s.ͦzf,=sAf;L E=a*7, Ng˜Xtw;Ny%CDpÀw+I7YiOٟ<yqSwb3:34,n8w.~FzFOg TƟxҍ]Ѝl[xu+T7!o[aS_a ?t(Ұ",G>?/AO+$qZ>nW&~4wb[&rZW<yckT"Ȼ5*GEEy"~ K@޶t3]}.Iy%r c-%h/,C9913-&~|$51m@w7daauSysO\gOXJ?0C3_KS'G*= _L~L0_f[Õ4&_! 'e7@%SK 2EÉUI_N~QZGuߛ)w~z`~^H?5.tOЅ8ei*88U'P=4\ 2Նp'%gI;+LV0<0DՐo6~%rgQѢl3/ O%R#"^#nyrph# %(XB\CH2&ҷFz;y)1`?zb+'tO%O C+׈' N oy'Gl#^J߻]?L2k_/%G|7눏]H%'[[O$bx1q;K4֛FoZ@VhwzDyŐC]ϧNdՆd-&ή|K%L<^k' {3V' PFqƔh?#c&K{4l8t Lo kW5.wn>:[Oa[*jimOlHS}_4nZ釘\@7Ll &W" M{20F#Ϟ |2qpOyF3{4YqHgOa = D=pq|dfgOTd>%1d&'e(gO>XG=@gO =?ɸ }[Œ['+Rr;|*0 5˕#}T*QH$gϞ!kqu6h֠cߴcyť3-`̧.b1PKlJ]z1=v3h.Ӳ*e UTPp酏>'YZ# ƴF=TG¡YZԚ_EFFK`FJ~݅ 6U'hJczD{ ]oTbp50ֆ^KSP}ڄh#MauG(Ћţ9EVn|b?4cG>i҈!C4o:NΜ44rM"@s6Ο֪Oq+M^V>h7̓VILRM գ ];$ZB,*2ӧˍajXF+\լjr3TgQŮD肍Twr $]ە&NR8A.qNW9+(OPPP`V]rD;z+A UuJ4KqfAQMDwZwȎlB?&j'(+&,\$> iթ,vv` z^$[ڜߦ.CS^>^_v7w}]yΞBߖt]Y*޷g@rgSY-Dݖ5w `SlYeT~+׳m~M ;섗]LboY3'Qv͢Rp۰۩_mo>/KK} w&v};Wgv,j޷c6,to3yxoiо2ڑ/o殲$U乞;ܷs~L ྜྷ3l۷cܷo' S` 9};1|vZpپ:^ogY )vly< 67vמ️ޣkIǾ1OЫ9@?}C(æ|X(k/cWf=k@+]TGoT؇+517%u}ĉ -5ĭۈK|1w.p8qB>ċWJ Ƹn/q(qq:b3q-Gˈ!>J|:#Č~JZeۉwJz42b.ҍL?Lo$F9ߋ#5鴨Q9\JxY>%˜}! y'h~&9ssnN`Wuψ@\wj뒓zOPտȆdYn9dʝPF+{ E _XG㯗`7qج& )I*u`*LjJ?mCV_MSR*~RӜ|-.yOw7Ay.exsҎ f4 Xm6*UF KGXJAӳa88%x|TmGULh,ol]ҴhXЊUKqd…+˗ʙ+ZZNmj^h,jj^n 4O9oKqq˖6h_pѯeA1Q;}fy颥 PN}[2ca㪥 qX,~ҸU A *cL'e7,6܈L57,!Gqz57.\ܸUUcMK/5ӕPKZ[W>xL-hlV`|pŠr8BiEK 򱲵]ٺ A292>z%rZY:BY*fE+[L8dodQVe)Izekij 9=+[w>F8^zmwe+&ݕޕVwesiޕM!ưoe*÷oe![|+[VG|+[y}֮oe!ݦoek#l}-[zdطuPoe4i|+[Nl"[يޕkee+JWb̐we+,;Eѭ1lv״~|MoӼkZ1moVLre5rM.nփ@4:kZ2״/0)ǕD#熱Ne]nMkB5v5r̩fw!tӆ/>f?Z b0G(6!Ti*'Jư?:KWy, :YqB3:G8+cءP#cxꕮU2 Tu kآ' 5I) ˃#PnVIyfL05q^WE #7BS#1TgVO*S(ovjn!kd/^ (ގ,]ōc7YM/3`bJۂT"#`bJ2e:1*`E6ߥqղnz\x%$F6?pV(ZZre ;kP2P寇 NƊDDa3HP?Rlw<׋ NӴ9N֞FI% H||Wzz\C+,fU;DFq8,1]ff^( FV4\.`G[)̣xSShoby:F&_L?aJY;6JNHځr;0&8_c [>Ýx5ce80c}kF{1q(Pa,clS8F 0"sҶoȤI](>$5xQT* o$ح"32gݷ'}H{MI.I0t1;a?PDɞ sz,Z`-Lrh9v6\8\{SXc:Zkks^XcM[bq yG03:L1u4?dܗҨ>ȤDb,/y `a{=5YwEP%Lɓ8Ϋ[}Cg*/n/ئ2]*.lSѶw.eœr97el}\by졿ciKL\YP[).iK=T{( 6438L]O;oқvaH%dXۄ 9RE2փ̲۞AY}Lٻd8F8Y,Q'] gpxrpI3tJ8\WŽCExWPSxC,YvY_f0x-7]#: [.pYtB%-c.)pM6B]*G2?iNϫcWEi+i| Oy!=aib³yX*[Ky?^cgw=\v׬IU33L;k#z$wT3eWn'3I 56,m.~)8C>CM#nFLvCeM\Crf>)Q*8RBDRo쐊eEq'WDOՄn"#.Z_1r%T"vgfJ"l!Z0̆}M\BRgӦj|-&ϻEٷ:vjY]%Ӝ[]yV"L{[w.q[Vzݿ_G!wOw/v˄7[{;IsfI_;ߪA>CۣBz:0:$ 1NJ8DzϳX7v3\- $^/8 [yS 6IgH[%x$أ#:_k:S@ ާ:_eL1%>ۧTKxN«[YȍwWB~0˧R0-tĘuP.@-sw۶VPP|H2"\g8kY>"Fop5#ɅpPiͱV]]~Û|P2?tp5zm;J*px8Ɩ XpOZsB^ֻ~y݃yhP>/bYv+VU5z";_1ߚ=֒m{6pɠ!C ^k{;]{ϞʣŊu~b-]ވbqGԏ-stZY?$g.ݤ:[t∞ZFu&L`9gs{hjD"'9Id{4߭r&PqgO*9d!BΙ=)XRG3#z$\(qMr`R}K6Xʬ=[Rzp֨Ǧ2m#(*TL>1mͫVZ&q+f64F 0tA8HN 9cZ/n+*6a7o 5C^r;l^`̣w띯R)6=վ !Ze凇JhIZErS)CǞҧxL@] A%Pr^SP ?y_/Scw8Kp.CgÏ?^Ր'A&]6Uq6\!򯍌.mUv\;U]*p+u}}3d/!OHcgzy.:;kTeGQ2:?1@_L/8 iv{iWZ Z;^^^b`4zJ)XGK|䜏 E ҧ_~]8=+#oS#]r %<>E>Cc!;u~ 9 ݦq5?7ƕg=4djƙ^{=4C/W̿tMVv޿/mms$Θ{ۓ<~~1t=0@ 8c~fEyz>-~A&@ 4|jϴ(@[/@c!?AzP><@O Ԩ 5Yδ{ڟ0 ͢G0MKFB*t BrL:k%yCt!:w;DyJeuޡ:a7Ϲޓ $ @Q"* >>gjʷ&_}ީy/)򮅷 -!w7h\]9;|/$|7b-5Kzx m?+=>a30! Ս:|X?lj9'D(1EX@u+⟈ڏjBv ICzCazFNWQ c?Ӈa O`ڶk!7яiҏ@R>AUC cP=@4(L(6gbbøY|ṅ[#LD WGi-XD:0G]@Mj5Naz Y=jB.W\bբ)ī@Hv~ 5؁)L/5^O6t6g0~9ՃbdžCOQflgK[..b{$OE|OY~KGx7=8]te|>HqCїqϐX!;CW~eHx iu27e8M|!C2ːqؓ!2m32?ݗo#)O̔+3g2~Y!S6S}Kѿ'2/eJ̔~1UKKb,,9^S3G^ y`)A}PY2.˒qi==c2.GŤI1)/|:o(_dndc2N_'&ZL̏b2n̏_Q\Mb뚸qANq&p1&p6 M8mi8Nq&p6 M8mi8Nq&p6 M8mi8Nq&p6 M8mi8Nq&p6 M8mi8Nq&p6 M8mi8Nq&į l;%GML& @q+ ω{O!$."K\Cx)"l`^D5P]v0į4bGbo4)?3~m&n$>AI&poQAiuk_RxD$_&$5ъ&v"J<7*S)ثmS^EldˢҞ+70aG̰%D L?:ʍo|W'C sDl>;IOKgr⥌o|/q3{ 13C/Db5x>qv⯈_#)ؖ؅xh/c2#>x:q |%눷g(},9νDM<5/| &mL:3bFL;qHLʍ\Ar-5&zN|^\l^?rٔSk%{bc9=É> 2W >E](C|?G%ڹ%#rc? WYJfۉK;3 DP r塔'S^@<ʗQs?LLw:R ӈ+Z>72&>KAZ"g/!AL|W(؛88x)Ncm{Gg'b|,J|Xl21_Ees-;(G^moFky<üieh2liT6iؒ(2({.iB{~G۳J]_0U}AR$ӳѻ"eH"*ZyAKnq\>"x3 i3S4-]02{s|JڈGX%mDOZ6"@ʮtmD%iL#90d>ε%ܢ/0ߖc{k?+WɥuCLO ,["B+m 1j LIhKx~cwyHة kh 2plS7$۷ lf7ik~leRSc7hLq0Dƻg!P=u__G>Κ;q j":7S'E=Rt`mB*kۜNsǣC 4&)?j.IVc8Y)Ne~Li8~Ŝzt`1/z_ϩ3b`x7uvToeOanqtfeU54(No}}9mX}ٷ )Q|{e0Pm6惃KVf=/Y_7-yx3=s@?z#Ozz4E: n1ewsCﹶdl3 P2OŔyOƸ0CنwBIm@+2;.7xha*}()_R޻{0і/2[|FXjIތ?osZD39|pޟsӏ!OAC@N<8XO\O?Asu;Q۫D}ģC'WW[r/$cՔ'nL88&T+kAț{_#}!9FF$ ſ›.PeλxįXuxuIԎВ\qmu\5|4"ڥf~T4'W\I~[_[%({\ץM#ˁ3ue[|uo JIÖ-k::*9E* І|5rH׹%#*GFInG ?J&4ۚЀ?Qӫl7z&oI,Z[];{ {:pmٛGL 1ѿߟhc\)ewj=51U*]' 8z{Te._a|@J,'Odrpz"?;?rܽ퉭"{\e}vZUX{$NEM5Ľל`6fZ{'(X9O,9`Fv=tɮu@hS6UJj^z0΢mVfkC!vXŚ~ߟY?rUJd׏Q wyspaX]e7䊧C6vkE pkz]:57?[]4j>}>0ּ«ѯz;dpS5Q侲Oչ-{o?Z~sͭkpr)Ô6'Ʈki+5wK#ۥfo~^;_[&GqY 58>k!lE ׌4GNGTuos[r ~;./)Yy=|@IbȀJҞVOEgL=aMHO{;U|_^A[멺B>y7,&G /&%'o+k${Am|x#E7Jռ}KTygG ~ijJk]WM}06sH[Nbw R޵괫s:)'~n{[{{j׻{Tl>aOai!~@o6d8אtZޞGpBv:{<Egӑ :aa `|7w>ͮ3COa'ݖ>V'V'_[I%}C>W>c +>}6r}89{=G>> =*g/'|oq|w= K Cɟ.|&}2~ ҿ~ G}7:yx{oKaO/}[y-6ScOءFN-;>Soz 6ENr?hXr|7>yxWJˑO0ߊNfRJZ@su\ةØgƅP%8 [#Vd#4g(Z% E+ti 1J[C<[pogisA{&W fg3am^uvi]vTͻ'䴶D̃_FvcZyҼFω.&LSIU6ғ3f]DwSCVE.e MNV" BbhG#6?;^--QT>ĞCxo0$hH][v"Z=kmF* {# 4܇Z鈭8"}FnjзhTnqɩFT$oJ윸ue}VlNayXa\v7Cь5hh!\%֨?M\1`Fݾ'觤]y/4ϏT Tj;#gE^{Kq"7ܤgU$|8 L۔&[<\I1w}}ȗ\LEyw0r|S} _$Si=@zYpMΑ8p*P8i}]4.q(w陡EnQj^InuP^A>֣ ؛#FMr~Hv^?| O2f| 3;_Ѹ4*"I`y mmWi[6 oaW`q8v3 Џ6ڍY6ϕxx?Gcc˝v!-9LD2} MfĞ)7޴ H]g#rߜ8/nYzuDFLG%LP,|f*l+̓\|^\?jP:9grw/"g}-Wa]_ tw؇Ʀ6z,2 FաNحWsz;K*G}<0uJ}<qF/.~{@*}D}D>[l23dD'r=g8燑D,!72qW"ἶovUQ_m'gdS޶; tj (+xDE#톐x"̅ni.^nWH1o|%D#<)8h_E厞n׋25!=񤎕Q 4uk/5Kwinw㺛RXf0,?Uݗ+R319Xޓk|oJ8Mh#s=%%axH(xÊgv @N2A#Y/ ;pAnӅ.ܰM:5_-@8`Soj gw馬07"[f*C9ZCō`Kbާ7vOazO`ւ5rWsc G$fc* + &!W M:XEy=UW6 2x)_%`hTJȼf/wAVm8P89UK柱NMl (w"/$fR@)ӡ{Jp\R_Qv&llg$5*V}+=4شUvb2ۃ&SOZ51?c27RnڇͿ|U5*0ZtԓSPaLLW{T(i9jMYC(>,S^3T~o'e7$O̧ϚCtO)9?'j+^:⵶6<^*`#Q%jX|2_$""_|AC%ɼ@>w>j|J_XC<@o80g_hBj;5w38T82|1Tڗk}'+})wu@߮|eՅ7|[~sCNW| _?&'CNSU?9\zuw: %SU6|1U>2W| <ɐON俚F<'LJњyL@ 2o2䞎y6|i Uo?fxH_  l=JC}tWdvȿK `qg|]l]ɥ++w%-4/-AI,B="![huiY5O_#)[s?wcȸ񿠞i|S?P=hJIq),_IN# df0I|b;V`Wm,iwgK3z _+L.閴k3߭d=I: <aiaia;&XM<]]7)?Aܑ&&a;J߈"2"?#*2|`- Lw3Жca-P=]oKy=~8q q$TLyˈs7WYrCzo$E|B Lo7Y bv`4דIJ4)wUL_Ba*Գ DǷįY}`k&i*X>/`)__ۈ0g߈q4hK_RKIHE\K)KM7P]gD'BwĹ g"L| h.)܃;]׏gW2yWo&M|{}.;<,D<8xۈȐ,IeJьKy S)ϣx(O_6+1+Kf\DBc>8꙾k&GB XȅapqLb-qSLE|51<8XI\AxyNl~Ġ=x> ѮgHlw 8XO| T%_dcG++; 폌-ig{8mMkwC7X %ٛ:$-5Qڪ@r5 7 'NTtÖ M>18z6cFdKb&5i kͻ v @$'iAjܥKUmLoa0m` {|sSew(*3zjʾyW_<}N7Ud}Bjh7扣VQYMmUu{C`zoށzYm`m^cA H=UV)aQD=W $_ļ5D׺9ުyS7ŋ;?CVxl^DK_t~VStmUOW|4䬦EEM 1LuYjY!v^FUk耬mQoI$˥wrֱo칑rJ)S`̓}}zO^4錬v{z<7<w~j|BwAo㰒;_z}UTݷwCNALv(lsKzU^dͅ%=8CΠ;UkUzLA ;[OG4ߓ()vC=?l4/T(ۿDݠHvE85/l|wBmZLo Ji{9mp.lEwsi흦^ 7V^i(]8qea~}BG㟿AiZ}un &gRI,ZM\oWkOwk6.@Hf7{K7sɛ.L]ItS7ǙpqK{=ni{(Fc~F3yK R؄Z/><=gQ8P3Hfdl,vcr \W[Ti1p>֯ޚu41pKr \|\A5pkMt \ܯ*Ks \̄N33pQH \`74&,.Bf$mJ5pC93prg/<M=#g?{4E9Dxi=f63pq>i0+M \-Hk~\/5/t#H׈kXHIf." &#@0̂ ^DOq ӫ e3Q~#9:6 Wr+ߜ+gpnimFc5{'i,>ZqX`qhPZ %ԩ V=j Vg8.~khL\,MhgL-X35kΗnNh~l6tVp&ƑbJLK`wFh+v si:Ca335RP°OU2{a}xHt<ܨ"aBK;a-~FXvdB 'Rl,3@WSM\ ~:P"6,Q= lh}@sPA5Yg` vR-UՆ9jaÍ>U~admNS: : $/n*,#H =2.0&˪f'^)6@Nsza'a*NXh|)mt1_DewYbޢkWkU}[ŭÎsn"rHJ}`'{(-ªoMoZ&;ҍTtx!* qф&;l|ܧr7I/n8A3_\exű[$T}I9~0q[Ae7d;q9xRM-WS" Sl(89En+$ v:yuh@;GH) ;mas<⪯/ŗ2BB/QƠ٨b=c#fw&*mezMV="XJ&Ԃ4_7Z>Ad M KТ+ń> <ŞɖhkՃ82LɜIeaAS݃.@,jn>oc 3 BEXOlR]LQ*`$l)(B`Ϡ"T" a`QT\AET<9vA>~q=͍sT<`Vy ( 'bT AemziӯQ.iS}6e.p5X^abVGH88RYQS?"K*A,A> !Jp48( ݴ%YO)9k@!d/2^ER~?c0CtDgjMg2LSYRpWH8Dw$I8X*,`w >O6K_IS{ҾQ pN/BKz`EJ[FGtd/{,=/eosNRݹ)b5S.nIXO1hW{xTQq#yC¤"pC%&,p 0O3-A'2䀋$pO_-]/{xz9&~7RC8)x(J'zJv ?nNQ)|5)`߆1C*<\k`F]v!L9:_n$Ń|GO?BoD/Ky_R+N ොXs@N>H -4k^}Bc wKc־ĺ$XZ )x+-隞RJ%ٮ-~k ~ +5E^&IoZfTNz}[R#4F>Ed~S e<тТe`iDDF.fx92XL19 K,J6ۀ$pN\g 3`I2 lbg#INFl*'䶊Qw',Ժ,1[9tn⪄'M 8fAuIgl K6B`eчH5k>beg9Go/V9m޾ZlU[R:C_iV\k0 VAWo^W>.^մ<55y5O誗i]ªP>h<~uVPڹ`|lW6Cʕ1M1 UuRt;8Ӟzڰ6nW% SZN6~}#huNjͲϳhS.SzǭSC/ϟaډ-ԯCb**nj;qʜ&/K,2| l|ma|nd2u3SaYsYZXXL490t!'s+.5gٲV:sNbK}`h -XP0zr-@9'Q:7w9Abp =σ24fN [ 7UU9h޸a>0Jm.{Aj ѻ=ͯϱM@zX|=~B T>~)V8vhjs xmhCJŸc `,Q4d_@:iH9h7`m+*8Kd~u8CkQ756>Or*h6)ףD~a'6MTV.Z1k-5<[lK 5~)-%>84SLY b ~.yq~,u]1=[ڼ޿-:ӿ||D P ;/{0~֩'Җ+!JL?nR Rqȇ~+&#NCc<9.%Ě[fkJzWݜ//؂QkntŸ@$s +UjR} _Ow^^_bW9[z86߰FIp>=xr|p@?$QGЖCJo^MQ|_i҇--}.A_٦<J7ɨ}t@v^Z?=~z@># / ,<#=7]%7tFw!;3|w?G')l p<;@g[ܦ\4z=su_qe<&fMr<ł.њߊ|v ǻZ|+}!\{{CypӾr<()wDyu0:X,\|d胻#ʩ{n!wb%FYg%z1>ay{‚a)߆ȇDX420s l/\|ig8q&9ӤRu]`ui2>wn.lLjmr؜V!Y_uQD871/!"~zW?p9DE! Ebꥳ\98Y#?F91rc#?F91rc#?F91rc#?F91rc#?F91rc#?F91rcy7Z'Pqj M{O&~@MĿzQbX@,%IĶp̷cmӈ 協Na}En}[b84_ ^@ 7/c͌ħM⟈JS_L>^}QE,ILM\ |?FCgo9Q_Ga3}r[)Iym &csM+'nlG[݉&3R~ O!Ʃ28b5x-NpeM}^,3_ j,+G;H|z0R) 8O g\ߨVȆl|^e-TIp; :R[7|e.t7lϮGgR:&R%ڏY>.$%[\ kZ6|X;:!V;jE.jLh}odt+SU֬#vEn'&& ցиO*e:up{ZV\ oG1YPxe~HK-IZZ;H,l؟XP{scT.)QC%^94wXٍ[=e/Xx eS-fc_sfw 57e`Ki;Nm7?t@-slL^ʸ_Pó;SkJNfcp+P9OnsF[fm%Ua=A;ŚK-<ӟU׹iR6n0Q]|2g, E*gj3{ȌMRfTvAI 5!6SaKӏb|Mk7<`Zs?7Lu܅BnxB%N>j(Iw?EkDʲ 7c$ssH6/Ȟ.D u-tÈ, +#_vGW=5Z䇧bPE#-Ⱦb9#Eʏwp5E,ELEި1D8^a%qQGͧpN$|^}\eXfanH]Ǐ2XbE\uoD#Z8|G?jqT;#Kt8F38,E8%>gķB,83O#_kqv'neXFj?S;ZmdC+9$+ `AɈ6vuGn W#a OP1V莞ψlбub9 :rׇ?rvշ0FKP(=q*d9]jN/칎{؈fEO^L0ANprNDUdꃮIzg,9- 9Ef%E.:SXf:JD牔 uQ^aW~t(gvt)vW T,\)ТST JUJr|eY-pJP0voq?q6s,VD6n8! Ȅ=|9ݜ㨏p+ "xܗ%jSlOD"xa20,[4ք}>0:^ϭ>ЂQOzf`L#.z+}59rjsQ/ tq Fr`k H8x+GȣFI8:Ûx2vЦsdaEO-"FHl q%.'kg9 )6B}y;g:ec3[nWɺX?&t, O>g{6Isc5U=Cu]63&&%s'3>rGc.'3;'lw޵9W_vnNbNY0OPɠjr zs$+,< @ǯ6Gga QW~%<ݩ b-NQQe#TlT%v+x. t 40e `RS-rxM7xy]a[`{ " Pљq. *,`stǝ|8sx GYg-S Z+,Q\)D6:HZvB2t@=S K'~vNd\0oQUP5+`"W #_f-U`_]OiEaJ󄕥T]; Tgy0}AN_F]}Y_X5oZj]Ӷ[ ;/w]i#Samj{`&]m 0kɛҘ)ڤ[+6v>gRJk5u;,{u=]j~å;qL#X$V_\ZY5{69K.Z ?sć岬dF:~ͮEҼLZStOQ3g΢.! ֣frWFNT,#lRU]tVc).^fUZf_0oȬG=K9N׽^09cEs0 /р$@% fyFB|QϞ*[ŭ,^1@Cb9ƭ<y5 ^@s z\CQ7nwt4}L7e/[ʇ}J<C`-Y2afW TJu/<~^\zi?K Oãe@yS<ڛynUMv) p&s*1\ǭU `2pᙺ]*u„ iXYesf cL%/qJpq|4oLJM&[U'qsWªeg0DIx8gjOp鼺su^15kjjY')w*q_*-rK`lTOGg >O0 hyOY/ K~xf#2e|R;B-OC'K>YRC\KczOYzg25ES {nR[k/^jEqPs}Aj/賴05Ϩ>оgd~YH,gNFI ,,s>KYU,G1%V҇g̛yG>LGA^TsRܻK|2jOg '|Q@0& , KџKj ̀i=26O閙,GÎ*;7y<1΂ÅT>&?l$5i>-1ӷj|gz?}re ̿q~_FՆp~#aC8?8A|)pV7.=L 屦p|Ng0Q}PԷR]pǦ_&~XHa5\ Be<$Ӝ!g(Ñ!mI;bՠo>2}71)?9V 1Rvpm1.s!xAK@?.>Ar4|rb=rÑ ωxlGA<888pdV7!n&J|n 'gWWo&GNnÉ)&:!)Ĺx-W ~D#7=`d?N\Ci+Ŀ-iCFK<>aYLx;a7#7?G%CM,%b)? _Rf/%>ow'~K#W=XDU+7$wd /[:%\r?%8s L Olt&#H\H\Nx3qsO.BGFNG9eL">׉-r;GO!kAv$G##I% ̚%KG䨲Y,pD:-ܔ()"VodGӄQM>ͮnSMd]Z!Tp'*̇kڈg|>ެFڑkvOjR53w7>b<`xvRUְ Ĩ&Q'v1<{phs(5jH^wPT. 7E\nEd͓^kS-nA`碵=?k&ҡΖ~Unݡڽ--6L7k?a{]V87ADcԐ Z/~ͩ1wOƳcOLvkvKRtD}.<'Ǩpmycno}nC/&Ȟ[n٠So9 HaDvw/etuS*C%C(R|p??{ɦӪkZ:j&;+nؒ8|JG5YMO8yD˕mѱN.sw6 NlԬߒ]Cr39R%E{D5IGuRń]3j.}j֫ҚW+]z!Ou.G.9oHk諸]?T DUuWg7܀wYP2dhwXئnjO)Bir'4:̨5Jz{4>a뗷f_tJ//i]ˀ-YF$=YK_2撂S*=Ҵ^sd9;+[RCޠ|Lk<}hȞeX!*y /Rv >Z6EY5F%TϞcZtI&qz6_ v;CR,?  0#:-m'$a' Ir08!!^_|j$V3*ʰ8K{îÛ8>Ps\'!q8b=BC) {>̞FCžCqaǡ6\8%ag=C0*žC\fÞCl{> {>@|b)|7,C,Þ_@|7>cj=+,>Cǡ~8܋v>&vqJMl1-:6]eg OP?D#8'% qZ\FxgJxI6)V՟b׽57ǾXh72Om~b&$ɭتJx]`Nc*JFH06v*fSN_SFb6KQ ?}X vC49,78Eâ%>D=bJm (su;-aͧUW۝vh?¹x#o)p2?2! !%s0='wR: F$Zr:FMh͓r@w"2ɏ8t*c''{"g`<ŋW<}:;^t[X^H׼|:x/Ũ{˧/|SyUp˧|7ܫwmCb7i; 5+}р>$FXeQl1 śSYBI,3j V oа̯ lƜ4tI˓*/+UݾXh6Ӽ3XQQ||-.y_ lb`Nt^ĮK<}EDm.I'h$NtU|6zģ:Ԏ3-JbWKL`DS3X꿭NI>7y|^ 4'F~־m<(3y׾RPQ-D_PW' vsp}T M="X]V ī}cBxs%D~"AvfnL|iX_1Fm Cax֔[qL>x<gBNAwrCvN;˟qC!g)FbNf3 8]9ܯZ&)4B"%]b}˨S'P3Wⴤ V(O<-yReSx%'!3X-ŽGnDȍȷa:N)_Ǿ_İ2t%ȗi WvED", 1yK,i(s*#<UnlDjhE8*IMDTքDRxcRM?j7(7wN*mGפ>OETq^ׅW^+sUL$ H9Gv :QZ[훬mƺrMw#mu֟֡':u.d=ЪX=;Z걁:ǝEnb=jVnldZB]M2kgjk ea:7hʣˬ^78i}6/'2O';J#+o寶;[SN'~k X;܈Vð[3&+ٗ<jo/x6D6bQ a:;&TUll€c殀jKj)Gh?@A>>2*z؜k'>Ið:5# DI<M:%lEЛ[`wS]ӂdޒC{4ҭHƔ1#$㰓&4'd2ϱO;4L Hthz )y- kTR;18 ={ I1G6F˼ {Я2[kr*:0 R ȇ(>'Ch ~>m2)-:"UeC3]'jAWXf>`_GsAK܇a=d9􅌖v- rЗQH/賥zna?>[N>KQԂϖ Xno^avٲ"w/ 6ݚ+{ b]}wc7aϫ` ߌ£/P}yiq yX;cj{svjKGϙ\gAŽܛ^*t0Z\$ƯS x.ADwKq鐡N+:̑n}rG?a$}C תhUc ѐ:8#|E3'3Ɖ= 4 o ޓae(\?e)GO_AjS{g:,0|gG}11H|֏Kt$_BӋ aC/RW>;7E5Eɔ=/t yRum\ )0k(NWi_""/\Yb>XD,&PObo!y&]P@LFE,': )ęo'Vĕs?>j>gdf $@ArIB\E ( AL-*Dm_ojK^VAj-Z/oժx+**Ug9s2i{}Qk9Yĵloˉ?#^GJx!n'>E|YO8}%N,qd'K>Y+8}%N,qڛ%N,qd'K>YO8}%N,qd'K>Y7 O>YO1O["|"{,JE,!j-9@E,b-WRfʭtCCABR8\:WP>Aro$nJn`ć^vH伐Ă2(b%ӧR^By5Kx-ӷ2(?FiYLz3sWL?tnBJgڥt#!;#>8z5L_B\ Ro7a-Ļw?">a[w[)  &LB:CHIę ?!$~Ou7q}UX~֊K,#J.ot#gHXYQ?=и<:OTD ';I 3~1s2Ũy*k 7#?s׿3Xy|hޞNe]dfg.m>m(K1xJwvE}ߦNI{ a՚#(Rcz1?|Tdh-^ijRGqhL6J 2y>6#}@'~ajM[v=ߞf|QQ~g!T )}~(p|A@[{ DŽ/ywYjkfhx>C2ݾcŪ_N6iN>ѲJ9uDP5SإՓE-UPђJ)nM Ddan+ܪ6H4=lң?hMk]X3waz!kSjt>;+V^Do$:>T]T@^By0)pF,Dqh7' v;=Ӱ8tN])({>8~r]JtS*2:#nj}{z85uӓ!+,gmZuȾsSQ!OUSoZyoEw`<'ېaǵ 6^{+Rm>/GH{Alsi(B;V|R9#Mί/ڷT`4z|iӥ'cҪ:jޟT^k)N߽e)5 ,1 3vwbTlČ g.Y6~q~ Rxֱ ;YFPAU nppr} cQ8}'MbCߋA)tP(BDʋ>d"m2)` P,mObž )BɶFWq a[e18>1X\{ Hu=~ѵ6p7?%aK7T`~c N CZq Y &B,8/6 b'-.\{CMGOl }9ڊaʍ2"FV;d@Qxr >vW,$BX^Jjбc2!ػH<$Zl9ܥB#Pi; |CM,9-Ί8 C\PRfdA=|DʋSmV\hRBՄa؛}rXiOx}J+|{"$zK %ٺAl SqiRDʋbҞ*R~4 "_HQX9RQW FSc8K=[4ˢxfO< { 4Ϟ}HQwg4^ѣ#s*4vEd\mcs8*}yEؽ:F_kbC 3/Wet[XidގM{ٴYbn+1Q83m}x=3dN&Ut}[K`Wx2emߡ㠉a{0 1llKA}Iﰰ¦Iڧ ;>NX.F×U٦x4&p$>^1xL|< =A5 )#䀁UpPE;C x͎VЏ߹DNPT|/ׯ c%6"8WNwW7_A * FF PfO5MߏNP=Iv'x{KŽ{Rq{=qx LGj5mٲB?Zt>}f+J΁z'>JSUQ4i*vlJ@|CL7J5iDT|Q,5 T|QPãߴ*{+t}><#g5NF~xvvJy. cI9-UrzȼjAf Gc.QhΉCOfgQe(d~2׫\LOlc/8kSL ^'|^3Xho g8_7 7RiO{^ƦvӪZqR] f@ G~3rϑ15[Amt=RU=Ҭ_S]zPe\[\37(ȗYFA@by: \nq8(x0`8CƕR旌ah+'0ǩy1grԪOEp:{,`sH|ܓc+i۝jZ}lw1zetHUT!3F%GeLPʧO0_%X7kL[_-/%澔},*Hw.USp7a~VE\ h:ӵ^':M+{爫f9 ʄ SU!.̏oWQIM*z5ŝ5]6-vO(㩥afIܧ@"417՛qxp('0Uq+Hx:ApV=t{g7;P=E*z%p <tH_JFhwg,ý3u'5ɚ_2/q3sebwJ. ӫtEU%|V6mѼ)YӸfgrܳ9FT[T |~rD\ pvt/28 +nUZVYǴbB(g_Pj9p y[cfxU5J\뾒X&'Dc јhcB n֙x_u$(Ռ ҄dw6B7b1+UU{"xpĭpbTHOK" Sg8K \u$}Ǚ7%(7`saC|& 1ޡjVa{4UBSn5x0Z3Uu;'_w텋G[Na\ ;ػNw7̓١4qX$IU~28$R 3JӬvz8h]%o(7Aj_,Ic=%c-thy~,p-O}o|}mt\EU0xDL0vCź'Y/i1 Oq>pc kWUϦӮY`P1,^t.!>Ю̔ ſ;@ئ: &l4pQ#nqy;MI؝S*baGWZm%0(`L/`xSfAXn KҨ̆\!W b`@'Sޭ-g h39!=4G%V `Kh% Ap!&7q;;Y^6lnd, ف2UnxOأyqw c$-<`KPO:pYP^.akmQ rS'uO`yjvK,6žFp I[3LxHT;*/.Q/-Su pT8nl@2 : eܰΑ9`pugy>A},EF@ߩnN< KEyz}7M`&d/nZA[*IGޯre:d nvA[ReIzn |F…g,w|?I8|E9W% mIV9$>(aЖ38V4 ] oJ*ݵBgm=[upHۃ:6Ȃ<'^nLWKnSPK<[4nU!f0`) Igk94*U|}fKY,)pq/6u?5JA@>4 @x}@ml,Z,Y+4.冕P*n2n >)!ǻt46ȡI&r,Y1vl2)i>Jz(Q -.d˖Ԗ8R'0XB[tUQ]={&ipA{ԬiX\YƢ˗&+iF^1WR~9sΘ<5_4ֻMK_ /\"K2n3ݢ.DεGueQY-_qN& +T:c̭6f$[a` }fu^~%$\ei]5h D#'oZ]q;f֘sGO4iM#"v+3֬^93$/!T+վ5jMZV5)I\ȩI/Y`C]Q2k2z`=B$Rk}L,7q)q|/ 4q8V34Zㅫ"ҲGGER+7&KwVZ4X5 v%6$1lpqgvyVdY!.t/~@enzp_r Qζa}\ݶ ܔsFʇ=N*XF>t:v9s AoGTm)o aS8Vۈ)4puL[)ISnާ7@M͛*sy)WޜcS|;~ӻX⫷njj]%<:BN] 3o}zez׾2#I{p_ҫYcT@?8>,/ z3ǫc$(=9G/<7]? 8|adydi#i(C<2^=PC:rz~M# 9œϵ\Η~O'Sd!?/MO'3]1SL/'} \O/7ޗ^鹏B,_"\빧 =&~ ?AOAH6SA'r'擏mMh=vN'yʴt=nAL[m@OUgPTqX$[?ܪ}&CEM'FrǫOz7 >S.ԪHAugGXqU_CMĪ6 > z`qz`z.7DU1bsaC`N1 -| T}@u(%/7NT@urR|3!1>h^wK؏tp!}gX,i'lK%j"3q>zSW2SG`N݉'7$>O|s"G=)!CopC:mĻoODXKqa?Lnpp /gmW7/e<v=1;K3'.aO$N ..YRYR?|A}TטLr\sppTp|\+yN9|dTہzxNXʻcnn"tk'{_)OkSs+AN@%Myqb;s)/|1&@x7)kďvFl l)(RP# .ekx=^OliǷaߋ8887[ϡx5V#ĝޗ)"u}Dl >;1uNCC tu(r_Q@%^IR/Dة`x56Ŀ!vHmI%tr!)dQq&-k $0']\rFYh|ƷCO8 omj=L>ia㐫6fBc8y8*' c̖CՈƘ?FKUKJWt$6̩a1}u'D0I`M/D7N\Dmӛm*ӷ"D8$;@D+?=#,$b毿Wr)DnGjY/H5[(L49ڸ>rsȐ߆:=4Ѓt>FsA/73{RŪ8GvpSnw-jjNBg%0@@&']@)5GZɳ0sȽIu^6YJ}RJBs@XNCOWZYzA A=xSeqqGWsOrvvA՘hgľz|ܲS8M03Wh8[eHol f(o. j*Ձ[]GM@sT5]*c]!VW],uo[ʆ  Niv[1|ɡ&]{!'ԒO6,w{m5cI/ 7moy2TԀ5{;z;4ʮ{ޟo$tnq=9UxyV"s5uSjCF(O?w2:l傗9'+j~0m0Y}A۠+E&[7A|b QsC]befV% d7V (o Ul0ZF8KsSD5BZK E5 }/R,z8nŖJHy1 Sf4 Vfj` cu7(. i`5WbY+X[* PܡŲXL ƻ+WjSs/3+xj0+P.y\ ~ScZ ۼX+WrB+Zu i`g.,TLqNwHs8//o[pUNh~5-aBo1]&`ipgy;zy AsbRW49pO%jB!8qV ^?g`Y|Dʋs8!RjA%Խ,AvV'MP2N#C\fVJNдptv#/ ^ vt X1,#(ڎp]3:p" GP%187;T~SK]'.Ls)jwJ孠[~7gʊELʵݐv*Bд_ Ud6+XV(_ fUaz@@>݁(]ӧ-Há#}z{By#D|9anQ`hީ!|_) sޡTPŷo44[wJl< Zt8A%t>=A 3/}Kv̀OUI'ςlmݗHJ_)áaD'^bV)|[Ĵ^^뎌@)UƮ"8dLFbe;ck ZĘ@,Tf, fk*OUQe.F|Q:FQCp[L(;SP}vNIN55ˇFbWLWaUF۲SjϨ\UzҢt|}RJ/άzGTFX_S93T=I?R^:"aSݲLe_Nj31U(C(&(!D%F*v?4Hɇ ZG@@UnNDuћ4~u20u4h@F%0 ho3X_ҪUj0 Ԇ4'yvBS)t45 8]'nʶ t;Reۤ-:e"z#vzeTTSf8M6pcj gJ87z 𢡄|X9m .aM#׀o9&qi,`U`b񚼋:80YbVQ/A@(%^bUR mh<:QLiW8n@5rķW7%W7ſw80w9`q q9IdN!S( 2T8OAA  N((hJ8Q60GA BxIgAXD4EȷFZbsO}upv&HL_K>kPOR0Ku scKg^ ާ`Q:{ m v IG$>^_IPӈN[Ci ZAu&$=Z+4nhMzV]{$uiv`N" JXe֥g[?!0g3}zHH]CG{d9 %H9$/b.>p!ְ|`^rױ,xna9, >rϱYy|!=-X I8؟JHU]Xe9XP7(|An:`Ď@a,brj0ת333:sф$[T[۳$ؠV jgA{TϲGۀiLK5`3*@P0sb`HIsZF 6NXQeiOKZRZqelJtu)~A:RI l"/RR^J2uQْ$ J8 IdpSXp4 V bA- > C, rm~JpN Ms*)A/+<%GP"*y֜RH^LSt3rj۲憿}ty=2"} -B9qL:PR I8\.aXU* V y,x> ײ NA)wD&# l\zƯgyK6"Qwޖxx)S\S6sG_`/;<ځk?gAYnV|7_H=1 SSڙ /!+W$ y557rɧjt[V^Q0gU;=v 8-΋(/Z0F/||#7'^ Ow#]O# Sy7n5fi>^2ʧcٰ6ɲY-RGLY߷:ߥֹNhη;YL'XٳN#A|_x=b+jO:^. 'X&4Q&+{YdaQت8ZI f궯ɞb-{VΜ`na9g=iU5ٞ5pYgu 24Z;]OQd m,:u񳭮7'XK:~O+w5i sf_eLZzEvu>+:flk:{[*x0^>\5Њ-&mVF0~~m-b_XY/$Bؠj4fq/.:uuE31Wx5l]P̗Zub˺OJqu]8?f}YI'U5e`=vѮ2I[u֌&¯e}Ԧw%ps].{M'֠YJqj1+f`F뀳'ZKnP!5iWu]'r𜅰87Oت)l'v+|kVuo?OYI"Bj=5.l c Ա]]áJL,:-l?E/eL]ԝg,_pYK V%W͟lʊ)9,VԸrëݺhj]]K jvI#G;etwGHKWI*1"a_"qϝO;KuBM;Nd0:cJ7M?}ɺcǂ ~?e&<; h@^RPWWG~Z`Á/O1:?gb~%K:vɕ>|5|WjD[Fzn$s3TT>sJӮ9d#U;ڣ_R__7A1vaK'8w4tZ;TSںZYעw5aNKoԧ-:?4.S~ژ1#ݱYN-mbl10?|Y'>:}w9.̘\aL^>eѴW,2|a꯯i=s/iCF]==Xip 0c}8Xytϝ?Zg!Η.?rZӫS~?e;6̯ZbpdU#u}̝_=f3N~?#ţ&3r40(Q yexg!o߮4vحf2(öhHE7d=;CZU|̔66'FH|8cfl!ob߆*L51zn@MqO ֔*T c«8U,qGU.MkL[[`&Li)o_q.i 󄸛:s"RožNi +%;i+}zgFܶz>C }./6Wif_y[Z C/֯wނ^q^xc(<{ԧw̾vwH#I{H_Ww+JO?5׏rmE?:{%]aPN}sp2X=0tL>OQ'}d?ٻbt־^ q/5#i[eG5sG߀y矵[=C:XCfo{8xdاzhG>[Vyd\yd?zOvJ^gdpVy+}yd|`H^\wz;lk$O~'huQ8{\a3]f},һ{5!} Ƀ}>yOg乞LԿLBO'_kH=G}OdrנW_n3u?O}%CvdbR.:w-ӿ_TPZuA: w;D~u Ct Ct Ct Co;. "5?;ӷSznl&8Sn9[l7Eodxj&ػ)ۙpyOwoO?{AiЃ`VX@4 z-MS7$Bl)$< !wO",< ?^“^D>YRYR[e0p-g OO%~|DMH#› DqW?#*?J뢒cg_'cטq z+ 1g3}/ӳ>(.؆NC# "b_b?b1XNNA 'VD}'1v1Zb1I\M\C\Kl"'^NHĵ?|q!<7S M w] ʏ">C|"kDVjoS~kf)N ;"n"?05O}O'2[=PR/OvO,&|#|K}gRT">#{kCpqJ ğ&w!bShb9qb 1Il$^Ex7qo?& p}Cc3 Feğ?Ѝxq4q*q.q)q? Dķ#!~F'E+"v {' ʺ@ G*}1I\GH[IQ/9BԟVwbQ>rɔS>BY~=q/f뉎0(?KO_.@u-XM?>)#y cx)ąeԫ|u/򵔷fvDK/>V'+Ro zʫ)|)MBy+[d|b??$2X1BEO*{R6?G v&$_`/Fo!>J|*ޤǔe|9A|bqqQ>򙔗R^A:p}@zS ߠ#x,S>Db&&rq=blj SCAϠx/&-ħ]` qq.gp%V??"ox4Bs ᪈ 7q_ L% pq=Mb%8VȊ*ݏ_R:d)竻[;[EխkfYQ/P kKtޒռ?-%즄?I{RƸ-c=ӥ,bsArkbUrڞ*6;[T䒰֦gy;/Fy[n7Udv*0!#ux:}㪾ݔSe浚cYt uZ{MjgeGrk}LO{=Yʇg~pBs`CG訵&xfgx÷t tE_ ݛ]{*_ ;j4?,x7YМך~i %/'^m2[uR'| Mel[>>hʢ&F <_fq>ь k/,N4Ni[}LVr;Ίpjz=?;",jJ5#pjF]%k/4^[pFoն^Go"gy%9Ⓥ2ߤ^i%5ӧ@fZTy\cXk]Ljڅ\k.ӳ:;b93gYwuoX3;/7Ap|-25EtFu :ُ nI?2S(:ҎdK`ω\rw{Z 8Dvžf0c83ʋ5eeRH.IJ8c%Z|ѿn~}+ϩ9yavHބOeM3WU|0R}§/`h0 0`i!cggO~ۭpb3-q{q V cƆW+Fv)6NQi}+p8mW6}h:?pFp#t9m#zNHDߺ8ܥ]N.mD rFUM|9U Z,!d崍Od崍-v9m#8]NHy]NNk5. Hq;>A6Ġiz]N`.m.mii%6_QRѱV Cv!r(#bdwFd@QHNXύa!;N[p7T{&4%5JjaS0aX)NI%ّrrgg52 یqHCB,싯g#0_<6'Kf$|#TU!V4|F.CytЩr Gi(UZ(uFJ3471} ^/sPEgn4]\/gnzx$[f37wyrd(%^H(c+(\b7; c0qsp؜vvv`xkH<(!5 :RE/ b,.T:tb}@:(:p,B=^P3 _1TM{" Q VaNyJ5˒$m i>\InRq&B¤"թ8KX:x񣴦9Ǫ> >hYF9 fR{H7P ttH:Ca4Ps(;86]"]0']c:^t\/`lsK(k(03$>OW=0a;<ˉ /Ec/ aӒpTYboN73mɌ G%gK8xc$lI8)SuUo+/A@61M;t}R 064JR F].rTq| >ŎwrYA `%-`D1`T6K;vSGrI8+V\UmnL M]su\m!y`鲌:s a! t0> = mSp+;lK7va',78.jmwuytmYj⨪iJ8v ` [(ͮo07[qD.n0rXFUp[s[ݖ޲m`WiψtS#SFQKõVkoRUdcXX~b.h:.t`#` <`<$pIBb/`¾#eU.9$jU%I,SgdDŽ-+,aoĥh2Q=8Q먏ϩ iLMf0= 5"\ ܰghp: 69@@\FPl;?rŦ}եv&)fb)8P]ή ٥zZve܀ư]lam{ت[v}FkVYR''? 7k ɖMV_F! ȳ = (827pbmֹG%{ڝ;d.ʫ~n2饉iUJ.%d[,4dՊ:{J9zw>zA?YxbÓ UN3ȇ]tĞݵĦRjt.ovH tCG/_fAB>?w^۳w->01Ѿ&sڻWJ=z5'U#>_٫}O[[XgB*cȰ>#caP⑽Ӑ#cG^~zd ?+.37[=YƍO~'/dto/SO.x}ܘ?;̗]P9a8a8fII%:zj5A rK)ѱ6st(K qsҹ>(&w3ݢ;7}\9e YKƴyS^K*fQH!>G`C[8CGD [VmJ971}A`7 x@lbXڤ\g  i'k"06o%6p-} lԾ8Kb MN MA%>l`ү+/MAiw6j2JBb Rt؀ |11/,+K*p& ۰ZpzhW[/r } q0bq"q6qXGx%ω&3D|QAKBKA\H'#n"n%E|M^")"&!V/!n&DWo`E8#O&η$"u,)RZk(o| (?JLy?"(r ʧP^ByGKҾ 7J{d6W .^h+u8徔S>8hC58gk+12f]2^#{Oc+L Qzf:cD.#~ kO$c4EL?Do ^~#)K? ڴ:80Kv::_MW!Dܝ%Jyq?m-i!:E DbI@|zo1ݦU%q%F%fEd"R~O@b%l&/w#~L F$mN^ >% VۆC HiqfA~wÌ:ݹ`3hc3hN(OM_ v) Doafhp.V뺦Ϧ S-[[Hl-O7o軷9U7OY{5h5Xi'WfO5^ߪI^ҫVeG_?+E|6yw3rj݂5K~ޚ֭ٙM֋,%:*FsD+fckV`epm=8͵[/שh'};* _ivLJfxN;TYTh4JJ=c"돞8С'9'7mܾ!8 =o~'.~o/݄rgQ+#znIC{!Z>WCC:2 \OfnE< ZF[FjwPcJҲU߫R7b37w5942F9%`f\;ٞcq{Rol:z_63*=/fy\7JeD-T>Z Flx6N˧auː'V$eMxeCVM..PY&s!4pTR~6Q2Fsonw5J\ð+v㫪ᄐwߒ,GȮ@IH b f$EF*T hED^WlVVKP-PqA=]t?f>?=z=a\̧f7΃%2Γ@1$i|Fˊ䜭ʻ _ї˃8*YF8I.A|w {!xqaERl SUOr[l|8NB3F!;E(Arv#$ƳAXtN`6!1jI0!ɛR׸BQ[Nx|c/fHdAJ!);RI*ۋ{ }#p&B}.k ކK-b /j2AGRvpz I9άב cIs>I T#]=I|/% 4.PIbTU , I* PrFFr/>^|ypu~Q$KzxKZI &}(rpԧ+I\L~'tPv'8g5Y#rBmK'~4Oؙ/L5@ZD=ĀL6RVXNҺSM,dϜ8;{ԁ; Ӷp+32(+J~O8f;!yb E! _V9VҝNM Vr9=5-juDkn+9nvbT\V @|ם"!]"xdw!hzj>!/Rw ak\KXϤs"/?~X0OrrXu1;hQ3,@Xn㩲 ""~%DouhujZDp^#ɖnW-Z&EnzɥN=R,Q=-r;JQ""!WDBuX D ]`I{[Fk Ҽؓbi`u1IfL\?e@S]圢r~~C9󒽜:MTVbMxQQOC:-F;rMZtC H,"No K oꇎxLTJÌ;&#3UtFYQyrɴ=dTœHQ2oG&A^1 \|m G˝\ c0v~1Wl3:iCp$5FtC9R@}j &T bY%!@#/bQy!sD<9MfE# ۹iA׉8j-QOF8{Uٓ(jq} Q[Qdtg 2uviNhV(IF .oPA,.ΓKa>FHA|P{ČG>-T:a3\;%'AUA60'~5N+Ta0IUL"f9D U P"76Ǜ(_Yb3sTM#@$X$STJO=ؗHRǚ9U5p,X_Q?C})@ݔBoA((Q.=l:JZ`? <ң)ؖXgzb'kB>/RQUlUlŊ޳fZ~*0Rյfβ{G(%y0n5#e516@Hh U砩5W)z`JO%cI. h̋;yo5QFo?!T<#DzA .Abu<>X!,Rs \,h]$"ZF6!m%GC8Ab24=,RKl!wJ0:^ eFv^%m'#p=j5#߳DƼNClv^Cn.3%YwWp3.$^%."e!Y2Bt"3UCM\ƹWqiNװ@t,);; L"OGEHm1R)6Lo\H$=7L)$ySs{[)akId@dS;% ]ͭq`0PIggN+.~RuMoDSe9ڎ5mիWjl$/J V&}ލol?߸ ?זxJ;KO~B_Xҷmxu5h=T-|~aϘt}H[)V~y=ryɋ%ol'ٳaޟKR+=s3?L/ɱ2U铵zpUd1HPh-Bعsޤ-Vx= E$oRQ߯mP6Ϝب=~>[>ѓ%߮O޻i~` ڂBUiW/jyˮRC,}ŊzV/מUѮmD ='72qV8a{=-/kwM!IDDu5ӧέjo Z?L\R^Urã߄{nkEzuŰ_Q+NRNi`zᒢD-F:1A[iĉKeX;^Q9Nh_2!PnvOmkw\.+Q)'0_d.1/f2i˗˺TwƻलSu9yL3b_Se,_=׎Fc0W}jwZG֖b2r%}x=;D^E-aƪVsDYDZ-xjV**dyRoIk=IVԿ3]JP5In5W8Yd͊zaT8OXR:VpݹRzx5MZNV ( :&BԒN Qa c"kjovQq0K[[r#YZ uIuMUBѯ])3ۜe3eV8ibvwk1Ѹg". C6r6b1\fTE$~ v6=..9`o\riB0¡vo=oLq4N3Cn;o+W^! z׽Ӗ ̐ 567~gS䰩?4w ^IJ<$!/C -XP{qcW3.g9D> ;g^-/{Tyss!^+w#⥫V<~IƩ:^LshYVdqaSy Ң-^[~A[~mCtFn+=3&WëHMݕ\gqw+@xOUl#g."И~i6;]Hw{_k9q,b(ʌ+^[:Qqagk%4 W=_`l[=dEIu{mͥF4J+Jg dnnt_j-I+ϯ aXnG9rKB ΫbwM"i+Xέv!km2d(l8;J8Ygja&•6yB|\ sd|S&Cm2P/dXj&]b9<ߋm2ndp-)Y.YU~n' h" K[?KN9%vɅ.yKq~v_AfQ+^%?\[.|%vS ]\/rɗy=8:W` *?r?蒟X{r+K>='GHy M^"KiNT2ѤE@9d^6>bղEĆ)C(iE^"XD[Bhi0_w{aL|>eTOʼn\UFؘ+ >,U+ٹDx9K*#4ʑ< =`9 =T7l-JܠTP#nQ;bؓ)JF5 b3rFwq:{gu]#c,KS?=bC^jYR|vaM -wE'?D11JY}I(QpV` 8M'U/ŰFVHlE Yӽ>w4pMXO{ X+wp<1c,f̸QG}\oc8戝,Zo`y)+CJӌc."*Ku,;dEypc1'ƣ˧}Hd9pƩs8E,73Z\¸wo/WƯ8<-He,/dlex'?s,f+b9#D8qi}?g1||1cS*[~q2I'I#g0֦S{-dy M2gwFoaxyMW1b|703 c`)C'K063nf-nX$ྍ-Fi"p1-@&Ix̽{|?>ɢQ%ꪱj ! ( ɆM 6`CX5z+JF"E.Q~Ι뇝>>ysl[ga:l W/ÌLed 6_x _Ɇ>~:F ­*> Wg=u%aK_xSqlՍMh ]uXe,qH ®qpZ:=߉)ܟ!\lQ?wR:A/p5;\qkNu&.<ו::G|?ץÑ5(gpu!K(4^^A~|l 2=@.\' \Jqtq%U_q qru\qkAO:<r015]F&9aŸ8t{ ׷ h'Aeyq6wpOש@cvu@~u1oZb^󵸞aqBھB?[,^5ڡC35׽'B <8JßAEYp}: ŽDZ܏ WC!$]pGu&\_밥G} F9'uF }Gk*-}V[w {y}@.HsNGأrnsyrkĵx:<]G~b\G0kp̾u~em=吟B>k#n7RVH׻:jq ީy 垈N#l2ۋk*.?qh7?߳G@ap}?>/G9u?> y '#UG=u~_o\t?AznFtq߇F < 2iCC>>Zn?$\G;g<a8Dx 4\S3iF]k6 ?1ݯ Q?gSq]?LR¸"8-2?fOuIatَW\q - q],\;q}HUrv:!f\vn2%W\.p9H4~FX!֑_Ž\yU%igsk|QˋKG|KWh=Z^[pa_JV WI_"Ll jM}ϱ>a4myS!Ymo>m:=ٟƳL.p6͇i{ӔI|X2 8T8#ӟ >Z6uyᄴu3+Xx;1eCNBwF<}#x) Q˿qg8ڛLك2׫,/Y > RQS=sxbDP6?fFXg1]9 b=O ~:p4=_ *_WB9ߩyޞόx~g1hy/ƻCFUaߪA=-_cۨ7 `p=ێɟ|A})g2OūaGD+&Q?m25cúA+:y6VQ~)l/޴߯|_tb {?V߭ؔ^_OsRQ^_&~ _rsT/lRz0qh?6!`?eʚLyTܨ:*:$? d>|bѽD(uJ$QuVJ0wv?ysշ}1~i]6^.C|kWDuܨ o]ݤD2{fش?+L5~ &{m?T~7$O_jORuB|{+k';,9_P{g3W{?Q_>m=ꬉ?Gk}G7ovbGPAf郬#|:<Y 1ykY)ćA߶y6v7^\{Sx=.E}sTL}^p<ޠH]/o}^ޣx=M9czRgGBNlvv <^SWb|wbS\ϖ4xG-@a:&+"Z#\yzya?oyo[n5{-Ѕ~S_^< ;F,IM9Ig)kCYFo)g-S_C˞l?}q-/aٟзk_s[?eԫ3]h0Z G5<أiF|ލkYw,Ims*.WsǛOpɴ}PO诖6S7zH(rmB_3W0ZWs*{/^|*D{5>^9D&'fhO 6eιZ{e'w.>a^vgl>pW{/<$p[ 1~%p)vY:\O4a꜐T?ՙ ȔM/j[c/= \u/|ޔ3n⏸?{w/ceo=̅#Y#~;Dg^mQjsym7LxTnuc|`6PY.a~.o&C)ϽEz8+joӱ 緦܂|:?|Woo K0?ۗع l T߈{$`|y_oiv Y/5\uJES'ZQ^ ʻT9L>ݞ*ﻍ~hWwqdϟRqouo4y\-첇5=F{{8sO} }:˞8Δgu)gBOvrbx[_:?1wܐxk>`$vߜ=ƺk [}1W}jlz>rό;=ki_0 b|͇} /xiEx=l7Ӷ7AT=c%՟3\C?q 嵭0|:O{Zx?r=Ĭ^χ:|clk= ۖ<>j?ŷ`2> ~ڮ̲Q=[\C#\G̲೧mOvg1ߏW1tOW>o}mk]D})T?߾6?qszN u02LyDU̧]/7#nOS` ;P_nlZڶ7נKy%p}BK83~,򷽬?ۦ<' a/mOWp|Ny~`k|<}>9{7,ٲhofek/~>̍]I)~ǔw|&qϷ|G=3&ߏ}_)F}{?-3u<{nΥ&#>?o'AܵϋʾKAKf.4Z yp;ZƿLyAzt7gqkp(u)0$>.߃ ?FR ]|߄-m蘶mL8hJw#j)O4#`x;w~3{#zc1߷hAf.VMycFbyca;sev횏ƌTWͨ Ԅf0fTTUƌEfk*jC c*E%3+*13JJX@IeՀϝ1ISYR[5ryC5U1s%5~ *9AcꘒCk%ե\2Jc'(C c쨲10:\^FaMu):z|Mtq[}UUeuIYQ5 T:[:8DNxg gh;:=?s 1ְL"6$9#[-$DYqTSU[ڣAYɓ X4vQ32cEnFEUVWa&ΪUQͭ.Dsu: %2\(ASK*~#/w2ƫ3ѕl E.aD_TmRܦKylsE0෨ zaT>诚[8ndUY9ŪP 5,D_t Lp֣٪Ʃ]ᵪsrrHZC9xsEsP|¾[k*dÏȣ3(W(w0 ^TX8S+a贼 hQ:xE!+:L䫝W[Y=aFeoͭS] 1S [*7ZO-)w.d0R\k*5e;̀q߇ 50(UOW*h[{g!0TT gG\%=U!Y2SJjX2h4 lcRuBlnEMa Pyi`Nu1gvYkO%pEjfJW]R5`&`5N5w ᫬AAy_RQ'uM 'LH8b\]3O-^TZSVACF!br*-w"WS2.&) ?UM0T+KA,$Զ cXJ V FتP< dz鮁VO3bj*֝CtONgyv?V: 2Uym .(8b'lQAtLYNkэ7Cʪ_TT8&}1-+bCs;`IvF1|JȽ}bxaHv; sm֌ʒY2\%V¢) ..V1WV Օ ڔ]" qr[V*gVTad\a9Q٪R]uM#CڶU`qo'< %0SjK4vP)8/>`mӭEsΞyP,OXP30V|ZoSsGB´ <+A( gz!'nU1 Ah&cT0sҚҳϒ#w%Q_+`&#:wO4j%C{FiN!nilT|Ϙ) qf$\*\Guι3B}/Dsyt+fwMhF9< +NKp?gYyP8tᠾMUÇŋ]Q<7[ɝ?a~U'@ĀZh̤1#{9woCwy:3JnźxUy<`Z+ʉ{+KYh`U}(izg~U/O;xh0TT#rZ7OdʣSQ |%:u?UXP++e "V O4vTv25"<6T sZ#fJGDZהTk\XY̴aXђ@ZV̵ Q т~s/ 42*>C*؉6*j΋gQ]5NSp^J5.;؈{> -,@l-T DŽ'Nl9ڪv ρ RȺYQOެj0j0X2|o'z_'8[{2[aڋWF ,*ʊRزjung“'Ek!#KϨ>\lh"f̘Z`13:cg;Uf?rqI뮏+%y4NI(>%_dra$SF _ #2j #aȤ\a> #EB0)0ʁ1ri<4r(oWF>eiPMriQ4Q6t[LV(l3cQIi)_7&Ө|4SvF='Hi,Pa>P|,,0Dè00(|0(yD#GW`Q^yD90 BY BY)SO9SV*O52)S?5ZOY)J(KwC6&Oy?e3l7[?m.P7()wVOOy\ )?!O {|S.?iO '\ )aǖPS/5%OS?O2| S)7O Sno-MO|S)aեNO S~)1O)?WkOS~ )};OS)X'(%L4a)=}`)`)S< vr<)GSSzMz#M(Ӹ24PRcLXXJn(iRgm8`XAi+)O2vʓMc 4SbRjYtJkxritRaRfF,NyiP3ݔ>%?м((GF2兦Byix)GFhHkyIo>ʋM#4PN0lKLc$EX)`u2ӰSb/uJO9SOY )SOY))gJO9SVjO'OY)*O9S׀ZOY)?Oy#l7??????_?J}/?]Oy/SS)ʇ?#QOS>)+?O\)r5|Sk?zOS )_ʍS)ʷ?VO p {}OS~)??3O.OS=+O5S{?~O=S'Bc$QzG1R(z /%4dN9cdPxL#?&$n̡"n̿t&̡N/9ł9Tą}8G0Nue _[g P m Hl z's _0^`/'* P ,m` _0"D]̡X/ _ t9t[E@/^7 E¿"wE'nD'n|O*U'nT'L' ~P'.& ~\'B'R'.{ }2_p/ " _p/ TDŽ_v_#w }¿/_̩Wr=`N>b~)S=L!'%n̩H'n̿w )d/|4K@q`@>q`"u8G0MG`qęiJb\ !%PGܳG?q/&H\D" ,O'nف6_0MS`/]LSX/ wi[E;E¿/Q/Eoe }៸C-?q%?q;V?q?qe?qP?q6៸P?q?q?qv+xOl^//;__U/;_¿/8& _[E?`@L_iDodw:;{҉g燺Zs)dg N<8X0@>qaą9tg I\L)KI @K$6si |-^̥&H\D" X" N* RX& /tD\+D`.Uq/KW`/x>q/^7 E¿?"wE'nD'n|O*U'nT'L' ~P'.& ~\'B'R'.{ ¿/CoE[_¿/S*c¿/x/ E_>_/ R{D\D]2S0@2q4b/q`.t6ęĭ [5 ' BC\,B P0BtӈnęJxK̟2ӵO\/ X$ ."n,O'n ,V+EtUE!_0]V_|N_p/ nE0/E'|O.xO&៸UpO"xO\/xOO\,M'.O#xO-xO)]' ^# =e _EoE N_/ ¿/GE_¿/\ & N"ӵ er: $wN# ϭv $nLW0E"GM\/a`8qPbtąF-x$q1q`Wp.qL2PGz_0]"_pq/g`/x:q/h`/ML4B\I. X/ ww_p/ ^$]2é៸C-?q%?q;V?q?qe?qP?q6៸P?q?q?qv+xOl^/d _E[D>ܰ=-).|SRSohdd/腦cPaMWθvfD棗33fG"uydXhS{75۷GѾJ_vm/v[.jC 7Lcdj4{3EH%B9kV7'pMj:ΆKwb󾻡IG}㤱'ap0hQ|`׀ IxR>kQ`!kV~o,z1IdlߞЙ_Qp̛s2]F鎐 ,ݑ}q9_{b>N=vk=ZђYޚC%֏77im҅)|v]K߳kN Q^Ҿ*!f}PU{=(ݞ/C{ׄ?2-U˲==RTbI2%EsfS5ɺZe~>Ys^ee6 [ Hs,4Xj؟T{ {^/,>ߟlf-N(-բapuLΌlZ.JwqGyzto>Owwl#LTgu2#9$'2$TuRKe!H=LvIm_$~bui軴q;9q̖.O8PI>B9QhþPH~, Ha͐L-eu(ànOWcJ$q(k~޷8ӷ^KH 9Aؖ_pȗU0ݢG*$L2tO?ySB7SWy^n@{"k9ZŽ18ܯM6j{ƙc~۽U<=U~ҺUaGл';/NWP&31]􊮤=`y߲*U^( ZT|6 >)ti5>_=~RO*jW:9QZ۞gƎK{XsÏV*ŏ7i񱍛SbbFH>z%EybU@ "_Fw01qc- yBД' V?-tX̩U`qd[|ljg|-6c ߣQ_qsGyS2a5V1]n_+tx_jڑڸ]FQ>%*3 ǤLmpzdjVIQCXV?F6L+F_ڈ5/GnB*#86Ɋ_2i1tyl2Nomeow?Ob~) {ѰYv(&1}j3nC_KW4z&<{[߲/d^; Uy!O˱_iIZ8W*l'>ǬH,lV}0)pKHFtMTCX{[He3(ZaQD"ݴwlt½(\SSVN'|hh)u}~ Ho9t+ohW>ozKv֍^{,}p9)QCm- H7n&xÍ$:%L Es:]Q.TJ;SU,z{(z"”''Q>+?xU[],G"tjz0=1s?/ȍQTgU Z 8U2Б^h'Ng,^0`CGΓCwrq߅G(;ʋ医74:ZƱh]rwk=ǫD'%:V*7Ƶs'YAɪ?C6Œ~->4nc_:-MܺM w,r~}́MӻRhQ2tJ="ǁ޻y0Jٷ>׷+RR@@lZ湺Аh8*\C޷uRٚѱo02#IV1؍p7jYpxd 2AJ`eB6iTcB|SboOqR}OGfIد<<ޑ7%zN8Sy3S-`c6r=>?7A_Տo!"~pFկ\C_ןSsAMXoYM N:ψ<; _֨Od1Ded;=S0a7蟤/GMmB{8I(5ݘ[Tzݯk@7`&"uZ$IIk&xϛƑ`cSW}հ3aswF#:1}.Xyr=;Sz6a]矺í罬{=ymʆNͥ}(JhkٶT)S '~V%QS `&֑lG +L=_S+{HlcVhE]4\+o`GRO_ y9gowg1@ۏB vʹAݿawŹgWf:OgәP?qjiX3̱?p;ݣwWɨJ,$)ת_Q5w۟`]P^\"ﭓ'ݪ7Ǿ# \ZGcݭ̾OmEsQ#j[r;>D`iYp|0:k@셍 #KXy57|~VC 'tFTæX[f-&!FIs;~4"l'b2< Xvş( .O.d*eWΌ\ < ňu9U_ 8bT2^讣cv >=>U$# l!ͅ_9`C/e2y{SƧmSir+>!7?E1#corT&onx@s# /ZЄ$;16y&;kvV$y"認?eRὛ؝W53I>%ꚡ,y&%:ջ3fö /{"S*"Ο[C&ǎlOpU/ğ$CSf6W71gGsf߂~܃n6We$ '^t\Bc|'WEcfE=I{//8퓻zщS';vEϷGz?֫ƍߚb?dr(n GR9ϋQ(ː?✴Sdf3߶}`<-,Oo @nr"Y䴁*~Me>zYN79m. ͎5lQɑ^l3T7bpN.}NJڸq:姩?v|_F-j3'>8D[oOב8G |EMBsCFht</l8e ;=> M)\$T%EF'cإnkgd+V _706«P'o^7h:~&_#oHD=arz N|{S[z=d5b@kW,+ +QUIz7gz? uQyB4 zVPS-ʓi8#Iֺۻc!]^ <2NB}m>Y}j2/ߴVYV&t_ꡟQl=eٮGaғ|c3 _fh`d5OQk}s+Wv-+El2qg.-KkiBY::[u`t.ʽ/wg/2֑On̓Ϩ}:\bxXg-M'HF#}i+[,}n5?Y/;M},quIe0_0ZgTS5e@] 1tG<>2˶Ӝ3[dͣ6oHl_hS%2擻ͩqz_Ȧ6E597z0a}*,wc.7-3ÿiJ+c)yqA}c?mb k$^7ob4^Gӎ3FaI6H|_P/b/o7s3J$S6t]1"쉏у=)$OW}{ʺ~K #{{E[^⼥nR.*6ԤHaڋ) mct)k_OsI!*DgdGd\ } '~ _GfOf(]hخXui˖}+K-#X>}}MaAroj |AVen8Cy/, NL}>~DrHbo$ş#A4^zS7 fOY`Rh֞a$pnyM\3ybx,W hJ[[c#>(ءm+ Y`&4XpitOͼh1U;+uhfqy>5_Iߥ} ڳM5izO}*}QWQdCPTљ4ْԦ5z9iM)oMmjMm/G rW9#$yJoW}vY{N J ޕ6?֦_+9-u<y@r1[Ni'$啨:)p,^~LX)L`R$'WM^D..Y?L Ǝ"^E#߄_k:N[wIك?${p0Rjmd`=ޯ6`S p6˵cES8J)Fah{Q,4ڻAuf8^{ S=h=dd?CmANjd?.O aVx=FZKNu>؀\c'aݦ֧3SOAZU۰C 3/6]Gޱdj2m*,:Au ai=wGce:pN,`0Fb}FfuO06Bø1%vBCȇՏp7l-(+2ᯋԔX>lڰNWD1@X8W>H5.p.끻U!_a?k索 Z]'lpk?2NQ?0?} Y)kԬ <>#/D6 CA6&@(td36+26낱 iC8tޯRYX[uxhzrA7 ^XcdMMA??aYR06Qsfpr>T'#֥u;fm&[1Pd9ON}7"^NGChE#k2uN{V _ (.wY4ɐ'1}smo{-o :K` Пx7zɱ||{)<{}Iݥ|p/>ҡ^T ~A]W.Ͻ@9.@/KeT4HTH%b*-BR DŕUDvEELB6K>V]窰~,6ZD]5!"@9ޤuE79g̜9ī*۟W\bϱ.]}b*h6IȉZO$Lu(u]q~޷(E_P;`K"6;.VXzuYvgp? #!"80A1Cf02L_ |_F^\SHZ 3U8ܓ<VW$$nY O댟4@5q|cګv\ "S\PltE~ wwFÖta:|p+Vw?PPH*<<\m+2uc9CIM 6ͿS@֊HOWr'Ū!=bjzh`Kؚ~/+>Y+qW,R^͋ތҫWy>ꀍ 3,"*Xd׶߻w{F{g78]ҭHX=j/°=6A@+_d+a.OJDJ4#/t'kd+-8_;ȵԜs"Y $`'Q|OlmU/UPd9@7'!uiw~P/.725Y:J9vD=< $NGL24|r@OY4ewi5ksIojDYՅ&!hiY`tlf6<}M}&af,LA фكS315zGqp/:~2-]r{Ɣ{qSs) 哿>S^6Lu9ů`|(0%wz3US<0?4- \,8W oS$Tu&ڛ:1VjA晷Y +0tsxem)g~a|SIgMVgpg(۝A7@"mdD#*;zN#>+d~;xk&o: xVHx^kOi7O#1nT:ke?G;l5G,PNVG,R?MdYOO1r&r~?I후woG@klJ3>MN/siCK A$cx3Bkxt[|EvPJ)ZE>9ôY>F"$|dٿn[Cy>ٺx!8'OEP1U{Zc>m%_ǙJfb__ ~z}X[,Lo $2Ci"~NZv_N;g?&'Y178 .oAV #D!dO-yϥpt,A3?8^]= 8xl,=jq l"ſ3 dx}|Ǟ$!@7σrriLأ#590"e Hs ?Y+#?Te Z̯_*rTJ}4U7=Arh^`⌕PW'{|]H?V52CW `1*8B붯.OĬ얤~n쮲LfivR5tWMo0I5ծ"FĚPhDKRJΓim]QsXϛ2" njWd_0I:u#dP>'wS`qhՐ ᦇDXJ}Ƕ&"it?lQdUE{ 2fLOxAD 뽂s7E+6##ث#D[~ބt:?obWa7=ǥolP0nUӞt`Y[ + SJ5{9v*G%[d9%9gQ _k;{Zaus"/(c3YUy<#a9ix2]e;Cx&H ;¹yIN]Ch߇ |IbQ7"yr1*AFS 7O')l*7u]ӖrgS?vwdq*/ Jε;N--L'n8񢇗=.ѯ`'k}2Q"mrQu4I*Q/akOw?)kG r ,@7[-UԳP%&H`2뭸MdaHkOۜOQ_-M3xfj*?Am!~VQE1'ү@,40x@DKO[hQYg4k&;v"RozQP1yN'u.I-7P4B JUFUv6}U{t_P'NBmKm}Ƥc4;Ŵ=!<}#icsB>_yԾ9G8>5[w'h@$:o,j<^z/5&&W4Pi&xȭ SfRQ{jf$f󖊰MWSTe80 }xd}T$[u߮&MBiǡmlz o$#3ѯc-h QcĻޯ.xޗ| Ϳ0*Կeod7k<|;W[ӕj|Yh Ce  vv9EMURefB_X, EumX8P%ϿZJ`ӔP]9b'y2~hG"tpYP F4U<*9Qn4 H­BK0~yĄ>L葁phIZGZrk{>*Q,,#46)@x<:Fdf9•BwmOuvOuc;ޅf{v>R9\[02$/?b{({b;/mEg`PFUt68sv|d;tkv4{5g#u=p|-Ր<щU$LC`v#.6ۅ+ /! (bLrb]=9PN0 ,>VHw[ba?G;u&0EKG{fBi o._g]b` cyr 5&8xOI7"YXOl˖5nžuTVw΋9ʗ&}M`5A낈&oeZd H>WkM..KӰ;Q^ai*}A-o,5\$X"^eݝhJ}?P5񛲽M˸4j_,9G0[0 /.\XDnԱW&6BpNAϱ`U7\366X <)@^уB%/Q&{,t˶qXt4B|F7(Z$hmB 4& GQ  m2@"ή='(O7gq⸰qaH;2>Ǝ[N3`ǚ$#CM>O&]=Vv˗tCI$+(z7k ))6K# cIlP3C P D+%?yi9{f<2Լ_.sTߵTZ_Y'.ZoM}w^SlLGE|MCm7W:xk$N VL1{X5&Xe7Ӊ ݮDgT*ge3S0F;-:m_w9VlM4?!XVQÚJ?oFLjӎ6p=F=/5?5P'_"ݛO᷂}j-̀3?.ea*禞89NHYL|蟊@gUllZgRo\œu 3חHt2`b\!rF ce:t+}5Pő 3k7ݛ34L Kh83~|9j}e-)} (t;h`JlG Ğ ?,ӨS]hX{!Pϰ<҈t>45TGOJ+:7kNT&qeCe!u%OPY$: yBOƹnBz?x9aZck .i=qy_ tx&+r} FH\ryb|zUĖ%{i >/AӇ+?a·NWE\Nz~O5)5J6r-@o3aQǾLm<+x?({ ӆF$zS~!W֝X$%nۧG]KߋDJ=0}2yՈH5Q\j$ !CXߜ#5sqpwElvSFOAƧS٢xLt>kЁH9I)fNHh (uɝT{r wӲ]`}ߧbvkv!u5nEmȶߴ|]m{ߌj)SerC ncN鯯E۞tߚ1NfEH5,P[쨌~փKl"IO(ː_`RtZp${N3n7G>vb6Edm<$'?y>&>zɮD N|)I*5DBSQi 2aY(Pp9wBt1.nٮI+0^lk)nBj~RJ^-(~"n=_)+ kJܴHHޥ.q-鍉aNRy7)rh2`RS3`Us`ML|.=k^(ǥ]j|'~ȏ-'C~oԏ Եλ݆.?'ԾԛIk85k=QUT_u="W?+u^te4aVW8<(_\JpT*QQD4\̗zC=7|^ uGO {?o쟃)IWbq &V,ź@N'`*q|!6j1z7dN?#.."(/㘬-.@x k}'EXܨ$sLn%%"Ԥx)kQCoq2Mv/V_PUYCT7ikoOs):0n3tQn*="214㿮(+^;Z8'.ζ<+0֞u&v28)A꼶#wexITǞ(i1+ݭMM{g 荼;?mt?͈˨?^ȧm:1^료OͧP> 2zї`>/u47&Mi@ظzTI.e.%0B{ٽzoR*IGpD)κuc_{;2_*\(9r?Ox1 BᬛHTq'_)~Cfe ðFoс9^m zS,~:i}29nJ%`8ٽOm h3g3t'3-(%[M;5%z1_<1:j2kr3^,i>P qCӊtg<:nM?`E{2L ߯^n+S/Ct=wŕdr\AT90~Xz?夬ڈ &bSM %M-oON8{-,ᏸ6:)OP.+ d6"W"1C䟈4Nv%wnУt@{Y|%̡Lp(\vgt]OvYcJ#"n*\NZ h9Lucdi}:*"J2ƀq0횥x/vk+5N!&|:iO:N_^׎Z.O{ɮЄȆYs^A|-U ՋS1܃R _]0ߊhoUP4`oE]18VAͰ3a@Hunn8?XwP>";1`xv][&Ԏt#_1nۥ _D _dkf`+DsO=fCG[o.ϯ˞g[8 2o|tI4x]m|wp{H?ླU:럶d&00ބTjN[z8 oU[25E1Hc.8;Fג^:ᦠZ=kHHlg1Z?BzʮZYf)?L_F%JBkQ'K^Υ|ͩ5^.Gັ->RK k+ߧ B- |z8 oNyV_8~gWpjLHD#αg^uǁDwvI+q#mRz/_1}etH_sD4L5H/ܮn LW'Q'~y >czjSҧa. wм8oPk :veV;4PaޙdD񰟙7.rkc(oAZM)McqMzy-ޑF 3ɽ,$ ŧ 㓳#c`%G 3o4ZBPNtv0m'Qؿ 6i R[Lr|.5! y'';X*(QskGxDNcbN"t,RnU"n h洨:д#?0Ct`yM-^sF kX],>q:mf'uـ/ͣs `rCkTd=ͤͣK}Xp蘮w:N·L_{J#n򟚔_?R |=g]GFW[#Oȃ#ݝ.<[7ked @{XOE.Fh\3V-LgN4TIO 5O:zoK(&^NA<nE&F{ɉݕ&-3&LLnwVIURLEqZa՝JFӭMJUVsro{>gN$~1]zWkW ]0HToHN]W^)~^Ͱ!sEi}ӉDvǗ|B:ղb.k@ҷ͎gwIZ,ČLs^M7mf_R@\h(P_Pr6<.UyЀZm-pN (pqC@x\Pr:/H1>>>L|d 4)vy"ꗜ 0#懦3 zN+Ni}{\;۪JMҞޱ4=&lodno5B7+D:n7)_~oQdOIQ?.m g ArHY4Z?bThed cTiAqaS;'5uKq@ҀF0ѣA_"z0.g,E)d/+r.kM_ޡLxC"a8V_֖\rH+~"̄=Yd8X%j"'--x9L11- ZL 02uC~[\7F\&cR_e7 b% rvRot_;gdaMid &mL`J*FB/DcO%__I_9[FPOJ 8B!|696v N_yF0EmO4B6p hїm:HL^cIOH'x' :~bՊ1."-b|gLAQH<+WJ-8J(2GVysh.m᎞m@{;/ֳ [p/CQOeoǐNf Q-[$N:Kr"G9+=K<.d{bzQG%1%tgb>gHh+qKfxM 2U)o77yct%>vH;^?q\⌓Dz_U^X+&-t81R?YK͠RD dR:P3=,]vP((_;] H_^*3㕎W7w\&oOTƻ u+hiRAcĉ q)QSh!͞/J^A#PT1n-/Im- YwR/A,$\rm 1'-a.,/Ǔ P@. OsCL$Άfdx$ ꀆ:\Q56S(HcXKE}”tiƭ\jh\/J`D;T/$aMt( =DOa;76dHHgZ!eܹ!oof]* i[S6IodyKl\dw7Tg]V"Z,!hhPD4NѶ4ߥmrB4SrPI<:s9ߞR/'*݆XyElNZO3~!^rO=AxNG <É3zvk錟@XAg݇6H3\dylW+Q zgEJ+>z%JJ~.|}0xZIg;'/Ւ=0N?kru/O.h#ԋ(F82 ec]Csuu&z) MFb{nqrCHì2ˉdz0}3Q:B+ҷ WInM;;EgWԘ 1~o=;7,:/q5*Wv%rn[`Mt!гl|7d^݂="j]mà Xө fw7gϗ_d%w-Ncn 0~"XKLɍθʍQ q vCd JX"g\"6 qkx6n)ygy{_S>ޠ -]3Ս#~ __$sK|-d`}5ypPɱ"5Fes2 e{Yd,:"{W~fi1͒TnVt#GJB!Iq=J;ձד {v?`\*+Х3G>gY+ctHd,hUDYYZY1l=`li(bweɵxԎ_,E2f2a_/|8tj,cO%Q杦JN&px#F`"C9YWgte {ȥAӹjot,2h{ 7GT-LWw ?Zcf}K&f]Ƈ_oc^CF!OcɆǐ>YsU*0dTR{lDrO>,賡/ɛY_#,Rs#jWD!I?+`XHDwP HndË$!zi݇_B"RQ|V I{|a[o ѿP묽Hk/;1bɇ_a5IN'I7N7ltm+j5 ;\I=c7X ?нt_Ui[앿'AFsMECcHz_nsU |N-`#qg:ѥf(z?_q!?nR F0RKt#zSn#٢~o:-z ʵx= 4.㛨)vUc -D̙8ˁ7Eϣa9j8`69cF~pƖ!g=E^(%_|RD8sX{q%O,"]Eͺ5(N:.OX0]S܎ǭusĸrqwڙzgIJXT:A}@|W't;%:S$%),Zws:Z~k|bzѻlg-!v~a`gO3/snbfsiAj5^ th1>?a!_b8и<`7]R/!-mYD5ryQbiECp( z~Izeq~n7C"awM fԙ(1F&-Z0 js0L9Uż gS[-j.IAg%eh[HTK=Bj,)T0ZU+NׄJ\z%U0xO$5M;,v44Osp eR 3]Cž즔z҇w8pؙKnΈDaKGDOYGS<Q<YwqꩈӨ hnӜ%QϏb:hH!48I+v];Dͦ,!,vRxxPe%5'-&G> ִJ=-Kҩ2U׵~ݬBˤ<8vxH>sa܏[OxÒcQe[5||fmgxca|o0OH[URXѨ\$i VtsMIo7\B"[ 煦<=Des! ~؄K3:RsՉ6;nnGU-qM$}9˟5dq6PiQ2PCx+ |<t HgZbPr_NcgDIuT|/3nD+dNR+?@,D'v&q*ᓖR|ٿ\CE΁tɨW$DA9 'd!.mir]&2SuqxA :^8 6c10nVRez˨bBWv.&s VXriY~lf8H*M'L@L5 $YqqNbj5c&z͋FY?*_oNhgɖeT 8vՖ Dh[Bڕ0.Ϡ!JB*X91mۺ-P!2RfCyA5@ 31lmb@Z+3 .IɲA7#=ԛ;Wgb̨Yr)=`ɵA䔥^a^52 -䍽QwΦˠ 0CsqP&܁\p!kwx%.N&zBUk8q%~:q+ ~a&y>,m賨DN&M cl\xBI*?R.KL`;~cкB|h ># E FےYbQj':H=RoM;I5}, Sd?43ʸ3K|Gvy%2 C{V[>k2tei~-d \9o&+0:v~,Ryn<'`͖Xh) `mW\uj;e څ)څ~UupߡVj t6d$L}2$ᩪZFqT,糯=Zk?-<MI%~`Z3[6.YԂ7)&8cgWJE0PZԙ_$_Ugu. սl3|\+cᡏpk?줈JeeHyGA󜼁|Ip'dgtFijgn[XT^EאbX8AR ZXԸ;CW\JCrN <_S*}!8}'+TPsfv:qmDܭ$mʗt"2>M9ήBDJ ȝѾ-vRJ|,|;rtwd 3qKN\Ky>.CЮ~ac T7h#@K/{FMם =@bt3mQk 4)ȷ-{\)WBmbWjkQkIѳpJ:?j_OX+jm/G^Շ$z8Z4QhpMnOhH =t?o zR^ƒx3#d"*TkmV]+4&_uA?3 wX'za}^J+}xuh@Z|Ř] ]4]dp2Lq?cNܯ^7cBm*:4đN9ROzCs@{xTsm"}_S:h@} {sO%K8J8;DT.$7kz 36$Psbٵ8hš6^q)h7& y L؞D~^OEl}\@+.r3?F_9rOp)Om#M,a\~EIח~d5tG&'κsfiWQ01~\9sS1ULg.5vgD!zOV'ٝrz l}M ZDm3ԧSPPlÁk@5)Lv &|进?Zπֽ{ 8psbStn:?. 5Psȹ}Ias 7 sv.&R-,H-{;\ nH22it*;p-Kιia2c* ]xakؿh? 3q7ᬻFaT%0͵ K+Tix#cʕ5`X_Mr QR4?>+' Y/OìPn5)ʛZ{bKƷ2˵ʛ0>iIhWvM6EkwOTjkcW{S[u%@%Un6w*q`;f6,ÇG?j达L;*PdFPmclQIh#ܚz-K6턀ꫜBk7T 6Z6Z9{vĵ㾝pZ㼿tI˴=ha9Oݡ}m#8.0|sJ;kmYvGMC\?¨a5qZ7w;뇕Уe٢~G;#а܎=Aϐjt-=V\a8wp,j\ w~Okvb;h}~mx:ӔZM{yn0ԿGҥA%qԵn~e6-=wOHҠVD/׎ە&[if\ziȪq~a9} iyr-툯 ׏znh0ztwB P#UM})>>ӡ8R4gSP}n j')Eky&FLtjП?Gp_YC9i'֞=1IFJ?8֏zp5D6[%QGGCx[A\XE޵w8cGө#:>Z#:|Gm{5Y@cs?nv nw ks%DH1^eMRv[+/x[[W_lhN,?o LU !_*;rWa>=_)A69,E yׇ/5iޕ S ?衩ad">b,),ȴڇ!Hpd)$k1uAϻKqćHܽJqa$3olے9Ē処m ӓzxvqv\ 4{ wJ KNgQ@RnvlǧE$ VWGWm-K'Qi'8 _rn&%ߣ÷^Ż?'Sl Z| ^Svx֙}ooln8m~j,jٙ`zUȽ͑uܮfV]`諊х"^K0,ح- }NhEu q{bn`-E 1K(vY->24X=/ @+K6XdXmYG|'Ru f02}MhiBuB;M7 7zQZ5rH̵(i΂ @9Kt{"xr)Hq_$^ݩ.\G;ujwԯ~=__~͛Msk-ǯO׶Ru(v}A&^Υ"JzhHȫۛ bEC0wZW Go[`SFn)e7[ǖv&5lc 0`70LL*yx;>el+wWllߝt|F$߀4kZЫ:1놮࣭$7ja ߑT|m^8@y 2_ >J=&!uė0q q4Y 7]|Em+}9L}DmʼnZG#qr5vCwgғ**30 ]b0U^i&ۊL|E~hm?Ç/hg>ۄ  <8誔g>J=bcp-vEx|"j>XOaAțCFCH@r}N *ƀRŚ|/0)'^BGa!svd52~:IDD|[SVq TjHVg:>3v,U÷wL9d<H*qJapP%'ҎdEimVf,řY@[V#!Y('E#L< HOi ֬ԁ8hEQ^)s ;O:Cz%,Q@pci"޼R>Ne=lANx;uf̶16<6 @Fl"ؕoFqؕ܊K1”$pooo*?0ivmjzb? I*V ¼w]gˮ&Q9ʡ ]-Xj)EU4ætT`ަ^ͫ!3<'1Bl!ǝ({Cڂ$դS?Iĺ홪M9jIڞi?I4C=r9K1f !bCZЄnd HYU@4xht|;- mEUzIC+<'^>hOTZPy`Q@"Uk^WAcqr xN0u9o *=;S[+ I3"`x4 C_VD^GnO X; eKw߫kt#d#z-Jڝ坦E$*-Bct RNRUX\x'*ňx"J}v&}*̃FDnbnYm` ;՝ ({B[P7[̹ ͒3MizK̢`Q|Cqg\TL)Vn%1e簷E!tR\4` Lh0Q|BW:.S/v.C{|H07z>,- GnaJov%sG|z+Cm/,4oz PZCzKƷň _Ybw|a<蘸6!rY)d\,V5`.C@nKMO,_crM:ѕR| 8Rv4z%$L{n`?^&YCc 6 _--MOd%I*I}x}* OwqvRD 0aFOEy,5ptJ![eO'̉||3LD&5Rsuڼgae0FUܰ?@Fax\ dMbv蜴NԼ? o?>?0Y;|ޛHkX-J;J{xu*Cs33gΜ9sfvp N5J%Tȴ ݆Pۅa6>(~WaGL*rFuci_ 6N;Bt'6u53YԬ9%p@E^mg4ͽCF{cEr($8Q!}z] PH+0k\ ?WdsYOL|,ʭMH# xW{ ПR)dC\NtX,t4p3g:grQq};KD Ԯq-t'\O(W)>D>IWe>`O5T:.HAaPu]J%J ~x P/ PuCgIEDuޖb] St4 s~h)%U,l. {J ENɻ ݗO -ܢ+kb(BA -/c] K I@pfGtךw"HmaEV%H:QXyXPYJP5MajV.AG5$E$a9@į@ p5$)qGG/~R0R-2iE*7:"%PJio=y؍{Cʿ k's禿g,_hq;!'/n撷dUk2e=9PN-?5p[F|䬋'RS./sdٞANwY׉u:Ju>;kSH俏X«3P:#X@B{SetrZa?d$)yUIqIqWd=j[N0a C?F~wgȓXmq19YMdyY>x2ڈl."A>H}H'kd?{uiD8P8kT_[@G:cq '/qt2K ( dVLƒ^GRGq!( SwAdIJ;̇2}&2ER-uvyp5Lϭ[;BJz6:l㛑̝gqO3-䃥+7UfA;ڲ-3Ӎ JjYM&uEdYڷ(#U jbEmexyY%fAf#4)(3e7h+ -ψ!iV`B̆HNuѭ]80,SV$3] aA -pߋ3ʁrx/Gx*)m"f>>^Fמ;[mc+Q$ 0ߣzٍ<Bq'I$rdp kSSc=)Y*1 xAƀ+D}&PzIEB>Բ& jZGt7'ԍnM7Am"Т^NdfK&%ýYĽU(9U{4b֦` MD iFN$g jFG|2]o^ ,`:WȤ\W })6i4X*Dô (#gT' P/ #\9z{*Ý=:HP$ɡ@bs. O7pI9ݒej@NWn=z؇̹1o ؓ`yL7X W: >a0錧raOU/e 2@^$ֱ$ x -Y2b\U2vW`˪fi:BG mi;zغ:<;vea54ʲВU n嶣y2>3藴z$BGt^q\RwHH9$e D`LU#oCn]n#Yp-DB5 % j P,y[^R( qvqW`ibG&{\ip/'ݰ*ݠڵU 7ˀjUt(YMTz15ӺY ԩiJ-t6\)"'\`U:wO!#L1'|)#ŜRQ :s;FEkJQT3讓b=xs= rEb޺͉SЃN7<9iωq Ωt,C15IS!+.r_fqnc3cKuxblԎUvm"ZZZ*QQ=E?5X Ml5Ch߂mNVZg)Jhg`T|O1OJ#4j+AZ&:Yye+{߇hk쒙1E Ӏ ɒˤTzliReRysy儌O8ܧo7>=/7b@Vו=zY]Euܘf$m[E))P crd\#>%byJU~2"$- Y߶KceFAnF?RPhrg<^MBRxdId s8J@u/o bVM=zA#353q=M>O&v4%R.[a]hS4[ 2]}G~ZrN־g8a}ǣ%/tVioӿSm/ǟ$xN)AmVcRϥg_/hj>k~KwH8ֿ7kӿ%PinU6dhi{e+ªxw-%G=}I'UVS w$?zcH=}Ru&]%75Hُp-vm #/}Ra|P|EcCPDM6NVf qd}vߣDcٍ.Db%׸G~iTFֳހ^+(y/ HNO>ۂYoS{kvt_z薯Aݯ3 $7RjCy/07l8Ճ" +XyjBC~;'gkx!e1yh:pwC?un*n~ $rzG7Xx)抮~Y1;kNv3E#O[<"vp$:b,=sG/sԉXvD!ybV q" 1FJMw@9ٟq^+y J>9`AAJaa=5O$ztʓTSǝcwܝ*u5=U=U3z>BσWz+Cb`DaDϤͨʣ tgS;=7g3Pgч=;zͅAg/*=$z^zܭJz?v"=9 =;z詔3̦؊IY LazD}Px )FÊnIGT#ZپP)Ǹ誗js)0ַ~.μ>GKq-fZa(LBIA&,&_ ߑ {_O|gJj2'1(3MU";[B ˓ #Ao?;5𝭗1tCg]9_H>=q~Ct_~A8FV@Eo#d#A'JNxMg $ y,%!B:IH,e' NB>`!R1n/! X5q]6nLe\l^g/w~zN;w,"NpKM]q,2aVFL".q1)kaތ-Qja.ik8kyv^ ~T[)?6Kt6-jgd/Z5 1d,Eۋl3ߗcb"k8a1|Lq2Ap^LN$zĀ8RAl-`Za}2?oEYW]OUvk\sd5d(*'۱X{Ud9f#VE|J(hk5/E.a&e':mDESb{zw"Dx-o; &9!p+rR2u OBV8CY(z!,dXHZVOM)~ڽyLqX&̖wg@~VR8b[mݢHӼ_EU9]b_ zU7~ȸ{ť3C/K,,W9D1zt}'&'Qn'wb񒓿HdNx:X 1hY4f;'*5NNm|,lG}M@go_~[,FN"yAԲJ$W%;2e䭖c&tqNb%]ynxIϏ{YeG`<_zŹw1pCl%j:"n٠}./S}Qd{F M4U |gKWEַ\kK_R}ܳFl&HP52+3X/bތ=onzWBeCe [ö3\t GE21|5a0fTx7&Bs)r^x`T@Y\ErXP|!zl/ÔuGZޣ~P5 Y@f~xQ>xSm8=xKqE/x͔^%lב2-52!{]ǍcEL Q?h1ğ_ kzH۔14K_&L*O0v|5ϩ7&adcsmXp_$$IˇDI,>9z]0Ȟj?<@po-0~="395 0?\O\#cӔx%z7E ll+h8U>KlfR]nJC̫w*!?6lXEQ ";?e$R<)x(b%)bK?5)+ [/Q],GU\ũ%#CfOeI6H=';$.,y+7L %fyG숼 }3oUi}Z%5IY# Yޣ$?vXEK7?24|}oal}"ϸ?[qpMk8%ot\Oq=%&<̭}H6 `wZC9ʻy"ɹkV7Xk.F$Y^ oכH׏׉j>>v?,/?|>+sgqr}J:Go9dˏ+IaG$0h !E1GA־[GeV5? ϟPf"4O4c*1"x4ʦ"v`K˚jlne&_%SPR$j&VLS +d?*#/\в 5ё6k~вoH'(]݁J{B2'- Į@\`%ٖ i*V䎺 AF#roh;Ѷd&hYEǾW)$IgnX'B~ f>BV!PF>|1gŧm_^o'>-eĊ*%b V4:D^=׷4Z6?{u$Sv&W,i~Fz]v%@Kb?KS_lj~ ĬV؏=|z9nAA/天QmS+qm:EZ;Wǐ Zֻ'o=>%A=vk}쟉B\;%hnb~uU9ˤ`,?ӍtB׹]?Jo8ȓl Q|! ipR} g/E[qYzaeP&N,we kYI#D}s\h ԡNաӫcW21Z':@DK "jO,^g_'Ͱ5re`}i7dN 6f%H 6KvrU[W2+I<"_Jtwg7P7mÉzQVt`sYP@:doMzڈ ,aqLKXo#-8 gQP2sQ/3 Cnwn(d3h5l+^ loN1& ,s!'-#+6cm'; L\I!|R@Œ%oCRGh *c [BnV(h{V8\v&\\l> J⛓( Tt@P -]i4r[p2|@ۑE&@Ke**)KE0HqQ1H`ӫmY*1Q"HfK1;fuBdgR4nml+UHS=`U vN:S|b+b~zfx Vq8V |qkAќa:xhj@o;"Y%wK%3`tAs<#o:xӜ`H|uLiٕDat@, UٮT,2ܟr#3 {K2?H @DE0TɡeG˿klfn^%wbn@}?6)A%Z*",+Z|%7qDV㲑j'2BYC+H%:%$ُ%?*cl&eu"h]$>te',+,iП(=#ɲVd%ݲS_df9`!t,i/)~W󭱶 El-Nf:lQNvz9D>0AegxWVQ3f6gY\LeGJ^ϊ،I8]*VB/++P_#;{ W/&{Ƥ{R0n/17nN O*3&~Zj1ye7=3mO)^ޖ܉! :yedAO"L%< ǘOł$#>W-5t2u%]ƭd *॥L`_؝Pc5M^)vtYN`3l񔜽<:dz;feO.c|'g2Ӵv"Jt@-II>?#j*f((Fga|Zl9{T&ȟ+Ɋa0tj=tJl>NϬ Ul/%QbcשIv2'Z F6s )W4p\\&"|X+l.#Wen{@,-j9des.^tWFްӸWc:eq't'_<_i9΃m#.O|Wۘkzri:[X 9I`Gt/ xĆ)#,DGZh<&3w?{фF4⤉,{4wEGMv^E2{nvTf јo{,l#s#-=@a7fpp` 1-ƩH Nτ1k3í>CSyħ@0=2%~w 1E%ضR2r p *ܜזQLKSb^Ȑ$ϸ60&w>RYChGd^Hpb80ɽdxnj4CFuc:B'~NYrqVI!.M ʉ4$w 56l>8LA e/ux}ƥ:ҥP2ZH>t:7Ȟ_,z UxpKXŐM?K'0#Y0+sqC!s/bEA'x\=o=s4Li*ZL7(W9VQ^$9IȄ:ŗU6gȆ'y*DjT΃"I/҈-50hw}0;3lEvm{e {VtON@|y%Nyr̊Kɉbn|\;2B,[4)WׇLqW)~roZMO~A\|g^O2Z4xs2?x3y:xo_@= ϝ|e^Q/MW6-UkKwr9WM$* UiY8Hघ.zo2*/+?o \t?&5O@ʺHaFIe3>0._t=nx:Oa6`,.Y!Ƭ^ѐMy5N3_âZV}0L+H1ELJS],hy-8?PzbM#{bCYھX:qD Q7YzGݓ@L7baQCXx7h`v4 D> OQ߾~Z1Wa֩=%[VVBFC8NAn+Пg"jIdQ 'gcڰ O~p/[ܮb)&8sW9tGlB<9H=H6'h?NƛJrT&YvF# b>c3|Ock2!L꾐z'ons _kevsE"")(iR~48Nz/$ϒ0!G,ʺk1sCx_ԬP' S B3R&hQb+"]'qqb)dߑ1=\"C6{:Sm&*d. zORtp ;AK++G h1=~D:ǡ)>\o|CUkr 3gm{bbk,EgچphH/>2w(+:kPRPp\1w 2%Ƀ[JhyBDRtGdi;T$~?uoh'}: 3Wpzi_rdlf5Ix?#}qqx1L!2I%,3=N'琬b$l ݫ3k"Eu=0 4q]RE#MB21Ļ2$w2B0 JeIi2"uTO!׹9YMg`CȦk_IH;m!s&1 P-'ÂEP |'q$t}(?2DzCzIZ^g5Ȣy"-l;WJs #I2>\ӳŝv8!c3a t0Zh 㙝Z0S:5Ia\0tHcL*kjm3;ɗ71; ;gHn}q^Iϒ?~k)I#Pt$ R`]fcoě( O7)@y 3(T_X>Lvgė<eeNZ$nSFZKPQjf\GxwGy#g av]/6鲈oZ5"7b K =9ѺH[ADf:Bo묫8~@xS*+GOuJ_%}l-IY=K!)^slAxvsZ.ޝDM$ymsqpM-UU1gI2݉P>.Eӧ1g[LM0Gm#oeHIzwTOҾ0RoPJEᥠ,'s 5n̾)?;i8^+?QuXu? LU%DaQeUkTԱ>r5Xܲ6N#1Z2AS^7odY_%f=ZOx7?`й1xZ~؃[㳚RܪZ,{EZ=tR!34p&.3'NQfig3KVSRhbRArL)fęa]>n%3f>/&K,;FSRV (=[@(YEЛMQ "ٺd3݁yiD t.Ex ~;JR"w*s,W- FwIh PKL +u"[ ·;n2уm4yX I^$Q04NH%ǎv?Y=~;Q,IYD{0]}B.O%u<%1CYlM@g q=/]][No+~wFaṴѯ(1)0x(܈$2AXN'r?L9{հL䄖wֿIynY](WLX7n=W3i.!ĆBTpymḘafZ>SqRuŗ?4j44DŽƄhQEE>Xϥ>>rbzbQAH1!1~8()@VU: hj^Hŗ/U )J+.-͟ƥy>;g.EWו=$'ĨBחK:nL u\|3%\^v3X\~fF/B4bnZ:vC8Z-ۇBfP1 JNi8@N3E.(1E@Z.D qq$H[\8hp Jܐ6)~"uqi'gL49)3rܙyf甔/Ec958-Hk,٘03RQ<] ]sseO#x|Ho'# sfsځ܂܌7Q /^+[ .[u 3Kt\nQi q<]la>ʩO9.{c)TJ%5بz3\z|zBZjjHS\IZd|>? TEӦז@UJt%0C JyׯkII4ya~4Ya6&9\+ွu|- (JqXYo >se3Se~[2e/Hz񰞟J^x0nb 'S%s3Qp!OFF`M  Ъ8EOA×B[B(3*P4[='M&VR\6y} /)"ȨR.m\zO|]¸]vA!7VQqQ+g1踑٥@Rȗ 1I(x]^+ F|Q0Qˍ*(.IZm\YL\.28'%pu"u|8-:gRZ R}qQn !gV9"J.BgMa6dBJ?|직R%~OTB1_DǢ"*._@+K)BÈ yRbU p:mxz>)!151#46[9XɁ$@6_K.FN/ȟs &`"0gxL8|8pR| iƦ':)"SMѱ MN|%8!ˑUU b?_ܞO] _^06u_]{G^vo޼p % =P1DC %~Qvn#!L|{Ja(rdJl$o]p ({fav8<';'z(9 J /BQ~|H#! ~XD^t۞^`a|+Ǿ%˾T{~Ν|]cx^x*m2gU,<-.yʯLt<[ۿ-7Mx;'g.>#O^:]2g'.y&zvewպy5F9۸Xpaǻ9[joM켶^Oz=ǕoP곬m--/蚚aṻb䚾+?]o]jmoXuS5?2kqBW /(|m3 jtc\~ɻ=<7s54R[g)_\x7Y ]gfo1c'i?~`OT{yO^COἓ{:X1Tz.ZBU~~„Uʫ'7,CwSgLqΠ=hnSǾ2OYM/,~͛WV5Yg,Zu⍃FOq{b}o_9ARyԞ^9(kWWWVEίOZ=MO 7y~{&w޻#;LPh^1Yۧ#|} xNˆsa|ԚڵuYUzwZ7bK̎%&sK j/~GDvԝ+ΧN~dS~!C_t{vjWSy7-O8}O_=S9zV@M ~0u^ʣ;Dm 2c[7~y=<_VY`ّ +ZMoYGٜFZ2oI0a*_wD}XH=0}⹟G?T01FxQ7#~mJ/lc~ŶYl)baq}ml7>#=<7bVl44W?>zPl[;8ѿo61d\4+,ؖu[a{<{t"lSߏm3 wa<a ۽9fl{}/I|p) oi=w9Z'6o|7|.C{*B3r hB^ex#Mry&]D䛾9wjOsd-PGyisr=<J̙v[ۮ<<cYɖo :D{?[9ېK/o]v_豎>\ă-_Y/e'~[Ss)y"Y6%fssLu+e4B eah 5ߟ ݼ?+-\\av~_̍٥K\8Ls 5nQ*jffa 8w•sѮ;Trq*'X hpC5|8PZ  oqV RJ PqB U*\[NX 5 A Uy?1Phb<.4zZ#.*Q "uz&9| 7C.!wqF;,5f=TW0`,Y 1!LqFc!>g}C t9ZFB@WWOpF|X*_V;{ |"fCX}:LX@_ X=!X^! `&55 `rX*ZUP@̀z;}59`[ `-`jW ,sk~`3@M>fLx^xf6Ի'`mCE@?5q!x`@7=05% zW tXzw>A|` yP0XX0` @m\=T͇a30`&&eU0`!øi P[!`^9Pc4zw PC&TUB:UK!bC X|0 VUf%goE(*^x`*3@G|/9=:W;P `,WԼ <&puoס}\wTz-0H-U[!}!f A~4,!4L @]! !Tи zAǥ>Aꉶ}"6Lxq?`\`'? `&@l:rrӧnk:|  _?6l!\ B>_@0 ` &` ~a`&eO~5`w/@B!XY砝` @7>0ffxlu?*?B^L 4` _V۠=B>v ܯo,w `3@@oA= '?נ/hƿ2w n~jnC?009~0 jUfy&Ty  l⍄!tXIGA}|ADU]@GŹ_ꕂw#jzBT"~AV XIQ*[Vdx P * fYR;0S6/@} *f~LA8ߣh@A(6t"т 0`=LM :q0 ^. 08 M(7 (~o tT >q3\CIz ,R6 B5@\7~(rlXPg_9\&^X kTT-X ` łp`Q4,e:4VBx/h`fPΉ`4zZ `YI@a!|P~F+P/[_Lo ^pYk!`:(瓐z @WYkVly2NU jY&}/5oC;48 ҿ *S| m>h| =(/~< 8 `6?~;>ӡ `S-0`7`k@,P`Wl#4Y@G 8 q ՃЏj B9`@- 8-WoP_|?"<x5r~| Y̶X0S(zyy-j@}F+;^e܈~Askbcԟ'@mu,#ogx@SQž? /0=99ݸ~G wcAIUhi͢#,C1,σpSiGSXz?),|)_M^s 6B^GAKF~T_TOtp8p" |,\S,kB-mՐ&ҼqNt+H(+,kteK 9>p'޾syTF BA{7=gXWH;]i<& nj?TH iߡC!M[~,/&O." nq_r3gf][xy"s&d@id6۩W;4|6|#L|TS+P?Qid_mڥL;RٗҦ ҲTH;#3Ǻo&HU:7^i.KA ˨_1wi3#2z~]w~(/f i|sO Jojߑ6i]u`0@LSgq8CVύT[d6/ 3Vͩ7[z+ҽ^gh͆6G"P{Հf!5/=R>&L+Mm|!?oqTf[k=>S٤uG]A{{ r}՚VT*̦#+򧆑;8HPL5Aok< k*V*\؁iҨKѤgY> R> oAsr Q^B!Z:1¿fK05n7y:TȀX&^cO@: Yu!}Z>.k@_8I#L٣ {IPJy ܙ>Cv=c{mٮo3Mz'sR!C |qGm6,ZA<o*|qu,3 )_cm~/?/pTLV{2jNgЮ1qe4UJZ \cUWTƒÐwI~uHdaCLX!1C j>ifWiGZKT83MRyH+CHҎ7> s楩F{l!k&:|_i`5Z,דm2ie#!Cg5*.9MJ=0}/y/_k.ߛx9Sn7 qˠ4I,o)v~MT X> 9o/2qdy9̧BwH21hUM4GZ*:*I鎴k´Vctʇz?eWHvY>z,R >꫚mXeYWRJ{~/3_Qg܆QzЬǏCҜ@[j6Scz?s=6X-b J2b.0gna6jkHiI>새 7Sb;}Cw| ս8 !ތdR{Mz`=&̿T&րvBx?W-$Ցom96+L&WMǜ:??h]3>>K%?/D~y3ƙ{ kF̛?0L %y@))J P}`<6-vSy̲گ;FHLgT௬meYͣ4nyy+9Ml/ZiP=KIfOD9bO}e HnO=lr`fxo C>mhwv Y^^mMw&CΊ{bYZ+}#V>8)]s[Ŀ C=?C>&=:cPU7G 3j)O\_o|Z_+A }bn3 e,E.7{߃oJ^}f\7ЮcΥJ;ͥYMm˹!ݕnIJ&}[8e>ߞ ӴCmځfU^Uv<͊U=H[nmC`8c{&R<jQVn"gt<#[c?Hݑ_&歱tIOߩorcmQH6o6LV(14ۚE/>( 𗄌!Š= uvtKSWI4|{TV~a sӺ&P].G?C=mHCeU#YIvH`%;>YsX4&O]6JY`NǂҲv4( #ͩv>)[hy-Zo6@{#ZZXM?t>Bz8ڃ9࿗gYQnu=_Y\\dx <4SLEZ1nt)gFSoo\^r}0w V{S;!{>Ŷa0Fig/Zݧ ǿ|Oj/ Ç>AŠM}Iω4/X*V;gH&F{IO o62'wФ?/LnMXԂSk|=Ak:__s' ڕۢВx/5ŒЃNu3l >~}h/}Iog_߷"w>Cxi ?훠}/Ҿb/붰#'ׄ(&"?7+AA;U=3[|Ln?´nk;!qa8_@~8xSvr/d9h̴6}?a\|ZgT 3O\{T!mW5-EڔHwQ ;d^:\/5}>xTW=դO-:8mo!Lg`!BV|/H>l`8}%{$x'6Z٣0ELsV6|פV2kmX~7|ߚXg)-DZ߬ \㓌}IF ` mB_c::P{*x\?6ToO -iG-*y58eѴ?inx'_s!e)H:Vz-DBy^!N럄ʬݵI?{0HgTj 'w|LDJ-]7YAGC6"﷜,tb6_ȫ"~!]G%?~>7'ImA߾IL-mn 1_u+nGh O`۟ᝳ-ΕY&4Ǝcr gYmHΤ j, -th[-m( ڶ>/0>^VE_יỳH@FDe# ;{?.ۏO34m}< (xi汕[-Fٌ?ec}c0YWFk~_d&S;/KtH {G!r^;Aߤo7i{cNmw@;.XМ@n_ zqhK`N6ug~_h̶ -vPY?x-ݗ= zn@>{KgWI7]#-BY}uG{g+￀iMUi͊_cB"lS]8W_`ywPo,Ջ+[^L KiB`=ō Zo=ȏjW[)M>o(¼g8|73^c.ۆEXIL"[-O D"j(Ȣ~P Z=XR雒Ct}Q$jgi yLq/itWÌW䗷[aOd0Cw4!.`NA{ FZ_p=Y-t#;xWW8S~qH=004v!"!Z߉C!()_y?J0/FyϲpmG"V_^l2{@h3N+w]]_A~ť]v7]cug΂oywuݣ3ǰ雮{|M-hE]k-o[s;|EZh6>bz?ߍήlZ?ɧo־y?6YﻻPg {$k!h]=7ڄߑy_hz[_0/`cC} ؄tBZ ~[kUKU_qw4\ly=r欃(k${eV{e[iRM*^պ;Ҙ_`}6j=q&G存#潶p }+yW2ەIbV͚,UBw!s4Hsxb8 kt+m ,M5" }hQkfOï;of=6?{#7Si:vNokUw yoqM^p0w?7!Rr?"fY(iJLߧ߅430٦lt94 R@9` PX888 8p.?P (T[G'(cՀ:r.C|DӿZڴs_DMs</ 3MJiʺ=ۦm<xN(mvMMbӶfڴ78xCdӾmZ,7_Y]6Kn:|W')V}/IPܒ`*'k|4O̓2մwt3״vM8_M ׎h˶д!zȯJ.p{ i1+I οo;6o'- !W"U+!1gf Beȿo_Ih':g.7'-_9Yh?{}gHg_#ZpFV#?&BE6G Wp~o&ΐa&B狶F~Ig'#_^hBdE^6G4yÜ3QSj6Wԇ^LB䂃miG}L)ȥćD9{dHAH^O6ES|dw8 #]@vn8jnюd&:~}JVw4I,эļ1'ӄDScxV ͈NRm ͊Ad(G:.qK"[nq H6]b2cb7Qbnr Fb#YD?&SD_FcǎT>Ks-)!>gt`Mě/nd⊘Lj1OQccvZq1ZЪv2:)5/KS:OiNk.FsDm\:5XjNr@q@|H3UIۈ|,~qznq$qMda,f!2!Q H--5U;R(YLkIbM3rh.cU,[s0ȍNvDuhZ;?ĥޒ!"9pOU'$wʨN &{tb;Nh=[_D**CJ8M.5LZ0\)c?MDx9_U0+>b W8roZL?KJs܍*|3qd!]RC ds!hLtq,)?X)ݶX(*9'ҏ;B^O w~S5=)YPuM%рI;N UVF(tI_Cէ6X>Js_mz9\4YZ:='蹔yTT] ~ݠikR_IT\2"PQQ_(+2W>UPT***d%mVD;"( Z~JIKj'5npjQFqr:JN=ؙ2^R/˭t_4ε%5>D: kZܭ \wT^P7o*=),D_]FuOT佲YSs"2ۺ鲺`p{ׇ3lr[&BtUWaKÅ!< Y-gFOz$4Z%QQX{LSInJ˻:忮y+*7y *RItJr buZNXM\W_5Sնs{uX䢨 )Z"N|ԼYhKT_[DKO^BEcvkI*Fn8Coa{Į'HЛGͷpPќVr4"NGyZH]y ixĦݯ̈́IcHl`ǸI5mla頥/X"Gɰ?fF$ :A^'8?K׹P 0$[WGkޖ7IّEI-lTAWgGF>2v'gTߎ_֝=#-(zbٯ@IT{0.a6yTciY*?.TH% '29/E_s!Lj̨KjWL7m%KfB}>' F}>T9\Zt_  wBBP~FBgUCChT %  R)5B mD$t6WBPB2.!) FS!BB_2~FB Rz%B_w!+ '랬$ȠcX^=DM^%q:KbH$tF"DCw/ߙi>}v {JD-zmUzhFm2kԍf$S>-5K컨M7޾KxB>{]a[k髑ސ+ ֽ~J01?UmM%ot.CQ48ߑ6B򋀃xgwmaiulabT~u J oN"B9 kq ؋6qېj/xOv_{zUP~ʂdZ"ksm5=FU:L>ɏd[?\BWɛVo,9ߘ!='|E9 ~0 ]wT,GsCskr$}77IP qFlRrZ{SHPs:`c% ,] <ݪi[QUO9!m&!GR[@_Kl|͊slw'm|n;UⲣdÑyGZ5Ҿߵ4ھ@"Vi%F">clD:Z ,K9Mmg*L /D `U5TV~/_FIÊgPlȹ:NnO'@{E|Gljgky4x] AV立;Q) yPY|jҐwCIA!yIYa$=ۓc➹wj{g3 C-_V8Na݇ktS2 ʭ& ,yj>hLE)fR֚惹I/VJ$C|C$ eIPnc;)HJ\?5S 6 8qٝ$[BPׇ?t^&<T\j>_ 0ո !im^&Ohϝ&+V_c.OicAYNɶ \.#q/ACPmH2U~/LLS K/E0Rbn$٭WZeݷIN}E%Q$8BY}a.w"15)ZԦ&D@g;tnHuSK'.4^"K]"@]" //p_`W}<:q} P(+I=Q.P喘#~􄫵t>yw5!QA rTļ'QKu',AbPU$1$ݔr/9qGu"R7st Gt\cKt,;hZj0i꠬WWٯuMNy})v"|NȢ'ӦCxZ3d^XO! ޲nB 0ub%jEy] ZSQ#L0WLqI `EmF% F¼m Iv'){BeO&+&]F*)Ԩ a|/ ٿۃdnV HY7jYpԿR,*W'.ѼG"?}$~OV*[H*jA[Ε|3me׶P*HY!*^ 7 TtBuE2r'9S=R{JLVQ#3JHb&* :gDve[c(0hT &<~Ԗ{B2lGl=x v|ð#'<(I@_CuMtYO(3=7Uc4kBkq?Bs+~1F!d%6k::}Aoc e_JC)O"hBq~XK!4̱s\P۩89R'KGSqɊ5dR:I)ϣ Ȥ2}$9]@eE{U27@>29.:ЗϽJ; 0i T9)^6 ޽H,j7% 8h^TaΟZ|K^,Q4(Tc~M`Nu%э@Sgo >W+|/zdF& *b3B.a$/cese6+/ӊj`GǃRݾ5rGf.V*u6 +|F*UTfJl3F~;|,>툤8Ct!z:sgAi'e5g!kT{y5!E)٢2]93dmD*6->h鄨HFw':~xWq& 6T4+Th_t% gzř,_3qwf~Uڔ-|gw파dGRy>4 N5@Cky<xpO 9.'SQN= u2}2xD-'s!#wˉ66/#,s@]4nR<9go{UȏŊ,L&%yd0EnbtuW,~6᧜>R.cQ٥o=}hRpJLoG#wPQc &>b,I 6Sh0j;x]Oqv"*Us}4se7r&S뒕+R·mɁ^YuÊ#KfR>+%o,y&ԕo:0d:M [*⠉FhʉfGgq3|YR!M%S%Ar?'\&!.n2~y)yV/D *{! {_k;0R}R{HcIzP$SIJ<`J,d %C1;M *9&Nb}pptFm= %aOC.=C F77[ ߻B" 殮'+sGsSY60>dqRX͚^c3cYs%}|}(}R<o@Jo`JΟ)^b"IYPR@ J?ߧ<{mwsgpf5fBj6邑֑u- W}mmZh !<¹w#fbjT?6VQPK=ڝkantʙAjȤJݵ.l#ɆId$\XsKSKv=]^KG;4%R|?ߕ&7K[3\'11I+Er7>gsrrӁO ӂ7 HnS!yp wߖOaxm8V""(c:m;>Zٞ{74n8-~l/nfPۏG=hmOٵϮVyt2Վʒ[ 9Qٛs"j**'99=;#H[q*sg:Wz2]x~<:cpgmLcb|swlRbr7nc̦Q u5?Ns#{+ bgWk%/̌g kـvu68p6 <p!1y6n<p&ـ t6 HMY t6$@g(&ـ۩v t6voӹ@gn@ }g t6 $ـw6@gn@B?*α t6Nl;Hw t6б t6.V:p(*ܝ$[:pl]*<\nHgnu6n 3ـiy6~PD MgiPW>AKHS3w /F)!9Q?,Jx>MqŮjC^n#vD9z։m;AS!'NLhs?Iy_tH?[R8zf[44N:C'5n3x_U}o~w+aRe MӐ&)!=8_3y:| J#It:c|bRhft$.Nbt$.^bt$.Abt:NGyE`zwʽ + M֠NC&bYir%Z5~xg5vנWJ!TwcHe/ lIJbX{aKMǨQ'_*)]$]%e/PqTU XsWH{ _)ѣdKiӤybB4&HL(GOu=z%t7ZޚH$ َ]s&&XIRwTgTOKlW\ISg]%34 ZźaQJ&&.6ҋKQ'UO {>Nʬ*"*~'٫+Ro ?~L6naĵXCl I ;=ySwp=elDQ"6I a6[k wOfX=0/Q.V6zEޑд ˷[& ݿBۦA C]Ge\ղfOD>y.ۺUph?٧ 4- _jWi9ӭX i 1'eJ(j^=Iؼ(^@VH]m*h[+%D'Rwb-f>R/2I-`ER'IbZl%o&j[@Sb?4]D R #,ؚƲQڒ=(1DzgP0c_iya_ %ʾ%\P%PE`VZb)-ⲹk= '2g"<'Uz<[kAsOS[TjISxu^:Y.Wy$ֹ;se曐r밽 * /Ƃ81B$1T` CR<bQŶ|0Xbjśտ/AߗA}HPC}MwΉZ Rydg>rQd :}Pmf_B~ƏPz-{2Qx>.oe߃<;p!BiٻAaq&x d]،1KizPyeO9'âQQ%xN #isjsNQa.9~&M*(:>eF,Sˠq+#ƨ/ʨibձdw~!豔Ktcqߐ h?j@?,];MEѯ:!zEErQL4_WeVUA$UV2PGG䫅>{+ޏ^E I+,z^͌0<Íz˫# AT]^z}\fIUR*[DrP;*s\!;BŴL <y}rXfFj8ϐF I drO G3XMyav.u7AhbpW@7>n+'Q3MV')èB<č/`I93^DC׬˜587QA-A֯0em33,Z&E`DLoOe&[&c69 &o d ZB-6Ĝߩt1&M&ޯ^D]+(O&<ҥy)Q ^;m Hy@|q2hĽԖ3k3%Pv|$\')bQB#&F#F)ÀHV"%[dHR"fLHTݢ^ortʬI5/2<#Mr.܎X *>#>cJ =4G)EhωߘzJvajt})VX pg( _NSs;3#rv>.;SJڥŁ4!39'P !@Ѯ'ᐁ4i>SКZI*2PO!-},hgA%W>Qڲ$*mz9i!E⯌׏$x])xP#VRSF F }sPexB1%}ӲuЬlEc_ OH+ZFn t~Y\Nb^jiˏѲ!'2Lsʐ+߫JDiO/ٳQF&{6P2l0`DY! upXP}JW/}DQ_}%4WOEbZ.Fd_|ZR+_'[Q΃L~Pdש:qf= /6f"r{fڅ̛mBGͶI+JQxYJ\&zP FQotz*r>1. E7QD߹W >.Zd}iS{\ʟ&/srhHfh]lRj\#lܺJ YJWH߂KZ$k DfOd6^ +&<Ц}7>$~u@ݺѲ)3Y7qe%6*MO(&Hs:I:1[˫7A[FE(>Ar^e-tNɥ>+=t5_RiP N}nUIҮFiDjD'^m ZKUX:^2Vy8U&}{γRYdwMHA m_ gkX)8 A4GHU,`pU˾{P7`!ȥˀYj4 ~S qm8uBjΒN`»5$c9A? yЧ׫&;Dmx;orLDC#$i2 |QC]%h?҉6/w]y]>yxe6#ʱ@2 'p h>9ݨmƱ+q,ci[L-c.Kbg1qѱDK$uѱ-^b.:%H,CrБmSܞ.,ѱ8vѱ8vѱXKq,ciq,ciq,ciq,=jq,ciq,cisѱ8vѱcC;K;.XƱƱK^.:vk_XqXqF t."EE(}v$ZIwt׋bS4zQ_/Eq|(8^ũEN^׋zΏezG{.^c68[P$EEIs.y`׋&F%3^%w(s Okڥ :8h'cg}sݤ}ݙI >c%kz⁾B~8t/ٽ5=%S8%{6G1*Z K-M|]ҽ^K\ EVsi[ ]j.7B/Qͥt1z@_5{~=x=aa1BΞl!9t||'2WaWHl*ځ,ҵ-/e u-/ݘVOٔb ѥݘ?d9<Q>DOg9i1$K铴5Z=jh.zεSuYo\t]\..Cb]4(zty躬 躬G(4#zl ͊B躬'Jqt]Th8.q8ZhxbOv#y<l8.ITh8.I躬'YݏG?=)jy]]x[8.q|q`] qo=GQch5)V8.)QhU]t'uYO8.)͹-z벞2zAJ8\t]ֳECxAPGpO/8TjJ ;혢+2gT2:9*1G9jtys%!z('1KLq no#}W#.(C? :U_a)*5]Z2+Z+Z+Z+Z+Z+Z+Z+ZK^+U% KJǏ;WHLW]+}sگ߂njOHiF^Jh)\WfK3*!0na8C^?z2!2R]å%j 75яeb YZ\YHN&p \[,Wb]p ys]pZBeJBB̒CKk%$6jwN@棝@DII4F) -2@%̹ǹԼ" nWhn"gJoCۓǷLab$]6J}(£sFIѴf6"K8)}S3s*%軖)Is5zj]& -ldrYKKH?XsծL \ bviciEi9A0d s"eaqV#">)ZWv:I]pvjځrXs9?g5p&OÏZ8\E|rǣ+)yQ{JHD$cxZ%SY 9>)Ƒ]:qa؋QgQc2n ^sLK~!O-'OBd>, ~Cnܾ{]=1L49Trģ+â9O+^ S/jvjr ZX%#AtkɬFV-J $ @/*?@7*=1^բ >SxZ,8,j#;0EwWe!߁nC|wX濠E$|!iF0:NP/GuЋT"8ZKcJ5k/[ի]ҧ_b9?/F_r|]|<$W~M~gв˞״aӻƘLS#Pf/MĒyC P9;v"Ub-ׁs NZ~JcAI$-BTʕ}/׿Eӕ{HԧŤ2DI꿧/n`ch*i 6ސ}e0C%> Rs+E7~ܝWRe<2Fw .۫ier{юa)wu3T0it!@eH->ܙ/*g? Rz)w~ȟNҤ4&i ^ x0ɾZp:8Xf*H? >F-C~r}c*>5!'M 0G`=ʁN #x3o?DT<]|J0-ه`y1q|ɓE OyrgsǗ38\jPp55L]& 7- 9s]oʇRMAH5%Uզ;BƷ4oϑ46ZQaz}M4#ZUMSTB$zNH-}ݟd|M)ޢ|la>0Gbm,([.Sֽƚ|do-:_fji}Ff_R'O3V UB\%i lJfK ̔R 43>W.nz:bn&)EU"ƅ 1_NyHiϠ2B|5q W3Wz%De)AoCr<%"D2k}f!_K.1ʕR.Q0|[qo˒_I-=#c|Jl#7u҇T!~7wjF>pk݌g n[x BALɳ)TqLm'"ҥ0 wl|,rH"  G骠FA;O*ޯ` -V%z;D|B͔{JmH[ u}<1/ >&%V_žV벤9jПCFnuu<#tR|*E܆CRY)%C&tTܪ| I4[)3-f<Xe|i>cg?д#s F3'\Rrވ$^~;RӀ}_.C钨Y;C&'O u24)亡^J[9sZ?mW f_RrYIrL?'izdOa?m'mN9ONG6o-ZhFo/4lsE.9ֶyY@bi2sMz,:Rcc,5 kQqTlrdAv{ћ3W܊Úd^=`8>c7#UQe\4bMM݀!4IMjsojgC/'{[SFFz:N|괱6/hKha(:,}f_Fem_!MnfCbä*o{2CETXT1a`ΈWV1V1-U b9Uq}yz'TթSԩ*=QDȈ,B^ s {NQodQv}KDiV~u DŽijj1škBgc®.xp OFKY^Ll Ydv6-3pzrW Ƭ/!].C k CYq:>#75Ot4 ,?jo>^Y*/ǟJ +CL6R ;BL{pox{D,Kj1RgKJzi@SPh@65d/h(`ט7< Ac/qF #@$r=6{F%"8`g %m^z_0P#+%8}u &wlD h~W+ aʃ#5; 龝Τz[XXD,ǀ~J͗.ߗϭkV^h`NYfQ3^(&s@j\6On9L9k:a_wl(Hׯ2sɖ Eq ?24G`'2ϭ\6rԌzf)J= > 0ͰOf$dF/gH'3Ɍ< Ɍ4r)xe:}?rN(ri,f,Q~6~{d,O3gÝgpy~˕Yޯ|~YJ RR~kY~g|~?ˊeER~J+cPapx!ϰ0.]w"-2unuє-2#sL"c|n?*J[D,MQ+QkQQ;%-6'-Nj[d"zE&&&-R:[D[Dy4^,&-\?*in"4 8>inpb"*EtqLoM[D[DsѨExx[dl>H--rN.W`Q{-OȸSg=!J c/'Ox ϭyBSu>Ox^ yGxB OxfwC-cozdcF8J;G&MD?2L#D?2L#ĸ?2qHG& )db<db<dyd'|4r>Ʀ83b)9vslW$Ԫ4&% u/FS4~%'n_Mcy1M='y@5!Jbmw mb#HܞO#:wu%JnۻZ Lc.bn7{'8ME'0<2lFRlrG}I?h=DIUH^~ =KD `9Qt 9ӏRXR*h~O wfR@=`XCWjJ[o$*f fI?ZٕsrVE9rT縷"lW=@^q[+k99֍I:2 B=SjZ8"H k'XzQ.6S"GCƌ(az胱ihUᦹLp)݄G"G91J։GQ,$$YOOAX[]_-#/謎@KC`SyƂ-`6`BKHH0Կ߻vRM?gH<JY|y :aI07AꢺMx~zX{#]aSX.9ЗD ӚLϽ;jϡayksjUJUD|-q5>;W;UDL/ c2-o|U).|{Not4# TDZ WY::vw陫CE鷺 q}ˈ?P$_y!jҹU}=^&Ƞt[}%En<_Db;ҋj33 @Hv p5KeLw -g/P%vV$%&=в`qnWf'yӕ T/vu\;\/ f)}#+S% NEm3ݤ+D @|PX{׻2ݝ~;ў m֤Z=6`C#nb3>Q%Qy +*Wjuqo"lWaȋ\DExb ;!CQ4M};" Oj.@ ؚs~(SGR#Itüc\6 7oЗ8*7yh)?zq5͕+"{چZHۅξ7nxu#>ȪKէ]\',1Z]d$c3JD4Yw>!v}EI+T7YN8ԞMDTg|Ak"oXꮛyŨTgzp=(Ӧ"(&ԾiUu὏n=וdꉽoj6+hT4_Gfo=˔4IC4zp56\!\ ~P:"kpLaXSEoJ 3+ $֘1 GRva] 櫟5ȻPctd y|D.-I&?!)lHIF8TzF\A7;'R8+8IĚ`9(;|!x[:AkLD/vZ/ zє#9Iz {*PG8~{ cYP (3'Q8}d<ǚ0 SN*XX@%n5i_岜lwwx{KP'PKnD`_i_-oj EϛR<~|s%:5 AurCFQ ?S36W 3mo8*\D1vl0clcl߮bHc Hc Hc .<C8QJ X6JX2mpkF 6J8bNql6DZvj6ı6JFc%mıcc {(q~ZFc%\pF W6J{-mpwyb~l(6JŀF 48Q½F {(qltF K~-|hDc /cla6ʼT8@&Q˔4~lM*&&ᚭY/W݃ݼe7-84GnNo捠o7J*ŶH})v*R\yJqa5y oMwpaԈ0ĕ^!JXnPR==hq4Ct A4+rT [Tћ C`qj rL,!!<.O-2ƿOß_ _s?ZI<>ZS7\j?x\fUo qVtK+=TczHrh4+Me!w͊WŦish$~Λ |1MdWnz'ꅟ)m1Zu5YXfwV:ɌZɐG}C!rLFڣm Xs}Uƾ 4q#s} > } TfK`72QV'e!=*c4VcqW2Ϥ*R:嗉!f|'6?fu]5摈; yw0@$fU]%*⭠ywoEeQٟF9J QKTʯwBT=XSn~'Ҥ_7 +IyK-x4@S "ULWh$l=wZo|:8Os2T%ܺj>רp ~&n4/:_eՁr}8ʅ$$P|!ž{jyPG?*AMNym4U}NLg3il׷K՘><{yN 0 gwOLLk4g~)bjћHbLw*8r-GLy&kR1̳?uƌghx ;zch0[r&1)sg<9L|;tUЎs)#a9ghʳơ^Vqx93|X!X/ZK;m[%)XK@FvPȎ6 PNĀFvqʮNkd'Fvkd@-CNpN. eNneN1_T5ÀFvZ (kdeߨ ~KȷFv%Y 5%عU4"`g(D,o{ITd'va`Q;bT e:X(ll,_4UGBRud,PQLd,#CBybn98Ǭ| 1(\2fcpYGcQ>GuQ>fcpYG-|:(go CjQ>fcpYG? 9(Gĭ|l@Ccp._ GQ`Ia/xϓp\^ec<}gm<4-xwM^e`Zr<$/DM^n698/%fy0.J^G١^*5MwLZUO@G!&VNTp,AÏuD)ש s{ܮU;`u?UVO 4OV6'26HƜ:3hKFBN#>d9~f p?q-h+%Zj*%q-!h0qwL(aQ풥 |?JyBϠ@7&gLԧSBZ95A|#>)Ge:ݸFӿ3w*2 3 dK73<2:.&-`,|L%%7"rU" Hi*7{9XzJ}Oj\!I6B=j$=[y'[y,A=sWr߃a*L.^tMMq9x^iJL⚇(^ǧZʾcӄ*?kIQXq(.X %tj/VcA9lۛZ`]VCNC/oD)HοZ1ixUﯥ"fcij9(4,JeU*G5ĹI6lJ8Υ~>5LY Cm7PeM<[T9q C dT.D{~o @G$pM` @&Jb݃+]=D@WA_P"D oSP P"y%>!YpJI4˧[KSӏ!H|DTWCJķ~#rzum%ƔWuͶe^`/M6>fFevĮ!(a"ۉ6ݳފM: mL"a"&moo֮{ڄi5Q~u$>f!+"(?" |7$!$(-.Q%JѷqiIm3&܂}=K~D6:_DSێ(CұgXUʗ" om26Hʍ~&82טryU^ ؤKeY ᇧ0M]L`% \Nz jᅁ̽J_[}+TP撖̦o.n]2̸̢^٩@:Tt%㪔A3Zה3>i$UOQʯϳ*P)Gx? 9 {*D߷_oXS mJ( mշ ;Auܘ G9T@Ek 7qc˖-b yW!ͽ$Iiyǩxs1g_YԶPfەZ QT9GqyFB+V&d1NtE% o糔_ /CA1/#=o#<,y$ j>ӗU$B,5vd݀SfԼ2y^_6<}ӏhخ 6d7Vh f{@$i#a-)l·$msͤ;]O}|64&rVy DDiY7,z~b&O!P! SnXReaClp ^c#N0^"6Q?!՚jnE!@E~EQSOV "ji7C\?Zk b6B\G:ּK׋U(V@&hDzW=QoI#i:caUWE3W{&phG8Z^_5'dd넯RH/֪ XU#j$nk *kU$⳪Fr⳪FRYU#y񬪸4ƒH"6.࡯É$G9&W'`ru&W'`ru&W'`ru&W'`ru&W'`ru&W'`ruƙj&WLNLN1:WLΤU>s*z5:c=ۢoE3/b*8-T,,Zi{ft /DFRanV6mhFq|P'dFm"8h@cXYEz88L棍R+mѼ7ʖw XO=Dv[4X^D=4 !{!ؐP2ĂƐ+S6[o؋Dw '5o/o9 EQj Ut!Xc`qp4:5YTǜ3. g[w JdJnziD_]tbq6\}I>j:B~P[K!MDgCFٌn3*7-g[t'My j}V]H+.b%`;ứJU)<%(-(~#̤f  _e eu+ QGI/#H;yIrT? ;o̧%?_&IC؟|X|RxˉF͋YKCK){!$1>QvPc^Lw )ZfZUrmU%J5 by86ǛCgiYMEisD /nrُHzqi6ի+Iw>6@k%QN1Z.D"`"Caħ1 $6Tr%vErw7-B^T5q+Z*]7' 짾orUΐ|DhZ]XQаV{äPEG2Lp e$YO n%]«>˖Qʳ#UzQ~ѻ Jc4U*ڎ |W}lا* ESIv9mGK=_QW ܽPһm`*qޤ,v0@!Z%D ]̜$w16p[/}Fx3P &}Ƌ;טXfmɃ/Cvsې0y!7%~!U>fPfhsےG2XC-&Md؁Vy>M6Z8ah4uweWiI78`h#sN :V_i+v]i0{vߡN}XTD# yzJs~ȼg> :Š#hNjT~M'L4_=sL Y{ k%4Rhbzҋ`Lcދ^0"1P,&&\"13WlL?cNfTsWr䩾N쩞gO)ļ^hdzOѯ"R ۈ'үA~ kP_"נH;D OѨ/IHVQ!#_bJH38Gt/IٕL5u=w OS&ą95q}xoG˸!? ~9ocč^mG눎*o^OH5#^Qx<`CU&EYq G^Z9(C\І Pag?LD_[Xn{7Rn B DW់^#'q97ѯdDpm@H?K73F#(` UJϥue@ú~\m7&.hԝxNSiRD]׭[K{VgЧa Ex&9 ֢l&$yB,XfuHTocv/|S'"Eѡ'Nj}]1!k*B飓Pw+DB#YRB" c O-%5ƣ[ SҎ2t7?I'u97}bO\)tlﱠ)_\ߖ˯L~\.3_E׹%~""R&#\e iB3|}\I!$E7jFbm6ofl zW ;q`[?z .&8sŅ>ǒOe " :8g)pJP"]i,L,/`'ea 8լBTzf,TR*26ZrMlV'2 :l!ϭSJ,jCל`Cל`IhUR\rgMMā ?l;n1# zsA^W %0pGayt"G۽BAfip9{zcBM ќX`K̞`eS6z*q13,_j#EExSբOm[rqZ fBM g%Z!%x%_)g,qH^ޑIƀԞy$7 @UM } Q& ,-ϙ'/2x186liUi'W<iE`T`ExHkY n3LL"ع^LH֢3Vĩs}!ղ/7ZuO } <]dv.آ"-H`.آ"-Hp.ܢ"-Hp.}[t~ʷE nE[t]$E nEJ-Hۢ"-Hp.ܢ"-Hp.Oߢ-]}[teO"-yu76δ[t_ed[qfm9'-ؖs3|rN ߶ۖsfxr_m9'ϼQ}/;o[4 E;o[4 E;o[4 E;o[4 E;oщvޢ.EyewޢO睷+W/1i qAUT1O8ɩ5($p>7킢MJ't>[ TT `:A y`CJ"pTfT/,:Џ:bh "y:aWtɋ6A5L4e*6 ǢDTI "J:*Q`?Dd'o$46SMÜ6Q1/Dr^L 0 ӆζlud!,Wn(.l#\V= 4YrKW5F@]UKj4. xVnXԟR3! ~a1.5zRF4Eh0c>ӫр߼hIg%e'_}P\jzܶPg1%>}ᎄ2hOiF$Q72ϸa,DcRb+}"CGą)2 # %hظyђ^[B_SD̢¸lIޏ]MUi+$\e rh+EL9V4؁Y]T|5}-4wp5tޖWH\е-@"*\!YaB%ND,NcrF2^8?ZKlq)gSR5KS'T/s ZcO|-ϸE H#fcZAԇ0aW*b\QaT\4[@e Т'%#| emdHR/&G*-'"qoϡ!{}M`Z5)#ttJ~?@>&**0a͇$^Pln{ۈzX. ORA?Zc A ==)='YY) 䠔%FNmWC "WKΕI>GgB)J] rv@LI ;"d9k4ы>Mg֞U5V0ZןY.#*[c0-y5j A :%(\x}̺٧(}3 m<"ʏyrkr)!+r鴮;ө6)=즳JH%H7n>j#!G& M`U<>y!sw99.-i27LKZwʬ7ȲdVO:By/eҹ\AȮOyv͂DŇH<)_STn#Fcl1V6фwa w hc/\^% l\nNj[eM%@ᘜzJeM%ă*k*$GL%ܑ>SI$5g*L%ۜg|Lk*qFYI0ĕXUT?MeM%i*k*qLSYSs@b*qHL%XTb!18 $gAL%!9T8T&J )gLę4g*qJgD:Yu^iFGQ4ӌΥMX= ZH{vgud T{>8`}2f>ELT>a+3O}&S*k!gJ (6g9L/З}&^!L<Ç}&^"YLRwgZbwҮ>a@[ (xO}&K>ėB l*L|(D3Qx3 \'60>L'<5Hw8کs3u\3Zf*jNfcGԛu1v2^;Z. \&4}Srn%8+L:t#L/©V T"UfaO9 Pӧ<V:=$ aƬ|7NJUA'/8׵0TSWuf=jqQFthѡu8T*fmbң`}=ྲ/vZ%ؓ+C[2dV| OӨ8Pz4ߊ1z6B'+IxoNx)q}I2q;_rֿ }[~n]J?+ $ǔ>C+G"!,6bXIc+SQq:-xhvBm!b}&^Dy٤ N_2 kn3v3@Tsbbl.Ѫ˳ݤ>Ǥ#wz5׈Rڑ}6SBr[4EHeKLRYhR[ahq1B>GT4k)lBL4!EAfwKr`Wy%DNćڱ'DJlItF\r̈́?m?oigp13l/ecKm0l߶e;7,aTC +,S ^pw@ ߏ}ﭚYߛ_z7qniS\NQoCԿpԈvqDK _lY-٨toD Bܽhv,T\k|Z9 `OI/w~/"Zl#p/ULJyCM)_~Wg&kbۚeSUn-mJ {aؖvD[lm. -0le[`[aՖ:ö- [C U6BFe2NlWFڲ]`;ְm˶ }֖ Öxl [;ex,Ru=Pt:-HMK9k)se/R RTQٚ -3>ɫj -~} 3ҽ 6-RұG)_ )QVTZz7ag~0i|5{;%j|H$}#yBd50e7|2]x?l6ҏ*uh9cΗiБSxߠ,~LZua &|n'ռo,|gՅߌ`VUнrp(lUZ +,"D{J ~dBbٖ=)Uҷ c]ϯ߯_ƪ gUj̒O3|>Uu)aJ]b1ȩ6êj)S TXX,2/4̰Ө=n#eOk4Ǐkhv@sA'gV7>BtDqm<(1sn\I!J;H= 1LLF2}%O/dم}{F~P8If }On/1kI6-~XrL+g9i,\*RJ(,ܽoUZP}`T8}1=>%8<29×LyՈIv(/{0?hƚl;4oj{YCQ[*۪?0۫$0l/_#u6"0h"$Scx9fF'?_V}s:i|5'p!=NiӜ,G!ս2z^|`jD^$K_N6POcj?}:e;HKl@ʛ=andE6s^JfXWȈ?δɑ9Z_me v۰IwdjNqYB..zn }JvPw ]M!XՁS; \7V81>^v'@kxi}]Ak!aʼnnln=Guf;dc`;dc`;dc`;dIv@[/Hgʐ;/HǞru+ncw96|WҼncw%6|WҼncw%6|WҼncw%6LҼnjImbO2M2MҼnc mm;{yxҼnc5I9<*i^48>i^pbҼn#yfG%$61N8+D6P+ۈF,j> q!;q2)`I>!QU}yD0S蓬x>OS#"&uPŃ s7azZ_y^9>R<^ %.!XD Olk^J/ikUbTRJ ȕ֝L *R׭^@7^B,~d:?e[Ѭ#YqaT}YS8-ھ\/5?5h;n-?UܥAvm;Z9ESܫA4V4[E$p=f" Hb0z!'$1jIPjq$܎Z_*s)ՁB3[J|7P<'p*[}6)&h`~ yF:|e}J'= "nk}dj@ϛD7bij8{Uo44g6I@χ[L$YbEl%o&H۩M3/^eDdBGBGX9.n+rjno#&_swAnkB xZʅ iaU*~x~WZ!2OJ<hK\{ /ZD=K {菋(tC}a9^_ea\ lcb*d۠cdŧ/{ {-: U5Mpz<鉼 f@BH,ے wXlS$۵sj7c;z;EMH5QT$|g`/]/]˷hWx2$^Eb\ )tUVHv_.e -g$.@19 zEgXK5mЧ9u6"mQ2 N/FXEx;\崜fyRK׮یp_^a-f+Y<p>ZTt ,h:!"e; aBB'Kx9f6 /6#3 ˄A w6QnIp@8Ǹx9A$<[}Kќ[c5nJ4}J8/V'η:T-/)]8'*zXE[vk'*1ݚ H2xf@Z;' 9jGѼ 7$.FbB k-g2>3{(~x2<Y)ANC$VvtƟLd )o27K[߂vaN7`3-^X5>j^Uc< Kݑ&IJNT ?d߄l͟CpaMn s!pgKW˵>Xg :-f39gF 3ӑ~<~Y>|݉g/#ij~y|{g5Ky͡u90Bv lG!apzgQx56," 7.='ҐC>{I"hAd*:bK(a0 gǓ'QQ֫U{=zFsk5E{ۍhDцiװh_—} >”TCi5k84w9N{G;FLoEWts?C?4p5Hn?߂/"+7>y1a!P] A>͡LB q)@ ;w9>$>&w5/P'u=UqT2 yq/0HR-mv@3xn>Yo6JjH"^4Lˍn 1i%.>SLG_ v~@I g&DϧX\۾.ζ/<]Pհ>;f$YA3zhuŠ/u<]} VqȜ=ERe+h,x--|q)+؁/[DX7j1J_̯#VK$L@q"%D\"縝Tx"w ?G*b|OQjM HQbR K:1qwvl<|K:WVe+ߏ|!+vH8; u{<_Gȍ< u?kek4Ey>]ngR t|>L?Z*T )zk6AGt88jzH#0t{5!j:#k sz성DEWD{~_Lx׶n!m]in#(&=ZrI h~h u{;.bK/h&ֲis ~`[h%R.4u7G\NT9yB64}:"i޸SALѦGtJsf~΂>}+1(vs{plޫGAVRbHZwWSo0Mse^r(Q쯶HI]#07nUoH;G `h@y`%ndF ?̕s?̲r*<~AT5Tw)ga)#DӈvHh0'{KtFDF` ߛI,2U[8:l+k$ ']%c3mÿA.G_.۰B,BDy)swH7G ̭mH\ 4 1KHZUقr4z7+˨\e[3&m=`~?;0Đc.Zo E:YE&41:8]Ӌ3DKs1Ũ3vjm^\"M}MZS77/dGV|Ku|%9+췄_j~FwK;-n+rߖyHH.-C [:rtTPP (wKG#n騫_c-+nhnhnhnhnhnhYV́_[:Àrtŀrtnh/-^nrt4xtw Qstt)wKGoe[:3_@u»EXƆB_*넋ah]犐n \7Zq nVͦp&IHvSun@0M'^u3OCS7 Q}1P]Ա]Ա]Ա]Ա]Ա]Ա]Ա]Ա]Ա]Ա]Ա]Աqv]ԱCcccSM|.$.X_Xk"T{ i5moNgzZ j;\ bیb:D`-HuJ|G!_ƷR*_Ʒ-nHujЙSU|M3Ħz6=mK2>ހL)mX+bn}- nѦ|羣M4r)F9L/1-#b@#5*t@cb"bM7~\o&ʬJ6ԗ񛨴j7~7~7~7~7~7~7~5qy7QjTԎ7~uEEx7Q/hq7\Qo"[ێ/8Dځ|7 /"ʍ5-c!{ !B!UARy1.`V|;0[wQሣHEJ)1+ª!>VSfӯXn]>Gز٭?-] Dx+[_'Vby~s/L AHl%}L5Q C%EpkgQ_6#67av;X)K P9R~C* poc!u4˷F©:PZL/&eG{H4ړ nRX-CKuBn)[Kt#˯^hQ_O-y(FR7iD?b \g!njTX"28*CTGh=@Qg6Ue.THB tk_K񤼠rR֘.T <[ Q߂U8Hկ1DV({b (@E-V jU[*wBwod5(3U^>P2~ڧ5ץէzA>>6*Y}U Ma} Z!Vlj/6y額jy[ˣMmK)& ggr\nPen:2 2E S?AZ ϓoI3B"&Eb kuEuXux`im?leMkU y۽J ([=`OEm=a,glٝ,K^JFPI (HREQAIf8,3Q Gc<<&ᨨo}ys~=nWWuuuuu?չb;)j16JfuTg7kY4BӃ5g3%VrXEYM(k)#'+k;V, ceYΩF,_)ՊL n*UTwY2kbJ*UW@?ZVfjbI_&>=qd l2uiu #ut}MjCs'31}1W ;kO$!#8݉xx/Eූ@*Gߡf PabB?_{UNeພcP?aБڜII-zAjzi'fKXjf{R G)r@j^qu J/ J>!!}M+vt3ށo+ ? 5.J}?@0j?KϤ|TU= U_#_4F8iHޢɌ-tϽ8:F|zI~^S{[䌽wq^q~ܿR}sA)ku}4)_1G*d g,] &;߂Ú~bG5 ~įc϶` Q]?{0x9nQ@~t@~/Msdpl=J#D~XE=)rtJ;l%/{`+kb{fc$N򙽳䞅!| `"ML WW$&Ś4# ţ,ɃD[Ind/LϷ~CL y>sL>)rCRWZ=B:njuqFc\-'JkpO):9岛 b!&,{z?{js/Rm?9Ϩ_ ܓ\uq)x(%)"[7ѥ䡔?OSDiʹ|A*F=}u )a}Mُ )XIÍeH4%QҰ33Q| WgxӉ=k"m8ʗ9#mCl!~?1YE}Fd:ZqeOoӮUOӛ5Y=BeKMMi~5+U`5>[8e`aѱ!&u6(g0z~3;yFG^(~n7TZNf ivsRLG4㵊</MYߒF \5f75{ 9hb?jD{ RVyH 75 k:;o<@&%NJrNO 5tL!Vz4d|oJAWd dt~)]RBcR6s.6KcU>P}l?fv7I|.s_LsvhYE WN(=Qe}i.EG<==^ߡWob,ڨu̡Հ[.`|}?l/Z,գ{F #% vKwqn ۼLdӯ9S󉴻%a3-1]H)OQazA3RңHlDر2w23%o+]l!ue?IãdJ"~eV M5c|[7\m? >mݰL꾛b±7j'6}8cyvCW_v0 rJ2qZ-,phG~Q~~9^1I OZBH9X5ց-z?::gW8b\xߊ fi2L'h՞9& 4w̷i+f\fkAc3w)TvM9,*jAgTs^.O$F#@I\&ޟAABȣzGӮks1a P0N缮`Q`l^9Okl-DH98 cKXi^_i 9͂2yJ}ljCmd( &/6‚@F\2g"1WZkl.V o pXW9D&_詻/ԼGGc zpZdx^"!A}"b\^Ph!,U 3zÞyuĖ ArΝtD`vAwzkn|O;erD5Dpk$r^̵/Pf8<i34p]P'8'7w|y֑ZIMiO%9YzGٺJٰk\x!9kW w;1q޼Z/Q&KI7RKƒZFx|NJFJ7I§S;A^noM87|ɤL콫+EJ#V .\YWJjI; ;Ϋ1W@5m/w|q/wܧ-x>mi >^O[r'Wz;zx?^;x?^T赞NJo/wi >^O[r}ڂ;|qxC=^βxsJrUxI|| qFrXn/#yDyw}%7p<7i 1'C!߉Dyw<;Q(N|'C!߉Dy cQy^ 9Q(N&(MDQ$Dyh@8Q>Ӟ(Mv@_w.M 5#(y1o Jxl *^ϐ9<nj#AL@ @`*3x) 9#b 6S3dzTnV3r4Q^M#lLBLƸ&]&gb}LC|L7S/), y"H(rϐɏ e$Wɉ1BU%OVyJN})vE]Nsj](3.p) 8FSz9QyE *EUU|H*B#D5<.QZ|l릪* Y.vׇ;GOdD"ypM2cAF؟>OVWuɀk3x2y`.~i %IH "<"DV,*JNs{fkz!eX4R . SۮMř&&doF`Β C)rS \ctEp8>yl%Dy`4U9ݥJ),M~&Az4&[g"+6L*~% ViPy4f(w PcujTQi c?v?DH2)-*JgdbdFQ3*]JBR\uRru6:~5Qd=fhu]=_<#)`o07fF3}N>'Lɟqg>D8yDNq,ɐ+@B5c"l_q虯U\bJ﯊' 4_ Yg,^jb/vc#!Ub8%vCyuD5 ;3u* DQ;q>3o)Ɉ3(QwGPN`qeqE gD+rhIW&r'OG'JVCrё1r#Rٶ, +" ("qy0E{f.Ct1 #b}SbhqvY! F{v!Vf 7- 7RET3T\4aT#T} 00\ާо)U E&-qI@ΪZ"HZ(s!3Ǎg$Q}ԘQXg&-֋HR0?^/GRvv7ڙ AI'Ԫ}#f\.{ߧsrpj1!YWHi|QZ !5zQdK/_hfBŹ" +Fgx9Ac} ~QGm=N \IɰB!(ζo.*Q0 \m* *_B n})hw:O 3DDro_ rDq%xv/}!,(: ԮHQZE'NWh23dTdp% %uֽP^͝Qr0i[8 i3E:S_S$MAœ#Nܴ%t QHRQ02 2*E&w2j)a(JWj&HGG\ʆE NǵWӁ''S P"`L3vN$KV.,jSO8jJbk/ت3(IU]D(ؔc@Utw o$#6pOdk]X깆:ʝ"5H)Dժ*`gL`])JLY-j?J(@=FRRVK1('#a_Z[9|EЗQ'4sWƗ ƍ .PT=t1qS<)y`/-9H_%3D1BPs\6enks^ -M)Pi)vRLqk('r))V~wJ4[j9֟oM~4`qOxɀÝeLJUwQk&bR~izuK*@LyCzY H_" #W@|%rfa$;sp67G昷&<"7ҁ[%<"7[%<"7DQ3}#`*jofF標}L.7Q3}BofF gL;jo}Q3}WɰL cpߨy@offLD _0,jo-Q3}cn sKxLߘ[£fӢfFd57/\ !"7yVҹE"J:w3L7pLb'~5cb߲U|< òPXl@-Dn"Wy{PBdvswΓsD\4u.}z k}!wч|Iq}Цq=w{dIhLeBLJXL?}ATGXBm%g\G%B[F=떖9CripB|B4op Gpkѿ8F<#crcpv8fX1c|7KU8[GppKXn -n՛I$RSyIZu3bXBW/:I$RU:߈DwRT[)ɱKU  oA)};UW6aɫz@&ȫz u /.hCt_@[G 25}qd%c.VyD!Tlb1O&"N"Pq[ -0B1#]їRJbеZ%#- Ynf.Yw$.SV&X<>F!G|&5_SǹQE\)R p)jb):"yV/}7`>bxY\ԋxsI$<\A)KÙ"!,ʘ4GTeX"ЯAޫst-,^!뢰AO nժ-:ivkP ~q'H(Pߡ/ Pzd8LE&@ ~Q~QG~pa|yw[DLV0Ff^ۨvcVdpަ2o3J!Xz<0`:h, Cwju]ZXc[9)`lEÓu臍b公ʱه~.vc]i`ɲ(:Vĵ]p)z8..y U|l7.ׅyn 57pˈP!TqϾo|_?V%NxX>-gߣH[:vne {5߫$I[?wpo{ӀbmCy>0K.짦SSHI!iFdIwB;yu(&gn_r X>v}@<ڽ-`nO+-}I/C'ai:_ s|-[Rbv/?msnZ@o?MA AlG0*$ HU>x9=ն%܄!pUfޢG3]B)X=ѽD$+P8fbnPaCJ}\?O"[H'7ݭaފ`[v+bv+b[v+b[v+b[-S؊$|*" ؐ[ s9Cb[1݊VD EXJnE`+c"Fȱ[#؊حlEtV":v+b[-VDnE`+c"Fѱ[#؊حlEtV":v+b[sd[I `+3Y lElVDgJ6-fB/4^X46LB眃NwZ}9a2o`/RtV>&T l-b|j, J]> xf*TK(Vq@f k,p?jH^t[oX'[%Dx+ GTI>*Z²o*x[ cU~#7-\c % gff__) )wg _͙0w7y Ùe:/p q*y W]C棯 SLRJ PpQ6J_YTwvLdi.ǹϵ*79 Z9jPFI'=:6M:ASV饂1y9)dVÙMoTfk=hΤdYtgݟEw7)S,z1dMOF}(&xgmTy!zUb:UFU{ o0H+*ۯ dSD=S^֘4a$}uogIy[.Sb,z|?27fġbĿ _~u6 :@kV/0\xSdV !JrQ+1lu'$ú+y)V!2 @Oó*83#抸bs"Tc3 .!_4H!⮢Sfq?•Qy~$T|`I^fBsv.? hpM5ߕcY{>qVmXcr5kZ\`%!o|;剤cjPR-U(r&E6nld`QV$'?ŗѸݷq64 ϰj<,MnQ]ΘfB 4Xկ$>j¯ *ZhI—OZj)9l dT "B)ZGZ-di61Z(GKL䘂xīZxh^4pCWSXM1`E}cԞp#FXK߳*YIFƾDGWGz80"*A;dQѢUA .[e4t*Q ^[ѐ<ia@-+hRͅV5TO5T\F5|=ojd&]S YE{QբɅ~pCnj/VN0j\\LfuJmyTG])i<tzGZ;Dt觯i]AnVߍ~ݑ;{YpG vϑ1=*XdJd"[ʜoW򨔞>a#~Cg"[mP=bB 杽=F2-8g9|3qD> a࡟h5r}L^FSj*eTX׼ol23|>v\`+v"M8j+,&6tЯOu>)gCMNoDBa磴DD2kI-|cw DquZI릤UG+ |eb5(,m -!6>oq=6QǪ!Q?%Z$HCIҡEāI[*ڤqN/^NF ֶm{kۘXwRkb71wUhoZ9ۚm5$Y"ɏKX'4Uz-'j4ZUP+PCːJM(5iK\d7(LB$23k +F]1^u=yeޭZG3YL?(&0jI/EK:G}~1"D30k%ql-FciA'! [Q7 '|3`~هJ^yf^cgs2mo~7Q+vyXJT '$xGqȞHrΪT[G Mn B!)G ʴSf$x&{ۼ$fyhFԛO'){|=÷ ۅgB{KU>h_\ 6|{cn/E(pL J}sսOf.uZ1LҢ_Z$7^Z]_`4wLF3}t/02G R]@NHܠPyꢊN)Ti12:5j,>-BYdG%2Pm 1jjOb_y-oSaY^HP@{F 5~P(P+Qj4Q*|Ţ.}NϽRg@cCSLKkp]L ) &*c%o]௳zh1Gd!ǹ@}yQ5\wdDYӔ"+ת}9^x rb?V@$ $8nZ9hXΞR"ʾ&DGfʍ^n+rlb?y t -yUf TTrBY'Wx_;RS3=5a=5a8 @E}*7UD~4\'6b(bW# %b\[J}UP~j{$jz{n}~K0htV+j}->FY*Ő|"ŋ霁%=:_=Kdi% NKaېJsCO||ϮfSʾ Ud?e5LVoKW`%figKf%DTrfn=B}91ٗf<Qܽz^eo`tAߙ^Þ6V:v:yc;611& ^F_loӍT1&֍!S=6G/"@NԎ껏]Lp_}uRp<|~>3AML\(Ȯ0WVADPjH-|t8?A`h~wp$__h~ @|OF%qk``mi߼za g}o^Ksrnܧ` QWhgh*Ľ?nNI^$kīqo#;/rG<یUhw##*MyY#7gjyc3zFFC8k}K!fL`R`"\!T.*7yD~)ٛ"''3dIX}E/kny5Av|;#|v|Ucŋ{1dxG dBP1_;sŰ :r6Վ v]` \;~ܰKLU b} |& >_?1d C<>h.UFХh_8c,(ɂt8x_ v57Jc"mN3+6JhN2ӠĮ9=Qlyjt0)o3tfӵ0ݏ.e1^TMtYVP7iuYd~uuuo[ڜD.3Ƙ1/;I!KT1/^ l׾,Pb7T߸T}wcdѮFIqX+6V䱸MbTjT-Ĩ-ըncYS[Mb,oyMb{$9oSXpi>5|EONAg*>[Sƒ'uk*lo7dn~]6Ulmxfӆ_7teɇcKfiOyzUܷ<ũ)zuyz^hLYxf 2>|yxϫ9d^Aɽc. 4;ٯ4E^2i7rjٍ-{W噂=ܮ" j: fW&m^pmk hAk0[ ϣNP^L|%R0><T@mZWe u8~ߝM؃sm)69Es`RV",6E2lCc/׵Mp*fCɡl5^_j2_g49rQU$K .-@PӺ{IՒQߋ^߻(?7CF+VKOgɻx${v]mPUsX|_QQr5 P7vF 3GE7Ş s=j=-xSL7dt7$JF*j1dԪ :$غkEͣObo{[;DOmst!S- 56.;M /_rH;OpII̛c W u/tOƲ%w4&)Ey~sdf:5VsH)gRj՚%=q?V .5C9R׷uLC ;!ߥTvzj|@o WG6QQokyrVx V7r\'25E{G,*$ Kˡo>TDK:ڛp_pz"K.n^;{H QawTȓ_a3aX=-B"1Q6VfI$:L"޴N=glƈQdSRy9 u2˧ wa3qw`M<n3nM<_n[n\k(ڕ-< w4a}'H EoL'؎}̛ Ð< W!JUBː:RvR!!u03Aߐ:R}CoH !u?A:RCH!u?A:RCH!u?A:RC`֐:h̐:R}C>Pfu7!:X|C}!>Y2Cdl*.v#fIfPs~)$K7 9ԔYⳁ,P8P|OC)KC{v7JSK31*$\_\M$:My8,{i S|N6(|Q4} 쬪~b剥|C[l!I椦B|_*<+y+;y3kAq`O+G`p;FdfY`7@C(CWA7H%ҽU헄ϐDxTx(ڧ{Bś+ޡF_dws##/epE_L6Æ2[}OJ􊑙L6Oj.ȣQm. Q~J† e 5aոQ܈-"_qŶg@/ep% p-Y1`g/_z:-r}+)=6gޗ&C7ؒ[ߥ!\C78It)'yT"܈΢HK(rMkgez2[/#[z RRmkJXJa:u;pUKl݋JH`:z^󳉭)b4"<4ꩈ:[_Lw 5b".x+W-⚝M閘u1m,Jvv l>yNǰYd.(::y0L$O?ZQ"3py`;A 7ɴGT[(}\?{pJY݋p[2NA9E(>;s:>=<TI'nɻ_ɻ_?zČUCl>d3!{ڰ?S~/{OxsPxw{8̃\38݇L<}h|3H5Zwqq _%WIX+pqjnqWȌpjLpqK,˂JfHLJh/S;An㶡a#㉹E%}[adEaѯJ#Bۏ`ϰȬ4H.si])_uY\LA `w r6}!BnV%;pZ1"Xx*NbPF9g876X9{-w˟kg|Qo\ȹ.( JD,{d9p7]jGF2VRCco$sZ<1@x6_N]NuFbC7c}cRZ|Cڀ|C9ߋG.l(14`s>Fco(1(1Đ;J(11J o/crG%Qb>F 9Qb(ʆ%ܷ1J uO18&P'(1b|@gQb|C(1Pa@F%QbhӇn[D!r9}3J.u:=>o7}{qwW"S&}Gɀ~t .d3%8fhC<#m0:9CADZ'WLDnފV})PI; 6،&>uRYC@_"EqoK\DwV%7 n*/IQHm—mw(p::ELBo7UD{cebT%>AjYz$r1#HF?j2),5EF=(2f\-]Q[l=rȩ1kҭVI=N~yjޢC)|F-D"y q1oGo/~؏"Ul[-r4`\D=P̥ h]U=v.B$^-TȢ0jZ+*}hI9c[,y6ZoM&7mbCr3FqT1jSیi}jľ6wwbC *;~0~ǘvn. ?-Cyv gu*y6e&.&J_D#GCc!ϪQ7ZT1G 0"϶ӫeWSOe rC0Cܻh_p^q/aJ 6GU$Iԓź[<WJOl?*<ӂ1as̙ǐc=( ``Ny7@ 1z0R+HVI8{6gQT?h6w+4jh٩9v˲, z|˲?!Emq֫cs%tg/Nptf/|{qbq(8cGDL$OQ(O ` Рc@y44< P F^ʼn^3ʼn^^lj8f5n<ʠ<d@y4b@y4ـh hhY<ًk@ 1ً# 8'ߋqz)C@qؔ.2b&5}bˣB8e0:7C)fݬfݬfp5(l 5:6*a-/PE uHY'@pXdX¥k{a F콇1{hKpa{ý{a F콇1{pa{ýjÈ0{#pa{ý{a F&e=L|pad@b02Y'#{"ۇc=Ž7&\ٯH#GMSE)cR,n/89_&rj.–"vcj]*zB;M( lPܼ;(E G1%o>.Yjz}MMoIDc{&\d `(45JUDF#@RWwDk7tb%aE%aR9#ߒ;jJ6vHc58-E&%EVuQTS)˴J#UwBo Ymnot-0#0'SL./GZ">;9Mi~߾p ye2!kSԅ;$+<_} |T{$3YHdg. nPBY%3 ``mg@lIpm5]쒀mmN97$@]~7.ng?"|n:& s5(Y=d[c@¼?^ü8"a{LLI)̰j#6~\8WU|#VG= zf_ sUgȬV*(*o_z7;7}W|kOysA<繬2̋}G̉fexj,wCe{Gtz/LCN]} ZJ]bzł`ż,_<ኋBs`4)%X Q P𔄂 |6&O ioM߈:F~CtgHIjyPn>3*wPZQJ pp>@ #>6Oa[w*:&7QQO|SRUӸ"L%_|PNoC %W~Ou=߼D uXD8=OK8=/+W ú="f~u<7׋XLĎݜ` ѺtA+rȴc \"o Y" Y%gu#|83:n꟩\CgO_'|\'5[!%ɮ.|xV0K8bKiw! A>|5,`0xd98.7N[e!lǛdbuVHG,>) h+VfcIR3cXr^!u5ֺ<I)CkO<21+B`}ORr?ES$ԣ1}(3dUiMzsA^ Q` ,LwxaY_5,Qʨ7֍Qt%2;bLjp2Smɦ.3gY~)ٿ=s/$_U>gY~VU>7ZDSASEK|@{ wFTFrqͥA]0H&}\ˣLA+(y`)&q?;.T&9Zi0KIetڼyF2aLr~[Ng)y19{ .g$?"] e/7nohQ>㠯@U{3]s)}￧7]84>G$gχypfAUɩ~7-!x'p{%}B@|[r / &1UOtYi| 8?Twp(Q0f]!ͺBu1k>#Y[Fkr!gMk“MbrOҚ[Ur!謗z7UIA.̠xs *7i/$NaF)sy("+17" f  h}==m\鞿q/T>C!\S)g7Z?gP]QB mw;D $O.r3Nd(+B8yU&Cl6RI)╏LK54o\ßX#UkÀD=UQPǀX%kMGl75dH<$r1pai)<+ԵX8;qӦc!,˘y\>LSI9c$_y,Z+?],q /DbD~/>3( i V58vu@C;RF2j:9dx&QC O'm"Qبl/lʏMm(x58\*(P.]a,+wF%Ki:ߧa?!&[NӔ+Y5 -KuzBIyDSw \(}$-~u#SճP=?~ EsO PDu1_;#RxQ|-Ezz (RKMfJ'xzx,nhae"r[+tW~xtzM` ģe,z⊀ϴ#&hC7s\-?<+LjFWєIɷ/&|WLA£50JL=28ÿ*-ATOJM֔j^sFl[@olȌP6X3ڀbEСhաȡi'hoZm]J~6IסSuRU{:c]c/Э-nmJP|(RBH H wEQERUO ڢI[[Э-cЭ-=)tk /tkK:hҭ-nmuk[[d"֖t7&Q/&"֖"JPI[[JЭ-zR֖2JPȺe6ߗ]Э-^6֖M3kYi+!M')( KÊm Rjهxqq:ֈwmhqAċJƋxQ؄;ۖ tGpهhCt!Z:-}>DKgهhCt!Z}17Z}hCt!Z}5DH]-><}D }x E/%MR-Vo(@$-DV%j/ hD!۰c۰tf_X[4c5N ] h>uh>=Q\Lj66aLOYxxX,,|ZUҹ+\)NT~<Ɍ8kA@3Zɥ^JL=.ӈ˸k{^E|Ԍ6,SeGyeoaf%/cX6/Xd<C|2(^VQQ/E45Vtz$̤M)B;Q O*i#%,JKRgx#XytQe㿉JFOJã3~U_L}w!`:LϷBHG+-bg1*4. jUt|Su˱l]p\AHlc dSqTG"(\_L E:PeTeNS?vS_ X.y1caV!a{y}8#1NSnVcV4Oϊ81Wb7XL:@?TQ gnxv==rcQ鱌~} 1@5VĹX~[ d$Nj3]}^/+@Kp D!qɸ&`jQ/X)m3bMjզd2^}5?fBftͥxXcub̶ÅDgW?$qeb iF|"k+6[^w >!N6>}ga%{ܾZ"{^a$nJ (C;GIWQLx`!<']`f6lAQt04xgzjBүR׏c#Qz]F_ƈC}E,RuXH9*N$X9KO,-6,{ ˻gt]) d11{_þj`&$qT&z?Y s&R??7B 2quxd^3"3ɂuŜΰ ^ԓ C-CEW#~,B-3IT_ +XFjn\̐D? RAv1KSch:jAJ2& 2o?J4hAQ[eٞ vY\*`=6DEdtK r=3RII Auqƨޔ,LTKЫ `( r CIє|+Q\Ee:̿$,b Dl9*S'2MieZ#}OM/LH03xÔ53_" I$̐7oQ=6j?KVϓC0$ OaM'|MT|MagMHSE Ҩ.J[41ltWʽ1|*wݕed&v exA l3($eȧ-MGm4% ljdQ8nROVQH6jF#d1"KxzjHlsP )EjU<=z-4Fa D1P#jdZ[d8Sc lUybIZUEٳvZi$m Aa*uAg4L6d?SjqB:Nlb0OQgJ̑$&;[^$M5R.K'՞4&:yf02^o:f U*&2zAi|BjFp, /Lb%]n[GSk- O9SE9X ՙ̍0yc >G]0SZ38.@SaH̨r ޾0F!/&2P3Eš{9HV  MHQ')$Ix$Db.SdOi7-H&'Ae7Cx'İƳ%g͕)7o$ϗ@&B1p HnZAriO|H3B(-G4>9I5M,")6Jd$LZAJ"Y,Sͦ[)q B.i2rjL=͔98 A`"2Efϔz1STndF(Q(cYL1u(,KHf:,KIXEcs,EåPʚf ;'-RL#ptAhEsdf1X@&h,bd+H*`A &$8 $ɨ,MFYA-)J%zI tztƙH'L2dɤ:^& ?Q@>;s>F嗣 4|q2_Ea#dhb¶aE()cLĞj6-l / }6ev8 "ME*''fM"ό&)bS4FT>&;%y4çcQty sϕLLbUgjl1LFjl=2Q,ՄbfS<6"!Cjf8_w0>!w"1?LiTM`o07|ن \}g|!$ HS(#Ԥ k,s)2"N5w;.6#'(#p!ZJ8Y&C;f!kFϏg%V$]2HibҠd:~DQ6AƢaU/se-ߕn52 -2fiY wd91YX$|-,z3y$(Qd®)#`p&1Mf%*d;oyD616lS&6%J-Q24$CF#.1qG2Fe19]kG3 Pq(˿)jvV6 E8H%SJ8eh\pjpa:'\ qĊ:B;eb((+aDɌ@2YV<}-L *S/K&` L C/'rCq)/.GBy%u⚁I`2 737]IEPx2GQEy㦙*]la-0Mf( y/+q92(|3N‖Qt|,JS]3jɱ,\beRdb0KdiTe=Hvg~q鹡D4/ "AH4W*yp&l aa=󈽑Qlh,tDl9@8b92),*#uԅfbRq@':͔ '՛н"C-GR٩Vf)]ЍfagR&EF2]΅t#iXp 'p3dD0PL;G"&#Du2-iq$ Ru 821 v$7yP*#:g " D)A!6 HcrP ː&3Y@3^HNa!]y(fqE#@hA;Y奉+E9 d\ѧj#`#"L:TTpPcmf1GN1B1kX6Y~o4 ?AJ*M%|3Eھ*oަ}g8賌=#&abNomfy&a9̕! l߳gb1Ak@8 -8dI G\P12| ]42>1"FŃaDEevc(A0Kә!pBϤPyp6mƚPT[y{REj%qf^o96Ӛr\/86xQl2 ϔ*JO5F w F`ϔ7A}&9K <\Ëop!- 3M3Dwl wq-s ʎ 7c#:˜pʐ}s&T?"NuA 䆫y^.;m<@eywt3o =8^j8BwĦA}Hw ?/+~$6iˎHu*a:|ׄ{)2ɤ4D6/7|M|wd@60 \cµdCI g$x:!Jeǃ Dcg qFl2 0Cf=Q7M304 _@LLM86 I2 ##0ńGv Qt’-YYȝ)UD} kR$0FeQnr8,C&|0;\xmKj#RTIP%P CjR( z~J$\:{4eM0ΌgPXİmq&&c76E mj2zvG~12q43zIGCL!Ja~ Xp'8ikr$ĚbGZ6Am P16Zas 5i!.)GbVJ CUR%  , dĘ Xȣ8S]B& c3/]+‘z>bh R39&D]^f 4H'W xyJa.W$&QoJЌ5DV͐]DE>fz')}aE[9Ru''B÷>&KlPN2TdyQu1{WMD 8sz|1'Agy##iF 1DNSd ?5T/ ȔdOPdvq$rG(#ń(()sdZ/Φ &0O؄q-$v3gFG_r3#[cFf2ʄ kL82Bʅnš3;i+edsM Nu8shVdYґ 9D eԀp~ W6Π2o*G ?}f**C">IB=V_\1[0iEբDzr5ǡb}sSS^Yikq5)40vPë3Pe {K=@ 5+ğJmZ.my8vؾ]],FLϑYKglG’ݯ,znnlf[,Zj5/,Z-PqxSAh?׭hvS^ ,[%BX.j2 +MSR-tuRխwon/|sPinǁğXa'xm'ݖO+j;މKZaVټKeWpv"(=xۼ.`??D Z`#R(+c]x÷Xs;bZu4G֒{:0w;Ku5h?r>\p nysŹY󀣹xn]-|S,Iեwk`WZy>=>rjٔjYYǙ%l.=k# Ys5{aG,}/zx},ms\'&I.wYtՋݬtvjv=%>,WgxK=Zu ŔU -~6UXyXai{Um OWC.V]ێ:;KbXtT$UlC5E<(N5W5N3',~SUfj.bة[#U;YSQ6Yk A8>WV6Y"yY{5)3%2g[-3UmYS*VvXmvKxY .k=]8Biq8<%t{ j*_pY}d.`FQ+jWpΡ‹;,iaE?:~@bbqu2m|}ng+{lGѕ0BsC*T\z'-~d ^'xn.AHB ށƶv3j?vy}vX\93;Em?ϱ"a_N-T:Xtǹ_a@;-C 2ܽ>`;WHքDy _$ct!h>H Aba$ۖA m]q@pp1ᨐXK; ,CLq+"8f*Y[q 0;5f$R?Wk¶umdvw`qv$cW)RwRGUVx}vVX}L/W~ANQ;K4mai~ :5/enЇsxޥ7Kp Cm^d!yls{=K)f[{P aI_-^z3lA2r`0>؉+P>\rMYpǴ2%ډ>w'rNTup٪٦\J@WK +*t.tLN׵[P;iG *J\.q 3J#w t:K vzYhyXQ٫:  8n: f ]N/u{*Yz Bd!v~DbN M+D6僣yj),;@*.'mg(pB!<|zJdKlcq6{_@xyFdXswsꆥ^'.B:^[[S˴ĖU0Nж<**L5Lj'܊s(re"P=zD+yP½^b;-lgq^ =0: lc`,QR%KK"lM>悋Z#k<ƧוIRgZ)6 ԥۀ,UaūݫoݼɤpFft{ӆ,7[u׃#*ߡ;ylE$#!YbzM:TŶarpm<;9_X#Gj'^8.]dpLkMЉֵu {zϛ@CߧYzQ <@ E3́bzu>7ؖNji0-41v2g-,Ip*XjvU?Qͮghnzlu/ܶAX^fm$E ~ӉF#tjmzk` Z j *+]l\̙*+ P=d)ZzA= ϒÐW[`;]۫gdWj6 EU rVT#5kb+Nm;!gZuhKnDb}t!zs+,IUPBK$b[šz|8ua&!XPJ:4i('* O+9y . ,j@r" *Oϔh׶m~^sc#n.Ik:8j.dR@Y$gպCmQelkF]+OO6觚{پnXtxQ+ކΧ79-pn/(1_{|bwhh0ks_;;q]^!@ˏx evmqmYr 9h.% -AT1[w'Pqa+PxWTx&ϞueUؾ]HMV8=XB+b1:1c_Î)ÂP/q#~̊ϦF|[éW~V:?ak [{\^3:?ی4azXA?[N'6[Ϳ5\Tܨ$V-!\eǗz`Då^%o/uހlU}v惘{g"59 DV k-amuhn^x`?t6kwvA*luZ#Yg͵Uܰ==m^S w7pbP^=-gg1^@UڸzM%ɮ WH5Yxoجweߺ% ۍG͂3(  LB!*{YnoyXm Z /3RbQ B A*K=bj{X\wBj@ۛތ$<1Z}.Y꘽ҾwVdg7)jm&A#մ,|9H!_ԷxSsz9zǤROͻd&9b$jޫjMKMqTnaPmoe QO;F>,-7q"z46-}5] z58y9)YQ<TT-GxCb/<o764QB Mt6'Ej.~Yj9e𢾩 XŪBB3@"f=eGZʹkSz{8ɴ$VlZUMU #HV6I=ð,OW6Me,A} X TΦiE[5j5YnO,C/ͻo۳pfƎe|H (|` 5_^}lpH8~’Q2Nh |`BMxkzrMwɦ5[oq׭%$\H  -wC-.@, eWtJv=Tc֨Qve"fڠV$8l9> `šͶ;sEq?*sV%7(7_wDxZXO>;d+0UŨJ*=7 ]B)69*8juh~SI6)}T*x O6-gYz`Kn__ lsůt{_%,o*zמh:uwx6׎%8rX2kSlMK?ۀ2𞍫oE;· _T(]^dh 4.z-\b6 < m:|gufC] odY\XЋ|q r\g'ۋ-ub*^%Zu;glfϦokjYml Ɍhm8_&ԴY=JTPCs;r!PQxZ}9#wxnbʠxB|5ӯ. e& O/7}M~/nQ֞:v D\y. |] gtA( K&J[EkTvXMj8= j-RV es+OYeM7g ZQA~qn}m*PT 뼬T EaKҍy j/ѩK'\ueWx|.H&Y:Z/Kj؎*f/*, wѦh۴h~[G7QIfGQZF -HV>8  ոy! B[O 6xlH82Hp9r v=b  ϤE+J+2o 藼=n-Y xs B9M kQh, w^=zpTHT~[a^8=p7H0w].k7 O5`V>pnG}ϻ_zomYgXPa/68|E2i:V<ۢ PZhm9Al]HL:x=N'Z8Ie[Y&$g-IRؔ@)E1>WwX̬؛69.wDz.6hl@}rs zY]ǵl򶉷^ӡ aW#&=:ûx1xvJm 3Ͼ:s~]ʈx=Qu OIaLxKʑJ-z䭨-Wl z N# =tqu&\*p8 X:^RѬ!d&԰nvd<[n8M}]-5i7 ENH&yieu+???:~Щ۶>z ȹ2:=-%vw{ o 7,6~kp9AcCBYѼjvS+)jwJVv+eml]zOI} OŨlP</T3gmlS?m "ʍfuxUsU54d#B65XRpv2SM]{r[@O8jCrzSEK-;|ΟF? *paP䠠VLryXq%l]S^\B ( &._ϸ̩1||UgGlkYkDSx7QxH<7`h*]xE7pv߮= U|,f{vGnK.#0%R {Q7?`? `77Gr:IbjŶGh+8d |m%-ZД'i*j녶} üWQ\Y:SY)lKوxjAk$Q \Ը}N5!u=Kϫ*KPJqyg Mgo;Hh'Aqѫ>?gPUa c!I ~/քI)mXi”֖,3-1~¯sϨޏC穙< )ïMf3{kE-ŀxvx Aa8^ـ<cIYq!قB6ھ6́a?O^vGܐ!Mjmy/ p6' H,_nnBG8&@8pڏXeAG>pO9T5C>`(2GTLb<_ JȆ^ɼCȍ3Jٓjz wJ]1K+!>]_yw3hH[+ZD|gpq~Qx$ AAp/!{m?78 ?|]LT* JV"C]`jc8Uɛz=ljq79]q(Ttwwz 9 Z޶VlA`YVa\ak"ѓG235[SW3NDΞdo4S NЅ{Gbag/ }PhD ?D:)ڔ:҈Bo p\a+b37č6oܲ6o: ,QfUOS*ιꇵvoA|wr/|79?+:k" x3 SA/IM Whjl0 G%Vۻrv 6,lZ>Ԧ'tJA+D386 ϠReһ7jK!\K}U,>'=ُ vHyHKEw|!-8}{m.pi()k| 0*ԵL]T|wY Vķa :;z_ 쬥'X[vlwY-T o:ȩYfUN]Bm K_RLﳀxc +`u 4=v\1W+RxA.Z]fL/$;nY [PqBQWSul<}x: P:Y#]'~j 51XdRloܴ8dmD>t{!jO, &Gvq$ , ߳/x"HJ$iɌӫ=VDh&@afRe=!NHRz $iL|$Bqv4>w<+<+=ܯ:ALJ0!5xpXK}}Jo mv;8^{)li<<z$)EŬuW8l |wB~K]}.,{K%8O޸*G'vT`v]p0SX?Z.vA?eZj`ڟQC/>ĚĆ3gz=[}pWf8\bzNmfk;+:j{.Z[َ$p2;6#!a~ 蔠#A׻]J{fQC'z{mgUuLD (j@\jXBH0ːLtI2̌3h]Vkp+mq_ֶXMA}[wFh}߾/O>s{9w?WBwtmAjIlssh7up][~K韋 6':I,mc]2];8<'?vN?]6x~::FNd^/4{Dm[l $.@<E]?-`I#xSFUȣ n^^T/y̴ 48y͌c Ȩ;v+\Fo3ۂN40!7w,'z|O 2)puw[}R #%5ӥCYn jǑU6}loOλ$S[el68n?z'P2Y.}]M_[uػ'vΕ~|jG` J+ێTM8M; keLOOt4>v8͂OVqjn,™29ª|:la2럌̓ھ:3{m[]8iO|c&{'UWl_h3U8 d> Δcr`̫XfMf w[+Vj6KºRbJV.9lVk*niV4hmc4uDӹmGK*::f"f5ėX&KIlw*[VgID:%+tu'rl:7%Xx6g]e濾$ed{Ӣē$ԜerVe,'}`ULeڻ!j^#ºLY 8f9찪3b]f$N†hԌd?Es(L=כrt:.D9+J#ƴ? ^BDrq%w:;Mq=ʳvtiijHw,'/#*Մ] ))P˭d.jyc>27œ9-fKZ97nEk@QÌ*HMci,Ҽ$`cT4S/,.Mi̕ rUCVe_&m,=&P3L3nRm1Gw1HM,gth$SRT_kkR}xOz@W<7@~rWK06MSWFڰZSUY :ΘYU/0u4LdgXU) Zٓ6J1I"y%1I5;ݠbx&މa< ;3ΤY LwWԳ>Nw#MdK/)Yg2uY)`w:&ԑCxTH)M#Oed0iu2ڎk1k񝉫7Iy._U*3U{!lZ o49{$ggߚM֭S"9b5v2bL'&՚'6i:oڢ>a0כj[M3򈟕iM.AeLbƉ4sf=Ι3jۨo`'lSWqFhgF%% c j2j:c̹^7p>sɀW2ޭKMOlFYwF3Cs]Hƴ.:i0C@v;,Wx_?h.[XƔ®dPqIӒN%8|"!qK.NLT5YSw n+2A#<4-ň*a erwB6宅M&=:%3[\msR)<4D$X"]7֕0dʙ52r?6=V)}w8.jl)Y%D&{@GZSD"we.w/Jjj3BFV\T]ݠbSu usk"s"sRu]]c5 N7 Qߍ0*Oh+oTD1$Q^ꑒrCͮka OTgҚZ%jרeSˣ Xm&٬hWSMfԆy䐦3[t3 \^&(8k&rs10*"Ynam"'PziĶ,z\K%.:MX4%ul؉bۼ4k:,0E8ėok$^IJ/Ńo'&N02-+zqx\R?7tpB{yX'a*[j2ubyؚi`VWˢx@ ;|&Ջ*`fD;2.j3ȚZaWȤ>w-@IwkG +,ޏ"?Q4NV{d .PX\ݤ]B@Drcs3Y[ZrttsH:$X+z_Sr#qne:|izLn| }E-Р%-Se{fBsg}μOJ'RۀLCtqR (HEܙ{4|1ypSx˞MfUΙyb-gM_,-DQTDjUs#L[g*F@9i’0-ש*\Y0@Ck2oBjsY'b$VJ'@އiQR))D9jJ4ATg:jB8$=7vyMx':}K[܆a&|;Sm")@ftʾl}&k%xځ)2N;@:jj#%392]QIryee&6ަ6,y "VDa.uZ\" ^_iF IFFoC˼Ap\;M[ ==Y-j8r(vrEJd}]S1Q^zq\zQ\pS e!=Q$[c5"FE㣦[X4iG)RtA}HN+R#xBgK=&([6ˤ8z.:f6SLfn4v=vT3VȨ b)&mDF ؆ymvN,91|WTX2匉r30Sc  u޸HU{W80"aG4ǜ1n\lҀrOOh &c+j*k-᪊HL/%V'OS -svzKmBicwь$SQ=&NeyΓ1Θ?& S˺}{9=q'4y͍ '96DMT'!mUwQxLL@yB4ťguդ&gnb5\ٗf׌zU噡Fvj9$l80wDfi4tl'sǜ<ʶڻu.\s -22+ SprrNo.%v:pY"Kc~ԑ㱉xybG-ʗeqB5W1 j28T%0fUc3Oƴ*4U @nf7pu\'Vٱ$FRҮUX ݝ%4Eik4Mtu,$Y4A!&ӡ!ί9"0%wqAx+Q-AG7_>\T 8GiL~͙\ԕ豬eC9*CFt/Jէ)ϪTD+#ҵVNZF=&\ᨮkL&jn5*og;jJR'I*fuVO-۾X=:ۗq|WkC]bpE*"VcO'z4ND{[ǥ^EnpuccL%0ģ fc<4'z5H~M"FS5G XH*kXٍA5M8'c;㳦QZagl@n/V,shK\w:֐聕pDL")ݣ{sT꺆*ue#}&,&":LM,0Jxz+VWq9Vav-8RtI ?k* S;?n Z9|=|F 8I2@17~T\NW9r)دr92Ss.xSxWRxWSx+Qx;wPx'zQ|z>K=> )2>N@Mj9V\˼lS!a,# /2/K#2nawIRYQlQ9\f e @BXG ;þ'1`J]=mf1<Ƌo3m_@Ps-RKn-+qp5 [2 ⾃zu5n꾝!Rt9L||?ϜGQ3|o|x5H-Yx|̔m~–` Åڢ*M*fKA4o[^F_p ZiϚx@ \ǘ'wӐh-sϣij ޥrx7{ Na8Og 4+4+1tғA|W r \T.Fl4;NHqWIUT!cy@@{LCiq4mdU pxÂ/\n?J{m{=9*η#Uo(X"5[%xE~D@?p"ÂPxug2M,fxlϥ~"u+"-z^"[E, R r{H^1{ 0 rUO9uD M4V YgY~"ڑr ̙{B1Z8I ؠrH0\o/GDƉi9CyjAA݂U{\T#~"H3axp 2 1jTdI4<8[pm%z^o`F*ob:& n:㔠Lحy`;c,"csy` S p>LcGh$8 G\w比]rp s$cÔic 2<#2<wjAܗô_àޖ$΃a\n],8_n?gհh']Rnvu⼗f1;OMg*ˆkUW\^r\;"7_,xLn.Q[:PmeI&dOUV ߆?f|Da.v)Ak` \P:L~F Mkzi9$c߁N(+Lsdh멥zslSz||He07p` F} >SF?"pJ P rr xAp%yw$SGh;OFKzo _@3?ܥEu79Ԙ8a79Ml`9ۘSf[mNvQ_%+sLiFgGZkz!o= 0h^XxW}B}` [8G[pn G\Ǫ\ UroG~L;KU8DrXRp!0r 8L 8z}w߫tL[Xi6/zRc~`k4vgb[ke ȼ I,`xnVFo"v&clE"pRT>i+OS "YqXJÈ;<^6/>rTzz79i6B]~M)?]'qw)M/X:,5p K| ^)=]CT./V9QVOT~HE Q8/DE=vf c{Y'OŐD2aF By*fHa`Dx';a.qC4;(m1;3d'^+4 XKI89^k^㖣5еCA8.-=L&X3Z 8W2`[l7olgUhK*/F-bjU.;UB}O%}OAp-w1.x70.}LA޼',`\ī,}B72$6L|郏.o;#ݹ܃:w{#)y _݋TȞѻLt>@FaO 3 q5\^>wSKS#{qn6L<郯ЮWk g~ByAȐ=\'fb;ܢylp'q x2 da-:{`?d7x5uB\.r//{!s*<1rm{[-&f Ӆ3% g3Wr ^m N=cF7Q?z~4""~[;Lܝ{@= ms 9` '6w{,FR-8;\r)xuR?6H'@[ \\k78m@R&  7FD[!L{Δz΄vw&"#Y>S?3C|}ٽԝBT& IS$)iOsӍ!N2W* 0>lyIxMGjq bP+x(v} sJ808S<-O-1l ;&.n_`xE_~e Vc~'\ ] B8OU*{*Ѥ>K`[#ߦ{ xnZ(nl𸼭C}nD8\0ſ'Hn'˭:!3K f`%mh#8Ba|0TA7}2 A0`l*+"0ayO? Ч .;S%B.]*:t#@W7WlS|`. j̖̩m-]ܣ3l3Y}V/0N3iΥ] Iq0C7Tƴ˜aKctKaN6Q/5xIfކFYKGzp oneNNMߥ%4$/7|Q=(w$o Xþd2sT h40TJgW}YGbg$=ۈs)ϸvoMzr|@Cm⫻i|O1oyT`FvxT , `@,ro61Ǹs0UFuO7~/>JNY oq |5੧e<ﵗ8'}~8.3d ϥlpּӧxm.;GjL\"5f=8cL\vvr%&1s\@.g p-ف @yk[N2ؽ\*ee +rp8߁#x,, ̳[p9V''Rj'3ey=~S4Z NW9r)xW!b| <<`ԗFaa5Ok`HV[N~Fc*刈1?ȵ;"W5 ^0 ^5_c8x=rg@hj!B0¸g37A@D?2D ?W/9wOfT'"0˄婄-)F5Im WsT9NPipM7`@Q۝jrenc2]+0+?aVE;pÃ3<8Y FlaxVV,G ][eˑ"xÂbuz]5+ !~F- gJBv'X=cKrV _ܜW/E/1, 8C<8Y{!'Zyr mco;FOEV&Z#t| W!߾^q^2!0sC`1 g0G|z|qW|q|#%1Kc?uTNkʥ&\n]?FJE wA/)"۪1.V XhV^zq\/C+ \ʮqle&4 |k_*c5xo`x1T:Ӹ N3x[ ̹^h/h[Vw){SXθ`'] v3.[3!Cg#ⅷ|w;y=dEaQ[tK0bՂC6Z:w+ $Նi`Eo}jQ4AmP=Wp+8C5`j.Wɖ~AYt}>HӰ70\j|Shnv-A&hc*|< naXp$Q\fGe(Ԙ r7T+wp? xCB{aS &8` Gq"{SܗYv;Uo_Jki4w:rx)x7n5L.\'pY\ch^Qا7DTnѵa Zu bOU=3\lkõx T5ͪ92"AJ!łsI*M3WrXHL5̽T*A} M6`jm^7 Ժ ϲ ch5p9R;η4;mnq/pۅ/Y0u##\ k q.ā\?IEKc5aiu5R_` Rkui_5'nj5arMt>G5P^! ,4r.pg~:o59r58츏I絸^yHH@Uߌ:A_}"ܡ+FO&)H0biL9$O nQW]*RZ[vwnQǚu J#ʞE]>)[僞vxM̆s ܨB{E5DZ<^VomVomp"t|0&jԦ/#1cx!8K*Y*UNs4R}D0b p/SȞ;dlNb}z$V#8U%*ю=#1XffWPìt\>yW,YF*{:qK?>Jz %{Gثr T9U.G"۲ʞE'б9;c4n#{0#s4G}ߩi~,.ǛmPu0Zt>EedX=8Q x%lJU L1y/s~K5~8ۮw`pi/ѹ?i''랚X.?2Ο$gLVB{9s:Ҕp 5Մ OGCU]/XJz}EщT i,[Ybj+'zS9a& dز媡mEjƶWDDڤ6cj"a;}ة\?9ÃxS‘0(=;(PrLGh*(>ƬO2*?J=ߨMP= KU3U.OP9R\_pj?;̎!c}=-Vx&#gQm&˄ 0X %bWxoS" B}ct#0[wX+X}A#:/g[1 ,e;0'<l6y^>$="7Sr3%xs/ȏK,VZν9r!a]9mCܠb*gO}nV!a\h|@|:[9sthvO.G@UhYĎXA|Vm!j 4i2"bLE\CZu' pqs\E|CY\UkI^~~~isv;X|E郍u]r19~g 5 ^"^. \o_[/ƽe病`t[Ì'aEO$FG[!.js6;, Ǵ='|F%{Vq&T 611FhL=\rY܂<|6_C?x.J7gf17BOӟjdio˭8Ӿp8e} )3}o)kϏPz1lS'̬ YdA{^NF{#{݇tDHP6ics.5_ġ vχ`z@N˾T mS!eX0xe89= W|HAuT>C_||W| ~ue&N?zcŃĭ&19-+ם<{uЀC s!QiG}ޓc9Xe2vadvX`Ҁ>;GY6}~R`~`GBPCi+Dž6LV{Z>Oh1p67~ Nn{ l/ F),0p* Y! ╃|ר|LwGVi*!* za(XP'%WxH}b.W7\ 4g:KzB>{? o k(;`K9|7xف+y\CyxϷ( ~(Zn) D@k6$>OBx@UL;yk!EzQD z9:տ3b+pžoD{Ai>{ͱ'Yb-|t;9!䔀fΗ/o~rNܵ> 2}%/$&^.q +Ms@?p580~zT0~!n|eB3J-<x^g}.]lGd7Zd|8cO-Y~cz-pe{€~QY}of"-XqA} el3zXo6D}?qߖtUf$N\ϜIPqU/w ܟW9cxX`59 ?ǝ8Ii2w俜P/#/S x>"Q ovou_t.J^XdG.sC>wU DžΏ?]̻f}[)5,OG-qFU_ ~ͼhS=PEe̡큝$f#!#NȖ--B{]m| pЇwt| 8/B bqכx30!.0)ύҍ_>ܺo'hx9 2̯0 *Àex=_c]ŻG:,NYb *驇!zA/R_fych;?,*,`[% [9G?,Λ\9:Exh<_Cѐ%Yr6/T*mNh(q jrm13~Lr8by,w_P>:y:>~`a3Ηr%`i0/=^,ݎ8#iFH󥈉y+R@.^gĴKX} 3R28gQgO}pJs}\\wKFx93a_^7]Nϰ ǍA|x:P&/hƀx C}!#=ۼ9dją# D7JK$׎L!YK؜a^Tn1w0dUd]eIwm>ݢ)wfD_R< f,߯9_8z8R'_Yc* ,+2~Wߧ/ˀ) Je{WhxWdճwebǃYWA?p6ÂnnAL=  nɳe!azn[-oE |)W%? {q\'EG||WRJ.JBȏ^B@|iuq=GCPhf'fL|]-C@|Bd ) X--"pZfz~#hSYͅ> wdsB)pN~ hkXpyP|SLwn~D8IzR>SnWC=|Uvk(\آE&Wڝ V[bm/\p3Gd`Ngy dmbQu~VSmEe'a{]uM{ÑK*wSwy8knUq2XS Ʊ^xpK "6]T, Ӕ,ceLf~iB[Бc6ѺZ!EV1*#r?ï~-.sO)/km4K'FE|,6%&GGHͳpwLjuLo-Ez'RWța cW&"M 59sT6e>l%CxCM 76 eZi=6Usi))ܐ؞K-@VZ j!#L{D,mQIJgLbϧu(x.Sy;Up~8Z/SK^VBM%յֈ+AhԬ7x殺.4 ֫.,?tbHr^TՂjZ5N`]a>d H'?s46YB_;ir %=pLKdΗz/Pvo|gEK=%oox\X;;8Koxnx<]8Gx2/,Rp vop]Nߐ.{ݞҢ߂7!EHEZ}*pFӒi)8L5[ g@~ЛҸuM}dkGQ*BAݿ >'=|^ه$4uQ c!ezځ{_cWk*彦%tOjZ]Xww)'4WגQJ.%2qגwVLzoWцبd?((;&هK.]v`ڠeS3菱gXvs,|WO%Ѭ[K)} d#<1A7U<(0#_9:R{,X.,c`LA2;4D}uRĔ9gYWCfh4Uz3M<{,R@>dfq(ŚOt-㒝fvf:n1G]3Xd9`;5-zkkևq*1? Y <̂]Ճw<.Ǝw~»_{ἤ#:e^43Gw,8/ЎĭSYNꮌIq.v AehuC+;8zw/ulz砄]F3b]La B8G2ϓ!x /ߐ e#MwKSfcQ ,ݎ^U) ЖLH_-ښOQA3sƨSSN= 'p 5)_^eNtгODK:SF=pղMl|Hv-KXBBMCJm_'Łj"Xu 6k_zU2, Wm4Z26cfwI\@ou̅V.) = M\( & •Tb& ys3ޜ4즑d)p/]~3vg۝T .kW! 6j\QcG wEc~(0V."Lr ,+4j`BC2tg4Bw\.CP6wQ>ϲ<~LY\yX7xIV;(^pBc@ˬ@}k.;VC-84QJEImt`-,ɦ)8)= d<^5QDe cJhZYg{xJyTّSaek5͋Qh]Gգ-Mհ{IWեrxqr-€#  .Į:قtg)ڊf-؊4:&7ȄM.Gݑ2~M2߷ۚf}In"ox^x ixW$ *^ ۖ-x9.[xlŲ (LX{Ga?5hFjm*E8Mqy^򳶻orvhݬ7ӯR>;|\w<4A. 6ݜLmɍs!vU wNJW%`Aj޷;ҷv䐘drHAm0NQ&pg#N*C:Ѯ:fU).9h4mxФB94`mGܯI淗Kz۱U%?4ZTJ{kS_#^n+]ptmwRZ'Y Vh1EFpapM+XST^{`& gf CTiڷ Cp !e.!x 2-XӬВD)^*2r:px>,XtRiwTN9 w8 c]vpU^z 1qAr  8 < *@xL7!xR_Rh(fJ׻z5kdj2(HCMd2[T2Ƭ}I`9??ϕ8ˌqKrem'!2`nofۃ?Lu415]'ZE-:`gu.Z]OW#Ժ xód-p…^fÖ95G_3[jO)_q^)zéi}/9q)avw%.L ZGӂU'W*`{kL l,n_㣅Zµѷ]lfPn],bzN`Ji^6y_vrg@=8wЩ=T.eQT{pDr_zզ*x%թr oS .SU j EJ-p+u ¡[[nSЃ3H=dq`iɿg;?mmT^ s;+@"+p7E>.YpW>|Q~t=[\pE~L cts z"%TEt92mn!S5 %÷!mexuLQ:.omvu\d6ow:!7zKy*ܣ&1OqJ4C& 3-xHn.^k\QƑףFYLIkҺ `OuG^mDʟ"QO 1 n.="ovXbO=8Yzx)u߫LD3eTy,mrir|H%GU \NJ5p:q6aěYMU; B ))h xAԁ} qzy?z:;&o35x*j iA'AXj1ا$^U>"b;۷8tumGǢ4S-ԀhNrVu3$5IB mɆ0I #Kœ[oQ[ jQ4?S 4*x J5Z:HnᵲK5 T7媳T0]zX}WUy ;["-ΖHygKDD?PWwЫZ)8W<فDy[CU:`;˫.UxB%(꼚R]XpS.UPVYFioX>.C;t iu4p,ԴK6qÓIUPa(пeSMB 阅Q 곑%QZNƟ s2̇oP*,"|=Ejo]5u7Tjy:j` N2-ϴȮRxN >7Q=kJGKp59oFUưJgˆeCk!͔yfEjU~{*FDp++ D 2qU '͂d)wT^V3,mڻSIӂ]~*8j#}f%S~~yjx2rB)F9z0z0 iUp顎IqO0zS&{p(>jmu5: X(A3Pק8Qxce6O 9Ovq-/?8W<+|];.!lp~5*wh9Qa !'C|P.,x 4p ]H܌ fO0)>k*YaܝvbaDhˬӆVgw:>DweѾ̌Eq*66M mNnV7:nhIp&!aG ^Jϵ3ke41&Z`,?n|i I*5| X$}48ZI y|X*G|T0ڜNPz" +m基.7 v)Jy{2TmLOp6&gjoG'z1śd`F-l^BX CJW\(CO%.W.Wj0pw[|8\b od}/jW 7+^:O_PܭX(vr,(PjJlkZ;V>bx*6 \Gy6/Ym^ee ;pl&k\޷䃞 &L vXYb9g[˽e'&X?0 ! v1. &hw)Yp V6 x YH!nLMN&zI9ڥ`7[-Ir $;ib#xѴvn]5:UyYvzߍ]6I],p)xi8 nr>cnLMNLNOMN{T pb"`iql"bg f S06M[,T؜!x_Fnh:FKŴ`i?M VvA@̂Q{`i^VgZis8[-OM wL'J 쳡qd*S,ORûM}wUx}_ o͂ަcM M N:̨"W6g[ ZUpSOl9b=8Ѵ'W.ef,zҙ"1Z4Vj܃㙽բq|ZG\ir29 39WWxd†Ho;YΥ ִѴ;dڭ@z:GWڏ2cDw |-?v)g`]]͘xjɉԏr\WھTMSѼ@Sn*E禒@a|0n u^=/T9[4%dť@q)FJ"Oa̚\M꣪>Z:GUK)}TtGUKl_j Xgrkr69ǙnTPsJCrSu}ɫ]LWR#%>]? (4Tq-YE&\p8 rv>lr>br>jr } g}y䑳2`.Ӓg:L _! ^V:ԄW*gJZ @(()H`ou(I80bJtku~)+_+T%_}Adɞ{u~Ծo~00p.+)8*x0^]ON[xܦ8NTw҆o݀MN&`IxLZ_gp]˩W.{ ˙rS(Z\`.Gliu"$\>8jRQ7m(Kjrar.̓2'ŮsGn=O%Kѽ8Ojr(Bq^ p6F|*)iE;7SPbZU]F?{Mck3 "YQ/rgGZ5{梑I/_Y/_E/_x^qrJ6;X'}4yR%pV #5诀MȂ1Q>S ]&]+D}h52'u;ɔU`b Ujv#M0h;lﰝ&t*?z%s-}uEK=)YUaMV(ۅg a\G:lheasYe˂2*{,n.nY>뀋ZQѷۆ}~uҮ_٫鸨 āoAOC6eoleɖfY}dKϿtV4:i\u4/h\F6/ A8 [Jn ^"=3 U\PeY v!iO-Xw2\6_> M<Cw[qJYTDÑ&r&8r~ƓF0=Zi@0M|. c+||pRPuVn𨉏;m"iyw߬AD¨_S8 yq3B/+aou[KzC;k2T9LmU2_+}HK8\l5V:pab!{S:#,H`3u;2 X=chMu^6-;z'ʱZphGtt*cpm=֐f?"[E^J6h#oɺ?X sxs ݿ!T0!;%Za(ѶL[%wv Q_f \`kf\ w 2!73kw bf3`wŧ3ikg lR. LO)eL)9(9U3E 9oQrUrt73k VAشp\;%8-E8_Jݶ4;i%aJ[풃 AAxо{G%̎JWFA( 0g`gb]5}.APy%=x3ԂM?O8V3K`޿O<>`YpyOhA; /7 -~9 5 T?a92Y@}[ \U9V8NV [t8ј?&:– P 'a ӪV8Bt^,\{!e~ CCTv I,[ pLڲW] [rVEt?j6/Qwqtr]L͵aկY0vXnetk\zŚ`5<摟:8kt8*GEXz!T޴ُGI]wB^Z Gh!/p*2a= 4nr fMN–e k^#HkRɦ,kߺ 79N{$;& ?W7Դ6@!n#5G) ۈn XaDYN87^31 ijڥM[Fjk胭JަpDYt*tIx`W_׶U$ogRbΤPϙJ S吾S]吾% 'PV喷9 s wa%oٜDx&A̞^0c`̨ւa"JSt~Bӈ:o^dFx Wmm=xgk1J~=ICӆ9mևA8mӶ@YQ@̬nVZls[B=Z"YZ j"KƄ\8P|gուa5Mh= @x'xǴ+Pj/hGoX5Rb8غ88rtYv5hs?smlS- ϴZgo`[ߏ_7}_xC"3_O'c'|n^eWrr%qqq̅26hT:vnG=˛&]:^M4>e{M*єj^uȅ[v>:֪Y]LF)c_֞:&|TnGlfcMPӬc0S>=w2,<湵őcYDʆ=aκ{@P>C?i*{dN㩀_no[&`":MIBݨ7k/kT{Y/( 2Je(Z= jh~Ұp[g6 oI›$OlHUV&MM?hY5Ѯ-ɻKc▅g:NŦ<)t3LBl9~Ó<.aS6hj߲NT+'\#=mL,m$E9#~0sTu܍S׵Vۥ\E06#g84̖Kgf#X<~)ǥqHز8G8dr1OoZm ˵>E ыm$ , RTCx5|| AdCgg 핡+5Qߝ7tƩRgT**63o~K*_Vw/:29-_ïd+̷w&8Y6ZEU:uu- Fdz/ Fn/}4ϲ᧻f c@Q;=/nwҼ&&siںzzzn2Tbz4A?SIsah"Ց0[pN5M?ݶ*uwb%susҸZ*&E6]38?~9(kf˔%j&]#hO*3F1 c9ͻh|03]> ^. pRB^dЗ]?<^ Lpe8 yqz7Ӕ[8&{1:3:Ώ? E,~*880m3]A4DZ]yQy׏7~T٨>*ǂ yp'(WĔ x&&zgcy{B}I'9\><|].,9ޒŸ{f$,汄N959џ:=<vg.dix޺W)զ ϸ+ua"{Yv;'aԸ&)\Yp˰zj [n4`r fS#ݮak ]ZGUudWK*Cuќa3 A 0بzk8j9q ^8F00;Iؽ48v ;酝.u)1uPf?͹be4԰y .B78-WÖ`ƆhX Ș#"|SQo)Im%CYO$5pffB35 ,8GP`MY~L kpM_RU-q{F&`EAc-سԔe 5l f[-4l {Zvೲ(\8  -/c|V)y%—ph8akhVv7iB8X'ϲۄ*C`& Tjٶo]V-' Upr,͉ړN*oD#bbģS6 V#`3l3td#0+={XW`{>H:8^n L*xfXy׌ ؤ36o /R~U{8._T~ _ W/N~<=E[lpd#F0˴UWtxt#XaZibmi6T hr ۘ\n'pOǰxEn᮲6.^#p!Nw@w}pLíU::~cSޱi \er討t2ca7 gC;^cKWw;?7EZ RîvuX B@ܬ.8NZQEx+Iu 7IGg4ǚM&$SpIph(Y6?/,)`=d='g2mu? SD |A/)ApN'}vZ: x84gr .49 !\'Cp eARu*tpp1?78i;]wDfv9xxwR7Vp!:ztr;:E XB0QwJ*Y;}pg5.jpjì谴`di'7(`fk ':$!0vzcGn\?֑w'5ag5;IN*a `7uWFxUg/j:j3ܶ&Cl^?ڴ[+:^imV>F,=qcd~o lW,Yw+uRYi}Wzi2>\_1cpC56Զ~!= XlcM'9L7\`iC}(I1 6L ւ}Ei][Ks`t^^5p5p1| ˶t{gKpѴ1/δM‚+ bvЏ;.TvCՀo萟7nj GvVc6H&|mZP4kd Pt:p%E-,X!Qxԙ|;? _^ = ;\܀&W1x܇r .H:JC>jC>*30sfNgKe^&;iJ4mȫ d+Fj&P44'(Xt&O u9@?~$cف>\[P˴"F\>K/4JV)uЎu{H#5 K5 {jh/Jvr{xæ~ݬ_k}t`wP@?3Q*oT=퍪#X%2BGoW.#?Ws >ɇ F7Q ,hqDJr@mPB5r&9\&9|)7HZ krK,0iӂLC<ςZԛL6h; ,5-xȴ`iyofҰ0:\^Sjևϫ_P[Jm9Ⱦg5 sA[oyA9kYKlb mۂ *ӋrvN{7n6P [{ԛkc{ϔox lנ~^Tyn8]Nէ(<&ך `AԵрy[SnS-y3 /=@EU8۲3UK* m09~^RF3]\(p媷oj sRop]UCݵ`ɂҸ'Z3M l>jjɖWǝI :#dZp?|%5*vow[u0JYA;vR-/8$Y]wҷ vӷ NgbB-t,*Fá\bCp=gp[=gp;=g޼zݿd6A7OփκZeZ5ziqZEv$6.0'щjL$F'b2{#{S%` 'v-FYd*n=c [m}YvC}ZkvǐNw1saë_a-;7B|lJX'Z{J3z 6 MQ| uoqϠ0҇xӭS 4GÌ^n5p VRZw׽r %5R3}h/l -<@5]8V5`;D8D҂1ֻw#koK0-xɴ5>XGupU9*_)vρW=YcC᛭3bGPP͏JBn*ɾ۾.vު;1^2 4INHT4(ce&S65KI˅YmM%jܕ F'Dn x]QnE("[lDQD Q~lA>^YjrxŻJ+oo;'O|ps0rFkҰTҐ| TNa_2;Kw[ixU 3e.:)* ;=a / ..6bYs՝И|,wV>|HGU:wRGr 4Cu_Wz+a.Hs-W#cվEš%OU[a;XDA(]E'=|_W / *sS+7*QD5,T FOkX'D)$y'({ppܯ(V'GEKE<VĿES Ggwg-wh^F[&nR2GRzTarV)mĕ9SO<4X4<%([>'y!Է_R#\ v;4Ԉ:K#pFԗKÿNyM0.m$o~5F[]*<=!ZK4o7J͗ȂRR21b ^qڻ59Z#dR?36J(gxZa9rIQM.^$pTxpRO}bf 2p[ ~v>jL ~#5`[(Sݥ*d+NSpi4e |%9@,&)Xy49G] 5~Q&Jֹm(|Sa\ÄSËlU\ wS5 z)mrf*]aL:S3^gjާ}vxEh"9-Gvu5kUU 6bw"jiv_Ŷ5^%2fu%_,}6ru k{QfUpZus}"?~Ս!XzO@{`FmRS n/C۫! A'nË'UZ$NPFP8f:b1c"M\Q9{í&.+iN@at=s"L$8&|-qSRXN 'DUFS[,JӃUӃBQD_`rI8&GL6M rǨGYtԗ*ߩ'|C70 m +WEUSZذFD#S2 kxk|pCd6)\x 뙒W\(;1ف|BvZv&TÁ[jRen6^I8}ʀn9DO69g_ۏs~cpp&VB q_+u|ks 3M$ L|: #SL뵍j:,1vU&2%&R}os4,zߏQ a$9lQCx#Z\K8uqw3L {Gh!k+X`R>R3% BEp#d*C0+C2!x e.!u^o޸yr؉j-n`Ljc9x=0Gs=bd-P vFGKk9\fbg~PZizק]\أ U{띵ZպpVZ Gj.<͟*h13 ӃQfbgnDh>5MJ!E v0HӇJ"t6̙ #Y=s\fwjgq=MsZ c9+qHE /V/کV7*عlĢnxʪqVjr@-Z%Z Z ˵hW B ml`[m36:B!S`/ܠ`+,R5(eKfuO r.kCez e^~l}hd- RFt]-Sm^EqzwO:tA؊Vbκ7nR]!jEҫiGX}ﰯW9]wVw;K `qg/h1 >mc{;.emѲO6xm|d{CLk8=kJ|[Iu~}d.X?]~XqBĺ#a@~8N],𖢂IK?7g]EYuE]Xucu >#cf*\n":eYt"uۣ[3p2$)aa[a;t dC]`z 1^7úm+J*t*{YjE(I=fiI{M ͽ'%wsYQVÆ'V *D)sfI}_O̙?m̉3)`!awx*:c2,t޸v0Tۤb ]~2EPp\n mO7ver, pIvvtv锴;tJ_N-Km} \7f߯|W4O2-QmpsPV5_mKPA3iM=kcUVEzgR5e\i"h+on3mø}&hՄB=^' ?ڵ)ΰC iSzm3iSRSY5%\(m._Tn&.p;.. z%p~qʜy*y5bOo 1a} ; \ -:ees#]V c'NȍkNΌ-t SySrI2|Z=kUU{Z[scyZ|AWڍc0[1}ǝ x:H?pz:)bcSsL:28*D UcϜIaV9rԛ;L}95ۡ)F*h8[D`pz Qw<2P5u1 ]ca}({@׌!T ]EM 6*o- .;TZ%.W ~Q .0T8lTpo(AOOIoGп ٪LrJPt@m+ ^]%qEy ⻠g2֧P(}nx\y4/5OZ2Kް^廸E>y9 |KC9/ك+՟,%<+%}ʒ-n)C e:ĒL>;*^R,qdMK'R)9*J$s .x*ES.%B.yd-0-Q==%wԷ )iD~Z_T+3u*5{Pe;: ?1̠8ДM=wgr7?vtoTW.Lz t߬kvUx+]BO6My0rOҍ`jֵQZ{JV:%^{r! LYjVk悩}J vNw1,:Lt2\!n}tׄ_a.+7׭xg*y=7kjt7Wɫ}5:|LtTiڱC+dL:?yHw6ӏH3's *'f{ܩvs,ˉtwFl #v>Gm:+붸9zбBK#jQ|LjH~G:W|sgTcU2yªN7X^:J9f+aI"Cp3Rb=CWx7Ѩw+n57Po#nhK 壘{ OE(#и=A{Y*Yxn{^aA~+=OdA@>?#~1_`9X|ο3Oz&Y]^ ߍ(?(9[GOOEp.yv"zɏvɏ<{ɏ['64cL+9ƤmF}?Fc|ODO[cg$F_5-`_3 +~p~`l}/T`+ S7[/ Z[KZdӾzwpf%&0F-7P'ilGG,|·?1+x4^*HO?-L`aQ{7̰ "y(7#~tc8hy>W}9E>I\ȏ0~On<|xy~<{:Gb|a>Ǐ]7w㡟& xUB(#'i? #㈙ <ڑ[ oO8aA8]\.]7L % _<G~va ǀ0gAIxuW3J~;H_ˑo_2& EgUun6񾻆]o09 x#DŽX WsZG" oBW"u'1]||ّk'q)#Dsz *w<0M=_oq44>x:a\p?|xF!_"QT֗'Eʻx pͻ<GoSf)";&so3qK L^} f!$~{c07 8'߷-'7t;'R~u4\WKpt~#qx׏N=y+1?#o:y ?4;?_HkICk<þEٳ݀wH?~F6G'}9~k߀#KS }~:}KNIwt5p텦}7ObOpFy~eY~E{ϧ_ms GQ-'պq+۾ki*߅|eܣ@><%Ș#WXe0*ÿw׼.'t X](A?ĨZ<1Gk|Mmđx䛎Hk}\b :b=qu|L0"~z#ǧpl#wJa|}r|$>9:}xG~ F?Oz"{ ?~<#I$7ypCE zR͊6n>Ӧ'G~nw'/A|ƾY}^$2淗ߌ,|ߌ~4"y^r$x/K|#$> YKڏ':U1Ak"1=(pUjO~Ư2`_H~)oa|/?fO1z]{uo(ǿxǎ+~J觾=\qG,}xu`<1/:rqpmoͯus㻘Wq/o7c,ߢ{Z?GT3^G8?}TN<|x<xۆ>-nğ xrzOہc+_M7G \ c5~ցnc?hK&}{~u[?R{#={g\t`~W3 ߖ77b"Ts WԷ \rR]]՞S!~x_fRJ 2]~AŁwTO1|)qn{;{ W`3y 5^e~}ƞ{f~hG9r_!7;j :dn0uw̭~prj9c e?5O0܇WY{ߡ$1'4wɏQOo#qezN8Dk+piUs9c_s]_75u1pFbtϭWaLmK>?G>rۋĵX>G|F S;4 <|x0u Yx_̏˿?Cĉd}x?nzCa@ڤ#?) \=iSG,t[yg9?ϋ5ϫv3ؘ <epg,U8%mwuG0|JOo#?R͑w~w_Ip_vS$nG2*HB|G?;r'$Hݏ@T:0~_ω=/7F=pU_t>_1[;"qYu`'Z <[?8 Hy'FyJ,z{>_p  }+3ն5R{05{p%1:skG42?۞?KS6"U^wIJ$'7mH; vKn_칥K[J$҅D_Г&^TN$+"U禗,_YlD N{!IWr!e 2nŽҒKI/+RnjҒOh3`ҦB>寮d>d%+ b%XZzaerK֛_g|vq !kyEYD]=3ʿuJw+Ӭez˾s=~$et/5ؒ̂RK-CݕK/O)]Ѽ~-r"ܶn('d{*́r3 $@ W†$ -Lvkl[.XR_"> 4JZ^W?mI?suuK?$~ՇD,cIKW-YC"Vk$\D+ Ɋ/gBO<#ocĠ# I}jLvP[hrtB#}Չx15 LYqz^]*.eQzC*I2JW_)ӯTU14n:?˪C'nhhIk;S=jŒ>KS X384 Z>ŀ5r]cG[vv4i_=5ҙl\2mA"-n).%Z;6tgP<LR`8 EaM{DZDx)x+yw[keO)n'sv5n1YJ3|WsLRZ%t;mc:}r%W\S6\-]pBn2CnoeCqr@G2k.gd@ Xgw=P€*vvsG;'"YxcKw"nxerδRf\ucScO쌡!ّzWBeљ,9uY%%"N3sCe BNzBP^ j0\lΔ0P<˷km #;9,y3ٓAm- 8Wȣd\ApsBTBNbԗi\6_v}+L~A6EݬVAa,(Yi5)B4G3-[HU(uT~xE0jiCUFh.$q2)@wQ,'D`[`2Lf'sZۖcY/xM}SlKlS\/" })ЊM%ȓ{ 9I(R=C"UMIu 2eWʴ!kix!eDwDCuʁfXSJH0?&P)-h,@G`WmO`٦&)ƸVn>Dzv"!)+jn[QZH ޶^qjMQCe V֤nVe%RYuKTHQMedRO0`cm͢4>07# xg}G\r`%rBH.(>TmCKeP=tx>G6JJ;W9\iPʺow&Q܈EKŠeHTg`1PWnQ@ɧP/'@Tpr l%N1%Ba, Djk5mh |CpƱ%%ZٍtA7%kbɲ!Y#a%D%8▆ٛ2~dV [?9~MЂ+Pd4yyu Ȋ/D+n}s%BY Dr~XQJ*S:Q> $ vtYncF+2͒ ZT#˙k8.%ZCPl3&1ifVUQV;@BNG4m <vrR>!_4ھE`7vn&],A5(Vt+@#ꁮ#tx|m)ԥvXIg EednW[(goa14^ݙҿ/Ԩ OHCQ,=}ɱ:e UUJ̮+=tFQ4?AnCT&G,]Oɻ X4YZ7]@+JR%3 q/f튷6\ٳvY=V7ۚ\esKSi}GG:b_AZɔb5#ÂZy)(6,93yTgO~X'IzWSEQ? RPT«3l:qQ(7ZPp36C[ V I֛Lq5iCrCeu< AQeK ,I38j} t@@ q^L$6赒,ij 9b{/#U9IudBnwx%g1jS?؁t `T4 wD\,2>´(OzO E㽋ark[S$FZHn :idƑFJ]} o\Ic/Ɠ%d\K`ܞ"ğxU%h4XTړb7G2=2 +~jZ[-jI͚B-Mi(G0Nm?*gfbeiuM@yȴ)\+I\# ZA1eJH i~v&TR}S}/m;(9zu̩\Xkm֎ÖYw[m*##ԶrHJǤܸDr*Uhr_FlQZ7T0MKʧ&H6tb4նeúDۺN?咒!ifAEyjTZp~5Y4Wl<҂!)}9o&>ʃcrjْ@tb jldzK5*|$+Z(Hj4%SY ILҊ,0eH>hzRr_™& K$(J^JɔL6,y4I7a^u ]jwvmJXn4 {.xX}l;lc^61IQ1r! !"r;8{P$8.VI"TmP5QUʥV6*TDMS@{3o}+{͛7oPYgnVf=R%GmcMl-c~7n<34gE ; 6wL]H9a#a}MufuzTVa9Ȯ!ї#wvwVefJ]vѸkn&:7:wZa%U30 ~lY&R<܊ݠS\a(I.@CƽY܍~ ^4غR %PXJH|[)cp郶3C_qEȠp;X``J`u$c% KV؅7${ђqIՒh)Ѩ{ jmj;mWqwthWQ/! q9u95D׫[ QbZ4n[Pag4n^u2>%*4vAG$SmFE!vDww"] T_BC1?FkĸYAR`~=+3cdgeBgȾ+^BT}CWjKtx57 4֛ߪg$S£4V S>1< 9'I1&DS9Ǒf f4fE9–~"6^ ,\tõ@$V ~)P $ 'P=Djl3=wATsyu*c*QACأ6 0]clCqnTOl 1V|EHȽ GO]n0vQ<̙K(*`hb?,Tϼ D]5xD˚ziiUXphʰHoraxlvَ"$9dG{Q{IhR?ēdx䧨9K4пƯrymY2\"[Jc`B͌uLϺ5DG6+MvsΞ]Vf2tF, Ǒ 3Sv Lnlf )X!Pbba5?\-œɴ|6S) gƶzlIg[J mӌ>]sIff~#s@$`3"Rx`[ЌRX2/ыu(z#l>?CrF&ӓBe=lJKZ"-MVÐ!gV'˃{!,&31?1/91;bݸAǪX3̭yX^{DžaB2  ۣ}QQ2|ʼr%CO*MR9\XM#E&FSNK铐)ҰJ]z$f[L O)d(ҵ,3$5,5=XB39>Q@T"Dk2XVSLez.W|Ia}lhdNJDvrY , ?H~ʎ9d,f쟀yEVgc&T,7,6fLb6nM,Z!ܞXbֺI,Z&3j0 vx1K]/@ݲ0Y,С b  5%ZX/~6czʟRnͮf&߼dw[x66/`^[M2G;v+nTsUQv.kk *7bF o|N:} >NVî >P!v}r9f4ȵl=w 8ERm2"w@uŁ᰻:vݯ}d Kwڴ#;cy5#b [\>0}L|ơ {a1` ]^spN~Zum\MTa{@O!IIhE|*d a՟яuU;#pԖڴ\b6:-W|m*H%#޾egKOP/>tƋ) )E2ܒ!{tVtg|Nt::-==wĺhs~tU~4IdP"pG#~l<Q()v\Q]ߗ%t]9˷jQ_ˎt=jO2w鞎9sj~TָH~T޲ީMչ&ooDƆS|葧w.oϚnOc]GU~Y y`\mݱ֒}A/+d>9dyV'6><`~ϸ#ϤۉoIEdty}QF▗"_FߦvH>Y䧝ddZ)ra$FZ۸|5?ߴF[rc]w'ݷKQ&՞4$ˏ~̠#հz>s3ѱ&Y\rz/8 6Ԗ}~{k?MWn0­ߥ#rN% ud%T{GxhlW:ZԋuZa<}<3dЕlV8:n?a_:/(MayG9- n0f;WQIE.>C6ܹcJ|SbҒyb2zK-1sZ'Bèhta\E4 Ly*.xÆJ 1 PT:.||7+Njax=)_VSƉ̃Wϑ{*ybj6q!m|1uigTQ})+Ք?4L[&<'5{ oMM֪ -U+!Y{v$VL!9=X(r/f}X Yf"K}m {Ys2EV&r<6LG9w=dnTʕpܩjF#H.mYLu KH.]ry"}pc}^K&#=_X=HCܬ3b]Go 5@vm̒!ƅ~ q)}%\ԵvKޔ@e=^fH4Myյ g KK_246O4S7SSL0[ylt=)j"ݭ{b )ˤeN1!21g -2&Ln= krڮFoi@ DFo2|y{TXށ ls?,+Kuu/|?cemP*;(6iAE{@6w dYy#0Eq9 CFHxKTő?j^_(=a!NhydF$;΢ȵJ <_f+dd0b7w{VD]z> wȽ22"Q%]j}Ua䱧"Q=UG #,~ c^%L<xWxfoBiݖzJZ=n[R)tB˽#9g _^7KEtL^R92&nO7HZa("w| xv1l=l4Xy\g5JL=v-CTc'']tDhK:мp=)J7U9ZXTȫXDęZ3jiP ԨB!NsLdL8R֥9慥h@uZOpE-7YJ?=3D$3ĈY㳧|{GWrhS twH*cȇWX/)T8r 䎄w#f(\.1?l}AX1oH?͎؜Rn\Blh]*W6VDePA4*rzSoSkk̶XXu1y2#IÄ,yvZv'2V\e+fHn"b{ᜳ7if)>Awi#%)zKb.e˞E-g./L1ytFm:l#1oD9HX79d>-E=F7O֜TH33T[Ok)A3drѪdIAi1/Wτe82\lL@p2"eJT'FʼnQq"aLRo5YaEn B[9\> &zP>! n'+Eu?\Pr']/-yQOs:^[ϡE)z@#`)AKo0qx.p2ϖ~P췉i͹9 yheȇ=7()6`zCqY'cѿ[BN#UC&34U&OyN ]OW, &6s%͚N5w>Q],JY\4  %s٣b[j oRA~+rz'2)+PZ2Z=$,U['{b-VtU,;)O:I'ܰ#8h?Dӗ7:S f'h[#Fniky ,\Jb[u%^O2~qB甧'}zf I0 "ʔE)#KA}G ME&xP)ߑm{7@T{NC,DŽ<@!s,{TIWzaAZeX .͙OJu%L4EvYӽ{.\pRlmZ^z⫛.V7#ȯq"ΞsXՈХҸG&jY=Ўg: ]{`%#5,TҕQSOOIe;+$).p!uvpC|_.3u a&Ƈ{^O*/u`Mae)Rci8}lC>%6۩{g͟8*P;ʎ8pٿp J~_x'5}> |vqvOIs'6Yts!;lpe $v|ecģVY9 p.g_ݴo# RX X4p'ǎYhfjXCc7A-tx+Fǁw0 `W e?ӄW?pzTJ/_hߨD8}9.h4p$KWͺ\l!JV>p) #O V&|oitl{xnۉy' V?HіCuKI O$3G:R֐_gNk..Nz]t9;].>O>_K|5:oI(fʝBާGU+;(B/o;qz +Nՙ p.tOM89 KU.9CIjB8z7 xflqDm'M,ieSsޯ iZt9Le?Ч0`m4BCrN!` ö!/,}[#QNRTb!-!CJ?ITl@K}Tc g  \ـdo9?J1|@kZ±'ss8Gpgfψ0I+LF%tTwǝY=Τ%;q/¢nΥ]k/Uog`+Tt,ufqV:o8MO׶y ]dhK`nQӴ6N:?"zD *4LT_^lX]a 9#NFN*&N6`'!p3''jNZǧbW)hLep/qAs#]"r}KX&qLsY݀n#1Յiݨ$uK9E`wc<1G2s# ].6l~ 9r+y9h &+mgZSUUj=m-s.of[V dع Np\s'8>egwb*D@ }K%pvFBx94#afM'IT\UWS5:]Tn>/Ol=7p-;*&^su9JuGgZz?M`-uL_ yWuMЈvCqh8juÛ#74GF*St]pV]=\FxMkh9hׇI-RtSw9tEfJQTr[cs²'.4676{Ϛ k->:M몎U[lJ;VNZlM$otV6 o[[M/w9a8/7Yx5LD4)Ɲc-d]Fס R=UYUwډ|"wz#+u?oXZ{ًfn׬]75?^ZqnEsNUb?S5Q㉅#c^vf݉eE~ff,.ջ*vtvaϮkwJes_;b z|kt}V!w?bܡ{"ָ_ӏX;ܽHCakwvk{cր>sJ:[û+˚b-lnt[3!ulc[9mbduOX;g͚4voL:/^ݝqZr;sG#tYE돸 t>ov[{&w%*O3SY9q]^ce3ޔ.2c֜g};ݶrOm=v2?cf݃gWftMM˲e5a%6f4³[dV̘Si 5uk1VkCR}yK[xidQ)rFs]9fC+QjWtrP" ͡qݲPȘVj գzY}̈xpm[XBxemmk`%6f Ĝe`4DڴT)b(bJKyHPs !II˚Pk6\+jڍ5b&+EjZ"+Us%n򈘖jۙf560P.5-MPP١U*PS(|d'\2+gTY6MJ;M;skqfGe41R )b/SZL 0 5 sRy_9c^u͌ԔOW=wE5gOQ׮ URw{dn8OmHLK$4QhV4lxb}PD P{{Hs],[*mܙ-XTF @43L Њ*jݘKcz7c\Eu(=0:PZ[_as4pc65)iF̆CPW$g z,ҪU%LJw-p#&~ z:_Omut[NWwͩuѧԲStKUnV7̈GrLW2':uVjȗ:[i}~^wqsMoR|9Ur}o'nHt?reW<.=V'ѷ 'ʤǟyx1|4>utUW_B^wO3>~7q[?c~ۨ_n}Ɲ1{';u,jۏ9_/辈]`Y!`Mrj* c{.hi{E55ǎ.jkZj#͗-]+ԇFj,.])lڶP(e 9lE-PòY:5ڰ5DZÿW9B/CW?C~oy$+aCh{.ڂA.-g Wlyz&QƿDާU&QX+L#%Ikx%ɐ~Ʃzk*NHW>IlWIi X~wa H]qkxJֻ'ɿ2ٲ,{wf?ӷ}xR$ds<#yG+Ƌݴl_ه! tڻA66GEgŧcSNh'&)ItjD$:#L{$YIt06 %jY>C?˕bam?CgɈA36hF\ Ir|a>7C̠gˠ6g`П'ƈe!O7gW9f ،EA7MO/0O_dϘCf| _ϒkZ3~V}?Ռ@?fc73_hJG?ˀ+~6=ѕ~>@?\C~nnWjUΙ\VY3bɕSkNs3ջOHV憵R͡yvګ$}gxK.eQK 4k%/)7oIxGwC;SzMqѓpetCtF,} ~Lo+ȿC%65cMͿk~a Oc΁?ȥOi>Odžy[s+'9rO`_x.SeȆ0֣I;g0 NKCXh'xF{D֯_J#x@|zQWsE~3(ƹ)Z>!E|~3Èhޓߣ7S5lT5UIy}]oq)K|l;MG\o[ӴkӴ_v M^#E<ç}c}Ѭ"J#?7]k~iV%TY=rp_fVI{zG _3j/H qq6(y_>pӟ D3]a82}.Ir,E%x%q:nG/B-g!qq 8XOl'n" !G|MbkbKc.,hTb5N\Kx oωn~ ą&*.nE=N|o?+7y6GN̓z_Hz>"Q%Z7'o%?#O{5_ 5WMbHg䷑^I\K͔_Kz'Q"WS8OOi!!VkOCK|xz'{OʯVR9S>|qq>zIε[Q O w?'k}GLFi !U{fY~osϹ랹3;Д_X9gʆ8%f46y /)wmeojےZB4h.hyqA2Y{莲gS^_oM9m-@xL@ Eýgk^QZl]C'm)ItLY ߳ߏ*cՌ~_ko}e~ܦf~~w=~#=zg h X(zJC۽ 8';M108 <{3qX a؅1E?޻z`Cz貶^L@z:7'mumq)9z,)w=T-iQJ~1Gw)xG+:|"~= uplxO-?9saqKFeZ|PѶ㱳!{,gX؝9W=X>La 2|:"JsTٟ|d5bPsϜ1: uYxܯmJ} E)J@̅1[ / jt߃ms~P?>}=&þfٻ6݇ݝbšk2ʟXGgpmסR?^wwby sҾXݘ/7u6>K}'> O#&ez2]+_k-aS鐭>Ryw? 5-;|NNN~ۃsOI s:yq76[$-vK?84oi> }+=~u^p@X~@V"uॹz9wZG~i9.^>a蓁3XT[y~R1 ~[C[ jܕD.y_]qcw$Ѯ;lҿ?R QܼzC l ?,?]Ĝ˟!?"$EPFi7Ql⩒ ]{ P>"6Y.?m< 8~ϥCI|@<T lu/#ԋLzhW[݆o e']3)C<څ?.uMɕ^nR`T? C[/t=;R~?)tn {tsVk19~J>}f`p&ӛf05%@ A{M1uE ~ :cK`Z5%vK nާW0vR[R7U`R295|9R[sgj7Na Fc&'["ez{O` 40O(:ag}w;VSgy\-xIʂj՞DPb8 ԛqT'8e"J&y I;gIYeX385h11Y,csrj;Jj9 8q;Ox|BL::MFKp8_t+˯tMؒGZQrw^!i1ųsg%Ҡ̘w"v'VZZ4ampڄt'K[@0  ?L.(3A6~w$6oEs+ RNggA>H#B84h`g miOcJ4qrk~JPKҮCwE-@fu`oWpmP90,\@t#)  `d2B/,qʰj,qa!E,3yʚ4tq̀7 G/К"y"IچO_@O"$a(T9[lhxQkn/j2֑)b Rt5"Dė"*&q"KZCjGdZ#Mn1q=bùY!" $J9~h >clyS r]M1DɰnYY))α2(hřoA6U$Xbq-8"c3̂ $RK1FKdѻbTM,}O,2Qg6c52MHi} @^I~ @!I$A 0V\<`$3E xBE I~ pNk`uX2 Bn8A D\&*$LdU0KO6V,di+ !2B/ے0I.dfA|&ɿ, Wr5|+I#{_0)GE 3ϴ?1ŎI_ݨuǦ_Vh4 -`$ lKb=&) |/I _F|Հ~ pXf, 5,W#<#xS|@Ĵߩ ȝ:r;6R"ƋX@2bEiI!$mE%i qMi4/{h>}'eLb,xSD1A!!]YG;oy*c^b#4>-xB`s̴V#ܡhf;wiö`|E34VdF OulÃіaKeFG]1x؈S _t8K2A|B.p>R!]BeȀkH^[ɸʴуwt/AS ,#jOMa|6'2 p`'6U+f.w-G-(uU/ Fu ?_ _ݣh:Tbk3~ON 6ݯ\LIVJF(:D;~Z- p{C '~5߿t"h_Wɯ^aF6ZZBT_xbӕ/yfڳaQnn ,Qe:\߲@ˆJaS,P_XSU]ao>Ø Bo[Dwy ٚZ]{b{=5]cuUͮ6؍y3rK".^eu" ,_#~eF_'ԕB$+UUW͊n^pSI~M>tXswj&J+Vw05U++ lFu*U^_joY.ښōJWXѼ7OkssاA)S%H3^&>C|ƚmR%Z7myy]ڼxP[z{꫱i>8Ï|{?C&)ۙ/yqރ8e)q^ N_$|Kğ$ vTf,幄v&{ 5.?d` x\ xU[tt @Đ @asЦI:$ݱq .P28:.¨#nsA)n ns9]] {{]9{=VMUEhEE qqa<~ԫpϗ_~d $1ZAX&߳!!ߵaJ_5 kYWK.{*mfܦ0^*㥊x#d#JDw9GGɾ(h8u?U<gar0wMs| h^l +4.mij"ѳ-$Gvi82Zu/z^7ǵEzZ\oafR^Ȍ98=̬ |V̧D >)'> ](%_'A{];:#`_";gXyՓw]>4|uf{I$kY.gz/?\ I>i 1^΀;b=hkImh vƢ)زΏN$2n͡p( sfqbƼ9<@0kk/ECBϙ Vmm~l ƀ1H La h -a?HŜ*jD|rm8DZ Knep1 h/1@|Zα!DťE%BLV:CH גeYY#^mMhR!pce2tɒr: l¤ZG=o`1]bgIJR΀U^Y@(8,UNAX]`7McsaOv~d{!Y~"U71Ud?C G hc˱&yDZi~keZBjcZHAʃ!%١l=L aZxJHIf)8s_Jҩ|2dVvIʋ:&*H:GvH$ic4bHK.qT#-e1iY&wP9т*m.l&upv {4""kf >o!g**&.LNz6 fҤAWg< ,S|ډY auhwչՅ.0_z2ЧX}84b qHn[`{;}ӔMpz:ی-۞#Ӻ lL !fnl(Nk+Z˰v&l\b>@,)@mABb%b, ;Xm YVgn rٞ=9j!H1 b}dt% E>D1l »G,ޯe%LF)\1O XFe,ױ%03mv%}ݜ`SZjW'x/2iY5i>@f2̠e͜'Pп P8 墷PD.\:yQF!.vW2\o`"l5Xi-h7nۻj>_X+y*w+PeKS('^qm ,pX`֜9J:B_EN62,0%0"P@ũZV-`r'Խ%lax4 jW = o7kCa nUSuC$  srⓂy<[y42+[|ҝZq3sytkyH0uhYaXǭZ<$y H?UT;%Sy|Ixeu<ϒr2?ܐB0&opp28)asSA/=QL*nY/b.7:)u6㤌2'%՚IIeGzIdy#],.g v%Fr=N~y .Re}*&%\t ߯̍7PSYtw<]梬K:]>AΡj$tɺ]f\f<~M^MݺeL!e= 1(t():!-:s(V<elZdEj#"N\d@r?u"JtdEvF*$D7l n) [[('nu[ݙs)f);__OMfϕ}*-S5KLU7]f%G2Mk*sSKggli^ppi j7tk?ܔtٝBF܃e)^"pn,|d_A QD؇ȧJ]φ?ї}Gfq󁫤i>\ E&gi+$_׮#lR 4V971tg89T)*Kt0RQpi؀Hag CPiv( -?U|/q^| rEa#ITyUx+b1/Nqfd᠚C69q?#>y6)Sك.Ǩ">H8; q]vC#\MR|IE#dR2YPA niAa,.Dݎ߸",xGoRi>;"p$M> i!n-3s}<.9IOB)Pكx ]"湒'Up4pPNm|d1\"HVRFYp7I&)³$Eu3;f?9DJxCbCBCE!@ơAK},G|c?}F颾#-Tp#>t};W'k7<͈wybawSكx]RYEN!p8ĊTm>x˼x_|;p/|a[J dK'w8I\'ŠoP( ~иO[C`p4N͢BW\zAk9Ίj8:XJ.`HT:W@t#B9[44zXaHh*'Uї}H @ ÷KcArV#_ \ Da}Ab0IQ1?Wc 7\F0c0bN,:<%L4uBhm9>W. Eܿxy , A4?q V)SV%XHfS\hQ7}^ozÔY)sΟ]-THW% kn ̢X-2& ]qa0L2SZّN z cc19,:1j9=萑Ɠ Z(Lgqk#P[@xdIQ)^`c#ˊJuSĴEbXT*i {hu"8kR3^ ݈\Di]s-ә@xD%O)CӌDN΋X0 4 Ƙ8*f::Em&@g$3z#B#(6 T}1W3)ןd6s V`.uJ F[][0gH$,"Ox!mEj]Tĥӄqy 3Dv5::`u ,"X # Y'k*j b9>:oϯ+8H[a֖H0׮,#3/?i7|4?] +ٝ'EL4eCg~6^Ϋe}[A]?`iwHK^Q.qS0\i{uhhql2OiNm1n4oiC"?tBݳ Ȇq82uO߽o?N[/myf q/q6~rΜ2r[ f)2TO3pxgz`xZ1W׻-N5>n,58i±FqN t:8N4+<8plq88QǗ1qc|I8RjM:~ q#:;S8%eǟڽ3ǿ{>)<* +pq,E3>22#>ݤt\_d> *=+7ߠxأ}̠_ow}4}JbO4?4/ lvS2c> |O5%ĞSb?<أx((_&axoa5Qg76[pKab?!~a} GEfji 0"&` /j~d012V0.G$e1J8J㘌?R *B9@7k! Ap.BT!^B+lN YnWڨw6^WS)!$8Dh Q rبbFu0B<7O6;o"MG)ϣs຀X7`>LRz(M"(,[ 6s!T7K:ҸTiߨ4n7NmqOc({6;"#`196|S24yOڋ:q/rиPN_ßuP^rP^sP>sN=Ip6|'sҸ gla.?{Og&KW3_ȼ0.og,㫌Y-#>A8ƕYoc]̸ ,1FK_3ne|Uӳ '1cdO1eL!8q)Q1cz3f{BgܰxZ xTյ{=#2׏s\l-_$RK4Jt`Ҭ5ܩT6oz'%a9Afo y24S\'9baaxn4*uuJ{/ ~C4gwU{ v vsa+$_,>Cpwq ~uߔ %i?;g%ڏIXyzCOmIȵmO&0i@><Y>EAc~|̲ADױ+R"9L&럹I6Q4@#x--ĵSlv"4 yCׁ{Pa*9iC~Nϋ4r(TOt|\6"uФ"WuhB@wms8dőccYAuVaED4겎DZZWPҠ3ۋBGn3 ^>AF-Yy<'7Pa=@!^_k,!鼨@ؾNxY9d`3L#)Ñha~ 5gu9˜ QO(.hFyGág@3]4+d&7a"F\RA0Q \D24ͪk=hʑ/f5Y:h7@sy𙭹Bs x_; '?x _{8A?S?1]F=4g$~!5[h-lazClʀ_Y=Xl?\F[)JEԃlhdv5 튝aY`˱ea\ ;*B<EΪB%r2ER:2fZ36 fWYO/Vlu+9gNߨkߋ4`OgDO#ЇuBha ̤,pTBjP!R &8JK=*<!х0H[ )T/+7`w/9r+5B'v')Dq֐NknrTHa*(T~7E,Ʋ( vq-*M0ar/[oiPfbNd1|,B\B!o[@D_"o&'|A5vSm,?L G+ >{0?gmTyY!$YVj F3Y4~Rr))诧kiSRtAi[t3u)k4㑽lR蚛aL^Z:yL5MRvB@qn q*Cb$пH7]DKz="9C~:54/:"J'U)" pG4 ouN>/uq>;{_{ZPXL.kx)Hqp-) n3 >eqΞ,vvT F;r>nVĉ'Q4cu; ]%=Z^NjU+t(GH9'UZC-o$V̘u),Lϱ8?mcHlCcGN?Z^EF$+ 5tW{ځX}̣g$I#ɏI+æ1wCM[H6t:\u9] 0ra=*`^ߚz귦^Tȣ@Yed(Il ʚF"ZLR{ #kLr0@4ĚRD3 yH17f6ާvWT c閖]j!- Rˁ5 i:,Ѵix ^'b[}+rP,?o[ tR,Upwp䰁Wp/*% txBM4ⶩّa{|X^56,~@df{ќ';Lo*vgbZi7Oy2}ćVS{g^52 & ֘^P5#[ԓlS[@:hz_L8fW?`kqinִ ִˁb9O|.?T-v쁺8H&0W0OA`7Q.tBpM*M{mG 6#fvbG-ڎ@cGvώ;hHOjĔp [Blyk: J (TB4-ƙ"av͡;6"!׊(6~= 6-~ݡDU~俲Яs&ʹ,,k5DD\(Irq 㢭qͱdYe镥\zv(m@uxi z'#MDζvVD[ v"iMOFZcӠ"Ԁ5֬ X"IZ*%7}ߜYb\V3Lvuw5ls7ͼ[~+Zx)&3oY2p(,F.3C?0ͽ]F+3o6͇ i9P`|2e9i&{xx[YF<39/+̮'՞˥1F"Qyl1OzF̱F]eF.3i [j$.#kǤۛ  k w$:E5&D}I[GȨ)I;"F1.q#Y7"!(?"\_GL=\~xks,X V3a 6@:Ecdu-"5/Ag3d~;UW559u dc{m25)vx"ܐ 7Gm4mDh:-h{- YKtԵuTUFUGq> qn"&&[c^ٚiQICHq5'HC$!'6^:g6 c ^=-"dҾF0d6Gu j;?6*KYع0u6[e9?!ժ6$F^YK{[\["K+,GqK˕5׊9,VیXY-uƺD::74='UQ:wzzt/«uш=*U\k2" R^l"dND\U+g lU6ҹt.*1QXa *5LT2+$"j ̍X2Fɦ&HTo*ZI'hEiӍjtj!5ܒС%<߮JTH<M1g̫/yO#/rI^Vԧ)z]mv{ު.ҳ#;hvlxYb6μ .ڿ 1pm7JnOfs_ ed_΃= k>g3EZuiM‹&Hߵ|1OJڨ [l3-M0KU]$l ɓJi;h3iIn)_7FXS`9ðvH\@"Lc*mhok-'"Tc *P&n2+mlOvYS]Av!+8'Wj_%`_yvދؕKv|qߠj'%SV]U&pxoq;KC:;n Eeىz>mEzq{eB*QWOLU6 q1!qى&۝t7hu#v!&0<8 ك!!z~}⓸`>І;sû:O..>M\]|s]|+"p0#Ǘ8x3|pFqy?E.~oq +w1HK?OWD^~ҟqq]|Lo@rǺ.~{irTg<~&8.~, /=kkõU5׆W}G 8Tq]^s`ߧ>k_SUSJk_3H߇>Q-f_CZe?P<^EH $ s`-p;&y࿅/?.!4#]pƒ;R&R KYjIWx:-CoT s wt;|.&'tyBv~"`+t_hcvH[K~|>@s@:-Ot<_a49/3ґ0q$ }$Ʃ1.c\a`q3b|Ig15s1\ƑeS30f2^'2{ƿ1~˜X8q!c1x, _3akpG1V0`\qvƯ1~;?`!㫌cyu=U0Nfl@q c?<1ixOe~)r7ۙb~'_fAqG/0'2Z~! 3?q-~]Sy_a5p?:W2^ĸ!_a|o_SW|1c~ ofnƇIsn34_82C˯`H,qcg{+Ɲc?Ǹ+,%3e꼯d~㣌?^f5t| Kc1ƸO0,#0kW0v0͸i\ Z8=>x1(5n). x{XU 30 6BFdX"m-`01 OZ6Mm^oB)InV[}!nϙ?^;3>>9sE*( 0?ӔxGQ-\{vח]:?|o2{.)WJ{n!Z{\}ҾDoKWW,]MGW6Ez55GEo|%Pob-PվW~k`(4$+]r)f.p \sDzdZy1}b$Hck-J⑀z5_/6'wv޵?F 5zꡮS!jN秹tz8n]]Yw-1Nyԋ)\_pw 5y]b);ۮn5yNDț]Y2zs1ŹSX¥! cL[)zt{PbuշB-%,z9k<0Moha6Rj]O|];%uY zn!'$ٛY}0ARdh;%I$eŊrF3&}Qut]:`)A^L׃3Yyvar r )7f>H7di--!w=ç]'g )8}\(q@;vۜ8F.bj;FäݜdFr+\ M.E>fMEzr8g6:^P6^ HIdJBuHAD'k/*QO.ȍHZ@rmn*"l[$j# J!;ʊ QLdUQˤc7&I`լL)`T̠F %Tv;6@$=DZ6 N8!0YyE  9@@Sq\ $Es-JO(=!S8\l GBQZT( ">i&sNP4(8ObxxFǥNҨ[ (0 ;aE%o8 ^hάl=m0dtSA8q콋9=k#UzcԀ\D#RCfP_BY8pL*It!B=Ue_()dFV4:g=?߱e%܏J&'S2i@ kapVA|њYE\ҍs\ vS{Fiqxt2zhDCd|1msĽ/mgC4}>8,i2<7Sn v %zn EƑbFwo7!7919Vq$m'<3`;BP胚tR|uC4&[?Pm='H9b"}>a#5i\Tx 5iqr5b54vsFzێ3A"&(A5b`:hɶ^9&w -+&B7LrF"n4}ivܛ(uxF"[7v.G鈣v<6Mv O7ⰨcpfD"0D~pѕ9 pj"{+Kr xJ3{SX1mN/^6&m,qu5e(p;Hnv窞8YKj&pL ^k:Ok"2 Bs^J /7$RiHI{8ZC6C(~%,?`'QMlER~^ɞE Բ'Îu63eZa%_G WQw]./k14,#rlM\TPȎ)Ԉn],ο4p7@FDF̧ZrK3.}]R8hn P>iߔz.g~Lk}do~փtV-tOӵR'w}jbdE|;}C?u"It咢t}ٺNi 6gxwpp0W CiwH8­>C.VW"3+g %H(1c|Ū ڒ@NXgڞP کmZJXLї= s+hëQӚ!Ƒ@58uD#]e3fv̅3| ]A:H\pK#x/XDe'O pct6~~Y {P+O0oqUVsv&sfF,3mAlg@ M @֤@lФ ׄ9/4i&Is@Is@|l怘'Q'L4'q-/ć!C{/م9 vii ] C"!!C"!QbI4ă9 Ni89 zk4DiHs@7VbXq,wo%(#2cOMG,Dx:77VɑTIv$I!M{4FkhO⩆a'@G2W$ޚ$5TXxD>*,wʉ!E NHER378( oXQ-p8A/lj 842r+~lw8Ţ)[IUxnn'+ȫ&3<6"&3 d1`h M#Viڅ~LsJP84aؘRYȂ L75Bӟ MﰦRGb{d|Ak. 8o D8_vAkbA[G{,O'\1,64(_ ~ i)OLJzo'Gƹc?(qKUHOn-ͳWZzW[}UC}Ϋ4geg\5quFaaZUkBGi]Ε_uuMmFݵHZMTD%}Ƹ:9.$@w6l5~}NT|FVt^_js;E5'2TQ7&tmiZvFf$&}bWdd1TtQiOA{+7ɴ0t-7eWٴ&5;`)p?Lr8:y=-T7{每sZc8 qWޫÇ/7-yA\;/QY(ng]liF]k)fu!!ÇhfTWU--$tdTVޙ3;c u+}u3V)V׬}PۤHjժ!=Zq dC\DҚP/-PXݴvm %qFc&"UDmZK#47) 9? \U!oo&Nm[Jb$uAt,މ+weJ}]C/ĜR}Y]K"K'*rh{ WS"Vзe*fr1_>b+#5u`_ FG*1j1RnZ92N^7FmCG/ {+e[.2 "ʉGؑXv@vQ捞ӭqNrh}|H}#_>[F1J(Ž:$;Fq#}'njFSH)J D?й4JXSRC&%r^A>tv(ϠEE7+`²ʲE +vR:|@HG댧B SbxBniŸ6Q]'>/C˲5D-qH7NJv-VOĊyeRQv)3+)uJR>Vhh}.ָHehB%nBI/D8U0x}}\Ua> 2"*ʨ***%*>m>h* Z*&:ۣV-{X2334w_햕JVfO _{=s}όsF/Uѕ(KK$V ^EP_'O:ŋoݫU3lLvhЛWԮHٓI!\>wIFѫjyÓP{p^- 1T9.(U5Yx~sԖ%JvE=S&{'T}&m~U؜ɪOey5yV<&RlK _'U1PU&ĚxbMY?Z<,}T;PDH(A.*ϓ]9ߠB/]whA@zy(Ǔر 9M2s$*wyߢaoLre"{^=H eUH"; *M:鬾BFdq*vGoj\H]kP.dNV)+w긓kk}|GxhD>=B[#}74:_6|!Ol{".TIyڲwên٣˩/Ž}o444'xFrVǦ~ҳȉ=.dPC\8(d44PѰL{$5IT.޿p"CMC-5u%BP\jQjIbվ2>{Xs'1R}عV?sɸw𤚉C:ܻU=كk_UEfY)UQ>ϬڟYuap{$7`$zڜLrRXj_6NnS%'9I s6gUY}۽ZYDaMT"UZfM M^T˓Wx,W;omSwz[OWEߡ:<)z4;8kbڛM/~Ll]A:[X[Ĕ'8g"-f[4}HxjOk{_n5ȲEXe7$&NpZ'ک=^7Ψ]G^<KrO\Sh"GӬ1IԝEm6**,OEVVNddW5 Ns<կ;@ʤ9'fܞwL|w]oBйsYUj vdOyjeBK`*k0}9}WuVkf78 h&5dcLŅZ9ݷp6 i6#+iJ˫V2*Bg7ʎo4bҀ:3C,/H[^bt|L㈔UMCѩwcޱ`y$/ a-(']Mtel!k 5ouKW ߹&,\sIk0aG pV)G nmUwjR[c?Z>ӚA| AbSrS:3 C'r ޟ\o ks\?n Q?E=ٴޚy#T ޤj'e6Ȕ;5o=՞u{E`?_SðF}|V]cq-WrLpk--1òfgbPr=˳,}v2@j5udX`RvSӨr)$T.d}s>Zx˕^&.(ϣ.29EFu+z_(>zY:$)z7E)z`FܴtQ#2' u>sӱep5)~å΍6gL2ω UT:U:k;S/}بa7<71RxtTUóժ9JU㪪ӫ.TV4ːJqwUՇeѫ {ay'%[<2c1'/C2s;}bf̵YkY\`5pYtY!p_оGyڽ}o<3fE<ӷ"y8\o%qbmB\K*bNM=;ό%;Q?Q#*6opLS>Rcnt>0P:] w+M7Fɳ~O,ky2d?\LM hQr\blɭ]1N\LjBGʛSkȕ"FW:Me-p2cjVf,j%7)fR6훔C#KEʻ ýX@j抋Z>fNZ &{y5Ʈf"(G5r|kў̚IYD_fEUOq>z ømE7q#*ĥEߋ"5Ej]%$XrAi֖$%qD*g} QSȞc+D-UkӠ ]-Njgan  "S#Ԯ}E\y^zmv %|阼9)+)ٝLd[3WWpU 6ߖ]qPoXuюh5x:qO]ɹ#)k5 U!+ fӂwJeyY6_~'ڻ5Ż"> L3oy)ϷtIDu;߾1{=^_jO IJ^{374̽ڑ{N7MW?l?inqY}@WS_*x =nAn/t6=̘8yKR_{ku;gG?~캱7_Uqj_V<둥_ܳܭgnϗK5' F]8cI _8[x}W5\?w?|}o|~>0Pw|/2TQ N'z^snEd<͡/m4&j=%Oo?qFn}Z_~jgݦ.sD}Gf{emrTiՉ?-D!/o]}Ǯ^;F?=QΏoD֏KFyxb]!>jo ??"ޛt b~곑kv#>fgr#j݈ w;XIۓgGď?}1MF|^D Mxb8ѽxX fSmGͪ@l=sO߀3n/D}v-d\˫C.k܎>#]>ycP׃{;߹Ȋw>Y+ǮfWq\sbVS38Ę>ڮYaKݔDRa7r8RwK+j&>ɱΤ荲i|Ma: v8 gS(=D+QQC۠D'HFu]3uiRS=fI jI 1&B'fI=ȤBBZfd7;yD(~ {ۆ)/w1T4f=,?L{ 7TQw^"PCM}svRι oΘX"$E?eeJPh JUeTG "FC?LDuܱDSO$xBdĩVY⏑[% wpmVmC&|Y!슡UԥcؓuvI<Ů$+n5ah (AΤ;]ZE+#cb|.F.DaͶ7JwߋXcQT?+noh/GABМb`nMDQ2nc7nM)U6896ҔMs.3~)CWja+7iy20 ]x Q6.)Ini4:ڂF@'wb &QGN2?̭+bF0°}]abiBl(z q)O%\cvAM! b!.v8)i+^J+3dQ=F $ EձSn [?3Ej稘=mTJ41ȯ=7D i8)<{QT4"2hF SQ1Hܘj"RՑ$8Bdȋ$0tKĨtG"粊: -: MvBbeKG;=96B,:ř!"޷Z%6hWZT`\"#j騘 [ۥޢ$+?)D񊢎 tJg:W'ڧDL Gp#(6WLwMw*@[V!nJMH@]2|l̯X^3Dމ.jmMǟY*p;k>Vw6 2ъ}"pvGȴ8R `L۬ƸUa?72JNͲ#1T^"l@+L$ךvE6/m 9 D%t]$mBt"ڔuan'CrRD\'P7"eZ,RY6ٽzy6;A/mTVZB xfz&IC/t΋ށK_t60S-YϢ&ǢfEMEMEMEMvKjyEn#$=Oic,L~-sؕckŮoD@/X!(7MkjܖUSx@ xVbʳ~ 2Ӂ}q-g)C:f?KN)\5%5.P3"n@Mn/yEl)-(MP#hlY2GYFik]g.24|YRk+4'J!D e,fXsBK"- dH(SHp' o+Q&?ECJrjkECJQ: hHrKv77ewQ_^J7 +Kss+͟J`> Lu8SYvW H&"-ی B6H9{xOR_'x1jq1'45ڗ(]J.A:I8f-u<=57L 1TγS__(B!9yjc-(QVD;u3A-H~OyC#ktvRP S JP U1[[b# r>.X"=LC+*ꖱ351m";Gwh%C;d,s+X#+h6l@5_HfIm7ڐsKtc >3 C*n`UHȴX-.Zv'pLۀx*rLq{x^ۆemI`K>5#%yt2/%~R! Bxe! ̠#:4$_I;$_I~_65ٗ,9Լ2K Cz_Q"p? pLot2?gAZ5ϥ1Ŕ4KWp)񃳖EΥS ٚTF+˲]nzzOث-zOޖ{~my'V_\ `=+6~WZVV.a"'۸Mvf5"7nl6l_o" :/ γY_,rmmIʴ̖i.n\+[)|y v2f˴̕iZn@[n)؀662=I`kS@{9؋ysxeӀϱl|;Yq=E&-.E'̏[:Eǵ7V5 AVFt-d-ף4YU7T כ! Rd)(pm.ǓSWȴ$5\\˒&R,7278\bnć~IkxgҞ9g֬s3^]2s/zR{p`fe2>AegAEٲŔԘA|eueOGohڏԘ)Zjt~',//T}ٮ>ͦMKm 7#@Ѣ TWԉd,^TY@.f-oR%;}9dK5;ھu!]ff'ӧһS,٢x=yFɘBOm YYt%SSΪlQZoո%56^=\,B6ozD6Э6Zi}bmz$wk/uZu' gc-C5fWi=u`+ӮSVZ?dnXO>n|Ŝ2c/18jX{ox+Ey[G11b 48Wo?6NeN mܛ ˬP?waYD^_pNx+_x K f/.1@č*jpYE3J揘xݰQc7pn2R41B>k̚Q6C)1[WHc[lK[?C2K.i5XJg,\\X\s,.q5Z6w̘_^ .*XOsEf-U\P393 +쭾[=\PP6'^Ś5qqAa{)#4,IVru/1Yd 6"zR:aQg!*,/,,(2Y٩{e81\ ғD]*k-a~B=|7Wao>11$ʨֆD9~riQ!!Er">| _uGH*dXT~jk:ϧ?^z3K돈Оl!{l6l8{_^]mAh|V@W/[?Wl%?)'SٿkQJ^ծ#WxLOg]Z課iJľ?ʖ-l;meluLտ m3 3\Ͼoжڙ8vhq39\aQIpkH7^|a}%}ť}qP9}1>IeWiԒyj mުS/m?uytB|NR|&ڌہl>Mk.^lL²REf`~ Sj:sb,no7L7IETK_7uNAY~ɬ7^zK3\YXpz̙KgYBg򛔅lURg/XP@kFⲂT~~MNAQ~aTcNiqy ^Uܱ^ wTwT Fpĵ6[ ,TE޶[(u);ώJ.P~~< Ͳg(.Ll"sZL^̀Ϭ^j&v%ȋ{I^f 7N.g3}w[~uޠ`@=36;4O_'O,S^f[ 7\c+c l%ƠՂPRʥ^?a,>n!6Ek$tH3ڮ}' YaJ'NK5mF ~v!Iųd?S1d~)i[ՙLcUT5~Ɣ"˔"̔×MyBߩʯ(7ÛhG3:lFG7cftft|3A!@j)GtG }tQ>Bg ׌Vњ2piE9-,peFWs 7G(s w6-Vˀ}i/ }V{$ey~?Sߞ= zwdHszٮE:H9?vrBg-I$\k 3/j;2b_kLj]M_!ٌ30`\Xxヌ_`|-nΌ0baAm;3~-U LM-1HN70=R[x3p6]0`:0ckG3ե2]ĸ@-bc8Os. #鯘n~7:mR~O1SϚe91wڤ\㫜3}XI)#?÷PA3&r~G;3LOa\xKlG5!RO;;a2s0vKRXRe'grqg!|a*odz&caW0ۘ;|3?ίcpi\Yט o03}шh艐rR7qx3od `ao0_CKpHv߹|4Tƹ̷a=\A7X1./>|?0rDHYކ_,YLas͜ "ec|eq?0GIDIQo()gOgK1}7focy3e0~|.|I93|a|uJ0$%2=L2]jFM *cơ<=(q~v=Ę=U.zF\3W1nc'#~AXƸSFwS1>x`W/gx} |T{3Mf23Y $!l !$&h$DIHf"Ԉ(VP[+ŵ^jmVpŊZ缙7~ {9s}M+/u]3tͮE(i`(TCZOU ŋяN26_Tpz\% ^8yYZUn.m6D[pnh;~#S@!g%`h &=|JEdkXNy!d[,qoފu 4pIߡxˊ++s 766ǥI4DMԋW,dŻܺ[蝗;ݜ=p#}%8H];j/ھfu pw  ǻ5ԩ`>E0j'~xJ 7Uv)y8TB$7 }(6ƃi܌7Ěn!S-t%a+8+2 3bݸ`L+"'<^-/qt/-iԤ6,<^d95~$mX'VŬ_7S[QOo]d/4W,]Rn]D/n慾O;9[B/=9hFxlw!K?#0mӫZ5Irͻi7Fѻ2}- hQN5JGj [j8\8Du~/=OIVX~6;_noF2-ֹ + %%LL S&mRԧMYAS۰-Pu^TTҜp2b[M**im8wVAFx8=Ɏbٶ4#7giabfee}/^χ96iK ]yesr\[`;a-DC`:fUKhG hxFWʹҬ]bP䂢Mӡ5XeDzBI H5[E=] LJ8Rƒ%XCi减7\9&bU_í]8R3Zs4Mk=Z6)\:އ;EᐓVڤy+tH?"G5#C2KtxܹGQ%iZy ļD`ؼ|W+*ֲ -X2a`ۄmjs hn˦,?tAˇO\j[&msFhi= s7mlsh9+xǁ ,S쎸@PqwQБ@ =v!*9H(u=F:mU9 q:r6q+*ڂd1<{ Izi >lږ@#(єM (R\L0Gbd<9-3٘@9YI񷢖}9b6'Sz-*0bRPTs+T3 !RAdjg/ЇܴM,ęg eg(yR3JPVTs5y3tD3 g JufaL q~΅2j|4X9 fj82$#geh* XTssA>=|TU텏|^D9QcޱL9h5$ ϓn5dw4ʨk(÷zx9瓈#u TTbJmS 1r~RcϷ7G3ۈ$Ȼ$|I|DW joJOJ%-*y W V5hnbXU%ۆ7Ze:| U\6(0*|`÷Sw =cħP!SVg4Zbm[ ҬBzoMr-q*۴xBIm˴?~{T:_RBUH(@Z^WPOͬVDf5ԑ mٙTx*xMGiZt*ʿu='kKuȓ,=:U;ȇu3x#&%5̉aNt*r %s$U/qBuv:-ÇYPG>v Vq{/ QrhO 9F/ĕKoBS].цk,_%yٚIu{8SKhBwpLale&6)\6DML#+kx;w1bHΦ ТK٢{)Mz-u,,Q>aô[Q-ٯ%{C MRWMH+6G& RRɌ6U:b6ӌL<[lY07 8Pށ⫠m~a.kw"M1 gbHW;YK9͊jv },u_=U쏼ƭI<4<x7H=YKMLB/1hv89L0Hd)f}`9e7b}7)6;WprXDGeקtJ\LlޓIuԨur2NS4j?e=9C"s]TG*0;c. E>AgG+,t]F]Gt\34|z=#7 ?'"Rc}"o[?dmMy sD˾2q JG%A]IK^D#=ѥ()'[oiI%V(-jeגFMԊ?9YQ-&,jvDZ"ۯ%S?F9Zg6ʾ]t_i3$&3B5*b}{+&$ާG)Oc{E%-яӂh?(?8{u8ZN -,8x8Gs{Z*_: |`*)%a1@,gNpEGL3"H/ ŤlbQ&Qy9f DxP7&٧o+LDd]=RP7x|2{-&N\e'/Ss#1fq⹊xڄǾr"*m_%q/=q7+u9G$z[Ʋ}m}یEk=lQ\E(.Dz2fLYùF3 Ki]=7J:.%cQ`EN;f^ȉ_}RZt2 q}Ygz>J'3ra=0g3p"0e#}d|.?b-UbFd]^)2"9rflR ,E~jѝ }1,cc|'+wRw>)>.͈}eoEe*̮Gc IS#H|4#-<*Z=iK, B:TpT+f!1V(o%:;S<㙖z(e@_|]r^^ͽܒN}Q?sCZNMq.!,=ugh[cw򝸉L'cR6갦c{9F?z٢ 1|AH{k}9fRmO;գ:{AJU<TjfU` ߥ&ثy'$>{fx 9WbFUHOꅬl{.Bt"ڏuԏy7c5ۿx<ҳ9~o6)Ǝ ;kXjܘmU7Ϸ̆'Xriն *#^<:Q1\_ˍqA>BKîS(׺!齸C @ PZqgSDWJ V=YrJXR C֘L%K/Y:^B' bUΘq֤c"1A?(K+3![rI!ҲtSJRPJY&lA"G?AIծJ^d R>4fV>Z_C))ʉ O,]OXWתuka}ޮBLǾvB$'o“ikd}'e$):mj.יE$qS{&&h|-tƁ0RuN3),8w40QL!ĔAed.^Iaݐv #S؈OM#ZzYI'.KEӋwLqaS4FH j@q !7,u:2evnrMMY\D YQ5fBЛCFIt 4g4'Dž rHa - 30JBK'+R3&1FO<1WΓH;7ؤ."Cݍ[%{ wH+eU < ~-OJ*n` ` E_YK" |Ydi;SyE;/'<(鿄y݇ꜻGEg=7: {cb?p'XDD3$D3aC77ܡVɅxp:*QCۣQ⚺Z5b!k#>*}|L~DxDdo,Y" Rd_,Ȟwk\5'k(=NP8YC otWI7>j$zhr9`J.*'ù՜AtQ!26-'z7JB7=q LLْ^`E,J\GwW/Frt |Ko ?qrWų++W(&LN`Sd-#J,ŭ7߶^zBT⪻@J07hz^g2!q0w pɄ]tܲ[h q'aqvt>~ @U(9Lt &pOQV՜^#Axۅgܵ[{ WJ6.!~H QZN~NN;[La$a5" *]" $17J|hUulS ?8 r՟2N mjUn۶ ծ FLxU ?b p+樋HGD%\<9ps(I`/NDi^NipW!1ˊC8x `W"pq8^'"DQ,Eզ"$ZEMEvott֓nOR _r.Q \*P ^ʅITBoTGFOp_x,tQ:ri^;pTz[9pn!`Jk7'yc /Xe8&|=m46i>.1 W$_NN$KxO&Y"D_"NI`/ʙ}pqYŒ x/ꘋ zEV '狥wCߕ ޕWk/ب ~wWDgAr9s,|V ?p.f9}H2i[;ќ8+9pZt[N`l~|REe|]do,o" <"Gฺ[sO JE.(TdkU$$TszDuDC1T!ئYshlX1fDC1[j76BkB# 捊f6uV5"6o֖jU`^ m孄@C[J(m'&?s@5B%$?Pc*AN78NȠHAkhs*~P{< klmKdJ&XWPV-N6ԕȰU 7h椦ũFfs3gG? /yļ%FhDO_j`OQ!n36>j? >#x,cgq漎7=bu(0jWi 0GuٓN`7=1kOx{v}c<;8Vbo߳2Rvמr>d7o{ao}$dOZlg;۸~;*x>'1B{Y:#ۘ}yG_`dO|DVNy}궓F>,6i,1;{3Go&gg rSGucJ*(_4~oƳ7چ=+d3&xk{u c򬻗0,.>߾fæ'>%_tJzO\I-foPHWa;DδͳAp{[U =miچ;oK Ne_sF㈵=uJӊ[452iәƑ3(ewm޷-'Ϙ;dJ7&ه'Yvƞm{s_::9φ`y66޾cvwИ1 Zi (2;|Eg/1NiKI à jm 0(Z,om'Fm~ig-jm ۴6kkn!@U]uSCZ,(PT9Um*Vx*Zkmm/( *avU \Y?gꬪyŋ`3aPՊ6V;kX5ĕT~odMR3q@-,3j&ThKLCZ?BiUCU tQUM1TCkZ4I4hPcPN %M vAԩZcs> _X2:P?|Zkks8,rY@>Aa5u_¿Z+i& @p9PB: o!J~P'E6KUPT4|8f?890Eu GJ'h#V67G4#VV+B_j>2/8= WVU76ڴrZa;kZ_;-]HizmSSi)Khnd9JۤJ[yKэİb VZ%`x费SgM U$XwY%DT#(i͕L+UDWa%Ư*m[wc_$&-5[k6G*t_omV]焂6*T -^dlzY좒f7*uuڊ\I٠,PDk8MY`)GֶW"Ri(SQ斵fh+D PkGV(3EJ[:(WR<57֚m>T1V HLM~AjjFxF5- COu2-bmhmoNS54ʂZxz^67Ud]eb^m/H$\Pj[&*rNmHQ 62kԶ˫9SBzNSyTû 3tSMt9 FsSh ^gh̐f"Dֿ>2[(U,b\&΍r0H(hKx̒+BT0s:‰p~:XT1M% 4,P@oótTPa0QUQSN11S]*"Cm%5g:%474YaI35![5dL!&̀e%yB3B||ŋ~V{ t9O' UGp5*>#ڌNڠ:߮)g4VVaFДP]ZU|Uѡ7FFǑ%R)mZ5GW JfaT@mI}+M_ҳ+͛]\^EUU6R(%maVa>6!RF{1\[YrkihhY.j Ԣ"-WP>`-V/Id?,WA fSԕUPY'j 5RTN2Vk)"i:}R餹Sumԩ^pl49 B2L}LǸVq_f/:S=Y_AiQ|85-:CV="[y"18fHj:ɫZ~mEu1puߥC٪(ZS9/2Ü"b?HOb<j8R.}MЁ ږok1d˶4&k lܼ+>e$FSmˎ?uPweLES]brJ]sb&#<oSXu7Ivx.;Fs0t͗T9ţאk ˺?e$&݀,K}gj!;K6r:Ac'+ V zw}^a9\TgY*ffYJkhxčdM>u+%Ooq|F|ndM8ᜧwYaWyRia_ξ]聯]`7٥NszoOj&:΋0aL=3*sEu|'#.>}S7= ~an)g mǸOz^&҆ZJ3oSk|5䭠> 4UWUfܘ<:UTWVaZP=5IWXP2VVi IE4ny8⤛mHm Q6pJƿ盼P!wS}E?0T?EZeO,6+XMtA@h~;]_ikmyњR/yʒj1+Ҙ:.,kXڻ*F߮њGhlm _xMWW+bnu'oc}p_Abߎ}I_z7vU.5Z}@d۽ 4'^V}=rMl}YEe2%D&ӎ:# Kwjy7ZG4ų3DO[ܦiSs5ߡ}uZf#cڈchW 펡=17NSc贘B-4 4BcgYhN5^GMX t7%ֵIzBSj)O%h,45|a S~C }9}1dК4=嬆|˹ 13br6V ~ArB1OĔCGPWgA93آ3c1t-rn|-rF}-r}N<<㠼9Ӏ-r6A9<] ȹO"Я"gE , t_{t}y11ti 9@_cLy{ !CoGЏ5{XG;hy}:O)S,/Bn|j>> 1 #QqoϙR\^5tʪ)ӪcFnQ ߣ7',8&Qckb޲tsd^-E?z~6yp>٦8v&ҼWy^u'#1/XޚPw}`u% (vssz%o.z~\ p#']&޲uy/oDDgucP/[& MK'L:`$B-5n`}+?Iyoul.틁t\i+5- a8E(6yX~6{ m,riwJ=+?I~6x@8X@# t~Ypr}kr0ȧ>ګ9د q8seA H苀h(r{Dio8Zsh8wz<:i(CD:Ky@?y8H/6r pm<)1stP^qK؏W%*ѴۀttxP im38Nz`'gJ2?`\"x'kC N;Y*']d~/wKN9iZpQ"o9ҁaLM{Ed"1zi\[?&$;4"t;@W~ H7۵8.n&:{hBbM. {?t=ִGK5y,Q˥{Xn=,p4hGg&/wbC{yWQJRKOG۽|ou7B3y2:i4-Jf/ g2{>W8uI|Ğs]`6w (!8F YK [/ x;>$_ RGACg)/8Ip قg .  ^*EfG|MkSI6ƾC N/Bpzko[pG?Ng#/S V Z7w /x@%3CG )X&@VEo|\y7?F-X 8Yp`SQg&xLkA=+)xx kW "xn_|G3  *8WBk|B 'wz/G`[AAV$Sv }"wTcB,}+h`>]|'U VIyB[")NMu3 '%%8',zՒQ諅N}yR]A1]r.ċ 3[ʗ /IZ_Dž>(xX" (t3p7ㄞ$LL)_,X' xof!Q9IB_+={ >')Hт3SpJ ˕Ky`P v |V*_J#io*өR?[G!8Kp``Hpo}7) >& ~(JcL,) /ؐ {PG 3RK9{H [~=X_h/) (_?<%S/8'[(8I=R~5RkB.x?.$[kLYYsz:) !?| >Ⴅw Ng|5{~V5S4Τoo@ ;|Py/0fN݇?[sHo;v(Dž[Ap@_їQcb)\*˅^+%"ApA?ċwgH eR>AL0$Ap_+Dž~KKAw&ok3YO@/.7 } -?!'#1|yB ]ڏ lJ~'D0?b%킷 |O0.qds _L}%uW/9s#qRx&JK#BqFq\,xÂG__ )`\z7s nt3 ,H~OQ*41 x| |}f&g2$$!DH$HXDaSBB  !$d33(J@ JEmu/jj_Zh?KEy<3I͏=,s];6ͫ0 CY/C9URjccrIu5=L'.?ࠚ97oo_s {`ǃc&ު|vw+ 9R{ۉCOPk#l7$gm,we]Zsg~o`\oI0GP[t9v<л`TkN$Ahn3G8Toz+Li=󧦅AI<]~y>t4;+<ƊGdvG8?<\ZYQAna^s{8o{uڎ(T5P}I0%.?l.Mp}omL߽>_E0#8A"ƲFP;qS#ʮ/'?'^IWIoRwqZϷo %Ԇ1+>DI.]ڻo"UOp;% y =瀾Ӣuwh8P{990(> {.Rގ@vN=ߟ7oZV Ch"j׾e;D62+)X=M^% G=?\!p05 GW^wIz8ۖG[0΋%! `=k/b9oݗm b]r1;'oRzڹ1k/]y.M-Y`Y(^G+*`L۷ܫW7OFڿ(6`VYt7d0O D؋)[yf~"eV{Gd|m,;vv?ew+;?_ԟiў,;qe/5`b|n=-~Σjd@<yIΏ&?!=ߘ἞oNky: Ht}ӍO%_L/dFޖ".zeRϖ*kѷX}$?_$<_UWN񾞧gɶӪŽB[K) ?I[ voJu߆ y%篘ūÀާ0"cIc\,8n:L:ncOCGQ1cȱ_5 P{ItwD$Kl5_z ¦¦Pjl `͝aSUAIݪʪ]56FT[`Ύ`kcg$BzMe^Aw ;A4[)\.'mڏ2d} t%vL gqK j\oa&ϔéM-*v:&Wwq@I>pJ3'Tyl6?#R!O^a)U$bI*˓{xb^Qҽ8(ZTV416O2cPk3/vĨ|XY8s3(1:'{FrJPb(b1x>r̠ːXx&0_9F^$ K Q)_=Cj$kkȰ{kK9n%5bwŝ~WVUN>38|C *ϮB_R'9.WD#! 1 0?ަ7v-GBW}jPa:BðYo6^p ٿ';1X8B"r|qfY5Ě~2V"}9?*hR.`t3SSnԓӁgAĸs(2g"#Һx#ф/WHo-W<"NI1CZqR]> yH&RToI#V4a0wi1{ ĸ̛αD ,̫C0ob3A'!pA?I |‚q9D"iC>Zz\O4jǃ!Rʃđx|$6zR}L(.{gd/Bz2OCG!9C9'H#;yc|ԛzf63%)qL͌*Ԗf&aq3$KIɸuH*JʊUk^W,ǫ MEv6Yt1xy >zp-S( r_E-Cw_I<dG3z!+ e1Z= :l5V荩Ks?dk`ak-j>ָalDw[ ??H7쟯3J)ise)t \S=u :9p^ "AQy4cdJQ03 ЃF]Hb#R橫lf$}1shVe,5WyR`$9]s}JzВIAlP\٠R\%q6rJb\k@s']sdDIͼ\Ҁ JݣIX;%֚RJl̏OIC)两I§Ƅsh$H:ٝ5,Z87)MA= )@\lLZh`RX&'t*oyAj TRcYfFbc_JuQM>/֨Lr&p Ӆa EX$p4 pnCp^#CjVݳIE~pٺw(N7b VˢW}zq&oI=׎R*.7t<^օ3+lpP0,  ~&/bŶvZKj-u\^.&)VqxC|Ca\69xp;Rꀧ,ps9 8˙#0;b4<" +amz-ZDأĵ-tp6el;b*oW-_i`:M`},._r5.7?"7еU^}лt-`.M! uHKԻGb .ˁo'@NaL[+{^֞o:" |Il  X ЯH_KNx˙Io^4N.}\6q6d7'@z%.Fз^p0 [6O ZxﺹE*Z6@T%ۏF<_{Ҩ{E^&EF[,ʖ9 nbr~ʵ?M:TO -\6 e7b>"Pt5']-=1Բ&B=soij>Wp:_h%n-YG aim!u,y8r4n6Iz<' /ƂX/H^;j WܥFZuhkqsKI`)pW沗o MG$Cl>lBΗrfoeVe"`QMze\I{^^%bx<6> Ƚ-}"l/qpX$/ oՇ&>ρrp{\4.\6gG11>8ާ/&l{"3wnٴӷ/*JמxU#X1ѧ{=ЅPwakGc[)X){ m -%ӧNj0#RXR0`re+ta}:#Mz_.*XvC֎0S !nk ^ͭmA. .TD:H-\h%IB\n0)lHGc#z4\:b|9Vg eR\>69=+<%\̟n߈8=$sc=={#=$p_"3rot9{6 燪ݛR#]I.]XocyѬY9e:mew3VJp?~~6g~TekL7s.5Fcas;;oyjzkc32{[Za0?y&3<svK̈ӻ>:7k9jHln1@;}cG0g?i3Wta:}fs@{W^32gf_c̕N4gFse,}ly=tfӣ8(V|ߙf8Gݙ9׻ً;ϿoL\(Ɣk.֭,t4/0м :a\7*иCZ/ Zn4ƶPP~UMytҫu5Vs:T%] !ђ?"֖`S~?SZA5ۨ)1hSݪ&NLN-lkW]P"AeGsӎ@ 4)Q6E:GH{nQ ΏP`i:# $~=bmMw(SK"yd{6T]^J#4ᵏG +¾wGͥh)~޺IŅ-۔QSź%UE5 x̥:]@-7\Gَk.n uPtdyi$G l}N~}0PO#\فS:R-]zdгR$hxi9ĸҚ(tZHJĴvV-n%;í$eԁfDP 9wtBj^M9R"ھVµ`pm}hm{bQA1e`sm⤂"-^QY5OQlS/+ӻԣ, .[ja;~ƒIdM8 HspKT%)kuu*Qz0_t Z14.pDׄ̕êf=*:#FuJ`}f5": B9z$[ꛦeB0SmPK`[+录aXH :WWY>oIlQn27g)M-:4“Xb .:Mu u_du4xk]:bI J8,YǼЅZ`[Akg>,4BT ,U\LhIO-h ]0 D>i bir}C_ih U)E=HuAGg8X@KP< 4wӢ]R?=FcrOx=BWn+}T N[?ZY9w͖}OIHMmS*SW K olǒ~$sB^yg%؛P =8_Slz&[Insv ocѮ{1Jow\J/ww\ϴX,rw&s {,do& |N;(:W{/䎕D?&]{YOͥ>a~\O&jM]maCM:$|:^Iv{/P7}܇OyθAڝ@''Оڛ@h@% tf@Mȭ[ ̲јltOb)y0F,=>h]XQ6>ΐG1m6>_ lyoq9F1Fst7ڷ_/@ѵtOwxm6PO9X࿟RF<$#vFtv~Y]@W?vv}iY넏m0emά6z:kIam;β?ulMГ'Eؙ%UeE($|L|L4T]1 jӠ6 jӠ6)TX)Н)3.I>tW-[ZXRQQ36P[:j^vx q :]_.~Zx-d|_p=p30bg+-51_w=oc.őu{4Z>D^gPJ} H=6bԟ M WOw 1`5ß]hCd\'-#С\'7])[NOgP;i3\(*д6qq{].WJR'.CE8EFR_zKk >(} ^/dd=~6/ |&=\ay&uߋdxᯣ0^zh;|HQO=.:.Hrca~*Wʕgc w }=S|W #ri^z:Ij*گ!뿀UJC4:zCg+'xz3gsNC5<']g?x#8%0%=x~qGeܾMA````` HF8D$ \@yfPp```9k; ^"Yp͂{o &# g . /VG >"xPu?(t7 =K}BB~Qw ~-_'1Ff`-:k|RU<Rә&Xp!y%X-$x n|D ~&x\80£̟*_.B-?R/ wL&:G aɂӇ~`@p5}B? yR/ #xLksg1zX``]E2Y<?L8E ^-xA f&X!L9# °M/ i ~)8x>#r]@ڃuQx \T?60 ")**GB fef%:vNS4:jot2ֳ{f0Ǚ.ZYu3^;0_u5C P6N0WgjJRܹst!/#ilvf(nRlY<ݛg̚IUUVe6V7JCMÚ:=Q^H37x{iMoxӚWe8=,sDt^o}._uFv[_Ds53L5\Ar2; ~ۑ '~ęCqqed6ed5qO/0U-Tۢjgsi;Doj~K^Utx:f3*[?ߞبw.[u٥wb'֞"8#@0Z̗sϡß;|c۔J4~f~.2`fg9Ǟp״I/<هu-Ќے7"a<2~qy7rC|es“\Γ`uOGxtR~: ן?hu Z Z5q4v4t5n/xȃiLDЃz@zMK`y]|Aat&q@?ʝg<;hf)jCdqy~vIs޴~m/pᅾiGCs0#ͷC5 ,U1Eᖜ(9f~S֖>e괜3߄g,뜃/U`!=e.=dZ_qY]iPjf9Ny5rK&v ]9 Ot5Ìo(<ҟ}G=I9gwEQiKVe>d_Szr͇'pvaAj;2´8c29|dJӹ嬒s5O~ z'4 v͇y4j7lPg-H]}֘52v2z^`A ˖s4o.sE5;X|V%4>MFB㽼i-_CB;$$4āNi.T x`m sآwƚ_{ݫ]Koo_0gؗYŹ-k-Iáт>w?r>{-3kī̜k_1P?_E M_'4~ʋjG|>J"/i+7nP39Mʄ;]fLM2vl~DGuxߐQź7uwɟey]o'aZKc[koc?Xm ia  f Mx~ЏN9g*7ֵ)qo}ٮhiqYswo5?#k-c/{3%f4sӠ}jkKnq}'G/翾91LOhzY?43d7иIgh<PjnB㟹KmGF{STxFOxvwZ³3u J\\-I8A_tߑf?EO^a'<ۖo}{8(p=!ʿj:I0V^GޚkT` 8RZ5bϫhx'54ӊ%LsT8UFw\uG|^+>N6"x3lܱM9QOLnԥl2jE-r{_:-.:P-傿|hG5x_50e-,<;ÒǾW2J6/ |hKYƉ@O#oI?;LE4^JBvDy̧n%m7wYGQlŶL:\XR}su%"RXomgl nYj}Fk]/x3U#6OO=SCt٢㖩:Sik~IhXPx [6Tzxvx ?n7w}",^S7[:)\w?R睴VF-'w JN,$Dj(?ϝ't5nzlLhUE3[v^i:\?E'-ÛRV%lpiu˘C.9;2:ygZ<\ ֵVe^i=+2xtҐv4 &!ͤsb(=imH88:]8㝚&cCqy'*Al,R1U5^aFD1ӌ-A3V3b1GșqD-&"ܪF T6@ο{ v: !z-93Т;lV32*e IrG?HH.dJ-*C bc1'dFF̌YN#AQNS?w1?3-tiX rXL+KZEyz_E|ъ̏)c)ܢ4cENԯSʅ17sYYs@lscc21ߣ1=Q.b^%G5PB֜7pg؉uBApwq?t\휛lnI4ɒ3z6|@<4.nrx86mQH p5zMS6+x Iև/q9H2;֒ ͒_/Wrɭ:}JxUMkj&-GsX6++RaazQRT[Oj1'/tlFNYԋ[Ӄ;Sn=,828ˈSAtwgL5|u>A5z2}?ya\̍ qp#ҫJ$=:/Lr)D&/zqOomژ:d,z+HTl=ۛSH5w yֽͺEA]v]vKj|c.] ֠`&'d'9>~>i^W'Μ[ O+' WWozzV}#C*0F^%G욓GLyjKf8x|MХjΞeea^8kM+0 ?k֐n!2!~L[ 0$9͠%3D:mޣ"]Bu/{ zhHTfUYIs+#ImzER}hǃ{|47=KVsl`yhϤd\4v]b;UF# +-k ln97j _.]o;3oO]{,/ӺYm'fLbOE;?ӿt*e)QT[ }3ўnQ!B/{iz=V,yIxbmH]D 3vb b:?$J!u(+C]n3Tg|` vuU9y[O'~zuu=!w-7uonI=pk&3wg J iђړ `f`# V[ B*ٽ^bzRG` IpˑԹ\ ]I!IT-M9sS ِD&32|]!RHڱ$ }R5),nՊLڮR%[=zjgD_g$Zroۑ|RDa,qX|h$gAm֯ne2o6ZzW=ݠ?g=mhRUFsMoF 6I$`tet-Tlty"e*3QKU=F'ҏޡ#ѹؓ },=eq0q<ߜ'LJ]seqeq1[cTl=(CyL`:՞B2^+)gt!wQ"ؗ=,`i[_ R/K ){Nn`,_kH9ɓ6ce=`zٮ1_37* '])n+"bQj?'+'%)V^Ftr] \F fa!ڬ C}t&>RRE?O<~GnW/nYit{G cJjmF*ʪY M뇗y"u;Vӳ~/C<:P^׿ۇG 8Ys^AAPԨ",7mӉ}^V;Eyz&`oR~;껡J#%ϱiX@09oBKUMYf{J6-GpS*CFmGȄjUrZHgdMG#lK<mv==7uȒa*_@L1!x ѩdpߘb;t'.׽¥buP{kNC\ q>:|e+y|X%]nr "S@tJn ޿iJj~tlotFd5D] ^ Uy5K[\:E1AMHp`owQlRSUm$}l.^elRSZޝmyHr#ό2'ۻEEk^NNif٪qW__qr?HdA%LO~5L~r^OuFZb3t@jFPR38ɶ`Y;ώ.022zTlt[[Ǔdngtd\ﮙSfPdm\؇NrS]7?CF H?7L:!CHBt|7GnH ܌z?qT|('xf[jG|vW2`4aTTv[hz3>9ֈOOԓt7#CA,M3P4j͈;4v"S&1ɺZ:q*c4EF˕xlkZOLd?$g,}KjvMLNW#4t!׈e n̨-c\A=kujwIڭ_kMcFRVRr6".z\[fR-,I97b~kGܠ87I=Gy jjF*EWpꂴ{GU3s$xAgX/}ѴjQO]ɬ@~g71y&rI@2ac3( $"Cܠ j@kGU#i5/FzèxBģC^X;SXy5TW})e1C=g}TW3b̕q=K͸ |g\;+aq 2voͰ.aq 0;;`!a ;`q70>;a0> ;OQر 会aYʖn U͸"7NQm!nm6T%E,E>kZĶ*#-ooo!' WSui;4){KX,e )3d׃sq9o9.2$uMdd?6+:dT*ՙ CUh('tH\j]Uî-fohzY glDBH9q/{}BL.-?s\b)Z3-8܋=D,> U")ִcđ} ͠14"`#4Ɵ02J8MnRv1Kd\Nk#3h>R2\D/S[=mL V¢u*,,@$e!ܥoK?/sBclDȌK9q{|A(tt0>41ی?x?8翈>.M9j4@@M=ЀݎQ&!ec݌Ӥ8|b3΀ar2)lƷ m?kZď|*H%qSg$e7c]iR6;;Ca=`l3^ gaq 7KK!Do,`W D)3v)"$ Dw;t{D J@5=G"xx‹0 /?58~ (C_b^ q!6RŌMZe.gm̈́ MT())2D+˖ڬeIUoV1M%.рpDp)(:d5IE(GEҖ@g~[$0C&d)3N Ʊ~DOB6&An*,`Q46YfLyip8=#a݌aCٌq+?Y^WY o Φ%fKgWH"A{^xc|3@CO }Ư`kO/!~KL y/7O c%3Jx]l2N $‹m AC5)~~,h"r*l3NO鈅12Ίh"{.<㓨 1}x*ިDCv>%fI%Ex0Fdq_x)btKdL4#l|Rm\1?UT\g cwgpsnA{a>8`|PA[db.O@5^ZD?+V-.[lY`yxA2B1ARv1l2Ew ?y;&XHT"j2&"c;xb,r63Aq 0};'3nv<]R-*í2ʷB>%beJ~GT`<C?ZL8C\*0)K8B&(b ٩y2#(Dzk]SDQ{ͨ:E WЪME$!tDX1BKr63>Cøwa8VItKn! 7OGHA)<{z֓n+LjwP2)>.e8+\?`zLK eGnR0~-lS3~}oa;gU)g3FJ%e7)ecMaW!? Ug2I֪,{p-\˪ǒZ%$ ᾃF38lqTqA#61vG[{  coxQ.<T`|w#pe !'`Ib| ^!Ɨ`eb 7'DLeإE?!'\=7^l:^1O_+pf⃺̪6.l)hԟZB^wF[&;2T9Af eR67Je '`$ 1W0- 1ʐ׉#w%0ch~;@S92Qsĝ.lGj,~3Ob)-Rf0e_iZ[VIo?딿EڲZ@-VD.f]60?+ thysg-F>mvjiZ2ȸӟ"eܘ5\`D\6vj&UN< Jf?KKiRmf.Sԇk=|K~Ҍ=hY-rom F1#2sضmI#VH),Fj[#y6ep⌘FicG>c*G(XgW#}n#k1k#)$1:&D'.1Y\{PjbQK .T-Dhԭ54֮*a,1Yh3J&Yii^P^+-,j嵾V:qJi]EقRV)iTZx6zTx^_*-.2c|wrr%eueZ\;WY#%ueUK,[QB[ZVZ]U/It~Y}WAښWS_bA:bz.9-jcUĺ[C***5K|*|3.2pb1+(@R1E}KyUV\;RT.Y@kQDieuB}RnIiҪjJC3†J}uվ5ַdIy*G~Z-'-5t\)5wr}ULz+TWz*h*ak*+KheⲺ++.\Ń?H鎫ZL%+vq!~ ƊjDzb|` 6IrVP_BƕvjeslbZ+ŵ d$ծ@Q z4%تA:9뭨0xIG1_V΢RPVAhjTWXcaf`ک;0X~jW[\-뷨~QEEY9|bQ_Q髾VRϟX8N?yFtuhՔS) tv,YB VjKje$AZܚejF򰩟XÍwbiI^Nb}9 4̮ZW_ Ke+ @cŽˍNSԈ[L}F(o5|&J̅U5Xj<ЊMjV5SM%e r qyΨء4ic!jŋkVHόVQs3eWHd䩈P+*q*}^;vHz& 0σ+ }4M_e.s.W*i(fcl|Na<'M띣= c㳯{x#TP3?vzآ0ܼqauӚ<w []WM?϶ ij?d_%r?ȏeaU;َca"rWeX|7;-S珿񗰛$,[S~O~9E[і) /d{oѿW0'j"/fկXL+tR]EuAY ʼeZzb29Y9g.<0kaK|5Wf_.T-,P.?bE)ŦHtiQj>Ǭŋ+UC,:\DPu*V֕- K}AD??Pw(-Jhk4$B9`=z.gۅaMimbm2yHo\z[9!]diik!fS_5%[כ2 ;>֠0h /6+eoK?o P^:!~n ߿\Kl9@=WiZV縷|UZП%e m9}гĻ!(vs;`y83]_,_"VY~[.=pVg=pg@mUٙ7BB+ue#pe#pVez#pdRG,LGt#p.K>aA"nsK-pkv~Ҟ.f[i`;njΥ&~y nsOG/No ywi5Nywi/gNgfdgGM>)=`/4NΚVEӚtAz2 }Y ~C^?g~z0ga} {Q L ?zWCfC. > )Ÿ OeF<+Bc"A'+#$MP\}5YFڸ[~H?vv3'?H6Y1G~7;G$ v;|W r@ʃ<ȃ)  ; >Zi- hw=#Ѵ-y#3 x 4b3c]|:+w_H&ha%.%v.WĉKI;_irxOK;㥝@Ce%ychO?K7.q#^_?N{1ON2y(\!d'vΒD&Q켜(?Ix;$j$I L>f6 Ӳnu'4i 蒳"󀓀+Ko$Mogkہ{_lv{zu[< L4/ c!E} }+@cC~#8to}0t|4q@otˀn w~q=#^6\3"`5 ^_ ~ ߃>z)t`V |:+Q[?Ž#JQO.G?w~@ rG|=uлF୨amsG X6C v} z><  7b݀@b~.^ y3{@ {껣qj|YqHGz2t5襠z}#͑Cvs N^׃^%~nW_'qB_(N! п x~0ug#xEZȯ6 p^M'! Hz}D?@A>8Qo+~8? |[ǺE>  Jȗ^7B 7(zg&|>JRN i!|Oo!};D>8 8i] 6@~#p3O|ݠ_?~_yU xQG L5::7oO{z?{ gcwFZoxd pGL|FfFZ|'q'.}#IГډ_ \ l|3O2~Q^0^.ce%Aoð>_} @xvfyoŸ ր y3|_z7+E0x pp~ةGGO?w;: l" `w@I08XI\zpQ'[ S;< )O :9Uw/p<ˁ o&W߁G +F`C{0Ӂ !Wx7[gҤ^/O;^w`p A烞 z&2WtFf ρ'!? _AN"y+"W7~ U080 `t`_o%r_s<øȟ2G}5'g> )x9p;(Ќ@|ہo䑂;c1V[esZӰ x| |T{dd&ɐ-D@,$ *(a#D,!,2Y("[R *UQѪu+X&.UVR E(jU=ͼs9{nf~b$]5kv-NiڇsWn_:g5z軓'Oc ; 8QNvM((`ξP kϬ_uQW;Ev:{7n蘧V 1 kv>+>&.5CߨFQR6QVgU_Xg)vVSguA/ŏq2y7<,g)0Ƕt!;n'j͡ю% ORkҦy Pn>3,IUߕh9j;OFS-&'w4hK>aˣ )=sHF<3B̺߫kDS?Yt,[ݺrgi󷩱w;%cʎc'kh,]8ݹ9%V%vM2b5ޯj*vp6T0syG'K硯;I̎NPMFiP:"ϭu8ͣ4PDz 8lflx *t+4G~g5{G5(xSUߟO]jbe"RmEG|RG "leT%Vxn7NsKwFG)rwiB,oPˎkj/$]ىr~HأiS&VL8_X/jU5FNtMPѦV jڂjk5PS"-Ya-jEp6^JVm,xvOaV6`aǡoԳ8bxmQL6FQ9\6ߠROf9k;M-Qf8zqt3půHsy+S-y]XoBX TT4[.ȮK2q̆uI:^@Md 1f&hCSPkSٺꒇZn#F Te$])׼5MPbywhCT=Ut!ELNJۡgPEF.5puE|2:QEe Iklz?3lod0ȸ:=9JYʍOn~_ՅQ\Xcɸ.gj1 ^7UAg S՚c21n2d*vQlۈuEF'Uϐo9 wLƕ{-S>%>Tww :7B.dw um#! c) o 9D[CovzS"˽Ν}BnΣ3{7\nSP$\h/S'{k*OTapi.ҏxb!zY" K4:ֿλ Frx5RI iiٟ^$B*(%GD30@| +3(F:0m.J"Tf@E]SԔ0!5|<͔#AKM5&Tn@ ȗSӘ6tzE`*\sQS&N8=z=}GCE>VY陶,@|Uy.Y8ey9Q&kYRU&k^3EgRIQ¿ЍEh7Dl~fdiJU͸md~/ly T3؂g]TŖVC(`'J=L1i直LZgzILs|g 1.``~ p^.8PG("vO8(7aSls^5НMQ|쥿೎OnKӴ޳[8HnGX|IEB h"!Lo}CaF*{7 ɘYtjxǭ.:Rz:ttK;(<{BMBN=hJl#i7MIRQ*I"nO(UNJD97R{{D+<%*W{L3=%$lHb2ڿS:~CJ $tg麖?N1c52@g#ni$##u6R=L1RM6jMČ#Oc.1)F`I|{*9dT"b l8!l>wqn~k͇jz/W͈f+1 QDP3DvJ3!ȁp>g⚐c!"9Bx&ӣ5͜2͘'}ՔQE^- &gO7宎˩ BԖ{h,љh6bCsX:۫r2n"ǔbYA7c|NhdsQ*j[cs'9=ws1$3+hts|+-٩z3sT7;ƯNO) ۈOm1 B4{ӑC4jqP[eHFPwl>?H*`鈖o>Aps._bt?΋[ϲ⍗&}R ɍ>;xmţHIuV j 4MT7+vֵH,޶6ۖz)z x2?UФ?AWWYqOmѶ%tvlim-C1yoѽ!ˈ17$=ԝw{GWx{+xPzjq96Aq]% w/apn%zaw }0LC_G }$eo:POWs´_*^T/%^G+h1aer]a5.Wεe=75NKu8xST34itJ@ ד_O岎N5.w4l|UQWCe ۸(Gg0s`"s0{:&> DFq|L.pYyG}fxEzSV?3#&p0KJ-zZppbL_;Nn Zލ05ߔ`L7t;86eN_\xϱ-S9KW׷?O=I^MT:9؅}ܕ˨>:IrzcEʷ`b Wt |e J<{'p&Vxk}|ڀ1/^J"2 IH/[uiz0=cOCqe+< ȣ_ fV-cr¹y*bCZ4 Ԝ8NpCCFK4҅Ѵ OK,qp*U#r\52qm Uڹ: \;Uax@\H*ENVr'pt J5𗪺 7s*|˵QS*jkwLӛq5l8w.2ۯBl Q%AҵKMI*q؀lox }[ ޡ*p0x>dE@efJyPV 5]i了]ke/@*V;T-`r{ƩF0:6t&yȊY W5qU3_Rє4v0p-*\Zܔ%Zޝy;1z5[w&=Tձ@D ej9nu$dԗ_p*2̝l7~6sc9 /sF_Nnobq;p3ƙPUZՒr5\or6q,(r`leK k6GJx@tX@BH̕ݟ:µ=t,3,^·1,^fKE%wh$kaUҩaVucwWW)ߺF*CFp!FƐQu!Fx!?Ul`.}\{qVXxI6#*Uq-,y(cYZצ\^eplW.W4,$KmTRgV e8s$ Q|LF>.n|Qe~.p |pc95)yLJp\ X˵{< *EV2*R: 3= 1A×<8tN(D?@jY w<}bJr1 DвhEJvVlĪl?YORoE.nZjCuAJGE+6E&Դ|amBM-K5STӧEkE FEIkjí"m`D]D%yoY4JG]sRoer!*ږq!f*3Fᦖn2&RV8@cm̳/[=>hMƼͶ,z ã$xVu(چGGg~tFfsˍö@LK̘WiL7*\)ߣs鬏&06/UFV{o=C%Ew53lgƼk5$kM{7s0Y7=)vv6H=-Oy(~>huh\ix:i\D-協kTNr wݷa&OyD~#ئwP撲yY5=(0.e,oeURTF殱/^Ma ~卶!)9?p6<+Pi8fz&þO7֎Fq_ݞqǎCƘckQ(5Z Z_645u>jkZ(R$54]$nBHck8R7Pix}ܶ6Y3'V\66){$XX jB7욐jmiG{K%XwYP+3!H޺L0i Bj֑r\&|YkFp ץM.Nt|:YJH\ڶ 1 ۃm^ZTEep5ł[6UKoj[C-,D" s$[CuH0M!!mF{tbKVln#Se`DѪksM $Ҏ@)aV(;|<.)E&qP=ѠJJ)l5fjhf!IU[uaN#i ][M$F)J9h WcL DJGJĔ::0zŁ )f LtxGV"5S[@FW^ֶ-f&b<\S)IR+4bHSĔgpi)Ypjݮ:84l܉.D؆43'B-*iU̢hY&D$FU_pV 6lH^BH̉ 976њa%Eh/CÆ(IS+'5dKjߍ%(WU/ZfELsW4ׄd5 6̓zY2SIYD6y>bV63U檅-dKM*ZD0#^Ȫ暆Z,Z2>$X; 6 hP>d3^Tթ&%9M&{5Jhǩ +LJ/ʝijAf757%Lrl-X"v2ܺ8 啇C 406R e #RJwBȦğfŭubsI&5-PV.AMP TjHqE8쌶` G)@3{H\W141҉Uc2Ev@` 2۔p0Usɥ~jǏ??&2_|_3Sӗz_ñN} eEaHhHH^>NMϮؓؗ؟nT<QqӅ }v3t+T5~W~o_bpS<ߴg?^}|PI;uQ|zX~}|*C jеķȲfZ鴠,(&]Q]MF+ZPe+H WiJm"mhc{ˢKY.֎VM5 b s"Xii)&Ih \@j[Т^D;R&c??3oE-Ej>Z g Ml E] 2p_r%oEykOs 9 n#"ї" NkWec{\CG^j$IߓM^G)ݧݒ$uOӏI5^c-ݓ#x=$5M;M?Mx%mL[մg\$c@r'>&ﰖW{̉JKG% ڡqص'o'6*/XZxq>;i,v$$:%v%$:5&iItzK{$YItNa BCcXhL>گZjX -4l.gII$$>?fj[T9R/7mfӅrٝk=5m?zis4/)J.!mXn&h0*?~ui46S6>E<^fGNkZ?;ǩ](_g vѴv"qxHvA~6~D/m[cO Ή8x< f:~}9Y$ "yC1›y#')tD;d_$혪i [b.׽.!k! nt3Y\7_fss<2LvTn#wh.ٙiO^?VL [Dɷ~8H'^ &i7TOzُg"&p)|Fw: Θrnܺt~7A\?C0 #8A"yW A[v_|[}Oķ= (x`@YZN[.<"&q/X*8Vpjwn.7?BJf ^(8]rൂ7 n|Jp ďBU K/x`@pc;Xk'cق傭 v nO =+xT[Am* +g^.Hpf#ໂGT?"*X-x`r n|\pKFxT9ko[Q/ M7c57 n|Jp)CNAw*םaH}W]+ta JvXHn~a:Wpd=,F{w UN2eB v +,!4ɏ4s{q*ʐȐ|*X/\pMl|RE g 6 MQic =#ا[賅.z%`;W6K\/&Ko d!8SpՂnHk~M}+Sʒy!KSD}N6 B"[Yp}/ + ''%قG la=Kpq3s  v n^ e>sGFO ^, 6 Up[ z{1-8YIF >,!w v -S/_ HNlI @?;lK=A.|_JxY pTM6Y!fEi!DRDHʲI^-"eE*ت*VZZ(8괵鴙jUl;MϹy;={os{kJ9?Xc,8]aUR!;=_=55sSGO"k.I x( ,"MZѷ2Gr,`ldK B^KB{ &O!n/>x+q"mA:og;eBU8]1r}hFCpvrK1]~E ~0V#3կ{/exA}'&OYп법s[W*E*蛎C'ࣩ;kWJ8;TmgߗeM Զ l -Ho e̮ԱJ^pxV>$PUcoirtgˁMlLiE=Vr܃k{ tw̴&ܛP( KK}6pu~ mv uPclщ"._8':Ĵ"KrBpz+_C,ڼHOq⟈~UKW:nvt YԮ_[%lN@LD rBfw,Lu*. c.ŕ] rkW%zѯGqAgx-)n-׫>,*N\~ex>%-WK X6o؍7*EzTQ=htjqz'Xyqg=xV|8^rK;|nE@^=㎠o>0q: x>u wƏ43 )ȉd3>V`@|S)wA$m#+%.rkx]xx' M^rOϦ)MXΗR8 ո jP*PTz4 Cr.ZK-W㪷q<8){v\ UvRn[UɈ+Z .Vt1bW)Eq$~E _o(+$-.Uei:n+m1"#1%7[ikGGÊGF.\.i 5تuyeE5uElc) wE"9 C5 fv[5yukWkS#cLzj^ Uힱ]%Ya4g` J$\EkFRq$YR-fuZ$s jEi&{iZTћ%d*v .~:HAxܲm.p.C]5._|KoOWqm_xhH5&*65ɰ 0as2°y5I+ 1#x %FSci9<^?̀o) ꮔ%F \ sCOX>sWsbB_vuv~ZNϱ]94~=υv:"t: rK\&?3VH)G~V{ys{aw/RǧYI#ejv:(cy[fOWz?Lਣxn!NNV?q"U[S35u Ypf!ρ>p(W k?=8)90ʫ= Ÿ0xq:,DC8ы%TZ+&l!\MpIxᝄ{ >Exe?_8p9 c7"qo!|ko4+a5aru q; !Gi>IM#/!|Pw) ֺԾ/&R7>NH~'HmiMOB q>a#af8G?N9' Fx gƭW ݓ8N8IzQ|9e+G ᳄#׷GD y1W!㌻xZmSH,AD%uw"N\18eds[.cml˧Y~=3z!nyjY|;[拄z~gndi_ G `8?|^ ;o'{~kɏwzP>L0(7.<.hl<EŤ~n~?zUiwkSLfӹ^󁍻GOL2/wnAħq\YbD?1}~3@»l4>FalF n"+)=F3.K?,Qx9`MKt5HP0C#, ŝhqp~Z8|3N?ڋ= W"f7a&~^Hށݏ@ ?Zܲiq3f̓St7G?.̏WzBe\ۉ 7C#;* 3 ;giD}"[5Q95XBYǑu䲷pM 7<;GyL-,ՂeZҨn.`W`%`2<\HmrCj!s`ez ]`(X#/XAڛ&|eZh.x:®:襳/Y6σkљGBDfWףgU;*[l:9ۉ=Twpb[ T'CS@PX.j{1i {T;[(;v~0)h7QD`>3-$|K~!`Rx0 DvZ{=i+o?7 g%6QHI/g5Q5ѫPW0=iJ: {3^Ȯ}ojK #s%֡U*­U.S3jn>up0r/i|`5 - 1J\3&x67uvN d|J{ĐD96$GowDZ sd 4W2װ&AY'$dݴ'ɺЮYĹپ 7)<xoY\`b /[p<qA0w.LJ1}?Հ喝J9g qJSLUze?`p8u=0jb*,ŰFJCOA! ViGm6SypLu16+ =RT+AGRQђp-y@j^8ð(\gp(T'%45l[>w5ȫ^Tha6埶&qyHxxM Fb& 寐cC)g[w" \v^tl<9ZM$6aCH֕)"!*SZG-t~85dޔxuH`4ʌK"ωօ3e`22/IxAn0 E9#FJv+8a&v-0vS>$R_z"g.aw] 0Os‘2'ɥx"SNE^m>+|}ۏs}V)`b/ebp_|&gٖxp)\NxK 09 oAD^5yi+I[< Y *34(u.ZT ^ S L?$QAjѱWQKLRE E%ς6k>ʋFnp ?޻om܅AeB. Ӗ5 ҼP02YӠrfY|ONOx340031Q qaПSBW7e A=Bx:92LY"LBToiŒݧ>*MNMIcXje'cqeTY+ vX}(&Pz V}\8Natk$ onNzq=WjBg)HMH,u2k:fHBy5 [Sv|gI!e@u榦uz ?H՚tn~U}3DX^ I)}ǀVY#G+2T vrw`xW;+*FR4qZz6g<kkAU;GLẎ'Ԇ^2q$?/-3(|pe皹_>> "d>_ꞹ~\j{ oevO.QRUAQp5a'JvAd%yy@y^}JvvDŢ0!:UMlv)[伫\a^ Ш>y:[ȸP/*2ktϽ!B&U4Ԣ̼Q%*?SlOxPJ", 3ENrOʞi/omÒ*%=C2K3qDUZɗbžM?UW\ Lk/)u4PDƵ~ib 9Iũi9F@ӦN2O۪SDufBai271fXٕtqqs;nsHMN&oPxZZ^Bva' :n-}^UDZXП?a.`#?IJ$",I^vG: ۮw ͭѵdyܽۈ9d1+j/h6Y۵A> v;(dڔdgͩUk"Sy$jm%zYz QYr$CDmx ^sbOJ.0{R*;[_^ 㽋rե @WJH?^ՈJ&FD1 UZ890FkAzl횰b:gmabLnȂH89#@#9KMb`fǘa0t0b'6IHtv ەd~4 *d4% ͢[YUM%Һ:<,꼃YKvm]~oДTKID~F^ ug>NhLN{ ~edS7|Mh O&:'*ޛ2TotnkmIf<ĪReI #TO.-du_ߖdϽ+Ŧ8Wޟ}7}s=X>18tCjd 0D5}q$Z:?8gӫ П[yNulpGZHk֟#mB,3ƵGߑl(h-<ec$?=P<=~gcpڃٓƓ[<{^읲h7>K= f!1t}d&*Ij5u7F:# G7gz-~M[[+ObbC3Wu2gsLNC[5(/ N TdIB&`U-j&.ievmJIx>$kBNF0$$[?ؘjsZDod[,\3)J<1yٝFXE(.DWf2OPz-AG /Ł oFAJWwc1 0oDHhþO%ɏ[ rSCh1iܚ,)Sx.6%&9d'Jl73eF8@gӤe^u[zʘhTE\=BS2&:"<.4:eo$ m0ޤM ]LcVZ2rވA޶@%Kxu@|X&rkz'w2u\(z]xcXtJ}탅8+!8?wb%U9 N&Y>n>PIUc{UBvF@(鲨ΪBPlqT0A$P=h2V>]Ub萙Rā^:L[+Ygb0##`=v:ls %{hl'%x'L@ZPfX J:D4٬RqH\ف/ <{k C_}y( P6yo vΑ=百<FZ:딙5`͝飒3[ " a4POw׃y㒯H,s$1,ѫRUZZu$yşꭤݞiMfzI'Z:M';xx*T]qr1K.TzO u0ɐ6r6'd@&Ù(r2&ܤj9WYBGl5~x5Fw woĴH< 0 69 Bq 镰lLJ+K<XRX*rTu 7O]/UZ>t9\oQe]y)t6C^/_Yƅߺ@7㽒VnBop&! ǻ7xJb "_!W^ 6K)rQk{l:VN4Ek lпm$Z'6oІb`%GM5RVaksqg=;v2r=$Fg4 [ -'|-}#}XE -Ejx{aÎM ї.f2)IJlSeu\ =?)-Q}(, j(zQO%PϹ\sLmkå&Q@P @X;m@/pN"l @鄐Z>zr~@g\A㑸&`DhA(5ɀaK+r {Xs]Vv.[UG+mp[vЪ$rDIߎxJa@ 1ꏮcXC,TEI\ذ5$)d!q"4APC V^DEd]-ѥb=2ᚔhbSX3W%hašp52X^IYN@c"b5)1ޔgbV30 ϻϟ?g~YVi7 b!&,qRD%BIj&'$M&'Mz~+ʣ;vxD3i 4:4@usYOR < )ZP7a)1`@>_<*1n' j=Hp%wPS]a@ZXm !uh V Cp\Dh87UKzLS4?@*v1ޡUDC.~D2<\?:ݼA yL!jfHbd(V,X8ۯD|¡:lxHf$#-LT5r V| x+kLk=.]rtx$bu(K#*'pd1p)e.܎w!)36#Q)ah7, µ1:5|NI!B MDM#!@00!عF)Myeg&oK7qNC}{z9?;"اZsS1.$zltJ<ˮ<[g qmdl`9ݎ0,ahGa}B$jmuyæ:BwIxpN.ϺiDl,|Vۇf&qVuj֬1CkML8Xu5)vQ8kSYZM@nV 9O<] w]FI!1)8cIKZUj@*Hk\09%N\H$;1TrqUl2 h.or :HZݗMq6Krc =/1n=th$.IEOaH]qrw6Ys?Q! z׳#ŧ.2rx^_C%mtbsѺe(wxAXbu ^w#VOet,\KKvɯ<c.*4P:=uO&ؼ`IfM\yG|ӱ< hX;h㈜Vq{z<6V*FmDipAN)z&EPQ#\Hסt:`g3/2bo">Ȉ faڸJ$a(jGMHBU '_ݞy;zNDžR"N $ՒӦ "hOE527 4_r8InB2j^a*.2alMYwé oBwWsp5u+g=/+_` ueb̗eW1Q-4،e+\l01TWm8BIxj>6UN9ER˛Tjpь,xB}X f 泮w>4Hx!y +9<^dOM&a+$Ā2Ry%d˗bx֓|d7 \Mxra}}T$=K2kaٮIm?6}(b[]X{#`NqsYe5Ce[c+Nrm^_dk[n8f31GZ\5㋻E==H׷j\f3lʿdI 6@-)\{{4ʲ'kn[k'%KotIpl(-,$Y sI쓜^z.ldwi%k,Y&GXr@܇9n|3QŚH_U0-(Q^rg$Ī ^pLV|7Mm)79*P&$|AF7ϡiGR4ey&evmn¨b JIckѤm/ѬqT0wY-6Ʀ&Yeg,O!ib~ElöMҕܽ}NO|u-UAj$.Jk}muU=)oqa/L2ZsH3g/=L%tMf} e8@!aLk:qcFdy4uzY4yR$%^.T궡;%_!*o[K%&E,h2&NnO)}X' 2 ԍEB.ѳo5YeH4-G#ON0 ճ ukx1ۗx+7{HՐ֜3rn oUvjo+Xc5&V< M.Ѕ6yf%h5[Ju!N*f ZT^F7(v,|IK:iŸֿw@r\݈J Mo2-ifAYvykId`Cw" L36isPZ4udpqpҖNGġ}T۩eϑ[ʦ鼪aVl-kڭvMqlxXis,1 l$}x-*fm9n*abE\==˲a7(ׯgzYQΞce>βQLa,q)z}?i7˲k{&Եc-eɷNϿ;*cl9yLLNo`)za!Ո ;"h<X:jQGn^jbp2&~ʈ~@>Q9G֌,}I7I c 4Juݖ^"ηeX[jmCo %Pz hE_A\Z NF=F ؒᩊDAF3ns": .(<:ҤB&]c"!0aBhᢰ\i[lAH[6&.uF^@܀5ZR+)vxDZ;l5+0`8%b*e^LN`8ɂ F#֘yUMB̓Qm+e #83VZ0 L a >*ct9N$ pY `aBD`D*2:EtG5ƔF.kUpTilS9a8NsP,J얩.\x "Z0 /f8x&(  G2l"0ͦI[tB8w2(U,,.X|} jO@6C8)!L5Ѳ|CBr}tD (ڛ{ t@ !Ġ0EX(/Q` T8h\P&q'xoQUN˜G&@Ú^CݠFPNa=nd1NW74J][o uYs-n3Wv_a(/,lBTC>Bv')L1 %NIz)ID,\x;1dW>C#H `0_xnHZ%(uN$:h=P/MjE5P.&}8NmZ.a3>xVMIwȝ*6^1$hz|8L]*6z*1Xɷx1Z9=𦵱L㑝|E}3= 7<B?yVJrW[!_Ll_|fB_4L x<wڸO1垻.!M۷'ivi%=ݞ~{H6vpL{]#i~h4I#vM'Mo>7\kױ]kӰ1+TRTT%&Z^ov5{_?N?qׁ+˕וi:۳'0P- H{;53~Mc׶Э/ȑ+϶iYW] /`z.R7gF?vZ?ʾ~K% 8!*;"V )C&@sttkzN c#.>,}+"!jBZɠ?,#)~19ѕNN_=1Y`ȖXPG  K<G(,:z+;#"o =/('F{­"Ly KI\Q5 _)EL"=r}Uy?#q͏ۈPW]PCaX=Ծ.ȜƩ3}?CoIe5 3>gڨo_{{ozp-`NΌ+AZ/p))>%Y D0o\_ Ɩ C-(%o:Lٔ!v~_}T*P} 6:7*t7S?NNb16p5c@vHi P?vrO #LvqjcYln<1O>}~+' 5/27~n˞g I Hł ŧ۫x\3;%=N[jݴVEkYxpL _`MvH)UFrh` خ- /$OŏR-[3WPsܷmoF}z8RɟN>_6ivhYhb_ҳ0~Ur(-eviF7YI~988zLHz<:\G *`\MÜ k $\|gWd={I?aOMs<Ŭ|x 2EkyxR ŗϿ>~5g&gyxZDVT… sj#1vs<o44,0j.'g&6V{ؘk[^9f he9ء^WI[`dGb[/\|hNUhl맟8ɚ$v}gջ%\*9 O>u:pkˡ55Us2_gX$ɄƙEGJyiH'z+SRnoӳQmhB^Y<:!0/B|Oc?zjwo2'gn9~7E4[=d8 8wa0J&|wgxCd۞LNbҋ q;p=~,W.5vg{x{Jʸ. yO~ 09-v[X -8 c8xRAΪQ}nT`fcR^])~\+Au!} =J0{7}^ =&;Wk8`Ʌ^=" y byB{dy-Σ;S+#GBxϾ)Cޢg|9Zuy|h_m8:bĝv=W/&W/ ^x"FX i3~Sy3·Ψ} Q~I? %WqZ&9)>< g]7'0DpݺdkdRWl4OqVԆ< 3:uhSf,;{u4Vvwx:Xf=LO,q̴;F5+4^ ׏C|uFf%vm ֬t3jBih>e(&kÀLiDJez=fq[>s&fAd*ۍ֨v`۫yvs탂֠7nHylj?ng5>rGiL`$+lĪL^ڞ˫]gf.F)П>oV|24n/Bk=tmeft.LQ.DG%vsTy6[VNW" E$UP]#Bf?N(CD ͞oʓ$Y-,VI8NL%C)4NTtU$ob*]hpL-N! x(X0t^j,ҩ&IfnM==9JT:ACFt! rT!ednEԍ NCJqL_ٹ3U'uq#T\scH+[\p]7u*\N)1P,8/$$-6Q(x74s\\/r}b\&H]yde)*"@9r1{J"΍eA'V[wB'. { zd&:_ ?+ CAx] zk]AeJ6v᳿ݝ/0_[0DU Q;㌀xg&s_椇gFx0j@ xc yr';>‚ISݱ쏚P_e&YJO||O]Dj/.wJ|aچ2YM,q3= dz*ɗb?O09] il`g~GP_ Sw*k/$q Ԑn7TWCT[O1yCU0gv4$oX6"Tn3P ?w dӂ1&g+BG|7@~߰}ŗ\黁3j&X(}oI 4x JI TXT2ƠQ6_JQ%lΩ 8 <5*bp>ڤz! l&"Sײ:Ƥ|3%A %Z-,b(87u 1t>l(Tѩۢ[l^5&#Uw4w?y! qҦ㣥S?9ݐ6l= 2#iX}J]/ T,N\"4"_k]]Ku5cbFG^D &5NZCIBt4ׄQ'ÞGRA'$QMT4$&10*=IOP&Bσf:t7>q慒J@~{s֍BVn(Lop. h_XEy""Itq٦ ۄh~0l+IN"v B\Ȕ'>E|z<O)k؀ jj _r0iQk.šfLo2-3\( EJeTղJB[He C.2>~L /41)с:zyceU!EhvmH2$@jkb$u@?I"E蔮O vIXBblDZqzn.%i/#:VS*F]YGⓁ;z_7*^)OP꧅r ~'+rn s]1~(늁4gAE)xu.m&XP8:xWmoHŜ!͵թJLKd9f7Ƌu\]cCBNHϼώ/$935ONWbwo: Ӷ%qg-#\)4zbqm{|=Wao=a_La1GRˇ>64e@ca;1UF=߽WĻ7Hܭ4.Ήz}~VįG0~hZuWX&R`-iho۪n -ÛMΨY$vВ=FR>}Jaq^\!Qٻ#_L_SI8Cf␥?Oqa]WTFa(|[/?=w_ fmt<]s-]?>du$NAN"uo%hY0z_v`L 3;gϱrJŲ";B6cNҫ}:;[b"N#_H0=@5LR&4fk"%Ox*5XW^=2K O> .һ/Qckl*;X!6]1b.(P=hQXEsxZ[eqakkKBA_''gEܑ6ԨHP{4݌&%RS[)lnwU6*CK,gspsz'fRḆݖ%cM)XXբT'YNן:Ł<3Xc%JL]󔾏E(3pUE"\ w=w镸Z`A3~J:co ܤ,mb?wR^Z3j4 e>V`QyY"o#|8>LFWɅN:2lE0A4 gxMO<O|Oߜz /NO___{X apeJGD.>\EF wUD^Y?ΪFhTBj$_Kȶq"WEkQK3ong $T{Ui#ἙJ%~X}:@n³_6܎YTdU$aӇOGAË\y D.&+Zagku6_YYdMl*g s*E?t\7{9b:?2/m#!Y$c%tA9]$e=Ld6[7'*xRp"腀*dR| ;y1r诿bVY 6,EN(ڒ439 ">Hw\GX~ډrcOyڐ8']N?X6I_CjWR% #kU"G$V3_*q0Z Yyy߱,n^ 4tRpH}T0Qj' FWny,o J߇WMb߯χumзP JEZ2eSlbUOY'FWgw磫a}2dz __T8Pr4=*]@n ?ߏ<'A[eGR$*ټ/d=oh7jMw&YN uU}os2dY2wAY_V > .`qKKQzw| []BrݧϾ r@.qYCFun Y{`< ȗj<Qf0r}{"!VqD3c$eK`2+ѣ`[Ae;Qpn,Ƌ$ ',`h!ZL83:rgn)@|T83q$l@אxY{U)a_Vo 9idGJyHe%㮚'TK2lVJOVHO lNpƖH"X W+fY,< ĂA ES>:P ڋP+a޸'A$8]Àu 0^l+ Ӽ66 l&99 L~A  $o$RT ,˪d+`WE 1u$vQ`̪GlzNh =bcDA^"tC3ZSlXD+f [ `,mFALnK RoBOV(M= q2y /Aҏ0/AVL/mkm 7tX|"O#'Wbpy)w?ngpܳ(74LB $H]L,Ih7܁4^:$ȶ zĬsR Q)|ćms$)RKZlMAM'~BgV #ٷpîofrG.#>ff A,Q*>ON=&*{G`d8 ٸ ?e'd)~I8ܧzD|$dJS=a:MΪaj_/L -(nTNu'| 0׾ʏ *Ӽ<L}Xu5x@Hx }^w gh4/x q$fYxw2&Fqn/uIpyN-EuL}8ýdaXZ5m'nPC( 9Fs>%p\}Q-T@yU ѬxMrx bpLQ[J#PC ΍.5m؀*)JT+NsB~Uh`O  wj`:=qcY/nO[g '& ItKطfm-."v~b)$\#d?KǚCvBKmWW^`bWժ-dW't򥗠a9R̯_Q@9^l Ov",)3}"#1Z?9dݛA0{t1^riGlF[Ӈj5b9i׾OdAI gJeӷGG瞯EpzySR$(-K%Y[}?%nֵy6H!7`b_;5.tm{>~5Kaocg ,B ִ%qѶXkR7:Y^jHIӛtZuG6,mDyȗ6^0k ItViKa a^H9gJ ];r'C];mN@@QY'@3"U)4\0:Q ]TED01βB3}L{RT$(T1o]|?|K.@ 3{Mekb[FqD`[ 1Y:\e ي*@ [OȽivyɹ oWRH?`<焰G>Kpԟ9>:Q? 6jVd}>v+$v!}$ؑo`XCEpNdxr3]t)mtgp>a[GJ4'1\c*LxŲX4p,f<ؚMtejMVo5#])!E-Ac`ƳD53)Feɳƣ=;}q0ݸoFtrC89=v^.Wvf$ZFתrݡt[Nƙ-w8rvTqlˎJ *]Gh2 )nRr*4-1k4E>=FTpɫ#~xM;u^uޘ]UbTgglǺD@iVMԉj. `˦UN(2 fp2U=1B|fYCuu,1&UBF?7*[hwUC[$e5)>9Mxf;b!AKp][4ɰN)!@[&GD2Q MJ'\.a Q A"[ gˋU/5 `Zq8G/~u  lU}#8ʳfGYI[+ԡeΌ5exsŘV -m!T* []wU76Y` 懨1C;k|8^|E\"%93y(6h{Ӽzg4-_|תE\ԛi񞄚X0>b b$yD*]{3q ^#~!u65BG&e'uaP팬n^]02 ׺(핏ߔbZq_OovkY$DoQ[Y6G6[ͅ]`tl$v1dZ뱠 2$ vOl pGx* pԅ$Rlɰ#uiTknIb"BJJ{m;cǤ҈^ǂv0jVpTCYSxa4}Ȼ㛒V5yG0ʭ*{l2,;׋ܻ4^Ňpx2H/*x`A(a^GoVG鮶{@!y(F 2f|5 ~QwRANtѓfїVWT}`LNˉ+vߞjQ19Œ怅{&mCm$u6#i~V!x1ܛ5l!3tPgGq&u|1~G+;qxf_#r@ ;2S$hw@02KQX sY{s io2Z2ܰv+0RRް.sѭu|* 3cmǍz|6:6k,;L>X*V6`)lוqc'3%WԄo .ͻާH~F.qA\\Zu  K%gU.ōDgC_t*m w " pbo*Y!H!XJ35eٯ:sz&̶/\_X8ۿ\QxuyGm- 9c:QLGTIa. L1]aO{ ]) 3)?JHU;&fb->Dvwu1-=|~1jvDZo?Sb]g >[藁ff 6>6aY|Vf h5\@񵜠p)-uYD&mն 2N}#3ǖ߰7X>f=a),CcșI(T%lct-p}Ë#$f0{0|tt&-Ʊ`Vʞ-F'D=&۫]kHۑ̳\b`U*GD%,h@'sn4 vC%v~6'Jsvtx4pn {9.9#Bjx̃p_)%',Po]$U]8dpй58?!plCo [{T6w_vfJwtW$nW!5` S%#WӤV*["M#h1)lV߫$,|b"ODQպ Sp^R5=˦_UE &jV$zx?UTrܘʀp#fn )"l,MzF?6#ѳT"%2GqbL+L7CVW5<9r@.VLy$ju.QX㡛7S+ 2דc247!3^FHWSce)"P нZ "5,ښG4 sA([? 4!{<%/pvzzvx[֕U %b|yAQx6rRb}y{+w @ FxJT)7ݻM|; xJnިX}jvT^+I}379+RTC*B(\j4:$]|=!Ha(0wS$ IU36y}LXNاz#"J$AӋ~4:P|ÔaukIRaCcfWZkSЦ %@fuR/?dهG<uEFOދmv]j_GH xb`VKYqh_ζN-5z֛z0Qrw=c:UHPz}q^'5ҵ:G Êzn=/W`C'W.購הq:bI=5z2.W#xlﯻy{ m*\3Иも{俟yΜR*8M9'X`ʢرݵ%A"R*ح<һ#Jɤڏ>ESoǺd>XAB'/)N#%O9"mhje䴦ԫ!./o@P^(æb̟%TW}` Xإ^ǝ'];RG^ 4:ܖe 5Hfx|S)R 嶪ЯWjp L3_,׆/lEӞ J[SŗJ"rW X-ŵdN,,a7+qFZ2~HbŏO6 / :_+: m#:8ġ%@I`*<&$s#(Jrd>lM%{2D?ZiwoQzdXd0K1,p~7v|uCwsnܵ1u߉, N >Ș!?1ltLzagưP"EaWhđ!5^\?eejV;)sǹis536B\hNuʇC>hu}Û]-͵@lo6sF vE_̤2t׬=h)a`miM|T^p-:.@Hgk x340031QH)-LN,I+(a1>< [XvL2(H)kidމys),/I-&dPI^f~2`6:+әC$<&xUn0 D^zqrhIОV%^c>#e$&vGPI(64GqXk{Od¹햮mkz/AS:V★Gy7HM2),$k-SxX[o7~~@V:( [V+w۰$@zОNI;#iƖ6+ذE~s#gN=h-h7Cf݈Nm^t:&2^;Ӓ-z?v9"BFoRpʹTr?Ŗlܩө ~{1Ty)X*m\*d]z iQIzދwg'#S6ڇދqye-4|oغ+t9uni6Cz7s:ދߦ#ryWM#ClLAtmj)[*5咊5i1Cӽ)SEӺZ_{=U:1*5م޺XZkP̒ ЌMl0`@۔T΄ |_@̔[¡,z76>Y9:~ =yW&e?teܲr o]r浽K6g|*i)9UKT?vCmR&6sM6 ZSL_ϒT%>/jr}:MB3i^[.l?խS4ke8ĢU(8TG 2ŀ#bU \\\WkNj! [j W.91 zi2I;Sz+߈ee.i]V.ɤc'7r;Φ7qXcHL lfɋW,xjHc"? *${ee8S3aSWxfÃKD޷xƿ_Ɏ$mps_)s 8,/Ʒh3ɮW2 QՂC*ٺ-9skx(ey,l֍WXjLN v b)rj j=X6W93 CAXzpd1sB1x;a:LCd+ZMLO.:g4˳2y Q'9$P4Օš Z©Uٷqۛ_]s;59?J%;?O}@io_ZD{-YnHq(3ϯm39.ϧ'5sDkwW0WZ~cW6,w ;༲^fm`A#D6cOJI|aNny,*N@ٟP\] y[P"ӧ+օ z(qhR yKx jTEаu*:SZƳCTUKZ£nW밮(Qqɶ7FԲcni hi[n u5Q.2/G1(J:x/k)M$i[{8Gǚ} *t8`d:+ GuRh6K~]T@R H(Yc#;CoL>D0?~sM$=a: sHɈpY_p&d2m=\04K~E2IkJ~qzȯO^4ГC`Wx{|4~C\_MJe>_:㔲çzcE|ImeCy' 299e.٫:o) '/)sN}I9bPxBhp{P7㔞zMi?TBO6&txd ԰-<\8]C@ ( CA-R}Ƣ36@'6PPjқ#3 E/Nmsލn@ڦ&v 4*z#=12zv0EpslóK<4_=LdiZX$EIKR&]!41Rjr|fOv8K+^2CaF2RUA\UNaGsBwcHn!̎e;p]OeBzu`✫fL ]6tQᒕ ) ΪZT )Xr%cU)mW%v 2z7? oBxȹsC.I?'fq5y^x' {{fscrf?f֑FuJVx[xqCfiC"-5O gPejH*{dCZhashrat-1.6.1/.git/objects/pack/pack-6750f0986518dafccbf46a482ac47bae64435aa7.idx0000444000175000000000000005033412470646505025264 0ustar metacosm89roottOc  $&)/2256;>?CEEEJNPSVY^_`fgghhjpuvz{|~   !"'(++1469<>?ABFILR\aeehkrtxyz{|  #&&',/24::<BGILOSV\acfgmprrw{~M'v!-D|,PZDsJPyqBs8<A$B&El0u`[@˴Sؚ[@@̬P _sXLuV/\GtͻӐiC!uF ؈6:uR@LX _Z3Ӣ[GwhszN̝Ϭn 9 zױt,rߓ=wbѣ7ψűAKĽgV /׸+đr͡Ì+Y&ׄу=3mވRPce%;@ncŝrb5ŃldsNdRB'Cb+= , tՅ2&*P7 u VJJ /J> tԽ}PA C04(N{H kl;,Lw I\L օ솪8; O |Va >: /O>W~<ɝ _# _% Bwc$[ yB$7D:b9 9]f> Tߋ$(SeH`- w%wXOh5b Yߘ`[mfN1 ^%U@2=đEDd P]]z+E 3rPYwcB794< ; {'i\ j{x;9Dp#(A21eZ~^[. :QʖC1w( Uì. }va :BkZϳpk&Ē Z8OZ1= \͠2m!PI,BS|צ]Q$AP)^㞛oZZwblؒLz\66-ڇ1dܒ5:IX?g_,iIױ4 #g8׊X-ƚ۱"k,Y7r~- 9RWZ]lr:n. (>;#d>|_[y|R?$E=Oɖ_6*:%[8dt~D{ pcnTv>yc/舻PD K8(C,au"~r.>,SEO%cBT߅@a`*kW _ uÆ6^|HV^\wDA#$jr>_)^Sf_ӎQF{xW@Dʳyt0IJ 4=VcvP+M@n|/lBz;-k&!ĉ': _׮G,E_gn2%MRzPYfZGS_rv 9`XaJp<_*$TȽ|3ܔm2]RYMd0,J3Mk^%l7iZ<9_d\?{],[ұ*k;=z"d`F)kéuQ,qީT324Ხxh_{Rl'k4ʍ+9p14AbŢ޲J+~ IewO٫TD  8mYƧM /% ]61=nYy!v α.NCcVM!cb'N6=}+!c}J9hh3؛"3w菛s *6"@YbXRtϦ8M"SmOp^סZ"hK7ڇ2ϥy"[V64ϊ5on#W`Z'ᚱ†q4$M'UY|t$pN؏z%w5%zQ]=Q%ZEki/~1@1%:,gPH<gnL%xm?DŽ1xi4%k˛]RMg{@҆%ŁtsEU#E]&a7pȨS,4J2B(yL߀r7;qٰ*+6ZmH6hG*RO jÐ}T=4C+ [?a@>sn)j2+;?=ڷah+ZW^WVn[+gyl*+dHc+ kل_nZ+ZE)H|/R0},#yUPiPhmy0,5{ÜF|ohb,?ʻX]jsT#}NR,b6.u|@\6ّq߱,,iG R*xt,-m^G-!! sIt.-6>6a6y.U" wӦқ/4 ..< O6_q"vmK.'u'xcՖQ/`5v hRMH0ۨbT1I;Y1ήΖٹ>K_>1QwxWRd}R`r2)¶:=:̒C2BfW'Ti9 h:3 @[j`#alAѮ L4IMbƧ5.aO4o-'*D Ƙf4{^g{%*;r94qe .304I8V֋bWa8'4CÜ ZZ9dIC6H>Λ,R@ 1<7B_Rɦ]^~R79 ZGY'mv#b8ub) D-r2n8KF:&H^m5j9y KH֗0_9 \guT˺Ͼ9 8 0n-)eA9F蹕E_;>9$>Q|͂48:"@JM*0 E6:/T|peVU: n\U+x:](gJW7g;:|b 6}:amPD.A;>hdH0L_2LW :;=i7I)Lnc ;.XzqĹԪ<Ѣ7 6#Ⳃ<c&eJRaX=D6=wWcQ=ė_қ~H_= RL7 Wp *ý=[V U>?s 7eKDyY>;19nθ1F[cN>]>="͝ڮ7?8 ސAJGXuNS"n-Ju}.蠺T߉ Jeí**^˛O#J۬Z|KxkrKӤ>`q|tuL%w{_=郸܀L9 s`xKp"A.LA21N7hL^VJ^b%Zd#^WeUb?C_5vXe*?KUen$keh ,k;rfؐ ӛfzCH;8'Yt$Wpggi;?J@_hfsۿ]Ko8hPז5z0UBiAs+K RDiG*w{rR,fif>N2)iApDqYZtwZd2i硨b\Kf@OYXj6F­ 8H־AX2ijbp#CL)"b}kn 1tAڇlqVt|O晖^0%l:I<ÚZl7ExסHl{5$ecp}m풃M'_7qY0beXn`QiyS6ж(oDmb,y Y{o=\މ"8I8o]c9\『ouX;mۂo$IØ֭^ʌ ofpq(p%EX-e gsBgqtF:?ٞmwqT.1̛P;zLz$qb:_qi\\ΖqIZfl1ܯq݊`Lr]X\D69b[` s0jކ1SMھso IztΧ`tXXs댽2U hnub!k{1xV.ю$u B"pW?[uHicBɟH4 u ;;V|Pu'f_*oGͽpg,v`u~|Bɟ\v96a %8}wyvKrrv፭yv:k5EkF.-?w2 m<3iۯbL"w(>`p)\xp{O"v+;˸ xu`3&̎=3uxzsJe*ء*EmYy\C Fleߡ1yjisyw5k"EZyl>f5 uplNzCڴ0M8OY41zOkv9'>Q]1{, 1!jm|#`| $NR||9=[^Q=d+i}H T. ~BUEuK͝g4|~V?w2a ,_$`-~pBlsAP2A<~y7|wt˪hXn2n3BK- e~]|.e}wWKPmE K2i\=x\ga۝Le퀼e`ulk@L5Dhؖo_8ڈve4IR*+'ƾy\E6?VqutC'c:+8(jU.d¿++] %)3ScnBtUG0cUQW=70n0)s|;{c6's4hUo[,&M}SF,vTd1oY|Q:Hax"~P : C!2~zVx^3, bT0C 3Lsٶ9>,ȹ\Ēg4[ |N=EflT P~LGUҔ tRbOPm^XGlRBYES3C1uI!VP_QrAEyEʄV$KjŃ Al*<*^@\XÄ~i"cI{4 ƓXfNeD35 xl ~GB^Euʩ ?匳|ZRر&1n1`Z_ PDp^~x3Z,K:OEF?4_pU<&,ϟtX |4PBUSa[񛈆@LO9d_J`RHG ~v}BB `ꈡ\V((2YXY^D0>([&-OKF{9\7AID\[_UDu>HKśC6߱zs'\-%ڿeA2(vU.J ,3M7gs\6e1vƋ({ >ŞH7!.9qW'N0 ^%zx8'j?Ons$X(n,נΡi􌇌zKW[ z8Q>ZqV!_ͱܑ""Y}!Rl7LZ'T)A/W_ f[ld.U8`_!/r$YwQze$V͏s6X 2ظĘj/q-f{\ 2/y&.6hxR*huTCjQXBZtZ:+nr-GJ2ZS5֯~+lư 21]Ejxz:LѐKy㚫TCx oH1S i*Y@OI볂z;HJVw((:{zV?KbDL,ĹJ灸R{&ywk#sGC1f1faP9eK&3 Xn[,{fscrf?f֑ӧz"B3*T8O_ӀXEaEs bt,DuzѕΎTF\?P7>?{Gz{*i(ʏLFP5fr ;'M8Yy6.Yh˵bGor+^}+Oֲ$_bdӕ7f \lw%_i,K4^D2B:2%EN$^_&mimo}%kͬ6_[G MvH!ނX/spZpsHBwW"r>˭eNՈӀB ~3hI3d <]5{nWPDY{m2I`v٨ o 2U·BZϼfc@Yo1\Zkvޒu8IF=S ih"@qS槫 劑Xg(TgצRЯHdzܽF(婍Q7hh~ǭ/SULepYmh<*BEiVqIY5vm^ySR]n֥א0]W> ' 4Ю\T$\f[Ch&􆮜c\*Ѫo[,S'vCwz Qkc; Fɦn=/T +߰ZxGmaA몰[~Q 9x#5ߝ L7Yg3Td:}9_J J ]\ƭuP@r8w_#7*IѰ}GD휏-NjIOT`z*Ěz;(g$wV &gwᣲ+e`"‚+31yr]SG Љ$(\cz.aiP6| =0/@VBGۀcSpִ*,wQD[nѸ(nh0ot:FN9yoq2wR`0ϵc^ƽˑv#?-QkS,"TW.A8"jV%Ӕ XQ߽y%NnP 76m]Ž}ۼ͆R4 wI>+ɋy`ƒB洺"v쾙D*vAyNr6B4d%&A*fFљmoZWbk,Ǡm?o;R2[4q`N~OxN˺gc]A\ζFδ#RY`S8u|%ދHoWfLTB>ϖ ]~ 9 pÆŠS>.~:apfwBíQHܢ!#H NNB6cC44c-NM=:v2M)NP>,1WĤ~Y?KorT]ĨgAKx.;iL0df}DU=ZdylPUn Ms+ y%. *6[/wB Hb/$lF?Ǩc{dyu+,0p;QDYm _[>vݓPj›/Ad5okto0ȅ/&ubzY* Gyw(Tm>})Ld]Zy Y%?>[h l'ʟ=hܜ:[切ʻѼݯ ȄZ@JUo].Hv1+b0G^a43dUR<'y +v*sjx/J(ͧ 2 VV*7JEXNI5s1PKQ2΀3ju6C0ғv h0 yAC&p/>[1&#婋g|V+Z4|hjtn_ӭ<սq,*s9j?q9r|ڿN{pF8WJLtqwd! e4(NZ(FSe?!zrd#юά{f 4 % EGFY~un p^11N^jFY>SW+H*W@閟KMQfsM'RYlC:{,in'-d)3MCt|(%ud=OiG XexfԌfzs+MH +!'MUյ'{s\CH+>nSӳu~;nM ճ+P22PpyB$֮žw=zA;D: FVmȭiحgfI ^"Q*R򜛖t* cm}mb {RBMjf-Rdm=ڝ>U<#Jax;XdҐKQ2vɌ).\aע'7-ʪŚFNW1#xrpf1s;ޒO3˹$]<2;K{h G =21PkTZ1LGvpNȱsl}Et͵-CHR\cC$w"a \/9 =olKP!6t@'{B\l!e^K<~dI̾%`ۥ{XVLt5ksxIۯiq Wy?ΝɟQ( =BXtinM*ӷ<- _|0ZܑtjDe؟_ܺyvƐ4>zAp`ܽKFns pH %[%TZ7rmqdSj. P:B!> :~)U,ZR4|bVF# p)卣a>K>4{"͂xťW-/@ + LQ;'*q溤T|u?v|eŪE+!ߠꨬ-\tWwۧp|:\q. }1, $Zr$ ~=Z;UQEB:%~Zu B-EYqDo]Qq;[e9݄>k%[2^3_6nIV; ۄH*$|YW#-Dҕ1)f%SGSq#ÎP?-cM!^8Tu0Tlqh)Bldw쐿yCS +) 걍ٗJhS &"UW4  ڻ>ٔ9Kv'N_{M%iTXg,4Pb($0P͞`4 KifTh:C5߲Ap^]}~B~kvEz@ymf]VeBtɈƶtW`U_cRէk250ewO9LmgM+Lzm7_TZ$6_h⡱<5MrW =lv2V.øZax09drN mPCy ZPPỄuȵ%x']Z} ^x<1W-۪PjYׂ=e s갈؊QCkOaѪ8B 1e*#k<^'tJ]3#}bQB'!k:-d_CD< ] 7p2AVƬiҕ/øiv?Dduԃ%8ABQw<ƨH6 a:}f g892ݰssN_YudL *ίM%B1!L:aWkໄ=EkqreIB.H/]?:𻇒4=! Eq6 V+Nj~Zt G @GLOpCG2䉢kb) G1y.dHOWQei&ğքm ]CD Ti[^Ap6[>jG8԰6;B@blu͊+ Yŀh+BshYE*}@\o KGȍ*4BE&Q :BPAݑPhUJi6Z*pAӑF%E6*-d\Z[yRAyͪP F$K9|V/}GoFMs+q#쐭T @;w&#l9q\xpwaHP_>v~0 E(:†@<Q7CK܎`{ R) 2:QAv1lW3ӞE [p"ULJY6RJ3sF[yu{J0+43g}qܥ&;51 (?MZΉ,Rs=>ާI5DF־l Px0+ug EA _p.jl<5p]| g;ٝsw)-.({rڏ5ɳ\茷5?crfgү7uģsLlqe& ֬]dL3X"^<k3F~\P`]Gyxe̗Rz%GH}6`;O`ZF41ܰAISPE#[8]v~qΝůݲ+MFl*>{?9L M qw*1.֎Ƈ;tw';Q4!BT!/Bxj`-+@ HVzQ6Qbv<87tNX(-cFq~ȑr%?*i?|ԫIl[.^};x!6šPVp| >) "7תQ:B,q|Ԛ)XIR{r+<$RɄr;ɦ xṷr>OS1!g^Kُ y6NTJ#Sj'Z|N:u,JIZlQ=W.fCInt |X$N{h}R# b[YM&JC= /Б? w8v^utwH͝u/+#j񲌁GmFTrS[取r=g6YGu& I t]j(yl?i^mP2NCb|_|U~G}3ӹ䑘{I O!BqfER뉕$S_[" d2<4D.fKA NTƙm>&iu493"[oHQc{?p(mXÏ\b'G ^D ލ@_0Z>O9rX4=@zgZYnm*w> Aޛ4ɊY@%".Xu*({B>Ge;׮}}{kt,ЈN*)S̱c>!"5l\8Q+EӶÂM~g톶1蜳$(1']"tfvs#j)~G9\{e/_JȳtQg-q9~M(i\> ;uwp|4N]--1OLCw2"8Ydԁ4Zn٢efI˷G) K>/q݌#.yߚ؅Jމo) Ș[Om aU'|Xd_mSFt{ 0`8*>߄tTQȞur6Yg|_VUqpֱ:7Æt^u 9x4ŗI:@mP7osvW ha20A/y+P,>^_| -Vbj0H sjvťʲ?)6ͫ~!wvW2Ik}Oi(0?ۋvyVq3 Sw(C >c%^nm '{kBƯwbos՞QY@z ᄌ"* ҒM1[4۔}K K*b|p~DMϊ:浂^nϤ[a8s z1e:F)󝇄?,'A.ߊz̨ $Y[;>Dz]eFx%`JNJJ̝^?je..agt6##YCmђE*Wm o(2,jB~:wD$a9H)16U/H <nL D5 EIn]R2"@ )r `kR_yN3ל\?2<}Mk/[&H7` p  4tnd IS, 7WW(H!BD x^jSMJ l=C `~Ulv';)ry43P$9ZXRԵHd 7T<sZI FQZau .[*z`,({I7*WcRUŋ~pcAnA(Ex2IRsCW'N'(9jL+ܥD>r%2O#  >x|VW+/QtXke }<_yqBs$Nf  BlaYKn1&43SZ@õg9u 6[f!GRxG +K b>S'Mzby(\13(P>~K Š<5%]6  &QBkpkD1ix #Q n K/Q1Sn*<ձX!"3HJs`Q ~!#*&4tA#Hs J  GhB,+ MU2^>HF@2#|)K  vUn3mR0kx:zЎ 7@|39fi ai@ 2|ֲs_ Dx@pW OJ -p]9k#0JjEn!..zYRŦ^' 6YJ~ U  m,Yf@ipQ:LrJYEW*pgH)!Qmn D!s0 N5!hp]fE1OVLU?ٻ o"[*i/ {\) OGq8PpN&O?? g^jcE8 rH 2<u1$?IL !x0 t~}o+2$* Fu)ol#9z )/  m }kH$( Pft9gPejH*{dCZ#'a0bj#cC{hashrat-1.6.1/.git/objects/info/0000755000175000000000000000000012470646475016136 5ustar metacosm89roothashrat-1.6.1/.git/objects/b7/0000755000175000017550000000000012470737043016533 5ustar metacosm89metacosm89hashrat-1.6.1/.git/objects/b7/94679334ceff1352c53e71170af639a67ec0820000444000175000017550000001663512470737042023472 0ustar metacosm89metacosm89x͜ksǕ++:2E,;ZkDf)KPǕ`LB*?~t̀El%ӗӧ=gt=˯?|oN/_mo$H*,Fn]/j"u;G("U]Mӵ=.Yȭp4uo+weCw E2w|ڍr6YWl1qwY5Ք9M8slߕ26tb_Jf\nᑻM ;|#pdU\pHFKf7΋9 )yAtjH,IwKY)]~{N Gs][Cnbύa6ׇi)Ui1D_vFyQV yF2+;.˱ 1ܢ CxLrzp\a%uޜv\dγـD?%\N75`Y$ b6b6_CD@a$'EwG-iQ.Jwv~%ˋ#f$?8᛾,G/"~^b_z=٭-s5=Jdkܣi: Bݞvrl1 EROϖTX1-jkͣ3 psq۝es J.{<|}zdD7X0ЏB-Vzd'l]I# (p(ޥğ0vEP4vn-1?$8GWnĎvϛ<Γa>zUJP3Η)|/rDQ&G)6洧7Ȥ9_mN۳=9s{Gh ^}mn!>(idHXl/twvk-Z,J(x@۫cN2裏1_Vku4i4yzқ[}Vo {z؟o&H%mϫ }(sV"R?*Ń[ j-W.ۋ޶ɤLV3E{}.-Up,lyKe쾛ee߿g5RXh;_@!ƕ74S&? g+ ht1*js=6mK6G'I"Hj"G88!*+"][`,ꟍx:m9ܘwEYz}x{xuth%~SE~gДb9RC ms99OH@< *ӂpS|:mȏB7 s"x|I5)I3U%װї3u,Fk`vȟvm?b;zn y㪐53䇭ñ|8rN_הE쳮xyܕt[>V#mm.Ҙ6%lO,ݱ%( V?  Nqp^Y$AZVy6ʪȆ_uWqXن\IXs"_-=ԑ-~ߥ33܃RA'5_نphE:?2a3΅r='a12.7Tsb *hg.ט㹎Q75 ㏳lSB4VGLdP~g~Q鎷YAsUgqOΏZpk,bX/"Đq#\lmRQ$w~J{wou0 GVX&C@Ɲ> $T`&C8h'{T=DŬ>>m8]b: ZU"m4Wq:(dH*pR",(],fU-jV6B>^kpd=A yd YAY͉D`b*+/? YP_ l4L( / cɲnP76k 6bW8}7Ki`[7mha!=~mvxuuO< }aRB-I.A57gR+S-FbI\{z~++E@͛DG "["xw@rp]tӲMwttIn "(fhf9QU.Du$Mf+PtmȂFvŔHZ;γ OSԫU-z@QIPJ21"VjLKK41lJ=*Ҷ_UIޫWS W6>;nu(# ^E<˰+0BaR,fh.U+#~#kxPǔ0-TY&A@ 敂*麵jZ B"9cЊ8#z) %ݡp9Iz ^\8lEQZQ0TTˁA^}^wޤ-PJvQPڢQ>2øPyz0@ry`k c3 k}~(4fad{GG ~ :[3Y#aZSHOBiuLAh]ۋ>W*GFbLG̾1*#R2aՖ@κ1#Sf/6WOnM?̂p04@XV xV]ʳ9O8B8)yl:_NS^6A7F:xPG6E>/^E'~؜I1_J գ`yp&辺<,{ x|z?:<p쾂=u g1r!ݡh9j\HƄl}nj9.GTR2SVE a "a[;\e#QfC|p1|"z<T*S-_<}!/- ƪFW=iSls3?"E pv(HQuSuj/&XgyCƵ[.u*)V(U hHJ"yh^4'ʐu4&d."e{X \0o(F9-R&TַPXR,[dJ{nkzE-FD8'Y]*;Y8۔M,cB>TgϞcJJff$%ׄgum>!me|?z&p?_&oMIO[^OB)#ȭcw+根s9NBK oţusi%;g m?ђ%< f2BĀz}/j;o,8U9[ IRN'kiՎoS3$@@I'jq/5Odn:kqesk5$BWn4&+.d@5>аʡ`F *,{]sSppmfbى-4PQMR''S.\AzZ-*FQoy"XcV?ZNq@}XdI! ._Jv;>0.-DH ;2 XPe*sv{huo\zvve]Yc[!TCLjH)H}]NFXxfaP+y Yt0ixDx|F(xy)o|b|gr[=ZBG3QB9jiy ũTXd,Q@i6KeEFU 3eaߢwV{A <~],ueXi^\1{8 d'Kp %txV :G8%<#Am!Q#d'gTmlb!c_&wrkoP0 X{PrſQjUII [Ҧd]ۤiߍՀrx"O Zɧ5ASu.̖zz0#6= ^+T ]'zHmJ,4p3s|bK);~=_ ;Bb5YƖ#JwI;9tQ~T4d78-o,GVl`U 7 eϿ9OhA$XU q: mKxW >*G鑯Gky״:)P4Ǽh="!+ n}[>/ʋ7k2AU% "FS0lK',  !9D5[@O!/KL jwyT;nU􇀦ujPmCGκ=c}}ЅOf/)Qd,[+X譂x=@Y@T|<$BVc̺z!4<8*QvÈ#wԦg Џ'dX_:G{ C~8h63M q-2.7V2.QV,(AcA 5|&` oI^EB P_to&D>+Y潥hןĶCyۗ7*qx%uOL4{C@Zk/NQ ⦮"텷J;{yҲDQ1"S_)T~CTj)Vm:]'Il|-ABN*+6B ɚ%i(;_Kľٵ湷x ~;O/h* c5d@za^U=`Hn).+{i`j׹ .,ET!Qr:Zu 3 8 2#"5f i@W}N_n Ey;Rœ`W)d!pQ*ԁǙ=g {Lq8o gϑbefX@1-TZW@:A ag @#@҆ cmSa޳jIb)-^jц/bd6fͩp) Ia)PI4ۭ*N5JЖAF2Ob6@Ju? \c~7 ѶH:!ߖ9+ݍP`G?ԸS$dl[X#dPKBskX%iovaLG2Ƃ3mx2DǛ`;ەoHYA/zID0ҷI;U bgK3œC ni) ,~[[®G7w[rtOg$b7szj5Q9L0&˹py͜XоȚvSA.qhashrat-1.6.1/.git/objects/b7/4c3fbfc538fcf8d60a8d0d1da0e951d9aa8dec0000444000175000017550000000030712470737043024405 0ustar metacosm89metacosm89xAN!D]s'$ƘV{~~]Rr~2>z){$ 1FYǨxaNM!Zv5-^ vYs^Ox[Oܸ6]V0_&̠Ycj^@78 ^|p)4ڹpL]\hashrat-1.6.1/.git/objects/57/0000755000175000017550000000000012470737042016455 5ustar metacosm89metacosm89hashrat-1.6.1/.git/objects/57/907dd43e8a0c53c6e382f82d6f2b00ec15bc710000444000175000017550000000521512470737042023662 0ustar metacosm89metacosm89xZ{o8Osu>$q$.P%U >eɯY]lyrf8Q/=v|oAc;~K|uf:<;.g}#-k yu}i%;* 400tݰv7vfq^1uZo^7E?hEˎ^wwׇG5GRA$Il;<,8ibۺ y+NzԲN͘CʩE&N:|RU~TK9C^7Q ,p^qy˟2G[A;2S]VNdGjuv&HR%l `5NP l0!)YĹb2ͥ%]p,fJPo-["J޶N8^5E('n 9;#'"EgK.a(AU%& ļ`&HJb %0zLL!&ĵA4jU5`fY3g6RQ%E2ڒ"WxPjjRv:dĂYw0Iֳ][Wq֔ J•sJ'czt5 8>g>܈ A7N.!n0L)_^ыϟU[lFXnAղlN=vܘC%'gb.qd/{vFk3K. @btX;Std?Aݙhc?wm nn.Wҫ)]ÈqUdLhncH δjRNW7EfcOud cQf'A _Zv[,SOЇy:n_PKAͻeLͷ.;x7kԈF afS%QG ETRM qHmR/!#|mCJ;&@,vK/|lvq>~zqT,/?gkmrCSN*TŬq|g+r ;^wzvo_V aslZ^퇪>jx}8z^ <@w7gR_T3qdNx́gorR::/oԗ=%?/t3 " |ӘTj=9?:)ASqXW~K K5C'NX sUuo|ZZ.5@)N?_!m 4]mīGŘͽNrXs}ɟJ.趝Sj_i;j# J ^;R%U4YsAw\ N#~s=Y!eǚk` w6omwn FuL`uGeÐ4^LɍrzZQ'^LLvot7r/3[߹aS|MkpGV" +G57 N{˃TE nݰzu w7w9K-91 Ar-й֐ 97~@ܐ/s"Iċ7:W]8u|i  x?f:@y@Gasc.&0PyH U*.Ģ#T_PFS>->y>[C*.meހ(!7?}^`>j:;dfeF0BEg5RxBxrr;r,׮m$}usS- E9 zC`iOl8Rv4ʘ$ݜ[ɊA!rEQWO{чݴ3?'7g|Фq.֫'%)gu<9ȜRZPF6@PJ_]ۃ ;7l:q k0E0>: L2ΔbZ\zySww'J}򆪯o`D\E` 3Pmq?Ñ-;E6pF9^ UM"WDB )3{S#6&R5&^T<,TgNً~y75nG٣ިM> Z9׊ HRV22Ō"i @i5D<0Mk' 1X Nβh4z0P4!^F7Bŧ\f+) $ipBh]ˉ)*:z'ӬqJ(#ZM޸|mm樦 n;ANԜfSP%@mc4g4lyKt ϧdr`A`س2)=fazrl0/Yzyz^?;Ío]fkF@CqH|q:^{r</_2[ Eo&HFZ< HFs˟!;yLp/ߔ/}|oL^ߖ5A94JhZZhH-PLwY3'5_h t2&roo(t)؝2|GBp-&N;t~*osO4\oq|ȑh[NI<,q䷦^0j:ZZ#2h}Wu" (+$FLفaaNS4.PLz+rnArTzߐ:}b;Q8H­VywƂml贄\l#Wٝu!wt>35r\>+sW7iA"͉QX:ȿM⾷ҟgkV#;x|`:wmV_xɔ阇"7IDg$֒DU37;.ARNV3ƞ^ݹ0\8M0GG;[yyjꐏ~b]&THsj6I'6 c,Z_Pq5y}N'yIz;MDjsFuiz>sz闸W`@baݱ'܇Er*XWu營[T#q'>s /οOZK!OwOs||~'Uw]dD_lprqIt|yZ1/_ |"0R>^a"õiggj2źty_"12ak_~ND 7tw}?X߭+>Rz""ƴY'RU"{@7{kr|'d*,._kwz%R?lz]EZ%| U|o9:=; $׍Єйr&<%F-TLXPQDrZ+ .?bwR f'MwV+RBxզ̭L{ȭ^1+c؁Qfz|7{6`܈.,HXcr߹}_?D"C0?E+*'&wcD8Z8 HjʹC`k C$ tA /D")Lsˣzq3_dOdXi,~r*+U&n~ YXli:A?D-$R3-:*s@RҌ8I ydQ 9䄛&b RWخkrJ)V3BDǨf6"ݣvyϦ֚:L6'GeJ?D<7rշ+9StqlB~f2kE&`!8snބj;πbuA[8:V /q#Ly('3-Eژe1-r9HCKZw b.3QyᒨNtWckBݍH=b 9V|F22wMoBd'ԯLVS0Ah<2X37 *zmQ1Ͳ٪B3N8CiɎ`.6z8 ;J[F[E/Q݁ Y76.@2Ow`mTwu B&jpvA(gA3%հ 90r7HxI1U@^ߝn8+x~Ws: QێhM}:}H{T9bG{MDܡlzUzN})v{t`iObT 긠:>Ø?wԡoF؇!~wZQeY[tl% QJ}c7R:x5Q;k=6Q,U(Ω@@,Zƌ}B<  tQ֎wQf=F{Bq˅vzjajxlڻD+`5U,.(|Cj馒Rq稣: [G"kUSq˅N#*x企]BM!xI}i| &aHIA>x3JQW=&wF[rwT#WۊSĥ4+QJ+~~+e&Ɲќјe×jr%P~^qdƣmǷUƛA8oe(&B`˟WAÙ+g`rV.np|[mUm(p2Ci b1&1k_ {E;!Hw7YO}f 4!{+8!4b rD&a0 11lc0f1 "]ganS]FTu+%e>g#F`AWh0 {dPHN͜W` =/hQ`&aB U0eȻ~x0eM[IDi+3Ua;T RqGw=30l:jZ=gX%! GAzU7@BÕ:XЕaDZ0$Ÿٯ\!H@ CEN(_ i^k-`wk$Zuh0G@.P/zFIL $ wdzD* _f"<5*qY $ =8ox(" @KI*GXڌPPbwQٸK=6'Y+C\PϬн=ёJ1R:Ye.KuנcN( gݏט6o 5m([PSG^Gwpl$m5D+{9 XdMݑ\&c=1NJ!SCon/K*h}ڨ5Zi#E0wFB~Hʂoe !EɶFrɈF%U[&"/(I%NdS81ynOD}DJ=SSE%5I^*H˷ !  ijj"1![77!v]AD Hq73"8㎍xvtӹCD+ȥ.{U4a3j cёJܶ@eu]h<͘1VLE%H3*pbyErHP,0ixrnK1ۍX4K|џ;92Z2QvlXl– TmJ[)4=zb.L>#F6at5&,AuuIkd Mbٲf*z7PE[:,>m1$a!z 0&\-b2dD/=\I6m9ڬ UuNrk/QVN.SYJ0g*Gd^])xɋU N!jiƥ۫:>\#AϮ>g$lRf&8JgsyRQ%#o(Q\u%VR[wmgO4l1vb r{b;?iMAHv^Nc!L0S@/x1m0 'ŽrÓ!H8n>::B藽׏Fwqt9_^i8|xZgwqx>OtctXYBݤ=+A;{a]Usnn739q-hpq(*V:9iNfl+ .UiQ ;p 65z\cnؼwMݠRN\.o5vw(5z ^NnGP J\!#|x?P"_@RRiz^% E6T c꟪%N$moX2g f$IL׃ǂyL'wXh[;vAcRBp 8c#fN䍥C0l5bf{MtB(A,'vw,5~-+ו@X ".FZ'z_+W1y\ w MZ3 nnsTy xdB2e[!|,4fFq9~IOɀ6r6sIY~=Mk\F6a6'/kMx8$x;ճgs≨u8S-(i4H1@q"Q< H#v]DF[Ʃh>|^AyE+g4FD$P3!z]Oҧf?4V"ϓwįr,jF$G— $$y"nxkųZ~ trd>Ngg|M2m{R@xfȳݽ5ЉI?#dױ8GB)!2'/4Knd] :Y 90qYx⧊3aڍ:4{yvm,MF I)96v}9H~^ҒjCZLa ^vo;.u) 5$n2ִ)܆5r{Ӊ,Q=! 9s.u̞c d[Z'+.ZfyMȫB@l]YGЫj#կ*}ƮeΔ3N\4f2OL[d</&VQGLTܬ.z.>}7LmVJMiր,ZD",F3 McۻP6b |̒hxb4 kl@'ռkAӣ'ԑۥwgق>ȍ"T(lֈ"ylX6rHq-ANYL'\,=p6fC<2j8з~҅Ծ @cs9lM4zQ\BsjNۙ X*Wk|#4,QLrvJR1 0aӝ#E#&:& og H N`E,Ȗ:R0yLRT8+fEFwr 7 S$_eCŎ:<"`NϚ-{ 4r})uD!yУNi껈vUԻՀrIў2*xs>U$öVة8@zK&ۀ=Wl Q`lD?ffƑ hn&f XS $ %9'PC5WP`XbV ?`%o}jWI4ICN.2YWgTWIL {ff {dB#aӾ`gZ|u%w=pF&BWR;h.b؞ :4rzQGT>ǝ!@D#Cp5iT YURCSC;;r=:ClY ɪm(ӱwu9Ϭ^\اiJBpbz.QQ*:0J`jp8µ^iEl~%,pECzh2+%#}碜r\q1hñYsAG/*ozrn GW8i1Ka FޏpO5VR';,s֗ml}5255 1Wڡ%ʶ~)Qg՗h7X~`n޸hK,t=RpߋpIr%I6kpoEXyv~ :{}"r>pӟ(KWn33[s5̪^jtjxy0Nr  T3~jTy9jPf?pD;v*)H gT5*:uhIބ ;4He>C^DoPs9R 甔NԄb(X ]tFGa:-ҴK jH*cv/pZRcORBqeoʁpέg,fIKK;Mx!D '}W*TJn(DZOoNDüfg./Ԛ@8OT ݞWfZU!>ʧ;[tUK9tqyv: ړpnN%|;e2oEX2/->lLZ#>k8],K;$N"24ōYzݻ./sZV8YqrZ}x)fygɡYE W*7M+b|x]̳q pYU4l-iT[rew˅S# _xMk% q$ OϻNC5ٜ_;dzQ8}8ψ vL6d(b$e9~ NϭdPG&dƢI/C\$f cPB3p4(0y%eŭyfduk$FE!wq>,!ͶY ":IG "(x_I^#zq}Iu뭃[3DcHrg7x7DbS%ppr~*P #lgNjuЗiX`[gl4Š<^@.KZ͵`?{ۻ8(QdG;R>#j-[HDɍ(W0MgQ8+Ysԋ}Z>4<[.S`U$[ !,(&:$c}b<ӻxf[kؚqtޜ4ΩF,?K14\Ud43PUf ruha"Fڢzͬ,onü,;DA(0mጥ1h|Kb_ eGGQ)//?/¢/|%QZ_޿醜ⱳ?$+CD, p#CoȒr!o9]wULKP!W*EKX0cK csdokN6QMV$\ěD+}`Penq8B93;>RV, p/̭b+p4Y<ʆ>Vqa }Hp8/d6 "MW66̫rb piIRi|7imDnJ6!-bhڒ\w سІ<ĖST0) AOXň?v^"xE\+e+]xvPa0rvhHnt Z m4 z($y>La}, E9$OLOH8KCi˼T[W/$PqRn"CQ +XdQĂw`f4O0 |+AԞ3 Kt@kR^LmMiGS`ƈc?8dᣃ^laʋÄ(5=C@=r}G帾zPEl~{5y 6]d>A(i8LC;JY>>·0ۚ3`B@ +W`_Wlцɠ5f8&}ߘ"e-!Dy#q>eqMcې }/7.I"x%ݵy{ymP\2{]MH<:5zDu D؇C!snnoGH2%Pz2$9F"yGSo"eS0eZӃ@ޙ_{WSD"{_ԋZSYQL'?p 4K&1$1F}+mL--c+갸ШmK?&ӧ(& gZe~m$Ùo7ozuK `Ծ>7!z2Άa jBT?T3l*J1 K7 )߶mLA/OT1(f F!PBl<]cP(+foBfSn [Q:f^{?&B%XS;]m "^͈@nUt&},%e0P(B9LaQq}M<)a|eW6O=]j̣) )J4mrRԶTRڽ_-pE;X/8 V} ᱣb Mճغk˺ttҜPO6d7Qћ!J:H%^}_k<9QV :,K 2:o [ x'uƻrW۰ :m.Q!Йi#\Q#)[x(@sҽS+1N.\zri)}T^(u`3jD$` W7[oZ/foZBH[ [qT(dʭ=A+ܲH~6CxbK֮,WT?ѱOB׍Pg,C!34ċ s͇e69P5/_56,|c6a6xf@} /ZhDr;B&r)b\ xlSST [ >}.0gÀ:\jY-G_G7!B_}z?=Na@ΖEFѕ1XCGI)3mJӅ,$Ж.lHhN^*]eӇw{~zh=tMb|9 F>icFIeQɼ4Qgb'_zT$ x|] !T8([\Y mUB*$\ ̥^E42F8'|J-<H.^2\Lc3 qqg  LLH8ZVtRwneSh ky8a$XWJ.cNub(}p VSb4=ӌ#Ǹ@DܞNyFjd@Y~ݯw]DSTX 4qҋ+31.rp7Dg{!MQT/1X=4)!,S TԠfw'r֞Qu`X<܀)XuKnD}*wܨѠlcx c1?(1T% -NE6;K[vvF6L-Hx`LCJ:V!tH!WG'ujM X~)gކ!@SrY^ }9y3/8BfMCP8:~zEjj՞#Y%o7 UUݘe(J=&GJDHڕNT< =N5_ z 6xDxRL-==m!:Y ,/U\f@W"œ FT&MEQ^aF"lI gæ%i3ɀs#ZiGBVZV)<2}Rp|u .Yaڲ')yWhK: !/`KD Т"!Ї*l.q3 u3jw)K!LipF-\&wi@ځ55K_UooEu]6@TBTLmsjzai /D$B΃#n[Z}j_ XI#S.xGT1mel[gجcvk5N-l}\%\DN'QE~GjC~ୃe'1ƥ[ۜ*Oe{ 56OEb̾ms6tx)MCGU_D21 T3iptb"jiBrPϘfZ'^̔^bJ֌Zܨ2 u+$Qg`/N~6Bjkͧ1n'd] U^S"F.,8ȊG~g(@m0a_.iX4ŪM VF!(Vùv[ΞKNmbjknEpΞ _ GMcu /&{P-UX`_A$wlf"k!G|o\kj\Zy)0+ G/iA =D_E.49?GqZ[ ]Lw; G&Y#0K'8Pov:ZςݜQlP/Kmh܁۸L$BS;g9=ΨNKnqz$FQ U'3c*1uCK~ p W04qImnx'HtF\+gޕlqmA6U )MkusUFc> y *?W\)^d\Sj)ddC*kETY,qGCTkN2?|ЁW=Zu` rDڵ=mZ*o[Fzf[b= w e;%2DZjAŽa093B*7.N!|*m"yGŷ:VxTіfcvR;,oMakܚԳQhtу4,4k:R842BO.Y@jP co۟ 062ǏHO*EEj6%8 &%Ur|L;vŸ 9&SKT^HQe^"`U/lzd">n e AJpkS`Kx-tc 'R9`~`S4`I,PDDs[Nu4diM}mA͹èv_*8c?n58<c$f$\6@Ojpǩ 2h~ ~ Xc*DdpQ<<9|;62& E4Og1@lmHG'w zD J:"q֦|y[~ kH!Ր+&iM rjHTxꞀM"V^}t;I1'P:"Xvavɇm;[xbQR!ooSCqTv1M aK&y* @ vVFfa-5; Zc=Rrwi+^XJΡtbصvfKn>_5eNv=kA]%(˵Ͳ $&FkE⭓ 9`ݪWP4ף t]ނL"ی b'iF,nIΚq8Q&c4D$Ձİ|QʑTטV]"41|qHjF&AYkV}ߠׯ YKFw-~k '4[o5ض"ó&~ו`(aV6-GH_mZ!*,nz V;I3!@pycxN:ҍb Z(rzϵ16 .- udY7OQ$4%[+ kϚÇ?IKYgSolT!οm8mNz}$˶TZl"|~S^8:ۈG#&vkD#f;z\j!TQ$>?UT'&"H_=}VA4'%wO8E8˩jHg}?_ze<yU9GD~S8ŒG 4wd!^05?r|(1XfAczD]Zphu2|E=7 #TfF\s78d|jvN3/d_nV-rVtu,Ntgsy݊AZYSd {RvNQ^79қg#yRg*N0. 12ť$S X#TUR:CUJQuG]OWd j^w=U'G.chj9̆xA9Z49&y$ٔpK8se|u\'|KKߤ{8uĞ"n UR3L ||{T "S w78tC/@ |?zyb:@Vɏn:U&.ꢔj"  ){?m*_ά%C1+!ߙܩb xfqQ5cJ"bWs5FyT ,8ٞyEvMMr Is.l{)WY^fEw~ȒBZXؐo&MID+dQ|KukY>9qedVuaWVtWͦQ 9e6)t=Qt.PЂqvPL!TZ2ulqX-"[ n5:W \yI7O !v˄8}B:燂 N~Q*nn6Z88*OFaix:CFFA*EK$ݛ PSbz"t$(X l.&LozMG۹r(s"?z] ljti vwtnwXVyct˅< Tag_\spBHV?$c!1Cey٩_'HxG5 `1$=4 iZE/!W+[/IBEp,U[ԫ#N Z8i89mוs|~kf ٖg2|[-c?82೜Ee lgٜ@b)32g[sD  7m!Pͣ?J.(Q\J`G)?/b8Jde\-$n*w*cpƛ99H_,V7!3u=^S"cOU7W5Q|ӹ?,u/}qM_h(w7R!AYR2)pV)\Fm%4E܆sLfH!bf  %&{k:Eb-u+i|;F"Dߝ<,!Eװ_pc控|_mk.b=8fƢ.fGBG!ToW|nnu]P~6^CGctUK9tqyv: ړpnN%|;e2oEX2/->lLZ#>k8],K;$N"24ōYzݻ./sZV8YqrZ}x)fygɡYE W*7M+b|x]̳q pYU4l-iT[rew˅S# _xMk% q}\^ Dr$z1ݯd]cSD鴜9ۂQX>(OϻNC5ٜ_;hzQ8}8ψ vL6f(b$e9~ NϭdPG&dƢI/C\$f cPB3p4(0y%Г"eŭyfeuk$FE!xq>,!ͶY B:IG "(x_I^#zq}u뭃[3DcHrg7x7DDbS%)qpr~*P+#lgNjuЗiX[gl4Š<^@.KTZ͵`?{ۻ8,QdH;r>#-[HDɍ(W0MgQ8+Ys܋}Z>4<[.SU$[*!,(&:$c}b<ӻxf[kؚqtޜ4ΩF,?K14\Ud43PUf rha"Fڢ|ͬ,-ppü,;D0m匥1h|Kb_ GGQ)Ȅ//?/¢/|'QZ_޿醜ⱳ?$+CD, p#CoȒr!q9]wULKP!W*EKX0cK csdokN:QMV$\ěD+}`Penq8B93;>RV), /̭b+4i<ʆ>Vqa }Hp81d6 "MWB66̫rb piIRi7imDnJ7!-bh⒈\w س<ĖST0) AOXň?v^"xE\+e+]vPa0rvhHnt Z1 m4 z($y>La}, E9$OLOH8kCi˼T[W/$PqR2nbCQ +XdQĂw`f4O0 |+AԞ3 Kt@kR^LmMiHS2`ƈc?8lᣃ_laJÄ(G5=CG=}GȾzPl~{5y 6]d>A(i8LC;JY>>·0ۚ3`B@`+W`_Wlцɠ5f8&}ߘbe-aDy#q>qOcې }/7nI"x%ݵy{ymP\2{]MH<:5zDu D؇C!snnoGH2%Pz2$9F"yGSo"mS0/fZӃ@ޙ_{WSD&{_ԋZSYQL'?p 4K&1$1F}+mL--c+갸ѨmK?&ӧ(& gZe~m$Ùo7ozu[ ^aԾ>7!z2Άa jBT?T3l*J1 K7 )߶mLA/OT1(f F!PBl<]cP(+foBfSn [Q>fb{?&B%XS;]m "^͈@nUt&},%e0P(B9LaQq}M<)a|eW6O=]j̣) )J4mrRԶTRڽ_-pE;:X/8 V} ᱣb Mճغ˺ttҝPO6d7Qћ!J:H%^}_k<9QV :,K 2:o [ x&'uƻrW۰ :m.Q!Йi#\Q#)[x(@sҽT+1N.\zr)}T^(u` 3jD$` W7[oZ/foZBH[ [qT(dʭ=A+ܲH~>CxbK֮,WT?lұOB׎Pg,C!34ċ s͇e69P5/_56,|c6a6xf@} /zhDr;B.r)b\ xlSST [ >}.0gÀ:\5k[-G_G7!F_}z?=Na@ΖEFѕ1XCGI)3mJӅ,$Ж.lHhN^*]eӇw{~zhMtMb|9 F>icFIeQɼ4Qgb'_zT$ x|] !T8([\Y mUB*$\ ̥^E42F8'|J-<H.^2\Lc3 qqg  LLH8ZVtRwneSi ky8a$XWJ.cNub(}p VSb4=hԌ#4Ǹ@DܞNyFjd@Y~ݯw]DSTX 4qҋ+31.rp7Dg!MQT/1X=4)!,S TԠfw'r֞Qu`X<܀)XuKnD}*wܨѠcx c1?(1T% -NE6;K[vvF6L-Hx`LCJ:V!tH!WG'ujM X)gކ!@SrY^ }9y3/?8BfMCP8:~zE?jj՞#Y%o7 UUݘe(J=&GJDHڕNT< =N5_ z >xDxRL-==m!:Y ,/U\f@W"œ FT&MEQ^aF"lI gæ%i3ɀs#ZiGB^ZV)<2}Rp|u .Yaڲ')yWhK: !/`KD Т"!Ї*l.q3 u3jw)K!LipF-\&w?j@ځ55K_UooEu]6@TBTLmsjzai /D$B΃#n[Z}j_ XI#S.xGT1mel[gجcvk5N-l}\%\DN'QE~GjC~ୃe'1ƥ[ۜ*Oe{ 56OEb̾ms>tx)MCGU_D21 T3iptb"jiBrPϘfZ'^̔^bJ֌Zܨ2 u+$Qg`/N~6Bjkͧ1n'd] U^S"F.,8ȊG~g(@m0aԟ.iX4ŪM VF!(V?ùv[ΞKNmbjknEpΞ _ GMcu /&{P-UX`՟A$wlf"k!G|o\kj\Zy)0+ G/iA =D_E.49?GqZ[ ]Lw; G&Y#0K'8Pov:ZςݜQlP/Kmh܁۸L$BS;g9=ΨNKnqz$FQ U'3c*1uCK~ p W04qImpx'HtF\+gޕlqmA6U )MkusUFc> y *W\)^d\Sj)ddC*kETY,qGCTkN3|ЁW=Zu` rDڵ=mZ*o[Fzf[b= w e;%2DZjAŽa093B*7.N!|*m"yGŷ:VxTіfcvR;,oMakܚԳQhtу4,4k:R842BO.Y@jP co۟ 062ǏHO*EEj6%8 &%Ur|L;vŸ 9&SKT^HQe^"`U/lzd">n e AJpkS`Kx-tc 'R9`{?l<^#b# x2FXX=U .*/" )'H Ĥ$)@h$@8<q81=OP燜| ӈ6Ldzi&DrlaijKƚuZL26I,+Kxr6]׬q^lԆ ?ۇeu^k"mѐ Ur-/Zw5 XOmQ)Esz{8JѐF' FM1VƴWL,}W!ɴ8(MVЋqh|K~lQE͘9bb*\M;e=״&-؇>M{t37ZȴIm'D/hƈ=DSWø0p$j1W׃l lLi1àAteG,tkmxfgv'L|>XHزؗH<(`몵!nugkRX0v2`'v)/sqKK l`jZ@n:x %|Tڧ=_ʤ)WXzB? DT AЙܛJ?1O8u;΃?|yX{ObYhashrat-1.6.1/.git/objects/b4/0000755000175000017550000000000012470737042016527 5ustar metacosm89metacosm89hashrat-1.6.1/.git/objects/b4/679f969b18a1cdcef4448d47a6c513c1c8d73d0000444000175000017550000000111712470737042023764 0ustar metacosm89metacosm89xk[@5bjvq E^(Cw߁ ^ps~3gLo:Mͮ1@sFM$ik5O,F`W @S^E$i*%)?D(.JET*+XE"оBPx2 $2R,X`R*eEvjMs+JMV]i!g b^K"*4=-Gd{ EAU4*2 Hp7r66G'~& bc7-;K(JrIVTkfM|x=Yp4L_fWbaw,h.N7s-wQqyp(O%AY:&i:kt™xo~댤[@p{gg(}v98<:>9=lvh\~;UF.vmm{z[ȮMrFwsⱃV"r{t _]lr̮z{Л2fcch 7*hXKQ"dx4CӾ|s Y]%{0}ēhashrat-1.6.1/.git/objects/e8/0000755000175000017550000000000012470737042016536 5ustar metacosm89metacosm89hashrat-1.6.1/.git/objects/e8/10f03137f7b10be95f3f63fed1f86d77f1d3850000444000175000017550000000053512470737042023704 0ustar metacosm89metacosm89xRJ@#y6Tm_*B J RM̆F-;IlevgΜsm0OO9sP~t4.75sajZ nbiED߿k9sI!$\+n|ØyR|W oUPbca[DzxQUڡ$71Aa0(C*xʶ at6lV@E(uX G3*HҰ\KZbU57>Dh>~K |]\9Bd㻺mb۪WDJ? 9-{e.O3y:0ݻ]\G\Ŏp so>QjɅfݠe ]okmЀ5$-h򴮙z$vBU>m-šJ&:$`K\ .yyMnƻO(B7PQDFU)$/d40yVp)Ju2Z 8JΙ1] x5;2 P5N qkטx;8M8"@_Q>UBکrL5fʢ@MT~T!1JkP% 4| ۾FviÃhMB&,@G eX^I+qu=6Ք5ďk!ƹİV˾zXGEHj < *H"vIt|2HXIoTKKܦNA<|Nhɭ+YBCht{/nmSFDb%ڒ RrR Uʛ:DFIu瘤q:G5R ?0$=~Q;Em^EdnFH| [)9j]ws ~k)ϼs6ܒ(@sƄ\%˲zs7?As޾ۥ$c=FM-툷miAQzu+km8r~DחtPX48C"XE5)<הtyX.BNZ`@w|i4vmhSCRvJ 4Hk՞盋 v9d[':fS;'5}UTGjDDm eݢ>|9[i7$HV.#HT YD:,}6 K= c;YzD_H>4G8^Qʏm47HkT$ NE< (i z'$=w ,J39-KYQT)|[%E`mEdy,dZL̓oK")r`R|[̳ԧ{`ٚIGa'rU.Ws#=I`8x|;?[J‹"x䏬9az*1ʝޝP&XE"RN @$(}/ R(q_%DL6*aYc &ˏW *6Ia&`rؓY:-MQs?HQ0`3c?IFQڔ>;n2 BSU0BH9&d~Pv#22PVb(|IܘɊ*"^O\%sEMHo/y P""N!P]'([XxwB)[HQI>;7Rfy憜V}XuB)R!A>`rQO⸈sNe )+=!DmʅTePE(z \W,Uz \!**QD r,>; _DPN08LUOeWȐAH9LePʦWE0w4%G _/(J6i϶hashrat-1.6.1/.git/objects/78/0000755000175000017550000000000012470737042016460 5ustar metacosm89metacosm89hashrat-1.6.1/.git/objects/78/3d5f8f8d16a5ccb7bd7c3bf8888efc50f3ca8d0000444000175000017550000000325412470737042024303 0ustar metacosm89metacosm89xX[OHWLjqVZ ysI@YZuh'{Lt/ ڗ}Aw.X^7_EH=I"n=Д\Xf\/uJ*)aIH9[JxݜucQ35i6[6`j&q$X֍9L&tDl$dTwg ?V8 X*GCv/mY~0C,Y(M5O˲@c4vNܩ7vAv]wFbb,e¸*'hKrEcFd.v! kRVr TC1 yV t0-f ɘ^dB"Q0dJj+011!)KCJĨwȫ"  h iPNS ZJ%O)k1v%Adj=rF,˜zo<>>EDK"RG^E|.۫|oxR1 ouPaŬ@k2Xn_G%=axߛft+'7 ϺA e%UA\hw MA}0Aw+r7:b͟{ـI~5nwd6Esu4U;$vajj2ͷ, 0`LQɿ̸f|&ZhFlr`z#RQg޺7cq9d:Z*ft\g9|qc^7*%CN5+VZ{x jTjj>l$1EO5.X_8 0&LW_3 PBfMz\V?]ϙfO<0zgJO18_Kw<:"#3XXޢ.1 MIպ- ^=2>l be~)3vo\ hashrat-1.6.1/.git/objects/24/0000755000175000017550000000000012470737043016450 5ustar metacosm89metacosm89hashrat-1.6.1/.git/objects/24/387048105b51dbc91605de29782ac128867c480000444000175000017550000000507612470737043023242 0ustar metacosm89metacosm89xuycٵ}<ߏAY .o#kB iTU`TP+i(BpT½\BFHjRTKU;TS~  U1^{GyOc/QS:xO@<6z,H&ȩ $xpHP`tv?vɗ\]Xu CP 3\RyI>'A)cNQBOO?Ywbm [R1]3i6â;Ea}O֔F,-P_^h\l !t&cF$0ijf ΆMO0Sm!pLSW+"Ɂ<ɨ9LdO%c7%(.$gх0Fuz>;v ?i0:s 2d3DS3.%{ֿJWo_? }X~ܨL'|h-0eyq]Af5wG`{N:|B'R\{~7*-M&X <6:!ZbٮllKhc?ɋ$e޺<ҙ4>v*4O}ƪwV*KVwre` cXtdz%-qO|c"OGRVd5kf_T V 9_yY(ggW5 ,:oGA>um |'*Qeg5eEg^1YыFV@gp}b+axeeE1 jg8sxҺ4]L4~IW?Z<68AFR0*F6X6~Kj niFIˁTT8AT c)*Xic=-a'פc 4f!yeԑH gox{XHo5S/Le]߰{Lcq͠@*(LğR~F;Jq]ky'AhL[N#I!)&NO.Unڪ- `b>|ƀ[ix*LD2' 䞺s}3i@Q gwN e/@70HH_(֝$藴,29[|70MBі`2`d;sN55e 4/яˍ}?)O$I+HO2>XvPA Bc4ԑzCc]f^"t7Jm?d7(A>u*2!/|iyN裆(MlT;;^ NH9>D6U塯5SKҵudK5L~+ *UyBQ_LнʕjT@L&g;ajXV[3#0IǸY}5&޼J;k|7"* "@f,zR3MK`Vƅu?[Mq1ΞfC.Fih$Qt/ YI`.n2*yP 󊀙x2Y'TZM;Ω[\07;!/苬U5"3R-n!E*BCPEN;yӑFhs^. `ЗEF id ?73L0T3m+0d2j02u6  }BXLSu"jx['MhPEޙ/66@@qN|kEmŴ%˧E%{tX٤|: 745 .ְDfd=0cM[d:7XER4gмT> 3nf^pn?t@hashrat-1.6.1/.git/objects/f2/0000755000175000017550000000000012470737043016532 5ustar metacosm89metacosm89hashrat-1.6.1/.git/objects/f2/8af2754bc6ce5efdf12fc6f1c9f0a0809ee0bb0000444000175000017550000000200612470737043024321 0ustar metacosm89metacosm89x+)JMU0423e040031Q qaПSBW7e A=Bx:92LY"LBToiŒݧ>*MNMIcXje'cqeTY+)M:jW(rY݁&Ld Wx=nFtO! 77{ϸk+JM^d&gf$g :zZZqN$ S]Cv;>3s^f2:sSSdyz ?H՚tn~U}3DX^ :aY]pֵ>IXSyLdZ_Iy~Hi'?o5zkgHYUMIy:[ȸP/*2ktϽ!B&U4Ԣ̼Q%*?SlOxPJ", 3ENrOʞi/omÒ*%Ǣ=C<d/ -e(3$1'G^Sn=ri扴kU?xr2BSJstXxD>)zOBF[ԴLP[zf}>ꅩHMN&oPxZZ^?5 ɓԶIZLPbg%% 6\\tGҼCLУMT$ݺ{ζZ0o=(J2v/iB6 98N 8hashrat-1.6.1/.git/objects/b8/0000755000175000017550000000000012470740535016534 5ustar metacosm89metacosm89hashrat-1.6.1/.git/objects/b8/c7bd1afc765c882056070b47dcd85450d9b3110000444000175000017550000001663612470740535023616 0ustar metacosm89metacosm89x͜ksǕ++:2E,;ZkDf)KPǕ`LB*?~t̀El%ӗӧ=gt=˯?yU|84-w͓rW6l{tptvxag"mꎓiVt-r7YJJ9uUr:)k/ʌCVk]VqqB,WH?-g(uy%p[E\qG<_Q6aƊ{:m$lV?Xt*8=tк;)ٝ^[Uh .WKm_7{&o9xY1[9:>B~ lj1v/F%3.\yݦczypc.[NU$L%=2oG!Y{m +=2ޓ@A6ٮ΅Vki HJz8RCwO\ZCdqs\;oڤ8|C~NhQ+YblMLɰ^y*f(Fws]>C9"̏b (#ՔgsS}dƜ}_\/KF'Y퍞m=#q>O67zdRbE2$|,uO;|_{޵-%aձ{cCU ~/5:DzzOM<=M-^> +f7v==nXж'V>dR:T+F !Bq.F\E܃Ux~od &txs*UP8SwtaDܥ2vͲ߳ЉwTxYЌ}G F,4/fkoy˛QUsSoTS]59]zh)e $U$7q#d!-0y=:: \BUmhZ1ۜ{!6F9✜'D$n·piAvW$*>6}G ٹE`z'kN"[V^YW{MJpm-e+}6iL{'~}2^S|EDx8}p C˫|ueUd:+8iOttv߁IȿA̓\lO8r"v]ߘ  *913k\YehD!AddXS+#f2(EۍE[t۬ ?߹3pw}-Q5SfbS6(bm=w7V@؅#],!(ND*2! =SybVP_6dm.1HՅuw6+rIYyD{R8k)ZȮ{yP\Hh +B!qwoxsh@n xE2I@Ҭo DGv gxGYB~߬ 0/_6xFzw\y߅dYdRw+M\4p0p~y쭛xXc6Km}M?Vh 6;I(FK}>0)rKS$ޠ֛3)HB̩ؖ|#ڤQ.=g=vT敢NM{ã C-ZJF^;098sIi&;Oe$SkAH3 䊨*^]:|&T0mdAY#bfv$Gܧ\A)Mժj=`R@$( y%+]^%SDwj@aD wi[d2$իYQ)yQZ:uבJ"eؕ@H0J) 4*w\Jc/;io(%(N(mѨGPwa\<=Nhcx 9?ja3G؀0#~~MC謡ϰ)]@zk$]tm:z& 4YvDU xKE$#1#f_[vFRNWrKu h\ i}b}ȩi3Zt+ቧIXTFfA:hPM,}B<.Y|@ڜ'th<{}~/rgю㏩RH/#Y}Wv(Hkho?QblΤ@X/NbrFJ|t_]r7Upqxύ|I Q&R1f"t0!!:,% g͚ߋг62u2 CE5Y- uPAv}v=rcwxv<>]_8v_BО:LsP*z ca$cB> K#*M{G)IN؄0qZj0Q-JuJX(!B>RP>sV*K j穞QN/[J>ǐr*cU#~Ë)fؒ:[苸M3!UXEٽ |^ Zu46)\a?Tz6 :3=U?>tzj>&i܈ّv<<_Gp-ZXtG$vwĴ,|1SaV?uZ"ceXO1]Moq^L髣<Pi=d6ɨ<K[ :N.`~pؔ|+4$% ּp/e{XK:] =.]k#G){[m)ea =7ȵ~#o"RE.%wIEsGsh mM'1!\* H޳gό_42%%E`3kB6ye吾2o>Ѡy?Od8W/Z뿤-VT'ֱ;4j sˋ`Nm'F}åYJηѺ9_[ߴtŝ 3hIPreWck !b@>f_Uc_f$P)W'5K ϴj~  $8F'2SAqE;~95HUAm+wpl7^Y ?hXPQ}Ƚɮ)EZ863ĞU:((&d) )k`C[Z^JY4v{܉t6; FծJddOv=4;K5e-zTK2ݴGnuF0hĝr֩9u~MFu 6O72ڹT!<%\T t(D1te\AI-7 2u>Q [vO Xyl_Bm.(K/ >ҰUɎthcʬǃiVYЕ!r=iW}QCgjI{&&|Qo-e꽃Кqta&r>uvQۉoV7c$t(XF_.2`)o^ZtU0q"2:)Z`+8_V\]y%z>.:e4Ϥ$HPӴi΁8|*}Q(8S uo#dC*zfrҰ%S$!YPl3,ˊ6፪@jlg¾Er'"&yX^5ʰvӼb6q-b OJ3,tpJ@yF&B(G*X+OvϨ BD D9M!,衒?Baۖ|K-TMU#_ >iuRdiyzEBVz|0_od>JD Ga(3vOfY@Bv/BsXjLn hC1$=M/HVQsw,M_Ԡ ;~$.≝u{ 6T7 0xSߣ XV5[;~\+bcyH譚ǘuBh-xpU(44sFM53N\=k9.3.u"顏|6pmf8 ɛ)<*`-\[d ]n:j9 d\TXQ y+ojM 43ۓʅ*ӳ $[Lĉ}V͝'͋KѮ?!mn/{oT;K@s;h&܇ *[փ^*M]E owe 4cDR*CRuDO!zÓ rZ0hvUWl 5KPv}ksovퟄ_.L͹^wUf>{Ȁ*,7 +M5{/S\TӵW8j&'^ϯs֍٭]X<B8K!tz!UCA=&f@pe8(GDj /1!/Ӏ:o`vf*'SBJ9XT3zcU.q<Ξ# ̰^ Ack.;bmFсt: G 2˻(q[îgռR%[ ղ ;_Tl,SRx“(5R:.-i_y( CXAyL[NEq'2Ό /db֌-9_xc֛˷8 X _{_W9&Lb47xtB>omQC(r%ǫc:_.͍o:/O|OK_蔪%WGyF{ s ݔ:&a燯"&֢Q>VXNTɁuC) b[06_KY"n2 Al=a&wBdaÃv`l%$m^rB+e;Cgf@1yvο`ch#:JG9o?@>xõվSm%z;Xue֘ĖZ&kqb*8 F:,q7[`g‰=X3i&}5/TC@u!> |I%'=}[Uj,-v^eP X+m(~΁B`nq11:mt)B-=&rW ~qe!IȤћGȠ Fڱ\KH4dg Re^7#.E>ϭ)[|%;PbpPyyWdpo 6V^xYjm3N/E{[d5(60sx+77vR4ȊFLmd%bժA`EEJԽyHwR>I48NҌ:jtB[=CI k&XL%bʃK*dI08L$#h&κ %l'L0$IBJxX)>qMLY58QJQ#TDJ*x-II|╤JYlK1s^[n%`*eN)tV`#S)< k!X`GyޏR1;(m #X`c9>D )q*LJ) 6NZ, '(^؄4`aBȤT$`<@$M4]G)LN&eL-MRm6&YaXNf:xY5+A"g*uB`cpTgHp$*{pK*tBX<2(M'258%0cmȗL5/ a8kd o]HKSGӔN#^HBJ8( R&Nk^k`Nba (@-(CոBCpO WRUbv:/:܏<9ڥA 3@[sJs A> >&3K6ue^D#!WBY?ySS%ukhsW 𻙬P=5G m4mM`H1Kc0n! O`47[`3`}@%0 HH ?5-uZG-Ta'mХj)J<'@xӃx/Jxt-s\Md[@p@~騾w]w??lqO7̓:Go.Ϋۛ7ʷܿΒQt"+=`- Gw>hgǗ凶z>ɒ7>8j"9ɏ޾ޱoؒɯ]sr7Ky{EaAӬ{6,ˮ;5v?qԝWs$fٓ_]hkg{*pEݳx."*]5v1PIoʛ>I:!BQz g5$?޾IQrG 6SJd+˖cl_41ߊ9yM2l8~XX S(LnlXS&4 YlJrw] H{e a,q\KE!"TH1 abi%|5Wq:V"@Yzk%.iK=0Fn2;YU~?_=ot[_)^f_~/>_ $cݭ}8¯,>*Noah/eP@Ѥ)B.fKgmuTމ ?G!A+;@pa{2~GRԫ=4wi"YNy2ܸ{7,LD1lmDT3HOu>$ub`뭫]^xp{Πfv^#q{: L;a?wT|Z*T]NJ %3rvru\%reV(yYmÓIP<*_~NTMB冺FC7T該Yvެ SvuOt՝(m߾*tԭ6TѰ- UmYUzv| RNAx^*,3", ~ȢPg9qUx|qPR/J~.]{g0Dd&1ϪVC?szq|U2ܯ&28:):3GNޫ0n?}y?RZT8QϫRi;~#sC,^O=܌W u/1[/02q0b?G]m'3Ծ" @wfv@}{x04DK0+i3l5~ȹ8:mLz%Z!e9` w6oowmVuL`ueÐc4ORrVU^LLrou6/3[߻aS|MhpGV" +G9չ N{ǃTD ܰzuus֍<7w8KM91 Ar-йѐ 97^@ܐ/s"A::8|j 4x?8@y@asc.&0PyP zU*.Ģ"T_PFC>M>y>[]*.-e^(!Ϸ?e}^`>j:;dfeF0@vjJo6&+OB^ E]E?GR{_kw_Aܜ~ ;΢?vݛPB. |\rU52lKSN10)u:w †MQJhSO*[9,:s`9"^MvyUUJWb".> A ЫYm ֝z[7`ׂ,V{01ë㿰R|.&iGrezeiO26:M'Txe gö ZFNh~ 5qrGL4A/θ3س*ץGFԽIɑ`h߿[7ba8z4o`p\kzp$` ac aVׄbac`!ՠ'Beȫô `xͱT椉%_(֮ #+#_ލ~n樛DQ7jgKOzWmYtaMƏzˍT|W(!5c!-|1H_5@A'3 !l)MN1Or| ȏyx*=Χ z$dȱ0 WblC:Mϸ;{ʅǧ1,}脄= I~k%s _m«TN5"~5Z*y.XoEQtXad-%6bD܈Du s%վuOF`C>@_ hwد *cahAn5-dSF%`뉸 7˰~րOI]DgGn 4'"b 6^Az"XLJŽсi{ލZ}b%"mܜ')6$:#L$ڷ? ٙp ƁlaӋ~0;Wsby&?16<\{;'OmXQ/V CDCiNW-D5IfayK*&ZB^SX $3z=S|ǹiS|ƨN\;MϧƘ]sW8?g?`{?wۋzR`>p_ۥGd,-JWgZǢ}P*OAЏJxM@8?/U.ץ˃ P-s"׸aC/?~}8Xbk;fe,TW^oG "JO%TX,W],Uz%R?lz]E%|]Ulo1]; $׍ЄЙb<%f5hLXPQDRR- .?bw&R f'MwV+RBxզ̭Lȭ^1ʕ؁Qfz|з{6`܈.,HXcr߹{+_?D"A0?Eʧ&wcD8TkZ8 Hzl5K@?xHT;akL|LE^Ӳ$]N.^zVr9[ӉrL O*̆*#T+ooҮvٽY`2Gy9bc>;Onw0^!+H׃PKo`ܘfX%@ޚ]CJHs:HFy3<2I$IgY=PXQ%f\hĂ6_p%!x\f>j¹C`{C$# tA /D")OsˣzQ3_dOdXi,~|*#U&n^ XXli9A/X-$R3-:*sARq̓0W3Ȥr M>nظvݐVʔHr&(?F0e{6N`8>*S%jLG?g7 -^ڔ<%rX3e3(4_'T(2W\ FsTOY, bѱr\!~a/ep|wkE9i!ƴ/0i!xƯ!XZҺcp6 Dv35 XKn~e* JDYqŚQPaKvS^i=OW2("pZ(ǡtJKv39ыA]-v]TZ:4*zB.d0yϺsyT; n8 oxpv4P; jrT>S2_ZИ}mqĺԑnNVUm-tQoP~?F (kǻPC.Gj8 ]F51 f<6qT*` pS@ sY۝#C*)jB!{O<rl菦<>4t>ir\}| Xr )|Τ|(ΫM;I#{-M;*xN m)RxbIu2u.hhh̋f5f(?8V xV*M]w2{ e!0ϫ ̕3T0S Tx86|lL*6K{4k芘5/ Tz좝 ŧ>Sݕ`M|bZpc"hȅZ{Y6Q`3l0!R.P*:IrC*5 0Ơyk4 =($&fNS Ix0Qf K͞(z 0!f Ū@2]xvp<2¦$ϴa*S[R~`L2wx!x@S ˦\u\|9eTrx!(|Wt}D 41ܩq K(J] ! x cR uahDpj^I1B6a0Gѳ8Jv?Њ֭KUCO:C{D zĔuHB+pVO&P$I20m%kc#6:5 MM% ) /Dqr8@ph`5OA3.!xDEʍa+qrљ2̊aE - 4#<_梞pM腁BprFyc')hs8Cټʜ>#x#e !j9*8_*Wo&[oD(A04t2!9V<9 PI5Dn';ek3s {V8s@[ oDj00q%2($6DC.c]OO m6N _.I($I*|t]RGӆ]n(5BW-3C6Px+5>p / M5OF4PLYDr3yAI,q"Ɖs{"JKPk*($", PAZiAWph%nXNCVagȍqрUZO!H) Bl/+`cZd(͙NH*}+௣Z\wa ȁ*MLWh( A{`K$E1V6鳿ajfD 19 KUhM=v0C]gnu16e ."A~ )Z'I-*bp򀣝#]P"2(VklAg#IbW.zDL)e sVl'-wv}>rH|ݏFcpqk Jt+S'"m,h}:L7p5=a&-dĺfo:avI`+N$,Qrm tA|ds,bw!# M7قteGX~!U6p3{H+ ڂ9d54@t6ek57c jX0ŗ#!ƫtYG ɒoX*MNMIcXje'cqeTY+Î{t(s߹ps TErz^2C+v]<7fx#IAÛӽg\~ǵi&/a 2Ru33yL=yZYg?P^̈́.}9/wRHpFPB2< 3&Njf.U[<@+=fV~nnb^nNf^nbQz1?ӯ>h̢|e_T vrw`xW;+*FR4qZz6g<kkAU`r9ހ3ǶRTҢTY…Ek`ߛpi{ӷs;;y:Pl[jJ/[Pd0\#cs{XR3n]YIfz^f^:,wrW߮~@}w(`pE={ۭ] /9W4O%cFN2n8 +ڄ3soIbx6 "=(3hk@T,R;+( mܓg[3 Aɱ(Dϐ!pMFV룧yoˁ*+.I[tϺ\jy"mZ?41̤Դ]#i*сOӬ:V5-71f*l{ŖپGGߟϧza*Rs^W8'OfսkPVlwNus::.mws ̴bpKq+eD>̛-kRt~?YIjqI1ݑ4og6S>hsn%%E@}rmV79[gk ˦nڷB;q.hashrat-1.6.1/.git/objects/1a/0000755000175000017550000000000012470740535016524 5ustar metacosm89metacosm89hashrat-1.6.1/.git/objects/1a/9b3bf140291cc045590ea91f6c2c73cfbb0bc60000444000175000017550000000026412470740535024000 0ustar metacosm89metacosm89xMn0F)f)Ur^aBcF~3۽oTVwU0*)Z?Ѩz3,=GATv]+LC&KƖ):(#5VvtgQ^gOn{Rǜiy]wbBCM?ֳEu>/ RVhashrat-1.6.1/.git/objects/3c/0000755000175000017550000000000012470740762016532 5ustar metacosm89metacosm89hashrat-1.6.1/.git/objects/3c/a646590e1ff51b4298173816cdcf5dc0bc3a690000444000175000017550000000205212470740762023667 0ustar metacosm89metacosm89xU[oF+J&0(Q {za7QgsK"Ł|;9rL_@_[3⇺ٸNV.ـ[ݱs8/A7Fmn.:^љD~q@eSl[f9~ ӞA`CQvlXl– TmJ[)4=zb.L>#F6at5&,AuuIkd Mbٲf*z7PE[:,>m1$a!z 0&\-b2dD/=\I6m9ڬ UuNrk/QVN.SYJ0g*MNMIcXje'cqeTY+Î{t(s߹ps TErz^2C+v]<7fx#IAÛӽg\~ǵi&/a 2Ru33yL=yZYg?P^̈́.}9/wRHpFPB2< 3&Njf.U[<@+=fV~nnb^nNf^nbQz1?ӯ>h̢|e_T vrw`xW;+*FR4qZz6g<kkAU`-O q c$?/-3(|pe皹_>> "d>_ꞹ~\j{ ofGe5~m~ҺV#% WX\s{bLkDV4KշdgGt*>~], 3,\mQuvkºKλjSX}en"96L"dR+MCHO-*(+eZ"y3 J(¢0A[z-b BPr,J,3d,\SѼG-r2Ksrti=ݳ.jH۸VÏ7M @!'3)854GhE@tb4+jx@MM ^gﭱ'^D`W>ɓ_uߚl0e0!uSfݜKvݜ3RJ3ѭ=&OPs@ ɓԶIZLPbg%% 6\\tGҼCLУMT$ݺ{ζZ0o=(J2v/iB6 98N `8hashrat-1.6.1/.git/objects/3b/0000755000175000017550000000000012470741010016514 5ustar metacosm89metacosm89hashrat-1.6.1/.git/objects/3b/7247e9a6955a7243205f55b642323844d023680000444000175000017550000000023612470741010023056 0ustar metacosm89metacosm89x D+T#@)v/\! 4833S1SlIG̠e- ֑/lN)VR)k kɷ߮"xmٓ~=U,z{ DVdFQd&M|'C!bm2dO S0p>:??ub~~@M^G-TGN}"5?(&v=]_rV}O6Xξs?jNJ4ntymه^rVW7Ȥ'}6E7)+|wTNG2G9o}3AѿQIMLv7emcl:zogcybejF]'hvpAf˫De.W[@RYY'N 9XFy fh7}{M`K-#pt7vztqO_\_|wÀx3 N,S?x_~M޵Ϻ'/m>_|9;Z_*+^< D0aBvݪO\(5HS6a,͚z=G[ O3!k2 u}[N@ 'Lsx,0 c$vp E9)֐8G_xJ|QGU\nk-[ yq ztjx~+η0$ 4\"JJ`aT$HhBEfVNX|}ob%X]g坒T״.]7í,R2^U|!GNw{/u/ WHگvAn>LVC;*aheP@7)A.KuuTލ ?C!A+;@pen>qY)U|+|>,"n\սgcut#b"*CAEPo8fzgJw3;oGCZ]o)==,Ln֪f_Ѷchashrat-1.6.1/.git/objects/53/0000755000175000017550000000000012471370607016452 5ustar metacosm89metacosm89hashrat-1.6.1/.git/objects/53/ef3d7e912a5e72202e18a3b9e9b89cb256a2bf0000444000175000017550000000617312471370607023756 0ustar metacosm89metacosm89xZsHWtX6u\8JQ!)XI{7dfz===ݜ9ks{qC1Us7[7GFLF^%7Ik&srbZNj],)-K(pS,81BcS1OS+c9?tO[/)SE@*5OJmoMhve-Ŀ ڶ@;{ \ZٚY;<9?"8eUOFh?El\dP4 =if$A/'_p>)5 gx9a)V"X/\K|￈< /,~r XHn,=K'<߮7% Y/qy}@dqX*Dx?5|_R Wb$ :(Y _࡚60 s='DnZNy.H;:lY=T%:CwT NJ<_QiZklP"Oݵ.!T Ru@|?r>B6] 1g/Вh7ƙ,m<ِmi}(#ۿ2y@#>YTV: 6y t,21SkyE>gs}bu2#_i5*24_ZuۛU7+Nhpw8LNS7Nm^y7ڴ񅦚r yK.R4`*'(gȅYaVBC]8d2,fV r;@s*ȀYh7* ^t)R27c4[*}/bAKthâRt7fxG)޴"Fڃcf,Zbv ~4!C4hGcJ99 r#J{VkfX#BuPƎlxyϧ憷1ug`Ct4s<3DS?A{ J"u!8PT[Τj~N* +QY k8M)t &O?B[۠žVQ{yTKnv61 =^"bPϪ`ƒSlsAJdΣ|V/`t2 hashrat-1.6.1/.git/objects/6a/0000755000175000017550000000000012471370607016531 5ustar metacosm89metacosm89hashrat-1.6.1/.git/objects/6a/830e2c09f1912ecc95128d704a0f9e2d800d520000444000175000017550000002151412471370607023516 0ustar metacosm89metacosm89x\msȑ; Smr)Y%(\T J<U~3M궼6{7p5ϯo~/|Oejx~]=w|,?-7oqYmq_QUVNgwq{:I?.O_'6͊b/o˼?{6]l~˥zƳjr v-?Dy :&ʮ#<_=YT<.] yɓ6nǣ|2GP+m82R^)MLm R$p_f,oʤ&㔑jiie9Ժ M>Oiኴ,k˧S,=g弃g%$yp,bnxtyzv.'۞[ 2'@k.!RX<AeHj| TUEnV@aIu_& DNl@wt|Uܸ6~QԄ{vhYqz'2#~wa \GGs)ϕU ^ hl ՟VxVmwq3+:*X@ 7nҌs:&dz< 7 5'ݒXƸ.fb{Ҍ5OH:%!$-ρPE sJNqBw8H`Su`x 8kqv*;cxnKY'|b˳Uis7N7憭gri1p^uOl4XwH} j! ? )Pv ѥ*ua.xR륷vE nT#!H 7M~7Ҫ /o_9  3";5 Uot8Gg''gN)ywC bl m_s(vekʭVZ}jqH奰+J`[؟CWS tؠ:۱䫬0XgjkGCsiPpb=>z(ṇ5`:L<.z8@,7̾<891֧FǺ:*Bk7NۖǦhasIOl8;,:it{XŃ1"% t83f1 tZ.qq3BU!y@A>IG0bħ&0ma?LZ*Ӆ쉘lޭ|n($-jݲ oxA@ 9-7Cpa'85N!LlƛlujQ` s]+EGgN"Gٮ;⎌k^b. 0Ye:K'p` Y.m>p"á6iVnvdmPNU/lQkeUSE16_ 8V䤢'XStpgP@‚uZOr4*mдP86[czh~4_ӆ9L8ϊRjy;p$_?UNP)Ih1-18%A=w{9M;y*֜ȶRYah@"@!Gh,t~Nm&OT|??ň݃?=&*G+P fUnO~Jgzw, QWgĞbzU` r*'ڽأ(ubrOpBc&V=۔r8e.v-Y0S`^5O1}_Dl sLSot8!^ߺϮ(tA?X*)WF jrݼ?$@jXlHIp|zo*yk)6uWp >BF`>"u (ӬzYך*P\Qʒ`eHHdǡ' b4˘1С),,驃`!isKH̫:[bRWW;&"s^14{[ gzRҕZ_haaipuxGv{|A2w3"Zΐn,,"iFEg6LA $b ;qЌIt"S&YK(`皳 5u !7|unTC'I?YBމpLH$J\($6"̪ #Y;̨]T婷B_рzP*|RQ{8O3 [0z1Za$C&6|nbTݎH0i+s|,jZ` T`-h]ݱ^xu)Dma+"Xf@I7}œ9-]B-$bOxCF~ɳhg\EVƕ ] R2F} PF#}]g4` ~mJ4HqB<*#!0ZaNb!Sx=4pTGz-j$Zc2uf M̑ wEClΞH֛YVWO~5w /'lyy%iuYS>H`ZYց4VGHLmj&v\ٕ/ [(UٽRaT %[RPdb"/ځ%tc<ې4:2XH/70ؖ|^7ogT3h7Xk#؆Զ3*M fuT65݂GT`FnBS@КuM+ېWB`Y۬U`&0i;*0 މbGGݲ-s4G=SlK[?`*j{%8!j"`82ec|w$]´$rB}Ma;҆B%ɼM^T(=C_idi4 si:b / m̀Xd5ށ|21TH;Ιxq]$'G+-&͚0jt* ]ɽYg_I U2) L9hd*epWxc(.L&uHpm] ,n͘„eTߔ:e,6*ªZtvJSb r Y 8agcByֻim)3&JX\~'JBd_ XxnE'K d] Yf9p_iA u MDa'OZ\!;st1Qf 50# &ޙ>"E.Cb0h2u6Ɛk}j=|ұ2Zdh5ɭ2Ze(+P^^d`:%VzBpiQ9+HBؤ0;DD0(#qkYo rK|ntk7| 9ĠHk}@F{iA$1,9ߵSh6Js&j[M FNi2)jL1W g#}@|֒cjY&hQ\yO'xbpt|27ó6_r(@K7A UE3aƒeh _ocpŭv>dzW7#*Tg2ƌB;!yP4")4(:iդQ|Ŏ˰NF97$\oKrl̙ƌ:@g]v5,&_uT9 c ߡ/h-Sj\O<ΘBԣ!o'#^!gMC%f^ )q9Ye&_Um(]Ɯ4XS cEtr<Mç g-v>)5@^lH LFk%Ë$RuKy5ȯhO6 Ha B oh_ 5ϴ#QwL&В&?}=D'SD Yk<1iMi*]w.V*BI|\NM ?پ ; BB9KZfp=$Y:G~ tx*'*ed'{JM^8Q[K%S]RuuAi5,ps,UriS5%_+ &pA/9\JVaV4F\?NAQHARTkic ^Owr³zO< ˄oy\̭aѓl׮MQh)"uh69i ]tE\>O}^L-6 2܏ۻi-!(^;rXkV/ O.A^wvIH+z_pM CP_Qtn[R)f!c_TW0l&:D;}1I}qϜ5R(jNH/>xFP4JOxl TEbm_L@5i\*LT}~YLM@ie#=M˝wnK{KCXo3#ّ Ѭ*s ը"-yA?Mmyf tC\Y_*[2^~dFkr9LhH9mb.Li%wu9.uM7AL-B5&8NƟCw"O2΢xmL'&@޷sq`tg`^5R7r_/&aSdb#.*mˋ LX@J/[jlSVWzPRBhdP(>@n@WRF4O&xU[i[~M+YAbK@q PlJ7P|} M.($ ޑ7#D5!*P(^'`,F(3/=_DpճBBu"2$6C^O;oSbXs"xD&XqLm_(l q0XoU"DOzڴU1kG5@1%6/1DOxjM'`W<K}WFSVNE@nBz%Z:tQcum|?x'Ggm/y:/q^: H1/%ީ'l6PDϖ^[K;:=vVt+VeqKϾ>zLtU JZ> >r=Z83"ɺ ? LԙhAwk(uD{eAyzGQW1U27&< l+H Bm;mͧOG":0bq$6𽱻*7ΊQ, 1QBi|!JrOX-APw Xw :6=X.Q3i1nJ1s iZ'tKF0cWACjSNgD3e(Zm[*oeo Mg):bsaHxPkG_Eݠj+L+J+[ېWgxT$IPq[uU&EX{{0ÙQ;5}'^[G/-C42DV#f$;0(ɠTe~lb|DK14D!CY@, Q3Az ikoKB?u;Lq,|U@C䀿OY!<& NhZ{bmW`H7qc,D6D~1JDz۴ #TIt%CrN3֦嫃?Y͢o`ogıw%6޵}kbnu9XD>(8-`)H$yWc#Iu&װeM 4F^3[\T;2Lmy$9 4|5:su;(noQZM 6J'/4]P)^":̛X /'6 *\'29.M?>R X> k'鋨@շd8w}@Ljѻ\D>$ ;Q@BNhh/ӒۮCER %t#~w;aM%AfvS1D_>AuYc B|BQn`$_ ~J dяd vl' Y^J17݃$$~sx"CTT5:%`.1*'$X4ޤzD|P~PE_h摔 &0x2|c`}mE>c" :lf{Le۲,Gx _yC=x|OYcc%hȲQ=9|^>RݱB|lM[3x A93>JS,.|G2$, Xypխl`RY~ܭXzzNj'5bOMG.Cꏀs KYr2zVcH|V|z-B{2ao|cw.TֈC*2bd6Eݕ]Rstlٗ3.F% q|5A$/Kq7QU&eWe!Zo?G2:PKh88d5dתG~ ;yر֩!»r {*mBK'"}W)%d!8+bX4y BĸC et+4FT41ITs͹ʌ9?}2 (`Lh:a"Jp}^نbd1!\ˡU |qg6uvkij! x*>d yk;ot#tAuWK ,Sm)}j|JL |*w*2n(#)?7.o;n~fgka0(VonjFB>R{Qbg4Rdl驐+SOFW_BC4|S\7'vD|!" LihZ7gy%ǡQX*Fg~fD2#J=I>l6bh|x3u^ sD9w/JA-73A Eis9IIg>%.گ1SL܍VA"4607:s 2d3D6;Sܴ~D7CNUʬ2K!BRhGFtWgW*CԸ|u2di1-WySJ(A  V-LKJB5׍ UT'ݣI9mLeiYh g~Wֿ&yU Mœ@D*6ʒ&KGqѧbj%+ tIše3/*ˆ aC&a^Jع'UM#K[A4:(N=j6wӨ3`r=gcѸ(+ `_d/exuuY1 jg{xtZsGM4ONu5 n6ʿ~$kpzT&R(*FXִZ=2W3!T07);0VFXWSkĉU)Dȩ=ͣEDzNYxw|(u$R@$lGYGsxkXHm5C~Ϲnpˠ@*R+L$TwUݱ/Xa`w_mZ$i:#;H}K"x|m5-=۷AKX7tbQ7F B')BT񭀀G# BG~]tMZ$EL0Vض}irLfJ{ΔO\g^+2K|;{uRPPt[snhjhTb0-:4KoR3r!IB*\,clU~ìpa bc4ԑrÓb\0kPz̛vrKac X!Gd(9)nkgdW'[E`( \a]w~nav?SiDNQu-$vW{?FRW!Bޤf%ѭ/tV@@L.#򄢞ŋ5LnӉ0vԲeG`]Kf\U8}UܮuG-VD*[Zw6kݵc.5 @3hhZA2lHULH+BA"e3d r+OQi3PѿHav B> zTvWJR>Yp2&TKvn}י FdSA>@N0"# kbF>55@y?R;u 0d25v$O>R;VteMyR)ⳍO>!-ՀFKd`TWE\з&'(ʳQIGw4ժY EyKnߥC鑅b4ȘD&rqaS';Â.o 3e2ag0'2c0$'uyJ7L%X-yoe:&,lҰ{zn 0WC"_{00i>6e.l ox0]:uه_3 pO2Go%gPI}E!]JQs:Gj>+q?4|ډm!>PL_||) XTb+NmpmsȽR퍫@dmNE. i4߬=j-iXOly_T=\';fÃf/2qhashrat-1.6.1/.git/objects/af/0000755000175000017550000000000012471370607016611 5ustar metacosm89metacosm89hashrat-1.6.1/.git/objects/af/f75258ff97f70b575b27b0b5d0ec86dee523d70000444000175000017550000000200512471370607024044 0ustar metacosm89metacosm89x+)JMU0423e040031Q qaПSBW7e A=Bx:92LY"LBToiŒݧ>*MNMIcXje'cqeTY+Î{t(s߹ps TErz^2C+v]<7fx#IAÛӽg\~ǵi&/a 2Ru33yL=yZYg?P^̈́.}9/wRHpFPB2< jzK!T).dZ ̬ļݜ̼TĢb_ }EQïƩ SLޠ9y5[ b;;pʬqnS`3\]){&gcR|"jH0}T0yrږ5^ : J$fHpq)zi7ԀĒ"[>9y{ٶU+֛-EIeS7[t!IUkhashrat-1.6.1/.git/objects/f8/0000755000175000017550000000000012471370607016540 5ustar metacosm89metacosm89hashrat-1.6.1/.git/objects/f8/aa24e42f4770bb41e5a2138cc85c7bfc52147d0000444000175000017550000000027212471370607023735 0ustar metacosm89metacosm89xAn E0#EU\W! ¸/=Cx\KzJ qkJN (q^(⌍vjuІd5$B ~"@L֛RLNٟ7uoKBuZAfΡpFԠh(ԹGGڑY ) w UmWhashrat-1.6.1/.git/objects/2e/0000755000000000000000000000000012471371755014463 5ustar rootroothashrat-1.6.1/.git/objects/2e/71f155cfc0374368adbdca539692d24d5606420000444000000000000000000000200512471371755021452 0ustar rootrootx+)JMU0423e040031Q qaПSBW7e A=Bx:92LY"LBToiŒݧ>*MNMIcXje'cqeTY+Î{t(s߹ps TErz^2C+v]<7fx#IAÛӽg\~ǵi&/a 2Ru33yL=yZYg?P^̈́.}9/wRHpFPB2< jzK!T).dZ ̬ļݜ̼TĢb_ }EQïƩ 1424182597 +0000 clone: from git://github.com/ColumPaget/Hashrat hashrat-1.6.1/.git/logs/refs/remotes/origin/master0000644000175000017550000000071612471372715022666 0ustar metacosm89metacosm89954fd2d6b2e42406b0c85f62a6f304abef64b3d3 12ae478bfa77b984f933adc1baca392b8adf6315 Colum Paget 1424212608 +0000 update by push 12ae478bfa77b984f933adc1baca392b8adf6315 f8aa24e42f4770bb41e5a2138cc85c7bfc52147d Colum Paget 1424355996 +0000 update by push f8aa24e42f4770bb41e5a2138cc85c7bfc52147d 6c294b2661552bfcaf683962c9218644d5a1f99d Colum Paget 1424356813 +0000 update by push hashrat-1.6.1/.git/logs/refs/heads/0000755000175000000000000000000012470646505016533 5ustar metacosm89roothashrat-1.6.1/.git/logs/refs/heads/master0000644000175000000000000000212612471371755017755 0ustar metacosm89root0000000000000000000000000000000000000000 954fd2d6b2e42406b0c85f62a6f304abef64b3d3 Colum Paget 1424182597 +0000 clone: from git://github.com/ColumPaget/Hashrat 954fd2d6b2e42406b0c85f62a6f304abef64b3d3 b74c3fbfc538fcf8d60a8d0d1da0e951d9aa8dec Colum Paget 1424211491 +0000 commit: MD5 fixed for 64-bit machines. New encoding schemes added b74c3fbfc538fcf8d60a8d0d1da0e951d9aa8dec 1a9b3bf140291cc045590ea91f6c2c73cfbb0bc6 Colum Paget 1424212317 +0000 commit: updated checks for new encodings 1a9b3bf140291cc045590ea91f6c2c73cfbb0bc6 12ae478bfa77b984f933adc1baca392b8adf6315 Colum Paget 1424212466 +0000 commit: updated version number 12ae478bfa77b984f933adc1baca392b8adf6315 f8aa24e42f4770bb41e5a2138cc85c7bfc52147d Colum Paget 1424355719 +0000 commit: updated version number in check script f8aa24e42f4770bb41e5a2138cc85c7bfc52147d 6c294b2661552bfcaf683962c9218644d5a1f99d Colum Paget 1424356333 +0000 commit: changed version in check.sh script hashrat-1.6.1/.git/logs/HEAD0000644000175000000000000000212612471371755015140 0ustar metacosm89root0000000000000000000000000000000000000000 954fd2d6b2e42406b0c85f62a6f304abef64b3d3 Colum Paget 1424182597 +0000 clone: from git://github.com/ColumPaget/Hashrat 954fd2d6b2e42406b0c85f62a6f304abef64b3d3 b74c3fbfc538fcf8d60a8d0d1da0e951d9aa8dec Colum Paget 1424211491 +0000 commit: MD5 fixed for 64-bit machines. New encoding schemes added b74c3fbfc538fcf8d60a8d0d1da0e951d9aa8dec 1a9b3bf140291cc045590ea91f6c2c73cfbb0bc6 Colum Paget 1424212317 +0000 commit: updated checks for new encodings 1a9b3bf140291cc045590ea91f6c2c73cfbb0bc6 12ae478bfa77b984f933adc1baca392b8adf6315 Colum Paget 1424212466 +0000 commit: updated version number 12ae478bfa77b984f933adc1baca392b8adf6315 f8aa24e42f4770bb41e5a2138cc85c7bfc52147d Colum Paget 1424355719 +0000 commit: updated version number in check script f8aa24e42f4770bb41e5a2138cc85c7bfc52147d 6c294b2661552bfcaf683962c9218644d5a1f99d Colum Paget 1424356333 +0000 commit: changed version in check.sh script hashrat-1.6.1/.git/index0000644000000000000000000003125712471371755013566 0ustar rootrootDIRCT+vTME +P/`5v hRMHINSTALLT,*TME +PKM8Yy6.Yh˵LICENCET,&ITME +Pq<$i#$?XԒ Makefile.inT,5T_ +fUI]ǽv\ V GTPٳREADMET,#T_ +P&W}> S-o+qcgi.cT,_TME +PٗJhS &"UW4cgi.hT,T_ d MJeí**^˛O# check-hash.cT,(TME +P<ڿeA2(v check-hash.hT0T-EM +Pđ%zUB^Xtcheck.shT-)T_ +PbrUY&#HWcommand-line-args.cT-H>TME +PYfZGS_rv command-line-args.hT-IT_ +PLA21N7hcommon.cT-T +P PT_`p=S ih"@qSlibUseful-2.1/FileSystem.hT3MT_`q#T7XpL#< libUseful-2.1/GeneralFunctions.cT3{T_`rduԃ%8A libUseful-2.1/GeneralFunctions.hT3:T_`s1IbXVXw(I37VlibUseful-2.1/Hash.cT3#T_`tOP9{oˠ^Z+ϫlibUseful-2.1/Hash.hT3qTME`yKM8Yy6.Yh˵libUseful-2.1/LICENCET4tT_`uȫZkvޒu8IFlibUseful-2.1/Log.cT43T_`vSGSq#ÎP?-clibUseful-2.1/Log.hT4`DTME`| ,b6.u|@\6ّq߱libUseful-2.1/Makefile.inT4oT_`wqIZfl1ܯlibUseful-2.1/Markup.cT4~mT_`x]v:k5EkF.-?libUseful-2.1/Markup.hT4 ,T_`z0[GwhslibUseful-2.1/MathExpr.cT4OT_`{Vpe2p)΂uflibUseful-2.1/MathExpr.hT4T_`} RX8SW+H*W@閟libUseful-2.1/openssl.hT9y_T_`rwΧyq libUseful-2.1/proctitle.cT9T_`rܺyvƐ4>zAp`libUseful-2.1/proctitle.hT9T_`rE\[_UDu>HKlibUseful-2.1/pty.cT9AT_`r҂, bT0C 3LsٶlibUseful-2.1/pty.hT9\T_`r)5ߝ LlibUseful-2.1/sha1.cT:(XT_`r [jR"Z,\K2libUseful-2.1/sha1.hT:tT_`rZDsJPyqBs8<libUseful-2.1/sha2.cT:T_`r,cSpִ*,libUseful-2.1/sha2.hT:QT_`r; Tߋ$(SeH`-libUseful-2.1/socket.cT:T_`r͡Ì+Y&ׄу=libUseful-2.1/socket.hT: T_`r-]~- 9RWlibUseful-2.1/sound.cTT_`r\V((2YXY^libUseful-2.1/sound.hTyT_`r'bŢ޲J+~libUseful-2.1/string.cT(8T_`rD9`XaJp<_*libUseful-2.1/string.hT35T_`rez{*i(ʏLFPlibUseful-2.1/tar.cTuT_`r8w_#7*IѰ}GDlibUseful-2.1/tar.hTT_`rKMQfsM'libUseful-2.1/unix_socket.cTrT_`rDPBUSa[libUseful-2.1/unix_socket.hTT_`r8KF:&H^m5jlibUseful-2.1/whirlpool.cT٨T_`rP>FљmoZlibUseful-2.1/whirlpool.hT'dT_ +P9x=_̷|;Pʍmain.cT!j#T_ +P]99o 2< memcached.cT0TME +fS  ڻ>ٔ memcached.hTO2`T_ +fKdCdFGi ~!/Pssh.cT^uTME +fV<c&eJRaXssh.hTmTME +fXm,5{ÜF|ohbtests/duplicate.txtT|TME +fY;=i7I)Lnc tests/help.txtT=]TME +fZm,5{ÜF|ohbtests/quotes.txtT=]TME +f[ͧ 2 VVtests/test.iocTT_ +fM ѽ}ۼ͆R4 wxattr.cTTME +f]{GvG5 APzxattr.hTREE146 2 .qU7ChSMVBtests4 0 <Ѣ7 6#ⳂlibUseful-2.1110 1 $8pH[Q)x*(|HDocs18 0 ʟ=hܜ:[切6?Յ獈Y,toT}hashrat-1.6.1/.git/COMMIT_EDITMSG0000644000175000017550000000004312471371755016663 0ustar metacosm89metacosm89changed version in check.sh script hashrat-1.6.1/libUseful-2.1/0000755000175000000000000000000012470740506015127 5ustar metacosm89roothashrat-1.6.1/libUseful-2.1/Docs/0000755000175000000000000000000012470646505016023 5ustar metacosm89roothashrat-1.6.1/libUseful-2.1/Docs/ConnectManager.txt0000644000175000017550000000221212470646505022475 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_CONNECT_MANAGER_H #define LIBUSEFUL_CONNECT_MANAGER_H #include "file.h" #include "includes.h" #define RECONNECT 2 #ifdef __cplusplus extern "C" { #endif typedef struct t_con_man_item TConnectManagerItem; typedef int (*CONNECT_FUNC)(TConnectManagerItem *Item); typedef int (*ONDATA_FUNC)(STREAM *S, char *Name); typedef int (*ONTIMER_FUNC)(void *Data, char *Name); typedef struct t_con_man_item { char *Name; void *Data; int TimerVal; int LastTimerFire; char *Host; int Port; CONNECT_FUNC OnConnect; ONDATA_FUNC OnData; }; int ConnectManagerAddServer(int sock, char *Name, CONNECT_FUNC OnConnect, ONDATA_FUNC OnData); STREAM *ConnectManagerAddClient(char *Host, int Port, int Flags, char *Name, CONNECT_FUNC OnConnect, ONDATA_FUNC OnData); TConnectManagerItem *ConnectManagerAddIncoming(STREAM *S, char *Name, ONDATA_FUNC OnData); int ConnectManagerAddTimer(int Secs, char *Name, ONTIMER_FUNC OnTime, void *Data); int ConnectManagerCountNamedConnections(char *Name); STREAM *ConnectManagerGetStreamByName(char *Name); ListNode *ConnectManagerGetConnectionList(); void ConnectManagerMainLoop(); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/Docs/DataProcessing.txt0000644000175000017550000000347012470646505022526 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_DATA_PROCESSING_H #define LIBUSEFUL_DATA_PROCESSING_H #include "includes.h" #ifdef __cplusplus extern "C" { #endif typedef struct t_dpmod TProcessingModule; typedef int (*DATA_PROCESS_INIT_FUNC)(TProcessingModule *Mod, const char *Args); typedef int (*DATA_PROCESS_WRITE_FUNC)(TProcessingModule *, const char *Data, int len, char *OutBuff, int OutBuffLen); typedef int (*DATA_PROCESS_CLOSE_FUNC)(TProcessingModule *Mod); #define DPM_READ_FINAL 1 #define DPM_WRITE_FINAL 2 #define DPM_NOPAD_DATA 4 struct t_dpmod { char *Name; char *Args; int Flags; char *Buffer; int BuffSize; ListNode *Values; DATA_PROCESS_INIT_FUNC Init; DATA_PROCESS_WRITE_FUNC Read; DATA_PROCESS_WRITE_FUNC Write; DATA_PROCESS_WRITE_FUNC Flush; DATA_PROCESS_CLOSE_FUNC Close; void *Data; }; TProcessingModule *StandardDataProcessorCreate(const char *Class, const char *Name, const char *Arg); int DataProcessorInit(TProcessingModule *ProcMod, const char *Key, const char *InputVector); int DataProcessorWrite(TProcessingModule *ProcMod, const char *InData, int InLen, char *OutData, int OutLen); void DataProcessorDestroy(void *ProcMod); char *DataProcessorGetValue(TProcessingModule *M, const char *Name); void DataProcessorSetValue(TProcessingModule *M, const char *Name, const char *Value); void InitialiseEncryptionComponents(const char *Args, char **CipherName, char **InputVector, int *InputVectorLen, char **Key, int *KeyLen, int *Flags); int STREAMAddDataProcessor(STREAM *S, TProcessingModule *Mod, const char *Args); int DataProcessorAvailable(const char *Class, const char *Name); int STREAMAddStandardDataProcessor(STREAM *S, const char *Class, const char *Name, const char *Args); void STREAMClearDataProcessors(STREAM *S); int STREAMDeleteDataProcessor(STREAM *S, char *Class, char *Name); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/Docs/EncryptedFiles.txt0000644000175000017550000000134412470646505022536 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_ENCRYPTEDFILES_H #define LIBUSEFUL_ENCRYPTEDFILES_H #include "DataProcessing.h" #include "file.h" #define FLAG_ENCRYPT 1 #define FLAG_DECRYPT 2 #define FLAG_HEXKEY 4 #define FLAG_HEXIV 8 #define FLAG_HEXSALT 16 #define FLAG_VERBOSE 32 #define FLAG_SPEED 64 #define FLAG_NOPAD_DATA 128 #ifdef __cplusplus extern "C" { #endif char *FormatEncryptArgs(char *RetBuff,int Flags, const char *Cipher, const char *Key, const char *InitVector, const char *Salt ); int AddEncryptionHeader(STREAM *S, int Flags, const char *Cipher, const char *Key, const char *InitVector, const char *Salt); void HandleDecryptionHeader(STREAM *S, const char *Header, const char *Key); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/Docs/GeneralFunctions.txt0000644000175000017550000000450412470646505023065 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_GENERAL_H #define LIBUSEFUL_GENERAL_H #include #include "defines.h" #ifdef __cplusplus extern "C" { #endif void WritePidFile(char *ProgName); int HexStrToBytes(char **Buffer, char *HexStr); char *BytesToHexStr(char *Buffer, char *Bytes, int len); int demonize(); void SwitchProgram(char *CommandLine); int Spawn(char *CommandLine); int SpawnWithIO(char *CommandLine, int StdIn, int StdOut, int StdErr); int ForkWithIO(int StdIn, int StdOut, int StdErr); int PipeSpawnFunction(int *infd, int *outfd, int *errfd, BASIC_FUNC Func, void *Data); int PipeSpawn(int *infd, int *outfd, int *errfd, char *CommandLine); int FileExists(char *); int LogToFile(char *,char *,...); int LogFileSetValues(char *FileName, int Flags, int MaxSize, int FlushInterval); void LogFileFlushAll(int ForceFlush); void ColLibDefaultSignalHandler(int sig); void SetTimeout(int timeout); int CreateLockFile(char *FilePath,int Timeout); char *GetDateStr(char *Format, char *Timezone); char *GetDateStrFromSecs(char *Format, time_t Secs, char *Timezone); time_t DateStrToSecs(char *Format, char *Str); double EvaluateMathStr(char *String); int MakeDirPath(char *Path, int DirMask); int SwitchUser(char *User); int SwitchGroup(char *Group); char *GetCurrUserHomeDir(); char *GetNameValuePair(const char *Input, const char *PairDelim, const char *NameValueDelim, char **Name, char **Value); void SetVar(ListNode *Vars, char *Name, char *Data); char *GetVar(ListNode *Vars, char *Name); void UnsetVar(ListNode *Vars,char *VarName); void ClearVars(ListNode *Vars); void CopyVars(ListNode *Dest,ListNode *Source); char *SubstituteVarsInString(char *Buffer, char *Fmt, ListNode *Vars, int Flags); int ExtractVarsFromString(char *Data, char *FormatStr, ListNode *Vars); char *GetRandomData(char *RetBuff, int len, char *AllowedChars); char *GetRandomHexStr(char *RetBuff, int len); char *GetRandomAlphabetStr(char *RetBuff, int len); void CloseOpenFiles(); int ChangeFileExtension(char *FilePath, char *NewExt); int BASIC_FUNC_EXEC_COMMAND(void *Data); char *XMLGetTag(char *Input, char **TagType, char **TagData); char *XMLDeQuote(char *RetStr, char *Data); double ParseHumanReadableDataQty(char *Data, int Type); char *GetHumanReadableDataQty(double Size, int Type); char *FindFileInPath(char *InBuff, char *File, char *Path); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/Docs/Hash.txt0000644000175000017550000000256712470646505020511 0ustar metacosm89metacosm89Hashing functions. Call 'HashInit' THash *HashInit(char *Type); passing in a type (either "sha1", "md5" or "crc32". This will return a THash structure (or NULL on error). The Hash structure contains too functions, 'Update' and 'Finish', of the forms: Hash->Update(THash *Hash, char *Data, int DataLen); Hash->Finish(THash *Hash, int Encoding, char **RetStr); The 'Encoding' argument to 'Finish' can be either of the #defined values ENCODE_HEX or ENCODE_BASE64. Example: THash *Hash; STREAM *S; char *Tempstr=NULL; int result; Hash=InitHash("md5"); S=STREAMOpenFile("testfile",O_RDONLY); if (S) { Tempstr=SetStrLen(Tempstr,4096); result=STREAMReadBytes(S,Tempstr,4096); while (Tempstr) { Hash->Update(Hash,Tempstr,result); result=STREAMReadBytes(S,Tempstr,4096); } Hash->Finish(Hash,ENCODE_HEX,&Tempstr); printf("MD5 Digest of file is: %s\n",Tempstr); STREAMClose(S); } else printf("Couldn't open file\n"); char *HashBytes(char *Return, char *Type, char *text, int len, int Encoding); A simpler interface to the hashing functions, for when you just want to hash a string of bytes. Example char *Str="I wonder what the sha1 hash of this sentence is?"; char *Digest=NULL; Digest=HashBytes(Digest,"sha1",Str,StrLen,ENCODE_HEX); printf("hash is: %s\n",Digest); char *EncodeBase64(char *Return, char *Text, int len); char *DecodeBase64(char *Return, int *len, char *Text); hashrat-1.6.1/libUseful-2.1/Docs/Log.txt0000644000175000017550000000104612470646505020336 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_LOG_H #define LIBUSEFUL_LOG_H #include "includes.h" #include "defines.h" #include "file.h" #define LOGFILE_FLUSH 1 #define LOGFILE_SYSLOG 2 #define LOGFILE_LOGPID 4 #define LOGFILE_LOGUSER 8 extern char *G_LogFilePath; int LogFileSetValues(char *FileName, int Flags, int MaxSize, int FlushInterval); int LogToSTREAM(STREAM *S, int Flags, char *Str); void LogFileFlushAll(int Force); int LogToFile(char *FileName,char *fmt, ...); void LogFileClose(char *Path); int LogFileAppendTempLog(char *LogPath, char *TmpLogPath); #endif hashrat-1.6.1/libUseful-2.1/Docs/directory0000644000175000017550000000013412470646505021000 0ustar metacosm89metacosm89cat: /home/metacosm89/fileferry-1.0/libUseful-2.0/Docs/directory: No such file or directory hashrat-1.6.1/libUseful-2.1/Docs/expect.txt0000644000175000017550000000213612470646505021106 0ustar metacosm89metacosm89Functions that implement an 'expect'-style interface, in which strings are read from a stream, and when certain strings are seen certain responses are sent. int STREAMExpectAndReply(STREAM *S, char *Expect, char *Reply); Simple interface, wait to see the string 'Expect' on a stream, and send 'Reply' when you see it. Example: int STREAMExpectAndReply(S, "assword:", "MyP@55W0rd"); The STREAM can be anything that can be represented by a file descriptor. Thus it can be a pipe, socket, file, pseudo-tty. Streams can be made from file descriptors using 'STREAMFromFD(int fd)' or 'STREAMFromDualFD(int fd)' void DialogAdd(ListNode *Dialogs, char *Expect, char *Reply, int Flags); Add 'Dialogs' to a list. A dialog is an expected string, and a reply that's sent to it. The list is of the type described in 'lists.txt'. Example: DialogAdd(Diags,"assword:","MyP@55W0rd",0); #define FLAG_FINAL_DIALOG 1 #define FLAG_DIALOG_FAIL 2 typedef struct { int Flags; int Match; char *Expect; char *Reply; } TDialog; int STREAMExpectSilence(STREAM *S, int wait); int STREAMDialog(STREAM *S, ListNode *Dialogs); hashrat-1.6.1/libUseful-2.1/Docs/file.txt0000644000175000017550000000527012470646505020537 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_FILE_H #define LIBUSEFUL_FILE_H #include #include "list.h" #ifdef __cplusplus extern "C" { #endif #define STREAM_CLOSED -1 #define STREAM_NODATA -2 #define STREAM_TIMEOUT -3 #define STREAM_DATA_ERROR -4 #define FLUSH_FULL 0 #define FLUSH_LINE 1 #define SF_AUTH 2 #define SF_SYMLINK_OK 4 #define SF_CONNECTING 8 #define SF_CONNECTED 16 #define SF_HANDSHAKE_DONE 32 #define SF_WRONLY 64 #define SF_RDONLY 128 #define SF_RDWR 256 #define SF_SSL 512 #define SF_DATA_ERROR 1024 #define SF_WRITE_ERROR 2048 #define SF_NONBLOCK 4096 #define STREAM_TYPE_FILE 0 #define STREAM_TYPE_UNIX 1 #define STREAM_TYPE_UNIX_DGRAM 2 #define STREAM_TYPE_TCP 3 #define STREAM_TYPE_UDP 4 #define STREAM_TYPE_SSL 5 #define STREAM_TYPE_HTTP 6 #define STREAM_TYPE_CHUNKED_HTTP 7 #define O_LOCK O_NOCTTY #define COMMS_BY_PIPE 0 #define COMMS_BY_PTY 1 typedef struct { char *InputBuff; char *OutputBuff; int Timeout; int in_fd, out_fd; int Type; int Flags; unsigned int BuffSize; unsigned int InStart, InEnd; unsigned int OutStart, OutEnd; unsigned int BytesRead; unsigned int BytesWritten; char *Path; void *Extra; ListNode *Values; ListNode *ProcessingModules; ListNode *Index; } STREAM; STREAM *STREAMCreate(); STREAM *STREAMOpenFile(char *Path, int Mode); STREAM *STREAMClose(STREAM *Stream); void STREAMSetNonBlock(STREAM *S, int val); int STREAMLock(STREAM *S, int val); int STREAMFlush(STREAM *Stream); void STREAMClear(STREAM *Stream); int STREAMTell(STREAM *Stream); int STREAMSeek(STREAM *Stream, off_t offset, int whence); void STREAMResizeBuffer(STREAM *, int); void STREAMSetTimeout(STREAM *, int); void STREAMSetFlushType(STREAM *Stream, int Type, int val); int STREAMReadChar(STREAM *); int STREAMWriteChar(STREAM *, char); char* STREAMReadLine(char *Buffer, STREAM *); int ReadBytesToTerm(STREAM *S, char *Buffer, int BuffSize, char Term); char* STREAMReadToTerminator(char *Buffer, STREAM *, char Term); char* STREAMReadToMultiTerminator(char *Buffer, STREAM *, char *Terms); int STREAMWriteString(char *Buffer, STREAM *); int STREAMWriteLine(char *Buffer, STREAM *); STREAM *STREAMFromFD(int fd); STREAM *STREAMFromDualFD(int in_fd, int out_fd); STREAM *STREAMSpawnCommand(char *Command, int type); int STREAMDisassociateFromFD(STREAM *Stream); int STREAMPeekChar(STREAM *); int STREAMReadBytes(STREAM *, char *Buffer, int Bytes); int STREAMWriteBytes(STREAM *, char *Buffer, int Bytes); int FDCheckForBytes(int); int STREAMCheckForBytes(STREAM *); int STREAMCheckForWaitingChar(STREAM *S, char check_char); int STREAMCountWaitingBytes(STREAM *); int IndexedFileLoad(STREAM *S); int IndexedFileFind(STREAM *S, char *Key); int IndexedFileWrite(STREAM *S, char *Line); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/Docs/http.txt0000644000175000017550000000471412470646505020601 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_HTTP_H #define LIBUSEFUL_HTTP_H #include "includes.h" #include "defines.h" #include "file.h" #define HTTP_AUTH_BASIC 1 #define HTTP_AUTH_DIGEST 2 #define HTTP_SENT_AUTH 4 #define HTTP_PROXY_AUTH 8 #define HTTP_OKAY 0 #define HTTP_NOCONNECT 1 #define HTTP_NOTFOUND 2 #define HTTP_REDIRECT 3 #define HTTP_ERROR 4 #define HTTP_CIRCULAR_REDIRECTS 5 #define HTTP_NOTMODIFIED 6 #define HTTP_VER1_0 1 #define HTTP_DEBUG 2 #define HTTP_CHUNKED 4 #define HTTP_HEADERS_SENT 8 #define HTTP_NOCOMPRESS 16 #define HTTP_NOREDIRECT 32 #define HTTP_KEEPALIVE 128 #define HTTP_PROXY 512 #define HTTP_SSL 1024 #define HTTP_SSL_REWRITE 2048 #define HTTP_GZIP 8192 #define HTTP_DEFLATE 16384 typedef struct { int Flags; char *AuthRealm; char *AuthQOP; char *AuthNonce; char *AuthOpaque; char *Logon; char *Password; } HTTPAuthStruct; typedef struct { char *Host; int Port; char *Method; char *Doc; char *Destination; char *ResponseCode; int Flags; char *RedirectPath; char *PreviousRedirect; char *ContentType; char *Timestamp; int ContentLength; int Depth; char *PostData; char *PostContentType; int PostContentLength; char *Proxy; time_t IfModifiedSince; ListNode *CustomSendHeaders; HTTPAuthStruct *Authorization; HTTPAuthStruct *ProxyAuthorization; STREAM *S; } HTTPInfoStruct; char *HTTPQuote(char *, char*); char *HTTPQuoteChars(char *RetBuff, char *Str, char *CharList); char *HTTPUnQuote(char *, char*); void HTTPInfoDestroy(void *p_Info); void HTTPInfoSetValues(HTTPInfoStruct *Info, char *Host, int Port, char *Logon, char *Password, char *Method, char *Doc, char *ContentType, int ContentLength); HTTPInfoStruct *HTTPInfoCreate(char *Host, int Port, char *Logon, char *Password, char *Method, char *Doc, char *ContentType, int ContentLength); STREAM *HTTPConnect(HTTPInfoStruct *Info); STREAM *HTTPTransact(HTTPInfoStruct *Info); HTTPInfoStruct *HTTPInfoFromURL(char *Method, char *URL); STREAM *HTTPMethod(char *Method, char *URL, char *Logon, char *Password); STREAM *HTTPGet(char *URL, char *Logon, char *Password); STREAM *HTTPPost(char *URL, char *Logon, char *Password, char *ContentType, char *Content); int HTTPReadBytes(STREAM *Con, char **Buffer); void HTTPCopyToSTREAM(STREAM *Con, STREAM *S); int HTTPDownload(char *URL, char *Login, char *Password, STREAM *S); void HTTPSetUserAgent(char *AgentName); void HTTPSetProxy(char *Proxy); void HTTPSetFlags(int Flags); char *HTTPParseURL(char *URL, char **Proto, char **Host, int *Port, char **Login, char **Password); #endif hashrat-1.6.1/libUseful-2.1/Docs/includes.txt0000644000175000017550000000101312470646505021415 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_INCLUDES_H #define LIBUSEFUL_INCLUDES_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "defines.h" #include "string.h" #include "list.h" #include "GeneralFunctions.h" #include "file.h" #include "socket.h" #endif hashrat-1.6.1/libUseful-2.1/Docs/inet.txt0000644000175000017550000000245012470646505020554 0ustar metacosm89metacosm89inet.h contains functions that relates to utility services offered by sites on the web. At the moment this is just IP Geolocation and discovery of your External (out on the internet) IP address char *GetExternalIP(char *RetStr); Pass a char * string into this function, and the function will print your external IP address into it, if it can determine it, and return the string (or null if IP cannot be determined). Look in the documentation for string.h (string.txt) to understand libUseful strings int IPGeoLocate(char *IP, ListNode *Vars); Pass in an quad-format IP address or a hostname, and this function will do geolocation and return the information as a list that holds strings. Look into list.txt to understand libUseful lists. char *ExtractFromWebpage(char *RetStr, char *URL, char *ExtractStr, int MinLength); This is a function for screen-scraping data items from webpages. example: RetStr=ExtractFromWebpage(RetStr,"http://checkip.dyndns.org", "Current IP Address: $(extract_item)",4); pass in a blank string as the first argument, and the function will print it's results into it and return it. The second argument is the URL of the web-page to get. The third argument is a string to search for, and clip out that part of the string that is here represented by '$(extract_item)'. hashrat-1.6.1/libUseful-2.1/Docs/list.txt0000644000175000017550000000334312470646505020572 0ustar metacosm89metacosm89#ifndef LIB_USEFUL_LIST #define LIB_USEFUL_LIST #ifdef __cplusplus extern "C" { #endif #define LIST_FLAG_DELETE 1 typedef struct lnode { int ItemType; int Flags; char *Tag; void *Item; struct lnode *Head; struct lnode *Jump; struct lnode *Prev; struct lnode *Next; } ListNode; typedef void (*LIST_ITEM_DESTROY_FUNC)(void *); typedef void *(*LIST_ITEM_CLONE_FUNC)(void *); ListNode *ListCreate(); void *IndexArrayOnList(ListNode *); void *AddItemToArray(void *Array,int size, void *Item); void *DeleteItemFromArray(void *Array,int size, int ItemNo); void ListDestroy(ListNode *, LIST_ITEM_DESTROY_FUNC); void ListClear(ListNode *, LIST_ITEM_DESTROY_FUNC); ListNode *ListAddItemt(ListNode *,void *); ListNode *ListAddNamedItem(ListNode *, const char *Name, void *); ListNode *ListInsertItem(ListNode *,void *); ListNode *ListInsertNamedItem(ListNode *,const char *,void *); ListNode *OrderedListAddNamedItem(ListNode *Head, const char *Name, void *Item); ListNode *SortedListInsertItem(ListNode *, void *, int (*LessThanFunc)(void *, void *, void *)); ListNode *ListAddNamedItemAfter(ListNode *ListStart,const char *Name,void *Item); void *ListDeleteNode(ListNode *); ListNode *ListGetNext(ListNode *); ListNode *ListGetPrev(ListNode *); ListNode *ListGetHead(ListNode *); ListNode *ListGetLast(ListNode *); ListNode *ListGetNth(ListNode *Head, int n); ListNode *ListFindNamedItem(ListNode *Head, const char *Name); ListNode *ListFindItem(ListNode *Head, void *Item); ListNode *ListJoin(ListNode *, ListNode *); ListNode *ListClone(ListNode *, LIST_ITEM_CLONE_FUNC); void ListSort(ListNode *, void *Data, int (*LessThanFunc)(void *, void *, void *)); void ListSwapItems(ListNode *, ListNode *); int ListSize(ListNode *); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/Docs/pty.txt0000644000175000017550000000250712470646505020434 0ustar metacosm89metacosm89Functions for tty lines and pty pseudo-terminals. int OpenTTY(char *devname, int LineSpeed, int Flags); Opens a serial device. 'devname' is the path (like /dev/ttyS0) and LineSpeed is the baudrate. Flags can be: TTYFLAG_ECHO Turn on character echo. TTYFLAG_CRLF Lines end with /r/n TTYFLAG_LFCR Lines end with /n/r TTYFLAG_NONBLOCK Nonblocking reads TTYFLAG_CANON Canonical mode tty TTYFLAG_HARDWARE_FLOW Hardwre flow control TTYFLAG_SOFTWARE_FLOW Software flow control TTYFLAG_CRLF_KEEP Don't set CRLF or LFCR, just stick with current setting void HangUpLine(int tty); Hang up a tty previously opened with 'OpenTTY' InitTTY(int tty, int LineSpeed, int Flags); Like 'OpenTTY', but tty device has already been opened with 'open' void ResetTTY(int tty); Reset tty int GrabPseudoTTY(int *pty, int *tty); Open a pseudo tty. The master end is returned as pty, the slave is returned as tty. int PseudoTTYSpawnFunction(int *pty, BASIC_FUNC Func, void *Data); Fork a process running a function that will talk back to the main program via Pseudo tty (pty). The funtion's end of the pipe will appear as its stdin and stdout. int PseudoTTYSpawn(int *pty, const char *Command); Launch a Command that will think it's talking to a serial line on stdin/stdout, but is actually talking via Pseudo tty (pty) to the main program. hashrat-1.6.1/libUseful-2.1/Docs/socket.txt0000644000175000017550000000472412470646505021113 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_SOCK #define LIBUSEFUL_SOCK #include #include "file.h" #define CONNECT_NONBLOCK 1 #define CONNECT_SSL 2 #define CONNECT_HTTP_PROXY 4 #define CONNECT_SOCKS_PROXY 8 #define CONNECT_HOP_TCP 1 #define CONNECT_HOP_HTTP_PROXY 2 #define CONNECT_HOP_SSH 3 #define CONNECT_HOP_SHELL_CMD 4 #define CONNECT_HOP_TELNET 5 #define SOCK_CONNECTED 1 #define SOCK_CONNECTING -1 #ifdef __cplusplus extern "C" { #endif /* Server Socket Funcs*/ int InitServerSock(char *Address, int Port); int InitUnixServerSock(char *Path); int TCPServerSockAccept(int ServerSock,int *Addr); int UnixServerSockAccept(int ServerSock); int GetSockDetails(int fd, char **LocalAddress, int *LocalPort, char **RemoteAddress, int *RemotePort); /* Client Socket Funcs*/ int IsSockConnected(int sock); int ReconnectSock(int sock, char *Host, int Port, int Flags); int ConnectToHost(char *Host, int Port, int Flags); /* int CheckForData(int sock); */ int SendText(int sock, char *Text); int ReadText(int sock, char *Buffer, int MaxLen); int ReadToCR(int fd, char *Buffer, int MaxLen); STREAM *STREAMOpenUDP(int Port,int NonBlock); int STREAMSendDgram(STREAM *S, char *Host, int Port, char *Bytes, int len); int STREAMConnectToHost(STREAM *S, char *Host, int Port, int Flags); int STREAMIsConnected(STREAM *S); int DoPostConnect(STREAM *S, int Flags); int DoSSLClientNegotiation(STREAM *S, int Flags); int DoSSLServerNegotiation(STREAM *S, int Flags); void STREAMSetValue(STREAM *S, char *Name, char *Value); char *STREAMGetValue(STREAM *S, char *Name); const char *STREAMQuerySSLCipher(STREAM *S); int STREAMIsPeerAuth(STREAM *S); /* Stuff relating to standard inet download procedure (until \r\n.\r\n) */ typedef struct { STREAM *Input; STREAM *Output; char *TermStr; int TermPos; } DownloadContext; int ProcessIncommingBytes(DownloadContext *); //int DownloadToDot(int sock, FILE *SaveFile); int DownloadToDot(STREAM *Connection, STREAM *SaveFile); int DownloadToTermStr(STREAM *Connection, STREAM *SaveFile, char *TermStr); void ParseConnectDetails(char *Str, char **Type, char **Host, int *Port, char **User, char **Pass, char **InitDir); /* IP Address and host lookup functions */ char *LookupHostIP(char *Host); char *GetRemoteIP(int sock); char *IPStrToHostName(char *); char *IPtoStr(unsigned long); unsigned long StrtoIP(char *); int IsIPAddress(char *); int STREAMAddConnectionHop(STREAM *S, char *Value); void STREAMAddConnectionHopList(STREAM *S, char *HopList); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/Docs/sound.txt0000644000175000017550000000445612470646505020755 0ustar metacosm89metacosm89A few simple functions for playing and recording sound. Depending on how libUseful was compiled these will either work via Esound (esd) or Open Sound System. For systems with ALSA, playback, record and volume control can be enabled by loading the kernel modules snd-mixer-oss and snd-pcm-oss. These will create a 'fake' oss style device (/dev/dsp) which allows oss-style programs to talk to ALSA. int SoundPlayFile(char *Path, int Vol, int Flags); A very simple function to play .au or .wav files. 'Path' is the path to the file. 'Vol' is a value between 0 and 255. The #defined value 'VOLUME_LEAVEALONE' can be passed as 'Vol', this means don't alter the volume when playing the file. 'Flags' currently only accepts the #defined value 'PLAYSOUND_NONBLOCK', which will cause a background process to be forked off so that the program isn't delayed while the sound plays. TAudioInfo *SoundReadAU(STREAM *S); TAudioInfo *SoundReadWAV(STREAM *S); These functions read header info from .wav or .au files. The information is returned in a TAudioInfo structure: typedef struct { unsigned int Format; unsigned int Channels; unsigned int SampleRate; unsigned int SampleSize; unsigned int DataSize; }TAudioInfo; The file is passed in as a STREAM. Look in file.txt for documentation on the STREAM class. int SoundOpenOutput(char *Dev, TAudioInfo *Info); This function opens an output device, with channels, audioformat, samplerate, etc, etc set using the TAudioInfo struct described above. If 'Dev' is set to 'esd:" followed by a hostname, e.g. "esd:localhost", "esd:192.168.1.5", then the ESPEAKER environment variable will be set to the hostname, and sound will be send to that host. If the 'Dev' argument is of non-zero length, but does not start with 'esd', then it will be taken to be an OSS device path. If 'Dev' is of zero length, then localhost esound will be tried first, falling back to OSS on /dev/dsp. int SoundOpenInput(char *Dev, TAudioInfo *Info); As 'SoundOpenOutput', but for reading/recording sound. int SoundAlterVolume(char *Dev, char *Channel, int delta); Change the volume on the OSS sound device at 'Dev' (usually /dev/mixer). 'Channel' is the sound channel, one of: "master", "pcm", "cd", "mic", "line", "video", "phonein", "phoneout" or "all". 'Delta' is the amount to increase by, +- in the range 0-255. hashrat-1.6.1/libUseful-2.1/Docs/string.txt0000644000175000017550000000340012470646505021117 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_STRING #define LIBUSEFUL_STRING #include #include //for strlen, used below in StrLen #define GETTOKEN_QUOTES 1 #define GETTOKEN_MULTI_SEPARATORS 2 #define MATCH_TOKEN_PART 1 #define MATCH_TOKEN_CASE 2 #ifdef __cplusplus extern "C" { #endif //A few very simple and frequently used functions can be reduced //down to macros using weird stuff like the ternary condition //operator '?' and the dreaded comma operator ',' #define StrLen(str) ( str ? strlen(str) : 0 ) //int StrLen(char *Str); char *DestroyString(char *); int CompareStr(const char *S1, const char *S2); char *CopyStrLen(char *,const char *,int); char *CopyStr(char *, const char *); char *MCatStr(char *, const char *, ...); char *MCopyStr(char *, const char *, ...); char *CatStr(char *, const char *); char *CatStrLen(char *,const char *,int); char *VFormatStr(char *,const char *,va_list); char *FormatStr(char *,const char *,...); char *AddCharToStr(char *,char); inline char *AddCharToBuffer(char *Buffer, int BuffLen, char Char); inline char *AddBytesToBuffer(char *Buffer, int BuffLen, char *Bytes, int Len); char *SetStrLen(char *,int); char *strlwr(char *); char *strrep(char *,char, char); char *CloneString(const char *); void StripTrailingWhitespace(char *); void StripLeadingWhitespace(char *); void StripCRLF(char *); void StripQuotes(char *); char *QuoteCharsInStr(char *Buffer, const char *String,const char *QuoteChars); char *DeQuoteStr(char *Buffer, const char *Line); char *EnquoteStr(char *Out, const char *In); int MatchTokenFromList(const char *Token,char **List, int Flags); int MatchLineStartFromList(const char *Token,char **List); char *GetToken(const char *SearchStr, const char *Delim, char **Token, int Flags); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/Docs/unix_socket.txt0000644000175000017550000000044112470646505022146 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_UNIXSOCK_H #define LIBUSEFUL_UNIXSOCK_H #include "file.h" #include "defines.h" int InitUnixServerSocket(const char *Path, int SockType); int OpenUnixSocket(const char *Path, int SockType); int STREAMConnectUnixSocket(STREAM *S, const char *Path, int SockType); #endif hashrat-1.6.1/libUseful-2.1/Markup.c0000644000175000017550000000742312470734537017577 0ustar metacosm89metacosm89#include "Markup.h" char *XMLGetTag(char *Input, char **Namespace, char **TagType, char **TagData) { char *ptr, *tptr; int len=0, InTag=FALSE, TagHasName=FALSE; if (! Input) return(NULL); if (*Input=='\0') return(NULL); ptr=Input; //This ensures we are never dealing with nulls if (! *TagType) *TagType=CopyStr(*TagType,""); if (! *TagData) *TagData=CopyStr(*TagData,""); if (*ptr=='<') { ptr++; while (isspace(*ptr)) ptr++; len=0; InTag=TRUE; TagHasName=TRUE; //if we start with a slash tag, then add that to the tag name if (*ptr=='/') { *TagType=AddCharToBuffer(*TagType,len,*ptr); len++; ptr++; } while (InTag) { switch (*ptr) { //These all cause us to end. NONE OF THEM REQUIRE ptr++ //ptr++ will happen when we read tag data case '>': case '\0': case ' ': case ' ': case '\n': InTag=FALSE; break; //If a namespace return value is supplied, break the name up into namespace and //tag. Otherwise don't case ':': if (Namespace) { tptr=*TagType; if (*tptr=='/') { tptr++; len=1; } else len=0; *Namespace=CopyStr(*Namespace,tptr); } else { *TagType=AddCharToBuffer(*TagType,len,*ptr); len++; } ptr++; break; case '\r': ptr++; break; default: *TagType=AddCharToBuffer(*TagType,len,*ptr); len++; ptr++; break; } } } //End of Parse TagName. Strip any '/' tptr=*TagType; if ((len > 0) && (tptr[len-1]=='/')) tptr[len-1]='\0'; tptr[len]='\0'; while (isspace(*ptr)) ptr++; len=0; InTag=TRUE; while (InTag) { switch (*ptr) { //End of tag, skip '>' and fall through case '>': ptr++; //Start of next tag or end of text case '<': case '\0': InTag=FALSE; break; //Quotes! case '\'': case '\"': //Somewhat ugly code. If we're dealing with an actual tag, then TagHasName //will be set. This means we're dealing with data within a tag and quotes mean something. //Otherwise we are dealing with text outside of tags and we just add the char to //TagData and continue if (TagHasName) { tptr=ptr; while (*tptr != *ptr) { *TagData=AddCharToBuffer(*TagData,len,*ptr); len++; ptr++; } } *TagData=AddCharToBuffer(*TagData,len,*ptr); len++; ptr++; break; default: *TagData=AddCharToBuffer(*TagData,len,*ptr); len++; ptr++; break; } } //End of Parse TagData. Strip any '/' tptr=*TagData; if ((len > 0) && (tptr[len-1]=='/')) tptr[len-1]='\0'; tptr[len]='\0'; strlwr(*TagType); while (isspace(*ptr)) ptr++; return(ptr); } char *HtmlGetTag(char *Input, char **TagType, char **TagData) { if (! Input) return(NULL); if (*Input=='\0') return(NULL); return(XMLGetTag(Input, NULL, TagType, TagData)); } char *HtmlDeQuote(char *RetStr, char *Data) { char *Output=NULL, *Token=NULL, *ptr; int len=0; Output=CopyStr(RetStr,Output); ptr=Data; while (ptr && (*ptr != '\0')) { if (*ptr=='&') { ptr++; ptr=GetToken(ptr,";",&Token,0); if (*Token=='#') { Output=AddCharToBuffer(Output,len,strtol(Token+1,NULL,16)); len++; } else if (strcmp(Token,"amp")==0) { Output=AddCharToBuffer(Output,len,'&'); len++; } else if (strcmp(Token,"lt")==0) { Output=AddCharToBuffer(Output,len,'<'); len++; } else if (strcmp(Token,"gt")==0) { Output=AddCharToBuffer(Output,len,'>'); len++; } else if (strcmp(Token,"quot")==0) { Output=AddCharToBuffer(Output,len,'"'); len++; } else if (strcmp(Token,"apos")==0) { Output=AddCharToBuffer(Output,len,'\''); len++; } else if (strcmp(Token,"tilde")==0) { Output=AddCharToBuffer(Output,len,'~'); len++; } else if (strcmp(Token,"circ")==0) { Output=AddCharToBuffer(Output,len,'^'); len++; } } else { Output=AddCharToBuffer(Output,len,*ptr); len++; ptr++; } } DestroyString(Token); return(Output); } hashrat-1.6.1/libUseful-2.1/Markup.h0000644000175000017550000000053512470734537017601 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_MARKUP_H #define LIBUSEFUL_MARKUP_H #include "includes.h" #ifdef __cplusplus extern "C" { #endif char *XMLGetTag(char *Input, char **Namespace, char **TagType, char **TagData); char *HtmlGetTag(char *Input, char **TagType, char **TagData); char *HtmlDeQuote(char *RetStr, char *Data); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/MathExpr.c0000644000175000017550000001106012470734537020060 0ustar metacosm89metacosm89#include "MathExpr.h" typedef struct { int operator; double value; } ExprToken; const char *OpStrings[]={"0","+","-","*","/","(",")","%","^",NULL}; typedef enum Ops {OP_VAL,OP_PLUS,OP_MINUS,OP_TIMES,OP_DIVIDE,OP_OPEN,OP_CLOSE,OP_MOD,OP_POW} LIBUSEFUL_TMATHOPS; char *GetMathExprToken(char *String, char **Token) { char *ptr, *start; int count, found=FALSE; ptr=String; if (! ptr) return(NULL); if (*ptr=='\0') return(NULL); while (isspace(*ptr)) ptr++; start=ptr; while (ptr) { if (*ptr=='\0') { *Token=CopyStr(*Token,start); break; } for (count=1; OpStrings[count] !=NULL; count++) { if (strncmp(ptr,OpStrings[count],StrLen(OpStrings[count]))==0) { // we have come to an Operator at the start, so // that is our token if (start==ptr) { *Token=CopyStr(*Token,OpStrings[count]); ptr+=StrLen(OpStrings[count]); } else { *Token=CopyStrLen(*Token,start,ptr-start); } found=TRUE; break; } } if (found) break; ptr++; } return(ptr); } double ProcessMathExpression(ListNode *Tokens); double ProcessSumExpression(ListNode *Tokens) { ListNode *Curr; ExprToken *Tok, *NextTok; double val=0; Curr=ListGetNext(Tokens); Tok=(ExprToken *) Curr->Item; val=Tok->value; Curr=ListGetNext(Curr); while (Curr) { Tok=(ExprToken *) Curr->Item; Curr=ListGetNext(Curr); NextTok=(ExprToken *) Curr->Item; if (Tok->operator==OP_PLUS) val+=NextTok->value; else if (Tok->operator==OP_MINUS) val-=NextTok->value; else if (Tok->operator==OP_VAL) val=Tok->value; Curr=ListGetNext(Curr); } ListClear(Tokens,free); Tokens->Next=NULL; Tokens->Head=NULL; Tok=(ExprToken *) calloc(1,sizeof(ExprToken)); Tok->operator=OP_VAL; Tok->value=val; ListAddItem(Tokens,Tok); return(val); } double ProcessMultDiv(ListNode *Tokens) { ListNode *Curr; ExprToken *Tok, *PrevTok, *NextTok; double val=0; Curr=ListGetNext(Tokens); while (Curr) { Tok=Curr->Item; if ( (Tok->operator==OP_TIMES) || (Tok->operator==OP_DIVIDE) ) { PrevTok=(ExprToken *) Curr->Prev->Item; NextTok=(ExprToken *) Curr->Next->Item; if (Tok->operator==OP_TIMES) val=PrevTok->value * NextTok->value; if (Tok->operator==OP_DIVIDE) val=PrevTok->value / NextTok->value; ListDeleteNode(Curr->Prev); ListDeleteNode(Curr->Next); free(PrevTok); free(NextTok); Tok->operator=OP_VAL; Tok->value=val; } Curr=ListGetNext(Curr); } return(val); } double ProcessExpn(ListNode *Tokens) { ListNode *Curr; ExprToken *Tok, *PrevTok, *NextTok; double val=0; int count; Curr=ListGetNext(Tokens); while (Curr) { Tok=Curr->Item; if ( (Tok->operator==OP_MOD) || (Tok->operator==OP_POW) ) { PrevTok=(ExprToken *) Curr->Prev->Item; NextTok=(ExprToken *) Curr->Next->Item; if (Tok->operator==OP_MOD) val=(int) PrevTok->value % (int) NextTok->value; if (Tok->operator==OP_POW) { val=1.0; for (count=0; count < NextTok->value; count++) { val=val * PrevTok->value; } } ListDeleteNode(Curr->Prev); ListDeleteNode(Curr->Next); free(PrevTok); free(NextTok); Tok->operator=OP_VAL; Tok->value=val; } Curr=ListGetNext(Curr); } return(val); } void ProcessBrackets(ListNode *Tokens) { ListNode *Start=NULL, *Curr, *SubExpr=NULL, *SubCurr=NULL; ExprToken *Tok; Curr=ListGetNext(Tokens); while (Curr) { Tok=(ExprToken *) Curr->Item; if (Start) { if (Tok->operator==OP_CLOSE) { SubCurr->Next=NULL; //replace end brace with val Tok->operator=OP_VAL; Tok->value=ProcessMathExpression(SubExpr); Start->Next=Curr; Curr->Prev=Start; Start=NULL; } else { SubCurr->Next=Curr; Curr->Prev=SubCurr; SubCurr=SubCurr->Next; } } else if (Tok->operator==OP_OPEN) { Start=Curr->Prev; //get rid of pesky leading brace ListDeleteNode(Curr); free(Tok); Curr=Start; SubExpr=ListCreate(); SubCurr=SubExpr; } Curr=ListGetNext(Curr); } if (SubExpr) ListDestroy(SubExpr,free); } double ProcessMathExpression(ListNode *Tokens) { double val; ProcessBrackets(Tokens); ProcessExpn(Tokens); ProcessMultDiv(Tokens); val=ProcessSumExpression(Tokens); return(val); } double EvaluateMathStr(char *String) { double val; char *ptr, *Token=NULL; int operator; ListNode *Tokens; ExprToken *Tok; Tokens=ListCreate(); ptr=GetMathExprToken(String,&Token); while (ptr) { operator=MatchTokenFromList(Token,OpStrings,0); if (operator==-1) operator=OP_VAL; Tok=(ExprToken *) calloc(1,sizeof(ExprToken)); Tok->operator=operator; if (operator==OP_VAL) { Tok->value=atof(Token); } ListAddItem(Tokens,Tok); ptr=GetMathExprToken(ptr,&Token); } val=ProcessMathExpression(Tokens); ListDestroy(Tokens,free); DestroyString(Token); return(val); } hashrat-1.6.1/libUseful-2.1/MathExpr.h0000644000175000017550000000031012470734537020061 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_MATHEXPR_H #define LIBUSEFUL_MATHEXPR_H #include "includes.h" #ifdef __cplusplus extern "C" { #endif double EvaluateMathStr(char *String); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/ParseURL.c0000644000175000017550000000537712470734537020003 0ustar metacosm89metacosm89#include "ParseURL.h" void ParseHostDetails(const char *Data,char **Host,char **Port,char **User, char **Password) { char *Token=NULL; const char *ptr, *tptr; if (Port) *Port=CopyStr(*Port,""); if (Host) *Host=CopyStr(*Host,""); if (User) *User=CopyStr(*User,""); if (Password) *Password=CopyStr(*Password,""); ptr=strrchr(Data,'@'); if (ptr) { Token=CopyStrLen(Token,Data,ptr-Data); if (User) { tptr=GetToken(Token,":",User,0); if (StrLen(tptr)) *Password=CopyStr(*Password,tptr); } ptr++; } else ptr=Data; if (Host) ptr=GetToken(ptr,":",Host,0); if (Port && StrLen(ptr)) *Port=CopyStr(*Port,ptr); DestroyString(Token); } void ParseURL(const char *URL, char **Proto, char **Host, char **Port, char **User, char **Password, char **Path, char **Args) { const char *ptr; char *Token=NULL, *tProto=NULL, *aptr; //Even if they pass NULL for protocol, we need to take a copy for use in //the 'guess the port' section below ptr=strchr(URL,':'); if (ptr) { tProto=CopyStrLen(tProto,URL,ptr-URL); strlwr(tProto); if (Proto) *Proto=CopyStr(*Proto,tProto); ptr++; //some number of '//' follow protocol while (*ptr=='/') ptr++; ptr=GetToken(ptr,"/",&Token,0); ParseHostDetails(Token,Host,Port,User,Password); } else ptr=URL; while (*ptr=='/') ptr++; if (ptr) { if (Path) { *Path=MCopyStr(*Path,"/",ptr,NULL); //Only split the HTTP CGI arguments from the document path if we were //asked to return the args seperately if (Args) { aptr=strrchr(*Path,'?'); if (aptr) { *aptr='\0'; aptr++; *Args=CopyStr(*Args,aptr); } } } } //the 'GetToken' call will have thrown away the '/' at the start of the path //add it back in if (Port && (! StrLen(*Port)) && StrLen(tProto)) { if (strcmp(tProto,"http")==0) *Port=CopyStr(*Port,"80"); else if (strcmp(tProto,"https")==0) *Port=CopyStr(*Port,"443"); else if (strcmp(tProto,"ssh")==0) *Port=CopyStr(*Port,"22"); else if (strcmp(tProto,"ftp")==0) *Port=CopyStr(*Port,"21"); else if (strcmp(tProto,"telnet")==0) *Port=CopyStr(*Port,"23"); else if (strcmp(tProto,"smtp")==0) *Port=CopyStr(*Port,"25"); else if (strcmp(tProto,"mailto")==0) *Port=CopyStr(*Port,"25"); } DestroyString(Token); DestroyString(tProto); } void ParseConnectDetails(const char *Str, char **Type, char **Host, char **Port, char **User, char **Pass, char **Path) { char *ptr, *Token=NULL, *Args=NULL; ptr=GetToken(Str," ",&Token,0); ParseURL(Token, Type, Host, Port, User, Pass, Path, &Args); if (Path && StrLen(Args)) *Path=MCatStr(*Path,"?",Args,NULL); while (ptr) { if (strcmp(Token,"-password")==0) ptr=GetToken(ptr," ",Pass,0); else if (strcmp(Token,"-keyfile")==0) { ptr=GetToken(ptr," ",&Token,0); *Pass=MCopyStr(*Pass,"keyfile:",Token,NULL); } ptr=GetToken(ptr," ",&Token,0); } DestroyString(Token); DestroyString(Args); } hashrat-1.6.1/libUseful-2.1/ParseURL.h0000644000175000017550000000102112470734537017766 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_PARSEURL #define LIBUSEFUL_PARSEURL #include "includes.h" #ifdef __cplusplus extern "C" { #endif void ParseURL(const char *URL, char **Proto, char **Host, char **Port, char **User, char **Password, char **Path, char **Args); void ParseConnectDetails(const char *Str, char **Type, char **Host, char **Port, char **User, char **Pass, char **InitDir); void ParseConnectHop(const char *Line, int *Type, char **Host, char **User, char **Password, char **KeyFile, int *Port); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/PatternMatch.c0000644000175000017550000003043412470734537020730 0ustar metacosm89metacosm89#include "PatternMatch.h" typedef enum {MATCH_FAIL, MATCH_FOUND, MATCH_ONE, MATCH_MANY, MATCH_REPEAT, MATCH_CONT, MATCH_QUOT, MATCH_START, MATCH_CHARLIST, MATCH_HEX, MATCH_OCTAL, MATCH_SWITCH_ON, MATCH_SWITCH_OFF} TPMatchElements; //Gets Called recursively int pmatch_char(char **P_PtrPtr, char **S_PtrPtr, int *Flags); int pmatch_search(char *Pattern, char **S_PtrPtr, char *S_End, char **Start, char **End, int *Flags); int pmatch_ascii(char *P_Ptr,char S_Char,int Type) { char ValStr[4]; int P_Char=-1; if (Type==MATCH_HEX) { strncpy(ValStr,P_Ptr,2); P_Char=strtol(P_Ptr,NULL,16); } if (Type==MATCH_OCTAL) { strncpy(ValStr,P_Ptr,3); P_Char=strtol(P_Ptr,NULL,8); } if (P_Char==-1) return(FALSE); if (P_Char==S_Char) return(TRUE); return(FALSE); } void pmatch_switch(char SwitchType, char SwitchOnOrOff, int *Flags) { int NewFlag=0, OnOrOff=FALSE; if (SwitchOnOrOff==MATCH_SWITCH_ON) OnOrOff=TRUE; else if (SwitchOnOrOff==MATCH_SWITCH_OFF) OnOrOff=FALSE; else return; switch (SwitchType) { //These switches have the opposite meaning to the flags they control. //+C turns case sensitivity on, but the flag is 'PMATCH_NOCASE' that //turns it off, so we need to invert the sense of 'OnOrOff' case 'C': NewFlag=PMATCH_NOCASE; OnOrOff= !OnOrOff; break; case 'W': NewFlag=PMATCH_NOWILDCARDS; OnOrOff= !OnOrOff; break; case 'X': NewFlag=PMATCH_NOEXTRACT; OnOrOff= !OnOrOff; break; case 'N': NewFlag=PMATCH_NEWLINEEND; break; } if (OnOrOff) *Flags |= NewFlag; else *Flags &= ~NewFlag; } int pmatch_quot(char **P_PtrPtr, char **S_PtrPtr, int *Flags) { int result=MATCH_FAIL, OldFlags; char P_Char, S_Char, *OldPos; P_Char=**P_PtrPtr; S_Char=**S_PtrPtr; switch (P_Char) { case 'b': if (S_Char=='\b') result=MATCH_ONE; break; case 'e': if (S_Char==27) result=MATCH_ONE; break; //escape case 'n': if (S_Char=='\n') result=MATCH_ONE; break; case 'r': if (S_Char=='\r') result=MATCH_ONE; break; case 't': if (S_Char==' ') result=MATCH_ONE; break; case 'l': if (islower(S_Char)) result=MATCH_ONE; break; case 'x': result=MATCH_HEX; break; case 'A': if (isalpha(S_Char)) result=MATCH_ONE; break; case 'B': if (isalnum(S_Char)) result=MATCH_ONE; break; case 'D': if (isdigit(S_Char)) result=MATCH_ONE; break; case 'S': /* if ((S_Char=='\x1b') && (*((*S_PtrPtr)+1)=='[')) { //treat vt escape seqences as space while ((S_Char !='m') && (S_Char != '\0')) { (*S_PtrPtr)++; S_Char=**S_PtrPtr; } result=MATCH_ONE; } */ if (isspace(S_Char)) result=MATCH_ONE; break; case 'P': if (ispunct(S_Char)) result=MATCH_ONE; break; case 'X': if (isxdigit(S_Char)) result=MATCH_ONE; break; case 'U': if (isupper(S_Char)) result=MATCH_ONE; break; case '+': result=MATCH_SWITCH_ON; break; case '-': result=MATCH_SWITCH_OFF; break; default: if (S_Char==P_Char) result=MATCH_ONE; break; } switch (result) { case MATCH_ONE: (*P_PtrPtr)++; break; case MATCH_HEX: if (! pmatch_ascii((*P_PtrPtr)+1,S_Char,MATCH_HEX)) return(MATCH_FAIL); (*P_PtrPtr)+=2; break; case MATCH_OCTAL: if (! pmatch_ascii((*P_PtrPtr)+1,S_Char,MATCH_OCTAL)) return(MATCH_FAIL); (*P_PtrPtr)+=3; break; case MATCH_SWITCH_ON: case MATCH_SWITCH_OFF: //some switches need to be applied in order for a pattern to match //(like the case-insensitive switch) others should only be applied if //it matches. So we apply the switch, but if the subsequent pmatch_char fails //we unapply it OldFlags=*Flags; OldPos=*P_PtrPtr; (*P_PtrPtr)++; //go past the + or - to the actual type pmatch_switch(**P_PtrPtr, result, Flags); (*P_PtrPtr)++; result=pmatch_char(P_PtrPtr, S_PtrPtr, Flags); if ((result==MATCH_FAIL) || (result==MATCH_CONT)) { *P_PtrPtr=OldPos; *Flags=OldFlags; } return(result); break; case MATCH_FAIL: if (*Flags & PMATCH_SUBSTR) return(MATCH_CONT); return(MATCH_FAIL); break; } return(MATCH_ONE); } #define CHARLIST_NOT 1 int pmatch_charlist(char **P_PtrPtr,char S_Char, int Flags) { char P_Char, Prev_Char=0; int result=MATCH_CONT; int mode=0; while (**P_PtrPtr != '\0') { if (Flags & PMATCH_NOCASE) P_Char=tolower(**P_PtrPtr); else P_Char=**P_PtrPtr; if (P_Char==']') break; switch (P_Char) { case '\\': (*P_PtrPtr)++; if (Flags & PMATCH_NOCASE) P_Char=tolower(**P_PtrPtr); else P_Char=**P_PtrPtr; break; case '-': (*P_PtrPtr)++; if (Flags & PMATCH_NOCASE) P_Char=tolower(**P_PtrPtr); else P_Char=**P_PtrPtr; if ((S_Char >= Prev_Char) && (S_Char <= P_Char)) result=MATCH_ONE; break; case '!': mode |= CHARLIST_NOT; break; default: if (P_Char == S_Char) result=MATCH_ONE; break; } Prev_Char=P_Char; (*P_PtrPtr)++; } //go beyond ']' (*P_PtrPtr)++; if (mode & CHARLIST_NOT) { if (result==MATCH_ONE) result=MATCH_CONT; else result=MATCH_ONE; } return(result); } int pmatch_repeat(char **P_PtrPtr, char **S_PtrPtr, char *S_End, int *Flags) { char *SubPattern=NULL, *sp_ptr, *ptr; int count=0, i, val=0, result=MATCH_FAIL; ptr=*P_PtrPtr; while ( ((**P_PtrPtr) != '}') && ((**P_PtrPtr) != '\0') ) (*P_PtrPtr)++; if ((**P_PtrPtr)=='\0') return(MATCH_FAIL); SubPattern=CopyStrLen(SubPattern,ptr,*P_PtrPtr - ptr); sp_ptr=strchr(SubPattern,'|'); if (sp_ptr) { *sp_ptr='\0'; sp_ptr++; count=atoi(SubPattern); for (i=0; i < count; i++) { val=0; result=pmatch_search(sp_ptr, S_PtrPtr, S_End, NULL, NULL, &val); if (result==MATCH_CONT) result=MATCH_FAIL; if (result==MATCH_FAIL) break; } } (*S_PtrPtr)--; (*P_PtrPtr)++; DestroyString(SubPattern); return(result); } int pmatch_char(char **P_PtrPtr, char **S_PtrPtr, int *Flags) { char P_Char, S_Char, *P_Start; int result=MATCH_FAIL; P_Start=*P_PtrPtr; if (*Flags & PMATCH_NOCASE) { P_Char=tolower(**P_PtrPtr); S_Char=tolower(**S_PtrPtr); } else { P_Char=**P_PtrPtr; S_Char=**S_PtrPtr; } //we must still honor switches even if 'nowildcards' is set, as we may want to turn //'nowildcards' off, or turn case or extraction features on or off if (*Flags & PMATCH_NOWILDCARDS) { if ( (P_Char=='\\') && ((*(*P_PtrPtr+1)=='+') || (*(*P_PtrPtr+1)=='-')) ) /*This is a switch, fall through and process it */ ; else if (P_Char==S_Char) return(MATCH_ONE); else return(MATCH_FAIL); } switch (P_Char) { case '\0': result=MATCH_FOUND; break; case '|': result=MATCH_FOUND; break; case '*': result=MATCH_MANY;break; case '?': (*P_PtrPtr)++; result=MATCH_ONE;break; case '^': (*P_PtrPtr)++; result=MATCH_START; break; case '$': if (S_Char=='\0') result=MATCH_FOUND; else if ((*Flags & PMATCH_NEWLINEEND) && (S_Char=='\n')) result=MATCH_FOUND; break; case '[': (*P_PtrPtr)++; result=pmatch_charlist(P_PtrPtr,S_Char,*Flags); break; case '{': (*P_PtrPtr)++; result=MATCH_REPEAT; break; case '\\': //results here can either be MATCH_FAIL, MATCH_CONT, MATCH_ONE (*P_PtrPtr)++; result=pmatch_quot(P_PtrPtr, S_PtrPtr, Flags); break; default: (*P_PtrPtr)++; if (P_Char==S_Char) result=MATCH_ONE; else if (*Flags & PMATCH_SUBSTR) result=MATCH_CONT; else result=MATCH_FAIL; break; } if ((result==MATCH_CONT) || (result==MATCH_FAIL)) *(P_PtrPtr)=P_Start; return(result); } //Somewhat ugly, as we need to iterate through the string, so we need it passed as a ** int pmatch_search(char *Pattern, char **S_PtrPtr, char *S_End, char **MatchStart, char **MatchEnd, int *Flags) { int result; char *P_Ptr, *ptr, *S_Start; if (MatchStart) *MatchStart=NULL; if (MatchEnd) *MatchEnd=NULL; P_Ptr=Pattern; S_Start=*S_PtrPtr; result=pmatch_char(&P_Ptr, S_PtrPtr, Flags); while (*S_PtrPtr <= S_End) { switch (result) { case MATCH_FAIL: if (*Flags & PMATCH_SUBSTR) return(MATCH_CONT); return(MATCH_FAIL); break; //Match failed, but we're looking for a substring of 'String' so continue searching for match case MATCH_CONT: if (! (*Flags & PMATCH_SUBSTR)) return(MATCH_FAIL); //if we were some ways through a pattern before hitting the character //that failed the match, then we must rewind to reconsider that character //as a fresh match //if ((*P_Ptr != *Pattern) && (*Pattern != '^')) (*S_PtrPtr)--; if ((*P_Ptr != *Pattern) ) (*S_PtrPtr)--; P_Ptr=Pattern; break; case MATCH_START: if (*Flags & PMATCH_NOTSTART) return(MATCH_FAIL); (*S_PtrPtr)--; //naughty, were are now pointing before String, but the //S_Ptr++ below will correct this break; case MATCH_FOUND: if (*Flags & PMATCH_NOEXTRACT) { //This is to prevent returning NULL strings in 'MatchStart' and 'MatchEnd' if (MatchStart && (! *MatchStart)) *MatchStart=S_Start; if (MatchEnd && (! *MatchEnd)) *MatchEnd=*MatchStart; } //else if (MatchEnd) *MatchEnd=*S_PtrPtr; return(MATCH_ONE); break; //Match many is a special case. We have too look ahead to see if the next char //Matches, and thus takes us out of 'match many' howerver, If the call to pmatch_char //fails then we have to rewind the pattern pointer to match many's '*' and go round again case MATCH_MANY: ptr=P_Ptr; P_Ptr++; //pmatch_char will think that if we've reached the end of the pattern, then we've got //a match, regardless of where we are in the string. However, this is the one case where //'*' needs to be a little 'greedy'. If the last item in the pattern was '*' (match many) //then we need to continue until we read the end of the string if (*P_Ptr=='\0') { if (*S_PtrPtr == S_End) result=MATCH_FOUND; else result=MATCH_FAIL; } else { if (*S_PtrPtr == S_End) result=MATCH_FAIL; else result=pmatch_char(&P_Ptr, S_PtrPtr, Flags); } if ((result==MATCH_FAIL) || (result==MATCH_CONT)) P_Ptr=ptr; break; case MATCH_REPEAT: result=pmatch_repeat(&P_Ptr, S_PtrPtr, S_End, Flags); if (result==MATCH_FAIL) { if (*Flags & PMATCH_SUBSTR) return(MATCH_CONT); return(MATCH_FAIL); } break; } if ((result==MATCH_CONT) ) { if (MatchStart) *MatchStart=NULL; if (MatchEnd) *MatchEnd=NULL; } else if (! (*Flags & PMATCH_NOEXTRACT)) { if (MatchStart && (*S_PtrPtr >= S_Start) && (! *MatchStart)) *MatchStart=*S_PtrPtr; if (MatchEnd && ((*(S_PtrPtr)+1) < S_End)) *MatchEnd=(*S_PtrPtr)+1; } //Handle 'MATCH_FOUND' in the switch statement, don't iterate further through Pattern or String if (result==MATCH_FOUND) continue; (*S_PtrPtr)++; //if (*S_PtrPtr > S_End) break; result=pmatch_char(&P_Ptr, S_PtrPtr, Flags); } //if pattern not exhausted then we didn't get a match if (*P_Ptr !='\0') return(MATCH_CONT); return(MATCH_ONE); } //Wrapper around pmatch_search to make it more user friendly int pmatch_process_one(char *Pattern, char *String, int len, char **Start, char **End, int Flags) { char *S_Ptr, *S_End; S_Ptr=String; S_End=String+len; if (Start) *Start=NULL; if (End) *End=NULL; return(pmatch_search(Pattern, &S_Ptr, S_End, Start, End, &Flags)); } int pmatch_process(char **Compiled, char *String, int len, ListNode *Matches, int iFlags) { //p_ptr points to the pattern from 'Compiled' that's currently being //tested. s_ptr holds our progress through the string char **p_ptr; char *s_ptr, *s_end; char *Start=NULL, *End=NULL; int result, Flags; TPMatch *Match; int NoOfItems=0; Flags=iFlags &= ~PMATCH_SUBSTR; s_end=String+len; //We handle PMATCH substr in this function for (s_ptr=String; s_ptr < s_end; s_ptr++) { for (p_ptr=Compiled; *p_ptr != NULL; p_ptr++) { result=pmatch_process_one(*p_ptr, s_ptr, s_end-s_ptr, &Start, &End, Flags); if (result==MATCH_ONE) { NoOfItems++; if (Matches) { Match=(TPMatch *) calloc(1, sizeof(TPMatch)); Match->Start=Start; Match->End=End; ListAddItem(Matches,Match); } } } Flags |= PMATCH_NOTSTART; } return(NoOfItems); } void pmatch_compile(char *Pattern, char ***Compiled) { int NoOfRecords=0, NoOfItems=0; char *ptr; ptr=Pattern; while (ptr && (*ptr != '\0')) { //while ((*ptr=='?') || (*ptr=='*')) ptr++; NoOfItems++; if (NoOfItems >= NoOfRecords) { NoOfRecords+=10; *Compiled=(char **) realloc(*Compiled,NoOfRecords*sizeof(char *)); } (*Compiled)[NoOfItems-1]=ptr; while ((*ptr !='\0') && (*ptr != '|')) ptr++; if (*ptr=='|') ptr++; } *Compiled=(char **) realloc(*Compiled,(NoOfRecords+1)*sizeof(char *)); (*Compiled)[NoOfItems]=NULL; } int pmatch(char *Pattern, char *String, int Len, ListNode *Matches, int Flags) { char *ptr, **Compiled=NULL; int result, len; pmatch_compile(Pattern,&Compiled); ptr=String; len=Len; result=pmatch_process(Compiled, ptr, len, Matches, Flags); if (Compiled) free(Compiled); return(result); } hashrat-1.6.1/libUseful-2.1/PatternMatch.h0000644000175000017550000000074312470734537020735 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_MATCHPATTERN #define LIBUSEFUL_MATCHPATTERN #define PMATCH_SUBSTR 1 #define PMATCH_NOWILDCARDS 2 #define PMATCH_NOCASE 4 #define PMATCH_NOEXTRACT 8 #define PMATCH_NEWLINEEND 16 #define PMATCH_NOTSTART 32 #define PMATCH_NOTEND 64 #include "includes.h" #ifdef __cplusplus extern "C" { #endif typedef struct { char *Start; char *End; } TPMatch; int pmatch(char *Pattern, char *String, int Len, ListNode *Matches, int Flags); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/README0000644000175000017550000000014512470646505017043 0ustar metacosm89metacosm89libUseful is a 'C' library of useful functions. Documentation not yet prepared, but coming soonish. hashrat-1.6.1/libUseful-2.1/SpawnPrograms.c0000644000175000017550000001651412470734537021144 0ustar metacosm89metacosm89#include "SpawnPrograms.h" #include "Log.h" #include "pty.h" #include "file.h" #include "string.h" #include char *MakeShellSafeString(char *RetStr, const char *String, int SafeLevel) { char *Tempstr=NULL; char *BadChars=";|&`"; if (SafeLevel==SHELLSAFE_BLANK) { Tempstr=CopyStr(RetStr,String); strmrep(Tempstr,BadChars,' '); } else Tempstr=QuoteCharsInStr(RetStr,String,BadChars); if (strcmp(Tempstr,String) !=0) { //if (EventCallback) EventCallback(String); } return(Tempstr); } void SwitchProgram(const char *CommandLine, const char *User,const char *Group, const char *Dir) { char **argv, *ptr; char *Token=NULL, *SafeStr=NULL; int i; SafeStr=MakeShellSafeString(SafeStr,CommandLine,0); argv=(char **) calloc(101,sizeof(char *)); ptr=SafeStr; for (i=0; i < 100; i++) { ptr=GetToken(ptr,"\\S",&Token,GETTOKEN_QUOTES); if (! ptr) break; argv[i]=CopyStr(argv[i],Token); } if (StrLen(Dir)) chdir(Dir); if (StrLen(Group)) SwitchGroup(Group); if (StrLen(User)) SwitchUser(User); DestroyString(Token); DestroyString(SafeStr); /* we are the child so we continue */ execv(argv[0],argv); //no point trying to free stuff here, we will no longer //be the main program } pid_t ForkWithContext(const char *User, const char *Dir, const char *Group) { pid_t pid; LogFileFlushAll(TRUE); pid=fork(); if (pid==0) { if (StrLen(Dir)) chdir(Dir); if (StrLen(Group)) SwitchGroup(Group); if (StrLen(User)) SwitchUser(User); } return(pid); } /* This function turns our process into a demon */ int demonize() { int result, i=0; LogFileFlushAll(TRUE); //Don't fork with context here, as a demonize involves two forks, so //it's wasted work here. result=fork(); if (result != 0) exit(0); /*we can only get to here if result= 0 i.e. we are the child process*/ setsid(); result=ForkWithContext(NULL, NULL, NULL); if (result !=0) exit(0); umask(0); /* close stdin, stdout and std error, but only if they are a tty. In some */ /* situations (like working out of cron) we may not have been given in/out/err */ /* and thus the first files we open will be 0,1,2. If we close them, we will have */ /* closed files that we need! Alternatively, the user may have used shell redirection */ /* to send output for a file, and I'm sure they don't want us to close that file */ //for (i=0; i < 3; i++) { if (isatty(i)) { close(i); /* reopen to /dev/null so that any output gets thrown away */ /* but the program still has somewhere to write to */ open("/dev/null",O_RDWR); } } return(1); } int ForkWithIO(int StdIn, int StdOut, int StdErr) { pid_t pid; int fd; pid=ForkWithContext(NULL, NULL, NULL); if (pid==0) { if (StdIn > -1) { if (StdIn !=0) { close(0); dup(StdIn); } } else { fd=open("/dev/null",O_RDONLY); dup(fd); close(fd); } if (StdOut > -1) { if (StdOut !=1) { close(1); dup(StdOut); } } else { fd=open("/dev/null",O_WRONLY); dup(fd); close(fd); } if (StdErr > -1) { if (StdErr !=2) { close(2); dup(StdErr); } } } /* WTF?! Why do this in the parent? else { fd=open("/dev/null",O_WRONLY); dup(fd); close(fd); } */ return(pid); } pid_t SpawnWithIO(const char *CommandLine, int StdIn, int StdOut, int StdErr) { pid_t pid; pid=ForkWithIO(StdIn,StdOut,StdErr); if (pid==0) { SwitchProgram(CommandLine,NULL,NULL,NULL); _exit(pid); } return(pid); } int Spawn(const char *ProgName, const char *User, const char *Group, const char *Dir) { int pid; pid=ForkWithIO(0,1,2); if (pid==0) { SwitchProgram(ProgName, User, Group, Dir); _exit(pid); } return(pid); } /* This creates a child process that we can talk to using a couple of pipes*/ pid_t PipeSpawnFunction(int *infd,int *outfd,int *errfd, BASIC_FUNC Func, void *Data ) { pid_t pid; int channel1[2], channel2[2], channel3[2], DevNull=-1; if (infd) pipe(channel1); if (outfd) pipe(channel2); if (errfd) pipe(channel3); pid=ForkWithContext(NULL,NULL,NULL); if (pid==0) { /* we are the child */ if (infd) close(channel1[1]); else if (DevNull==-1) DevNull=open("/dev/null",O_RDWR); if (outfd) close(channel2[0]); else if (DevNull==-1) DevNull=open("/dev/null",O_RDWR); if (errfd) close(channel3[0]); else if (DevNull==-1) DevNull=open("/dev/null",O_RDWR); /*close stdin, stdout and stderr*/ close(0); close(1); close(2); /*channel 1 is going to be our stdin, so we close the writing side of it*/ if (infd) dup(channel1[0]); else dup(DevNull); /* channel 2 is stdout */ if (outfd) dup(channel2[1]); else dup(DevNull); /* channel 3 is stderr */ if (errfd) { //Yes, we can pass an integer value as errfd, even though it's an int *. //This is probably a bad idea, and will likely be changed in future releases if (errfd==(int) COMMS_COMBINE_STDERR) dup(channel2[1]); else dup(channel3[1]); } else dup(DevNull); Func(Data); exit(0); } else { /* we close the appropriate halves of the link */ if (infd) { close(channel1[0]); *infd=channel1[1]; } if (outfd) { close(channel2[1]); *outfd=channel2[0]; } if (errfd) { close(channel3[1]); //Yes, we can pass an integer value as errfd, even though it's an int *. //This is probably a bad idea, and will likely be changed in future releases if (errfd != (int) COMMS_COMBINE_STDERR) *errfd=channel3[0]; } } return(pid); } int BASIC_FUNC_EXEC_COMMAND(void *Command) { char *SafeStr=NULL; int result; SafeStr=MakeShellSafeString(SafeStr,Command,0); result=execl("/bin/sh","/bin/sh","-c",(char *) SafeStr,NULL); DestroyString(SafeStr); return(result); } pid_t PipeSpawn(int *infd,int *outfd,int *errfd, const char *Command) { return(PipeSpawnFunction(infd,outfd,errfd, BASIC_FUNC_EXEC_COMMAND, (void *) Command)); } pid_t PseudoTTYSpawnFunction(int *ret_pty, BASIC_FUNC Func, void *Data, int TTYFlags) { pid_t pid=-1; int tty, pty, i; if (GrabPseudoTTY(&pty, &tty, TTYFlags)) { pid=ForkWithContext(NULL,NULL,NULL); if (pid==0) { for (i=0; i < 4; i++) close(i); close(pty); setsid(); ioctl(tty,TIOCSCTTY,0); dup(tty); dup(tty); dup(tty); ///now that we've dupped it, we don't need to keep it open //as it will be open on stdin/stdout close(tty); Func((char *) Data); _exit(0); } close(tty); } *ret_pty=pty; return(pid); } pid_t PseudoTTYSpawn(int *pty, const char *Command, int TTYFlags) { return(PseudoTTYSpawnFunction(pty, BASIC_FUNC_EXEC_COMMAND, (void *) Command,TTYFlags)); } STREAM *STREAMSpawnCommand(const char *Command, int Flags) { int to_fd, from_fd; pid_t pid; STREAM *S=NULL; char *Tempstr=NULL; if (Flags & SPAWN_TRUST_COMMAND) Tempstr=CopyStr(Tempstr,Command); else Tempstr=MakeShellSafeString(Tempstr, Command, 0); if (Flags & COMMS_BY_PTY) { pid=PseudoTTYSpawn(&to_fd,Tempstr,Flags); if (pid > 0) S=STREAMFromFD(to_fd); } else { if (Flags & COMMS_COMBINE_STDERR) { pid=PipeSpawn(&to_fd, &from_fd, COMMS_COMBINE_STDERR, Tempstr); } else pid=PipeSpawn(&to_fd, &from_fd, NULL, Tempstr); if (pid > 0) S=STREAMFromDualFD(from_fd, to_fd); } if (S) { STREAMSetFlushType(S,FLUSH_LINE,0,0); Tempstr=FormatStr(Tempstr,"%d",pid); STREAMSetValue(S,"PeerPID",Tempstr); } DestroyString(Tempstr); return(S); } STREAM *STREAMSpawnFunction(BASIC_FUNC Func, void *Data) { int to_fd, from_fd; pid_t pid; STREAM *S=NULL; char *Tempstr=NULL; pid=PipeSpawnFunction(&to_fd, &from_fd, COMMS_COMBINE_STDERR, Func, Data ); if (pid > 0) S=STREAMFromDualFD(from_fd, to_fd); if (S) { STREAMSetFlushType(S,FLUSH_LINE,0,0); Tempstr=FormatStr(Tempstr,"%d",pid); STREAMSetValue(S,"PeerPID",Tempstr); } DestroyString(Tempstr); return(S); } hashrat-1.6.1/libUseful-2.1/SpawnPrograms.h0000644000175000017550000000231012470734537021136 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_SPAWN_H #define LIBUSEFUL_SPAWN_H #include "includes.h" #ifdef __cplusplus extern "C" { #endif #define COMMS_BY_PIPE 0 #define COMMS_BY_PTY 1 #define SPAWN_TRUST_COMMAND 2 #define COMMS_COMBINE_STDERR 4 //up to 128, beyond that is TTYFLAG_ #define SHELLSAFE_BLANK 1 char *MakeShellSafeString(char *RetStr, const char *String, int SafeLevel); void SwitchProgram(const char *CommandLine, const char *User, const char *Group, const char *Dir); int ForkWithContext(); /* This function turns our process into a demon */ int demonize(); int ForkWithIO(int StdIn, int StdOut, int StdErr); int SpawnWithIO(const char *CommandLine, int StdIn, int StdOut, int StdErr); int Spawn(const char *ProgName, const char *User, const char *Group, const char *Dir); /* This creates a child process that we can talk to using a couple of pipes*/ int PipeSpawnFunction(int *infd,int *outfd,int *errfd, BASIC_FUNC Func, void *Data ); int PipeSpawn(int *infd,int *outfd,int *errfd, const char *Command); int PseudoTTYSpawn(int *pty, const char *Command, int Flags); STREAM *STREAMSpawnCommand(const char *Command, int Type); STREAM *STREAMSpawnFunction(BASIC_FUNC Func, void *Data); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/Time.c0000644000175000017550000000303712470734537017233 0ustar metacosm89metacosm89#include "Time.h" char *GetDateStrFromSecs(char *DateFormat, time_t Secs, char *TimeZone) { time_t val; struct tm *TMS; static char *Buffer=NULL; char *Tempstr=NULL; #define DATE_BUFF_LEN 255 val=Secs; if (StrLen(TimeZone)) { if (getenv("TZ")) Tempstr=CopyStr(Tempstr,getenv("TZ")); setenv("TZ",TimeZone,TRUE); tzset(); } TMS=localtime(&val); if (StrLen(TimeZone)) { if (! Tempstr) unsetenv("TZ"); else setenv("TZ",Tempstr,TRUE); tzset(); } val=StrLen(DateFormat)+ DATE_BUFF_LEN; Buffer=SetStrLen(Buffer,val); strftime(Buffer,val,DateFormat,TMS); DestroyString(Tempstr); return(Buffer); } char *GetDateStr(char *DateFormat, char *TimeZone) { time_t Now; time(&Now); return(GetDateStrFromSecs(DateFormat, Now, TimeZone)); } time_t DateStrToSecs(char *DateFormat, char *Str, char *TimeZone) { time_t Secs=0; struct tm TMS; char *Tempstr=NULL; if (StrLen(DateFormat)==0) return(0); if (StrLen(Str)==0) return(0); if (StrLen(TimeZone)) { if (getenv("TZ")) Tempstr=CopyStr(Tempstr,getenv("TZ")); setenv("TZ",TimeZone,TRUE); tzset(); } strptime(Str,DateFormat,&TMS); TMS.tm_isdst=-1; Secs=mktime(&TMS); if (StrLen(TimeZone)) { if (! Tempstr) unsetenv("TZ"); else setenv("TZ",Tempstr,TRUE); tzset(); } return(Secs); } /* A general 'Set Timer' function, Useful for timing out */ /* socket connections etc */ void SetTimeout(int timeout) { struct sigaction SigAct; SigAct.sa_handler=&ColLibDefaultSignalHandler; SigAct.sa_flags=SA_RESETHAND; //SigAct.sa_restorer=NULL; sigaction(SIGALRM,&SigAct,NULL); alarm(timeout); } hashrat-1.6.1/libUseful-2.1/Time.h0000644000175000017550000000057112470734537017240 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_TIME_H #define LIBUSEFUL_TIME_H #include "includes.h" #ifdef __cplusplus extern "C" { #endif char *GetDateStrFromSecs(char *DateFormat, time_t Secs, char *TimeZone); char *GetDateStr(char *DateFormat, char *TimeZone); time_t DateStrToSecs(char *DateFormat, char *Str, char *TimeZone); void SetTimeout(int timeout); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/Tokenizer.c0000644000175000017550000000731312470734537020310 0ustar metacosm89metacosm89#include "includes.h" #include "Tokenizer.h" #include "string.h" #define TOK_SPACE 1 int GetTokenSepMatch(const char *Pattern,const char **start, const char **end, int Flags) { const char *pptr, *eptr; char Quote='\0'; int MatchType=0; //if start and end pointers are same, then we've no string if (*start==*end) return(FALSE); pptr=Pattern; eptr=*start; while (1) { //check the current 'pattern' char switch (*pptr) { //if we run out of pattern, then we got a match case '\0': *end=eptr; return(TRUE); break; //in multiseparator mode a '|' is the same as '\0' case '|': if (Flags & GETTOKEN_MULTI_SEPARATORS) { *end=eptr; return(TRUE); } break; //Quoted char case '\\': pptr++; if (*pptr=='S') MatchType=TOK_SPACE; break; } switch (*eptr) { //if we run out of string, then we got a part match, but its not //a full match, so we return fail case '\0': return(FALSE); break; case '\\': //if we got a quoted character we can't have found //the separator, so return false eptr++; *start=eptr; return(FALSE); break; case '"': case '\'': if (Flags & GETTOKEN_HONOR_QUOTES) { Quote=*eptr; eptr++; while ((*eptr != Quote) && (*eptr != '\0')) { //handle quoted chars if ((*eptr=='\\') && (*(eptr+1) != '\0'))eptr++; eptr++; } if (*eptr == '\0') eptr--; //because there's a ++ below *start=eptr; return(FALSE); } else if (*eptr != *pptr) return(FALSE); break; case ' ': case ' ': case '\n': case '\r': if (MatchType==TOK_SPACE) { while (isspace(*eptr)) eptr++; eptr--; MatchType=0; } else if (*eptr != *pptr) return(FALSE); break; default: if (MatchType != 0) return(FALSE); if (*eptr != *pptr) return(FALSE); break; } pptr++; eptr++; } return(FALSE); } int GetTokenFindSeparator(const char *Pattern, const char *String, const char **SepStart, const char **SepEnd, int Flags) { const char *start_ptr=NULL, *end_ptr=NULL, *ptr; start_ptr=String; while (*start_ptr != '\0') { if (*start_ptr=='\\') { start_ptr++; start_ptr++; } ptr=Pattern; while (ptr) { if (GetTokenSepMatch(ptr,&start_ptr, &end_ptr, Flags)) { *SepStart=start_ptr; *SepEnd=end_ptr; return(TRUE); } if (Flags & GETTOKEN_MULTI_SEPARATORS) { ptr=strchr(ptr,'|'); if (ptr) ptr++; } else ptr=NULL; } if ((*start_ptr) !='\0') start_ptr++; } //We found nothing, set sep start to equal end of string *SepStart=start_ptr; return(FALSE); } char *GetToken(const char *SearchStr, const char *Separator, char **Token, int Flags) { const char *SepStart=NULL, *SepEnd=NULL; const char *sptr, *eptr; /* this is a safety measure so that there is always something in Token*/ *Token=CopyStr(*Token,""); if (! SearchStr) return(NULL); if (*SearchStr=='\0') return(NULL); GetTokenFindSeparator(Separator, SearchStr,&SepStart,&SepEnd, Flags); sptr=SearchStr; eptr=SepStart; if (Flags & GETTOKEN_STRIP_QUOTES) { if ((*sptr=='"') || (*sptr=='\'')) { //is character before the sep a quote? If so, we copy one less char, and also start one character later //else we copy the characters as well eptr--; if (*sptr==*eptr) sptr++; else eptr++; } } *Token=CopyStrLen(*Token,sptr,eptr-sptr); //return empty string, but not null if ((! SepEnd) || (*SepEnd=='\0')) { SepEnd=SearchStr+StrLen((char *) SearchStr); } return((char *) SepEnd); } char *GetNameValuePair(const char *Input, const char *PairDelim, const char *NameValueDelim, char **Name, char **Value) { char *ptr, *ptr2; char *Token=NULL; ptr=GetToken(Input,PairDelim,&Token,GETTOKEN_HONOR_QUOTES); if (StrLen(Token)) { ptr2=GetToken(Token,NameValueDelim,Name,GETTOKEN_HONOR_QUOTES); ptr2=GetToken(ptr2,PairDelim,Value,GETTOKEN_HONOR_QUOTES); StripQuotes(*Name); StripQuotes(*Value); } DestroyString(Token); return(ptr); } hashrat-1.6.1/libUseful-2.1/Tokenizer.h0000644000175000017550000000103512470734537020310 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_TOKEN_H #define LIBUSEFUL_TOKEN_H #include #include //for strlen, used below in StrLen #define GETTOKEN_MULTI_SEPARATORS 1 #define GETTOKEN_HONOR_QUOTES 2 #define GETTOKEN_STRIP_QUOTES 4 #define GETTOKEN_QUOTES 6 #ifdef __cplusplus extern "C" { #endif char *GetToken(const char *SearchStr, const char *Delim, char **Token, int Flags); char *GetNameValuePair(const char *Input, const char *PairDelim, const char *NameValueDelim, char **Name, char **Value); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/Vars.c0000644000175000017550000001402412470734537017246 0ustar metacosm89metacosm89#include "includes.h" #include "defines.h" #include "list.h" void SetTypedVar(ListNode *Vars, const char *Name, const char *Data, int ItemType) { ListNode *Node; char *Tempstr=NULL; if (! Vars) return; Tempstr=CopyStr(Tempstr,Name); //strlwr(Tempstr); Node=ListFindNamedItem(Vars,Tempstr); if (Node) Node->Item=(void *) CopyStr((char *) Node->Item,Data); else Node=ListAddNamedItem(Vars,Tempstr,CopyStr(NULL,Data)); Node->ItemType=ItemType; DestroyString(Tempstr); } void SetVar(ListNode *Vars, const char *Name, const char *Data) { SetTypedVar(Vars,Name,Data,0); } char *GetVar(ListNode *Vars, const char *Name) { ListNode *Node; char *Tempstr=NULL; Tempstr=CopyStr(Tempstr,Name); //strlwr(Tempstr); Node=ListFindNamedItem(Vars,Tempstr); DestroyString(Tempstr); if (Node) return((char *) Node->Item); return(NULL); } void UnsetVar(ListNode *Vars,const char *Name) { ListNode *Curr; char *Str=NULL; char *Tempstr=NULL; if (Vars) return; Tempstr=CopyStr(Tempstr,Name); strlwr(Tempstr); Curr=ListFindNamedItem(Vars,Tempstr); if (Curr) { Str=ListDeleteNode(Curr); DestroyString(Str); } DestroyString(Tempstr); } void ClearVars(ListNode *Vars) { ListNode *Curr; char *Str; if (! Vars) return; Curr=ListGetNext(Vars); while (Curr) { Str=ListDeleteNode(Curr); DestroyString(Str); Curr=ListGetNext(Curr); } } void CopyVars(ListNode *Dest, ListNode *Source) { ListNode *Curr; if (! Dest) return; if (! Source) return; Curr=ListGetNext(Source); while (Curr) { SetTypedVar(Dest,Curr->Tag,Curr->Item,Curr->ItemType); Curr=ListGetNext(Curr); } } char *ParseVar(char *Buff, const char **Line, ListNode *LocalVars, int Flags) { char *VarName=NULL, *OutStr=NULL, *Tempstr=NULL; const char *ptr, *vptr; OutStr=Buff; ptr=*Line; switch (*ptr) { //the var name is itself a var, dereference that first case '$': ptr++; Tempstr=ParseVar(Tempstr,&ptr,LocalVars,Flags); break; //Vars in brackets case '(': ptr++; while ((*ptr !=')') && (*ptr !='\0')) { if (*ptr=='$') { ptr++; Tempstr=ParseVar(Tempstr,&ptr,LocalVars,Flags); VarName=CatStr(VarName,Tempstr); } else VarName=AddCharToStr(VarName,*ptr); ptr++; } break; //vars seperated by spaces default: ptr++; while ((! isspace(*ptr)) && (*ptr !='\0')) { if (*ptr=='$') { ptr++; Tempstr=ParseVar(Tempstr,&ptr,LocalVars,Flags); VarName=CatStr(VarName,Tempstr); } else VarName=AddCharToStr(VarName,*ptr); ptr++; } break; } *Line=ptr; //very important! Otherwise the calling process will not //know we have consumed some of the text! //Now lookup var/format/append to output if (! (Flags & SUBS_CASE_VARNAMES)) strlwr(VarName); vptr=GetVar(LocalVars,VarName); if (Flags & SUBS_QUOTE_VARS) OutStr=CatStr(OutStr,"'"); if (Flags & SUBS_STRIP_VARS_WHITESPACE) { Tempstr=CopyStr(Tempstr,vptr); StripTrailingWhitespace(Tempstr); StripLeadingWhitespace(Tempstr); OutStr=CatStr(OutStr,Tempstr); } else OutStr=CatStr(OutStr, vptr); if (Flags & SUBS_QUOTE_VARS) OutStr=CatStr(OutStr,"'"); DestroyString(VarName); DestroyString(Tempstr); return(OutStr); } char *SubstituteVarsInString(char *Buffer, const char *Fmt, ListNode *Vars, int Flags) { char *ReturnStr=NULL, *VarName=NULL, *Tempstr=NULL; const char *FmtPtr; int len=0; ReturnStr=CopyStr(Buffer,""); if (! Fmt) return(ReturnStr); FmtPtr=Fmt; while (*FmtPtr !=0) { switch (*FmtPtr) { case '\\': FmtPtr++; switch (*FmtPtr) { case 't': ReturnStr=AddCharToStr(ReturnStr,' '); len=StrLen(ReturnStr); while ((len % 4) !=0) { ReturnStr=AddCharToStr(ReturnStr,' '); len++; } break; case 'r': ReturnStr=AddCharToStr(ReturnStr,'\r'); len++; break; case 'n': ReturnStr=AddCharToStr(ReturnStr,'\n'); len++; break; default: ReturnStr=AddCharToStr(ReturnStr,*FmtPtr); len++; } break; case '$': FmtPtr++; ReturnStr=ParseVar(ReturnStr, &FmtPtr, Vars, Flags); break; case '"': FmtPtr++; while (*FmtPtr && (*FmtPtr !='"')) { ReturnStr=AddCharToStr(ReturnStr,*FmtPtr); len++; FmtPtr++; } break; default: ReturnStr=AddCharToStr(ReturnStr,*FmtPtr); len++; } FmtPtr++; } DestroyString(Tempstr); DestroyString(VarName); return(ReturnStr); } void ExtractVarsReadVar(const char **Fmt, const char **Msg, ListNode *Vars) { const char *FmtPtr, *MsgPtr; char *VarName=NULL; int len=0; ListNode *Node; FmtPtr=*Fmt; if (*FmtPtr=='(') FmtPtr++; while (*FmtPtr != ')') { VarName=AddCharToBuffer(VarName,len,*FmtPtr); len++; FmtPtr++; } if (*FmtPtr==')') FmtPtr++; MsgPtr=*Msg; while ((*MsgPtr !=0) && (*MsgPtr != *FmtPtr)) { if (*MsgPtr=='"') { do { MsgPtr++; } while ((*MsgPtr != '"') && (*MsgPtr != 0)); } MsgPtr++; } Node=ListFindNamedItem(Vars,VarName); if (Node) Node->Item=(void *) CopyStrLen((char *) Node->Item, *Msg, MsgPtr-*Msg); else Node=ListAddNamedItem(Vars,VarName,CopyStrLen(NULL, *Msg, MsgPtr-*Msg)); *Fmt=FmtPtr; *Msg=MsgPtr; DestroyString(VarName); } char *ExtractVarsGetLiteralString(char *Buffer, const char *InStr) { char *RetStr; const char *ptr; RetStr=Buffer; ptr=InStr; while ((*ptr !=0) && (*ptr !='$') && (*ptr !='?') && (*ptr !='*')) ptr++; RetStr=CopyStrLen(Buffer,InStr,ptr-InStr); return(RetStr); } int ExtractVarsFromString(char *Data, const char *FormatStr, ListNode *Vars) { const char *FmtPtr, *MsgPtr; char *Token=NULL; int Match=TRUE, len; FmtPtr=FormatStr; MsgPtr=Data; while ( (*FmtPtr !=0) && (Match)) { switch (*FmtPtr) { case '?': FmtPtr++; MsgPtr++; break; case '*': FmtPtr++; Token=ExtractVarsGetLiteralString(Token,FmtPtr); len=StrLen(Token); while ( (*MsgPtr !=0) && (strncmp(MsgPtr,Token,len) !=0) ) MsgPtr++; break; case '$': FmtPtr++; ExtractVarsReadVar(&FmtPtr, &MsgPtr, Vars); break; default: if (*FmtPtr != *MsgPtr) { Match=FALSE; } FmtPtr++; MsgPtr++; break; } } DestroyString(Token); return(Match); } hashrat-1.6.1/libUseful-2.1/Vars.h0000644000175000017550000000117412470734537017255 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_VARS_H #define LIBUSEFUL_VARS_H #include "list.h" #ifdef __cplusplus extern "C" { #endif void SetTypedVar(ListNode *Vars, const char *Name, const char *Data, int Type); void SetVar(ListNode *Vars, const char *Name, const char *Data); char *GetVar(ListNode *Vars, const char *Name); void UnsetVar(ListNode *Vars,const char *Name); void ClearVars(ListNode *Vars); void CopyVars(ListNode *Dest, ListNode *Source); char *SubstituteVarsInString(char *Buffer, const char *Fmt, ListNode *Vars, int Flags); int ExtractVarsFromString(char *Data, const char *FormatStr, ListNode *Vars); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/ansi.c0000644000175000017550000000361512470734537017271 0ustar metacosm89metacosm89#include "ansi.h" char *ANSICode(int Color, int BgColor, int Flags) { static char *ANSI=NULL; int FgVal, BgVal; if ((! Color) && (! Flags)) return(""); if ( (Color > 0) && (BgColor > 0) ) { //Bg colors are set into the higher byte of 'attribs', so that we can hold both fg and bg in the //same int, so we must shift them down BgColor=BgColor >> 8; if (Color >= ANSI_DARKGREY) FgVal=90+Color - ANSI_DARKGREY; else FgVal=30+Color-1; if (BgColor >= ANSI_DARKGREY) BgVal=100+BgColor - ANSI_DARKGREY; else BgVal=40+BgColor-1; ANSI=FormatStr(ANSI,"\x1b[%d;%d",FgVal,BgVal); if (Flags) ANSI=CatStr(ANSI,";"); } else if (Color > 0) { if (Color >= ANSI_DARKGREY) FgVal=90+Color - ANSI_DARKGREY; else FgVal=30+Color-1; ANSI=FormatStr(ANSI,"\x1b[%d",FgVal); if (Flags) ANSI=CatStr(ANSI,";"); } else ANSI=CopyStr(ANSI,"\x1b["); if (Flags) { if (Flags & ANSI_BOLD) ANSI=CatStr(ANSI,"01"); if (Flags & ANSI_FAINT) ANSI=CatStr(ANSI,"02"); if (Flags & ANSI_UNDER) ANSI=CatStr(ANSI,"04"); if (Flags & ANSI_BLINK) ANSI=CatStr(ANSI,"05"); if (Flags & ANSI_INVERSE) ANSI=CatStr(ANSI,"07"); } ANSI=CatStr(ANSI,"m"); return(ANSI); } char *TerminalReadText(char *RetStr, int Flags, STREAM *S) { int inchar, len=0; char outchar; inchar=STREAMReadChar(S); while (inchar != EOF) { if (Flags & TERM_SHOWTEXT) outchar=inchar & 0xFF; if (Flags & TERM_SHOWSTARS) { if ((outchar & 0xFF) =='\n') outchar=inchar & 0xFF; else if ((outchar & 0xFF) =='\b') outchar=inchar & 0xFF; else outchar='*'; } if (Flags & TERM_SHOWTEXTSTARS) { switch (inchar) { case '\n': case '\r': case 0x08: break; default: if (len > 0) STREAMWriteString("\x08*",S); break; } outchar=inchar & 0xFF; } STREAMWriteBytes(S, &outchar,1); STREAMFlush(S); if (inchar == '\n') break; if (inchar == '\r') break; RetStr=AddCharToBuffer(RetStr,len++, inchar & 0xFF); inchar=STREAMReadChar(S); } return(RetStr); } hashrat-1.6.1/libUseful-2.1/ansi.h0000644000175000017550000000153712470734537017277 0ustar metacosm89metacosm89 #ifndef LIBUSEFUL_ANSI_H #define LIBUSEFUL_ANSI_H #include "includes.h" #ifdef __cplusplus extern "C" { #endif typedef enum {ANSI_NONE, ANSI_BLACK, ANSI_RED, ANSI_GREEN, ANSI_YELLOW, ANSI_BLUE, ANSI_MAGENTA, ANSI_CYAN, ANSI_WHITE, ANSI_RESET, ANSI_RESET2, ANSI_DARKGREY, ANSI_LIGHTRED, ANSI_LIGHTGREEN, ANSI_LIGHTYELLOW, ANSI_LIGHTBLUE, ANSI_LIGHTMAGENTA, ANSI_LIGHTCYAN, ANSI_LIGHTWHITE} T_ANSI_COLORS; #define TERM_SHOWTEXT 1 #define TERM_SHOWSTARS 2 #define TERM_SHOWTEXTSTARS 4 #define ANSI_HIDE 65536 #define ANSI_BOLD 131072 #define ANSI_FAINT 262144 #define ANSI_UNDER 524288 #define ANSI_BLINK 1048576 #define ANSI_INVERSE 2097152 #define ANSI_NORM "\x1b[0m" #define ANSI_BACKSPACE 0x08 char *ANSICode(int Color, int BgColor, int Flags); char *TerminalReadText(char *RetStr, int Flags, STREAM *S); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/base64.c0000644000175000017550000000565312470734537017427 0ustar metacosm89metacosm89/* * base64.c -- base-64 conversion routines. * * For license terms, see the file COPYING in this directory. * * This base 64 encoding is defined in RFC2045 section 6.8, * "Base64 Content-Transfer-Encoding", but lines must not be broken in the * scheme used here. */ #include #include "defines.h" #define BAD -1 static const char base64val[] = { BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD, 62, BAD,BAD,BAD, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,BAD,BAD, BAD,BAD,BAD,BAD, BAD, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,BAD, BAD,BAD,BAD,BAD, BAD, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,BAD, BAD,BAD,BAD,BAD }; #define DECODE64(c) (isascii(c) ? base64val[c] : BAD) void Radix64frombits(unsigned char *out, const unsigned char *in, int inlen, const char *base64digits, char pad) /* raw bytes in quasi-big-endian order to base 64 string (NUL-terminated) */ { for (; inlen >= 3; inlen -= 3) { *out++ = base64digits[in[0] >> 2]; *out++ = base64digits[((in[0] << 4) & 0x30) | (in[1] >> 4)]; *out++ = base64digits[((in[1] << 2) & 0x3c) | (in[2] >> 6)]; *out++ = base64digits[in[2] & 0x3f]; in += 3; } if (inlen > 0) { unsigned char fragment; *out++ = base64digits[in[0] >> 2]; fragment = (in[0] << 4) & 0x30; if (inlen > 1) fragment |= in[1] >> 4; *out++ = base64digits[fragment]; *out++ = (inlen < 2) ? pad : base64digits[(in[1] << 2) & 0x3c]; *out++ = pad; } *out = '\0'; } void to64frombits(char *out, const char *in, int inlen) { Radix64frombits(out, in, inlen, BASE64_CHARS,'='); } int Radix64tobits(char *out, const char *in, const char *base64digits, char pad) /* base 64 to raw bytes in quasi-big-endian order, returning count of bytes */ { int len = 0; register unsigned char digit1, digit2, digit3, digit4; if (in[0] == '+' && in[1] == ' ') in += 2; if (*in == '\r') return(0); do { digit1 = in[0]; if (DECODE64(digit1) == BAD) return(-1); digit2 = in[1]; if (DECODE64(digit2) == BAD) return(-1); digit3 = in[2]; if (digit3 != pad && DECODE64(digit3) == BAD) return(-1); digit4 = in[3]; if (digit4 != pad && DECODE64(digit4) == BAD) return(-1); in += 4; *out++ = (DECODE64(digit1) << 2) | (DECODE64(digit2) >> 4); ++len; if (digit3 != pad) { *out++ = ((DECODE64(digit2) << 4) & 0xf0) | (DECODE64(digit3) >> 2); ++len; if (digit4 != pad) { *out++ = ((DECODE64(digit3) << 6) & 0xc0) | DECODE64(digit4); ++len; } } } while (*in && *in != '\r' && digit4 != pad); return (len); } int from64tobits(char *out, const char *in) { return(Radix64tobits(out, in, BASE64_CHARS,'=')); } /* base64.c ends here */ hashrat-1.6.1/libUseful-2.1/base64.h0000644000175000017550000000066012470734537017425 0ustar metacosm89metacosm89#ifndef BASE_64_H #define BASE_64_H #ifdef __cplusplus extern "C" { #endif void Radix64frombits(unsigned char *out, const unsigned char *in, int inlen, const char *base64digits, char pad); int Radix64tobits(char *out, const char *in, const char *base64digits, char pad); void to64frombits(unsigned char *out, const unsigned char *in, int inlen); int from64tobits(char *out, const char *in); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/buckets.c0000644000175000017550000000341312470734537017773 0ustar metacosm89metacosm89#include "libUseful-2.0/libUseful.h" #include #define FNV_INIT_VAL 2166136261 unsigned int fnv_data2bucket(unsigned char *key, int size, int NoOfItems) { unsigned char *p, *end; unsigned int h = FNV_INIT_VAL; int i; end=key+size; for (p=key; p < end ; p++ ) h = ( h * 16777619 ) ^ *p; return(h % NoOfItems); } unsigned int fnv_string2bucket(unsigned char *key, int size, int NoOfItems) { unsigned char *p; unsigned int h = FNV_INIT_VAL; int i; for (p=key; *p !='\0' ; p++ ) h = ( h * 16777619 ) ^ *p; return(h % NoOfItems); } unsigned int mmx_hash_bucket_data(unsigned char *key, int size, int NoOfItems) { char *p, *end; __m64 v1, v2, s; int val; if (size < 8) return(fnv_data2bucket(key, size, NoOfItems)); p=key; end=key+size; _mm_empty(); // emms v1=_mm_set1_pi32(FNV_INIT_VAL); while ((end-p) > 7) { v2=_mm_setr_pi32(*p,*(p+4)); v1=_mm_add_pi16(v1, v2); v1=_mm_slli_pi32(v1, 3); p+=8; } val=_mm_cvtsi64_si32(v1); _mm_empty(); // emms if (val < 0) val=1-val; val =val % NoOfItems; return(val); } main(int argc, char *argv[]) { int val, len; STREAM *S; char *Tempstr=NULL; clock_t start, mid, end; S=STREAMOpenFile(argv[1],SF_RDONLY); start=clock(); Tempstr=STREAMReadLine(Tempstr,S); while (Tempstr) { len=StrLen(Tempstr); val=mmx_hash_bucket_data(Tempstr, len, 9999); Tempstr=STREAMReadLine(Tempstr,S); } end=clock(); printf("MMX: %d\n",end-start,val,Tempstr); STREAMSeek(S,0,SEEK_SET); start=clock(); Tempstr=STREAMReadLine(Tempstr,S); while (Tempstr) { len=StrLen(Tempstr); val=fnv_string2bucket(Tempstr,len, 9999); Tempstr=STREAMReadLine(Tempstr,S); } end=clock(); printf("FNV: %d\n",end-start,val,Tempstr); STREAMClose(S); } hashrat-1.6.1/libUseful-2.1/configure0000755000175000017550000043264012470646505020103 0ustar metacosm89metacosm89#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="defines.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS LIBOBJS EGREP GREP CPP SET_MAKE OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC VERSION target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_largefile enable_sendfile enable_ip6 enable_ssl enable_zlib enable_oss ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-largefile omit support for large files --enable-sendfile enable sendfile support --enable-ip6 enable IPv6 support --enable-ssl use Secure Sockets Layer --enable-zlib use ZLib Compression --enable-oss use Open Sound System Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu VERSION="0.0.1" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi cf_have_libssl=no cf_have_libcrypto=no cf_have_libz=yes cf_have_oss=no cf_have_libesd=no cf_have_sendfile=no # Check whether --enable-sendfile was given. if test "${enable_sendfile+set}" = set; then : enableval=$enable_sendfile; cf_use_sendfile=$enableval fi if test "$cf_use_sendfile" != "no" then # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "sys/sendfile.h" "ac_cv_header_sys_sendfile_h" "$ac_includes_default" if test "x$ac_cv_header_sys_sendfile_h" = xyes; then : cf_have_sendfile=yes else cf_have_sendfile=no fi fi if test "$cf_have_sendfile" = "yes" then $as_echo "#define USE_SENDFILE 1" >>confdefs.h fi # Check whether --enable-ip6 was given. if test "${enable_ip6+set}" = set; then : enableval=$enable_ip6; cf_use_ip6=$enableval fi if test "$cf_use_ip6" = "yes" then $as_echo "#define USE_INET6 1" >>confdefs.h fi # Check whether --enable-ssl was given. if test "${enable_ssl+set}" = set; then : enableval=$enable_ssl; cf_use_ssl=$enableval fi if test "$cf_use_ssl" = "yes" then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL_library_init in -lssl" >&5 $as_echo_n "checking for SSL_library_init in -lssl... " >&6; } if ${ac_cv_lib_ssl_SSL_library_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lssl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char SSL_library_init (); int main () { return SSL_library_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ssl_SSL_library_init=yes else ac_cv_lib_ssl_SSL_library_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ssl_SSL_library_init" >&5 $as_echo "$ac_cv_lib_ssl_SSL_library_init" >&6; } if test "x$ac_cv_lib_ssl_SSL_library_init" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBSSL 1 _ACEOF LIBS="-lssl $LIBS" fi cf_have_libssl=$ac_cv_lib_ssl_SSL_library_init { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EVP_CIPHER_CTX_init in -lcrypto" >&5 $as_echo_n "checking for EVP_CIPHER_CTX_init in -lcrypto... " >&6; } if ${ac_cv_lib_crypto_EVP_CIPHER_CTX_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcrypto $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char EVP_CIPHER_CTX_init (); int main () { return EVP_CIPHER_CTX_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_crypto_EVP_CIPHER_CTX_init=yes else ac_cv_lib_crypto_EVP_CIPHER_CTX_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_EVP_CIPHER_CTX_init" >&5 $as_echo "$ac_cv_lib_crypto_EVP_CIPHER_CTX_init" >&6; } if test "x$ac_cv_lib_crypto_EVP_CIPHER_CTX_init" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBCRYPTO 1 _ACEOF LIBS="-lcrypto $LIBS" fi cf_have_libcrypto=$ac_cv_lib_crypto_EVP_CIPHER_CTX_init for ac_func in OpenSSL_add_all_algorithms EVP_bf_cbc EVP_rc2_cbc EVP_rc4 EVP_rc5_32_12_16_cbc EVP_des_cbc EVP_desx_cbc EVP_cast5_cbc EVP_idea_cbc EVP_aes_128_cbc EVP_aes_256_cbc do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking that OpenSSL Library is at least version 0.9.7" >&5 $as_echo_n "checking that OpenSSL Library is at least version 0.9.7... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if SSLEAY_VERSION_NUMBER >= 0x00907000L yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define USE_OPENSSL_ADD_ALL_ALGORITHMS 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f conftest* fi if test "cf_have_libssl" = "yes" then cf_use_zlib=yes fi # Check whether --enable-zlib was given. if test "${enable_zlib+set}" = set; then : enableval=$enable_zlib; cf_use_zlib=$enableval fi if test "$cf_use_zlib" = "yes" then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for deflate in -lz" >&5 $as_echo_n "checking for deflate in -lz... " >&6; } if ${ac_cv_lib_z_deflate+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char deflate (); int main () { return deflate (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_deflate=yes else ac_cv_lib_z_deflate=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_deflate" >&5 $as_echo "$ac_cv_lib_z_deflate" >&6; } if test "x$ac_cv_lib_z_deflate" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBZ 1 _ACEOF LIBS="-lz $LIBS" fi cf_have_libz=$ac_cv_lib_z_deflate fi # Check whether --enable-oss was given. if test "${enable_oss+set}" = set; then : enableval=$enable_oss; cf_use_oss=$enableval fi cf_use_oss=yes if test "$cf_use_oss" = "yes" then ac_fn_c_check_header_mongrel "$LINENO" "sys/soundcard.h" "ac_cv_header_sys_soundcard_h" "$ac_includes_default" if test "x$ac_cv_header_sys_soundcard_h" = xyes; then : $as_echo "#define HAVE_OSS 1" >>confdefs.h else cf_have_oss=no fi fi #AC_ARG_ENABLE(esd, [ --enable-esd use ESound], cf_use_esd=$enableval ) if test "$cf_use_esd" = "yes" then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for esd_open_sound in -lesd" >&5 $as_echo_n "checking for esd_open_sound in -lesd... " >&6; } if ${ac_cv_lib_esd_esd_open_sound+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lesd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char esd_open_sound (); int main () { return esd_open_sound (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_esd_esd_open_sound=yes else ac_cv_lib_esd_esd_open_sound=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_esd_esd_open_sound" >&5 $as_echo "$ac_cv_lib_esd_esd_open_sound" >&6; } if test "x$ac_cv_lib_esd_esd_open_sound" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBESD 1 _ACEOF LIBS="-lesd $LIBS" fi cf_have_libesd=$ac_cv_lib_esd_esd_open_sound fi ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi hashrat-1.6.1/libUseful-2.1/configure.ac0000644000175000017550000000451112470646505020452 0ustar metacosm89metacosm89#AC_INIT(libUseful,colums.projects@googlemail.com,,http://sites.google.com/site/columscode) AC_INIT(defines.h) VERSION="0.0.1" AC_SUBST(VERSION) AC_PROG_CC AC_LANG_C AC_PROG_MAKE_SET AC_HEADER_STDC AC_SYS_LARGEFILE cf_have_libssl=no cf_have_libcrypto=no cf_have_libz=yes cf_have_oss=no cf_have_libesd=no cf_have_sendfile=no AC_ARG_ENABLE(sendfile, [ --enable-sendfile enable sendfile support], cf_use_sendfile=$enableval ) if test "$cf_use_sendfile" != "no" then AC_CHECK_HEADER(sys/sendfile.h,cf_have_sendfile=yes,cf_have_sendfile=no,) fi if test "$cf_have_sendfile" = "yes" then AC_DEFINE([USE_SENDFILE]) fi AC_ARG_ENABLE(ip6, [ --enable-ip6 enable IPv6 support], cf_use_ip6=$enableval ) if test "$cf_use_ip6" = "yes" then AC_DEFINE([USE_INET6],1) fi AC_ARG_ENABLE(ssl, [ --enable-ssl use Secure Sockets Layer], cf_use_ssl=$enableval ) if test "$cf_use_ssl" = "yes" then AC_CHECK_LIB(ssl,SSL_library_init,,) cf_have_libssl=$ac_cv_lib_ssl_SSL_library_init AC_CHECK_LIB(crypto,EVP_CIPHER_CTX_init,,) cf_have_libcrypto=$ac_cv_lib_crypto_EVP_CIPHER_CTX_init AC_CHECK_FUNCS(OpenSSL_add_all_algorithms EVP_bf_cbc EVP_rc2_cbc EVP_rc4 EVP_rc5_32_12_16_cbc EVP_des_cbc EVP_desx_cbc EVP_cast5_cbc EVP_idea_cbc EVP_aes_128_cbc EVP_aes_256_cbc) AC_MSG_CHECKING([that OpenSSL Library is at least version 0.9.7]) AC_EGREP_CPP(yes, [ #include #if SSLEAY_VERSION_NUMBER >= 0x00907000L yes #endif ], [ AC_MSG_RESULT([yes]) AC_DEFINE(USE_OPENSSL_ADD_ALL_ALGORITHMS, 1, [Use OpenSSL_add_all_algorithms]) ],[AC_MSG_RESULT([no])]) fi if test "cf_have_libssl" = "yes" then cf_use_zlib=yes fi AC_ARG_ENABLE(zlib, [ --enable-zlib use ZLib Compression], cf_use_zlib=$enableval ) if test "$cf_use_zlib" = "yes" then AC_CHECK_LIB(z,deflate,,) cf_have_libz=$ac_cv_lib_z_deflate fi AC_ARG_ENABLE(oss, [ --enable-oss use Open Sound System], cf_use_oss=$enableval ) dnl Always use oss if available cf_use_oss=yes if test "$cf_use_oss" = "yes" then AC_CHECK_HEADER(sys/soundcard.h,AC_DEFINE([HAVE_OSS]),cf_have_oss=no,) fi #AC_ARG_ENABLE(esd, [ --enable-esd use ESound], cf_use_esd=$enableval ) if test "$cf_use_esd" = "yes" then AC_CHECK_LIB(esd,esd_open_sound,,) cf_have_libesd=$ac_cv_lib_esd_esd_open_sound fi dnl read Makefile.in and write Makefile AC_OUTPUT(Makefile) hashrat-1.6.1/libUseful-2.1/crc32.c0000644000175000017550000001066312470734537017254 0ustar metacosm89metacosm89/* --------------------------------------------------------------------------- Copyright (c) 2003, Dominik Reichl , Germany. All rights reserved. Distributed under the terms of the GNU General Public License v2. This software is provided 'as is' with no explicit or implied warranties in respect of its properties, including, but not limited to, correctness and/or fitness for purpose. --------------------------------------------------------------------------- */ #include "crc32.h" // CRC-32 polynominal: // X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X+1 static unsigned long crc32tab[] = { 0x00000000L, 0x77073096L, 0xEE0E612CL, 0x990951BAL, 0x076DC419L, 0x706AF48FL, 0xE963A535L, 0x9E6495A3L, 0x0EDB8832L, 0x79DCB8A4L, 0xE0D5E91EL, 0x97D2D988L, 0x09B64C2BL, 0x7EB17CBDL, 0xE7B82D07L, 0x90BF1D91L, 0x1DB71064L, 0x6AB020F2L, 0xF3B97148L, 0x84BE41DEL, 0x1ADAD47DL, 0x6DDDE4EBL, 0xF4D4B551L, 0x83D385C7L, 0x136C9856L, 0x646BA8C0L, 0xFD62F97AL, 0x8A65C9ECL, 0x14015C4FL, 0x63066CD9L, 0xFA0F3D63L, 0x8D080DF5L, 0x3B6E20C8L, 0x4C69105EL, 0xD56041E4L, 0xA2677172L, 0x3C03E4D1L, 0x4B04D447L, 0xD20D85FDL, 0xA50AB56BL, 0x35B5A8FAL, 0x42B2986CL, 0xDBBBC9D6L, 0xACBCF940L, 0x32D86CE3L, 0x45DF5C75L, 0xDCD60DCFL, 0xABD13D59L, 0x26D930ACL, 0x51DE003AL, 0xC8D75180L, 0xBFD06116L, 0x21B4F4B5L, 0x56B3C423L, 0xCFBA9599L, 0xB8BDA50FL, 0x2802B89EL, 0x5F058808L, 0xC60CD9B2L, 0xB10BE924L, 0x2F6F7C87L, 0x58684C11L, 0xC1611DABL, 0xB6662D3DL, 0x76DC4190L, 0x01DB7106L, 0x98D220BCL, 0xEFD5102AL, 0x71B18589L, 0x06B6B51FL, 0x9FBFE4A5L, 0xE8B8D433L, 0x7807C9A2L, 0x0F00F934L, 0x9609A88EL, 0xE10E9818L, 0x7F6A0DBBL, 0x086D3D2DL, 0x91646C97L, 0xE6635C01L, 0x6B6B51F4L, 0x1C6C6162L, 0x856530D8L, 0xF262004EL, 0x6C0695EDL, 0x1B01A57BL, 0x8208F4C1L, 0xF50FC457L, 0x65B0D9C6L, 0x12B7E950L, 0x8BBEB8EAL, 0xFCB9887CL, 0x62DD1DDFL, 0x15DA2D49L, 0x8CD37CF3L, 0xFBD44C65L, 0x4DB26158L, 0x3AB551CEL, 0xA3BC0074L, 0xD4BB30E2L, 0x4ADFA541L, 0x3DD895D7L, 0xA4D1C46DL, 0xD3D6F4FBL, 0x4369E96AL, 0x346ED9FCL, 0xAD678846L, 0xDA60B8D0L, 0x44042D73L, 0x33031DE5L, 0xAA0A4C5FL, 0xDD0D7CC9L, 0x5005713CL, 0x270241AAL, 0xBE0B1010L, 0xC90C2086L, 0x5768B525L, 0x206F85B3L, 0xB966D409L, 0xCE61E49FL, 0x5EDEF90EL, 0x29D9C998L, 0xB0D09822L, 0xC7D7A8B4L, 0x59B33D17L, 0x2EB40D81L, 0xB7BD5C3BL, 0xC0BA6CADL, 0xEDB88320L, 0x9ABFB3B6L, 0x03B6E20CL, 0x74B1D29AL, 0xEAD54739L, 0x9DD277AFL, 0x04DB2615L, 0x73DC1683L, 0xE3630B12L, 0x94643B84L, 0x0D6D6A3EL, 0x7A6A5AA8L, 0xE40ECF0BL, 0x9309FF9DL, 0x0A00AE27L, 0x7D079EB1L, 0xF00F9344L, 0x8708A3D2L, 0x1E01F268L, 0x6906C2FEL, 0xF762575DL, 0x806567CBL, 0x196C3671L, 0x6E6B06E7L, 0xFED41B76L, 0x89D32BE0L, 0x10DA7A5AL, 0x67DD4ACCL, 0xF9B9DF6FL, 0x8EBEEFF9L, 0x17B7BE43L, 0x60B08ED5L, 0xD6D6A3E8L, 0xA1D1937EL, 0x38D8C2C4L, 0x4FDFF252L, 0xD1BB67F1L, 0xA6BC5767L, 0x3FB506DDL, 0x48B2364BL, 0xD80D2BDAL, 0xAF0A1B4CL, 0x36034AF6L, 0x41047A60L, 0xDF60EFC3L, 0xA867DF55L, 0x316E8EEFL, 0x4669BE79L, 0xCB61B38CL, 0xBC66831AL, 0x256FD2A0L, 0x5268E236L, 0xCC0C7795L, 0xBB0B4703L, 0x220216B9L, 0x5505262FL, 0xC5BA3BBEL, 0xB2BD0B28L, 0x2BB45A92L, 0x5CB36A04L, 0xC2D7FFA7L, 0xB5D0CF31L, 0x2CD99E8BL, 0x5BDEAE1DL, 0x9B64C2B0L, 0xEC63F226L, 0x756AA39CL, 0x026D930AL, 0x9C0906A9L, 0xEB0E363FL, 0x72076785L, 0x05005713L, 0x95BF4A82L, 0xE2B87A14L, 0x7BB12BAEL, 0x0CB61B38L, 0x92D28E9BL, 0xE5D5BE0DL, 0x7CDCEFB7L, 0x0BDBDF21L, 0x86D3D2D4L, 0xF1D4E242L, 0x68DDB3F8L, 0x1FDA836EL, 0x81BE16CDL, 0xF6B9265BL, 0x6FB077E1L, 0x18B74777L, 0x88085AE6L, 0xFF0F6A70L, 0x66063BCAL, 0x11010B5CL, 0x8F659EFFL, 0xF862AE69L, 0x616BFFD3L, 0x166CCF45L, 0xA00AE278L, 0xD70DD2EEL, 0x4E048354L, 0x3903B3C2L, 0xA7672661L, 0xD06016F7L, 0x4969474DL, 0x3E6E77DBL, 0xAED16A4AL, 0xD9D65ADCL, 0x40DF0B66L, 0x37D83BF0L, 0xA9BCAE53L, 0xDEBB9EC5L, 0x47B2CF7FL, 0x30B5FFE9L, 0xBDBDF21CL, 0xCABAC28AL, 0x53B39330L, 0x24B4A3A6L, 0xBAD03605L, 0xCDD70693L, 0x54DE5729L, 0x23D967BFL, 0xB3667A2EL, 0xC4614AB8L, 0x5D681B02L, 0x2A6F2B94L, 0xB40BBE37L, 0xC30C8EA1L, 0x5A05DF1BL, 0x2D02EF8DL }; void crc32Init(unsigned long *pCrc32) { *pCrc32 = 0xFFFFFFFF; } void crc32Update(unsigned long *pCrc32, unsigned char *pData, unsigned long uSize) { unsigned long i = 0; for(i = 0; i < uSize; i++) *pCrc32 = ((*pCrc32) >> 8) ^ crc32tab[(pData[i]) ^ ((*pCrc32) & 0x000000FF)]; } // Make the final adjustment void crc32Finish(unsigned long *pCrc32) { *pCrc32 = ~(*pCrc32); } hashrat-1.6.1/libUseful-2.1/crc32.h0000644000175000017550000000145412470734537017257 0ustar metacosm89metacosm89/* --------------------------------------------------------------------------- Copyright (c) 2003, Dominik Reichl , Germany. All rights reserved. Distributed under the terms of the GNU General Public License v2. This software is provided 'as is' with no explicit or implied warranties in respect of its properties, including, but not limited to, correctness and/or fitness for purpose. --------------------------------------------------------------------------- */ #ifndef ___CRC32_H___ #define ___CRC32_H___ #ifdef __cplusplus extern "C" { #endif void crc32Init(unsigned long *pCrc32); void crc32Update(unsigned long *pCrc32, unsigned char *pData, unsigned long uSize); void crc32Finish(unsigned long *pCrc32); #ifdef __cplusplus } #endif #endif /* ___CRC32_H___ */ hashrat-1.6.1/libUseful-2.1/defines.h0000644000175000017550000000275312470734537017763 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_DEFINES_H #define LIBUSEFUL_DEFINES_H #define FALSE 0 #define TRUE 1 #define FTIMEOUT -2 #define ENCODE_NONE 0 #define ENCODE_OCTAL 8 #define ENCODE_DECIMAL 10 #define ENCODE_HEX 16 #define ENCODE_HEXUPPER 17 #define ENCODE_BASE64 64 #define ENCODE_IBASE64 65 #define ENCODE_PBASE64 66 #define ENCODE_XXENC 67 #define ENCODE_UUENC 68 #define ENCODE_CRYPT 69 #define ENCODE_ASCII85 85 #define ENCODE_Z85 86 #define SUBS_QUOTE_VARS 1 #define SUBS_CASE_VARNAMES 2 #define SUBS_STRIP_VARS_WHITESPACE 4 #define HEX_CHARS "0123456789ABCDEF" #define ALPHA_CHARS "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" #define BASE64_CHARS "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" #define IBASE64_CHARS "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789+/" #define SBASE64_CHARS "0123456789-ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz" #define CRYPT_CHARS "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" #define UUENC_CHARS " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" #define XXENC_CHARS "+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" #define ASCII85_CHARS "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstu" #define Z85_CHARS "01234567899abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#." #ifdef __cplusplus extern "C" { #endif typedef int (*BASIC_FUNC)(void *Data); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/expect.c0000644000175000017550000000547712470734537017637 0ustar metacosm89metacosm89#include "includes.h" #include "expect.h" //Values for 'flags' that are not visible to the user //These must not clash with any visible values #define DIALOG_DONE 67108864 void ExpectDialogAdd(ListNode *ExpectDialogs, char *Expect, char *Reply, int Flags) { TExpectDialog *ExpectDialog; ExpectDialog=(TExpectDialog *) calloc(1,sizeof(TExpectDialog)); ExpectDialog->Expect=CopyStr(ExpectDialog->Expect,Expect); ExpectDialog->Reply=CopyStr(ExpectDialog->Reply,Reply); ExpectDialog->Flags=Flags; ListAddItem(ExpectDialogs,ExpectDialog); } void ExpectDialogDestroy(void *p_Item) { TExpectDialog *ExpectDialog; ExpectDialog=(TExpectDialog *) p_Item; DestroyString(ExpectDialog->Expect); DestroyString(ExpectDialog->Reply); free(ExpectDialog); } int STREAMExpectDialog(STREAM *S, ListNode *ExpectDialogs) { int inchar; ListNode *Curr; TExpectDialog *ExpectDialog; inchar=STREAMReadChar(S); while (inchar !=EOF) { if (inchar > 0) { Curr=ListGetNext(ExpectDialogs); while (Curr) { ExpectDialog=(TExpectDialog *) Curr->Item; if (! (ExpectDialog->Flags & DIALOG_DONE)) { //if the current value does not equal where we are in the string //we have to consider whether it is the first character in the string if (ExpectDialog->Expect[ExpectDialog->Match]!=inchar) ExpectDialog->Match=0; if (ExpectDialog->Expect[ExpectDialog->Match]==inchar) { ExpectDialog->Match++; if (ExpectDialog->Expect[ExpectDialog->Match]=='\0') { ExpectDialog->Match=0; ExpectDialog->Flags |= DIALOG_DONE; if (ExpectDialog->Reply) STREAMWriteLine(ExpectDialog->Reply,S); if (ExpectDialog->Flags & DIALOG_END) return(TRUE); if (ExpectDialog->Flags & DIALOG_FAIL) return(FALSE); } } if (! (ExpectDialog->Flags & DIALOG_OPTIONAL)) break; } Curr=ListGetNext(Curr); } } inchar=STREAMReadChar(S); } return(FALSE); } int STREAMExpectAndReply(STREAM *S, char *Expect, char *Reply) { int match=0, len=0, inchar; len=StrLen(Expect); inchar=STREAMReadChar(S); while (inchar !=EOF) { if (inchar > 0) { //if the current value does not equal where we are in the string //we have to consider whether it is the first character in the string if (Expect[match]!=inchar) match=0; if (Expect[match]==inchar) { match++; if (match==len) { if (Reply) { STREAMWriteLine(Reply,S); STREAMFlush(S); } return(TRUE); } } } inchar=STREAMReadChar(S); } return(FALSE); } int STREAMExpectSilence(STREAM *S, int wait) { int inchar; char *Tempstr=NULL; int len=0, Timeout; Timeout=S->Timeout; S->Timeout=wait; inchar=STREAMReadChar(S); while (inchar > 0) { Tempstr=AddCharToBuffer(Tempstr,len,inchar); len++; inchar=STREAMReadChar(S); } S->Timeout=Timeout; DestroyString(Tempstr); return(FALSE); } hashrat-1.6.1/libUseful-2.1/expect.h0000644000175000017550000000111712470734537017627 0ustar metacosm89metacosm89 #ifndef LIBUSEFUL_EXPECT_H #define LIBUSEFUL_EXPECT_H #include "file.h" #define DIALOG_END 1 #define DIALOG_FAIL 2 #define DIALOG_OPTIONAL 4 typedef struct { int Flags; int Match; char *Expect; char *Reply; } TExpectDialog; #ifdef __cplusplus extern "C" { #endif int STREAMExpectAndReply(STREAM *S, char *Expect, char *Reply); int STREAMExpectSilence(STREAM *S, int wait); void ExpectDialogAdd(ListNode *Dialogs, char *Expect, char *Reply, int Flags); int STREAMExpectDialog(STREAM *S, ListNode *Dialogs); void ExpectDialogDestroy(void *Item); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/file.c0000644000175000017550000006224212470734537017257 0ustar metacosm89metacosm89#include "includes.h" #include "DataProcessing.h" #include "pty.h" #include "expect.h" #include #include #ifdef HAVE_LIBSSL #include #include #include #include #include #endif //A difficult function to fit in order int STREAMReadCharsToBuffer(STREAM *S); int FDSelect(int fd, int Flags, struct timeval *tv) { fd_set *readset=NULL, *writeset=NULL; int result, RetVal=0; if (Flags & SELECT_READ) { readset=(fd_set *) calloc(1,sizeof(fd_set)); FD_ZERO(readset); FD_SET(fd, readset); } if (Flags & SELECT_WRITE) { writeset=(fd_set *) calloc(1,sizeof(fd_set)); FD_ZERO(writeset); FD_SET(fd, writeset); } result=select(fd+1,readset,writeset,NULL,tv); if ((result==-1) && (errno==EBADF)) RetVal=0; else if (result > 0) { if (readset && FD_ISSET(fd, readset)) RetVal |= SELECT_READ; if (writeset && FD_ISSET(fd, writeset)) RetVal |= SELECT_WRITE; } if (readset) free(readset); if (writeset) free(writeset); return(RetVal); } int FDIsWritable(int fd) { struct timeval tv; tv.tv_sec=0; tv.tv_usec=0; if (FDSelect(fd, SELECT_WRITE, &tv) & SELECT_WRITE) return(TRUE); return(FALSE); } int FDCheckForBytes(int fd) { struct timeval tv; tv.tv_sec=0; tv.tv_usec=0; if (FDSelect(fd, SELECT_READ, &tv) & SELECT_READ) return(TRUE); return(FALSE); } /*STREAM Functions */ void STREAMSetFlags(STREAM *S, int Set, int UnSet) { int val; S->Flags &= ~UnSet; S->Flags |= Set; //Handling nonblock flag involves setting nonblock on or off fcntl(S->in_fd,F_GETFL,&val); if (S->Flags & SF_NONBLOCK) val |= O_NONBLOCK; else val &= (~O_NONBLOCK); fcntl(S->in_fd, F_SETFL, val); } /*Set timeout for select calls within STREAM*/ void STREAMSetTimeout(STREAM *S, int val) { S->Timeout=val; } /*Set flush type for STREAM*/ void STREAMSetFlushType(STREAM *S, int Type, int StartPoint, int BlockSize) { S->Flags &= ~(FLUSH_ALWAYS | FLUSH_LINE | FLUSH_BLOCK | FLUSH_BUFFER); S->Flags |= Type; if (StartPoint==0) S->StartPoint=BlockSize; else S->StartPoint=StartPoint; S->BlockSize=BlockSize; } /* This reads chunks from a file and when if finds a newline it resets */ /* the file pointer to that position */ void STREAMResizeBuffer(STREAM *S, int size) { int PageSize; PageSize=getpagesize(); if (S->Flags & SF_SECURE) S->BuffSize=(size / PageSize + 1) * PageSize; else S->BuffSize=size; S->InputBuff =(char *) realloc(S->InputBuff,S->BuffSize); S->OutputBuff=(char *) realloc(S->OutputBuff,S->BuffSize); if (S->InStart > S->BuffSize) S->InStart=0; if (S->InEnd > S->BuffSize) S->InEnd=0; if (S->OutEnd > S->BuffSize) S->OutEnd=0; if (S->Flags & SF_SECURE) { mlock(S->InputBuff, S->BuffSize); mlock(S->OutputBuff, S->BuffSize); } } int STREAMCheckForBytes(STREAM *S) { off_t pos; struct stat Stat; if (! S) return(FALSE); if (S->State & SS_EMBARGOED) return(FALSE); if (S->InEnd > S->InStart) return(TRUE); if (S->in_fd==-1) return(FALSE); if (S->Flags & SF_FOLLOW) { while (1) { pos=STREAMTell(S); fstat(S->in_fd,&Stat); if (Stat.st_size > pos) return(TRUE); } } return(FDCheckForBytes(S->in_fd)); } int STREAMCountWaitingBytes(STREAM *S) { int read_result=0, result; if (! S) return(0); if (S->State & SS_EMBARGOED) return(0); result=FDCheckForBytes(S->in_fd); if (result > 0) read_result=STREAMReadCharsToBuffer(S); else if (result < 0) read_result=STREAM_CLOSED; result=S->InEnd - S->InStart; if (result > 0) return(result); if (read_result==STREAM_CLOSED) return(STREAM_CLOSED); if (read_result==STREAM_DATA_ERROR) return(STREAM_CLOSED); return(0); } STREAM *STREAMSelect(ListNode *Streams, struct timeval *tv) { fd_set SelectSet; STREAM *S; ListNode *Curr; int highfd=0, result; FD_ZERO(&SelectSet); Curr=ListGetNext(Streams); while (Curr) { S=(STREAM *) Curr->Item; if (! (S->State & SS_EMBARGOED)) { //Pump any data in the stream STREAMFlush(S); if (S->InEnd > S->InStart) return(S); FD_SET(S->in_fd,&SelectSet); if (S->in_fd > highfd) highfd=S->in_fd; } Curr=ListGetNext(Curr); } result=select(highfd+1,&SelectSet,NULL,NULL,tv); if (result > 0) { Curr=ListGetNext(Streams); while (Curr) { S=(STREAM *) Curr->Item; if (FD_ISSET(S->in_fd,&SelectSet)) return(S); Curr=ListGetNext(Curr); } } return(NULL); } int STREAMCheckForWaitingChar(STREAM *S,unsigned char check_char) { int read_result=0, result; char *found_char; if (! S) return(0); if (S->State & SS_EMBARGOED) return(0); result=FDCheckForBytes(S->in_fd); if (result > 0) read_result=STREAMReadCharsToBuffer(S); else if (result < 0) read_result=STREAM_CLOSED; if (S->InStart < S->InEnd) { found_char=memchr(S->InputBuff + S->InStart,check_char,S->InEnd - S->InStart); if (found_char > 0) return(TRUE); } if (read_result==STREAM_CLOSED) return(STREAM_CLOSED); if (read_result==STREAM_DATA_ERROR) return(STREAM_CLOSED); return(FALSE); } int STREAMInternalFinalWriteBytes(STREAM *S, const char *Data, int DataLen) { fd_set selectset; int result=0, count=0; struct timeval tv; if (! S) return(STREAM_CLOSED); if (S->out_fd==-1) return(STREAM_CLOSED); while (count < DataLen) { if (S->Flags & SF_SSL) { #ifdef HAVE_LIBSSL result=SSL_write((SSL *) STREAMGetItem(S,"LIBUSEFUL-SSL-CTX"), Data + count, DataLen - count); #endif } else { if (S->Timeout > 0) { FD_ZERO(&selectset); FD_SET(S->out_fd, &selectset); result=(S->Timeout % 100); tv.tv_usec=result * 10000; tv.tv_sec=S->Timeout / 100; result=select(S->out_fd+1,NULL,&selectset,NULL,&tv); if (result==-1) return(STREAM_CLOSED); if (result == 0) return(STREAM_TIMEOUT); } if (S->Flags & SF_WRLOCK) flock(S->out_fd,LOCK_EX); if (S->BlockSize && (S->BlockSize < (DataLen-count))) result=S->BlockSize; else result=DataLen-count; result=write(S->out_fd, Data + count, result); if (S->Flags & SF_WRLOCK) flock(S->out_fd,LOCK_UN); } if (result < 1 && ((errno !=EINTR) && (errno !=EAGAIN)) ) break; if (result < 0) result=0; count+=result; S->BytesWritten+=result; if (S->Flags & FLUSH_BUFFER) { S->StartPoint=0; break; } } //memmove any remaining data so that we add onto the end of it S->OutEnd -= count; if (S->OutEnd > 0) memmove(S->OutputBuff,S->OutputBuff+count, S->OutEnd); return(count); } int STREAMFlush(STREAM *S) { return(STREAMInternalFinalWriteBytes(S, S->OutputBuff, S->OutEnd)); } void STREAMClear(STREAM *S) { STREAMFlush(S); S->InStart=0; } /*A stream can have a series of 'processor modules' associated with it' */ /*which do things to the data before it is read/written. This function */ /*pumps the data through the processor list, and eventually writes it out */ int STREAMReadThroughProcessors(STREAM *S, char *Bytes, int InLen) { TProcessingModule *Mod; ListNode *Curr; char *InBuff=NULL, *OutputBuff=NULL; int len=0, olen=0, state=STREAM_CLOSED, Flush; len=InLen; if (InLen > 0) { InBuff=SetStrLen(InBuff,len+1); memcpy(InBuff,Bytes ,len); } Curr=ListGetNext(S->ProcessingModules); while (Curr) { Mod=(TProcessingModule *) Curr->Item; if (len < BUFSIZ) olen=BUFSIZ; else olen=len * 8; OutputBuff=SetStrLen(OutputBuff,olen); if (Mod->Read) { if (len < 0) Flush=TRUE; else Flush=FALSE; len=Mod->Read(Mod,InBuff,len,&OutputBuff,&olen, Flush); if (len != STREAM_CLOSED) state=0; if (len > 0) { InBuff=SetStrLen(InBuff,len); memcpy(InBuff,OutputBuff,len); } } Curr=ListGetNext(Curr); } if ( (! (S->State & SS_DATA_ERROR)) && (len > 0) ) { //Whatever happened above, InBuff should now contain the data to be written! //note that we resize buff to S->InEnd + len, where len is length of the new //data. Even if S->InStart > 0 (meaning there are 'sent' bytes in the buffer) //we consider S->InStart to be 0 as regards sizeing the buffer, because those //sent bytes are still there. S->InputBuff=SetStrLen(S->InputBuff,len + S->InEnd ); memcpy(S->InputBuff + S->InEnd, InBuff, len); S->InEnd+=len; } DestroyString(OutputBuff); DestroyString(InBuff); len=S->InEnd - S->InStart; if (len==0) { if (state ==STREAM_CLOSED) return(STREAM_TIMEOUT); if (S->State & SS_DATA_ERROR) return(STREAM_DATA_ERROR); } return(len); } int STREAMLock(STREAM *S, int val) { int result; result=flock(S->in_fd,val); if (result==0) return(TRUE); return(FALSE); } STREAM *STREAMCreate() { STREAM *S; S=(STREAM *) calloc(1,sizeof(STREAM)); STREAMResizeBuffer(S,BUFSIZ); S->in_fd=-1; S->out_fd=-1; S->Timeout=3000; S->Flags |= FLUSH_ALWAYS; return(S); } STREAM *STREAMFromFD(int fd) { STREAM *Stream; if (fd==-1) return(NULL); Stream=STREAMCreate(); Stream->in_fd=fd; Stream->out_fd=fd; return(Stream); } STREAM *STREAMFromDualFD(int in_fd, int out_fd) { STREAM *Stream; if (in_fd==-1) return(NULL); if (out_fd==-1) return(NULL); Stream=STREAMCreate(); Stream->in_fd=in_fd; Stream->out_fd=out_fd; return(Stream); } STREAM *STREAMOpenFile(const char *FilePath, int Flags) { int fd, Mode=0; STREAM *Stream; struct stat myStat; if (Flags & SF_WRONLY) Mode=O_WRONLY; else if (Flags & SF_RDONLY) Mode=O_RDONLY; else Mode=O_RDWR; if (Flags & SF_CREATE) Flags |= O_CREAT; if (strcmp(FilePath,"-")==0) { Stream=STREAMFromDualFD(0,1); Stream->Path=CopyStr(Stream->Path,FilePath); return(Stream); } fd=open(FilePath, Mode, 0600); if (fd==-1) return(NULL); if (Flags & SF_WRLOCK) { if (flock(fd,LOCK_EX | LOCK_NB)==-1) { close(fd); return(NULL); } } if (Flags & SF_RDLOCK) { if (flock(fd,LOCK_SH | LOCK_NB)==-1) { close(fd); return(NULL); } } // check for symlink naughtyness. Basically a malicious user can // try to guess the name of the file we are going to open in order // to get us to write somewhere other than intended. if (! (Flags & SF_SYMLINK_OK)) { if (lstat(FilePath, &myStat) !=0) { close(fd); return(NULL); } if (S_ISLNK(myStat.st_mode)) { syslog(LOG_USER | LOG_WARNING, "STREAMOpenFile Opened symlink when trying to open %s. Possible DOS attack?",FilePath); close(fd); return(NULL); } } if (Flags & SF_TRUNC) ftruncate(fd,0); if (Flags & SF_APPEND) lseek(fd,0,SEEK_END); Stream=STREAMFromFD(fd); Stream->Path=CopyStr(Stream->Path,FilePath); STREAMSetTimeout(Stream,0); STREAMSetFlushType(Stream,FLUSH_FULL,0,0); return(Stream); } STREAM *STREAMClose(STREAM *S) { ListNode *Curr; if (! S) return(NULL); STREAMReadThroughProcessors(S, NULL, 0); STREAMFlush(S); if ( (StrLen(S->Path)==0) || (strcmp(S->Path,"-") !=0) ) { if ((S->out_fd != -1) && (S->out_fd != S->in_fd)) close(S->out_fd); if (S->in_fd != -1) close(S->in_fd); } Curr=ListGetNext(S->Values); while (Curr) { if (strncmp(Curr->Tag,"HelperPID",9)==0) kill(atoi(Curr->Item),SIGKILL); Curr=ListGetNext(Curr); } if (S->Flags & SF_SECURE) { munlock(S->InputBuff, S->BuffSize); munlock(S->OutputBuff, S->BuffSize); xmemset(S->InputBuff,0,S->BuffSize); xmemset(S->OutputBuff,0,S->BuffSize); } ListDestroy(S->Values,(LIST_ITEM_DESTROY_FUNC)DestroyString); ListDestroy(S->ProcessingModules,DataProcessorDestroy); DestroyString(S->InputBuff); DestroyString(S->OutputBuff); DestroyString(S->Path); free(S); return(NULL); } int STREAMDisassociateFromFD(STREAM *Stream) { int fd; if (! Stream) return(-1); fd=Stream->in_fd; STREAMFlush(Stream); DestroyString(Stream->InputBuff); DestroyString(Stream->OutputBuff); DestroyString(Stream->Path); free(Stream); return(fd); } int STREAMReadCharsToBuffer(STREAM *S) { fd_set selectset; int result=0, diff, read_result=0, WaitForBytes=TRUE; struct timeval tv; char *tmpBuff=NULL; #ifdef HAVE_LIBSSL void *SSL_CTX=NULL; #endif if (! S) return(0); if (S->State & SS_EMBARGOED) return(0); if (S->InStart >= S->InEnd) { S->InEnd=0; S->InStart=0; } diff=S->InEnd-S->InStart; if (S->InStart > (S->BuffSize / 2)) { memmove(S->InputBuff,S->InputBuff + S->InStart,diff); S->InStart=0; S->InEnd=diff; } //if no room in buffer, we can't read in more bytes if (S->InEnd >= S->BuffSize) return(1); //This is used in multiple places below, do don't just move it to within the first place #ifdef HAVE_LIBSSL SSL_CTX=STREAMGetItem(S,"LIBUSEFUL-SSL-CTX"); #endif //if there are bytes available in the internal OpenSSL buffers, when we don't have to //wait on a select, we can just go straight through to SSL_read #ifdef HAVE_LIBSSL if (S->Flags & SF_SSL) { if (SSL_pending((SSL *) SSL_CTX) > 0) WaitForBytes=FALSE; } #endif //if ((S->Timeout > 0) && (! (S->Flags & SF_NONBLOCK)) && WaitForBytes) if ((S->Timeout > 0) && WaitForBytes) { FD_ZERO(&selectset); FD_SET(S->in_fd, &selectset); result=(S->Timeout % 100); tv.tv_usec=result * 10000; tv.tv_sec=S->Timeout / 100; result=select(S->in_fd+1,&selectset,NULL,NULL,&tv); switch (result) { //we are only checking one FD, so should be 1 case 1: read_result=0; break; case 0: errno=ETIMEDOUT; read_result=STREAM_TIMEOUT; break; default: if (errno==EINTR) read_result=STREAM_TIMEOUT; else read_result=STREAM_CLOSED; break; } } //must do this, as we need it to be 0 if we don't do the reads result=0; if (read_result==0) { tmpBuff=SetStrLen(tmpBuff,S->BuffSize-S->InEnd); #ifdef HAVE_LIBSSL if (S->Flags & SF_SSL) { read_result=SSL_read((SSL *) SSL_CTX, tmpBuff, S->BuffSize-S->InEnd); } else #endif { if (S->Flags & SF_RDLOCK) flock(S->in_fd,LOCK_SH); read_result=read(S->in_fd, tmpBuff, S->BuffSize-S->InEnd); if (S->Flags & SF_RDLOCK) flock(S->in_fd,LOCK_UN); } if (read_result > 0) { result=read_result; S->BytesRead+=read_result; } else { if ((read_result == -1) && (errno==EAGAIN)) result=STREAM_NODATA; else result=STREAM_CLOSED; } } if (result < 0) read_result=STREAMReadThroughProcessors(S, tmpBuff, 0); else read_result=STREAMReadThroughProcessors(S, tmpBuff, result); if (read_result < 1) { if (result < 0) read_result=result; else read_result=STREAM_NODATA; } //We are not returning number of bytes read. We only return something if //there is a condition (like socket close) where the thing we are waiting for //may not appear DestroyString(tmpBuff); return(read_result); } inline int STREAMTransferBytesOut(STREAM *S, char *Dest, int DestSize) { int bytes; bytes=S->InEnd - S->InStart; if (bytes > DestSize) bytes=DestSize; memcpy(Dest,S->InputBuff+S->InStart,bytes); S->InStart+=bytes; return(bytes); } int STREAMReadBytes(STREAM *S, char *Buffer, int Buffsize) { int bytes=0, result=0, total=0; if (S->InStart >= S->InEnd) { result=STREAMReadCharsToBuffer(S); if (S->InStart >= S->InEnd) { if (result==STREAM_CLOSED) return(STREAM_CLOSED); if (result==STREAM_TIMEOUT) return(STREAM_TIMEOUT); if (result==STREAM_DATA_ERROR) return(STREAM_DATA_ERROR); } } while (total < Buffsize) { total+=STREAMTransferBytesOut(S, Buffer+total, Buffsize-total); bytes=S->InEnd - S->InStart; if (bytes < 1) { //in testing, the best way to prevent doing constant checking for new bytes, //and so filling up the buffer, was to only check for new bytes if //we didn't have enough to satisfy another read like the one we just had //We must check for '< 1' rather than '-1' because result=FDCheckForBytes(S->in_fd); if (result ==-1) { if (total==0) total=STREAM_CLOSED; break; } if (result < 1) break; result=STREAMReadCharsToBuffer(S); if (result < 1) { if (total > 0) return(total); else return(result); } } } return(total); } double STREAMTell(STREAM *S) { double pos; if (S->OutEnd > 0) STREAMFlush(S); #ifdef _LARGEFILE64_SOURCE pos=(double) lseek64(S->in_fd,0,SEEK_CUR); #else pos=(double) lseek(S->in_fd,0,SEEK_CUR); #endif pos-=(S->InEnd-S->InStart); return(pos); } double STREAMSeek(STREAM *S, double offset, int whence) { double pos; int wherefrom; if (S->OutEnd > 0) STREAMFlush(S); if (whence==SEEK_CUR) { pos=STREAMTell(S); pos+=offset; wherefrom=SEEK_SET; } else { pos=offset; wherefrom=whence; } S->InStart=0; S->InEnd=0; #ifdef _LARGEFILE64_SOURCE pos=(double) lseek64(S->in_fd,(off64_t) pos, wherefrom); #else pos=(double) lseek(S->in_fd,(off_t) pos, wherefrom); #endif return(pos); } int STREAMInternalPushProcessingModules(STREAM *S, const char *InData, int InLen, char **OutData, int *OutLen) { TProcessingModule *Mod; ListNode *Curr, *Next; int len, AllDataWritten=TRUE; char *TempBuff=NULL; const char *ptr; int Flush=FALSE; len=InLen; ptr=InData; if (InLen==0) Flush=TRUE; //Go through processing modules feeding the data from the previous one into them Curr=ListGetNext(S->ProcessingModules); while (Curr) { Next=ListGetNext(Curr); Mod=(TProcessingModule *) Curr->Item; if (Mod->Write && ((len > 0) || Flush)) { len=Mod->Write(Mod,ptr,len,OutData,OutLen,Flush); if (Flush && (len !=STREAM_CLOSED)) AllDataWritten=FALSE; if (Next) { TempBuff=SetStrLen(TempBuff, *OutLen); memcpy(TempBuff,*OutData,*OutLen); ptr=TempBuff; len=*OutLen; } } Curr=Next; } DestroyString(TempBuff); return(AllDataWritten); } int STREAMInternalQueueBytes(STREAM *S, const char *Bytes, int Len) { int o_len, written=0, avail, val, result=0; const char *ptr; o_len=Len; ptr=Bytes; do { avail=S->BuffSize - S->OutEnd; if (avail > 0) { if (avail > o_len) avail=o_len; memcpy(S->OutputBuff+S->OutEnd,ptr,avail); ptr+=avail; o_len-=avail; S->OutEnd+=avail; } if ( (S->OutEnd > S->StartPoint) || (S->OutEnd >= S->BuffSize) ) { //Buffer Full, Write some bytes!!! if (S->BlockSize) val=(S->OutEnd / S->BlockSize) * S->BlockSize; else val=S->OutEnd; if (val > 0) result=STREAMInternalFinalWriteBytes(S, S->OutputBuff, val); if (result==0) written=STREAM_TIMEOUT; if (result < 1) break; written+=result; } } while (o_len > 0); return(written); } /*A stream can have a series of 'processor modules' associated with it' */ /*which do things to the data before it is read/written. This function */ /*pumps the data through the processor list, and eventually writes it out */ int STREAMWriteBytes(STREAM *S, const char *Data, int DataLen) { const char *i_data; char *TempBuff=NULL; int len, written=0, result=0; int AllDataWritten=FALSE; if (! S) return(STREAM_CLOSED); if (S->out_fd==-1) return(STREAM_CLOSED); if (S->State & SS_WRITE_ERROR) return(STREAM_CLOSED); i_data=Data; len=DataLen; while (! AllDataWritten) { AllDataWritten=TRUE; if (ListSize(S->ProcessingModules)) { STREAMInternalPushProcessingModules(S, i_data, len, &TempBuff, &len); i_data=TempBuff; } result=STREAMInternalQueueBytes(S, i_data, len); if (result < 0) { DestroyString(TempBuff); return(result); } //Whatever happened above, o_data/o_len should hold data to be written //Must do this to avoid sending data into the queue multiple times! len=0; } //We always claim to have written the data that we've accepted //Though this can be overridden below written=DataLen; //if we are told to write zero bytes, that's a flush if ((S->OutEnd > 0) && ((DataLen==0) || (S->Flags & FLUSH_ALWAYS))) { //if we are flushing blocks, then pad out to the blocksize if (S->Flags & FLUSH_BLOCK) { len=(S->OutEnd / S->BlockSize) * S->BlockSize; if (S->OutEnd > len) len+=S->BlockSize; memset(S->OutputBuff+S->OutEnd,0,len - S->OutEnd); S->OutEnd=len; } result=STREAMInternalFinalWriteBytes(S, S->OutputBuff, S->OutEnd); if (result < 0) written=result; } DestroyString(TempBuff); return(written); } int STREAMWriteString(const char *Buffer, STREAM *S) { int result; if (StrLen(Buffer) < 1) return(FALSE); result=STREAMWriteBytes(S,Buffer,strlen(Buffer)); return(result); } int STREAMWriteLine(const char *Buffer, STREAM *S) { int result; if (StrLen(Buffer) < 1) return(FALSE); result=STREAMWriteBytes(S,Buffer,strlen(Buffer)); if (result < 0) return(result); if (S->Flags & FLUSH_LINE) result=STREAMFlush(S); return(result); } int STREAMReadChar(STREAM *S) { unsigned char inchar; int result; result=STREAMReadBytes(S, &inchar,1); if (result < 0) return(result); if (result==0) return(STREAM_NODATA); return((int) inchar); } int STREAMPeekChar(STREAM *S) { int result; if (S->InStart >= S->InEnd) { result=STREAMReadCharsToBuffer(S); if (result < 1) return(result); } return(* (S->InputBuff + S->InStart)); } int STREAMPeekBytes(STREAM *S, char *Buffer, int Buffsize) { int len=0, result=0; if (S->InStart >= S->InEnd) { result=STREAMReadCharsToBuffer(S); if (S->InStart >= S->InEnd) { if (result==STREAM_CLOSED) return(STREAM_CLOSED); if (result==STREAM_TIMEOUT) return(STREAM_TIMEOUT); if (result==STREAM_DATA_ERROR) return(STREAM_DATA_ERROR); } } len=S->InEnd-S->InStart; if (len > Buffsize) len=Buffsize; if (len > 0) memcpy(Buffer,S->InputBuff + S->InStart,len); return(len); } int STREAMWriteChar(STREAM *S,unsigned char inchar) { char tmpchar; tmpchar=(char) inchar; return(STREAMWriteBytes(S,&tmpchar,1)); } int STREAMReadBytesToTerm(STREAM *S, char *Buffer, int BuffSize,unsigned char Term) { int inchar, pos=0; inchar=STREAMReadChar(S); while (inchar != STREAM_CLOSED) { if (inchar > -1) { Buffer[pos]=inchar; pos++; if (inchar==Term) break; if (pos==BuffSize) break; } inchar=STREAMReadChar(S); } if ((pos==0) && (inchar==STREAM_CLOSED)) return(STREAM_CLOSED); return(pos); } char *STREAMReadToTerminator(char *Buffer, STREAM *S, unsigned char Term) { int result, len=0, bytes_read=0; char *RetStr=NULL, *ptr; RetStr=CopyStr(Buffer,""); while (1) { if (S->InEnd > S->InStart) { //memchr is wicked fast, so use it ptr=memchr(S->InputBuff+S->InStart,Term,S->InEnd - S->InStart); if (ptr) len=(ptr+1)-(S->InputBuff+S->InStart); else len=S->InEnd-S->InStart; //Get length of RetStr, because SetStrLen might realloc it RetStr=SetStrLen(RetStr,bytes_read + len); len=STREAMTransferBytesOut(S, RetStr+bytes_read , len); bytes_read+=len; *(RetStr+bytes_read)='\0'; //Only return if we found the terminator (using memchr, above) if (ptr) return(RetStr); } result=STREAMReadCharsToBuffer(S); if (S->InStart >= S->InEnd) { if (result==STREAM_TIMEOUT) return(RetStr); if (bytes_read==0) { DestroyString(RetStr); return(NULL); } return(RetStr); } } //impossible to get here! return(NULL); } char *STREAMReadToMultiTerminator(char *Buffer, STREAM *S, char *Terms) { int inchar, len=0; char *Tempptr; Tempptr=CopyStr(Buffer,""); inchar=STREAMReadChar(S); //All error conditions are negative, but '0' can just mean //no more data to read while (inchar > -1) { //if ((len % 100)== 0) Tempptr=realloc(Tempptr,(len/100 +1) *100 +2); //*(Tempptr+len)=inchar; if (inchar > 0) { Tempptr=AddCharToBuffer(Tempptr,len,(char) inchar); len++; if (strchr(Terms,inchar)) break; } inchar=STREAMReadChar(S); } *(Tempptr+len)='\0'; //if ((inchar==STREAM_CLOSED) && (errno==ECONNREFUSED)) return(Tempptr); if ( ((inchar==STREAM_CLOSED) || (inchar==STREAM_DATA_ERROR)) && (StrLen(Tempptr)==0) ) { free(Tempptr); return(NULL); } return(Tempptr); } char *STREAMReadLine(char *Buffer, STREAM *S) { return(STREAMReadToTerminator(Buffer,S,'\n')); } void STREAMResetInputBuffers(STREAM *S) { double pos; pos=STREAMTell(S); S->InStart=0; S->InEnd=0; STREAMSeek(S,pos,SEEK_SET); } char *STREAMGetValue(STREAM *S, const char *Name) { ListNode *Curr; if (! S->Values) return(NULL); Curr=ListFindNamedItem(S->Values,Name); if (Curr) return(Curr->Item); return(NULL); } void STREAMSetValue(STREAM *S, const char *Name, const char *Value) { if (! S->Values) S->Values=ListCreate(); SetVar(S->Values,Name,Value); } void *STREAMGetItem(STREAM *S, const char *Name) { ListNode *Curr; if (! S->Items) return(NULL); Curr=ListFindNamedItem(S->Items,Name); if (Curr) return(Curr->Item); return(NULL); } void STREAMSetItem(STREAM *S, const char *Name, void *Value) { ListNode *Curr; if (! S->Items) S->Items=ListCreate(); Curr=ListFindNamedItem(S->Items,Name); if (Curr) Curr->Item=Value; else ListAddNamedItem(S->Items,Name,Value); } int STREAMSendFile(STREAM *In, STREAM *Out, off_t Max) { int bytes_read=0, result; int UseSendFile=FALSE; //val has to be as long as possible, because it will hold the difference //between two off_t values. However, use of 'long long' resulted in an //unsigned value, which caused all manner of problems, so a long is the //best we can manage long val, len; #undef USE_SENDFILE #ifdef USE_SENDFILE #include //if we are not using ssl and not using processor modules, we can use //kernel-level copy! if ( (! (In->Flags & SF_SSL)) && (! (Out->Flags & SF_SSL)) && (ListSize(In->ProcessingModules)==0) && (ListSize(Out->ProcessingModules)==0) ) UseSendFile=TRUE; #endif len=(long) Max-bytes_read; #ifdef USE_SENDFILE if (UseSendFile) { STREAMFlush(Out); result=sendfile(Out->out_fd, In->in_fd,0,len); if ((result < 1) && (bytes_read==0)) UseSendFile=FALSE; } #endif if (! UseSendFile) { //How much still left to transfer? //if outbuff is full do some flushing val=Out->BuffSize - Out->OutEnd; if (val < 1) { STREAMFlush(Out); sleep(0); val=Out->BuffSize - Out->OutEnd; } //if outbuff smaller than len, then shrink len if (len > val) len=val; //if inbuff remaining is smaller than len, then shrik that STREAMReadCharsToBuffer(In); val=In->InEnd - In->InStart; if (len > val) len=val; if (len <0) len=0; result=STREAMWriteBytes(Out,In->InputBuff+In->InStart,len); if (result > 0) { In->InStart+=result; bytes_read+=result; } else if (result ==STREAM_CLOSED) { if (bytes_read==0) bytes_read=result; } } return(bytes_read); } hashrat-1.6.1/libUseful-2.1/file.h0000644000175000017550000001056312470734537017263 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_FILE_H #define LIBUSEFUL_FILE_H #include #include //for 'struct timeval' #include "list.h" #define STREAM_CLOSED -1 #define STREAM_NODATA -2 #define STREAM_TIMEOUT -3 #define STREAM_DATA_ERROR -4 /* #define O_ACCMODE 00000003 #define O_RDONLY 00000000 #define O_WRONLY 00000001 #define O_RDWR 00000002 #define O_CREAT 00000100 #define O_EXCL 00000200 #define O_NOCTTY 00000400 #define O_TRUNC 00001000 #define O_APPEND 00002000 #define O_NONBLOCK 00004000 #define O_DSYNC 00010000 #define O_DIRECT 00040000 #define O_LARGEFILE 00100000 #define O_DIRECTORY 00200000 #define O_NOFOLLOW 00400000 #define O_NOATIME 01000000 #define O_CLOEXEC 02000000 */ //Flags that alter stream behavior #define FLUSH_FULL 0 #define FLUSH_LINE 1 #define FLUSH_BLOCK 2 #define FLUSH_ALWAYS 4 #define FLUSH_BUFFER 8 #define SF_RDWR 0 //is the default #define SF_RDONLY 16 #define SF_WRONLY 32 #define SF_CREAT 64 #define SF_CREATE 64 #define SF_APPEND 128 #define SF_TRUNC 256 #define SF_SYMLINK_OK 512 #define SF_WRLOCK 1024 #define SF_RDLOCK 2048 #define SF_FOLLOW 4096 #define SF_SECURE 8192 #define SF_NONBLOCK 16384 #define SF_SSL 32768 #define SF_AUTH 65536 //Stream state values #define SS_CONNECTING 1 #define SS_CONNECTED 2 #define SS_HANDSHAKE_DONE 4 #define SS_DATA_ERROR 8 #define SS_WRITE_ERROR 16 #define SS_EMBARGOED 32 #define SS_AUTH 8192 #define SS_USER1 268435456 #define SS_USER2 536870912 #define SS_USER3 1073741824 #define SS_USER4 2147483648 #define STREAM_TYPE_FILE 0 #define STREAM_TYPE_UNIX 1 #define STREAM_TYPE_UNIX_DGRAM 2 #define STREAM_TYPE_TCP 3 #define STREAM_TYPE_UDP 4 #define STREAM_TYPE_SSL 5 #define STREAM_TYPE_HTTP 6 #define STREAM_TYPE_CHUNKED_HTTP 7 #define O_LOCK O_NOCTTY #define SELECT_READ 1 #define SELECT_WRITE 2 typedef struct { int Type; int in_fd, out_fd; unsigned int Flags; unsigned int State; unsigned int Timeout; unsigned int BlockSize; unsigned int BuffSize; unsigned int StartPoint; unsigned int InStart, InEnd; unsigned int OutEnd; char *InputBuff; char *OutputBuff; unsigned int BytesRead; unsigned int BytesWritten; char *Path; ListNode *ProcessingModules; ListNode *Values; ListNode *Items; } STREAM; #ifdef __cplusplus extern "C" { #endif int FDSelect(int fd, int Flags, struct timeval *tv); int FDIsWritable(int); int FDCheckForBytes(int); void STREAMSetFlags(STREAM *S, int Set, int UnSet); void STREAMSetTimeout(STREAM *, int); void STREAMSetFlushType(STREAM *Stream, int Type, int StartPoint, int BlockSize); STREAM *STREAMCreate(); STREAM *STREAMOpenFile(const char *Path, int Mode); STREAM *STREAMClose(STREAM *Stream); int STREAMLock(STREAM *S, int val); int STREAMFlush(STREAM *Stream); void STREAMClear(STREAM *Stream); double STREAMTell(STREAM *Stream); double STREAMSeek(STREAM *Stream, double, int whence); void STREAMResizeBuffer(STREAM *, int); int STREAMReadChar(STREAM *); int STREAMWriteChar(STREAM *,unsigned char); char* STREAMReadLine(char *Buffer, STREAM *); int STREAMReadBytesToTerm(STREAM *S, char *Buffer, int BuffSize,unsigned char Term); char* STREAMReadToTerminator(char *Buffer, STREAM *,unsigned char Term); char* STREAMReadToMultiTerminator(char *Buffer, STREAM *, char *Terms); int STREAMWriteString(const char *Buffer, STREAM *); int STREAMWriteLine(const char *Buffer, STREAM *); STREAM *STREAMFromFD(int fd); STREAM *STREAMFromDualFD(int in_fd, int out_fd); STREAM *STREAMSpawnCommand(const char *Command, int type); int STREAMDisassociateFromFD(STREAM *Stream); int STREAMPeekChar(STREAM *); int STREAMPeekBytes(STREAM *S, char *Buffer, int Buffsize); void STREAMResetInputBuffers(STREAM *S); int STREAMReadThroughProcessors(STREAM *S, char *Bytes, int InLen); int STREAMReadBytes(STREAM *, char *Buffer, int Bytes); int STREAMWriteBytes(STREAM *, const char *Buffer, int Bytes); int STREAMCheckForBytes(STREAM *); int STREAMCheckForWaitingChar(STREAM *S,unsigned char check_char); int STREAMCountWaitingBytes(STREAM *); STREAM *STREAMSelect(ListNode *Streams, struct timeval *timeout); void STREAMSetValue(STREAM *S, const char *Name, const char *Value); char *STREAMGetValue(STREAM *S, const char *Name); void STREAMSetItem(STREAM *S, const char *Name, void *Item); void *STREAMGetItem(STREAM *S, const char *Name); int STREAMSendFile(STREAM *In, STREAM *Out, off_t Max); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/http.c0000644000175000017550000006436512470734537017327 0ustar metacosm89metacosm89#include "http.h" #include "DataProcessing.h" #include "ConnectionChain.h" #include "Hash.h" #include "ParseURL.h" #include "Time.h" #include "base64.h" const char *HTTP_AUTH_BY_TOKEN="AuthTokenType"; ListNode *Cookies=NULL; ListNode *HTTPVars=NULL; int g_Flags=0; void HTTPInfoDestroy(void *p_Info) { HTTPInfoStruct *Info; if (! p_Info) return; Info=(HTTPInfoStruct *) p_Info; DestroyString(Info->Host); DestroyString(Info->Method); DestroyString(Info->Doc); DestroyString(Info->Destination); DestroyString(Info->ResponseCode); DestroyString(Info->PreviousRedirect); DestroyString(Info->RedirectPath); DestroyString(Info->ContentType); DestroyString(Info->Timestamp); DestroyString(Info->PostData); DestroyString(Info->PostContentType); DestroyString(Info->Proxy); DestroyString(Info->Authorization); DestroyString(Info->ProxyAuthorization); ListDestroy(Info->ServerHeaders,DestroyString); ListDestroy(Info->CustomSendHeaders,DestroyString); free(Info); } void HTTPSetVar(char *Name, char *Var) { if (! HTTPVars) HTTPVars=ListCreate(); SetVar(HTTPVars,Name,Var); } //These functions relate to adding a 'Data processor' to the stream that //will decode chunked HTTP transfers typedef struct { char *Buffer; int ChunkSize; int BuffLen; } THTTPChunk; int HTTPChunkedInit(TProcessingModule *Mod, const char *Args) { Mod->Data=(THTTPChunk *) calloc(1, sizeof(THTTPChunk)); return(TRUE); } int HTTPChunkedRead(TProcessingModule *Mod, const char *InBuff, int InLen, char **OutBuff, int *OutLen, int Flush) { int len=0, val=0; THTTPChunk *Chunk; char *ptr, *vptr; Chunk=(THTTPChunk *) Mod->Data; if (InLen > 0) { len=Chunk->BuffLen+InLen; Chunk->Buffer=SetStrLen(Chunk->Buffer,len); memcpy(Chunk->Buffer+Chunk->BuffLen,InBuff,InLen); Chunk->BuffLen=len; Chunk->Buffer[len]='\0'; } else len=Chunk->BuffLen; ptr=Chunk->Buffer; if (Chunk->ChunkSize==0) { //if chunksize == 0 then read the size of the next chunk //if there's nothing in our buffer, and nothing being added, then //we've already finished! if ((Chunk->BuffLen==0) && (InLen==0)) return(STREAM_CLOSED); vptr=ptr; //skip past any leading '\r' or '\n' if (*vptr=='\r') vptr++; if (*vptr=='\n') vptr++; ptr=strchr(vptr,'\n'); //sometimes people seem to miss off the final '\n', so if we get told there's no more data //we should use a '\r' if we've got one if ((! ptr) && (InLen==0)) ptr=strchr(vptr,'\r'); if (ptr) { *ptr='\0'; ptr++; } else return(0); Chunk->ChunkSize=strtol(vptr,NULL,16); Chunk->BuffLen=Chunk->Buffer+len-ptr; if (Chunk->BuffLen > 0) memmove(Chunk->Buffer,ptr,Chunk->BuffLen); //in case it went negative in the above calcuation else Chunk->BuffLen=0; //if we got chunksize of 0 then we're done, return STREAM_CLOSED if (Chunk->ChunkSize==0) return(STREAM_CLOSED); } else if (len >= Chunk->ChunkSize) { val=Chunk->ChunkSize; //We should really grow OutBuff to take all the data //but for the sake of simplicity we'll just use the space //supplied if (val > *OutLen) val=*OutLen; memcpy(*OutBuff,Chunk->Buffer,val); ptr=Chunk->Buffer+val; Chunk->BuffLen-=val; Chunk->ChunkSize-=val; memmove(Chunk->Buffer, ptr, Chunk->BuffLen); } if (Chunk->ChunkSize < 0) Chunk->ChunkSize=0; return(val); } int HTTPChunkedClose(TProcessingModule *Mod) { THTTPChunk *Chunk; Chunk=(THTTPChunk *) Mod->Data; DestroyString(Chunk->Buffer); free(Chunk); return(TRUE); } void HTTPAddChunkedProcessor(STREAM *S) { TProcessingModule *Mod=NULL; Mod=(TProcessingModule *) calloc(1,sizeof(TProcessingModule)); Mod->Name=CopyStr(Mod->Name,"HTTP:Chunked"); Mod->Init=HTTPChunkedInit; Mod->Read=HTTPChunkedRead; Mod->Close=HTTPChunkedClose; Mod->Init(Mod, ""); STREAMAddDataProcessor(S,Mod,""); } char *HTTPUnQuote(char *RetBuff, char *Str) { char *RetStr=NULL, *Token=NULL, *ptr; int olen=0, ilen; RetStr=CopyStr(RetStr,""); ilen=StrLen(Str); for (ptr=Str; ptr < (Str+ilen); ptr++) { switch (*ptr) { case '+': RetStr=AddCharToBuffer(RetStr,olen,' '); olen++; break; case '%': ptr++; Token=CopyStrLen(Token,ptr,2); ptr++; //not +=2, as we will increment again RetStr=AddCharToBuffer(RetStr,olen,strtol(Token,NULL,16) & 0xFF); olen++; break; default: RetStr=AddCharToBuffer(RetStr,olen,*ptr); olen++; break; } } DestroyString(Token); return(RetStr); } char *HTTPQuoteChars(char *RetBuff, char *Str, char *CharList) { char *RetStr=NULL, *Token=NULL, *ptr; int olen=0, ilen; RetStr=CopyStr(RetStr,""); ilen=StrLen(Str); for (ptr=Str; ptr < (Str+ilen); ptr++) { if (strchr(CharList,*ptr)) { Token=FormatStr(Token,"%%%02X",*ptr); RetStr=CatStr(RetStr,Token); olen+=StrLen(Token); } else { RetStr=AddCharToBuffer(RetStr,olen,*ptr); olen++; } } RetStr[olen]='\0'; DestroyString(Token); return(RetStr); } char *HTTPQuote(char *RetBuff, char *Str) { char *RetStr=NULL, *Token=NULL, *ptr; int olen=0, ilen; RetStr=CopyStr(RetStr,""); ilen=StrLen(Str); for (ptr=Str; ptr < (Str+ilen); ptr++) { switch (*ptr) { case ' ': RetStr=AddCharToStr(RetStr,'+'); break; case '(': case ')': case '[': case ']': case '{': case '}': case '\t': case '?': case '&': case '!': case ',': case '+': case '\'': case ':': case ';': case '/': case '\r': case '\n': Token=FormatStr(Token,"%%%02X",*ptr); RetStr=CatStr(RetStr,Token); olen+=StrLen(Token); break; default: // RetStr=AddCharToBuffer(RetStr,olen,*ptr); RetStr=AddCharToStr(RetStr,*ptr); olen++; break; } } DestroyString(Token); return(RetStr); } void HTTPInfoSetAuth(HTTPInfoStruct *Info, char *Logon, char *Password, int Type) { char **p_Auth; if (Type & HTTP_AUTH_PROXY) p_Auth=&Info->ProxyAuthorization; else p_Auth=&Info->Authorization; *p_Auth=MCopyStr(*p_Auth,":",Logon,":",Password, NULL); } void HTTPInfoSetValues(HTTPInfoStruct *Info, char *Host, int Port, char *Logon, char *Password, char *Method, char *Doc, char *ContentType, int ContentLength) { Info->State=0; Info->PostData=CopyStr(Info->PostData,""); Info->Host=CopyStr(Info->Host,Host); if (Port > 0) Info->Port=Port; else Info->Port=0; Info->Method=CopyStr(Info->Method,Method); Info->Doc=CopyStr(Info->Doc,Doc); Info->PostContentType=CopyStr(Info->PostContentType,ContentType); Info->PostContentLength=ContentLength; if (StrLen(Logon) || StrLen(Password)) HTTPInfoSetAuth(Info, Logon, Password, HTTP_AUTH_BASIC); } HTTPInfoStruct *HTTPInfoCreate(char *Host, int Port, char *Logon, char *Password, char *Method, char *Doc, char *ContentType, int ContentLength) { HTTPInfoStruct *Info; char *ptr; Info=(HTTPInfoStruct *) calloc(1,sizeof(HTTPInfoStruct)); HTTPInfoSetValues(Info, Host, Port, Logon, Password, Method, Doc, ContentType, ContentLength); Info->ServerHeaders=ListCreate(); Info->CustomSendHeaders=ListCreate(); //SetVar(Info->CustomSendHeaders,"Accept","*/*"); if (g_Flags) Info->Flags=g_Flags; ptr=LibUsefulGetValue("HTTP:Proxy"); if (StrLen(ptr)) { Info->Proxy=CopyStr(Info->Proxy,ptr); strlwr(Info->Proxy); if (strncmp(Info->Proxy,"http:",5)==0) Info->Flags |= HTTP_PROXY; else if (strncmp(Info->Proxy,"https:",6)==0) Info->Flags |= HTTP_PROXY; else Info->Flags=HTTP_TUNNEL; } return(Info); } char *HTTPInfoToURL(char *RetBuff, HTTPInfoStruct *Info) { char *p_proto; char *Doc=NULL, *RetStr=NULL; if (Info->Flags & HTTP_SSL) p_proto="https"; else p_proto="http"; Doc=HTTPQuoteChars(Doc,Info->Doc," "); RetStr=FormatStr(RetBuff,"%s://%s:%d%s",p_proto,Info->Host,Info->Port,Info->Doc); DestroyString(Doc); return(RetStr); } HTTPInfoStruct *HTTPInfoFromURL(char *Method, char *URL) { HTTPInfoStruct *Info; char *Proto=NULL, *User=NULL, *Pass=NULL, *Token=NULL; Info=HTTPInfoCreate("", 80, "", "", Method, "", "",0); if (strcasecmp(Method,"POST")==0) ParseURL(URL, &Proto, &Info->Host, &Token, &User, &Pass,&Info->Doc,&Info->PostData); else ParseURL(URL, &Proto, &Info->Host, &Token, &User, &Pass,&Info->Doc, NULL); if (StrLen(Token)) Info->Port=atoi(Token); if (StrLen(User) || StrLen(Pass)) HTTPInfoSetAuth(Info,User, Pass, HTTP_AUTH_BASIC); if (StrLen(Proto) && (strcmp(Proto,"https")==0)) Info->Flags |= HTTP_SSL; if (StrLen(Info->PostData)) { Info->PostContentType=CopyStr(Info->PostContentType,"application/x-www-form-urlencoded"); Info->PostContentLength=StrLen(Info->PostData); } DestroyString(User); DestroyString(Pass); DestroyString(Token); DestroyString(Proto); return(Info); } void HTTPParseCookie(HTTPInfoStruct *Info, char *Str) { char *startptr, *endptr; char *Tempstr=NULL; ListNode *Curr; int len; startptr=Str; while (*startptr==' ') startptr++; endptr=strchr(startptr,';'); if (endptr==NULL) endptr=startptr+strlen(Str); // if (( *endptr==';') || (*endptr=='\r') ) endptr--; Tempstr=CopyStrLen(Tempstr,startptr,endptr-startptr); Curr=ListGetNext(Cookies); endptr=strchr(Tempstr,'='); len=endptr-Tempstr; len--; while (Curr !=NULL) { if (strncmp(Curr->Item,Tempstr,len)==0) { Curr->Item=CopyStr(Curr->Item,Tempstr); DestroyString(Tempstr); return; } Curr=ListGetNext(Curr); } if (! Cookies) Cookies=ListCreate(); ListAddItem(Cookies,(void *)CopyStr(NULL,Tempstr)); DestroyString(Tempstr); } char *AppendCookies(char *InStr, ListNode *CookieList) { ListNode *Curr; char *Tempstr=NULL; Tempstr=InStr; Curr=ListGetNext(CookieList); if (Curr) { Tempstr=CatStr(Tempstr,"Cookie: "); while ( Curr ) { Tempstr=CatStr(Tempstr,(char *)Curr->Item); Curr=ListGetNext(Curr); if (Curr) Tempstr=CatStr(Tempstr, "; "); } Tempstr=CatStr(Tempstr,"\r\n"); } return(Tempstr); } void HTTPHandleWWWAuthenticate(HTTPInfoStruct *Info, char *Line) { char *ptr, *ptr2, *Token=NULL, *Name=NULL, *Value=NULL; const char *AuthTypeStrings[]={"Basic","Digest",NULL}; char *Realm=NULL, *QOP=NULL, *Nonce=NULL, *Opaque=NULL; typedef enum {AUTH_BASIC, AUTH_DIGEST} TAuthTypes; int result; ptr=Line; while (isspace(*ptr)) ptr++; ptr=GetToken(ptr," ",&Token,0); QOP=CopyStr(QOP,""); Realm=CopyStr(Realm,""); Nonce=CopyStr(Nonce,""); Opaque=CopyStr(Opaque,""); while (ptr) { ptr=GetToken(ptr,",",&Token,GETTOKEN_QUOTES); StripLeadingWhitespace(Token); StripTrailingWhitespace(Token); ptr2=GetToken(Token,"=",&Name,GETTOKEN_QUOTES); ptr2=GetToken(ptr2,"=",&Value,GETTOKEN_QUOTES); if (strcasecmp(Name,"realm")==0) Realm=CopyStr(Realm,Value); if (strcasecmp(Name,"qop")==0) QOP=CopyStr(QOP,Value); if (strcasecmp(Name,"nonce")==0) Nonce=CopyStr(Nonce,Value); if (strcasecmp(Name,"opaque")==0) Opaque=CopyStr(Opaque,Value); } result=MatchTokenFromList(Token,AuthTypeStrings,0); switch (result) { case AUTH_BASIC: Info->AuthFlags |= HTTP_AUTH_BASIC; break; //case AUTH_DIGEST: Info->Authorization=MCopyStr(Info->Authorization,"digest:",Realm,":", QOP, ":", Nonce, ":", Opaque, ":", NULL); break; } DestroyString(Token); DestroyString(Value); DestroyString(Name); DestroyString(Realm); DestroyString(QOP); DestroyString(Nonce); DestroyString(Opaque); } void HTTPParseHeader(STREAM *S, HTTPInfoStruct *Info, char *Header) { char *Token=NULL, *Tempstr=NULL; char *ptr; if (Info->Flags & HTTP_DEBUG) fprintf(stderr,"HEADER: %s\n",Header); ptr=GetToken(Header,":",&Token,0); while (isspace(*ptr)) ptr++; Tempstr=MCopyStr(Tempstr,"HTTP:",Token,NULL); STREAMSetValue(S,Tempstr,ptr); ListAddNamedItem(Info->ServerHeaders,Token,CopyStr(NULL,ptr)); if (StrLen(Token) && StrLen(ptr)) { switch (*Token) { case 'C': case 'c': if (strcasecmp(Token,"Content-length")==0) { Info->ContentLength=atoi(ptr); } else if (strcasecmp(Token,"Content-type")==0) { Info->ContentType=CopyStr(Info->ContentType,ptr); } else if (strcasecmp(Token,"Connection")==0) { if (strcasecmp(ptr,"Close")==0) Info->Flags &= ~HTTP_KEEPALIVE; } else if ((strcasecmp(Token,"Content-Encoding")==0) ) { if (! (Info->Flags & HTTP_NODECODE)) { strlwr(ptr); if ( (strcmp(ptr,"gzip")==0) || (strcmp(ptr,"x-gzip")==0) ) { Info->Flags |= HTTP_GZIP; } if ( (strcmp(ptr,"deflate")==0) ) { Info->Flags |= HTTP_DEFLATE; } } } break; case 'D': case 'd': if (strcasecmp(Token,"Date")==0) Info->Timestamp=CopyStr(Info->Timestamp,ptr); break; case 'L': case 'l': if (strcasecmp(Token,"Location")==0) { if ( (strncasecmp(ptr,"http:",5)==0) || (strncasecmp(ptr,"https:",6)==0) ) { Info->RedirectPath=CopyStr(Info->RedirectPath,ptr); } else Info->RedirectPath=FormatStr(Info->RedirectPath,"http://%s:%d%s",Info->Host,Info->Port,ptr); } break; case 'W': case 'w': if (strcasecmp(Token,"WWW-Authenticate")==0) HTTPHandleWWWAuthenticate(Info,ptr); break; case 'S': case 's': if (strcasecmp(Token,"Set-Cookie")==0) HTTPParseCookie(Info,ptr); else if (strcasecmp(Token,"Status")==0) { //'Status' overrides the response Info->ResponseCode=CopyStrLen(Info->ResponseCode,ptr,3); STREAMSetValue(S,"HTTP:ResponseCode",Info->ResponseCode); } break; case 'T': case 't': if ( (strcasecmp(Token,"Transfer-Encoding")==0) ) { if (! (Info->Flags & HTTP_NODECODE)) { strlwr(ptr); if (strstr(ptr,"chunked")) { Info->Flags |= HTTP_CHUNKED; } } } break; } } DestroyString(Token); DestroyString(Tempstr); } char *HTTPHeadersAppendAuth(char *RetStr, char *AuthHeader, HTTPInfoStruct *Info, char *AuthInfo) { char *SendStr=NULL, *Tempstr=NULL, *ptr; char *HA1=NULL, *HA2=NULL, *ClientNonce=NULL, *Digest=NULL; if (! StrLen(AuthInfo)) return(RetStr); SendStr=CatStr(RetStr,""); //Authentication by an opaque authentication token that is handled //elsewhere, and is set as the 'Password' if (Info->AuthFlags & HTTP_AUTH_TOKEN) { SendStr=MCatStr(SendStr,AuthHeader,": ",AuthInfo,"\r\n",NULL); Info->AuthFlags |= HTTP_AUTH_SENT; } else if (Info->AuthFlags & HTTP_AUTH_DIGEST) { /* AuthCounter++; Tempstr=FormatStr(Tempstr,"%s:%s:%s",AuthInfo->Logon,AuthInfo->AuthRealm,AuthInfo->Password); HashBytes(&HA1,"md5",Tempstr,StrLen(Tempstr),0); Tempstr=FormatStr(Tempstr,"%s:%s",Info->Method,Info->Doc); HashBytes(&HA2,"md5",Tempstr,StrLen(Tempstr),0); for (i=0; i < 10; i++) { Tempstr=FormatStr(Tempstr,"%x",rand() % 255); ClientNonce=CatStr(ClientNonce,Tempstr); } Tempstr=FormatStr(Tempstr,"%s:%s:%08d:%s:auth:%s",HA1,AuthInfo->AuthNonce,AuthCounter,ClientNonce,HA2); HashBytes(&Digest,"md5",Tempstr,StrLen(Tempstr),0); Tempstr=FormatStr(Tempstr,"%s: Digest username=\"%s\",realm=\"%s\",nonce=\"%s\",uri=\"%s\",qop=auth,nc=%08d,cnonce=\"%s\",response=\"%s\"\r\n",AuthHeader,AuthInfo->Logon,AuthInfo->AuthRealm,AuthInfo->AuthNonce,Info->Doc,AuthCounter,ClientNonce,Digest); SendStr=CatStr(SendStr,Tempstr); Info->AuthFlags |= HTTP_AUTH_SENT; */ } else { //Realm ptr=GetToken(AuthInfo,":",&Tempstr,0); //We should now have Logon:Password Digest=SetStrLen(Digest,StrLen(ptr) *2); to64frombits((unsigned char *) Digest, (unsigned char *) ptr,strlen(ptr)); SendStr=MCatStr(SendStr,AuthHeader,": Basic ",Digest,"\r\n",NULL); Info->AuthFlags |= HTTP_AUTH_SENT; } DestroyString(HA1); DestroyString(HA2); DestroyString(ClientNonce); DestroyString(Digest); DestroyString(Tempstr); return(SendStr); } void HTTPSendHeaders(STREAM *S, HTTPInfoStruct *Info) { char *SendStr=NULL, *Tempstr=NULL, *ptr; ListNode *Curr; STREAMClearDataProcessors(S); SendStr=CopyStr(SendStr,Info->Method); SendStr=CatStr(SendStr," "); if (Info->Flags & HTTP_PROXY) Tempstr=HTTPInfoToURL(Tempstr, Info); else Tempstr=HTTPQuoteChars(Tempstr,Info->Doc," "); SendStr=CatStr(SendStr,Tempstr); if (Info->Flags & HTTP_VER1_0) SendStr=CatStr(SendStr," HTTP/1.0\r\n"); else SendStr=MCatStr(SendStr," HTTP/1.1\r\n","Host: ",Info->Host,"\r\n",NULL); if (StrLen(Info->PostContentType) >0) { Tempstr=FormatStr(Tempstr,"Content-type: %s\r\n",Info->PostContentType); SendStr=CatStr(SendStr,Tempstr); } if (Info->PostContentLength > 0) { Tempstr=FormatStr(Tempstr,"Content-Length: %d\r\n",Info->PostContentLength); SendStr=CatStr(SendStr,Tempstr); } if (StrLen(Info->Destination)) { Tempstr=FormatStr(Tempstr,"Destination: %s\r\n",Info->Destination); SendStr=CatStr(SendStr,Tempstr); } /* If we have authorisation details then send them */ if (Info->Authorization) SendStr=HTTPHeadersAppendAuth(SendStr, "Authorization", Info, Info->Authorization); if (Info->ProxyAuthorization) SendStr=HTTPHeadersAppendAuth(SendStr, "Proxy-Authorization", Info, Info->ProxyAuthorization); if (Info->Flags & HTTP_NOCACHE) SendStr=CatStr(SendStr,"Pragma: no-cache\r\nCache-control: no-cache\r\n"); if (Info->Depth > 0) { Tempstr=FormatStr(Tempstr,"Depth: %d\r\n",Info->Depth); SendStr=CatStr(SendStr,Tempstr); } /* if ((PathData->Options.Restart) && (PathData->offset >0)) { snprintf(Buffer,sizeof(Buffer),"Range: bytes=%d-\r\n",PathData->offset); SendStr=CatStr(SendStr,Buffer); } */ if (Info->IfModifiedSince > 0) { Tempstr=CopyStr(Tempstr,GetDateStrFromSecs("%a, %d %b %Y %H:%M:%S GMT",Info->IfModifiedSince,NULL)); SendStr=MCatStr(SendStr,"If-Modified-Since: ",Tempstr, "\r\n",NULL); } if ( (strcasecmp(Info->Method,"DELETE") !=0) && (strcasecmp(Info->Method,"HEAD") !=0) && (strcasecmp(Info->Method,"PUT") !=0) ) { Tempstr=CopyStr(Tempstr,""); if (! (Info->Flags & HTTP_NOCOMPRESS)) { if (DataProcessorAvailable("compress","gzip")) Tempstr=CatStr(Tempstr,"gzip"); if (DataProcessorAvailable("compress","zlib")) { if (StrLen(Tempstr)) Tempstr=CatStr(Tempstr,", deflate"); else Tempstr=CatStr(Tempstr,"deflate"); } } if (StrLen(Tempstr)) SendStr=MCatStr(SendStr,"Accept-Encoding: ",Tempstr,"\r\n",NULL); else SendStr=CatStr(SendStr,"Accept-Encoding: *.*\r\n"); } if (Info->Flags & HTTP_KEEPALIVE) { //if (Info->Flags & HTTP_VER1_0) SendStr=CatStr(SendStr,"Connection: Keep-Alive\r\n"); //SendStr=CatStr(SendStr,"Content-Length: 0\r\n"); } else { SendStr=CatStr(SendStr,"Connection: close\r\n"); } ptr=LibUsefulGetValue("HTTP:User-Agent"); if (StrLen(ptr)) SendStr=MCatStr(SendStr,"User-Agent: ",ptr, "\r\n",NULL); Curr=ListGetNext(Info->CustomSendHeaders); while (Curr) { SendStr=MCatStr(SendStr,Curr->Tag, ": ", (char *) Curr->Item, "\r\n",NULL); Curr=ListGetNext(Curr); } if (! (Info->Flags & HTTP_NOCOOKIES)) { SendStr=AppendCookies(SendStr,Cookies); } SendStr=CatStr(SendStr,"\r\n"); Info->State |= HTTP_HEADERS_SENT; if (Info->Flags & HTTP_DEBUG) fprintf(stderr,"HTTPSEND: ------\n%s------\n\n",SendStr); STREAMWriteLine(SendStr,S); STREAMFlush(S); DestroyString(Tempstr); DestroyString(SendStr); } void HTTPReadHeaders(STREAM *S, HTTPInfoStruct *Info) { char *Tempstr=NULL, *ptr; ListClear(Info->ServerHeaders,DestroyString); Info->ContentLength=0; //Not needed //Info->RedirectPath=CopyStr(Info->RedirectPath,""); Info->Flags &= ~(HTTP_CHUNKED | HTTP_GZIP | HTTP_DEFLATE); Tempstr=STREAMReadLine(Tempstr,S); if (Tempstr) { if (Info->Flags & HTTP_DEBUG) fprintf(stderr,"RESPONSE: %s\n",Tempstr); if (strncmp(Tempstr,"HTTP/",5)==0) { ptr=strchr(Tempstr,' '); ptr++; Info->ResponseCode=CopyStrLen(Info->ResponseCode,ptr,3); STREAMSetValue(S,"HTTP:ResponseCode",Info->ResponseCode); } Tempstr=STREAMReadLine(Tempstr,S); } while (Tempstr) { StripTrailingWhitespace(Tempstr); if (StrLen(Tempstr)==0) break; HTTPParseHeader(S, Info,Tempstr); Tempstr=STREAMReadLine(Tempstr,S); } //Handle Response Codes if (StrLen(Info->ResponseCode)) { if (*Info->ResponseCode=='3') { //No longer a flag, HTTP Redirect is now just a response code //Info->Flags |= HTTP_REDIRECT; } if (strcmp(Info->ResponseCode,"401")==0) { if (Info->AuthFlags) Info->AuthFlags |= HTTP_AUTH_BASIC; } if (strcmp(Info->ResponseCode,"407")==0) { if (Info->AuthFlags) Info->AuthFlags |= HTTP_AUTH_PROXY; } } S->BytesRead=0; DestroyString(Tempstr); } int HTTPProcessResponse(HTTPInfoStruct *HTTPInfo) { int result=HTTP_ERROR; char *Proto=NULL, *PortStr=NULL; int RCode; if (HTTPInfo->ResponseCode) { RCode=atoi(HTTPInfo->ResponseCode); switch (RCode) { case 304: result=HTTP_NOTMODIFIED; break; case 200: case 201: case 202: case 203: case 204: case 205: case 206: case 207: case 400: result=HTTP_OKAY; break; case 301: case 302: case 303: case 307: case 308: if (HTTPInfo->PreviousRedirect && (strcmp(HTTPInfo->RedirectPath,HTTPInfo->PreviousRedirect)==0)) result=HTTP_CIRCULAR_REDIRECTS; else { if (HTTPInfo->Flags & HTTP_DEBUG) fprintf(stderr,"HTTP: Redirected to %s\n",HTTPInfo->RedirectPath); //As redirect check has been done, we can copy redirect path to previous HTTPInfo->PreviousRedirect=CopyStr(HTTPInfo->PreviousRedirect,HTTPInfo->RedirectPath); ParseURL(HTTPInfo->RedirectPath, &Proto, &HTTPInfo->Host, &PortStr,NULL, NULL,&HTTPInfo->Doc,NULL); HTTPInfo->Port=atoi(PortStr); //if HTTP_SSL_REWRITE is set, then all redirects get forced to https if (HTTPInfo->Flags & HTTP_SSL_REWRITE) Proto=CopyStr(Proto,"https"); if (strcmp(Proto,"https")==0) HTTPInfo->Flags |= HTTP_SSL; else HTTPInfo->Flags &= ~HTTP_SSL; //303 Redirects must be get! if (RCode==303) { HTTPInfo->Method=CopyStr(HTTPInfo->Method,"GET"); HTTPInfo->PostData=CopyStr(HTTPInfo->PostData,""); HTTPInfo->PostContentType=CopyStr(HTTPInfo->PostContentType,""); HTTPInfo->PostContentLength=0; } if (! (HTTPInfo->Flags & HTTP_NOREDIRECT)) result=HTTP_REDIRECT; else result=HTTP_OKAY; } break; //401 Means authenticate, so it's not a pure error case 401: //407 Means authenticate with a proxy result=HTTP_AUTH_BASIC; break; case 407: result=HTTP_AUTH_PROXY; break; default: result=HTTP_NOTFOUND; break; } } DestroyString(Proto); DestroyString(PortStr); return(result); } STREAM *HTTPSetupConnection(HTTPInfoStruct *Info, int ForceHTTPS) { char *Tempstr=NULL, *Host=NULL, *Token=NULL, *ptr; char *Logon=NULL, *Pass=NULL; int Port=0, Flags=0; STREAM *S; S=STREAMCreate(); if (Info->Flags & HTTP_PROXY) { ParseURL(Info->Proxy, &Tempstr, &Host, &Token, &Logon, &Pass, NULL,NULL); //&Info->ProxyAuthorization->Logon, Port=atoi(Token); if (ForceHTTPS) Tempstr=CopyStr(Tempstr,"https"); if (strcasecmp(Tempstr,"https")==0) Flags |= CONNECT_SSL; } else { Host=CopyStr(Host,Info->Host); Port=Info->Port; if (Info->Flags & HTTP_SSL) Flags |= CONNECT_SSL; if (ForceHTTPS) { Flags |= CONNECT_SSL; } if (Port==0) { if (Flags & CONNECT_SSL) Port=443; else Port=80; } } Tempstr=CopyStr(Tempstr,GetVar(HTTPVars,"Tunnel")); ptr=GetToken(Tempstr,",",&Token,0); while (ptr) { STREAMAddConnectionHop(S,Token); ptr=GetToken(ptr,",",&Token,0); } if (Info->Flags & HTTP_TUNNEL) STREAMAddConnectionHop(S,Info->Proxy); if (STREAMConnectToHost(S,Host,Port,Flags)) { HTTPSendHeaders(S,Info); } else { STREAMClose(S); S=NULL; } Info->S=S; DestroyString(Tempstr); DestroyString(Token); DestroyString(Host); return(S); } STREAM *HTTPConnect(HTTPInfoStruct *Info) { STREAM *S=NULL; if ( (g_Flags & HTTP_REQ_HTTPS) || (g_Flags & HTTP_TRY_HTTPS) ) { S=HTTPSetupConnection(Info, TRUE); if (g_Flags & HTTP_REQ_HTTPS) return(S); } if (!S) S=HTTPSetupConnection(Info, FALSE); return(S); } STREAM *HTTPTransact(HTTPInfoStruct *Info) { int result=HTTP_NOCONNECT; while (1) { if (! Info->S) Info->S=HTTPConnect(Info); else if (! (Info->State & HTTP_HEADERS_SENT)) HTTPSendHeaders(Info->S,Info); if (Info->S && STREAMIsConnected(Info->S)) { Info->ResponseCode=CopyStr(Info->ResponseCode,""); if (! (Info->State & HTTP_CLIENTDATA_SENT)) { //Set this even if no client data to send, so we no we've been //through here once Info->State |= HTTP_CLIENTDATA_SENT; if (StrLen(Info->PostData)) { STREAMWriteLine(Info->PostData,Info->S); if (Info->Flags & HTTP_DEBUG) fprintf(stderr,"\n%s\n",Info->PostData); } else { if (strcasecmp(Info->Method,"POST")==0) break; if (strcasecmp(Info->Method,"PUT")==0) break; } } //Must clear this once the headers and clientdata sent Info->State=0; HTTPReadHeaders(Info->S,Info); result=HTTPProcessResponse(Info); STREAMSetValue(Info->S,"HTTP:URL",Info->Doc); if (Info->Flags & HTTP_CHUNKED) HTTPAddChunkedProcessor(Info->S); if (Info->Flags & HTTP_GZIP) { STREAMAddStandardDataProcessor(Info->S,"uncompress","gzip",""); } else if (Info->Flags & HTTP_DEFLATE) { STREAMAddStandardDataProcessor(Info->S,"uncompress","zlib",""); } if (result == HTTP_OKAY) break; if (result == HTTP_NOTFOUND) break; if (result == HTTP_NOTMODIFIED) break; if (result == HTTP_ERROR) break; if (result == HTTP_CIRCULAR_REDIRECTS) break; if (result == HTTP_AUTH_BASIC) { if ( (Info->AuthFlags & HTTP_AUTH_SENT) || (StrLen(Info->Authorization)==0) ) { if (result == HTTP_AUTH_BASIC) break; if (result == HTTP_AUTH_DIGEST) break; } } if ( (result == HTTP_AUTH_PROXY) && (StrLen(Info->ProxyAuthorization)==0) ) { break; } STREAMClose(Info->S); Info->S=NULL; } else break; } return(Info->S); } STREAM *HTTPMethod(char *Method, char *URL, char *Logon, char *Password, char *ContentType, char *ContentData, int ContentLength) { HTTPInfoStruct *Info; STREAM *S; Info=HTTPInfoFromURL(Method, URL); if (StrLen(ContentType)) { Info->PostContentType=CopyStr(Info->PostContentType,ContentType); Info->PostData=CopyStr(Info->PostData,ContentData); Info->PostContentLength=ContentLength; } if (StrLen(Logon) || StrLen(Password)) { if (Logon==HTTP_AUTH_BY_TOKEN) HTTPInfoSetAuth(Info,"", Password, HTTP_AUTH_TOKEN); else HTTPInfoSetAuth(Info,Logon, Password, HTTP_AUTH_BASIC); } S=HTTPTransact(Info); HTTPInfoDestroy(Info); return(S); } STREAM *HTTPGet(char *URL, char *Logon, char *Password) { return(HTTPMethod("GET", URL, Logon, Password,"","",0)); } STREAM *HTTPPost(char *URL, char *Logon, char *Password, char *ContentType, char *Content) { return(HTTPMethod("POST", URL, Logon, Password, ContentType, Content, StrLen(Content))); } void HTTPCopyToSTREAM(STREAM *Con, STREAM *S) { char *Tempstr=NULL; int result; Tempstr=SetStrLen(Tempstr,BUFSIZ); result=STREAMReadBytes(Con, Tempstr,BUFSIZ); while (result > 0) { STREAMWriteBytes(S,Tempstr,result); result=STREAMReadBytes(Con, Tempstr,BUFSIZ); } } int HTTPDownload(char *URL,char *Login,char *Password, STREAM *S) { STREAM *Con; Con=HTTPGet(URL,Login,Password); if (! Con) return(FALSE); HTTPCopyToSTREAM(Con, S); return(TRUE); } void HTTPSetUserAgent(char *AgentName) { LibUsefulSetValue("HTTP:User-Agent",AgentName); } void HTTPSetProxy(char *Proxy) { LibUsefulSetValue("HTTP:Proxy",Proxy); } void HTTPSetFlags(int Flags) { g_Flags=Flags; } int HTTPGetFlags() { return(g_Flags); } hashrat-1.6.1/libUseful-2.1/http.h0000644000175000017550000000557112470734537017326 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_HTTP_H #define LIBUSEFUL_HTTP_H #include "includes.h" #include "defines.h" #include "file.h" #define HTTP_AUTH_BASIC 1 #define HTTP_AUTH_DIGEST 2 #define HTTP_AUTH_TOKEN 4 #define HTTP_AUTH_OAUTH 8 #define HTTP_AUTH_PROXY 64 #define HTTP_AUTH_SENT 128 #define HTTP_OKAY 0 #define HTTP_NOCONNECT 1 #define HTTP_NOTFOUND 2 #define HTTP_REDIRECT 3 #define HTTP_ERROR 4 #define HTTP_CIRCULAR_REDIRECTS 5 #define HTTP_NOTMODIFIED 6 #define HTTP_VER1_0 1 #define HTTP_DEBUG 2 #define HTTP_CHUNKED 4 #define HTTP_NOCACHE 8 #define HTTP_NOCOMPRESS 16 #define HTTP_NOREDIRECT 32 #define HTTP_TRY_HTTPS 64 #define HTTP_REQ_HTTPS 128 #define HTTP_KEEPALIVE 256 #define HTTP_SSL 1024 #define HTTP_SSL_REWRITE 2048 #define HTTP_PROXY 4096 #define HTTP_TUNNEL 8192 #define HTTP_NODECODE 32768 #define HTTP_NOCOOKIES 65536 #define HTTP_GZIP 1048576 #define HTTP_DEFLATE 2097152 #define HTTP_BZIP2 4194304 #define HTTP_XZ 8388608 #define HTTP_HEADERS_SENT 1 #define HTTP_CLIENTDATA_SENT 2 #define HTTP_HEADERS_READ 4 extern const char *HTTP_AUTH_BY_TOKEN; typedef struct { char *Host; int Port; char *Method; char *Doc; char *Destination; char *ResponseCode; int Flags; int AuthFlags; int State; char *RedirectPath; char *PreviousRedirect; char *ContentType; char *Timestamp; int ContentLength; int Depth; char *PostData; char *PostContentType; int PostContentLength; char *Proxy; time_t IfModifiedSince; ListNode *ServerHeaders; ListNode *CustomSendHeaders; char *Authorization; char *ProxyAuthorization; STREAM *S; } HTTPInfoStruct; #ifdef __cplusplus extern "C" { #endif char *HTTPQuote(char *, char*); char *HTTPQuoteChars(char *RetBuff, char *Str, char *CharList); char *HTTPUnQuote(char *, char*); void HTTPSetVar(char *Name, char *Var); void HTTPInfoDestroy(void *p_Info); void HTTPInfoSetValues(HTTPInfoStruct *Info, char *Host, int Port, char *Logon, char *Password, char *Method, char *Doc, char *ContentType, int ContentLength); void HTTPInfoSetAuth(HTTPInfoStruct *Auth, char *Logon, char *Password, int Type); HTTPInfoStruct *HTTPInfoCreate(char *Host, int Port, char *Logon, char *Password, char *Method, char *Doc, char *ContentType, int ContentLength); STREAM *HTTPConnect(HTTPInfoStruct *Info); STREAM *HTTPTransact(HTTPInfoStruct *Info); HTTPInfoStruct *HTTPInfoFromURL(char *Method, char *URL); STREAM *HTTPMethod(char *Method, char *URL, char *Logon, char *Password, char *ContentType, char *ContentData, int ContentLength); STREAM *HTTPGet(char *URL, char *Logon, char *Password); STREAM *HTTPPost(char *URL, char *Logon, char *Password, char *ContentType, char *Content); int HTTPReadBytes(STREAM *Con, char **Buffer); void HTTPCopyToSTREAM(STREAM *Con, STREAM *S); int HTTPDownload(char *URL, char *Login, char *Password, STREAM *S); void HTTPSetUserAgent(char *AgentName); void HTTPSetProxy(char *Proxy); void HTTPSetFlags(int Flags); int HTTPGetFlags(); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/includes.h0000644000175000017550000000116412470734537020147 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_INCLUDES_H #define LIBUSEFUL_INCLUDES_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "defines.h" #include "string.h" #include "list.h" #include "file.h" #include "socket.h" #include "openssl.h" #include "Vars.h" #include "libsettings.h" #include "GeneralFunctions.h" #include "Tokenizer.h" #endif hashrat-1.6.1/libUseful-2.1/inet.c0000644000175000017550000000443012470734537017272 0ustar metacosm89metacosm89#include "inet.h" #include "http.h" #include "GeneralFunctions.h" #include "Markup.h" char *ExtractFromWebpage(char *RetStr, char *URL, char *ExtractStr, int MinLength) { STREAM *S; char *Tempstr=NULL, *ptr; ListNode *Vars; Vars=ListCreate(); S=HTTPGet(URL,"",""); if (S) { Tempstr=STREAMReadLine(Tempstr,S); while (Tempstr) { StripTrailingWhitespace(Tempstr); StripLeadingWhitespace(Tempstr); if (StrLen(Tempstr) >=MinLength) { if (! StrLen(ExtractStr)) RetStr=CopyStr(RetStr,Tempstr); else { ExtractVarsFromString(Tempstr,ExtractStr,Vars); ptr=GetVar(Vars,"extract_item"); if (StrLen(ptr)) RetStr=CopyStr(RetStr,ptr); } } Tempstr=STREAMReadLine(Tempstr,S); } STREAMClose(S); } ListDestroy(Vars,(LIST_ITEM_DESTROY_FUNC) DestroyString); DestroyString(Tempstr); StripTrailingWhitespace(RetStr); StripLeadingWhitespace(RetStr); return(RetStr); } char *GetExternalIP(char *RetStr) { RetStr=CopyStr(RetStr,""); if (! StrLen(RetStr)) RetStr=ExtractFromWebpage(RetStr,"http://checkip.dyndns.org", "Current IP Address: $(extract_item)",4); if (! StrLen(RetStr)) RetStr=ExtractFromWebpage(RetStr,"http://ip.appspot.com/", "",4); return(RetStr); } #define IPInfo_API_KEY "1261fcbf647ea02c165aa3bfa66810f0be453d8a1c2e7f653c0666d4e7e205f0" int IPGeoLocate(char *IP, ListNode *Vars) { STREAM *S=NULL; char *ptr, *TagType=NULL, *TagData=NULL, *Tempstr=NULL, *Token=NULL; const char *DesiredTags[]={"CountryCode","CountryName","City","RegionName","Latitude","Longitude","TimeZone",NULL}; int result=FALSE; if (! IsIPAddress(IP)) Token=CopyStr(Token,LookupHostIP(IP)); else Token=CopyStr(Token,IP); Tempstr=MCopyStr(Tempstr,"http://api.ipinfodb.com/v2/ip_query.php?key=",IPInfo_API_KEY,"&ip=",Token,"&timezone=true",NULL); S=HTTPGet(Tempstr, "", ""); if (S) { Tempstr=STREAMReadLine(Tempstr,S); while (Tempstr) { ptr=XMLGetTag(Tempstr,NULL,&TagType,&TagData); while (ptr) { if (MatchTokenFromList(TagType,DesiredTags,0) > -1) { //we can't re-use 'TagType', we still need it ptr=XMLGetTag(ptr,NULL,&Token,&TagData); SetVar(Vars,TagType,TagData); result=TRUE; } ptr=XMLGetTag(ptr,NULL,&TagType,&TagData); } Tempstr=STREAMReadLine(Tempstr,S); } } STREAMClose(S); DestroyString(Tempstr); DestroyString(Token); DestroyString(TagType); DestroyString(TagData); return(result); } hashrat-1.6.1/libUseful-2.1/inet.h0000644000175000017550000000051712470734537017301 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_INET_H #define LIBUSEFUL_INET_H #include "includes.h" #include "defines.h" #ifdef __cplusplus extern "C" { #endif char *ExtractFromWebpage(char *RetStr, char *URL, char *ExtractStr, int MinLength); char *GetExternalIP(char *RetStr); int IPGeoLocate(char *IP, ListNode *Vars); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/install-sh0000644000175000017550000001273612470646505020175 0ustar metacosm89metacosm89#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: chmodcmd="" else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 hashrat-1.6.1/libUseful-2.1/jh_ref.c0000644000175000017550000002765312470734537017604 0ustar metacosm89metacosm89#include "jh_ref.h" #include /*The constant for the Round 0 of E8*/ const unsigned char roundconstant_zero[64] = {0x6,0xa,0x0,0x9,0xe,0x6,0x6,0x7,0xf,0x3,0xb,0xc,0xc,0x9,0x0,0x8,0xb,0x2,0xf,0xb,0x1,0x3,0x6,0x6,0xe,0xa,0x9,0x5,0x7,0xd,0x3,0xe,0x3,0xa,0xd,0xe,0xc,0x1,0x7,0x5,0x1,0x2,0x7,0x7,0x5,0x0,0x9,0x9,0xd,0xa,0x2,0xf,0x5,0x9,0x0,0xb,0x0,0x6,0x6,0x7,0x3,0x2,0x2,0xa}; /*The two Sboxes S0 and S1*/ unsigned char S[2][16] = {{9,0,4,11,13,12,3,15,1,10,2,6,7,5,8,14},{3,12,6,13,5,7,1,9,15,2,0,4,11,10,14,8}}; /*The linear transformation L, the MDS code*/ #define L(a, b) { \ (b) ^= ( ( (a) << 1) ^ ( (a) >> 3) ^ (( (a) >> 2) & 2) ) & 0xf; \ (a) ^= ( ( (b) << 1) ^ ( (b) >> 3) ^ (( (b) >> 2) & 2) ) & 0xf; \ } void R8(hashState *state); /* The round function of E8 */ void update_roundconstant(hashState *state); /* Update the round constant of E8 */ void E8_initialgroup(hashState *state); /* Grouping the state into 4-bit elements at the beginning of E8 */ void E8_finaldegroup(hashState *state); /* Inverse of the grouping at the end of E8 */ void E8(hashState *state); /* The bijective function E8 */ void F8(hashState *state); /* The compression function F8 */ /*the round function of E8 */ void R8(hashState *state) { unsigned int i; unsigned char tem[256],t; unsigned char roundconstant_expanded[256]; /*the round constant expanded into 256 1-bit element;*/ /*expand the round constant into 256 one-bit element*/ for (i = 0; i < 256; i++) { roundconstant_expanded[i] = (state->roundconstant[i >> 2] >> (3 - (i & 3)) ) & 1; } /*S box layer, each constant bit selects one Sbox from S0 and S1*/ for (i = 0; i < 256; i++) { tem[i] = S[roundconstant_expanded[i]][state->A[i]]; /*constant bits are used to determine which Sbox to use*/ } /*MDS Layer*/ for (i = 0; i < 256; i=i+2) L(tem[i], tem[i+1]); /*The following is the permuation layer P_8*/ /*initial swap Pi_8*/ for ( i = 0; i < 256; i=i+4) { t = tem[i+2]; tem[i+2] = tem[i+3]; tem[i+3] = t; } /*permutation P'_8*/ for (i = 0; i < 128; i=i+1) { state->A[i] = tem[i<<1]; state->A[i+128] = tem[(i<<1)+1]; } /*final swap Phi_8*/ for ( i = 128; i < 256; i=i+2) { t = state->A[i]; state->A[i] = state->A[i+1]; state->A[i+1] = t; } } /*The following function generates the next round constant from the current round constant; R6 is used for generating round constants for E8, with the round constants of R6 being set as 0; */ void update_roundconstant(hashState *state) { int i; unsigned char tem[64],t; /*Sbox layer*/ for (i = 0; i < 64; i++) tem[i] = S[0][state->roundconstant[i]]; /*MDS layer*/ for (i = 0; i < 64; i=i+2) L(tem[i], tem[i+1]); /*The following is the permutation layer P_6 */ /*initial swap Pi_6*/ for ( i = 0; i < 64; i=i+4) { t = tem[i+2]; tem[i+2] = tem[i+3]; tem[i+3] = t; } /*permutation P'_6*/ for ( i = 0; i < 32; i=i+1) { state->roundconstant[i] = tem[i<<1]; state->roundconstant[i+32] = tem[(i<<1)+1]; } /*final swap Phi_6*/ for ( i = 32; i < 64; i=i+2 ) { t = state->roundconstant[i]; state->roundconstant[i] = state->roundconstant[i+1]; state->roundconstant[i+1] = t; } } /*initial group at the begining of E_8: group the bits of H into 4-bit elements of A. After the grouping, the i-th, (i+256)-th, (i+512)-th, (i+768)-th bits of state->H become the i-th 4-bit element of state->A */ void E8_initialgroup(hashState *state) { unsigned int i; unsigned char t0,t1,t2,t3; unsigned char tem[256]; /*t0 is the i-th bit of H, i = 0, 1, 2, 3, ... , 127*/ /*t1 is the (i+256)-th bit of H*/ /*t2 is the (i+512)-th bit of H*/ /*t3 is the (i+768)-th bit of H*/ for (i = 0; i < 256; i++) { t0 = (state->H[i>>3] >> (7 - (i & 7)) ) & 1; t1 = (state->H[(i+256)>>3] >> (7 - (i & 7)) ) & 1; t2 = (state->H[(i+ 512 )>>3] >> (7 - (i & 7)) ) & 1; t3 = (state->H[(i+ 768 )>>3] >> (7 - (i & 7)) ) & 1; tem[i] = (t0 << 3) | (t1 << 2) | (t2 << 1) | (t3 << 0); } /*padding the odd-th elements and even-th elements separately*/ for (i = 0; i < 128; i++) { state->A[i << 1] = tem[i]; state->A[(i << 1)+1] = tem[i+128]; } } /*de-group at the end of E_8: it is the inverse of E8_initialgroup The 256 4-bit elements in state->A are degouped into the 1024-bit state->H */ void E8_finaldegroup(hashState *state) { unsigned int i; unsigned char t0,t1,t2,t3; unsigned char tem[256]; for (i = 0; i < 128; i++) { tem[i] = state->A[i << 1]; tem[i+128] = state->A[(i << 1)+1]; } for (i = 0; i < 128; i++) state->H[i] = 0; for (i = 0; i < 256; i++) { t0 = (tem[i] >> 3) & 1; t1 = (tem[i] >> 2) & 1; t2 = (tem[i] >> 1) & 1; t3 = (tem[i] >> 0) & 1; state->H[i>>3] |= t0 << (7 - (i & 7)); state->H[(i + 256)>>3] |= t1 << (7 - (i & 7)); state->H[(i + 512)>>3] |= t2 << (7 - (i & 7)); state->H[(i + 768)>>3] |= t3 << (7 - (i & 7)); } } /*bijective function E8 */ void E8(hashState *state) { unsigned int i; //unsigned char t0,t1,t2,t3; //unsigned char tem[256]; /*initialize the round constant*/ for (i = 0; i < 64; i++) state->roundconstant[i] = roundconstant_zero[i]; /*initial group at the begining of E_8: group the H value into 4-bit elements and store them in A */ E8_initialgroup(state); /* 42 rounds */ for (i = 0; i < 42; i++) { R8(state); update_roundconstant(state); } /*de-group at the end of E_8: decompose the 4-bit elements of A into the 1024-bit H*/ E8_finaldegroup(state); } /* compression function F8 */ void F8(hashState *state) { unsigned int i; /*xor the message with the first half of H*/ for (i = 0; i < 64; i++) state->H[i] ^= state->buffer[i]; /* Bijective function E8 */ E8(state); /* xor the message with the last half of H */ for (i = 0; i < 64; i++) state->H[i+64] ^= state->buffer[i]; } /*before hashing a message, initialize the hash state as H0 */ HashReturn JHInit(hashState *state, int hashbitlen) { unsigned int i; state->databitlen = 0; state->datasize_in_buffer = 0; state->hashbitlen = hashbitlen; for (i = 0; i < 64; i++) state->buffer[i] = 0; for (i = 0; i < 128; i++) state->H[i] = 0; /*initialize the initial hash value of JH*/ /*step 1: set H(-1) to the message digest size*/ state->H[1] = hashbitlen & 0xff; state->H[0] = (hashbitlen >> 8) & 0xff; /*step 2: compute H0 from H(-1) with message M(0) being set as 0*/ F8(state); return(SUCCESS); } /*hash each 512-bit message block, except the last partial block*/ HashReturn JHUpdate(hashState *state, const unsigned char *data, DataLength databitlen) { DataLength index; /*the starting address of the data to be compressed*/ state->databitlen += databitlen; index = 0; /*if there is remaining data in the buffer, fill it to a full message block first*/ /*we assume that the size of the data in the buffer is the multiple of 8 bits if it is not at the end of a message*/ /*There is data in the buffer, but the incoming data is insufficient for a full block*/ if ( (state->datasize_in_buffer > 0 ) && (( state->datasize_in_buffer + databitlen) < 512) ) { if ( (databitlen & 7) == 0 ) { memcpy(state->buffer + (state->datasize_in_buffer >> 3), data, 64-(state->datasize_in_buffer >> 3)) ; } else memcpy(state->buffer + (state->datasize_in_buffer >> 3), data, 64-(state->datasize_in_buffer >> 3)+1) ; state->datasize_in_buffer += databitlen; databitlen = 0; } /*There is data in the buffer, and the incoming data is sufficient for a full block*/ if ( (state->datasize_in_buffer > 0 ) && (( state->datasize_in_buffer + databitlen) >= 512) ) { memcpy( state->buffer + (state->datasize_in_buffer >> 3), data, 64-(state->datasize_in_buffer >> 3) ) ; index = 64-(state->datasize_in_buffer >> 3); databitlen = databitlen - (512 - state->datasize_in_buffer); F8(state); state->datasize_in_buffer = 0; } /*hash the remaining full message blocks*/ for ( ; databitlen >= 512; index = index+64, databitlen = databitlen - 512) { memcpy(state->buffer, data+index, 64); F8(state); } /*store the partial block into buffer, assume that -- if part of the last byte is not part of the message, then that part consists of 0 bits*/ if ( databitlen > 0) { if ((databitlen & 7) == 0) memcpy(state->buffer, data+index, (databitlen & 0x1ff) >> 3); else memcpy(state->buffer, data+index, ((databitlen & 0x1ff) >> 3)+1); state->datasize_in_buffer = databitlen; } return(SUCCESS); } /*padding the message, truncate the hash value H and obtain the message digest*/ unsigned int JHFinal(hashState *state, unsigned char *hashval) { unsigned int i, len=0; if ( (state->databitlen & 0x1ff) == 0) { /*pad the message when databitlen is multiple of 512 bits, then process the padded block*/ for (i = 0; i < 64; i++) state->buffer[i] = 0; state->buffer[0] = 0x80; state->buffer[63] = state->databitlen & 0xff; state->buffer[62] = (state->databitlen >> 8) & 0xff; state->buffer[61] = (state->databitlen >> 16) & 0xff; state->buffer[60] = (state->databitlen >> 24) & 0xff; state->buffer[59] = (state->databitlen >> 32) & 0xff; state->buffer[58] = (state->databitlen >> 40) & 0xff; state->buffer[57] = (state->databitlen >> 48) & 0xff; state->buffer[56] = (state->databitlen >> 56) & 0xff; F8(state); } else { /*set the rest of the bytes in the buffer to 0*/ if ( (state->datasize_in_buffer & 7) == 0) for (i = (state->databitlen & 0x1ff) >> 3; i < 64; i++) state->buffer[i] = 0; else for (i = ((state->databitlen & 0x1ff) >> 3)+1; i < 64; i++) state->buffer[i] = 0; /*pad and process the partial block when databitlen is not multiple of 512 bits, then hash the padded blocks*/ state->buffer[((state->databitlen & 0x1ff) >> 3)] |= 1 << (7- (state->databitlen & 7)); F8(state); for (i = 0; i < 64; i++) state->buffer[i] = 0; state->buffer[63] = state->databitlen & 0xff; state->buffer[62] = (state->databitlen >> 8) & 0xff; state->buffer[61] = (state->databitlen >> 16) & 0xff; state->buffer[60] = (state->databitlen >> 24) & 0xff; state->buffer[59] = (state->databitlen >> 32) & 0xff; state->buffer[58] = (state->databitlen >> 40) & 0xff; state->buffer[57] = (state->databitlen >> 48) & 0xff; state->buffer[56] = (state->databitlen >> 56) & 0xff; F8(state); } /*truncating the final hash value to generate the message digest*/ switch (state->hashbitlen) { case 224: len=28; memcpy(hashval,state->H+100,len); break; case 256: len=32; memcpy(hashval,state->H+96, len); break; case 384: len=48; memcpy(hashval,state->H+80, len); break; case 512: len=64; memcpy(hashval,state->H+64, len); break; } return(len); } hashrat-1.6.1/libUseful-2.1/jh_ref.h0000644000175000017550000000315212470734537017575 0ustar metacosm89metacosm89/* This program gives the reference implementation of JH. It implements the standard description of JH (not bitslice) The description given in this program is suitable for hardware implementation -------------------------------- Comparing to the original reference implementation, two functions are added to make the porgram more readable. One function is E8_initialgroup() at the beginning of E8; another function is E8_finaldegroup() at the end of E8. -------------------------------- Last Modified: January 16, 2011 */ #ifndef JH_HASH_H #define JH_HASH_H typedef unsigned long long DataLength;typedef enum { SUCCESS = 0, FAIL = 1, BAD_HASHLEN = 2 } HashReturn; typedef struct { int hashbitlen; /*the message digest size*/ unsigned long long databitlen; /*the message size in bits*/ unsigned long long datasize_in_buffer; /*the size of the message remained in buffer; assumed to be multiple of 8bits except for the last partial block at the end of the message*/ unsigned char H[128]; /*the hash value H; 128 bytes;*/ unsigned char A[256]; /*the temporary round value; 256 4-bit elements*/ unsigned char roundconstant[64]; /*round constant for one round; 64 4-bit elements*/ unsigned char buffer[64]; /*the message block to be hashed; 64 bytes*/ } hashState; /*The API functions*/ HashReturn JHInit(hashState *state, int hashbitlen); HashReturn JHUpdate(hashState *state, const unsigned char *data, DataLength databitlen); unsigned int JHFinal(hashState *state, unsigned char *hashval); #endif hashrat-1.6.1/libUseful-2.1/libUseful.h0000644000175000017550000000176012470734537020275 0ustar metacosm89metacosm89#ifndef LIB_USEFUL_H #define LIB_USEFUL_H #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif #define __LIBUSEFUL_VERSION__ "2.0" #define __LIBUSEFUL_BUILD_DATE__ __DATE__ #define __LIBUSEFUL_BUILD_TIME__ __TIME__ //__TIME__ #include #include #include #include #include "memory.h" #include "socket.h" #include "unix_socket.h" #include "string.h" #include "expect.h" #include "list.h" #include "file.h" #include "base64.h" #include "Tokenizer.h" #include "FileSystem.h" #include "GeneralFunctions.h" #include "DataProcessing.h" #include "EncryptedFiles.h" #include "ConnectManager.h" #include "Hash.h" #include "Compression.h" #include "Time.h" #include "Vars.h" #include "Markup.h" #include "MathExpr.h" #include "PatternMatch.h" #include "SpawnPrograms.h" #include "ParseURL.h" #include "sound.h" #include "pty.h" #include "Log.h" #include "http.h" #include "oauth.h" #include "tar.h" #include "ansi.h" #include "proctitle.h" #endif hashrat-1.6.1/libUseful-2.1/libsettings.c0000644000175000017550000000164312470734537020665 0ustar metacosm89metacosm89#include "defines.h" #include "includes.h" #include "Vars.h" #include "libUseful.h" /* These functions provide an interface for setting variables that */ /* are used by libUseful itself */ ListNode *LibUsefulSettings=NULL; ListNode *LibUsefulValuesGetHead() { return(LibUsefulSettings); } void LibUsefulInitSettings() { char *Tempstr=NULL; LibUsefulSettings=ListCreate(); SetVar(LibUsefulSettings,"LibUsefulVersion",__LIBUSEFUL_VERSION__); Tempstr=MCopyStr(Tempstr,__LIBUSEFUL_BUILD_DATE__," ",__LIBUSEFUL_BUILD_TIME__,NULL); SetVar(LibUsefulSettings,"LibUsefulBuildTime",Tempstr); DestroyString(Tempstr); } void LibUsefulSetValue(char *Name, char *Value) { if (! LibUsefulSettings) LibUsefulInitSettings(); SetVar(LibUsefulSettings,Name,Value); } char *LibUsefulGetValue(char *Name) { if (! LibUsefulSettings) LibUsefulInitSettings(); if (!StrLen(Name)) return(""); return(GetVar(LibUsefulSettings,Name)); } hashrat-1.6.1/libUseful-2.1/libsettings.h0000644000175000017550000000057512470734537020675 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_SETTINGS #define LIBUSEFUL_SETTINGS #include "Vars.h" /* These functions provide an interface for setting variables that */ /* are used by libUseful itself */ #ifdef __cplusplus extern "C" { #endif ListNode *LibUsefulValuesGetHead(); void LibUsefulSetValue(char *Name, char *Value); char *LibUsefulGetValue(char *Name); #ifdef __cplusplus }; #endif #endif hashrat-1.6.1/libUseful-2.1/list.c0000644000175000017550000002734312470734537017316 0ustar metacosm89metacosm89#include "includes.h" ListNode *ListGetHead(ListNode *Node) { if (! Node) return(NULL); return(Node->Head); } int ListSize(ListNode *List) { ListNode *Head; int *intptr; if (! List) return(0); Head=ListGetHead(List); intptr=(int *) Head->Item; return(*intptr); } void ListSetFlags(ListNode *List, int Flags) { ListNode *Head; Head=ListGetHead(List); Head->Flags=Flags; } int ListSetNoOfItems(ListNode *LastItem, int val) { ListNode *Head; int *intptr; Head=ListGetHead(LastItem); if (LastItem->Next==NULL) Head->Prev=LastItem; /* The head Item has its Prev as being the last item! */ intptr=(int *) Head->Item; (*intptr)=val; return(*intptr); } int ListIncrNoOfItems(ListNode *LastItem) { ListNode *Head; int *intptr; Head=ListGetHead(LastItem); if (LastItem->Next==NULL) Head->Prev=LastItem; /* The head Item has its Prev as being the last item! */ intptr=(int *) Head->Item; (*intptr)++; return(*intptr); } int ListDecrNoOfItems(ListNode *LastItem) { ListNode *Head; int *intptr; Head=ListGetHead(LastItem); if (LastItem->Next==NULL) Head->Prev=LastItem->Prev; /* The head Item has its Prev as being the last item! */ intptr=(int *) Head->Item; (*intptr)--; return(*intptr); } ListNode *ListCreate() { ListNode *TempPtr; TempPtr=(ListNode *)calloc(1,sizeof(ListNode)); TempPtr->Head=TempPtr; TempPtr->Prev=TempPtr; TempPtr->Next=NULL; TempPtr->Item=calloc(1,sizeof(int)); (*(int *)TempPtr->Item)=0; return(TempPtr); } void ListClear(ListNode *ListStart, LIST_ITEM_DESTROY_FUNC ItemDestroyer) { ListNode *Curr,*Next; if (! ListStart) return; Curr=ListGetNext(ListStart); while (Curr !=NULL) { Next=Curr->Next; if (ItemDestroyer && Curr->Item) ItemDestroyer(Curr->Item); DestroyString(Curr->Tag); free(Curr); Curr=Next; } ListStart->Next=NULL; ListStart->Head=ListStart; ListStart->Prev=ListStart; ListSetNoOfItems(ListStart,0); } void ListDestroy(ListNode *ListStart, LIST_ITEM_DESTROY_FUNC ItemDestroyer) { if (! ListStart) return; ListClear(ListStart, ItemDestroyer); free(ListStart->Item); free(ListStart); } ListNode *ListClone(ListNode *ListStart, LIST_ITEM_CLONE_FUNC ItemCloner) { ListNode *Curr,*NewList; void *Item; if (! ItemCloner) return(NULL); NewList=ListCreate(); Curr=ListGetNext(ListStart); while (Curr !=NULL) { if (ItemCloner) { Item=ItemCloner(Curr->Item); ListAddNamedItem(NewList,Curr->Tag,Item); } Curr=ListGetNext(Curr); } return(NewList); } ListNode *ListAddNamedItemAfter(ListNode *ListStart,const char *Name,void *Item) { ListNode *Curr; if (ListStart==NULL) return(NULL); Curr=ListStart; Curr->Next=(ListNode *) calloc(1,sizeof(ListNode)); Curr->Next->Prev=Curr; Curr=Curr->Next; Curr->Item=Item; Curr->Head=ListGetHead(ListStart); Curr->Next=NULL; if (Name) Curr->Tag=CopyStr(NULL,Name); ListIncrNoOfItems(Curr); return(Curr); } ListNode *ListAddNamedItem(ListNode *ListStart,const char *Name,void *Item) { ListNode *Curr; Curr=ListGetLast(ListStart); if (Curr==NULL) return(Curr); return(ListAddNamedItemAfter(Curr,Name,Item)); } ListNode *ListAddItem(ListNode *ListStart,void *Item) { return(ListAddNamedItem(ListStart,NULL,Item)); } void ListUnthreadNode(ListNode *Node) { ListNode *Prev, *Next; Prev=Node->Prev; Next=Node->Next; if (Prev) Prev->Next=Next; if (Next) Next->Prev=Prev; } void ListThreadNode(ListNode *Prev, ListNode *Node) { ListNode *Next; //Never thread something to itself! if (Prev==Node) return; Next=Prev->Next; Node->Prev=Prev; Prev->Next=Node; Node->Next=Next; if (Next) Next->Prev=Node; /* Next might be NULL! */ } ListNode *ListInsertNamedItem(ListNode *InsertNode, const char *Name, void *Item) { ListNode *NewItem, *Next; Next=InsertNode->Next; NewItem=(ListNode *) calloc(1,sizeof(ListNode)); NewItem->Item=Item; NewItem->Prev=InsertNode; NewItem->Next=Next; InsertNode->Next=NewItem; NewItem->Head=InsertNode->Head; if (Next) Next->Prev=NewItem; /* Next might be NULL! */ ListIncrNoOfItems(NewItem); if (StrLen(Name)) NewItem->Tag=CopyStr(NewItem->Tag,Name); return(NewItem); } void OrderedListAddJump(ListNode *From, ListNode *To) { int result; static int depth=0; if (! From) return; if (! To) return; depth++; if (depth > 100) { printf("ERROR: OLJ DEEEP\n"); exit(1); } if (From->Jump) { result=strcmp(From->Jump->Tag, To->Tag); // if (result > 0) OrderedListAddJump(From->Next,To); // else if (result < 0) { OrderedListAddJump(From->Next,From->Jump); From->Jump=To; } } else From->Jump=To; depth--; } ListNode *ListFindNamedItemInsert(ListNode *Head, const char *Name) { ListNode *Prev, *Curr, *Start=NULL; int result=0, count=0; int hops=0, jumps=0, miss=0; if (! StrLen(Name)) return(Head); Curr=ListGetNext(Head); if (! Curr) return(Head); Prev=ListGetLast(Head); if (Prev && Prev->Tag) { if (Head->Flags & LIST_FLAG_CASE) result=strcmp(Prev->Tag,Name); else result=strcasecmp(Prev->Tag,Name); } if ((Head->Flags & LIST_FLAG_ORDERED) && (result < 1)) return(Prev); if ((Head->Flags & LIST_FLAG_CACHE) && (Head->Jump)) { Prev=Head->Jump; if (Prev->Tag) { if (Head->Flags & LIST_FLAG_CASE) result=strcmp(Prev->Tag,Name); else result=strcasecmp(Prev->Tag,Name); if (result < 1) Curr=Prev; } } Prev=Head; while (Curr) { if (Curr->Jump && Curr->Jump->Tag) { if (Head->Flags & LIST_FLAG_CASE) result=strcmp(Curr->Jump->Tag,Name); else result=strcasecmp(Curr->Jump->Tag,Name); if (result < 1) { if ((result < 0) && Curr->Jump->Next) Curr->Jump=Curr->Jump->Next; Curr=Curr->Jump; jumps++; count=0; } else miss++; } else if (! Start) Start=Curr; if (Curr->Tag) { if (Head->Flags & LIST_FLAG_CASE) result=strcmp(Curr->Tag,Name); else result=strcasecmp(Curr->Tag,Name); if (result==0) { if (Head->Flags & LIST_FLAG_SELFORG) ListSwapItems(Curr->Prev, Curr); if (Head->Flags & LIST_FLAG_CACHE) Head->Jump=Curr; return(Curr); } if ((result > 0) && (Head->Flags & LIST_FLAG_ORDERED)) { return(Prev); } } hops++; count++; Prev=Curr; Curr=ListGetNext(Curr); } return(Prev); } ListNode *ListFindNamedItem(ListNode *Head, const char *Name) { ListNode *Node; int result; Node=ListFindNamedItemInsert(Head, Name); if ((! Node) || (Node==Head) || (! Node->Tag)) return(NULL); if (Head->Flags & LIST_FLAG_CASE) result=strcmp(Node->Tag,Name); else result=strcasecmp(Node->Tag,Name); if (result==0) return(Node); return(NULL); } ListNode *OrderedListAddNamedItem(ListNode *Head, const char *Name, void *Item) { ListNode *NewItem, *Prev; Prev=ListFindNamedItemInsert(Head, Name); NewItem=(ListNode *) calloc(1,sizeof(ListNode)); NewItem->Item=Item; NewItem->Prev=Prev; NewItem->Next=Prev->Next; Prev->Next=NewItem; NewItem->Head=Prev->Head; if (NewItem->Next) NewItem->Next->Prev=NewItem; /* Next might be NULL! */ ListIncrNoOfItems(NewItem); if (StrLen(Name)) NewItem->Tag=CopyStr(NewItem->Tag,Name); return(NewItem); } ListNode *ListInsertItem(ListNode *InsertNode, void *Item) { return(ListInsertNamedItem(InsertNode, NULL, Item)); } ListNode *InsertItemIntoSortedList(ListNode *List, void *Item, int (*LessThanFunc)(void *, void *, void *)) { ListNode *Curr, *Prev; Prev=List; Curr=ListGetNext(Prev); while (Curr && (LessThanFunc(NULL, Curr->Item,Item)) ) { Prev=Curr; Curr=ListGetNext(Prev); } return(ListInsertItem(Prev,Item)); } ListNode *ListGetNext(ListNode *CurrItem) { if (CurrItem !=NULL) return(CurrItem->Next); else return(NULL); } ListNode *ListGetPrev(ListNode *CurrItem) { ListNode *Prev; if (CurrItem !=NULL) { Prev=CurrItem->Prev; /* Don't return the dummy header! */ if (Prev && (Prev->Prev !=NULL) && (Prev != Prev->Head)) return(Prev); else return(NULL); } else return(NULL); } ListNode *ListGetLast(ListNode *CurrItem) { ListNode *Head; Head=ListGetHead(CurrItem); if (! Head) return(CurrItem); /* the dummy header has a 'Prev' entry that points to the last item! */ return(Head->Prev); } ListNode *ListGetNth(ListNode *Head, int n) { ListNode *Curr; int count=0; if (! Head) return(NULL); Curr=ListGetNext(Head); while (Curr && (count < n)) { count++; Curr=ListGetNext(Curr); } if (count < n) return(NULL); return(Curr); } void *IndexArrayOnList(ListNode *ListHead) { ListNode *Curr; int count, list_size; void **PtrArray; Curr=ListGetNext(ListHead); /* Skip past empty list 'header' item */ list_size=0; while (Curr !=NULL) { Curr=ListGetNext(Curr); list_size++; } PtrArray=calloc(list_size+1,sizeof(void *)); Curr=ListGetNext(ListHead); /* All lists have a dummy header, remember? */ for (count=0;count < list_size; count++) { PtrArray[count]=Curr->Item; Curr=ListGetNext(Curr); } PtrArray[count]=NULL; return(PtrArray); } void *AddItemToArray(void *Array,int size, void *Item) { void **PtrArray; /* two more than number of items in array, one is the new item, and*/ /* one is the terminating null */ PtrArray=Array; PtrArray=realloc(PtrArray, (size+2) *sizeof(void *)); PtrArray[size]=Item; PtrArray[size+1]=NULL; return(PtrArray); } void *DeleteItemFromArray(void *Array,int size, int ItemNo) { int count; void **PtrArray; /* two more than number of items in array, one is the new item, and*/ /* one is the terminating null */ PtrArray=Array; /* size is actually number of items in array, hence size+1 is the */ /* terminating null. So we include that in the copy */ for (count=ItemNo; count < (size+1); count++) { PtrArray[count]=PtrArray[count+1]; } PtrArray=realloc(PtrArray, (size+1) *sizeof(void *)); return(PtrArray); } ListNode *ListJoin(ListNode *List1, ListNode *List2) { ListNode *Curr, *StartOfList2; Curr=List1; /*Lists all have a dummy header!*/ StartOfList2=List2->Next; while (Curr->Next !=NULL) Curr=Curr->Next; Curr->Next=StartOfList2; StartOfList2->Prev=Curr; while (Curr->Next !=NULL) Curr=Curr->Next; return(Curr); } //Item1 is before Item2! void ListSwapItems(ListNode *Item1, ListNode *Item2) { ListNode *Head, *Prev, *Next; if (! Item1) return; if (! Item2) return; Prev=Item1->Prev; Next=Item2->Next; Head=ListGetHead(Item1); if (Head==Item1) return; if (Head==Item2) return; if (Head->Next==Item1) Head->Next=Item2; if (Prev) Prev->Next=Item2; Item1->Prev=Item2; Item1->Next=Next; if (Next) Next->Prev=Item1; Item2->Prev=Prev; Item2->Next=Item1; } void ListSort(ListNode *List, void *Data, int (*LessThanFunc)(void *, void *, void *)) { ListNode *Curr=NULL, *Prev=NULL; int sorted=0; while (! sorted) { sorted=1; Prev=NULL; Curr=ListGetNext(List); while (Curr) { if (Prev !=NULL) { if ( (*LessThanFunc)(Data,Curr->Item,Prev->Item) ) { sorted=0; ListSwapItems(Prev,Curr); } } Prev=Curr; Curr=ListGetNext(Curr); } } } void ListSortNamedItems(ListNode *List) { ListNode *Curr=NULL, *Prev=NULL; int sorted=0; while (! sorted) { sorted=1; Prev=NULL; Curr=ListGetNext(List); while (Curr) { if (Prev !=NULL) { if (strcmp(Prev->Tag,Curr->Tag) < 0) { sorted=0; ListSwapItems(Prev,Curr); } } Prev=Curr; Curr=ListGetNext(Curr); } } } ListNode *ListFindItem(ListNode *Head, void *Item) { ListNode *Curr; if (! Item) return(NULL); Curr=ListGetNext(Head); while (Curr) { if (Curr->Item==Item) { if (Head->Flags & LIST_FLAG_SELFORG) ListSwapItems(Curr->Prev, Curr); return(Curr); } Curr=ListGetNext(Curr); } return(Curr); } void *ListDeleteNode(ListNode *Node) { ListNode *Prev, *Next; void *Contents; if (Node==NULL) { return(NULL); } /* Curr=Node->Head; while (Curr) { if (Curr->Jump==Node) Curr->Jump=NULL; Curr=ListGetNext(Curr); } */ Prev=Node->Prev; Next=Node->Next; if (Prev !=NULL) Prev->Next=Next; if (Next !=NULL) Next->Prev=Prev; Contents=Node->Item; ListDecrNoOfItems(Node); DestroyString(Node->Tag); free(Node); return(Contents); } void *ListDeleteItem(ListNode *Head, void *Item) { ListNode *Node; Node=ListFindItem(Head, Item); if (Node) ListDeleteNode(Node); return(NULL); } hashrat-1.6.1/libUseful-2.1/list.h0000644000175000017550000000407512470734537017320 0ustar metacosm89metacosm89#ifndef LIB_USEFUL_LIST #define LIB_USEFUL_LIST #define LIST_FLAG_DELETE 1 #define LIST_FLAG_CASE 2 #define LIST_FLAG_SELFORG 4 #define LIST_FLAG_ORDERED 8 #define LIST_FLAG_CACHE 16 #define LIST_FLAG_DEBUG 256 typedef struct lnode { int ItemType; int Flags; char *Tag; void *Item; struct lnode *Head; struct lnode *Jump; struct lnode *Prev; struct lnode *Next; } ListNode; #ifdef __cplusplus extern "C" { #endif typedef void (*LIST_ITEM_DESTROY_FUNC)(void *); typedef void *(*LIST_ITEM_CLONE_FUNC)(void *); ListNode *ListCreate(); void ListSetFlags(ListNode *List, int Flags); void *IndexArrayOnList(ListNode *); void *AddItemToArray(void *Array,int size, void *Item); void *DeleteItemFromArray(void *Array,int size, int ItemNo); void ListDestroy(ListNode *, LIST_ITEM_DESTROY_FUNC); void ListClear(ListNode *, LIST_ITEM_DESTROY_FUNC); ListNode *ListAddItem(ListNode *,void *); ListNode *ListAddNamedItem(ListNode *, const char *Name, void *); ListNode *ListInsertItem(ListNode *,void *); ListNode *ListInsertNamedItem(ListNode *,const char *,void *); ListNode *OrderedListAddNamedItem(ListNode *Head, const char *Name, void *Item); ListNode *SortedListInsertItem(ListNode *, void *, int (*LessThanFunc)(void *, void *, void *)); ListNode *ListAddNamedItemAfter(ListNode *ListStart,const char *Name,void *Item); ListNode *ListGetNext(ListNode *); ListNode *ListGetPrev(ListNode *); ListNode *ListGetHead(ListNode *); ListNode *ListGetLast(ListNode *); ListNode *ListGetNth(ListNode *Head, int n); ListNode *ListFindNamedItemInsert(ListNode *Head, const char *Name); ListNode *ListFindNamedItem(ListNode *Head, const char *Name); ListNode *ListFindItem(ListNode *Head, void *Item); ListNode *ListJoin(ListNode *, ListNode *); ListNode *ListClone(ListNode *, LIST_ITEM_CLONE_FUNC); void ListSort(ListNode *, void *Data, int (*LessThanFunc)(void *, void *, void *)); void ListSortNamedItems(ListNode *List); void *ListDeleteNode(ListNode *); void *ListDeleteItem(ListNode *Head, void *Item); void ListSwapItems(ListNode *, ListNode *); int ListSize(ListNode *); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/md5-global.h0000644000175000017550000000141712470734537020265 0ustar metacosm89metacosm89/* GLOBAL.H - RSAREF types and constants */ /* PROTOTYPES should be set to one if and only if the compiler supports function argument prototyping. The following makes PROTOTYPES default to 0 if it has not already been defined with C compiler flags. */ #ifndef PROTOTYPES #define PROTOTYPES 0 #endif /* POINTER defines a generic pointer type */ typedef unsigned char *POINTER; /* UINT2 defines a two byte word */ typedef unsigned short int UINT2; /* UINT4 defines a four byte word */ typedef unsigned long int UINT4; /* PROTO_LIST is defined depending on how PROTOTYPES is defined above. If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it returns an empty list. */ #if PROTOTYPES #define PROTO_LIST(list) list #else #define PROTO_LIST(list) () #endif hashrat-1.6.1/libUseful-2.1/oauth.c0000644000175000017550000001461612470734537017462 0ustar metacosm89metacosm89#include "oauth.h" #include "http.h" #include "Markup.h" void ParseTagData(char *TagName,char *TagData,char **RType,char **RName,char **RValue) { char *Name=NULL, *Value=NULL, *ptr; ptr=GetNameValuePair(TagData," ","=",&Name,&Value); while (ptr) { if (strcasecmp(Name,"type")==0) *RType=HtmlDeQuote(*RType,Value); if (strcasecmp(Name,"name")==0) *RName=HtmlDeQuote(*RName,Value); if (strcasecmp(Name,"value")==0) *RValue=HtmlDeQuote(*RValue,Value); if (strcasecmp(Name,"method")==0) *RType=HtmlDeQuote(*RType,Value); if (strcasecmp(Name,"action")==0) *RValue=HtmlDeQuote(*RValue,Value); ptr=GetNameValuePair(ptr," ","=",&Name,&Value); } DestroyString(Name); DestroyString(Value); } void OAuthParseForm(char *HTML, char *SubmitType, char **SubmitURL, ListNode *HiddenVals, ListNode *QueryVals) { char *TagName=NULL, *TagData=NULL, *Type=NULL, *Name=NULL, *Value=NULL, *ptr; ptr=XMLGetTag(HTML,NULL,&TagName,&TagData); while (ptr) { if (strcmp(TagName,"input")==0) { ParseTagData(TagName,TagData,&Type,&Name,&Value); if (strcasecmp(Type,"hidden")==0) SetVar(HiddenVals,Name,Value); if (strcasecmp(Type,"submit")==0) SetVar(HiddenVals,Name,Value); if (strcasecmp(Type,"text")==0) SetVar(QueryVals,Name,Value); if (strcasecmp(Type,"password")==0) SetVar(QueryVals,Name,Value); } if (strcmp(TagName,"form")==0) { ParseTagData(TagName,TagData,&Type,&Name,SubmitURL); } ptr=XMLGetTag(ptr,NULL,&TagName,&TagData); } DestroyString(TagName); DestroyString(TagData); DestroyString(Type); DestroyString(Name); DestroyString(Value); } void OAuthParseJSON(char *JSON, ListNode *Vars) { char *ptr, *ptr2, *Token=NULL, *Name=NULL, *Value=NULL; StripLeadingWhitespace(JSON); StripTrailingWhitespace(JSON); ptr=JSON+StrLen(JSON)-1; if (*ptr=='}') *ptr='\0'; ptr=JSON; if (*ptr=='{') ptr++; ptr=GetToken(ptr,",",&Token,0); while (ptr) { printf("TOK: %s\n",Token); ptr2=GetToken(Token,":",&Name,0); StripTrailingWhitespace(Name); StripQuotes(Name); ptr2=GetToken(ptr2,":",&Value,GETTOKEN_QUOTES); StripLeadingWhitespace(Value); StripTrailingWhitespace(Value); StripQuotes(Value); printf("JSON: %s=%s\n",Name,Value); SetVar(Vars,Name,Value); ptr=GetToken(ptr,",",&Token,0); } DestroyString(Name); DestroyString(Value); DestroyString(Token); } void OAuthDeviceLogin(char *LoginURL, char *ClientID, char *Scope, char **DeviceCode, char **UserCode, char **NextURL) { char *Tempstr=NULL, *Encode=NULL; ListNode *Vars=NULL; STREAM *S; Vars=ListCreate(); Encode=HTTPQuote(Encode,ClientID); Tempstr=MCopyStr(Tempstr,LoginURL,"?client_id=",Encode,NULL); Encode=HTTPQuote(Encode,Scope); Tempstr=MCatStr(Tempstr,"&scope=",Encode,NULL); S=HTTPMethod("POST",Tempstr,"","","","",0); if (S) { Encode=CopyStr(Encode,""); Tempstr=STREAMReadLine(Tempstr,S); while (Tempstr) { StripTrailingWhitespace(Tempstr); Encode=CatStr(Encode,Tempstr); Tempstr=STREAMReadLine(Tempstr,S); } OAuthParseJSON(Encode, Vars); *NextURL=CopyStr(*NextURL,GetVar(Vars,"verification_url")); *DeviceCode=CopyStr(*DeviceCode,GetVar(Vars,"device_code")); *UserCode=CopyStr(*UserCode,GetVar(Vars,"user_code")); } ListDestroy(Vars,DestroyString); DestroyString(Tempstr); DestroyString(Encode); STREAMClose(S); } void OAuthDeviceGetAccessToken(char *TokenURL, char *ClientID, char *ClientSecret, char *DeviceCode, char **AccessToken, char **RefreshToken) { char *Tempstr=NULL, *Encode=NULL; ListNode *Vars=NULL; STREAM *S; Vars=ListCreate(); Encode=HTTPQuote(Encode,ClientID); Tempstr=MCopyStr(Tempstr,TokenURL,"?client_id=",Encode,NULL); Encode=HTTPQuote(Encode,ClientSecret); Tempstr=MCatStr(Tempstr,"&client_secret=",Encode,NULL); Tempstr=MCatStr(Tempstr,"&code=",DeviceCode,NULL); Tempstr=MCatStr(Tempstr,"&grant_type=","http://oauth.net/grant_type/device/1.0",NULL); S=HTTPMethod("POST",Tempstr,"","","","",0); if (S) { Tempstr=STREAMReadLine(Tempstr,S); while (Tempstr) { StripTrailingWhitespace(Tempstr); printf("OA: %s\n",Tempstr); OAuthParseJSON(Tempstr, Vars); Tempstr=STREAMReadLine(Tempstr,S); } } *AccessToken=CopyStr(*AccessToken,GetVar(Vars,"access_token")); *RefreshToken=CopyStr(*RefreshToken,GetVar(Vars,"refresh_token")); ListDestroy(Vars,DestroyString); DestroyString(Tempstr); DestroyString(Encode); } void OAuthDeviceRefreshToken(char *TokenURL, char *ClientID, char *ClientSecret, char *RequestRefreshToken, char **AccessToken, char **RefreshToken) { char *Tempstr=NULL, *Encode=NULL; ListNode *Vars=NULL; STREAM *S; Vars=ListCreate(); Tempstr=MCopyStr(Tempstr,TokenURL,"?client_id=",ClientID,NULL); Tempstr=MCatStr(Tempstr,"&client_secret=",ClientSecret,NULL); Tempstr=MCatStr(Tempstr,"&refresh_token=",RequestRefreshToken,NULL); Tempstr=MCatStr(Tempstr,"&grant_type=","refresh_token",NULL); S=HTTPMethod("POST",Tempstr,"","","","",0); if (S) { Tempstr=STREAMReadLine(Tempstr,S); while (Tempstr) { StripTrailingWhitespace(Tempstr); OAuthParseJSON(Tempstr, Vars); Tempstr=STREAMReadLine(Tempstr,S); } } *AccessToken=CopyStr(*AccessToken,GetVar(Vars,"access_token")); *RefreshToken=CopyStr(*RefreshToken,GetVar(Vars,"refresh_token")); ListDestroy(Vars,DestroyString); DestroyString(Tempstr); DestroyString(Encode); } void OAuthInstalledAppURL(char *LoginURL, char *ClientID, char *Scope, char *RedirectURL, char **NextURL) { char *Encode=NULL; Encode=HTTPQuote(Encode,ClientID); *NextURL=MCopyStr(*NextURL,LoginURL,"?response_type=code&redirect_uri=",RedirectURL,"&client_id=",Encode,NULL); Encode=HTTPQuote(Encode,Scope); *NextURL=MCatStr(*NextURL,"&scope=",Encode,NULL); DestroyString(Encode); } void OAuthInstalledAppGetAccessToken(char *TokenURL, char *ClientID, char *ClientSecret, char *AuthCode, char *RedirectURL, char **AccessToken, char **RefreshToken) { char *Tempstr=NULL, *Encode=NULL; ListNode *Vars=NULL; STREAM *S; Vars=ListCreate(); Tempstr=MCopyStr(Tempstr,TokenURL,"?client_id=",ClientID,NULL); Tempstr=MCatStr(Tempstr,"&client_secret=",ClientSecret,NULL); Tempstr=MCatStr(Tempstr,"&code=",AuthCode,NULL); Tempstr=MCatStr(Tempstr,"&redirect_uri=",RedirectURL,NULL); Tempstr=MCatStr(Tempstr,"&grant_type=","authorization_code",NULL); S=HTTPMethod("POST",Tempstr,"","","","",0); if (S) { Tempstr=STREAMReadLine(Tempstr,S); while (Tempstr) { StripTrailingWhitespace(Tempstr); fprintf(stderr,"OA: %s\n",Tempstr); OAuthParseJSON(Tempstr, Vars); Tempstr=STREAMReadLine(Tempstr,S); } } *AccessToken=CopyStr(*AccessToken,GetVar(Vars,"access_token")); *RefreshToken=CopyStr(*RefreshToken,GetVar(Vars,"refresh_token")); ListDestroy(Vars,DestroyString); DestroyString(Tempstr); DestroyString(Encode); } hashrat-1.6.1/libUseful-2.1/oauth.h0000644000175000017550000000151012470734537017454 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_OAUTH_H #define LIBUSEFUL_OAUTH_H #ifdef __cplusplus extern "C" { #endif #include "includes.h" void OAuthDeviceLogin(char *LoginURL, char *ClientID, char *Scope, char **DeviceCode, char **UserCode, char **NextURL); void OAuthDeviceGetAccessToken(char *TokenURL, char *ClientID, char *ClientSecret, char *DeviceCode, char **AccessToken, char **RefreshToken); void OAuthDeviceRefreshToken(char *TokenURL, char *ClientID, char *ClientSecret, char *RequestRefreshToken, char **AccessToken, char **RefreshToken); void OAuthInstalledAppURL(char *LoginURL, char *ClientID, char *Scope, char *RedirectURL, char **NextURL); void OAuthInstalledAppGetAccessToken(char *TokenURL, char *ClientID, char *ClientSecret, char *AuthCode, char *RedirectURL, char **AccessToken, char **RefreshToken); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/openssl.c0000644000175000017550000003025012470734537020015 0ustar metacosm89metacosm89#include "includes.h" #include "Tokenizer.h" #include #include #include #ifdef HAVE_LIBSSL #include #include #include #include #include #include DH *CachedDH=NULL; void OpenSSLReseedRandom() { int len=32; char *Tempstr=NULL; len=GenerateRandomBytes(&Tempstr, len, ENCODE_NONE); RAND_seed(Tempstr,len); memset(Tempstr,0,len); //extra paranoid step, don't keep those bytes in memory! DestroyString(Tempstr); } void OpenSSLGenerateDHParams() { CachedDH = DH_new(); if(CachedDH) { OpenSSLReseedRandom(); DH_generate_parameters_ex(CachedDH, 512, DH_GENERATOR_5, 0); //DH_check(CachedDH, &codes); } } void STREAM_INTERNAL_SSL_ADD_SECURE_KEYS(STREAM *S, SSL_CTX *ctx) { ListNode *Curr; char *VerifyFile=NULL, *VerifyPath=NULL; Curr=ListGetNext(LibUsefulValuesGetHead()); while (Curr) { if ((StrLen(Curr->Tag)) && (strncasecmp(Curr->Tag,"SSL_CERT_FILE:",14)==0)) { SSL_CTX_use_certificate_chain_file(ctx,(char *) Curr->Item); } if ((StrLen(Curr->Tag)) && (strncasecmp(Curr->Tag,"SSL_KEY_FILE:",13)==0)) { SSL_CTX_use_PrivateKey_file(ctx,(char *) Curr->Item,SSL_FILETYPE_PEM); } if ((StrLen(Curr->Tag)) && (strncasecmp(Curr->Tag,"SSL_VERIFY_CERTDIR",18)==0)) { VerifyPath=CopyStr(VerifyPath,(char *) Curr->Item); } if ((StrLen(Curr->Tag)) && (strncasecmp(Curr->Tag,"SSL_VERIFY_CERTFILE",19)==0)) { VerifyFile=CopyStr(VerifyFile,(char *) Curr->Item); } Curr=ListGetNext(Curr); } Curr=ListGetNext(S->Values); while (Curr) { if ((StrLen(Curr->Tag)) && (strncasecmp(Curr->Tag,"SSL_CERT_FILE:",14)==0)) { SSL_CTX_use_certificate_chain_file(ctx,(char *) Curr->Item); } if ((StrLen(Curr->Tag)) && (strncasecmp(Curr->Tag,"SSL_KEY_FILE:",13)==0)) { SSL_CTX_use_PrivateKey_file(ctx,(char *) Curr->Item,SSL_FILETYPE_PEM); } if ((StrLen(Curr->Tag)) && (strncasecmp(Curr->Tag,"SSL_VERIFY_CERTDIR",18)==0)) { VerifyPath=CopyStr(VerifyPath,(char *) Curr->Item); } if ((StrLen(Curr->Tag)) && (strncasecmp(Curr->Tag,"SSL_VERIFY_CERTFILE",19)==0)) { VerifyFile=CopyStr(VerifyFile,(char *) Curr->Item); } Curr=ListGetNext(Curr); } SSL_CTX_load_verify_locations(ctx,VerifyFile,VerifyPath); DestroyString(VerifyFile); DestroyString(VerifyPath); } #endif void HandleSSLError() { #ifdef HAVE_LIBSSL int val; val=ERR_get_error(); fprintf(stderr,"Failed to create SSL_CTX: %s\n",ERR_error_string(val,NULL)); fflush(NULL); #endif } int INTERNAL_SSL_INIT() { #ifdef HAVE_LIBSSL char *Tempstr=NULL; static int InitDone=FALSE; //Always reseed RAND on a new connection //OpenSSLReseedRandom(); if (InitDone) return(TRUE); SSL_library_init(); #ifdef USE_OPENSSL_ADD_ALL_ALGORITHMS OpenSSL_add_all_algorithms(); #endif SSL_load_error_strings(); Tempstr=MCopyStr(Tempstr,SSLeay_version(SSLEAY_VERSION)," : ", SSLeay_version(SSLEAY_BUILT_ON), " : ",SSLeay_version(SSLEAY_CFLAGS),NULL); LibUsefulSetValue("SSL-Library", Tempstr); DestroyString(Tempstr); InitDone=TRUE; return(TRUE); #endif return(FALSE); } int SSLAvailable() { return(INTERNAL_SSL_INIT()); } const char *OpenSSLQueryCipher(STREAM *S) { void *ptr; if (! S) return(NULL); ptr=STREAMGetItem(S,"LIBUSEFUL-SSL-CTX"); if (! ptr) return(NULL); #ifdef HAVE_LIBSSL const SSL_CIPHER *Cipher; char *Tempstr=NULL; Cipher=SSL_get_current_cipher((const SSL *) ptr); if (Cipher) { Tempstr=FormatStr(Tempstr,"%d bit %s",SSL_CIPHER_get_bits(Cipher,NULL), SSL_CIPHER_get_name(Cipher)); STREAMSetValue(S,"SSL-Cipher",Tempstr); Tempstr=SetStrLen(Tempstr,1024); Tempstr=SSL_CIPHER_description(Cipher, Tempstr, 1024); STREAMSetValue(S,"SSL-Cipher-Details",Tempstr); } DestroyString(Tempstr); return(STREAMGetValue(S,"SSL-Cipher")); #else return(NULL); #endif } #ifdef HAVE_LIBSSL int OpenSSLVerifyCallback(int PreverifyStatus, X509_STORE_CTX *X509) { //This does nothing. verification is done in 'OpenSSLVerifyCertificate' instead return(1); } #endif int OpenSSLVerifyCertificate(STREAM *S) { int RetVal=FALSE; #ifdef HAVE_LIBSSL char *Name=NULL, *Value=NULL, *ptr; int val; X509 *cert=NULL; SSL *ssl; ptr=STREAMGetItem(S,"LIBUSEFUL-SSL-CTX"); if (! ptr) return(FALSE); ssl=(SSL *) ptr; cert=SSL_get_peer_certificate(ssl); if (cert) { STREAMSetValue(S,"SSL-Certificate-Issuer",X509_NAME_oneline( X509_get_issuer_name(cert),NULL, 0)); ptr=X509_NAME_oneline( X509_get_subject_name(cert),NULL, 0); STREAMSetValue(S,"SSL-Certificate-Subject", ptr); ptr=GetNameValuePair(ptr,"/","=",&Name,&Value); while (ptr) { if (StrLen(Name) && (strcmp(Name,"CN")==0)) STREAMSetValue(S,"SSL-Certificate-CommonName",Value); ptr=GetNameValuePair(ptr,"/","=",&Name,&Value); } val=SSL_get_verify_result(ssl); switch(val) { case X509_V_OK: STREAMSetValue(S,"SSL-Certificate-Verify","OK"); RetVal=TRUE; break; case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: STREAMSetValue(S,"SSL-Certificate-Verify","unable to get issuer"); break; case X509_V_ERR_UNABLE_TO_GET_CRL: STREAMSetValue(S,"SSL-Certificate-Verify","unable to get certificate CRL"); break; case X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: STREAMSetValue(S,"SSL-Certificate-Verify","unable to decrypt certificate's signature"); break; case X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: STREAMSetValue(S,"SSL-Certificate-Verify","unable to decrypt CRL's signature"); break; case X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY: STREAMSetValue(S,"SSL-Certificate-Verify","unable to decode issuer public key"); break; case X509_V_ERR_CERT_SIGNATURE_FAILURE: STREAMSetValue(S,"SSL-Certificate-Verify","certificate signature invalid"); break; case X509_V_ERR_CRL_SIGNATURE_FAILURE: STREAMSetValue(S,"SSL-Certificate-Verify","CRL signature invalid"); break; case X509_V_ERR_CERT_NOT_YET_VALID: STREAMSetValue(S,"SSL-Certificate-Verify","certificate is not yet valid"); break; case X509_V_ERR_CERT_HAS_EXPIRED: STREAMSetValue(S,"SSL-Certificate-Verify","certificate has expired"); break; case X509_V_ERR_CRL_NOT_YET_VALID: STREAMSetValue(S,"SSL-Certificate-Verify","CRL is not yet valid the CRL is not yet valid."); break; case X509_V_ERR_CRL_HAS_EXPIRED: STREAMSetValue(S,"SSL-Certificate-Verify","CRL has expired the CRL has expired."); break; case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: STREAMSetValue(S,"SSL-Certificate-Verify","invalid notBefore value"); break; case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: STREAMSetValue(S,"SSL-Certificate-Verify","invalid notAfter value"); break; case X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD: STREAMSetValue(S,"SSL-Certificate-Verify","invalid CRL lastUpdate value"); break; case X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD: STREAMSetValue(S,"SSL-Certificate-Verify","invalid CRL nextUpdate value"); break; case X509_V_ERR_OUT_OF_MEM: STREAMSetValue(S,"SSL-Certificate-Verify","out of memory"); break; case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: STREAMSetValue(S,"SSL-Certificate-Verify","self signed certificate"); break; case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: STREAMSetValue(S,"SSL-Certificate-Verify","self signed certificate in certificate chain"); break; case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: STREAMSetValue(S,"SSL-Certificate-Verify","cant find root certificate in local database"); break; case X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE: STREAMSetValue(S,"SSL-Certificate-Verify","ERROR: unable to verify the first certificate"); break; case X509_V_ERR_CERT_CHAIN_TOO_LONG: STREAMSetValue(S,"SSL-Certificate-Verify","certificate chain too long"); break; case X509_V_ERR_CERT_REVOKED: STREAMSetValue(S,"SSL-Certificate-Verify","certificate revoked"); break; case X509_V_ERR_INVALID_CA: STREAMSetValue(S,"SSL-Certificate-Verify","invalid CA certificate"); break; case X509_V_ERR_PATH_LENGTH_EXCEEDED: STREAMSetValue(S,"SSL-Certificate-Verify","path length constraint exceeded"); break; case X509_V_ERR_INVALID_PURPOSE: STREAMSetValue(S,"SSL-Certificate-Verify","unsupported certificate purpose"); break; case X509_V_ERR_CERT_UNTRUSTED: STREAMSetValue(S,"SSL-Certificate-Verify","certificate not trusted"); break; case X509_V_ERR_CERT_REJECTED: STREAMSetValue(S,"SSL-Certificate-Verify","certificate rejected"); break; case X509_V_ERR_SUBJECT_ISSUER_MISMATCH: STREAMSetValue(S,"SSL-Certificate-Verify","subject issuer mismatch"); break; case X509_V_ERR_AKID_SKID_MISMATCH: STREAMSetValue(S,"SSL-Certificate-Verify","authority and subject key identifier mismatch"); break; case X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH: STREAMSetValue(S,"SSL-Certificate-Verify","authority and issuer serial number mismatch"); break; case X509_V_ERR_KEYUSAGE_NO_CERTSIGN: STREAMSetValue(S,"SSL-Certificate-Verify","key usage does not include certificate signing"); break; case X509_V_ERR_APPLICATION_VERIFICATION: STREAMSetValue(S,"SSL-Certificate-Verify","application verification failure"); break; } } else { STREAMSetValue(S,"SSL-Certificate-Verify","no certificate"); } DestroyString(Name); DestroyString(Value); #endif return(RetVal); } int DoSSLClientNegotiation(STREAM *S, int Flags) { int result=FALSE; #ifdef HAVE_LIBSSL const SSL_METHOD *Method; SSL_CTX *ctx; SSL *ssl; //struct x509 *cert=NULL; char *ptr; if (S) { INTERNAL_SSL_INIT(); // SSL_load_ciphers(); Method=SSLv23_client_method(); ctx=SSL_CTX_new(Method); if (! ctx) HandleSSLError(); else { STREAM_INTERNAL_SSL_ADD_SECURE_KEYS(S,ctx); SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, OpenSSLVerifyCallback); ssl=SSL_new(ctx); SSL_set_fd(ssl,S->in_fd); STREAMSetItem(S,"LIBUSEFUL-SSL-CTX",ssl); SSL_set_options(ssl, SSL_OP_SINGLE_DH_USE | SSL_OP_NO_SSLv2); //SSL_OP_NO_SSLv2, SSL_OP_NO_SSLv3, SSL_OP_NO_TLSv1 ptr=LibUsefulGetValue("SSL-Permitted-Ciphers"); if (ptr) SSL_set_cipher_list(ssl, ptr); result=SSL_connect(ssl); S->Flags|=SF_SSL; OpenSSLQueryCipher(S); OpenSSLVerifyCertificate(S); } } #endif return(result); } #ifdef HAVE_LIBSSL void OpenSSLSetupECDH(SSL_CTX *ctx) { EC_KEY* ecdh; ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1); //ecdh = EC_KEY_new_by_curve_name( NID_secp384r1); { SSL_CTX_set_tmp_ecdh(ctx, ecdh); EC_KEY_free(ecdh); } } void OpenSSLSetupDH(SSL_CTX *ctx) { char *Tempstr=NULL, *ptr; DH *dh=NULL; FILE *paramfile; if (CachedDH) dh=CachedDH; else { ptr=LibUsefulGetValue("SSL-DHParams-File"); if (StrLen(ptr)) Tempstr=CopyStr(Tempstr,ptr); paramfile = fopen(Tempstr, "r"); if (paramfile) { CachedDH = PEM_read_DHparams(paramfile, NULL, NULL, NULL); dh=CachedDH; fclose(paramfile); } if (! dh) { //OpenSSLGenerateDHParams(); dh=CachedDH; } } if (dh) SSL_CTX_set_tmp_dh(ctx, dh); //Don't free these parameters, as they are cached //DH_KEY_free(dh); DestroyString(Tempstr); } #endif int DoSSLServerNegotiation(STREAM *S, int Flags) { int result=FALSE; #ifdef HAVE_LIBSSL const SSL_METHOD *Method; SSL_CTX *ctx; SSL *ssl; char *ptr; if (S) { INTERNAL_SSL_INIT(); Method=SSLv23_server_method(); if (Method) { ctx=SSL_CTX_new(Method); if (ctx) { STREAM_INTERNAL_SSL_ADD_SECURE_KEYS(S,ctx); if (Flags & LU_SSL_PFS) { OpenSSLSetupDH(ctx); OpenSSLSetupECDH(ctx); } if (Flags & LU_SSL_VERIFY_PEER) { SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, OpenSSLVerifyCallback); SSL_CTX_set_verify_depth(ctx,1); } SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF); ssl=SSL_new(ctx); SSL_set_options(ssl, SSL_OP_NO_SSLv2|SSL_OP_SINGLE_DH_USE|SSL_OP_CIPHER_SERVER_PREFERENCE); //SSL_OP_NO_SSLv2, SSL_OP_NO_SSLv3, SSL_OP_NO_TLSv1 SSL_set_fd(ssl,S->in_fd); STREAMSetItem(S,"LIBUSEFUL-SSL-CTX",ssl); ptr=LibUsefulGetValue("SSL-Permitted-Ciphers"); if (ptr) SSL_set_cipher_list(ssl, ptr); SSL_set_accept_state(ssl); result=SSL_accept(ssl); if (result == TRUE) { S->Flags|=SF_SSL; OpenSSLQueryCipher(S); if (Flags & SSL_VERIFY_PEER) OpenSSLVerifyCertificate(S); } else { result=SSL_get_error(ssl,result); result=ERR_get_error(); STREAMSetValue(S, "SSL-Error", ERR_error_string(result,NULL)); result=FALSE; } } } } #endif return(result); } int STREAMIsPeerAuth(STREAM *S) { #ifdef HAVE_LIBSSL void *ptr; ptr=STREAMGetItem(S,"LIBUSEFUL-SSL-CTX"); if (! ptr) return(FALSE); if (SSL_get_verify_result((SSL *) ptr)==X509_V_OK) { if (SSL_get_peer_certificate((SSL *) ptr) !=NULL) return(TRUE); } #endif return(FALSE); } hashrat-1.6.1/libUseful-2.1/openssl.h0000644000175000017550000000053312470734537020023 0ustar metacosm89metacosm89 #ifndef LIBUSEFUL_OPENSSL_H #define LIBUSEFUL_OPENSSL_H #include "includes.h" #define LU_SSL_PFS 1 #define LU_SSL_VERIFY_PEER 2 void OpenSSLGenerateDHParams(); void HandleSSLError(); int SSLAvailable(); int DoSSLClientNegotiation(STREAM *S, int Flags); int DoSSLServerNegotiation(STREAM *S, int Flags); int STREAMIsPeerAuth(STREAM *S); #endif hashrat-1.6.1/libUseful-2.1/proctitle.c0000644000175000017550000000316712470734537020346 0ustar metacosm89metacosm89#include "proctitle.h" #define __GNU_SOURCE #include "errno.h" /*This is code to change the command-line of a program as visible in ps */ extern char **environ; extern char *program_invocation_name; extern char *program_invocation_short_name; char *TitleBuffer=NULL; int TitleLen=0; void CopyEnv(const char *Env) { char *tmp, *ptr; tmp=strdup(Env); if (tmp) { ptr=strchr(tmp,'='); if (ptr) { *ptr='\0'; ptr++; } else ptr=NULL; setenv(tmp,ptr,1); free(tmp); } } //The command-line args that we've been passed (argv) will occupy a block of contiguous memory that //contains these args and the environment strings. In order to change the command-line args we isolate //this block of memory by iterating through all the strings in it, and making copies of them. The //pointers in 'argv' and 'environ' are then redirected to these copies. Now we can overwrite the whole //block of memory with our new command-line arguments. void ProcessTitleCaptureBuffer(char **argv) { char **arg, *end=NULL, *tmp; program_invocation_name=strdup(program_invocation_name); program_invocation_short_name=strdup(program_invocation_short_name); TitleBuffer=argv[0]; arg=argv; while (*arg) { for (end=*arg; *end != '\0'; end++) ; *arg=strdup(*arg); arg++; } arg=environ; clearenv(); while (*arg) { for (end=*arg; *end != '\0'; end++); CopyEnv(*arg); arg++; } TitleLen=end-TitleBuffer; } void ProcessSetTitle(char **argv, char *FmtStr, ...) { va_list args; if (! TitleBuffer) ProcessTitleCaptureBuffer(argv); memset(TitleBuffer,0,TitleLen); va_start(args,FmtStr); vsnprintf(TitleBuffer,TitleLen,FmtStr,args); va_end(args); } hashrat-1.6.1/libUseful-2.1/proctitle.h0000644000175000017550000000022212470734537020340 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_PROCTITLE_H #define LIBUSEFUL_PROCTITLE_H #include "includes.h" void ProcessSetTitle(char **argv, char *FmtStr, ...); #endif hashrat-1.6.1/libUseful-2.1/pty.c0000644000175000017550000001210512470734537017145 0ustar metacosm89metacosm89#define _XOPEN_SOURCE #define _GNU_SOURCE #include "includes.h" #include "file.h" #include "GeneralFunctions.h" #include "string.h" #include "pty.h" #include #include #include #include #include ListNode *TTYAttribs=NULL; void HangUpLine(int tty) { struct termios tty_data, oldtty_data; tcgetattr(tty,&oldtty_data); tcgetattr(tty,&tty_data); cfsetispeed(&tty_data,B0); cfsetospeed(&tty_data,B0); tcsetattr(tty,TCSANOW,&tty_data); sleep(5); tcsetattr(tty,TCSANOW,&oldtty_data); } void ResetTTY(int tty) { struct termios *tty_data; char *Tempstr=NULL; ListNode *Curr; Tempstr=FormatStr(Tempstr,"%d",tty); Curr=ListFindNamedItem(TTYAttribs,Tempstr); if (Curr) { tty_data=(struct termios *) Curr->Item; tcsetattr(tty,TCSANOW,tty_data); ListDeleteNode(Curr); free(tty_data); } DestroyString(Tempstr); } void InitTTY(int tty, int LineSpeed, int Flags) { struct termios tty_data, *old_tty_data; int val; char *Tempstr=NULL; ListNode *Curr; Tempstr=FormatStr(Tempstr,"%d",tty); if (! TTYAttribs) TTYAttribs=ListCreate(); Curr=ListFindNamedItem(TTYAttribs,Tempstr); if (! Curr) { old_tty_data=(struct termios *) calloc(1,sizeof(struct termios)); ListAddNamedItem(TTYAttribs,Tempstr,old_tty_data); } else old_tty_data=(struct termios *) Curr->Item; tcgetattr(tty,old_tty_data); //tcgetattr(tty,&tty_data); memset(&tty_data,0,sizeof(struct termios)); //ignore break characters and parity errors tty_data.c_iflag=IGNBRK | IGNPAR; if (! (Flags & TTYFLAG_CRLF_KEEP)) { //translate carriage-return to newline if (Flags & TTYFLAG_CRLF) tty_data.c_iflag |= ICRNL; else tty_data.c_iflag &= ~ICRNL; //translate newline to carriage return if (Flags & TTYFLAG_LFCR) { tty_data.c_iflag |= INLCR; } else tty_data.c_iflag &= ~INLCR; //postprocess and translate newline to cr-nl if (Flags & TTYFLAG_LFCR) { tty_data.c_oflag |= ONLCR | OPOST; } } tty_data.c_cflag=CREAD | CS8 | HUPCL | CLOCAL; if (Flags & TTYFLAG_SOFTWARE_FLOW) { tty_data.c_iflag |= IXON | IXOFF; tty_data.c_cc[VSTART]=old_tty_data->c_cc[VSTART]; tty_data.c_cc[VSTOP]=old_tty_data->c_cc[VSTOP]; } if (Flags & TTYFLAG_HARDWARE_FLOW) tty_data.c_cflag |=CRTSCTS; // 'local' input flags tty_data.c_lflag=0; if (! (Flags & TTYFLAG_IGNSIG)) { tty_data.c_lflag=ISIG; tty_data.c_cc[VQUIT]=old_tty_data->c_cc[VQUIT]; tty_data.c_cc[VSUSP]=old_tty_data->c_cc[VSUSP]; tty_data.c_cc[VINTR]=old_tty_data->c_cc[VINTR]; } if (Flags & TTYFLAG_ECHO) tty_data.c_lflag |= ECHO; if (Flags & TTYFLAG_CANON) { tty_data.c_lflag|= ICANON; tty_data.c_cc[VEOF]=old_tty_data->c_cc[VEOF]; tty_data.c_cc[VEOL]=old_tty_data->c_cc[VEOL]; tty_data.c_cc[VKILL]=old_tty_data->c_cc[VKILL]; tty_data.c_cc[VERASE]=old_tty_data->c_cc[VERASE]; } else { tty_data.c_cc[VMIN]=1; tty_data.c_cc[VTIME]=0; } if (LineSpeed > 0) { switch (LineSpeed) { case 2400: val=B2400; break; case 4800: val=B4800; break; case 9600: val=B9600; break; case 19200: val=B19200; break; case 38400: val=B38400; break; case 57600: val=B57600; break; case 115200: val=B115200; break; case 230400: val=B230400; break; #ifdef B460800 case 460800: val=B460800; break; #endif #ifdef B500000 case 500000: val=B500000; break; #endif #ifdef B1000000 case 10000000: val=B1000000; break; #endif #ifdef B1152000 case 1152000: val=B1152000; break; #endif #ifdef B2000000 case 2000000: val=B2000000; break; #endif #ifdef B4000000 case 4000000: val=B4000000; break; #endif default: val=B115200; break; } cfsetispeed(&tty_data,val); cfsetospeed(&tty_data,val); } tcflush(tty,TCIFLUSH); tcsetattr(tty,TCSANOW,&tty_data); DestroyString(Tempstr); } int OpenTTY(char *devname, int LineSpeed, int Flags) { int tty; if (Flags & TTYFLAG_NONBLOCK) tty=open(devname,O_RDWR | O_NOCTTY | O_NDELAY); else tty=open(devname,O_RDWR | O_NOCTTY); if ( tty <0) return(-1); InitTTY(tty, LineSpeed, Flags); return(tty); } int GrabPseudoTTY(int *pty, int *tty, int TermFlags) { char c1,c2; char *Tempstr=NULL; //first try unix98 style *pty=open("/dev/ptmx",O_RDWR); if (*pty > -1) { grantpt(*pty); unlockpt(*pty); SetStrLen(Tempstr,100); if (ptsname_r(*pty,Tempstr,100) != 0) Tempstr=CopyStr(Tempstr,ptsname(*pty)); if (StrLen(Tempstr)) { if ( (*tty=open(Tempstr,O_RDWR)) >-1) { InitTTY(*tty,0,TermFlags); return(1); } } close(*pty); } //if unix98 fails, try old BSD style for (c1='p'; c1 < 's'; c1++) { for (c2='5'; c2 <='9'; c2++) { Tempstr=FormatStr(Tempstr,"/dev/pty%c%c",c1,c2); if ( (*pty=open(Tempstr,O_RDWR)) >-1) { Tempstr=FormatStr(Tempstr,"/dev/tty%c%c",c1,c2); if ( (*tty=OpenTTY(Tempstr,0,TermFlags)) >-1) { DestroyString(Tempstr); return(1); } else close(*pty); } } } DestroyString(Tempstr); return(0); } char *TTYReadSecret(char *RetStr, STREAM *S, int Flags) { int len=0, inchar; //Turn off echo (and other things) InitTTY(0,0, TTYFLAG_CRLF); inchar=STREAMReadChar(S); while (inchar != EOF) { RetStr=AddCharToBuffer(RetStr,len++,inchar); if (inchar=='\n') break; if (Flags & TEXT_STARS) write(1,"*",1); inchar=STREAMReadChar(S); } //turn echo back on ResetTTY(0); printf("\n"); return(RetStr); } hashrat-1.6.1/libUseful-2.1/pty.h0000644000175000017550000000132212470734537017151 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_PTY_H #define LIBUSEFUL_PTY_H #include "defines.h" #define TTYFLAG_ECHO 256 #define TTYFLAG_CRLF 512 #define TTYFLAG_LFCR 1024 #define TTYFLAG_NONBLOCK 2048 #define TTYFLAG_CANON 4096 #define TTYFLAG_HARDWARE_FLOW 8192 #define TTYFLAG_SOFTWARE_FLOW 16324 #define TTYFLAG_CRLF_KEEP 32768 #define TTYFLAG_IGNSIG 65536 #define TEXT_STARS 1 #define TEXT_STAR_ONE 2 #ifdef __cplusplus extern "C" { #endif void HangUpLine(int tty); int OpenTTY(char *devname, int LineSpeed, int Flags); void InitTTY(int tty, int LineSpeed, int Flags); void ResetTTY(int tty); int GrabPseudoTTY(int *pty, int *tty, int Flags); char *TTYReadSecret(char *RetStr, STREAM *S, int Flags); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/sha1.c0000644000175000017550000002477112470734537017201 0ustar metacosm89metacosm89/* sha1.c - Functions to compute SHA1 message digest of files or memory blocks according to the NIST specification FIPS-180-1. Copyright (C) 2000-2001, 2003-2006, 2008-2011 Free Software Foundation, Inc. This program 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 2, or (at your option) any later version. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Scott G. Miller Credits: Robert Klep -- Expansion function fix */ //#include #include "sha1.h" #include #include #include #ifdef WORDS_BIGENDIAN # define SWAP(n) (n) #else # define SWAP(n) \ (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24)) #endif #define BLOCKSIZE 32768 #if BLOCKSIZE % 64 != 0 # error "invalid BLOCKSIZE" #endif /* This array contains the bytes used to pad the buffer to the next 64-byte boundary. (RFC 1321, 3.1: Step 1) */ static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ }; /* Take a pointer to a 160 bit block of data (five 32 bit ints) and initialize it to the start constants of the SHA1 algorithm. This must be called before using hash in the call to sha1_hash. */ void sha1_init_ctx (struct sha1_ctx *ctx) { ctx->A = 0x67452301; ctx->B = 0xefcdab89; ctx->C = 0x98badcfe; ctx->D = 0x10325476; ctx->E = 0xc3d2e1f0; ctx->total[0] = ctx->total[1] = 0; ctx->buflen = 0; } /* Copy the 4 byte value from v into the memory location pointed to by *cp, If your architecture allows unaligned access this is equivalent to * (uint32_t *) cp = v */ static inline void set_uint32 (char *cp, uint32_t v) { memcpy (cp, &v, sizeof v); } /* Put result from CTX in first 20 bytes following RESBUF. The result must be in little endian byte order. */ void * sha1_read_ctx (const struct sha1_ctx *ctx, void *resbuf) { char *r = resbuf; set_uint32 (r + 0 * sizeof ctx->A, SWAP (ctx->A)); set_uint32 (r + 1 * sizeof ctx->B, SWAP (ctx->B)); set_uint32 (r + 2 * sizeof ctx->C, SWAP (ctx->C)); set_uint32 (r + 3 * sizeof ctx->D, SWAP (ctx->D)); set_uint32 (r + 4 * sizeof ctx->E, SWAP (ctx->E)); return resbuf; } /* Process the remaining bytes in the internal buffer and the usual prolog according to the standard and write the result to RESBUF. */ void * sha1_finish_ctx (struct sha1_ctx *ctx, void *resbuf) { /* Take yet unprocessed bytes into account. */ uint32_t bytes = ctx->buflen; size_t size = (bytes < 56) ? 64 / 4 : 64 * 2 / 4; /* Now count remaining bytes. */ ctx->total[0] += bytes; if (ctx->total[0] < bytes) ++ctx->total[1]; /* Put the 64-bit file length in *bits* at the end of the buffer. */ ctx->buffer[size - 2] = SWAP ((ctx->total[1] << 3) | (ctx->total[0] >> 29)); ctx->buffer[size - 1] = SWAP (ctx->total[0] << 3); memcpy (&((char *) ctx->buffer)[bytes], fillbuf, (size - 2) * 4 - bytes); /* Process last bytes. */ sha1_process_block (ctx->buffer, size * 4, ctx); return sha1_read_ctx (ctx, resbuf); } void sha1_process_bytes (const void *buffer, size_t len, struct sha1_ctx *ctx) { /* When we already have some bits in our internal buffer concatenate both inputs first. */ if (ctx->buflen != 0) { size_t left_over = ctx->buflen; size_t add = 128 - left_over > len ? len : 128 - left_over; memcpy (&((char *) ctx->buffer)[left_over], buffer, add); ctx->buflen += add; if (ctx->buflen > 64) { sha1_process_block (ctx->buffer, ctx->buflen & ~63, ctx); ctx->buflen &= 63; /* The regions in the following copy operation cannot overlap. */ memcpy (ctx->buffer, &((char *) ctx->buffer)[(left_over + add) & ~63], ctx->buflen); } buffer = (const char *) buffer + add; len -= add; } /* Process available complete blocks. */ if (len >= 64) { #if !_STRING_ARCH_unaligned # define alignof(type) offsetof (struct { char c; type x; }, x) # define UNALIGNED_P(p) (((size_t) p) % alignof (uint32_t) != 0) if (UNALIGNED_P (buffer)) while (len > 64) { sha1_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx); buffer = (const char *) buffer + 64; len -= 64; } else #endif { sha1_process_block (buffer, len & ~63, ctx); buffer = (const char *) buffer + (len & ~63); len &= 63; } } /* Move remaining bytes in internal buffer. */ if (len > 0) { size_t left_over = ctx->buflen; memcpy (&((char *) ctx->buffer)[left_over], buffer, len); left_over += len; if (left_over >= 64) { sha1_process_block (ctx->buffer, 64, ctx); left_over -= 64; memcpy (ctx->buffer, &ctx->buffer[16], left_over); } ctx->buflen = left_over; } } /* --- Code below is the primary difference between md5.c and sha1.c --- */ /* SHA1 round constants */ #define K1 0x5a827999 #define K2 0x6ed9eba1 #define K3 0x8f1bbcdc #define K4 0xca62c1d6 /* Round functions. Note that F2 is the same as F4. */ #define F1(B,C,D) ( D ^ ( B & ( C ^ D ) ) ) #define F2(B,C,D) (B ^ C ^ D) #define F3(B,C,D) ( ( B & C ) | ( D & ( B | C ) ) ) #define F4(B,C,D) (B ^ C ^ D) /* Process LEN bytes of BUFFER, accumulating context into CTX. It is assumed that LEN % 64 == 0. Most of this code comes from GnuPG's cipher/sha1.c. */ void sha1_process_block (const void *buffer, size_t len, struct sha1_ctx *ctx) { const uint32_t *words = buffer; size_t nwords = len / sizeof (uint32_t); const uint32_t *endp = words + nwords; uint32_t x[16]; uint32_t a = ctx->A; uint32_t b = ctx->B; uint32_t c = ctx->C; uint32_t d = ctx->D; uint32_t e = ctx->E; /* First increment the byte count. RFC 1321 specifies the possible length of the file up to 2^64 bits. Here we only compute the number of bytes. Do a double word increment. */ ctx->total[0] += len; if (ctx->total[0] < len) ++ctx->total[1]; #define rol(x, n) (((x) << (n)) | ((uint32_t) (x) >> (32 - (n)))) #define M(I) ( tm = x[I&0x0f] ^ x[(I-14)&0x0f] \ ^ x[(I-8)&0x0f] ^ x[(I-3)&0x0f] \ , (x[I&0x0f] = rol(tm, 1)) ) #define R(A,B,C,D,E,F,K,M) do { E += rol( A, 5 ) \ + F( B, C, D ) \ + K \ + M; \ B = rol( B, 30 ); \ } while(0) while (words < endp) { uint32_t tm; int t; for (t = 0; t < 16; t++) { x[t] = SWAP (*words); words++; } R( a, b, c, d, e, F1, K1, x[ 0] ); R( e, a, b, c, d, F1, K1, x[ 1] ); R( d, e, a, b, c, F1, K1, x[ 2] ); R( c, d, e, a, b, F1, K1, x[ 3] ); R( b, c, d, e, a, F1, K1, x[ 4] ); R( a, b, c, d, e, F1, K1, x[ 5] ); R( e, a, b, c, d, F1, K1, x[ 6] ); R( d, e, a, b, c, F1, K1, x[ 7] ); R( c, d, e, a, b, F1, K1, x[ 8] ); R( b, c, d, e, a, F1, K1, x[ 9] ); R( a, b, c, d, e, F1, K1, x[10] ); R( e, a, b, c, d, F1, K1, x[11] ); R( d, e, a, b, c, F1, K1, x[12] ); R( c, d, e, a, b, F1, K1, x[13] ); R( b, c, d, e, a, F1, K1, x[14] ); R( a, b, c, d, e, F1, K1, x[15] ); R( e, a, b, c, d, F1, K1, M(16) ); R( d, e, a, b, c, F1, K1, M(17) ); R( c, d, e, a, b, F1, K1, M(18) ); R( b, c, d, e, a, F1, K1, M(19) ); R( a, b, c, d, e, F2, K2, M(20) ); R( e, a, b, c, d, F2, K2, M(21) ); R( d, e, a, b, c, F2, K2, M(22) ); R( c, d, e, a, b, F2, K2, M(23) ); R( b, c, d, e, a, F2, K2, M(24) ); R( a, b, c, d, e, F2, K2, M(25) ); R( e, a, b, c, d, F2, K2, M(26) ); R( d, e, a, b, c, F2, K2, M(27) ); R( c, d, e, a, b, F2, K2, M(28) ); R( b, c, d, e, a, F2, K2, M(29) ); R( a, b, c, d, e, F2, K2, M(30) ); R( e, a, b, c, d, F2, K2, M(31) ); R( d, e, a, b, c, F2, K2, M(32) ); R( c, d, e, a, b, F2, K2, M(33) ); R( b, c, d, e, a, F2, K2, M(34) ); R( a, b, c, d, e, F2, K2, M(35) ); R( e, a, b, c, d, F2, K2, M(36) ); R( d, e, a, b, c, F2, K2, M(37) ); R( c, d, e, a, b, F2, K2, M(38) ); R( b, c, d, e, a, F2, K2, M(39) ); R( a, b, c, d, e, F3, K3, M(40) ); R( e, a, b, c, d, F3, K3, M(41) ); R( d, e, a, b, c, F3, K3, M(42) ); R( c, d, e, a, b, F3, K3, M(43) ); R( b, c, d, e, a, F3, K3, M(44) ); R( a, b, c, d, e, F3, K3, M(45) ); R( e, a, b, c, d, F3, K3, M(46) ); R( d, e, a, b, c, F3, K3, M(47) ); R( c, d, e, a, b, F3, K3, M(48) ); R( b, c, d, e, a, F3, K3, M(49) ); R( a, b, c, d, e, F3, K3, M(50) ); R( e, a, b, c, d, F3, K3, M(51) ); R( d, e, a, b, c, F3, K3, M(52) ); R( c, d, e, a, b, F3, K3, M(53) ); R( b, c, d, e, a, F3, K3, M(54) ); R( a, b, c, d, e, F3, K3, M(55) ); R( e, a, b, c, d, F3, K3, M(56) ); R( d, e, a, b, c, F3, K3, M(57) ); R( c, d, e, a, b, F3, K3, M(58) ); R( b, c, d, e, a, F3, K3, M(59) ); R( a, b, c, d, e, F4, K4, M(60) ); R( e, a, b, c, d, F4, K4, M(61) ); R( d, e, a, b, c, F4, K4, M(62) ); R( c, d, e, a, b, F4, K4, M(63) ); R( b, c, d, e, a, F4, K4, M(64) ); R( a, b, c, d, e, F4, K4, M(65) ); R( e, a, b, c, d, F4, K4, M(66) ); R( d, e, a, b, c, F4, K4, M(67) ); R( c, d, e, a, b, F4, K4, M(68) ); R( b, c, d, e, a, F4, K4, M(69) ); R( a, b, c, d, e, F4, K4, M(70) ); R( e, a, b, c, d, F4, K4, M(71) ); R( d, e, a, b, c, F4, K4, M(72) ); R( c, d, e, a, b, F4, K4, M(73) ); R( b, c, d, e, a, F4, K4, M(74) ); R( a, b, c, d, e, F4, K4, M(75) ); R( e, a, b, c, d, F4, K4, M(76) ); R( d, e, a, b, c, F4, K4, M(77) ); R( c, d, e, a, b, F4, K4, M(78) ); R( b, c, d, e, a, F4, K4, M(79) ); a = ctx->A += a; b = ctx->B += b; c = ctx->C += c; d = ctx->D += d; e = ctx->E += e; } } hashrat-1.6.1/libUseful-2.1/sha1.h0000644000175000017550000000520212470734537017172 0ustar metacosm89metacosm89/* Declarations of functions and data types used for SHA1 sum library functions. Copyright (C) 2000-2001, 2003, 2005-2006, 2008-2011 Free Software Foundation, Inc. This program 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 2, or (at your option) any later version. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef SHA1_H # define SHA1_H 1 # include # include # ifdef __cplusplus extern "C" { # endif #define SHA1_DIGEST_SIZE 20 /* Structure to save state of computation between the single steps. */ struct sha1_ctx { uint32_t A; uint32_t B; uint32_t C; uint32_t D; uint32_t E; uint32_t total[2]; uint32_t buflen; uint32_t buffer[32]; }; /* Initialize structure containing state of computation. */ extern void sha1_init_ctx (struct sha1_ctx *ctx); /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is necessary that LEN is a multiple of 64!!! */ extern void sha1_process_block (const void *buffer, size_t len, struct sha1_ctx *ctx); /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is NOT required that LEN is a multiple of 64. */ extern void sha1_process_bytes (const void *buffer, size_t len, struct sha1_ctx *ctx); /* Process the remaining bytes in the buffer and put result from CTX in first 20 bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *sha1_finish_ctx (struct sha1_ctx *ctx, void *resbuf); /* Put result from CTX in first 20 bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. */ extern void *sha1_read_ctx (const struct sha1_ctx *ctx, void *resbuf); # ifdef __cplusplus } # endif #endif hashrat-1.6.1/libUseful-2.1/sha2.c0000644000175000017550000007773612470734537017213 0ustar metacosm89metacosm89/* * FILE: sha2.c * AUTHOR: Aaron D. Gifford - http://www.aarongifford.com/ * * Copyright (c) 2000-2001, Aaron D. Gifford * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the copyright holder nor the names of contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ #include /* memcpy()/memset() or bcopy()/bzero() */ #include /* assert() */ #include "sha2.h" /* * ASSERT NOTE: * Some sanity checking code is included using assert(). On my FreeBSD * system, this additional code can be removed by compiling with NDEBUG * defined. Check your own systems manpage on assert() to see how to * compile WITHOUT the sanity checking code on your system. * * UNROLLED TRANSFORM LOOP NOTE: * You can define SHA2_UNROLL_TRANSFORM to use the unrolled transform * loop version for the hash transform rounds (defined using macros * later in this file). Either define on the command line, for example: * * cc -DSHA2_UNROLL_TRANSFORM -o sha2 sha2.c sha2prog.c * * or define below: * * #define SHA2_UNROLL_TRANSFORM * */ /*** SHA-256/384/512 Machine Architecture Definitions *****************/ /* * BYTE_ORDER NOTE: * * Please make sure that your system defines BYTE_ORDER. If your * architecture is little-endian, make sure it also defines * LITTLE_ENDIAN and that the two (BYTE_ORDER and LITTLE_ENDIAN) are * equivilent. * * If your system does not define the above, then you can do so by * hand like this: * * #define LITTLE_ENDIAN 1234 * #define BIG_ENDIAN 4321 * * And for little-endian machines, add: * * #define BYTE_ORDER LITTLE_ENDIAN * * Or for big-endian machines: * * #define BYTE_ORDER BIG_ENDIAN * * The FreeBSD machine this was written on defines BYTE_ORDER * appropriately by including (which in turn includes * where the appropriate definitions are actually * made). */ #if !defined(BYTE_ORDER) || (BYTE_ORDER != LITTLE_ENDIAN && BYTE_ORDER != BIG_ENDIAN) #error Define BYTE_ORDER to be equal to either LITTLE_ENDIAN or BIG_ENDIAN #endif /* * Define the followingsha2_* types to types of the correct length on * the native archtecture. Most BSD systems and Linux define u_intXX_t * types. Machines with very recent ANSI C headers, can use the * uintXX_t definintions from inttypes.h by defining SHA2_USE_INTTYPES_H * during compile or in the sha.h header file. * * Machines that support neither u_intXX_t nor inttypes.h's uintXX_t * will need to define these three typedefs below (and the appropriate * ones in sha.h too) by hand according to their system architecture. * * Thank you, Jun-ichiro itojun Hagino, for suggesting using u_intXX_t * types and pointing out recent ANSI C support for uintXX_t in inttypes.h. */ #ifdef SHA2_USE_INTTYPES_H typedef uint8_t sha2_byte; /* Exactly 1 byte */ typedef uint32_t sha2_word32; /* Exactly 4 bytes */ typedef uint64_t sha2_word64; /* Exactly 8 bytes */ #else /* SHA2_USE_INTTYPES_H */ typedef u_int8_t sha2_byte; /* Exactly 1 byte */ typedef u_int32_t sha2_word32; /* Exactly 4 bytes */ typedef u_int64_t sha2_word64; /* Exactly 8 bytes */ #endif /* SHA2_USE_INTTYPES_H */ /*** SHA-256/384/512 Various Length Definitions ***********************/ /* NOTE: Most of these are in sha2.h */ #define SHA2_SHA256_SHORT_BLOCK_LENGTH (SHA2_SHA256_BLOCK_LENGTH - 8) #define SHA2_SHA384_SHORT_BLOCK_LENGTH (SHA2_SHA384_BLOCK_LENGTH - 16) #define SHA2_SHA512_SHORT_BLOCK_LENGTH (SHA2_SHA512_BLOCK_LENGTH - 16) /*** ENDIAN REVERSAL MACROS *******************************************/ #if BYTE_ORDER == LITTLE_ENDIAN #define REVERSE32(w,x) { \ sha2_word32 tmp = (w); \ tmp = (tmp >> 16) | (tmp << 16); \ (x) = ((tmp & 0xff00ff00UL) >> 8) | ((tmp & 0x00ff00ffUL) << 8); \ } #define REVERSE64(w,x) { \ sha2_word64 tmp = (w); \ tmp = (tmp >> 32) | (tmp << 32); \ tmp = ((tmp & 0xff00ff00ff00ff00ULL) >> 8) | \ ((tmp & 0x00ff00ff00ff00ffULL) << 8); \ (x) = ((tmp & 0xffff0000ffff0000ULL) >> 16) | \ ((tmp & 0x0000ffff0000ffffULL) << 16); \ } #endif /* BYTE_ORDER == LITTLE_ENDIAN */ /* * Macro for incrementally adding the unsigned 64-bit integer n to the * unsigned 128-bit integer (represented using a two-element array of * 64-bit words): */ #define ADDINC128(w,n) { \ (w)[0] += (sha2_word64)(n); \ if ((w)[0] < (n)) { \ (w)[1]++; \ } \ } /* * Macros for copying blocks of memory and for zeroing out ranges * of memory. Using these macros makes it easy to switch from * using memset()/memcpy() and using bzero()/bcopy(). * * Please define either SHA2_USE_MEMSET_MEMCPY or define * SHA2_USE_BZERO_BCOPY depending on which function set you * choose to use: */ #if !defined(SHA2_USE_MEMSET_MEMCPY) && !defined(SHA2_USE_BZERO_BCOPY) /* Default to memset()/memcpy() if no option is specified */ #define SHA2_USE_MEMSET_MEMCPY 1 #endif #if defined(SHA2_USE_MEMSET_MEMCPY) && defined(SHA2_USE_BZERO_BCOPY) /* Abort with an error if BOTH options are defined */ #error Define either SHA2_USE_MEMSET_MEMCPY or SHA2_USE_BZERO_BCOPY, not both! #endif #ifdef SHA2_USE_MEMSET_MEMCPY #define MEMSET_BZERO(p,l) memset((p), 0, (l)) #define MEMCPY_BCOPY(d,s,l) memcpy((d), (s), (l)) #endif #ifdef SHA2_USE_BZERO_BCOPY #define MEMSET_BZERO(p,l) bzero((p), (l)) #define MEMCPY_BCOPY(d,s,l) bcopy((s), (d), (l)) #endif /*** THE SIX LOGICAL FUNCTIONS ****************************************/ /* * Bit shifting and rotation (used by the six SHA-XYZ logical functions: * * NOTE: The naming of R and S appears backwards here (R is a SHIFT and * S is a ROTATION) because the SHA-256/384/512 description document * (see http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf) uses this * same "backwards" definition. */ /* Shift-right (used in SHA-256, SHA-384, and SHA-512): */ #define R(b,x) ((x) >> (b)) /* 32-bit Rotate-right (used in SHA-256): */ #define S32(b,x) (((x) >> (b)) | ((x) << (32 - (b)))) /* 64-bit Rotate-right (used in SHA-384 and SHA-512): */ #define S64(b,x) (((x) >> (b)) | ((x) << (64 - (b)))) /* Two of six logical functions used in SHA-256, SHA-384, and SHA-512: */ #define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z))) #define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) /* Four of six logical functions used in SHA-256: */ #define Sigma0_256(x) (S32(2, (x)) ^ S32(13, (x)) ^ S32(22, (x))) #define Sigma1_256(x) (S32(6, (x)) ^ S32(11, (x)) ^ S32(25, (x))) #define sigma0_256(x) (S32(7, (x)) ^ S32(18, (x)) ^ R(3 , (x))) #define sigma1_256(x) (S32(17, (x)) ^ S32(19, (x)) ^ R(10, (x))) /* Four of six logical functions used in SHA-384 and SHA-512: */ #define Sigma0_512(x) (S64(28, (x)) ^ S64(34, (x)) ^ S64(39, (x))) #define Sigma1_512(x) (S64(14, (x)) ^ S64(18, (x)) ^ S64(41, (x))) #define sigma0_512(x) (S64( 1, (x)) ^ S64( 8, (x)) ^ R( 7, (x))) #define sigma1_512(x) (S64(19, (x)) ^ S64(61, (x)) ^ R( 6, (x))) /*** INTERNAL FUNCTION PROTOTYPES *************************************/ /* NOTE: These should not be accessed directly from outside this * library -- they are intended for private internal visibility/use * only. */ void SHA2_SHA512_Last(SHA2_SHA512_CTX*); void SHA2_SHA256_Transform(SHA2_SHA256_CTX*, const sha2_word32*); void SHA2_SHA512_Transform(SHA2_SHA512_CTX*, const sha2_word64*); /*** SHA-XYZ INITIAL HASH VALUES AND CONSTANTS ************************/ /* Hash constant words K for SHA-256: */ const static sha2_word32 K256[64] = { 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL, 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL, 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL, 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL, 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL, 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL, 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL }; /* Initial hash value H for SHA-256: */ const static sha2_word32 sha256_initial_hash_value[8] = { 0x6a09e667UL, 0xbb67ae85UL, 0x3c6ef372UL, 0xa54ff53aUL, 0x510e527fUL, 0x9b05688cUL, 0x1f83d9abUL, 0x5be0cd19UL }; /* Hash constant words K for SHA-384 and SHA-512: */ const static sha2_word64 K512[80] = { 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL, 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL, 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL, 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL, 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL, 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL, 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL, 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL, 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL, 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL, 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL, 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL, 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL, 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL, 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL, 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL, 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL, 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL, 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL, 0x113f9804bef90daeULL, 0x1b710b35131c471bULL, 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL, 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL }; /* Initial hash value H for SHA-384 */ const static sha2_word64 sha384_initial_hash_value[8] = { 0xcbbb9d5dc1059ed8ULL, 0x629a292a367cd507ULL, 0x9159015a3070dd17ULL, 0x152fecd8f70e5939ULL, 0x67332667ffc00b31ULL, 0x8eb44a8768581511ULL, 0xdb0c2e0d64f98fa7ULL, 0x47b5481dbefa4fa4ULL }; /* Initial hash value H for SHA-512 */ const static sha2_word64 sha512_initial_hash_value[8] = { 0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, 0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL, 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL, 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL }; /* * Constant used by SHA256/384/512_End() functions for converting the * digest to a readable hexadecimal character string: */ static const char *sha2_hex_digits = "0123456789abcdef"; /*** SHA-256: *********************************************************/ void SHA2_SHA256_Init(SHA2_SHA256_CTX* context) { if (context == (SHA2_SHA256_CTX*)0) { return; } MEMCPY_BCOPY(context->state, sha256_initial_hash_value, SHA2_SHA256_DIGEST_LENGTH); MEMSET_BZERO(context->buffer, SHA2_SHA256_BLOCK_LENGTH); context->bitcount = 0; } #ifdef SHA2_UNROLL_TRANSFORM /* Unrolled SHA-256 round macros: */ #if BYTE_ORDER == LITTLE_ENDIAN #define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \ REVERSE32(*data++, W256[j]); \ T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \ K256[j] + W256[j]; \ (d) += T1; \ (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \ j++ #else /* BYTE_ORDER == LITTLE_ENDIAN */ #define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \ T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \ K256[j] + (W256[j] = *data++); \ (d) += T1; \ (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \ j++ #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #define ROUND256(a,b,c,d,e,f,g,h) \ s0 = W256[(j+1)&0x0f]; \ s0 = sigma0_256(s0); \ s1 = W256[(j+14)&0x0f]; \ s1 = sigma1_256(s1); \ T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + K256[j] + \ (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0); \ (d) += T1; \ (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \ j++ void SHA2_SHA256_Transform(SHA2_SHA256_CTX* context, const sha2_word32* data) { sha2_word32 a, b, c, d, e, f, g, h, s0, s1; sha2_word32 T1, *W256; int j; W256 = (sha2_word32*)context->buffer; /* Initialize registers with the prev. intermediate value */ a = context->state[0]; b = context->state[1]; c = context->state[2]; d = context->state[3]; e = context->state[4]; f = context->state[5]; g = context->state[6]; h = context->state[7]; j = 0; do { /* Rounds 0 to 15 (unrolled): */ ROUND256_0_TO_15(a,b,c,d,e,f,g,h); ROUND256_0_TO_15(h,a,b,c,d,e,f,g); ROUND256_0_TO_15(g,h,a,b,c,d,e,f); ROUND256_0_TO_15(f,g,h,a,b,c,d,e); ROUND256_0_TO_15(e,f,g,h,a,b,c,d); ROUND256_0_TO_15(d,e,f,g,h,a,b,c); ROUND256_0_TO_15(c,d,e,f,g,h,a,b); ROUND256_0_TO_15(b,c,d,e,f,g,h,a); } while (j < 16); /* Now for the remaining rounds to 64: */ do { ROUND256(a,b,c,d,e,f,g,h); ROUND256(h,a,b,c,d,e,f,g); ROUND256(g,h,a,b,c,d,e,f); ROUND256(f,g,h,a,b,c,d,e); ROUND256(e,f,g,h,a,b,c,d); ROUND256(d,e,f,g,h,a,b,c); ROUND256(c,d,e,f,g,h,a,b); ROUND256(b,c,d,e,f,g,h,a); } while (j < 64); /* Compute the current intermediate hash value */ context->state[0] += a; context->state[1] += b; context->state[2] += c; context->state[3] += d; context->state[4] += e; context->state[5] += f; context->state[6] += g; context->state[7] += h; /* Clean up */ a = b = c = d = e = f = g = h = T1 = 0; } #else /* SHA2_UNROLL_TRANSFORM */ void SHA2_SHA256_Transform(SHA2_SHA256_CTX* context, const sha2_word32* data) { sha2_word32 a, b, c, d, e, f, g, h, s0, s1; sha2_word32 T1, T2, *W256; int j; W256 = (sha2_word32*)context->buffer; /* Initialize registers with the prev. intermediate value */ a = context->state[0]; b = context->state[1]; c = context->state[2]; d = context->state[3]; e = context->state[4]; f = context->state[5]; g = context->state[6]; h = context->state[7]; j = 0; do { #if BYTE_ORDER == LITTLE_ENDIAN /* Copy data while converting to host byte order */ REVERSE32(*data++,W256[j]); /* Apply the SHA-256 compression function to update a..h */ T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + W256[j]; #else /* BYTE_ORDER == LITTLE_ENDIAN */ /* Apply the SHA-256 compression function to update a..h with copy */ T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + (W256[j] = *data++); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ T2 = Sigma0_256(a) + Maj(a, b, c); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; j++; } while (j < 16); do { /* Part of the message block expansion: */ s0 = W256[(j+1)&0x0f]; s0 = sigma0_256(s0); s1 = W256[(j+14)&0x0f]; s1 = sigma1_256(s1); /* Apply the SHA-256 compression function to update a..h */ T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0); T2 = Sigma0_256(a) + Maj(a, b, c); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; j++; } while (j < 64); /* Compute the current intermediate hash value */ context->state[0] += a; context->state[1] += b; context->state[2] += c; context->state[3] += d; context->state[4] += e; context->state[5] += f; context->state[6] += g; context->state[7] += h; /* Clean up */ a = b = c = d = e = f = g = h = T1 = T2 = 0; } #endif /* SHA2_UNROLL_TRANSFORM */ void SHA2_SHA256_Update(SHA2_SHA256_CTX* context, const sha2_byte *data, size_t len) { unsigned int freespace, usedspace; if (len == 0) { /* Calling with no data is valid - we do nothing */ return; } /* Sanity check: */ assert(context != (SHA2_SHA256_CTX*)0 && data != (sha2_byte*)0); usedspace = (context->bitcount >> 3) % SHA2_SHA256_BLOCK_LENGTH; if (usedspace > 0) { /* Calculate how much free space is available in the buffer */ freespace = SHA2_SHA256_BLOCK_LENGTH - usedspace; if (len >= freespace) { /* Fill the buffer completely and process it */ MEMCPY_BCOPY(&context->buffer[usedspace], data, freespace); context->bitcount += freespace << 3; len -= freespace; data += freespace; SHA2_SHA256_Transform(context, (sha2_word32*)context->buffer); } else { /* The buffer is not yet full */ MEMCPY_BCOPY(&context->buffer[usedspace], data, len); context->bitcount += len << 3; /* Clean up: */ usedspace = freespace = 0; return; } } while (len >= SHA2_SHA256_BLOCK_LENGTH) { /* Process as many complete blocks as we can */ SHA2_SHA256_Transform(context, (sha2_word32*)data); context->bitcount += SHA2_SHA256_BLOCK_LENGTH << 3; len -= SHA2_SHA256_BLOCK_LENGTH; data += SHA2_SHA256_BLOCK_LENGTH; } if (len > 0) { /* There's left-overs, so save 'em */ MEMCPY_BCOPY(context->buffer, data, len); context->bitcount += len << 3; } /* Clean up: */ usedspace = freespace = 0; } void SHA2_SHA256_Final(sha2_byte digest[], SHA2_SHA256_CTX* context) { sha2_word32 *d = (sha2_word32*)digest; unsigned int usedspace; /* Sanity check: */ assert(context != (SHA2_SHA256_CTX*)0); /* If no digest buffer is passed, we don't bother doing this: */ if (digest != (sha2_byte*)0) { usedspace = (context->bitcount >> 3) % SHA2_SHA256_BLOCK_LENGTH; #if BYTE_ORDER == LITTLE_ENDIAN /* Convert FROM host byte order */ REVERSE64(context->bitcount,context->bitcount); #endif if (usedspace > 0) { /* Begin padding with a 1 bit: */ context->buffer[usedspace++] = 0x80; if (usedspace <= SHA2_SHA256_SHORT_BLOCK_LENGTH) { /* Set-up for the last transform: */ MEMSET_BZERO(&context->buffer[usedspace], SHA2_SHA256_SHORT_BLOCK_LENGTH - usedspace); } else { if (usedspace < SHA2_SHA256_BLOCK_LENGTH) { MEMSET_BZERO(&context->buffer[usedspace], SHA2_SHA256_BLOCK_LENGTH - usedspace); } /* Do second-to-last transform: */ SHA2_SHA256_Transform(context, (sha2_word32*)context->buffer); /* And set-up for the last transform: */ MEMSET_BZERO(context->buffer, SHA2_SHA256_SHORT_BLOCK_LENGTH); } } else { /* Set-up for the last transform: */ MEMSET_BZERO(context->buffer, SHA2_SHA256_SHORT_BLOCK_LENGTH); /* Begin padding with a 1 bit: */ *context->buffer = 0x80; } /* Set the bit count: */ *(sha2_word64*)&context->buffer[SHA2_SHA256_SHORT_BLOCK_LENGTH] = context->bitcount; /* Final transform: */ SHA2_SHA256_Transform(context, (sha2_word32*)context->buffer); #if BYTE_ORDER == LITTLE_ENDIAN { /* Convert TO host byte order */ int j; for (j = 0; j < 8; j++) { REVERSE32(context->state[j],context->state[j]); *d++ = context->state[j]; } } #else MEMCPY_BCOPY(d, context->state, SHA2_SHA256_DIGEST_LENGTH); #endif } /* Clean up state data: */ MEMSET_BZERO(context, sizeof(SHA2_SHA256_CTX)); usedspace = 0; } char *SHA2_SHA256_End(SHA2_SHA256_CTX* context, char buffer[]) { sha2_byte digest[SHA2_SHA256_DIGEST_LENGTH], *d = digest; int i; /* Sanity check: */ assert(context != (SHA2_SHA256_CTX*)0); if (buffer != (char*)0) { SHA2_SHA256_Final(digest, context); for (i = 0; i < SHA2_SHA256_DIGEST_LENGTH; i++) { *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4]; *buffer++ = sha2_hex_digits[*d & 0x0f]; d++; } *buffer = (char)0; } else { MEMSET_BZERO(context, sizeof(SHA2_SHA256_CTX)); } MEMSET_BZERO(digest, SHA2_SHA256_DIGEST_LENGTH); return buffer; } char* SHA2_SHA256_Data(const sha2_byte* data, size_t len, char digest[SHA2_SHA256_DIGEST_STRING_LENGTH]) { SHA2_SHA256_CTX context; SHA2_SHA256_Init(&context); SHA2_SHA256_Update(&context, data, len); return SHA2_SHA256_End(&context, digest); } /*** SHA-512: *********************************************************/ void SHA2_SHA512_Init(SHA2_SHA512_CTX* context) { if (context == (SHA2_SHA512_CTX*)0) { return; } MEMCPY_BCOPY(context->state, sha512_initial_hash_value, SHA2_SHA512_DIGEST_LENGTH); MEMSET_BZERO(context->buffer, SHA2_SHA512_BLOCK_LENGTH); context->bitcount[0] = context->bitcount[1] = 0; } #ifdef SHA2_UNROLL_TRANSFORM /* Unrolled SHA-512 round macros: */ #if BYTE_ORDER == LITTLE_ENDIAN #define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \ REVERSE64(*data++, W512[j]); \ T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \ K512[j] + W512[j]; \ (d) += T1, \ (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)), \ j++ #else /* BYTE_ORDER == LITTLE_ENDIAN */ #define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \ T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \ K512[j] + (W512[j] = *data++); \ (d) += T1; \ (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \ j++ #endif /* BYTE_ORDER == LITTLE_ENDIAN */ #define ROUND512(a,b,c,d,e,f,g,h) \ s0 = W512[(j+1)&0x0f]; \ s0 = sigma0_512(s0); \ s1 = W512[(j+14)&0x0f]; \ s1 = sigma1_512(s1); \ T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + K512[j] + \ (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0); \ (d) += T1; \ (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \ j++ void SHA2_SHA512_Transform(SHA2_SHA512_CTX* context, const sha2_word64* data) { sha2_word64 a, b, c, d, e, f, g, h, s0, s1; sha2_word64 T1, *W512 = (sha2_word64*)context->buffer; int j; /* Initialize registers with the prev. intermediate value */ a = context->state[0]; b = context->state[1]; c = context->state[2]; d = context->state[3]; e = context->state[4]; f = context->state[5]; g = context->state[6]; h = context->state[7]; j = 0; do { ROUND512_0_TO_15(a,b,c,d,e,f,g,h); ROUND512_0_TO_15(h,a,b,c,d,e,f,g); ROUND512_0_TO_15(g,h,a,b,c,d,e,f); ROUND512_0_TO_15(f,g,h,a,b,c,d,e); ROUND512_0_TO_15(e,f,g,h,a,b,c,d); ROUND512_0_TO_15(d,e,f,g,h,a,b,c); ROUND512_0_TO_15(c,d,e,f,g,h,a,b); ROUND512_0_TO_15(b,c,d,e,f,g,h,a); } while (j < 16); /* Now for the remaining rounds up to 79: */ do { ROUND512(a,b,c,d,e,f,g,h); ROUND512(h,a,b,c,d,e,f,g); ROUND512(g,h,a,b,c,d,e,f); ROUND512(f,g,h,a,b,c,d,e); ROUND512(e,f,g,h,a,b,c,d); ROUND512(d,e,f,g,h,a,b,c); ROUND512(c,d,e,f,g,h,a,b); ROUND512(b,c,d,e,f,g,h,a); } while (j < 80); /* Compute the current intermediate hash value */ context->state[0] += a; context->state[1] += b; context->state[2] += c; context->state[3] += d; context->state[4] += e; context->state[5] += f; context->state[6] += g; context->state[7] += h; /* Clean up */ a = b = c = d = e = f = g = h = T1 = 0; } #else /* SHA2_UNROLL_TRANSFORM */ void SHA2_SHA512_Transform(SHA2_SHA512_CTX* context, const sha2_word64* data) { sha2_word64 a, b, c, d, e, f, g, h, s0, s1; sha2_word64 T1, T2, *W512 = (sha2_word64*)context->buffer; int j; /* Initialize registers with the prev. intermediate value */ a = context->state[0]; b = context->state[1]; c = context->state[2]; d = context->state[3]; e = context->state[4]; f = context->state[5]; g = context->state[6]; h = context->state[7]; j = 0; do { #if BYTE_ORDER == LITTLE_ENDIAN /* Convert TO host byte order */ REVERSE64(*data++, W512[j]); /* Apply the SHA-512 compression function to update a..h */ T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + W512[j]; #else /* BYTE_ORDER == LITTLE_ENDIAN */ /* Apply the SHA-512 compression function to update a..h with copy */ T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + (W512[j] = *data++); #endif /* BYTE_ORDER == LITTLE_ENDIAN */ T2 = Sigma0_512(a) + Maj(a, b, c); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; j++; } while (j < 16); do { /* Part of the message block expansion: */ s0 = W512[(j+1)&0x0f]; s0 = sigma0_512(s0); s1 = W512[(j+14)&0x0f]; s1 = sigma1_512(s1); /* Apply the SHA-512 compression function to update a..h */ T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0); T2 = Sigma0_512(a) + Maj(a, b, c); h = g; g = f; f = e; e = d + T1; d = c; c = b; b = a; a = T1 + T2; j++; } while (j < 80); /* Compute the current intermediate hash value */ context->state[0] += a; context->state[1] += b; context->state[2] += c; context->state[3] += d; context->state[4] += e; context->state[5] += f; context->state[6] += g; context->state[7] += h; /* Clean up */ a = b = c = d = e = f = g = h = T1 = T2 = 0; } #endif /* SHA2_UNROLL_TRANSFORM */ void SHA2_SHA512_Update(SHA2_SHA512_CTX* context, const sha2_byte *data, size_t len) { unsigned int freespace, usedspace; if (len == 0) { /* Calling with no data is valid - we do nothing */ return; } /* Sanity check: */ assert(context != (SHA2_SHA512_CTX*)0 && data != (sha2_byte*)0); usedspace = (context->bitcount[0] >> 3) % SHA2_SHA512_BLOCK_LENGTH; if (usedspace > 0) { /* Calculate how much free space is available in the buffer */ freespace = SHA2_SHA512_BLOCK_LENGTH - usedspace; if (len >= freespace) { /* Fill the buffer completely and process it */ MEMCPY_BCOPY(&context->buffer[usedspace], data, freespace); ADDINC128(context->bitcount, freespace << 3); len -= freespace; data += freespace; SHA2_SHA512_Transform(context, (sha2_word64*)context->buffer); } else { /* The buffer is not yet full */ MEMCPY_BCOPY(&context->buffer[usedspace], data, len); ADDINC128(context->bitcount, len << 3); /* Clean up: */ usedspace = freespace = 0; return; } } while (len >= SHA2_SHA512_BLOCK_LENGTH) { /* Process as many complete blocks as we can */ SHA2_SHA512_Transform(context, (sha2_word64*)data); ADDINC128(context->bitcount, SHA2_SHA512_BLOCK_LENGTH << 3); len -= SHA2_SHA512_BLOCK_LENGTH; data += SHA2_SHA512_BLOCK_LENGTH; } if (len > 0) { /* There's left-overs, so save 'em */ MEMCPY_BCOPY(context->buffer, data, len); ADDINC128(context->bitcount, len << 3); } /* Clean up: */ usedspace = freespace = 0; } void SHA2_SHA512_Last(SHA2_SHA512_CTX* context) { unsigned int usedspace; usedspace = (context->bitcount[0] >> 3) % SHA2_SHA512_BLOCK_LENGTH; #if BYTE_ORDER == LITTLE_ENDIAN /* Convert FROM host byte order */ REVERSE64(context->bitcount[0],context->bitcount[0]); REVERSE64(context->bitcount[1],context->bitcount[1]); #endif if (usedspace > 0) { /* Begin padding with a 1 bit: */ context->buffer[usedspace++] = 0x80; if (usedspace <= SHA2_SHA512_SHORT_BLOCK_LENGTH) { /* Set-up for the last transform: */ MEMSET_BZERO(&context->buffer[usedspace], SHA2_SHA512_SHORT_BLOCK_LENGTH - usedspace); } else { if (usedspace < SHA2_SHA512_BLOCK_LENGTH) { MEMSET_BZERO(&context->buffer[usedspace], SHA2_SHA512_BLOCK_LENGTH - usedspace); } /* Do second-to-last transform: */ SHA2_SHA512_Transform(context, (sha2_word64*)context->buffer); /* And set-up for the last transform: */ MEMSET_BZERO(context->buffer, SHA2_SHA512_BLOCK_LENGTH - 2); } } else { /* Prepare for final transform: */ MEMSET_BZERO(context->buffer, SHA2_SHA512_SHORT_BLOCK_LENGTH); /* Begin padding with a 1 bit: */ *context->buffer = 0x80; } /* Store the length of input data (in bits): */ *(sha2_word64*)&context->buffer[SHA2_SHA512_SHORT_BLOCK_LENGTH] = context->bitcount[1]; *(sha2_word64*)&context->buffer[SHA2_SHA512_SHORT_BLOCK_LENGTH+8] = context->bitcount[0]; /* Final transform: */ SHA2_SHA512_Transform(context, (sha2_word64*)context->buffer); } void SHA2_SHA512_Final(sha2_byte digest[], SHA2_SHA512_CTX* context) { sha2_word64 *d = (sha2_word64*)digest; /* Sanity check: */ assert(context != (SHA2_SHA512_CTX*)0); /* If no digest buffer is passed, we don't bother doing this: */ if (digest != (sha2_byte*)0) { SHA2_SHA512_Last(context); /* Save the hash data for output: */ #if BYTE_ORDER == LITTLE_ENDIAN { /* Convert TO host byte order */ int j; for (j = 0; j < 8; j++) { REVERSE64(context->state[j],context->state[j]); *d++ = context->state[j]; } } #else MEMCPY_BCOPY(d, context->state, SHA2_SHA512_DIGEST_LENGTH); #endif } /* Zero out state data */ MEMSET_BZERO(context, sizeof(SHA2_SHA512_CTX)); } char *SHA2_SHA512_End(SHA2_SHA512_CTX* context, char buffer[]) { sha2_byte digest[SHA2_SHA512_DIGEST_LENGTH], *d = digest; int i; /* Sanity check: */ assert(context != (SHA2_SHA512_CTX*)0); if (buffer != (char*)0) { SHA2_SHA512_Final(digest, context); for (i = 0; i < SHA2_SHA512_DIGEST_LENGTH; i++) { *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4]; *buffer++ = sha2_hex_digits[*d & 0x0f]; d++; } *buffer = (char)0; } else { MEMSET_BZERO(context, sizeof(SHA2_SHA512_CTX)); } MEMSET_BZERO(digest, SHA2_SHA512_DIGEST_LENGTH); return buffer; } char* SHA2_SHA512_Data(const sha2_byte* data, size_t len, char digest[SHA2_SHA512_DIGEST_STRING_LENGTH]) { SHA2_SHA512_CTX context; SHA2_SHA512_Init(&context); SHA2_SHA512_Update(&context, data, len); return SHA2_SHA512_End(&context, digest); } /*** SHA-384: *********************************************************/ void SHA2_SHA384_Init(SHA2_SHA384_CTX* context) { if (context == (SHA2_SHA384_CTX*)0) { return; } MEMCPY_BCOPY(context->state, sha384_initial_hash_value, SHA2_SHA512_DIGEST_LENGTH); MEMSET_BZERO(context->buffer, SHA2_SHA384_BLOCK_LENGTH); context->bitcount[0] = context->bitcount[1] = 0; } void SHA2_SHA384_Update(SHA2_SHA384_CTX* context, const sha2_byte* data, size_t len) { SHA2_SHA512_Update((SHA2_SHA512_CTX*)context, data, len); } void SHA2_SHA384_Final(sha2_byte digest[], SHA2_SHA384_CTX* context) { sha2_word64 *d = (sha2_word64*)digest; /* Sanity check: */ assert(context != (SHA2_SHA384_CTX*)0); /* If no digest buffer is passed, we don't bother doing this: */ if (digest != (sha2_byte*)0) { SHA2_SHA512_Last((SHA2_SHA512_CTX*)context); /* Save the hash data for output: */ #if BYTE_ORDER == LITTLE_ENDIAN { /* Convert TO host byte order */ int j; for (j = 0; j < 6; j++) { REVERSE64(context->state[j],context->state[j]); *d++ = context->state[j]; } } #else MEMCPY_BCOPY(d, context->state, SHA2_SHA384_DIGEST_LENGTH); #endif } /* Zero out state data */ MEMSET_BZERO(context, sizeof(SHA2_SHA384_CTX)); } char *SHA2_SHA384_End(SHA2_SHA384_CTX* context, char buffer[]) { sha2_byte digest[SHA2_SHA384_DIGEST_LENGTH], *d = digest; int i; /* Sanity check: */ assert(context != (SHA2_SHA384_CTX*)0); if (buffer != (char*)0) { SHA2_SHA384_Final(digest, context); for (i = 0; i < SHA2_SHA384_DIGEST_LENGTH; i++) { *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4]; *buffer++ = sha2_hex_digits[*d & 0x0f]; d++; } *buffer = (char)0; } else { MEMSET_BZERO(context, sizeof(SHA2_SHA384_CTX)); } MEMSET_BZERO(digest, SHA2_SHA384_DIGEST_LENGTH); return buffer; } char* SHA2_SHA384_Data(const sha2_byte* data, size_t len, char digest[SHA2_SHA384_DIGEST_STRING_LENGTH]) { SHA2_SHA384_CTX context; SHA2_SHA384_Init(&context); SHA2_SHA384_Update(&context, data, len); return SHA2_SHA384_End(&context, digest); } hashrat-1.6.1/libUseful-2.1/sha2.h0000644000175000017550000001545412470734537017205 0ustar metacosm89metacosm89/* * FILE: sha2.h * AUTHOR: Aaron D. Gifford - http://www.aarongifford.com/ * * Copyright (c) 2000-2001, Aaron D. Gifford * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the copyright holder nor the names of contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $Id: sha2.h,v 1.1 2001/11/08 00:02:01 adg Exp adg $ */ #ifndef __SHA2_H__ #define __SHA2_H__ #ifdef __cplusplus extern "C" { #endif /* * Import u_intXX_t size_t type definitions from system headers. You * may need to change this, or define these things yourself in this * file. */ #include #ifdef SHA2_USE_INTTYPES_H #include #endif /* SHA2_USE_INTTYPES_H */ /*** SHA-256/384/512 Various Length Definitions ***********************/ #define SHA2_SHA256_BLOCK_LENGTH 64 #define SHA2_SHA256_DIGEST_LENGTH 32 #define SHA2_SHA256_DIGEST_STRING_LENGTH (SHA2_SHA256_DIGEST_LENGTH * 2 + 1) #define SHA2_SHA384_BLOCK_LENGTH 128 #define SHA2_SHA384_DIGEST_LENGTH 48 #define SHA2_SHA384_DIGEST_STRING_LENGTH (SHA2_SHA384_DIGEST_LENGTH * 2 + 1) #define SHA2_SHA512_BLOCK_LENGTH 128 #define SHA2_SHA512_DIGEST_LENGTH 64 #define SHA2_SHA512_DIGEST_STRING_LENGTH (SHA2_SHA512_DIGEST_LENGTH * 2 + 1) /*** SHA-256/384/512 Context Structures *******************************/ /* NOTE: If your architecture does not define either u_intXX_t types or * uintXX_t (from inttypes.h), you may need to define things by hand * for your system: */ #if 0 typedef unsigned char u_int8_t; /* 1-byte (8-bits) */ typedef unsigned int u_int32_t; /* 4-bytes (32-bits) */ typedef unsigned long long u_int64_t; /* 8-bytes (64-bits) */ #endif /* * Most BSD systems already define u_intXX_t types, as does Linux. * Some systems, however, like Compaq's Tru64 Unix instead can use * uintXX_t types defined by very recent ANSI C standards and included * in the file: * * #include * * If you choose to use then please define: * * #define SHA2_USE_INTTYPES_H * * Or on the command line during compile: * * cc -DSHA2_USE_INTTYPES_H ... */ #ifdef SHA2_USE_INTTYPES_H typedef struct _SHA2_SHA256_CTX { uint32_t state[8]; uint64_t bitcount; uint8_t buffer[SHA2_SHA256_BLOCK_LENGTH]; } SHA2_SHA256_CTX; typedef struct _SHA2_SHA512_CTX { uint64_t state[8]; uint64_t bitcount[2]; uint8_t buffer[SHA2_SHA512_BLOCK_LENGTH]; } SHA2_SHA512_CTX; #else /* SHA2_USE_INTTYPES_H */ typedef struct _SHA2_SHA256_CTX { u_int32_t state[8]; u_int64_t bitcount; u_int8_t buffer[SHA2_SHA256_BLOCK_LENGTH]; } SHA2_SHA256_CTX; typedef struct _SHA2_SHA512_CTX { u_int64_t state[8]; u_int64_t bitcount[2]; u_int8_t buffer[SHA2_SHA512_BLOCK_LENGTH]; } SHA2_SHA512_CTX; #endif /* SHA2_USE_INTTYPES_H */ typedef SHA2_SHA512_CTX SHA2_SHA384_CTX; /*** SHA-256/384/512 Function Prototypes ******************************/ #ifndef NOPROTO #ifdef SHA2_USE_INTTYPES_H void SHA2_SHA256_Init(SHA2_SHA256_CTX *); void SHA2_SHA256_Update(SHA2_SHA256_CTX*, const uint8_t*, size_t); void SHA2_SHA256_Final(uint8_t[SHA2_SHA256_DIGEST_LENGTH], SHA2_SHA256_CTX*); char* SHA2_SHA256_End(SHA2_SHA256_CTX*, char[SHA2_SHA256_DIGEST_STRING_LENGTH]); char* SHA2_SHA256_Data(const uint8_t*, size_t, char[SHA2_SHA256_DIGEST_STRING_LENGTH]); void SHA2_SHA384_Init(SHA2_SHA384_CTX*); void SHA2_SHA384_Update(SHA2_SHA384_CTX*, const uint8_t*, size_t); void SHA2_SHA384_Final(uint8_t[SHA2_SHA384_DIGEST_LENGTH], SHA2_SHA384_CTX*); char* SHA2_SHA384_End(SHA2_SHA384_CTX*, char[SHA2_SHA384_DIGEST_STRING_LENGTH]); char* SHA2_SHA384_Data(const uint8_t*, size_t, char[SHA2_SHA384_DIGEST_STRING_LENGTH]); void SHA2_SHA512_Init(SHA2_SHA512_CTX*); void SHA2_SHA512_Update(SHA2_SHA512_CTX*, const uint8_t*, size_t); void SHA2_SHA512_Final(uint8_t[SHA2_SHA512_DIGEST_LENGTH], SHA2_SHA512_CTX*); char* SHA2_SHA512_End(SHA2_SHA512_CTX*, char[SHA2_SHA512_DIGEST_STRING_LENGTH]); char* SHA2_SHA512_Data(const uint8_t*, size_t, char[SHA2_SHA512_DIGEST_STRING_LENGTH]); #else /* SHA2_USE_INTTYPES_H */ void SHA2_SHA256_Init(SHA2_SHA256_CTX *); void SHA2_SHA256_Update(SHA2_SHA256_CTX*, const u_int8_t*, size_t); void SHA2_SHA256_Final(u_int8_t[SHA2_SHA256_DIGEST_LENGTH], SHA2_SHA256_CTX*); char* SHA2_SHA256_End(SHA2_SHA256_CTX*, char[SHA2_SHA256_DIGEST_STRING_LENGTH]); char* SHA2_SHA256_Data(const u_int8_t*, size_t, char[SHA2_SHA256_DIGEST_STRING_LENGTH]); void SHA2_SHA384_Init(SHA2_SHA384_CTX*); void SHA2_SHA384_Update(SHA2_SHA384_CTX*, const u_int8_t*, size_t); void SHA2_SHA384_Final(u_int8_t[SHA2_SHA384_DIGEST_LENGTH], SHA2_SHA384_CTX*); char* SHA2_SHA384_End(SHA2_SHA384_CTX*, char[SHA2_SHA384_DIGEST_STRING_LENGTH]); char* SHA2_SHA384_Data(const u_int8_t*, size_t, char[SHA2_SHA384_DIGEST_STRING_LENGTH]); void SHA2_SHA512_Init(SHA2_SHA512_CTX*); void SHA2_SHA512_Update(SHA2_SHA512_CTX*, const u_int8_t*, size_t); void SHA2_SHA512_Final(u_int8_t[SHA2_SHA512_DIGEST_LENGTH], SHA2_SHA512_CTX*); char* SHA2_SHA512_End(SHA2_SHA512_CTX*, char[SHA2_SHA512_DIGEST_STRING_LENGTH]); char* SHA2_SHA512_Data(const u_int8_t*, size_t, char[SHA2_SHA512_DIGEST_STRING_LENGTH]); #endif /* SHA2_USE_INTTYPES_H */ #else /* NOPROTO */ void SHA2_SHA256_Init(); void SHA2_SHA256_Update(); void SHA2_SHA256_Final(); char* SHA2_SHA256_End(); char* SHA2_SHA256_Data(); void SHA2_SHA384_Init(); void SHA2_SHA384_Update(); void SHA2_SHA384_Final(); char* SHA2_SHA384_End(); char* SHA2_SHA384_Data(); void SHA512_Init(); void SHA512_Update(); void SHA512_Final(); char* SHA512_End(); char* SHA512_Data(); #endif /* NOPROTO */ #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __SHA2_H__ */ hashrat-1.6.1/libUseful-2.1/socket.c0000644000175000017550000003544012470734537017630 0ustar metacosm89metacosm89#include "socket.h" #include "ConnectionChain.h" #include #include #include #include #include int IsIP4Address(const char *Str) { const char *ptr; int dot_count=0; int AllowDot=FALSE; if (! Str) return(FALSE); for (ptr=Str; *ptr != '\0'; ptr++) { if (*ptr == '.') { if (! AllowDot) return(FALSE); dot_count++; AllowDot=FALSE; } else { if (! isdigit(*ptr)) return(FALSE); AllowDot=TRUE; } } if (dot_count != 3) return(FALSE); return(TRUE); } int IsIP6Address(const char *Str) { const char *ptr; const char *IP6CHARS="0123456789abcdefABCDEF:%"; if (!Str) return(FALSE); for (ptr=Str; *ptr != '\0'; ptr++) { if (*ptr=='%') break; if (! strchr(IP6CHARS,*ptr)) return(FALSE); } return(TRUE); } /* This is a simple function to decide if a string is an IP address as */ /* opposed to a host/domain name. */ int IsIPAddress(const char *Str) { int len,count; len=strlen(Str); if (len <1) return(FALSE); for (count=0; count < len; count++) if ((! isdigit(Str[count])) && (Str[count] !='.')) return(FALSE); return(TRUE); } int IsSockConnected(int sock) { struct sockaddr_in sa; socklen_t salen; int result; if (sock==-1) return(FALSE); salen=sizeof(sa); result=getpeername(sock,(struct sockaddr *) &sa, &salen); if (result==0) return(TRUE); if (errno==ENOTCONN) return(SOCK_CONNECTING); return(FALSE); } const char *GetInterfaceIP(const char *Interface) { int fd, result; struct ifreq ifr; fd = socket(AF_INET, SOCK_DGRAM, 0); if (fd==-1) return(""); ifr.ifr_addr.sa_family = AF_INET; strncpy(ifr.ifr_name, Interface, IFNAMSIZ-1); result=ioctl(fd, SIOCGIFADDR, &ifr); if (result==-1) return(""); close(fd); return(inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr)); } #ifdef USE_INET6 int InitServerSock(int Type, const char *Address, int Port) { int sock; struct sockaddr_storage sa; struct sockaddr_in *sa4; struct sockaddr_in6 *sa6; socklen_t salen; int result; char *p_Addr=NULL, *ptr; if (StrLen(Address)) { if (IsIP4Address(Address)) { sa.ss_family=AF_INET; p_Addr=Address; } else if (IsIP6Address(Address)) { sa.ss_family=AF_INET6; p_Addr=Address; } else { sa.ss_family=AF_INET; p_Addr=GetInterfaceIP(Address); } } else sa.ss_family=AF_INET; if (sa.ss_family==AF_INET) { sa4=(struct sockaddr_in *) &sa; if (StrLen(p_Addr)) sa4->sin_addr.s_addr=StrtoIP(p_Addr); else sa4->sin_addr.s_addr=INADDR_ANY; sa4->sin_port=htons(Port); sa4->sin_family=AF_INET; salen=sizeof(struct sockaddr_in); } else { sa6=(struct sockaddr_in6 *) &sa; sa6->sin6_port=htons(Port); sa6->sin6_family=AF_INET6; if (StrLen(p_Addr)) { ptr=strchr(p_Addr,'%'); if (ptr) { sa6->sin6_scope_id=if_nametoindex(ptr+1); *ptr='\0'; } inet_pton(AF_INET6, p_Addr, &(sa6->sin6_addr)); } else sa6->sin6_addr=in6addr_any; salen=sizeof(struct sockaddr_in6); } if (Type==0) Type=SOCK_STREAM; sock=socket(sa.ss_family,Type,0); if (sock <0) return(-1); //No reason to pass server/listen sockets across an exec fcntl(sock, F_SETFD, FD_CLOEXEC); result=1; setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&result,sizeof(result)); result=bind(sock,(struct sockaddr *) &sa, salen); if ((result==0) && (Type==SOCK_STREAM)) { result=listen(sock,10); } if (result==0) return(sock); else { close(sock); return(-1); } } #else int InitServerSock(int Type, const char *Address, int Port) { struct sockaddr_in sa; int result; const char *ptr; socklen_t salen; int sock; sa.sin_port=htons(Port); sa.sin_family=AF_INET; if (StrLen(Address) > 0) { if (IsIP6Address(Address)) return(-1); if (IsIP4Address(Address)) ptr=Address; else ptr=GetInterfaceIP(Address); sa.sin_addr.s_addr=StrtoIP(ptr); } else sa.sin_addr.s_addr=INADDR_ANY; if (Type==0) Type=SOCK_STREAM; sock=socket(AF_INET, Type,0); if (sock <0) return(-1); //No reason to pass server/listen sockets across an exec fcntl(sock, F_SETFD, FD_CLOEXEC); result=1; salen=sizeof(result); setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&result,salen); salen=sizeof(struct sockaddr_in); result=bind(sock,(struct sockaddr *) &sa, salen); if ((result==0) && (Type==SOCK_STREAM)) { result=listen(sock,10); } if (result==0) return(sock); else { close(sock); return(-1); } } #endif int InitUnixServerSock(int Type, const char *Path) { int sock; struct sockaddr_un sa; socklen_t salen; int result; if (Type==0) Type=SOCK_STREAM; sock=socket(AF_UNIX, Type, 0); if (sock <0) return(-1); //No reason to pass server/listen sockets across an exec fcntl(sock, F_SETFD, FD_CLOEXEC); result=1; salen=sizeof(result); strcpy(sa.sun_path,Path); sa.sun_family=AF_UNIX; salen=sizeof(struct sockaddr_un); result=bind(sock,(struct sockaddr *) &sa, salen); if ((result==0) && (Type==SOCK_STREAM)) { result=listen(sock,10); } if (result==0) return(sock); else { close(sock); return(-1); } } int TCPServerSockAccept(int ServerSock, char **Addr) { struct sockaddr_storage sa; socklen_t salen; int sock; salen=sizeof(sa); sock=accept(ServerSock,(struct sockaddr *) &sa,&salen); if (Addr) { *Addr=SetStrLen(*Addr,NI_MAXHOST); getnameinfo((struct sockaddr *) &sa, salen, *Addr, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); } return(sock); } int UnixServerSockAccept(int ServerSock) { struct sockaddr_un sa; socklen_t salen; int sock; salen=sizeof(sa); sock=accept(ServerSock,(struct sockaddr *) &sa,&salen); return(sock); } #ifdef USE_INET6 int GetSockDetails(int sock, char **LocalAddress, int *LocalPort, char **RemoteAddress, int *RemotePort) { socklen_t salen; int result; struct sockaddr_storage sa; char *Tempstr=NULL; *LocalPort=0; *RemotePort=0; *LocalAddress=CopyStr(*LocalAddress,""); *RemoteAddress=CopyStr(*RemoteAddress,""); salen=sizeof(struct sockaddr_storage); result=getsockname(sock, (struct sockaddr *) &sa, &salen); if (result==0) { *LocalAddress=SetStrLen(*LocalAddress,NI_MAXHOST); Tempstr=SetStrLen(Tempstr,NI_MAXSERV); getnameinfo((struct sockaddr *) &sa, salen, *LocalAddress, NI_MAXHOST, Tempstr, NI_MAXSERV, NI_NUMERICHOST|NI_NUMERICSERV); *LocalPort=atoi(Tempstr); //Set Address to be the same as control sock, as it might not be INADDR_ANY result=getpeername(sock, (struct sockaddr *) &sa, &salen); if (result==0) { *RemoteAddress=SetStrLen(*RemoteAddress,NI_MAXHOST); Tempstr=SetStrLen(Tempstr,NI_MAXSERV); getnameinfo((struct sockaddr *) &sa, salen, *RemoteAddress, NI_MAXHOST, Tempstr, NI_MAXSERV, NI_NUMERICHOST|NI_NUMERICSERV); *RemotePort=atoi(Tempstr); } //We've got the local sock, so lets still call it a success result=0; } DestroyString(Tempstr); if (result==0) return(TRUE); return(FALSE); } #else int GetSockDetails(int sock, char **LocalAddress, int *LocalPort, char **RemoteAddress, int *RemotePort) { socklen_t salen; int result; struct sockaddr_in sa; *LocalPort=0; *RemotePort=0; *LocalAddress=CopyStr(*LocalAddress,""); *RemoteAddress=CopyStr(*RemoteAddress,""); salen=sizeof(struct sockaddr_in); result=getsockname(sock, (struct sockaddr *) &sa, &salen); if (result==0) { *LocalAddress=CopyStr(*LocalAddress,IPtoStr(sa.sin_addr.s_addr)); *LocalPort=ntohs(sa.sin_port); //Set Address to be the same as control sock, as it might not be INADDR_ANY result=getpeername(sock, (struct sockaddr *) &sa, &salen); if (result==0) { *RemoteAddress=CopyStr(*RemoteAddress,IPtoStr(sa.sin_addr.s_addr)); *RemotePort=sa.sin_port; } //We've got the local sock, so lets still call it a success result=0; } if (result==0) return(TRUE); return(FALSE); } #endif /* Users will probably only use this function if they want to reconnect */ /* a broken connection, or reuse a socket for multiple connections, hence */ /* the name... */ int ReconnectSock(int sock, const char *Host, int Port, int Flags) { socklen_t salen; int result; struct sockaddr_in sa; struct hostent *hostdata; sa.sin_family=AF_INET; sa.sin_port=htons(Port); if (IsIP4Address(Host)) { inet_aton(Host, (struct in_addr *) &sa.sin_addr); } else { hostdata=gethostbyname(Host); if (!hostdata) { return(-1); } sa.sin_addr=*(struct in_addr *) *hostdata->h_addr_list; } salen=sizeof(sa); if (Flags & CONNECT_NONBLOCK) { fcntl(sock,F_SETFL,O_NONBLOCK); } result=connect(sock,(struct sockaddr *)&sa, salen); if (result==0) result=TRUE; if ((result==-1) && (Flags & CONNECT_NONBLOCK) && (errno == EINPROGRESS)) result=FALSE; return(result); } int ConnectToHost(const char *Host, int Port,int Flags) { int sock, result; sock=socket(AF_INET,SOCK_STREAM,0); if (sock <0) return(-1); result=ReconnectSock(sock,Host,Port,Flags); if (result==-1) { close(sock); return(-1); } return(sock); } int CheckForTerm(DownloadContext *CTX, char inchar) { if (inchar == CTX->TermStr[CTX->TermPos]) { CTX->TermPos++; if (CTX->TermPos >=strlen(CTX->TermStr)) { CTX->TermPos=0; return(TRUE); } } else { if (CTX->TermPos >0) { STREAMWriteBytes(CTX->Output, CTX->TermStr,CTX->TermPos); CTX->TermPos=0; return(CheckForTerm(CTX,inchar)); } } return(FALSE); } int ProcessIncommingBytes(DownloadContext *CTX) { int inchar, FoundTerm=FALSE; inchar=STREAMReadChar(CTX->Input); if (inchar==EOF) return(TRUE); FoundTerm=CheckForTerm(CTX,(char) inchar); while ((inchar !=EOF) && (! FoundTerm)) { if (CTX->TermPos==0) STREAMWriteChar(CTX->Output, (char) inchar); inchar=STREAMReadChar(CTX->Input); FoundTerm=CheckForTerm(CTX, (char) inchar); } if (inchar==EOF) return(TRUE); if (FoundTerm) return(TRUE); return(FALSE); } int DownloadToTermStr2(STREAM *Connection, STREAM *SaveFile, char *TermStr) { DownloadContext CTX; CTX.TermStr=CopyStr(NULL,TermStr); CTX.Input=Connection; CTX.Output=SaveFile; CTX.TermPos=0; while(ProcessIncommingBytes(&CTX) !=TRUE); DestroyString(CTX.TermStr); return(TRUE); } int DownloadToDot(STREAM *Connection, STREAM *SaveFile) { return(DownloadToTermStr2(Connection,SaveFile,"\r\n.\r\n")); } int DownloadToTermStr(STREAM *Connection, STREAM *SaveFile, char *TermStr) { char *Tempstr=NULL; Tempstr=STREAMReadLine(Tempstr,Connection); while (Tempstr) { if (strcmp(Tempstr,TermStr)==0) { break; } STREAMWriteLine(Tempstr,SaveFile); Tempstr=STREAMReadLine(Tempstr,Connection); } return(TRUE); } char *LookupHostIP(const char *Host) { struct hostent *hostdata; hostdata=gethostbyname(Host); if (!hostdata) { return(NULL); } //inet_ntoa shouldn't need this cast to 'char *', but it emitts a warning //without it return((char *) inet_ntoa(*(struct in_addr *) *hostdata->h_addr_list)); } char *GetRemoteIP(int sock) { struct sockaddr_in sa; socklen_t salen; int result; salen=sizeof(struct sockaddr_in); result=getpeername(sock,(struct sockaddr *) &sa, &salen); if (result==-1) { if (errno==ENOTSOCK) return("127.0.0.1"); else return("0.0.0.0"); } return((char *) inet_ntoa(sa.sin_addr)); } char *IPStrToHostName(const char *IPAddr) { struct sockaddr_in sa; struct hostent *hostdata=NULL; inet_aton(IPAddr,& sa.sin_addr); hostdata=gethostbyaddr(&sa.sin_addr.s_addr,sizeof((sa.sin_addr.s_addr)),AF_INET); if (hostdata) return(hostdata->h_name); else return(""); } char *IPtoStr(unsigned long Address) { struct sockaddr_in sa; sa.sin_addr.s_addr=Address; return((char *) inet_ntoa(sa.sin_addr)); } unsigned long StrtoIP(const char *Str) { struct sockaddr_in sa; if (inet_aton(Str,&sa.sin_addr)) return(sa.sin_addr.s_addr); return(0); } int STREAMIsConnected(STREAM *S) { int result=FALSE; if (! S) return(FALSE); result=IsSockConnected(S->in_fd); if (result==TRUE) { if (S->State & SS_CONNECTING) { S->State |= SS_CONNECTED; S->State &= (~SS_CONNECTING); } } if ((result==SOCK_CONNECTING) && (! (S->State & SS_CONNECTING))) result=FALSE; return(result); } int STREAMDoPostConnect(STREAM *S, int Flags) { int result=FALSE; char *ptr; struct timeval tv; if (! S) return(FALSE); if ((S->in_fd > -1) && (S->Timeout > 0) ) { tv.tv_sec=S->Timeout; tv.tv_usec=0; if (FDSelect(S->in_fd, SELECT_WRITE, &tv) != SELECT_WRITE) { close(S->in_fd); S->in_fd=-1; S->out_fd=-1; } else if (! (Flags & CONNECT_NONBLOCK)) STREAMSetFlags(S, 0, SF_NONBLOCK); } if (S->in_fd > -1) { S->Type=STREAM_TYPE_TCP; result=TRUE; STREAMSetFlushType(S,FLUSH_LINE,0,0); //if (Flags & CONNECT_SOCKS_PROXY) result=DoSocksProxyTunnel(S); if (Flags & CONNECT_SSL) DoSSLClientNegotiation(S, Flags); ptr=GetRemoteIP(S->in_fd); if (ptr) STREAMSetValue(S,"PeerIP",ptr); } return(result); } int STREAMConnectToHost(STREAM *S, const char *DesiredHost, int DesiredPort,int Flags) { ListNode *Curr; char *Token=NULL; int result=FALSE; int HopNo=0, val=0; ListNode *LastHop=NULL; S->Path=FormatStr(S->Path,"tcp:%s:%d",DesiredHost,DesiredPort); //Find the last hop, used to decide what ssh command to use Curr=ListGetNext(S->Values); while (Curr) { GetToken(Curr->Tag,":",&Token,0); if (strcasecmp(Token,"ConnectHop")==0) LastHop=Curr; Curr=ListGetNext(Curr); } STREAMSetFlushType(S,FLUSH_LINE,0,0); Curr=ListGetNext(S->Values); while (Curr) { GetToken(Curr->Tag,":",&Token,0); if (strcasecmp(Token,"ConnectHop")==0) result=STREAMProcessConnectHop(S, (char *) Curr->Item,Curr==LastHop); HopNo++; if (! result) break; Curr=ListGetNext(Curr); } //If we're not handling the connection through 'Connect hops' then //just connect to host if ((HopNo==0) && StrLen(DesiredHost)) { if (Flags & CONNECT_NONBLOCK) S->Flags |= SF_NONBLOCK; val=Flags; //STREAMDoPostConnect handles this if (S->Timeout > 0) val |= CONNECT_NONBLOCK; S->in_fd=ConnectToHost(DesiredHost,DesiredPort,val); S->out_fd=S->in_fd; if (S->in_fd > -1) result=TRUE; } if (result==TRUE) { if (Flags & CONNECT_NONBLOCK) { S->State |=SS_CONNECTING; S->Flags |=SF_NONBLOCK; } else { S->State |=SS_CONNECTED; result=STREAMDoPostConnect(S, Flags); } } return(result); } int OpenUDPSock(int Port) { int result; struct sockaddr_in addr; int fd; addr.sin_family=AF_INET; // addr.sin_addr.s_addr=Interface; addr.sin_addr.s_addr=INADDR_ANY; addr.sin_port=htons(Port); fd=socket(AF_INET, SOCK_DGRAM,0); result=bind(fd,(struct sockaddr *) &addr, sizeof(addr)); if (result !=0) { close(fd); return(-1); } return(fd); } int STREAMSendDgram(STREAM *S, const char *Host, int Port, char *Bytes, int len) { struct sockaddr_in sa; socklen_t salen; struct hostent *hostdata; sa.sin_port=htons(Port); sa.sin_family=AF_INET; inet_aton(Host,& sa.sin_addr); salen=sizeof(sa); if (IsIP4Address(Host)) { inet_aton(Host, (struct in_addr *) &sa.sin_addr); } else { hostdata=gethostbyname(Host); if (!hostdata) { return(-1); } sa.sin_addr=*(struct in_addr *) *hostdata->h_addr_list; } return(sendto(S->out_fd,Bytes,len,0,(struct sockaddr *) &sa,salen)); } STREAM *STREAMOpenUDP(int Port,int NonBlock) { int fd; STREAM *Stream; fd=OpenUDPSock(Port); if (fd <0) return(NULL); Stream=STREAMFromFD(fd); Stream->Path=FormatStr(Stream->Path,"udp::%d",Port); Stream->Type=STREAM_TYPE_UDP; return(Stream); } hashrat-1.6.1/libUseful-2.1/socket.h0000644000175000017550000000400112470734537017622 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_SOCK #define LIBUSEFUL_SOCK #include "includes.h" #define CONNECT_NONBLOCK 1 #define CONNECT_SSL 2 #define CONNECT_HTTP_PROXY 4 #define CONNECT_SOCKS_PROXY 8 #define SOCK_CONNECTED 1 #define SOCK_CONNECTING -1 #ifdef __cplusplus extern "C" { #endif int IsIP4Address(const char *Str); int IsIP6Address(const char *Str); int IsIPAddress(const char *); const char *GetInterfaceIP(const char *Interface); /* Server Socket Funcs*/ int InitServerSock(int Type, const char *Address, int Port); int InitUnixServerSock(int Type, const char *Path); int TCPServerSockAccept(int ServerSock,char **Addr); int UnixServerSockAccept(int ServerSock); int GetSockDetails(int fd, char **LocalAddress, int *LocalPort, char **RemoteAddress, int *RemotePort); /* Client Socket Funcs*/ int IsSockConnected(int sock); int ReconnectSock(int sock, const char *Host, int Port, int Flags); int ConnectToHost(const char *Host, int Port, int Flags); /* int CheckForData(int sock); */ int SendText(int sock, char *Text); int ReadText(int sock, char *Buffer, int MaxLen); int ReadToCR(int fd, char *Buffer, int MaxLen); STREAM *STREAMOpenUDP(int Port,int NonBlock); int STREAMSendDgram(STREAM *S, const char *Host, int Port, char *Bytes, int len); int STREAMConnectToHost(STREAM *S, const char *Host, int Port, int Flags); int STREAMIsConnected(STREAM *S); int DoPostConnect(STREAM *S, int Flags); /* Stuff relating to standard inet download procedure (until \r\n.\r\n) */ typedef struct { STREAM *Input; STREAM *Output; char *TermStr; int TermPos; } DownloadContext; int ProcessIncommingBytes(DownloadContext *); //int DownloadToDot(int sock, FILE *SaveFile); int DownloadToDot(STREAM *Connection, STREAM *SaveFile); int DownloadToTermStr(STREAM *Connection, STREAM *SaveFile, char *TermStr); /* IP Address and host lookup functions */ char *GetRemoteIP(int sock); char *LookupHostIP(const char *Host); char *IPStrToHostName(const char *); char *IPtoStr(unsigned long); unsigned long StrtoIP(const char *); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/sound.c0000644000175000017550000002653512470734537017475 0ustar metacosm89metacosm89#include #include #include "sound.h" #include "file.h" #include "string.h" #include "defines.h" #include "includes.h" typedef struct { uint32_t DataStart; uint32_t DataSize; uint32_t Format; uint32_t SampleRate; uint32_t Channels; } AUHeader; typedef struct { char RIFF[4]; uint32_t FileSize; char Format[4]; char Block[4]; uint32_t ChunkSize; uint16_t AudioFormat; uint16_t Channels; uint32_t SampleRate; uint32_t ByteRate; uint16_t BlockAlign; uint16_t BitsPerSample; char DataHeader[4]; uint32_t DataSize; } WAVHeader; const char *VolTypeStrings[]={"master","pcm","cd","mic","line","video","phonein","phoneout","all",NULL}; typedef enum {VOL_MASTER,VOL_PCM,VOL_CD,VOL_MIC,VOL_LINE1,VOL_VIDEO,VOL_PHONEIN,VOL_PHONEOUT,VOL_ALL} TVOLUME_CHANNELS; #define SAMPLE_SIGNED 1 int SoundReformat(char **Out, char *In, int Len, TAudioInfo *AI) { int len, i; len=Len; //Expand mono to both channels if (AI->Channels==1) { len=Len*2; *Out=SetStrLen(*Out, Len*2); for (i=0; i < Len; i++) { (*Out)[i*2]=In[i]; (*Out)[i*2+1]=In[i]; } } return(len); } TAudioInfo *AudioInfoCreate(unsigned int Format, unsigned int Channels, unsigned int SampleRate, unsigned int SampleSize, unsigned int DataSize) { TAudioInfo *AI; AI=(TAudioInfo *) calloc(1,sizeof(TAudioInfo)); AI->Format=Format; AI->Channels=Channels; AI->SampleRate=SampleRate; AI->SampleSize=SampleSize; AI->DataSize=DataSize; return(AI); } /* ------------------------ SOUND FILE FORMATS --------------- */ TAudioInfo *SoundReadWAV(STREAM *S) { WAVHeader Wav; TAudioInfo *AudioInfo; AudioInfo=(TAudioInfo *) calloc(1,sizeof(TAudioInfo)); STREAMReadBytes(S,(char *) &Wav,sizeof(WAVHeader)); AudioInfo->Channels=Wav.Channels; AudioInfo->SampleRate=Wav.SampleRate; AudioInfo->DataSize=Wav.DataSize; if (Wav.BitsPerSample==16) { AudioInfo->SampleSize=2; AudioInfo->Format=AFMT_S16_LE; } else { AudioInfo->SampleSize=1; AudioInfo->Format=AFMT_U8; } return(AudioInfo); } void SoundWriteWAVHeader(STREAM *S, TAudioInfo *AI) { WAVHeader WavHead; memcpy(WavHead.RIFF,"RIFF",4); memcpy(WavHead.Format,"WAVE",4); memcpy(WavHead.Block,"fmt ",4); WavHead.FileSize=AI->DataSize+44; WavHead.AudioFormat=1; WavHead.Channels=AI->Channels; WavHead.SampleRate=AI->SampleRate; WavHead.BlockAlign=4; WavHead.ByteRate=WavHead.SampleRate * WavHead.BlockAlign; WavHead.BitsPerSample=AI->SampleSize * 8; WavHead.ChunkSize=WavHead.BitsPerSample; memcpy(WavHead.DataHeader,"data",4); WavHead.DataSize=AI->DataSize; STREAMWriteBytes(S,(char *) &WavHead,sizeof(WAVHeader)); } TAudioInfo *SoundReadAU(STREAM *S) { AUHeader Header; TAudioInfo *AudioInfo; AudioInfo=(TAudioInfo *) calloc(1,sizeof(TAudioInfo)); STREAMReadBytes(S,(char *) &Header,sizeof(AUHeader)); //AU uses big endian Header.DataSize=htonl(Header.DataSize); Header.DataStart=htonl(Header.DataStart); Header.Channels=htonl(Header.Channels); Header.SampleRate=htonl(Header.SampleRate); Header.Format=htonl(Header.Format); AudioInfo->Channels=Header.Channels; AudioInfo->SampleRate=Header.SampleRate; AudioInfo->DataSize=Header.DataSize; switch(Header.Format) { case 1: AudioInfo->Format=AFMT_MU_LAW; break; case 2: AudioInfo->Format=AFMT_S8; break; case 3: AudioInfo->Format=AFMT_S16_BE; break; } STREAMSeek(S,(double) Header.DataStart,SEEK_SET); return(AudioInfo); } TAudioInfo *SoundOpenFile(char *FilePath) { TAudioInfo *AudioInfo=NULL; char *FourCharacter; STREAM *S; S=STREAMOpenFile(FilePath,SF_RDONLY); if (! S) return(NULL); FourCharacter=calloc(4, sizeof(char)); STREAMReadBytes(S,FourCharacter,4); STREAMSeek(S,0,SEEK_SET); if (strcmp(FourCharacter,".snd")==0) AudioInfo=SoundReadAU(S); else if (strcmp(FourCharacter,"RIFF")==0) AudioInfo=SoundReadWAV(S); free(FourCharacter); if (! AudioInfo) { STREAMClose(S); return(NULL); } AudioInfo->S=S; return(AudioInfo); } #ifdef HAVE_OSS #include /* ------------------------ OSS Functions -------------------- */ int OpenOSSDevice(char *Dev, int Type, TAudioInfo *Info) { int fd; int val; if (Type==OUTPUT) val=O_WRONLY; else val=O_RDONLY; if (StrLen(Dev)==0) fd=open("/dev/dsp",val); else fd=open(Dev,val); if (fd==-1) return(-1); if (fd==-1) return(-1); /* Tell the sound card that the sound about to be played is stereo. 0=mono 1=stereo */ val=Info->Channels-1; if (val < 0) val=0; if ( ioctl(fd, SNDCTL_DSP_STEREO,&val) == -1 ) { perror("ioctl stereo"); return -1; } /* Inform the sound card of the audio format */ if ( ioctl(fd, SNDCTL_DSP_SETFMT,&Info->Format) == -1 ) { perror("ioctl format"); return -1; } /* Set the DSP playback rate, sampling rate of the raw PCM audio */ if (ioctl(fd, SNDCTL_DSP_SPEED,&Info->SampleRate) == -1 ) { perror("ioctl sample rate"); return -1; } /* if (Flags & O_RDWR) { if (ioctl(fd, SNDCTL_DSP_SETDUPLEX,0) == -1 ) { perror("ioctl set duplex"); return -1; } } */ return(fd); } int OpenOSSInput(char *Dev, TAudioInfo *Info) { return(OpenOSSDevice(Dev,INPUT,Info)); } int OpenOSSOutput(char *Dev, TAudioInfo *Info) { return(OpenOSSDevice(Dev,OUTPUT,Info)); } int OSSAlterVolumeType(char *device, int Type, int delta) { int left_val=-1, right_val=-1, val, mixfd=0; mixfd=open(device, O_RDWR); if (mixfd > -1) { switch (Type) { case VOL_MASTER: ioctl(mixfd,MIXER_READ(SOUND_MIXER_VOLUME),&val); break; case VOL_PCM: ioctl(mixfd,MIXER_READ(SOUND_MIXER_PCM),&val); break; case VOL_CD: ioctl(mixfd,MIXER_READ(SOUND_MIXER_CD),&val); break; case VOL_MIC: ioctl(mixfd,MIXER_READ(SOUND_MIXER_MIC),&val); break; case VOL_VIDEO: ioctl(mixfd,MIXER_READ(SOUND_MIXER_VIDEO),&val); break; case VOL_PHONEIN: ioctl(mixfd,MIXER_READ(SOUND_MIXER_PHONEIN),&val); break; case VOL_PHONEOUT: ioctl(mixfd,MIXER_READ(SOUND_MIXER_PHONEOUT),&val); break; case VOL_LINE1: ioctl(mixfd,MIXER_READ(SOUND_MIXER_LINE1),&val); break; } left_val=val & 0xFF; right_val=(val & 0xFF00) >> 8; left_val+=delta; if (left_val < 0) left_val=0; if (left_val > 255) left_val=255; right_val+=delta; if (right_val < 0) right_val=0; if (right_val > 255) right_val=255; right_val=right_val << 8; val=right_val + left_val; switch (Type) { case VOL_MASTER: ioctl(mixfd,MIXER_WRITE(SOUND_MIXER_VOLUME),&val); break; case VOL_PCM: ioctl(mixfd,MIXER_WRITE(SOUND_MIXER_PCM),&val); break; case VOL_CD: ioctl(mixfd,MIXER_WRITE(SOUND_MIXER_CD),&val); break; case VOL_MIC: ioctl(mixfd,MIXER_WRITE(SOUND_MIXER_MIC),&val); break; case VOL_VIDEO: ioctl(mixfd,MIXER_WRITE(SOUND_MIXER_VIDEO),&val); break; case VOL_PHONEIN: ioctl(mixfd,MIXER_WRITE(SOUND_MIXER_PHONEIN),&val); break; case VOL_PHONEOUT: ioctl(mixfd,MIXER_WRITE(SOUND_MIXER_PHONEOUT),&val); break; case VOL_LINE1: ioctl(mixfd,MIXER_WRITE(SOUND_MIXER_LINE1),&val); break; } close(mixfd); } return(left_val); } int OSSAlterVolume(char *device, char *type_str, int delta) { int type, result=-1; type=MatchTokenFromList(type_str,VolTypeStrings,0); if ((type==VOL_ALL) || (type==-1)) { result=OSSAlterVolumeType(device, VOL_MASTER, delta); result=OSSAlterVolumeType(device, VOL_PCM, delta); } else result=OSSAlterVolumeType(device, type, delta); return(result); } int OSSPlaySoundFile(char *DevPath, char *FilePath, int Vol) { char *Buffer=NULL, *Tempstr=NULL; int result, fd=-1, mixfd=-1; int val, oldvol; TAudioInfo *AudioInfo=NULL; AudioInfo=SoundOpenFile(FilePath); if (AudioInfo==NULL) return(FALSE); //Must do all the above before we do open oss! fd=OpenOSSOutput(DevPath, AudioInfo); if (fd==-1) { STREAMClose(AudioInfo->S); free(AudioInfo); return(FALSE); } if (Vol != VOLUME_LEAVEALONE) { mixfd=open("/dev/dsp", O_RDWR); if (mixfd > -1) { ioctl(mixfd,SOUND_MIXER_READ_PCM,&oldvol); if (Vol > 255) result=255; else result=Vol; val=(result) | (result <<8); ioctl(mixfd,SOUND_MIXER_WRITE_PCM,&val); } } Buffer=SetStrLen(Buffer,1024); result=STREAMReadBytes(AudioInfo->S,Buffer,1024); /* if (AudioInfo->Channels==1) { Tempstr=SetStrLen(Tempstr,result); memcpy(Tempstr,Buffer,result); result=SoundReformat(&Buffer, Tempstr, result, AudioInfo); } */ val=0; while (result > 0) { write(fd,Buffer,result); val+=result; if ((AudioInfo->DataSize > 0) && (val >= AudioInfo->DataSize)) break; result=STREAMReadBytes(AudioInfo->S,Buffer,1024); } close(fd); if (mixfd > -1) { ioctl(mixfd,SOUND_MIXER_WRITE_PCM,&oldvol); close(mixfd); } DestroyString(Buffer); DestroyString(Tempstr); STREAMClose(AudioInfo->S); free(AudioInfo); return(TRUE); } #endif /* ------------------------ ESound Functions -------------------- */ #ifdef HAVE_LIBESD #include int ESDGetConnection() { static int ConFD=-1; if (ConFD==-1) ConFD=esd_open_sound(NULL); return(ConFD); } void ESDSendFileData(int ConFD, char *SoundFilePath, int Vol) { char *Tempstr=NULL; int id; Tempstr=CopyStr(Tempstr,"ColLib:"); Tempstr=CatStr(Tempstr,SoundFilePath); id=esd_sample_getid(ConFD,Tempstr); if (id < 0) { id=esd_file_cache(ConFD,"ColLib",SoundFilePath); } if (Vol != VOLUME_LEAVEALONE) esd_set_default_sample_pan(ConFD,id,Vol,Vol); esd_sample_play(ConFD,id); DestroyString(Tempstr); } #endif int ESDPlaySoundFile(char *SoundFilePath, int Vol) { if (StrLen(SoundFilePath) < 1) return(FALSE); #ifdef HAVE_LIBESD int fd; fd=ESDGetConnection(); if (fd > -1) { ESDSendFileData(fd,SoundFilePath,Vol); return(TRUE); } #endif return(FALSE); } /* //Dont understand ESD volumes yet. int ESDAlterVolume(char *Device, int Vol) { int result, fd; if (StrLen(Device) < 1) return; #ifdef HAVE_LIBESD fd=ESDGetConnection(); if (fd > -1) { return(TRUE); } #endif return(FALSE); } */ //---------------- Wrapper functions -------------// int SoundOpenOutput(char *Dev, TAudioInfo *Info) { int fd=-1; #ifdef HAVE_LIBESD esd_format_t esd_format; if ((StrLen(Dev)==0) || (strncmp(Dev,"esd:",4)==0)) { esd_format=ESD_STREAM | ESD_PLAY; if (Info->Channels==2) esd_format |= ESD_STEREO; else esd_format |= ESD_MONO; if (Info->SampleSize==2) esd_format |= ESD_BITS16; else esd_format |= ESD_BITS8; if (StrLen(Dev) > 4) setenv("ESPEAKER",Dev+4,TRUE); else setenv("ESPEAKER","localhost",TRUE); fd=esd_play_stream(esd_format, Info->SampleRate, NULL, "testing"); } #endif #ifdef HAVE_OSS if (fd < 0) fd=OpenOSSOutput(Dev, Info); #endif return(fd); } int SoundOpenInput(char *Dev, TAudioInfo *Info) { int fd=-1; #ifdef HAVE_LIBESD esd_format_t esd_format; if ((StrLen(Dev)==0) || (strncmp(Dev,"esd:",4)==0)) { esd_format=ESD_STREAM | ESD_RECORD; if (Info->Channels==2) esd_format |= ESD_STEREO; else esd_format |= ESD_MONO; if (Info->SampleSize==2) esd_format |= ESD_BITS16; else esd_format |= ESD_BITS8; if (StrLen(Dev) > 4) setenv("ESPEAKER",Dev+4,TRUE); else setenv("ESPEAKER","localhost",TRUE); fd=esd_record_stream(esd_format, Info->SampleRate, NULL, "testing"); } #endif #ifdef HAVE_OSS if (fd < 0) fd=OpenOSSInput(Dev, Info); #endif return(fd); } int SoundPlayFile(char *Output, char *Path, int Vol, int Flags) { int result=0, pid=0; if (Flags & PLAYSOUND_NONBLOCK) { pid=fork(); if (pid==0) CloseOpenFiles(); } if (pid==0) { result=ESDPlaySoundFile(Path, Vol); #ifdef HAVE_OSS if (! result) result=OSSPlaySoundFile(Output, Path, Vol); #endif if (Flags & PLAYSOUND_NONBLOCK) _exit(0); } return(result); } int SoundAlterVolume(char *ReqDev, char *VolType, int delta) { char *device=NULL; int val; if (StrLen(ReqDev)) device=CopyStr(device,ReqDev); else device=CopyStr(device,"/dev/mixer"); #ifdef HAVE_OSS val=OSSAlterVolume(device, VolType, delta); #endif DestroyString(device); return(val); } hashrat-1.6.1/libUseful-2.1/sound.h0000644000175000017550000000327312470734537017474 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_SOUND_H #define LIBUSEFUL_SOUND_H #include "file.h" typedef struct { unsigned int Format; unsigned int Channels; unsigned int SampleRate; unsigned int SampleSize; unsigned int DataSize; STREAM *S; }TAudioInfo; #define VOLUME_LEAVEALONE -1 #define PLAYSOUND_NONBLOCK 1 #define OUTPUT 0 #define INPUT 1 /* For systems that lack 'soundcard.h' but still have some kind of sound */ /* We define enough audio formats for us to use internally */ #ifndef AFMT_MU_LAW # define AFMT_MU_LAW 0x00000001 #endif #ifndef AFMT_A_LAW # define AFMT_A_LAW 0x00000002 #endif # define AFMT_IMA_ADPCM 0x00000004 #ifndef AFMT_U8 # define AFMT_U8 0x00000008 #endif #ifndef AFMT_S8 # define AFMT_S8 0x00000040 #endif #ifndef AFMT_S16_LE # define AFMT_S16_LE 0x00000010 /* Little endian signed 16*/ #endif #ifndef AFMT_S16_BE # define AFMT_S16_BE 0x00000010 /* Little endian signed 16*/ #endif #ifndef AFMT_U16_BE # define AFMT_U16_LE 0x00000080 /* Little endian U16 */ #endif #ifndef AFMT_U16_BE # define AFMT_U16_BE 0x00000100 /* Big endian U16 */ #endif #ifdef __cplusplus extern "C" { #endif TAudioInfo *AudioInfoCreate(unsigned int Format, unsigned int Channels, unsigned int SampleRate, unsigned int SampleSize, unsigned int DataSize); int SoundPlayFile(char *Device, char *Path, int Vol, int Flags); int SoundAlterVolume(char *Device, char *Channel, int delta); int SoundOpenOutput(char *Dev, TAudioInfo *Info); int SoundOpenInput(char *Dev, TAudioInfo *Info); TAudioInfo *SoundReadWAV(STREAM *S); TAudioInfo *SoundReadAU(STREAM *S); void SoundWriteWAVHeader(STREAM *S, TAudioInfo *AI); TAudioInfo *SoundOpenFile(char *FilePath); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/string.c0000644000175000017550000002340512470734537017644 0ustar metacosm89metacosm89#include "includes.h" #include #ifndef va_copy #define va_copy(dest, src) (dest) = (src) #endif /* size_t StrLen(const char *Str) { char *ptr, *end; if (! Str) return(0); ptr=Str; end=ptr + LibUsefulObjectSize(Str, 0); while ((ptr < end) && (*ptr != '\0')) ptr++; return(ptr-Str); } */ void DestroyString(void *Obj) { if (Obj) free(Obj); } int CompareStr(const char *S1, const char *S2) { if ( ((!S1) || (*S1=='\0')) && ((!S2) || (*S2=='\0')) ) return(0); if ((!S1) || (*S1=='\0')) return(-1); if ((!S2) || (*S2=='\0')) return(1); return(strcmp(S1,S2)); } char *CopyStrLen(char *Dest, const char *Src,size_t len) { char *ptr; ptr=CopyStr(Dest,Src); if (StrLen(ptr) >len) ptr[len]=0; return(ptr); } char *CatStrLen(char *Dest, const char *Src,size_t len) { char *ptr; size_t catlen=0; catlen=StrLen(Dest); ptr=CatStr(Dest,Src); catlen+=len; if (StrLen(ptr) > catlen) ptr[catlen]=0; return(ptr); } char *CopyStr(char *Dest, const char *Src) { if (Dest) *Dest=0; return(CatStr(Dest,Src)); } char *VCatStr(char *Dest, const char *Str1, va_list args) { //initialize these to keep valgrind happy size_t len=0; char *ptr=NULL; const char *sptr=NULL; if (Dest !=NULL) { len=StrLen(Dest); ptr=Dest; } else { len=10; ptr=(char *) calloc(10,1); } if (! Str1) return(ptr); for (sptr=Str1; sptr !=NULL; sptr=va_arg(args,const char *)) { len+=StrLen(sptr)+1; len=len*2; ptr=(char *) realloc(ptr,len); if (ptr && sptr) strcat(ptr,sptr); } return(ptr); } char *MCatStr(char *Dest, const char *Str1, ...) { char *ptr=NULL; va_list args; va_start(args,Str1); ptr=VCatStr(Dest,Str1,args); va_end(args); return(ptr); } char *MCopyStr(char *Dest, const char *Str1, ...) { char *ptr=NULL; va_list args; ptr=Dest; if (ptr) *ptr='\0'; va_start(args,Str1); ptr=VCatStr(ptr,Str1,args); va_end(args); return(ptr); } char *CatStr(char *Dest, const char *Src) { size_t len; char *ptr; if (Dest !=NULL) { len=StrLen(Dest); ptr=Dest; } else { len=10; ptr=(char *) calloc(10,1); } if (StrLen(Src)==0) return(ptr); len+=StrLen(Src); len++; ptr=(char *)realloc(ptr,len); if (ptr && Src) strcat(ptr,Src); return(ptr); } //Clone string is really intended to be passed into the 'ListClone' function //in the manner of a copy constructor, for most uses it's best to stick to //CopyStr char *CloneStr(const char *Str) { return(CopyStr(NULL,Str)); } char *VFormatStr(char *InBuff, const char *InputFmtStr, va_list args) { int inc=100, count=1, result=0, FmtLen; char *Tempstr=NULL, *FmtStr=NULL, *ptr; va_list argscopy; Tempstr=InBuff; //Take a copy of the supplied Format string and change it. //Do not allow '%n', it's useable for exploits FmtLen=StrLen(InputFmtStr); #ifdef USE_ALLOCA FmtStr=alloca(FmtLen); strncpy(FmtStr,InputFmtStr,FmtLen); #else FmtStr=CopyStr(FmtStr,InputFmtStr); #endif //Deny %n. Replace it with %x which prints out the value of any supplied argument ptr=strstr(FmtStr,"%n"); while (ptr) { memcpy(ptr,"%x",2); ptr++; ptr=strstr(ptr,"%n"); } inc=4 * FmtLen; //this should be a good average for (count=1; count < 100; count++) { result=inc * count +1; Tempstr=SetStrLen(Tempstr, result); //the vsnprintf function DESTROYS the arg list that is passed to it. //This is just plain WRONG, it's a long-standing bug. The solution is to //us va_copy to make a new one every time and pass that in. va_copy(argscopy,args); result=vsnprintf(Tempstr,result,FmtStr,argscopy); va_end(argscopy); /* old style returns -1 to say couldn't fit data into buffer.. so we */ /* have to guess again */ if (result==-1) continue; /* new style returns how long buffer should have been.. so we resize it */ if (result > (inc * count)) { Tempstr=SetStrLen(Tempstr, result+10); va_copy(argscopy,args); result=vsnprintf(Tempstr,result+10,FmtStr,argscopy); va_end(argscopy); } break; } #ifndef USE_ALLOCA DestroyString(FmtStr); #endif return(Tempstr); } char *FormatStr(char *InBuff, const char *FmtStr, ...) { char *tempstr=NULL; va_list args; va_start(args,FmtStr); tempstr=VFormatStr(InBuff,FmtStr,args); va_end(args); return(tempstr); } char *AddCharToStr(char *Dest,char Src) { char temp[2]; char *ptr=NULL; temp[0]=Src; temp[1]=0; ptr=CatStr(Dest,temp); return(ptr); } inline char *AddCharToBuffer(char *Dest, size_t DestLen, char Char) { char *actb_ptr; //if (Dest==NULL || ((DestLen % 100)==0)) actb_ptr=(char *) realloc((void *) Dest,DestLen +110); //else actb_ptr=Dest; actb_ptr[DestLen]=Char; actb_ptr[DestLen+1]='\0'; return(actb_ptr); } inline char *AddBytesToBuffer(char *Dest, size_t DestLen, char *Bytes, size_t NoOfBytes) { char *actb_ptr=NULL; //if (Dest==NULL || ((DestLen % 100)==0)) actb_ptr=(char *) realloc((void *) Dest,DestLen + NoOfBytes +10); //else actb_ptr=Dest; memcpy(actb_ptr+DestLen,Bytes,NoOfBytes); return(actb_ptr); } char *SetStrLen(char *Str,size_t len) { /* Note len+1 to allow for terminating NULL */ if (Str==NULL) return((char *) calloc(1,len+1)); else return( (char *) realloc(Str,len+1)); } char *strlwr(char *str) { char *ptr; if (! str) return(NULL); for (ptr=str; *ptr !='\0'; ptr++) *ptr=tolower(*ptr); return(str); } char *strupr(char *str) { char *ptr; if (! str) return(NULL); for (ptr=str; *ptr !='\0'; ptr++) *ptr=toupper(*ptr); return(str); } char *strrep(char *str, char oldchar, char newchar) { char *ptr; if (! str) return(NULL); for (ptr=str; *ptr !='\0'; ptr++) { if (*ptr==oldchar) *ptr=newchar; } return(str); } char *strmrep(char *str, char *oldchars, char newchar) { char *ptr; if (! str) return(NULL); for (ptr=str; *ptr !='\0'; ptr++) { if (strchr(oldchars,*ptr)) *ptr=newchar; } return(str); } void StripTrailingWhitespace(char *str) { size_t len; char *ptr; len=StrLen(str); if (len==0) return; for(ptr=str+len-1; (ptr >= str) && isspace(*ptr); ptr--) *ptr='\0'; } void StripLeadingWhitespace(char *str) { char *ptr, *start=NULL; if (! str) return; for(ptr=str; *ptr !='\0'; ptr++) { if ((! start) && (! isspace(*ptr))) start=ptr; } if (!start) start=ptr; memmove(str,start,ptr+1-start); } void StripCRLF(char *Line) { size_t len; char *ptr; len=StrLen(Line); if (len < 1) return; for (ptr=Line+len-1; ptr >= Line; ptr--) { if (strchr("\n\r",*ptr)) *ptr='\0'; else break; } } void StripQuotes(char *Str) { int len; char *ptr, StartQuote='\0'; ptr=Str; while (isspace(*ptr)) ptr++; if ((*ptr=='"') || (*ptr=='\'')) { StartQuote=*ptr; len=StrLen(ptr); if ((len > 0) && (StartQuote != '\0') && (ptr[len-1]==StartQuote)) { if (ptr[len-1]==StartQuote) ptr[len-1]='\0'; memmove(Str,ptr+1,len); } } } char *EnquoteStr(char *Out, const char *In) { const char *ptr; char *ReturnStr=NULL; size_t len=0; ptr=In; ReturnStr=CopyStr(Out,""); while (ptr && (*ptr != '\0')) { switch (*ptr) { case '\\': case '"': case '\'': ReturnStr=AddCharToBuffer(ReturnStr,len,'\\'); len++; ReturnStr=AddCharToBuffer(ReturnStr,len, *ptr); len++; break; case '\r': ReturnStr=AddCharToBuffer(ReturnStr,len,'\\'); len++; ReturnStr=AddCharToBuffer(ReturnStr,len, 'r'); len++; break; case '\n': ReturnStr=AddCharToBuffer(ReturnStr,len,'\\'); len++; ReturnStr=AddCharToBuffer(ReturnStr,len, 'n'); len++; break; default: ReturnStr=AddCharToBuffer(ReturnStr,len, *ptr); len++; break; } ptr++; } return(ReturnStr); } int MatchTokenFromList(const char *Token,const char **List, int Flags) { int count; size_t tlen, ilen; char Up1stChar, Lwr1stChar; const char *Item; if ((! Token) || (*Token=='\0')) return(-1); Up1stChar=toupper(*Token); Lwr1stChar=tolower(*Token); tlen=StrLen(Token); for (count=0; List[count] !=NULL; count++) { Item=List[count]; if ((*Item==Lwr1stChar) || (*Item==Up1stChar)) { ilen=StrLen(Item); if (Flags & MATCH_TOKEN_PART) { if (tlen > ilen) continue; if (Flags & MATCH_TOKEN_CASE) { if (strncmp(Token,Item,ilen)==0) return(count); } else if (strncasecmp(Token,Item,ilen)==0) return(count); } else { if (tlen != ilen) continue; if (Flags & MATCH_TOKEN_CASE) { if(strcmp(Token,List[count])==0) return(count); } else if (strcasecmp(Token,List[count])==0) return(count); } } } return(-1); } int MatchLineStartFromList(const char *Token,char **List) { int count; size_t len; if ((! Token) || (*Token=='\0')) return(-1); if (! List) return(-1); for (count=0; List[count] !=NULL; count++) { if (*Token==*List[count]) { len=StrLen(List[count]); if ( (len >0) && (strncasecmp(Token,List[count],len)==0) ) return(count); } } return(-1); } #define ESC 0x1B char *DeQuoteStr(char *Buffer, const char *Line) { char *out, *in; size_t olen=0; char hex[3]; if (Line==NULL) return(NULL); out=CopyStr(Buffer,""); in=(char *) Line; while(in && (*in != '\0') ) { if (*in=='\\') { in++; switch (*in) { case 'e': out=AddCharToBuffer(out,olen,ESC); olen++; break; case 'n': out=AddCharToBuffer(out,olen,'\n'); olen++; break; case 'r': out=AddCharToBuffer(out,olen,'\r'); olen++; break; case 't': out=AddCharToBuffer(out,olen,'\t'); olen++; break; case 'x': in++; hex[0]=*in; in++; hex[1]=*in; hex[2]='\0'; out=AddCharToBuffer(out,olen,strtol(hex,NULL,16) & 0xFF); olen++; break; case '\\': default: out=AddCharToBuffer(out,olen,*in); olen++; break; } } else { out=AddCharToBuffer(out,olen,*in); olen++; } in++; } return(out); } char *QuoteCharsInStr(char *Buffer, const char *String, const char *QuoteChars) { char *RetStr=NULL; const char *sptr, *cptr; size_t olen=0; RetStr=CopyStr(Buffer,""); if (! String) return(RetStr); for (sptr=String; *sptr !='\0'; sptr++) { for (cptr=QuoteChars; *cptr !='\0'; cptr++) { if (*sptr==*cptr) { RetStr=AddCharToBuffer(RetStr,olen, '\\'); olen++; break; } } RetStr=AddCharToBuffer(RetStr,olen,*sptr); olen++; } return(RetStr); } hashrat-1.6.1/libUseful-2.1/string.h0000644000175000017550000000350412470734537017647 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_STRING #define LIBUSEFUL_STRING #include #include //for strlen, used below in StrLen #define MATCH_TOKEN_PART 1 #define MATCH_TOKEN_CASE 2 #ifdef __cplusplus extern "C" { #endif //A few very simple and frequently used functions can be reduced //down to macros using weird stuff like the ternary condition //operator '?' and the dreaded comma operator ',' #define StrLen(str) ( str ? strlen(str) : 0 ) #define StrEnd(str) if ((! str) || (*str == '\0') || (str > __builtin_frame_address (0)) return(TRUE); return(FALSE); //size_t StrLen(const char *Str); void DestroyString(void *); int CompareStr(const char *S1, const char *S2); char *CopyStrLen(char *,const char *,size_t); char *CopyStr(char *, const char *); char *MCatStr(char *, const char *, ...); char *MCopyStr(char *, const char *, ...); char *CatStr(char *, const char *); char *CatStrLen(char *,const char *,size_t); char *VFormatStr(char *,const char *,va_list); char *FormatStr(char *,const char *,...); char *AddCharToStr(char *,char); char *AddCharToBuffer(char *Buffer, size_t BuffLen, char Char); char *AddBytesToBuffer(char *Buffer, size_t BuffLen, char *Bytes, size_t Len); char *SetStrLen(char *,size_t); char *strupr(char *); char *strlwr(char *); char *strrep(char *,char, char); char *strmrep(char *str, char *oldchars, char newchar); char *CloneString(const char *); void StripTrailingWhitespace(char *); void StripLeadingWhitespace(char *); void StripCRLF(char *); void StripQuotes(char *); char *QuoteCharsInStr(char *Buffer, const char *String,const char *QuoteChars); char *DeQuoteStr(char *Buffer, const char *Line); char *EnquoteStr(char *Out, const char *In); int MatchTokenFromList(const char *Token,const char **List, int Flags); int MatchLineStartFromList(const char *Token,char **List); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/tar.c0000644000175000017550000001454512470734537017131 0ustar metacosm89metacosm89#include "tar.h" #include #include #include #include "FileSystem.h" #define TAR_RECORDSIZE 512 #define FILE_MODE_OFFSET 100 #define USER_OFFSET 108 #define GROUP_OFFSET 116 #define SIZE_OFFSET 124 #define MTIME_OFFSET 136 #define CHECKSUM_OFFSET 148 #define FTYPE_OFFSET 157 typedef struct { /* byte offset */ char name[100]; /* 0 */ char mode[8]; /* 100 */ char uid[8]; /* 108 */ char gid[8]; /* 116 */ char size[12]; /* 124 */ char mtime[12]; /* 136 */ char chksum[8]; /* 148 */ char typeflag; /* 156 */ char linkname[100]; /* 157 */ char magic[6]; /* 257 */ char version[2]; /* 263 */ char uname[32]; /* 265 */ char gname[32]; /* 297 */ char devmajor[8]; /* 329 */ char devminor[8]; /* 337 */ char prefix[155]; /* 345 */ /* 500 */ char pad[12]; } TTarHeader; int TarReadHeader(STREAM *S, ListNode *Vars) { char *Tempstr=NULL; int len, result, RetVal=FALSE; TTarHeader *Head; len=sizeof(TTarHeader); Head=(TTarHeader *) calloc(1,len); result=STREAMReadBytes(S,(char *) Head,len); printf("HEAD: %d %s\n",result,(char *) Head); if (result == len) { Tempstr=CopyStr(Tempstr,Head->prefix); Tempstr=CatStr(Tempstr,Head->name); SetVar(Vars,"Path",Tempstr); //Convert 'Size' from octal. Yes, octal. Tempstr=FormatStr(Tempstr,"%d",strtol(Head->size,NULL,8)); SetVar(Vars,"Size",Tempstr); //mode is in octal too Tempstr=FormatStr(Tempstr,"%d",strtol(Head->mode,NULL,8)); SetVar(Vars,"Mode",Tempstr); //mtime in, yes, you guessed it, octal Tempstr=FormatStr(Tempstr,"%d",strtol(Head->mtime,NULL,8)); SetVar(Vars,"Mtime",Tempstr); SetVar(Vars,"Type","file"); StripTrailingWhitespace(Head->magic); if (strcmp(Head->magic,"ustar")==0) { switch (Head->typeflag) { case '1': SetVar(Vars,"Type","hardlink"); break; case '2': SetVar(Vars,"Type","symlink"); break; case '3': SetVar(Vars,"Type","chardev"); break; case '4': SetVar(Vars,"Type","blkdev"); break; case '5': SetVar(Vars,"Type","directory"); break; } } RetVal=TRUE; } DestroyString(Tempstr); free(Head); return(RetVal); } void TarUnpack(STREAM *Tar) { ListNode *Vars; char *Path=NULL, *Tempstr=NULL, *ptr; int bytes_read, bytes_total, val, result; STREAM *S; Vars=ListCreate(); while (TarReadHeader(Tar, Vars)) { Path=CopyStr(Path,GetVar(Vars,"Path")); if (StrLen(Path)) { ptr=GetVar(Vars,"Type"); if (ptr) { if (strcmp(ptr,"directory")==0) { mkdir(Path,atoi(GetVar(Vars,"Mode"))); } else if (strcmp(ptr,"file")==0) { MakeDirPath(Path,0700); S=STREAMOpenFile(Path,SF_WRONLY|SF_CREAT|SF_TRUNC); if (S) fchmod(S->out_fd,atoi(GetVar(Vars,"Mode"))); bytes_read=0; bytes_total=atoi(GetVar(Vars,"Size")); Tempstr=SetStrLen(Tempstr,BUFSIZ); while (bytes_read < bytes_total) { val=bytes_total - bytes_read; if (val > BUFSIZ) val=BUFSIZ; if ((val % 512)==0) result=val; else result=((val / 512) + 1) * 512; result=STREAMReadBytes(Tar,Tempstr,result); if (result > val) result=val; if (S) STREAMWriteBytes(S,Tempstr,result); bytes_read+=result; } STREAMClose(S); } } } ListClear(Vars,DestroyString); } ListDestroy(Vars,DestroyString); DestroyString(Tempstr); DestroyString(Path); } void TarWriteHeader(STREAM *S, char *Path, struct stat *FStat) { char *Tempstr=NULL, *ptr; int i, chksum=0; TTarHeader *Head; struct passwd *pwd; struct group *grp; Head=(TTarHeader *) calloc(1,sizeof(TTarHeader)); ptr=Path; if (*ptr=='/') ptr++; memcpy(Head->name,ptr,StrLen(ptr)); sprintf(Head->mode,"%07o",FStat->st_mode); sprintf(Head->uid,"%07o",FStat->st_uid); sprintf(Head->gid,"%07o",FStat->st_gid); sprintf(Head->size,"%011lo",(unsigned long) FStat->st_size); sprintf(Head->mtime,"%011lo",(unsigned long) FStat->st_mtime); if (S_ISDIR(FStat->st_mode)) Head->typeflag='5'; else if (S_ISLNK(FStat->st_mode)) Head->typeflag='2'; else if (S_ISCHR(FStat->st_mode)) Head->typeflag='3'; else if (S_ISBLK(FStat->st_mode)) Head->typeflag='4'; else if (S_ISFIFO(FStat->st_mode)) Head->typeflag='6'; else Head->typeflag='0'; memset(Head->chksum,' ',8); memcpy(Head->magic,"ustar\0",6); memcpy(Head->version,"00",2); pwd=getpwuid(FStat->st_uid); if (pwd) strcpy(Head->uname,pwd->pw_name); grp=getgrgid(FStat->st_gid); if (grp) strcpy(Head->gname,grp->gr_name); if ( (Head->typeflag == '3') || (Head->typeflag == '4') ) { sprintf(Head->devmajor,"%07o",major(FStat->st_rdev)); sprintf(Head->devminor,"%07o",minor(FStat->st_rdev)); } ptr=(char *) Head; for (i=0; i < 512; i++) chksum+=*(ptr+i); snprintf(Head->chksum,8,"%06o",chksum); STREAMWriteBytes(S,(char *) Head,512); DestroyString(Tempstr); free(Head); } void TarWriteFooter(STREAM *Tar) { char *Tempstr=NULL; Tempstr=SetStrLen(Tempstr,TAR_RECORDSIZE); memset(Tempstr,0,TAR_RECORDSIZE); STREAMWriteBytes(Tar,Tempstr,TAR_RECORDSIZE); STREAMWriteBytes(Tar,Tempstr,TAR_RECORDSIZE); DestroyString(Tempstr); } void TarAddFile(STREAM *Tar, STREAM *File) { char *Buffer=NULL; int result; Buffer=SetStrLen(Buffer,TAR_RECORDSIZE); memset(Buffer,0,TAR_RECORDSIZE); result=STREAMReadBytes(File,Buffer,TAR_RECORDSIZE); while (result > 0) { STREAMWriteBytes(Tar,Buffer,TAR_RECORDSIZE); memset(Buffer,0,TAR_RECORDSIZE); result=STREAMReadBytes(File,Buffer,TAR_RECORDSIZE); } DestroyString(Buffer); } void TarInternalProcessFiles(STREAM *Tar, char *FilePattern) { glob_t Glob; char *Tempstr=NULL, *ptr; struct stat FStat; int i; STREAM *S; ptr=GetToken(FilePattern,"\\S",&Tempstr,GETTOKEN_QUOTES); if (ptr) glob(Tempstr,0,NULL,&Glob); while (ptr) { ptr=GetToken(ptr,"\\S",&Tempstr,GETTOKEN_QUOTES); if (ptr) glob(Tempstr,GLOB_APPEND,NULL,&Glob); } for (i=0; i < Glob.gl_pathc; i++) { stat(Glob.gl_pathv[i],&FStat); if (S_ISDIR(FStat.st_mode)) { Tempstr=MCopyStr(Tempstr,Glob.gl_pathv[i],"/*",NULL); TarInternalProcessFiles(Tar, Tempstr); } else { S=STREAMOpenFile(Glob.gl_pathv[i],SF_RDONLY); if (S) { TarWriteHeader(Tar, Glob.gl_pathv[i],&FStat); TarAddFile(Tar, S); STREAMClose(S); } } } globfree(&Glob); DestroyString(Tempstr); } void TarFiles(STREAM *Tar, char *FilePattern) { TarInternalProcessFiles(Tar, FilePattern); TarWriteFooter(Tar); } hashrat-1.6.1/libUseful-2.1/tar.h0000644000175000017550000000064312470734537017130 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_TAR_H #define LIBUSEFUL_TAR_H #include "includes.h" #ifdef __cplusplus extern "C" { #endif int TarReadHeader(STREAM *S, ListNode *Vars); void TarUnpack(STREAM *Tar); void TarWriteHeader(STREAM *S, char *FileName, struct stat *FStat); void TarWriteFooter(STREAM *Tar); void TarAddFile(STREAM *Tar, STREAM *File); void TarFiles(STREAM *Tar, char *FilePattern); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/unix_socket.c0000644000175000017550000000131612470734537020666 0ustar metacosm89metacosm89#include "unix_socket.h" #include #include #include int OpenUnixSocket(const char *Path, int Type) { int sock; struct sockaddr_un sa; int val; if (Type==STREAM_TYPE_UNIX) val=SOCK_STREAM; else val=SOCK_DGRAM; sock=socket(AF_UNIX, val, FALSE); if (sock==-1) return(-1); memset(&sa,0,sizeof(struct sockaddr_un)); sa.sun_family=AF_UNIX; strcpy(sa.sun_path,Path); val=sizeof(sa); if (connect(sock,(struct sockaddr *) &sa,val)==0) return(sock); close(sock); return(-1); } int STREAMConnectUnixSocket(STREAM *S, const char *Path, int ConType) { S->in_fd=OpenUnixSocket(Path, ConType); if (S->in_fd==-1) return(FALSE); S->out_fd=S->in_fd; S->Type=ConType; return(TRUE); } hashrat-1.6.1/libUseful-2.1/unix_socket.h0000644000175000017550000000050412470734537020671 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_UNIXSOCK_H #define LIBUSEFUL_UNIXSOCK_H #include "file.h" #include "defines.h" #include "includes.h" #ifdef __cplusplus extern "C" { #endif int OpenUnixSocket(const char *Path, int SockType); int STREAMConnectUnixSocket(STREAM *S, const char *Path, int SockType); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/whirlpool.c0000644000175000017550000036165712470734537020373 0ustar metacosm89metacosm89/** * The Whirlpool hashing function. * *

* References * *

* The Whirlpool algorithm was developed by * Paulo S. L. M. Barreto and * Vincent Rijmen. * * See * P.S.L.M. Barreto, V. Rijmen, * ``The Whirlpool hashing function,'' * WHIRLPOOL submission, 2000 (tweaked version, 2001), * * * @author Paulo S.L.M. Barreto * @author Vincent Rijmen. * * @version 3.0 (2003.03.12) * * ============================================================================= * * Differences from version 2.1: * * - Suboptimal diffusion matrix replaced by cir(1, 1, 4, 1, 8, 5, 2, 9). * * ============================================================================= * * Differences from version 2.0: * * - Generation of ISO/IEC 10118-3 test vectors. * - Bug fix: nonzero carry was ignored when tallying the data length * (this bug apparently only manifested itself when feeding data * in pieces rather than in a single chunk at once). * - Support for MS Visual C++ 64-bit integer arithmetic. * * Differences from version 1.0: * * - Original S-box replaced by the tweaked, hardware-efficient version. * * ============================================================================= * * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ #include #include #include #include #include #include "whirlpool.h" #if UINT_MAX >= 4294967295UL #define ONE32 0xffffffffU #else #define ONE32 0xffffffffUL #endif #define ONE8 0xffU #define ONE16 0xffffU #define T8(x) ((x) & ONE8) #define T16(x) ((x) & ONE16) #define T32(x) ((x) & ONE32) #define LL(v) (v##ULL) #define ONE64 LL(0xffffffffffffffff) #define T64(x) ((x) & ONE64) #define ROTR64(v, n) (((v) >> (n)) | T64((v) << (64 - (n)))) /* * Note: the test is used to detect native 64-bit architectures; * if the unsigned long is strictly greater than 32-bit, it is * assumed to be at least 64-bit. This will not work correctly * on (old) 36-bit architectures (PDP-11 for instance). * * On non-64-bit architectures, "long long" is used. */ /* * U8TO32_BIG(c) returns the 32-bit value stored in big-endian convention * in the unsigned char array pointed to by c. */ #define U8TO32_BIG(c) (((uint32_t)T8(*(c)) << 24) | ((uint32_t)T8(*((c) + 1)) << 16) | ((uint32_t)T8(*((c) + 2)) << 8) | ((uint32_t)T8(*((c) + 3)))) /* * U8TO32_LITTLE(c) returns the 32-bit value stored in little-endian convention * in the unsigned char array pointed to by c. */ #define U8TO32_LITTLE(c) (((uint32_t)T8(*(c))) | ((uint32_t)T8(*((c) + 1)) << 8) | (uint32_t)T8(*((c) + 2)) << 16) | ((uint32_t)T8(*((c) + 3)) << 24)) /* * U8TO32_BIG(c, v) stores the 32-bit-value v in big-endian convention * into the unsigned char array pointed to by c. */ #define U32TO8_BIG(c, v) do { uint32_t x = (v); unsigned char *d = (c); d[0] = T8(x >> 24); d[1] = T8(x >> 16); d[2] = T8(x >> 8); d[3] = T8(x); } while (0) /* * U8TO32_LITTLE(c, v) stores the 32-bit-value v in little-endian convention * into the unsigned char array pointed to by c. */ #define U32TO8_LITTLE(c, v) do { uint32_t x = (v); unsigned char *d = (c); d[0] = T8(x); d[1] = T8(x >> 8); d[2] = T8(x >> 16); d[3] = T8(x >> 24); } while (0) /* * ROTL32(v, n) returns the value of the 32-bit unsigned value v after * a rotation of n bits to the left. It might be replaced by the appropriate * architecture-specific macro. * * It evaluates v and n twice. * * The compiler might emit a warning if n is the constant 0. The result * is undefined if n is greater than 31. */ #define ROTL32(v, n) (T32((v) << (n)) | ((v) >> (32 - (n)))) /* * Whirlpool-specific definitions. */ /* #define TRACE_INTERMEDIATE_VALUES */ /* * The number of rounds of the internal dedicated block cipher. */ #define R 10 /* * Though Whirlpool is endianness-neutral, the encryption tables are listed * in BIG-ENDIAN format, which is adopted throughout this implementation * (but little-endian notation would be equally suitable if consistently * employed). */ static const uint64_t C0[256] = { LL(0x18186018c07830d8), LL(0x23238c2305af4626), LL(0xc6c63fc67ef991b8), LL(0xe8e887e8136fcdfb), LL(0x878726874ca113cb), LL(0xb8b8dab8a9626d11), LL(0x0101040108050209), LL(0x4f4f214f426e9e0d), LL(0x3636d836adee6c9b), LL(0xa6a6a2a6590451ff), LL(0xd2d26fd2debdb90c), LL(0xf5f5f3f5fb06f70e), LL(0x7979f979ef80f296), LL(0x6f6fa16f5fcede30), LL(0x91917e91fcef3f6d), LL(0x52525552aa07a4f8), LL(0x60609d6027fdc047), LL(0xbcbccabc89766535), LL(0x9b9b569baccd2b37), LL(0x8e8e028e048c018a), LL(0xa3a3b6a371155bd2), LL(0x0c0c300c603c186c), LL(0x7b7bf17bff8af684), LL(0x3535d435b5e16a80), LL(0x1d1d741de8693af5), LL(0xe0e0a7e05347ddb3), LL(0xd7d77bd7f6acb321), LL(0xc2c22fc25eed999c), LL(0x2e2eb82e6d965c43), LL(0x4b4b314b627a9629), LL(0xfefedffea321e15d), LL(0x575741578216aed5), LL(0x15155415a8412abd), LL(0x7777c1779fb6eee8), LL(0x3737dc37a5eb6e92), LL(0xe5e5b3e57b56d79e), LL(0x9f9f469f8cd92313), LL(0xf0f0e7f0d317fd23), LL(0x4a4a354a6a7f9420), LL(0xdada4fda9e95a944), LL(0x58587d58fa25b0a2), LL(0xc9c903c906ca8fcf), LL(0x2929a429558d527c), LL(0x0a0a280a5022145a), LL(0xb1b1feb1e14f7f50), LL(0xa0a0baa0691a5dc9), LL(0x6b6bb16b7fdad614), LL(0x85852e855cab17d9), LL(0xbdbdcebd8173673c), LL(0x5d5d695dd234ba8f), LL(0x1010401080502090), LL(0xf4f4f7f4f303f507), LL(0xcbcb0bcb16c08bdd), LL(0x3e3ef83eedc67cd3), LL(0x0505140528110a2d), LL(0x676781671fe6ce78), LL(0xe4e4b7e47353d597), LL(0x27279c2725bb4e02), LL(0x4141194132588273), LL(0x8b8b168b2c9d0ba7), LL(0xa7a7a6a7510153f6), LL(0x7d7de97dcf94fab2), LL(0x95956e95dcfb3749), LL(0xd8d847d88e9fad56), LL(0xfbfbcbfb8b30eb70), LL(0xeeee9fee2371c1cd), LL(0x7c7ced7cc791f8bb), LL(0x6666856617e3cc71), LL(0xdddd53dda68ea77b), LL(0x17175c17b84b2eaf), LL(0x4747014702468e45), LL(0x9e9e429e84dc211a), LL(0xcaca0fca1ec589d4), LL(0x2d2db42d75995a58), LL(0xbfbfc6bf9179632e), LL(0x07071c07381b0e3f), LL(0xadad8ead012347ac), LL(0x5a5a755aea2fb4b0), LL(0x838336836cb51bef), LL(0x3333cc3385ff66b6), LL(0x636391633ff2c65c), LL(0x02020802100a0412), LL(0xaaaa92aa39384993), LL(0x7171d971afa8e2de), LL(0xc8c807c80ecf8dc6), LL(0x19196419c87d32d1), LL(0x494939497270923b), LL(0xd9d943d9869aaf5f), LL(0xf2f2eff2c31df931), LL(0xe3e3abe34b48dba8), LL(0x5b5b715be22ab6b9), LL(0x88881a8834920dbc), LL(0x9a9a529aa4c8293e), LL(0x262698262dbe4c0b), LL(0x3232c8328dfa64bf), LL(0xb0b0fab0e94a7d59), LL(0xe9e983e91b6acff2), LL(0x0f0f3c0f78331e77), LL(0xd5d573d5e6a6b733), LL(0x80803a8074ba1df4), LL(0xbebec2be997c6127), LL(0xcdcd13cd26de87eb), LL(0x3434d034bde46889), LL(0x48483d487a759032), LL(0xffffdbffab24e354), LL(0x7a7af57af78ff48d), LL(0x90907a90f4ea3d64), LL(0x5f5f615fc23ebe9d), LL(0x202080201da0403d), LL(0x6868bd6867d5d00f), LL(0x1a1a681ad07234ca), LL(0xaeae82ae192c41b7), LL(0xb4b4eab4c95e757d), LL(0x54544d549a19a8ce), LL(0x93937693ece53b7f), LL(0x222288220daa442f), LL(0x64648d6407e9c863), LL(0xf1f1e3f1db12ff2a), LL(0x7373d173bfa2e6cc), LL(0x12124812905a2482), LL(0x40401d403a5d807a), LL(0x0808200840281048), LL(0xc3c32bc356e89b95), LL(0xecec97ec337bc5df), LL(0xdbdb4bdb9690ab4d), LL(0xa1a1bea1611f5fc0), LL(0x8d8d0e8d1c830791), LL(0x3d3df43df5c97ac8), LL(0x97976697ccf1335b), LL(0x0000000000000000), LL(0xcfcf1bcf36d483f9), LL(0x2b2bac2b4587566e), LL(0x7676c57697b3ece1), LL(0x8282328264b019e6), LL(0xd6d67fd6fea9b128), LL(0x1b1b6c1bd87736c3), LL(0xb5b5eeb5c15b7774), LL(0xafaf86af112943be), LL(0x6a6ab56a77dfd41d), LL(0x50505d50ba0da0ea), LL(0x45450945124c8a57), LL(0xf3f3ebf3cb18fb38), LL(0x3030c0309df060ad), LL(0xefef9bef2b74c3c4), LL(0x3f3ffc3fe5c37eda), LL(0x55554955921caac7), LL(0xa2a2b2a2791059db), LL(0xeaea8fea0365c9e9), LL(0x656589650fecca6a), LL(0xbabad2bab9686903), LL(0x2f2fbc2f65935e4a), LL(0xc0c027c04ee79d8e), LL(0xdede5fdebe81a160), LL(0x1c1c701ce06c38fc), LL(0xfdfdd3fdbb2ee746), LL(0x4d4d294d52649a1f), LL(0x92927292e4e03976), LL(0x7575c9758fbceafa), LL(0x06061806301e0c36), LL(0x8a8a128a249809ae), LL(0xb2b2f2b2f940794b), LL(0xe6e6bfe66359d185), LL(0x0e0e380e70361c7e), LL(0x1f1f7c1ff8633ee7), LL(0x6262956237f7c455), LL(0xd4d477d4eea3b53a), LL(0xa8a89aa829324d81), LL(0x96966296c4f43152), LL(0xf9f9c3f99b3aef62), LL(0xc5c533c566f697a3), LL(0x2525942535b14a10), LL(0x59597959f220b2ab), LL(0x84842a8454ae15d0), LL(0x7272d572b7a7e4c5), LL(0x3939e439d5dd72ec), LL(0x4c4c2d4c5a619816), LL(0x5e5e655eca3bbc94), LL(0x7878fd78e785f09f), LL(0x3838e038ddd870e5), LL(0x8c8c0a8c14860598), LL(0xd1d163d1c6b2bf17), LL(0xa5a5aea5410b57e4), LL(0xe2e2afe2434dd9a1), LL(0x616199612ff8c24e), LL(0xb3b3f6b3f1457b42), LL(0x2121842115a54234), LL(0x9c9c4a9c94d62508), LL(0x1e1e781ef0663cee), LL(0x4343114322528661), LL(0xc7c73bc776fc93b1), LL(0xfcfcd7fcb32be54f), LL(0x0404100420140824), LL(0x51515951b208a2e3), LL(0x99995e99bcc72f25), LL(0x6d6da96d4fc4da22), LL(0x0d0d340d68391a65), LL(0xfafacffa8335e979), LL(0xdfdf5bdfb684a369), LL(0x7e7ee57ed79bfca9), LL(0x242490243db44819), LL(0x3b3bec3bc5d776fe), LL(0xabab96ab313d4b9a), LL(0xcece1fce3ed181f0), LL(0x1111441188552299), LL(0x8f8f068f0c890383), LL(0x4e4e254e4a6b9c04), LL(0xb7b7e6b7d1517366), LL(0xebeb8beb0b60cbe0), LL(0x3c3cf03cfdcc78c1), LL(0x81813e817cbf1ffd), LL(0x94946a94d4fe3540), LL(0xf7f7fbf7eb0cf31c), LL(0xb9b9deb9a1676f18), LL(0x13134c13985f268b), LL(0x2c2cb02c7d9c5851), LL(0xd3d36bd3d6b8bb05), LL(0xe7e7bbe76b5cd38c), LL(0x6e6ea56e57cbdc39), LL(0xc4c437c46ef395aa), LL(0x03030c03180f061b), LL(0x565645568a13acdc), LL(0x44440d441a49885e), LL(0x7f7fe17fdf9efea0), LL(0xa9a99ea921374f88), LL(0x2a2aa82a4d825467), LL(0xbbbbd6bbb16d6b0a), LL(0xc1c123c146e29f87), LL(0x53535153a202a6f1), LL(0xdcdc57dcae8ba572), LL(0x0b0b2c0b58271653), LL(0x9d9d4e9d9cd32701), LL(0x6c6cad6c47c1d82b), LL(0x3131c43195f562a4), LL(0x7474cd7487b9e8f3), LL(0xf6f6fff6e309f115), LL(0x464605460a438c4c), LL(0xacac8aac092645a5), LL(0x89891e893c970fb5), LL(0x14145014a04428b4), LL(0xe1e1a3e15b42dfba), LL(0x16165816b04e2ca6), LL(0x3a3ae83acdd274f7), LL(0x6969b9696fd0d206), LL(0x09092409482d1241), LL(0x7070dd70a7ade0d7), LL(0xb6b6e2b6d954716f), LL(0xd0d067d0ceb7bd1e), LL(0xeded93ed3b7ec7d6), LL(0xcccc17cc2edb85e2), LL(0x424215422a578468), LL(0x98985a98b4c22d2c), LL(0xa4a4aaa4490e55ed), LL(0x2828a0285d885075), LL(0x5c5c6d5cda31b886), LL(0xf8f8c7f8933fed6b), LL(0x8686228644a411c2), }; static const uint64_t C1[256] = { LL(0xd818186018c07830), LL(0x2623238c2305af46), LL(0xb8c6c63fc67ef991), LL(0xfbe8e887e8136fcd), LL(0xcb878726874ca113), LL(0x11b8b8dab8a9626d), LL(0x0901010401080502), LL(0x0d4f4f214f426e9e), LL(0x9b3636d836adee6c), LL(0xffa6a6a2a6590451), LL(0x0cd2d26fd2debdb9), LL(0x0ef5f5f3f5fb06f7), LL(0x967979f979ef80f2), LL(0x306f6fa16f5fcede), LL(0x6d91917e91fcef3f), LL(0xf852525552aa07a4), LL(0x4760609d6027fdc0), LL(0x35bcbccabc897665), LL(0x379b9b569baccd2b), LL(0x8a8e8e028e048c01), LL(0xd2a3a3b6a371155b), LL(0x6c0c0c300c603c18), LL(0x847b7bf17bff8af6), LL(0x803535d435b5e16a), LL(0xf51d1d741de8693a), LL(0xb3e0e0a7e05347dd), LL(0x21d7d77bd7f6acb3), LL(0x9cc2c22fc25eed99), LL(0x432e2eb82e6d965c), LL(0x294b4b314b627a96), LL(0x5dfefedffea321e1), LL(0xd5575741578216ae), LL(0xbd15155415a8412a), LL(0xe87777c1779fb6ee), LL(0x923737dc37a5eb6e), LL(0x9ee5e5b3e57b56d7), LL(0x139f9f469f8cd923), LL(0x23f0f0e7f0d317fd), LL(0x204a4a354a6a7f94), LL(0x44dada4fda9e95a9), LL(0xa258587d58fa25b0), LL(0xcfc9c903c906ca8f), LL(0x7c2929a429558d52), LL(0x5a0a0a280a502214), LL(0x50b1b1feb1e14f7f), LL(0xc9a0a0baa0691a5d), LL(0x146b6bb16b7fdad6), LL(0xd985852e855cab17), LL(0x3cbdbdcebd817367), LL(0x8f5d5d695dd234ba), LL(0x9010104010805020), LL(0x07f4f4f7f4f303f5), LL(0xddcbcb0bcb16c08b), LL(0xd33e3ef83eedc67c), LL(0x2d0505140528110a), LL(0x78676781671fe6ce), LL(0x97e4e4b7e47353d5), LL(0x0227279c2725bb4e), LL(0x7341411941325882), LL(0xa78b8b168b2c9d0b), LL(0xf6a7a7a6a7510153), LL(0xb27d7de97dcf94fa), LL(0x4995956e95dcfb37), LL(0x56d8d847d88e9fad), LL(0x70fbfbcbfb8b30eb), LL(0xcdeeee9fee2371c1), LL(0xbb7c7ced7cc791f8), LL(0x716666856617e3cc), LL(0x7bdddd53dda68ea7), LL(0xaf17175c17b84b2e), LL(0x454747014702468e), LL(0x1a9e9e429e84dc21), LL(0xd4caca0fca1ec589), LL(0x582d2db42d75995a), LL(0x2ebfbfc6bf917963), LL(0x3f07071c07381b0e), LL(0xacadad8ead012347), LL(0xb05a5a755aea2fb4), LL(0xef838336836cb51b), LL(0xb63333cc3385ff66), LL(0x5c636391633ff2c6), LL(0x1202020802100a04), LL(0x93aaaa92aa393849), LL(0xde7171d971afa8e2), LL(0xc6c8c807c80ecf8d), LL(0xd119196419c87d32), LL(0x3b49493949727092), LL(0x5fd9d943d9869aaf), LL(0x31f2f2eff2c31df9), LL(0xa8e3e3abe34b48db), LL(0xb95b5b715be22ab6), LL(0xbc88881a8834920d), LL(0x3e9a9a529aa4c829), LL(0x0b262698262dbe4c), LL(0xbf3232c8328dfa64), LL(0x59b0b0fab0e94a7d), LL(0xf2e9e983e91b6acf), LL(0x770f0f3c0f78331e), LL(0x33d5d573d5e6a6b7), LL(0xf480803a8074ba1d), LL(0x27bebec2be997c61), LL(0xebcdcd13cd26de87), LL(0x893434d034bde468), LL(0x3248483d487a7590), LL(0x54ffffdbffab24e3), LL(0x8d7a7af57af78ff4), LL(0x6490907a90f4ea3d), LL(0x9d5f5f615fc23ebe), LL(0x3d202080201da040), LL(0x0f6868bd6867d5d0), LL(0xca1a1a681ad07234), LL(0xb7aeae82ae192c41), LL(0x7db4b4eab4c95e75), LL(0xce54544d549a19a8), LL(0x7f93937693ece53b), LL(0x2f222288220daa44), LL(0x6364648d6407e9c8), LL(0x2af1f1e3f1db12ff), LL(0xcc7373d173bfa2e6), LL(0x8212124812905a24), LL(0x7a40401d403a5d80), LL(0x4808082008402810), LL(0x95c3c32bc356e89b), LL(0xdfecec97ec337bc5), LL(0x4ddbdb4bdb9690ab), LL(0xc0a1a1bea1611f5f), LL(0x918d8d0e8d1c8307), LL(0xc83d3df43df5c97a), LL(0x5b97976697ccf133), LL(0x0000000000000000), LL(0xf9cfcf1bcf36d483), LL(0x6e2b2bac2b458756), LL(0xe17676c57697b3ec), LL(0xe68282328264b019), LL(0x28d6d67fd6fea9b1), LL(0xc31b1b6c1bd87736), LL(0x74b5b5eeb5c15b77), LL(0xbeafaf86af112943), LL(0x1d6a6ab56a77dfd4), LL(0xea50505d50ba0da0), LL(0x5745450945124c8a), LL(0x38f3f3ebf3cb18fb), LL(0xad3030c0309df060), LL(0xc4efef9bef2b74c3), LL(0xda3f3ffc3fe5c37e), LL(0xc755554955921caa), LL(0xdba2a2b2a2791059), LL(0xe9eaea8fea0365c9), LL(0x6a656589650fecca), LL(0x03babad2bab96869), LL(0x4a2f2fbc2f65935e), LL(0x8ec0c027c04ee79d), LL(0x60dede5fdebe81a1), LL(0xfc1c1c701ce06c38), LL(0x46fdfdd3fdbb2ee7), LL(0x1f4d4d294d52649a), LL(0x7692927292e4e039), LL(0xfa7575c9758fbcea), LL(0x3606061806301e0c), LL(0xae8a8a128a249809), LL(0x4bb2b2f2b2f94079), LL(0x85e6e6bfe66359d1), LL(0x7e0e0e380e70361c), LL(0xe71f1f7c1ff8633e), LL(0x556262956237f7c4), LL(0x3ad4d477d4eea3b5), LL(0x81a8a89aa829324d), LL(0x5296966296c4f431), LL(0x62f9f9c3f99b3aef), LL(0xa3c5c533c566f697), LL(0x102525942535b14a), LL(0xab59597959f220b2), LL(0xd084842a8454ae15), LL(0xc57272d572b7a7e4), LL(0xec3939e439d5dd72), LL(0x164c4c2d4c5a6198), LL(0x945e5e655eca3bbc), LL(0x9f7878fd78e785f0), LL(0xe53838e038ddd870), LL(0x988c8c0a8c148605), LL(0x17d1d163d1c6b2bf), LL(0xe4a5a5aea5410b57), LL(0xa1e2e2afe2434dd9), LL(0x4e616199612ff8c2), LL(0x42b3b3f6b3f1457b), LL(0x342121842115a542), LL(0x089c9c4a9c94d625), LL(0xee1e1e781ef0663c), LL(0x6143431143225286), LL(0xb1c7c73bc776fc93), LL(0x4ffcfcd7fcb32be5), LL(0x2404041004201408), LL(0xe351515951b208a2), LL(0x2599995e99bcc72f), LL(0x226d6da96d4fc4da), LL(0x650d0d340d68391a), LL(0x79fafacffa8335e9), LL(0x69dfdf5bdfb684a3), LL(0xa97e7ee57ed79bfc), LL(0x19242490243db448), LL(0xfe3b3bec3bc5d776), LL(0x9aabab96ab313d4b), LL(0xf0cece1fce3ed181), LL(0x9911114411885522), LL(0x838f8f068f0c8903), LL(0x044e4e254e4a6b9c), LL(0x66b7b7e6b7d15173), LL(0xe0ebeb8beb0b60cb), LL(0xc13c3cf03cfdcc78), LL(0xfd81813e817cbf1f), LL(0x4094946a94d4fe35), LL(0x1cf7f7fbf7eb0cf3), LL(0x18b9b9deb9a1676f), LL(0x8b13134c13985f26), LL(0x512c2cb02c7d9c58), LL(0x05d3d36bd3d6b8bb), LL(0x8ce7e7bbe76b5cd3), LL(0x396e6ea56e57cbdc), LL(0xaac4c437c46ef395), LL(0x1b03030c03180f06), LL(0xdc565645568a13ac), LL(0x5e44440d441a4988), LL(0xa07f7fe17fdf9efe), LL(0x88a9a99ea921374f), LL(0x672a2aa82a4d8254), LL(0x0abbbbd6bbb16d6b), LL(0x87c1c123c146e29f), LL(0xf153535153a202a6), LL(0x72dcdc57dcae8ba5), LL(0x530b0b2c0b582716), LL(0x019d9d4e9d9cd327), LL(0x2b6c6cad6c47c1d8), LL(0xa43131c43195f562), LL(0xf37474cd7487b9e8), LL(0x15f6f6fff6e309f1), LL(0x4c464605460a438c), LL(0xa5acac8aac092645), LL(0xb589891e893c970f), LL(0xb414145014a04428), LL(0xbae1e1a3e15b42df), LL(0xa616165816b04e2c), LL(0xf73a3ae83acdd274), LL(0x066969b9696fd0d2), LL(0x4109092409482d12), LL(0xd77070dd70a7ade0), LL(0x6fb6b6e2b6d95471), LL(0x1ed0d067d0ceb7bd), LL(0xd6eded93ed3b7ec7), LL(0xe2cccc17cc2edb85), LL(0x68424215422a5784), LL(0x2c98985a98b4c22d), LL(0xeda4a4aaa4490e55), LL(0x752828a0285d8850), LL(0x865c5c6d5cda31b8), LL(0x6bf8f8c7f8933fed), LL(0xc28686228644a411), }; static const uint64_t C2[256] = { LL(0x30d818186018c078), LL(0x462623238c2305af), LL(0x91b8c6c63fc67ef9), LL(0xcdfbe8e887e8136f), LL(0x13cb878726874ca1), LL(0x6d11b8b8dab8a962), LL(0x0209010104010805), LL(0x9e0d4f4f214f426e), LL(0x6c9b3636d836adee), LL(0x51ffa6a6a2a65904), LL(0xb90cd2d26fd2debd), LL(0xf70ef5f5f3f5fb06), LL(0xf2967979f979ef80), LL(0xde306f6fa16f5fce), LL(0x3f6d91917e91fcef), LL(0xa4f852525552aa07), LL(0xc04760609d6027fd), LL(0x6535bcbccabc8976), LL(0x2b379b9b569baccd), LL(0x018a8e8e028e048c), LL(0x5bd2a3a3b6a37115), LL(0x186c0c0c300c603c), LL(0xf6847b7bf17bff8a), LL(0x6a803535d435b5e1), LL(0x3af51d1d741de869), LL(0xddb3e0e0a7e05347), LL(0xb321d7d77bd7f6ac), LL(0x999cc2c22fc25eed), LL(0x5c432e2eb82e6d96), LL(0x96294b4b314b627a), LL(0xe15dfefedffea321), LL(0xaed5575741578216), LL(0x2abd15155415a841), LL(0xeee87777c1779fb6), LL(0x6e923737dc37a5eb), LL(0xd79ee5e5b3e57b56), LL(0x23139f9f469f8cd9), LL(0xfd23f0f0e7f0d317), LL(0x94204a4a354a6a7f), LL(0xa944dada4fda9e95), LL(0xb0a258587d58fa25), LL(0x8fcfc9c903c906ca), LL(0x527c2929a429558d), LL(0x145a0a0a280a5022), LL(0x7f50b1b1feb1e14f), LL(0x5dc9a0a0baa0691a), LL(0xd6146b6bb16b7fda), LL(0x17d985852e855cab), LL(0x673cbdbdcebd8173), LL(0xba8f5d5d695dd234), LL(0x2090101040108050), LL(0xf507f4f4f7f4f303), LL(0x8bddcbcb0bcb16c0), LL(0x7cd33e3ef83eedc6), LL(0x0a2d050514052811), LL(0xce78676781671fe6), LL(0xd597e4e4b7e47353), LL(0x4e0227279c2725bb), LL(0x8273414119413258), LL(0x0ba78b8b168b2c9d), LL(0x53f6a7a7a6a75101), LL(0xfab27d7de97dcf94), LL(0x374995956e95dcfb), LL(0xad56d8d847d88e9f), LL(0xeb70fbfbcbfb8b30), LL(0xc1cdeeee9fee2371), LL(0xf8bb7c7ced7cc791), LL(0xcc716666856617e3), LL(0xa77bdddd53dda68e), LL(0x2eaf17175c17b84b), LL(0x8e45474701470246), LL(0x211a9e9e429e84dc), LL(0x89d4caca0fca1ec5), LL(0x5a582d2db42d7599), LL(0x632ebfbfc6bf9179), LL(0x0e3f07071c07381b), LL(0x47acadad8ead0123), LL(0xb4b05a5a755aea2f), LL(0x1bef838336836cb5), LL(0x66b63333cc3385ff), LL(0xc65c636391633ff2), LL(0x041202020802100a), LL(0x4993aaaa92aa3938), LL(0xe2de7171d971afa8), LL(0x8dc6c8c807c80ecf), LL(0x32d119196419c87d), LL(0x923b494939497270), LL(0xaf5fd9d943d9869a), LL(0xf931f2f2eff2c31d), LL(0xdba8e3e3abe34b48), LL(0xb6b95b5b715be22a), LL(0x0dbc88881a883492), LL(0x293e9a9a529aa4c8), LL(0x4c0b262698262dbe), LL(0x64bf3232c8328dfa), LL(0x7d59b0b0fab0e94a), LL(0xcff2e9e983e91b6a), LL(0x1e770f0f3c0f7833), LL(0xb733d5d573d5e6a6), LL(0x1df480803a8074ba), LL(0x6127bebec2be997c), LL(0x87ebcdcd13cd26de), LL(0x68893434d034bde4), LL(0x903248483d487a75), LL(0xe354ffffdbffab24), LL(0xf48d7a7af57af78f), LL(0x3d6490907a90f4ea), LL(0xbe9d5f5f615fc23e), LL(0x403d202080201da0), LL(0xd00f6868bd6867d5), LL(0x34ca1a1a681ad072), LL(0x41b7aeae82ae192c), LL(0x757db4b4eab4c95e), LL(0xa8ce54544d549a19), LL(0x3b7f93937693ece5), LL(0x442f222288220daa), LL(0xc86364648d6407e9), LL(0xff2af1f1e3f1db12), LL(0xe6cc7373d173bfa2), LL(0x248212124812905a), LL(0x807a40401d403a5d), LL(0x1048080820084028), LL(0x9b95c3c32bc356e8), LL(0xc5dfecec97ec337b), LL(0xab4ddbdb4bdb9690), LL(0x5fc0a1a1bea1611f), LL(0x07918d8d0e8d1c83), LL(0x7ac83d3df43df5c9), LL(0x335b97976697ccf1), LL(0x0000000000000000), LL(0x83f9cfcf1bcf36d4), LL(0x566e2b2bac2b4587), LL(0xece17676c57697b3), LL(0x19e68282328264b0), LL(0xb128d6d67fd6fea9), LL(0x36c31b1b6c1bd877), LL(0x7774b5b5eeb5c15b), LL(0x43beafaf86af1129), LL(0xd41d6a6ab56a77df), LL(0xa0ea50505d50ba0d), LL(0x8a5745450945124c), LL(0xfb38f3f3ebf3cb18), LL(0x60ad3030c0309df0), LL(0xc3c4efef9bef2b74), LL(0x7eda3f3ffc3fe5c3), LL(0xaac755554955921c), LL(0x59dba2a2b2a27910), LL(0xc9e9eaea8fea0365), LL(0xca6a656589650fec), LL(0x6903babad2bab968), LL(0x5e4a2f2fbc2f6593), LL(0x9d8ec0c027c04ee7), LL(0xa160dede5fdebe81), LL(0x38fc1c1c701ce06c), LL(0xe746fdfdd3fdbb2e), LL(0x9a1f4d4d294d5264), LL(0x397692927292e4e0), LL(0xeafa7575c9758fbc), LL(0x0c3606061806301e), LL(0x09ae8a8a128a2498), LL(0x794bb2b2f2b2f940), LL(0xd185e6e6bfe66359), LL(0x1c7e0e0e380e7036), LL(0x3ee71f1f7c1ff863), LL(0xc4556262956237f7), LL(0xb53ad4d477d4eea3), LL(0x4d81a8a89aa82932), LL(0x315296966296c4f4), LL(0xef62f9f9c3f99b3a), LL(0x97a3c5c533c566f6), LL(0x4a102525942535b1), LL(0xb2ab59597959f220), LL(0x15d084842a8454ae), LL(0xe4c57272d572b7a7), LL(0x72ec3939e439d5dd), LL(0x98164c4c2d4c5a61), LL(0xbc945e5e655eca3b), LL(0xf09f7878fd78e785), LL(0x70e53838e038ddd8), LL(0x05988c8c0a8c1486), LL(0xbf17d1d163d1c6b2), LL(0x57e4a5a5aea5410b), LL(0xd9a1e2e2afe2434d), LL(0xc24e616199612ff8), LL(0x7b42b3b3f6b3f145), LL(0x42342121842115a5), LL(0x25089c9c4a9c94d6), LL(0x3cee1e1e781ef066), LL(0x8661434311432252), LL(0x93b1c7c73bc776fc), LL(0xe54ffcfcd7fcb32b), LL(0x0824040410042014), LL(0xa2e351515951b208), LL(0x2f2599995e99bcc7), LL(0xda226d6da96d4fc4), LL(0x1a650d0d340d6839), LL(0xe979fafacffa8335), LL(0xa369dfdf5bdfb684), LL(0xfca97e7ee57ed79b), LL(0x4819242490243db4), LL(0x76fe3b3bec3bc5d7), LL(0x4b9aabab96ab313d), LL(0x81f0cece1fce3ed1), LL(0x2299111144118855), LL(0x03838f8f068f0c89), LL(0x9c044e4e254e4a6b), LL(0x7366b7b7e6b7d151), LL(0xcbe0ebeb8beb0b60), LL(0x78c13c3cf03cfdcc), LL(0x1ffd81813e817cbf), LL(0x354094946a94d4fe), LL(0xf31cf7f7fbf7eb0c), LL(0x6f18b9b9deb9a167), LL(0x268b13134c13985f), LL(0x58512c2cb02c7d9c), LL(0xbb05d3d36bd3d6b8), LL(0xd38ce7e7bbe76b5c), LL(0xdc396e6ea56e57cb), LL(0x95aac4c437c46ef3), LL(0x061b03030c03180f), LL(0xacdc565645568a13), LL(0x885e44440d441a49), LL(0xfea07f7fe17fdf9e), LL(0x4f88a9a99ea92137), LL(0x54672a2aa82a4d82), LL(0x6b0abbbbd6bbb16d), LL(0x9f87c1c123c146e2), LL(0xa6f153535153a202), LL(0xa572dcdc57dcae8b), LL(0x16530b0b2c0b5827), LL(0x27019d9d4e9d9cd3), LL(0xd82b6c6cad6c47c1), LL(0x62a43131c43195f5), LL(0xe8f37474cd7487b9), LL(0xf115f6f6fff6e309), LL(0x8c4c464605460a43), LL(0x45a5acac8aac0926), LL(0x0fb589891e893c97), LL(0x28b414145014a044), LL(0xdfbae1e1a3e15b42), LL(0x2ca616165816b04e), LL(0x74f73a3ae83acdd2), LL(0xd2066969b9696fd0), LL(0x124109092409482d), LL(0xe0d77070dd70a7ad), LL(0x716fb6b6e2b6d954), LL(0xbd1ed0d067d0ceb7), LL(0xc7d6eded93ed3b7e), LL(0x85e2cccc17cc2edb), LL(0x8468424215422a57), LL(0x2d2c98985a98b4c2), LL(0x55eda4a4aaa4490e), LL(0x50752828a0285d88), LL(0xb8865c5c6d5cda31), LL(0xed6bf8f8c7f8933f), LL(0x11c28686228644a4), }; static const uint64_t C3[256] = { LL(0x7830d818186018c0), LL(0xaf462623238c2305), LL(0xf991b8c6c63fc67e), LL(0x6fcdfbe8e887e813), LL(0xa113cb878726874c), LL(0x626d11b8b8dab8a9), LL(0x0502090101040108), LL(0x6e9e0d4f4f214f42), LL(0xee6c9b3636d836ad), LL(0x0451ffa6a6a2a659), LL(0xbdb90cd2d26fd2de), LL(0x06f70ef5f5f3f5fb), LL(0x80f2967979f979ef), LL(0xcede306f6fa16f5f), LL(0xef3f6d91917e91fc), LL(0x07a4f852525552aa), LL(0xfdc04760609d6027), LL(0x766535bcbccabc89), LL(0xcd2b379b9b569bac), LL(0x8c018a8e8e028e04), LL(0x155bd2a3a3b6a371), LL(0x3c186c0c0c300c60), LL(0x8af6847b7bf17bff), LL(0xe16a803535d435b5), LL(0x693af51d1d741de8), LL(0x47ddb3e0e0a7e053), LL(0xacb321d7d77bd7f6), LL(0xed999cc2c22fc25e), LL(0x965c432e2eb82e6d), LL(0x7a96294b4b314b62), LL(0x21e15dfefedffea3), LL(0x16aed55757415782), LL(0x412abd15155415a8), LL(0xb6eee87777c1779f), LL(0xeb6e923737dc37a5), LL(0x56d79ee5e5b3e57b), LL(0xd923139f9f469f8c), LL(0x17fd23f0f0e7f0d3), LL(0x7f94204a4a354a6a), LL(0x95a944dada4fda9e), LL(0x25b0a258587d58fa), LL(0xca8fcfc9c903c906), LL(0x8d527c2929a42955), LL(0x22145a0a0a280a50), LL(0x4f7f50b1b1feb1e1), LL(0x1a5dc9a0a0baa069), LL(0xdad6146b6bb16b7f), LL(0xab17d985852e855c), LL(0x73673cbdbdcebd81), LL(0x34ba8f5d5d695dd2), LL(0x5020901010401080), LL(0x03f507f4f4f7f4f3), LL(0xc08bddcbcb0bcb16), LL(0xc67cd33e3ef83eed), LL(0x110a2d0505140528), LL(0xe6ce78676781671f), LL(0x53d597e4e4b7e473), LL(0xbb4e0227279c2725), LL(0x5882734141194132), LL(0x9d0ba78b8b168b2c), LL(0x0153f6a7a7a6a751), LL(0x94fab27d7de97dcf), LL(0xfb374995956e95dc), LL(0x9fad56d8d847d88e), LL(0x30eb70fbfbcbfb8b), LL(0x71c1cdeeee9fee23), LL(0x91f8bb7c7ced7cc7), LL(0xe3cc716666856617), LL(0x8ea77bdddd53dda6), LL(0x4b2eaf17175c17b8), LL(0x468e454747014702), LL(0xdc211a9e9e429e84), LL(0xc589d4caca0fca1e), LL(0x995a582d2db42d75), LL(0x79632ebfbfc6bf91), LL(0x1b0e3f07071c0738), LL(0x2347acadad8ead01), LL(0x2fb4b05a5a755aea), LL(0xb51bef838336836c), LL(0xff66b63333cc3385), LL(0xf2c65c636391633f), LL(0x0a04120202080210), LL(0x384993aaaa92aa39), LL(0xa8e2de7171d971af), LL(0xcf8dc6c8c807c80e), LL(0x7d32d119196419c8), LL(0x70923b4949394972), LL(0x9aaf5fd9d943d986), LL(0x1df931f2f2eff2c3), LL(0x48dba8e3e3abe34b), LL(0x2ab6b95b5b715be2), LL(0x920dbc88881a8834), LL(0xc8293e9a9a529aa4), LL(0xbe4c0b262698262d), LL(0xfa64bf3232c8328d), LL(0x4a7d59b0b0fab0e9), LL(0x6acff2e9e983e91b), LL(0x331e770f0f3c0f78), LL(0xa6b733d5d573d5e6), LL(0xba1df480803a8074), LL(0x7c6127bebec2be99), LL(0xde87ebcdcd13cd26), LL(0xe468893434d034bd), LL(0x75903248483d487a), LL(0x24e354ffffdbffab), LL(0x8ff48d7a7af57af7), LL(0xea3d6490907a90f4), LL(0x3ebe9d5f5f615fc2), LL(0xa0403d202080201d), LL(0xd5d00f6868bd6867), LL(0x7234ca1a1a681ad0), LL(0x2c41b7aeae82ae19), LL(0x5e757db4b4eab4c9), LL(0x19a8ce54544d549a), LL(0xe53b7f93937693ec), LL(0xaa442f222288220d), LL(0xe9c86364648d6407), LL(0x12ff2af1f1e3f1db), LL(0xa2e6cc7373d173bf), LL(0x5a24821212481290), LL(0x5d807a40401d403a), LL(0x2810480808200840), LL(0xe89b95c3c32bc356), LL(0x7bc5dfecec97ec33), LL(0x90ab4ddbdb4bdb96), LL(0x1f5fc0a1a1bea161), LL(0x8307918d8d0e8d1c), LL(0xc97ac83d3df43df5), LL(0xf1335b97976697cc), LL(0x0000000000000000), LL(0xd483f9cfcf1bcf36), LL(0x87566e2b2bac2b45), LL(0xb3ece17676c57697), LL(0xb019e68282328264), LL(0xa9b128d6d67fd6fe), LL(0x7736c31b1b6c1bd8), LL(0x5b7774b5b5eeb5c1), LL(0x2943beafaf86af11), LL(0xdfd41d6a6ab56a77), LL(0x0da0ea50505d50ba), LL(0x4c8a574545094512), LL(0x18fb38f3f3ebf3cb), LL(0xf060ad3030c0309d), LL(0x74c3c4efef9bef2b), LL(0xc37eda3f3ffc3fe5), LL(0x1caac75555495592), LL(0x1059dba2a2b2a279), LL(0x65c9e9eaea8fea03), LL(0xecca6a656589650f), LL(0x686903babad2bab9), LL(0x935e4a2f2fbc2f65), LL(0xe79d8ec0c027c04e), LL(0x81a160dede5fdebe), LL(0x6c38fc1c1c701ce0), LL(0x2ee746fdfdd3fdbb), LL(0x649a1f4d4d294d52), LL(0xe0397692927292e4), LL(0xbceafa7575c9758f), LL(0x1e0c360606180630), LL(0x9809ae8a8a128a24), LL(0x40794bb2b2f2b2f9), LL(0x59d185e6e6bfe663), LL(0x361c7e0e0e380e70), LL(0x633ee71f1f7c1ff8), LL(0xf7c4556262956237), LL(0xa3b53ad4d477d4ee), LL(0x324d81a8a89aa829), LL(0xf4315296966296c4), LL(0x3aef62f9f9c3f99b), LL(0xf697a3c5c533c566), LL(0xb14a102525942535), LL(0x20b2ab59597959f2), LL(0xae15d084842a8454), LL(0xa7e4c57272d572b7), LL(0xdd72ec3939e439d5), LL(0x6198164c4c2d4c5a), LL(0x3bbc945e5e655eca), LL(0x85f09f7878fd78e7), LL(0xd870e53838e038dd), LL(0x8605988c8c0a8c14), LL(0xb2bf17d1d163d1c6), LL(0x0b57e4a5a5aea541), LL(0x4dd9a1e2e2afe243), LL(0xf8c24e616199612f), LL(0x457b42b3b3f6b3f1), LL(0xa542342121842115), LL(0xd625089c9c4a9c94), LL(0x663cee1e1e781ef0), LL(0x5286614343114322), LL(0xfc93b1c7c73bc776), LL(0x2be54ffcfcd7fcb3), LL(0x1408240404100420), LL(0x08a2e351515951b2), LL(0xc72f2599995e99bc), LL(0xc4da226d6da96d4f), LL(0x391a650d0d340d68), LL(0x35e979fafacffa83), LL(0x84a369dfdf5bdfb6), LL(0x9bfca97e7ee57ed7), LL(0xb44819242490243d), LL(0xd776fe3b3bec3bc5), LL(0x3d4b9aabab96ab31), LL(0xd181f0cece1fce3e), LL(0x5522991111441188), LL(0x8903838f8f068f0c), LL(0x6b9c044e4e254e4a), LL(0x517366b7b7e6b7d1), LL(0x60cbe0ebeb8beb0b), LL(0xcc78c13c3cf03cfd), LL(0xbf1ffd81813e817c), LL(0xfe354094946a94d4), LL(0x0cf31cf7f7fbf7eb), LL(0x676f18b9b9deb9a1), LL(0x5f268b13134c1398), LL(0x9c58512c2cb02c7d), LL(0xb8bb05d3d36bd3d6), LL(0x5cd38ce7e7bbe76b), LL(0xcbdc396e6ea56e57), LL(0xf395aac4c437c46e), LL(0x0f061b03030c0318), LL(0x13acdc565645568a), LL(0x49885e44440d441a), LL(0x9efea07f7fe17fdf), LL(0x374f88a9a99ea921), LL(0x8254672a2aa82a4d), LL(0x6d6b0abbbbd6bbb1), LL(0xe29f87c1c123c146), LL(0x02a6f153535153a2), LL(0x8ba572dcdc57dcae), LL(0x2716530b0b2c0b58), LL(0xd327019d9d4e9d9c), LL(0xc1d82b6c6cad6c47), LL(0xf562a43131c43195), LL(0xb9e8f37474cd7487), LL(0x09f115f6f6fff6e3), LL(0x438c4c464605460a), LL(0x2645a5acac8aac09), LL(0x970fb589891e893c), LL(0x4428b414145014a0), LL(0x42dfbae1e1a3e15b), LL(0x4e2ca616165816b0), LL(0xd274f73a3ae83acd), LL(0xd0d2066969b9696f), LL(0x2d12410909240948), LL(0xade0d77070dd70a7), LL(0x54716fb6b6e2b6d9), LL(0xb7bd1ed0d067d0ce), LL(0x7ec7d6eded93ed3b), LL(0xdb85e2cccc17cc2e), LL(0x578468424215422a), LL(0xc22d2c98985a98b4), LL(0x0e55eda4a4aaa449), LL(0x8850752828a0285d), LL(0x31b8865c5c6d5cda), LL(0x3fed6bf8f8c7f893), LL(0xa411c28686228644), }; static const uint64_t C4[256] = { LL(0xc07830d818186018), LL(0x05af462623238c23), LL(0x7ef991b8c6c63fc6), LL(0x136fcdfbe8e887e8), LL(0x4ca113cb87872687), LL(0xa9626d11b8b8dab8), LL(0x0805020901010401), LL(0x426e9e0d4f4f214f), LL(0xadee6c9b3636d836), LL(0x590451ffa6a6a2a6), LL(0xdebdb90cd2d26fd2), LL(0xfb06f70ef5f5f3f5), LL(0xef80f2967979f979), LL(0x5fcede306f6fa16f), LL(0xfcef3f6d91917e91), LL(0xaa07a4f852525552), LL(0x27fdc04760609d60), LL(0x89766535bcbccabc), LL(0xaccd2b379b9b569b), LL(0x048c018a8e8e028e), LL(0x71155bd2a3a3b6a3), LL(0x603c186c0c0c300c), LL(0xff8af6847b7bf17b), LL(0xb5e16a803535d435), LL(0xe8693af51d1d741d), LL(0x5347ddb3e0e0a7e0), LL(0xf6acb321d7d77bd7), LL(0x5eed999cc2c22fc2), LL(0x6d965c432e2eb82e), LL(0x627a96294b4b314b), LL(0xa321e15dfefedffe), LL(0x8216aed557574157), LL(0xa8412abd15155415), LL(0x9fb6eee87777c177), LL(0xa5eb6e923737dc37), LL(0x7b56d79ee5e5b3e5), LL(0x8cd923139f9f469f), LL(0xd317fd23f0f0e7f0), LL(0x6a7f94204a4a354a), LL(0x9e95a944dada4fda), LL(0xfa25b0a258587d58), LL(0x06ca8fcfc9c903c9), LL(0x558d527c2929a429), LL(0x5022145a0a0a280a), LL(0xe14f7f50b1b1feb1), LL(0x691a5dc9a0a0baa0), LL(0x7fdad6146b6bb16b), LL(0x5cab17d985852e85), LL(0x8173673cbdbdcebd), LL(0xd234ba8f5d5d695d), LL(0x8050209010104010), LL(0xf303f507f4f4f7f4), LL(0x16c08bddcbcb0bcb), LL(0xedc67cd33e3ef83e), LL(0x28110a2d05051405), LL(0x1fe6ce7867678167), LL(0x7353d597e4e4b7e4), LL(0x25bb4e0227279c27), LL(0x3258827341411941), LL(0x2c9d0ba78b8b168b), LL(0x510153f6a7a7a6a7), LL(0xcf94fab27d7de97d), LL(0xdcfb374995956e95), LL(0x8e9fad56d8d847d8), LL(0x8b30eb70fbfbcbfb), LL(0x2371c1cdeeee9fee), LL(0xc791f8bb7c7ced7c), LL(0x17e3cc7166668566), LL(0xa68ea77bdddd53dd), LL(0xb84b2eaf17175c17), LL(0x02468e4547470147), LL(0x84dc211a9e9e429e), LL(0x1ec589d4caca0fca), LL(0x75995a582d2db42d), LL(0x9179632ebfbfc6bf), LL(0x381b0e3f07071c07), LL(0x012347acadad8ead), LL(0xea2fb4b05a5a755a), LL(0x6cb51bef83833683), LL(0x85ff66b63333cc33), LL(0x3ff2c65c63639163), LL(0x100a041202020802), LL(0x39384993aaaa92aa), LL(0xafa8e2de7171d971), LL(0x0ecf8dc6c8c807c8), LL(0xc87d32d119196419), LL(0x7270923b49493949), LL(0x869aaf5fd9d943d9), LL(0xc31df931f2f2eff2), LL(0x4b48dba8e3e3abe3), LL(0xe22ab6b95b5b715b), LL(0x34920dbc88881a88), LL(0xa4c8293e9a9a529a), LL(0x2dbe4c0b26269826), LL(0x8dfa64bf3232c832), LL(0xe94a7d59b0b0fab0), LL(0x1b6acff2e9e983e9), LL(0x78331e770f0f3c0f), LL(0xe6a6b733d5d573d5), LL(0x74ba1df480803a80), LL(0x997c6127bebec2be), LL(0x26de87ebcdcd13cd), LL(0xbde468893434d034), LL(0x7a75903248483d48), LL(0xab24e354ffffdbff), LL(0xf78ff48d7a7af57a), LL(0xf4ea3d6490907a90), LL(0xc23ebe9d5f5f615f), LL(0x1da0403d20208020), LL(0x67d5d00f6868bd68), LL(0xd07234ca1a1a681a), LL(0x192c41b7aeae82ae), LL(0xc95e757db4b4eab4), LL(0x9a19a8ce54544d54), LL(0xece53b7f93937693), LL(0x0daa442f22228822), LL(0x07e9c86364648d64), LL(0xdb12ff2af1f1e3f1), LL(0xbfa2e6cc7373d173), LL(0x905a248212124812), LL(0x3a5d807a40401d40), LL(0x4028104808082008), LL(0x56e89b95c3c32bc3), LL(0x337bc5dfecec97ec), LL(0x9690ab4ddbdb4bdb), LL(0x611f5fc0a1a1bea1), LL(0x1c8307918d8d0e8d), LL(0xf5c97ac83d3df43d), LL(0xccf1335b97976697), LL(0x0000000000000000), LL(0x36d483f9cfcf1bcf), LL(0x4587566e2b2bac2b), LL(0x97b3ece17676c576), LL(0x64b019e682823282), LL(0xfea9b128d6d67fd6), LL(0xd87736c31b1b6c1b), LL(0xc15b7774b5b5eeb5), LL(0x112943beafaf86af), LL(0x77dfd41d6a6ab56a), LL(0xba0da0ea50505d50), LL(0x124c8a5745450945), LL(0xcb18fb38f3f3ebf3), LL(0x9df060ad3030c030), LL(0x2b74c3c4efef9bef), LL(0xe5c37eda3f3ffc3f), LL(0x921caac755554955), LL(0x791059dba2a2b2a2), LL(0x0365c9e9eaea8fea), LL(0x0fecca6a65658965), LL(0xb9686903babad2ba), LL(0x65935e4a2f2fbc2f), LL(0x4ee79d8ec0c027c0), LL(0xbe81a160dede5fde), LL(0xe06c38fc1c1c701c), LL(0xbb2ee746fdfdd3fd), LL(0x52649a1f4d4d294d), LL(0xe4e0397692927292), LL(0x8fbceafa7575c975), LL(0x301e0c3606061806), LL(0x249809ae8a8a128a), LL(0xf940794bb2b2f2b2), LL(0x6359d185e6e6bfe6), LL(0x70361c7e0e0e380e), LL(0xf8633ee71f1f7c1f), LL(0x37f7c45562629562), LL(0xeea3b53ad4d477d4), LL(0x29324d81a8a89aa8), LL(0xc4f4315296966296), LL(0x9b3aef62f9f9c3f9), LL(0x66f697a3c5c533c5), LL(0x35b14a1025259425), LL(0xf220b2ab59597959), LL(0x54ae15d084842a84), LL(0xb7a7e4c57272d572), LL(0xd5dd72ec3939e439), LL(0x5a6198164c4c2d4c), LL(0xca3bbc945e5e655e), LL(0xe785f09f7878fd78), LL(0xddd870e53838e038), LL(0x148605988c8c0a8c), LL(0xc6b2bf17d1d163d1), LL(0x410b57e4a5a5aea5), LL(0x434dd9a1e2e2afe2), LL(0x2ff8c24e61619961), LL(0xf1457b42b3b3f6b3), LL(0x15a5423421218421), LL(0x94d625089c9c4a9c), LL(0xf0663cee1e1e781e), LL(0x2252866143431143), LL(0x76fc93b1c7c73bc7), LL(0xb32be54ffcfcd7fc), LL(0x2014082404041004), LL(0xb208a2e351515951), LL(0xbcc72f2599995e99), LL(0x4fc4da226d6da96d), LL(0x68391a650d0d340d), LL(0x8335e979fafacffa), LL(0xb684a369dfdf5bdf), LL(0xd79bfca97e7ee57e), LL(0x3db4481924249024), LL(0xc5d776fe3b3bec3b), LL(0x313d4b9aabab96ab), LL(0x3ed181f0cece1fce), LL(0x8855229911114411), LL(0x0c8903838f8f068f), LL(0x4a6b9c044e4e254e), LL(0xd1517366b7b7e6b7), LL(0x0b60cbe0ebeb8beb), LL(0xfdcc78c13c3cf03c), LL(0x7cbf1ffd81813e81), LL(0xd4fe354094946a94), LL(0xeb0cf31cf7f7fbf7), LL(0xa1676f18b9b9deb9), LL(0x985f268b13134c13), LL(0x7d9c58512c2cb02c), LL(0xd6b8bb05d3d36bd3), LL(0x6b5cd38ce7e7bbe7), LL(0x57cbdc396e6ea56e), LL(0x6ef395aac4c437c4), LL(0x180f061b03030c03), LL(0x8a13acdc56564556), LL(0x1a49885e44440d44), LL(0xdf9efea07f7fe17f), LL(0x21374f88a9a99ea9), LL(0x4d8254672a2aa82a), LL(0xb16d6b0abbbbd6bb), LL(0x46e29f87c1c123c1), LL(0xa202a6f153535153), LL(0xae8ba572dcdc57dc), LL(0x582716530b0b2c0b), LL(0x9cd327019d9d4e9d), LL(0x47c1d82b6c6cad6c), LL(0x95f562a43131c431), LL(0x87b9e8f37474cd74), LL(0xe309f115f6f6fff6), LL(0x0a438c4c46460546), LL(0x092645a5acac8aac), LL(0x3c970fb589891e89), LL(0xa04428b414145014), LL(0x5b42dfbae1e1a3e1), LL(0xb04e2ca616165816), LL(0xcdd274f73a3ae83a), LL(0x6fd0d2066969b969), LL(0x482d124109092409), LL(0xa7ade0d77070dd70), LL(0xd954716fb6b6e2b6), LL(0xceb7bd1ed0d067d0), LL(0x3b7ec7d6eded93ed), LL(0x2edb85e2cccc17cc), LL(0x2a57846842421542), LL(0xb4c22d2c98985a98), LL(0x490e55eda4a4aaa4), LL(0x5d8850752828a028), LL(0xda31b8865c5c6d5c), LL(0x933fed6bf8f8c7f8), LL(0x44a411c286862286), }; static const uint64_t C5[256] = { LL(0x18c07830d8181860), LL(0x2305af462623238c), LL(0xc67ef991b8c6c63f), LL(0xe8136fcdfbe8e887), LL(0x874ca113cb878726), LL(0xb8a9626d11b8b8da), LL(0x0108050209010104), LL(0x4f426e9e0d4f4f21), LL(0x36adee6c9b3636d8), LL(0xa6590451ffa6a6a2), LL(0xd2debdb90cd2d26f), LL(0xf5fb06f70ef5f5f3), LL(0x79ef80f2967979f9), LL(0x6f5fcede306f6fa1), LL(0x91fcef3f6d91917e), LL(0x52aa07a4f8525255), LL(0x6027fdc04760609d), LL(0xbc89766535bcbcca), LL(0x9baccd2b379b9b56), LL(0x8e048c018a8e8e02), LL(0xa371155bd2a3a3b6), LL(0x0c603c186c0c0c30), LL(0x7bff8af6847b7bf1), LL(0x35b5e16a803535d4), LL(0x1de8693af51d1d74), LL(0xe05347ddb3e0e0a7), LL(0xd7f6acb321d7d77b), LL(0xc25eed999cc2c22f), LL(0x2e6d965c432e2eb8), LL(0x4b627a96294b4b31), LL(0xfea321e15dfefedf), LL(0x578216aed5575741), LL(0x15a8412abd151554), LL(0x779fb6eee87777c1), LL(0x37a5eb6e923737dc), LL(0xe57b56d79ee5e5b3), LL(0x9f8cd923139f9f46), LL(0xf0d317fd23f0f0e7), LL(0x4a6a7f94204a4a35), LL(0xda9e95a944dada4f), LL(0x58fa25b0a258587d), LL(0xc906ca8fcfc9c903), LL(0x29558d527c2929a4), LL(0x0a5022145a0a0a28), LL(0xb1e14f7f50b1b1fe), LL(0xa0691a5dc9a0a0ba), LL(0x6b7fdad6146b6bb1), LL(0x855cab17d985852e), LL(0xbd8173673cbdbdce), LL(0x5dd234ba8f5d5d69), LL(0x1080502090101040), LL(0xf4f303f507f4f4f7), LL(0xcb16c08bddcbcb0b), LL(0x3eedc67cd33e3ef8), LL(0x0528110a2d050514), LL(0x671fe6ce78676781), LL(0xe47353d597e4e4b7), LL(0x2725bb4e0227279c), LL(0x4132588273414119), LL(0x8b2c9d0ba78b8b16), LL(0xa7510153f6a7a7a6), LL(0x7dcf94fab27d7de9), LL(0x95dcfb374995956e), LL(0xd88e9fad56d8d847), LL(0xfb8b30eb70fbfbcb), LL(0xee2371c1cdeeee9f), LL(0x7cc791f8bb7c7ced), LL(0x6617e3cc71666685), LL(0xdda68ea77bdddd53), LL(0x17b84b2eaf17175c), LL(0x4702468e45474701), LL(0x9e84dc211a9e9e42), LL(0xca1ec589d4caca0f), LL(0x2d75995a582d2db4), LL(0xbf9179632ebfbfc6), LL(0x07381b0e3f07071c), LL(0xad012347acadad8e), LL(0x5aea2fb4b05a5a75), LL(0x836cb51bef838336), LL(0x3385ff66b63333cc), LL(0x633ff2c65c636391), LL(0x02100a0412020208), LL(0xaa39384993aaaa92), LL(0x71afa8e2de7171d9), LL(0xc80ecf8dc6c8c807), LL(0x19c87d32d1191964), LL(0x497270923b494939), LL(0xd9869aaf5fd9d943), LL(0xf2c31df931f2f2ef), LL(0xe34b48dba8e3e3ab), LL(0x5be22ab6b95b5b71), LL(0x8834920dbc88881a), LL(0x9aa4c8293e9a9a52), LL(0x262dbe4c0b262698), LL(0x328dfa64bf3232c8), LL(0xb0e94a7d59b0b0fa), LL(0xe91b6acff2e9e983), LL(0x0f78331e770f0f3c), LL(0xd5e6a6b733d5d573), LL(0x8074ba1df480803a), LL(0xbe997c6127bebec2), LL(0xcd26de87ebcdcd13), LL(0x34bde468893434d0), LL(0x487a75903248483d), LL(0xffab24e354ffffdb), LL(0x7af78ff48d7a7af5), LL(0x90f4ea3d6490907a), LL(0x5fc23ebe9d5f5f61), LL(0x201da0403d202080), LL(0x6867d5d00f6868bd), LL(0x1ad07234ca1a1a68), LL(0xae192c41b7aeae82), LL(0xb4c95e757db4b4ea), LL(0x549a19a8ce54544d), LL(0x93ece53b7f939376), LL(0x220daa442f222288), LL(0x6407e9c86364648d), LL(0xf1db12ff2af1f1e3), LL(0x73bfa2e6cc7373d1), LL(0x12905a2482121248), LL(0x403a5d807a40401d), LL(0x0840281048080820), LL(0xc356e89b95c3c32b), LL(0xec337bc5dfecec97), LL(0xdb9690ab4ddbdb4b), LL(0xa1611f5fc0a1a1be), LL(0x8d1c8307918d8d0e), LL(0x3df5c97ac83d3df4), LL(0x97ccf1335b979766), LL(0x0000000000000000), LL(0xcf36d483f9cfcf1b), LL(0x2b4587566e2b2bac), LL(0x7697b3ece17676c5), LL(0x8264b019e6828232), LL(0xd6fea9b128d6d67f), LL(0x1bd87736c31b1b6c), LL(0xb5c15b7774b5b5ee), LL(0xaf112943beafaf86), LL(0x6a77dfd41d6a6ab5), LL(0x50ba0da0ea50505d), LL(0x45124c8a57454509), LL(0xf3cb18fb38f3f3eb), LL(0x309df060ad3030c0), LL(0xef2b74c3c4efef9b), LL(0x3fe5c37eda3f3ffc), LL(0x55921caac7555549), LL(0xa2791059dba2a2b2), LL(0xea0365c9e9eaea8f), LL(0x650fecca6a656589), LL(0xbab9686903babad2), LL(0x2f65935e4a2f2fbc), LL(0xc04ee79d8ec0c027), LL(0xdebe81a160dede5f), LL(0x1ce06c38fc1c1c70), LL(0xfdbb2ee746fdfdd3), LL(0x4d52649a1f4d4d29), LL(0x92e4e03976929272), LL(0x758fbceafa7575c9), LL(0x06301e0c36060618), LL(0x8a249809ae8a8a12), LL(0xb2f940794bb2b2f2), LL(0xe66359d185e6e6bf), LL(0x0e70361c7e0e0e38), LL(0x1ff8633ee71f1f7c), LL(0x6237f7c455626295), LL(0xd4eea3b53ad4d477), LL(0xa829324d81a8a89a), LL(0x96c4f43152969662), LL(0xf99b3aef62f9f9c3), LL(0xc566f697a3c5c533), LL(0x2535b14a10252594), LL(0x59f220b2ab595979), LL(0x8454ae15d084842a), LL(0x72b7a7e4c57272d5), LL(0x39d5dd72ec3939e4), LL(0x4c5a6198164c4c2d), LL(0x5eca3bbc945e5e65), LL(0x78e785f09f7878fd), LL(0x38ddd870e53838e0), LL(0x8c148605988c8c0a), LL(0xd1c6b2bf17d1d163), LL(0xa5410b57e4a5a5ae), LL(0xe2434dd9a1e2e2af), LL(0x612ff8c24e616199), LL(0xb3f1457b42b3b3f6), LL(0x2115a54234212184), LL(0x9c94d625089c9c4a), LL(0x1ef0663cee1e1e78), LL(0x4322528661434311), LL(0xc776fc93b1c7c73b), LL(0xfcb32be54ffcfcd7), LL(0x0420140824040410), LL(0x51b208a2e3515159), LL(0x99bcc72f2599995e), LL(0x6d4fc4da226d6da9), LL(0x0d68391a650d0d34), LL(0xfa8335e979fafacf), LL(0xdfb684a369dfdf5b), LL(0x7ed79bfca97e7ee5), LL(0x243db44819242490), LL(0x3bc5d776fe3b3bec), LL(0xab313d4b9aabab96), LL(0xce3ed181f0cece1f), LL(0x1188552299111144), LL(0x8f0c8903838f8f06), LL(0x4e4a6b9c044e4e25), LL(0xb7d1517366b7b7e6), LL(0xeb0b60cbe0ebeb8b), LL(0x3cfdcc78c13c3cf0), LL(0x817cbf1ffd81813e), LL(0x94d4fe354094946a), LL(0xf7eb0cf31cf7f7fb), LL(0xb9a1676f18b9b9de), LL(0x13985f268b13134c), LL(0x2c7d9c58512c2cb0), LL(0xd3d6b8bb05d3d36b), LL(0xe76b5cd38ce7e7bb), LL(0x6e57cbdc396e6ea5), LL(0xc46ef395aac4c437), LL(0x03180f061b03030c), LL(0x568a13acdc565645), LL(0x441a49885e44440d), LL(0x7fdf9efea07f7fe1), LL(0xa921374f88a9a99e), LL(0x2a4d8254672a2aa8), LL(0xbbb16d6b0abbbbd6), LL(0xc146e29f87c1c123), LL(0x53a202a6f1535351), LL(0xdcae8ba572dcdc57), LL(0x0b582716530b0b2c), LL(0x9d9cd327019d9d4e), LL(0x6c47c1d82b6c6cad), LL(0x3195f562a43131c4), LL(0x7487b9e8f37474cd), LL(0xf6e309f115f6f6ff), LL(0x460a438c4c464605), LL(0xac092645a5acac8a), LL(0x893c970fb589891e), LL(0x14a04428b4141450), LL(0xe15b42dfbae1e1a3), LL(0x16b04e2ca6161658), LL(0x3acdd274f73a3ae8), LL(0x696fd0d2066969b9), LL(0x09482d1241090924), LL(0x70a7ade0d77070dd), LL(0xb6d954716fb6b6e2), LL(0xd0ceb7bd1ed0d067), LL(0xed3b7ec7d6eded93), LL(0xcc2edb85e2cccc17), LL(0x422a578468424215), LL(0x98b4c22d2c98985a), LL(0xa4490e55eda4a4aa), LL(0x285d8850752828a0), LL(0x5cda31b8865c5c6d), LL(0xf8933fed6bf8f8c7), LL(0x8644a411c2868622), }; static const uint64_t C6[256] = { LL(0x6018c07830d81818), LL(0x8c2305af46262323), LL(0x3fc67ef991b8c6c6), LL(0x87e8136fcdfbe8e8), LL(0x26874ca113cb8787), LL(0xdab8a9626d11b8b8), LL(0x0401080502090101), LL(0x214f426e9e0d4f4f), LL(0xd836adee6c9b3636), LL(0xa2a6590451ffa6a6), LL(0x6fd2debdb90cd2d2), LL(0xf3f5fb06f70ef5f5), LL(0xf979ef80f2967979), LL(0xa16f5fcede306f6f), LL(0x7e91fcef3f6d9191), LL(0x5552aa07a4f85252), LL(0x9d6027fdc0476060), LL(0xcabc89766535bcbc), LL(0x569baccd2b379b9b), LL(0x028e048c018a8e8e), LL(0xb6a371155bd2a3a3), LL(0x300c603c186c0c0c), LL(0xf17bff8af6847b7b), LL(0xd435b5e16a803535), LL(0x741de8693af51d1d), LL(0xa7e05347ddb3e0e0), LL(0x7bd7f6acb321d7d7), LL(0x2fc25eed999cc2c2), LL(0xb82e6d965c432e2e), LL(0x314b627a96294b4b), LL(0xdffea321e15dfefe), LL(0x41578216aed55757), LL(0x5415a8412abd1515), LL(0xc1779fb6eee87777), LL(0xdc37a5eb6e923737), LL(0xb3e57b56d79ee5e5), LL(0x469f8cd923139f9f), LL(0xe7f0d317fd23f0f0), LL(0x354a6a7f94204a4a), LL(0x4fda9e95a944dada), LL(0x7d58fa25b0a25858), LL(0x03c906ca8fcfc9c9), LL(0xa429558d527c2929), LL(0x280a5022145a0a0a), LL(0xfeb1e14f7f50b1b1), LL(0xbaa0691a5dc9a0a0), LL(0xb16b7fdad6146b6b), LL(0x2e855cab17d98585), LL(0xcebd8173673cbdbd), LL(0x695dd234ba8f5d5d), LL(0x4010805020901010), LL(0xf7f4f303f507f4f4), LL(0x0bcb16c08bddcbcb), LL(0xf83eedc67cd33e3e), LL(0x140528110a2d0505), LL(0x81671fe6ce786767), LL(0xb7e47353d597e4e4), LL(0x9c2725bb4e022727), LL(0x1941325882734141), LL(0x168b2c9d0ba78b8b), LL(0xa6a7510153f6a7a7), LL(0xe97dcf94fab27d7d), LL(0x6e95dcfb37499595), LL(0x47d88e9fad56d8d8), LL(0xcbfb8b30eb70fbfb), LL(0x9fee2371c1cdeeee), LL(0xed7cc791f8bb7c7c), LL(0x856617e3cc716666), LL(0x53dda68ea77bdddd), LL(0x5c17b84b2eaf1717), LL(0x014702468e454747), LL(0x429e84dc211a9e9e), LL(0x0fca1ec589d4caca), LL(0xb42d75995a582d2d), LL(0xc6bf9179632ebfbf), LL(0x1c07381b0e3f0707), LL(0x8ead012347acadad), LL(0x755aea2fb4b05a5a), LL(0x36836cb51bef8383), LL(0xcc3385ff66b63333), LL(0x91633ff2c65c6363), LL(0x0802100a04120202), LL(0x92aa39384993aaaa), LL(0xd971afa8e2de7171), LL(0x07c80ecf8dc6c8c8), LL(0x6419c87d32d11919), LL(0x39497270923b4949), LL(0x43d9869aaf5fd9d9), LL(0xeff2c31df931f2f2), LL(0xabe34b48dba8e3e3), LL(0x715be22ab6b95b5b), LL(0x1a8834920dbc8888), LL(0x529aa4c8293e9a9a), LL(0x98262dbe4c0b2626), LL(0xc8328dfa64bf3232), LL(0xfab0e94a7d59b0b0), LL(0x83e91b6acff2e9e9), LL(0x3c0f78331e770f0f), LL(0x73d5e6a6b733d5d5), LL(0x3a8074ba1df48080), LL(0xc2be997c6127bebe), LL(0x13cd26de87ebcdcd), LL(0xd034bde468893434), LL(0x3d487a7590324848), LL(0xdbffab24e354ffff), LL(0xf57af78ff48d7a7a), LL(0x7a90f4ea3d649090), LL(0x615fc23ebe9d5f5f), LL(0x80201da0403d2020), LL(0xbd6867d5d00f6868), LL(0x681ad07234ca1a1a), LL(0x82ae192c41b7aeae), LL(0xeab4c95e757db4b4), LL(0x4d549a19a8ce5454), LL(0x7693ece53b7f9393), LL(0x88220daa442f2222), LL(0x8d6407e9c8636464), LL(0xe3f1db12ff2af1f1), LL(0xd173bfa2e6cc7373), LL(0x4812905a24821212), LL(0x1d403a5d807a4040), LL(0x2008402810480808), LL(0x2bc356e89b95c3c3), LL(0x97ec337bc5dfecec), LL(0x4bdb9690ab4ddbdb), LL(0xbea1611f5fc0a1a1), LL(0x0e8d1c8307918d8d), LL(0xf43df5c97ac83d3d), LL(0x6697ccf1335b9797), LL(0x0000000000000000), LL(0x1bcf36d483f9cfcf), LL(0xac2b4587566e2b2b), LL(0xc57697b3ece17676), LL(0x328264b019e68282), LL(0x7fd6fea9b128d6d6), LL(0x6c1bd87736c31b1b), LL(0xeeb5c15b7774b5b5), LL(0x86af112943beafaf), LL(0xb56a77dfd41d6a6a), LL(0x5d50ba0da0ea5050), LL(0x0945124c8a574545), LL(0xebf3cb18fb38f3f3), LL(0xc0309df060ad3030), LL(0x9bef2b74c3c4efef), LL(0xfc3fe5c37eda3f3f), LL(0x4955921caac75555), LL(0xb2a2791059dba2a2), LL(0x8fea0365c9e9eaea), LL(0x89650fecca6a6565), LL(0xd2bab9686903baba), LL(0xbc2f65935e4a2f2f), LL(0x27c04ee79d8ec0c0), LL(0x5fdebe81a160dede), LL(0x701ce06c38fc1c1c), LL(0xd3fdbb2ee746fdfd), LL(0x294d52649a1f4d4d), LL(0x7292e4e039769292), LL(0xc9758fbceafa7575), LL(0x1806301e0c360606), LL(0x128a249809ae8a8a), LL(0xf2b2f940794bb2b2), LL(0xbfe66359d185e6e6), LL(0x380e70361c7e0e0e), LL(0x7c1ff8633ee71f1f), LL(0x956237f7c4556262), LL(0x77d4eea3b53ad4d4), LL(0x9aa829324d81a8a8), LL(0x6296c4f431529696), LL(0xc3f99b3aef62f9f9), LL(0x33c566f697a3c5c5), LL(0x942535b14a102525), LL(0x7959f220b2ab5959), LL(0x2a8454ae15d08484), LL(0xd572b7a7e4c57272), LL(0xe439d5dd72ec3939), LL(0x2d4c5a6198164c4c), LL(0x655eca3bbc945e5e), LL(0xfd78e785f09f7878), LL(0xe038ddd870e53838), LL(0x0a8c148605988c8c), LL(0x63d1c6b2bf17d1d1), LL(0xaea5410b57e4a5a5), LL(0xafe2434dd9a1e2e2), LL(0x99612ff8c24e6161), LL(0xf6b3f1457b42b3b3), LL(0x842115a542342121), LL(0x4a9c94d625089c9c), LL(0x781ef0663cee1e1e), LL(0x1143225286614343), LL(0x3bc776fc93b1c7c7), LL(0xd7fcb32be54ffcfc), LL(0x1004201408240404), LL(0x5951b208a2e35151), LL(0x5e99bcc72f259999), LL(0xa96d4fc4da226d6d), LL(0x340d68391a650d0d), LL(0xcffa8335e979fafa), LL(0x5bdfb684a369dfdf), LL(0xe57ed79bfca97e7e), LL(0x90243db448192424), LL(0xec3bc5d776fe3b3b), LL(0x96ab313d4b9aabab), LL(0x1fce3ed181f0cece), LL(0x4411885522991111), LL(0x068f0c8903838f8f), LL(0x254e4a6b9c044e4e), LL(0xe6b7d1517366b7b7), LL(0x8beb0b60cbe0ebeb), LL(0xf03cfdcc78c13c3c), LL(0x3e817cbf1ffd8181), LL(0x6a94d4fe35409494), LL(0xfbf7eb0cf31cf7f7), LL(0xdeb9a1676f18b9b9), LL(0x4c13985f268b1313), LL(0xb02c7d9c58512c2c), LL(0x6bd3d6b8bb05d3d3), LL(0xbbe76b5cd38ce7e7), LL(0xa56e57cbdc396e6e), LL(0x37c46ef395aac4c4), LL(0x0c03180f061b0303), LL(0x45568a13acdc5656), LL(0x0d441a49885e4444), LL(0xe17fdf9efea07f7f), LL(0x9ea921374f88a9a9), LL(0xa82a4d8254672a2a), LL(0xd6bbb16d6b0abbbb), LL(0x23c146e29f87c1c1), LL(0x5153a202a6f15353), LL(0x57dcae8ba572dcdc), LL(0x2c0b582716530b0b), LL(0x4e9d9cd327019d9d), LL(0xad6c47c1d82b6c6c), LL(0xc43195f562a43131), LL(0xcd7487b9e8f37474), LL(0xfff6e309f115f6f6), LL(0x05460a438c4c4646), LL(0x8aac092645a5acac), LL(0x1e893c970fb58989), LL(0x5014a04428b41414), LL(0xa3e15b42dfbae1e1), LL(0x5816b04e2ca61616), LL(0xe83acdd274f73a3a), LL(0xb9696fd0d2066969), LL(0x2409482d12410909), LL(0xdd70a7ade0d77070), LL(0xe2b6d954716fb6b6), LL(0x67d0ceb7bd1ed0d0), LL(0x93ed3b7ec7d6eded), LL(0x17cc2edb85e2cccc), LL(0x15422a5784684242), LL(0x5a98b4c22d2c9898), LL(0xaaa4490e55eda4a4), LL(0xa0285d8850752828), LL(0x6d5cda31b8865c5c), LL(0xc7f8933fed6bf8f8), LL(0x228644a411c28686), }; static const uint64_t C7[256] = { LL(0x186018c07830d818), LL(0x238c2305af462623), LL(0xc63fc67ef991b8c6), LL(0xe887e8136fcdfbe8), LL(0x8726874ca113cb87), LL(0xb8dab8a9626d11b8), LL(0x0104010805020901), LL(0x4f214f426e9e0d4f), LL(0x36d836adee6c9b36), LL(0xa6a2a6590451ffa6), LL(0xd26fd2debdb90cd2), LL(0xf5f3f5fb06f70ef5), LL(0x79f979ef80f29679), LL(0x6fa16f5fcede306f), LL(0x917e91fcef3f6d91), LL(0x525552aa07a4f852), LL(0x609d6027fdc04760), LL(0xbccabc89766535bc), LL(0x9b569baccd2b379b), LL(0x8e028e048c018a8e), LL(0xa3b6a371155bd2a3), LL(0x0c300c603c186c0c), LL(0x7bf17bff8af6847b), LL(0x35d435b5e16a8035), LL(0x1d741de8693af51d), LL(0xe0a7e05347ddb3e0), LL(0xd77bd7f6acb321d7), LL(0xc22fc25eed999cc2), LL(0x2eb82e6d965c432e), LL(0x4b314b627a96294b), LL(0xfedffea321e15dfe), LL(0x5741578216aed557), LL(0x155415a8412abd15), LL(0x77c1779fb6eee877), LL(0x37dc37a5eb6e9237), LL(0xe5b3e57b56d79ee5), LL(0x9f469f8cd923139f), LL(0xf0e7f0d317fd23f0), LL(0x4a354a6a7f94204a), LL(0xda4fda9e95a944da), LL(0x587d58fa25b0a258), LL(0xc903c906ca8fcfc9), LL(0x29a429558d527c29), LL(0x0a280a5022145a0a), LL(0xb1feb1e14f7f50b1), LL(0xa0baa0691a5dc9a0), LL(0x6bb16b7fdad6146b), LL(0x852e855cab17d985), LL(0xbdcebd8173673cbd), LL(0x5d695dd234ba8f5d), LL(0x1040108050209010), LL(0xf4f7f4f303f507f4), LL(0xcb0bcb16c08bddcb), LL(0x3ef83eedc67cd33e), LL(0x05140528110a2d05), LL(0x6781671fe6ce7867), LL(0xe4b7e47353d597e4), LL(0x279c2725bb4e0227), LL(0x4119413258827341), LL(0x8b168b2c9d0ba78b), LL(0xa7a6a7510153f6a7), LL(0x7de97dcf94fab27d), LL(0x956e95dcfb374995), LL(0xd847d88e9fad56d8), LL(0xfbcbfb8b30eb70fb), LL(0xee9fee2371c1cdee), LL(0x7ced7cc791f8bb7c), LL(0x66856617e3cc7166), LL(0xdd53dda68ea77bdd), LL(0x175c17b84b2eaf17), LL(0x47014702468e4547), LL(0x9e429e84dc211a9e), LL(0xca0fca1ec589d4ca), LL(0x2db42d75995a582d), LL(0xbfc6bf9179632ebf), LL(0x071c07381b0e3f07), LL(0xad8ead012347acad), LL(0x5a755aea2fb4b05a), LL(0x8336836cb51bef83), LL(0x33cc3385ff66b633), LL(0x6391633ff2c65c63), LL(0x020802100a041202), LL(0xaa92aa39384993aa), LL(0x71d971afa8e2de71), LL(0xc807c80ecf8dc6c8), LL(0x196419c87d32d119), LL(0x4939497270923b49), LL(0xd943d9869aaf5fd9), LL(0xf2eff2c31df931f2), LL(0xe3abe34b48dba8e3), LL(0x5b715be22ab6b95b), LL(0x881a8834920dbc88), LL(0x9a529aa4c8293e9a), LL(0x2698262dbe4c0b26), LL(0x32c8328dfa64bf32), LL(0xb0fab0e94a7d59b0), LL(0xe983e91b6acff2e9), LL(0x0f3c0f78331e770f), LL(0xd573d5e6a6b733d5), LL(0x803a8074ba1df480), LL(0xbec2be997c6127be), LL(0xcd13cd26de87ebcd), LL(0x34d034bde4688934), LL(0x483d487a75903248), LL(0xffdbffab24e354ff), LL(0x7af57af78ff48d7a), LL(0x907a90f4ea3d6490), LL(0x5f615fc23ebe9d5f), LL(0x2080201da0403d20), LL(0x68bd6867d5d00f68), LL(0x1a681ad07234ca1a), LL(0xae82ae192c41b7ae), LL(0xb4eab4c95e757db4), LL(0x544d549a19a8ce54), LL(0x937693ece53b7f93), LL(0x2288220daa442f22), LL(0x648d6407e9c86364), LL(0xf1e3f1db12ff2af1), LL(0x73d173bfa2e6cc73), LL(0x124812905a248212), LL(0x401d403a5d807a40), LL(0x0820084028104808), LL(0xc32bc356e89b95c3), LL(0xec97ec337bc5dfec), LL(0xdb4bdb9690ab4ddb), LL(0xa1bea1611f5fc0a1), LL(0x8d0e8d1c8307918d), LL(0x3df43df5c97ac83d), LL(0x976697ccf1335b97), LL(0x0000000000000000), LL(0xcf1bcf36d483f9cf), LL(0x2bac2b4587566e2b), LL(0x76c57697b3ece176), LL(0x82328264b019e682), LL(0xd67fd6fea9b128d6), LL(0x1b6c1bd87736c31b), LL(0xb5eeb5c15b7774b5), LL(0xaf86af112943beaf), LL(0x6ab56a77dfd41d6a), LL(0x505d50ba0da0ea50), LL(0x450945124c8a5745), LL(0xf3ebf3cb18fb38f3), LL(0x30c0309df060ad30), LL(0xef9bef2b74c3c4ef), LL(0x3ffc3fe5c37eda3f), LL(0x554955921caac755), LL(0xa2b2a2791059dba2), LL(0xea8fea0365c9e9ea), LL(0x6589650fecca6a65), LL(0xbad2bab9686903ba), LL(0x2fbc2f65935e4a2f), LL(0xc027c04ee79d8ec0), LL(0xde5fdebe81a160de), LL(0x1c701ce06c38fc1c), LL(0xfdd3fdbb2ee746fd), LL(0x4d294d52649a1f4d), LL(0x927292e4e0397692), LL(0x75c9758fbceafa75), LL(0x061806301e0c3606), LL(0x8a128a249809ae8a), LL(0xb2f2b2f940794bb2), LL(0xe6bfe66359d185e6), LL(0x0e380e70361c7e0e), LL(0x1f7c1ff8633ee71f), LL(0x62956237f7c45562), LL(0xd477d4eea3b53ad4), LL(0xa89aa829324d81a8), LL(0x966296c4f4315296), LL(0xf9c3f99b3aef62f9), LL(0xc533c566f697a3c5), LL(0x25942535b14a1025), LL(0x597959f220b2ab59), LL(0x842a8454ae15d084), LL(0x72d572b7a7e4c572), LL(0x39e439d5dd72ec39), LL(0x4c2d4c5a6198164c), LL(0x5e655eca3bbc945e), LL(0x78fd78e785f09f78), LL(0x38e038ddd870e538), LL(0x8c0a8c148605988c), LL(0xd163d1c6b2bf17d1), LL(0xa5aea5410b57e4a5), LL(0xe2afe2434dd9a1e2), LL(0x6199612ff8c24e61), LL(0xb3f6b3f1457b42b3), LL(0x21842115a5423421), LL(0x9c4a9c94d625089c), LL(0x1e781ef0663cee1e), LL(0x4311432252866143), LL(0xc73bc776fc93b1c7), LL(0xfcd7fcb32be54ffc), LL(0x0410042014082404), LL(0x515951b208a2e351), LL(0x995e99bcc72f2599), LL(0x6da96d4fc4da226d), LL(0x0d340d68391a650d), LL(0xfacffa8335e979fa), LL(0xdf5bdfb684a369df), LL(0x7ee57ed79bfca97e), LL(0x2490243db4481924), LL(0x3bec3bc5d776fe3b), LL(0xab96ab313d4b9aab), LL(0xce1fce3ed181f0ce), LL(0x1144118855229911), LL(0x8f068f0c8903838f), LL(0x4e254e4a6b9c044e), LL(0xb7e6b7d1517366b7), LL(0xeb8beb0b60cbe0eb), LL(0x3cf03cfdcc78c13c), LL(0x813e817cbf1ffd81), LL(0x946a94d4fe354094), LL(0xf7fbf7eb0cf31cf7), LL(0xb9deb9a1676f18b9), LL(0x134c13985f268b13), LL(0x2cb02c7d9c58512c), LL(0xd36bd3d6b8bb05d3), LL(0xe7bbe76b5cd38ce7), LL(0x6ea56e57cbdc396e), LL(0xc437c46ef395aac4), LL(0x030c03180f061b03), LL(0x5645568a13acdc56), LL(0x440d441a49885e44), LL(0x7fe17fdf9efea07f), LL(0xa99ea921374f88a9), LL(0x2aa82a4d8254672a), LL(0xbbd6bbb16d6b0abb), LL(0xc123c146e29f87c1), LL(0x535153a202a6f153), LL(0xdc57dcae8ba572dc), LL(0x0b2c0b582716530b), LL(0x9d4e9d9cd327019d), LL(0x6cad6c47c1d82b6c), LL(0x31c43195f562a431), LL(0x74cd7487b9e8f374), LL(0xf6fff6e309f115f6), LL(0x4605460a438c4c46), LL(0xac8aac092645a5ac), LL(0x891e893c970fb589), LL(0x145014a04428b414), LL(0xe1a3e15b42dfbae1), LL(0x165816b04e2ca616), LL(0x3ae83acdd274f73a), LL(0x69b9696fd0d20669), LL(0x092409482d124109), LL(0x70dd70a7ade0d770), LL(0xb6e2b6d954716fb6), LL(0xd067d0ceb7bd1ed0), LL(0xed93ed3b7ec7d6ed), LL(0xcc17cc2edb85e2cc), LL(0x4215422a57846842), LL(0x985a98b4c22d2c98), LL(0xa4aaa4490e55eda4), LL(0x28a0285d88507528), LL(0x5c6d5cda31b8865c), LL(0xf8c7f8933fed6bf8), LL(0x86228644a411c286), }; #ifdef OBSOLETE static const uint64_t C0[256] = { LL(0x1818281878c0d878), LL(0x23236523af0526af), LL(0xc6c657c6f97eb8f9), LL(0xe8e825e86f13fb6f), LL(0x87879487a14ccba1), LL(0xb8b8d5b862a91162), LL(0x0101030105080905), LL(0x4f4fd14f6e420d6e), LL(0x36365a36eead9bee), LL(0xa6a6f7a60459ff04), LL(0xd2d26bd2bdde0cbd), LL(0xf5f502f506fb0e06), LL(0x79798b7980ef9680), LL(0x6f6fb16fce5f30ce), LL(0x9191ae91effc6def), LL(0x5252f65207aaf807), LL(0x6060a060fd2747fd), LL(0xbcbcd9bc76893576), LL(0x9b9bb09bcdac37cd), LL(0x8e8e8f8e8c048a8c), LL(0xa3a3f8a31571d215), LL(0x0c0c140c3c606c3c), LL(0x7b7b8d7b8aff848a), LL(0x35355f35e1b580e1), LL(0x1d1d271d69e8f569), LL(0xe0e03de04753b347), LL(0xd7d764d7acf621ac), LL(0xc2c25bc2ed5e9ced), LL(0x2e2e722e966d4396), LL(0x4b4bdd4b7a62297a), LL(0xfefe1ffe21a35d21), LL(0x5757f9571682d516), LL(0x15153f1541a8bd41), LL(0x77779977b69fe8b6), LL(0x37375937eba592eb), LL(0xe5e532e5567b9e56), LL(0x9f9fbc9fd98c13d9), LL(0xf0f00df017d32317), LL(0x4a4ade4a7f6a207f), LL(0xdada73da959e4495), LL(0x5858e85825faa225), LL(0xc9c946c9ca06cfca), LL(0x29297b298d557c8d), LL(0x0a0a1e0a22505a22), LL(0xb1b1ceb14fe1504f), LL(0xa0a0fda01a69c91a), LL(0x6b6bbd6bda7f14da), LL(0x85859285ab5cd9ab), LL(0xbdbddabd73813c73), LL(0x5d5de75d34d28f34), LL(0x1010301050809050), LL(0xf4f401f403f30703), LL(0xcbcb40cbc016ddc0), LL(0x3e3e423ec6edd3c6), LL(0x05050f0511282d11), LL(0x6767a967e61f78e6), LL(0xe4e431e453739753), LL(0x27276927bb2502bb), LL(0x4141c34158327358), LL(0x8b8b808b9d2ca79d), LL(0xa7a7f4a70151f601), LL(0x7d7d877d94cfb294), LL(0x9595a295fbdc49fb), LL(0xd8d875d89f8e569f), LL(0xfbfb10fb308b7030), LL(0xeeee2fee7123cd71), LL(0x7c7c847c91c7bb91), LL(0x6666aa66e31771e3), LL(0xdddd7add8ea67b8e), LL(0x171739174bb8af4b), LL(0x4747c94746024546), LL(0x9e9ebf9edc841adc), LL(0xcaca43cac51ed4c5), LL(0x2d2d772d99755899), LL(0xbfbfdcbf79912e79), LL(0x070709071b383f1b), LL(0xadadeaad2301ac23), LL(0x5a5aee5a2feab02f), LL(0x83839883b56cefb5), LL(0x33335533ff85b6ff), LL(0x6363a563f23f5cf2), LL(0x020206020a10120a), LL(0xaaaae3aa38399338), LL(0x71719371a8afdea8), LL(0xc8c845c8cf0ec6cf), LL(0x19192b197dc8d17d), LL(0x4949db4970723b70), LL(0xd9d976d99a865f9a), LL(0xf2f20bf21dc3311d), LL(0xe3e338e3484ba848), LL(0x5b5bed5b2ae2b92a), LL(0x888885889234bc92), LL(0x9a9ab39ac8a43ec8), LL(0x26266a26be2d0bbe), LL(0x32325632fa8dbffa), LL(0xb0b0cdb04ae9594a), LL(0xe9e926e96a1bf26a), LL(0x0f0f110f33787733), LL(0xd5d562d5a6e633a6), LL(0x80809d80ba74f4ba), LL(0xbebedfbe7c99277c), LL(0xcdcd4acdde26ebde), LL(0x34345c34e4bd89e4), LL(0x4848d848757a3275), LL(0xffff1cff24ab5424), LL(0x7a7a8e7a8ff78d8f), LL(0x9090ad90eaf464ea), LL(0x5f5fe15f3ec29d3e), LL(0x20206020a01d3da0), LL(0x6868b868d5670fd5), LL(0x1a1a2e1a72d0ca72), LL(0xaeaeefae2c19b72c), LL(0xb4b4c1b45ec97d5e), LL(0x5454fc54199ace19), LL(0x9393a893e5ec7fe5), LL(0x22226622aa0d2faa), LL(0x6464ac64e90763e9), LL(0xf1f10ef112db2a12), LL(0x73739573a2bfcca2), LL(0x121236125a90825a), LL(0x4040c0405d3a7a5d), LL(0x0808180828404828), LL(0xc3c358c3e85695e8), LL(0xecec29ec7b33df7b), LL(0xdbdb70db90964d90), LL(0xa1a1fea11f61c01f), LL(0x8d8d8a8d831c9183), LL(0x3d3d473dc9f5c8c9), LL(0x9797a497f1cc5bf1), LL(0x0000000000000000), LL(0xcfcf4ccfd436f9d4), LL(0x2b2b7d2b87456e87), LL(0x76769a76b397e1b3), LL(0x82829b82b064e6b0), LL(0xd6d667d6a9fe28a9), LL(0x1b1b2d1b77d8c377), LL(0xb5b5c2b55bc1745b), LL(0xafafecaf2911be29), LL(0x6a6abe6adf771ddf), LL(0x5050f0500dbaea0d), LL(0x4545cf454c12574c), LL(0xf3f308f318cb3818), LL(0x30305030f09dadf0), LL(0xefef2cef742bc474), LL(0x3f3f413fc3e5dac3), LL(0x5555ff551c92c71c), LL(0xa2a2fba21079db10), LL(0xeaea23ea6503e965), LL(0x6565af65ec0f6aec), LL(0xbabad3ba68b90368), LL(0x2f2f712f93654a93), LL(0xc0c05dc0e74e8ee7), LL(0xdede7fde81be6081), LL(0x1c1c241c6ce0fc6c), LL(0xfdfd1afd2ebb462e), LL(0x4d4dd74d64521f64), LL(0x9292ab92e0e476e0), LL(0x75759f75bc8ffabc), LL(0x06060a061e30361e), LL(0x8a8a838a9824ae98), LL(0xb2b2cbb240f94b40), LL(0xe6e637e659638559), LL(0x0e0e120e36707e36), LL(0x1f1f211f63f8e763), LL(0x6262a662f73755f7), LL(0xd4d461d4a3ee3aa3), LL(0xa8a8e5a832298132), LL(0x9696a796f4c452f4), LL(0xf9f916f93a9b623a), LL(0xc5c552c5f666a3f6), LL(0x25256f25b13510b1), LL(0x5959eb5920f2ab20), LL(0x84849184ae54d0ae), LL(0x72729672a7b7c5a7), LL(0x39394b39ddd5ecdd), LL(0x4c4cd44c615a1661), LL(0x5e5ee25e3bca943b), LL(0x7878887885e79f85), LL(0x38384838d8dde5d8), LL(0x8c8c898c86149886), LL(0xd1d16ed1b2c617b2), LL(0xa5a5f2a50b41e40b), LL(0xe2e23be24d43a14d), LL(0x6161a361f82f4ef8), LL(0xb3b3c8b345f14245), LL(0x21216321a51534a5), LL(0x9c9cb99cd69408d6), LL(0x1e1e221e66f0ee66), LL(0x4343c54352226152), LL(0xc7c754c7fc76b1fc), LL(0xfcfc19fc2bb34f2b), LL(0x04040c0414202414), LL(0x5151f35108b2e308), LL(0x9999b699c7bc25c7), LL(0x6d6db76dc44f22c4), LL(0x0d0d170d39686539), LL(0xfafa13fa35837935), LL(0xdfdf7cdf84b66984), LL(0x7e7e827e9bd7a99b), LL(0x24246c24b43d19b4), LL(0x3b3b4d3bd7c5fed7), LL(0xababe0ab3d319a3d), LL(0xcece4fced13ef0d1), LL(0x1111331155889955), LL(0x8f8f8c8f890c8389), LL(0x4e4ed24e6b4a046b), LL(0xb7b7c4b751d16651), LL(0xebeb20eb600be060), LL(0x3c3c443cccfdc1cc), LL(0x81819e81bf7cfdbf), LL(0x9494a194fed440fe), LL(0xf7f704f70ceb1c0c), LL(0xb9b9d6b967a11867), LL(0x131335135f988b5f), LL(0x2c2c742c9c7d519c), LL(0xd3d368d3b8d605b8), LL(0xe7e734e75c6b8c5c), LL(0x6e6eb26ecb5739cb), LL(0xc4c451c4f36eaaf3), LL(0x030305030f181b0f), LL(0x5656fa56138adc13), LL(0x4444cc44491a5e49), LL(0x7f7f817f9edfa09e), LL(0xa9a9e6a937218837), LL(0x2a2a7e2a824d6782), LL(0xbbbbd0bb6db10a6d), LL(0xc1c15ec1e24687e2), LL(0x5353f55302a2f102), LL(0xdcdc79dc8bae728b), LL(0x0b0b1d0b27585327), LL(0x9d9dba9dd39c01d3), LL(0x6c6cb46cc1472bc1), LL(0x31315331f595a4f5), LL(0x74749c74b987f3b9), LL(0xf6f607f609e31509), LL(0x4646ca46430a4c43), LL(0xacace9ac2609a526), LL(0x89898689973cb597), LL(0x14143c1444a0b444), LL(0xe1e13ee1425bba42), LL(0x16163a164eb0a64e), LL(0x3a3a4e3ad2cdf7d2), LL(0x6969bb69d06f06d0), LL(0x09091b092d48412d), LL(0x70709070ada7d7ad), LL(0xb6b6c7b654d96f54), LL(0xd0d06dd0b7ce1eb7), LL(0xeded2aed7e3bd67e), LL(0xcccc49ccdb2ee2db), LL(0x4242c642572a6857), LL(0x9898b598c2b42cc2), LL(0xa4a4f1a40e49ed0e), LL(0x28287828885d7588), LL(0x5c5ce45c31da8631), LL(0xf8f815f83f936b3f), LL(0x86869786a444c2a4), }; static const uint64_t C1[256] = { LL(0x781818281878c0d8), LL(0xaf23236523af0526), LL(0xf9c6c657c6f97eb8), LL(0x6fe8e825e86f13fb), LL(0xa187879487a14ccb), LL(0x62b8b8d5b862a911), LL(0x0501010301050809), LL(0x6e4f4fd14f6e420d), LL(0xee36365a36eead9b), LL(0x04a6a6f7a60459ff), LL(0xbdd2d26bd2bdde0c), LL(0x06f5f502f506fb0e), LL(0x8079798b7980ef96), LL(0xce6f6fb16fce5f30), LL(0xef9191ae91effc6d), LL(0x075252f65207aaf8), LL(0xfd6060a060fd2747), LL(0x76bcbcd9bc768935), LL(0xcd9b9bb09bcdac37), LL(0x8c8e8e8f8e8c048a), LL(0x15a3a3f8a31571d2), LL(0x3c0c0c140c3c606c), LL(0x8a7b7b8d7b8aff84), LL(0xe135355f35e1b580), LL(0x691d1d271d69e8f5), LL(0x47e0e03de04753b3), LL(0xacd7d764d7acf621), LL(0xedc2c25bc2ed5e9c), LL(0x962e2e722e966d43), LL(0x7a4b4bdd4b7a6229), LL(0x21fefe1ffe21a35d), LL(0x165757f9571682d5), LL(0x4115153f1541a8bd), LL(0xb677779977b69fe8), LL(0xeb37375937eba592), LL(0x56e5e532e5567b9e), LL(0xd99f9fbc9fd98c13), LL(0x17f0f00df017d323), LL(0x7f4a4ade4a7f6a20), LL(0x95dada73da959e44), LL(0x255858e85825faa2), LL(0xcac9c946c9ca06cf), LL(0x8d29297b298d557c), LL(0x220a0a1e0a22505a), LL(0x4fb1b1ceb14fe150), LL(0x1aa0a0fda01a69c9), LL(0xda6b6bbd6bda7f14), LL(0xab85859285ab5cd9), LL(0x73bdbddabd73813c), LL(0x345d5de75d34d28f), LL(0x5010103010508090), LL(0x03f4f401f403f307), LL(0xc0cbcb40cbc016dd), LL(0xc63e3e423ec6edd3), LL(0x1105050f0511282d), LL(0xe66767a967e61f78), LL(0x53e4e431e4537397), LL(0xbb27276927bb2502), LL(0x584141c341583273), LL(0x9d8b8b808b9d2ca7), LL(0x01a7a7f4a70151f6), LL(0x947d7d877d94cfb2), LL(0xfb9595a295fbdc49), LL(0x9fd8d875d89f8e56), LL(0x30fbfb10fb308b70), LL(0x71eeee2fee7123cd), LL(0x917c7c847c91c7bb), LL(0xe36666aa66e31771), LL(0x8edddd7add8ea67b), LL(0x4b171739174bb8af), LL(0x464747c947460245), LL(0xdc9e9ebf9edc841a), LL(0xc5caca43cac51ed4), LL(0x992d2d772d997558), LL(0x79bfbfdcbf79912e), LL(0x1b070709071b383f), LL(0x23adadeaad2301ac), LL(0x2f5a5aee5a2feab0), LL(0xb583839883b56cef), LL(0xff33335533ff85b6), LL(0xf26363a563f23f5c), LL(0x0a020206020a1012), LL(0x38aaaae3aa383993), LL(0xa871719371a8afde), LL(0xcfc8c845c8cf0ec6), LL(0x7d19192b197dc8d1), LL(0x704949db4970723b), LL(0x9ad9d976d99a865f), LL(0x1df2f20bf21dc331), LL(0x48e3e338e3484ba8), LL(0x2a5b5bed5b2ae2b9), LL(0x92888885889234bc), LL(0xc89a9ab39ac8a43e), LL(0xbe26266a26be2d0b), LL(0xfa32325632fa8dbf), LL(0x4ab0b0cdb04ae959), LL(0x6ae9e926e96a1bf2), LL(0x330f0f110f337877), LL(0xa6d5d562d5a6e633), LL(0xba80809d80ba74f4), LL(0x7cbebedfbe7c9927), LL(0xdecdcd4acdde26eb), LL(0xe434345c34e4bd89), LL(0x754848d848757a32), LL(0x24ffff1cff24ab54), LL(0x8f7a7a8e7a8ff78d), LL(0xea9090ad90eaf464), LL(0x3e5f5fe15f3ec29d), LL(0xa020206020a01d3d), LL(0xd56868b868d5670f), LL(0x721a1a2e1a72d0ca), LL(0x2caeaeefae2c19b7), LL(0x5eb4b4c1b45ec97d), LL(0x195454fc54199ace), LL(0xe59393a893e5ec7f), LL(0xaa22226622aa0d2f), LL(0xe96464ac64e90763), LL(0x12f1f10ef112db2a), LL(0xa273739573a2bfcc), LL(0x5a121236125a9082), LL(0x5d4040c0405d3a7a), LL(0x2808081808284048), LL(0xe8c3c358c3e85695), LL(0x7becec29ec7b33df), LL(0x90dbdb70db90964d), LL(0x1fa1a1fea11f61c0), LL(0x838d8d8a8d831c91), LL(0xc93d3d473dc9f5c8), LL(0xf19797a497f1cc5b), LL(0x0000000000000000), LL(0xd4cfcf4ccfd436f9), LL(0x872b2b7d2b87456e), LL(0xb376769a76b397e1), LL(0xb082829b82b064e6), LL(0xa9d6d667d6a9fe28), LL(0x771b1b2d1b77d8c3), LL(0x5bb5b5c2b55bc174), LL(0x29afafecaf2911be), LL(0xdf6a6abe6adf771d), LL(0x0d5050f0500dbaea), LL(0x4c4545cf454c1257), LL(0x18f3f308f318cb38), LL(0xf030305030f09dad), LL(0x74efef2cef742bc4), LL(0xc33f3f413fc3e5da), LL(0x1c5555ff551c92c7), LL(0x10a2a2fba21079db), LL(0x65eaea23ea6503e9), LL(0xec6565af65ec0f6a), LL(0x68babad3ba68b903), LL(0x932f2f712f93654a), LL(0xe7c0c05dc0e74e8e), LL(0x81dede7fde81be60), LL(0x6c1c1c241c6ce0fc), LL(0x2efdfd1afd2ebb46), LL(0x644d4dd74d64521f), LL(0xe09292ab92e0e476), LL(0xbc75759f75bc8ffa), LL(0x1e06060a061e3036), LL(0x988a8a838a9824ae), LL(0x40b2b2cbb240f94b), LL(0x59e6e637e6596385), LL(0x360e0e120e36707e), LL(0x631f1f211f63f8e7), LL(0xf76262a662f73755), LL(0xa3d4d461d4a3ee3a), LL(0x32a8a8e5a8322981), LL(0xf49696a796f4c452), LL(0x3af9f916f93a9b62), LL(0xf6c5c552c5f666a3), LL(0xb125256f25b13510), LL(0x205959eb5920f2ab), LL(0xae84849184ae54d0), LL(0xa772729672a7b7c5), LL(0xdd39394b39ddd5ec), LL(0x614c4cd44c615a16), LL(0x3b5e5ee25e3bca94), LL(0x857878887885e79f), LL(0xd838384838d8dde5), LL(0x868c8c898c861498), LL(0xb2d1d16ed1b2c617), LL(0x0ba5a5f2a50b41e4), LL(0x4de2e23be24d43a1), LL(0xf86161a361f82f4e), LL(0x45b3b3c8b345f142), LL(0xa521216321a51534), LL(0xd69c9cb99cd69408), LL(0x661e1e221e66f0ee), LL(0x524343c543522261), LL(0xfcc7c754c7fc76b1), LL(0x2bfcfc19fc2bb34f), LL(0x1404040c04142024), LL(0x085151f35108b2e3), LL(0xc79999b699c7bc25), LL(0xc46d6db76dc44f22), LL(0x390d0d170d396865), LL(0x35fafa13fa358379), LL(0x84dfdf7cdf84b669), LL(0x9b7e7e827e9bd7a9), LL(0xb424246c24b43d19), LL(0xd73b3b4d3bd7c5fe), LL(0x3dababe0ab3d319a), LL(0xd1cece4fced13ef0), LL(0x5511113311558899), LL(0x898f8f8c8f890c83), LL(0x6b4e4ed24e6b4a04), LL(0x51b7b7c4b751d166), LL(0x60ebeb20eb600be0), LL(0xcc3c3c443cccfdc1), LL(0xbf81819e81bf7cfd), LL(0xfe9494a194fed440), LL(0x0cf7f704f70ceb1c), LL(0x67b9b9d6b967a118), LL(0x5f131335135f988b), LL(0x9c2c2c742c9c7d51), LL(0xb8d3d368d3b8d605), LL(0x5ce7e734e75c6b8c), LL(0xcb6e6eb26ecb5739), LL(0xf3c4c451c4f36eaa), LL(0x0f030305030f181b), LL(0x135656fa56138adc), LL(0x494444cc44491a5e), LL(0x9e7f7f817f9edfa0), LL(0x37a9a9e6a9372188), LL(0x822a2a7e2a824d67), LL(0x6dbbbbd0bb6db10a), LL(0xe2c1c15ec1e24687), LL(0x025353f55302a2f1), LL(0x8bdcdc79dc8bae72), LL(0x270b0b1d0b275853), LL(0xd39d9dba9dd39c01), LL(0xc16c6cb46cc1472b), LL(0xf531315331f595a4), LL(0xb974749c74b987f3), LL(0x09f6f607f609e315), LL(0x434646ca46430a4c), LL(0x26acace9ac2609a5), LL(0x9789898689973cb5), LL(0x4414143c1444a0b4), LL(0x42e1e13ee1425bba), LL(0x4e16163a164eb0a6), LL(0xd23a3a4e3ad2cdf7), LL(0xd06969bb69d06f06), LL(0x2d09091b092d4841), LL(0xad70709070ada7d7), LL(0x54b6b6c7b654d96f), LL(0xb7d0d06dd0b7ce1e), LL(0x7eeded2aed7e3bd6), LL(0xdbcccc49ccdb2ee2), LL(0x574242c642572a68), LL(0xc29898b598c2b42c), LL(0x0ea4a4f1a40e49ed), LL(0x8828287828885d75), LL(0x315c5ce45c31da86), LL(0x3ff8f815f83f936b), LL(0xa486869786a444c2), }; static const uint64_t C2[256] = { LL(0xd8781818281878c0), LL(0x26af23236523af05), LL(0xb8f9c6c657c6f97e), LL(0xfb6fe8e825e86f13), LL(0xcba187879487a14c), LL(0x1162b8b8d5b862a9), LL(0x0905010103010508), LL(0x0d6e4f4fd14f6e42), LL(0x9bee36365a36eead), LL(0xff04a6a6f7a60459), LL(0x0cbdd2d26bd2bdde), LL(0x0e06f5f502f506fb), LL(0x968079798b7980ef), LL(0x30ce6f6fb16fce5f), LL(0x6def9191ae91effc), LL(0xf8075252f65207aa), LL(0x47fd6060a060fd27), LL(0x3576bcbcd9bc7689), LL(0x37cd9b9bb09bcdac), LL(0x8a8c8e8e8f8e8c04), LL(0xd215a3a3f8a31571), LL(0x6c3c0c0c140c3c60), LL(0x848a7b7b8d7b8aff), LL(0x80e135355f35e1b5), LL(0xf5691d1d271d69e8), LL(0xb347e0e03de04753), LL(0x21acd7d764d7acf6), LL(0x9cedc2c25bc2ed5e), LL(0x43962e2e722e966d), LL(0x297a4b4bdd4b7a62), LL(0x5d21fefe1ffe21a3), LL(0xd5165757f9571682), LL(0xbd4115153f1541a8), LL(0xe8b677779977b69f), LL(0x92eb37375937eba5), LL(0x9e56e5e532e5567b), LL(0x13d99f9fbc9fd98c), LL(0x2317f0f00df017d3), LL(0x207f4a4ade4a7f6a), LL(0x4495dada73da959e), LL(0xa2255858e85825fa), LL(0xcfcac9c946c9ca06), LL(0x7c8d29297b298d55), LL(0x5a220a0a1e0a2250), LL(0x504fb1b1ceb14fe1), LL(0xc91aa0a0fda01a69), LL(0x14da6b6bbd6bda7f), LL(0xd9ab85859285ab5c), LL(0x3c73bdbddabd7381), LL(0x8f345d5de75d34d2), LL(0x9050101030105080), LL(0x0703f4f401f403f3), LL(0xddc0cbcb40cbc016), LL(0xd3c63e3e423ec6ed), LL(0x2d1105050f051128), LL(0x78e66767a967e61f), LL(0x9753e4e431e45373), LL(0x02bb27276927bb25), LL(0x73584141c3415832), LL(0xa79d8b8b808b9d2c), LL(0xf601a7a7f4a70151), LL(0xb2947d7d877d94cf), LL(0x49fb9595a295fbdc), LL(0x569fd8d875d89f8e), LL(0x7030fbfb10fb308b), LL(0xcd71eeee2fee7123), LL(0xbb917c7c847c91c7), LL(0x71e36666aa66e317), LL(0x7b8edddd7add8ea6), LL(0xaf4b171739174bb8), LL(0x45464747c9474602), LL(0x1adc9e9ebf9edc84), LL(0xd4c5caca43cac51e), LL(0x58992d2d772d9975), LL(0x2e79bfbfdcbf7991), LL(0x3f1b070709071b38), LL(0xac23adadeaad2301), LL(0xb02f5a5aee5a2fea), LL(0xefb583839883b56c), LL(0xb6ff33335533ff85), LL(0x5cf26363a563f23f), LL(0x120a020206020a10), LL(0x9338aaaae3aa3839), LL(0xdea871719371a8af), LL(0xc6cfc8c845c8cf0e), LL(0xd17d19192b197dc8), LL(0x3b704949db497072), LL(0x5f9ad9d976d99a86), LL(0x311df2f20bf21dc3), LL(0xa848e3e338e3484b), LL(0xb92a5b5bed5b2ae2), LL(0xbc92888885889234), LL(0x3ec89a9ab39ac8a4), LL(0x0bbe26266a26be2d), LL(0xbffa32325632fa8d), LL(0x594ab0b0cdb04ae9), LL(0xf26ae9e926e96a1b), LL(0x77330f0f110f3378), LL(0x33a6d5d562d5a6e6), LL(0xf4ba80809d80ba74), LL(0x277cbebedfbe7c99), LL(0xebdecdcd4acdde26), LL(0x89e434345c34e4bd), LL(0x32754848d848757a), LL(0x5424ffff1cff24ab), LL(0x8d8f7a7a8e7a8ff7), LL(0x64ea9090ad90eaf4), LL(0x9d3e5f5fe15f3ec2), LL(0x3da020206020a01d), LL(0x0fd56868b868d567), LL(0xca721a1a2e1a72d0), LL(0xb72caeaeefae2c19), LL(0x7d5eb4b4c1b45ec9), LL(0xce195454fc54199a), LL(0x7fe59393a893e5ec), LL(0x2faa22226622aa0d), LL(0x63e96464ac64e907), LL(0x2a12f1f10ef112db), LL(0xcca273739573a2bf), LL(0x825a121236125a90), LL(0x7a5d4040c0405d3a), LL(0x4828080818082840), LL(0x95e8c3c358c3e856), LL(0xdf7becec29ec7b33), LL(0x4d90dbdb70db9096), LL(0xc01fa1a1fea11f61), LL(0x91838d8d8a8d831c), LL(0xc8c93d3d473dc9f5), LL(0x5bf19797a497f1cc), LL(0x0000000000000000), LL(0xf9d4cfcf4ccfd436), LL(0x6e872b2b7d2b8745), LL(0xe1b376769a76b397), LL(0xe6b082829b82b064), LL(0x28a9d6d667d6a9fe), LL(0xc3771b1b2d1b77d8), LL(0x745bb5b5c2b55bc1), LL(0xbe29afafecaf2911), LL(0x1ddf6a6abe6adf77), LL(0xea0d5050f0500dba), LL(0x574c4545cf454c12), LL(0x3818f3f308f318cb), LL(0xadf030305030f09d), LL(0xc474efef2cef742b), LL(0xdac33f3f413fc3e5), LL(0xc71c5555ff551c92), LL(0xdb10a2a2fba21079), LL(0xe965eaea23ea6503), LL(0x6aec6565af65ec0f), LL(0x0368babad3ba68b9), LL(0x4a932f2f712f9365), LL(0x8ee7c0c05dc0e74e), LL(0x6081dede7fde81be), LL(0xfc6c1c1c241c6ce0), LL(0x462efdfd1afd2ebb), LL(0x1f644d4dd74d6452), LL(0x76e09292ab92e0e4), LL(0xfabc75759f75bc8f), LL(0x361e06060a061e30), LL(0xae988a8a838a9824), LL(0x4b40b2b2cbb240f9), LL(0x8559e6e637e65963), LL(0x7e360e0e120e3670), LL(0xe7631f1f211f63f8), LL(0x55f76262a662f737), LL(0x3aa3d4d461d4a3ee), LL(0x8132a8a8e5a83229), LL(0x52f49696a796f4c4), LL(0x623af9f916f93a9b), LL(0xa3f6c5c552c5f666), LL(0x10b125256f25b135), LL(0xab205959eb5920f2), LL(0xd0ae84849184ae54), LL(0xc5a772729672a7b7), LL(0xecdd39394b39ddd5), LL(0x16614c4cd44c615a), LL(0x943b5e5ee25e3bca), LL(0x9f857878887885e7), LL(0xe5d838384838d8dd), LL(0x98868c8c898c8614), LL(0x17b2d1d16ed1b2c6), LL(0xe40ba5a5f2a50b41), LL(0xa14de2e23be24d43), LL(0x4ef86161a361f82f), LL(0x4245b3b3c8b345f1), LL(0x34a521216321a515), LL(0x08d69c9cb99cd694), LL(0xee661e1e221e66f0), LL(0x61524343c5435222), LL(0xb1fcc7c754c7fc76), LL(0x4f2bfcfc19fc2bb3), LL(0x241404040c041420), LL(0xe3085151f35108b2), LL(0x25c79999b699c7bc), LL(0x22c46d6db76dc44f), LL(0x65390d0d170d3968), LL(0x7935fafa13fa3583), LL(0x6984dfdf7cdf84b6), LL(0xa99b7e7e827e9bd7), LL(0x19b424246c24b43d), LL(0xfed73b3b4d3bd7c5), LL(0x9a3dababe0ab3d31), LL(0xf0d1cece4fced13e), LL(0x9955111133115588), LL(0x83898f8f8c8f890c), LL(0x046b4e4ed24e6b4a), LL(0x6651b7b7c4b751d1), LL(0xe060ebeb20eb600b), LL(0xc1cc3c3c443cccfd), LL(0xfdbf81819e81bf7c), LL(0x40fe9494a194fed4), LL(0x1c0cf7f704f70ceb), LL(0x1867b9b9d6b967a1), LL(0x8b5f131335135f98), LL(0x519c2c2c742c9c7d), LL(0x05b8d3d368d3b8d6), LL(0x8c5ce7e734e75c6b), LL(0x39cb6e6eb26ecb57), LL(0xaaf3c4c451c4f36e), LL(0x1b0f030305030f18), LL(0xdc135656fa56138a), LL(0x5e494444cc44491a), LL(0xa09e7f7f817f9edf), LL(0x8837a9a9e6a93721), LL(0x67822a2a7e2a824d), LL(0x0a6dbbbbd0bb6db1), LL(0x87e2c1c15ec1e246), LL(0xf1025353f55302a2), LL(0x728bdcdc79dc8bae), LL(0x53270b0b1d0b2758), LL(0x01d39d9dba9dd39c), LL(0x2bc16c6cb46cc147), LL(0xa4f531315331f595), LL(0xf3b974749c74b987), LL(0x1509f6f607f609e3), LL(0x4c434646ca46430a), LL(0xa526acace9ac2609), LL(0xb59789898689973c), LL(0xb44414143c1444a0), LL(0xba42e1e13ee1425b), LL(0xa64e16163a164eb0), LL(0xf7d23a3a4e3ad2cd), LL(0x06d06969bb69d06f), LL(0x412d09091b092d48), LL(0xd7ad70709070ada7), LL(0x6f54b6b6c7b654d9), LL(0x1eb7d0d06dd0b7ce), LL(0xd67eeded2aed7e3b), LL(0xe2dbcccc49ccdb2e), LL(0x68574242c642572a), LL(0x2cc29898b598c2b4), LL(0xed0ea4a4f1a40e49), LL(0x758828287828885d), LL(0x86315c5ce45c31da), LL(0x6b3ff8f815f83f93), LL(0xc2a486869786a444), }; static const uint64_t C3[256] = { LL(0xc0d8781818281878), LL(0x0526af23236523af), LL(0x7eb8f9c6c657c6f9), LL(0x13fb6fe8e825e86f), LL(0x4ccba187879487a1), LL(0xa91162b8b8d5b862), LL(0x0809050101030105), LL(0x420d6e4f4fd14f6e), LL(0xad9bee36365a36ee), LL(0x59ff04a6a6f7a604), LL(0xde0cbdd2d26bd2bd), LL(0xfb0e06f5f502f506), LL(0xef968079798b7980), LL(0x5f30ce6f6fb16fce), LL(0xfc6def9191ae91ef), LL(0xaaf8075252f65207), LL(0x2747fd6060a060fd), LL(0x893576bcbcd9bc76), LL(0xac37cd9b9bb09bcd), LL(0x048a8c8e8e8f8e8c), LL(0x71d215a3a3f8a315), LL(0x606c3c0c0c140c3c), LL(0xff848a7b7b8d7b8a), LL(0xb580e135355f35e1), LL(0xe8f5691d1d271d69), LL(0x53b347e0e03de047), LL(0xf621acd7d764d7ac), LL(0x5e9cedc2c25bc2ed), LL(0x6d43962e2e722e96), LL(0x62297a4b4bdd4b7a), LL(0xa35d21fefe1ffe21), LL(0x82d5165757f95716), LL(0xa8bd4115153f1541), LL(0x9fe8b677779977b6), LL(0xa592eb37375937eb), LL(0x7b9e56e5e532e556), LL(0x8c13d99f9fbc9fd9), LL(0xd32317f0f00df017), LL(0x6a207f4a4ade4a7f), LL(0x9e4495dada73da95), LL(0xfaa2255858e85825), LL(0x06cfcac9c946c9ca), LL(0x557c8d29297b298d), LL(0x505a220a0a1e0a22), LL(0xe1504fb1b1ceb14f), LL(0x69c91aa0a0fda01a), LL(0x7f14da6b6bbd6bda), LL(0x5cd9ab85859285ab), LL(0x813c73bdbddabd73), LL(0xd28f345d5de75d34), LL(0x8090501010301050), LL(0xf30703f4f401f403), LL(0x16ddc0cbcb40cbc0), LL(0xedd3c63e3e423ec6), LL(0x282d1105050f0511), LL(0x1f78e66767a967e6), LL(0x739753e4e431e453), LL(0x2502bb27276927bb), LL(0x3273584141c34158), LL(0x2ca79d8b8b808b9d), LL(0x51f601a7a7f4a701), LL(0xcfb2947d7d877d94), LL(0xdc49fb9595a295fb), LL(0x8e569fd8d875d89f), LL(0x8b7030fbfb10fb30), LL(0x23cd71eeee2fee71), LL(0xc7bb917c7c847c91), LL(0x1771e36666aa66e3), LL(0xa67b8edddd7add8e), LL(0xb8af4b171739174b), LL(0x0245464747c94746), LL(0x841adc9e9ebf9edc), LL(0x1ed4c5caca43cac5), LL(0x7558992d2d772d99), LL(0x912e79bfbfdcbf79), LL(0x383f1b070709071b), LL(0x01ac23adadeaad23), LL(0xeab02f5a5aee5a2f), LL(0x6cefb583839883b5), LL(0x85b6ff33335533ff), LL(0x3f5cf26363a563f2), LL(0x10120a020206020a), LL(0x399338aaaae3aa38), LL(0xafdea871719371a8), LL(0x0ec6cfc8c845c8cf), LL(0xc8d17d19192b197d), LL(0x723b704949db4970), LL(0x865f9ad9d976d99a), LL(0xc3311df2f20bf21d), LL(0x4ba848e3e338e348), LL(0xe2b92a5b5bed5b2a), LL(0x34bc928888858892), LL(0xa43ec89a9ab39ac8), LL(0x2d0bbe26266a26be), LL(0x8dbffa32325632fa), LL(0xe9594ab0b0cdb04a), LL(0x1bf26ae9e926e96a), LL(0x7877330f0f110f33), LL(0xe633a6d5d562d5a6), LL(0x74f4ba80809d80ba), LL(0x99277cbebedfbe7c), LL(0x26ebdecdcd4acdde), LL(0xbd89e434345c34e4), LL(0x7a32754848d84875), LL(0xab5424ffff1cff24), LL(0xf78d8f7a7a8e7a8f), LL(0xf464ea9090ad90ea), LL(0xc29d3e5f5fe15f3e), LL(0x1d3da020206020a0), LL(0x670fd56868b868d5), LL(0xd0ca721a1a2e1a72), LL(0x19b72caeaeefae2c), LL(0xc97d5eb4b4c1b45e), LL(0x9ace195454fc5419), LL(0xec7fe59393a893e5), LL(0x0d2faa22226622aa), LL(0x0763e96464ac64e9), LL(0xdb2a12f1f10ef112), LL(0xbfcca273739573a2), LL(0x90825a121236125a), LL(0x3a7a5d4040c0405d), LL(0x4048280808180828), LL(0x5695e8c3c358c3e8), LL(0x33df7becec29ec7b), LL(0x964d90dbdb70db90), LL(0x61c01fa1a1fea11f), LL(0x1c91838d8d8a8d83), LL(0xf5c8c93d3d473dc9), LL(0xcc5bf19797a497f1), LL(0x0000000000000000), LL(0x36f9d4cfcf4ccfd4), LL(0x456e872b2b7d2b87), LL(0x97e1b376769a76b3), LL(0x64e6b082829b82b0), LL(0xfe28a9d6d667d6a9), LL(0xd8c3771b1b2d1b77), LL(0xc1745bb5b5c2b55b), LL(0x11be29afafecaf29), LL(0x771ddf6a6abe6adf), LL(0xbaea0d5050f0500d), LL(0x12574c4545cf454c), LL(0xcb3818f3f308f318), LL(0x9dadf030305030f0), LL(0x2bc474efef2cef74), LL(0xe5dac33f3f413fc3), LL(0x92c71c5555ff551c), LL(0x79db10a2a2fba210), LL(0x03e965eaea23ea65), LL(0x0f6aec6565af65ec), LL(0xb90368babad3ba68), LL(0x654a932f2f712f93), LL(0x4e8ee7c0c05dc0e7), LL(0xbe6081dede7fde81), LL(0xe0fc6c1c1c241c6c), LL(0xbb462efdfd1afd2e), LL(0x521f644d4dd74d64), LL(0xe476e09292ab92e0), LL(0x8ffabc75759f75bc), LL(0x30361e06060a061e), LL(0x24ae988a8a838a98), LL(0xf94b40b2b2cbb240), LL(0x638559e6e637e659), LL(0x707e360e0e120e36), LL(0xf8e7631f1f211f63), LL(0x3755f76262a662f7), LL(0xee3aa3d4d461d4a3), LL(0x298132a8a8e5a832), LL(0xc452f49696a796f4), LL(0x9b623af9f916f93a), LL(0x66a3f6c5c552c5f6), LL(0x3510b125256f25b1), LL(0xf2ab205959eb5920), LL(0x54d0ae84849184ae), LL(0xb7c5a772729672a7), LL(0xd5ecdd39394b39dd), LL(0x5a16614c4cd44c61), LL(0xca943b5e5ee25e3b), LL(0xe79f857878887885), LL(0xdde5d838384838d8), LL(0x1498868c8c898c86), LL(0xc617b2d1d16ed1b2), LL(0x41e40ba5a5f2a50b), LL(0x43a14de2e23be24d), LL(0x2f4ef86161a361f8), LL(0xf14245b3b3c8b345), LL(0x1534a521216321a5), LL(0x9408d69c9cb99cd6), LL(0xf0ee661e1e221e66), LL(0x2261524343c54352), LL(0x76b1fcc7c754c7fc), LL(0xb34f2bfcfc19fc2b), LL(0x20241404040c0414), LL(0xb2e3085151f35108), LL(0xbc25c79999b699c7), LL(0x4f22c46d6db76dc4), LL(0x6865390d0d170d39), LL(0x837935fafa13fa35), LL(0xb66984dfdf7cdf84), LL(0xd7a99b7e7e827e9b), LL(0x3d19b424246c24b4), LL(0xc5fed73b3b4d3bd7), LL(0x319a3dababe0ab3d), LL(0x3ef0d1cece4fced1), LL(0x8899551111331155), LL(0x0c83898f8f8c8f89), LL(0x4a046b4e4ed24e6b), LL(0xd16651b7b7c4b751), LL(0x0be060ebeb20eb60), LL(0xfdc1cc3c3c443ccc), LL(0x7cfdbf81819e81bf), LL(0xd440fe9494a194fe), LL(0xeb1c0cf7f704f70c), LL(0xa11867b9b9d6b967), LL(0x988b5f131335135f), LL(0x7d519c2c2c742c9c), LL(0xd605b8d3d368d3b8), LL(0x6b8c5ce7e734e75c), LL(0x5739cb6e6eb26ecb), LL(0x6eaaf3c4c451c4f3), LL(0x181b0f030305030f), LL(0x8adc135656fa5613), LL(0x1a5e494444cc4449), LL(0xdfa09e7f7f817f9e), LL(0x218837a9a9e6a937), LL(0x4d67822a2a7e2a82), LL(0xb10a6dbbbbd0bb6d), LL(0x4687e2c1c15ec1e2), LL(0xa2f1025353f55302), LL(0xae728bdcdc79dc8b), LL(0x5853270b0b1d0b27), LL(0x9c01d39d9dba9dd3), LL(0x472bc16c6cb46cc1), LL(0x95a4f531315331f5), LL(0x87f3b974749c74b9), LL(0xe31509f6f607f609), LL(0x0a4c434646ca4643), LL(0x09a526acace9ac26), LL(0x3cb5978989868997), LL(0xa0b44414143c1444), LL(0x5bba42e1e13ee142), LL(0xb0a64e16163a164e), LL(0xcdf7d23a3a4e3ad2), LL(0x6f06d06969bb69d0), LL(0x48412d09091b092d), LL(0xa7d7ad70709070ad), LL(0xd96f54b6b6c7b654), LL(0xce1eb7d0d06dd0b7), LL(0x3bd67eeded2aed7e), LL(0x2ee2dbcccc49ccdb), LL(0x2a68574242c64257), LL(0xb42cc29898b598c2), LL(0x49ed0ea4a4f1a40e), LL(0x5d75882828782888), LL(0xda86315c5ce45c31), LL(0x936b3ff8f815f83f), LL(0x44c2a486869786a4), }; static const uint64_t C4[256] = { LL(0x78c0d87818182818), LL(0xaf0526af23236523), LL(0xf97eb8f9c6c657c6), LL(0x6f13fb6fe8e825e8), LL(0xa14ccba187879487), LL(0x62a91162b8b8d5b8), LL(0x0508090501010301), LL(0x6e420d6e4f4fd14f), LL(0xeead9bee36365a36), LL(0x0459ff04a6a6f7a6), LL(0xbdde0cbdd2d26bd2), LL(0x06fb0e06f5f502f5), LL(0x80ef968079798b79), LL(0xce5f30ce6f6fb16f), LL(0xeffc6def9191ae91), LL(0x07aaf8075252f652), LL(0xfd2747fd6060a060), LL(0x76893576bcbcd9bc), LL(0xcdac37cd9b9bb09b), LL(0x8c048a8c8e8e8f8e), LL(0x1571d215a3a3f8a3), LL(0x3c606c3c0c0c140c), LL(0x8aff848a7b7b8d7b), LL(0xe1b580e135355f35), LL(0x69e8f5691d1d271d), LL(0x4753b347e0e03de0), LL(0xacf621acd7d764d7), LL(0xed5e9cedc2c25bc2), LL(0x966d43962e2e722e), LL(0x7a62297a4b4bdd4b), LL(0x21a35d21fefe1ffe), LL(0x1682d5165757f957), LL(0x41a8bd4115153f15), LL(0xb69fe8b677779977), LL(0xeba592eb37375937), LL(0x567b9e56e5e532e5), LL(0xd98c13d99f9fbc9f), LL(0x17d32317f0f00df0), LL(0x7f6a207f4a4ade4a), LL(0x959e4495dada73da), LL(0x25faa2255858e858), LL(0xca06cfcac9c946c9), LL(0x8d557c8d29297b29), LL(0x22505a220a0a1e0a), LL(0x4fe1504fb1b1ceb1), LL(0x1a69c91aa0a0fda0), LL(0xda7f14da6b6bbd6b), LL(0xab5cd9ab85859285), LL(0x73813c73bdbddabd), LL(0x34d28f345d5de75d), LL(0x5080905010103010), LL(0x03f30703f4f401f4), LL(0xc016ddc0cbcb40cb), LL(0xc6edd3c63e3e423e), LL(0x11282d1105050f05), LL(0xe61f78e66767a967), LL(0x53739753e4e431e4), LL(0xbb2502bb27276927), LL(0x583273584141c341), LL(0x9d2ca79d8b8b808b), LL(0x0151f601a7a7f4a7), LL(0x94cfb2947d7d877d), LL(0xfbdc49fb9595a295), LL(0x9f8e569fd8d875d8), LL(0x308b7030fbfb10fb), LL(0x7123cd71eeee2fee), LL(0x91c7bb917c7c847c), LL(0xe31771e36666aa66), LL(0x8ea67b8edddd7add), LL(0x4bb8af4b17173917), LL(0x460245464747c947), LL(0xdc841adc9e9ebf9e), LL(0xc51ed4c5caca43ca), LL(0x997558992d2d772d), LL(0x79912e79bfbfdcbf), LL(0x1b383f1b07070907), LL(0x2301ac23adadeaad), LL(0x2feab02f5a5aee5a), LL(0xb56cefb583839883), LL(0xff85b6ff33335533), LL(0xf23f5cf26363a563), LL(0x0a10120a02020602), LL(0x38399338aaaae3aa), LL(0xa8afdea871719371), LL(0xcf0ec6cfc8c845c8), LL(0x7dc8d17d19192b19), LL(0x70723b704949db49), LL(0x9a865f9ad9d976d9), LL(0x1dc3311df2f20bf2), LL(0x484ba848e3e338e3), LL(0x2ae2b92a5b5bed5b), LL(0x9234bc9288888588), LL(0xc8a43ec89a9ab39a), LL(0xbe2d0bbe26266a26), LL(0xfa8dbffa32325632), LL(0x4ae9594ab0b0cdb0), LL(0x6a1bf26ae9e926e9), LL(0x337877330f0f110f), LL(0xa6e633a6d5d562d5), LL(0xba74f4ba80809d80), LL(0x7c99277cbebedfbe), LL(0xde26ebdecdcd4acd), LL(0xe4bd89e434345c34), LL(0x757a32754848d848), LL(0x24ab5424ffff1cff), LL(0x8ff78d8f7a7a8e7a), LL(0xeaf464ea9090ad90), LL(0x3ec29d3e5f5fe15f), LL(0xa01d3da020206020), LL(0xd5670fd56868b868), LL(0x72d0ca721a1a2e1a), LL(0x2c19b72caeaeefae), LL(0x5ec97d5eb4b4c1b4), LL(0x199ace195454fc54), LL(0xe5ec7fe59393a893), LL(0xaa0d2faa22226622), LL(0xe90763e96464ac64), LL(0x12db2a12f1f10ef1), LL(0xa2bfcca273739573), LL(0x5a90825a12123612), LL(0x5d3a7a5d4040c040), LL(0x2840482808081808), LL(0xe85695e8c3c358c3), LL(0x7b33df7becec29ec), LL(0x90964d90dbdb70db), LL(0x1f61c01fa1a1fea1), LL(0x831c91838d8d8a8d), LL(0xc9f5c8c93d3d473d), LL(0xf1cc5bf19797a497), LL(0x0000000000000000), LL(0xd436f9d4cfcf4ccf), LL(0x87456e872b2b7d2b), LL(0xb397e1b376769a76), LL(0xb064e6b082829b82), LL(0xa9fe28a9d6d667d6), LL(0x77d8c3771b1b2d1b), LL(0x5bc1745bb5b5c2b5), LL(0x2911be29afafecaf), LL(0xdf771ddf6a6abe6a), LL(0x0dbaea0d5050f050), LL(0x4c12574c4545cf45), LL(0x18cb3818f3f308f3), LL(0xf09dadf030305030), LL(0x742bc474efef2cef), LL(0xc3e5dac33f3f413f), LL(0x1c92c71c5555ff55), LL(0x1079db10a2a2fba2), LL(0x6503e965eaea23ea), LL(0xec0f6aec6565af65), LL(0x68b90368babad3ba), LL(0x93654a932f2f712f), LL(0xe74e8ee7c0c05dc0), LL(0x81be6081dede7fde), LL(0x6ce0fc6c1c1c241c), LL(0x2ebb462efdfd1afd), LL(0x64521f644d4dd74d), LL(0xe0e476e09292ab92), LL(0xbc8ffabc75759f75), LL(0x1e30361e06060a06), LL(0x9824ae988a8a838a), LL(0x40f94b40b2b2cbb2), LL(0x59638559e6e637e6), LL(0x36707e360e0e120e), LL(0x63f8e7631f1f211f), LL(0xf73755f76262a662), LL(0xa3ee3aa3d4d461d4), LL(0x32298132a8a8e5a8), LL(0xf4c452f49696a796), LL(0x3a9b623af9f916f9), LL(0xf666a3f6c5c552c5), LL(0xb13510b125256f25), LL(0x20f2ab205959eb59), LL(0xae54d0ae84849184), LL(0xa7b7c5a772729672), LL(0xddd5ecdd39394b39), LL(0x615a16614c4cd44c), LL(0x3bca943b5e5ee25e), LL(0x85e79f8578788878), LL(0xd8dde5d838384838), LL(0x861498868c8c898c), LL(0xb2c617b2d1d16ed1), LL(0x0b41e40ba5a5f2a5), LL(0x4d43a14de2e23be2), LL(0xf82f4ef86161a361), LL(0x45f14245b3b3c8b3), LL(0xa51534a521216321), LL(0xd69408d69c9cb99c), LL(0x66f0ee661e1e221e), LL(0x522261524343c543), LL(0xfc76b1fcc7c754c7), LL(0x2bb34f2bfcfc19fc), LL(0x1420241404040c04), LL(0x08b2e3085151f351), LL(0xc7bc25c79999b699), LL(0xc44f22c46d6db76d), LL(0x396865390d0d170d), LL(0x35837935fafa13fa), LL(0x84b66984dfdf7cdf), LL(0x9bd7a99b7e7e827e), LL(0xb43d19b424246c24), LL(0xd7c5fed73b3b4d3b), LL(0x3d319a3dababe0ab), LL(0xd13ef0d1cece4fce), LL(0x5588995511113311), LL(0x890c83898f8f8c8f), LL(0x6b4a046b4e4ed24e), LL(0x51d16651b7b7c4b7), LL(0x600be060ebeb20eb), LL(0xccfdc1cc3c3c443c), LL(0xbf7cfdbf81819e81), LL(0xfed440fe9494a194), LL(0x0ceb1c0cf7f704f7), LL(0x67a11867b9b9d6b9), LL(0x5f988b5f13133513), LL(0x9c7d519c2c2c742c), LL(0xb8d605b8d3d368d3), LL(0x5c6b8c5ce7e734e7), LL(0xcb5739cb6e6eb26e), LL(0xf36eaaf3c4c451c4), LL(0x0f181b0f03030503), LL(0x138adc135656fa56), LL(0x491a5e494444cc44), LL(0x9edfa09e7f7f817f), LL(0x37218837a9a9e6a9), LL(0x824d67822a2a7e2a), LL(0x6db10a6dbbbbd0bb), LL(0xe24687e2c1c15ec1), LL(0x02a2f1025353f553), LL(0x8bae728bdcdc79dc), LL(0x275853270b0b1d0b), LL(0xd39c01d39d9dba9d), LL(0xc1472bc16c6cb46c), LL(0xf595a4f531315331), LL(0xb987f3b974749c74), LL(0x09e31509f6f607f6), LL(0x430a4c434646ca46), LL(0x2609a526acace9ac), LL(0x973cb59789898689), LL(0x44a0b44414143c14), LL(0x425bba42e1e13ee1), LL(0x4eb0a64e16163a16), LL(0xd2cdf7d23a3a4e3a), LL(0xd06f06d06969bb69), LL(0x2d48412d09091b09), LL(0xada7d7ad70709070), LL(0x54d96f54b6b6c7b6), LL(0xb7ce1eb7d0d06dd0), LL(0x7e3bd67eeded2aed), LL(0xdb2ee2dbcccc49cc), LL(0x572a68574242c642), LL(0xc2b42cc29898b598), LL(0x0e49ed0ea4a4f1a4), LL(0x885d758828287828), LL(0x31da86315c5ce45c), LL(0x3f936b3ff8f815f8), LL(0xa444c2a486869786), }; static const uint64_t C5[256] = { LL(0x1878c0d878181828), LL(0x23af0526af232365), LL(0xc6f97eb8f9c6c657), LL(0xe86f13fb6fe8e825), LL(0x87a14ccba1878794), LL(0xb862a91162b8b8d5), LL(0x0105080905010103), LL(0x4f6e420d6e4f4fd1), LL(0x36eead9bee36365a), LL(0xa60459ff04a6a6f7), LL(0xd2bdde0cbdd2d26b), LL(0xf506fb0e06f5f502), LL(0x7980ef968079798b), LL(0x6fce5f30ce6f6fb1), LL(0x91effc6def9191ae), LL(0x5207aaf8075252f6), LL(0x60fd2747fd6060a0), LL(0xbc76893576bcbcd9), LL(0x9bcdac37cd9b9bb0), LL(0x8e8c048a8c8e8e8f), LL(0xa31571d215a3a3f8), LL(0x0c3c606c3c0c0c14), LL(0x7b8aff848a7b7b8d), LL(0x35e1b580e135355f), LL(0x1d69e8f5691d1d27), LL(0xe04753b347e0e03d), LL(0xd7acf621acd7d764), LL(0xc2ed5e9cedc2c25b), LL(0x2e966d43962e2e72), LL(0x4b7a62297a4b4bdd), LL(0xfe21a35d21fefe1f), LL(0x571682d5165757f9), LL(0x1541a8bd4115153f), LL(0x77b69fe8b6777799), LL(0x37eba592eb373759), LL(0xe5567b9e56e5e532), LL(0x9fd98c13d99f9fbc), LL(0xf017d32317f0f00d), LL(0x4a7f6a207f4a4ade), LL(0xda959e4495dada73), LL(0x5825faa2255858e8), LL(0xc9ca06cfcac9c946), LL(0x298d557c8d29297b), LL(0x0a22505a220a0a1e), LL(0xb14fe1504fb1b1ce), LL(0xa01a69c91aa0a0fd), LL(0x6bda7f14da6b6bbd), LL(0x85ab5cd9ab858592), LL(0xbd73813c73bdbdda), LL(0x5d34d28f345d5de7), LL(0x1050809050101030), LL(0xf403f30703f4f401), LL(0xcbc016ddc0cbcb40), LL(0x3ec6edd3c63e3e42), LL(0x0511282d1105050f), LL(0x67e61f78e66767a9), LL(0xe453739753e4e431), LL(0x27bb2502bb272769), LL(0x41583273584141c3), LL(0x8b9d2ca79d8b8b80), LL(0xa70151f601a7a7f4), LL(0x7d94cfb2947d7d87), LL(0x95fbdc49fb9595a2), LL(0xd89f8e569fd8d875), LL(0xfb308b7030fbfb10), LL(0xee7123cd71eeee2f), LL(0x7c91c7bb917c7c84), LL(0x66e31771e36666aa), LL(0xdd8ea67b8edddd7a), LL(0x174bb8af4b171739), LL(0x47460245464747c9), LL(0x9edc841adc9e9ebf), LL(0xcac51ed4c5caca43), LL(0x2d997558992d2d77), LL(0xbf79912e79bfbfdc), LL(0x071b383f1b070709), LL(0xad2301ac23adadea), LL(0x5a2feab02f5a5aee), LL(0x83b56cefb5838398), LL(0x33ff85b6ff333355), LL(0x63f23f5cf26363a5), LL(0x020a10120a020206), LL(0xaa38399338aaaae3), LL(0x71a8afdea8717193), LL(0xc8cf0ec6cfc8c845), LL(0x197dc8d17d19192b), LL(0x4970723b704949db), LL(0xd99a865f9ad9d976), LL(0xf21dc3311df2f20b), LL(0xe3484ba848e3e338), LL(0x5b2ae2b92a5b5bed), LL(0x889234bc92888885), LL(0x9ac8a43ec89a9ab3), LL(0x26be2d0bbe26266a), LL(0x32fa8dbffa323256), LL(0xb04ae9594ab0b0cd), LL(0xe96a1bf26ae9e926), LL(0x0f337877330f0f11), LL(0xd5a6e633a6d5d562), LL(0x80ba74f4ba80809d), LL(0xbe7c99277cbebedf), LL(0xcdde26ebdecdcd4a), LL(0x34e4bd89e434345c), LL(0x48757a32754848d8), LL(0xff24ab5424ffff1c), LL(0x7a8ff78d8f7a7a8e), LL(0x90eaf464ea9090ad), LL(0x5f3ec29d3e5f5fe1), LL(0x20a01d3da0202060), LL(0x68d5670fd56868b8), LL(0x1a72d0ca721a1a2e), LL(0xae2c19b72caeaeef), LL(0xb45ec97d5eb4b4c1), LL(0x54199ace195454fc), LL(0x93e5ec7fe59393a8), LL(0x22aa0d2faa222266), LL(0x64e90763e96464ac), LL(0xf112db2a12f1f10e), LL(0x73a2bfcca2737395), LL(0x125a90825a121236), LL(0x405d3a7a5d4040c0), LL(0x0828404828080818), LL(0xc3e85695e8c3c358), LL(0xec7b33df7becec29), LL(0xdb90964d90dbdb70), LL(0xa11f61c01fa1a1fe), LL(0x8d831c91838d8d8a), LL(0x3dc9f5c8c93d3d47), LL(0x97f1cc5bf19797a4), LL(0x0000000000000000), LL(0xcfd436f9d4cfcf4c), LL(0x2b87456e872b2b7d), LL(0x76b397e1b376769a), LL(0x82b064e6b082829b), LL(0xd6a9fe28a9d6d667), LL(0x1b77d8c3771b1b2d), LL(0xb55bc1745bb5b5c2), LL(0xaf2911be29afafec), LL(0x6adf771ddf6a6abe), LL(0x500dbaea0d5050f0), LL(0x454c12574c4545cf), LL(0xf318cb3818f3f308), LL(0x30f09dadf0303050), LL(0xef742bc474efef2c), LL(0x3fc3e5dac33f3f41), LL(0x551c92c71c5555ff), LL(0xa21079db10a2a2fb), LL(0xea6503e965eaea23), LL(0x65ec0f6aec6565af), LL(0xba68b90368babad3), LL(0x2f93654a932f2f71), LL(0xc0e74e8ee7c0c05d), LL(0xde81be6081dede7f), LL(0x1c6ce0fc6c1c1c24), LL(0xfd2ebb462efdfd1a), LL(0x4d64521f644d4dd7), LL(0x92e0e476e09292ab), LL(0x75bc8ffabc75759f), LL(0x061e30361e06060a), LL(0x8a9824ae988a8a83), LL(0xb240f94b40b2b2cb), LL(0xe659638559e6e637), LL(0x0e36707e360e0e12), LL(0x1f63f8e7631f1f21), LL(0x62f73755f76262a6), LL(0xd4a3ee3aa3d4d461), LL(0xa832298132a8a8e5), LL(0x96f4c452f49696a7), LL(0xf93a9b623af9f916), LL(0xc5f666a3f6c5c552), LL(0x25b13510b125256f), LL(0x5920f2ab205959eb), LL(0x84ae54d0ae848491), LL(0x72a7b7c5a7727296), LL(0x39ddd5ecdd39394b), LL(0x4c615a16614c4cd4), LL(0x5e3bca943b5e5ee2), LL(0x7885e79f85787888), LL(0x38d8dde5d8383848), LL(0x8c861498868c8c89), LL(0xd1b2c617b2d1d16e), LL(0xa50b41e40ba5a5f2), LL(0xe24d43a14de2e23b), LL(0x61f82f4ef86161a3), LL(0xb345f14245b3b3c8), LL(0x21a51534a5212163), LL(0x9cd69408d69c9cb9), LL(0x1e66f0ee661e1e22), LL(0x43522261524343c5), LL(0xc7fc76b1fcc7c754), LL(0xfc2bb34f2bfcfc19), LL(0x041420241404040c), LL(0x5108b2e3085151f3), LL(0x99c7bc25c79999b6), LL(0x6dc44f22c46d6db7), LL(0x0d396865390d0d17), LL(0xfa35837935fafa13), LL(0xdf84b66984dfdf7c), LL(0x7e9bd7a99b7e7e82), LL(0x24b43d19b424246c), LL(0x3bd7c5fed73b3b4d), LL(0xab3d319a3dababe0), LL(0xced13ef0d1cece4f), LL(0x1155889955111133), LL(0x8f890c83898f8f8c), LL(0x4e6b4a046b4e4ed2), LL(0xb751d16651b7b7c4), LL(0xeb600be060ebeb20), LL(0x3cccfdc1cc3c3c44), LL(0x81bf7cfdbf81819e), LL(0x94fed440fe9494a1), LL(0xf70ceb1c0cf7f704), LL(0xb967a11867b9b9d6), LL(0x135f988b5f131335), LL(0x2c9c7d519c2c2c74), LL(0xd3b8d605b8d3d368), LL(0xe75c6b8c5ce7e734), LL(0x6ecb5739cb6e6eb2), LL(0xc4f36eaaf3c4c451), LL(0x030f181b0f030305), LL(0x56138adc135656fa), LL(0x44491a5e494444cc), LL(0x7f9edfa09e7f7f81), LL(0xa937218837a9a9e6), LL(0x2a824d67822a2a7e), LL(0xbb6db10a6dbbbbd0), LL(0xc1e24687e2c1c15e), LL(0x5302a2f1025353f5), LL(0xdc8bae728bdcdc79), LL(0x0b275853270b0b1d), LL(0x9dd39c01d39d9dba), LL(0x6cc1472bc16c6cb4), LL(0x31f595a4f5313153), LL(0x74b987f3b974749c), LL(0xf609e31509f6f607), LL(0x46430a4c434646ca), LL(0xac2609a526acace9), LL(0x89973cb597898986), LL(0x1444a0b44414143c), LL(0xe1425bba42e1e13e), LL(0x164eb0a64e16163a), LL(0x3ad2cdf7d23a3a4e), LL(0x69d06f06d06969bb), LL(0x092d48412d09091b), LL(0x70ada7d7ad707090), LL(0xb654d96f54b6b6c7), LL(0xd0b7ce1eb7d0d06d), LL(0xed7e3bd67eeded2a), LL(0xccdb2ee2dbcccc49), LL(0x42572a68574242c6), LL(0x98c2b42cc29898b5), LL(0xa40e49ed0ea4a4f1), LL(0x28885d7588282878), LL(0x5c31da86315c5ce4), LL(0xf83f936b3ff8f815), LL(0x86a444c2a4868697), }; static const uint64_t C6[256] = { LL(0x281878c0d8781818), LL(0x6523af0526af2323), LL(0x57c6f97eb8f9c6c6), LL(0x25e86f13fb6fe8e8), LL(0x9487a14ccba18787), LL(0xd5b862a91162b8b8), LL(0x0301050809050101), LL(0xd14f6e420d6e4f4f), LL(0x5a36eead9bee3636), LL(0xf7a60459ff04a6a6), LL(0x6bd2bdde0cbdd2d2), LL(0x02f506fb0e06f5f5), LL(0x8b7980ef96807979), LL(0xb16fce5f30ce6f6f), LL(0xae91effc6def9191), LL(0xf65207aaf8075252), LL(0xa060fd2747fd6060), LL(0xd9bc76893576bcbc), LL(0xb09bcdac37cd9b9b), LL(0x8f8e8c048a8c8e8e), LL(0xf8a31571d215a3a3), LL(0x140c3c606c3c0c0c), LL(0x8d7b8aff848a7b7b), LL(0x5f35e1b580e13535), LL(0x271d69e8f5691d1d), LL(0x3de04753b347e0e0), LL(0x64d7acf621acd7d7), LL(0x5bc2ed5e9cedc2c2), LL(0x722e966d43962e2e), LL(0xdd4b7a62297a4b4b), LL(0x1ffe21a35d21fefe), LL(0xf9571682d5165757), LL(0x3f1541a8bd411515), LL(0x9977b69fe8b67777), LL(0x5937eba592eb3737), LL(0x32e5567b9e56e5e5), LL(0xbc9fd98c13d99f9f), LL(0x0df017d32317f0f0), LL(0xde4a7f6a207f4a4a), LL(0x73da959e4495dada), LL(0xe85825faa2255858), LL(0x46c9ca06cfcac9c9), LL(0x7b298d557c8d2929), LL(0x1e0a22505a220a0a), LL(0xceb14fe1504fb1b1), LL(0xfda01a69c91aa0a0), LL(0xbd6bda7f14da6b6b), LL(0x9285ab5cd9ab8585), LL(0xdabd73813c73bdbd), LL(0xe75d34d28f345d5d), LL(0x3010508090501010), LL(0x01f403f30703f4f4), LL(0x40cbc016ddc0cbcb), LL(0x423ec6edd3c63e3e), LL(0x0f0511282d110505), LL(0xa967e61f78e66767), LL(0x31e453739753e4e4), LL(0x6927bb2502bb2727), LL(0xc341583273584141), LL(0x808b9d2ca79d8b8b), LL(0xf4a70151f601a7a7), LL(0x877d94cfb2947d7d), LL(0xa295fbdc49fb9595), LL(0x75d89f8e569fd8d8), LL(0x10fb308b7030fbfb), LL(0x2fee7123cd71eeee), LL(0x847c91c7bb917c7c), LL(0xaa66e31771e36666), LL(0x7add8ea67b8edddd), LL(0x39174bb8af4b1717), LL(0xc947460245464747), LL(0xbf9edc841adc9e9e), LL(0x43cac51ed4c5caca), LL(0x772d997558992d2d), LL(0xdcbf79912e79bfbf), LL(0x09071b383f1b0707), LL(0xeaad2301ac23adad), LL(0xee5a2feab02f5a5a), LL(0x9883b56cefb58383), LL(0x5533ff85b6ff3333), LL(0xa563f23f5cf26363), LL(0x06020a10120a0202), LL(0xe3aa38399338aaaa), LL(0x9371a8afdea87171), LL(0x45c8cf0ec6cfc8c8), LL(0x2b197dc8d17d1919), LL(0xdb4970723b704949), LL(0x76d99a865f9ad9d9), LL(0x0bf21dc3311df2f2), LL(0x38e3484ba848e3e3), LL(0xed5b2ae2b92a5b5b), LL(0x85889234bc928888), LL(0xb39ac8a43ec89a9a), LL(0x6a26be2d0bbe2626), LL(0x5632fa8dbffa3232), LL(0xcdb04ae9594ab0b0), LL(0x26e96a1bf26ae9e9), LL(0x110f337877330f0f), LL(0x62d5a6e633a6d5d5), LL(0x9d80ba74f4ba8080), LL(0xdfbe7c99277cbebe), LL(0x4acdde26ebdecdcd), LL(0x5c34e4bd89e43434), LL(0xd848757a32754848), LL(0x1cff24ab5424ffff), LL(0x8e7a8ff78d8f7a7a), LL(0xad90eaf464ea9090), LL(0xe15f3ec29d3e5f5f), LL(0x6020a01d3da02020), LL(0xb868d5670fd56868), LL(0x2e1a72d0ca721a1a), LL(0xefae2c19b72caeae), LL(0xc1b45ec97d5eb4b4), LL(0xfc54199ace195454), LL(0xa893e5ec7fe59393), LL(0x6622aa0d2faa2222), LL(0xac64e90763e96464), LL(0x0ef112db2a12f1f1), LL(0x9573a2bfcca27373), LL(0x36125a90825a1212), LL(0xc0405d3a7a5d4040), LL(0x1808284048280808), LL(0x58c3e85695e8c3c3), LL(0x29ec7b33df7becec), LL(0x70db90964d90dbdb), LL(0xfea11f61c01fa1a1), LL(0x8a8d831c91838d8d), LL(0x473dc9f5c8c93d3d), LL(0xa497f1cc5bf19797), LL(0x0000000000000000), LL(0x4ccfd436f9d4cfcf), LL(0x7d2b87456e872b2b), LL(0x9a76b397e1b37676), LL(0x9b82b064e6b08282), LL(0x67d6a9fe28a9d6d6), LL(0x2d1b77d8c3771b1b), LL(0xc2b55bc1745bb5b5), LL(0xecaf2911be29afaf), LL(0xbe6adf771ddf6a6a), LL(0xf0500dbaea0d5050), LL(0xcf454c12574c4545), LL(0x08f318cb3818f3f3), LL(0x5030f09dadf03030), LL(0x2cef742bc474efef), LL(0x413fc3e5dac33f3f), LL(0xff551c92c71c5555), LL(0xfba21079db10a2a2), LL(0x23ea6503e965eaea), LL(0xaf65ec0f6aec6565), LL(0xd3ba68b90368baba), LL(0x712f93654a932f2f), LL(0x5dc0e74e8ee7c0c0), LL(0x7fde81be6081dede), LL(0x241c6ce0fc6c1c1c), LL(0x1afd2ebb462efdfd), LL(0xd74d64521f644d4d), LL(0xab92e0e476e09292), LL(0x9f75bc8ffabc7575), LL(0x0a061e30361e0606), LL(0x838a9824ae988a8a), LL(0xcbb240f94b40b2b2), LL(0x37e659638559e6e6), LL(0x120e36707e360e0e), LL(0x211f63f8e7631f1f), LL(0xa662f73755f76262), LL(0x61d4a3ee3aa3d4d4), LL(0xe5a832298132a8a8), LL(0xa796f4c452f49696), LL(0x16f93a9b623af9f9), LL(0x52c5f666a3f6c5c5), LL(0x6f25b13510b12525), LL(0xeb5920f2ab205959), LL(0x9184ae54d0ae8484), LL(0x9672a7b7c5a77272), LL(0x4b39ddd5ecdd3939), LL(0xd44c615a16614c4c), LL(0xe25e3bca943b5e5e), LL(0x887885e79f857878), LL(0x4838d8dde5d83838), LL(0x898c861498868c8c), LL(0x6ed1b2c617b2d1d1), LL(0xf2a50b41e40ba5a5), LL(0x3be24d43a14de2e2), LL(0xa361f82f4ef86161), LL(0xc8b345f14245b3b3), LL(0x6321a51534a52121), LL(0xb99cd69408d69c9c), LL(0x221e66f0ee661e1e), LL(0xc543522261524343), LL(0x54c7fc76b1fcc7c7), LL(0x19fc2bb34f2bfcfc), LL(0x0c04142024140404), LL(0xf35108b2e3085151), LL(0xb699c7bc25c79999), LL(0xb76dc44f22c46d6d), LL(0x170d396865390d0d), LL(0x13fa35837935fafa), LL(0x7cdf84b66984dfdf), LL(0x827e9bd7a99b7e7e), LL(0x6c24b43d19b42424), LL(0x4d3bd7c5fed73b3b), LL(0xe0ab3d319a3dabab), LL(0x4fced13ef0d1cece), LL(0x3311558899551111), LL(0x8c8f890c83898f8f), LL(0xd24e6b4a046b4e4e), LL(0xc4b751d16651b7b7), LL(0x20eb600be060ebeb), LL(0x443cccfdc1cc3c3c), LL(0x9e81bf7cfdbf8181), LL(0xa194fed440fe9494), LL(0x04f70ceb1c0cf7f7), LL(0xd6b967a11867b9b9), LL(0x35135f988b5f1313), LL(0x742c9c7d519c2c2c), LL(0x68d3b8d605b8d3d3), LL(0x34e75c6b8c5ce7e7), LL(0xb26ecb5739cb6e6e), LL(0x51c4f36eaaf3c4c4), LL(0x05030f181b0f0303), LL(0xfa56138adc135656), LL(0xcc44491a5e494444), LL(0x817f9edfa09e7f7f), LL(0xe6a937218837a9a9), LL(0x7e2a824d67822a2a), LL(0xd0bb6db10a6dbbbb), LL(0x5ec1e24687e2c1c1), LL(0xf55302a2f1025353), LL(0x79dc8bae728bdcdc), LL(0x1d0b275853270b0b), LL(0xba9dd39c01d39d9d), LL(0xb46cc1472bc16c6c), LL(0x5331f595a4f53131), LL(0x9c74b987f3b97474), LL(0x07f609e31509f6f6), LL(0xca46430a4c434646), LL(0xe9ac2609a526acac), LL(0x8689973cb5978989), LL(0x3c1444a0b4441414), LL(0x3ee1425bba42e1e1), LL(0x3a164eb0a64e1616), LL(0x4e3ad2cdf7d23a3a), LL(0xbb69d06f06d06969), LL(0x1b092d48412d0909), LL(0x9070ada7d7ad7070), LL(0xc7b654d96f54b6b6), LL(0x6dd0b7ce1eb7d0d0), LL(0x2aed7e3bd67eeded), LL(0x49ccdb2ee2dbcccc), LL(0xc642572a68574242), LL(0xb598c2b42cc29898), LL(0xf1a40e49ed0ea4a4), LL(0x7828885d75882828), LL(0xe45c31da86315c5c), LL(0x15f83f936b3ff8f8), LL(0x9786a444c2a48686), }; static const uint64_t C7[256] = { LL(0x18281878c0d87818), LL(0x236523af0526af23), LL(0xc657c6f97eb8f9c6), LL(0xe825e86f13fb6fe8), LL(0x879487a14ccba187), LL(0xb8d5b862a91162b8), LL(0x0103010508090501), LL(0x4fd14f6e420d6e4f), LL(0x365a36eead9bee36), LL(0xa6f7a60459ff04a6), LL(0xd26bd2bdde0cbdd2), LL(0xf502f506fb0e06f5), LL(0x798b7980ef968079), LL(0x6fb16fce5f30ce6f), LL(0x91ae91effc6def91), LL(0x52f65207aaf80752), LL(0x60a060fd2747fd60), LL(0xbcd9bc76893576bc), LL(0x9bb09bcdac37cd9b), LL(0x8e8f8e8c048a8c8e), LL(0xa3f8a31571d215a3), LL(0x0c140c3c606c3c0c), LL(0x7b8d7b8aff848a7b), LL(0x355f35e1b580e135), LL(0x1d271d69e8f5691d), LL(0xe03de04753b347e0), LL(0xd764d7acf621acd7), LL(0xc25bc2ed5e9cedc2), LL(0x2e722e966d43962e), LL(0x4bdd4b7a62297a4b), LL(0xfe1ffe21a35d21fe), LL(0x57f9571682d51657), LL(0x153f1541a8bd4115), LL(0x779977b69fe8b677), LL(0x375937eba592eb37), LL(0xe532e5567b9e56e5), LL(0x9fbc9fd98c13d99f), LL(0xf00df017d32317f0), LL(0x4ade4a7f6a207f4a), LL(0xda73da959e4495da), LL(0x58e85825faa22558), LL(0xc946c9ca06cfcac9), LL(0x297b298d557c8d29), LL(0x0a1e0a22505a220a), LL(0xb1ceb14fe1504fb1), LL(0xa0fda01a69c91aa0), LL(0x6bbd6bda7f14da6b), LL(0x859285ab5cd9ab85), LL(0xbddabd73813c73bd), LL(0x5de75d34d28f345d), LL(0x1030105080905010), LL(0xf401f403f30703f4), LL(0xcb40cbc016ddc0cb), LL(0x3e423ec6edd3c63e), LL(0x050f0511282d1105), LL(0x67a967e61f78e667), LL(0xe431e453739753e4), LL(0x276927bb2502bb27), LL(0x41c3415832735841), LL(0x8b808b9d2ca79d8b), LL(0xa7f4a70151f601a7), LL(0x7d877d94cfb2947d), LL(0x95a295fbdc49fb95), LL(0xd875d89f8e569fd8), LL(0xfb10fb308b7030fb), LL(0xee2fee7123cd71ee), LL(0x7c847c91c7bb917c), LL(0x66aa66e31771e366), LL(0xdd7add8ea67b8edd), LL(0x1739174bb8af4b17), LL(0x47c9474602454647), LL(0x9ebf9edc841adc9e), LL(0xca43cac51ed4c5ca), LL(0x2d772d997558992d), LL(0xbfdcbf79912e79bf), LL(0x0709071b383f1b07), LL(0xadeaad2301ac23ad), LL(0x5aee5a2feab02f5a), LL(0x839883b56cefb583), LL(0x335533ff85b6ff33), LL(0x63a563f23f5cf263), LL(0x0206020a10120a02), LL(0xaae3aa38399338aa), LL(0x719371a8afdea871), LL(0xc845c8cf0ec6cfc8), LL(0x192b197dc8d17d19), LL(0x49db4970723b7049), LL(0xd976d99a865f9ad9), LL(0xf20bf21dc3311df2), LL(0xe338e3484ba848e3), LL(0x5bed5b2ae2b92a5b), LL(0x8885889234bc9288), LL(0x9ab39ac8a43ec89a), LL(0x266a26be2d0bbe26), LL(0x325632fa8dbffa32), LL(0xb0cdb04ae9594ab0), LL(0xe926e96a1bf26ae9), LL(0x0f110f337877330f), LL(0xd562d5a6e633a6d5), LL(0x809d80ba74f4ba80), LL(0xbedfbe7c99277cbe), LL(0xcd4acdde26ebdecd), LL(0x345c34e4bd89e434), LL(0x48d848757a327548), LL(0xff1cff24ab5424ff), LL(0x7a8e7a8ff78d8f7a), LL(0x90ad90eaf464ea90), LL(0x5fe15f3ec29d3e5f), LL(0x206020a01d3da020), LL(0x68b868d5670fd568), LL(0x1a2e1a72d0ca721a), LL(0xaeefae2c19b72cae), LL(0xb4c1b45ec97d5eb4), LL(0x54fc54199ace1954), LL(0x93a893e5ec7fe593), LL(0x226622aa0d2faa22), LL(0x64ac64e90763e964), LL(0xf10ef112db2a12f1), LL(0x739573a2bfcca273), LL(0x1236125a90825a12), LL(0x40c0405d3a7a5d40), LL(0x0818082840482808), LL(0xc358c3e85695e8c3), LL(0xec29ec7b33df7bec), LL(0xdb70db90964d90db), LL(0xa1fea11f61c01fa1), LL(0x8d8a8d831c91838d), LL(0x3d473dc9f5c8c93d), LL(0x97a497f1cc5bf197), LL(0x0000000000000000), LL(0xcf4ccfd436f9d4cf), LL(0x2b7d2b87456e872b), LL(0x769a76b397e1b376), LL(0x829b82b064e6b082), LL(0xd667d6a9fe28a9d6), LL(0x1b2d1b77d8c3771b), LL(0xb5c2b55bc1745bb5), LL(0xafecaf2911be29af), LL(0x6abe6adf771ddf6a), LL(0x50f0500dbaea0d50), LL(0x45cf454c12574c45), LL(0xf308f318cb3818f3), LL(0x305030f09dadf030), LL(0xef2cef742bc474ef), LL(0x3f413fc3e5dac33f), LL(0x55ff551c92c71c55), LL(0xa2fba21079db10a2), LL(0xea23ea6503e965ea), LL(0x65af65ec0f6aec65), LL(0xbad3ba68b90368ba), LL(0x2f712f93654a932f), LL(0xc05dc0e74e8ee7c0), LL(0xde7fde81be6081de), LL(0x1c241c6ce0fc6c1c), LL(0xfd1afd2ebb462efd), LL(0x4dd74d64521f644d), LL(0x92ab92e0e476e092), LL(0x759f75bc8ffabc75), LL(0x060a061e30361e06), LL(0x8a838a9824ae988a), LL(0xb2cbb240f94b40b2), LL(0xe637e659638559e6), LL(0x0e120e36707e360e), LL(0x1f211f63f8e7631f), LL(0x62a662f73755f762), LL(0xd461d4a3ee3aa3d4), LL(0xa8e5a832298132a8), LL(0x96a796f4c452f496), LL(0xf916f93a9b623af9), LL(0xc552c5f666a3f6c5), LL(0x256f25b13510b125), LL(0x59eb5920f2ab2059), LL(0x849184ae54d0ae84), LL(0x729672a7b7c5a772), LL(0x394b39ddd5ecdd39), LL(0x4cd44c615a16614c), LL(0x5ee25e3bca943b5e), LL(0x78887885e79f8578), LL(0x384838d8dde5d838), LL(0x8c898c861498868c), LL(0xd16ed1b2c617b2d1), LL(0xa5f2a50b41e40ba5), LL(0xe23be24d43a14de2), LL(0x61a361f82f4ef861), LL(0xb3c8b345f14245b3), LL(0x216321a51534a521), LL(0x9cb99cd69408d69c), LL(0x1e221e66f0ee661e), LL(0x43c5435222615243), LL(0xc754c7fc76b1fcc7), LL(0xfc19fc2bb34f2bfc), LL(0x040c041420241404), LL(0x51f35108b2e30851), LL(0x99b699c7bc25c799), LL(0x6db76dc44f22c46d), LL(0x0d170d396865390d), LL(0xfa13fa35837935fa), LL(0xdf7cdf84b66984df), LL(0x7e827e9bd7a99b7e), LL(0x246c24b43d19b424), LL(0x3b4d3bd7c5fed73b), LL(0xabe0ab3d319a3dab), LL(0xce4fced13ef0d1ce), LL(0x1133115588995511), LL(0x8f8c8f890c83898f), LL(0x4ed24e6b4a046b4e), LL(0xb7c4b751d16651b7), LL(0xeb20eb600be060eb), LL(0x3c443cccfdc1cc3c), LL(0x819e81bf7cfdbf81), LL(0x94a194fed440fe94), LL(0xf704f70ceb1c0cf7), LL(0xb9d6b967a11867b9), LL(0x1335135f988b5f13), LL(0x2c742c9c7d519c2c), LL(0xd368d3b8d605b8d3), LL(0xe734e75c6b8c5ce7), LL(0x6eb26ecb5739cb6e), LL(0xc451c4f36eaaf3c4), LL(0x0305030f181b0f03), LL(0x56fa56138adc1356), LL(0x44cc44491a5e4944), LL(0x7f817f9edfa09e7f), LL(0xa9e6a937218837a9), LL(0x2a7e2a824d67822a), LL(0xbbd0bb6db10a6dbb), LL(0xc15ec1e24687e2c1), LL(0x53f55302a2f10253), LL(0xdc79dc8bae728bdc), LL(0x0b1d0b275853270b), LL(0x9dba9dd39c01d39d), LL(0x6cb46cc1472bc16c), LL(0x315331f595a4f531), LL(0x749c74b987f3b974), LL(0xf607f609e31509f6), LL(0x46ca46430a4c4346), LL(0xace9ac2609a526ac), LL(0x898689973cb59789), LL(0x143c1444a0b44414), LL(0xe13ee1425bba42e1), LL(0x163a164eb0a64e16), LL(0x3a4e3ad2cdf7d23a), LL(0x69bb69d06f06d069), LL(0x091b092d48412d09), LL(0x709070ada7d7ad70), LL(0xb6c7b654d96f54b6), LL(0xd06dd0b7ce1eb7d0), LL(0xed2aed7e3bd67eed), LL(0xcc49ccdb2ee2dbcc), LL(0x42c642572a685742), LL(0x98b598c2b42cc298), LL(0xa4f1a40e49ed0ea4), LL(0x287828885d758828), LL(0x5ce45c31da86315c), LL(0xf815f83f936b3ff8), LL(0x869786a444c2a486), }; #endif /* OBSOLETE */ static const uint64_t rc[R + 1] = { LL(0x0000000000000000), LL(0x1823c6e887b8014f), LL(0x36a6d2f5796f9152), LL(0x60bc9b8ea30c7b35), LL(0x1de0d7c22e4bfe57), LL(0x157737e59ff04ada), LL(0x58c9290ab1a06b85), LL(0xbd5d10f4cb3e0567), LL(0xe427418ba77d95d8), LL(0xfbee7c66dd17479e), LL(0xca2dbf07ad5a8333), }; /** * The core Whirlpool transform. */ static void processBuffer(struct WHIRLPOOLstruct * const structpointer) { int i, r; uint64_t K[8]; /* the round key */ uint64_t block[8]; /* mu(buffer) */ uint64_t state[8]; /* the cipher state */ uint64_t L[8]; unsigned char *buffer = structpointer->buffer; /* * map the buffer to a block: */ for (i = 0; i < 8; i++, buffer += 8) { block[i] = (((uint64_t)buffer[0] ) << 56) ^ (((uint64_t)buffer[1] & 0xffL) << 48) ^ (((uint64_t)buffer[2] & 0xffL) << 40) ^ (((uint64_t)buffer[3] & 0xffL) << 32) ^ (((uint64_t)buffer[4] & 0xffL) << 24) ^ (((uint64_t)buffer[5] & 0xffL) << 16) ^ (((uint64_t)buffer[6] & 0xffL) << 8) ^ (((uint64_t)buffer[7] & 0xffL) ); } /* * compute and apply K^0 to the cipher state: */ state[0] = block[0] ^ (K[0] = structpointer->hash[0]); state[1] = block[1] ^ (K[1] = structpointer->hash[1]); state[2] = block[2] ^ (K[2] = structpointer->hash[2]); state[3] = block[3] ^ (K[3] = structpointer->hash[3]); state[4] = block[4] ^ (K[4] = structpointer->hash[4]); state[5] = block[5] ^ (K[5] = structpointer->hash[5]); state[6] = block[6] ^ (K[6] = structpointer->hash[6]); state[7] = block[7] ^ (K[7] = structpointer->hash[7]); /* * iterate over all rounds: */ for (r = 1; r <= R; r++) { /* * compute K^r from K^{r-1}: */ L[0] = C0[(int)(K[0] >> 56) ] ^ C1[(int)(K[7] >> 48) & 0xff] ^ C2[(int)(K[6] >> 40) & 0xff] ^ C3[(int)(K[5] >> 32) & 0xff] ^ C4[(int)(K[4] >> 24) & 0xff] ^ C5[(int)(K[3] >> 16) & 0xff] ^ C6[(int)(K[2] >> 8) & 0xff] ^ C7[(int)(K[1] ) & 0xff] ^ rc[r]; L[1] = C0[(int)(K[1] >> 56) ] ^ C1[(int)(K[0] >> 48) & 0xff] ^ C2[(int)(K[7] >> 40) & 0xff] ^ C3[(int)(K[6] >> 32) & 0xff] ^ C4[(int)(K[5] >> 24) & 0xff] ^ C5[(int)(K[4] >> 16) & 0xff] ^ C6[(int)(K[3] >> 8) & 0xff] ^ C7[(int)(K[2] ) & 0xff]; L[2] = C0[(int)(K[2] >> 56) ] ^ C1[(int)(K[1] >> 48) & 0xff] ^ C2[(int)(K[0] >> 40) & 0xff] ^ C3[(int)(K[7] >> 32) & 0xff] ^ C4[(int)(K[6] >> 24) & 0xff] ^ C5[(int)(K[5] >> 16) & 0xff] ^ C6[(int)(K[4] >> 8) & 0xff] ^ C7[(int)(K[3] ) & 0xff]; L[3] = C0[(int)(K[3] >> 56) ] ^ C1[(int)(K[2] >> 48) & 0xff] ^ C2[(int)(K[1] >> 40) & 0xff] ^ C3[(int)(K[0] >> 32) & 0xff] ^ C4[(int)(K[7] >> 24) & 0xff] ^ C5[(int)(K[6] >> 16) & 0xff] ^ C6[(int)(K[5] >> 8) & 0xff] ^ C7[(int)(K[4] ) & 0xff]; L[4] = C0[(int)(K[4] >> 56) ] ^ C1[(int)(K[3] >> 48) & 0xff] ^ C2[(int)(K[2] >> 40) & 0xff] ^ C3[(int)(K[1] >> 32) & 0xff] ^ C4[(int)(K[0] >> 24) & 0xff] ^ C5[(int)(K[7] >> 16) & 0xff] ^ C6[(int)(K[6] >> 8) & 0xff] ^ C7[(int)(K[5] ) & 0xff]; L[5] = C0[(int)(K[5] >> 56) ] ^ C1[(int)(K[4] >> 48) & 0xff] ^ C2[(int)(K[3] >> 40) & 0xff] ^ C3[(int)(K[2] >> 32) & 0xff] ^ C4[(int)(K[1] >> 24) & 0xff] ^ C5[(int)(K[0] >> 16) & 0xff] ^ C6[(int)(K[7] >> 8) & 0xff] ^ C7[(int)(K[6] ) & 0xff]; L[6] = C0[(int)(K[6] >> 56) ] ^ C1[(int)(K[5] >> 48) & 0xff] ^ C2[(int)(K[4] >> 40) & 0xff] ^ C3[(int)(K[3] >> 32) & 0xff] ^ C4[(int)(K[2] >> 24) & 0xff] ^ C5[(int)(K[1] >> 16) & 0xff] ^ C6[(int)(K[0] >> 8) & 0xff] ^ C7[(int)(K[7] ) & 0xff]; L[7] = C0[(int)(K[7] >> 56) ] ^ C1[(int)(K[6] >> 48) & 0xff] ^ C2[(int)(K[5] >> 40) & 0xff] ^ C3[(int)(K[4] >> 32) & 0xff] ^ C4[(int)(K[3] >> 24) & 0xff] ^ C5[(int)(K[2] >> 16) & 0xff] ^ C6[(int)(K[1] >> 8) & 0xff] ^ C7[(int)(K[0] ) & 0xff]; K[0] = L[0]; K[1] = L[1]; K[2] = L[2]; K[3] = L[3]; K[4] = L[4]; K[5] = L[5]; K[6] = L[6]; K[7] = L[7]; /* * apply the r-th round transformation: */ L[0] = C0[(int)(state[0] >> 56) ] ^ C1[(int)(state[7] >> 48) & 0xff] ^ C2[(int)(state[6] >> 40) & 0xff] ^ C3[(int)(state[5] >> 32) & 0xff] ^ C4[(int)(state[4] >> 24) & 0xff] ^ C5[(int)(state[3] >> 16) & 0xff] ^ C6[(int)(state[2] >> 8) & 0xff] ^ C7[(int)(state[1] ) & 0xff] ^ K[0]; L[1] = C0[(int)(state[1] >> 56) ] ^ C1[(int)(state[0] >> 48) & 0xff] ^ C2[(int)(state[7] >> 40) & 0xff] ^ C3[(int)(state[6] >> 32) & 0xff] ^ C4[(int)(state[5] >> 24) & 0xff] ^ C5[(int)(state[4] >> 16) & 0xff] ^ C6[(int)(state[3] >> 8) & 0xff] ^ C7[(int)(state[2] ) & 0xff] ^ K[1]; L[2] = C0[(int)(state[2] >> 56) ] ^ C1[(int)(state[1] >> 48) & 0xff] ^ C2[(int)(state[0] >> 40) & 0xff] ^ C3[(int)(state[7] >> 32) & 0xff] ^ C4[(int)(state[6] >> 24) & 0xff] ^ C5[(int)(state[5] >> 16) & 0xff] ^ C6[(int)(state[4] >> 8) & 0xff] ^ C7[(int)(state[3] ) & 0xff] ^ K[2]; L[3] = C0[(int)(state[3] >> 56) ] ^ C1[(int)(state[2] >> 48) & 0xff] ^ C2[(int)(state[1] >> 40) & 0xff] ^ C3[(int)(state[0] >> 32) & 0xff] ^ C4[(int)(state[7] >> 24) & 0xff] ^ C5[(int)(state[6] >> 16) & 0xff] ^ C6[(int)(state[5] >> 8) & 0xff] ^ C7[(int)(state[4] ) & 0xff] ^ K[3]; L[4] = C0[(int)(state[4] >> 56) ] ^ C1[(int)(state[3] >> 48) & 0xff] ^ C2[(int)(state[2] >> 40) & 0xff] ^ C3[(int)(state[1] >> 32) & 0xff] ^ C4[(int)(state[0] >> 24) & 0xff] ^ C5[(int)(state[7] >> 16) & 0xff] ^ C6[(int)(state[6] >> 8) & 0xff] ^ C7[(int)(state[5] ) & 0xff] ^ K[4]; L[5] = C0[(int)(state[5] >> 56) ] ^ C1[(int)(state[4] >> 48) & 0xff] ^ C2[(int)(state[3] >> 40) & 0xff] ^ C3[(int)(state[2] >> 32) & 0xff] ^ C4[(int)(state[1] >> 24) & 0xff] ^ C5[(int)(state[0] >> 16) & 0xff] ^ C6[(int)(state[7] >> 8) & 0xff] ^ C7[(int)(state[6] ) & 0xff] ^ K[5]; L[6] = C0[(int)(state[6] >> 56) ] ^ C1[(int)(state[5] >> 48) & 0xff] ^ C2[(int)(state[4] >> 40) & 0xff] ^ C3[(int)(state[3] >> 32) & 0xff] ^ C4[(int)(state[2] >> 24) & 0xff] ^ C5[(int)(state[1] >> 16) & 0xff] ^ C6[(int)(state[0] >> 8) & 0xff] ^ C7[(int)(state[7] ) & 0xff] ^ K[6]; L[7] = C0[(int)(state[7] >> 56) ] ^ C1[(int)(state[6] >> 48) & 0xff] ^ C2[(int)(state[5] >> 40) & 0xff] ^ C3[(int)(state[4] >> 32) & 0xff] ^ C4[(int)(state[3] >> 24) & 0xff] ^ C5[(int)(state[2] >> 16) & 0xff] ^ C6[(int)(state[1] >> 8) & 0xff] ^ C7[(int)(state[0] ) & 0xff] ^ K[7]; state[0] = L[0]; state[1] = L[1]; state[2] = L[2]; state[3] = L[3]; state[4] = L[4]; state[5] = L[5]; state[6] = L[6]; state[7] = L[7]; } /* * apply the Miyaguchi-Preneel compression function: */ structpointer->hash[0] ^= state[0] ^ block[0]; structpointer->hash[1] ^= state[1] ^ block[1]; structpointer->hash[2] ^= state[2] ^ block[2]; structpointer->hash[3] ^= state[3] ^ block[3]; structpointer->hash[4] ^= state[4] ^ block[4]; structpointer->hash[5] ^= state[5] ^ block[5]; structpointer->hash[6] ^= state[6] ^ block[6]; structpointer->hash[7] ^= state[7] ^ block[7]; } /** * Initialize the hashing state. */ void WHIRLPOOLinit(struct WHIRLPOOLstruct * const structpointer) { int i; memset(structpointer->bitLength, 0, 32); structpointer->bufferBits = structpointer->bufferPos = 0; structpointer->buffer[0] = 0; /* it's only necessary to cleanup buffer[bufferPos] */ for (i = 0; i < 8; i++) { structpointer->hash[i] = 0L; /* initial value */ } } /** * Delivers input data to the hashing algorithm. * * @param source plaintext data to hash. * @param sourceBits how many bits of plaintext to process. * * This method maintains the invariant: bufferBits < WHIRLPOOL_DIGESTBITS */ void WHIRLPOOLadd(const unsigned char * const source, unsigned long sourceBits, struct WHIRLPOOLstruct * const structpointer) { /* sourcePos | +-------+-------+------- ||||||||||||||||||||| source +-------+-------+------- +-------+-------+-------+-------+-------+------- |||||||||||||||||||||| buffer +-------+-------+-------+-------+-------+------- | bufferPos */ int sourcePos = 0; /* index of leftmost source unsigned char containing data (1 to 8 bits). */ int sourceGap = (8 - ((int)sourceBits & 7)) & 7; /* space on source[sourcePos]. */ int bufferRem = structpointer->bufferBits & 7; /* occupied bits on buffer[bufferPos]. */ int i; uint32_t b, carry; unsigned char *buffer = structpointer->buffer; unsigned char *bitLength = structpointer->bitLength; int bufferBits = structpointer->bufferBits; int bufferPos = structpointer->bufferPos; /* * tally the length of the added data: */ uint64_t value = sourceBits; for (i = 31, carry = 0; i >= 0 && (carry != 0 || value != LL(0)); i--) { carry += bitLength[i] + ((uint32_t)value & 0xff); bitLength[i] = (unsigned char)carry; carry >>= 8; value >>= 8; } /* * process data in chunks of 8 bits (a more efficient approach would be to take whole-word chunks): */ while (sourceBits > 8) { /* N.B. at least source[sourcePos] and source[sourcePos+1] contain data. */ /* * take a byte from the source: */ b = ((source[sourcePos] << sourceGap) & 0xff) | ((source[sourcePos + 1] & 0xff) >> (8 - sourceGap)); /* * process this byte: */ buffer[bufferPos++] |= (unsigned char)(b >> bufferRem); bufferBits += 8 - bufferRem; /* bufferBits = 8*bufferPos; */ if (bufferBits == WHIRLPOOL_DIGESTBITS) { /* * process data block: */ processBuffer(structpointer); /* * reset buffer: */ bufferBits = bufferPos = 0; } buffer[bufferPos] = b << (8 - bufferRem); bufferBits += bufferRem; /* * proceed to remaining data: */ sourceBits -= 8; sourcePos++; } /* now 0 <= sourceBits <= 8; * furthermore, all data (if any is left) is in source[sourcePos]. */ if (sourceBits > 0) { b = (source[sourcePos] << sourceGap) & 0xff; /* bits are left-justified on b. */ /* * process the remaining bits: */ buffer[bufferPos] |= b >> bufferRem; } else { b = 0; } if (bufferRem + sourceBits < 8) { /* * all remaining data fits on buffer[bufferPos], * and there still remains some space. */ bufferBits += sourceBits; } else { /* * buffer[bufferPos] is full: */ bufferPos++; bufferBits += 8 - bufferRem; /* bufferBits = 8*bufferPos; */ sourceBits -= 8 - bufferRem; /* now 0 <= sourceBits < 8; * furthermore, all data (if any is left) is in source[sourcePos]. */ if (bufferBits == WHIRLPOOL_DIGESTBITS) { /* * process data block: */ processBuffer(structpointer); /* * reset buffer: */ bufferBits = bufferPos = 0; } buffer[bufferPos] = b << (8 - bufferRem); bufferBits += (int)sourceBits; } structpointer->bufferBits = bufferBits; structpointer->bufferPos = bufferPos; } /** * Get the hash value from the hashing state. * * This method uses the invariant: bufferBits < WHIRLPOOL_DIGESTBITS */ void WHIRLPOOLfinalize(struct WHIRLPOOLstruct * const structpointer, unsigned char * const result) { int i; unsigned char *buffer = structpointer->buffer; unsigned char *bitLength = structpointer->bitLength; int bufferBits = structpointer->bufferBits; int bufferPos = structpointer->bufferPos; unsigned char *digest = result; /* * append a '1'-bit: */ buffer[bufferPos] |= 0x80U >> (bufferBits & 7); bufferPos++; /* all remaining bits on the current unsigned char are set to zero. */ /* * pad with zero bits to complete (N*WBLOCKBITS - LENGTHBITS) bits: */ if (bufferPos > WBLOCKBYTES - LENGTHBYTES) { if (bufferPos < WBLOCKBYTES) { memset(&buffer[bufferPos], 0, WBLOCKBYTES - bufferPos); } /* * process data block: */ processBuffer(structpointer); /* * reset buffer: */ bufferPos = 0; } if (bufferPos < WBLOCKBYTES - LENGTHBYTES) { memset(&buffer[bufferPos], 0, (WBLOCKBYTES - LENGTHBYTES) - bufferPos); } bufferPos = WBLOCKBYTES - LENGTHBYTES; /* * append bit length of hashed data: */ memcpy(&buffer[WBLOCKBYTES - LENGTHBYTES], bitLength, LENGTHBYTES); /* * process data block: */ processBuffer(structpointer); /* * return the completed message digest: */ for (i = 0; i < WHIRLPOOL_DIGESTBYTES/8; i++) { digest[0] = (unsigned char)(structpointer->hash[i] >> 56); digest[1] = (unsigned char)(structpointer->hash[i] >> 48); digest[2] = (unsigned char)(structpointer->hash[i] >> 40); digest[3] = (unsigned char)(structpointer->hash[i] >> 32); digest[4] = (unsigned char)(structpointer->hash[i] >> 24); digest[5] = (unsigned char)(structpointer->hash[i] >> 16); digest[6] = (unsigned char)(structpointer->hash[i] >> 8); digest[7] = (unsigned char)(structpointer->hash[i] ); digest += 8; } structpointer->bufferBits = bufferBits; structpointer->bufferPos = bufferPos; } hashrat-1.6.1/libUseful-2.1/whirlpool.h0000644000175000017550000000212012470734537020351 0ustar metacosm89metacosm89 #ifndef HASH_WHIRLPOOL_H #define HASH_WHIRLPOOL_H #include /* * Whirlpool-specific definitions. */ #define WHIRLPOOL_DIGESTBYTES 64 #define WHIRLPOOL_DIGESTBITS (8*WHIRLPOOL_DIGESTBYTES) /* 512 */ #define WBLOCKBYTES 64 #define WBLOCKBITS (8*WBLOCKBYTES) /* 512 */ #define LENGTHBYTES 32 #define LENGTHBITS (8*LENGTHBYTES) /* 256 */ typedef struct WHIRLPOOLstruct { unsigned char bitLength[LENGTHBYTES]; /* global number of hashed bits (256-bit counter) */ unsigned char buffer[WBLOCKBYTES]; /* buffer of data to hash */ int bufferBits; /* current number of bits on the buffer */ int bufferPos; /* current (possibly incomplete) byte slot on the buffer */ uint64_t hash[WHIRLPOOL_DIGESTBYTES/8]; /* the hashing state */ } WHIRLPOOLstruct; void WHIRLPOOLinit(struct WHIRLPOOLstruct * const structpointer); void WHIRLPOOLadd(const unsigned char * const source, unsigned long sourceBits, struct WHIRLPOOLstruct * const structpointer); void WHIRLPOOLfinalize(struct WHIRLPOOLstruct * const structpointer, unsigned char * const result); #endif hashrat-1.6.1/libUseful-2.1/md5c.c0000644000175000017550000001765312470734537017176 0ustar metacosm89metacosm89/* This MD5 implmentation is taken from fetchmail, and is declared as in the public domain in the COPYING file that comes with fetchmail */ /* * This code implements the MD5 message-digest algorithm. * The algorithm is due to Ron Rivest. This code was * written by Colin Plumb in 1993, no copyright is claimed. * This code is in the public domain; do with it what you wish. * * Equivalent code is available from RSA Data Security, Inc. * This code has been tested against that, and is equivalent, * except that you don't need to include two pages of legalese * with every copy. * * To compute the message digest of a chunk of bytes, declare an * MD5Context structure, pass it to MD5Init, call MD5Update as * needed on buffers full of bytes, and then call MD5Final, which * will fill a supplied 16-byte array with the digest. */ #include "md5.h" #ifdef HAVE_STRING_H #include /* memmove */ #endif /* * Note: this code is harmless on little-endian machines. */ static void byteReverse(unsigned char *buf, unsigned longs) { uint32_t t; do { t = (uint32_t) ((unsigned) buf[3] << 8 | buf[2]) << 16 | ((unsigned) buf[1] << 8 | buf[0]); *(uint32_t *) buf = t; buf += 4; } while (--longs); } /* * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious * initialization constants. */ void MD5Init(struct MD5Context *ctx) { ctx->buf[0] = 0x67452301; ctx->buf[1] = 0xefcdab89; ctx->buf[2] = 0x98badcfe; ctx->buf[3] = 0x10325476; ctx->bits[0] = 0; ctx->bits[1] = 0; } /* * Update context to reflect the concatenation of another buffer full * of bytes. */ void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len) { register uint32_t t; /* Update bitcount */ t = ctx->bits[0]; if ((ctx->bits[0] = t + ((uint32_t) len << 3)) < t) ctx->bits[1]++; /* Carry from low to high */ ctx->bits[1] += len >> 29; t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */ /* Handle any leading odd-sized chunks */ if (t) { unsigned char *p = (unsigned char *) ctx->in + t; t = 64 - t; if (len < t) { memmove(p, buf, len); return; } memmove(p, buf, t); byteReverse(ctx->in, 16); MD5Transform(ctx->buf, (uint32_t *) ctx->in); buf += t; len -= t; } /* Process data in 64-byte chunks */ while (len >= 64) { memmove(ctx->in, buf, 64); byteReverse(ctx->in, 16); MD5Transform(ctx->buf, (uint32_t *) ctx->in); buf += 64; len -= 64; } /* Handle any remaining bytes of data. */ memmove(ctx->in, buf, len); } /* * Final wrapup - pad to 64-byte boundary with the bit pattern * 1 0* (64-bit count of bits processed, MSB-first) */ void MD5Final(unsigned char digest[16], struct MD5Context *ctx) { unsigned int count; unsigned char *p; /* Compute number of bytes mod 64 */ count = (ctx->bits[0] >> 3) & 0x3F; /* Set the first char of padding to 0x80. This is safe since there is always at least one byte free */ p = ctx->in + count; *p++ = 0x80; /* Bytes of padding needed to make 64 bytes */ count = 64 - 1 - count; /* Pad out to 56 mod 64 */ if (count < 8) { /* Two lots of padding: Pad the first block to 64 bytes */ memset(p, 0, count); byteReverse(ctx->in, 16); MD5Transform(ctx->buf, (uint32_t *) ctx->in); /* Now fill the next block with 56 bytes */ memset(ctx->in, 0, 56); } else { /* Pad block to 56 bytes */ memset(p, 0, count - 8); } byteReverse(ctx->in, 14); /* Append length in bits and transform */ ((uint32_t *) ctx->in)[14] = ctx->bits[0]; ((uint32_t *) ctx->in)[15] = ctx->bits[1]; MD5Transform(ctx->buf, (uint32_t *) ctx->in); byteReverse((unsigned char *) ctx->buf, 4); memmove(digest, ctx->buf, 16); memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */ } /* The four core functions - F1 is optimized somewhat */ /* #define F1(x, y, z) (x & y | ~x & z) */ #define F1(x, y, z) (z ^ (x & (y ^ z))) #define F2(x, y, z) F1(z, x, y) #define F3(x, y, z) (x ^ y ^ z) #define F4(x, y, z) (y ^ (x | ~z)) /* This is the central step in the MD5 algorithm. */ #define MD5STEP(f, w, x, y, z, data, s) \ ( w += f(x, y, z) + data, w = w<>(32-s), w += x ) /* * The core of the MD5 algorithm, this alters an existing MD5 hash to * reflect the addition of 16 longwords of new data. MD5Update blocks * the data and converts bytes into longwords for this routine. */ void MD5Transform(uint32_t buf[4], uint32_t const in[16]) { register uint32_t a, b, c, d; a = buf[0]; b = buf[1]; c = buf[2]; d = buf[3]; MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); buf[0] += a; buf[1] += b; buf[2] += c; buf[3] += d; } hashrat-1.6.1/libUseful-2.1/md5.h0000644000175000017550000000114712470734537017027 0ustar metacosm89metacosm89#ifndef MD5_H #define MD5_H #ifndef HEADER_MD5_H /* Try to avoid clashes with OpenSSL */ #define HEADER_MD5_H #endif #include struct MD5Context { uint32_t buf[4]; uint32_t bits[2]; unsigned char in[64]; }; void MD5Init(struct MD5Context *context); void MD5Update(struct MD5Context *context, unsigned char const *buf, unsigned len); void MD5Final(unsigned char digest[16], struct MD5Context *context); void MD5Transform(uint32_t buf[4], uint32_t const in[16]); /* * This is needed to make RSAREF happy on some MS-DOS compilers. */ typedef struct MD5Context MD5_CTX; #endif /* !MD5_H */ hashrat-1.6.1/libUseful-2.1/Compression.c0000644000175000017550000000071712470734537020640 0ustar metacosm89metacosm89#include "DataProcessing.h" int CompressBytes(char **Out, char *Alg, char *In, int Len, int Level) { TProcessingModule *Mod=NULL; char *Tempstr=NULL; int result, val; Tempstr=FormatStr(Tempstr,"CompressionLevel=%d",Level); Mod=StandardDataProcessorCreate("compression",Alg,Tempstr); if (! Mod) return(-1); val=Len *2; *Out=SetStrLen(*Out,val); result=Mod->Write(Mod,In,Len,Out,&Len,TRUE); DestroyString(Tempstr); DataProcessorDestroy(Mod); return(result); } hashrat-1.6.1/libUseful-2.1/Compression.h0000644000175000017550000000035712470734537020645 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_COMPRESSION_H #define LIBUSEFUL_COMPRESSION_H #include "includes.h" #ifdef __cplusplus extern "C" { #endif int CompressBytes(char **Out, char *Alg, char *In, int Len, int Level); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/ConnectManager.c0000644000175000017550000001430612470734537021222 0ustar metacosm89metacosm89#include "ConnectManager.h" #include "socket.h" #include "SpawnPrograms.h" ListNode *ConnectManServers=NULL; ListNode *ConnectManClients=NULL; ListNode *Timers=NULL; int ConnectManagerAddServer(int sock, char *Name, CONNECT_FUNC OnConnect, ONDATA_FUNC OnData) { TConnectManagerItem *Item; if (! ConnectManServers) ConnectManServers=ListCreate(); if (sock==-1) return(FALSE); Item=(TConnectManagerItem *) calloc(1,sizeof(TConnectManagerItem)); Item->OnConnect=OnConnect; Item->OnData=OnData; Item->Data=(void *) STREAMFromFD(sock); Item->Name=CopyStr(Item->Name,Name); ListAddItem(ConnectManServers,Item); return(TRUE); } STREAM *ConnectManagerAddClient(char *Host, int Port, int Flags, char *Name, CONNECT_FUNC OnConnect, ONDATA_FUNC OnData) { STREAM *S; TConnectManagerItem *Item; if (! ConnectManClients) ConnectManClients=ListCreate(); S=STREAMCreate(); if (! STREAMConnectToHost(S,Host,Port,Flags)) { STREAMClose(S); return(NULL); } Item=(TConnectManagerItem *) calloc(1,sizeof(TConnectManagerItem)); Item->OnConnect=OnConnect; Item->OnData=OnData; Item->Data=(void *) S; Item->Name=CopyStr(Item->Name,Name); Item->Host=CopyStr(Item->Host,Host); Item->Port=Port; if (Item->OnConnect && STREAMIsConnected(S)) Item->OnConnect(Item); ListAddItem(ConnectManClients,Item); return(S); } TConnectManagerItem *ConnectManagerAddIncoming(STREAM *S, char *Name, ONDATA_FUNC OnData) { TConnectManagerItem *Item=NULL; if (! ConnectManClients) ConnectManClients=ListCreate(); Item=(TConnectManagerItem *) calloc(1,sizeof(TConnectManagerItem)); Item->OnData=OnData; Item->Data=(void *) S; Item->Name=CopyStr(Item->Name,Name); ListAddItem(ConnectManClients,Item); return(Item); } int ConnectManagerAddTimer(int Secs, char *Name, ONTIMER_FUNC OnTime, void *Data) { TConnectManagerItem *Item; if (! Timers) Timers=ListCreate(); Item=(TConnectManagerItem *) calloc(1,sizeof(TConnectManagerItem)); Item->OnData=(ONDATA_FUNC) OnTime; Item->Name=CopyStr(Item->Name,Name); Item->TimerVal=Secs; Item->LastTimerFire=time(NULL); Item->Data=Data; ListAddItem(Timers,Item); return(TRUE); } int ConnectManagerCountNamedConnections(char *Name) { TConnectManagerItem *Item; ListNode *Curr; int count=0; Curr=ListGetNext(ConnectManClients); while (Curr) { Item=(TConnectManagerItem *) Curr->Item; if (strcmp(Item->Name,Name)==0) count++; Curr=ListGetNext(Curr); } return(count); } STREAM *ConnectManagerGetStreamByName(char *Name) { TConnectManagerItem *Item; ListNode *Curr; Curr=ListGetNext(ConnectManClients); while (Curr) { Item=(TConnectManagerItem *) Curr->Item; if (strcmp(Item->Name,Name)==0) return((STREAM *) Item->Data); Curr=ListGetNext(Curr); } return(NULL); } ListNode *ConnectManagerGetConnectionList() { return(ConnectManClients); } void ConnectManagerMainLoop() { TConnectManagerItem *Item, *NewItem; ListNode *Curr, *Prev; int highfd=0; fd_set ReadSet, WriteSet; int sock, result, SelectResult, NextTimerFire; STREAM *S; time_t Now; struct timeval tv; int MoreData=FALSE; while (1) { MoreData=FALSE; time(&Now); NextTimerFire=60; Curr=ListGetNext(Timers); while (Curr) { Item=(TConnectManagerItem *) Curr->Item; if (Item->LastTimerFire==0) Item->LastTimerFire=Now; result=(Item->LastTimerFire + Item->TimerVal) - Now; if (result < NextTimerFire) NextTimerFire=result; Curr=ListGetNext(Curr); } FD_ZERO(&ReadSet); FD_ZERO(&WriteSet); Curr=ListGetNext(ConnectManServers); while (Curr) { Item=(TConnectManagerItem *) Curr->Item; S=(STREAM *) Item->Data; FD_SET(S->in_fd,&ReadSet); if (S->in_fd > highfd) highfd=S->in_fd; Curr=ListGetNext(Curr); } Curr=ListGetNext(ConnectManClients); while (Curr) { Item=(TConnectManagerItem *) Curr->Item; S=(STREAM *) Item->Data; if (! S) { ListDeleteNode(Curr); continue; } if (S->State & SS_CONNECTING) { FD_SET(S->in_fd,&WriteSet); } if (S->InEnd > S->InStart) MoreData=TRUE; else { //always add to read set FD_SET(S->in_fd,&ReadSet); if (S->in_fd > highfd) highfd=S->in_fd; } Curr=ListGetNext(Curr); } if (MoreData) { tv.tv_usec = 10; tv.tv_sec = 0; SelectResult=0; } else { //SELECT!!! tv.tv_usec = 20000; tv.tv_sec = NextTimerFire; } SelectResult=select(highfd+1,&ReadSet,&WriteSet,NULL,&tv); if (SelectResult > 0) { Curr=ListGetNext(ConnectManServers); while (Curr) { Item=(TConnectManagerItem *) Curr->Item; S=(STREAM *) Item->Data; if (! S) { ListDeleteNode(Curr); continue; } if (FD_ISSET(S->in_fd,&ReadSet)) { sock=TCPServerSockAccept(S->in_fd,&S->Path); if (sock > -1) { S=STREAMFromFD(sock); STREAMSetFlushType(S,FLUSH_LINE,0,0); NewItem=ConnectManagerAddIncoming(S,Item->Name, Item->OnData); if (Item->OnConnect) Item->OnConnect(NewItem); } } Curr=ListGetNext(Curr); } } Curr=ListGetNext(ConnectManClients); while (Curr) { Item=(TConnectManagerItem *) Curr->Item; S=(STREAM *) Item->Data; if (! S) { ListDeleteNode(Curr); continue; } if ((SelectResult > 0) && FD_ISSET(S->in_fd,&WriteSet)) { if (S->State & SS_CONNECTING) { if (STREAMIsConnected(S)) { STREAMSetFlags(S, 0, SF_NONBLOCK); if (Item->OnConnect) Item->OnConnect(Item); } } } if ( (S->InEnd > S->InStart) || ((SelectResult > 0) && (FD_ISSET(S->in_fd,&ReadSet))) ) { if (! (S->State & SS_CONNECTING)) { if (Item->OnData) { result=Item->OnData(S, Item->Name); if (! result) { STREAMClose(S); Prev=ListGetPrev(Curr); ListDeleteNode(Curr); free(Item); Curr=Prev; } else if (result==RECONNECT) { STREAMClose(S); S=STREAMCreate(); STREAMConnectToHost(S,Item->Host,Item->Port,CONNECT_NONBLOCK); Item->Data=(void *) S; } } } } Curr=ListGetNext(Curr); } time(&Now); Curr=ListGetNext(Timers); while (Curr) { Item=(TConnectManagerItem *) Curr->Item; if ( (Now - Item->LastTimerFire) >= Item->TimerVal ) { if (Item->OnData) ((ONTIMER_FUNC)Item->OnData)(Item->Data,Item->Name); Item->LastTimerFire=Now; } Curr=ListGetNext(Curr); } } } hashrat-1.6.1/libUseful-2.1/ConnectManager.h0000644000175000017550000000220212470734537021217 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_CONNECT_MANAGER_H #define LIBUSEFUL_CONNECT_MANAGER_H #include "file.h" #include "includes.h" #define RECONNECT 2 #ifdef __cplusplus extern "C" { #endif typedef struct t_con_man_item TConnectManagerItem; typedef int (*CONNECT_FUNC)(TConnectManagerItem *Item); typedef int (*ONDATA_FUNC)(STREAM *S, char *Name); typedef int (*ONTIMER_FUNC)(void *Data, char *Name); struct t_con_man_item { char *Name; void *Data; int TimerVal; int LastTimerFire; char *Host; int Port; CONNECT_FUNC OnConnect; ONDATA_FUNC OnData; }; int ConnectManagerAddServer(int sock, char *Name, CONNECT_FUNC OnConnect, ONDATA_FUNC OnData); STREAM *ConnectManagerAddClient(char *Host, int Port, int Flags, char *Name, CONNECT_FUNC OnConnect, ONDATA_FUNC OnData); TConnectManagerItem *ConnectManagerAddIncoming(STREAM *S, char *Name, ONDATA_FUNC OnData); int ConnectManagerAddTimer(int Secs, char *Name, ONTIMER_FUNC OnTime, void *Data); int ConnectManagerCountNamedConnections(char *Name); STREAM *ConnectManagerGetStreamByName(char *Name); ListNode *ConnectManagerGetConnectionList(); void ConnectManagerMainLoop(); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/ConnectionChain.c0000644000175000017550000001460612470734537021403 0ustar metacosm89metacosm89#include "ConnectionChain.h" #include "ParseURL.h" #include "SpawnPrograms.h" #include "expect.h" const char *HopTypes[]={"none","direct","http_proxy","ssh","sshtunnel","shell","telnet",NULL}; typedef enum {CONNECT_HOP_NONE, CONNECT_HOP_TCP, CONNECT_HOP_HTTP_PROXY, CONNECT_HOP_SSH, CONNECT_HOP_SSHTUNNEL, CONNECT_HOP_SHELL_CMD, CONNECT_HOP_TELNET} THopTypes; int DoHTTPProxyTunnel(STREAM *S, char *Host, int Port, int Flags) { char *Tempstr=NULL, *Token=NULL, *ptr=NULL; int result=FALSE; if (Flags & CONNECT_SSL) Tempstr=FormatStr(Tempstr,"CONNECT https://%s:%d HTTP/1.1\r\n\r\n",Host,Port); else Tempstr=FormatStr(Tempstr,"CONNECT http://%s:%d HTTP/1.1\r\n\r\n",Host,Port); STREAMWriteLine(Tempstr,S); STREAMFlush(S); Tempstr=STREAMReadLine(Tempstr,S); StripTrailingWhitespace(Tempstr); ptr=GetToken(Tempstr," ",&Token,0); ptr=GetToken(ptr," ",&Token,0); if (*Token==2) result=TRUE; while (StrLen(Tempstr)) { Tempstr=STREAMReadLine(Tempstr,S); StripTrailingWhitespace(Tempstr); } DestroyString(Tempstr); DestroyString(Token); return(result); } int SendPublicKeyToRemote(STREAM *S, char *KeyFile, char *LocalPath) { char *Tempstr=NULL, *Line=NULL; STREAM *LocalFile; Tempstr=FormatStr(Tempstr,"rm -f %s ; touch %s; chmod 0600 %s\n",KeyFile,KeyFile,KeyFile); STREAMWriteLine(Tempstr,S); LocalFile=STREAMOpenFile(LocalPath,SF_RDONLY); if (LocalFile) { Line=STREAMReadLine(Line,LocalFile); while (Line) { StripTrailingWhitespace(Line); Tempstr=FormatStr(Tempstr,"echo '%s' >> %s\n",Line,KeyFile); STREAMWriteLine(Tempstr,S); Line=STREAMReadLine(Line,LocalFile); } STREAMClose(LocalFile); } return(TRUE); } int ConnectHopSSH(STREAM *S,int Type, char *Host, int Port, char *User, char *Pass, char *NextHop) { char *Tempstr=NULL, *KeyFile=NULL, *Token=NULL, *Token2=NULL; STREAM *AuthS; int result=FALSE, val; unsigned int TunnelPort=0; if (Type==CONNECT_HOP_SSHTUNNEL) { TunnelPort=(rand() % (0xFFFF - 9000)) +9000; //Host will be Token, and port Token2 ParseConnectDetails(NextHop, NULL, &Token, &Token2, NULL, NULL, NULL); Tempstr=FormatStr(Tempstr,"ssh -2 -N %s@%s -L %d:%s:%s ",User,Host,TunnelPort,Token,Token2); } else Tempstr=MCopyStr(Tempstr,"ssh -2 -T ",User,"@",Host, " ", NULL ); if (strncmp(Pass,"keyfile:",8)==0) { if (S->in_fd != -1) { Token=FormatStr(Token,".%d-%d",getpid(),time(NULL)); SendPublicKeyToRemote(S,Token,Pass+8); KeyFile=CopyStr(KeyFile,Token); } Tempstr=MCatStr(Tempstr,"-i ",KeyFile," ",NULL); } if (Port > 0) { Token=FormatStr(Token," -p %d ",Port); Tempstr=CatStr(Tempstr,Token); } if (Type==CONNECT_HOP_SSHTUNNEL) { Tempstr=CatStr(Tempstr, " 2> /dev/null"); AuthS=STREAMSpawnCommand(Tempstr,COMMS_BY_PTY); STREAMSetValue(S,"HelperPID:SSH",STREAMGetValue(AuthS,"PeerPID")); } else if (S->in_fd==-1) { Tempstr=CatStr(Tempstr, " 2> /dev/null"); PseudoTTYSpawn(&S->in_fd,Tempstr,0); S->out_fd=S->in_fd; if (S->in_fd > -1) { result=TRUE; STREAMSetFlushType(S,FLUSH_LINE,0,0); } AuthS=S; } else { if (StrLen(KeyFile)) Tempstr=MCatStr(Tempstr," ; rm -f ",KeyFile,NULL); Tempstr=CatStr(Tempstr,"; exit\n"); STREAMWriteLine(Tempstr,S); result=TRUE; AuthS=S; } if ((StrLen(KeyFile)==0) && (StrLen(Pass) > 0)) { Token=MCopyStr(Token,Pass,"\n",NULL); for (val=0; val < 3; val++) { if (STREAMExpectAndReply(AuthS,"assword:",Token)) break; } } STREAMSetTimeout(AuthS,1); //STREAMExpectSilence(AuthS); sleep(3); if (Type==CONNECT_HOP_SSHTUNNEL) { S->in_fd=ConnectToHost("127.0.0.1",TunnelPort,0); S->out_fd=S->in_fd; if (S->in_fd > -1) result=TRUE; } DestroyString(Tempstr); DestroyString(KeyFile); DestroyString(Token2); DestroyString(Token); return(result); } int STREAMProcessConnectHop(STREAM *S, char *HopURL, int LastHop) { int val, result=FALSE; char *Token=NULL, *Token2=NULL; char *Tempstr=NULL; char *User=NULL, *Host=NULL,*Pass=NULL, *KeyFile=NULL; int Port=0; ParseConnectDetails(HopURL, &Token, &Host, &Token2, &User, &Pass, NULL); printf("PCH: [%s] [%s] [%s] [%s] [%s] %s\n",Token,Host,Token2,User,Pass,HopURL); Port=atoi(Token2); val=MatchTokenFromList(Token,HopTypes,0); switch (val) { case CONNECT_HOP_TCP: if (S->in_fd==-1) { S->in_fd=ConnectToHost(Host,Port,0); S->out_fd=S->in_fd; if (S->in_fd > -1) result=TRUE; } break; case CONNECT_HOP_HTTP_PROXY: result=DoHTTPProxyTunnel(S, Host, Port, 0); break; case CONNECT_HOP_SSH: case CONNECT_HOP_SSHTUNNEL: result=ConnectHopSSH(S, val, Host, Port, User, Pass, S->Path); break; case CONNECT_HOP_SHELL_CMD: break; case CONNECT_HOP_TELNET: if (Port > 0) { Tempstr=FormatStr(Tempstr,"telnet -8 %s %d ",Host, Port); } else Tempstr=FormatStr(Tempstr,"telnet -8 %s ",Host); if (S->in_fd==-1) { PseudoTTYSpawn(& S->in_fd,Tempstr,0); S->out_fd=S->in_fd; if (S->in_fd > -1) { result=TRUE; STREAMSetFlushType(S,FLUSH_LINE,0,0); } } else { Tempstr=CatStr(Tempstr,";exit\n"); STREAMWriteLine(Tempstr,S); result=TRUE; } if (StrLen(User) > 0) { Tempstr=MCopyStr(Tempstr,User,"\n",NULL); STREAMExpectAndReply(S,"ogin:",Tempstr); } if (StrLen(Pass) > 0) { Tempstr=MCopyStr(Tempstr,Pass,"\n",NULL); STREAMExpectAndReply(S,"assword:",Tempstr); } STREAMExpectSilence(S,2); break; } DestroyString(Tempstr); DestroyString(Token); DestroyString(KeyFile); DestroyString(Host); DestroyString(User); DestroyString(Pass); STREAMFlush(S); return(result); } /* int STREAMInternalLastHop(STREAM *S,char *DesiredHost,int DesiredPort, char *LastHop) { int result, Type,Port; char *Host=NULL, *User=NULL, *Pass=NULL, *KeyFile=NULL; ParseConnectHop(LastHop, &Type, &Host, &User, &Pass, &KeyFile, &Port); switch (Type) { } result=STREAMProcessConnectHop(S, Tempstr, TRUE); DestroyString(Tempstr); DestroyString(Host); DestroyString(User); DestroyString(Pass); DestroyString(KeyFile); return(result); } */ int STREAMAddConnectionHop(STREAM *S, char *Value) { char *Tempstr=NULL; StripTrailingWhitespace(Value); StripLeadingWhitespace(Value); if (! S->Values) S->Values=ListCreate(); Tempstr=FormatStr(Tempstr,"ConnectHop:%d",ListSize(S->Values)); STREAMSetValue(S,Tempstr,Value); DestroyString(Tempstr); return(TRUE); } void STREAMAddConnectionHopList(STREAM *S, char *HopList) { char *Hop=NULL, *ptr; ptr=GetToken(HopList,",",&Hop,0); while (ptr) { STREAMAddConnectionHop(S,Hop); ptr=GetToken(ptr,",",&Hop,0); } DestroyString(Hop); } hashrat-1.6.1/libUseful-2.1/ConnectionChain.h0000644000175000017550000000072612470734537021406 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_CONNECTCHAIN #define LIBUSEFUL_CONNECTCHAIN #define PMATCH_SUBSTR 1 #define PMATCH_NOWILDCARDS 2 #define PMATCH_NOCASE 4 #define PMATCH_NOEXTRACT 8 #define PMATCH_NEWLINEEND 16 #define PMATCH_NOTSTART 32 #define PMATCH_NOTEND 64 #include "includes.h" #ifdef __cplusplus extern "C" { #endif int STREAMProcessConnectHop(STREAM *S, char *Value, int LastHop); int STREAMAddConnectionHop(STREAM *S, char *Value); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/Copy.sh0000644000175000017550000000115212470646505017430 0ustar metacosm89metacosm89for FILE in ../*.c do NAME=`basename $FILE` cat $FILE | sed "s/AddItemToList/ListAddItem/g" | sed "s/AddNamedItemToList/ListAddNamedItem/g" | sed "s/GetListHead/ListGetHead/g" | sed "s/GetNextListItem/ListGetNext/g" | sed "s/GetPrevListItem/ListGetPrev/g" | sed "s/DeleteNodeFromList/ListDeleteNode/g" | sed "s/ClearList/ListClear/g" | sed "s/DestroyList/ListDestroy/g" | sed "s/CloneList/ListClone/g" | sed "s/GetNthListItem/ListGetNth/g" | sed "s/GetLastListitem/ListGetLast/g" | sed "s/CreateEmptyList/ListCreate/g" | sed "s/CountItemsInList/ListSize/g" | sed "s/InsertItemIntoList/ListInsertItem/g" > $NAME done hashrat-1.6.1/libUseful-2.1/DataProcessing.c0000644000175000017550000005171112470734537021245 0ustar metacosm89metacosm89#include "DataProcessing.h" #include "SpawnPrograms.h" #include "FileSystem.h" #include "Hash.h" #include "file.h" #ifdef HAVE_LIBSSL #include #include #include #include #include #include typedef struct { char *Key; int KeyLen; char *InputVector; int InputVectorLen; int BlockSize; const EVP_CIPHER *Cipher; EVP_CIPHER_CTX *enc_ctx; EVP_CIPHER_CTX *dec_ctx; } libCryptoProcessorData; #endif void DataProcessorDestroy(void *In) { TProcessingModule *Mod; Mod=(TProcessingModule *) In; if (! Mod) return; if (Mod->Close) Mod->Close(Mod); DestroyString(Mod->Name); DestroyString(Mod->Args); DestroyString(Mod->ReadBuff); DestroyString(Mod->WriteBuff); free(Mod); } char *DataProcessorGetValue(TProcessingModule *M, const char *Name) { ListNode *Curr; if (! M->Values) return(NULL); Curr=ListFindNamedItem(M->Values,Name); if (Curr) return(Curr->Item); return(NULL); } void DataProcessorSetValue(TProcessingModule *M, const char *Name, const char *Value) { ListNode *Curr; if (! M->Values) M->Values=ListCreate(); Curr=ListFindNamedItem(M->Values,Name); if (Curr) Curr->Item = (void *) CopyStr( (char *) Curr->Item, Value); else ListAddNamedItem(M->Values,Name,CopyStr(NULL,Value)); } void DataProcessorUpdateBuffer(char **Buffer, int *Used, int *Size, const char *Data, int DataLen) { int len; if (DataLen < 1) return; len=*Used+DataLen; if (len > *Size) { *Buffer=(char *) realloc(*Buffer,len); *Size=len; } //if we've been supplied actual data to put in the buffer, then do so //otherwise just expand it if needed if (Data) { memcpy((*Buffer) + (*Used) ,Data,DataLen); *Used=len; } } int PipeCommandProcessorInit(TProcessingModule *ProcMod, const char *Args) { int result=FALSE; char *Tempstr=NULL; char *Name=NULL, *Value=NULL, *ptr; STREAM *S; ptr=GetNameValuePair(Args,"\\S","=",&Name,&Value); while (ptr) { if (strcasecmp(Name,"Command")==0) Tempstr=CopyStr(Tempstr,Value); ptr=GetNameValuePair(ptr,"\\S","=",&Name,&Value); } if (! StrLen(Tempstr) ) { DestroyString(Name); DestroyString(Value); DestroyString(Tempstr); return(FALSE); } GetToken(Tempstr,"\\S",&Name,0); Value=FindFileInPath(Value,Name,getenv("PATH")); if (! StrLen(Value) ) { DestroyString(Name); DestroyString(Value); DestroyString(Tempstr); return(FALSE); } S=STREAMSpawnCommand(Value, COMMS_BY_PIPE); ProcMod->Data=(void *) S; result=TRUE; DestroyString(Name); DestroyString(Value); DestroyString(Tempstr); return(result); } int PipeCommandProcessorWrite(TProcessingModule *ProcMod, const char *InData, int InLen, char **OutData, int *OutLen, int Flush) { STREAM *S; S=(STREAM *) ProcMod->Data; if (InLen > 0) { STREAMWriteBytes(S,InData,InLen); STREAMFlush(S); } if (Flush) { if (S->out_fd > -1) close(S->out_fd); S->out_fd=-1; } else if (! STREAMCheckForBytes(S)) return(0); return(STREAMReadBytes(S,*OutData,*OutLen)); } int PipeCommandProcessorClose(TProcessingModule *ProcMod) { STREAMClose((STREAM *) ProcMod->Data); ProcMod->Data=NULL; return(TRUE); } void InitialiseEncryptionComponents(const char *Args, char **Cipher, char **InputVector, int *IVLen, char **Key, int *KeyLen, int *Flags) { char *TmpKey=NULL, *Tempstr=NULL; int klen=0, slen=0; char *Name=NULL, *Value=NULL, *ptr; char *Salt=NULL; *IVLen=0; ptr=GetNameValuePair(Args,"\\S","=",&Name,&Value); while (ptr) { if (StrLen(Name)) { if (strcasecmp(Name,"Cipher")==0) { *Cipher=CopyStr(*Cipher,Value); } if (strcasecmp(Name,"Key")==0) { TmpKey=CopyStr(TmpKey,Value); klen=StrLen(TmpKey); } if (strcasecmp(Name,"Salt")==0) { Salt=CopyStr(Salt,Value); slen=StrLen(Salt); } if ( (strcasecmp(Name,"iv")==0) || (strcasecmp(Name,"InputVector")==0) ) { *InputVector=CopyStr(*InputVector,Value); *IVLen=StrLen(*InputVector); } if (strcasecmp(Name,"HexKey")==0) { klen=HexStrToBytes(&TmpKey, Value); } if ( (strcasecmp(Name,"HexIV")==0) || (strcasecmp(Name,"HexInputVector")==0) ) { *IVLen=HexStrToBytes(InputVector,Value); } if (strcasecmp(Name,"PadBlock")==0) { if (strcasecmp(Value,"N")==0) *Flags |= DPM_NOPAD_DATA; } } ptr=GetNameValuePair(ptr,"\\S","=",&Name,&Value); } Tempstr=SetStrLen(Tempstr,klen+slen); memcpy(Tempstr,Salt,slen); memcpy(Tempstr+slen,TmpKey,klen); *KeyLen=HashBytes(Key,"md5",Tempstr,slen+klen,0); DestroyString(Name); DestroyString(Value); DestroyString(Tempstr); DestroyString(TmpKey); DestroyString(Salt); } #ifdef HAVE_LIBCRYPTO typedef enum {CI_BLOWFISH, CI_RC2, CI_RC4, CI_RC5, CI_DES, CI_DESX, CI_CAST,CI_IDEA,CI_AES, CI_AES_256} LIBUSEFUL_CRYPT_CIPHERS; int libCryptoCipherAvailable(int CipherNum) { switch(CipherNum) { case CI_BLOWFISH: #ifdef HAVE_EVP_BF_CBC return(TRUE); #endif break; case CI_RC2: #ifdef HAVE_EVP_RC2_CBC return(TRUE); #endif break; case CI_RC4: #ifdef HAVE_EVP_RC4_CBC return(TRUE); #endif break; case CI_RC5: #ifdef HAVE_EVP_RC5_CBC return(TRUE); #endif break; case CI_DES: #ifdef HAVE_EVP_DES_CBC return(TRUE); #endif break; case CI_DESX: #ifdef HAVE_EVP_DESX_CBC return(TRUE); #endif break; case CI_CAST: #ifdef HAVE_EVP_CAST5_CBC return(TRUE); #endif break; case CI_IDEA: #ifdef HAVE_EVP_IDEA_CBC return(TRUE); #endif break; case CI_AES: #ifdef HAVE_EVP_AES_129_CBC return(TRUE); #endif break; case CI_AES_256: #ifdef HAVE_EVP_AES_256_CBC return(TRUE); #endif break; } return(FALSE); } int libCryptoProcessorInit(TProcessingModule *ProcMod, const char *Args) { int result=FALSE; #ifdef HAVE_LIBSSL libCryptoProcessorData *Data; EVP_CIPHER_CTX *ctx; char *CipherList[]={"blowfish","rc2","rc4","rc5","des","desx","cast","idea","aes","aes-256",NULL}; int val; char *Tempstr=NULL; val=MatchTokenFromList(ProcMod->Name,CipherList,0); if (val==-1) return(FALSE); if (! libCryptoCipherAvailable(val)) return(FALSE); Data=(libCryptoProcessorData *) calloc(1,sizeof(libCryptoProcessorData)); //Tempstr here holds the cipher name InitialiseEncryptionComponents(Args, &Tempstr, &Data->InputVector, &Data->InputVectorLen, & Data->Key, &Data->KeyLen,&ProcMod->Flags); if (StrLen(ProcMod->Name)==0) ProcMod->Name=CopyStr(ProcMod->Name,Tempstr); switch(val) { /* case CI_NONE: Data->Cipher=EVP_enc_null(); break; */ case CI_BLOWFISH: #ifdef HAVE_EVP_BF_CBC Data->Cipher=EVP_bf_cbc(); #endif break; case CI_RC2: #ifdef HAVE_EVP_RC2_CBC Data->Cipher=EVP_rc2_cbc(); #endif break; case CI_RC4: #ifdef HAVE_EVP_RC4_CBC Data->Cipher=EVP_rc4(); #endif break; case CI_RC5: #ifdef HAVE_EVP_RC5_32_12_16_CBC //Data->Cipher=EVP_rc5_32_12_16_cbc(); #endif break; case CI_DES: #ifdef HAVE_EVP_DES_CBC Data->Cipher=EVP_des_cbc(); #endif break; case CI_DESX: #ifdef HAVE_EVP_DESX_CBC Data->Cipher=EVP_desx_cbc(); #endif break; case CI_CAST: #ifdef HAVE_EVP_CAST5_CBC Data->Cipher=EVP_cast5_cbc(); #endif break; case CI_IDEA: #ifdef HAVE_EVP_IDEA_CBC Data->Cipher=EVP_idea_cbc(); #endif break; case CI_AES: #ifdef HAVE_EVP_AES_128_CBC Data->Cipher=EVP_aes_128_cbc(); #endif break; case CI_AES_256: #ifdef HAVE_EVP_AES_256_CBC Data->Cipher=EVP_aes_256_cbc(); #endif break; } if (Data->Cipher) { Data->enc_ctx=(EVP_CIPHER_CTX *) calloc(1,sizeof(EVP_CIPHER_CTX)); Data->dec_ctx=(EVP_CIPHER_CTX *) calloc(1,sizeof(EVP_CIPHER_CTX)); EVP_CIPHER_CTX_init(Data->enc_ctx); EVP_CIPHER_CTX_init(Data->dec_ctx); Data->BlockSize=EVP_CIPHER_block_size(Data->Cipher); EVP_EncryptInit_ex(Data->enc_ctx,Data->Cipher,NULL,Data->Key,Data->InputVector); EVP_DecryptInit_ex(Data->dec_ctx,Data->Cipher,NULL,Data->Key,Data->InputVector); if (ProcMod->Flags & DPM_NOPAD_DATA) EVP_CIPHER_CTX_set_padding(Data->enc_ctx,FALSE); ProcMod->Data=Data; result=TRUE; DataProcessorSetValue(ProcMod,"Cipher",Tempstr); Tempstr=FormatStr(Tempstr,"%d",Data->BlockSize); DataProcessorSetValue(ProcMod,"BlockSize",Tempstr); } DestroyString(Tempstr); #endif return(result); } int libCryptoProcessorClose(TProcessingModule *ProcMod) { #ifdef HAVE_LIBSSL libCryptoProcessorData *Data; EVP_CIPHER_CTX *ctx; Data=(libCryptoProcessorData *) ProcMod->Data; if (Data) { EVP_CIPHER_CTX_cleanup(Data->enc_ctx); EVP_CIPHER_CTX_cleanup(Data->dec_ctx); DestroyString(Data->Key); DestroyString(Data->InputVector); free(Data); } ProcMod->Data=NULL; #endif return(TRUE); } int libCryptoProcessorWrite(TProcessingModule *ProcMod, const char *InData, int InLen, char **OutData, int *OutLen, int Flush) { int wrote=0; #ifdef HAVE_LIBSSL /* int len, result=0, val; libCryptoProcessorData *Data; EVP_CIPHER_CTX *ctx; char *ptr, *Tempstr=NULL; if (ProcMod->Flags & DPM_WRITE_FINAL) return(0); ptr=OutData; Data=(libCryptoProcessorData *) ProcMod->Data; ctx=Data->enc_ctx; ProcMod->Flags = ProcMod->Flags & ~DPM_WRITE_FINAL; if (ProcMod->Flags & DPM_NOPAD_DATA) { val=InLen % Data->BlockSize; Tempstr=CopyStrLen(Tempstr,InData,InLen); if (val !=0) { Tempstr=SetStrLen(Tempstr,InLen + (Data->BlockSize-val)); memset(Tempstr+InLen,' ', (Data->BlockSize-val)); val=InLen+(Data->BlockSize-val); } else val=InLen; result=EVP_EncryptUpdate(ctx, ptr, &len, Tempstr, val); } else { result=EVP_EncryptUpdate(ctx, ptr, &len, InData, InLen); } if (! result) wrote=0; else wrote=len; DestroyString(Tempstr); */ #endif return(wrote); } int libCryptoProcessorFlush(TProcessingModule *ProcMod, const char *InData, int InLen, char *OutData, int OutLen) { int wrote=0; /* int result=0, len; libCryptoProcessorData *Data; if (ProcMod->Flags & DPM_WRITE_FINAL) return(0); Data=(libCryptoProcessorData *) ProcMod->Data; if (Data) { if (InLen > 0) { result=libCryptoProcessorWrite(ProcMod, InData, InLen, OutData, OutLen,TRUE); if (result > 0) return(result); } len=OutLen; result=EVP_EncryptFinal_ex(Data->enc_ctx, OutData, &len); ProcMod->Flags |= DPM_WRITE_FINAL; } if (! result) wrote=0; else wrote=len; */ return(wrote); } int libCryptoProcessorRead(TProcessingModule *ProcMod, const char *InData, int InLen, char **OutData, int *OutLen, int Flush) { int bytes_read=0; #ifdef HAVE_LIBSSL /* int len, ivlen, result, val; libCryptoProcessorData *Data; EVP_CIPHER_CTX *ctx; char *ptr; ptr=OutData; Data=(libCryptoProcessorData *) ProcMod->Data; if (!Data) return(0); if (ProcMod->Flags & DPM_READ_FINAL) { if (InLen==0) return(0); EVP_DecryptInit_ex(Data->dec_ctx,Data->Cipher,NULL,Data->Key,Data->InputVector); } ctx=Data->dec_ctx; if (InLen==0) { len=0; result=EVP_DecryptFinal_ex(ctx, ptr, &len); ProcMod->Flags |= DPM_READ_FINAL; //this so we don't try //another read } else { len=OutLen; result=EVP_DecryptUpdate(ctx, ptr, &len, InData, InLen); } if (! result) bytes_read=-1; else bytes_read+=InLen; //should be 'len' but DecryptUpdate returns the //number of bytes output, not the number consumed */ #endif return(bytes_read); } #endif #ifdef HAVE_LIBZ #include typedef struct { z_stream z_in; z_stream z_out; } zlibData; #endif int zlibProcessorInit(TProcessingModule *ProcMod, const char *Args) { int result=FALSE; #ifdef HAVE_LIBZ zlibData *ZData; int CompressionLevel=5; char *ptr, *Name=NULL, *Value=NULL; ptr=GetNameValuePair(Args,"\\S","=",&Name,&Value); while (ptr) { if (strcasecmp(Name,"CompressionLevel")==0) CompressionLevel=atoi(Value); if (strcasecmp(Name,"Level")==0) CompressionLevel=atoi(Value); ptr=GetNameValuePair(ptr,"\\S","=",&Name,&Value); } ProcMod->ReadMax=4096; ProcMod->WriteMax=4096; ZData=(zlibData *) calloc(1,sizeof(zlibData)); ZData->z_in.avail_in=0; ZData->z_in.avail_out=0; result=inflateInit(&ZData->z_in); ZData->z_out.avail_in=0; ZData->z_out.avail_out=0; deflateInit(&ZData->z_out,CompressionLevel); ProcMod->Data=(void *) ZData; result=TRUE; DestroyString(Name); DestroyString(Value); #endif return(result); } int gzipProcessorInit(TProcessingModule *ProcMod, const char *Args) { int result=FALSE; #ifdef HAVE_LIBZ zlibData *ZData; int CompressionLevel=5; char *ptr, *Name=NULL, *Value=NULL; ptr=GetNameValuePair(Args,"\\S","=",&Name,&Value); while (ptr) { if (strcasecmp(Name,"CompressionLevel")==0) CompressionLevel=atoi(Value); if (strcasecmp(Name,"Level")==0) CompressionLevel=atoi(Value); ptr=GetNameValuePair(ptr,"\\S","=",&Name,&Value); } ProcMod->ReadMax=4096; ProcMod->WriteMax=4096; ZData=(zlibData *) calloc(1,sizeof(zlibData)); ZData->z_in.avail_in=0; ZData->z_in.avail_out=0; result=inflateInit2(&ZData->z_in,47); ZData->z_out.avail_in=0; ZData->z_out.avail_out=0; deflateInit2(&ZData->z_out,5,Z_DEFLATED,30,8,Z_DEFAULT_STRATEGY); ProcMod->Data=(void *) ZData; result=TRUE; DestroyString(Name); DestroyString(Value); #endif return(result); } //Zlib is a little weird. It accepts a pointer to a buffer (next_in) and a buffer length (avail_in) to specify the input //and another buffer (next_out) and length (avail_out) to write data into. When called it reads bytes from next_in, updates //next_in to point to the end of what it read, and subtracts the number of bytes it read from avail_in so that avail_in //now says how many UNUSED bytes there are pointed to by next_in. Similarly it writes to next_out, updating that pointer //to point to the end of the write, and updating avail_out to say how much room is LEFT usused in the output buffer // //However, if zlib doesn't use all avail_in, then you can't mess with that buffer until it has. Hence you can't take the unusued //data from next_in/avail_in and copy it to a new buffer and pass that buffer into deflate/inflate on the next call. If zlib //doesn't use all the input the only way to handle it is to grow the output buffer and call inflate/deflate again, so that it //can write into the expanded buffer until it's used up all input. // //Finally, when you've supplied all the input you've got, you have to call deflate with 'Z_FINISH' so that it knows there's no //more data coming. int zlibProcessorWrite(TProcessingModule *ProcMod, const char *InData, int InLen, char **OutData, int *OutLen, int Flush) { int wrote=0; #ifdef HAVE_LIBZ int val=0; zlibData *ZData; if (ProcMod->Flags & DPM_WRITE_FINAL) return(STREAM_CLOSED); ZData=(zlibData *) ProcMod->Data; ZData->z_out.avail_in=InLen; ZData->z_out.next_in=(char *) InData; ZData->z_out.avail_out=*OutLen; ZData->z_out.next_out=*OutData; while ((ZData->z_out.avail_in > 0) || Flush) { if (Flush) val=deflate(& ZData->z_out, Z_FINISH); else val=deflate(& ZData->z_out, Z_NO_FLUSH); wrote=*OutLen-ZData->z_out.avail_out; if (val==Z_STREAM_END) { ProcMod->Flags |= DPM_WRITE_FINAL; break; } if ((ZData->z_out.avail_in > 0) || Flush) { *OutLen+=BUFSIZ; *OutData=(char *) realloc(*OutData,*OutLen); ZData->z_out.avail_out+=BUFSIZ; } } #endif return(wrote); } int zlibProcessorRead(TProcessingModule *ProcMod, const char *InData, int InLen, char **OutData, int *OutLen, int Flush) { int wrote=0; #ifdef HAVE_LIBZ int result=0; zlibData *ZData; if (ProcMod->Flags & DPM_READ_FINAL) return(STREAM_CLOSED); ZData=(zlibData *) ProcMod->Data; ZData->z_in.avail_in=InLen; ZData->z_in.next_in=(char *) InData; ZData->z_in.avail_out=*OutLen; ZData->z_in.next_out=*OutData; while ((ZData->z_in.avail_in > 0) || Flush) { if (Flush) result=inflate(& ZData->z_in, Z_FINISH); else result=inflate(& ZData->z_in, Z_NO_FLUSH); wrote=(*OutLen)-ZData->z_in.avail_out; fprintf(stderr,"result=%d %d %d\n",result,InLen,Flush); switch (result) { case Z_DATA_ERROR: inflateSync(&ZData->z_in); break; case Z_ERRNO: if (Flush) ProcMod->Flags |= DPM_READ_FINAL; break; case Z_STREAM_ERROR: case Z_STREAM_END: ProcMod->Flags |= DPM_READ_FINAL; break; } if (ProcMod->Flags & DPM_READ_FINAL) break; if ((ZData->z_in.avail_in > 0) || Flush) { (*OutLen)+=BUFSIZ; *OutData=(char *) realloc(*OutData,*OutLen); ZData->z_in.next_out=(*OutData) + wrote; ZData->z_in.avail_out=(*OutLen) - wrote; } } #endif return(wrote); } /* int zlibProcessorRead(TProcessingModule *ProcMod, const char *InData, int InLen, char **OutData, int *OutLen, int Flush) { int wrote=0, result; #ifdef HAVE_LIBZ zlibData *ZData; int len; ZData=(zlibData *) ProcMod->Data; if (InLen > 0) { DataProcessorUpdateBuffer(&ProcMod->ReadBuff, &ProcMod->ReadUsed, &ProcMod->ReadSize, InData, InLen); ZData->z_in.next_in=ProcMod->ReadBuff; ZData->z_in.avail_in=ProcMod->ReadUsed; ZData->z_in.avail_out=*OutLen; ZData->z_in.next_out=*OutData; if (InLen==0) result=inflate(& ZData->z_in, Z_FINISH); else result=inflate(& ZData->z_in, Z_NO_FLUSH); if (ZData->z_in.avail_in > 0) memmove(ProcMod->ReadBuff,ZData->z_in.next_in,ZData->z_in.avail_in); ProcMod->ReadUsed=ZData->z_in.avail_in; wrote=OutLen-ZData->z_in.avail_out; } #endif return(wrote); } */ int zlibProcessorClose(TProcessingModule *ProcMod) { #ifdef HAVE_LIBZ zlibData *ZData; ZData=(zlibData *) ProcMod->Data; if (ZData) { inflateEnd(&ZData->z_in); deflateEnd(&ZData->z_out); free(ZData); ProcMod->Data=NULL; } #endif return(TRUE); } TProcessingModule *StandardDataProcessorCreate(const char *Class, const char *Name, const char *iArgs) { char *Args=NULL; TProcessingModule *Mod=NULL; Args=CopyStr(Args,iArgs); #ifdef HAVE_LIBSSL #ifdef HAVE_LIBCRYPTO if (strcasecmp(Class,"crypto")==0) { Mod=(TProcessingModule *) calloc(1,sizeof(TProcessingModule)); Mod->Args=CopyStr(Mod->Args,Args); Mod->Name=CopyStr(Mod->Name,Name); Mod->Init=libCryptoProcessorInit; Mod->Write=libCryptoProcessorWrite; Mod->Read=libCryptoProcessorRead; Mod->Close=libCryptoProcessorClose; } #endif #endif if (strcasecmp(Class,"compress")==0) { Mod=(TProcessingModule *) calloc(1,sizeof(TProcessingModule)); Mod->Args=CopyStr(Mod->Args,Args); Mod->Name=CopyStr(Mod->Name,Name); if (strcasecmp(Name,"zlib")==0) { #ifdef HAVE_LIBZ Mod->Init=zlibProcessorInit; Mod->Write=zlibProcessorWrite; Mod->Close=zlibProcessorClose; #endif } else if (strcasecmp(Name,"gzip")==0) { #ifdef HAVE_LIBZ Mod->Init=gzipProcessorInit; Mod->Write=zlibProcessorWrite; Mod->Close=zlibProcessorClose; #endif } else if (strcasecmp(Name,"bzip2")==0) { Args=MCopyStr(Args,"Command='bzip2 --stdout -' ",iArgs,NULL); Mod->Init=PipeCommandProcessorInit; Mod->Write=PipeCommandProcessorWrite; Mod->Close=PipeCommandProcessorClose; } else if (strcasecmp(Name,"xz")==0) { Args=MCopyStr(Args,"Command='xz --stdout -' ",iArgs,NULL); Mod->Init=PipeCommandProcessorInit; Mod->Write=PipeCommandProcessorWrite; Mod->Close=PipeCommandProcessorClose; } } if (strcasecmp(Class,"uncompress")==0) { Mod=(TProcessingModule *) calloc(1,sizeof(TProcessingModule)); Mod->Args=CopyStr(Mod->Args,Args); Mod->Name=CopyStr(Mod->Name,Name); if (strcasecmp(Name,"zlib")==0) { #ifdef HAVE_LIBZ Mod->Init=zlibProcessorInit; Mod->Read=zlibProcessorRead; Mod->Close=zlibProcessorClose; #endif } else if (strcasecmp(Name,"gzip")==0) { #ifdef HAVE_LIBZ Mod->Init=gzipProcessorInit; Mod->Read=zlibProcessorRead; Mod->Close=zlibProcessorClose; #endif } else if (strcasecmp(Name,"bzip2")==0) { Args=MCopyStr(Args,"Command='bzip2 -d --stdout -' ",iArgs,NULL); Mod->Init=PipeCommandProcessorInit; Mod->Read=PipeCommandProcessorWrite; Mod->Close=PipeCommandProcessorClose; } else if (strcasecmp(Name,"xz")==0) { Args=MCopyStr(Args,"Command='xz -d --stdout -' ",iArgs,NULL); Mod->Init=PipeCommandProcessorInit; Mod->Read=PipeCommandProcessorWrite; Mod->Close=PipeCommandProcessorClose; } } if (Mod && Mod->Init && Mod->Init(Mod, Args)) return(Mod); DestroyString(Args); DataProcessorDestroy(Mod); return(NULL); } int STREAMAddDataProcessor(STREAM *S, TProcessingModule *Mod, const char *Args) { ListNode *Curr; char *Tempstr=NULL; int len; STREAMFlush(S); if (! S->ProcessingModules) S->ProcessingModules=ListCreate(); Tempstr=MCopyStr(Tempstr,Mod->Name,NULL); ListAddNamedItem(S->ProcessingModules,Tempstr,Mod); len=S->InEnd - S->InStart; Tempstr=SetStrLen(Tempstr,len); memcpy(Tempstr,S->InputBuff + S->InStart,len); STREAMResetInputBuffers(S); Curr=ListGetNext(Mod->Values); while (Curr) { STREAMSetValue(S,Curr->Tag,(char *) Curr->Item); Curr=ListGetNext(Curr); } STREAMReadThroughProcessors(S, Tempstr, len); DestroyString(Tempstr); return(TRUE); } int STREAMDeleteDataProcessor(STREAM *S, char *Class, char *Name) { ListNode *Curr; char *Tempstr=NULL; STREAMFlush(S); Tempstr=MCopyStr(Tempstr,Class,":",Name,NULL); Curr=ListFindNamedItem(S->ProcessingModules,Tempstr); ListDeleteNode(Curr); DestroyString(Tempstr); return(TRUE); } int DataProcessorAvailable(const char *Class, const char *Name) { int result=FALSE; TProcessingModule *Mod; Mod=StandardDataProcessorCreate(Class,Name,""); if (Mod) result=TRUE; DataProcessorDestroy(Mod); return(result); } int STREAMAddStandardDataProcessor(STREAM *S, const char *Class, const char *Name, const char *Args) { TProcessingModule *Mod=NULL; Mod=StandardDataProcessorCreate(Class,Name,Args); if (Mod) { STREAMAddDataProcessor(S, Mod, Args); return(TRUE); } return(FALSE); } void STREAMClearDataProcessors(STREAM *S) { STREAMFlush(S); STREAMResetInputBuffers(S); ListDestroy(S->ProcessingModules, DataProcessorDestroy); } hashrat-1.6.1/libUseful-2.1/DataProcessing.h0000644000175000017550000000337012470734537021250 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_DATA_PROCESSING_H #define LIBUSEFUL_DATA_PROCESSING_H #include "includes.h" #ifdef __cplusplus extern "C" { #endif typedef struct t_dpmod TProcessingModule; typedef int (*DATA_PROCESS_INIT_FUNC)(TProcessingModule *Mod, const char *Args); typedef int (*DATA_PROCESS_RW_FUNC)(TProcessingModule *, const char *Data, int len, char **OutBuff, int *OutBuffLen, int Flush); typedef int (*DATA_PROCESS_CLOSE_FUNC)(TProcessingModule *Mod); #define DPM_READ_FINAL 1 #define DPM_WRITE_FINAL 2 #define DPM_NOPAD_DATA 4 struct t_dpmod { char *Name; char *Args; int Flags; char *ReadBuff, *WriteBuff; int ReadSize, WriteSize; int ReadUsed, WriteUsed; int ReadMax, WriteMax; ListNode *Values; DATA_PROCESS_INIT_FUNC Init; DATA_PROCESS_RW_FUNC Read; DATA_PROCESS_RW_FUNC Write; DATA_PROCESS_CLOSE_FUNC Close; void *Data; }; TProcessingModule *StandardDataProcessorCreate(const char *Class, const char *Name, const char *Arg); int DataProcessorInit(TProcessingModule *ProcMod, const char *Key, const char *InputVector); void DataProcessorDestroy(void *ProcMod); char *DataProcessorGetValue(TProcessingModule *M, const char *Name); void DataProcessorSetValue(TProcessingModule *M, const char *Name, const char *Value); void InitialiseEncryptionComponents(const char *Args, char **CipherName, char **InputVector, int *InputVectorLen, char **Key, int *KeyLen, int *Flags); int STREAMAddDataProcessor(STREAM *S, TProcessingModule *Mod, const char *Args); int DataProcessorAvailable(const char *Class, const char *Name); int STREAMAddStandardDataProcessor(STREAM *S, const char *Class, const char *Name, const char *Args); void STREAMClearDataProcessors(STREAM *S); int STREAMDeleteDataProcessor(STREAM *S, char *Class, char *Name); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/EncryptedFiles.c0000644000175000017550000000362312470734537021256 0ustar metacosm89metacosm89#include "EncryptedFiles.h" char *FormatEncryptArgs(char *RetBuff, int Flags, const char *Cipher, const char *Key, const char *InitVector, const char *Salt ) { char *EncryptArgs=NULL, *Tempstr=NULL; EncryptArgs=CopyStr(RetBuff,""); EncryptArgs=CopyStr(EncryptArgs,"Cipher="); EncryptArgs=CatStr(EncryptArgs,Cipher); if (StrLen(Key)) { if (Flags & FLAG_HEXKEY) Tempstr=FormatStr(Tempstr," hexkey='%s'",Key); else Tempstr=FormatStr(Tempstr," key='%s'",Key); EncryptArgs=CatStr(EncryptArgs,Tempstr); } if (StrLen(InitVector)) { if (Flags & FLAG_HEXIV) Tempstr=FormatStr(Tempstr," hexiv='%s'",InitVector); else Tempstr=FormatStr(Tempstr," iv='%s'",InitVector); EncryptArgs=CatStr(EncryptArgs,Tempstr); } if (StrLen(Salt)) { if (Flags & FLAG_HEXSALT) Tempstr=FormatStr(Tempstr," hexsalt='%s'",Salt); else Tempstr=FormatStr(Tempstr," salt='%s'",Salt); EncryptArgs=CatStr(EncryptArgs,Tempstr); } if (Flags & FLAG_NOPAD_DATA) EncryptArgs=CatStr(EncryptArgs," PadBlock=N"); return(EncryptArgs); } int AddEncryptionHeader(STREAM *S, int Flags, const char *Cipher, const char *Key, const char *InitVector, const char *Salt) { char *EncryptArgs=NULL; char *Tempstr=NULL; int result=FALSE; EncryptArgs=FormatEncryptArgs(EncryptArgs,Flags, Cipher, Key, InitVector,Salt); if (STREAMAddStandardDataProcessor(S,"Crypto",Cipher,EncryptArgs)) { EncryptArgs=FormatEncryptArgs(EncryptArgs,Flags, Cipher, "", InitVector,Salt); Tempstr=FormatStr(Tempstr,"ENCR %s\n",EncryptArgs); STREAMWriteLine(Tempstr,S); result=TRUE; } DestroyString(Tempstr); DestroyString(EncryptArgs); return(result); } void HandleDecryptionHeader(STREAM *S, const char *Header, const char *Key) { const char *ptr; char *Tempstr=NULL; ptr=Header; if (strncmp(ptr,"ENCR ",5)==0) ptr+=5; Tempstr=MCopyStr(Tempstr,ptr," key='",Key,"'",NULL); fprintf(stderr,"SASDP: [%s]\n",Tempstr); STREAMAddStandardDataProcessor(S,"crypto","",Tempstr); DestroyString(Tempstr); } hashrat-1.6.1/libUseful-2.1/EncryptedFiles.h0000644000175000017550000000131212470734537021254 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_ENCRYPTEDFILES_H #define LIBUSEFUL_ENCRYPTEDFILES_H #include "DataProcessing.h" #include "file.h" #define FLAG_ENCRYPT 1 #define FLAG_DECRYPT 2 #define FLAG_HEXKEY 4 #define FLAG_HEXIV 8 #define FLAG_HEXSALT 16 #define FLAG_SPEED 64 #define FLAG_NOPAD_DATA 128 #ifdef __cplusplus extern "C" { #endif char *FormatEncryptArgs(char *RetBuff,int Flags, const char *Cipher, const char *Key, const char *InitVector, const char *Salt ); int AddEncryptionHeader(STREAM *S, int Flags, const char *Cipher, const char *Key, const char *InitVector, const char *Salt); void HandleDecryptionHeader(STREAM *S, const char *Header, const char *Key); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/FileSystem.c0000644000175000017550000001073112470734537020420 0ustar metacosm89metacosm89#include "FileSystem.h" #include char *GetBasename(char *Path) { char *ptr; int len; len=StrLen(Path); if (len==0) return(""); if (len==1) return(Path); ptr=Path+len-1; while (ptr > Path) { if ((*ptr=='/') && (*(ptr+1) != '\0')) break; ptr--; } if ((*ptr=='/') && (*(ptr+1) != '\0')) ptr++; return(ptr); } char *SlashTerminateDirectoryPath(char *DirPath) { char *ptr, *RetStr=NULL; if (! DirPath) return(CopyStr(DirPath,"/")); RetStr=DirPath; ptr=RetStr+StrLen(RetStr)-1; if (*ptr != '/') RetStr=AddCharToStr(RetStr,'/'); return(RetStr); } char *StripDirectorySlash(char *DirPath) { char *ptr; //don't strip '/' (root dir) if (StrLen(DirPath)==1) return(DirPath); ptr=DirPath+StrLen(DirPath)-1; if (*ptr == '/') *ptr='\0'; return(DirPath); } int MakeDirPath(char *Path, int DirMask) { char *ptr; char *Tempstr=NULL; int result=-1; ptr=Path; if (*ptr=='/') ptr++; ptr=strchr(ptr, '/'); while (ptr) { Tempstr=CopyStrLen(Tempstr,Path,ptr-Path); result=mkdir(Tempstr, DirMask); if ((result==-1) && (errno != EEXIST)) break; ptr=strchr(++ptr, '/'); } DestroyString(Tempstr); if (result==0) return(TRUE); return(FALSE); } int ChangeFileExtension(char *FilePath, char *NewExt) { char *ptr; char *Tempstr=NULL; int result; Tempstr=CopyStr(Tempstr,FilePath); ptr=strrchr(Tempstr,'/'); if (!ptr) ptr=Tempstr; ptr=strrchr(ptr,'.'); if (! ptr) ptr=Tempstr+StrLen(Tempstr); *ptr='\0'; if (*NewExt=='.') Tempstr=CatStr(Tempstr,NewExt); else Tempstr=MCatStr(Tempstr,".",NewExt,NULL); result=rename(FilePath,Tempstr); DestroyString(Tempstr); if (result==0) return(TRUE); else return(FALSE); } int FindFilesInPath(char *File, char *Path, ListNode *Files) { char *Tempstr=NULL, *CurrPath=NULL, *ptr; int i; glob_t Glob; if (*File=='/') { CurrPath=CopyStr(CurrPath,""); ptr=""; //so we execute once below } else ptr=GetToken(Path,":",&CurrPath,0); while (ptr) { CurrPath=SlashTerminateDirectoryPath(CurrPath); Tempstr=MCopyStr(Tempstr,CurrPath,File,NULL); glob(Tempstr,0,0,&Glob); for (i=0; i < Glob.gl_pathc; i++) ListAddItem(Files,CopyStr(NULL,Glob.gl_pathv[i])); globfree(&Glob); ptr=GetToken(ptr,":",&CurrPath,0); } DestroyString(Tempstr); DestroyString(CurrPath); return(ListSize(Files)); } char *FindFileInPath(char *InBuff, char *File, char *Path) { char *Tempstr=NULL, *CurrPath=NULL, *RetStr=NULL, *ptr; RetStr=CopyStr(InBuff,""); if (*File=='/') { CurrPath=CopyStr(CurrPath,""); ptr=""; //so we execute once below } else ptr=GetToken(Path,":",&CurrPath,0); while (ptr) { CurrPath=SlashTerminateDirectoryPath(CurrPath); Tempstr=MCopyStr(Tempstr,CurrPath,File,NULL); if (access(Tempstr,F_OK)==0) { RetStr=CopyStr(RetStr,Tempstr); break; } ptr=GetToken(ptr,":",&CurrPath,0); } DestroyString(Tempstr); DestroyString(CurrPath); return(RetStr); } /* This checks if a certain file exists (not if we can open it etc, just if */ /* we can stat it, this is useful for checking pid files etc). */ int FileExists(char *FileName) { struct stat StatData; if (stat(FileName,&StatData) == 0) return(1); else return(0); } #ifdef HAVE_FANOTIFY #include #include #include /* + fd = fanotify_init (0, 0); + if (fd < 0 && 0) + { + if (errno == ENOSYS) + { + puts ("SKIP: missing support for fanotify (check CONFIG_FANOTIFY=y)"); + return 0; + } + + perror ("fanotify_init (0, 0) failed"); + return 1; + } + + ret = fanotify_mark (fd, FAN_MARK_ADD | FAN_MARK_MOUNT, FAN_ACCESS + | FAN_MODIFY | FAN_OPEN | FAN_CLOSE | FAN_ONDIR + | FAN_EVENT_ON_CHILD, AT_FDCWD, "."); + if (ret) + { + perror ("fanotify_mark (...) failed"); + return 1; + } + + puts ("All OK"); + return 0; +} */ int FileNotifyInit(char *Path, int Flags) { char *Token=NULL, *ptr; int fd; fd=fanotify_init(Flags, O_RDWR); if (fd==-1) return(fd); ptr=GetToken(Path,":",&Token,0); while (ptr) { printf("FAM: [%s]\n",Token); fanotify_mark(fd, FAN_MARK_ADD, FAN_CLOSE_WRITE, -1, NULL); ptr=GetToken(ptr,":",&Token,0); } DestroyString(Token); return(fd); } int FileNotifyGetNext(int fd, char **Path) { struct fanotify_event_metadata metadata; char *Tempstr=NULL; int result; result=read(fd, &metadata, sizeof(struct fanotify_event_metadata)); if (result < sizeof(struct fanotify_event_metadata)) return(-1); if (Path) { Tempstr=FormatStr(Tempstr, "/proc/self/fd/%d", metadata.fd); *Path=SetStrLen(*Path,PATH_MAX +1); readlink(Tempstr,*Path,PATH_MAX +1); } DestroyString(Tempstr); return(metadata.fd); } #endif hashrat-1.6.1/libUseful-2.1/FileSystem.h0000644000175000017550000000124712470734537020427 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_FILEPATH_H #define LIBUSEFUL_FILEPATH_H #include "includes.h" #ifdef __cplusplus extern "C" { #endif char *GetBasename(char *Path); char *SlashTerminateDirectoryPath(char *DirPath); char *StripDirectorySlash(char *DirPath); int FileExists(char *); int MakeDirPath(char *Path, int DirMask); int FindFilesInPath(char *File, char *Path, ListNode *Files); char *FindFileInPath(char *InBuff, char *File, char *Path); int ChangeFileExtension(char *FilePath, char *NewExt); int FindFilesInPath(char *File, char *Path, ListNode *Files); int FileNotifyInit(char *Path, int Flags); int FileNotifyGetNext(int fd, char **Path); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/GeneralFunctions.c0000644000175000017550000002170312470734537021603 0ustar metacosm89metacosm89#include "includes.h" #include "base64.h" #include "Hash.h" #include "Time.h" #include #include #include "base64.h" //xmemset uses a 'volatile' pointer so that it won't be optimized out void xmemset(char *Str, char fill, off_t size) { volatile char *p; for (p=Str; p < (Str+size); p++) *p=fill; } int WritePidFile(char *ProgName) { char *Tempstr=NULL; int fd; if (*ProgName=='/') Tempstr=CopyStr(Tempstr,ProgName); else Tempstr=FormatStr(Tempstr,"/var/run/%s.pid",ProgName); fd=open(Tempstr,O_CREAT | O_TRUNC | O_WRONLY,0600); if (fd > -1) { fchmod(fd,0644); if (flock(fd,LOCK_EX|LOCK_NB) !=0) { close(fd); exit(1); } Tempstr=FormatStr(Tempstr,"%d\n",getpid()); write(fd,Tempstr,StrLen(Tempstr)); } //Don't close 'fd'! DestroyString(Tempstr); return(fd); } void CloseOpenFiles() { int i; for (i=3; i < 1024; i++) close(i); } char *BytesToHexStr(char *Buffer, char *Bytes, int len) { int i; char *Str=NULL, *ptr; Str=SetStrLen(Buffer,(len *2) +1); ptr=Str; for (i=0; i < len; i++) { snprintf(ptr,2,"%02x",Bytes[i]); ptr+=2; } *ptr='\0'; return(Str); } int HexStrToBytes(char **Buffer, char *HexStr) { int i, len; char *Str=NULL, *ptr; len=StrLen(HexStr); *Buffer=SetStrLen(*Buffer,len / 2); ptr=*Buffer; for (i=0; i < len; i+=2) { Str=CopyStrLen(Str,HexStr+i,2); *ptr=strtol(Str,NULL,16); ptr++; } DestroyString(Str); return(len / 2); } char *Ascii85(char *RetStr, const char *Bytes, int ilen, const char *CharMap) { char *ptr, *block, *end; uint32_t val, mod; int olen=0, i; char Buff[6]; end=Bytes+ilen; for (ptr=Bytes; ptr < end; ) { block=ptr; val = ((*ptr & 0xFF) << 24); ptr++; if (ptr < end) { val |= ((*ptr & 0xFF) << 16); ptr++; } if (ptr < end) { val |= ((*ptr & 0xFF) << 8); ptr++; } if (ptr < end) { val |= (*ptr & 0xFF); ptr++; } if (val==0) strcpy(Buff,"z"); else for (i=4; i >-1; i--) { mod=val % 85; val /= 85; Buff[i]=CharMap[mod & 0xFF]; } //we only add as many characters as we encoded //so for the last chracter RetStr=CatStrLen(RetStr,Buff,ptr-block); } printf("\n"); return(RetStr); } char *EncodeBytes(char *Buffer, const char *Bytes, int len, int Encoding) { char *Tempstr=NULL, *RetStr=NULL; int i; RetStr=CopyStr(Buffer,""); switch (Encoding) { case ENCODE_BASE64: RetStr=SetStrLen(RetStr,len * 4); to64frombits((unsigned char *) RetStr,(unsigned char *) Bytes,len); break; break; case ENCODE_IBASE64: RetStr=SetStrLen(RetStr,len * 4); Radix64frombits((unsigned char *) RetStr,(unsigned char *) Bytes,len,IBASE64_CHARS,'\0'); break; break; case ENCODE_PBASE64: RetStr=SetStrLen(RetStr,len * 4); Radix64frombits((unsigned char *) RetStr,(unsigned char *) Bytes,len,SBASE64_CHARS,'\0'); break; break; case ENCODE_CRYPT: RetStr=SetStrLen(RetStr,len * 4); Radix64frombits((unsigned char *) RetStr,(unsigned char *) Bytes,len,CRYPT_CHARS,'\0'); break; break; case ENCODE_XXENC: RetStr=SetStrLen(RetStr,len * 4); Radix64frombits((unsigned char *) RetStr,(unsigned char *) Bytes,len,XXENC_CHARS,'+'); break; break; case ENCODE_UUENC: RetStr=SetStrLen(RetStr,len * 4); Radix64frombits((unsigned char *) RetStr,(unsigned char *) Bytes,len,UUENC_CHARS,'\''); break; break; case ENCODE_ASCII85: RetStr=Ascii85(RetStr,Bytes,len,ASCII85_CHARS); break; break; case ENCODE_Z85: RetStr=Ascii85(RetStr,Bytes,len,Z85_CHARS); break; break; case ENCODE_OCTAL: for (i=0; i < len; i++) { Tempstr=FormatStr(Tempstr,"%03o",Bytes[i] & 255); RetStr=CatStr(RetStr,Tempstr); } break; case ENCODE_DECIMAL: for (i=0; i < len; i++) { Tempstr=FormatStr(Tempstr,"%03d",Bytes[i] & 255); RetStr=CatStr(RetStr,Tempstr); } break; case ENCODE_HEX: for (i=0; i < len; i++) { Tempstr=FormatStr(Tempstr,"%02x",Bytes[i] & 255); RetStr=CatStr(RetStr,Tempstr); } break; case ENCODE_HEXUPPER: for (i=0; i < len; i++) { Tempstr=FormatStr(Tempstr,"%02X",Bytes[i] & 255); RetStr=CatStr(RetStr,Tempstr); } break; default: RetStr=SetStrLen(RetStr,len ); memcpy(RetStr,Bytes,len); RetStr[len]='\0'; break; } DestroyString(Tempstr); return(RetStr); } #include #include int SwitchUser(const char *NewUser) { struct passwd *pwent; char *ptr; pwent=getpwnam(NewUser); if (! pwent) { syslog(LOG_ERR,"ERROR: Cannot switch to user '%s'. No such user",NewUser); ptr=LibUsefulGetValue("SwitchUserAllowFail"); if (ptr && (strcasecmp(ptr,"yes")==0)) return(FALSE); exit(1); } if (setreuid(pwent->pw_uid,pwent->pw_uid) !=0) { syslog(LOG_ERR,"ERROR: Switch to user '%s' failed. Error was: %s",NewUser,strerror(errno)); ptr=LibUsefulGetValue("SwitchUserAllowFail"); if (ptr && (strcasecmp(ptr,"yes")==0)) return(FALSE); exit(1); } return(TRUE); } int SwitchGroup(const char *NewGroup) { struct group *grent; char *ptr; grent=getgrnam(NewGroup); if (! grent) { syslog(LOG_ERR,"ERROR: Cannot switch to group '%s'. No such group",NewGroup); ptr=LibUsefulGetValue("SwitchGroupAllowFail"); if (ptr && (strcasecmp(ptr,"yes")==0)) return(FALSE); exit(1); } if (setgid(grent->gr_gid) !=0) { syslog(LOG_ERR,"ERROR: Switch to group '%s' failed. Error was: %s",NewGroup,strerror(errno)); ptr=LibUsefulGetValue("SwitchGroupAllowFail"); if (ptr && (strcasecmp(ptr,"yes")==0)) return(FALSE); exit(1); } return(TRUE); } char *GetCurrUserHomeDir() { struct passwd *pwent; pwent=getpwuid(getuid()); if (! pwent) return(NULL); return(pwent->pw_dir); } void ColLibDefaultSignalHandler(int sig) { } int CreateLockFile(char *FilePath, int Timeout) { int fd, result; SetTimeout(Timeout); fd=open(FilePath, O_CREAT | O_RDWR, 0600); if (fd <0) return(-1); result=flock(fd,LOCK_EX); alarm(0); if (result==-1) { close(fd); return(-1); } return(fd); } char *GetRandomData(char *RetBuff, int len, char *AllowedChars) { int fd; char *Tempstr=NULL, *RetStr=NULL; int i; uint8_t val, max_val; srand(time(NULL)); max_val=StrLen(AllowedChars); RetStr=CopyStr(RetBuff,""); fd=open("/dev/urandom",O_RDONLY); for (i=0; i < len ; i++) { if (fd > -1) read(fd,&val,1); else val=rand(); RetStr=AddCharToStr(RetStr,AllowedChars[val % max_val]); } if (fd) close(fd); DestroyString(Tempstr); return(RetStr); } char *GetRandomHexStr(char *RetBuff, int len) { return(GetRandomData(RetBuff,len,HEX_CHARS)); } char *GetRandomAlphabetStr(char *RetBuff, int len) { return(GetRandomData(RetBuff,len,ALPHA_CHARS)); } #define KILOBYTE 1000 #define MEGABYTE 1000000 #define GIGABYTE 1000000000 #define TERABYTE 1000000000000 #define KIBIBYTE 1024 #define MEGIBYTE 1024 * 1024 #define GIGIBYTE 1024 * 1024 * 1024 #define TERIBYTE 1024 * 1024 * 1024 *1024 double ParseHumanReadableDataQty(char *Data, int Type) { double val; char *ptr=NULL; double KAY,MEG,GIG,TERA; if (Type) { KAY=KILOBYTE; MEG=MEGABYTE; GIG=GIGABYTE; TERA=TERABYTE; } else { KAY=KIBIBYTE; MEG=MEGIBYTE; GIG=GIGIBYTE; TERA=TERIBYTE; } val=strtod(Data,&ptr); while (isspace(*ptr)) ptr++; if (*ptr=='k') val=val * KAY; if (*ptr=='M') val=val * MEG; if (*ptr=='G') val=val * GIG; if (*ptr=='T') val=val * TERA; return(val); } char *GetHumanReadableDataQty(double Size, int Type) { static char *Str=NULL; double val=0; char kMGT=' '; //Set to 0 to keep valgrind happy double KAY=0,MEG=0,GIG=0,TERA=0; if (Type) { KAY=KILOBYTE; MEG=MEGABYTE; GIG=GIGABYTE; //TERA=TERABYTE; } else { KAY=KIBIBYTE; MEG=MEGIBYTE; GIG=GIGIBYTE; //TERA=TERIBYTE; } val=Size; kMGT=' '; /* if (val > (TERA)) { val=val / TERA; kMGT='T'; } else*/ if (val >= (GIG)) { val=val / GIG; kMGT='G'; } else if (val >= (MEG)) { val=val / MEG; kMGT='M'; } else if (val >= (KAY)) { val=val / KAY; kMGT='k'; } Str=FormatStr(Str,"%0.1f%c",(float) val,kMGT); return(Str); } int GenerateRandomBytes(char **RetBuff, int ReqLen, int Encoding) { struct utsname uts; int i, len; clock_t ClocksStart, ClocksEnd; struct timeval tv1, tv2; char *Tempstr=NULL, *RandomBytes=NULL; int fd; fd=open("/dev/random",O_RDONLY); if (fd > -1) { RandomBytes=SetStrLen(RandomBytes,ReqLen); len=read(fd,RandomBytes,ReqLen); close(fd); } else { ClocksStart=clock(); gettimeofday(&tv1,NULL); //how many clock cycles used here will depend on overall //machine activity/performance/number of running processes for (i=0; i < 100; i++) sleep(0); uname(&uts); ClocksEnd=clock(); gettimeofday(&tv2,NULL); Tempstr=FormatStr(Tempstr,"%lu:%lu:%lu:%lu:%lu:%lu\n",getpid(),getuid(),ClocksStart,ClocksEnd,tv1.tv_usec,tv2.tv_usec); //This stuff should be unique to a machine Tempstr=CatStr(Tempstr, uts.sysname); Tempstr=CatStr(Tempstr, uts.nodename); Tempstr=CatStr(Tempstr, uts.machine); Tempstr=CatStr(Tempstr, uts.release); Tempstr=CatStr(Tempstr, uts.version); len=HashBytes(&RandomBytes, "sha256", Tempstr, StrLen(Tempstr), 0); if (len > ReqLen) len=ReqLen; } *RetBuff=EncodeBytes(*RetBuff, RandomBytes, len, Encoding); DestroyString(Tempstr); DestroyString(RandomBytes); return(len); } hashrat-1.6.1/libUseful-2.1/GeneralFunctions.h0000644000175000017550000000202412470734537021603 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_GENERAL_H #define LIBUSEFUL_GENERAL_H #include #include "defines.h" #ifdef __cplusplus extern "C" { #endif void xmemset(char *Str, char fill, off_t size); int WritePidFile(char *ProgName); int HexStrToBytes(char **Buffer, char *HexStr); char *BytesToHexStr(char *Buffer, char *Bytes, int len); char *EncodeBytes(char *Buffer, const char *Bytes, int len, int Encoding); int SwitchUser(const char *User); int SwitchGroup(const char *Group); char *GetCurrUserHomeDir(); void ColLibDefaultSignalHandler(int sig); int CreateLockFile(char *FilePath,int Timeout); char *GetRandomData(char *RetBuff, int len, char *AllowedChars); char *GetRandomHexStr(char *RetBuff, int len); char *GetRandomAlphabetStr(char *RetBuff, int len); void CloseOpenFiles(); int BASIC_FUNC_EXEC_COMMAND(void *Data); double ParseHumanReadableDataQty(char *Data, int Type); char *GetHumanReadableDataQty(double Size, int Type); int GenerateRandomBytes(char **RetBuff, int ReqLen, int Encoding); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/Hash.c0000644000175000017550000003051112470734537017215 0ustar metacosm89metacosm89#include "Hash.h" #include "string.h" #define HMAC_BLOCKSIZE 64 typedef void (*HASH_INIT_FUNC)(THash *Hash, int Len); char *HashTypes[]={"md5","sha1","sha256","sha512","whirlpool","jh-224","jh-256","jh-384","jh-512",NULL}; void HMACUpdate(THash *HMAC, char *Data, int Len) { THash *Hash; Hash=(THash *) HMAC->Ctx; Hash->Update(Hash,Data,Len); } int HMACFinish(THash *HMAC, int Encoding, char **HashStr) { THash *Hash; int len, result; Hash=(THash *) HMAC->Ctx; //We've done with this now, blank it and reuse for the inner result HMAC->Key1=CopyStr(HMAC->Key1,""); len=Hash->Finish(Hash,0,&HMAC->Key1); HMAC->Key2=SetStrLen(HMAC->Key2,HMAC_BLOCKSIZE+len); memcpy(HMAC->Key2+HMAC_BLOCKSIZE,HMAC->Key1,len); //Hash->Type result=HashBytes(HashStr,Hash->Type,HMAC->Key2,HMAC_BLOCKSIZE+len,Encoding); return(result); } void HMACPrepare(THash *HMAC, char *Data, int Len) { int i; char *Key=NULL, *Tempstr=NULL; //Whatever we've been given as a key, we have to turn it into a //key of 'HMAC_BLOCKSIZE', either by hashing it to make it shorter //or by padding with NULLS Key=SetStrLen(Key,HMAC_BLOCKSIZE); memset(Key,0,HMAC_BLOCKSIZE); if (Len > HMAC_BLOCKSIZE) { HMAC->Key1Len=HashBytes(&Tempstr,HMAC->Type,HMAC->Key1,HMAC->Key1Len,0); memcpy(Key,Tempstr,HMAC->Key1Len); } else { memcpy(Key,HMAC->Key1,HMAC->Key1Len); } HMAC->Key1=SetStrLen(HMAC->Key1,HMAC_BLOCKSIZE); HMAC->Key2=SetStrLen(HMAC->Key2,HMAC_BLOCKSIZE); HMAC->Key1Len=HMAC_BLOCKSIZE; HMAC->Key2Len=HMAC_BLOCKSIZE; for (i=0; i < HMAC_BLOCKSIZE; i++) { //inner key HMAC->Key1[i]=Key[i] ^ 0x36; //outer key HMAC->Key2[i]=Key[i] ^ 0x5c; } //first thing to be hashed is the inner key, then data is 'concatted' onto it HMACUpdate(HMAC, HMAC->Key1, HMAC->Key1Len); HMACUpdate(HMAC, Data, Len); HMAC->Update=HMACUpdate; DestroyString(Tempstr); DestroyString(Key); } void HMACInit(THash *Hash) { Hash->Ctx=(void *) HashInit(Hash->Type+5); Hash->Update=HMACPrepare; Hash->Finish=HMACFinish; } void HMACSetKey(THash *HMAC, char *Key, int Len) { HMAC->Key1=SetStrLen(HMAC->Key1,Len); memcpy(HMAC->Key1,Key,Len); HMAC->Key1Len=Len; } #include "crc32.h" void HashUpdateCRC(THash *Hash, char *Data, int Len) { crc32Update((unsigned long *) &Hash->Ctx, (unsigned char *) Data, Len); } THash *HashCloneCRC(THash *Hash) { THash *NewHash; NewHash=(THash *) calloc(1,sizeof(THash)); NewHash->Type=CopyStr(NewHash->Type,Hash->Type); NewHash->Ctx=(void *) calloc(1,sizeof(unsigned long)); memcpy(NewHash->Ctx, Hash->Ctx, sizeof(unsigned long)); return(NewHash); } int HashFinishCRC(THash *Hash, int Encoding, char **HashStr) { unsigned long crc; int len; len=sizeof(unsigned long); crc32Finish((unsigned long *) Hash->Ctx); crc=htonl(* (unsigned long *) Hash->Ctx); if (Encoding > 0) { *HashStr=EncodeBytes(*HashStr, (char *) &crc, len, Encoding); return(StrLen(*HashStr)); } else { *HashStr=SetStrLen(*HashStr,len); memcpy(*HashStr,&crc,len); return(len); } } void HashInitCRC(THash *Hash, int Len) { Hash->Ctx=(void *) calloc(1,sizeof(unsigned long)); crc32Init((unsigned long *) Hash->Ctx); Hash->Update=HashUpdateCRC; Hash->Finish=HashFinishCRC; Hash->Clone=HashCloneCRC; } #include "md5.h" #define MD5LEN 16 void HashUpdateMD5(THash *Hash, char *Data, int Len) { MD5Update((MD5_CTX *) Hash->Ctx, Data, Len); } THash *HashCloneMD5(THash *Hash) { THash *NewHash; NewHash=(THash *) calloc(1,sizeof(THash)); NewHash->Type=CopyStr(NewHash->Type,Hash->Type); NewHash->Ctx=(void *) calloc(1,sizeof(MD5_CTX)); memcpy(NewHash->Ctx, Hash->Ctx, sizeof(MD5_CTX)); NewHash->Update=Hash->Update; NewHash->Finish=Hash->Finish; NewHash->Clone=Hash->Clone; return(NewHash); } int HashFinishMD5(THash *Hash, int Encoding, char **HashStr) { int len; char *Tempstr=NULL, *DigestBuff=NULL; DigestBuff=(char *) calloc(1,MD5LEN+1); MD5Final((unsigned char *) DigestBuff, (MD5_CTX *) Hash->Ctx); if (Encoding > 0) { *HashStr=EncodeBytes(*HashStr, DigestBuff, MD5LEN, Encoding); len=StrLen(*HashStr); } else { len=MD5LEN; *HashStr=SetStrLen(*HashStr,len); memcpy(*HashStr,DigestBuff,len); } DestroyString(DigestBuff); DestroyString(Tempstr); return(len); } void HashInitMD5(THash *Hash, int Len) { Hash->Ctx=(void *) calloc(1,sizeof(MD5_CTX)); MD5Init((MD5_CTX *) Hash->Ctx); Hash->Update=HashUpdateMD5; Hash->Finish=HashFinishMD5; Hash->Clone=HashCloneMD5; } #include "sha1.h" #define SHA1LEN 20 void HashUpdateSHA1(THash *Hash, char *Data, int Len) { sha1_process_bytes(Data,Len,(struct sha1_ctx *) Hash->Ctx); } THash *HashCloneSHA1(THash *Hash) { THash *NewHash; NewHash=(THash *) calloc(1,sizeof(THash)); NewHash->Type=CopyStr(NewHash->Type,Hash->Type); NewHash->Ctx=(void *) calloc(1,sizeof(struct sha1_ctx)); memcpy(NewHash->Ctx, Hash->Ctx, sizeof(struct sha1_ctx)); return(NewHash); } int HashFinishSHA1(THash *Hash, int Encoding, char **HashStr) { int len; char *Tempstr=NULL, *DigestBuff=NULL; DigestBuff=(char *) calloc(1,SHA1LEN+1); sha1_finish_ctx((struct sha1_ctx *) Hash->Ctx, DigestBuff); if (Encoding > 0) { *HashStr=EncodeBytes(*HashStr, DigestBuff, SHA1LEN, Encoding); len=StrLen(*HashStr); } else { len=SHA1LEN; *HashStr=SetStrLen(*HashStr,len); memcpy(*HashStr,DigestBuff,len); } DestroyString(DigestBuff); DestroyString(Tempstr); return(len); } #include "sha2.h" int HashFinishSHA256(THash *Hash, int Encoding, char **HashStr) { int len; char *Tempstr=NULL; char *DigestBuff=NULL; DigestBuff=(char *) calloc(1,SHA2_SHA256_DIGEST_LENGTH+1); SHA2_SHA256_Final((unsigned char *) DigestBuff, (SHA2_SHA256_CTX *) Hash->Ctx); if (Encoding > 0) { *HashStr=EncodeBytes(*HashStr, DigestBuff, SHA2_SHA256_DIGEST_LENGTH, Encoding); len=StrLen(*HashStr); } else { len=SHA2_SHA256_DIGEST_LENGTH; *HashStr=SetStrLen(*HashStr,len); memcpy(*HashStr,DigestBuff,len); } DestroyString(DigestBuff); DestroyString(Tempstr); return(len); } THash *HashCloneSHA256(THash *Hash) { THash *NewHash; NewHash=(THash *) calloc(1,sizeof(THash)); NewHash->Type=CopyStr(NewHash->Type,Hash->Type); NewHash->Ctx=(void *) calloc(1,sizeof(SHA2_SHA256_CTX)); memcpy(NewHash->Ctx, Hash->Ctx, sizeof(SHA2_SHA256_CTX)); return(NewHash); } void HashUpdateSHA256(THash *Hash, char *Data, int Len) { SHA2_SHA256_Update((SHA2_SHA256_CTX *) Hash->Ctx, (unsigned char *) Data, Len); } int HashFinishSHA512(THash *Hash, int Encoding, char **HashStr) { int len; char *Tempstr=NULL, *DigestBuff=NULL; DigestBuff=(char *) calloc(1,SHA2_SHA512_DIGEST_LENGTH+1); SHA2_SHA512_Final((unsigned char *) DigestBuff, (SHA2_SHA512_CTX *) Hash->Ctx); if (Encoding > 0) { *HashStr=EncodeBytes(*HashStr, DigestBuff, SHA2_SHA512_DIGEST_LENGTH, Encoding); len=StrLen(*HashStr); } else { len=SHA2_SHA512_DIGEST_LENGTH; *HashStr=SetStrLen(*HashStr,len); memcpy(*HashStr,DigestBuff,len); } DestroyString(DigestBuff); DestroyString(Tempstr); return(len); } void HashUpdateSHA512(THash *Hash, char *Data, int Len) { SHA2_SHA512_Update((SHA2_SHA512_CTX *) Hash->Ctx, (unsigned char *) Data, Len); } THash *HashCloneSHA512(THash *Hash) { THash *NewHash; NewHash=(THash *) calloc(1,sizeof(THash)); NewHash->Type=CopyStr(NewHash->Type,Hash->Type); NewHash->Ctx=(void *) calloc(1,sizeof(SHA2_SHA512_CTX)); memcpy(NewHash->Ctx, Hash->Ctx, sizeof(SHA2_SHA512_CTX)); return(NewHash); } void HashInitSHA(THash *Hash, int Len) { switch (Len) { case 512: Hash->Ctx=(void *) calloc(1,sizeof(SHA2_SHA512_CTX)); SHA2_SHA512_Init((SHA2_SHA512_CTX *) Hash->Ctx); Hash->Update=HashUpdateSHA512; Hash->Finish=HashFinishSHA512; Hash->Clone=HashCloneSHA512; break; case 256: Hash->Ctx=(void *) calloc(1,sizeof(SHA2_SHA256_CTX)); SHA2_SHA256_Init((SHA2_SHA256_CTX *) Hash->Ctx); Hash->Update=HashUpdateSHA256; Hash->Finish=HashFinishSHA256; Hash->Clone=HashCloneSHA256; break; default: Hash->Ctx=(void *) calloc(1,sizeof(struct sha1_ctx)); sha1_init_ctx((struct sha1_ctx *) Hash->Ctx); Hash->Update=HashUpdateSHA1; Hash->Finish=HashFinishSHA1; Hash->Clone=HashCloneSHA1; break; } } #include "whirlpool.h" int HashFinishWhirlpool(THash *Hash, int Encoding, char **HashStr) { int len; char *Tempstr=NULL, *DigestBuff=NULL; DigestBuff=(char *) calloc(1,WHIRLPOOL_DIGESTBYTES+1); WHIRLPOOLfinalize((WHIRLPOOLstruct *) Hash->Ctx, (unsigned char *) DigestBuff); if (Encoding > 0) { *HashStr=EncodeBytes(*HashStr, DigestBuff, WHIRLPOOL_DIGESTBYTES, Encoding); len=StrLen(*HashStr); } else { len=WHIRLPOOL_DIGESTBYTES; *HashStr=SetStrLen(*HashStr,len); memcpy(*HashStr,DigestBuff,len); } DestroyString(DigestBuff); DestroyString(Tempstr); return(len); } void HashUpdateWhirlpool(THash *Hash, char *Data, int Len) { WHIRLPOOLadd((unsigned char *) Data, Len * 8, (WHIRLPOOLstruct *) Hash->Ctx); } THash *HashCloneWhirlpool(THash *Hash) { THash *NewHash; NewHash=(THash *) calloc(1,sizeof(THash)); NewHash->Type=CopyStr(NewHash->Type,Hash->Type); NewHash->Ctx=(void *) calloc(1,sizeof(WHIRLPOOLstruct *)); memcpy(NewHash->Ctx, Hash->Ctx, sizeof(WHIRLPOOLstruct *)); return(NewHash); } void HashInitWhirlpool(THash *Hash, int Len) { Hash->Ctx=(void *) calloc(1,sizeof(WHIRLPOOLstruct)); WHIRLPOOLinit((WHIRLPOOLstruct *) Hash->Ctx); Hash->Update=HashUpdateWhirlpool; Hash->Finish=HashFinishWhirlpool; Hash->Clone=HashCloneWhirlpool; } #include "jh_ref.h" int HashFinishJH(THash *Hash, int Encoding, char **HashStr) { int len; char *Tempstr=NULL, *DigestBuff=NULL; DigestBuff=(char *) calloc(1,1024); len=JHFinal((hashState *) Hash->Ctx, (unsigned char *) DigestBuff); if (Encoding > 0) { *HashStr=EncodeBytes(*HashStr, DigestBuff, len, Encoding); len=StrLen(*HashStr); } else { *HashStr=SetStrLen(*HashStr,len); memcpy(*HashStr,DigestBuff,len); } DestroyString(DigestBuff); DestroyString(Tempstr); return(len); } void HashUpdateJH(THash *Hash, char *Data, int Len) { JHUpdate( (hashState *) Hash->Ctx, (unsigned char *) Data, Len); } THash *HashCloneJH(THash *Hash) { THash *NewHash; NewHash=(THash *) calloc(1,sizeof(THash)); NewHash->Type=CopyStr(NewHash->Type,Hash->Type); NewHash->Ctx=(void *) calloc(1,sizeof(hashState *)); memcpy(NewHash->Ctx, Hash->Ctx, sizeof(hashState *)); return(NewHash); } int HashInitJH(THash *Hash, int Length) { switch (Length) { case 224: case 256: case 384: case 512: Hash->Ctx=(void *) calloc(1,sizeof(hashState)); JHInit((hashState *) Hash->Ctx, Length); Hash->Update=HashUpdateJH; Hash->Finish=HashFinishJH; Hash->Clone=HashCloneJH; break; default: return(FALSE); break; } return(TRUE); } void HashDestroy(THash *Hash) { //Hash->Ctx is destroyed in 'HashFinish' DestroyString(Hash->Key1); DestroyString(Hash->Key2); DestroyString(Hash->Type); if (Hash->Ctx) free(Hash->Ctx); free(Hash); } void HashAvailableTypes(ListNode *Vars) { int i; for (i=0; HashTypes[i] !=NULL; i++) SetVar(Vars,HashTypes[i], HashTypes[i]); } THash *HashInit(char *Type) { THash *Hash=NULL; Hash=(THash *) calloc(1,sizeof(THash)); Hash->Type=CopyStr(Hash->Type,Type); if (strcasecmp(Type,"md5")==0) HashInitMD5(Hash, 0); else if (strcasecmp(Type,"sha")==0) HashInitSHA(Hash, 0); else if (strcasecmp(Type,"sha1")==0) HashInitSHA(Hash, 0); else if (strcasecmp(Type,"sha256")==0) HashInitSHA(Hash, 256); else if (strcasecmp(Type,"sha512")==0) HashInitSHA(Hash, 512); else if (strcasecmp(Type,"whirl")==0) HashInitWhirlpool(Hash, 0); else if (strcasecmp(Type,"whirlpool")==0) HashInitWhirlpool(Hash, 0); else if (strcasecmp(Type,"jh-224")==0) HashInitJH(Hash,224); else if (strcasecmp(Type,"jh-256")==0) HashInitJH(Hash,256); else if (strcasecmp(Type,"jh-384")==0) HashInitJH(Hash,384); else if (strcasecmp(Type,"jh-512")==0) HashInitJH(Hash,512); //else if (strcasecmp(Type,"crc32")==0) HashInitCRC(Hash, 0); else if (strncasecmp(Type,"hmac-",5)==0) HMACInit(Hash); else { HashDestroy(Hash); Hash=NULL; } return(Hash); } int HashBytes(char **Return, char *Type, char *text, int len, int Encoding) { THash *Hash; int result; Hash=HashInit(Type); if (! Hash) return(0); Hash->Update(Hash, text, len); result=Hash->Finish(Hash, Encoding, Return); HashDestroy(Hash); return(result); } int HashFile(char **Return, char *Type, char *Path, int Encoding) { THash *Hash; STREAM *S; char *Tempstr=NULL; int result; S=STREAMOpenFile(Path,SF_RDONLY); if (! S) return(FALSE); Hash=HashInit(Type); if (! Hash) { STREAMClose(S); return(FALSE); } Tempstr=SetStrLen(Tempstr,4096); result=STREAMReadBytes(S,Tempstr,4096); while (result !=EOF) { Hash->Update(Hash, Tempstr, result); result=STREAMReadBytes(S,Tempstr,4096); } DestroyString(Tempstr); STREAMClose(S); result=Hash->Finish(Hash, Encoding, Return); HashDestroy(Hash); return(result); } hashrat-1.6.1/libUseful-2.1/Hash.h0000644000175000017550000000151712470734537017226 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_HASH_H #define LIBUSEFUL_HASH_H #include "file.h" #include "includes.h" #ifdef __cplusplus extern "C" { #endif typedef struct t_hash THash; typedef void (*HASH_UPDATE)(THash *Hash, char *Data, int DataLen); typedef THash *(*HASH_CLONE)(THash *Hash); typedef int (*HASH_FINISH)(THash *Hash, int Encoding, char **RetStr); struct t_hash { char *Type; char *Key1; unsigned int Key1Len; char *Key2; unsigned int Key2Len; void *Ctx; HASH_UPDATE Update; HASH_FINISH Finish; HASH_CLONE Clone; }; void HashAvailableTypes(ListNode *Vars); THash *HashInit(char *Type); void HMACSetKey(THash *HMAC, char *Key, int Len); void HashDestroy(THash *Hash); int HashBytes(char **Return, char *Type, char *text, int len, int Encoding); int HashFile(char **Return, char *Type, char *Path, int Encoding); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/LICENCE0000644000175000017550000010451312470646505017154 0ustar metacosm89metacosm89 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program 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. This program 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 this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . hashrat-1.6.1/libUseful-2.1/Log.c0000644000175000017550000001731012470734537017055 0ustar metacosm89metacosm89#include "Log.h" #include "Time.h" #include //When logs are used by 'child processes', it's only the 'parent' process that should be //able to delete/reopen the log. Otherwise the child can delete a log that the parent //keeps writing to, and keeps handing to child processes. Thus we record the parent pid pid_t ParentPID=0; ListNode *LogFiles=NULL; TLogFile *LogFileDefaults=NULL; void LogFileSetupDefaults() { LogFileDefaults=(TLogFile *) calloc(1,sizeof(TLogFile)); LogFileDefaults->MaxSize=100000000; LogFileDefaults->Flags |= LOGFILE_TIMESTAMP | LOGFILE_FLUSH | LOGFILE_LOGPID | LOGFILE_LOGUSER; LogFileDefaults->LogFacility=LOG_USER; if (ParentPID==0) ParentPID=getpid(); } TLogFile *LogFileGetEntry(const char *FileName) { ListNode *Node; TLogFile *LogFile=NULL; STREAM *S=NULL; if (! StrLen(FileName)) return(NULL); if (! LogFiles) LogFiles=ListCreate(); if (! LogFileDefaults) LogFileSetupDefaults(); Node=ListFindNamedItem(LogFiles,FileName); if (Node) LogFile=(TLogFile *) Node->Item; else { if (strcmp(FileName,"STDOUT")==0) S=STREAMFromFD(1); else if (strcmp(FileName,"STDERR")==0) S=STREAMFromFD(2); else if (strcmp(FileName,"SYSLOG")==0) S=STREAMCreate(); else { S=STREAMOpenFile(FileName,SF_CREAT | SF_APPEND | SF_WRONLY); } if (S) { LogFile=(TLogFile *) calloc(1,sizeof(TLogFile)); LogFile->Path=CopyStr(LogFile->Path,FileName); LogFile->LogFacility=LogFileDefaults->LogFacility; LogFile->Flags=LogFileDefaults->Flags; LogFile->MaxSize=LogFileDefaults->MaxSize; LogFile->S=S; if (strcmp(FileName,"SYSLOG")==0) LogFile->Flags |= LOGFILE_SYSLOG; ListAddNamedItem(LogFiles,FileName,LogFile); STREAMSetItem(S,"TLogFile",LogFile); } } return(LogFile); } void LogFileClose(const char *Path) { ListNode *Node; TLogFile *LogFile; Node=ListFindNamedItem(LogFiles,Path); if (Node) { LogFile=(TLogFile *) Node->Item; ListDeleteNode(Node); DestroyString(LogFile->Path); STREAMClose(LogFile->S); free(LogFile); } } char *LogFileInternalGetRotateDestinationPath(char *RetStr, TLogFile *LogFile) { char *Tempstr=NULL; Tempstr=CopyStr(Tempstr, STREAMGetValue(LogFile->S,"RotatePath")); if (StrLen(Tempstr) && strchr(Tempstr,'$')) { STREAMSetValue(LogFile->S, "Date",GetDateStr("%Y_%m_%d",NULL)); STREAMSetValue(LogFile->S, "Time",GetDateStr("%H:%M:%S",NULL)); RetStr=SubstituteVarsInString(RetStr,Tempstr,LogFile->S->Values,0); } else RetStr=CopyStr(RetStr,LogFile->Path); DestroyString(Tempstr); return(RetStr); } STREAM *LogFileInternalDoRotate(TLogFile *LogFile) { struct stat FStat; char *Tempstr=NULL, *Path=NULL, *PrevPath=NULL; int i; if (! LogFile) return(NULL); if (strcmp(LogFile->Path,"SYSLOG")==0) return(LogFile->S); if (strcmp(LogFile->Path,"STDOUT")==0) return(LogFile->S); if (strcmp(LogFile->Path,"STDERR")==0) return(LogFile->S); if (getpid() != ParentPID) return(LogFile->S); if (LogFile->MaxSize > 0) { fstat(LogFile->S->out_fd,&FStat); if (FStat.st_size > LogFile->MaxSize) { Tempstr=LogFileInternalGetRotateDestinationPath(Tempstr, LogFile); for (i=LogFile->MaxRotate; i > 0; i--) { Path=FormatStr(Path,"%s.%d",Tempstr,i); if (i==LogFile->MaxRotate) unlink(Path); else rename(Path,PrevPath); PrevPath=CopyStr(PrevPath,Path); } STREAMClose(LogFile->S); if (PrevPath) rename(LogFile->Path,PrevPath); LogFile->S=STREAMOpenFile(LogFile->Path,SF_CREAT | SF_APPEND | SF_WRONLY); } } DestroyString(PrevPath); DestroyString(Tempstr); DestroyString(Path); return(LogFile->S); } void LogFileSetValues(TLogFile *LogFile, int Flags, int MaxSize, int MaxRotate, int FlushInterval) { if (! LogFileDefaults) LogFileSetupDefaults(); if (ParentPID==0) ParentPID=getpid(); if (LogFile) { LogFile->MaxSize=MaxSize; LogFile->MaxRotate=MaxRotate; LogFile->FlushInterval=FlushInterval; LogFile->Flags=Flags; } } int LogFileFindSetValues(const char *FileName, int Flags, int MaxSize, int MaxRotate, int FlushInterval) { TLogFile *LogFile; if (StrLen(FileName)==0) LogFile=LogFileDefaults; else LogFile=LogFileGetEntry(FileName); if (LogFile) { LogFileSetValues(LogFile, Flags, MaxSize, MaxRotate, FlushInterval); if (strcmp(FileName,"SYSLOG")==0) LogFile->Flags |= LOGFILE_SYSLOG; } else return(FALSE); return(TRUE); } int LogFileInternalWrite(TLogFile *LF, STREAM *S, int Flags, const char *Str) { char *Tempstr=NULL, *LogStr=NULL; struct timeval Now; struct tm *TimeStruct; int result=FALSE; if (ParentPID==0) ParentPID=getpid(); if (LF) S=LogFileInternalDoRotate(LF); if (! S) return; gettimeofday(&Now,NULL); if (Flags & LOGFILE_TIMESTAMP) { TimeStruct=localtime(&Now.tv_sec); LogStr=SetStrLen(LogStr,40); strftime(LogStr,20,"%Y/%m/%d %H:%M:%S",TimeStruct); if (Flags & LOGFILE_MILLISECS) { Tempstr=FormatStr(Tempstr,".%03d ",Now.tv_usec / 1000); LogStr=CatStr(LogStr,Tempstr); } else LogStr=CatStr(LogStr," "); } if (Flags & LOGFILE_LOGPID) { Tempstr=FormatStr(Tempstr,"[%d] ",getpid()); LogStr=CatStr(LogStr,Tempstr); } if (Flags & LOGFILE_LOGUSER) { Tempstr=FormatStr(Tempstr,"user=%d ",getuid()); LogStr=CatStr(LogStr,Tempstr); } LogStr=MCatStr(LogStr,Str,"\n",NULL); if (S) { if (Flags & LOGFILE_LOCK) S->Flags |= SF_WRLOCK; else S->Flags &= ~SF_WRLOCK; if (LF && ((Now.tv_sec-LF->LastFlushTime) > LF->FlushInterval)) Flags |= LOGFILE_FLUSH; STREAMWriteLine(LogStr,S); if (Flags & LOGFILE_FLUSH) STREAMFlush(S); result=TRUE; } if (Flags & LOGFILE_SYSLOG) { syslog(LOG_INFO,"%s",LogStr); result=TRUE; } if (LF) LF->LastFlushTime=Now.tv_sec; DestroyString(Tempstr); DestroyString(LogStr); return(result); } int LogToSTREAM(STREAM *S, int Flags, const char *Str) { if (! S) return(FALSE); return(LogFileInternalWrite(NULL, S, LOGFILE_FLUSH, Str)); } int LogWrite(TLogFile *Log, const char *Str) { return(LogFileInternalWrite(Log, Log->S, Log->Flags, Str)); } void LogFileFlushAll(int Force) { time_t Now; ListNode *Curr; TLogFile *Log; time(&Now); Curr=ListGetNext(LogFiles); while (Curr) { Log=(TLogFile *) Curr->Item; if (Force) { STREAMFlush(Log->S); Log->LastFlushTime=Now; } else if ((Now - Log->LastFlushTime) > Log->FlushInterval) { STREAMFlush(Log->S); Log->LastFlushTime=Now; } Curr=ListGetNext(Curr); } } int LogToFile(const char *FileName, const char *fmt, ...) { char *Tempstr=NULL; va_list args; int result=FALSE, val; TLogFile *LogFile; LogFile=LogFileGetEntry(FileName); if (LogFile) { va_start(args,fmt); Tempstr=VFormatStr(Tempstr,fmt,args); va_end(args); StripTrailingWhitespace(Tempstr); result=LogFileInternalWrite(LogFile,LogFile->S,LogFile->Flags, Tempstr); } DestroyString(Tempstr); return(result); } int LogFileAppendTempLog(const char *LogPath, const char *TmpLogPath) { TLogFile *LogFile; char *Tempstr=NULL; STREAM *S; int result=FALSE; LogFile=LogFileGetEntry(LogPath); LogFileClose(TmpLogPath); S=STREAMOpenFile(TmpLogPath,SF_RDONLY); if (LogFile && S) { STREAMLock(LogFile->S,LOCK_EX); Tempstr=STREAMReadLine(Tempstr,S); while(Tempstr) { STREAMWriteLine(Tempstr,LogFile->S); Tempstr=STREAMReadLine(Tempstr,S); } if (LogFile->Flags & LOGFILE_FLUSH) STREAMFlush(LogFile->S); STREAMLock(LogFile->S,LOCK_UN); unlink(TmpLogPath); result=TRUE; } if (S) STREAMClose(S); DestroyString(Tempstr); return(result); } void LogFileCheckRotate(const char *FileName) { TLogFile *LogFile; LogFile=LogFileGetEntry(FileName); if (LogFile) { LogFileInternalDoRotate(LogFile); } } hashrat-1.6.1/libUseful-2.1/Log.h0000644000175000017550000000227112470734537017062 0ustar metacosm89metacosm89#ifndef LIBUSEFUL_LOG_H #define LIBUSEFUL_LOG_H #include "includes.h" #include "defines.h" #include "file.h" #define LOGFILE_FLUSH 1 #define LOGFILE_SYSLOG 2 #define LOGFILE_LOGPID 4 #define LOGFILE_LOGUSER 8 #define LOGFILE_LOCK 16 #define LOGFILE_TIMESTAMP 32 #define LOGFILE_MILLISECS 64 #define LOGFILE_ROTATE_NUMBERS 128 #define LOGFILE_ROTATE_MINUS 256 #ifdef __cplusplus extern "C" { #endif typedef struct { char *Path; int Flags; int MaxSize; int MaxRotate; int LogFacility; int LastFlushTime; int FlushInterval; STREAM *S; } TLogFile; TLogFile *LogFileGetEntry(const char *FileName); void LogFileSetValues(TLogFile *LogFile, int Flags, int MaxSize, int MaxRotate, int FlushInterval); int LogFileFindSetValues(const char *FileName, int Flags, int MaxSize, int MaxRotate, int FlushInterval); void LogFileFlushAll(int Force); void LogFileClose(const char *Path); int LogFileAppendTempLog(const char *LogPath, const char *TmpLogPath); void LogFileCheckRotate(const char *FileName); int LogToSTREAM(STREAM *S, int Flags, const char *Str); int LogWrite(TLogFile *Log, const char *Str); int LogToFile(const char *FileName, const char *fmt, ...); #ifdef __cplusplus } #endif #endif hashrat-1.6.1/libUseful-2.1/Makefile.in0000644000175000017550000000673412470646505020242 0ustar metacosm89metacosm89CC = @CC@ VERSION = @VERSION@ CFLAGS = @CFLAGS@ LIBS = @LIBS@ FLAGS=$(LDFLAGS) $(CPPFLAGS) $(CFLAGS) -fPIC @DEFS@ prefix=@prefix@ OBJ=string.o list.o socket.o unix_socket.o file.o tar.o ansi.o FileSystem.o GeneralFunctions.o DataProcessing.o EncryptedFiles.o ConnectManager.o sound.o pty.o Log.o http.o inet.o expect.o base64.o crc32.o md5c.o sha1.o sha2.o whirlpool.o jh_ref.o Hash.o Compression.o oauth.o libsettings.o Vars.o MathExpr.o Time.o Markup.o SpawnPrograms.o Tokenizer.o PatternMatch.o ParseURL.o ConnectionChain.o openssl.o proctitle.o all: $(OBJ) $(CC) $(FLAGS) -shared -o libUseful-2.1.so $(OBJ) $(LIBS) #ld -i -o libUseful-2.1.a $(OBJ) ar rcs libUseful-2.1.a $(OBJ) string.o: string.h string.c $(CC) $(FLAGS) -c string.c list.o: list.h list.c $(CC) $(FLAGS) -c list.c socket.o: socket.h socket.c $(CC) $(FLAGS) -c socket.c sound.o: sound.h sound.c $(CC) $(FLAGS) -c sound.c pty.o: pty.h pty.c $(CC) $(FLAGS) -c pty.c http.o: http.h http.c $(CC) $(FLAGS) -c http.c file.o: file.h file.c $(CC) $(FLAGS) -c file.c tar.o: tar.h tar.c $(CC) $(FLAGS) -c tar.c ansi.o: ansi.h ansi.c $(CC) $(FLAGS) -c ansi.c Log.o: Log.h Log.c $(CC) $(FLAGS) -c Log.c unix_socket.o: unix_socket.h unix_socket.c $(CC) $(FLAGS) -c unix_socket.c PatternMatch.o: PatternMatch.h PatternMatch.c $(CC) $(FLAGS) -c PatternMatch.c FileSystem.o: FileSystem.h FileSystem.c $(CC) $(FLAGS) -c FileSystem.c MathExpr.o: MathExpr.h MathExpr.c $(CC) $(FLAGS) -c MathExpr.c Time.o: Time.h Time.c $(CC) $(FLAGS) -c Time.c Tokenizer.o: Tokenizer.h Tokenizer.c $(CC) $(FLAGS) -c Tokenizer.c Markup.o: Markup.h Markup.c $(CC) $(FLAGS) -c Markup.c ParseURL.o: ParseURL.h ParseURL.c $(CC) $(FLAGS) -c ParseURL.c inet.o: inet.h inet.c $(CC) $(FLAGS) -c inet.c expect.o: expect.h expect.c $(CC) $(FLAGS) -c expect.c GeneralFunctions.o: GeneralFunctions.h GeneralFunctions.c $(CC) $(FLAGS) -c GeneralFunctions.c DataProcessing.o: DataProcessing.h DataProcessing.c $(CC) $(FLAGS) -c DataProcessing.c EncryptedFiles.o: EncryptedFiles.h EncryptedFiles.c $(CC) $(FLAGS) -c EncryptedFiles.c Hash.o: Hash.h Hash.c $(CC) $(FLAGS) -c Hash.c Compression.o: Compression.h Compression.c $(CC) $(FLAGS) -c Compression.c ConnectionChain.o: ConnectionChain.h ConnectionChain.c $(CC) $(FLAGS) -c ConnectionChain.c ConnectManager.o: ConnectManager.h ConnectManager.c $(CC) $(FLAGS) -c ConnectManager.c base64.o: base64.c base64.h $(CC) $(FLAGS) -c base64.c crc32.o: crc32.c crc32.h $(CC) $(FLAGS) -c crc32.c md5c.o: md5c.c md5-global.h md5.h $(CC) $(FLAGS) -c md5c.c sha1.o: sha1.c sha1.h $(CC) $(FLAGS) -c sha1.c sha2.o: sha2.c sha2.h $(CC) $(FLAGS) -c sha2.c whirlpool.o: whirlpool.c whirlpool.h $(CC) $(FLAGS) -c whirlpool.c jh_ref.o: jh_ref.c jh_ref.h $(CC) $(FLAGS) -c jh_ref.c oauth.o: oauth.c oauth.h $(CC) $(FLAGS) -c oauth.c openssl.o: openssl.c openssl.h $(CC) $(FLAGS) -c openssl.c proctitle.o: proctitle.c proctitle.h $(CC) $(FLAGS) -c proctitle.c Vars.o: Vars.c Vars.h $(CC) $(FLAGS) -c Vars.c SpawnPrograms.o: SpawnPrograms.c SpawnPrograms.h $(CC) $(FLAGS) -c SpawnPrograms.c #No dependancies, must always be compiled libsettings.o: libsettings.h libsettings.c $(CC) $(FLAGS) -c libsettings.c clean: -rm -f *.o *.so *.a -rm config.log config.status -rm -r autom4te.cache config.cache install: @ln -s libUseful-2.1.so libUseful.so @ln -s libUseful-2.1.a libUseful.a @cp *.so *.a $(prefix)/lib ; mkdir $(prefix)/include/libUseful-$(VERSION) ; cp *.h $(prefix)/include/libUseful-$(VERSION) hashrat-1.6.1/tests/0000755000175000000000000000000012470646505014045 5ustar metacosm89roothashrat-1.6.1/tests/duplicate.txt0000644000175000017550000000115512470646505017612 0ustar metacosm89metacosm89"Nothing is particularly hard if you divide it into small jobs." - Henry Ford "Science is a wonderful thing if one does not have to earn one's living at it." - Albert Einstein "What we think, or what we know, or what we believe is, in the end, of little consequence. The only consequence is what we do." - John Ruskin "Work like you dont need money, love like youve never been hurt, and dance like no ones watching" - Anon "Try a thing you havent done three times. Once, to get over the fear of doing it. Twice, to learn how to do it. And a third time, to figure out whether you like it or not." - Virgil Garnett Thomson hashrat-1.6.1/tests/help.txt0000644000175000017550000001317712470646505016577 0ustar metacosm89metacosm89Hashrat: version 1.6 Author: Colum Paget Email: colums.projects@gmail.com Blog: http://idratherhack.blogspot.com Credits: Thanks to the people who invented the hash functions! MD5: Ronald Rivest Whirlpool: Vincent Rijmen, Paulo S. L. M. Barreto JH: Hongjun Wu SHA: The NSA (thanks, but please stop reading my email. It's kinda creepy.). Special thanks to Professor Hongjun Wu for taking the time to confirm that his JH algorithm is free for use in GPL programs. Usage: hashrat [options] [path to hash]... hashrat -c [options] [input file of hashes]... Options: --help Print this help -help Print this help -? Print this help --version Print program version -version Print program version -md5 Use md5 hash algorithmn -sha1 Use sha1 hash algorithmn -sha256 Use sha256 hash algorithmn -sha512 Use sha512 hash algorithmn -whirl Use whirlpool hash algorithmn -whirlpool Use whirlpool hash algorithmn -jh224 Use jh-224 hash algorithmn -jh256 Use jh-256 hash algorithmn -jh384 Use jh-384 hash algorithmn -jh512 Use jh-512 hash algorithmn -hmac HMAC using specified hash algorithm -8 Encode with octal instead of hex -10 Encode with decimal instead of hex -H Encode with UPPERCASE hexadecimal -HEX Encode with UPPERCASE hexadecimal -64 Encode with base64 instead of hex -base64 Encode with base64 instead of hex -t Output hashes in traditional md5sum, shaXsum format -trad Output hashes in traditional md5sum, shaXsum format -r Recurse into directories when hashing files -f Hash files listed in -i Only hash items matching -x Exclude items matching -n Truncate hashes to bytes -c CHECK hashes against list from file (or stdin) -cf CHECK hashes but only show failures -m MATCH files from a list read from stdin. -lm Read hashes from stdin, upload them to a memcached server (requires the -memcached option). -X In CHECK or MATCH mode only examine executable files. -exec In CHECK or MATCH mode only examine executable files. -dups Search for duplicate files. -memcached Specify memcached server. (Overrides reading list from stdin if used with -m, -c or -cf). -mcd Specify memcached server. (Overrides reading list from stdin if used with -m, -c or -cf). -h