bogosec.orig/0000755000175000017500000000000011113041577013366 5ustar owensmkowensmkbogosec.orig/configure0000755000175000017500000000366611113035142015277 0ustar owensmkowensmk#!/bin/sh ########################################################### # # Licensed Material - Property of IBM # # BogoSec - Source Code Security Quality Metric Calculator # # (C) Copyright IBM Corp. 2004-2008 # # FILE : configure # # PURPOSE: Configure script for Bogosec # # HISTORY # 07/2004 originated by Tony Petz (petz.agoston@gmail.com) # 02/2005 Dustin Kirkland (dustin.kirkland@us.ibm.com) - search for rpm and rpmbuild binaries ########################################################### scanners="flawfinder rats" # By default, assume no scanners found warn_scanner=1 echo echo -n checking for Perl interpretter... which perl > /dev/null 2>&1 if [ $? != 0 ]; then echo no echo echo You must have a Perl interpretter installed to run bogosec... Aborting... echo exit 1 else echo yes fi echo -n checking for tar... which tar > /dev/null 2>&1 if [ $? != 0 ]; then echo no echo \* tar binary not found... you will not be able to run bogosec on tarballs. else echo yes fi echo -n checking for gunzip... which gunzip > /dev/null 2>&1 if [ $? != 0 ]; then echo no echo \* gunzip binary not found... you will not be able to run bogosec on tar.gz\'s. else echo yes fi echo -n checking for rpm... which rpm > /dev/null 2>&1 if [ $? != 0 ]; then echo no echo \* rpm binary not found... you will not be able to run bogosec on .src.rpm\'s. else echo yes fi echo -n checking for rpmbuild... which rpmbuild > /dev/null 2>&1 if [ $? != 0 ]; then echo no echo \* rpmbuild binary not found... you will not be able to run bogosec on .src.rpm\'s. else echo yes fi for scanner in $scanners; do echo -n checking for $scanner... which $scanner > /dev/null 2>&1 # If found, turn off warning if [ $? -eq "0" ]; then warn_scanner=0 echo yes else echo no fi done if [ $warn_scanner -eq "1" ]; then echo \* One or more scanners not found... you must have at least one scanner to run bogosec fi echo bogosec.orig/plugins/0000755000175000017500000000000011113035142015036 5ustar owensmkowensmkbogosec.orig/plugins/BogoRats.pm0000644000175000017500000000462311113035142017121 0ustar owensmkowensmk########################################################### # # Licensed Material - Property of IBM # # BogoSec - Source Code Security Quality Metric Calculator # # (C) Copyright IBM Corp. 2004-2008 # # HISTORY: # 07/2004 originated by Tony Petz (petz.agoston@gmail.com) # 07/2004 Dustin Kirkland (dustin.kirkland@us.ibm.com) - consistency improvements # 01/2005 Loulwa Salem (loulwa@us.ibm.com) - added does_compile() # 01/2005 Loulwa Salem (loulwa@us.ibm.com) - Changed global variable to all CAPS # 07/2005 Loulwa Salem - Code to exclude vulnerabilities and track their type ########################################################### package BogoRats; use strict; use File::Temp; my $SCANNER = "rats"; my $DEFAULT_ARGS = "-w 3"; my @RESULTS = (); sub exists() { `which $SCANNER`; my $exists = !$?; if (!$exists) { print "Warning: cannot find $SCANNER binary (please include location in PATH if you wish to use it)\n"; return undef; } return 1; } # this function simply returns 1 if scanner is compiler based, and 0 otherwise. sub does_compile() { return 0; } sub get_args() { return $DEFAULT_ARGS; } sub name() { return $SCANNER; } sub analyze($$$$) { my ($logfile, $target, $sev_range_max, $ex_vuln) = @_; my $sloc = undef; my $ignore = undef; # open temp file open(FH, $logfile); my @Excl_vuln = split(/:/, $ex_vuln); foreach () { if (m/$target/ && ! m/Analyzing/) { chomp; # Splitting line on delimeter ": " or ":" my @temp = split(/:\s*/); foreach my $vuln (@Excl_vuln) { if ($vuln eq $temp[3]) { #print "RATS: Ignoring $temp[3]\n"; $ignore = 1; last; } } if ($ignore==undef) { $temp[2] = calc_score($temp[2],$sev_range_max); } else { $temp[2] = 0; } my $temp = join(":", @temp); push(@RESULTS, $temp); } elsif (m/Total lines analyzed/) { my ($tmp_sloc) = m/^.*:\s*(.*)/; $sloc += $tmp_sloc; } $ignore = undef; } # Added conditional to avoid getting a -1 for lines when actually no lines were scanned # We decrement because rats line counting is off by 1 if ( $sloc != 0 ) { $sloc = $sloc - 1; } unshift @RESULTS, $sloc; close(FH); return \@RESULTS; } sub calc_score($$) { ($_, my $max) = @_; if (m/High/) { return $max * 3/3; } elsif (m/Medium/) { return $max * 2/3; } elsif (m/Low/) { return $max * 1/3; } else { return 0; } } sub debug { foreach (@RESULTS) { print "$_\n"; } } 1; bogosec.orig/plugins/old/0000755000175000017500000000000011113035142015614 5ustar owensmkowensmkbogosec.orig/plugins/old/BogoITS4.pm0000644000175000017500000000510511113035142017505 0ustar owensmkowensmk########################################################### # # Licensed Material - Property of IBM # # BogoSec - Source Code Security Quality Metric Calculator # # (C) Copyright IBM Corp. 2004-2008 # # HISTORY: # 07/2004 originated by Tony Petz (petz.agoston@gmail.com) # 07/2004 Dustin Kirkland (dustin.kirkland@us.ibm.com) - consistency improvements # 01/2005 Loulwa Salem (loulwa@us.ibm.com) - added does_compile() # 01/2005 Loulwa Salem (loulwa@us.ibm.com) - Changed global variable to all CAPS # 07/2005 Loulwa Salem - Code to exclude vulnerabilities and track their type ########################################################### package BogoITS4; use strict; use File::Temp; my $SCANNER = "its4"; my $DEFAULT_ARGS = "--severity-cutoff=1"; my @RESULTS = (); sub exists() { `which $SCANNER`; my $exists = !$?; if (!$exists) { print "Warning: cannot find $SCANNER binary (please include location in PATH if you wish to use it)\n"; return undef; } return 1; } # this function simply returns 1 if scanner is compiler based, and 0 otherwise. sub does_compile() { return 0; } sub get_args() { return $DEFAULT_ARGS; } sub name() { return $SCANNER; } sub analyze($$$$) { my ($logfile, $target, $sev_range_max, $ex_vuln) = @_; my $sloc = undef; my $ignore = undef; my @Excl_vuln = split(/:/, $ex_vuln); # open temp file open(FH, $logfile); foreach () { if (m/^$target.*:[0-9]+:\(.*\)/) { chomp; my @temp = split(/:/); ($temp[2], $temp[3]) = $temp[2] =~ m/\((.*)\)\s*(.*)/; # The statement below handles case where there are >2 fields in temp[2] # it splits the line and puts the vulnerability found in variable temp[3] # example record: :line:(Low Risk) sprintf (see above) if ($temp[3] eq '') { ($temp[2], $temp[3]) = $temp[2] =~ m/(.*)\)\s*(.*)\s\((.*)/; } foreach my $vuln (@Excl_vuln) { if ($vuln eq $temp[3]) { #print "ITS: Ignoring $temp[3]\n"; $ignore = 1; last; } } if ($ignore==undef) { $temp[2] = calc_score($temp[2],$sev_range_max); } else { $temp[2] = 0; } my $temp = join(":", @temp); push(@RESULTS, $temp); } $ignore = undef; } # push SLOC onto front of results array unshift @RESULTS, $sloc; close(FH); return \@RESULTS; } sub calc_score($$) { ($_, my $max) = @_; if ( m/^Low Risk$/i ) { return (1/5) * $max; } if ( m/^Some risk$/i ) { return (2/5) * $max; } if ( m/^Risky$/i ) { return (3/5) * $max; } if ( m/^Very Risky$/i ) { return (4/5) * $max; } if ( m/^Urgent$/i ) { return $max; } return 0; } sub debug { foreach (@RESULTS) { print "$_\n"; } } 1; bogosec.orig/plugins/BogoLintian.pm0000644000175000017500000000375711113035142017615 0ustar owensmkowensmk########################################################### # # BogoSec - Source Code Security Quality Metric Calculator # * lintian plugin # # (C) Copyright Canonical, Ltd. 2008 # # HISTORY: # 10/2008 Dustin Kirkland - initial revision ########################################################### package BogoLintian; use strict; use File::Temp; my $SCANNER = "lintian"; my $DEFAULT_ARGS = "-I"; my @RESULTS = (); sub exists() { `which $SCANNER`; if ($? != 0) { print "Warning: cannot find $SCANNER binary (please include location in PATH if you wish to use it)\n"; return undef; } return 1; } # this function simply returns 1 if scanner is compiler based, and 0 otherwise. sub does_compile() { return 1; } sub run($$;$) { my $logfile = shift; my $target_file = shift; my $target_dir = shift; `$SCANNER $DEFAULT_ARGS $target_file >$logfile 2>/dev/null`; } sub sloc($) { my $target_dir = shift; my $sloc = 0; my @files = `find $target_dir -type f | grep "/debian/" | xargs -i wc -l {}`; foreach my $file (@files) { my ($count, $filename) = split(/ /, $file); $sloc += $count; } return $sloc; } sub get_args() { return $DEFAULT_ARGS; } sub name() { return $SCANNER; } sub analyze($$$$) { my ($logfile, $target, $sev_range_max, $ex_vuln) = @_; my $ignore = undef; # open temp file open(FH, $logfile); foreach () { # I: or W: or E: if (m/^[IEW]:/) { chomp; my ($type, $pkg, $pkg_type, $vulnerability, $file) = split(/[: ]+/); my $score = calc_score($type, $sev_range_max); my $temp = "$file:0:$score:$vulnerability"; push(@RESULTS, $temp); } } # push SLOC onto front of results array unshift(@RESULTS, sloc($target)); close(FH); return \@RESULTS; } sub calc_score($$) { my $type = shift; my $max = shift; if ($type =~ /E/) { return $max * 3/3; } elsif ($type =~ /W/) { return $max * 2/3; } elsif ($type =~ /I/) { return $max * 1/3; } else { return 0; } } sub debug { foreach (@RESULTS) { print "$_\n"; } } 1; bogosec.orig/plugins/BogoFlaw.pm0000644000175000017500000000426211113035142017100 0ustar owensmkowensmk########################################################### # # Licensed Material - Property of IBM # # BogoSec - Source Code Security Quality Metric Calculator # # (C) Copyright IBM Corp. 2004-2008 # # HISTORY: # 07/2004 originated by Tony Petz (petz.agoston@gmail.com) # 07/2004 Dustin Kirkland (dustin.kirkland@us.ibm.com) - consistency improvements # 01/2005 Loulwa Salem (loulwa@us.ibm.com) - added does_compile() # 01/2005 Loulwa Salem (loulwa@us.ibm.com) - Changed global variable to all CAPS # 07/2005 Loulwa Salem - Code to exclude vulnerabilities and track their type ########################################################### package BogoFlaw; use strict; use File::Temp; my $SCANNER = "flawfinder"; my $DEFAULT_ARGS = "-SQ"; my @RESULTS = (); sub exists() { `which $SCANNER`; my $exists = !$?; if (!$exists) { print "Warning: cannot find $SCANNER binary (please include location in PATH if you wish to use it)\n"; return undef; } return 1; } # this function simply returns 1 if scanner is compiler based, and 0 otherwise. sub does_compile() { return 0; } sub get_args() { return $DEFAULT_ARGS; } sub name() { return $SCANNER; } sub analyze($$$$) { my ($logfile, $target, $sev_range_max, $ex_vuln) = @_; my $sloc = undef; my $ignore = undef; my @Excl_vuln = split(/:/, $ex_vuln); # open temp file open(FH, $logfile); foreach () { if (m/^$target/) { chomp; my @temp = split(/:/); ($temp[2], $temp[4], $temp[3]) = $temp[2] =~ m/^\s*\[([0-5])\]\s*\((.*)\)\s*(.*)/; foreach my $vuln (@Excl_vuln) { if ($vuln eq $temp[3]) { #print "FLAW: Ignoring $temp[3]\n"; $ignore = 1; last; } } if ($ignore==undef) { $temp[2] = calc_score($temp[2],$sev_range_max); } else { $temp[2] = 0; } my $temp = join(":", @temp); push(@RESULTS, $temp); } elsif (m/^Physical Source Lines of Code/) { # grab SLOC from scanner my ($tmp_sloc) = m/^.*=\s*(.*)$/; $sloc += $tmp_sloc; } $ignore = undef; } # push SLOC onto front of results array unshift @RESULTS, $sloc; close(FH); return \@RESULTS; } sub calc_score($$) { ($_, my $max) = @_; return $_ * ($max/5); } sub debug { foreach (@RESULTS) { print "$_\n"; } } 1; bogosec.orig/tools/0000755000175000017500000000000011113035142014515 5ustar owensmkowensmkbogosec.orig/tools/client_cvs_wrapper0000755000175000017500000000517011113035142020337 0ustar owensmkowensmk#!/bin/sh # CVS client bogosec wrapper # This wrapper will run bogosec on commited file which match the egrep regex # seen below, and will exit with an eror code if the results do not meet the # specified MAX_SCORE and MAX_SEV_POINTS defined below. It is intended to # run on the client side and can handle multiple simultaneously commited files. # If the bogosec score beats the minimum requirements, the command line options # passed to this script are echoed exactly to the actual cvs binary. # Please call the script with the same options you would use when calling cvs! # INSTALLATION # * This script counts on the real cvs binary being in it's intended location # (meaning it can be found with a 'which cvs'. Do not try and move it to a # different location and do something fancy with symlinks. # * Simply add an alias to your ~/.bashrc file which looks something like this: # alias cvsb='/path/to/wrapper/client_cvs_wrapper' # then run 'cvsb ACTION FILE' when you want to wrap the cvs client with # bogosec, and run 'cvs ACTION FILE' when you don't want any bogosec # interference. # # * Requires bogosec (plus any plugins) to be installed on the client # CUSTOMIZATION # This script runs bogosec on files which match the egrep regex seen below # only when the cvs_command 'commit' is given. If you would like to change # this please edit COMMAND_HOOKS and replace it with a space delimited list # of cvs commands you wish to wrap with bogosec. # Ex: COMMAND_HOOKS="log commit" COMMAND_HOOKS="commit" # you must adjust these to meet your needs MAX_SCORE=0.10 MAX_SEV_PTS=999999 ORIG_ARGS=$* RUN_BOGOSEC=0 TARGETS="" PATH_TO_CVS=`which cvs` while [ $# -gt 0 ]; do if [ `echo $1 | egrep -i '(\.c$|\.h$|\.cpp$|\.c\+\+$)'` ]; then TARGETS="$TARGETS $1" else for CMD in $COMMAND_HOOKS; do if [ "$1" = "$CMD" ]; then RUN_BOGOSEC=1 fi done fi shift done if [ $RUN_BOGOSEC ]; then for FILE in $TARGETS; do echo "Running bogosec on $FILE" SCANNER_OUTPUT=`bogosec --plugin BogoFlaw --plugin BogoRats --plugin $FILE | tail -n 3` SEV_PTS=`echo $SCANNER_OUTPUT | awk -F" " '{print $2}'` SCORE=`echo $SCANNER_OUTPUT | awk -F"= " '{print $2}'` echo "bogosec score: $SCORE" echo "bogosec severity points: $SEV_PTS" SEV_RESULT=`echo "$SEV_PTS <= $MAX_SEV_PTS" | bc` SCORE_RESULT=`echo "$SCORE <= $MAX_SCORE" | bc` if [ $SCORE_RESULT -eq 0 ]; then echo "Your bogosec results did not beat maximum allowed score of $MAX_SCORE!" echo exit 1 elif [ $SEV_RESULT -eq 0 ]; then echo "You bogosec results did not beat the maximum allowed severity points of $MAX_SEV_PTS!" echo exit 1 fi done fi $PATH_TO_CVS $ORIG_ARGS bogosec.orig/tools/server_cvs_wrapper0000755000175000017500000000305511113035142020367 0ustar owensmkowensmk#!/bin/sh # CVS server bogosec wrapper # This wrapper script will run bogosec on commited files, and will exit with # an error code if the results do not meet the specified MAX_SCORE and # MAX_SEV_PTS defined below. It is intended to run on the cvs server and # can handle multiple simultaneously commited files. # INSTALLATION # * Make sure wrapper script has world read/execute privileges. # * Edit CVSROOT/commitinfo in the cvs server directory to include a line # like this one: # ALL /home/cvs/bogosec_cvs_wrapper # which will run the wrapper on all commited files. Other directives # exist, please see the CVS documentation. # # * Requires bogosec (plus any scanners) to be installed on the cvs server. # you must adjust these to meet your needs MAX_SCORE=0.10 MAX_SEV_PTS=999999 export PATH=$PATH:/usr/local/bin echo shift while [ $# -gt 0 ]; do echo "Running bogosec on $1" SCANNER_OUTPUT=`bogosec --plugin BogoFlaw --plugin BogoRats $1 | tail -n 3` SEV_PTS=`echo $SCANNER_OUTPUT | awk -F" " '{print $2}'` SCORE=`echo $SCANNER_OUTPUT | awk -F"= " '{print $2}'` echo "bogosec score: $SCORE" echo "bogosec severity points: $SEV_PTS" SEV_RESULT=`echo "$SEV_PTS <= $MAX_SEV_PTS" | bc` SCORE_RESULT=`echo "$SCORE <= $MAX_SCORE" | bc` if [ $SCORE_RESULT -eq 0 ]; then echo "Your bogosec results did not beat maximum allowed score of $MAX_SCORE!" echo exit 1 elif [ $SEV_RESULT -eq 0 ]; then echo "You bogosec results did not beat the maximum allowed severity points of $MAX_SEV_PTS!" echo exit 1 fi shift done echo Done! echo exit 0; bogosec.orig/documents/0000755000175000017500000000000011113035142015356 5ustar owensmkowensmkbogosec.orig/documents/Bogosec_design.doc0000644000175000017500000004700011113035142020760 0ustar owensmkowensmkࡱ; $  !"#%Root Entry  !"#$%&'()*+,-./0123456789:;<=>?ABCD  FMicrosoft Word-Dokument MSWordDocWord.Document.89q@8nt [ZZDefault 1$ *$+B*OJQJCJmH sH PJnH^J_HtHBA@BAbsatz-Standardschriftart66BulletsOJQJCJPJ^JaJ22Numbering Symbols.#n #OJQJCJ^JaJOJQJCJ^JaJOJQJCJ^JaJ  OJQJCJ^JaJ  OJQJCJ^JaJOJQJCJ^JaJOJQJCJ^JaJOJQJCJ^JaJOJQJCJ^JaJOJQJCJ^JaJOJQJCJ^JaJOJQJCJ^JaJ  OJQJCJ^JaJ  OJQJCJ^JaJOJQJCJ^JaJOJQJCJ^JaJOJQJCJ^JaJOJQJCJ^JaJ.77.RR.nn.....  .P GTimes New Roman5Symbol3&ArialMNimbus Roman No9 L7Charter1$Helv;Luxi Sans_ StarSymbolArial Unicode MS5SymbolBhiEiE'0Oh+'0 p x 2@(@)@#`X@`XM 0#Caolan70$.l:::N4 $ @   rL T  This is something of a rough draft... I'll continue working on it as this week goes by. <Introduction and basic purpose of BogoSec goes here...> OVERVIEW Bogosec is written in perl, with modularity in mind; most of the components are designed so they can be swapped out later. The most basic functionality is to call a source code formatting program <GNU something-or-other... I've yet to find a decent one> and standardize the code structure so the lines can be counted accurately. This number is used in conjunction with the absolute score returned by the scanners as a metric to gauge the "relative" vulnerability of the source code. BogoSec's primary purpose will be to operate on code written in c/c++, however as some of the analyzers it employs can handle other languages, there will also be some support for Perl, PHP, and Python. The scanning will be handled by an interface that communicates with the different scanners via a plugin mechanism described below. For the time being, only rats and flawfinder are supported. USER INTERFACE BogoSec is a command line driven program (though there is always the option of writing a GUI for it later). There are two basic modes  standard and interactive. In standard mode, BogoSec is called as any other unix utility. Options are passed to it from the command line, and further options are parsed from a configuration file (default is bogorc). The scanners are called one by one and the output is parsed into human readable format and dumped to the screen. The user can choose how verbose the output will be. In interactive mode the program behaves in much the same way. However, after calling the scanners, the output is given to the user interactively. Each vulnerable line of code is displayed independently with the appropriate data returned by the scanners, after which the user is given a prompt. The options are to: log the vulnerability ignore the vulnerability Ignored vulnerabilities are added to a suppress file, and from then on will always be ignored by BogoSec. The user can then continue coding without the annoyance of seeing the same messages dumped to the screen each time. The only trace that anything is wrong will be a message in the output that lets the user know there are suppressed vulnerabilities. The option also remains to add items to the suppress file by hand. PLUGIN INTERFACE Each source code analyzer (scanner) to be used will have it's own plugin defined in the plugins directory (.bogosec/plugins/). These plugins will be written in perl, and will most likely have to be updated as the analyzers themselves are updated. However, the interface between the plugins and the main program should remain the same. It is defined as such: Any command line arguments to the scanners will be defined on the command line, defaults will be stored in the bogorc resource file. The list of which analyzers to employ in a given session will be given on the command line, the default will be stored in bogorc The plugin will take 3 variables 1. An array of filenames to be operated on (optional) 2. A directory (optional) 3. An array of line numbers to ignore warnings on note that 1 or 2 must be defined (both cannot be blank) The plugin will usually return 4 variables 1. The line number of the offending vulnerability 2. A brief header describing the problem 3. A numerical rating of the severity (1-10 with 10 as the highest) 4. The verbose text output returned by the scanner Plugin will suppress warnings defined in suppress file DIRECTORY/FILE STRUCTURE The default directory for the config, suppress, and log files will be .bogosec/ under the users home directory. From there the files will be: .bogosec/bogorc .bogosec/suppress .bogosec/plugings/* .bogosec/logs/* LOGGING All passes will be logged, where the newest will always overwrite the older file. The full output of all of the source code scanners will be put into a file <scanner_name>.log in the logs directory. An error log might be added if needed (.bogosec/logs/error.log) $&8  : &vxnxz(\0<* !2!\!~!!!#éOJQJaJCJ!OJQJaJCJ^JPJB*phOJQJCJaJ!aJ^JPJCJOJQJB*ph!OJQJaJ^JPJCJB*ph!B*phOJQJCJPJ^JaJ'$&8  : &vxn$a$^]`A$d7$$a$ & FR^R]`A$d7$$a$ & F^]`A$d7$nxz(\0rW$a$^]`A$d7$$a$ & F^]`A$d7$$a$^]`A$d7$$a$^]`A$d7$$a$^]`A$d7$$a$ & F^]`A$d7$ <* uZ?$a$^]`A$d7$$a$^]`A$d7$$a$^]`A$d7$$a$ & F^]`A$d7$$a$^]`A$d7$$a$^]`A$d7$$a$^]`A$d7$ !2!\!~!!!#x]B$a$^]`A$d7$$a$^]`A$d7$$a$^]`A$d7$$a$^]`A$d7$$a$^]`A$d7$$a$^]`A$d7$$a$^]`A$d7$"/ =!"#$3P(20Root Entry F@CompObjjOle 1Table/SummaryInformation(@8WordDocument $.bogosec.orig/documents/BogoSec TAMULUG.sxi0000644000175000017500000063170011113035142020532 0ustar owensmkowensmkPK01Xmimetypeapplication/vnd.sun.xml.impressPK01w˛-Pictures/1000000000000090000000AEE33C6062.jpgJFIFddDucky&!Adobed4    &&))&&87778>>>>>>>>>> ''#% %#++''++55355>>>>>>>>>>" 10!"#A23C$!1AQaq 0"2Bb#Rr3$C!1A Qa"q2B0Rr# Ӏgk_L}=`Dj27m桖$}iLf?@yEQ|̵:F~)S1%t}I;5hg,㌽wļϞnG@$\dW_d$SO(!Sͥ`r-@^T6ص7X{:ߞoKTNC% ;+ҪhH˰1|ƾ /RܽaPGR өԊ1,{EVQ+.W;.b#LRvI^!4ʺR+JSz`G}TJI꿫!k]jXfV(hPIxgv;U7&7q *01X;9 HI#O5GI\ Z2H'O"jAUUvcZ) Ntb)Av܄c x˩x"Cfjڒ9!ʈ9\suaN.I}$< ,ANp>FN)SR$ + r&__]tB/:t/{XI{)GBƉ=2e+jlR ӫtC8.CEU#cDj)-_;{6osV1{|)R b|k""k\'kUȬX3z\bE+UP nDg$iy_ɳZ|q ~լfgBˊqyQ&ƚ4rH#M'D2!g4YTٕECvk\(cb)aUWn}LyD9,;[ns-ԯ]R]:`v㱪w\T8$؇qL'nyΎP5FCG=\r'ƊQ~̇{#ױKH]gJ/d@v!F!{FnY5  SkgVqEeYe}GJh6R.88L4Q2朱N)8=d*E] 36+7]geڼkofAsǡa_sDMC"->_Ҕ 3W1S$(ƃ{511f=.Yo' =73VbL&fcp;9S)IAƘ  ҋ 6FvPX_dsg?#E[My+B>`*f?4AEivT2L0>EUO'̐+ w[7Y~df;.Mt*lta(:VR #j,jǴ֖Qy~?0ɣr[UoM2T6#{b;h$$;)T|~[ !=l5 fOg*v ժ/^Yk5 ꬽDϼKc3UTiIJBK4Ds|HH( X{doWĝ-<1y;&#cF`Ei& Ś97z6bmbyrO7ӖxH+6]9M;f>F+#6 rE׋;|M\csM9D*BI!]Tw$}3;2}X2 q#͏PLgUѷE`@k"ay>0F1v)m-ͭSOu6+řW"6nv_}@?x/^h^7RzO4c6E46Bb(+ْlzyW[7Y(F4`ŠIv \Xrm]5/^ke3n @˖{-li |o5݃pmxЏ&PtHμ|_*Q3hh/ш\; r(HSVrUi%ʜ8=u*syeEp s)][#@\ +qb Y>wk$(A}:J{o#J4be-¢'∺XBkQ: TiB6/#J5;}_[tㆾu'߶Œmc.I붾[-ʜ/F(0byRuG?O5]^Ƭv#?I30W7nOe>|υH$mT5ubnu$,^F]K m}.zc㵯*mp5ƚ@2瑈=UI<~gt}4V.P{8#^JzHsÖ57+̧zMlcXhtk^rPj8h4b<7r;6F0"A2IVV ubRY~a\F=Lߨ4mR:"|lx$x]MWMfG(;^.hs^]i~Hx^Y,BQpyfU'i[?ZMrM6K/;Տa`lzE/o䒋g^I&2Ш1pwcGn|1wiZxp61?IY.aeoaA+&Őjk7o#cuv @Ȍ~\g5S[^_wu'i2;byN((((((((((((((NúGhjWi?E"H~*d$еĺM3hi*]-HiGP) 9(3Ou-ZڡѴt]>YZGQRʡ@@E$  @W|?'Htk;wWr"Kʳ7*˸š(/>k~͈5 gg}KnCaӚ5sKI4Xk?c /^Xe%$Pw(E𞱣MZojU@ḡ6BuO;}4k3i<2_*"s ;TdcuwP/ xsIikw:>K96 0Gÿ xGn$]Z%] aں(((((((((oqnߨ[\ "e %#nGIYz֫6,,(B]±Q7$oT /G!12 w cݭmhv]Mm$fRFc$30Y,)Huf_+ HwǽS)-`KInD7Y8;q@}@8GHqrfkA"Tr%K$e@0 JMJ+um.}2]\ s1<ߎpQNIHF29# ʀ5-[MѭT-,`g]L)lXqh^TΖpuvU9M;}s7"@qrf5$zGmȮxdg~#~LY][GүYb]J2єTpEW+{}5ǚ,чE$@ĹEF bz=GHqrfkA"Tr%K$e@0 J=J[u].}[4W"sskmEjPȏEu{k}csy5ßj[~]iG zInO> @̲y0Gl'jYX\63jpKi؞/_;ZJe+8 O_Cmn?+TD 﫺/M58%߇O/ݝ%XM'+ZGt;IMI-;͹pQ0テ1cȏ5$s 4cjhzbA jW.qM(ł>R$8qƆ!ԇKKŷY4 V&PJbm쟗Fy"??cwOctaך k #>Dڗ d]GmT+;=EKmHmF8IhppЏZG'Dž|=Ry5@4ZƠn*>VsGoiO&Z_"4eϮ+3TLԣWqj/5۷ýC'O jp&ŭ/%Hy ̀.&SF+Iv&Z_"4eϮ+3Xx-j-ݎ [!Æ<@x~Ii])-WGKFȄJH0>#MӒMjeϮ+3G&Z_"5NWV:Ժfh4{Ay5+A DY"B6l?n 8I^a?2\-/}u^<9tRK]sWfL?E{k9L?E{hK]sWf (K]sWfL?E{k9L?E{hK]sWf (K]sWfL?E{k9L?E{kr )HDH3ʰO%QEV]K^-dY$VhʮAKZ]Ihuo%J$jM.Sxe1rzyjv '6]ǡ%FYZ# ]H KzxvYof6Dd >`s6[u_ BT ƽ}kdRfIϖ$ /'<} M&Y6Iw-irdȓFMOc;3 J]f=2Hγo{fMmi.m\L);e=o1bf#>b89=su6]f=NIo{xCsAi*..nL0;z{=o]\)բV>cGp+Ӯ{kfcs,>ӏ9vS=vڝܐ?/lb?2|ǎzm~ѣ_Xg61r?qg.w߇L-4^T7Py=T=>}A,O z; _2F~e!Ո0%]w$ [&Xo̤ |z17F.xs@e;o7kxZV/*C1(_<8 u;OX+Y*Hоf% рGr=.w$ kh|:)0<7E.A`zBXE#??e;o7kxZV/*C1(_<8 u;OX+Y*Hоf% рGr=.w$ kh|:)0<7E.A`zBXE#??e;o7kxZV/*C1(_<8{Kwh}HX1wb|O't߈mL5^Tg `\>xs:2&,b}IC2U_͔6:N!4Bb}JO=0\OsaaI+Y.Wތ@:2&,b}IC2\ma㨡.o,-X.gH䟔1%{P]{Kwh}HX1wb|O':K|IukϠXi7'N IfV@_~1N{kEwvx}Iah1w>RG$.ogPwi7d,3u$rOx]/޿5uzu|Fi 6F8cko#P\M|Lndde$-^ma㨡.o,-X.gH䟔1:=>:Ljbhmc: qqOk:M5u&N]N 3(^Yk}/m;YtX.@ 8>o^cm˽AχSDm~c: qq/gԶeޠ)բV618\8눞]mck56uBt ddqZj9̼{=.>LV1:\WrڦuhR]OqI-[dt'-ӭͮmas?s?͗#C~lǣj֝Iu=Ɓ'+ r?lwsܜNW\ltEm#&u?9n(xv'_{T\6_G#ڧzz~+^kcG#k֞[eHoQ!!#~N(iy Zym`Ti#ݽD`-8,tj9{T\6_\{Klhx_mzlI$3$yo /5O- ${C'Y=ߛ/G#hmwD 3> T3\_[H[+$d$}ӴӂG4U,hH#UH3|\H8q^ԷfvqQҬMs<3&Mcprww 5dk,˻ZuٹHgƒ)"*\+vWÒk-//$Pj7j3$aQUejz!"}5/.(W`k\ci>Z-66qJH흉}!0"۸l+`+oʐ>s|6Ԓ;=-#:aR=I!6q` &H_3yr#H@-Hm_Nh͜2E/d` =eyI+^+[Vgtx.YEmP0n[Դ5[uKEpnlzg=y?}UC"??cwk]3Ƕg?Egc=2 A=fy|A~w+Do݈?((=}N{|PGw^]25ܭv"9L/ {QY.V߻m~QPz>LGw"?cv5M4"߇//ёhMاdo:Iv'rD}lcJ`_KDah#;cTL_ Qi.xU/m~cRzz A/CbxA`w*Gވ6?1== "1;'7 ~!ZK<^ EEb# DcTK-%؞/X"ʱ y*OOAk?G?vƅGO#o*K-%؞/X"ʱ y*OOALS%ڽ 080#Wu t\_|Dr?GO#o*ΙK{o!'gT`p8`G_SLS%ڽ 080#_^B#'7/>"عyTt/XT]Qq}NJ~A?\A_ CUzLS%ڽ 080#ήA .LpmnlÖL㧠UV_!ع/iG s+J 2 VP\IvݳQFHqQ 2 VP\IvݳQFHqTt.|/?\B9bS.$D_nͨe$s8(.$D_nͨe$s8(/=#\_!ع/iU< Ԟ o5ėh9lzg=Ak(k3Α̘'x\bcá :v{-x۲D@7qY& #RKVFw,߽`K<Ҹ=OS tGei[biR1).I2[8`3]Xood'?6YRIB|UPέkmz\5 kq^LwJD2d+f+n|{k?c,8w@=hep'/oY?*|JGw|w߇L-4^T7Py=T"^iq efʐ'zf1;Ui{;o֍]x/*C_<ygO t˹ X3^EFоVH=qpȏDah_Jo{:xo6]Z/*3.<G9gO t˹ X3^EFоVH=qpȏ?Dah).w$ kh|:)0<7E.A`zBXE#"?cv4OckCheܐ?,U?_+|Þ.ogPwi7d,3u$rOx雃Dah_|Dr?ë [:2&,b}IC2\ma㨡.o,-X.gH䟔17A?\A+USQC]ݤEXZ ]Ͻԑ?(cK"عyE{P] w7Xx(t˻K D9' xcGpx{ Ko]|?"Z%`3k1cu#Br_ ҏVUt){ Ko]|?"Z%`3k1cu#G9ᲞEو (e0*ג:zZ /%Э*?![ vI/iWi]9bFJ fW,23͎ &{<^$ҮLs Ič̮Ydgnh ԛH A?l&Fy)oZ*O`I 34wqHNXƸ . 5U횊OjV6hH\mXfg%H /Qi:nni}uC`s^_2~t"=.T],1mvڈ$XnDtD6ޡIEnZ\ϼKBcrNq;x|WhGmt,}fH-KwϮi:l>h Inό?%y׏6?um'\}6]l &|7崴]U҄t|7R->5 A~ݬ*%uM#^ =(I5#G-)Vo?,{R>rZ.!A<&<7ⴴm<;\ʭ\u H2p7>>C S*/ 3psCɩ 8-O> 2,pd0Or<߈cѴ ,r* Cq$>C S*/ 3psC:l.h> H2p7><߈cѴ ,r* Cq#ɩ 8-O> 2,pd0OrO:l.h> H2p7>\:na㫋>{OI4* b S#zPjC~!+KFψ, ,\,~Y >%S2jIa㥲 h|9x%zy: 'Mlh5(6q ^x+U:NxOM Bػ9BFTA\:na㫋>{OI4* b S#zQs&:[+KIoyZ&qw(gW 5$ZZMx}r4kQDl<]]_>$ҴIt I­UfѰ```c +{x$qơU 8x&$ҤH5"`{Xn`pvskrȑuV 1͉?_H(qeZh;돳ۤ#y w FS5+ĐX>ޡe-hA9dds+?E/?:mog⹗Q:߉:mjZ\ۛvldQp 5=JtkS.&c$Kg15[2 *%B~75/ZiI}@ClZ1sq $W$r js~;]sG9'#- p'( ,+*w[Եm7F[SP"u2ĥNbp DZM? _i/.,_BFeT'̰F X yme2ɜ/$w&iqjC fS*/o,2GqWPGwg&SM[M~-P-̦T_Y3>eևմ|7.]B5 A`Z4%uBS9#n@}*1;'.:Va߈tu D&h( L䏕m6 KPMBoX_ß.KZQBr_ Ҧ O_jT-,`oȋ%ͩ,@84xVtk \j dbRٵ8'Ʈ|/?\B9b@] ~մWicx~DY.XmNbp DZ<-gG;--cپi`2ǁ@kO9bTG|x3UKz_i:mM+TPO> Ԝ]ʱom;FyȣIմoiZZyU}iN0r0sE\xc?_z}@):mM+TPO> Ԝ]ʱom;FyȣIմoiZZyU}iN0r0sE\xc?_zm4R}B-4Hfe{/*άwOk7~|:9Z$X7!2e8ߊ// ]XGֽ3-[* 2Wg\5Ԣ!R KItY4ђ[H gV ԝņDo@J]f=2Hγo{fMmi.m\L);-wim>Yu+U99x.ƚƚڕc5֑ \VDLL.Nӻ jZUqۣ8@-m%lV5bqӺR6|A~"meVMa:x6m~ga=݋R_zᱝS_ {NXxU߻)]~abzwP!?%R6|A~"meVMa:xH!I-ݣi(ٖUoZO0{D~Ӗ;<^ vvb#7WcpjpKi؞/_;ZJe+8 O_C G zInO> @̲y0GC<C4wfy|A`i+Dޔ.?)==FG~!Ӛ;< uu JbX$&iZEEqHn9S/ NhV/(]~S`zz:6:h|>Y]HA} ë [R{5ݤ0/ܤ+HH3 q%zx鬮!|>&iZEEqHn9.u8,lY]HA} ~zx鬮!|>&iZEEqHn9.cԞMewi 7)5J..F(CCuqsca&葘m%AX౰GvsH6̠|BG,@pW.cԞMewi 7)5J..F(CCuqή/K2[4WͶ*Ȅ ԟbZJُ*<50L6N@ uFU*}wlN DQEs+/_H}-֮#M ʬ W +Аu+Vo.ik%ӯMĖ2,+A4XMW pj2Gaal"H.-BSee9L `Ux!{]niⴎ}ڭìSEWUR|zF~[ /%@ y#h?eݖ-켫:ߴm<~Z˼NGg֑- <«Ha9!_|n.)~i=ZCy#LM)rg 媘ذ"5R@Y^gxk\ԥo$6ko$y|,d“/jVS[VޞmV&b0~S#ss kmEjPȏE:Ƕho?H9R8}l e:xomVɖ/*3)<Gx?D"??cw1cie:xomVɖ/*3)<Gx,O z; _2F~e!Ո1p?!21;'4<7A~dMV#F(V"])S ~A?\Aʧse=͇SH|>$PEg_z1>RL6SxXu;DE Vq8#*y<_^B#'7_(v Ѷ\OsaaI+Y.Wތ@=:SileXmS#ss5WjЭBr_ ҏVOS_j+}NOqj3_x )5weXͯ|qs<zjH>_ß.KZQBr_ ҩ{ Eo ȤIEW8°EsvRZFqIKrL@nU{ =NK;H.dgHʞ]uGU߄%KkW&E-mdb@>hR{_wH|7y^_ؼnv>OgW^i:nit$<*EF,9 ĐBI',~ۼ#>X<ٻ󎙠;*F8( #VQI.&}|/3QT_>opׂ<;r;m> vM7M_R7f6p}&x>w-v}UdQ.;H +.N[q=Iu-J+w0fI>cn9I[ԅ:ϵ;uA|g4zn/=FR|]MY2|+{o"OWSj0Ctm.{ .NN 9,Wq[g, !0I,jpG!\w.h5K}H_z:|vd6Wpk麗uKuv6f$lM"^j0[mm>`tginY<# ̯ ЮFrb9Gu ]qi_R[c[OHk)sDkvԖoiK}rtq|O|gusygmCt+3D ,jI1 dq%:g>323Bʂ]c˧]𾤳xN]H;;]{$kvԖoiK}rtq|O|gu3Mϝgݵݹ3 mx[q tϷi7>wv;v2ŷ9ns|U.k Uwi^(^ԣ]gNKo>ԅhv&R1Ex]x_Ru: .ټRgi]؛!K\F238zkmy[.wmݟ&dn2:{gL.duٌyFkmy[.wmݟ&dn2:{g<*5 ^]mƏ{_Rmtᥱ{V-4[`ytc']Rjڿ!ghtOjcby*/ӊ]gLױ]\ۻ>L.duٌyFm{S|'֒ywlޅwc#8qJU+߭^]Rjڿ!ghtOjcby*/ӊ<7ॲյ BJ%ǒŀT_ߧOI󼟷ZKmݳz݌9EOI󼟷ZKmݳz݌9E)^m*V/ =+D {W#KP!~T:e<+gZ5"i^9[KY#bߊwLOۭ%vٽ Fq"wLOۭ%vٽ Fq"7=ǙiWGe=Hy|ʷ6M~9sۃ5?>jjYxaqk?B?<=i>wHݻw@8ɥ[ 57Zlچxnsa:dc] Lwm"v߱N3& Lwm"v߱N3&m/ ^]R|Ao}JknHg ,<0bt80H[+$d$}ӴӂG5OB?<=i>wHݻw@8ɭ Š((((֗x}EtVH^Rqm [ 6 i H;HAi$w.p33`p{-O3V9wj[F^SDņ`wVōZ}vgyg9$K:P^7[ln5 . PGp9޲WLmr Z)E?LW23+TUQD_G$?Ya%,ci~dF$ϔ] 7 fڕW~m!$FZ1{>DBPH!X曭67uLXY#Y~L6\tҢ&{|닙B*"/ʣN?4Du{!wy.4YU}ֲDWxa' ʼRYkSEz]v]}#>_ZVKjD/K[F ||,@PH sq{q3)$p¥Q HC>]w3`b?_izu>e8/aAt9R|+3dXf|~]ծk &;m!</jZVKjD/K[F ||,@PH }Qҵ3eROydr1nsfG4]?Ye.tO#c#1|SI vF $ePԯuH;_N)sM.o'pv@,xLuit{]n8CzZX(oR0{ 1bOj:Vl7?jI,^|9mwVo,t;Uke 4ׁ^70H~Й 㞍GͬMOypi3"*%<@xe F⏱`o +[Ȓ Pe} X\z@ׄ[Vf:DyP<(ZEVl\kQ[ϦnYbӘ@&E UȐ cx\<U\Ag(PIw{5" ev* H\gj8ZMGL6G;XP:Ȭ)>s~84Y5o8"ح4$;qhBtXmV{p_M(9CsȄn}+x4xN+)' mr_Oor\%# 'uSh8SGtVa ,3ʂG`MszMss%,l4}.Ѱ,dozv+y=x=J-!(X5_Z۷;|?|/.j֗]=mi3ר\iZז ԯnt%xKpKo5ICF zbw_E;SWAAu8.5Vdݚ(VEd[:I!,6:2s2$ $r͎` =qk$ve\ (5mQm.mu28"7co8|uv78 dm6Ƨw9r[X yhgy<y\:߇9ubL-oD FVHey$nr9x^rhk.f#"VW)$}sE5-sKgᲊrIo,F%0VH<-$ϻV)XFIs.FR NJLfrOj]b&PI@IQՏAh c{uΞTn *y_ Zxiq޼ y7tgeE\:2 ;ԚNqcm(D_Sp!2T\r9.KTpG.BGRcY2FV+(4/oYda\.(`~bG,j?x][ew%^BedqydS 麕z֑@[ZY*_`lonevmܖiza TDrǙ咮!Op*ƃVWZEimidX@*en#QnQ@Aĺ-b7q])WlFƧ}P0ȪG+Fú"JmI$W1G,r%HFGQAimmu錱H.`]0R>nA*᥸!B+Alk=:[HV7p4[VO Fszh趲ϣ >4"+m;Kk@[9\@Qs](z="+O}or67ހn8$3{r ėq4v{$+FyeI \LF(m0g6_Y[g=żGswB̤ QTtkKڭkjZ1K4Ӵf.qrJqQ@;9'b8N:כڍ^ 外ւs%ssc*qhO^\^t]Kmu9?m atf2O,".>BYY|A=čX+qּlW-$-e[P+ЫG7Xb~ xM4*}vK $X U'%sqxkUC9>1TIq4q[^Fe@d /,zp%QEQEQEQEQEQEQEQEQEQEQE^DL#c ȩ x-h%@WR2#5)^aw$1H|ݣrPQIo>K[BԄ(14p+I@>_>͐ngDWx ʬHRGP V}+L SGk8-XbhV8xH.cjNIl4H r 0%RC$x !H"$.U(,YII5%QEQEQEQEQEQEPK01mm-Pictures/10000201000001730000008ADD69CC3F.pngPNG  IHDRsXPmIDATxIdו&vsL$ &*VlZTݒ2LmVJ ɬL2̴VbJdUY$󀁘bL>G;HX,p7$ai4g^fi5{ĝd8CG︟Ӵ;O c:rl&;.^~$z= =-7:ӼdWj_)]#rۻB盓ݞ.]Ak:htn %TR$jt}cϩ\qwlyݸܑL5ì_W\n 5uDRw:DsDO~_&st4c9|14v/<#'sD$z@N2O>hGqh6R%<]ٽ}wJQ"A?Ka&a6^ž kɟB G ;뾅5[߽8q]OP沋-\UnDJotzMĕ:|nLDd9?XDqi^\j/ohy;'XjJ?;W^$JZɭ^R`~<]gAze6a9\!lu̳ބ<჊{9N(2J@Cm"Ɯi筽HoXFH7$(jn&/hL ';ߪ] ^e2fG&m8xG& e Y5RS8"sMw)],Ė9EԐq)vXwT >SĎOt{OEI#5n7PF` ɡ ,gk~nθjS)Dt^hf|H/ѩsh&Ru mN{#lZq3M$аTZ#_Í7C$=qnLv-vhv~T^}Y>ۭrEqe!oZtG-HeF={̲JsyCaBw$8)0wā7U%\_;>oG?`JLdvX( ڹY #V"լ'*?xTnqH`tQ!cbo&; [u@$eP([*N~o0jD=6^n@IQs0sbo#6k+p&5gs#+2qma 4 ƉC<ijHTi2Q/ wYaLŷ[~25'!M<|8GQg 9Y)u|?UV<`_0#[m)4_2n&]M܋3hz8 mT-R ˍFRq<+wBOaCy#rr^"ŁӧJnw| r_V ߴdGEͶ?/D]E 5Cq#cqq45cʋw8Ļ ײTv\7ݖ]?1keKJ7ϴ#MMzx%9/lqvk{;eϙF~Ҟijܢ+GJjce57A8.;s$yv9rXf{G1XHn)\:!dV*|}ZSFdϿ>b%gu7эo$fcldtz;]eb܂+8nWlk~1QrIܥYAF/ȤD;{Wngv.˙1fF(JRZ;~(D]J?|/N oo;7PC-A.Tdn2F HNKww rMG|h.Z"HqU\N_gzT>`ݷRs]*}^ijl$ (A`@f ,{'zu=Ea W:e0| "Ѐ6%p9$>2 ogaU? pB8tB!=`r*iqCp$>R23ͮ91Yٷwd~,1T*#[q/S5Ң^7^CUD|-FmC퀑VhR'δG2c>PX3Sawas*"J=$)FqD[ffr)n׬E˄.4cΉ;>C`\YXkEqލ8j3CYp=/K/9/]\rh&M#jF4kbQ:.qf ZQ:]l[_o[dYδ'l7sF,*(KTG qϹUl!i fRlu9!97϶ [~/J}^O?tDtS8"FƷ҂.U,>jSQ^y8ٞSjܝf$0wjJc~DwspJwzdPvI+]S qϽnk,rS8vC%ʦrβbZt:v[8cmKz2VБv;^0u 8[;xc=t) -%;"dE%YU..dV |Ⱥ87^-8p3Ռřk(u:=Âkz7{Xr] W@r-π 4BMc:EFD37N<:m28XxT8J?j9JDnP)Ș8@ O(cU8Sh`BExK(8x#qŲ]>((29UTFH)I&Xw\IxFyXv0aj兼; >+Vo\71i6ۿhKfl6 e&BHscGÎ'RJt"e 1ٶ2PJ&#ʵ݊qj6xM6NJd.'n6 j({%Yo6gDg]cyҫ~ eA\jNovà #EMY U'Ow@iY|JA,[u;FIߕY ZV m[l]&+P2*o,>ׅ#[.ϸn['[K &B&PbwpsAҜ2_&044Su]%PDiJ2yus rЎUchC #+͎͠L+yV]dv9pQ Ϗ& 罼 x@ }U+-K[V̡{/뢓GR$R,7DgJ!j~29Ɇ+ug:@UJM<eVd@6Pi΋TqjFڌ<8HkRh/␟?ӿPI+[ٯ3a+CȘN2M^>v*T4ø81&:cJQզ@wrϝNTCW=XbE/87vе]t냟1x4^ГA^ji~*U6Z3xKSO6qcAHd,jb=}=ѻi}A,uw)_f '<|FA*|89Ns8uK<Ɛۆ͈z*,(VOxD{fGZbBPKk7/t]y`bT ύ&dC~@ oaa6^x蝷k6Y8/TY #$̔g ro4 NAn9*$YuR+PW˺lP<ՆV!zeɃ5`NOO蕯pA:&AKv s^ V]daIQfG>4)vI`n?9DmRm30o\.{(?_${k}3j8,15Z5dN;#?_ą MOQOt(n(Xh97`O;NeQT!ʉVF{`W4P/]N͕Կ)??0Vla' ZCmڌYb׈'?b:_:L35U>ƎjL0;ë =Վ7,ZV/:;>+tk)+e7,=@GA6hq.Җ# G# ^pW% rvmi֛CH@@}}3];k'z'= U'@%s("f״^ꍽYɶHJՊ*z٣|*u0 b u+r<=V|[D9[Q* ]˺4ZK Q~p^)I"1i'81 ;rHS\"Wֆ~Uy!z Z4b׌x6 OiVy|\KuThPp`qïFΚȻD?i4O?s㢑wȟsUB"%p ޸KfA1(d4BC4zroG!bw[ݎ(Ckt w?-Ѭ}rR Jrݗ=I#Iqe $;@ŠDDS62%$2 pQ7bo堗*H SXx۶~:(}0@ 7ُ+3[̹1c}7*C=aG[;:QɆGyAF] f!;o;K~g;gxج,dTFک1"-`c^P 7}9;٩ć3sAw)L7m&zBxI9U_j3:i7<42F:a%1 \/c$JQMGɓGpUߠrt^462yte.5%Ǜ=r ~ҵh~2( ]&5 Q&=vKh~Wsf Ȭ([w\?7U}--QrD.+w1jR*Qv=փC29sYkdu[.g(و>*)_2ؚ6h~:]@li3 a_ HcNE\28P_nRA*?hudn{Nuoſ{mēXyߵ)7(7|q2p0<0,ԩ*j_u!="6LM?QUT evF"7p4 PXSwSrE<u9)r<}+†ҡ1gBM h2Vto#靵mi.'C@iЦ4+76J+8vY6d&zCƚM+8y&TK%pN;)MhNYO6z›7R7cv`;ZDZ"+6^j^/Jt:CfoMc2jwj$:3 c(kG쒂˨5 G{g[k"k* zlVY̞*$nB0JUMebgg/7jjlNy֛U"}NKxԆB$Y,5A#^.nٿyXq7:~^+M6۵U"?5'qXX{ pZ9 /+BVwix}'Y%Yfe wg- K)w} /xuE97zBIRqs_ʑ|ZՖ߅}kYF FK5l Q&&`TȕR qds2-霒vxPגti{G+nLEP^)C}uAm\njts3A(Ԝ}#eG%骐Q,ܲpw0B v>s詯: @=h>xj 3/U5[%*='0UGt6=&% =-YlVg݆ -=gdv^"Pŗ5~wd{[N,|?` }>v~W||ǟ阧\2v'o c|L3n'tZұaH(|Τu=]tj=B rW^O@㎝dwh3#ȣxgM4=u˘5ZMrO'w4`҂!=Dˣӓ}' %7z9N=N}׉._IevǙ߱6Gʼn4~<쎘U8ڨ^Vu@JNta2޷d ,)f' ^O|zP" *Wqq/7:,fUDT:oyM>Al8J eSsU߾I;M4s{y߻f¯íW:g?$ZŻs?V9sslD>f}+db@ yZh6Mt@Փ;.%tZQ3*N{ HmObl\H܆{IfB*:*KtRn`q㶯L#Jnj-|ِ`<-6qՑ;[%8@kF<(=۠=Yu WDi]L[q%xd7n)~@(``FR*gS$rۅs_8i)UUװiJj _P2K%齳 /2]w999T.>Nݮ=2kl DH@jqx-y+W~iٷVgv-g:h+\z ARӮGkǘ6|j_@Q#//Up}T]K+V99!M0FN"6ڨR*3 : &4z(|K Oq׏6MCCxfβd P,Cjdm9X~-ꦅfWgO; 5UQMOEb_!'o>>Hvh9q=d2%I3!Iu' D$DVsXq5{F*vIG. x׵[WBzH&(a4g]C@X 96aLj~Jws(ɳ\EҒѶj#soFvrWh&u)EB.oxx wXf;t,>A66|2!$85"d7]%VhXd֨&VyK0 Ò8;c-5b{J~Л e6SLٌ JjQkaqӈ..{&bj6.]|9vcj7v\μces%zisYZyeT'jL۝&ڔ R;"r8$^g^d^P恮k>FHNIɰ;fqӑڤ[*Y g:-W砹5 ij}a`0=qG PDȄ<9m .x>L XZ-̩M](4O&1žj2{xޥG"8t$6\F>4d裎rQ'C' [=0tZm*+%H6.ZH*n6;Rf;IL>/Er< /~;SAK lTBk.S/}ck1#ҡ)q~%oDs rtFM'T[BY"](hKljJ)Xr\$uL<=)ϟxJ`.o}Dt$OP4bf_tw }XtR1AE,H^(O&e7j͠+%CtR'HXo|4@ofX4Y^a]34Ń.p(wG:el0Ye)%gfCÜ`g1w Xk/daajxЌZ9zg`VAyrmy>窭O{j|TJepu$R| \H"Ehƙw،f97!q2c}>@ CCR+pAk/f[ Rר#Nr9pR6H Yt`;,/(C帙wC02Ydn,Z Y䢜;#7}ZAsvnbNP%?i鯾1v4e Y ZAlu[%E<%Ux"Bh]l-jͬZ.ED'Ju;0 "I<{[ Rv||DK"׵Tw_!VR%{cgF{yP jÇYR8-ݨq,#ЧpDYR`XfGZu,XΓF&QEĜU^wVljD"UG&jwD?zь &Zp0*;꜄u JG`s [MFWD[Ła[ΙσcECҵk͎{(fg6[&+5Ŝ\/dDtzORRnVCڷwA~5WL8Ɨ=DiűT&VѴD|HfrO7q>m>6+,dKr#Oo>dx }Ў9:J^7ߞS;_'x.NEDQc)rs[8rJH. I b$#+˻MAC CC+ЬΙ7b]E&w֪ ʤJ̕8l週j(6Y2Q&Z,+棾Z3}5SH\BQt\rQBU|9;+.h+N垁7zuʵ`k㮳} 90& v#͸S$N6V2v-/xʕ7|3A!>d[$6ؙw鲤Jua&0&.;tv< {L8DڊƆDÁ+6L! 27 ͝2ͅ:|pY 6+ тkhł.7XwTfdqd( SJьea1B<#蕃fd$ZkJKM,rmQ9cC] N,z9&EkYA% \ o vpġ2,kC؁in򑡐7cAX4 ~á3pD=s7U DCϭnIm#vUe @ZPtgQ"W-DTm!^p> *rpCzq{b~2NU ˉhZJUZ@@+ $Y/+aNDЈ Of/j^[*}vzKN|>:(͕ƅ<ΚD`&(tCfnXy<,AD:nanK݈Fc?N6m*r.jel,26JC}#hEC(l/)oPCWx0Kpl16Pf Wj-5Fq \kh^.$EGJV«ku .d~J>9B /7`gޚK`@BYN9L٩r|.؏m Њ_sqnqڐQcmbaOLY, W.=`j $H*CC[Hx spa\7:~t pMU^ Gjq{\XI@4ayz9"YgW|Pg͒ rQ&\icg$ =ZF|j_b-dԐ3n9bԌ {9 b_[I3ĉCK~G^DT!" p#cd,6<0R,VT˘`gyPqD^ J/j֏ y$kFVyѼ]Y(cFsZB\m`dV63-4й-_S:5Vi60PF7Ӵ+* z8!Y|ZV'lf^+AbJUJZ2S36D}5=SJ"l!*Sx*BH)8IeL2YɞH=tZ#*e=O݆YaQ5Df*g0@If h!G@qK`kShAnv͹dJ< ŹjΆ$:{ɅKG̶lK)ƛdnG kYӶNҕ8hהLa&q[ۅ)tiû+l$CfZ{/?Q95sӈsȇDNSm89i%e bzH(1gL]J :)ӟ>&ӽ.{7.˒^(4 ܩc>XhT翰Zo 8lʊ˼/_JOd1Agj8}tA䖮^OJ+lA+JI_*Tm3wz~'@PRS"̽86"gUt߼&|w-PFj8HxyMcc2I恣rFdR9Rx'a + X(d}qL;K Twj3d@XMOH!:ѯ2ɏ trˢx'?y~u@~)UϞsiԅr̓?O2-\ThӒBծ2(*C_D֭<"sx@Buotl8F7==c#F :Я( ,y.b<*pUL76 Nۇry,gV]#Z,ZyU2𝜂t C!:[!30DcۣoyaP8"4$/C{"vN.ɞr]sn.Dr] 8G{%z_tzɎnRs s{_*ofZmFVӤhPAl 6<2*&4j]/x ՍI)SDt_v_P|+k_}qL)vH5yw\8~Kctgߡ@rCRޔrTچ VH}h^sVpb/g!~#WZ+vL毈]Fc1DLR>FKo 2) sŬ| ~H屒Dh꬗_Ґpѣ%D“췃4됄+/G^?(x3/1ގD@ W"2sS,Șc͒8(Ih]-Vib SEYj3+[d۽ӛ9PDžXӿ|?H;!,7@d?ޱ #KGqVT@+ 1q^đ썒=Xy5k#!&Wˊ]($6gNՆG+8@Tk; {PO%ލ.!Y#a}́\h@BOyő_tӤfa4"-v9k`d~oAiS#Gǫ׉n@BѺo}|d4 qk|4^!~crxڞ23e5~LpңB<<{m&F Ģ9`*`f- CVPBni!†C<Q+{4?㨔4 e=0@w&ef 󟕅@1e^HT3yFO2pE`l W%+/#пg^dfN2-iN)sSW ]4O`c˟ )Me TSu1'89-+%wJijzN+ Wq懱$#{C:QˇreJw(8~qi DO<g>2ef^(])8)UO`NfoYoE怵b:S vUUSpQ[ Zkșai٘U^]URb$&YBcU,[NeFmـ 827 )<:td)B'_1u` EF)nQ =XNu6sʙ%Y n2D&4Jv>_`PΒ+ֲGqȼ{4빎k`BQDV0`QFZert ~ ~6uxȍ[bÕ$j^P\?-Ioh-urjh:ߎz;+.Q K,1?{::ȦR>^wCp^wi (W?2\e9|[m a%.N=xRߺ:r3:au<َ"hh"`9r 8\gz42HN(م=!ݶ%>ÏUT[. ZumTMj4[Zg- *I8ř 'k$zY#0M"nRD5x}fAG\̯^#shbZ4yM-mTt dxp81LUovt?wmUKVgp?!j}BA*|v@ m`j%>Vq|+nJ]Ltt6Ҟ{koOm&*;yߛ[2xi $N?lvZ~Ii&eZH~ \Ii)> ?Wbv6ۡ٨C955}RE)O0;nn1GTUt4?OՄˡBKf 5YP($jL:C2PCLr@fs]%7> #Bv'@Jy719гUlU&(dȂ5.%fgp Bs*zĊ! F|7 ʏ< U$@l!#bLd)?}0osœ@"-d8i ̐B\xYjt.*}@Aq9JLXkIjR49>B hY-yGJ ǤjH8rtykA SpxC*[>GIv=Lapr ,ID 0l@ %%5 ^KGw]5 y(@]Q$ICrE/r-*"=`h# pu[ z`'7n]8oN!)AOM@O:{D;r.]B=1zi!kp$cDnʲ@ACf`V᎕Zp%}A܏ ʋagarO$`B6CM y j5,s\&<'Gv䂿PP(ىY.gen%ojgu1*N"y=G@oj uAU]0*$kVKtnn{+H4gUX)"˨b:/BD@z9/C)\]@d*dr_ tVd! ݉kd7wfPjBMX6`M9sCGżjv 8ВW$rA;Y6C0Ma LKq+͟ߺMu1Sas),H_8G.P-.›lYa4s MCGܻo}Zr}ё{p;.Ysb4G Kz6 4CJn! Nd|xlN5Q<{iRGKAcmfRrᴠs{fB 8)lf{˸e&*GSUk8Hq1l][l\u]g,bDz#E[Ĩ&;AAmGH ]F].Ip-KHY$E[yܹsO玤0G5Mq$q^޻>VF/|@VAĢȉc^\]J>>\"3m5315󧿲-٬3 _HoP>o` }B30S+HFr7q`R[rk&xCzCEP+%-JB8=9'ղFN|{ *М&&}f߲嶖FEϽE*@|/rLY?͵ҁ$r/7W֭#= aN ONw=d1q&tISh0yx_}r [w ?܁z#bq9񇥃EJ/3H#m9&X,YG,B:SH!$HM Rn)3!׶y(3߸ 3s7_=n5nI٥*dfBZ k"B8^ k}@덇$Uh^tqLNo6rڄ~k \vhR1SG c,(y(} {ڻ 31mɆo5Kۆ6; )x㞅|/و 뇘صovUV$Vju2/jt%D;*<0Di0-L dP4,]ʹ?d 3,v$)v"5H"J6\G UB _ ϬJ`v#s1c R :ڵwE`[W;HVx#td)Yh Y.GY2Uʔ7f:ț95rܒFV-'ttJ5@vg k $ ӶαdDZ562fdQi Jκ&g\2t*ǎCcwض@vIWsg2tcj RN zr34ঝzOktbʙ9MvYp|a2^ו;koInu{jwܹbԴ%4grPjˋzk7jw:(,Ii$7(c5>,IL+U(Ty5j<&_E+o_z-sSwO!v^2ձ?} hYŋK.-dVNa%4݇8N<5w{.LR$2=7E.Ȫi IGIb$0UR-lo 6[y{xi2P,N=a}JFY߀G;HĚ!k85mrCba%?]nqڹyo`sv˒Ns˽PԬvl%yf %:9K"}٘4)Ep(ӎߔ蟘 ØVF[j3F=v>BhKpoHf[72rV8bIZ8$7=g͝<c@Z/-ͬq ,Ɉ\nz[o֘G&3\°fxOli/INg5g梳:5!tÞNKUf?^WCs ۱OZQfczn|a;HT1SJ^IA0f(o;{Dȹ^zY^`M%ŒpgYLDs^P\)o0(pDՏfe,;eK" Rtgaiؽy0d2˹D"yvxK? Rs)G)] `x70;ĞD3^B}hre2(j^ @ ƀ1SؖEʤlDԯRbwA&#I%Nאc.{(T7:zUprƭƒRL4vj^Rbf-u\!?ˍ* Ҵ F~tӜX us< ,ofM9<fwL Xp pFO2vE>w|YAe+Ϭ$;}]Ӣ"jXv 0/.NRf6S8J x|V4 ""ծP=7lNfV>7hCd{d-U& ",̻ڨvc3Wnr6ZK/D{,LfLx3m:ͱ 7:|ƭR"i_8.V2 ACE9::A#"Y?B/ ]6uΤ(>CcyYbb'RVy.p #&˟:q8%{6 .̙Xau+FIBjoK`]]7Rzh>蚹FN_oNHk,@^3 Ck+XQ+xxJumb.W.kIn";W-sr4u_[(Eq ];qze͹|oߞaayɢRQ_?N|R;Q 䙐OzceseRL[dyenors[s$#7Q2NP8BhL ZLgXձL :9RF9B~2+5faz9ҡ߬_ ˠ}߾wm̢j*^1r\B<x!4\gr*1|o:}9^&(tU :0~g0v~/(*-?[nP*s k*ܜCY8,7cRDF19qp x>r^`]cI1n,JCW.XnaL¾ə0q@jhVX 9-" (3ᰋn> C+"?a>^YG@u ́RUgW0ˊ$z͵L͔9|YOpX7 >ʪMRRu 3AQ yr,]Yq2=#l曠c5h7Gi$':Cbrj##5zһ-@םF7%U k ݀]N˒Z z$w7c[7sU .R".ǾwЬ¶dE$d<YPؽ+2 O&ُ.Y;VS۝G$(Y9<"7r|_Z'r&]xMGbLOVe 7.26^ا3OLg)D"r0q&Μg+a-2Ya./'R? RCڭբe>6J8\W:#mVy.R֛SjA/k4 sw{B8ZlAgK:f=üUDz*WX{XN:d?aO= r8x.%l9x&*O&x⽪tPE'5̸r{l87 2cW139&SjWy)FxK`Y\snNQr!? >c=]_59`rʭy[[jqFɘloࣳ2Lul`G iK=5FIؼF\)&e;:CLAHǏB?  Lp\3P /D'GPطmLJmlBK[!jPi ^禮l؄sbT­^GKs8{^{sZ]trvRPA5"qFb$yj{`Kc-m*Upڕ YmDoCL0$~P=xMdn \Nmī/6s\?Rr3y+iMbld wO?Մ?9A},*/@EYs)e`jJa$az.mz3gIetK)@W % SiD.Dr8M>$|Q35&Q3VYjQWmMiF|,{럛 :z$uW'k^#8m5l,XuS(O%+iFgƻg/cP2>島X2nbfЕ>_bo FeP 64!H\*~ppu&-4iUϱ%UIN ?JЃ^uM4;RK ל"D;n(/E^4.( ydl9pXFqPErzE>8`l "Ʌ229$[|M=k:v{*RId]e#X"=ם}oOi%?=Bߟ;}?]af*9JQ6Uwg!Jnx +GWӾ+V -6CM рH2qwx|1U?RU5CQ>z0]Ce 1:6p0HQ^7_kmazm6wWcpF]#a,((((((((ëi:Y -%3Z x85NoxnoiQn<{Iv6' Jآt ?xY_jР(<)go`'em D,#VwH t (<5WLѴ(6dۉh.Wq=[-esƱ $#m|@<>ExK46-ϋnj:>۴U>vc[8k>?>>%i|υtxH,*NQ@ÿ xGn$]Z%] aڳ-]˽ ’)3ݼ)z5/k67g'S[35хߴF{ @4ܟc&gZu8Т8x*mgZoyb@ۓl<_qKs. E%fYiQ]ɕ#qpAݹ=b(((((((k>vg6 p OJ.6]_TX{+)#Y*YdzԠ/[NmVn8mcZ:nݷMnJMf?h<_?1T/~H`.P{OIuww>pmEn$o- eB.NjW7]x{\9d Yu+U99x75iz-nZRGf "S(COs^jpiV=wn᳂yXՈu:z_jkm"cfݏaAUa^,ӢW&?;oJ-/}u^?2\~0i* ?2\-/}u^>&r2ķG$B͎HRI=qk-/}u^܂et6FS@#IEPTmJF.FK0 E,@8U=Z P4-K$DTdmsF(jVWf4g9-Q@$$9mCf1=Ɨus(Ight !K-Zٌc|eߟ*2'`0h75{Ŏ붔Ʊ'*U|F rŲ ciwREg,33OdD;GnR (Vh TB}ѸJh9h{T\6_G#ڧzz>h9hg?oES=s=j9g?oE0GOe=ߛ/G0xZfZ??s?͗#C~lxZfZ>h9h{T\6_G#ڧzz>h9hg?oES=s=xҏ ?xZfZoЉύ Ե:Qv\Hs:LQ짾ՔVޞLc-Gm1ci_imd;-Zc<(jQxɴKK.%@|nC,nI8sܧ@"#kd[<m`{~͝w{v;皁O }ʋ0T1#Ӟ?|I +gVFiyfrX3'ӎ{SkFֱōKǸg;Lv;"Q |% &&^/Ր^x,WɊLẏIYO%7i^߳Zl<>&}z'zns,ZoU9xiGEPJ`mύ Ե:Qv\Hs:LA]:zٵ7e$ eq67s1?ץik<[hPÎx³kxYɱ͍Ƿb|`u/o-G׳ȷy|yt 65}˵;3ێ>w5'_F=1 a D{Oư #c7,b8N:׭fkx8㜠2$n]U @$g}A (;yI1%;Ƕu)tn+6JI% rTS1APM:utw-<˷ytXěZ1ܠIoer+6mUXnkޟ6e%3b\#F20(E;s#iڂZ?O9k]OC92P "`yBm4^%Ե!$vao5UM$6Ҫ G2#ުBeNk5-[MѭT-,`g]L)lXqk|wq,6Z-Mw#ӉOˁnn ͵sڸ/xVc/tdI4xGpGj51gc+Z(51ס* (51ס* (51ס* (51ס* (51ס* (51ס* (51Qp?_AϟJ?+ߡ;xA_^Nv%`e!I8>xT-,`m2K%- c]^[;O]j)OFc~'v_Gh$#bpÃ*K<7 +; +yfl~gm6;:P[ֿʟiQ/G n'Ulo<ϲ\$2qsKk~D:3TS]$LW 1g 4B7T-yҏ 0ŭ%uӮ]IX/nHRN2@ϸ<+'mVαpo2:zÿ?KqU<#^^6?sF ~'v_Gh$#bpÃ*K<7 +; +yfl~gm6;:P[ֿʟiF' v`%^_ikA.mg,x$ƽn ặXTeu# 8 s^YI.+?l~'kko_7m}i^%1m) C r= nOEƓ5v'b&9XP2f/-`~c'c\%f#9"F[F{gU}[MYѯ`F]J2~!wgv1qĺlυu}.ݣYl$(gBqh5]AOGw\y6dxlJ ob0HNG]*SFgkq[Cq{PdeݙniP:6vRBZ !2īm`96e?}3n~js+턖o Z$mByCk0a#*0Ak({?_nk>ǝ^3?izfA۬]+[ve$s8+/ jjkwiX/%%!6Heb2mSc5()mtKiulө\A9c<qu\ E.jIdor,y98Vk⣬xESA)m&V dGFѷh ?wC4@!_k=ֹ=GaAUct?MTֹ=G!_k=}M7%Q?wC4@!_k=ֹ=GaAUct?MTֹ=G!_k=}M7%Q?wC4@!_k=ֹ=GaAUct?MTֹ=G!_k=}M7%Q?wC4@!_k=J?+&?hWB$w>6,jN"R\};x5GG |ueėh]6r۶|aFHqUADmSRn`!ROx7n9,8#tOQ[t5'2O37v8ݷoj1?@[P?-fy7& C=:W [ F#;9f$$޼Oql' }&'ʋ>r3Cמp %9'VlrBH퓏SFaCbbx{Sռ;6[؅3\?-o5-m/>.=+,ՕƁ$[jI[{ PȡԌA8etMCj{^y0Fff2 o՝:3E-;yqp0 ĺ7u}Rci쬦ddBq*免[XYЛڊQGjP5p4V\HX)bHۛXע;UI\e aGu9'Wf(4׫^XGjY,$eO$F< 4;m6Mn4 6i o%([?+ZA@&Z_"4eϮ+3]eϮ+3G&Z_"5Q@&Z_"4eϮ+3]eϮ+3G&Z_"5Q@&Z_"4eϮ+3]eϮ+3G&Z_"5Q@&Z_"5J?+:iGz9"Gsm~Uornۋun "('_CTt}N +VSGveki-gͶ6փ?4M2%D~ppJq=A] GWkiV7Mtf^83T6ү,_xReDWQ۪[yq!O1t?foݖ6{Ȑ7|ߦ;cx<ȯQ{ =3#;Cb4\Np2I?OEh?}??b>ͻ~gvy\o-G׳ȷy|yt 65}˵;3ێ>w4bKd agÖw]}&gHYʞ[mmⷷ8`GjQ@W%~'e#_I]1k9:Ӑz^m Q̃Pd1ɱL6Fӻb+?]<=OIn|wBs-L~.nvK#D rFQ˹p[_hʓ^ܴr\ڂl=Uw Z/& l<xR8Z'H"v'X+~eYY-,/} l0$C`$|pX^ jZikh%A e3C!λV0Xo\&iis>.Z e9y;ϵ}?Oe^jnnic8EeK` c@~u⡬xţhSC(mZU dOَi$q CXz<+wĺ2$ښ{0:m]Yzޛ}:e;[d$$ ºxYll<?/w =q#x_hy'FAѾ|pLeEEbOZ>$+J#X<}F7c7wS?,.໵=A GSYQ_i_nk7c<ϳmٷ9ݞ14bKdÍa 6G<$oY q>u[5q9@dHܺcH| D5OGik>9I;'R͕X8 ۯxR{#R\+Zڌl^5rH{v):hn ŚơUҬ'Z!T]crIJ:ں})5gRз"kW"д)'`ET=Z/  +Jsky$ SQGa0ꃷzxRHI9F5 1嘀ma랂;nE?f֧^]|WjK=_7|$5~¸ sZ,nbd5"be!}? ,4g)8BMKRioE}Yu Hn(;5 ۯxR{#R\+Zڌl^5rH{v[KR+j =Z,)Sb֌ +'jnj4*yͭ#5MEmGtê{CIK" &{yX$ǖb +z ,b ~ͭO_?hWe|WjK=_7|$5~¸`>ߡHW=7?T-dWJm;mIݵ2]jW G`qdt˷[vϛl9hI:z )O~'޵޿TJ{(KgsX.ӥOՇ(}Uk]y{͜y~f͹mR]?G? IqZ=AְR-CHL'x\bsá :vwlZ 3yA=YyL6odH<?eOEG~~{_g^GKn[O{fJdBq{9^ <[w]kt"[--y> f~dc2?k_?YkSițKp,dOI z}xZ+BO0UyeHQ,UmQ$㩫$״9-:{xo"xg~ʐLnÑӹj\ўy'յnU5v,zSQP`胿\42?Gci-2 `?16kĖۍG=^[]GlT|f!GL#u 7 ]{;ySIc4?v'pIJ*-8>.exɧvxM)ʒrs߮)/#|CPtV ,篐Z \_e:#]MnUTRw=YW9wwiK{%Y ke2Kq33K&OsYEQ.˝N?Hl sKX;ϥI[3dbdb Nxfju J[&EfM[ Ye:5f@iwVG=(a l!duG9;_Y:veGm ]MOEUnI/WvotsKG#IX+dbyP}OVZZe&+ !b<'^_hPo6yyR$TE3ET 8j5kmKNȞ'u߱u4\J\ўy'յnU5v,zSQP`胿\42?Gci-2 `?16kĖۍG=^[]GlT|f!GL#u 7 ]{;ySIc4?v'pIJ*-8>.exɧvxM)ʒrs߮)/#|CPtV ,篐Z \_e:#]MnUTRw=YW9wwiK{%Y ke2Kq33K&OsYEQ.˝N?Hl sKX;ϥI[3dbdb NxE W{k}웿~͛3?ǵz)P}լnh9nC!i*HYzFx5k OZET:q>\R*ȸYȸ9@=x5j+^d.eƛs@q3 [xGV-npG߉pr RJ. ɱM-~}NG oeYdHh"4c##栛C$ZucsOo<Ŏ! ?MC:[x$SϩI`#!ǚe\']AiE#Oio*+F#b"&4x)I&CC-~ N|GlicHi&7#$>⠇B4w:ޕm#bC! ';M$lP<5/w#Yc2.Fx@*Jᑜ_Vt_h}$Vkg`Q3Jm/&yk;iij6>vhyѶC5ÂF2*m= #NˆSUt4}cZxLʲ&DiGLF=yA6H/mFD?RyB9^Z4ri\.,InLI0yY`bO׺T6ft&F'#TU%GP1',MM%ӣO͖4cUjǁ-b]Th]_=` xKfmc M e# ("o xVZ5αsZʬ##8PO2UgsuZ֕c\,7jB?9|(6#dݕhr0rZiv> }GNZȬcByp$XjdBKj:< [;6,1p =<s*#US񒑨$cg6Ci4M؎-Uվ1F%@_1WNy}vvzm|ֈC [PŰٓIrX޼C,:mޟ-B8t#>cGs̯64`T>Z4ri\.,InLI0yY`bO׺T6ft&F'#TU%GP1_WNqhk˧˓g2DY3!A[tSYwKq|#3ӹ8kň'}bW|?iMhm$7.Q . X8@5>N];Rk{?dqd6s^ǧ_x{]w>S-Du#΅ (*q.oiz<+e4'˚?-B$6p73mZ[Oh:Ʋqkc*;A>^W< ֝kkZUsA]`|7 ؍vUw)mkj~(-;Ik"MA KAaXj^!E ,Mޘ%o,س;6EΗ?ttV NoCJF\k/4C4_&Z\]ڬ7^cE.&H ߻YDjH\<:tDҭ4ͼmumj*ͱC9Kz}_[k/ἓ bnRT70gvQ+p JV>NOHHQcx ikh]y1\,1K' *!FN?ڤeEӬ-ex͊KE7lPb Po>'?DjZdg&WH\<{N;ޮ]^Tf9`N(N>u_]dF tPkD򅈀qr'» +o ˪>!#7 G&2Pw.@9(v,CI%Y$Mc +1c CH]س*˦wX·QO(Ph~S,S1nWxSYw$'JF$I$yvjrxeSƗ&K dX"xf$\Fpi&ѬZ;H6`FSF8{=V=F9aԚW1/ m8 '.`-ak+nlRX-I?.Xed†`6ezybp1xt 4qгBpyBq#?i~fs}? ZkөGmȸo Kyϸ983%@$F7,⸴DK,7 HO q-uK-A;6lPP mU΁k/.C=@VUBSAuji6nZ\ItE4w{qs+0(wgg^ ]Bt׵[HὒA4B ,c8:`Z!{?qs־m-9u V=f)b=N{e*`Ubu 9`x+[WGI W5]AS˜hBOk;V/Ե4ma#$*RSmXDT~%Rwz6r>BDLL '9Icwu1+h!eUFn~aOOmerj]ED-6B|rۺ*'t =Ë}>kaHO%ENH9A'=" ^<_ i}x̍ZSbeqs-ЀsPXKKI)y tR̓{>[GWF8E{to+n(쐭@C uƠ]Vk5\PD &2|jx(𭷛<%H<&pЙ's28"xI0x횂¶LE#捥#`2(GPÚEE MqinC"d%[_4d>}(skك\y!ȶ!Ya;|F7w/A| jG}K$*_) loz$׵{MN:V,p.$䴭HV@pbE!>5eƝ$3Ŧ,db"b$A?5J)ua-e|6i {*G4ĴzSQ5Ay /]eLӮ4-u{"V{D;\",\C&x\4/,Z) #<!.+6/$G W.y$zYGj <@Dcg)zuSw.>i=֧-,FEyH# w.sۉml<2I2ΏSyd.B'.16j--+LoeA y"yȩlC0dXnx\iז_W\"muYyr1B g¶l0q"3L8BdbLY{liK]& j Lb1/6J8ȣBi6-5ťúRd 0o|ѐ;pxOofEqD["ۼe;vCx Y.qER],J|>d%U?L^5;/Z|ҴI!Y?+*Y$T:aOf.0 /ojVowH{dAk,k~L?x__+޽B-[^k3N#K2־OH&_-|-P$=%QEQEQEQEr~>#t=_Hԭ5 hf$3D) :r6+9(eMhծ#Z[ݵOu!FWvbrv g7x_|L FW+v Ď;H-Zyy7vV8'@~{׵(mr .Q$-rk&1#tW7|wWsVCxDL Q,d{!q[ /3h>YT.[U=J_ݑ=gh.c1Eh]IE0HSY,uoK^YH"/e%8@wzҊ6r6%Ƚ" 'MBvy1 `k\i\^[izU$O%܋#,$!YV VPpU ܾ䳿LoxĈ  Mtݭ>r+!@>€9{Kk]M&M>+ل A9gQ.neSHM=[2AЍ<jG0QeP йoSTdv(#މ 9v][RbyEDY>l7.ota^h Sa1l b9ѵ4 h:5\iz&c;!F"bVeiZ=6pE$ ~'=\>.-d7,O9h!7;0Wx^G#„Q@{6Zu]*C2aB I^OkfuFvco3ʑc:ghQ@Zƽa-u&wGi%ُLb7.V MO3Te]Yy9F;>lEsv+VEԖ+q-ѨBe}рSF!8akqZ۾ew$f17MLrbJ&j%5[-RK[ܨ) ^CՑńmr*A}ƙ&xQf"w s*r2<ޗR g8MFgcdHv"|+m(EƩ$~}ǚLl4MH% yr0z_I0Juipn{&0ۻ.Kt(Ԭӌ'mZ$e?y ݰa Hbv_º|nb,BAqFJ$ +cr[>nđ\RF)eȓ#n>pGO}?wf2mOQx{-0ƢKE]irFa! tHnK7>y7sΟg ϕ|'ns8\2ŐPQ^OIQ4Z!O{K[bvVU0̲=PaGq=:'5/ommZi%XZbϔF eleHr=2:Xa<ؙzHI;I۽s,uV}_omv.Wxb7IHH6UXv /$У3JTP]cP9'tQEQEQEQEQEQEQEQEQEQEQEQEQEQE֌3~g%ܳ|oجy(qӊآ ( ( ( ( ( ( ( ( (?PK01D aa-Pictures/100000000000012F0000010A412C2947.jpgJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 /" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( (/|A?_yn{T[4>QLp7+q (;#~{-;v;Ԅ%> g^{Y>ywRdܛdHZ2Bv3sss lQ\|Lx~m.OH5Ⰺ`qxRR Yq$]k_g𤺖h,Z/L1ę_GS sT_ko7Z Q\^OHA,0 8k/BeTElc&'c.+>@ESlS,RΛ>hʲﴰ qdg#r/5?5wRyC#' ? (Uur{_oiqsjn|!o-2̶4!deK$L$Tne=x9 Q^?]v}O#Kӵ[i%U\Km 2;6n8>kg} "Vo&@\цFAP+jn;ZUHɎ$%27 9~vLh2QJToQ6GS4rH/?XvgOo/6dz~=(((((((}gYywx4r@c ~4bugc} >U:@dQsՎmiڅ{xeͺ, '' *uqi4ۋefxIrP7tQEKmJZ$qjm߹U+#O x9Tw 4x(*K(@]qXkߎ~$i6qi>o[M4^ث Nc)=HfƵͦ^Kx, ]V wX܀e(1mfZ2]YP xeB#h$`` >p. )p{MJ z[m/Rm%֞lC,8c|nր8 xY֌wWl0A1 # %Y؀JpB` vb;deW*qv|Îk;@֮. ۆ'sU=&| %7_LY^oKUeb+;'%y1cfwccmN 5# ih kIC1Y;d 4?5>\Z5?%O~D&XҵeZ0YL'ing4{Yhvu9%ͧټIb͐(lXFs\eB];D#Jޕۿeץ[wچ$Ӌ[E4"Y<3Iygg?y_3x׉ckR)XF6o;k?-,-}̐N ˑaI>|ccҭ|= Ş)C峟޴EK`=y'<nsUv\o_y|dUV_L;F+n7l+Z;7yWo${Nܢ,C^Ks#h?P|;ͯSKcb%u|Od_8>ɥ]˳9vq?2\: A iD1FV8uTaH\cX~sӿi/I<'w?lo7>__L?E{k?qT2*E+[eϮ+3G&Z_"5QH2\-/}u^(-/}u^?2\2\-/}u^(-/}u^?2\2\-/}u^(-/}u^܂et6FS@#IEQEjɥE4W26m+g eQGo  ִ!e5v7hyb2ǸK >0Ü@ SgY_skwhLlP`N&Te=khZ6WZFvJh3zeU w-6Qm$kyp`Eۅ!<1uuw-.L[ɕfoW~ TE]7V[H`Bn,whުۀ1`98W#SGQmB]^XK^KF[q;]2Դ =VgRGTqnQYE?yĖhNu ہQTw-3OiW?1<V Ybo翗9ϗXݎ3*i#ޙ<, bٌz /lST'?ȹm#?kPWN;ҷæA& a-4m+w(f+8{̃9!桴 q%V!t@Bq` 3ĿM1\5)Z?qkQA=s%pmBJ3[k /;?۾v3]8"^O{QEQ\ߌ-,Yy{P[vEtJ LGN ܀nX-֧wyzB <+G?ﳄK.-^MQMKWdeK_ r vmsvs4jG[;=Κf-QnX'; zST'?ȹm#?kPWN;ҷ&52ZZ4kbĦqyd!3ܭCh0@bSڡH|e^zP 3ĿM1\5)Z?qkxVh KUX<1g!wnR&L3g+_oll'AyxKߙI?[E\_?5>5$/h hʸF3+s+g%ϝ3ٷq{ToG4cy`JYlu&uZ,hʢsy`'صnxma>*gcc-?vL[eW#:Re.5$DҖĿM1\5)Z=^X`Z <^?۵B=rˎ_{AZI< r0za=xL|CWW/76?n? nμ{׭}s7"ԳGA^So)ӄ}s7"לman+ IsNA¶?z!}zפ@fkx8㜠2$n]U @$g} 5QEszҼOi k{ H Z˸r-Oof?nݻf 8q jZX#nͲM\Z5fI|y÷~޻szfVdpAehu"̥`ds*9 *\(Zȝ?[aմ\>h^Z(Y@j>+ ˶mS`rqҀ_ ?!%oJk7!o _g ]Z}u•ܣguۺ?/[Ϸv߿{xKߙI?[E\_?5>[M +{B{D2LUr,~gWww$ټyaۿo]=3OQ'ҹ(j>f׿)'6ɭ5 FLEJ9. TrA;u⮯j63i73\"G&eF:] ׆hRxI?놷+U ;s]?yyv1mylN:QxA .`> H źJQr3֙{7!oNZ7 i/VF1 gۿ ;o߽^VFxe}ط *{yTܢDzQ擨jovϑsgnAzsY~ ԡ|_"{oF+;pH߷kffm߷񞙪6"xv5 FL]H)X.s)Q]. 5$y0CǪ+/.ÿVթm4R}B-"ҵk7?\fgqᅳ .l|AR@^-JWrW#n𳿵l?? /o߽^T=1oIKZVږib^%,QiՇEX7x EL Z(YC1a9Wgg}Kg~޻szf%&_MoK|E%j\i,1,g))l#*8Wӗ7Gcٳ?󿟽\ȞMBѠ< H źJQr3ֵ8zws?x?c{ xi>$uH5 It 5LU``'+yc P*kZkOE)LB?\ϢW!i5K=U-Z!ou 2G&ڜPc+ucgI.X%w so4q4k epF$9 $t&KKխpRRF#(C) FCБQIq,಺[Hֶpr  RjZn];"F8D@Y$pumY8"X#9^8CYlRx mpNy%3H*$,Hvؤ+ I̗#,mn&tdRD b&RTLHȢzF{+`PI,Չ‚A|-iבZs&X+2CJI 1)$ cFo#&|'P$`&"C *S|5\-ε&''jJo녯ֲ5$DҖ;?oiW?1<V Us#h?P? o!+^҅w3GZ(Zȝ?[ T/  oJV_~eq^%oJk7!oKߙ<yW5Wi_?xŸUUss_*?cy`JYluZ5tkt2q^oKQ_&oKQ_&3_nC߿YWb=mZrҿTo jڟ35XK^Ҧ_s__|%` SWD'?Ǫ+/.ÿVh%_J7M]o&K^Ҧk7?Xlg)șu^>Ҷ]2|EkF"exwJڍwD_m\TKVU5z_alF]B޳{ lc,/nC.ZGERIR`ʸea* vW8̿ C}m]" PuK$d;Nj={Om2A%֝vnR1H p%-;qr6(Z~k=oI=ĮeXM6 &Z=[Z;K%[yx_[̑Xd@q,0PTZy$.5 nŒix@dP܂q,g#Դ녖ce''>dNs:\Q@4.y}deb2 :R `'Iv5I?[E\_?5>ROz?٬]oN}3Dheui0!zᏩ5]:⮯m}k4{H 6NO'jGV}?CWAK6qO-C/wn['x |ٸ`7:}8_?3, Hqp!C;{`qV<5$DҖĿM1\5)Zfk/u/l};A}>_ߚio-Dž#g{#y!-[=VF"؏[V?EuwilO$_0^ێN؎v>VX[l*a0BRk[]?k]Uo*jg,6SM*5;g ԗIlaN9qcGO 4{Ҷ]="}bX0-6@Ci [g}f۟;Ay}>_ߚLZW5{?I~c9;)  .(cqol*ƅ"exwJڍwD_mMZxI>w4j!('xl*.8L6DI;id xdy#Ʃck?P+a\ߌ.V,]^Ig{P[WtADC!I o\(W>¯HΌ! aqcės涿8cڌ$0G2ф>qV^Y|܅9(#jW>"9u b xfa&;C6pep}Ro,n+Z eTG=qE|SLTV6HiJg >nXuYı^,9`΅C#p,'  _3exkI놉-Tw-1h}'_3yO/wq?wn;犚k[nyS;iW?1<V O S"7Fv>+E4,|X3yc+|P$8r7z 9+o!+^҅w3Gn~Ffq,`{)(5BfIw_mƾGۿ|w|xI?놷+]܇2/go~g' (.oDK D\|Ͻԑ?(caD}S?ky{Íݿv9qVuZ5iE'qy8<y}dž<cO~*ĶʲemR˶_wۖknC߿YWb=m[Sq>ߴK}S?ky{1?wn;犣o{;'e:e<g8pɇ o*}@otquV/Wa4.Ro#D%+p=X0%-΅C#p,4?4O{\"exwJډtdSV> ;)6n1ap_lkѺkndž<㯙O~+]2|Ek]_o&%/gTLwL [].Y!z5{fO$g^lێ/+ğTk]?k]\>%_L{<;).<<뀷ML>nySnho5??|w| +Tfk͌4{c@S>: .cho|h.% OqXdPٺRvņ:}9_+j5-_V55k&ve3i'hrS'|dq0H[+$d$}ӴӂG5Zz_alF]B(qeZh;돳ۤ#y w FS5+?VSUn-`۾'H(2w8FK[&LWuAGkό .%L&Br2j)ү,Cݗ̝ c1!%JaVwokhgme:6$DÅ卬hL˪k:7nhxCp9#>^ʌ*d€T_SNc]B]"YEHWh;Q!!1+7w nE޼r:У(;Yh"15/ h:j&}:E%`''$Jo녯ֲ5$DҖ> tۯxzOXKy!VJ#Z,,<^MiVhgpr88Tw-3OiW?1<V Y`+G}_#>X<ٻ󎙩tۦh^#FY!ˌa 9zJg-c`{J'xVt6Mo4Zf*VIBRF1ڡϊ&K_쯳npXugckR+,CiwWPkh#pw08]o #*3tco^ig<yW5Wi#IuO=Bзprʃ=*YH> /,y_wlnyLToG4cy`JYluͤ~M>`4GaPCs] GךUŌ~MǶvC/wn5&''%oJ}z֐Iuky0^- kW#kvo!;5LPr k+#JQG--GUgۿ;w߽N K ; GH.<^.EK}'r+jŸ:OUb[/xoJ ?;G}_#>X<7u۞q5FIcOۦh^{ ;=.1,8$=at?4O{\"exwJڵ4'M&ϧKjH-h6c`Vagqᆼ .l|?y0^-LkW#K@șk^>"ҵk7?\fagoᅼ|A0]Js[ah𳿲???/w߽N=1oIKVMƓȞ"}>Ѡ`<</ +Z5 ; -6GuucLPr kK'>gv6㍻swvR߁w4CjlbS9|\Ԃ?YEo!+^҅w3G6#RgM3[7NVU = /Do _쯴Fy?ҟn `ʶzqր_ ?!%oJk7!o _KOڴHJ s!zaW9]oc?^nϵ"^O .<$g~ێ6yڟROz?s#h?P|;ͯSKcNh!^ѧ}3D6%3%=H)ksWWK;4o$o%R8#,s֗C/wn5&''%oJ}/zC< jhh,6ݬl^/xՠ>BUH]ۘ Zfk܇24{ڧu_W۬c'Axyxs<zf2oe\2c)/㭼} tquV/W/<|aO|33ymۜQR {FW[f |\Ԃ'?YFCKTW_&]׏SIRoiQwh$34[7,H8=/ ZYJmX0 *Z% XLZW53XK´cƐxҗv,C®:sֺ?'X}Os>>O痛P~gſ '-ZOY7EK'>gێ6yڮ/#b[/xoJMrvA<:whӾjlbStKzS=瓬cc'AxyW¿63B2|;mF"exJ֫xfxl|?'SmLVN:Ѭ%aZi{VHJKs!zaW9[}#?x?c{ x$cH4'KfX>Y27m[#pHEf$)$85͈YK%Q\ (?\ݤ=ԖQ6\DF7\*x'W^-ºN O'.5V(Y% aݒ"c3g? 9w>)cP]FWLZ(,E,Rfsx.TzENBrc="P|iw6 \6q^YU~LeP85Gbl9qjF? &:S]]AƗqmIJ]YGsUwfk}6J4"vrSg@)Ǚ[o!+^҅w3GKo4źӵ_k~ n \=mǑvxKGVQM= :]V Ґ6tPS@)_OĿM1\5)Z?qkV]Fdl#sn4ˀыГ"Cƿ&iF -vFdar߻"0s(3>Ҷ /W^gSMֵ+# #`/Mk5֕usoA m\I-yfU9*Sk&Z׏kq!5ރ6Z\O|)WC|PTO^_͕H%4G/w2FpAjg ^$ҥ_s_-뗫a]KO!i&{k`c5lݺm3Y&s[ Tc<^$_|%` SWA5f)f5%cJ-L/86F$:AfU<:Kxtƚy~)k%%ʵ/`ch_&]׏LZz{\iJ`K}\d\FdF6\zVoJ |hr#'Ekmtz_auUӵbWHʤkhϸyyc L-ͼS$D0g` b랻MBݿV4IEV }aggiݬ ASbs鷗]i$2(A# w qNz@a\(RI0s\)鶷\[HUd!oJE7y 2bgy^s|gSUft;0q(brTS8r-RӴǗE?42<>jf35X_}2ݗi,dTcnVE\rFU@$lxP.,A;F1W=;6Ko;Fw$mITr;\jM3N~Ӭj[ixqFs=1q4 JE|aFwpQ2t,Tp@>dZw<;8"6@3ԟM_i~Eͻ'qiR81gc^i>Ew\Ddq2 $XQW7 -Lj5-A ]GnGdZw<;8"6@3-4 JE|aFwpQ2t,TpVëɽ5n4+#4s bؖдkzUK2V'aDU14%\a"!]+؛wx]Đ}PؿhWMH=3Z5DфkChu"q?CN@χbtM)Vo( A@p}:eOssktB|f)#$lxP.,A;F1W=;V5\Jє[u3ABk!GտⷲC{VIʓ+P eaxz-;ĝ7cd3ɂpէgyoӌ#ld8I٥V+G[\ۺwe#c6y:5xrHƕGk5Bb t̑` mw<_a>jޱQ\gRvn n8fHV 4٢V3G\Y[[wf'c9zw˛wx]Đ}PؿhWMH=3W;x&10;som=SOg Js<]>Y8oX4+x{L#jOPFSCtմ(!uQA,7db9?,(V Šti>P&{.{R{r`\P݂ri czM%v|.ɗ#3޺N+yWҴvQP(!yn%,BoUAQ^o/60صmzolLLgPq @qL|> xz}_UL-n"D+p&h"ndbYW, Ey54b}84YZ,ש{k+(et̬A'vP6p4'g>4[ sal*ҙdc;ۆ<!`D˪ 1QEQEQEQEQEQEQEQEW/[Oi3QA>4G޷/!RlstP?6^j/{ ]OD.Q|0`YԒA t jZ7R{F,nŌ 0:j(_Zy}?|33cn;9WSJ-ĉ:ۼZ5H7HP~RTrqEy~S#m3$˱IbYUv)\pp@jg]'ϏFմN;OpjV9IXcd& j0G+PÞ/5O$ojVX"ىR'5>H,,/dxWɒg\0B*2}rk$z|)Z]ŝ̎# F[&|L7< ᩼%;m&{tw˄ر29E$,y$(_\ klB;v0pG9#>Ե _ҤOFCLVBJ +mVG*sQErwxTBśa.eP$,K0o ~_y?i=6wlT+!UV 9#]W?*0ޡEqqhC:\:m6 BSnB =g$<5iKwĂ٭ C{xmgqFwP'O j^T}GXC*/UnTOlq( ( ( ( ( ( t\vHIq)c%΍21%+ֵ?0|X⌶K"ƛ $@ȩ*_IoLjes4@) 69XZ+Tލ-7cҞ$|+2*8E!ܭsZkkƨcK$R^ɧb2bi(x@e m@^p֯5R[K+Y c;d>,ceϮjRjQ[iv3Ph9h*FA@l"2[.˃pPX9i iiw1i+iPۀg~ t{"^9JvQ˴BXL_ë|7w!{tdoDۡBF"ʪp!; ߇4=߷G$Z#gotJVQ4l-׷[Kgr{HY8*ʩ4Wcą#Q7ͣZh]֟f[D&TW^3ד^o&XɡGwWeIvHed ox1 #H4OG[Z@_B[FEn-ǿ\0|V֭nь Y:Fl"ڬ m$*{'T]Xv*VUta8,e*Wͺ ''9 s?wC4@ SCt?Mx?M4}M7%Q?wC4@ SCt?Mx?M4}M7%Q?wC4@ SCt?Mx?M4}M7%Q?wC4@ SCt?Mx?M4}M7%Q?wC4@ SCt?Mx?M4}M7%Q?wC4@ SCt?Mx?M4}M7%Q?wC4@ SCt?Mx?M4}M7%Q?wC4@ SCt?Mx?M4}M7%Q?wC4@ SCt?Mx?M4}M7%Q?wC4@ SCt?Mx?M4}M7%Q?wC4@ SCt?Mx?M4}M7%Q?wC4@ SCt?Mx?M4}M7%Q?wC4@ SCt?MpagxvvZZ}`FX ŽI'~0i*KO5 {7,–b8^:Wv_3ؽ] GWkiV7Mtf^83W6[0D#5 `+̼+/\Xk{=1T~GLs %9'VlrBH퓏SX/QbJ(ja4[mE76sH< i i3HHF@hG2ʲ`0ANV$[%#"c(N̑::VzjO3}x8le7!ܘlsx6PԵ+{K\=LH$ٶpYFqmɩiqךޥ5I#`SyImraǴm*?j) %XD2Bc}U\ G{O//oX^TRIgOCY({} ſw*ї5#BJuv;,HR: }3N˵!7'Z|iU֭p%фY"Ho̲ 2;n ߃kcE=gV6 ; z a51; z a51; z a51; z a51; z a51; z a51; z a51; z a51; z a51; z a51; z a51; z a51; z a⫀{=O#KMDlZppAzyF#/$"g7uD^y6~_-{qGOQ^[qo,sA*H2AG9 _5cW8q(VòGRLhkK-tih8(, \V^ͦ(m-=K)=7pTm

&51ס* >&51ס* >&51ס* >&51ס* >&51ס* >&51ס* >&51ס* >&51ס* >&51ס* >&51ס* >&51ס* >&51ס* /#?x'LHc Y}x]'~C?Upgwp]}ɠHX#"g{°Yɾō7eLwt>m[#pHEf$)$85^t}zcaXkHsg=Ezluoż9#`FApA^ĕUִ^٭Nhc`n3ei\l$`^Ҹ?G tNufn"E _i>6o,d [ ~ Haī(1AFrC|b&h1I.<ռf=R,i$NUd%*0`KWɡkV2hQ:_ƫt4R]Y!pC^2 jBy};27FdV-еrۿq9J`w]pv*VUta8,e*Wͺ ''9 s?wC4@M7%Q?wC4@M7%Q?wC4@M7%Q?wC4@M7%Q?wC4@M7%Q?wC4@M7%Q?wC4@M7%Q?wC4@M7%Q?wC4@M7%Q?wC4@M7%Q?wC4@M7%Q?wC4@M7%Q?wC4@yF#/$~0i*KO5 {7,–b8^:Wv_3zxwU5XzM,lϵٽ*c\#9oIG +69!I$ ǩqǗ%p!bZ*6oAH$GU}'+1GahZaFf O-ffށ\e6%X8ΣWQ_xVɵY(e.V6f勖Z֧#KQIdXs`w:H VqV Y7 TL@7jjl:ZL .$9ã2 FEG`02,mdFWr6 @<n_Lk{=69/FUlCldrf`giE!bgW` @_<5eMۛIb>Nn /#yy/˔9<}iQQH'I.!*1܏?#~y}crҤ_}7N7c<zχGkn-VQH eTU˫IbBXXu~]I )<:kO k. }2Cev pNC^,? ѷuP? ߃kcG'~C?UtP? ߃kcG'~C?UtP? ߃kcG'~C?UtP? ߃kcG'~C?UtP? ߃kcG'~C?UtP? ߃kcG'~C?UtP? ߃kcG'~C?UtP? ߃kcG'~C?UtP? ߃kcG'~C?UtP? ߃kcG'~C?UtP? ߃kcG'~C?UtP? ߃kcG'~C?UtP? ߃kc\~'v_Gh$#bpÃ+5O_%we=+'mVαpo2:z'+yc P8dE\DXnLG. A@ `JrBѴKwZٶIȑb)%,P2Ȉ7 n8NՎ4yqovvh(RT0`0h_D jVedO6n3[ 9n^ %Mqtsy>`RF }/]wX&[_#%dyo2@Ra9 srhpZzuq TdVH\<׌B1tL~ ѭ y%-u`8;d\{k񦱦i"XuEuus2170 哴qj03Y.X ,@84YWYфL.I_6h 윜p1aAUa«ZKLDŵe,݂@e$v=ksס* >&51ס* >&51ס* >&51ס* >&51ס* >&51ס* >&51ס* >&51ס* >&51ס* >&51ס* >&51ס* >&51ס* >&51ס* /#?x'LHc Y}x]'~C?Upgwp]}ɠHX#"g{°Yɾō7eLwt>m[#pHEf$)$85^t}zcaXkHsg=Ezluoż9#`FApA^ĔQEs+?Yӯ4mM{|nAJ| <Z{Gk47vB03+* d2@Gyh&5Do" *rW@y,}Wa{]'ɉc`C(KqUΑ %6ڱIʢ]Iݏ4*0JnSmj3hUͿkw\IXw`8$31tGd(%R@#<=dfmWtp&BDh!*vy5/[\XjS6kJR>Mӻ0MLu/6g{cK5F# @xP$=gV6 m|U ֬qYsTuNAvNNr8s~0i*: +?;oJ~0i*: +?;oJ~0i*: +?;oJ~0i*: +?;oJ~0i*: +?;oJ~0i*: +?;oJ~0i*: +?;oJ~0i*: +?;oJ~0i*: +?;oJ~0i*: +ǟ-S¯ s+ 3R4e dqֺ j7_xzk;2EM20c:cZJ&b; O]O+[U"ߌg2:zc wxJ;!9 8Prp?p*Xz7lo4R-q@4˓"Gʌ6@cr@8CXUx,4+s7NǦ::΍c[w Fp}My#/$ th:e$evUwϠq?o{} č01G׎e7#^^6?z ywa%^}ck?3voq6ʘ9}62ķG$B͎HRI=qk_8IEW8²AMi>}g3 %Q"@ RgFSaK]Lƶjd]P,pI7̑dJ&l#Jg/ܢA1;in4̉Sq,![ Ip- {ki7ZVV4.m\Jx2R >`;F7Ig5+kڥզo EV7 ?\+%ڸij\{\HS# E*eo A VG  HB(q|iU֭p%фY"Ho̲ 2;n ߃kcE=gV6 ; z a51; z a51; z a51; z a51>#-0Y[{m̱+4nneOP+WÞ-ww_YMhHw|!p݇Xۮ;UsQiWNC^?; z a⪿UyjuqM)3]co|ұViu{-<0L2:UFIG-; z a51O&SX^[fNIAXPw_S؛ºxYll<?/w =q#Mxn⸷9$l]H #/k_8QEs+7(?6hnna2gVU'q@$dج}{Pm2֣vmi2$XIK "+0@0Α %6ڱIʢ]Iݏ4*0JnSӵףӴy4Y. w;4 .Wcl0}KWVkuy{ fK}9ʂUʼσ>V>Ǽgwy6{vg?6 xRIoK_2WLڕanلm f{iF՞eFFiFݞ^||lQ@gۤ2ZI WfgWmY\Q(唄@A nQEe Q?"4o;1d0f@.I*1@elV-;[%QpzW0xWH8#H@@q'#[Y6&(!96V!c )'y_#wԬ٥V+G[\ۺwe#c6y:|J+&t#HB*d&H&PYS!Lc''KͬWW5kxBBt* '>?Y/Q5r{BNzNlZu|1@c{g):F çq^bkExVe~lo.74"$vt5_E.w,7^Fd#Z}M" WPæ8ݜjA Q?"4o;1-Jd!) f~R˟HKͬWW5kxBBt* '>; [ƯoP+y.EW^c$qr2Ff?x (?&{;t1yK9I޿0+`Iχc)5{󽴖7O.B]P+MQ.%h_ޭAIQo Xn:Ԫױir]Li y ,zu\ʽœI cfn3,2d85]6kGC az'%MaxE<~Ru}O_tmc"tYt&KYJX2 @;( ( ( ( ( 'R|,Pt~}yhJP,Tl3O;?`Pip '25KJ R W'OOi3kNۤך16P;`_8!y#zV=%#t"0N|j< O#_>??wb3vzb5>NJB3``޳x7JûEG=] #pkSVF.䷑!2Hʐd!gv8Ok#WOt"Kbw|# 6q~ލq\\lHQd/R23T 6&x]y47HiХڀ剐&0ܬid BQErHO(4|)q5PO-B2rvq>\lnt>=pCҚG1\ɍq稠 O lw]FUژbR(*4]7NjA:dn^y\2*[?j:JCic|!W}|gWQEQEQEQEWOE][ vn%KF1H#V@͆L";@Ho׮,-/%O01W(H 8At <'?Ct???gF"&\FAgI![n֏ pOë;?jז~o V ąe#!HwZ5omtۇV溽#a(?vF>cbYAʋ?zs֬QEQEQEQEQEQEQEQEQEQEko-ıH^I$`I$椮Od7N<ϲ\$3gi8_CZǭn<_t>Oҥ丑кcCD*<ú.݄&b֣g7 D "(w9 +@gnݥNΑT zԕ&ο m.SXZF([E^9 J_ FZжڔ[X([#$`݉s!2)vW3,aUc/u[vR@_7?(MZ:TͯKvlFF@9f`(((((((((((((((ym"h%BG"WR0A%Cuo-QRHPF Ab|'?~ҭ (̍6*p2( o h6v[lH#*P0C@G}=G}? w^_J9b2plQ@> ŇS^]v#e4V*Pƭ!TfE23 4 G<*ǙKt~38kB((((((PK015u{rr-Pictures/100000000000012F0000010AD4ACB786.jpgJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 /" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( +Ɠk_[$3Ŧ\rFYDG k}W>7,;H5nZYS* ;"ٷQ {] =6[q5+d2wSxU-XGmoZ6i1ZjbjrIz"쌥Vv;+ Ǝ$.Li#Vo>L{Ɲuo xsV(1f`2#X>b(/6񕽮aZ {ayF(mH|O9 HS>xhhak?-a xgR\ F1W/ |! SI[IγB$3¶&pbq5Yi\WϽ"wRKnq(~dϨLu)--e2H=OnxBWVj]>1,^1^$R9$m@-GQXpx_Ʒ(;(ﭝdf3DY !Vcq`}@>$\jXhE}š!!(nLqppU{ .4i-~u$H[O)pr2:Eմ:%((5ۇ59/sWxt/oO;L0gg„dو!JP>\3d$.[;FM*-2ŮS0ܾp[28zV;U>\5Gѱ{XxU_ nS]5zHQLSX+@oΒ:&@GyqW&<*Xî2G.6'U:@dQsՎmiڅ{xeͺ, '' 64j7B/-ѺFRJ 8~כ"V:l`林ody{AmJ}?RM[),<P&p. )p{MJ z[m/Rm%֞lC,8c®0lPx6OVc@0+k~5o}ZEsdL7mH3VaAU|A%#v6'G1܋u5 fM4lkͩI :` 1vN\T\iƥ: >&g?oE0}M7%Q?wC4G&HBRkRW$2-?lEl}s7"Ӕ\_,?;oJ~0i*xZfZ>h9j@>&?;oJ0xZfZ>&?;oJ0xZfZ>&?;oJ0xZfZ>&?;oJ0xZfZ>&?;oJ0xZfZ>&?;oJ0xZfZ>&?;oJ0xZfZ>&?;oJ0xZfZ>&r2ķG$B͎HRI=qk0 35MqqP7. 3>$(?\ݤ=ԖQ6\DF7\*x'^S Y1#`2(Լ[tRO\kQK@#$Df~s+,G z^wE   q:[G1I@ŘHp+tˈ.ItXUY  T{n8jG+QMw@^{:Pc:caZ ĀI0I*|Pvg\,Nn.#L秨i:mW}3n-c8UY!"0@@yҫ^%tk56v@DrF@b2ϱ[د?u|5tXy+ Sؚ%gk5$Y0i7S!ćHʞ:טjw} #Z|y2_7r6:0<,ޙ;;;iVQuc7'# ?iη-/}u^?2\ס*NC^?2\-/}u^?; z a51-/}u^|m-ԑS.M֛qn-E9k51W%uӮ]IX/nHRN2@ϸŏ kxYLWy6{~a=09ϔ|gt5eϮ+3\wuD^y6~_-{qGOQZ]oد~_=f[y^wc5*.Ud(meϮ+3G&Z_"4w?Q ߃kc\&Z_"4eϮ+3G'~C?U?0TeϮ+3G&Z_"4w?Q ߃kc@&Z_"4eϮ+3G'~C?U?0TeϮ+3G&Z_"4w?Q ߃kc@&Z_"4eϮ+3G'~C?U?0TeϮ+3G&Z_"4w?Q ߃kc@&Z_"4eϮ+3G'~C?U?0TeϮ+3G&Z_"4w?Q ߃kc@&Z_"5so$ "Q$lX؀Gz51'+yc PmK$r\M [ BFBWsm iv=v_mSj@DK)l8XlXK%V,ݍ[(uŤ2;LѤxpRTS|uSy1.,}o"pfؐv~ t{"^9JvQ˴BZfn5MMP"uj\Xqhe4^I]ZVAokOo&0dvV8'^~gy*I=r;b@2d? 𣺯?W?'T]G SCt?MItW?'T]G SCt?MtGU %oA<B|mFiz&c;jeK[T { XObπk׿CS^kܥmWB?Ucg%ٗ7t}$a7ƮXOzwݬ4PHA*uW?'T][A VG  HB(q(_r^_ik7<4\X2HX?[]=gN7[ȲHa7\(',8 Wv>G.X! Hu=XMgxzew ҭ.g7\FT\~me|=hH|56$ʂ5dw7A,Bæc-KH`6ͼ7hb lÖ!ʮi?+7&?;oJ7Ksz_hzS~{y'vu\\.>pxYڦB0orYpF3;xl?c0ixWFW[=d9{uӾq:>?;6i>fwgvyy°Yɾō7eLwt<'gۿ%ǝ/^;wgn]_GDz!_k=ֹ=\7˿hxM+Sw GI2y=sůڴk7zNdDkˆ4Rh=1'&7KszCt?{{Ǩ?;oJ~0i*Ct?{{Ǩ7Ksz >&7KszCt?{{Ǩ?;oJ~0i*8+Vᗊ C!Hΰd9f$$޷$sg,'PyNz{aAUn@&[xH SHK1 אzeS\*znsYdapF1{8#jW>"9u b xfa&;C6pep}Ro,n+Z eTG=p ,xkO37ݬUǜvz< #M_O& :˷̛q$dsFx5[n?l5ƾqCp뱛=a }V/:xRiRKqIiCg<i(Or{yOt'dsbFG9`GZW&q_i)wnTJy{ R|dG`z7Ķlc91\aMOFë!c jU$`sFK'KP-4knb I )|q瑐9Gk|uz2u1ZJy|tsZXxm]c*/,XRxNzשx}zWnm*žqV98-q-߉WO|3Osh9hg?oESsYE&k(g?oE0HuO5eCЙ/H PD˪>@b#=3+zmb_i?66o|^=Z;Lv8724 Q+$XfBNFGN u':5MkyR?LwQSTZKtۘ?гj%Vcp-orNcIy`3=X&SF2n-SJQӒSi|݊MJ_jZZ[Od-nZu+rYBs;y$z,aiSڍJdrD6r2+uq]4%]4Ly_09\x阴͠SPúō4p=͋u31Wg{q+Jǟȉ'K C[&8( Ulr A\%Hok.X"(+9Pڬq#Mo ;fBNFGN Bism+KI[HJ:ƥ[MX#sHBɀRWHx-C_X%-o0NW? r͵ 2iEjiKh//>nbp%+c|aO8HԢ;CoiAuI cg!O9q?^Y/Y7\e"u<bM ">N:eZp\C;M\dZ4`3CXExi$Q3ڋ `8ݼm]e|Ǫy>x]n^xeʞgp| 4R3MM7peT)y;90kXSMڵ?nx2z𣺯?B-?ǚ ;Ɠˑ38D^Î(}Z5Rtxr=zT7MGx}c~GCks RM17ped?d 8;xr+#ᶧ>;F'@-m%lV5bq{MJ+FAX 䡷?l+g/Z!ŨxwP-bçq^^6WH멗&M\}p"y5qI"^ÿ?KqZ,=Wg?Cºͮg1_I%8>R6޽q9ؼl?O8v?3v~^O{r/DmYW}+k9{lcEӶqz: Iݵ0 ێZ4`3Fo;ZW*?޲uL$)[6v M TOj a"i$^{˴$~tp/>OCUSNĝ gV-|ioe}n +(! VO"V)wfbOL?E{j9uF$-f$.MAf`2bXr@ ºwZeq >:E[;:FtK̪@be=jOL?E{iP_JUio0е[m#?kۄ\DXz/5sAI&Z_"4eϮ+3]"n~xtH<` bzYq+6w'd<];gg]GI׋}u^"DmST W\C; qp%F9+eeyHR3gbA,}$ W!:7K(U>fZYD]2ݳERG=qU}9Ԍk 4ۇ-5?zSw`s`Ky%SU(sZ?DMf-?Z;ƚA6@X8һ&[xA I:#d`*>;w#7%'sFa QEsgJjA=ŴuwY ՔS0@#BZn];"F8D@Y$pǼVwokhgme:6$DÅ卬i5? j7ZnPlm`;j{[0]'" ,@2!.2*7FQO4Im=p?tG2d.@+x;K/cCi1YrF㝻jxkAnT4,V+88'棱NGkkyLP NH-1,LDTRjZpM#R\dV7PO=q>wl,c Hnlucy5n~ꚤ&.-57oj(emyjQY='uCy sZƁg/QI#9cWZHsr灷c>ij:.$D]2w[vϛe$s8*W*_=QL7- n`FXŽI'R񷆴?qmi-mR&+[Tq+~!Evmwmb<ǯsN^6,jN"R\};x5~fxS 𮅣~+&]K/sn+H> /o,y~_ݛzm+Z+~-~U߲_ms:8MsbI|{3;c<?tr6g( G<ꯓ YܞaӱJq?^lSY^IgiK㵍 <Qk𭶋>DR^ KXkyWQЩ ֏Zi sglyw%^玝+,g=E&ԌgŖ?g)xp80(]Ki:nT/]2;VU sXwzg&ZAik#N(dִ5_h\Ivekw-gʹlzg=aYE?m/;ƞ~ s@yw%^玝+ 4?C'T]X߆,?C rAmnyksrsw0CkG a#5 yV8t;M>noĖ3na[o^( #:)Fv O8嘒ܒOz޿ѭti?fO7Mq-q5o^+T;>?A|=Y|Mqhm멢,V+%, I85m7_ /oqsA)HPgA8o{@u_Oq6 ź畍\g hVᗅs Ic38e ڪ /Ti:nVK,`m2;XV%- aXxkAU}R}MPXqv҆Y6g#<`VZdWX-tm2ɺFb3,U}EԄk5++5?tr6֔? MfSּ3giݬxĈش#*x8 » +{x$qơU 8pZ͔ZYt'ɂw-.0ӥwB@BE2HY,}$ 0(+^.LIu]y i.b"±\ Kgiq(V6Zh[Rhq+1YV5y#*!BwͼɴxRԓJs%ęgTDŽbȥJ@( Դ[ϸ&qcv,M m*"yc9F^_\, Դk)9?1"sq:R(5nKM` Z{Ųy <o-#m^g<>nv*<]^K'TOjP-56Gnb I6W-|sg8=>>L&=jY0,6]uI Դɩ&<0<#i(Orǚ e#O.'!tżǀNA/ǚ^{"g wͼ'NKڦB0orYpF3;xZ?Ň_§A]:zٵ7e$ eq67s1}_'m^۳vysWGXu|WdX]nq;r:cse瓳σOi/vv睻7w[/8#Vua:oǕu|9:U[jZz L);vR~o2'9q`T:^+ѿncy_=c=s ^@^A%֞of@1;y)iI4;˥RLp## Pk,WޠLa-Ĭs-c'43xG o$qeo"Uo:F{dgWGGE..g̴*nx*9'9=sީ,-*_ OjP"՛I,\Eq͞N-|/7HګxLYܞ/=95EA$g<0<#{?%䚏x :xLw9ʆRx^zW2f`𝼶 {UL8@;cEUt{*/~jS@[Fo^X²xRr(;uP~s.$9q&uT6}Ҭw} o32>lof{wm1߮s.ch~x'I,C9 =:OuK~{ix8N87"eeⅸ9'X55G]) Wg귑| -MM~ڒ[2MJ<3j^=$kO,rWxr5uM9ԌSM/OK})nٻ<}kkxYLWy6{~a=09ϔ|gt5}/''%mdszc\AfW^ho7}{l5wN*zS u'vÃk\.>n9hр{WGjpj:;E-Im>mdU$skSYZ_AhԦū/RKqYiCg<{?\Ki^xluWe^:GO^+_4R3dޚmŖ|~P98ŗiI4_"g9"ǯa^Y<'q-ޣ沞FS0NPbrQy=}x^Uោ0ї%= )|q瑐9Q;ص GPꩁ< YQaӸJu9ONHu!8m7pegYc1u|uo]t1ZJy18\8;n6y9B:Fe5N +Z,ݺ6|ZKpm+OQXwױju N< iQaӸJj"WԴ%ݔ˕yLpyɨX|A>ͣ_j[dxķxϛ"ul9f"Hi돱܎DPO=3&k|A>nc>R6޽q֯]RFᗊ%xd HT<)H#К޿nqFvi~7-s*G1qs22D$ !D0y*>;kI4WZmOmkyv8Q\b VU4VԵ:1KuP~o2T9=10-h~x^TIeC9 =HkzVh.!ԝSGM\}rѣxm2|2$)݄qx >{UO~*3v+uq]4%]4Ly_09\xi[Ⱦx ҡK;5G5 U I˟LZ">ӟ?R߿g9^[CJXPa#G<*m)M}V<,߉ImAMvwlە;[>k>.͜ZS{_@nFT]cqiiޠ@wOs5WA5s mgzΣ_L:Tmnx~x{1I$ͦQP 4% 9]/|Suuqi$Kʖ22)#zױ?n4*xnmB`7Y꬧Wy-uFTmfXJ% ^/ڬڕ$+;>xÒSwV2fΟ ?7 ֽ Ŗ7u 8˫>Sp`'GZإ"\Zm[/tiMV[E%nQ܁ޒ~O ]A&d!k2tXˑp?jw-f!Kx'h-ơA ~dYLF0E#}Xj=qSm{e4֞gՌQ Iim#r1ֺ]{:h%OnYe\-Woa 7u4 ]VkTX`FY 5 ̱2@~mQSYb6RAec$f^ q'o*,dPߐ W\A}~g=xā6Tn^i([-WE8?ŹuO'n1Wlr$?ﴟhxs}R6-YL/رژ'`T?Z޻otYżce yP*Hn'xkk8 t%MR7,a9Uo#zyM,㵞?0o1 &pcjZ!A<s IWq*}̪Ns@ @u OI_+N(E-,Y~l]uQ|Cgic^%loUE̓ TF FݍIo>;l6Đdb%ݸpNqUjw.ugKwmMŧ2BEۙ\I:]Ng)mILY0rEhxBoq#ټ' 7 UmA seg+ 3 M<^]D[)Dub\x~IZ/'}ٽ]9@;c U歨Omq~XFd"p0H$rXjxkK[mdRɈildr"B>@Q@z 2;ψ yIw=ܺcʲMp]MlҖD1\q砭$]bI%෌N"#4FU Ps;+#MxFӮ|ko,kImfm1-#xيm.աoލOYG ^L=)pUdgxټcMCZx@{IB -ٴǒ>n}xMjM.݆K.HuS'ٸ6ߛi5s~|OZhfGxJ2yn|+&ﴪѩݐjj^ռGx]YKT- XYGp2uj,uh"ԿT/$k2 K0 ,@ H=zϨAhM\JDHI/f#b#5+ V[Y]In'i#Wczj2Oj|DGK6 #bfB*)~P˹)2[V6%㸺1GK0,0Rq]] qKa",/eR\xe]7Q}? iu4Mk;M$:#>IQ{+k{KK>׏hnG>Z.cHKh7k:dv *%FRϗ<;9"4/m3Dԯtt5VL:e:L)&rG!*A)m(EƩ$~}ǚLl4MH% yr0zoKY7<jJ!T" XϘO7FF4\EoKsesq4s,n~i4mRR,haA lyc% '- I8V\`}WQҭ#_0"v} >B[;Ldu|9 M[]h%IE0 A2D#p ?Z^j 8-tDlayB6G.թG Y:yIM֓ ፼` r7}ˉ-kE!՟d^c 9<Ҁ9>wa!KOL |YTy~1ֶw.,`o/7Q"nRU'n54k_c}q _$T|pzcPpi6Mbꏧcuw/]0r,x*¶k}2KX] Z4%3gFXaS@%ե}%a6FrܴWnWd_*"6اn7;?  $x+ofA[ɵRYHj(Ԯ-Ώ-KQo-ʗB$G\sAԢ9+oC_K]^Mw Jn ÷|a5]`!y9%OK :>y>wѷWf3jf>$:vS==eJapw5jZp4!ZX00X|o2¨&b8˜Ąum1k8.KgY?*AT 8](?LXֱ<^=g9=1ս嵺InFWNff值(o qe>u/)Ti@' )N7n|t~4jwvlf۫b)`viQb(῵D80dl?z(((((((((+@Oagƻrj7:6lrUl-|<Q^wZ+2Jsi"% SΐW Lly/UӾ'.u$j}kĴ r^9@2sv=7ƺ_TdӛN.xVRt¸Rcc!x5^_V} ѴCP%ťq 6">pӸ8PLƓCoG4Oݺ#h q O( ⿇KX/ 8c8`X vWxQP_#L3HJ4H$BI#CɆA0(6/uv66}]yđ0X07.rN w2ӴX ݕ][-&3L !PH W.Z־V odrEv|;%.HqEekRY𮑪\,k=7,` N2}MjPEPEPEPEPEPEPEPEPEPEPEPEPQ6R E 3crĒ{MIEcOv>?[4y6Q}lTd Xд{8 ]*Wf#F2' 0bHօϿt*KOecvYhY[! ~ Nwe J7m`]c!vƪj$P}օiiךUŌ|ihڻT @ARiN[X]bR$(8gU(=-K;94s [I$6@9<(B[8V) XR ȁq@$t8( vNeomoiA(UV!(’#v:EVUqgD# !R*J:VCkoQH8Ppb((((PK01dada-Pictures/100000000000012F0000010ADA0CC5EE.jpgJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 /" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( (O^.мAMѣԮS̼:# lON(8~&B:\i41v/4# _OR0tƍb嶽gyYhVKp.m^=!PPYEy46Vh^]CLax2Fs\ީMkAHWTXgv8 АEGukYx{C-/o4x;G9u݈pHiE(Ķ,#զkV{P[{>$…U'8(߈AG5;܄̠1C|ܑqW>?{TԆo:ʲYmHbEaͬjWm߇tMB}T1nİbz m9\}6P=J5d K0T |+(;2f_;[1QY0 HC[w!ռ5ZK#XV@4řȍb>hxVh4y%p! a>P"G5PEqw^6Śׇ="Iic~]؉| ( 1P xĻm#-zlv6kQ,W{er$['{4EWđO$ n? Ɓ|C[Ɵ!KR a8"2^T `} V[ۅl@Cz;| wA%կbP`F?@-ƗSY]Y$`j5ܲ[$P#Rf^IgW]7ǿ<ӮqLV6eg.ǎo.+mVvv|>f ES܋ZփC[ƫo_&9q,+$F&\2ܻ8 xw^|Y{P:l/WaeBTn!B'o9Xs|8?O"O˅ ^רQ@whĶQl텖JX `ŷ(u =O Kox]"?I~UQ@g ^Kա=׊$ ݫ5/9]NF^X<[kam+2L+I eF"- Cm#`9nßHK[!Xɷhl z( ( ( ( alfK.+۵/&PPLJb8 p@n6tOR-4u$iO,6 "p umr|/k-zYp݉A>`'H]p0ɣl6]˯ 3&X慿BgeOl+)gT=: m6#NgAoU*м/N Wvy~/wnco4zs,7M.K-m E6JDHʁK3n`-V]dh.!7$csϋ4I0%$;@,ҡ]"B]¨IܠN={R7:Z7oo ñ%VFTl16x: CE=gV6 h9hg?oEh9hg?oEh9hg?oEh9hg?oEh9hg?oEh9hg?oEh9hg?oEh9hg?oEh9jxFѯKFh,丑c%,U6gWY\xW_)=qh,zĥ f zxZfZ_OK`*Ji60xZfZ(sl?ȴ}s7"AEsl?ȴ}s7"AEsl?ȵkrȑuV 1%QEV>]w` N7) \$EKbӝ9jZX#nͲMjIƞז0}$8eh0$k/yӤ>$<5uaZΦdn(__8׍5o >"ӒwBM2X]FiO6(\ o)@pzƤڕ܏c ֯խ+3[GѾ,4GR= CC{tKI$ \JM+*0T!T =GWriq%h x Xe{#fpYv, JMJ+um.}2]\ s1 vPXۺ+W'Z.Ιd(Pm$϶xZfZ(0xZfZ(0xZfZ(0xZfZ(0xZfZ?IriA7 V+3;ʸe@ǩ> ڥ2} y{KwcJ!|11IK---̴ -:ny,ѡ9{~͝w{v;皬Ag'%Ujk*E5fxI뗱x\2[h+$NA5a~k#Ox~-7LO5kYDk˴Is7#7džR=AAai:lW0xYg{Kr$ȍG-;\+hTS2Ҋu;jR-R-Bys?Zf_EzյޠK@ooxݏQҚycM_@5rKAO92wH(T55͎t1|a.ln[F*bVX c'4 cȸv0Yn >1[i`|- FH (*_0{=U<4\܁< PǮ/'Ut3 .i'j! VO"_Aѿm)C :[MѼuj _"u2ĥCXqkxn⸷9$l]H #=W6Һ:4'QE\:XKfp n#ɔT2C =%W,伿`Hzeg%|#Ee$qlڤ\Zme2&r̼z:Pߍ7WK/DKǐ\ݬ6R+3*˴`/jW۬eޠ˜Z%`0~c: qqgkybr-[)48f# hPk#Zzv,%ܠKu?H$ qHuO5eNRFWKЭ.$X,U gV=Q>]\Gn"AY"IXt I6I Bf"HuO5e}gYywx4r@c ~5<+uqtiGw3; IG Bf"HuO5eQ@$: ?!?L?$WAEs&k(T3\_]:Li"hn~a廌s3WQ^mRcgx{g͑:z(w ѷ5o_5cW/>тse=}`tŬ^ j'UEoKPC2nmSJș_\c?/#8=2F/xdSfB~SӂG5/]a/O 3iʲ-W% ,ҩk $_ KS/OwggEM`klŠ7#:ח2loǝn9H#К*FWG[a (V]K^-dY$VhʮAֵYe wgIe1GF0$sNl$L-}kvX~ѴIk 9+|)}DZ~fkGIdjAvxtK2Λ[8eTn(}Dnl"7NԾ9's,q[f{|szJ]f=2Hγo{fMmi.m\L);e=o1bf#>b89=skw Ε4{k 1#2>ۈ nҀ<:5_6/}ڏ9>F# [<ǚXFkzDI4;v:|p## Pk_3y#a[/(;3 R_xyMƳ rRn:GON+l#i"$H;EYc Y >aאG5Jbc+exOz?ΉGrQ6"e!&VGuQqouhC+q,曁&އT`]Ư4o ^/)4%FxYɭᎯF ]i>0?lw$ǖb .?*5O/>%µl^51!U_pЭ+/6U-ȍ<+m5/xRHIdswgi&<mqAG}KŞ+ռa|>ZYG0;l1B-?g\Qov(}W[[S+NPsZ0bV͹G1zgLO]:zٵ7e$ eq67s1/*Fտׯ׍u^W`'^{"Gk"Ӏ:zZ ү/RjaLV۲[98sKP[CW*?ތG=;LKi't(g"_dtѯ0'ڭm}{ ԢbQxY=}8~na[*&G_W5z~LKi't(g"_du~ е SŚe,QfU~Qp:rI&?oZ?<R?KA>SG?Z 65}˵;3ێ>w54@ͽܩYOM>/SVG4-FWf:&rYp"o}>/ST;y_]覯 YoMآISe)d&ndu gxFӭ'ڭkxB>o![ӊ+l4 ºwFlO[w^ogW.<V^zr_^j^X²xRr(;uP~s.$9q4uO²?ğ_HR ܩyn R6w'NACuaKN}oү _/gTi=c! VO"_Aѿm)C :)uo42ڬLy)9L9랮xy v2z.? Ѷ=Š(i)L0md$VSw_O KZ]Ihuo%J$jM.Sxe1rzM{ceciiwweQDx.m  g{8t4{yU8H=[4[u_ BT ƽ}kdRfIϖ$ /'?̃wF쯷o3vq5vx)>{}5ǚ,чE$@ĹEF bw5-'MmT/WBl3kOl̈́zn$/2ȂU\(]8; `w J{uLSD|A1<:S? oxJx6YFTu[^G?(CuG4v$r(eu3 q=nW5[xWUWYcvKvN@|3⣪^VH a-&5aG ⾅蚶Xy]dHvdfci%ٖ83 HuhԾƶȯ<]fq=8<<mo),>k9#c'J>?U侷-NxK,`m2;XV%-܌ aSWB?Ucg%ٗ7tշ/OC-Q` pqfr6wFxv+{ u==$E Ao oLӭ/,x<+/=bV\v:Zƻk  >}fIl)Xn qG8(BQ@4MUKҬl<*%Ec;@2zS֯u-?,/ZPd,/G])\ԵoXV~^LfR3 o '錃QjK֓>:mM>/cePm  56[0D#5 `+ZXjǑoesngZGc6y? kxxd4R,v2:pH&`%QZ*g%vc|3$FeOU(擦):_iI:"L®$Tb#I$R}GG}>3훺8隱Eggkgb[t V'#MhQEa>7zZYAwoofjbPѴ1%<zk>d7N<ϲ\$3gi8_CFojvai,c|eg5K֩ywO"CwZsiC,[j=֏[FVl̐l0ToX97u4[MmK-/W(Z̲lTq+?MsዤG^)#hԻ@" Cg{6 ȴo{̏={F$0 X #ہ+,Cu:[jݍnck d)Px+SMմfݮ4Br%*8%I_>Kxy6K + d1ydzo;`I繺ڛWhCŀ=hH5-6xM[[

zM -&(g-7wh-#M;I.JCmm%Č2#Vm* crFcլ/o5;)"J-u+HnI=ntlȉS K:O oqk;_Zɧۼ6aCMǖR,ȮPH E fa-s~;yީ+0-.MNȴ鮞VxU${Vr#rP\>!.5CG<}A܉)]keU#lI6VkI{x[vsX/D%v(2<, (T8~, ŨYi0iɳ1ao&ݬwm]֍/IIkG˜%]Y[pV$K-5ywOD0dr e#r=yCwv3"GbD`v˫o 5@Q@Q@Q@Q@,gu]Gxca&F"k%Kuk6څݼr^^^30R rBc5'5^ڜ1]Oi$[I(@tTPG _Zkwux/#HԵ/d?vGژܦ0hmu4T͢wݣo[Je])95OSN R=g.#+d > BN.xwxB}Yߧy7'D9>rr7da=m,RApq,R&x+yae_- dnI?0T7iŜStv[\F.Tn% +?QZ&emjCwmEgsoNۙ#!9@񵔺/`ϙ'XH&n#nR煬?xJKTK{a Y@12hRS!|BIRhCǖwwR&ӭsFUV6`",D+I[8 ]t*+ש2Qf`FA_jz5}γHȞT?",Gï!d_4TlZEɰ86H~3״vR[GuQ#%y%CJ0: "E-&8(QT*IX_D1}^9aJ6A,r99ɏ)oPuWOL[%b[j NJՏ Ηt),DpƌG^arCżQsϤjRO0!aI#&OB++'t1KDDl~лxw4 MR<";KɐN7C \]m6}RP[!g)L]lXA9'&J?j^*k;?O&Mj ~+2,«8F2G2Fѫ&'}xyº߂;+x݈P&L5k[N+Ł^Un'0P @ Erp9_Z֥:mqmbmoorL$J Ònbu;mIdsXP0]xyAak1ҵ[rM͗u(W3+y5jȲh[$kab^d[@N5f=VKqojɧ]kj,;>6?$NIq#V8 0!$(,5Nfծ!K[=32|ڧ㯱&i51yWaYL7\Ŷ{ޔcW׺m 'fcY "ȱV@C(  kOz|7|rD7QM}2O"<`ϐ9 ( ( ( ()דi5,vt̪HANIz5NY 3FjQ0 $Xݮ|%ැ#4NPsX;+5jXVe ޝ(RC_ 覀: kXtt"X+FG̒,k.8>*=7_n xu$uBi댁H s ˻ 'Vwsź)pэ38Oj3:^k1KIm6tb6|P!ilY`TR_jc9)O⬿ : MȸӼM7+9.x^Zx~{k#HDr; BJ* u[OQa=QDLr}2y*+BKaŃi[iڛ5FP1HwTee(64FN}ߵ g9Ǖ#|u8~4j~`ynof|kƺuYƓ:Km:mDh@r8G!XTa4 k~a 7ʹBaqpT`q v>DL $/_B_M=#Ky[Ss 4CdtxԧuMN{ٜؿB6P$2&{}3+uc6bnj$u$2~v vyqxVk՚ܼ%32''#h~6=Yռe.>U2V6#Bt؃\ޓY^\XA$WZF%K4vA1U&،0088Sm\x|2 .U?%(#~՝F¾ѹm񭖇}C5;M>\+$Kl_kaG8,xDŽlpOa%ż+NܻvRs~%.K#HZȩ vFf14 #'QEQEQEQE{S]:/6J- {vN9 u\xX?ܿj)&]9hbC6|b{ (/vO,.[u-6y2+cx+q>4VᢸB[-IG+65K9{-'G2dÀY \2nR#9+D,d~jLЙ%$f,d`UJƻrw62@$u-+,r&%v 0?xdsQa&._C6$FW˻3@dܭW53gGݧ%wm`r7둹K 7-FKA#ibLwJceۅ-xk]Z.-.ีp$3[G8#"HĪuem(/XmJK㾸M| PHDz>ڜk<] ۼQb~H/v((((((oIƀ:z}JR9+4\TXȀ+*Mulښ1y&Qq#øn,r3eGZ5i oJ ,Cfnqv%z2Fxňx7\+?}[\1󉍰BA烚c;MN=J[)Io,IJETVXO( 2tk渎HDp291S q.ih:n%ǙWQ m_sxOgO k>q1CH;,v?iWW$g`Y*ʤ+lkQ[ϦnYbӘ@&E UȐ cx\S\mcgv~!TJCd#ě96F6և-t[մOkniHO%U]o94? i;xiO*KvH݌ \\^Ae([{v1* xlQ(hԕ>geQEQEQEQEQEQEQEQEQEQEQEQEQEQErrxtK[+6-V&*E.9 >+,ʣn.-<='η}G ƀ3u:m<BLNXV=|m%=l;FW'R:uDGV4;o'qƏ}ʕ#y>wm~\VQѯ䳞H;fRr QӨ v7>$5Ҵ-Nw$aL 8!J\ä֐3qo$}R̆BB;FwcniyxUs'#HU=8) gZ }c$0Io:Ihr(_#\hx9 2-J8DAs+r1jzڅydzʺΚ{O&b_Nm((((((((P񮃥\[^O٥o"pC^$N1gWˡ *Qie>{gkpnur(\v,=S:j3nGw KtYY #!p>nwϵ1yedGMlx:m;Oumyrq*'IխocmK I~kg.EŪD9f ` &(? G!2(m,w xʜ9'n=2 gU W2k6 ˩m֤KCGJ7 !3q\&ѬYʂ[]n Ap_/ `6t.@|<0` I^_}u].GyWSa.Clb&}ZQԵ[k?_40o ]6 ]EPEPEPEPEPEPEPEPEPEPEPEPEPEPYz߇Q[AѣhEa#ug5EGoop8*( ( ( ( ( ( ( ( (?PK01 content.xml]rHr)`nL4PKݎ w6@4`#~|ž2/Wpf@$&%Ƭ$T2+˪|= #^dQ Գ|z?ݽ?^}?ı[ɜzq~ z >~8 nnmz ]Ovloz8ы.y,($ ߽(^Y>kc2oy6UCX+Y^,Be5e4Iޖ>7gYU/i%$&%\F3pgbi]8֌g5Vp8U; H1w+Ƈc\>+t-UzYױ\EzeҲRG $B9V).=2^.7~@0vh$u9&i'ݿw"|&`MԊˉ㺯z:v rÄ끜Qٍt~}IQ& i8$.JbvMuݟY*yȯJͮ`գ5zesѸƨJkL즌&ǔ6io|T>GE]U@TUe7ŒR@IiL"8vbC~yCZz~}Pe[{(^=WX݋xCqg SЫ c*Qu4bn4cH6T IYT0U~KI:Py%h^90ͣ5{7HE|Ah[,"2ƒ:0.y!>j)վQIlSk)վ>jk~Th}骵TMlյՅSxe:Vf0<ݛU5 uZԾ K8@jW" {WyEhUM#܎ Q5ihqa?{5C_maGf UFy7nzX:2SNL!v}529WI*xڂUYJ=Б-(*؂QO pȓ1 sz9<޴^hYav<cMjVhKD*c9XQE. %\d($^ƒ~(.fhND'eu}b^Z}f^Ol+cߵ[BZ(eTֆ=4yQGGTj]؇r0oZbt#j[S-FkqDm xQŮvC-GjݸZf%|MΛjL#>0wY^4!JJ(zS.}v:~ggNM7H$O['͇|\Z3hn؞(o@*!|vX5Ql,ڨ2RՀ†-j`ƬW\Ǧ)Xjf7Xr) gc&z9;"d(JeG+m2AG?=6_ }T_Qw6kVɘ*qC'? -*6aIK4+japt9 ',7oTf( `/hhvZ43|LGj;JF+ mxqܭÁT 0š\@@ }tu=;1s_xz{xYr/ưtC4Mu6v@fkӌgC@2)-$Ci$ilmɅC:yWA]|(wNyL;0ט':HQd{KcfP C#D^3s"aᇟeF{.~?C`@o T@|wENYyY$^뷁=^ <-h8T#Ώ@׺6!Q@>3/ (E5Ibt9s=g(5_hHf~HĠEB̬@lHIaN?Zw: COdσpF3 6  ^WO\C*NVцE .h=u pl~x~FÅww7;JDd00BtBes]+tK6XqY!jQͻc6EY0s#s?;"~eR&* mһ32Cq\cU~Pƿ1WiR|꣖9@i|I i4—*!.p[8evx@&ToLzj pIB%.0)ubߺ />]?}[8i!M6thvuEty`쀃, oTĚe%sUcNi =H CzXSD#8XgA>|\g<"z?/+M,;[VyQ"xtg%b`t 9=s 6g}, czďHVp)˾}JDG40yJOØ]]P҅]D<.seܑEᆸVfJ(c:A䇏k#3ք۳3eURW4,.1,CQY$rq7E~ />L.]n 3WPbO/4żCnU-W#_b/N0W6˸Mydq<|\/4) lFp|/Sm Y ا6f5"oXZT!޾xrᝅLW4ȾM՜WZ2IIf5;旅O(6![aܴ:Ay('F `|Zxh}S[Lp{vL㸠_=i6wK9mޔ wpI(rI, [8$n*?cpT.~= p4'YTEUcӆ9cⱙI>) ՝z@t78q +/0ٹcl԰SiH Gh*6uI9aȲ$) vSG k4U;Re ?E2Kᛕckaf(bB-= Tݵű[Pp+A!4c42$s8զ%ƳN_fmsߋg܆]ϸ<( 3yJw1v>jh,Վ8S^<@SGldפk|)pU_xVFG\8M(ɣuDI->LPnG7[Snn7o9,uGX/)%-G(J{dF1Q01E]˘ y}}$0v:19exVj7GI`"DY=<)__cQ .kPBh30K k1#ݦadk84_* ;O@i52=ePKlRPK01 styles.xml=˒8rwq-Ɔw5aAiIkb|pß?_0H!P")D"3_h3gg~su_ÿ|V+۰Lo-7cܧ~;n6_,~Y({.>yßY,Ìůfh^[n ŝM ;|<ϒG#5lMdwG#᦯?5&0+/h$4mϟ?,ձ/t.-= tV'C#ix2?0ud13|7?q ` `165Qqg/'2 5C 290w-7=8LGzz}!d q -߷t3`k{xBZq3|7A{_ޓɘh&-7sX /۴B%BvwN"mom~6Y:xC˪wgxoό4<,Fy.]}gזk$ #vvh`uߎNDz^_&˝Pz`n ?x>ڮ*`H8@AI ŝ)Tiك U]y@ os)o'[}\ n\=ِJ*+;2ttiy/ugakHΟp,2lך/}KB/`{"-~p(ޏ03{mۧ@ɲ1uߜX%_9ˀd?f@5/@=!{ٺ.xO"{Jw8r͆Io+q2 KuJF7=ۦI^qE`ŏ;+;O<'Zb9 "}{)b^(-0CO}H1#M |T X S*n#J%粇]%z5GUy/zbڦo5QKji52HG{%cd:JIJ2jYW%r9[^rlkHnÍYt^($)i\<ֲ#8ʂ}ZTR|hpGI0_ c8H~]sBk3V|8Zdm D}vNHIQ.CITP oU2T%rPU^AU{9BquL=nHU-ԎJ6Q <2H@t@(t l!PB)@KF.J P8?[Fdx]~jG g#~o4Q&?3Y'clgBĂ;08\@ۇKα?*2Yϲ؀g>#`l[^{'$= kbЮ/{;Jes APZ4s-FQϖ__e~tV;HхN7n]n]ᦐv#{ceBxcmT5j|qHlc9yߵvQl@7gYdΖ:+bDhIR1I"pW+дX]Gq{`5x~jhf1ˈYF2=2b&k;$NDQ*tMʚJ֠,܋l~y#gv Rl-=~ޤn{ ~0ܕO5 6k}rҋR`w&D DaBG;MiuWb9 j/_(@SPP8/h>Au,`*{c(> L );GFʎkUҵ_tm }v@j-sd.0f˜eO2Bl$߿7iO,-h^>d:-92 z*#U9*jp&-d՚lv `TkТͭaP0ETkL՚lSD& cfn/u{erm|4hgO+^`rt`.`4Y, t#U+[Cʡ8A ȔHA J6)B(BP޽B7<).C*f9rOދ{Fާl=LޏNާ#SōP H^K▜iQ5%NP)¦H64J) j{y/tg{'nĄ8L3!΄ҍgB q&ęW L3!΄8WZ7B\eB q&ęgB|!t}K V3ڲ̣0fc5Xͼg5.A̻aYͼnW߶c/1Y90e;6YXvޭZvq2MTYu=ITY)j1;v2L;Ƒjݪԛ@|ju`5zXM=VScQe5n Wa^8^oz7iγzt#wXm=V[kx`&/0 >j՘ث"P$a&`2gn# ksk>Ƕ Uv`h,5j j1h?7Z|5ܚ| gyg7}{L3΄:#PgB u&ԙPP?_:L3΄5j&ԙPgB u&;y<vg, r/x~ k9Xtp8M`n&~f(L^R<τ)QH'WR 8jL^1 (pLH|e2âZ|[sXZՂ4+6WY Jꅰao`.6%fSc7iGgzb,4oYiHZ  HS=N t}: xWz9I@Sӂotf`;cJeHbk&,/]}K@",DN}dNýRutʤ0Gl?([g%ej-E!N/dws̥O}U&j,r'/R5IV"s"KH:HDTة>Ź%Xkt`M9] D_cA0P$m\ b\gÅR@lfo{_՘9(s9.|On(^:c+Hy K lOP* ۛ^]BhLaD ?uj%'/a}T{;^TMWYtWNW_J$(+83LI#bQѡVA/zؤP~n%Gg桉=̆aiozT [fӷ,7D?Ic-#[<&I;_wvsM[ ǜfzqLwVa-$i=Zs aDap[hs?ri$_^h@jR;!J&R1-ڌ'{ ɾf{.v{NWwMO OhzRD>p2i:m\%Opz i;fH6[w^}gQv"G 8|=n\8 SyID pQw&1Mw%OӪGS]s5#)V.Vxkd;L$IUΐ$) =b[{4kz3ݑbsu{УX. E ؚ;/}9GnKj 94EOr9غH40a9(_%hKt(@{r {$J ]kc):wdnc\'uxZ|SIJk! ռ\ hk9'%VVi"yt4AjAu4"J5RD7RH%9 Ph8AHA hX!$JxJ3>v€uG(RgM^]J~*^(mi)ӖRˆAI,"bꍝtJQޥ瘓#aIIj "DӯꍝӯQ$VIbJF f%Wbm)n 9{wiIXuɂY&0IɊU-vӲգG+tyUo<"ձط@$ac=ZNr:;oR~]sccf˯n"pjRj&M_-A-;oVO(U2Ty, e @t[AU~9*/U堪Tvi(ԗ $j =[+(P(7\˷muՎ)YVcRMQ Qaà: 5lTG (԰aP6 PÆAujETÄհ,W5ZejSØ԰i԰)԰[µ&NT ajSØ԰i԰)԰[µ& JՃJ{e05acwL cj@akK5LZ ;\VmiY,Z"eIjYCF+=sdήɩa5E591g0G SGrrJ(,욢Ŝ]SԲkZsvMRٵV+۰F[=#xmұՃ֨?&Poe{{פ-0j`B0bk޷HhmcoFo?;)-2op(4'Kg tQgon;**EBMF hB$玏i_sx1 @\|]e99u,cbb̽:%y.UvFMA xT&QH zkepoX;ϴ8{3{!B6OkZDrP|!qÛ?}wNlC; E;E:(׎h' ʹN'~Ąw  @*VGB 2ddmͯav#mBt,*Xod"Bj(]"2b(S(G9&܄%m{rKzM2{y>;!w)i6O3?<âU>IspRwVKxM{e[ Q'`o-V v-B쀼m)hZj@P A/!rqYȾXIY3;Vq9ǸW?Qjo[αu E ˞"%b)U=s̥Ϲzj8pÅOFf&U_iΪUTFJ>`dBaxAD҃iDZ3d$\D9XBI J@<tUNiSP쀩Q' ~TuV TI3I LG,xmDt!BUP!nH%N\pTF+BF*| WTtLLۈW#gڷ,>؏GbZ媗igOEHF; sߙvxGā]C" \3Fi_,6aQ*`SEdZB38Dz[3\J7 oqp$9o!0I_r7l#cSGP˨e;{sؤyl3&o^3釛 L h=RhCv ġ\ hoNɼϻSu=7ZGԀPF%XUlWrd`.]!@ڥP" LL@5݃>"lS%6@8oa]P_Q'O1c'Ptm˯HBt VT(ĵ@SqtYD7a̮.휺CTz`z+2"5B:*rݝ:RP "NTqSVmc26I@Rj% 4$2r ŰD+j[$jOlyU-^U  Eˆ衫].=A 1iP!B^<)`+TZhW> 'N['o͓U_N{< g< {XUǶ)d5>ĥCݕYC>Zhs[#%sJJo~vkyW&0WrWDzC ! 6r"?[Vt'9}GT 7vjplr~^x[zam_qUILcHmȡK;JSze.T\s6֛O]hBZLI::NVT$p<@J{EUwq/f! y!߳+!,*6 b?BZ9jËwKUЫap­_ ېZ\l >ĥrZqM : |AŠf`(w3; ɬN,*ۥ,,vZTe9 (o}5)cԖskwplb*i˯$.B7/%;=ҷ 'eC=sY\m/a`bt*YEJB .z^x*mg/Qu|Gq0wQ0*V~kSSG;RG-S٧ͦg쉹v?PKaJa PK01Object 1/content.xmlTN0)>{bt4-YA }%ewƛY9t{/Y.j8br|B={9 OvW Ƴ= 92`<\aj4|xl`j ƣ(p|#[H\ʎ.j`DZ73F©,USe"#J'!s$y} F1悄YTFB9^iM\P1)-2={E$cJPK01Object 1/settings.xmlS023 =vmIR/OC6Y~7Ͷv6"KԬ7eK8DWoIunS5 Ji[?FþjOB`]%ƃ 9(vX\:J&/ۗhTx19k48F6>e/{z]_vwS]n%9}INls\ HRXUg>?ikdCQoCBF=u e3*ou]/UfybE$k?Kw%3U}\qa=-="3ىR<,яvl¾׷tޡ%tZQGH< Δ09Up㱕AőHczж93;PwA| CE|bD5LUNf[ K`/`jC`ODP2ũZ{R4 ͪ`WYL"bUfX5( 7UPlʩK| öR4+2Xpny8qbT0=7}[wl\9jmRLLClF| b uIcϐMQ *}V9J>=|JI8ZʖPv:.*Q/O߂9ǔ ,6DZ70MV&ObI>RtPKMTMPK0145[meta.xml OpenOffice.org 1.1.1 (Linux)2004-07-29T10:32:272004-09-16T17:00:06en-US58P10DT23H50M21SPK01 settings.xmlZ[w8~_:ԮֳZ[kVD)$LJڋE3묙 $߷/g+G:76#JaB[QJsBdfmu@'|i4 :C[Gğm[84>ح>& `a'04yψ^vH☐Qr-`t  dh<<;ƔI{ߤh^ASF;%i?d|]qxr,Z[KQn]̽FfSq[݊gWjkcukn}9PK  PK01XmimetypePK01w˛-EPictures/1000000000000090000000AEE33C6062.jpgPK01A9Ͳll-Pictures/100000000000012F0000010A309A3FBA.jpgPK01mm-Pictures/10000201000001730000008ADD69CC3F.pngPK01ITii-Pictures/100000000000012F0000010A91AA117D.jpgPK01D aa-XPictures/100000000000012F0000010A412C2947.jpgPK01#jHPHP-Pictures/100000000000012F0000010A23411CD8.jpgPK015u{rr- Pictures/100000000000012F0000010AD4ACB786.jpgPK01dada-]~Pictures/100000000000012F0000010ADA0CC5EE.jpgPK01|WS content.xmlPK01+3 PBasic/Standard/Module2.xmlPK01~?ePBasic/Standard/Module1.xmlPK01aBasic/Standard/script-lb.xmlPK01lR Basic/script-lc.xmlPK01aJa  4styles.xmlPK01>$cJObject 1/content.xmlPK01MTMObject 1/settings.xmlPK0145[G!meta.xmlPK01(xE, S%settings.xmlPK01  +META-INF/manifest.xmlPK-bogosec.orig/documents/whitepaper/0000755000175000017500000000000011113035142017526 5ustar owensmkowensmkbogosec.orig/documents/whitepaper/test_output.txt0000644000175000017500000004633311113035142022677 0ustar owensmkowensmkSTART : Mon Jan 31 17:55:53 CST 2005 ====================================== Package Sev Points Lines Of Code Final Score apache_1.3.0.tar.gz 16711 186578 0.0895675445836786 apache_1.3.11.tar.gz 20841 256983 0.08109745262008181 apache_1.3.12.tar.gz 20895 257446 0.0811613568152796 apache_1.3.14.tar.gz 21595 267005 0.0808798836476208 apache_1.3.17.tar.gz 21889 270501 0.08092145069087719 apache_1.3.19.tar.gz 21654 271083 0.0798795940726628 apache_1.3.1.tar.gz 16753 190542 0.0879211232519178 apache_1.3.20.tar.gz 21681 272119 0.07967347618749999 apache_1.3.22.tar.gz 22546 276845 0.0814390724051349 apache_1.3.23.tar.gz 22660 280312 0.0808384942492635 apache_1.3.24.tar.gz 22761 285126 0.0798290346490072 apache_1.3.27.tar.gz 22900 287594 0.0796261396273896 apache_1.3.28.tar.gz 22923 290025 0.0790368646381041 apache_1.3.29.tar.gz 22965 290240 0.0791253215729493 apache_1.3.2.tar.gz 17329 195124 0.0888084841775839 apache_1.3.31.tar.gz 23287 284938 0.0817277208843072 apache_1.3.32.tar.gz 23305 285458 0.08164189945047159 apache_1.3.33.tar.gz 23305 285501 0.0816296031654275 apache_1.3.3.tar.gz 17479 196542 0.08893434142999219 apache_1.3.4.tar.gz 17596 202112 0.08706063964534611 apache_1.3.6.tar.gz 18209 206900 0.0880103109392627 apache_1.3.9.tar.gz 19963 247724 0.0805869973572735 httpd-2_0_15-alpha.tar.gz 21965 409238 0.0536737383462264 httpd-2_0_16-beta.tar.gz 23673 413056 0.0573110345005668 httpd-2_0_18-alpha.tar.gz 26035 468691 0.0555476138152124 httpd-2_0_28-beta.tar.gz 39112 570302 0.06858120785127959 httpd-2.0.32-beta.tar.gz 40162 594210 0.06758889954729901 httpd-2.0.35.tar.gz 41503 617261 0.0672368198649641 httpd-2.0.36.tar.gz 41540 624265 0.0665422536903421 httpd-2.0.39.tar.gz 41620 639129 0.0651198740786305 httpd-2.0.40.tar.gz 42737 648812 0.0658701339268314 httpd-2.0.42.tar.gz 42933 661539 0.0648981642301794 httpd-2.0.43.tar.gz 42925 664596 0.06458861222958739 httpd-2.0.44.tar.gz 38701 678224 0.057062759992766 httpd-2.0.45.tar.gz 38918 685602 0.0567647118882387 httpd-2.0.46.tar.gz 39160 688417 0.0568841269172613 httpd-2.0.47.tar.gz 39044 689951 0.0565895259228561 httpd-2.0.48.tar.gz 39191 693187 0.0565378942959604 httpd-2.0.49.tar.gz 39517 655544 0.0602807235924163 httpd-2.0.50.tar.gz 39305 658322 0.0597043189604281 httpd-2.0.51.tar.gz 39268 661497 0.0593623251503795 httpd-2.0.52.tar.gz 39308 661740 0.0594009731918885 openssh-2.1.1p4.tar.gz 12307 92619 0.132874104305454 openssh-2.2.0p1.tar.gz 12267 93999 0.130497842175628 openssh-2.3.0p1.tar.gz 13549 108205 0.125219105709844 openssh-2.5.1p1.tar.gz 13778 122159 0.112787432772046 openssh-2.5.1p2.tar.gz 13778 122387 0.112577316218229 openssh-2.5.2p1.tar.gz 14266 128989 0.110598578173335 openssh-2.5.2p2.tar.gz 14266 129019 0.110572861361508 openssh-2.9.9p1.tar.gz 14880 143107 0.103978142229244 openssh-2.9.9p2.tar.gz 14880 143107 0.103978142229244 openssh-2.9p1.tar.gz 14029 133867 0.104795555787961 openssh-2.9p2.tar.gz 14040 133972 0.104798017496196 openssh-3.0.1p1.tar.gz 14899 143342 0.103942552310793 openssh-3.0.2p1.tar.gz 14899 143351 0.103936026489761 openssh-3.0p1.tar.gz 14897 143319 0.103940626620804 openssh-3.1p1.tar.gz 14683 144189 0.101833935552183 openssh-3.2.2p1.tar.gz 15342 159646 0.09610012151886289 openssh-3.2.3p1.tar.gz 15342 159660 0.09609169485156201 openssh-3.3p1.tar.gz 15430 161720 0.09541182290378671 openssh-3.4p1.tar.gz 15416 161964 0.0951816453038971 openssh-3.5p1.tar.gz 15899 166756 0.09534089727906089 openssh-3.6.1p1.tar.gz 16101 170301 0.0945463228832111 openssh-3.6.1p2.tar.gz 16101 170316 0.09453799603873821 openssh-3.6p1.tar.gz 16101 170270 0.09456353634424 openssh-3.7.1p1.tar.gz 15943 178101 0.0895147509933525 openssh-3.7.1p2.tar.gz 15943 178288 0.08942086212570161 openssh-3.7p1.tar.gz 15943 178084 0.0895232961224314 openssh-3.8.1p1.tar.gz 15722 181919 0.08642307840302781 openssh-3.8p1.tar.gz 16269 181852 0.08946469290045619 openssh-3.9p1.tar.gz 16203 186467 0.0868929444173344 perl1.010.tar.gz 3434 36794 0.0933304343099421 perl1.0.tar.gz 3366 36084 0.093282341203858 perl2.001.tar.gz 4244 48580 0.0873610539316593 perl2.0.tar.gz 4394 48295 0.09098250336473759 perl3.01.tar.gz 5628 75752 0.0742950681170131 perl3.0.tar.gz 5589 75528 0.0739946333368636 perl-4.0.00.tar.gz 8309 98691 0.08419545179736029 perl-4.0.36.tar.gz 8588 111046 0.0773373196693259 perl5.000.tar.gz 12241 156079 0.0784260961863337 perl5.001m.tar.gz 12842 167214 0.07679978949131119 perl5.002.tar.gz 14057 175923 0.0799023815343463 perl5.003_22.tar.gz 12714 198654 0.0640007248784326 perl5.005_04.tar.gz 13982 278627 0.0501817842491941 perl-5.6.1.tar.gz 17649 386938 0.0456110970405254 perl-5.8.6.tar.gz 23908 523662 0.045655403676416 perl-5.9.0.tar.gz 23765 500034 0.047527434801099 perl-5.9.1.tar.gz 24145 498403 0.0484440636727026 php-3.0.18.tar.gz 30655 406914 0.0753345096670687 php-4.0.0.tar.gz 34307 519128 0.0660864629404166 php-4.0.1pl2.tar.gz 34359 527065 0.0651899354602043 php-4.0.1.tar.gz 34359 527045 0.06519240925031559 php-4.0.2.tar.gz 35883 552049 0.06499906107368419 php-4.0.3pl1.tar.gz 36447 575928 0.0632845309367371 php-4.0.3.tar.gz 36447 575923 0.0632850803550702 php-4.0.4pl1.tar.gz 39417 624541 0.0631140843168564 php-4.0.4.tar.gz 39417 624445 0.0631237872564178 php-4.0.5.tar.gz 42377 674026 0.0628709673909731 php-4.0.6.tar.gz 43047 765721 0.0562171687424899 php-4.1.0.tar.gz 44365 834852 0.053141554830479 php-4.1.1.tar.gz 42837 827734 0.0517517302257346 php-4.1.2.tar.gz 42960 827897 0.0518905129502844 php-4.2.0.tar.gz 44854 876430 0.0511780746893669 php-4.2.1.tar.gz 44901 877058 0.0511953979478383 php-4.2.2.tar.gz 45092 885773 0.0509069479426466 php-4.2.3.tar.gz 46141 893882 0.0516182971205024 php-4.3.0.tar.gz 54977 1180243 0.0465808029928338 php-4.3.10.tar.gz 54180 1227476 0.0441393558815037 php-4.3.1.tar.gz 54977 1180243 0.0465808029928338 php-4.3.2.tar.gz 54453 1177097 0.0462601354575461 php-4.3.3.tar.gz 54982 1196813 0.0459403432282274 php-4.3.4.tar.gz 55117 1207558 0.0456430802219614 php-4.3.5.tar.gz 54154 1214558 0.0445874136928863 php-4.3.6.tar.gz 54264 1215911 0.0446282663780528 php-4.3.7.tar.gz 54241 1216444 0.0445900784033937 php-4.3.8.tar.gz 54224 1216570 0.0445712125072989 php-4.3.9.tar.gz 54194 1221208 0.0443773706035373 php-5.0.0.tar.gz 51758 1433945 0.0360948292995928 php-5.0.1.tar.gz 51212 1431329 0.0357793351493643 php-5.0.3.tar.gz 51379 1441051 0.0356540700733963 postfix-1.0.8.tar.gz 4800 199281 0.024086591295708 postfix-1.1.13.tar.gz 5273 237491 0.0222015430760182 postfix-2.0.20.tar.gz 5518 262388 0.0210299251490158 postfix-2.1.5.tar.gz 5683 293908 0.0193371168302098 Python-1.5.2.tgz 14937 348000 0.0429214559386977 Python-1.6.1.tar.gz 15878 615715 0.0257879051184398 Python-2.0.1.tgz 15733 445545 0.0353125572800358 Python-2.1.3.tgz 19797 628654 0.0314916207219444 Python-2.2.3.tgz 18461 746199 0.0247396025278334 Python-2.3.4.tgz 23539 895668 0.0262813155469803 Python-2.4.tgz 20976 980119 0.0214014828811601 qmail-1.01.tar.gz 3050 44918 0.0679015094171606 qmail-1.02-new2.tar.gz 3143 45339 0.0693148650536335 qmail-1.02-new.tar.gz 3143 45339 0.0693148650536335 qmail-1.02.tar.gz 3143 45339 0.0693148650536335 qmail-1.03-new.tar.gz 3377 46737 0.07224825441655849 qmail-1.03.tar.gz 3377 46737 0.07224825441655849 ruby-1.1a0.tar.gz 7260 127287 0.0570364609111689 ruby-1.1a7.tar.gz 7429 126718 0.0586236104315616 ruby-1.1a8.tar.gz 7623 130089 0.0585957818621607 ruby-1.1a9.tar.gz 7673 130650 0.0587268784283706 ruby-1.1b0.tar.gz 8126 134552 0.0603930079077231 ruby-1.1b4.tar.gz 8689 140605 0.0617996040918411 ruby-1.1b9_19.tar.gz 9181 151971 0.060415035324722 ruby-1.1b9_32.tar.gz 9432 154992 0.0608547537937442 ruby-1.1b9.tar.gz 8734 143491 0.0608679289990312 ruby-1.1c0.tar.gz 9432 155036 0.0608374829071958 ruby-1.1c2.tar.gz 9397 158366 0.0593393363053517 ruby-1.1c4.tar.gz 9391 159516 0.0588739269623945 ruby-1.1c7.tar.gz 9710 180147 0.0539004257634044 ruby-1.1c8.tar.gz 9710 180088 0.0539180844920262 ruby-1.1c9.tar.gz 9710 180111 0.0539111992049348 ruby-1.1d0.tar.gz 10078 206301 0.0488509507951975 ruby-1.1d1.tar.gz 10078 206373 0.0488339075363542 ruby-1.2.1.tar.gz 9729 180779 0.053818935458949 ruby-1.2.2.tar.gz 9731 180891 0.0537966694491896 ruby-1.2.3.tar.gz 9725 180852 0.0537750941838263 ruby-1.2.4.tar.gz 9731 180998 0.0537611833648255 ruby-1.2.5.tar.gz 9731 181033 0.0537507894509105 ruby-1.2.6.tar.gz 9917 204325 0.0485337901219463 ruby-1.2.tar.gz 9729 180662 0.0538537895812808 ruby-1.3.5.tar.gz 11792 203286 0.0580069458792054 ruby-1.3.6.tar.gz 11781 203481 0.0578956593817939 ruby-1.3.7.tar.gz 11781 203739 0.057822344601018 ruby-1.3.tar.gz 9893 183631 0.0538725306003164 ruby-1.4.0.tar.gz 11799 204141 0.0577966536201293 ruby-1.4.1.tar.gz 11809 204455 0.0577568005999697 ruby-1.4.2.tar.gz 11809 204490 0.0577469150895731 ruby-1.4.3.tar.gz 11808 204882 0.0576331742173551 ruby-1.4.4.tar.gz 11843 206178 0.0574390413461514 ruby-1.4.5.tar.gz 11851 207311 0.0571669295567214 ruby-1.4.6.tar.gz 11887 207843 0.0571906038051164 ruby-1.6.0.tar.gz 12299 219104 0.0561316391607037 ruby-1.6.1.tar.gz 12349 219689 0.0562097631955484 ruby-1.6.2.tar.gz 12347 222244 0.0555575553595755 ruby-1.6.3.tar.gz 12382 222644 0.0556134456800999 ruby-1.6.4.tar.gz 12418 224701 0.0552645515596288 ruby-1.6.5.tar.gz 12453 233325 0.0533704775170549 ruby-1.6.6.tar.gz 12451 235983 0.0527636877797702 ruby-1.6.7.tar.gz 12238 236936 0.0516510787723274 ruby-1.6.8.tar.gz 12267 240446 0.0510163058094825 ruby-1.8.0.tar.gz 16687 396570 0.0420791621487595 ruby-1.8.1.tar.gz 16778 426031 0.0393821106914761 ruby-1.8.2.tar.gz 17405 492828 0.0353172574069118 sendmail.8.11.7.tar.gz 20775 232285 0.0894389794146537 sendmail.8.12.10.tar.gz 16251 324450 0.0500888683412968 sendmail.8.12.11.tar.gz 16265 325152 0.0500217334251891 sendmail.8.12.8.tar.gz 16215 322404 0.0502950749163589 sendmail.8.12.9.tar.gz 16215 322891 0.0502192174242508 sendmail.8.13.0.tar.gz 16330 330588 0.049396832310914 sendmail.8.13.1.tar.gz 16341 331157 0.0493441680733522 sendmail.8.13.2.tar.gz 16335 331607 0.0492611233578717 sendmail.8.13.3.tar.gz 16335 331647 0.0492551819655651 vsftpd-0.9.2.tar.gz 515 25656 0.0200862696185428 vsftpd-1.0.1.tar.gz 515 26149 0.0197075732660267 vsftpd-1.1.0.tar.gz 544 27784 0.0195796141664267 vsftpd-1.1.1.tar.gz 544 28029 0.0194084697991366 vsftpd-1.1.2.tar.gz 544 28868 0.0188443951780518 vsftpd-1.1.3.tar.gz 568 29228 0.0194334200082113 vsftpd-1.2.0.tar.gz 637 32849 0.0194019097486479 vsftpd-1.2.1.tar.gz 637 34409 0.01852228583607 vsftpd-1.2.2.tar.gz 637 34540 0.0184520362864312 vsftpd-2.0.0.tar.gz 734 37607 0.0195176429919962 vsftpd-2.0.1.tar.gz 734 37657 0.0194917279655841 vsftpd-2.0.2pre3.tar.gz 734 37883 0.0193754454504659 wu-ftpd-2.0.tar.gz 7089 24345 0.291202847949612 wu-ftpd-2.1.tar.gz 7986 24334 0.328182789512615 wu-ftpd-2.2.tar.gz 8980 26388 0.340306199787783 wu-ftpd-2.3.tar.gz 8980 26385 0.34034489293159 wu-ftpd-2.4.2.tar.gz 9741 35509 0.274315431768473 wu-ftpd-2.4.tar.gz 8966 26495 0.338403472353275 wu-ftpd-2.5.0.tar.gz 15081 54752 0.275435904928894 wu-ftpd-2.6.0.tar.gz 19670 63603 0.309262141722869 wu-ftpd-2.6.1.tar.gz 19903 65322 0.304695712521555 wu-ftpd-2.6.2.tar.gz 19898 65212 0.305127890572282 bogosec.orig/documents/whitepaper/whitepaper.html0000644000175000017500000010477411113035142022601 0ustar owensmkowensmkBogoSec Source Code Security Quality Metric

BogoSec Source Code Security Quality Metric

Credits

  • Design and source code by Dustin Kirkland, Agoston Petz, and Loulwa Salem
  • Project sponsored by the IBM® Linux Technology Center Security Team
  • Patents filed by IBM on behalf of Kylene Hall, Dustin Kirkland, and Emily Ratliff
  • BogoSec is a word play based on Linus Torvalds' BogoMips, a rough and unscientific timing calibrator for the Linux® kernel

Legal Statement

  • This work represents the view of the author and does not necessarily represent the view of IBM.
  • IBM and the IBM logo are registered trademarks of International Business Machines Corporation in the United States, other countries, or both.
  • Linux is a registered trademark of Linus Torvalds.
  • UNIX is a registered trademark of The Open Group in the United States, other countries, or both.
  • Other company, product, and service names may be trademarks or service marks of others.
  • The tests reported in this paper were conducted for research purposes only, under laboratory conditions. Similar results may not be realized in all computing environments.

Overview

Many software security vulnerabilities occur because of poor programming practices. Vulnerabilities are often algorithmically detectable by static source-code scanners designed for identifying potential security issues. As the number and severity of potential security holes per line of code increase, we believe that the overall quality of the source code in terms of security decreases. BogoSec metrics are computed values that attempt to reflect relative ratings of source code security quality for comparative purposes.

The motivation behind BogoSec is to influence developers to produce more secure source code over time. The various scanners that exist point developers to potentially insecure sections of code. Developers are often reluctant to use such scanners because of a seemingly high degree of "false positive" output as well as the difficulties associated with use. BogoSec attempts to reduce the penalty of false positives while broadening the scope of the source scan by utilizing multiple independent scanners. This produces high level metrics allowing developers and users alike to comparatively judge the quality of the source code in terms of security.

Methodology

Several source-code scanners exist that identify numerous vulnerabilities with varying accuracy and success. BogoSec parses the output of any number of source-code scanners and computes its metric based on the number, severity, and frequency of potential bugs found as per number of lines scanned. BogoSec currently supports the following scanners:

  • Flawfinder
  • ITS4
  • RATS

Support for additional scanners is easily extended by creating plugins that parse the output of the new scanners in the same way that existing plugins parse the currently supported scanners. This is useful for incorporating support for proprietary or internal scanning tools.

BogoSec requires that at least one of the above scanners is installed on the system and can be found in the path. These scanners are not distributed as part of BogoSec. However, BogoSec does include plugins that interface with each scanner.

The basic methodology of BogoSec is as follows:

  1. Execute each scanner present on target source code or tree
  2. Parse output of each scanner, determining the {filename, line number, severity, description} of each possible vulnerability
  3. Interpret the severity indicator and adjust to a common scale (by default, 10 being "most severe", 1 being least severe)
  4. Report the total number of vulnerability severity points, as well as the total number of lines analyzed by each scanner
  5. Calculate and report the BogoSec final score
    BogoSec Final Score    =    total vulnerability severity points from all scanners

    total lines of code analyzed by all scanners

The algorithm above considers weighted vulnerabilities. The total number of vulnerability severity points accumulates as scanners identify potential vulnerabilities. The ratio of points per line is the indicator by which users of BogoSec are able to compare source code in terms of security quality. BogoSec operates under the assumption that as the number of weighted severity points per line increases, the overall security of the compiled code decreases.

Implementation

BogoSec is implemented as a Perl script and accompanying Perl modules. One can add support for additional scanners by creating a module that executes the scanner against the source code, interprets the output, and normalizes severity ratings to BogoSec's scale.

Initially, BogoSec sets up its execution environment by parsing configuration files and reading command line parameters. (See the manpage for an extensive description of command line options.) The final parameter specifies the target, which may be a single source file, an entire source tree, an archive {*.tar.gz, *.tgz}, or a source RPM {*.src.rpm}. BogoSec handles the last two formats by creating a temporary directory and expanding the code accordingly.

The script builds a list of files in the target tree, consisting of any case insensitive file matching {*.c, *.h, *.cpp, *.c++}. Currently, scanners are executed on one file at a time. Although some scanners have the ability to recursively scan an entire tree, the stability and consistency of BogoSec favors compiling the results of individually scanned files. BogoSec is multithreaded such that all three scanners execute simultaneously on the list of files, waiting for the slowest scanner to complete execution before analyzing the results.

Each scanner's plugin has a routine defined for analyzing the particular output of that scanner. This consists of scanning each line of output to determine if the line specifies an identified potential vulnerability. If it does, the filename, line number, severity, and description are parsed out according to rules defining each scanner's output conventions. The severity is scaled according to BogoSec's scale (by default, a 10-point scale). The plugin obtains the number of lines of source code scanned from the output whenever possible. This data is stored in a structure accessible by the main program.

Finally, the main program tallies the number of points accumulated by all scanners on all files, as well as the number of lines of code scanned by all scanners in all files. The BogoSec final score is this quotient, which the script reports and then exits.

Interface

Files

BogoSec is installed through the bundled makefile, using the "make install" target. The installation creates the following:

  • /usr/local/bin/bogosec
    perl executable script placed in a common location
  • /usr/local/bin/bogosec_wrapper
    perl executable wrapper script placed in a common location
  • /etc/bogosec.conf
    configuration file containing global default configuration
  • /usr/local/bogosec/
    directory of specific resources
  • /usr/local/bogosec/plugins/
    directory of perl modules
  • /usr/local/bogosec/documents/
    directory of documentation
  • /usr/local/bogosec/plugins/Bogo{Flaw,ITS4,Rats}.pm
    perl modules for calling each utility and analyzing its output

Example

BogoSec is executed as any other command-line utility. Arguments are paths to the source code to be evaulated.

Example:

# bogosec tests/apache/apache_1.3.31.tar.gz
Running flawfinder...
Running rats...
Running its4...
flawfinder
  5212 points
  75682 lines
its4
  9502 points
  110022 lines
rats
  8573 points
  99234 lines
>>> Using scanners: (flawfinder its4 rats )
>>> 23287 total severity points
>>> 284938 total lines of code scanned
>>> final score = 0.0817277208843072

In the above example, BogoSec executed against the Apache source tree archived in tests/apache/apache_1.3.31.tar.gz. BogoSec can also evaluate individual files or uncompressed source trees. For a discussion of the various options associated with BogoSec, please see the manpage.

Testing

To test the operation of BogoSec and the reliability of its results, test cases have been executed, documented, and studied. Tests were executed against several popular packages against all released versions available for download. These tests demonstrate BogoSec's use against a given package to indicate the general trend of the quality of source code. Also, several equivalent open source software packages (when available) were tested to compare in an absolute sense which of the packages have better BogoSec quality scores.

  • Popular packages tested across released versions
    • Web server
      • Apache
    • Secure Shell
      • OpenSSH
    • FTP servers
      • vsftpd
      • wu-ftpd
    • Mail transfer agents
      • sendmail
      • qmail
      • postfix
    • Scripting languages
      • Perl
      • PHP
      • Python
      • Ruby

Web Servers

Apache is the world's most popular Web server, accounting for over 60% of all internet Web sites. The Apache 1.3 tree has been under constant development since 1998 and up to the present. In that time, the Apache team has added many features and fixed many bugs. Apache 2.0 is the next generation Web server from the Apache development team.

Results

These test results show consecutive runs of BogoSec against all Apache 1.3 (in maroon) and 2.0 (in blue) released verisions available.
Absolute Points: The overall scores of 1.3 are very slowly but smoothly increasing. On the other hand, the tremendous spike between 2.0.18 and 2.0.28 (both beta releases) should cause some concern. Also, it looks like the 2.0.44 release fixed some security problems present in previous releases.
Points / Line: Both versions exhibit BogoSec ratios that are generally improving over time, though the 2.0 releases have better scores than the 1.3 branch.

Absolute PointsPoints / Line
						(continued)
Package	Version	Score	LOC	Points		Package	Version	Score	LOC	Points
apache	1.3.0	0.0896	186578	16711		httpd	2_0_15	0.0537	409238	21965 
apache	1.3.11	0.0811	256983	20841		httpd	2_0_16	0.0573	413056	23673 
apache	1.3.12	0.0812	257446	20895		httpd	2_0_18	0.0555	468691	26035 
apache	1.3.14	0.0809	267005	21595		httpd	2_0_28	0.0686	570302	39112 
apache	1.3.17	0.0809	270501	21889		httpd	2.0.32	0.0676	594210	40162 
apache	1.3.19	0.0799	271083	21654		httpd	2.0.35	0.0672	617261	41503 
apache	1.3.1	0.0879	190542	16753		httpd	2.0.36	0.0665	624265	41540 
apache	1.3.20	0.0797	272119	21681		httpd	2.0.39	0.0651	639129	41620 
apache	1.3.22	0.0814	276845	22546		httpd	2.0.40	0.0659	648812	42737 
apache	1.3.23	0.0808	280312	22660		httpd	2.0.42	0.0649	661539	42933 
apache	1.3.24	0.0798	285126	22761		httpd	2.0.43	0.0646	664596	42925 
apache	1.3.27	0.0796	287594	22900		httpd	2.0.44	0.0571	678224	38701 
apache	1.3.28	0.0790	290025	22923		httpd	2.0.45	0.0568	685602	38918 
apache	1.3.29	0.0791	290240	22965		httpd	2.0.46	0.0569	688417	39160 
apache	1.3.2	0.0888	195124	17329		httpd	2.0.47	0.0566	689951	39044 
apache	1.3.31	0.0817	284938	23287		httpd	2.0.48	0.0565	693187	39191 
apache	1.3.32	0.0816	285458	23305		httpd	2.0.49	0.0603	655544	39517 
apache	1.3.33	0.0816	285501	23305		httpd	2.0.50	0.0597	658322	39305 
apache	1.3.3	0.0889	196542	17479		httpd	2.0.51	0.0594	661497	39268 
apache	1.3.4	0.0871	202112	17596		httpd	2.0.52	0.0594	661740	39308 
apache	1.3.6	0.0880	206900	18209                                                 
apache	1.3.9	0.0806	247724	19963                                                 

Secure Shell Servers

OpenSSH provides an encrypted command shell, usually for remote network access to systems. OpenSSH is primarily developed by members of the OpenBSD project, a group of developers known for security-conscious code. OpenBSD conducts extensive manual audits of source code in order to identify and fix security vulnerabilities.

Results

These graphs demonstrate admirable models for secure software development. Both sets of data seem to approach asymptotes, with Absolute Points gradually increasing, and Points/Line scores gradually decreasing, and neither have significant spikes. The false positives reported by the tools probably form the asymptote base of these graphs.

Absolute PointsPoints / Line
						(continued)
Package	Version	Score	LOC	Points		Package	Version	Score	LOC	Points 
openssh	2.1.1p4	0.1329	92619	12307		openssh	3.2.2p1	0.0961	159646	15342  
openssh	2.2.0p1	0.1305	93999	12267		openssh	3.2.3p1	0.0961	159660	15342  
openssh	2.3.0p1	0.1252	108205	13549		openssh	3.3p1	0.0954	161720	15430  
openssh	2.5.1p1	0.1128	122159	13778		openssh	3.4p1	0.0952	161964	15416  
openssh	2.5.1p2	0.1126	122387	13778		openssh	3.5p1	0.0953	166756	15899  
openssh	2.5.2p1	0.1106	128989	14266		openssh	3.6.1p1	0.0945	170301	16101  
openssh	2.5.2p2	0.1106	129019	14266		openssh	3.6.1p2	0.0945	170316	16101  
openssh	2.9.9p1	0.1040	143107	14880		openssh	3.6p1	0.0946	170270	16101  
openssh	2.9.9p2	0.1040	143107	14880		openssh	3.7.1p1	0.0895	178101	15943  
openssh	2.9p1	0.1048	133867	14029		openssh	3.7.1p2	0.0894	178288	15943  
openssh	2.9p2	0.1048	133972	14040		openssh	3.7p1	0.0895	178084	15943  
openssh	3.0.1p1	0.1039	143342	14899		openssh	3.8.1p1	0.0864	181919	15722  
openssh	3.0.2p1	0.1039	143351	14899		openssh	3.8p1	0.0895	181852	16269  
openssh	3.0p1	0.1039	143319	14897		openssh	3.9p1	0.0869	186467	16203  
openssh	3.1p1	0.1018	144189	14683                                                  

FTP Servers

Vsftpd and wu-ftpd are two major open source FTP servers. The first, vsftpd, was written with security as a primary objective, with the "vs" standing for "very secure". The second, wu-ftpd, is Washington University's FTP server, which pre-dates vsftpd and has had a long and colorful history of some high profile security vulnerabilities.

Results

These charts show a drastic difference in source-code security between vsftpd and wu-ftpd. Both BogoSec scores of vsftpd appear orders of magnitude better than wu-ftpd. This is consistent with the popular opinion regarding the security of these two FTP servers.

Absolute PointsPoints / Line
						(continued)
Package	Version	Score	LOC	Points		Package	Version	Score	LOC	Points
vsftpd	0.9.2	0.0201	25656	515		wu-ftpd	2.0	0.2912	24345	7089  
vsftpd	1.0.1	0.0197	26149	515		wu-ftpd	2.1	0.3282	24334	7986  
vsftpd	1.1.0	0.0196	27784	544		wu-ftpd	2.2	0.3403	26388	8980  
vsftpd	1.1.1	0.0194	28029	544		wu-ftpd	2.3	0.3403	26385	8980  
vsftpd	1.1.2	0.0188	28868	544		wu-ftpd	2.4.2	0.2743	35509	9741  
vsftpd	1.1.3	0.0194	29228	568		wu-ftpd	2.4	0.3384	26495	8966  
vsftpd	1.2.0	0.0194	32849	637		wu-ftpd	2.5.0	0.2754	54752	15081 
vsftpd	1.2.1	0.0185	34409	637		wu-ftpd	2.6.0	0.3093	63603	19670 
vsftpd	1.2.2	0.0185	34540	637		wu-ftpd	2.6.1	0.3047	65322	19903 
vsftpd	2.0.0	0.0195	37607	734		wu-ftpd	2.6.2	0.3051	65212	19898 
vsftpd	2.0.1	0.0195	37657	734                                                   
vsftpd	2.0.2	0.0194	37883	734                                                   

Mail Transfer Agents

Postfix, qmail, and sendmail are major open source mail transfer agents (MTAs). Sendmail has long served as the primary mailer for UNIX® environments. But sendmail's history has been riddled with exploitable security vulnerabilities. Recently, several alternative MTA's have emerged, such as postfix and qmail. Postfix was written and is maintained by an expert member of IBM Research in secure computing. Qmail is another option with a notably small code base designed in the interest of security.

Results

These results are interesting in that the package that has the lowest absolute scores (qmail) does not have the lowest points/line ratios. This is because of the significantly smaller code base of qmail, and perhaps identifies an unfair BogoSec bias toward larger projects. (However, this is exactly why both metrics must be considered. The Postfix scores are very good, as expected.) A concerted effort by the sendmail development team between releases 8.11 and 8.12 demonstrates a marked BogoSec score improvement. Since that time, sendmail has maintained approximately the same status.

Absolute PointsPoints / Line
						(continued)
Package	 Version  Score	  LOC	  Points	Package	 Version  Score	  LOC	  Points
postfix	 1.0.8	  0.0241  199281  4800		sendmail 8.11.7	  0.0894  232285  20775 
postfix	 1.1.13	  0.0222  237491  5273		sendmail 8.12.10  0.0501  324450  16251 
postfix	 2.1.5	  0.0193  293908  5683		sendmail 8.12.11  0.0500  325152  16265 
qmail	 0.92	  0.0669  44957	  3008		sendmail 8.13.0   0.0494  330588  16330 
qmail	 1.00	  0.0660  44913	  2966		sendmail 8.13.1   0.0493  331157  16341	
qmail	 1.01	  0.0679  44918	  3050		sendmail 8.13.2   0.0493  331607  16335 
qmail	 1.02	  0.0693  45339	  3143          sendmail 8.13.3   0.0493  331647  16335 
qmail	 1.03	  0.0722  46737	  3377                                                  

Scripting Languages

Open source scripting languages include perl, php, python, and ruby. Each of these provide a higher level programming language easily used by developers to very easily and quickly accomplish software tasks. A binary interpreter is needed by each of these languages to executed the scripted source code.

Results

Ruby and Python have the lowest absolute and ratio scores. PHP, by far, has the largest code base and the highest absolute points. In all cases, the latest release shows marked improvement over the earliest release.*

Absolute PointsPoints / Line
					(continued)
Package	Version	Score	LOC	Points		Package	Version	Score	LOC	Points
perl	5.005	0.0502	278627	13982		Python	2.1.3	0.0315	628654	19797 
perl	5.6.1	0.0456	386938	17649		Python	2.2.3	0.0247	746199	18461 
perl	5.8.6	0.0457	523662	23908		Python	2.3.4	0.0263	895668	23539 
perl	5.9.0	0.0475	500034	23765		Python	2.4	0.0214	980119	20976 
perl	5.9.1	0.0484	498403	24145		ruby	1.3.5	0.0580	203286	11792 
php	3.0.18	0.0753	406914	30655		ruby	1.3.7	0.0578	203739	11781 
php	4.2.0	0.0512	876430	44854		ruby	1.3	0.0539	183631	9893  
php	4.2.3	0.0516	893882	46141		ruby	1.4.0	0.0578	204141	11799 
php	4.3.10	0.0441	1227476	54180		ruby	1.4.6	0.0572	207843	11887 
php	4.3.8	0.0446	1216570	54224		ruby	1.6.0	0.0561	219104	12299 
php	4.3.9	0.0444	1221208	54194		ruby	1.6.8	0.0510	240446	12267 
php	5.0.0	0.0361	1433945	51758		ruby	1.8.0	0.0421	396570	16687 
php	5.0.1	0.0358	1431329	51212		ruby	1.8.1	0.0394	426031	16778 
php	5.0.3	0.0357	1441051	51379		ruby	1.8.2	0.0353	492828	17405 

*More comprensive results for these tests available upon request. In order to create a readable chart, limited numbers of scores were chosen for each interpreter.

All Packages Tested

The following data shows an absolute comparison of the latest release of all packages tested above. One must be somewhat cautious of this comparison, because it's very difficult to compare vastly different packages especially when one package consists of a few hundred lines of code and another comprises millions of lines of code. Still, this chart teaches some valuable lessons about the advantages of BogoSec as well as perhaps some of its shortcomings.

Results

Absolute Points: It seems that vsftpd, qmail, and postfix are clear winners--these being packages designed and implemented by experts to be secure software. On the other end of the spectrum, httpd and php totaled the highest number of points--probably because of the fact that these are two of the largest packages that were tested.
Points / Line: Again, postfix and vsftpd exhibited the best scores, while wu-ftpd scored several orders of magnitude worse than the rest of the field--consistent with the popular opinion of its state of security.
All four of the scripting languages (python, php, ruby, perl) appear to have relatively similar BogoSec scores. It is somewhat surprising to see apache, httpd, and openssh near the upper end of the spectrum. This also deserves further investigation as it is possible that these packages are yielding an abnormally high number of false positives, thereby driving their scores disproportionately higher.

Absolute PointsPoints / Line
Package	 Version Score	LOC	Points
postfix	 2.1.5	 0.0193	293908	5683  
vsftpd	 2.0.1	 0.0195	37657	734   
Python	 2.4	 0.0214	980119	20976 
ruby	 1.8.2	 0.0353	492828	17405 
php	 5.0.3	 0.0357	1441051	51379 
perl	 5.9.1	 0.0484	498403	24145 
sendmail 8.13.3	 0.0493	331647	16335 
httpd	 2.0.52	 0.0594	661740	39308 
Qmail	 1.03	 0.0722	46737	3377  
apache	 1.3.9	 0.0806	247724	19963 
openssh	 3.9p1	 0.0869	186467	16203 
wu-ftpd	 2.6.2	 0.3051	65212	19898 

Applications

We hope that BogoSec drives developer awareness of insecure code by providing a higher level interface to numerous scanners. One way of encouraging developers to use these existing tools is by integrating BogoSec into some common development tools and processes, such as:

  • source code repositories
  • integrated development environments
  • text editors
  • build processes
  • package installation managers

To demonstrate our point, we have created wrapper scripts that integrate BogoSec into the CVS source code repository on both the client and server side. While these example scripts use statically configured thresholds, it is conceivable to extend the scripts to check the score of previous commits and only allow new code that is at least as good as what is currently in the repository. In this way, one might try to ensure that the security quality of some code base never decreases.

We have also created a wrapper script that invokes the tool on a directory which may contain any number of file formats supported by BogoSec. The script will run BogoSec on each file and output the results in a tabulated format.

CVS Client

Proactive developers can make use of the script "client_cvs_wrapper" to be used in place of the "cvs commit" command. Defined in this script are two thresholds, MAX_SCORE and MAX_SEV_PTS. The BogoSec scores of the code to be committed must meet both of these requirements, or else the developer is notified to fix some of the suspected vulnerabilities. The user can configure the script to either entirely block the commit or simply issue a warning. Developers can use this script without bothering the server administrator.

CVS Server

Heavy-handed administrators can set MAX_SCORE and MAX_SEV_PTS thresholds in a script "server_cvs_wrapper", which is called by "CVSROOT/commitinfo". The wrapper informs the user of the BogoSec scores and exits with a non-zero return code when the code's scores do not meet requirements, thus preventing the code commit (or optionally issuing a warning).

BogoSec wrapper

This is an automated script that administrators may use to run BogoSec on a directory of different file formats to help them identify potential weak points of the system. The script will collect the results of the multiple BogoSec executions and arrange them in a concise and easy to read tabulated format { Package, Sev Points, Lines of Code, Final Score}.

Conclusions

  • BogoSec provides a convenient interface that should make developers and users more conscious of the security quality of software packages.
  • Given a diverse set of software packages, BogoSec is able to accurately identify those with the highest and lowest security quality.
  • Given a set of subsequent releases of a software package or a single file, BogoSec is able to chart the security quality progress over time.
  • Additional work is necessary to further BogoSec and push for more widespread adoption including:
    • a complexity factor - BogoSec currently seems to prefer packages with a larger code base, which is counterintuitive to the adage that "simplicity is the ally of security."
    • tool integration - BogoSec metric calculation could be integrated into additional tools, such as package installation managers.
    • reduction of "false positive" effects - More skillful use of the actual source-code scanners could produce more accurate vulnerability output.

References

Manual

BOGOSEC(1)                    BogoSec User Manual                   BOGOSEC(1)

NAME
       bogosec  -  source  code quality metric using established static source
       code scanners

SYNOPSIS
       bogosec [-l] [--log-dir directory ] [--min-sev 0-10 ] [--nhf] [-p  plu-
       gin_name  [args]  ]  [--plugin-dir  directory  ] [--sev-range-max num ]
       [--temp-log-dir directory ] [-v 0|1 ] [--xp plugin_name ] TARGET

       bogosec_wrapper TARGET-DIRECTORY

DESCRIPTION
       BogoSec attempts to influence developers to produce more secure  source
       code  over  time.  Various existing scanners point developers to poten-
       tially insecure sections of code. BogoSec broadens the scope of  source
       code scans by utilizing multiple independent scanners and compiling the
       results into high-level calculated metrics.   These  metrics  can  help
       developers  and users alike to comparatively judge the security quality
       of source code.

       bogosec_wrapper automates the process by running bogosec on a direcotry
       containing  different  file formats supported by bogosec and collecting
       the results in : /tmp/bogosec.results  and  /tmp/bogosec.detail_results
       (overwritten  by  each  invocation). Keep in mind, bogosec_wrapper does
       not accept any options.

OPTIONS
       -l     Turn on scanner  output  logging.  Log  will  be  called  <scan-
              ner_name>.log  and  created in current working directory, unless
              --log-dir is used to specify a different location.

       --log-dir directory
              Specify a directory for scanner output logs (only makes sense if
              -l is also used).  Default is current working directory.

       --min-sev minimum_severity_level
              Specify  a  minimum severity level. Any vulnerabilities reported
              by the scanners whose score falls  below  this  number  will  be
              ignored.  The argument must be a number 0-10.  Default is 0.

       --nhf, --no-header-files
              Do not scan header files.  Useful if the scanners being used do
              not support scanning header files.

       -p, --plugin plugin_name [args]
              Specify a plugin to use. If no plugins are  defined  on
              the  command line, all of the plugins in the plugins_dir will be
              used. This option can be passed more than once to specify a set
              of scanners to use. Each scanner requires a separate instance of
              the --plugin flag (please see examples). Optionally,  a  set  of
              command  line arguments can be passed to the scanner - this fea-
              ture must be used with care.   Keep  in  mind  that  the  plugin
              requires  a  certain formatting of the scanner output (for exam-
              ple, '-SQ' is always passed to flawfinder, and '-w 3' is  always
              passed to rats).  You can pass additional command line arguments
              using this option, but be aware of the effect it might  have  on
              the  formatting  of the scanner output, and the effect that will
              have on the plugin's ability to parse it correctly.  If you must
              change the defaults ('-SQ', '-w 3', etc.) you must edit the plu-
              gin directly.

       --plugin-dir directory
              Specify the directory where the plugins are stored.  Default  is
              /usr/local/bogosec/plugins.

       --sev-range-max number
              Specify the maximum severity value to be used in calculating the
              severity value range.  The default is 10.  For example,  setting
              --sev-range-max to 50 would mean that the severity results would
              now be on a scale of 0-50 instead of on a scale of 0-10.  This  can
              be  used  to  scale  the result if more granularity is required.
              NOTE: -v 1 will not work if this option is used.

       --temp-log-dir directory
              Specify a directory where you want the temporary files  used  by
              BogoSec  to be stored (scanner output logs, etc.)  The default is
              /tmp/.

       -v, --verbosity 0|1
              Specify verbosity level (default is 0).  If 1, then  a  graph  of
              the  severity  points is shown, which breaks the results down by
              severity levels. This option does not work if  the  --sev-range-
              max is changed from 10.

       --xp, --exclude-plugin plugin_name
              Do not run plugin defined by plugin_name.

FILES
       /etc/bogosec.conf
              Global  configuration file. The settings here are overwritten by
              any settings in user's ~/.bogosecrc file.
       ~/.bogosecrc
              Default user  configuration  file  (overrides  the  settings  in
              /etc/bogosec.conf).   This file is not created during an instal-
              lation, you must create it yourself.
       /usr/local/bogosec/plugins/
              Default plugins directory.  Can  be  changed  with  --plugin-dir
              option.   Plugins must be executable, and must end in .pm as per
              convention.
       /usr/local/bogosec/documents/
              Directory of BogoSec documentation and other germane  documents.

BUGS
       Not  all  input  validated.   Not  all environmental variables checked.
       This program expects to be run by trusted users.

AUTHORS
       Developed by Dustin Kirkland, Agoston Petz, and Loulwa Salem at the IBM
       Linux Technology Center.

Linux                             Jan 25 2004                       BOGOSEC(1)
bogosec.orig/documents/whitepaper/images/0000755000175000017500000000000011113035142020773 5ustar owensmkowensmkbogosec.orig/documents/whitepaper/images/vsftpd_wu-ftpd_points.jpg0000644000175000017500000004347711113035142026064 0ustar owensmkowensmkJFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!222222222222222222222222222222222222222222222222224"F!1"AUV2Qa#$B367qtu45CRb%)!4Ar12q#BD ?)J)J)J)J)J)^NԔD^x7V#*R+V\a fސ.O)+a!ũ(⦵xWhw96Fe)ޤr6C VOpWݭvtY}59ԸJIIO>$DI !q<é m=}+4ڙ-+R!JVmJxI9,a=xvTzS9*uyz{qd! q堯-- '5`)c)֮QP%@ JTX#> zWuF0k%REO5"T#qNNHҽ j]IL9ei=t&Q݌5gxtnػD\ Frx{+|2#Ǐ6)E KQ;|A_=phE.R %I!+PB;F!T%WKvQ>.4Q*  BSSqr8 7=@(.ם \aMWی,drBDd>ҟi)S%YH8*m.ԸhzP@XH qW4 R R R R R R R ReKql􁍨uOV"k!cj7,)TR맭zcO%u{jI88ց&|va/ 2FMc%!crTvßե('hQ&\Sii4P(PJZpmجDXi2rO],p4Ą-}@o/v<+` KK]uVcrJ8&iA%7JL-1xqθQV,[Pc_a Tۄ+ TyÊUnV>])enmJJQ'$$g:)^`)m<}ŸuN a}RvGiAi62`FZ[:B7m*+Q$ǟV)@)@)@)@)@)@)@)@뽼]moT S22P#ѩlXWy E3y dIc*ۓm1Y!,Hm` P$Ga=!ybԞPqC ݒT֣_#LtmQP/d┼eRSaG*tYlN}wOe!ΒY a@ s?-;_+5~r= Xi,~\NW/}-;_+A4–?.g姠CK3ӼKNW/}-M!˙i&R5~rӼK@H|)c~Zz >s?-;_+5~r= Xi,~\NW/}-;_+A4–?.g姠CK3ӼKNW/}-M!˙i&R5~rӼK@H|)c~Zz >s?-;_+5~r= Xi,~\NW/}-;_+#6xs.Yɰ۹nÖIAWࡐ${̽aC-M6l2'eX AzQ׮\ ?(mT8ˏZ/ROa%mOc )I9:˿ݻXgۙ˜ꭢ@P;BqϏA{0l)$\|6@Ne#&" maJ :+BpWkut˜f(y496\>9|8[.U0"VnqoFiLҤPGA_LuUZuB% -GKl kRrEaa̽{jVAT0OV 4{vWrJo)Rn$=B -6ּ+?J, fk@a*v! Ny9w\UPTFfoe :hu) Oi!XWܔh[i,~\AAJH|)c~Zz >s?-*M!˙i&RA4–?.g姠CK3PR Xi,~\AAJH|)c~Zz >s?-*M!˙i&RA4–?.g姠CK3PR Xi,~\AAJH|)c~Zz >s?-*M!˙i&RA4–?.g姠CK3PRv=MZC[ Z򔽪VPڏJK~ݦ!z.m eI^ԫ+m''[i>?BjZs_G-1%ͭ tV%snl8be'U-PÃXl6+#IuN'@ocG<0VDA5ZK,!9 V95G{j:srwn[R]B{V8J=epu${nRcVc/.V%⃊HXHJA$!\h6*s[84UB9LqnB)p$AXԨHaĸ˨ mi9 I~W,7Ƒ%.8 wYIOh&F*6I0{*T&u% 79LqzpTM̆_QKQR+ pQ]v! qYنP(N ^Q.b"cKkuJPOI['ݑ~)V c79&Kf)o9 n`g$!R8N0Iuu{ԅ {IRzh8.ħ\N[{qDj*cۭb%?(Io >*[`nZے. ki.6uZFV n^}^8)9,4bJY  e2lBv1ֽ/nd&:尦:h0NФsWelEs(=W鸿TzFGČ 0<+'[84UB9LqnB)p$AX7&TԮyOLa]߻rzGV/źz\҈D[ H 8tӟx׵cԬ'>nd2ZI],0wNh:QcT,%yL|Rq%~Yhq εYQgpS3\8,% W sQ, -D*”a_d9ؐH8@>j%-3;R-=%KKwq;l5Ffoe :hu) Oi!XWܔh[i,~\XW:W}2]ҴܖZ v8Qѷq sjqX怒z >s?-= X^ZwV?9{hi,~\OA4–?.gyc󗾖^ZCK3M!˙ijqX不yc󗾖&RH|)c~ZwV?9{ijqX怒z >s?-= X^ZwV?9{hi,~\OA4–?.gyc󗾖^ZCK3M!˙ijqX不yc󗾖&RH|)c~ZwV?9{ijqX怒z >s?-= X^ZwV?9{hi,~\OA4–?.gyc󗾖^Z砚CK3M!˙jb62$X6jݙܹ*khs+kRO8~W/}-lǸzngUEmE r4T4R@84f^s[fB\'`qN?SMhs[!qv8)S(c<8熋z[3ʂX1sq 7OQP"[5.##79m V G$3Kcmc6mHWog* QgOǍj-s 'V11#Ƭ3;2~/cZ<i,8/)[NH|ElnZIu X+@>z PC3ZHNFI•>5GzNX_T%ԫc!CVs?-*M!˙i&RA4–?.g姠CK3PR Xi,~\AAJH|)c~Zz >s?-*M!˙i&RA4–?.g姠CK3PR Xi,~\AAJi c9>lB)8r$D(l߳@mnַc% uYz!{Nm9b?*M.s_:W[z02`FjinZ|K6 Wϭ;M8LŘ%ao2qA &nu\Ml qMe-$$d3AVp4SǦfpnM]O-7rŸ! 8VBJJrBυ~=*wqȞ:yPVBr?fnsbmjZ,DT%ҥ: 眚;ET>BхGC29qWQL*Ehz5Uްv +̘1e[j>  ĹΊĸmCxp@?ʷ/u\Ml qMe-$ d3ATi[fh͑r:t:e:/nZ&mVק_nn[.crKOj ^2ΤvJRY=/^,1(t;r'Ǫ?!UԠEt)ť:qDJ$d(#-J6.L۠-/-i.'gMM 7+L6+[/~ڷݠӪgG +>95wvF]Zn3ik9# C'$\Pp܆6^@0wd/ z4F|q 7%:^$o'rRcd1d=Dt]oBU!͇*^ w`s^~4?fssKp깼)I#ی6CշNj LiJ,aHRTR(ʂ>'TK{:VA7WTG =69r7{_+?ޓus)UAA?jqX不yc󗾖)A?jqX不yc󗾖)A?jqX不yc󗾖)A?jqX不yc󗾖)A?jqX不yc󗾖)A?jqX不yc󗾖)A?jqX不yc󗾖)Am'Q>kb){\uia%?~|Wz֩} ‡.>^N1`x犏okVdh/U j2}ÝPtTvam,*WY >~F\]s3v DY*}%=Y<)s1?ZUzB욶s4tkUA~nEjOZci@#s?-= X^ZwV?9{hi,~\OA4–?.gyc󗾖^ZCK3M!˙ijqX不yc󗾖&RH|)c~ZwV?9{ijqX怒z >s?-= X^ZwV?9{hi,~\OA4–?.gyc󗾖^ZCK3M!˙ijqX不yc󗾖o[M9l]?j%<6Zs%p22 θ4{7mPaCQ̮Nqgݭ74'lE3aoq?$yϟ ]7aBP6|q]jΩ{c JZj5]ٓx1Ie!7AyJܠ2r@'>&mVק_nn[.crKOj ^2Χ uܸ0Z:_/m܂Br2N9?.BuT\꒤vpd(~JljcvJR#u{LϺXgn DKtPV*B%E*IBnrzbqސA H# j#}hf5VuO.Js)9IZ烎h15ɫ2W7ه5K` 2@+k_aY]#-KKn>v)g;\QAWt޺Ҷ VW ;xozN|KZ߷tշf1hص=Ahӗy6ۣ˅hzzrN6"#`9޴O}&Vgкs]A[_GGkշ71O߿Í۽zpjv붖ۉ9־]鴗NЕC*?hSxU-䰩)#qG9Z}xкw f+k ]]}Nm\nSкwZS01sBP}Z4uMchzzrN6"#`9޴O}&Vgкs]A[_GGkշ71O߿Í۽x:</UĆE_)Bd2Py]#TZ7$:v ۂqsetIкsn+j{ ]]}Nm\nSsVS01sB&-82fG?t}GOG~ΖӾ\[_e|N{}>RN7csSRh]9[=[t۽s3^ŷxveiO^D&= օӟu[_W ztzxͻ}q1^S]yp:gǮMtGкs +k~ooI߷tq>j] >gҶ wBrS8Oٻwnsk84WFURڢݓUl~\XSCiCxi[_{{qoov;׬xqcoh.aM ?鿠z>??Xt7-VOԓon}]9>oҶc-:4ߔvs"ifrfC?_Nzcsߥm}z[I;ݎq6[𴞝n\ $!ӐA€$:mncv)JiJRJRJRJR|"[i-)ƚ[9A 7+h8}5vqv{Sdu!.CIJX$ k $U9Vm3cK C,$N35;`c^te C&c%J h=nN8YJ1eTq%)ҰV#dPk-^)VZ6We`[~P2! 6i)J;TA"'c̽3Ѓ tYpVSpPx Wvm6MB.jSs_-(P〸S$Tm$Atz{ܶnLM?#籿2D%qw9R7(( PkL%!n0VCLnHJw,`B//!@-l:d #o4uI9ˉ`ˍE:JHؒ╅c8/)\p1sQ4)> WeeM0%gs^#Q B xȣYop[vErbolm*+O `nqpЙlHÊy-fjRNA8qǀ2dME-/%RJU8I c9mG>es NvXi ;mDd%> EbrVp%Nw%?mELԳӮSee0c4U! \R@O?ÕcfjBdu?dLXY,$u2}$6 $dnOVԳ磿9 !eXςvUHis6ԣAȌSu;V_A9/om ĈL8qI9rUǚɑ6LJ!)W8$1sc<湵q6 :a(-7g=38KiYp 9J|}3RNM[[ٌT$IqK!<U I!1cgHBd(ݹ? R R R R R RB#iz,㩗hҶ(VjH85`~".]r"!#jSA U~.z;rL{Gv0ˁð%#S4oKSrpK@,BFݠ( $_#Fݔ.qek qr9 ~#*/[F[uwhQi%_d*7dTZ^4^ݭ#%!DmqI'5eC+yII!@Hfi}֟Ȯ6m:¢ma)JV<x[T<q@u-- HZ'Jj*RJ!'v8-+uHuw~R]-~%涠2Nw¾A;$ݭ KMJQ -9 Q +IBGrʫS!e I 7:D!^>*QNBd-<eNShJA%iP pRKa潲rmѵsZH;R8¾{Uj*,b,0]9 b_;:WMABD(o:72 B0T};lGeYm!(m {^srAls\qDzYHy֕(ETFЌH C;Oht"ޢSN@VEdÁ\Pajy(b64lI s`{y4UKjӪJL7!A!p9HO΅")# zleGQmRI`xs]Qkzw%2Q!JQ³rFިGkקQ%^:[e̶Qx; 6 [3,vԲ.]R֔Fq.2Z o&u6{ )88⺩J)J)J)J)J)J;![%Ij:<+q >5sm#qąm!2i@$(8894 +nrKYCBmIv)@zCkJmW}2Wnܖ{XR \(pxXyҠή>̹ :Q }\p*]vinJDq]J\ P)Uc"3F{ C-(H\6{B[M ŸE;] PFĥq#$MuBnT*[HI;¿G]"|uJf2\ uT[A!hIH$OAS+ŵ1%Ǟ䈉D*<7Hlds1edLmL6wa#8_m"8R֐܆𕔅pVsD ׽ŶN I#WMūS[[tm{fH9mnxIYDfF-mS $6;[N%4.6WPKxex|.{ kLReQ} ޢF=U$$>뽦y]ڰO- vy1ŸIN}a1_AgoDbpuد{m: `q"T,< #z\T90uLŲRxWu^-(L+0-3ppBH 9Wn^ e,]uVl)GMI@# >)n Y ٖK0_nq(`r1^fm0 Di-EB*Z!;BAJGيj+`192SRxg#> $)YG":H$1d0]%}D߈x`lW/$hnLrmKR# [',d8˗9oSjS_B$Jmj܁{Q3AZ[*RBARIБ׽qZݖӚK3IC O5@)@)@)@)@)Arst4 8[S)$crk>Zv#[bi˒~3 IxR*H֤Ȭ΄I7%CdskX$n+qAdW;wH*pO4rq&RNE:TJفk.kaʇ)~9F$I {8qseOERhRxRTpAWugmy+q{BrpR0V\Gq7SLBR(Ir=Soh7%3vZGr)+$C IAxTfٽ2N޲ \IId ',i}bWMXfCOUmRU;}pT%aHV%AIP?RAUbd\fNk4(9)O$֬YP- PYY |͊` $emV,=uW-gtrP h ǨrA⃲8 t)`\ʷQ$nݒNs]l7lun8 kZԣJOx&Z,Þ%)2f:TDtNn#i #Jh;lb#lYȡ+}]T=l =$ڜ jصaj)Q 'kkȗ2\ [.2qa͔v('>)քF\yQڐۨ J ~![a[X#9Ms ō~}K}2p!d4 IbMƝf\(ϴC%IZPmZO`(5)< RAǷ+ H H +Afο!Z.G\eAҗ ].# vA' `f6j%ejڛ} K/))B3%Mؿ-]8ꓱmrRρxʁl73.Fy/.:'nCAC\,s]7{!Ii8BձjRO3s.d\d6)^QJN}CR=9ةKtQ)34F݈گW FyO;msE]"۝yv 亶 \$xA%C85PKi($t%WԘd]aGw<*RRRRRRRbogosec.orig/documents/whitepaper/images/openssh_score.jpg0000644000175000017500000006503411113035142024357 0ustar owensmkowensmkJFIFC    $.' ",#(7),01444'9=82<.342C  2!!222222222222222222222222222222222222222222222222224" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( +δ}zψ5o`ԥӬs‘` 3rrqU #{Z`Y4EY,Ͱgdx9;r&;+4Qx];F6DOj`X $8*N&j[<:|*U)8R l P^o/ī>j~#PӯDC-ƅYsՃ#]:aWI^f$wr Ҁ;:+l`nkgN4R 2pT6/ڬ&o=P׼(,66 |nj]J`9LixxT[ >لG8j&WVzt7v3VWRѿ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s_F3iRP.9HGQ冣kz7:ƠRAgliqI'=+X>G,)QmB;3;DSyY 3sWd)yN˶Xc*^<;2x8!}N(R{eXܛ~UԘ; KUX?jP1KuPr~SJ?z!}zI?!?L?$Q Bf"M]T\ޛ]PZ=,Fsr+R$: ?!?L?$WAEs&k(T3\_]CЙ/HSsYEtP? Bf"HuO5eQ@$: ?!?L?$WAEs&k(T3\_]CЙ/HSsYEtP? Bf"HuO5eQ@$: ?!?L?$WAEs&k(T3\_]CЙ/HSsYEtP? Bf"HuO5eQ@$: 䊱cGlly(fnzp_Nkb((* 5J&xvW#p Y<Wk W5 |~[K!{P]-lI3'Yvd9\nX)xzKJ5$V8,(P1cg8{:DǨ.$[i-o汍 #(u854k{xa:d"DvBMoA+i X'# @cUX݉]v S{}H]&+V+E,X+Kho[^_ʼn%}j4|(H$Njޟe"x 騮u%فjO)|aPN6 t:fn5MMP"uj\Xqk´+ 6lͤk̈́6I+Y\uԠץV-6 2]i;2̀ cv<DžhIyfxѾ< 'b+v[npv sӆ_i:mu]. >-&*h.OЩ& >&*h.OЩ& >&*h.OЩ& >&*h.OЩ& >&*h.OЩ& >&*h.OЩ& >&*h.OЩ& >&*h.OЩ& >&*h.OЩ& >&*h.OЩ& >&*h.OЩ& >&*h.>ޙy凇Kh, #  䪱cmH#kWJg|piDs>u ( ( oMnon|d.7x29"+/^jy_Wygm_ϻM6STkxoI˘G92w$ gmRxSA#6%ٲTmDOmA;U{CqE?7ʿ9#7Ȓ m6̿m.o."ڊm&@q [u -X̌2'Ȅ0 qrCrGZkjv"}(Jn~n^O4ۯFo/Y:3F~dIdk !9Cm?O>f}7zxAѮTwWI8#>Ƽ+B]&-a<ٌd{" XJ&~?MDWNyBfi>%uH5 It 5LU{q0hյm6ĺi.XZ:z_\TKVU[;<oH=P%m3\G3NmF\ 3.;( 3\V#Ωcyc?OVA51ס*xQjQ.KyM$>fJ,e}(t5(̗s٥ӈ3wI OWӥsKENC^?; z a⪝쯼Ef{4qCn!|~JtW"GM3Rw=]8i!7t?t%}:Q.`\51ס*_hຝZym9HoQ!@ 6/5u;^ۨ6s*4ޢB \ס*NC^4?h#[].yex ,<`,z kp9NC^?; z a⫠'~C?U?0UQ@'~C?U?0UQ@'~C?U?0UQ@'~C?U?0UQ@'~C?U?0UQ@'~C?UXg;j7 -A 2nO|P# Q,2G}m&ج@wmxgi8m xU}Niψ4kBPHaP&Fxq<լĺwsN|A]bE 23ˎA&{<%nLq 5,W)>lr2G85k.ve3i'hgʹLqc9BxU}Niψ4kBPHaP&Fxq<լĺwsN|A]bE 23ˎA&{<%nLq 5,W)>lr2G85k.ve3i'hgʹLqc9xU}Niψ4kBPHaP&Fxqlr2G84.veӟjM$hy8LcxI_V8mEHl2?.98MJMNLj5%j,FR@aN9q`ogĺUisN|A7ؑEW,23͎ &{<^%ҮLs Ič/2g ~lppO_/I_V8mEHl2?.98MJMNLj5%j,FR@aN9q`ogĺUisN|A7ؑEW,23͎ &{<^%ҮLs Ič/2g ~lppO_/I_V8mEHl2?.98MJMNLj5%j,FR@aN9q`ogĺUisN|A7ؑEW,23͎ &{<^%ҮLs Ič/2g ~lppO_/S_j+}NOqj3_x$oNImI&2_ۆ#`ybs\7L~E1ZJf>cGpx{ Ko]|?"Z%`3k1cu#U@]C-LV1:\LoM{]fwӪheӥ`$,$ {T\6_^-iq-#򬧺<{y%-EFҼykR4yd?-IL0[U{T\6_G#ڧzzXm+ǖn#Aq'K q Ԟ?ztΧ5 _$Xŧ[\\9 A\̬@Oʝm~~ ?j9{T\6_\{KMJ b fh` wmyaJ,+_jWP_k3CF8ck ݿ@zV6hgAC~lGOe|J_s/ʍ*MC q$ːv7OJп}ޙ\xG\'g,PK zPZ0,=ߛ/G:5smV5`;PG%!Vt4O-i4 xD_&A*UUSYONcGlly(fnzp_NilQ@q*ţOF;2=rsb x^Wk]">CTO5լSf@sN)ڽͭ<0vK<ŀyҴI:0ɍђ3$dt8${iښs[ |ɷv#ut$qFFFEP!iAkw0Mp(ʓZf4GiLk[pYLn%Hu.^]4ㄠ`qۅT}x{ MZ]BKȑ6_f^8|?4}~6$2,nVC' UMCHťyW%^L`O$`0;67PpxNOj~z ;#WQ]zE+^[My˿v/d>7=tM{nY =ڒ:@-u+uIcu+´+(gj^.[qq+vw/S0NyBgQǥ+*5uOeTm2 S{ᅞz_x9ɣI ĺV]5$ޗrQyޫ<94>_4?tO{F#ΗcjA?t9jI.IpV9;yrht'.cß.KZU?ijKE ܶڎZ6RG=3ijKE ܶڎZ6RG=3?.υV|.LJ?\B~ o5ėh9lzg= o5ėh9lzg=@] 'EG@?,~kξO/f_&w,y[*{[:d:i.>X]Qq}NJ Owиb .GU;2 O4jGCw,JN.Ψ8p%ΙK{o!%'gT`p8`G_S_.?O#o(ODr?_XxyW[qMQI*B%S*998UC,d,ඎ(vѪ=5mC/Nk8m$s p(O i6-̺T^CCf !i`Ԗ dOɓΝ7&\#%{ⶢ+UITqI1'.r98w*M}V-m QNeW9HmH<c#4xu5l[NyIolY-i. ׊Oa5.00YmXI/8 Ǎ$h.%)>oED2 >f;rr+B2ϩY*YOu5lKۓoʿqOEpmg U9x О&̈́}yQV;76ܮFNܐ7c'u/:5ޛc; u"b# 1gׅhWk7'1ldV!7A9]8m xU{KD? H.Y݋=1N2x8դԛĺZ& D rYa2vq&i>%uH5 It 5LU{q0hյm6ĺi. Lr^n`pvsi>%uH5 It 5LU{q0hum6ĺV>i|A8yb*iN0r0sEg@45%.$AܲŻ#'p3ɩ/t }C H-ؼ<8 'VmKjiV"/6#i|A8yb*iN0r0sENxJ'-"ψ5'o2EX^m;Fyȡ45%.$AܲŻ#'p3ɩ/t }C H-ؼ<8 'VmKjiV"/6#m*4͋X QE{P]MI,V~Difr,Vt[}9Tic ֊~̚Xxl-&>h5(6q ^x.dԒKeii4 /5DѮ.EsJsi}u Ki>m*4͋X QEέ:--%sL6.9`0=GAtR qZZ6|A`eYeV͗ Cq=_ù5!}iS̳,e!xQm6 xKPMBoX ƺEW A\"9e[mLḊq$`uPM>ik!YGnnءs|Rַz\M@Hf(C+68_+xIJ$d0G*9L>`s<{3NX-oF#qsb|So!sr2Cܠ *dd92D?fma ͺʱg'r#:lR.X#R>de# _8IݮaJ0iZӴ $Z $]7Ό$mxH"dѵ,/"[ lY>Y27%cH4'KfXbīqFx]?RK:z_\TKVUOVR_wh$h,[gfBp8#<zU{G? @-b݋=2Fpy]?P.k<1ʍG/=S^=Z=I|K=ݣiṈnŞ #8Xp7#sCKTWh<11M]*8.PRwfv/7,H8IRoQwh$34[yb@pyG'υV|.LJ?\B~RK[O٧R*Ȅcß.KZQCr_ ҩ=J[ .wim?#{fJ׀"ss#ԥwv?!giԮmx !8=Ut2{ں?O#o+Kc7 |{-*k0p5s:k+H`_IVqw0BgJ Owиb .GU;'Y]C} MlҴXTB<|9JMgq&l"Ut6ݜ9( u[ r4m$ EPfd3T5ۍw:\1׷"4Tc 9v~$dV&X g; v0 pކZm\IZ O7c  A=jjwQT4}E$d^L| Ƿ AZZ&k,]jWVMe‘ v n򔜒?yqSIxMӚH-a蹱cP 2mu7fºnS!P7' @*Pږg\,Nn.#L秨 ЯbMIM@ȬAژ0#?Dz o/Lյ8'.wb 5=.YLnOE%u@xmȫ:z_\TKVUкmN K)؀xM}i*Ky(|ۓ3F?u]E#i%Ip?e8rxr*#Ωc?y?c =[S꺊Gv  _cJEt ԟbZJ?t_<6s`G/=S^ѡǪ+_/ zN%ҵ|A>Ĵ ~Tym8IĺVݘ5'ؖay*<5sCKTWh<1 tE0jO-%ypU/yr90hu8 .wf I%.^cJ#nG9 \yc?:_z N *SGv᳛SƬ@1Q N *SGv᳛SƬ@1UυV|.LJ?\B OUѼ?"ki-g6X\cUѼ?"ki-g6X\c 1%Э(]!ع/iE_yB584 Oqۣx~D[mO+OQG584 Oqۣx~D[mO+OQW>cß.KZQCr_ Ҋ?./i{#Rv{ 0vE!# u8b .GQ_^BΧ;{FaUcdRr9b_CSPM=χ#0K*)9?O#o(ODr?~u8,lYT]HA}.'"عyB'7WЦxk:sGvg@fJbX=_ýN93˩W[IZ >ޔ.?)==Fp'WO*?ޢ?C+(n]GKh dYXgRȲHP}FO4E+ľd+48L%`G#9 C5kSk-'HY`VD6y}9X5&}qQW"B䷚r2EFP? ϥݵGtc3LDę1':UXuM"Y  Ř2,qh-R67elg&2L&V ;[ib5ié۬HWi|ߑnsj9b]Bxiu O q=_n9rOrk[OK }w[PbQ'Vp0 <Chzq6 ]JqyXAlr2G85k.ve3i'hgʹLqc9B%t|A lr2G84.veӟjM$hy8LcxI ĺV]5$ޗrQyޫ<94i:dJӞKT /1`㓻'&&xK]w4}!($^er#<2i7]*4˹> ԛH A"+p42 Ki%؀xRMw*K|ݓsFA?t9jI.IpV9;yrhogĺUisN|A7ؑEW,23͎ &{<^%ҮLs Ič/2g ~lppO_/I ĺV]5$ޗrQyޫ<94i:dJӞKT /1`㓻'&&xK]w4}!($^er#<2i7]*4˹> ԛH A"+p<Aj .86r۶sj9hI:z <Aj .86r۶sj9hI:z <{=.>LV1:\RzȦ+VX ts ?. 2 VP\IvݳQFHqQ 2 VP\IvݳQFHqQ o5-w9bhͯ|A1<:7L~E1ZJf>cGpUtijKE ܶڎZ6RG=3ijKE ܶڎZ6RG=3^cm˽AχSDm~c: qq/gԶeޠ)բV618\8낯 ie#^u|{23Y` *Sܹ Ivmx7rĤ siq-#򬧺<{y%-ܹQC]ݤEXZ ]Ͻԑ?(cJ Ow.t/X]Qq}NK$A`{#~PǃL7Xx(t˻K D9' xRG$+UA/CbxA`w*FlA1%I1; ]ZKVH=q ƺEW AEPT-I4ء& %Q 0C| NHY-op]ZO#(m22 @oZaj;Ggq櫷HWUiTς-RHt5ӅMM21N5ԭPyьdc*`*1c%^.x566-MJʊY؍nܝrh6[{+ K,yދnTjv[֒MB/qKnAy Rb!i J)Z^k-8u]>{&'_?hl+u/ h:j&}:E%`''$ׅhVmٛH ' l|V%/C9]8m F#Ωc?y?cSմ6ĺi|AHUb*p0rr1MxU"ψ46 EXYNF9ɮ$ǥ+*5uOeTm'M.EimX6sF%t4H 5 BV{1rh]?P.k<1ʍG/=S^=[ImKpiijDV", c'#Ѥ:mωt.}>]sCKTWh<1:Ns]+KOO ԐZ<*Qyl#'In|Kis GZ /6c`P~\yc?:_zzNJ%Lj5$ AT^m8It۟Z\}xV*ͣa>_4?tO{F#Ηcj>%ҴIt I­UF10(t6ĺV>i.ta- ȭ˝'M,{OI4* b S#zQs麅/tK<>m$Ы-$eNTAE{P] .GPb StBW}GhU2*GIu \^3x}IWh[g(Hʜ9Ҋ~'WO*?޸tټ5R]>|A`]*eE͗ 3ps]_ý'M]%PSBT_¾2W'?zQ\%Q@cn4 )%_24QZHDeP'1sآ9 k{޽m=<˥E4>V` y`ʲ:QYgO7K]/ ͑uG8fvq@9ٞpk3L 6t򽛮l3cHF局v")İgMEu /. [VyK`‚q0k2(5nKM` Z{Ųy <~}xkFB->bm1a(6)>x)rq{bic*5aH O<FN;i|Ogiy56 G՚ݖ7D_(==20i|Ogiy56 G՚ݖ7D_(==216fmagkkC n'j(FO'j 4VXhҠ C,o?98:5 Y={Mm-5eU&fB|q\'&YOyN͛wgw9ϽTT|Eᖑ['PQhC40N9G~S;ǯiͥ欰;O8냓S;ǯiͥ欰;O8냟L [q 295M^iuu:Ha {IoX?kyXvZ]elRR֖oʘXJ' 17Pm2ex!kFO.:u&wW;e0s&S,, Aq"H#?4h %ր::rKlMV_ڦ|<ϛEv5F Gʋwä%N6Psu;*rKlMV_ڦ|<ϛEuWsmjEi5Ӯ1 %8{*ג:W [N^5 {k- i>_`j 4ش<@mxAtjJDu+n :n0 `q]{ X@2!SpF6=t[? It. %& 9mn_8ukEѯJVH2<+& VF/U4!c@Y8W5uhmge2RvFݸݐr6+3֞dЮ`e77ՈR2ǂd|g;Gyp$"n0Ic H>сkJo5 ;vy-1ֲ;A|m<ݾg1n֭d+TUL, l {VfDD0 W;eeM%/bm"hdeTυ`6F'&úq"%AmgNʷɅUB-0v@\6@ ^@b-p!Ssos wQ@]Gej̉ay_cװ7AXizpEW?g{Y!d!2F;Ǩ5ᶽ[m&C]b]ژm-h˅*PA`XI$1x[WBS42(C #u+mY^F";Fk_ċ!@ >~rI⺪(#YGص K{wYXV<Ќΰ.$eDӎsD;{[RKֻ6yq)QNyO%-aI̵BN}lgîXi~# [9n#yɍkcP{hGƷ"Դ YJEtq(9,|EX/c 6;yu_) B(yp7OZ +ȾijT {#\ʺޙ&O5Ww.s/Nxl/^լ$vEJ(d`$9\ЌK+xQӭDm˨~VcÉx'5cDӦͶ$3)Uw*;@9(vu?AxLkV -.MN_J)!T.>fl18[AOݷϥ^ȗ?Ql2F8wYy߱[kH̏d@="kt*j5m-ޫp*z ^5hӴ 5+4z"5d!*$BI}YxBy59{f׈ĤK6Nю8 [xPּ9kPKfKqS 'vӊ?<ty`gQq/\gڀ;z+̼K$3xsᬖ}t0q{ivO xjYދ@$a@Iǵl\]&KKq}6wk&/T%|mZ-k]=˨%iST3ԑB$1cvPY N+q-#FER]>r*_#Axo]î诫D]f`[;C98$:sYƳqKg{t 4#dsǥvtW; O]>[jr٬q>眂z$X0ogb&[nVlPw=xm Zkv$֐@nO3rod swUtlp21ޥ, c#4^g\x-:j/lدFhv~+AuZ٢(((*gо+xSͧIqPs t#굓~M׵b&kYi_-6.GrO> ]}4$1ٜyYg?_z׾׈<; :e7W:E`',InHcF<[Q/' A+"K _WxK⮽5ΕMk]Z4!Edo1XEq eַ %hg r¶U:O%ͫy20MzM}׃嵞]6 麀xٲ`HO_hCuܝ= jv.[F[ΈP (li~$V\+G~"Nusuz?!z'dbIbm^Es?t+xUҬvcWX3J&ןѷ=9c\>PY738^w ]9n7yLdCdq@kew K3Ԅ\yg>f: ]GֳGos%Wlm<t5Q@WgcG5 ;[ 3Etn`0P 'zݬ7s\ x'+ o&n֖FUnw(!<0:L]OYaVgHot8$YC%pMzOHˣXڀ\e7-Fмw<3S\#bx,7~c\g⽦xbZƫq@cJmF q:Gz[.xs:ͥͨh.IJ\戇cP_ xiyq.#5 G=DjŜ;s(I8 1hѴM^/mgċ=_g`ЧpwU~e9)VȕPB ;Yx$;t]sKkvIZjZLY>o p>8[zօwu5ۯj#)e@2Ĺ :Ů[WWɈIw.ʠ.ζS3tɠiw5E,[2]=€1Wš4vojgI7L0d-p8Or82چ}o[O5SčЇ$ AqM51+;}>+KXpDQA''{y5y%FUס*NC^(ס*NC^(ס*NC^(ס*NC^(ס*NC^(ס*NC^(ס*NC^(ס*NC^_D֒umfȌ6P1~,?5}J= O$T ($r}Ar([NѮ:lMr-ė GVy^WhZ֓f](G1NA?(uuM%n'DIYixhخy(H5FJ`i@#ڧzz??s?͗#AEsj9{T\6_]=ߛ/Gja|qE]H4yقm q` ֻzo#~^2ֳ>H9.)PoYxj`pAR2Z(8.=kwS=s=s>e`kUne28Xj{ "\?s?͗#'kW:+dzcX"҂nhL XY)ᱴ&bFIr3:?*u#?/$WR(8U,C7c_ævro=;pm!`FqǷW7rCW6Uئx,A$&z|=O $cNVJWhqѻ~F\=9b'NJ_7|i oq^UWq -;S=k/xAֻ'\[E  kYcųl%ViZE}mWk'k6vg߷}k#*k7kzSm+7x|g>=ߛ/GS=s=tWY=ߛ/GS=s=tP?C~lGOeQ@#ڧzz??s?͗#AEsj9{T\6_]=ߛ/G:5smV5`;PG%!Vt(((( k Zj.U^h%V_*Yc#˻#j |qL;SJՄݺ6vZKpm+OQF{xLB.%l'T\c?1ÚYҬo ?/v.sn*vzg!/3˂M ca©>ך)&sgOЩ&A<B Z+o{`bIǠ>F+.cAݖrb8ڽ'T]G SCt?MWIc""I^)` @1rϦG$_<;=I'(\F=bNY,qG+  h*h.Dg# s@81g}-$VUHY=R@v=p}(v SCt?Mx?M5}{ewQ|312<W4߉mKR\Ik]ʡ X8'T]V,|'2;VQdYGA FA#n[rG%ʲ08 AVM~Ci/}q ۔?hAu(ow ei #G<8u_FiAo9ǶfxX1wABR XHq7hJjS4:++bnb6vf,ǹ,I>P%Đ%PY@9ͩcHO7n)`NzsL&ՅΟo[Z-6(l"% 8#RX̽g}@,"A;L`H3:^&m:F]kII6l gܧ4uHkےgXwp0yn_l٬4yt/eFUTqm1 cy%FUi~iᖂ)-5 gy/6vUu݀x`23ukNmgF32&P|]rI;pr1M7%Q?wC4@M7%Q?wC4@p^7A k[ct?MUxb/7Yfymۦ1$R,'PyNz;o4_E@2Oto_*r&SXZf'(ںWϓ'nیdxEMcf }>]T3ğC>#ș'X\5?+aQWAoG=d;E1}8\ަ&d[y#s؈D.j `z?%;|;aS9cKh5jZmd*Z-%gcf{clsX}GG?_Io]>"[z]/#?x'LHc Y}xZ ^@^A%֞of@1;y|LƳ]VJ\&T[#q 4(j$)$85|8XÎ_Xf}o8O~AE~>-GPǯiL d ݤ Fe* hj7$P紉 - ܈ G|dPXL1JHF O0j*ۛBMEfIiDsm+j ;b3!m46y'p(LMEb.![ P` {b9 _ך.|3%ƭ,| ۋo',DaYO3Lռ1qumYj!mF 䃝77VaF6 ns(g2*uӧbWXm1Ȳ0ffF<Mf^Ǫ_ &C@$!dn9P _IpRjI Cp-V5B{r'$0(kGԆ%ߔa}E,El7dupXgg^Cѿm*ͦ :TYgw2;(,ǀzs\ׄ֓v>zjV[P0n@@8e`kG*FU=;LUՄ].vnm-)#OAFAx y.Lrnl#L㯩?1GxX˪̺[9Z/~-~U߲_msNw9SU#O'-ay4yg9K:QWgK?*?޹;a[+Y{$uԮ-e_>;=?J(hZ CfkU${5kPbQ$GNÞk/xA֌owu:??ҹȩ׌F?E}םZl6mn88ȩ׌˾ xz'$+{gl?*me$s8(Th(w ѷ5o?5cFAx y.Lrnl#L㯩)Z+~-~U߲_ms:8Mp^CI-o_Ko\Ev_G<3yw%^玝+[: mIu0ZW돲۞V7PO=qG=k?ڟoZ>ș_\鐭_@BwȦI؁u(嘒ܒOz>hֿqm>}}'>f_;4c?/#;(¸mbbH졜0>l0#k]D/^I1Ybf$rz5Ezwe-luKM?~ZfrHݑ`A&+KYͼz>F.#qrx6}U5)-ɺR+,f@v H$vL|sԵęu|߼}MsWrSj-oks{ug$Qv,nC.@f9jlkd?obF˲ T[mo̻FaF\10)#ڭMS* . o\`h='\? [m5#ys!8qP}2Woh-q5ƛ]4ΞR)-rd9*Jqҽ6O1.PIMpMgm*-kW֚͵DwklT˃kWTfjCoz#I*ǜほqž xw?)ߍ_šwW4rГqmsEW4{}<\CbY%XawZ?0USş [MJְ][Ig:6-.Hʞ ‰FȺU.NC^GߋoVɰ>p̖qn<9'ƙiS6"4֩*@RxF/esbթHZ/ӵm7FՅƩZXe,S,J[Ͷ8'ƍGVu_iz Z#Ik2ʡۓTq*?*F?(w ѷU0_st}caXYkHKqGOQU#IK .ddH$FŬV߂?o׿F]Ve(ފtߥ,;ĺ?MoM5u"be8#>Ʋ4yẂX]N6 R#5=O $cNVJ,Ol'Ş<6lAZ]G}c7R'# ;o4_Ew_OOҹ/xA֌owu-YQ_i_nk7c<ϳmٷ9ݞ15o5@5ͽܩxEMcf }>]T3ğCϋ<7`xJd0^#.' N'oST8`Sy$(I9wL?iҨKtlĺ6u˴vI+- IHzg9ywwoyh d?$OW;I.(HzFlo3 .̽3g4m[MѼueqj06v%mbp DZנ׍mU<)%W6ڈKAzέ>: KLFeCy'#8 Tt}zcaXkHsg=EK(w ѷ5o?5c/F ~'v_Gh$#bpÃ+[>%tg3cHm@b2ϱ:~'޺/|EaQb?`&qd%ż$l]MԤGkqqڶ?nBBy3}r? T|82?ҹ_GvutQEyeQ@Q@wc5a-^=N7f,3!=# m۟ڶ_[uV%raQ"HUJDXw)88icxC-tYEGj&o*dzg}]7|j溗vтy'FAѾ|pLeEEbOZLO60Y}߀ 1s4uO_%t_ £Im|L3%\GsNȑuVTϠq}3l;>f^V߽ϵr? T|82?ҹ_GvutQEyeQ@Q@߇ծDomymL%GEUۂ >K e4oƺ}yX hϟں(m T[E23\T~!/:zOA[Fʓ8ƊӴko%ܲq%ŠBQ䕥`b#,Wzrυ.u/Yiw(fG#vY{ed 0nN3}Eu6ˬwS#;\Lb)78V|s \jZ}͍ߋu-bheO.nF0ȷ6"/-XQٌxn 7i9ޥhF2W I5[ͰDsQpQIY" sqqi<-[IL7f69FBߟs|+uhWSԼSե,(XrH2O88֫[YgK{:">w_IݦmVV+$w [Dj8$&IIY¶Rt<*mʖ0c}k/C$ѴY4fKU\m.#Gq]n_>4WOik{f<q[7'Wbx_>,RnTnS d5kԎi]$+<hŕ~`I%dp\h Թwr_{Nf2 70pBc sn?l>FVbׇowQf[-lit\T EM̜Z]V,zeEf\jB <0̩-,xth-ѬdY-o#xhwH ndSSI>.~)dGmvhilA#5n?{kx'diFBq`ßZ[mQqsY}4;w7y*1I<2NJ<9?w)u-O]_YQ-,kr9$C'`VcuĺH}K 1Ej>Hbk2$qg/5{^a| $s#G=I.^[,q/6xQ6u 2٦hT pHN)<%keobӞC%++##n'=zWGkV1YF#FD1p 2@65Adi-أN2@ܧiAQ.^[,s|8[۫>gq$ϋO*#EzUK ]OLy(ך;F e95dhMOkbbp9Ұ״K -s7Kad_N=98XSJ\Yd˱QݘƵ ?Q[UI lQFfbJ¯ ?.*o˭F+,,+#KOvأ0<u9I&A`*@((((*s%{u \"@e!I :?Y+Qٳ"R.sx^)?ҁԤn#weYSؓ@<-e+%xQ! n'Z<.ԭ54dvà?i] &̐ yLSj A{]FK_=7pC'ʪ ll'=_+"!YM5$hOٴ*) nlq 5;!Tf<Ԑ̫b OZ}OUF -#>"3Ī`I'pCSH %Bed+'fNЭ@ր91jNس򢵖=^;77 w=Itn.aci'$Te'GcX',Znp]N.2'ѡCඹ7PGmGpX5B#@}U# H-Y#ڒ$E'`2T +Nfgmm]s&(q;e(((((j.n*Zy_3Ϧ=x5-qcq,,DȢt$c^22Ēv{h#~xoNhS,[!`xP#uǝ4y^,@&`08xz=:y/2%"x9JBJs+ִt{>fI@22vd84hVڮum#R[Re;ǐ/Ͱg={^#{ŰX&iM6iXc7j4wsw 3u lg-O;4K!`ne(NL$OF@b C@ ԅ8k ##$dc ܭƔ86Št鬂E8#\'E+ygYtMR2Day1L!8^A{W:],bHZeح,XNyy|C/.ͮ,5r$1$0inKmvreq䁞@;}: rywJcf4NUHeMU`8Edմ{2"gFGڮ*`0zq/VŒ-:x[2N qسJL-I'מXwl>16tL"~>@;=k4˹/;ɭTPYA7H+Ѵ5]%hon`G 6-)s-:ŃGoC 1:o--`м{ymIdKvԦH9]Ɛ @5u؎)s{پAc[~;oCm[yJ&u* ڀdPO4oMI/.B8 gapۇSu< Zc ")"ygCh ĮO0_cj> 7 $PzDaBՁO 7Ⱥk~pU0v$sM#\]Pt'Ksj1ŽV%V;p~s?#,嵴HfEg wrvq: n܍۱-5 T ]C^\[2"O)0B;d9tjncK<$Z?5qӚMz).yHmۆKg +WYN;q^ny.B䅒E;cy CHc؃\ G K$)y<=>d2O#R<'!p{j PYZ-A r pA/oJPBĞ\E~@Xp8@.6̘睆O ,𑎧Es X۷d&BXaكMpY 2X`|A~nF&Фh;Jt]g#[M6MMe+{BflMm@x{fm>{җJʐOw#l6XyfiphȊC%=@EFvڄOɷG0Gv;n6;xxMkP[i,#dvJKA"( (i9!zPN,D+2[UIÌ>:g':ٓMm4_bܜbkzv=᷈F≠n 1v6bM03oٻmyMs<)-?5ŪU9D)CsrwR}TKx9I r ϡ. {b RU|FOizڬwksmťǑ"E7IV"랽h]%7>CHaukm?3؏ =+MSKin G-XCaxv98sfNkxൖI7** GH#9 H9u&մxD2y$k&a22# Т(((((ܾF1ye+M'f0s;(m|q}&oh -"}}|V ֺqGfic[d+}<fYSOb<:ƛ/{:4N/wXiڣeitB3-$aNJG,*ƻx_a{cݦ1ފl*U^j:ŭb\H;67v`th""mFOXl)` *dacjA5EQEQEQEQEG n"fYn1 ],eHpAvuOsy$;_GyO8Co'=\O5+TYdhKT$ xj=g+?7ivݤI%eMu#j5r9yW 90uddnKy(y!C}UXab myQ>}.ϛ=8YlW%}h+HGrvN2}SW76Vw`4' IJX24Ѝ@CFg2rog|?rQԭ繚#IY-瞞vXI~t-ː j)<&-y} }IK?'Q@ZH+hK!v9:WF@͐CI@ޭI5=FŻit#B d9ܰp\hHX7d;vr튆=kND } wY##'fhUY&92~#( ( ( ( ( ( ( ( ( ( ( ( ( :!ԧkh`3Ks&2r̠8d^kS.tG6%4sɧJ`2;|%45 uӏ,T-!x=+>_۳g5QU*ljW2iwwp۵̰B$ eRBrF?m<[s%qMoaa+0 p;xt~#F}̫sms(V-t' xRN\;,O\[*1i# rT.29aW5;JNe%##@>@dxp^$a)uY1v-CRs=>YFx[9==kpN̊ȲXh(gfjެh6#3InFD'cVtM;+ Kn(eB$Sԗ.wj]ɏB `S.Ih,Y̎Jһ;p'jk]P gei #V9.GL Ҥ}=WN!X07d`jJni$_ȇ2*a`` aamYGiiHS$ʼn$IbI$I$I&,EQEQEQEQEQEQEQEQEQEQEyk׷0Iwpuy經MUKet$L"^V5cu\n|AmHxQ9Tc;j]gQwkV eͦ=2ܪd a2(hj/E>{G i¸RP-%E#ZA2YjFI+7-fsX3EXN q.si#YMkK]6+V;;*PTe d񁓣oI5ŗdku +?+|GEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPT4"GӚidipr:(-09 iC*Ѵ{8@Xn F8(}"F]_TM"h$[xD±xquTP=u:/cI'1@;_r$I4Uvķ:yc<ѤfxxUT`[u'8M—W:θ-#r~hC8_dMun=ou|aC`w_ ( ( ( ( ( ( (?bogosec.orig/documents/whitepaper/images/openssh_points.jpg0000644000175000017500000006107311113035142024557 0ustar owensmkowensmkJFIFC    $.' ",#(7),01444'9=82<.342C  2!!222222222222222222222222222222222222222222222222224" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( +δ}zψ5o`ԥӬs‘` 3rrqU #{Z`Y4EY,Ͱgdx9;r&;+4Qx];F6DOj`X $8*N&j[<:|*U)8R l P^o/ī>j~#PӯDC-ƅYsՃ#]:aWI^f$wr Ҁ;:+l`nkgN4R 2pT6/ڬ&o=P׼(,66 |nj]J`9LixxT[ >لG8j&WVzt7v3VWRѿ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s_F3iRP.9HGQ冣kz7:ƠRAgliqI'=+xRUIZ2zA<8 W}텆jܤ!Hdt$]#:}fJk[`|`['si\lJ7u`mBq~Ҵ#qJǝH$O>9^V7Gfd#|1ߏ!$m;[n9Ơf1-%c;\ H(O !+']WA@&Z_"4eϮ+3]eϮ+3G&Z_"5Q@&Z_"4eϮ+3]eϮ+3G&Z_"5Q@&Z_"4eϮ+3]eϮ+3G&Z_"5Q@&Z_"4eϮ+3]g뺟'=[i-ϕn[npqc84 >i=%ӼGs{A 6/pޙDN5r{QJ}˥Zoۢ tJ@outu⹹ >G?t[[yn."a$/$hdLXs\5Y5lZ[m%f+9Č:;kuc5ehY tSNTm\ً߄.:P#,MmFXU89 @GZFl6~~;tOm˲|G,b .GVӠ$Τ|QңQ{#\kar??r :'G"KC5ìg3wŭ́@xN3I?@?\AVao u[\Yj7w0Z&!.a\"<(“}(BQ7t FC\'7'"عySSϯ4L=oɻq}Jfs8=} IxNtke{ky&X!V*Cx:mg x~'Hث#vAr<ΞjĈwrϱ.dbFBOASR №jZϧ ɦ\>Wac{׍uˍ#PҾpG,ol)V2<#ǧ"عy[_浫FՄǡQEPQEVo5+AԭckXZfI@ ʴO4Dм.%Knn%h$fCDXt! qDJSMg.ſv~f jk _]\џ-ɉG/=y;s槃-M%VWʊY3ݓ;`PZx_΁㘮t6Asm3iI \䩊$hGpGr8_~6/5+nXٚhqv@X~ұA'>tZlӼD*Mk,C Sr\UΓ:.g=Bж.P9Pr=:NXxOM Bػ9BFTAJ -~"LOо"ekg! 'm~]k=? h͝0#8sw:NXxOM Bػ9BFTA\:na㫋>{OI4* b S#zV◵_Ck*E5yRxoB:WMm$7S1>ۯx[^G?(<7+Ǐh쩘m̼|#zW48sk)2免|E hχC@N۱ʋ =?Bџ#0c8Gs麅/tK<>m$Ы-$eNTAEΓ:.g=Bж.P9Pr=t׊^~',yuC7aUEd6`QڬSV𿏬-V{|،D oh^'M,{OI4* b S#zQs麅/tK<>m$Ы-$eNTAU_^Kq?@?\Aw:NXxOM Bػ9BFTA\:na㫋>{OI4* b S#zQ_^B'7'"عyTt7Pis=vvrʃ=(tBW}GhU2*G_.?O#o(ODr?:na㫋>{OI4* b S#zQs麅/tK<>m$Ы-$eNTAE{P] .GPb StBW}GhU2*GIu \^3x}IWh[g(Hʜ9Ҋ~@?\A?ʧs麅/tK<>m$Ы-$eNTAEΓ:.g=Bж.P9Pr=At.'"عy[_K'M,+G*Ő8ié۬HWi|ߑnsj9 H$Lк\y_ e3jڕتFWda2OrMQmmɖF>~a>Q?g@@鷑r\̶zRmX8i.b`ERL~8`SF I9hYA-,6 Ds$7H  0J:5ay|Mݩg4v iL~*y`)lF(V"])S )lF(V"])S4/}W%иb .GU;)lF(V"])S ~@?\A?ʧse=͇SH|>$PEg_z1>RL6SxXu;DE Vq8#*y<_^B'7'"عyTl԰wvѤ+F pGTy{Kwh}HX1wb|O'+U\ODr??O#o*͔6:N!4Bb}JO=0\OsaaI+Y.Wތ@{P] .GPb SRé$>F(V"])S )l$PEg_z1>RLAt.'"عyB'7N{Kwh}HX1wb|O'.l԰wvѤ+F pGTy邿_.?O#o(ODr?OsaaI+Y.Wތ@͔6:N!4Bb}JO=0Wиb .GU;)lF(V"])S ~@?\A?ʧse=͇SH|>$PEg_z1>RL6SxXu;DE Vq8#*y<_^B'7'"عyTl԰wvѤ+F pGTy{Kwh}HX1wb|O'+U\ODr?#^^6?r6SxXu;DE Vq8#*y&iZEEqHn9+U\ODr??O#o*zx鬮!|>&iZEEqHn9.cԞMewi 7)5J..F(CCuq_^B'7'"عyTcԞMewi 7)5J..F(CCuqs:k+H`_IVqw0BgJ~@?\A?ʧs:k+H`_IVqw0BgK'Y]C} MlҴ$A`{#~PǃLW'q?@?\Aw7Xx(t˻K D9' x$A`{#~PǃLW%t.'"عyB'7N{kEwvx}Iah1w>RG$.ogPwi7d,3u$rOx钿_.?O#o(ODr?ma㨡.o,-X.gH䟔1%:2&,b}IC2Wиb .GU;$A`{#~PǃL7Xx(t˻K D9' xRG$+U\ODr??O#o*:2&,b}IC2\ma㨡.o,-X.gH䟔1%{P] .GPb SQC]ݤEXZ ]Ͻԑ?(cK$A`{#~PǃLAt.'"عyB'7N{kEwvx}Iah1w>RG$.ogPwi7d,3u$rOx钿_.?O#o(ODr?ma㨡.o,-X.gH䟔1%:2&,b}IC2Wиb .GU;$A`{#~PǃL7Xx(t˻K D9' x[f'Px-q&##IW'@ 6W<b Y +/iW2e!ݧ"veQXum7Oսim=߇-eFv0=k'Q=ˉ .GPb Sմ>V~Difr,Vt[}9Tic ֺ+U@?\A?ʧsi}u Ki>m*4͋X QEέ:--%sL6.9`0=GAt.'"عyB'7NVt[}9Tic ֋[MV~Difr,_.?O#o(ODr?na{B{[G4ʍ3ba9czsi}u Ki>m*4͋X QE{P] .GPb Sմ>V~Difr,Vt[}9Tic ֊~@?\A?ʧsi}u Ki>m*4͋X QEέ:--%sL6.9`0=GAt.'"عyB'7NVt[}9Tic ֋[Mא;2Bs麅/tK<>m$Ы-$eNTA]o 6W<b tW'NIu \^3x}IWh[g(Hʜ9ҋ'M,{OI4* b S#zU?O#o(ODr?~t7Pis=vvrʃ=(tBW}GhU2*G .GPb At):na㫋>{OI4* b S#zQs麅/tK<>m$Ы-$eNTAW@?\A?+UStBW}GhU2*GIu \^3x}IWh[g(Hʜ9Ү'"عyB'7WЧs麅/tK<>m$Ы-$eNTAEΓ:.g=Bж.P9Pr=\ODr??O#o(/}W NIu \^3x}IWh[g(Hʜ9ҋ'M,{OI4* b S#zU?O#o(ODr?~t7Pis=vvrʃ=(tBW}GhU2*G .GPb At):na㫋>{OI4* b S#zWG{ ;דZA%խxx5my\:B'7h/}W TQEyŅQ@Q@~#5,9&8S w8ʼo6,us1JJmߝ;Wv4P)&jQS%<>]N'TId?tjɭ}3LK*gWydi8R:5ay|Mݩg4v iL~*y`)lF(V"])S.'"عyB'7WЧse=͇SH|>$PEg_z1>RL6SxXu;DE Vq8#*y<?O#o(ODr?~l԰wvѤ+F pGTy{Kwh}HX1wb|O'b .GQ_^B͔6:N!4Bb}JO=0\OsaaI+Y.Wތ@@?\A?+USRé$>F(V"])S )l$PEg_z1>RL\ODr??O#o(/}W N{Kwh}HX1wb|O'.l԰wvѤ+F pGTy鋉 .GPb At)OsaaI+Y.Wތ@͔6:N!4Bb}JO=1q?@?\A_.;)lF(V"])S.'"عyB'7WЧse=͇SH|>$PEg_z1>RL6SxXu;DE Vq8#*y<?O#o(ODr?~l԰wvѤ+F pGTy{Kwh}HX1wb|O'b .GQ_^B͔6:N!4Bb}JO=0\OsaaI+Y.Wތ@@?\A?+USRé$>F(V"])S:?'ix|k7:}8?O#o+?5c_^CШ ( ( (0|Q ?ϵ{^@w\0zg?@"(٥-9[dsd8T(61[tPC&4m*[ҼåH=W*X$@xC]}?{M|N3[ ,2o_Xs "m.Vbdţ`fEd7⧙,/Haoәn0ˬ9S(?ʩI`yΡ wO6E:dn (\ɽaC W;e0s&n9O2X_j(w2>aY# rQ,yΡ wO6E:dn (\ɽa˥[ꚳyqXβE)Dr80ĤsxC:m,IsBl607{ wxC]}?{M|N3[ ,2o_Xs 5k|oi/&wpaEMx>+$!aY38r%#9lfm2QIe并 22<G7{ yxC]}?{M|N3[ ,2o_Xs 5k|oi/&wpaEMx>+$!aY38r%#9lfm2QIe并 22<G7{ yxC]}?{M|N3[ ,2o_Xs 5k|oi/&wpaEMx>+$!aY38r%#9lfm2QIe并 22<G7{ yxC]}?{M|N3[ ,2o_Xs 5k|oi/&wpaEMx>+$!aY38r%#9lfm2QIe并 22<G7{ yxC]}?{M|N3[ ,2o_Xs 5k|oi/&wpaEMx>+$!aY38r%#9lfm2QIe并 22<G7{ yxC]}?{M|N3[ ,2o_Xs 5k|oi/&wpaEMx>+$!aY38r%#9lfm2QIe并 22<G7{ yxC]}?{M|N3[ ,2o_Xs 5k|oi/&wpaEMx>+$!aY38r%#9lfm2QIe并 22<G7{ yxC]}?{M|N3[ ,2o_Xs 5k|oi/&wpaEMx>+$!aY38r%#9lfm2QIe并 22<G7{ yxC]}?{M|N3[ ,2o_Xs 5-_A./֬n84版+̓Nr@jkbI6HmgL\Hs52ڽv:,yFʯ!:hu&wbQP0((((okq-]Gm3$ ;Wؓڠ+LnZڽWX-j$v2&LbQ_M>Fv'qǻd`ۖMij2%PH<ز2LNؓکhqh0\^ţ4R,,JwxVum8j+j[%6+bmpA1\`tJO#Ѫ>oG}I!=:Pڄ6se).fav bpr 0zZZ h0McSN@>!{ded <-$K2c"Wr9+fhebMMx[ɼ|¥duB  Z kWxѼTS0s1Pzf}$77rO/#1 {P)4YUx2Dy #flH^wȤl\"Hn|gf!zvo:_+lFNaP86q;jhN>Ȼ.'*pK)vUf8m,|ĂĚ]{pS+o96 `Ԍij\K"$vʬ!2#c1h&cQ,Ļ&R*7P7 s9jhQ}|䆌I k[Il3D4)lJ ydл*Hf<`ņ׺}q^#k" 篯 Z:l,f*%1rq@uכ%ޅs(( nBa<#'&SҚK2BE`YI*2328zVK%2yQ!p$/s1@:l,f*%1rq@uכ%ޅs(( nBa<#'&9=Eˁ${uH%CeDuYou+n X.cxr p`mD#',ǽtZwMm,K,nɕ24day 1r#>~ 7گpvS!Uf8,GRAbM^-mln4LA8n8޼q+>z~7o$QMreEVd,Fu ]S~np޸+ߜm lFw NGn8ݿow涵k$4]"8 57]xRުY,@cr\6Y,{SJXe{@RDLRg')5]ݝ`HK<Ғ#fo@&dm9P$$c X uE\ЬtxMKI{ECro[3p ?NO%:\Y!oDo&\2wpzV|>TWH:I8V6hҤLebxn~ ZYO)gE `՟ FneH,M ߹' 8YA=ܗ176h?!.vntY,mVrI7ݴ_=mIerx:fx]:{Hɯ`MDi.Hv3GZX﫵4Y5,| _YA=ܗ176h?!.vntY,mVrI7ݴ_=mIerx:'"AKXhG.2-!ht=+C|6]դ>T5БH+N8]%⛝&=5 Ve7"9'RRD`X(W嶛qp7zj8/#xe\ x4-oq97ʉo"˕b x|_K ^S%/$߻Eab1;hB+k(ehC#:P܀`|sګhVߗ%#]SK1(O rIEo)/bGFI-d~D` 0O<{-6IL ,/1FYeZ4lmnrE4-oq97ʉo"˕b x|_K ^S%/$߻Eab1;hB+k(ehC#:P܀`|sګhVߗ%#]SK1(O rIa>4f'O2yGۺ!,@PrO'tK5-9)'}Gs!Տ'&Q-T9rCa8o{aKcp7h,,F6@s@,:- S5 T@&y`]Hi76?Iom6LNһkxI%3kxlu(nB+yfKued|m^$gk8nB ?QկN[ԍ &vFW± |Nx߈ ٲm;v4QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVnl[>M훳Jm:{g<֕7` 9ςal]窃ڳlw4>QHo-nE .T fe#]u˛b]rmUZ<1AsEJH*\GP9/S 念,/mobh%3J_䍶3''{j(͵.5{mNK!ŨMHę'd ۈ{Zo5^ҖKv},q$t]QEQEQEQEQEQEQEbogosec.orig/documents/whitepaper/images/all_points.jpg0000644000175000017500000004412611113035142023650 0ustar owensmkowensmkJFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!222222222222222222222222222222222222222222222222224"K  !1A"QV2TUa#$36Bqtu75Rb%Ecv(!2q14B"aA ?R R R R R RruZ.nSoVaҸ?%.gwGU\#ldLu䍮PyQܜpzV"fb& a-ٝ9ҡ:c >8 -^g2^.a9W ;<5-%eoq̫a#;|pvHޔ0!FfDdœNV20ƃҩ^Kgt?WXI\]DF:4-sPJ1~ hm[1BOL T.zSObnw`;-M$E'%;ӕP^%϶ۏ-`Q 'כk)3´K;hCD609Bs8ܗv"nK\͚4u Atm J%G?+aJiĦ@>pvH%T  3Y-K,ڞ^Mr#Qn;!k8;.8yzWn4QZ=ơ BTZ%* ($Ufq2G <@J@ )< R R R R R R R R T'L[Hygc;q]\fYmR--1$v$QRѫ੎*CnT%(RvߞԶܑpiyXt/mڰr$Ȋ RnLgXpP9+ ȩ6#p0 `9kVV)!ms.>͋|8h95vSZ.ZSo-ܕG#ZtmCIdq$a!%`VIh w= `{*P`IPYZ(! ce >Ԇ."T_h)[F@鎂iAlVkM\"EtM ;]y|2RJIZFR1dR۾j`y.-m FB`V\x6jilu_5iPR`g$:Jċ"ޔےu pVW*đ1ݥ,}3kae*ޔKAA%KQ*TFEu\yͿC:ėZW;T6Xa$jȶdBn4($SӠaŌ\ ?e^ᆷ82wr#uJ xӕMAw ?9 s] )jYqeKRԵRJydV(((((((((0Z.,ȟ5S*|4V!4TFQʏ{4hSRLaQ?Pp/y3W<6fGj rl0_[8nN6ҧRW3Oay/[e-ZlFy8Tnj"=ܒAa,cಔۉ+C܀}uk92~@~\8$jPRI BGS|jdoe dDBo&cK8(LiBnˍo\l-h  8 uύѺZ5:VvnPT $[)P䞅$ajZvv{3hJWTwvvV>٫ @&R&R횿+횿+ie,~\ϻNie,~\ϻN٫ N٫ @&R&R횿+횿+ie,~\ϻNie,~\ϻN٫ N٫ @&RC[Ud,mnԔՒcN<23ݫԖg_8aM!쥏˙iM!쥏˙jgAQg.&LKEۋ+K%aG:U?lQX=0M!쥏˙iM!쥏˙i5V?9{i5V?9{kM!쥏˙iM!쥏˙i5V?9{i5V?9{hXvXvWEcWEcM!쥏˙iM!쥏˙i5V?9{i5V?9{hXvXvWEcWEcM!쥏˙iM!쥏˙i5V?9{i5V?9{hXvXvWEcWEcM!쥏˙kӶḿ`Ĕv<6Zr8P\]WEc`Ԏm3v"q<0A}(6JP)JP+855.+ўASNM 29^ jYwv1&ҵ(JR}/W8#*KP}DeKN `CRrFfDTB;L&Pe'hO%dCn:Y ޔn-h|-Nr=,Ϳ r"[Na/[dd8i G GUmZnL`1*#K+*)ZOAԏ f̦ͧSz.|$5)XX›A5bb"!-sxu|D/(;=>PR'=>;=>PRzCڻSzCڻU('=>;=>PRzCڻSzCڻU('=>;=>PRzCڻSzCڻU('=>r՚v-p/rXۋV' 'n R RRp 0&ǎD%u(J 'r?Aݮ7d{Fpٿc32TRFA ~ -+շ{[t1vDR4aw猐~*]Q jCqmqAR}*Çnp_7yEӻOls |Ey|Ey맶wϹ;z+goE7i+goE7h>za|=;t0w[Mw[M޺{g|_N]=}/}S}S YX hm@U"!JiƢ蝬ӑEa6:P2{VJ\KBA-sR#$XuJ6iyKtڦ 7Vʕϯ2zUw_>Ԑ`i.qfdǵIy2]VCw>ӻOls |Ey|Ey޺{g|_N]=}/}S}Sܿɖ)eoJܛ _ 6TR 2Sd}-&~\!Ϳ!]a.h#Xv%_@q(r5i!HPKTIx֞EijsXPX#9![z<֎N"g8Yza|=;t0w[Mw[MMOls 맶wϹVϢ@j᪮QpiRvledH ) Sזxݥ"ꋼl]c\t+p'6T~vHzVn3ZN9&TtAa-H)).6+ֹHRJT`];YJb \m- Xkc'YzM|2u-#kZ╝P8!'QT&ܥNJ6B*'' :ox DCT^BCV]R7 aqJ{ "V&N(p7 5'h3p7b* (C)SxHwdzu,ۜke mjG,xjH( y\4PGqȉ&;lBRV.6g7|T6hRb8I6Om7Dy6 8ɠk/$oYZRť"ErN-c O%:Fpy nw6j TsmJyƧsmJyƠOw6jw6j TsmJyƧsmJyƠOw6jw6jOu/_*sYik|mnEKn%i^e$yNA:?wWNc[vwoUUypg)qsfdGe]GOϯZuW=՗>VB=gү{7gү{7"=gү{7gү{7<'gPڻ0&̦2fCw)IqjZ]ԢJI'ƴ-U]KBO~6r i8玦w>Ҿ!\w=N=gү{7gү{7b=gү{7gү{7(iSͶ}*Ͷ}*=gү{7gү{7(iSͶ}*i6eFpyз O_˯Z Ry }QLe6BIRRr$ P~j1C LgЧ( —X!XBIIP NMUR;!!-@B$ uA)PUZ VR쾗m(myH;I =@$x~Т1ofq㶖@Ԥ` yIPöO٭r8nCQ̭jW- sܜ۔?hJ%dr7(BBTUY-Gz=ۛKp.;,c 8NT1XA qZee)O R\ʇE!vf$il-"!W ! d*G$Ua7ĥɷ,x IPI=1\hTQe[*JKIRPzmoMj[nH4 <ì:ZymX H9JF E\]G җ@@V DHO9$`xd2Fxn_>WeDVk5CA?Ͼ Bxn_>S7Oc/} *{|__{t2о"Pt2aORulZq!hQJR[ @G´,ը͵dN记R$ħ WOUvkh.=}/xn_>U+Y_.m@.!*ubא' aλOu/_*[ݭo3ij1͙r0B)-䫗N`ts!1vPRܙS23Nc[zwoTPJ,SKgNg!Q행s_J k $$ t2о"TcWu97Oc/} )ϾAJ׌[\Sɚq5Ji’%D$dtHZZ*vk<ۖPvE#⸎CrtO)ڡ?w`Ml}|BQwe|E;t2о")X{|_N=}/ POe|E;t2о")A?Ͼ Bxn_>W,+sa5tډyJӐ=}\n R @W^"q3dyHryusmJff3M;!oB@+J- q B zA/Lܛ@vE+$K(BRA^6B9NŔ q+G6R)T|qE᜼Ut B3-Oğ#St4c!NByYBE ,ٔ"vR)&:;@E4{;+%HYe)qW!-jnre8oq IVԠ5%׀f%Ssqۓ鎯-^0[-IH* p#.5rʡ[+ p>4ZFhֈgMYQ@AR 4RlCz&Rjͣ(]]Q0cEXN0w{f/|-CK3ӸCK3Ӷj~rӶj~r;=s>;=s>;f/|-;f/|-ۘj*fa2W)m$ItZzZhʶS0aTt;+nn/)3TmM.!*. ϨVz֩| ‡so#[;i_;7oO!)ZC6^9PFУVޞi{a:r VeqA)Jd9j?ʰF>1r7zq#3q.0mB-Ŕ%J-`HǨ׏Kkѝ\gbpz7KD}7geۍi*BJ Aíg'TCɴYddթ)$$xdg+ZzYZL(R L\}ckKϏ\cyh=|Bܳ&R&R횿+횿+𵌱CK3אX47kuE -kTJ$s5WGcM~YgxmbmlTM!&iT='NYt˘BmJd=@ .V7dj6 Zofq-_09Jɿyd3tq uŶ#8*%!Hy#Juuy+rq]wH{+c}ڗ.Ώ}Li\uTFˌEmKIP He$GƱ RXͶ\O=)uIewnGyӭoki5[L{bO-c ,$xһmՊ[3@֔wޯMnI˛6[kWmafZ".)9999SuIIi߶ۑo5Dݼ d'?gӭ9yb#Jڔf&RWʂPOJPMk跴'ɜ$G'ҝ %͙۵+uW]ݹ*D*F )K6D,yH#(vZ2-e7.BA^ '.8P#p9jӥ|U-$JeN/;1hsJL :̻rmAIZLH D5&|u HC[3Y?_s?j@߿5=ϴ#E߽!]Y߽!]Y=߽!]Yt쭟+۫t쭟+Ow[UW-k[3{/m2]#)'# &u^5flFgBN I#8 _:oSB*'j2Y٩4؉oyhNc>Ty oMv8:*KaebKD eۿl"(߱;j纏+萪M,rt3zpb"RRYsX57W:=_ҢĚ|>QCJRV((3/qZkqH3IZTnN :Tkf7zmžڕP\QVTBo%;-z(<`JLx[ˡ]l&Se,2=-ۈXO}TXmw)Rc.)/RTmD^k9}O,5;Bq-s G_,dp"es-BI$rp2yA1/,#(ZIrdAX$xFFr&7q[JmeɈIaa-%G.SCm RK!$|2q5o%Na;\56xr:cDyҫMϔ1hrqi?JWk-R<>@s j5);Z&3\Gꖮj?ʳ> qqί>1q)ÍB *-` ϬV~ʉnFZ)-rX$>㐊m75>+͢P!)'SoHڳ1~eTCI`[dݩ)I ( xk5N45[^B#4\r>S]Ϫ~O/<;R昏B1k0."v6V]TH<ϭe&.,MRєBxyŒsysZ L7 vix앖CXʷT^U[okJF2Po<^}]4Nϡgnd6YRS)A9W[GmϺZߊ&ZIkQ}@sW.`:ohRFp8Ho<oZSAi#ڢ%9c"/kNuHʛVw=:˭TCF`cթ)Hxg*k9URUo=?mb!14PϤ(Yz qJ_b}\%j_q)Ŷ]ܐI>8]7B0n]F;OƩ0-ȿ[[ێ›J6$VHZۊ:ֽ*YHmԹ>B\*+ `$nF9$4uak6l6!9j?nzKsw5\* <\ut3hPÊ2P >H(;L S|ZI;[ I4|3tP̫EDL9{{9 AE9 N1U4 ԶZl!=8HHRR '>Ses9<ݷǝ):JPT(osssTvR|[*S{hRԠNO\xt֥d^՝%2ւ4ꔥ) RT2w5c=4+W&P䒶@_̧pQSć363M$C  moD0q׮q(1I 9>j*,F J-%HJTkK{qSiZ&ĐJkRqCKjH@@E&SJD."G==exZڐ@9R8#Wes)ڋE9Gj[w.y]:PuսF$)8LqMRT2GVb(ZLx)JԧP]J-UUѱ[ kɑ$!M-'RJW)#h ''A͹uLS| GBA;[Q<:s=z<6>9jJRJRJRJRJRR: ܖ%QaԣqRIlBB) (AD(v(p-t%Tq'(29!߰{l I>$U%e1)'iRAu}btZwbR\i%pZ(Jd_#A"KanHieBPx8mAĩ;I#ed% t%1C I8Xq2AK t?iWP֠KFcD0o%'Gp$dd}z~=C"C2[Mu-HA{PHJsMxbSm)6딗v۝X*i枙IXz.;BC J9ހKIQ < 7hTlA9<lj5Y-nAY{|~!nT+)Dr|suAuRjmȧ{ɴɄRxhJYN R2ӟ 5v{bC-TqR2 zJ=OUf*R\mdܘkXmΘ0ApBTz˝Zَ}Ԕ]p$)gv3meۻ}DZ/hOgxנPd7j%nHrgG:I?ۯO\ 6rca<6!XO@$xdR;!H2S1Q.)κ:SUگPnRX$ÕBv4˩s:w"3q*>[DUZ -Ҝd'vT, bCrVcR,vJ#V8*PH'pGZԞ"g:[%іC[{+%a:ˉ CPRT2##Ʋu:i`gmHٷ8*I=9fgZ%^/|Mn3 OR Dp` #h;ydkzGIĸ1%OG LfJjג 8S=,HBJRJRJRJRJRRz=B|ĩ/ ;;a<Դ8`'挨VTYaI&#Ry8.4Rqghdk_SiUaJQId$I^#țe#)OGqSe$ $svoB[nFeo<6!EI#"YοwjrriqE !ai%^#ϗJÝtضb[^ڃ)Jq+PAe '#ɫ*agŠ4۪Tob@A;ҽ1G8^Ħ$L5Č'&N6:*ʦr[ȶCm Yu/ڈHB1n4eM,څ6Pxaj s$yzwm ƜC%A% <@ %X=kkfyMZZ[HCᔠpi 2}uQ͑[qNm֞"w!+$aJNRG29wsB9mĥ&RHڅ6PJJIndaܩǛyA2Y)Y* N0A*dԪ$œn8&+o6X#zZ9;*₪d:E֣>Rr eM $@ERnrqKX#7krTwHI o BꤥC?3ߒ8g-P-!6RG|krm`6Cyxy@kڔE) ʴ"t'6T #%SQWC'K[6\GKavs%xIM49$Kݠ붦d{s-źI免#oL״[[qMpҕ%jJN= ֲ/=۳LGekLRRv+^6C'cNĨJ3{N4TJZVQ$Y$W H%7%E@7I$'=ysgYÑ5r"L<#f)NҠN۾‡>ֶ. "qԫf!įhۓg];}*_rNf]Jxn;oK[Ii(8e@.nY5 '*܉L@u:Gۄ}8:/ cZcUm*sn*dqH$(6jW\*mqL>Y/9aa*ão0A lG. qTR\@Z AݐͬÓ{I@I$GO ~ͧ&1&Aq_{VRU9DWzdFE\wPd_#JA < fV ne!+ H e+o❻drw(5rDmۀZVWDRvҰ_PW%c*JvHBC>0R|sוv/yS)uMZ R9O,xWw Z!'a! '`J}`ԞgIAmҏB[-Oq1;FymPYIO:VhѯlKK ;c!|y- R JJI)%_9<)J)J)J)J)Jt[ KwQnJd4O:rHi !)rp1??rҔ R R R R R Rv-1gÍmk$|>4VL8[Rb4B(6 AScA~IHu/eԼۡ‚2BUd>\:lچHJR=@@W=((y3!ۄ]pZ[mR|J6q}Ra4”Tz8bjr;Cke>U(䃵'*˭ DE;r-: Vţ Xh>"~eJBVe*'iY:kTct2p,:YBqHu R98<*q[+)ֲE=(GXإt8<*cZ+b}lR`q+)YJՃGح LpPSq1(d|kNzHS=LBuTV0Jr "(((((((((((((((((2q5,k{#x[~wm+vs,c}5d\!b(! `hQ$$`f)A64u\Y"VynV; m](<20oZc \( }Jw)pCVt|`rp g+2rj\ QѬC%lvPTq@!{ndBfP%~`#U'WyQE鷏ĻQ3 ' ;WKzvV:q"(@s.vR W9CEskR8Z,lHpj<)=s7߇m7 iR> +w|8ُzJ+:𞡬AkmP2Œ,'}~u}Y{Wú!0Yϡq@EXW--!N"3c*OQ]VMK6?ZppR7VO#w5孙\A BYA!W=XxkPѬZ+oxSM(teیB<k%~!xOG/:" ul;'##@m:Pw}\mYnu[.62ţWgr?tsQ$D7}͗䵘A}*Hn-$!v+( ;&u$C-F?;MEyg4i +2M7O5u,S2 J{Awgk[57010H 7W5m6;XeT cƍ+A񯈵djQ$*Smxc@coZ|2!}&Fiy܆PFޤ՛_/=ƙ%[XaߝyNJZ(O .-YOor76]8㑔=qں sI]Я8c#u*xi}s {fH1cOXF[Tխ5nE1,_ )8<P=Tj-4j/_/aGydqk|!m ܗ#Yr OZ?+? Z5$v}@HBŶ6!$rVLJSV[B_;lQ?t::(]gJ-zp6d(~@ `SHf,2>uۜ_nkѨyt/L o3cnw{WCEQEQEQEVgn,4N[{8™$f INXfu!fҀ8[B Qϯyz٘Xκ."T1ժMnMv/!I/fV*= A(񍐇w#IwOEY62|ᣓn '!o>+#i^:fF쀏@2oZÆkqszo1Y|ې[lF7㌚4 "&k(<'aY? !?L?$Q Bf" (T3\_G$: (SsYE&k+9HuO5eCЙ/H!?L?$Q Bf" (T3\_G$: (SsYE&k+9HuO5eCЙ/H~-×vV_^vȋi|@ęGY{di:n ^IVTdVˑs"\涝&k(T3\_] s&k(T3\_]CЙ/HSsYEtP? Bf"HuO5eQ@$: ?!?L?$WAEs&k*ŎwyxgUԢ`I=}9(((Z=貹B22@s1Wkœ]STIH:x>O;hb[ ĊՀg#fd%8$suDŽ>&ݦ43GEEyErdAh98>*k԰?RdD0vv,]87/.YLVQF+|RC9nWQTX#ЈȸhO.NtjX+k6,He23T|qcGqG^#!_k=ֹ=G$: ?!?L?$WXֹ=G!_k=CЙ/HSsYEQn?Zo&k(T3\_@!_k=ֹ=G$: ?!?L?$Pn?ZoQ Bf"HuO5eֹ=V,|5aGu ƪ&p'ծCG(={:&k*ŎwyxgUԢ`I=}9 ( ( ҭ[5m8.gGih,[ c93ZuK+O:d!77V@sAJ䐬x=98@6Kcdk&G+'>ց'`T~A}nA.1 bF:qU5\aGӴĿ-;3YFf|=im4;u;u})/2~C^4AxPG[g$ <:sIMQmmɖF>~a>Q?g@@s}LRmJc$k; @ :f+xCEu]pz赏 "$K6jdor*98H;PAEsQn?ZotW?n?ZoPAEsQn?ZotW?n?ZoPAEsQn?ZotW?n?ZoPAEsQn?Zos>@ڪxSJmEH^iolo7}{a5o^* LUՔ].vnm-)#OA^%>xZƑiv:KX.&_m1AG|Ejc5ehX҂i?Lu5xF ڥ2} y{KwcJ!|1/i^:KF-n>mf q8j hֺ}cgg/sNw9SU*0XER k'>c4ؠkW\ c֟uK\ Og{u{XZ5eb%Y2װ7Y Ҽu{nZ97Wr6|ۑH@qz{$uk\[>nyXAoɭ@is:=NG9d 01yඇ>h/%-Hn$8 >$ ,T Ҡ7/.YLVQF+|RC9kK-CM"f -՘eԶ2N#ڬuI9| ;k_hK @*P4 O:wm#E,Y3 2L],=Fu4it4T)n-  ssހ9=wŚtdžm"vx\/ Yc dL?E{h<'aY? 2\-/}u^(-/}u^?2\2\-/}u^(-/}u^?2\2\-/}u^(-/}u^?2\2\-/}u^(-^kF4WV7a=rǚlx{L@-m%lǕX\cנ׍mU<)%W6ڽHKD}/6oE}cyvg/myv8QG5]#zbͱK q|m{<㡭נ׍mGkC/}#Y|u{=whZ!V۶|ۓȪH1mt?iO6o,'9󎆥_;ZۚjVhu85_^o"閈Eդ6*9u5: Iݵ0 ێZ4`3(w ѷ5O*?ޢ=r{Bo}<.1k;zozS u'vÃk\.>n9hрș_\xz~ή(,;_ωMEa/8;f{Q2Fp½ bQڑUyg?>-JZDw;:H]oKAbm"ј=vϵ3ĖWZu=>Bnn<(z!Xzsq֭˷L_.,B˹|ۘw9994z.}v1RX];y LFF(,rP'94džY_SuVh%ܸ FC~liu@Swm->p(1eXp2q7?2\S=s=j9K]sWfL?E{h{T\6_G#ڧzz?2\-/}u^??s?͗#C~lL?E{hK]sWfGOe=ߛ/G-/}u^?2\S=s=j9K]sWfL?E{h{T\6_G#ڧzz?2\-/}u^??s?͗#C~lL?E{hK]sWf8V+ѾӬj[o6 _/myQ\As4k)uew.j3|G=3g^kF4WV7a=rǚlx{L@-m%lǕX\cR?QhzuՇo7ږͿkHgTi=cugw28ϛlu9n9hр^y_k#֤ zw&IKį,rĘ neqϣ i0&ּ'`~dotۙ\;Bxޡۖr(^xoK&D)'"$MhJ(7T๱ԻUj#,J#v^Km]eP3jWi>Ib8S*Hgӭ/T9#D RFO}V}.;cvH'Iw9~x 8<$tyYP1ׅvˀpa t bd}vsY4N}Z-hh–[Ŀ͋|#KgtXv4k+O?&d_1a2HHpW<'aY? _ c]gFg:2V%,>w 9 m_⎡lO+diGo*WPJҹ2=2+k~5o}ZEsdL7mH3Vot }K-ޡIssaҿ8rOJ5*(+Ы51 /<oiMifKYcSF?ܯҸTm7=.&?;oJ4: +?;oJ~0i*: +?;oJ~0i*: +?;oJ~0i*: +?;oJ~0i*9נ׍mU<)%W6ڢ\:^+ѿncy_=c=s4z:].˲ulө_6ۀ"ss%>ѯzxw5uWk_Xf%Ҿ{t0zYɾō7eLwt10_0D+w`OsV#^^6?dk1QxuKK- @|۞ IyqHu|WdX]nq;r:cX}_CU|EaQk1QxuKK- @|۞ IyqL-60.}ߐ211S (?9KzG*yF=о|BbFERG#JL-60.}ߐ211sGQ[[DJ)?o{} č01G׎koIdKA?=9Qv vs? T|82?ҹʗq$rN5;#ƅR$3'χqϷ_Z~?sxz~(,kV ?ºZ(+{xm-b! *( (ėmrhYC 6r2Cc9WĚ2_["G#&k)HJV^ `azޥX 6Ա3>͢i7'RB3j 8$ S@rkzվ3X6;ܤ"EtS~Igqw/L5a>ow;7m|Oʿ!<z<1[f!_kLTav[zd}MhAai{!aW$Iy$MqZ<+6ᇋĺ3:K| ̣']dh3\[Keu7AG9!+']UO &ºMW lWL¶ljthgLI#%da-A xsv)j?xkV)j@R Ŋ<O %ѡ-2$KJ AU_+u~yZ襮ShkD:}M[?t5Kz[eRB rHCסkz]_M9p!A't;y_]覯%tg3cHm@b2ϱxJ?mk7S/ %_~'v_Gh$#bpÃ+[>%tg3cHm@b2ϱ:~'޺/|EaQx8z/~'v_Gh$#bpÃ+w,ޙg *;{n9ƲO_%u?LjO0['/-h%9#`n 8 s]gÍwGÏHձugwNk]VJWw 袊 ( ( (0|Q ?ϵ{^@w\0zg?@"(٥-9[dsd8T(61[tPk:39DWIB.9am01<`76H!%);aMq펽kȼkkfV 1ׁV}4B+8M+i)tt =be%fs}¶΍$ HcM&]m@%x9ޕ=o !6GTP\JmRuYbvX33Ęӱ<`u>ŚN{ z&4tYw:&J=A<+o@d9e "\珻ӞB|E#?ib7dIy~_,gM^khhbW #!`-zcVҼO7+hYM *΀H{НQR _k߅n58L"x Dv#s5–2kE̦4|qOAIZ~-Íٍ  nRU [Yr_C+u8ht/N|EsV>$1Rq$rFߏM ##u oO%QDM"BW5kK* ivCD 7Re@ >Zvj:uh CKO:|[oa⩵.}GL&Ҥepqs+{p*Y/+N׼EmW2&<2iR+\pNۏ^k;֖:Tyqa;QPnʀ}I"Ğđ~iF%KE"rFCv49/[jɪM--g;rHj3_xs܅Iu"JndWh"DC䟥u:NJltIf+(V(9V#$tX$c2N+NSӮl/#-nxfMnF0dғ7AcZxLʲ&DiGLF=y1t+O[nl$Yt֕"6;y~#IF1^sJw<aִ{P)Ծ\4mت)asƔuW1x 3u >:s7v%w*JKЂNzs6[\E , dI.IXOZ7]]"7k%0~1t8횗RMiok.Vhٙ BL_&vm3 ϧ mHo2%e.#i"Vlxgk᭾Pv:tX/ԟLQ}}fY7Kd nO'mi_k==CIn<:0Z4H,]y<;{{-!kWeӢK[) *%w&mkv%k 7Ӝ1={Q+y I][O%Ia Yv~|nb1ccE"ۗc k%9$ |'8bZ_:rfrwCs >*}aтX~_'""6uϡ A%"7F-٠[nfcz U_g{(J]_Zp |Àz֞4XfZĂH ?xMCY8d,* ԛ~ӡ/xrM-oo- HpmW =Fy_*yu&[jwV}J/&`ye|`*/tXYHТ0BA.koy-:%XHw #!PnhfcCRGr1ОK1qgIfějh6'.6H<8?t]q.N72wBcbf !~f8> -R)nuf v(Xo"XM$d:=A*muinccE$@H$ ֍ż7v[C6r(eaAiiz}¨YTaA tW( _Nڨ "̎ؠhRNA3/C =/CCFv"yVT\QUl(8OKҟX?? 6WO^v3ÒxrMOP%Ccndػ>a_q@-?Ma̕cܨ(YCI\ 33iemox,nT60"5O]TZv;iM5Qn:w7T47Z7V]Io?ϵE2L|;ERD8Fm\XTF&oq,J[1q$bVm`}ta[n;Ēıb1m۳sQj7FHYKH8,܀5gOM[XKg-#e3X>}t>ϮpKEp]Xs9+KCotf"YPrn8TjX'|UKvjEu]NYd_0HykeF\N3Ԧ9lXX[%EDQ6`mGlc?md-n$6족SnJ1Zv6pV-XP2=BoĢYv)5eqowaoshC[M  V}tǻCXvXa;x8;{xm-cƊ8U€$((((((((((ux+[,򮭬)6ʤ<Ưmo\<ksF4$|/Cl$sv#)涽[ӻ"IpReNH#먮Q.JMR˚84+nf-`݂8#)+m2(dmP,AsP_Er4˫-olUԍw3I嬛Qv@WBI#8W>$h/Od[6Nw*b 0U"::Sȿ\,\OK{KxN("ME0LʊQ\ڹJ}PEPEPEPEPEPEPEPEPEPEPEPEPEPEPTu. sEҮ^DFX`FyP~oaq$!xY! 2:8uaG =EgC+n."eu*. HÌt4P7/,eYu[JUXԅv<]#-u[[T sbO5,T h9utPڣvzUƫs$w%l oUW]-LJ垫it1ژLB;ш;UFT((((((((bogosec.orig/documents/whitepaper/images/perl_php_python_ruby_score.jpg0000644000175000017500000006237211113035142027155 0ustar owensmkowensmkJFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!222222222222222222222222222222222222222222222222224"R !"1AQ$2V#TUa3v456BbquRSst%GrŃ01B3Aqr!2Qa"b#4R ?aaaa Wc-IE7+U٦ROBr<-tp,ܯ Qg$̴ͶP `Mp'?362]\dK,I YtB;Bmlu9QڥV*iTwmaxc=j2i -RЉ)\r.4HQ#TsW.1RsDu2KJҕe}{((U2%7&L:Ї %AA&66'$e*S)TZ%o; ǰ܅cԐ4Wj:ɍOsJx%5q̵#0V`LA<ℨG`ݰ$ۨNxհ{2dD6R,ɪ\iRGp7:\bOhd2+( 5 +"  PQ*eTJnL!Hu%-%JJMl,mqnBStۧ!NȂ`4 ܯ Qg$̴ͶP `Mp'zev[q9f@ Uij) j!n%=A#TȓUP^Iy!i}40ˡ$` ]0V=5h˪).zѦ%>6ӣY$6oEj"d*KUr˜*}ES!a\ 0F̭6k tK]>zBpp%LS3RZ}mP"?ᤔ4Z^S| b&Ԫ3]̚)ٌƈb&:%A#C@vbvVUu=r墼y)p|F%Jy %KKiS J!)Hy$;βTiӃOnj;jj#RwR Y~Gh73%% %*{ZZM}NZcGPUF|GPu)ҐA :.Uɩԙ|9IBR,g7YRzlji0  00  00  00~?.K ΊfBZ^\hqhUA*w*9rU)tr/VBF UuX") IJ {vbj+?^t?1g`.$bdg#JeJiԅ%i=Ab1U> PSaɈոl+?ޅCU)2P>Lpt!)Ju(M=JPaGO :'J,6QI m^~b׼]Y T Ia|WYr[)R^UH3K13M%QІR PJw^t?1gaP,lQaǖ-uHHX'R)=xc";1Ear KOVW늯^t?1gaP,lC*CJjk1o~\Ir3ˮۋaEm-H II6$\w1QP,l={ş̀.LrDa+ܤ*{\.qh")KKe1V!*)4ǻHP,l={ş̀]@j -K7AD@[I$\Ssoǭ~#Php1De-$ܟě8P,l={ş̀ayC(|WC6A3~b׼]Y >+?f]Kn .\/&6`IA 00  0Q@lSJᰨB oupb4̛ jŕ42$L#Cj.&:Tem,VT[1Rց-7㧈OX)ݵءK&;,]IBlzʭ%Eŭɉ-(JFY$UĖHj* +T4)<%tGEț޶R]S*lx8+FuZq 靹VѥHmJnH.:nn-`-ɿВ/kؕQT*Tӧ>%QPnMP&$8\$-GqB=K҈Je$p`7c?&PR\=D PˀaCJ3p(|)C.Ꮯ]֕nLZZ R` lH Uv7&yY""F[q 4-EI)$|M3 >s?Q2”?.gh0L˙z>s?Q2”?.g&PR\ gD PˇCJ3p 1(|)C.e(~\h0L˙z>s?Q2”?.g&PR\ gD PˇCJ3p 1(|)C.e(~\h0L˙z>s?Q2”?.gS˴ḿ@Ĕ<6Zn6P]aa StDRip.Uw-N]<4x9Uĝ"sKJ]Z):l/p})o3^}# u*Sgqev;" 낉1\tF۔n?`3Q*OC~)y!-ũ* $\ٿ}^|g\ /u|HƤ_fvsZd]{mgbUO^_kr>NG9"M2АKI;%.ďGʁi}:7OkC)ط u} [{ɴ:/Xe RZm(LarO8Sijygګ{7ϫOzTι_/hgګ{76lsS:a|U>386l=M}[Tι_/O=M}[Sijy>U>3S:a|Sijygګ{7ϫOzTι_/gګ{76lsS:a|U>386l=M}[Tι_/O=M}[Sijy>U>3S:a|Sijygګ{7ϫOzTι_/gګ{76lsS:a|U>386l{BpiU?U7nRzǗOGcojI7a.J<6]aa }Qy~~.l%+ը87/f1:"| ҰH/&}V¦a)3EFD 2u8섦׸@6Ǭ T4#qʤ@}St6C)ZH']eV#7#|nTTX!*iD }EW;%-mwlTWG|X6IO.ꎮq lUrp \MQb䄪QGc@`-\q}9V.iUb=%<S:[ڍđUsky=Xv<ɞ;o|7Cgky=Xv<ɞ;o|7CgkS«i~Ux}طW~[&*}Qv49JujJxI*&«i~Ux}طW~[&*}Qv49JujJxI*&Ǜ35c~7Cgk<ɞCCh~Laߴ?&{y=Xv<ɞh~Laߴ?&{y=Xv<ɞh~Laߴ?&{y=Xv<ɞh~Laߴ?&{y=Xv<ɞ7Cgku{/ea6IuJ^*(Gv-;o|2њNPSӤ1"#@[* TxmOQ).fThufZY-Gd-RuO ?]?*L["Og#8+] CfQBJ7%˹}%EU=UIu*{`ozr\1:bEBKmbxsVy~VGv/1Q)˨T3ͩ RBẔ%D( ~!B5)Թ5$ }IK!$qd:3:s0e r%IxXqGU4W:J)ԁgz\W`qQSOM~uJuJ=wb7IUe?Lyjk)YBL[ 6%26F'v<ɞ|*^Né7i4ۈB"U丝Fm}En ;hMI/8_I cbNF& yMh~Laߴ?&{y=Xv<ɞdh~Lc |>K~(ئձ_P'ny=X251ORߊ/)4lmeۮ 008j>"f^Ԗgh[e%j7Z x} WPM2?+Lڒ 2/+Ԋqʋ]/H+Li!H؅5XY$zLQY~%M3, 0C'z@aAb;a&VbX[tv%bsDBY-qN)VuT;ĩTUT%j^qT*CEpҫH@[EQR~܄NHc@%rg-\VymTQbT9z+'KR( *dR.rXXrjUIc9)Amm7>왵5 ty}(lIIߪM,LǬ+?Н7CWٛ+gW*Es*>72T[me$r#P?yfoyrW2SqS)BdYI+H=TVWTћ_st?9{q]S/UXx׶1OMO2~e!NHl!|su$?tҥBT S3+Ok[*]L^'-}iNiǛQ(&F6ÔkʒR\or^TܣLTD]ېm2S:l]?%̖ӴqZu(u4R>dhZwu&~J[NeC9iġהKj l0ImuL1qIZ̯eq\ZfMat*K[Ka&6H*Yʕ#'4\$Wt8IԱz늌1.dˈrөC)DZ#B@`ۭ,῕Y0fG RPPO:==Sa3T?9{p홿*{=SS2LQ;/mTRIH{{j59T+Ȩd%E(tG1 ^ݳ7CWٛ+3t:4Ni-!WĆ5!@uįXjW? 0I3T?9{p홿*zT2h_15O+ƅlqPöf~r S|> `8홿*G@MNNǤ =o(إLk~ja|\4/W:U&MrԊFH;%I=G(ẳ}__"rgRDܾۑb钥:^foGY6o~-c3v>ؾ7W O(_ln9IT yewH~ϱzwglpӉu7Lc~SqbJUx{% cmr2`mUOU~uIR]Jd!Cܬu;m+2`lrJ x|awtI~.cy"ie*`S\&a$s jD8SsmŊzK*KUd({mTS(PV{Z"!A-)![**ayo0DM6S_L kټ>U:$a[1e4N2*`S\&a$s \^* FTfH6՛42LYiztVM;o홿:交NWڏ@Ac9)xk~zT6h_1fJn梙+@u)e$6)1~3kYqSʎ԰A/tmER$~`54" cNJRY/`'b-r%ȱU:2ܴd Ŷ%*u O&Z&NTմ!"*›N C29$"W6r[ 7-+Bi$Rt:xmInZW-::I1ȥ$tdړ]l4ܴ6Zu /DucKH H.ɵ&&iiTl^I'"6;^cq^ɹ#\XRۦBtikI!PA bgkE7q9Ŗ2YDV'L4RPB[CIQ }MbN*~^ѯZtRkr]i3{?hߺ|Qe3"8zL-sȦ+[Ch&?)؉B,|McUn 66 =SViC2~} mjBպO`^}r}SG\ey*gkE7pʙZMzL-sȦ2ҽڨi&!۲)$K߯ƫgkE7qΕuEE MH4 &ݖ@N! ^|5930\X}jZ"=Jt( m阿ɟSGOWp{vǂ*L929(j9jZuҝ <`z{f/gm>]>柤<Ra)D+J4΄I;\ NR%ݯZV"?yН ]ӠI-85|{lSJᰨB oupcVL>鍀㏲xe ::EN{(v@eT4I2-ͼuޥ!Υ696vԨеSv\}nq+}-7>C;bGͥeT9N-nMAh8*I4fy~ʰa EAej'nW9pp*9H}1ꕪtԐ*RQMȸ sl݇)-elNJTz~,#R'c6i{JbNf9r)a4vSK )$^~#:ȦO5mNFy.$+[Ĥ{mLkI#l1?='bNf9r)a4vSK )$^~#JEjBUR 2Bu3k&ױCM?6$bS.Ka׼ڵ6K |I/NKl{7IH>dڵ6L |I/NKl{7IH>?gu,~!~%nyXmZPs&G>$eQ%^JʽY`$X 2mZPs&G>$eQ%^JʽY`$X MBwK <Y6M9#ŸK2Ө/%je^, n,|6M9ŸK2Ө/%je^, n,|&s!~%XBwKW!dʵ6K|I/NKl{7IH>Bf~)*dMcƌ̄-J$Ccy],wU>?iήuV1WPg2D۩܎4ISLSrPkhi%kNOSw T7R;ĪijiDWwiH^lPkr,lJBRBspA^t?1gb7E?kZ@0B_wiRץJKiQRӻxSj!׼]YLB.[y5"7RPOe|\mr&OD{r3ZRt(@@(cYw*1&%5Zks/ukDy܎NODzR7˴#'ܾw~7ǩ);7[3iBUJsYw0SVE**W୸y!զJ/r9U#3~@x8>fqjs"T5s1QPzmS7Q{ʭ>*Mk.f c⢠~ ۈZot#[|10R37o8 s9)O+n"Hui=ҋ܎UnqUZkYs0SVEX*Q5\:l_lMES* !$4]@BP(zQ)#)hU&[}o@ۥMfÒQY2e!WN)D ^|N'чKu1ˏL ⛌[IVH_T(Jp`ֻ)_HR},SY9l0䥡TvLnU6SQn_:8dM6L HNK){Q>8dkoj\"V7;$YiBw%ӒԹ9iլ=-RDD nvH7y ̛Mb-Nan}%j!s@<W2m&Os&H$gW%YJd D2m&Os%ȅ$gW%YJd D2m5NrZ'-:A3ȕ tdko.NZukKuԃg+Q,zA)4{.D#?/-:.2Pf ]F& IE8DA5K1ЇO}JԠ.n@&N;dko.NYqkKuԃg+Q-փGq9')Zl^:[ZH ɝ\?nU5*t=jrZYHui픻\TOp 4k1i56EEAQCCN)v؞k ̡TR|ws5M Bu 8*Mw.f "~ R]Bod[|p]52`)rW(LR4GROOb93EKj @Z#悴(I,W1UJ3MWPf S).7Wk̭>8$gj0䘰vw+kRiQ7uut˙_Ju-x~AZy$dmÑDЃRAԀBWjE(mGvP'aPP)K7bAɘ[!H}Z>TXUMqhPq: !$䲫XKQ̛%._Zu$cifۭujhvcY@"ӦH܂UXX\ɲR=%RIe:(Q[ -5)MK\' (q@rjD `n* x|%wtPn.yZjReK\' (q@rܸo/- iJmRa-p7̢PW}E6rἼ%)Q_C k>e:(Q[@o/- iJmRa-p7̢PW}E6rἼ%)[Jp2A](ۭˆ`n* x|%wtPn.yZjRe)T0NQ(+㢀u\ `n* x|%wtPn9j"c!Q5 j%%BFlg -5)M~ U %J 9Fo1s:^DCPka]R@JJ%?bl8>c\ 0 0lPdxì֚2_(}ite1WWuTvc)]-I"`>>u#5"}iJv=>,45" v-4wJn$>5"}iJv=>(y3{oqy-Seye t5M)&QqAf;o&RC-Seye{:}eknzۜ45" fu-4wJn$>5"}iJv=>,45" v-4wJn$>5"}iJv=>(ET716\GVZpCQқOlmmOC2ku$96\G9i FSJm>Dz\PY=^3T:ז;U7R>l4; .hVMWJ^KJR 5]6>l"cЪ&7Rm̔<²˦2}eknzۥ hG.K'ekmYuAVMtǥ.hVM8WJ^KJR 5]6>lv46_:q[KS#$gMҥo{NKM37å9BqQUO9a1RnNqPFoKu㒢Q 0KV! m"D)~=.c q21)@\;xVh)`QَV;ia(QpRT#lbjiZ` h[@qQUOU~xiR]Ju9!C u,QM/䨪 {fsB@7yC6]L?%Uej.q2U-)@\txfTl4~=*Jt]dZR%J n_Wm8E9U~M7Q\㒢kL&2U훩! m)h4T_a1RlNqPFo`>hiTL4RgU;I*ZTK\ПBeCړ6E*IRҤ Mz_x1鮬#XՇ4wWr_qQUOU~xiR]J3u9!C u q{tFoc_OPKiBٓ6E*NH#pA=iHy$GH?;t=hG-JnnTT_`RRt#ؠ;MUsʊzkSU8${}44YiPzՐ𨻥TDp.I)M(yJGdE-2%H#rIJl|77~EYw08ܨ::^sGAwb.4X1T.qHv(==hi2ҡQY)!QwKiR\R C0ꢻ W\NS-* LE cmZ&в .4X1T.qHv(=Suer2x{ }LT]G+VYyPv)"BLTQ]G+VZyPv)"BN-]WYMN]7**iSU8${}dLVu^a 'hml-i:t(XU~u\iOUTreq5lҙmPn b(\t+m&U:F`.tjP-YYbk[|2 ,*:ZoFMa50 0 0 0 efL +uxΤNpRdR܀/-N>qXTs-jStSZi[`JJF֎o7pGҚ :j&qjqg)Gbd0"Pg(KIHy Υ-N,Mg>֥7N1fԫ mhMwx )SFnwR (J5(a̖N6EHҋ-|jqꤶѝ{2؜$HJP䄘 PT@.iMkxy9)Q:ߧ*6(y~:Ohӥ-$iS'|=>Yo+CI~nDETLh)vl6YY7԰ TJ hQ?1CDXB[~Hw14R* >㽢ZNSͤ9N_2*-H7.7)I;[Nz}Wj ܈Rlo`0HУ~c7N_:ְ9PE'2eefl=C(jC)I64Է,SaRSeeYE)'kwO[P_U0 ] VM,;j1Qvz[Zm!e"6./i%"5(K6rumߏZ(鍪1J@K:$-G7dbI V;\4Q.qO@]iNa*+Zi%k1ԘIt,uЃv*1X!q\x•(hliq}[R2[|6P%I@ )U=6TF(6v;kPd"v,a9N5n2ZZжԔi$@u4uߊA%.>ǎJ\)RؖZ&TӪ4S%)KxĕF@*7;uJ,QKL(GcqCZUxGD')uFCZz;KZڒ-1n\K[HJIN\a`a`ansLUkmiKRi Lu(_mqݮ^n\٭% H̉Qm.4BpBâC EJ 1ԗV[x8ۊ-NRQҴR*qݤAE* ڊI" HH?TjBhT KB:e)`!|Npm(/T yHM~<˪1_mIi4r)l:P*@=km;.E"KSaA&78Wf-FmwS$wd=R$ ܀m;4:$0 X h(P_t@#rMVToNi8$Z*) JMFڍΓu&c D)1\yL~RA){trk(LȒ-:q-2J [RN9#Քjn Tn5nIf暈ÈrA+% ҐDm8ҤKNeIu.Hln7{zd P$qPF7mFk80yB5>tG2`ChaHm%ᩥ)Jn @ }m=Y#7^2\R%ŠY(S}O!B[fUUcI@RU)j1EEY6&.|1~fn5Jj!\q7iFI7ԓVפID~[Ko3{R FZg~\zp)T/ ZVՒNQpl@ĝ%3:[U*y ETq% Ӟuл%MY@or{ve.Twa8ʺJM *T*=4Eg V9ox26Zv:i]MPJqn>>ҘBĚRtXЁBB`I$);l02LL\[iB(<0J$w1]PKV&2K0GgiŀC`@)AJ+.l{:S2m(ZԴ\%a+) MҠ׮!ʬ?"zti@NYDSsY! JԥIJV e \GUX\=='@JkJMqcn/9}ƒLguִhV="*$!֙SRStb4G}̝0I\sB^ZJNJZ=V=UDU瀥TյI(\X[,)PSKçei A) æ*3]$TRS86 xJnF:ﰿv TLj*oD4u B*PIܤGLz) "<(HB%bH!aJ]&=++LVQj HM61â7bA2;%jM:7Hbf;QS|W!Se:)RN%]?|T6kN4x.) iz5yb4aӫu-hp$PclA1b#]<&A,p{IVǺcΙL$H~K:)@B@P #32)RY׭IAY(Jޠ -0 0 QT̛XX?OB#lTՎBlqx^⎴j<@yҔnI(:R Y I=\V68+r38oCLR`Q+)WJc9zS(yHS=LBuT*UJne Baaaaaaaaaaaaaaaa i\L^g^{+Z7g d\!b(! `hVQ$$X_0hMqUZeE<#CqR,k^#~b(& @R$>d[W*Ѭ'^tӫwєx1z5eA8w;nisEuU":Aump_vî>-(\£$I\Rbpyut~`a`a`a`?bogosec.orig/documents/whitepaper/images/all_score.jpg0000644000175000017500000004220411113035142023442 0ustar owensmkowensmkJFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!222222222222222222222222222222222222222222222222224"O !1V"AU2QT#Baq$36t45Rbu7%CESdsv,!12Bq4AQ"#3a ?R R R R R RruZ.nSoVaҺRĥpUU:Mc'y1ח6mA;]+{ZD3R1qFs0AΜiP+^uvLwE(aB̈ .8,d`Ͼҩ^Kgt?U5dqδFrxJ W$'*~d ˳1Rc0);VUF2sAiKDE<АXR@w 'ֻ5 5S벮#Y*Biq9yv*`]42yHe-G45c3NykqCjޠю =#W\ŸvZIE'%;*=P^%϶ۏ-`Q 5L076CNƸ>rT{HBsqr]e:/3g].!r6h@'!Ѵ6 ( WӉL}eJE'%9H*8g\.jyz}7JqȍGu Dlz p1 ҼSuVyƺN5 ,xJ)Po66:\_Tᇒh H'0AzC ɌP 0pG#br*MQ69j҃ZjԴE$?-eՒٱyϻG_[ 톚p:қym-F(8>ӥenĐK%ێ!# )+MpwsZЦ  oخA'eC)M !0nQ芶BA_m$0bR,R|dRݎT4i+5."&TN^_FJII+QF?Nq^twU,47[o%ŭ!H!@y V\x6jilu_+ҠnI9t!dE)% PVW*đ1n҃>02 HeoJuե {*#"h<.6P뎠%ֶxN V)I<5IJ yN z[[U!azfc! ++%.'+A$w ͱh&YXU^u5]2wU('{e =ӕ 7x9] )jYqeKRԵ)J%J<I'Z4RRRRRRRŔ{r}lyKZi-9ӑMvlǘ(w)qYۻjjՏI'lKP"k1v o s)8i WQVQHeKårRmA*pE5|#`tsa;ӁI~l8ͪCjSyPAp xv췘EޚDS$e0#Q=':V֝廦JGCI A AqV+tۧ>%QPrNP'$Һ7KIH[jzy)$*k6J]bq $I9>Y8iKDWxd CP$Kx{LFO$wC–?.ga4,~\N]L/O@&˙iM!K3ӳO>L/ON]L/O@&˙iM!K3ӳO>L/ON]L/O@&˙iM!K3ӳO>L/ON]L/OS-*ᙨnW\DSQz'¶2cGw9T31C¶?/g鯴='mۙk)ymp22 ^Y٫-@Z7/0mp-gk< }F:*Ų)^eR R T%?lTjSVҐ oN?d]xrK%bJmbaVI*BPUҡer2L?t6T]RS _9nnH,m@Ki} j$c4/HJwtv6Q&QVO!Iy c{<3",^,ͣ)ڝQr$ @N2iWI, 작r9Ɣ\ZHҗOV; LO9 $7zɞTz?&{S7O_>t/QN<|нEUN;cgU;CteB ϝ P:ɞTz?&{S7O_>t/QN<|нEUN;cgU;CteB ϝ P:ɞTz?&{S7O_>t/QN<|нEUN;cgU;CteB ϝ P:ɞTz?&{S7O_>t/QN<|нEUN;cgU;CteB ϝ P:ɞTz?&{S7O_>t/QN<|нEUN;cgU;CteB ϝ P:ɞTz?&{S7O_>t/QN<|нEUN;cgU;CteB ϝ Pql~LmQ>k~( {l[\ij0N;ꓴ7O>t/QS:^,Ty}##<n?]Ely m/Pdxì֛2_(s‡hkۯEтD7nK;I RIxTRʭhv]d51BKW$TJO{ڭz2nd9}@SSz,!zP6%22y89贠ȸ}nBSk[13‚x K+cx㙝)+TbfqO$Np3MqDKj@X1N2G*m ݜ~tiy+x$ܧسKX¥Z#8vd ,3:) i{yqR=lVA*<\ U%hiҵ8stGs_mrš)] ,*?6+uwI-mM!M9qgwӊ \v?s맢3;<ۏ~q_Fا#wk[mHVwx8d?ĺ>nk?ϵ9zVZ,9!,PФK[A)mG)ݐ' vn:h}1tԐ*RQNH CS:WYih։{RQOXJ紒Ro)'wA ^$/kHx,Tސ]Y+?U;w\XI*.6KxaԎvPR04ݠ_F̔l*gWw(-D͌sq˩,sNrGF#BFlQ,-m jYmQ pqXfnD=.'ca2wU?R\l1.(ZPk[ZA<=ߠ+-^R^)/20o$p@'Ik$%V;(o'1=ǞxґuJ/fBNon9Y {'!g{7S_24Cy b٩%})+Squ<2B_' g7qk\MM\Y/q)x)S$<8㕝meKOJ\A8>k~( {l[\ij0N;WRcҥ6zwcy߽^sne15)†SPZ]DI'^l~L:R}x\ urBI$ qY6e%w;qBr 5C VyKkH'g6xSgs3wZaqjxpƋf\mH0򊺬~By㯪Ylͅ+0t}Vg;^}~x>F|a?R-6dXW A wunkm72Y~6s)I; KXg9.?_RxמѵzhK[D{bKW8SqW>;"UI,1Zn񶰲ܤ-)e灷c@1}Nn?r.k2 Kzt28dT9Ey̋3$1`(]>GHA*k Oc-yuRfX.1X^]m(eE;zYdn9j[jZl7)) (dTOpk]}*EmDz3G'F4K(q51JpA>AW~ݨol)庐S*ҫUgyJ9B8P?[KPb^"2+r+hhGe%d ߎU4kJE3?ͩzw>fnVR3:SAB=umrǁodIe/HY +#rjT{՗TQ-׷Yb4_ӵK[#NBjχ-Ƶ-Z헰Y.8yS]-9қ͹NV hɶ-RSѫ$${3ՇѿUcU{ĉ`l[>By \sW&Ѱ[N"s ]'TCǴYd[c)IӂR#=8MHϵszEmT1 PHJ@ZВG9kƪϏx1ZUfKgBp@B$ -u%Z-w̩M$GeXsHۣ˵[zzk-5:$ !'ߜc֏_\]7;u;zQWU23}Îx;mvL3m/ijܤ-#i~n!XDKeQq<䅂Z+Gv{KZ'1<q.0|\u $ q^c-y8"M Oh0Hmj?ҽ :̩+Єm,J $tYJoY"o[? ?Uh5[Dٛ~KWs9cRVEI`F~{CiDFCxY4n=-3vAY+-oF~T۩KiR+1(se,g TJzY)s1ŭo VȑdlJ)-qyx ^-\JZ\|`?KO~{DT@ʗ4 Fy!_|Mmm#Q>kb){\ui0A?^{WRպ K)޻ixKXv/#)#*L3z+% 2[yũJ^-1z^V5OoYZR@Q~AWdDr>)hlfnRR@Q vמGn*O#%rZO~}MIN9&-KnHc J[* pV9ϼ=}RSgV(؅3#w91r{Ij~KF\eIY!$=՗T֙Q-׷Yb4WӵK[#NBj-_ŞY!st066Ť++ʂTGSq[FsMb}S68%a%?~V 9n5lrkcJqǗ{yntEݤiwF&K ! C@(@ϻ9ԥxf') *R\)@)AnU]AlbIKyWy1?A_7tŢDv*^T%GRS_ [T^9 ^Tnp+z0$Wg]nPƶmJ $HČ w ֥,6v#Ե͗ Fd8G s`׬MMi2܊lO&Sp)wuL S}xrc$N-$14-%2ܜehHu%^\+P)**ҁYK]~d' Z A8'5q[HM/֚e0^,/ ? > N@J+ TO\.%d2HPJձI%9vJq_OYeزPCw'#(+ܰ{nc +e ܗTړ:bd4NBDv[¸ڏ5Qmɛ6/v*H(RR֤]7;sI-) Ht(7߹Ğq?ҼX۴LwfF ,*\w&*#J6By쬭J#'*'RO(~t6lI6!8 \wwԝV-&)ec:RJ+hG+%$*ibKZ\!a@ 8ʇ#c5̩rj~J%m!h$ wsAذ_܎R6\PI]Հ{^oLΓfű51֔NE!7dr3E` дJzFĤ@#Q+U`g&esj@ZI;[ IciY;9u9cXH'4)T2Pi`rW[{}-vGSaڜ$$)h)ֽ*GXʶśqM$.ZZnK{V@ ȶ[puM3&CA$$Ge+ͨPzv0bTY-8.##)IqD! ;/p*GûƽU͙ʶuו%'ᴧWT R R R R R ӗ2uIdDw{ QIq;RݟZк.1)}HR}<& J='%JކSu JJp jBI,XbUv3ieݗT:c{bփε-6ܧYc{mǔ#)m!+v &!yî6-Kj#%$wTSKʱ-CҒz2^F^?:#b&5VE1q"! P6 W1{YfZKnTR 6B Q) MlV:Y;$%`PZ,8RBB#\hmcB/:BPRxA*H;y jm!.1r)vj`ZKnіﲣ;Nӊs")Jz2IK̐#=]cݦ&hLqjkvBYoV RF(**SuWj&njU)FIX2w@Np ^Th-RŽ"za]څ-;`~R1ru@r *Їu,2jRV$$p@<ݾ|k4ˈ)h#JmAIQJJ $G7SLuq˫m{ )(eD3AY"1g/&rS%801s&, ƺq9wےeTj^:Dw(~!؝zotS:` %*%KY.n*| 1Iexh!<Hg;R}h$[kw{U@2V‘R$IϳZm#isNDňɱ)N8جU_:,8~vcvkcN]~}671gփrZQk-(Hedoq<uLh=ZKlm ]4e128''wWfB"՝!6%eX;@8OhًyR:4Knyc*P2C9$󀳯3]BuGXTpB-)F%X‰wk*zKW\̅QB[\Q#pP0< Iɒ-x!+]h0ꕿ`^1YXI7k<{ֲIt? =gmoݷ+v9`֣i+Hmʎډ(BN ϻh$tK_DHėw )Ҕ/')P9Ovp=>G LfJjג 8S=hBJRJRJRJRJR]m36YZw'Ow5ެZ .,w nۼ%[snu$¹S]SHyjUaFÓy# R@3nBfT;\xfd/1_cSs|>ꦠZn+kr4;[yqd-mz c %$G`YA}(C (YRB~/GиKm̩[9**%+  Vŭ3Qj\'SF0sծFf)s.*%AXAW>ү'NuFlĄ2y(aDnG;s\ji<&b9ovs^ՆN)E#F2)k\[QrZKb-mW $ y5?\Hi H-De塴Jq8HJvc! 7cU w{O2SܮmAFsp9MaKw2 Gh:ťt9*p;kr ;ZNyRJ *=5&+%l:-)>ҜJRAH$(( r;,Hn[KnY^ \$ʲ=#ȗn*ZB$~RӸPdX^^IB\PuTTP)lU%`Yk3 re3JR2D!))G''3[,ۚ:,`7-67c,W!dIQ!CE_W[%9.bЙOH[@+K)_H 4z=*n" >n"^ JTTIRHOxʕ( #PhRS .Iڊe#P)㿐G=e0VWKw9CI<;q i1::$Ɲӹ[N ɴFю\w٘s;!|m?GRכjmWj @[fC=,hBܒSs'wJxlc<=&m!_؍ܢ[*Jw X(F7gPmQmCL6);׎tVK$,t#1N#VvΤ. - JA nf]atj*0RPI*2={Aҭt3m$'I[Rp=ܞiL諎J^[K q;l8am) n)ۻ ?y zB)/lםjchj!HWJyf.Rጤ  o~}WP)JP)JP)JP)JP)JP+v}tDvuJe!K)$GrvqdHe!הI.($y#5Y\J ZԐeœq'ݦ]tnzHaԕ%@'iH’0rpOr¤s 2jCJ*ݹT;A'?8IA!mnC-N~WuLJ¥R I Hj5͉qq1ca\d/BХ-ФJJTUa RRRRRW)%*0Avu(1c6\ an#~8wJ)J)J)J)J)J)J3E|xr JpHӎ}])#rW4irܵ6ϺꢧyR AR;׌d ;W[ZTNcp#߁_Pb[I BA=+J)JF^"^IL{kSB#tm h(qX:PtfΥوe }-yϺ5Mr! Gsr2@Cjq *rAړQY[Јv3-: Vţ <,SMض님T ζӎ8[ Y$s2[՟o[-%mC]I՘K{ghOhPIBj8v}˚$َy}:J8qTeE$siJ)J)J)J)J)J)J)J)J)J)J*WޟzaFLv4\uRBú6}Q6eEWe71QzԔ( S8NIO< TpM%%Cg=ԿRUy oi%<$>ۄv}<RJxcI[ܐ IIMұ _-iX5 tiRP$r;WYrպgj1Di P$`cAP 6vqׂAY Z(ܓkY Ϫd%X_u*C@8жUO* 4ZVVX:i^Ip$sB3@QF7g$T>UۓԹtzQ(vh (y:,@_:)Npv y&"dW:ڑcڜEji)ѓ *bj(0]l6,o A$mېF{+5taX4`t ;IVԥy}S]WyO+Y[ӹŶ$9 G!;o\ݣ8rkqHK$*R }ha$+C 2m 'CGJRJRJRR޻k:̄v!!KAH'd ID\ 4n#mqqSAtdn.J\BRnI#88O5d7W y24JKAH qԶ2p|ܡ] ZPg.)Su4D{{RNR?P$xwil-8WҔ- v;|cʼ|;% HJ$xJ}KSPovtg KDN:99#jUFq^J Koz葉l?2S- q5&p,aR\SJRNncnZS7cJG'n(v0t*WDnx<[jPAD\ 4n#mqqR^e,8 mĔ-'@]h=qR&=v̷p`)[QBU028mO5Se3ی_ b䄹#;AN1;D"+MhebrDFTJ O|}|Z?n)(8r//w?zuz^lKRۈu)H$xUv \^52&\T %vWTti(󎥱de \cg3oXQ1:[N1(7unAjoLH1mn-&CJRn`DgVv[vԗGVʘl$6Pwd`r8y!'5u!g)+f8f %P ZBG>^7OS/S7OS/W7]gIuJَ$YiTР/jgCt2|E;Ct2|Eh)A 綅 綅7OS/S7OS/V=L{h_N=L{h_Z PgCt2|E;Ct2|Eh)A 綅 綅7OS/Wl+sa5tډw9P)JP)JP)J!q4$ +LvrNcE.4V2Q#%D;9Vwm$S/%N8<ќvg]-X{s68 02N R8GJ'`LU[ZZ_[y.Х , I $hzvWrJo)Rn$=!rծqrq IVԠ|k"{VV^-;pyk֢"CE%r)}$-)JIm9|Җe x÷%[2@RrGq v6fuQ/ҕ/-\NˇHS d(a--HtHܯ4}ٿY.`t;u|߻9_5\"(L͈8DAԅa>rzd+_aMN&+gfwlݞ>㚴Flq&&u̶0MCnCRSr[WQΩEy烻#cla܅,MmFun]G?:1 L5 eԶu5#9J2qǝFH s_r&l^ڮ4]$u')YFN8³-1Pېo\VsQ^y5czJZmdɖg郅88;&5"jkeᩭkSEGQrd;k󑮜loXM5)M)D}31;-a3ÍClb޺b;Y2e!Y`N)D;IcJ{oVCPM~r5Ӓ-i)(yãZ9~x& PW)BH$7$7vJf6Pf֤t)`ѫ9 Ry wƳhҷ5C"'1bc hٞ@|hlФ&tI6ONYZhl<6 8AP=?W?RAX+⋾J]»ҕ)ylIrp#({맮wc 4g=/g=/Rz|0z|0NQtZ>]=r{_Ypr&^䞸]$u AFN9qa^qe?¾??F "i船KenIKEG^ʰd79u^t}k7y_fvUcVQUA~?Zw)j&:ڞ+ @FFxq<.1rRSa(n8L /5Wk?5v9n&:ڞ+ @FFxq4нBd+Tsl97JEjHJ@ T5j &Hf{̪--/^mhRS@$^:|ɭ (3ݲ})N[>|ɭ (3ݱ})X6+DԷ%lDGVױII^ym8P<]?xTƬ7BsazK,KrVDun]{4F܎smv'M_IGݞ1*]?¾??[UeLMCqB%b:pRBnOEs.5 ڽz~iI  PT =pTFuQmׂ m ^ĩX`ハA5ciBf'nJNwdg`cr4k!ۋа , 6D@ g5D$PIJ-0R1h0CQфXH# A6볗^[nK.`<%bv+fԗVBOQ`' K}d>yk UP6a|0:%KmS)HG8 g5MPIՈBsRu%NR$+Dž4t۳vys+=pݼ[ĵR'99";Q'OzA~WݿwvsT jKymKAOQ°dg7 R>MCw)o掍=ݍga|=cxo]HO5Ч#KC HH߁Sj4ff3M;!oB@D$ T -)0nРu7՜(\%yrJ6d% '>wgݒ9j%\^X5-m.10B)*ItV !\yZa\oTpnʆ@#gfߥn "2 %$M*U|gۂnnU=ũ}2_/t +$1=tv{N(]#l/srQPe_ύj,q61͗Ӣ:ԕ)G;INIAWoNh:uޓse*)ΥMԄ+HCn၎H9 ߑnin miq"LN0HWwשu=_{c3^-PI6qc?w &2IN8 K Kl8ݧ,ۏw--[S- $-\j;T4kܴ&[-((|wzMSqwRM\X¥ɌSR99pA9ρch#4⋧ [?H.*6Jf\D\;KrRǣ298 iٗKrRǣ298<~Sm__j,6Jf\D\;KrRǣ298dl뽤MОٻ;si*7J?Zw7/5_5ajޗsKmFRZ.Fpy㙍ܓ Pv茤;OF\'3Äλr#P~)~靈S\kmC0 oKi>K[ep8#!qD"b-X dGF*|ǻYdcթ)ӀT$Nw[lhzz+vnKRJӼ``眊BcC7[KrXU׶#vDDž>$XDy+S*Qr>ey[ܞT *͟'߇ Jiˠ4nָZg2;"0ڽ>\;˷zCֻY*vHzc?Se_-\f]aGކC7'jw|K6Ĩgc8`punUvHzc?NZ~guYE|XL)a rKi%X'q3lf܋{ܥJ@ij焯8'WE^Z~g۽!],Il>[3zTِJ`' *;O7,OY) #T7Sєo$TEVAGV]o,= ;a*Qy.lɸYfXte} tXX>VZn[]q \2uRWXV VFEkz0;}o]u캦 k5qɊ-/ )(#yʿeO꫕MhE:zZպGH[(94|o3*AJɭ1p+ЩJW)J|- q B {Py&U$?%LطyIk $@ސ4$2*+=EmW i}J0/[̐FXAVp~kv\hnLu+m!n ZRO+ $U:s2 ڋMJP*Zp[jJ0S %׀f%Ssqۓ鎯[ˊ=^0[-IH t޹eP[Eh  8 wƠBZWਲ&# vHYF'o,n9M%Dy![RR <(<6NsO2&ڭl-\p7 ఞ#Hw noJ VXu{~xFXeP|;j/O?S7e>I*,R$S !ImdxxNŭIVȑdw&JHN9 Kk$c3>D2=>E?2=OǴ|!;qkQU$Y/IB9<ۋZ"""L0rI8ljf|Kcadz|KcadzN'hkarL-<1".[,.Jn lpvsN\ O8H[,.Jn lpvsmiOų?§o7.If$E;Kr%RZä p8|o뽤C߷;s;|*]?¾??8EYF\*q?D)A:B84`"4>rTAxǀ*ufju\E Di*}%9RA9xO 5>R5/ƿ.I9qw\NU$X6 J#IS)dTAxǀ*\WD&lH>d8Ei- @URϓÎ%rWw僼ܸLؑYe:}b2ڒTqp =w^ ˃#^fbqA{np`}M[Ο62cK͎Ë-8JШj(wdo78TC?uuQLUE4ε9g7mu6?6UHfISSTm% KI$G;+>ۑbޛ钥:fg o#r{0A9\FE?J"LGogu>Lq}7m}~~SumŊz JU|%XEj#?59qwP6X.Y[Pi@qbޫ꒤f o!CV;s0B57(A߈ ZD!r0EyX$*iMBCj 8s-P .2D-╷I۵!$/'*N;4|o3*AJɦ774z)J)JP)JPFˏ[MJv2ՌA3=%Lq nX G28vr;-(3t|)o)NJЇ%PyݸHʏgn7nmӽ!.w %)S\iմd6u!9l0}bRۖS <]F,TOv<(0)SN@k32a6vAH=~Jv[\ 1z>ʞ7+Ccjkem:?";N&)p*\`G8D/d:C{q]@mM6Q <@:6:̏=xq#El--e.$+{ (3|ڭ׍G=Y&nK)q![@:\{Z&4ݰ6<(JY<'тӚKT|Ju~=jC-muBU( A>mkŦz֜?Pڭ׍G=Y&ܖRB2#?y=yԑ#El8䲗 _i#>OeǺŢjMmuBU( A>Z2u mXڝmۜbdc=kNq.Zac[ƥ D[)SA)F10) mO[r5-"J O^6 q\͉ld[1g6;ĸ*- T-iȷYb6m7rwsq2T[cxyY;UL==lzxԷ$e*h%={hF0001swTc?+mٷn8v)6&ZunŞlˉnd22;|3 $'?ugo]G@ i֦2UT[M3SǶ@ XZ[IVe p*zUFX 9 Kja-)#Á >ւ9VIJNL=!/9K8p,hgtjj/ UͭG@ [Me-$2B@?puodB3%YJd DOTj;C)RMG})Yqͪ%u-B騾IuJ:S1ޟmJx>$2yîfFvz"0=n[mKD>qR鮸m~aZ)BV"IՔ6 !ҫ}Jf3 OğFOK Czj7]R)oOp6|Idt_Ī*Šc81`pjkM%+rMΝ6EE9-,:g ^2G N˥8{OG!oEݯt:Rr(xnǪL]4V~%Wen.q2U-)@AJzxŦia6sZwOہ䴲ә)xjx'z(U9mrZYHuid5<==u1taY{T]񸻵Tt+'ݏT:i0T]񸻵Tt+'iŢ-y_в?i%M鿜|nwq] [Ӻ3婔P+@>'VuKv4tz"ЖGAԤ;K=PeiBY)!qwkiR2I)NGcL_B [Ӻ3婔P+@>'EZAsrUCrKNa yXCI d쇅ݭ2%H#$8?G8ϰjt$k9BTWy06چ(cwy+CX [r"ZDdmc{akt +)!R8IQ5o. a[ؗWgAf-hJwPsN2@S|9Vˑ-D\x26D)$[oOX"oϬ 6ܣ'UvAmw:#%Kh$$p WS2\^= -*uե( QK $)|Hzl;|T4}`ap< ]J6]%N8VIZ8Mi+֡ۯ7&]L6C2$҄GpIYl3kSB? 'srv;걋ek,=Km.%O8#.qv;GXI9Žc̱OG*K6,8SP:IJpK5%;v<Hݸ|{a,)6Фߞ\1,+K4'fn8!-)$Ox͵4x,ym)HY*OQ$xfO"1.愔ڒ#;rO)m4ʛX-KK*ϏI'G]q5 ˱S%ҖFUޯwUdzen;iOͭ@jRb#)mc. SpBvWD;6R;c>IKqގˌ8ʎFrAd/J0}{PQu[B-8U渳<,r\[(WcJqJ?6*O$OE>m,eA*uێN葵GwFyJSݟoG˜yhI mH$g#+,r\[(WcJqJ?6*O$Oj)J)J)J)J)J muͿH#*<G.PnE'åLѱS8IчS@O77H][ <ʐPOFHg=_k]|v:a:J)o=FЬ'#p l^o (eޔ[9>e]將nO3kT:\R֖O#g*$t9kj-!l2R>)$$py8uP[ 3oGf]]Ԓ<|᎑#);ӳcJWJm}e 4wG"f m9%r6ѵ4;˛Ҭ@%'>{q\ Tm aQ)I!#;ݨ]};2O<椕V ꑫ5)-hJByJBVR999D3W|>CmE*-Jڄ(nu}'#vEea!-I FF|2?h>*Rc*|IR2J'x!rҬa"Sq&WY RT2 +xSɠPznzˋA:<ט(dr +qX V(yԩH ܓ z3ӡڂILH=] Z%IV 鬎mJEL|#(o*pl0'j.H ϵmDK=) -y(JQvR:8ߝǿk!Rߑ1;hϱv1bJVQq!yJT1[MP32A%ERa@:RWl -#$sA#pb;*yHFp^ynTT{Mcyκ0i? .t\Kj BRD9y5!MXq. -H%?#or,2mCai) N=9Lbٴ(cAt8d ԟsjUn(-pb%"Ӫ)(+="s9Pcb2qQHe+RT䝪I5O{.3e 3yJr9*J\P`nS Zn!vK4yr\|-e%*Y$$8sQuE ɔI֝ n8VђH;O(#ӋO6TcP[^pHP<9Kbx紦 *RF䐢<8m5n!kZހ(t)HPzQ<3_ZȎ[rBȖIY2PG <|EZC(g05RHZн*N?WUk/KԙB%*ZPGy}ƏYS)2HTg()JNBHGy֖C(g05RHZн*N?WS(((((*uY#K_H=P.I@PG}PI\.n=l~GKIjIؤX>pGfu Jd%O͛sGF |A^GG}V[C֦tmr;aej* P\wsAsz;LdOJTTH~ glp"1 ȑK.#*RRl$gV!R}Qi-J qW T5&dt}i(ÙJ1JCk< ̥ΖVVwHlRF2 UQu:]Y`FhB!جNIS{xAجĜnT^K enՠ-@p*rьj'-H%K;9y>8j!m 9ib9|Mw:ĄԡCn8GPm+!s2FZ+qC(oi7s'ݻEk8㚂 3t&4vhyHʒT@P+ߐFFْXj3a)1ؐmZ4RNTFq+EkLZ&W42!IѸ1UTo-\ rRRТA# O8 A)Zzr6k1n%)J8H 52Щ귥wS%n8)%+QBN2gy=]rLwrD 8XK nH*PZy%'nrB(;1;Ze'''p2I?UKtS mM櫝hcv{I]#y㮸FVZ dMEYiwAy =N%saQAڰ[Nh'@2-CijޤGi-dWޭvY("|!0J1 h"[rTI)ŶDBJG'wT]AeT1t AAF\BpNG?S+\[RJuN+bROXҔ X JOz&@#'^@=pqZJPRi7uܥub7ΐ[]"} ?J- r3^#wjPQ4mrpG{jPTm.[ȐtB6$E[R R R R R RnVk{gGnDWӵƜNR>f- 5AoAIArc@kxyRmr ] ;jq KaJ+$d3ND&qr̆%[2/yi<Y2"$OZRJRJRJRJRJRJRJRbogosec.orig/documents/whitepaper/images/vsftpd_wu-ftpd_score.jpg0000644000175000017500000005055411113035142025655 0ustar owensmkowensmkJFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!222222222222222222222222222222222222222222222222224"N!1"AQV2Ua#$BT4q3567StuCbDGR01Aq!2Q34CrBa"#Rb ?R R R R R Rul 7*m'C%H 궅8G ( sPoWL!rDaR$*IV{OӱC0Ԏ SC'5#|.}-yqrG;ggB i ZN2BsH!..q. es;aA‡GWnf&.KÂ㛙:40)}clt{ԍ U8-$iԝ!;\rHzL,BOvV㮨%(HI<_~"TJgn쫑`=PdښHJDd{,PzP]-WervҦzR:ᥨdz6P5ִDW[,䆐B'cqoիr[,ۥ$vrKAG fn;ߏWFⵗN9VjvcsֲHۍZc* >J{IXe{NBL?y` %>4/psMIpSB[qSe*< eGayq2*! 85c]b]yO-IS-~[[nk((((((((t3rSZRԥ#* ҳ$\xa-bEDLy)mnJ :yބ۲6@AJR_%+IJ)#%KY6%Y A ۖqdbwv:&ˁJZ]-疒ÉKY!!IIAJPdKvng42krRa iɠ-#\!^9g<RJcjPM\t.;-ɶId:V1* sTE R AI (1-Zi*fܰ$cslVDˈB/Hv8p08J ɶKut #dZ:jP8~k4ܡz9!Rzx g9IAPbtժ"D%}qոn-D7{uj[&[,/qᵔC% ⻴蘲W_f.K 8BWBRvH)A7Dt#X K끌J!)ˆ8)J)J)J)J)J)J)J)Jg]ۭvZVG222+F1#$/cHRI'$u-PD-eJ_X)JL!!)v!\d* &(Q-A(grI%jo-[U}Ձqr֊%E mM*’ OGWDjkXi) SJBK+]%y۵r* ]LGqJQ1GPpogv{ѴܛqSRQ=18Z]w~'`mhrq_ukJfRN,A ܹg#+ }ٽ~`6''%+#j=F|:jw}2.[tҐ**PNI*$~&tfҴ>#M}luRI$yS\l1.(ZPk[ZA<{{Lh+oH%n[#-A̴$O K$~=D X\駑4–?3k&?|ogWϞ>D X\駑4–?3k&?|ogWϞ>D X\駑4–?3k&?|ogWϞ>D X\駑4–?3k&?|ogWϞ>D X\駑4–?3k&?|ogWϞ>D X\駑4–?3k&?|ogWϞ>D X\駑4–?3k&?|ogWϞ>D X\駑4–?3k&?|ogWϞȺC[˙5-mrp…%lcOT{T^[{Z"_v>zOQiC/N9UzӪluaL⧿'\lcmxaZ#n 3 iJZ}]4N%݌!ᅖFBN1`jڧh 7.#RmﰶRAazr{VZl9'%Rl $nm W'pr8\Ba%! X1YG$l㷸Wfƈ&RMKj~-h=95mRqnsMNDm.,zA '__>{7ɉG>D X\鯬-'mۙk)ymp22 _'[?|o MnS/V3SIw\t((|ئRRe$@%֥|^}̭CM6j J@I=]\'J/nKi QH*v}dx DCT^BCV]R7 a24ɑCR^vҬzg\'fQPKB IHҷ4ŞkKG[T:y[Nx߲5=pNiiZS_QIۀY|O7ZDRnPqzܑ_T\a9=psNK.$qNr#br̛%.Zu$XY8/lw6qmQ P IF 'MT\s&K_67I''=Fs;| F2c)-6B}Qp;rIAwɅ;zyza}=2~L/.~:ΰawbٰNmJJt0L03,~շVCx'܃{YYEtTL"7YzcV}'9 9r0<%)vTZ*ۖS60869xO6XD-^'Fip%ۘ;R0y&-]:SB9l9D-^'FiTVmAdm|q8&)$x%:1]C668xYD<w9k룹dQJRY j;]W/t dZò3)Β7#䲥 RB2#>?l~$dDž".b܇DV44SA CJQ$YRܳ_5n-Ԩxu⊲y)Il֜+\]5!)SU3z ^CݨT*/HJwtv6Q&QVO!Iy c{<3#jh}>{;llb:%=$ n}©,_\Z6lLBygFF*}Qv6Ŵ9jujJzI*' ~LSl&{߶?=Tzɞ~LSl&{߶?=Tzɞ~LSl&{߶?=Tzɞ~LSl&{߶?=Tzɞ~LSl&{߶?=Tzɞ~LSl&{߶?=Tzɞ~LSl&{߶?=Tzɞ<gKcavqKOog) I۞v8RݭSgR gO\}|sϳ1<_eK3xf}_ўv~n?7Dͅs]mN˲,O6N:%C.acqZ[̾4XmdTǴnsMK v4 Ih'w@-F@=#ĉ#2۲IiTƼMю)E6^J1z'6Oԣ ż~*7*ZN#R.)Ird‚]I=\a`e$Vȸ}nBSk[13‚x K+cx㙝'TCƴYd[c)I'G {2q5Mq~܄nHc`%rgdV9ϴ3:2NNhȶ ˫RN H@8dh7|f󗾖3WcKO不qXr;֮h P5LbQݽ.?(${zV(؅3f.F^>sc9gB8ֹ3aGvx0?{T:뻺XPbΟx摏gl'9Osf%4Vn$.=~L[n#m@iAX#*NOwˋZ"Ѳ‘*JHOV7!Imd{O۞7m9RSg(Qq gO\޼|sHdzsoc==%wnqePꗮ?BS:~bn;F=- Y[3x>O˥qsVz֩z&)Y.>^N13:g0}1}oKo=,ݭSxL(R SL\}ckKϷ1%cg uܸ0Z:_/m܂Br2N9T.BuUW,.^LXxs.蔥+"T;7fb>D=b74q dƬ~]\ $sLn4.2Bqpz} -5hqtLrw~8k 3o\XL]-loR G|{kB.,$ [đXFНRAHGA7hԍ59iibB֨uAo+>+k]ghb!eL^srևPQ z(<'0%E.D/ n\hhA@b/R؜ ))j*C%t€y9zPdܮ!IKLX.7c9)'=GPs{c|K F<[c%.@}ap{U+RR EGJAOQs6pcCiѥ/!K%`4Xn|}Poye}E ~t/ye}E ~t/ye}E ~t/ye}E ~t/ye}E ~t/ye}E ~t/ye}E ~t/7Oo +4DoC<7;pk7jJxWm}Eyf}ȍgէn`-yIO#-4L}m뗞%vX|JO='7SMvBŭu2IǷ3'uCo\7-[h6G% Ry=Uʝl&6۲;-l+:N/=1q;- Lh<-9*Ҙ ,-įړ' \Br=]f-%i*=Ecw# 4N՞tJiLAWIwl_!9.mU4Ս1;|M\6ǹɉx[̛.Q,훳۟n9-Sq;TMmd)|ZWS+t_l{qc 7\Yٝ7g>sTZ*v9SZZi2C%BCq'$yExq5vlD)(Xtֱq<;fvZi2C%BCq'$yExq5vlD)(Xtֱq<;gL==ˤn:3yZG@S` ЇG#rG*{5b&-\nTĩg±$zÞ7 O<#S)հ[w^hC_##G=som.\*bTIXT =a|c tVoC)YVKZ-.rw\D+rIp3BiAևcŒKM *R0g_dmvر100 *m!SP?kߊڮqTyڐ񹷐xAh~Uz։B7(6{cجw+צ]nM%ʔPRJ@=E(S dc o6@ӁnuƜ&=D Ttq&`j  D-c27?wdTs*cF|]r=Kn -٥$8RZ!C{ZL{$--ʔS28#?]Ԗv_j6(4AY1A+gϑM+şO=1gPq+gϑM+şO=1gPq+gϑM+şO=1gPq+gϑM+şO=1gPq+gϑM+şO=1gPq+gϑM+şO=1gPq+gϑM+şO=1gPqgϑMy^4F܆[9Gqߵzv?ƴ4Ҙ}oIkWg4L̖P[^[+ CsߵQj[f҅3wlq8=Ny.l뙐e1.3:Á+ GUZ/Z諬)S:BٕvOsf h'_uy޾3[B qkg3k}KBXVz)m* qLcьCnS$;6">,&m\ZIWV1* g~mctn>dm/YOcq0H_v+LGTNğTToxZghou"kf_Bol#smfu".\O$:V9J3=Uroˢz%)JȢkHkm{-(@'7(dZ5ѹAnqRR!IPRT3B#>w.2嬯6ӝATBs)'98Gphvq#0Jy€lڲ@Asa1Er弔!R.%ԁn=ewI>5zRZE&R%(t*Zp[j'2`P8Ͷ ({+Soݹ}Tkt|>M87,#ĩjqA̧ڧ>߶GlcO%D6\UuZ}];Dzu-c/V/!inT4AA Le}?FVq'!A* 񊽩 Wk |>+şO=1gU('>+şO=1gU('>+şO=1gU('>+şO=1gU('>+şO=1gU('>+şO=1gU('>+şO=1gU('>+ş^W'Ķ5NHМx 2H^k4Ozv~ M8íĹfAĸnCd(ppATZhj?aLxYwfWN3k[_j^ҫw|jOsMwX1y!7Ai)ڒrrAwl[u\Bs m.Iy-$3N?__qG gJO*_ljms_G1|=AKvݶQjlŸх3d!ݙ\|gi8q_W)UzX3UyZA;gfIzoG['gwnkOK_-]Sx(}?! og2;{~+Zz _0ה5ڋԉ!ZrطqA)BC̒I<9yd['ŚmSK 8%$V iOū=_/ &ω?LM;Eh |KXu2{`nH9$ƨg[k3.pz彸y!է±Q꫐=YqE,z>+"R \g5m䧒%%)J2J JGT@]λ[,-[sn627$dddP|FrɒD+| HYAHWEtۖ*m-Xo$_n0ۇ lVk, vq2RUNmX@v)G$^鸿seWViP7'!rw(>C]DŖ4zYJS"B2Hp«P1""&<\ԥuB}mW zh|\oan7(dx뎚]L9!.JTp 8')OHikX=~+oooO?O߳qLv6n~=MPT#ܠ$ƙɳHWXKAC H_!FǶFgEg?pJ*9RgU}9طk_oon';cǑal/kw]W+6E d5!olFYYAh'cz{᦭-YtgHo<4c$ld8U-)D?ήN :Z9k/GG&.qz_g;8?zzNz-}o7oZw۷ٷm $@gk!xDEj[Mv5e,hE2F[THʒJhm;'4Ӟ'J>G[gfSwפv7$E;EkTXd{`Q$ƻ{U!G5e䲗RՌ2#?:Ny۳JooFٻu1qj <{~G=S01s\|WqO{`|N+} >n8lU,T(h3::߅vd.VMc =Ҷ&.v6bΚሏv䗠/MnӻU9Sm5 YʸMmFm7>WxOm ނoS'ښdLdP^uIRBv-+5otHExV%߹lҧ$cN)h'eM& rͯLY!^-COw&Lr#ڟp6S @@['m\Œ،ˎ/!.6# |R ;\(SHS,srs95ɖ8ݎ;7gp{kv!v"^ q'Bp99#sY:i$1enRlQ_hOS;s=eeDE~!KIDַ8l' ?@U5"+-pꭏNH)(ڒw( u|g^KuM 8@S~ WJm) G8 VԳ磿9 !eXdqV#5]E((((((SݮRMINSEmRAzVd+^^qyGCW5l݊dx݊{[ 8[i0qAHJBR`mO!=cˉ)yZ8s j0_e'xK(@R@ dWN\ˣ2aMaJG*z -3΋tӑ1R `VOV KViܖCJn]p6\RH۴r~v$hӴ۲e04a.8Rv$qֶ.k`mm%IHQ [xsGsфv];!eZc:W(J J}յ?*#\muEqRvdqߊ 7J@8< 4D9kBv<$(J 69&]SJ}]+RwԗP'`PzKj-|9)FVׇSN9sR]Zs_lpxTԶdȷBi^=1=I㦿]QIUˆ}[lk"k*n}Kahm+KU$)kF '-`0aN$;7-I”F}e5KASݮRMINSEmRAzVd+^% :fT#ǷWW)zNx؁K p(3ḨGAksmCd =Ӛl,N^ɷėPŭE%)%;Ggnީ}r{K-=!LBG8w+e"Uxnj#F+\i. wPQ֪*"bGLL.?ZZ.89ZWH`uzo΄H%g08GbEMiDWJH ߵR!iJ#{8*&,J[zEiJa (HOWfYT6v@t9PJ>!/RކdΕ`͊eCԡTB{GpFJo*/L\LthZ=o,d)%g$եm Vd4*IZs>bSF[> n^0ԡ'${7x'EZ{d9}IX[Cŷ3m@^c]5 KTFtyad,Ujua.d%׏[~B @8% r@;ڡWte2mK"KE+MiIdg 񠱇%3!)qVv aviJ)J)J)J)J)JLʸz$ۣ4vdR--$!YpOPjnR-3.(i ҜJKR80 `Mnl=-e!+ H ǚ^']}4^TX? ۿjJٜc5-#̌Hi.c)Pq)Sy,7VJF ɷ˜Ԩc"HzK$:\ cG*ՖS‰v*L 8rBIO? *◒_ú jaƔw dJ[PХRwPP{}mڸB␙ ߴHnw9kj[)tU*C{(4@^g:^{2D8$0wGt(Jr3kVB0n][8 ꑜNRV.r=mYYZրVpp=ٯD,Ƀ2*%VZ+VĂՒmgڂ`lU238Ax}:S0a_B7-UI Ϯ2y:,%\yAԈ*C}dIK)<+e˜跩M)l/ThuԥMn@RJ=eku-l)!E $޺VekŰ>{!T'k@)@)@)@)@)@6[5."\m`$ЂcہEXO˟&Ls81ԐlJ6I))$PjD 4z8ٳqc gܠ£[AIIR1܎|УZl ϷIY rSN'$e*##4Z:R#6u]d9 +x'k^cX$IOc(H-ޢTvC'[T Dh)8SʂQÄ8WmyN%P4`q땊DyR;kCJA[*(;G!C0AH5mm$IzCW|'rյ)$%# BGviT  T*Jսa*^RAܤ ]Xi[{S%Բ*h+by9h62'Ɏ-%6Qi)RT6aQVf]lЯ(aުQ*ؤs,F Amx)80JQ|YV:-fKCe J[AQJF ʎy&h0ۮeXq+wNuH H*>aҀFTX#ob\v)3Nj.D\p!(3 {ɭfj4va4ICm%(H{(:WVŞsͰ셶ËK-,nBRS'#j7bEMtKA[RWn_@O!<VҁX7[ZT'eqיpRKc팬r9H(2voB[nFeo<6!EI# x)<֭)AiY%Jj \:M_RVP IQO0yZVkdp-c#*BTrRJ8W#Po[qŜPjK(yc%@ǚR6Jv1y8Xu;V@;T=gWnJRJRJRJRJRJRJRJRJRJRJRJRJRJRJRJR:fm(J]XI 㧽 e8*q[TF}5Ŕ) PBФ-HZ8T N w5ڢጇ QǞ[+ZQ'8>Х-KuHm S޲RO@Wڔ R R R R R R R R R R R THz%-Njl0컋eM4ˋhm|jw'%Ժ F,8I H8> V OʃUۓE ܶI+%jJR=@VeU˽Hugð8ƕDyj":}n"3量@$YPAP tkHfL l–y)mN,$n2@Tҧ-ڶ%dVk,N 0em(e nJr#5G@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)@)A>6ye3ˍc9sl{sYJkSl!ĸKj߷ *8@x9PJ3$·SnD!x\o+݊%-*iDyJQ R˃owUD/ I_9ĩJ' J#}B]KD2+ka 9JA8c8'R[mU1Cud=JSDgdJz҃mJH?XYҼ~*7iMʊ% S nBJך @=ɯQRRRRRRRRRĖF$ISD!ek!R#_"^o`*39ƧH'-uJei Nt弧p2GT(QBTPڒ)*zER `opoȞ=Ң0(N@H[ܖ!1u9ա!Q9G/a(a8WS_[݁:< qć RR#`&t1_?&LˋX,RTBB)H "ÆÌdr!8qTTj)4n$XoQ;cnZ\inF`2P3 kNz:V ۸5V_(2$>Zy/).%!AHV0Fr6U((߰>1Z#|ۍ.kBS]lH(2Ï8ToJ ÃM2d{$&cq@D'H* Bte88{gm0.(0 BN39=NjI&q#_eMB0240ɷ8.Tjԥ=)PFʔX o&1LB~%RXaR48pl+UJP)JP)JP)JP)JP)JP)JP)JP*U|Χϕ_=7CJ ϕ_=7mWn҃=mWnylU۳:4ylU۳:F>U|έ (3F>U|Χϕ_=7CJ ϕ_=7mWn҃=mWnylU۳:4ylU۳:F>U|έ (3F>U|Χϕ_=7CXHTk;vƤ2d澩E Gh}L(BSb&} XlU۳:G[>U|άtɶ XmZ- A)u+4'Y$ mE%+Z(Ҵ' V鲪fS:fu<|ٿ^1r W{V ̖> P mcMi Ch1)B@@vSL_^^mWnylU۳:4jylU۳:F>U|έ (3F>U|ήиn cr~Fз O_HۯZɏ"KS8圼Vxbc\[*6I[ˋҤ eJHA RZE&R%(r*Zp[j2`h?({,vWrJo)Rn$yZiWVs)oBJ%$$u>Tq%(^y*qK`(pvzdQ\֐)X)VAJzz(2U–-,/w20lHǨ8#WF>U|Χ~čY {gʯݛ6fuhiA6fu<|ٿZPg|ٿO#m*{voV#m*{voSgʯݛա{gʯݛ6fuhiA6fu<|ٿZPg|ٿO#m*{voV#m*{voSgʯݛա.~j.$$}=a)RyĒ I€Inapr%[x}nKp%RTe 'ъdU6uU_/oޕ^):C*D6IR !T: n\eM)y`7y)ry'&X'J{کo W|q @[1f2"ʁqo\II߉>>GؾquwڥHou#_)Pm?:U2,|)>RnYX.:up͌g}8^!+@&wq)%oi9nI$3Y{&vV^ rk]kS%(Jn2Jy^XQ2}@ C?U/ _Xcb+"܇ҔJU<"}ry,86RBBR 'I tޮ+Qx৸}\Y#%TsD댥[gz *;Rq.2ZNBFAAC)#$duETb,ɄAd24 !`mWXɔ.dKRY֔l#$yh0!)`)%KSe>8qo17gB#18e.-I[R'}{~.wnܕ" z#PGt,wӐ렔y*-hmMJG JGE!5jvsvyK>n+9:@ JFlP]<)D&FKS^hGWV% J%洅iJJ2 Vu#A hֈgܠ I)TRzE^ 5,~gq IGCCS]7pa8}\K)eH$nA=5'C.1$pٖHI ymJPVӑZCۀeȌ-sbv)CٻA?w:R:$~12X9 J*ғ78Hs5p9-7lNе8gy+:HVJ瞁2 F0MЖ @)H]ݴTxa[ιKDS hͻ$+[›6_gZ\=eo@'wvmIp-r^Ncݣ7NN6ׇ(H$m71oa8qS))eH$l=$~ى2_ClRBu(n zWy7ksm "% DgB^R䤠 *3EpΉ#FerLXWmjI#q#(ܛ~^5ݪ "Ĵ~3)\`'JIsPx?&nvXrRUW]93SCKƳ\ivFy2P,g VAjOژ6y_Ju;gk$hEgQ>-.̎O^f4N3icv* R]B{}d}uǶ/4](O^T7kk67m"-y!էG(Hp=Yٌ)JWJ{n>ki.6Yb촌nԼvu!mRJR` P pGX{ӼQ2qEl HCح+-z[ԣIQ*PV`\_92}[QF*ZRFH:KLcO!#4^u)J H!J sVTqIz=M7,p(/ ReKBh/JZJԵ2Kp:|e\ǹ sqX(A*_£JJB;*b Fsn *L~Ek#*p6t)%IX=H)gRֆ DԤ~!$tR#V1?in7nmyti0lVaWtL(2n"m%(Pkusu 4kCf&Wn3((CmI#g#'ph"qHj} =rZ-u'd*+go›4V{+go›4[簦M[簦M<|)Ag|)O,%{ ohiY,%{ o+go›4V{+go›4[簦M[簦M<|)Ag|)O,%{ ohiY,%{ oSFf{wcOlգ/8ެS3'ɶ{­w }Þ兜/Z[mE8LiX=NN'G|>DCQ QL%9pz f]!:Wx{KX_^Ԫh<6Kr!X40iu,}A_aLmVPLY9,b%]\؏7;uT<&zgQjb Vglܞ<*lXS+9W|H˛)<0Yrq : ç5vf9GB[ﲸޓQ/b}G}4qaE@b8T)#ZBrpiLdZuJIV@J$F|s UO|J_o^5Zg/F4!Sizf K u$YDκ*Sq#$;LEEm2J۫sFS6JN}p*"e¸<.Zt')ՔOAG TRt!:ap{*t|ksXJV┣ԩJ$+{VV^-:p֢"CE%r)|HZR8kH +)7ךe7ڶ}f+ia(x\/feGu4p6I$ lf'b>4Ig<B5+8637CzS"S(݅kE.v Km]NAF͹->sXy:y9Iѫ;ޫ6UMf#^⿝;%>mnj¢6 Iړ #_{!'>p8޵o6Ն\ȗl N)'$m}g˟SyKiıyE7IMYg,XFͯbAf-r5n% hk[#N#$bx;9*jo.-++ Z2jq;AOSY ƘKe% t0iu,}AF熯kwm'c(Ő҆ (l/+r7>96҆8q"! -2 }ƴ;No\Xr/J ŶPTGBR'BJr}]ɕYr|!ӆE$j/c|~&ǻEeYyN$6HZJ$uIMcX^$*RQ?.!? @EX⧦bm) :g=++n1)|.;7mel-:$+ %Nq'6ϒ=7hWLSw[簦MexI Lqr%d,(`lipG5n"Zn%ɟq֛mj( <yO\)5Y'Kw&TyxRfIQdҡ\(iM,e2ą䥨K)I`s:8.lƹX&8EBG"ΔlRVHo^lϬt,& o%W{ҪCpkoX!1gc9;88Í"x}Dp)E2TN(+њ8:Wx{KX_^Ԫh<6Kr!X40iu,}A_aLmVPLY9,b%]\؏7;uT<&zgQjb Vglܞ<*lXS+9W|H˛)<0Yrq : ç5vf9GB[ﲸޓQ/b}G}4qaE@b8T)#ZBrpiLdZuJIV@J$F|s UO|J_o^5Zg/F4!Sizf K0=*Twߵc}CvcpC) bfKm)Mj‘tO .c'm$\)5\:\vk@ދSw?[Mz QfE\ڔBwq*ްq0B*5 |l%M()J& @Fde.458S*^W*>ixI}5 o".9д! IG{%Xu=@w Hqoh}z ̄ t:~p:ǕgJmJ񆵐撑{Jm-"zqpSL'[:$#9_$TW9Fv7>=[(hƭzVe1%vLQ\SekRu`';U<Lj?_u>1Țn'M}(n4cVXӏNv\5n\?%O1:R0G{u_ή$"Y?UcMnlKU5jX *5ES$FFӒ6R8ymlڔ֩2U# 5Xz X'J{کo \-o(v[(gTFTsi p7).ZfG^JVI)ARoצ}/࿵f}&uW|(1°p@Otr=#^JPr%vt 2zfQx$K؟Q{M$}(ERiSZINT'T}@ \ᤲo_>)$EC#z{hn^?a\=T7īۏ}k%|KƏ4ԺzaKc\q١ k!%#J9Hwɫn+/e^)#F5kՍ8j;0=*Twߵc}BuˑpJ*_Eِ$(ԇrA'xWծ< Ec, %x/oҋStƿx2VWL?_e_󦡡wLXI1 ^Wpr j׶+N\더T헮҃!A-$5+J=Ϥy֦+}Tp5/0#%!+UrYh1ؼzg38Ӎjv2r;ȋ!ƛ@$FNV1jo~M}/b\SrNjɂL`NHRR|N Xlt'lޯu:<0dU6uU/sޕTR Cm kyZPWe'#:;qb[8 IQKU\PI^=Tz X'J{کo \- 8h\eBvJ)Zt$ʓ,\RZefS?Ht썂:D<&zgQjb Vgb囂lҔHo/H'bOQuwLXK1 ^W895`dk| n~OzMD|M!\C|BEl҃%A-$NrY!J^aFL+gq-ғRJ@FL)YJ{hn^?a\=T7īۏ}k^5S *[L6e!\VcRɅī;k~(mk-_ 0}[u#HꋍKB4`csaKY?#DQOBqw%Er`nAq >+Q H:vΣ 2cyGO$9׫q9a֍u~o~Memͫn;G\$$:NYh{č(8d;-3I VFr7QWx?Ð]esuɳ{ʪX*oVh+V3 H;`XS-\ ~S/f[%KsiҠ)Vzm֤9QU䏌>~ʰU7Xy=Pn/\ʊlve i%-+Q H:vΣՌZjm?'>t__tKؼ'ycN6ӧ9Wpkw\}EnaԶҟP;gPwk_ή "Y?UcMnlKU5= aTUgi!YjFΎ7\}vLh O0zQ@M'B/Ҿ[j?W Be*e0T?JV* =rgk4K7`8;2!5C_{'bF7=kI^Z3ՙjb6_iRY 9`U#;:x`TPܥQ,\<τp4mOZͦ!-w\IIω>>!oRQR-AVc(ԉ)`($$wLISϰʅRujQQ 鄧7Or2 +@&wqv5xKƩrl#%6Kr'Jw6'NbÓk1fˉe[Zui!@ 11r24ٷ9p |mVTdvD4?EWk+Ji4%}ЪufD4șrrֶ[ mc/f7l⥽Ӱ[ ]~j%Ɛ}`O;ژKE5|\O6x=X)zr 5!_AW Wl++89D q)1 );}BZ?SkLLLr'K~x6oyUlO mM{1Ua2P2+l%I8)7+ 6,MWXHnVt=!  ޒ=Glcy5EꢑV꣟|&'IyBk·|XKm)Cԗt|NδDo08C2$=A/M 7v#qG;ޫo/e}#aU:kIݾ/8u(GwūE?%nsGDu>0M1`׆Spye'Asl xeu?ɼkQ{xGLh&G+pA ZEZ&C)/JP-. FIHIUt]ެuK/DZqԮ%W|\T#z/gb- m;%/g } [8E}\PvPeb)ԄjH:YgoOW]F_|7r&^Wvo[ȐoqRzA7fvy,r޼H-[@ ǧ33u5 'lɶ{­ _ep*wu79jYe*#Br2mz9 Pm+ŋ~՛}E8/Y|FK0, rٙ:;%zqAf^->>]bR&)@:f֙L븷#[Q{MY*\.F3ͳ:ߋe\.8ԐsϝS' r ɶ)!טS]Vrm>(^!+@&wq[޸~׷nxb>m q j)s:rpr~b%3x8եM,uGÜ IZSw/dԿ}aq\-3W[-ʁuJ gޙ;9uͲHCv;܏VRLvД9l#b#rJRJRJRJRJRqojgzCr$ CJJ$o p@;um5-qRh*TN0]N9Is\av䂖78{NYGL2uan kzt+3x: Yn5)_CJ<%N:J4e*W0=A XM[a_ y&91Z^b[qD6 zn.C쥅3(. '`LuQ&#wy-PaDJ{PP z꠭] 2MCp$>\J5QdQ *F2B&CDޚK6GpR-aN!>v/~ʟ zdm +op)SҷKHNԔqBsƃ=#˃vf)K[HakFZP*(^Ca9'w{3"}%5G)$qt* lNF͸NԎҤďt`M"[Ju N 7m[/dۥb2\E2 $%J8st9.nR] #NP0sBju|3kښ$:q)0*T"% $f擎@*яX_[l(^t,54Nīm.퐬6S&1R4S]BKIG/;ȱ*'lA$#B% 9FGcIjRmSkn[QVI*+P)4![FF7[n1W)koҐARBq5%Zw>MUE;<|.e8ԧ} *P8W*(є\¬N:, e-ר!@ WOWT8K{v!R™KMHCXor:h8ͽ[a_ y&91Z^b[qD6 zn.pL'[.A10yʋJdv$؉1mn2 j%UĠʂOUDrz$Av3%Om2II*Pؤ1'|Aًe`6Ey$):[ l-92wUq^_V,%gFuJCyik8q$7$tOZowr"ٜQzmA(է:z-\m]*Z54\K:%'pNrI4n[*s2TSqtJꌇt܂Fw.kxj\x(H*#~[:3bHyBXe 2GZԔ;NQcI5×$thu2b:Z:5Rt9-vv@G<NJe)1C+%%'t8k{ͱ!Y:a=%/OtD'YܽlYfd*s *ѩ RI8V:zQ$ȟ|<ٔ<#irp GQA՚/Y$*Yg2Rc6^B$dYDEJ# |Ea@I49Crtj4163&JZL6dQHAӓGt(zk鑣Zk%SMJר%dJU*;oA p%ZvK 1e [nT%j 3tm(K2._,‚JSFR2F[ny6p bӯ G-:ˍD223ViNu4F%K}C`*Хgt@ܞTZ-FE 0J{郰[&ڰ5e)u5x4PP;Zc1c-my1% o!hBU$oE}%h‘p[<)%ƐwxQ-'P=yl7ˍytR!pjeزlpb[ ))6U6eVk}3/!R+ ) +P YgcAkdt3!:(R$AJRJRJRJRJRGYo4^ ҬrCZFF;^.jhviiKP3!* MXm6.ì9eH mzJr5uJ 띺Ԙ>̔P QJJR zwa象Kh@*cMuJ))cjl-rX[9KBԢ$5@(j#d, p[vdv8[&#ICi2ZԄԕ%ZNw#5ky¾>2oD\>:K)JT\Rtϛ&KJ=ҡG\$9Qng3$s_`lS"[8%oRKHQ eEDnA95ɋu Zj֙Dvt2̂Ot-~} = L#Cj)$28}V>syhu侦G|(%!DecCk}:,KZӺ2OsZt9@rv8z}[o\1sF.[a9Rs!C v5h&"䦹[1b#@qN!Jxd]hJ3RXu4islb,v;|ҚqDe1ejJ:ף#VHp*, \$ܣsHBTB ɮhkj *,3l8XRG,+P Q #k=5׀2Yq<sSj RPsIzc|Wi0RZ5Ԥ lRZROtҭ F\7eC!ɎcBQ IIN $b[Z-6Xr|f㾖b%kcK. JS ϣ -mvU瘷-Phe A D@HG{V#ø +&-%9P @QF9Ha aʓ+D8д&>] ! NFccGu%)akFU#8BAΣPڃcb^=*T] *$2JI I F2Ra[m[uQQ%zʷWr--ˌRrҥ[V] 蓍6+{fť>CNPNR tpO%5%P:aVB| yRf[[\qSØsXHG\TZy,r;cD[z;18ﰨŒ\.n;%7=@I[#,0gF)$:qm+ePqs[-k,2Ve rթ[NJtъi MĔXԆ d-*II%**NJp jk^vC ~]/fZtj((JR0oJk%1{IDq&c:NCiqD$ @8PG=~v4Wk fċFR(!'Q}[ +/hkb%)_BB[%+XKHyM-8IӰ8$<8\IuTkpZc͗!"Z@(y+RpI89 lkS[ÈJKEhS_,j*Jv;k<+s V9葂d*J)3RH8ɪ1O9ې9m7)t%kR |FG^jԹKvqqdu Q *;L.(&9̘$o)V`4+ M rg- PVz{IӖi^f&te*rKJ} (stI!pܻM͖T%29uA蔫y嫗e16(TyumȶXKq(TT#VA0A8'EzN6 nK+ lA߻B!EFKqb~Bungd -*m9qyuƔ )DF@uL Ǚz}Ҵ*qk,a$8b-[Iz,!9ơEGsCJP)JP)JP)JP)JP)JP)JP)JPbogosec.orig/documents/whitepaper/images/apache_score.jpg0000644000175000017500000005266611113035142024130 0ustar owensmkowensmkJFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!222222222222222222222222222222222222222222222222224"O !1"A#267Qu34BUastv$%5GVqrRb&CS'/12AQq!C3a"R ?(((((rSpnFbUx yo8Tt-^eؑזӎݩZrxlf5ķܤJaȯL%m-Hscm F{o)X8uLY$CniBJ] 6˛RpaZzJRg&XmL )J)&}Ju›{1%L"ˈӈC!e FVI9IxcS\Wm/3ݲL4%A@O < *`I]m zi42$uN,JAR'* ]+YqMf&aE+-6H~"vV%ǴŶTmKqpqM %P X-\N4^'3:DRP iFd@p&C. %۠(Hgh&REyK.KnnDռ؋S'b22Uv5}K`$I/ y Q6\鲡KWN\>m$@PsqP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JP)JPGʟIum87##d'D w۷c{(0HN{Y\'zn; r,w  AZsڡޭoͥ4ZlvJ0¤҃+ѝ]OO*Е3o4iAۿN@* }Y\x2R]wׁ[@? J C$R^^#d+=1qZtkg9Nǚm*?Wj(%Am㔯$SU((:qdΛpicKRJ9HBR'N*RRRRRRRVSf׌P0*c dr P0{gZ .dh"dnu$dd;eP)dmS4 J @ynmS.&k;$Z ^@uS (8JO |gku1ۻc7}>nj wo>l.p[o!zzR#jU Wf; Ϟ-je#7@Z^z'. &TƓԗ89;+Jv JV2~EORjGo3t³ayig]鐴2aivXV>Xc 7P|bZ::gC5j3Wb{Zx_ekAJ2_ei5+񗿕(0^\tCV4o N#nvC8r{_x_ek{i»@FSŞz?v?/+T^ܽkYoXz}\o{3|kYkb)8XHsOyg%wI.naGZУ˄Hs8PnCQ/ LZSZ S; yj]..<ʢI!jbHHVjPڡ9IȠzSss31-4|3x‹~I8X&+b~xMܺ'˷>ޘ~knG=N|ܵԍn Pnڢn1 }?r\JVFWh~P}Z"\jBI۴'- {`B7V/ _o<<袙pZX?zEͳW{cU){VӫJ^G{c4%tjvŶƥG[`گ8w!Ue֦E*[_]5t޼;$#KuOW')wYK[|eY~߄argɱĔVxG$IEꣿzM/OT<4S廻DHLiw%% n?;c5c6rؒk~(ض_POz?t[PߛNqԥkHNHj}s#W?:-rT qmh7]K{vۨyҦ؃P.'+>.- ؤ2 V{l,p-pqv;oLf%KjsbJdX8(Q{țH_TS.:7p#XJK9=lgbRR Wsǩ?/ o u znnqzp";>8یBʂҔF[?w9(=di/Չ&nbl!%oĬ7G9wU&,gnT%m3HCeE#nsxbU  C2ZzS(ZI 9ʗ"mŖx(p$ڞr1`)٧DqtyKtTX} ͎JJ+;5#?g:{;~qݞkb )s_FᾗƎ)L:2KekJ`/)'n7liUHyQi.}7ѹZ߶Y۪K[>pa!=E|DMR{d(sL>M'T(}Ua=TwIZ,jt4|~ERD#s~LO>}#Qo9H[ʜu)ktR+~*c_z2WL?H_U_Mu\oCX^TCݶ0 BABB{_^mQ&5N3b(c{X 994L֦r_٢RJz\KhGOw'~vݎ>6{X(O3eܥ>Jq-JBP<$v Q_4xq]u?gBũګ~'?g:{wnmǻ<׶L:2KekJ`/)'<:T QՖ{;OOfz?^\rϫnl.SmAynN) T.GuM,%WP Ie$J/g%KnqNn:VBeJ"|J$iO) IXnCNB@NvvUN]nz?^]?;_ւz?^]?;_ւg/tILm$ۊ9(e*v8P)JP+ޭ/uEUj-L[]oJN-cv_OLզ88iRM>+iBP j4ӖhKCq(}J<\O$mEA}a/{jNFATr?,Yuv{Wt<>dMC ᵸIH  HsjM? 4 YPRwKΩ;~8X*2OG:aw)޵rK}U Jm1o6|o=O<>g;wy^Du,\EcqʒˈPAy*H(*2!I]8$Z A쐥QuUԛ{T`(Trjfne듭Gr֖l!*GC*+A /-3..rTga_mHIKiۅ)G s#A4d?k%1!ӗ # :nA[W Ǎ:ce[7w۞q5=)9sstPZIqLleaAʹۓ{տ1}x~tNH>~P֛tw`"WuÌMF֕RF *ggUr Hܔ@=GZvDv 'fMGCRT-iAD.>;z!Z^l< JY@@*H'ݸ}5f6c95ڠ4W䲦Pӱ9DiLᒇc4Sn8TTQ1}|u2gv]KBtĖjZ'DGnLV+pRN;R\Ka ě-NJ>Rϸڽ9!2 F0MЖ `))H^mVqVsR-EBE:@s8 $`烊:#rSrKwWqwnԝ0ڮBܥZKtu>@R 5am6oa56RRʑ%!IH{$!eLL&.d?s㨅ņْ8RN<~v6ޠT2٨<)(9Š ^7y$iqܓmn#o&9nwEAiǜM1CmRQJP=ñ=uXBa?b mhsRY\ivFy2P,g VAjٻ1l:?Tnxlהhbxtt''z]N_O~gV}7fgR2JR=X w _yw-_iվw#ٷo~+9rnLx[2OA;۞35F1&Rlzjvh~ o6PbRAA>Q[Zcv[pBB^Rw8Y) _- ]1wX(/*BpE *E^%{vON~(h Vb )s_F$.b0dZP=z>~ ۓ^K"lp*#J)x%9p}{_Wreq= $"Vf\-ppu_vᣃ{IQ7U˺>?5|Gܗhi aFՐӴv85#/]k)jpnUSH ZTX2nm<2OcI*뚚K/w_9Zy_t*re[׫{wA}=u1v';1X+2ub)-8Ԅ%.DqmjG-!ic4UgAR7^D_U-bt౎6nv99]sf6LZ%n:8 Ғ 0㚲{d'}VI}U>Ԫ兜/z[mE8LYX>aNO8'Gz}Am}Dp)E2TNĔwNC/ҿakU-ްnԪLi6Kr!X60mw,~gɯ6+(x,؝@VJw .pG979kۦ}/hf}&mXC22Seyo~69@w.lJ;ngn8~+5?R.R}56':i _(Q*ۨLG U%$oHN[IX>WkOiJ_ td' =H埤dUZUǾ5}FsRYIjhnU{( ZTcBZ 76@'Zc^]mg_OoS7gs)2*gU~u눿g:S?'ٷ;:5Sj ko[2{}T:ٻ?F8w8/GQ[>}w{K_دԺ*R[i`VFP'H)sj$ƙKr, -hDw,~gɯ?Npw)JR`<Ϳr"`Tw{}5-`ϺAJŪb076ӒԟUV$i$y=m/z,`t&m8nH6H;yӃHU{$Y?cM oK9U5eVgm8nS4_ֳ>U,\eSeCvlBx$OLŊP*z>CcvF9YVuwZIϑ?a?kM|7TT횃ĠPKI2S]2VAF}5wTa CKswnIH+=OR9FFg+ UVwzߝKT(BJ3Ė1E `HWHrF2ajUj X:>^m;gPEULLYaqdxJFݩ !y==Ӝ3]JRԥ)@FR&Hj;(^XBFNII[i.*4e0 HS鸎7HN(,|dosOyg%wI.naGZУ˄Hs8[w?R_o})m9K[BZaE?$wvK)^c=N>nmvN'ͫZO<--u-i 'o2yZ[CޤiA!!h(%E] HVp0s:j0l8ގ?w!]e֦M*3Ws[IU)⡨<%iꂵc>`A 2աoe,|CkdnXVݪ =gCʍ$|{UQ}&k'܅Dr,b:ZIx OP{QpM}Z.>TF^Wl> n豪]CїֲfPBzjq~ʊ%zS q޾4޵Q**_EVcԇA'%xQ7U˺>?5|GܗhZt5O>)A2R'vJq۞w^%ɰإ.&oP(V1*P$gjk,5j]|jO}Ъ"_k-}v<V:=x߻qݹ;c]HɁ%[6D ;8#N-NX}+C|E5[_[x/h螧S|mmۜ^9ޟDyQ[[[u[iO@(N3dfLl OP{QpMwNC/ҿakU-ްnԪ&YEL#&6Jmڠ)V{q޾DqHi)LגodSf!ptϾMϾ#UlKaKL~%Id`v g.92.,D2e^| ݃2{kՄ~%]]VRj%lOu_$7q-TTf+1RDOP{WxUx,i\eBvJ۔TB{a)n{ԎQ{>Y@HUE]{s^RT6L%PCX9J% fӽl({2RT1m)9T=3^HCꣿM7OT7aֈh-o,m%Ÿ8J0xQI"z@&)B=2]IKXMѹ&A&؎(]CїֲfPBzj!bz?")"EJZHKXE&I'>(7z&) byS-nW`w;OEu\j?3SZ?fXwж1P7m/`C8vqW|kxʯT6)N8B1ذr%\sRU5=_5kr'UQ\KhGOw'~vݎ>6{X(O3rjB)ĶX+i @Fq؃8;Ub?*VBjû_}pۿv8q5FESLqҭ)IrO5e6OXSl-­6N}UMeB'% oIhQ1aG`1:47ҍ<ѹJZ߶i6RU 7}r,_#~ç֪[a~UhhX7%@n%%Cҟӑ!FuW؝5#1ɔ0W$8=ޓnZj B<>x0ERDq&I'>+5?R.R}56':iorl qĥd)^Q ?Awzi/.cW, !JH;HHQs`qOR9FFg+ UVwzmQu5NiR xhGbohIPp9IOgpT;wn=N1U?"^@W<gx]?f{t}泺j;Z$>eH;~qݞkTmSsO|w͊%zE0/3R֘6PM; {JF+pEX;1"c!%{({"@IPqq^~uRΥ)JUݮĉRڜؒY*VJ{{ҫV\da;wnJ MC?^8wc8ݎUj2zm-ܱ(dnIlBP v[sjM? 4 YPRwKΩ;~8X*2OA:+Ϟ&Tf$pFͼA|Z\[mrC-w8[G5gkɕ.D)ۋ-6COuRPPIݵ< c99iXOH{b8^X'PwdTe6yR̐P?$vgj|H*Q휨f=1nCuk6MaXB$oowOĵٻwnsk#OY\bب^+oԑnSn}7ѣ(|OG.9Zoxt&ϓ&aX^+gz}lVt.Ҷ]]}Nmݎ37cU#Mi{0OG?.oS~WLB?EJŹo=vlǻn=o'Blm4WWmSf.7cb4[s ?(}Ua=U=&k'os֏QkΆ>-89&mW =k6}`ҷ7'ߍ}Fn !Y_y1_#|UOh]9mCtx^? ve?~nT[45Z`z7$zN ;+P%'ƚM)E7ϳĭm =Ҷ-}N|ݎq6U h[GuwX^Yfz.nϾ:Kŭ{_5i~ru'UtNcri[_|^{}>RN\nO8sam⽠ލk_O r~Mt:Ncl٥m~ mH7yqLgnǾжQlҰeqoG[tvyw|]1ۏut׿ل~ gnlᴗZsJ =lҶ}]}Nmݎ37cT= hiX>#}]ލ3oϿ5ﻏYf>:_:{j]"ttҶV3߄];oh]9mCtx^? ve?~n#OˏX?f3卑1E}k3դh[G_JoIfw~V=N{csߥm^Dn7u$tq>Z[ŭk`6R}5:':i{iVVm~.~}۳靖N{csi[W|N{}>RN\nO8sWhf7P|*S|x=+{AO?sgZtݚV}_+Oԍwy{1Zزd韑VV h+ ھu GgwٳUĝ =WWmSf.7c֣Ki{ct/GQ[>}[z^t4oFęG 7ogߚCzv-,ǘkNA # :Ǐ,)XR]T*$2PIJJTIH$c8"~vNo 2Rĥ9<7q^[ =E ]HRJx m7$ĀC,(eJQ?%򑑜/VJ0F[p!ȖH'sg)nq# Fӌ!,d/9߃UHwU,2$hp$:RFv cXrZVTgԒĖvZ RsArwyR"T㐣GZI*;RTJ»iFxvd;ZHvӜUcLߊf"\C*Ĝ2Aܢ.H)>ھ:"R|T:aqyn0CډWQPW~[i-!D4@R22/`YX'7+[m' JPPJF ߎ Uv{錱%)Ǹ R#{GQGjdMo3-HSJs+W°2eW%]ш,0PqSvU=Vg[lqÒ3-Ҵ$- +nWqRڂ=D44 (ii%9;{-Hʧ8TbRPKr-,@8h,̾hoDvȒrRA +(>7{17d]U% 趵k|'ڲU';fX-N>q )jrxZ{N ZQU-.t#V@ltV$$JR DeEt$1d0]%}D0#>79OZp[}_R[G?¼)IW Wt=-.6L$'ER۱Q`'_ۛi[wI Wajcb'ʳqLܡGRe SqJp+|pQnp)m nbh[HoU-e`a)8ps;)&EE0C)yB RG+u˚q3"G(%^mi )I#H 2uոȌ#Rz(lt) C`sgGq۳@: \#,xaΟnl1u~lrg9uSIs8;;Rop )<4)kJ'!62և6Im.r!$v;4À%C,䠐Cs8Roc2ܙݹ9bbܕDtoQAS3G{UrSR᭵ˏcPaPd%XQ$$z6$%YKBH¿ 8 w}fsr 1a)B[nV66 ׌G4s+D:8iRS# +*O!9p3^wby,&nv FN_o7;myv:TT6յo91l!Opr;\_pT$QLH*q]5?Z;j9lŲi F9<}R R R R Rkfyѹh[x(AZRw({ j+eўTz RʂXʂ;uxU2X}4d௩@z ԑnlOmP2P=Vk)$E%_nb-rvrWJV,-q $<@[چ3-Ԧ; i#̒W!D \jt&(vLa-bQI.)=GpN=!:}x)JC̰J/yWǕI Ϝd >WKp|kC#zF] J6ث;uw^.8z @w-vMO":Ce!R.KQ.Yyhm;NH&^nݨ]&3LV\roP*[#r_6Mܳ81:AO~9UɹZXeE(RRR0x9vQrLH::n†[ش\ *I)HwU,2$hp$:RFv .z!Gf:x)H!jl) #=U"B3\e؂8Pݕ'_\÷_^ڵHb+%r&6>!ES;8ʚζA4-+rPIpGz!;CIAXp>;=$ #e%lԿy5 -l~őrSh^T9_6x1t-O"߹9rOKJT% w烊-jKVK ;}QO5ɨ^r|\mL2$sphWe'\\JC]2WO_l쫚  RZ( 77 ׻r껌SRY()Rw-XC hP"=3]~CkhaQ!K9 %XQ(H@* Piղv$27vC0PxpJ9-U_}j a =NӝUDxng%7qcۇ -<WtdĹ)'N*.$~*{Brٔ[w {3N}A>-%ٌ(RaP H)VjKpSVyqg`K3;]:ҙ-BzR[*۔,v6NJz^Kul(nbs͑H$ۚђ8%N\ЙN(nr^nQY=d3l^N%(X)3RzF(= ҔRRRRRRRRRRRRRRRRRR-/ϵoIulJRJ)J)J)J)J)J)J)J)Jbogosec.orig/documents/whitepaper/test_runs.sxc0000644000175000017500000023466311113035142022311 0ustar owensmkowensmkPK{B2Emimetypeapplication/vnd.sun.xml.calcPK{B2 content.xmlkwƱ-}~EOߵEuf[c.[ǾK>V$:U~ODdGDK&+2"2bכ٫plwoz.wv{ǟvf[lZ'OݳՋ?eŋ?O:zy{ywz}x7o_No^ev.J~~ __qSW _\_|w/_}5?__k_SJ/?ͺݾѻno6wRs9z_~ŻOĬ>݋^ Ã;l>zrz[{;/ԫuӼ;T|{|ĮVr}g':7H? /yP?{=>n{reio}뻣ϟkuX]5.}٭öxɾ=-cl4/ߩp_Շ6>qwKv?~YϺu?a;l[ͳoweN_Q}sO.|{Z?xth7t8͑E;<]$ݯU}vyoKޑwqٯ;r_#FQQwFwYޑV_Rl"״mK5ṽvo[{_l[5lkun4ܰP^J׵V+vKynD{6ٛcSvS+~>777j__5Uj.wU{ܯ.\ϙ7[h(z^\ ]⽳~6͇֍f;o.y} X`ruc-#vB~DO%#ݜxYaw<+z | /:(p3:E?u7\^+b鷯xg{?^WO9]b>Pw7^o2{6VL5/ܞOɘ1~ߨoC8+c?Sû{zOV,އ3 xq~V_'D`y>gi}>v{$G.nQحw]>-y[B2O;d^[^ou??}N9e8_p>;K?޾_}Sշ}3|ؽ~࢔ak S|Y_5{qͨ}^۰ 7=貿UC~W<ݞٮ:cPVȰ/o򞐽g*vfW$_@`;oݶ#QjwYUsw?o4) F%P;LG7MgXc#ww-y1w?;^muzy7]z/ۋKFj/,~KDm<3)C+`I[~ /5[H ,ĹOƨIے[> >\>wPru 7oO׸|W{:XI :9#G]d܆9? _*$l 6}*H>Y#W ^>1[FC7Z<,VRqi=UDH"еl*+_wE)grJ$eP^Z鰤{~ܷ|xh"||h-Z(J)(T:CIO=e)u{D &%c2VA-(<EaO-wKL:qYJZi8n){μ;ݦŪ9&_G,֒GnNÅuj WBAY!9 bԒGN2(D g!N!wy>་'Ih(K+[X+;wsf>Fk hmRAE=ԣs='!I3exy Hu{~Tr&_)խw {0!el]9&0Q-;Ke(Ui(zQamU놘Z53˦$" @ySjO}u\I7LcG3i?dfTBԺbYEy*$d%C1x*SIDDh~Pt{۱ fB&tMVJ_7A[\зSz'찤4'_8`$nu-iJ|갤yI'8e\W1wP:LLɫX%oqWpެB;΢^:c(]XqH]#XqŖϭRr.@=fIhozPtӟG=NzZ\pkQ1>H +%dkI5EuͽpHNV ]^p\,p%9B;i|sv{ر9[ջ5P:S;3e6E^Oh XݥqMq?uWG$9C43<%$4o>n.GŹҹd"hMCl2Vâ[e8oZ.Y^gqM'&|P":W}]^i>&CI=YynMmN$Tgh0,5iRJrcURJE48VaXl$チܰb{6˕a$)ul˜\ \Y0#Zh\YkEǵ8˙Kr]EeRz>zj֧vMVk Mf+;*FMuHZ%=V?¬4Ҡ1J4 I?Ԍo .%Jhޜ-J7.z&dqJSw1!(:y3jzfʑjGfy@R%ctkY9 %^ˋ ͛Uk\U2Җ !8%Y)&V$OT7mS0JEU@2IV癹: Hdp zRRJ"DGt.dzRݛJ ; Ti{t^Kn@v>ºg'iʥ>+D^J՗yvGΪ갔^H4X A'>I<++`r6QeUݫNtAJKL۵͜TE}8گZyry1i0V5V`jw3v*EM=v(!qF@WuX4S&8oVzYN̺p1#L-cA- %f Mſ[\E{LVbQXU pEpj/նR Ē. @io۩+ю4@hޤ:UՑ-=$*MŠl3^Pe,Ij 7 SNC>:8b  y3k_ԕx tTα b-k2-$n(͛OW] `lu4;b05Z.d`xLhޜ…&+.HW.8)sASҹܵ)_%9U_܂vhkD-M~3Y9N 2$ Ƶ<-Ά:P*H`zF DAƢq1/yͩ9l*ĻLR}11QkF3VypՔм9=ލ&|MJXFcΫ%Ww76f]$xͱ3 mߣpW-w~;NZχRǗ/&+}D\BX%v6pm2\cdƊмn{) #BA+;ژ)c-IN8Rm|xMAXq݃J!Bhw#/D3>.b97Zi7x  *)~db`2~"hb=|,\J!z4[6ڲٍ]ylxb3ǃ78J;gSP4Vǀ]?CѰ>7c)(rn9:/AJ2:>Mvli[3oRZup>T<&霊8>&Y·]=TxnET*BR21ōa ys/Tp=I.aU0zg{Xh,xFyuXNoRRW*9@ҹv^KCM婾:VnpyQNN&H%z %Wb^mSYrօUף7.ykz޺U_h2y] AlYqcgqsw[mRڥڣW*-U^TV+\zv’x=;yj.x \p|] חW6'4oBmڗ tʫKK{Hـ9U4 -TKҺ(#KχWfG@3m5CWE\RAIS+46Ŧ*'RYiK|6eud'fy1h]eLK0$jgϷaI"8L)b<Л&K& "('4oBCvl5A 8 fP7%[2Rb]zU1:iumj߮w'=Еny` Ğ%*RT|м9vnW ql*c7Τ#:+*!$mѪila}4.mEz^]W.\^P8J]n.cLP]O3TQצ` "²ݺе2pχU_8BIOZʬBR^D(ZE!-t5@v=)GW*՝4B]2=I0n~MH|w4y_yJϨ #jK2 +4|:3AYJ3o_7v} F,xGn+Xal節 %Wb9|K'kE5C& rATU9ŧf(i,'4oR]Mb Fʙ|*ѺctKV8y Ձx!ZRIhZB[(tأ5ΛZ^r(ұ6Z_ Z{-wJbB8}Zf{FK|[0CBBzM]A8X O|3м9=^]q_Fd[6cYNY:,i(U5d8o^ RkdB]M1ql:l[q^{-dD ^. V#щr`#_M_0&6LPf'3tޝS|༉unRsFPn8)a*A3\ Ɏ0C|8/)Rʥd1K*UbJRE^ÇhZnm]-$Fj UEIuǤz8]UM1ܶâpUORL^ @>9Rb9]j쎉 K6q*yk^KZ~kDCP>YK&ӢѾoKw`amA%KF׸(Ke3pѾ/UR}OR&l \*LɕɵZqa5XkQ1EIkKo 7MGdVy>D YKހ0֛РU%1J+!,i )dE=|ÒUpg8ovOt; e}jBXːm$i'q: %9,N χVK*-n<*T3JT:8{uJ:E7~9^s%c44$<" :rvq>z}՜]Q)ri^UJ˫Lb:)tVr˨iědN̻G/[db*Tܤ)ar>E)kpYKt>s#·WW}*AY+t,sk2\Uͩ7U.Ʋ6hhRM  %o@PD#7{TV~!nrr]' xb/.Z5EU Ud8o^]կ_A^K"M04pޥ 86)qb9)z[7]V1*aQkwn{Zl',#lG/b}ٝEL8y=CmIB&fy:?7e ,0Lo3$DQSO!3)H:6\LÖJB};~\x]Ui7Mn/wU7qB+BzQ_2H l zqa3">7[ 2CS|Ltb;,yr ͪ%+*6OUB=A4">+(2|85H蘒ڑLo38Ey]q.Ycm$;/o&’7M1Fyu՜3rr6` X(ȷv3W/d8onگK=c:7h`"jǷe Jzqd-4t{l;%"(˄ͩqwI^Hmi*N%>Y)cp^AgDf{^Ak>{/ 7d"Ek&4oZuBVH* ~z=ek\PƢ7`*&V7YR)% _9C˧3.~iMlIecqJԱґ&d(zyIhޜ"E⮳F)}(Ft$}pGI*;|HoCv[<UW =OSk{dkM)+Oሷ #ĩ_Պeѧ^L4$\(d(yīTo6-xJ<Q'D)>~Eo Osiszb_cD&\TL K0FuanHXtRqy ͭP@p9Èe$@}9n*L3|1мY7?/fu`h$TƇ{JW /D$yqz>|ܜNwIJZ A-$Z F:,y6׷#۝ 2 *|L.8]o7xh#%(MBfB/_)%FW4螲Ou,~*êj_z"VSH VE z>h2Njp2ͭf} E#}('~!є6%o >I.y9F#rtb!%0[ MqK%f^pyqlNht506Elr^lDS?QBg=gYRm .`q!d)k`\MCMBX\EV'*q>ZtIXOUIv>}h&E3zi)*yIIL9G$3TJ(8OhޤZ͛s|*x .Uϣy %:ϗ@BfRf.E1JRz)>avVEا6z[Vi wx +✲NrQE ;ysme,-yV ]I:RX-wP)L>ySPи Ai=tU*>/PtXt%ԎM.,~yp]H/ZAkKeDA{J^>мYuF-pZP!Ղ aljΛUW Uᣬhh |pŠuU PtNf(+Ehތ:esݜ*(5 pʪJ%/oynK#5 ,ۤlO߈*Xc|B}~푗>>_6ᔕ:yJlD#{%/oKT-_6M{"S$26SѢ5?!犡l(ϛ\9@R.2NilŒ@Ë<9*Etx޼RT0A<[,$ z81̱aXDaE%'4oJmNZ#WZAp (+6s JLhބn,H O>K^rhy:0Xt0SΛVc\*Nƀҋ_t' G,Y*myxE1CuMiۊ7A"~)14FV~:mZJ2ͨUpqUg9.~egE7r\n;Cɴ+OBӺX<ƒ) 4q ːϊn';٢KH29Ӿ>-@-,SjκL)*m@'fyWy2֭^MԱYۛ7]QX+Dd6QI:-l1H2ˌ:fm/MHVmG䓷7rZ0hllYPv"AJV9\L{J3q/^hq%C_Xu9_xϫlTF߯K*Ʈ<.qDD*ͪ}ŝ^鞴8*hNI*g5VtR zqzڌZFc1ќ^#/9SΛ]T t4NKHuT# Cql8N<\ԗxHZ%ߛEe|0-+AjB>tYYZҙ*"Xn-yDE\]* Jh۪a۬ZyAk bbTPlo17ZctB Ò6(&8o>^ -IO eo> *%殌Elt QT!h6.\ x0+K!!I[ X{>"-u&Fk~e>BHx%-\;ysT_vq X*^CTe`b ͛Ov;UvYG"za`po KSʖ3v\[x/)*m,R)ѭm>ٴyyj6S8^ stB(SL՞;f7yFJx>iJzgd- pfZ'>м uZ~}pW&HOF N_g/{A^UCzŸIF^γdBtE͛Q};H .zJ៩heSJZ)ū]͛QģҎz!яq%dg[P&= ON'^fd_ ?4^khNͩdU!0wOUR#m<(MC$cpH:uGs*Us*Qܤ"4oR7'B*>-yG|H2$(мI|{9Vޯ\,#1yGˮG/NN%}XxΛb64j)Fj $W4ڠ =^Ũ AqQy7;|HuZ@ ӝGI=$Z ;`J%XΛXǷǗUW'/h-JO-N6"iRkSJ ǩbUfJ.VU3_ooL1B8dONڛƭCv_Љ6jM[8e IT^=ė %yýΛZ:7j ՕaB? hڥdg;}Jzp}0N|jz (Pd7&萨 ڲ̛Mr߮S(P3єR^9I( lf wܓv{ͤQ87Zy卅I@1&CINb BԺ9^PeЅ9E19L)Qdx)!E܎χQzqsp&($cC@RAw=Ѽ9ir>E/NЎT -~9I>2CQV'>(yjul'JXCC [F-<$rNP23EaWq>:´'[Te%*1+Z(.׮ljݒH '8I͓)G'EH4e^V>F ٦PM!;N#=jqDUVN $@n`\iy\H(Gm„2E||6TC>CɐwOhޔnnG܂$6dN ^=ʊ\` OTR\)]r w!mG8C9wz&k[g\MBUSh9RA\h7C!NH45Mv=#i@<@TϏ , fd_9-i{`9a=O0( BG$U@CJŷaΛWvRW/#)EB;|FtQoe(bM9|. ǢXGRroD]"BDNw@h|:]P$G>hMe]DDeͅ2̶˕øj;^oՂKJ]r.*R-B[s2\v7..]poA)%i&$i O7j$^'5T)J3%bBH>^ֆtkTCJ*pIKR+d8oRntyҰ[(g"a'\#l&4o:Z\OX85 ąRCO>ō˄MW Q:+UȩJPQC`YNb issR:m/a]))';4WrSᤱ SFPC<([@:DDpA-B&rK]I*rٹ'=cBg?nפ|yxHJB !VLMh'JPڹHP q>@+ %:Ws\KR/3·<R  K9Ken&Ѻltx) yi[v۞n̘&̸l-:Њ:[ Jxb(dx3rbpluU^e{6TשFJdy(vFY5Vw-eFYX"~Ӹ9cwD,WPQ/Sx}^N temj bM4/㔭·P}}EN\'bhlI) 6TPR*qMtM#BcI)b%oPR!YMvKNZX@ߨH-FzCS`{9ΛWU\'-a4R)zK]*TtH4vyBf 4o>v#']Sh3QE{S|gȋN=^$ s^pm\縱IwWA'5N$ړ@>k6V4KR@#1shdL!.Z墁)B^B韵XĐ&Bo3#aW`^BPtۏ 4ofH`+tc@{!NJ!(IXV,Ǒ%++.%j:Q/ihO|؋t}QJ1dl:$J(HIbwm]xfIӈ-?/[nJ5͛W4qռsn6U+KR+kKH4멋foUs:%NiJ`-ڨdѧeD3Z,/] χP+sBFyiFE(-קCG_d(/yusj6ދZU A_i.l"!]Ϝ)msW^UCPVGM@cBP.T3ZD8ob-_^}}d(ŀUD~yWhtD*>9[[5]͆p:#x 6I6);oJIk^hތ:ˀRP֚`J4[F"AE$t^Ǖ0ޗᙱע=u 0nm@Oλr6|B89!fUhʱEA)Z+$[Bq$(Blм)%) K o^AQJ>ķEI9pmeB&Ա9C[S)R9:xH4;LgDC@͜T׫}}Tn!]n]R.S!ɅGBBbjFN1=>n%:AzEȝSSMEhȅ͛VnIm?UShYaHH()'*>Bw>&4oJm擬ͦ;h|!MT9ہdIQ#[eχPi_ͪW6Q)YXҡJh'yKVEs[>j,OھFZkJYtHRITD2sTyz|?:{w⳩W~دvvݒ1W Iqڻ3gs{9KCoΰj.)w_{}pf!z|pֺh|Ŷ-N ZϏst*A$9T,HsQv>ŢV?7 2tnu_v-juh-N Kvy Hw ݮ}^vf.Cjn/G E/tNzӏ"?71~oK"oŏwOngo7m^^n}W}+1 4,Ro^bpKuWFS*(.!ElJNAr%o@TyS月:5c4(w:,JX6 >AN!$E3KVJK ̍&V(I=|Tؐ4 ~~Ij/ԐP;aĉ+fB#|CW%dA)6cY+2|b I[HyF%o>AARdoMlo\/h-Lj:B؏ T8A$eI^ddk-YƢ$ !+'>HR:?}ntppEIZ4fDI*[LDTGoZYtL# aYh>AH58H6IEIAE,IDCO$}qSFCp{: d,yͮ8G иqӏi^0>'>HR4:dA d&g]AR¢$-Z'aIӤڣ QCoIemIO$=GJXcIl$%:޶޶6.Wt!iP^yg[_81ET« r,qO},ҸҫdRrԗ%9Aq;Jp?%h{%G)mɁܒGkw/1~c:CgJ3!ER0.@xrB4$! `Ed8/~5-EgvU_ײLuLD z/xLToZ%iK~Utg꫋$M`4^)GR1IjfY;˳,~5>Iuj uo1IzB%)28_=S!>IE *Pb\Ve;,x& 'CYx cL *Q& 鰨, xOe}IS6^"u=ﰨ1'>Q䵧6%qXkwXv3'>Q̩whVE-AwLrs>qNQu=1(mh 0m{8bcqK%9 ] 8G+' '(RVv(vâM|oO}Ei: -jq[I&;fQ0Z >dqT eLO}"D#՟qGs4%SrTY9]~ kt GM OTD6Fe(mqT:  վ\R,3e,Q} 8Gp ߥ,,2{kH,:7dvXL4ݯQaBN\f{m_3( 8GhZJc|d^aa;K;zV-OޔԵ4 yM{4eu%}w~_mלb{3'K˫/աh} G~uJ?x4cXjR+2/zȅ>U"Ck0^o}?_CGq3j|Fkt^6FaT-zȘx7$撡7| G[a<QTr-W"|<'a07@>0qqE'daX[T;!Qbᩅ Ң>.$eJH3tH=J#b?1P nKх1te`L%o/y7@i. D׮.t@O e`Z$i i^$D7U56e,z1r-A;T@a'r[@a+瀖r]M11"c80܎u0P<43^I,@ޏ' 31,=#d,̿Pﷶ#la-Q<> ހ@9 0PJv:F_n1ItEotBPAA#OAO6:07w 石:"(D\wL/'`Ƣ P3ʠ׭{̓P*D,K@]vx_<UH=Iysd?>;%`qC0z]>n}.<>Ѩg:!,~'|t!~!{ăJYob4uoəBn \e`e׼sK&031L|3Jf{}AAP?O~A~TJ8N0X6fyo‹0 聚r= F!7ZP)6 $`Vm '0>2ghi"i(NGgԩX 0PWAAyh R*l F  @7G@VrgX[E5ܢ"cYѦm^A)85;΁w$+E?۫9>~i OsJ)@'V_I kj~e>}sXRg57Y):HVC`ހo':l*hR,:lp_6V.o۫|t5>Vpq1) 7)9 eڭ4/2tXry3dx^|K _KMrA| 56*4seMR0aQ8'h=&_P'9 Ekh (8э(:,I8-'s!b8pSs3:Ѳe}⛗!:i<#YprP@Ӟp>&%iI*u:,Ixy̔mor߼?F"#OuXo^\g7Гi9ȇ:ĘGҕ>'>i ^/~ Xe2<3MMtash48BdpwEvQ7&(3Nxx&hP3'ZH| K'~e0<7)0x,:rK!<&2fL⩉H2N> όq&9 ƹD[Tmi'>G Os_p'buyMNtaΪT@U3ZZ3!q!<tV4_sbMtACF4UӒyBÒOo$xn<'7)Pl@AƔcOYCիt'|6NXrIA]? /ftL]Gc>{~/k\Gˮˮ/eX+e* ~P~ף.\;M6ayg7EDXԕ~<ri {g<( <%qfr 1c%N'%r4H}&: H>p%\,F)51 f3tc*H9zOلD'<֢;CVO釞)8~4/z۲sבo!`~=YB4Mz⌃*YW^D%$_gB4M⌃藌 +@iʝF/Ygx!lӼr 7y <i'PE;K e(I? /lW@ڦS7Lu!,ɚֻ^AIaH0aP!<_&arN: þ}4VCa-\%s  ād'EȳI(Iw'vX\=ypL]99D&Ѐ*ZP0e,JD%3 s )X$0zL1aY&by6wm:0&!^LD,l]ig8O™ yDQ5dG5?<ܘYf> 4:ItTeS.v{)xW)~ ceΪL$)N?}yp\>*sX3>U?U>_,;i*I"]IN9ZVA=IN9~ց24J J@gy=2'~0ZvN90 !pJG$JP92!'^':@0bO@$h< ßi:P%8SֻG DBB)>!Mu)(>Hm/@:$P|*ifAWa5@BDW.0P~O$4 MK*hq!" M$ o?P1E͂~oH&Y$KJI3eMr!_JuIYhO'̓PH&0ФugD TX@+F_/vBS~_&w>;}N 9] c';OKfwRS>=]y UFUrIOE5K vXrqSQ x rif?*J9qyDFA d7= *pZU16{ |ISsXOͿ$.Eg<: J +Z `*pk.虋! '1'1e_N_% 6c\ }n7Q͉v yOۨX L1Poҡ~nP۵i}OR/bEOhzyQ*",Q]Db/~7zZ"‘HԧHVukVvX\ZgjN{ӹ+[=/^}(h|VO^2˶}3~EF.}t؞.G HbI8P yQ_/Sw'-Y;nUs@cS9'_l^󻛺5[iO풽|y0лiiɩVI)^J~rinj^. @PK_P\PK{B2 styles.xmlYmS6_:L2c#1MHuDn'u[angS|y)ň$AxlЯ{cD[NASΙCc>]rZl'sm$◊r@=uTr6Jߐq_pŨ a ':|Q ߯7thyj  leA@yQ]SL`Q7Nbܗ:mr[>9~hދ٬ cϔw~A'kPKF4nPK{B2Object 15/content.xml[[o~P٠OKrnM.l8Yc8IYV}"q(J@sΝ#u2{Btn` 8 e$g7~zߟBM$:NK3i g˻a,N?Ul̗Y5sl_Q˳22nO ⦦΍UYf7-y8 h6.9_qe\V {f슣er=˭-Bۭ'g^D'+j˚nq~^^r.rHxmWq,B,BN@>>~8/_\d5Y6Äh4ZcoJ ڋЬlZ.hXpZ.hd98//E\T>\>TB$ ԕDBeQTt<XDeIguzQI%plO+d`2z[=OW\ipn[QG&R碮[q/h  ` y!8,W"<t89-er%Wc?>lBLì6BұJK;h̾Z],|9Ԃ'(إoE2dQhr1#tZUxңGqGd*گ]yRG'TMGSȚAD\B-u|ɦ4sk/E9^N O"֢6|u2.#!wFs7>}&)SWP"jcJW-Vf>@|ae:<]j("ݙ>E!V˒oVE"2^LL60:5KoP֖;g8޸^]P$tOUS37踡ui.Ծ"zx^BoK?5|oj޵G!?4=ɛetPtmQpŹ-p}!0# 2&ݩ/yk7ϷvGx{R:rA!o,XmG*:sd[o޾7֛wo(JG}`xQWn?;(MYbX|.>7,9}sCx#en¶z8\@%ߙ&ena򙇏POy>~FՑ1p1MM-e~B3F"ҵ*1wQz{իʤH}bht][$}&,)A}> 7$2P:qG-NA\la4)xQXsz.=FƑ[iT¸\jNFرPH!  t$pjyX>cP%&%0b9aSHWZ 'X <9.uitD!8P3:iDX1 )<é\'M< }ژK9 |G)uti2..vG!M<|(oxx& &C>_9<μ(⁋ui"ܣ{ i0Ì!qB1ڏi"u4G]D\^?54G8r䣣!M{H>B idHGP;]}l&NGĎw0wI p&绞\MeE7!h wFDN\ vF;^uGsd)u6Wz3{'}]4KR>P&A>29((uvӧM}h.v{54:&6BŬ.m2B3D|N^g.s돰=$G1nY/uڕ+6K ,TEDsp9BFX˙D{vG)+_˛eYg|9Pד"\NNg`mE 8q;I>OHmk"gXsQƣC^mNbR7=q`3ZNODl$WC=o =K |7PKYLPK{B2Object 16/content.xml[o6 _y='vkoGVeN%3qd8"EGRj7Oqrקk$! V1Nr-IOj1G!S0+EW.UQ>=CrO9d;Sy^36ciHZ-6d&:,/$J?@%-$JAi.1/紒^Ɵ7;bTa*'(Gd.2uD8a) `{N7uX|P9="jYAlx!jr ޓ@1.2E&" >$T)nmW *&F,@cH$,ո.R`imۖ-)谜L *} M\ҜD܈B0?‘CG;0!a8EУ}zIp G+-R3b̐rL2*G='`fke-#bD6\Fo-GmodjՏ24_`W}ɯ4$R8k?;"~ܬ BZA+H%Xy3redӕH'sti JCN{LQMKF+nϗ c80xc@?8ZVw̤ŪYl{ 4\y;Fmᰱj/lApTIVrcEm1ʴIrDx"|JӽA;lS&vp/@ GZ7)n-4B8-oD2BW,^޺ HfjVuHHCϿ!RrͶr[r.T|f (\勢ڴ{he(BCGF㿫"&*hx`+gcS}g4"puI43[0`9h8MO8-Qr=[ZY;p^JejW ?v߮W3q:O8N/X8eQ:`}W0iT-ŬfbeY_,6׈xJ"q< f*U|S\a1K^QSF4Q6hE!blk( yә[uZ@Z|Š-Q& .m c[-#=ߛt>1G 7yJdd=D"O޾ўv'ʅLnzߗQO(x/OF~bFuct;ucF1 (Ip- n8 ˩NwQ\)]CJC( X*+wQu*-1(eBM@"š" 5%F!{ڭ͓i;:K*:T 댮eEY;%okpQqqFο/]ƎW]p #uKRG Ȓڒ OƗAhfjZBg '/S]99~rx.}+D`{ +ݜ_O3Vf;[r MsAq7R &N{Б6^ r G>i N YCE} 5#޺gV!'C]l {ё6'='CO I5:[7 AW$ zc٦gZ+Y{&G{mePKdQM6PK{B2Object 16/styles.xmlAo@۽`TT4ibI1Gd$]@}qW0&|幋,PCEsiaDYI2gB6K ,TEDsp9BFX˙D{vG)+_˛eYg|9Pד"\NNg`mE 8q;I>OHmk"gXsQƣC^mNbR7=q`3ZNODl$WC=o =K |7PKYLPK{B2Object 17/content.xml[s۸_7}:Rk.k;\2Mi:0II)CRտ ~HD)Rr,3 s*Ӳ2l+c|qg?߾w?[r>qzxJډe^oǟʲmo6WVu9Ͽږݞ&ubߞ:t̫zg/뺸${1Bh~ U7={gÎ?~솣gOJ9˭=\7! 'h_d;]^2?o=k^=yMx5Tϋ[>T$-Pdb["=V2z[f1͜C C=7}K"puzɸL߶uއG͑/q|5Q(B>1B*Vׁÿ-\po.k+wQ&B=ݕ^7l.D-v G^okӗ쏯EGA#ק^V}3<8nw0Xϕ/_z)svv _d(24_s)ص$q r;yFfVgɫWUnS"{+a[)basR7\a_D;ox&zDu^AI]Ă5)gf{Oh&aaةmM\ @eyB7֗"ѵn^t=  v7UH׻yHɝsOpDžfzfw 6<ˆ{Lr;8yWM7.9fMָ`v djw_E%>mec٦:X1Bcft*6 Ц7xbyuΎ2 K@]&̇ ѳ^p6D:J qRF8x/v~+8?>( ES A~>Ebf? M>rX (!/G:x4%?"iS_qa GP[`Xh D>ˆ0A= =á؃QF =qhebC#AXOŞ/ &D^'A@!Ⓚ5Da" EyޠM~O 1Nu яU DD&@^:33JQ) 0^hEL! x ڔ XBL0ձ(Dz ) 0|L fH0h/׏[ǚzCXD0`5^6%3B#w[NXIx> =3<ӦO{مц1@^D k)u4Cfoz_M}mo`3v ڔz1 zu:m:xW0Ӫz{G:|6%^"zCo4`cЦG0t*F7hW7W*}inKG-PK7 *<PK{B2Object 17/styles.xmlAo@۽`TT4ibI1Gd$]@}qW0&|幋,PCEsiaDYI2gB6K ,TEDsp9BFX˙D{vG)+_˛eYg|9Pד"\NNg`mE 8q;I>OHmk"gXsQƣC^mNbR7=q`3ZNODl$WC=o =K |7PKYLPK{B2Object 18/content.xml[Y6~ϯ`>xs"M*jODRv(RQ~}OIhvhtk {&UVUdI޿ۯf_|_)t$QrhIRhVOOwPT0IV锭 _Vc~SU2VogYq#w,àj,4 IՁܧG^&OYn0Gd =fxw3k%mw' ݝ nlyJIp_֬vHyKp{~)WC¥5f'8ZGg8ŶkM81{i\-ٶ 9 PS!ݖ+(+HrŬQEi (a(\*G^? &C4DdļkpoY~4%0:lR-A|0Mo3quSԶt0`IDrз ˴}v5`wHp^Od6M0?ycRg_/#CJg=I[B~ZjFGJ j%Y=/^P%z`0b?au-~kO _[f1]?un2q;umFkib&6;}_ۺgK@P[1|=)#"r{1h'<]t8<>^|ǧ3[.8:D:>i: )lHn\xYe<4(F4CV=]wbpGQ8K=T4(`VBݫH;XLXЧwMrX^uXqdא!\3צ.L?s dC/;041A^钿 ꞎF{N@7H͠U&@9Hs (j9 ׹f0|gMD aH'Z'pV 'hC`dmrU& AcYN#b<ߠa#an"(E(Ev19FY:& 朜Hm;099%L[Iv;9%q@u@rrlk0)A/ `A1 Bĩ:L<<6~NQt< >@z#ݤenS-@=ބ7t WNN rwe.H yA?:A^ p/5`PK*1"(9PK{B2Object 18/styles.xmlAo@۽`TT4ibI1Gd$]@}qW0&|幋,PCEsiaDYI2gB6K ,TEDsp9BFX˙D{vG)+_˛eYg|9Pד"\NNg`mE 8q;I>OHmk"gXsQƣC^mNbR7=q`3ZNODl$WC=o =K |7PKYLPK{B2Object 19/content.xmlZ[s۸~`ٝ>-/]gәdN$XdL&|87%ϴg+ʊL[H/Fp?y_~rIrd6VS駷tòޗx/LWMiviDz~Ut%LT=$l,E].o,֫ql۶Իl]v_r5yr ?"[r)ۣ܂0on֕(co_qgKFڲpWsϝI7}7m#>.:N+$UQu75ibHL[uIUM>o CH )ޗ8nQdּ0( $tEkݭ5oDJ(30?zŢ6 4 %ts\&xw1!R&g5eۀ䄶j=XFa^Y$Mb'h\~PWWٕgd: f C׍ġ{:MWM3fZ[_if; miDvww*>Nܡ}o66N֙n,0=wnv.f>#ڌb$ISh<*SښպV3̌2w1~%Xp-} W ᑥbAYag Ѣe$p)#ԝ9s-β`c| $w G T>U;2`dqAs)Zs:E=*FJyF;g V&jZA'Z&+2yzkiʗA|˵pօS:̦P設'0Dqώ?.ZѲG:^ DZv(riW !b  "vx| یAlGn#FFOhWs*}1m7 C?‰#5?Ɛvv0vL ETy?vL*x{ |??]k Ry<>((!ʽw`BhmGQm΃q' \ ]s|h ve\R.Ȏ7`L:pSԼȆg vu . r0 Q8`D:bh i_=Z}].uW"\PKu.PK{B2Object 19/styles.xmlAo@۽`TT4ibI1Gd$]@}qW0&|幋,PCEsiaDYI2gB6K ,TEDsp9BFX˙D{vG)+_˛eYg|9Pד"\NNg`mE 8q;I>OHmk"gXsQƣC^mNbR7=q`3ZNODl$WC=o =K |7PKYLPK{B2Object 20/content.xmlrF_>E7\p&Ng$;qZҪLgwic9gZ0-$)9W.8{0?;#r9 <.Z鸮먵Yl:O/)4yԂ$F'xK M1K-~JKje|I Ce *uyI^b5iH&1W\*sORT'no*d/sAP2\:q>6 { `\F$OHyR=ZOQBQvX%$ 8FdFr3ˑ"roަleޒ1 HX`lLi "ASP1,a*"5^D0NsfI%)4KKe37̐qRkSH86pޠHB/#1hq z-v'm??|Nm_ Q90i!M?{4$~i,B!.xi('(H+4O)Yۻ)K!.IZ>"SK" EUjMuskIs1#2P06@Ъ񖘬%dL(p| Y - r8톡BմZ 8]01hCaU56((^lJ&Hc[Eąek]u \f\xn-4F[z@S@3PV^Hn{[ؙ@k٢J9 x$&CRDd4G[U:}|s8:٤AFI'+<+{~?8LW7Z>{d iS0i_]j}DjNitZNo[Vuv<<WW0q280T' CHF1s EuoPKr&H,PK{B2Object 20/styles.xmlAo@۽`TT4ibI1Gd$]@}qW0&|幋,PCEsiaDYI2gB6K ,TEDsp9BFX˙D{vG)+_˛eYg|9Pד"\NNg`mE 8q;I>OHmk"gXsQƣC^mNbR7=q`3ZNODl$WC=o =K |7PKYLPK{B2Object 21/content.xml[[6~_TݨY,42iI#%{HJ(ˎFUIaȕ%HLɒ`[ֈ Lpz#,!ke 4O*>6+Y9C[JjU'3l,h,$ϡo # gIIŷ2\-2^G^{IH+{M Wz\XhufNi;-AgcStWOAN-p^}+cK W2HG贼n|@O,A'ɎԔͪݭOn'GFcSeio7f#^P s@½*palq:1FlI"I}D۔IZQoO] -xlɲ#m2S,7},zI"kzɸL Km!G " +x"plC&9S_PNj͋1(\EOP*a(Ìb#Iwo]O"d2Zc^ I(OV&%HҔ7vV`;@`ҎwЛ\#f_p͉`кLWZ#f_ZJ+ vM/ e'=h&oFRh1ϋk5 8uRo@-4YS/ Qȶcڕ`}AjD8qh~ Q* hsL{Nx(y.<;8c* m^NyNրm^"u=/;"09@_$ǡ^@6/ՀGE~):?]{>q-O [`zG3>m^P|y^kB]1Y@lA`Sr`@2E0dGf~zkP( #ef~yQbQ^7٣2\9i^':{7g"wQJ{mcۋQŞz iVw` WM~4S=gb?tW_%Tφ)#GpKJ.:PK˥gN5PK{B2Object 21/styles.xmlAo@۽`TT4ibI1Gd$]@}qW0&|幋,PCEsiaDYI2gB6K ,TEDsp9BFX˙D{vG)+_˛eYg|9Pד"\NNg`mE 8q;I>OHmk"gXsQƣC^mNbR7=q`3ZNODl$WC=o =K |7PKYLPK{B2Object 22/content.xml[r6}WlOMJt%gtIp>3|zsnXIҲ޽mJ?uAti @uBJ*˒ ˢnm[r lJ=ÏAmP('l 0= JA vknB_cA\3\\䓵&*j3 9M/gr 򝐳Q%ZP("nzc"ze $Djv9]+[bTKa L0 cC ChܐB?"C ^a?I3 <1"3fHEq*Ecc̈?-IӚFB2jxĠܥڷRo4[ߠf+ܲR( \C+(ԗ'JKM3J|ڧy-yAN,TDG#`: 66NY0-VƆk&V ch28x!0NS@xM.`  pT $aAJ׌>GJa@1cbKWnNBlONN(۩n`=Z2 OiHB7| 4ۏjӊmsb^Kώ'Ǒz gW-q~+,LK(sbi?$UMy]p=wϖC׭JHq)[a\eZϮZkz3L^<7<Gu^?XoqY4'U`SxR51g'EA. VS3<)Ceۦ3rJu!r.$6]3+̬3 i'=FvS!:` 7ݘ/^p.`_gXTROwqGNrN!cm\vwP˅7.ҞoĜV -z$i}[H$W؞Q́S5n׆ Ar6Ye(9a9vqS !2ԣ`ђTI(8+NÆp%pju{S}] KmQJRUEAEϼ䊐n i1hŮ.q+Z'U<9sE+XmC3 5LKYc&QtA~eVvRV 9gЛ983lC o+TҲ082_c|d/G ųO/a/i;=%A?'3b/x^{eONi!Rq P!8ubO Dc?M Fc/:v錏N+Ιad(I׭{ڎí؞VR O N*)'9x=q@Z /y̓ovթUV|_ ~p/PK)#%1PK{B2Object 22/styles.xmlAo@۽`TT4ibI1Gd$]@}qW0&|幋,PCEsiaDYI2gB6K ,TEDsp9BFX˙D{vG)+_˛eYg|9Pד"\NNg`mE 8q;I>OHmk"gXsQƣC^mNbR7=q`3ZNODl$WC=o =K |7PKYLPK{B2Object 23/content.xml[Ys~ϯ`SyZ޷#y;INH$X eY%KCc~F"d~R|Z*8iB\W-Tϯ޽_X_$4^g8V?/U3w 6aJϯ] 1_ު*I}ƼԹ0(4MC>ڦG^ 7ghGÞ09A[foiEQdkW2rv/6:%B\ʻp ]krB0~CI@IfpvxDu 1#a%D? XF늂$LA}rU9 B HD$:ڮO5 Y TrfLhkex222AlSz9BvU+kAl). [ؘR,-HB8?CG a8S\`A-3Z0ʔO!=KIh hKcFZnHY8 RŐ,wYu%H3}a+jE] Sz4+R|?W?dˏuLT?*C!\1'дfV~[ O-A[m]$tk7A.PZ}T+펦kd@V c{虼tDO0.FK^5ەmvCA4+wxGبKvCi!k&= %]3cU^6 \Cz(f2-ClI" Tdڡb/-FP7)6yۧZ6 ixOTkz7Q%s^vq Պ#p%|"plc&8S_PJ*l .z6J8 t1/1 >x1)ޤ!B&^d`/iJ`F!^$Mb`9stSԶt}u OHBttKDZ }w5a X0VxȰ/QTPR5=<7LCxhz|oNii)|NoNd`砩i+L&> 'v.?XBk־&d{9uˎɋ@,/֛W7u{ݴ8 _HA؊MrNP 24\\^) e@-$l93j)j)`LhR2SEM1Kk(Ix隫Kqº_|a9$o*e-@=Z7(%櫍o|yC7tO14uCY0(mlON3׽wD^wD\پئNO;1#xSׅ厑dhxeI룼!T*(ɫ4{#D)z ߦZ# R6fOpH9YܑAM%I&vL.6̭+ ՃjnFXDݎhI&+h6z?ɯn{EĎbWԡLr PGxMjA?uj=Y?z۩_CV8ecfvZwi'ȗ@S FV`yk@ZhrM 05@hgW/pM?aq*4O7u {f8pQ30K=n״# .qd:;O <+xam΀ߪ0hxkQX7xD;YP=Ёm(ṮǶ!#*P:@M/#Y3yD;rQȎY0M! (k=W@,;#>#{R{-&>zyoǑ?PK2PK{B2Object 23/styles.xmlAo@۽`TT4ibI1Gd$]@}qW0&|幋,PCEsiaDYI2gB6K ,TEDsp9BFX˙D{vG)+_˛eYg|9Pד"\NNg`mE 8q;I>OHmk"gXsQƣC^mNbR7=q`3ZNODl$WC=o =K |7PKYLPK{B2Object 24/content.xmlے6_ẙ>7[ i3dlQk my$,Ia! !ӆ3:/`!M{8l4p҈d56;|7^4|NB|pLX!|_aZ6[EfSp7/ ~Q2@|cgG"2g]Anj_hԌ/Z鹮YlbW%b/$#EI1K- %Vԫ^ ݕU<$$I%iLo1ۯ ~bx_ƈ=GxďJb06ay Hx}U{Kʾ|,?LSe'|g"jERH7Pz=G)ISSFDۍb"P+ g:!m6E)[Xnx !X0z3A(М$ nB!˾R!sӋ0 D0sN*)ΡXQNa0C;qX aF©WEND9|эߠ۲Z!ݠ7x2۶#N1 ٗZHB) 4OԼA1$SjqpSC;AC^)Abl~3r%dIGpj)᝵#ʬ[Ġ(`""iBZx3aƀ |qVԭ 7/!RpKh-9afP5ANLPZbY(YnJ[!HƓ-2wB팲uYM \\z[X܁֧vjlz?"WoUC`g^FRFSSer2qx@f^nѥDMF ]@98ͬcQH+*۬[hwi\C˃GڒUNԡJ+x2*ll5&p6)@P<@aU3ON;M(p؞p?mj&KHSFc|zn&Tuz<w<g-ä}qԡ4$wEVyW niMjT5c弉1YB/%ؤER2d/nV+`k{^͵ͣ<gI 9 uS&NCP)5OQ'gh"M5-EMMe?|]oKj+F :WH!E˂FCch뇽7\cw H~W=LKM9#CA۽^S͡=vlPZjWZfymú[a C$ڂ:6R_TuUʥj<BA 5r At1-1O(eDAoU>U(YސUmEeE\Rq;:> B*sSP'B: @6B(Scm@ Uhײ)Ҫ}bAJr1'{<-dدՑ}sG0ok18qkùg`4my>yި6Z<έcKGAyYr {F qE)" l4LV6K ,TEDsp9BFX˙D{vG)+_˛eYg|9Pד"\NNg`mE 8q;I>OHmk"gXsQƣC^mNbR7=q`3ZNODl$WC=o =K |7PKYLPK{B2Object 25/content.xml}[F mm}Pyxmϙ3s=ӷ}AI. KPIZgZV$CfdDddėxؿoǩ_ȕy~o???nb7C{?W7׿oe~}?|j^~yu|j3on}xXЯnv<|u_ӿ%x~s~4??|}r>/x^7craӕ2Ͽwxq{}B/Ou;~Nxo_[nvaoћ07A{ 0~8^,_3vÇ|2}=M_ݜ9M\k#8?WC?` .oCr yoXu0Wn7m7ɛ_o شMwհn|$\2ƹkW8#x0Knamn;?tbӍm31ǛGo?p |~?2籭Ԏio{؎]MSv Lzu{wJGdZh ~~=u5w?+{.okðoC9O?5ݦzr?;XW?Ζ[~%/' -V3: XԶOpC7~/y7-LGXiQo{ov /JҾ5UaçU=x77V\#̚% oӈv@R zhcu_OTv:mw}g4 ŚY?>]5jlo۫Nt5? m\W=b-z~?aŷz^;.7 invu0"AMg`g=qI/O3^tA;2 T= }viUkPwt&q-ڝ \Tσd-7>s|oEHyqQ?,0/$ݠ}#Ce *׭Vn&oj\ȸ{o- S#Sݏ]HE;J~jRSw}aAÿٕL#%/mt HO@%737O_yvgZ[.Ke\yk. ήnws"\K߶D1~2xk&`s7#Yhyl @po?5 ߵWVϯ1} |[._9~cA'M d7?_eb_J[%zPiQ)gC?@3Nb<kJp}XE^\b"_Ms(˝,cz|_3+coT }ɾ}H?.}ۛ izYo,F2Jp6+nt2V<|W%;Ok-ze_(^}"H?dyþojXabήvm"~ѧ/L[m~ ZG/y|iMP9!~^b%{=:t#M2+Y/x|V-$w#j@BYD•JRVGBzM} pEEFLN8"M=Ň0X/u&rvWTj|7ҕ.ŅBa il++UrD (5ɜ(0-B9$ z+0PД d { +Ɓ3aQ4KDxРDYK`hAs=(8AN 圳BQa dOy؜R&) Nes r)6u9N^y U{Ao1A0&ƵU0/T1m`Ŕ  c2T 8o % d[4CA0QxsDBA1Pp: t)@g!8ˮ[ @J 1MpB;AY<@?J"&\ec lǶݟfЇ w,ʱBTZy¸;V0[Ad$/ hinjP0% "JyvJcL((U4;( (릭` ܣPi/+OGA1P`\rDCA 2uߧ,+h F rմvR9}8:Xܮy` ,C!Z𗊙 !5FY@q, zTD .bÿqd4" ve 0R1.vCC0R%O ; 9am{\@J]%ZNjm}n!H£3LE$P磁`6­p6h(Q*!DQ><,F !f_L-NQYK0%ا6WlMV{  ?f2x6YsJa`maAB.9mxvl)1 nj9(KCpڄʏ9a#Ą|sʠa A10qxL϶X69m!iGL#n(bFeQ?mGrE? ,x:1CNc D%sZX#.a _u1X.CI)G$_K2Ag!a10pl*Sr UJ4176|Ʀ$0ZӯQs 8J 'Va@@3׷Sea(0^ ^2h9 ֛Ԃʠ>,e8L, Nw 8&A7GLD)tZ;c`qjC}ߎ8%ubY ^H!"U108b5ܥLr:<^t+pY4v@,'B05X9bk0p(p0 e_CAihp-:P28I1pr1 jMo ܧr86z4Q"8x:>pKEhD4F(-VJ9:/ 4֐R0m#kP B:Ag)G4eRbr!? f0V' d$RztݠN~c#9ƳѤ`Un)(#A)(46]~Xqgy%V>+9F0giN,h; Rх!8h1mb^s0XHLq,ͮPIFtw! c` Spk0[ k1ʟa ᧩=Nd$k1H A? av>,7^jkMPW`9&1P1ct,.D{`<*cecݡ;`j{wBpCl*fd&#(I I10,Uу{$ dˑ`ôC3آS gōf2sCIb  +m/u)y5Z+;WDq rGXsYjH1ؤBgv*X g 8<ߢ(;wӄ@005S(%/(#b~r\X!$R {0yk =.ASvR!;+~ӥB;/sS\d'?Ԏt5c`bB'' `f!gZx<>;r vؓ  Dt n%k[96H!8锌. 8Tb}3q3URR;a /+/XɁ^8M.1:*]Bi e`|38J!*pa;C b X#.Dp U2cυ*31 uOs2vHqbaJ;}y`q`[i!tZй!5H qyXNz+`Zc`1馻0\h:8XW%JA Gb`]-及ZH% ,NZBqاIzNN:}57Dkc;v>X3XWydThchN ba` eUFۀs3%>.E`}5 ke=,ˍG `=xB\ gx dSz] scwQBST(.` * | tݪX1b`8k'P>vۥl* w:Ls2R'.P^EGm12-<}Z͕;-v.*+A lR $ kZIQ 5A-Q))w2L/׶*:Bj! 辠$!(!sXL᧬4>P(8 +5436D+&Ӝ`KZbqm)@pxǺ#ۗ" rXx͒^#%˥X!nX!`ڧXfo0F"5 O[%JD|q؆mR.UOah B|@kpża%Ȟf7KR G\(Ga6҇ p&(6 :늀٣:R8'} ;p>J?/9B 15Z-9~23%޴>u(;S%4gRSvVG@D=&C#Xz$2r1֗2Rb8l୭i2b]MDŽ  jXXbz2r#<: d#5cB^@tgɊh+ a?q2p'uNA|;sUFإ-J<"K<8iY*uN;|@'  R11𐣁I&qxlŪ逇f6 n?I ͩ2 V|XRމT]^HlZy O88ݶ?C=R0ox%5>FcifiD8 닝Z|2-JK81 8X R},,= XiE7y>16sG'u,+獑 !" W%E m״_6}s:`^P3PKԇ *#PK{B2Object 25/styles.xmlAo@۽`TT4ibI1Gd$]@}qW0&|幋,PCEsiaDYI2gB6K ,TEDsp9BFX˙D{vG)+_˛eYg|9Pד"\NNg`mE 8q;I>OHmk"gXsQƣC^mNbR7=q`3ZNODl$WC=o =K |7PKYLPK{B2Object 26/content.xml]mܶ~bo/uYNR*$Uv첝\ CbfIή~u3ڕת\Tuln/w6fl߽tU_n?{o/_??|}o62/:f÷2~0U?nbߜ~uϹ/V\_~;vӋ</zxLB_~0ͷ׻+Ηf~jb~^7?_>rW,ӷWc妱׻KC6og|z͗x}N?wQ_D狁G,w}xh|_`ӿh}f/}'_oz|y4Ow/zhk:3t\1ع9|G&V&<y&KU8>f;[}xxWs|ӪsgIۋoGXx_|_; \|ly廇|.y?cjOZܣackj ^?.>$8?Fc`9*C Qm>xp:m=-R#Op?_R`<L^FTrM糭]tqǨvރM; GUY?ޞ׭~U]hKG`9i /?c%O{ )”з0#a ߟ_fȿQoa9λYk>QATߟq֠apmvΨZ^sg>)ǗOJo,`"р68|N@$2c⤼{XZSA#&Ly&ghCY։蝴υDD5?teo>JǯJŪ d%}y TC5%*ݿ_>Ӊu_߾~y_1 \7=)V*g+6{Տf;㇀{R>@]{HSM}'=_ ڃ^^Nr~3\-Dc~QN/GQ#^_ˑ7<He&& |IjPT^ėTyC#p̳S86g!|~a oy+YE*[^ꡛ2`8#Nm=/=[D} 'vu0uC&уM}%ZÛwnuxQnp+=M_iлN\WE;k'gXxn9_";]šNO{'{qz9ޑ+|2p@csû^}V}>%]ߚMNJV"J}Ox Fy'4{j_icrUC! ik`lLì"ヘ~3X&R"n1uweB ƍD0}4؛a.g+K3L[oQ'-$ݦ]#JI|(ᰉ~=msQA UFw!!pc2Q240SC.v zY"m'd͒BM}I5a-e9L &.BS2wi4h8qѲ('%+=ַ0cџ@b ,6|v0ڹ~J3m-@0zc;3cWa 2}'P<2W ➱ߎړm*g IHe\$ H[f 9@Jt]tyxœ Tҗ@@q8= d`qL>UKA feH}Fbql8r<缡K(L ?^=ݓ "I(*W;˺]vuɤ-3C\I Ɍ3 R*I=o,"fE) RRZ4vTePՂ$Ϙ޴ &%dhx2YHqa2U4}C 4(@ynڎ΋[ *] \éwuA|A(D@qp:6|는IAdYլlASL)<7kY A)D L[۩0/O+" {04E Z7|}׮J%#.R?){`vV#/!3n#A*4~U= =+TW2f,+UK^DODӟɣH ɲ7uoɗ+IX(Xk0G>.R<-vu()XP|y$iɤW7aݲL'D+dd/"R1XlP]}I4Xx*)#&JI,#4}$,ƵJ*b%(zN )!isHޭYdAyƢ`Խ("J7ϯAK,H'%yww`T JWJҕ5Y/dK"ɱ_vD+a'Q,E"ɲD-nYxUYd415݂:I~&Rαiz[ seQd :z Ef>ظ#xu9bKTN` n8*dcñCK;D%X).:Զw%$- E@qdLiPH;0PJd>r,R ~ݘ Uߘ2[IKG~y#!šYvz4uD 5@[nm;8'=(W e8T1A& LnʹC@?PܸՈ%i4f:XfpɊTYRFHb ۮr8D<+)m~+(mUY‰$mK2tq 䢟cMN Hr>VEL_H1~g$,H4M,Lg+}ZmuWub * s8=+EeaguuiNrM Rq=#ڡ*KKxxQUKXR V{PUfp8TۚTE CUNħʂ"G29wLcܒe+ EwJE fn$u me,wwu+D!|r6fuw0 ϘGOkm"UN{ἕi-^V43XAE b~\!\xС3]}"Ϡw$whqO>W"p)<ʌav)MP~4 )K0i(&J&c1녁4I e V{3-uIϥ_hC5 ƔZ,w4)xh]^d~*P{ U2gg#WtVh̃|N$9 IWՌ L(o`rom"űi5`Dd Vl84R6>pR<ΓJ z7Yzzv <!dPR(%|Z9 (|(-A;î3ɩDBe' .#D?o"!{u_$/0\(,Sm9cU Jf'9e3jipĂ, ala,vrgZG>T.RG=>mrDȉqo$ 2nϭV,/,K#9|EVWs{t#a ]1RxXCK V NYdk, BJDd-f"($@{fymn]b/"zh=ѥl*؁*k44%Hn7@<MhYZzgL;DYːxp,`]:<4f:dwLi6/)+pGuI$#[$~Ex,z .[hWDI,x"v3WjE"BI:4s*@9S4+e˚U!M@SdtMO(4Q5% RGD]h'e}1"*A+_V>1_t)^@-N.S+qሒ.nnztQDCUnauV]Ƙ"IMS' Yƾ);0KA/} 8SovbD`e8b@Dlշh+-B=du[[,&JP*CXP^Oh1:KQ$-|%8a J~R2jМ)).wf}%Q.#ڊ$A}:]Џsv=HH{&_@]V3 7Q|Wcn:c[2vo8FiOAٍ+RVB//*,^Sy˸9:dcx= __s"ch3#*P(}uxi3֋$"))ڳ9D"nłt<0 NSB$&JAN86(=i0d űHl~BM%2'b̻Sx"{6 owWsV .X ɱ M8fhQmYt[|NewHHOg G^PK{B2Object 26/styles.xmlAo@۽`TT4ibI1Gd$]@}qW0&|幋,PCEsiaDYI2gB6K ,TEDsp9BFX˙D{vG)+_˛eYg|9Pד"\NNg`mE 8q;I>OHmk"gXsQƣC^mNbR7=q`3ZNODl$WC=o =K |7PKYLPK{B2Object 7/content.xml\[۶~PYOB wv{v/O,ɕXS$_^$8,ݩA;wpnvr:eٕțYGI>}p^}fmQnqVaojŻ"5b\.?f`_׮7Ȼ<8U-z꺸X,r&mCBwPՏiF 'n$z'ؼͷ{Hb,~˵& ڋfM\DڲKuZ5Vpk$vQ/ dWG6oWO.n2)Nkފx+ ZAes> Ʀe{I"kp_ o:IT+\aW)E WI\L<e&fy &i y%!t4yJln()n|"KNO*i|;YyK0f]z=[\U-Ut7_Y\&W'UeIIB2iV]tfBI *@/yJ{|ɞ٧xna.Wcl$Ykvd*=#h>e xÀZWz+2EZ kgSD}bV('ʿӍUPiMҩGq\8CPImnmG79~(L7U͆A 2 U)MVYգXgN7.Ѹ,_rd{i~'MI}m(jHgy>Bh[2ޛV2yMrMM}>M}P;7}|l]5_F ~l5rs<sK%p֥뗮PBipWk`?K{`m Ϯ6eelNȏIwI4=_Hf$xH=r#tT}IVuU,Wu ]3ρ_՞ԡpGח%|6et0DcL`7}5bןǽ~:`).2G\K}4njV FS Su \tbo~"k b=4dI"M(2{|3xQ+ߵJWm36La̢]. ^m'd+wqؾ>,z<|ˆψ͉T{j9Wǎ?CH;N42:qX155@<ć0/R2l& C3rzYEd`E Aߑ{bhOV~ֽNn4_xj`&.ijh"cIAJgc>mlvVwO.^#ζZz:XŜN& n *&.8Pjz?3t,meD||)FBrx@ nCL+^1:FJ2NA߁MƦNF\CmrNƦƢh&pSѨ+GBOI6u5u8VbH!}6]bWOt&bNƪm$PƁΉHU qLrRMEi#LAU (L!vXU @N/`SQ?Y:"LPWv[T+pJ0D1E6\ K 3'Dx76I9Y>^Y JA$vol6:D D8ME}PWQQJml"%H@fZ,l"Kag(4D:gna1B)In˃&`N~EbX )\KQ&D06ףCC\W j^1q&2 t$l sݨkड-h*'pY Pֱ¦>Vs0O4ġncSQ X%&zXLMP6nX EX*ME}X@`B3v[TǺqUNkME|ƅLb ՛9T*m\D(,+C¦>֗+B_8TRQ(yL \TGkh p l"|+Ł9V8ocSQ[ h#*w[T_ %)V-LHe]+|^o@;őWPKr$ GPK{B2Object 7/styles.xmlAo@۽`TT4ibI1Gd$]@}qW0&|幋,PCEsiaDYI2gB6K ,TEDsp9BFX˙D{vG)+_˛eYg|9Pד"\NNg`mE 8q;I>OHmk"gXsQƣC^mNbR7=q`3ZNODl$WC=o =K |7PKYLPK{B2Object 9/content.xml\ݓ۶_2>u)ۗLg3)#) =Կ @N jXo OxiIyk42%.O?Y/yӯ X4HYeclۿ6L˶WyM]Oo AiWǶ~1 SțdMfge}#foUT7M@ ٫DZm fW{?5gCό/{F,7cw son$>"tz[ \>kY%Aԏ1 {Y `W';woC/:o`1O T׷f$Qhi=-hwByS5/^5.v&h,7ZjK C,Ab\Ӟm:]nIE;ym<’.|h e,7Dy,Mi6ECͳ6]4 \@:Clh?rDo~˜֬nRGD( u]_Q4+ b%&cp /N m)YWEtk~B+gMCȍwG$L6g1`L|dTٖ=E T`/靘}Qb_;V_Oe!$NXtk6t9  P) {Ml$ *ұYYX@e<ڬ{(a](E2gG98ޝ> 5(aIIXI`)"ǼXkR`8,i$ؑI׃;Os͏Ԗ⿸]WԃB6ZN%.Z*L(6%*:h_?|-_tvѵ'׳s17#)&n'gZAFEC7i e+?ɷnsЃ'#E%PԴJz t Cv;"p;‰3ux[u8tg=|:m$pd}HS[em?qqq׾›g lᶤ8O<3AˬQQo;e a31}'VKld0[EE1-K^ ~ƟmډI,xCpAYGK{7Lu+F;{D~W⻉Zl&`@-.DD ˝r#8 9a&A~v?4F+a䕾]PBO%S0 @n0H]#58 y/S **?( K`c]ESSD`J y10td@KxQ((#uT% ƊzTPPM0 udQ7=IM|5G2R@5m9B 6Th@j§˻Q2> 5;bϑ)in#5~s~s  y_vzWO0C>oԠH>1RXf/obe'+}mI('m:n(.r*鐀h NusJZBr0pϾ['uT5_AF-y#2J^38rDNMq2@ uT&"wsR@%~L2@B*(:,q;hA%O7^V0PdpI]U*9ɰ-;x-Ñz84~ƟW1/PK ?}BPK{B2Object 9/styles.xmlAo@۽`TT4ibI1Gd$]@}qW0&|幋,PCEsiaDYI2gB6K ,TEDsp9BFX˙D{vG)+_˛eYg|9Pד"\NNg`mE 8q;I>OHmk"gXsQƣC^mNbR7=q`3ZNODl$WC=o =K |7PKYLPK{B2[00meta.xml OpenOffice.org 1.1.4 (Linux)Loulwa Salem2005-01-20T08:32:56Loulwa Salem2005-02-02T09:31:28en-US32PT7H35M7SPK{B2 settings.xml[[w8~_uOv6iݓ8v &@G_K&!t%}3>.\~^#JꩦT qJ퓏o {ܻЧ'OuCq¡RWz]ר('@;l-Uټ*R^?(ex Oi\K+ )RfBTJ==5MͻĈ̿GQtez]]D]J쪺Qv>xLn\nķ'H@?nOe3l{+}uG:+@""v &;$NzI]0uc*0z 3` (&KcЄ6yUt3t?#dHȞ?z0>G$|7JVL:F2c'yG]pn2MqOM#ci?(9}-wM*Ǘ,>vGήP>%}d;LSr7H,'?$RHI"%{ ZYXG%fb# 2G)w)>r{ %}q4Hz !t{Q^J(_>ҊׇY>N9o1>xTbz3PLa|v"x;rFXAA01I;bxj&ѵes0x+t<@<l%֊3F sQL`{Qm"=K@ܷ\H,_lθCd< `B꬜騜~5Mz(bITA\o Aj0&"F8C<O!&v|׶q.:{~QՏm=W]:2oҗiʶkQndtWͯCf2,ޠpf c&qg_Gz ƣ["qaPuL1:z(k_Ƶ:wnQS-m[[bp)C$umZlz<2gn& F~˺lOK}7O_b\$ >(ҿiS σĘ\'@/d׶W'SX4݀!@)U}~NjJk3 \^.y_ #:!sPȎ!X3Gb`ʏKnV#mF}KJt*ncB\~W8PMԱ7PKKj/s9PK{B2META-INF/manifest.xmlŘAk0Ym贊U:l=옥fԴ22X`n$䖖< 6G{QղP1#xJjEx2Βu1G[d&j6X?=NIJ,\E&dff27RῙ)Uc(_|!i&ijI̅'TT21+\rzdR)_99ndObject 18/content.xmlPK{B2YLObject 18/styles.xmlPK{B2u.Object 19/content.xmlPK{B2YL-Object 19/styles.xmlPK{B2r&H,Object 20/content.xmlPK{B2YLObject 20/styles.xmlPK{B2˥gN5xObject 21/content.xmlPK{B2YL Object 21/styles.xmlPK{B2)#%1iObject 22/content.xmlPK{B2YLϮObject 22/styles.xmlPK{B22/Object 23/content.xmlPK{B2YL'Object 23/styles.xmlPK{B2uѤ(Object 24/content.xmlPK{B2YLObject 24/styles.xmlPK{B2ԇ *#*Object 25/content.xmlPK{B2YLObject 25/styles.xmlPK{B2 > G^Object 26/content.xmlPK{B2YLCObject 26/styles.xmlPK{B2r$ GObject 7/content.xmlPK{B2YLObject 7/styles.xmlPK{B2 ?}BObject 9/content.xmlPK{B2YL#Object 9/styles.xmlPK{B2[00%meta.xmlPK{B2Kj/s9 d)settings.xmlPK{B2l秭/META-INF/manifest.xmlPK""1bogosec.orig/bogosec_wrapper0000755000175000017500000000532311113035142016467 0ustar owensmkowensmk#!/usr/bin/perl ########################################################### # # Licensed Material - Property of IBM # # bogosec_wrapper # # (C) Copyright IBM Corp. 2004-2008 # # Description - script that will go through a directory and run bogosec on # all the files in it. Output is then saved in a temp result file. # HISTORY - # 01/05 Author - Loulwa Salem (loulwa@us.ibm.com) # 02/05 Loulwa Salem (loulwa@us.ibm.com) - replaced shell commands with Perl code # 03/05 Loulwa Salem (loulwa@us.ibm.com) - added code to accept command options for bogosec ########################################################### # globals and default values my %OPTS = ( temp_dir => "/tmp/" ); my $target = $ARGV[0]; my $cmd_options = $ARGV[1]; my $result_file = mkstemp($OPTS{temp_dir} . "bogosec.results.XXXXXX"); my $bogosec_output = mkstemp($OPTS{temp_dir} . "bogosec.detail_results.XXXXXX"); my $bogosec_raw_output = mkstemp($OPTS{temp_dir} . "bogosec.raw.XXXXXX"); my $new_target = ""; my @list = (); if (! -d $target) { print "\n\tUsage: bogosec_wrapper TARGET_DIRECTORY \"OPTIONS\"\n"; print "\n\tThe target you provided is not a directory\n"; print "\tFor additional information, please refer to bogosec_wrapper manpage\n\n"; } # Initial preparation of the needed files open(FH, ">$result_file") || die "Cannot open $result_file \n"; open(TEMPFH, ">$bogosec_output") || die "Cannot open $bogosec_output \n"; print FH ("START : " . `date`); print FH "======================================\n"; print FH "Package\t\t\t\t\t Sev Points\tLines Of Code\tFinal Score\n"; # open the target directory and obtain a list of its files. # Eliminate the . and .. listings (Not needed and causes problems in some cases). opendir(DH, $target); while (my $entry = readdir(DH)) { if ($entry =~/^[\.]{1,2}$/) { next; } else { push (@list, $entry); } } foreach $src_list(@list) { chomp($src_list); # if target directory doesn't end in a "/", add one, then run bogosec on it if ( ($target =~ /.\/$/) ) { $new_target = $target . $src_list; } else { $new_target = $target . "/" . $src_list; } `bogosec $cmd_options $new_target > $bogosec_raw_output`; # Format bogosec output and print it in column like format my ($temp1, $sev_pts) = split(/\s+/,`grep "severity points" $bogosec_raw_output`); my ($temp1, $LOC) = split(/\s+/,`grep "lines of code" $bogosec_raw_output`); my ($temp1, $temp1, $temp1, $temp1, $score) = split(/\s+/,`grep "final score" $bogosec_raw_output`); printf FH ("%-40s %-14d %-15d %.16g\n", $src_list,$sev_pts,$LOC,$score); print TEMPFH "TARGET : $new_target\n"; print TEMPFH (`cat $bogosec_raw_output`); print TEMPFH "======================================\n"; } closedir(DH); close(FH); close(TEMPFH); unlink($bogosec_raw_output); bogosec.orig/man/0000755000175000017500000000000011113035142014130 5ustar owensmkowensmkbogosec.orig/man/bogosec_wrapper.10000644000175000017500000000403511113035142017375 0ustar owensmkowensmk.\" Copyright info will go here .TH BOGOSEC 1 "Mar 07 2005" Linux "BogoSec Wrapper User Manual" .SH NAME bogosec_wrapper \- Wrapper script for BogoSec source-code security quality metric tool .SH SYNOPSIS .B bogosec_wrapper TARGET-DIRECTORY [OPTIONS] .SH DESCRIPTION bogosec_wrapper automates the process by running bogosec on a directory containing different file formats supported by bogosec and collecting the results in : /tmp/bogosec.results and /tmp/bogosec.detail_results. These files are overwritten by each invocation. .TP bogosec_wrapper accepts options to be passed on to bogosec, options are passed after the target directory and must be included in "". (example: bogosec_wrapper /Some_Directory "\-\-nhf \-\-timeout 60" ). .SH OPTIONS .TP The following is a brief explanation of the options; for additional information, please refer to bogosec man page. .TP .B -l Turn on scanner output logging. .TP .BI "--log-dir" " directory" Specify a directory for scanner output logs. .TP .BI "--min-sev" " minimum_severity_level Specify a minimum severity level. Default is 0. .TP .B --nhf, --no-header-files Do not scan header files. .TP .BI "-p, --plugin " "plugin_name [args]" Specify a plugin to use. .TP .BI "--plugin-dir" " directory" Specify the directory where the plugins are stored. Default is /usr/local/bogosec/plugins. .TP .BI "--sev-range-max" " number" Specify the maximum severity value to be used in calculating the severity value range. The default is 10. .TP .BI "--timeout" " number" Specify the cpu time limit in seconds. .TP .BI "--temp-log-dir" " directory" Specify a directory where you want the temporary files used by BogoSec to be stored. The default is /tmp/. .TP .BI "-v, --verbosity " "0|1" Specify verbosity level. The default is 0. .TP .BI "--xp, --exclude-plugin " "plugin_name" Do not run plugin defined by plugin_name. .SH Files /tmp/bogosec.results .TP /tmp/bogosec.detail_results .SH AUTHORS Developed by Dustin Kirkland, Agoston Petz, and Loulwa Salem at the IBM Linux Technology Center. .TP http://sourceforge.net/projects/bogosec/ bogosec.orig/man/bogosec.10000644000175000017500000001261411113035142015637 0ustar owensmkowensmk.\" Copyright info will go here .TH BOGOSEC 1 "Jan 25 2005" Linux "BogoSec User Manual" .SH NAME bogosec \- source-code security quality metric using established static source-code scanners .SH SYNOPSIS .B bogosec [-l] [--log-dir .I directory .B ] [--min-sev .I 0-10 .B ] [--nhf] [-p .I plugin_name [args] .B ] [--plugin-dir .I directory .B ] [--sev-range-max .I num .B ] [--timeout .I num .B ] [--temp-log-dir .I directory .B ] [-v .I 0|1 .B ] [--xp .I plugin_name .B ] [--xv .I vuln_list .B ] TARGET .SH DESCRIPTION BogoSec attempts to influence developers to produce more secure source-code over time. Various existing scanners point developers to potentially insecure sections of code. BogoSec broadens the scope of source-code scans by utilizing multiple independent scanners and compiling the results into high level calculated metrics. These metrics can help developers and users alike to comparatively judge the security quality of source-code. .SH OPTIONS .TP .B \-l Turn on scanner output logging. Log will be called .log and created in current working directory, unless \-\-log\-dir is used to specify a different location. .TP .BI "--log-dir" " directory" Specify a directory for scanner output logs (only makes sense if \-l is also used). Default is current working directory. .TP .BI "--min-sev" " minimum_severity_level Specify a minimum severity level. Any vulnerabilities reported by the scanners whose score falls below this number will be ignored. The argument must be a number 0-10. Default is 0. .TP .B --nhf, --no-header-files Do not scan header files. Useful if the scanners being used do not support scanning header files. .TP .BI "-p, --plugin " "plugin_name [args]" Specify a plugin to use. If no plugins are defined on the command line, all of the plugins in the plugins_dir will be used. This option can be passed more than once, to specify a set of scanners to use. Each scanner requires a separate instance of the \-\-plugin flag (please see examples). Optionally, a set of command line arguments can be passed to the scanner \-\- this feature must be used with care. Keep in mind that the plugin requires a certain formatting of the scanner output (for example, '\-SQ' is always passed to flawfinder, and '\-w 3' is always passed to rats). You can pass additional command line arguments using this option, but be aware of the effect it might have on the formatting of the scanner output, and the effect that will have on the plugin's ability to parse it correctly. If you must change the defaults ('\-SQ', '\-w 3', etc.) you must edit the plugin directly. .TP .BI "--plugin-dir" " directory" Specify the directory where the plugins are stored. Default is /usr/lib/bogosec/plugins. .TP .BI "--sev-range-max" " number" Specify the maximum severity value to be used in calculating the severity value range. The default is 10. For example, setting \-\-sev\-range\-max to 50 would mean that the severity results would now be on a scale of 0\-50 instead of on a scale of 0\-10. This can be used to scale the result if more granularity is required. NOTE: \-v 1 will not work if this option is used. .TP .BI "--timeout" " number" Specify the cpu time limit in seconds. Some scanners might hang, in order to overcome this problem you may choose to set the timeout to an appropriate period to kill the scanner process. For example setting \-\-timeout 60, will kill any remaining scanner processes after 60 seconds, and return control to the main bogosec process. This option uses the ulimit command, please refer to ulimit manpage for additional information. .TP .BI "--temp-log-dir" " directory" Specify a directory where you want the temporary files used by BogoSec to be stored (scanner output logs, etc.) The default is /tmp/. .TP .BI "-v, --verbosity " "0|1" Specify verbosity level (default is 0). If 1, then a graph of the severity points is shown, which breaks the results down by severity levels. This option does not work if the \-\-sev\-range\-max is changed from 10. .TP .BI "--xp, --exclude-plugin " "plugin_name" Do not run plugin defined by plugin_name. .TP .BI "--xv, --exclude-vuln " "vuln_list" Exclude the vulnerabilites in the vuln_list from the final bogosec calculation. vuln_list is a ":" separated list of vulnerability identifiers. .SH TOOLS bogosec_wrapper provides a method to run bogosec automatically on a directory containing multiple targets. Please refer to bogosec_wrapper man page for additional information. .SH FILES .I /etc/bogosec.conf .RS Global configuration file. The settings here are overwritten by any settings in user's ~/.bogosecrc file. .RE .I ~/.bogosecrc .RS Default user configuration file (overrides the settings in /etc/bogosec.conf). This file is not created during an installation, you must create it yourself. .RE .I /usr/lib/bogosec/plugins/ .RS Default plugins directory. Can be changed with \-\-plugin-dir option. Plugins must be executable, and must end in .pm as per convention. .RE .I /usr/lib/bogosec/documents/ .RS Directory of BogoSec documentation and other germane documents. .RE .SH SCANNERS .TP FlawFinder : http://www.dwheeler.com/flawfinder .TP RATS : http://www.securesoftware.com/resources/tools.html .SH BUGS Not all input validated. Not all environmental variables checked. This program expects to be run by trusted users. .SH AUTHORS .TP Developed by Dustin Kirkland, Agoston Petz, and Loulwa Salem at the IBM Linux Technology Center. .TP http://sourceforge.net/projects/bogosec/ bogosec.orig/README0000644000175000017500000000260311113035142014236 0ustar owensmkowensmkThis is "BogoSec" developed by Dustin Kirkland, Agoston Petz, and Loulwa Salem of IBM Linux Technology Center Security Team. It's a Perl based tool that invokes source code scanners on target code, analyzes the output, and calculates a quality metric value indicating the security level of the code. INSTALLATION: ============= - Install scanners The following scanners are supported by BogoSec: FlawFinder : http://www.dwheeler.com/flawfinder RATS : http://www.securesoftware.com/resources/tools.html The following scanner is no longer supported: ITS4 : http://www.cigital.com/its4 Install at least one of the scanners supported by BogoSec. - Download http://sourceforge.net/projects/bogosec/ and uncompress tarball tar xvzf bogosec*.tar.gz cd bogosec* or gunzip bogosec*.tar.gz tar xvf bogosec*.tar cd bogosec* - Install BogoSec using "make install" This will place the tool executables in /usr/bin. The scanner plugins will be placed in /usr/lib/bogosec/plugins. RUN BogoSec: ============ - Supported target_code formats: Single source files (*.c, *.cpp, *.c++) Entire source tree Archives (*.tar.gz, *.tgz) Source RPM (*.src.rpm) - Invoke BogoSec: bogosec target_code or bogosec_wrapper target_directory Refer to man pages for more information about available options REMOVAL: ======== - If needed, uninstall the tool using "make uninstall" bogosec.orig/LICENSE0000644000175000017500000002576211113035142014376 0ustar owensmkowensmkEclipse Public License -v 1.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 1. DEFINITIONS "Contribution" means: a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and b) in the case of each subsequent Contributor: i) changes to the Program, and ii) additions to the Program; where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. "Contributor" means any person or entity that distributes the Program. "Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 2. GRANT OF RIGHTS a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 3. REQUIREMENTS A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: a) it complies with the terms and conditions of this Agreement; and b) its license agreement: i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. When the Program is made available in source code form: a) it must be made available under this Agreement; and b) a copy of this Agreement must be included with each copy of the Program. Contributors may not remove or alter any copyright notices contained within the Program. Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. 4. COMMERCIAL DISTRIBUTION Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 5. NO WARRANTY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. GENERAL If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. bogosec.orig/package.sh0000755000175000017500000000153211113035142015310 0ustar owensmkowensmk#!/bin/sh -e # Script to package tarball for distribution # 01/2005 Created by Dustin Kirkland (dkirklan@us.ibm.com) # 10/2008 Updated by Dustin Kirkland (dustin.kirkland@gmail.com) # to switch from date-based versioning to numeric VER=`head -n1 debian/changelog | sed "s/^.*(//" | sed "s/).*$//"` RELEASE="bogosec-$VER" mkdir -p "$RELEASE" # files to package FILES=" bogosec bogosec.conf bogosec_wrapper configure Makefile LICENSE README man/bogosec.1 man/bogosec_wrapper.1 plugins/BogoFlaw.pm plugins/BogoLintian.pm plugins/BogoRats.pm" # dirs in package DIRS=" man plugins " for dir in $DIRS; do mkdir -p "$RELEASE/$dir" done for file in $FILES; do cp -f $file "$RELEASE/$file" done cp -f debian/changelog $RELEASE/CHANGELOG tar zcf ../$RELEASE.tar.gz $RELEASE gpg --armor --sign --detach-sig ../$RELEASE.tar.gz rm -rf "$RELEASE" bogosec.orig/Makefile0000644000175000017500000000271111113035142015016 0ustar owensmkowensmk########################################################### # # Licensed Material - Property of IBM # # BogoSec - Source Code Security Quality Metric Calculator # # (C) Copyright IBM Corp. 2004-2008 # # FILE : Makefile # # PURPOSE: This makefile facilitates the installation and uninstallation # of BogoSec components ########################################################### DESTDIR=$(prefix) all: @echo @echo Nothing to be done... please use \'make install\' to install. @echo install: @echo Installing bogosec... cp bogosec $(DESTDIR)/usr/bin/ chmod a+rx $(DESTDIR)/usr/bin/bogosec cp bogosec_wrapper $(DESTDIR)/usr/bin/ chmod a+rx $(DESTDIR)/usr/bin/bogosec_wrapper cp bogosec.conf $(DESTDIR)/etc/ chmod a+r $(DESTDIR)/etc/bogosec.conf mkdir -p $(DESTDIR)/usr/lib/bogosec/plugins chmod -R a+r $(DESTDIR)/usr/lib/bogosec/ cp plugins/*.pm $(DESTDIR)/usr/lib/bogosec/plugins/ chmod a+r $(DESTDIR)/usr/lib/bogosec/plugins/*.pm cp man/bogosec.1 $(DESTDIR)/usr/share/man/man1/ chmod a+r $(DESTDIR)/usr/share/man/man1/bogosec.1 cp man/bogosec_wrapper.1 $(DESTDIR)/usr/share/man/man1/ chmod a+r $(DESTDIR)/usr/share/man/man1/bogosec_wrapper.1 @echo done! uninstall: @echo Uninstalling bogosec... rm -f $(DESTDIR)/usr/bin/bogosec rm -f $(DESTDIR)/usr/bin/bogosec_wrapper rm -f $(DESTDIR)/etc/bogosec.conf rm -rf $(DESTDIR)/usr/lib/bogosec/ rm $(DESTDIR)/usr/share/man/man1/bogosec_wrapper.1 rm $(DESTDIR)/usr/share/man/man1/bogosec.1 @echo done! bogosec.orig/bogosec0000755000175000017500000003570711113035142014740 0ustar owensmkowensmk#!/usr/bin/perl ########################################################### # # Licensed Material - Property of IBM # # BogoSec - Source Code Security Quality Metric Calculator # # (C) Copyright IBM Corp. 2004-2008 # # FILE : bogosec # # PURPOSE: File to run differnt scanner and analyze their output # to calulate a level of security for the input code target. # # HISTORY: # 07/2004 originated by: # Tony Petz (petz.agoston@gmail.com) # Dustin Kirkland (dustin.kirkland@us.ibm.com) # 01/2005 Loulwa Salem (loulwa@us.ibm.com) - add compiler based scanner functionality # 01/2005 Loulwa Salem (loulwa@us.ibm.com) - Changes to improve code readability. # 02/2005 Loulwa Salem (loulwa@us.ibm.com) - replaced shell commands with Perl code. # 03/2005 Loulwa Salem (loulwa@us.ibm.com) - Added timeout option # 07/2005 Loulwa Salem (loulwa@us.ibm.com) - New option to exclude vulnerabilities # Code to keep track of all vulnerability types found ########################################################### use strict; # load modules # needed for proper command line option handling use Getopt::Long; # liberal use of temporary files/directories use File::Temp; # To use files copy and move operations use File::Copy; # execute each scanner in a separate thread use Thread qw(async); # module to abtain the absolute path of the target use Cwd 'abs_path'; # globals and default values my %OPTS = ( global_config_file => "/etc/bogosec.conf", config_file => "$ENV{HOME}/.bogosecrc", log_dir => "$ENV{PWD}/", logging => undef, min_sev => 0, no_header_files => undef, plugin_dir => "/usr/lib/bogosec/plugins/", sev_range_max => 10, scan_timeout => undef, temp_log_dir => "/tmp/", exclude_vuln => undef, verbosity => 0 ); my $TARGET = ""; my $TARGET_FILE = ""; my $DELETE_TARGET = 0; my @PLUGINS = (); my %LOGFILES = {}; my %PLUGIN_ARGS = {}; my %RESULTS = {}; my %THREADS = {}; my @ALL_FILES = (); my %ALL_FILES = {}; my $SCORE = ""; my $SEV_PTS = ""; my @PLUGINS_USED = (); my $TOTAL_LINES = 0; my @LIST_OF_FILES = (); my %STATUS = {}; my $NEW_DIR = ""; my %Vuln = (); #my $V_list = ""; sub usage() { # display command line usage information print "Usage: bogosec [options] TARGET\n"; print "OPTIONS:\n"; print "\t-l\t\t\t\tenable logging\n"; print "\t--logdir \t\t\tchange log directory\n"; print "\t--min-sev <0-10>\t\tchange min sev cutoff\n"; print "\t--nhf\t\t\t\tdon't scan header files\n"; print "\t-p [args]\t\trun with specified plugin/args\n"; print "\t--plugin-dir \t\tuse plugin-dir instead of default\n"; print "\t--sev-range-max \t\tchange maximum severity range\n"; print "\t--timeout \t\t\tset cpu timeout in seconds\n"; print "\t--temp-log-dir \t\tchange temporary logging directory\n"; print "\t-v <0|1>\t\t\tenable/disable verbose output\n"; print "\t--xp \t\t\texclude plugin\n"; print "\t--xv \texclude vulnerabilities\n"; print "\nplease see manpage for more documentation\n\n"; } sub round($) { # simple round-to-nearest-integer function if ( ($_[0] - int($_[0])) < 0.5 ) { return int($_[0]); } else { return int($_[0]) + 1; } } sub check_directories() { # make sure all directories in %OPTS have a trailing slash if ($OPTS{log_dir} !~ m/^.*\/$/) { $OPTS{log_dir} .= "/"; } if ($OPTS{plugin_dir} !~ m/^.*\/$/) { $OPTS{plugin_dir} .= "/"; } if ($OPTS{temp_log_dir} !~ m/^.*\/$/) { $OPTS{temp_log_dir} .= "/"; } } sub parse_config($) { # overide any defaults with options specified in configuration file if (-f $_[0]) { open(FH,"<$_[0]") || die("Cannot open config file: $_[0]\n"); while () { s/#.*//; (my $keyword) = m/^\s*(\w+)/; $keyword =~ s/-/_/g; if (exists($OPTS{$keyword})) { ($OPTS{$keyword}) = m/^\s*\w+\s*(.*)$/; } elsif (length($keyword) != 0) { print "Error in config file $_[0]: $keyword is not a valid configuration paramter!\n"; } } } } sub parse_cmd_line() { # read command line options my @plugin_list = (); my $vuln_list = ""; my @exclude_list = (); my @omitted_directories = (); my $result_cmd_read = GetOptions(\%OPTS, 'exclude_plugin|exclude-plugin|xp=s' => \@exclude_list, 'log_dir|log-dir=s', 'logging|l', 'min_sev|min-sev|minimum-severity=i', 'no_header_files|no-header-files|nhf', 'plugin|p=s' => \@plugin_list, 'plugin_dir|plugin-dir=s', 'sev_range_max|sev-range-max=i', 'scan_timeout|timeout=i', 'temp_log_dir|temp-log-dir=s', 'exclude_vuln|exclude-vuln|xv=s', 'verbosity|v=i', ); if ($result_cmd_read != 1 || $#ARGV != 0) { usage(); exit 1; } # get absolute target path (works if user enters . or ../DIR type targets) $TARGET = abs_path($ARGV[0]); # verify target if (! -f $TARGET && ! -d $TARGET) { print "Error: target \"$TARGET\" is not a valid file or directory.\n"; exit 1; } # check if target is a tar.gz or .tgz ball $TARGET_FILE = $TARGET; if ( ($TARGET =~ /\.tar\.gz$/) || ($TARGET =~ /\.tgz$/) ) { $TARGET = unpack_tarball($TARGET); # check if target is a src.rpm file } elsif ( ($TARGET =~ /\.src\.rpm$/) ) { $TARGET = unpack_srcrpm($TARGET); } elsif ( ($TARGET =~ /\.dsc$/) ) { $TARGET = unpack_dsc($TARGET); } # verify plugin dir if (! -d $OPTS{plugin_dir}) { print "Error: \"$OPTS{plugin_dir}\" is not a valid directory.\n"; exit 1; } unshift(@INC, $OPTS{plugin_dir}); # process specified pluggins if ($#plugin_list >= 0) { foreach (@plugin_list) { (my $plugin) = m/^\s*(\w+)/; (my $args) = m/^\s*\w+\s*(.*)$/; push(@PLUGINS, $plugin); $PLUGIN_ARGS{$plugin} = $args; } } else { # user did not define a list of plugins to use (default) opendir(DH,$OPTS{plugin_dir}); my @available_modules = readdir(DH); foreach my $mod (@available_modules) { if ( $mod =~ /\.pm$/ ) { $mod =~ s/\.pm$//g; push(@PLUGINS, $mod); } } closedir(DH); } # process vulnerabilities exclude list #$V_list = $OPTS{exclude_vuln}; # process plugin exclude list (useful if one scanner/plugin is problematic) if ($#exclude_list >= 0) { foreach (@exclude_list) { for (my $i=0;$i<=$#PLUGINS;$i++) { if ($PLUGINS[$i] =~ m/^$_$/) { splice(@PLUGINS,$i,1); } } } } } sub unpack_tarball($) { # unpack archive file to a temp directory my $target = shift @_; my $new_target = mkdtemp($OPTS{temp_log_dir} . "bogosec.temp_target.XXXXXX"); `tar -zxvf $target -C $new_target`; if ( $? != 0 ) { print("Error: unable to extract $target\n"); exit 1; } $DELETE_TARGET = 1; return $new_target; } sub unpack_srcrpm($) { # unpack src.rpm file to temp directory, rebuild it and apply the patches my $target = shift @_; my $spec_file = ""; $NEW_DIR = mkdtemp($OPTS{temp_log_dir} . "bogosec.temp_rpm.XXXXXX"); # only BUILD directory needs to be created, SOURCES and SPECS are created automatically mkdir($NEW_DIR . "/BUILD", 0700); # Backup ~/.rpmmacros file if it exists, then create a new file to make the rpm mechanism # put its output in the specified directory rather than the default location if (-e"$ENV{HOME}/.rpmmacros") { move("$ENV{HOME}/.rpmmacros", "$ENV{HOME}/.rpmmacros.save"); } open(FH, ">$ENV{HOME}/.rpmmacros") || die "Cannot open ~/.rpmmacros \n"; print FH "%_topdir $NEW_DIR"; close(FH); # Install the target using rpm, then use rpmbuild to only execute the %prep section # of spec file (this unpacks the source to BUILD and applies the patches). `rpm -ivh $target`; # This following block of code eliminates the . and .. from the directory listing to ensure # they do not cause any problems in obtaining the spec filename. opendir(DH,"$NEW_DIR/SPECS"); while (my $entry = readdir(DH)) { if ($entry =~/^[\.]{1,2}$/) { next; } else { $spec_file = $entry; } } closedir(DH); chomp($spec_file); `rpmbuild -bp $NEW_DIR/SPECS/$spec_file 2>/dev/null`; if ( $? != 0 ) { print "Error: rpmbuild did not execute correctly\n"; move("$ENV{HOME}/.rpmmacros.save", "$ENV{HOME}/.rpmmacros"); `rm -rf $NEW_DIR`; exit 1; } my $new_target = $NEW_DIR. "/BUILD"; # Restore original ~/.rpmmacros if (-e"$ENV{HOME}/.rpmmacros.save") { move("$ENV{HOME}/.rpmmacros.save", "$ENV{HOME}/.rpmmacros"); } $DELETE_TARGET = 1; return $new_target; } sub unpack_dsc($) { # unpack Debian source to a temp directory my $target = shift @_; my $new_target = mkdtemp($OPTS{temp_log_dir} . "bogosec.temp_target.XXXXXX"); `dpkg-source -x $target "$new_target/src" 2>/dev/null`; if ( $? != 0 ) { print("Error: unable to extract $target\n"); exit 1; } $DELETE_TARGET = 1; return $new_target; } sub severity_stats() { # extended analysis routine # somewhat limited, as this requires severities 0-10 (default) print "\nScanner hits break down by severity level\n"; # 0 1 2 3 4 5 6 7 8 9 10 my @severities = (0,0,0,0,0,0,0,0,0,0,0); my $total_sev = 0; foreach my $file (@ALL_FILES) { for (my $i=0; $i<$#{$ALL_FILES{$file}}; $i++) { if (defined($ALL_FILES{$file}[$i])) { my $avg = 0; my @nums = split(" ",$ALL_FILES{$file}[$i]); foreach (@nums) { $avg += $_; } $avg = $avg/($#nums + 1); $avg = round($avg); @severities[$avg]++; } } } foreach (@severities) { $total_sev += $_; } for (my $i=1; $i<=10; $i++) { my $bar = ($severities[$i]/$total_sev) * 50; $bar = round($bar); print "[$i] |"; for (my $j=0; $j<$bar; $j++) { print "x"; } print "($severities[$i])\n"; } print "\n"; } # useful test/debug subroutines # ----------------------------- sub dump_opt() { print "\n\nOPTS\n\n"; while (my ($k, $v) = each %OPTS) { print "$k : $v\n"; } print "\plugins\n----\n"; print "@PLUGINS\n....................\n"; } sub verify_data_struct() { print "verify data structure...\n--------------------\n"; foreach my $plugin (@PLUGINS) { print " * Analysis by $plugin *\n"; foreach my $result (@{$RESULTS{$plugin}}) { print "$result\n"; } } } sub verify_analysis() { print "verifying analysis data structures...\n-------------------\n"; print "\@ALL_FILES contains:\n"; foreach (@ALL_FILES) { print; print " "; } print "\n"; foreach my $file (@ALL_FILES) { print "\$ALL_FILES{$file} = $ALL_FILES{$file}\n"; for (my $i = 0; $i < $#{$ALL_FILES{$file}}; $i++) { if (defined($ALL_FILES{$file}[$i])) { print "[$i] : $ALL_FILES{$file}[$i]\n"; } } } } # ----------------------------- # end useful test/debug subroutines ################### # MAIN BODY # ################### # Load defaults, configuration file, command line options parse_config($OPTS{global_config_file}); parse_config($OPTS{config_file}); parse_cmd_line(); check_directories(); # check scanner plugin list if ($#PLUGINS < 0) { print "Error: no plugins defined (or no plugins found in directory \"$OPTS{plugin_dir}\")\n"; exit 1; } # load scanner plugins foreach my $mod (@PLUGINS) { eval "use $mod;"; } # Run each scanner multithreaded foreach my $plugin (@PLUGINS) { my $scanner = eval("$plugin\:\:name();"); @LIST_OF_FILES = (); if (eval("$plugin\:\:exists();")) { my $path = $scanner; my $default_args = eval("$plugin\:\:get_args();"); (my $FH, $LOGFILES{$plugin}) = mkstemp($OPTS{temp_log_dir} . "bogosec.$scanner.log.XXXXXX"); if ($OPTS{no_header_files}) { @LIST_OF_FILES = `find $TARGET | egrep -i '(\\.c\$|\\.cpp\$|\\.c\\+\\+\$)'`; } else { @LIST_OF_FILES = `find $TARGET | egrep -i '(\\.c\$|\\.cpp\$|\\.c\\+\\+\$|\\.h\$)'`; } $THREADS{$plugin} = async { my $compiler_based = eval("$plugin\:\:does_compile();"); print("Running $scanner...\n"); # if scanner is compiler based, then use the run() function in the plugin if ($compiler_based) { eval("$plugin\:\:run(\$LOGFILES{\$plugin},\$TARGET_FILE,\$TARGET);"); } else { # else execute the static analysis scanners on each file # following three lines will print the command running on files at the top of each scanner log file. open(FH, ">$LOGFILES{$plugin}") || die "Cannot open $LOGFILES{$plugin}\n"; print FH "COMMAND : $path $default_args \n"; close(FH); foreach my $file (@LIST_OF_FILES) { chomp($file); # if user defined a timeout option, set cpu time limit then run scanners. Else run scanners without limit if (defined($OPTS{scan_timeout})) { `ulimit -t $OPTS{scan_timeout}; $path $default_args $file >> $LOGFILES{$plugin} 2>&1`; } else { `$path $default_args $file >> $LOGFILES{$plugin} 2>&1`; } if ( $? != 0 ) { print("Warning: $scanner failed with error code ( $? ) on file $file\n"); } } } # ";" on following line is required by async(). }; push(@PLUGINS_USED, $plugin); } } foreach my $plugin (@PLUGINS_USED) { $STATUS{$plugin} = $THREADS{$plugin}->join; $RESULTS{$plugin} = eval("$plugin\:\:analyze(\$LOGFILES{\$plugin}, \$TARGET, \$OPTS{sev_range_max}, \$OPTS{exclude_vuln});"); # if logging option specified, then copy log files to the log directory first. if (defined($OPTS{logging})) { my $logfile = $OPTS{log_dir} . eval("$plugin\:\:name();") . ".log"; `cp $LOGFILES{$plugin} $logfile`; } unlink($LOGFILES{$plugin}); } # parse analysis foreach my $plugin (@PLUGINS_USED) { my $this_score = 0; my $this_lines = shift @{$RESULTS{$plugin}}; if (!defined($this_lines)) { $this_lines = 0; foreach my $file (@LIST_OF_FILES) { chomp($file); # BUG: we should use sloccount here! $this_lines += `wc -l $file`; } } if ($STATUS{$plugin} eq "Error") { print "Error: $plugin encountered a problem and will be excluded from final calculation\n"; $this_lines = 0; } $TOTAL_LINES += $this_lines; foreach my $result (@{$RESULTS{$plugin}}) { my ($file, $line, $score, $vulnerability) = split(/:/, $result); if ($score >= $OPTS{min_sev}) { if (!exists($ALL_FILES{$file})) { push(@ALL_FILES, $file); } $ALL_FILES{$file}[$line] .= "$score "; if ($STATUS{$plugin} eq "Error") { $score = 0; } $SEV_PTS += $score; $this_score += $score; } $Vuln{$vulnerability}++; } print(eval("$plugin\:\:name();") . "\n " . round($this_score) . " points\n $this_lines lines\n"); } my @vuln = split(/:/, $OPTS{exclude_vuln}); if ($#vuln >= 0) { print "\nVulnerabilities excluded are: \n"; foreach (@vuln) { print "$_ "; } print "\n"; } print "\nDetailed Vulnerability Count:\n"; my @key = keys %Vuln; my @value = values %Vuln; while(@key) { print "\t", pop(@key), '=', pop(@value), "\n"; } # If user scanned tar.gz or src.rpm file, delete temp target if ($DELETE_TARGET) { `rm -rf $TARGET`; `rm -rf $NEW_DIR`; } # Put conditional to avoid divide by zero case # calculate final score if ( $TOTAL_LINES != 0 ) { $SCORE = $SEV_PTS/$TOTAL_LINES; } else { $SCORE = 0; } # more verbose output if ($OPTS{verbosity} > 0) { if ($OPTS{sev_range_max} != 10) { print "\nNOTE: Extra verbosity cannot be used when sev_range_max is modified\n\n"; } else { severity_stats(); } } # debug calls... # verify_analysis(); # verify_data_struct(); # dump_opt(); print(">>> Using scanners: ("); foreach my $plugin (@PLUGINS_USED) { print(eval("$plugin\:\:name();") . " "); } print ")\n"; print(">>> " . round($SEV_PTS) . " total severity points\n"); print ">>> " . $TOTAL_LINES . " total lines of code scanned\n"; print ">>> final score = $SCORE\n"; exit 0; bogosec.orig/bogosec.conf0000644000175000017500000000003011113035142015636 0ustar owensmkowensmk# BogoSec resource file